doccupine 0.0.97 → 0.0.99

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 (123) hide show
  1. package/dist/index.js +0 -0
  2. package/dist/templates/components/MDXComponents.d.ts +1 -1
  3. package/dist/templates/components/MDXComponents.js +3 -1
  4. package/dist/templates/components/layout/Card.d.ts +1 -1
  5. package/dist/templates/components/layout/Card.js +10 -1
  6. package/dist/templates/components/layout/Code.d.ts +1 -1
  7. package/dist/templates/components/layout/Code.js +228 -3
  8. package/dist/templates/components/layout/Footer.d.ts +1 -1
  9. package/dist/templates/components/layout/Footer.js +9 -1
  10. package/dist/templates/components/layout/SiteGate.d.ts +1 -1
  11. package/dist/templates/components/layout/SiteGate.js +8 -1
  12. package/dist/templates/mdx/code.mdx.d.ts +1 -1
  13. package/dist/templates/mdx/code.mdx.js +43 -1
  14. package/dist/templates/package.js +2 -2
  15. package/package.json +1 -1
  16. package/dist/index.test.d.ts +0 -1
  17. package/dist/index.test.js +0 -48
  18. package/dist/metadata.d.ts +0 -11
  19. package/dist/metadata.js +0 -52
  20. package/dist/templates/accordion.mdx.d.ts +0 -1
  21. package/dist/templates/accordion.mdx.js +0 -41
  22. package/dist/templates/api/theme/routes.d.ts +0 -1
  23. package/dist/templates/api/theme/routes.js +0 -28
  24. package/dist/templates/app/api/theme/routes.d.ts +0 -1
  25. package/dist/templates/app/api/theme/routes.js +0 -29
  26. package/dist/templates/app/error.d.ts +0 -1
  27. package/dist/templates/app/error.js +0 -45
  28. package/dist/templates/app/layout.d.ts +0 -34
  29. package/dist/templates/app/layout.js +0 -184
  30. package/dist/templates/callouts.mdx.d.ts +0 -1
  31. package/dist/templates/callouts.mdx.js +0 -57
  32. package/dist/templates/cards.mdx.d.ts +0 -1
  33. package/dist/templates/cards.mdx.js +0 -25
  34. package/dist/templates/click-outside.d.ts +0 -1
  35. package/dist/templates/click-outside.js +0 -28
  36. package/dist/templates/code.d.ts +0 -1
  37. package/dist/templates/code.js +0 -202
  38. package/dist/templates/code.mdx.d.ts +0 -1
  39. package/dist/templates/code.mdx.js +0 -46
  40. package/dist/templates/commands.mdx.d.ts +0 -1
  41. package/dist/templates/commands.mdx.js +0 -48
  42. package/dist/templates/components/ClickOutside.d.ts +0 -1
  43. package/dist/templates/components/ClickOutside.js +0 -29
  44. package/dist/templates/components/layout/ClientThemeProvider.d.ts +0 -1
  45. package/dist/templates/components/layout/ClientThemeProvider.js +0 -85
  46. package/dist/templates/components/layout/CopyButton.d.ts +0 -1
  47. package/dist/templates/components/layout/CopyButton.js +0 -85
  48. package/dist/templates/components/layout/RenderMarkdown.d.ts +0 -1
  49. package/dist/templates/components/layout/RenderMarkdown.js +0 -61
  50. package/dist/templates/components/layout/Stepts.d.ts +0 -1
  51. package/dist/templates/components/layout/Stepts.js +0 -114
  52. package/dist/templates/components/layout/ThemeToggle.d.ts +0 -1
  53. package/dist/templates/components/layout/ThemeToggle.js +0 -107
  54. package/dist/templates/constants.d.ts +0 -5
  55. package/dist/templates/constants.js +0 -5
  56. package/dist/templates/docs-components.d.ts +0 -1
  57. package/dist/templates/docs-components.js +0 -441
  58. package/dist/templates/docs.d.ts +0 -1
  59. package/dist/templates/docs.js +0 -48
  60. package/dist/templates/fields.mdx.d.ts +0 -1
  61. package/dist/templates/fields.mdx.js +0 -42
  62. package/dist/templates/footer.d.ts +0 -1
  63. package/dist/templates/footer.js +0 -9
  64. package/dist/templates/header.d.ts +0 -1
  65. package/dist/templates/header.js +0 -275
  66. package/dist/templates/home.d.ts +0 -1
  67. package/dist/templates/home.js +0 -74
  68. package/dist/templates/home.mdx.d.ts +0 -1
  69. package/dist/templates/home.mdx.js +0 -44
  70. package/dist/templates/homemdx.d.ts +0 -1
  71. package/dist/templates/homemdx.js +0 -59
  72. package/dist/templates/icon.d.ts +0 -1
  73. package/dist/templates/icon.js +0 -20
  74. package/dist/templates/icons.mdx.d.ts +0 -1
  75. package/dist/templates/icons.mdx.js +0 -44
  76. package/dist/templates/image-embeds.mdx.d.ts +0 -1
  77. package/dist/templates/image-embeds.mdx.js +0 -103
  78. package/dist/templates/layout.d.ts +0 -1
  79. package/dist/templates/layout.js +0 -69
  80. package/dist/templates/list-table.mdx.d.ts +0 -1
  81. package/dist/templates/list-table.mdx.js +0 -85
  82. package/dist/templates/mdx/config.mdx.d.ts +0 -1
  83. package/dist/templates/mdx/config.mdx.js +0 -47
  84. package/dist/templates/mdx/deployment.mdx.d.ts +0 -1
  85. package/dist/templates/mdx/deployment.mdx.js +0 -61
  86. package/dist/templates/mdx/image-embeds.mdx.d.ts +0 -1
  87. package/dist/templates/mdx/image-embeds.mdx.js +0 -95
  88. package/dist/templates/mdx/links.mdx.d.ts +0 -1
  89. package/dist/templates/mdx/links.mdx.js +0 -45
  90. package/dist/templates/mdx/list-and-tables.mdx.d.ts +0 -1
  91. package/dist/templates/mdx/list-and-tables.mdx.js +0 -78
  92. package/dist/templates/mdx/list-table.mdx.d.ts +0 -1
  93. package/dist/templates/mdx/list-table.mdx.js +0 -78
  94. package/dist/templates/mdx/platform/deployments.mdx.d.ts +0 -1
  95. package/dist/templates/mdx/platform/deployments.mdx.js +0 -36
  96. package/dist/templates/mdx/platform/sections-settings.mdx.d.ts +0 -1
  97. package/dist/templates/mdx/platform/sections-settings.mdx.js +0 -46
  98. package/dist/templates/mdx/stepts.mdx.d.ts +0 -1
  99. package/dist/templates/mdx/stepts.mdx.js +0 -60
  100. package/dist/templates/mdx/text.mdx.d.ts +0 -1
  101. package/dist/templates/mdx/text.mdx.js +0 -139
  102. package/dist/templates/middleware.d.ts +0 -1
  103. package/dist/templates/middleware.js +0 -28
  104. package/dist/templates/not-found.d.ts +0 -1
  105. package/dist/templates/not-found.js +0 -22
  106. package/dist/templates/pictograms.d.ts +0 -1
  107. package/dist/templates/pictograms.js +0 -67
  108. package/dist/templates/shared-styles.d.ts +0 -1
  109. package/dist/templates/shared-styles.js +0 -792
  110. package/dist/templates/structures.d.ts +0 -2
  111. package/dist/templates/structures.js +0 -208
  112. package/dist/templates/tabs.mdx.d.ts +0 -1
  113. package/dist/templates/tabs.mdx.js +0 -59
  114. package/dist/templates/text.mdx.d.ts +0 -1
  115. package/dist/templates/text.mdx.js +0 -142
  116. package/dist/templates/theme-toggle.d.ts +0 -1
  117. package/dist/templates/theme-toggle.js +0 -111
  118. package/dist/templates/theme.d.ts +0 -1
  119. package/dist/templates/theme.js +0 -307
  120. package/dist/templates/typography.d.ts +0 -1
  121. package/dist/templates/typography.js +0 -52
  122. package/dist/templates/update.mdx.d.ts +0 -1
  123. package/dist/templates/update.mdx.js +0 -58
@@ -1,114 +0,0 @@
1
- export const stepsTemplate = `"use client";
2
- import React from "react";
3
- import styled, { useTheme } from "styled-components";
4
- import { styledText, Theme } from "cherry-styled-components/src/lib";
5
- import { rgba } from "polished";
6
- import { Icon, IconProps } from "@/components/layout/Icon";
7
-
8
- const StyledStepsContainer = styled.div<{ theme: Theme }>\`
9
- position: relative;
10
- width: 100%;
11
- \`;
12
-
13
- const StyledStep = styled.div<{ theme: Theme }>\`
14
- background: \${({ theme }) => theme.colors.light};
15
- border-radius: \${({ theme }) => theme.spacing.radius.lg};
16
- padding: 0 0 20px 52px;
17
- margin: 0;
18
- position: relative;
19
- \${({ theme }) => styledText(theme)}
20
- color: \${({ theme }) => theme.colors.grayDark};
21
-
22
- &::after {
23
- content: "";
24
- position: absolute;
25
- left: 16px;
26
- top: 0;
27
- width: 1px;
28
- height: 100%;
29
- background: \${({ theme }) => theme.colors.primary};
30
- background: linear-gradient(
31
- 180deg,
32
- \${({ theme }) => theme.colors.primary},
33
- \${({ theme }) => rgba(theme.colors.primary, 0)}
34
- );
35
- border-radius: 4px;
36
- }
37
- \`;
38
-
39
- const StepNumber = styled.div<{ theme: Theme }>\`
40
- width: 32px;
41
- height: 32px;
42
- border-radius: 50%;
43
- background: \${({ theme }) => theme.colors.primary};
44
- color: \${({ theme }) => theme.colors.light};
45
- display: flex;
46
- align-items: center;
47
- justify-content: center;
48
- font-weight: 700;
49
- margin-bottom: 12px;
50
- \${({ theme }) => styledText(theme)};
51
- position: absolute;
52
- left: 0;
53
- top: 0;
54
- z-index: 1;
55
- \`;
56
-
57
- const StyledStepTitle = styled.h3<{ theme: Theme }>\`
58
- margin: 0 0 10px 0;
59
- padding: 2px 0 0 0;
60
- color: \${({ theme }) => theme.colors.dark};
61
- \${({ theme }) => styledText(theme)};
62
- \`;
63
-
64
- const StepContent = styled.div<{ theme: Theme }>\`
65
- color: \${({ theme }) => theme.colors.grayDark};
66
- \${({ theme }) => styledText(theme)};
67
-
68
- & > .code-wrapper {
69
- margin: 10px 0;
70
- }
71
- \`;
72
-
73
- interface StepProps extends React.HTMLAttributes<HTMLDivElement> {
74
- title: string;
75
- children: React.ReactNode;
76
- icon?: IconProps;
77
- }
78
-
79
- function Step({ title, children, icon, ...props }: StepProps) {
80
- return null;
81
- }
82
-
83
- interface StepsProps extends React.HTMLAttributes<HTMLDivElement> {
84
- children: React.ReactNode;
85
- }
86
-
87
- function Steps({ children, ...props }: StepsProps) {
88
- const theme = useTheme() as Theme;
89
-
90
- const steps = React.Children.toArray(children).filter(
91
- (child): child is React.ReactElement<StepProps> =>
92
- React.isValidElement(child),
93
- );
94
-
95
- return (
96
- <StyledStepsContainer theme={theme}>
97
- {steps.map((step, index) => {
98
- const { title, children: stepContent, icon } = step.props;
99
-
100
- return (
101
- <StyledStep key={index} theme={theme}>
102
- <StepNumber theme={theme}>{index + 1}</StepNumber>
103
- {icon && <Icon name={icon} color={theme.colors.primary} />}
104
- <StyledStepTitle theme={theme}>{title}</StyledStepTitle>
105
- <StepContent theme={theme}>{stepContent}</StepContent>
106
- </StyledStep>
107
- );
108
- })}
109
- </StyledStepsContainer>
110
- );
111
- }
112
-
113
- export { Steps, Step };
114
- `;
@@ -1 +0,0 @@
1
- export declare const themeToggleTemplate = "\"use client\";\nimport { resetButton } from \"cherry-styled-components\";\nimport styled, { css } from \"styled-components\";\nimport { Theme } from \"@/app/theme\";\nimport { Icon } from \"@/components/layout/Icon\";\nimport { useThemeOverride } from \"@/components/layout/ClientThemeProvider\";\n\nconst StyledThemeToggle = styled.button<{ theme: Theme; $hidden?: boolean }>`\n ${resetButton}\n width: 59px;\n height: 32px;\n border-radius: 30px;\n display: flex;\n position: relative;\n margin: auto 0;\n transform: scale(1);\n background: ${({ theme }) => theme.colors.light};\n border: solid 1px ${({ theme }) => theme.colors.grayLight};\n\n &::after {\n content: \"\";\n position: absolute;\n top: 3px;\n left: 3px;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: ${({ theme }) =>\n `color-mix(in srgb, ${theme.colors.primaryLight} 20%, transparent)`};\n transition: all 0.3s ease;\n z-index: 1;\n }\n\n /* Knob position depends on the active mode, signaled by the \"dark\" class\n on <html>. Pure CSS \u2014 no JS conditional needed for the visual swap. */\n :root.dark &::after {\n transform: translateX(27px);\n }\n\n ${({ $hidden }) =>\n $hidden &&\n css`\n display: none;\n `}\n\n & svg {\n width: 16px;\n height: 16px;\n object-fit: contain;\n margin: auto;\n transition: all 0.3s ease;\n position: relative;\n z-index: 2;\n }\n\n & .lucide-sun {\n transform: translateX(1px);\n }\n\n & .lucide-moon-star {\n transform: translateX(-1px);\n }\n\n & svg[stroke] {\n stroke: ${({ theme }) => theme.colors.primary};\n }\n\n &:hover {\n transform: scale(1.05);\n color: ${({ theme }) => theme.colors.accent};\n\n & svg[stroke] {\n stroke: ${({ theme }) => theme.colors.accent};\n }\n }\n\n &:active {\n transform: scale(0.97);\n }\n`;\n\nfunction ToggleTheme({ $hidden }: { $hidden?: boolean }) {\n const { mode, setMode } = useThemeOverride();\n\n return (\n <StyledThemeToggle\n onClick={() => setMode(mode === \"dark\" ? \"light\" : \"dark\")}\n $hidden={$hidden}\n aria-label=\"Toggle Theme\"\n >\n <Icon name=\"Sun\" className=\"light\" />\n <Icon name=\"MoonStar\" className=\"dark\" />\n </StyledThemeToggle>\n );\n}\n\nfunction ToggleThemeLoading() {\n return (\n <StyledThemeToggle $hidden aria-label=\"Toggle Theme\">\n <Icon name=\"MoonStar\" className=\"dark\" />\n <Icon name=\"Sun\" className=\"light\" />\n </StyledThemeToggle>\n );\n}\n\nexport { ToggleTheme, ToggleThemeLoading };\n";
@@ -1,107 +0,0 @@
1
- export const themeToggleTemplate = `"use client";
2
- import { resetButton } from "cherry-styled-components";
3
- import styled, { css } from "styled-components";
4
- import { Theme } from "@/app/theme";
5
- import { Icon } from "@/components/layout/Icon";
6
- import { useThemeOverride } from "@/components/layout/ClientThemeProvider";
7
-
8
- const StyledThemeToggle = styled.button<{ theme: Theme; $hidden?: boolean }>\`
9
- \${resetButton}
10
- width: 59px;
11
- height: 32px;
12
- border-radius: 30px;
13
- display: flex;
14
- position: relative;
15
- margin: auto 0;
16
- transform: scale(1);
17
- background: \${({ theme }) => theme.colors.light};
18
- border: solid 1px \${({ theme }) => theme.colors.grayLight};
19
-
20
- &::after {
21
- content: "";
22
- position: absolute;
23
- top: 3px;
24
- left: 3px;
25
- width: 24px;
26
- height: 24px;
27
- border-radius: 50%;
28
- background: \${({ theme }) =>
29
- \`color-mix(in srgb, \${theme.colors.primaryLight} 20%, transparent)\`};
30
- transition: all 0.3s ease;
31
- z-index: 1;
32
- }
33
-
34
- /* Knob position depends on the active mode, signaled by the "dark" class
35
- on <html>. Pure CSS — no JS conditional needed for the visual swap. */
36
- :root.dark &::after {
37
- transform: translateX(27px);
38
- }
39
-
40
- \${({ $hidden }) =>
41
- $hidden &&
42
- css\`
43
- display: none;
44
- \`}
45
-
46
- & svg {
47
- width: 16px;
48
- height: 16px;
49
- object-fit: contain;
50
- margin: auto;
51
- transition: all 0.3s ease;
52
- position: relative;
53
- z-index: 2;
54
- }
55
-
56
- & .lucide-sun {
57
- transform: translateX(1px);
58
- }
59
-
60
- & .lucide-moon-star {
61
- transform: translateX(-1px);
62
- }
63
-
64
- & svg[stroke] {
65
- stroke: \${({ theme }) => theme.colors.primary};
66
- }
67
-
68
- &:hover {
69
- transform: scale(1.05);
70
- color: \${({ theme }) => theme.colors.accent};
71
-
72
- & svg[stroke] {
73
- stroke: \${({ theme }) => theme.colors.accent};
74
- }
75
- }
76
-
77
- &:active {
78
- transform: scale(0.97);
79
- }
80
- \`;
81
-
82
- function ToggleTheme({ $hidden }: { $hidden?: boolean }) {
83
- const { mode, setMode } = useThemeOverride();
84
-
85
- return (
86
- <StyledThemeToggle
87
- onClick={() => setMode(mode === "dark" ? "light" : "dark")}
88
- $hidden={$hidden}
89
- aria-label="Toggle Theme"
90
- >
91
- <Icon name="Sun" className="light" />
92
- <Icon name="MoonStar" className="dark" />
93
- </StyledThemeToggle>
94
- );
95
- }
96
-
97
- function ToggleThemeLoading() {
98
- return (
99
- <StyledThemeToggle $hidden aria-label="Toggle Theme">
100
- <Icon name="MoonStar" className="dark" />
101
- <Icon name="Sun" className="light" />
102
- </StyledThemeToggle>
103
- );
104
- }
105
-
106
- export { ToggleTheme, ToggleThemeLoading };
107
- `;
@@ -1,5 +0,0 @@
1
- export declare const DEFAULT_DESCRIPTION = "Doccupine is a free and open-source documentation platform. Write MDX, get a production-ready site with AI chat, built-in components, and an MCP server - in one command.";
2
- export declare const DEFAULT_SITE_NAME = "Doccupine";
3
- export declare const DEFAULT_META_DESCRIPTION = "Generated with Doccupine";
4
- export declare const DEFAULT_FAVICON = "https://docs.doccupine.com/favicon.ico";
5
- export declare const DEFAULT_OG_IMAGE = "https://docs.doccupine.com/preview.png";
@@ -1,5 +0,0 @@
1
- export const DEFAULT_DESCRIPTION = "Doccupine is a free and open-source documentation platform. Write MDX, get a production-ready site with AI chat, built-in components, and an MCP server - in one command.";
2
- export const DEFAULT_SITE_NAME = "Doccupine";
3
- export const DEFAULT_META_DESCRIPTION = "Generated with Doccupine";
4
- export const DEFAULT_FAVICON = "https://docs.doccupine.com/favicon.ico";
5
- export const DEFAULT_OG_IMAGE = "https://docs.doccupine.com/preview.png";
@@ -1 +0,0 @@
1
- export declare const docsComponentsTemplate = "\n\"use client\";\nimport { mq, Theme } from \"@/app/theme\";\nimport {\n resetButton,\n styledStrong,\n styledText,\n} from \"cherry-styled-components/src/lib\";\nimport Link from \"next/link\";\nimport { rgba } from \"polished\";\nimport React from \"react\";\nimport styled, { css } from \"styled-components\";\nimport { interactiveStyles } from \"./SharedStyled\";\n\ninterface DocsProps {\n children: React.ReactNode;\n}\n\nconst StyledDocsWrapper = styled.div<{ theme: Theme }>`\n position: relative;\n`;\n\nconst StyledDocsSidebar = styled.div<{ theme: Theme }>`\n position: sticky;\n top: 90px;\n min-width: 200px;\n float: left;\n z-index: 999;\n\n ${mq(\"lg\")} {\n z-index: 2;\n }\n`;\n\nconst StyledDocsContainer = styled.div<{ theme: Theme }>`\n position: relative;\n padding: 0;\n width: 100%;\n\n ${mq(\"lg\")} {\n padding-left: 230px;\n }\n\n & ul {\n list-style: none;\n padding: 0;\n margin: 0;\n\n & li {\n text-indent: 0;\n display: block;\n position: relative;\n padding: 0 0 0 15px;\n margin: 0;\n ${({ theme }) => styledText(theme)};\n min-height: 23px;\n\n $mq: \"lg\" {\n min-height: 27px;\n }\n\n &::before {\n content: \"\";\n display: block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: ${({ theme }) => theme.colors.primary};\n position: absolute;\n top: 8px;\n left: 2px;\n\n ${mq(\"lg\")} {\n top: 10px;\n }\n }\n }\n }\n\n & ol {\n padding: 0;\n margin: 0;\n\n & > li {\n position: relative;\n padding: 0;\n counter-increment: item;\n padding: 0;\n margin: 0;\n ${({ theme }) => styledText(theme)};\n\n &::before {\n content: counter(item) \".\";\n display: inline-block;\n margin: 0 4px 0 0;\n font-weight: 700;\n color: ${({ theme }) => theme.colors.primary};\n min-width: max-content;\n }\n }\n }\n`;\n\nexport const StyledMarkdownContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 20px;\n flex-wrap: wrap;\n flex: 1;\n`;\n\ninterface Props {\n theme?: Theme;\n $isActive?: boolean;\n}\n\nexport const StyledSidebar = styled.nav<Props>`\n position: fixed;\n overflow-y: auto;\n max-height: calc(100svh - 70px);\n width: 100%;\n background: ${({ theme }) => theme.colors.light};\n z-index: 99;\n top: 70px;\n height: 100%;\n padding: 20px 0;\n opacity: 0;\n pointer-events: none;\n transition: all 0.3s ease;\n transform: translateY(30px);\n\n ${mq(\"lg\")} {\n width: 220px;\n left: 20px;\n background: transparent;\n padding: 20px 20px 20px 0;\n opacity: 1;\n pointer-events: all;\n transform: translateY(0);\n }\n\n ${mq(\"xl\")} {\n width: 220px;\n left: calc(50% - 610px);\n }\n\n ${mq(\"xxl\")} {\n width: 220px;\n left: calc(50% - 690px);\n }\n\n ${({ $isActive }) =>\n $isActive &&\n css`\n transform: translateY(0);\n opacity: 1;\n pointer-events: all;\n `}\n`;\n\nexport const StyledSidebarList = styled.ul`\n list-style: none;\n margin: 0;\n padding: 0;\n`;\n\nexport const StyledStrong = styled.strong<{ theme: Theme }>`\n font-weight: 600;\n ${({ theme }) => styledStrong(theme)};\n`;\n\nexport const StyledSidebarListItem = styled.li`\n display: flex;\n gap: 10px;\n clear: both;\n`;\n\nexport const StyledSidebarListItemLink = styled(Link)<Props>`\n text-decoration: none;\n font-size: ${({ theme }) => theme.fontSizes.strong.xs};\n line-height: 2.1;\n color: ${({ theme }) =>\n theme.isDark ? theme.colors.grayDark : theme.colors.primary};\n padding: 0 0 0 20px;\n display: flex;\n transition: all 0.3s ease;\n border-left: solid 1px ${({ theme }) => theme.colors.grayLight};\n\n ${mq(\"lg\")} {\n font-size: ${({ theme }) => theme.fontSizes.strong.lg};\n line-height: 2.1;\n }\n\n @media (hover: hover) {\n &:hover {\n color: ${({ theme }) =>\n theme.isDark ? theme.colors.primaryLight : theme.colors.primaryDark};\n border-color: ${({ theme }) => theme.colors.info};\n }\n }\n\n ${({ $isActive, theme }) =>\n $isActive &&\n `\n\t\t\tcolor: ${theme.colors.dark};\n\t\t\tborder-color: ${theme.colors.info};\n\t\t\tfont-weight: 600;\n\t`};\n`;\n\nexport const StyleMobileBar = styled.button<Props>`\n ${resetButton};\n position: fixed;\n z-index: 1000;\n bottom: 0;\n right: 20px;\n font-size: ${({ theme }) => theme.fontSizes.strong.lg};\n line-height: ${({ theme }) => theme.fontSizes.strong.lg};\n box-shadow: ${({ theme }) => theme.shadows.sm};\n background: ${({ theme }) =>\n theme.isDark\n ? rgba(theme.colors.grayLight, 0.7)\n : rgba(theme.colors.light, 0.7)};\n color: ${({ theme }) =>\n theme.isDark ? theme.colors.dark : theme.colors.primary};\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n padding: 30px;\n border-radius: 100px;\n margin: 0 0 20px 0;\n font-weight: 600;\n display: flex;\n justify-content: flex-start;\n width: auto;\n\n ${mq(\"lg\")} {\n display: none;\n }\n\n ${({ $isActive }) => $isActive && `position: fixed; `};\n`;\n\nexport const StyledMobileBurger = styled.span<Props>`\n display: block;\n margin: auto 0;\n width: 18px;\n height: 18px;\n position: relative;\n overflow: hidden;\n background: transparent;\n position: relative;\n\n &::before,\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n width: 18px;\n height: 3px;\n border-radius: 3px;\n background: ${({ theme }) =>\n theme.isDark ? theme.colors.dark : theme.colors.primary};\n transition: all 0.3s ease;\n }\n\n &::before {\n top: 3px;\n }\n\n &::after {\n bottom: 3px;\n }\n\n ${({ $isActive }) =>\n $isActive &&\n css`\n &::before {\n transform: translateY(5px) rotate(45deg);\n }\n\n &::after {\n transform: translateY(-4px) rotate(-45deg);\n }\n `};\n`;\n\nexport const StyledInlineButton = styled.button<{ theme: Theme }>`\n ${resetButton};\n ${interactiveStyles};\n color: ${({ theme }) => theme.colors.primary};\n vertical-align: middle;\n border: solid 1px ${({ theme }) => theme.colors.grayLight};\n border-radius: ${({ theme }) => theme.spacing.radius.xs};\n padding: 0;\n width: 18px;\n height: 18px;\n display: flex;\n margin: auto 0;\n transition: all 0.3s ease;\n\n @media (hover: hover) {\n &:hover {\n color: ${({ theme }) => theme.colors.light};\n background: ${({ theme }) => theme.colors.primary};\n border-color: ${({ theme }) => theme.colors.primary};\n }\n }\n\n & svg {\n vertical-align: middle;\n width: 12px;\n height: 12px;\n margin: auto;\n }\n`;\n\nexport const StyledPlusButton = styled.button<{ theme: Theme }>`\n ${resetButton};\n color: ${({ theme }) => theme.colors.primary};\n vertical-align: middle;\n padding: 0;\n width: 100%;\n height: 18px;\n display: flex;\n margin: auto 0;\n transition: all 0.3s ease;\n position: relative;\n margin: 20px 0 0 0;\n\n &::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n width: 100%;\n height: 1px;\n border-radius: 3px;\n background: ${({ theme }) => theme.colors.grayLight};\n transition: all 0.3s ease;\n z-index: -1;\n }\n\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n width: 18px;\n height: 18px;\n border: solid 1px ${({ theme }) => theme.colors.grayLight};\n border-radius: ${({ theme }) => theme.spacing.radius.xs};\n background: ${({ theme }) => theme.colors.light};\n transition: all 0.3s ease;\n z-index: -1;\n }\n\n box-shadow: 0 0 0 0px ${({ theme }) => theme.colors.primary};\n\n @media (hover: hover) {\n &:hover {\n &::after {\n border-color: ${({ theme }) => theme.colors.primary};\n }\n }\n }\n\n &:focus {\n &::after {\n border-color: ${({ theme }) => theme.colors.primary};\n box-shadow: 0 0 0 4px ${({ theme }) => theme.colors.primaryLight};\n }\n }\n\n &:active {\n &::after {\n box-shadow: 0 0 0 2px ${({ theme }) => theme.colors.primaryLight};\n }\n }\n\n @media (hover: hover) {\n &:hover {\n color: ${({ theme }) => theme.colors.light};\n\n &::after {\n background: ${({ theme }) => theme.colors.primary};\n border-color: ${({ theme }) => theme.colors.primary};\n }\n }\n }\n\n & svg {\n vertical-align: middle;\n width: 14px;\n height: 14px;\n margin: auto;\n }\n`;\n\nexport const StyledFullHeightInput = styled.div`\n height: 100%;\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 20px;\n flex: 1;\n\n & > span {\n height: 100%;\n width: 100%;\n }\n\n & textarea {\n height: 100%;\n }\n`;\n\nexport const StyledEditorWrapper = styled.div`\n flex: 1;\n\n &:empty {\n display: none;\n }\n`;\n\nfunction DocsWrapper({ children }: DocsProps) {\n return <StyledDocsWrapper>{children}</StyledDocsWrapper>;\n}\n\nfunction DocsSidebar({ children }: DocsProps) {\n return <StyledDocsSidebar>{children}</StyledDocsSidebar>;\n}\n\nfunction DocsContainer({ children }: DocsProps) {\n return <StyledDocsContainer>{children}</StyledDocsContainer>;\n}\n\nexport { DocsWrapper, DocsSidebar, DocsContainer };\n";
@@ -1,441 +0,0 @@
1
- export const docsComponentsTemplate = `
2
- "use client";
3
- import { mq, Theme } from "@/app/theme";
4
- import {
5
- resetButton,
6
- styledStrong,
7
- styledText,
8
- } from "cherry-styled-components/src/lib";
9
- import Link from "next/link";
10
- import { rgba } from "polished";
11
- import React from "react";
12
- import styled, { css } from "styled-components";
13
- import { interactiveStyles } from "./SharedStyled";
14
-
15
- interface DocsProps {
16
- children: React.ReactNode;
17
- }
18
-
19
- const StyledDocsWrapper = styled.div<{ theme: Theme }>\`
20
- position: relative;
21
- \`;
22
-
23
- const StyledDocsSidebar = styled.div<{ theme: Theme }>\`
24
- position: sticky;
25
- top: 90px;
26
- min-width: 200px;
27
- float: left;
28
- z-index: 999;
29
-
30
- \${mq("lg")} {
31
- z-index: 2;
32
- }
33
- \`;
34
-
35
- const StyledDocsContainer = styled.div<{ theme: Theme }>\`
36
- position: relative;
37
- padding: 0;
38
- width: 100%;
39
-
40
- \${mq("lg")} {
41
- padding-left: 230px;
42
- }
43
-
44
- & ul {
45
- list-style: none;
46
- padding: 0;
47
- margin: 0;
48
-
49
- & li {
50
- text-indent: 0;
51
- display: block;
52
- position: relative;
53
- padding: 0 0 0 15px;
54
- margin: 0;
55
- \${({ theme }) => styledText(theme)};
56
- min-height: 23px;
57
-
58
- $mq: "lg" {
59
- min-height: 27px;
60
- }
61
-
62
- &::before {
63
- content: "";
64
- display: block;
65
- width: 6px;
66
- height: 6px;
67
- border-radius: 50%;
68
- background: \${({ theme }) => theme.colors.primary};
69
- position: absolute;
70
- top: 8px;
71
- left: 2px;
72
-
73
- \${mq("lg")} {
74
- top: 10px;
75
- }
76
- }
77
- }
78
- }
79
-
80
- & ol {
81
- padding: 0;
82
- margin: 0;
83
-
84
- & > li {
85
- position: relative;
86
- padding: 0;
87
- counter-increment: item;
88
- padding: 0;
89
- margin: 0;
90
- \${({ theme }) => styledText(theme)};
91
-
92
- &::before {
93
- content: counter(item) ".";
94
- display: inline-block;
95
- margin: 0 4px 0 0;
96
- font-weight: 700;
97
- color: \${({ theme }) => theme.colors.primary};
98
- min-width: max-content;
99
- }
100
- }
101
- }
102
- \`;
103
-
104
- export const StyledMarkdownContainer = styled.div\`
105
- display: flex;
106
- flex-direction: column;
107
- gap: 20px;
108
- flex-wrap: wrap;
109
- flex: 1;
110
- \`;
111
-
112
- interface Props {
113
- theme?: Theme;
114
- $isActive?: boolean;
115
- }
116
-
117
- export const StyledSidebar = styled.nav<Props>\`
118
- position: fixed;
119
- overflow-y: auto;
120
- max-height: calc(100svh - 70px);
121
- width: 100%;
122
- background: \${({ theme }) => theme.colors.light};
123
- z-index: 99;
124
- top: 70px;
125
- height: 100%;
126
- padding: 20px 0;
127
- opacity: 0;
128
- pointer-events: none;
129
- transition: all 0.3s ease;
130
- transform: translateY(30px);
131
-
132
- \${mq("lg")} {
133
- width: 220px;
134
- left: 20px;
135
- background: transparent;
136
- padding: 20px 20px 20px 0;
137
- opacity: 1;
138
- pointer-events: all;
139
- transform: translateY(0);
140
- }
141
-
142
- \${mq("xl")} {
143
- width: 220px;
144
- left: calc(50% - 610px);
145
- }
146
-
147
- \${mq("xxl")} {
148
- width: 220px;
149
- left: calc(50% - 690px);
150
- }
151
-
152
- \${({ $isActive }) =>
153
- $isActive &&
154
- css\`
155
- transform: translateY(0);
156
- opacity: 1;
157
- pointer-events: all;
158
- \`}
159
- \`;
160
-
161
- export const StyledSidebarList = styled.ul\`
162
- list-style: none;
163
- margin: 0;
164
- padding: 0;
165
- \`;
166
-
167
- export const StyledStrong = styled.strong<{ theme: Theme }>\`
168
- font-weight: 600;
169
- \${({ theme }) => styledStrong(theme)};
170
- \`;
171
-
172
- export const StyledSidebarListItem = styled.li\`
173
- display: flex;
174
- gap: 10px;
175
- clear: both;
176
- \`;
177
-
178
- export const StyledSidebarListItemLink = styled(Link)<Props>\`
179
- text-decoration: none;
180
- font-size: \${({ theme }) => theme.fontSizes.strong.xs};
181
- line-height: 2.1;
182
- color: \${({ theme }) =>
183
- theme.isDark ? theme.colors.grayDark : theme.colors.primary};
184
- padding: 0 0 0 20px;
185
- display: flex;
186
- transition: all 0.3s ease;
187
- border-left: solid 1px \${({ theme }) => theme.colors.grayLight};
188
-
189
- \${mq("lg")} {
190
- font-size: \${({ theme }) => theme.fontSizes.strong.lg};
191
- line-height: 2.1;
192
- }
193
-
194
- @media (hover: hover) {
195
- &:hover {
196
- color: \${({ theme }) =>
197
- theme.isDark ? theme.colors.primaryLight : theme.colors.primaryDark};
198
- border-color: \${({ theme }) => theme.colors.info};
199
- }
200
- }
201
-
202
- \${({ $isActive, theme }) =>
203
- $isActive &&
204
- \`
205
- color: \${theme.colors.dark};
206
- border-color: \${theme.colors.info};
207
- font-weight: 600;
208
- \`};
209
- \`;
210
-
211
- export const StyleMobileBar = styled.button<Props>\`
212
- \${resetButton};
213
- position: fixed;
214
- z-index: 1000;
215
- bottom: 0;
216
- right: 20px;
217
- font-size: \${({ theme }) => theme.fontSizes.strong.lg};
218
- line-height: \${({ theme }) => theme.fontSizes.strong.lg};
219
- box-shadow: \${({ theme }) => theme.shadows.sm};
220
- background: \${({ theme }) =>
221
- theme.isDark
222
- ? rgba(theme.colors.grayLight, 0.7)
223
- : rgba(theme.colors.light, 0.7)};
224
- color: \${({ theme }) =>
225
- theme.isDark ? theme.colors.dark : theme.colors.primary};
226
- backdrop-filter: blur(10px);
227
- -webkit-backdrop-filter: blur(10px);
228
- padding: 30px;
229
- border-radius: 100px;
230
- margin: 0 0 20px 0;
231
- font-weight: 600;
232
- display: flex;
233
- justify-content: flex-start;
234
- width: auto;
235
-
236
- \${mq("lg")} {
237
- display: none;
238
- }
239
-
240
- \${({ $isActive }) => $isActive && \`position: fixed; \`};
241
- \`;
242
-
243
- export const StyledMobileBurger = styled.span<Props>\`
244
- display: block;
245
- margin: auto 0;
246
- width: 18px;
247
- height: 18px;
248
- position: relative;
249
- overflow: hidden;
250
- background: transparent;
251
- position: relative;
252
-
253
- &::before,
254
- &::after {
255
- content: "";
256
- display: block;
257
- position: absolute;
258
- width: 18px;
259
- height: 3px;
260
- border-radius: 3px;
261
- background: \${({ theme }) =>
262
- theme.isDark ? theme.colors.dark : theme.colors.primary};
263
- transition: all 0.3s ease;
264
- }
265
-
266
- &::before {
267
- top: 3px;
268
- }
269
-
270
- &::after {
271
- bottom: 3px;
272
- }
273
-
274
- \${({ $isActive }) =>
275
- $isActive &&
276
- css\`
277
- &::before {
278
- transform: translateY(5px) rotate(45deg);
279
- }
280
-
281
- &::after {
282
- transform: translateY(-4px) rotate(-45deg);
283
- }
284
- \`};
285
- \`;
286
-
287
- export const StyledInlineButton = styled.button<{ theme: Theme }>\`
288
- \${resetButton};
289
- \${interactiveStyles};
290
- color: \${({ theme }) => theme.colors.primary};
291
- vertical-align: middle;
292
- border: solid 1px \${({ theme }) => theme.colors.grayLight};
293
- border-radius: \${({ theme }) => theme.spacing.radius.xs};
294
- padding: 0;
295
- width: 18px;
296
- height: 18px;
297
- display: flex;
298
- margin: auto 0;
299
- transition: all 0.3s ease;
300
-
301
- @media (hover: hover) {
302
- &:hover {
303
- color: \${({ theme }) => theme.colors.light};
304
- background: \${({ theme }) => theme.colors.primary};
305
- border-color: \${({ theme }) => theme.colors.primary};
306
- }
307
- }
308
-
309
- & svg {
310
- vertical-align: middle;
311
- width: 12px;
312
- height: 12px;
313
- margin: auto;
314
- }
315
- \`;
316
-
317
- export const StyledPlusButton = styled.button<{ theme: Theme }>\`
318
- \${resetButton};
319
- color: \${({ theme }) => theme.colors.primary};
320
- vertical-align: middle;
321
- padding: 0;
322
- width: 100%;
323
- height: 18px;
324
- display: flex;
325
- margin: auto 0;
326
- transition: all 0.3s ease;
327
- position: relative;
328
- margin: 20px 0 0 0;
329
-
330
- &::before {
331
- content: "";
332
- display: block;
333
- position: absolute;
334
- top: 50%;
335
- transform: translateY(-50%);
336
- width: 100%;
337
- height: 1px;
338
- border-radius: 3px;
339
- background: \${({ theme }) => theme.colors.grayLight};
340
- transition: all 0.3s ease;
341
- z-index: -1;
342
- }
343
-
344
- &::after {
345
- content: "";
346
- display: block;
347
- position: absolute;
348
- left: 50%;
349
- top: 50%;
350
- transform: translate(-50%, -50%);
351
- width: 18px;
352
- height: 18px;
353
- border: solid 1px \${({ theme }) => theme.colors.grayLight};
354
- border-radius: \${({ theme }) => theme.spacing.radius.xs};
355
- background: \${({ theme }) => theme.colors.light};
356
- transition: all 0.3s ease;
357
- z-index: -1;
358
- }
359
-
360
- box-shadow: 0 0 0 0px \${({ theme }) => theme.colors.primary};
361
-
362
- @media (hover: hover) {
363
- &:hover {
364
- &::after {
365
- border-color: \${({ theme }) => theme.colors.primary};
366
- }
367
- }
368
- }
369
-
370
- &:focus {
371
- &::after {
372
- border-color: \${({ theme }) => theme.colors.primary};
373
- box-shadow: 0 0 0 4px \${({ theme }) => theme.colors.primaryLight};
374
- }
375
- }
376
-
377
- &:active {
378
- &::after {
379
- box-shadow: 0 0 0 2px \${({ theme }) => theme.colors.primaryLight};
380
- }
381
- }
382
-
383
- @media (hover: hover) {
384
- &:hover {
385
- color: \${({ theme }) => theme.colors.light};
386
-
387
- &::after {
388
- background: \${({ theme }) => theme.colors.primary};
389
- border-color: \${({ theme }) => theme.colors.primary};
390
- }
391
- }
392
- }
393
-
394
- & svg {
395
- vertical-align: middle;
396
- width: 14px;
397
- height: 14px;
398
- margin: auto;
399
- }
400
- \`;
401
-
402
- export const StyledFullHeightInput = styled.div\`
403
- height: 100%;
404
- width: 100%;
405
- display: flex;
406
- flex-direction: column;
407
- gap: 20px;
408
- flex: 1;
409
-
410
- & > span {
411
- height: 100%;
412
- width: 100%;
413
- }
414
-
415
- & textarea {
416
- height: 100%;
417
- }
418
- \`;
419
-
420
- export const StyledEditorWrapper = styled.div\`
421
- flex: 1;
422
-
423
- &:empty {
424
- display: none;
425
- }
426
- \`;
427
-
428
- function DocsWrapper({ children }: DocsProps) {
429
- return <StyledDocsWrapper>{children}</StyledDocsWrapper>;
430
- }
431
-
432
- function DocsSidebar({ children }: DocsProps) {
433
- return <StyledDocsSidebar>{children}</StyledDocsSidebar>;
434
- }
435
-
436
- function DocsContainer({ children }: DocsProps) {
437
- return <StyledDocsContainer>{children}</StyledDocsContainer>;
438
- }
439
-
440
- export { DocsWrapper, DocsSidebar, DocsContainer };
441
- `;