@aravindc26/velu 0.12.7 → 0.12.9

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 (74) hide show
  1. package/package.json +1 -1
  2. package/src/build.ts +13 -0
  3. package/src/cli.ts +51 -9
  4. package/src/engine/app/(docs)/[...slug]/layout.tsx +21 -537
  5. package/src/engine/app/_preview/[sessionId]/[...slug]/layout.tsx +96 -0
  6. package/src/engine/app/_preview/[sessionId]/[...slug]/page.tsx +298 -0
  7. package/src/engine/app/_preview/[sessionId]/layout.tsx +56 -0
  8. package/src/{preview-engine/app → engine/app/_preview}/[sessionId]/page.tsx +7 -3
  9. package/src/engine/app/_preview/api/sessions/[sessionId]/assets/[...path]/route.ts +51 -0
  10. package/src/{preview-engine/app → engine/app/_preview}/api/sessions/[sessionId]/init/route.ts +2 -2
  11. package/src/{preview-engine/app → engine/app/_preview}/api/sessions/[sessionId]/route.ts +3 -3
  12. package/src/{preview-engine/app → engine/app/_preview}/api/sessions/[sessionId]/sync/route.ts +2 -2
  13. package/src/{preview-engine/app → engine/app/_preview}/layout.tsx +4 -1
  14. package/src/engine/app/global.css +0 -3623
  15. package/src/engine/app/layout.tsx +4 -3
  16. package/src/engine/components/sidebar-links.tsx +11 -5
  17. package/src/engine/lib/docs-layout.tsx +605 -0
  18. package/src/engine/lib/layout.shared.ts +7 -7
  19. package/src/engine/lib/preview-config.ts +129 -0
  20. package/src/{preview-engine/lib/content-generator.ts → engine/lib/preview-content.ts} +242 -42
  21. package/src/engine/lib/source.ts +80 -97
  22. package/src/engine/lib/velu.ts +79 -55
  23. package/src/engine/mdx-components.tsx +14 -650
  24. package/src/engine/source.config.ts +11 -89
  25. package/src/engine/tsconfig.json +1 -0
  26. package/src/engine-core/components/assistant.tsx +361 -0
  27. package/src/engine-core/components/banner.tsx +80 -0
  28. package/src/engine-core/components/changelog-filters.tsx +114 -0
  29. package/src/engine-core/components/code-group.tsx +383 -0
  30. package/src/engine-core/components/color.tsx +118 -0
  31. package/src/engine-core/components/copy-page.tsx +223 -0
  32. package/src/engine-core/components/dropdown-switcher.tsx +142 -0
  33. package/src/engine-core/components/expandable.tsx +77 -0
  34. package/src/engine-core/components/header-tab-link.tsx +43 -0
  35. package/src/engine-core/components/icon.tsx +136 -0
  36. package/src/engine-core/components/image-zoom-fallback.tsx +147 -0
  37. package/src/engine-core/components/image.tsx +111 -0
  38. package/src/engine-core/components/lang-switcher.tsx +101 -0
  39. package/src/engine-core/components/manual-api-playground.tsx +154 -0
  40. package/src/engine-core/components/mermaid.tsx +142 -0
  41. package/src/engine-core/components/openapi-toc-sync.tsx +59 -0
  42. package/src/engine-core/components/openapi.tsx +1682 -0
  43. package/src/engine-core/components/page-feedback-api.test.ts +83 -0
  44. package/src/engine-core/components/page-feedback-api.ts +89 -0
  45. package/src/engine-core/components/page-feedback.tsx +200 -0
  46. package/src/engine-core/components/product-switcher.tsx +107 -0
  47. package/src/engine-core/components/prompt.tsx +90 -0
  48. package/src/engine-core/components/providers.tsx +21 -0
  49. package/src/engine-core/components/search.tsx +318 -0
  50. package/src/engine-core/components/sidebar-links.tsx +54 -0
  51. package/src/engine-core/components/synced-tabs.tsx +57 -0
  52. package/src/engine-core/components/theme-toggle.tsx +39 -0
  53. package/src/engine-core/components/toc-examples.tsx +110 -0
  54. package/src/engine-core/components/version-switcher.tsx +95 -0
  55. package/src/engine-core/components/view.tsx +344 -0
  56. package/src/engine-core/css/assistant.css +326 -0
  57. package/src/engine-core/css/copy-page.css +206 -0
  58. package/src/engine-core/css/search.css +142 -0
  59. package/src/engine-core/css/shared.css +3628 -0
  60. package/src/engine-core/lib/remark-plugins.ts +102 -0
  61. package/src/engine-core/lib/source-plugins.ts +105 -0
  62. package/src/engine-core/mdx-components.tsx +654 -0
  63. package/src/engine-core/types.ts +49 -0
  64. package/src/preview-engine/app/[sessionId]/[...slug]/page.tsx +0 -41
  65. package/src/preview-engine/app/[sessionId]/layout.tsx +0 -23
  66. package/src/preview-engine/app/global.css +0 -3
  67. package/src/preview-engine/lib/session-config.ts +0 -86
  68. package/src/preview-engine/lib/source.ts +0 -60
  69. package/src/preview-engine/next.config.mjs +0 -20
  70. package/src/preview-engine/postcss.config.mjs +0 -8
  71. package/src/preview-engine/source.config.ts +0 -26
  72. package/src/preview-engine/tsconfig.json +0 -32
  73. /package/src/{preview-engine/app → engine/app/_preview}/page.tsx +0 -0
  74. /package/src/{preview-engine/lib/auth.ts → engine/lib/preview-auth.ts} +0 -0
@@ -0,0 +1,206 @@
1
+ /* ── Copy page button ─────────────────────────────────────────────────── */
2
+
3
+ .velu-title-row {
4
+ display: flex;
5
+ align-items: flex-start;
6
+ justify-content: space-between;
7
+ gap: 1rem;
8
+ }
9
+
10
+ .velu-title-row h1 {
11
+ margin: 0;
12
+ }
13
+
14
+ .velu-title-main {
15
+ display: inline-flex;
16
+ align-items: center;
17
+ gap: 0.55rem;
18
+ min-width: 0;
19
+ }
20
+
21
+ .velu-page-deprecated-badge {
22
+ text-transform: uppercase;
23
+ letter-spacing: 0.02em;
24
+ font-size: 0.65rem;
25
+ }
26
+
27
+ .velu-title-actions {
28
+ display: inline-flex;
29
+ align-items: center;
30
+ gap: 0.5rem;
31
+ flex-shrink: 0;
32
+ margin-top: 0.35rem;
33
+ }
34
+
35
+ .velu-page-last-updated {
36
+ margin: 0.35rem 0 0;
37
+ color: var(--color-fd-muted-foreground, #a1a1aa);
38
+ font-size: 0.8125rem;
39
+ }
40
+
41
+ .velu-rss-button {
42
+ display: inline-flex;
43
+ align-items: center;
44
+ justify-content: center;
45
+ border: 1px solid var(--color-fd-border, #27272a);
46
+ border-radius: 999px;
47
+ width: 2.25rem;
48
+ height: 2.25rem;
49
+ padding: 0;
50
+ color: var(--color-fd-muted-foreground, #a1a1aa);
51
+ text-decoration: none;
52
+ line-height: 1;
53
+ transition: color 0.15s, border-color 0.15s, background-color 0.15s;
54
+ }
55
+
56
+ .velu-rss-button svg {
57
+ width: 0.95rem;
58
+ height: 0.95rem;
59
+ }
60
+
61
+ .velu-rss-button:hover {
62
+ color: var(--color-fd-primary, #f46130);
63
+ border-color: color-mix(in oklab, var(--color-fd-primary, #f46130) 45%, var(--color-fd-border, #27272a));
64
+ background: color-mix(in oklab, var(--color-fd-primary, #f46130) 10%, transparent);
65
+ }
66
+
67
+ .velu-copy-page-container {
68
+ position: relative;
69
+ flex-shrink: 0;
70
+ margin-top: 0;
71
+ }
72
+
73
+ .velu-copy-split-btn {
74
+ display: inline-flex;
75
+ align-items: center;
76
+ border: 1px solid var(--color-fd-border, #27272a);
77
+ border-radius: 999px;
78
+ background: var(--color-fd-card, #18181b);
79
+ }
80
+
81
+ .velu-copy-main-btn {
82
+ display: inline-flex;
83
+ align-items: center;
84
+ gap: 0.4rem;
85
+ padding: 0.35rem 0.5rem 0.35rem 0.75rem;
86
+ font-size: 0.75rem;
87
+ font-weight: 500;
88
+ color: var(--color-fd-muted-foreground, #a1a1aa);
89
+ background: none;
90
+ border: none;
91
+ cursor: pointer;
92
+ transition: color 0.15s;
93
+ }
94
+
95
+ .velu-copy-main-btn:hover {
96
+ color: var(--color-fd-foreground, #fafafa);
97
+ }
98
+
99
+ .velu-copy-sep {
100
+ width: 1px;
101
+ height: 14px;
102
+ background-color: var(--color-fd-border, #27272a);
103
+ flex-shrink: 0;
104
+ }
105
+
106
+ .velu-copy-caret-btn {
107
+ display: inline-flex;
108
+ align-items: center;
109
+ padding: 0.35rem 0.5rem;
110
+ background: none;
111
+ border: none;
112
+ color: var(--color-fd-muted-foreground, #a1a1aa);
113
+ cursor: pointer;
114
+ transition: color 0.15s;
115
+ }
116
+
117
+ .velu-copy-caret-btn:hover {
118
+ color: var(--color-fd-foreground, #fafafa);
119
+ }
120
+
121
+ .velu-copy-chevron {
122
+ transition: transform 0.15s;
123
+ }
124
+
125
+ .velu-copy-caret-btn[aria-expanded='true'] .velu-copy-chevron {
126
+ transform: rotate(180deg);
127
+ }
128
+
129
+ .velu-copy-dropdown {
130
+ position: absolute;
131
+ right: 0;
132
+ top: calc(100% + 0.35rem);
133
+ z-index: 100;
134
+ min-width: 16rem;
135
+ padding: 0.35rem;
136
+ background: var(--color-fd-card, #18181b);
137
+ border: 1px solid var(--color-fd-border, #27272a);
138
+ border-radius: 0.5rem;
139
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);
140
+ }
141
+
142
+ .velu-copy-option {
143
+ display: flex;
144
+ align-items: flex-start;
145
+ gap: 0.5rem;
146
+ width: 100%;
147
+ padding: 0.5rem 0.6rem;
148
+ font: inherit;
149
+ font-size: 0.875rem;
150
+ color: var(--color-fd-foreground, #fafafa);
151
+ text-align: left;
152
+ text-decoration: none;
153
+ background: none;
154
+ border: none;
155
+ border-radius: 0.35rem;
156
+ cursor: pointer;
157
+ transition: background-color 0.15s;
158
+ }
159
+
160
+ .velu-copy-option:hover {
161
+ background-color: var(--color-fd-accent, #27272a);
162
+ }
163
+
164
+ .velu-copy-option-icon {
165
+ display: inline-flex;
166
+ align-items: center;
167
+ justify-content: center;
168
+ width: 18px;
169
+ height: 18px;
170
+ flex-shrink: 0;
171
+ margin-top: 0.15rem;
172
+ }
173
+
174
+ .velu-copy-option-icon svg,
175
+ .velu-copy-option svg {
176
+ flex-shrink: 0;
177
+ opacity: 0.7;
178
+ overflow: visible;
179
+ }
180
+
181
+ .velu-copy-option-title {
182
+ font-weight: 500;
183
+ line-height: 1.3;
184
+ }
185
+
186
+ .velu-copy-option-desc {
187
+ font-size: 0.75rem;
188
+ color: var(--color-fd-muted-foreground, #a1a1aa);
189
+ line-height: 1.3;
190
+ }
191
+
192
+ .velu-external-arrow {
193
+ font-size: 0.75em;
194
+ opacity: 0.5;
195
+ }
196
+
197
+ @media (max-width: 640px) {
198
+ .velu-title-row {
199
+ flex-wrap: wrap;
200
+ gap: 0.75rem;
201
+ }
202
+
203
+ .velu-title-actions {
204
+ margin-top: 0;
205
+ }
206
+ }
@@ -0,0 +1,142 @@
1
+ /* Pagefind search dialog */
2
+ .fd-search-dialog {
3
+ position: fixed;
4
+ inset: 0;
5
+ z-index: 50;
6
+ margin: auto;
7
+ border: none;
8
+ background: transparent;
9
+ padding: 0;
10
+ max-width: 100vw;
11
+ max-height: 100vh;
12
+ width: 100vw;
13
+ height: 100vh;
14
+ }
15
+
16
+ .fd-search-dialog::backdrop {
17
+ background: rgba(0, 0, 0, 0.5);
18
+ backdrop-filter: blur(2px);
19
+ }
20
+
21
+ .fd-search-content {
22
+ position: absolute;
23
+ top: 15%;
24
+ left: 50%;
25
+ transform: translateX(-50%);
26
+ width: min(560px, 90vw);
27
+ max-height: 70vh;
28
+ display: flex;
29
+ flex-direction: column;
30
+ border-radius: 12px;
31
+ border: 1px solid var(--color-fd-border, #27272a);
32
+ background: var(--color-fd-background, #09090b);
33
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
34
+ overflow: hidden;
35
+ }
36
+
37
+ .fd-search-input-wrap {
38
+ display: flex;
39
+ align-items: center;
40
+ gap: 8px;
41
+ padding: 12px 16px;
42
+ border-bottom: 1px solid var(--color-fd-border, #27272a);
43
+ color: var(--color-fd-muted-foreground, #a1a1aa);
44
+ }
45
+
46
+ .fd-search-input {
47
+ flex: 1;
48
+ background: transparent;
49
+ border: none;
50
+ outline: none;
51
+ font-size: 0.9375rem;
52
+ color: var(--color-fd-foreground, #fafafa);
53
+ }
54
+
55
+ .fd-search-input::placeholder {
56
+ color: var(--color-fd-muted-foreground, #a1a1aa);
57
+ }
58
+
59
+ .fd-search-kbd {
60
+ font-size: 0.75rem;
61
+ padding: 2px 6px;
62
+ border-radius: 4px;
63
+ border: 1px solid var(--color-fd-border, #27272a);
64
+ color: var(--color-fd-muted-foreground, #a1a1aa);
65
+ cursor: pointer;
66
+ font-family: inherit;
67
+ }
68
+
69
+ .fd-search-results {
70
+ overflow-y: auto;
71
+ padding: 8px;
72
+ max-height: calc(70vh - 50px);
73
+ }
74
+
75
+ .fd-search-empty {
76
+ padding: 24px 16px;
77
+ text-align: center;
78
+ color: var(--color-fd-muted-foreground, #a1a1aa);
79
+ font-size: 0.875rem;
80
+ }
81
+
82
+ .fd-search-result {
83
+ display: block;
84
+ padding: 10px 12px;
85
+ border-radius: 8px;
86
+ text-decoration: none;
87
+ color: var(--color-fd-foreground, #fafafa);
88
+ transition: background 0.15s;
89
+ }
90
+
91
+ .fd-search-result:hover {
92
+ background: var(--color-fd-accent, #27272a);
93
+ }
94
+
95
+ .fd-search-result.is-active {
96
+ background: var(--color-fd-accent, #27272a);
97
+ }
98
+
99
+ .fd-search-result-title {
100
+ display: block;
101
+ font-weight: 500;
102
+ font-size: 0.875rem;
103
+ margin-bottom: 2px;
104
+ }
105
+
106
+ .fd-search-result-excerpt {
107
+ display: block;
108
+ font-size: 0.8125rem;
109
+ color: var(--color-fd-muted-foreground, #a1a1aa);
110
+ overflow: hidden;
111
+ text-overflow: ellipsis;
112
+ display: -webkit-box;
113
+ -webkit-line-clamp: 2;
114
+ -webkit-box-orient: vertical;
115
+ }
116
+
117
+ .fd-search-result-excerpt mark {
118
+ background: var(--color-fd-primary, #818cf8);
119
+ color: var(--color-fd-primary-foreground, #fff);
120
+ border-radius: 2px;
121
+ padding: 0 2px;
122
+ }
123
+
124
+ /* Search filter indicator */
125
+ .fd-search-filters {
126
+ display: flex;
127
+ align-items: center;
128
+ gap: 8px;
129
+ padding: 8px 16px;
130
+ border-bottom: 1px solid var(--color-fd-border, #27272a);
131
+ background: var(--color-fd-accent, #27272a);
132
+ font-size: 0.75rem;
133
+ }
134
+
135
+ .fd-search-filter-label {
136
+ color: var(--color-fd-muted-foreground, #a1a1aa);
137
+ }
138
+
139
+ .fd-search-filter-value {
140
+ color: var(--color-fd-primary, #818cf8);
141
+ font-weight: 500;
142
+ }