@suzumiyaaoba/mdxr 0.1.0

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 (236) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +56 -0
  3. package/dist/cli.d.mts +1 -0
  4. package/dist/cli.mjs +2902 -0
  5. package/dist/components.d.mts +791 -0
  6. package/dist/components.mjs +2 -0
  7. package/dist/config-SI9IyFiC.mjs +184 -0
  8. package/dist/doc-context-CEqzMYKv.d.mts +568 -0
  9. package/dist/index.d.mts +20 -0
  10. package/dist/index.mjs +4 -0
  11. package/dist/ui-GKFD0mx5.mjs +15986 -0
  12. package/package.json +131 -0
  13. package/skill/SKILL.md +49 -0
  14. package/skill/references/components/charts.md +172 -0
  15. package/skill/references/components/document.md +98 -0
  16. package/skill/references/components/forms.md +35 -0
  17. package/skill/references/components/investigation.md +198 -0
  18. package/skill/references/components/layout.md +68 -0
  19. package/skill/references/components/output.md +158 -0
  20. package/skill/references/components/planning.md +155 -0
  21. package/skill/references/components/reports.md +252 -0
  22. package/skill/references/components/shadcn.md +19 -0
  23. package/skill/references/components.md +186 -0
  24. package/skill/references/extending.md +48 -0
  25. package/src/ask-sheet.ts +40 -0
  26. package/src/assets/css.ts +392 -0
  27. package/src/assets/scripts.ts +78 -0
  28. package/src/catalog.ts +287 -0
  29. package/src/cli.ts +178 -0
  30. package/src/client/doc-events.ts +1108 -0
  31. package/src/client/entry.ts +27 -0
  32. package/src/client-js.ts +47 -0
  33. package/src/component-map.ts +47 -0
  34. package/src/components/ui/accordion.tsx +77 -0
  35. package/src/components/ui/alert-dialog.tsx +185 -0
  36. package/src/components/ui/alert.tsx +76 -0
  37. package/src/components/ui/aspect-ratio.tsx +22 -0
  38. package/src/components/ui/attachment.tsx +208 -0
  39. package/src/components/ui/avatar.tsx +106 -0
  40. package/src/components/ui/badge.tsx +52 -0
  41. package/src/components/ui/breadcrumb.tsx +121 -0
  42. package/src/components/ui/bubble.tsx +128 -0
  43. package/src/components/ui/button-group.tsx +88 -0
  44. package/src/components/ui/button.tsx +58 -0
  45. package/src/components/ui/calendar.tsx +226 -0
  46. package/src/components/ui/card.tsx +102 -0
  47. package/src/components/ui/carousel.tsx +246 -0
  48. package/src/components/ui/chart.tsx +379 -0
  49. package/src/components/ui/checkbox.tsx +27 -0
  50. package/src/components/ui/collapsible.tsx +19 -0
  51. package/src/components/ui/combobox.tsx +298 -0
  52. package/src/components/ui/command.tsx +193 -0
  53. package/src/components/ui/context-menu.tsx +271 -0
  54. package/src/components/ui/dialog.tsx +159 -0
  55. package/src/components/ui/direction.tsx +4 -0
  56. package/src/components/ui/drawer.tsx +227 -0
  57. package/src/components/ui/dropdown-menu.tsx +269 -0
  58. package/src/components/ui/empty.tsx +104 -0
  59. package/src/components/ui/field.tsx +237 -0
  60. package/src/components/ui/fieldset.tsx +32 -0
  61. package/src/components/ui/frame.tsx +87 -0
  62. package/src/components/ui/hover-card.tsx +50 -0
  63. package/src/components/ui/input-group.tsx +159 -0
  64. package/src/components/ui/input-otp.tsx +83 -0
  65. package/src/components/ui/input.tsx +19 -0
  66. package/src/components/ui/item.tsx +202 -0
  67. package/src/components/ui/kbd.tsx +26 -0
  68. package/src/components/ui/label.tsx +19 -0
  69. package/src/components/ui/marker.tsx +71 -0
  70. package/src/components/ui/menubar.tsx +284 -0
  71. package/src/components/ui/message-scroller.tsx +128 -0
  72. package/src/components/ui/message.tsx +91 -0
  73. package/src/components/ui/meter.tsx +80 -0
  74. package/src/components/ui/native-select.tsx +64 -0
  75. package/src/components/ui/navigation-menu.tsx +170 -0
  76. package/src/components/ui/pagination.tsx +133 -0
  77. package/src/components/ui/popover.tsx +87 -0
  78. package/src/components/ui/progress.tsx +82 -0
  79. package/src/components/ui/questionnaire.tsx +328 -0
  80. package/src/components/ui/radio-group.tsx +35 -0
  81. package/src/components/ui/resizable.tsx +49 -0
  82. package/src/components/ui/scroll-area.tsx +50 -0
  83. package/src/components/ui/select.tsx +201 -0
  84. package/src/components/ui/separator.tsx +22 -0
  85. package/src/components/ui/sheet.tsx +135 -0
  86. package/src/components/ui/sidebar.tsx +730 -0
  87. package/src/components/ui/skeleton.tsx +13 -0
  88. package/src/components/ui/slider.tsx +51 -0
  89. package/src/components/ui/spinner.tsx +16 -0
  90. package/src/components/ui/switch.tsx +31 -0
  91. package/src/components/ui/table.tsx +113 -0
  92. package/src/components/ui/tabs.tsx +82 -0
  93. package/src/components/ui/textarea.tsx +17 -0
  94. package/src/components/ui/toast.tsx +229 -0
  95. package/src/components/ui/toggle-group.tsx +87 -0
  96. package/src/components/ui/toggle.tsx +43 -0
  97. package/src/components/ui/tooltip.tsx +65 -0
  98. package/src/components.ts +78 -0
  99. package/src/config.ts +56 -0
  100. package/src/define.ts +122 -0
  101. package/src/doc-context.ts +20 -0
  102. package/src/editor.ts +94 -0
  103. package/src/format-error.ts +78 -0
  104. package/src/guards.ts +84 -0
  105. package/src/hooks/use-mobile.ts +21 -0
  106. package/src/html.ts +91 -0
  107. package/src/hydrate/export-index.ts +232 -0
  108. package/src/hydrate/import-scan.ts +169 -0
  109. package/src/hydrate/plugins.ts +118 -0
  110. package/src/hydrate/runtime-module.ts +145 -0
  111. package/src/hydrate-runtime.ts +67 -0
  112. package/src/hydrate.ts +147 -0
  113. package/src/index.ts +16 -0
  114. package/src/init.ts +57 -0
  115. package/src/langs.ts +148 -0
  116. package/src/lines.ts +53 -0
  117. package/src/load-user-module.ts +191 -0
  118. package/src/mdx.ts +248 -0
  119. package/src/paths.ts +36 -0
  120. package/src/rehype/shiki.ts +533 -0
  121. package/src/remark/alerts.ts +53 -0
  122. package/src/remark/ast.ts +96 -0
  123. package/src/remark/callouts.ts +25 -0
  124. package/src/remark/code-file.ts +85 -0
  125. package/src/remark/code-meta.ts +21 -0
  126. package/src/remark/directives.ts +170 -0
  127. package/src/remark/file-paths.ts +64 -0
  128. package/src/remark/headings.ts +131 -0
  129. package/src/remark/no-js.ts +40 -0
  130. package/src/render.ts +337 -0
  131. package/src/serve.ts +322 -0
  132. package/src/styles/globals.css +134 -0
  133. package/src/styles/shadcn.css +641 -0
  134. package/src/tailwind.ts +119 -0
  135. package/src/ui/approvals.tsx +76 -0
  136. package/src/ui/ask-question.tsx +386 -0
  137. package/src/ui/ask.tsx +206 -0
  138. package/src/ui/attrs.ts +51 -0
  139. package/src/ui/audit.tsx +139 -0
  140. package/src/ui/bar-chart.tsx +334 -0
  141. package/src/ui/benchmarks.tsx +143 -0
  142. package/src/ui/bits.tsx +537 -0
  143. package/src/ui/board.tsx +173 -0
  144. package/src/ui/bridge.tsx +207 -0
  145. package/src/ui/bumps.tsx +178 -0
  146. package/src/ui/callout.tsx +106 -0
  147. package/src/ui/changes.tsx +89 -0
  148. package/src/ui/chart-bits.tsx +52 -0
  149. package/src/ui/chart.ts +577 -0
  150. package/src/ui/checks.tsx +203 -0
  151. package/src/ui/child-index.tsx +44 -0
  152. package/src/ui/children.ts +43 -0
  153. package/src/ui/chips.tsx +49 -0
  154. package/src/ui/cmd.tsx +27 -0
  155. package/src/ui/columns.tsx +31 -0
  156. package/src/ui/comments.tsx +544 -0
  157. package/src/ui/compare.tsx +67 -0
  158. package/src/ui/decision.tsx +79 -0
  159. package/src/ui/deps.tsx +78 -0
  160. package/src/ui/details.tsx +43 -0
  161. package/src/ui/diff-parse.ts +307 -0
  162. package/src/ui/diff.tsx +458 -0
  163. package/src/ui/diffstat.tsx +58 -0
  164. package/src/ui/due.tsx +65 -0
  165. package/src/ui/effort.tsx +29 -0
  166. package/src/ui/endpoints.tsx +118 -0
  167. package/src/ui/envvars.tsx +96 -0
  168. package/src/ui/figure.tsx +37 -0
  169. package/src/ui/file-icon.ts +1020 -0
  170. package/src/ui/file-link.ts +32 -0
  171. package/src/ui/file-ref.tsx +39 -0
  172. package/src/ui/files.tsx +112 -0
  173. package/src/ui/findings.tsx +85 -0
  174. package/src/ui/flow.tsx +73 -0
  175. package/src/ui/funnel.tsx +121 -0
  176. package/src/ui/gantt.tsx +443 -0
  177. package/src/ui/gauges.tsx +135 -0
  178. package/src/ui/glossary.tsx +29 -0
  179. package/src/ui/graph-layout.ts +149 -0
  180. package/src/ui/graph-specs.tsx +102 -0
  181. package/src/ui/graph.tsx +278 -0
  182. package/src/ui/grid.tsx +119 -0
  183. package/src/ui/hypothesis.tsx +94 -0
  184. package/src/ui/icon.tsx +80 -0
  185. package/src/ui/incident.tsx +130 -0
  186. package/src/ui/index.ts +342 -0
  187. package/src/ui/ins-del.tsx +41 -0
  188. package/src/ui/json.tsx +190 -0
  189. package/src/ui/layout.ts +9 -0
  190. package/src/ui/line-chart.tsx +251 -0
  191. package/src/ui/matrix.tsx +208 -0
  192. package/src/ui/meta.tsx +73 -0
  193. package/src/ui/option.tsx +64 -0
  194. package/src/ui/owner.tsx +40 -0
  195. package/src/ui/packages.tsx +104 -0
  196. package/src/ui/pathway.tsx +96 -0
  197. package/src/ui/phase.tsx +41 -0
  198. package/src/ui/pie-chart.tsx +170 -0
  199. package/src/ui/plan.tsx +77 -0
  200. package/src/ui/pre.tsx +175 -0
  201. package/src/ui/priority.tsx +51 -0
  202. package/src/ui/props.tsx +77 -0
  203. package/src/ui/quadrant.tsx +172 -0
  204. package/src/ui/radar.tsx +200 -0
  205. package/src/ui/ref.tsx +160 -0
  206. package/src/ui/release.tsx +178 -0
  207. package/src/ui/req.tsx +42 -0
  208. package/src/ui/review.tsx +133 -0
  209. package/src/ui/risk.tsx +67 -0
  210. package/src/ui/sankey.tsx +287 -0
  211. package/src/ui/scatter.tsx +237 -0
  212. package/src/ui/schema.tsx +113 -0
  213. package/src/ui/score.tsx +105 -0
  214. package/src/ui/search.tsx +120 -0
  215. package/src/ui/series.tsx +38 -0
  216. package/src/ui/severity.tsx +69 -0
  217. package/src/ui/shadcn.tsx +216 -0
  218. package/src/ui/spark.tsx +86 -0
  219. package/src/ui/stack.tsx +57 -0
  220. package/src/ui/stats.tsx +63 -0
  221. package/src/ui/status-badge.tsx +66 -0
  222. package/src/ui/statuspage.tsx +238 -0
  223. package/src/ui/steps.tsx +74 -0
  224. package/src/ui/summary.tsx +41 -0
  225. package/src/ui/symbol-ref.tsx +73 -0
  226. package/src/ui/terminal.tsx +117 -0
  227. package/src/ui/tests.tsx +218 -0
  228. package/src/ui/timeline.tsx +63 -0
  229. package/src/ui/toc.tsx +56 -0
  230. package/src/ui/tones.ts +187 -0
  231. package/src/ui/trace.tsx +69 -0
  232. package/src/ui/tree.tsx +281 -0
  233. package/src/ui/treemap.tsx +128 -0
  234. package/src/ui/venn.tsx +258 -0
  235. package/src/ui/verdict.tsx +78 -0
  236. package/src/ui/waterfall.tsx +142 -0
@@ -0,0 +1,64 @@
1
+ import { cn } from "cn";
2
+ import { ChevronDownIcon } from "lucide-react";
3
+ import * as React from "react";
4
+
5
+ type NativeSelectProps = Omit<React.ComponentProps<"select">, "size"> & {
6
+ size?: "sm" | "default";
7
+ };
8
+
9
+ function NativeSelect({
10
+ className,
11
+ size = "default",
12
+ ...props
13
+ }: NativeSelectProps) {
14
+ return (
15
+ <div
16
+ className={cn(
17
+ "group/native-select relative w-fit has-[select:disabled]:opacity-50",
18
+ className
19
+ )}
20
+ data-slot="native-select-wrapper"
21
+ data-size={size}
22
+ >
23
+ <select
24
+ data-slot="native-select"
25
+ data-size={size}
26
+ className="border-input selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 h-8 w-full min-w-0 appearance-none rounded-lg border bg-transparent py-1 pr-8 pl-2.5 text-sm transition-colors outline-none select-none focus-visible:ring-3 disabled:pointer-events-none disabled:cursor-not-allowed aria-invalid:ring-3 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-[size=sm]:py-0.5"
27
+ {...props}
28
+ />
29
+ <ChevronDownIcon
30
+ className="text-muted-foreground pointer-events-none absolute top-1/2 right-2.5 size-4 -translate-y-1/2 select-none"
31
+ aria-hidden="true"
32
+ data-slot="native-select-icon"
33
+ />
34
+ </div>
35
+ );
36
+ }
37
+
38
+ function NativeSelectOption({
39
+ className,
40
+ ...props
41
+ }: React.ComponentProps<"option">) {
42
+ return (
43
+ <option
44
+ data-slot="native-select-option"
45
+ className={cn("bg-[Canvas] text-[CanvasText]", className)}
46
+ {...props}
47
+ />
48
+ );
49
+ }
50
+
51
+ function NativeSelectOptGroup({
52
+ className,
53
+ ...props
54
+ }: React.ComponentProps<"optgroup">) {
55
+ return (
56
+ <optgroup
57
+ data-slot="native-select-optgroup"
58
+ className={cn("bg-[Canvas] text-[CanvasText]", className)}
59
+ {...props}
60
+ />
61
+ );
62
+ }
63
+
64
+ export { NativeSelect, NativeSelectOptGroup, NativeSelectOption };
@@ -0,0 +1,170 @@
1
+ import { NavigationMenu as NavigationMenuPrimitive } from "@base-ui/react/navigation-menu";
2
+ import { cva } from "class-variance-authority";
3
+ import { cn } from "cn";
4
+ import { ChevronDownIcon } from "lucide-react";
5
+
6
+ function NavigationMenu({
7
+ align = "start",
8
+ className,
9
+ children,
10
+ ...props
11
+ }: NavigationMenuPrimitive.Root.Props &
12
+ Pick<NavigationMenuPrimitive.Positioner.Props, "align">) {
13
+ return (
14
+ <NavigationMenuPrimitive.Root
15
+ data-slot="navigation-menu"
16
+ className={cn(
17
+ "group/navigation-menu relative flex max-w-max flex-1 items-center justify-center",
18
+ className
19
+ )}
20
+ {...props}
21
+ >
22
+ {children}
23
+ <NavigationMenuPositioner align={align} />
24
+ </NavigationMenuPrimitive.Root>
25
+ );
26
+ }
27
+
28
+ function NavigationMenuList({
29
+ className,
30
+ ...props
31
+ }: React.ComponentPropsWithRef<typeof NavigationMenuPrimitive.List>) {
32
+ return (
33
+ <NavigationMenuPrimitive.List
34
+ data-slot="navigation-menu-list"
35
+ className={cn(
36
+ "group flex flex-1 list-none items-center justify-center gap-0",
37
+ className
38
+ )}
39
+ {...props}
40
+ />
41
+ );
42
+ }
43
+
44
+ function NavigationMenuItem({
45
+ className,
46
+ ...props
47
+ }: React.ComponentPropsWithRef<typeof NavigationMenuPrimitive.Item>) {
48
+ return (
49
+ <NavigationMenuPrimitive.Item
50
+ data-slot="navigation-menu-item"
51
+ className={cn("relative", className)}
52
+ {...props}
53
+ />
54
+ );
55
+ }
56
+
57
+ const navigationMenuTriggerStyle = cva(
58
+ "group/navigation-menu-trigger hover:bg-muted focus:bg-muted focus-visible:ring-ring/50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-open:bg-muted/50 data-open:hover:bg-muted data-open:focus:bg-muted inline-flex h-9 w-max items-center justify-center rounded-lg px-2.5 py-1.5 text-sm font-medium transition-all outline-none focus-visible:ring-3 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50"
59
+ );
60
+
61
+ function NavigationMenuTrigger({
62
+ className,
63
+ children,
64
+ ...props
65
+ }: NavigationMenuPrimitive.Trigger.Props) {
66
+ return (
67
+ <NavigationMenuPrimitive.Trigger
68
+ data-slot="navigation-menu-trigger"
69
+ className={cn(navigationMenuTriggerStyle(), "group", className)}
70
+ {...props}
71
+ >
72
+ {children}{" "}
73
+ <ChevronDownIcon
74
+ className="relative top-px ml-1 size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180 group-data-popup-open/navigation-menu-trigger:rotate-180"
75
+ aria-hidden="true"
76
+ />
77
+ </NavigationMenuPrimitive.Trigger>
78
+ );
79
+ }
80
+
81
+ function NavigationMenuContent({
82
+ className,
83
+ ...props
84
+ }: NavigationMenuPrimitive.Content.Props) {
85
+ return (
86
+ <NavigationMenuPrimitive.Content
87
+ data-slot="navigation-menu-content"
88
+ className={cn(
89
+ "data-ending-style:data-activation-direction=left:translate-x-[50%] data-ending-style:data-activation-direction=right:translate-x-[-50%] data-starting-style:data-activation-direction=left:translate-x-[-50%] data-starting-style:data-activation-direction=right:translate-x-[50%] group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:ring-foreground/10 data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:fade-out group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95 h-full w-auto p-1 transition-[opacity,transform,translate] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-lg group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300 data-ending-style:opacity-0 data-starting-style:opacity-0 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none",
90
+ className
91
+ )}
92
+ {...props}
93
+ />
94
+ );
95
+ }
96
+
97
+ function NavigationMenuPositioner({
98
+ className,
99
+ side = "bottom",
100
+ sideOffset = 8,
101
+ align = "start",
102
+ alignOffset = 0,
103
+ ...props
104
+ }: NavigationMenuPrimitive.Positioner.Props) {
105
+ return (
106
+ <NavigationMenuPrimitive.Portal>
107
+ <NavigationMenuPrimitive.Positioner
108
+ side={side}
109
+ sideOffset={sideOffset}
110
+ align={align}
111
+ alignOffset={alignOffset}
112
+ className={cn(
113
+ "isolate z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] data-instant:transition-none data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0",
114
+ className
115
+ )}
116
+ {...props}
117
+ >
118
+ <NavigationMenuPrimitive.Popup className="data-[ending-style]:easing-[ease] xs:w-(--popup-width) bg-popover text-popover-foreground ring-foreground/10 relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) rounded-lg shadow ring-1 transition-[opacity,transform,width,height,scale,translate] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0">
119
+ <NavigationMenuPrimitive.Viewport className="relative size-full overflow-hidden" />
120
+ </NavigationMenuPrimitive.Popup>
121
+ </NavigationMenuPrimitive.Positioner>
122
+ </NavigationMenuPrimitive.Portal>
123
+ );
124
+ }
125
+
126
+ function NavigationMenuLink({
127
+ className,
128
+ ...props
129
+ }: NavigationMenuPrimitive.Link.Props) {
130
+ return (
131
+ <NavigationMenuPrimitive.Link
132
+ data-slot="navigation-menu-link"
133
+ className={cn(
134
+ "hover:bg-muted focus:bg-muted focus-visible:ring-ring/50 data-active:bg-muted/50 data-active:hover:bg-muted data-active:focus:bg-muted flex items-center gap-2 rounded-lg p-2 text-sm transition-all outline-none focus-visible:ring-3 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-md [&_svg:not([class*='size-'])]:size-4",
135
+ className
136
+ )}
137
+ {...props}
138
+ />
139
+ );
140
+ }
141
+
142
+ function NavigationMenuIndicator({
143
+ className,
144
+ ...props
145
+ }: React.ComponentPropsWithRef<typeof NavigationMenuPrimitive.Icon>) {
146
+ return (
147
+ <NavigationMenuPrimitive.Icon
148
+ data-slot="navigation-menu-indicator"
149
+ className={cn(
150
+ "data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:animate-in data-[state=visible]:fade-in top-full z-1 flex h-1.5 items-end justify-center overflow-hidden",
151
+ className
152
+ )}
153
+ {...props}
154
+ >
155
+ <div className="bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md" />
156
+ </NavigationMenuPrimitive.Icon>
157
+ );
158
+ }
159
+
160
+ export {
161
+ NavigationMenu,
162
+ NavigationMenuContent,
163
+ NavigationMenuIndicator,
164
+ NavigationMenuItem,
165
+ NavigationMenuLink,
166
+ NavigationMenuList,
167
+ NavigationMenuTrigger,
168
+ navigationMenuTriggerStyle,
169
+ NavigationMenuPositioner,
170
+ };
@@ -0,0 +1,133 @@
1
+ import { cn } from "cn";
2
+ import {
3
+ ChevronLeftIcon,
4
+ ChevronRightIcon,
5
+ MoreHorizontalIcon,
6
+ } from "lucide-react";
7
+ import * as React from "react";
8
+
9
+ import { Button } from "./button.js";
10
+
11
+ function Pagination({ className, ...props }: React.ComponentProps<"nav">) {
12
+ return (
13
+ <nav
14
+ role="navigation"
15
+ aria-label="pagination"
16
+ data-slot="pagination"
17
+ className={cn("mx-auto flex w-full justify-center", className)}
18
+ {...props}
19
+ />
20
+ );
21
+ }
22
+
23
+ function PaginationContent({
24
+ className,
25
+ ...props
26
+ }: React.ComponentProps<"ul">) {
27
+ return (
28
+ <ul
29
+ data-slot="pagination-content"
30
+ className={cn("flex items-center gap-0.5", className)}
31
+ {...props}
32
+ />
33
+ );
34
+ }
35
+
36
+ function PaginationItem({ ...props }: React.ComponentProps<"li">) {
37
+ return <li data-slot="pagination-item" {...props} />;
38
+ }
39
+
40
+ type PaginationLinkProps = {
41
+ isActive?: boolean;
42
+ } & Pick<React.ComponentProps<typeof Button>, "size"> &
43
+ React.ComponentProps<"a">;
44
+
45
+ function PaginationLink({
46
+ className,
47
+ isActive,
48
+ size = "icon",
49
+ ...props
50
+ }: PaginationLinkProps) {
51
+ return (
52
+ <Button
53
+ variant={isActive ? "outline" : "ghost"}
54
+ size={size}
55
+ className={cn(className)}
56
+ nativeButton={false}
57
+ render={
58
+ <a
59
+ aria-current={isActive ? "page" : undefined}
60
+ data-slot="pagination-link"
61
+ data-active={isActive}
62
+ {...props}
63
+ />
64
+ }
65
+ />
66
+ );
67
+ }
68
+
69
+ function PaginationPrevious({
70
+ className,
71
+ text = "Previous",
72
+ ...props
73
+ }: React.ComponentProps<typeof PaginationLink> & { text?: string }) {
74
+ return (
75
+ <PaginationLink
76
+ aria-label="Go to previous page"
77
+ size="default"
78
+ className={cn("pl-1.5!", className)}
79
+ {...props}
80
+ >
81
+ <ChevronLeftIcon data-icon="inline-start" />
82
+ <span className="hidden sm:block">{text}</span>
83
+ </PaginationLink>
84
+ );
85
+ }
86
+
87
+ function PaginationNext({
88
+ className,
89
+ text = "Next",
90
+ ...props
91
+ }: React.ComponentProps<typeof PaginationLink> & { text?: string }) {
92
+ return (
93
+ <PaginationLink
94
+ aria-label="Go to next page"
95
+ size="default"
96
+ className={cn("pr-1.5!", className)}
97
+ {...props}
98
+ >
99
+ <span className="hidden sm:block">{text}</span>
100
+ <ChevronRightIcon data-icon="inline-end" />
101
+ </PaginationLink>
102
+ );
103
+ }
104
+
105
+ function PaginationEllipsis({
106
+ className,
107
+ ...props
108
+ }: React.ComponentProps<"span">) {
109
+ return (
110
+ <span
111
+ aria-hidden
112
+ data-slot="pagination-ellipsis"
113
+ className={cn(
114
+ "flex size-8 items-center justify-center [&_svg:not([class*='size-'])]:size-4",
115
+ className
116
+ )}
117
+ {...props}
118
+ >
119
+ <MoreHorizontalIcon />
120
+ <span className="sr-only">More pages</span>
121
+ </span>
122
+ );
123
+ }
124
+
125
+ export {
126
+ Pagination,
127
+ PaginationContent,
128
+ PaginationEllipsis,
129
+ PaginationItem,
130
+ PaginationLink,
131
+ PaginationNext,
132
+ PaginationPrevious,
133
+ };
@@ -0,0 +1,87 @@
1
+ import { Popover as PopoverPrimitive } from "@base-ui/react/popover";
2
+ import { cn } from "cn";
3
+ import * as React from "react";
4
+
5
+ function Popover({ ...props }: PopoverPrimitive.Root.Props) {
6
+ return <PopoverPrimitive.Root data-slot="popover" {...props} />;
7
+ }
8
+
9
+ function PopoverTrigger({ ...props }: PopoverPrimitive.Trigger.Props) {
10
+ return <PopoverPrimitive.Trigger data-slot="popover-trigger" {...props} />;
11
+ }
12
+
13
+ function PopoverContent({
14
+ className,
15
+ align = "center",
16
+ alignOffset = 0,
17
+ side = "bottom",
18
+ sideOffset = 4,
19
+ ...props
20
+ }: PopoverPrimitive.Popup.Props &
21
+ Pick<
22
+ PopoverPrimitive.Positioner.Props,
23
+ "align" | "alignOffset" | "side" | "sideOffset"
24
+ >) {
25
+ return (
26
+ <PopoverPrimitive.Portal>
27
+ <PopoverPrimitive.Positioner
28
+ align={align}
29
+ alignOffset={alignOffset}
30
+ side={side}
31
+ sideOffset={sideOffset}
32
+ className="isolate z-50"
33
+ >
34
+ <PopoverPrimitive.Popup
35
+ data-slot="popover-content"
36
+ className={cn(
37
+ "bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 z-50 flex w-72 origin-(--transform-origin) flex-col gap-2.5 rounded-lg p-2.5 text-sm shadow-md ring-1 outline-hidden duration-100",
38
+ className
39
+ )}
40
+ {...props}
41
+ />
42
+ </PopoverPrimitive.Positioner>
43
+ </PopoverPrimitive.Portal>
44
+ );
45
+ }
46
+
47
+ function PopoverHeader({ className, ...props }: React.ComponentProps<"div">) {
48
+ return (
49
+ <div
50
+ data-slot="popover-header"
51
+ className={cn("flex flex-col gap-0.5 text-sm", className)}
52
+ {...props}
53
+ />
54
+ );
55
+ }
56
+
57
+ function PopoverTitle({ className, ...props }: PopoverPrimitive.Title.Props) {
58
+ return (
59
+ <PopoverPrimitive.Title
60
+ data-slot="popover-title"
61
+ className={cn("font-medium", className)}
62
+ {...props}
63
+ />
64
+ );
65
+ }
66
+
67
+ function PopoverDescription({
68
+ className,
69
+ ...props
70
+ }: PopoverPrimitive.Description.Props) {
71
+ return (
72
+ <PopoverPrimitive.Description
73
+ data-slot="popover-description"
74
+ className={cn("text-muted-foreground", className)}
75
+ {...props}
76
+ />
77
+ );
78
+ }
79
+
80
+ export {
81
+ Popover,
82
+ PopoverContent,
83
+ PopoverDescription,
84
+ PopoverHeader,
85
+ PopoverTitle,
86
+ PopoverTrigger,
87
+ };
@@ -0,0 +1,82 @@
1
+ "use client";
2
+
3
+ import { Progress as ProgressPrimitive } from "@base-ui/react/progress";
4
+ import { cn } from "cn";
5
+
6
+ function Progress({
7
+ className,
8
+ children,
9
+ value,
10
+ ...props
11
+ }: ProgressPrimitive.Root.Props) {
12
+ return (
13
+ <ProgressPrimitive.Root
14
+ value={value}
15
+ data-slot="progress"
16
+ className={cn("flex flex-wrap gap-3", className)}
17
+ {...props}
18
+ >
19
+ {children}
20
+ <ProgressTrack>
21
+ <ProgressIndicator />
22
+ </ProgressTrack>
23
+ </ProgressPrimitive.Root>
24
+ );
25
+ }
26
+
27
+ function ProgressTrack({ className, ...props }: ProgressPrimitive.Track.Props) {
28
+ return (
29
+ <ProgressPrimitive.Track
30
+ className={cn(
31
+ "bg-muted relative flex h-1 w-full items-center overflow-x-hidden rounded-full",
32
+ className
33
+ )}
34
+ data-slot="progress-track"
35
+ {...props}
36
+ />
37
+ );
38
+ }
39
+
40
+ function ProgressIndicator({
41
+ className,
42
+ ...props
43
+ }: ProgressPrimitive.Indicator.Props) {
44
+ return (
45
+ <ProgressPrimitive.Indicator
46
+ data-slot="progress-indicator"
47
+ className={cn("bg-primary h-full transition-all", className)}
48
+ {...props}
49
+ />
50
+ );
51
+ }
52
+
53
+ function ProgressLabel({ className, ...props }: ProgressPrimitive.Label.Props) {
54
+ return (
55
+ <ProgressPrimitive.Label
56
+ className={cn("text-sm font-medium", className)}
57
+ data-slot="progress-label"
58
+ {...props}
59
+ />
60
+ );
61
+ }
62
+
63
+ function ProgressValue({ className, ...props }: ProgressPrimitive.Value.Props) {
64
+ return (
65
+ <ProgressPrimitive.Value
66
+ className={cn(
67
+ "text-muted-foreground ml-auto text-sm tabular-nums",
68
+ className
69
+ )}
70
+ data-slot="progress-value"
71
+ {...props}
72
+ />
73
+ );
74
+ }
75
+
76
+ export {
77
+ Progress,
78
+ ProgressTrack,
79
+ ProgressIndicator,
80
+ ProgressLabel,
81
+ ProgressValue,
82
+ };