this.gui 1.3.41 → 1.3.42

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 (310) hide show
  1. package/package.json +3 -2
  2. package/src/GUI.tsx +46 -0
  3. package/src/QRouter/QRegistry.tsx +53 -0
  4. package/src/QRouter/QRouter.stories.tsx +31 -0
  5. package/src/QRouter/QRouter.tsx +57 -0
  6. package/src/gui/Theme/GuiProvider.tsx +111 -0
  7. package/src/gui/Theme/Icon/Icon.resolver.tsx +29 -0
  8. package/src/gui/Theme/Icon/Icon.tsx +43 -0
  9. package/src/gui/Theme/Layout/Content/Content.resolver.tsx +0 -0
  10. package/src/gui/Theme/Layout/Content/Content.stories.tsx +88 -0
  11. package/src/gui/Theme/Layout/Content/Content.tsx +53 -0
  12. package/src/gui/Theme/Layout/Content/Content.types.tsx +40 -0
  13. package/src/gui/Theme/Layout/Footer/Footer.resolver.tsx +45 -0
  14. package/src/gui/Theme/Layout/Footer/Footer.stories.tsx +205 -0
  15. package/src/gui/Theme/Layout/Footer/Footer.tsx +337 -0
  16. package/src/gui/Theme/Layout/Footer/Footer.types.ts +40 -0
  17. package/src/gui/Theme/Layout/Layout/Layout.resolver.tsx +37 -0
  18. package/src/gui/Theme/Layout/Layout/Layout.stories.tsx +289 -0
  19. package/src/gui/Theme/Layout/Layout/Layout.tsx +117 -0
  20. package/src/gui/Theme/Layout/Layout/Layout.types.ts +57 -0
  21. package/src/gui/Theme/Layout/Layout/useLayoutBreakpoints.ts +9 -0
  22. package/src/gui/Theme/Layout/Namespace/Namespace.stories.tsx +105 -0
  23. package/src/gui/Theme/Layout/Namespace/Namespace.tsx +26 -0
  24. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/LeftSidebar.resolver.tsx +87 -0
  25. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/LeftSidebar.stories.tsx +199 -0
  26. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/LeftSidebar.tsx +311 -0
  27. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/LeftSidebar.types.ts +41 -0
  28. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/SidebarToggleButton.tsx +53 -0
  29. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarAction/LeftSidebarAction.resolver.tsx +19 -0
  30. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarAction/LeftSidebarAction.tsx +107 -0
  31. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarLink/LeftSidebarLink.resolver.tsx +0 -0
  32. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarLink/LeftSidebarLink.tsx +134 -0
  33. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarLink/LeftSidebarLink.types.ts +15 -0
  34. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarMenu/LeftSidebarMenu.tsx +142 -0
  35. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarToggleButton/LeftSidebarToggleButton.tsx +23 -0
  36. package/src/gui/Theme/Layout/Sidebars/RightSidebar/RightSidebar.resolver.tsx +35 -0
  37. package/src/gui/Theme/Layout/Sidebars/RightSidebar/RightSidebar.stories.tsx +239 -0
  38. package/src/gui/Theme/Layout/Sidebars/RightSidebar/RightSidebar.tsx +319 -0
  39. package/src/gui/Theme/Layout/Sidebars/RightSidebar/RightSidebar.types.ts +17 -0
  40. package/src/gui/Theme/Layout/Sidebars/RightSidebar/components/RightSidebarAction/RightSidebarAction.tsx +102 -0
  41. package/src/gui/Theme/Layout/Sidebars/RightSidebar/components/RightSidebarLink/RightSidebarLink.tsx +132 -0
  42. package/src/gui/Theme/Layout/Sidebars/RightSidebar/components/RightSidebarMenu/RightSidebarMenu.tsx +140 -0
  43. package/src/gui/Theme/Layout/Sidebars/RightSidebar/components/RightSidebarToggleButton/RightSidebarToggleButton.tsx +22 -0
  44. package/src/gui/Theme/Layout/StickyOptions/StickyOptionsTop.stories.tsx +469 -0
  45. package/src/gui/Theme/Layout/StickyOptions/StickyOptionsTop.tsx +489 -0
  46. package/src/gui/Theme/Layout/TopBar/TopBar.resolver.tsx +86 -0
  47. package/src/gui/Theme/Layout/TopBar/TopBar.stories.tsx +350 -0
  48. package/src/gui/Theme/Layout/TopBar/TopBar.tsx +292 -0
  49. package/src/gui/Theme/Layout/TopBar/TopBar.types.ts +39 -0
  50. package/src/gui/Theme/Layout/TopBar/components/TopBarAction/TopBarAction.stories.tsx +83 -0
  51. package/src/gui/Theme/Layout/TopBar/components/TopBarAction/TopBarAction.tsx +18 -0
  52. package/src/gui/Theme/Layout/TopBar/components/TopBarAction/TopBarAction.types.ts +4 -0
  53. package/src/gui/Theme/Layout/TopBar/components/TopBarLink/TopBarLink.stories.tsx +189 -0
  54. package/src/gui/Theme/Layout/TopBar/components/TopBarLink/TopBarLink.tsx +30 -0
  55. package/src/gui/Theme/Layout/TopBar/components/TopBarLink/TopBarLink.types.ts +9 -0
  56. package/src/gui/Theme/Layout/TopBar/components/TopBarMenu/TopBarMenu.resolver.tsx +14 -0
  57. package/src/gui/Theme/Layout/TopBar/components/TopBarMenu/TopBarMenu.stories.tsx +56 -0
  58. package/src/gui/Theme/Layout/TopBar/components/TopBarMenu/TopBarMenu.tsx +123 -0
  59. package/src/gui/Theme/Layout/TopBar/components/TopBarMenu/TopBarMenu.types.ts +44 -0
  60. package/src/gui/Theme/catalog/CherryByte/CherryByte.png +0 -0
  61. package/src/gui/Theme/catalog/CherryByte/dark.tokens.ts +47 -0
  62. package/src/gui/Theme/catalog/CherryByte/light.tokens.ts +47 -0
  63. package/src/gui/Theme/catalog/CherryByte/manifest.ts +24 -0
  64. package/src/gui/Theme/catalog/GhostShell/dark.tokens.ts +43 -0
  65. package/src/gui/Theme/catalog/GhostShell/ghost.png +0 -0
  66. package/src/gui/Theme/catalog/GhostShell/light.tokens.ts +39 -0
  67. package/src/gui/Theme/catalog/GhostShell/manifest.ts +24 -0
  68. package/src/gui/Theme/catalog/LunaHex/LunaHex.png +0 -0
  69. package/src/gui/Theme/catalog/LunaHex/dark.tokens.ts +34 -0
  70. package/src/gui/Theme/catalog/LunaHex/light.tokens.ts +74 -0
  71. package/src/gui/Theme/catalog/LunaHex/manifest.ts +24 -0
  72. package/src/gui/Theme/catalog/MUI/MUI.png +0 -0
  73. package/src/gui/Theme/catalog/MUI/dark.tokens.ts +58 -0
  74. package/src/gui/Theme/catalog/MUI/light.tokens.ts +74 -0
  75. package/src/gui/Theme/catalog/MUI/manifest.ts +24 -0
  76. package/src/gui/Theme/catalog/PrinceOfDarkness/dark.tokens.ts +48 -0
  77. package/src/gui/Theme/catalog/PrinceOfDarkness/light.tokens.ts +47 -0
  78. package/src/gui/Theme/catalog/PrinceOfDarkness/manifest.ts +24 -0
  79. package/src/gui/Theme/catalog/PrinceOfDarkness/prince.png +0 -0
  80. package/src/gui/Theme/catalog/PrinceOfDarkness/princeOfDarkness.png +0 -0
  81. package/src/gui/Theme/catalog/Seafoam/dark.tokens.ts +49 -0
  82. package/src/gui/Theme/catalog/Seafoam/light.tokens.ts +47 -0
  83. package/src/gui/Theme/catalog/Seafoam/manifest.ts +24 -0
  84. package/src/gui/Theme/catalog/Seafoam/seaFoam.png +0 -0
  85. package/src/gui/Theme/catalog/neurons/dark.tokens.ts +58 -0
  86. package/src/gui/Theme/catalog/neurons/light.tokens.ts +74 -0
  87. package/src/gui/Theme/catalog/neurons/manifest.ts +24 -0
  88. package/src/gui/Theme/catalog/neurons/neurons.me.png +0 -0
  89. package/src/gui/Theme/fromTokens.ts +272 -0
  90. package/src/gui/Theme/gui.css +31 -0
  91. package/src/gui/Theme/index.ts +17 -0
  92. package/src/gui/Theme/styles/buildShadows.ts +83 -0
  93. package/src/gui/Theme/styles/theme.tokens.ts +108 -0
  94. package/src/gui/Theme/utils/catalog.ts +61 -0
  95. package/src/gui/Theme/utils/persistence.ts +66 -0
  96. package/src/gui/Theme/utils/themeUtils.ts +34 -0
  97. package/src/gui/components/atoms/AppBar/AppBar.resolver.tsx +46 -0
  98. package/src/gui/components/atoms/AppBar/AppBar.stories.tsx +251 -0
  99. package/src/gui/components/atoms/AppBar/AppBar.tsx +107 -0
  100. package/src/gui/components/atoms/AppBar/AppBar.types.ts +28 -0
  101. package/src/gui/components/atoms/Avatar/Avatar.resolver.tsx +61 -0
  102. package/src/gui/components/atoms/Avatar/Avatar.stories.tsx +36 -0
  103. package/src/gui/components/atoms/Avatar/Avatar.tsx +14 -0
  104. package/src/gui/components/atoms/Box/Box.resolver.tsx +171 -0
  105. package/src/gui/components/atoms/Box/Box.stories.tsx +263 -0
  106. package/src/gui/components/atoms/Box/Box.tsx +15 -0
  107. package/src/gui/components/atoms/Button/Button.resolver.tsx +103 -0
  108. package/src/gui/components/atoms/Button/Button.stories.tsx +219 -0
  109. package/src/gui/components/atoms/Button/Button.tsx +40 -0
  110. package/src/gui/components/atoms/Card/Card.resolver.tsx +63 -0
  111. package/src/gui/components/atoms/Card/Card.stories.tsx +54 -0
  112. package/src/gui/components/atoms/Card/Card.tsx +13 -0
  113. package/src/gui/components/atoms/CardActions/CardActions.resolver.tsx +59 -0
  114. package/src/gui/components/atoms/CardActions/CardActions.stories.tsx +32 -0
  115. package/src/gui/components/atoms/CardActions/CardActions.tsx +14 -0
  116. package/src/gui/components/atoms/CardContent/CardContent.resolver.tsx +60 -0
  117. package/src/gui/components/atoms/CardContent/CardContent.stories.tsx +34 -0
  118. package/src/gui/components/atoms/CardContent/CardContent.tsx +13 -0
  119. package/src/gui/components/atoms/CardHeader/CardHeader.resolver.tsx +68 -0
  120. package/src/gui/components/atoms/CardHeader/CardHeader.stories.tsx +40 -0
  121. package/src/gui/components/atoms/CardHeader/CardHeader.tsx +12 -0
  122. package/src/gui/components/atoms/Collapse/Collapse.resolver.tsx +85 -0
  123. package/src/gui/components/atoms/Collapse/Collapse.stories.tsx +130 -0
  124. package/src/gui/components/atoms/Collapse/Collapse.tsx +17 -0
  125. package/src/gui/components/atoms/Divider/Divider.resolver.tsx +95 -0
  126. package/src/gui/components/atoms/Divider/Divider.stories.tsx +108 -0
  127. package/src/gui/components/atoms/Divider/Divider.tsx +14 -0
  128. package/src/gui/components/atoms/Drawer/Drawer.resolver.tsx +116 -0
  129. package/src/gui/components/atoms/Drawer/Drawer.stories.tsx +223 -0
  130. package/src/gui/components/atoms/Drawer/Drawer.tsx +25 -0
  131. package/src/gui/components/atoms/Grid/Grid.resolver.tsx +33 -0
  132. package/src/gui/components/atoms/Grid/Grid.stories.tsx +136 -0
  133. package/src/gui/components/atoms/Grid/Grid.tsx +15 -0
  134. package/src/gui/components/atoms/Grid/Grid.types.ts +9 -0
  135. package/src/gui/components/atoms/IconButton/IconButton.resolver.tsx +137 -0
  136. package/src/gui/components/atoms/IconButton/IconButton.stories.tsx +134 -0
  137. package/src/gui/components/atoms/IconButton/IconButton.tsx +22 -0
  138. package/src/gui/components/atoms/Link/Link.resolver.tsx +74 -0
  139. package/src/gui/components/atoms/Link/Link.stories.tsx +157 -0
  140. package/src/gui/components/atoms/Link/Link.tsx +36 -0
  141. package/src/gui/components/atoms/List/List.resolver.tsx +94 -0
  142. package/src/gui/components/atoms/List/List.stories.tsx +137 -0
  143. package/src/gui/components/atoms/List/List.tsx +20 -0
  144. package/src/gui/components/atoms/ListItem/ListItem.resolver.tsx +88 -0
  145. package/src/gui/components/atoms/ListItem/ListItem.stories.tsx +151 -0
  146. package/src/gui/components/atoms/ListItem/ListItem.tsx +19 -0
  147. package/src/gui/components/atoms/ListItemButton/ListItemButton.resolver.tsx +214 -0
  148. package/src/gui/components/atoms/ListItemButton/ListItemButton.stories.tsx +155 -0
  149. package/src/gui/components/atoms/ListItemButton/ListItemButton.tsx +15 -0
  150. package/src/gui/components/atoms/ListItemIcon/ListItemIcon.resolver.tsx +102 -0
  151. package/src/gui/components/atoms/ListItemIcon/ListItemIcon.stories.tsx +132 -0
  152. package/src/gui/components/atoms/ListItemIcon/ListItemIcon.tsx +11 -0
  153. package/src/gui/components/atoms/ListItemText/ListItemText.resolver.tsx +112 -0
  154. package/src/gui/components/atoms/ListItemText/ListItemText.stories.tsx +156 -0
  155. package/src/gui/components/atoms/ListItemText/ListItemText.tsx +15 -0
  156. package/src/gui/components/atoms/Menu/Menu.resolver.tsx +112 -0
  157. package/src/gui/components/atoms/Menu/Menu.stories.tsx +162 -0
  158. package/src/gui/components/atoms/Menu/Menu.tsx +17 -0
  159. package/src/gui/components/atoms/MenuItem/MenuItem.resolver.tsx +183 -0
  160. package/src/gui/components/atoms/MenuItem/MenuItem.stories.tsx +134 -0
  161. package/src/gui/components/atoms/MenuItem/MenuItem.tsx +14 -0
  162. package/src/gui/components/atoms/Paper/Paper.resolver.tsx +98 -0
  163. package/src/gui/components/atoms/Paper/Paper.stories.tsx +184 -0
  164. package/src/gui/components/atoms/Paper/Paper.tsx +15 -0
  165. package/src/gui/components/atoms/Section/Section.resolver.tsx +10 -0
  166. package/src/gui/components/atoms/Section/Section.stories.tsx +189 -0
  167. package/src/gui/components/atoms/Section/Section.tsx +76 -0
  168. package/src/gui/components/atoms/Section/Section.types.tsx +24 -0
  169. package/src/gui/components/atoms/Stack/Stack.resolver.tsx +94 -0
  170. package/src/gui/components/atoms/Stack/Stack.stories.tsx +160 -0
  171. package/src/gui/components/atoms/Stack/Stack.tsx +15 -0
  172. package/src/gui/components/atoms/Surface/Surface.resolver.tsx +37 -0
  173. package/src/gui/components/atoms/Surface/Surface.tsx +49 -0
  174. package/src/gui/components/atoms/Surface/Surface.types.ts +20 -0
  175. package/src/gui/components/atoms/Switch/Switch.resolver.tsx +53 -0
  176. package/src/gui/components/atoms/Switch/Switch.stories.tsx +236 -0
  177. package/src/gui/components/atoms/Switch/Switch.tsx +22 -0
  178. package/src/gui/components/atoms/Table/Body/TableBody.tsx +7 -0
  179. package/src/gui/components/atoms/Table/Cell/TableCell.tsx +18 -0
  180. package/src/gui/components/atoms/Table/Head/TableHead.tsx +9 -0
  181. package/src/gui/components/atoms/Table/Row/TableRow.tsx +20 -0
  182. package/src/gui/components/atoms/Table/Table.resolver.tsx +77 -0
  183. package/src/gui/components/atoms/Table/Table.stories.tsx +173 -0
  184. package/src/gui/components/atoms/Table/Table.tsx +20 -0
  185. package/src/gui/components/atoms/TextField/TextField.stories.tsx +25 -0
  186. package/src/gui/components/atoms/TextField/TextField.tsx +15 -0
  187. package/src/gui/components/atoms/Toolbar/Toolbar.resolver.tsx +60 -0
  188. package/src/gui/components/atoms/Toolbar/Toolbar.stories.tsx +155 -0
  189. package/src/gui/components/atoms/Toolbar/Toolbar.tsx +16 -0
  190. package/src/gui/components/atoms/Tooltip/Tooltip.resolver.tsx +142 -0
  191. package/src/gui/components/atoms/Tooltip/Tooltip.stories.tsx +117 -0
  192. package/src/gui/components/atoms/Tooltip/Tooltip.tsx +70 -0
  193. package/src/gui/components/atoms/Typography/Typography.resolver.tsx +158 -0
  194. package/src/gui/components/atoms/Typography/Typography.stories.tsx +222 -0
  195. package/src/gui/components/atoms/Typography/Typography.tsx +27 -0
  196. package/src/gui/components/atoms/Window/Nodes/node.ts +0 -0
  197. package/src/gui/components/atoms/Window/code/block/node.tsx +0 -0
  198. package/src/gui/components/atoms/Window/code/hugging.face.api.ts +11 -0
  199. package/src/gui/components/atoms/Window/connectors/index.ts +19 -0
  200. package/src/gui/components/atoms/Window/window.stories.tsx +20 -0
  201. package/src/gui/components/atoms/Window/window.tsx +636 -0
  202. package/src/gui/components/atoms/atoms.tsx +151 -0
  203. package/src/gui/components/atoms/index.ts +2 -0
  204. package/src/gui/components/generics/Cards/Gridme.jsx +52 -0
  205. package/src/gui/components/generics/Cards/LilBox.jsx +65 -0
  206. package/src/gui/components/generics/Cards/ModuleCard.jsx +106 -0
  207. package/src/gui/components/generics/Chats/FullChatBot.jsx +223 -0
  208. package/src/gui/components/generics/Code/CodeBlock.jsx +33 -0
  209. package/src/gui/components/generics/EmojiCursor/EmojiCursor.stories.tsx +153 -0
  210. package/src/gui/components/generics/EmojiCursor/EmojiCursor.tsx +23 -0
  211. package/src/gui/components/generics/Feedback/Callout.jsx +92 -0
  212. package/src/gui/components/generics/Layout/GridX.jsx +29 -0
  213. package/src/gui/components/generics/Layout/Hero2.jsx +132 -0
  214. package/src/gui/components/generics/Layout/PageContainer.jsx +29 -0
  215. package/src/gui/components/generics/Layout/PageDivider.jsx +20 -0
  216. package/src/gui/components/generics/Layout/Section.jsx +43 -0
  217. package/src/gui/components/generics/Layout/SectionHeader.jsx +21 -0
  218. package/src/gui/components/generics/Media/Img.jsx +58 -0
  219. package/src/gui/components/generics/Media/VideoEmbed.jsx +51 -0
  220. package/src/gui/components/generics/Organization/TableOfContents.jsx +51 -0
  221. package/src/gui/components/generics/Organization/Tabs.jsx +45 -0
  222. package/src/gui/components/generics/Text/TextList.jsx +41 -0
  223. package/src/gui/components/generics/Text/TextParagraph.jsx +28 -0
  224. package/src/gui/components/generics/Text/TextQuote.jsx +23 -0
  225. package/src/gui/components/generics/Text/TextTitle.jsx +44 -0
  226. package/src/gui/components/molecules/Dialog/Dialog.stories.tsx +18 -0
  227. package/src/gui/components/molecules/Dialog/Dialog.tsx +5 -0
  228. package/src/gui/components/molecules/Hero/Hero.stories.tsx +140 -0
  229. package/src/gui/components/molecules/Hero/Hero.tsx +152 -0
  230. package/src/gui/components/molecules/Hero/Hero.types.tsx +18 -0
  231. package/src/gui/components/molecules/Modal/Modal.resolver.tsx +38 -0
  232. package/src/gui/components/molecules/Modal/Modal.stories.tsx +82 -0
  233. package/src/gui/components/molecules/Modal/Modal.tsx +110 -0
  234. package/src/gui/components/molecules/Modal/Modal.types.ts +29 -0
  235. package/src/gui/components/molecules/Page/Page.stories.tsx +135 -0
  236. package/src/gui/components/molecules/Page/Page.tsx +94 -0
  237. package/src/gui/components/molecules/Theme/ThemeModeToggle/ThemeModeToggle.resolver.tsx +58 -0
  238. package/src/gui/components/molecules/Theme/ThemeModeToggle/ThemeModeToggle.stories.tsx +133 -0
  239. package/src/gui/components/molecules/Theme/ThemeModeToggle/ThemeModeToggle.tsx +101 -0
  240. package/src/gui/components/molecules/Theme/ThemeModeToggle/ThemeModeToggle.types.ts +29 -0
  241. package/src/gui/components/molecules/Theme/ThemesCatalog/ThemesCatalog.resolver.tsx +15 -0
  242. package/src/gui/components/molecules/Theme/ThemesCatalog/ThemesCatalog.stories.tsx +88 -0
  243. package/src/gui/components/molecules/Theme/ThemesCatalog/ThemesCatalog.tsx +167 -0
  244. package/src/gui/components/molecules/Theme/ThemesCatalog/ThemesCatalog.types.ts +34 -0
  245. package/src/gui/components/molecules/molecules.ts +49 -0
  246. package/src/gui/components/organisms/Blockchain/Blocks/BlocksTable.tsx +119 -0
  247. package/src/gui/components/organisms/Blockchain/Usernames/Identities.stories.tsx +20 -0
  248. package/src/gui/components/organisms/Blockchain/Usernames/QR.tsx +566 -0
  249. package/src/gui/components/organisms/Blockchain/Usernames/Usernames.tsx +448 -0
  250. package/src/gui/components/organisms/Blockchain/Usernames/identities.tsx +710 -0
  251. package/src/gui/components/organisms/Blockchain/blockchain.stories.tsx +17 -0
  252. package/src/gui/components/organisms/Blockchain/blockchain.tsx +368 -0
  253. package/src/gui/components/organisms/Blockchain/scripts/connection.ts +82 -0
  254. package/src/gui/components/organisms/Blockchain/scripts/match_face.ts +143 -0
  255. package/src/gui/components/organisms/HighLighter/HighLighter.stories.tsx +168 -0
  256. package/src/gui/components/organisms/HighLighter/HighLighter.tsx +420 -0
  257. package/src/gui/components/organisms/HighLighter/HighLightsDrawer.tsx +197 -0
  258. package/src/gui/components/organisms/IdentityNoise/FaceRecognition/FaceRecognition.stories.tsx +312 -0
  259. package/src/gui/components/organisms/IdentityNoise/FaceRecognition/FaceRecognition.tsx +765 -0
  260. package/src/gui/components/organisms/IdentityNoise/FaceRecognition/modules/useFaceCameraPermission.ts +70 -0
  261. package/src/gui/components/organisms/IdentityNoise/FaceRecognition/modules/useFaceLandmarker.ts +106 -0
  262. package/src/gui/components/organisms/IdentityNoise/FaceRecognition/modules/useFaceOverlay.ts +489 -0
  263. package/src/gui/components/organisms/IdentityNoise/FaceRecognition/modules/useFaceTemplate.ts +32 -0
  264. package/src/gui/components/organisms/IdentityNoise/FaceRecognition/modules/useFaceTemplateBurst.ts +178 -0
  265. package/src/gui/components/organisms/IdentityNoise/FaceRecognition/modules/verifyTemplate.ts +136 -0
  266. package/src/gui/components/organisms/IdentityNoise/IdentityNoise.tsx +403 -0
  267. package/src/gui/components/organisms/IdentityNoise/IndentityNoise.stories.tsx +15 -0
  268. package/src/gui/components/organisms/IdentityNoise/Noise/Noise.stories.tsx +206 -0
  269. package/src/gui/components/organisms/IdentityNoise/Noise/Noise.tsx +394 -0
  270. package/src/gui/components/organisms/IdentityNoise/Triad/QR.tsx +566 -0
  271. package/src/gui/components/organisms/IdentityNoise/Triad/Tiad.stories.tsx +6 -0
  272. package/src/gui/components/organisms/IdentityNoise/Triad/Triad.tsx +917 -0
  273. package/src/gui/components/organisms/IdentityNoise/Triad/handleCleak.ts +0 -0
  274. package/src/gui/components/organisms/IdentityNoise/Triad/identity.ts +31 -0
  275. package/src/gui/components/organisms/IdentityNoise/Triad/me/fundamentals/vectors/vectors.tsx +252 -0
  276. package/src/gui/components/organisms/IdentityNoise/Triad/me/me.stories.tsx +314 -0
  277. package/src/gui/components/organisms/IdentityNoise/Triad/me/me.tsx +0 -0
  278. package/src/gui/components/organisms/organisms.ts +15 -0
  279. package/src/gui/contexts/InsetsContext.tsx +40 -0
  280. package/src/gui/contexts/LeftSidebarContext.tsx +20 -0
  281. package/src/gui/contexts/RightSidebarContext.tsx +25 -0
  282. package/src/gui/contexts/ThemeContext.ts +34 -0
  283. package/src/gui/contexts/index.ts +4 -0
  284. package/src/gui/hooks/index.ts +11 -0
  285. package/src/gui/hooks/resolveColorToken.ts +39 -0
  286. package/src/gui/hooks/useCodeGen.ts +12 -0
  287. package/src/gui/hooks/useGuiMediaQuery.ts +18 -0
  288. package/src/gui/hooks/useGuiTheme.ts +18 -0
  289. package/src/gui/hooks/useInsets.ts +26 -0
  290. package/src/gui/hooks/useIsMobile.ts +13 -0
  291. package/src/gui/hooks/useIsTouchDevice.ts +25 -0
  292. package/src/gui/hooks/useLeftSidebar.ts +10 -0
  293. package/src/gui/hooks/useRightSidebar.ts +12 -0
  294. package/src/gui/hooks/useViewportKey.ts +19 -0
  295. package/src/gui/hooks/useViewportProp.ts +17 -0
  296. package/src/gui/registry/GuiRegistry.ts +19 -0
  297. package/src/gui/registry/factory.ts +12 -0
  298. package/src/gui/registry/index.ts +3 -0
  299. package/src/gui/registry/types.ts +6 -0
  300. package/src/gui/utils/nodeID.ts +11 -0
  301. package/src/registry/GuiRegistry.ts +19 -0
  302. package/src/stories/01.Home.mdx +22 -0
  303. package/src/stories/02.Understanding.This.GUI.mdx +149 -0
  304. package/src/stories/Theme/Palette.stories.tsx +86 -0
  305. package/src/stories/Theme/ThemeViewer.stories.tsx +91 -0
  306. package/src/stories/Theme/Typography.stories.jsx +211 -0
  307. package/src/stories/assets/this.GUI.png +0 -0
  308. package/src/types/gui.d.ts +67 -0
  309. package/src/types/theme.d.ts +191 -0
  310. package/src/types/viewport.ts +132 -0
@@ -0,0 +1,77 @@
1
+ // src/gui/components/atoms/Table/Table.resolver.tsx
2
+ import * as React from 'react';
3
+ import type { RegistryEntry, ResolveCtx } from '@/gui/registry/types';
4
+ import { ensureNodeId } from '@/gui/utils/nodeID';
5
+ import type { SxProps, Theme } from '@mui/material/styles';
6
+ import Table from './Table';
7
+
8
+ /**
9
+ * Declarative spec for Table
10
+ *
11
+ * Notes
12
+ * - Wraps MUI's Table. Polymorphic.
13
+ * - Supports `sx` and common passthrough props.
14
+ * - Use `id` / `data-gui-id` for editor instrumentation.
15
+ */
16
+ export type TableSpec = {
17
+ type: 'Table';
18
+ props?: {
19
+ children?: React.ReactNode;
20
+
21
+ // Common Table props (subset; rest is passthrough)
22
+ component?: any;
23
+ as?: any; // alias
24
+ size?: 'small' | 'medium';
25
+ padding?: 'default' | 'checkbox' | 'none';
26
+ stickyHeader?: boolean;
27
+
28
+ // Styling
29
+ sx?: SxProps<Theme>;
30
+
31
+ // Instrumentation / misc
32
+ id?: string;
33
+ className?: string;
34
+ 'data-testid'?: string;
35
+ 'data-gui-id'?: string;
36
+
37
+ // Allow arbitrary passthrough
38
+ [key: string]: any;
39
+ };
40
+ };
41
+
42
+ const TableResolver: RegistryEntry = {
43
+ type: 'Table',
44
+ resolve(spec: TableSpec, _ctx?: ResolveCtx) {
45
+ const p = spec.props ?? {};
46
+
47
+ const {
48
+ children,
49
+ sx,
50
+ id,
51
+ className,
52
+ as: _as,
53
+ component: componentProp,
54
+ 'data-gui-id': dataGuiIdProp,
55
+ ...rest
56
+ } = p as any;
57
+
58
+ const component = componentProp ?? _as;
59
+ const tableId = ensureNodeId('table', dataGuiIdProp ?? id);
60
+
61
+ return (
62
+ <Table
63
+ component={component}
64
+ id={tableId}
65
+ className={className}
66
+ sx={sx}
67
+ data-testid={p['data-testid']}
68
+ data-gui-id={tableId}
69
+ {...rest}
70
+ >
71
+ {children}
72
+ </Table>
73
+ );
74
+ },
75
+ };
76
+
77
+ export default TableResolver;
@@ -0,0 +1,173 @@
1
+ import * as React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import Table from './Table';
4
+ import { Box,
5
+ TableHead,
6
+ TableRow,
7
+ TableCell,
8
+ TableBody,
9
+ Typography } from '@/gui/components/atoms';
10
+
11
+ const meta: Meta<typeof Table> = {
12
+ title: 'Atoms/DataDisplay/Table',
13
+ component: Table,
14
+ tags: ['autodocs'],
15
+ decorators: [
16
+ (Story) => (
17
+ <div style={{ padding: 16, minHeight: 260, maxWidth: 920 }}>
18
+ <Story />
19
+ </div>
20
+ ),
21
+ ],
22
+ parameters: {
23
+ docs: {
24
+ description: {
25
+ component: `
26
+ The **Table** atom is a thin wrapper around MUI's \`Table\`.
27
+ It preserves MUI props and typing (faithful to the original), and fits naturally into This.GUI's declarative/resolver pattern.
28
+
29
+ ---
30
+ ## Features
31
+ - Fully preserves MUI Table API and typing.
32
+ - Supports \`sx\` styling via the system.
33
+ - Works with other Table atoms: \`TableHead\`, \`TableBody\`, \`TableRow\`, \`TableCell\`.
34
+ - Can be described declaratively via the **TableResolver**.
35
+
36
+ ---
37
+ ## Basic usage (React)
38
+ ~~~tsx
39
+ import { Table, TableHead, TableBody, TableRow, TableCell } from '@/gui/components/atoms';
40
+
41
+ <Table size="small">
42
+ <TableHead>
43
+ <TableRow>
44
+ <TableCell>ID</TableCell>
45
+ <TableCell>Name</TableCell>
46
+ </TableRow>
47
+ </TableHead>
48
+ <TableBody>
49
+ <TableRow>
50
+ <TableCell>1</TableCell>
51
+ <TableCell>Alice</TableCell>
52
+ </TableRow>
53
+ </TableBody>
54
+ </Table>
55
+ ~~~
56
+
57
+ ---
58
+ ## Declarative JSON / Resolver
59
+ ~~~json
60
+ {
61
+ "type": "Table",
62
+ "props": {
63
+ "size": "small",
64
+ "sx": { "minWidth": 420 },
65
+ "children": [
66
+ { "type": "TableHead", "props": { "children": { "type": "TableRow", "props": { "children": [
67
+ { "type": "TableCell", "props": { "children": "ID" } },
68
+ { "type": "TableCell", "props": { "children": "Name" } }
69
+ ]}}}},
70
+ { "type": "TableBody", "props": { "children": { "type": "TableRow", "props": { "children": [
71
+ { "type": "TableCell", "props": { "children": 1 } },
72
+ { "type": "TableCell", "props": { "children": "Alice" } }
73
+ ]}}}}
74
+ ]
75
+ }
76
+ }
77
+ ~~~
78
+ `,
79
+ },
80
+ },
81
+ },
82
+ argTypes: {
83
+ size: { control: { type: 'radio' }, options: ['small', 'medium'] },
84
+ padding: { control: { type: 'select' }, options: ['default', 'checkbox', 'none'] },
85
+ stickyHeader: { control: { type: 'boolean' } },
86
+ sx: { control: 'object' },
87
+ component: { table: { disable: true } },
88
+ },
89
+ args: {
90
+ size: 'small',
91
+ padding: 'default' as any, // MUI's types allow 'normal' depending on version; keep story loose
92
+ stickyHeader: false,
93
+ sx: {},
94
+ },
95
+ };
96
+
97
+ export default meta;
98
+ type Story = StoryObj<typeof Table>;
99
+
100
+ const DemoTable: React.FC<React.ComponentProps<typeof Table>> = (props) => {
101
+ return (
102
+ <Box
103
+ sx={{
104
+ border: '1px solid',
105
+ borderColor: 'divider',
106
+ borderRadius: 2,
107
+ overflow: 'hidden',
108
+ bgcolor: 'background.paper',
109
+ }}
110
+ >
111
+ <Table {...props}>
112
+ {props.children ?? (
113
+ <>
114
+ <TableHead>
115
+ <TableRow sx={{ background: 'background.nav' }}>
116
+ <TableCell>
117
+ <Typography fontWeight={700}>ID</Typography>
118
+ </TableCell>
119
+ <TableCell>
120
+ <Typography fontWeight={700}>Name</Typography>
121
+ </TableCell>
122
+ <TableCell align="right">
123
+ <Typography fontWeight={700}>Score</Typography>
124
+ </TableCell>
125
+ </TableRow>
126
+ </TableHead>
127
+ <TableBody>
128
+ {[
129
+ { id: 1, name: 'Alice', score: 98 },
130
+ { id: 2, name: 'Bob', score: 84 },
131
+ { id: 3, name: 'Charlie', score: 91 },
132
+ ].map((row) => (
133
+ <TableRow key={row.id} hover>
134
+ <TableCell>{row.id}</TableCell>
135
+ <TableCell>{row.name}</TableCell>
136
+ <TableCell align="right">{row.score}</TableCell>
137
+ </TableRow>
138
+ ))}
139
+ </TableBody>
140
+ </>
141
+ )}
142
+ </Table>
143
+ </Box>
144
+ );
145
+ };
146
+
147
+ export const Playground: Story = {
148
+ render: (args) => <DemoTable {...args} />,
149
+ };
150
+
151
+ export const MediumSize: Story = {
152
+ args: { size: 'medium' },
153
+ render: (args) => <DemoTable {...args} />,
154
+ };
155
+
156
+ export const StickyHeader: Story = {
157
+ args: { stickyHeader: true, sx: { minWidth: 520 } },
158
+ render: (args) => (
159
+ <Box sx={{ maxHeight: 180, overflow: 'auto', border: '1px solid', borderColor: 'divider', borderRadius: 2 }}>
160
+ <DemoTable {...args} />
161
+ </Box>
162
+ ),
163
+ };
164
+
165
+ export const DensePaddingNone: Story = {
166
+ args: { padding: 'none' as any, size: 'small' },
167
+ render: (args) => <DemoTable {...args} />,
168
+ };
169
+
170
+ export const WithSx: Story = {
171
+ args: { sx: { minWidth: 640 } },
172
+ render: (args) => <DemoTable {...args} />,
173
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * This.GUI — Table
3
+ * Thin wrapper that preserves MUI's own typing and API.
4
+ *
5
+ * Examples:
6
+ * <Table size="small">
7
+ * ...
8
+ * </Table>
9
+ *
10
+ * Notes:
11
+ * - Preserves polymorphism and full MUI Table props.
12
+ * - Integrates into This.GUI namespace and resolver pattern.
13
+ */
14
+ import * as React from 'react';
15
+ import MuiTable from '@mui/material/Table';
16
+ // Re-export using MUI's own component type to keep full typing
17
+ const Table = MuiTable;
18
+ export type TableProps = React.ComponentProps<typeof Table>;
19
+ (Table as any).displayName = 'Gui.Table';
20
+ export default Table;
@@ -0,0 +1,25 @@
1
+ import TextField from "./TextField";
2
+ import { Stack } from "@/gui/components/atoms";
3
+
4
+ export default {
5
+ title: "Atoms/Elements/TextField",
6
+ component: TextField,
7
+ parameters: {
8
+ layout: "centered",
9
+ },
10
+ };
11
+
12
+ export const Variants = () => (
13
+ <Stack spacing={2} sx={{ width: 400 }}>
14
+ <TextField label="Default" variant="outlined" placeholder="Type something..." />
15
+ <TextField label="Filled" variant="filled" placeholder="Type something..." />
16
+ <TextField label="Standard" variant="standard" placeholder="Type something..." />
17
+ <TextField
18
+ label="Multiline"
19
+ variant="outlined"
20
+ multiline
21
+ rows={4}
22
+ placeholder="Write a long message..."
23
+ />
24
+ </Stack>
25
+ );
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This.GUI — TextField (polymorphic)
3
+ * Wrapper that keeps MUI's typing, including full prop support.
4
+ * Examples:
5
+ * <TextField label="Name" variant="outlined" />
6
+ * <TextField multiline rows={4} placeholder="Write something..." />
7
+ */
8
+ import MuiTextField from '@mui/material/TextField';
9
+ import * as React from 'react';
10
+
11
+ // Re-export using MUI's own component type
12
+ const TextField = MuiTextField;
13
+ export type TextFieldProps = React.ComponentProps<typeof TextField>;
14
+ (TextField as any).displayName = 'Gui.TextField';
15
+ export default TextField;
@@ -0,0 +1,60 @@
1
+ // src/gui/atoms/Toolbar/Toolbar.resolver.tsx
2
+ import * as React from 'react';
3
+ import Toolbar from './Toolbar';
4
+ import type { RegistryEntry } from '@/gui/registry/types';
5
+ import type { SxProps, Theme } from '@mui/material/styles';
6
+ import { ensureNodeId } from '@/gui/utils/nodeID';
7
+
8
+ type ToolbarSpec = {
9
+ type: 'Toolbar';
10
+ props?: {
11
+ /** Children content (text or nodes) */
12
+ children?: React.ReactNode;
13
+
14
+ /** MUI props */
15
+ variant?: 'regular' | 'dense';
16
+ disableGutters?: boolean;
17
+
18
+ /** Styling / misc */
19
+ sx?: SxProps<Theme>;
20
+ id?: string;
21
+ className?: string;
22
+ 'data-testid'?: string;
23
+ };
24
+ };
25
+
26
+ /**
27
+ * ToolbarResolver
28
+ * - Maps JSON-friendly spec → <Toolbar /> props.
29
+ * - Accepts sx/id/className for styling and test hooks.
30
+ */
31
+ const ToolbarResolver: RegistryEntry = {
32
+ type: 'Toolbar',
33
+ resolve(spec: ToolbarSpec) {
34
+ const p = spec.props ?? {};
35
+ const {
36
+ children,
37
+ variant,
38
+ disableGutters,
39
+ sx,
40
+ className,
41
+ } = p;
42
+
43
+ const id = ensureNodeId('Toolbar', p.id);
44
+
45
+ return (
46
+ <Toolbar
47
+ variant={variant}
48
+ disableGutters={disableGutters}
49
+ sx={sx}
50
+ id={id}
51
+ className={className}
52
+ data-testid={p['data-testid']}
53
+ >
54
+ {children}
55
+ </Toolbar>
56
+ );
57
+ },
58
+ };
59
+
60
+ export default ToolbarResolver;
@@ -0,0 +1,155 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ // Atoms used in the examples
3
+ import { Toolbar, AppBar, Box, IconButton, Typography, Button } from '@/gui/components/atoms';
4
+ import Icon from '@/gui/Theme/Icon/Icon';
5
+
6
+ // ======================= Meta =======================
7
+ const meta: Meta<typeof Toolbar> = {
8
+ title: 'Atoms/Containers/Toolbar',
9
+ component: Toolbar,
10
+ tags: ['autodocs'],
11
+ decorators: [
12
+ (Story) => (
13
+ <div style={{ padding: 16, minHeight: 240 }}>
14
+ <Story />
15
+ </div>
16
+ ),
17
+ ],
18
+ parameters: {
19
+ docs: {
20
+ description: {
21
+ component: `
22
+ The **Toolbar** atom is a thin wrapper over MUI's \`MuiToolbar\`.
23
+
24
+ > **Not polymorphic.** Unlike \`Button\` or \`Box\`, **Toolbar does not accept** a \`component\` prop in MUI. If you need a different semantic element (e.g. \`<header>\`), wrap it with \`<Box component="header">\`.
25
+
26
+ ---
27
+ ## Features
28
+ - Density via \`variant\`: \`'regular'\` | \`'dense'\`.
29
+ - Optional gutters removal with \`disableGutters\`.
30
+ - Full **\`sx\`** support for styling.
31
+ - Plays nicely inside **AppBar** and custom layouts.
32
+
33
+ ---
34
+ ## Key Props
35
+ - \`variant?: 'regular' | 'dense'\`
36
+ - \`disableGutters?: boolean\`
37
+ - \`sx?: SxProps\` — theme-aware styling.
38
+
39
+ ---
40
+ ## Basic usage
41
+ ~~~tsx
42
+ import { Toolbar } from '@/gui/atoms';
43
+
44
+ <Toolbar>
45
+ <span>Left content</span>
46
+ </Toolbar>
47
+ ~~~
48
+
49
+ ## In an AppBar
50
+ ~~~tsx
51
+ import { AppBar, Toolbar, Typography } from '@/gui/atoms';
52
+
53
+ <AppBar position="static">
54
+ <Toolbar>
55
+ <Typography variant="h6">Title</Typography>
56
+ </Toolbar>
57
+ </AppBar>
58
+ ~~~
59
+
60
+ ## Change semantic element with Box
61
+ ~~~tsx
62
+ import { Box, Toolbar } from '@/gui/atoms';
63
+
64
+ <Box component="header">
65
+ <Toolbar variant="dense">Compact header</Toolbar>
66
+ </Box>
67
+ ~~~
68
+ `,
69
+ },
70
+ },
71
+ controls: {
72
+ exclude: ['component']
73
+ },
74
+ },
75
+ argTypes: {
76
+ variant: {
77
+ control: { type: 'radio' },
78
+ options: ['regular', 'dense'],
79
+ },
80
+ disableGutters: { control: 'boolean' },
81
+ // Toolbar is not polymorphic in MUI, so hide any notion of `component`
82
+ },
83
+ args: {
84
+ variant: 'regular',
85
+ disableGutters: false,
86
+ children: (
87
+ <div style={{ display: 'flex', width: '100%', alignItems: 'center', gap: 12 }}>
88
+ <strong>Toolbar content</strong>
89
+ </div>
90
+ ),
91
+ },
92
+ };
93
+ export default meta;
94
+
95
+ type Story = StoryObj<typeof Toolbar>;
96
+
97
+ // ======================= Stories =======================
98
+ export const Playground: Story = {};
99
+
100
+ export const DenseVsRegular: Story = {
101
+ render: () => (
102
+ <div style={{ display: 'grid', gap: 12 }}>
103
+ <Toolbar>
104
+ <Typography variant="body2">Regular Toolbar</Typography>
105
+ </Toolbar>
106
+ <Toolbar variant="dense">
107
+ <Typography variant="body2">Dense Toolbar</Typography>
108
+ </Toolbar>
109
+ </div>
110
+ ),
111
+ };
112
+
113
+ export const WithActions: Story = {
114
+ render: () => (
115
+ <Toolbar sx={{ display: 'flex', gap: 8 }}>
116
+ <Typography sx={{ flex: 1 }} variant="h6">Title</Typography>
117
+ <IconButton aria-label="search">
118
+ <Icon name="search" fontSize={20} />
119
+ </IconButton>
120
+ <IconButton aria-label="user">
121
+ <Icon name="person" fontSize={20} />
122
+ </IconButton>
123
+ <Button variant="contained" size="small">Action</Button>
124
+ </Toolbar>
125
+ ),
126
+ };
127
+
128
+ export const InAppBar: Story = {
129
+ render: () => (
130
+ <AppBar position="static">
131
+ <Toolbar>
132
+ <Typography variant="h6" sx={{ flex: 1 }}>App Bar + Toolbar</Typography>
133
+ <Button color="inherit" size="small">Login</Button>
134
+ </Toolbar>
135
+ </AppBar>
136
+ ),
137
+ };
138
+
139
+ export const WrappedInHeader: Story = {
140
+ render: () => (
141
+ <Box component="header" sx={{ border: '1px solid', borderColor: 'divider' }}>
142
+ <Toolbar variant="dense">
143
+ <Typography variant="body2">Header Toolbar (wrapped by Box)</Typography>
144
+ </Toolbar>
145
+ </Box>
146
+ ),
147
+ };
148
+
149
+ export const WithCustomSx: Story = {
150
+ render: () => (
151
+ <Toolbar sx={{ bgcolor: 'background.paper', border: '1px dashed', borderColor: 'divider', borderRadius: 1 }}>
152
+ <Typography variant="body2">Styled with sx</Typography>
153
+ </Toolbar>
154
+ ),
155
+ };
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+ import MuiToolbar from '@mui/material/Toolbar';
3
+ /**
4
+ * This.GUI — Toolbar atom
5
+ * Thin wrapper around MUI's Toolbar so consumers import from "@/gui/atoms"
6
+ * instead of "@mui/material". This keeps the engine swappable.
7
+ *
8
+ * Notes:
9
+ * - We type props from MuiToolbar to preserve its full API (incl. `component`, `sx`, etc.).
10
+ * - Ref is HTMLDivElement, matching the default DOM element Toolbar renders.
11
+ */
12
+ export type ToolbarProps = React.ComponentProps<typeof MuiToolbar>;
13
+ const Toolbar = React.forwardRef<HTMLDivElement, ToolbarProps>(function Toolbar(props, ref) {
14
+ return <MuiToolbar ref={ref} {...props} />;});
15
+ (Toolbar as any).displayName = 'Gui.Toolbar';
16
+ export default Toolbar;
@@ -0,0 +1,142 @@
1
+ import * as React from 'react';
2
+ import Tooltip from './Tooltip';
3
+ import type { SxProps, Theme } from '@mui/material/styles';
4
+ import { ensureNodeId } from '@/gui/utils/nodeID';
5
+ import type { RegistryEntry, ResolveCtx } from '@/gui/registry/types';
6
+
7
+ /**
8
+ * Tooltip — Resolver
9
+ * --------------------------------------------------
10
+ * Declarative spec → live <Tooltip /> with correct props.
11
+ * Supports nested declarative children via ctx.render when available.
12
+ */
13
+ export type TooltipSpec = {
14
+ type: 'Tooltip';
15
+ props?: {
16
+ // Content
17
+ title?: React.ReactNode | string; // required by MUI; we default if missing
18
+ children?: React.ReactNode | any; // can be a nested spec object
19
+
20
+ // Behavior
21
+ placement?:
22
+ | 'bottom-end' | 'bottom-start' | 'bottom'
23
+ | 'left-end' | 'left-start' | 'left'
24
+ | 'right-end' | 'right-start' | 'right'
25
+ | 'top-end' | 'top-start' | 'top';
26
+ arrow?: boolean;
27
+ followCursor?: boolean;
28
+ enterDelay?: number;
29
+ enterNextDelay?: number;
30
+ enterTouchDelay?: number;
31
+ leaveDelay?: number;
32
+ leaveTouchDelay?: number;
33
+ disableFocusListener?: boolean;
34
+ disableHoverListener?: boolean;
35
+ disableInteractive?: boolean;
36
+ disableTouchListener?: boolean;
37
+ open?: boolean; // controlled mode
38
+
39
+ // Styling / test ids
40
+ sx?: SxProps<Theme>;
41
+ id?: string;
42
+ className?: string;
43
+ 'data-testid'?: string;
44
+ 'data-gui-id'?: string;
45
+ };
46
+ };
47
+
48
+ const TooltipResolver: RegistryEntry = {
49
+ type: 'Tooltip',
50
+ resolve(spec: TooltipSpec, ctx?: ResolveCtx) {
51
+ const p = spec.props ?? {};
52
+ const guiId = ensureNodeId('Tooltip', (p as any)['data-gui-id']);
53
+
54
+ // Resolve child: if a nested spec is provided and we have a renderer in ctx, use it.
55
+ let childCandidate: any = (spec.props?.children ?? (spec.props as any)?.child) as any;
56
+ if (!React.isValidElement(childCandidate) && childCandidate && typeof childCandidate === 'object' && ctx?.render) {
57
+ childCandidate = ctx.render(childCandidate);
58
+ }
59
+
60
+ // Tooltip expects exactly ONE ReactElement child. Coerce anything else into an element.
61
+ let childEl: React.ReactElement;
62
+ if (React.isValidElement(childCandidate)) {
63
+ childEl = childCandidate as React.ReactElement;
64
+ } else if (
65
+ typeof childCandidate === 'string' ||
66
+ typeof childCandidate === 'number' ||
67
+ typeof childCandidate === 'bigint'
68
+ ) {
69
+ childEl = <span>{String(childCandidate)}</span>;
70
+ } else if (childCandidate) {
71
+ // Arrays, iterables, true/false, portals, promises, etc. → wrap safely
72
+ childEl = <span>{childCandidate as any}</span>;
73
+ } else {
74
+ // No child provided → harmless inline element to satisfy MUI contract
75
+ childEl = <span style={{ display: 'inline-block', width: 0, height: 0 }} />;
76
+ }
77
+
78
+ let titleNode: React.ReactNode = p.title;
79
+ if (titleNode && !React.isValidElement(titleNode) && typeof titleNode === 'object' && ctx?.render) {
80
+ titleNode = ctx.render(titleNode as any);
81
+ }
82
+ if (typeof titleNode === 'undefined' || titleNode === null) {
83
+ titleNode = '';
84
+ }
85
+
86
+ const {
87
+ // remove resolver-only keys
88
+ id,
89
+ className,
90
+ sx,
91
+ placement,
92
+ arrow,
93
+ followCursor,
94
+ enterDelay,
95
+ enterNextDelay,
96
+ enterTouchDelay,
97
+ leaveDelay,
98
+ leaveTouchDelay,
99
+ disableFocusListener,
100
+ disableHoverListener,
101
+ disableInteractive,
102
+ disableTouchListener,
103
+ open,
104
+ // keep title out, we already computed titleNode
105
+ title: _title,
106
+ // also remove our custom id
107
+ ['data-gui-id']: _dataGuiId,
108
+ // and remove the alias 'child' if present
109
+ child: _child,
110
+ ...rest
111
+ } = p as any;
112
+
113
+ return (
114
+ <Tooltip
115
+ title={titleNode}
116
+ placement={placement}
117
+ arrow={arrow}
118
+ followCursor={followCursor}
119
+ enterDelay={enterDelay}
120
+ enterNextDelay={enterNextDelay}
121
+ enterTouchDelay={enterTouchDelay}
122
+ leaveDelay={leaveDelay}
123
+ leaveTouchDelay={leaveTouchDelay}
124
+ disableFocusListener={disableFocusListener}
125
+ disableHoverListener={disableHoverListener}
126
+ disableInteractive={disableInteractive}
127
+ disableTouchListener={disableTouchListener}
128
+ open={open}
129
+ sx={sx}
130
+ id={id}
131
+ className={className}
132
+ data-testid={(p as any)['data-testid']}
133
+ data-gui-id={guiId}
134
+ {...rest}
135
+ >
136
+ {childEl}
137
+ </Tooltip>
138
+ );
139
+ },
140
+ };
141
+
142
+ export default TooltipResolver;