@veluai/velu 0.1.13 → 0.1.14

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 (96) hide show
  1. package/README.md +80 -80
  2. package/dist/cli.js +18 -18
  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/MethodBadge.jsx +31 -31
  19. package/runtime/velu-ui/components/NavSelect.jsx +108 -108
  20. package/runtime/velu-ui/components/PageFeedback.jsx +219 -219
  21. package/runtime/velu-ui/components/PageFooter.jsx +213 -213
  22. package/runtime/velu-ui/components/PageHeader.jsx +414 -414
  23. package/runtime/velu-ui/components/PageNav.jsx +77 -77
  24. package/runtime/velu-ui/components/PoweredBy.jsx +51 -51
  25. package/runtime/velu-ui/components/Prompt.jsx +115 -115
  26. package/runtime/velu-ui/components/Search.jsx +411 -366
  27. package/runtime/velu-ui/components/Sidebar.jsx +191 -191
  28. package/runtime/velu-ui/components/Steps.jsx +65 -65
  29. package/runtime/velu-ui/components/ThemeToggle.jsx +48 -48
  30. package/runtime/velu-ui/components/Toc.jsx +537 -537
  31. package/runtime/velu-ui/components/TocBar.jsx +195 -195
  32. package/runtime/velu-ui/components/Tree.jsx +87 -87
  33. package/runtime/velu-ui/components/TryItBar.jsx +90 -90
  34. package/runtime/velu-ui/components/accordion.css +92 -92
  35. package/runtime/velu-ui/components/api.css +479 -479
  36. package/runtime/velu-ui/components/ask-bar.css +94 -94
  37. package/runtime/velu-ui/components/card.css +105 -105
  38. package/runtime/velu-ui/components/chatbot.css +617 -617
  39. package/runtime/velu-ui/components/code-block.css +263 -263
  40. package/runtime/velu-ui/components/docs-layout.css +784 -775
  41. package/runtime/velu-ui/components/field.css +82 -82
  42. package/runtime/velu-ui/components/image.css +237 -237
  43. package/runtime/velu-ui/components/nav-select.css +157 -157
  44. package/runtime/velu-ui/components/page-feedback.css +241 -241
  45. package/runtime/velu-ui/components/page-footer.css +130 -130
  46. package/runtime/velu-ui/components/page-header.css +520 -520
  47. package/runtime/velu-ui/components/page-nav.css +50 -50
  48. package/runtime/velu-ui/components/powered-by.css +66 -66
  49. package/runtime/velu-ui/components/prompt.css +99 -99
  50. package/runtime/velu-ui/components/search.css +307 -307
  51. package/runtime/velu-ui/components/sidebar.css +144 -144
  52. package/runtime/velu-ui/components/steps.css +77 -77
  53. package/runtime/velu-ui/components/theme-toggle.css +101 -101
  54. package/runtime/velu-ui/components/toc-bar.css +234 -234
  55. package/runtime/velu-ui/components/tree.css +49 -49
  56. package/runtime/velu-ui/index.js +46 -46
  57. package/runtime/velu-ui/lib/component-schemas.js +100 -100
  58. package/runtime/velu-ui/lib/copyText.js +64 -64
  59. package/runtime/velu-ui/lib/lang-icons.jsx +147 -147
  60. package/runtime/velu-ui/lib/prism-langs.js +957 -957
  61. package/runtime/velu-ui/lib/prism-loader.js +74 -74
  62. package/runtime/velu-ui/lib/resolveIcon.jsx +29 -29
  63. package/runtime/velu-ui/lib/scrollIntoNearestView.js +66 -66
  64. package/runtime/velu-ui/mdx-components.jsx +105 -105
  65. package/runtime/velu-ui/primitives/Cluster.jsx +49 -49
  66. package/runtime/velu-ui/primitives/Stack.jsx +63 -63
  67. package/runtime/velu-ui/primitives/Switcher.jsx +57 -57
  68. package/runtime/velu-ui/primitives/stack.css +3 -3
  69. package/runtime/velu-ui/primitives/switcher.css +25 -25
  70. package/runtime/velu-ui/styles.css +43 -43
  71. package/runtime/velu-ui/tokens.css +4 -4
  72. package/schema/velu.schema.json +167 -167
  73. package/src/lib/extract-mdx-error.js +170 -170
  74. package/src/lib/issues.js +159 -159
  75. package/src/lib/known-components.js +34 -34
  76. package/src/navigation.js +434 -434
  77. package/src/runtime/App.jsx +1490 -1476
  78. package/src/runtime/ErrorBoundary.jsx +54 -54
  79. package/src/runtime/client-entry.jsx +22 -22
  80. package/src/runtime/server-entry.jsx +16 -16
  81. package/src/template.html +48 -48
  82. package/templates/starter/ai-tools/claude-code.mdx +26 -26
  83. package/templates/starter/ai-tools/cursor.mdx +17 -17
  84. package/templates/starter/api-reference/endpoint/create.mdx +24 -24
  85. package/templates/starter/api-reference/endpoint/get.mdx +27 -27
  86. package/templates/starter/api-reference/introduction.mdx +28 -28
  87. package/templates/starter/development.mdx +19 -19
  88. package/templates/starter/essentials/code.mdx +29 -29
  89. package/templates/starter/essentials/images.mdx +29 -29
  90. package/templates/starter/essentials/markdown.mdx +25 -25
  91. package/templates/starter/essentials/navigation.mdx +39 -39
  92. package/templates/starter/essentials/settings.mdx +30 -30
  93. package/templates/starter/favicon.svg +6 -6
  94. package/templates/starter/index.mdx +31 -31
  95. package/templates/starter/quickstart.mdx +31 -31
  96. 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
+ }