this.gui 1.3.24 → 1.3.26

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 (284) hide show
  1. package/dist/this-gui.es.js +0 -1
  2. package/dist/this-gui.umd.js +65 -65
  3. package/index.ts +3 -2
  4. package/init/index.html +1 -2
  5. package/init/package-lock.json +2 -2
  6. package/init/package.json +1 -1
  7. package/init/src/App.tsx +24 -0
  8. package/init/src/index.css +16 -0
  9. package/init/src/main.tsx +14 -0
  10. package/init/src/router/DerivableRouter.tsx +36 -0
  11. package/package.json +1 -1
  12. package/src/GUI.tsx +15 -0
  13. package/src/components/generics/Cards/Gridme.jsx +52 -0
  14. package/src/components/generics/Cards/LilBox.jsx +65 -0
  15. package/src/components/generics/Cards/ModuleCard.jsx +106 -0
  16. package/src/components/generics/Chats/FullChatBot.jsx +223 -0
  17. package/src/components/generics/Code/CodeBlock.jsx +33 -0
  18. package/src/components/generics/Feedback/Callout.jsx +92 -0
  19. package/src/components/generics/Layout/GridX.jsx +29 -0
  20. package/src/components/generics/Layout/Hero2.jsx +132 -0
  21. package/src/components/generics/Layout/PageContainer.jsx +29 -0
  22. package/src/components/generics/Layout/PageDivider.jsx +20 -0
  23. package/src/components/generics/Layout/Section.jsx +43 -0
  24. package/src/components/generics/Layout/SectionHeader.jsx +21 -0
  25. package/src/components/generics/Media/Img.jsx +58 -0
  26. package/src/components/generics/Media/VideoEmbed.jsx +51 -0
  27. package/src/components/generics/Organization/TableOfContents.jsx +51 -0
  28. package/src/components/generics/Organization/Tabs.jsx +45 -0
  29. package/src/components/generics/Text/TextList.jsx +41 -0
  30. package/src/components/generics/Text/TextParagraph.jsx +28 -0
  31. package/src/components/generics/Text/TextQuote.jsx +23 -0
  32. package/src/components/generics/Text/TextTitle.jsx +44 -0
  33. package/src/gui/Layouts/ResponsiveUI/Content/Content.resolver.tsx +0 -0
  34. package/src/gui/Layouts/ResponsiveUI/Content/Content.stories.tsx +88 -0
  35. package/src/gui/Layouts/ResponsiveUI/Content/Content.tsx +53 -0
  36. package/src/gui/Layouts/ResponsiveUI/Content/Content.types.tsx +40 -0
  37. package/src/gui/Layouts/ResponsiveUI/Footer/Footer.resolver.tsx +45 -0
  38. package/src/gui/Layouts/ResponsiveUI/Footer/Footer.stories.tsx +209 -0
  39. package/src/gui/Layouts/ResponsiveUI/Footer/Footer.tsx +337 -0
  40. package/src/gui/Layouts/ResponsiveUI/Footer/Footer.types.ts +40 -0
  41. package/src/gui/Layouts/ResponsiveUI/Layout/Layout.resolver.tsx +37 -0
  42. package/src/gui/Layouts/ResponsiveUI/Layout/Layout.stories.tsx +290 -0
  43. package/src/gui/Layouts/ResponsiveUI/Layout/Layout.tsx +112 -0
  44. package/src/gui/Layouts/ResponsiveUI/Layout/Layout.types.ts +56 -0
  45. package/src/gui/Layouts/ResponsiveUI/Layout/useLayoutBreakpoints.ts +9 -0
  46. package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/LeftSidebar.resolver.tsx +87 -0
  47. package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/LeftSidebar.stories.tsx +199 -0
  48. package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/LeftSidebar.tsx +311 -0
  49. package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/LeftSidebar.types.ts +41 -0
  50. package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/SidebarToggleButton.tsx +53 -0
  51. package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/components/LeftSidebarAction/LeftSidebarAction.resolver.tsx +19 -0
  52. package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/components/LeftSidebarAction/LeftSidebarAction.tsx +107 -0
  53. package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/components/LeftSidebarLink/LeftSidebarLink.resolver.tsx +0 -0
  54. package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/components/LeftSidebarLink/LeftSidebarLink.tsx +122 -0
  55. package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/components/LeftSidebarLink/LeftSidebarLink.types.ts +13 -0
  56. package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/components/LeftSidebarMenu/LeftSidebarMenu.tsx +142 -0
  57. package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/components/LeftSidebarToggleButton/LeftSidebarToggleButton.tsx +23 -0
  58. package/src/gui/Layouts/ResponsiveUI/Sidebars/RightSidebar/RightSidebar.resolver.tsx +35 -0
  59. package/src/gui/Layouts/ResponsiveUI/Sidebars/RightSidebar/RightSidebar.stories.tsx +240 -0
  60. package/src/gui/Layouts/ResponsiveUI/Sidebars/RightSidebar/RightSidebar.tsx +319 -0
  61. package/src/gui/Layouts/ResponsiveUI/Sidebars/RightSidebar/RightSidebar.types.ts +17 -0
  62. package/src/gui/Layouts/ResponsiveUI/Sidebars/RightSidebar/components/RightSidebarAction/RightSidebarAction.tsx +102 -0
  63. package/src/gui/Layouts/ResponsiveUI/Sidebars/RightSidebar/components/RightSidebarLink/RightSidebarLink.tsx +132 -0
  64. package/src/gui/Layouts/ResponsiveUI/Sidebars/RightSidebar/components/RightSidebarMenu/RightSidebarMenu.tsx +140 -0
  65. package/src/gui/Layouts/ResponsiveUI/Sidebars/RightSidebar/components/RightSidebarToggleButton/RightSidebarToggleButton.tsx +22 -0
  66. package/src/gui/Layouts/ResponsiveUI/StickyOptions/StickyOptionsTop.stories.tsx +469 -0
  67. package/src/gui/Layouts/ResponsiveUI/StickyOptions/StickyOptionsTop.tsx +489 -0
  68. package/src/gui/Layouts/ResponsiveUI/TopBar/TopBar.resolver.tsx +86 -0
  69. package/src/gui/Layouts/ResponsiveUI/TopBar/TopBar.stories.tsx +350 -0
  70. package/src/gui/Layouts/ResponsiveUI/TopBar/TopBar.tsx +281 -0
  71. package/src/gui/Layouts/ResponsiveUI/TopBar/TopBar.types.ts +39 -0
  72. package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarAction/TopBarAction.stories.tsx +83 -0
  73. package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarAction/TopBarAction.tsx +18 -0
  74. package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarAction/TopBarAction.types.ts +4 -0
  75. package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarLink/TopBarLink.stories.tsx +189 -0
  76. package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarLink/TopBarLink.tsx +30 -0
  77. package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarLink/TopBarLink.types.ts +9 -0
  78. package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarMenu/TopBarMenu.resolver.tsx +14 -0
  79. package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarMenu/TopBarMenu.stories.tsx +56 -0
  80. package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarMenu/TopBarMenu.tsx +123 -0
  81. package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarMenu/TopBarMenu.types.ts +44 -0
  82. package/src/gui/Theme/GuiProvider.tsx +125 -0
  83. package/src/gui/Theme/Icon/Icon.resolver.tsx +29 -0
  84. package/src/gui/Theme/Icon/Icon.tsx +43 -0
  85. package/src/gui/Theme/catalog/CherryByte/CherryByte.png +0 -0
  86. package/src/gui/Theme/catalog/CherryByte/dark.tokens.ts +47 -0
  87. package/src/gui/Theme/catalog/CherryByte/light.tokens.ts +47 -0
  88. package/src/gui/Theme/catalog/CherryByte/manifest.ts +24 -0
  89. package/src/gui/Theme/catalog/GhostShell/dark.tokens.ts +43 -0
  90. package/src/gui/Theme/catalog/GhostShell/ghost.png +0 -0
  91. package/src/gui/Theme/catalog/GhostShell/light.tokens.ts +39 -0
  92. package/src/gui/Theme/catalog/GhostShell/manifest.ts +24 -0
  93. package/src/gui/Theme/catalog/LunaHex/LunaHex.png +0 -0
  94. package/src/gui/Theme/catalog/LunaHex/dark.tokens.ts +34 -0
  95. package/src/gui/Theme/catalog/LunaHex/light.tokens.ts +74 -0
  96. package/src/gui/Theme/catalog/LunaHex/manifest.ts +24 -0
  97. package/src/gui/Theme/catalog/MUI/MUI.png +0 -0
  98. package/src/gui/Theme/catalog/MUI/dark.tokens.ts +58 -0
  99. package/src/gui/Theme/catalog/MUI/light.tokens.ts +74 -0
  100. package/src/gui/Theme/catalog/MUI/manifest.ts +24 -0
  101. package/src/gui/Theme/catalog/PrinceOfDarkness/dark.tokens.ts +48 -0
  102. package/src/gui/Theme/catalog/PrinceOfDarkness/light.tokens.ts +47 -0
  103. package/src/gui/Theme/catalog/PrinceOfDarkness/manifest.ts +24 -0
  104. package/src/gui/Theme/catalog/PrinceOfDarkness/prince.png +0 -0
  105. package/src/gui/Theme/catalog/PrinceOfDarkness/princeOfDarkness.png +0 -0
  106. package/src/gui/Theme/catalog/Seafoam/dark.tokens.ts +49 -0
  107. package/src/gui/Theme/catalog/Seafoam/light.tokens.ts +47 -0
  108. package/src/gui/Theme/catalog/Seafoam/manifest.ts +24 -0
  109. package/src/gui/Theme/catalog/Seafoam/seaFoam.png +0 -0
  110. package/src/gui/Theme/catalog/neurons/dark.tokens.ts +58 -0
  111. package/src/gui/Theme/catalog/neurons/light.tokens.ts +74 -0
  112. package/src/gui/Theme/catalog/neurons/manifest.ts +24 -0
  113. package/src/gui/Theme/catalog/neurons/neurons.me.png +0 -0
  114. package/src/gui/Theme/fromTokens.ts +273 -0
  115. package/src/gui/Theme/gui.css +31 -0
  116. package/src/gui/Theme/index.ts +17 -0
  117. package/src/gui/Theme/styles/buildShadows.ts +83 -0
  118. package/src/gui/Theme/styles/theme.tokens.ts +108 -0
  119. package/src/gui/Theme/utils/catalog.ts +61 -0
  120. package/src/gui/Theme/utils/persistence.ts +66 -0
  121. package/src/gui/Theme/utils/themeUtils.ts +34 -0
  122. package/src/gui/apis/codegen.api.ts +38 -0
  123. package/src/gui/components/atoms/AppBar/AppBar.resolver.tsx +41 -0
  124. package/src/gui/components/atoms/AppBar/AppBar.stories.tsx +225 -0
  125. package/src/gui/components/atoms/AppBar/AppBar.tsx +8 -0
  126. package/src/gui/components/atoms/AppBar/AppBar.types.ts +28 -0
  127. package/src/gui/components/atoms/Avatar/Avatar.resolver.tsx +61 -0
  128. package/src/gui/components/atoms/Avatar/Avatar.stories.tsx +36 -0
  129. package/src/gui/components/atoms/Avatar/Avatar.tsx +14 -0
  130. package/src/gui/components/atoms/Box/Box.resolver.tsx +171 -0
  131. package/src/gui/components/atoms/Box/Box.stories.tsx +263 -0
  132. package/src/gui/components/atoms/Box/Box.tsx +15 -0
  133. package/src/gui/components/atoms/Button/Button.resolver.tsx +103 -0
  134. package/src/gui/components/atoms/Button/Button.stories.tsx +219 -0
  135. package/src/gui/components/atoms/Button/Button.tsx +40 -0
  136. package/src/gui/components/atoms/Card/Card.resolver.tsx +63 -0
  137. package/src/gui/components/atoms/Card/Card.stories.tsx +54 -0
  138. package/src/gui/components/atoms/Card/Card.tsx +13 -0
  139. package/src/gui/components/atoms/CardActions/CardActions.resolver.tsx +59 -0
  140. package/src/gui/components/atoms/CardActions/CardActions.stories.tsx +32 -0
  141. package/src/gui/components/atoms/CardActions/CardActions.tsx +14 -0
  142. package/src/gui/components/atoms/CardContent/CardContent.resolver.tsx +60 -0
  143. package/src/gui/components/atoms/CardContent/CardContent.stories.tsx +34 -0
  144. package/src/gui/components/atoms/CardContent/CardContent.tsx +13 -0
  145. package/src/gui/components/atoms/CardHeader/CardHeader.resolver.tsx +68 -0
  146. package/src/gui/components/atoms/CardHeader/CardHeader.stories.tsx +40 -0
  147. package/src/gui/components/atoms/CardHeader/CardHeader.tsx +12 -0
  148. package/src/gui/components/atoms/Collapse/Collapse.resolver.tsx +85 -0
  149. package/src/gui/components/atoms/Collapse/Collapse.stories.tsx +130 -0
  150. package/src/gui/components/atoms/Collapse/Collapse.tsx +17 -0
  151. package/src/gui/components/atoms/Divider/Divider.resolver.tsx +95 -0
  152. package/src/gui/components/atoms/Divider/Divider.stories.tsx +108 -0
  153. package/src/gui/components/atoms/Divider/Divider.tsx +14 -0
  154. package/src/gui/components/atoms/Drawer/Drawer.resolver.tsx +116 -0
  155. package/src/gui/components/atoms/Drawer/Drawer.stories.tsx +223 -0
  156. package/src/gui/components/atoms/Drawer/Drawer.tsx +25 -0
  157. package/src/gui/components/atoms/Grid/Grid.resolver.tsx +33 -0
  158. package/src/gui/components/atoms/Grid/Grid.stories.tsx +136 -0
  159. package/src/gui/components/atoms/Grid/Grid.tsx +15 -0
  160. package/src/gui/components/atoms/Grid/Grid.types.ts +9 -0
  161. package/src/gui/components/atoms/IconButton/IconButton.resolver.tsx +137 -0
  162. package/src/gui/components/atoms/IconButton/IconButton.stories.tsx +134 -0
  163. package/src/gui/components/atoms/IconButton/IconButton.tsx +22 -0
  164. package/src/gui/components/atoms/Link/Link.resolver.tsx +74 -0
  165. package/src/gui/components/atoms/Link/Link.stories.tsx +157 -0
  166. package/src/gui/components/atoms/Link/Link.tsx +36 -0
  167. package/src/gui/components/atoms/List/List.resolver.tsx +94 -0
  168. package/src/gui/components/atoms/List/List.stories.tsx +137 -0
  169. package/src/gui/components/atoms/List/List.tsx +20 -0
  170. package/src/gui/components/atoms/ListItem/ListItem.resolver.tsx +88 -0
  171. package/src/gui/components/atoms/ListItem/ListItem.stories.tsx +151 -0
  172. package/src/gui/components/atoms/ListItem/ListItem.tsx +19 -0
  173. package/src/gui/components/atoms/ListItemButton/ListItemButton.resolver.tsx +214 -0
  174. package/src/gui/components/atoms/ListItemButton/ListItemButton.stories.tsx +155 -0
  175. package/src/gui/components/atoms/ListItemButton/ListItemButton.tsx +15 -0
  176. package/src/gui/components/atoms/ListItemIcon/ListItemIcon.resolver.tsx +102 -0
  177. package/src/gui/components/atoms/ListItemIcon/ListItemIcon.stories.tsx +132 -0
  178. package/src/gui/components/atoms/ListItemIcon/ListItemIcon.tsx +11 -0
  179. package/src/gui/components/atoms/ListItemText/ListItemText.resolver.tsx +112 -0
  180. package/src/gui/components/atoms/ListItemText/ListItemText.stories.tsx +156 -0
  181. package/src/gui/components/atoms/ListItemText/ListItemText.tsx +15 -0
  182. package/src/gui/components/atoms/Menu/Menu.resolver.tsx +112 -0
  183. package/src/gui/components/atoms/Menu/Menu.stories.tsx +162 -0
  184. package/src/gui/components/atoms/Menu/Menu.tsx +17 -0
  185. package/src/gui/components/atoms/MenuItem/MenuItem.resolver.tsx +183 -0
  186. package/src/gui/components/atoms/MenuItem/MenuItem.stories.tsx +134 -0
  187. package/src/gui/components/atoms/MenuItem/MenuItem.tsx +14 -0
  188. package/src/gui/components/atoms/Paper/Paper.resolver.tsx +98 -0
  189. package/src/gui/components/atoms/Paper/Paper.stories.tsx +184 -0
  190. package/src/gui/components/atoms/Paper/Paper.tsx +15 -0
  191. package/src/gui/components/atoms/Section/Section.resolver.tsx +10 -0
  192. package/src/gui/components/atoms/Section/Section.stories.tsx +189 -0
  193. package/src/gui/components/atoms/Section/Section.tsx +76 -0
  194. package/src/gui/components/atoms/Section/Section.types.tsx +24 -0
  195. package/src/gui/components/atoms/Stack/Stack.resolver.tsx +94 -0
  196. package/src/gui/components/atoms/Stack/Stack.stories.tsx +160 -0
  197. package/src/gui/components/atoms/Stack/Stack.tsx +15 -0
  198. package/src/gui/components/atoms/Surface/Surface.resolver.tsx +37 -0
  199. package/src/gui/components/atoms/Surface/Surface.tsx +49 -0
  200. package/src/gui/components/atoms/Surface/Surface.types.ts +20 -0
  201. package/src/gui/components/atoms/Switch/Switch.resolver.tsx +53 -0
  202. package/src/gui/components/atoms/Switch/Switch.stories.tsx +236 -0
  203. package/src/gui/components/atoms/Switch/Switch.tsx +22 -0
  204. package/src/gui/components/atoms/TextField/TextField.stories.tsx +28 -0
  205. package/src/gui/components/atoms/TextField/TextField.tsx +15 -0
  206. package/src/gui/components/atoms/Toolbar/Toolbar.resolver.tsx +60 -0
  207. package/src/gui/components/atoms/Toolbar/Toolbar.stories.tsx +155 -0
  208. package/src/gui/components/atoms/Toolbar/Toolbar.tsx +16 -0
  209. package/src/gui/components/atoms/Tooltip/Tooltip.resolver.tsx +142 -0
  210. package/src/gui/components/atoms/Tooltip/Tooltip.stories.tsx +117 -0
  211. package/src/gui/components/atoms/Tooltip/Tooltip.tsx +70 -0
  212. package/src/gui/components/atoms/Typography/Typography.resolver.tsx +158 -0
  213. package/src/gui/components/atoms/Typography/Typography.stories.tsx +222 -0
  214. package/src/gui/components/atoms/Typography/Typography.tsx +27 -0
  215. package/src/gui/components/atoms.tsx +138 -0
  216. package/src/gui/components/molecules/Dialog/Dialog.stories.tsx +18 -0
  217. package/src/gui/components/molecules/Dialog/Dialog.tsx +5 -0
  218. package/src/gui/components/molecules/HeroSection/HeroSection.stories.tsx +141 -0
  219. package/src/gui/components/molecules/HeroSection/HeroSection.tsx +152 -0
  220. package/src/gui/components/molecules/HeroSection/HeroSection.types.tsx +18 -0
  221. package/src/gui/components/molecules/ModalBox/ModalBox.resolver.tsx +38 -0
  222. package/src/gui/components/molecules/ModalBox/ModalBox.stories.tsx +82 -0
  223. package/src/gui/components/molecules/ModalBox/ModalBox.tsx +106 -0
  224. package/src/gui/components/molecules/ModalBox/ModalBox.types.ts +29 -0
  225. package/src/gui/components/molecules/Page/Page.stories.tsx +135 -0
  226. package/src/gui/components/molecules/Page/Page.tsx +94 -0
  227. package/src/gui/components/molecules/Theme/ThemeModeToggle/ThemeModeToggle.resolver.tsx +58 -0
  228. package/src/gui/components/molecules/Theme/ThemeModeToggle/ThemeModeToggle.stories.tsx +133 -0
  229. package/src/gui/components/molecules/Theme/ThemeModeToggle/ThemeModeToggle.tsx +101 -0
  230. package/src/gui/components/molecules/Theme/ThemeModeToggle/ThemeModeToggle.types.ts +29 -0
  231. package/src/gui/components/molecules/Theme/ThemesCatalog/ThemesCatalog.resolver.tsx +15 -0
  232. package/src/gui/components/molecules/Theme/ThemesCatalog/ThemesCatalog.stories.tsx +88 -0
  233. package/src/gui/components/molecules/Theme/ThemesCatalog/ThemesCatalog.tsx +167 -0
  234. package/src/gui/components/molecules/Theme/ThemesCatalog/ThemesCatalog.types.ts +34 -0
  235. package/src/gui/components/organism/ChatGPTInterface/ChatGPTInterface.stories.tsx +17 -0
  236. package/src/gui/components/organism/ChatGPTInterface/ChatGPTInterface.tsx +71 -0
  237. package/src/gui/components/organism/RootDomain/RootDomain.stories.tsx +31 -0
  238. package/src/gui/components/organism/RootDomain/RootDomain.tsx +100 -0
  239. package/src/gui/components/organism/RootDomain/staticServices.ts +66 -0
  240. package/src/gui/components/window/Nodes/node.ts +0 -0
  241. package/src/gui/components/window/code/block/node.tsx +0 -0
  242. package/src/gui/components/window/code/hugging.face.api.ts +11 -0
  243. package/src/gui/components/window/connectors/index.ts +19 -0
  244. package/src/gui/components/window/window.stories.tsx +20 -0
  245. package/src/gui/components/window/window.tsx +633 -0
  246. package/src/gui/contexts/InsetsContext.tsx +38 -0
  247. package/src/gui/contexts/LeftSidebarContext.tsx +20 -0
  248. package/src/gui/contexts/RightSidebarContext.tsx +25 -0
  249. package/src/gui/contexts/ThemeContext.ts +34 -0
  250. package/src/gui/contexts/index.ts +4 -0
  251. package/src/gui/hooks/index.ts +11 -0
  252. package/src/gui/hooks/resolveColorToken.ts +39 -0
  253. package/src/gui/hooks/useCodeGen.ts +12 -0
  254. package/src/gui/hooks/useGuiMediaQuery.ts +18 -0
  255. package/src/gui/hooks/useGuiTheme.ts +18 -0
  256. package/src/gui/hooks/useInsets.ts +26 -0
  257. package/src/gui/hooks/useIsMobile.ts +13 -0
  258. package/src/gui/hooks/useIsTouchDevice.ts +25 -0
  259. package/src/gui/hooks/useLeftSidebar.ts +10 -0
  260. package/src/gui/hooks/useRightSidebar.ts +12 -0
  261. package/src/gui/hooks/useViewportKey.ts +19 -0
  262. package/src/gui/hooks/useViewportProp.ts +17 -0
  263. package/src/gui/me/Logic.tsx +31 -0
  264. package/src/gui/me/Me.stories.tsx +8 -0
  265. package/src/gui/me/Me.tsx +197 -0
  266. package/src/gui/me/fundamentals/verbs/verbs.tsx +94 -0
  267. package/src/gui/me/modificators/Adjectives.ts +0 -0
  268. package/src/gui/me/modificators/Adverbs.ts +0 -0
  269. package/src/gui/me/modificators/Complements.ts +27 -0
  270. package/src/gui/me/utils/Context.tsx +14 -0
  271. package/src/gui/me/utils/hooks/useMe.js +37 -0
  272. package/src/gui/utils/nodeID.ts +11 -0
  273. package/src/registry/GuiRegistry.ts +19 -0
  274. package/src/registry/factory.ts +12 -0
  275. package/src/registry/index.ts +3 -0
  276. package/src/registry/types.ts +6 -0
  277. package/src/stories/01.Home.mdx +22 -0
  278. package/src/stories/02.Understanding.This.GUI.mdx +149 -0
  279. package/src/stories/Theme/Palette.stories.tsx +86 -0
  280. package/src/stories/Theme/ThemeViewer.stories.tsx +91 -0
  281. package/src/stories/Theme/Typography.stories.jsx +211 -0
  282. package/src/types/gui.d.ts +67 -0
  283. package/src/types/theme.d.ts +191 -0
  284. package/src/types/viewport.ts +132 -0
package/index.ts CHANGED
@@ -5,6 +5,7 @@ import TopBar from "./src/gui/Layouts/ResponsiveUI/TopBar/TopBar";
5
5
  import Footer from "./src/gui/Layouts/ResponsiveUI/Footer/Footer";
6
6
  import LeftSidebar from "./src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/LeftSidebar";
7
7
  import RightSidebar from "./src/gui/Layouts/ResponsiveUI/Sidebars/RightSidebar/RightSidebar";
8
+ import Layout from "./src/gui/Layouts/ResponsiveUI/Layout/Layout";
8
9
  import StickyOptionsTop from "./src/gui/Layouts/ResponsiveUI/StickyOptions/StickyOptionsTop";
9
10
  import useCodeGen from "./src/gui/hooks/useCodeGen";
10
11
  import RootDomain from "./src/gui/components/organism/RootDomain/RootDomain";
@@ -32,14 +33,14 @@ import Gridme from "./src/components/generics/Cards/Gridme";
32
33
  import Dialog from "./src/gui/components/molecules/Dialog/Dialog";
33
34
  import type { GUIType } from "./src/types/gui.d";
34
35
  export {
35
- GuiProvider, useThemeContext, TopBar, useCodeGen, Footer, StickyOptionsTop, LeftSidebar, RightSidebar, TextTitle,
36
+ GuiProvider, useThemeContext, TopBar, useCodeGen, Layout, Footer, StickyOptionsTop, LeftSidebar, RightSidebar, TextTitle,
36
37
  TextParagraph,TextList, TextQuote, TextField, RootDomain, Surface, Img, Dialog, VideoEmbed,
37
38
  TableOfContents, Tabs, PageContainer, Gridx, Section, SectionHeader, PageDivider, Hero2, CodeBlock, Callout,
38
39
  ModuleCard, LilBox, Gridme
39
40
  };
40
41
  // Default namespace (`import GUI from "this.gui"`)
41
42
  const GUI: GUIType = {
42
- GuiProvider, useThemeContext, TopBar, useCodeGen, LeftSidebar,
43
+ GuiProvider, useThemeContext, TopBar, useCodeGen, Layout, LeftSidebar,
43
44
  RightSidebar, StickyOptionsTop, RootDomain, TextTitle, TextParagraph,
44
45
  TextList, TextQuote, Surface, TextField, Img, VideoEmbed,
45
46
  TableOfContents, Tabs, PageContainer, Gridx, Section, SectionHeader, PageDivider, Hero2,
package/init/index.html CHANGED
@@ -6,8 +6,7 @@
6
6
  <link
7
7
  rel="icon"
8
8
  type="image/svg+xml"
9
- href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'><circle cx='32' cy='32' r='32' fill='%23006688'/><text x='50%' y='54%' text-anchor='middle' font-size='28' font-family='sans-serif' fill='white'>GUI</text></svg>"
10
- />
9
+ href="https://res.cloudinary.com/dkwnxf6gm/image/upload/v1761276578/this.gui.npm.png"/>
11
10
  <title>.GUI</title>
12
11
  <!-- Base metadata (can be overridden by Helmet) -->
13
12
  <meta name="description" content="A .GUI powered application template" />
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "thisgui-demo",
3
- "version": "0.0.0",
3
+ "version": "0.0.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "thisgui-demo",
9
- "version": "0.0.0",
9
+ "version": "0.0.1",
10
10
  "dependencies": {
11
11
  "react": "^19.1.1",
12
12
  "react-dom": "^19.1.1",
package/init/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "thisgui-demo",
3
3
  "private": true,
4
- "version": "0.0.0",
4
+ "version": "0.0.1",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "vite",
@@ -0,0 +1,24 @@
1
+ //Include this.GUI components as a showviewcase
2
+ import { GuiProvider, Hero2, TextField, Dialog, RootDomain } from "this.gui";
3
+ import { DerivableRouterRoot } from "./router/DerivableRouter"; // new
4
+ import "./index.css";
5
+ export default function App() {
6
+ return (
7
+ <GuiProvider>
8
+ <DerivableRouterRoot>
9
+ <Dialog title="Example Dialog" isOpen={true}>
10
+ <p>This is an example dialog.</p>
11
+ </Dialog>
12
+ <RootDomain />
13
+ <Hero2 title=".GUI" subtitle="Your Gateway to Graphical Excellence" />
14
+ <TextField label="Search" placeholder="Type to search..." />
15
+ <main>
16
+ <h1>Hello, this.gui!</h1>
17
+ <p>Welcome to your new application.</p>
18
+ <p>Explore the features and customize your experience.</p>
19
+ <p>Get started by editing <code>src/App.tsx</code>.</p>
20
+ </main>
21
+ </DerivableRouterRoot>
22
+ </GuiProvider>
23
+ );
24
+ }
@@ -0,0 +1,16 @@
1
+ :root {
2
+ font-family: 'Inter', system-ui, Avenir, Helvetica, Arial, sans-serif;
3
+ color: #1f2933;
4
+ background-color: #f5f7fb;
5
+ }
6
+
7
+ body {
8
+ margin: 0;
9
+ min-height: 100vh;
10
+ }
11
+
12
+ .app-container {
13
+ max-width: 960px;
14
+ margin: 96px auto;
15
+ padding: 0 24px;
16
+ }
@@ -0,0 +1,14 @@
1
+ // init/src/main.tsx
2
+ import React from "react";
3
+ import ReactDOM from "react-dom/client";
4
+ import { BrowserRouter } from "react-router-dom";
5
+ import App from "./App";
6
+ import "./index.css";
7
+ import { GuiProvider } from "this.gui";
8
+ ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
9
+ <React.StrictMode>
10
+ <GuiProvider>
11
+ <App />
12
+ </GuiProvider>
13
+ </React.StrictMode>
14
+ );
@@ -0,0 +1,36 @@
1
+ import React, { createContext, useContext, useState, useEffect } from 'react';
2
+ import { BrowserRouter, useLocation, useNavigate } from 'react-router-dom';
3
+ type DerivableRouterContextType = {
4
+ currentPath: string;
5
+ navigate: (path: string) => void;
6
+ };
7
+
8
+ const DerivableRouterContext = createContext<DerivableRouterContextType | undefined>(undefined);
9
+ export const DerivableRouterProvider: React.FC<{ children?: React.ReactNode }> = ({ children }) => {
10
+ const location = useLocation();
11
+ const navigate = useNavigate();
12
+ const [currentPath, setCurrentPath] = useState<string>(location.pathname);
13
+ useEffect(() => {
14
+ setCurrentPath(location.pathname);
15
+ }, [location.pathname]);
16
+ return (
17
+ <DerivableRouterContext.Provider value={{ currentPath, navigate }}>
18
+ {children}
19
+ </DerivableRouterContext.Provider>
20
+ );
21
+ };
22
+
23
+ export const useDerivableRouter = (): DerivableRouterContextType => {
24
+ const ctx = useContext(DerivableRouterContext);
25
+ if (!ctx) {
26
+ throw new Error('useDerivableRouter must be used within a DerivableRouterProvider');
27
+ }
28
+ return ctx;
29
+ };
30
+
31
+ // Wrapper to ensure routing context
32
+ export const DerivableRouterRoot: React.FC<{ children?: React.ReactNode }> = ({ children }) => (
33
+ <BrowserRouter>
34
+ <DerivableRouterProvider>{children}</DerivableRouterProvider>
35
+ </BrowserRouter>
36
+ );
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "this.gui",
3
3
  "private": false,
4
- "version": "1.3.24",
4
+ "version": "1.3.26",
5
5
  "type": "module",
6
6
  "main": "dist/this-gui.umd.js",
7
7
  "module": "dist/this-gui.es.js",
package/src/GUI.tsx ADDED
@@ -0,0 +1,15 @@
1
+ // src/GUI.tsx
2
+ import React from 'react'
3
+ import { GuiProvider, TopBar, Footer } from '../index'
4
+ export const GUI = ({ title = 'this.GUI', children }: { title?: string; children?: React.ReactNode }) => {
5
+ return (
6
+ <GuiProvider>
7
+ <TopBar />
8
+ <main style={{ padding: '2rem' }}>
9
+ <h1>{title}</h1>
10
+ {children}
11
+ </main>
12
+ <Footer />
13
+ </GuiProvider>
14
+ )
15
+ }
@@ -0,0 +1,52 @@
1
+ import { Box } from '@mui/material';
2
+
3
+ // Gridme is a generic grid layout component based on MUI's Box.
4
+ // It allows you to quickly define a grid layout with customizable number of columns and spacing.
5
+ // You can also control the maximum width of each grid item via the `itemMaxWidth` prop.
6
+ // This wrapper is part of this.GUI's declarative approach to layout construction.
7
+ const Gridme = ({
8
+ children,
9
+ columns = 3,
10
+ columnGap = '0.5rem',
11
+ rowGap = '1rem',
12
+ marginTop = '0px',
13
+ marginBottom = '0px',
14
+ sx = {},
15
+ }) => {
16
+ return (
17
+ <Box
18
+ sx={{
19
+ display: 'grid',
20
+ gridTemplateColumns: `repeat(${columns}, 1fr)`,
21
+ columnGap: columnGap,
22
+ rowGap: rowGap,
23
+ width: '100%',
24
+ alignItems: 'stretch',
25
+ justifyItems: 'stretch',
26
+ mt: marginTop,
27
+ mb: marginBottom,
28
+ '& > *': {
29
+ width: '100%',
30
+ height: '100%',
31
+ },
32
+ ...sx,
33
+ }}
34
+ >
35
+ {children}
36
+ </Box>
37
+ );
38
+ };
39
+
40
+ export default Gridme;
41
+
42
+ // Example usage:
43
+ //
44
+ // import Gridme from './Gridme';
45
+ //
46
+ // const Example = () => (
47
+ // <Gridme columns={3} gap="1rem">
48
+ // <Box sx={{ backgroundColor: 'red', height: 100 }} />
49
+ // <Box sx={{ backgroundColor: 'blue', height: 100 }} />
50
+ // <Box sx={{ backgroundColor: 'green', height: 100 }} />
51
+ // </Gridme>
52
+ // );
@@ -0,0 +1,65 @@
1
+ import { Box, Typography } from '@mui/material';
2
+ import * as Icons from 'react-feather';
3
+ import PropTypes from 'prop-types';
4
+ import { Link } from 'react-router-dom';
5
+
6
+ const LilBox = ({
7
+ icon,
8
+ featherIcon,
9
+ label,
10
+ href,
11
+ aspectRatio = '5 / 4',
12
+ }) => {
13
+ const FeatherIcon = featherIcon && Icons[featherIcon] ? Icons[featherIcon] : null;
14
+
15
+ return (
16
+ <Box
17
+ component={href ? Link : 'div'}
18
+ to={href}
19
+ sx={{
20
+ width: '100%',
21
+ aspectRatio,
22
+ backgroundColor: (theme) =>
23
+ theme.palette.mode === 'dark'
24
+ ? 'rgba(255, 255, 255, 0.05)'
25
+ : 'rgba(0, 0, 0, 0.03)',
26
+ border: '1px solid',
27
+ borderColor: (theme) =>
28
+ theme.palette.mode === 'dark'
29
+ ? 'rgba(255, 255, 255, 0.1)'
30
+ : 'rgba(0, 0, 0, 0.1)',
31
+ borderRadius: '8px',
32
+ display: 'flex',
33
+ flexDirection: 'column',
34
+ alignItems: 'center',
35
+ justifyContent: 'center',
36
+ color: (theme) => theme.palette.text.primary,
37
+ fontSize: '1rem',
38
+ fontWeight: 300,
39
+ transition: 'transform 0.2s ease',
40
+ textDecoration: 'none',
41
+ cursor: 'pointer',
42
+ '&:hover': {
43
+ transform: 'scale(1.05)',
44
+ },
45
+ }}
46
+ >
47
+ <Box sx={{ fontSize: '1.5rem', mb: 0.5 }}>
48
+ {icon ? icon : FeatherIcon ? <FeatherIcon size={24} /> : null}
49
+ </Box>
50
+ <Typography variant="body2" align="center">
51
+ {label}
52
+ </Typography>
53
+ </Box>
54
+ );
55
+ };
56
+
57
+ LilBox.propTypes = {
58
+ icon: PropTypes.node,
59
+ featherIcon: PropTypes.string,
60
+ label: PropTypes.string.isRequired,
61
+ href: PropTypes.string,
62
+ aspectRatio: PropTypes.string,
63
+ };
64
+
65
+ export default LilBox;
@@ -0,0 +1,106 @@
1
+ import { Link as RouterLink } from "react-router-dom";
2
+ import { Box, Typography, Card, CardActionArea, CardContent } from "@mui/material";
3
+
4
+ /**
5
+ * ModuleCard
6
+ * Clickable card for modules/features.
7
+ *
8
+ * Props:
9
+ * - title: string (required)
10
+ * - description: string
11
+ * - image: string (url to image)
12
+ * - href?: string -> preferred navigation prop (internal route or external URL)
13
+ * - link?: string -> alias of href for backward compatibility
14
+ * - target?: string -> optional target for external links (e.g., "_blank")
15
+ *
16
+ * Behavior:
17
+ * - If `href` (or `link`) starts with http/https, renders an <a>.
18
+ * - Otherwise, renders a React Router <Link> for client-side routing.
19
+ * - Avoids nested anchors: do NOT wrap ModuleCard with another <Link>.
20
+ */
21
+ const ModuleCard = ({ title, description, image, href, link, target }) => {
22
+ const to = href ?? link ?? null;
23
+ const isExternal = typeof to === "string" && /^https?:\/\//i.test(to);
24
+
25
+ // Decide which props to pass to CardActionArea to avoid <a> inside <a>.
26
+ const navProps = to
27
+ ? isExternal
28
+ ? { component: "a", href: to, target: target ?? "_self", rel: "noopener noreferrer" }
29
+ : { component: RouterLink, to }
30
+ : {}; // No navigation if no href/link provided
31
+
32
+ return (
33
+ <Card
34
+ sx={{
35
+ height: "100%",
36
+ backgroundColor: "background.paper",
37
+ boxShadow: 2,
38
+ borderRadius: 2,
39
+ "&:hover": {
40
+ boxShadow: 4,
41
+ transform: "translateY(-2px)",
42
+ transition: "0.3s ease-in-out",
43
+ },
44
+ }}
45
+ >
46
+ <CardActionArea
47
+ {...navProps}
48
+ sx={{ height: "100%", display: "flex", flexDirection: "column" }}
49
+ >
50
+ <CardContent
51
+ sx={{
52
+ display: "flex",
53
+ flexDirection: "column",
54
+ alignItems: "center",
55
+ justifyContent: "center",
56
+ textAlign: "center",
57
+ padding: 2,
58
+ height: "100%",
59
+ }}
60
+ >
61
+ {/* Image */}
62
+ {image && (
63
+ <Box
64
+ component="img"
65
+ src={image}
66
+ alt={title}
67
+ sx={{
68
+ width: "80px",
69
+ height: "80px",
70
+ marginBottom: 1,
71
+ objectFit: "contain",
72
+ }}
73
+ />
74
+ )}
75
+
76
+ {/* Title */}
77
+ <Typography
78
+ variant="body1"
79
+ sx={{
80
+ fontWeight: 600,
81
+ color: "text.primary",
82
+ marginBottom: 1,
83
+ }}
84
+ >
85
+ {title}
86
+ </Typography>
87
+
88
+ {/* Description */}
89
+ {description && (
90
+ <Typography
91
+ variant="body2"
92
+ sx={{
93
+ fontSize: "0.85rem",
94
+ color: "text.secondary",
95
+ }}
96
+ >
97
+ {description}
98
+ </Typography>
99
+ )}
100
+ </CardContent>
101
+ </CardActionArea>
102
+ </Card>
103
+ );
104
+ };
105
+
106
+ export default ModuleCard;
@@ -0,0 +1,223 @@
1
+ import React, { useEffect, useRef, useState } from 'react';
2
+ import { Box, Typography, Paper, TextField, IconButton, Avatar, Divider } from '@mui/material';
3
+ import { useTheme, alpha } from '@mui/material/styles';
4
+ import SendIcon from '@mui/icons-material/Send';
5
+ import SmartToyIcon from '@mui/icons-material/SmartToy';
6
+ import PersonIcon from '@mui/icons-material/Person';
7
+
8
+ /**
9
+ * FullChatBot (this.GUI)
10
+ * A full-page, theme-aware chat surface.
11
+ *
12
+ * Props (all optional):
13
+ * - title: string (header title)
14
+ * - initialMessages: Array<{ id?: string, role: 'user'|'bot', text: string }>
15
+ * - onSend: async (text, history) => Promise<string | { text: string } | Array<{ text: string }>> (required to produce replies).
16
+ * - onError: function (error) => void
17
+ * - placeholder: string
18
+ * - headerIcon: ReactNode (defaults to SmartToy)
19
+ * - heightOffset: number|string // extra space to subtract besides navbar height
20
+ * - maxWidth: number|string // container max width
21
+ * - bleedTop: number|string // optionally pull the chat upward (compensate parent padding)
22
+ */
23
+ export default function FullChatBot({
24
+ title = 'SupportBot Example',
25
+ initialMessages = [ { id: 'b1', role: 'bot', text: "Hi! I'm your Support Bot. How can I help today?" } ],
26
+ onSend,
27
+ onError,
28
+ placeholder = 'Type your message…',
29
+ headerIcon,
30
+ heightOffset = 0,
31
+ maxWidth = 1400,
32
+ bleedTop = 0,
33
+ }) {
34
+ const theme = useTheme();
35
+
36
+ // Colors and surfaces from theme
37
+ const mode = theme?.palette?.mode || 'dark';
38
+ const linkMain = theme?.palette?.link?.main || 'rgb(0,170,150)';
39
+ const borderColor = theme?.custom?.border || (mode === 'dark' ? 'rgba(255,255,255,0.14)' : 'rgba(0,0,0,0.12)');
40
+ const surface = theme?.palette?.background?.paper || (mode === 'dark' ? 'rgb(24,26,28)' : '#ffffff');
41
+ const textPrimary = theme?.palette?.text?.primary || (mode === 'dark' ? '#fff' : '#111');
42
+ const bubbleUserBg = alpha(linkMain, 0.14);
43
+ const bubbleUserBorder = alpha(linkMain, 0.35);
44
+ const bubbleBotBg = mode === 'dark' ? alpha('#ffffff', 0.06) : alpha('#000000', 0.04);
45
+ const bubbleBotBorder = mode === 'dark' ? alpha('#ffffff', 0.12) : alpha('#000000', 0.08);
46
+
47
+ const [messages, setMessages] = useState(() => initialMessages);
48
+ const [input, setInput] = useState('');
49
+ const [isTyping, setIsTyping] = useState(false);
50
+ const listRef = useRef(null);
51
+
52
+ // Auto-scroll to bottom when messages update
53
+ useEffect(() => {
54
+ const el = listRef.current;
55
+ if (el) el.scrollTop = el.scrollHeight;
56
+ }, [messages, isTyping]);
57
+
58
+ const handleSend = async () => {
59
+ const trimmed = input.trim();
60
+ if (!trimmed) return;
61
+ const userMsg = { id: `u-${Date.now()}`, role: 'user', text: trimmed };
62
+ setMessages((m) => [...m, userMsg]);
63
+ setInput('');
64
+
65
+ setIsTyping(true);
66
+ try {
67
+ if (typeof onSend !== 'function') {
68
+ console.warn('[FullChatBot] onSend prop is required to generate replies.');
69
+ setIsTyping(false);
70
+ return;
71
+ }
72
+ let next = await onSend(trimmed, [...messages, userMsg]);
73
+ const toArray = Array.isArray(next) ? next : [next];
74
+ const prepared = toArray
75
+ .filter(Boolean)
76
+ .map((n, idx) => ({ id: `b-${Date.now()}-${idx}`, role: 'bot', text: typeof n === 'string' ? n : (n?.text || '') }));
77
+ // small UX delay
78
+ setTimeout(() => {
79
+ setMessages((m) => [...m, ...prepared]);
80
+ setIsTyping(false);
81
+ }, 200);
82
+ } catch (e) {
83
+ if (typeof onError === 'function') try { onError(e); } catch (_) {}
84
+ setMessages((m) => [...m, { id: `b-${Date.now()}`, role: 'bot', text: 'Sorry, something went wrong. Please try again.' }]);
85
+ setIsTyping(false);
86
+ }
87
+ };
88
+
89
+ const onKeyDown = (e) => {
90
+ if (e.key === 'Enter' && !e.shiftKey) {
91
+ e.preventDefault();
92
+ handleSend();
93
+ }
94
+ };
95
+
96
+ const bubbleStyles = (role) => {
97
+ const isUser = role === 'user';
98
+ return {
99
+ alignSelf: isUser ? 'flex-end' : 'flex-start',
100
+ maxWidth: '78%',
101
+ padding: '10px 12px',
102
+ borderRadius: 12,
103
+ background: isUser ? bubbleUserBg : bubbleBotBg,
104
+ border: `1px solid ${isUser ? bubbleUserBorder : bubbleBotBorder}`,
105
+ color: 'inherit',
106
+ wordBreak: 'break-word'
107
+ };
108
+ };
109
+
110
+ const HeaderIcon = headerIcon || <SmartToyIcon sx={{ color: linkMain }} />;
111
+
112
+ // Full height relative to viewport minus navbar and optional offset
113
+ const topCalc = `calc(97vh - var(--nav-height, 56px) - ${typeof heightOffset === 'number' ? `${heightOffset}px` : String(heightOffset)})`;
114
+ const mtBleed = bleedTop ? (typeof bleedTop === 'number' ? `${-bleedTop}px` : `calc(0px - ${String(bleedTop)})`) : 0;
115
+
116
+ return (
117
+ <Box sx={{ width: '100%', maxWidth, mx: 'auto', height: topCalc, mt: mtBleed, display: 'flex', flexDirection: 'column', color: textPrimary, colorScheme: mode }}>
118
+ {/* Header */}
119
+ <Box
120
+ sx={{
121
+ display: 'flex',
122
+ alignItems: 'center',
123
+ gap: 1,
124
+ px: 2,
125
+ py: 1,
126
+ border: '1px solid',
127
+ borderColor: borderColor,
128
+ borderBottom: 'none',
129
+ borderTopLeftRadius: 8,
130
+ borderTopRightRadius: 8,
131
+ background: surface,
132
+ }}
133
+ >
134
+ {HeaderIcon}
135
+ <Typography variant="h6" sx={{ fontWeight: 700 }}>{title}</Typography>
136
+ </Box>
137
+
138
+ {/* Chat container fills remaining space */}
139
+ <Paper elevation={0} sx={{
140
+ flex: 1,
141
+ display: 'flex',
142
+ flexDirection: 'column',
143
+ border: '1px solid',
144
+ borderColor: borderColor,
145
+ borderRadius: 2,
146
+ background: surface,
147
+ minHeight: 360
148
+ }}>
149
+ {/* Conversation */}
150
+ <Box ref={listRef} sx={{
151
+ flex: 1,
152
+ overflowY: 'auto',
153
+ p: 2,
154
+ display: 'flex',
155
+ flexDirection: 'column',
156
+ gap: 1.2
157
+ }}>
158
+ {messages.map((m) => (
159
+ <Box key={m.id} sx={{ display: 'flex', gap: 1, alignItems: 'flex-start', flexDirection: m.role === 'user' ? 'row-reverse' : 'row' }}>
160
+ <Avatar sx={{ width: 28, height: 28, bgcolor: m.role === 'user' ? 'rgba(0,170,150,0.18)' : 'rgba(255,255,255,0.08)', border: '1px solid', borderColor: m.role === 'user' ? 'rgba(0,170,150,0.4)' : 'rgba(255,255,255,0.18)' }}>
161
+ {m.role === 'user' ? <PersonIcon fontSize="small" /> : <SmartToyIcon fontSize="small" />}
162
+ </Avatar>
163
+ <Box sx={bubbleStyles(m.role)}>
164
+ <Typography variant="body2">{m.text}</Typography>
165
+ </Box>
166
+ </Box>
167
+ ))}
168
+ {isTyping && (
169
+ <Box sx={{ display: 'flex', gap: 1, alignItems: 'center' }}>
170
+ <Avatar sx={{ width: 28, height: 28, bgcolor: 'rgba(255,255,255,0.08)', border: '1px solid rgba(255,255,255,0.18)' }}>
171
+ <SmartToyIcon fontSize="small" />
172
+ </Avatar>
173
+ <Box sx={{ ...bubbleStyles('bot'), display: 'inline-flex', gap: 1 }}>
174
+ <Dot /> <Dot delay={120} /> <Dot delay={240} />
175
+ </Box>
176
+ </Box>
177
+ )}
178
+ </Box>
179
+ <Divider />
180
+ {/* Composer */}
181
+ <Box sx={{ display: 'flex', alignItems: 'center', p: 1 }}>
182
+ <TextField
183
+ value={input}
184
+ onChange={(e) => setInput(e.target.value)}
185
+ onKeyDown={onKeyDown}
186
+ placeholder={placeholder}
187
+ variant="standard"
188
+ fullWidth
189
+ InputProps={{ disableUnderline: true }}
190
+ sx={{
191
+ mx: 1,
192
+ px: 1.5,
193
+ py: 1,
194
+ borderRadius: 1,
195
+ border: '1px solid',
196
+ borderColor: borderColor,
197
+ background: mode === 'dark' ? alpha('#ffffff', 0.04) : alpha('#000000', 0.03)
198
+ }}
199
+ />
200
+ <IconButton color="primary" onClick={handleSend} aria-label="send">
201
+ <SendIcon />
202
+ </IconButton>
203
+ </Box>
204
+ </Paper>
205
+ </Box>
206
+ );
207
+ }
208
+
209
+ function Dot({ delay = 0 }) {
210
+ const [on, setOn] = useState(false);
211
+ useEffect(() => {
212
+ const id = setInterval(() => setOn((v) => !v), 350);
213
+ return () => clearInterval(id);
214
+ }, []);
215
+ return (
216
+ <Box component="span" sx={{
217
+ width: 6, height: 6, borderRadius: 1,
218
+ display: 'inline-block',
219
+ background: on ? 'rgba(255,255,255,0.8)' : 'rgba(255,255,255,0.35)',
220
+ transition: 'opacity 200ms ease',
221
+ }} />
222
+ );
223
+ }
@@ -0,0 +1,33 @@
1
+ // src/components/Pages/CodeBlock.jsx
2
+ import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
3
+ import { oneDark } from 'react-syntax-highlighter/dist/esm/styles/prism';
4
+ import { oneLight } from 'react-syntax-highlighter/dist/esm/styles/prism';
5
+ import { useTheme } from '@mui/material/styles';
6
+
7
+ export default function CodeBlock({ children, language = "javascript" }) {
8
+ const theme = useTheme();
9
+ const isDark = theme.palette.mode === "dark";
10
+
11
+ return (
12
+ <SyntaxHighlighter
13
+ language={language}
14
+ style={isDark ? oneDark : oneLight}
15
+ customStyle={{
16
+ borderRadius: "6px",
17
+ fontSize: "0.85rem",
18
+ padding: "1rem",
19
+ backgroundColor: isDark ? "#1e1e1e" : "#f5f5f5",
20
+ border: isDark ? "1px solid rgba(255,255,255,0.1)" : "1px solid #ddd",
21
+ color: isDark ? "#f8f8f2" : "#2d2d2d",
22
+ textShadow: "none",
23
+ }}
24
+ codeTagProps={{
25
+ style: {
26
+ textShadow: "none", // Fuerza remover cualquier sombra
27
+ }
28
+ }}
29
+ >
30
+ {children.trim()}
31
+ </SyntaxHighlighter>
32
+ );
33
+ }