@tanstack/router-devtools-core 1.114.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/dist/cjs/AgeTicker.cjs +47 -0
  4. package/dist/cjs/AgeTicker.cjs.map +1 -0
  5. package/dist/cjs/AgeTicker.d.cts +6 -0
  6. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.cjs +505 -0
  7. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.cjs.map +1 -0
  8. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.d.cts +34 -0
  9. package/dist/cjs/Explorer.cjs +307 -0
  10. package/dist/cjs/Explorer.cjs.map +1 -0
  11. package/dist/cjs/Explorer.d.cts +43 -0
  12. package/dist/cjs/FloatingTanStackRouterDevtools.cjs +195 -0
  13. package/dist/cjs/FloatingTanStackRouterDevtools.cjs.map +1 -0
  14. package/dist/cjs/FloatingTanStackRouterDevtools.d.cts +48 -0
  15. package/dist/cjs/TanStackRouterDevtoolsCore.cjs +99 -0
  16. package/dist/cjs/TanStackRouterDevtoolsCore.cjs.map +1 -0
  17. package/dist/cjs/TanStackRouterDevtoolsCore.d.cts +55 -0
  18. package/dist/cjs/TanStackRouterDevtoolsPanelCore.cjs +99 -0
  19. package/dist/cjs/TanStackRouterDevtoolsPanelCore.cjs.map +1 -0
  20. package/dist/cjs/TanStackRouterDevtoolsPanelCore.d.cts +43 -0
  21. package/dist/cjs/context.cjs +20 -0
  22. package/dist/cjs/context.cjs.map +1 -0
  23. package/dist/cjs/context.d.cts +13 -0
  24. package/dist/cjs/index.cjs +7 -0
  25. package/dist/cjs/index.cjs.map +1 -0
  26. package/dist/cjs/index.d.cts +2 -0
  27. package/dist/cjs/logo.cjs +92 -0
  28. package/dist/cjs/logo.cjs.map +1 -0
  29. package/dist/cjs/logo.d.cts +1 -0
  30. package/dist/cjs/theme.d.cts +34 -0
  31. package/dist/cjs/tokens.cjs +201 -0
  32. package/dist/cjs/tokens.cjs.map +1 -0
  33. package/dist/cjs/tokens.d.cts +298 -0
  34. package/dist/cjs/useLocalStorage.cjs +42 -0
  35. package/dist/cjs/useLocalStorage.cjs.map +1 -0
  36. package/dist/cjs/useLocalStorage.d.cts +2 -0
  37. package/dist/cjs/useMediaQuery.d.cts +2 -0
  38. package/dist/cjs/useStyles.cjs +582 -0
  39. package/dist/cjs/useStyles.cjs.map +1 -0
  40. package/dist/cjs/useStyles.d.cts +53 -0
  41. package/dist/cjs/utils.cjs +63 -0
  42. package/dist/cjs/utils.cjs.map +1 -0
  43. package/dist/cjs/utils.d.cts +25 -0
  44. package/dist/esm/AgeTicker.d.ts +6 -0
  45. package/dist/esm/AgeTicker.js +47 -0
  46. package/dist/esm/AgeTicker.js.map +1 -0
  47. package/dist/esm/BaseTanStackRouterDevtoolsPanel.d.ts +34 -0
  48. package/dist/esm/BaseTanStackRouterDevtoolsPanel.js +505 -0
  49. package/dist/esm/BaseTanStackRouterDevtoolsPanel.js.map +1 -0
  50. package/dist/esm/Explorer.d.ts +43 -0
  51. package/dist/esm/Explorer.js +290 -0
  52. package/dist/esm/Explorer.js.map +1 -0
  53. package/dist/esm/FloatingTanStackRouterDevtools.d.ts +48 -0
  54. package/dist/esm/FloatingTanStackRouterDevtools.js +195 -0
  55. package/dist/esm/FloatingTanStackRouterDevtools.js.map +1 -0
  56. package/dist/esm/TanStackRouterDevtoolsCore.d.ts +55 -0
  57. package/dist/esm/TanStackRouterDevtoolsCore.js +99 -0
  58. package/dist/esm/TanStackRouterDevtoolsCore.js.map +1 -0
  59. package/dist/esm/TanStackRouterDevtoolsPanelCore.d.ts +43 -0
  60. package/dist/esm/TanStackRouterDevtoolsPanelCore.js +99 -0
  61. package/dist/esm/TanStackRouterDevtoolsPanelCore.js.map +1 -0
  62. package/dist/esm/context.d.ts +13 -0
  63. package/dist/esm/context.js +20 -0
  64. package/dist/esm/context.js.map +1 -0
  65. package/dist/esm/index.d.ts +2 -0
  66. package/dist/esm/index.js +7 -0
  67. package/dist/esm/index.js.map +1 -0
  68. package/dist/esm/logo.d.ts +1 -0
  69. package/dist/esm/logo.js +92 -0
  70. package/dist/esm/logo.js.map +1 -0
  71. package/dist/esm/theme.d.ts +34 -0
  72. package/dist/esm/tokens.d.ts +298 -0
  73. package/dist/esm/tokens.js +201 -0
  74. package/dist/esm/tokens.js.map +1 -0
  75. package/dist/esm/useLocalStorage.d.ts +2 -0
  76. package/dist/esm/useLocalStorage.js +43 -0
  77. package/dist/esm/useLocalStorage.js.map +1 -0
  78. package/dist/esm/useMediaQuery.d.ts +2 -0
  79. package/dist/esm/useStyles.d.ts +53 -0
  80. package/dist/esm/useStyles.js +565 -0
  81. package/dist/esm/useStyles.js.map +1 -0
  82. package/dist/esm/utils.d.ts +25 -0
  83. package/dist/esm/utils.js +63 -0
  84. package/dist/esm/utils.js.map +1 -0
  85. package/package.json +71 -0
  86. package/src/AgeTicker.tsx +59 -0
  87. package/src/BaseTanStackRouterDevtoolsPanel.tsx +559 -0
  88. package/src/Explorer.tsx +339 -0
  89. package/src/FloatingTanStackRouterDevtools.tsx +280 -0
  90. package/src/TanStackRouterDevtoolsCore.tsx +139 -0
  91. package/src/TanStackRouterDevtoolsPanelCore.tsx +120 -0
  92. package/src/context.ts +24 -0
  93. package/src/index.tsx +2 -0
  94. package/src/logo.tsx +817 -0
  95. package/src/theme.tsx +36 -0
  96. package/src/tokens.ts +305 -0
  97. package/src/useLocalStorage.ts +52 -0
  98. package/src/useMediaQuery.ts +44 -0
  99. package/src/useStyles.tsx +589 -0
  100. package/src/utils.tsx +185 -0
@@ -0,0 +1,589 @@
1
+ import * as goober from 'goober'
2
+ import { createSignal, useContext } from 'solid-js'
3
+ import { tokens } from './tokens'
4
+ import { ShadowDomTargetContext } from './context'
5
+ import type { Accessor } from 'solid-js'
6
+
7
+ const stylesFactory = (shadowDOMTarget?: ShadowRoot) => {
8
+ const { colors, font, size, alpha, shadow, border } = tokens
9
+ const { fontFamily, lineHeight, size: fontSize } = font
10
+ const css = shadowDOMTarget
11
+ ? goober.css.bind({ target: shadowDOMTarget })
12
+ : goober.css
13
+
14
+ return {
15
+ devtoolsPanelContainer: css`
16
+ direction: ltr;
17
+ position: fixed;
18
+ bottom: 0;
19
+ right: 0;
20
+ z-index: 99999;
21
+ width: 100%;
22
+ max-height: 90%;
23
+ border-top: 1px solid ${colors.gray[700]};
24
+ transform-origin: top;
25
+ `,
26
+ devtoolsPanelContainerVisibility: (isOpen: boolean) => {
27
+ return css`
28
+ visibility: ${isOpen ? 'visible' : 'hidden'};
29
+ `
30
+ },
31
+ devtoolsPanelContainerResizing: (isResizing: Accessor<boolean>) => {
32
+ if (isResizing()) {
33
+ return css`
34
+ transition: none;
35
+ `
36
+ }
37
+
38
+ return css`
39
+ transition: all 0.4s ease;
40
+ `
41
+ },
42
+ devtoolsPanelContainerAnimation: (isOpen: boolean, height: number) => {
43
+ if (isOpen) {
44
+ return css`
45
+ pointer-events: auto;
46
+ transform: translateY(0);
47
+ `
48
+ }
49
+ return css`
50
+ pointer-events: none;
51
+ transform: translateY(${height}px);
52
+ `
53
+ },
54
+ logo: css`
55
+ cursor: pointer;
56
+ display: flex;
57
+ flex-direction: column;
58
+ background-color: transparent;
59
+ border: none;
60
+ font-family: ${fontFamily.sans};
61
+ gap: ${tokens.size[0.5]};
62
+ padding: 0px;
63
+ &:hover {
64
+ opacity: 0.7;
65
+ }
66
+ &:focus-visible {
67
+ outline-offset: 4px;
68
+ border-radius: ${border.radius.xs};
69
+ outline: 2px solid ${colors.blue[800]};
70
+ }
71
+ `,
72
+ tanstackLogo: css`
73
+ font-size: ${font.size.md};
74
+ font-weight: ${font.weight.bold};
75
+ line-height: ${font.lineHeight.xs};
76
+ white-space: nowrap;
77
+ color: ${colors.gray[300]};
78
+ `,
79
+ routerLogo: css`
80
+ font-weight: ${font.weight.semibold};
81
+ font-size: ${font.size.xs};
82
+ background: linear-gradient(to right, #84cc16, #10b981);
83
+ background-clip: text;
84
+ -webkit-background-clip: text;
85
+ line-height: 1;
86
+ -webkit-text-fill-color: transparent;
87
+ white-space: nowrap;
88
+ `,
89
+ devtoolsPanel: css`
90
+ display: flex;
91
+ font-size: ${fontSize.sm};
92
+ font-family: ${fontFamily.sans};
93
+ background-color: ${colors.darkGray[700]};
94
+ color: ${colors.gray[300]};
95
+
96
+ @media (max-width: 700px) {
97
+ flex-direction: column;
98
+ }
99
+ @media (max-width: 600px) {
100
+ font-size: ${fontSize.xs};
101
+ }
102
+ `,
103
+ dragHandle: css`
104
+ position: absolute;
105
+ left: 0;
106
+ top: 0;
107
+ width: 100%;
108
+ height: 4px;
109
+ cursor: row-resize;
110
+ z-index: 100000;
111
+ &:hover {
112
+ background-color: ${colors.purple[400]}${alpha[90]};
113
+ }
114
+ `,
115
+ firstContainer: css`
116
+ flex: 1 1 500px;
117
+ min-height: 40%;
118
+ max-height: 100%;
119
+ overflow: auto;
120
+ border-right: 1px solid ${colors.gray[700]};
121
+ display: flex;
122
+ flex-direction: column;
123
+ `,
124
+ routerExplorerContainer: css`
125
+ overflow-y: auto;
126
+ flex: 1;
127
+ `,
128
+ routerExplorer: css`
129
+ padding: ${tokens.size[2]};
130
+ `,
131
+ row: css`
132
+ display: flex;
133
+ align-items: center;
134
+ padding: ${tokens.size[2]} ${tokens.size[2.5]};
135
+ gap: ${tokens.size[2.5]};
136
+ border-bottom: ${colors.darkGray[500]} 1px solid;
137
+ align-items: center;
138
+ `,
139
+ detailsHeader: css`
140
+ font-family: ui-sans-serif, Inter, system-ui, sans-serif, sans-serif;
141
+ position: sticky;
142
+ top: 0;
143
+ z-index: 2;
144
+ background-color: ${colors.darkGray[600]};
145
+ padding: 0px ${tokens.size[2]};
146
+ font-weight: ${font.weight.medium};
147
+ font-size: ${font.size.xs};
148
+ min-height: ${tokens.size[8]};
149
+ line-height: ${font.lineHeight.xs};
150
+ text-align: left;
151
+ display: flex;
152
+ align-items: center;
153
+ `,
154
+ maskedBadge: css`
155
+ background: ${colors.yellow[900]}${alpha[70]};
156
+ color: ${colors.yellow[300]};
157
+ display: inline-block;
158
+ padding: ${tokens.size[0]} ${tokens.size[2.5]};
159
+ border-radius: ${border.radius.full};
160
+ font-size: ${font.size.xs};
161
+ font-weight: ${font.weight.normal};
162
+ border: 1px solid ${colors.yellow[300]};
163
+ `,
164
+ maskedLocation: css`
165
+ color: ${colors.yellow[300]};
166
+ `,
167
+ detailsContent: css`
168
+ padding: ${tokens.size[1.5]} ${tokens.size[2]};
169
+ display: flex;
170
+ align-items: center;
171
+ justify-content: space-between;
172
+ font-size: ${font.size.xs};
173
+ `,
174
+ routeMatchesToggle: css`
175
+ display: flex;
176
+ align-items: center;
177
+ border: 1px solid ${colors.gray[500]};
178
+ border-radius: ${border.radius.sm};
179
+ overflow: hidden;
180
+ `,
181
+ routeMatchesToggleBtn: (active: boolean, showBorder: boolean) => {
182
+ const base = css`
183
+ appearance: none;
184
+ border: none;
185
+ font-size: 12px;
186
+ padding: 4px 8px;
187
+ background: transparent;
188
+ cursor: pointer;
189
+ font-family: ${fontFamily.sans};
190
+ font-weight: ${font.weight.medium};
191
+ `
192
+ const classes = [base]
193
+
194
+ if (active) {
195
+ const activeStyles = css`
196
+ background: ${colors.darkGray[400]};
197
+ color: ${colors.gray[300]};
198
+ `
199
+ classes.push(activeStyles)
200
+ } else {
201
+ const inactiveStyles = css`
202
+ color: ${colors.gray[500]};
203
+ background: ${colors.darkGray[800]}${alpha[20]};
204
+ `
205
+ classes.push(inactiveStyles)
206
+ }
207
+
208
+ if (showBorder) {
209
+ classes.push(css`
210
+ border-right: 1px solid ${tokens.colors.gray[500]};
211
+ `)
212
+ }
213
+
214
+ return classes
215
+ },
216
+ detailsHeaderInfo: css`
217
+ flex: 1;
218
+ justify-content: flex-end;
219
+ display: flex;
220
+ align-items: center;
221
+ font-weight: ${font.weight.normal};
222
+ color: ${colors.gray[400]};
223
+ `,
224
+ matchRow: (active: boolean) => {
225
+ const base = css`
226
+ display: flex;
227
+ border-bottom: 1px solid ${colors.darkGray[400]};
228
+ cursor: pointer;
229
+ align-items: center;
230
+ padding: ${size[1]} ${size[2]};
231
+ gap: ${size[2]};
232
+ font-size: ${fontSize.xs};
233
+ color: ${colors.gray[300]};
234
+ `
235
+ const classes = [base]
236
+
237
+ if (active) {
238
+ const activeStyles = css`
239
+ background: ${colors.darkGray[500]};
240
+ `
241
+ classes.push(activeStyles)
242
+ }
243
+
244
+ return classes
245
+ },
246
+ matchIndicator: (
247
+ color: 'green' | 'red' | 'yellow' | 'gray' | 'blue' | 'purple',
248
+ ) => {
249
+ const base = css`
250
+ flex: 0 0 auto;
251
+ width: ${size[3]};
252
+ height: ${size[3]};
253
+ background: ${colors[color][900]};
254
+ border: 1px solid ${colors[color][500]};
255
+ border-radius: ${border.radius.full};
256
+ transition: all 0.25s ease-out;
257
+ box-sizing: border-box;
258
+ `
259
+ const classes = [base]
260
+
261
+ if (color === 'gray') {
262
+ const grayStyles = css`
263
+ background: ${colors.gray[700]};
264
+ border-color: ${colors.gray[400]};
265
+ `
266
+ classes.push(grayStyles)
267
+ }
268
+
269
+ return classes
270
+ },
271
+ matchID: css`
272
+ flex: 1;
273
+ line-height: ${lineHeight['xs']};
274
+ `,
275
+ ageTicker: (showWarning: boolean) => {
276
+ const base = css`
277
+ display: flex;
278
+ gap: ${size[1]};
279
+ font-size: ${fontSize.xs};
280
+ color: ${colors.gray[400]};
281
+ font-variant-numeric: tabular-nums;
282
+ line-height: ${lineHeight['xs']};
283
+ `
284
+
285
+ const classes = [base]
286
+
287
+ if (showWarning) {
288
+ const warningStyles = css`
289
+ color: ${colors.yellow[400]};
290
+ `
291
+ classes.push(warningStyles)
292
+ }
293
+
294
+ return classes
295
+ },
296
+ secondContainer: css`
297
+ flex: 1 1 500px;
298
+ min-height: 40%;
299
+ max-height: 100%;
300
+ overflow: auto;
301
+ border-right: 1px solid ${colors.gray[700]};
302
+ display: flex;
303
+ flex-direction: column;
304
+ `,
305
+ thirdContainer: css`
306
+ flex: 1 1 500px;
307
+ overflow: auto;
308
+ display: flex;
309
+ flex-direction: column;
310
+ height: 100%;
311
+ border-right: 1px solid ${colors.gray[700]};
312
+
313
+ @media (max-width: 700px) {
314
+ border-top: 2px solid ${colors.gray[700]};
315
+ }
316
+ `,
317
+ fourthContainer: css`
318
+ flex: 1 1 500px;
319
+ min-height: 40%;
320
+ max-height: 100%;
321
+ overflow: auto;
322
+ display: flex;
323
+ flex-direction: column;
324
+ `,
325
+ routesContainer: css`
326
+ overflow-x: auto;
327
+ overflow-y: visible;
328
+ `,
329
+ routesRowContainer: (active: boolean, isMatch: boolean) => {
330
+ const base = css`
331
+ display: flex;
332
+ border-bottom: 1px solid ${colors.darkGray[400]};
333
+ align-items: center;
334
+ padding: ${size[1]} ${size[2]};
335
+ gap: ${size[2]};
336
+ font-size: ${fontSize.xs};
337
+ color: ${colors.gray[300]};
338
+ cursor: ${isMatch ? 'pointer' : 'default'};
339
+ line-height: ${lineHeight['xs']};
340
+ `
341
+ const classes = [base]
342
+
343
+ if (active) {
344
+ const activeStyles = css`
345
+ background: ${colors.darkGray[500]};
346
+ `
347
+ classes.push(activeStyles)
348
+ }
349
+
350
+ return classes
351
+ },
352
+ routesRow: (isMatch: boolean) => {
353
+ const base = css`
354
+ flex: 1 0 auto;
355
+ display: flex;
356
+ justify-content: space-between;
357
+ align-items: center;
358
+ font-size: ${fontSize.xs};
359
+ line-height: ${lineHeight['xs']};
360
+ `
361
+
362
+ const classes = [base]
363
+
364
+ if (!isMatch) {
365
+ const matchStyles = css`
366
+ color: ${colors.gray[400]};
367
+ `
368
+ classes.push(matchStyles)
369
+ }
370
+
371
+ return classes
372
+ },
373
+ routeParamInfo: css`
374
+ color: ${colors.gray[400]};
375
+ font-size: ${fontSize.xs};
376
+ line-height: ${lineHeight['xs']};
377
+ `,
378
+ nestedRouteRow: (isRoot: boolean) => {
379
+ const base = css`
380
+ margin-left: ${isRoot ? 0 : size[3.5]};
381
+ border-left: ${isRoot ? '' : `solid 1px ${colors.gray[700]}`};
382
+ `
383
+ return base
384
+ },
385
+ code: css`
386
+ font-size: ${fontSize.xs};
387
+ line-height: ${lineHeight['xs']};
388
+ `,
389
+ matchesContainer: css`
390
+ flex: 1 1 auto;
391
+ overflow-y: auto;
392
+ `,
393
+ cachedMatchesContainer: css`
394
+ flex: 1 1 auto;
395
+ overflow-y: auto;
396
+ max-height: 50%;
397
+ `,
398
+ maskedBadgeContainer: css`
399
+ flex: 1;
400
+ justify-content: flex-end;
401
+ display: flex;
402
+ `,
403
+ matchDetails: css`
404
+ display: flex;
405
+ flex-direction: column;
406
+ padding: ${tokens.size[2]};
407
+ font-size: ${tokens.font.size.xs};
408
+ color: ${tokens.colors.gray[300]};
409
+ line-height: ${tokens.font.lineHeight.sm};
410
+ `,
411
+ matchStatus: (
412
+ status: 'pending' | 'success' | 'error' | 'notFound' | 'redirected',
413
+ isFetching: false | 'beforeLoad' | 'loader',
414
+ ) => {
415
+ const colorMap = {
416
+ pending: 'yellow',
417
+ success: 'green',
418
+ error: 'red',
419
+ notFound: 'purple',
420
+ redirected: 'gray',
421
+ } as const
422
+
423
+ const color =
424
+ isFetching && status === 'success'
425
+ ? isFetching === 'beforeLoad'
426
+ ? 'purple'
427
+ : 'blue'
428
+ : colorMap[status]
429
+
430
+ return css`
431
+ display: flex;
432
+ justify-content: center;
433
+ align-items: center;
434
+ height: 40px;
435
+ border-radius: ${tokens.border.radius.sm};
436
+ font-weight: ${tokens.font.weight.normal};
437
+ background-color: ${tokens.colors[color][900]}${tokens.alpha[90]};
438
+ color: ${tokens.colors[color][300]};
439
+ border: 1px solid ${tokens.colors[color][600]};
440
+ margin-bottom: ${tokens.size[2]};
441
+ transition: all 0.25s ease-out;
442
+ `
443
+ },
444
+ matchDetailsInfo: css`
445
+ display: flex;
446
+ justify-content: flex-end;
447
+ flex: 1;
448
+ `,
449
+ matchDetailsInfoLabel: css`
450
+ display: flex;
451
+ `,
452
+ mainCloseBtn: css`
453
+ background: ${colors.darkGray[700]};
454
+ padding: ${size[1]} ${size[2]} ${size[1]} ${size[1.5]};
455
+ border-radius: ${border.radius.md};
456
+ position: fixed;
457
+ z-index: 99999;
458
+ display: inline-flex;
459
+ width: fit-content;
460
+ cursor: pointer;
461
+ appearance: none;
462
+ border: 0;
463
+ gap: 8px;
464
+ align-items: center;
465
+ border: 1px solid ${colors.gray[500]};
466
+ font-size: ${font.size.xs};
467
+ cursor: pointer;
468
+ transition: all 0.25s ease-out;
469
+
470
+ &:hover {
471
+ background: ${colors.darkGray[500]};
472
+ }
473
+ `,
474
+ mainCloseBtnPosition: (
475
+ position: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right',
476
+ ) => {
477
+ const base = css`
478
+ ${position === 'top-left' ? `top: ${size[2]}; left: ${size[2]};` : ''}
479
+ ${position === 'top-right' ? `top: ${size[2]}; right: ${size[2]};` : ''}
480
+ ${position === 'bottom-left'
481
+ ? `bottom: ${size[2]}; left: ${size[2]};`
482
+ : ''}
483
+ ${position === 'bottom-right'
484
+ ? `bottom: ${size[2]}; right: ${size[2]};`
485
+ : ''}
486
+ `
487
+ return base
488
+ },
489
+ mainCloseBtnAnimation: (isOpen: boolean) => {
490
+ if (!isOpen) {
491
+ return css`
492
+ opacity: 1;
493
+ pointer-events: auto;
494
+ visibility: visible;
495
+ `
496
+ }
497
+ return css`
498
+ opacity: 0;
499
+ pointer-events: none;
500
+ visibility: hidden;
501
+ `
502
+ },
503
+ routerLogoCloseButton: css`
504
+ font-weight: ${font.weight.semibold};
505
+ font-size: ${font.size.xs};
506
+ background: linear-gradient(to right, #98f30c, #00f4a3);
507
+ background-clip: text;
508
+ -webkit-background-clip: text;
509
+ line-height: 1;
510
+ -webkit-text-fill-color: transparent;
511
+ white-space: nowrap;
512
+ `,
513
+ mainCloseBtnDivider: css`
514
+ width: 1px;
515
+ background: ${tokens.colors.gray[600]};
516
+ height: 100%;
517
+ border-radius: 999999px;
518
+ color: transparent;
519
+ `,
520
+ mainCloseBtnIconContainer: css`
521
+ position: relative;
522
+ width: ${size[5]};
523
+ height: ${size[5]};
524
+ background: pink;
525
+ border-radius: 999999px;
526
+ overflow: hidden;
527
+ `,
528
+ mainCloseBtnIconOuter: css`
529
+ width: ${size[5]};
530
+ height: ${size[5]};
531
+ position: absolute;
532
+ top: 50%;
533
+ left: 50%;
534
+ transform: translate(-50%, -50%);
535
+ filter: blur(3px) saturate(1.8) contrast(2);
536
+ `,
537
+ mainCloseBtnIconInner: css`
538
+ width: ${size[4]};
539
+ height: ${size[4]};
540
+ position: absolute;
541
+ top: 50%;
542
+ left: 50%;
543
+ transform: translate(-50%, -50%);
544
+ `,
545
+ panelCloseBtn: css`
546
+ position: absolute;
547
+ cursor: pointer;
548
+ z-index: 100001;
549
+ display: flex;
550
+ align-items: center;
551
+ justify-content: center;
552
+ outline: none;
553
+ background-color: ${colors.darkGray[700]};
554
+ &:hover {
555
+ background-color: ${colors.darkGray[500]};
556
+ }
557
+
558
+ top: 0;
559
+ right: ${size[2]};
560
+ transform: translate(0, -100%);
561
+ border-right: ${colors.darkGray[300]} 1px solid;
562
+ border-left: ${colors.darkGray[300]} 1px solid;
563
+ border-top: ${colors.darkGray[300]} 1px solid;
564
+ border-bottom: none;
565
+ border-radius: ${border.radius.sm} ${border.radius.sm} 0px 0px;
566
+ padding: ${size[1]} ${size[1.5]} ${size[0.5]} ${size[1.5]};
567
+
568
+ &::after {
569
+ content: ' ';
570
+ position: absolute;
571
+ top: 100%;
572
+ left: -${size[2.5]};
573
+ height: ${size[1.5]};
574
+ width: calc(100% + ${size[5]});
575
+ }
576
+ `,
577
+ panelCloseBtnIcon: css`
578
+ color: ${colors.gray[400]};
579
+ width: ${size[2]};
580
+ height: ${size[2]};
581
+ `,
582
+ }
583
+ }
584
+
585
+ export function useStyles() {
586
+ const shadowDomTarget = useContext(ShadowDomTargetContext)
587
+ const [_styles] = createSignal(stylesFactory(shadowDomTarget))
588
+ return _styles
589
+ }