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