this.gui 1.0.17 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. package/.storybook/main.js +40 -0
  2. package/.storybook/manager-head.html +13 -0
  3. package/.storybook/manager.js +15 -0
  4. package/.storybook/preview.tsx +54 -0
  5. package/.storybook/vitest.setup.js +6 -0
  6. package/.storybook/withLayout.tsx +18 -0
  7. package/README.md +1 -220
  8. package/dist/GUI.png +0 -0
  9. package/dist/GUI2.png +0 -0
  10. package/dist/favicon.ico +0 -0
  11. package/dist/this-gui.es.js +108493 -4976
  12. package/dist/this-gui.umd.js +239 -44
  13. package/dist/this.GUI.png +0 -0
  14. package/nodes/overall approach.md +93 -0
  15. package/notes/Proyect.md +109 -0
  16. package/package.json +71 -53
  17. package/public/GUI.png +0 -0
  18. package/public/GUI2.png +0 -0
  19. package/public/favicon.ico +0 -0
  20. package/public/this.GUI.png +0 -0
  21. package/src/components/generics/Cards/Gridme.jsx +52 -0
  22. package/src/components/generics/Cards/LilBox.jsx +65 -0
  23. package/src/components/generics/Cards/ModuleCard.jsx +106 -0
  24. package/src/components/generics/Chats/FullChatBot.jsx +223 -0
  25. package/src/components/generics/Code/CodeBlock.jsx +33 -0
  26. package/src/components/generics/Feedback/Callout.jsx +92 -0
  27. package/src/components/generics/Layout/GridX.jsx +29 -0
  28. package/src/components/generics/Layout/Hero2.jsx +132 -0
  29. package/src/components/generics/Layout/PageContainer.jsx +29 -0
  30. package/src/components/generics/Layout/PageDivider.jsx +20 -0
  31. package/src/components/generics/Layout/Section.jsx +43 -0
  32. package/src/components/generics/Layout/SectionHeader.jsx +21 -0
  33. package/src/components/generics/Media/Img.jsx +58 -0
  34. package/src/components/generics/Media/VideoEmbed.jsx +51 -0
  35. package/src/components/generics/Organization/TableOfContents.jsx +51 -0
  36. package/src/components/generics/Organization/Tabs.jsx +45 -0
  37. package/src/components/generics/Text/TextList.jsx +41 -0
  38. package/src/components/generics/Text/TextParagraph.jsx +28 -0
  39. package/src/components/generics/Text/TextQuote.jsx +23 -0
  40. package/src/components/generics/Text/TextTitle.jsx +44 -0
  41. package/src/components/this.me/MeActive.jsx +24 -0
  42. package/src/components/this.me/MeFloating.jsx +183 -0
  43. package/src/components/this.me/MeInactive.jsx +21 -0
  44. package/src/components/this.me/MeListUs.jsx +40 -0
  45. package/src/components/this.me/MeState.jsx +25 -0
  46. package/src/components/this.me/hooks/useMe.js +43 -0
  47. package/src/context/GuiProvider.tsx +243 -0
  48. package/src/gui/atoms/AppBar/AppBar.resolver.tsx +77 -0
  49. package/src/gui/atoms/AppBar/AppBar.stories.tsx +232 -0
  50. package/src/gui/atoms/AppBar/AppBar.tsx +10 -0
  51. package/src/gui/atoms/Box/Box.resolver.tsx +171 -0
  52. package/src/gui/atoms/Box/Box.stories.tsx +271 -0
  53. package/src/gui/atoms/Box/Box.tsx +15 -0
  54. package/src/gui/atoms/Button/Button.resolver.tsx +98 -0
  55. package/src/gui/atoms/Button/Button.stories.tsx +225 -0
  56. package/src/gui/atoms/Button/Button.tsx +40 -0
  57. package/src/gui/atoms/Collapse/Collapse.resolver.tsx +85 -0
  58. package/src/gui/atoms/Collapse/Collapse.stories.tsx +136 -0
  59. package/src/gui/atoms/Collapse/Collapse.tsx +17 -0
  60. package/src/gui/atoms/Divider/Divider.resolver.tsx +95 -0
  61. package/src/gui/atoms/Divider/Divider.stories.tsx +109 -0
  62. package/src/gui/atoms/Divider/Divider.tsx +14 -0
  63. package/src/gui/atoms/Drawer/Drawer.resolver.tsx +116 -0
  64. package/src/gui/atoms/Drawer/Drawer.stories.tsx +229 -0
  65. package/src/gui/atoms/Drawer/Drawer.tsx +8 -0
  66. package/src/gui/atoms/IconButton/IconButton.resolver.tsx +135 -0
  67. package/src/gui/atoms/IconButton/IconButton.stories.tsx +141 -0
  68. package/src/gui/atoms/IconButton/IconButton.tsx +22 -0
  69. package/src/gui/atoms/Link/Link.resolver.tsx +75 -0
  70. package/src/gui/atoms/Link/Link.stories.tsx +164 -0
  71. package/src/gui/atoms/Link/Link.tsx +14 -0
  72. package/src/gui/atoms/List/List.resolver.tsx +95 -0
  73. package/src/gui/atoms/List/List.stories.tsx +143 -0
  74. package/src/gui/atoms/List/List.tsx +20 -0
  75. package/src/gui/atoms/ListItem/ListItem.resolver.tsx +88 -0
  76. package/src/gui/atoms/ListItem/ListItem.stories.tsx +157 -0
  77. package/src/gui/atoms/ListItem/ListItem.tsx +19 -0
  78. package/src/gui/atoms/ListItemButton/ListItemButton.resolver.tsx +208 -0
  79. package/src/gui/atoms/ListItemButton/ListItemButton.stories.tsx +161 -0
  80. package/src/gui/atoms/ListItemButton/ListItemButton.tsx +15 -0
  81. package/src/gui/atoms/ListItemIcon/ListItemIcon.resolver.tsx +102 -0
  82. package/src/gui/atoms/ListItemIcon/ListItemIcon.stories.tsx +135 -0
  83. package/src/gui/atoms/ListItemIcon/ListItemIcon.tsx +11 -0
  84. package/src/gui/atoms/ListItemText/ListItemText.resolver.tsx +112 -0
  85. package/src/gui/atoms/ListItemText/ListItemText.stories.tsx +162 -0
  86. package/src/gui/atoms/ListItemText/ListItemText.tsx +15 -0
  87. package/src/gui/atoms/Menu/Menu.resolver.tsx +112 -0
  88. package/src/gui/atoms/Menu/Menu.stories.tsx +168 -0
  89. package/src/gui/atoms/Menu/Menu.tsx +17 -0
  90. package/src/gui/atoms/MenuItem/MenuItem.resolver.tsx +183 -0
  91. package/src/gui/atoms/MenuItem/MenuItem.stories.tsx +138 -0
  92. package/src/gui/atoms/MenuItem/MenuItem.tsx +14 -0
  93. package/src/gui/atoms/Paper/Paper.resolver.tsx +98 -0
  94. package/src/gui/atoms/Paper/Paper.stories.tsx +191 -0
  95. package/src/gui/atoms/Paper/Paper.tsx +17 -0
  96. package/src/gui/atoms/Stack/Stack.resolver.tsx +94 -0
  97. package/src/gui/atoms/Stack/Stack.stories.tsx +166 -0
  98. package/src/gui/atoms/Stack/Stack.tsx +15 -0
  99. package/src/gui/atoms/Switch/Switch.resolver.tsx +53 -0
  100. package/src/gui/atoms/Switch/Switch.stories.tsx +242 -0
  101. package/src/gui/atoms/Switch/Switch.tsx +22 -0
  102. package/src/gui/atoms/Toolbar/Toolbar.resolver.tsx +60 -0
  103. package/src/gui/atoms/Toolbar/Toolbar.stories.tsx +163 -0
  104. package/src/gui/atoms/Toolbar/Toolbar.tsx +16 -0
  105. package/src/gui/atoms/Tooltip/Tooltip.resolver.tsx +142 -0
  106. package/src/gui/atoms/Tooltip/Tooltip.stories.tsx +118 -0
  107. package/src/gui/atoms/Tooltip/Tooltip.tsx +78 -0
  108. package/src/gui/atoms/Typography/Typography.resolver.tsx +158 -0
  109. package/src/gui/atoms/Typography/Typography.stories.tsx +228 -0
  110. package/src/gui/atoms/Typography/Typography.tsx +27 -0
  111. package/src/gui/atoms.tsx +129 -0
  112. package/src/gui/index.ts +69 -0
  113. package/src/gui/molecules/AppBars/Footer/Footer.resolver.tsx +104 -0
  114. package/src/gui/molecules/AppBars/Footer/Footer.stories.tsx +499 -0
  115. package/src/gui/molecules/AppBars/Footer/Footer.tsx +307 -0
  116. package/src/gui/molecules/AppBars/LeftSidebar/LeftSidebar.resolver.tsx +75 -0
  117. package/src/gui/molecules/AppBars/LeftSidebar/LeftSidebar.stories.tsx +61 -0
  118. package/src/gui/molecules/AppBars/LeftSidebar/LeftSidebar.tsx +511 -0
  119. package/src/gui/molecules/AppBars/LeftSidebar/SidebarToggleButton.tsx +51 -0
  120. package/src/gui/molecules/AppBars/RightSidebar/RightSidebar.resolver.tsx +97 -0
  121. package/src/gui/molecules/AppBars/RightSidebar/RightSidebar.stories.tsx +294 -0
  122. package/src/gui/molecules/AppBars/RightSidebar/RightSidebar.tsx +295 -0
  123. package/src/gui/molecules/AppBars/StickyOptions/StickyOptionsTop.stories.tsx +480 -0
  124. package/src/gui/molecules/AppBars/StickyOptions/StickyOptionsTop.tsx +484 -0
  125. package/src/gui/molecules/AppBars/TopBar/TopBar.resolver.tsx +84 -0
  126. package/src/gui/molecules/AppBars/TopBar/TopBar.stories.tsx +297 -0
  127. package/src/gui/molecules/AppBars/TopBar/TopBar.tsx +299 -0
  128. package/src/gui/molecules/Utilities/ThemeModeToggle/ThemeModeToggle.resolver.tsx +72 -0
  129. package/src/gui/molecules/Utilities/ThemeModeToggle/ThemeModeToggle.stories.tsx +154 -0
  130. package/src/gui/molecules/Utilities/ThemeModeToggle/ThemeModeToggle.tsx +100 -0
  131. package/src/gui/molecules/Utilities/ThemeSelector.jsx +281 -0
  132. package/src/gui/utils/nodeID.ts +8 -0
  133. package/src/index.js +111 -0
  134. package/src/registry/GuiRegistry.ts +19 -0
  135. package/src/registry/factory.ts +12 -0
  136. package/src/registry/index.ts +3 -0
  137. package/src/registry/types.ts +6 -0
  138. package/src/stories/01.Home.mdx +22 -0
  139. package/src/stories/02.Understanding.This.GUI.md +149 -0
  140. package/src/stories/03.Themes.mdx +235 -0
  141. package/src/stories/04.GuiProvider.md +126 -0
  142. package/src/stories/04.GuiProvider.mdx +129 -0
  143. package/src/stories/Theme/BreakPointsAndGrids.stories.jsx +185 -0
  144. package/src/stories/Theme/Colors.stories.jsx +245 -0
  145. package/src/stories/Theme/Icons.stories.jsx +313 -0
  146. package/src/stories/Theme/Motion.stories.jsx +206 -0
  147. package/src/stories/Theme/ShadowAndElevation.stories.jsx +95 -0
  148. package/src/stories/Theme/SpacingAndRadius.stories.jsx +129 -0
  149. package/src/stories/Theme/Typography.stories.jsx +211 -0
  150. package/src/stories/assets/this.GUI.png +0 -0
  151. package/src/templates/BrowserExtension.jsx +56 -0
  152. package/src/templates/Layout.tsx +36 -0
  153. package/src/templates/Minimal.jsx +123 -0
  154. package/src/templates/Shell/Shell.jsx +107 -0
  155. package/src/themes/fromTokens.ts +352 -0
  156. package/src/themes/icons/Icon.tsx +137 -0
  157. package/src/themes/icons/packs/Lucide.ts +72 -0
  158. package/src/themes/icons/packs/Material.ts +87 -0
  159. package/src/themes/icons/registry.tsx +178 -0
  160. package/src/themes/index.js +116 -0
  161. package/src/themes/theme.d.ts +116 -0
  162. package/src/themes/tokens/global.tokens.json +107 -0
  163. package/src/themes/tokens/neurons/dark.tokens.json +45 -0
  164. package/src/themes/tokens/neurons/light.tokens.json +51 -0
  165. package/src/themes/tokens/neurons/manifest.json +23 -0
  166. package/src/types/theme.d.ts +32 -0
  167. package/src/types/viewport.ts +132 -0
  168. package/tsconfig.json +24 -0
  169. package/vite.config.js +74 -0
  170. package/dist/style.css +0 -1
  171. package/src/App.jsx +0 -63
  172. package/src/MdxProvider.jsx +0 -20
  173. package/src/Page.jsx +0 -28
  174. package/src/SiteBuilder.jsx +0 -39
  175. package/src/example.json +0 -43
  176. package/src/index.mdx +0 -164
  177. package/src/main.jsx +0 -15
  178. package/src/scripts/ComponentRegistry.js +0 -70
  179. package/src/scripts/logASCIIArt.js +0 -12
  180. package/src/scripts/postinstall.js +0 -100
  181. package/src/scripts/renderComponents.js +0 -11
  182. package/src/stories/Atoms/Alert/Alert.css +0 -211
  183. package/src/stories/Atoms/Alert/Alert.jsx +0 -56
  184. package/src/stories/Atoms/Alert/Alert.stories.jsx +0 -167
  185. package/src/stories/Atoms/Audio/Audio.css +0 -259
  186. package/src/stories/Atoms/Audio/Audio.jsx +0 -216
  187. package/src/stories/Atoms/Audio/Audio.stories.jsx +0 -191
  188. package/src/stories/Atoms/Badge/Badge.css +0 -249
  189. package/src/stories/Atoms/Badge/Badge.jsx +0 -54
  190. package/src/stories/Atoms/Badge/Badge.stories.jsx +0 -121
  191. package/src/stories/Atoms/Button/Button.css +0 -131
  192. package/src/stories/Atoms/Button/Button.jsx +0 -47
  193. package/src/stories/Atoms/Button/Button.stories.jsx +0 -184
  194. package/src/stories/Atoms/Caption/Caption.css +0 -169
  195. package/src/stories/Atoms/Caption/Caption.jsx +0 -72
  196. package/src/stories/Atoms/Caption/Caption.stories.jsx +0 -207
  197. package/src/stories/Atoms/Checkbox/Checkbox.css +0 -182
  198. package/src/stories/Atoms/Checkbox/Checkbox.jsx +0 -83
  199. package/src/stories/Atoms/Checkbox/Checkbox.stories.jsx +0 -112
  200. package/src/stories/Atoms/Container/Container.css +0 -89
  201. package/src/stories/Atoms/Container/Container.jsx +0 -54
  202. package/src/stories/Atoms/Container/Container.stories.jsx +0 -104
  203. package/src/stories/Atoms/Divider/Divider.css +0 -147
  204. package/src/stories/Atoms/Divider/Divider.jsx +0 -62
  205. package/src/stories/Atoms/Divider/Divider.stories.jsx +0 -105
  206. package/src/stories/Atoms/Grid/Grid.css +0 -160
  207. package/src/stories/Atoms/Grid/Grid.jsx +0 -43
  208. package/src/stories/Atoms/Grid/Grid.stories.jsx +0 -84
  209. package/src/stories/Atoms/Heading/Heading.css +0 -112
  210. package/src/stories/Atoms/Heading/Heading.jsx +0 -69
  211. package/src/stories/Atoms/Heading/Heading.stories.jsx +0 -130
  212. package/src/stories/Atoms/Icon/Icon.css +0 -240
  213. package/src/stories/Atoms/Icon/Icon.jsx +0 -80
  214. package/src/stories/Atoms/Icon/Icon.stories.jsx +0 -177
  215. package/src/stories/Atoms/Image/Image.css +0 -245
  216. package/src/stories/Atoms/Image/Image.jsx +0 -175
  217. package/src/stories/Atoms/Image/Image.stories.jsx +0 -332
  218. package/src/stories/Atoms/Label/Label.css +0 -171
  219. package/src/stories/Atoms/Label/Label.jsx +0 -71
  220. package/src/stories/Atoms/Label/Label.stories.jsx +0 -180
  221. package/src/stories/Atoms/Link/Link.css +0 -71
  222. package/src/stories/Atoms/Link/Link.jsx +0 -82
  223. package/src/stories/Atoms/Link/Link.stories.jsx +0 -153
  224. package/src/stories/Atoms/Loader/Loader.css +0 -106
  225. package/src/stories/Atoms/Loader/Loader.jsx +0 -58
  226. package/src/stories/Atoms/Loader/Loader.stories.jsx +0 -99
  227. package/src/stories/Atoms/Logo/Logo.css +0 -94
  228. package/src/stories/Atoms/Logo/Logo.jsx +0 -53
  229. package/src/stories/Atoms/Logo/Logo.stories.jsx +0 -120
  230. package/src/stories/Atoms/Paragraph/Paragraph.css +0 -180
  231. package/src/stories/Atoms/Paragraph/Paragraph.jsx +0 -77
  232. package/src/stories/Atoms/Paragraph/Paragraph.stories.jsx +0 -143
  233. package/src/stories/Atoms/ProgressBar/ProgressBar.css +0 -127
  234. package/src/stories/Atoms/ProgressBar/ProgressBar.jsx +0 -40
  235. package/src/stories/Atoms/ProgressBar/ProgressBar.stories.jsx +0 -86
  236. package/src/stories/Atoms/RadioButton/RadioButton.css +0 -130
  237. package/src/stories/Atoms/RadioButton/RadioButton.jsx +0 -87
  238. package/src/stories/Atoms/RadioButton/RadioButton.stories.jsx +0 -113
  239. package/src/stories/Atoms/Range/Range.css +0 -169
  240. package/src/stories/Atoms/Range/Range.jsx +0 -87
  241. package/src/stories/Atoms/Range/Range.stories.jsx +0 -110
  242. package/src/stories/Atoms/Section/Section.css +0 -268
  243. package/src/stories/Atoms/Section/Section.jsx +0 -63
  244. package/src/stories/Atoms/Section/Section.stories.jsx +0 -46
  245. package/src/stories/Atoms/Select/Select.css +0 -87
  246. package/src/stories/Atoms/Select/Select.jsx +0 -73
  247. package/src/stories/Atoms/Select/Select.stories.jsx +0 -109
  248. package/src/stories/Atoms/Slider/Slider.css +0 -90
  249. package/src/stories/Atoms/Slider/Slider.jsx +0 -129
  250. package/src/stories/Atoms/Slider/Slider.stories.jsx +0 -90
  251. package/src/stories/Atoms/Snackbar/Snackbar.css +0 -313
  252. package/src/stories/Atoms/Snackbar/Snackbar.jsx +0 -72
  253. package/src/stories/Atoms/Snackbar/Snackbar.stories.jsx +0 -78
  254. package/src/stories/Atoms/Spacer/Spacer.css +0 -114
  255. package/src/stories/Atoms/Spacer/Spacer.jsx +0 -35
  256. package/src/stories/Atoms/Spacer/Spacer.stories.jsx +0 -61
  257. package/src/stories/Atoms/Spinner/Spinner.css +0 -110
  258. package/src/stories/Atoms/Spinner/Spinner.jsx +0 -65
  259. package/src/stories/Atoms/Spinner/Spinner.stories.jsx +0 -58
  260. package/src/stories/Atoms/Tag/Tag.css +0 -112
  261. package/src/stories/Atoms/Tag/Tag.jsx +0 -75
  262. package/src/stories/Atoms/Tag/Tag.stories.jsx +0 -67
  263. package/src/stories/Atoms/TextArea/TextArea.css +0 -99
  264. package/src/stories/Atoms/TextArea/TextArea.jsx +0 -118
  265. package/src/stories/Atoms/TextArea/TextArea.stories.jsx +0 -36
  266. package/src/stories/Atoms/TextInput/TextInput.css +0 -102
  267. package/src/stories/Atoms/TextInput/TextInput.jsx +0 -133
  268. package/src/stories/Atoms/TextInput/TextInput.stories.jsx +0 -69
  269. package/src/stories/Atoms/Toggle/Toggle.css +0 -118
  270. package/src/stories/Atoms/Toggle/Toggle.jsx +0 -69
  271. package/src/stories/Atoms/Toggle/Toggle.stories.jsx +0 -35
  272. package/src/stories/Atoms/Tooltip/Tooltip.css +0 -383
  273. package/src/stories/Atoms/Tooltip/Tooltip.jsx +0 -46
  274. package/src/stories/Atoms/Tooltip/Tooltip.stories.jsx +0 -52
  275. package/src/stories/Atoms/Video/Video.css +0 -39
  276. package/src/stories/Atoms/Video/Video.jsx +0 -78
  277. package/src/stories/Atoms/Video/Video.stories.jsx +0 -41
  278. package/src/stories/Atoms/index.js +0 -72
  279. package/src/stories/Atoms/meta_Atoms.js +0 -51
  280. package/src/stories/Components.js +0 -198
  281. package/src/stories/Getting Started.mdx +0 -239
  282. package/src/stories/Layouts/Accordion/Accordion.css +0 -293
  283. package/src/stories/Layouts/Accordion/Accordion.jsx +0 -74
  284. package/src/stories/Layouts/Accordion/Accordion.stories.jsx +0 -39
  285. package/src/stories/Layouts/Flexbox/Flexbox.css +0 -16
  286. package/src/stories/Layouts/Flexbox/Flexbox.jsx +0 -11
  287. package/src/stories/Layouts/Flexbox/Flexbox.stories.jsx +0 -28
  288. package/src/stories/Layouts/Footer/Footer.css +0 -16
  289. package/src/stories/Layouts/Footer/Footer.jsx +0 -31
  290. package/src/stories/Layouts/Footer/Footer.stories.jsx +0 -28
  291. package/src/stories/Layouts/Header/Header.css +0 -16
  292. package/src/stories/Layouts/Header/Header.jsx +0 -31
  293. package/src/stories/Layouts/Header/Header.stories.jsx +0 -28
  294. package/src/stories/Layouts/HeroBanner/HeroBanner.css +0 -16
  295. package/src/stories/Layouts/HeroBanner/HeroBanner.jsx +0 -31
  296. package/src/stories/Layouts/HeroBanner/HeroBanner.stories.jsx +0 -28
  297. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.css +0 -16
  298. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.jsx +0 -31
  299. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.stories.jsx +0 -28
  300. package/src/stories/Layouts/Pagination/Pagination.css +0 -16
  301. package/src/stories/Layouts/Pagination/Pagination.jsx +0 -31
  302. package/src/stories/Layouts/Pagination/Pagination.stories.jsx +0 -28
  303. package/src/stories/Layouts/Sidebar/Sidebar.css +0 -16
  304. package/src/stories/Layouts/Sidebar/Sidebar.jsx +0 -71
  305. package/src/stories/Layouts/Sidebar/Sidebar.stories.jsx +0 -28
  306. package/src/stories/Layouts/Tabs/Tabs.css +0 -16
  307. package/src/stories/Layouts/Tabs/Tabs.jsx +0 -31
  308. package/src/stories/Layouts/Tabs/Tabs.stories.jsx +0 -28
  309. package/src/stories/Layouts/index.js +0 -25
  310. package/src/stories/Layouts/meta_Layouts.js +0 -28
  311. package/src/stories/MDX.mdx +0 -118
  312. package/src/stories/Miscellaneous/Miscellaneous.js +0 -24
  313. package/src/stories/Molecules/Accordion/Accordion.css +0 -4
  314. package/src/stories/Molecules/Accordion/Accordion.jsx +0 -25
  315. package/src/stories/Molecules/Accordion/Accordion.stories.jsx +0 -20
  316. package/src/stories/Molecules/AudioPlayer/AudioPlayer.css +0 -97
  317. package/src/stories/Molecules/AudioPlayer/AudioPlayer.jsx +0 -244
  318. package/src/stories/Molecules/AudioPlayer/AudioPlayer.stories.jsx +0 -55
  319. package/src/stories/Molecules/AvatarWithName/AvatarWithName.css +0 -130
  320. package/src/stories/Molecules/AvatarWithName/AvatarWithName.jsx +0 -80
  321. package/src/stories/Molecules/AvatarWithName/AvatarWithName.stories.jsx +0 -20
  322. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.css +0 -147
  323. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.jsx +0 -51
  324. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.stories.jsx +0 -36
  325. package/src/stories/Molecules/ButtonGroup/ButtonGroup.css +0 -465
  326. package/src/stories/Molecules/ButtonGroup/ButtonGroup.jsx +0 -47
  327. package/src/stories/Molecules/ButtonGroup/ButtonGroup.stories.jsx +0 -44
  328. package/src/stories/Molecules/Card/Card.css +0 -41
  329. package/src/stories/Molecules/Card/Card.jsx +0 -92
  330. package/src/stories/Molecules/Card/Card.stories.jsx +0 -34
  331. package/src/stories/Molecules/ComparisonTable/ComparisonTable.css +0 -35
  332. package/src/stories/Molecules/ComparisonTable/ComparisonTable.jsx +0 -104
  333. package/src/stories/Molecules/ComparisonTable/ComparisonTable.stories.jsx +0 -81
  334. package/src/stories/Molecules/DataTable/DataTable.css +0 -4
  335. package/src/stories/Molecules/DataTable/DataTable.jsx +0 -25
  336. package/src/stories/Molecules/DataTable/DataTable.stories.jsx +0 -20
  337. package/src/stories/Molecules/Dropdown/Dropdown.css +0 -192
  338. package/src/stories/Molecules/Dropdown/Dropdown.jsx +0 -96
  339. package/src/stories/Molecules/Dropdown/Dropdown.stories.jsx +0 -45
  340. package/src/stories/Molecules/FileUpload/FileUpload.css +0 -4
  341. package/src/stories/Molecules/FileUpload/FileUpload.jsx +0 -25
  342. package/src/stories/Molecules/FileUpload/FileUpload.stories.jsx +0 -20
  343. package/src/stories/Molecules/FormField/FormField.css +0 -4
  344. package/src/stories/Molecules/FormField/FormField.jsx +0 -25
  345. package/src/stories/Molecules/FormField/FormField.stories.jsx +0 -20
  346. package/src/stories/Molecules/Header/Header.css +0 -35
  347. package/src/stories/Molecules/Header/Header.jsx +0 -76
  348. package/src/stories/Molecules/Header/Header.stories.jsx +0 -28
  349. package/src/stories/Molecules/IconButton/IconButton.css +0 -4
  350. package/src/stories/Molecules/IconButton/IconButton.jsx +0 -25
  351. package/src/stories/Molecules/IconButton/IconButton.stories.jsx +0 -20
  352. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.css +0 -4
  353. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.jsx +0 -25
  354. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.stories.jsx +0 -20
  355. package/src/stories/Molecules/InputGroup/InputGroup.css +0 -4
  356. package/src/stories/Molecules/InputGroup/InputGroup.jsx +0 -25
  357. package/src/stories/Molecules/InputGroup/InputGroup.stories.jsx +0 -20
  358. package/src/stories/Molecules/InputWithLabel/InputWithLabel.css +0 -4
  359. package/src/stories/Molecules/InputWithLabel/InputWithLabel.jsx +0 -25
  360. package/src/stories/Molecules/InputWithLabel/InputWithLabel.stories.jsx +0 -20
  361. package/src/stories/Molecules/List/List.css +0 -4
  362. package/src/stories/Molecules/List/List.jsx +0 -25
  363. package/src/stories/Molecules/List/List.stories.jsx +0 -20
  364. package/src/stories/Molecules/MediaCard/MediaCard.css +0 -4
  365. package/src/stories/Molecules/MediaCard/MediaCard.jsx +0 -25
  366. package/src/stories/Molecules/MediaCard/MediaCard.stories.jsx +0 -20
  367. package/src/stories/Molecules/Modal/Modal.css +0 -4
  368. package/src/stories/Molecules/Modal/Modal.jsx +0 -25
  369. package/src/stories/Molecules/Modal/Modal.stories.jsx +0 -20
  370. package/src/stories/Molecules/Navbar/Navbar.css +0 -91
  371. package/src/stories/Molecules/Navbar/Navbar.jsx +0 -82
  372. package/src/stories/Molecules/Navbar/Navbar.stories.jsx +0 -70
  373. package/src/stories/Molecules/Notification/Notification.css +0 -4
  374. package/src/stories/Molecules/Notification/Notification.jsx +0 -25
  375. package/src/stories/Molecules/Notification/Notification.stories.jsx +0 -20
  376. package/src/stories/Molecules/PricingTable/PricingTable.css +0 -4
  377. package/src/stories/Molecules/PricingTable/PricingTable.jsx +0 -25
  378. package/src/stories/Molecules/PricingTable/PricingTable.stories.jsx +0 -20
  379. package/src/stories/Molecules/SearchBar/SearchBar.css +0 -69
  380. package/src/stories/Molecules/SearchBar/SearchBar.jsx +0 -73
  381. package/src/stories/Molecules/SearchBar/SearchBar.stories.jsx +0 -29
  382. package/src/stories/Molecules/SelectTheme/SelectTheme.css +0 -25
  383. package/src/stories/Molecules/SelectTheme/SelectTheme.jsx +0 -22
  384. package/src/stories/Molecules/SelectTheme/SelectTheme.stories.jsx +0 -24
  385. package/src/stories/Molecules/Sidebar/Sidebar.css +0 -67
  386. package/src/stories/Molecules/Sidebar/Sidebar.jsx +0 -80
  387. package/src/stories/Molecules/Sidebar/Sidebar.stories.jsx +0 -35
  388. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.css +0 -4
  389. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.jsx +0 -25
  390. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.stories.jsx +0 -20
  391. package/src/stories/Molecules/index.js +0 -58
  392. package/src/stories/Molecules/meta_Molecules.js +0 -47
  393. package/src/stories/Organisms/Profile/UserFriends/UserFriends.context.jsx +0 -15
  394. package/src/stories/Organisms/Profile/UserFriends/UserFriends.css +0 -4
  395. package/src/stories/Organisms/Profile/UserFriends/UserFriends.jsx +0 -13
  396. package/src/stories/Organisms/Profile/UserFriends/UserFriends.stories.jsx +0 -26
  397. package/src/stories/Organisms/Profile/UserPosts/UserPosts.context.jsx +0 -15
  398. package/src/stories/Organisms/Profile/UserPosts/UserPosts.css +0 -4
  399. package/src/stories/Organisms/Profile/UserPosts/UserPosts.jsx +0 -13
  400. package/src/stories/Organisms/Profile/UserPosts/UserPosts.stories.jsx +0 -26
  401. package/src/stories/Organisms/Profile/UserProfile/UserProfile.context.jsx +0 -15
  402. package/src/stories/Organisms/Profile/UserProfile/UserProfile.css +0 -4
  403. package/src/stories/Organisms/Profile/UserProfile/UserProfile.jsx +0 -13
  404. package/src/stories/Organisms/Profile/UserProfile/UserProfile.stories.jsx +0 -26
  405. package/src/stories/Organisms/meta_Organisms.js +0 -39
  406. package/src/stories/Pages/Page/Page.css +0 -69
  407. package/src/stories/Pages/Page/Page.jsx +0 -69
  408. package/src/stories/Pages/Page/Page.stories.js +0 -26
  409. package/src/stories/Pages/Page/Pages.js +0 -31
  410. package/src/stories/Templates/AdminDashboard/AdminDashboard.css +0 -7
  411. package/src/stories/Templates/AdminDashboard/AdminDashboard.jsx +0 -24
  412. package/src/stories/Templates/AdminDashboard/AdminDashboard.stories.jsx +0 -20
  413. package/src/stories/Templates/CallToAction/CallToAction.css +0 -7
  414. package/src/stories/Templates/CallToAction/CallToAction.jsx +0 -24
  415. package/src/stories/Templates/CallToAction/CallToAction.stories.jsx +0 -20
  416. package/src/stories/Templates/FeaturesList/FeaturesList.css +0 -7
  417. package/src/stories/Templates/FeaturesList/FeaturesList.jsx +0 -24
  418. package/src/stories/Templates/FeaturesList/FeaturesList.stories.jsx +0 -20
  419. package/src/stories/Templates/FormSection/FormSection.css +0 -7
  420. package/src/stories/Templates/FormSection/FormSection.jsx +0 -24
  421. package/src/stories/Templates/FormSection/FormSection.stories.jsx +0 -20
  422. package/src/stories/Templates/HeroSection/HeroSection.css +0 -7
  423. package/src/stories/Templates/HeroSection/HeroSection.jsx +0 -24
  424. package/src/stories/Templates/HeroSection/HeroSection.stories.jsx +0 -20
  425. package/src/stories/Templates/LocationInfo/LocationInfo.css +0 -7
  426. package/src/stories/Templates/LocationInfo/LocationInfo.jsx +0 -24
  427. package/src/stories/Templates/LocationInfo/LocationInfo.stories.jsx +0 -20
  428. package/src/stories/Templates/ProductPage/ProductPage.css +0 -7
  429. package/src/stories/Templates/ProductPage/ProductPage.jsx +0 -24
  430. package/src/stories/Templates/ProductPage/ProductPage.stories.jsx +0 -20
  431. package/src/stories/Templates/RegistrationPage/RegistrationPage.css +0 -7
  432. package/src/stories/Templates/RegistrationPage/RegistrationPage.jsx +0 -24
  433. package/src/stories/Templates/RegistrationPage/RegistrationPage.stories.jsx +0 -20
  434. package/src/stories/Templates/ShoppingCart/ShoppingCart.css +0 -7
  435. package/src/stories/Templates/ShoppingCart/ShoppingCart.jsx +0 -24
  436. package/src/stories/Templates/ShoppingCart/ShoppingCart.stories.jsx +0 -20
  437. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.css +0 -7
  438. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.jsx +0 -24
  439. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.stories.jsx +0 -20
  440. package/src/stories/Templates/SignInPage/SignInPage.css +0 -7
  441. package/src/stories/Templates/SignInPage/SignInPage.jsx +0 -24
  442. package/src/stories/Templates/SignInPage/SignInPage.stories.jsx +0 -20
  443. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.css +0 -7
  444. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.jsx +0 -24
  445. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.stories.jsx +0 -20
  446. package/src/stories/Templates/Testimonials/Testimonials.css +0 -7
  447. package/src/stories/Templates/Testimonials/Testimonials.jsx +0 -24
  448. package/src/stories/Templates/Testimonials/Testimonials.stories.jsx +0 -20
  449. package/src/stories/Templates/index.js +0 -33
  450. package/src/stories/Templates/meta_Templates.js +0 -29
  451. package/src/stories/assets/accessibility.png +0 -0
  452. package/src/stories/assets/accessibility.svg +0 -1
  453. package/src/stories/assets/addon-library.png +0 -0
  454. package/src/stories/assets/assets.png +0 -0
  455. package/src/stories/assets/avif-test-image.avif +0 -0
  456. package/src/stories/assets/context.png +0 -0
  457. package/src/stories/assets/discord.svg +0 -1
  458. package/src/stories/assets/docs.png +0 -0
  459. package/src/stories/assets/figma-plugin.png +0 -0
  460. package/src/stories/assets/github.svg +0 -1
  461. package/src/stories/assets/logo.png +0 -0
  462. package/src/stories/assets/logo.svg +0 -106
  463. package/src/stories/assets/share.png +0 -0
  464. package/src/stories/assets/styling.png +0 -0
  465. package/src/stories/assets/test.svg +0 -3
  466. package/src/stories/assets/testing.png +0 -0
  467. package/src/stories/assets/theming.png +0 -0
  468. package/src/stories/assets/tutorials.svg +0 -1
  469. package/src/stories/assets/youtube.svg +0 -1
  470. package/src/themes/README_Styles.md +0 -301
  471. package/src/themes/ThemeProvider.jsx +0 -61
  472. package/src/themes/styles/github/dark.css +0 -0
  473. package/src/themes/styles/github/light.css +0 -0
  474. package/src/themes/styles/neurons/dark.css +0 -247
  475. package/src/themes/styles/neurons/light.css +0 -280
  476. /package/{src/themes/styles/dracula/dark.css → .storybook/preview-head.html} +0 -0
  477. /package/src/{themes/styles/dracula/light.css → components/this.me/MeCard.jsx} +0 -0
@@ -0,0 +1,242 @@
1
+ // src/gui/atoms/Switch/Switch.stories.tsx
2
+ import * as React from 'react';
3
+ import type { Meta, StoryObj } from '@storybook/react';
4
+ import { MemoryRouter } from 'react-router-dom';
5
+ import { Box, Stack, Typography, Switch } from '@/gui/atoms';
6
+ import { FormControlLabel } from '@mui/material';
7
+ import GuiProvider from '@/context/GuiProvider';
8
+
9
+ // ======================= Meta =======================
10
+ const meta: Meta<typeof Switch> = {
11
+ title: 'Atoms/Switch',
12
+ component: Switch,
13
+ tags: ['autodocs'],
14
+ decorators: [
15
+ (Story) => (
16
+ <MemoryRouter>
17
+ <GuiProvider>
18
+ <Box sx={{ p: 2 }}>
19
+ <Story />
20
+ </Box>
21
+ </GuiProvider>
22
+ </MemoryRouter>
23
+ ),
24
+ ],
25
+ parameters: {
26
+ docs: {
27
+ description: {
28
+ component: `
29
+ **Switch (This.GUI atom)** is a thin wrapper around MUI's \`Switch\`.
30
+ It keeps MUI behavior, styling, and typing, but you import it from \`@/gui/atoms\` to keep your app decoupled from MUI.
31
+
32
+ ---
33
+
34
+ # Usage
35
+
36
+ ## React (imperative)
37
+ ~~~tsx
38
+ import { Switch } from '@/gui/atoms';
39
+
40
+ export function Example() {
41
+ const [enabled, setEnabled] = React.useState(false);
42
+ return (
43
+ <Switch
44
+ checked={enabled}
45
+ onChange={(_, v) => setEnabled(v)}
46
+ color="primary"
47
+ size="medium"
48
+ />
49
+ );
50
+ }
51
+ ~~~
52
+
53
+ With an accessible label (MUI way):
54
+ ~~~tsx
55
+ import { FormControlLabel } from '@mui/material';
56
+
57
+ <FormControlLabel control={<Switch defaultChecked />} label="Enable notifications" />
58
+ ~~~
59
+
60
+ ---
61
+
62
+ ## Declarative (resolver)
63
+ If you’re rendering via a JSON/registry resolver, you can pass the same props:
64
+
65
+ ~~~json
66
+ {
67
+ "type": "Switch",
68
+ "props": {
69
+ "label": "Enable feature",
70
+ "defaultChecked": true,
71
+ "color": "primary",
72
+ "size": "small",
73
+ "id": "feat-toggle",
74
+ "sx": { "ml": 1 }
75
+ }
76
+ }
77
+ ~~~
78
+
79
+ The resolver supports:
80
+ - All native MUI Switch props (\`checked\`, \`defaultChecked\`, \`onChange\`, \`color\`, \`size\`, \`disabled\`, \`edge\`, \`inputProps\`, \`sx\`, etc.).
81
+ - \`label?: ReactNode\` and \`labelPlacement?: 'start' | 'end' | 'top' | 'bottom'\` (wraps in \`FormControlLabel\` when present).
82
+ - \`id\`, \`className\`, \`data-testid\` passthrough for testing and DOM hooks.
83
+
84
+ ---
85
+ `,
86
+ },
87
+ },
88
+ },
89
+ argTypes: {
90
+ checked: {
91
+ control: 'boolean',
92
+ description: 'Controlled state. Use with onChange.',
93
+ table: { category: 'Behavior' },
94
+ },
95
+ defaultChecked: {
96
+ control: 'boolean',
97
+ description: 'Uncontrolled initial state.',
98
+ table: { category: 'Behavior' },
99
+ },
100
+ disabled: {
101
+ control: 'boolean',
102
+ table: { category: 'Behavior' },
103
+ },
104
+ color: {
105
+ control: 'select',
106
+ options: ['primary', 'secondary', 'default'],
107
+ table: { category: 'Appearance' },
108
+ },
109
+ size: {
110
+ control: 'radio',
111
+ options: ['small', 'medium'],
112
+ description: 'Same as MUI Switch (no large by default).',
113
+ table: { category: 'Appearance' },
114
+ },
115
+ edge: {
116
+ control: 'radio',
117
+ options: [false, 'start', 'end'],
118
+ table: { category: 'Appearance' },
119
+ },
120
+ sx: { table: { category: 'Style' } },
121
+ id: { table: { category: 'DOM' } },
122
+ className: { table: { category: 'DOM' } },
123
+ // Not useful to control live in SB
124
+ onChange: { table: { disable: true } },
125
+ inputProps: { table: { disable: true } },
126
+ },
127
+ args: {
128
+ defaultChecked: false,
129
+ color: 'primary',
130
+ size: 'medium',
131
+ edge: false,
132
+ },
133
+ };
134
+ export default meta;
135
+
136
+ type Story = StoryObj<typeof Switch>;
137
+
138
+ // ======================= Stories =======================
139
+
140
+ export const Playground: Story = {
141
+ render: (args) => <Switch {...args} />,
142
+ };
143
+
144
+ export const LabeledVariants: Story = {
145
+ name: 'With label & placement',
146
+ render: () => (
147
+ <Stack spacing={2}>
148
+ <FormControlLabel control={<Switch defaultChecked />} label="End (default)" />
149
+ <FormControlLabel control={<Switch defaultChecked />} label="Start" labelPlacement="start" />
150
+ <FormControlLabel control={<Switch />} label="Top" labelPlacement="top" />
151
+ <FormControlLabel control={<Switch />} label="Bottom" labelPlacement="bottom" />
152
+ </Stack>
153
+ ),
154
+ parameters: {
155
+ docs: {
156
+ description: {
157
+ story:
158
+ 'When `label` is present, the atom wraps the control with `FormControlLabel`. Use `labelPlacement` to position it.',
159
+ },
160
+ },
161
+ },
162
+ };
163
+
164
+ export const SizesAndColors: Story = {
165
+ name: 'Sizes & colors',
166
+ render: () => (
167
+ <Stack spacing={2}>
168
+ <Stack direction="row" spacing={2} alignItems="center">
169
+ <Typography variant="body2" sx={{ minWidth: 88 }}>small</Typography>
170
+ <Switch size="small" color="default" defaultChecked />
171
+ <Switch size="small" color="primary" defaultChecked />
172
+ <Switch size="small" color="secondary" defaultChecked />
173
+ </Stack>
174
+ <Stack direction="row" spacing={2} alignItems="center">
175
+ <Typography variant="body2" sx={{ minWidth: 88 }}>medium</Typography>
176
+ <Switch size="medium" color="default" defaultChecked />
177
+ <Switch size="medium" color="primary" defaultChecked />
178
+ <Switch size="medium" color="secondary" defaultChecked />
179
+ </Stack>
180
+ </Stack>
181
+ ),
182
+ };
183
+
184
+ export const ControlledExample: Story = {
185
+ name: 'Controlled (React state)',
186
+ render: () => {
187
+ const [on, setOn] = React.useState(false);
188
+ return (
189
+ <Stack spacing={1.5}>
190
+ <Typography variant="body2">Value: <b>{on ? 'true' : 'false'}</b></Typography>
191
+ <FormControlLabel
192
+ control={
193
+ <Switch
194
+ checked={on}
195
+ onChange={(_, v) => setOn(v)}
196
+ color={on ? 'primary' : 'secondary'}
197
+ />
198
+ }
199
+ label="Controlled switch"
200
+ />
201
+ </Stack>
202
+ );
203
+ },
204
+ parameters: {
205
+ docs: {
206
+ description: {
207
+ story:
208
+ 'Classic controlled pattern: bind `checked` and update via `onChange`. You can also change appearance based on state.',
209
+ },
210
+ },
211
+ },
212
+ };
213
+
214
+ export const EdgeAndSx: Story = {
215
+ name: 'Edge & custom sx',
216
+ render: () => (
217
+ <Stack spacing={2}>
218
+ <FormControlLabel control={<Switch edge="start" defaultChecked />} label="Edge start" />
219
+ <FormControlLabel
220
+ control={
221
+ <Switch
222
+ defaultChecked
223
+ sx={{
224
+ '& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track': {
225
+ opacity: 0.7,
226
+ },
227
+ }}
228
+ />
229
+ }
230
+ label="Custom sx"
231
+ />
232
+ </Stack>
233
+ ),
234
+ parameters: {
235
+ docs: {
236
+ description: {
237
+ story:
238
+ 'Pass any `sx` overrides exactly as you would with MUI. Useful for fine-grained tuning without creating a new variant.',
239
+ },
240
+ },
241
+ },
242
+ };
@@ -0,0 +1,22 @@
1
+ import * as React from 'react';
2
+ import MuiSwitch from '@mui/material/Switch';
3
+ import type { SwitchProps as MuiSwitchProps } from '@mui/material/Switch';
4
+ /**
5
+ * Switch (This.GUI primitive)
6
+ * ----------------------------------------
7
+ * Thin wrapper over MUI's `Switch`.
8
+ * - Non‑polymorphic (same as MUI): forwards ref to the root element.
9
+ * - Preserves all MUI props (`checked`, `onChange`, `size`, `color`, etc.).
10
+ *
11
+ * Usage:
12
+ * import { Switch } from '@/gui/atoms';
13
+ * <Switch checked={on} onChange={(e) => setOn(e.target.checked)} size="small" />
14
+ */
15
+
16
+ // Re-export MUI's prop types so consumers can import from our surface.
17
+ export type SwitchProps = MuiSwitchProps;
18
+ const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(function Switch(props, ref) {
19
+ return <MuiSwitch ref={ref} {...props} />;
20
+ });
21
+ export default Switch;
22
+ export type { MuiSwitchProps };
@@ -0,0 +1,60 @@
1
+ // src/gui/atoms/Toolbar/Toolbar.resolver.tsx
2
+ import * as React from 'react';
3
+ import Toolbar from './Toolbar';
4
+ import type { RegistryEntry } from '@/registry/types';
5
+ import type { SxProps, Theme } from '@mui/material/styles';
6
+ import { ensureNodeId } from '@/gui/utils/nodeID';
7
+
8
+ type ToolbarSpec = {
9
+ type: 'Toolbar';
10
+ props?: {
11
+ /** Children content (text or nodes) */
12
+ children?: React.ReactNode;
13
+
14
+ /** MUI props */
15
+ variant?: 'regular' | 'dense';
16
+ disableGutters?: boolean;
17
+
18
+ /** Styling / misc */
19
+ sx?: SxProps<Theme>;
20
+ id?: string;
21
+ className?: string;
22
+ 'data-testid'?: string;
23
+ };
24
+ };
25
+
26
+ /**
27
+ * ToolbarResolver
28
+ * - Maps JSON-friendly spec → <Toolbar /> props.
29
+ * - Accepts sx/id/className for styling and test hooks.
30
+ */
31
+ const ToolbarResolver: RegistryEntry = {
32
+ type: 'Toolbar',
33
+ resolve(spec: ToolbarSpec) {
34
+ const p = spec.props ?? {};
35
+ const {
36
+ children,
37
+ variant,
38
+ disableGutters,
39
+ sx,
40
+ className,
41
+ } = p;
42
+
43
+ const id = ensureNodeId('Toolbar', p.id);
44
+
45
+ return (
46
+ <Toolbar
47
+ variant={variant}
48
+ disableGutters={disableGutters}
49
+ sx={sx}
50
+ id={id}
51
+ className={className}
52
+ data-testid={p['data-testid']}
53
+ >
54
+ {children}
55
+ </Toolbar>
56
+ );
57
+ },
58
+ };
59
+
60
+ export default ToolbarResolver;
@@ -0,0 +1,163 @@
1
+ import * as React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { MemoryRouter } from 'react-router-dom';
4
+ import GuiProvider from '@/context/GuiProvider';
5
+
6
+ // Atoms used in the examples
7
+ import { Toolbar, AppBar, Box, IconButton, Typography, Button } from '@/gui/atoms';
8
+ import Icon from '@/themes/icons/Icon';
9
+
10
+ // ======================= Meta =======================
11
+ const meta: Meta<typeof Toolbar> = {
12
+ title: 'Atoms/Toolbar',
13
+ component: Toolbar,
14
+ tags: ['autodocs'],
15
+ decorators: [
16
+ (Story) => (
17
+ <MemoryRouter>
18
+ <GuiProvider>
19
+ <div style={{ padding: 16, minHeight: 240 }}>
20
+ <Story />
21
+ </div>
22
+ </GuiProvider>
23
+ </MemoryRouter>
24
+ ),
25
+ ],
26
+ parameters: {
27
+ docs: {
28
+ description: {
29
+ component: `
30
+ The **Toolbar** atom is a thin wrapper over MUI's \`MuiToolbar\`.
31
+
32
+ > **Not polymorphic.** Unlike \`Button\` or \`Box\`, **Toolbar does not accept** a \`component\` prop in MUI. If you need a different semantic element (e.g. \`<header>\`), wrap it with \`<Box component="header">\`.
33
+
34
+ ---
35
+ ## Features
36
+ - Density via \`variant\`: \`'regular'\` | \`'dense'\`.
37
+ - Optional gutters removal with \`disableGutters\`.
38
+ - Full **\`sx\`** support for styling.
39
+ - Plays nicely inside **AppBar** and custom layouts.
40
+
41
+ ---
42
+ ## Key Props
43
+ - \`variant?: 'regular' | 'dense'\`
44
+ - \`disableGutters?: boolean\`
45
+ - \`sx?: SxProps\` — theme-aware styling.
46
+
47
+ ---
48
+ ## Basic usage
49
+ ~~~tsx
50
+ import { Toolbar } from '@/gui/atoms';
51
+
52
+ <Toolbar>
53
+ <span>Left content</span>
54
+ </Toolbar>
55
+ ~~~
56
+
57
+ ## In an AppBar
58
+ ~~~tsx
59
+ import { AppBar, Toolbar, Typography } from '@/gui/atoms';
60
+
61
+ <AppBar position="static">
62
+ <Toolbar>
63
+ <Typography variant="h6">Title</Typography>
64
+ </Toolbar>
65
+ </AppBar>
66
+ ~~~
67
+
68
+ ## Change semantic element with Box
69
+ ~~~tsx
70
+ import { Box, Toolbar } from '@/gui/atoms';
71
+
72
+ <Box component="header">
73
+ <Toolbar variant="dense">Compact header</Toolbar>
74
+ </Box>
75
+ ~~~
76
+ `,
77
+ },
78
+ },
79
+ controls: {
80
+ exclude: ['component']
81
+ },
82
+ },
83
+ argTypes: {
84
+ variant: {
85
+ control: { type: 'radio' },
86
+ options: ['regular', 'dense'],
87
+ },
88
+ disableGutters: { control: 'boolean' },
89
+ // Toolbar is not polymorphic in MUI, so hide any notion of `component`
90
+ },
91
+ args: {
92
+ variant: 'regular',
93
+ disableGutters: false,
94
+ children: (
95
+ <div style={{ display: 'flex', width: '100%', alignItems: 'center', gap: 12 }}>
96
+ <strong>Toolbar content</strong>
97
+ </div>
98
+ ),
99
+ },
100
+ };
101
+ export default meta;
102
+
103
+ type Story = StoryObj<typeof Toolbar>;
104
+
105
+ // ======================= Stories =======================
106
+ export const Playground: Story = {};
107
+
108
+ export const DenseVsRegular: Story = {
109
+ render: () => (
110
+ <div style={{ display: 'grid', gap: 12 }}>
111
+ <Toolbar>
112
+ <Typography variant="body2">Regular Toolbar</Typography>
113
+ </Toolbar>
114
+ <Toolbar variant="dense">
115
+ <Typography variant="body2">Dense Toolbar</Typography>
116
+ </Toolbar>
117
+ </div>
118
+ ),
119
+ };
120
+
121
+ export const WithActions: Story = {
122
+ render: () => (
123
+ <Toolbar sx={{ display: 'flex', gap: 8 }}>
124
+ <Typography sx={{ flex: 1 }} variant="h6">Title</Typography>
125
+ <IconButton aria-label="search">
126
+ <Icon name="lucide:Search" size={20} />
127
+ </IconButton>
128
+ <IconButton aria-label="user">
129
+ <Icon name="lucide:user" size={20} />
130
+ </IconButton>
131
+ <Button variant="contained" size="small">Action</Button>
132
+ </Toolbar>
133
+ ),
134
+ };
135
+
136
+ export const InAppBar: Story = {
137
+ render: () => (
138
+ <AppBar position="static">
139
+ <Toolbar>
140
+ <Typography variant="h6" sx={{ flex: 1 }}>App Bar + Toolbar</Typography>
141
+ <Button color="inherit" size="small">Login</Button>
142
+ </Toolbar>
143
+ </AppBar>
144
+ ),
145
+ };
146
+
147
+ export const WrappedInHeader: Story = {
148
+ render: () => (
149
+ <Box component="header" sx={{ border: '1px solid', borderColor: 'divider' }}>
150
+ <Toolbar variant="dense">
151
+ <Typography variant="body2">Header Toolbar (wrapped by Box)</Typography>
152
+ </Toolbar>
153
+ </Box>
154
+ ),
155
+ };
156
+
157
+ export const WithCustomSx: Story = {
158
+ render: () => (
159
+ <Toolbar sx={{ bgcolor: 'background.paper', border: '1px dashed', borderColor: 'divider', borderRadius: 1 }}>
160
+ <Typography variant="body2">Styled with sx</Typography>
161
+ </Toolbar>
162
+ ),
163
+ };
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+ import MuiToolbar from '@mui/material/Toolbar';
3
+ /**
4
+ * This.GUI — Toolbar atom
5
+ * Thin wrapper around MUI's Toolbar so consumers import from "@/gui/atoms"
6
+ * instead of "@mui/material". This keeps the engine swappable.
7
+ *
8
+ * Notes:
9
+ * - We type props from MuiToolbar to preserve its full API (incl. `component`, `sx`, etc.).
10
+ * - Ref is HTMLDivElement, matching the default DOM element Toolbar renders.
11
+ */
12
+ export type ToolbarProps = React.ComponentProps<typeof MuiToolbar>;
13
+ const Toolbar = React.forwardRef<HTMLDivElement, ToolbarProps>(function Toolbar(props, ref) {
14
+ return <MuiToolbar ref={ref} {...props} />;});
15
+ (Toolbar as any).displayName = 'Gui.Toolbar';
16
+ export default Toolbar;
@@ -0,0 +1,142 @@
1
+ import * as React from 'react';
2
+ import Tooltip from './Tooltip';
3
+ import type { SxProps, Theme } from '@mui/material/styles';
4
+ import { ensureNodeId } from '@/gui/utils/nodeID';
5
+ import type { RegistryEntry, ResolveCtx } from '@/registry/types';
6
+
7
+ /**
8
+ * Tooltip — Resolver
9
+ * --------------------------------------------------
10
+ * Declarative spec → live <Tooltip /> with correct props.
11
+ * Supports nested declarative children via ctx.render when available.
12
+ */
13
+ export type TooltipSpec = {
14
+ type: 'Tooltip';
15
+ props?: {
16
+ // Content
17
+ title?: React.ReactNode | string; // required by MUI; we default if missing
18
+ children?: React.ReactNode | any; // can be a nested spec object
19
+
20
+ // Behavior
21
+ placement?:
22
+ | 'bottom-end' | 'bottom-start' | 'bottom'
23
+ | 'left-end' | 'left-start' | 'left'
24
+ | 'right-end' | 'right-start' | 'right'
25
+ | 'top-end' | 'top-start' | 'top';
26
+ arrow?: boolean;
27
+ followCursor?: boolean;
28
+ enterDelay?: number;
29
+ enterNextDelay?: number;
30
+ enterTouchDelay?: number;
31
+ leaveDelay?: number;
32
+ leaveTouchDelay?: number;
33
+ disableFocusListener?: boolean;
34
+ disableHoverListener?: boolean;
35
+ disableInteractive?: boolean;
36
+ disableTouchListener?: boolean;
37
+ open?: boolean; // controlled mode
38
+
39
+ // Styling / test ids
40
+ sx?: SxProps<Theme>;
41
+ id?: string;
42
+ className?: string;
43
+ 'data-testid'?: string;
44
+ 'data-gui-id'?: string;
45
+ };
46
+ };
47
+
48
+ const TooltipResolver: RegistryEntry = {
49
+ type: 'Tooltip',
50
+ resolve(spec: TooltipSpec, ctx?: ResolveCtx) {
51
+ const p = spec.props ?? {};
52
+ const guiId = ensureNodeId('Tooltip', (p as any)['data-gui-id']);
53
+
54
+ // Resolve child: if a nested spec is provided and we have a renderer in ctx, use it.
55
+ let childCandidate: any = (spec.props?.children ?? (spec.props as any)?.child) as any;
56
+ if (!React.isValidElement(childCandidate) && childCandidate && typeof childCandidate === 'object' && ctx?.render) {
57
+ childCandidate = ctx.render(childCandidate);
58
+ }
59
+
60
+ // Tooltip expects exactly ONE ReactElement child. Coerce anything else into an element.
61
+ let childEl: React.ReactElement;
62
+ if (React.isValidElement(childCandidate)) {
63
+ childEl = childCandidate as React.ReactElement;
64
+ } else if (
65
+ typeof childCandidate === 'string' ||
66
+ typeof childCandidate === 'number' ||
67
+ typeof childCandidate === 'bigint'
68
+ ) {
69
+ childEl = <span>{String(childCandidate)}</span>;
70
+ } else if (childCandidate) {
71
+ // Arrays, iterables, true/false, portals, promises, etc. → wrap safely
72
+ childEl = <span>{childCandidate as any}</span>;
73
+ } else {
74
+ // No child provided → harmless inline element to satisfy MUI contract
75
+ childEl = <span style={{ display: 'inline-block', width: 0, height: 0 }} />;
76
+ }
77
+
78
+ let titleNode: React.ReactNode = p.title;
79
+ if (titleNode && !React.isValidElement(titleNode) && typeof titleNode === 'object' && ctx?.render) {
80
+ titleNode = ctx.render(titleNode as any);
81
+ }
82
+ if (typeof titleNode === 'undefined' || titleNode === null) {
83
+ titleNode = '';
84
+ }
85
+
86
+ const {
87
+ // remove resolver-only keys
88
+ id,
89
+ className,
90
+ sx,
91
+ placement,
92
+ arrow,
93
+ followCursor,
94
+ enterDelay,
95
+ enterNextDelay,
96
+ enterTouchDelay,
97
+ leaveDelay,
98
+ leaveTouchDelay,
99
+ disableFocusListener,
100
+ disableHoverListener,
101
+ disableInteractive,
102
+ disableTouchListener,
103
+ open,
104
+ // keep title out, we already computed titleNode
105
+ title: _title,
106
+ // also remove our custom id
107
+ ['data-gui-id']: _dataGuiId,
108
+ // and remove the alias 'child' if present
109
+ child: _child,
110
+ ...rest
111
+ } = p as any;
112
+
113
+ return (
114
+ <Tooltip
115
+ title={titleNode}
116
+ placement={placement}
117
+ arrow={arrow}
118
+ followCursor={followCursor}
119
+ enterDelay={enterDelay}
120
+ enterNextDelay={enterNextDelay}
121
+ enterTouchDelay={enterTouchDelay}
122
+ leaveDelay={leaveDelay}
123
+ leaveTouchDelay={leaveTouchDelay}
124
+ disableFocusListener={disableFocusListener}
125
+ disableHoverListener={disableHoverListener}
126
+ disableInteractive={disableInteractive}
127
+ disableTouchListener={disableTouchListener}
128
+ open={open}
129
+ sx={sx}
130
+ id={id}
131
+ className={className}
132
+ data-testid={(p as any)['data-testid']}
133
+ data-gui-id={guiId}
134
+ {...rest}
135
+ >
136
+ {childEl}
137
+ </Tooltip>
138
+ );
139
+ },
140
+ };
141
+
142
+ export default TooltipResolver;