@brightspot/ui 1.4.1 → 1.5.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 (80) hide show
  1. package/README.md +12 -0
  2. package/dist/components/avatar/Avatar.d.ts +1 -1
  3. package/dist/components/avatar/Avatar.d.ts.map +1 -1
  4. package/dist/components/avatar/Avatar.js +3 -1
  5. package/dist/components/avatar/Avatar.js.map +1 -1
  6. package/dist/components/popover/Popover.d.ts +161 -0
  7. package/dist/components/popover/Popover.d.ts.map +1 -0
  8. package/dist/components/popover/Popover.js +436 -0
  9. package/dist/components/popover/Popover.js.map +1 -0
  10. package/dist/components/widget/Widget.css +104 -0
  11. package/dist/components/widget/Widget.d.ts +170 -0
  12. package/dist/components/widget/Widget.d.ts.map +1 -0
  13. package/dist/components/widget/Widget.js +434 -0
  14. package/dist/components/widget/Widget.js.map +1 -0
  15. package/dist/custom-elements.json +687 -184
  16. package/dist/global.d.ts +5 -0
  17. package/dist/storybook/assets/{Avatar.stories-QxWs-YfX.js → Avatar.stories-CPVNxsaA.js} +37 -32
  18. package/dist/storybook/assets/AvatarGroup.stories-Bl65NGHl.js +225 -0
  19. package/dist/storybook/assets/{Badge.stories-BpaApWbR.js → Badge.stories-Bbnc6fRy.js} +1 -1
  20. package/dist/storybook/assets/{Button.stories-C5h2usmd.js → Button.stories-CRJ5n2y4.js} +1 -1
  21. package/dist/storybook/assets/{CircularProgress.stories-DlPOiGja.js → CircularProgress.stories-D9vBj3JJ.js} +1 -1
  22. package/dist/storybook/assets/{ClipboardMixin.stories-Bb45-UOM.js → ClipboardMixin.stories-Dm-Jm4yb.js} +7 -7
  23. package/dist/storybook/assets/Color-6BZIO3FS-BcNIJY1U.js +1 -0
  24. package/dist/storybook/assets/{Colors.stories-DP2JKWUJ.js → Colors.stories-B9_090wL.js} +1 -1
  25. package/dist/storybook/assets/ComponentStatesMixin-ChiFBCuo.js +1 -0
  26. package/dist/storybook/assets/{ComponentStatesMixin.stories-CyQ2aSTu.js → ComponentStatesMixin.stories-DHv9MHmE.js} +3 -3
  27. package/dist/storybook/assets/{CopyToClipboard.stories-DR7pckeV.js → CopyToClipboard.stories-gtJlTP1l.js} +1 -1
  28. package/dist/storybook/assets/{Debounce.stories-hkqyvqmg.js → Debounce.stories-BBNX7mJA.js} +1 -1
  29. package/dist/storybook/assets/{DocsRenderer-LL677BLK-Dtw9GMer.js → DocsRenderer-LL677BLK-D-E99pXl.js} +6 -6
  30. package/dist/storybook/assets/{Events.stories-BAgDzdyl.js → Events.stories-DDmydlh_.js} +1 -1
  31. package/dist/storybook/assets/{Heading.stories-CN_fPsRf.js → Heading.stories-BLGfko-i.js} +1 -1
  32. package/dist/storybook/assets/{Icon.stories-CSx_2K8V.js → Icon.stories-BHnAGcFF.js} +1 -1
  33. package/dist/storybook/assets/{LinearProgress.stories-In48DY2g.js → LinearProgress.stories-Dx26a0P_.js} +1 -1
  34. package/dist/storybook/assets/Popover.stories-CbqpY6YR.js +431 -0
  35. package/dist/storybook/assets/ReadyMixin-BHiHoIbr.js +1 -0
  36. package/dist/storybook/assets/{Rtc.stories-19d7WXe4.js → Rtc.stories-CAjDv_Ub.js} +1 -1
  37. package/dist/storybook/assets/{ScrollShadow.stories-BFjracVd.js → ScrollShadow.stories-BSV4U-tq.js} +1 -1
  38. package/dist/storybook/assets/{Throttle.stories-DD6ydiVq.js → Throttle.stories-kaxXQ8RZ.js} +1 -1
  39. package/dist/storybook/assets/Tooltip.stories-CsxXkztr.js +143 -0
  40. package/dist/storybook/assets/Widget.stories-DqATHnSq.js +233 -0
  41. package/dist/storybook/assets/{WithTooltip-65CFNBJE-Be1dKqOF.js → WithTooltip-65CFNBJE-BtbbFYSA.js} +2 -2
  42. package/dist/storybook/assets/custom-element-UsVr97OX.js +1 -0
  43. package/dist/storybook/assets/{formatter-EIJCOSYU-anC2P5HS.js → formatter-EIJCOSYU-C87Csnpu.js} +1 -1
  44. package/dist/storybook/assets/if-defined-COHr0XBn.js +1 -0
  45. package/dist/storybook/assets/{iframe-B4njXYq6.css → iframe-BkDGeDre.css} +1 -1
  46. package/dist/storybook/assets/{iframe-Bl9oHz5c.js → iframe-CcloOV09.js} +77 -77
  47. package/dist/storybook/assets/{index-Cn5E5A3G.js → index-DP7vnJf7.js} +1 -1
  48. package/dist/storybook/assets/{onFind.stories-BMDLUk0l.js → onFind.stories-BxvoC-Z-.js} +1 -1
  49. package/dist/storybook/assets/{onRemove.stories-C3FcxtYh.js → onRemove.stories-Dwoixzb0.js} +1 -1
  50. package/dist/storybook/assets/{onVisible.stories-B8Zyu0Th.js → onVisible.stories-CinmRF9w.js} +1 -1
  51. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-BfTKsIVL.js → syntaxhighlighter-ED5Y7EFY-BHLkDkOn.js} +1 -1
  52. package/dist/storybook/iframe.html +2 -2
  53. package/dist/storybook/index.json +1 -1
  54. package/dist/storybook/project.json +1 -1
  55. package/dist/tailwind-plugin-popover.d.ts +2 -0
  56. package/dist/tailwind-plugin-popover.d.ts.map +1 -0
  57. package/dist/tailwind-plugin-popover.js +177 -0
  58. package/dist/tailwind-plugin-popover.js.map +1 -0
  59. package/dist/tailwind-plugin-popover.ts +202 -0
  60. package/dist/tailwind-plugin-tooltip.d.ts +2 -0
  61. package/dist/tailwind-plugin-tooltip.d.ts.map +1 -0
  62. package/dist/tailwind-plugin-tooltip.js +184 -0
  63. package/dist/tailwind-plugin-tooltip.js.map +1 -0
  64. package/dist/tailwind-plugin-tooltip.ts +209 -0
  65. package/dist/util/EventEmitterMixin.d.ts +11 -0
  66. package/dist/util/EventEmitterMixin.d.ts.map +1 -1
  67. package/dist/util/EventEmitterMixin.js +1 -1
  68. package/dist/util/EventEmitterMixin.js.map +1 -1
  69. package/dist/util/TooltipController.d.ts +37 -0
  70. package/dist/util/TooltipController.d.ts.map +1 -0
  71. package/dist/util/TooltipController.js +133 -0
  72. package/dist/util/TooltipController.js.map +1 -0
  73. package/dist/util/TooltipMixin.d.ts +42 -0
  74. package/dist/util/TooltipMixin.d.ts.map +1 -0
  75. package/dist/util/TooltipMixin.js +401 -0
  76. package/dist/util/TooltipMixin.js.map +1 -0
  77. package/package.json +1 -1
  78. package/dist/storybook/assets/AvatarGroup.stories-Cy_Bvn7E.js +0 -211
  79. package/dist/storybook/assets/Color-6BZIO3FS-CcgGYVAo.js +0 -1
  80. package/dist/storybook/assets/ComponentStatesMixin-B7ci0thi.js +0 -1
@@ -2,150 +2,6 @@
2
2
  "schemaVersion": "1.0.0",
3
3
  "readme": "",
4
4
  "modules": [
5
- {
6
- "kind": "javascript-module",
7
- "path": "src/components/badge/Badge.ts",
8
- "declarations": [
9
- {
10
- "kind": "class",
11
- "description": "A badge component for highlighting important information.\n\nBadges help highlight notifications, status, or new messages.\nPrimarily used for communicating secondary or additional information.",
12
- "name": "Badge",
13
- "cssProperties": [
14
- {
15
- "description": "Text color (overrides theme color)",
16
- "name": "--badge-color-foreground"
17
- },
18
- {
19
- "description": "Background color (overrides theme color)",
20
- "name": "--badge-color-background"
21
- },
22
- {
23
- "description": "Border radius size (overrides shape default, default: 999px)",
24
- "name": "--badge-radius-size"
25
- },
26
- {
27
- "description": "Horizontal padding (overrides size default)",
28
- "name": "--badge-px"
29
- },
30
- {
31
- "description": "Vertical padding (overrides size default)",
32
- "name": "--badge-py"
33
- },
34
- {
35
- "description": "Size of the dot affordance (default: 6px)",
36
- "name": "--badge-dot-size"
37
- }
38
- ],
39
- "members": [
40
- {
41
- "kind": "field",
42
- "name": "variant",
43
- "type": {
44
- "text": "'info' | 'primary' | 'error' | 'success' | 'warning'"
45
- },
46
- "default": "'info'",
47
- "description": "Style of the badge.\n- 'info': Informational (default)\n- 'primary': Primary action or emphasis\n- 'error': Error or danger state\n- 'success': Success or completion state\n- 'warning': Warning or caution state",
48
- "attribute": "variant"
49
- },
50
- {
51
- "kind": "field",
52
- "name": "dot",
53
- "type": {
54
- "text": "boolean"
55
- },
56
- "default": "false",
57
- "description": "Should a dot be displayed before the label?",
58
- "attribute": "dot"
59
- },
60
- {
61
- "kind": "field",
62
- "name": "size",
63
- "type": {
64
- "text": "string"
65
- },
66
- "default": "'sm'",
67
- "description": "Size variant.\n- 'sm': Small (default)\n- 'md': Medium\n- 'lg': Large",
68
- "attribute": "size"
69
- }
70
- ],
71
- "events": [
72
- {
73
- "type": {
74
- "text": "CustomEvent"
75
- },
76
- "description": "Fired after first render and initialization",
77
- "name": "btu-badge-ready"
78
- }
79
- ],
80
- "attributes": [
81
- {
82
- "name": "variant",
83
- "type": {
84
- "text": "'info' | 'primary' | 'error' | 'success' | 'warning'"
85
- },
86
- "default": "'info'",
87
- "description": "Style of the badge.\n- 'info': Informational (default)\n- 'primary': Primary action or emphasis\n- 'error': Error or danger state\n- 'success': Success or completion state\n- 'warning': Warning or caution state",
88
- "fieldName": "variant",
89
- "attribute": "variant"
90
- },
91
- {
92
- "name": "dot",
93
- "type": {
94
- "text": "boolean"
95
- },
96
- "default": "false",
97
- "description": "Should a dot be displayed before the label?",
98
- "fieldName": "dot",
99
- "attribute": "dot"
100
- },
101
- {
102
- "name": "size",
103
- "type": {
104
- "text": "string"
105
- },
106
- "default": "'sm'",
107
- "description": "Size variant.\n- 'sm': Small (default)\n- 'md': Medium\n- 'lg': Large",
108
- "fieldName": "size",
109
- "attribute": "size"
110
- }
111
- ],
112
- "mixins": [
113
- {
114
- "name": "EventEmitterMixin",
115
- "module": "/src/util/EventEmitterMixin.js"
116
- },
117
- {
118
- "name": "ReadyMixin",
119
- "module": "/src/util/ReadyMixin.js"
120
- }
121
- ],
122
- "superclass": {
123
- "name": "LitElement",
124
- "package": "lit"
125
- },
126
- "tagName": "btu-badge",
127
- "customElement": true
128
- }
129
- ],
130
- "exports": [
131
- {
132
- "kind": "js",
133
- "name": "default",
134
- "declaration": {
135
- "name": "Badge",
136
- "module": "src/components/badge/Badge.ts"
137
- }
138
- },
139
- {
140
- "kind": "custom-element-definition",
141
- "name": "btu-badge",
142
- "declaration": {
143
- "name": "Badge",
144
- "module": "src/components/badge/Badge.ts"
145
- }
146
- }
147
- ]
148
- },
149
5
  {
150
6
  "kind": "javascript-module",
151
7
  "path": "src/components/avatar/Avatar.ts",
@@ -284,6 +140,10 @@
284
140
  }
285
141
  ],
286
142
  "mixins": [
143
+ {
144
+ "name": "TooltipMixin",
145
+ "module": "/src/util/TooltipMixin.js"
146
+ },
287
147
  {
288
148
  "name": "EventEmitterMixin",
289
149
  "module": "/src/util/EventEmitterMixin.js"
@@ -558,35 +418,68 @@
558
418
  },
559
419
  {
560
420
  "kind": "javascript-module",
561
- "path": "src/components/copy-to-clipboard/CopyToClipboard.ts",
421
+ "path": "src/components/badge/Badge.ts",
562
422
  "declarations": [
563
423
  {
564
424
  "kind": "class",
565
- "description": "A button component that copies text to the system clipboard.\n\nProvides visual feedback when text is successfully copied by applying\na temporary state that can be styled with CSS.",
566
- "name": "CopyToClipboard",
425
+ "description": "A badge component for highlighting important information.\n\nBadges help highlight notifications, status, or new messages.\nPrimarily used for communicating secondary or additional information.",
426
+ "name": "Badge",
427
+ "cssProperties": [
428
+ {
429
+ "description": "Text color (overrides theme color)",
430
+ "name": "--badge-color-foreground"
431
+ },
432
+ {
433
+ "description": "Background color (overrides theme color)",
434
+ "name": "--badge-color-background"
435
+ },
436
+ {
437
+ "description": "Border radius size (overrides shape default, default: 999px)",
438
+ "name": "--badge-radius-size"
439
+ },
440
+ {
441
+ "description": "Horizontal padding (overrides size default)",
442
+ "name": "--badge-px"
443
+ },
444
+ {
445
+ "description": "Vertical padding (overrides size default)",
446
+ "name": "--badge-py"
447
+ },
448
+ {
449
+ "description": "Size of the dot affordance (default: 6px)",
450
+ "name": "--badge-dot-size"
451
+ }
452
+ ],
567
453
  "members": [
568
454
  {
569
455
  "kind": "field",
570
- "name": "copydata",
456
+ "name": "variant",
571
457
  "type": {
572
- "text": "string | undefined"
458
+ "text": "'info' | 'primary' | 'error' | 'success' | 'warning'"
573
459
  },
574
- "description": "The text to be copied to the system clipboard.",
575
- "attribute": "copydata"
460
+ "default": "'info'",
461
+ "description": "Style of the badge.\n- 'info': Informational (default)\n- 'primary': Primary action or emphasis\n- 'error': Error or danger state\n- 'success': Success or completion state\n- 'warning': Warning or caution state",
462
+ "attribute": "variant"
576
463
  },
577
464
  {
578
465
  "kind": "field",
579
- "name": "buttonClasses",
466
+ "name": "dot",
580
467
  "type": {
581
- "text": "string | undefined"
468
+ "text": "boolean"
582
469
  },
583
- "description": "Custom CSS classes for the button. If provided, replaces the default classes.",
584
- "attribute": "buttonClasses"
470
+ "default": "false",
471
+ "description": "Should a dot be displayed before the label?",
472
+ "attribute": "dot"
585
473
  },
586
474
  {
587
- "kind": "method",
588
- "name": "copy",
589
- "description": "Copies the copydata to the system clipboard.\nDisplays a success state for 3 seconds after copying."
475
+ "kind": "field",
476
+ "name": "size",
477
+ "type": {
478
+ "text": "string"
479
+ },
480
+ "default": "'sm'",
481
+ "description": "Size variant.\n- 'sm': Small (default)\n- 'md': Medium\n- 'lg': Large",
482
+ "attribute": "size"
590
483
  }
591
484
  ],
592
485
  "events": [
@@ -595,45 +488,156 @@
595
488
  "text": "CustomEvent"
596
489
  },
597
490
  "description": "Fired after first render and initialization",
598
- "name": "btu-clipboard-ready"
599
- },
600
- {
601
- "type": {
602
- "text": "CustomEvent"
603
- },
604
- "description": "Fired when text is successfully copied to clipboard",
605
- "name": "btu-clipboard-copied"
491
+ "name": "btu-badge-ready"
606
492
  }
607
493
  ],
608
494
  "attributes": [
609
495
  {
610
- "name": "copydata",
496
+ "name": "variant",
611
497
  "type": {
612
- "text": "string | undefined"
498
+ "text": "'info' | 'primary' | 'error' | 'success' | 'warning'"
613
499
  },
614
- "description": "The text to be copied to the system clipboard.",
615
- "fieldName": "copydata",
616
- "attribute": "copydata"
500
+ "default": "'info'",
501
+ "description": "Style of the badge.\n- 'info': Informational (default)\n- 'primary': Primary action or emphasis\n- 'error': Error or danger state\n- 'success': Success or completion state\n- 'warning': Warning or caution state",
502
+ "fieldName": "variant",
503
+ "attribute": "variant"
617
504
  },
618
505
  {
619
- "name": "buttonClasses",
506
+ "name": "dot",
620
507
  "type": {
621
- "text": "string | undefined"
508
+ "text": "boolean"
622
509
  },
623
- "description": "Custom CSS classes for the button. If provided, replaces the default classes.",
624
- "fieldName": "buttonClasses",
625
- "attribute": "buttonClasses"
510
+ "default": "false",
511
+ "description": "Should a dot be displayed before the label?",
512
+ "fieldName": "dot",
513
+ "attribute": "dot"
514
+ },
515
+ {
516
+ "name": "size",
517
+ "type": {
518
+ "text": "string"
519
+ },
520
+ "default": "'sm'",
521
+ "description": "Size variant.\n- 'sm': Small (default)\n- 'md': Medium\n- 'lg': Large",
522
+ "fieldName": "size",
523
+ "attribute": "size"
626
524
  }
627
525
  ],
628
526
  "mixins": [
629
- {
630
- "name": "ClipboardMixin",
631
- "module": "/src/util/ClipboardMixin.js"
632
- },
633
- {
634
- "name": "ComponentStatesMixin",
635
- "module": "/src/util/ComponentStatesMixin.js"
636
- },
527
+ {
528
+ "name": "EventEmitterMixin",
529
+ "module": "/src/util/EventEmitterMixin.js"
530
+ },
531
+ {
532
+ "name": "ReadyMixin",
533
+ "module": "/src/util/ReadyMixin.js"
534
+ }
535
+ ],
536
+ "superclass": {
537
+ "name": "LitElement",
538
+ "package": "lit"
539
+ },
540
+ "tagName": "btu-badge",
541
+ "customElement": true
542
+ }
543
+ ],
544
+ "exports": [
545
+ {
546
+ "kind": "js",
547
+ "name": "default",
548
+ "declaration": {
549
+ "name": "Badge",
550
+ "module": "src/components/badge/Badge.ts"
551
+ }
552
+ },
553
+ {
554
+ "kind": "custom-element-definition",
555
+ "name": "btu-badge",
556
+ "declaration": {
557
+ "name": "Badge",
558
+ "module": "src/components/badge/Badge.ts"
559
+ }
560
+ }
561
+ ]
562
+ },
563
+ {
564
+ "kind": "javascript-module",
565
+ "path": "src/components/copy-to-clipboard/CopyToClipboard.ts",
566
+ "declarations": [
567
+ {
568
+ "kind": "class",
569
+ "description": "A button component that copies text to the system clipboard.\n\nProvides visual feedback when text is successfully copied by applying\na temporary state that can be styled with CSS.",
570
+ "name": "CopyToClipboard",
571
+ "members": [
572
+ {
573
+ "kind": "field",
574
+ "name": "copydata",
575
+ "type": {
576
+ "text": "string | undefined"
577
+ },
578
+ "description": "The text to be copied to the system clipboard.",
579
+ "attribute": "copydata"
580
+ },
581
+ {
582
+ "kind": "field",
583
+ "name": "buttonClasses",
584
+ "type": {
585
+ "text": "string | undefined"
586
+ },
587
+ "description": "Custom CSS classes for the button. If provided, replaces the default classes.",
588
+ "attribute": "buttonClasses"
589
+ },
590
+ {
591
+ "kind": "method",
592
+ "name": "copy",
593
+ "description": "Copies the copydata to the system clipboard.\nDisplays a success state for 3 seconds after copying."
594
+ }
595
+ ],
596
+ "events": [
597
+ {
598
+ "type": {
599
+ "text": "CustomEvent"
600
+ },
601
+ "description": "Fired after first render and initialization",
602
+ "name": "btu-clipboard-ready"
603
+ },
604
+ {
605
+ "type": {
606
+ "text": "CustomEvent"
607
+ },
608
+ "description": "Fired when text is successfully copied to clipboard",
609
+ "name": "btu-clipboard-copied"
610
+ }
611
+ ],
612
+ "attributes": [
613
+ {
614
+ "name": "copydata",
615
+ "type": {
616
+ "text": "string | undefined"
617
+ },
618
+ "description": "The text to be copied to the system clipboard.",
619
+ "fieldName": "copydata",
620
+ "attribute": "copydata"
621
+ },
622
+ {
623
+ "name": "buttonClasses",
624
+ "type": {
625
+ "text": "string | undefined"
626
+ },
627
+ "description": "Custom CSS classes for the button. If provided, replaces the default classes.",
628
+ "fieldName": "buttonClasses",
629
+ "attribute": "buttonClasses"
630
+ }
631
+ ],
632
+ "mixins": [
633
+ {
634
+ "name": "ClipboardMixin",
635
+ "module": "/src/util/ClipboardMixin.js"
636
+ },
637
+ {
638
+ "name": "ComponentStatesMixin",
639
+ "module": "/src/util/ComponentStatesMixin.js"
640
+ },
637
641
  {
638
642
  "name": "EventEmitterMixin",
639
643
  "module": "/src/util/EventEmitterMixin.js"
@@ -881,6 +885,505 @@
881
885
  }
882
886
  }
883
887
  ]
888
+ },
889
+ {
890
+ "kind": "javascript-module",
891
+ "path": "src/components/popover/Popover.ts",
892
+ "declarations": [
893
+ {
894
+ "kind": "class",
895
+ "description": "A popover component for displaying rich interactive content anchored to a trigger element.\n\nUses the native HTML Popover API for top-layer rendering, light dismiss (click-outside\nand Escape for click triggers), and focus management. CSS anchor positioning handles\nviewport-aware placement.\n\nFor click triggers (`popover=\"auto\"`), the browser provides:\n- Light dismiss (Escape key and click-outside)\n- Top-layer rendering (no z-index needed)\n- Focus restoration on close\n- `autofocus` support — add `autofocus` to an element inside `slot=\"content\"`\n to have it receive focus when the popover opens",
896
+ "name": "Popover",
897
+ "slots": [
898
+ {
899
+ "description": "The element that activates the popover",
900
+ "name": "trigger"
901
+ },
902
+ {
903
+ "description": "Rich HTML content displayed inside the popover panel",
904
+ "name": "content"
905
+ }
906
+ ],
907
+ "members": [
908
+ {
909
+ "kind": "field",
910
+ "name": "position",
911
+ "type": {
912
+ "text": "'top' | 'bottom' | 'left' | 'right'"
913
+ },
914
+ "default": "'bottom'",
915
+ "description": "Position relative to the trigger element.\nAuto-flips when constrained by the viewport.",
916
+ "attribute": "position"
917
+ },
918
+ {
919
+ "kind": "field",
920
+ "name": "trigger",
921
+ "type": {
922
+ "text": "'click' | 'hover' | 'focus'"
923
+ },
924
+ "default": "'click'",
925
+ "description": "How the popover is activated.\n- 'click': Toggle on click with light dismiss\n- 'hover': Show on mouseenter with delay\n- 'focus': Show on focusin",
926
+ "attribute": "trigger"
927
+ },
928
+ {
929
+ "kind": "field",
930
+ "name": "delay",
931
+ "type": {
932
+ "text": "number"
933
+ },
934
+ "default": "300",
935
+ "description": "Show delay in milliseconds (hover trigger only).",
936
+ "attribute": "delay"
937
+ },
938
+ {
939
+ "kind": "field",
940
+ "name": "offset",
941
+ "type": {
942
+ "text": "PopoverOffset | null"
943
+ },
944
+ "default": "null",
945
+ "description": "Gap between trigger and popover (sm=4px, md=8px, lg=12px, xl=16px).",
946
+ "attribute": "offset"
947
+ },
948
+ {
949
+ "kind": "field",
950
+ "name": "noArrow",
951
+ "type": {
952
+ "text": "boolean"
953
+ },
954
+ "default": "false",
955
+ "description": "Hide the arrow pseudo-element.",
956
+ "attribute": "no-arrow"
957
+ },
958
+ {
959
+ "kind": "field",
960
+ "name": "open",
961
+ "type": {
962
+ "text": "boolean"
963
+ },
964
+ "default": "false",
965
+ "description": "Programmatic open/close state (reflected).",
966
+ "attribute": "open",
967
+ "reflects": true
968
+ },
969
+ {
970
+ "kind": "field",
971
+ "name": "panelLabel",
972
+ "type": {
973
+ "text": "string"
974
+ },
975
+ "default": "''",
976
+ "description": "Accessible label for the popover panel (applied as aria-label on the dialog).",
977
+ "attribute": "panel-label"
978
+ },
979
+ {
980
+ "kind": "field",
981
+ "name": "_onTriggerMouseLeave",
982
+ "privacy": "private"
983
+ },
984
+ {
985
+ "kind": "field",
986
+ "name": "_onTriggerFocusIn",
987
+ "privacy": "private"
988
+ },
989
+ {
990
+ "kind": "field",
991
+ "name": "_onTriggerFocusOut",
992
+ "privacy": "private"
993
+ },
994
+ {
995
+ "kind": "field",
996
+ "name": "_onPanelMouseEnter",
997
+ "privacy": "private"
998
+ },
999
+ {
1000
+ "kind": "field",
1001
+ "name": "_onPanelMouseLeave",
1002
+ "privacy": "private"
1003
+ },
1004
+ {
1005
+ "kind": "field",
1006
+ "name": "_onNativeToggle",
1007
+ "privacy": "private"
1008
+ },
1009
+ {
1010
+ "kind": "field",
1011
+ "name": "_onKeyDown",
1012
+ "privacy": "private"
1013
+ }
1014
+ ],
1015
+ "events": [
1016
+ {
1017
+ "type": {
1018
+ "text": "CustomEvent"
1019
+ },
1020
+ "description": "Fired when the popover opens",
1021
+ "name": "btu-popover-show"
1022
+ },
1023
+ {
1024
+ "type": {
1025
+ "text": "CustomEvent"
1026
+ },
1027
+ "description": "Fired when the popover closes",
1028
+ "name": "btu-popover-hide"
1029
+ }
1030
+ ],
1031
+ "attributes": [
1032
+ {
1033
+ "name": "position",
1034
+ "type": {
1035
+ "text": "'top' | 'bottom' | 'left' | 'right'"
1036
+ },
1037
+ "default": "'bottom'",
1038
+ "description": "Position relative to the trigger element.\nAuto-flips when constrained by the viewport.",
1039
+ "fieldName": "position",
1040
+ "attribute": "position"
1041
+ },
1042
+ {
1043
+ "name": "trigger",
1044
+ "type": {
1045
+ "text": "'click' | 'hover' | 'focus'"
1046
+ },
1047
+ "default": "'click'",
1048
+ "description": "How the popover is activated.\n- 'click': Toggle on click with light dismiss\n- 'hover': Show on mouseenter with delay\n- 'focus': Show on focusin",
1049
+ "fieldName": "trigger",
1050
+ "attribute": "trigger"
1051
+ },
1052
+ {
1053
+ "name": "delay",
1054
+ "type": {
1055
+ "text": "number"
1056
+ },
1057
+ "default": "300",
1058
+ "description": "Show delay in milliseconds (hover trigger only).",
1059
+ "fieldName": "delay",
1060
+ "attribute": "delay"
1061
+ },
1062
+ {
1063
+ "name": "offset",
1064
+ "type": {
1065
+ "text": "PopoverOffset | null"
1066
+ },
1067
+ "default": "null",
1068
+ "description": "Gap between trigger and popover (sm=4px, md=8px, lg=12px, xl=16px).",
1069
+ "fieldName": "offset",
1070
+ "attribute": "offset"
1071
+ },
1072
+ {
1073
+ "name": "noArrow",
1074
+ "type": {
1075
+ "text": "boolean"
1076
+ },
1077
+ "default": "false",
1078
+ "description": "Hide the arrow pseudo-element.",
1079
+ "fieldName": "noArrow"
1080
+ },
1081
+ {
1082
+ "name": "open",
1083
+ "type": {
1084
+ "text": "boolean"
1085
+ },
1086
+ "default": "false",
1087
+ "description": "Programmatic open/close state (reflected).",
1088
+ "fieldName": "open",
1089
+ "attribute": "open"
1090
+ },
1091
+ {
1092
+ "name": "panel-label",
1093
+ "type": {
1094
+ "text": "string"
1095
+ },
1096
+ "default": "''",
1097
+ "description": "Accessible label for the popover panel (applied as aria-label on the dialog).",
1098
+ "fieldName": "panelLabel",
1099
+ "attribute": "panel-label"
1100
+ },
1101
+ {
1102
+ "name": "no-arrow",
1103
+ "type": {
1104
+ "text": "boolean"
1105
+ },
1106
+ "default": "false",
1107
+ "description": "Hide the arrow pseudo-element.",
1108
+ "attribute": "noArrow",
1109
+ "fieldName": "noArrow"
1110
+ }
1111
+ ],
1112
+ "mixins": [
1113
+ {
1114
+ "name": "EventEmitterMixin",
1115
+ "module": "/src/util/EventEmitterMixin.js"
1116
+ },
1117
+ {
1118
+ "name": "ReadyMixin",
1119
+ "module": "/src/util/ReadyMixin.js"
1120
+ }
1121
+ ],
1122
+ "superclass": {
1123
+ "name": "LitElement",
1124
+ "package": "lit"
1125
+ },
1126
+ "tagName": "btu-popover",
1127
+ "customElement": true
1128
+ }
1129
+ ],
1130
+ "exports": [
1131
+ {
1132
+ "kind": "js",
1133
+ "name": "default",
1134
+ "declaration": {
1135
+ "name": "Popover",
1136
+ "module": "src/components/popover/Popover.ts"
1137
+ }
1138
+ },
1139
+ {
1140
+ "kind": "custom-element-definition",
1141
+ "name": "btu-popover",
1142
+ "declaration": {
1143
+ "name": "Popover",
1144
+ "module": "src/components/popover/Popover.ts"
1145
+ }
1146
+ }
1147
+ ]
1148
+ },
1149
+ {
1150
+ "kind": "javascript-module",
1151
+ "path": "src/components/widget/Widget.ts",
1152
+ "declarations": [
1153
+ {
1154
+ "kind": "class",
1155
+ "description": "A widget component for displaying content with header, body, and footer sections.\n\n## Architecture: Light DOM + Manager Pattern\n\nThis component uses **Light DOM** (no Shadow Root) with the **Manager Pattern**:\n- User-provided children are physically moved into internal containers\n- Movement is based on `slot` attributes (pseudo-slots)\n- The `onFind` utility automatically redistributes dynamically-added content\n\n### Node Redistribution Rules\n- `slot=\"controls\"` → Moved to header actions area (before system buttons)\n- `slot=\"footer\"` → Moved to footer container\n- *(no slot)* → Moved to body container (default)\n\n## Features\n\n- **Collapsible**: Optional chevron toggle to hide/show body and footer\n- **Fullscreen**: Optional maximize button for fullscreen mode via `:state(fullscreen)` custom state\n- **Dynamic Content**: `onFind` handles content added after initialization\n- **Accessible**: Full ARIA support and keyboard navigation\n- **Themeable**: CSS custom properties for colors and spacing\n\n## Accessibility\n\n- **Collapse toggle**: `aria-expanded`, `aria-controls`, `aria-label`\n- **Fullscreen toggle**: `aria-pressed`, `aria-label`\n- **Body region**: `role=\"region\"`, `aria-labelledby` linking to heading\n- **Tab order**: Natural flow via physical DOM placement\n- **Collapsed content**: Hidden via `inert` attribute and CSS grid collapse",
1156
+ "name": "Widget",
1157
+ "cssProperties": [
1158
+ {
1159
+ "description": "Body and footer background color (default: --btu-theme-white)",
1160
+ "name": "--widget-background"
1161
+ },
1162
+ {
1163
+ "description": "Widget border and dividers (default: 1px solid gray-200)",
1164
+ "name": "--widget-border"
1165
+ },
1166
+ {
1167
+ "description": "Header background color (default: transparent)",
1168
+ "name": "--header-background"
1169
+ }
1170
+ ],
1171
+ "slots": [
1172
+ {
1173
+ "description": "Default pseudo-slot: elements without slot attribute are moved to body",
1174
+ "name": ""
1175
+ },
1176
+ {
1177
+ "description": "Pseudo-slot: buttons/actions moved to header actions area",
1178
+ "name": "controls"
1179
+ },
1180
+ {
1181
+ "description": "Pseudo-slot: content moved to footer container",
1182
+ "name": "footer"
1183
+ }
1184
+ ],
1185
+ "members": [
1186
+ {
1187
+ "kind": "field",
1188
+ "name": "_idCounter",
1189
+ "type": {
1190
+ "text": "number"
1191
+ },
1192
+ "privacy": "private",
1193
+ "static": true,
1194
+ "default": "0"
1195
+ },
1196
+ {
1197
+ "kind": "field",
1198
+ "name": "_internals",
1199
+ "privacy": "private"
1200
+ },
1201
+ {
1202
+ "kind": "field",
1203
+ "name": "heading",
1204
+ "type": {
1205
+ "text": "string"
1206
+ },
1207
+ "default": "''",
1208
+ "description": "Heading text displayed in the header.",
1209
+ "attribute": "heading"
1210
+ },
1211
+ {
1212
+ "kind": "field",
1213
+ "name": "collapsible",
1214
+ "type": {
1215
+ "text": "boolean"
1216
+ },
1217
+ "default": "false",
1218
+ "description": "Whether the widget can be collapsed/expanded.\nWhen true, a chevron toggle button appears in the header.",
1219
+ "attribute": "collapsible"
1220
+ },
1221
+ {
1222
+ "kind": "field",
1223
+ "name": "collapsed",
1224
+ "type": {
1225
+ "text": "boolean"
1226
+ },
1227
+ "default": "false",
1228
+ "description": "Whether the widget is currently collapsed.\nWhen true, body and footer are hidden. Implies collapsible.",
1229
+ "attribute": "collapsed"
1230
+ },
1231
+ {
1232
+ "kind": "field",
1233
+ "name": "fullscreenable",
1234
+ "type": {
1235
+ "text": "boolean"
1236
+ },
1237
+ "default": "false",
1238
+ "description": "Whether the widget can enter fullscreen mode.\nWhen true, a fullscreen toggle button appears in the header.",
1239
+ "attribute": "fullscreenable"
1240
+ },
1241
+ {
1242
+ "kind": "field",
1243
+ "name": "_isFullscreen",
1244
+ "type": {
1245
+ "text": "boolean"
1246
+ },
1247
+ "privacy": "private",
1248
+ "default": "false"
1249
+ },
1250
+ {
1251
+ "kind": "field",
1252
+ "name": "_collapseTooltip",
1253
+ "privacy": "private",
1254
+ "default": "new TooltipController(this, { target: 'button[data-tooltip=\"collapse\"]', text: () => (this.collapsed ? 'Expand' : 'Collapse'), position: 'bottom', noArrow: true, offset: 'sm', })"
1255
+ },
1256
+ {
1257
+ "kind": "field",
1258
+ "name": "_fullscreenTooltip",
1259
+ "privacy": "private",
1260
+ "default": "new TooltipController(this, { target: 'button[data-tooltip=\"fullscreen\"]', text: () => (this._isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen'), position: 'bottom', noArrow: true, offset: 'sm', })"
1261
+ },
1262
+ {
1263
+ "kind": "field",
1264
+ "name": "isFullscreen",
1265
+ "type": {
1266
+ "text": "boolean"
1267
+ },
1268
+ "description": "Whether the widget is currently in fullscreen mode (read-only).\nUse `btu-widget-fullscreen-changed` event to react to changes.",
1269
+ "readonly": true
1270
+ }
1271
+ ],
1272
+ "events": [
1273
+ {
1274
+ "type": {
1275
+ "text": "CustomEvent"
1276
+ },
1277
+ "description": "Fired after first render and redistribution",
1278
+ "name": "btu-widget-ready"
1279
+ },
1280
+ {
1281
+ "type": {
1282
+ "text": "CustomEvent<{collapsed: boolean}>"
1283
+ },
1284
+ "description": "Fired when collapsed state changes",
1285
+ "name": "btu-widget-collapse-changed"
1286
+ },
1287
+ {
1288
+ "type": {
1289
+ "text": "CustomEvent<{fullscreen: boolean}>"
1290
+ },
1291
+ "description": "Fired when fullscreen state changes",
1292
+ "name": "btu-widget-fullscreen-changed"
1293
+ }
1294
+ ],
1295
+ "attributes": [
1296
+ {
1297
+ "name": "heading",
1298
+ "type": {
1299
+ "text": "string"
1300
+ },
1301
+ "default": "''",
1302
+ "description": "Heading text displayed in the header.",
1303
+ "fieldName": "heading",
1304
+ "attribute": "heading"
1305
+ },
1306
+ {
1307
+ "name": "collapsible",
1308
+ "type": {
1309
+ "text": "boolean"
1310
+ },
1311
+ "default": "false",
1312
+ "description": "Whether the widget can be collapsed/expanded.\nWhen true, a chevron toggle button appears in the header.",
1313
+ "fieldName": "collapsible",
1314
+ "attribute": "collapsible"
1315
+ },
1316
+ {
1317
+ "name": "collapsed",
1318
+ "type": {
1319
+ "text": "boolean"
1320
+ },
1321
+ "default": "false",
1322
+ "description": "Whether the widget is currently collapsed.\nWhen true, body and footer are hidden. Implies collapsible.",
1323
+ "fieldName": "collapsed",
1324
+ "attribute": "collapsed"
1325
+ },
1326
+ {
1327
+ "name": "fullscreenable",
1328
+ "type": {
1329
+ "text": "boolean"
1330
+ },
1331
+ "default": "false",
1332
+ "description": "Whether the widget can enter fullscreen mode.\nWhen true, a fullscreen toggle button appears in the header.",
1333
+ "fieldName": "fullscreenable",
1334
+ "attribute": "fullscreenable"
1335
+ },
1336
+ {
1337
+ "description": "When set, collapsed state is automatically persisted to LocalStorage",
1338
+ "name": "id"
1339
+ }
1340
+ ],
1341
+ "cssStates": [
1342
+ {
1343
+ "description": "Applied when the widget is collapsed, targetable via :state(collapsed)",
1344
+ "name": "collapsed"
1345
+ },
1346
+ {
1347
+ "description": "Applied when the widget is in fullscreen mode, targetable via :state(fullscreen)",
1348
+ "name": "fullscreen"
1349
+ }
1350
+ ],
1351
+ "mixins": [
1352
+ {
1353
+ "name": "EventEmitterMixin",
1354
+ "module": "/src/util/EventEmitterMixin.js"
1355
+ },
1356
+ {
1357
+ "name": "ReadyMixin",
1358
+ "module": "/src/util/ReadyMixin.js"
1359
+ }
1360
+ ],
1361
+ "superclass": {
1362
+ "name": "LitElement",
1363
+ "package": "lit"
1364
+ },
1365
+ "tagName": "btu-widget",
1366
+ "customElement": true
1367
+ }
1368
+ ],
1369
+ "exports": [
1370
+ {
1371
+ "kind": "js",
1372
+ "name": "default",
1373
+ "declaration": {
1374
+ "name": "Widget",
1375
+ "module": "src/components/widget/Widget.ts"
1376
+ }
1377
+ },
1378
+ {
1379
+ "kind": "custom-element-definition",
1380
+ "name": "btu-widget",
1381
+ "declaration": {
1382
+ "name": "Widget",
1383
+ "module": "src/components/widget/Widget.ts"
1384
+ }
1385
+ }
1386
+ ]
884
1387
  }
885
1388
  ]
886
1389
  }