this.gui 1.3.22 → 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 +4 -5
  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
@@ -0,0 +1,25 @@
1
+ import React, { createContext, useState } from 'react';
2
+
3
+ export type RightSidebarView = 'rail' | 'expanded' | 'mobile';
4
+
5
+ export type RightSidebarContextType = {
6
+ view: RightSidebarView;
7
+ setView: (view: RightSidebarView) => void;
8
+ };
9
+
10
+ export const RightSidebarContext = createContext<RightSidebarContextType | undefined>(undefined);
11
+
12
+ export const RightSidebarProvider: React.FC<{ children: React.ReactNode; initialView?: RightSidebarView }> = ({
13
+ children,
14
+ initialView = 'rail',
15
+ }) => {
16
+ const [view, setView] = useState<RightSidebarView>(initialView);
17
+
18
+ return (
19
+ <RightSidebarContext.Provider value={{ view, setView }}>
20
+ {children}
21
+ </RightSidebarContext.Provider>
22
+ );
23
+ };
24
+
25
+ export default RightSidebarProvider;
@@ -0,0 +1,34 @@
1
+ //src/themes/utils/themeContext.ts
2
+ import React, { createContext, useContext } from 'react';
3
+ import type { GuiContextValue } from '@/types/theme';
4
+ /**
5
+ * ThemeContext
6
+ * ------------
7
+ * Provides access to the GUI theme context (`GuiContextValue`) throughout the application.
8
+ *
9
+ * This context is intended to be consumed by components that need to access or manipulate:
10
+ * - the current theme key (e.g., 'neurons-light')
11
+ * - the selected family and mode
12
+ * - available themes
13
+ * - helper actions like `toggleMode`, `setMode`, etc.
14
+ *
15
+ * The context value is expected to be provided by `GuiProvider`, which wraps the app.
16
+ */
17
+ export const ThemeContext = createContext<GuiContextValue | undefined>(undefined);
18
+ /**
19
+ * useThemeContext
20
+ * ---------------
21
+ * Custom hook to access the GUI theme context.
22
+ *
23
+ * This hook ensures that it is only used within the `GuiProvider` tree.
24
+ * If accessed outside the provider, it throws an error to help with debugging.
25
+ *
26
+ * @returns {GuiContextValue} - The full GUI theme context state and helpers.
27
+ */
28
+ export const useThemeContext = (): GuiContextValue => {
29
+ const context = useContext(ThemeContext);
30
+ if (!context) {
31
+ throw new Error('useThemeContext must be used within a GuiProvider');
32
+ }
33
+ return context;
34
+ };
@@ -0,0 +1,4 @@
1
+ export * from './InsetsContext';
2
+ export * from './LeftSidebarContext';
3
+ export * from './RightSidebarContext';
4
+ export * from './ThemeContext';
@@ -0,0 +1,11 @@
1
+ // src/gui/hooks_index.ts
2
+ export * from './useGuiMediaQuery';
3
+ export * from './useGuiTheme';
4
+ export * from './resolveColorToken';
5
+ export * from './useInsets';
6
+ export * from './useIsMobile';
7
+ export * from './useIsTouchDevice';
8
+ export * from './useViewportKey';
9
+ export * from './useViewportProp';
10
+ export * from './useLeftSidebar';
11
+ export * from './useRightSidebar';
@@ -0,0 +1,39 @@
1
+ //@/gui/hooks/resolveColorToken.ts
2
+ /**
3
+ * Resolves a color token to a valid CSS color string.
4
+ *
5
+ * Supports raw CSS colors (e.g., '#fff', 'rgb(...)', 'hsl(...)'),
6
+ * and theme palette tokens such as 'primary.main', 'text.secondary', etc.
7
+ * Falls back to the raw token or undefined if it cannot be resolved.
8
+ *
9
+ * @param token - The color token or raw color string to resolve.
10
+ * @param theme - Optional MUI Theme object to resolve from. Defaults to useTheme() if not provided.
11
+ * @returns A resolved color string or undefined.
12
+ */
13
+ import { useTheme } from '@mui/material/styles';
14
+ import type { Theme } from '@mui/material/styles';
15
+
16
+ export function resolveColorToken(token?: string, theme?: Theme): string | undefined {
17
+ if (!token) return undefined;
18
+ const resolvedTheme = theme ?? useTheme();
19
+ const pal: any = resolvedTheme?.palette ?? {};
20
+
21
+ // If raw CSS color (e.g. #fff, rgb(...), etc), return as is
22
+ if (/^#|^rgb\(|^hsl\(/i.test(token)) return token;
23
+
24
+ // If dot notation, try to resolve from palette (e.g., text.secondary)
25
+ if (token.includes('.')) {
26
+ const v = token.split('.').reduce<any>((acc, k) => (acc ? acc[k] : undefined), pal);
27
+ if (typeof v === 'string') return v;
28
+ if (v && typeof v === 'object') return v.main ?? v.default;
29
+ return undefined;
30
+ }
31
+
32
+ // Otherwise, try direct access (e.g., 'primary', 'secondary')
33
+ const v = pal[token];
34
+ if (typeof v === 'string') return v;
35
+ if (v && typeof v === 'object') return v.main ?? v.default;
36
+ return undefined;
37
+ }
38
+
39
+ export default resolveColorToken;
@@ -0,0 +1,12 @@
1
+ import { useCallback } from "react";
2
+ export function useCodeGen() {
3
+ const generate = useCallback(async (type: string, payload: any) => {
4
+ console.log(`[CodeGen] Request: ${type}`, payload);
5
+ // For now, fake output:
6
+ return `Generated mock output for: ${payload.prompt}`;
7
+ }, []);
8
+
9
+ return { generate };
10
+ }
11
+
12
+ export default useCodeGen;
@@ -0,0 +1,18 @@
1
+ // src/gui/hooks/useGuiMediaQuery.ts
2
+ import { useTheme } from '@mui/material/styles';
3
+ import useMediaQuery from '@mui/material/useMediaQuery';
4
+ /**
5
+ * Wrapper around MUI's useMediaQuery that accepts either a string or a function
6
+ * returning a string based on the theme. This allows using theme breakpoints
7
+ * easily within the media query.
8
+ *
9
+ * @param query - The media query string or a function that takes the theme and returns a string.
10
+ * @returns A boolean indicating whether the document matches the media query.
11
+ */
12
+ export function useGuiMediaQuery(query: string | ((theme: ReturnType<typeof useTheme>) => string)) {
13
+ const theme = useTheme();
14
+ const finalQuery = typeof query === 'function' ? query(theme) : query;
15
+ return useMediaQuery(finalQuery);
16
+ }
17
+
18
+ export default useGuiMediaQuery;
@@ -0,0 +1,18 @@
1
+ //@/gui/hooks/useTheme.ts
2
+ /**
3
+ * React hook wrapper for MUI's `useTheme`.
4
+ *
5
+ * This wrapper ensures consistent typing across your app by casting the returned theme
6
+ * as the expected MUI `Theme`. It allows your components to remain decoupled from direct MUI imports,
7
+ * making future migration or customization easier.
8
+ */
9
+ import { useTheme } from '@mui/material/styles';
10
+ import type { Theme } from '@mui/material/styles';
11
+ /**
12
+ * Returns the current theme typed as MUI's `Theme`.
13
+ */
14
+ export function useGuiTheme(): Theme {
15
+ return useTheme() as Theme;
16
+ }
17
+
18
+ export default useGuiTheme;
@@ -0,0 +1,26 @@
1
+ //@/gui/hooks/useInsets.ts
2
+ import { useContext } from 'react';
3
+ import { useGuiTheme } from '@/gui/hooks';
4
+ import { InsetsContext } from '@/gui/contexts';
5
+ /**
6
+ * Returns the current insets from the InsetsContext when available.
7
+ * Falls back to the theme's static layout insets if the provider is missing.
8
+ */
9
+ export function useInsets() {
10
+ const theme = useGuiTheme();
11
+ const context = useContext(InsetsContext);
12
+ if (context) return context.insets;
13
+ const fallback = theme.layout?.insets ?? { top: 0, right: 0, bottom: 0, left: 0 };
14
+ return { nav: 0, ...fallback };
15
+ }
16
+ /**
17
+ * Returns the updater function for insets, defaulting to a no-op if unavailable.
18
+ */
19
+ export function useUpdateInsets() {
20
+ const theme = useGuiTheme() as any;
21
+ const context = useContext(InsetsContext);
22
+ if (context) return context.updateInsets;
23
+ return typeof theme.updateInsets === 'function' ? theme.updateInsets : () => {};
24
+ }
25
+
26
+ export default useInsets;
@@ -0,0 +1,13 @@
1
+ //@/gui/hooks/useIsMobile.ts
2
+ import { useTheme } from '@mui/material/styles';
3
+ import useMediaQuery from '@mui/material/useMediaQuery';
4
+ /**
5
+ * Returns `true` if the viewport width is at or below the "sm" breakpoint (mobile).
6
+ * Abstracts the mobile detection logic away from MUI internals.
7
+ */
8
+ export function useIsMobile(): boolean {
9
+ const theme = useTheme();
10
+ return useMediaQuery(theme.breakpoints.down('sm'));
11
+ }
12
+
13
+ export default useIsMobile;
@@ -0,0 +1,25 @@
1
+ // src/gui/hooks/useIsTouchDevice.ts
2
+
3
+ /**
4
+ * useIsTouchDevice
5
+ * ---------------
6
+ * Hook that determines whether the current device supports touch events.
7
+ * Useful for adapting UI behavior depending on touch capabilities.
8
+ */
9
+
10
+ import { useEffect, useState } from 'react';
11
+
12
+ export function useIsTouchDevice(): boolean {
13
+ const [isTouch, setIsTouch] = useState(false);
14
+
15
+ useEffect(() => {
16
+ const hasTouchSupport =
17
+ typeof window !== 'undefined' &&
18
+ ('ontouchstart' in window || navigator.maxTouchPoints > 0);
19
+ setIsTouch(hasTouchSupport);
20
+ }, []);
21
+
22
+ return isTouch;
23
+ }
24
+
25
+ export default useIsTouchDevice;
@@ -0,0 +1,10 @@
1
+ import { useContext } from "react";
2
+
3
+ import { LeftSidebarContext } from "@/gui/contexts";
4
+ export const useLeftSidebar = () => {
5
+ const context = useContext(LeftSidebarContext);
6
+ if (!context) {
7
+ throw new Error('useLeftSidebar must be used within a SidebarProvider');
8
+ }
9
+ return context;
10
+ };
@@ -0,0 +1,12 @@
1
+ import { useContext } from 'react';
2
+ import { RightSidebarContext } from '@/gui/contexts';
3
+
4
+ export const useRightSidebar = () => {
5
+ const context = useContext(RightSidebarContext);
6
+ if (!context) {
7
+ throw new Error('useRightSidebar must be used within a RightSidebarProvider');
8
+ }
9
+ return context;
10
+ };
11
+
12
+ export default useRightSidebar;
@@ -0,0 +1,19 @@
1
+ //@/gui/hooks/useViewportKey.ts
2
+ /**
3
+ * Hook that returns the current viewport key ('xs', 'sm', 'md', 'lg', or 'xl')
4
+ * based on the browser's window.innerWidth and the theme's breakpoints.
5
+ * Useful for conditional rendering or styling based on screen size.
6
+ */
7
+ import { useTheme } from '@mui/material/styles';
8
+ export function useViewportKey(): 'xs' | 'sm' | 'md' | 'lg' | 'xl' {
9
+ const theme = useTheme();
10
+ const width = typeof window !== 'undefined' ? window.innerWidth : 0;
11
+ const breakpoints = theme.breakpoints.values;
12
+ if (width < breakpoints.sm) return 'xs';
13
+ if (width < breakpoints.md) return 'sm';
14
+ if (width < breakpoints.lg) return 'md';
15
+ if (width < breakpoints.xl) return 'lg';
16
+ return 'xl';
17
+ }
18
+
19
+ export default useViewportKey;
@@ -0,0 +1,17 @@
1
+ //@/gui/hooks/useViewportProp.ts
2
+ import { useTheme } from '@mui/material/styles';
3
+ import { resolveViewportProp } from '@/types/viewport';
4
+ /**
5
+ * useViewportProp allows you to pass responsive props as objects (e.g., { sm: 'value', md: 'value' })
6
+ * and resolves the appropriate value based on the current screen width and theme breakpoints.
7
+ * This helps in adapting component behavior or styling dynamically based on the viewport.
8
+ */
9
+ export function useViewportProp<T extends string | number | boolean | object>(
10
+ prop: T | Partial<Record<'xs' | 'sm' | 'md' | 'lg' | 'xl', T>> & { default?: T },
11
+ opts?: { widthOverride?: number }
12
+ ): T | undefined {
13
+ const theme = useTheme();
14
+ return resolveViewportProp(prop as any, theme, opts);
15
+ }
16
+
17
+ export default useViewportProp;
@@ -0,0 +1,31 @@
1
+ // src/components/me/meCore.ts
2
+ export type MeIdentity = { username: string; publicKey?: string; context?: string };
3
+
4
+ export const meCore = {
5
+ state: { identity: null as MeIdentity | null, initialized: false },
6
+
7
+ async init() {
8
+ let identity: MeIdentity | null = null;
9
+
10
+ try {
11
+ const res = await fetch("http://localhost:7070/who");
12
+ if (res.ok) identity = await res.json();
13
+ } catch (_) {
14
+ const stored = localStorage.getItem("this.me");
15
+ if (stored) identity = JSON.parse(stored);
16
+ }
17
+
18
+ if (!identity) {
19
+ identity = { username: "guest", context: "browser" };
20
+ localStorage.setItem("this.me", JSON.stringify(identity));
21
+ }
22
+
23
+ this.state.identity = identity;
24
+ this.state.initialized = true;
25
+ return identity;
26
+ },
27
+
28
+ who() {
29
+ return this.state.identity;
30
+ },
31
+ };
@@ -0,0 +1,8 @@
1
+ import Me from "./Me";
2
+
3
+ export default {
4
+ title: ".me",
5
+ component: Me,
6
+ };
7
+
8
+ export const Default = () => <Me/>;
@@ -0,0 +1,197 @@
1
+ // Floating .me component — draggable animated orb indicating active status
2
+ import { useState, useEffect, useRef } from "react";
3
+ import { Box } from "@mui/material";
4
+ import { GlobalStyles } from "@mui/system";
5
+ import VerbsBubbles from "./fundamentals/verbs/verbs";
6
+
7
+ function Me() {
8
+ const [open, setOpen] = useState(false);
9
+ const status = { active: true, error: false };
10
+ // Drag state
11
+ const dockPos = useRef({ x: window.innerWidth - 80, y: window.innerHeight - 80 });
12
+ const [pos, setPos] = useState(dockPos.current);
13
+ const [offset, setOffset] = useState({ x: 0, y: 0 });
14
+ const [dragging, setDragging] = useState(false);
15
+ const clickTimeout = useRef<number | null>(null);
16
+ const dragMoved = useRef(false);
17
+ /** ✅ Drag */
18
+ const handleMouseDown = (e: React.MouseEvent) => {
19
+ setDragging(true);
20
+ setOffset({ x: e.clientX - pos.x, y: e.clientY - pos.y });
21
+ dragMoved.current = false;
22
+ clickTimeout.current = Date.now();
23
+ };
24
+
25
+ const handleMouseMove = (e: MouseEvent) => {
26
+ if (!dragging) return;
27
+ if (Math.abs(e.clientX - pos.x) > 3 || Math.abs(e.clientY - pos.y) > 3) {
28
+ dragMoved.current = true;
29
+ }
30
+ setPos({ x: e.clientX - offset.x, y: e.clientY - offset.y });
31
+ };
32
+
33
+ const handleMouseUp = () => {
34
+ setDragging(false);
35
+ dragMoved.current = false;
36
+ };
37
+
38
+ useEffect(() => {
39
+ document.addEventListener("mousemove", handleMouseMove);
40
+ document.addEventListener("mouseup", handleMouseUp);
41
+ return () => {
42
+ document.removeEventListener("mousemove", handleMouseMove);
43
+ document.removeEventListener("mouseup", handleMouseUp);
44
+ };
45
+ });
46
+
47
+ useEffect(() => {
48
+ const handleResize = () => {
49
+ if (!dragging) {
50
+ dockPos.current = { x: window.innerWidth - 80, y: window.innerHeight - 80 };
51
+ setPos(dockPos.current);
52
+ }
53
+ };
54
+ window.addEventListener("resize", handleResize);
55
+ return () => window.removeEventListener("resize", handleResize);
56
+ }, [dragging]);
57
+
58
+ return (
59
+ <>
60
+ <GlobalStyles
61
+ styles={{
62
+ "@keyframes float": {
63
+ "0%,100%": { transform: "translateY(0) scale(1)", borderRadius: "50%" },
64
+ "25%": {
65
+ transform: "translateY(-6px) scale(1.05)",
66
+ borderRadius: "55% 45% 60% 40% / 60% 55% 45% 40%",
67
+ },
68
+ "50%": {
69
+ transform: "translateY(-8px) scale(1.1)",
70
+ borderRadius: "50% 60% 40% 55% / 55% 40% 60% 45%",
71
+ },
72
+ "75%": {
73
+ transform: "translateY(-6px) scale(1.05)",
74
+ borderRadius: "45% 55% 40% 60% / 40% 60% 55% 50%",
75
+ },
76
+ },
77
+ "@keyframes glow": {
78
+ "0%,100%": {
79
+ opacity: 0.3,
80
+ boxShadow: "0 0 4px rgba(255,255,255,0.2), 0 0 8px rgba(173,216,230,0.1)",
81
+ },
82
+ "50%": {
83
+ opacity: 0.5,
84
+ boxShadow: "0 0 6px rgba(255,255,255,0.3), 0 0 10px rgba(173,216,230,0.15)",
85
+ },
86
+ },
87
+ "@keyframes blobMove": {
88
+ "0%,100%": {
89
+ top: "15%",
90
+ left: "20%",
91
+ width: "65%",
92
+ height: "65%",
93
+ borderRadius: "60% 40% 55% 45% / 50% 60% 40% 50%",
94
+ filter: "blur(14px)",
95
+ },
96
+ "33%": {
97
+ top: "10%",
98
+ left: "25%",
99
+ width: "70%",
100
+ height: "70%",
101
+ borderRadius: "55% 60% 40% 45% / 45% 50% 60% 55%",
102
+ filter: "blur(18px)",
103
+ },
104
+ "66%": {
105
+ top: "18%",
106
+ left: "15%",
107
+ width: "60%",
108
+ height: "60%",
109
+ borderRadius: "50% 55% 45% 60% / 60% 50% 55% 40%",
110
+ filter: "blur(12px)",
111
+ },
112
+ },
113
+ }}
114
+ />
115
+
116
+ <Box
117
+ sx={{
118
+ position: "fixed",
119
+ left: pos.x,
120
+ top: pos.y,
121
+ width: 80,
122
+ height: 80,
123
+ pointerEvents: "none",
124
+ }}
125
+ >
126
+ <VerbsBubbles
127
+ verbs={["be", "have", "do", "relate", "communicate", "react", "at"]}
128
+ visible={open}
129
+ />
130
+ <Box
131
+ onClick={() => {
132
+ if (clickTimeout.current !== null) {
133
+ const elapsed = Date.now() - clickTimeout.current;
134
+ if (!dragging && !dragMoved.current && elapsed < 300) {
135
+ setOpen((prev) => !prev);
136
+ }
137
+ }
138
+ }}
139
+ onMouseDown={handleMouseDown}
140
+ sx={(theme) => ({
141
+ position: "absolute",
142
+ top: 10,
143
+ left: 10,
144
+ width: 60,
145
+ height: 60,
146
+ borderRadius: "50%",
147
+ background:
148
+ theme.palette.mode === "light"
149
+ ? "rgba(255,255,255,0.35)"
150
+ : "rgba(255,255,255,0.1)",
151
+ boxShadow:
152
+ !status.active || status.error
153
+ ? "0 0 0 3px #ff4d4d, 0 0 20px 6px rgba(255,0,0,0.6)"
154
+ : "0 0 0 3px #29bfff, 0 0 22px 6px rgba(0,200,255,0.6)",
155
+ border: !status.active || status.error ? "2.5px solid #ff1a1a" : "2.5px solid #9ff6ff",
156
+ display: "flex",
157
+ alignItems: "center",
158
+ justifyContent: "center",
159
+ fontSize: 26,
160
+ color: theme.palette.mode === "light" ? "#006699" : "#baf3ff",
161
+ cursor: "pointer",
162
+ userSelect: "none",
163
+ animation: "float 6s ease-in-out infinite, glow 4.5s ease-in-out infinite",
164
+ backdropFilter: "blur(10px) saturate(160%)",
165
+ pointerEvents: "auto",
166
+ "&::before": {
167
+ content: '""',
168
+ position: "absolute",
169
+ top: "15%",
170
+ left: "20%",
171
+ width: "65%",
172
+ height: "65%",
173
+ background:
174
+ theme.palette.mode === "light"
175
+ ? "radial-gradient(circle at 50% 50%, rgba(0,102,153,0.4) 0%, rgba(0,68,102,0) 70%)"
176
+ : "radial-gradient(circle at 50% 50%, rgba(120,240,255,0.3) 0%, rgba(173,216,230,0) 70%)",
177
+ filter: "blur(7px)",
178
+ borderRadius: "60% 40% 55% 45% / 50% 60% 40% 50%",
179
+ animation: "blobMove 8s ease-in-out infinite",
180
+ pointerEvents: "none",
181
+ mixBlendMode: "screen",
182
+ },
183
+ "&:hover": {
184
+ transform: "scale(1.08)",
185
+ },
186
+ })}
187
+ >
188
+
189
+ </Box>
190
+ </Box>
191
+
192
+ {/* Removed MeState modal for now */}
193
+ </>
194
+ );
195
+ }
196
+
197
+ export default Me;
@@ -0,0 +1,94 @@
1
+ import React from 'react';
2
+ import { Box } from '@mui/material';
3
+
4
+ interface VerbsProps {
5
+ verbs: string[];
6
+ visible?: boolean; // controls show/hide
7
+ radius?: number; // distance from center (default 60)
8
+ }
9
+
10
+ const orbit = `
11
+ @keyframes orbit {
12
+ 0% {
13
+ transform: rotate(0deg) translateX(var(--radius)) rotate(0deg);
14
+ }
15
+ 100% {
16
+ transform: rotate(360deg) translateX(var(--radius)) rotate(-360deg);
17
+ }
18
+ }
19
+ `;
20
+
21
+ const pulse = `
22
+ @keyframes pulse {
23
+ 0%, 100% {
24
+ box-shadow: 0 0 8px 2px rgba(0, 150, 255, 0.7);
25
+ transform: scale(1);
26
+ }
27
+ 50% {
28
+ box-shadow: 0 0 12px 4px rgba(0, 150, 255, 1);
29
+ transform: scale(1.1);
30
+ }
31
+ }
32
+ `;
33
+
34
+ const styleSheet = `
35
+ ${orbit}
36
+ ${pulse}
37
+ `;
38
+
39
+ const VerbsBubbles: React.FC<VerbsProps> = ({ verbs, visible = false, radius = 60 }) => {
40
+ console.log("🧠 Verbs active:", verbs);
41
+ if (!visible) return null;
42
+
43
+ const bubbleCount = verbs.length;
44
+ const angleStep = (2 * Math.PI) / bubbleCount;
45
+
46
+ return (
47
+ <>
48
+ <style>{styleSheet}</style>
49
+ {verbs.map((verb, i) => {
50
+ const angle = i * angleStep;
51
+ const x = Math.cos(angle) * radius;
52
+ const y = Math.sin(angle) * radius;
53
+ const emojiMap: Record<string, string> = {
54
+ be: "💫",
55
+ have: "📦",
56
+ do: "⚙️",
57
+ relate: "🔗",
58
+ communicate: "💬",
59
+ react: "⚡",
60
+ at: "📍",
61
+ };
62
+ const emoji = emojiMap[verb] || "⬤";
63
+
64
+ return (
65
+ <Box
66
+ key={verb}
67
+ sx={{
68
+ position: "absolute",
69
+ top: `calc(50% + ${y}px)`,
70
+ left: `calc(50% + ${x}px)`,
71
+ width: 20,
72
+ height: 20,
73
+ borderRadius: "50%",
74
+ display: "flex",
75
+ alignItems: "center",
76
+ justifyContent: "center",
77
+ background: "rgba(0,150,255,0.15)",
78
+ border: "1px solid rgba(0,150,255,0.4)",
79
+ color: "#9ff6ff",
80
+ fontSize: 12,
81
+ animation: "orbit 10s linear infinite, pulse 3s ease-in-out infinite",
82
+ transformOrigin: "center",
83
+ "--radius": `${radius}px`,
84
+ }}
85
+ >
86
+ {emoji}
87
+ </Box>
88
+ );
89
+ })}
90
+ </>
91
+ );
92
+ };
93
+
94
+ export default VerbsBubbles;
File without changes
File without changes
@@ -0,0 +1,27 @@
1
+ // Define types for complements used in verb actions
2
+ // within the Me component.
3
+ // Each complement can be direct or indirect,
4
+ // targeting specific objects or entities.
5
+ export type Complement = {
6
+ type: "direct" | "indirect";
7
+ target: string | string[];
8
+ description?: string;
9
+ };
10
+
11
+ export interface Complements {
12
+ direct?: Complement[];
13
+ indirect?: Complement[];
14
+ }
15
+
16
+ export function applyComplements(
17
+ verb: string,
18
+ complements: Complements
19
+ ) {
20
+ return {
21
+ verb,
22
+ action: {
23
+ direct: complements.direct?.map(c => c.target) ?? [],
24
+ indirect: complements.indirect?.map(c => c.target) ?? [],
25
+ },
26
+ };
27
+ }