this.gui 1.0.18 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (480) hide show
  1. package/.storybook/main.js +40 -0
  2. package/.storybook/manager-head.html +13 -0
  3. package/.storybook/manager.js +15 -0
  4. package/.storybook/preview.tsx +54 -0
  5. package/.storybook/vitest.setup.js +6 -0
  6. package/.storybook/withLayout.tsx +18 -0
  7. package/README.md +1 -220
  8. package/dist/GUI.png +0 -0
  9. package/dist/GUI2.png +0 -0
  10. package/dist/favicon.ico +0 -0
  11. package/dist/this-gui.es.js +108493 -5056
  12. package/dist/this-gui.umd.js +239 -44
  13. package/dist/this.GUI.png +0 -0
  14. package/nodes/overall approach.md +93 -0
  15. package/notes/Proyect.md +109 -0
  16. package/package.json +71 -54
  17. package/public/GUI.png +0 -0
  18. package/public/GUI2.png +0 -0
  19. package/public/favicon.ico +0 -0
  20. package/public/this.GUI.png +0 -0
  21. package/src/components/generics/Cards/Gridme.jsx +52 -0
  22. package/src/components/generics/Cards/LilBox.jsx +65 -0
  23. package/src/components/generics/Cards/ModuleCard.jsx +106 -0
  24. package/src/components/generics/Chats/FullChatBot.jsx +223 -0
  25. package/src/components/generics/Code/CodeBlock.jsx +33 -0
  26. package/src/components/generics/Feedback/Callout.jsx +92 -0
  27. package/src/components/generics/Layout/GridX.jsx +29 -0
  28. package/src/components/generics/Layout/Hero2.jsx +132 -0
  29. package/src/components/generics/Layout/PageContainer.jsx +29 -0
  30. package/src/components/generics/Layout/PageDivider.jsx +20 -0
  31. package/src/components/generics/Layout/Section.jsx +43 -0
  32. package/src/components/generics/Layout/SectionHeader.jsx +21 -0
  33. package/src/components/generics/Media/Img.jsx +58 -0
  34. package/src/components/generics/Media/VideoEmbed.jsx +51 -0
  35. package/src/components/generics/Organization/TableOfContents.jsx +51 -0
  36. package/src/components/generics/Organization/Tabs.jsx +45 -0
  37. package/src/components/generics/Text/TextList.jsx +41 -0
  38. package/src/components/generics/Text/TextParagraph.jsx +28 -0
  39. package/src/components/generics/Text/TextQuote.jsx +23 -0
  40. package/src/components/generics/Text/TextTitle.jsx +44 -0
  41. package/src/components/this.me/MeActive.jsx +24 -0
  42. package/src/components/this.me/MeFloating.jsx +183 -0
  43. package/src/components/this.me/MeInactive.jsx +21 -0
  44. package/src/components/this.me/MeListUs.jsx +40 -0
  45. package/src/components/this.me/MeState.jsx +25 -0
  46. package/src/components/this.me/hooks/useMe.js +43 -0
  47. package/src/context/GuiProvider.tsx +243 -0
  48. package/src/gui/atoms/AppBar/AppBar.resolver.tsx +77 -0
  49. package/src/gui/atoms/AppBar/AppBar.stories.tsx +232 -0
  50. package/src/gui/atoms/AppBar/AppBar.tsx +10 -0
  51. package/src/gui/atoms/Box/Box.resolver.tsx +171 -0
  52. package/src/gui/atoms/Box/Box.stories.tsx +271 -0
  53. package/src/gui/atoms/Box/Box.tsx +15 -0
  54. package/src/gui/atoms/Button/Button.resolver.tsx +98 -0
  55. package/src/gui/atoms/Button/Button.stories.tsx +225 -0
  56. package/src/gui/atoms/Button/Button.tsx +40 -0
  57. package/src/gui/atoms/Collapse/Collapse.resolver.tsx +85 -0
  58. package/src/gui/atoms/Collapse/Collapse.stories.tsx +136 -0
  59. package/src/gui/atoms/Collapse/Collapse.tsx +17 -0
  60. package/src/gui/atoms/Divider/Divider.resolver.tsx +95 -0
  61. package/src/gui/atoms/Divider/Divider.stories.tsx +109 -0
  62. package/src/gui/atoms/Divider/Divider.tsx +14 -0
  63. package/src/gui/atoms/Drawer/Drawer.resolver.tsx +116 -0
  64. package/src/gui/atoms/Drawer/Drawer.stories.tsx +229 -0
  65. package/src/gui/atoms/Drawer/Drawer.tsx +8 -0
  66. package/src/gui/atoms/IconButton/IconButton.resolver.tsx +135 -0
  67. package/src/gui/atoms/IconButton/IconButton.stories.tsx +141 -0
  68. package/src/gui/atoms/IconButton/IconButton.tsx +22 -0
  69. package/src/gui/atoms/Link/Link.resolver.tsx +75 -0
  70. package/src/gui/atoms/Link/Link.stories.tsx +164 -0
  71. package/src/gui/atoms/Link/Link.tsx +14 -0
  72. package/src/gui/atoms/List/List.resolver.tsx +95 -0
  73. package/src/gui/atoms/List/List.stories.tsx +143 -0
  74. package/src/gui/atoms/List/List.tsx +20 -0
  75. package/src/gui/atoms/ListItem/ListItem.resolver.tsx +88 -0
  76. package/src/gui/atoms/ListItem/ListItem.stories.tsx +157 -0
  77. package/src/gui/atoms/ListItem/ListItem.tsx +19 -0
  78. package/src/gui/atoms/ListItemButton/ListItemButton.resolver.tsx +208 -0
  79. package/src/gui/atoms/ListItemButton/ListItemButton.stories.tsx +161 -0
  80. package/src/gui/atoms/ListItemButton/ListItemButton.tsx +15 -0
  81. package/src/gui/atoms/ListItemIcon/ListItemIcon.resolver.tsx +102 -0
  82. package/src/gui/atoms/ListItemIcon/ListItemIcon.stories.tsx +135 -0
  83. package/src/gui/atoms/ListItemIcon/ListItemIcon.tsx +11 -0
  84. package/src/gui/atoms/ListItemText/ListItemText.resolver.tsx +112 -0
  85. package/src/gui/atoms/ListItemText/ListItemText.stories.tsx +162 -0
  86. package/src/gui/atoms/ListItemText/ListItemText.tsx +15 -0
  87. package/src/gui/atoms/Menu/Menu.resolver.tsx +112 -0
  88. package/src/gui/atoms/Menu/Menu.stories.tsx +168 -0
  89. package/src/gui/atoms/Menu/Menu.tsx +17 -0
  90. package/src/gui/atoms/MenuItem/MenuItem.resolver.tsx +183 -0
  91. package/src/gui/atoms/MenuItem/MenuItem.stories.tsx +138 -0
  92. package/src/gui/atoms/MenuItem/MenuItem.tsx +14 -0
  93. package/src/gui/atoms/Paper/Paper.resolver.tsx +98 -0
  94. package/src/gui/atoms/Paper/Paper.stories.tsx +191 -0
  95. package/src/gui/atoms/Paper/Paper.tsx +17 -0
  96. package/src/gui/atoms/Stack/Stack.resolver.tsx +94 -0
  97. package/src/gui/atoms/Stack/Stack.stories.tsx +166 -0
  98. package/src/gui/atoms/Stack/Stack.tsx +15 -0
  99. package/src/gui/atoms/Switch/Switch.resolver.tsx +53 -0
  100. package/src/gui/atoms/Switch/Switch.stories.tsx +242 -0
  101. package/src/gui/atoms/Switch/Switch.tsx +22 -0
  102. package/src/gui/atoms/Toolbar/Toolbar.resolver.tsx +60 -0
  103. package/src/gui/atoms/Toolbar/Toolbar.stories.tsx +163 -0
  104. package/src/gui/atoms/Toolbar/Toolbar.tsx +16 -0
  105. package/src/gui/atoms/Tooltip/Tooltip.resolver.tsx +142 -0
  106. package/src/gui/atoms/Tooltip/Tooltip.stories.tsx +118 -0
  107. package/src/gui/atoms/Tooltip/Tooltip.tsx +78 -0
  108. package/src/gui/atoms/Typography/Typography.resolver.tsx +158 -0
  109. package/src/gui/atoms/Typography/Typography.stories.tsx +228 -0
  110. package/src/gui/atoms/Typography/Typography.tsx +27 -0
  111. package/src/gui/atoms.tsx +129 -0
  112. package/src/gui/index.ts +69 -0
  113. package/src/gui/molecules/AppBars/Footer/Footer.resolver.tsx +104 -0
  114. package/src/gui/molecules/AppBars/Footer/Footer.stories.tsx +499 -0
  115. package/src/gui/molecules/AppBars/Footer/Footer.tsx +307 -0
  116. package/src/gui/molecules/AppBars/LeftSidebar/LeftSidebar.resolver.tsx +75 -0
  117. package/src/gui/molecules/AppBars/LeftSidebar/LeftSidebar.stories.tsx +61 -0
  118. package/src/gui/molecules/AppBars/LeftSidebar/LeftSidebar.tsx +511 -0
  119. package/src/gui/molecules/AppBars/LeftSidebar/SidebarToggleButton.tsx +51 -0
  120. package/src/gui/molecules/AppBars/RightSidebar/RightSidebar.resolver.tsx +97 -0
  121. package/src/gui/molecules/AppBars/RightSidebar/RightSidebar.stories.tsx +294 -0
  122. package/src/gui/molecules/AppBars/RightSidebar/RightSidebar.tsx +295 -0
  123. package/src/gui/molecules/AppBars/StickyOptions/StickyOptionsTop.stories.tsx +480 -0
  124. package/src/gui/molecules/AppBars/StickyOptions/StickyOptionsTop.tsx +484 -0
  125. package/src/gui/molecules/AppBars/TopBar/TopBar.resolver.tsx +84 -0
  126. package/src/gui/molecules/AppBars/TopBar/TopBar.stories.tsx +297 -0
  127. package/src/gui/molecules/AppBars/TopBar/TopBar.tsx +299 -0
  128. package/src/gui/molecules/Utilities/ThemeModeToggle/ThemeModeToggle.resolver.tsx +72 -0
  129. package/src/gui/molecules/Utilities/ThemeModeToggle/ThemeModeToggle.stories.tsx +154 -0
  130. package/src/gui/molecules/Utilities/ThemeModeToggle/ThemeModeToggle.tsx +100 -0
  131. package/src/gui/molecules/Utilities/ThemeSelector.jsx +281 -0
  132. package/src/gui/utils/nodeID.ts +8 -0
  133. package/src/index.js +111 -0
  134. package/src/registry/GuiRegistry.ts +19 -0
  135. package/src/registry/factory.ts +12 -0
  136. package/src/registry/index.ts +3 -0
  137. package/src/registry/types.ts +6 -0
  138. package/src/stories/01.Home.mdx +22 -0
  139. package/src/stories/02.Understanding.This.GUI.md +149 -0
  140. package/src/stories/03.Themes.mdx +235 -0
  141. package/src/stories/04.GuiProvider.md +126 -0
  142. package/src/stories/04.GuiProvider.mdx +129 -0
  143. package/src/stories/Theme/BreakPointsAndGrids.stories.jsx +185 -0
  144. package/src/stories/Theme/Colors.stories.jsx +245 -0
  145. package/src/stories/Theme/Icons.stories.jsx +313 -0
  146. package/src/stories/Theme/Motion.stories.jsx +206 -0
  147. package/src/stories/Theme/ShadowAndElevation.stories.jsx +95 -0
  148. package/src/stories/Theme/SpacingAndRadius.stories.jsx +129 -0
  149. package/src/stories/Theme/Typography.stories.jsx +211 -0
  150. package/src/stories/assets/this.GUI.png +0 -0
  151. package/src/templates/BrowserExtension.jsx +56 -0
  152. package/src/templates/Layout.tsx +36 -0
  153. package/src/templates/Minimal.jsx +123 -0
  154. package/src/templates/Shell/Shell.jsx +107 -0
  155. package/src/themes/fromTokens.ts +352 -0
  156. package/src/themes/icons/Icon.tsx +137 -0
  157. package/src/themes/icons/packs/Lucide.ts +72 -0
  158. package/src/themes/icons/packs/Material.ts +87 -0
  159. package/src/themes/icons/registry.tsx +178 -0
  160. package/src/themes/index.js +116 -0
  161. package/src/themes/theme.d.ts +116 -0
  162. package/src/themes/tokens/global.tokens.json +107 -0
  163. package/src/themes/tokens/neurons/dark.tokens.json +45 -0
  164. package/src/themes/tokens/neurons/light.tokens.json +51 -0
  165. package/src/themes/tokens/neurons/manifest.json +23 -0
  166. package/src/types/theme.d.ts +32 -0
  167. package/src/types/viewport.ts +132 -0
  168. package/tsconfig.json +24 -0
  169. package/vite.config.js +74 -0
  170. package/dist/style.css +0 -1
  171. package/src/App.jsx +0 -39
  172. package/src/CreatePage.jsx +0 -61
  173. package/src/MDXEditor.jsx +0 -51
  174. package/src/MdxProvider.jsx +0 -20
  175. package/src/Page.jsx +0 -28
  176. package/src/PageDashboard.jsx +0 -56
  177. package/src/SiteBuilder.jsx +0 -108
  178. package/src/example.json +0 -43
  179. package/src/index.mdx +0 -164
  180. package/src/main.jsx +0 -15
  181. package/src/scripts/ComponentRegistry.js +0 -70
  182. package/src/scripts/logASCIIArt.js +0 -12
  183. package/src/scripts/postinstall.js +0 -111
  184. package/src/scripts/renderComponents.js +0 -11
  185. package/src/stories/Atoms/Alert/Alert.css +0 -211
  186. package/src/stories/Atoms/Alert/Alert.jsx +0 -56
  187. package/src/stories/Atoms/Alert/Alert.stories.jsx +0 -167
  188. package/src/stories/Atoms/Audio/Audio.css +0 -259
  189. package/src/stories/Atoms/Audio/Audio.jsx +0 -216
  190. package/src/stories/Atoms/Audio/Audio.stories.jsx +0 -191
  191. package/src/stories/Atoms/Badge/Badge.css +0 -249
  192. package/src/stories/Atoms/Badge/Badge.jsx +0 -54
  193. package/src/stories/Atoms/Badge/Badge.stories.jsx +0 -121
  194. package/src/stories/Atoms/Button/Button.css +0 -332
  195. package/src/stories/Atoms/Button/Button.jsx +0 -44
  196. package/src/stories/Atoms/Button/Button.stories.jsx +0 -209
  197. package/src/stories/Atoms/Caption/Caption.css +0 -169
  198. package/src/stories/Atoms/Caption/Caption.jsx +0 -72
  199. package/src/stories/Atoms/Caption/Caption.stories.jsx +0 -207
  200. package/src/stories/Atoms/Checkbox/Checkbox.css +0 -182
  201. package/src/stories/Atoms/Checkbox/Checkbox.jsx +0 -83
  202. package/src/stories/Atoms/Checkbox/Checkbox.stories.jsx +0 -112
  203. package/src/stories/Atoms/Container/Container.css +0 -470
  204. package/src/stories/Atoms/Container/Container.jsx +0 -116
  205. package/src/stories/Atoms/Container/Container.stories.jsx +0 -145
  206. package/src/stories/Atoms/Divider/Divider.css +0 -147
  207. package/src/stories/Atoms/Divider/Divider.jsx +0 -62
  208. package/src/stories/Atoms/Divider/Divider.stories.jsx +0 -105
  209. package/src/stories/Atoms/Grid/Grid.css +0 -160
  210. package/src/stories/Atoms/Grid/Grid.jsx +0 -43
  211. package/src/stories/Atoms/Grid/Grid.stories.jsx +0 -84
  212. package/src/stories/Atoms/Heading/Heading.css +0 -112
  213. package/src/stories/Atoms/Heading/Heading.jsx +0 -69
  214. package/src/stories/Atoms/Heading/Heading.stories.jsx +0 -130
  215. package/src/stories/Atoms/Icon/Icon.css +0 -240
  216. package/src/stories/Atoms/Icon/Icon.jsx +0 -80
  217. package/src/stories/Atoms/Icon/Icon.stories.jsx +0 -177
  218. package/src/stories/Atoms/Image/Image.css +0 -245
  219. package/src/stories/Atoms/Image/Image.jsx +0 -175
  220. package/src/stories/Atoms/Image/Image.stories.jsx +0 -332
  221. package/src/stories/Atoms/Label/Label.css +0 -171
  222. package/src/stories/Atoms/Label/Label.jsx +0 -71
  223. package/src/stories/Atoms/Label/Label.stories.jsx +0 -180
  224. package/src/stories/Atoms/Link/Link.css +0 -51
  225. package/src/stories/Atoms/Link/Link.jsx +0 -72
  226. package/src/stories/Atoms/Link/Link.stories.jsx +0 -153
  227. package/src/stories/Atoms/Loader/Loader.css +0 -106
  228. package/src/stories/Atoms/Loader/Loader.jsx +0 -58
  229. package/src/stories/Atoms/Loader/Loader.stories.jsx +0 -99
  230. package/src/stories/Atoms/Logo/Logo.css +0 -94
  231. package/src/stories/Atoms/Logo/Logo.jsx +0 -53
  232. package/src/stories/Atoms/Logo/Logo.stories.jsx +0 -120
  233. package/src/stories/Atoms/Paragraph/Paragraph.css +0 -180
  234. package/src/stories/Atoms/Paragraph/Paragraph.jsx +0 -77
  235. package/src/stories/Atoms/Paragraph/Paragraph.stories.jsx +0 -143
  236. package/src/stories/Atoms/ProgressBar/ProgressBar.css +0 -127
  237. package/src/stories/Atoms/ProgressBar/ProgressBar.jsx +0 -40
  238. package/src/stories/Atoms/ProgressBar/ProgressBar.stories.jsx +0 -86
  239. package/src/stories/Atoms/RadioButton/RadioButton.css +0 -130
  240. package/src/stories/Atoms/RadioButton/RadioButton.jsx +0 -87
  241. package/src/stories/Atoms/RadioButton/RadioButton.stories.jsx +0 -113
  242. package/src/stories/Atoms/Range/Range.css +0 -169
  243. package/src/stories/Atoms/Range/Range.jsx +0 -87
  244. package/src/stories/Atoms/Range/Range.stories.jsx +0 -110
  245. package/src/stories/Atoms/Section/Section.css +0 -268
  246. package/src/stories/Atoms/Section/Section.jsx +0 -63
  247. package/src/stories/Atoms/Section/Section.stories.jsx +0 -46
  248. package/src/stories/Atoms/Select/Select.css +0 -87
  249. package/src/stories/Atoms/Select/Select.jsx +0 -73
  250. package/src/stories/Atoms/Select/Select.stories.jsx +0 -109
  251. package/src/stories/Atoms/Slider/Slider.css +0 -90
  252. package/src/stories/Atoms/Slider/Slider.jsx +0 -129
  253. package/src/stories/Atoms/Slider/Slider.stories.jsx +0 -90
  254. package/src/stories/Atoms/Snackbar/Snackbar.css +0 -313
  255. package/src/stories/Atoms/Snackbar/Snackbar.jsx +0 -72
  256. package/src/stories/Atoms/Snackbar/Snackbar.stories.jsx +0 -78
  257. package/src/stories/Atoms/Spacer/Spacer.css +0 -114
  258. package/src/stories/Atoms/Spacer/Spacer.jsx +0 -35
  259. package/src/stories/Atoms/Spacer/Spacer.stories.jsx +0 -61
  260. package/src/stories/Atoms/Spinner/Spinner.css +0 -110
  261. package/src/stories/Atoms/Spinner/Spinner.jsx +0 -65
  262. package/src/stories/Atoms/Spinner/Spinner.stories.jsx +0 -58
  263. package/src/stories/Atoms/Tag/Tag.css +0 -112
  264. package/src/stories/Atoms/Tag/Tag.jsx +0 -75
  265. package/src/stories/Atoms/Tag/Tag.stories.jsx +0 -67
  266. package/src/stories/Atoms/TextArea/TextArea.css +0 -99
  267. package/src/stories/Atoms/TextArea/TextArea.jsx +0 -118
  268. package/src/stories/Atoms/TextArea/TextArea.stories.jsx +0 -36
  269. package/src/stories/Atoms/TextInput/TextInput.css +0 -102
  270. package/src/stories/Atoms/TextInput/TextInput.jsx +0 -133
  271. package/src/stories/Atoms/TextInput/TextInput.stories.jsx +0 -69
  272. package/src/stories/Atoms/Toggle/Toggle.css +0 -118
  273. package/src/stories/Atoms/Toggle/Toggle.jsx +0 -69
  274. package/src/stories/Atoms/Toggle/Toggle.stories.jsx +0 -35
  275. package/src/stories/Atoms/Tooltip/Tooltip.css +0 -383
  276. package/src/stories/Atoms/Tooltip/Tooltip.jsx +0 -46
  277. package/src/stories/Atoms/Tooltip/Tooltip.stories.jsx +0 -52
  278. package/src/stories/Atoms/Video/Video.css +0 -39
  279. package/src/stories/Atoms/Video/Video.jsx +0 -78
  280. package/src/stories/Atoms/Video/Video.stories.jsx +0 -41
  281. package/src/stories/Atoms/index.js +0 -72
  282. package/src/stories/Atoms/meta_Atoms.js +0 -51
  283. package/src/stories/Components.js +0 -198
  284. package/src/stories/Getting Started.mdx +0 -239
  285. package/src/stories/Layouts/Accordion/Accordion.css +0 -293
  286. package/src/stories/Layouts/Accordion/Accordion.jsx +0 -74
  287. package/src/stories/Layouts/Accordion/Accordion.stories.jsx +0 -39
  288. package/src/stories/Layouts/Flexbox/Flexbox.css +0 -16
  289. package/src/stories/Layouts/Flexbox/Flexbox.jsx +0 -11
  290. package/src/stories/Layouts/Flexbox/Flexbox.stories.jsx +0 -28
  291. package/src/stories/Layouts/Footer/Footer.css +0 -16
  292. package/src/stories/Layouts/Footer/Footer.jsx +0 -31
  293. package/src/stories/Layouts/Footer/Footer.stories.jsx +0 -28
  294. package/src/stories/Layouts/Header/Header.css +0 -16
  295. package/src/stories/Layouts/Header/Header.jsx +0 -31
  296. package/src/stories/Layouts/Header/Header.stories.jsx +0 -28
  297. package/src/stories/Layouts/HeroBanner/HeroBanner.css +0 -16
  298. package/src/stories/Layouts/HeroBanner/HeroBanner.jsx +0 -31
  299. package/src/stories/Layouts/HeroBanner/HeroBanner.stories.jsx +0 -28
  300. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.css +0 -16
  301. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.jsx +0 -31
  302. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.stories.jsx +0 -28
  303. package/src/stories/Layouts/Pagination/Pagination.css +0 -16
  304. package/src/stories/Layouts/Pagination/Pagination.jsx +0 -31
  305. package/src/stories/Layouts/Pagination/Pagination.stories.jsx +0 -28
  306. package/src/stories/Layouts/Sidebar/Sidebar.css +0 -16
  307. package/src/stories/Layouts/Sidebar/Sidebar.jsx +0 -71
  308. package/src/stories/Layouts/Sidebar/Sidebar.stories.jsx +0 -28
  309. package/src/stories/Layouts/Tabs/Tabs.css +0 -16
  310. package/src/stories/Layouts/Tabs/Tabs.jsx +0 -31
  311. package/src/stories/Layouts/Tabs/Tabs.stories.jsx +0 -28
  312. package/src/stories/Layouts/index.js +0 -25
  313. package/src/stories/Layouts/meta_Layouts.js +0 -28
  314. package/src/stories/MDX.mdx +0 -118
  315. package/src/stories/Miscellaneous/Miscellaneous.js +0 -24
  316. package/src/stories/Molecules/Accordion/Accordion.css +0 -4
  317. package/src/stories/Molecules/Accordion/Accordion.jsx +0 -25
  318. package/src/stories/Molecules/Accordion/Accordion.stories.jsx +0 -20
  319. package/src/stories/Molecules/AudioPlayer/AudioPlayer.css +0 -97
  320. package/src/stories/Molecules/AudioPlayer/AudioPlayer.jsx +0 -244
  321. package/src/stories/Molecules/AudioPlayer/AudioPlayer.stories.jsx +0 -55
  322. package/src/stories/Molecules/AvatarWithName/AvatarWithName.css +0 -130
  323. package/src/stories/Molecules/AvatarWithName/AvatarWithName.jsx +0 -80
  324. package/src/stories/Molecules/AvatarWithName/AvatarWithName.stories.jsx +0 -20
  325. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.css +0 -147
  326. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.jsx +0 -51
  327. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.stories.jsx +0 -36
  328. package/src/stories/Molecules/ButtonGroup/ButtonGroup.css +0 -465
  329. package/src/stories/Molecules/ButtonGroup/ButtonGroup.jsx +0 -47
  330. package/src/stories/Molecules/ButtonGroup/ButtonGroup.stories.jsx +0 -44
  331. package/src/stories/Molecules/Card/Card.css +0 -41
  332. package/src/stories/Molecules/Card/Card.jsx +0 -92
  333. package/src/stories/Molecules/Card/Card.stories.jsx +0 -34
  334. package/src/stories/Molecules/ComparisonTable/ComparisonTable.css +0 -35
  335. package/src/stories/Molecules/ComparisonTable/ComparisonTable.jsx +0 -104
  336. package/src/stories/Molecules/ComparisonTable/ComparisonTable.stories.jsx +0 -81
  337. package/src/stories/Molecules/DataTable/DataTable.css +0 -4
  338. package/src/stories/Molecules/DataTable/DataTable.jsx +0 -25
  339. package/src/stories/Molecules/DataTable/DataTable.stories.jsx +0 -20
  340. package/src/stories/Molecules/Dropdown/Dropdown.css +0 -192
  341. package/src/stories/Molecules/Dropdown/Dropdown.jsx +0 -96
  342. package/src/stories/Molecules/Dropdown/Dropdown.stories.jsx +0 -45
  343. package/src/stories/Molecules/FileUpload/FileUpload.css +0 -4
  344. package/src/stories/Molecules/FileUpload/FileUpload.jsx +0 -25
  345. package/src/stories/Molecules/FileUpload/FileUpload.stories.jsx +0 -20
  346. package/src/stories/Molecules/FormField/FormField.css +0 -4
  347. package/src/stories/Molecules/FormField/FormField.jsx +0 -25
  348. package/src/stories/Molecules/FormField/FormField.stories.jsx +0 -20
  349. package/src/stories/Molecules/Header/Header.css +0 -35
  350. package/src/stories/Molecules/Header/Header.jsx +0 -76
  351. package/src/stories/Molecules/Header/Header.stories.jsx +0 -28
  352. package/src/stories/Molecules/IconButton/IconButton.css +0 -4
  353. package/src/stories/Molecules/IconButton/IconButton.jsx +0 -25
  354. package/src/stories/Molecules/IconButton/IconButton.stories.jsx +0 -20
  355. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.css +0 -4
  356. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.jsx +0 -25
  357. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.stories.jsx +0 -20
  358. package/src/stories/Molecules/InputGroup/InputGroup.css +0 -4
  359. package/src/stories/Molecules/InputGroup/InputGroup.jsx +0 -25
  360. package/src/stories/Molecules/InputGroup/InputGroup.stories.jsx +0 -20
  361. package/src/stories/Molecules/InputWithLabel/InputWithLabel.css +0 -4
  362. package/src/stories/Molecules/InputWithLabel/InputWithLabel.jsx +0 -25
  363. package/src/stories/Molecules/InputWithLabel/InputWithLabel.stories.jsx +0 -20
  364. package/src/stories/Molecules/List/List.css +0 -4
  365. package/src/stories/Molecules/List/List.jsx +0 -25
  366. package/src/stories/Molecules/List/List.stories.jsx +0 -20
  367. package/src/stories/Molecules/MediaCard/MediaCard.css +0 -4
  368. package/src/stories/Molecules/MediaCard/MediaCard.jsx +0 -25
  369. package/src/stories/Molecules/MediaCard/MediaCard.stories.jsx +0 -20
  370. package/src/stories/Molecules/Modal/Modal.css +0 -4
  371. package/src/stories/Molecules/Modal/Modal.jsx +0 -25
  372. package/src/stories/Molecules/Modal/Modal.stories.jsx +0 -20
  373. package/src/stories/Molecules/Navbar/Navbar.css +0 -91
  374. package/src/stories/Molecules/Navbar/Navbar.jsx +0 -82
  375. package/src/stories/Molecules/Navbar/Navbar.stories.jsx +0 -70
  376. package/src/stories/Molecules/Notification/Notification.css +0 -4
  377. package/src/stories/Molecules/Notification/Notification.jsx +0 -25
  378. package/src/stories/Molecules/Notification/Notification.stories.jsx +0 -20
  379. package/src/stories/Molecules/PricingTable/PricingTable.css +0 -4
  380. package/src/stories/Molecules/PricingTable/PricingTable.jsx +0 -25
  381. package/src/stories/Molecules/PricingTable/PricingTable.stories.jsx +0 -20
  382. package/src/stories/Molecules/SearchBar/SearchBar.css +0 -69
  383. package/src/stories/Molecules/SearchBar/SearchBar.jsx +0 -73
  384. package/src/stories/Molecules/SearchBar/SearchBar.stories.jsx +0 -29
  385. package/src/stories/Molecules/SelectTheme/SelectTheme.css +0 -25
  386. package/src/stories/Molecules/SelectTheme/SelectTheme.jsx +0 -22
  387. package/src/stories/Molecules/SelectTheme/SelectTheme.stories.jsx +0 -24
  388. package/src/stories/Molecules/Sidebar/Sidebar.css +0 -67
  389. package/src/stories/Molecules/Sidebar/Sidebar.jsx +0 -80
  390. package/src/stories/Molecules/Sidebar/Sidebar.stories.jsx +0 -35
  391. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.css +0 -4
  392. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.jsx +0 -25
  393. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.stories.jsx +0 -20
  394. package/src/stories/Molecules/index.js +0 -58
  395. package/src/stories/Molecules/meta_Molecules.js +0 -47
  396. package/src/stories/Organisms/Profile/UserFriends/UserFriends.context.jsx +0 -15
  397. package/src/stories/Organisms/Profile/UserFriends/UserFriends.css +0 -4
  398. package/src/stories/Organisms/Profile/UserFriends/UserFriends.jsx +0 -13
  399. package/src/stories/Organisms/Profile/UserFriends/UserFriends.stories.jsx +0 -26
  400. package/src/stories/Organisms/Profile/UserPosts/UserPosts.context.jsx +0 -15
  401. package/src/stories/Organisms/Profile/UserPosts/UserPosts.css +0 -4
  402. package/src/stories/Organisms/Profile/UserPosts/UserPosts.jsx +0 -13
  403. package/src/stories/Organisms/Profile/UserPosts/UserPosts.stories.jsx +0 -26
  404. package/src/stories/Organisms/Profile/UserProfile/UserProfile.context.jsx +0 -15
  405. package/src/stories/Organisms/Profile/UserProfile/UserProfile.css +0 -4
  406. package/src/stories/Organisms/Profile/UserProfile/UserProfile.jsx +0 -13
  407. package/src/stories/Organisms/Profile/UserProfile/UserProfile.stories.jsx +0 -26
  408. package/src/stories/Organisms/meta_Organisms.js +0 -39
  409. package/src/stories/Pages/Page/Page.css +0 -69
  410. package/src/stories/Pages/Page/Page.jsx +0 -69
  411. package/src/stories/Pages/Page/Page.stories.js +0 -26
  412. package/src/stories/Pages/Page/Pages.js +0 -31
  413. package/src/stories/Templates/AdminDashboard/AdminDashboard.css +0 -7
  414. package/src/stories/Templates/AdminDashboard/AdminDashboard.jsx +0 -24
  415. package/src/stories/Templates/AdminDashboard/AdminDashboard.stories.jsx +0 -20
  416. package/src/stories/Templates/CallToAction/CallToAction.css +0 -7
  417. package/src/stories/Templates/CallToAction/CallToAction.jsx +0 -24
  418. package/src/stories/Templates/CallToAction/CallToAction.stories.jsx +0 -20
  419. package/src/stories/Templates/FeaturesList/FeaturesList.css +0 -7
  420. package/src/stories/Templates/FeaturesList/FeaturesList.jsx +0 -24
  421. package/src/stories/Templates/FeaturesList/FeaturesList.stories.jsx +0 -20
  422. package/src/stories/Templates/FormSection/FormSection.css +0 -7
  423. package/src/stories/Templates/FormSection/FormSection.jsx +0 -24
  424. package/src/stories/Templates/FormSection/FormSection.stories.jsx +0 -20
  425. package/src/stories/Templates/HeroSection/HeroSection.css +0 -7
  426. package/src/stories/Templates/HeroSection/HeroSection.jsx +0 -24
  427. package/src/stories/Templates/HeroSection/HeroSection.stories.jsx +0 -20
  428. package/src/stories/Templates/LocationInfo/LocationInfo.css +0 -7
  429. package/src/stories/Templates/LocationInfo/LocationInfo.jsx +0 -24
  430. package/src/stories/Templates/LocationInfo/LocationInfo.stories.jsx +0 -20
  431. package/src/stories/Templates/ProductPage/ProductPage.css +0 -7
  432. package/src/stories/Templates/ProductPage/ProductPage.jsx +0 -24
  433. package/src/stories/Templates/ProductPage/ProductPage.stories.jsx +0 -20
  434. package/src/stories/Templates/RegistrationPage/RegistrationPage.css +0 -7
  435. package/src/stories/Templates/RegistrationPage/RegistrationPage.jsx +0 -24
  436. package/src/stories/Templates/RegistrationPage/RegistrationPage.stories.jsx +0 -20
  437. package/src/stories/Templates/ShoppingCart/ShoppingCart.css +0 -7
  438. package/src/stories/Templates/ShoppingCart/ShoppingCart.jsx +0 -24
  439. package/src/stories/Templates/ShoppingCart/ShoppingCart.stories.jsx +0 -20
  440. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.css +0 -7
  441. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.jsx +0 -24
  442. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.stories.jsx +0 -20
  443. package/src/stories/Templates/SignInPage/SignInPage.css +0 -7
  444. package/src/stories/Templates/SignInPage/SignInPage.jsx +0 -24
  445. package/src/stories/Templates/SignInPage/SignInPage.stories.jsx +0 -20
  446. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.css +0 -7
  447. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.jsx +0 -24
  448. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.stories.jsx +0 -20
  449. package/src/stories/Templates/Testimonials/Testimonials.css +0 -7
  450. package/src/stories/Templates/Testimonials/Testimonials.jsx +0 -24
  451. package/src/stories/Templates/Testimonials/Testimonials.stories.jsx +0 -20
  452. package/src/stories/Templates/index.js +0 -33
  453. package/src/stories/Templates/meta_Templates.js +0 -29
  454. package/src/stories/assets/accessibility.png +0 -0
  455. package/src/stories/assets/accessibility.svg +0 -1
  456. package/src/stories/assets/addon-library.png +0 -0
  457. package/src/stories/assets/assets.png +0 -0
  458. package/src/stories/assets/avif-test-image.avif +0 -0
  459. package/src/stories/assets/context.png +0 -0
  460. package/src/stories/assets/discord.svg +0 -1
  461. package/src/stories/assets/docs.png +0 -0
  462. package/src/stories/assets/figma-plugin.png +0 -0
  463. package/src/stories/assets/github.svg +0 -1
  464. package/src/stories/assets/logo.png +0 -0
  465. package/src/stories/assets/logo.svg +0 -106
  466. package/src/stories/assets/share.png +0 -0
  467. package/src/stories/assets/styling.png +0 -0
  468. package/src/stories/assets/test.svg +0 -3
  469. package/src/stories/assets/testing.png +0 -0
  470. package/src/stories/assets/theming.png +0 -0
  471. package/src/stories/assets/tutorials.svg +0 -1
  472. package/src/stories/assets/youtube.svg +0 -1
  473. package/src/themes/README_Styles.md +0 -301
  474. package/src/themes/ThemeProvider.jsx +0 -61
  475. package/src/themes/styles/github/dark.css +0 -0
  476. package/src/themes/styles/github/light.css +0 -0
  477. package/src/themes/styles/neurons/dark.css +0 -247
  478. package/src/themes/styles/neurons/light.css +0 -170
  479. /package/{src/themes/styles/dracula/dark.css → .storybook/preview-head.html} +0 -0
  480. /package/src/{themes/styles/dracula/light.css → components/this.me/MeCard.jsx} +0 -0
@@ -0,0 +1,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
+ }