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,118 @@
1
+ import React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { Tooltip, Button, Typography } from '@/gui/atoms';
4
+
5
+ const meta: Meta<typeof Tooltip> = {
6
+ title: 'Atoms/Tooltip',
7
+ component: Tooltip,
8
+ tags: ['autodocs'],
9
+ parameters: {
10
+ docs: {
11
+ description: {
12
+ component:
13
+ "This Tooltip is a thin wrapper around MUI's Tooltip, supporting all MUI props and the `sx` prop for styling. Use it for helpful hover information, and configure it via JSON/config declaratively.",
14
+ },
15
+ },
16
+ },
17
+ };
18
+
19
+ export default meta;
20
+ type Story = StoryObj<typeof Tooltip>;
21
+
22
+ export const Playground: Story = {
23
+ args: {
24
+ title: 'Tooltip text',
25
+ placement: 'top',
26
+ arrow: false,
27
+ size: 'md',
28
+ children: <Button variant="contained">Hover me</Button>,
29
+ },
30
+ argTypes: {
31
+ title: { control: 'text' },
32
+ placement: {
33
+ control: 'select',
34
+ options: ['top', 'bottom', 'left', 'right'],
35
+ },
36
+ arrow: { control: 'boolean' },
37
+ size: {
38
+ control: 'select',
39
+ options: ['sm', 'md', 'lg'],
40
+ },
41
+ },
42
+ render: (args) => <Tooltip {...args} size={args.size}>{args.children}</Tooltip>,
43
+ };
44
+
45
+ export const PlacementRight: Story = {
46
+ name: 'Placement: right',
47
+ render: () => (
48
+ <Tooltip title="Right placed tooltip" placement="right">
49
+ <Button variant="contained">Hover right</Button>
50
+ </Tooltip>
51
+ ),
52
+ parameters: {
53
+ docs: {
54
+ description: {
55
+ story: 'Tooltip with `placement="right"` demonstrates MUI placement support.',
56
+ },
57
+ },
58
+ },
59
+ };
60
+
61
+ export const WithArrow: Story = {
62
+ name: 'Arrow',
63
+ render: () => (
64
+ <Tooltip title="Tooltip with arrow" arrow>
65
+ <Button variant="contained">Hover arrow</Button>
66
+ </Tooltip>
67
+ ),
68
+ parameters: {
69
+ docs: {
70
+ description: {
71
+ story: 'Tooltip with `arrow={true}` prop shows the arrow, just like MUI.',
72
+ },
73
+ },
74
+ },
75
+ };
76
+
77
+ export const WithTypography: Story = {
78
+ name: 'Wrapped Typography',
79
+ render: () => (
80
+ <Tooltip title="Tooltip on text">
81
+ <Typography variant="body1" sx={{ cursor: 'pointer', display: 'inline-block' }}>
82
+ Hover this text
83
+ </Typography>
84
+ </Tooltip>
85
+ ),
86
+ parameters: {
87
+ docs: {
88
+ description: {
89
+ story: 'Tooltip wrapping a Typography element, showing flexibility and full MUI compatibility.',
90
+ },
91
+ },
92
+ },
93
+ };
94
+
95
+
96
+ export const WithSize: Story = {
97
+ name: 'With Size',
98
+ render: () => (
99
+ <div style={{ display: 'flex', gap: 24 }}>
100
+ <Tooltip title="Small size tooltip" size="sm">
101
+ <Button variant="contained">Small (sm)</Button>
102
+ </Tooltip>
103
+ <Tooltip title="Medium size tooltip" size="md">
104
+ <Button variant="contained">Medium (md)</Button>
105
+ </Tooltip>
106
+ <Tooltip title="Large size tooltip" size="lg">
107
+ <Button variant="contained">Large (lg)</Button>
108
+ </Tooltip>
109
+ </div>
110
+ ),
111
+ parameters: {
112
+ docs: {
113
+ description: {
114
+ story: 'Demonstrates the Tooltip with different `size` props: small, medium, and large.',
115
+ },
116
+ },
117
+ },
118
+ };
@@ -0,0 +1,78 @@
1
+ /**
2
+ * This.GUI — Tooltip (atom)
3
+ * Thin wrapper around MUI's Tooltip that keeps a stable import path:
4
+ * import { Tooltip } from '@/gui/atoms'
5
+ *
6
+ * Extensions:
7
+ * - Adds an optional `size` prop (`'sm' | 'md' | 'lg' | 'xl'`) to scale typography/padding/arrow.
8
+ * - Still allows granular overrides via `slotProps.tooltip.sx` and `slotProps.arrow.sx`
9
+ * which take precedence (our size styles are merged first).
10
+ *
11
+ * Notes:
12
+ * - Tooltip is NOT polymorphic (no `component` prop).
13
+ * - Works seamlessly with This.GUI theme through GuiProvider.
14
+ *
15
+ * Examples:
16
+ * &lt;Tooltip title="Hello"&gt;&lt;Button&gt;Hover me&lt;/Button&gt;&lt;/Tooltip&gt;
17
+ * &lt;Tooltip title="Info" size="lg" arrow placement="right" slotProps={{ tooltip: { sx: { bgcolor: 'primary.main' } } }}&gt;
18
+ * &lt;IconButton&gt;&lt;Icon name="mui:Info" /&gt;&lt;/IconButton&gt;
19
+ * &lt;/Tooltip&gt;
20
+ */
21
+ import * as React from 'react';
22
+ import MuiTooltip, { type TooltipProps as MuiTooltipProps } from '@mui/material/Tooltip';
23
+
24
+ export type TooltipSize = 'sm' | 'md' | 'lg' | 'xl';
25
+
26
+ export type TooltipProps = Omit<MuiTooltipProps, 'slotProps'> & {
27
+ /**
28
+ * Visual size of the tooltip bubble (typography + padding + arrow).
29
+ * This is a This.GUI extension; if omitted, MUI defaults are used.
30
+ */
31
+ size?: TooltipSize;
32
+ /**
33
+ * Keep MUI slotProps but allow merging with size presets.
34
+ * User-provided sx is applied AFTER our size preset, so it wins.
35
+ */
36
+ slotProps?: MuiTooltipProps['slotProps'];
37
+ };
38
+
39
+ const SIZE_PRESETS: Record<TooltipSize, { tooltipSx: any; arrowSx: any }> = {
40
+ sm: { tooltipSx: { fontSize: 11, p: '4px 8px' }, arrowSx: { fontSize: 10 } },
41
+ md: { tooltipSx: { fontSize: 13, p: '6px 10px' }, arrowSx: { fontSize: 12 } },
42
+ lg: { tooltipSx: { fontSize: 15, p: '8px 12px' }, arrowSx: { fontSize: 14 } },
43
+ xl: { tooltipSx: { fontSize: 17, p: '10px 14px' }, arrowSx: { fontSize: 16 } },
44
+ };
45
+
46
+ const Tooltip = React.forwardRef<HTMLDivElement, TooltipProps>(function Tooltip(props, ref) {
47
+ const { size, slotProps, ...rest } = props;
48
+
49
+ // Build merged slotProps so consumer overrides win
50
+ const preset = size ? SIZE_PRESETS[size] : undefined;
51
+
52
+ const mergedSlotProps = React.useMemo<any>(() => {
53
+ if (!preset) return slotProps;
54
+ const next = { ...slotProps };
55
+
56
+ // Tooltip content
57
+ next.tooltip = {
58
+ ...(slotProps?.tooltip as any),
59
+ // Ensure `sx` is an array so both apply; user-provided last wins.
60
+ sx: [preset.tooltipSx, (slotProps?.tooltip as any)?.sx].filter(Boolean) as any,
61
+ } as any;
62
+
63
+ // Arrow (applies only if `arrow` prop is set, but harmless to keep)
64
+ next.arrow = {
65
+ ...(slotProps?.arrow as any),
66
+ sx: [preset.arrowSx, (slotProps?.arrow as any)?.sx].filter(Boolean) as any,
67
+ } as any;
68
+
69
+ return next;
70
+ }, [preset, slotProps]);
71
+
72
+ return <MuiTooltip ref={ref} slotProps={mergedSlotProps} {...rest} />;
73
+ });
74
+
75
+ (Tooltip as any).displayName = 'Gui.Tooltip';
76
+
77
+ export default Tooltip;
78
+ export type { TooltipProps as GuiTooltipProps };
@@ -0,0 +1,158 @@
1
+ // src/gui/atoms/Typography/Typography.resolver.tsx
2
+ import * as React from 'react';
3
+ import Typography from './Typography';
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
+ /**
10
+ * Declarative spec for Typography
11
+ * - JSON-friendly: prefer `to` / `href` / `external` over `component`.
12
+ * - React usage: `component` may be a real React element type (Link, etc.).
13
+ * - A `data-gui-id` is attached automatically for stable editor/node identification.
14
+ */
15
+ type TypographySpec = {
16
+ type: 'Typography';
17
+ props?: {
18
+ // Content
19
+ text?: React.ReactNode; // convenience for simple text
20
+ children?: React.ReactNode; // explicit children wins over `text`
21
+
22
+ // Core MUI props (subset; rest are passthrough)
23
+ variant?:
24
+ | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'
25
+ | 'subtitle1' | 'subtitle2'
26
+ | 'body1' | 'body2'
27
+ | 'caption' | 'overline'
28
+ | 'button';
29
+ align?: 'inherit' | 'left' | 'center' | 'right' | 'justify';
30
+ paragraph?: boolean;
31
+ gutterBottom?: boolean;
32
+ noWrap?: boolean;
33
+ color?: any;
34
+ variantMapping?: Record<string, React.ElementType>;
35
+
36
+ // Polymorphism / routing
37
+ component?: any; // React-only; ignored if a plain string (except 'a')
38
+ as?: any; // alias of component
39
+ to?: string; // SPA routing (resolver defaults to This.GUI Link)
40
+ href?: string; // anchor target
41
+ external?: boolean; // if true → anchor + safe target/rel
42
+ target?: React.HTMLAttributeAnchorTarget;
43
+ rel?: string;
44
+
45
+ // Styling / misc
46
+ sx?: SxProps<Theme>;
47
+ className?: string;
48
+ id?: string;
49
+ 'data-testid'?: string;
50
+
51
+ // arbitrary passthrough
52
+ [key: string]: any;
53
+ };
54
+ };
55
+
56
+ /**
57
+ * TypographyResolver
58
+ * - Maps JSON-friendly spec → real <Typography /> props.
59
+ * - If `to` is present (and no explicit component), defaults to This.GUI `Link`.
60
+ * - If `external` is true, or `href` is provided (and no explicit component), renders an anchor.
61
+ * - Never leaks `to`/`href` to invalid targets.
62
+ * - A `data-gui-id` is attached automatically for stable editor/node identification.
63
+ */
64
+ const TypographyResolver: RegistryEntry = {
65
+ type: 'Typography',
66
+ resolve(spec: TypographySpec) {
67
+ const p = spec.props ?? {};
68
+
69
+ // Stable editor/node id (does not collide with user's `id`)
70
+ const guiId = ensureNodeId('Typography', (p as any)['data-gui-id']);
71
+
72
+ // Resolve a safe component:
73
+ // - accept real React element types/functions (React usage)
74
+ // - allow intrinsic 'a' (string) explicitly
75
+ // - ignore other strings coming from JSON (e.g. "Link")
76
+ const rawComp = p.component ?? p.as;
77
+ const safeFromReact =
78
+ typeof rawComp === 'function' ? rawComp
79
+ : undefined;
80
+ const allowedIntrinsic = rawComp === 'a' ? 'a' : undefined;
81
+
82
+ let component: any = safeFromReact ?? allowedIntrinsic ?? undefined;
83
+
84
+ // Build routing props carefully, only when target supports them
85
+ const extraProps: Record<string, any> = {};
86
+
87
+ if (p.external) {
88
+ // External anchors always render as <a>
89
+ if (!component) component = 'a';
90
+ if (component === 'a') {
91
+ extraProps.href = p.href;
92
+ extraProps.target = p.target ?? '_blank';
93
+ extraProps.rel = p.rel ?? 'noopener noreferrer';
94
+ }
95
+ } else if (p.to && !component) {
96
+ // SPA routing by default uses our Link
97
+ component = Link;
98
+ extraProps.to = p.to;
99
+ } else if (p.href && !component) {
100
+ // Plain anchors (non-external)
101
+ component = 'a';
102
+ extraProps.href = p.href;
103
+ if (p.target) extraProps.target = p.target;
104
+ if (p.rel) extraProps.rel = p.rel;
105
+ } else {
106
+ // If user passed a real Link component explicitly, wire `to`
107
+ if (component === Link && p.to) {
108
+ extraProps.to = p.to;
109
+ }
110
+ // If user passed 'a', wire `href`/`target`/`rel`
111
+ if (component === 'a' && (p.href || p.target || p.rel)) {
112
+ if (p.href) extraProps.href = p.href;
113
+ if (p.target) extraProps.target = p.target;
114
+ if (p.rel) extraProps.rel = p.rel;
115
+ }
116
+ // Otherwise do not leak `to`/`href` to invalid DOM nodes
117
+ }
118
+
119
+ // Children precedence: explicit children > text > empty
120
+ const children = p.children ?? p.text ?? null;
121
+
122
+ // Strip resolver-only fields so they don't end up as DOM attributes
123
+ const {
124
+ text: _text,
125
+ as: _as,
126
+ external: _external,
127
+ to: _to,
128
+ href: _href,
129
+ target: _target,
130
+ rel: _rel,
131
+ ...rest
132
+ } = p;
133
+
134
+ return (
135
+ <Typography
136
+ component={component}
137
+ variant={p.variant}
138
+ align={p.align}
139
+ paragraph={p.paragraph}
140
+ gutterBottom={p.gutterBottom}
141
+ noWrap={p.noWrap}
142
+ color={p.color}
143
+ variantMapping={p.variantMapping}
144
+ sx={p.sx}
145
+ className={p.className}
146
+ id={p.id}
147
+ data-testid={p['data-testid']}
148
+ data-gui-id={guiId}
149
+ {...extraProps}
150
+ {...rest}
151
+ >
152
+ {children}
153
+ </Typography>
154
+ );
155
+ },
156
+ };
157
+
158
+ export default TypographyResolver;
@@ -0,0 +1,228 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { MemoryRouter } from 'react-router-dom';
3
+ import GuiProvider from '@/context/GuiProvider';
4
+ import Typography from './Typography';
5
+ import Link from '../Link/Link';
6
+
7
+ const meta = {
8
+ title: 'Atoms/Typography',
9
+ component: Typography,
10
+ tags: ['autodocs'],
11
+ decorators: [
12
+ (Story) => (
13
+ <MemoryRouter>
14
+ <GuiProvider>
15
+ <div style={{ padding: 24 }}>
16
+ <Story />
17
+ </div>
18
+ </GuiProvider>
19
+ </MemoryRouter>
20
+ ),
21
+ ],
22
+ parameters: {
23
+ docs: {
24
+ description: {
25
+ component: `
26
+ **Typography** is a thin, polymorphic wrapper around MUI's Typography that keeps the full API
27
+ while exposing it through This.GUI. Import it from **@/gui/primitives** instead of @mui/material so
28
+ you can swap render engines in the future without breaking consumers.
29
+
30
+ ### Key points
31
+ - Preserves MUI's polymorphism (\`component\`, \`as\`, \`variantMapping\`).
32
+ - Works with routers and anchors: \`component={Link}\` + \`to\`, or \`component="a"\` + \`href\`.
33
+ - Styled by your This.GUI theme (typography, palette, spacing).
34
+
35
+ ### Common variants
36
+ MUI variants like \`h1..h6\`, \`subtitle1/2\`, \`body1/2\`, \`caption\`, \`overline\` are supported.
37
+
38
+ ### Declarative JSON example
39
+ You can describe text nodes in JSON and hydrate them in a renderer:
40
+
41
+ ~~~json
42
+ {
43
+ "type": "Typography",
44
+ "props": {
45
+ "variant": "h4",
46
+ "component": "h2",
47
+ "gutterBottom": true
48
+ },
49
+ "children": "Section Title"
50
+ }
51
+ ~~~
52
+
53
+ A naive hydration would look like:
54
+
55
+ ~~~tsx
56
+ const spec = {
57
+ type: 'Typography',
58
+ props: { variant: 'h4', component: 'h2', gutterBottom: true },
59
+ children: 'Section Title'
60
+ };
61
+
62
+ <Typography {...spec.props}>{spec.children}</Typography>
63
+ ~~~
64
+ `,
65
+ },
66
+ },
67
+ controls: { exclude: ['component', 'to', 'href', 'variantMapping', 'ref'] },
68
+ },
69
+ } satisfies Meta<typeof Typography>;
70
+
71
+ export default meta;
72
+
73
+ type Story = StoryObj<typeof Typography>;
74
+
75
+ export const Basic: Story = {
76
+ args: {
77
+ variant: 'body1',
78
+ children: 'Hello from Typography',
79
+ },
80
+ };
81
+
82
+ export const Variants: Story = {
83
+ render: () => (
84
+ <div style={{ display: 'grid', gap: 8 }}>
85
+ <Typography variant="h1">h1. Heading</Typography>
86
+ <Typography variant="h2">h2. Heading</Typography>
87
+ <Typography variant="h3">h3. Heading</Typography>
88
+ <Typography variant="h4">h4. Heading</Typography>
89
+ <Typography variant="h5">h5. Heading</Typography>
90
+ <Typography variant="h6">h6. Heading</Typography>
91
+ <Typography variant="subtitle1">subtitle1</Typography>
92
+ <Typography variant="subtitle2">subtitle2</Typography>
93
+ <Typography variant="body1">body1</Typography>
94
+ <Typography variant="body2">body2</Typography>
95
+ <Typography variant="caption">caption</Typography>
96
+ <Typography variant="overline">overline</Typography>
97
+ </div>
98
+ ),
99
+ parameters: {
100
+ docs: {
101
+ description: {
102
+ story: 'Preview of common Material UI typography variants.'
103
+ }
104
+ }
105
+ }
106
+ };
107
+
108
+ export const AsPropAndGutter: Story = {
109
+ name: 'Semantic element (component) + gutter',
110
+ render: () => (
111
+ <div>
112
+ <Typography variant="h4" component="h2" gutterBottom>
113
+ Section title (rendered as h2)
114
+ </Typography>
115
+ <Typography variant="body1">
116
+ Body text below the title. The \`gutterBottom\` on the title adds spacing.
117
+ </Typography>
118
+ </div>
119
+ ),
120
+ };
121
+
122
+ export const Alignment: Story = {
123
+ render: () => (
124
+ <div style={{ display: 'grid', gap: 8 }}>
125
+ <Typography align="left">Left aligned</Typography>
126
+ <Typography align="center">Center aligned</Typography>
127
+ <Typography align="right">Right aligned</Typography>
128
+ </div>
129
+ ),
130
+ };
131
+
132
+ export const Colors: Story = {
133
+ render: () => (
134
+ <div style={{ display: 'grid', gap: 8 }}>
135
+ <Typography color="text.primary">text.primary</Typography>
136
+ <Typography color="text.secondary">text.secondary</Typography>
137
+ <Typography color="primary">primary</Typography>
138
+ <Typography color="#00aa96">#00aa96 (custom)</Typography>
139
+ </div>
140
+ ),
141
+ };
142
+
143
+ export const WithRouterAndAnchor: Story = {
144
+ name: 'Routing & anchors',
145
+ render: () => (
146
+ <div style={{ display: 'grid', gap: 12 }}>
147
+ {/* Router link (uses This.GUI Link under the hood) */}
148
+ <Typography component={Link as any} to="/docs" underline="none">
149
+ Go to /docs (Router link)
150
+ </Typography>
151
+
152
+ {/* External anchor */}
153
+ <Typography component="a" href="https://neurons.me" target="_blank" rel="noopener noreferrer">
154
+ Visit neurons.me (anchor)
155
+ </Typography>
156
+ </div>
157
+ ),
158
+ parameters: {
159
+ docs: {
160
+ description: {
161
+ story: 'Demonstrates polymorphism: render as router link (with `to`) and as anchor (with `href`).'
162
+ }
163
+ }
164
+ }
165
+ };
166
+
167
+ export const VariantMappingOverride: Story = {
168
+ name: 'variantMapping override',
169
+ render: () => (
170
+ <div style={{ display: 'grid', gap: 8 }}>
171
+ <Typography
172
+ variant="subtitle1"
173
+ variantMapping={{ subtitle1: 'h3', body1: 'p' }}
174
+ >
175
+ subtitle1 text rendered as an H3 element via variantMapping
176
+ </Typography>
177
+ <Typography
178
+ variant="body1"
179
+ variantMapping={{ subtitle1: 'h3', body1: 'p' }}
180
+ >
181
+ body1 text rendered as a P element via variantMapping
182
+ </Typography>
183
+ </div>
184
+ ),
185
+ parameters: {
186
+ docs: {
187
+ description: {
188
+ story: 'MUI Typography allows remapping variants to different HTML elements without changing visual style.'
189
+ }
190
+ }
191
+ }
192
+ };
193
+
194
+ export const DeclarativeSpec: Story = {
195
+ name: 'Declarative (JSON → Typography)',
196
+ render: () => {
197
+ const spec = {
198
+ type: 'Typography',
199
+ props: { variant: 'h5', component: 'h3', gutterBottom: true },
200
+ children: 'Declaratively rendered title',
201
+ } as const;
202
+
203
+ return (
204
+ <div style={{ display: 'grid', gap: 12 }}>
205
+ <pre style={{ background: 'rgba(127,127,127,0.08)', padding: 12, borderRadius: 8 }}>
206
+ {`{
207
+ "type": "Typography",
208
+ "props": {
209
+ "variant": "h5",
210
+ "component": "h3",
211
+ "gutterBottom": true
212
+ },
213
+ "children": "Declaratively rendered title"
214
+ }`}
215
+ </pre>
216
+ {/* naive renderer */}
217
+ <Typography {...spec.props}>{spec.children}</Typography>
218
+ </div>
219
+ );
220
+ },
221
+ parameters: {
222
+ docs: {
223
+ description: {
224
+ story: 'Example of hydrating a Typography node from a JSON spec. In production, your app would use a central registry/renderer.'
225
+ }
226
+ }
227
+ }
228
+ };
@@ -0,0 +1,27 @@
1
+ /*
2
+ * This.GUI — Typography (polymorphic)
3
+ * Thin wrapper over MUI's Typography that preserves its full polymorphic API:
4
+ * - `component` / `as` (MUI OverridableComponent)
5
+ * - `variantMapping`
6
+ * - works with router links (`component={Link}`) or anchors (`component="a"`)
7
+ *
8
+ * Import from "@/gui/atoms" instead of "@mui/material" so we can change
9
+ * the underlying engine without breaking consumers.
10
+ */
11
+ import * as React from 'react';
12
+ import MuiTypography from '@mui/material/Typography';
13
+ import type { OverridableComponent } from '@mui/material/OverridableComponent';
14
+ import type { TypographyTypeMap } from '@mui/material/Typography';
15
+ // Public prop type (mirrors MUI's polymorphic typing)
16
+ export type TypographyProps = React.ComponentProps<
17
+ OverridableComponent<TypographyTypeMap<{}, 'span'>>
18
+ >;
19
+ // Component: preserve MUI OverridableComponent so `component` works as in MUI
20
+ const Typography = MuiTypography as unknown as OverridableComponent<
21
+ TypographyTypeMap<{}, 'span'>
22
+ >;
23
+ // DevTools label
24
+ (Typography as any).displayName = 'Gui.Typography';
25
+ // Helpful alias for consumers who prefer a prefixed name
26
+ export type GuiTypographyProps = TypographyProps;
27
+ export default Typography;