@stainless-api/docs-ui 0.1.0-beta.4 → 0.1.0-beta.40

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 (188) hide show
  1. package/dist/breadcrumbs-CZg0Fk4V.d.ts +20 -0
  2. package/dist/chunk-Bf_Gc_jT.js +18 -0
  3. package/dist/component-generics-BLXXX1dz.d.ts +30 -0
  4. package/dist/component-generics-D3ybuN5r.js +45 -0
  5. package/dist/components/breadcrumbs.d.ts +2 -0
  6. package/dist/components/breadcrumbs.js +15 -0
  7. package/dist/components/icons.d.ts +50 -0
  8. package/dist/components/icons.js +3 -0
  9. package/dist/components/index.d.ts +11 -0
  10. package/dist/components/index.js +15 -0
  11. package/dist/components/method.d.ts +2 -0
  12. package/dist/components/method.js +15 -0
  13. package/dist/components/overview.d.ts +2 -0
  14. package/dist/components/overview.js +15 -0
  15. package/dist/components/primitives.d.ts +2 -0
  16. package/dist/components/primitives.js +15 -0
  17. package/dist/components/properties.d.ts +2 -0
  18. package/dist/components/properties.js +15 -0
  19. package/dist/components/sdk.d.ts +3 -0
  20. package/dist/components/sdk.js +15 -0
  21. package/dist/components/sidebar.d.ts +2 -0
  22. package/dist/components/sidebar.js +15 -0
  23. package/dist/components/snippets.d.ts +4 -0
  24. package/dist/components/snippets.js +15 -0
  25. package/dist/contexts/component-generics.d.ts +2 -0
  26. package/dist/contexts/component-generics.js +3 -0
  27. package/dist/contexts/component-types.d.ts +17 -0
  28. package/dist/contexts/component-types.js +0 -0
  29. package/dist/contexts/component.d.ts +30 -0
  30. package/dist/contexts/component.js +15 -0
  31. package/dist/contexts/docs.d.ts +2 -0
  32. package/dist/contexts/docs.js +3 -0
  33. package/dist/contexts/index.d.ts +19 -0
  34. package/dist/contexts/index.js +15 -0
  35. package/dist/contexts/markdown.d.ts +2 -0
  36. package/dist/contexts/markdown.js +4 -0
  37. package/dist/contexts/navigation.d.ts +3 -0
  38. package/dist/contexts/navigation.js +3 -0
  39. package/dist/contexts/search.d.ts +4 -0
  40. package/dist/contexts/search.js +15 -0
  41. package/dist/contexts/use-components.d.ts +15 -0
  42. package/dist/contexts/use-components.js +4 -0
  43. package/dist/contexts-B-OYzYpz.js +3837 -0
  44. package/dist/docs-BeJaKOCE.d.ts +46 -0
  45. package/dist/docs-CopwX9a7.js +54 -0
  46. package/dist/icons-yb-Jhkmg.js +753 -0
  47. package/dist/index-CBi59jcw.d.ts +240 -0
  48. package/dist/index-DT1wzg21.d.ts +15 -0
  49. package/dist/index-DteYqCJO.d.ts +14 -0
  50. package/dist/index.d.ts +21 -0
  51. package/dist/index.js +15 -7542
  52. package/dist/languages/go.d.ts +12 -0
  53. package/dist/languages/go.js +15 -0
  54. package/dist/languages/http.d.ts +12 -0
  55. package/dist/languages/http.js +15 -0
  56. package/dist/languages/index.d.ts +12 -0
  57. package/dist/languages/index.js +15 -0
  58. package/dist/languages/java.d.ts +12 -0
  59. package/dist/languages/java.js +15 -0
  60. package/dist/languages/python.d.ts +12 -0
  61. package/dist/languages/python.js +15 -0
  62. package/dist/languages/ruby.d.ts +12 -0
  63. package/dist/languages/ruby.js +15 -0
  64. package/dist/languages/typescript.d.ts +12 -0
  65. package/dist/languages/typescript.js +15 -0
  66. package/dist/markdown/index.d.ts +12 -0
  67. package/dist/markdown/index.js +15 -0
  68. package/dist/markdown/md.d.ts +15 -0
  69. package/dist/markdown/md.js +3 -0
  70. package/dist/markdown/utils.d.ts +4 -0
  71. package/dist/markdown/utils.js +3 -0
  72. package/dist/markdown-DTVxnxGP.d.ts +22 -0
  73. package/dist/markdown-Diyg-eof.js +48 -0
  74. package/dist/md-DxiV1_vy.js +41 -0
  75. package/dist/method-DHjDGGA_.d.ts +71 -0
  76. package/dist/navigation-CGr5_w6z.js +24 -0
  77. package/dist/navigation-rt_B_1lt.d.ts +29 -0
  78. package/dist/overview-CKJV2xUO.d.ts +39 -0
  79. package/dist/pagefind-BaK1krMe.js +15 -0
  80. package/dist/primitives-CiVFjnRA.d.ts +99 -0
  81. package/dist/properties-Z45x-uLZ.d.ts +46 -0
  82. package/dist/routing-DNN8R6bZ.d.ts +54 -0
  83. package/dist/routing-qs2YNG9o.js +189 -0
  84. package/dist/routing.d.ts +2 -0
  85. package/dist/routing.js +3 -180
  86. package/dist/sdk-DDWWoPPD.d.ts +119 -0
  87. package/dist/search/index.d.ts +26 -0
  88. package/dist/search/index.js +334 -0
  89. package/dist/search/providers/algolia.d.ts +24 -0
  90. package/dist/search/providers/algolia.js +15 -0
  91. package/dist/search/providers/fuse.d.ts +18 -0
  92. package/dist/search/providers/fuse.js +30 -0
  93. package/dist/search/providers/pagefind.d.ts +7 -0
  94. package/dist/search/providers/pagefind.js +3 -0
  95. package/dist/search/providers/walker.d.ts +9 -0
  96. package/dist/search/providers/walker.js +34 -0
  97. package/dist/search/types.d.ts +3 -0
  98. package/dist/search/types.js +3 -0
  99. package/dist/search-CCDWCiAd.d.ts +21 -0
  100. package/dist/sidebar-DrtsF85U.d.ts +36 -0
  101. package/dist/snippets-B2EEG7AK.d.ts +46 -0
  102. package/dist/spec.d.ts +65 -0
  103. package/dist/spec.js +167 -0
  104. package/dist/style-BhhgPVF6.js +165 -0
  105. package/dist/style-p4qTfnmO.d.ts +164 -0
  106. package/dist/style.d.ts +2 -0
  107. package/dist/style.js +3 -0
  108. package/dist/styles/main.css +724 -754
  109. package/dist/styles/main.js +0 -0
  110. package/dist/styles/primitives.css +287 -466
  111. package/dist/styles/primitives.js +0 -0
  112. package/dist/styles/resets.css +31 -41
  113. package/dist/styles/resets.js +0 -0
  114. package/dist/styles/search.css +175 -274
  115. package/dist/styles/search.js +0 -0
  116. package/dist/styles/sidebar.css +59 -60
  117. package/dist/styles/sidebar.js +0 -0
  118. package/dist/styles/variables.css +26 -89
  119. package/dist/styles/variables.js +0 -0
  120. package/dist/styles.css +1753 -0
  121. package/dist/styles.mjs +1 -0
  122. package/dist/types-DNSz4kuM.d.ts +83 -0
  123. package/dist/types-__XoFvJ_.js +34 -0
  124. package/dist/use-components-BHEwm0mE.js +7 -0
  125. package/dist/utils-CA3mYNaX.d.ts +21 -0
  126. package/dist/utils-D43p_yTd.d.ts +14 -0
  127. package/dist/utils-FnJ4tyuN.js +32 -0
  128. package/dist/utils-Jo_o4DX9.js +31 -0
  129. package/dist/utils.d.ts +2 -0
  130. package/dist/utils.js +4 -0
  131. package/package.json +84 -19
  132. package/dist/mcp.js +0 -16003
  133. package/dist/styles/snippets.css +0 -132
  134. package/src/components/breadcrumbs.tsx +0 -94
  135. package/src/components/chat.tsx +0 -154
  136. package/src/components/dropdown.tsx +0 -91
  137. package/src/components/icons.tsx +0 -584
  138. package/src/components/index.ts +0 -9
  139. package/src/components/method.tsx +0 -144
  140. package/src/components/overview.tsx +0 -159
  141. package/src/components/primitives.tsx +0 -284
  142. package/src/components/properties.tsx +0 -130
  143. package/src/components/scripts/dropdown.ts +0 -78
  144. package/src/components/sdk.tsx +0 -402
  145. package/src/components/sidebar.tsx +0 -99
  146. package/src/components/snippets.tsx +0 -179
  147. package/src/contexts/component-generics.tsx +0 -48
  148. package/src/contexts/component-types.tsx +0 -5
  149. package/src/contexts/component.tsx +0 -32
  150. package/src/contexts/docs.tsx +0 -75
  151. package/src/contexts/index.tsx +0 -17
  152. package/src/contexts/markdown.tsx +0 -43
  153. package/src/contexts/navigation.tsx +0 -44
  154. package/src/contexts/search.tsx +0 -28
  155. package/src/contexts/use-components.tsx +0 -4
  156. package/src/index.ts +0 -6
  157. package/src/languages/go.tsx +0 -281
  158. package/src/languages/http.tsx +0 -321
  159. package/src/languages/index.ts +0 -26
  160. package/src/languages/java.tsx +0 -358
  161. package/src/languages/python.tsx +0 -255
  162. package/src/languages/ruby.tsx +0 -320
  163. package/src/languages/typescript.tsx +0 -393
  164. package/src/markdown/index.ts +0 -107
  165. package/src/markdown/md.ts +0 -45
  166. package/src/markdown/utils.ts +0 -49
  167. package/src/routing.ts +0 -238
  168. package/src/search/form.tsx +0 -127
  169. package/src/search/index.tsx +0 -1
  170. package/src/search/indexer.ts +0 -246
  171. package/src/search/mcp.ts +0 -61
  172. package/src/search/printer.tsx +0 -86
  173. package/src/search/providers/algolia.ts +0 -88
  174. package/src/search/providers/fuse.ts +0 -19
  175. package/src/search/providers/pagefind.ts +0 -17
  176. package/src/search/providers/walker.ts +0 -30
  177. package/src/search/results.tsx +0 -181
  178. package/src/search/state.ts +0 -64
  179. package/src/search/types.ts +0 -116
  180. package/src/style.ts +0 -197
  181. package/src/styles/main.css +0 -993
  182. package/src/styles/primitives.css +0 -572
  183. package/src/styles/resets.css +0 -47
  184. package/src/styles/search.css +0 -342
  185. package/src/styles/sidebar.css +0 -87
  186. package/src/styles/snippets.css +0 -132
  187. package/src/styles/variables.css +0 -90
  188. package/src/utils.ts +0 -41
@@ -1,132 +0,0 @@
1
- @layer docs-ui {
2
- .stldocs-root {
3
- .snippet {
4
- color: #d8d8d8;
5
- --orange: 24 76% 51%;
6
- --teal: 208 100% 66%;
7
- --magenta: 324 54% 48.6%;
8
- --purple: 274 41% 47%;
9
- }
10
-
11
- .hljs-comment,
12
- .hljs-quote {
13
- color: #adadad;
14
- }
15
-
16
- .hljs-doctag,
17
- .hljs-keyword,
18
- .hljs-formula {
19
- color: #fb8f44;
20
- }
21
-
22
- .hljs-section,
23
- .hljs-name,
24
- .hljs-selector-tag,
25
- .hljs-deletion,
26
- .hljs-subst {
27
- color: #f7585c;
28
- }
29
-
30
- .hjs-literal,
31
- .hljs-string,
32
- .hljs-regexp,
33
- .hljs-addition,
34
- .hljs-attribute,
35
- .hljs-meta .hljs-string {
36
- color: #54aeff;
37
- }
38
-
39
- .hljs-attr,
40
- .hljs-variable,
41
- .hljs-template-variable,
42
- .hljs-type,
43
- .hljs-selector-class,
44
- .hljs-selector-attr,
45
- .hljs-selector-pseudo,
46
- .hljs-number {
47
- color: #4ac26b;
48
- }
49
-
50
- .hljs-symbol,
51
- .hljs-bullet,
52
- .hljs-link,
53
- .hljs-meta,
54
- .hljs-selector-id,
55
- .hljs-title,
56
- .hljs-built_in,
57
- .hljs-title.class_,
58
- .hljs-class .hljs-title {
59
- color: #b68eff;
60
- }
61
-
62
- .hljs-emphasis {
63
- font-style: italic;
64
- }
65
-
66
- .hljs-strong {
67
- font-weight: bold;
68
- }
69
-
70
- .hljs-link {
71
- text-decoration: underline;
72
- }
73
-
74
- .snippet-json {
75
- color: #a5a5ac;
76
-
77
- .hljs-comment,
78
- .hljs-quote {
79
- color: #adadad;
80
- }
81
-
82
- .hljs-doctag,
83
- .hljs-keyword,
84
- .hljs-formula,
85
- .hljs-number {
86
- color: var(--stldocs-syntax-color-orange);
87
- }
88
-
89
- .hljs-section,
90
- .hljs-name,
91
- .hljs-selector-tag,
92
- .hljs-deletion,
93
- .hljs-subst {
94
- color: var(--stldocs-syntax-color-red);
95
- }
96
-
97
- .hjs-literal,
98
- .hljs-string,
99
- .hljs-regexp,
100
- .hljs-addition,
101
- .hljs-attribute,
102
- .hljs-meta .hljs-string {
103
- color: var(--stldocs-syntax-color-green);
104
- }
105
-
106
- .hljs-attr,
107
- .hljs-variable,
108
- .hljs-template-variable,
109
- .hljs-type,
110
- .hljs-selector-class,
111
- .hljs-selector-attr,
112
- .hljs-selector-pseudo {
113
- color: var(--stldocs-color-text);
114
- }
115
-
116
- .hljs-symbol,
117
- .hljs-bullet,
118
- .hljs-link,
119
- .hljs-meta,
120
- .hljs-selector-id,
121
- .hljs-title {
122
- color: var(--stldocs-syntax-color-purple);
123
- }
124
-
125
- .hljs-built_in,
126
- .hljs-title.class_,
127
- .hljs-class .hljs-title {
128
- color: var(--stldocs-syntax-color-blue);
129
- }
130
- }
131
- }
132
- }
@@ -1,94 +0,0 @@
1
- import type * as SDKJSON from '~/lib/json-spec-v2/types';
2
- import { Languages } from '../routing';
3
- import { ChevronRight } from 'lucide-react';
4
- import style from '../style';
5
- import { Join } from './primitives';
6
-
7
- type Breadcrumb = { title: string; href: string };
8
-
9
- type BreadcrumbConfig = {
10
- includeCurrentPage?: boolean;
11
- };
12
-
13
- function generateApiBreadcrumbs(fullPath: string, spec: any, basePath: string): Breadcrumb[] | null {
14
- // Normalize paths. Mostly for basePath since it's configurable and may have trailing slashes
15
- const cleanBasePath = basePath.replace(/\/+$/, '');
16
- const cleanPath = fullPath.replace(/\/+$/, '');
17
-
18
- if (!cleanPath.startsWith(cleanBasePath)) return null;
19
-
20
- // Slice off the basePath
21
- const rest = cleanPath.slice(cleanBasePath.length).split('/').filter(Boolean);
22
-
23
- const breadcrumbs: Breadcrumb[] = [];
24
- let href = cleanBasePath;
25
- let i = 0;
26
-
27
- // Handle sdk language prefix
28
- if (Languages.includes(rest[0] as (typeof Languages)[number])) {
29
- href += `/${rest[0]}`;
30
- i++;
31
- }
32
-
33
- // Always start with API Reference
34
- breadcrumbs.push({ title: 'API Reference', href });
35
-
36
- let currentSpec = spec;
37
-
38
- while (i < rest.length) {
39
- const idType = rest[i];
40
- const idValue = rest[i + 1];
41
- if (!idType || !idValue || !currentSpec?.[idType]?.[idValue]) break;
42
-
43
- currentSpec = currentSpec[idType][idValue];
44
- href += `/${idType}/${idValue}`;
45
-
46
- // This should always exist, but just in case fallback to the raw url value
47
- const title = (idType === 'methods' ? currentSpec.summary : currentSpec.title) ?? idValue;
48
-
49
- breadcrumbs.push({
50
- title,
51
- href,
52
- });
53
-
54
- i += 2;
55
- }
56
-
57
- return breadcrumbs;
58
- }
59
-
60
- export function SDKBreadcrumbs({
61
- spec,
62
- currentPath,
63
- basePath = '/api',
64
- config = { includeCurrentPage: false },
65
- }: {
66
- spec: SDKJSON.Spec;
67
- currentPath: string;
68
- basePath?: string;
69
- config?: BreadcrumbConfig | null;
70
- }) {
71
- const breadcrumbs = generateApiBreadcrumbs(currentPath, spec, basePath);
72
-
73
- if (!breadcrumbs || breadcrumbs.length === 0) return null;
74
-
75
- if (!config?.includeCurrentPage && breadcrumbs.length > 1) {
76
- breadcrumbs.pop();
77
- }
78
-
79
- const items = breadcrumbs.map((crumb, index) => (
80
- <div key={index} className={style.BreadcrumbsItem}>
81
- <a href={crumb.href} className={style.BreadcrumbsLink}>
82
- {crumb.title}
83
- </a>
84
- </div>
85
- ));
86
-
87
- return (
88
- <div className={style.Breadcrumbs}>
89
- <Join limit={breadcrumbs.length} items={items}>
90
- <ChevronRight />
91
- </Join>
92
- </div>
93
- );
94
- }
@@ -1,154 +0,0 @@
1
- import * as React from 'react';
2
- import { useChat } from 'ai/react';
3
- import { ArrowUpIcon, BotMessageSquareIcon, LoaderCircleIcon, SquareIcon, TrashIcon } from 'lucide-react';
4
- import { useLanguage, useSearchContext } from '../contexts';
5
- import { Markdown } from './primitives';
6
- import type { SearchSettings } from '../search/types';
7
- import type { UIMessage } from 'ai';
8
- import style from '../style';
9
-
10
- const BASEURL = 'https://askai.algolia.com';
11
-
12
- function buildFetch({ appId, searchKey, indexName, assistant }: SearchSettings) {
13
- const headers = {
14
- 'X-Algolia-Application-Id': appId,
15
- 'X-Algolia-API-Key': searchKey,
16
- 'X-Algolia-Index-Name': `${indexName}-chat`,
17
- 'X-Algolia-Assistant-Id': assistant,
18
- };
19
-
20
- return async (input, init) => {
21
- const response = await fetch(`${BASEURL}/chat/token`, { method: 'POST', headers });
22
- const data = await response.json();
23
- return fetch(input, {
24
- ...init,
25
- headers: {
26
- ...init.headers,
27
- ...headers,
28
- Authorization: `TOKEN ${data['token']}`,
29
- },
30
- });
31
- };
32
- }
33
-
34
- function RenderMessage({ message }: { message: UIMessage }) {
35
- return message.parts
36
- .filter((part) => part.type === 'text')
37
- .map((part, key) => <Markdown key={key} content={part['text']} />);
38
- }
39
-
40
- export function Chat() {
41
- const language = useLanguage();
42
- const { settings } = useSearchContext();
43
- const messageListRef = React.useRef<HTMLDivElement>(null);
44
-
45
- const { messages, setMessages, status, input, setInput, append, stop } = useChat({
46
- body: { searchParameters: { filters: `language:${language ?? 'http'}` } },
47
- sendExtraMessageFields: true,
48
- fetch: buildFetch(settings),
49
- api: `${BASEURL}/chat`,
50
- });
51
-
52
- React.useEffect(() => {
53
- const content = sessionStorage.getItem('stldocs-chat-messages');
54
- if (!content) return;
55
-
56
- setMessages(JSON.parse(content));
57
- setTimeout(() => {
58
- if (!messageListRef.current) return;
59
- messageListRef.current.scrollTop = messageListRef.current.scrollHeight;
60
- }, 10);
61
- }, [setMessages]);
62
-
63
- React.useEffect(() => {
64
- if (status !== 'submitted') return;
65
- const messageElements = messageListRef?.current.querySelectorAll('[data-stldocs-chat-message]');
66
- [...messageElements].at(-1)?.scrollIntoView({ behavior: 'smooth', block: 'start' });
67
- }, [status]);
68
-
69
- React.useEffect(() => {
70
- sessionStorage.setItem('stldocs-chat-messages', JSON.stringify(messages));
71
- }, [messages]);
72
-
73
- function handleSend() {
74
- append({ role: 'user', content: input });
75
- setInput('');
76
- }
77
-
78
- function handleKeyUp(ev) {
79
- if (ev.key === 'Enter' && !ev.shiftKey) {
80
- ev.preventDefault();
81
- handleSend();
82
- }
83
- }
84
-
85
- return (
86
- <>
87
- <div className={style.ChatMessages} ref={messageListRef}>
88
- {messages.map((message) => (
89
- <div key={message.id} className={style.ChatMessage} data-stldocs-chat-message={message.role}>
90
- <RenderMessage message={message} />
91
- </div>
92
- ))}
93
-
94
- {status === 'submitted' && (
95
- <div className={style.LoadingSpinner}>
96
- <LoaderCircleIcon />
97
- </div>
98
- )}
99
-
100
- {['submitted', 'streaming'].includes(status) && <div style={{ height: '800px' }}></div>}
101
- </div>
102
- <div className={style.ChatInput}>
103
- <textarea
104
- value={input}
105
- placeholder="Ask a question"
106
- onKeyUp={handleKeyUp}
107
- onChange={(ev) => setInput(ev.target.value)}
108
- autoFocus
109
- />
110
-
111
- <div className={style.ChatInputButtons}>
112
- {status === 'submitted' ? (
113
- <button onClick={stop}>
114
- <SquareIcon />
115
- </button>
116
- ) : (
117
- <button onClick={handleSend} disabled={input.length < 1}>
118
- <ArrowUpIcon />
119
- </button>
120
- )}
121
-
122
- <button onClick={() => setMessages([])}>
123
- <TrashIcon />
124
- </button>
125
- </div>
126
- </div>
127
- </>
128
- );
129
- }
130
-
131
- export type ChatModalProps = {
132
- id?: string;
133
- open?: boolean;
134
- };
135
-
136
- export function ChatModal({ id, open: isOpen }: ChatModalProps) {
137
- const [open, setOpen] = React.useState<boolean>(isOpen);
138
-
139
- return (
140
- <div
141
- id={id}
142
- onToggle={(ev) => setOpen(ev.newState === 'open')}
143
- className={style.SearchModal}
144
- popover="auto"
145
- data-stldocs-modal-open={open}
146
- >
147
- <div className={style.ChatHeader}>
148
- <BotMessageSquareIcon />
149
- <h5>Docs Assistant</h5>
150
- </div>
151
- {open && <Chat />}
152
- </div>
153
- );
154
- }
@@ -1,91 +0,0 @@
1
- import * as React from 'react';
2
- import style from '../style';
3
- import { ChevronsUpDown } from 'lucide-react';
4
- import clsx from 'clsx';
5
-
6
- export const Dropdown = ({ className, children, ...rest }: React.HTMLProps<HTMLDivElement>) => {
7
- return (
8
- <div {...rest} className={`${style.Dropdown} ${className ?? ''}`}>
9
- {children}
10
- </div>
11
- );
12
- };
13
-
14
- export const DropdownTrigger = ({
15
- children,
16
- withChevron,
17
- className,
18
- isIcon,
19
- ...rest
20
- }: {
21
- children: React.ReactNode;
22
- withChevron?: boolean;
23
- isIcon?: boolean;
24
- } & (React.HTMLProps<HTMLButtonElement> & {
25
- type?: 'submit' | 'reset' | 'button';
26
- })) => {
27
- return (
28
- <button
29
- className={`${style.Button} ${style.ButtonSecondary} ${style.DropdownTrigger} ${isIcon ? style.ButtonIcon : ''} ${className ?? ''}`}
30
- aria-haspopup="listbox"
31
- {...rest}
32
- >
33
- <div className={style.DropdownTriggerContent}>{children}</div>
34
- {withChevron && (
35
- <span className={style.DropdownChevron}>
36
- <ChevronsUpDown size={16} />
37
- </span>
38
- )}
39
- </button>
40
- );
41
- };
42
-
43
- export const DropdownMenu = ({
44
- position,
45
- className,
46
- children,
47
- ...rest
48
- }: { position?: 'below' } & React.HTMLProps<HTMLUListElement>) => {
49
- return (
50
- <ul className={`${style.DropdownMenu} ${position ?? ''} ${className ?? ''}`} {...rest}>
51
- {children}
52
- </ul>
53
- );
54
- };
55
-
56
- export const DropdownItem = ({
57
- children,
58
- className,
59
- value,
60
- selected,
61
- href,
62
- }: React.HTMLProps<HTMLLIElement> & { value?: string; selected?: boolean; href?: string }) => {
63
- const inner = (
64
- <>
65
- {children}
66
- <svg
67
- xmlns="http://www.w3.org/2000/svg"
68
- width="24"
69
- height="24"
70
- viewBox="0 0 24 24"
71
- fill="none"
72
- stroke="currentColor"
73
- strokeWidth="2"
74
- strokeLinecap="round"
75
- strokeLinejoin="round"
76
- className="lucide lucide-check-icon lucide-check"
77
- >
78
- <path d="M20 6 9 17l-5-5" />
79
- </svg>
80
- </>
81
- );
82
- return (
83
- <li
84
- className={clsx(style.DropdownItem, className, selected && 'selected', href && style.DropdownItemLink)}
85
- role="option"
86
- data-dropdown-value={value}
87
- >
88
- {href ? <a href={href}>{inner}</a> : inner}
89
- </li>
90
- );
91
- };