@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
package/dist/react.cjs ADDED
@@ -0,0 +1,4696 @@
1
+ "use strict";
2
+ "use client";
3
+ var __webpack_modules__ = {
4
+ "../../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__) {
5
+ __webpack_require__.d(__webpack_exports__, {
6
+ A: ()=>__rspack_default_export
7
+ });
8
+ 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");
9
+ 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);
10
+ 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");
11
+ 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);
12
+ 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());
13
+ ___CSS_LOADER_EXPORT___.push([
14
+ module.id,
15
+ `@keyframes devtoolsEnter-Jgl1Uz {
16
+ from {
17
+ opacity: 0;
18
+ transform: scale(.95)translateY(8px);
19
+ }
20
+
21
+ to {
22
+ opacity: 1;
23
+ transform: scale(1)translateY(0);
24
+ }
25
+ }
26
+
27
+ @keyframes devtoolsExit-GVem79 {
28
+ from {
29
+ opacity: 1;
30
+ transform: scale(1)translateY(0);
31
+ }
32
+
33
+ to {
34
+ opacity: 0;
35
+ transform: scale(.95)translateY(8px);
36
+ }
37
+ }
38
+
39
+ @keyframes buttonPulse-thl_xD {
40
+ 0%, 100% {
41
+ transform: scale(1);
42
+ }
43
+
44
+ 50% {
45
+ transform: scale(1.05);
46
+ }
47
+ }
48
+
49
+ @keyframes buttonEnter-nmbQm7 {
50
+ from {
51
+ opacity: 0;
52
+ transform: scale(.8);
53
+ }
54
+
55
+ to {
56
+ opacity: 1;
57
+ transform: scale(1);
58
+ }
59
+ }
60
+
61
+ @keyframes buttonExit-pxOnsy {
62
+ from {
63
+ opacity: 1;
64
+ transform: scale(1);
65
+ }
66
+
67
+ to {
68
+ opacity: 0;
69
+ transform: scale(.8);
70
+ }
71
+ }
72
+
73
+ @keyframes accordionDown-N6mY7b {
74
+ from {
75
+ opacity: 0;
76
+ height: 0;
77
+ }
78
+
79
+ to {
80
+ height: var(--accordion-content-height);
81
+ opacity: 1;
82
+ }
83
+ }
84
+
85
+ @keyframes accordionUp-NUVQrz {
86
+ from {
87
+ height: var(--accordion-content-height);
88
+ opacity: 1;
89
+ }
90
+
91
+ to {
92
+ opacity: 0;
93
+ height: 0;
94
+ }
95
+ }
96
+
97
+ @keyframes fadeIn-M9eDrv {
98
+ from {
99
+ opacity: 0;
100
+ }
101
+
102
+ to {
103
+ opacity: 1;
104
+ }
105
+ }
106
+
107
+ @keyframes fadeOut-feL7tl {
108
+ from {
109
+ opacity: 1;
110
+ }
111
+
112
+ to {
113
+ opacity: 0;
114
+ }
115
+ }
116
+
117
+ @keyframes slideInFromRight-F7lMwz {
118
+ from {
119
+ opacity: 0;
120
+ transform: translateX(16px);
121
+ }
122
+
123
+ to {
124
+ opacity: 1;
125
+ transform: translateX(0);
126
+ }
127
+ }
128
+
129
+ @keyframes slideInFromBottom-_z3hvX {
130
+ from {
131
+ opacity: 0;
132
+ transform: translateY(16px);
133
+ }
134
+
135
+ to {
136
+ opacity: 1;
137
+ transform: translateY(0);
138
+ }
139
+ }
140
+
141
+ .animateEnter-detbYr {
142
+ animation: devtoolsEnter-Jgl1Uz var(--c15t-duration-normal, .2s) var(--c15t-easing-out, cubic-bezier(.215, .61, .355, 1)) forwards;
143
+ transform-origin: 100% 100%;
144
+ }
145
+
146
+ .animateExit-qZjCsw {
147
+ animation: devtoolsExit-GVem79 var(--c15t-duration-fast, .1s) var(--c15t-easing-out, cubic-bezier(.215, .61, .355, 1)) forwards;
148
+ transform-origin: 100% 100%;
149
+ }
150
+
151
+ .animateButtonEnter-amkZhT {
152
+ animation: buttonEnter-nmbQm7 var(--c15t-duration-normal, .2s) var(--c15t-easing-spring, cubic-bezier(.34, 1.56, .64, 1)) forwards;
153
+ transform-origin: center;
154
+ }
155
+
156
+ .animateButtonExit-fMVAL4 {
157
+ animation: buttonExit-pxOnsy var(--c15t-duration-fast, .1s) var(--c15t-easing-out, cubic-bezier(.215, .61, .355, 1)) forwards;
158
+ transform-origin: center;
159
+ }
160
+
161
+ .animateFadeIn-TrkV7T {
162
+ animation: fadeIn-M9eDrv var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1)) forwards;
163
+ }
164
+
165
+ .animateFadeOut-sS4sE4 {
166
+ animation: fadeOut-feL7tl var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1)) forwards;
167
+ }
168
+
169
+ .animateSlideIn-ccDCyI {
170
+ animation: slideInFromBottom-_z3hvX var(--c15t-duration-normal, .2s) var(--c15t-easing-out, cubic-bezier(.215, .61, .355, 1)) forwards;
171
+ }
172
+
173
+ .staggerItem-tzBuCo {
174
+ opacity: 0;
175
+ animation: slideInFromRight-F7lMwz var(--c15t-duration-normal, .2s) var(--c15t-easing-out, cubic-bezier(.215, .61, .355, 1)) forwards;
176
+ }
177
+
178
+ .staggerItem-tzBuCo:first-child {
179
+ animation-delay: 0s;
180
+ }
181
+
182
+ .staggerItem-tzBuCo:nth-child(2) {
183
+ animation-delay: 30ms;
184
+ }
185
+
186
+ .staggerItem-tzBuCo:nth-child(3) {
187
+ animation-delay: 60ms;
188
+ }
189
+
190
+ .staggerItem-tzBuCo:nth-child(4) {
191
+ animation-delay: 90ms;
192
+ }
193
+
194
+ .staggerItem-tzBuCo:nth-child(5) {
195
+ animation-delay: .12s;
196
+ }
197
+
198
+ .staggerItem-tzBuCo:nth-child(6) {
199
+ animation-delay: .15s;
200
+ }
201
+
202
+ .staggerItem-tzBuCo:nth-child(7) {
203
+ animation-delay: .18s;
204
+ }
205
+
206
+ .staggerItem-tzBuCo:nth-child(8) {
207
+ animation-delay: .21s;
208
+ }
209
+
210
+ .staggerItem-tzBuCo:nth-child(9) {
211
+ animation-delay: .24s;
212
+ }
213
+
214
+ .staggerItem-tzBuCo:nth-child(10) {
215
+ animation-delay: .27s;
216
+ }
217
+
218
+ @media (prefers-reduced-motion: reduce) {
219
+ .animateEnter-detbYr, .animateExit-qZjCsw, .animateButtonEnter-amkZhT, .animateButtonExit-fMVAL4, .animateFadeIn-TrkV7T, .animateFadeOut-sS4sE4, .animateSlideIn-ccDCyI, .staggerItem-tzBuCo {
220
+ opacity: 1;
221
+ animation: none;
222
+ transform: none;
223
+ }
224
+ }
225
+ `,
226
+ ""
227
+ ]);
228
+ ___CSS_LOADER_EXPORT___.locals = {
229
+ animateEnter: "animateEnter-detbYr",
230
+ devtoolsEnter: "devtoolsEnter-Jgl1Uz",
231
+ animateExit: "animateExit-qZjCsw",
232
+ devtoolsExit: "devtoolsExit-GVem79",
233
+ animateButtonEnter: "animateButtonEnter-amkZhT",
234
+ buttonEnter: "buttonEnter-nmbQm7",
235
+ animateButtonExit: "animateButtonExit-fMVAL4",
236
+ buttonExit: "buttonExit-pxOnsy",
237
+ animateFadeIn: "animateFadeIn-TrkV7T",
238
+ fadeIn: "fadeIn-M9eDrv",
239
+ animateFadeOut: "animateFadeOut-sS4sE4",
240
+ fadeOut: "fadeOut-feL7tl",
241
+ animateSlideIn: "animateSlideIn-ccDCyI",
242
+ slideInFromBottom: "slideInFromBottom-_z3hvX",
243
+ staggerItem: "staggerItem-tzBuCo",
244
+ slideInFromRight: "slideInFromRight-F7lMwz",
245
+ buttonPulse: "buttonPulse-thl_xD",
246
+ accordionDown: "accordionDown-N6mY7b",
247
+ accordionUp: "accordionUp-NUVQrz"
248
+ };
249
+ const __rspack_default_export = ___CSS_LOADER_EXPORT___;
250
+ },
251
+ "../../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__) {
252
+ __webpack_require__.d(__webpack_exports__, {
253
+ A: ()=>__rspack_default_export
254
+ });
255
+ 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");
256
+ 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);
257
+ 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");
258
+ 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);
259
+ 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());
260
+ ___CSS_LOADER_EXPORT___.push([
261
+ module.id,
262
+ `.toggle-bPZtik {
263
+ border-radius: var(--c15t-radius-full, 9999px);
264
+ background-color: var(--c15t-switch-track, #ccc);
265
+ cursor: pointer;
266
+ width: 36px;
267
+ height: 20px;
268
+ transition: background-color var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1));
269
+ border: none;
270
+ align-items: center;
271
+ padding: 0;
272
+ display: inline-flex;
273
+ position: relative;
274
+ }
275
+
276
+ .toggle-bPZtik:focus-visible {
277
+ outline: 2px solid var(--c15t-primary, #335cff);
278
+ outline-offset: 2px;
279
+ }
280
+
281
+ .toggleActive-Ldlasg {
282
+ background-color: var(--c15t-switch-track-active, #335cff);
283
+ }
284
+
285
+ .toggleThumb-hjGfoX {
286
+ border-radius: var(--c15t-radius-full, 9999px);
287
+ background-color: var(--c15t-switch-thumb, #fff);
288
+ width: 16px;
289
+ height: 16px;
290
+ transition: transform var(--c15t-duration-fast, .1s) var(--c15t-easing-spring, cubic-bezier(.34, 1.56, .64, 1));
291
+ position: absolute;
292
+ left: 2px;
293
+ box-shadow: 0 1px 2px #0003;
294
+ }
295
+
296
+ .toggleActive-Ldlasg .toggleThumb-hjGfoX {
297
+ transform: translateX(16px);
298
+ }
299
+
300
+ .toggle-bPZtik:disabled, .toggleDisabled-ZcD8nZ {
301
+ opacity: .5;
302
+ cursor: not-allowed;
303
+ }
304
+
305
+ .toggle-bPZtik:disabled .toggleThumb-hjGfoX, .toggleDisabled-ZcD8nZ .toggleThumb-hjGfoX {
306
+ box-shadow: none;
307
+ }
308
+
309
+ .badge-yA0giZ {
310
+ border-radius: var(--c15t-radius-sm, .25rem);
311
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
312
+ font-weight: var(--c15t-font-weight-medium, 500);
313
+ white-space: nowrap;
314
+ align-items: center;
315
+ padding: 2px 6px;
316
+ line-height: 1;
317
+ display: inline-flex;
318
+ }
319
+
320
+ .badgeSuccess-mA76a4 {
321
+ background-color: var(--c15t-devtools-badge-success-bg, #e4fbed);
322
+ color: var(--c15t-devtools-badge-success, #21c45d);
323
+ }
324
+
325
+ .badgeError-Agsq7I {
326
+ background-color: var(--c15t-devtools-badge-error-bg, #fde7e7);
327
+ color: var(--c15t-devtools-badge-error, #ef4343);
328
+ }
329
+
330
+ .badgeWarning-xpdwMQ {
331
+ background-color: var(--c15t-devtools-badge-warning-bg, #fef7dc);
332
+ color: var(--c15t-devtools-badge-warning, #f59f0a);
333
+ }
334
+
335
+ .badgeInfo-uWdPCK {
336
+ background-color: var(--c15t-devtools-badge-info-bg, #dcebfe);
337
+ color: var(--c15t-devtools-badge-info, #2463eb);
338
+ }
339
+
340
+ .badgeNeutral-j3EsE0 {
341
+ background-color: var(--c15t-devtools-badge-neutral-bg, #f0f0f0);
342
+ color: var(--c15t-devtools-badge-neutral, #737373);
343
+ }
344
+
345
+ .btn-evRVlh {
346
+ justify-content: center;
347
+ align-items: center;
348
+ gap: var(--c15t-space-xs, .25rem);
349
+ padding: var(--c15t-space-xs, .25rem) var(--c15t-space-sm, .5rem);
350
+ border: 1px solid var(--c15t-border, #e3e3e3);
351
+ border-radius: var(--c15t-radius-md, .5rem);
352
+ background-color: var(--c15t-surface, #fff);
353
+ color: var(--c15t-text, #171717);
354
+ font-family: inherit;
355
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
356
+ font-weight: var(--c15t-font-weight-medium, 500);
357
+ cursor: pointer;
358
+ 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));
359
+ display: inline-flex;
360
+ }
361
+
362
+ .btn-evRVlh:hover {
363
+ background-color: var(--c15t-surface-hover, #f7f7f7);
364
+ border-color: var(--c15t-border-hover, #c9c9c9);
365
+ }
366
+
367
+ .btn-evRVlh:focus-visible {
368
+ outline: 2px solid var(--c15t-primary, #335cff);
369
+ outline-offset: 1px;
370
+ }
371
+
372
+ .btn-evRVlh:disabled {
373
+ opacity: .5;
374
+ cursor: not-allowed;
375
+ }
376
+
377
+ .btnPrimary-dA6nqY {
378
+ background-color: var(--c15t-primary, #335cff);
379
+ border-color: var(--c15t-primary, #335cff);
380
+ color: var(--c15t-text-on-primary, #fff);
381
+ }
382
+
383
+ .btnPrimary-dA6nqY:hover {
384
+ background-color: var(--c15t-primary-hover, #03f);
385
+ border-color: var(--c15t-primary-hover, #03f);
386
+ }
387
+
388
+ .btnDanger-eDnqOX {
389
+ background-color: var(--c15t-devtools-badge-error, #ef4343);
390
+ border-color: var(--c15t-devtools-badge-error, #ef4343);
391
+ color: var(--c15t-text-on-primary, #fff);
392
+ }
393
+
394
+ .btnDanger-eDnqOX:hover {
395
+ background-color: #eb1414;
396
+ border-color: #eb1414;
397
+ }
398
+
399
+ .btnSmall-TjXoqZ {
400
+ padding: 2px var(--c15t-space-xs, .25rem);
401
+ font-size: 10px;
402
+ }
403
+
404
+ .btnIcon-fiYQAh {
405
+ flex-shrink: 0;
406
+ width: 14px;
407
+ height: 14px;
408
+ }
409
+
410
+ .input-IeTcCs {
411
+ width: 100%;
412
+ padding: var(--c15t-space-xs, .25rem) var(--c15t-space-sm, .5rem);
413
+ border: 1px solid var(--c15t-border, #e3e3e3);
414
+ border-radius: var(--c15t-radius-md, .5rem);
415
+ background-color: var(--c15t-surface, #fff);
416
+ color: var(--c15t-text, #171717);
417
+ font-family: inherit;
418
+ font-size: var(--c15t-font-size-sm, .875rem);
419
+ transition: border-color var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1));
420
+ }
421
+
422
+ .input-IeTcCs:focus {
423
+ border-color: var(--c15t-primary, #335cff);
424
+ outline: none;
425
+ }
426
+
427
+ .input-IeTcCs::placeholder {
428
+ color: var(--c15t-text-muted, #737373);
429
+ }
430
+
431
+ .inputSmall-pJyXcL {
432
+ padding: 2px var(--c15t-space-xs, .25rem);
433
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
434
+ }
435
+
436
+ .select-byJ1WM {
437
+ width: 100%;
438
+ padding: var(--c15t-space-xs, .25rem) var(--c15t-space-sm, .5rem);
439
+ border: 1px solid var(--c15t-border, #e3e3e3);
440
+ border-radius: var(--c15t-radius-md, .5rem);
441
+ background-color: var(--c15t-surface, #fff);
442
+ color: var(--c15t-text, #171717);
443
+ font-family: inherit;
444
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
445
+ cursor: pointer;
446
+ }
447
+
448
+ .select-byJ1WM:focus {
449
+ border-color: var(--c15t-primary, #335cff);
450
+ outline: none;
451
+ }
452
+
453
+ .grid-LlrmEz {
454
+ gap: var(--c15t-space-sm, .5rem);
455
+ padding: var(--c15t-space-sm, .5rem) var(--c15t-space-md, 1rem);
456
+ display: grid;
457
+ }
458
+
459
+ .gridCols2-UgcIqI {
460
+ grid-template-columns: repeat(2, 1fr);
461
+ }
462
+
463
+ .gridCols3-OmMIq6 {
464
+ grid-template-columns: repeat(3, 1fr);
465
+ }
466
+
467
+ .gridCard-Qm5xxI {
468
+ padding: var(--c15t-space-sm, .5rem) var(--c15t-space-md, .75rem);
469
+ border: 1px solid var(--c15t-border, #e3e3e3);
470
+ border-radius: var(--c15t-radius-md, .5rem);
471
+ background-color: var(--c15t-surface, #fff);
472
+ transition: border-color var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1));
473
+ justify-content: space-between;
474
+ align-items: center;
475
+ display: flex;
476
+ }
477
+
478
+ .gridCard-Qm5xxI:hover {
479
+ border-color: var(--c15t-border-hover, #c9c9c9);
480
+ }
481
+
482
+ .gridCardTitle-HjXETp {
483
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
484
+ font-weight: var(--c15t-font-weight-medium, 500);
485
+ color: var(--c15t-text, #171717);
486
+ }
487
+
488
+ .listItem-XUKGIo {
489
+ padding: var(--c15t-space-xs, .25rem) var(--c15t-space-md, 1rem);
490
+ border-bottom: 1px solid var(--c15t-border, #e3e3e3);
491
+ justify-content: space-between;
492
+ align-items: center;
493
+ display: flex;
494
+ }
495
+
496
+ .listItem-XUKGIo:last-child {
497
+ border-bottom: none;
498
+ }
499
+
500
+ .listItemContent-WDBF1N {
501
+ flex-direction: column;
502
+ flex: 1;
503
+ gap: 2px;
504
+ min-width: 0;
505
+ display: flex;
506
+ }
507
+
508
+ .listItemTitle-N89OkC {
509
+ font-size: var(--c15t-font-size-sm, .875rem);
510
+ font-weight: var(--c15t-font-weight-medium, 500);
511
+ color: var(--c15t-text, #171717);
512
+ }
513
+
514
+ .listItemDescription-E6JHyZ {
515
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
516
+ color: var(--c15t-text-muted, #737373);
517
+ text-overflow: ellipsis;
518
+ white-space: nowrap;
519
+ overflow: hidden;
520
+ }
521
+
522
+ .listItemActions-F1BfOm {
523
+ align-items: center;
524
+ gap: var(--c15t-space-sm, .5rem);
525
+ flex-shrink: 0;
526
+ display: flex;
527
+ }
528
+
529
+ .section-a197cB {
530
+ padding: var(--c15t-space-sm, .5rem) var(--c15t-space-md, 1rem);
531
+ border-bottom: 1px solid var(--c15t-border, #e3e3e3);
532
+ }
533
+
534
+ .section-a197cB:last-child {
535
+ border-bottom: none;
536
+ }
537
+
538
+ .sectionHeader-Xcljcw {
539
+ margin-bottom: var(--c15t-space-sm, .5rem);
540
+ justify-content: space-between;
541
+ align-items: center;
542
+ display: flex;
543
+ }
544
+
545
+ .sectionTitle-RUiFld {
546
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
547
+ font-weight: var(--c15t-font-weight-semibold, 600);
548
+ color: var(--c15t-text-muted, #737373);
549
+ text-transform: uppercase;
550
+ letter-spacing: .5px;
551
+ }
552
+
553
+ .infoRow-RlB_0h {
554
+ padding: var(--c15t-space-xs, .25rem) 0;
555
+ justify-content: space-between;
556
+ align-items: center;
557
+ display: flex;
558
+ }
559
+
560
+ .infoLabel-_pbK33 {
561
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
562
+ color: var(--c15t-text-muted, #737373);
563
+ }
564
+
565
+ .infoValue-flMl_e {
566
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
567
+ font-weight: var(--c15t-font-weight-medium, 500);
568
+ color: var(--c15t-text, #171717);
569
+ font-family: ui-monospace, Cascadia Code, Source Code Pro, Menlo, Consolas, DejaVu Sans Mono, monospace;
570
+ }
571
+
572
+ .emptyState-QcmzTQ {
573
+ padding: var(--c15t-space-xl, 2rem);
574
+ text-align: center;
575
+ color: var(--c15t-text-muted, #737373);
576
+ flex-direction: column;
577
+ justify-content: center;
578
+ align-items: center;
579
+ display: flex;
580
+ }
581
+
582
+ .emptyStateIcon-WHFkX8 {
583
+ width: 32px;
584
+ height: 32px;
585
+ margin-bottom: var(--c15t-space-sm, .5rem);
586
+ opacity: .5;
587
+ }
588
+
589
+ .emptyStateText-TaLvAJ {
590
+ font-size: var(--c15t-font-size-sm, .875rem);
591
+ }
592
+
593
+ @media (prefers-reduced-motion: reduce) {
594
+ .toggle-bPZtik, .toggleThumb-hjGfoX, .btn-evRVlh, .input-IeTcCs, .select-byJ1WM {
595
+ transition: none;
596
+ }
597
+ }
598
+
599
+ @media (hover: none) {
600
+ .btn-evRVlh:hover {
601
+ background-color: var(--c15t-surface, #fff);
602
+ border-color: var(--c15t-border, #e3e3e3);
603
+ }
604
+
605
+ .btnPrimary-dA6nqY:hover {
606
+ background-color: var(--c15t-primary, #335cff);
607
+ border-color: var(--c15t-primary, #335cff);
608
+ }
609
+ }
610
+ `,
611
+ ""
612
+ ]);
613
+ ___CSS_LOADER_EXPORT___.locals = {
614
+ toggle: "toggle-bPZtik",
615
+ toggleActive: "toggleActive-Ldlasg",
616
+ toggleThumb: "toggleThumb-hjGfoX",
617
+ toggleDisabled: "toggleDisabled-ZcD8nZ",
618
+ badge: "badge-yA0giZ",
619
+ badgeSuccess: "badgeSuccess-mA76a4",
620
+ badgeError: "badgeError-Agsq7I",
621
+ badgeWarning: "badgeWarning-xpdwMQ",
622
+ badgeInfo: "badgeInfo-uWdPCK",
623
+ badgeNeutral: "badgeNeutral-j3EsE0",
624
+ btn: "btn-evRVlh",
625
+ btnPrimary: "btnPrimary-dA6nqY",
626
+ btnDanger: "btnDanger-eDnqOX",
627
+ btnSmall: "btnSmall-TjXoqZ",
628
+ btnIcon: "btnIcon-fiYQAh",
629
+ input: "input-IeTcCs",
630
+ inputSmall: "inputSmall-pJyXcL",
631
+ select: "select-byJ1WM",
632
+ grid: "grid-LlrmEz",
633
+ gridCols2: "gridCols2-UgcIqI",
634
+ gridCols3: "gridCols3-OmMIq6",
635
+ gridCard: "gridCard-Qm5xxI",
636
+ gridCardTitle: "gridCardTitle-HjXETp",
637
+ listItem: "listItem-XUKGIo",
638
+ listItemContent: "listItemContent-WDBF1N",
639
+ listItemTitle: "listItemTitle-N89OkC",
640
+ listItemDescription: "listItemDescription-E6JHyZ",
641
+ listItemActions: "listItemActions-F1BfOm",
642
+ section: "section-a197cB",
643
+ sectionHeader: "sectionHeader-Xcljcw",
644
+ sectionTitle: "sectionTitle-RUiFld",
645
+ infoRow: "infoRow-RlB_0h",
646
+ infoLabel: "infoLabel-_pbK33",
647
+ infoValue: "infoValue-flMl_e",
648
+ emptyState: "emptyState-QcmzTQ",
649
+ emptyStateIcon: "emptyStateIcon-WHFkX8",
650
+ emptyStateText: "emptyStateText-TaLvAJ"
651
+ };
652
+ const __rspack_default_export = ___CSS_LOADER_EXPORT___;
653
+ },
654
+ "../../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__) {
655
+ __webpack_require__.d(__webpack_exports__, {
656
+ A: ()=>__rspack_default_export
657
+ });
658
+ 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");
659
+ 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);
660
+ 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");
661
+ 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);
662
+ 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());
663
+ ___CSS_LOADER_EXPORT___.push([
664
+ module.id,
665
+ `.container-XiXwoL {
666
+ z-index: var(--c15t-devtools-z-index, 99999);
667
+ font-family: var(--c15t-font-family, system-ui, -apple-system, sans-serif);
668
+ font-size: var(--c15t-font-size-sm, .875rem);
669
+ line-height: var(--c15t-line-height-normal, 1.5);
670
+ color: var(--c15t-text, #171717);
671
+ -webkit-font-smoothing: antialiased;
672
+ -moz-osx-font-smoothing: grayscale;
673
+ position: fixed;
674
+ }
675
+
676
+ .floatingButton-Gw8MtJ {
677
+ width: var(--c15t-devtools-button-size, 40px);
678
+ height: var(--c15t-devtools-button-size, 40px);
679
+ border: 1px solid var(--c15t-border, #e3e3e3);
680
+ border-radius: var(--c15t-radius-full, 9999px);
681
+ background-color: var(--c15t-surface, #fff);
682
+ box-shadow: var(--c15t-shadow-lg, 0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a);
683
+ cursor: grab;
684
+ z-index: var(--c15t-devtools-z-index, 99999);
685
+ 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));
686
+ transform-origin: center;
687
+ touch-action: none;
688
+ user-select: none;
689
+ -webkit-tap-highlight-color: transparent;
690
+ justify-content: center;
691
+ align-items: center;
692
+ padding: 0;
693
+ display: flex;
694
+ position: fixed;
695
+ }
696
+
697
+ @media (hover: hover) and (pointer: fine) {
698
+ .floatingButton-Gw8MtJ:hover {
699
+ background-color: var(--c15t-surface-hover, #f2f2f2);
700
+ box-shadow: var(--c15t-shadow-xl, 0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a);
701
+ }
702
+ }
703
+
704
+ .floatingButton-Gw8MtJ:focus {
705
+ outline: none;
706
+ }
707
+
708
+ .floatingButton-Gw8MtJ:focus-visible {
709
+ outline: 2px solid var(--c15t-primary, #335cff);
710
+ outline-offset: 2px;
711
+ }
712
+
713
+ .floatingButton-Gw8MtJ:active {
714
+ cursor: grabbing;
715
+ transform: scale(1.02);
716
+ }
717
+
718
+ .floatingButtonIcon-cHWefk {
719
+ width: 50%;
720
+ height: 50%;
721
+ color: var(--c15t-text, #171717);
722
+ pointer-events: none;
723
+ flex-shrink: 0;
724
+ justify-content: center;
725
+ align-items: center;
726
+ display: flex;
727
+ }
728
+
729
+ .floatingButtonIcon-cHWefk svg {
730
+ width: 100%;
731
+ height: 100%;
732
+ }
733
+
734
+ .positionBottomRight-ZPD58v {
735
+ bottom: 20px;
736
+ right: 20px;
737
+ }
738
+
739
+ .positionBottomLeft-MDd6AY {
740
+ bottom: 20px;
741
+ left: 20px;
742
+ }
743
+
744
+ .positionTopRight-L6yusU {
745
+ top: 20px;
746
+ right: 20px;
747
+ }
748
+
749
+ .positionTopLeft-C65boy {
750
+ top: 20px;
751
+ left: 20px;
752
+ }
753
+
754
+ .backdrop-LhVMB5 {
755
+ background-color: var(--c15t-overlay, #00000080);
756
+ z-index: calc(var(--c15t-devtools-z-index, 99999) + 1);
757
+ position: fixed;
758
+ inset: 0;
759
+ }
760
+
761
+ .panel-jtWove {
762
+ width: var(--c15t-devtools-panel-width, 480px);
763
+ max-height: var(--c15t-devtools-panel-max-height, 560px);
764
+ background-color: var(--c15t-surface, #fff);
765
+ border: 1px solid var(--c15t-border, #e3e3e3);
766
+ border-radius: var(--c15t-radius-lg, .75rem);
767
+ box-shadow: var(--c15t-shadow-lg, 0 8px 24px #0000001f);
768
+ z-index: calc(var(--c15t-devtools-z-index, 99999) + 2);
769
+ flex-direction: column;
770
+ display: flex;
771
+ position: fixed;
772
+ overflow: hidden;
773
+ }
774
+
775
+ .panel-jtWove.positionBottomRight-ZPD58v {
776
+ transform-origin: 100% 100%;
777
+ bottom: 80px;
778
+ right: 20px;
779
+ }
780
+
781
+ .panel-jtWove.positionBottomLeft-MDd6AY {
782
+ transform-origin: 0 100%;
783
+ bottom: 80px;
784
+ left: 20px;
785
+ }
786
+
787
+ .panel-jtWove.positionTopRight-L6yusU {
788
+ transform-origin: 100% 0;
789
+ top: 80px;
790
+ right: 20px;
791
+ }
792
+
793
+ .panel-jtWove.positionTopLeft-C65boy {
794
+ transform-origin: 0 0;
795
+ top: 80px;
796
+ left: 20px;
797
+ }
798
+
799
+ .header-xluoTr {
800
+ padding: var(--c15t-space-sm, .5rem) var(--c15t-space-md, 1rem);
801
+ border-bottom: 1px solid var(--c15t-border, #e3e3e3);
802
+ background-color: var(--c15t-devtools-surface-muted, #f5f5f5);
803
+ justify-content: space-between;
804
+ align-items: center;
805
+ display: flex;
806
+ }
807
+
808
+ .headerTitle-kJ9XjK {
809
+ align-items: center;
810
+ gap: var(--c15t-space-sm, .5rem);
811
+ font-size: var(--c15t-font-size-sm, .875rem);
812
+ font-weight: var(--c15t-font-weight-semibold, 600);
813
+ color: var(--c15t-text, #171717);
814
+ display: flex;
815
+ }
816
+
817
+ .headerLogo-PxJ_w1 {
818
+ width: 20px;
819
+ height: 20px;
820
+ color: var(--c15t-primary, #335cff);
821
+ }
822
+
823
+ .closeButton-Yto0Nb {
824
+ border-radius: var(--c15t-radius-sm, .25rem);
825
+ width: 28px;
826
+ height: 28px;
827
+ color: var(--c15t-text-muted, #737373);
828
+ cursor: pointer;
829
+ 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));
830
+ background-color: #0000;
831
+ border: none;
832
+ justify-content: center;
833
+ align-items: center;
834
+ padding: 0;
835
+ display: flex;
836
+ }
837
+
838
+ .closeButton-Yto0Nb:hover {
839
+ background-color: var(--c15t-surface-hover, #f7f7f7);
840
+ color: var(--c15t-text, #171717);
841
+ }
842
+
843
+ .closeButton-Yto0Nb:focus-visible {
844
+ outline: 2px solid var(--c15t-primary, #335cff);
845
+ outline-offset: 1px;
846
+ }
847
+
848
+ .closeButtonIcon-fVlR1I {
849
+ width: 16px;
850
+ height: 16px;
851
+ }
852
+
853
+ .content-yDMYfG {
854
+ overscroll-behavior: contain;
855
+ -webkit-overflow-scrolling: touch;
856
+ flex: auto;
857
+ min-height: 200px;
858
+ overflow: hidden auto;
859
+ }
860
+
861
+ .footer-ESbmwQ {
862
+ padding: var(--c15t-space-xs, .25rem) var(--c15t-space-md, 1rem);
863
+ border-top: 1px solid var(--c15t-border, #e3e3e3);
864
+ background-color: var(--c15t-devtools-surface-muted, #f5f5f5);
865
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
866
+ color: var(--c15t-text-muted, #737373);
867
+ justify-content: space-between;
868
+ align-items: center;
869
+ display: flex;
870
+ }
871
+
872
+ .footerStatus-rlb99A {
873
+ align-items: center;
874
+ gap: var(--c15t-space-xs, .25rem);
875
+ display: flex;
876
+ }
877
+
878
+ .statusDot-hYJoej {
879
+ border-radius: var(--c15t-radius-full, 9999px);
880
+ width: 6px;
881
+ height: 6px;
882
+ }
883
+
884
+ .statusConnected-hPSUgS {
885
+ background-color: var(--c15t-devtools-badge-success, #21c45d);
886
+ }
887
+
888
+ .statusDisconnected-HIpcee {
889
+ background-color: var(--c15t-devtools-badge-error, #ef4343);
890
+ }
891
+
892
+ .errorState-DRtU3f {
893
+ padding: var(--c15t-space-xl, 2rem);
894
+ text-align: center;
895
+ justify-content: center;
896
+ align-items: center;
897
+ gap: var(--c15t-space-md, 1rem);
898
+ flex-direction: column;
899
+ display: flex;
900
+ }
901
+
902
+ .errorIcon-_o6Vta {
903
+ width: 48px;
904
+ height: 48px;
905
+ color: var(--c15t-devtools-badge-warning, #f59f0a);
906
+ }
907
+
908
+ .errorTitle-tkOy1H {
909
+ font-size: var(--c15t-font-size-base, 1rem);
910
+ font-weight: var(--c15t-font-weight-semibold, 600);
911
+ color: var(--c15t-text, #171717);
912
+ }
913
+
914
+ .errorMessage-MPRZNN {
915
+ font-size: var(--c15t-font-size-sm, .875rem);
916
+ color: var(--c15t-text-muted, #737373);
917
+ max-width: 280px;
918
+ }
919
+
920
+ @media (prefers-reduced-motion: reduce) {
921
+ .floatingButton-Gw8MtJ, .closeButton-Yto0Nb {
922
+ transition: none;
923
+ }
924
+ }
925
+
926
+ @media (hover: none) {
927
+ .floatingButton-Gw8MtJ:hover {
928
+ box-shadow: var(--c15t-shadow-md, 0 4px 12px #00000014);
929
+ transform: none;
930
+ }
931
+ }
932
+
933
+ .dropdownMenu-aKK18l {
934
+ min-width: 200px;
935
+ padding: var(--c15t-space-xs, .25rem);
936
+ border: 1px solid var(--c15t-border, #e3e3e3);
937
+ border-radius: var(--c15t-radius-lg, .75rem);
938
+ background-color: var(--c15t-surface, #fff);
939
+ box-shadow: var(--c15t-shadow-lg, 0 8px 24px #0000001f);
940
+ z-index: calc(var(--c15t-devtools-z-index, 99999) + 1);
941
+ opacity: 0;
942
+ transform-origin: 0 100%;
943
+ pointer-events: none;
944
+ 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));
945
+ position: fixed;
946
+ transform: scale(.95)translateY(8px);
947
+ }
948
+
949
+ .dropdownMenu-aKK18l[data-state="open"] {
950
+ opacity: 1;
951
+ pointer-events: auto;
952
+ transform: scale(1)translateY(0);
953
+ }
954
+
955
+ .dropdownMenuBottomLeft-MKUEpC {
956
+ transform-origin: 0 100%;
957
+ }
958
+
959
+ .dropdownMenuBottomRight-nXiRRF {
960
+ transform-origin: 100% 100%;
961
+ }
962
+
963
+ .dropdownMenuTopLeft-YlFVSe {
964
+ transform-origin: 0 0;
965
+ }
966
+
967
+ .dropdownMenuTopRight-OpvmUO {
968
+ transform-origin: 100% 0;
969
+ }
970
+
971
+ .menuItem-kBbHRP {
972
+ align-items: center;
973
+ gap: var(--c15t-space-sm, .5rem);
974
+ width: 100%;
975
+ padding: var(--c15t-space-sm, .5rem) var(--c15t-space-md, .75rem);
976
+ border-radius: var(--c15t-radius-md, .5rem);
977
+ color: var(--c15t-text, #171717);
978
+ font-size: var(--c15t-font-size-sm, .875rem);
979
+ font-weight: var(--c15t-font-weight-medium, 500);
980
+ text-align: left;
981
+ cursor: pointer;
982
+ transition: background-color var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1));
983
+ background: none;
984
+ border: none;
985
+ display: flex;
986
+ }
987
+
988
+ .menuItem-kBbHRP:hover {
989
+ background-color: var(--c15t-surface-hover, #f2f2f2);
990
+ }
991
+
992
+ .menuItem-kBbHRP:focus-visible {
993
+ outline: 2px solid var(--c15t-primary, #335cff);
994
+ outline-offset: -2px;
995
+ }
996
+
997
+ .menuItemIcon-P3pP5K {
998
+ width: 20px;
999
+ height: 20px;
1000
+ color: var(--c15t-text-muted, #737373);
1001
+ flex-shrink: 0;
1002
+ }
1003
+
1004
+ .menuItemLabel-d_d7sD {
1005
+ flex: 1;
1006
+ }
1007
+
1008
+ .menuItemDescription-hqdfJA {
1009
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
1010
+ color: var(--c15t-text-muted, #737373);
1011
+ font-weight: var(--c15t-font-weight-normal, 400);
1012
+ }
1013
+
1014
+ .menuItemContent-hBlruV {
1015
+ flex: 1;
1016
+ min-width: 0;
1017
+ }
1018
+
1019
+ .menuItemToggle-RHrCAX {
1020
+ flex-shrink: 0;
1021
+ margin-left: auto;
1022
+ }
1023
+
1024
+ .menuItemToggleTrack-gDp_f3 {
1025
+ background-color: var(--c15t-switch-track, #d9d9d9);
1026
+ border-radius: var(--c15t-radius-full, 9999px);
1027
+ width: 36px;
1028
+ height: 20px;
1029
+ transition: background-color var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1));
1030
+ position: relative;
1031
+ }
1032
+
1033
+ .menuItemToggleThumb-ioqqyc {
1034
+ background-color: var(--c15t-switch-thumb, #fff);
1035
+ border-radius: var(--c15t-radius-full, 9999px);
1036
+ width: 16px;
1037
+ height: 16px;
1038
+ box-shadow: var(--c15t-shadow-sm, 0 1px 2px #0000001a);
1039
+ transition: transform var(--c15t-duration-fast, .1s) var(--c15t-easing, cubic-bezier(.4, 0, .2, 1));
1040
+ position: absolute;
1041
+ top: 2px;
1042
+ left: 2px;
1043
+ }
1044
+
1045
+ .menuItemToggleChecked-K3BPtk .menuItemToggleTrack-gDp_f3 {
1046
+ background-color: var(--c15t-switch-track-checked, #335cff);
1047
+ }
1048
+
1049
+ .menuItemToggleChecked-K3BPtk .menuItemToggleThumb-ioqqyc {
1050
+ transform: translateX(16px);
1051
+ }
1052
+
1053
+ .menuDivider-JIBdhU {
1054
+ height: 1px;
1055
+ margin: var(--c15t-space-xs, .25rem) 0;
1056
+ background-color: var(--c15t-border, #e3e3e3);
1057
+ }
1058
+
1059
+ .unifiedButtonWrapper-d3Frwt {
1060
+ display: contents;
1061
+ }
1062
+
1063
+ @media (prefers-reduced-motion: reduce) {
1064
+ .dropdownMenu-aKK18l {
1065
+ transition: none;
1066
+ }
1067
+ }
1068
+ `,
1069
+ ""
1070
+ ]);
1071
+ ___CSS_LOADER_EXPORT___.locals = {
1072
+ container: "container-XiXwoL",
1073
+ floatingButton: "floatingButton-Gw8MtJ",
1074
+ floatingButtonIcon: "floatingButtonIcon-cHWefk",
1075
+ positionBottomRight: "positionBottomRight-ZPD58v",
1076
+ positionBottomLeft: "positionBottomLeft-MDd6AY",
1077
+ positionTopRight: "positionTopRight-L6yusU",
1078
+ positionTopLeft: "positionTopLeft-C65boy",
1079
+ backdrop: "backdrop-LhVMB5",
1080
+ panel: "panel-jtWove",
1081
+ header: "header-xluoTr",
1082
+ headerTitle: "headerTitle-kJ9XjK",
1083
+ headerLogo: "headerLogo-PxJ_w1",
1084
+ closeButton: "closeButton-Yto0Nb",
1085
+ closeButtonIcon: "closeButtonIcon-fVlR1I",
1086
+ content: "content-yDMYfG",
1087
+ footer: "footer-ESbmwQ",
1088
+ footerStatus: "footerStatus-rlb99A",
1089
+ statusDot: "statusDot-hYJoej",
1090
+ statusConnected: "statusConnected-hPSUgS",
1091
+ statusDisconnected: "statusDisconnected-HIpcee",
1092
+ errorState: "errorState-DRtU3f",
1093
+ errorIcon: "errorIcon-_o6Vta",
1094
+ errorTitle: "errorTitle-tkOy1H",
1095
+ errorMessage: "errorMessage-MPRZNN",
1096
+ dropdownMenu: "dropdownMenu-aKK18l",
1097
+ dropdownMenuBottomLeft: "dropdownMenuBottomLeft-MKUEpC",
1098
+ dropdownMenuBottomRight: "dropdownMenuBottomRight-nXiRRF",
1099
+ dropdownMenuTopLeft: "dropdownMenuTopLeft-YlFVSe",
1100
+ dropdownMenuTopRight: "dropdownMenuTopRight-OpvmUO",
1101
+ menuItem: "menuItem-kBbHRP",
1102
+ menuItemIcon: "menuItemIcon-P3pP5K",
1103
+ menuItemLabel: "menuItemLabel-d_d7sD",
1104
+ menuItemDescription: "menuItemDescription-hqdfJA",
1105
+ menuItemContent: "menuItemContent-hBlruV",
1106
+ menuItemToggle: "menuItemToggle-RHrCAX",
1107
+ menuItemToggleTrack: "menuItemToggleTrack-gDp_f3",
1108
+ menuItemToggleThumb: "menuItemToggleThumb-ioqqyc",
1109
+ menuItemToggleChecked: "menuItemToggleChecked-K3BPtk",
1110
+ menuDivider: "menuDivider-JIBdhU",
1111
+ unifiedButtonWrapper: "unifiedButtonWrapper-d3Frwt"
1112
+ };
1113
+ const __rspack_default_export = ___CSS_LOADER_EXPORT___;
1114
+ },
1115
+ "../../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__) {
1116
+ __webpack_require__.d(__webpack_exports__, {
1117
+ A: ()=>__rspack_default_export
1118
+ });
1119
+ 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");
1120
+ 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);
1121
+ 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");
1122
+ 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);
1123
+ 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());
1124
+ ___CSS_LOADER_EXPORT___.push([
1125
+ module.id,
1126
+ `.tabList-IyuiBE {
1127
+ gap: var(--c15t-space-xs, .25rem);
1128
+ padding: var(--c15t-space-sm, .5rem) var(--c15t-space-md, 1rem);
1129
+ border-bottom: 1px solid var(--c15t-border, #e3e3e3);
1130
+ background-color: var(--c15t-surface, #fff);
1131
+ scrollbar-width: none;
1132
+ -ms-overflow-style: none;
1133
+ display: flex;
1134
+ overflow-x: auto;
1135
+ }
1136
+
1137
+ .tabList-IyuiBE::-webkit-scrollbar {
1138
+ display: none;
1139
+ }
1140
+
1141
+ .tab-yfDEqg {
1142
+ align-items: center;
1143
+ gap: var(--c15t-space-xs, .25rem);
1144
+ padding: var(--c15t-space-xs, .25rem) var(--c15t-space-sm, .5rem);
1145
+ border-radius: var(--c15t-radius-md, .5rem);
1146
+ color: var(--c15t-text-muted, #737373);
1147
+ font-family: inherit;
1148
+ font-size: var(--c15t-devtools-font-size-xs, .75rem);
1149
+ font-weight: var(--c15t-font-weight-medium, 500);
1150
+ cursor: pointer;
1151
+ white-space: nowrap;
1152
+ 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));
1153
+ background-color: #0000;
1154
+ border: none;
1155
+ display: flex;
1156
+ }
1157
+
1158
+ .tab-yfDEqg:hover {
1159
+ background-color: var(--c15t-surface-hover, #f7f7f7);
1160
+ color: var(--c15t-text, #171717);
1161
+ }
1162
+
1163
+ .tab-yfDEqg:focus-visible {
1164
+ outline: 2px solid var(--c15t-primary, #335cff);
1165
+ outline-offset: 1px;
1166
+ }
1167
+
1168
+ .tabActive-r4hing {
1169
+ background-color: var(--c15t-primary, #335cff);
1170
+ color: var(--c15t-text-on-primary, #fff);
1171
+ }
1172
+
1173
+ .tabActive-r4hing:hover {
1174
+ background-color: var(--c15t-primary-hover, #03f);
1175
+ color: var(--c15t-text-on-primary, #fff);
1176
+ }
1177
+
1178
+ .tabIcon-U9tnu0 {
1179
+ flex-shrink: 0;
1180
+ width: 14px;
1181
+ height: 14px;
1182
+ }
1183
+
1184
+ .tabDisabled-lDuv5l {
1185
+ opacity: .5;
1186
+ cursor: not-allowed;
1187
+ pointer-events: none;
1188
+ }
1189
+
1190
+ .tabDisabled-lDuv5l:hover {
1191
+ color: var(--c15t-text-muted, #737373);
1192
+ background-color: #0000;
1193
+ }
1194
+
1195
+ .tabPanel-QKO8FX {
1196
+ display: none;
1197
+ }
1198
+
1199
+ .tabPanelActive-mrNlGE {
1200
+ display: block;
1201
+ }
1202
+
1203
+ @media (prefers-reduced-motion: reduce) {
1204
+ .tab-yfDEqg {
1205
+ transition: none;
1206
+ }
1207
+ }
1208
+
1209
+ @media (hover: none) {
1210
+ .tab-yfDEqg:hover:not(.tabActive-r4hing) {
1211
+ color: var(--c15t-text-muted, #737373);
1212
+ background-color: #0000;
1213
+ }
1214
+ }
1215
+ `,
1216
+ ""
1217
+ ]);
1218
+ ___CSS_LOADER_EXPORT___.locals = {
1219
+ tabList: "tabList-IyuiBE",
1220
+ tab: "tab-yfDEqg",
1221
+ tabActive: "tabActive-r4hing",
1222
+ tabIcon: "tabIcon-U9tnu0",
1223
+ tabDisabled: "tabDisabled-lDuv5l",
1224
+ tabPanel: "tabPanel-QKO8FX",
1225
+ tabPanelActive: "tabPanelActive-mrNlGE"
1226
+ };
1227
+ const __rspack_default_export = ___CSS_LOADER_EXPORT___;
1228
+ },
1229
+ "../../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__) {
1230
+ __webpack_require__.d(__webpack_exports__, {
1231
+ A: ()=>__rspack_default_export
1232
+ });
1233
+ 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");
1234
+ 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);
1235
+ 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");
1236
+ 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);
1237
+ 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());
1238
+ ___CSS_LOADER_EXPORT___.push([
1239
+ module.id,
1240
+ `:root {
1241
+ --c15t-devtools-panel-width: 480px;
1242
+ --c15t-devtools-panel-max-height: 560px;
1243
+ --c15t-devtools-button-size: 40px;
1244
+ --c15t-devtools-z-index: 99999;
1245
+ --c15t-devtools-surface-muted: var(--c15t-surface-hover, #f7f7f7);
1246
+ --c15t-devtools-font-size-xs: .75rem;
1247
+ --c15t-devtools-badge-success: #21c45d;
1248
+ --c15t-devtools-badge-success-bg: #e4fbed;
1249
+ --c15t-devtools-badge-error: #ef4343;
1250
+ --c15t-devtools-badge-error-bg: #fde7e7;
1251
+ --c15t-devtools-badge-warning: #f59f0a;
1252
+ --c15t-devtools-badge-warning-bg: #fef7dc;
1253
+ --c15t-devtools-badge-info: #2463eb;
1254
+ --c15t-devtools-badge-info-bg: #dcebfe;
1255
+ --c15t-devtools-badge-neutral: #737373;
1256
+ --c15t-devtools-badge-neutral-bg: #f0f0f0;
1257
+ }
1258
+
1259
+ :is(:global(.c15t-dark), :global(.dark)) {
1260
+ --c15t-devtools-surface-muted: var(--c15t-surface-hover, #292929);
1261
+ --c15t-devtools-badge-success-bg: #21c45d33;
1262
+ --c15t-devtools-badge-error-bg: #ef434333;
1263
+ --c15t-devtools-badge-warning-bg: #f59f0a33;
1264
+ --c15t-devtools-badge-info-bg: #2463eb33;
1265
+ --c15t-devtools-badge-neutral-bg: #383838;
1266
+ }
1267
+
1268
+ @media (prefers-color-scheme: dark) {
1269
+ :root {
1270
+ --c15t-devtools-surface-muted: var(--c15t-surface-hover, #292929);
1271
+ --c15t-devtools-badge-success-bg: #21c45d33;
1272
+ --c15t-devtools-badge-error-bg: #ef434333;
1273
+ --c15t-devtools-badge-warning-bg: #f59f0a33;
1274
+ --c15t-devtools-badge-info-bg: #2463eb33;
1275
+ --c15t-devtools-badge-neutral-bg: #383838;
1276
+ }
1277
+ }
1278
+ `,
1279
+ ""
1280
+ ]);
1281
+ const __rspack_default_export = ___CSS_LOADER_EXPORT___;
1282
+ },
1283
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/api.js" (module) {
1284
+ module.exports = function(cssWithMappingToString) {
1285
+ var list = [];
1286
+ list.toString = function() {
1287
+ return this.map(function(item) {
1288
+ var content = "";
1289
+ var needLayer = void 0 !== item[5];
1290
+ if (item[4]) content += "@supports (".concat(item[4], ") {");
1291
+ if (item[2]) content += "@media ".concat(item[2], " {");
1292
+ if (needLayer) content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");
1293
+ content += cssWithMappingToString(item);
1294
+ if (needLayer) content += "}";
1295
+ if (item[2]) content += "}";
1296
+ if (item[4]) content += "}";
1297
+ return content;
1298
+ }).join("");
1299
+ };
1300
+ list.i = function(modules, media, dedupe, supports, layer) {
1301
+ if ("string" == typeof modules) modules = [
1302
+ [
1303
+ null,
1304
+ modules,
1305
+ void 0
1306
+ ]
1307
+ ];
1308
+ var alreadyImportedModules = {};
1309
+ if (dedupe) for(var k = 0; k < this.length; k++){
1310
+ var id = this[k][0];
1311
+ if (null != id) alreadyImportedModules[id] = true;
1312
+ }
1313
+ for(var _k = 0; _k < modules.length; _k++){
1314
+ var item = [].concat(modules[_k]);
1315
+ if (!dedupe || !alreadyImportedModules[item[0]]) {
1316
+ if (void 0 !== layer) if (void 0 === item[5]) item[5] = layer;
1317
+ else {
1318
+ item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");
1319
+ item[5] = layer;
1320
+ }
1321
+ if (media) if (item[2]) {
1322
+ item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");
1323
+ item[2] = media;
1324
+ } else item[2] = media;
1325
+ if (supports) if (item[4]) {
1326
+ item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");
1327
+ item[4] = supports;
1328
+ } else item[4] = "".concat(supports);
1329
+ list.push(item);
1330
+ }
1331
+ }
1332
+ };
1333
+ return list;
1334
+ };
1335
+ },
1336
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/css-loader/noSourceMaps.js" (module) {
1337
+ module.exports = function(i) {
1338
+ return i[1];
1339
+ };
1340
+ },
1341
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/injectStylesIntoStyleTag.js" (module) {
1342
+ var stylesInDOM = [];
1343
+ function getIndexByIdentifier(identifier) {
1344
+ var result = -1;
1345
+ for(var i = 0; i < stylesInDOM.length; i++)if (stylesInDOM[i].identifier === identifier) {
1346
+ result = i;
1347
+ break;
1348
+ }
1349
+ return result;
1350
+ }
1351
+ function modulesToDom(list, options) {
1352
+ var idCountMap = {};
1353
+ var identifiers = [];
1354
+ for(var i = 0; i < list.length; i++){
1355
+ var item = list[i];
1356
+ var id = options.base ? item[0] + options.base : item[0];
1357
+ var count = idCountMap[id] || 0;
1358
+ var identifier = "".concat(id, " ").concat(count);
1359
+ idCountMap[id] = count + 1;
1360
+ var indexByIdentifier = getIndexByIdentifier(identifier);
1361
+ var obj = {
1362
+ css: item[1],
1363
+ media: item[2],
1364
+ sourceMap: item[3],
1365
+ supports: item[4],
1366
+ layer: item[5]
1367
+ };
1368
+ if (-1 !== indexByIdentifier) {
1369
+ stylesInDOM[indexByIdentifier].references++;
1370
+ stylesInDOM[indexByIdentifier].updater(obj);
1371
+ } else {
1372
+ var updater = addElementStyle(obj, options);
1373
+ options.byIndex = i;
1374
+ stylesInDOM.splice(i, 0, {
1375
+ identifier: identifier,
1376
+ updater: updater,
1377
+ references: 1
1378
+ });
1379
+ }
1380
+ identifiers.push(identifier);
1381
+ }
1382
+ return identifiers;
1383
+ }
1384
+ function addElementStyle(obj, options) {
1385
+ var api = options.domAPI(options);
1386
+ api.update(obj);
1387
+ var updater = function(newObj) {
1388
+ if (newObj) {
1389
+ if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) return;
1390
+ api.update(obj = newObj);
1391
+ } else api.remove();
1392
+ };
1393
+ return updater;
1394
+ }
1395
+ module.exports = function(list, options) {
1396
+ options = options || {};
1397
+ list = list || [];
1398
+ var lastIdentifiers = modulesToDom(list, options);
1399
+ return function(newList) {
1400
+ newList = newList || [];
1401
+ for(var i = 0; i < lastIdentifiers.length; i++){
1402
+ var identifier = lastIdentifiers[i];
1403
+ var index = getIndexByIdentifier(identifier);
1404
+ stylesInDOM[index].references--;
1405
+ }
1406
+ var newLastIdentifiers = modulesToDom(newList, options);
1407
+ for(var _i = 0; _i < lastIdentifiers.length; _i++){
1408
+ var _identifier = lastIdentifiers[_i];
1409
+ var _index = getIndexByIdentifier(_identifier);
1410
+ if (0 === stylesInDOM[_index].references) {
1411
+ stylesInDOM[_index].updater();
1412
+ stylesInDOM.splice(_index, 1);
1413
+ }
1414
+ }
1415
+ lastIdentifiers = newLastIdentifiers;
1416
+ };
1417
+ };
1418
+ },
1419
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/insertBySelector.js" (module) {
1420
+ var memo = {};
1421
+ function getTarget(target) {
1422
+ if (void 0 === memo[target]) {
1423
+ var styleTarget = document.querySelector(target);
1424
+ if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) try {
1425
+ styleTarget = styleTarget.contentDocument.head;
1426
+ } catch (e) {
1427
+ styleTarget = null;
1428
+ }
1429
+ memo[target] = styleTarget;
1430
+ }
1431
+ return memo[target];
1432
+ }
1433
+ function insertBySelector(insert, style) {
1434
+ var target = getTarget(insert);
1435
+ if (!target) throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
1436
+ target.appendChild(style);
1437
+ }
1438
+ module.exports = insertBySelector;
1439
+ },
1440
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/insertStyleElement.js" (module) {
1441
+ function insertStyleElement(options) {
1442
+ var element = document.createElement("style");
1443
+ options.setAttributes(element, options.attributes);
1444
+ options.insert(element, options.options);
1445
+ return element;
1446
+ }
1447
+ module.exports = insertStyleElement;
1448
+ },
1449
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/setAttributesWithoutAttributes.js" (module, __unused_webpack_exports, __webpack_require__) {
1450
+ function setAttributesWithoutAttributes(styleElement) {
1451
+ var nonce = __webpack_require__.nc;
1452
+ if (nonce) styleElement.setAttribute("nonce", nonce);
1453
+ }
1454
+ module.exports = setAttributesWithoutAttributes;
1455
+ },
1456
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/styleDomAPI.js" (module) {
1457
+ function apply(styleElement, options, obj) {
1458
+ var css = "";
1459
+ if (obj.supports) css += "@supports (".concat(obj.supports, ") {");
1460
+ if (obj.media) css += "@media ".concat(obj.media, " {");
1461
+ var needLayer = void 0 !== obj.layer;
1462
+ if (needLayer) css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");
1463
+ css += obj.css;
1464
+ if (needLayer) css += "}";
1465
+ if (obj.media) css += "}";
1466
+ if (obj.supports) css += "}";
1467
+ var sourceMap = obj.sourceMap;
1468
+ if (sourceMap && "undefined" != typeof btoa) css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
1469
+ options.styleTagTransform(css, styleElement, options.options);
1470
+ }
1471
+ function removeStyleElement(styleElement) {
1472
+ if (null === styleElement.parentNode) return false;
1473
+ styleElement.parentNode.removeChild(styleElement);
1474
+ }
1475
+ function domAPI(options) {
1476
+ if ("undefined" == typeof document) return {
1477
+ update: function() {},
1478
+ remove: function() {}
1479
+ };
1480
+ var styleElement = options.insertStyleElement(options);
1481
+ return {
1482
+ update: function(obj) {
1483
+ apply(styleElement, options, obj);
1484
+ },
1485
+ remove: function() {
1486
+ removeStyleElement(styleElement);
1487
+ }
1488
+ };
1489
+ }
1490
+ module.exports = domAPI;
1491
+ },
1492
+ "../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/styleTagTransform.js" (module) {
1493
+ function styleTagTransform(css, styleElement) {
1494
+ if (styleElement.styleSheet) styleElement.styleSheet.cssText = css;
1495
+ else {
1496
+ while(styleElement.firstChild)styleElement.removeChild(styleElement.firstChild);
1497
+ styleElement.appendChild(document.createTextNode(css));
1498
+ }
1499
+ }
1500
+ module.exports = styleTagTransform;
1501
+ }
1502
+ };
1503
+ var __webpack_module_cache__ = {};
1504
+ function __webpack_require__(moduleId) {
1505
+ var cachedModule = __webpack_module_cache__[moduleId];
1506
+ if (void 0 !== cachedModule) return cachedModule.exports;
1507
+ var module = __webpack_module_cache__[moduleId] = {
1508
+ id: moduleId,
1509
+ exports: {}
1510
+ };
1511
+ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
1512
+ return module.exports;
1513
+ }
1514
+ (()=>{
1515
+ __webpack_require__.n = (module)=>{
1516
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
1517
+ __webpack_require__.d(getter, {
1518
+ a: getter
1519
+ });
1520
+ return getter;
1521
+ };
1522
+ })();
1523
+ (()=>{
1524
+ __webpack_require__.d = (exports1, definition)=>{
1525
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
1526
+ enumerable: true,
1527
+ get: definition[key]
1528
+ });
1529
+ };
1530
+ })();
1531
+ (()=>{
1532
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
1533
+ })();
1534
+ (()=>{
1535
+ __webpack_require__.r = (exports1)=>{
1536
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
1537
+ value: 'Module'
1538
+ });
1539
+ Object.defineProperty(exports1, '__esModule', {
1540
+ value: true
1541
+ });
1542
+ };
1543
+ })();
1544
+ (()=>{
1545
+ __webpack_require__.nc = void 0;
1546
+ })();
1547
+ var __webpack_exports__ = {};
1548
+ (()=>{
1549
+ __webpack_require__.r(__webpack_exports__);
1550
+ __webpack_require__.d(__webpack_exports__, {
1551
+ C15TDevTools: ()=>C15TDevTools
1552
+ });
1553
+ const external_react_namespaceObject = require("react");
1554
+ const DEVTOOLS_STORAGE_KEY = 'c15t-devtools-position';
1555
+ const DRAG_THRESHOLD = 30;
1556
+ const VELOCITY_THRESHOLD = 0.15;
1557
+ function createInitialDragState() {
1558
+ return {
1559
+ isDragging: false,
1560
+ startX: 0,
1561
+ startY: 0,
1562
+ currentX: 0,
1563
+ currentY: 0
1564
+ };
1565
+ }
1566
+ function calculateCornerFromDrag(currentCorner, dragX, dragY, options = {}) {
1567
+ const { threshold = DRAG_THRESHOLD, velocityX = 0, velocityY = 0 } = options;
1568
+ const absDragX = Math.abs(dragX);
1569
+ const absDragY = Math.abs(dragY);
1570
+ const absVelocityX = Math.abs(velocityX);
1571
+ const absVelocityY = Math.abs(velocityY);
1572
+ const hasVelocityX = absVelocityX >= VELOCITY_THRESHOLD;
1573
+ const hasVelocityY = absVelocityY >= VELOCITY_THRESHOLD;
1574
+ const velocityDistanceThreshold = 10;
1575
+ const shouldMoveX = absDragX >= threshold || hasVelocityX && absDragX >= velocityDistanceThreshold;
1576
+ const shouldMoveY = absDragY >= threshold || hasVelocityY && absDragY >= velocityDistanceThreshold;
1577
+ if (!shouldMoveX && !shouldMoveY) return currentCorner;
1578
+ const isCurrentlyBottom = currentCorner.includes('bottom');
1579
+ const isCurrentlyRight = currentCorner.includes('right');
1580
+ let isBottom = isCurrentlyBottom;
1581
+ let isRight = isCurrentlyRight;
1582
+ if (shouldMoveX) isRight = dragX > 0;
1583
+ if (shouldMoveY) isBottom = dragY > 0;
1584
+ if (isBottom && isRight) return 'bottom-right';
1585
+ if (isBottom && !isRight) return 'bottom-left';
1586
+ if (!isBottom && isRight) return 'top-right';
1587
+ return 'top-left';
1588
+ }
1589
+ function getCornerStyles(corner, offset = 20) {
1590
+ const styles = {};
1591
+ if (corner.includes('bottom')) styles.bottom = `${offset}px`;
1592
+ else styles.top = `${offset}px`;
1593
+ if (corner.includes('right')) styles.right = `${offset}px`;
1594
+ else styles.left = `${offset}px`;
1595
+ return styles;
1596
+ }
1597
+ function persistPosition(corner, storageKey = DEVTOOLS_STORAGE_KEY) {
1598
+ try {
1599
+ if ('undefined' != typeof localStorage) localStorage.setItem(storageKey, corner);
1600
+ } catch {}
1601
+ }
1602
+ function getPersistedPosition(storageKey = DEVTOOLS_STORAGE_KEY) {
1603
+ try {
1604
+ if ('undefined' != typeof localStorage) {
1605
+ const stored = localStorage.getItem(storageKey);
1606
+ if ('bottom-right' === stored || 'top-right' === stored || 'bottom-left' === stored || 'top-left' === stored) return stored;
1607
+ }
1608
+ } catch {}
1609
+ return null;
1610
+ }
1611
+ function calculateDragOffset(dragState) {
1612
+ if (!dragState.isDragging) return {
1613
+ x: 0,
1614
+ y: 0
1615
+ };
1616
+ return {
1617
+ x: dragState.currentX - dragState.startX,
1618
+ y: dragState.currentY - dragState.startY
1619
+ };
1620
+ }
1621
+ function createDraggable(options = {}) {
1622
+ const { defaultPosition = 'bottom-right', persistPosition: shouldPersist = true, onPositionChange, onDragStart, onDragEnd } = options;
1623
+ let corner = defaultPosition;
1624
+ if (shouldPersist && 'undefined' != typeof window) {
1625
+ const persisted = getPersistedPosition(DEVTOOLS_STORAGE_KEY);
1626
+ if (persisted) corner = persisted;
1627
+ }
1628
+ let dragState = createInitialDragState();
1629
+ let hasDragged = false;
1630
+ let dragStartTime = 0;
1631
+ let attachedElement = null;
1632
+ let boundPointerDown = null;
1633
+ let boundPointerMove = null;
1634
+ let boundPointerUp = null;
1635
+ let boundPointerCancel = null;
1636
+ function updateCorner(newCorner) {
1637
+ corner = newCorner;
1638
+ if (shouldPersist) persistPosition(newCorner, DEVTOOLS_STORAGE_KEY);
1639
+ onPositionChange?.(newCorner);
1640
+ }
1641
+ function handlePointerDown(e) {
1642
+ if (0 !== e.button) return;
1643
+ e.target.setPointerCapture(e.pointerId);
1644
+ hasDragged = false;
1645
+ dragStartTime = Date.now();
1646
+ dragState = {
1647
+ isDragging: true,
1648
+ startX: e.clientX,
1649
+ startY: e.clientY,
1650
+ currentX: e.clientX,
1651
+ currentY: e.clientY
1652
+ };
1653
+ onDragStart?.();
1654
+ }
1655
+ function handlePointerMove(e) {
1656
+ if (!dragState.isDragging) return;
1657
+ const dx = Math.abs(e.clientX - dragState.startX);
1658
+ const dy = Math.abs(e.clientY - dragState.startY);
1659
+ if (dx > 5 || dy > 5) hasDragged = true;
1660
+ dragState = {
1661
+ ...dragState,
1662
+ currentX: e.clientX,
1663
+ currentY: e.clientY
1664
+ };
1665
+ if (attachedElement && hasDragged) {
1666
+ const offset = calculateDragOffset(dragState);
1667
+ attachedElement.style.transform = `translate(${offset.x}px, ${offset.y}px)`;
1668
+ attachedElement.style.transition = 'none';
1669
+ }
1670
+ }
1671
+ function handlePointerUp(e) {
1672
+ if (!dragState.isDragging) return;
1673
+ e.target.releasePointerCapture(e.pointerId);
1674
+ if (hasDragged) {
1675
+ const dragX = e.clientX - dragState.startX;
1676
+ const dragY = e.clientY - dragState.startY;
1677
+ const dragDuration = Date.now() - dragStartTime;
1678
+ const velocityX = dragDuration > 0 ? dragX / dragDuration : 0;
1679
+ const velocityY = dragDuration > 0 ? dragY / dragDuration : 0;
1680
+ const newCorner = calculateCornerFromDrag(corner, dragX, dragY, {
1681
+ velocityX,
1682
+ velocityY
1683
+ });
1684
+ if (newCorner !== corner) updateCorner(newCorner);
1685
+ if (attachedElement) {
1686
+ applyPositionStyles(attachedElement);
1687
+ attachedElement.style.transform = '';
1688
+ attachedElement.style.transition = '';
1689
+ }
1690
+ }
1691
+ dragState = createInitialDragState();
1692
+ onDragEnd?.(hasDragged);
1693
+ }
1694
+ function handlePointerCancel(e) {
1695
+ e.target.releasePointerCapture(e.pointerId);
1696
+ dragState = createInitialDragState();
1697
+ if (attachedElement) {
1698
+ attachedElement.style.transform = '';
1699
+ attachedElement.style.transition = '';
1700
+ }
1701
+ onDragEnd?.(false);
1702
+ }
1703
+ function applyPositionStyles(element) {
1704
+ const styles = getCornerStyles(corner, 20);
1705
+ element.style.top = '';
1706
+ element.style.bottom = '';
1707
+ element.style.left = '';
1708
+ element.style.right = '';
1709
+ for (const [key, value] of Object.entries(styles))if (void 0 !== value) element.style.setProperty(key, value);
1710
+ }
1711
+ function attach(element) {
1712
+ detach();
1713
+ attachedElement = element;
1714
+ boundPointerDown = handlePointerDown;
1715
+ boundPointerMove = handlePointerMove;
1716
+ boundPointerUp = handlePointerUp;
1717
+ boundPointerCancel = handlePointerCancel;
1718
+ element.addEventListener('pointerdown', boundPointerDown);
1719
+ element.addEventListener('pointermove', boundPointerMove);
1720
+ element.addEventListener('pointerup', boundPointerUp);
1721
+ element.addEventListener('pointercancel', boundPointerCancel);
1722
+ applyPositionStyles(element);
1723
+ element.style.touchAction = 'none';
1724
+ }
1725
+ function detach() {
1726
+ if (attachedElement) {
1727
+ if (boundPointerDown) attachedElement.removeEventListener('pointerdown', boundPointerDown);
1728
+ if (boundPointerMove) attachedElement.removeEventListener('pointermove', boundPointerMove);
1729
+ if (boundPointerUp) attachedElement.removeEventListener('pointerup', boundPointerUp);
1730
+ if (boundPointerCancel) attachedElement.removeEventListener('pointercancel', boundPointerCancel);
1731
+ attachedElement = null;
1732
+ }
1733
+ }
1734
+ return {
1735
+ getCorner: ()=>corner,
1736
+ setCorner: updateCorner,
1737
+ isDragging: ()=>dragState.isDragging,
1738
+ wasDragged: ()=>hasDragged,
1739
+ attach,
1740
+ detach,
1741
+ applyPositionStyles,
1742
+ destroy: detach
1743
+ };
1744
+ }
1745
+ function createElement(options = {}) {
1746
+ const { tag = 'div', text, html, children, className, id, style, dataset, onClick, onMouseEnter, onMouseLeave, onKeyDown, onKeyUp, onFocus, onBlur, onChange, onInput, onAnimationEnd, onTransitionEnd, ...attrs } = options;
1747
+ const element = document.createElement(tag);
1748
+ if (className) element.className = className;
1749
+ if (id) element.id = id;
1750
+ if (style) {
1751
+ for (const [key, value] of Object.entries(style))if (void 0 !== value) element.style.setProperty(key.replace(/([A-Z])/g, '-$1').toLowerCase(), String(value));
1752
+ }
1753
+ if (dataset) for (const [key, value] of Object.entries(dataset))element.dataset[key] = value;
1754
+ if (text) element.textContent = text;
1755
+ if (html) element.innerHTML = html;
1756
+ if (children) {
1757
+ for (const child of children)if (null != child) if ('string' == typeof child) element.appendChild(document.createTextNode(child));
1758
+ else element.appendChild(child);
1759
+ }
1760
+ if (void 0 !== attrs.ariaLabel) element.setAttribute('aria-label', attrs.ariaLabel);
1761
+ if (void 0 !== attrs.ariaExpanded) element.setAttribute('aria-expanded', attrs.ariaExpanded);
1762
+ if (void 0 !== attrs.ariaHidden) element.setAttribute('aria-hidden', attrs.ariaHidden);
1763
+ if (void 0 !== attrs.ariaSelected) element.setAttribute('aria-selected', attrs.ariaSelected);
1764
+ if (void 0 !== attrs.ariaControls) element.setAttribute('aria-controls', attrs.ariaControls);
1765
+ if (void 0 !== attrs.ariaChecked) element.setAttribute('aria-checked', attrs.ariaChecked);
1766
+ for (const [key, value] of Object.entries(attrs))if (void 0 !== value && !key.startsWith('aria')) if ('boolean' == typeof value) {
1767
+ if (value) element.setAttribute(key, '');
1768
+ } else element.setAttribute(key, String(value));
1769
+ if (onClick) element.addEventListener('click', onClick);
1770
+ if (onMouseEnter) element.addEventListener('mouseenter', onMouseEnter);
1771
+ if (onMouseLeave) element.addEventListener('mouseleave', onMouseLeave);
1772
+ if (onKeyDown) element.addEventListener('keydown', onKeyDown);
1773
+ if (onKeyUp) element.addEventListener('keyup', onKeyUp);
1774
+ if (onFocus) element.addEventListener('focus', onFocus);
1775
+ if (onBlur) element.addEventListener('blur', onBlur);
1776
+ if (onChange) element.addEventListener('change', onChange);
1777
+ if (onInput) element.addEventListener('input', onInput);
1778
+ if (onAnimationEnd) element.addEventListener('animationend', onAnimationEnd);
1779
+ if (onTransitionEnd) element.addEventListener('transitionend', onTransitionEnd);
1780
+ return element;
1781
+ }
1782
+ function renderer_div(options = {}) {
1783
+ return createElement({
1784
+ ...options,
1785
+ tag: 'div'
1786
+ });
1787
+ }
1788
+ function renderer_button(options = {}) {
1789
+ return createElement({
1790
+ ...options,
1791
+ tag: 'button',
1792
+ type: options.type ?? 'button'
1793
+ });
1794
+ }
1795
+ function span(options = {}) {
1796
+ return createElement({
1797
+ ...options,
1798
+ tag: 'span'
1799
+ });
1800
+ }
1801
+ function input(options = {}) {
1802
+ return createElement({
1803
+ ...options,
1804
+ tag: 'input'
1805
+ });
1806
+ }
1807
+ function renderer_select(options = {}) {
1808
+ const { options: selectOptions, selectedValue, ...rest } = options;
1809
+ const selectElement = createElement({
1810
+ ...rest,
1811
+ tag: 'select'
1812
+ });
1813
+ if (selectOptions) for (const opt of selectOptions){
1814
+ const optionElement = document.createElement('option');
1815
+ optionElement.value = opt.value;
1816
+ optionElement.textContent = opt.label;
1817
+ if (selectedValue === opt.value) optionElement.selected = true;
1818
+ selectElement.appendChild(optionElement);
1819
+ }
1820
+ return selectElement;
1821
+ }
1822
+ function createSvgElement(svgContent, options = {}) {
1823
+ const { className, ariaHidden = true, width = 24, height = 24 } = options;
1824
+ const wrapper = document.createElement('div');
1825
+ wrapper.innerHTML = svgContent.trim();
1826
+ const svg = wrapper.firstElementChild;
1827
+ if (svg) {
1828
+ if (className) svg.setAttribute('class', className);
1829
+ if (ariaHidden) svg.setAttribute('aria-hidden', 'true');
1830
+ svg.setAttribute('width', String(width));
1831
+ svg.setAttribute('height', String(height));
1832
+ }
1833
+ return svg;
1834
+ }
1835
+ function clearElement(element) {
1836
+ while(element.firstChild)element.removeChild(element.firstChild);
1837
+ }
1838
+ function createPortal(element) {
1839
+ document.body.appendChild(element);
1840
+ return ()=>{
1841
+ if (element.parentNode) element.parentNode.removeChild(element);
1842
+ };
1843
+ }
1844
+ var injectStylesIntoStyleTag = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/injectStylesIntoStyleTag.js");
1845
+ var injectStylesIntoStyleTag_default = /*#__PURE__*/ __webpack_require__.n(injectStylesIntoStyleTag);
1846
+ var styleDomAPI = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/styleDomAPI.js");
1847
+ var styleDomAPI_default = /*#__PURE__*/ __webpack_require__.n(styleDomAPI);
1848
+ var insertBySelector = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/insertBySelector.js");
1849
+ var insertBySelector_default = /*#__PURE__*/ __webpack_require__.n(insertBySelector);
1850
+ var setAttributesWithoutAttributes = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/setAttributesWithoutAttributes.js");
1851
+ var setAttributesWithoutAttributes_default = /*#__PURE__*/ __webpack_require__.n(setAttributesWithoutAttributes);
1852
+ var insertStyleElement = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/insertStyleElement.js");
1853
+ var insertStyleElement_default = /*#__PURE__*/ __webpack_require__.n(insertStyleElement);
1854
+ var styleTagTransform = __webpack_require__("../../node_modules/.bun/@rsbuild+core@1.6.12/node_modules/@rsbuild/core/compiled/style-loader/runtime/styleTagTransform.js");
1855
+ var styleTagTransform_default = /*#__PURE__*/ __webpack_require__.n(styleTagTransform);
1856
+ 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");
1857
+ var animations_module_options = {};
1858
+ animations_module_options.styleTagTransform = styleTagTransform_default();
1859
+ animations_module_options.setAttributes = setAttributesWithoutAttributes_default();
1860
+ animations_module_options.insert = insertBySelector_default().bind(null, "head");
1861
+ animations_module_options.domAPI = styleDomAPI_default();
1862
+ animations_module_options.insertStyleElement = insertStyleElement_default();
1863
+ injectStylesIntoStyleTag_default()(animations_module.A, animations_module_options);
1864
+ const styles_animations_module = animations_module.A && animations_module.A.locals ? animations_module.A.locals : void 0;
1865
+ 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");
1866
+ var panel_module_options = {};
1867
+ panel_module_options.styleTagTransform = styleTagTransform_default();
1868
+ panel_module_options.setAttributes = setAttributesWithoutAttributes_default();
1869
+ panel_module_options.insert = insertBySelector_default().bind(null, "head");
1870
+ panel_module_options.domAPI = styleDomAPI_default();
1871
+ panel_module_options.insertStyleElement = insertStyleElement_default();
1872
+ injectStylesIntoStyleTag_default()(panel_module.A, panel_module_options);
1873
+ const styles_panel_module = panel_module.A && panel_module.A.locals ? panel_module.A.locals : void 0;
1874
+ const PREFERENCE_TRIGGER_SELECTORS = '[data-c15t-trigger], [aria-label*="privacy settings"], [aria-label*="preference"]';
1875
+ function detectPreferenceTrigger() {
1876
+ const triggers = document.querySelectorAll(PREFERENCE_TRIGGER_SELECTORS);
1877
+ return triggers.length > 0;
1878
+ }
1879
+ function getPreferenceTriggerElements() {
1880
+ return document.querySelectorAll(PREFERENCE_TRIGGER_SELECTORS);
1881
+ }
1882
+ function setPreferenceTriggerVisibility(visible) {
1883
+ const elements = getPreferenceTriggerElements();
1884
+ for (const el of elements)el.style.display = visible ? '' : 'none';
1885
+ }
1886
+ function getPreferenceCenterOpener() {
1887
+ const win = window;
1888
+ const store = win.c15tStore;
1889
+ if (store && 'function' == typeof store.getState) {
1890
+ const state = store.getState();
1891
+ if ('function' == typeof state.setActiveUI) return ()=>{
1892
+ state.setActiveUI('dialog');
1893
+ };
1894
+ }
1895
+ return null;
1896
+ }
1897
+ const DEVTOOLS_ICON = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 446 445" aria-label="c15t">
1898
+ <path fill="currentColor" d="M223.178.313c39.064 0 70.732 31.668 70.732 70.732-.001 39.064-31.668 70.731-70.732 70.731-12.181 0-23.642-3.079-33.649-8.502l-55.689 55.689a70.267 70.267 0 0 1 5.574 13.441h167.531c8.695-29.217 35.762-50.523 67.804-50.523 39.064 0 70.731 31.668 70.731 70.732s-31.668 70.732-70.731 70.732c-32.042 0-59.108-21.306-67.803-50.523H139.413a70.417 70.417 0 0 1-7.888 17.396l54.046 54.046c10.893-6.851 23.786-10.815 37.605-10.815 39.064 0 70.732 31.669 70.732 70.733 0 39.064-31.668 70.731-70.732 70.731s-70.732-31.667-70.732-70.731c0-10.518 2.296-20.499 6.414-29.471l-57.78-57.78c-8.972 4.117-18.952 6.414-29.47 6.414-39.063 0-70.731-31.668-70.732-70.732 0-39.064 31.669-70.732 70.733-70.732 12.18 0 23.642 3.079 33.649 8.502l55.688-55.688c-5.423-10.007-8.502-21.469-8.502-33.65 0-39.064 31.668-70.733 70.732-70.733Zm0 343.555c-16.742 0-30.314 13.572-30.314 30.314 0 16.741 13.572 30.313 30.314 30.313s30.314-13.572 30.314-30.313c0-16.742-13.572-30.314-30.314-30.314ZM71.611 192.299c-16.742 0-30.315 13.572-30.315 30.314s13.573 30.314 30.315 30.314c16.741 0 30.313-13.572 30.313-30.314 0-16.741-13.572-30.314-30.313-30.314Zm303.138 0c-16.729 0-30.294 13.551-30.315 30.275l.001.039-.001.038c.021 16.725 13.586 30.276 30.315 30.276 16.741 0 30.313-13.572 30.313-30.314 0-16.741-13.572-30.314-30.313-30.314ZM223.178 40.73c-16.742 0-30.314 13.573-30.314 30.315s13.573 30.313 30.314 30.313c16.742 0 30.313-13.572 30.314-30.313 0-16.742-13.572-30.314-30.314-30.315Z"/>
1899
+ </svg>`;
1900
+ const PREFERENCES_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">
1901
+ <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"/>
1902
+ <circle cx="12" cy="12" r="3"/>
1903
+ </svg>`;
1904
+ const 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">
1905
+ <path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"/>
1906
+ <circle cx="12" cy="12" r="3"/>
1907
+ </svg>`;
1908
+ function getMenuPositionClass(position) {
1909
+ switch(position){
1910
+ case 'bottom-left':
1911
+ return styles_panel_module.dropdownMenuBottomLeft ?? '';
1912
+ case 'bottom-right':
1913
+ return styles_panel_module.dropdownMenuBottomRight ?? '';
1914
+ case 'top-left':
1915
+ return styles_panel_module.dropdownMenuTopLeft ?? '';
1916
+ case 'top-right':
1917
+ return styles_panel_module.dropdownMenuTopRight ?? '';
1918
+ }
1919
+ }
1920
+ function createDropdownMenu(options) {
1921
+ const { items, onOpen, onClose } = options;
1922
+ let isMenuOpen = false;
1923
+ let currentPosition = options.position;
1924
+ let referenceElement = options.referenceElement;
1925
+ const menu = renderer_div({
1926
+ className: `${styles_panel_module.dropdownMenu ?? ''} ${getMenuPositionClass(currentPosition)}`,
1927
+ role: 'menu',
1928
+ ariaLabel: 'c15t Options'
1929
+ });
1930
+ menu.dataset.state = 'closed';
1931
+ function positionMenu() {
1932
+ if (!referenceElement) return;
1933
+ const rect = referenceElement.getBoundingClientRect();
1934
+ menu.getBoundingClientRect();
1935
+ const gap = 8;
1936
+ if (currentPosition.includes('bottom')) {
1937
+ menu.style.bottom = `${window.innerHeight - rect.top + gap}px`;
1938
+ menu.style.top = '';
1939
+ } else {
1940
+ menu.style.top = `${rect.bottom + gap}px`;
1941
+ menu.style.bottom = '';
1942
+ }
1943
+ if (currentPosition.includes('left')) {
1944
+ menu.style.left = `${rect.left}px`;
1945
+ menu.style.right = '';
1946
+ } else {
1947
+ menu.style.right = `${window.innerWidth - rect.right}px`;
1948
+ menu.style.left = '';
1949
+ }
1950
+ }
1951
+ const menuItemElements = new Map();
1952
+ for (const item of items){
1953
+ const isToggle = 'toggle' === item.type;
1954
+ const menuItem = renderer_button({
1955
+ className: styles_panel_module.menuItem ?? '',
1956
+ role: isToggle ? 'menuitemcheckbox' : 'menuitem',
1957
+ onClick: ()=>{
1958
+ item.onClick();
1959
+ if (!isToggle) close();
1960
+ }
1961
+ });
1962
+ if (isToggle) menuItem.setAttribute('aria-checked', item.checked ? 'true' : 'false');
1963
+ if (item.icon) {
1964
+ const iconWrapper = renderer_div({
1965
+ className: styles_panel_module.menuItemIcon ?? ''
1966
+ });
1967
+ const iconSvg = createSvgElement(item.icon, {
1968
+ width: 20,
1969
+ height: 20
1970
+ });
1971
+ iconWrapper.appendChild(iconSvg);
1972
+ menuItem.appendChild(iconWrapper);
1973
+ }
1974
+ const labelContainer = renderer_div({
1975
+ className: styles_panel_module.menuItemContent ?? ''
1976
+ });
1977
+ const label = span({
1978
+ className: styles_panel_module.menuItemLabel ?? '',
1979
+ text: item.label
1980
+ });
1981
+ labelContainer.appendChild(label);
1982
+ if (item.description) {
1983
+ const description = renderer_div({
1984
+ className: styles_panel_module.menuItemDescription ?? '',
1985
+ text: item.description
1986
+ });
1987
+ labelContainer.appendChild(description);
1988
+ }
1989
+ menuItem.appendChild(labelContainer);
1990
+ let toggleIndicator;
1991
+ if (isToggle) {
1992
+ toggleIndicator = renderer_div({
1993
+ className: [
1994
+ styles_panel_module.menuItemToggle ?? '',
1995
+ item.checked ? styles_panel_module.menuItemToggleChecked ?? '' : ''
1996
+ ].filter(Boolean).join(' ')
1997
+ });
1998
+ const toggleTrack = renderer_div({
1999
+ className: styles_panel_module.menuItemToggleTrack ?? ''
2000
+ });
2001
+ const toggleThumb = renderer_div({
2002
+ className: styles_panel_module.menuItemToggleThumb ?? ''
2003
+ });
2004
+ toggleTrack.appendChild(toggleThumb);
2005
+ toggleIndicator.appendChild(toggleTrack);
2006
+ menuItem.appendChild(toggleIndicator);
2007
+ }
2008
+ menu.appendChild(menuItem);
2009
+ menuItemElements.set(item.id, {
2010
+ element: menuItem,
2011
+ toggleIndicator
2012
+ });
2013
+ }
2014
+ function handleClickOutside(e) {
2015
+ if (!menu.contains(e.target)) close();
2016
+ }
2017
+ function handleKeydown(e) {
2018
+ if ('Escape' === e.key) close();
2019
+ }
2020
+ function open() {
2021
+ if (isMenuOpen) return;
2022
+ isMenuOpen = true;
2023
+ positionMenu();
2024
+ menu.dataset.state = 'open';
2025
+ onOpen?.();
2026
+ setTimeout(()=>{
2027
+ document.addEventListener('click', handleClickOutside);
2028
+ document.addEventListener('keydown', handleKeydown);
2029
+ }, 10);
2030
+ }
2031
+ function close() {
2032
+ if (!isMenuOpen) return;
2033
+ isMenuOpen = false;
2034
+ menu.dataset.state = 'closed';
2035
+ onClose?.();
2036
+ document.removeEventListener('click', handleClickOutside);
2037
+ document.removeEventListener('keydown', handleKeydown);
2038
+ }
2039
+ function toggle() {
2040
+ if (isMenuOpen) close();
2041
+ else open();
2042
+ }
2043
+ function updatePosition(position) {
2044
+ menu.classList.remove(styles_panel_module.dropdownMenuBottomLeft ?? '', styles_panel_module.dropdownMenuBottomRight ?? '', styles_panel_module.dropdownMenuTopLeft ?? '', styles_panel_module.dropdownMenuTopRight ?? '');
2045
+ menu.classList.add(getMenuPositionClass(position));
2046
+ currentPosition = position;
2047
+ if (isMenuOpen) positionMenu();
2048
+ }
2049
+ function setReferenceElement(element) {
2050
+ referenceElement = element;
2051
+ }
2052
+ function destroy() {
2053
+ close();
2054
+ }
2055
+ function updateItemChecked(itemId, checked) {
2056
+ const itemData = menuItemElements.get(itemId);
2057
+ if (!itemData) return;
2058
+ const { element, toggleIndicator } = itemData;
2059
+ element.setAttribute('aria-checked', checked ? 'true' : 'false');
2060
+ if (toggleIndicator) if (checked) toggleIndicator.classList.add(styles_panel_module.menuItemToggleChecked ?? '');
2061
+ else toggleIndicator.classList.remove(styles_panel_module.menuItemToggleChecked ?? '');
2062
+ }
2063
+ return {
2064
+ element: menu,
2065
+ isOpen: ()=>isMenuOpen,
2066
+ open,
2067
+ close,
2068
+ toggle,
2069
+ updatePosition,
2070
+ setReferenceElement,
2071
+ updateItemChecked,
2072
+ destroy
2073
+ };
2074
+ }
2075
+ const LOGO_ICON = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 446 445" aria-label="c15t">
2076
+ <path fill="currentColor" d="M223.178.313c39.064 0 70.732 31.668 70.732 70.732-.001 39.064-31.668 70.731-70.732 70.731-12.181 0-23.642-3.079-33.649-8.502l-55.689 55.689a70.267 70.267 0 0 1 5.574 13.441h167.531c8.695-29.217 35.762-50.523 67.804-50.523 39.064 0 70.731 31.668 70.731 70.732s-31.668 70.732-70.731 70.732c-32.042 0-59.108-21.306-67.803-50.523H139.413a70.417 70.417 0 0 1-7.888 17.396l54.046 54.046c10.893-6.851 23.786-10.815 37.605-10.815 39.064 0 70.732 31.669 70.732 70.733 0 39.064-31.668 70.731-70.732 70.731s-70.732-31.667-70.732-70.731c0-10.518 2.296-20.499 6.414-29.471l-57.78-57.78c-8.972 4.117-18.952 6.414-29.47 6.414-39.063 0-70.731-31.668-70.732-70.732 0-39.064 31.669-70.732 70.733-70.732 12.18 0 23.642 3.079 33.649 8.502l55.688-55.688c-5.423-10.007-8.502-21.469-8.502-33.65 0-39.064 31.668-70.733 70.732-70.733Zm0 343.555c-16.742 0-30.314 13.572-30.314 30.314 0 16.741 13.572 30.313 30.314 30.313s30.314-13.572 30.314-30.313c0-16.742-13.572-30.314-30.314-30.314ZM71.611 192.299c-16.742 0-30.315 13.572-30.315 30.314s13.573 30.314 30.315 30.314c16.741 0 30.313-13.572 30.313-30.314 0-16.741-13.572-30.314-30.313-30.314Zm303.138 0c-16.729 0-30.294 13.551-30.315 30.275l.001.039-.001.038c.021 16.725 13.586 30.276 30.315 30.276 16.741 0 30.313-13.572 30.313-30.314 0-16.741-13.572-30.314-30.313-30.314ZM223.178 40.73c-16.742 0-30.314 13.573-30.314 30.315s13.573 30.313 30.314 30.313c16.742 0 30.313-13.572 30.314-30.313 0-16.742-13.572-30.314-30.314-30.315Z"/>
2077
+ </svg>`;
2078
+ const CLOSE_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">
2079
+ <line x1="18" y1="6" x2="6" y2="18"></line>
2080
+ <line x1="6" y1="6" x2="18" y2="18"></line>
2081
+ </svg>`;
2082
+ const WARNING_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">
2083
+ <path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"></path>
2084
+ <line x1="12" y1="9" x2="12" y2="13"></line>
2085
+ <line x1="12" y1="17" x2="12.01" y2="17"></line>
2086
+ </svg>`;
2087
+ function getPositionClass(position) {
2088
+ switch(position){
2089
+ case 'bottom-right':
2090
+ return styles_panel_module.positionBottomRight ?? '';
2091
+ case 'bottom-left':
2092
+ return styles_panel_module.positionBottomLeft ?? '';
2093
+ case 'top-right':
2094
+ return styles_panel_module.positionTopRight ?? '';
2095
+ case 'top-left':
2096
+ return styles_panel_module.positionTopLeft ?? '';
2097
+ }
2098
+ }
2099
+ function createPanel(options) {
2100
+ const { stateManager, storeConnector, onRenderContent, enableUnifiedMode = true } = options;
2101
+ let removePortal = null;
2102
+ let isAnimatingOut = false;
2103
+ let draggable = null;
2104
+ let dropdownMenu = null;
2105
+ let hasPreferenceTrigger = false;
2106
+ let useUnifiedMode = false;
2107
+ let preferenceTriggerVisible = false;
2108
+ function updatePreferenceTriggerVisibility(visible) {
2109
+ preferenceTriggerVisible = visible;
2110
+ setPreferenceTriggerVisibility(visible);
2111
+ if (dropdownMenu) dropdownMenu.updateItemChecked('toggle-trigger', visible);
2112
+ }
2113
+ const container = renderer_div({
2114
+ className: styles_panel_module.container,
2115
+ dataset: {
2116
+ c15tDevtools: 'true'
2117
+ }
2118
+ });
2119
+ const floatingButton = renderer_button({
2120
+ className: styles_panel_module.floatingButton ?? '',
2121
+ ariaLabel: 'Open c15t Options'
2122
+ });
2123
+ function checkUnifiedMode() {
2124
+ if (!enableUnifiedMode) {
2125
+ useUnifiedMode = false;
2126
+ return;
2127
+ }
2128
+ hasPreferenceTrigger = detectPreferenceTrigger();
2129
+ const preferenceCenterOpener = getPreferenceCenterOpener();
2130
+ useUnifiedMode = hasPreferenceTrigger && null !== preferenceCenterOpener;
2131
+ if (useUnifiedMode && !dropdownMenu) {
2132
+ dropdownMenu = createDropdownMenu({
2133
+ items: [
2134
+ {
2135
+ id: 'devtools',
2136
+ label: 'DevTools',
2137
+ description: 'View and manage consents',
2138
+ icon: DEVTOOLS_ICON,
2139
+ onClick: ()=>{
2140
+ stateManager.setOpen(true);
2141
+ }
2142
+ },
2143
+ {
2144
+ id: 'preferences',
2145
+ label: 'Preferences',
2146
+ description: 'Open privacy settings',
2147
+ icon: PREFERENCES_ICON,
2148
+ onClick: ()=>{
2149
+ const opener = getPreferenceCenterOpener();
2150
+ if (opener) opener();
2151
+ }
2152
+ },
2153
+ {
2154
+ id: 'toggle-trigger',
2155
+ label: 'Show Trigger',
2156
+ description: 'Show preference button',
2157
+ icon: EYE_ICON,
2158
+ type: 'toggle',
2159
+ checked: preferenceTriggerVisible,
2160
+ onClick: ()=>{
2161
+ updatePreferenceTriggerVisibility(!preferenceTriggerVisible);
2162
+ }
2163
+ }
2164
+ ],
2165
+ position: draggable?.getCorner() ?? stateManager.getState().position,
2166
+ referenceElement: floatingButton,
2167
+ onOpen: ()=>{
2168
+ floatingButton.ariaLabel = 'Close c15t Options';
2169
+ },
2170
+ onClose: ()=>{
2171
+ floatingButton.ariaLabel = 'Open c15t Options';
2172
+ }
2173
+ });
2174
+ container.appendChild(dropdownMenu.element);
2175
+ updatePreferenceTriggerVisibility(false);
2176
+ }
2177
+ floatingButton.ariaLabel = useUnifiedMode ? 'Open c15t Options' : 'Open c15t DevTools';
2178
+ }
2179
+ draggable = createDraggable({
2180
+ defaultPosition: stateManager.getState().position,
2181
+ persistPosition: true,
2182
+ onPositionChange: (position)=>{
2183
+ stateManager.setPosition(position);
2184
+ if (dropdownMenu) dropdownMenu.updatePosition(position);
2185
+ },
2186
+ onDragEnd: (wasDragged)=>{
2187
+ if (!wasDragged) if (useUnifiedMode && dropdownMenu) dropdownMenu.toggle();
2188
+ else stateManager.toggle();
2189
+ }
2190
+ });
2191
+ const iconWrapper = renderer_div({
2192
+ className: styles_panel_module.floatingButtonIcon
2193
+ });
2194
+ const logoSvg = createSvgElement(LOGO_ICON, {
2195
+ width: 24,
2196
+ height: 24
2197
+ });
2198
+ iconWrapper.appendChild(logoSvg);
2199
+ floatingButton.appendChild(iconWrapper);
2200
+ draggable.attach(floatingButton);
2201
+ setTimeout(checkUnifiedMode, 100);
2202
+ let panelElement = null;
2203
+ let backdropElement = null;
2204
+ let contentContainer = null;
2205
+ function createPanelElement() {
2206
+ const corner = draggable?.getCorner() ?? stateManager.getState().position;
2207
+ const positionClass = getPositionClass(corner);
2208
+ const panel = renderer_div({
2209
+ className: `${styles_panel_module.panel} ${positionClass} ${styles_animations_module.animateEnter}`,
2210
+ role: 'dialog',
2211
+ ariaLabel: 'c15t DevTools'
2212
+ });
2213
+ const header = renderer_div({
2214
+ className: styles_panel_module.header,
2215
+ children: [
2216
+ renderer_div({
2217
+ className: styles_panel_module.headerTitle,
2218
+ children: [
2219
+ (()=>{
2220
+ const logoWrapper = renderer_div({
2221
+ className: styles_panel_module.headerLogo
2222
+ });
2223
+ logoWrapper.appendChild(createSvgElement(LOGO_ICON, {
2224
+ width: 20,
2225
+ height: 20
2226
+ }));
2227
+ return logoWrapper;
2228
+ })(),
2229
+ span({
2230
+ text: 'c15t DevTools'
2231
+ })
2232
+ ]
2233
+ }),
2234
+ renderer_button({
2235
+ className: styles_panel_module.closeButton,
2236
+ ariaLabel: 'Close DevTools',
2237
+ onClick: ()=>closePanel(),
2238
+ children: [
2239
+ (()=>{
2240
+ const iconWrap = renderer_div({
2241
+ className: styles_panel_module.closeButtonIcon
2242
+ });
2243
+ iconWrap.appendChild(createSvgElement(CLOSE_ICON, {
2244
+ width: 16,
2245
+ height: 16
2246
+ }));
2247
+ return iconWrap;
2248
+ })()
2249
+ ]
2250
+ })
2251
+ ]
2252
+ });
2253
+ contentContainer = renderer_div({
2254
+ className: styles_panel_module.content
2255
+ });
2256
+ const isConnected = storeConnector.isConnected();
2257
+ const footer = renderer_div({
2258
+ className: styles_panel_module.footer,
2259
+ children: [
2260
+ renderer_div({
2261
+ className: styles_panel_module.footerStatus,
2262
+ children: [
2263
+ span({
2264
+ className: `${styles_panel_module.statusDot} ${isConnected ? styles_panel_module.statusConnected : styles_panel_module.statusDisconnected}`
2265
+ }),
2266
+ span({
2267
+ text: isConnected ? 'Connected' : 'Disconnected'
2268
+ })
2269
+ ]
2270
+ }),
2271
+ span({
2272
+ text: 'v1.8.3'
2273
+ })
2274
+ ]
2275
+ });
2276
+ panel.appendChild(header);
2277
+ panel.appendChild(contentContainer);
2278
+ panel.appendChild(footer);
2279
+ if (isConnected) onRenderContent(contentContainer);
2280
+ else renderErrorState(contentContainer);
2281
+ return panel;
2282
+ }
2283
+ function renderErrorState(container) {
2284
+ clearElement(container);
2285
+ const errorState = renderer_div({
2286
+ className: styles_panel_module.errorState,
2287
+ children: [
2288
+ (()=>{
2289
+ const iconWrap = renderer_div({
2290
+ className: styles_panel_module.errorIcon
2291
+ });
2292
+ iconWrap.appendChild(createSvgElement(WARNING_ICON, {
2293
+ width: 48,
2294
+ height: 48
2295
+ }));
2296
+ return iconWrap;
2297
+ })(),
2298
+ renderer_div({
2299
+ className: styles_panel_module.errorTitle,
2300
+ text: 'Store Not Found'
2301
+ }),
2302
+ renderer_div({
2303
+ className: styles_panel_module.errorMessage,
2304
+ text: 'c15t consent manager is not initialized. Make sure you have set up the ConsentManagerProvider in your app.'
2305
+ })
2306
+ ]
2307
+ });
2308
+ container.appendChild(errorState);
2309
+ }
2310
+ function openPanel() {
2311
+ if (panelElement || isAnimatingOut) return;
2312
+ floatingButton.style.display = 'none';
2313
+ backdropElement = renderer_div({
2314
+ className: `${styles_panel_module.backdrop} ${styles_animations_module.animateFadeIn}`,
2315
+ onClick: ()=>closePanel()
2316
+ });
2317
+ panelElement = createPanelElement();
2318
+ container.appendChild(backdropElement);
2319
+ container.appendChild(panelElement);
2320
+ }
2321
+ function closePanel() {
2322
+ if (!panelElement || isAnimatingOut) return;
2323
+ isAnimatingOut = true;
2324
+ if (backdropElement) {
2325
+ if (styles_animations_module.animateFadeIn) backdropElement.classList.remove(styles_animations_module.animateFadeIn);
2326
+ if (styles_animations_module.animateFadeOut) backdropElement.classList.add(styles_animations_module.animateFadeOut);
2327
+ }
2328
+ if (styles_animations_module.animateEnter) panelElement.classList.remove(styles_animations_module.animateEnter);
2329
+ if (styles_animations_module.animateExit) panelElement.classList.add(styles_animations_module.animateExit);
2330
+ panelElement.addEventListener('animationend', ()=>{
2331
+ if (backdropElement) {
2332
+ backdropElement.remove();
2333
+ backdropElement = null;
2334
+ }
2335
+ if (panelElement) {
2336
+ panelElement.remove();
2337
+ panelElement = null;
2338
+ }
2339
+ contentContainer = null;
2340
+ isAnimatingOut = false;
2341
+ floatingButton.style.display = '';
2342
+ stateManager.setOpen(false);
2343
+ }, {
2344
+ once: true
2345
+ });
2346
+ }
2347
+ function update() {
2348
+ const state = stateManager.getState();
2349
+ if (!state.isOpen || panelElement || isAnimatingOut) {
2350
+ if (!state.isOpen && panelElement && !isAnimatingOut) closePanel();
2351
+ } else openPanel();
2352
+ if (contentContainer && storeConnector.isConnected()) onRenderContent(contentContainer);
2353
+ }
2354
+ const unsubscribeState = stateManager.subscribe(()=>{
2355
+ update();
2356
+ });
2357
+ const unsubscribeStore = storeConnector.subscribe(()=>{
2358
+ if (contentContainer) if (storeConnector.isConnected()) onRenderContent(contentContainer);
2359
+ else renderErrorState(contentContainer);
2360
+ });
2361
+ container.appendChild(floatingButton);
2362
+ removePortal = createPortal(container);
2363
+ return {
2364
+ element: container,
2365
+ floatingButton,
2366
+ update,
2367
+ destroy: ()=>{
2368
+ unsubscribeState();
2369
+ unsubscribeStore();
2370
+ if (dropdownMenu) {
2371
+ dropdownMenu.destroy();
2372
+ dropdownMenu = null;
2373
+ }
2374
+ if (draggable) {
2375
+ draggable.destroy();
2376
+ draggable = null;
2377
+ }
2378
+ if (removePortal) {
2379
+ removePortal();
2380
+ removePortal = null;
2381
+ }
2382
+ }
2383
+ };
2384
+ }
2385
+ 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");
2386
+ var tabs_module_options = {};
2387
+ tabs_module_options.styleTagTransform = styleTagTransform_default();
2388
+ tabs_module_options.setAttributes = setAttributesWithoutAttributes_default();
2389
+ tabs_module_options.insert = insertBySelector_default().bind(null, "head");
2390
+ tabs_module_options.domAPI = styleDomAPI_default();
2391
+ tabs_module_options.insertStyleElement = insertStyleElement_default();
2392
+ injectStylesIntoStyleTag_default()(tabs_module.A, tabs_module_options);
2393
+ const styles_tabs_module = tabs_module.A && tabs_module.A.locals ? tabs_module.A.locals : void 0;
2394
+ 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">
2395
+ <rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect>
2396
+ <path d="M7 11V7a5 5 0 0 1 10 0v4"></path>
2397
+ </svg>`;
2398
+ 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">
2399
+ <circle cx="12" cy="12" r="10"></circle>
2400
+ <line x1="2" y1="12" x2="22" y2="12"></line>
2401
+ <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>
2402
+ </svg>`;
2403
+ 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">
2404
+ <polyline points="16 18 22 12 16 6"></polyline>
2405
+ <polyline points="8 6 2 12 8 18"></polyline>
2406
+ </svg>`;
2407
+ 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">
2408
+ <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>
2409
+ <circle cx="12" cy="12" r="3"></circle>
2410
+ </svg>`;
2411
+ 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">
2412
+ <path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path>
2413
+ <path d="m9 12 2 2 4-4"></path>
2414
+ </svg>`;
2415
+ 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">
2416
+ <path d="M12 20h9"></path>
2417
+ <path d="M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z"></path>
2418
+ </svg>`;
2419
+ const TABS = [
2420
+ {
2421
+ id: 'location',
2422
+ label: 'Location',
2423
+ icon: LOCATION_ICON
2424
+ },
2425
+ {
2426
+ id: 'consents',
2427
+ label: 'Consents',
2428
+ icon: CONSENTS_ICON
2429
+ },
2430
+ {
2431
+ id: "scripts",
2432
+ label: 'Scripts',
2433
+ icon: SCRIPTS_ICON
2434
+ },
2435
+ {
2436
+ id: 'iab',
2437
+ label: 'IAB',
2438
+ icon: IAB_ICON
2439
+ },
2440
+ {
2441
+ id: 'actions',
2442
+ label: 'Actions',
2443
+ icon: ACTIONS_ICON
2444
+ },
2445
+ {
2446
+ id: 'events',
2447
+ label: 'Events',
2448
+ icon: EVENTS_ICON
2449
+ }
2450
+ ];
2451
+ function tabs_createTabs(options) {
2452
+ const { onTabChange, disabledTabs = [] } = options;
2453
+ let activeTab = options.activeTab;
2454
+ const tabButtons = new Map();
2455
+ const tabList = renderer_div({
2456
+ className: styles_tabs_module.tabList,
2457
+ role: 'tablist',
2458
+ ariaLabel: 'DevTools tabs'
2459
+ });
2460
+ for (const tab of TABS){
2461
+ const isActive = tab.id === activeTab;
2462
+ const isDisabled = disabledTabs.includes(tab.id);
2463
+ const tabButton = renderer_button({
2464
+ className: `${styles_tabs_module.tab} ${isActive ? styles_tabs_module.tabActive : ''} ${isDisabled ? styles_tabs_module.tabDisabled : ''}`,
2465
+ role: 'tab',
2466
+ ariaSelected: isActive ? 'true' : 'false',
2467
+ ariaControls: `panel-${tab.id}`,
2468
+ ariaDisabled: isDisabled ? 'true' : void 0,
2469
+ tabIndex: isActive ? 0 : -1,
2470
+ disabled: isDisabled,
2471
+ onClick: ()=>{
2472
+ if (!isDisabled) {
2473
+ setActiveTab(tab.id);
2474
+ onTabChange(tab.id);
2475
+ }
2476
+ },
2477
+ onKeyDown: (e)=>handleKeyDown(e, tab.id)
2478
+ });
2479
+ const iconWrapper = renderer_div({
2480
+ className: styles_tabs_module.tabIcon
2481
+ });
2482
+ iconWrapper.appendChild(createSvgElement(tab.icon, {
2483
+ width: 14,
2484
+ height: 14
2485
+ }));
2486
+ tabButton.appendChild(iconWrapper);
2487
+ tabButton.appendChild(document.createTextNode(tab.label));
2488
+ tabButtons.set(tab.id, tabButton);
2489
+ tabList.appendChild(tabButton);
2490
+ }
2491
+ function handleKeyDown(e, currentTab) {
2492
+ const tabIds = TABS.map((t)=>t.id);
2493
+ const enabledTabIds = tabIds.filter((id)=>!disabledTabs.includes(id));
2494
+ const currentIndex = enabledTabIds.indexOf(currentTab);
2495
+ let newIndex = currentIndex;
2496
+ switch(e.key){
2497
+ case 'ArrowLeft':
2498
+ newIndex = currentIndex > 0 ? currentIndex - 1 : enabledTabIds.length - 1;
2499
+ break;
2500
+ case 'ArrowRight':
2501
+ newIndex = currentIndex < enabledTabIds.length - 1 ? currentIndex + 1 : 0;
2502
+ break;
2503
+ case 'Home':
2504
+ newIndex = 0;
2505
+ break;
2506
+ case 'End':
2507
+ newIndex = enabledTabIds.length - 1;
2508
+ break;
2509
+ default:
2510
+ return;
2511
+ }
2512
+ e.preventDefault();
2513
+ const newTab = enabledTabIds[newIndex];
2514
+ if (newTab) {
2515
+ setActiveTab(newTab);
2516
+ onTabChange(newTab);
2517
+ tabButtons.get(newTab)?.focus();
2518
+ }
2519
+ }
2520
+ function setActiveTab(tab) {
2521
+ activeTab = tab;
2522
+ for (const [tabId, tabButton] of tabButtons){
2523
+ const isActive = tabId === tab;
2524
+ if (styles_tabs_module.tabActive) tabButton.classList.toggle(styles_tabs_module.tabActive, isActive);
2525
+ tabButton.setAttribute('aria-selected', isActive ? 'true' : 'false');
2526
+ tabButton.tabIndex = isActive ? 0 : -1;
2527
+ }
2528
+ }
2529
+ return {
2530
+ element: tabList,
2531
+ setActiveTab,
2532
+ destroy: ()=>{
2533
+ tabButtons.clear();
2534
+ }
2535
+ };
2536
+ }
2537
+ 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");
2538
+ var components_module_options = {};
2539
+ components_module_options.styleTagTransform = styleTagTransform_default();
2540
+ components_module_options.setAttributes = setAttributesWithoutAttributes_default();
2541
+ components_module_options.insert = insertBySelector_default().bind(null, "head");
2542
+ components_module_options.domAPI = styleDomAPI_default();
2543
+ components_module_options.insertStyleElement = insertStyleElement_default();
2544
+ injectStylesIntoStyleTag_default()(components_module.A, components_module_options);
2545
+ const styles_components_module = components_module.A && components_module.A.locals ? components_module.A.locals : void 0;
2546
+ function createToggle(options) {
2547
+ const { checked, onChange, ariaLabel, disabled = false } = options;
2548
+ const toggle = renderer_button({
2549
+ className: `${styles_components_module.toggle} ${checked ? styles_components_module.toggleActive : ''}`,
2550
+ role: 'switch',
2551
+ ariaLabel,
2552
+ ariaChecked: checked ? 'true' : 'false',
2553
+ disabled,
2554
+ onClick: ()=>{
2555
+ if (!disabled) onChange(!checked);
2556
+ }
2557
+ });
2558
+ const thumb = renderer_div({
2559
+ className: styles_components_module.toggleThumb
2560
+ });
2561
+ toggle.appendChild(thumb);
2562
+ return toggle;
2563
+ }
2564
+ function createBadge(options) {
2565
+ const { text, variant = 'neutral' } = options;
2566
+ const variantClass = {
2567
+ success: styles_components_module.badgeSuccess,
2568
+ error: styles_components_module.badgeError,
2569
+ warning: styles_components_module.badgeWarning,
2570
+ info: styles_components_module.badgeInfo,
2571
+ neutral: styles_components_module.badgeNeutral
2572
+ }[variant];
2573
+ return span({
2574
+ className: `${styles_components_module.badge} ${variantClass}`,
2575
+ text
2576
+ });
2577
+ }
2578
+ function createButton(options) {
2579
+ const { text, variant = 'default', small = false, icon, disabled = false, onClick } = options;
2580
+ const variantClass = {
2581
+ default: '',
2582
+ primary: styles_components_module.btnPrimary,
2583
+ danger: styles_components_module.btnDanger
2584
+ }[variant];
2585
+ const sizeClass = small ? styles_components_module.btnSmall : '';
2586
+ const btn = renderer_button({
2587
+ className: `${styles_components_module.btn} ${variantClass} ${sizeClass}`.trim(),
2588
+ disabled,
2589
+ onClick
2590
+ });
2591
+ if (icon) {
2592
+ const iconWrapper = renderer_div({
2593
+ className: styles_components_module.btnIcon
2594
+ });
2595
+ iconWrapper.appendChild(createSvgElement(icon, {
2596
+ width: 14,
2597
+ height: 14
2598
+ }));
2599
+ btn.appendChild(iconWrapper);
2600
+ }
2601
+ btn.appendChild(document.createTextNode(text));
2602
+ return btn;
2603
+ }
2604
+ function createListItem(options) {
2605
+ const { title, description, actions = [] } = options;
2606
+ const content = renderer_div({
2607
+ className: styles_components_module.listItemContent,
2608
+ children: [
2609
+ span({
2610
+ className: styles_components_module.listItemTitle,
2611
+ text: title
2612
+ }),
2613
+ description ? span({
2614
+ className: styles_components_module.listItemDescription,
2615
+ text: description
2616
+ }) : null
2617
+ ]
2618
+ });
2619
+ const actionsContainer = renderer_div({
2620
+ className: styles_components_module.listItemActions,
2621
+ children: actions
2622
+ });
2623
+ return renderer_div({
2624
+ className: styles_components_module.listItem,
2625
+ children: [
2626
+ content,
2627
+ actionsContainer
2628
+ ]
2629
+ });
2630
+ }
2631
+ function createSection(options) {
2632
+ const { title, actions = [], children } = options;
2633
+ const header = renderer_div({
2634
+ className: styles_components_module.sectionHeader,
2635
+ children: [
2636
+ span({
2637
+ className: styles_components_module.sectionTitle,
2638
+ text: title
2639
+ }),
2640
+ ...actions
2641
+ ]
2642
+ });
2643
+ return renderer_div({
2644
+ className: styles_components_module.section,
2645
+ children: [
2646
+ header,
2647
+ ...children
2648
+ ]
2649
+ });
2650
+ }
2651
+ function createInfoRow(options) {
2652
+ const { label, value } = options;
2653
+ return renderer_div({
2654
+ className: styles_components_module.infoRow,
2655
+ children: [
2656
+ span({
2657
+ className: styles_components_module.infoLabel,
2658
+ text: label
2659
+ }),
2660
+ span({
2661
+ className: styles_components_module.infoValue,
2662
+ text: value
2663
+ })
2664
+ ]
2665
+ });
2666
+ }
2667
+ function createEmptyState(options) {
2668
+ const { icon, text } = options;
2669
+ const children = [];
2670
+ if (icon) {
2671
+ const iconWrapper = renderer_div({
2672
+ className: styles_components_module.emptyStateIcon
2673
+ });
2674
+ iconWrapper.appendChild(createSvgElement(icon, {
2675
+ width: 32,
2676
+ height: 32
2677
+ }));
2678
+ children.push(iconWrapper);
2679
+ }
2680
+ children.push(span({
2681
+ className: styles_components_module.emptyStateText,
2682
+ text
2683
+ }));
2684
+ return renderer_div({
2685
+ className: styles_components_module.emptyState,
2686
+ children: children.filter(Boolean)
2687
+ });
2688
+ }
2689
+ function createGrid(options) {
2690
+ const { columns = 2, children } = options;
2691
+ const colsClass = 3 === columns ? styles_components_module.gridCols3 : styles_components_module.gridCols2;
2692
+ return renderer_div({
2693
+ className: `${styles_components_module.grid} ${colsClass}`,
2694
+ children
2695
+ });
2696
+ }
2697
+ function createGridCard(options) {
2698
+ const { title, action } = options;
2699
+ const children = [
2700
+ span({
2701
+ className: styles_components_module.gridCardTitle,
2702
+ text: title
2703
+ })
2704
+ ];
2705
+ if (action) children.push(action);
2706
+ return renderer_div({
2707
+ className: styles_components_module.gridCard,
2708
+ children
2709
+ });
2710
+ }
2711
+ 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">
2712
+ <path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path>
2713
+ <path d="M21 3v5h-5"></path>
2714
+ <path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path>
2715
+ <path d="M8 16H3v5"></path>
2716
+ </svg>`;
2717
+ 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">
2718
+ <path d="M3 6h18"></path>
2719
+ <path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"></path>
2720
+ <path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"></path>
2721
+ </svg>`;
2722
+ 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">
2723
+ <rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect>
2724
+ <path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path>
2725
+ </svg>`;
2726
+ 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">
2727
+ <path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"></path>
2728
+ <circle cx="12" cy="12" r="3"></circle>
2729
+ </svg>`;
2730
+ 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">
2731
+ <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>
2732
+ <circle cx="12" cy="12" r="3"></circle>
2733
+ </svg>`;
2734
+ 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">
2735
+ <polyline points="4 17 10 11 4 5"></polyline>
2736
+ <line x1="12" y1="19" x2="20" y2="19"></line>
2737
+ </svg>`;
2738
+ function actions_renderActionsPanel(container, options) {
2739
+ const { getState, onResetConsents, onRefetchBanner, onShowBanner, onOpenPreferences, onCopyState } = options;
2740
+ clearElement(container);
2741
+ const state = getState();
2742
+ if (!state) return void container.appendChild(renderer_div({
2743
+ style: {
2744
+ padding: '24px',
2745
+ textAlign: 'center',
2746
+ color: 'var(--c15t-text-muted)',
2747
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
2748
+ },
2749
+ text: 'Store not connected'
2750
+ }));
2751
+ const actionCards = [
2752
+ createActionCard({
2753
+ icon: actions_EYE_ICON,
2754
+ label: 'Show Banner',
2755
+ onClick: onShowBanner
2756
+ }),
2757
+ createActionCard({
2758
+ icon: SETTINGS_ICON,
2759
+ label: 'Preferences',
2760
+ onClick: onOpenPreferences
2761
+ }),
2762
+ createActionCard({
2763
+ icon: REFRESH_ICON,
2764
+ label: 'Re-fetch',
2765
+ onClick: onRefetchBanner
2766
+ }),
2767
+ createActionCard({
2768
+ icon: COPY_ICON,
2769
+ label: 'Copy State',
2770
+ onClick: onCopyState
2771
+ })
2772
+ ];
2773
+ const grid = createGrid({
2774
+ columns: 2,
2775
+ children: actionCards
2776
+ });
2777
+ container.appendChild(grid);
2778
+ const dangerZone = renderer_div({
2779
+ style: {
2780
+ padding: '12px 16px',
2781
+ borderTop: '1px solid var(--c15t-border)'
2782
+ },
2783
+ children: [
2784
+ createButton({
2785
+ text: 'Reset All Consents',
2786
+ icon: TRASH_ICON,
2787
+ variant: 'danger',
2788
+ onClick: onResetConsents
2789
+ })
2790
+ ]
2791
+ });
2792
+ container.appendChild(dangerZone);
2793
+ const consoleSection = renderer_div({
2794
+ style: {
2795
+ padding: '12px 16px',
2796
+ borderTop: '1px solid var(--c15t-border)'
2797
+ },
2798
+ children: [
2799
+ renderer_div({
2800
+ style: {
2801
+ display: 'flex',
2802
+ alignItems: 'center',
2803
+ gap: '6px',
2804
+ marginBottom: '8px'
2805
+ },
2806
+ children: [
2807
+ createIconWrapper(TERMINAL_ICON, 14),
2808
+ span({
2809
+ style: {
2810
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
2811
+ fontWeight: '600',
2812
+ color: 'var(--c15t-text)'
2813
+ },
2814
+ text: 'Console API'
2815
+ })
2816
+ ]
2817
+ }),
2818
+ renderer_div({
2819
+ style: {
2820
+ display: 'flex',
2821
+ flexDirection: 'column',
2822
+ gap: '4px',
2823
+ padding: '8px',
2824
+ borderRadius: 'var(--c15t-radius-md)',
2825
+ backgroundColor: 'var(--c15t-surface-muted)',
2826
+ fontFamily: 'ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, monospace',
2827
+ fontSize: '11px',
2828
+ color: 'var(--c15t-text-muted)'
2829
+ },
2830
+ children: [
2831
+ span({
2832
+ text: `window.${getNamespace(state)}.getState()`
2833
+ }),
2834
+ span({
2835
+ text: 'window.__c15tDevTools.open()'
2836
+ })
2837
+ ]
2838
+ })
2839
+ ]
2840
+ });
2841
+ container.appendChild(consoleSection);
2842
+ }
2843
+ function createActionCard(options) {
2844
+ const { icon, label, onClick } = options;
2845
+ const card = renderer_div({
2846
+ className: styles_components_module.gridCard ?? '',
2847
+ style: {
2848
+ display: 'flex',
2849
+ flexDirection: 'column',
2850
+ alignItems: 'center',
2851
+ justifyContent: 'center',
2852
+ gap: '6px',
2853
+ padding: '16px 8px',
2854
+ cursor: 'pointer',
2855
+ transition: 'background-color var(--c15t-duration-fast) var(--c15t-easing)'
2856
+ },
2857
+ children: [
2858
+ createIconWrapper(icon, 20),
2859
+ span({
2860
+ style: {
2861
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
2862
+ fontWeight: '500',
2863
+ color: 'var(--c15t-text)',
2864
+ textAlign: 'center'
2865
+ },
2866
+ text: label
2867
+ })
2868
+ ]
2869
+ });
2870
+ card.addEventListener('click', onClick);
2871
+ card.addEventListener('mouseenter', ()=>{
2872
+ card.style.backgroundColor = 'var(--c15t-surface-hover)';
2873
+ });
2874
+ card.addEventListener('mouseleave', ()=>{
2875
+ card.style.backgroundColor = '';
2876
+ });
2877
+ return card;
2878
+ }
2879
+ function createIconWrapper(icon, size) {
2880
+ const wrapper = renderer_div({
2881
+ style: {
2882
+ display: 'flex',
2883
+ alignItems: 'center',
2884
+ justifyContent: 'center',
2885
+ color: 'var(--c15t-text-muted)'
2886
+ }
2887
+ });
2888
+ wrapper.appendChild(createSvgElement(icon, {
2889
+ width: size,
2890
+ height: size
2891
+ }));
2892
+ return wrapper;
2893
+ }
2894
+ function getNamespace(state) {
2895
+ return state.config?.meta?.namespace || 'c15tStore';
2896
+ }
2897
+ function consents_renderConsentsPanel(container, options) {
2898
+ const { getState, onConsentChange, onSave, onAcceptAll, onRejectAll, onReset } = options;
2899
+ clearElement(container);
2900
+ const state = getState();
2901
+ if (!state) return void container.appendChild(renderer_div({
2902
+ style: {
2903
+ padding: '24px',
2904
+ textAlign: 'center',
2905
+ color: 'var(--c15t-text-muted)',
2906
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
2907
+ },
2908
+ text: 'Store not connected'
2909
+ }));
2910
+ const isIabMode = 'iab' === state.model;
2911
+ const savedConsents = state.consents || {};
2912
+ const selectedConsents = state.selectedConsents || {};
2913
+ const displayConsents = {
2914
+ ...savedConsents
2915
+ };
2916
+ for (const [key, value] of Object.entries(selectedConsents))displayConsents[key] = value;
2917
+ const hasUnsavedChanges = !isIabMode && Object.entries(displayConsents).some(([key, value])=>savedConsents[key] !== value);
2918
+ const consentTypes = state.consentTypes || [];
2919
+ const consentTypeMap = new Map(consentTypes.map((ct)=>[
2920
+ ct.name,
2921
+ ct
2922
+ ]));
2923
+ const consentEntries = Object.entries(displayConsents);
2924
+ if (0 === consentEntries.length) container.appendChild(renderer_div({
2925
+ style: {
2926
+ padding: '24px',
2927
+ textAlign: 'center',
2928
+ color: 'var(--c15t-devtools-text-muted)',
2929
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
2930
+ },
2931
+ text: 'No consents configured'
2932
+ }));
2933
+ else {
2934
+ if (isIabMode) {
2935
+ const iabNotice = renderer_div({
2936
+ style: {
2937
+ padding: '8px 12px',
2938
+ margin: '0 0 8px',
2939
+ backgroundColor: 'var(--c15t-devtools-badge-info-bg)',
2940
+ borderRadius: '4px',
2941
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
2942
+ color: 'var(--c15t-devtools-badge-info)'
2943
+ },
2944
+ text: 'IAB TCF mode: Consents are managed via the IAB framework'
2945
+ });
2946
+ container.appendChild(iabNotice);
2947
+ }
2948
+ const gridCards = [];
2949
+ for (const [name, value] of consentEntries){
2950
+ const consentType = consentTypeMap.get(name);
2951
+ const isNecessary = 'necessary' === name;
2952
+ const displayName = consentType?.name || name;
2953
+ const isSaved = savedConsents[name] === value;
2954
+ const toggle = createToggle({
2955
+ checked: Boolean(value),
2956
+ disabled: isNecessary || isIabMode,
2957
+ ariaLabel: `Toggle ${displayName} consent`,
2958
+ onChange: (newValue)=>onConsentChange(String(name), newValue)
2959
+ });
2960
+ const card = createGridCard({
2961
+ title: formatConsentName(displayName) + (isIabMode || isSaved ? '' : ' •'),
2962
+ action: toggle
2963
+ });
2964
+ gridCards.push(card);
2965
+ }
2966
+ const grid = createGrid({
2967
+ columns: 2,
2968
+ children: gridCards
2969
+ });
2970
+ container.appendChild(grid);
2971
+ }
2972
+ if (isIabMode) {
2973
+ const footer = renderer_div({
2974
+ style: {
2975
+ display: 'flex',
2976
+ alignItems: 'center',
2977
+ justifyContent: 'flex-end',
2978
+ padding: '12px 16px',
2979
+ marginTop: 'auto',
2980
+ borderTop: '1px solid var(--c15t-border)',
2981
+ backgroundColor: 'var(--c15t-surface)'
2982
+ },
2983
+ children: [
2984
+ createButton({
2985
+ text: 'Reset All',
2986
+ variant: 'danger',
2987
+ small: true,
2988
+ onClick: onReset
2989
+ })
2990
+ ]
2991
+ });
2992
+ container.appendChild(footer);
2993
+ return;
2994
+ }
2995
+ const footer = renderer_div({
2996
+ style: {
2997
+ display: 'flex',
2998
+ alignItems: 'center',
2999
+ justifyContent: 'space-between',
3000
+ padding: '12px 16px',
3001
+ marginTop: 'auto',
3002
+ borderTop: '1px solid var(--c15t-border)',
3003
+ backgroundColor: hasUnsavedChanges ? 'var(--c15t-devtools-badge-warning-bg)' : 'var(--c15t-surface)'
3004
+ },
3005
+ children: [
3006
+ renderer_div({
3007
+ style: {
3008
+ display: 'flex',
3009
+ gap: '6px'
3010
+ },
3011
+ children: [
3012
+ createButton({
3013
+ text: 'All',
3014
+ variant: 'primary',
3015
+ small: true,
3016
+ onClick: onAcceptAll
3017
+ }),
3018
+ createButton({
3019
+ text: 'None',
3020
+ variant: 'default',
3021
+ small: true,
3022
+ onClick: onRejectAll
3023
+ }),
3024
+ createButton({
3025
+ text: 'Reset',
3026
+ variant: 'danger',
3027
+ small: true,
3028
+ onClick: onReset
3029
+ })
3030
+ ]
3031
+ }),
3032
+ hasUnsavedChanges ? renderer_div({
3033
+ style: {
3034
+ display: 'flex',
3035
+ alignItems: 'center',
3036
+ gap: '8px'
3037
+ },
3038
+ children: [
3039
+ span({
3040
+ style: {
3041
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3042
+ color: 'var(--c15t-devtools-badge-warning)'
3043
+ },
3044
+ text: 'Unsaved'
3045
+ }),
3046
+ createButton({
3047
+ text: 'Save',
3048
+ variant: 'primary',
3049
+ small: true,
3050
+ onClick: onSave
3051
+ })
3052
+ ]
3053
+ }) : span({
3054
+ style: {
3055
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3056
+ color: 'var(--c15t-text-muted)'
3057
+ },
3058
+ text: 'No changes'
3059
+ })
3060
+ ]
3061
+ });
3062
+ container.appendChild(footer);
3063
+ }
3064
+ function formatConsentName(name) {
3065
+ return name.replace(/_/g, ' ').replace(/\b\w/g, (l)=>l.toUpperCase());
3066
+ }
3067
+ function events_renderEventsPanel(container, options) {
3068
+ const { getEvents, onClear } = options;
3069
+ clearElement(container);
3070
+ const events = getEvents();
3071
+ const header = renderer_div({
3072
+ style: {
3073
+ display: 'flex',
3074
+ alignItems: 'center',
3075
+ justifyContent: 'space-between',
3076
+ padding: '12px 16px 8px'
3077
+ },
3078
+ children: [
3079
+ span({
3080
+ style: {
3081
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3082
+ fontWeight: '600',
3083
+ color: 'var(--c15t-text-muted)',
3084
+ textTransform: 'uppercase',
3085
+ letterSpacing: '0.5px'
3086
+ },
3087
+ text: `Events (${events.length})`
3088
+ }),
3089
+ createButton({
3090
+ text: 'Clear',
3091
+ small: true,
3092
+ onClick: onClear
3093
+ })
3094
+ ]
3095
+ });
3096
+ container.appendChild(header);
3097
+ const eventList = renderer_div({
3098
+ style: {
3099
+ display: 'flex',
3100
+ flexDirection: 'column',
3101
+ gap: '4px',
3102
+ padding: '0 12px 12px',
3103
+ maxHeight: '400px',
3104
+ overflowY: 'auto'
3105
+ }
3106
+ });
3107
+ if (0 === events.length) {
3108
+ const emptyState = renderer_div({
3109
+ style: {
3110
+ padding: '32px 16px',
3111
+ textAlign: 'center',
3112
+ color: 'var(--c15t-text-muted)',
3113
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
3114
+ },
3115
+ text: 'No events recorded yet'
3116
+ });
3117
+ eventList.appendChild(emptyState);
3118
+ } else for (const event of events){
3119
+ const eventItem = createEventItem(event);
3120
+ eventList.appendChild(eventItem);
3121
+ }
3122
+ container.appendChild(eventList);
3123
+ }
3124
+ function createEventItem(event) {
3125
+ const time = formatTime(event.timestamp);
3126
+ const icon = getEventIcon(event.type);
3127
+ const color = getEventColor(event.type);
3128
+ return renderer_div({
3129
+ className: styles_components_module.gridCard ?? '',
3130
+ style: {
3131
+ display: 'flex',
3132
+ alignItems: 'center',
3133
+ gap: '8px',
3134
+ padding: '6px 10px',
3135
+ fontSize: 'var(--c15t-devtools-font-size-xs)'
3136
+ },
3137
+ children: [
3138
+ span({
3139
+ style: {
3140
+ color,
3141
+ fontSize: '8px',
3142
+ lineHeight: '1'
3143
+ },
3144
+ text: icon
3145
+ }),
3146
+ span({
3147
+ style: {
3148
+ color: 'var(--c15t-text-muted)',
3149
+ fontFamily: 'monospace',
3150
+ fontSize: '10px',
3151
+ flexShrink: '0'
3152
+ },
3153
+ text: time
3154
+ }),
3155
+ span({
3156
+ style: {
3157
+ color: 'var(--c15t-text)',
3158
+ flex: '1'
3159
+ },
3160
+ text: event.message
3161
+ })
3162
+ ]
3163
+ });
3164
+ }
3165
+ function formatTime(timestamp) {
3166
+ const date = new Date(timestamp);
3167
+ return date.toLocaleTimeString('en-US', {
3168
+ hour12: false,
3169
+ hour: '2-digit',
3170
+ minute: '2-digit',
3171
+ second: '2-digit'
3172
+ });
3173
+ }
3174
+ function getEventIcon(type) {
3175
+ switch(type){
3176
+ case 'consent_set':
3177
+ case 'consent_save':
3178
+ return '●';
3179
+ case 'consent_reset':
3180
+ return '○';
3181
+ case 'error':
3182
+ return '✕';
3183
+ case 'info':
3184
+ default:
3185
+ return '○';
3186
+ }
3187
+ }
3188
+ function getEventColor(type) {
3189
+ switch(type){
3190
+ case 'consent_set':
3191
+ case 'consent_save':
3192
+ return 'var(--c15t-devtools-badge-success, #10b981)';
3193
+ case 'consent_reset':
3194
+ return 'var(--c15t-devtools-badge-warning, #f59e0b)';
3195
+ case 'error':
3196
+ return 'var(--c15t-devtools-badge-error, #ef4444)';
3197
+ case 'info':
3198
+ default:
3199
+ return 'var(--c15t-text-muted)';
3200
+ }
3201
+ }
3202
+ function iab_renderIabPanel(container, options) {
3203
+ const { getState, onReset } = options;
3204
+ clearElement(container);
3205
+ const state = getState();
3206
+ if (!state) return void container.appendChild(renderer_div({
3207
+ style: {
3208
+ padding: '24px',
3209
+ textAlign: 'center',
3210
+ color: 'var(--c15t-text-muted)',
3211
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
3212
+ },
3213
+ text: 'Store not connected'
3214
+ }));
3215
+ if ('iab' !== state.model) return void container.appendChild(renderer_div({
3216
+ style: {
3217
+ padding: '24px',
3218
+ textAlign: 'center',
3219
+ color: 'var(--c15t-text-muted)',
3220
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
3221
+ },
3222
+ text: 'IAB TCF mode is not configured'
3223
+ }));
3224
+ const iabState = state.iab;
3225
+ if (!iabState) return void container.appendChild(renderer_div({
3226
+ style: {
3227
+ padding: '24px',
3228
+ textAlign: 'center',
3229
+ color: 'var(--c15t-text-muted)',
3230
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
3231
+ },
3232
+ text: 'IAB state not available'
3233
+ }));
3234
+ const tcString = iabState.tcString;
3235
+ const tcStringSection = createSection({
3236
+ title: 'TC String',
3237
+ actions: tcString ? [
3238
+ createButton({
3239
+ text: 'Copy',
3240
+ small: true,
3241
+ onClick: ()=>{
3242
+ navigator.clipboard.writeText(tcString);
3243
+ }
3244
+ })
3245
+ ] : [],
3246
+ children: [
3247
+ renderer_div({
3248
+ style: {
3249
+ padding: '8px',
3250
+ backgroundColor: 'var(--c15t-surface-muted)',
3251
+ borderRadius: '4px',
3252
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3253
+ fontFamily: 'monospace',
3254
+ wordBreak: 'break-all',
3255
+ maxHeight: '80px',
3256
+ overflowY: 'auto',
3257
+ color: tcString ? 'var(--c15t-text)' : 'var(--c15t-text-muted)'
3258
+ },
3259
+ text: tcString || 'No TC String generated yet'
3260
+ })
3261
+ ]
3262
+ });
3263
+ container.appendChild(tcStringSection);
3264
+ const gvl = iabState.gvl;
3265
+ const purposeConsents = iabState.purposeConsents || {};
3266
+ const purposes = gvl?.purposes || {};
3267
+ const purposeEntries = Object.entries(purposeConsents);
3268
+ if (purposeEntries.length > 0) {
3269
+ const purposeList = renderer_div({
3270
+ style: {
3271
+ display: 'flex',
3272
+ flexDirection: 'column',
3273
+ gap: '4px',
3274
+ maxHeight: '120px',
3275
+ overflowY: 'auto'
3276
+ }
3277
+ });
3278
+ for (const [purposeId, consent] of purposeEntries){
3279
+ const purposeInfo = purposes[purposeId];
3280
+ const purposeName = purposeInfo?.name || `Purpose ${purposeId}`;
3281
+ purposeList.appendChild(createPurposeRow(purposeId, purposeName, Boolean(consent)));
3282
+ }
3283
+ const purposesSection = createSection({
3284
+ title: `Purposes (${purposeEntries.length})`,
3285
+ children: [
3286
+ purposeList
3287
+ ]
3288
+ });
3289
+ container.appendChild(purposesSection);
3290
+ }
3291
+ const specialFeatureOptIns = iabState.specialFeatureOptIns || {};
3292
+ const specialFeatures = gvl?.specialFeatures || {};
3293
+ const specialFeatureEntries = Object.entries(specialFeatureOptIns);
3294
+ if (specialFeatureEntries.length > 0) {
3295
+ const specialFeatureList = renderer_div({
3296
+ style: {
3297
+ display: 'flex',
3298
+ flexDirection: 'column',
3299
+ gap: '4px',
3300
+ maxHeight: '100px',
3301
+ overflowY: 'auto'
3302
+ }
3303
+ });
3304
+ for (const [featureId, optIn] of specialFeatureEntries){
3305
+ const featureInfo = specialFeatures[featureId];
3306
+ const featureName = featureInfo?.name || `Special Feature ${featureId}`;
3307
+ specialFeatureList.appendChild(createPurposeRow(featureId, featureName, Boolean(optIn)));
3308
+ }
3309
+ const specialFeaturesSection = createSection({
3310
+ title: `Special Features (${specialFeatureEntries.length})`,
3311
+ children: [
3312
+ specialFeatureList
3313
+ ]
3314
+ });
3315
+ container.appendChild(specialFeaturesSection);
3316
+ }
3317
+ const vendorConsents = iabState.vendorConsents || {};
3318
+ const vendors = gvl?.vendors || {};
3319
+ const vendorEntries = Object.entries(vendorConsents);
3320
+ const iabVendors = [];
3321
+ const customVendors = [];
3322
+ for (const [vendorId, consent] of vendorEntries){
3323
+ const vendorInfo = vendors[vendorId];
3324
+ const vendorName = vendorInfo?.name || `Vendor ${vendorId}`;
3325
+ const isIabVendor = void 0 !== vendorInfo;
3326
+ if (isIabVendor) iabVendors.push([
3327
+ vendorId,
3328
+ Boolean(consent),
3329
+ vendorName
3330
+ ]);
3331
+ else customVendors.push([
3332
+ vendorId,
3333
+ Boolean(consent),
3334
+ vendorName
3335
+ ]);
3336
+ }
3337
+ if (iabVendors.length > 0) {
3338
+ const vendorList = renderer_div({
3339
+ style: {
3340
+ display: 'flex',
3341
+ flexDirection: 'column',
3342
+ gap: '4px',
3343
+ maxHeight: '120px',
3344
+ overflowY: 'auto'
3345
+ }
3346
+ });
3347
+ for (const [vendorId, consent, vendorName] of iabVendors)vendorList.appendChild(createVendorRow(vendorId, vendorName, consent, 'iab'));
3348
+ const vendorsSection = createSection({
3349
+ title: `IAB Vendors (${iabVendors.length})`,
3350
+ children: [
3351
+ vendorList
3352
+ ]
3353
+ });
3354
+ container.appendChild(vendorsSection);
3355
+ }
3356
+ if (customVendors.length > 0) {
3357
+ const customVendorList = renderer_div({
3358
+ style: {
3359
+ display: 'flex',
3360
+ flexDirection: 'column',
3361
+ gap: '4px',
3362
+ maxHeight: '100px',
3363
+ overflowY: 'auto'
3364
+ }
3365
+ });
3366
+ for (const [vendorId, consent, vendorName] of customVendors)customVendorList.appendChild(createVendorRow(vendorId, vendorName, consent, 'custom'));
3367
+ const customVendorsSection = createSection({
3368
+ title: `Custom Vendors (${customVendors.length})`,
3369
+ children: [
3370
+ customVendorList
3371
+ ]
3372
+ });
3373
+ container.appendChild(customVendorsSection);
3374
+ }
3375
+ if (0 === purposeEntries.length && 0 === specialFeatureEntries.length && 0 === vendorEntries.length) container.appendChild(renderer_div({
3376
+ style: {
3377
+ padding: '16px',
3378
+ textAlign: 'center',
3379
+ color: 'var(--c15t-text-muted)',
3380
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
3381
+ },
3382
+ text: 'No purposes or vendors configured'
3383
+ }));
3384
+ const footer = renderer_div({
3385
+ style: {
3386
+ display: 'flex',
3387
+ alignItems: 'center',
3388
+ justifyContent: 'flex-end',
3389
+ padding: '12px 16px',
3390
+ marginTop: 'auto',
3391
+ borderTop: '1px solid var(--c15t-border)',
3392
+ backgroundColor: 'var(--c15t-surface)'
3393
+ },
3394
+ children: [
3395
+ createButton({
3396
+ text: 'Reset All',
3397
+ variant: 'danger',
3398
+ small: true,
3399
+ onClick: onReset
3400
+ })
3401
+ ]
3402
+ });
3403
+ container.appendChild(footer);
3404
+ }
3405
+ function createPurposeRow(id, name, consent) {
3406
+ return renderer_div({
3407
+ style: {
3408
+ display: 'flex',
3409
+ alignItems: 'center',
3410
+ justifyContent: 'space-between',
3411
+ padding: '4px 0',
3412
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3413
+ borderBottom: '1px solid var(--c15t-border)'
3414
+ },
3415
+ children: [
3416
+ span({
3417
+ style: {
3418
+ color: 'var(--c15t-text)',
3419
+ overflow: 'hidden',
3420
+ textOverflow: 'ellipsis',
3421
+ whiteSpace: 'nowrap',
3422
+ flex: '1',
3423
+ marginRight: '8px'
3424
+ },
3425
+ text: `${id}. ${name}`,
3426
+ title: name
3427
+ }),
3428
+ createBadge({
3429
+ text: consent ? '✓' : '✕',
3430
+ variant: consent ? 'success' : 'error'
3431
+ })
3432
+ ]
3433
+ });
3434
+ }
3435
+ function createVendorRow(id, name, consent, type) {
3436
+ return renderer_div({
3437
+ style: {
3438
+ display: 'flex',
3439
+ alignItems: 'center',
3440
+ justifyContent: 'space-between',
3441
+ padding: '4px 0',
3442
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3443
+ borderBottom: '1px solid var(--c15t-border)'
3444
+ },
3445
+ children: [
3446
+ renderer_div({
3447
+ style: {
3448
+ display: 'flex',
3449
+ alignItems: 'center',
3450
+ gap: '6px',
3451
+ overflow: 'hidden',
3452
+ flex: '1',
3453
+ marginRight: '8px'
3454
+ },
3455
+ children: [
3456
+ 'custom' === type ? span({
3457
+ style: {
3458
+ fontSize: '9px',
3459
+ padding: '1px 4px',
3460
+ backgroundColor: 'var(--c15t-devtools-badge-info-bg)',
3461
+ color: 'var(--c15t-devtools-badge-info)',
3462
+ borderRadius: '2px',
3463
+ flexShrink: '0'
3464
+ },
3465
+ text: 'CUSTOM'
3466
+ }) : null,
3467
+ span({
3468
+ style: {
3469
+ color: 'var(--c15t-text)',
3470
+ overflow: 'hidden',
3471
+ textOverflow: 'ellipsis',
3472
+ whiteSpace: 'nowrap'
3473
+ },
3474
+ text: `${id}. ${truncateText(name, 25)}`,
3475
+ title: name
3476
+ })
3477
+ ].filter(Boolean)
3478
+ }),
3479
+ createBadge({
3480
+ text: consent ? '✓' : '✕',
3481
+ variant: consent ? 'success' : 'error'
3482
+ })
3483
+ ]
3484
+ });
3485
+ }
3486
+ function truncateText(text, maxLength) {
3487
+ if (text.length <= maxLength) return text;
3488
+ return text.slice(0, maxLength - 3) + '...';
3489
+ }
3490
+ function location_renderLocationPanel(container, options) {
3491
+ const { getState, onSetOverrides, onClearOverrides } = options;
3492
+ clearElement(container);
3493
+ const state = getState();
3494
+ if (!state) return void container.appendChild(renderer_div({
3495
+ style: {
3496
+ padding: '24px',
3497
+ textAlign: 'center',
3498
+ color: 'var(--c15t-text-muted)',
3499
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
3500
+ },
3501
+ text: 'Store not connected'
3502
+ }));
3503
+ const locationInfo = state.locationInfo;
3504
+ const overrides = state.overrides;
3505
+ const translationConfig = state.translationConfig;
3506
+ const gridItems = [
3507
+ createCompactInfoCard('Country', locationInfo?.countryCode || '—'),
3508
+ createCompactInfoCard('Region', locationInfo?.regionCode || '—'),
3509
+ createCompactInfoCard('Jurisdiction', locationInfo?.jurisdiction || '—'),
3510
+ createCompactInfoCard('Language', translationConfig?.defaultLanguage || '—')
3511
+ ];
3512
+ if (state.model) gridItems.push(createCompactInfoCard('Model', getModelLabel(state.model)));
3513
+ const locationGrid = createGrid({
3514
+ columns: 2,
3515
+ children: gridItems
3516
+ });
3517
+ container.appendChild(locationGrid);
3518
+ const overrideSection = createSection({
3519
+ title: 'Override Settings',
3520
+ actions: [
3521
+ createButton({
3522
+ text: 'Clear',
3523
+ small: true,
3524
+ onClick: onClearOverrides
3525
+ })
3526
+ ],
3527
+ children: [
3528
+ createOverrideSelect({
3529
+ label: 'Country',
3530
+ selectOptions: COUNTRY_OPTIONS,
3531
+ value: overrides?.country || '',
3532
+ onChange: (value)=>onSetOverrides({
3533
+ country: value || void 0
3534
+ })
3535
+ }),
3536
+ createOverrideInput({
3537
+ label: 'Region',
3538
+ placeholder: 'e.g., CA, NY, BE',
3539
+ value: overrides?.region || '',
3540
+ onChange: (value)=>onSetOverrides({
3541
+ region: value || void 0
3542
+ })
3543
+ }),
3544
+ createOverrideInput({
3545
+ label: 'Language',
3546
+ placeholder: 'e.g., de, fr, en',
3547
+ value: overrides?.language || '',
3548
+ onChange: (value)=>onSetOverrides({
3549
+ language: value || void 0
3550
+ })
3551
+ })
3552
+ ]
3553
+ });
3554
+ container.appendChild(overrideSection);
3555
+ const hasOverrides = overrides && (overrides.country || overrides.region || overrides.language);
3556
+ if (hasOverrides) {
3557
+ const overrideBanner = renderer_div({
3558
+ style: {
3559
+ padding: '8px 16px',
3560
+ backgroundColor: 'var(--c15t-devtools-badge-info-bg)',
3561
+ color: 'var(--c15t-devtools-badge-info)',
3562
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3563
+ borderTop: '1px solid var(--c15t-devtools-border)'
3564
+ },
3565
+ text: 'Overrides are active. This may affect consent behavior.'
3566
+ });
3567
+ container.appendChild(overrideBanner);
3568
+ }
3569
+ }
3570
+ function createOverrideInput(options) {
3571
+ const { label, placeholder, value, onChange } = options;
3572
+ let debounceTimer = null;
3573
+ const inputField = input({
3574
+ className: `${styles_components_module.input ?? ''} ${styles_components_module.inputSmall ?? ''}`.trim(),
3575
+ placeholder,
3576
+ value,
3577
+ onInput: (e)=>{
3578
+ const target = e.target;
3579
+ if (debounceTimer) clearTimeout(debounceTimer);
3580
+ debounceTimer = setTimeout(()=>{
3581
+ onChange(target.value);
3582
+ }, 500);
3583
+ }
3584
+ });
3585
+ return renderer_div({
3586
+ style: {
3587
+ display: 'flex',
3588
+ alignItems: 'center',
3589
+ justifyContent: 'space-between',
3590
+ gap: '8px',
3591
+ marginBottom: '8px'
3592
+ },
3593
+ children: [
3594
+ renderer_div({
3595
+ style: {
3596
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3597
+ color: 'var(--c15t-devtools-text-muted)',
3598
+ minWidth: '60px'
3599
+ },
3600
+ text: label
3601
+ }),
3602
+ renderer_div({
3603
+ style: {
3604
+ flex: '1'
3605
+ },
3606
+ children: [
3607
+ inputField
3608
+ ]
3609
+ })
3610
+ ]
3611
+ });
3612
+ }
3613
+ function createOverrideSelect(options) {
3614
+ const { label, selectOptions, value, onChange } = options;
3615
+ const selectField = renderer_select({
3616
+ className: `${styles_components_module.input ?? ''} ${styles_components_module.inputSmall ?? ''}`.trim(),
3617
+ options: selectOptions,
3618
+ selectedValue: value,
3619
+ onChange: (e)=>{
3620
+ const target = e.target;
3621
+ onChange(target.value);
3622
+ }
3623
+ });
3624
+ return renderer_div({
3625
+ style: {
3626
+ display: 'flex',
3627
+ alignItems: 'center',
3628
+ justifyContent: 'space-between',
3629
+ gap: '8px',
3630
+ marginBottom: '8px'
3631
+ },
3632
+ children: [
3633
+ renderer_div({
3634
+ style: {
3635
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3636
+ color: 'var(--c15t-devtools-text-muted)',
3637
+ minWidth: '60px'
3638
+ },
3639
+ text: label
3640
+ }),
3641
+ renderer_div({
3642
+ style: {
3643
+ flex: '1'
3644
+ },
3645
+ children: [
3646
+ selectField
3647
+ ]
3648
+ })
3649
+ ]
3650
+ });
3651
+ }
3652
+ const COUNTRY_OPTIONS = [
3653
+ {
3654
+ value: '',
3655
+ label: '-- Select --'
3656
+ },
3657
+ {
3658
+ value: 'US',
3659
+ label: 'US - United States'
3660
+ },
3661
+ {
3662
+ value: 'CA',
3663
+ label: 'CA - Canada'
3664
+ },
3665
+ {
3666
+ value: 'GB',
3667
+ label: 'GB - United Kingdom'
3668
+ },
3669
+ {
3670
+ value: 'DE',
3671
+ label: 'DE - Germany'
3672
+ },
3673
+ {
3674
+ value: 'FR',
3675
+ label: 'FR - France'
3676
+ },
3677
+ {
3678
+ value: 'IT',
3679
+ label: 'IT - Italy'
3680
+ },
3681
+ {
3682
+ value: 'ES',
3683
+ label: 'ES - Spain'
3684
+ },
3685
+ {
3686
+ value: 'NL',
3687
+ label: 'NL - Netherlands'
3688
+ },
3689
+ {
3690
+ value: 'BE',
3691
+ label: 'BE - Belgium'
3692
+ },
3693
+ {
3694
+ value: 'AT',
3695
+ label: 'AT - Austria'
3696
+ },
3697
+ {
3698
+ value: 'CH',
3699
+ label: 'CH - Switzerland'
3700
+ },
3701
+ {
3702
+ value: 'PL',
3703
+ label: 'PL - Poland'
3704
+ },
3705
+ {
3706
+ value: 'SE',
3707
+ label: 'SE - Sweden'
3708
+ },
3709
+ {
3710
+ value: 'NO',
3711
+ label: 'NO - Norway'
3712
+ },
3713
+ {
3714
+ value: 'DK',
3715
+ label: 'DK - Denmark'
3716
+ },
3717
+ {
3718
+ value: 'FI',
3719
+ label: 'FI - Finland'
3720
+ },
3721
+ {
3722
+ value: 'IE',
3723
+ label: 'IE - Ireland'
3724
+ },
3725
+ {
3726
+ value: 'PT',
3727
+ label: 'PT - Portugal'
3728
+ },
3729
+ {
3730
+ value: 'AU',
3731
+ label: 'AU - Australia'
3732
+ },
3733
+ {
3734
+ value: 'NZ',
3735
+ label: 'NZ - New Zealand'
3736
+ },
3737
+ {
3738
+ value: 'JP',
3739
+ label: 'JP - Japan'
3740
+ },
3741
+ {
3742
+ value: 'BR',
3743
+ label: 'BR - Brazil'
3744
+ },
3745
+ {
3746
+ value: 'MX',
3747
+ label: 'MX - Mexico'
3748
+ },
3749
+ {
3750
+ value: 'IN',
3751
+ label: 'IN - India'
3752
+ },
3753
+ {
3754
+ value: 'CN',
3755
+ label: 'CN - China'
3756
+ },
3757
+ {
3758
+ value: 'KR',
3759
+ label: 'KR - South Korea'
3760
+ },
3761
+ {
3762
+ value: 'SG',
3763
+ label: 'SG - Singapore'
3764
+ },
3765
+ {
3766
+ value: 'HK',
3767
+ label: 'HK - Hong Kong'
3768
+ },
3769
+ {
3770
+ value: 'ZA',
3771
+ label: 'ZA - South Africa'
3772
+ }
3773
+ ];
3774
+ function getModelLabel(model) {
3775
+ switch(model){
3776
+ case 'opt-in':
3777
+ return 'Opt-In';
3778
+ case 'opt-out':
3779
+ return 'Opt-Out';
3780
+ case 'iab':
3781
+ return 'IAB TCF';
3782
+ default:
3783
+ return 'None';
3784
+ }
3785
+ }
3786
+ function createCompactInfoCard(label, value) {
3787
+ return renderer_div({
3788
+ className: styles_components_module.gridCard ?? '',
3789
+ style: {
3790
+ flexDirection: 'column',
3791
+ alignItems: 'flex-start',
3792
+ gap: '2px'
3793
+ },
3794
+ children: [
3795
+ span({
3796
+ style: {
3797
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3798
+ color: 'var(--c15t-text-muted)'
3799
+ },
3800
+ text: label
3801
+ }),
3802
+ span({
3803
+ style: {
3804
+ fontSize: 'var(--c15t-font-size-sm)',
3805
+ fontWeight: '500',
3806
+ fontFamily: 'ui-monospace, monospace'
3807
+ },
3808
+ text: value
3809
+ })
3810
+ ]
3811
+ });
3812
+ }
3813
+ const dismissedResources = new Set();
3814
+ function scanDOM(state) {
3815
+ const results = [];
3816
+ const configuredScripts = state.scripts || [];
3817
+ const managedDomains = new Map();
3818
+ for (const script of configuredScripts)if (script.src) try {
3819
+ const url = new URL(script.src, window.location.origin);
3820
+ if (url.hostname !== window.location.hostname) managedDomains.set(url.hostname, script.id);
3821
+ } catch {}
3822
+ const scriptElements = document.querySelectorAll("script[src]");
3823
+ for (const el of scriptElements){
3824
+ const src = el.getAttribute('src');
3825
+ if (!src) continue;
3826
+ const resource = checkResource(src, "script", managedDomains);
3827
+ if (resource) results.push(resource);
3828
+ }
3829
+ const iframeElements = document.querySelectorAll('iframe[src]');
3830
+ for (const el of iframeElements){
3831
+ const src = el.getAttribute('src');
3832
+ if (!src) continue;
3833
+ const resource = checkResource(src, 'iframe', managedDomains);
3834
+ if (resource) results.push(resource);
3835
+ }
3836
+ return results;
3837
+ }
3838
+ function checkResource(src, type, managedDomains) {
3839
+ try {
3840
+ const url = new URL(src, window.location.origin);
3841
+ const domain = url.hostname;
3842
+ if (domain === window.location.hostname) return null;
3843
+ if ('data:' === url.protocol || 'blob:' === url.protocol) return null;
3844
+ const managedBy = managedDomains.get(domain);
3845
+ const isManaged = Boolean(managedBy);
3846
+ return {
3847
+ type,
3848
+ src,
3849
+ domain,
3850
+ status: isManaged ? 'managed' : 'unmanaged',
3851
+ managedBy
3852
+ };
3853
+ } catch {}
3854
+ return null;
3855
+ }
3856
+ function createDomScannerSection(state) {
3857
+ let resultsContainer = null;
3858
+ let lastScanResults = [];
3859
+ const doRender = ()=>{
3860
+ if (!resultsContainer) return;
3861
+ renderScanResults(resultsContainer, lastScanResults, (src)=>{
3862
+ dismissedResources.add(src);
3863
+ doRender();
3864
+ });
3865
+ };
3866
+ const handleScan = ()=>{
3867
+ if (!state || !resultsContainer) return;
3868
+ lastScanResults = scanDOM(state);
3869
+ doRender();
3870
+ };
3871
+ const section = createSection({
3872
+ title: 'DOM Scanner',
3873
+ actions: [
3874
+ createButton({
3875
+ text: 'Scan DOM',
3876
+ small: true,
3877
+ onClick: handleScan
3878
+ })
3879
+ ],
3880
+ children: []
3881
+ });
3882
+ resultsContainer = renderer_div({});
3883
+ const placeholder = renderer_div({
3884
+ style: {
3885
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3886
+ color: 'var(--c15t-text-muted)',
3887
+ textAlign: 'center',
3888
+ padding: '8px 0'
3889
+ },
3890
+ text: 'Click "Scan DOM" to check for external scripts and iframes'
3891
+ });
3892
+ resultsContainer.appendChild(placeholder);
3893
+ section.appendChild(resultsContainer);
3894
+ return section;
3895
+ }
3896
+ function renderScanResults(container, results, onDismiss) {
3897
+ while(container.firstChild)container.removeChild(container.firstChild);
3898
+ const activeResults = results.filter((r)=>!dismissedResources.has(r.src));
3899
+ if (0 === activeResults.length && 0 === results.length) return void container.appendChild(renderer_div({
3900
+ style: {
3901
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3902
+ color: 'var(--c15t-text-muted)',
3903
+ textAlign: 'center',
3904
+ padding: '8px 0'
3905
+ },
3906
+ text: "No external scripts or iframes found"
3907
+ }));
3908
+ if (0 === activeResults.length && results.length > 0) return void container.appendChild(renderer_div({
3909
+ style: {
3910
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3911
+ color: 'var(--c15t-text-muted)',
3912
+ textAlign: 'center',
3913
+ padding: '8px 0'
3914
+ },
3915
+ text: `All ${results.length} alerts dismissed`
3916
+ }));
3917
+ const unmanaged = activeResults.filter((r)=>'unmanaged' === r.status);
3918
+ const managed = activeResults.filter((r)=>'managed' === r.status);
3919
+ const dismissedCount = results.length - activeResults.length;
3920
+ const summaryText = dismissedCount > 0 ? `Found: ${managed.length} managed, ${unmanaged.length} unmanaged (${dismissedCount} dismissed)` : `Found: ${managed.length} managed, ${unmanaged.length} unmanaged`;
3921
+ const summary = renderer_div({
3922
+ style: {
3923
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3924
+ color: 'var(--c15t-text-muted)',
3925
+ marginBottom: '8px'
3926
+ },
3927
+ text: summaryText
3928
+ });
3929
+ container.appendChild(summary);
3930
+ if (unmanaged.length > 0) for (const resource of unmanaged)container.appendChild(createResourceRow(resource, 'warning', onDismiss));
3931
+ if (managed.length > 0) {
3932
+ const managedHeader = renderer_div({
3933
+ style: {
3934
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3935
+ fontWeight: '600',
3936
+ color: 'var(--c15t-devtools-badge-success)',
3937
+ marginBottom: '4px',
3938
+ marginTop: '8px'
3939
+ },
3940
+ text: 'MANAGED'
3941
+ });
3942
+ container.appendChild(managedHeader);
3943
+ for (const resource of managed)container.appendChild(createResourceRow(resource, 'success', onDismiss));
3944
+ }
3945
+ }
3946
+ function createResourceRow(resource, variant, onDismiss) {
3947
+ const icon = 'warning' === variant ? '⚠' : '✓';
3948
+ const iconColor = 'warning' === variant ? 'var(--c15t-devtools-badge-warning)' : 'var(--c15t-devtools-badge-success)';
3949
+ const row = renderer_div({
3950
+ style: {
3951
+ display: 'flex',
3952
+ alignItems: 'center',
3953
+ gap: '6px',
3954
+ padding: '4px 0',
3955
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
3956
+ borderBottom: '1px solid var(--c15t-border)'
3957
+ },
3958
+ children: [
3959
+ span({
3960
+ style: {
3961
+ color: iconColor,
3962
+ flexShrink: '0'
3963
+ },
3964
+ text: icon
3965
+ }),
3966
+ span({
3967
+ style: {
3968
+ color: 'var(--c15t-text-muted)',
3969
+ flexShrink: '0'
3970
+ },
3971
+ text: `${resource.type}:`
3972
+ }),
3973
+ span({
3974
+ style: {
3975
+ fontWeight: '500',
3976
+ color: 'var(--c15t-text)',
3977
+ overflow: 'hidden',
3978
+ textOverflow: 'ellipsis',
3979
+ whiteSpace: 'nowrap',
3980
+ flex: '1'
3981
+ },
3982
+ text: resource.domain,
3983
+ title: resource.src
3984
+ }),
3985
+ 'warning' === variant ? (()=>{
3986
+ const dismissBtn = document.createElement('button');
3987
+ dismissBtn.textContent = '✕';
3988
+ dismissBtn.title = 'Dismiss this alert';
3989
+ dismissBtn.style.cssText = `
3990
+ background: none;
3991
+ border: none;
3992
+ color: var(--c15t-text-muted);
3993
+ cursor: pointer;
3994
+ padding: 2px 4px;
3995
+ font-size: 10px;
3996
+ opacity: 0.6;
3997
+ flex-shrink: 0;
3998
+ `;
3999
+ dismissBtn.onmouseenter = ()=>{
4000
+ dismissBtn.style.opacity = '1';
4001
+ };
4002
+ dismissBtn.onmouseleave = ()=>{
4003
+ dismissBtn.style.opacity = '0.6';
4004
+ };
4005
+ dismissBtn.onclick = (e)=>{
4006
+ e.stopPropagation();
4007
+ onDismiss(resource.src);
4008
+ };
4009
+ return dismissBtn;
4010
+ })() : null
4011
+ ].filter(Boolean)
4012
+ });
4013
+ return row;
4014
+ }
4015
+ 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">
4016
+ <polyline points="16 18 22 12 16 6"></polyline>
4017
+ <polyline points="8 6 2 12 8 18"></polyline>
4018
+ </svg>`;
4019
+ function scripts_renderScriptsPanel(container, options) {
4020
+ const { getState } = options;
4021
+ clearElement(container);
4022
+ const state = getState();
4023
+ if (!state) return void container.appendChild(renderer_div({
4024
+ style: {
4025
+ padding: '24px',
4026
+ textAlign: 'center',
4027
+ color: 'var(--c15t-text-muted)',
4028
+ fontSize: 'var(--c15t-devtools-font-size-sm)'
4029
+ },
4030
+ text: 'Store not connected'
4031
+ }));
4032
+ const scripts = state.scripts || [];
4033
+ const loadedScripts = state.loadedScripts || {};
4034
+ const networkBlocker = state.networkBlocker;
4035
+ if (0 === scripts.length) {
4036
+ const scriptsSection = createSection({
4037
+ title: 'Configured Scripts',
4038
+ children: [
4039
+ createEmptyState({
4040
+ icon: CODE_ICON,
4041
+ text: "No scripts configured"
4042
+ })
4043
+ ]
4044
+ });
4045
+ container.appendChild(scriptsSection);
4046
+ } else {
4047
+ const scriptsList = renderer_div({
4048
+ style: {
4049
+ display: 'flex',
4050
+ flexDirection: 'column',
4051
+ gap: '4px'
4052
+ }
4053
+ });
4054
+ for (const script of scripts){
4055
+ const scriptId = script.id;
4056
+ const isLoaded = true === loadedScripts[scriptId];
4057
+ const category = script.category;
4058
+ const categoryDisplay = 'string' == typeof category ? category : JSON.stringify(category);
4059
+ let status = 'pending';
4060
+ let statusVariant = 'neutral';
4061
+ if (isLoaded) {
4062
+ status = 'loaded';
4063
+ statusVariant = 'success';
4064
+ } else {
4065
+ const hasConsent = checkScriptConsent(state, category);
4066
+ if (hasConsent) {
4067
+ status = 'pending';
4068
+ statusVariant = 'warning';
4069
+ } else {
4070
+ status = 'blocked';
4071
+ statusVariant = 'neutral';
4072
+ }
4073
+ }
4074
+ const badge = createBadge({
4075
+ text: status.charAt(0).toUpperCase() + status.slice(1),
4076
+ variant: statusVariant
4077
+ });
4078
+ const item = createListItem({
4079
+ title: scriptId,
4080
+ description: `Category: ${categoryDisplay}`,
4081
+ actions: [
4082
+ badge
4083
+ ]
4084
+ });
4085
+ scriptsList.appendChild(item);
4086
+ }
4087
+ const scriptsSection = createSection({
4088
+ title: `Configured Scripts (${scripts.length})`,
4089
+ children: [
4090
+ scriptsList
4091
+ ]
4092
+ });
4093
+ container.appendChild(scriptsSection);
4094
+ }
4095
+ const networkSection = createSection({
4096
+ title: 'Network Blocker',
4097
+ children: networkBlocker ? [
4098
+ createInfoRow({
4099
+ label: 'Status',
4100
+ value: 'Active'
4101
+ }),
4102
+ createInfoRow({
4103
+ label: 'Blocked Domains',
4104
+ value: String(networkBlocker.rules?.length || 0)
4105
+ })
4106
+ ] : [
4107
+ renderer_div({
4108
+ style: {
4109
+ fontSize: 'var(--c15t-devtools-font-size-xs)',
4110
+ color: 'var(--c15t-devtools-text-muted)'
4111
+ },
4112
+ text: 'Network blocker not configured'
4113
+ })
4114
+ ]
4115
+ });
4116
+ container.appendChild(networkSection);
4117
+ const loadedCount = Object.values(loadedScripts).filter(Boolean).length;
4118
+ const totalCount = scripts.length;
4119
+ const summarySection = createSection({
4120
+ title: 'Summary',
4121
+ children: [
4122
+ createInfoRow({
4123
+ label: 'Total Scripts',
4124
+ value: String(totalCount)
4125
+ }),
4126
+ createInfoRow({
4127
+ label: 'Loaded',
4128
+ value: String(loadedCount)
4129
+ }),
4130
+ createInfoRow({
4131
+ label: 'Pending/Blocked',
4132
+ value: String(totalCount - loadedCount)
4133
+ })
4134
+ ]
4135
+ });
4136
+ container.appendChild(summarySection);
4137
+ const scannerSection = createDomScannerSection(state);
4138
+ container.appendChild(scannerSection);
4139
+ }
4140
+ function checkScriptConsent(state, category) {
4141
+ if (!category) return true;
4142
+ if ('string' == typeof category) {
4143
+ const consents = state.consents || {};
4144
+ return true === consents[category];
4145
+ }
4146
+ return false;
4147
+ }
4148
+ const STORAGE_KEYS = {
4149
+ C15T: 'c15t',
4150
+ PENDING_SYNC: 'c15t:pending-consent-sync',
4151
+ PENDING_SUBMISSIONS: 'c15t-pending-consent-submissions',
4152
+ EUCONSENT: 'euconsent-v2'
4153
+ };
4154
+ const COOKIE_NAMES = {
4155
+ C15T: 'c15t',
4156
+ EUCONSENT: 'euconsent-v2'
4157
+ };
4158
+ function clearCookie(name) {
4159
+ document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;
4160
+ }
4161
+ function clearAllCookies() {
4162
+ clearCookie(COOKIE_NAMES.C15T);
4163
+ clearCookie(COOKIE_NAMES.EUCONSENT);
4164
+ }
4165
+ function clearAllLocalStorage() {
4166
+ try {
4167
+ localStorage.removeItem(STORAGE_KEYS.C15T);
4168
+ localStorage.removeItem(STORAGE_KEYS.PENDING_SYNC);
4169
+ localStorage.removeItem(STORAGE_KEYS.PENDING_SUBMISSIONS);
4170
+ localStorage.removeItem(STORAGE_KEYS.EUCONSENT);
4171
+ } catch {}
4172
+ }
4173
+ async function reset_consents_resetAllConsents(store, stateManager) {
4174
+ const storeState = store.getState();
4175
+ storeState.resetConsents();
4176
+ clearAllCookies();
4177
+ clearAllLocalStorage();
4178
+ await storeState.initConsentManager();
4179
+ stateManager?.addEvent({
4180
+ type: 'consent_reset',
4181
+ message: 'All consents reset (storage cleared)'
4182
+ });
4183
+ }
4184
+ const STORAGE_KEY = 'c15t-devtools-events';
4185
+ function loadPersistedEvents() {
4186
+ if ('undefined' == typeof window) return [];
4187
+ try {
4188
+ const stored = sessionStorage.getItem(STORAGE_KEY);
4189
+ if (stored) return JSON.parse(stored);
4190
+ } catch {}
4191
+ return [];
4192
+ }
4193
+ function persistEvents(events) {
4194
+ if ('undefined' == typeof window) return;
4195
+ try {
4196
+ sessionStorage.setItem(STORAGE_KEY, JSON.stringify(events));
4197
+ } catch {}
4198
+ }
4199
+ function state_manager_createStateManager(initialState = {}) {
4200
+ const persistedEvents = loadPersistedEvents();
4201
+ let state = {
4202
+ isOpen: false,
4203
+ activeTab: 'location',
4204
+ position: 'bottom-right',
4205
+ isConnected: false,
4206
+ eventLog: persistedEvents,
4207
+ maxEventLogSize: 100,
4208
+ ...initialState
4209
+ };
4210
+ const listeners = new Set();
4211
+ function notify(prevState) {
4212
+ for (const listener of listeners)listener(state, prevState);
4213
+ }
4214
+ function setState(partial) {
4215
+ const prevState = state;
4216
+ state = {
4217
+ ...state,
4218
+ ...partial
4219
+ };
4220
+ notify(prevState);
4221
+ }
4222
+ return {
4223
+ getState: ()=>state,
4224
+ subscribe: (listener)=>{
4225
+ listeners.add(listener);
4226
+ return ()=>{
4227
+ listeners.delete(listener);
4228
+ };
4229
+ },
4230
+ setOpen: (isOpen)=>{
4231
+ setState({
4232
+ isOpen
4233
+ });
4234
+ },
4235
+ toggle: ()=>{
4236
+ setState({
4237
+ isOpen: !state.isOpen
4238
+ });
4239
+ },
4240
+ setActiveTab: (tab)=>{
4241
+ setState({
4242
+ activeTab: tab
4243
+ });
4244
+ },
4245
+ setPosition: (position)=>{
4246
+ setState({
4247
+ position
4248
+ });
4249
+ },
4250
+ setConnected: (isConnected)=>{
4251
+ setState({
4252
+ isConnected
4253
+ });
4254
+ },
4255
+ addEvent: (entry)=>{
4256
+ const newEvent = {
4257
+ ...entry,
4258
+ id: `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
4259
+ timestamp: Date.now()
4260
+ };
4261
+ const eventLog = [
4262
+ newEvent,
4263
+ ...state.eventLog
4264
+ ].slice(0, state.maxEventLogSize);
4265
+ setState({
4266
+ eventLog
4267
+ });
4268
+ persistEvents(eventLog);
4269
+ },
4270
+ clearEventLog: ()=>{
4271
+ setState({
4272
+ eventLog: []
4273
+ });
4274
+ persistEvents([]);
4275
+ },
4276
+ destroy: ()=>{
4277
+ listeners.clear();
4278
+ }
4279
+ };
4280
+ }
4281
+ function store_connector_createStoreConnector(options = {}) {
4282
+ const { namespace = 'c15tStore', onConnect, onStateChange, onDisconnect } = options;
4283
+ let store = null;
4284
+ let unsubscribe = null;
4285
+ let pollInterval = null;
4286
+ const listeners = new Set();
4287
+ function tryConnect() {
4288
+ if ('undefined' == typeof window) return false;
4289
+ const storeInstance = window[namespace];
4290
+ if (storeInstance && 'function' == typeof storeInstance.getState) {
4291
+ store = storeInstance;
4292
+ unsubscribe = store.subscribe((state)=>{
4293
+ onStateChange?.(state);
4294
+ for (const listener of listeners)listener(state);
4295
+ });
4296
+ const currentState = store.getState();
4297
+ onConnect?.(currentState, store);
4298
+ if (pollInterval) {
4299
+ clearInterval(pollInterval);
4300
+ pollInterval = null;
4301
+ }
4302
+ return true;
4303
+ }
4304
+ return false;
4305
+ }
4306
+ function startPolling() {
4307
+ if (pollInterval) return;
4308
+ if (tryConnect()) return;
4309
+ let attempts = 0;
4310
+ const maxAttempts = 50;
4311
+ pollInterval = setInterval(()=>{
4312
+ attempts++;
4313
+ if (tryConnect()) return;
4314
+ if (attempts >= maxAttempts) {
4315
+ if (pollInterval) {
4316
+ clearInterval(pollInterval);
4317
+ pollInterval = null;
4318
+ }
4319
+ onDisconnect?.();
4320
+ }
4321
+ }, 100);
4322
+ }
4323
+ startPolling();
4324
+ return {
4325
+ getState: ()=>store?.getState() ?? null,
4326
+ getStore: ()=>store,
4327
+ isConnected: ()=>null !== store,
4328
+ subscribe: (listener)=>{
4329
+ listeners.add(listener);
4330
+ if (store) listener(store.getState());
4331
+ return ()=>{
4332
+ listeners.delete(listener);
4333
+ };
4334
+ },
4335
+ destroy: ()=>{
4336
+ if (pollInterval) {
4337
+ clearInterval(pollInterval);
4338
+ pollInterval = null;
4339
+ }
4340
+ if (unsubscribe) {
4341
+ unsubscribe();
4342
+ unsubscribe = null;
4343
+ }
4344
+ store = null;
4345
+ listeners.clear();
4346
+ }
4347
+ };
4348
+ }
4349
+ 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");
4350
+ var tokens_options = {};
4351
+ tokens_options.styleTagTransform = styleTagTransform_default();
4352
+ tokens_options.setAttributes = setAttributesWithoutAttributes_default();
4353
+ tokens_options.insert = insertBySelector_default().bind(null, "head");
4354
+ tokens_options.domAPI = styleDomAPI_default();
4355
+ tokens_options.insertStyleElement = insertStyleElement_default();
4356
+ injectStylesIntoStyleTag_default()(tokens.A, tokens_options);
4357
+ tokens.A && tokens.A.locals && tokens.A.locals;
4358
+ function createDevTools(options = {}) {
4359
+ const { namespace = 'c15tStore', position = 'bottom-right', defaultOpen = false } = options;
4360
+ const stateManager = state_manager_createStateManager({
4361
+ position,
4362
+ isOpen: defaultOpen
4363
+ });
4364
+ let originalCallbacks = {};
4365
+ const storeConnector = store_connector_createStoreConnector({
4366
+ namespace,
4367
+ onConnect: (state, store)=>{
4368
+ stateManager.setConnected(true);
4369
+ stateManager.addEvent({
4370
+ type: 'info',
4371
+ message: 'Connected to c15tStore'
4372
+ });
4373
+ originalCallbacks = {
4374
+ ...state.callbacks
4375
+ };
4376
+ store.getState().setCallback('onBannerFetched', (payload)=>{
4377
+ stateManager.addEvent({
4378
+ type: 'info',
4379
+ message: `Banner fetched: ${String(payload.jurisdiction)}`,
4380
+ data: payload
4381
+ });
4382
+ if ('function' == typeof originalCallbacks.onBannerFetched) originalCallbacks.onBannerFetched(payload);
4383
+ });
4384
+ store.getState().setCallback('onConsentSet', (payload)=>{
4385
+ stateManager.addEvent({
4386
+ type: 'consent_set',
4387
+ message: 'Consent preferences updated',
4388
+ data: payload
4389
+ });
4390
+ if ('function' == typeof originalCallbacks.onConsentSet) originalCallbacks.onConsentSet(payload);
4391
+ });
4392
+ store.getState().setCallback('onError', (payload)=>{
4393
+ stateManager.addEvent({
4394
+ type: 'error',
4395
+ message: `Error: ${payload.error}`,
4396
+ data: payload
4397
+ });
4398
+ if ('function' == typeof originalCallbacks.onError) originalCallbacks.onError(payload);
4399
+ });
4400
+ store.getState().setCallback('onBeforeConsentRevocationReload', (payload)=>{
4401
+ stateManager.addEvent({
4402
+ type: 'info',
4403
+ message: 'Consent revocation - page will reload',
4404
+ data: payload
4405
+ });
4406
+ if ('function' == typeof originalCallbacks.onBeforeConsentRevocationReload) originalCallbacks.onBeforeConsentRevocationReload(payload);
4407
+ });
4408
+ },
4409
+ onDisconnect: ()=>{
4410
+ stateManager.setConnected(false);
4411
+ stateManager.addEvent({
4412
+ type: 'error',
4413
+ message: 'Disconnected from c15tStore'
4414
+ });
4415
+ },
4416
+ onStateChange: ()=>{}
4417
+ });
4418
+ let tabsInstance = null;
4419
+ const panelInstance = createPanel({
4420
+ stateManager,
4421
+ storeConnector,
4422
+ onRenderContent: (container)=>{
4423
+ renderContent(container, stateManager, storeConnector);
4424
+ }
4425
+ });
4426
+ function renderContent(container, stateManager, storeConnector) {
4427
+ clearElement(container);
4428
+ const storeState = storeConnector.getState();
4429
+ const disabledTabs = [];
4430
+ if (!storeState || 'iab' !== storeState.model) disabledTabs.push('iab');
4431
+ if (tabsInstance) tabsInstance.destroy();
4432
+ tabsInstance = tabs_createTabs({
4433
+ activeTab: stateManager.getState().activeTab,
4434
+ onTabChange: (tab)=>{
4435
+ stateManager.setActiveTab(tab);
4436
+ },
4437
+ disabledTabs
4438
+ });
4439
+ container.appendChild(tabsInstance.element);
4440
+ const panelContent = renderer_div({
4441
+ style: {
4442
+ display: 'flex',
4443
+ flexDirection: 'column',
4444
+ gap: '0'
4445
+ }
4446
+ });
4447
+ container.appendChild(panelContent);
4448
+ const state = stateManager.getState();
4449
+ const getStoreState = ()=>storeConnector.getState();
4450
+ switch(state.activeTab){
4451
+ case 'consents':
4452
+ consents_renderConsentsPanel(panelContent, {
4453
+ getState: getStoreState,
4454
+ onConsentChange: (name, value)=>{
4455
+ const store = storeConnector.getStore();
4456
+ if (store) {
4457
+ const consentName = String(name);
4458
+ store.getState().setSelectedConsent(consentName, value);
4459
+ stateManager.addEvent({
4460
+ type: 'info',
4461
+ message: `${consentName} toggled to ${value} (not saved)`,
4462
+ data: {
4463
+ name: consentName,
4464
+ value
4465
+ }
4466
+ });
4467
+ }
4468
+ },
4469
+ onSave: ()=>{
4470
+ const store = storeConnector.getStore();
4471
+ if (store) {
4472
+ store.getState().saveConsents('custom');
4473
+ stateManager.addEvent({
4474
+ type: 'consent_save',
4475
+ message: 'Saved consent preferences'
4476
+ });
4477
+ }
4478
+ },
4479
+ onAcceptAll: ()=>{
4480
+ const store = storeConnector.getStore();
4481
+ if (store) {
4482
+ store.getState().saveConsents('all');
4483
+ stateManager.addEvent({
4484
+ type: 'consent_save',
4485
+ message: 'Accepted all consents'
4486
+ });
4487
+ }
4488
+ },
4489
+ onRejectAll: ()=>{
4490
+ const store = storeConnector.getStore();
4491
+ if (store) {
4492
+ store.getState().saveConsents('necessary');
4493
+ stateManager.addEvent({
4494
+ type: 'consent_save',
4495
+ message: 'Rejected all optional consents'
4496
+ });
4497
+ }
4498
+ },
4499
+ onReset: async ()=>{
4500
+ const store = storeConnector.getStore();
4501
+ if (store) await reset_consents_resetAllConsents(store, stateManager);
4502
+ }
4503
+ });
4504
+ break;
4505
+ case 'location':
4506
+ location_renderLocationPanel(panelContent, {
4507
+ getState: getStoreState,
4508
+ onSetOverrides: async (overrides)=>{
4509
+ const store = storeConnector.getStore();
4510
+ if (store) {
4511
+ const currentOverrides = store.getState().overrides || {};
4512
+ await store.getState().setOverrides({
4513
+ ...currentOverrides,
4514
+ ...overrides
4515
+ });
4516
+ stateManager.addEvent({
4517
+ type: 'info',
4518
+ message: 'Overrides updated',
4519
+ data: overrides
4520
+ });
4521
+ await store.getState().initConsentManager();
4522
+ stateManager.addEvent({
4523
+ type: 'info',
4524
+ message: 'Consent manager re-initialized with new overrides'
4525
+ });
4526
+ }
4527
+ },
4528
+ onClearOverrides: async ()=>{
4529
+ const store = storeConnector.getStore();
4530
+ if (store) {
4531
+ await store.getState().setOverrides(void 0);
4532
+ stateManager.addEvent({
4533
+ type: 'info',
4534
+ message: 'Overrides cleared'
4535
+ });
4536
+ await store.getState().initConsentManager();
4537
+ stateManager.addEvent({
4538
+ type: 'info',
4539
+ message: 'Consent manager re-initialized'
4540
+ });
4541
+ }
4542
+ }
4543
+ });
4544
+ break;
4545
+ case "scripts":
4546
+ scripts_renderScriptsPanel(panelContent, {
4547
+ getState: getStoreState
4548
+ });
4549
+ break;
4550
+ case 'iab':
4551
+ iab_renderIabPanel(panelContent, {
4552
+ getState: getStoreState,
4553
+ onReset: async ()=>{
4554
+ const store = storeConnector.getStore();
4555
+ if (store) await reset_consents_resetAllConsents(store, stateManager);
4556
+ }
4557
+ });
4558
+ break;
4559
+ case 'events':
4560
+ events_renderEventsPanel(panelContent, {
4561
+ getEvents: ()=>stateManager.getState().eventLog,
4562
+ onClear: ()=>{
4563
+ stateManager.clearEventLog();
4564
+ stateManager.addEvent({
4565
+ type: 'info',
4566
+ message: 'Event log cleared'
4567
+ });
4568
+ }
4569
+ });
4570
+ break;
4571
+ case 'actions':
4572
+ actions_renderActionsPanel(panelContent, {
4573
+ getState: getStoreState,
4574
+ onResetConsents: async ()=>{
4575
+ const store = storeConnector.getStore();
4576
+ if (store) await reset_consents_resetAllConsents(store, stateManager);
4577
+ },
4578
+ onRefetchBanner: async ()=>{
4579
+ const store = storeConnector.getStore();
4580
+ if (store) {
4581
+ await store.getState().initConsentManager();
4582
+ stateManager.addEvent({
4583
+ type: 'info',
4584
+ message: 'Banner data refetched'
4585
+ });
4586
+ }
4587
+ },
4588
+ onShowBanner: ()=>{
4589
+ const store = storeConnector.getStore();
4590
+ if (store) {
4591
+ store.getState().setActiveUI('banner', {
4592
+ force: true
4593
+ });
4594
+ stateManager.addEvent({
4595
+ type: 'info',
4596
+ message: 'Banner shown'
4597
+ });
4598
+ }
4599
+ },
4600
+ onOpenPreferences: ()=>{
4601
+ const store = storeConnector.getStore();
4602
+ if (store) {
4603
+ store.getState().setActiveUI('dialog');
4604
+ stateManager.addEvent({
4605
+ type: 'info',
4606
+ message: 'Preference center opened'
4607
+ });
4608
+ }
4609
+ },
4610
+ onCopyState: ()=>{
4611
+ const state = storeConnector.getState();
4612
+ if (state) {
4613
+ const stateCopy = {
4614
+ consents: state.consents,
4615
+ consentInfo: state.consentInfo,
4616
+ locationInfo: state.locationInfo,
4617
+ model: state.model,
4618
+ overrides: state.overrides,
4619
+ scripts: state.scripts?.map((s)=>({
4620
+ id: s.id
4621
+ })),
4622
+ loadedScripts: state.loadedScripts
4623
+ };
4624
+ navigator.clipboard.writeText(JSON.stringify(stateCopy, null, 2)).then(()=>{
4625
+ stateManager.addEvent({
4626
+ type: 'info',
4627
+ message: 'State copied to clipboard'
4628
+ });
4629
+ }).catch(()=>{
4630
+ stateManager.addEvent({
4631
+ type: 'error',
4632
+ message: 'Failed to copy state'
4633
+ });
4634
+ });
4635
+ }
4636
+ }
4637
+ });
4638
+ break;
4639
+ }
4640
+ }
4641
+ storeConnector.subscribe(()=>{
4642
+ panelInstance.update();
4643
+ });
4644
+ const instance = {
4645
+ open: ()=>stateManager.setOpen(true),
4646
+ close: ()=>stateManager.setOpen(false),
4647
+ toggle: ()=>stateManager.toggle(),
4648
+ getState: ()=>{
4649
+ const state = stateManager.getState();
4650
+ return {
4651
+ isOpen: state.isOpen,
4652
+ activeTab: state.activeTab,
4653
+ isConnected: state.isConnected
4654
+ };
4655
+ },
4656
+ destroy: ()=>{
4657
+ tabsInstance?.destroy();
4658
+ panelInstance.destroy();
4659
+ storeConnector.destroy();
4660
+ stateManager.destroy();
4661
+ if ('undefined' != typeof window) delete window.__c15tDevTools;
4662
+ }
4663
+ };
4664
+ if ('undefined' != typeof window) window.__c15tDevTools = instance;
4665
+ return instance;
4666
+ }
4667
+ function C15TDevTools({ namespace = 'c15tStore', position = 'bottom-right', defaultOpen = false, disabled = false }) {
4668
+ const devtoolsRef = (0, external_react_namespaceObject.useRef)(null);
4669
+ (0, external_react_namespaceObject.useEffect)(()=>{
4670
+ if (disabled) return;
4671
+ if ('undefined' == typeof window) return;
4672
+ devtoolsRef.current = createDevTools({
4673
+ namespace,
4674
+ position,
4675
+ defaultOpen
4676
+ });
4677
+ return ()=>{
4678
+ devtoolsRef.current?.destroy();
4679
+ devtoolsRef.current = null;
4680
+ };
4681
+ }, [
4682
+ namespace,
4683
+ position,
4684
+ defaultOpen,
4685
+ disabled
4686
+ ]);
4687
+ return null;
4688
+ }
4689
+ })();
4690
+ exports.C15TDevTools = __webpack_exports__.C15TDevTools;
4691
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
4692
+ "C15TDevTools"
4693
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
4694
+ Object.defineProperty(exports, '__esModule', {
4695
+ value: true
4696
+ });