this.gui 1.0.18 → 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 (480) 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 -5056
  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 -54
  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 -39
  172. package/src/CreatePage.jsx +0 -61
  173. package/src/MDXEditor.jsx +0 -51
  174. package/src/MdxProvider.jsx +0 -20
  175. package/src/Page.jsx +0 -28
  176. package/src/PageDashboard.jsx +0 -56
  177. package/src/SiteBuilder.jsx +0 -108
  178. package/src/example.json +0 -43
  179. package/src/index.mdx +0 -164
  180. package/src/main.jsx +0 -15
  181. package/src/scripts/ComponentRegistry.js +0 -70
  182. package/src/scripts/logASCIIArt.js +0 -12
  183. package/src/scripts/postinstall.js +0 -111
  184. package/src/scripts/renderComponents.js +0 -11
  185. package/src/stories/Atoms/Alert/Alert.css +0 -211
  186. package/src/stories/Atoms/Alert/Alert.jsx +0 -56
  187. package/src/stories/Atoms/Alert/Alert.stories.jsx +0 -167
  188. package/src/stories/Atoms/Audio/Audio.css +0 -259
  189. package/src/stories/Atoms/Audio/Audio.jsx +0 -216
  190. package/src/stories/Atoms/Audio/Audio.stories.jsx +0 -191
  191. package/src/stories/Atoms/Badge/Badge.css +0 -249
  192. package/src/stories/Atoms/Badge/Badge.jsx +0 -54
  193. package/src/stories/Atoms/Badge/Badge.stories.jsx +0 -121
  194. package/src/stories/Atoms/Button/Button.css +0 -332
  195. package/src/stories/Atoms/Button/Button.jsx +0 -44
  196. package/src/stories/Atoms/Button/Button.stories.jsx +0 -209
  197. package/src/stories/Atoms/Caption/Caption.css +0 -169
  198. package/src/stories/Atoms/Caption/Caption.jsx +0 -72
  199. package/src/stories/Atoms/Caption/Caption.stories.jsx +0 -207
  200. package/src/stories/Atoms/Checkbox/Checkbox.css +0 -182
  201. package/src/stories/Atoms/Checkbox/Checkbox.jsx +0 -83
  202. package/src/stories/Atoms/Checkbox/Checkbox.stories.jsx +0 -112
  203. package/src/stories/Atoms/Container/Container.css +0 -470
  204. package/src/stories/Atoms/Container/Container.jsx +0 -116
  205. package/src/stories/Atoms/Container/Container.stories.jsx +0 -145
  206. package/src/stories/Atoms/Divider/Divider.css +0 -147
  207. package/src/stories/Atoms/Divider/Divider.jsx +0 -62
  208. package/src/stories/Atoms/Divider/Divider.stories.jsx +0 -105
  209. package/src/stories/Atoms/Grid/Grid.css +0 -160
  210. package/src/stories/Atoms/Grid/Grid.jsx +0 -43
  211. package/src/stories/Atoms/Grid/Grid.stories.jsx +0 -84
  212. package/src/stories/Atoms/Heading/Heading.css +0 -112
  213. package/src/stories/Atoms/Heading/Heading.jsx +0 -69
  214. package/src/stories/Atoms/Heading/Heading.stories.jsx +0 -130
  215. package/src/stories/Atoms/Icon/Icon.css +0 -240
  216. package/src/stories/Atoms/Icon/Icon.jsx +0 -80
  217. package/src/stories/Atoms/Icon/Icon.stories.jsx +0 -177
  218. package/src/stories/Atoms/Image/Image.css +0 -245
  219. package/src/stories/Atoms/Image/Image.jsx +0 -175
  220. package/src/stories/Atoms/Image/Image.stories.jsx +0 -332
  221. package/src/stories/Atoms/Label/Label.css +0 -171
  222. package/src/stories/Atoms/Label/Label.jsx +0 -71
  223. package/src/stories/Atoms/Label/Label.stories.jsx +0 -180
  224. package/src/stories/Atoms/Link/Link.css +0 -51
  225. package/src/stories/Atoms/Link/Link.jsx +0 -72
  226. package/src/stories/Atoms/Link/Link.stories.jsx +0 -153
  227. package/src/stories/Atoms/Loader/Loader.css +0 -106
  228. package/src/stories/Atoms/Loader/Loader.jsx +0 -58
  229. package/src/stories/Atoms/Loader/Loader.stories.jsx +0 -99
  230. package/src/stories/Atoms/Logo/Logo.css +0 -94
  231. package/src/stories/Atoms/Logo/Logo.jsx +0 -53
  232. package/src/stories/Atoms/Logo/Logo.stories.jsx +0 -120
  233. package/src/stories/Atoms/Paragraph/Paragraph.css +0 -180
  234. package/src/stories/Atoms/Paragraph/Paragraph.jsx +0 -77
  235. package/src/stories/Atoms/Paragraph/Paragraph.stories.jsx +0 -143
  236. package/src/stories/Atoms/ProgressBar/ProgressBar.css +0 -127
  237. package/src/stories/Atoms/ProgressBar/ProgressBar.jsx +0 -40
  238. package/src/stories/Atoms/ProgressBar/ProgressBar.stories.jsx +0 -86
  239. package/src/stories/Atoms/RadioButton/RadioButton.css +0 -130
  240. package/src/stories/Atoms/RadioButton/RadioButton.jsx +0 -87
  241. package/src/stories/Atoms/RadioButton/RadioButton.stories.jsx +0 -113
  242. package/src/stories/Atoms/Range/Range.css +0 -169
  243. package/src/stories/Atoms/Range/Range.jsx +0 -87
  244. package/src/stories/Atoms/Range/Range.stories.jsx +0 -110
  245. package/src/stories/Atoms/Section/Section.css +0 -268
  246. package/src/stories/Atoms/Section/Section.jsx +0 -63
  247. package/src/stories/Atoms/Section/Section.stories.jsx +0 -46
  248. package/src/stories/Atoms/Select/Select.css +0 -87
  249. package/src/stories/Atoms/Select/Select.jsx +0 -73
  250. package/src/stories/Atoms/Select/Select.stories.jsx +0 -109
  251. package/src/stories/Atoms/Slider/Slider.css +0 -90
  252. package/src/stories/Atoms/Slider/Slider.jsx +0 -129
  253. package/src/stories/Atoms/Slider/Slider.stories.jsx +0 -90
  254. package/src/stories/Atoms/Snackbar/Snackbar.css +0 -313
  255. package/src/stories/Atoms/Snackbar/Snackbar.jsx +0 -72
  256. package/src/stories/Atoms/Snackbar/Snackbar.stories.jsx +0 -78
  257. package/src/stories/Atoms/Spacer/Spacer.css +0 -114
  258. package/src/stories/Atoms/Spacer/Spacer.jsx +0 -35
  259. package/src/stories/Atoms/Spacer/Spacer.stories.jsx +0 -61
  260. package/src/stories/Atoms/Spinner/Spinner.css +0 -110
  261. package/src/stories/Atoms/Spinner/Spinner.jsx +0 -65
  262. package/src/stories/Atoms/Spinner/Spinner.stories.jsx +0 -58
  263. package/src/stories/Atoms/Tag/Tag.css +0 -112
  264. package/src/stories/Atoms/Tag/Tag.jsx +0 -75
  265. package/src/stories/Atoms/Tag/Tag.stories.jsx +0 -67
  266. package/src/stories/Atoms/TextArea/TextArea.css +0 -99
  267. package/src/stories/Atoms/TextArea/TextArea.jsx +0 -118
  268. package/src/stories/Atoms/TextArea/TextArea.stories.jsx +0 -36
  269. package/src/stories/Atoms/TextInput/TextInput.css +0 -102
  270. package/src/stories/Atoms/TextInput/TextInput.jsx +0 -133
  271. package/src/stories/Atoms/TextInput/TextInput.stories.jsx +0 -69
  272. package/src/stories/Atoms/Toggle/Toggle.css +0 -118
  273. package/src/stories/Atoms/Toggle/Toggle.jsx +0 -69
  274. package/src/stories/Atoms/Toggle/Toggle.stories.jsx +0 -35
  275. package/src/stories/Atoms/Tooltip/Tooltip.css +0 -383
  276. package/src/stories/Atoms/Tooltip/Tooltip.jsx +0 -46
  277. package/src/stories/Atoms/Tooltip/Tooltip.stories.jsx +0 -52
  278. package/src/stories/Atoms/Video/Video.css +0 -39
  279. package/src/stories/Atoms/Video/Video.jsx +0 -78
  280. package/src/stories/Atoms/Video/Video.stories.jsx +0 -41
  281. package/src/stories/Atoms/index.js +0 -72
  282. package/src/stories/Atoms/meta_Atoms.js +0 -51
  283. package/src/stories/Components.js +0 -198
  284. package/src/stories/Getting Started.mdx +0 -239
  285. package/src/stories/Layouts/Accordion/Accordion.css +0 -293
  286. package/src/stories/Layouts/Accordion/Accordion.jsx +0 -74
  287. package/src/stories/Layouts/Accordion/Accordion.stories.jsx +0 -39
  288. package/src/stories/Layouts/Flexbox/Flexbox.css +0 -16
  289. package/src/stories/Layouts/Flexbox/Flexbox.jsx +0 -11
  290. package/src/stories/Layouts/Flexbox/Flexbox.stories.jsx +0 -28
  291. package/src/stories/Layouts/Footer/Footer.css +0 -16
  292. package/src/stories/Layouts/Footer/Footer.jsx +0 -31
  293. package/src/stories/Layouts/Footer/Footer.stories.jsx +0 -28
  294. package/src/stories/Layouts/Header/Header.css +0 -16
  295. package/src/stories/Layouts/Header/Header.jsx +0 -31
  296. package/src/stories/Layouts/Header/Header.stories.jsx +0 -28
  297. package/src/stories/Layouts/HeroBanner/HeroBanner.css +0 -16
  298. package/src/stories/Layouts/HeroBanner/HeroBanner.jsx +0 -31
  299. package/src/stories/Layouts/HeroBanner/HeroBanner.stories.jsx +0 -28
  300. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.css +0 -16
  301. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.jsx +0 -31
  302. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.stories.jsx +0 -28
  303. package/src/stories/Layouts/Pagination/Pagination.css +0 -16
  304. package/src/stories/Layouts/Pagination/Pagination.jsx +0 -31
  305. package/src/stories/Layouts/Pagination/Pagination.stories.jsx +0 -28
  306. package/src/stories/Layouts/Sidebar/Sidebar.css +0 -16
  307. package/src/stories/Layouts/Sidebar/Sidebar.jsx +0 -71
  308. package/src/stories/Layouts/Sidebar/Sidebar.stories.jsx +0 -28
  309. package/src/stories/Layouts/Tabs/Tabs.css +0 -16
  310. package/src/stories/Layouts/Tabs/Tabs.jsx +0 -31
  311. package/src/stories/Layouts/Tabs/Tabs.stories.jsx +0 -28
  312. package/src/stories/Layouts/index.js +0 -25
  313. package/src/stories/Layouts/meta_Layouts.js +0 -28
  314. package/src/stories/MDX.mdx +0 -118
  315. package/src/stories/Miscellaneous/Miscellaneous.js +0 -24
  316. package/src/stories/Molecules/Accordion/Accordion.css +0 -4
  317. package/src/stories/Molecules/Accordion/Accordion.jsx +0 -25
  318. package/src/stories/Molecules/Accordion/Accordion.stories.jsx +0 -20
  319. package/src/stories/Molecules/AudioPlayer/AudioPlayer.css +0 -97
  320. package/src/stories/Molecules/AudioPlayer/AudioPlayer.jsx +0 -244
  321. package/src/stories/Molecules/AudioPlayer/AudioPlayer.stories.jsx +0 -55
  322. package/src/stories/Molecules/AvatarWithName/AvatarWithName.css +0 -130
  323. package/src/stories/Molecules/AvatarWithName/AvatarWithName.jsx +0 -80
  324. package/src/stories/Molecules/AvatarWithName/AvatarWithName.stories.jsx +0 -20
  325. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.css +0 -147
  326. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.jsx +0 -51
  327. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.stories.jsx +0 -36
  328. package/src/stories/Molecules/ButtonGroup/ButtonGroup.css +0 -465
  329. package/src/stories/Molecules/ButtonGroup/ButtonGroup.jsx +0 -47
  330. package/src/stories/Molecules/ButtonGroup/ButtonGroup.stories.jsx +0 -44
  331. package/src/stories/Molecules/Card/Card.css +0 -41
  332. package/src/stories/Molecules/Card/Card.jsx +0 -92
  333. package/src/stories/Molecules/Card/Card.stories.jsx +0 -34
  334. package/src/stories/Molecules/ComparisonTable/ComparisonTable.css +0 -35
  335. package/src/stories/Molecules/ComparisonTable/ComparisonTable.jsx +0 -104
  336. package/src/stories/Molecules/ComparisonTable/ComparisonTable.stories.jsx +0 -81
  337. package/src/stories/Molecules/DataTable/DataTable.css +0 -4
  338. package/src/stories/Molecules/DataTable/DataTable.jsx +0 -25
  339. package/src/stories/Molecules/DataTable/DataTable.stories.jsx +0 -20
  340. package/src/stories/Molecules/Dropdown/Dropdown.css +0 -192
  341. package/src/stories/Molecules/Dropdown/Dropdown.jsx +0 -96
  342. package/src/stories/Molecules/Dropdown/Dropdown.stories.jsx +0 -45
  343. package/src/stories/Molecules/FileUpload/FileUpload.css +0 -4
  344. package/src/stories/Molecules/FileUpload/FileUpload.jsx +0 -25
  345. package/src/stories/Molecules/FileUpload/FileUpload.stories.jsx +0 -20
  346. package/src/stories/Molecules/FormField/FormField.css +0 -4
  347. package/src/stories/Molecules/FormField/FormField.jsx +0 -25
  348. package/src/stories/Molecules/FormField/FormField.stories.jsx +0 -20
  349. package/src/stories/Molecules/Header/Header.css +0 -35
  350. package/src/stories/Molecules/Header/Header.jsx +0 -76
  351. package/src/stories/Molecules/Header/Header.stories.jsx +0 -28
  352. package/src/stories/Molecules/IconButton/IconButton.css +0 -4
  353. package/src/stories/Molecules/IconButton/IconButton.jsx +0 -25
  354. package/src/stories/Molecules/IconButton/IconButton.stories.jsx +0 -20
  355. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.css +0 -4
  356. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.jsx +0 -25
  357. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.stories.jsx +0 -20
  358. package/src/stories/Molecules/InputGroup/InputGroup.css +0 -4
  359. package/src/stories/Molecules/InputGroup/InputGroup.jsx +0 -25
  360. package/src/stories/Molecules/InputGroup/InputGroup.stories.jsx +0 -20
  361. package/src/stories/Molecules/InputWithLabel/InputWithLabel.css +0 -4
  362. package/src/stories/Molecules/InputWithLabel/InputWithLabel.jsx +0 -25
  363. package/src/stories/Molecules/InputWithLabel/InputWithLabel.stories.jsx +0 -20
  364. package/src/stories/Molecules/List/List.css +0 -4
  365. package/src/stories/Molecules/List/List.jsx +0 -25
  366. package/src/stories/Molecules/List/List.stories.jsx +0 -20
  367. package/src/stories/Molecules/MediaCard/MediaCard.css +0 -4
  368. package/src/stories/Molecules/MediaCard/MediaCard.jsx +0 -25
  369. package/src/stories/Molecules/MediaCard/MediaCard.stories.jsx +0 -20
  370. package/src/stories/Molecules/Modal/Modal.css +0 -4
  371. package/src/stories/Molecules/Modal/Modal.jsx +0 -25
  372. package/src/stories/Molecules/Modal/Modal.stories.jsx +0 -20
  373. package/src/stories/Molecules/Navbar/Navbar.css +0 -91
  374. package/src/stories/Molecules/Navbar/Navbar.jsx +0 -82
  375. package/src/stories/Molecules/Navbar/Navbar.stories.jsx +0 -70
  376. package/src/stories/Molecules/Notification/Notification.css +0 -4
  377. package/src/stories/Molecules/Notification/Notification.jsx +0 -25
  378. package/src/stories/Molecules/Notification/Notification.stories.jsx +0 -20
  379. package/src/stories/Molecules/PricingTable/PricingTable.css +0 -4
  380. package/src/stories/Molecules/PricingTable/PricingTable.jsx +0 -25
  381. package/src/stories/Molecules/PricingTable/PricingTable.stories.jsx +0 -20
  382. package/src/stories/Molecules/SearchBar/SearchBar.css +0 -69
  383. package/src/stories/Molecules/SearchBar/SearchBar.jsx +0 -73
  384. package/src/stories/Molecules/SearchBar/SearchBar.stories.jsx +0 -29
  385. package/src/stories/Molecules/SelectTheme/SelectTheme.css +0 -25
  386. package/src/stories/Molecules/SelectTheme/SelectTheme.jsx +0 -22
  387. package/src/stories/Molecules/SelectTheme/SelectTheme.stories.jsx +0 -24
  388. package/src/stories/Molecules/Sidebar/Sidebar.css +0 -67
  389. package/src/stories/Molecules/Sidebar/Sidebar.jsx +0 -80
  390. package/src/stories/Molecules/Sidebar/Sidebar.stories.jsx +0 -35
  391. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.css +0 -4
  392. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.jsx +0 -25
  393. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.stories.jsx +0 -20
  394. package/src/stories/Molecules/index.js +0 -58
  395. package/src/stories/Molecules/meta_Molecules.js +0 -47
  396. package/src/stories/Organisms/Profile/UserFriends/UserFriends.context.jsx +0 -15
  397. package/src/stories/Organisms/Profile/UserFriends/UserFriends.css +0 -4
  398. package/src/stories/Organisms/Profile/UserFriends/UserFriends.jsx +0 -13
  399. package/src/stories/Organisms/Profile/UserFriends/UserFriends.stories.jsx +0 -26
  400. package/src/stories/Organisms/Profile/UserPosts/UserPosts.context.jsx +0 -15
  401. package/src/stories/Organisms/Profile/UserPosts/UserPosts.css +0 -4
  402. package/src/stories/Organisms/Profile/UserPosts/UserPosts.jsx +0 -13
  403. package/src/stories/Organisms/Profile/UserPosts/UserPosts.stories.jsx +0 -26
  404. package/src/stories/Organisms/Profile/UserProfile/UserProfile.context.jsx +0 -15
  405. package/src/stories/Organisms/Profile/UserProfile/UserProfile.css +0 -4
  406. package/src/stories/Organisms/Profile/UserProfile/UserProfile.jsx +0 -13
  407. package/src/stories/Organisms/Profile/UserProfile/UserProfile.stories.jsx +0 -26
  408. package/src/stories/Organisms/meta_Organisms.js +0 -39
  409. package/src/stories/Pages/Page/Page.css +0 -69
  410. package/src/stories/Pages/Page/Page.jsx +0 -69
  411. package/src/stories/Pages/Page/Page.stories.js +0 -26
  412. package/src/stories/Pages/Page/Pages.js +0 -31
  413. package/src/stories/Templates/AdminDashboard/AdminDashboard.css +0 -7
  414. package/src/stories/Templates/AdminDashboard/AdminDashboard.jsx +0 -24
  415. package/src/stories/Templates/AdminDashboard/AdminDashboard.stories.jsx +0 -20
  416. package/src/stories/Templates/CallToAction/CallToAction.css +0 -7
  417. package/src/stories/Templates/CallToAction/CallToAction.jsx +0 -24
  418. package/src/stories/Templates/CallToAction/CallToAction.stories.jsx +0 -20
  419. package/src/stories/Templates/FeaturesList/FeaturesList.css +0 -7
  420. package/src/stories/Templates/FeaturesList/FeaturesList.jsx +0 -24
  421. package/src/stories/Templates/FeaturesList/FeaturesList.stories.jsx +0 -20
  422. package/src/stories/Templates/FormSection/FormSection.css +0 -7
  423. package/src/stories/Templates/FormSection/FormSection.jsx +0 -24
  424. package/src/stories/Templates/FormSection/FormSection.stories.jsx +0 -20
  425. package/src/stories/Templates/HeroSection/HeroSection.css +0 -7
  426. package/src/stories/Templates/HeroSection/HeroSection.jsx +0 -24
  427. package/src/stories/Templates/HeroSection/HeroSection.stories.jsx +0 -20
  428. package/src/stories/Templates/LocationInfo/LocationInfo.css +0 -7
  429. package/src/stories/Templates/LocationInfo/LocationInfo.jsx +0 -24
  430. package/src/stories/Templates/LocationInfo/LocationInfo.stories.jsx +0 -20
  431. package/src/stories/Templates/ProductPage/ProductPage.css +0 -7
  432. package/src/stories/Templates/ProductPage/ProductPage.jsx +0 -24
  433. package/src/stories/Templates/ProductPage/ProductPage.stories.jsx +0 -20
  434. package/src/stories/Templates/RegistrationPage/RegistrationPage.css +0 -7
  435. package/src/stories/Templates/RegistrationPage/RegistrationPage.jsx +0 -24
  436. package/src/stories/Templates/RegistrationPage/RegistrationPage.stories.jsx +0 -20
  437. package/src/stories/Templates/ShoppingCart/ShoppingCart.css +0 -7
  438. package/src/stories/Templates/ShoppingCart/ShoppingCart.jsx +0 -24
  439. package/src/stories/Templates/ShoppingCart/ShoppingCart.stories.jsx +0 -20
  440. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.css +0 -7
  441. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.jsx +0 -24
  442. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.stories.jsx +0 -20
  443. package/src/stories/Templates/SignInPage/SignInPage.css +0 -7
  444. package/src/stories/Templates/SignInPage/SignInPage.jsx +0 -24
  445. package/src/stories/Templates/SignInPage/SignInPage.stories.jsx +0 -20
  446. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.css +0 -7
  447. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.jsx +0 -24
  448. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.stories.jsx +0 -20
  449. package/src/stories/Templates/Testimonials/Testimonials.css +0 -7
  450. package/src/stories/Templates/Testimonials/Testimonials.jsx +0 -24
  451. package/src/stories/Templates/Testimonials/Testimonials.stories.jsx +0 -20
  452. package/src/stories/Templates/index.js +0 -33
  453. package/src/stories/Templates/meta_Templates.js +0 -29
  454. package/src/stories/assets/accessibility.png +0 -0
  455. package/src/stories/assets/accessibility.svg +0 -1
  456. package/src/stories/assets/addon-library.png +0 -0
  457. package/src/stories/assets/assets.png +0 -0
  458. package/src/stories/assets/avif-test-image.avif +0 -0
  459. package/src/stories/assets/context.png +0 -0
  460. package/src/stories/assets/discord.svg +0 -1
  461. package/src/stories/assets/docs.png +0 -0
  462. package/src/stories/assets/figma-plugin.png +0 -0
  463. package/src/stories/assets/github.svg +0 -1
  464. package/src/stories/assets/logo.png +0 -0
  465. package/src/stories/assets/logo.svg +0 -106
  466. package/src/stories/assets/share.png +0 -0
  467. package/src/stories/assets/styling.png +0 -0
  468. package/src/stories/assets/test.svg +0 -3
  469. package/src/stories/assets/testing.png +0 -0
  470. package/src/stories/assets/theming.png +0 -0
  471. package/src/stories/assets/tutorials.svg +0 -1
  472. package/src/stories/assets/youtube.svg +0 -1
  473. package/src/themes/README_Styles.md +0 -301
  474. package/src/themes/ThemeProvider.jsx +0 -61
  475. package/src/themes/styles/github/dark.css +0 -0
  476. package/src/themes/styles/github/light.css +0 -0
  477. package/src/themes/styles/neurons/dark.css +0 -247
  478. package/src/themes/styles/neurons/light.css +0 -170
  479. /package/{src/themes/styles/dracula/dark.css → .storybook/preview-head.html} +0 -0
  480. /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;