@badnpm/ui 0.0.0-stage → 0.0.1

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 (310) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +193 -2
  3. package/dist/cjs/components/accordion.cjs +24 -0
  4. package/dist/cjs/components/alert-dialog.cjs +56 -0
  5. package/dist/cjs/components/alert.cjs +34 -0
  6. package/dist/cjs/components/aspect-ratio.cjs +12 -0
  7. package/dist/cjs/components/attachment.cjs +80 -0
  8. package/dist/cjs/components/avatar.cjs +31 -0
  9. package/dist/cjs/components/badge.cjs +38 -0
  10. package/dist/cjs/components/breadcrumb.cjs +46 -0
  11. package/dist/cjs/components/bubble.cjs +66 -0
  12. package/dist/cjs/components/button-group.cjs +43 -0
  13. package/dist/cjs/components/button.cjs +41 -0
  14. package/dist/cjs/components/calendar.cjs +100 -0
  15. package/dist/cjs/components/card.cjs +34 -0
  16. package/dist/cjs/components/carousel.cjs +113 -0
  17. package/dist/cjs/components/chart.cjs +160 -0
  18. package/dist/cjs/components/checkbox.cjs +13 -0
  19. package/dist/cjs/components/code-block.cjs +110 -0
  20. package/dist/cjs/components/collapsible.cjs +18 -0
  21. package/dist/cjs/components/combobox.cjs +96 -0
  22. package/dist/cjs/components/command.cjs +46 -0
  23. package/dist/cjs/components/context-menu.cjs +69 -0
  24. package/dist/cjs/components/dialog.cjs +50 -0
  25. package/dist/cjs/components/drawer.cjs +108 -0
  26. package/dist/cjs/components/dropdown-menu.cjs +68 -0
  27. package/dist/cjs/components/empty.cjs +42 -0
  28. package/dist/cjs/components/field.cjs +80 -0
  29. package/dist/cjs/components/hover-card.cjs +20 -0
  30. package/dist/cjs/components/input-group.cjs +66 -0
  31. package/dist/cjs/components/input-otp.cjs +46 -0
  32. package/dist/cjs/components/input.cjs +11 -0
  33. package/dist/cjs/components/item.cjs +91 -0
  34. package/dist/cjs/components/kbd.cjs +14 -0
  35. package/dist/cjs/components/label.cjs +11 -0
  36. package/dist/cjs/components/marker.cjs +41 -0
  37. package/dist/cjs/components/menubar.cjs +75 -0
  38. package/dist/cjs/components/message-scroller.cjs +45 -0
  39. package/dist/cjs/components/message.cjs +30 -0
  40. package/dist/cjs/components/native-select.cjs +19 -0
  41. package/dist/cjs/components/navigation-menu.cjs +43 -0
  42. package/dist/cjs/components/pagination.cjs +36 -0
  43. package/dist/cjs/components/popover.cjs +31 -0
  44. package/dist/cjs/components/progress.cjs +28 -0
  45. package/dist/cjs/components/questionnaire.cjs +70 -0
  46. package/dist/cjs/components/radio-group.cjs +16 -0
  47. package/dist/cjs/components/resizable.cjs +39 -0
  48. package/dist/cjs/components/scroll-area.cjs +15 -0
  49. package/dist/cjs/components/select.cjs +47 -0
  50. package/dist/cjs/components/separator.cjs +11 -0
  51. package/dist/cjs/components/sheet.cjs +47 -0
  52. package/dist/cjs/components/sidebar.cjs +301 -0
  53. package/dist/cjs/components/skeleton.cjs +10 -0
  54. package/dist/cjs/components/slider.cjs +16 -0
  55. package/dist/cjs/components/spinner.cjs +11 -0
  56. package/dist/cjs/components/switch.cjs +12 -0
  57. package/dist/cjs/components/table.cjs +38 -0
  58. package/dist/cjs/components/tabs.cjs +37 -0
  59. package/dist/cjs/components/textarea.cjs +10 -0
  60. package/dist/cjs/components/theme-toggle.cjs +19 -0
  61. package/dist/cjs/components/toast.cjs +82 -0
  62. package/dist/cjs/components/toggle-group.cjs +47 -0
  63. package/dist/cjs/components/toggle.cjs +30 -0
  64. package/dist/cjs/components/tooltip.cjs +24 -0
  65. package/dist/cjs/components/trace.cjs +40 -0
  66. package/dist/cjs/hooks/use-highlighted-code.cjs +73 -0
  67. package/dist/cjs/hooks/use-hydrated.cjs +15 -0
  68. package/dist/cjs/hooks/use-mobile.cjs +36 -0
  69. package/dist/cjs/index.cjs +497 -0
  70. package/dist/cjs/lib/highlighter.cjs +96 -0
  71. package/dist/cjs/lib/preference.cjs +40 -0
  72. package/dist/cjs/providers/preference-provider.cjs +127 -0
  73. package/dist/cjs/providers/theme-provider.cjs +181 -0
  74. package/dist/cjs/types/components/accordion.d.ts +9 -0
  75. package/dist/cjs/types/components/alert-dialog.d.ts +20 -0
  76. package/dist/cjs/types/components/alert.d.ts +13 -0
  77. package/dist/cjs/types/components/aspect-ratio.d.ts +7 -0
  78. package/dist/cjs/types/components/attachment.d.ts +26 -0
  79. package/dist/cjs/types/components/avatar.d.ts +13 -0
  80. package/dist/cjs/types/components/badge.d.ts +11 -0
  81. package/dist/cjs/types/components/breadcrumb.d.ts +12 -0
  82. package/dist/cjs/types/components/bubble.d.ts +19 -0
  83. package/dist/cjs/types/components/button-group.d.ts +14 -0
  84. package/dist/cjs/types/components/button.d.ts +12 -0
  85. package/dist/cjs/types/components/calendar.d.ts +12 -0
  86. package/dist/cjs/types/components/card.d.ts +13 -0
  87. package/dist/cjs/types/components/carousel.d.ts +31 -0
  88. package/dist/cjs/types/components/chart.d.ts +47 -0
  89. package/dist/cjs/types/components/checkbox.d.ts +6 -0
  90. package/dist/cjs/types/components/code-block.d.ts +29 -0
  91. package/dist/cjs/types/components/collapsible.d.ts +8 -0
  92. package/dist/cjs/types/components/combobox.d.ts +26 -0
  93. package/dist/cjs/types/components/command.d.ts +21 -0
  94. package/dist/cjs/types/components/context-menu.d.ts +31 -0
  95. package/dist/cjs/types/components/dialog.d.ts +19 -0
  96. package/dist/cjs/types/components/direction.d.ts +1 -0
  97. package/dist/cjs/types/components/drawer.d.ts +18 -0
  98. package/dist/cjs/types/components/dropdown-menu.d.ts +31 -0
  99. package/dist/cjs/types/components/empty.d.ts +15 -0
  100. package/dist/cjs/types/components/field.d.ts +28 -0
  101. package/dist/cjs/types/components/hover-card.d.ts +8 -0
  102. package/dist/cjs/types/components/index.d.ts +65 -0
  103. package/dist/cjs/types/components/input-group.d.ts +21 -0
  104. package/dist/cjs/types/components/input-otp.d.ts +13 -0
  105. package/dist/cjs/types/components/input.d.ts +5 -0
  106. package/dist/cjs/types/components/item.d.ts +25 -0
  107. package/dist/cjs/types/components/kbd.d.ts +6 -0
  108. package/dist/cjs/types/components/label.d.ts +5 -0
  109. package/dist/cjs/types/components/marker.d.ts +13 -0
  110. package/dist/cjs/types/components/menubar.d.ts +31 -0
  111. package/dist/cjs/types/components/message-scroller.d.ts +13 -0
  112. package/dist/cjs/types/components/message.d.ts +12 -0
  113. package/dist/cjs/types/components/native-select.d.ts +10 -0
  114. package/dist/cjs/types/components/navigation-menu.d.ts +15 -0
  115. package/dist/cjs/types/components/pagination.d.ts +19 -0
  116. package/dist/cjs/types/components/popover.d.ts +11 -0
  117. package/dist/cjs/types/components/progress.d.ts +10 -0
  118. package/dist/cjs/types/components/questionnaire.d.ts +21 -0
  119. package/dist/cjs/types/components/radio-group.d.ts +8 -0
  120. package/dist/cjs/types/components/resizable.d.ts +10 -0
  121. package/dist/cjs/types/components/scroll-area.d.ts +7 -0
  122. package/dist/cjs/types/components/select.d.ts +17 -0
  123. package/dist/cjs/types/components/separator.d.ts +6 -0
  124. package/dist/cjs/types/components/sheet.d.ts +16 -0
  125. package/dist/cjs/types/components/sidebar.d.ts +66 -0
  126. package/dist/cjs/types/components/skeleton.d.ts +5 -0
  127. package/dist/cjs/types/components/slider.d.ts +6 -0
  128. package/dist/cjs/types/components/spinner.d.ts +5 -0
  129. package/dist/cjs/types/components/switch.d.ts +8 -0
  130. package/dist/cjs/types/components/table.d.ts +12 -0
  131. package/dist/cjs/types/components/tabs.d.ts +14 -0
  132. package/dist/cjs/types/components/textarea.d.ts +5 -0
  133. package/dist/cjs/types/components/theme-toggle.d.ts +14 -0
  134. package/dist/cjs/types/components/toast.d.ts +19 -0
  135. package/dist/cjs/types/components/toggle-group.d.ts +13 -0
  136. package/dist/cjs/types/components/toggle.d.ts +12 -0
  137. package/dist/cjs/types/components/tooltip.d.ts +9 -0
  138. package/dist/cjs/types/components/trace.d.ts +20 -0
  139. package/dist/cjs/types/hooks/index.d.ts +3 -0
  140. package/dist/cjs/types/hooks/use-highlighted-code.d.ts +3 -0
  141. package/dist/cjs/types/hooks/use-hydrated.d.ts +4 -0
  142. package/dist/cjs/types/hooks/use-mobile.d.ts +3 -0
  143. package/dist/cjs/types/index.d.ts +73 -0
  144. package/dist/cjs/types/lib/highlighter.d.ts +11 -0
  145. package/dist/cjs/types/lib/index.d.ts +3 -0
  146. package/dist/cjs/types/lib/preference.d.ts +85 -0
  147. package/dist/cjs/types/lib/utils.d.ts +1 -0
  148. package/dist/cjs/types/package.json +1 -0
  149. package/dist/cjs/types/providers/index.d.ts +2 -0
  150. package/dist/cjs/types/providers/preference-provider.d.ts +20 -0
  151. package/dist/cjs/types/providers/theme-provider.d.ts +25 -0
  152. package/dist/esm/components/accordion.js +19 -0
  153. package/dist/esm/components/alert-dialog.js +43 -0
  154. package/dist/esm/components/alert.js +29 -0
  155. package/dist/esm/components/aspect-ratio.js +10 -0
  156. package/dist/esm/components/attachment.js +70 -0
  157. package/dist/esm/components/avatar.js +24 -0
  158. package/dist/esm/components/badge.js +35 -0
  159. package/dist/esm/components/breadcrumb.js +38 -0
  160. package/dist/esm/components/bubble.js +61 -0
  161. package/dist/esm/components/button-group.js +38 -0
  162. package/dist/esm/components/button.js +38 -0
  163. package/dist/esm/components/calendar.js +78 -0
  164. package/dist/esm/components/card.js +26 -0
  165. package/dist/esm/components/carousel.js +87 -0
  166. package/dist/esm/components/chart.js +133 -0
  167. package/dist/esm/components/checkbox.js +11 -0
  168. package/dist/esm/components/code-block.js +82 -0
  169. package/dist/esm/components/collapsible.js +14 -0
  170. package/dist/esm/components/combobox.js +60 -0
  171. package/dist/esm/components/command.js +36 -0
  172. package/dist/esm/components/context-menu.js +53 -0
  173. package/dist/esm/components/dialog.js +39 -0
  174. package/dist/esm/components/drawer.js +77 -0
  175. package/dist/esm/components/dropdown-menu.js +52 -0
  176. package/dist/esm/components/empty.js +35 -0
  177. package/dist/esm/components/field.js +69 -0
  178. package/dist/esm/components/hover-card.js +16 -0
  179. package/dist/esm/components/input-group.js +59 -0
  180. package/dist/esm/components/input-otp.js +22 -0
  181. package/dist/esm/components/input.js +9 -0
  182. package/dist/esm/components/item.js +80 -0
  183. package/dist/esm/components/kbd.js +11 -0
  184. package/dist/esm/components/label.js +9 -0
  185. package/dist/esm/components/marker.js +36 -0
  186. package/dist/esm/components/menubar.js +58 -0
  187. package/dist/esm/components/message-scroller.js +27 -0
  188. package/dist/esm/components/message.js +23 -0
  189. package/dist/esm/components/native-select.js +15 -0
  190. package/dist/esm/components/navigation-menu.js +33 -0
  191. package/dist/esm/components/pagination.js +28 -0
  192. package/dist/esm/components/popover.js +24 -0
  193. package/dist/esm/components/progress.js +22 -0
  194. package/dist/esm/components/questionnaire.js +54 -0
  195. package/dist/esm/components/radio-group.js +13 -0
  196. package/dist/esm/components/resizable.js +16 -0
  197. package/dist/esm/components/scroll-area.js +12 -0
  198. package/dist/esm/components/select.js +36 -0
  199. package/dist/esm/components/separator.js +9 -0
  200. package/dist/esm/components/sheet.js +38 -0
  201. package/dist/esm/components/sidebar.js +257 -0
  202. package/dist/esm/components/skeleton.js +8 -0
  203. package/dist/esm/components/slider.js +14 -0
  204. package/dist/esm/components/spinner.js +9 -0
  205. package/dist/esm/components/switch.js +10 -0
  206. package/dist/esm/components/table.js +29 -0
  207. package/dist/esm/components/tabs.js +31 -0
  208. package/dist/esm/components/textarea.js +8 -0
  209. package/dist/esm/components/theme-toggle.js +17 -0
  210. package/dist/esm/components/toast.js +68 -0
  211. package/dist/esm/components/toggle-group.js +25 -0
  212. package/dist/esm/components/toggle.js +27 -0
  213. package/dist/esm/components/tooltip.js +19 -0
  214. package/dist/esm/components/trace.js +31 -0
  215. package/dist/esm/hooks/use-highlighted-code.js +52 -0
  216. package/dist/esm/hooks/use-hydrated.js +13 -0
  217. package/dist/esm/hooks/use-mobile.js +15 -0
  218. package/dist/esm/index.js +73 -0
  219. package/dist/esm/lib/highlighter.js +93 -0
  220. package/dist/esm/lib/preference.js +35 -0
  221. package/dist/esm/providers/preference-provider.js +124 -0
  222. package/dist/esm/providers/theme-provider.js +178 -0
  223. package/dist/styles/custom.css +2 -0
  224. package/dist/styles/font/LICENSE +93 -0
  225. package/dist/styles/font/files/11944884.woff2 +0 -0
  226. package/dist/styles/font/files/3f081d19.woff2 +0 -0
  227. package/dist/styles/font/files/aa4aa22f.woff2 +0 -0
  228. package/dist/styles/font/files/ba1a9b92.woff2 +0 -0
  229. package/dist/styles/font/files/eadd8e6c.woff2 +0 -0
  230. package/dist/styles/font/geist.css +2 -0
  231. package/dist/styles/index.css +2 -0
  232. package/dist/types/components/accordion.d.ts +9 -0
  233. package/dist/types/components/alert-dialog.d.ts +20 -0
  234. package/dist/types/components/alert.d.ts +13 -0
  235. package/dist/types/components/aspect-ratio.d.ts +7 -0
  236. package/dist/types/components/attachment.d.ts +26 -0
  237. package/dist/types/components/avatar.d.ts +13 -0
  238. package/dist/types/components/badge.d.ts +11 -0
  239. package/dist/types/components/breadcrumb.d.ts +12 -0
  240. package/dist/types/components/bubble.d.ts +19 -0
  241. package/dist/types/components/button-group.d.ts +14 -0
  242. package/dist/types/components/button.d.ts +12 -0
  243. package/dist/types/components/calendar.d.ts +12 -0
  244. package/dist/types/components/card.d.ts +13 -0
  245. package/dist/types/components/carousel.d.ts +31 -0
  246. package/dist/types/components/chart.d.ts +47 -0
  247. package/dist/types/components/checkbox.d.ts +6 -0
  248. package/dist/types/components/code-block.d.ts +29 -0
  249. package/dist/types/components/collapsible.d.ts +8 -0
  250. package/dist/types/components/combobox.d.ts +26 -0
  251. package/dist/types/components/command.d.ts +21 -0
  252. package/dist/types/components/context-menu.d.ts +31 -0
  253. package/dist/types/components/dialog.d.ts +19 -0
  254. package/dist/types/components/direction.d.ts +1 -0
  255. package/dist/types/components/drawer.d.ts +18 -0
  256. package/dist/types/components/dropdown-menu.d.ts +31 -0
  257. package/dist/types/components/empty.d.ts +15 -0
  258. package/dist/types/components/field.d.ts +28 -0
  259. package/dist/types/components/hover-card.d.ts +8 -0
  260. package/dist/types/components/index.d.ts +65 -0
  261. package/dist/types/components/input-group.d.ts +21 -0
  262. package/dist/types/components/input-otp.d.ts +13 -0
  263. package/dist/types/components/input.d.ts +5 -0
  264. package/dist/types/components/item.d.ts +25 -0
  265. package/dist/types/components/kbd.d.ts +6 -0
  266. package/dist/types/components/label.d.ts +5 -0
  267. package/dist/types/components/marker.d.ts +13 -0
  268. package/dist/types/components/menubar.d.ts +31 -0
  269. package/dist/types/components/message-scroller.d.ts +13 -0
  270. package/dist/types/components/message.d.ts +12 -0
  271. package/dist/types/components/native-select.d.ts +10 -0
  272. package/dist/types/components/navigation-menu.d.ts +15 -0
  273. package/dist/types/components/pagination.d.ts +19 -0
  274. package/dist/types/components/popover.d.ts +11 -0
  275. package/dist/types/components/progress.d.ts +10 -0
  276. package/dist/types/components/questionnaire.d.ts +21 -0
  277. package/dist/types/components/radio-group.d.ts +8 -0
  278. package/dist/types/components/resizable.d.ts +10 -0
  279. package/dist/types/components/scroll-area.d.ts +7 -0
  280. package/dist/types/components/select.d.ts +17 -0
  281. package/dist/types/components/separator.d.ts +6 -0
  282. package/dist/types/components/sheet.d.ts +16 -0
  283. package/dist/types/components/sidebar.d.ts +66 -0
  284. package/dist/types/components/skeleton.d.ts +5 -0
  285. package/dist/types/components/slider.d.ts +6 -0
  286. package/dist/types/components/spinner.d.ts +5 -0
  287. package/dist/types/components/switch.d.ts +8 -0
  288. package/dist/types/components/table.d.ts +12 -0
  289. package/dist/types/components/tabs.d.ts +14 -0
  290. package/dist/types/components/textarea.d.ts +5 -0
  291. package/dist/types/components/theme-toggle.d.ts +14 -0
  292. package/dist/types/components/toast.d.ts +19 -0
  293. package/dist/types/components/toggle-group.d.ts +13 -0
  294. package/dist/types/components/toggle.d.ts +12 -0
  295. package/dist/types/components/tooltip.d.ts +9 -0
  296. package/dist/types/components/trace.d.ts +20 -0
  297. package/dist/types/hooks/index.d.ts +3 -0
  298. package/dist/types/hooks/use-highlighted-code.d.ts +3 -0
  299. package/dist/types/hooks/use-hydrated.d.ts +4 -0
  300. package/dist/types/hooks/use-mobile.d.ts +3 -0
  301. package/dist/types/index.d.ts +73 -0
  302. package/dist/types/lib/highlighter.d.ts +11 -0
  303. package/dist/types/lib/index.d.ts +3 -0
  304. package/dist/types/lib/preference.d.ts +85 -0
  305. package/dist/types/lib/utils.d.ts +1 -0
  306. package/dist/types/providers/index.d.ts +2 -0
  307. package/dist/types/providers/preference-provider.d.ts +20 -0
  308. package/dist/types/providers/theme-provider.d.ts +25 -0
  309. package/dist/umd/index.js +86818 -0
  310. package/package.json +116 -4
@@ -0,0 +1,127 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var React = require('react');
6
+ var useHydrated = require('../hooks/use-hydrated.cjs');
7
+ var preference = require('../lib/preference.cjs');
8
+
9
+ const PreferenceContext = React.createContext(undefined);
10
+ // 校验选项标识,并将 unknown 收窄为对应的字符串联合类型。
11
+ function isOption(options, value) {
12
+ return options.some((option) => option.value === value);
13
+ }
14
+ // 存储内容不可信:逐项校验,单个字段无效时不影响其他有效偏好。
15
+ function normalizePreference(value, fallback) {
16
+ const candidate = typeof value === 'object' && value !== null ? value : {};
17
+ return {
18
+ baseColor: isOption(preference.BASE_COLORS, candidate.baseColor) ? candidate.baseColor : fallback.baseColor,
19
+ theme: isOption(preference.COLOR_THEMES, candidate.theme) ? candidate.theme : fallback.theme,
20
+ // 预设用于展示,不限制自定义圆角;只接受有限的非负数。
21
+ radius: typeof candidate.radius === 'number' && Number.isFinite(candidate.radius) && candidate.radius >= 0
22
+ ? candidate.radius
23
+ : fallback.radius,
24
+ };
25
+ }
26
+ // 解析并校验存储字符串;没有记录或 JSON 损坏时回退到默认值。
27
+ function parsePreference(value, fallback) {
28
+ try {
29
+ return normalizePreference(value === null ? null : JSON.parse(value), fallback);
30
+ }
31
+ catch {
32
+ return fallback;
33
+ }
34
+ }
35
+ // 将存储访问与 JSON 解析分开处理,兼容浏览器禁止存储的情况。
36
+ function readPreference(storageKey, fallback) {
37
+ try {
38
+ return parsePreference(localStorage.getItem(storageKey), fallback);
39
+ }
40
+ catch {
41
+ // 存储不可用时,偏好仍可在当前页面内使用。
42
+ return fallback;
43
+ }
44
+ }
45
+ // 比较字段值,避免相同偏好触发重复渲染。
46
+ function isSamePreference(current, next) {
47
+ return current.baseColor === next.baseColor && current.theme === next.theme && current.radius === next.radius;
48
+ }
49
+ // 管理基础色、主题配色和圆角;深浅模式继续由 ThemeProvider 管理。
50
+ function PreferenceProvider({ children, defaultPreference, storageKey = 'bad-ui:preference', }) {
51
+ // 先补齐并校验调用方传入的默认值,再作为存储读取和重置时的回退值。
52
+ const { baseColor, theme, radius } = normalizePreference(defaultPreference, preference.DEFAULT_PREFERENCE);
53
+ const defaults = React.useMemo(() => ({ baseColor, theme, radius }), [baseColor, theme, radius]);
54
+ const hydrated = useHydrated.useHydrated();
55
+ const [storedPreference, setPreference] = React.useState(() => readPreference(storageKey, defaults));
56
+ // 保存最新偏好,保证同一批次连续修改不同字段时保留先前修改。
57
+ const preferenceRef = React.useRef(storedPreference);
58
+ // 服务端及客户端水合首帧使用相同默认值,水合后才向子组件公开本地偏好。
59
+ const preference$1 = hydrated ? storedPreference : defaults;
60
+ // 主动修改时才写入存储;跨标签页同步仅更新内存,避免删除后又写回默认值。
61
+ const updatePreference = React.useCallback((patch) => {
62
+ const current = preferenceRef.current;
63
+ const next = normalizePreference({ ...current, ...patch }, current);
64
+ if (isSamePreference(current, next))
65
+ return;
66
+ preferenceRef.current = next;
67
+ setPreference(next);
68
+ try {
69
+ localStorage.setItem(storageKey, JSON.stringify(next));
70
+ }
71
+ catch {
72
+ // 写入失败不阻断页面偏好更新。
73
+ }
74
+ }, [storageKey]);
75
+ const setBaseColor = React.useCallback((nextBaseColor) => {
76
+ updatePreference({ baseColor: nextBaseColor });
77
+ }, [updatePreference]);
78
+ // 此处 theme 是配色方案(如 blue),并非 light / dark / system。
79
+ const setTheme = React.useCallback((nextTheme) => {
80
+ updatePreference({ theme: nextTheme });
81
+ }, [updatePreference]);
82
+ // 圆角以 rem 保存,转换为 CSS 长度的工作由下方 effect 统一完成。
83
+ const setRadius = React.useCallback((nextRadius) => {
84
+ updatePreference({ radius: nextRadius });
85
+ }, [updatePreference]);
86
+ // 配色通过独立属性组合;圆角以内联变量覆盖主题默认值,不改动深浅模式类名。
87
+ React.useLayoutEffect(() => {
88
+ if (!hydrated)
89
+ return;
90
+ const root = document.documentElement;
91
+ // 在浏览器绘制前更新属性,分别匹配 base-color 和 themes 中的选择器。
92
+ root.dataset.baseColor = preference$1.baseColor;
93
+ root.dataset.theme = preference$1.theme;
94
+ root.style.setProperty('--radius', `${preference$1.radius}rem`);
95
+ }, [preference$1, hydrated]);
96
+ React.useEffect(() => {
97
+ // 接收其他标签页的变更;删除或清空存储时恢复默认偏好。
98
+ function handleStorageChange(event) {
99
+ // 只处理 localStorage 中当前键的变化;clear() 的事件 key 为 null。
100
+ if (event.storageArea !== localStorage || (event.key !== null && event.key !== storageKey)) {
101
+ return;
102
+ }
103
+ const next = parsePreference(event.newValue, defaults);
104
+ if (isSamePreference(preferenceRef.current, next))
105
+ return;
106
+ preferenceRef.current = next;
107
+ setPreference(next);
108
+ }
109
+ window.addEventListener('storage', handleStorageChange);
110
+ // 卸载或依赖变化时注销监听,避免重复订阅。
111
+ return () => window.removeEventListener('storage', handleStorageChange);
112
+ }, [defaults, storageKey]);
113
+ // 保持 Context 值的引用稳定,避免父组件重渲染引起无关的订阅更新。
114
+ const value = React.useMemo(() => ({ ...preference$1, setBaseColor, setTheme, setRadius }), [preference$1, setBaseColor, setTheme, setRadius]);
115
+ return jsxRuntime.jsx(PreferenceContext.Provider, { value: value, children: children });
116
+ }
117
+ // 统一读取偏好上下文,在缺少 Provider 时给出明确的使用错误。
118
+ function usePreference() {
119
+ const context = React.useContext(PreferenceContext);
120
+ if (context === undefined) {
121
+ throw new Error('usePreference must be used within a PreferenceProvider');
122
+ }
123
+ return context;
124
+ }
125
+
126
+ exports.PreferenceProvider = PreferenceProvider;
127
+ exports.usePreference = usePreference;
@@ -0,0 +1,181 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var React = require('react');
6
+ var useHydrated = require('../hooks/use-hydrated.cjs');
7
+
8
+ const COLOR_SCHEME_QUERY = '(prefers-color-scheme: dark)';
9
+ const ThemeProviderContext = React.createContext(undefined);
10
+ // 校验存储值,同时将类型收窄为合法的主题选项。
11
+ function isTheme(value) {
12
+ return value === 'dark' || value === 'light' || value === 'system';
13
+ }
14
+ // 优先读取已保存的主题;值无效或存储不可用时使用默认主题。
15
+ function readTheme(storageKey, fallback) {
16
+ try {
17
+ const value = localStorage.getItem(storageKey);
18
+ return isTheme(value) ? value : fallback;
19
+ }
20
+ catch {
21
+ // 存储不可用时回退到默认主题,不影响组件初始化。
22
+ return fallback;
23
+ }
24
+ }
25
+ // 持久化用户选择,存储失败时仍允许更新页面主题。
26
+ function persistTheme(storageKey, theme) {
27
+ try {
28
+ localStorage.setItem(storageKey, theme);
29
+ }
30
+ catch {
31
+ // 忽略存储异常,主题仍可在当前页面内切换。
32
+ }
33
+ }
34
+ // 将用户选择解析为实际配色;system 每次读取当前系统偏好。
35
+ function resolveTheme(theme) {
36
+ if (theme !== 'system') {
37
+ return theme;
38
+ }
39
+ return window.matchMedia(COLOR_SCHEME_QUERY).matches ? 'dark' : 'light';
40
+ }
41
+ // 更新根元素的主题类名,并返回清理临时样式及动画帧的函数。
42
+ function applyTheme(theme, disableTransitionOnChange) {
43
+ const root = document.documentElement;
44
+ const resolvedTheme = resolveTheme(theme);
45
+ // 主题已生效且没有冲突类名时,跳过重复的 DOM 操作。
46
+ if (root.classList.contains(resolvedTheme) && !root.classList.contains(resolvedTheme === 'dark' ? 'light' : 'dark')) {
47
+ return () => { };
48
+ }
49
+ const style = disableTransitionOnChange ? document.createElement('style') : null;
50
+ if (style) {
51
+ style.textContent = '*,*::before,*::after{transition:none!important}';
52
+ document.head.appendChild(style);
53
+ // 强制浏览器计算样式,确保禁用过渡的规则先于主题切换生效。
54
+ window.getComputedStyle(root).getPropertyValue('transition-property');
55
+ }
56
+ root.classList.remove('light', 'dark');
57
+ root.classList.add(resolvedTheme);
58
+ if (!style) {
59
+ return () => { };
60
+ }
61
+ // 在禁用过渡期间计算新主题样式,再通过两次动画帧延迟移除规则。
62
+ window.getComputedStyle(root).getPropertyValue('color');
63
+ let frame = requestAnimationFrame(() => {
64
+ frame = requestAnimationFrame(() => style.remove());
65
+ });
66
+ // 重新应用主题或卸载时,取消待执行的帧并移除临时样式。
67
+ return () => {
68
+ cancelAnimationFrame(frame);
69
+ style.remove();
70
+ };
71
+ }
72
+ // 判断事件是否来自可编辑区域,避免主题快捷键干扰输入。
73
+ function isEditableTarget(target) {
74
+ if (!(target instanceof HTMLElement)) {
75
+ return false;
76
+ }
77
+ if (target.isContentEditable) {
78
+ return true;
79
+ }
80
+ return target.closest('input, textarea, select') !== null;
81
+ }
82
+ // 统一管理主题状态、页面样式及系统和跨标签页同步。
83
+ function ThemeProvider({ children, defaultTheme = 'system', storageKey = 'bad-ui:theme', disableTransitionOnChange = true, keyboardShortcut, }) {
84
+ const hydrated = useHydrated.useHydrated();
85
+ const [storedTheme, setThemeState] = React.useState(() => readTheme(storageKey, defaultTheme));
86
+ // 水合首帧与服务端一致,完成后才使用浏览器保存的主题。
87
+ const theme = hydrated ? storedTheme : defaultTheme;
88
+ // 所有主动切换共用此入口,统一更新存储和 React 状态。
89
+ const setTheme = React.useCallback((nextTheme) => {
90
+ persistTheme(storageKey, nextTheme);
91
+ setThemeState(nextTheme);
92
+ }, [storageKey]);
93
+ // 按需解析系统配色,按钮和快捷键共用同一切换逻辑。
94
+ const toggleTheme = React.useCallback(() => {
95
+ setTheme(resolveTheme(theme) === 'dark' ? 'light' : 'dark');
96
+ }, [theme, setTheme]);
97
+ // 水合完成后应用主题;服务端与水合首帧不访问系统配色或修改根元素。
98
+ React.useLayoutEffect(() => {
99
+ if (!hydrated)
100
+ return;
101
+ let cleanup = applyTheme(theme, disableTransitionOnChange);
102
+ const mediaQuery = window.matchMedia(COLOR_SCHEME_QUERY);
103
+ const handleChange = () => {
104
+ cleanup();
105
+ cleanup = applyTheme(theme, disableTransitionOnChange);
106
+ };
107
+ // 仅跟随系统时订阅配色变化;显式选择深浅色后不再跟随。
108
+ if (theme === 'system') {
109
+ mediaQuery.addEventListener('change', handleChange);
110
+ }
111
+ return () => {
112
+ mediaQuery.removeEventListener('change', handleChange);
113
+ cleanup();
114
+ };
115
+ }, [theme, disableTransitionOnChange, hydrated]);
116
+ React.useEffect(() => {
117
+ if (!hydrated || !keyboardShortcut)
118
+ return;
119
+ const shortcutKey = keyboardShortcut.toLowerCase();
120
+ // 忽略已处理事件、输入法组合和长按重复。
121
+ const handleKeyDown = (event) => {
122
+ if (event.defaultPrevented || event.isComposing || event.repeat) {
123
+ return;
124
+ }
125
+ if (event.metaKey || event.ctrlKey || event.altKey) {
126
+ return;
127
+ }
128
+ if (isEditableTarget(event.target)) {
129
+ return;
130
+ }
131
+ if (event.key.toLowerCase() !== shortcutKey) {
132
+ return;
133
+ }
134
+ toggleTheme();
135
+ };
136
+ window.addEventListener('keydown', handleKeyDown);
137
+ return () => {
138
+ window.removeEventListener('keydown', handleKeyDown);
139
+ };
140
+ }, [toggleTheme, hydrated, keyboardShortcut]);
141
+ React.useEffect(() => {
142
+ // storage 事件用于接收同源其他标签页的主题变更。
143
+ const handleStorageChange = (event) => {
144
+ if (event.storageArea !== localStorage) {
145
+ return;
146
+ }
147
+ // clear() 触发的事件 key 为 null,也需要回退到默认主题。
148
+ if (event.key !== null && event.key !== storageKey) {
149
+ return;
150
+ }
151
+ if (isTheme(event.newValue)) {
152
+ setThemeState(event.newValue);
153
+ return;
154
+ }
155
+ // 存储项被移除、清空或写入无效值时,恢复默认主题。
156
+ setThemeState(defaultTheme);
157
+ };
158
+ window.addEventListener('storage', handleStorageChange);
159
+ return () => {
160
+ window.removeEventListener('storage', handleStorageChange);
161
+ };
162
+ }, [defaultTheme, storageKey]);
163
+ // 保持上下文值的引用稳定,避免父组件重渲染引起无关更新。
164
+ const value = React.useMemo(() => ({
165
+ theme,
166
+ setTheme,
167
+ toggleTheme,
168
+ }), [theme, setTheme, toggleTheme]);
169
+ return jsxRuntime.jsx(ThemeProviderContext.Provider, { value: value, children: children });
170
+ }
171
+ // 获取主题上下文,并在缺少 Provider 时给出明确错误。
172
+ const useTheme = () => {
173
+ const context = React.useContext(ThemeProviderContext);
174
+ if (context === undefined) {
175
+ throw new Error('useTheme must be used within a ThemeProvider');
176
+ }
177
+ return context;
178
+ };
179
+
180
+ exports.ThemeProvider = ThemeProvider;
181
+ exports.useTheme = useTheme;
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ import { Accordion as Accordion$1 } from '@base-ui/react/accordion';
3
+
4
+ declare function Accordion({ className, ...props }: Accordion$1.Root.Props): React.JSX.Element;
5
+ declare function AccordionItem({ className, ...props }: Accordion$1.Item.Props): React.JSX.Element;
6
+ declare function AccordionTrigger({ className, children, ...props }: Accordion$1.Trigger.Props): React.JSX.Element;
7
+ declare function AccordionContent({ className, children, ...props }: Accordion$1.Panel.Props): React.JSX.Element;
8
+
9
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger };
@@ -0,0 +1,20 @@
1
+ import * as React from 'react';
2
+ import { AlertDialog as AlertDialog$1 } from '@base-ui/react/alert-dialog';
3
+ import { Button } from './button.js';
4
+
5
+ declare function AlertDialog({ ...props }: AlertDialog$1.Root.Props): React.JSX.Element;
6
+ declare function AlertDialogTrigger({ ...props }: AlertDialog$1.Trigger.Props): React.JSX.Element;
7
+ declare function AlertDialogPortal({ ...props }: AlertDialog$1.Portal.Props): React.JSX.Element;
8
+ declare function AlertDialogOverlay({ className, ...props }: AlertDialog$1.Backdrop.Props): React.JSX.Element;
9
+ declare function AlertDialogContent({ className, size, ...props }: AlertDialog$1.Popup.Props & {
10
+ size?: "default" | "sm";
11
+ }): React.JSX.Element;
12
+ declare function AlertDialogHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
13
+ declare function AlertDialogFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
14
+ declare function AlertDialogMedia({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
15
+ declare function AlertDialogTitle({ className, ...props }: React.ComponentProps<typeof AlertDialog$1.Title>): React.JSX.Element;
16
+ declare function AlertDialogDescription({ className, ...props }: React.ComponentProps<typeof AlertDialog$1.Description>): React.JSX.Element;
17
+ declare function AlertDialogAction({ className, ...props }: React.ComponentProps<typeof Button>): React.JSX.Element;
18
+ declare function AlertDialogCancel({ className, variant, size, ...props }: AlertDialog$1.Close.Props & Pick<React.ComponentProps<typeof Button>, "variant" | "size">): React.JSX.Element;
19
+
20
+ export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger };
@@ -0,0 +1,13 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as React from 'react';
3
+ import { VariantProps } from 'class-variance-authority';
4
+
5
+ declare const alertVariants: (props?: ({
6
+ variant?: "default" | "destructive" | null | undefined;
7
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
8
+ declare function Alert({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof alertVariants>): React.JSX.Element;
9
+ declare function AlertTitle({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
10
+ declare function AlertDescription({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
11
+ declare function AlertAction({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
12
+
13
+ export { Alert, AlertAction, AlertDescription, AlertTitle };
@@ -0,0 +1,7 @@
1
+ import * as React$1 from 'react';
2
+
3
+ declare function AspectRatio({ ratio, className, ...props }: React.ComponentProps<"div"> & {
4
+ ratio: number;
5
+ }): React$1.JSX.Element;
6
+
7
+ export { AspectRatio };
@@ -0,0 +1,26 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as React from 'react';
3
+ import { useRender } from '@base-ui/react/use-render';
4
+ import { VariantProps } from 'class-variance-authority';
5
+ import { Button } from './button.js';
6
+
7
+ declare const attachmentVariants: (props?: ({
8
+ size?: "default" | "sm" | "xs" | null | undefined;
9
+ orientation?: "horizontal" | "vertical" | null | undefined;
10
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
11
+ declare function Attachment({ className, state, size, orientation, ...props }: React.ComponentProps<"div"> & VariantProps<typeof attachmentVariants> & {
12
+ state?: "idle" | "uploading" | "processing" | "error" | "done";
13
+ }): React.JSX.Element;
14
+ declare const attachmentMediaVariants: (props?: ({
15
+ variant?: "image" | "icon" | null | undefined;
16
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
17
+ declare function AttachmentMedia({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof attachmentMediaVariants>): React.JSX.Element;
18
+ declare function AttachmentContent({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
19
+ declare function AttachmentTitle({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
20
+ declare function AttachmentDescription({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
21
+ declare function AttachmentActions({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
22
+ declare function AttachmentAction({ className, variant, size, ...props }: React.ComponentProps<typeof Button>): React.JSX.Element;
23
+ declare function AttachmentTrigger({ className, render, type, ...props }: useRender.ComponentProps<"button">): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
24
+ declare function AttachmentGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
25
+
26
+ export { Attachment, AttachmentAction, AttachmentActions, AttachmentContent, AttachmentDescription, AttachmentGroup, AttachmentMedia, AttachmentTitle, AttachmentTrigger };
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+ import { Avatar as Avatar$1 } from '@base-ui/react/avatar';
3
+
4
+ declare function Avatar({ className, size, ...props }: Avatar$1.Root.Props & {
5
+ size?: "default" | "sm" | "lg";
6
+ }): React.JSX.Element;
7
+ declare function AvatarImage({ className, ...props }: Avatar$1.Image.Props): React.JSX.Element;
8
+ declare function AvatarFallback({ className, ...props }: Avatar$1.Fallback.Props): React.JSX.Element;
9
+ declare function AvatarBadge({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
10
+ declare function AvatarGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
11
+ declare function AvatarGroupCount({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
12
+
13
+ export { Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage };
@@ -0,0 +1,11 @@
1
+ import * as React from 'react';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import { useRender } from '@base-ui/react/use-render';
4
+ import { VariantProps } from 'class-variance-authority';
5
+
6
+ declare const badgeVariants: (props?: ({
7
+ variant?: "default" | "destructive" | "link" | "secondary" | "outline" | "ghost" | null | undefined;
8
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
9
+ declare function Badge({ className, variant, render, ...props }: useRender.ComponentProps<"span"> & VariantProps<typeof badgeVariants>): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
10
+
11
+ export { Badge, badgeVariants };
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+ import { useRender } from '@base-ui/react/use-render';
3
+
4
+ declare function Breadcrumb({ className, ...props }: React.ComponentProps<"nav">): React.JSX.Element;
5
+ declare function BreadcrumbList({ className, ...props }: React.ComponentProps<"ol">): React.JSX.Element;
6
+ declare function BreadcrumbItem({ className, ...props }: React.ComponentProps<"li">): React.JSX.Element;
7
+ declare function BreadcrumbLink({ className, render, ...props }: useRender.ComponentProps<"a">): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
8
+ declare function BreadcrumbPage({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
9
+ declare function BreadcrumbSeparator({ children, className, ...props }: React.ComponentProps<"li">): React.JSX.Element;
10
+ declare function BreadcrumbEllipsis({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
11
+
12
+ export { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator };
@@ -0,0 +1,19 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as React from 'react';
3
+ import { useRender } from '@base-ui/react/use-render';
4
+ import { VariantProps } from 'class-variance-authority';
5
+
6
+ declare function BubbleGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
7
+ declare const bubbleVariants: (props?: ({
8
+ variant?: "default" | "destructive" | "secondary" | "outline" | "ghost" | "muted" | "tinted" | null | undefined;
9
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
10
+ declare function Bubble({ variant, align, className, ...props }: React.ComponentProps<"div"> & VariantProps<typeof bubbleVariants> & {
11
+ align?: "start" | "end";
12
+ }): React.JSX.Element;
13
+ declare function BubbleContent({ className, render, ...props }: useRender.ComponentProps<"div">): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
14
+ declare function BubbleReactions({ side, align, className, ...props }: React.ComponentProps<"div"> & {
15
+ align?: "start" | "end";
16
+ side?: "top" | "bottom";
17
+ }): React.JSX.Element;
18
+
19
+ export { Bubble, BubbleContent, BubbleGroup, BubbleReactions };
@@ -0,0 +1,14 @@
1
+ import * as React$1 from 'react';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import { useRender } from '@base-ui/react/use-render';
4
+ import { VariantProps } from 'class-variance-authority';
5
+ import { Separator } from './separator.js';
6
+
7
+ declare const buttonGroupVariants: (props?: ({
8
+ orientation?: "horizontal" | "vertical" | null | undefined;
9
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
10
+ declare function ButtonGroup({ className, orientation, ...props }: React.ComponentProps<"div"> & VariantProps<typeof buttonGroupVariants>): React$1.JSX.Element;
11
+ declare function ButtonGroupText({ className, render, ...props }: useRender.ComponentProps<"div">): React$1.ReactElement<unknown, string | React$1.JSXElementConstructor<any>>;
12
+ declare function ButtonGroupSeparator({ className, orientation, ...props }: React.ComponentProps<typeof Separator>): React$1.JSX.Element;
13
+
14
+ export { ButtonGroup, ButtonGroupSeparator, ButtonGroupText, buttonGroupVariants };
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import { Button as Button$1 } from '@base-ui/react/button';
4
+ import { VariantProps } from 'class-variance-authority';
5
+
6
+ declare const buttonVariants: (props?: ({
7
+ variant?: "default" | "destructive" | "link" | "secondary" | "outline" | "ghost" | null | undefined;
8
+ size?: "default" | "sm" | "xs" | "icon" | "lg" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
9
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
10
+ declare function Button({ className, variant, size, ...props }: Button$1.Props & VariantProps<typeof buttonVariants>): React.JSX.Element;
11
+
12
+ export { Button, buttonVariants };
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+ import { DayPicker, DayButton, Locale } from 'react-day-picker';
3
+ import { Button } from './button.js';
4
+
5
+ declare function Calendar({ className, classNames, showOutsideDays, captionLayout, buttonVariant, locale, formatters, components, ...props }: React.ComponentProps<typeof DayPicker> & {
6
+ buttonVariant?: React.ComponentProps<typeof Button>["variant"];
7
+ }): React.JSX.Element;
8
+ declare function CalendarDayButton({ className, day, modifiers, locale, ...props }: React.ComponentProps<typeof DayButton> & {
9
+ locale?: Partial<Locale>;
10
+ }): React.JSX.Element;
11
+
12
+ export { Calendar, CalendarDayButton };
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+
3
+ declare function Card({ className, size, ...props }: React.ComponentProps<"div"> & {
4
+ size?: "default" | "sm";
5
+ }): React.JSX.Element;
6
+ declare function CardHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
7
+ declare function CardTitle({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
8
+ declare function CardDescription({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
9
+ declare function CardAction({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
10
+ declare function CardContent({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
11
+ declare function CardFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
12
+
13
+ export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };
@@ -0,0 +1,31 @@
1
+ import * as React from 'react';
2
+ import useEmblaCarousel, { UseEmblaCarouselType } from 'embla-carousel-react';
3
+ import { Button } from './button.js';
4
+
5
+ type CarouselApi = UseEmblaCarouselType[1];
6
+ type UseCarouselParameters = Parameters<typeof useEmblaCarousel>;
7
+ type CarouselOptions = UseCarouselParameters[0];
8
+ type CarouselPlugin = UseCarouselParameters[1];
9
+ type CarouselProps = {
10
+ opts?: CarouselOptions;
11
+ plugins?: CarouselPlugin;
12
+ orientation?: "horizontal" | "vertical";
13
+ setApi?: (api: CarouselApi) => void;
14
+ };
15
+ type CarouselContextProps = {
16
+ carouselRef: ReturnType<typeof useEmblaCarousel>[0];
17
+ api: ReturnType<typeof useEmblaCarousel>[1];
18
+ scrollPrev: () => void;
19
+ scrollNext: () => void;
20
+ canScrollPrev: boolean;
21
+ canScrollNext: boolean;
22
+ } & CarouselProps;
23
+ declare function useCarousel(): CarouselContextProps;
24
+ declare function Carousel({ orientation, opts, setApi, plugins, className, children, ...props }: React.ComponentProps<"div"> & CarouselProps): React.JSX.Element;
25
+ declare function CarouselContent({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
26
+ declare function CarouselItem({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
27
+ declare function CarouselPrevious({ className, variant, size, ...props }: React.ComponentProps<typeof Button>): React.JSX.Element;
28
+ declare function CarouselNext({ className, variant, size, ...props }: React.ComponentProps<typeof Button>): React.JSX.Element;
29
+
30
+ export { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, useCarousel };
31
+ export type { CarouselApi };
@@ -0,0 +1,47 @@
1
+ import * as React from 'react';
2
+ import * as RechartsPrimitive from 'recharts';
3
+ import { TooltipValueType } from 'recharts';
4
+
5
+ declare const THEMES: {
6
+ readonly light: "";
7
+ readonly dark: ".dark";
8
+ };
9
+ type TooltipNameType = number | string;
10
+ type ChartConfig = Record<string, {
11
+ label?: React.ReactNode;
12
+ icon?: React.ComponentType;
13
+ } & ({
14
+ color?: string;
15
+ theme?: never;
16
+ } | {
17
+ color?: never;
18
+ theme: Record<keyof typeof THEMES, string>;
19
+ })>;
20
+ declare function ChartContainer({ id, className, children, config, initialDimension, ...props }: React.ComponentProps<"div"> & {
21
+ config: ChartConfig;
22
+ children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>["children"];
23
+ initialDimension?: {
24
+ width: number;
25
+ height: number;
26
+ };
27
+ }): React.JSX.Element;
28
+ declare const ChartStyle: ({ id, config }: {
29
+ id: string;
30
+ config: ChartConfig;
31
+ }) => React.JSX.Element | null;
32
+ declare const ChartTooltip: typeof RechartsPrimitive.Tooltip;
33
+ declare function ChartTooltipContent({ active, payload, className, indicator, hideLabel, hideIndicator, label, labelFormatter, labelClassName, formatter, color, nameKey, labelKey, }: React.ComponentProps<typeof RechartsPrimitive.Tooltip> & React.ComponentProps<"div"> & {
34
+ hideLabel?: boolean;
35
+ hideIndicator?: boolean;
36
+ indicator?: "line" | "dot" | "dashed";
37
+ nameKey?: string;
38
+ labelKey?: string;
39
+ } & Omit<RechartsPrimitive.DefaultTooltipContentProps<TooltipValueType, TooltipNameType>, "accessibilityLayer">): React.JSX.Element | null;
40
+ declare const ChartLegend: React.MemoExoticComponent<(outsideProps: RechartsPrimitive.LegendProps) => React.ReactPortal | null>;
41
+ declare function ChartLegendContent({ className, hideIcon, payload, verticalAlign, nameKey, }: React.ComponentProps<"div"> & {
42
+ hideIcon?: boolean;
43
+ nameKey?: string;
44
+ } & RechartsPrimitive.DefaultLegendContentProps): React.JSX.Element | null;
45
+
46
+ export { ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent };
47
+ export type { ChartConfig };
@@ -0,0 +1,6 @@
1
+ import * as React from 'react';
2
+ import { Checkbox as Checkbox$1 } from '@base-ui/react/checkbox';
3
+
4
+ declare function Checkbox({ className, ...props }: Checkbox$1.Root.Props): React.JSX.Element;
5
+
6
+ export { Checkbox };
@@ -0,0 +1,29 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as React from 'react';
3
+ import { VariantProps } from 'class-variance-authority';
4
+ import { Button } from './button.js';
5
+
6
+ declare const codeBlockVariants: (props?: ({
7
+ variant?: "default" | "destructive" | null | undefined;
8
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
9
+ declare function CodeBlock({ className, variant, size, ...props }: React.ComponentProps<"div"> & VariantProps<typeof codeBlockVariants> & {
10
+ size?: "default" | "sm";
11
+ }): React.JSX.Element;
12
+ declare function CodeBlockHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
13
+ declare function CodeBlockTitle({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
14
+ declare function CodeBlockActions({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
15
+ declare function CodeBlockCopyButton({ value, variant, size, className, onClick, ...props }: React.ComponentProps<typeof Button> & {
16
+ value: string;
17
+ }): React.JSX.Element;
18
+ declare function CodeBlockContent({ className, children, style, wrap, lineNumbers, startLine, ...props }: React.ComponentProps<"pre"> & {
19
+ wrap?: boolean;
20
+ lineNumbers?: boolean;
21
+ startLine?: number;
22
+ }): React.JSX.Element;
23
+ declare const codeBlockLineVariants: (props?: ({
24
+ variant?: "default" | "added" | "removed" | "highlighted" | null | undefined;
25
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
26
+ declare function CodeBlockLine({ className, variant, children, ...props }: React.ComponentProps<"span"> & VariantProps<typeof codeBlockLineVariants>): React.JSX.Element;
27
+ declare function CodeBlockFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
28
+
29
+ export { CodeBlock, CodeBlockActions, CodeBlockContent, CodeBlockCopyButton, CodeBlockFooter, CodeBlockHeader, CodeBlockLine, CodeBlockTitle };
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ import { Collapsible as Collapsible$1 } from '@base-ui/react/collapsible';
3
+
4
+ declare function Collapsible({ ...props }: Collapsible$1.Root.Props): React.JSX.Element;
5
+ declare function CollapsibleTrigger({ ...props }: Collapsible$1.Trigger.Props): React.JSX.Element;
6
+ declare function CollapsibleContent({ ...props }: Collapsible$1.Panel.Props): React.JSX.Element;
7
+
8
+ export { Collapsible, CollapsibleContent, CollapsibleTrigger };