@c15t/dev-tools 1.8.3 → 2.0.0-rc.1

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 (153) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +155 -71
  3. package/dist/__tests__/components/ui.test.d.ts +2 -0
  4. package/dist/__tests__/components/ui.test.d.ts.map +1 -0
  5. package/dist/__tests__/core/renderer.test.d.ts +2 -0
  6. package/dist/__tests__/core/renderer.test.d.ts.map +1 -0
  7. package/dist/__tests__/core/reset-consents.test.d.ts +2 -0
  8. package/dist/__tests__/core/reset-consents.test.d.ts.map +1 -0
  9. package/dist/__tests__/core/state-manager.test.d.ts +2 -0
  10. package/dist/__tests__/core/state-manager.test.d.ts.map +1 -0
  11. package/dist/__tests__/panels/dom-scanner.test.d.ts +2 -0
  12. package/dist/__tests__/panels/dom-scanner.test.d.ts.map +1 -0
  13. package/dist/components/dropdown-menu.d.ts +46 -0
  14. package/dist/components/dropdown-menu.d.ts.map +1 -0
  15. package/dist/components/index.d.ts +7 -0
  16. package/dist/components/index.d.ts.map +1 -0
  17. package/dist/components/panel.d.ts +28 -0
  18. package/dist/components/panel.d.ts.map +1 -0
  19. package/dist/components/tabs.d.ts +21 -0
  20. package/dist/components/tabs.d.ts.map +1 -0
  21. package/dist/components/ui.d.ts +65 -0
  22. package/dist/components/ui.d.ts.map +1 -0
  23. package/dist/core/devtools.d.ts +60 -0
  24. package/dist/core/devtools.d.ts.map +1 -0
  25. package/dist/core/draggable.d.ts +81 -0
  26. package/dist/core/draggable.d.ts.map +1 -0
  27. package/dist/core/index.d.ts +10 -0
  28. package/dist/core/index.d.ts.map +1 -0
  29. package/dist/core/panel-renderer.d.ts +41 -0
  30. package/dist/core/panel-renderer.d.ts.map +1 -0
  31. package/dist/core/renderer.d.ts +126 -0
  32. package/dist/core/renderer.d.ts.map +1 -0
  33. package/dist/core/reset-consents.d.ts +24 -0
  34. package/dist/core/reset-consents.d.ts.map +1 -0
  35. package/dist/core/state-manager.d.ts +73 -0
  36. package/dist/core/state-manager.d.ts.map +1 -0
  37. package/dist/core/store-connector.d.ts +69 -0
  38. package/dist/core/store-connector.d.ts.map +1 -0
  39. package/dist/index.cjs +4813 -10
  40. package/dist/index.d.ts +10 -1
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +4803 -2
  43. package/dist/panels/actions.d.ts +18 -0
  44. package/dist/panels/actions.d.ts.map +1 -0
  45. package/dist/panels/consents.d.ts +18 -0
  46. package/dist/panels/consents.d.ts.map +1 -0
  47. package/dist/panels/dom-scanner.d.ts +29 -0
  48. package/dist/panels/dom-scanner.d.ts.map +1 -0
  49. package/dist/panels/events.d.ts +14 -0
  50. package/dist/panels/events.d.ts.map +1 -0
  51. package/dist/panels/iab.d.ts +14 -0
  52. package/dist/panels/iab.d.ts.map +1 -0
  53. package/dist/panels/index.d.ts +11 -0
  54. package/dist/panels/index.d.ts.map +1 -0
  55. package/dist/panels/location.d.ts +19 -0
  56. package/dist/panels/location.d.ts.map +1 -0
  57. package/dist/panels/scripts.d.ts +13 -0
  58. package/dist/panels/scripts.d.ts.map +1 -0
  59. package/dist/react.cjs +4696 -0
  60. package/dist/react.d.ts +76 -0
  61. package/dist/react.d.ts.map +1 -0
  62. package/dist/react.js +4672 -0
  63. package/dist/styles/index.d.ts +7 -0
  64. package/dist/styles/index.d.ts.map +1 -0
  65. package/dist/tanstack.cjs +3819 -0
  66. package/dist/tanstack.d.ts +46 -0
  67. package/dist/tanstack.d.ts.map +1 -0
  68. package/dist/tanstack.js +3795 -0
  69. package/dist/utils/index.d.ts +6 -0
  70. package/dist/utils/index.d.ts.map +1 -0
  71. package/dist/utils/preference-trigger.d.ts +27 -0
  72. package/dist/utils/preference-trigger.d.ts.map +1 -0
  73. package/package.json +74 -57
  74. package/tsconfig.json +1 -1
  75. package/LICENSE.md +0 -595
  76. package/dist/components/error-state.cjs +0 -98
  77. package/dist/components/error-state.css +0 -51
  78. package/dist/components/error-state.d.ts +0 -5
  79. package/dist/components/error-state.d.ts.map +0 -1
  80. package/dist/components/error-state.js +0 -64
  81. package/dist/components/header.cjs +0 -65
  82. package/dist/components/header.css +0 -29
  83. package/dist/components/header.d.ts +0 -7
  84. package/dist/components/header.d.ts.map +0 -1
  85. package/dist/components/header.js +0 -31
  86. package/dist/components/ui/accordion.cjs +0 -82
  87. package/dist/components/ui/accordion.css +0 -72
  88. package/dist/components/ui/accordion.d.ts +0 -8
  89. package/dist/components/ui/accordion.d.ts.map +0 -1
  90. package/dist/components/ui/accordion.js +0 -39
  91. package/dist/components/ui/alert.cjs +0 -77
  92. package/dist/components/ui/alert.css +0 -59
  93. package/dist/components/ui/alert.d.ts +0 -10
  94. package/dist/components/ui/alert.d.ts.map +0 -1
  95. package/dist/components/ui/alert.js +0 -37
  96. package/dist/components/ui/badge.cjs +0 -63
  97. package/dist/components/ui/badge.css +0 -52
  98. package/dist/components/ui/badge.d.ts +0 -11
  99. package/dist/components/ui/badge.d.ts.map +0 -1
  100. package/dist/components/ui/badge.js +0 -26
  101. package/dist/components/ui/button.cjs +0 -77
  102. package/dist/components/ui/button.css +0 -87
  103. package/dist/components/ui/button.d.ts +0 -13
  104. package/dist/components/ui/button.d.ts.map +0 -1
  105. package/dist/components/ui/button.js +0 -40
  106. package/dist/components/ui/card.cjs +0 -89
  107. package/dist/components/ui/card.css +0 -41
  108. package/dist/components/ui/card.d.ts +0 -10
  109. package/dist/components/ui/card.d.ts.map +0 -1
  110. package/dist/components/ui/card.js +0 -40
  111. package/dist/components/ui/error-state.css +0 -34
  112. package/dist/components/ui/expandable-tabs.cjs +0 -136
  113. package/dist/components/ui/expandable-tabs.css +0 -57
  114. package/dist/components/ui/expandable-tabs.d.ts +0 -23
  115. package/dist/components/ui/expandable-tabs.d.ts.map +0 -1
  116. package/dist/components/ui/expandable-tabs.js +0 -102
  117. package/dist/components/ui/logo.cjs +0 -101
  118. package/dist/components/ui/logo.d.ts +0 -8
  119. package/dist/components/ui/logo.d.ts.map +0 -1
  120. package/dist/components/ui/logo.js +0 -67
  121. package/dist/components/ui/scroll-area.cjs +0 -67
  122. package/dist/components/ui/scroll-area.css +0 -41
  123. package/dist/components/ui/scroll-area.d.ts +0 -6
  124. package/dist/components/ui/scroll-area.d.ts.map +0 -1
  125. package/dist/components/ui/scroll-area.js +0 -30
  126. package/dist/components/ui/switch.cjs +0 -49
  127. package/dist/components/ui/switch.css +0 -49
  128. package/dist/components/ui/switch.d.ts +0 -5
  129. package/dist/components/ui/switch.d.ts.map +0 -1
  130. package/dist/components/ui/switch.js +0 -15
  131. package/dist/components/ui/tooltip.cjs +0 -61
  132. package/dist/components/ui/tooltip.css +0 -101
  133. package/dist/components/ui/tooltip.d.ts +0 -8
  134. package/dist/components/ui/tooltip.d.ts.map +0 -1
  135. package/dist/components/ui/tooltip.js +0 -18
  136. package/dist/components/wrapper.cjs +0 -158
  137. package/dist/components/wrapper.css +0 -90
  138. package/dist/components/wrapper.d.ts +0 -20
  139. package/dist/components/wrapper.d.ts.map +0 -1
  140. package/dist/components/wrapper.js +0 -121
  141. package/dist/dev-tool.cjs +0 -124
  142. package/dist/dev-tool.d.ts +0 -15
  143. package/dist/dev-tool.d.ts.map +0 -1
  144. package/dist/dev-tool.js +0 -74
  145. package/dist/libs/utils.cjs +0 -50
  146. package/dist/libs/utils.d.ts +0 -3
  147. package/dist/libs/utils.d.ts.map +0 -1
  148. package/dist/libs/utils.js +0 -6
  149. package/dist/router/router.cjs +0 -158
  150. package/dist/router/router.d.ts +0 -6
  151. package/dist/router/router.d.ts.map +0 -1
  152. package/dist/router/router.js +0 -124
  153. package/dist/styles/theme.css +0 -42
@@ -0,0 +1,3795 @@
1
+ var __webpack_modules__ = {
2
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/index.js??ruleSet[1].rules[1].use[1]!builtin:lightningcss-loader??ruleSet[1].rules[1].use[2]!./src/styles/animations.module.css" (module, __webpack_exports__, __webpack_require__) {
3
+ __webpack_require__.d(__webpack_exports__, {
4
+ A: ()=>__rspack_default_export
5
+ });
6
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0 = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/noSourceMaps.js");
7
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0_default = /*#__PURE__*/ __webpack_require__.n(_node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0);
8
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1 = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/api.js");
9
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1_default = /*#__PURE__*/ __webpack_require__.n(_node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1);
10
+ var ___CSS_LOADER_EXPORT___ = _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1_default()(_node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0_default());
11
+ ___CSS_LOADER_EXPORT___.push([
12
+ module.id,
13
+ `@keyframes devtoolsEnter-Jgl1Uz {
14
+ from {
15
+ opacity: 0;
16
+ transform: scale(.95)translateY(8px);
17
+ }
18
+
19
+ to {
20
+ opacity: 1;
21
+ transform: scale(1)translateY(0);
22
+ }
23
+ }
24
+
25
+ @keyframes devtoolsExit-GVem79 {
26
+ from {
27
+ opacity: 1;
28
+ transform: scale(1)translateY(0);
29
+ }
30
+
31
+ to {
32
+ opacity: 0;
33
+ transform: scale(.95)translateY(8px);
34
+ }
35
+ }
36
+
37
+ @keyframes buttonPulse-thl_xD {
38
+ 0%, 100% {
39
+ transform: scale(1);
40
+ }
41
+
42
+ 50% {
43
+ transform: scale(1.05);
44
+ }
45
+ }
46
+
47
+ @keyframes buttonEnter-nmbQm7 {
48
+ from {
49
+ opacity: 0;
50
+ transform: scale(.8);
51
+ }
52
+
53
+ to {
54
+ opacity: 1;
55
+ transform: scale(1);
56
+ }
57
+ }
58
+
59
+ @keyframes buttonExit-pxOnsy {
60
+ from {
61
+ opacity: 1;
62
+ transform: scale(1);
63
+ }
64
+
65
+ to {
66
+ opacity: 0;
67
+ transform: scale(.8);
68
+ }
69
+ }
70
+
71
+ @keyframes accordionDown-N6mY7b {
72
+ from {
73
+ opacity: 0;
74
+ height: 0;
75
+ }
76
+
77
+ to {
78
+ height: var(--accordion-content-height);
79
+ opacity: 1;
80
+ }
81
+ }
82
+
83
+ @keyframes accordionUp-NUVQrz {
84
+ from {
85
+ height: var(--accordion-content-height);
86
+ opacity: 1;
87
+ }
88
+
89
+ to {
90
+ opacity: 0;
91
+ height: 0;
92
+ }
93
+ }
94
+
95
+ @keyframes fadeIn-M9eDrv {
96
+ from {
97
+ opacity: 0;
98
+ }
99
+
100
+ to {
101
+ opacity: 1;
102
+ }
103
+ }
104
+
105
+ @keyframes fadeOut-feL7tl {
106
+ from {
107
+ opacity: 1;
108
+ }
109
+
110
+ to {
111
+ opacity: 0;
112
+ }
113
+ }
114
+
115
+ @keyframes slideInFromRight-F7lMwz {
116
+ from {
117
+ opacity: 0;
118
+ transform: translateX(16px);
119
+ }
120
+
121
+ to {
122
+ opacity: 1;
123
+ transform: translateX(0);
124
+ }
125
+ }
126
+
127
+ @keyframes slideInFromBottom-_z3hvX {
128
+ from {
129
+ opacity: 0;
130
+ transform: translateY(16px);
131
+ }
132
+
133
+ to {
134
+ opacity: 1;
135
+ transform: translateY(0);
136
+ }
137
+ }
138
+
139
+ .animateEnter-detbYr {
140
+ animation: devtoolsEnter-Jgl1Uz var(--c15t-duration-normal, .2s) var(--c15t-easing-out, cubic-bezier(.215, .61, .355, 1)) forwards;
141
+ transform-origin: 100% 100%;
142
+ }
143
+
144
+ .animateExit-qZjCsw {
145
+ animation: devtoolsExit-GVem79 var(--c15t-duration-fast, .1s) var(--c15t-easing-out, cubic-bezier(.215, .61, .355, 1)) forwards;
146
+ transform-origin: 100% 100%;
147
+ }
148
+
149
+ .animateButtonEnter-amkZhT {
150
+ animation: buttonEnter-nmbQm7 var(--c15t-duration-normal, .2s) var(--c15t-easing-spring, cubic-bezier(.34, 1.56, .64, 1)) forwards;
151
+ transform-origin: center;
152
+ }
153
+
154
+ .animateButtonExit-fMVAL4 {
155
+ animation: buttonExit-pxOnsy var(--c15t-duration-fast, .1s) var(--c15t-easing-out, cubic-bezier(.215, .61, .355, 1)) forwards;
156
+ transform-origin: center;
157
+ }
158
+
159
+ .animateFadeIn-TrkV7T {
160
+ animation: fadeIn-M9eDrv var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1)) forwards;
161
+ }
162
+
163
+ .animateFadeOut-sS4sE4 {
164
+ animation: fadeOut-feL7tl var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1)) forwards;
165
+ }
166
+
167
+ .animateSlideIn-ccDCyI {
168
+ animation: slideInFromBottom-_z3hvX var(--c15t-duration-normal, .2s) var(--c15t-easing-out, cubic-bezier(.215, .61, .355, 1)) forwards;
169
+ }
170
+
171
+ .staggerItem-tzBuCo {
172
+ opacity: 0;
173
+ animation: slideInFromRight-F7lMwz var(--c15t-duration-normal, .2s) var(--c15t-easing-out, cubic-bezier(.215, .61, .355, 1)) forwards;
174
+ }
175
+
176
+ .staggerItem-tzBuCo:first-child {
177
+ animation-delay: 0s;
178
+ }
179
+
180
+ .staggerItem-tzBuCo:nth-child(2) {
181
+ animation-delay: 30ms;
182
+ }
183
+
184
+ .staggerItem-tzBuCo:nth-child(3) {
185
+ animation-delay: 60ms;
186
+ }
187
+
188
+ .staggerItem-tzBuCo:nth-child(4) {
189
+ animation-delay: 90ms;
190
+ }
191
+
192
+ .staggerItem-tzBuCo:nth-child(5) {
193
+ animation-delay: .12s;
194
+ }
195
+
196
+ .staggerItem-tzBuCo:nth-child(6) {
197
+ animation-delay: .15s;
198
+ }
199
+
200
+ .staggerItem-tzBuCo:nth-child(7) {
201
+ animation-delay: .18s;
202
+ }
203
+
204
+ .staggerItem-tzBuCo:nth-child(8) {
205
+ animation-delay: .21s;
206
+ }
207
+
208
+ .staggerItem-tzBuCo:nth-child(9) {
209
+ animation-delay: .24s;
210
+ }
211
+
212
+ .staggerItem-tzBuCo:nth-child(10) {
213
+ animation-delay: .27s;
214
+ }
215
+
216
+ @media (prefers-reduced-motion: reduce) {
217
+ .animateEnter-detbYr, .animateExit-qZjCsw, .animateButtonEnter-amkZhT, .animateButtonExit-fMVAL4, .animateFadeIn-TrkV7T, .animateFadeOut-sS4sE4, .animateSlideIn-ccDCyI, .staggerItem-tzBuCo {
218
+ opacity: 1;
219
+ animation: none;
220
+ transform: none;
221
+ }
222
+ }
223
+ `,
224
+ ""
225
+ ]);
226
+ ___CSS_LOADER_EXPORT___.locals = {
227
+ animateEnter: "animateEnter-detbYr",
228
+ devtoolsEnter: "devtoolsEnter-Jgl1Uz",
229
+ animateExit: "animateExit-qZjCsw",
230
+ devtoolsExit: "devtoolsExit-GVem79",
231
+ animateButtonEnter: "animateButtonEnter-amkZhT",
232
+ buttonEnter: "buttonEnter-nmbQm7",
233
+ animateButtonExit: "animateButtonExit-fMVAL4",
234
+ buttonExit: "buttonExit-pxOnsy",
235
+ animateFadeIn: "animateFadeIn-TrkV7T",
236
+ fadeIn: "fadeIn-M9eDrv",
237
+ animateFadeOut: "animateFadeOut-sS4sE4",
238
+ fadeOut: "fadeOut-feL7tl",
239
+ animateSlideIn: "animateSlideIn-ccDCyI",
240
+ slideInFromBottom: "slideInFromBottom-_z3hvX",
241
+ staggerItem: "staggerItem-tzBuCo",
242
+ slideInFromRight: "slideInFromRight-F7lMwz",
243
+ buttonPulse: "buttonPulse-thl_xD",
244
+ accordionDown: "accordionDown-N6mY7b",
245
+ accordionUp: "accordionUp-NUVQrz"
246
+ };
247
+ const __rspack_default_export = ___CSS_LOADER_EXPORT___;
248
+ },
249
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/index.js??ruleSet[1].rules[1].use[1]!builtin:lightningcss-loader??ruleSet[1].rules[1].use[2]!./src/styles/components.module.css" (module, __webpack_exports__, __webpack_require__) {
250
+ __webpack_require__.d(__webpack_exports__, {
251
+ A: ()=>__rspack_default_export
252
+ });
253
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0 = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/noSourceMaps.js");
254
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0_default = /*#__PURE__*/ __webpack_require__.n(_node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0);
255
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1 = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/api.js");
256
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1_default = /*#__PURE__*/ __webpack_require__.n(_node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1);
257
+ var ___CSS_LOADER_EXPORT___ = _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1_default()(_node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0_default());
258
+ ___CSS_LOADER_EXPORT___.push([
259
+ module.id,
260
+ `.toggle-bPZtik {
261
+ border-radius: var(--c15t-radius-full, 9999px);
262
+ background-color: var(--c15t-switch-track, #ccc);
263
+ cursor: pointer;
264
+ width: 36px;
265
+ height: 20px;
266
+ transition: background-color var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1));
267
+ border: none;
268
+ align-items: center;
269
+ padding: 0;
270
+ display: inline-flex;
271
+ position: relative;
272
+ }
273
+
274
+ .toggle-bPZtik:focus-visible {
275
+ outline: 2px solid var(--c15t-primary, #335cff);
276
+ outline-offset: 2px;
277
+ }
278
+
279
+ .toggleActive-Ldlasg {
280
+ background-color: var(--c15t-switch-track-active, #335cff);
281
+ }
282
+
283
+ .toggleThumb-hjGfoX {
284
+ border-radius: var(--c15t-radius-full, 9999px);
285
+ background-color: var(--c15t-switch-thumb, #fff);
286
+ width: 16px;
287
+ height: 16px;
288
+ transition: transform var(--c15t-duration-fast, .1s) var(--c15t-easing-spring, cubic-bezier(.34, 1.56, .64, 1));
289
+ position: absolute;
290
+ left: 2px;
291
+ box-shadow: 0 1px 2px #0003;
292
+ }
293
+
294
+ .toggleActive-Ldlasg .toggleThumb-hjGfoX {
295
+ transform: translateX(16px);
296
+ }
297
+
298
+ .toggle-bPZtik:disabled, .toggleDisabled-ZcD8nZ {
299
+ opacity: .5;
300
+ cursor: not-allowed;
301
+ }
302
+
303
+ .toggle-bPZtik:disabled .toggleThumb-hjGfoX, .toggleDisabled-ZcD8nZ .toggleThumb-hjGfoX {
304
+ box-shadow: none;
305
+ }
306
+
307
+ .badge-yA0giZ {
308
+ border-radius: var(--c15t-radius-sm, .25rem);
309
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
310
+ font-weight: var(--c15t-font-weight-medium, 500);
311
+ white-space: nowrap;
312
+ align-items: center;
313
+ padding: 2px 6px;
314
+ line-height: 1;
315
+ display: inline-flex;
316
+ }
317
+
318
+ .badgeSuccess-mA76a4 {
319
+ background-color: var(--c15t-devtools-badge-success-bg, #e4fbed);
320
+ color: var(--c15t-devtools-badge-success, #21c45d);
321
+ }
322
+
323
+ .badgeError-Agsq7I {
324
+ background-color: var(--c15t-devtools-badge-error-bg, #fde7e7);
325
+ color: var(--c15t-devtools-badge-error, #ef4343);
326
+ }
327
+
328
+ .badgeWarning-xpdwMQ {
329
+ background-color: var(--c15t-devtools-badge-warning-bg, #fef7dc);
330
+ color: var(--c15t-devtools-badge-warning, #f59f0a);
331
+ }
332
+
333
+ .badgeInfo-uWdPCK {
334
+ background-color: var(--c15t-devtools-badge-info-bg, #dcebfe);
335
+ color: var(--c15t-devtools-badge-info, #2463eb);
336
+ }
337
+
338
+ .badgeNeutral-j3EsE0 {
339
+ background-color: var(--c15t-devtools-badge-neutral-bg, #f0f0f0);
340
+ color: var(--c15t-devtools-badge-neutral, #737373);
341
+ }
342
+
343
+ .btn-evRVlh {
344
+ justify-content: center;
345
+ align-items: center;
346
+ gap: var(--c15t-space-xs, .25rem);
347
+ padding: var(--c15t-space-xs, .25rem) var(--c15t-space-sm, .5rem);
348
+ border: 1px solid var(--c15t-border, #e3e3e3);
349
+ border-radius: var(--c15t-radius-md, .5rem);
350
+ background-color: var(--c15t-surface, #fff);
351
+ color: var(--c15t-text, #171717);
352
+ font-family: inherit;
353
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
354
+ font-weight: var(--c15t-font-weight-medium, 500);
355
+ cursor: pointer;
356
+ transition: background-color var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1)), border-color var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1));
357
+ display: inline-flex;
358
+ }
359
+
360
+ .btn-evRVlh:hover {
361
+ background-color: var(--c15t-surface-hover, #f7f7f7);
362
+ border-color: var(--c15t-border-hover, #c9c9c9);
363
+ }
364
+
365
+ .btn-evRVlh:focus-visible {
366
+ outline: 2px solid var(--c15t-primary, #335cff);
367
+ outline-offset: 1px;
368
+ }
369
+
370
+ .btn-evRVlh:disabled {
371
+ opacity: .5;
372
+ cursor: not-allowed;
373
+ }
374
+
375
+ .btnPrimary-dA6nqY {
376
+ background-color: var(--c15t-primary, #335cff);
377
+ border-color: var(--c15t-primary, #335cff);
378
+ color: var(--c15t-text-on-primary, #fff);
379
+ }
380
+
381
+ .btnPrimary-dA6nqY:hover {
382
+ background-color: var(--c15t-primary-hover, #03f);
383
+ border-color: var(--c15t-primary-hover, #03f);
384
+ }
385
+
386
+ .btnDanger-eDnqOX {
387
+ background-color: var(--c15t-devtools-badge-error, #ef4343);
388
+ border-color: var(--c15t-devtools-badge-error, #ef4343);
389
+ color: var(--c15t-text-on-primary, #fff);
390
+ }
391
+
392
+ .btnDanger-eDnqOX:hover {
393
+ background-color: #eb1414;
394
+ border-color: #eb1414;
395
+ }
396
+
397
+ .btnSmall-TjXoqZ {
398
+ padding: 2px var(--c15t-space-xs, .25rem);
399
+ font-size: 10px;
400
+ }
401
+
402
+ .btnIcon-fiYQAh {
403
+ flex-shrink: 0;
404
+ width: 14px;
405
+ height: 14px;
406
+ }
407
+
408
+ .input-IeTcCs {
409
+ width: 100%;
410
+ padding: var(--c15t-space-xs, .25rem) var(--c15t-space-sm, .5rem);
411
+ border: 1px solid var(--c15t-border, #e3e3e3);
412
+ border-radius: var(--c15t-radius-md, .5rem);
413
+ background-color: var(--c15t-surface, #fff);
414
+ color: var(--c15t-text, #171717);
415
+ font-family: inherit;
416
+ font-size: var(--c15t-font-size-sm, .875rem);
417
+ transition: border-color var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1));
418
+ }
419
+
420
+ .input-IeTcCs:focus {
421
+ border-color: var(--c15t-primary, #335cff);
422
+ outline: none;
423
+ }
424
+
425
+ .input-IeTcCs::placeholder {
426
+ color: var(--c15t-text-muted, #737373);
427
+ }
428
+
429
+ .inputSmall-pJyXcL {
430
+ padding: 2px var(--c15t-space-xs, .25rem);
431
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
432
+ }
433
+
434
+ .select-byJ1WM {
435
+ width: 100%;
436
+ padding: var(--c15t-space-xs, .25rem) var(--c15t-space-sm, .5rem);
437
+ border: 1px solid var(--c15t-border, #e3e3e3);
438
+ border-radius: var(--c15t-radius-md, .5rem);
439
+ background-color: var(--c15t-surface, #fff);
440
+ color: var(--c15t-text, #171717);
441
+ font-family: inherit;
442
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
443
+ cursor: pointer;
444
+ }
445
+
446
+ .select-byJ1WM:focus {
447
+ border-color: var(--c15t-primary, #335cff);
448
+ outline: none;
449
+ }
450
+
451
+ .grid-LlrmEz {
452
+ gap: var(--c15t-space-sm, .5rem);
453
+ padding: var(--c15t-space-sm, .5rem) var(--c15t-space-md, 1rem);
454
+ display: grid;
455
+ }
456
+
457
+ .gridCols2-UgcIqI {
458
+ grid-template-columns: repeat(2, 1fr);
459
+ }
460
+
461
+ .gridCols3-OmMIq6 {
462
+ grid-template-columns: repeat(3, 1fr);
463
+ }
464
+
465
+ .gridCard-Qm5xxI {
466
+ padding: var(--c15t-space-sm, .5rem) var(--c15t-space-md, .75rem);
467
+ border: 1px solid var(--c15t-border, #e3e3e3);
468
+ border-radius: var(--c15t-radius-md, .5rem);
469
+ background-color: var(--c15t-surface, #fff);
470
+ transition: border-color var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1));
471
+ justify-content: space-between;
472
+ align-items: center;
473
+ display: flex;
474
+ }
475
+
476
+ .gridCard-Qm5xxI:hover {
477
+ border-color: var(--c15t-border-hover, #c9c9c9);
478
+ }
479
+
480
+ .gridCardTitle-HjXETp {
481
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
482
+ font-weight: var(--c15t-font-weight-medium, 500);
483
+ color: var(--c15t-text, #171717);
484
+ }
485
+
486
+ .listItem-XUKGIo {
487
+ padding: var(--c15t-space-xs, .25rem) var(--c15t-space-md, 1rem);
488
+ border-bottom: 1px solid var(--c15t-border, #e3e3e3);
489
+ justify-content: space-between;
490
+ align-items: center;
491
+ display: flex;
492
+ }
493
+
494
+ .listItem-XUKGIo:last-child {
495
+ border-bottom: none;
496
+ }
497
+
498
+ .listItemContent-WDBF1N {
499
+ flex-direction: column;
500
+ flex: 1;
501
+ gap: 2px;
502
+ min-width: 0;
503
+ display: flex;
504
+ }
505
+
506
+ .listItemTitle-N89OkC {
507
+ font-size: var(--c15t-font-size-sm, .875rem);
508
+ font-weight: var(--c15t-font-weight-medium, 500);
509
+ color: var(--c15t-text, #171717);
510
+ }
511
+
512
+ .listItemDescription-E6JHyZ {
513
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
514
+ color: var(--c15t-text-muted, #737373);
515
+ text-overflow: ellipsis;
516
+ white-space: nowrap;
517
+ overflow: hidden;
518
+ }
519
+
520
+ .listItemActions-F1BfOm {
521
+ align-items: center;
522
+ gap: var(--c15t-space-sm, .5rem);
523
+ flex-shrink: 0;
524
+ display: flex;
525
+ }
526
+
527
+ .section-a197cB {
528
+ padding: var(--c15t-space-sm, .5rem) var(--c15t-space-md, 1rem);
529
+ border-bottom: 1px solid var(--c15t-border, #e3e3e3);
530
+ }
531
+
532
+ .section-a197cB:last-child {
533
+ border-bottom: none;
534
+ }
535
+
536
+ .sectionHeader-Xcljcw {
537
+ margin-bottom: var(--c15t-space-sm, .5rem);
538
+ justify-content: space-between;
539
+ align-items: center;
540
+ display: flex;
541
+ }
542
+
543
+ .sectionTitle-RUiFld {
544
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
545
+ font-weight: var(--c15t-font-weight-semibold, 600);
546
+ color: var(--c15t-text-muted, #737373);
547
+ text-transform: uppercase;
548
+ letter-spacing: .5px;
549
+ }
550
+
551
+ .infoRow-RlB_0h {
552
+ padding: var(--c15t-space-xs, .25rem) 0;
553
+ justify-content: space-between;
554
+ align-items: center;
555
+ display: flex;
556
+ }
557
+
558
+ .infoLabel-_pbK33 {
559
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
560
+ color: var(--c15t-text-muted, #737373);
561
+ }
562
+
563
+ .infoValue-flMl_e {
564
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
565
+ font-weight: var(--c15t-font-weight-medium, 500);
566
+ color: var(--c15t-text, #171717);
567
+ font-family: ui-monospace, Cascadia Code, Source Code Pro, Menlo, Consolas, DejaVu Sans Mono, monospace;
568
+ }
569
+
570
+ .emptyState-QcmzTQ {
571
+ padding: var(--c15t-space-xl, 2rem);
572
+ text-align: center;
573
+ color: var(--c15t-text-muted, #737373);
574
+ flex-direction: column;
575
+ justify-content: center;
576
+ align-items: center;
577
+ display: flex;
578
+ }
579
+
580
+ .emptyStateIcon-WHFkX8 {
581
+ width: 32px;
582
+ height: 32px;
583
+ margin-bottom: var(--c15t-space-sm, .5rem);
584
+ opacity: .5;
585
+ }
586
+
587
+ .emptyStateText-TaLvAJ {
588
+ font-size: var(--c15t-font-size-sm, .875rem);
589
+ }
590
+
591
+ @media (prefers-reduced-motion: reduce) {
592
+ .toggle-bPZtik, .toggleThumb-hjGfoX, .btn-evRVlh, .input-IeTcCs, .select-byJ1WM {
593
+ transition: none;
594
+ }
595
+ }
596
+
597
+ @media (hover: none) {
598
+ .btn-evRVlh:hover {
599
+ background-color: var(--c15t-surface, #fff);
600
+ border-color: var(--c15t-border, #e3e3e3);
601
+ }
602
+
603
+ .btnPrimary-dA6nqY:hover {
604
+ background-color: var(--c15t-primary, #335cff);
605
+ border-color: var(--c15t-primary, #335cff);
606
+ }
607
+ }
608
+ `,
609
+ ""
610
+ ]);
611
+ ___CSS_LOADER_EXPORT___.locals = {
612
+ toggle: "toggle-bPZtik",
613
+ toggleActive: "toggleActive-Ldlasg",
614
+ toggleThumb: "toggleThumb-hjGfoX",
615
+ toggleDisabled: "toggleDisabled-ZcD8nZ",
616
+ badge: "badge-yA0giZ",
617
+ badgeSuccess: "badgeSuccess-mA76a4",
618
+ badgeError: "badgeError-Agsq7I",
619
+ badgeWarning: "badgeWarning-xpdwMQ",
620
+ badgeInfo: "badgeInfo-uWdPCK",
621
+ badgeNeutral: "badgeNeutral-j3EsE0",
622
+ btn: "btn-evRVlh",
623
+ btnPrimary: "btnPrimary-dA6nqY",
624
+ btnDanger: "btnDanger-eDnqOX",
625
+ btnSmall: "btnSmall-TjXoqZ",
626
+ btnIcon: "btnIcon-fiYQAh",
627
+ input: "input-IeTcCs",
628
+ inputSmall: "inputSmall-pJyXcL",
629
+ select: "select-byJ1WM",
630
+ grid: "grid-LlrmEz",
631
+ gridCols2: "gridCols2-UgcIqI",
632
+ gridCols3: "gridCols3-OmMIq6",
633
+ gridCard: "gridCard-Qm5xxI",
634
+ gridCardTitle: "gridCardTitle-HjXETp",
635
+ listItem: "listItem-XUKGIo",
636
+ listItemContent: "listItemContent-WDBF1N",
637
+ listItemTitle: "listItemTitle-N89OkC",
638
+ listItemDescription: "listItemDescription-E6JHyZ",
639
+ listItemActions: "listItemActions-F1BfOm",
640
+ section: "section-a197cB",
641
+ sectionHeader: "sectionHeader-Xcljcw",
642
+ sectionTitle: "sectionTitle-RUiFld",
643
+ infoRow: "infoRow-RlB_0h",
644
+ infoLabel: "infoLabel-_pbK33",
645
+ infoValue: "infoValue-flMl_e",
646
+ emptyState: "emptyState-QcmzTQ",
647
+ emptyStateIcon: "emptyStateIcon-WHFkX8",
648
+ emptyStateText: "emptyStateText-TaLvAJ"
649
+ };
650
+ const __rspack_default_export = ___CSS_LOADER_EXPORT___;
651
+ },
652
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/index.js??ruleSet[1].rules[1].use[1]!builtin:lightningcss-loader??ruleSet[1].rules[1].use[2]!./src/styles/panel.module.css" (module, __webpack_exports__, __webpack_require__) {
653
+ __webpack_require__.d(__webpack_exports__, {
654
+ A: ()=>__rspack_default_export
655
+ });
656
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0 = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/noSourceMaps.js");
657
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0_default = /*#__PURE__*/ __webpack_require__.n(_node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0);
658
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1 = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/api.js");
659
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1_default = /*#__PURE__*/ __webpack_require__.n(_node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1);
660
+ var ___CSS_LOADER_EXPORT___ = _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1_default()(_node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0_default());
661
+ ___CSS_LOADER_EXPORT___.push([
662
+ module.id,
663
+ `.container-XiXwoL {
664
+ z-index: var(--c15t-devtools-z-index, 99999);
665
+ font-family: var(--c15t-font-family, system-ui, -apple-system, sans-serif);
666
+ font-size: var(--c15t-font-size-sm, .875rem);
667
+ line-height: var(--c15t-line-height-normal, 1.5);
668
+ color: var(--c15t-text, #171717);
669
+ -webkit-font-smoothing: antialiased;
670
+ -moz-osx-font-smoothing: grayscale;
671
+ position: fixed;
672
+ }
673
+
674
+ .floatingButton-Gw8MtJ {
675
+ width: var(--c15t-devtools-button-size, 40px);
676
+ height: var(--c15t-devtools-button-size, 40px);
677
+ border: 1px solid var(--c15t-border, #e3e3e3);
678
+ border-radius: var(--c15t-radius-full, 9999px);
679
+ background-color: var(--c15t-surface, #fff);
680
+ box-shadow: var(--c15t-shadow-lg, 0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a);
681
+ cursor: grab;
682
+ z-index: var(--c15t-devtools-z-index, 99999);
683
+ transition: transform var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1)), box-shadow var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1)), background-color var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1));
684
+ transform-origin: center;
685
+ touch-action: none;
686
+ user-select: none;
687
+ -webkit-tap-highlight-color: transparent;
688
+ justify-content: center;
689
+ align-items: center;
690
+ padding: 0;
691
+ display: flex;
692
+ position: fixed;
693
+ }
694
+
695
+ @media (hover: hover) and (pointer: fine) {
696
+ .floatingButton-Gw8MtJ:hover {
697
+ background-color: var(--c15t-surface-hover, #f2f2f2);
698
+ box-shadow: var(--c15t-shadow-xl, 0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a);
699
+ }
700
+ }
701
+
702
+ .floatingButton-Gw8MtJ:focus {
703
+ outline: none;
704
+ }
705
+
706
+ .floatingButton-Gw8MtJ:focus-visible {
707
+ outline: 2px solid var(--c15t-primary, #335cff);
708
+ outline-offset: 2px;
709
+ }
710
+
711
+ .floatingButton-Gw8MtJ:active {
712
+ cursor: grabbing;
713
+ transform: scale(1.02);
714
+ }
715
+
716
+ .floatingButtonIcon-cHWefk {
717
+ width: 50%;
718
+ height: 50%;
719
+ color: var(--c15t-text, #171717);
720
+ pointer-events: none;
721
+ flex-shrink: 0;
722
+ justify-content: center;
723
+ align-items: center;
724
+ display: flex;
725
+ }
726
+
727
+ .floatingButtonIcon-cHWefk svg {
728
+ width: 100%;
729
+ height: 100%;
730
+ }
731
+
732
+ .positionBottomRight-ZPD58v {
733
+ bottom: 20px;
734
+ right: 20px;
735
+ }
736
+
737
+ .positionBottomLeft-MDd6AY {
738
+ bottom: 20px;
739
+ left: 20px;
740
+ }
741
+
742
+ .positionTopRight-L6yusU {
743
+ top: 20px;
744
+ right: 20px;
745
+ }
746
+
747
+ .positionTopLeft-C65boy {
748
+ top: 20px;
749
+ left: 20px;
750
+ }
751
+
752
+ .backdrop-LhVMB5 {
753
+ background-color: var(--c15t-overlay, #00000080);
754
+ z-index: calc(var(--c15t-devtools-z-index, 99999) + 1);
755
+ position: fixed;
756
+ inset: 0;
757
+ }
758
+
759
+ .panel-jtWove {
760
+ width: var(--c15t-devtools-panel-width, 480px);
761
+ max-height: var(--c15t-devtools-panel-max-height, 560px);
762
+ background-color: var(--c15t-surface, #fff);
763
+ border: 1px solid var(--c15t-border, #e3e3e3);
764
+ border-radius: var(--c15t-radius-lg, .75rem);
765
+ box-shadow: var(--c15t-shadow-lg, 0 8px 24px #0000001f);
766
+ z-index: calc(var(--c15t-devtools-z-index, 99999) + 2);
767
+ flex-direction: column;
768
+ display: flex;
769
+ position: fixed;
770
+ overflow: hidden;
771
+ }
772
+
773
+ .panel-jtWove.positionBottomRight-ZPD58v {
774
+ transform-origin: 100% 100%;
775
+ bottom: 80px;
776
+ right: 20px;
777
+ }
778
+
779
+ .panel-jtWove.positionBottomLeft-MDd6AY {
780
+ transform-origin: 0 100%;
781
+ bottom: 80px;
782
+ left: 20px;
783
+ }
784
+
785
+ .panel-jtWove.positionTopRight-L6yusU {
786
+ transform-origin: 100% 0;
787
+ top: 80px;
788
+ right: 20px;
789
+ }
790
+
791
+ .panel-jtWove.positionTopLeft-C65boy {
792
+ transform-origin: 0 0;
793
+ top: 80px;
794
+ left: 20px;
795
+ }
796
+
797
+ .header-xluoTr {
798
+ padding: var(--c15t-space-sm, .5rem) var(--c15t-space-md, 1rem);
799
+ border-bottom: 1px solid var(--c15t-border, #e3e3e3);
800
+ background-color: var(--c15t-devtools-surface-muted, #f5f5f5);
801
+ justify-content: space-between;
802
+ align-items: center;
803
+ display: flex;
804
+ }
805
+
806
+ .headerTitle-kJ9XjK {
807
+ align-items: center;
808
+ gap: var(--c15t-space-sm, .5rem);
809
+ font-size: var(--c15t-font-size-sm, .875rem);
810
+ font-weight: var(--c15t-font-weight-semibold, 600);
811
+ color: var(--c15t-text, #171717);
812
+ display: flex;
813
+ }
814
+
815
+ .headerLogo-PxJ_w1 {
816
+ width: 20px;
817
+ height: 20px;
818
+ color: var(--c15t-primary, #335cff);
819
+ }
820
+
821
+ .closeButton-Yto0Nb {
822
+ border-radius: var(--c15t-radius-sm, .25rem);
823
+ width: 28px;
824
+ height: 28px;
825
+ color: var(--c15t-text-muted, #737373);
826
+ cursor: pointer;
827
+ transition: background-color var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1)), color var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1));
828
+ background-color: #0000;
829
+ border: none;
830
+ justify-content: center;
831
+ align-items: center;
832
+ padding: 0;
833
+ display: flex;
834
+ }
835
+
836
+ .closeButton-Yto0Nb:hover {
837
+ background-color: var(--c15t-surface-hover, #f7f7f7);
838
+ color: var(--c15t-text, #171717);
839
+ }
840
+
841
+ .closeButton-Yto0Nb:focus-visible {
842
+ outline: 2px solid var(--c15t-primary, #335cff);
843
+ outline-offset: 1px;
844
+ }
845
+
846
+ .closeButtonIcon-fVlR1I {
847
+ width: 16px;
848
+ height: 16px;
849
+ }
850
+
851
+ .content-yDMYfG {
852
+ overscroll-behavior: contain;
853
+ -webkit-overflow-scrolling: touch;
854
+ flex: auto;
855
+ min-height: 200px;
856
+ overflow: hidden auto;
857
+ }
858
+
859
+ .footer-ESbmwQ {
860
+ padding: var(--c15t-space-xs, .25rem) var(--c15t-space-md, 1rem);
861
+ border-top: 1px solid var(--c15t-border, #e3e3e3);
862
+ background-color: var(--c15t-devtools-surface-muted, #f5f5f5);
863
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
864
+ color: var(--c15t-text-muted, #737373);
865
+ justify-content: space-between;
866
+ align-items: center;
867
+ display: flex;
868
+ }
869
+
870
+ .footerStatus-rlb99A {
871
+ align-items: center;
872
+ gap: var(--c15t-space-xs, .25rem);
873
+ display: flex;
874
+ }
875
+
876
+ .statusDot-hYJoej {
877
+ border-radius: var(--c15t-radius-full, 9999px);
878
+ width: 6px;
879
+ height: 6px;
880
+ }
881
+
882
+ .statusConnected-hPSUgS {
883
+ background-color: var(--c15t-devtools-badge-success, #21c45d);
884
+ }
885
+
886
+ .statusDisconnected-HIpcee {
887
+ background-color: var(--c15t-devtools-badge-error, #ef4343);
888
+ }
889
+
890
+ .errorState-DRtU3f {
891
+ padding: var(--c15t-space-xl, 2rem);
892
+ text-align: center;
893
+ justify-content: center;
894
+ align-items: center;
895
+ gap: var(--c15t-space-md, 1rem);
896
+ flex-direction: column;
897
+ display: flex;
898
+ }
899
+
900
+ .errorIcon-_o6Vta {
901
+ width: 48px;
902
+ height: 48px;
903
+ color: var(--c15t-devtools-badge-warning, #f59f0a);
904
+ }
905
+
906
+ .errorTitle-tkOy1H {
907
+ font-size: var(--c15t-font-size-base, 1rem);
908
+ font-weight: var(--c15t-font-weight-semibold, 600);
909
+ color: var(--c15t-text, #171717);
910
+ }
911
+
912
+ .errorMessage-MPRZNN {
913
+ font-size: var(--c15t-font-size-sm, .875rem);
914
+ color: var(--c15t-text-muted, #737373);
915
+ max-width: 280px;
916
+ }
917
+
918
+ @media (prefers-reduced-motion: reduce) {
919
+ .floatingButton-Gw8MtJ, .closeButton-Yto0Nb {
920
+ transition: none;
921
+ }
922
+ }
923
+
924
+ @media (hover: none) {
925
+ .floatingButton-Gw8MtJ:hover {
926
+ box-shadow: var(--c15t-shadow-md, 0 4px 12px #00000014);
927
+ transform: none;
928
+ }
929
+ }
930
+
931
+ .dropdownMenu-aKK18l {
932
+ min-width: 200px;
933
+ padding: var(--c15t-space-xs, .25rem);
934
+ border: 1px solid var(--c15t-border, #e3e3e3);
935
+ border-radius: var(--c15t-radius-lg, .75rem);
936
+ background-color: var(--c15t-surface, #fff);
937
+ box-shadow: var(--c15t-shadow-lg, 0 8px 24px #0000001f);
938
+ z-index: calc(var(--c15t-devtools-z-index, 99999) + 1);
939
+ opacity: 0;
940
+ transform-origin: 0 100%;
941
+ pointer-events: none;
942
+ transition: opacity var(--c15t-duration-fast, .1s) var(--c15t-easing-out, cubic-bezier(.215, .61, .355, 1)), transform var(--c15t-duration-fast, .1s) var(--c15t-easing-out, cubic-bezier(.215, .61, .355, 1));
943
+ position: fixed;
944
+ transform: scale(.95)translateY(8px);
945
+ }
946
+
947
+ .dropdownMenu-aKK18l[data-state="open"] {
948
+ opacity: 1;
949
+ pointer-events: auto;
950
+ transform: scale(1)translateY(0);
951
+ }
952
+
953
+ .dropdownMenuBottomLeft-MKUEpC {
954
+ transform-origin: 0 100%;
955
+ }
956
+
957
+ .dropdownMenuBottomRight-nXiRRF {
958
+ transform-origin: 100% 100%;
959
+ }
960
+
961
+ .dropdownMenuTopLeft-YlFVSe {
962
+ transform-origin: 0 0;
963
+ }
964
+
965
+ .dropdownMenuTopRight-OpvmUO {
966
+ transform-origin: 100% 0;
967
+ }
968
+
969
+ .menuItem-kBbHRP {
970
+ align-items: center;
971
+ gap: var(--c15t-space-sm, .5rem);
972
+ width: 100%;
973
+ padding: var(--c15t-space-sm, .5rem) var(--c15t-space-md, .75rem);
974
+ border-radius: var(--c15t-radius-md, .5rem);
975
+ color: var(--c15t-text, #171717);
976
+ font-size: var(--c15t-font-size-sm, .875rem);
977
+ font-weight: var(--c15t-font-weight-medium, 500);
978
+ text-align: left;
979
+ cursor: pointer;
980
+ transition: background-color var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1));
981
+ background: none;
982
+ border: none;
983
+ display: flex;
984
+ }
985
+
986
+ .menuItem-kBbHRP:hover {
987
+ background-color: var(--c15t-surface-hover, #f2f2f2);
988
+ }
989
+
990
+ .menuItem-kBbHRP:focus-visible {
991
+ outline: 2px solid var(--c15t-primary, #335cff);
992
+ outline-offset: -2px;
993
+ }
994
+
995
+ .menuItemIcon-P3pP5K {
996
+ width: 20px;
997
+ height: 20px;
998
+ color: var(--c15t-text-muted, #737373);
999
+ flex-shrink: 0;
1000
+ }
1001
+
1002
+ .menuItemLabel-d_d7sD {
1003
+ flex: 1;
1004
+ }
1005
+
1006
+ .menuItemDescription-hqdfJA {
1007
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
1008
+ color: var(--c15t-text-muted, #737373);
1009
+ font-weight: var(--c15t-font-weight-normal, 400);
1010
+ }
1011
+
1012
+ .menuItemContent-hBlruV {
1013
+ flex: 1;
1014
+ min-width: 0;
1015
+ }
1016
+
1017
+ .menuItemToggle-RHrCAX {
1018
+ flex-shrink: 0;
1019
+ margin-left: auto;
1020
+ }
1021
+
1022
+ .menuItemToggleTrack-gDp_f3 {
1023
+ background-color: var(--c15t-switch-track, #d9d9d9);
1024
+ border-radius: var(--c15t-radius-full, 9999px);
1025
+ width: 36px;
1026
+ height: 20px;
1027
+ transition: background-color var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1));
1028
+ position: relative;
1029
+ }
1030
+
1031
+ .menuItemToggleThumb-ioqqyc {
1032
+ background-color: var(--c15t-switch-thumb, #fff);
1033
+ border-radius: var(--c15t-radius-full, 9999px);
1034
+ width: 16px;
1035
+ height: 16px;
1036
+ box-shadow: var(--c15t-shadow-sm, 0 1px 2px #0000001a);
1037
+ transition: transform var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1));
1038
+ position: absolute;
1039
+ top: 2px;
1040
+ left: 2px;
1041
+ }
1042
+
1043
+ .menuItemToggleChecked-K3BPtk .menuItemToggleTrack-gDp_f3 {
1044
+ background-color: var(--c15t-switch-track-checked, #335cff);
1045
+ }
1046
+
1047
+ .menuItemToggleChecked-K3BPtk .menuItemToggleThumb-ioqqyc {
1048
+ transform: translateX(16px);
1049
+ }
1050
+
1051
+ .menuDivider-JIBdhU {
1052
+ height: 1px;
1053
+ margin: var(--c15t-space-xs, .25rem) 0;
1054
+ background-color: var(--c15t-border, #e3e3e3);
1055
+ }
1056
+
1057
+ .unifiedButtonWrapper-d3Frwt {
1058
+ display: contents;
1059
+ }
1060
+
1061
+ @media (prefers-reduced-motion: reduce) {
1062
+ .dropdownMenu-aKK18l {
1063
+ transition: none;
1064
+ }
1065
+ }
1066
+ `,
1067
+ ""
1068
+ ]);
1069
+ ___CSS_LOADER_EXPORT___.locals = {
1070
+ container: "container-XiXwoL",
1071
+ floatingButton: "floatingButton-Gw8MtJ",
1072
+ floatingButtonIcon: "floatingButtonIcon-cHWefk",
1073
+ positionBottomRight: "positionBottomRight-ZPD58v",
1074
+ positionBottomLeft: "positionBottomLeft-MDd6AY",
1075
+ positionTopRight: "positionTopRight-L6yusU",
1076
+ positionTopLeft: "positionTopLeft-C65boy",
1077
+ backdrop: "backdrop-LhVMB5",
1078
+ panel: "panel-jtWove",
1079
+ header: "header-xluoTr",
1080
+ headerTitle: "headerTitle-kJ9XjK",
1081
+ headerLogo: "headerLogo-PxJ_w1",
1082
+ closeButton: "closeButton-Yto0Nb",
1083
+ closeButtonIcon: "closeButtonIcon-fVlR1I",
1084
+ content: "content-yDMYfG",
1085
+ footer: "footer-ESbmwQ",
1086
+ footerStatus: "footerStatus-rlb99A",
1087
+ statusDot: "statusDot-hYJoej",
1088
+ statusConnected: "statusConnected-hPSUgS",
1089
+ statusDisconnected: "statusDisconnected-HIpcee",
1090
+ errorState: "errorState-DRtU3f",
1091
+ errorIcon: "errorIcon-_o6Vta",
1092
+ errorTitle: "errorTitle-tkOy1H",
1093
+ errorMessage: "errorMessage-MPRZNN",
1094
+ dropdownMenu: "dropdownMenu-aKK18l",
1095
+ dropdownMenuBottomLeft: "dropdownMenuBottomLeft-MKUEpC",
1096
+ dropdownMenuBottomRight: "dropdownMenuBottomRight-nXiRRF",
1097
+ dropdownMenuTopLeft: "dropdownMenuTopLeft-YlFVSe",
1098
+ dropdownMenuTopRight: "dropdownMenuTopRight-OpvmUO",
1099
+ menuItem: "menuItem-kBbHRP",
1100
+ menuItemIcon: "menuItemIcon-P3pP5K",
1101
+ menuItemLabel: "menuItemLabel-d_d7sD",
1102
+ menuItemDescription: "menuItemDescription-hqdfJA",
1103
+ menuItemContent: "menuItemContent-hBlruV",
1104
+ menuItemToggle: "menuItemToggle-RHrCAX",
1105
+ menuItemToggleTrack: "menuItemToggleTrack-gDp_f3",
1106
+ menuItemToggleThumb: "menuItemToggleThumb-ioqqyc",
1107
+ menuItemToggleChecked: "menuItemToggleChecked-K3BPtk",
1108
+ menuDivider: "menuDivider-JIBdhU",
1109
+ unifiedButtonWrapper: "unifiedButtonWrapper-d3Frwt"
1110
+ };
1111
+ const __rspack_default_export = ___CSS_LOADER_EXPORT___;
1112
+ },
1113
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/index.js??ruleSet[1].rules[1].use[1]!builtin:lightningcss-loader??ruleSet[1].rules[1].use[2]!./src/styles/tabs.module.css" (module, __webpack_exports__, __webpack_require__) {
1114
+ __webpack_require__.d(__webpack_exports__, {
1115
+ A: ()=>__rspack_default_export
1116
+ });
1117
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0 = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/noSourceMaps.js");
1118
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0_default = /*#__PURE__*/ __webpack_require__.n(_node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0);
1119
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1 = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/api.js");
1120
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1_default = /*#__PURE__*/ __webpack_require__.n(_node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1);
1121
+ var ___CSS_LOADER_EXPORT___ = _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1_default()(_node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0_default());
1122
+ ___CSS_LOADER_EXPORT___.push([
1123
+ module.id,
1124
+ `.tabList-IyuiBE {
1125
+ gap: var(--c15t-space-xs, .25rem);
1126
+ padding: var(--c15t-space-sm, .5rem) var(--c15t-space-md, 1rem);
1127
+ border-bottom: 1px solid var(--c15t-border, #e3e3e3);
1128
+ background-color: var(--c15t-surface, #fff);
1129
+ scrollbar-width: none;
1130
+ -ms-overflow-style: none;
1131
+ display: flex;
1132
+ overflow-x: auto;
1133
+ }
1134
+
1135
+ .tabList-IyuiBE::-webkit-scrollbar {
1136
+ display: none;
1137
+ }
1138
+
1139
+ .tab-yfDEqg {
1140
+ align-items: center;
1141
+ gap: var(--c15t-space-xs, .25rem);
1142
+ padding: var(--c15t-space-xs, .25rem) var(--c15t-space-sm, .5rem);
1143
+ border-radius: var(--c15t-radius-md, .5rem);
1144
+ color: var(--c15t-text-muted, #737373);
1145
+ font-family: inherit;
1146
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
1147
+ font-weight: var(--c15t-font-weight-medium, 500);
1148
+ cursor: pointer;
1149
+ white-space: nowrap;
1150
+ transition: background-color var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1)), color var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1));
1151
+ background-color: #0000;
1152
+ border: none;
1153
+ display: flex;
1154
+ }
1155
+
1156
+ .tab-yfDEqg:hover {
1157
+ background-color: var(--c15t-surface-hover, #f7f7f7);
1158
+ color: var(--c15t-text, #171717);
1159
+ }
1160
+
1161
+ .tab-yfDEqg:focus-visible {
1162
+ outline: 2px solid var(--c15t-primary, #335cff);
1163
+ outline-offset: 1px;
1164
+ }
1165
+
1166
+ .tabActive-r4hing {
1167
+ background-color: var(--c15t-primary, #335cff);
1168
+ color: var(--c15t-text-on-primary, #fff);
1169
+ }
1170
+
1171
+ .tabActive-r4hing:hover {
1172
+ background-color: var(--c15t-primary-hover, #03f);
1173
+ color: var(--c15t-text-on-primary, #fff);
1174
+ }
1175
+
1176
+ .tabIcon-U9tnu0 {
1177
+ flex-shrink: 0;
1178
+ width: 14px;
1179
+ height: 14px;
1180
+ }
1181
+
1182
+ .tabDisabled-lDuv5l {
1183
+ opacity: .5;
1184
+ cursor: not-allowed;
1185
+ pointer-events: none;
1186
+ }
1187
+
1188
+ .tabDisabled-lDuv5l:hover {
1189
+ color: var(--c15t-text-muted, #737373);
1190
+ background-color: #0000;
1191
+ }
1192
+
1193
+ .tabPanel-QKO8FX {
1194
+ display: none;
1195
+ }
1196
+
1197
+ .tabPanelActive-mrNlGE {
1198
+ display: block;
1199
+ }
1200
+
1201
+ @media (prefers-reduced-motion: reduce) {
1202
+ .tab-yfDEqg {
1203
+ transition: none;
1204
+ }
1205
+ }
1206
+
1207
+ @media (hover: none) {
1208
+ .tab-yfDEqg:hover:not(.tabActive-r4hing) {
1209
+ color: var(--c15t-text-muted, #737373);
1210
+ background-color: #0000;
1211
+ }
1212
+ }
1213
+ `,
1214
+ ""
1215
+ ]);
1216
+ ___CSS_LOADER_EXPORT___.locals = {
1217
+ tabList: "tabList-IyuiBE",
1218
+ tab: "tab-yfDEqg",
1219
+ tabActive: "tabActive-r4hing",
1220
+ tabIcon: "tabIcon-U9tnu0",
1221
+ tabDisabled: "tabDisabled-lDuv5l",
1222
+ tabPanel: "tabPanel-QKO8FX",
1223
+ tabPanelActive: "tabPanelActive-mrNlGE"
1224
+ };
1225
+ const __rspack_default_export = ___CSS_LOADER_EXPORT___;
1226
+ },
1227
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/index.js??ruleSet[1].rules[1].use[1]!builtin:lightningcss-loader??ruleSet[1].rules[1].use[2]!./src/styles/tokens.css" (module, __webpack_exports__, __webpack_require__) {
1228
+ __webpack_require__.d(__webpack_exports__, {
1229
+ A: ()=>__rspack_default_export
1230
+ });
1231
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0 = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/noSourceMaps.js");
1232
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0_default = /*#__PURE__*/ __webpack_require__.n(_node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0);
1233
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1 = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/api.js");
1234
+ var _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1_default = /*#__PURE__*/ __webpack_require__.n(_node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1);
1235
+ var ___CSS_LOADER_EXPORT___ = _node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1_default()(_node_modules_bun_rsbuild_core_1_6_12_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0_default());
1236
+ ___CSS_LOADER_EXPORT___.push([
1237
+ module.id,
1238
+ `:root {
1239
+ --c15t-devtools-panel-width: 480px;
1240
+ --c15t-devtools-panel-max-height: 560px;
1241
+ --c15t-devtools-button-size: 40px;
1242
+ --c15t-devtools-z-index: 99999;
1243
+ --c15t-devtools-surface-muted: var(--c15t-surface-hover, #f7f7f7);
1244
+ --c15t-devtools-font-size-xs: .75rem;
1245
+ --c15t-devtools-badge-success: #21c45d;
1246
+ --c15t-devtools-badge-success-bg: #e4fbed;
1247
+ --c15t-devtools-badge-error: #ef4343;
1248
+ --c15t-devtools-badge-error-bg: #fde7e7;
1249
+ --c15t-devtools-badge-warning: #f59f0a;
1250
+ --c15t-devtools-badge-warning-bg: #fef7dc;
1251
+ --c15t-devtools-badge-info: #2463eb;
1252
+ --c15t-devtools-badge-info-bg: #dcebfe;
1253
+ --c15t-devtools-badge-neutral: #737373;
1254
+ --c15t-devtools-badge-neutral-bg: #f0f0f0;
1255
+ }
1256
+
1257
+ :is(:global(.c15t-dark), :global(.dark)) {
1258
+ --c15t-devtools-surface-muted: var(--c15t-surface-hover, #292929);
1259
+ --c15t-devtools-badge-success-bg: #21c45d33;
1260
+ --c15t-devtools-badge-error-bg: #ef434333;
1261
+ --c15t-devtools-badge-warning-bg: #f59f0a33;
1262
+ --c15t-devtools-badge-info-bg: #2463eb33;
1263
+ --c15t-devtools-badge-neutral-bg: #383838;
1264
+ }
1265
+
1266
+ @media (prefers-color-scheme: dark) {
1267
+ :root {
1268
+ --c15t-devtools-surface-muted: var(--c15t-surface-hover, #292929);
1269
+ --c15t-devtools-badge-success-bg: #21c45d33;
1270
+ --c15t-devtools-badge-error-bg: #ef434333;
1271
+ --c15t-devtools-badge-warning-bg: #f59f0a33;
1272
+ --c15t-devtools-badge-info-bg: #2463eb33;
1273
+ --c15t-devtools-badge-neutral-bg: #383838;
1274
+ }
1275
+ }
1276
+ `,
1277
+ ""
1278
+ ]);
1279
+ const __rspack_default_export = ___CSS_LOADER_EXPORT___;
1280
+ },
1281
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/api.js" (module) {
1282
+ module.exports = function(cssWithMappingToString) {
1283
+ var list = [];
1284
+ list.toString = function() {
1285
+ return this.map(function(item) {
1286
+ var content = "";
1287
+ var needLayer = void 0 !== item[5];
1288
+ if (item[4]) content += "@supports (".concat(item[4], ") {");
1289
+ if (item[2]) content += "@media ".concat(item[2], " {");
1290
+ if (needLayer) content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");
1291
+ content += cssWithMappingToString(item);
1292
+ if (needLayer) content += "}";
1293
+ if (item[2]) content += "}";
1294
+ if (item[4]) content += "}";
1295
+ return content;
1296
+ }).join("");
1297
+ };
1298
+ list.i = function(modules, media, dedupe, supports, layer) {
1299
+ if ("string" == typeof modules) modules = [
1300
+ [
1301
+ null,
1302
+ modules,
1303
+ void 0
1304
+ ]
1305
+ ];
1306
+ var alreadyImportedModules = {};
1307
+ if (dedupe) for(var k = 0; k < this.length; k++){
1308
+ var id = this[k][0];
1309
+ if (null != id) alreadyImportedModules[id] = true;
1310
+ }
1311
+ for(var _k = 0; _k < modules.length; _k++){
1312
+ var item = [].concat(modules[_k]);
1313
+ if (!dedupe || !alreadyImportedModules[item[0]]) {
1314
+ if (void 0 !== layer) if (void 0 === item[5]) item[5] = layer;
1315
+ else {
1316
+ item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");
1317
+ item[5] = layer;
1318
+ }
1319
+ if (media) if (item[2]) {
1320
+ item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");
1321
+ item[2] = media;
1322
+ } else item[2] = media;
1323
+ if (supports) if (item[4]) {
1324
+ item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");
1325
+ item[4] = supports;
1326
+ } else item[4] = "".concat(supports);
1327
+ list.push(item);
1328
+ }
1329
+ }
1330
+ };
1331
+ return list;
1332
+ };
1333
+ },
1334
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/noSourceMaps.js" (module) {
1335
+ module.exports = function(i) {
1336
+ return i[1];
1337
+ };
1338
+ },
1339
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/injectStylesIntoStyleTag.js" (module) {
1340
+ var stylesInDOM = [];
1341
+ function getIndexByIdentifier(identifier) {
1342
+ var result = -1;
1343
+ for(var i = 0; i < stylesInDOM.length; i++)if (stylesInDOM[i].identifier === identifier) {
1344
+ result = i;
1345
+ break;
1346
+ }
1347
+ return result;
1348
+ }
1349
+ function modulesToDom(list, options) {
1350
+ var idCountMap = {};
1351
+ var identifiers = [];
1352
+ for(var i = 0; i < list.length; i++){
1353
+ var item = list[i];
1354
+ var id = options.base ? item[0] + options.base : item[0];
1355
+ var count = idCountMap[id] || 0;
1356
+ var identifier = "".concat(id, " ").concat(count);
1357
+ idCountMap[id] = count + 1;
1358
+ var indexByIdentifier = getIndexByIdentifier(identifier);
1359
+ var obj = {
1360
+ css: item[1],
1361
+ media: item[2],
1362
+ sourceMap: item[3],
1363
+ supports: item[4],
1364
+ layer: item[5]
1365
+ };
1366
+ if (-1 !== indexByIdentifier) {
1367
+ stylesInDOM[indexByIdentifier].references++;
1368
+ stylesInDOM[indexByIdentifier].updater(obj);
1369
+ } else {
1370
+ var updater = addElementStyle(obj, options);
1371
+ options.byIndex = i;
1372
+ stylesInDOM.splice(i, 0, {
1373
+ identifier: identifier,
1374
+ updater: updater,
1375
+ references: 1
1376
+ });
1377
+ }
1378
+ identifiers.push(identifier);
1379
+ }
1380
+ return identifiers;
1381
+ }
1382
+ function addElementStyle(obj, options) {
1383
+ var api = options.domAPI(options);
1384
+ api.update(obj);
1385
+ var updater = function(newObj) {
1386
+ if (newObj) {
1387
+ if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) return;
1388
+ api.update(obj = newObj);
1389
+ } else api.remove();
1390
+ };
1391
+ return updater;
1392
+ }
1393
+ module.exports = function(list, options) {
1394
+ options = options || {};
1395
+ list = list || [];
1396
+ var lastIdentifiers = modulesToDom(list, options);
1397
+ return function(newList) {
1398
+ newList = newList || [];
1399
+ for(var i = 0; i < lastIdentifiers.length; i++){
1400
+ var identifier = lastIdentifiers[i];
1401
+ var index = getIndexByIdentifier(identifier);
1402
+ stylesInDOM[index].references--;
1403
+ }
1404
+ var newLastIdentifiers = modulesToDom(newList, options);
1405
+ for(var _i = 0; _i < lastIdentifiers.length; _i++){
1406
+ var _identifier = lastIdentifiers[_i];
1407
+ var _index = getIndexByIdentifier(_identifier);
1408
+ if (0 === stylesInDOM[_index].references) {
1409
+ stylesInDOM[_index].updater();
1410
+ stylesInDOM.splice(_index, 1);
1411
+ }
1412
+ }
1413
+ lastIdentifiers = newLastIdentifiers;
1414
+ };
1415
+ };
1416
+ },
1417
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/insertBySelector.js" (module) {
1418
+ var memo = {};
1419
+ function getTarget(target) {
1420
+ if (void 0 === memo[target]) {
1421
+ var styleTarget = document.querySelector(target);
1422
+ if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) try {
1423
+ styleTarget = styleTarget.contentDocument.head;
1424
+ } catch (e) {
1425
+ styleTarget = null;
1426
+ }
1427
+ memo[target] = styleTarget;
1428
+ }
1429
+ return memo[target];
1430
+ }
1431
+ function insertBySelector(insert, style) {
1432
+ var target = getTarget(insert);
1433
+ if (!target) throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
1434
+ target.appendChild(style);
1435
+ }
1436
+ module.exports = insertBySelector;
1437
+ },
1438
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/insertStyleElement.js" (module) {
1439
+ function insertStyleElement(options) {
1440
+ var element = document.createElement("style");
1441
+ options.setAttributes(element, options.attributes);
1442
+ options.insert(element, options.options);
1443
+ return element;
1444
+ }
1445
+ module.exports = insertStyleElement;
1446
+ },
1447
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/setAttributesWithoutAttributes.js" (module, __unused_webpack_exports, __webpack_require__) {
1448
+ function setAttributesWithoutAttributes(styleElement) {
1449
+ var nonce = __webpack_require__.nc;
1450
+ if (nonce) styleElement.setAttribute("nonce", nonce);
1451
+ }
1452
+ module.exports = setAttributesWithoutAttributes;
1453
+ },
1454
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/styleDomAPI.js" (module) {
1455
+ function apply(styleElement, options, obj) {
1456
+ var css = "";
1457
+ if (obj.supports) css += "@supports (".concat(obj.supports, ") {");
1458
+ if (obj.media) css += "@media ".concat(obj.media, " {");
1459
+ var needLayer = void 0 !== obj.layer;
1460
+ if (needLayer) css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");
1461
+ css += obj.css;
1462
+ if (needLayer) css += "}";
1463
+ if (obj.media) css += "}";
1464
+ if (obj.supports) css += "}";
1465
+ var sourceMap = obj.sourceMap;
1466
+ if (sourceMap && "undefined" != typeof btoa) css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
1467
+ options.styleTagTransform(css, styleElement, options.options);
1468
+ }
1469
+ function removeStyleElement(styleElement) {
1470
+ if (null === styleElement.parentNode) return false;
1471
+ styleElement.parentNode.removeChild(styleElement);
1472
+ }
1473
+ function domAPI(options) {
1474
+ if ("undefined" == typeof document) return {
1475
+ update: function() {},
1476
+ remove: function() {}
1477
+ };
1478
+ var styleElement = options.insertStyleElement(options);
1479
+ return {
1480
+ update: function(obj) {
1481
+ apply(styleElement, options, obj);
1482
+ },
1483
+ remove: function() {
1484
+ removeStyleElement(styleElement);
1485
+ }
1486
+ };
1487
+ }
1488
+ module.exports = domAPI;
1489
+ },
1490
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/styleTagTransform.js" (module) {
1491
+ function styleTagTransform(css, styleElement) {
1492
+ if (styleElement.styleSheet) styleElement.styleSheet.cssText = css;
1493
+ else {
1494
+ while(styleElement.firstChild)styleElement.removeChild(styleElement.firstChild);
1495
+ styleElement.appendChild(document.createTextNode(css));
1496
+ }
1497
+ }
1498
+ module.exports = styleTagTransform;
1499
+ }
1500
+ };
1501
+ var __webpack_module_cache__ = {};
1502
+ function __webpack_require__(moduleId) {
1503
+ var cachedModule = __webpack_module_cache__[moduleId];
1504
+ if (void 0 !== cachedModule) return cachedModule.exports;
1505
+ var module = __webpack_module_cache__[moduleId] = {
1506
+ id: moduleId,
1507
+ exports: {}
1508
+ };
1509
+ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
1510
+ return module.exports;
1511
+ }
1512
+ (()=>{
1513
+ __webpack_require__.n = (module)=>{
1514
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
1515
+ __webpack_require__.d(getter, {
1516
+ a: getter
1517
+ });
1518
+ return getter;
1519
+ };
1520
+ })();
1521
+ (()=>{
1522
+ __webpack_require__.d = (exports, definition)=>{
1523
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) Object.defineProperty(exports, key, {
1524
+ enumerable: true,
1525
+ get: definition[key]
1526
+ });
1527
+ };
1528
+ })();
1529
+ (()=>{
1530
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
1531
+ })();
1532
+ (()=>{
1533
+ __webpack_require__.nc = void 0;
1534
+ })();
1535
+ function createElement(options = {}) {
1536
+ const { tag = 'div', text, html, children, className, id, style, dataset, onClick, onMouseEnter, onMouseLeave, onKeyDown, onKeyUp, onFocus, onBlur, onChange, onInput, onAnimationEnd, onTransitionEnd, ...attrs } = options;
1537
+ const element = document.createElement(tag);
1538
+ if (className) element.className = className;
1539
+ if (id) element.id = id;
1540
+ if (style) {
1541
+ for (const [key, value] of Object.entries(style))if (void 0 !== value) element.style.setProperty(key.replace(/([A-Z])/g, '-$1').toLowerCase(), String(value));
1542
+ }
1543
+ if (dataset) for (const [key, value] of Object.entries(dataset))element.dataset[key] = value;
1544
+ if (text) element.textContent = text;
1545
+ if (html) element.innerHTML = html;
1546
+ if (children) {
1547
+ for (const child of children)if (null != child) if ('string' == typeof child) element.appendChild(document.createTextNode(child));
1548
+ else element.appendChild(child);
1549
+ }
1550
+ if (void 0 !== attrs.ariaLabel) element.setAttribute('aria-label', attrs.ariaLabel);
1551
+ if (void 0 !== attrs.ariaExpanded) element.setAttribute('aria-expanded', attrs.ariaExpanded);
1552
+ if (void 0 !== attrs.ariaHidden) element.setAttribute('aria-hidden', attrs.ariaHidden);
1553
+ if (void 0 !== attrs.ariaSelected) element.setAttribute('aria-selected', attrs.ariaSelected);
1554
+ if (void 0 !== attrs.ariaControls) element.setAttribute('aria-controls', attrs.ariaControls);
1555
+ if (void 0 !== attrs.ariaChecked) element.setAttribute('aria-checked', attrs.ariaChecked);
1556
+ for (const [key, value] of Object.entries(attrs))if (void 0 !== value && !key.startsWith('aria')) if ('boolean' == typeof value) {
1557
+ if (value) element.setAttribute(key, '');
1558
+ } else element.setAttribute(key, String(value));
1559
+ if (onClick) element.addEventListener('click', onClick);
1560
+ if (onMouseEnter) element.addEventListener('mouseenter', onMouseEnter);
1561
+ if (onMouseLeave) element.addEventListener('mouseleave', onMouseLeave);
1562
+ if (onKeyDown) element.addEventListener('keydown', onKeyDown);
1563
+ if (onKeyUp) element.addEventListener('keyup', onKeyUp);
1564
+ if (onFocus) element.addEventListener('focus', onFocus);
1565
+ if (onBlur) element.addEventListener('blur', onBlur);
1566
+ if (onChange) element.addEventListener('change', onChange);
1567
+ if (onInput) element.addEventListener('input', onInput);
1568
+ if (onAnimationEnd) element.addEventListener('animationend', onAnimationEnd);
1569
+ if (onTransitionEnd) element.addEventListener('transitionend', onTransitionEnd);
1570
+ return element;
1571
+ }
1572
+ function renderer_div(options = {}) {
1573
+ return createElement({
1574
+ ...options,
1575
+ tag: 'div'
1576
+ });
1577
+ }
1578
+ function renderer_button(options = {}) {
1579
+ return createElement({
1580
+ ...options,
1581
+ tag: 'button',
1582
+ type: options.type ?? 'button'
1583
+ });
1584
+ }
1585
+ function renderer_span(options = {}) {
1586
+ return createElement({
1587
+ ...options,
1588
+ tag: 'span'
1589
+ });
1590
+ }
1591
+ function input(options = {}) {
1592
+ return createElement({
1593
+ ...options,
1594
+ tag: 'input'
1595
+ });
1596
+ }
1597
+ function renderer_select(options = {}) {
1598
+ const { options: selectOptions, selectedValue, ...rest } = options;
1599
+ const selectElement = createElement({
1600
+ ...rest,
1601
+ tag: 'select'
1602
+ });
1603
+ if (selectOptions) for (const opt of selectOptions){
1604
+ const optionElement = document.createElement('option');
1605
+ optionElement.value = opt.value;
1606
+ optionElement.textContent = opt.label;
1607
+ if (selectedValue === opt.value) optionElement.selected = true;
1608
+ selectElement.appendChild(optionElement);
1609
+ }
1610
+ return selectElement;
1611
+ }
1612
+ function renderer_createSvgElement(svgContent, options = {}) {
1613
+ const { className, ariaHidden = true, width = 24, height = 24 } = options;
1614
+ const wrapper = document.createElement('div');
1615
+ wrapper.innerHTML = svgContent.trim();
1616
+ const svg = wrapper.firstElementChild;
1617
+ if (svg) {
1618
+ if (className) svg.setAttribute('class', className);
1619
+ if (ariaHidden) svg.setAttribute('aria-hidden', 'true');
1620
+ svg.setAttribute('width', String(width));
1621
+ svg.setAttribute('height', String(height));
1622
+ }
1623
+ return svg;
1624
+ }
1625
+ function renderer_clearElement(element) {
1626
+ while(element.firstChild)element.removeChild(element.firstChild);
1627
+ }
1628
+ var injectStylesIntoStyleTag = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/injectStylesIntoStyleTag.js");
1629
+ var injectStylesIntoStyleTag_default = /*#__PURE__*/ __webpack_require__.n(injectStylesIntoStyleTag);
1630
+ var styleDomAPI = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/styleDomAPI.js");
1631
+ var styleDomAPI_default = /*#__PURE__*/ __webpack_require__.n(styleDomAPI);
1632
+ var insertBySelector = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/insertBySelector.js");
1633
+ var insertBySelector_default = /*#__PURE__*/ __webpack_require__.n(insertBySelector);
1634
+ var setAttributesWithoutAttributes = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/setAttributesWithoutAttributes.js");
1635
+ var setAttributesWithoutAttributes_default = /*#__PURE__*/ __webpack_require__.n(setAttributesWithoutAttributes);
1636
+ var insertStyleElement = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/insertStyleElement.js");
1637
+ var insertStyleElement_default = /*#__PURE__*/ __webpack_require__.n(insertStyleElement);
1638
+ var styleTagTransform = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/styleTagTransform.js");
1639
+ var styleTagTransform_default = /*#__PURE__*/ __webpack_require__.n(styleTagTransform);
1640
+ var animations_module = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/index.js??ruleSet[1].rules[1].use[1]!builtin:lightningcss-loader??ruleSet[1].rules[1].use[2]!./src/styles/animations.module.css");
1641
+ var animations_module_options = {};
1642
+ animations_module_options.styleTagTransform = styleTagTransform_default();
1643
+ animations_module_options.setAttributes = setAttributesWithoutAttributes_default();
1644
+ animations_module_options.insert = insertBySelector_default().bind(null, "head");
1645
+ animations_module_options.domAPI = styleDomAPI_default();
1646
+ animations_module_options.insertStyleElement = insertStyleElement_default();
1647
+ injectStylesIntoStyleTag_default()(animations_module.A, animations_module_options);
1648
+ animations_module.A && animations_module.A.locals && animations_module.A.locals;
1649
+ var panel_module = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/index.js??ruleSet[1].rules[1].use[1]!builtin:lightningcss-loader??ruleSet[1].rules[1].use[2]!./src/styles/panel.module.css");
1650
+ var panel_module_options = {};
1651
+ panel_module_options.styleTagTransform = styleTagTransform_default();
1652
+ panel_module_options.setAttributes = setAttributesWithoutAttributes_default();
1653
+ panel_module_options.insert = insertBySelector_default().bind(null, "head");
1654
+ panel_module_options.domAPI = styleDomAPI_default();
1655
+ panel_module_options.insertStyleElement = insertStyleElement_default();
1656
+ injectStylesIntoStyleTag_default()(panel_module.A, panel_module_options);
1657
+ panel_module.A && panel_module.A.locals && panel_module.A.locals;
1658
+ '[data-c15t-trigger], [aria-label*="privacy settings"], [aria-label*="preference"]';
1659
+ var tabs_module = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/index.js??ruleSet[1].rules[1].use[1]!builtin:lightningcss-loader??ruleSet[1].rules[1].use[2]!./src/styles/tabs.module.css");
1660
+ var tabs_module_options = {};
1661
+ tabs_module_options.styleTagTransform = styleTagTransform_default();
1662
+ tabs_module_options.setAttributes = setAttributesWithoutAttributes_default();
1663
+ tabs_module_options.insert = insertBySelector_default().bind(null, "head");
1664
+ tabs_module_options.domAPI = styleDomAPI_default();
1665
+ tabs_module_options.insertStyleElement = insertStyleElement_default();
1666
+ injectStylesIntoStyleTag_default()(tabs_module.A, tabs_module_options);
1667
+ const styles_tabs_module = tabs_module.A && tabs_module.A.locals ? tabs_module.A.locals : void 0;
1668
+ const CONSENTS_ICON = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1669
+ <rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect>
1670
+ <path d="M7 11V7a5 5 0 0 1 10 0v4"></path>
1671
+ </svg>`;
1672
+ const LOCATION_ICON = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1673
+ <circle cx="12" cy="12" r="10"></circle>
1674
+ <line x1="2" y1="12" x2="22" y2="12"></line>
1675
+ <path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"></path>
1676
+ </svg>`;
1677
+ const SCRIPTS_ICON = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1678
+ <polyline points="16 18 22 12 16 6"></polyline>
1679
+ <polyline points="8 6 2 12 8 18"></polyline>
1680
+ </svg>`;
1681
+ const ACTIONS_ICON = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1682
+ <path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path>
1683
+ <circle cx="12" cy="12" r="3"></circle>
1684
+ </svg>`;
1685
+ const IAB_ICON = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1686
+ <path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path>
1687
+ <path d="m9 12 2 2 4-4"></path>
1688
+ </svg>`;
1689
+ const EVENTS_ICON = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1690
+ <path d="M12 20h9"></path>
1691
+ <path d="M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z"></path>
1692
+ </svg>`;
1693
+ const TABS = [
1694
+ {
1695
+ id: 'location',
1696
+ label: 'Location',
1697
+ icon: LOCATION_ICON
1698
+ },
1699
+ {
1700
+ id: 'consents',
1701
+ label: 'Consents',
1702
+ icon: CONSENTS_ICON
1703
+ },
1704
+ {
1705
+ id: "scripts",
1706
+ label: 'Scripts',
1707
+ icon: SCRIPTS_ICON
1708
+ },
1709
+ {
1710
+ id: 'iab',
1711
+ label: 'IAB',
1712
+ icon: IAB_ICON
1713
+ },
1714
+ {
1715
+ id: 'actions',
1716
+ label: 'Actions',
1717
+ icon: ACTIONS_ICON
1718
+ },
1719
+ {
1720
+ id: 'events',
1721
+ label: 'Events',
1722
+ icon: EVENTS_ICON
1723
+ }
1724
+ ];
1725
+ function tabs_createTabs(options) {
1726
+ const { onTabChange, disabledTabs = [] } = options;
1727
+ let activeTab = options.activeTab;
1728
+ const tabButtons = new Map();
1729
+ const tabList = renderer_div({
1730
+ className: styles_tabs_module.tabList,
1731
+ role: 'tablist',
1732
+ ariaLabel: 'DevTools tabs'
1733
+ });
1734
+ for (const tab of TABS){
1735
+ const isActive = tab.id === activeTab;
1736
+ const isDisabled = disabledTabs.includes(tab.id);
1737
+ const tabButton = renderer_button({
1738
+ className: `${styles_tabs_module.tab} ${isActive ? styles_tabs_module.tabActive : ''} ${isDisabled ? styles_tabs_module.tabDisabled : ''}`,
1739
+ role: 'tab',
1740
+ ariaSelected: isActive ? 'true' : 'false',
1741
+ ariaControls: `panel-${tab.id}`,
1742
+ ariaDisabled: isDisabled ? 'true' : void 0,
1743
+ tabIndex: isActive ? 0 : -1,
1744
+ disabled: isDisabled,
1745
+ onClick: ()=>{
1746
+ if (!isDisabled) {
1747
+ setActiveTab(tab.id);
1748
+ onTabChange(tab.id);
1749
+ }
1750
+ },
1751
+ onKeyDown: (e)=>handleKeyDown(e, tab.id)
1752
+ });
1753
+ const iconWrapper = renderer_div({
1754
+ className: styles_tabs_module.tabIcon
1755
+ });
1756
+ iconWrapper.appendChild(renderer_createSvgElement(tab.icon, {
1757
+ width: 14,
1758
+ height: 14
1759
+ }));
1760
+ tabButton.appendChild(iconWrapper);
1761
+ tabButton.appendChild(document.createTextNode(tab.label));
1762
+ tabButtons.set(tab.id, tabButton);
1763
+ tabList.appendChild(tabButton);
1764
+ }
1765
+ function handleKeyDown(e, currentTab) {
1766
+ const tabIds = TABS.map((t)=>t.id);
1767
+ const enabledTabIds = tabIds.filter((id)=>!disabledTabs.includes(id));
1768
+ const currentIndex = enabledTabIds.indexOf(currentTab);
1769
+ let newIndex = currentIndex;
1770
+ switch(e.key){
1771
+ case 'ArrowLeft':
1772
+ newIndex = currentIndex > 0 ? currentIndex - 1 : enabledTabIds.length - 1;
1773
+ break;
1774
+ case 'ArrowRight':
1775
+ newIndex = currentIndex < enabledTabIds.length - 1 ? currentIndex + 1 : 0;
1776
+ break;
1777
+ case 'Home':
1778
+ newIndex = 0;
1779
+ break;
1780
+ case 'End':
1781
+ newIndex = enabledTabIds.length - 1;
1782
+ break;
1783
+ default:
1784
+ return;
1785
+ }
1786
+ e.preventDefault();
1787
+ const newTab = enabledTabIds[newIndex];
1788
+ if (newTab) {
1789
+ setActiveTab(newTab);
1790
+ onTabChange(newTab);
1791
+ tabButtons.get(newTab)?.focus();
1792
+ }
1793
+ }
1794
+ function setActiveTab(tab) {
1795
+ activeTab = tab;
1796
+ for (const [tabId, tabButton] of tabButtons){
1797
+ const isActive = tabId === tab;
1798
+ if (styles_tabs_module.tabActive) tabButton.classList.toggle(styles_tabs_module.tabActive, isActive);
1799
+ tabButton.setAttribute('aria-selected', isActive ? 'true' : 'false');
1800
+ tabButton.tabIndex = isActive ? 0 : -1;
1801
+ }
1802
+ }
1803
+ return {
1804
+ element: tabList,
1805
+ setActiveTab,
1806
+ destroy: ()=>{
1807
+ tabButtons.clear();
1808
+ }
1809
+ };
1810
+ }
1811
+ var components_module = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/index.js??ruleSet[1].rules[1].use[1]!builtin:lightningcss-loader??ruleSet[1].rules[1].use[2]!./src/styles/components.module.css");
1812
+ var components_module_options = {};
1813
+ components_module_options.styleTagTransform = styleTagTransform_default();
1814
+ components_module_options.setAttributes = setAttributesWithoutAttributes_default();
1815
+ components_module_options.insert = insertBySelector_default().bind(null, "head");
1816
+ components_module_options.domAPI = styleDomAPI_default();
1817
+ components_module_options.insertStyleElement = insertStyleElement_default();
1818
+ injectStylesIntoStyleTag_default()(components_module.A, components_module_options);
1819
+ const styles_components_module = components_module.A && components_module.A.locals ? components_module.A.locals : void 0;
1820
+ function createToggle(options) {
1821
+ const { checked, onChange, ariaLabel, disabled = false } = options;
1822
+ const toggle = renderer_button({
1823
+ className: `${styles_components_module.toggle} ${checked ? styles_components_module.toggleActive : ''}`,
1824
+ role: 'switch',
1825
+ ariaLabel,
1826
+ ariaChecked: checked ? 'true' : 'false',
1827
+ disabled,
1828
+ onClick: ()=>{
1829
+ if (!disabled) onChange(!checked);
1830
+ }
1831
+ });
1832
+ const thumb = renderer_div({
1833
+ className: styles_components_module.toggleThumb
1834
+ });
1835
+ toggle.appendChild(thumb);
1836
+ return toggle;
1837
+ }
1838
+ function createBadge(options) {
1839
+ const { text, variant = 'neutral' } = options;
1840
+ const variantClass = {
1841
+ success: styles_components_module.badgeSuccess,
1842
+ error: styles_components_module.badgeError,
1843
+ warning: styles_components_module.badgeWarning,
1844
+ info: styles_components_module.badgeInfo,
1845
+ neutral: styles_components_module.badgeNeutral
1846
+ }[variant];
1847
+ return renderer_span({
1848
+ className: `${styles_components_module.badge} ${variantClass}`,
1849
+ text
1850
+ });
1851
+ }
1852
+ function createButton(options) {
1853
+ const { text, variant = 'default', small = false, icon, disabled = false, onClick } = options;
1854
+ const variantClass = {
1855
+ default: '',
1856
+ primary: styles_components_module.btnPrimary,
1857
+ danger: styles_components_module.btnDanger
1858
+ }[variant];
1859
+ const sizeClass = small ? styles_components_module.btnSmall : '';
1860
+ const btn = renderer_button({
1861
+ className: `${styles_components_module.btn} ${variantClass} ${sizeClass}`.trim(),
1862
+ disabled,
1863
+ onClick
1864
+ });
1865
+ if (icon) {
1866
+ const iconWrapper = renderer_div({
1867
+ className: styles_components_module.btnIcon
1868
+ });
1869
+ iconWrapper.appendChild(renderer_createSvgElement(icon, {
1870
+ width: 14,
1871
+ height: 14
1872
+ }));
1873
+ btn.appendChild(iconWrapper);
1874
+ }
1875
+ btn.appendChild(document.createTextNode(text));
1876
+ return btn;
1877
+ }
1878
+ function createListItem(options) {
1879
+ const { title, description, actions = [] } = options;
1880
+ const content = renderer_div({
1881
+ className: styles_components_module.listItemContent,
1882
+ children: [
1883
+ renderer_span({
1884
+ className: styles_components_module.listItemTitle,
1885
+ text: title
1886
+ }),
1887
+ description ? renderer_span({
1888
+ className: styles_components_module.listItemDescription,
1889
+ text: description
1890
+ }) : null
1891
+ ]
1892
+ });
1893
+ const actionsContainer = renderer_div({
1894
+ className: styles_components_module.listItemActions,
1895
+ children: actions
1896
+ });
1897
+ return renderer_div({
1898
+ className: styles_components_module.listItem,
1899
+ children: [
1900
+ content,
1901
+ actionsContainer
1902
+ ]
1903
+ });
1904
+ }
1905
+ function createSection(options) {
1906
+ const { title, actions = [], children } = options;
1907
+ const header = renderer_div({
1908
+ className: styles_components_module.sectionHeader,
1909
+ children: [
1910
+ renderer_span({
1911
+ className: styles_components_module.sectionTitle,
1912
+ text: title
1913
+ }),
1914
+ ...actions
1915
+ ]
1916
+ });
1917
+ return renderer_div({
1918
+ className: styles_components_module.section,
1919
+ children: [
1920
+ header,
1921
+ ...children
1922
+ ]
1923
+ });
1924
+ }
1925
+ function createInfoRow(options) {
1926
+ const { label, value } = options;
1927
+ return renderer_div({
1928
+ className: styles_components_module.infoRow,
1929
+ children: [
1930
+ renderer_span({
1931
+ className: styles_components_module.infoLabel,
1932
+ text: label
1933
+ }),
1934
+ renderer_span({
1935
+ className: styles_components_module.infoValue,
1936
+ text: value
1937
+ })
1938
+ ]
1939
+ });
1940
+ }
1941
+ function createEmptyState(options) {
1942
+ const { icon, text } = options;
1943
+ const children = [];
1944
+ if (icon) {
1945
+ const iconWrapper = renderer_div({
1946
+ className: styles_components_module.emptyStateIcon
1947
+ });
1948
+ iconWrapper.appendChild(renderer_createSvgElement(icon, {
1949
+ width: 32,
1950
+ height: 32
1951
+ }));
1952
+ children.push(iconWrapper);
1953
+ }
1954
+ children.push(renderer_span({
1955
+ className: styles_components_module.emptyStateText,
1956
+ text
1957
+ }));
1958
+ return renderer_div({
1959
+ className: styles_components_module.emptyState,
1960
+ children: children.filter(Boolean)
1961
+ });
1962
+ }
1963
+ function createGrid(options) {
1964
+ const { columns = 2, children } = options;
1965
+ const colsClass = 3 === columns ? styles_components_module.gridCols3 : styles_components_module.gridCols2;
1966
+ return renderer_div({
1967
+ className: `${styles_components_module.grid} ${colsClass}`,
1968
+ children
1969
+ });
1970
+ }
1971
+ function createGridCard(options) {
1972
+ const { title, action } = options;
1973
+ const children = [
1974
+ renderer_span({
1975
+ className: styles_components_module.gridCardTitle,
1976
+ text: title
1977
+ })
1978
+ ];
1979
+ if (action) children.push(action);
1980
+ return renderer_div({
1981
+ className: styles_components_module.gridCard,
1982
+ children
1983
+ });
1984
+ }
1985
+ const REFRESH_ICON = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1986
+ <path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path>
1987
+ <path d="M21 3v5h-5"></path>
1988
+ <path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path>
1989
+ <path d="M8 16H3v5"></path>
1990
+ </svg>`;
1991
+ const TRASH_ICON = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1992
+ <path d="M3 6h18"></path>
1993
+ <path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"></path>
1994
+ <path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"></path>
1995
+ </svg>`;
1996
+ const COPY_ICON = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1997
+ <rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect>
1998
+ <path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path>
1999
+ </svg>`;
2000
+ const actions_EYE_ICON = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
2001
+ <path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"></path>
2002
+ <circle cx="12" cy="12" r="3"></circle>
2003
+ </svg>`;
2004
+ const SETTINGS_ICON = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
2005
+ <path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path>
2006
+ <circle cx="12" cy="12" r="3"></circle>
2007
+ </svg>`;
2008
+ const TERMINAL_ICON = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
2009
+ <polyline points="4 17 10 11 4 5"></polyline>
2010
+ <line x1="12" y1="19" x2="20" y2="19"></line>
2011
+ </svg>`;
2012
+ function actions_renderActionsPanel(container, options) {
2013
+ const { getState, onResetConsents, onRefetchBanner, onShowBanner, onOpenPreferences, onCopyState } = options;
2014
+ renderer_clearElement(container);
2015
+ const state = getState();
2016
+ if (!state) return void container.appendChild(renderer_div({
2017
+ style: {
2018
+ padding: '24px',
2019
+ textAlign: 'center',
2020
+ color: 'var(--c15t-text-muted)',
2021
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
2022
+ },
2023
+ text: 'Store not connected'
2024
+ }));
2025
+ const actionCards = [
2026
+ createActionCard({
2027
+ icon: actions_EYE_ICON,
2028
+ label: 'Show Banner',
2029
+ onClick: onShowBanner
2030
+ }),
2031
+ createActionCard({
2032
+ icon: SETTINGS_ICON,
2033
+ label: 'Preferences',
2034
+ onClick: onOpenPreferences
2035
+ }),
2036
+ createActionCard({
2037
+ icon: REFRESH_ICON,
2038
+ label: 'Re-fetch',
2039
+ onClick: onRefetchBanner
2040
+ }),
2041
+ createActionCard({
2042
+ icon: COPY_ICON,
2043
+ label: 'Copy State',
2044
+ onClick: onCopyState
2045
+ })
2046
+ ];
2047
+ const grid = createGrid({
2048
+ columns: 2,
2049
+ children: actionCards
2050
+ });
2051
+ container.appendChild(grid);
2052
+ const dangerZone = renderer_div({
2053
+ style: {
2054
+ padding: '12px 16px',
2055
+ borderTop: '1px solid var(--c15t-border)'
2056
+ },
2057
+ children: [
2058
+ createButton({
2059
+ text: 'Reset All Consents',
2060
+ icon: TRASH_ICON,
2061
+ variant: 'danger',
2062
+ onClick: onResetConsents
2063
+ })
2064
+ ]
2065
+ });
2066
+ container.appendChild(dangerZone);
2067
+ const consoleSection = renderer_div({
2068
+ style: {
2069
+ padding: '12px 16px',
2070
+ borderTop: '1px solid var(--c15t-border)'
2071
+ },
2072
+ children: [
2073
+ renderer_div({
2074
+ style: {
2075
+ display: 'flex',
2076
+ alignItems: 'center',
2077
+ gap: '6px',
2078
+ marginBottom: '8px'
2079
+ },
2080
+ children: [
2081
+ createIconWrapper(TERMINAL_ICON, 14),
2082
+ renderer_span({
2083
+ style: {
2084
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
2085
+ fontWeight: '600',
2086
+ color: 'var(--c15t-text)'
2087
+ },
2088
+ text: 'Console API'
2089
+ })
2090
+ ]
2091
+ }),
2092
+ renderer_div({
2093
+ style: {
2094
+ display: 'flex',
2095
+ flexDirection: 'column',
2096
+ gap: '4px',
2097
+ padding: '8px',
2098
+ borderRadius: 'var(--c15t-radius-md)',
2099
+ backgroundColor: 'var(--c15t-surface-muted)',
2100
+ fontFamily: 'ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, monospace',
2101
+ fontSize: '11px',
2102
+ color: 'var(--c15t-text-muted)'
2103
+ },
2104
+ children: [
2105
+ renderer_span({
2106
+ text: `window.${getNamespace(state)}.getState()`
2107
+ }),
2108
+ renderer_span({
2109
+ text: 'window.__c15tDevTools.open()'
2110
+ })
2111
+ ]
2112
+ })
2113
+ ]
2114
+ });
2115
+ container.appendChild(consoleSection);
2116
+ }
2117
+ function createActionCard(options) {
2118
+ const { icon, label, onClick } = options;
2119
+ const card = renderer_div({
2120
+ className: styles_components_module.gridCard ?? '',
2121
+ style: {
2122
+ display: 'flex',
2123
+ flexDirection: 'column',
2124
+ alignItems: 'center',
2125
+ justifyContent: 'center',
2126
+ gap: '6px',
2127
+ padding: '16px 8px',
2128
+ cursor: 'pointer',
2129
+ transition: 'background-color var(--c15t-duration-fast) var(--c15t-easing)'
2130
+ },
2131
+ children: [
2132
+ createIconWrapper(icon, 20),
2133
+ renderer_span({
2134
+ style: {
2135
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
2136
+ fontWeight: '500',
2137
+ color: 'var(--c15t-text)',
2138
+ textAlign: 'center'
2139
+ },
2140
+ text: label
2141
+ })
2142
+ ]
2143
+ });
2144
+ card.addEventListener('click', onClick);
2145
+ card.addEventListener('mouseenter', ()=>{
2146
+ card.style.backgroundColor = 'var(--c15t-surface-hover)';
2147
+ });
2148
+ card.addEventListener('mouseleave', ()=>{
2149
+ card.style.backgroundColor = '';
2150
+ });
2151
+ return card;
2152
+ }
2153
+ function createIconWrapper(icon, size) {
2154
+ const wrapper = renderer_div({
2155
+ style: {
2156
+ display: 'flex',
2157
+ alignItems: 'center',
2158
+ justifyContent: 'center',
2159
+ color: 'var(--c15t-text-muted)'
2160
+ }
2161
+ });
2162
+ wrapper.appendChild(renderer_createSvgElement(icon, {
2163
+ width: size,
2164
+ height: size
2165
+ }));
2166
+ return wrapper;
2167
+ }
2168
+ function getNamespace(state) {
2169
+ return state.config?.meta?.namespace || 'c15tStore';
2170
+ }
2171
+ function consents_renderConsentsPanel(container, options) {
2172
+ const { getState, onConsentChange, onSave, onAcceptAll, onRejectAll, onReset } = options;
2173
+ renderer_clearElement(container);
2174
+ const state = getState();
2175
+ if (!state) return void container.appendChild(renderer_div({
2176
+ style: {
2177
+ padding: '24px',
2178
+ textAlign: 'center',
2179
+ color: 'var(--c15t-text-muted)',
2180
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
2181
+ },
2182
+ text: 'Store not connected'
2183
+ }));
2184
+ const isIabMode = 'iab' === state.model;
2185
+ const savedConsents = state.consents || {};
2186
+ const selectedConsents = state.selectedConsents || {};
2187
+ const displayConsents = {
2188
+ ...savedConsents
2189
+ };
2190
+ for (const [key, value] of Object.entries(selectedConsents))displayConsents[key] = value;
2191
+ const hasUnsavedChanges = !isIabMode && Object.entries(displayConsents).some(([key, value])=>savedConsents[key] !== value);
2192
+ const consentTypes = state.consentTypes || [];
2193
+ const consentTypeMap = new Map(consentTypes.map((ct)=>[
2194
+ ct.name,
2195
+ ct
2196
+ ]));
2197
+ const consentEntries = Object.entries(displayConsents);
2198
+ if (0 === consentEntries.length) container.appendChild(renderer_div({
2199
+ style: {
2200
+ padding: '24px',
2201
+ textAlign: 'center',
2202
+ color: 'var(--c15t-devtools-text-muted)',
2203
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
2204
+ },
2205
+ text: 'No consents configured'
2206
+ }));
2207
+ else {
2208
+ if (isIabMode) {
2209
+ const iabNotice = renderer_div({
2210
+ style: {
2211
+ padding: '8px 12px',
2212
+ margin: '0 0 8px',
2213
+ backgroundColor: 'var(--c15t-devtools-badge-info-bg)',
2214
+ borderRadius: '4px',
2215
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
2216
+ color: 'var(--c15t-devtools-badge-info)'
2217
+ },
2218
+ text: 'IAB TCF mode: Consents are managed via the IAB framework'
2219
+ });
2220
+ container.appendChild(iabNotice);
2221
+ }
2222
+ const gridCards = [];
2223
+ for (const [name, value] of consentEntries){
2224
+ const consentType = consentTypeMap.get(name);
2225
+ const isNecessary = 'necessary' === name;
2226
+ const displayName = consentType?.name || name;
2227
+ const isSaved = savedConsents[name] === value;
2228
+ const toggle = createToggle({
2229
+ checked: Boolean(value),
2230
+ disabled: isNecessary || isIabMode,
2231
+ ariaLabel: `Toggle ${displayName} consent`,
2232
+ onChange: (newValue)=>onConsentChange(String(name), newValue)
2233
+ });
2234
+ const card = createGridCard({
2235
+ title: formatConsentName(displayName) + (isIabMode || isSaved ? '' : ' •'),
2236
+ action: toggle
2237
+ });
2238
+ gridCards.push(card);
2239
+ }
2240
+ const grid = createGrid({
2241
+ columns: 2,
2242
+ children: gridCards
2243
+ });
2244
+ container.appendChild(grid);
2245
+ }
2246
+ if (isIabMode) {
2247
+ const footer = renderer_div({
2248
+ style: {
2249
+ display: 'flex',
2250
+ alignItems: 'center',
2251
+ justifyContent: 'flex-end',
2252
+ padding: '12px 16px',
2253
+ marginTop: 'auto',
2254
+ borderTop: '1px solid var(--c15t-border)',
2255
+ backgroundColor: 'var(--c15t-surface)'
2256
+ },
2257
+ children: [
2258
+ createButton({
2259
+ text: 'Reset All',
2260
+ variant: 'danger',
2261
+ small: true,
2262
+ onClick: onReset
2263
+ })
2264
+ ]
2265
+ });
2266
+ container.appendChild(footer);
2267
+ return;
2268
+ }
2269
+ const footer = renderer_div({
2270
+ style: {
2271
+ display: 'flex',
2272
+ alignItems: 'center',
2273
+ justifyContent: 'space-between',
2274
+ padding: '12px 16px',
2275
+ marginTop: 'auto',
2276
+ borderTop: '1px solid var(--c15t-border)',
2277
+ backgroundColor: hasUnsavedChanges ? 'var(--c15t-devtools-badge-warning-bg)' : 'var(--c15t-surface)'
2278
+ },
2279
+ children: [
2280
+ renderer_div({
2281
+ style: {
2282
+ display: 'flex',
2283
+ gap: '6px'
2284
+ },
2285
+ children: [
2286
+ createButton({
2287
+ text: 'All',
2288
+ variant: 'primary',
2289
+ small: true,
2290
+ onClick: onAcceptAll
2291
+ }),
2292
+ createButton({
2293
+ text: 'None',
2294
+ variant: 'default',
2295
+ small: true,
2296
+ onClick: onRejectAll
2297
+ }),
2298
+ createButton({
2299
+ text: 'Reset',
2300
+ variant: 'danger',
2301
+ small: true,
2302
+ onClick: onReset
2303
+ })
2304
+ ]
2305
+ }),
2306
+ hasUnsavedChanges ? renderer_div({
2307
+ style: {
2308
+ display: 'flex',
2309
+ alignItems: 'center',
2310
+ gap: '8px'
2311
+ },
2312
+ children: [
2313
+ renderer_span({
2314
+ style: {
2315
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
2316
+ color: 'var(--c15t-devtools-badge-warning)'
2317
+ },
2318
+ text: 'Unsaved'
2319
+ }),
2320
+ createButton({
2321
+ text: 'Save',
2322
+ variant: 'primary',
2323
+ small: true,
2324
+ onClick: onSave
2325
+ })
2326
+ ]
2327
+ }) : renderer_span({
2328
+ style: {
2329
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
2330
+ color: 'var(--c15t-text-muted)'
2331
+ },
2332
+ text: 'No changes'
2333
+ })
2334
+ ]
2335
+ });
2336
+ container.appendChild(footer);
2337
+ }
2338
+ function formatConsentName(name) {
2339
+ return name.replace(/_/g, ' ').replace(/\b\w/g, (l)=>l.toUpperCase());
2340
+ }
2341
+ function events_renderEventsPanel(container, options) {
2342
+ const { getEvents, onClear } = options;
2343
+ renderer_clearElement(container);
2344
+ const events = getEvents();
2345
+ const header = renderer_div({
2346
+ style: {
2347
+ display: 'flex',
2348
+ alignItems: 'center',
2349
+ justifyContent: 'space-between',
2350
+ padding: '12px 16px 8px'
2351
+ },
2352
+ children: [
2353
+ renderer_span({
2354
+ style: {
2355
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
2356
+ fontWeight: '600',
2357
+ color: 'var(--c15t-text-muted)',
2358
+ textTransform: 'uppercase',
2359
+ letterSpacing: '0.5px'
2360
+ },
2361
+ text: `Events (${events.length})`
2362
+ }),
2363
+ createButton({
2364
+ text: 'Clear',
2365
+ small: true,
2366
+ onClick: onClear
2367
+ })
2368
+ ]
2369
+ });
2370
+ container.appendChild(header);
2371
+ const eventList = renderer_div({
2372
+ style: {
2373
+ display: 'flex',
2374
+ flexDirection: 'column',
2375
+ gap: '4px',
2376
+ padding: '0 12px 12px',
2377
+ maxHeight: '400px',
2378
+ overflowY: 'auto'
2379
+ }
2380
+ });
2381
+ if (0 === events.length) {
2382
+ const emptyState = renderer_div({
2383
+ style: {
2384
+ padding: '32px 16px',
2385
+ textAlign: 'center',
2386
+ color: 'var(--c15t-text-muted)',
2387
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
2388
+ },
2389
+ text: 'No events recorded yet'
2390
+ });
2391
+ eventList.appendChild(emptyState);
2392
+ } else for (const event of events){
2393
+ const eventItem = createEventItem(event);
2394
+ eventList.appendChild(eventItem);
2395
+ }
2396
+ container.appendChild(eventList);
2397
+ }
2398
+ function createEventItem(event) {
2399
+ const time = formatTime(event.timestamp);
2400
+ const icon = getEventIcon(event.type);
2401
+ const color = getEventColor(event.type);
2402
+ return renderer_div({
2403
+ className: styles_components_module.gridCard ?? '',
2404
+ style: {
2405
+ display: 'flex',
2406
+ alignItems: 'center',
2407
+ gap: '8px',
2408
+ padding: '6px 10px',
2409
+ fontSize: 'var(--c15t-devtools-font-size-xs)'
2410
+ },
2411
+ children: [
2412
+ renderer_span({
2413
+ style: {
2414
+ color,
2415
+ fontSize: '8px',
2416
+ lineHeight: '1'
2417
+ },
2418
+ text: icon
2419
+ }),
2420
+ renderer_span({
2421
+ style: {
2422
+ color: 'var(--c15t-text-muted)',
2423
+ fontFamily: 'monospace',
2424
+ fontSize: '10px',
2425
+ flexShrink: '0'
2426
+ },
2427
+ text: time
2428
+ }),
2429
+ renderer_span({
2430
+ style: {
2431
+ color: 'var(--c15t-text)',
2432
+ flex: '1'
2433
+ },
2434
+ text: event.message
2435
+ })
2436
+ ]
2437
+ });
2438
+ }
2439
+ function formatTime(timestamp) {
2440
+ const date = new Date(timestamp);
2441
+ return date.toLocaleTimeString('en-US', {
2442
+ hour12: false,
2443
+ hour: '2-digit',
2444
+ minute: '2-digit',
2445
+ second: '2-digit'
2446
+ });
2447
+ }
2448
+ function getEventIcon(type) {
2449
+ switch(type){
2450
+ case 'consent_set':
2451
+ case 'consent_save':
2452
+ return '●';
2453
+ case 'consent_reset':
2454
+ return '○';
2455
+ case 'error':
2456
+ return '✕';
2457
+ case 'info':
2458
+ default:
2459
+ return '○';
2460
+ }
2461
+ }
2462
+ function getEventColor(type) {
2463
+ switch(type){
2464
+ case 'consent_set':
2465
+ case 'consent_save':
2466
+ return 'var(--c15t-devtools-badge-success, #10b981)';
2467
+ case 'consent_reset':
2468
+ return 'var(--c15t-devtools-badge-warning, #f59e0b)';
2469
+ case 'error':
2470
+ return 'var(--c15t-devtools-badge-error, #ef4444)';
2471
+ case 'info':
2472
+ default:
2473
+ return 'var(--c15t-text-muted)';
2474
+ }
2475
+ }
2476
+ function iab_renderIabPanel(container, options) {
2477
+ const { getState, onReset } = options;
2478
+ renderer_clearElement(container);
2479
+ const state = getState();
2480
+ if (!state) return void container.appendChild(renderer_div({
2481
+ style: {
2482
+ padding: '24px',
2483
+ textAlign: 'center',
2484
+ color: 'var(--c15t-text-muted)',
2485
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
2486
+ },
2487
+ text: 'Store not connected'
2488
+ }));
2489
+ if ('iab' !== state.model) return void container.appendChild(renderer_div({
2490
+ style: {
2491
+ padding: '24px',
2492
+ textAlign: 'center',
2493
+ color: 'var(--c15t-text-muted)',
2494
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
2495
+ },
2496
+ text: 'IAB TCF mode is not configured'
2497
+ }));
2498
+ const iabState = state.iab;
2499
+ if (!iabState) return void container.appendChild(renderer_div({
2500
+ style: {
2501
+ padding: '24px',
2502
+ textAlign: 'center',
2503
+ color: 'var(--c15t-text-muted)',
2504
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
2505
+ },
2506
+ text: 'IAB state not available'
2507
+ }));
2508
+ const tcString = iabState.tcString;
2509
+ const tcStringSection = createSection({
2510
+ title: 'TC String',
2511
+ actions: tcString ? [
2512
+ createButton({
2513
+ text: 'Copy',
2514
+ small: true,
2515
+ onClick: ()=>{
2516
+ navigator.clipboard.writeText(tcString);
2517
+ }
2518
+ })
2519
+ ] : [],
2520
+ children: [
2521
+ renderer_div({
2522
+ style: {
2523
+ padding: '8px',
2524
+ backgroundColor: 'var(--c15t-surface-muted)',
2525
+ borderRadius: '4px',
2526
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
2527
+ fontFamily: 'monospace',
2528
+ wordBreak: 'break-all',
2529
+ maxHeight: '80px',
2530
+ overflowY: 'auto',
2531
+ color: tcString ? 'var(--c15t-text)' : 'var(--c15t-text-muted)'
2532
+ },
2533
+ text: tcString || 'No TC String generated yet'
2534
+ })
2535
+ ]
2536
+ });
2537
+ container.appendChild(tcStringSection);
2538
+ const gvl = iabState.gvl;
2539
+ const purposeConsents = iabState.purposeConsents || {};
2540
+ const purposes = gvl?.purposes || {};
2541
+ const purposeEntries = Object.entries(purposeConsents);
2542
+ if (purposeEntries.length > 0) {
2543
+ const purposeList = renderer_div({
2544
+ style: {
2545
+ display: 'flex',
2546
+ flexDirection: 'column',
2547
+ gap: '4px',
2548
+ maxHeight: '120px',
2549
+ overflowY: 'auto'
2550
+ }
2551
+ });
2552
+ for (const [purposeId, consent] of purposeEntries){
2553
+ const purposeInfo = purposes[purposeId];
2554
+ const purposeName = purposeInfo?.name || `Purpose ${purposeId}`;
2555
+ purposeList.appendChild(createPurposeRow(purposeId, purposeName, Boolean(consent)));
2556
+ }
2557
+ const purposesSection = createSection({
2558
+ title: `Purposes (${purposeEntries.length})`,
2559
+ children: [
2560
+ purposeList
2561
+ ]
2562
+ });
2563
+ container.appendChild(purposesSection);
2564
+ }
2565
+ const specialFeatureOptIns = iabState.specialFeatureOptIns || {};
2566
+ const specialFeatures = gvl?.specialFeatures || {};
2567
+ const specialFeatureEntries = Object.entries(specialFeatureOptIns);
2568
+ if (specialFeatureEntries.length > 0) {
2569
+ const specialFeatureList = renderer_div({
2570
+ style: {
2571
+ display: 'flex',
2572
+ flexDirection: 'column',
2573
+ gap: '4px',
2574
+ maxHeight: '100px',
2575
+ overflowY: 'auto'
2576
+ }
2577
+ });
2578
+ for (const [featureId, optIn] of specialFeatureEntries){
2579
+ const featureInfo = specialFeatures[featureId];
2580
+ const featureName = featureInfo?.name || `Special Feature ${featureId}`;
2581
+ specialFeatureList.appendChild(createPurposeRow(featureId, featureName, Boolean(optIn)));
2582
+ }
2583
+ const specialFeaturesSection = createSection({
2584
+ title: `Special Features (${specialFeatureEntries.length})`,
2585
+ children: [
2586
+ specialFeatureList
2587
+ ]
2588
+ });
2589
+ container.appendChild(specialFeaturesSection);
2590
+ }
2591
+ const vendorConsents = iabState.vendorConsents || {};
2592
+ const vendors = gvl?.vendors || {};
2593
+ const vendorEntries = Object.entries(vendorConsents);
2594
+ const iabVendors = [];
2595
+ const customVendors = [];
2596
+ for (const [vendorId, consent] of vendorEntries){
2597
+ const vendorInfo = vendors[vendorId];
2598
+ const vendorName = vendorInfo?.name || `Vendor ${vendorId}`;
2599
+ const isIabVendor = void 0 !== vendorInfo;
2600
+ if (isIabVendor) iabVendors.push([
2601
+ vendorId,
2602
+ Boolean(consent),
2603
+ vendorName
2604
+ ]);
2605
+ else customVendors.push([
2606
+ vendorId,
2607
+ Boolean(consent),
2608
+ vendorName
2609
+ ]);
2610
+ }
2611
+ if (iabVendors.length > 0) {
2612
+ const vendorList = renderer_div({
2613
+ style: {
2614
+ display: 'flex',
2615
+ flexDirection: 'column',
2616
+ gap: '4px',
2617
+ maxHeight: '120px',
2618
+ overflowY: 'auto'
2619
+ }
2620
+ });
2621
+ for (const [vendorId, consent, vendorName] of iabVendors)vendorList.appendChild(createVendorRow(vendorId, vendorName, consent, 'iab'));
2622
+ const vendorsSection = createSection({
2623
+ title: `IAB Vendors (${iabVendors.length})`,
2624
+ children: [
2625
+ vendorList
2626
+ ]
2627
+ });
2628
+ container.appendChild(vendorsSection);
2629
+ }
2630
+ if (customVendors.length > 0) {
2631
+ const customVendorList = renderer_div({
2632
+ style: {
2633
+ display: 'flex',
2634
+ flexDirection: 'column',
2635
+ gap: '4px',
2636
+ maxHeight: '100px',
2637
+ overflowY: 'auto'
2638
+ }
2639
+ });
2640
+ for (const [vendorId, consent, vendorName] of customVendors)customVendorList.appendChild(createVendorRow(vendorId, vendorName, consent, 'custom'));
2641
+ const customVendorsSection = createSection({
2642
+ title: `Custom Vendors (${customVendors.length})`,
2643
+ children: [
2644
+ customVendorList
2645
+ ]
2646
+ });
2647
+ container.appendChild(customVendorsSection);
2648
+ }
2649
+ if (0 === purposeEntries.length && 0 === specialFeatureEntries.length && 0 === vendorEntries.length) container.appendChild(renderer_div({
2650
+ style: {
2651
+ padding: '16px',
2652
+ textAlign: 'center',
2653
+ color: 'var(--c15t-text-muted)',
2654
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
2655
+ },
2656
+ text: 'No purposes or vendors configured'
2657
+ }));
2658
+ const footer = renderer_div({
2659
+ style: {
2660
+ display: 'flex',
2661
+ alignItems: 'center',
2662
+ justifyContent: 'flex-end',
2663
+ padding: '12px 16px',
2664
+ marginTop: 'auto',
2665
+ borderTop: '1px solid var(--c15t-border)',
2666
+ backgroundColor: 'var(--c15t-surface)'
2667
+ },
2668
+ children: [
2669
+ createButton({
2670
+ text: 'Reset All',
2671
+ variant: 'danger',
2672
+ small: true,
2673
+ onClick: onReset
2674
+ })
2675
+ ]
2676
+ });
2677
+ container.appendChild(footer);
2678
+ }
2679
+ function createPurposeRow(id, name, consent) {
2680
+ return renderer_div({
2681
+ style: {
2682
+ display: 'flex',
2683
+ alignItems: 'center',
2684
+ justifyContent: 'space-between',
2685
+ padding: '4px 0',
2686
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
2687
+ borderBottom: '1px solid var(--c15t-border)'
2688
+ },
2689
+ children: [
2690
+ renderer_span({
2691
+ style: {
2692
+ color: 'var(--c15t-text)',
2693
+ overflow: 'hidden',
2694
+ textOverflow: 'ellipsis',
2695
+ whiteSpace: 'nowrap',
2696
+ flex: '1',
2697
+ marginRight: '8px'
2698
+ },
2699
+ text: `${id}. ${name}`,
2700
+ title: name
2701
+ }),
2702
+ createBadge({
2703
+ text: consent ? '✓' : '✕',
2704
+ variant: consent ? 'success' : 'error'
2705
+ })
2706
+ ]
2707
+ });
2708
+ }
2709
+ function createVendorRow(id, name, consent, type) {
2710
+ return renderer_div({
2711
+ style: {
2712
+ display: 'flex',
2713
+ alignItems: 'center',
2714
+ justifyContent: 'space-between',
2715
+ padding: '4px 0',
2716
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
2717
+ borderBottom: '1px solid var(--c15t-border)'
2718
+ },
2719
+ children: [
2720
+ renderer_div({
2721
+ style: {
2722
+ display: 'flex',
2723
+ alignItems: 'center',
2724
+ gap: '6px',
2725
+ overflow: 'hidden',
2726
+ flex: '1',
2727
+ marginRight: '8px'
2728
+ },
2729
+ children: [
2730
+ 'custom' === type ? renderer_span({
2731
+ style: {
2732
+ fontSize: '9px',
2733
+ padding: '1px 4px',
2734
+ backgroundColor: 'var(--c15t-devtools-badge-info-bg)',
2735
+ color: 'var(--c15t-devtools-badge-info)',
2736
+ borderRadius: '2px',
2737
+ flexShrink: '0'
2738
+ },
2739
+ text: 'CUSTOM'
2740
+ }) : null,
2741
+ renderer_span({
2742
+ style: {
2743
+ color: 'var(--c15t-text)',
2744
+ overflow: 'hidden',
2745
+ textOverflow: 'ellipsis',
2746
+ whiteSpace: 'nowrap'
2747
+ },
2748
+ text: `${id}. ${truncateText(name, 25)}`,
2749
+ title: name
2750
+ })
2751
+ ].filter(Boolean)
2752
+ }),
2753
+ createBadge({
2754
+ text: consent ? '✓' : '✕',
2755
+ variant: consent ? 'success' : 'error'
2756
+ })
2757
+ ]
2758
+ });
2759
+ }
2760
+ function truncateText(text, maxLength) {
2761
+ if (text.length <= maxLength) return text;
2762
+ return text.slice(0, maxLength - 3) + '...';
2763
+ }
2764
+ function location_renderLocationPanel(container, options) {
2765
+ const { getState, onSetOverrides, onClearOverrides } = options;
2766
+ renderer_clearElement(container);
2767
+ const state = getState();
2768
+ if (!state) return void container.appendChild(renderer_div({
2769
+ style: {
2770
+ padding: '24px',
2771
+ textAlign: 'center',
2772
+ color: 'var(--c15t-text-muted)',
2773
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
2774
+ },
2775
+ text: 'Store not connected'
2776
+ }));
2777
+ const locationInfo = state.locationInfo;
2778
+ const overrides = state.overrides;
2779
+ const translationConfig = state.translationConfig;
2780
+ const gridItems = [
2781
+ createCompactInfoCard('Country', locationInfo?.countryCode || '—'),
2782
+ createCompactInfoCard('Region', locationInfo?.regionCode || '—'),
2783
+ createCompactInfoCard('Jurisdiction', locationInfo?.jurisdiction || '—'),
2784
+ createCompactInfoCard('Language', translationConfig?.defaultLanguage || '—')
2785
+ ];
2786
+ if (state.model) gridItems.push(createCompactInfoCard('Model', getModelLabel(state.model)));
2787
+ const locationGrid = createGrid({
2788
+ columns: 2,
2789
+ children: gridItems
2790
+ });
2791
+ container.appendChild(locationGrid);
2792
+ const overrideSection = createSection({
2793
+ title: 'Override Settings',
2794
+ actions: [
2795
+ createButton({
2796
+ text: 'Clear',
2797
+ small: true,
2798
+ onClick: onClearOverrides
2799
+ })
2800
+ ],
2801
+ children: [
2802
+ createOverrideSelect({
2803
+ label: 'Country',
2804
+ selectOptions: COUNTRY_OPTIONS,
2805
+ value: overrides?.country || '',
2806
+ onChange: (value)=>onSetOverrides({
2807
+ country: value || void 0
2808
+ })
2809
+ }),
2810
+ createOverrideInput({
2811
+ label: 'Region',
2812
+ placeholder: 'e.g., CA, NY, BE',
2813
+ value: overrides?.region || '',
2814
+ onChange: (value)=>onSetOverrides({
2815
+ region: value || void 0
2816
+ })
2817
+ }),
2818
+ createOverrideInput({
2819
+ label: 'Language',
2820
+ placeholder: 'e.g., de, fr, en',
2821
+ value: overrides?.language || '',
2822
+ onChange: (value)=>onSetOverrides({
2823
+ language: value || void 0
2824
+ })
2825
+ })
2826
+ ]
2827
+ });
2828
+ container.appendChild(overrideSection);
2829
+ const hasOverrides = overrides && (overrides.country || overrides.region || overrides.language);
2830
+ if (hasOverrides) {
2831
+ const overrideBanner = renderer_div({
2832
+ style: {
2833
+ padding: '8px 16px',
2834
+ backgroundColor: 'var(--c15t-devtools-badge-info-bg)',
2835
+ color: 'var(--c15t-devtools-badge-info)',
2836
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
2837
+ borderTop: '1px solid var(--c15t-devtools-border)'
2838
+ },
2839
+ text: 'Overrides are active. This may affect consent behavior.'
2840
+ });
2841
+ container.appendChild(overrideBanner);
2842
+ }
2843
+ }
2844
+ function createOverrideInput(options) {
2845
+ const { label, placeholder, value, onChange } = options;
2846
+ let debounceTimer = null;
2847
+ const inputField = input({
2848
+ className: `${styles_components_module.input ?? ''} ${styles_components_module.inputSmall ?? ''}`.trim(),
2849
+ placeholder,
2850
+ value,
2851
+ onInput: (e)=>{
2852
+ const target = e.target;
2853
+ if (debounceTimer) clearTimeout(debounceTimer);
2854
+ debounceTimer = setTimeout(()=>{
2855
+ onChange(target.value);
2856
+ }, 500);
2857
+ }
2858
+ });
2859
+ return renderer_div({
2860
+ style: {
2861
+ display: 'flex',
2862
+ alignItems: 'center',
2863
+ justifyContent: 'space-between',
2864
+ gap: '8px',
2865
+ marginBottom: '8px'
2866
+ },
2867
+ children: [
2868
+ renderer_div({
2869
+ style: {
2870
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
2871
+ color: 'var(--c15t-devtools-text-muted)',
2872
+ minWidth: '60px'
2873
+ },
2874
+ text: label
2875
+ }),
2876
+ renderer_div({
2877
+ style: {
2878
+ flex: '1'
2879
+ },
2880
+ children: [
2881
+ inputField
2882
+ ]
2883
+ })
2884
+ ]
2885
+ });
2886
+ }
2887
+ function createOverrideSelect(options) {
2888
+ const { label, selectOptions, value, onChange } = options;
2889
+ const selectField = renderer_select({
2890
+ className: `${styles_components_module.input ?? ''} ${styles_components_module.inputSmall ?? ''}`.trim(),
2891
+ options: selectOptions,
2892
+ selectedValue: value,
2893
+ onChange: (e)=>{
2894
+ const target = e.target;
2895
+ onChange(target.value);
2896
+ }
2897
+ });
2898
+ return renderer_div({
2899
+ style: {
2900
+ display: 'flex',
2901
+ alignItems: 'center',
2902
+ justifyContent: 'space-between',
2903
+ gap: '8px',
2904
+ marginBottom: '8px'
2905
+ },
2906
+ children: [
2907
+ renderer_div({
2908
+ style: {
2909
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
2910
+ color: 'var(--c15t-devtools-text-muted)',
2911
+ minWidth: '60px'
2912
+ },
2913
+ text: label
2914
+ }),
2915
+ renderer_div({
2916
+ style: {
2917
+ flex: '1'
2918
+ },
2919
+ children: [
2920
+ selectField
2921
+ ]
2922
+ })
2923
+ ]
2924
+ });
2925
+ }
2926
+ const COUNTRY_OPTIONS = [
2927
+ {
2928
+ value: '',
2929
+ label: '-- Select --'
2930
+ },
2931
+ {
2932
+ value: 'US',
2933
+ label: 'US - United States'
2934
+ },
2935
+ {
2936
+ value: 'CA',
2937
+ label: 'CA - Canada'
2938
+ },
2939
+ {
2940
+ value: 'GB',
2941
+ label: 'GB - United Kingdom'
2942
+ },
2943
+ {
2944
+ value: 'DE',
2945
+ label: 'DE - Germany'
2946
+ },
2947
+ {
2948
+ value: 'FR',
2949
+ label: 'FR - France'
2950
+ },
2951
+ {
2952
+ value: 'IT',
2953
+ label: 'IT - Italy'
2954
+ },
2955
+ {
2956
+ value: 'ES',
2957
+ label: 'ES - Spain'
2958
+ },
2959
+ {
2960
+ value: 'NL',
2961
+ label: 'NL - Netherlands'
2962
+ },
2963
+ {
2964
+ value: 'BE',
2965
+ label: 'BE - Belgium'
2966
+ },
2967
+ {
2968
+ value: 'AT',
2969
+ label: 'AT - Austria'
2970
+ },
2971
+ {
2972
+ value: 'CH',
2973
+ label: 'CH - Switzerland'
2974
+ },
2975
+ {
2976
+ value: 'PL',
2977
+ label: 'PL - Poland'
2978
+ },
2979
+ {
2980
+ value: 'SE',
2981
+ label: 'SE - Sweden'
2982
+ },
2983
+ {
2984
+ value: 'NO',
2985
+ label: 'NO - Norway'
2986
+ },
2987
+ {
2988
+ value: 'DK',
2989
+ label: 'DK - Denmark'
2990
+ },
2991
+ {
2992
+ value: 'FI',
2993
+ label: 'FI - Finland'
2994
+ },
2995
+ {
2996
+ value: 'IE',
2997
+ label: 'IE - Ireland'
2998
+ },
2999
+ {
3000
+ value: 'PT',
3001
+ label: 'PT - Portugal'
3002
+ },
3003
+ {
3004
+ value: 'AU',
3005
+ label: 'AU - Australia'
3006
+ },
3007
+ {
3008
+ value: 'NZ',
3009
+ label: 'NZ - New Zealand'
3010
+ },
3011
+ {
3012
+ value: 'JP',
3013
+ label: 'JP - Japan'
3014
+ },
3015
+ {
3016
+ value: 'BR',
3017
+ label: 'BR - Brazil'
3018
+ },
3019
+ {
3020
+ value: 'MX',
3021
+ label: 'MX - Mexico'
3022
+ },
3023
+ {
3024
+ value: 'IN',
3025
+ label: 'IN - India'
3026
+ },
3027
+ {
3028
+ value: 'CN',
3029
+ label: 'CN - China'
3030
+ },
3031
+ {
3032
+ value: 'KR',
3033
+ label: 'KR - South Korea'
3034
+ },
3035
+ {
3036
+ value: 'SG',
3037
+ label: 'SG - Singapore'
3038
+ },
3039
+ {
3040
+ value: 'HK',
3041
+ label: 'HK - Hong Kong'
3042
+ },
3043
+ {
3044
+ value: 'ZA',
3045
+ label: 'ZA - South Africa'
3046
+ }
3047
+ ];
3048
+ function getModelLabel(model) {
3049
+ switch(model){
3050
+ case 'opt-in':
3051
+ return 'Opt-In';
3052
+ case 'opt-out':
3053
+ return 'Opt-Out';
3054
+ case 'iab':
3055
+ return 'IAB TCF';
3056
+ default:
3057
+ return 'None';
3058
+ }
3059
+ }
3060
+ function createCompactInfoCard(label, value) {
3061
+ return renderer_div({
3062
+ className: styles_components_module.gridCard ?? '',
3063
+ style: {
3064
+ flexDirection: 'column',
3065
+ alignItems: 'flex-start',
3066
+ gap: '2px'
3067
+ },
3068
+ children: [
3069
+ renderer_span({
3070
+ style: {
3071
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3072
+ color: 'var(--c15t-text-muted)'
3073
+ },
3074
+ text: label
3075
+ }),
3076
+ renderer_span({
3077
+ style: {
3078
+ fontSize: 'var(--c15t-font-size-sm)',
3079
+ fontWeight: '500',
3080
+ fontFamily: 'ui-monospace, monospace'
3081
+ },
3082
+ text: value
3083
+ })
3084
+ ]
3085
+ });
3086
+ }
3087
+ const dismissedResources = new Set();
3088
+ function scanDOM(state) {
3089
+ const results = [];
3090
+ const configuredScripts = state.scripts || [];
3091
+ const managedDomains = new Map();
3092
+ for (const script of configuredScripts)if (script.src) try {
3093
+ const url = new URL(script.src, window.location.origin);
3094
+ if (url.hostname !== window.location.hostname) managedDomains.set(url.hostname, script.id);
3095
+ } catch {}
3096
+ const scriptElements = document.querySelectorAll("script[src]");
3097
+ for (const el of scriptElements){
3098
+ const src = el.getAttribute('src');
3099
+ if (!src) continue;
3100
+ const resource = checkResource(src, "script", managedDomains);
3101
+ if (resource) results.push(resource);
3102
+ }
3103
+ const iframeElements = document.querySelectorAll('iframe[src]');
3104
+ for (const el of iframeElements){
3105
+ const src = el.getAttribute('src');
3106
+ if (!src) continue;
3107
+ const resource = checkResource(src, 'iframe', managedDomains);
3108
+ if (resource) results.push(resource);
3109
+ }
3110
+ return results;
3111
+ }
3112
+ function checkResource(src, type, managedDomains) {
3113
+ try {
3114
+ const url = new URL(src, window.location.origin);
3115
+ const domain = url.hostname;
3116
+ if (domain === window.location.hostname) return null;
3117
+ if ('data:' === url.protocol || 'blob:' === url.protocol) return null;
3118
+ const managedBy = managedDomains.get(domain);
3119
+ const isManaged = Boolean(managedBy);
3120
+ return {
3121
+ type,
3122
+ src,
3123
+ domain,
3124
+ status: isManaged ? 'managed' : 'unmanaged',
3125
+ managedBy
3126
+ };
3127
+ } catch {}
3128
+ return null;
3129
+ }
3130
+ function createDomScannerSection(state) {
3131
+ let resultsContainer = null;
3132
+ let lastScanResults = [];
3133
+ const doRender = ()=>{
3134
+ if (!resultsContainer) return;
3135
+ renderScanResults(resultsContainer, lastScanResults, (src)=>{
3136
+ dismissedResources.add(src);
3137
+ doRender();
3138
+ });
3139
+ };
3140
+ const handleScan = ()=>{
3141
+ if (!state || !resultsContainer) return;
3142
+ lastScanResults = scanDOM(state);
3143
+ doRender();
3144
+ };
3145
+ const section = createSection({
3146
+ title: 'DOM Scanner',
3147
+ actions: [
3148
+ createButton({
3149
+ text: 'Scan DOM',
3150
+ small: true,
3151
+ onClick: handleScan
3152
+ })
3153
+ ],
3154
+ children: []
3155
+ });
3156
+ resultsContainer = renderer_div({});
3157
+ const placeholder = renderer_div({
3158
+ style: {
3159
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3160
+ color: 'var(--c15t-text-muted)',
3161
+ textAlign: 'center',
3162
+ padding: '8px 0'
3163
+ },
3164
+ text: 'Click "Scan DOM" to check for external scripts and iframes'
3165
+ });
3166
+ resultsContainer.appendChild(placeholder);
3167
+ section.appendChild(resultsContainer);
3168
+ return section;
3169
+ }
3170
+ function renderScanResults(container, results, onDismiss) {
3171
+ while(container.firstChild)container.removeChild(container.firstChild);
3172
+ const activeResults = results.filter((r)=>!dismissedResources.has(r.src));
3173
+ if (0 === activeResults.length && 0 === results.length) return void container.appendChild(renderer_div({
3174
+ style: {
3175
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3176
+ color: 'var(--c15t-text-muted)',
3177
+ textAlign: 'center',
3178
+ padding: '8px 0'
3179
+ },
3180
+ text: "No external scripts or iframes found"
3181
+ }));
3182
+ if (0 === activeResults.length && results.length > 0) return void container.appendChild(renderer_div({
3183
+ style: {
3184
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3185
+ color: 'var(--c15t-text-muted)',
3186
+ textAlign: 'center',
3187
+ padding: '8px 0'
3188
+ },
3189
+ text: `All ${results.length} alerts dismissed`
3190
+ }));
3191
+ const unmanaged = activeResults.filter((r)=>'unmanaged' === r.status);
3192
+ const managed = activeResults.filter((r)=>'managed' === r.status);
3193
+ const dismissedCount = results.length - activeResults.length;
3194
+ const summaryText = dismissedCount > 0 ? `Found: ${managed.length} managed, ${unmanaged.length} unmanaged (${dismissedCount} dismissed)` : `Found: ${managed.length} managed, ${unmanaged.length} unmanaged`;
3195
+ const summary = renderer_div({
3196
+ style: {
3197
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3198
+ color: 'var(--c15t-text-muted)',
3199
+ marginBottom: '8px'
3200
+ },
3201
+ text: summaryText
3202
+ });
3203
+ container.appendChild(summary);
3204
+ if (unmanaged.length > 0) for (const resource of unmanaged)container.appendChild(createResourceRow(resource, 'warning', onDismiss));
3205
+ if (managed.length > 0) {
3206
+ const managedHeader = renderer_div({
3207
+ style: {
3208
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3209
+ fontWeight: '600',
3210
+ color: 'var(--c15t-devtools-badge-success)',
3211
+ marginBottom: '4px',
3212
+ marginTop: '8px'
3213
+ },
3214
+ text: 'MANAGED'
3215
+ });
3216
+ container.appendChild(managedHeader);
3217
+ for (const resource of managed)container.appendChild(createResourceRow(resource, 'success', onDismiss));
3218
+ }
3219
+ }
3220
+ function createResourceRow(resource, variant, onDismiss) {
3221
+ const icon = 'warning' === variant ? '⚠' : '✓';
3222
+ const iconColor = 'warning' === variant ? 'var(--c15t-devtools-badge-warning)' : 'var(--c15t-devtools-badge-success)';
3223
+ const row = renderer_div({
3224
+ style: {
3225
+ display: 'flex',
3226
+ alignItems: 'center',
3227
+ gap: '6px',
3228
+ padding: '4px 0',
3229
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3230
+ borderBottom: '1px solid var(--c15t-border)'
3231
+ },
3232
+ children: [
3233
+ renderer_span({
3234
+ style: {
3235
+ color: iconColor,
3236
+ flexShrink: '0'
3237
+ },
3238
+ text: icon
3239
+ }),
3240
+ renderer_span({
3241
+ style: {
3242
+ color: 'var(--c15t-text-muted)',
3243
+ flexShrink: '0'
3244
+ },
3245
+ text: `${resource.type}:`
3246
+ }),
3247
+ renderer_span({
3248
+ style: {
3249
+ fontWeight: '500',
3250
+ color: 'var(--c15t-text)',
3251
+ overflow: 'hidden',
3252
+ textOverflow: 'ellipsis',
3253
+ whiteSpace: 'nowrap',
3254
+ flex: '1'
3255
+ },
3256
+ text: resource.domain,
3257
+ title: resource.src
3258
+ }),
3259
+ 'warning' === variant ? (()=>{
3260
+ const dismissBtn = document.createElement('button');
3261
+ dismissBtn.textContent = '✕';
3262
+ dismissBtn.title = 'Dismiss this alert';
3263
+ dismissBtn.style.cssText = `
3264
+ background: none;
3265
+ border: none;
3266
+ color: var(--c15t-text-muted);
3267
+ cursor: pointer;
3268
+ padding: 2px 4px;
3269
+ font-size: 10px;
3270
+ opacity: 0.6;
3271
+ flex-shrink: 0;
3272
+ `;
3273
+ dismissBtn.onmouseenter = ()=>{
3274
+ dismissBtn.style.opacity = '1';
3275
+ };
3276
+ dismissBtn.onmouseleave = ()=>{
3277
+ dismissBtn.style.opacity = '0.6';
3278
+ };
3279
+ dismissBtn.onclick = (e)=>{
3280
+ e.stopPropagation();
3281
+ onDismiss(resource.src);
3282
+ };
3283
+ return dismissBtn;
3284
+ })() : null
3285
+ ].filter(Boolean)
3286
+ });
3287
+ return row;
3288
+ }
3289
+ const CODE_ICON = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
3290
+ <polyline points="16 18 22 12 16 6"></polyline>
3291
+ <polyline points="8 6 2 12 8 18"></polyline>
3292
+ </svg>`;
3293
+ function scripts_renderScriptsPanel(container, options) {
3294
+ const { getState } = options;
3295
+ renderer_clearElement(container);
3296
+ const state = getState();
3297
+ if (!state) return void container.appendChild(renderer_div({
3298
+ style: {
3299
+ padding: '24px',
3300
+ textAlign: 'center',
3301
+ color: 'var(--c15t-text-muted)',
3302
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
3303
+ },
3304
+ text: 'Store not connected'
3305
+ }));
3306
+ const scripts = state.scripts || [];
3307
+ const loadedScripts = state.loadedScripts || {};
3308
+ const networkBlocker = state.networkBlocker;
3309
+ if (0 === scripts.length) {
3310
+ const scriptsSection = createSection({
3311
+ title: 'Configured Scripts',
3312
+ children: [
3313
+ createEmptyState({
3314
+ icon: CODE_ICON,
3315
+ text: "No scripts configured"
3316
+ })
3317
+ ]
3318
+ });
3319
+ container.appendChild(scriptsSection);
3320
+ } else {
3321
+ const scriptsList = renderer_div({
3322
+ style: {
3323
+ display: 'flex',
3324
+ flexDirection: 'column',
3325
+ gap: '4px'
3326
+ }
3327
+ });
3328
+ for (const script of scripts){
3329
+ const scriptId = script.id;
3330
+ const isLoaded = true === loadedScripts[scriptId];
3331
+ const category = script.category;
3332
+ const categoryDisplay = 'string' == typeof category ? category : JSON.stringify(category);
3333
+ let status = 'pending';
3334
+ let statusVariant = 'neutral';
3335
+ if (isLoaded) {
3336
+ status = 'loaded';
3337
+ statusVariant = 'success';
3338
+ } else {
3339
+ const hasConsent = checkScriptConsent(state, category);
3340
+ if (hasConsent) {
3341
+ status = 'pending';
3342
+ statusVariant = 'warning';
3343
+ } else {
3344
+ status = 'blocked';
3345
+ statusVariant = 'neutral';
3346
+ }
3347
+ }
3348
+ const badge = createBadge({
3349
+ text: status.charAt(0).toUpperCase() + status.slice(1),
3350
+ variant: statusVariant
3351
+ });
3352
+ const item = createListItem({
3353
+ title: scriptId,
3354
+ description: `Category: ${categoryDisplay}`,
3355
+ actions: [
3356
+ badge
3357
+ ]
3358
+ });
3359
+ scriptsList.appendChild(item);
3360
+ }
3361
+ const scriptsSection = createSection({
3362
+ title: `Configured Scripts (${scripts.length})`,
3363
+ children: [
3364
+ scriptsList
3365
+ ]
3366
+ });
3367
+ container.appendChild(scriptsSection);
3368
+ }
3369
+ const networkSection = createSection({
3370
+ title: 'Network Blocker',
3371
+ children: networkBlocker ? [
3372
+ createInfoRow({
3373
+ label: 'Status',
3374
+ value: 'Active'
3375
+ }),
3376
+ createInfoRow({
3377
+ label: 'Blocked Domains',
3378
+ value: String(networkBlocker.rules?.length || 0)
3379
+ })
3380
+ ] : [
3381
+ renderer_div({
3382
+ style: {
3383
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3384
+ color: 'var(--c15t-devtools-text-muted)'
3385
+ },
3386
+ text: 'Network blocker not configured'
3387
+ })
3388
+ ]
3389
+ });
3390
+ container.appendChild(networkSection);
3391
+ const loadedCount = Object.values(loadedScripts).filter(Boolean).length;
3392
+ const totalCount = scripts.length;
3393
+ const summarySection = createSection({
3394
+ title: 'Summary',
3395
+ children: [
3396
+ createInfoRow({
3397
+ label: 'Total Scripts',
3398
+ value: String(totalCount)
3399
+ }),
3400
+ createInfoRow({
3401
+ label: 'Loaded',
3402
+ value: String(loadedCount)
3403
+ }),
3404
+ createInfoRow({
3405
+ label: 'Pending/Blocked',
3406
+ value: String(totalCount - loadedCount)
3407
+ })
3408
+ ]
3409
+ });
3410
+ container.appendChild(summarySection);
3411
+ const scannerSection = createDomScannerSection(state);
3412
+ container.appendChild(scannerSection);
3413
+ }
3414
+ function checkScriptConsent(state, category) {
3415
+ if (!category) return true;
3416
+ if ('string' == typeof category) {
3417
+ const consents = state.consents || {};
3418
+ return true === consents[category];
3419
+ }
3420
+ return false;
3421
+ }
3422
+ const STORAGE_KEYS = {
3423
+ C15T: 'c15t',
3424
+ PENDING_SYNC: 'c15t:pending-consent-sync',
3425
+ PENDING_SUBMISSIONS: 'c15t-pending-consent-submissions',
3426
+ EUCONSENT: 'euconsent-v2'
3427
+ };
3428
+ const COOKIE_NAMES = {
3429
+ C15T: 'c15t',
3430
+ EUCONSENT: 'euconsent-v2'
3431
+ };
3432
+ function clearCookie(name) {
3433
+ document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;
3434
+ }
3435
+ function clearAllCookies() {
3436
+ clearCookie(COOKIE_NAMES.C15T);
3437
+ clearCookie(COOKIE_NAMES.EUCONSENT);
3438
+ }
3439
+ function clearAllLocalStorage() {
3440
+ try {
3441
+ localStorage.removeItem(STORAGE_KEYS.C15T);
3442
+ localStorage.removeItem(STORAGE_KEYS.PENDING_SYNC);
3443
+ localStorage.removeItem(STORAGE_KEYS.PENDING_SUBMISSIONS);
3444
+ localStorage.removeItem(STORAGE_KEYS.EUCONSENT);
3445
+ } catch {}
3446
+ }
3447
+ async function reset_consents_resetAllConsents(store, stateManager) {
3448
+ const storeState = store.getState();
3449
+ storeState.resetConsents();
3450
+ clearAllCookies();
3451
+ clearAllLocalStorage();
3452
+ await storeState.initConsentManager();
3453
+ stateManager?.addEvent({
3454
+ type: 'consent_reset',
3455
+ message: 'All consents reset (storage cleared)'
3456
+ });
3457
+ }
3458
+ const STORAGE_KEY = 'c15t-devtools-events';
3459
+ function loadPersistedEvents() {
3460
+ if ('undefined' == typeof window) return [];
3461
+ try {
3462
+ const stored = sessionStorage.getItem(STORAGE_KEY);
3463
+ if (stored) return JSON.parse(stored);
3464
+ } catch {}
3465
+ return [];
3466
+ }
3467
+ function persistEvents(events) {
3468
+ if ('undefined' == typeof window) return;
3469
+ try {
3470
+ sessionStorage.setItem(STORAGE_KEY, JSON.stringify(events));
3471
+ } catch {}
3472
+ }
3473
+ function state_manager_createStateManager(initialState = {}) {
3474
+ const persistedEvents = loadPersistedEvents();
3475
+ let state = {
3476
+ isOpen: false,
3477
+ activeTab: 'location',
3478
+ position: 'bottom-right',
3479
+ isConnected: false,
3480
+ eventLog: persistedEvents,
3481
+ maxEventLogSize: 100,
3482
+ ...initialState
3483
+ };
3484
+ const listeners = new Set();
3485
+ function notify(prevState) {
3486
+ for (const listener of listeners)listener(state, prevState);
3487
+ }
3488
+ function setState(partial) {
3489
+ const prevState = state;
3490
+ state = {
3491
+ ...state,
3492
+ ...partial
3493
+ };
3494
+ notify(prevState);
3495
+ }
3496
+ return {
3497
+ getState: ()=>state,
3498
+ subscribe: (listener)=>{
3499
+ listeners.add(listener);
3500
+ return ()=>{
3501
+ listeners.delete(listener);
3502
+ };
3503
+ },
3504
+ setOpen: (isOpen)=>{
3505
+ setState({
3506
+ isOpen
3507
+ });
3508
+ },
3509
+ toggle: ()=>{
3510
+ setState({
3511
+ isOpen: !state.isOpen
3512
+ });
3513
+ },
3514
+ setActiveTab: (tab)=>{
3515
+ setState({
3516
+ activeTab: tab
3517
+ });
3518
+ },
3519
+ setPosition: (position)=>{
3520
+ setState({
3521
+ position
3522
+ });
3523
+ },
3524
+ setConnected: (isConnected)=>{
3525
+ setState({
3526
+ isConnected
3527
+ });
3528
+ },
3529
+ addEvent: (entry)=>{
3530
+ const newEvent = {
3531
+ ...entry,
3532
+ id: `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
3533
+ timestamp: Date.now()
3534
+ };
3535
+ const eventLog = [
3536
+ newEvent,
3537
+ ...state.eventLog
3538
+ ].slice(0, state.maxEventLogSize);
3539
+ setState({
3540
+ eventLog
3541
+ });
3542
+ persistEvents(eventLog);
3543
+ },
3544
+ clearEventLog: ()=>{
3545
+ setState({
3546
+ eventLog: []
3547
+ });
3548
+ persistEvents([]);
3549
+ },
3550
+ destroy: ()=>{
3551
+ listeners.clear();
3552
+ }
3553
+ };
3554
+ }
3555
+ function store_connector_createStoreConnector(options = {}) {
3556
+ const { namespace = 'c15tStore', onConnect, onStateChange, onDisconnect } = options;
3557
+ let store = null;
3558
+ let unsubscribe = null;
3559
+ let pollInterval = null;
3560
+ const listeners = new Set();
3561
+ function tryConnect() {
3562
+ if ('undefined' == typeof window) return false;
3563
+ const storeInstance = window[namespace];
3564
+ if (storeInstance && 'function' == typeof storeInstance.getState) {
3565
+ store = storeInstance;
3566
+ unsubscribe = store.subscribe((state)=>{
3567
+ onStateChange?.(state);
3568
+ for (const listener of listeners)listener(state);
3569
+ });
3570
+ const currentState = store.getState();
3571
+ onConnect?.(currentState, store);
3572
+ if (pollInterval) {
3573
+ clearInterval(pollInterval);
3574
+ pollInterval = null;
3575
+ }
3576
+ return true;
3577
+ }
3578
+ return false;
3579
+ }
3580
+ function startPolling() {
3581
+ if (pollInterval) return;
3582
+ if (tryConnect()) return;
3583
+ let attempts = 0;
3584
+ const maxAttempts = 50;
3585
+ pollInterval = setInterval(()=>{
3586
+ attempts++;
3587
+ if (tryConnect()) return;
3588
+ if (attempts >= maxAttempts) {
3589
+ if (pollInterval) {
3590
+ clearInterval(pollInterval);
3591
+ pollInterval = null;
3592
+ }
3593
+ onDisconnect?.();
3594
+ }
3595
+ }, 100);
3596
+ }
3597
+ startPolling();
3598
+ return {
3599
+ getState: ()=>store?.getState() ?? null,
3600
+ getStore: ()=>store,
3601
+ isConnected: ()=>null !== store,
3602
+ subscribe: (listener)=>{
3603
+ listeners.add(listener);
3604
+ if (store) listener(store.getState());
3605
+ return ()=>{
3606
+ listeners.delete(listener);
3607
+ };
3608
+ },
3609
+ destroy: ()=>{
3610
+ if (pollInterval) {
3611
+ clearInterval(pollInterval);
3612
+ pollInterval = null;
3613
+ }
3614
+ if (unsubscribe) {
3615
+ unsubscribe();
3616
+ unsubscribe = null;
3617
+ }
3618
+ store = null;
3619
+ listeners.clear();
3620
+ }
3621
+ };
3622
+ }
3623
+ var tokens = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/index.js??ruleSet[1].rules[1].use[1]!builtin:lightningcss-loader??ruleSet[1].rules[1].use[2]!./src/styles/tokens.css");
3624
+ var tokens_options = {};
3625
+ tokens_options.styleTagTransform = styleTagTransform_default();
3626
+ tokens_options.setAttributes = setAttributesWithoutAttributes_default();
3627
+ tokens_options.insert = insertBySelector_default().bind(null, "head");
3628
+ tokens_options.domAPI = styleDomAPI_default();
3629
+ tokens_options.insertStyleElement = insertStyleElement_default();
3630
+ injectStylesIntoStyleTag_default()(tokens.A, tokens_options);
3631
+ tokens.A && tokens.A.locals && tokens.A.locals;
3632
+ function createDevToolsPanel(options) {
3633
+ const { namespace = 'c15tStore' } = options;
3634
+ const stateManager = state_manager_createStateManager({
3635
+ isOpen: true
3636
+ });
3637
+ const storeConnector = store_connector_createStoreConnector({
3638
+ namespace,
3639
+ onConnect: ()=>stateManager.setConnected(true),
3640
+ onDisconnect: ()=>stateManager.setConnected(false)
3641
+ });
3642
+ const container = renderer_div({
3643
+ style: {
3644
+ display: 'flex',
3645
+ flexDirection: 'column',
3646
+ height: '100%',
3647
+ fontFamily: 'var(--c15t-devtools-font-family)',
3648
+ fontSize: 'var(--c15t-devtools-font-size-sm)',
3649
+ color: 'var(--c15t-devtools-text)',
3650
+ backgroundColor: 'var(--c15t-devtools-surface)'
3651
+ }
3652
+ });
3653
+ const contentArea = renderer_div({
3654
+ style: {
3655
+ flex: '1',
3656
+ overflowY: 'auto',
3657
+ overscrollBehavior: 'contain'
3658
+ }
3659
+ });
3660
+ function renderActivePanel() {
3661
+ const state = stateManager.getState();
3662
+ const getStoreState = ()=>storeConnector.getState();
3663
+ switch(state.activeTab){
3664
+ case 'consents':
3665
+ consents_renderConsentsPanel(contentArea, {
3666
+ getState: getStoreState,
3667
+ onConsentChange: (name, value)=>{
3668
+ storeConnector.getStore()?.getState().setSelectedConsent(name, value);
3669
+ },
3670
+ onSave: ()=>{
3671
+ storeConnector.getStore()?.getState().saveConsents('custom');
3672
+ },
3673
+ onAcceptAll: ()=>{
3674
+ storeConnector.getStore()?.getState().saveConsents('all');
3675
+ },
3676
+ onRejectAll: ()=>{
3677
+ storeConnector.getStore()?.getState().saveConsents('necessary');
3678
+ },
3679
+ onReset: async ()=>{
3680
+ const store = storeConnector.getStore();
3681
+ if (store) await reset_consents_resetAllConsents(store);
3682
+ }
3683
+ });
3684
+ break;
3685
+ case 'location':
3686
+ location_renderLocationPanel(contentArea, {
3687
+ getState: getStoreState,
3688
+ onSetOverrides: async (overrides)=>{
3689
+ const store = storeConnector.getStore();
3690
+ if (store) {
3691
+ const current = store.getState().overrides || {};
3692
+ await store.getState().setOverrides({
3693
+ ...current,
3694
+ ...overrides
3695
+ });
3696
+ }
3697
+ },
3698
+ onClearOverrides: async ()=>{
3699
+ await storeConnector.getStore()?.getState().setOverrides(void 0);
3700
+ }
3701
+ });
3702
+ break;
3703
+ case "scripts":
3704
+ scripts_renderScriptsPanel(contentArea, {
3705
+ getState: getStoreState
3706
+ });
3707
+ break;
3708
+ case 'iab':
3709
+ iab_renderIabPanel(contentArea, {
3710
+ getState: getStoreState,
3711
+ onReset: async ()=>{
3712
+ const store = storeConnector.getStore();
3713
+ if (store) await reset_consents_resetAllConsents(store);
3714
+ }
3715
+ });
3716
+ break;
3717
+ case 'events':
3718
+ events_renderEventsPanel(contentArea, {
3719
+ getEvents: ()=>stateManager.getState().eventLog,
3720
+ onClear: ()=>{
3721
+ stateManager.clearEventLog();
3722
+ }
3723
+ });
3724
+ break;
3725
+ case 'actions':
3726
+ actions_renderActionsPanel(contentArea, {
3727
+ getState: getStoreState,
3728
+ onResetConsents: async ()=>{
3729
+ const store = storeConnector.getStore();
3730
+ if (store) await reset_consents_resetAllConsents(store);
3731
+ },
3732
+ onRefetchBanner: async ()=>{
3733
+ await storeConnector.getStore()?.getState().initConsentManager();
3734
+ },
3735
+ onShowBanner: ()=>{
3736
+ storeConnector.getStore()?.getState().setActiveUI('banner', {
3737
+ force: true
3738
+ });
3739
+ },
3740
+ onOpenPreferences: ()=>{
3741
+ storeConnector.getStore()?.getState().setActiveUI('dialog');
3742
+ },
3743
+ onCopyState: ()=>{
3744
+ const state = storeConnector.getState();
3745
+ if (state) navigator.clipboard.writeText(JSON.stringify(state, null, 2));
3746
+ }
3747
+ });
3748
+ break;
3749
+ }
3750
+ }
3751
+ const storeState = storeConnector.getState();
3752
+ const disabledTabs = [];
3753
+ if (!storeState || 'iab' !== storeState.model) disabledTabs.push('iab');
3754
+ const tabsInstance = tabs_createTabs({
3755
+ activeTab: stateManager.getState().activeTab,
3756
+ onTabChange: (tab)=>{
3757
+ stateManager.setActiveTab(tab);
3758
+ renderActivePanel();
3759
+ },
3760
+ disabledTabs
3761
+ });
3762
+ container.appendChild(tabsInstance.element);
3763
+ container.appendChild(contentArea);
3764
+ renderActivePanel();
3765
+ const unsubscribe = storeConnector.subscribe(()=>{
3766
+ renderActivePanel();
3767
+ });
3768
+ return {
3769
+ element: container,
3770
+ destroy: ()=>{
3771
+ unsubscribe();
3772
+ tabsInstance.destroy();
3773
+ storeConnector.destroy();
3774
+ stateManager.destroy();
3775
+ }
3776
+ };
3777
+ }
3778
+ function c15tDevtoolsPlugin(options = {}) {
3779
+ const { namespace = 'c15tStore' } = options;
3780
+ return {
3781
+ name: 'c15t',
3782
+ label: 'Consent',
3783
+ render: (container)=>{
3784
+ const panel = createDevToolsPanel({
3785
+ namespace,
3786
+ mode: 'embedded'
3787
+ });
3788
+ container.appendChild(panel.element);
3789
+ return ()=>{
3790
+ panel.destroy();
3791
+ };
3792
+ }
3793
+ };
3794
+ }
3795
+ export { c15tDevtoolsPlugin };