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,154 @@
1
+ import * as React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { MemoryRouter } from 'react-router-dom';
4
+ import { Box, Stack, Typography, Paper } from "@/gui/atoms";
5
+ import GuiProvider from '@/context/GuiProvider';
6
+ import ThemeModeToggle from './ThemeModeToggle';
7
+
8
+ // ======================= Meta =======================
9
+ const meta: Meta<typeof ThemeModeToggle> = {
10
+ title: 'Molecules/Utilities/ThemeModeToggle',
11
+ component: ThemeModeToggle,
12
+ tags: ['autodocs'],
13
+ decorators: [
14
+ (Story) => (
15
+ <MemoryRouter>
16
+ <GuiProvider>
17
+ <Box sx={{ p: 2 }}>
18
+ <Story />
19
+ </Box>
20
+ </GuiProvider>
21
+ </MemoryRouter>
22
+ ),
23
+ ],
24
+ parameters: {
25
+ docs: {
26
+ description: {
27
+ component: `
28
+ A compact **theme mode switcher** that plugs into \`GuiProvider\`.
29
+
30
+ - **Variants**
31
+ - \`minimal\`: icon-only button (sun/moon).
32
+ - \`switch\`: MUI-like switch with state.
33
+ - Sizing follows the component's internal defaults for each variant.
34
+
35
+ The component reads and updates the active mode via **GuiProvider**
36
+ (\`useThemeContext()\`). No extra state wiring needed.
37
+
38
+ **Design guidance**
39
+ - Put it near the global theme selector, app bar, or user menu.
40
+ - If you need a fully custom look, wrap it and style via \`sx\` on the parent.
41
+ `,
42
+ },
43
+ },
44
+ },
45
+ argTypes: {
46
+ variant: {
47
+ control: { type: 'radio' },
48
+ options: ['minimal', 'switch'],
49
+ description: 'Visual style of the toggle.',
50
+ },
51
+ show: {
52
+ control: { type: 'radio' },
53
+ options: ['icons', 'label', 'both'],
54
+ description: 'What to render: icons, label, or both.',
55
+ },
56
+ id: { control: 'text', table: { category: 'DOM' } },
57
+ className: { control: 'text', table: { category: 'DOM' } },
58
+ 'data-testid': { control: 'text', table: { category: 'Testing' } },
59
+ },
60
+ args: {
61
+ variant: 'switch',
62
+ show: 'both',
63
+ },
64
+ };
65
+ export default meta;
66
+
67
+ type Story = StoryObj<typeof ThemeModeToggle>;
68
+
69
+ // ======================= Stories =======================
70
+ export const Playground: Story = {
71
+ render: (args) => (
72
+ <Paper elevation={0} sx={{ p: 2, display: 'flex', alignItems: 'center', gap: 2 }}>
73
+ <Typography variant="subtitle1" sx={{ fontWeight: 700 }}>
74
+ Try switching mode
75
+ </Typography>
76
+ <ThemeModeToggle {...args} />
77
+ </Paper>
78
+ ),
79
+ };
80
+
81
+ export const MinimalIconsOnly: Story = {
82
+ name: 'Minimal / Icons only',
83
+ args: { variant: 'minimal', show: 'icons' },
84
+ render: (args) => (
85
+ <Stack direction="row" spacing={2} alignItems="center">
86
+ <Typography variant="body2">Icon button that toggles light/dark</Typography>
87
+ <ThemeModeToggle {...args} />
88
+ </Stack>
89
+ ),
90
+ };
91
+
92
+ export const MinimalWithLabel: Story = {
93
+ name: 'Minimal / Icon + Label',
94
+ args: { variant: 'minimal', show: 'both' },
95
+ render: (args) => (
96
+ <Stack direction="row" spacing={2} alignItems="center">
97
+ <Typography variant="body2">Icon + label</Typography>
98
+ <ThemeModeToggle {...args} />
99
+ </Stack>
100
+ ),
101
+ };
102
+
103
+ export const SwitchIconsOnly: Story = {
104
+ name: 'Switch / Icons only',
105
+ args: { variant: 'switch', show: 'icons' },
106
+ render: (args) => (
107
+ <Stack direction="row" spacing={2} alignItems="center">
108
+ <Typography variant="body2">Compact switch</Typography>
109
+ <ThemeModeToggle {...args} />
110
+ </Stack>
111
+ ),
112
+ };
113
+
114
+ export const SwitchWithLabel: Story = {
115
+ name: 'Switch / With label',
116
+ args: { variant: 'switch', show: 'both' },
117
+ render: (args) => (
118
+ <Stack direction="row" spacing={2} alignItems="center">
119
+ <Typography variant="body2">Accessible labeled switch</Typography>
120
+ <ThemeModeToggle {...args} />
121
+ </Stack>
122
+ ),
123
+ };
124
+
125
+ // ======================= Docs-only snippets =======================
126
+ export const UsageSnippets: Story = {
127
+ name: 'Docs: Usage snippets',
128
+ parameters: {
129
+ docs: {
130
+ description: {
131
+ story: `
132
+ ### Minimal (icon button)
133
+ ~~~tsx
134
+ <ThemeModeToggle variant="minimal" show="icons" />
135
+ ~~~
136
+
137
+ ### Switch (with label)
138
+ ~~~tsx
139
+ <ThemeModeToggle variant="switch" show="both" />
140
+ ~~~
141
+
142
+ This component reads and updates the active mode from **GuiProvider**.
143
+ It does not require props for state; just render it once in your layout.
144
+ `,
145
+ },
146
+ },
147
+ },
148
+ render: () => (
149
+ <Stack direction="column" spacing={1}>
150
+ <ThemeModeToggle variant="minimal" show="icons" />
151
+ <ThemeModeToggle variant="switch" show="both" />
152
+ </Stack>
153
+ ),
154
+ };
@@ -0,0 +1,100 @@
1
+ import React from 'react';
2
+ import IconButton from '@mui/material/IconButton';
3
+ import Switch from '@mui/material/Switch';
4
+ import LightModeIcon from '@mui/icons-material/LightMode';
5
+ import DarkModeIcon from '@mui/icons-material/DarkMode';
6
+ import { useThemeContext } from '@/context/GuiProvider';
7
+ import Typography from '@mui/material/Typography';
8
+ import Box from '@mui/material/Box';
9
+ import type { SxProps, Theme } from '@mui/material/styles';
10
+ type ThemeModeToggleProps = {
11
+ variant?: 'minimal' | 'switch';
12
+ show?: 'icons' | 'label' | 'both';
13
+ switchSize?: 'small' | 'medium';
14
+ iconSize?: 'small' | 'medium' | 'large';
15
+ // Granular styling
16
+ sx?: SxProps<Theme>; // root container (IconButton or Box)
17
+ iconSx?: SxProps<Theme>; // both Light/Dark icons
18
+ switchSx?: SxProps<Theme>; // Switch component (when variant='switch')
19
+ labelSx?: SxProps<Theme>; // Typography label
20
+ id?: string;
21
+ className?: string;
22
+ ['data-testid']?: string;
23
+ };
24
+
25
+ const ThemeModeToggle: React.FC<ThemeModeToggleProps> = ({
26
+ variant = 'minimal',
27
+ show = 'icons',
28
+ switchSize = 'medium',
29
+ iconSize = 'medium',
30
+ sx,
31
+ iconSx,
32
+ switchSx,
33
+ labelSx,
34
+ id,
35
+ className,
36
+ ['data-testid']: dataTestId,
37
+ }) => {
38
+ const { mode, toggleMode } = useThemeContext();
39
+ const isLight = mode === 'light';
40
+ const labelText = isLight ? 'Light' : 'Dark';
41
+ if (variant === 'switch') {
42
+ return (
43
+ <Box
44
+ id={id}
45
+ display="flex"
46
+ alignItems="center"
47
+ onClick={toggleMode}
48
+ sx={sx ? ([{ cursor: 'pointer' }, sx] as SxProps<Theme>) : ({ cursor: 'pointer' } as SxProps<Theme>)}
49
+ className={className}
50
+ data-testid={dataTestId}
51
+ >
52
+ {show !== 'label' && (
53
+ <>
54
+ <LightModeIcon color={isLight ? 'primary' : 'disabled'} sx={iconSx} />
55
+ <Switch
56
+ checked={!isLight}
57
+ onChange={toggleMode}
58
+ color="primary"
59
+ size={switchSize}
60
+ inputProps={{ 'aria-label': 'toggle theme mode' }}
61
+ sx={switchSx}
62
+ />
63
+ <DarkModeIcon color={!isLight ? 'primary' : 'disabled'} sx={iconSx} />
64
+ </>
65
+ )}
66
+ {(show === 'label' || show === 'both') && (
67
+ <Typography
68
+ sx={
69
+ labelSx
70
+ ? ([{ ml: show === 'both' ? 1 : 0 }, labelSx] as SxProps<Theme>)
71
+ : ({ ml: show === 'both' ? 1 : 0 } as SxProps<Theme>)
72
+ }
73
+ >
74
+ {labelText}
75
+ </Typography>
76
+ )}
77
+ </Box>
78
+ );
79
+ }
80
+
81
+ // variant === 'minimal'
82
+ return (
83
+ <IconButton id={id} onClick={toggleMode} color="inherit" aria-label="toggle theme mode" size={iconSize} className={className} data-testid={dataTestId} sx={sx}>
84
+ {show !== 'label' && (isLight ? <LightModeIcon sx={iconSx} /> : <DarkModeIcon sx={iconSx} />)}
85
+ {(show === 'label' || show === 'both') && (
86
+ <Typography
87
+ sx={
88
+ labelSx
89
+ ? ([{ ml: show === 'both' ? 1 : 0 }, labelSx] as SxProps<Theme>)
90
+ : ({ ml: show === 'both' ? 1 : 0 } as SxProps<Theme>)
91
+ }
92
+ >
93
+ {labelText}
94
+ </Typography>
95
+ )}
96
+ </IconButton>
97
+ );
98
+ };
99
+
100
+ export default ThemeModeToggle;
@@ -0,0 +1,281 @@
1
+ // src/gui/molecules/Utilities/ThemeSelector.jsx
2
+ import React from 'react';
3
+ import {
4
+ IconButton, // .yes
5
+ Tooltip, // .yes
6
+ Menu, //yes
7
+ MenuItem,//yes
8
+ ListItemIcon,//yes
9
+ ListItemText, // yes
10
+ Box, // .yes
11
+ Divider, // .yes
12
+ Typography // .yes
13
+ } from '@/gui/atoms';
14
+ import MuiSwitch from '@mui/material/Switch';
15
+ import * as MuiIcons from '@mui/icons-material';
16
+ import { useThemeContext } from '@/context/GuiProvider';
17
+ import { AVAILABLE_THEMES } from '@/themes';
18
+ import { useTheme } from '@mui/material/styles';
19
+ // Icons ---------------------------------------------------------------
20
+ const Sun = MuiIcons.WbSunnyRounded || MuiIcons.WbSunny;
21
+ const Moon = MuiIcons.DarkModeRounded || MuiIcons.NightlightRound;
22
+ const Check = MuiIcons.Check || MuiIcons.Done;
23
+ const Info = MuiIcons.InfoOutlined || MuiIcons.Info;
24
+ const Brush = MuiIcons.Brush || MuiIcons.Edit;
25
+ const Palette = MuiIcons.Palette || MuiIcons.ColorLens;
26
+ // Render an icon spec from manifest (or string name for MUI icons)
27
+ const IconRenderer = ({ icon, fontSize = 'small', sx }) => {
28
+ if (typeof icon === 'string') {
29
+ const Comp = MuiIcons[icon] || Palette;
30
+ return <Comp fontSize={fontSize} sx={sx} />;
31
+ }
32
+ if (!icon || typeof icon !== 'object') return <Palette fontSize={fontSize} sx={sx} />;
33
+ const { type, value } = icon;
34
+ if (type === 'mui') {
35
+ const Comp = MuiIcons[value] || Palette;
36
+ return <Comp fontSize={fontSize} sx={sx} />;
37
+ }
38
+ if (type === 'url' || type === 'data') {
39
+ return <img src={value} alt="" style={{ display: 'inline-block', width: 18, height: 18 }} />;
40
+ }
41
+ if (type === 'svg') {
42
+ return (
43
+ <span aria-hidden style={{ display: 'inline-block', width: 18, height: 18 }}
44
+ dangerouslySetInnerHTML={{ __html: value }} />
45
+ );
46
+ }
47
+ return <Palette fontSize={fontSize} sx={sx} />;
48
+ };
49
+
50
+ // Group available themes by family id. Each item is expected like:
51
+ // { id: 'neurons-light', family: 'neurons', name: 'Neurons Light', mode: 'light', manifest }
52
+ function groupByFamily(items = []) {
53
+ const map = new Map();
54
+ for (const t of items) {
55
+ const family = String(t.family || t.id || t?.manifest?.id || '').trim();
56
+ if (!family) continue;
57
+ const entry = map.get(family) || { family, meta: t.manifest || {}, modes: {} };
58
+ entry.meta = t.manifest || entry.meta;
59
+ const hasMode = typeof t.mode === 'string' && t.mode.length > 0;
60
+ if (hasMode) {
61
+ const mode = String(t.mode).toLowerCase();
62
+ entry.modes[mode] = t;
63
+ } else if (t.manifest && t.manifest.modes && typeof t.manifest.modes === 'object') {
64
+ for (const mk of Object.keys(t.manifest.modes)) {
65
+ const modeKey = String(mk).toLowerCase();
66
+ if (!entry.modes[modeKey]) {
67
+ entry.modes[modeKey] = {
68
+ id: `${family}-${modeKey}`,
69
+ family,
70
+ name: `${t.manifest.name || family} ${modeKey[0].toUpperCase()}${modeKey.slice(1)}`,
71
+ mode: modeKey,
72
+ manifest: t.manifest,
73
+ };
74
+ }
75
+ }
76
+ }
77
+ map.set(family, entry);
78
+ }
79
+ return Array.from(map.values());
80
+ }
81
+
82
+ // Build up to N tiny color swatches from an item that may carry a compiled palette
83
+ const getPreviewSwatches = (item, fallbackTheme, limit = 8) => {
84
+ const p = item?.palette || item?.theme?.palette || fallbackTheme?.palette;
85
+ if (!p) return [];
86
+ const candidates = [
87
+ { key: 'background.default', label: 'background.default', value: p.background?.default },
88
+ { key: 'background.paper', label: 'background.paper', value: p.background?.paper },
89
+ { key: 'primary.main', label: 'primary.main', value: p.primary?.main },
90
+ { key: 'secondary.main', label: 'secondary.main', value: p.secondary?.main },
91
+ { key: 'link.main', label: 'link.main', value: p.link?.main || p.secondary?.main || p.primary?.main },
92
+ { key: 'text.primary', label: 'text.primary', value: p.text?.primary },
93
+ { key: 'text.secondary', label: 'text.secondary', value: p.text?.secondary },
94
+ { key: 'divider', label: 'divider', value: p.divider },
95
+ ];
96
+ return candidates.filter(c => Boolean(c.value)).slice(0, limit);
97
+ };
98
+
99
+ export default function ThemeSelector({ tooltip = 'Seleccionar tema / modo' }) {
100
+ const {
101
+ themeKey,
102
+ family,
103
+ mode,
104
+ availableFlat,
105
+ availableFamilies,
106
+ getManifestForFamily,
107
+ setMode,
108
+ setFamilyAndMode,
109
+ } = useThemeContext();
110
+ const items = Array.isArray(availableFlat) && availableFlat.length > 0 ? availableFlat : AVAILABLE_THEMES;
111
+ const [anchorEl, setAnchorEl] = React.useState(null);
112
+ const open = Boolean(anchorEl);
113
+ const [expandedFamily, setExpandedFamily] = React.useState(null);
114
+ const families = groupByFamily(items);
115
+ // Active entry comes from provider’s themeKey/family/mode
116
+ const active = items.find((t) => t.id === themeKey) || items[0];
117
+ const activeFamily = family || active?.family || (families[0]?.family ?? '');
118
+ const activeFamilyMeta =
119
+ (typeof getManifestForFamily === 'function' ? getManifestForFamily(activeFamily) : undefined) ||
120
+ families.find((f) => f.family === activeFamily)?.meta;
121
+ const activeIconSpec = activeFamilyMeta?.icon;
122
+ const handleOpen = (e) => setAnchorEl(e.currentTarget);
123
+ const handleClose = () => setAnchorEl(null);
124
+ const disabled = items.length === 0;
125
+ // -- Helpers ---------------------------------------------------------------
126
+ const parseFamilyAndMode = (id, fallbackFamily = activeFamily) => {
127
+ if (!id) return { family: fallbackFamily, mode: 'light' };
128
+ const parts = String(id).split('-');
129
+ const m = parts.pop();
130
+ const fam = parts.join('-') || fallbackFamily;
131
+ return { family: fam, mode: m };
132
+ };
133
+
134
+ const applyMode = (fam, m) => {
135
+ if (typeof setFamilyAndMode === 'function') {
136
+ try { setFamilyAndMode(fam, m); } catch {}
137
+ } else if (typeof setMode === 'function' && fam === activeFamily) {
138
+ try { setMode(m); } catch {}
139
+ }
140
+ };
141
+
142
+ const handleSelect = (id) => {
143
+ if (!id) return;
144
+ const { family: fam, mode: m } = parseFamilyAndMode(id, activeFamily);
145
+ applyMode(fam, m);
146
+ handleClose();
147
+ };
148
+
149
+ const muiTheme = useTheme();
150
+ const activeFamilyEntry = families.find((f) => f.family === activeFamily);
151
+ const lightMode = activeFamilyEntry?.modes?.light;
152
+ const darkMode = activeFamilyEntry?.modes?.dark;
153
+ const isDarkSelected = mode === 'dark' || (!!darkMode && themeKey === darkMode.id);
154
+ const isLightSelected = mode === 'light' || (!!lightMode && themeKey === lightMode.id);
155
+ return (
156
+ <>
157
+ <Tooltip title={tooltip}>
158
+ <span>
159
+ <IconButton onClick={handleOpen} disabled={disabled} aria-label="theme-selector" size="small">
160
+ <IconRenderer icon={activeIconSpec || 'Palette'} fontSize="small" />
161
+ </IconButton>
162
+ </span>
163
+ </Tooltip>
164
+ <Menu anchorEl={anchorEl} open={open} onClose={handleClose} keepMounted>
165
+ {families.length === 0 ? (
166
+ <MenuItem disabled>No themes available</MenuItem>
167
+ ) : (
168
+ families.map((fam, idx) => {
169
+ const { family, meta, modes } = fam;
170
+ const light = modes.light;
171
+ const dark = modes.dark;
172
+ const isActiveLight = !!light && themeKey === light.id;
173
+ const isActiveDark = !!dark && themeKey === dark.id;
174
+ return (
175
+ <Box key={family} component="div" sx={{ minWidth: 280 }}>
176
+ {/* Header: theme name + info icon (not disabled; full-contrast) */}
177
+ <MenuItem
178
+ disableRipple
179
+ sx={{
180
+ cursor: 'default',
181
+ opacity: 1,
182
+ '&:hover': { backgroundColor: 'transparent' },
183
+ py: 1,
184
+ }}
185
+ >
186
+ <ListItemIcon sx={{ minWidth: 34, color: 'text.secondary' }}>
187
+ <IconRenderer icon={meta?.icon || 'Palette'} fontSize="small" />
188
+ </ListItemIcon>
189
+ <ListItemText
190
+ primary={
191
+ <Typography variant="subtitle1" sx={{ fontWeight: 700, color: 'text.primary', lineHeight: 1.2 }}>
192
+ {meta?.name || family}
193
+ </Typography>
194
+ }
195
+ secondary={
196
+ meta?.description ? (
197
+ <Typography variant="body2" sx={{ color: 'text.secondary' }}>
198
+ {meta.description}
199
+ </Typography>
200
+ ) : undefined
201
+ }
202
+ />
203
+ <IconButton
204
+ size="small"
205
+ onClick={(e) => {
206
+ e.stopPropagation();
207
+ setExpandedFamily(expandedFamily === family ? null : family);
208
+ }}
209
+ >
210
+ <Info fontSize="small" />
211
+ </IconButton>
212
+ </MenuItem>
213
+
214
+ {/* Single row: Light / Dark pills, preview swatches, active check */}
215
+ <Box sx={{ display: 'flex', alignItems: 'center', px: 1.5, pb: 1 }}>
216
+ {/* Preview swatches */}
217
+ <Box sx={{ display: 'flex', gap: 0.75, ml: 'auto', mr: 1 }}>
218
+ {getPreviewSwatches(
219
+ isDarkSelected ? dark : (isLightSelected ? light : (dark || light)),
220
+ muiTheme
221
+ ).map((sw, i) => (
222
+ <Tooltip key={`${family}-sw-${sw.key}-${i}`} title={sw.label}>
223
+ <Box
224
+ sx={{
225
+ width: 14,
226
+ height: 14,
227
+ borderRadius: '4px',
228
+ ...(String(sw.value).includes('gradient')
229
+ ? { background: sw.value }
230
+ : { bgcolor: sw.value }),
231
+ border: '1px solid rgba(0,0,0,0.2)',
232
+ }}
233
+ />
234
+ </Tooltip>
235
+ ))}
236
+ </Box>
237
+ {/* Removed checkmark line */}
238
+ {/* Controls: Sun • Switch • Moon (compact group) aligned right */}
239
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>
240
+ <Sun fontSize="small" sx={{ opacity: light ? 1 : 0.4 }} />
241
+ <MuiSwitch
242
+ size="small"
243
+ checked={isDarkSelected}
244
+ disabled={!light || !dark}
245
+ onChange={(e) => {
246
+ const checked = e.target.checked;
247
+ const nextMode = checked ? 'dark' : 'light';
248
+ if (typeof setMode === 'function') {
249
+ try { setMode(nextMode); } catch {}
250
+ } else {
251
+ applyMode(activeFamily, nextMode);
252
+ }
253
+ }}
254
+ inputProps={{ 'aria-label': 'Toggle light/dark mode' }}
255
+ />
256
+ <Moon fontSize="small" sx={{ opacity: dark ? 1 : 0.4 }} />
257
+ </Box>
258
+ </Box>
259
+ {/* Expanded manifest info */}
260
+ {expandedFamily === family && (
261
+ <Box sx={{ px: 2, pb: 1.25, color: 'text.secondary', fontSize: 12 }}>
262
+ {meta?.author && (
263
+ <div><strong>Author:</strong> {typeof meta.author === 'string' ? meta.author : meta.author?.name}</div>
264
+ )}
265
+ {meta?.version && <div><strong>Version:</strong> {meta.version}</div>}
266
+ {meta?.homepage && <div><strong>Homepage:</strong> {meta.homepage}</div>}
267
+ {meta?.license && <div><strong>License:</strong> {meta.license}</div>}
268
+ {Array.isArray(meta?.tags) && meta.tags.length > 0 && (
269
+ <div><strong>Tags:</strong> {meta.tags.join(', ')}</div>
270
+ )}
271
+ </Box>
272
+ )}
273
+ {idx < families.length - 1 ? <Divider sx={{ my: 0.5 }} /> : null}
274
+ </Box>
275
+ );
276
+ })
277
+ )}
278
+ </Menu>
279
+ </>
280
+ );
281
+ }
@@ -0,0 +1,8 @@
1
+ // src/gui/utils/nodeID.ts
2
+ export function ensureNodeId(type: string, providedId?: string): string {
3
+ if (providedId) return providedId;
4
+ if (typeof crypto !== 'undefined' && crypto.randomUUID) {
5
+ return `${type}-${crypto.randomUUID()}`;
6
+ }
7
+ return `${type}-${Math.random().toString(36).slice(2)}`;
8
+ }
package/src/index.js ADDED
@@ -0,0 +1,111 @@
1
+ // this.gui/src/index.js
2
+ console.log("[this.gui] loaded.");
3
+ // TEMPLATES
4
+ import MinimalLayout from "./templates/Minimal";
5
+ // THEME
6
+ import { GuiProvider, useThemeContext } from "./context/GuiProvider";
7
+ // APPBARS
8
+ import TopBar from "@/gui/molecules/AppBars/TopBar/TopBar";
9
+ import Footer from "@/gui/molecules/AppBars/Footer/Footer";
10
+ import LeftSidebar from "@/gui/molecules/AppBars/LeftSidebar/LeftSidebar";
11
+ import RightSidebar from "@/gui/molecules/AppBars/RightSidebar/RightSidebar";
12
+ import StickyOptionsTop from "@/gui/molecules/AppBars/StickyOptions/StickyOptionsTop";
13
+ import TopBarAndSideBar from "@/gui/molecules/AppBars/TopBarAndSideBar/TopBarAndSideBar";//REMOVE SOON
14
+ import RightContextDrawer from "@/gui/molecules/AppBars/RightContextDrawer/RightContextDrawer"; //REMOVE SOON
15
+ // TEXT
16
+ import TextTitle from "./components/generics/Text/TextTitle";
17
+ import TextParagraph from "./components/generics/Text/TextParagraph";
18
+ import TextList from "./components/generics/Text/TextList";
19
+ import TextQuote from "./components/generics/Text/TextQuote";
20
+ // MEDIA
21
+ import Img from "./components/generics/Media/Img";
22
+ import VideoEmbed from "./components/generics/Media/VideoEmbed";
23
+ // ORGANIZATION
24
+ import TableOfContents from "./components/generics/Organization/TableOfContents";
25
+ import Tabs from "./components/generics/Organization/Tabs";
26
+ // LAYOUT
27
+ import PageContainer from "./components/generics/Layout/PageContainer";
28
+ import Gridx from "./components/generics/Layout/Gridx";
29
+ import Section from "./components/generics/Layout/Section";
30
+ import SectionHeader from "./components/generics/Layout/SectionHeader";
31
+ import PageDivider from "./components/generics/Layout/PageDivider";
32
+ import Hero2 from "./components/generics/Layout/Hero2";
33
+ // CODE
34
+ import CodeBlock from "./components/generics/Code/CodeBlock";
35
+ // FEEDBACK
36
+ import Callout from "./components/generics/Feedback/Callout";
37
+ // Cards
38
+ import ModuleCard from "./components/generics/Cards/ModuleCard";
39
+ import LilBox from "./components/generics/Cards/LilBox";
40
+ import Gridme from "./components/generics/Cards/Gridme";
41
+ // Chats
42
+ import FullChatBot from "./components/generics/Chats/FullChatBot";
43
+
44
+ // Named exports (para `import { TextTitle } from "this.gui"`)
45
+ export {
46
+ GuiProvider,
47
+ useThemeContext,
48
+ TopBar,
49
+ Footer,
50
+ StickyOptionsTop,
51
+ LeftSidebar,
52
+ RightSidebar,
53
+ MinimalLayout, //soon to be removed
54
+ TopBarAndSideBar, //soon to be removed
55
+ RightContextDrawer, //soon to be removed
56
+ TextTitle,
57
+ TextParagraph,
58
+ TextList,
59
+ TextQuote,
60
+ Img,
61
+ VideoEmbed,
62
+ TableOfContents,
63
+ Tabs,
64
+ PageContainer,
65
+ Gridx,
66
+ Section,
67
+ SectionHeader,
68
+ PageDivider,
69
+ Hero2,
70
+ CodeBlock,
71
+ Callout,
72
+ ModuleCard,
73
+ LilBox,
74
+ Gridme,
75
+ FullChatBot,
76
+ };
77
+
78
+ // Default namespace (para `import GUI from "this.gui"`)
79
+ const GUI = {
80
+ GuiProvider,
81
+ useThemeContext,
82
+ NavBar,
83
+ LeftDrawer,
84
+ RightDrawer,
85
+ StickyOptionsTop,
86
+ TopBarAndSideBar, // soon to be removed
87
+ RightContextDrawer, // soon to be removed
88
+ TextTitle,
89
+ TextParagraph,
90
+ TextList,
91
+ TextQuote,
92
+ Img,
93
+ VideoEmbed,
94
+ TableOfContents,
95
+ Tabs,
96
+ PageContainer,
97
+ Gridx,
98
+ Section,
99
+ SectionHeader,
100
+ PageDivider,
101
+ Hero2,
102
+ CodeBlock,
103
+ MinimalLayout,
104
+ Footer,
105
+ Callout,
106
+ ModuleCard,
107
+ LilBox,
108
+ Gridme,
109
+ FullChatBot,
110
+ };
111
+ export default GUI;
@@ -0,0 +1,19 @@
1
+ import { createRegistry } from "./factory";
2
+ import ButtonResolver from "../gui/atoms/Button/Button.resolver";
3
+ import LinkResolver from "../gui/atoms/Link/Link.resolver";
4
+ import TypographyResolver from "@/gui/atoms/Typography/Typography.resolver";
5
+ import DrawerResolver from "@/gui/atoms/Drawer/Drawer.resolver";
6
+ import NavBarResolver from "@/gui/molecules/AppBars/TopBar/TopBar.resolver";
7
+ import FooterResolver from "@/gui/molecules/AppBars/Footer/Footer.resolver";
8
+ // etc...
9
+ export const GuiRegistry = createRegistry([
10
+ //Atoms
11
+ ButtonResolver,
12
+ TypographyResolver,
13
+ LinkResolver,
14
+ DrawerResolver,
15
+ //Molecules
16
+ NavBarResolver,
17
+ FooterResolver,
18
+ // ...
19
+ ]);
@@ -0,0 +1,12 @@
1
+ import type { RegistryEntry, GuiRegistry } from "./types";
2
+
3
+ export function createRegistry(entries: RegistryEntry[]): GuiRegistry {
4
+ return entries.reduce<GuiRegistry>((acc, e) => {
5
+ acc[e.type] = e;
6
+ return acc;
7
+ }, {} as GuiRegistry);
8
+ }
9
+
10
+ export function extendRegistry(base: GuiRegistry, entries: RegistryEntry[]): GuiRegistry {
11
+ return { ...base, ...createRegistry(entries) };
12
+ }