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,225 @@
1
+ import * as React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { Button, Link } from '@/gui/atoms';
4
+ import { MemoryRouter } from 'react-router-dom';
5
+ import GuiProvider from '@/context/GuiProvider';
6
+
7
+ // ======================= Meta =======================
8
+ const meta: Meta<typeof Button> = {
9
+ title: 'Atoms/Button',
10
+ component: Button,
11
+ tags: ['autodocs'],
12
+ decorators: [
13
+ (Story) => (
14
+ <MemoryRouter>
15
+ <GuiProvider>
16
+ <div style={{ padding: 16, minHeight: 240 }}>
17
+ <Story />
18
+ </div>
19
+ </GuiProvider>
20
+ </MemoryRouter>
21
+ ),
22
+ ],
23
+ parameters: {
24
+ docs: {
25
+ description: {
26
+ component: `
27
+ The **Button** primitive is a thin wrapper around MUI's \`MuiButton\` that preserves **polymorphism** and adds **declarative icons** (string tokens like
28
+ \`mui:Send\` or \`lucide:bolt\`). It integrates with **This.GUI** theming and respects your token-built palette.
29
+
30
+ ---
31
+ ## Features
32
+ - Variants: \`contained\`, \`outlined\`, \`text\`.
33
+ - Colors: \`primary\`, \`secondary\`, \`success\`, \`info\`, \`warning\`, \`error\`, \`inherit\`.
34
+ - Sizes: \`small\`, \`medium\`, \`large\`.
35
+ - **Icons** via tokens (\`startIcon\` / \`endIcon\`) or React nodes.
36
+ - **Polymorphic**: \`component\` can be \`'a'\` or a Link (e.g. the This.GUI wrapper \`Link\`) for routing.
37
+ - Respects your theme from \`GuiProvider\` (no need to wrap with \`ThemeProvider\`).
38
+
39
+ ---
40
+ ## Key Props
41
+ - \`startIcon?: string | ReactNode\` — accepts a name from the **icon registry** (\`mui:*\` / \`lucide:*\`) or a React element.
42
+ - \`endIcon?: string | ReactNode\`.
43
+ - \`component?: ElementType | string\` — for polymorphism (\`'a'\`, RouterLink, etc.).
44
+ - \`href?: string\` — when \`component='a'\`.
45
+ - \`to?: string\` — when \`component={Link}\`.
46
+
47
+ > Note: \`to\` and \`href\` are not exposed as Storybook controls because they only apply in specific modes; they are shown in dedicated stories.
48
+
49
+ ---
50
+ ## Basic usage
51
+ ~~~jsx
52
+ import { Button } from '@/gui/primitives';
53
+
54
+ <Button variant="contained" color="primary">Save</Button>
55
+ <Button variant="outlined" color="secondary">Cancel</Button>
56
+ <Button variant="text">Learn more</Button>
57
+ ~~~
58
+
59
+ ## With declarative icons
60
+ ~~~jsx
61
+ <Button variant="contained" color="secondary" startIcon="mui:Send" endIcon="lucide:bolt">
62
+ Send
63
+ </Button>
64
+ ~~~
65
+
66
+ ## As native anchor link
67
+ ~~~jsx
68
+ <Button component="a" href="https://neurons.me" /* target="_blank" rel="noreferrer" */>
69
+ Visit neurons.me
70
+ </Button>
71
+ ~~~
72
+
73
+ ## With RouterLink (This.GUI Link)
74
+ ~~~jsx
75
+ import { Button, Link } from '@/gui/primitives';
76
+
77
+ <Button component={Link} to="/docs">Go to docs</Button>
78
+ ~~~
79
+ ## Declarative JSON / Config usage
80
+ ~~~json
81
+ {
82
+ "type": "Button",
83
+ "props": {
84
+ "variant": "text",
85
+ "color": "primary",
86
+ "component": "a",
87
+ "href": "https://neurons.me",
88
+ "target": "_blank",
89
+ "rel": "noreferrer",
90
+ "children": "Visit neurons.me"
91
+ }
92
+ }
93
+ ~~~
94
+
95
+ Another example with a RouterLink:
96
+ ~~~json
97
+ {
98
+ "type": "Button",
99
+ "props": {
100
+ "variant": "contained",
101
+ "color": "secondary",
102
+ "component": "Link",
103
+ "to": "/docs",
104
+ "startIcon": "mui:Send",
105
+ "children": "Go to docs"
106
+ }
107
+ }
108
+ ~~~
109
+ `,
110
+ },
111
+ },
112
+ },
113
+ argTypes: {
114
+ variant: {
115
+ control: { type: 'radio' },
116
+ options: ['contained', 'outlined', 'text'],
117
+ },
118
+ color: {
119
+ control: { type: 'select' },
120
+ options: ['primary', 'secondary', 'success', 'info', 'warning', 'error', 'inherit'],
121
+ },
122
+ size: {
123
+ control: { type: 'radio' },
124
+ options: ['small', 'medium', 'large'],
125
+ },
126
+ startIcon: { control: 'text', description: 'Icon token or a React element.' },
127
+ endIcon: { control: 'text', description: 'Icon token or a React element.' },
128
+ onClick: { action: 'clicked' },
129
+ },
130
+ args: {
131
+ variant: 'contained',
132
+ color: 'primary',
133
+ size: 'medium',
134
+ children: 'Click me',
135
+ },
136
+ };
137
+ export default meta;
138
+
139
+ type Story = StoryObj<typeof Button>;
140
+
141
+ // ======================= Stories =======================
142
+ export const Playground: Story = {};
143
+
144
+ export const Variants: Story = {
145
+ args: { color: 'primary' },
146
+ render: (args) => (
147
+ <div style={{ display: 'flex', gap: 12, flexWrap: 'wrap' }}>
148
+ <Button {...args} variant="contained">Contained</Button>
149
+ <Button {...args} variant="outlined">Outlined</Button>
150
+ <Button {...args} variant="text">Text</Button>
151
+ </div>
152
+ ),
153
+ };
154
+
155
+ export const Colors: Story = {
156
+ args: { variant: 'contained' },
157
+ render: (args) => {
158
+ const colors: Array<'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'error'> =
159
+ ['primary', 'secondary', 'success', 'info', 'warning', 'error'];
160
+ return (
161
+ <div style={{ display: 'flex', gap: 12, flexWrap: 'wrap' }}>
162
+ {colors.map((c) => (
163
+ <Button key={c} {...args} color={c}>
164
+ {c[0].toUpperCase() + c.slice(1)}
165
+ </Button>
166
+ ))}
167
+ </div>
168
+ );
169
+ },
170
+ };
171
+
172
+ export const Sizes: Story = {
173
+ args: { color: 'primary', variant: 'contained' },
174
+ render: (args) => (
175
+ <div style={{ display: 'flex', gap: 12, alignItems: 'center', flexWrap: 'wrap' }}>
176
+ <Button {...args} size="small">Small</Button>
177
+ <Button {...args} size="medium">Medium</Button>
178
+ <Button {...args} size="large">Large</Button>
179
+ </div>
180
+ ),
181
+ };
182
+
183
+ export const WithIcons: Story = {
184
+ args: {
185
+ variant: 'contained',
186
+ color: 'secondary',
187
+ startIcon: 'mui:Power',
188
+ endIcon: 'lucide:bolt',
189
+ children: 'Send',
190
+ },
191
+ };
192
+
193
+ export const PolymorphicAnchor: Story = {
194
+ args: {
195
+ variant: 'text',
196
+ color: 'primary',
197
+ children: 'Go to neurons.me',
198
+ },
199
+ render: (args) => (
200
+ <Button component="a" href="https://neurons.me">
201
+ {args.children}
202
+ </Button>
203
+ ),
204
+ };
205
+
206
+ export const PolymorphicRouterLink: Story = {
207
+ args: {
208
+ variant: 'text',
209
+ color: 'primary',
210
+ children: 'Go to /docs',
211
+ },
212
+ render: (args) => (
213
+ <Button component={Link} to="/docs">
214
+ {args.children}
215
+ </Button>
216
+ ),
217
+ };
218
+
219
+ export const Disabled: Story = {
220
+ args: { variant: 'contained', color: 'primary', disabled: true, children: 'Disabled' },
221
+ };
222
+
223
+ export const FullWidth: Story = {
224
+ args: { variant: 'contained', color: 'primary', fullWidth: true, children: 'Full Width' },
225
+ };
@@ -0,0 +1,40 @@
1
+ import * as React from 'react';
2
+ import type { ReactNode } from 'react';
3
+ import MuiButton from '@mui/material/Button';
4
+ import type { OverridableComponent } from '@mui/material/OverridableComponent';
5
+ import type { ButtonTypeMap } from '@mui/material/Button';
6
+ import type { ButtonProps as MuiButtonProps } from '@mui/material/Button';
7
+ import Icon from '@/themes/icons/Icon';
8
+ /**
9
+ * Button (This.GUI primitive)
10
+ * ----------------------------------------
11
+ * - Polymorphic: preserves MUI's `component` API and typing via OverridableComponent.
12
+ * - Enhances MUI by allowing `startIcon` / `endIcon` to be a declarative string
13
+ * (e.g., "mui:Settings" / "lucide:camera") or a ReactNode.
14
+ */
15
+ // Polymorphic props type that matches MUI Button while letting us tweak icon props
16
+ export type Iconish = ReactNode | string | undefined;
17
+ export type ButtonProps = Omit<MuiButtonProps, 'startIcon' | 'endIcon'> & {
18
+ startIcon?: Iconish;
19
+ endIcon?: Iconish;
20
+ };
21
+ function resolveIcon(node: Iconish): ReactNode | null {
22
+ if (!node) return null;
23
+ return typeof node === 'string' ? <Icon name={node} size={18} /> : node;
24
+ }
25
+ const ButtonImpl = React.forwardRef<any, ButtonProps>(function Button(
26
+ { startIcon, endIcon, ...rest },
27
+ ref
28
+ ) {
29
+ return (
30
+ <MuiButton
31
+ ref={ref}
32
+ startIcon={resolveIcon(startIcon)}
33
+ endIcon={resolveIcon(endIcon)}
34
+ {...rest}
35
+ />
36
+ );
37
+ }) as unknown as OverridableComponent<ButtonTypeMap<{}, 'button'>>;
38
+ (ButtonImpl as any).displayName = 'Button';
39
+ export default ButtonImpl;
40
+ export type GuiButtonProps = React.ComponentProps<typeof ButtonImpl>;
@@ -0,0 +1,85 @@
1
+ // src/gui/atoms/Collapse/Collapse.resolver.tsx
2
+ import * as React from 'react';
3
+ import Collapse from './Collapse';
4
+ import type { RegistryEntry, ResolveCtx } from '@/registry/types';
5
+ import type { SxProps, Theme } from '@mui/material/styles';
6
+ import type { TransitionProps } from '@mui/material/transitions';
7
+ import { ensureNodeId } from '@/gui/utils/nodeID';
8
+
9
+ /**
10
+ * Declarative resolver for Collapse
11
+ * ---------------------------------
12
+ * Fidelity
13
+ * - Forwards MUI props faithfully (in, orientation, collapsedSize, timeout, easing, unmountOnExit, etc.).
14
+ * - Supports polymorphism via `component` (and alias `as`).
15
+ * - Provides granular styling through `sx` on the root.
16
+ *
17
+ * Usage (declarative JSON):
18
+ * {
19
+ * "type": "Collapse",
20
+ * "props": {
21
+ * "in": true,
22
+ * "orientation": "vertical",
23
+ * "sx": { "border": "1px dashed", "borderColor": "divider" }
24
+ * }
25
+ * }
26
+ */
27
+ export type CollapseSpec = {
28
+ type: 'Collapse';
29
+ props?: {
30
+ children?: React.ReactNode;
31
+
32
+ // Note: MUI Collapse's `component` must be a React component (not a string tag) due to Transition typing.
33
+ component?: React.ElementType<TransitionProps>;
34
+ as?: any; // alias of component
35
+
36
+ // Core MUI props (subset; others passthrough)
37
+ in?: boolean;
38
+ orientation?: 'vertical' | 'horizontal';
39
+ collapsedSize?: number | string;
40
+ timeout?: 'auto' | number | { appear?: number; enter?: number; exit?: number };
41
+ easing?: string | { enter?: string; exit?: string };
42
+ unmountOnExit?: boolean;
43
+ mountOnEnter?: boolean;
44
+ appear?: boolean;
45
+
46
+ // Styling
47
+ sx?: SxProps<Theme>;
48
+ className?: string;
49
+ id?: string;
50
+ 'data-testid'?: string;
51
+
52
+ // Arbitrary passthrough
53
+ [key: string]: any;
54
+ };
55
+ };
56
+
57
+ const CollapseResolver: RegistryEntry = {
58
+ type: 'Collapse',
59
+ resolve(spec: CollapseSpec, _ctx?: ResolveCtx) {
60
+ const p = spec.props ?? {};
61
+ const { children, as: _as, component: _component, ...rest } = p;
62
+ // Collapse's `component` must be a React component (not a string tag), otherwise TS will error.
63
+ const rawComponent = _component ?? _as;
64
+ const component = (typeof rawComponent === 'string'
65
+ ? undefined
66
+ : (rawComponent as React.ElementType<TransitionProps>)) as React.ElementType<TransitionProps> | undefined;
67
+
68
+ // Guarantee a stable, prefixed id for editor tooling
69
+ const collapseId = ensureNodeId('collapse', p.id);
70
+ return (
71
+ <Collapse
72
+ {...(component ? { component: component as React.ElementType<TransitionProps> } : {})}
73
+ sx={p.sx}
74
+ className={p.className}
75
+ id={collapseId}
76
+ data-testid={p['data-testid']}
77
+ {...rest}
78
+ >
79
+ {children}
80
+ </Collapse>
81
+ );
82
+ },
83
+ };
84
+
85
+ export default CollapseResolver;
@@ -0,0 +1,136 @@
1
+ import * as React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import Collapse from './Collapse';
4
+ import { MemoryRouter } from 'react-router-dom';
5
+ import GuiProvider from '@/context/GuiProvider';
6
+
7
+ const meta: Meta<typeof Collapse> = {
8
+ title: 'Atoms/Collapse',
9
+ component: Collapse,
10
+ tags: ['autodocs'],
11
+ decorators: [
12
+ (Story) => (
13
+ <MemoryRouter>
14
+ <GuiProvider>
15
+ <div style={{ padding: 16, minHeight: 220 }}>
16
+ <Story />
17
+ </div>
18
+ </GuiProvider>
19
+ </MemoryRouter>
20
+ ),
21
+ ],
22
+ parameters: {
23
+ docs: {
24
+ description: {
25
+ component: `
26
+ The **Collapse** atom is a thin wrapper around MUI's \`MuiCollapse\`, staying faithful to its API and polymorphism.
27
+
28
+ In **declarative** mode (resolver), it forwards MUI props as-is and supports granular styling via \`sx\` on the root.
29
+
30
+ ---
31
+ ## React usage
32
+ ~~~jsx
33
+ const [open, setOpen] = React.useState(true);
34
+
35
+ <Collapse in={open}>
36
+ <div style={{ padding: 12, border: '1px solid var(--mui-palette-divider)', borderRadius: 8 }}>
37
+ Collapsible content
38
+ </div>
39
+ </Collapse>
40
+ ~~~
41
+
42
+ ## Declarative JSON / Resolver
43
+ ~~~json
44
+ {
45
+ "type": "Collapse",
46
+ "props": {
47
+ "in": true,
48
+ "orientation": "vertical",
49
+ "sx": { "border": "1px dashed", "borderColor": "divider", "p": 1 }
50
+ }
51
+ }
52
+ ~~~
53
+ `,
54
+ },
55
+ },
56
+ controls: {
57
+ exclude: ['component', 'children', 'as', 'timeout', 'easing'],
58
+ },
59
+ },
60
+ argTypes: {
61
+ in: { control: 'boolean', description: 'Show/Hide content' },
62
+ orientation: { control: { type: 'radio' }, options: ['vertical', 'horizontal'] },
63
+ collapsedSize: { control: 'text', description: 'number or CSS size' },
64
+ unmountOnExit: { control: 'boolean' },
65
+ mountOnEnter: { control: 'boolean' },
66
+ appear: { control: 'boolean' },
67
+ sx: { control: 'object' },
68
+ },
69
+ args: {
70
+ in: true,
71
+ orientation: 'vertical',
72
+ collapsedSize: 0,
73
+ unmountOnExit: false,
74
+ mountOnEnter: false,
75
+ appear: false,
76
+ sx: {},
77
+ children: undefined,
78
+ },
79
+ };
80
+
81
+ export default meta;
82
+
83
+ type Story = StoryObj<typeof Collapse>;
84
+
85
+ const DemoBlock: React.FC<{ label?: string } & React.HTMLAttributes<HTMLDivElement>> = ({ label = 'Collapsible content', ...rest }) => (
86
+ <div
87
+ {...rest}
88
+ style={{
89
+ padding: 12,
90
+ border: '1px solid var(--mui-palette-divider)',
91
+ borderRadius: 8,
92
+ background: 'var(--mui-palette-background-paper)',
93
+ ...rest.style,
94
+ }}
95
+ >
96
+ {label}
97
+ </div>
98
+ );
99
+
100
+ // ======================= Stories =======================
101
+ export const Playground: Story = {
102
+ render: (args) => <Collapse {...args}><DemoBlock /></Collapse>,
103
+ };
104
+
105
+ export const Horizontal: Story = {
106
+ args: { orientation: 'horizontal', in: true, collapsedSize: 0 },
107
+ render: (args) => (
108
+ <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
109
+ <Collapse {...args}>
110
+ <DemoBlock label="Horizontal content" style={{ width: 240 }} />
111
+ </Collapse>
112
+ <span style={{ opacity: 0.7, fontSize: 12 }}>(Try toggling the \"in\" control)</span>
113
+ </div>
114
+ ),
115
+ };
116
+
117
+ export const WithSx: Story = {
118
+ args: { sx: { border: '1px dashed', borderColor: 'divider', p: 1 } },
119
+ render: (args) => (
120
+ <Collapse {...args}>
121
+ <DemoBlock label="Styled via sx on Collapse" />
122
+ </Collapse>
123
+ ),
124
+ };
125
+
126
+ export const UnmountOnExit: Story = {
127
+ args: { unmountOnExit: true, in: false },
128
+ render: (args) => (
129
+ <div>
130
+ <p style={{ margin: 0, opacity: 0.75 }}>Content is removed from the DOM when closed.</p>
131
+ <Collapse {...args}>
132
+ <DemoBlock label="Unmounts when closed" />
133
+ </Collapse>
134
+ </div>
135
+ ),
136
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * This.GUI — Collapse
3
+ * Thin wrapper around MUI’s Collapse that preserves props & typing.
4
+ *
5
+ * Fidelity
6
+ * - Directly re-exports MUI’s component so behavior/typing remain intact.
7
+ * - No custom logic; consumers keep using it exactly like MUI.
8
+ *
9
+ * Styling / Granular control
10
+ * - Supports MUI System styling via props exposed by MUI (e.g. `sx` on slots where applicable).
11
+ */
12
+ import * as React from 'react';
13
+ import MuiCollapse from '@mui/material/Collapse';
14
+ const Collapse = MuiCollapse;
15
+ export type CollapseProps = React.ComponentProps<typeof Collapse>;
16
+ (Collapse as any).displayName = 'Gui.Collapse';
17
+ export default Collapse;
@@ -0,0 +1,95 @@
1
+ import * as React from 'react';
2
+ import { Divider } from '@/gui/atoms';
3
+ import type { SxProps, Theme } from '@mui/material/styles';
4
+ import type { RegistryEntry, ResolveCtx } from '@/registry/types';
5
+ import { ensureNodeId } from '@/gui/utils/nodeID';
6
+
7
+ /**
8
+ * DividerResolver — declarative adapter for MUI Divider
9
+ *
10
+ * Fidelity
11
+ * - Forwards MUI props faithfully (orientation, flexItem, light, variant, textAlign, etc.).
12
+ * - Supports polymorphism via `component` (and alias `as`) when compatible with MUI Divider.
13
+ * - Granular styling via `sx` on the root Divider.
14
+ *
15
+ * Sugar
16
+ * - `text`: convenience for inline content (maps to children). If both `children` and `text`
17
+ * are provided, `children` takes precedence.
18
+ *
19
+ * JSON example:
20
+ * {
21
+ * "type": "Divider",
22
+ * "props": {
23
+ * "orientation": "vertical",
24
+ * "flexItem": true,
25
+ * "text": "OR",
26
+ * "sx": { "borderColor": "primary.main" }
27
+ * }
28
+ * }
29
+ */
30
+ export type DividerSpec = {
31
+ type: 'Divider';
32
+ props?: {
33
+ // Content
34
+ children?: React.ReactNode;
35
+ text?: React.ReactNode; // convenience alias for children
36
+
37
+ // Polymorphism
38
+ component?: React.ElementType | string;
39
+ as?: React.ElementType | string; // alias for component
40
+
41
+ // Common MUI Divider props (subset; passthrough handles the rest)
42
+ orientation?: 'horizontal' | 'vertical';
43
+ flexItem?: boolean;
44
+ light?: boolean;
45
+ variant?: 'fullWidth' | 'inset' | 'middle';
46
+ textAlign?: 'center' | 'left' | 'right';
47
+
48
+ // Styling & misc
49
+ sx?: SxProps<Theme>;
50
+ className?: string;
51
+ id?: string;
52
+ 'data-testid'?: string;
53
+
54
+ // Arbitrary passthrough
55
+ [key: string]: any;
56
+ };
57
+ };
58
+
59
+ const DividerResolver: RegistryEntry = {
60
+ type: 'Divider',
61
+ resolve(spec: DividerSpec, _ctx?: ResolveCtx) {
62
+ const p = spec.props ?? {};
63
+ // Extract and sanitize resolver-only fields so they don't leak to DOM
64
+ const {
65
+ children,
66
+ text,
67
+ as: _as,
68
+ component: _component,
69
+ sx,
70
+ className,
71
+ id,
72
+ 'data-testid': dataTestId,
73
+ ...rest
74
+ } = p;
75
+
76
+ const component = (_component ?? _as) as React.ElementType | string | undefined;
77
+ const content = children ?? text ?? undefined;
78
+ const dividerId = ensureNodeId('divider', id);
79
+
80
+ return (
81
+ <Divider
82
+ {...(component ? { component } : {})}
83
+ sx={sx}
84
+ className={className}
85
+ id={dividerId}
86
+ data-testid={dataTestId}
87
+ {...rest}
88
+ >
89
+ {content}
90
+ </Divider>
91
+ );
92
+ },
93
+ };
94
+
95
+ export default DividerResolver;