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,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;