doccupine 0.0.1-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 (62) hide show
  1. package/README.md +65 -0
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.js +532 -0
  4. package/dist/templates/click-outside.d.ts +1 -0
  5. package/dist/templates/click-outside.js +28 -0
  6. package/dist/templates/code.d.ts +1 -0
  7. package/dist/templates/code.js +192 -0
  8. package/dist/templates/components/ClickOutside.d.ts +1 -0
  9. package/dist/templates/components/ClickOutside.js +27 -0
  10. package/dist/templates/components/Docs.d.ts +1 -0
  11. package/dist/templates/components/Docs.js +52 -0
  12. package/dist/templates/components/SideBar.d.ts +1 -0
  13. package/dist/templates/components/SideBar.js +80 -0
  14. package/dist/templates/components/layout/Code.d.ts +1 -0
  15. package/dist/templates/components/layout/Code.js +192 -0
  16. package/dist/templates/components/layout/DocsComponents.d.ts +1 -0
  17. package/dist/templates/components/layout/DocsComponents.js +444 -0
  18. package/dist/templates/components/layout/Footer.d.ts +1 -0
  19. package/dist/templates/components/layout/Footer.js +8 -0
  20. package/dist/templates/components/layout/Header.d.ts +1 -0
  21. package/dist/templates/components/layout/Header.js +280 -0
  22. package/dist/templates/components/layout/Icon.d.ts +1 -0
  23. package/dist/templates/components/layout/Icon.js +19 -0
  24. package/dist/templates/components/layout/Pictograms.d.ts +1 -0
  25. package/dist/templates/components/layout/Pictograms.js +66 -0
  26. package/dist/templates/components/layout/SharedStyles.d.ts +1 -0
  27. package/dist/templates/components/layout/SharedStyles.js +791 -0
  28. package/dist/templates/components/layout/ThemeToggle.d.ts +1 -0
  29. package/dist/templates/components/layout/ThemeToggle.js +123 -0
  30. package/dist/templates/components/layout/Typography.d.ts +1 -0
  31. package/dist/templates/components/layout/Typography.js +51 -0
  32. package/dist/templates/docs-components.d.ts +1 -0
  33. package/dist/templates/docs-components.js +441 -0
  34. package/dist/templates/docs.d.ts +1 -0
  35. package/dist/templates/docs.js +48 -0
  36. package/dist/templates/footer.d.ts +1 -0
  37. package/dist/templates/footer.js +9 -0
  38. package/dist/templates/gitignore.d.ts +1 -0
  39. package/dist/templates/gitignore.js +41 -0
  40. package/dist/templates/header.d.ts +1 -0
  41. package/dist/templates/header.js +275 -0
  42. package/dist/templates/home.d.ts +1 -0
  43. package/dist/templates/home.js +79 -0
  44. package/dist/templates/icon.d.ts +1 -0
  45. package/dist/templates/icon.js +20 -0
  46. package/dist/templates/layout.d.ts +1 -0
  47. package/dist/templates/layout.js +66 -0
  48. package/dist/templates/not-found.d.ts +1 -0
  49. package/dist/templates/not-found.js +22 -0
  50. package/dist/templates/pictograms.d.ts +1 -0
  51. package/dist/templates/pictograms.js +67 -0
  52. package/dist/templates/shared-styles.d.ts +1 -0
  53. package/dist/templates/shared-styles.js +792 -0
  54. package/dist/templates/theme-toggle.d.ts +1 -0
  55. package/dist/templates/theme-toggle.js +111 -0
  56. package/dist/templates/theme.d.ts +1 -0
  57. package/dist/templates/theme.js +291 -0
  58. package/dist/templates/typography.d.ts +1 -0
  59. package/dist/templates/typography.js +52 -0
  60. package/dist/templates/utils/orderNavItems.d.ts +1 -0
  61. package/dist/templates/utils/orderNavItems.js +45 -0
  62. package/package.json +44 -0
@@ -0,0 +1,792 @@
1
+ export const sharedStyledTemplate = `
2
+ "use client";
3
+ import {
4
+ mq,
5
+ resetButton,
6
+ styledH3,
7
+ styledSmall,
8
+ styledText,
9
+ Theme,
10
+ } from "cherry-styled-components/src/lib";
11
+ import { rgba } from "polished";
12
+ import Link from "next/link";
13
+ import styled, { css } from "styled-components";
14
+ import { StyledH1 } from "@/app/components/layout/Typography";
15
+
16
+ export const interactiveStyles = css<{ theme: Theme }>\`
17
+ transition: all 0.3s ease;
18
+ border: solid 1px transparent;
19
+ box-shadow: 0 0 0 0px \${({ theme }) => theme.colors.primary};
20
+
21
+ @media (hover: hover) {
22
+ &:hover {
23
+ border-color: \${({ theme }) => theme.colors.primary};
24
+ }
25
+ }
26
+
27
+ &:focus {
28
+ border-color: \${({ theme }) => theme.colors.primary};
29
+ box-shadow: 0 0 0 4px \${({ theme }) => theme.colors.primaryLight};
30
+ }
31
+
32
+ &:active {
33
+ box-shadow: 0 0 0 2px \${({ theme }) => theme.colors.primaryLight};
34
+ }
35
+ \`;
36
+
37
+ export const StyledPriceHeader = styled.div<{ theme: Theme }>\`
38
+ border-radius: \${({ theme }) => theme.spacing.radius.lg};
39
+ border: solid 1px \${({ theme }) => theme.colors.grayLight};
40
+ padding: 20px;
41
+ display: flex;
42
+ gap: 20px;
43
+
44
+ & strong {
45
+ margin: auto 0;
46
+ color: \${({ theme }) => theme.colors.dark};
47
+ }
48
+ \`;
49
+
50
+ export const StyledPrice = styled.span<{
51
+ theme: Theme;
52
+ $textAlign?: "left" | "center" | "right";
53
+ }>\`
54
+ color: \${({ theme }) => theme.colors.dark};
55
+ display: block;
56
+ font-weight: 800;
57
+ \${({ theme }) => styledH3(theme)}
58
+ \${({ $textAlign }) =>
59
+ $textAlign &&
60
+ css\`
61
+ text-align: \${$textAlign};
62
+ \`}
63
+ \`;
64
+
65
+ export const StyledSmall = styled.small<{
66
+ theme: Theme;
67
+ $textAlign?: "left" | "center" | "right";
68
+ }>\`
69
+ \${({ theme }) => styledSmall(theme)};
70
+ margin: auto 0;
71
+ display: block;
72
+ color: \${({ theme }) => theme.colors.grayDark};
73
+ \${({ $textAlign }) =>
74
+ $textAlign &&
75
+ css\`
76
+ text-align: \${$textAlign};
77
+ \`}
78
+ \`;
79
+
80
+ export const StyledMinHeight = styled.div\`
81
+ min-height: calc(100svh - 100px);
82
+
83
+ \${mq("lg")} {
84
+ min-height: calc(100svh - 120px);
85
+ }
86
+ \`;
87
+
88
+ export const StyledDataUserAvatar = styled.span<{ theme: Theme }>\`
89
+ display: inline-flex;
90
+ justify-content: center;
91
+ min-width: 50px;
92
+ min-height: 50px;
93
+ border-radius: 50%;
94
+ border: solid 2px \${({ theme }) => theme.colors.grayLight};
95
+ background: \${({ theme }) => theme.colors.light};
96
+ position: relative;
97
+ overflow: hidden;
98
+ color: \${({ theme }) => theme.colors.primary};
99
+
100
+ & img {
101
+ position: absolute;
102
+ top: 50%;
103
+ left: 50%;
104
+ transform: translate(-50%, -50%);
105
+ width: 100%;
106
+ height: 100%;
107
+ object-fit: cover;
108
+ pointer-events: none;
109
+ }
110
+
111
+ & svg {
112
+ pointer-events: none;
113
+ margin: auto;
114
+ transition: none;
115
+ }
116
+ \`;
117
+
118
+ export const StyledDataArrowButton = styled.button<{
119
+ theme: Theme;
120
+ $isActive: boolean;
121
+ }>\`
122
+ \${resetButton};
123
+ display: flex;
124
+ gap: 5px;
125
+ min-width: fit-content;
126
+
127
+ & .avatar,
128
+ & .clickable {
129
+ box-shadow: 0 0 0 0px \${({ theme }) => theme.colors.primary};
130
+ transition: all 0.3s ease;
131
+ }
132
+
133
+ & svg {
134
+ color: \${({ theme }) => theme.colors.primary};
135
+ }
136
+
137
+ @media (hover: hover) {
138
+ &:hover {
139
+ & .lucide-chevron-down {
140
+ & path {
141
+ stroke: \${({ theme }) => theme.colors.primaryDark};
142
+ }
143
+ }
144
+
145
+ & .avatar,
146
+ & .clickable {
147
+ border-color: \${({ theme }) => theme.colors.primary};
148
+ }
149
+ }
150
+ }
151
+
152
+ &:focus {
153
+ & .avatar,
154
+ & .clickable {
155
+ border-color: \${({ theme }) => theme.colors.primary};
156
+ box-shadow: 0 0 0 4px \${({ theme }) => theme.colors.primaryLight};
157
+ }
158
+ }
159
+
160
+ &:active {
161
+ & .avatar,
162
+ & .clickable {
163
+ box-shadow: 0 0 0 2px \${({ theme }) => theme.colors.primaryLight};
164
+ }
165
+ }
166
+
167
+ & svg {
168
+ margin: auto 0;
169
+ }
170
+
171
+ \${({ $isActive }) =>
172
+ $isActive &&
173
+ css\`
174
+ & .lucide-chevron-down {
175
+ transform: rotate(180deg);
176
+ }
177
+ \`}
178
+ \`;
179
+
180
+ export const StyledDataSpan = styled.span<{ theme: Theme }>\`
181
+ display: block;
182
+ font-weight: 500;
183
+ \${({ theme }) => styledText(theme)};
184
+ color: \${({ theme }) => theme.colors.primary};
185
+ font-family: \${({ theme }) => theme.fonts.text};
186
+ \`;
187
+
188
+ export const StyledDataDropdownHoverWrapper = styled.span<{
189
+ theme: Theme;
190
+ $align?: "center";
191
+ }>\`
192
+ position: relative;
193
+ display: block;
194
+ padding: 10px 0;
195
+ margin: -10px 0;
196
+
197
+ &:hover {
198
+ & ul {
199
+ pointer-events: all;
200
+ opacity: 1;
201
+ transform: \${({ $align }) =>
202
+ $align === "center"
203
+ ? "translateX(-50%) translateY(0)"
204
+ : "translateY(0)"};
205
+ }
206
+
207
+ & .lucide-chevron-down {
208
+ transform: rotate(180deg);
209
+ }
210
+ }
211
+
212
+ &:active {
213
+ & ul {
214
+ opacity: 0;
215
+ }
216
+ }
217
+ \`;
218
+
219
+ export const StyledDataDropdownWrapper = styled.span<{
220
+ theme: Theme;
221
+ $isAbsolute?: boolean;
222
+ $marginAuto?: boolean;
223
+ }>\`
224
+ position: relative;
225
+ display: flex;
226
+ padding: 10px 0;
227
+ margin: -10px 0;
228
+
229
+ & span {
230
+ display: flex;
231
+ margin: auto 0;
232
+ }
233
+
234
+ \${({ $isAbsolute }) =>
235
+ $isAbsolute &&
236
+ css\`
237
+ margin: 0;
238
+ padding: 0;
239
+ \`}
240
+
241
+ \${({ $marginAuto }) => $marginAuto && \`margin: auto 0;\`}
242
+ \`;
243
+
244
+ export const StyledDataDropdown = styled.ul<{
245
+ theme: Theme;
246
+ $isActive?: boolean;
247
+ $align?: "left" | "center";
248
+ $isTop?: boolean;
249
+ $isAbsolute?: boolean;
250
+ $minWidth?: string;
251
+ }>\`
252
+ position: absolute;
253
+ display: block;
254
+ top: 100%;
255
+ right: 0;
256
+ list-style: none;
257
+ transition: all 0.3s ease;
258
+ min-width: \${({ $minWidth }) => ($minWidth ? $minWidth : "200px")};
259
+ text-align: left;
260
+ box-shadow: \${({ theme }) => theme.shadows.sm};
261
+ background: \${({ theme }) => theme.colors.light};
262
+ border-radius: \${({ theme }) => theme.spacing.radius.lg};
263
+ overflow: hidden;
264
+ border: solid 1px \${({ theme }) => theme.colors.grayLight};
265
+ transition: all 0.3s ease;
266
+ opacity: 0;
267
+ pointer-events: none;
268
+ transform: translateY(-10px);
269
+ z-index: 999;
270
+
271
+ \${({ $isAbsolute }) =>
272
+ $isAbsolute &&
273
+ css\`
274
+ top: calc(100% + 56px);
275
+ right: 20px;
276
+ \`}
277
+
278
+ \${({ $isTop }) => $isTop && \`top: initial; bottom: 100%;\`}
279
+
280
+ \${({ $align }) => $align === "left" && \`right: initial; left: 0;\`}
281
+ \${({ $align }) =>
282
+ $align === "center" &&
283
+ \`right: initial; left: 50%; transform: translateX(-50%) translateY(-10px);\`}
284
+
285
+ \${({ $isActive, $align }) =>
286
+ $isActive &&
287
+ css\`
288
+ pointer-events: all;
289
+ opacity: 1;
290
+ transform: translateY(0);
291
+
292
+ \${$align === "center" &&
293
+ \`right: initial; left: 50%; transform: translateX(-50%) translateY(0);\`}
294
+ \`}
295
+ \`;
296
+
297
+ export const StyledDataDropdownItem = styled.li<{ theme: Theme }>\`
298
+ display: flex;
299
+ width: 100%;
300
+ text-align: left;
301
+ border-bottom: solid 1px \${({ theme }) => theme.colors.grayLight};
302
+
303
+ &:last-of-type,
304
+ &:only-of-type {
305
+ border-bottom: none;
306
+ }
307
+
308
+ & form {
309
+ width: 100%;
310
+ margin: 0;
311
+ padding: 0;
312
+ }
313
+
314
+ & a,
315
+ & button,
316
+ & .logout-button {
317
+ \${resetButton};
318
+ width: 100%;
319
+ text-align: left;
320
+ padding: 12px 20px;
321
+ font-weight: 600;
322
+ font-family: inherit;
323
+ color: \${({ theme }) => theme.colors.primary};
324
+ font-size: \${({ theme }) => theme.fontSizes.text.lg};
325
+ text-decoration: none;
326
+ transition: all 0.3s ease;
327
+ border-radius: 0;
328
+ background: transparent;
329
+ display: flex;
330
+ gap: 10px;
331
+ height: auto;
332
+ min-height: 45px;
333
+
334
+ @media (hover: hover) {
335
+ &:hover {
336
+ background-color: \${({ theme }) =>
337
+ rgba(
338
+ theme.isDark ? theme.colors.primaryDark : theme.colors.primaryLight,
339
+ 0.1,
340
+ )};
341
+ color: \${({ theme }) =>
342
+ theme.isDark ? theme.colors.primaryLight : theme.colors.primaryDark};
343
+ }
344
+ }
345
+
346
+ &:active,
347
+ &:focus {
348
+ box-shadow: none;
349
+ }
350
+
351
+ * {
352
+ margin: auto 0;
353
+ }
354
+
355
+ &:focus {
356
+ background-color: \${({ theme }) =>
357
+ rgba(
358
+ theme.isDark ? theme.colors.primaryDark : theme.colors.primaryLight,
359
+ 0.15,
360
+ )};
361
+ }
362
+
363
+ &:active {
364
+ background-color: \${({ theme }) =>
365
+ rgba(
366
+ theme.isDark ? theme.colors.primaryDark : theme.colors.primaryLight,
367
+ 0.2,
368
+ )};
369
+ }
370
+ }
371
+
372
+ & button {
373
+ border: none;
374
+
375
+ & svg {
376
+ margin: -2px -5px;
377
+ }
378
+ }
379
+ \`;
380
+
381
+ export const StyledDataDropdownButton = styled.button<{ theme: Theme }>\`
382
+ \${resetButton};
383
+ \`;
384
+
385
+ export const StyledDataDropdownSelectWrapper = styled.span<{ theme: Theme }>\`
386
+ padding: 5px;
387
+ display: block;
388
+ width: 100%;
389
+
390
+ & select {
391
+ width: 100%;
392
+ }
393
+ \`;
394
+
395
+ export const StyledDataTagButton = styled.button<{ theme: Theme }>\`
396
+ \${resetButton};
397
+ position: absolute;
398
+ top: 0;
399
+ width: 24px;
400
+ height: 100%;
401
+ right: 0;
402
+ border-left: solid 1px
403
+ \${({ theme }) =>
404
+ rgba(theme.isDark ? theme.colors.dark : theme.colors.light, 0.2)};
405
+ transition: all 0.3s ease;
406
+
407
+ @media (hover: hover) {
408
+ &:hover {
409
+ background: \${({ theme }) =>
410
+ rgba(theme.isDark ? theme.colors.dark : theme.colors.light, 0.2)};
411
+ }
412
+ }
413
+
414
+ & svg {
415
+ width: 16px;
416
+ height: 100%;
417
+ vertical-align: middle;
418
+
419
+ & path {
420
+ stroke: \${({ theme }) =>
421
+ theme.isDark ? theme.colors.dark : theme.colors.light};
422
+ }
423
+ }
424
+ \`;
425
+
426
+ export const StyledDataTag = styled.span<{
427
+ theme: Theme;
428
+ $color?: "default" | "warning";
429
+ $capitalize?: boolean;
430
+ }>\`
431
+ display: inline-block;
432
+ border-radius: \${({ theme }) => theme.spacing.radius.xs};
433
+ background: \${({ theme, $color }) =>
434
+ $color === "warning" ? theme.colors.warning : theme.colors.primary};
435
+ color: \${({ theme }) =>
436
+ theme.isDark ? theme.colors.dark : theme.colors.light};
437
+ font-size: \${({ theme }) => theme.fontSizes.small.xs};
438
+ position: relative;
439
+ font-weight: 500;
440
+ padding: 5px 10px;
441
+ margin: auto 0;
442
+ overflow: hidden;
443
+ \${({ $capitalize }) =>
444
+ $capitalize &&
445
+ css\`
446
+ text-transform: capitalize;
447
+ \`}
448
+
449
+ &:has(button) {
450
+ padding: 5px 35px 5px 10px;
451
+ }
452
+ \`;
453
+
454
+ export const StyledIllustration = styled.div<{ theme: Theme }>\`
455
+ text-align: center;
456
+
457
+ & svg {
458
+ height: auto;
459
+ width: 250px;
460
+ margin: auto;
461
+ }
462
+ \`;
463
+
464
+ export const StyledIllustrationText = styled.p<{ theme: Theme }>\`
465
+ color: \${({ theme }) => theme.colors.dark};
466
+ \${({ theme }) => styledSmall(theme)};
467
+ \`;
468
+
469
+ export const StyledDataText = styled.div<{ theme: Theme; $gray?: boolean }>\`
470
+ \${({ theme }) => styledText(theme)};
471
+ color: \${({ theme, $gray }) =>
472
+ $gray ? theme.colors.grayDark : theme.colors.dark};
473
+ \`;
474
+
475
+ export const StyledDataHeader = styled.h1<{ theme: Theme }>\`
476
+ \${({ theme }) => styledH3(theme)};
477
+ font-weight: 900;
478
+ color: \${({ theme }) => theme.colors.dark};
479
+ \`;
480
+
481
+ export const StyledMobileOnly = styled.em<{ theme: Theme }>\`
482
+ font-style: normal;
483
+ display: inline;
484
+
485
+ \${mq("lg")} {
486
+ display: none;
487
+ }
488
+ \`;
489
+
490
+ export const StyledDesktopOnly = styled.em<{ theme: Theme }>\`
491
+ font-style: normal;
492
+ display: none;
493
+
494
+ \${mq("lg")} {
495
+ display: inline;
496
+ }
497
+ \`;
498
+
499
+ export const StyledTinyMobileOnly = styled.em<{ theme: Theme }>\`
500
+ font-style: normal;
501
+ display: flex;
502
+
503
+ @media screen and (min-width: 426px) {
504
+ display: none;
505
+ }
506
+ \`;
507
+
508
+ export const StyledTinyDesktopOnly = styled.em<{ theme: Theme }>\`
509
+ font-style: normal;
510
+ display: none;
511
+
512
+ @media screen and (min-width: 426px) {
513
+ display: flex;
514
+ }
515
+ \`;
516
+
517
+ export const StyledAlignMiddle = styled.div<{ theme: Theme }>\`
518
+ margin: auto 0;
519
+ \`;
520
+
521
+ export const StyledLoadingOverlay = styled.div<{
522
+ theme: Theme;
523
+ $isActive?: boolean;
524
+ }>\`
525
+ border-radius: \${({ theme }) => theme.spacing.radius.lg};
526
+ position: absolute;
527
+ top: 0;
528
+ left: 0;
529
+ width: 100%;
530
+ height: 100%;
531
+ background-color: \${({ theme }) => theme.colors.light};
532
+ z-index: 1000;
533
+ display: flex;
534
+ transition: all 0.3s ease;
535
+ opacity: 0;
536
+ pointer-events: none;
537
+
538
+ \${({ $isActive }) =>
539
+ $isActive &&
540
+ css\`
541
+ opacity: 1;
542
+ pointer-events: all;
543
+ \`}
544
+
545
+ & > * {
546
+ margin: auto;
547
+ }
548
+ \`;
549
+
550
+ export const StyledFlex1 = styled.div\`
551
+ flex: 1;
552
+ \`;
553
+
554
+ export const StyledIconCircle = styled.span<{ theme: Theme }>\`
555
+ border-radius: 50%;
556
+ width: 40px;
557
+ height: 40px;
558
+ min-width: 40px;
559
+ min-height: 40px;
560
+ border: solid 1px \${({ theme }) => theme.colors.grayLight};
561
+ display: inline-flex;
562
+ color: \${({ theme }) => theme.colors.primary};
563
+ vertical-align: middle;
564
+
565
+ & svg {
566
+ margin: auto;
567
+ }
568
+ \`;
569
+
570
+ export const StyledStrong = styled.span<{ theme: Theme }>\`
571
+ display: block;
572
+ margin: auto 0;
573
+ color: \${({ theme }) => theme.colors.primary};
574
+ font-weight: 700;
575
+ \`;
576
+
577
+ export const StyledTextMiddle = styled.span<{ theme: Theme }>\`
578
+ display: block;
579
+ margin: auto 0;
580
+ color: \${({ theme }) => theme.colors.dark};
581
+ text-align: left;
582
+ \`;
583
+
584
+ export const StyledPanelWrapper = styled.div<{ theme: Theme }>\`
585
+ position: relative;
586
+ z-index: 100;
587
+
588
+ & input {
589
+ position: relative;
590
+ z-index: 10;
591
+ }
592
+ \`;
593
+
594
+ export const StyledPanel = styled.div<{ theme: Theme; $absolute?: boolean }>\`
595
+ background: \${({ theme }) => theme.colors.light};
596
+ border: solid 2px \${({ theme }) => theme.colors.grayLight};
597
+ border-radius: \${({ theme }) => theme.spacing.radius.xs};
598
+ margin: \${({ $absolute }) => ($absolute ? "-10px 0 0 0" : "0")};
599
+ \${({ $absolute }) =>
600
+ $absolute &&
601
+ css\`
602
+ position: absolute;
603
+ width: 100%;
604
+ border-top-left-radius: 0;
605
+ border-top-right-radius: 0;
606
+ \`}
607
+ max-height: calc(63px * 3);
608
+ overflow-y: auto;
609
+ \`;
610
+
611
+ export const StyledPanelLabel = styled.div<{ theme: Theme; $moveUp?: boolean }>\`
612
+ font-size: \${({ theme }) => theme.fontSizes.small.xs};
613
+ border-bottom: solid 1px \${({ theme }) => theme.colors.grayLight};
614
+ color: \${({ theme }) => theme.colors.gray};
615
+ padding: \${({ $moveUp }) => ($moveUp ? "20px 15px 10px" : "20px 15px")};
616
+ \`;
617
+
618
+ export const StyledPanelContent = styled.div<{ theme: Theme }>\`
619
+ display: flex;
620
+ padding: 15px;
621
+ gap: 10px;
622
+ border-bottom: solid 1px \${({ theme }) => theme.colors.grayLight};
623
+ width: 100%;
624
+ text-align: left;
625
+ font-family: \${({ theme }) => theme.fonts.text};
626
+ font-size: \${({ theme }) => theme.fontSizes.text.xs};
627
+ line-height: \${({ theme }) => theme.lineHeights.text.xs};
628
+ font-weight: 500;
629
+ color: \${({ theme }) => theme.colors.primary};
630
+ transition: all 0.3s ease;
631
+
632
+ \${mq("lg")} {
633
+ font-size: \${({ theme }) => theme.fontSizes.text.lg};
634
+ line-height: \${({ theme }) => theme.lineHeights.text.lg};
635
+ }
636
+
637
+ &:last-of-type {
638
+ border-bottom: none;
639
+ }
640
+ \`;
641
+
642
+ export const StyledPanelButton = styled(Link)<{ theme: Theme }>\`
643
+ \${resetButton};
644
+ display: flex;
645
+ padding: 15px;
646
+ gap: 10px;
647
+ border-bottom: solid 1px \${({ theme }) => theme.colors.grayLight};
648
+ width: 100%;
649
+ text-align: left;
650
+ font-family: \${({ theme }) => theme.fonts.text};
651
+ font-size: \${({ theme }) => theme.fontSizes.text.xs};
652
+ line-height: \${({ theme }) => theme.lineHeights.text.xs};
653
+ font-weight: 500;
654
+ color: \${({ theme }) => theme.colors.primary};
655
+ text-decoration: none;
656
+ transition: all 0.3s ease;
657
+
658
+ @media (hover: hover) {
659
+ &:hover {
660
+ background-color: \${({ theme }) => rgba(theme.colors.primaryLight, 0.1)};
661
+
662
+ & .link {
663
+ border-color: \${({ theme }) => theme.colors.primaryDark};
664
+ }
665
+ }
666
+ }
667
+
668
+ &:focus {
669
+ background-color: \${({ theme }) => rgba(theme.colors.primaryLight, 0.15)};
670
+
671
+ & .link {
672
+ box-shadow: 0 0 0 4px \${({ theme }) => theme.colors.primaryLight};
673
+ border-color: \${({ theme }) => theme.colors.primary};
674
+ }
675
+ }
676
+
677
+ &:active {
678
+ background-color: \${({ theme }) => rgba(theme.colors.primaryLight, 0.2)};
679
+
680
+ & .link {
681
+ box-shadow: 0 0 0 2px \${({ theme }) => theme.colors.primaryLight};
682
+ }
683
+ }
684
+
685
+ \${mq("lg")} {
686
+ font-size: \${({ theme }) => theme.fontSizes.text.lg};
687
+ line-height: \${({ theme }) => theme.lineHeights.text.lg};
688
+ }
689
+
690
+ &:last-of-type {
691
+ border-bottom: none;
692
+ }
693
+
694
+ & .link {
695
+ transition: all 0.3s ease;
696
+ pointer-events: none;
697
+ }
698
+ \`;
699
+
700
+ export const StyledPanelSpan = styled.span<{ theme: Theme }>\`
701
+ margin: auto 0;
702
+ display: flex;
703
+ flex: 1;
704
+ line-height: 1.5;
705
+ \`;
706
+
707
+ export const editableContent = css<{ theme: Theme }>\`
708
+ border: dotted 1px transparent;
709
+ border-radius: \${({ theme }) => theme.spacing.radius.xs};
710
+ transition: all 0.3s ease;
711
+ outline: none;
712
+ cursor: text;
713
+
714
+ &:hover {
715
+ border: dotted 1px \${({ theme }) => theme.colors.gray};
716
+ }
717
+
718
+ &:focus {
719
+ border: dotted 1px \${({ theme }) => theme.colors.info};
720
+ }
721
+ \`;
722
+
723
+ export const StyledDataEditableText = styled.div<{
724
+ theme: Theme;
725
+ $gray?: boolean;
726
+ }>\`
727
+ \${({ theme }) => styledText(theme)};
728
+ color: \${({ theme, $gray }) =>
729
+ $gray ? theme.colors.grayDark : theme.colors.dark};
730
+
731
+ &[contenteditable="true"] {
732
+ \${editableContent};
733
+ }
734
+ \`;
735
+
736
+ export const StyledSmallButtonWrapper = styled.div<{ theme: Theme }>\`
737
+ position: relative;
738
+
739
+ & .hidden-button {
740
+ opacity: 0;
741
+ pointer-events: none;
742
+ transform: translateY(10px);
743
+ }
744
+
745
+ @media (hover: hover) {
746
+ &:hover {
747
+ & .hidden-button {
748
+ opacity: 1;
749
+ pointer-events: all;
750
+ transform: translateY(0);
751
+ }
752
+ }
753
+ }
754
+ \`;
755
+
756
+ export const StyledSmallButton = styled.button<{
757
+ theme: Theme;
758
+ }>\`
759
+ \${resetButton};
760
+ display: flex;
761
+ gap: 5px;
762
+ border-radius: \${({ theme }) => theme.spacing.radius.xs};
763
+ color: \${({ theme }) => theme.colors.primary};
764
+ background: \${({ theme }) => theme.colors.light};
765
+ margin: auto 0;
766
+ min-width: fit-content;
767
+ \${interactiveStyles}
768
+
769
+ &.hidden-button {
770
+ position: absolute;
771
+ bottom: 1px;
772
+ right: 1px;
773
+ z-index: 98;
774
+ }
775
+ \`;
776
+
777
+ export const StyledTitle = styled(StyledH1)<{ theme: Theme }>\`
778
+ display: block;
779
+
780
+ &[contenteditable="true"] {
781
+ \${editableContent};
782
+ }
783
+ \`;
784
+
785
+ export const StyledImage = styled.img<{ theme: Theme; $maxWidth?: string }>\`
786
+ border-radius: \${({ theme }) => theme.spacing.radius.lg};
787
+ max-width: \${({ $maxWidth }) => ($maxWidth ? $maxWidth : "100%")};
788
+ width: 100%;
789
+ height: auto;
790
+ border: 1px solid \${({ theme }) => theme.colors.grayLight};
791
+ \`;
792
+ `;