this.gui 1.0.17 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. package/.storybook/main.js +40 -0
  2. package/.storybook/manager-head.html +13 -0
  3. package/.storybook/manager.js +15 -0
  4. package/.storybook/preview.tsx +54 -0
  5. package/.storybook/vitest.setup.js +6 -0
  6. package/.storybook/withLayout.tsx +18 -0
  7. package/README.md +1 -220
  8. package/dist/GUI.png +0 -0
  9. package/dist/GUI2.png +0 -0
  10. package/dist/favicon.ico +0 -0
  11. package/dist/this-gui.es.js +108493 -4976
  12. package/dist/this-gui.umd.js +239 -44
  13. package/dist/this.GUI.png +0 -0
  14. package/nodes/overall approach.md +93 -0
  15. package/notes/Proyect.md +109 -0
  16. package/package.json +71 -53
  17. package/public/GUI.png +0 -0
  18. package/public/GUI2.png +0 -0
  19. package/public/favicon.ico +0 -0
  20. package/public/this.GUI.png +0 -0
  21. package/src/components/generics/Cards/Gridme.jsx +52 -0
  22. package/src/components/generics/Cards/LilBox.jsx +65 -0
  23. package/src/components/generics/Cards/ModuleCard.jsx +106 -0
  24. package/src/components/generics/Chats/FullChatBot.jsx +223 -0
  25. package/src/components/generics/Code/CodeBlock.jsx +33 -0
  26. package/src/components/generics/Feedback/Callout.jsx +92 -0
  27. package/src/components/generics/Layout/GridX.jsx +29 -0
  28. package/src/components/generics/Layout/Hero2.jsx +132 -0
  29. package/src/components/generics/Layout/PageContainer.jsx +29 -0
  30. package/src/components/generics/Layout/PageDivider.jsx +20 -0
  31. package/src/components/generics/Layout/Section.jsx +43 -0
  32. package/src/components/generics/Layout/SectionHeader.jsx +21 -0
  33. package/src/components/generics/Media/Img.jsx +58 -0
  34. package/src/components/generics/Media/VideoEmbed.jsx +51 -0
  35. package/src/components/generics/Organization/TableOfContents.jsx +51 -0
  36. package/src/components/generics/Organization/Tabs.jsx +45 -0
  37. package/src/components/generics/Text/TextList.jsx +41 -0
  38. package/src/components/generics/Text/TextParagraph.jsx +28 -0
  39. package/src/components/generics/Text/TextQuote.jsx +23 -0
  40. package/src/components/generics/Text/TextTitle.jsx +44 -0
  41. package/src/components/this.me/MeActive.jsx +24 -0
  42. package/src/components/this.me/MeFloating.jsx +183 -0
  43. package/src/components/this.me/MeInactive.jsx +21 -0
  44. package/src/components/this.me/MeListUs.jsx +40 -0
  45. package/src/components/this.me/MeState.jsx +25 -0
  46. package/src/components/this.me/hooks/useMe.js +43 -0
  47. package/src/context/GuiProvider.tsx +243 -0
  48. package/src/gui/atoms/AppBar/AppBar.resolver.tsx +77 -0
  49. package/src/gui/atoms/AppBar/AppBar.stories.tsx +232 -0
  50. package/src/gui/atoms/AppBar/AppBar.tsx +10 -0
  51. package/src/gui/atoms/Box/Box.resolver.tsx +171 -0
  52. package/src/gui/atoms/Box/Box.stories.tsx +271 -0
  53. package/src/gui/atoms/Box/Box.tsx +15 -0
  54. package/src/gui/atoms/Button/Button.resolver.tsx +98 -0
  55. package/src/gui/atoms/Button/Button.stories.tsx +225 -0
  56. package/src/gui/atoms/Button/Button.tsx +40 -0
  57. package/src/gui/atoms/Collapse/Collapse.resolver.tsx +85 -0
  58. package/src/gui/atoms/Collapse/Collapse.stories.tsx +136 -0
  59. package/src/gui/atoms/Collapse/Collapse.tsx +17 -0
  60. package/src/gui/atoms/Divider/Divider.resolver.tsx +95 -0
  61. package/src/gui/atoms/Divider/Divider.stories.tsx +109 -0
  62. package/src/gui/atoms/Divider/Divider.tsx +14 -0
  63. package/src/gui/atoms/Drawer/Drawer.resolver.tsx +116 -0
  64. package/src/gui/atoms/Drawer/Drawer.stories.tsx +229 -0
  65. package/src/gui/atoms/Drawer/Drawer.tsx +8 -0
  66. package/src/gui/atoms/IconButton/IconButton.resolver.tsx +135 -0
  67. package/src/gui/atoms/IconButton/IconButton.stories.tsx +141 -0
  68. package/src/gui/atoms/IconButton/IconButton.tsx +22 -0
  69. package/src/gui/atoms/Link/Link.resolver.tsx +75 -0
  70. package/src/gui/atoms/Link/Link.stories.tsx +164 -0
  71. package/src/gui/atoms/Link/Link.tsx +14 -0
  72. package/src/gui/atoms/List/List.resolver.tsx +95 -0
  73. package/src/gui/atoms/List/List.stories.tsx +143 -0
  74. package/src/gui/atoms/List/List.tsx +20 -0
  75. package/src/gui/atoms/ListItem/ListItem.resolver.tsx +88 -0
  76. package/src/gui/atoms/ListItem/ListItem.stories.tsx +157 -0
  77. package/src/gui/atoms/ListItem/ListItem.tsx +19 -0
  78. package/src/gui/atoms/ListItemButton/ListItemButton.resolver.tsx +208 -0
  79. package/src/gui/atoms/ListItemButton/ListItemButton.stories.tsx +161 -0
  80. package/src/gui/atoms/ListItemButton/ListItemButton.tsx +15 -0
  81. package/src/gui/atoms/ListItemIcon/ListItemIcon.resolver.tsx +102 -0
  82. package/src/gui/atoms/ListItemIcon/ListItemIcon.stories.tsx +135 -0
  83. package/src/gui/atoms/ListItemIcon/ListItemIcon.tsx +11 -0
  84. package/src/gui/atoms/ListItemText/ListItemText.resolver.tsx +112 -0
  85. package/src/gui/atoms/ListItemText/ListItemText.stories.tsx +162 -0
  86. package/src/gui/atoms/ListItemText/ListItemText.tsx +15 -0
  87. package/src/gui/atoms/Menu/Menu.resolver.tsx +112 -0
  88. package/src/gui/atoms/Menu/Menu.stories.tsx +168 -0
  89. package/src/gui/atoms/Menu/Menu.tsx +17 -0
  90. package/src/gui/atoms/MenuItem/MenuItem.resolver.tsx +183 -0
  91. package/src/gui/atoms/MenuItem/MenuItem.stories.tsx +138 -0
  92. package/src/gui/atoms/MenuItem/MenuItem.tsx +14 -0
  93. package/src/gui/atoms/Paper/Paper.resolver.tsx +98 -0
  94. package/src/gui/atoms/Paper/Paper.stories.tsx +191 -0
  95. package/src/gui/atoms/Paper/Paper.tsx +17 -0
  96. package/src/gui/atoms/Stack/Stack.resolver.tsx +94 -0
  97. package/src/gui/atoms/Stack/Stack.stories.tsx +166 -0
  98. package/src/gui/atoms/Stack/Stack.tsx +15 -0
  99. package/src/gui/atoms/Switch/Switch.resolver.tsx +53 -0
  100. package/src/gui/atoms/Switch/Switch.stories.tsx +242 -0
  101. package/src/gui/atoms/Switch/Switch.tsx +22 -0
  102. package/src/gui/atoms/Toolbar/Toolbar.resolver.tsx +60 -0
  103. package/src/gui/atoms/Toolbar/Toolbar.stories.tsx +163 -0
  104. package/src/gui/atoms/Toolbar/Toolbar.tsx +16 -0
  105. package/src/gui/atoms/Tooltip/Tooltip.resolver.tsx +142 -0
  106. package/src/gui/atoms/Tooltip/Tooltip.stories.tsx +118 -0
  107. package/src/gui/atoms/Tooltip/Tooltip.tsx +78 -0
  108. package/src/gui/atoms/Typography/Typography.resolver.tsx +158 -0
  109. package/src/gui/atoms/Typography/Typography.stories.tsx +228 -0
  110. package/src/gui/atoms/Typography/Typography.tsx +27 -0
  111. package/src/gui/atoms.tsx +129 -0
  112. package/src/gui/index.ts +69 -0
  113. package/src/gui/molecules/AppBars/Footer/Footer.resolver.tsx +104 -0
  114. package/src/gui/molecules/AppBars/Footer/Footer.stories.tsx +499 -0
  115. package/src/gui/molecules/AppBars/Footer/Footer.tsx +307 -0
  116. package/src/gui/molecules/AppBars/LeftSidebar/LeftSidebar.resolver.tsx +75 -0
  117. package/src/gui/molecules/AppBars/LeftSidebar/LeftSidebar.stories.tsx +61 -0
  118. package/src/gui/molecules/AppBars/LeftSidebar/LeftSidebar.tsx +511 -0
  119. package/src/gui/molecules/AppBars/LeftSidebar/SidebarToggleButton.tsx +51 -0
  120. package/src/gui/molecules/AppBars/RightSidebar/RightSidebar.resolver.tsx +97 -0
  121. package/src/gui/molecules/AppBars/RightSidebar/RightSidebar.stories.tsx +294 -0
  122. package/src/gui/molecules/AppBars/RightSidebar/RightSidebar.tsx +295 -0
  123. package/src/gui/molecules/AppBars/StickyOptions/StickyOptionsTop.stories.tsx +480 -0
  124. package/src/gui/molecules/AppBars/StickyOptions/StickyOptionsTop.tsx +484 -0
  125. package/src/gui/molecules/AppBars/TopBar/TopBar.resolver.tsx +84 -0
  126. package/src/gui/molecules/AppBars/TopBar/TopBar.stories.tsx +297 -0
  127. package/src/gui/molecules/AppBars/TopBar/TopBar.tsx +299 -0
  128. package/src/gui/molecules/Utilities/ThemeModeToggle/ThemeModeToggle.resolver.tsx +72 -0
  129. package/src/gui/molecules/Utilities/ThemeModeToggle/ThemeModeToggle.stories.tsx +154 -0
  130. package/src/gui/molecules/Utilities/ThemeModeToggle/ThemeModeToggle.tsx +100 -0
  131. package/src/gui/molecules/Utilities/ThemeSelector.jsx +281 -0
  132. package/src/gui/utils/nodeID.ts +8 -0
  133. package/src/index.js +111 -0
  134. package/src/registry/GuiRegistry.ts +19 -0
  135. package/src/registry/factory.ts +12 -0
  136. package/src/registry/index.ts +3 -0
  137. package/src/registry/types.ts +6 -0
  138. package/src/stories/01.Home.mdx +22 -0
  139. package/src/stories/02.Understanding.This.GUI.md +149 -0
  140. package/src/stories/03.Themes.mdx +235 -0
  141. package/src/stories/04.GuiProvider.md +126 -0
  142. package/src/stories/04.GuiProvider.mdx +129 -0
  143. package/src/stories/Theme/BreakPointsAndGrids.stories.jsx +185 -0
  144. package/src/stories/Theme/Colors.stories.jsx +245 -0
  145. package/src/stories/Theme/Icons.stories.jsx +313 -0
  146. package/src/stories/Theme/Motion.stories.jsx +206 -0
  147. package/src/stories/Theme/ShadowAndElevation.stories.jsx +95 -0
  148. package/src/stories/Theme/SpacingAndRadius.stories.jsx +129 -0
  149. package/src/stories/Theme/Typography.stories.jsx +211 -0
  150. package/src/stories/assets/this.GUI.png +0 -0
  151. package/src/templates/BrowserExtension.jsx +56 -0
  152. package/src/templates/Layout.tsx +36 -0
  153. package/src/templates/Minimal.jsx +123 -0
  154. package/src/templates/Shell/Shell.jsx +107 -0
  155. package/src/themes/fromTokens.ts +352 -0
  156. package/src/themes/icons/Icon.tsx +137 -0
  157. package/src/themes/icons/packs/Lucide.ts +72 -0
  158. package/src/themes/icons/packs/Material.ts +87 -0
  159. package/src/themes/icons/registry.tsx +178 -0
  160. package/src/themes/index.js +116 -0
  161. package/src/themes/theme.d.ts +116 -0
  162. package/src/themes/tokens/global.tokens.json +107 -0
  163. package/src/themes/tokens/neurons/dark.tokens.json +45 -0
  164. package/src/themes/tokens/neurons/light.tokens.json +51 -0
  165. package/src/themes/tokens/neurons/manifest.json +23 -0
  166. package/src/types/theme.d.ts +32 -0
  167. package/src/types/viewport.ts +132 -0
  168. package/tsconfig.json +24 -0
  169. package/vite.config.js +74 -0
  170. package/dist/style.css +0 -1
  171. package/src/App.jsx +0 -63
  172. package/src/MdxProvider.jsx +0 -20
  173. package/src/Page.jsx +0 -28
  174. package/src/SiteBuilder.jsx +0 -39
  175. package/src/example.json +0 -43
  176. package/src/index.mdx +0 -164
  177. package/src/main.jsx +0 -15
  178. package/src/scripts/ComponentRegistry.js +0 -70
  179. package/src/scripts/logASCIIArt.js +0 -12
  180. package/src/scripts/postinstall.js +0 -100
  181. package/src/scripts/renderComponents.js +0 -11
  182. package/src/stories/Atoms/Alert/Alert.css +0 -211
  183. package/src/stories/Atoms/Alert/Alert.jsx +0 -56
  184. package/src/stories/Atoms/Alert/Alert.stories.jsx +0 -167
  185. package/src/stories/Atoms/Audio/Audio.css +0 -259
  186. package/src/stories/Atoms/Audio/Audio.jsx +0 -216
  187. package/src/stories/Atoms/Audio/Audio.stories.jsx +0 -191
  188. package/src/stories/Atoms/Badge/Badge.css +0 -249
  189. package/src/stories/Atoms/Badge/Badge.jsx +0 -54
  190. package/src/stories/Atoms/Badge/Badge.stories.jsx +0 -121
  191. package/src/stories/Atoms/Button/Button.css +0 -131
  192. package/src/stories/Atoms/Button/Button.jsx +0 -47
  193. package/src/stories/Atoms/Button/Button.stories.jsx +0 -184
  194. package/src/stories/Atoms/Caption/Caption.css +0 -169
  195. package/src/stories/Atoms/Caption/Caption.jsx +0 -72
  196. package/src/stories/Atoms/Caption/Caption.stories.jsx +0 -207
  197. package/src/stories/Atoms/Checkbox/Checkbox.css +0 -182
  198. package/src/stories/Atoms/Checkbox/Checkbox.jsx +0 -83
  199. package/src/stories/Atoms/Checkbox/Checkbox.stories.jsx +0 -112
  200. package/src/stories/Atoms/Container/Container.css +0 -89
  201. package/src/stories/Atoms/Container/Container.jsx +0 -54
  202. package/src/stories/Atoms/Container/Container.stories.jsx +0 -104
  203. package/src/stories/Atoms/Divider/Divider.css +0 -147
  204. package/src/stories/Atoms/Divider/Divider.jsx +0 -62
  205. package/src/stories/Atoms/Divider/Divider.stories.jsx +0 -105
  206. package/src/stories/Atoms/Grid/Grid.css +0 -160
  207. package/src/stories/Atoms/Grid/Grid.jsx +0 -43
  208. package/src/stories/Atoms/Grid/Grid.stories.jsx +0 -84
  209. package/src/stories/Atoms/Heading/Heading.css +0 -112
  210. package/src/stories/Atoms/Heading/Heading.jsx +0 -69
  211. package/src/stories/Atoms/Heading/Heading.stories.jsx +0 -130
  212. package/src/stories/Atoms/Icon/Icon.css +0 -240
  213. package/src/stories/Atoms/Icon/Icon.jsx +0 -80
  214. package/src/stories/Atoms/Icon/Icon.stories.jsx +0 -177
  215. package/src/stories/Atoms/Image/Image.css +0 -245
  216. package/src/stories/Atoms/Image/Image.jsx +0 -175
  217. package/src/stories/Atoms/Image/Image.stories.jsx +0 -332
  218. package/src/stories/Atoms/Label/Label.css +0 -171
  219. package/src/stories/Atoms/Label/Label.jsx +0 -71
  220. package/src/stories/Atoms/Label/Label.stories.jsx +0 -180
  221. package/src/stories/Atoms/Link/Link.css +0 -71
  222. package/src/stories/Atoms/Link/Link.jsx +0 -82
  223. package/src/stories/Atoms/Link/Link.stories.jsx +0 -153
  224. package/src/stories/Atoms/Loader/Loader.css +0 -106
  225. package/src/stories/Atoms/Loader/Loader.jsx +0 -58
  226. package/src/stories/Atoms/Loader/Loader.stories.jsx +0 -99
  227. package/src/stories/Atoms/Logo/Logo.css +0 -94
  228. package/src/stories/Atoms/Logo/Logo.jsx +0 -53
  229. package/src/stories/Atoms/Logo/Logo.stories.jsx +0 -120
  230. package/src/stories/Atoms/Paragraph/Paragraph.css +0 -180
  231. package/src/stories/Atoms/Paragraph/Paragraph.jsx +0 -77
  232. package/src/stories/Atoms/Paragraph/Paragraph.stories.jsx +0 -143
  233. package/src/stories/Atoms/ProgressBar/ProgressBar.css +0 -127
  234. package/src/stories/Atoms/ProgressBar/ProgressBar.jsx +0 -40
  235. package/src/stories/Atoms/ProgressBar/ProgressBar.stories.jsx +0 -86
  236. package/src/stories/Atoms/RadioButton/RadioButton.css +0 -130
  237. package/src/stories/Atoms/RadioButton/RadioButton.jsx +0 -87
  238. package/src/stories/Atoms/RadioButton/RadioButton.stories.jsx +0 -113
  239. package/src/stories/Atoms/Range/Range.css +0 -169
  240. package/src/stories/Atoms/Range/Range.jsx +0 -87
  241. package/src/stories/Atoms/Range/Range.stories.jsx +0 -110
  242. package/src/stories/Atoms/Section/Section.css +0 -268
  243. package/src/stories/Atoms/Section/Section.jsx +0 -63
  244. package/src/stories/Atoms/Section/Section.stories.jsx +0 -46
  245. package/src/stories/Atoms/Select/Select.css +0 -87
  246. package/src/stories/Atoms/Select/Select.jsx +0 -73
  247. package/src/stories/Atoms/Select/Select.stories.jsx +0 -109
  248. package/src/stories/Atoms/Slider/Slider.css +0 -90
  249. package/src/stories/Atoms/Slider/Slider.jsx +0 -129
  250. package/src/stories/Atoms/Slider/Slider.stories.jsx +0 -90
  251. package/src/stories/Atoms/Snackbar/Snackbar.css +0 -313
  252. package/src/stories/Atoms/Snackbar/Snackbar.jsx +0 -72
  253. package/src/stories/Atoms/Snackbar/Snackbar.stories.jsx +0 -78
  254. package/src/stories/Atoms/Spacer/Spacer.css +0 -114
  255. package/src/stories/Atoms/Spacer/Spacer.jsx +0 -35
  256. package/src/stories/Atoms/Spacer/Spacer.stories.jsx +0 -61
  257. package/src/stories/Atoms/Spinner/Spinner.css +0 -110
  258. package/src/stories/Atoms/Spinner/Spinner.jsx +0 -65
  259. package/src/stories/Atoms/Spinner/Spinner.stories.jsx +0 -58
  260. package/src/stories/Atoms/Tag/Tag.css +0 -112
  261. package/src/stories/Atoms/Tag/Tag.jsx +0 -75
  262. package/src/stories/Atoms/Tag/Tag.stories.jsx +0 -67
  263. package/src/stories/Atoms/TextArea/TextArea.css +0 -99
  264. package/src/stories/Atoms/TextArea/TextArea.jsx +0 -118
  265. package/src/stories/Atoms/TextArea/TextArea.stories.jsx +0 -36
  266. package/src/stories/Atoms/TextInput/TextInput.css +0 -102
  267. package/src/stories/Atoms/TextInput/TextInput.jsx +0 -133
  268. package/src/stories/Atoms/TextInput/TextInput.stories.jsx +0 -69
  269. package/src/stories/Atoms/Toggle/Toggle.css +0 -118
  270. package/src/stories/Atoms/Toggle/Toggle.jsx +0 -69
  271. package/src/stories/Atoms/Toggle/Toggle.stories.jsx +0 -35
  272. package/src/stories/Atoms/Tooltip/Tooltip.css +0 -383
  273. package/src/stories/Atoms/Tooltip/Tooltip.jsx +0 -46
  274. package/src/stories/Atoms/Tooltip/Tooltip.stories.jsx +0 -52
  275. package/src/stories/Atoms/Video/Video.css +0 -39
  276. package/src/stories/Atoms/Video/Video.jsx +0 -78
  277. package/src/stories/Atoms/Video/Video.stories.jsx +0 -41
  278. package/src/stories/Atoms/index.js +0 -72
  279. package/src/stories/Atoms/meta_Atoms.js +0 -51
  280. package/src/stories/Components.js +0 -198
  281. package/src/stories/Getting Started.mdx +0 -239
  282. package/src/stories/Layouts/Accordion/Accordion.css +0 -293
  283. package/src/stories/Layouts/Accordion/Accordion.jsx +0 -74
  284. package/src/stories/Layouts/Accordion/Accordion.stories.jsx +0 -39
  285. package/src/stories/Layouts/Flexbox/Flexbox.css +0 -16
  286. package/src/stories/Layouts/Flexbox/Flexbox.jsx +0 -11
  287. package/src/stories/Layouts/Flexbox/Flexbox.stories.jsx +0 -28
  288. package/src/stories/Layouts/Footer/Footer.css +0 -16
  289. package/src/stories/Layouts/Footer/Footer.jsx +0 -31
  290. package/src/stories/Layouts/Footer/Footer.stories.jsx +0 -28
  291. package/src/stories/Layouts/Header/Header.css +0 -16
  292. package/src/stories/Layouts/Header/Header.jsx +0 -31
  293. package/src/stories/Layouts/Header/Header.stories.jsx +0 -28
  294. package/src/stories/Layouts/HeroBanner/HeroBanner.css +0 -16
  295. package/src/stories/Layouts/HeroBanner/HeroBanner.jsx +0 -31
  296. package/src/stories/Layouts/HeroBanner/HeroBanner.stories.jsx +0 -28
  297. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.css +0 -16
  298. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.jsx +0 -31
  299. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.stories.jsx +0 -28
  300. package/src/stories/Layouts/Pagination/Pagination.css +0 -16
  301. package/src/stories/Layouts/Pagination/Pagination.jsx +0 -31
  302. package/src/stories/Layouts/Pagination/Pagination.stories.jsx +0 -28
  303. package/src/stories/Layouts/Sidebar/Sidebar.css +0 -16
  304. package/src/stories/Layouts/Sidebar/Sidebar.jsx +0 -71
  305. package/src/stories/Layouts/Sidebar/Sidebar.stories.jsx +0 -28
  306. package/src/stories/Layouts/Tabs/Tabs.css +0 -16
  307. package/src/stories/Layouts/Tabs/Tabs.jsx +0 -31
  308. package/src/stories/Layouts/Tabs/Tabs.stories.jsx +0 -28
  309. package/src/stories/Layouts/index.js +0 -25
  310. package/src/stories/Layouts/meta_Layouts.js +0 -28
  311. package/src/stories/MDX.mdx +0 -118
  312. package/src/stories/Miscellaneous/Miscellaneous.js +0 -24
  313. package/src/stories/Molecules/Accordion/Accordion.css +0 -4
  314. package/src/stories/Molecules/Accordion/Accordion.jsx +0 -25
  315. package/src/stories/Molecules/Accordion/Accordion.stories.jsx +0 -20
  316. package/src/stories/Molecules/AudioPlayer/AudioPlayer.css +0 -97
  317. package/src/stories/Molecules/AudioPlayer/AudioPlayer.jsx +0 -244
  318. package/src/stories/Molecules/AudioPlayer/AudioPlayer.stories.jsx +0 -55
  319. package/src/stories/Molecules/AvatarWithName/AvatarWithName.css +0 -130
  320. package/src/stories/Molecules/AvatarWithName/AvatarWithName.jsx +0 -80
  321. package/src/stories/Molecules/AvatarWithName/AvatarWithName.stories.jsx +0 -20
  322. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.css +0 -147
  323. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.jsx +0 -51
  324. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.stories.jsx +0 -36
  325. package/src/stories/Molecules/ButtonGroup/ButtonGroup.css +0 -465
  326. package/src/stories/Molecules/ButtonGroup/ButtonGroup.jsx +0 -47
  327. package/src/stories/Molecules/ButtonGroup/ButtonGroup.stories.jsx +0 -44
  328. package/src/stories/Molecules/Card/Card.css +0 -41
  329. package/src/stories/Molecules/Card/Card.jsx +0 -92
  330. package/src/stories/Molecules/Card/Card.stories.jsx +0 -34
  331. package/src/stories/Molecules/ComparisonTable/ComparisonTable.css +0 -35
  332. package/src/stories/Molecules/ComparisonTable/ComparisonTable.jsx +0 -104
  333. package/src/stories/Molecules/ComparisonTable/ComparisonTable.stories.jsx +0 -81
  334. package/src/stories/Molecules/DataTable/DataTable.css +0 -4
  335. package/src/stories/Molecules/DataTable/DataTable.jsx +0 -25
  336. package/src/stories/Molecules/DataTable/DataTable.stories.jsx +0 -20
  337. package/src/stories/Molecules/Dropdown/Dropdown.css +0 -192
  338. package/src/stories/Molecules/Dropdown/Dropdown.jsx +0 -96
  339. package/src/stories/Molecules/Dropdown/Dropdown.stories.jsx +0 -45
  340. package/src/stories/Molecules/FileUpload/FileUpload.css +0 -4
  341. package/src/stories/Molecules/FileUpload/FileUpload.jsx +0 -25
  342. package/src/stories/Molecules/FileUpload/FileUpload.stories.jsx +0 -20
  343. package/src/stories/Molecules/FormField/FormField.css +0 -4
  344. package/src/stories/Molecules/FormField/FormField.jsx +0 -25
  345. package/src/stories/Molecules/FormField/FormField.stories.jsx +0 -20
  346. package/src/stories/Molecules/Header/Header.css +0 -35
  347. package/src/stories/Molecules/Header/Header.jsx +0 -76
  348. package/src/stories/Molecules/Header/Header.stories.jsx +0 -28
  349. package/src/stories/Molecules/IconButton/IconButton.css +0 -4
  350. package/src/stories/Molecules/IconButton/IconButton.jsx +0 -25
  351. package/src/stories/Molecules/IconButton/IconButton.stories.jsx +0 -20
  352. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.css +0 -4
  353. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.jsx +0 -25
  354. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.stories.jsx +0 -20
  355. package/src/stories/Molecules/InputGroup/InputGroup.css +0 -4
  356. package/src/stories/Molecules/InputGroup/InputGroup.jsx +0 -25
  357. package/src/stories/Molecules/InputGroup/InputGroup.stories.jsx +0 -20
  358. package/src/stories/Molecules/InputWithLabel/InputWithLabel.css +0 -4
  359. package/src/stories/Molecules/InputWithLabel/InputWithLabel.jsx +0 -25
  360. package/src/stories/Molecules/InputWithLabel/InputWithLabel.stories.jsx +0 -20
  361. package/src/stories/Molecules/List/List.css +0 -4
  362. package/src/stories/Molecules/List/List.jsx +0 -25
  363. package/src/stories/Molecules/List/List.stories.jsx +0 -20
  364. package/src/stories/Molecules/MediaCard/MediaCard.css +0 -4
  365. package/src/stories/Molecules/MediaCard/MediaCard.jsx +0 -25
  366. package/src/stories/Molecules/MediaCard/MediaCard.stories.jsx +0 -20
  367. package/src/stories/Molecules/Modal/Modal.css +0 -4
  368. package/src/stories/Molecules/Modal/Modal.jsx +0 -25
  369. package/src/stories/Molecules/Modal/Modal.stories.jsx +0 -20
  370. package/src/stories/Molecules/Navbar/Navbar.css +0 -91
  371. package/src/stories/Molecules/Navbar/Navbar.jsx +0 -82
  372. package/src/stories/Molecules/Navbar/Navbar.stories.jsx +0 -70
  373. package/src/stories/Molecules/Notification/Notification.css +0 -4
  374. package/src/stories/Molecules/Notification/Notification.jsx +0 -25
  375. package/src/stories/Molecules/Notification/Notification.stories.jsx +0 -20
  376. package/src/stories/Molecules/PricingTable/PricingTable.css +0 -4
  377. package/src/stories/Molecules/PricingTable/PricingTable.jsx +0 -25
  378. package/src/stories/Molecules/PricingTable/PricingTable.stories.jsx +0 -20
  379. package/src/stories/Molecules/SearchBar/SearchBar.css +0 -69
  380. package/src/stories/Molecules/SearchBar/SearchBar.jsx +0 -73
  381. package/src/stories/Molecules/SearchBar/SearchBar.stories.jsx +0 -29
  382. package/src/stories/Molecules/SelectTheme/SelectTheme.css +0 -25
  383. package/src/stories/Molecules/SelectTheme/SelectTheme.jsx +0 -22
  384. package/src/stories/Molecules/SelectTheme/SelectTheme.stories.jsx +0 -24
  385. package/src/stories/Molecules/Sidebar/Sidebar.css +0 -67
  386. package/src/stories/Molecules/Sidebar/Sidebar.jsx +0 -80
  387. package/src/stories/Molecules/Sidebar/Sidebar.stories.jsx +0 -35
  388. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.css +0 -4
  389. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.jsx +0 -25
  390. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.stories.jsx +0 -20
  391. package/src/stories/Molecules/index.js +0 -58
  392. package/src/stories/Molecules/meta_Molecules.js +0 -47
  393. package/src/stories/Organisms/Profile/UserFriends/UserFriends.context.jsx +0 -15
  394. package/src/stories/Organisms/Profile/UserFriends/UserFriends.css +0 -4
  395. package/src/stories/Organisms/Profile/UserFriends/UserFriends.jsx +0 -13
  396. package/src/stories/Organisms/Profile/UserFriends/UserFriends.stories.jsx +0 -26
  397. package/src/stories/Organisms/Profile/UserPosts/UserPosts.context.jsx +0 -15
  398. package/src/stories/Organisms/Profile/UserPosts/UserPosts.css +0 -4
  399. package/src/stories/Organisms/Profile/UserPosts/UserPosts.jsx +0 -13
  400. package/src/stories/Organisms/Profile/UserPosts/UserPosts.stories.jsx +0 -26
  401. package/src/stories/Organisms/Profile/UserProfile/UserProfile.context.jsx +0 -15
  402. package/src/stories/Organisms/Profile/UserProfile/UserProfile.css +0 -4
  403. package/src/stories/Organisms/Profile/UserProfile/UserProfile.jsx +0 -13
  404. package/src/stories/Organisms/Profile/UserProfile/UserProfile.stories.jsx +0 -26
  405. package/src/stories/Organisms/meta_Organisms.js +0 -39
  406. package/src/stories/Pages/Page/Page.css +0 -69
  407. package/src/stories/Pages/Page/Page.jsx +0 -69
  408. package/src/stories/Pages/Page/Page.stories.js +0 -26
  409. package/src/stories/Pages/Page/Pages.js +0 -31
  410. package/src/stories/Templates/AdminDashboard/AdminDashboard.css +0 -7
  411. package/src/stories/Templates/AdminDashboard/AdminDashboard.jsx +0 -24
  412. package/src/stories/Templates/AdminDashboard/AdminDashboard.stories.jsx +0 -20
  413. package/src/stories/Templates/CallToAction/CallToAction.css +0 -7
  414. package/src/stories/Templates/CallToAction/CallToAction.jsx +0 -24
  415. package/src/stories/Templates/CallToAction/CallToAction.stories.jsx +0 -20
  416. package/src/stories/Templates/FeaturesList/FeaturesList.css +0 -7
  417. package/src/stories/Templates/FeaturesList/FeaturesList.jsx +0 -24
  418. package/src/stories/Templates/FeaturesList/FeaturesList.stories.jsx +0 -20
  419. package/src/stories/Templates/FormSection/FormSection.css +0 -7
  420. package/src/stories/Templates/FormSection/FormSection.jsx +0 -24
  421. package/src/stories/Templates/FormSection/FormSection.stories.jsx +0 -20
  422. package/src/stories/Templates/HeroSection/HeroSection.css +0 -7
  423. package/src/stories/Templates/HeroSection/HeroSection.jsx +0 -24
  424. package/src/stories/Templates/HeroSection/HeroSection.stories.jsx +0 -20
  425. package/src/stories/Templates/LocationInfo/LocationInfo.css +0 -7
  426. package/src/stories/Templates/LocationInfo/LocationInfo.jsx +0 -24
  427. package/src/stories/Templates/LocationInfo/LocationInfo.stories.jsx +0 -20
  428. package/src/stories/Templates/ProductPage/ProductPage.css +0 -7
  429. package/src/stories/Templates/ProductPage/ProductPage.jsx +0 -24
  430. package/src/stories/Templates/ProductPage/ProductPage.stories.jsx +0 -20
  431. package/src/stories/Templates/RegistrationPage/RegistrationPage.css +0 -7
  432. package/src/stories/Templates/RegistrationPage/RegistrationPage.jsx +0 -24
  433. package/src/stories/Templates/RegistrationPage/RegistrationPage.stories.jsx +0 -20
  434. package/src/stories/Templates/ShoppingCart/ShoppingCart.css +0 -7
  435. package/src/stories/Templates/ShoppingCart/ShoppingCart.jsx +0 -24
  436. package/src/stories/Templates/ShoppingCart/ShoppingCart.stories.jsx +0 -20
  437. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.css +0 -7
  438. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.jsx +0 -24
  439. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.stories.jsx +0 -20
  440. package/src/stories/Templates/SignInPage/SignInPage.css +0 -7
  441. package/src/stories/Templates/SignInPage/SignInPage.jsx +0 -24
  442. package/src/stories/Templates/SignInPage/SignInPage.stories.jsx +0 -20
  443. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.css +0 -7
  444. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.jsx +0 -24
  445. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.stories.jsx +0 -20
  446. package/src/stories/Templates/Testimonials/Testimonials.css +0 -7
  447. package/src/stories/Templates/Testimonials/Testimonials.jsx +0 -24
  448. package/src/stories/Templates/Testimonials/Testimonials.stories.jsx +0 -20
  449. package/src/stories/Templates/index.js +0 -33
  450. package/src/stories/Templates/meta_Templates.js +0 -29
  451. package/src/stories/assets/accessibility.png +0 -0
  452. package/src/stories/assets/accessibility.svg +0 -1
  453. package/src/stories/assets/addon-library.png +0 -0
  454. package/src/stories/assets/assets.png +0 -0
  455. package/src/stories/assets/avif-test-image.avif +0 -0
  456. package/src/stories/assets/context.png +0 -0
  457. package/src/stories/assets/discord.svg +0 -1
  458. package/src/stories/assets/docs.png +0 -0
  459. package/src/stories/assets/figma-plugin.png +0 -0
  460. package/src/stories/assets/github.svg +0 -1
  461. package/src/stories/assets/logo.png +0 -0
  462. package/src/stories/assets/logo.svg +0 -106
  463. package/src/stories/assets/share.png +0 -0
  464. package/src/stories/assets/styling.png +0 -0
  465. package/src/stories/assets/test.svg +0 -3
  466. package/src/stories/assets/testing.png +0 -0
  467. package/src/stories/assets/theming.png +0 -0
  468. package/src/stories/assets/tutorials.svg +0 -1
  469. package/src/stories/assets/youtube.svg +0 -1
  470. package/src/themes/README_Styles.md +0 -301
  471. package/src/themes/ThemeProvider.jsx +0 -61
  472. package/src/themes/styles/github/dark.css +0 -0
  473. package/src/themes/styles/github/light.css +0 -0
  474. package/src/themes/styles/neurons/dark.css +0 -247
  475. package/src/themes/styles/neurons/light.css +0 -280
  476. /package/{src/themes/styles/dracula/dark.css → .storybook/preview-head.html} +0 -0
  477. /package/src/{themes/styles/dracula/light.css → components/this.me/MeCard.jsx} +0 -0
@@ -0,0 +1,3 @@
1
+ export * from "./types";
2
+ export * from "./factory";
3
+ export { GuiRegistry } from "./GuiRegistry";
@@ -0,0 +1,6 @@
1
+ import type * as React from "react";
2
+ export type RegistryEntry = {
3
+ type: string;
4
+ resolve: (spec: any, ctx?: ResolveCtx) => React.ReactElement | null;};
5
+ export type GuiRegistry = Record<string, RegistryEntry>;
6
+ export type ResolveCtx = { theme?: any; [key: string]: any };
@@ -0,0 +1,22 @@
1
+ <div
2
+ style={{
3
+ display: 'flex',
4
+ flexDirection: 'column',
5
+ alignItems: 'center',
6
+ justifyContent: 'center',
7
+ minHeight: '70vh',
8
+ background: 'var(--gui-bg-default)',
9
+ color: 'var(--gui-text-primary)',
10
+ padding: '40px',
11
+ }}
12
+ >
13
+ <img
14
+ src="/this.GUI.png"
15
+ alt="This.GUI"
16
+ style={{ width: '300px', height: 'auto', imageRendering: 'auto', marginBottom: '10px', marginTop: '-34px' }}
17
+ />
18
+ <h1 style={{ fontSize: '4rem', margin: '0 0 5px 0' }}>.GUI</h1>
19
+ <p style={{ maxWidth: '600px', textAlign: 'center', fontSize: '1.2rem', lineHeight: '1.3', marginTop: '-8px' }}>
20
+ A collection of components and building blocks for the neurons.me environment, enabling declarative GUI generation powered by AI.
21
+ </p>
22
+ </div>
@@ -0,0 +1,149 @@
1
+ # Declarative GUI with `this.GUI`
2
+ `this.GUI` is designed as a **declarative layout system**, where all building blocks (NavBar, Drawers, StickyOptions, Footer) expose **clear JSON-friendly props**.
3
+ This **allows UIs to be described** and even generated by tools like **LLMs**, using nothing more than structured data.
4
+
5
+ ---
6
+
7
+ ## 🔑 Core Idea
8
+ - Every component exposes a **schema-like props API**.
9
+ - Layout respects **insets** (nav height, drawer widths) reported into the theme via `CustomThemeProvider`.
10
+ - The provider also mirrors these values into CSS variables (`--gui-inset-left`, `--gui-inset-right`, `--gui-nav-height`).
11
+ - With this contract, GUIs can be built from **JSON specs** instead of imperative React code.
12
+
13
+ Example JSON spec:
14
+
15
+ ```json
16
+ {
17
+ "route": "/dashboard",
18
+ "layout": {
19
+ "navbar": { "title": "Dashboard", "position": "fixed" },
20
+ "stickyOptions": {
21
+ "items": [
22
+ { "icon": "mui:BarChart", "label": "Stats", "href": "/stats" },
23
+ { "icon": "lucide:bolt", "label": "Power", "href": "/power" }
24
+ ]
25
+ },
26
+ "drawerLeft": { "title": "Menu", "items": [...] },
27
+ "drawerRight": { "title": "Context", "items": [...] },
28
+ "footer": { "text": "© 2025 neurons.me" }
29
+ }
30
+ }
31
+
32
+ Your renderer simply hydrates this into React components.
33
+
34
+
35
+ ---
36
+
37
+ ## 📦 Components
38
+
39
+ ### NavBar
40
+
41
+ **Props:**
42
+ - `title`: string
43
+ - `logo`: string (URL)
44
+ - `NavBarLinks`: array of `{ label, href, icon?, children? }`
45
+ - `position`: `"fixed"` | `"static"` | `"sticky"` (default: `"fixed"`)
46
+ - `showMenuButton`, `showThemeToggle`
47
+
48
+ NavBar measures its height and updates `theme.layout.insets.nav`.
49
+
50
+ ```jsx
51
+ <NavBar title="Demo" position="fixed" />
52
+ ```
53
+
54
+ ---
55
+
56
+ ### LeftDrawer & RightDrawer
57
+
58
+ **Props:**
59
+ - `drawerWidth`: number (default: 260)
60
+ - `variant`: `"permanent"` | `"temporary"` (auto-chooses based on screen size)
61
+ - `title`: optional with label + icon
62
+
63
+ Each drawer updates `theme.layout.insets.left` or `theme.layout.insets.right` when permanent.
64
+
65
+ ```jsx
66
+ <LeftDrawer title="Menu" items={[{ icon: 'mui:Home', label: 'Home' }]} />
67
+ <RightDrawer title="Context" items={[{ icon: 'mui:Info', label: 'Details' }]} />
68
+ ```
69
+
70
+ ---
71
+
72
+ ### StickyOptionsTop
73
+
74
+ Compact quick-actions bar that lives under the NavBar.
75
+
76
+ **Props:**
77
+ - `items`: actions `{ icon, label?, href?, iconColor?, variant? }`
78
+ - `positioning`: `{ mode: 'sticky' | 'fixed', topOffset, reserveSpace }`
79
+ - `mobileVariant`: `"auto"` | `"fab"` | `"inline"`
80
+ - `dense`: boolean
81
+
82
+ ```jsx
83
+ <StickyOptionsTop
84
+ items={[
85
+ { icon: 'mui:Settings', label: 'Settings', href: '/settings' },
86
+ { icon: 'lucide:bolt', label: 'Power', href: '/power', iconColor: 'primary' }
87
+ ]}
88
+ positioning={{ mode: 'sticky' }}
89
+ />
90
+ ```
91
+
92
+ ---
93
+
94
+ ### Footer
95
+
96
+ **Props:**
97
+ - `text`: string or ReactNode
98
+ - Automatically respects left/right insets from permanent drawers.
99
+
100
+ ```jsx
101
+ <Footer text="© 2025 neurons.me" />
102
+ ```
103
+
104
+ ---
105
+
106
+ ## 🌐 Why Declarative?
107
+
108
+ Every prop is JSON-serializable, so LLMs or external systems can generate full UIs declaratively:
109
+ - “Add a right drawer with a title and an insights icon”
110
+ - “Place a sticky options bar under the navbar with capture + settings”
111
+ - “On /reports, show the drawer and a compact navbar”
112
+
113
+ These map directly into JSON specs that your app hydrates into React.
114
+
115
+ ---
116
+
117
+ ## 🚀 Benefits
118
+ - **Schema-driven:** easy to serialize, validate, and diff.
119
+ - **LLM-ready:** prompt-to-UI becomes natural.
120
+ - **Layout-safe:** insets keep everything aligned automatically.
121
+ - **Composable:** any route can declare its layout in one object.
122
+
123
+ ---
124
+
125
+ ## Example: Full Route Layout
126
+
127
+ ```jsx
128
+ <NavBar title="Dashboard" />
129
+ <LeftDrawer title="Menu" />
130
+ <StickyOptionsTop items={items} />
131
+ <PageContent />
132
+ <Footer text="© 2025 neurons.me" />
133
+ ```
134
+
135
+ Or as JSON:
136
+
137
+ ```json
138
+ {
139
+ "navbar": { "title": "Dashboard" },
140
+ "drawerLeft": { "title": "Menu" },
141
+ "stickyOptions": { "items": [ ... ] },
142
+ "footer": { "text": "© 2025 neurons.me" }
143
+ }
144
+ ```
145
+
146
+ ---
147
+ That’s the philosophy: declarative contracts for every GUI building block, so your UI can be described, generated, and remixed by humans, scripts, or LLMs.
148
+ ---
149
+
@@ -0,0 +1,235 @@
1
+ # This.GUI — Theme Engine (v2)
2
+ **Token‑first. Manifest‑driven.**
3
+ Compiles **JSON tokens** into an MUI theme at runtime. Each **theme** now has **modes** (typically `light` and `dark`) defined by a **manifest**; we also export **CSS variables** and coordinate **insets** (bars/drawers) via `GuiProvider`.
4
+
5
+ ---
6
+
7
+ ## TL;DR
8
+ - **Tokens**: describe design values (colors, spacing, motion, …).
9
+ - **Manifest**: describes the *theme* (id, name, icon, modes and where their tokens live).
10
+ - **fromTokens**: `makeMuiTheme(globalTokens, modeTokens, mode)` produces an MUI theme.
11
+ - **getTheme**: builds a theme from `tokens`, from a `manifest`, or from **built‑ins**.
12
+ - **GuiProvider**: stores the active `family+mode`, injects **CSS vars** and coordinates **insets**.
13
+ - **Selector/Toggle**: UI to switch between `light`/`dark` of the active theme.
14
+ - **AppBar note**: MUI only supports `default | primary | secondary | transparent`. Other colors → use `sx`.
15
+
16
+ ---
17
+
18
+ ## Recommended structure
19
+
20
+ ```
21
+ src/themes/
22
+ tokens/
23
+ global.tokens.json # shared base (radius, spacing, motion…)
24
+ neurons/
25
+ manifest.json # describes the "neurons.me" theme
26
+ light.tokens.json # light‑mode tokens (values only, no metadata)
27
+ dark.tokens.json # dark‑mode tokens (values only, no metadata)
28
+ fromTokens.ts # compiler tokens → MUI theme
29
+ index.js # built‑in registry + public factories
30
+ theme.d.ts # optional DX types
31
+ ```
32
+
33
+ ### Manifest (what it is and what it contains)
34
+ - **Identity**: `id`, `name`, `description`, `author`, `version`, etc.
35
+ - **Where tokens are**: `modes.light.path` and `modes.dark.path`.
36
+ - **Theme icon**: `icon` (optional).
37
+ - Supported:
38
+ ```ts
39
+ type ThemeIcon =
40
+ | { type: 'mui' | 'lucide'; value: string } // icon-set name
41
+ | { type: 'url'; value: string } // path to .svg/.png
42
+ | { type: 'svg'; value: string } // inline SVG
43
+ | { type: 'data'; value: string }; // data URI
44
+ ```
45
+ - **Important**: we **no longer** keep `preview` or metadata inside token files; the preview is **derived** from the theme (e.g. `palette.background.default`, `palette.primary.main`, `palette.link.main`, etc.).
46
+
47
+ **Example `manifest.json`:**
48
+ ```json
49
+ {
50
+ "id": "neurons.me",
51
+ "name": "neurons.me",
52
+ "description": "A modern, flexible theme for Neuroverse.",
53
+ "author": "suiGn",
54
+ "version": "1.0.0",
55
+ "license": "MIT",
56
+ "icon": { "type": "mui", "value": "Palette" },
57
+ "modes": {
58
+ "light": { "path": "./light.tokens.json" },
59
+ "dark": { "path": "./dark.tokens.json" }
60
+ }
61
+ }
62
+ ```
63
+
64
+ ---
65
+
66
+ ## Tokens (what goes inside)
67
+ Token files contain **values only**. If you use Tokens Studio, keep the `{"$value": ...}` shape; the compiler understands it.
68
+
69
+ **Example `light.tokens.json` (trimmed):**
70
+ ```json
71
+ {
72
+ "color": {
73
+ "primary": { "$value": "#0a3a42" },
74
+ "secondary": { "$value": "#e5396f" },
75
+ "icon": { "$value": "#5e5e5e" },
76
+ "bgDefault": { "$value": "#f8f9fa" },
77
+ "bgPaper": { "$value": "#ffffff" },
78
+ "bgNav": { "$value": "#fdfdfd" },
79
+ "textPrimary": { "$value": "#111111" },
80
+ "textSecondary": { "$value": "#444444" },
81
+ "link": { "$value": "#008c7d" },
82
+ "linkVisited": { "$value": "#006e64" },
83
+ "border": { "$value": "rgba(0,0,0,0.08)" }
84
+ }
85
+ }
86
+ ```
87
+
88
+ ---
89
+
90
+ ## Compiler (`fromTokens.ts`)
91
+ **Primary API**
92
+ ```ts
93
+ makeMuiTheme(globalTokens: any, modeTokens: any, mode: 'light'|'dark'): Theme
94
+ ```
95
+
96
+ - Maps colors into `theme.palette`:
97
+ - `color.primary` → `palette.primary.main`
98
+ - `color.secondary` → `palette.secondary.main`
99
+ - `color.bgDefault` → `palette.background.default`
100
+ - `color.bgPaper` → `palette.background.paper`
101
+ - `color.bgNav` → `palette.background.nav` *(custom key)*
102
+ - `color.textPrimary` / `color.textSecondary` → `palette.text.*`
103
+ - `color.link` / `color.linkVisited` → `palette.link.*` *(custom key)*
104
+ - Semantic (`extendedColors.*`): `success`, `warning`, `error`, `info`
105
+ - Exposes **all** tokens again under `theme.custom.*` for a stable access surface.
106
+ - Builds `breakpoints`, `zIndex`, `typography`, `shadows`, `transitions`, etc.
107
+ - Injects **CSS variables** via `MuiCssBaseline`:
108
+ - `--gui-primary`, `--gui-secondary`, `--gui-bg-default`, `--gui-bg-paper`,
109
+ `--gui-bg-nav`, `--gui-text-primary`, `--gui-text-secondary`,
110
+ `--gui-link`, `--gui-link-visited`, `--gui-border`, etc.
111
+
112
+ **Manifest mode (optional)**
113
+ When needed, `makeMuiThemeFromManifest(manifest, { mode })` reads tokens from `manifest.modes[mode].tokens` and calls `makeMuiTheme(...)` internally.
114
+
115
+ ---
116
+
117
+ ## Registry & factories (`themes/index.js`)
118
+ - **Built‑ins**: we register `neurons` with its `manifest` and `light/dark` tokens.
119
+ - **createThemeFromTokens(tokens, mode)**: thin shortcut to `makeMuiTheme(...)`.
120
+ - **createThemeFromManifest(manifest, mode, tokensByMode?)**: uses manifest + (optional) map `{ light, dark }`.
121
+ - **getTheme**
122
+ ```ts
123
+ // options: { key?: string; manifest?: any; tokens?: any; mode: 'light' | 'dark' }
124
+ ```
125
+ - If you pass `tokens`: it prioritizes `createThemeFromTokens`.
126
+ - If you pass a `manifest`: it prioritizes `createThemeFromManifest`.
127
+ - If you pass a built‑in `key`: it resolves from the registry (`neurons` + `mode`).
128
+ - **AVAILABLE_THEMES**: flat list derived from built‑ins:
129
+ ```ts
130
+ type AvailableTheme = {
131
+ id: string; // e.g. "neurons-light"
132
+ family: string; // e.g. "neurons"
133
+ name: string; // e.g. "neurons.me Light"
134
+ mode: 'light'|'dark';
135
+ manifest: any;
136
+ }
137
+ ```
138
+
139
+ ---
140
+
141
+ ## GuiProvider (coordination & context)
142
+ `GuiProvider`:
143
+
144
+ 1) **Active theme state**
145
+ - Stores `themeKey` (e.g. `neurons-dark`) in `localStorage` (`this.gui:theme`).
146
+ - Derives `family` + `mode` from `AVAILABLE_THEMES`.
147
+ - Exposes helpers: `setMode('light'|'dark')`, `setFamilyAndMode(family, mode)`, `toggleMode()`.
148
+
149
+ 2) **Compiles and extends the theme**
150
+ - Calls `getTheme({ key: active.id })`.
151
+ - Injects `theme.layout.insets` and `theme.updateInsets(cb)`.
152
+ - Syncs CSS vars: `--gui-inset-left/right` and `--gui-nav-height`.
153
+
154
+ 3) **How components consume it**
155
+ - Use MUI’s `useTheme()` → you get **MUI + GuiProvider extensions**.
156
+ - Use `useMediaQuery(theme.breakpoints.*)` for consistent responsiveness.
157
+ - Read/update insets via `theme.layout.insets` and `theme.updateInsets`.
158
+
159
+ **Hook**
160
+ ```ts
161
+ import { useThemeContext } from '@/context/GuiProvider';
162
+
163
+ const { family, mode, toggleMode, setMode, setFamilyAndMode, availableFamilies } = useThemeContext();
164
+ ```
165
+
166
+ ---
167
+
168
+ ## Selector & Toggle
169
+ - **ThemeSelector**: shows the *theme name* (family), a derived **preview**, and a **toggle** (🌞/🌙) aligned to the right.
170
+ - **Previews**: derived from the active theme (e.g. `background.default`, `primary.main`, `secondary.main`, `link.main`, etc.). You can increase the grid and show tooltips with the token name.
171
+
172
+ ---
173
+
174
+ ## Compatibility notes (MUI)
175
+ - **AppBar `color`** supports `default | primary | secondary | transparent`.
176
+ - If you want `success | info | warning | error` or any custom color, use `sx`:
177
+ ```jsx
178
+ <AppBar
179
+ color="transparent"
180
+ sx={{
181
+ bgcolor: (t) => t.palette.success.main,
182
+ color: (t) => t.palette.getContrastText(t.palette.success.main)
183
+ }}
184
+ />
185
+ ```
186
+ - The rest of the components respect your `palette` and accept granular `sx`.
187
+
188
+ ---
189
+
190
+ ## Examples
191
+ ### 1) Use a built‑in (neurons dark)
192
+ ```ts
193
+ import { getTheme } from '@/themes';
194
+ const theme = getTheme({ key: 'neurons', mode: 'dark' });
195
+ ```
196
+
197
+ ### 2) Use “ad‑hoc” tokens (no manifest)
198
+ ```ts
199
+ import { getTheme } from '@/themes';
200
+ import myTokens from './my.light.tokens.json';
201
+
202
+ const theme = getTheme({ tokens: myTokens, mode: 'light' });
203
+ ```
204
+
205
+ ### 3) Switch mode from UI
206
+ ```tsx
207
+ import { useThemeContext } from '@/context/GuiProvider';
208
+
209
+ function ModeToggle() {
210
+ const { mode, toggleMode } = useThemeContext();
211
+ return <Switch checked={mode === 'dark'} onChange={toggleMode} />;
212
+ }
213
+ ```
214
+
215
+ ---
216
+
217
+ ## Troubleshooting
218
+ **“I don’t see my themes in the selector.”**
219
+ - Make sure `themes/index.js` registers your theme in `BUILT_IN` and that `AVAILABLE_THEMES` includes it.
220
+ - For an external theme, use `getTheme({ manifest, tokensByMode })` or `getTheme({ tokens })`.
221
+
222
+ **“AppBar won’t change to ‘success’.”**
223
+ - That’s expected: use `sx` as shown above.
224
+
225
+ **“I want pre‑painted CSS to avoid FOUC.”**
226
+ - You can generate a `tokens.css` at *build time* with default variables; `GuiProvider` will re‑hydrate at runtime.
227
+
228
+ ---
229
+
230
+ ## Final mental model
231
+ - **JSON tokens** define the design truth.
232
+ - **Manifest** describes the theme (icon, modes, and token locations).
233
+ - **fromTokens** compiles to **MUI theme** + `theme.custom.*` + **CSS vars**.
234
+ - **GuiProvider** selects `family+mode`, persists it, adds **insets**, and exposes helpers.
235
+ - **Components** consume the theme and style granularly with `sx` — mature, flexible, no lock‑in, ready for AI.
@@ -0,0 +1,126 @@
1
+ # GuiProvider
2
+ • Introduction & Features
3
+ • API table with props and context values
4
+ • Usage example with useThemeContext
5
+ • Notes on CSS vars, insets, and theme toggling
6
+ ## Introduction
7
+ `GuiProvider` is a React context provider component that extends Material-UI's (`@mui/material`) `ThemeProvider` with custom logic to manage themes.
8
+ It provides a centralized way to handle theme persistence, dynamic insets for layout adjustments, and theme toggling with support for multiple theme variants.
9
+ This component is designed to simplify theming in complex applications by combining theme state management, localStorage persistence, and CSS variable synchronization.
10
+
11
+ ## Features
12
+ - **Theme Persistence:** Automatically saves and loads the last selected theme using `localStorage`.
13
+ - **Insets Management:** Manages layout insets (left, right, navigation bar height) with synchronization to CSS variables for consistent styling.
14
+ - **Multi-Variant Theme Support:** Supports multiple themes beyond simple light/dark modes.
15
+ - **Theme Toggling:** Provides a toggle function to cycle through available themes or set a specific theme.
16
+ - **Integration with MUI Theme:** Injects custom layout insets and update callbacks into the MUI theme object for seamless access via `useTheme()`.
17
+
18
+ ## API
19
+ ### `GuiProvider`
20
+
21
+ #### Props
22
+
23
+ <table>
24
+ <thead>
25
+ <tr>
26
+ <th style="text-align:left;">Name</th>
27
+ <th style="text-align:left;">Type</th>
28
+ <th style="text-align:left;">Default</th>
29
+ <th style="text-align:left;">Description</th>
30
+ </tr>
31
+ </thead>
32
+ <tbody>
33
+ <tr>
34
+ <td><code>initialTheme</code></td>
35
+ <td><code>string</code></td>
36
+ <td><code>'neurons-dark'</code></td>
37
+ <td>The initial theme key to use on mount.</td>
38
+ </tr>
39
+ <tr>
40
+ <td><code>children</code></td>
41
+ <td><code>ReactNode</code></td>
42
+ <td>—</td>
43
+ <td>Child components to render within the provider.</td>
44
+ </tr>
45
+ </tbody>
46
+ </table>
47
+
48
+ #### Context Value
49
+
50
+ <p>The provider exposes the following context values via <code>useThemeContext()</code> hook:</p>
51
+
52
+ <table>
53
+ <thead>
54
+ <tr>
55
+ <th style="text-align:left;">Name</th>
56
+ <th style="text-align:left;">Type</th>
57
+ <th style="text-align:left;">Description</th>
58
+ </tr>
59
+ </thead>
60
+ <tbody>
61
+ <tr>
62
+ <td><code>themeName</code></td>
63
+ <td><code>string</code></td>
64
+ <td>The current active theme key.</td>
65
+ </tr>
66
+ <tr>
67
+ <td><code>setThemeName</code></td>
68
+ <td><code>function</code></td>
69
+ <td>Set the active theme by key.</td>
70
+ </tr>
71
+ <tr>
72
+ <td><code>availableThemes</code></td>
73
+ <td><code>Array</code></td>
74
+ <td>List of available theme metadata objects.</td>
75
+ </tr>
76
+ <tr>
77
+ <td><code>toggleTheme</code></td>
78
+ <td><code>function</code></td>
79
+ <td>Toggle between themes or set a specific theme.</td>
80
+ </tr>
81
+ <tr>
82
+ <td><code>getThemeMeta</code></td>
83
+ <td><code>function</code></td>
84
+ <td>Get metadata for a given theme key.</td>
85
+ </tr>
86
+ </tbody>
87
+ </table>
88
+
89
+ ## Usage Example
90
+
91
+ ```jsx
92
+ import React from 'react';
93
+ import { GuiProvider, useThemeContext } from './context/GuiProvider';
94
+
95
+ function ThemeSwitcher() {
96
+ const { themeName, toggleTheme, availableThemes } = useThemeContext();
97
+
98
+ <div>
99
+ <p>Current theme: {themeName}</p>
100
+ <button onClick={() => toggleTheme()}>Toggle Theme</button>
101
+ <ul>
102
+ {availableThemes.map(({ key, name }) => (
103
+ <li key={key}>
104
+ <button onClick={() => toggleTheme(key)}>{name}</button>
105
+ </li>
106
+ ))}
107
+ </ul>
108
+ </div>
109
+
110
+ export default function App() {
111
+ return (
112
+ <GuiProvider initialTheme="neurons-dark">
113
+ <ThemeSwitcher />
114
+ {/* Your app components here */}
115
+ </GuiProvider>
116
+ );
117
+ }
118
+ ```
119
+
120
+ ## Notes
121
+
122
+ - The `GuiProvider` component internally manages CSS variables (`--gui-inset-left`, `--gui-inset-right`, `--gui-nav-height`) to allow non-MUI components to adapt to the current layout insets.
123
+ - The theme toggle function cycles through all available themes, or can directly set a theme by its key.
124
+ - The available themes are derived from the `AVAILABLE_THEMES` array imported from the theme tokens, and include metadata such as name, mode, icon, and preview.
125
+ - Use the `useThemeContext()` hook to access theme-related state and functions within your components.
126
+ - This provider replaces the older `useThemeToggle` hook to avoid confusion and supports multi-variant theming beyond simple light/dark toggling.
@@ -0,0 +1,129 @@
1
+ # GuiProvider
2
+
3
+ - Introduction & Features
4
+ - API table with props and context values
5
+ - Usage example with useThemeContext
6
+ - Notes on CSS vars, insets, and theme toggling
7
+ ## Introduction
8
+ `GuiProvider` provides a centralized way to handle theme persistence, dynamic insets for layout adjustments, and theme toggling with support for multiple theme variants.
9
+ This component is designed to simplify theming in complex applications by combining theme state management, localStorage persistence, and CSS variable synchronization.
10
+
11
+ ## Features
12
+ - **Theme Persistence:** Automatically saves and loads the last selected theme using `localStorage`.
13
+ - **Insets Management:** Manages layout insets (left, right, navigation bar height) with synchronization to CSS variables for consistent styling.
14
+ - **Multi-Variant Theme Support:** Supports multiple themes beyond simple light/dark modes.
15
+ - **Theme Toggling:** Provides a toggle function to cycle through available themes or set a specific theme.
16
+ - **Integration with MUI Theme:** Injects custom layout insets and update callbacks into the MUI theme object for seamless access via `useTheme()`.
17
+
18
+ ## API
19
+ ### `GuiProvider`
20
+ There are only two props:
21
+ 1. initialTheme: Defines which theme key should be active when the provider first mounts.
22
+ If a value is stored in localStorage, that takes precedence.
23
+ 2. children: This is a standard React pattern.
24
+ • children means whatever JSX elements you wrap inside GuiProvider will be rendered there.
25
+ • For example:
26
+ ```jsx
27
+ <GuiProvider initialTheme="neurons-dark">
28
+ <App />
29
+ </GuiProvider>
30
+ ```
31
+
32
+ #### Props
33
+ <table>
34
+ <thead>
35
+ <tr>
36
+ <th>Name</th>
37
+ <th>Type</th>
38
+ <th>Default</th>
39
+ <th>Description</th>
40
+ </tr>
41
+ </thead>
42
+ <tbody>
43
+ <tr>
44
+ <td><code>initialTheme</code></td>
45
+ <td><code>string</code></td>
46
+ <td><code>'neurons-dark'</code></td>
47
+ <td>The initial theme key to use on mount.</td>
48
+ </tr>
49
+ <tr>
50
+ <td><code>children</code></td>
51
+ <td><code>ReactNode</code></td>
52
+ <td>—</td>
53
+ <td>Child components to render within the provider.</td>
54
+ </tr>
55
+ </tbody>
56
+ </table>
57
+ ---
58
+ #### Context Value
59
+ The context value refers to the collection of state and functions that the `GuiProvider` makes available to any component within its React tree.
60
+ This context is exposed through a custom hook called `useThemeContext()`, which allows components to easily access and interact with the current theme state, available themes, and theme-related actions such as toggling or setting a theme directly.
61
+ By using this hook, components can remain decoupled from the provider's internal implementation while still responding dynamically to theme changes and layout insets.
62
+ <p>The provider exposes the following context values via <code>useThemeContext()</code> hook:</p>
63
+
64
+ <table>
65
+ <thead>
66
+ <tr>
67
+ <th>Name</th>
68
+ <th>Type</th>
69
+ <th>Description</th>
70
+ </tr>
71
+ </thead>
72
+ <tbody>
73
+ <tr>
74
+ <td><code>themeName</code></td>
75
+ <td><code>string</code></td>
76
+ <td>The current active theme key.</td>
77
+ </tr>
78
+ <tr>
79
+ <td><code>setThemeName</code></td>
80
+ <td><code>function</code></td>
81
+ <td>Set the active theme by key.</td>
82
+ </tr>
83
+ <tr>
84
+ <td><code>availableThemes</code></td>
85
+ <td><code>Array</code></td>
86
+ <td>List of available theme metadata objects.</td>
87
+ </tr>
88
+ <tr>
89
+ <td><code>toggleTheme</code></td>
90
+ <td><code>function</code></td>
91
+ <td>Toggle between themes or set a specific theme.</td>
92
+ </tr>
93
+ <tr>
94
+ <td><code>getThemeMeta</code></td>
95
+ <td><code>function</code></td>
96
+ <td>Get metadata for a given theme key.</td>
97
+ </tr>
98
+ </tbody>
99
+ </table>
100
+
101
+ Here is a simple example demonstrating how to consume the context using the `useThemeContext()` hook:
102
+
103
+ ```jsx
104
+ import React from 'react';
105
+ import { useThemeContext } from 'this.gui';
106
+
107
+ function ThemeInfo() {
108
+ const { themeName, setThemeName, availableThemes, toggleTheme, getThemeMeta } = useThemeContext();
109
+ return (
110
+ <div>
111
+ <p>Current Theme: {themeName}</p>
112
+ <button onClick={() => toggleTheme()}>Toggle Theme</button>
113
+ <ul>
114
+ {availableThemes.map(({ key, name }) => (
115
+ <li key={key}>
116
+ <button onClick={() => setThemeName(key)}>{name}</button>
117
+ </li>
118
+ ))}
119
+ </ul>
120
+ </div>
121
+ );
122
+ }
123
+ ```
124
+
125
+ - `themeName`: The key of the currently active theme.
126
+ - `setThemeName`: Function to change the active theme by specifying its key.
127
+ - `availableThemes`: Array containing metadata about all themes available.
128
+ - `toggleTheme`: Function to cycle through available themes or set a specific theme.
129
+ - `getThemeMeta`: Function to retrieve metadata for a given theme key.