@neynar/ui 0.1.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 (364) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +195 -0
  3. package/dist/components/ui/accordion.d.ts +229 -0
  4. package/dist/components/ui/accordion.d.ts.map +1 -0
  5. package/dist/components/ui/alert-dialog.d.ts +247 -0
  6. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  7. package/dist/components/ui/alert.d.ts +187 -0
  8. package/dist/components/ui/alert.d.ts.map +1 -0
  9. package/dist/components/ui/aspect-ratio.d.ts +94 -0
  10. package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
  11. package/dist/components/ui/avatar.d.ts +244 -0
  12. package/dist/components/ui/avatar.d.ts.map +1 -0
  13. package/dist/components/ui/badge.d.ts +163 -0
  14. package/dist/components/ui/badge.d.ts.map +1 -0
  15. package/dist/components/ui/breadcrumb.d.ts +281 -0
  16. package/dist/components/ui/breadcrumb.d.ts.map +1 -0
  17. package/dist/components/ui/button.d.ts +129 -0
  18. package/dist/components/ui/button.d.ts.map +1 -0
  19. package/dist/components/ui/calendar.d.ts +169 -0
  20. package/dist/components/ui/calendar.d.ts.map +1 -0
  21. package/dist/components/ui/card.d.ts +365 -0
  22. package/dist/components/ui/card.d.ts.map +1 -0
  23. package/dist/components/ui/carousel.d.ts +369 -0
  24. package/dist/components/ui/carousel.d.ts.map +1 -0
  25. package/dist/components/ui/chart.d.ts +442 -0
  26. package/dist/components/ui/chart.d.ts.map +1 -0
  27. package/dist/components/ui/checkbox.d.ts +88 -0
  28. package/dist/components/ui/checkbox.d.ts.map +1 -0
  29. package/dist/components/ui/collapsible.d.ts +182 -0
  30. package/dist/components/ui/collapsible.d.ts.map +1 -0
  31. package/dist/components/ui/combobox.d.ts +270 -0
  32. package/dist/components/ui/combobox.d.ts.map +1 -0
  33. package/dist/components/ui/command.d.ts +355 -0
  34. package/dist/components/ui/command.d.ts.map +1 -0
  35. package/dist/components/ui/container.d.ts +102 -0
  36. package/dist/components/ui/container.d.ts.map +1 -0
  37. package/dist/components/ui/context-menu.d.ts +339 -0
  38. package/dist/components/ui/context-menu.d.ts.map +1 -0
  39. package/dist/components/ui/date-picker.d.ts +145 -0
  40. package/dist/components/ui/date-picker.d.ts.map +1 -0
  41. package/dist/components/ui/dialog.d.ts +322 -0
  42. package/dist/components/ui/dialog.d.ts.map +1 -0
  43. package/dist/components/ui/drawer.d.ts +154 -0
  44. package/dist/components/ui/drawer.d.ts.map +1 -0
  45. package/dist/components/ui/dropdown-menu.d.ts +349 -0
  46. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  47. package/dist/components/ui/empty-state.d.ts +133 -0
  48. package/dist/components/ui/empty-state.d.ts.map +1 -0
  49. package/dist/components/ui/hover-card.d.ts +109 -0
  50. package/dist/components/ui/hover-card.d.ts.map +1 -0
  51. package/dist/components/ui/input.d.ts +89 -0
  52. package/dist/components/ui/input.d.ts.map +1 -0
  53. package/dist/components/ui/label.d.ts +93 -0
  54. package/dist/components/ui/label.d.ts.map +1 -0
  55. package/dist/components/ui/menubar.d.ts +306 -0
  56. package/dist/components/ui/menubar.d.ts.map +1 -0
  57. package/dist/components/ui/navigation-menu.d.ts +318 -0
  58. package/dist/components/ui/navigation-menu.d.ts.map +1 -0
  59. package/dist/components/ui/pagination.d.ts +343 -0
  60. package/dist/components/ui/pagination.d.ts.map +1 -0
  61. package/dist/components/ui/popover.d.ts +178 -0
  62. package/dist/components/ui/popover.d.ts.map +1 -0
  63. package/dist/components/ui/progress.d.ts +64 -0
  64. package/dist/components/ui/progress.d.ts.map +1 -0
  65. package/dist/components/ui/radio-group.d.ts +144 -0
  66. package/dist/components/ui/radio-group.d.ts.map +1 -0
  67. package/dist/components/ui/resizable.d.ts +164 -0
  68. package/dist/components/ui/resizable.d.ts.map +1 -0
  69. package/dist/components/ui/scroll-area.d.ts +82 -0
  70. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  71. package/dist/components/ui/select.d.ts +316 -0
  72. package/dist/components/ui/select.d.ts.map +1 -0
  73. package/dist/components/ui/separator.d.ts +80 -0
  74. package/dist/components/ui/separator.d.ts.map +1 -0
  75. package/dist/components/ui/sheet.d.ts +346 -0
  76. package/dist/components/ui/sheet.d.ts.map +1 -0
  77. package/dist/components/ui/sidebar.d.ts +1561 -0
  78. package/dist/components/ui/sidebar.d.ts.map +1 -0
  79. package/dist/components/ui/skeleton.d.ts +66 -0
  80. package/dist/components/ui/skeleton.d.ts.map +1 -0
  81. package/dist/components/ui/slider.d.ts +95 -0
  82. package/dist/components/ui/slider.d.ts.map +1 -0
  83. package/dist/components/ui/sonner.d.ts +101 -0
  84. package/dist/components/ui/sonner.d.ts.map +1 -0
  85. package/dist/components/ui/stack.d.ts +192 -0
  86. package/dist/components/ui/stack.d.ts.map +1 -0
  87. package/dist/components/ui/stories/accordion.stories.d.ts +71 -0
  88. package/dist/components/ui/stories/accordion.stories.d.ts.map +1 -0
  89. package/dist/components/ui/stories/alert-dialog.stories.d.ts +39 -0
  90. package/dist/components/ui/stories/alert-dialog.stories.d.ts.map +1 -0
  91. package/dist/components/ui/stories/alert.stories.d.ts +48 -0
  92. package/dist/components/ui/stories/alert.stories.d.ts.map +1 -0
  93. package/dist/components/ui/stories/aspect-ratio.stories.d.ts +53 -0
  94. package/dist/components/ui/stories/aspect-ratio.stories.d.ts.map +1 -0
  95. package/dist/components/ui/stories/avatar.stories.d.ts +49 -0
  96. package/dist/components/ui/stories/avatar.stories.d.ts.map +1 -0
  97. package/dist/components/ui/stories/badge.stories.d.ts +64 -0
  98. package/dist/components/ui/stories/badge.stories.d.ts.map +1 -0
  99. package/dist/components/ui/stories/breadcrumb.stories.d.ts +27 -0
  100. package/dist/components/ui/stories/breadcrumb.stories.d.ts.map +1 -0
  101. package/dist/components/ui/stories/button.stories.d.ts +92 -0
  102. package/dist/components/ui/stories/button.stories.d.ts.map +1 -0
  103. package/dist/components/ui/stories/calendar.stories.d.ts +94 -0
  104. package/dist/components/ui/stories/calendar.stories.d.ts.map +1 -0
  105. package/dist/components/ui/stories/card.stories.d.ts +29 -0
  106. package/dist/components/ui/stories/card.stories.d.ts.map +1 -0
  107. package/dist/components/ui/stories/carousel.stories.d.ts +42 -0
  108. package/dist/components/ui/stories/carousel.stories.d.ts.map +1 -0
  109. package/dist/components/ui/stories/chart.stories.d.ts +51 -0
  110. package/dist/components/ui/stories/chart.stories.d.ts.map +1 -0
  111. package/dist/components/ui/stories/checkbox.stories.d.ts +72 -0
  112. package/dist/components/ui/stories/checkbox.stories.d.ts.map +1 -0
  113. package/dist/components/ui/stories/cn.stories.d.ts +19 -0
  114. package/dist/components/ui/stories/cn.stories.d.ts.map +1 -0
  115. package/dist/components/ui/stories/collapsible.stories.d.ts +51 -0
  116. package/dist/components/ui/stories/collapsible.stories.d.ts.map +1 -0
  117. package/dist/components/ui/stories/colors.stories.d.ts +31 -0
  118. package/dist/components/ui/stories/colors.stories.d.ts.map +1 -0
  119. package/dist/components/ui/stories/combobox.stories.d.ts +89 -0
  120. package/dist/components/ui/stories/combobox.stories.d.ts.map +1 -0
  121. package/dist/components/ui/stories/command.stories.d.ts +69 -0
  122. package/dist/components/ui/stories/command.stories.d.ts.map +1 -0
  123. package/dist/components/ui/stories/container.stories.d.ts +42 -0
  124. package/dist/components/ui/stories/container.stories.d.ts.map +1 -0
  125. package/dist/components/ui/stories/context-menu.stories.d.ts +32 -0
  126. package/dist/components/ui/stories/context-menu.stories.d.ts.map +1 -0
  127. package/dist/components/ui/stories/date-picker.stories.d.ts +67 -0
  128. package/dist/components/ui/stories/date-picker.stories.d.ts.map +1 -0
  129. package/dist/components/ui/stories/dialog.stories.d.ts +48 -0
  130. package/dist/components/ui/stories/dialog.stories.d.ts.map +1 -0
  131. package/dist/components/ui/stories/drawer.stories.d.ts +33 -0
  132. package/dist/components/ui/stories/drawer.stories.d.ts.map +1 -0
  133. package/dist/components/ui/stories/dropdown-menu.stories.d.ts +31 -0
  134. package/dist/components/ui/stories/dropdown-menu.stories.d.ts.map +1 -0
  135. package/dist/components/ui/stories/empty-state.stories.d.ts +74 -0
  136. package/dist/components/ui/stories/empty-state.stories.d.ts.map +1 -0
  137. package/dist/components/ui/stories/hover-card.stories.d.ts +35 -0
  138. package/dist/components/ui/stories/hover-card.stories.d.ts.map +1 -0
  139. package/dist/components/ui/stories/input.stories.d.ts +69 -0
  140. package/dist/components/ui/stories/input.stories.d.ts.map +1 -0
  141. package/dist/components/ui/stories/label.stories.d.ts +47 -0
  142. package/dist/components/ui/stories/label.stories.d.ts.map +1 -0
  143. package/dist/components/ui/stories/menubar.stories.d.ts +39 -0
  144. package/dist/components/ui/stories/menubar.stories.d.ts.map +1 -0
  145. package/dist/components/ui/stories/navigation-menu.stories.d.ts +44 -0
  146. package/dist/components/ui/stories/navigation-menu.stories.d.ts.map +1 -0
  147. package/dist/components/ui/stories/pagination.stories.d.ts +33 -0
  148. package/dist/components/ui/stories/pagination.stories.d.ts.map +1 -0
  149. package/dist/components/ui/stories/popover.stories.d.ts +36 -0
  150. package/dist/components/ui/stories/popover.stories.d.ts.map +1 -0
  151. package/dist/components/ui/stories/progress.stories.d.ts +38 -0
  152. package/dist/components/ui/stories/progress.stories.d.ts.map +1 -0
  153. package/dist/components/ui/stories/radio-group.stories.d.ts +76 -0
  154. package/dist/components/ui/stories/radio-group.stories.d.ts.map +1 -0
  155. package/dist/components/ui/stories/resizable.stories.d.ts +49 -0
  156. package/dist/components/ui/stories/resizable.stories.d.ts.map +1 -0
  157. package/dist/components/ui/stories/scroll-area.stories.d.ts +35 -0
  158. package/dist/components/ui/stories/scroll-area.stories.d.ts.map +1 -0
  159. package/dist/components/ui/stories/select.stories.d.ts +51 -0
  160. package/dist/components/ui/stories/select.stories.d.ts.map +1 -0
  161. package/dist/components/ui/stories/separator.stories.d.ts +58 -0
  162. package/dist/components/ui/stories/separator.stories.d.ts.map +1 -0
  163. package/dist/components/ui/stories/sheet.stories.d.ts +43 -0
  164. package/dist/components/ui/stories/sheet.stories.d.ts.map +1 -0
  165. package/dist/components/ui/stories/sidebar.stories.d.ts +60 -0
  166. package/dist/components/ui/stories/sidebar.stories.d.ts.map +1 -0
  167. package/dist/components/ui/stories/skeleton.stories.d.ts +42 -0
  168. package/dist/components/ui/stories/skeleton.stories.d.ts.map +1 -0
  169. package/dist/components/ui/stories/slider.stories.d.ts +99 -0
  170. package/dist/components/ui/stories/slider.stories.d.ts.map +1 -0
  171. package/dist/components/ui/stories/sonner.stories.d.ts +9 -0
  172. package/dist/components/ui/stories/sonner.stories.d.ts.map +1 -0
  173. package/dist/components/ui/stories/stack.stories.d.ts +39 -0
  174. package/dist/components/ui/stories/stack.stories.d.ts.map +1 -0
  175. package/dist/components/ui/stories/switch.stories.d.ts +71 -0
  176. package/dist/components/ui/stories/switch.stories.d.ts.map +1 -0
  177. package/dist/components/ui/stories/table.stories.d.ts +40 -0
  178. package/dist/components/ui/stories/table.stories.d.ts.map +1 -0
  179. package/dist/components/ui/stories/tabs.stories.d.ts +62 -0
  180. package/dist/components/ui/stories/tabs.stories.d.ts.map +1 -0
  181. package/dist/components/ui/stories/text-field.stories.d.ts +78 -0
  182. package/dist/components/ui/stories/text-field.stories.d.ts.map +1 -0
  183. package/dist/components/ui/stories/textarea.stories.d.ts +57 -0
  184. package/dist/components/ui/stories/textarea.stories.d.ts.map +1 -0
  185. package/dist/components/ui/stories/theme-toggle.stories.d.ts +71 -0
  186. package/dist/components/ui/stories/theme-toggle.stories.d.ts.map +1 -0
  187. package/dist/components/ui/stories/theme.stories.d.ts +51 -0
  188. package/dist/components/ui/stories/theme.stories.d.ts.map +1 -0
  189. package/dist/components/ui/stories/toggle-group.stories.d.ts +71 -0
  190. package/dist/components/ui/stories/toggle-group.stories.d.ts.map +1 -0
  191. package/dist/components/ui/stories/toggle.stories.d.ts +78 -0
  192. package/dist/components/ui/stories/toggle.stories.d.ts.map +1 -0
  193. package/dist/components/ui/stories/tooltip.stories.d.ts +37 -0
  194. package/dist/components/ui/stories/tooltip.stories.d.ts.map +1 -0
  195. package/dist/components/ui/stories/typography.stories.d.ts +137 -0
  196. package/dist/components/ui/stories/typography.stories.d.ts.map +1 -0
  197. package/dist/components/ui/stories/use-mobile.stories.d.ts +20 -0
  198. package/dist/components/ui/stories/use-mobile.stories.d.ts.map +1 -0
  199. package/dist/components/ui/stories/use-theme.stories.d.ts +23 -0
  200. package/dist/components/ui/stories/use-theme.stories.d.ts.map +1 -0
  201. package/dist/components/ui/switch.d.ts +84 -0
  202. package/dist/components/ui/switch.d.ts.map +1 -0
  203. package/dist/components/ui/table.d.ts +321 -0
  204. package/dist/components/ui/table.d.ts.map +1 -0
  205. package/dist/components/ui/tabs.d.ts +260 -0
  206. package/dist/components/ui/tabs.d.ts.map +1 -0
  207. package/dist/components/ui/text-field.d.ts +157 -0
  208. package/dist/components/ui/text-field.d.ts.map +1 -0
  209. package/dist/components/ui/textarea.d.ts +84 -0
  210. package/dist/components/ui/textarea.d.ts.map +1 -0
  211. package/dist/components/ui/theme-toggle.d.ts +105 -0
  212. package/dist/components/ui/theme-toggle.d.ts.map +1 -0
  213. package/dist/components/ui/theme.d.ts +110 -0
  214. package/dist/components/ui/theme.d.ts.map +1 -0
  215. package/dist/components/ui/toggle-group.d.ts +133 -0
  216. package/dist/components/ui/toggle-group.d.ts.map +1 -0
  217. package/dist/components/ui/toggle.d.ts +84 -0
  218. package/dist/components/ui/toggle.d.ts.map +1 -0
  219. package/dist/components/ui/tooltip.d.ts +202 -0
  220. package/dist/components/ui/tooltip.d.ts.map +1 -0
  221. package/dist/components/ui/typography.d.ts +287 -0
  222. package/dist/components/ui/typography.d.ts.map +1 -0
  223. package/dist/hooks/use-mobile.d.ts +74 -0
  224. package/dist/hooks/use-mobile.d.ts.map +1 -0
  225. package/dist/hooks/use-theme.d.ts +142 -0
  226. package/dist/hooks/use-theme.d.ts.map +1 -0
  227. package/dist/index.d.ts +57 -0
  228. package/dist/index.d.ts.map +1 -0
  229. package/dist/index.js +27498 -0
  230. package/dist/index.js.map +1 -0
  231. package/dist/lib/utils.d.ts +43 -0
  232. package/dist/lib/utils.d.ts.map +1 -0
  233. package/dist/tsconfig.tsbuildinfo +1 -0
  234. package/docs/llm/colors.md +273 -0
  235. package/docs/llm/components/buttons.md +68 -0
  236. package/docs/llm/components/cards.md +53 -0
  237. package/docs/llm/components/display.md +134 -0
  238. package/docs/llm/components/feedback.md +96 -0
  239. package/docs/llm/components/forms.md +90 -0
  240. package/docs/llm/components/layout.md +59 -0
  241. package/docs/llm/components/menus.md +70 -0
  242. package/docs/llm/components/navigation.md +80 -0
  243. package/docs/llm/components/overlays.md +83 -0
  244. package/docs/llm/components/tables.md +73 -0
  245. package/docs/llm/components/typography.md +199 -0
  246. package/docs/llm/components/utilities.md +114 -0
  247. package/docs/llm/guide.md +165 -0
  248. package/llms.txt +122 -0
  249. package/package.json +104 -0
  250. package/src/components/ui/accordion.tsx +285 -0
  251. package/src/components/ui/alert-dialog.tsx +387 -0
  252. package/src/components/ui/alert.tsx +243 -0
  253. package/src/components/ui/aspect-ratio.tsx +99 -0
  254. package/src/components/ui/avatar.tsx +288 -0
  255. package/src/components/ui/badge.tsx +205 -0
  256. package/src/components/ui/breadcrumb.tsx +378 -0
  257. package/src/components/ui/button.tsx +195 -0
  258. package/src/components/ui/calendar.tsx +371 -0
  259. package/src/components/ui/card.tsx +447 -0
  260. package/src/components/ui/carousel.tsx +624 -0
  261. package/src/components/ui/chart.tsx +802 -0
  262. package/src/components/ui/checkbox.tsx +113 -0
  263. package/src/components/ui/collapsible.tsx +207 -0
  264. package/src/components/ui/combobox.tsx +373 -0
  265. package/src/components/ui/command.tsx +518 -0
  266. package/src/components/ui/container.tsx +114 -0
  267. package/src/components/ui/context-menu.tsx +563 -0
  268. package/src/components/ui/date-picker.tsx +213 -0
  269. package/src/components/ui/dialog.tsx +447 -0
  270. package/src/components/ui/drawer.tsx +273 -0
  271. package/src/components/ui/dropdown-menu.tsx +578 -0
  272. package/src/components/ui/empty-state.tsx +145 -0
  273. package/src/components/ui/hover-card.tsx +144 -0
  274. package/src/components/ui/input.tsx +106 -0
  275. package/src/components/ui/label.tsx +110 -0
  276. package/src/components/ui/menubar.tsx +553 -0
  277. package/src/components/ui/navigation-menu.tsx +471 -0
  278. package/src/components/ui/pagination.tsx +456 -0
  279. package/src/components/ui/popover.tsx +216 -0
  280. package/src/components/ui/progress.tsx +88 -0
  281. package/src/components/ui/radio-group.tsx +183 -0
  282. package/src/components/ui/resizable.tsx +209 -0
  283. package/src/components/ui/scroll-area.tsx +132 -0
  284. package/src/components/ui/select.tsx +485 -0
  285. package/src/components/ui/separator.tsx +101 -0
  286. package/src/components/ui/sheet.tsx +495 -0
  287. package/src/components/ui/sidebar.tsx +2211 -0
  288. package/src/components/ui/skeleton.tsx +76 -0
  289. package/src/components/ui/slider.tsx +147 -0
  290. package/src/components/ui/sonner.tsx +120 -0
  291. package/src/components/ui/stack.tsx +180 -0
  292. package/src/components/ui/stories/accordion.stories.tsx +429 -0
  293. package/src/components/ui/stories/alert-dialog.stories.tsx +519 -0
  294. package/src/components/ui/stories/alert.stories.tsx +228 -0
  295. package/src/components/ui/stories/aspect-ratio.stories.tsx +200 -0
  296. package/src/components/ui/stories/avatar.stories.tsx +317 -0
  297. package/src/components/ui/stories/badge.stories.tsx +260 -0
  298. package/src/components/ui/stories/breadcrumb.stories.tsx +482 -0
  299. package/src/components/ui/stories/button.stories.tsx +266 -0
  300. package/src/components/ui/stories/calendar.stories.tsx +375 -0
  301. package/src/components/ui/stories/card.stories.tsx +308 -0
  302. package/src/components/ui/stories/carousel.stories.tsx +328 -0
  303. package/src/components/ui/stories/chart.stories.tsx +430 -0
  304. package/src/components/ui/stories/checkbox.stories.tsx +297 -0
  305. package/src/components/ui/stories/cn.stories.tsx +433 -0
  306. package/src/components/ui/stories/collapsible.stories.tsx +256 -0
  307. package/src/components/ui/stories/colors.stories.tsx +502 -0
  308. package/src/components/ui/stories/combobox.stories.tsx +301 -0
  309. package/src/components/ui/stories/command.stories.tsx +632 -0
  310. package/src/components/ui/stories/container.stories.tsx +250 -0
  311. package/src/components/ui/stories/context-menu.stories.tsx +446 -0
  312. package/src/components/ui/stories/date-picker.stories.tsx +378 -0
  313. package/src/components/ui/stories/dialog.stories.tsx +535 -0
  314. package/src/components/ui/stories/drawer.stories.tsx +364 -0
  315. package/src/components/ui/stories/dropdown-menu.stories.tsx +374 -0
  316. package/src/components/ui/stories/empty-state.stories.tsx +244 -0
  317. package/src/components/ui/stories/hover-card.stories.tsx +355 -0
  318. package/src/components/ui/stories/input.stories.tsx +289 -0
  319. package/src/components/ui/stories/label.stories.tsx +294 -0
  320. package/src/components/ui/stories/menubar.stories.tsx +764 -0
  321. package/src/components/ui/stories/navigation-menu.stories.tsx +539 -0
  322. package/src/components/ui/stories/pagination.stories.tsx +604 -0
  323. package/src/components/ui/stories/popover.stories.tsx +392 -0
  324. package/src/components/ui/stories/progress.stories.tsx +218 -0
  325. package/src/components/ui/stories/radio-group.stories.tsx +400 -0
  326. package/src/components/ui/stories/resizable.stories.tsx +417 -0
  327. package/src/components/ui/stories/scroll-area.stories.tsx +180 -0
  328. package/src/components/ui/stories/select.stories.tsx +389 -0
  329. package/src/components/ui/stories/separator.stories.tsx +192 -0
  330. package/src/components/ui/stories/sheet.stories.tsx +468 -0
  331. package/src/components/ui/stories/sidebar.stories.tsx +731 -0
  332. package/src/components/ui/stories/skeleton.stories.tsx +216 -0
  333. package/src/components/ui/stories/slider.stories.tsx +321 -0
  334. package/src/components/ui/stories/sonner.stories.tsx +373 -0
  335. package/src/components/ui/stories/stack.stories.tsx +222 -0
  336. package/src/components/ui/stories/switch.stories.tsx +202 -0
  337. package/src/components/ui/stories/table.stories.tsx +541 -0
  338. package/src/components/ui/stories/tabs.stories.tsx +544 -0
  339. package/src/components/ui/stories/text-field.stories.tsx +280 -0
  340. package/src/components/ui/stories/textarea.stories.tsx +245 -0
  341. package/src/components/ui/stories/theme-toggle.stories.tsx +275 -0
  342. package/src/components/ui/stories/theme.stories.tsx +412 -0
  343. package/src/components/ui/stories/toggle-group.stories.tsx +337 -0
  344. package/src/components/ui/stories/toggle.stories.tsx +325 -0
  345. package/src/components/ui/stories/tooltip.stories.tsx +444 -0
  346. package/src/components/ui/stories/typography.stories.tsx +1586 -0
  347. package/src/components/ui/stories/use-mobile.stories.tsx +420 -0
  348. package/src/components/ui/stories/use-theme.stories.tsx +531 -0
  349. package/src/components/ui/switch.tsx +106 -0
  350. package/src/components/ui/table.tsx +424 -0
  351. package/src/components/ui/tabs.tsx +316 -0
  352. package/src/components/ui/text-field.tsx +206 -0
  353. package/src/components/ui/textarea.tsx +98 -0
  354. package/src/components/ui/theme-toggle.tsx +185 -0
  355. package/src/components/ui/theme.tsx +148 -0
  356. package/src/components/ui/toggle-group.tsx +196 -0
  357. package/src/components/ui/toggle.tsx +115 -0
  358. package/src/components/ui/tooltip.tsx +253 -0
  359. package/src/components/ui/typography.tsx +468 -0
  360. package/src/hooks/use-mobile.ts +91 -0
  361. package/src/hooks/use-theme.ts +319 -0
  362. package/src/index.ts +77 -0
  363. package/src/lib/utils.ts +57 -0
  364. package/src/styles/globals.css +160 -0
@@ -0,0 +1,337 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import {
3
+ Bold,
4
+ Italic,
5
+ Underline,
6
+ AlignLeft,
7
+ AlignCenter,
8
+ AlignRight,
9
+ AlignJustify,
10
+ } from "lucide-react";
11
+ import { ToggleGroup, ToggleGroupItem } from "../toggle-group";
12
+
13
+ const meta = {
14
+ title: "Interactive Controls/ToggleGroup",
15
+ component: ToggleGroup,
16
+ parameters: {
17
+ layout: "centered",
18
+ docs: {
19
+ description: {
20
+ component:
21
+ "A versatile toggle group component for grouping related toggle buttons with single or multiple selection modes. Built on Radix UI primitives with full keyboard navigation, accessibility support, and customizable variants. Perfect for toolbars, formatting controls, and option selection interfaces.",
22
+ },
23
+ },
24
+ },
25
+ tags: ["autodocs"],
26
+ argTypes: {
27
+ type: {
28
+ control: { type: "select" },
29
+ options: ["single", "multiple"],
30
+ description:
31
+ "Selection mode: 'single' for radio-like behavior, 'multiple' for checkbox-like behavior",
32
+ },
33
+ variant: {
34
+ control: { type: "select" },
35
+ options: ["default", "outline"],
36
+ description:
37
+ "Visual style variant: 'default' for subtle styling, 'outline' for bordered appearance",
38
+ },
39
+ size: {
40
+ control: { type: "select" },
41
+ options: ["sm", "default", "lg"],
42
+ description:
43
+ "Size of toggle group items: 'sm' (compact), 'default' (standard), 'lg' (large)",
44
+ },
45
+ disabled: {
46
+ control: { type: "boolean" },
47
+ description:
48
+ "Whether the entire toggle group is disabled and non-interactive",
49
+ },
50
+ defaultValue: {
51
+ control: false,
52
+ description:
53
+ "Initial selected value(s) - string for single type, array for multiple type",
54
+ },
55
+ value: {
56
+ control: false,
57
+ description:
58
+ "Controlled selected value(s) - string for single type, array for multiple type",
59
+ },
60
+ onValueChange: {
61
+ control: false,
62
+ description: "Callback function called when the selection changes",
63
+ },
64
+ },
65
+ } satisfies Meta<typeof ToggleGroup>;
66
+
67
+ export default meta;
68
+ type Story = StoryObj<typeof meta>;
69
+
70
+ /**
71
+ * Interactive playground story for testing all ToggleGroup props and variants
72
+ */
73
+ export const Interactive: Story = {
74
+ args: {
75
+ type: "multiple",
76
+ variant: "outline",
77
+ size: "default",
78
+ disabled: false,
79
+ },
80
+ render: (args) => (
81
+ <ToggleGroup {...args}>
82
+ <ToggleGroupItem value="bold" aria-label="Toggle bold">
83
+ <Bold className="size-4" />
84
+ </ToggleGroupItem>
85
+ <ToggleGroupItem value="italic" aria-label="Toggle italic">
86
+ <Italic className="size-4" />
87
+ </ToggleGroupItem>
88
+ <ToggleGroupItem value="underline" aria-label="Toggle underline">
89
+ <Underline className="size-4" />
90
+ </ToggleGroupItem>
91
+ </ToggleGroup>
92
+ ),
93
+ parameters: {
94
+ docs: {
95
+ description: {
96
+ story:
97
+ "Interactive playground for testing all ToggleGroup properties. Use the controls panel to experiment with different combinations of type, variant, size, and disabled state.",
98
+ },
99
+ },
100
+ },
101
+ };
102
+
103
+ /**
104
+ * Showcase of all available variants and sizes in a systematic layout
105
+ */
106
+ export const Variants: Story = {
107
+ args: {
108
+ type: "single",
109
+ variant: "default",
110
+ size: "default",
111
+ disabled: false,
112
+ },
113
+ render: () => (
114
+ <div className="space-y-8">
115
+ <div className="space-y-4">
116
+ <h3 className="text-lg font-semibold">Variants</h3>
117
+
118
+ <div className="space-y-3">
119
+ <div>
120
+ <p className="text-sm text-muted-foreground mb-2">
121
+ Default variant (subtle styling)
122
+ </p>
123
+ <ToggleGroup type="single" variant="default" defaultValue="center">
124
+ <ToggleGroupItem value="left">Left</ToggleGroupItem>
125
+ <ToggleGroupItem value="center">Center</ToggleGroupItem>
126
+ <ToggleGroupItem value="right">Right</ToggleGroupItem>
127
+ </ToggleGroup>
128
+ </div>
129
+
130
+ <div>
131
+ <p className="text-sm text-muted-foreground mb-2">
132
+ Outline variant (bordered)
133
+ </p>
134
+ <ToggleGroup type="single" variant="outline" defaultValue="center">
135
+ <ToggleGroupItem value="left">Left</ToggleGroupItem>
136
+ <ToggleGroupItem value="center">Center</ToggleGroupItem>
137
+ <ToggleGroupItem value="right">Right</ToggleGroupItem>
138
+ </ToggleGroup>
139
+ </div>
140
+ </div>
141
+ </div>
142
+
143
+ <div className="space-y-4">
144
+ <h3 className="text-lg font-semibold">Sizes</h3>
145
+
146
+ <div className="space-y-3">
147
+ <div>
148
+ <p className="text-sm text-muted-foreground mb-2">Small (sm)</p>
149
+ <ToggleGroup type="single" size="sm" variant="outline">
150
+ <ToggleGroupItem value="xs">XS</ToggleGroupItem>
151
+ <ToggleGroupItem value="sm">SM</ToggleGroupItem>
152
+ <ToggleGroupItem value="md">MD</ToggleGroupItem>
153
+ </ToggleGroup>
154
+ </div>
155
+
156
+ <div>
157
+ <p className="text-sm text-muted-foreground mb-2">Default</p>
158
+ <ToggleGroup type="single" size="default" variant="outline">
159
+ <ToggleGroupItem value="small">Small</ToggleGroupItem>
160
+ <ToggleGroupItem value="medium">Medium</ToggleGroupItem>
161
+ <ToggleGroupItem value="large">Large</ToggleGroupItem>
162
+ </ToggleGroup>
163
+ </div>
164
+
165
+ <div>
166
+ <p className="text-sm text-muted-foreground mb-2">Large (lg)</p>
167
+ <ToggleGroup type="single" size="lg" variant="outline">
168
+ <ToggleGroupItem value="option1">Option 1</ToggleGroupItem>
169
+ <ToggleGroupItem value="option2">Option 2</ToggleGroupItem>
170
+ <ToggleGroupItem value="option3">Option 3</ToggleGroupItem>
171
+ </ToggleGroup>
172
+ </div>
173
+ </div>
174
+ </div>
175
+
176
+ <div className="space-y-4">
177
+ <h3 className="text-lg font-semibold">Selection Types</h3>
178
+
179
+ <div className="space-y-3">
180
+ <div>
181
+ <p className="text-sm text-muted-foreground mb-2">
182
+ Single selection (radio-like behavior)
183
+ </p>
184
+ <ToggleGroup type="single" variant="outline" defaultValue="center">
185
+ <ToggleGroupItem value="left" aria-label="Align left">
186
+ <AlignLeft className="size-4" />
187
+ </ToggleGroupItem>
188
+ <ToggleGroupItem value="center" aria-label="Align center">
189
+ <AlignCenter className="size-4" />
190
+ </ToggleGroupItem>
191
+ <ToggleGroupItem value="right" aria-label="Align right">
192
+ <AlignRight className="size-4" />
193
+ </ToggleGroupItem>
194
+ </ToggleGroup>
195
+ </div>
196
+
197
+ <div>
198
+ <p className="text-sm text-muted-foreground mb-2">
199
+ Multiple selection (checkbox-like behavior)
200
+ </p>
201
+ <ToggleGroup
202
+ type="multiple"
203
+ variant="outline"
204
+ defaultValue={["bold", "italic"]}
205
+ >
206
+ <ToggleGroupItem value="bold" aria-label="Toggle bold">
207
+ <Bold className="size-4" />
208
+ </ToggleGroupItem>
209
+ <ToggleGroupItem value="italic" aria-label="Toggle italic">
210
+ <Italic className="size-4" />
211
+ </ToggleGroupItem>
212
+ <ToggleGroupItem value="underline" aria-label="Toggle underline">
213
+ <Underline className="size-4" />
214
+ </ToggleGroupItem>
215
+ </ToggleGroup>
216
+ </div>
217
+ </div>
218
+ </div>
219
+ </div>
220
+ ),
221
+ parameters: {
222
+ docs: {
223
+ description: {
224
+ story:
225
+ "Comprehensive showcase of all ToggleGroup variants, sizes, and selection types. This demonstrates the component's flexibility and visual appearance across different configurations.",
226
+ },
227
+ },
228
+ },
229
+ };
230
+
231
+ /**
232
+ * Real-world usage example showing ToggleGroup in a practical UI context
233
+ */
234
+ export const InContext: Story = {
235
+ args: {
236
+ type: "single",
237
+ variant: "default",
238
+ size: "default",
239
+ disabled: false,
240
+ },
241
+ render: () => (
242
+ <div className="w-full max-w-2xl mx-auto p-6 border rounded-lg bg-card">
243
+ <div className="space-y-6">
244
+ <div>
245
+ <h2 className="text-xl font-semibold mb-2">Document Editor</h2>
246
+ <p className="text-sm text-muted-foreground mb-4">
247
+ Use the formatting tools below to style your document.
248
+ </p>
249
+ </div>
250
+
251
+ <div className="space-y-4">
252
+ <div>
253
+ <label className="text-sm font-medium mb-2 block">
254
+ Text Formatting
255
+ </label>
256
+ <ToggleGroup
257
+ type="multiple"
258
+ variant="outline"
259
+ className="justify-start"
260
+ >
261
+ <ToggleGroupItem value="bold" aria-label="Toggle bold">
262
+ <Bold className="size-4" />
263
+ <span className="ml-1">Bold</span>
264
+ </ToggleGroupItem>
265
+ <ToggleGroupItem value="italic" aria-label="Toggle italic">
266
+ <Italic className="size-4" />
267
+ <span className="ml-1">Italic</span>
268
+ </ToggleGroupItem>
269
+ <ToggleGroupItem value="underline" aria-label="Toggle underline">
270
+ <Underline className="size-4" />
271
+ <span className="ml-1">Underline</span>
272
+ </ToggleGroupItem>
273
+ </ToggleGroup>
274
+ </div>
275
+
276
+ <div>
277
+ <label className="text-sm font-medium mb-2 block">
278
+ Text Alignment
279
+ </label>
280
+ <ToggleGroup
281
+ type="single"
282
+ variant="outline"
283
+ defaultValue="left"
284
+ className="justify-start"
285
+ >
286
+ <ToggleGroupItem value="left" aria-label="Align left">
287
+ <AlignLeft className="size-4" />
288
+ </ToggleGroupItem>
289
+ <ToggleGroupItem value="center" aria-label="Align center">
290
+ <AlignCenter className="size-4" />
291
+ </ToggleGroupItem>
292
+ <ToggleGroupItem value="right" aria-label="Align right">
293
+ <AlignRight className="size-4" />
294
+ </ToggleGroupItem>
295
+ <ToggleGroupItem value="justify" aria-label="Justify text">
296
+ <AlignJustify className="size-4" />
297
+ </ToggleGroupItem>
298
+ </ToggleGroup>
299
+ </div>
300
+
301
+ <div>
302
+ <label className="text-sm font-medium mb-2 block">
303
+ Document Status
304
+ </label>
305
+ <ToggleGroup
306
+ type="single"
307
+ variant="default"
308
+ defaultValue="draft"
309
+ className="justify-start"
310
+ >
311
+ <ToggleGroupItem value="draft">Draft</ToggleGroupItem>
312
+ <ToggleGroupItem value="review">In Review</ToggleGroupItem>
313
+ <ToggleGroupItem value="published">Published</ToggleGroupItem>
314
+ </ToggleGroup>
315
+ </div>
316
+ </div>
317
+
318
+ <div className="pt-4 border-t">
319
+ <div className="h-32 bg-muted/30 rounded border-2 border-dashed border-muted-foreground/20 flex items-center justify-center">
320
+ <p className="text-sm text-muted-foreground">
321
+ Document content area
322
+ </p>
323
+ </div>
324
+ </div>
325
+ </div>
326
+ </div>
327
+ ),
328
+ parameters: {
329
+ layout: "padded",
330
+ docs: {
331
+ description: {
332
+ story:
333
+ "Real-world example showing ToggleGroup components in a document editor interface. This demonstrates how toggle groups work together to provide intuitive formatting controls for users.",
334
+ },
335
+ },
336
+ },
337
+ };
@@ -0,0 +1,325 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import { Bold, Italic, Underline, Heart, Star, Bookmark } from "lucide-react";
3
+ import { Toggle } from "../toggle";
4
+ import { Label } from "../label";
5
+ import React from "react";
6
+
7
+ const meta = {
8
+ title: "Interactive Controls/Toggle",
9
+ component: Toggle,
10
+ parameters: {
11
+ layout: "centered",
12
+ docs: {
13
+ description: {
14
+ component:
15
+ "A two-state button that can be either on or off. Built on Radix UI Toggle with multiple variants and sizes for text formatting, settings, and binary controls.",
16
+ },
17
+ },
18
+ },
19
+ tags: ["autodocs"],
20
+ argTypes: {
21
+ variant: {
22
+ control: { type: "select" },
23
+ options: ["default", "outline"],
24
+ description: "The visual style variant of the toggle",
25
+ },
26
+ size: {
27
+ control: { type: "select" },
28
+ options: ["sm", "default", "lg"],
29
+ description: "The size of the toggle",
30
+ },
31
+ pressed: {
32
+ control: { type: "boolean" },
33
+ description: "The controlled pressed state",
34
+ },
35
+ defaultPressed: {
36
+ control: { type: "boolean" },
37
+ description: "The default pressed state when uncontrolled",
38
+ },
39
+ disabled: {
40
+ control: { type: "boolean" },
41
+ description: "Whether the toggle is disabled",
42
+ },
43
+ children: {
44
+ control: { type: "text" },
45
+ description: "The content of the toggle (icons, text, or both)",
46
+ },
47
+ },
48
+ args: {
49
+ onPressedChange: (pressed: boolean) => console.log("Toggle pressed:", pressed),
50
+ children: <Bold className="size-4" />,
51
+ "aria-label": "Toggle bold",
52
+ },
53
+ } satisfies Meta<typeof Toggle>;
54
+
55
+ export default meta;
56
+ type Story = StoryObj<typeof meta>;
57
+
58
+ /**
59
+ * Interactive playground for testing all toggle props and variants.
60
+ * Use the controls panel to experiment with different combinations.
61
+ */
62
+ export const Interactive: Story = {
63
+ args: {
64
+ children: <Bold className="size-4" />,
65
+ "aria-label": "Toggle bold formatting",
66
+ },
67
+ render: function InteractiveToggle(args) {
68
+ const [pressed, setPressed] = React.useState(args.pressed ?? false);
69
+
70
+ return (
71
+ <div className="space-y-4">
72
+ <Toggle
73
+ {...args}
74
+ pressed={pressed}
75
+ onPressedChange={setPressed}
76
+ />
77
+ <p className="text-sm text-muted-foreground">
78
+ State: {pressed ? "Pressed" : "Unpressed"}
79
+ </p>
80
+ </div>
81
+ );
82
+ },
83
+ };
84
+
85
+ /**
86
+ * Comprehensive showcase of all toggle variants, sizes, and states.
87
+ * Displays the complete design system for designers and developers.
88
+ */
89
+ export const Variants: Story = {
90
+ render: () => (
91
+ <div className="space-y-6">
92
+ {/* Variants */}
93
+ <div>
94
+ <h3 className="mb-3 text-sm font-medium">Variants</h3>
95
+ <div className="flex gap-2">
96
+ <Toggle variant="default" aria-label="Default variant">
97
+ <Bold className="size-4" />
98
+ </Toggle>
99
+ <Toggle variant="outline" aria-label="Outline variant">
100
+ <Bold className="size-4" />
101
+ </Toggle>
102
+ <Toggle variant="default" defaultPressed aria-label="Default pressed">
103
+ <Bold className="size-4" />
104
+ </Toggle>
105
+ <Toggle variant="outline" defaultPressed aria-label="Outline pressed">
106
+ <Bold className="size-4" />
107
+ </Toggle>
108
+ </div>
109
+ </div>
110
+
111
+ {/* Sizes */}
112
+ <div>
113
+ <h3 className="mb-3 text-sm font-medium">Sizes</h3>
114
+ <div className="flex items-center gap-2">
115
+ <Toggle size="sm" aria-label="Small size">
116
+ <Bold className="size-4" />
117
+ </Toggle>
118
+ <Toggle size="default" aria-label="Default size">
119
+ <Bold className="size-4" />
120
+ </Toggle>
121
+ <Toggle size="lg" aria-label="Large size">
122
+ <Bold className="size-4" />
123
+ </Toggle>
124
+ </div>
125
+ </div>
126
+
127
+ {/* States */}
128
+ <div>
129
+ <h3 className="mb-3 text-sm font-medium">States</h3>
130
+ <div className="grid grid-cols-2 gap-4">
131
+ <div className="space-y-2">
132
+ <Label className="text-xs">Normal</Label>
133
+ <Toggle aria-label="Normal state">
134
+ <Bold className="size-4" />
135
+ </Toggle>
136
+ </div>
137
+ <div className="space-y-2">
138
+ <Label className="text-xs">Pressed</Label>
139
+ <Toggle defaultPressed aria-label="Pressed state">
140
+ <Bold className="size-4" />
141
+ </Toggle>
142
+ </div>
143
+ <div className="space-y-2">
144
+ <Label className="text-xs">Disabled</Label>
145
+ <Toggle disabled aria-label="Disabled state">
146
+ <Bold className="size-4" />
147
+ </Toggle>
148
+ </div>
149
+ <div className="space-y-2">
150
+ <Label className="text-xs">Disabled + Pressed</Label>
151
+ <Toggle disabled defaultPressed aria-label="Disabled pressed">
152
+ <Bold className="size-4" />
153
+ </Toggle>
154
+ </div>
155
+ </div>
156
+ </div>
157
+
158
+ {/* Content Types */}
159
+ <div>
160
+ <h3 className="mb-3 text-sm font-medium">Content Types</h3>
161
+ <div className="flex gap-2">
162
+ <Toggle aria-label="Icon only">
163
+ <Bold className="size-4" />
164
+ </Toggle>
165
+ <Toggle>Text Only</Toggle>
166
+ <Toggle>
167
+ <Italic className="size-4" />
168
+ With Icon
169
+ </Toggle>
170
+ </div>
171
+ </div>
172
+ </div>
173
+ ),
174
+ parameters: {
175
+ docs: {
176
+ description: {
177
+ story: "Complete overview of all available toggle variants, sizes, states, and content options for design system reference.",
178
+ },
179
+ },
180
+ },
181
+ };
182
+
183
+ /**
184
+ * Real-world usage examples showing toggles in practical UI contexts.
185
+ * Demonstrates common patterns for design and business stakeholders.
186
+ */
187
+ export const InContext: Story = {
188
+ render: function ToggleInContext() {
189
+ const [formatting, setFormatting] = React.useState({
190
+ bold: false,
191
+ italic: false,
192
+ underline: false,
193
+ });
194
+
195
+ const [preferences, setPreferences] = React.useState({
196
+ notifications: true,
197
+ autoSave: false,
198
+ });
199
+
200
+ const [actions, setActions] = React.useState({
201
+ liked: false,
202
+ starred: false,
203
+ bookmarked: false,
204
+ });
205
+
206
+ return (
207
+ <div className="space-y-8">
208
+ {/* Text Formatting Toolbar */}
209
+ <div>
210
+ <h3 className="mb-3 text-sm font-medium">Text Formatting Toolbar</h3>
211
+ <div className="flex items-center gap-1 rounded-md border p-2">
212
+ <Toggle
213
+ pressed={formatting.bold}
214
+ onPressedChange={(pressed) =>
215
+ setFormatting({ ...formatting, bold: pressed })
216
+ }
217
+ size="sm"
218
+ aria-label="Toggle bold"
219
+ >
220
+ <Bold className="size-4" />
221
+ </Toggle>
222
+ <Toggle
223
+ pressed={formatting.italic}
224
+ onPressedChange={(pressed) =>
225
+ setFormatting({ ...formatting, italic: pressed })
226
+ }
227
+ size="sm"
228
+ aria-label="Toggle italic"
229
+ >
230
+ <Italic className="size-4" />
231
+ </Toggle>
232
+ <Toggle
233
+ pressed={formatting.underline}
234
+ onPressedChange={(pressed) =>
235
+ setFormatting({ ...formatting, underline: pressed })
236
+ }
237
+ size="sm"
238
+ aria-label="Toggle underline"
239
+ >
240
+ <Underline className="size-4" />
241
+ </Toggle>
242
+ </div>
243
+ </div>
244
+
245
+ {/* Settings Panel */}
246
+ <div>
247
+ <h3 className="mb-3 text-sm font-medium">Settings Panel</h3>
248
+ <div className="space-y-3 rounded-md border p-4">
249
+ <div className="flex items-center justify-between">
250
+ <Label className="text-sm">Enable notifications</Label>
251
+ <Toggle
252
+ pressed={preferences.notifications}
253
+ onPressedChange={(pressed) =>
254
+ setPreferences({ ...preferences, notifications: pressed })
255
+ }
256
+ variant="outline"
257
+ size="sm"
258
+ aria-label="Toggle notifications"
259
+ />
260
+ </div>
261
+ <div className="flex items-center justify-between">
262
+ <Label className="text-sm">Auto-save drafts</Label>
263
+ <Toggle
264
+ pressed={preferences.autoSave}
265
+ onPressedChange={(pressed) =>
266
+ setPreferences({ ...preferences, autoSave: pressed })
267
+ }
268
+ variant="outline"
269
+ size="sm"
270
+ aria-label="Toggle auto-save"
271
+ />
272
+ </div>
273
+ </div>
274
+ </div>
275
+
276
+ {/* Action Bar */}
277
+ <div>
278
+ <h3 className="mb-3 text-sm font-medium">Content Actions</h3>
279
+ <div className="flex items-center gap-2 rounded-md border p-3">
280
+ <Toggle
281
+ pressed={actions.liked}
282
+ onPressedChange={(pressed) =>
283
+ setActions({ ...actions, liked: pressed })
284
+ }
285
+ variant="outline"
286
+ size="sm"
287
+ aria-label="Like content"
288
+ >
289
+ <Heart className={`size-4 ${actions.liked ? "fill-current text-red-500" : ""}`} />
290
+ </Toggle>
291
+ <Toggle
292
+ pressed={actions.starred}
293
+ onPressedChange={(pressed) =>
294
+ setActions({ ...actions, starred: pressed })
295
+ }
296
+ variant="outline"
297
+ size="sm"
298
+ aria-label="Star content"
299
+ >
300
+ <Star className={`size-4 ${actions.starred ? "fill-current text-yellow-500" : ""}`} />
301
+ </Toggle>
302
+ <Toggle
303
+ pressed={actions.bookmarked}
304
+ onPressedChange={(pressed) =>
305
+ setActions({ ...actions, bookmarked: pressed })
306
+ }
307
+ variant="outline"
308
+ size="sm"
309
+ aria-label="Bookmark content"
310
+ >
311
+ <Bookmark className={`size-4 ${actions.bookmarked ? "fill-current" : ""}`} />
312
+ </Toggle>
313
+ </div>
314
+ </div>
315
+ </div>
316
+ );
317
+ },
318
+ parameters: {
319
+ docs: {
320
+ description: {
321
+ story: "Practical examples showing how toggles work in real applications: text formatting toolbars, settings panels, and action buttons.",
322
+ },
323
+ },
324
+ },
325
+ };