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,171 @@
1
+ import * as React from 'react';
2
+ import Box from './Box';
3
+ import Link from '../Link/Link';
4
+ import type { RegistryEntry, ResolveCtx } from '@/registry/types';
5
+ import type { SxProps, Theme } from '@mui/material/styles';
6
+ import { ensureNodeId } from '@/gui/utils/nodeID';
7
+
8
+ /**
9
+ * Declarative spec for Box (polymorphic container)
10
+ *
11
+ * JSON-friendly rules:
12
+ * - Prefer `to` / `href` / `external` over passing a string `"Link"`.
13
+ * - We accept intrinsic element strings (e.g. 'div', 'section', 'span', 'a', 'img').
14
+ * - If `to` is present and no explicit React component was provided, we render with This.GUI `Link`.
15
+ * - If `href`/`external` are present and no explicit component was provided, we render an anchor (`'a'`).
16
+ * - When `component="img"`, image attributes (`src`, `alt`, `width`, `height`, etc.) are passed through.
17
+ */
18
+ export type BoxSpec = {
19
+ type: 'Box';
20
+ props?: {
21
+ children?: React.ReactNode;
22
+
23
+ // Polymorphism / routing
24
+ component?: React.ElementType | string;
25
+ as?: React.ElementType | string; // alias for component
26
+ to?: string; // router target (when component={Link} or inferred)
27
+ href?: string; // anchor target (when component='a' or inferred)
28
+ external?: boolean | 'true' | 1; // if truthy, anchor gets safe target/rel
29
+ target?: React.HTMLAttributeAnchorTarget;
30
+ rel?: string;
31
+
32
+ // IMG-specific (when component='img')
33
+ src?: string;
34
+ alt?: string;
35
+ width?: number | string;
36
+ height?: number | string;
37
+ loading?: 'eager' | 'lazy';
38
+ decoding?: 'auto' | 'sync' | 'async';
39
+ referrerPolicy?: React.HTMLAttributeReferrerPolicy;
40
+ sizes?: string;
41
+ srcSet?: string;
42
+
43
+ // Styling & misc
44
+ sx?: SxProps<Theme>;
45
+ className?: string;
46
+ id?: string;
47
+ 'data-testid'?: string;
48
+
49
+ // Allow system props / arbitrary passthrough (gap, p, m, display, etc.)
50
+ [key: string]: any;
51
+ };
52
+ };
53
+
54
+ const BoxResolver: RegistryEntry = {
55
+ type: 'Box',
56
+ resolve(spec: BoxSpec, _ctx?: ResolveCtx) {
57
+ const p = spec.props ?? {};
58
+
59
+ // Decide polymorphic target (safe for JSON):
60
+ // - Accept real React components (functions/classes).
61
+ // - Accept intrinsic strings ('div','section','span','a','img', etc.) EXCEPT the string "Link".
62
+ // - Infer Link/'a' from `to`/`href` when no explicit component is provided.
63
+ const rawComp = p.component ?? p.as;
64
+
65
+ const isReactComp = typeof rawComp === 'function';
66
+ const isString = typeof rawComp === 'string';
67
+
68
+ // Normalize strings (e.g. 'Img' -> 'img'); disallow the literal "Link"
69
+ const normalizedString = isString ? String(rawComp).trim() : undefined;
70
+ const lowered = normalizedString ? normalizedString.toLowerCase() : undefined;
71
+ const isIntrinsicString = !!normalizedString && lowered !== 'link';
72
+
73
+ let component: any | undefined =
74
+ isReactComp ? (rawComp as React.ElementType) :
75
+ isIntrinsicString ? normalizedString :
76
+ undefined;
77
+
78
+ if (!component) {
79
+ if (p.to) {
80
+ component = Link;
81
+ } else if (p.href || p.external) {
82
+ component = 'a';
83
+ }
84
+ }
85
+
86
+ // Build routing/anchor props only if they match the chosen component
87
+ const routingProps: Record<string, any> = {};
88
+ if (component === Link && p.to) {
89
+ routingProps.to = p.to;
90
+ }
91
+ if (component === 'a') {
92
+ routingProps.href = p.href;
93
+ const isExternal = p.external === true || p.external === 'true' || p.external === 1;
94
+ if (isExternal) {
95
+ routingProps.target = p.target ?? '_blank';
96
+ routingProps.rel = p.rel ?? 'noopener noreferrer';
97
+ } else {
98
+ if (p.target) routingProps.target = p.target;
99
+ if (p.rel) routingProps.rel = p.rel;
100
+ }
101
+ }
102
+
103
+ // IMG specific passthrough (only when explicitly rendering an <img>)
104
+ const imgProps =
105
+ component === 'img'
106
+ ? {
107
+ src: p.src,
108
+ alt: p.alt,
109
+ width: p.width,
110
+ height: p.height,
111
+ loading: p.loading,
112
+ decoding: p.decoding,
113
+ referrerPolicy: p.referrerPolicy,
114
+ sizes: p.sizes,
115
+ srcSet: p.srcSet,
116
+ }
117
+ : {};
118
+
119
+ // Dev-time nudge if someone picked 'img' without a src
120
+ if (process.env.NODE_ENV !== 'production' && component === 'img' && !p.src) {
121
+ // eslint-disable-next-line no-console
122
+ console.warn('[Box.resolver] component="img" used without a `src` prop.');
123
+ }
124
+
125
+ // Collect common props and avoid leaking resolver-only keys
126
+ const {
127
+ children,
128
+ // resolver-only / routing keys to strip
129
+ as: _as,
130
+ to: _to,
131
+ href: _href,
132
+ external: _external,
133
+ target: _target,
134
+ rel: _rel,
135
+ // img-only keys already handled
136
+ src: _src,
137
+ alt: _alt,
138
+ width: _width,
139
+ height: _height,
140
+ loading: _loading,
141
+ decoding: _decoding,
142
+ referrerPolicy: _referrerPolicy,
143
+ sizes: _sizes,
144
+ srcSet: _srcSet,
145
+ // passthrough everything else (system props, data-*, aria-*, etc.)
146
+ ...rest
147
+ } = p;
148
+
149
+ // Build root props, conditionally attach `component`
150
+ const rootProps: Record<string, any> = {
151
+ sx: p.sx,
152
+ id: ensureNodeId('box', p.id),
153
+ className: p.className,
154
+ 'data-testid': p['data-testid'],
155
+ ...routingProps,
156
+ ...imgProps,
157
+ ...rest,
158
+ };
159
+ if (component) {
160
+ rootProps.component = component;
161
+ }
162
+
163
+ return (
164
+ <Box {...rootProps}>
165
+ {children}
166
+ </Box>
167
+ );
168
+ },
169
+ };
170
+
171
+ export default BoxResolver;
@@ -0,0 +1,271 @@
1
+ // src/gui/atoms/Box/Box.stories.tsx
2
+ import * as React from 'react';
3
+ import type { Meta, StoryObj } from '@storybook/react';
4
+ import { Box, Link, Typography, Button } from '@/gui/atoms';
5
+ import { MemoryRouter } from 'react-router-dom';
6
+ import GuiProvider from '@/context/GuiProvider';
7
+
8
+ // ======================= Meta =======================
9
+ const meta: Meta<typeof Box> = {
10
+ title: 'Atoms/Box',
11
+ component: Box,
12
+ tags: ['autodocs'],
13
+ decorators: [
14
+ (Story) => (
15
+ <MemoryRouter>
16
+ <GuiProvider>
17
+ <div style={{ padding: 16, minHeight: 240 }}>
18
+ <Story />
19
+ </div>
20
+ </GuiProvider>
21
+ </MemoryRouter>
22
+ ),
23
+ ],
24
+ parameters: {
25
+ docs: {
26
+ description: {
27
+ component: `
28
+ **Box** is a thin wrapper around MUI's \`Box\` that preserves **polymorphism** and integrates with **This.GUI** theming.
29
+ Use it as your default layout primitive: spacing, flex/grid, backgrounds, borders, etc.
30
+
31
+ ---
32
+ ## Features
33
+ - **Polymorphic**: \`component\` (or \`as\`) can be an element tag (e.g. \`'section'\`, \`'img'\`, \`'a'\`) or a component (e.g. This.GUI \`Link\`).
34
+ - **Routing-friendly**: when using \`component={Link}\` you can pass \`to\`; anchors use \`href\`.
35
+ - **System props** & **sx**: use MUI system (p, m, display, gap, flex, grid, etc.) and the \`sx\` prop for deep styling.
36
+ - **Image mode**: if \`component="img"\`, you can pass \`src\`, \`alt\`, \`width\`, \`height\`, \`loading\`, \`decoding\`, \`referrerPolicy\`, \`sizes\`, \`srcSet\`.
37
+
38
+ ---
39
+ ## Key Props
40
+ - \`component?: ElementType | string\` / \`as?: ElementType | string\`
41
+ - \`to?: string\` (when \`component={Link}\`)
42
+ - \`href?: string\` (when \`component="a"\`)
43
+ - \`sx?: SxProps\` + all MUI system props (e.g. \`p\`, \`m\`, \`display\`, \`gap\`)
44
+ - **Image-only extras** (when \`component="img"\`): \`src\`, \`alt\`, \`width\`, \`height\`, \`loading\`, \`decoding\`, \`referrerPolicy\`, \`sizes\`, \`srcSet\`.
45
+
46
+ > We don't expose \`component\`, \`to\`, \`href\` as Storybook controls—see the dedicated stories below.
47
+
48
+ ---
49
+ ## Basic usage
50
+ ~~~jsx
51
+ import { Box } from '@/gui/atoms';
52
+
53
+ <Box p={2} sx={{ border: '1px solid', borderColor: 'divider', borderRadius: 1 }}>
54
+ Content
55
+ </Box>
56
+ ~~~
57
+
58
+ ## Polymorphic (as a section)
59
+ ~~~jsx
60
+ <Box component="section" p={2}>Section content</Box>
61
+ ~~~
62
+
63
+ ## Router link target
64
+ ~~~jsx
65
+ import { Box, Link } from '@/gui/atoms';
66
+
67
+ <Box component={Link} to="/docs" p={1} sx={{ display: 'inline-block' }}>
68
+ Go to docs
69
+ </Box>
70
+ ~~~
71
+
72
+ ## Image mode
73
+ ~~~jsx
74
+ <Box component="img" src="/logo.png" alt="Logo" sx={{ width: 120, height: 'auto' }} />
75
+ ~~~
76
+
77
+ ## Declarative JSON / Config usage
78
+ ~~~json
79
+ {
80
+ "type": "Box",
81
+ "props": {
82
+ "component": "section",
83
+ "p": 2,
84
+ "sx": { "border": "1px solid", "borderColor": "divider", "borderRadius": 8 },
85
+ "children": "Section content"
86
+ }
87
+ }
88
+ ~~~
89
+ `,
90
+ },
91
+ },
92
+ controls: {
93
+ exclude: ['component', 'as', 'to', 'href', 'sx'],
94
+ },
95
+ },
96
+ argTypes: {
97
+ // System props examples (you can add more if useful)
98
+ p: { control: { type: 'number' }, description: 'Padding (system prop)' },
99
+ m: { control: { type: 'number' }, description: 'Margin (system prop)' },
100
+ display: {
101
+ control: { type: 'select' },
102
+ options: ['block', 'inline-block', 'flex', 'grid', 'inline-flex', 'inline', 'none'],
103
+ },
104
+ gap: { control: { type: 'number' } },
105
+ },
106
+ args: {
107
+ p: 2,
108
+ display: 'block',
109
+ children: 'Box content',
110
+ },
111
+ };
112
+ export default meta;
113
+
114
+ type Story = StoryObj<typeof Box>;
115
+
116
+ // ======================= Stories =======================
117
+ export const Playground: Story = {};
118
+
119
+ export const LayoutBasics: Story = {
120
+ name: 'Layout basics (spacing, border, radius)',
121
+ render: (args) => (
122
+ <Box
123
+ {...args}
124
+ sx={{
125
+ border: '1px solid',
126
+ borderColor: 'divider',
127
+ borderRadius: 2,
128
+ bgcolor: 'background.paper',
129
+ }}
130
+ />
131
+ ),
132
+ };
133
+
134
+ export const FlexRow: Story = {
135
+ args: {},
136
+ render: () => (
137
+ <Box display="flex" gap={2}>
138
+ <Box p={1} sx={{ border: '1px dashed', borderColor: 'divider' }}>A</Box>
139
+ <Box p={1} sx={{ border: '1px dashed', borderColor: 'divider' }}>B</Box>
140
+ <Box p={1} sx={{ border: '1px dashed', borderColor: 'divider' }}>C</Box>
141
+ </Box>
142
+ ),
143
+ };
144
+
145
+ export const GridLayout: Story = {
146
+ render: () => (
147
+ <Box display="grid" sx={{ gridTemplateColumns: 'repeat(3, 1fr)', gap: 2 }}>
148
+ {Array.from({ length: 6 }).map((_, i) => (
149
+ <Box key={i} p={2} sx={{ border: '1px solid', borderColor: 'divider', borderRadius: 1 }}>
150
+ Cell {i + 1}
151
+ </Box>
152
+ ))}
153
+ </Box>
154
+ ),
155
+ };
156
+
157
+ export const AsSection: Story = {
158
+ name: 'Polymorphic: section',
159
+ render: () => (
160
+ <Box component="section" p={2} sx={{ borderLeft: '4px solid', borderColor: 'primary.main' }}>
161
+ <Typography variant="h6">Section title</Typography>
162
+ <Typography variant="body2" sx={{ opacity: 0.8 }}>
163
+ Section content goes here.
164
+ </Typography>
165
+ </Box>
166
+ ),
167
+ };
168
+
169
+ export const AsAnchor: Story = {
170
+ name: 'Polymorphic: anchor (href)',
171
+ render: () => (
172
+ <Box
173
+ component="a"
174
+ href="https://neurons.me"
175
+ target="_blank"
176
+ rel="noreferrer"
177
+ p={1}
178
+ sx={{
179
+ display: 'inline-block',
180
+ border: '1px solid',
181
+ borderColor: 'divider',
182
+ borderRadius: 1,
183
+ '&:hover': { textDecoration: 'none', bgcolor: 'action.hover' },
184
+ }}
185
+ >
186
+ Visit neurons.me
187
+ </Box>
188
+ ),
189
+ };
190
+
191
+ export const AsRouterLink: Story = {
192
+ name: 'Polymorphic: Link (to)',
193
+ render: () => (
194
+ <Box
195
+ component={Link}
196
+ to="/docs"
197
+ p={1}
198
+ sx={{
199
+ display: 'inline-block',
200
+ border: '1px solid',
201
+ borderColor: 'divider',
202
+ borderRadius: 1,
203
+ '&:hover': { textDecoration: 'none', bgcolor: 'action.hover' },
204
+ }}
205
+ >
206
+ Go to docs
207
+ </Box>
208
+ ),
209
+ };
210
+
211
+ export const ImageMode: Story = {
212
+ name: 'Image mode (component="img")',
213
+ render: () => (
214
+ <Box
215
+ component="img"
216
+ src="https://placekitten.com/320/160"
217
+ alt="Kitten"
218
+ sx={{ width: 320, height: 'auto', borderRadius: 1, border: '1px solid', borderColor: 'divider' }}
219
+ loading="lazy"
220
+ decoding="async"
221
+ />
222
+ ),
223
+ };
224
+
225
+ export const NestedComposition: Story = {
226
+ render: () => (
227
+ <Box p={2} sx={{ border: '1px solid', borderColor: 'divider', borderRadius: 1 }}>
228
+ <Typography variant="subtitle1" sx={{ mb: 1 }}>Nested composition</Typography>
229
+ <Box display="flex" gap={1}>
230
+ <Button variant="contained" color="primary">Action</Button>
231
+ <Box component={Link} to="/docs" sx={{ alignSelf: 'center' }}>
232
+ Learn more
233
+ </Box>
234
+ </Box>
235
+ </Box>
236
+ ),
237
+ };
238
+
239
+ export const SXDeepStyling: Story = {
240
+ name: 'Deep styling with sx',
241
+ render: () => (
242
+ <Box
243
+ p={2}
244
+ sx={{
245
+ borderRadius: 2,
246
+ bgcolor: 'background.paper',
247
+ border: '1px solid',
248
+ borderColor: 'divider',
249
+ '& .demo-title': {
250
+ fontWeight: 700,
251
+ color: 'text.primary',
252
+ mb: 1,
253
+ },
254
+ '& .demo-card': {
255
+ p: 1.5,
256
+ border: '1px solid',
257
+ borderColor: 'divider',
258
+ borderRadius: 1,
259
+ '&:hover': { bgcolor: 'action.hover' },
260
+ },
261
+ }}
262
+ >
263
+ <Typography className="demo-title">Cards</Typography>
264
+ <Box display="grid" sx={{ gridTemplateColumns: 'repeat(3, 1fr)', gap: 1.5 }}>
265
+ <Box className="demo-card">One</Box>
266
+ <Box className="demo-card">Two</Box>
267
+ <Box className="demo-card">Three</Box>
268
+ </Box>
269
+ </Box>
270
+ ),
271
+ };
@@ -0,0 +1,15 @@
1
+ // src/gui/atoms/Box/Box.tsx
2
+ /*
3
+ * This.GUI — Box (polymorphic)
4
+ * Wrapper that keeps MUI's own typing, including the `component` prop.
5
+ * Ejemplos válidos:
6
+ * <Box component="img" src="..." alt="..." />
7
+ * <Box component="a" href="..." />
8
+ */
9
+ import MuiBox from '@mui/material/Box';
10
+ import * as React from 'react';
11
+ // Re-export using MUI's own component type
12
+ const Box = MuiBox;
13
+ export type BoxProps = React.ComponentProps<typeof Box>;
14
+ (Box as any).displayName = 'Gui.Box';
15
+ export default Box;
@@ -0,0 +1,98 @@
1
+ // src/gui/primitives/Button/Button.resolver.tsx
2
+ import * as React from 'react';
3
+ import Button from './Button';
4
+ import Link from '../Link/Link';
5
+ import type { RegistryEntry } from '@/registry/types';
6
+ import type { SxProps, Theme } from '@mui/material/styles';
7
+ import { ensureNodeId } from '@/gui/utils/nodeID';
8
+ /**
9
+ * Declarative spec for Button.
10
+ * This is the JSON-friendly shape your renderer/LLM can emit.
11
+ */
12
+ type ButtonSpec = {
13
+ type: 'Button';
14
+ props?: {
15
+ // Content
16
+ label?: string; // convenience for children text
17
+ children?: React.ReactNode; // optional explicit children
18
+ // Visual
19
+ variant?: 'text' | 'outlined' | 'contained';
20
+ color?: 'inherit' | 'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'error';
21
+ size?: 'small' | 'medium' | 'large';
22
+ startIcon?: React.ReactNode | string;
23
+ endIcon?: React.ReactNode | string;
24
+ sx?: SxProps<Theme>;
25
+ disabled?: boolean;
26
+ fullWidth?: boolean;
27
+ // Routing / polymorphism
28
+ external?: boolean | 'true' | 1; // if true → anchor + target/rel
29
+ href?: string; // for anchors
30
+ to?: string; // for routers
31
+ target?: React.HTMLAttributeAnchorTarget;
32
+ rel?: string;
33
+ component?: React.ElementType | string; // override polymorphic target (e.g., your Link)
34
+ as?: React.ElementType | string;
35
+ type?: 'button' | 'submit' | 'reset';
36
+ // You can extend with data-* attributes, id, className, etc.
37
+ id?: string;
38
+ className?: string;
39
+ 'data-testid'?: string;
40
+ [key: string]: any;
41
+ };
42
+ };
43
+
44
+ /**
45
+ * ButtonResolver
46
+ * - Maps JSON-friendly spec → real <Button /> props.
47
+ * - Keeps MUI polymorphism intact. If `to` is provided and no `component`,
48
+ * it defaults to your primitives Link; if `external` is true, it uses an anchor safely.
49
+ */
50
+ const ButtonResolver: RegistryEntry = {
51
+ type: 'Button',
52
+ resolve(spec: ButtonSpec) {
53
+ const p = spec.props ?? {};
54
+ // Decide component priority
55
+ const isExternal = p.external === true || p.external === 'true' || p.external === 1;
56
+ let component: React.ElementType | string | undefined =
57
+ p.component ?? p.as ?? (p.to ? Link : (p.href || isExternal) ? 'a' : undefined);
58
+
59
+ const routingProps: Record<string, any> = {};
60
+ if (component === Link && p.to) {
61
+ routingProps.to = p.to;
62
+ } else if (component === 'a') {
63
+ routingProps.href = p.href;
64
+ if (isExternal) {
65
+ routingProps.target = p.target ?? '_blank';
66
+ routingProps.rel = p.rel ?? 'noopener noreferrer';
67
+ } else {
68
+ if (p.target) routingProps.target = p.target;
69
+ if (p.rel) routingProps.rel = p.rel;
70
+ }
71
+ }
72
+
73
+ // Children precedence: explicit children > label > fallback
74
+ const children = p.children ?? p.label ?? 'Button';
75
+ return (
76
+ <Button
77
+ {...(component ? { component } : {})}
78
+ variant={p.variant ?? 'text'}
79
+ color={p.color ?? 'inherit'}
80
+ size={p.size ?? 'medium'}
81
+ startIcon={p.startIcon}
82
+ endIcon={p.endIcon}
83
+ disabled={p.disabled}
84
+ fullWidth={p.fullWidth}
85
+ type={p.type}
86
+ sx={p.sx}
87
+ id={ensureNodeId('button', p.id)}
88
+ className={p.className}
89
+ data-testid={p['data-testid']}
90
+ {...routingProps}
91
+ >
92
+ {children}
93
+ </Button>
94
+ );
95
+ },
96
+ };
97
+
98
+ export default ButtonResolver;