@veluai/velu 0.2.25 → 0.2.27

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 (114) hide show
  1. package/README.md +80 -80
  2. package/dist/cli.js +44 -44
  3. package/package.json +64 -64
  4. package/runtime/velu-ui/base.css +320 -320
  5. package/runtime/velu-ui/components/Accordion.jsx +64 -64
  6. package/runtime/velu-ui/components/ApiClient.jsx +207 -207
  7. package/runtime/velu-ui/components/ApiField.jsx +87 -87
  8. package/runtime/velu-ui/components/ApiPath.jsx +63 -63
  9. package/runtime/velu-ui/components/ApiReferencePage.jsx +384 -384
  10. package/runtime/velu-ui/components/ApiSamples.jsx +36 -36
  11. package/runtime/velu-ui/components/ApiSidebar.jsx +125 -125
  12. package/runtime/velu-ui/components/AskBar.jsx +71 -71
  13. package/runtime/velu-ui/components/Callout.jsx +114 -114
  14. package/runtime/velu-ui/components/Card.jsx +131 -131
  15. package/runtime/velu-ui/components/ChangelogFilters.jsx +75 -75
  16. package/runtime/velu-ui/components/Chatbot.jsx +972 -972
  17. package/runtime/velu-ui/components/CodeBlock.jsx +375 -375
  18. package/runtime/velu-ui/components/Columns.jsx +56 -56
  19. package/runtime/velu-ui/components/ContextMenu.jsx +327 -327
  20. package/runtime/velu-ui/components/ErrorCard.jsx +138 -138
  21. package/runtime/velu-ui/components/Field.jsx +81 -81
  22. package/runtime/velu-ui/components/Image.jsx +163 -163
  23. package/runtime/velu-ui/components/Logo.jsx +31 -31
  24. package/runtime/velu-ui/components/MethodBadge.jsx +31 -31
  25. package/runtime/velu-ui/components/NavSelect.jsx +108 -108
  26. package/runtime/velu-ui/components/NotFound.jsx +63 -63
  27. package/runtime/velu-ui/components/PageFeedback.jsx +219 -219
  28. package/runtime/velu-ui/components/PageFooter.jsx +145 -145
  29. package/runtime/velu-ui/components/PageHeader.jsx +422 -422
  30. package/runtime/velu-ui/components/PageNav.jsx +77 -77
  31. package/runtime/velu-ui/components/PoweredBy.jsx +51 -51
  32. package/runtime/velu-ui/components/Prompt.jsx +115 -115
  33. package/runtime/velu-ui/components/Search.jsx +460 -460
  34. package/runtime/velu-ui/components/Sidebar.jsx +246 -246
  35. package/runtime/velu-ui/components/SocialLinks.jsx +90 -90
  36. package/runtime/velu-ui/components/Steps.jsx +65 -65
  37. package/runtime/velu-ui/components/ThemeToggle.jsx +48 -48
  38. package/runtime/velu-ui/components/Toc.jsx +537 -537
  39. package/runtime/velu-ui/components/TocBar.jsx +195 -195
  40. package/runtime/velu-ui/components/Tree.jsx +87 -87
  41. package/runtime/velu-ui/components/TryItBar.jsx +102 -102
  42. package/runtime/velu-ui/components/Update.jsx +92 -92
  43. package/runtime/velu-ui/components/accordion.css +92 -92
  44. package/runtime/velu-ui/components/api-page.css +208 -208
  45. package/runtime/velu-ui/components/api.css +635 -635
  46. package/runtime/velu-ui/components/ask-bar.css +103 -103
  47. package/runtime/velu-ui/components/card.css +105 -105
  48. package/runtime/velu-ui/components/changelog-filters.css +43 -43
  49. package/runtime/velu-ui/components/chatbot.css +687 -687
  50. package/runtime/velu-ui/components/code-block.css +263 -263
  51. package/runtime/velu-ui/components/context-menu.css +199 -199
  52. package/runtime/velu-ui/components/docs-layout.css +822 -822
  53. package/runtime/velu-ui/components/field.css +82 -82
  54. package/runtime/velu-ui/components/image.css +237 -237
  55. package/runtime/velu-ui/components/nav-select.css +157 -157
  56. package/runtime/velu-ui/components/not-found.css +94 -94
  57. package/runtime/velu-ui/components/page-feedback.css +261 -261
  58. package/runtime/velu-ui/components/page-footer.css +130 -130
  59. package/runtime/velu-ui/components/page-header.css +558 -558
  60. package/runtime/velu-ui/components/page-nav.css +50 -50
  61. package/runtime/velu-ui/components/powered-by.css +92 -92
  62. package/runtime/velu-ui/components/prompt.css +99 -99
  63. package/runtime/velu-ui/components/search.css +307 -307
  64. package/runtime/velu-ui/components/sidebar.css +205 -205
  65. package/runtime/velu-ui/components/steps.css +77 -77
  66. package/runtime/velu-ui/components/theme-toggle.css +102 -102
  67. package/runtime/velu-ui/components/toc-bar.css +234 -234
  68. package/runtime/velu-ui/components/tree.css +49 -49
  69. package/runtime/velu-ui/components/update.css +111 -111
  70. package/runtime/velu-ui/index.js +58 -58
  71. package/runtime/velu-ui/lib/api-send.js +118 -118
  72. package/runtime/velu-ui/lib/brand-icons.jsx +103 -103
  73. package/runtime/velu-ui/lib/component-schemas.js +100 -100
  74. package/runtime/velu-ui/lib/copyText.js +64 -64
  75. package/runtime/velu-ui/lib/docs-assistant.js +273 -273
  76. package/runtime/velu-ui/lib/lang-icons.jsx +147 -147
  77. package/runtime/velu-ui/lib/page-feedback.js +72 -72
  78. package/runtime/velu-ui/lib/pagefind.js +116 -116
  79. package/runtime/velu-ui/lib/prism-langs.js +957 -957
  80. package/runtime/velu-ui/lib/prism-loader.js +74 -74
  81. package/runtime/velu-ui/lib/resolveIcon.jsx +29 -29
  82. package/runtime/velu-ui/lib/scrollIntoNearestView.js +66 -66
  83. package/runtime/velu-ui/mdx-components.jsx +107 -107
  84. package/runtime/velu-ui/primitives/Cluster.jsx +49 -49
  85. package/runtime/velu-ui/primitives/Stack.jsx +63 -63
  86. package/runtime/velu-ui/primitives/Switcher.jsx +57 -57
  87. package/runtime/velu-ui/primitives/stack.css +3 -3
  88. package/runtime/velu-ui/primitives/switcher.css +25 -25
  89. package/runtime/velu-ui/styles.css +48 -48
  90. package/runtime/velu-ui/tokens.css +4 -4
  91. package/schema/velu.schema.json +419 -419
  92. package/src/lib/extract-mdx-error.js +170 -170
  93. package/src/lib/issues.js +159 -159
  94. package/src/lib/known-components.js +35 -35
  95. package/src/navigation.js +459 -459
  96. package/src/runtime/App.jsx +1754 -1754
  97. package/src/runtime/ErrorBoundary.jsx +54 -54
  98. package/src/runtime/client-entry.jsx +27 -27
  99. package/src/runtime/server-entry.jsx +24 -24
  100. package/src/template.html +48 -48
  101. package/templates/starter/ai-tools/claude-code.mdx +26 -26
  102. package/templates/starter/ai-tools/cursor.mdx +17 -17
  103. package/templates/starter/api-reference/introduction.mdx +43 -43
  104. package/templates/starter/development.mdx +19 -19
  105. package/templates/starter/essentials/code.mdx +29 -29
  106. package/templates/starter/essentials/images.mdx +29 -29
  107. package/templates/starter/essentials/markdown.mdx +25 -25
  108. package/templates/starter/essentials/navigation.mdx +39 -39
  109. package/templates/starter/essentials/settings.mdx +30 -30
  110. package/templates/starter/favicon.svg +6 -6
  111. package/templates/starter/index.mdx +31 -31
  112. package/templates/starter/openapi.json +160 -160
  113. package/templates/starter/quickstart.mdx +31 -31
  114. package/templates/starter/velu.json +40 -40
@@ -1,138 +1,138 @@
1
- import React from 'react';
2
-
3
- /**
4
- * ErrorCard — a branded, self-contained card that renders ONE Velu "issue"
5
- * (an MDX or velu.json problem). Used by the dev server's per-page error
6
- * boundary. Deliberately presentational and dependency-free (no other Velu
7
- * components, no effects) so it can never fail while reporting a failure.
8
- *
9
- * Styled with inline styles + design tokens (with hard fallbacks), so it looks
10
- * right even when the page's own CSS hasn't loaded.
11
- */
12
- const DANGER = 'var(--danger-stroke-color, #ef4444)';
13
- const DANGER_BG =
14
- 'var(--danger-bg-color, color-mix(in srgb, #ef4444 7%, transparent))';
15
- const MUTED = 'var(--muted-color, #6b7280)';
16
- const TEXT = 'var(--text-color, #111827)';
17
-
18
- export default function ErrorCard({
19
- label,
20
- title,
21
- file,
22
- line,
23
- column,
24
- frame,
25
- detail,
26
- hint,
27
- suggestion,
28
- }) {
29
- const loc = file
30
- ? `${file}${line ? `:${line}${column ? `:${column}` : ''}` : ''}`
31
- : null;
32
-
33
- return (
34
- <div
35
- role="alert"
36
- style={{
37
- border: `1px solid ${DANGER}`,
38
- borderRadius: 'var(--radius-md, 10px)',
39
- background: DANGER_BG,
40
- padding: 'var(--s2, 1rem)',
41
- margin: 'var(--s2, 1rem) 0',
42
- fontFamily: 'var(--font-sans, system-ui, sans-serif)',
43
- color: TEXT,
44
- lineHeight: 1.5,
45
- }}
46
- >
47
- <div
48
- style={{
49
- display: 'flex',
50
- gap: '0.6rem',
51
- alignItems: 'center',
52
- flexWrap: 'wrap',
53
- }}
54
- >
55
- <span
56
- style={{
57
- fontFamily: 'var(--font-mono, ui-monospace, monospace)',
58
- fontSize: 11,
59
- textTransform: 'uppercase',
60
- letterSpacing: '0.06em',
61
- fontWeight: 600,
62
- color: DANGER,
63
- border: `1px solid ${DANGER}`,
64
- borderRadius: 999,
65
- padding: '2px 9px',
66
- whiteSpace: 'nowrap',
67
- }}
68
- >
69
- {label}
70
- </span>
71
- </div>
72
-
73
- {title && (
74
- <div style={{ marginTop: '0.6rem', fontWeight: 600, fontSize: '1.05rem' }}>
75
- {title}
76
- </div>
77
- )}
78
-
79
- {loc && (
80
- <div
81
- style={{
82
- display: 'inline-block',
83
- marginTop: '0.7rem',
84
- fontFamily: 'var(--font-mono, ui-monospace, monospace)',
85
- fontSize: 15,
86
- fontWeight: 600,
87
- letterSpacing: '0.01em',
88
- color: DANGER,
89
- background: 'var(--danger-bg-color, rgba(239,68,68,0.12))',
90
- border: `1px solid ${DANGER}`,
91
- borderRadius: 7,
92
- padding: '7px 11px',
93
- }}
94
- >
95
- {loc}
96
- </div>
97
- )}
98
- {detail && (
99
- <div style={{ marginTop: '0.25rem', color: MUTED }}>{detail}</div>
100
- )}
101
-
102
- {frame && (
103
- <pre
104
- style={{
105
- marginTop: '0.75rem',
106
- marginBottom: 0,
107
- padding: '0.75rem 0.9rem',
108
- overflow: 'auto',
109
- background: 'var(--code-bg-color, rgba(0,0,0,0.05))',
110
- borderRadius: 'var(--radius-sm, 6px)',
111
- fontFamily: 'var(--font-mono, ui-monospace, monospace)',
112
- fontSize: 12.5,
113
- lineHeight: 1.5,
114
- color: TEXT,
115
- }}
116
- >
117
- {frame}
118
- </pre>
119
- )}
120
-
121
- {suggestion && (
122
- <div style={{ marginTop: '0.75rem' }}>
123
- Did you mean{' '}
124
- <code style={{ fontWeight: 600, color: DANGER }}>
125
- {`<${suggestion}>`}
126
- </code>
127
- ?
128
- </div>
129
- )}
130
-
131
- {hint && (
132
- <div style={{ marginTop: '0.6rem', color: MUTED, fontSize: '0.92rem' }}>
133
- {hint}
134
- </div>
135
- )}
136
- </div>
137
- );
138
- }
1
+ import React from 'react';
2
+
3
+ /**
4
+ * ErrorCard — a branded, self-contained card that renders ONE Velu "issue"
5
+ * (an MDX or velu.json problem). Used by the dev server's per-page error
6
+ * boundary. Deliberately presentational and dependency-free (no other Velu
7
+ * components, no effects) so it can never fail while reporting a failure.
8
+ *
9
+ * Styled with inline styles + design tokens (with hard fallbacks), so it looks
10
+ * right even when the page's own CSS hasn't loaded.
11
+ */
12
+ const DANGER = 'var(--danger-stroke-color, #ef4444)';
13
+ const DANGER_BG =
14
+ 'var(--danger-bg-color, color-mix(in srgb, #ef4444 7%, transparent))';
15
+ const MUTED = 'var(--muted-color, #6b7280)';
16
+ const TEXT = 'var(--text-color, #111827)';
17
+
18
+ export default function ErrorCard({
19
+ label,
20
+ title,
21
+ file,
22
+ line,
23
+ column,
24
+ frame,
25
+ detail,
26
+ hint,
27
+ suggestion,
28
+ }) {
29
+ const loc = file
30
+ ? `${file}${line ? `:${line}${column ? `:${column}` : ''}` : ''}`
31
+ : null;
32
+
33
+ return (
34
+ <div
35
+ role="alert"
36
+ style={{
37
+ border: `1px solid ${DANGER}`,
38
+ borderRadius: 'var(--radius-md, 10px)',
39
+ background: DANGER_BG,
40
+ padding: 'var(--s2, 1rem)',
41
+ margin: 'var(--s2, 1rem) 0',
42
+ fontFamily: 'var(--font-sans, system-ui, sans-serif)',
43
+ color: TEXT,
44
+ lineHeight: 1.5,
45
+ }}
46
+ >
47
+ <div
48
+ style={{
49
+ display: 'flex',
50
+ gap: '0.6rem',
51
+ alignItems: 'center',
52
+ flexWrap: 'wrap',
53
+ }}
54
+ >
55
+ <span
56
+ style={{
57
+ fontFamily: 'var(--font-mono, ui-monospace, monospace)',
58
+ fontSize: 11,
59
+ textTransform: 'uppercase',
60
+ letterSpacing: '0.06em',
61
+ fontWeight: 600,
62
+ color: DANGER,
63
+ border: `1px solid ${DANGER}`,
64
+ borderRadius: 999,
65
+ padding: '2px 9px',
66
+ whiteSpace: 'nowrap',
67
+ }}
68
+ >
69
+ {label}
70
+ </span>
71
+ </div>
72
+
73
+ {title && (
74
+ <div style={{ marginTop: '0.6rem', fontWeight: 600, fontSize: '1.05rem' }}>
75
+ {title}
76
+ </div>
77
+ )}
78
+
79
+ {loc && (
80
+ <div
81
+ style={{
82
+ display: 'inline-block',
83
+ marginTop: '0.7rem',
84
+ fontFamily: 'var(--font-mono, ui-monospace, monospace)',
85
+ fontSize: 15,
86
+ fontWeight: 600,
87
+ letterSpacing: '0.01em',
88
+ color: DANGER,
89
+ background: 'var(--danger-bg-color, rgba(239,68,68,0.12))',
90
+ border: `1px solid ${DANGER}`,
91
+ borderRadius: 7,
92
+ padding: '7px 11px',
93
+ }}
94
+ >
95
+ {loc}
96
+ </div>
97
+ )}
98
+ {detail && (
99
+ <div style={{ marginTop: '0.25rem', color: MUTED }}>{detail}</div>
100
+ )}
101
+
102
+ {frame && (
103
+ <pre
104
+ style={{
105
+ marginTop: '0.75rem',
106
+ marginBottom: 0,
107
+ padding: '0.75rem 0.9rem',
108
+ overflow: 'auto',
109
+ background: 'var(--code-bg-color, rgba(0,0,0,0.05))',
110
+ borderRadius: 'var(--radius-sm, 6px)',
111
+ fontFamily: 'var(--font-mono, ui-monospace, monospace)',
112
+ fontSize: 12.5,
113
+ lineHeight: 1.5,
114
+ color: TEXT,
115
+ }}
116
+ >
117
+ {frame}
118
+ </pre>
119
+ )}
120
+
121
+ {suggestion && (
122
+ <div style={{ marginTop: '0.75rem' }}>
123
+ Did you mean{' '}
124
+ <code style={{ fontWeight: 600, color: DANGER }}>
125
+ {`<${suggestion}>`}
126
+ </code>
127
+ ?
128
+ </div>
129
+ )}
130
+
131
+ {hint && (
132
+ <div style={{ marginTop: '0.6rem', color: MUTED, fontSize: '0.92rem' }}>
133
+ {hint}
134
+ </div>
135
+ )}
136
+ </div>
137
+ );
138
+ }
@@ -1,81 +1,81 @@
1
- import React from 'react';
2
- import Cluster from '../primitives/Cluster.jsx';
3
-
4
- /**
5
- * Field — a documentation row for an API parameter / config option.
6
- *
7
- * <Field name="depth" pre="GET" type="number" required default={3}
8
- * post="optional"
9
- * >
10
- * An example of a parameter field. Description text wraps below
11
- * the chip row.
12
- * </Field>
13
- *
14
- * Layout (left → right, all in a single flex-wrap row):
15
- * [pre chip] [name] [type chip] [required pill]
16
- * [default: VALUE] [post chip] followed by the description
17
- *
18
- * - `name` — required-ish; the parameter identifier (accent, bold, mono)
19
- * - `pre` — small monospace chip rendered before `name` (e.g. method
20
- * or namespace). React-node or string.
21
- * - `type` — small monospace chip after `name` (e.g. "string", "number")
22
- * - `required` — boolean → renders the red "required" pill
23
- * - `default` — value rendered as `default: <value>` in italic monospace
24
- * (renamed locally because `default` is a reserved word)
25
- * - `post` — trailing chip after default
26
- * - `children` — description block beneath the chip row
27
- *
28
- * Sibling Field elements get a hairline divider via CSS — drop them next
29
- * to each other and the separators appear; no wrapper required.
30
- *
31
- * Fully tokenized: chips use --surface-color, required pill mixes with
32
- * --accent-color, default is --muted-color italic. Light/dark
33
- * automatic via [data-theme] like the rest of velu-ui.
34
- */
35
-
36
- export default function Field({
37
- name,
38
- pre,
39
- type,
40
- required = false,
41
- default: defaultValue,
42
- post,
43
- children,
44
- className = '',
45
- ...rest
46
- }) {
47
- const hasDefault = defaultValue !== undefined && defaultValue !== null;
48
- return (
49
- <div className={`velu-field ${className}`.trim()} {...rest}>
50
- {/* Cluster handles the wrap-friendly inline row layout — chips +
51
- name + type + required + default + post — with a 16px gap and
52
- baseline alignment so the bold name doesn't shift vertically
53
- relative to its sibling chips. */}
54
- <Cluster space="var(--s0)" align="baseline">
55
- {pre != null && (
56
- <span className="velu-field__chip">{pre}</span>
57
- )}
58
- {name != null && (
59
- <span className="velu-field__name">{name}</span>
60
- )}
61
- {type != null && (
62
- <span className="velu-field__chip">{type}</span>
63
- )}
64
- {required && (
65
- <span className="velu-field__required">required</span>
66
- )}
67
- {hasDefault && (
68
- <span className="velu-field__default">
69
- default: {String(defaultValue)}
70
- </span>
71
- )}
72
- {post != null && (
73
- <span className="velu-field__chip">{post}</span>
74
- )}
75
- </Cluster>
76
- {children != null && children !== false && (
77
- <div className="velu-field__body">{children}</div>
78
- )}
79
- </div>
80
- );
81
- }
1
+ import React from 'react';
2
+ import Cluster from '../primitives/Cluster.jsx';
3
+
4
+ /**
5
+ * Field — a documentation row for an API parameter / config option.
6
+ *
7
+ * <Field name="depth" pre="GET" type="number" required default={3}
8
+ * post="optional"
9
+ * >
10
+ * An example of a parameter field. Description text wraps below
11
+ * the chip row.
12
+ * </Field>
13
+ *
14
+ * Layout (left → right, all in a single flex-wrap row):
15
+ * [pre chip] [name] [type chip] [required pill]
16
+ * [default: VALUE] [post chip] followed by the description
17
+ *
18
+ * - `name` — required-ish; the parameter identifier (accent, bold, mono)
19
+ * - `pre` — small monospace chip rendered before `name` (e.g. method
20
+ * or namespace). React-node or string.
21
+ * - `type` — small monospace chip after `name` (e.g. "string", "number")
22
+ * - `required` — boolean → renders the red "required" pill
23
+ * - `default` — value rendered as `default: <value>` in italic monospace
24
+ * (renamed locally because `default` is a reserved word)
25
+ * - `post` — trailing chip after default
26
+ * - `children` — description block beneath the chip row
27
+ *
28
+ * Sibling Field elements get a hairline divider via CSS — drop them next
29
+ * to each other and the separators appear; no wrapper required.
30
+ *
31
+ * Fully tokenized: chips use --surface-color, required pill mixes with
32
+ * --accent-color, default is --muted-color italic. Light/dark
33
+ * automatic via [data-theme] like the rest of velu-ui.
34
+ */
35
+
36
+ export default function Field({
37
+ name,
38
+ pre,
39
+ type,
40
+ required = false,
41
+ default: defaultValue,
42
+ post,
43
+ children,
44
+ className = '',
45
+ ...rest
46
+ }) {
47
+ const hasDefault = defaultValue !== undefined && defaultValue !== null;
48
+ return (
49
+ <div className={`velu-field ${className}`.trim()} {...rest}>
50
+ {/* Cluster handles the wrap-friendly inline row layout — chips +
51
+ name + type + required + default + post — with a 16px gap and
52
+ baseline alignment so the bold name doesn't shift vertically
53
+ relative to its sibling chips. */}
54
+ <Cluster space="var(--s0)" align="baseline">
55
+ {pre != null && (
56
+ <span className="velu-field__chip">{pre}</span>
57
+ )}
58
+ {name != null && (
59
+ <span className="velu-field__name">{name}</span>
60
+ )}
61
+ {type != null && (
62
+ <span className="velu-field__chip">{type}</span>
63
+ )}
64
+ {required && (
65
+ <span className="velu-field__required">required</span>
66
+ )}
67
+ {hasDefault && (
68
+ <span className="velu-field__default">
69
+ default: {String(defaultValue)}
70
+ </span>
71
+ )}
72
+ {post != null && (
73
+ <span className="velu-field__chip">{post}</span>
74
+ )}
75
+ </Cluster>
76
+ {children != null && children !== false && (
77
+ <div className="velu-field__body">{children}</div>
78
+ )}
79
+ </div>
80
+ );
81
+ }