@vllnt/ui 0.1.4 → 0.1.7-canary.2c4792f

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 (225) hide show
  1. package/dist/components/accordion/accordion.js +172 -0
  2. package/dist/components/accordion/index.js +12 -0
  3. package/dist/components/alert/alert.js +53 -0
  4. package/dist/components/alert/index.js +7 -0
  5. package/dist/components/alert-dialog/alert-dialog.js +117 -0
  6. package/dist/components/alert-dialog/index.js +26 -0
  7. package/dist/components/aspect-ratio/aspect-ratio.js +6 -0
  8. package/dist/components/aspect-ratio/index.js +4 -0
  9. package/dist/components/avatar/avatar.js +43 -0
  10. package/dist/components/avatar/index.js +6 -0
  11. package/dist/components/badge/badge.js +26 -0
  12. package/dist/components/badge/index.js +5 -0
  13. package/dist/components/blog-card/blog-card.js +50 -0
  14. package/dist/components/blog-card/index.js +5 -0
  15. package/dist/components/breadcrumb/breadcrumb.js +61 -0
  16. package/dist/components/breadcrumb/index.js +4 -0
  17. package/dist/components/button/button.js +48 -0
  18. package/dist/components/button/index.js +5 -0
  19. package/dist/components/calendar/calendar.js +71 -0
  20. package/dist/components/calendar/index.js +4 -0
  21. package/dist/components/callout/callout.js +59 -0
  22. package/dist/components/callout/index.js +4 -0
  23. package/dist/components/card/card.js +64 -0
  24. package/dist/components/card/index.js +16 -0
  25. package/dist/components/carousel/carousel.js +239 -0
  26. package/dist/components/carousel/index.js +14 -0
  27. package/dist/components/category-filter/category-filter.js +34 -0
  28. package/dist/components/category-filter/index.js +4 -0
  29. package/dist/components/chart/area-chart.js +99 -0
  30. package/dist/components/chart/bar-chart.js +80 -0
  31. package/dist/components/chart/index.js +3 -0
  32. package/dist/components/chart/line-chart.js +97 -0
  33. package/dist/components/checkbox/checkbox.js +28 -0
  34. package/dist/components/checkbox/index.js +4 -0
  35. package/dist/components/checklist/checklist.js +181 -0
  36. package/dist/components/checklist/index.js +6 -0
  37. package/dist/components/code-block/code-block.js +126 -0
  38. package/dist/components/code-block/index.js +4 -0
  39. package/dist/components/code-playground/code-playground.js +86 -0
  40. package/dist/components/code-playground/index.js +8 -0
  41. package/dist/components/collapsible/collapsible.js +10 -0
  42. package/dist/components/collapsible/index.js +10 -0
  43. package/dist/components/command/command.js +123 -0
  44. package/dist/components/command/index.js +22 -0
  45. package/dist/components/comparison/comparison.js +121 -0
  46. package/dist/components/comparison/index.js +8 -0
  47. package/dist/components/completion-dialog/completion-dialog.js +173 -0
  48. package/dist/components/completion-dialog/index.js +6 -0
  49. package/dist/components/content-intro/content-intro.js +144 -0
  50. package/dist/components/content-intro/index.js +6 -0
  51. package/dist/components/context-menu/context-menu.js +154 -0
  52. package/dist/components/context-menu/index.js +34 -0
  53. package/dist/components/cookie-consent/cookie-consent.js +175 -0
  54. package/dist/components/cookie-consent/index.js +8 -0
  55. package/dist/components/dialog/dialog.js +105 -0
  56. package/dist/components/dialog/index.js +24 -0
  57. package/dist/components/drawer/drawer.js +102 -0
  58. package/dist/components/drawer/index.js +24 -0
  59. package/dist/components/dropdown-menu/dropdown-menu.js +151 -0
  60. package/dist/components/dropdown-menu/index.js +34 -0
  61. package/dist/components/exercise/exercise.js +112 -0
  62. package/dist/components/exercise/index.js +4 -0
  63. package/dist/components/faq/faq.js +56 -0
  64. package/dist/components/faq/index.js +5 -0
  65. package/dist/components/filter-bar/filter-bar.js +244 -0
  66. package/dist/components/filter-bar/index.js +6 -0
  67. package/dist/components/floating-action-button/floating-action-button.js +35 -0
  68. package/dist/components/floating-action-button/index.js +6 -0
  69. package/dist/components/flow-diagram/flow-canvas.js +109 -0
  70. package/dist/components/flow-diagram/flow-controls.js +140 -0
  71. package/dist/components/flow-diagram/flow-diagram.js +114 -0
  72. package/dist/components/flow-diagram/flow-error-boundary.js +63 -0
  73. package/dist/components/flow-diagram/flow-fullscreen.js +58 -0
  74. package/dist/components/flow-diagram/index.js +12 -0
  75. package/dist/components/flow-diagram/types.js +0 -0
  76. package/dist/components/flow-diagram/use-flow-diagram.js +146 -0
  77. package/dist/components/horizontal-scroll-row/horizontal-scroll-row.js +66 -0
  78. package/dist/components/horizontal-scroll-row/index.js +6 -0
  79. package/dist/components/hover-card/hover-card.js +26 -0
  80. package/dist/components/hover-card/index.js +6 -0
  81. package/dist/components/index.js +641 -0
  82. package/dist/components/inline-input/index.js +4 -0
  83. package/dist/components/inline-input/inline-input.js +42 -0
  84. package/dist/components/input/index.js +4 -0
  85. package/dist/components/input/input.js +23 -0
  86. package/dist/components/input-otp/index.js +12 -0
  87. package/dist/components/input-otp/input-otp.js +54 -0
  88. package/dist/components/key-concept/index.js +8 -0
  89. package/dist/components/key-concept/key-concept.js +79 -0
  90. package/dist/components/keyboard-shortcuts-help/index.js +6 -0
  91. package/dist/components/keyboard-shortcuts-help/keyboard-shortcuts-help.js +121 -0
  92. package/dist/components/label/index.js +4 -0
  93. package/dist/components/label/label.js +21 -0
  94. package/dist/components/lang-provider/index.js +4 -0
  95. package/dist/components/lang-provider/lang-provider.js +18 -0
  96. package/dist/components/learning-objectives/index.js +10 -0
  97. package/dist/components/learning-objectives/learning-objectives.js +76 -0
  98. package/dist/components/mdx-content/index.js +4 -0
  99. package/dist/components/mdx-content/mdx-content.js +151 -0
  100. package/dist/components/menubar/index.js +36 -0
  101. package/dist/components/menubar/menubar.js +183 -0
  102. package/dist/components/model-selector/index.js +6 -0
  103. package/dist/components/model-selector/model-selector.js +374 -0
  104. package/dist/components/navbar-saas/index.js +6 -0
  105. package/dist/components/navbar-saas/navbar-saas.js +68 -0
  106. package/dist/components/navbar-saas/use-mobile.js +19 -0
  107. package/dist/components/navigation-menu/index.js +22 -0
  108. package/dist/components/navigation-menu/navigation-menu.js +108 -0
  109. package/dist/components/pagination/index.js +4 -0
  110. package/dist/components/pagination/pagination.js +44 -0
  111. package/dist/components/popover/index.js +12 -0
  112. package/dist/components/popover/popover.js +28 -0
  113. package/dist/components/pro-tip/index.js +8 -0
  114. package/dist/components/pro-tip/pro-tip.js +139 -0
  115. package/dist/components/profile-section/index.js +4 -0
  116. package/dist/components/profile-section/profile-section.js +45 -0
  117. package/dist/components/progress-bar/index.js +4 -0
  118. package/dist/components/progress-bar/progress-bar.js +56 -0
  119. package/dist/components/progress-card/index.js +6 -0
  120. package/dist/components/progress-card/progress-card.js +71 -0
  121. package/dist/components/quiz/index.js +4 -0
  122. package/dist/components/quiz/quiz.js +210 -0
  123. package/dist/components/radio-group/index.js +5 -0
  124. package/dist/components/radio-group/radio-group.js +36 -0
  125. package/dist/components/resizable/index.js +10 -0
  126. package/dist/components/resizable/resizable.js +39 -0
  127. package/dist/components/scroll-area/index.js +5 -0
  128. package/dist/components/scroll-area/scroll-area.js +39 -0
  129. package/dist/components/search-bar/index.js +4 -0
  130. package/dist/components/search-bar/search-bar.js +122 -0
  131. package/dist/components/search-dialog/index.js +4 -0
  132. package/dist/components/search-dialog/search-dialog.js +102 -0
  133. package/dist/components/select/index.js +24 -0
  134. package/dist/components/select/select.js +125 -0
  135. package/dist/components/separator/index.js +4 -0
  136. package/dist/components/separator/separator.js +25 -0
  137. package/dist/components/share-dialog/index.js +6 -0
  138. package/dist/components/share-dialog/share-dialog.js +121 -0
  139. package/dist/components/share-section/index.js +6 -0
  140. package/dist/components/share-section/share-section.js +57 -0
  141. package/dist/components/sheet/index.js +24 -0
  142. package/dist/components/sheet/sheet.js +116 -0
  143. package/dist/components/sidebar/index.js +4 -0
  144. package/dist/components/sidebar/sidebar.js +188 -0
  145. package/dist/components/sidebar-provider/index.js +5 -0
  146. package/dist/components/sidebar-provider/sidebar-provider.js +25 -0
  147. package/dist/components/sidebar-toggle/index.js +4 -0
  148. package/dist/components/sidebar-toggle/sidebar-toggle.js +36 -0
  149. package/dist/components/skeleton/index.js +4 -0
  150. package/dist/components/skeleton/skeleton.js +17 -0
  151. package/dist/components/slider/index.js +4 -0
  152. package/dist/components/slider/slider.js +24 -0
  153. package/dist/components/slideshow/index.js +6 -0
  154. package/dist/components/slideshow/slideshow.js +440 -0
  155. package/dist/components/social-fab/index.js +6 -0
  156. package/dist/components/social-fab/social-fab.js +211 -0
  157. package/dist/components/social-fab/use-social-fab.js +111 -0
  158. package/dist/components/spinner/index.js +4 -0
  159. package/dist/components/spinner/spinner.js +23 -0
  160. package/dist/components/step-by-step/index.js +8 -0
  161. package/dist/components/step-by-step/step-by-step.js +194 -0
  162. package/dist/components/step-navigation/index.js +4 -0
  163. package/dist/components/step-navigation/step-navigation.js +119 -0
  164. package/dist/components/switch/index.js +4 -0
  165. package/dist/components/switch/switch.js +28 -0
  166. package/dist/components/table/index.js +20 -0
  167. package/dist/components/table/table.js +87 -0
  168. package/dist/components/table-of-contents/index.js +4 -0
  169. package/dist/components/table-of-contents/table-of-contents.js +71 -0
  170. package/dist/components/table-of-contents-panel/index.js +6 -0
  171. package/dist/components/table-of-contents-panel/table-of-contents-panel.js +202 -0
  172. package/dist/components/tabs/index.js +12 -0
  173. package/dist/components/tabs/tabs.js +84 -0
  174. package/dist/components/terminal/index.js +8 -0
  175. package/dist/components/terminal/terminal.js +119 -0
  176. package/dist/components/textarea/index.js +4 -0
  177. package/dist/components/textarea/textarea.js +22 -0
  178. package/dist/components/theme-provider/index.js +4 -0
  179. package/dist/components/theme-provider/theme-provider.js +11 -0
  180. package/dist/components/theme-toggle/index.js +4 -0
  181. package/dist/components/theme-toggle/theme-toggle.js +170 -0
  182. package/dist/components/thinking-block/index.js +4 -0
  183. package/dist/components/thinking-block/thinking-block.js +56 -0
  184. package/dist/components/tldr-section/index.js +4 -0
  185. package/dist/components/tldr-section/tldr-section.js +101 -0
  186. package/dist/components/toast/index.js +18 -0
  187. package/dist/components/toast/toast.js +84 -0
  188. package/dist/components/toast/toaster.js +38 -0
  189. package/dist/components/toggle/index.js +5 -0
  190. package/dist/components/toggle/toggle.js +39 -0
  191. package/dist/components/toggle-group/index.js +5 -0
  192. package/dist/components/toggle-group/toggle-group.js +46 -0
  193. package/dist/components/tooltip/index.js +12 -0
  194. package/dist/components/tooltip/tooltip.js +27 -0
  195. package/dist/components/truncated-text/index.js +4 -0
  196. package/dist/components/truncated-text/truncated-text.js +25 -0
  197. package/dist/components/tutorial-card/index.js +6 -0
  198. package/dist/components/tutorial-card/tutorial-card.js +78 -0
  199. package/dist/components/tutorial-complete/index.js +6 -0
  200. package/dist/components/tutorial-complete/tutorial-complete.js +134 -0
  201. package/dist/components/tutorial-filters/index.js +6 -0
  202. package/dist/components/tutorial-filters/tutorial-filters.js +205 -0
  203. package/dist/components/tutorial-intro-content/index.js +6 -0
  204. package/dist/components/tutorial-intro-content/tutorial-intro-content.js +141 -0
  205. package/dist/components/tutorial-mdx/index.js +8 -0
  206. package/dist/components/tutorial-mdx/tutorial-mdx.js +219 -0
  207. package/dist/components/video-embed/index.js +4 -0
  208. package/dist/components/video-embed/video-embed.js +77 -0
  209. package/dist/components/view-switcher/index.js +6 -0
  210. package/dist/components/view-switcher/view-switcher.js +92 -0
  211. package/dist/index.d.ts +44 -2
  212. package/dist/index.js +14 -8556
  213. package/dist/lib/types.js +11 -0
  214. package/dist/lib/use-debounce.js +17 -0
  215. package/dist/lib/use-horizontal-scroll.js +60 -0
  216. package/dist/lib/use-mounted.js +17 -0
  217. package/dist/lib/utils.js +8 -0
  218. package/dist/tailwind-preset.d.ts +5 -0
  219. package/dist/tailwind-preset.js +9 -10
  220. package/dist/types/content.js +0 -0
  221. package/dist/types/index.js +0 -0
  222. package/package.json +42 -23
  223. package/LICENSE +0 -21
  224. package/dist/chunk-XRV5RSYH.js +0 -569
  225. package/dist/flow-diagram-N3EHM6VB.js +0 -2
@@ -0,0 +1,219 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { lazy, memo, Suspense, use, useMemo } from "react";
4
+ import { evaluate } from "@mdx-js/mdx";
5
+ import * as runtime from "react/jsx-runtime";
6
+ import ReactMarkdown from "react-markdown";
7
+ import { cn } from "../../lib/utils";
8
+ import {
9
+ Accordion,
10
+ AccordionContent,
11
+ AccordionItem,
12
+ AccordionTrigger
13
+ } from "../accordion";
14
+ import { Callout } from "../callout";
15
+ import { Checklist } from "../checklist";
16
+ import { CodePlayground, FileTree } from "../code-playground";
17
+ import { BeforeAfter, Comparison } from "../comparison";
18
+ import { Exercise } from "../exercise";
19
+ import { FAQ, FAQItem } from "../faq";
20
+ import { Glossary, KeyConcept } from "../key-concept";
21
+ import {
22
+ LearningObjectives,
23
+ Prerequisites,
24
+ Summary
25
+ } from "../learning-objectives";
26
+ import { CommonMistake, ProTip } from "../pro-tip";
27
+ import { Quiz } from "../quiz";
28
+ import { Step, StepByStep } from "../step-by-step";
29
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from "../tabs";
30
+ import { SimpleTerminal, Terminal } from "../terminal";
31
+ import { VideoEmbed } from "../video-embed";
32
+ const LazyFlowDiagram = lazy(
33
+ () => import("../flow-diagram").then((module_) => ({
34
+ default: module_.FlowDiagram
35
+ }))
36
+ );
37
+ function FlowDiagramWithSuspense(props) {
38
+ return /* @__PURE__ */ jsx(
39
+ Suspense,
40
+ {
41
+ fallback: /* @__PURE__ */ jsx(
42
+ "div",
43
+ {
44
+ "aria-label": "Loading diagram...",
45
+ className: "h-96 bg-muted animate-pulse rounded-lg"
46
+ }
47
+ ),
48
+ children: /* @__PURE__ */ jsx(LazyFlowDiagram, { ...props })
49
+ }
50
+ );
51
+ }
52
+ const mdxComponents = {
53
+ Accordion,
54
+ AccordionContent,
55
+ AccordionItem,
56
+ AccordionTrigger,
57
+ BeforeAfter,
58
+ Callout,
59
+ Checklist,
60
+ CodePlayground,
61
+ CommonMistake,
62
+ Comparison,
63
+ Exercise,
64
+ FAQ,
65
+ FAQItem,
66
+ FileTree,
67
+ FlowDiagram: FlowDiagramWithSuspense,
68
+ Glossary,
69
+ KeyConcept,
70
+ LearningObjectives,
71
+ Prerequisites,
72
+ ProTip,
73
+ Quiz,
74
+ SimpleTerminal,
75
+ Step,
76
+ StepByStep,
77
+ Summary,
78
+ Tabs,
79
+ TabsContent,
80
+ TabsList,
81
+ TabsTrigger,
82
+ Terminal,
83
+ VideoEmbed
84
+ };
85
+ const markdownComponents = {
86
+ a: ({ children, href, ...props }) => /* @__PURE__ */ jsx(
87
+ "a",
88
+ {
89
+ className: "text-primary underline underline-offset-4 hover:text-primary/80 font-medium",
90
+ href,
91
+ ...props,
92
+ children
93
+ }
94
+ ),
95
+ blockquote: ({ children, ...props }) => /* @__PURE__ */ jsx(
96
+ "blockquote",
97
+ {
98
+ className: "border-l-4 border-primary pl-4 italic text-muted-foreground my-6 py-2 text-sm",
99
+ ...props,
100
+ children
101
+ }
102
+ ),
103
+ code: ({ children, className, ...props }) => {
104
+ const isBlock = className?.includes("language-");
105
+ if (isBlock) {
106
+ return /* @__PURE__ */ jsx("code", { className: cn("font-mono text-sm", className), ...props, children });
107
+ }
108
+ return /* @__PURE__ */ jsx(
109
+ "code",
110
+ {
111
+ className: "bg-muted px-1.5 py-0.5 rounded text-sm font-mono",
112
+ ...props,
113
+ children
114
+ }
115
+ );
116
+ },
117
+ h1: ({ children, ...props }) => /* @__PURE__ */ jsx("h1", { className: "text-2xl font-bold mt-8 mb-4", ...props, children }),
118
+ h2: ({ children, ...props }) => /* @__PURE__ */ jsx("h2", { className: "text-xl font-bold mt-6 mb-3", ...props, children }),
119
+ h3: ({ children, ...props }) => /* @__PURE__ */ jsx("h3", { className: "text-lg font-bold mt-4 mb-2", ...props, children }),
120
+ h4: ({ children, ...props }) => /* @__PURE__ */ jsx("h4", { className: "text-base font-bold mt-3 mb-2", ...props, children }),
121
+ hr: ({ ...props }) => /* @__PURE__ */ jsx("hr", { className: "my-8 border-border", ...props }),
122
+ li: ({ children, ...props }) => /* @__PURE__ */ jsx(
123
+ "li",
124
+ {
125
+ className: "mb-2 leading-relaxed text-muted-foreground text-sm pl-2",
126
+ ...props,
127
+ children
128
+ }
129
+ ),
130
+ ol: ({ children, ...props }) => /* @__PURE__ */ jsx(
131
+ "ol",
132
+ {
133
+ className: "list-decimal list-outside mb-6 space-y-2 ml-6 text-muted-foreground text-sm",
134
+ ...props,
135
+ children
136
+ }
137
+ ),
138
+ p: ({ children, ...props }) => /* @__PURE__ */ jsx(
139
+ "p",
140
+ {
141
+ className: "mb-4 leading-relaxed text-muted-foreground text-sm",
142
+ ...props,
143
+ children
144
+ }
145
+ ),
146
+ pre: ({ children, ...props }) => /* @__PURE__ */ jsx(
147
+ "pre",
148
+ {
149
+ className: "bg-zinc-950 dark:bg-zinc-900 text-zinc-100 p-4 rounded-lg overflow-x-auto my-6 border border-zinc-800 shadow-lg font-mono text-sm",
150
+ ...props,
151
+ children
152
+ }
153
+ ),
154
+ strong: ({ children, ...props }) => /* @__PURE__ */ jsx("strong", { className: "font-semibold text-foreground", ...props, children }),
155
+ table: ({ children, ...props }) => /* @__PURE__ */ jsx("div", { className: "my-6 overflow-x-auto", children: /* @__PURE__ */ jsx("table", { className: "w-full border-collapse border border-border", ...props, children }) }),
156
+ td: ({ children, ...props }) => /* @__PURE__ */ jsx("td", { className: "border border-border p-2 text-sm", ...props, children }),
157
+ th: ({ children, ...props }) => /* @__PURE__ */ jsx(
158
+ "th",
159
+ {
160
+ className: "border border-border bg-muted p-2 text-left font-medium text-sm",
161
+ ...props,
162
+ children
163
+ }
164
+ ),
165
+ ul: ({ children, ...props }) => /* @__PURE__ */ jsx(
166
+ "ul",
167
+ {
168
+ className: "list-disc list-outside mb-6 space-y-2 ml-6 text-muted-foreground text-sm",
169
+ ...props,
170
+ children
171
+ }
172
+ )
173
+ };
174
+ const allComponents = {
175
+ ...markdownComponents,
176
+ ...mdxComponents
177
+ };
178
+ function hasJSXComponents(content) {
179
+ const contentWithoutCodeBlocks = content.replaceAll(/```[\S\s]*?```/g, "");
180
+ return /<[A-Z][A-Za-z]*[\s/>]/.test(contentWithoutCodeBlocks);
181
+ }
182
+ function MDXWithSuspense({ className, content }) {
183
+ const mdxPromise = useMemo(
184
+ () => evaluate(content, {
185
+ ...runtime,
186
+ baseUrl: import.meta.url
187
+ }),
188
+ [content]
189
+ );
190
+ return /* @__PURE__ */ jsx("div", { className, children: /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(MDXLoadingFallback, {}), children: /* @__PURE__ */ jsx(MDXContent, { mdxPromise }) }) });
191
+ }
192
+ function MarkdownOnly({ className, content }) {
193
+ return /* @__PURE__ */ jsx("div", { className, children: /* @__PURE__ */ jsx(ReactMarkdown, { components: markdownComponents, children: content }) });
194
+ }
195
+ function MDXContent({
196
+ mdxPromise
197
+ }) {
198
+ const { default: Component } = use(mdxPromise);
199
+ return /* @__PURE__ */ jsx(Component, { components: allComponents });
200
+ }
201
+ function MDXLoadingFallback() {
202
+ return /* @__PURE__ */ jsx("div", { "aria-hidden": "true", className: "min-h-[100px]" });
203
+ }
204
+ function TutorialMDXImpl({
205
+ className,
206
+ content
207
+ }) {
208
+ const hasJSX = hasJSXComponents(content);
209
+ if (hasJSX) {
210
+ return /* @__PURE__ */ jsx(MDXWithSuspense, { className, content });
211
+ }
212
+ return /* @__PURE__ */ jsx(MarkdownOnly, { className, content });
213
+ }
214
+ const TutorialMDX = memo(TutorialMDXImpl);
215
+ TutorialMDX.displayName = "TutorialMDX";
216
+ export {
217
+ TutorialMDX,
218
+ mdxComponents
219
+ };
@@ -0,0 +1,4 @@
1
+ import { VideoEmbed } from "./video-embed";
2
+ export {
3
+ VideoEmbed
4
+ };
@@ -0,0 +1,77 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { Play, Video } from "lucide-react";
5
+ import { cn } from "../../lib/utils";
6
+ function getEmbedUrl(source, type) {
7
+ if (type === "youtube") {
8
+ const videoId = /(?:youtube\.com\/(?:watch\?v=|embed\/)|youtu\.be\/)([^&?]+)/.exec(
9
+ source
10
+ )?.[1];
11
+ return videoId ? `https://www.youtube.com/embed/${videoId}` : source;
12
+ }
13
+ if (type === "vimeo") {
14
+ const videoId = /vimeo\.com\/(\d+)/.exec(source)?.[1];
15
+ return videoId ? `https://player.vimeo.com/video/${videoId}` : source;
16
+ }
17
+ return source;
18
+ }
19
+ function VideoEmbed({
20
+ aspectRatio = "16/9",
21
+ src,
22
+ thumbnail,
23
+ title,
24
+ type = "youtube"
25
+ }) {
26
+ const [isPlaying, setIsPlaying] = useState(false);
27
+ const embedUrl = getEmbedUrl(src, type);
28
+ const aspectClass = aspectRatio === "16/9" ? "aspect-video" : aspectRatio === "4/3" ? "aspect-[4/3]" : "aspect-square";
29
+ return /* @__PURE__ */ jsxs("div", { className: "my-6", children: [
30
+ /* @__PURE__ */ jsx(
31
+ "div",
32
+ {
33
+ className: cn(
34
+ "relative rounded-lg overflow-hidden bg-muted border",
35
+ aspectClass
36
+ ),
37
+ children: isPlaying ? /* @__PURE__ */ jsx(
38
+ "iframe",
39
+ {
40
+ allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",
41
+ allowFullScreen: true,
42
+ className: "absolute inset-0 w-full h-full",
43
+ src: `${embedUrl}?autoplay=1`,
44
+ title
45
+ }
46
+ ) : /* @__PURE__ */ jsxs(
47
+ "button",
48
+ {
49
+ className: "absolute inset-0 w-full h-full flex items-center justify-center group",
50
+ onClick: () => {
51
+ setIsPlaying(true);
52
+ },
53
+ type: "button",
54
+ children: [
55
+ thumbnail ? /* @__PURE__ */ jsx(
56
+ "img",
57
+ {
58
+ alt: title,
59
+ className: "absolute inset-0 w-full h-full object-cover",
60
+ src: thumbnail
61
+ }
62
+ ) : /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-br from-muted to-muted-foreground/20" }),
63
+ /* @__PURE__ */ jsx("div", { className: "relative z-10 flex h-16 w-16 items-center justify-center rounded-full bg-primary text-primary-foreground shadow-lg transition-transform group-hover:scale-110", children: /* @__PURE__ */ jsx(Play, { className: "h-6 w-6 ml-1" }) })
64
+ ]
65
+ }
66
+ )
67
+ }
68
+ ),
69
+ /* @__PURE__ */ jsxs("p", { className: "mt-2 text-sm text-center text-muted-foreground flex items-center justify-center gap-1", children: [
70
+ /* @__PURE__ */ jsx(Video, { className: "h-4 w-4" }),
71
+ title
72
+ ] })
73
+ ] });
74
+ }
75
+ export {
76
+ VideoEmbed
77
+ };
@@ -0,0 +1,6 @@
1
+ import {
2
+ ViewSwitcher
3
+ } from "./view-switcher";
4
+ export {
5
+ ViewSwitcher
6
+ };
@@ -0,0 +1,92 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { memo, Suspense } from "react";
4
+ import { usePathname, useRouter, useSearchParams } from "next/navigation";
5
+ import { cn } from "../../lib/utils";
6
+ function ViewSwitcherInner({
7
+ className,
8
+ defaultKey,
9
+ options,
10
+ paramName: parameterName = "view"
11
+ }) {
12
+ const router = useRouter();
13
+ const pathname = usePathname();
14
+ const searchParameters = useSearchParams();
15
+ const resolvedDefault = defaultKey ?? options[0]?.key ?? "";
16
+ const currentKey = searchParameters.get(parameterName) ?? resolvedDefault;
17
+ function handleSelect(key) {
18
+ const parameters = new URLSearchParams(searchParameters.toString());
19
+ if (key === resolvedDefault) {
20
+ parameters.delete(parameterName);
21
+ } else {
22
+ parameters.set(parameterName, key);
23
+ }
24
+ const query = parameters.toString();
25
+ router.push(query ? `${pathname}?${query}` : pathname, { scroll: false });
26
+ }
27
+ return /* @__PURE__ */ jsx(
28
+ "div",
29
+ {
30
+ className: cn(
31
+ "inline-flex items-center rounded-lg border bg-muted p-1",
32
+ className
33
+ ),
34
+ role: "tablist",
35
+ children: options.map((option) => /* @__PURE__ */ jsx(
36
+ "button",
37
+ {
38
+ "aria-selected": currentKey === option.key,
39
+ className: cn(
40
+ "rounded-md px-3 py-1.5 text-sm font-medium transition-colors",
41
+ currentKey === option.key ? "bg-background text-foreground shadow-sm" : "text-muted-foreground hover:text-foreground"
42
+ ),
43
+ onClick: () => {
44
+ handleSelect(option.key);
45
+ },
46
+ role: "tab",
47
+ type: "button",
48
+ children: option.label
49
+ },
50
+ option.key
51
+ ))
52
+ }
53
+ );
54
+ }
55
+ function ViewSwitcherFallback({
56
+ className,
57
+ defaultKey,
58
+ options
59
+ }) {
60
+ const resolvedDefault = defaultKey ?? options[0]?.key ?? "";
61
+ return /* @__PURE__ */ jsx(
62
+ "div",
63
+ {
64
+ className: cn(
65
+ "inline-flex items-center rounded-lg border bg-muted p-1",
66
+ className
67
+ ),
68
+ role: "tablist",
69
+ children: options.map((option) => /* @__PURE__ */ jsx(
70
+ "button",
71
+ {
72
+ "aria-selected": resolvedDefault === option.key,
73
+ className: cn(
74
+ "rounded-md px-3 py-1.5 text-sm font-medium transition-colors",
75
+ resolvedDefault === option.key ? "bg-background text-foreground shadow-sm" : "text-muted-foreground hover:text-foreground"
76
+ ),
77
+ role: "tab",
78
+ type: "button",
79
+ children: option.label
80
+ },
81
+ option.key
82
+ ))
83
+ }
84
+ );
85
+ }
86
+ const ViewSwitcher = memo(function ViewSwitcher2(props) {
87
+ return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(ViewSwitcherFallback, { ...props }), children: /* @__PURE__ */ jsx(ViewSwitcherInner, { ...props }) });
88
+ });
89
+ ViewSwitcher.displayName = "ViewSwitcher";
90
+ export {
91
+ ViewSwitcher
92
+ };
package/dist/index.d.ts CHANGED
@@ -899,7 +899,7 @@ type ComparisonProps = {
899
899
  before: ComparisonSide;
900
900
  title?: string;
901
901
  };
902
- declare function Comparison({ after, before, title }: ComparisonProps): react_jsx_runtime.JSX.Element;
902
+ declare function Comparison({ after, before, title, ...rest }: ComparisonProps & Record<string, unknown>): react_jsx_runtime.JSX.Element | null;
903
903
  type BeforeAfterProps = {
904
904
  after: ReactNode;
905
905
  before: ReactNode;
@@ -1519,6 +1519,26 @@ declare function useSocialFab(options?: UseSocialFabOptions): {
1519
1519
  };
1520
1520
  };
1521
1521
 
1522
+ type HorizontalScrollRowProps = {
1523
+ children: ReactNode;
1524
+ className?: string;
1525
+ description?: string;
1526
+ title: string;
1527
+ };
1528
+ declare const HorizontalScrollRow: react.NamedExoticComponent<HorizontalScrollRowProps>;
1529
+
1530
+ type ViewOption = {
1531
+ key: string;
1532
+ label: string;
1533
+ };
1534
+ type ViewSwitcherProps = {
1535
+ className?: string;
1536
+ defaultKey?: string;
1537
+ options: ViewOption[];
1538
+ paramName?: string;
1539
+ };
1540
+ declare const ViewSwitcher: react.NamedExoticComponent<ViewSwitcherProps>;
1541
+
1522
1542
  type FlowDiagramNode = {
1523
1543
  data: {
1524
1544
  description?: string;
@@ -1832,6 +1852,28 @@ type Content<TSection extends ContentSectionMinimal = ContentSection> = ContentM
1832
1852
  */
1833
1853
  declare function useDebounce<T>(value: T, delay?: number): T;
1834
1854
 
1855
+ type UseHorizontalScrollReturn = {
1856
+ canScrollLeft: boolean;
1857
+ canScrollRight: boolean;
1858
+ containerRef: React.RefCallback<HTMLElement>;
1859
+ scroll: (direction: "left" | "right") => void;
1860
+ };
1861
+ /**
1862
+ * Hook for horizontal scroll containers with navigation state.
1863
+ *
1864
+ * @returns Scroll state, ref callback for the container, and scroll function.
1865
+ *
1866
+ * @example
1867
+ * ```tsx
1868
+ * const { canScrollLeft, canScrollRight, containerRef, scroll } = useHorizontalScroll();
1869
+ *
1870
+ * <div ref={containerRef} className="overflow-x-auto">
1871
+ * {children}
1872
+ * </div>
1873
+ * ```
1874
+ */
1875
+ declare function useHorizontalScroll(): UseHorizontalScrollReturn;
1876
+
1835
1877
  declare function cn(...inputs: ClassValue[]): string;
1836
1878
 
1837
- export { Accordion, AccordionContent, type AccordionContentProps, AccordionItem, type AccordionItemProps, type AccordionProps, AccordionTrigger, type AccordionTriggerProps, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AreaChart, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, BarChart, BeforeAfter, type BeforeAfterProps, BlogCard, Breadcrumb, type BreadcrumbItem, Button, type ButtonProps, Calendar, type CalendarProps, Callout, type CalloutProps, type CalloutVariant, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, CategoryFilter, Checkbox, Checklist, type ChecklistItem, type ChecklistProps, CodeBlock, CodePlayground, type CodePlaygroundProps, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, CommonMistake, type CommonMistakeProps, Comparison, type ComparisonProps, CompletionDialog, type CompletionDialogProps, Content, ContentCard, ContentIntro, type ContentIntroLabels, type ContentIntroProps, type ContentIntroSection, type ContentMeta, type ContentProgress, type ContentSection, type ContentSectionMinimal, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CookieConsent, type CookieConsentProps, type CopyStatus, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, type DifficultyLevel, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Exercise, type ExerciseProps, FAQ, FAQItem, type FAQItemProps, type FAQProps, FileTree, type FileTreeProps, FilterBar, type FilterBarLabels, type FilterBarProps, type FilterOption, type FilterUpdates, FloatingActionButton, type FloatingActionButtonProps, FlowControls, type FlowControlsProps, FlowDiagram, type FlowDiagramEdge, type FlowDiagramNode, type FlowDiagramProps, FlowErrorBoundary, FlowFullscreen, type FlowFullscreenProps, Glossary, type GlossaryProps, HoverCard, HoverCardContent, HoverCardTrigger, InlineInput, type InlineInputProps, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, KeyConcept, type KeyConceptProps, type KeyboardShortcut, KeyboardShortcutsHelp, type KeyboardShortcutsHelpProps, LANGUAGE_NAMES, Label, LangProvider, LearningObjectives, type LearningObjectivesProps, LineChart, MDXContent, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, type ModelInfo, ModelSelector, type ModelSelectorProps, type NavItem, NavbarSaas, type NavbarSaasProps, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, type PaginationProps, type PlatformConfig, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Prerequisites, type PrerequisitesProps, ProTip, type ProTipProps, type ProTipVariant, ProfileSection, ProgressBar, type ProgressBarProps, Quiz, type QuizOption, type QuizProps, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, SearchBar, SearchDialog, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, ShareDialog, type ShareDialogLabels, type SharePlatform as ShareDialogPlatform, type ShareDialogProps, type SharePlatform$1 as SharePlatform, type SharePlatformConfig, ShareSection, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, type SidebarItem, SidebarProvider, type SidebarSection, SidebarToggle, type SidebarToggleProps, SimpleTerminal, type SimpleTerminalProps, Skeleton, Slider, Slideshow, type SlideshowLabels, type SlideshowProps, type SlideshowSection, SocialFAB, type SocialFabActionConfig, type SocialFabLabels, type SocialFabProps, Spinner, type SpinnerProps, Step, StepByStep, type StepByStepProps, StepNavigation, type StepNavigationProps, type StepProps, Summary, type SummaryProps, Switch, TLDRSection, type TOCSection, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableOfContents, TableOfContentsPanel, type TableOfContentsPanelProps, TableRow, Tabs, TabsContent, type TabsContentProps, TabsList, type TabsListProps, type TabsProps, TabsTrigger, type TabsTriggerProps, Terminal, type TerminalLine, type TerminalProps, Textarea, type TextareaProps, ThemeProvider, ThemeToggle, ThinkingBlock, type ThinkingBlockProps, Toast, ToastAction, ToastClose, ToastDescription, type ToastProps, ToastTitle, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TruncatedText, type TruncatedTextProps, TutorialCard, type TutorialCardLabels, type TutorialCardMeta, type TutorialCardProgress, type TutorialCardProps, TutorialComplete, type TutorialCompleteLabels, type TutorialCompleteProps, type TutorialCompleteRelatedContent, type TutorialCompleteSection, TutorialFilters, type TutorialFiltersLabels, type TutorialFiltersProps, TutorialIntroContent, type TutorialIntroContentProps, TutorialMDX, type TutorialMDXProps, type SupportedLanguage as UISupportedLanguage, type UseFlowDiagramOptions, type UseFlowDiagramReturn, VideoEmbed, type VideoEmbedProps, alertVariants, badgeVariants, buttonVariants, cn, cookieConsentVariants, getOtherLanguage, mdxComponents, navigationMenuTriggerStyle, toggleVariants, useDebounce, useFlowDiagram, useMobile, useSidebar, useSocialFab };
1879
+ export { Accordion, AccordionContent, type AccordionContentProps, AccordionItem, type AccordionItemProps, type AccordionProps, AccordionTrigger, type AccordionTriggerProps, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AreaChart, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, BarChart, BeforeAfter, type BeforeAfterProps, BlogCard, Breadcrumb, type BreadcrumbItem, Button, type ButtonProps, Calendar, type CalendarProps, Callout, type CalloutProps, type CalloutVariant, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, CategoryFilter, Checkbox, Checklist, type ChecklistItem, type ChecklistProps, CodeBlock, CodePlayground, type CodePlaygroundProps, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, CommonMistake, type CommonMistakeProps, Comparison, type ComparisonProps, CompletionDialog, type CompletionDialogProps, Content, ContentCard, ContentIntro, type ContentIntroLabels, type ContentIntroProps, type ContentIntroSection, type ContentMeta, type ContentProgress, type ContentSection, type ContentSectionMinimal, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CookieConsent, type CookieConsentProps, type CopyStatus, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, type DifficultyLevel, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Exercise, type ExerciseProps, FAQ, FAQItem, type FAQItemProps, type FAQProps, FileTree, type FileTreeProps, FilterBar, type FilterBarLabels, type FilterBarProps, type FilterOption, type FilterUpdates, FloatingActionButton, type FloatingActionButtonProps, FlowControls, type FlowControlsProps, FlowDiagram, type FlowDiagramEdge, type FlowDiagramNode, type FlowDiagramProps, FlowErrorBoundary, FlowFullscreen, type FlowFullscreenProps, Glossary, type GlossaryProps, HorizontalScrollRow, type HorizontalScrollRowProps, HoverCard, HoverCardContent, HoverCardTrigger, InlineInput, type InlineInputProps, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, KeyConcept, type KeyConceptProps, type KeyboardShortcut, KeyboardShortcutsHelp, type KeyboardShortcutsHelpProps, LANGUAGE_NAMES, Label, LangProvider, LearningObjectives, type LearningObjectivesProps, LineChart, MDXContent, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, type ModelInfo, ModelSelector, type ModelSelectorProps, type NavItem, NavbarSaas, type NavbarSaasProps, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, type PaginationProps, type PlatformConfig, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Prerequisites, type PrerequisitesProps, ProTip, type ProTipProps, type ProTipVariant, ProfileSection, ProgressBar, type ProgressBarProps, Quiz, type QuizOption, type QuizProps, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, SearchBar, SearchDialog, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, ShareDialog, type ShareDialogLabels, type SharePlatform as ShareDialogPlatform, type ShareDialogProps, type SharePlatform$1 as SharePlatform, type SharePlatformConfig, ShareSection, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, type SidebarItem, SidebarProvider, type SidebarSection, SidebarToggle, type SidebarToggleProps, SimpleTerminal, type SimpleTerminalProps, Skeleton, Slider, Slideshow, type SlideshowLabels, type SlideshowProps, type SlideshowSection, SocialFAB, type SocialFabActionConfig, type SocialFabLabels, type SocialFabProps, Spinner, type SpinnerProps, Step, StepByStep, type StepByStepProps, StepNavigation, type StepNavigationProps, type StepProps, Summary, type SummaryProps, Switch, TLDRSection, type TOCSection, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableOfContents, TableOfContentsPanel, type TableOfContentsPanelProps, TableRow, Tabs, TabsContent, type TabsContentProps, TabsList, type TabsListProps, type TabsProps, TabsTrigger, type TabsTriggerProps, Terminal, type TerminalLine, type TerminalProps, Textarea, type TextareaProps, ThemeProvider, ThemeToggle, ThinkingBlock, type ThinkingBlockProps, Toast, ToastAction, ToastClose, ToastDescription, type ToastProps, ToastTitle, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TruncatedText, type TruncatedTextProps, TutorialCard, type TutorialCardLabels, type TutorialCardMeta, type TutorialCardProgress, type TutorialCardProps, TutorialComplete, type TutorialCompleteLabels, type TutorialCompleteProps, type TutorialCompleteRelatedContent, type TutorialCompleteSection, TutorialFilters, type TutorialFiltersLabels, type TutorialFiltersProps, TutorialIntroContent, type TutorialIntroContentProps, TutorialMDX, type TutorialMDXProps, type SupportedLanguage as UISupportedLanguage, type UseFlowDiagramOptions, type UseFlowDiagramReturn, VideoEmbed, type VideoEmbedProps, type ViewOption, ViewSwitcher, type ViewSwitcherProps, alertVariants, badgeVariants, buttonVariants, cn, cookieConsentVariants, getOtherLanguage, mdxComponents, navigationMenuTriggerStyle, toggleVariants, useDebounce, useFlowDiagram, useHorizontalScroll, useMobile, useSidebar, useSocialFab };