@veluai/velu 0.1.13 → 0.1.15

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 (98) hide show
  1. package/README.md +80 -80
  2. package/dist/cli.js +21 -21
  3. package/package.json +3 -2
  4. package/runtime/velu-ui/components/Accordion.jsx +64 -64
  5. package/runtime/velu-ui/components/ApiClient.jsx +121 -121
  6. package/runtime/velu-ui/components/ApiField.jsx +87 -87
  7. package/runtime/velu-ui/components/ApiPath.jsx +63 -63
  8. package/runtime/velu-ui/components/ApiSidebar.jsx +122 -122
  9. package/runtime/velu-ui/components/AskBar.jsx +71 -71
  10. package/runtime/velu-ui/components/Callout.jsx +114 -114
  11. package/runtime/velu-ui/components/Card.jsx +131 -131
  12. package/runtime/velu-ui/components/Chatbot.jsx +596 -596
  13. package/runtime/velu-ui/components/CodeBlock.jsx +375 -375
  14. package/runtime/velu-ui/components/Columns.jsx +56 -56
  15. package/runtime/velu-ui/components/ErrorCard.jsx +138 -138
  16. package/runtime/velu-ui/components/Field.jsx +81 -81
  17. package/runtime/velu-ui/components/Image.jsx +163 -163
  18. package/runtime/velu-ui/components/Logo.jsx +31 -0
  19. package/runtime/velu-ui/components/MethodBadge.jsx +31 -31
  20. package/runtime/velu-ui/components/NavSelect.jsx +108 -108
  21. package/runtime/velu-ui/components/PageFeedback.jsx +219 -219
  22. package/runtime/velu-ui/components/PageFooter.jsx +145 -213
  23. package/runtime/velu-ui/components/PageHeader.jsx +422 -414
  24. package/runtime/velu-ui/components/PageNav.jsx +77 -77
  25. package/runtime/velu-ui/components/PoweredBy.jsx +51 -51
  26. package/runtime/velu-ui/components/Prompt.jsx +115 -115
  27. package/runtime/velu-ui/components/Search.jsx +411 -366
  28. package/runtime/velu-ui/components/Sidebar.jsx +191 -191
  29. package/runtime/velu-ui/components/SocialLinks.jsx +90 -0
  30. package/runtime/velu-ui/components/Steps.jsx +65 -65
  31. package/runtime/velu-ui/components/ThemeToggle.jsx +48 -48
  32. package/runtime/velu-ui/components/Toc.jsx +537 -537
  33. package/runtime/velu-ui/components/TocBar.jsx +195 -195
  34. package/runtime/velu-ui/components/Tree.jsx +87 -87
  35. package/runtime/velu-ui/components/TryItBar.jsx +90 -90
  36. package/runtime/velu-ui/components/accordion.css +92 -92
  37. package/runtime/velu-ui/components/api.css +479 -479
  38. package/runtime/velu-ui/components/ask-bar.css +94 -94
  39. package/runtime/velu-ui/components/card.css +105 -105
  40. package/runtime/velu-ui/components/chatbot.css +617 -617
  41. package/runtime/velu-ui/components/code-block.css +263 -263
  42. package/runtime/velu-ui/components/docs-layout.css +784 -775
  43. package/runtime/velu-ui/components/field.css +82 -82
  44. package/runtime/velu-ui/components/image.css +237 -237
  45. package/runtime/velu-ui/components/nav-select.css +157 -157
  46. package/runtime/velu-ui/components/page-feedback.css +241 -241
  47. package/runtime/velu-ui/components/page-footer.css +130 -130
  48. package/runtime/velu-ui/components/page-header.css +557 -520
  49. package/runtime/velu-ui/components/page-nav.css +50 -50
  50. package/runtime/velu-ui/components/powered-by.css +86 -66
  51. package/runtime/velu-ui/components/prompt.css +99 -99
  52. package/runtime/velu-ui/components/search.css +307 -307
  53. package/runtime/velu-ui/components/sidebar.css +144 -144
  54. package/runtime/velu-ui/components/steps.css +77 -77
  55. package/runtime/velu-ui/components/theme-toggle.css +101 -101
  56. package/runtime/velu-ui/components/toc-bar.css +234 -234
  57. package/runtime/velu-ui/components/tree.css +49 -49
  58. package/runtime/velu-ui/index.js +48 -46
  59. package/runtime/velu-ui/lib/component-schemas.js +100 -100
  60. package/runtime/velu-ui/lib/copyText.js +64 -64
  61. package/runtime/velu-ui/lib/lang-icons.jsx +147 -147
  62. package/runtime/velu-ui/lib/prism-langs.js +957 -957
  63. package/runtime/velu-ui/lib/prism-loader.js +74 -74
  64. package/runtime/velu-ui/lib/resolveIcon.jsx +29 -29
  65. package/runtime/velu-ui/lib/scrollIntoNearestView.js +66 -66
  66. package/runtime/velu-ui/mdx-components.jsx +105 -105
  67. package/runtime/velu-ui/primitives/Cluster.jsx +49 -49
  68. package/runtime/velu-ui/primitives/Stack.jsx +63 -63
  69. package/runtime/velu-ui/primitives/Switcher.jsx +57 -57
  70. package/runtime/velu-ui/primitives/stack.css +3 -3
  71. package/runtime/velu-ui/primitives/switcher.css +25 -25
  72. package/runtime/velu-ui/styles.css +43 -43
  73. package/runtime/velu-ui/tokens.css +4 -4
  74. package/schema/velu.schema.json +281 -167
  75. package/src/lib/extract-mdx-error.js +170 -170
  76. package/src/lib/issues.js +159 -159
  77. package/src/lib/known-components.js +34 -34
  78. package/src/navigation.js +434 -434
  79. package/src/runtime/App.jsx +1506 -1476
  80. package/src/runtime/ErrorBoundary.jsx +54 -54
  81. package/src/runtime/client-entry.jsx +22 -22
  82. package/src/runtime/server-entry.jsx +16 -16
  83. package/src/template.html +48 -48
  84. package/templates/starter/ai-tools/claude-code.mdx +26 -26
  85. package/templates/starter/ai-tools/cursor.mdx +17 -17
  86. package/templates/starter/api-reference/endpoint/create.mdx +24 -24
  87. package/templates/starter/api-reference/endpoint/get.mdx +27 -27
  88. package/templates/starter/api-reference/introduction.mdx +28 -28
  89. package/templates/starter/development.mdx +19 -19
  90. package/templates/starter/essentials/code.mdx +29 -29
  91. package/templates/starter/essentials/images.mdx +29 -29
  92. package/templates/starter/essentials/markdown.mdx +25 -25
  93. package/templates/starter/essentials/navigation.mdx +39 -39
  94. package/templates/starter/essentials/settings.mdx +30 -30
  95. package/templates/starter/favicon.svg +6 -6
  96. package/templates/starter/index.mdx +31 -31
  97. package/templates/starter/quickstart.mdx +31 -31
  98. package/templates/starter/velu.json +33 -33
@@ -1,90 +1,90 @@
1
- import React, { useState } from 'react';
2
- import resolveIcon from '../lib/resolveIcon.jsx';
3
- import Cluster from '../primitives/Cluster.jsx';
4
- import copyText from '../lib/copyText.js';
5
- import MethodBadge from './MethodBadge.jsx';
6
- import ApiPath from './ApiPath.jsx';
7
-
8
- /**
9
- * TryItBar — compact endpoint row: method badge + path + copy icon + a
10
- * method-colored "Try It" CTA. Mirrors Mintlify's docs "try-it" row.
11
- *
12
- * <TryItBar method="POST" path="/project/preview/{projectId}" />
13
- *
14
- * CTA is a dummy `<button>` (no fetch / playground wiring) — slot a
15
- * handler in via the `onTry` prop when there's a real client. Copy
16
- * writes the full "METHOD path" string to clipboard.
17
- */
18
-
19
- export default function TryItBar({
20
- method = 'GET',
21
- path = '',
22
- cta = 'Try It',
23
- onTry,
24
- className = '',
25
- ...rest
26
- }) {
27
- const [copied, setCopied] = useState(false);
28
- const key = String(method).toLowerCase();
29
-
30
- function copy() {
31
- copyText(`${String(method).toUpperCase()} ${path}`).then(
32
- () => {
33
- setCopied(true);
34
- setTimeout(() => setCopied(false), 1400);
35
- },
36
- () => {
37
- /* silently no-op */
38
- },
39
- );
40
- }
41
-
42
- const cls = `velu-try-it velu-try-it--${key} ${className}`.trim();
43
-
44
- return (
45
- // Outer bar is a Cluster — the inner bordered row and the Try It
46
- // button are its two children, so they wrap as a unit on narrow
47
- // widths (Try It drops below the row).
48
- <Cluster
49
- space="var(--s-1)"
50
- justify="flex-end"
51
- align="center"
52
- className={cls}
53
- {...rest}
54
- >
55
- {/* Inner bordered group. The method pill + url segments live in
56
- their own Cluster that wraps internally; the copy button is a
57
- separate sibling pinned to the top-right (align-self:
58
- flex-start) so it never drops below the wrapped path. */}
59
- <div className="velu-try-it__row">
60
- <Cluster
61
- space="var(--s-1)"
62
- align="center"
63
- className="velu-try-it__endpoint"
64
- >
65
- <MethodBadge method={method} />
66
- <ApiPath method={method} path={path} />
67
- </Cluster>
68
- <button
69
- type="button"
70
- className="velu-try-it__copy"
71
- onClick={copy}
72
- aria-label={copied ? 'Copied' : 'Copy endpoint'}
73
- title={copied ? 'Copied' : 'Copy'}
74
- >
75
- {resolveIcon(copied ? 'check' : 'copy', { size: '1em' })}
76
- </button>
77
- </div>
78
- <button
79
- type="button"
80
- className="velu-try-it__cta"
81
- onClick={onTry}
82
- >
83
- {cta}
84
- <span className="velu-try-it__cta-icon" aria-hidden="true">
85
- {resolveIcon('chevron-right', { size: '1em' })}
86
- </span>
87
- </button>
88
- </Cluster>
89
- );
90
- }
1
+ import React, { useState } from 'react';
2
+ import resolveIcon from '../lib/resolveIcon.jsx';
3
+ import Cluster from '../primitives/Cluster.jsx';
4
+ import copyText from '../lib/copyText.js';
5
+ import MethodBadge from './MethodBadge.jsx';
6
+ import ApiPath from './ApiPath.jsx';
7
+
8
+ /**
9
+ * TryItBar — compact endpoint row: method badge + path + copy icon + a
10
+ * method-colored "Try It" CTA. Mirrors Mintlify's docs "try-it" row.
11
+ *
12
+ * <TryItBar method="POST" path="/project/preview/{projectId}" />
13
+ *
14
+ * CTA is a dummy `<button>` (no fetch / playground wiring) — slot a
15
+ * handler in via the `onTry` prop when there's a real client. Copy
16
+ * writes the full "METHOD path" string to clipboard.
17
+ */
18
+
19
+ export default function TryItBar({
20
+ method = 'GET',
21
+ path = '',
22
+ cta = 'Try It',
23
+ onTry,
24
+ className = '',
25
+ ...rest
26
+ }) {
27
+ const [copied, setCopied] = useState(false);
28
+ const key = String(method).toLowerCase();
29
+
30
+ function copy() {
31
+ copyText(`${String(method).toUpperCase()} ${path}`).then(
32
+ () => {
33
+ setCopied(true);
34
+ setTimeout(() => setCopied(false), 1400);
35
+ },
36
+ () => {
37
+ /* silently no-op */
38
+ },
39
+ );
40
+ }
41
+
42
+ const cls = `velu-try-it velu-try-it--${key} ${className}`.trim();
43
+
44
+ return (
45
+ // Outer bar is a Cluster — the inner bordered row and the Try It
46
+ // button are its two children, so they wrap as a unit on narrow
47
+ // widths (Try It drops below the row).
48
+ <Cluster
49
+ space="var(--s-1)"
50
+ justify="flex-end"
51
+ align="center"
52
+ className={cls}
53
+ {...rest}
54
+ >
55
+ {/* Inner bordered group. The method pill + url segments live in
56
+ their own Cluster that wraps internally; the copy button is a
57
+ separate sibling pinned to the top-right (align-self:
58
+ flex-start) so it never drops below the wrapped path. */}
59
+ <div className="velu-try-it__row">
60
+ <Cluster
61
+ space="var(--s-1)"
62
+ align="center"
63
+ className="velu-try-it__endpoint"
64
+ >
65
+ <MethodBadge method={method} />
66
+ <ApiPath method={method} path={path} />
67
+ </Cluster>
68
+ <button
69
+ type="button"
70
+ className="velu-try-it__copy"
71
+ onClick={copy}
72
+ aria-label={copied ? 'Copied' : 'Copy endpoint'}
73
+ title={copied ? 'Copied' : 'Copy'}
74
+ >
75
+ {resolveIcon(copied ? 'check' : 'copy', { size: '1em' })}
76
+ </button>
77
+ </div>
78
+ <button
79
+ type="button"
80
+ className="velu-try-it__cta"
81
+ onClick={onTry}
82
+ >
83
+ {cta}
84
+ <span className="velu-try-it__cta-icon" aria-hidden="true">
85
+ {resolveIcon('chevron-right', { size: '1em' })}
86
+ </span>
87
+ </button>
88
+ </Cluster>
89
+ );
90
+ }
@@ -1,92 +1,92 @@
1
- /* Accordion — all values are tokens; light/dark via [data-theme].
2
- Selectors required (summary:hover, [open], chevron rotate, group
3
- dividers) so this component has CSS, like sidebar.css. Namespaced. */
4
-
5
- .velu-accordion {
6
- border: var(--border-width) solid var(--border-color);
7
- border-radius: var(--radius-sm);
8
- overflow: hidden; /* clip header tint + dividers to the rounded corners */
9
- /* `<details>` isn't in base.css's `max-width: none` override list, so
10
- it'd otherwise clamp to --measure (66ch). Opt out so the accordion
11
- fills the article column. Same fix is applied to the group below. */
12
- max-inline-size: none;
13
- inline-size: 100%;
14
- }
15
-
16
- .velu-accordion__summary {
17
- display: flex;
18
- align-items: center;
19
- gap: var(--s-2);
20
- /* matches Callout padding exactly: --s0 block, --s3 inline */
21
- padding: var(--s0) var(--s3);
22
- cursor: pointer;
23
- list-style: none; /* removes the native disclosure triangle */
24
- color: var(--text-color);
25
- font-size: var(--f-body);
26
- line-height: var(--lh-body);
27
- /* `<summary>` isn't in base.css's `max-width: none` override list,
28
- so without this it'd clamp to --measure (66ch) and the hover
29
- surface would stop short of the accordion's right edge. */
30
- max-inline-size: none;
31
- inline-size: 100%;
32
- box-sizing: border-box;
33
- }
34
- .velu-accordion__summary::-webkit-details-marker {
35
- display: none;
36
- }
37
- .velu-accordion__summary:hover {
38
- background: var(--surface-color);
39
- }
40
- .velu-accordion[open] > .velu-accordion__summary {
41
- background: var(--surface-color);
42
- }
43
-
44
- .velu-accordion__chevron {
45
- display: inline-flex;
46
- flex: none;
47
- align-items: center;
48
- justify-content: center;
49
- inline-size: var(--f-body);
50
- block-size: var(--f-body);
51
- transition: transform 0.15s ease;
52
- }
53
- .velu-accordion[open] > .velu-accordion__summary .velu-accordion__chevron {
54
- transform: rotate(90deg);
55
- }
56
-
57
- .velu-accordion__content {
58
- /* same inline padding as the header so body text aligns under it */
59
- padding: var(--s0) var(--s3);
60
- border-top: var(--border-width) solid var(--border-color); /* header / content divider */
61
- color: var(--text-color);
62
- font-size: var(--f-body);
63
- line-height: var(--lh-body);
64
- /* Same reason as `__summary` above — opt out of base.css's
65
- --measure cap so the divider line + content area span the full
66
- accordion width. */
67
- max-inline-size: none;
68
- inline-size: 100%;
69
- box-sizing: border-box;
70
- }
71
-
72
- /* Group: many items in ONE bordered box; dividers between; outer radius
73
- only (children clipped by overflow:hidden). */
74
- .velu-accordion-group {
75
- border: var(--border-width) solid var(--border-color);
76
- border-radius: var(--radius-sm);
77
- overflow: hidden;
78
- /* Group is a <div> (already covered by base.css's override), but we
79
- pin it explicitly here so a future markup swap can't regress. */
80
- max-inline-size: none;
81
- inline-size: 100%;
82
- }
83
- .velu-accordion--in-group {
84
- border: 0;
85
- border-radius: 0;
86
- overflow: visible;
87
- }
88
- .velu-accordion-group
89
- > .velu-accordion--in-group
90
- + .velu-accordion--in-group {
91
- border-top: var(--border-width) solid var(--border-color);
92
- }
1
+ /* Accordion — all values are tokens; light/dark via [data-theme].
2
+ Selectors required (summary:hover, [open], chevron rotate, group
3
+ dividers) so this component has CSS, like sidebar.css. Namespaced. */
4
+
5
+ .velu-accordion {
6
+ border: var(--border-width) solid var(--border-color);
7
+ border-radius: var(--radius-sm);
8
+ overflow: hidden; /* clip header tint + dividers to the rounded corners */
9
+ /* `<details>` isn't in base.css's `max-width: none` override list, so
10
+ it'd otherwise clamp to --measure (66ch). Opt out so the accordion
11
+ fills the article column. Same fix is applied to the group below. */
12
+ max-inline-size: none;
13
+ inline-size: 100%;
14
+ }
15
+
16
+ .velu-accordion__summary {
17
+ display: flex;
18
+ align-items: center;
19
+ gap: var(--s-2);
20
+ /* matches Callout padding exactly: --s0 block, --s3 inline */
21
+ padding: var(--s0) var(--s3);
22
+ cursor: pointer;
23
+ list-style: none; /* removes the native disclosure triangle */
24
+ color: var(--text-color);
25
+ font-size: var(--f-body);
26
+ line-height: var(--lh-body);
27
+ /* `<summary>` isn't in base.css's `max-width: none` override list,
28
+ so without this it'd clamp to --measure (66ch) and the hover
29
+ surface would stop short of the accordion's right edge. */
30
+ max-inline-size: none;
31
+ inline-size: 100%;
32
+ box-sizing: border-box;
33
+ }
34
+ .velu-accordion__summary::-webkit-details-marker {
35
+ display: none;
36
+ }
37
+ .velu-accordion__summary:hover {
38
+ background: var(--surface-color);
39
+ }
40
+ .velu-accordion[open] > .velu-accordion__summary {
41
+ background: var(--surface-color);
42
+ }
43
+
44
+ .velu-accordion__chevron {
45
+ display: inline-flex;
46
+ flex: none;
47
+ align-items: center;
48
+ justify-content: center;
49
+ inline-size: var(--f-body);
50
+ block-size: var(--f-body);
51
+ transition: transform 0.15s ease;
52
+ }
53
+ .velu-accordion[open] > .velu-accordion__summary .velu-accordion__chevron {
54
+ transform: rotate(90deg);
55
+ }
56
+
57
+ .velu-accordion__content {
58
+ /* same inline padding as the header so body text aligns under it */
59
+ padding: var(--s0) var(--s3);
60
+ border-top: var(--border-width) solid var(--border-color); /* header / content divider */
61
+ color: var(--text-color);
62
+ font-size: var(--f-body);
63
+ line-height: var(--lh-body);
64
+ /* Same reason as `__summary` above — opt out of base.css's
65
+ --measure cap so the divider line + content area span the full
66
+ accordion width. */
67
+ max-inline-size: none;
68
+ inline-size: 100%;
69
+ box-sizing: border-box;
70
+ }
71
+
72
+ /* Group: many items in ONE bordered box; dividers between; outer radius
73
+ only (children clipped by overflow:hidden). */
74
+ .velu-accordion-group {
75
+ border: var(--border-width) solid var(--border-color);
76
+ border-radius: var(--radius-sm);
77
+ overflow: hidden;
78
+ /* Group is a <div> (already covered by base.css's override), but we
79
+ pin it explicitly here so a future markup swap can't regress. */
80
+ max-inline-size: none;
81
+ inline-size: 100%;
82
+ }
83
+ .velu-accordion--in-group {
84
+ border: 0;
85
+ border-radius: 0;
86
+ overflow: visible;
87
+ }
88
+ .velu-accordion-group
89
+ > .velu-accordion--in-group
90
+ + .velu-accordion--in-group {
91
+ border-top: var(--border-width) solid var(--border-color);
92
+ }