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