this.gui 1.3.40 → 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 (319) hide show
  1. package/dist/init/index.html +27 -0
  2. package/dist/init/package-lock.json +5779 -0
  3. package/dist/init/package.json +24 -0
  4. package/dist/init/src/App.tsx +40 -0
  5. package/dist/init/src/index.css +16 -0
  6. package/dist/init/src/main.tsx +13 -0
  7. package/dist/init/src/router/DerivableRouter.tsx +36 -0
  8. package/dist/init/tsconfig.json +17 -0
  9. package/dist/init/vite.config.ts +11 -0
  10. package/package.json +5 -3
  11. package/src/GUI.tsx +46 -0
  12. package/src/QRouter/QRegistry.tsx +53 -0
  13. package/src/QRouter/QRouter.stories.tsx +31 -0
  14. package/src/QRouter/QRouter.tsx +57 -0
  15. package/src/gui/Theme/GuiProvider.tsx +111 -0
  16. package/src/gui/Theme/Icon/Icon.resolver.tsx +29 -0
  17. package/src/gui/Theme/Icon/Icon.tsx +43 -0
  18. package/src/gui/Theme/Layout/Content/Content.resolver.tsx +0 -0
  19. package/src/gui/Theme/Layout/Content/Content.stories.tsx +88 -0
  20. package/src/gui/Theme/Layout/Content/Content.tsx +53 -0
  21. package/src/gui/Theme/Layout/Content/Content.types.tsx +40 -0
  22. package/src/gui/Theme/Layout/Footer/Footer.resolver.tsx +45 -0
  23. package/src/gui/Theme/Layout/Footer/Footer.stories.tsx +205 -0
  24. package/src/gui/Theme/Layout/Footer/Footer.tsx +337 -0
  25. package/src/gui/Theme/Layout/Footer/Footer.types.ts +40 -0
  26. package/src/gui/Theme/Layout/Layout/Layout.resolver.tsx +37 -0
  27. package/src/gui/Theme/Layout/Layout/Layout.stories.tsx +289 -0
  28. package/src/gui/Theme/Layout/Layout/Layout.tsx +117 -0
  29. package/src/gui/Theme/Layout/Layout/Layout.types.ts +57 -0
  30. package/src/gui/Theme/Layout/Layout/useLayoutBreakpoints.ts +9 -0
  31. package/src/gui/Theme/Layout/Namespace/Namespace.stories.tsx +105 -0
  32. package/src/gui/Theme/Layout/Namespace/Namespace.tsx +26 -0
  33. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/LeftSidebar.resolver.tsx +87 -0
  34. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/LeftSidebar.stories.tsx +199 -0
  35. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/LeftSidebar.tsx +311 -0
  36. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/LeftSidebar.types.ts +41 -0
  37. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/SidebarToggleButton.tsx +53 -0
  38. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarAction/LeftSidebarAction.resolver.tsx +19 -0
  39. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarAction/LeftSidebarAction.tsx +107 -0
  40. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarLink/LeftSidebarLink.resolver.tsx +0 -0
  41. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarLink/LeftSidebarLink.tsx +134 -0
  42. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarLink/LeftSidebarLink.types.ts +15 -0
  43. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarMenu/LeftSidebarMenu.tsx +142 -0
  44. package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarToggleButton/LeftSidebarToggleButton.tsx +23 -0
  45. package/src/gui/Theme/Layout/Sidebars/RightSidebar/RightSidebar.resolver.tsx +35 -0
  46. package/src/gui/Theme/Layout/Sidebars/RightSidebar/RightSidebar.stories.tsx +239 -0
  47. package/src/gui/Theme/Layout/Sidebars/RightSidebar/RightSidebar.tsx +319 -0
  48. package/src/gui/Theme/Layout/Sidebars/RightSidebar/RightSidebar.types.ts +17 -0
  49. package/src/gui/Theme/Layout/Sidebars/RightSidebar/components/RightSidebarAction/RightSidebarAction.tsx +102 -0
  50. package/src/gui/Theme/Layout/Sidebars/RightSidebar/components/RightSidebarLink/RightSidebarLink.tsx +132 -0
  51. package/src/gui/Theme/Layout/Sidebars/RightSidebar/components/RightSidebarMenu/RightSidebarMenu.tsx +140 -0
  52. package/src/gui/Theme/Layout/Sidebars/RightSidebar/components/RightSidebarToggleButton/RightSidebarToggleButton.tsx +22 -0
  53. package/src/gui/Theme/Layout/StickyOptions/StickyOptionsTop.stories.tsx +469 -0
  54. package/src/gui/Theme/Layout/StickyOptions/StickyOptionsTop.tsx +489 -0
  55. package/src/gui/Theme/Layout/TopBar/TopBar.resolver.tsx +86 -0
  56. package/src/gui/Theme/Layout/TopBar/TopBar.stories.tsx +350 -0
  57. package/src/gui/Theme/Layout/TopBar/TopBar.tsx +292 -0
  58. package/src/gui/Theme/Layout/TopBar/TopBar.types.ts +39 -0
  59. package/src/gui/Theme/Layout/TopBar/components/TopBarAction/TopBarAction.stories.tsx +83 -0
  60. package/src/gui/Theme/Layout/TopBar/components/TopBarAction/TopBarAction.tsx +18 -0
  61. package/src/gui/Theme/Layout/TopBar/components/TopBarAction/TopBarAction.types.ts +4 -0
  62. package/src/gui/Theme/Layout/TopBar/components/TopBarLink/TopBarLink.stories.tsx +189 -0
  63. package/src/gui/Theme/Layout/TopBar/components/TopBarLink/TopBarLink.tsx +30 -0
  64. package/src/gui/Theme/Layout/TopBar/components/TopBarLink/TopBarLink.types.ts +9 -0
  65. package/src/gui/Theme/Layout/TopBar/components/TopBarMenu/TopBarMenu.resolver.tsx +14 -0
  66. package/src/gui/Theme/Layout/TopBar/components/TopBarMenu/TopBarMenu.stories.tsx +56 -0
  67. package/src/gui/Theme/Layout/TopBar/components/TopBarMenu/TopBarMenu.tsx +123 -0
  68. package/src/gui/Theme/Layout/TopBar/components/TopBarMenu/TopBarMenu.types.ts +44 -0
  69. package/src/gui/Theme/catalog/CherryByte/CherryByte.png +0 -0
  70. package/src/gui/Theme/catalog/CherryByte/dark.tokens.ts +47 -0
  71. package/src/gui/Theme/catalog/CherryByte/light.tokens.ts +47 -0
  72. package/src/gui/Theme/catalog/CherryByte/manifest.ts +24 -0
  73. package/src/gui/Theme/catalog/GhostShell/dark.tokens.ts +43 -0
  74. package/src/gui/Theme/catalog/GhostShell/ghost.png +0 -0
  75. package/src/gui/Theme/catalog/GhostShell/light.tokens.ts +39 -0
  76. package/src/gui/Theme/catalog/GhostShell/manifest.ts +24 -0
  77. package/src/gui/Theme/catalog/LunaHex/LunaHex.png +0 -0
  78. package/src/gui/Theme/catalog/LunaHex/dark.tokens.ts +34 -0
  79. package/src/gui/Theme/catalog/LunaHex/light.tokens.ts +74 -0
  80. package/src/gui/Theme/catalog/LunaHex/manifest.ts +24 -0
  81. package/src/gui/Theme/catalog/MUI/MUI.png +0 -0
  82. package/src/gui/Theme/catalog/MUI/dark.tokens.ts +58 -0
  83. package/src/gui/Theme/catalog/MUI/light.tokens.ts +74 -0
  84. package/src/gui/Theme/catalog/MUI/manifest.ts +24 -0
  85. package/src/gui/Theme/catalog/PrinceOfDarkness/dark.tokens.ts +48 -0
  86. package/src/gui/Theme/catalog/PrinceOfDarkness/light.tokens.ts +47 -0
  87. package/src/gui/Theme/catalog/PrinceOfDarkness/manifest.ts +24 -0
  88. package/src/gui/Theme/catalog/PrinceOfDarkness/prince.png +0 -0
  89. package/src/gui/Theme/catalog/PrinceOfDarkness/princeOfDarkness.png +0 -0
  90. package/src/gui/Theme/catalog/Seafoam/dark.tokens.ts +49 -0
  91. package/src/gui/Theme/catalog/Seafoam/light.tokens.ts +47 -0
  92. package/src/gui/Theme/catalog/Seafoam/manifest.ts +24 -0
  93. package/src/gui/Theme/catalog/Seafoam/seaFoam.png +0 -0
  94. package/src/gui/Theme/catalog/neurons/dark.tokens.ts +58 -0
  95. package/src/gui/Theme/catalog/neurons/light.tokens.ts +74 -0
  96. package/src/gui/Theme/catalog/neurons/manifest.ts +24 -0
  97. package/src/gui/Theme/catalog/neurons/neurons.me.png +0 -0
  98. package/src/gui/Theme/fromTokens.ts +272 -0
  99. package/src/gui/Theme/gui.css +31 -0
  100. package/src/gui/Theme/index.ts +17 -0
  101. package/src/gui/Theme/styles/buildShadows.ts +83 -0
  102. package/src/gui/Theme/styles/theme.tokens.ts +108 -0
  103. package/src/gui/Theme/utils/catalog.ts +61 -0
  104. package/src/gui/Theme/utils/persistence.ts +66 -0
  105. package/src/gui/Theme/utils/themeUtils.ts +34 -0
  106. package/src/gui/components/atoms/AppBar/AppBar.resolver.tsx +46 -0
  107. package/src/gui/components/atoms/AppBar/AppBar.stories.tsx +251 -0
  108. package/src/gui/components/atoms/AppBar/AppBar.tsx +107 -0
  109. package/src/gui/components/atoms/AppBar/AppBar.types.ts +28 -0
  110. package/src/gui/components/atoms/Avatar/Avatar.resolver.tsx +61 -0
  111. package/src/gui/components/atoms/Avatar/Avatar.stories.tsx +36 -0
  112. package/src/gui/components/atoms/Avatar/Avatar.tsx +14 -0
  113. package/src/gui/components/atoms/Box/Box.resolver.tsx +171 -0
  114. package/src/gui/components/atoms/Box/Box.stories.tsx +263 -0
  115. package/src/gui/components/atoms/Box/Box.tsx +15 -0
  116. package/src/gui/components/atoms/Button/Button.resolver.tsx +103 -0
  117. package/src/gui/components/atoms/Button/Button.stories.tsx +219 -0
  118. package/src/gui/components/atoms/Button/Button.tsx +40 -0
  119. package/src/gui/components/atoms/Card/Card.resolver.tsx +63 -0
  120. package/src/gui/components/atoms/Card/Card.stories.tsx +54 -0
  121. package/src/gui/components/atoms/Card/Card.tsx +13 -0
  122. package/src/gui/components/atoms/CardActions/CardActions.resolver.tsx +59 -0
  123. package/src/gui/components/atoms/CardActions/CardActions.stories.tsx +32 -0
  124. package/src/gui/components/atoms/CardActions/CardActions.tsx +14 -0
  125. package/src/gui/components/atoms/CardContent/CardContent.resolver.tsx +60 -0
  126. package/src/gui/components/atoms/CardContent/CardContent.stories.tsx +34 -0
  127. package/src/gui/components/atoms/CardContent/CardContent.tsx +13 -0
  128. package/src/gui/components/atoms/CardHeader/CardHeader.resolver.tsx +68 -0
  129. package/src/gui/components/atoms/CardHeader/CardHeader.stories.tsx +40 -0
  130. package/src/gui/components/atoms/CardHeader/CardHeader.tsx +12 -0
  131. package/src/gui/components/atoms/Collapse/Collapse.resolver.tsx +85 -0
  132. package/src/gui/components/atoms/Collapse/Collapse.stories.tsx +130 -0
  133. package/src/gui/components/atoms/Collapse/Collapse.tsx +17 -0
  134. package/src/gui/components/atoms/Divider/Divider.resolver.tsx +95 -0
  135. package/src/gui/components/atoms/Divider/Divider.stories.tsx +108 -0
  136. package/src/gui/components/atoms/Divider/Divider.tsx +14 -0
  137. package/src/gui/components/atoms/Drawer/Drawer.resolver.tsx +116 -0
  138. package/src/gui/components/atoms/Drawer/Drawer.stories.tsx +223 -0
  139. package/src/gui/components/atoms/Drawer/Drawer.tsx +25 -0
  140. package/src/gui/components/atoms/Grid/Grid.resolver.tsx +33 -0
  141. package/src/gui/components/atoms/Grid/Grid.stories.tsx +136 -0
  142. package/src/gui/components/atoms/Grid/Grid.tsx +15 -0
  143. package/src/gui/components/atoms/Grid/Grid.types.ts +9 -0
  144. package/src/gui/components/atoms/IconButton/IconButton.resolver.tsx +137 -0
  145. package/src/gui/components/atoms/IconButton/IconButton.stories.tsx +134 -0
  146. package/src/gui/components/atoms/IconButton/IconButton.tsx +22 -0
  147. package/src/gui/components/atoms/Link/Link.resolver.tsx +74 -0
  148. package/src/gui/components/atoms/Link/Link.stories.tsx +157 -0
  149. package/src/gui/components/atoms/Link/Link.tsx +36 -0
  150. package/src/gui/components/atoms/List/List.resolver.tsx +94 -0
  151. package/src/gui/components/atoms/List/List.stories.tsx +137 -0
  152. package/src/gui/components/atoms/List/List.tsx +20 -0
  153. package/src/gui/components/atoms/ListItem/ListItem.resolver.tsx +88 -0
  154. package/src/gui/components/atoms/ListItem/ListItem.stories.tsx +151 -0
  155. package/src/gui/components/atoms/ListItem/ListItem.tsx +19 -0
  156. package/src/gui/components/atoms/ListItemButton/ListItemButton.resolver.tsx +214 -0
  157. package/src/gui/components/atoms/ListItemButton/ListItemButton.stories.tsx +155 -0
  158. package/src/gui/components/atoms/ListItemButton/ListItemButton.tsx +15 -0
  159. package/src/gui/components/atoms/ListItemIcon/ListItemIcon.resolver.tsx +102 -0
  160. package/src/gui/components/atoms/ListItemIcon/ListItemIcon.stories.tsx +132 -0
  161. package/src/gui/components/atoms/ListItemIcon/ListItemIcon.tsx +11 -0
  162. package/src/gui/components/atoms/ListItemText/ListItemText.resolver.tsx +112 -0
  163. package/src/gui/components/atoms/ListItemText/ListItemText.stories.tsx +156 -0
  164. package/src/gui/components/atoms/ListItemText/ListItemText.tsx +15 -0
  165. package/src/gui/components/atoms/Menu/Menu.resolver.tsx +112 -0
  166. package/src/gui/components/atoms/Menu/Menu.stories.tsx +162 -0
  167. package/src/gui/components/atoms/Menu/Menu.tsx +17 -0
  168. package/src/gui/components/atoms/MenuItem/MenuItem.resolver.tsx +183 -0
  169. package/src/gui/components/atoms/MenuItem/MenuItem.stories.tsx +134 -0
  170. package/src/gui/components/atoms/MenuItem/MenuItem.tsx +14 -0
  171. package/src/gui/components/atoms/Paper/Paper.resolver.tsx +98 -0
  172. package/src/gui/components/atoms/Paper/Paper.stories.tsx +184 -0
  173. package/src/gui/components/atoms/Paper/Paper.tsx +15 -0
  174. package/src/gui/components/atoms/Section/Section.resolver.tsx +10 -0
  175. package/src/gui/components/atoms/Section/Section.stories.tsx +189 -0
  176. package/src/gui/components/atoms/Section/Section.tsx +76 -0
  177. package/src/gui/components/atoms/Section/Section.types.tsx +24 -0
  178. package/src/gui/components/atoms/Stack/Stack.resolver.tsx +94 -0
  179. package/src/gui/components/atoms/Stack/Stack.stories.tsx +160 -0
  180. package/src/gui/components/atoms/Stack/Stack.tsx +15 -0
  181. package/src/gui/components/atoms/Surface/Surface.resolver.tsx +37 -0
  182. package/src/gui/components/atoms/Surface/Surface.tsx +49 -0
  183. package/src/gui/components/atoms/Surface/Surface.types.ts +20 -0
  184. package/src/gui/components/atoms/Switch/Switch.resolver.tsx +53 -0
  185. package/src/gui/components/atoms/Switch/Switch.stories.tsx +236 -0
  186. package/src/gui/components/atoms/Switch/Switch.tsx +22 -0
  187. package/src/gui/components/atoms/Table/Body/TableBody.tsx +7 -0
  188. package/src/gui/components/atoms/Table/Cell/TableCell.tsx +18 -0
  189. package/src/gui/components/atoms/Table/Head/TableHead.tsx +9 -0
  190. package/src/gui/components/atoms/Table/Row/TableRow.tsx +20 -0
  191. package/src/gui/components/atoms/Table/Table.resolver.tsx +77 -0
  192. package/src/gui/components/atoms/Table/Table.stories.tsx +173 -0
  193. package/src/gui/components/atoms/Table/Table.tsx +20 -0
  194. package/src/gui/components/atoms/TextField/TextField.stories.tsx +25 -0
  195. package/src/gui/components/atoms/TextField/TextField.tsx +15 -0
  196. package/src/gui/components/atoms/Toolbar/Toolbar.resolver.tsx +60 -0
  197. package/src/gui/components/atoms/Toolbar/Toolbar.stories.tsx +155 -0
  198. package/src/gui/components/atoms/Toolbar/Toolbar.tsx +16 -0
  199. package/src/gui/components/atoms/Tooltip/Tooltip.resolver.tsx +142 -0
  200. package/src/gui/components/atoms/Tooltip/Tooltip.stories.tsx +117 -0
  201. package/src/gui/components/atoms/Tooltip/Tooltip.tsx +70 -0
  202. package/src/gui/components/atoms/Typography/Typography.resolver.tsx +158 -0
  203. package/src/gui/components/atoms/Typography/Typography.stories.tsx +222 -0
  204. package/src/gui/components/atoms/Typography/Typography.tsx +27 -0
  205. package/src/gui/components/atoms/Window/Nodes/node.ts +0 -0
  206. package/src/gui/components/atoms/Window/code/block/node.tsx +0 -0
  207. package/src/gui/components/atoms/Window/code/hugging.face.api.ts +11 -0
  208. package/src/gui/components/atoms/Window/connectors/index.ts +19 -0
  209. package/src/gui/components/atoms/Window/window.stories.tsx +20 -0
  210. package/src/gui/components/atoms/Window/window.tsx +636 -0
  211. package/src/gui/components/atoms/atoms.tsx +151 -0
  212. package/src/gui/components/atoms/index.ts +2 -0
  213. package/src/gui/components/generics/Cards/Gridme.jsx +52 -0
  214. package/src/gui/components/generics/Cards/LilBox.jsx +65 -0
  215. package/src/gui/components/generics/Cards/ModuleCard.jsx +106 -0
  216. package/src/gui/components/generics/Chats/FullChatBot.jsx +223 -0
  217. package/src/gui/components/generics/Code/CodeBlock.jsx +33 -0
  218. package/src/gui/components/generics/EmojiCursor/EmojiCursor.stories.tsx +153 -0
  219. package/src/gui/components/generics/EmojiCursor/EmojiCursor.tsx +23 -0
  220. package/src/gui/components/generics/Feedback/Callout.jsx +92 -0
  221. package/src/gui/components/generics/Layout/GridX.jsx +29 -0
  222. package/src/gui/components/generics/Layout/Hero2.jsx +132 -0
  223. package/src/gui/components/generics/Layout/PageContainer.jsx +29 -0
  224. package/src/gui/components/generics/Layout/PageDivider.jsx +20 -0
  225. package/src/gui/components/generics/Layout/Section.jsx +43 -0
  226. package/src/gui/components/generics/Layout/SectionHeader.jsx +21 -0
  227. package/src/gui/components/generics/Media/Img.jsx +58 -0
  228. package/src/gui/components/generics/Media/VideoEmbed.jsx +51 -0
  229. package/src/gui/components/generics/Organization/TableOfContents.jsx +51 -0
  230. package/src/gui/components/generics/Organization/Tabs.jsx +45 -0
  231. package/src/gui/components/generics/Text/TextList.jsx +41 -0
  232. package/src/gui/components/generics/Text/TextParagraph.jsx +28 -0
  233. package/src/gui/components/generics/Text/TextQuote.jsx +23 -0
  234. package/src/gui/components/generics/Text/TextTitle.jsx +44 -0
  235. package/src/gui/components/molecules/Dialog/Dialog.stories.tsx +18 -0
  236. package/src/gui/components/molecules/Dialog/Dialog.tsx +5 -0
  237. package/src/gui/components/molecules/Hero/Hero.stories.tsx +140 -0
  238. package/src/gui/components/molecules/Hero/Hero.tsx +152 -0
  239. package/src/gui/components/molecules/Hero/Hero.types.tsx +18 -0
  240. package/src/gui/components/molecules/Modal/Modal.resolver.tsx +38 -0
  241. package/src/gui/components/molecules/Modal/Modal.stories.tsx +82 -0
  242. package/src/gui/components/molecules/Modal/Modal.tsx +110 -0
  243. package/src/gui/components/molecules/Modal/Modal.types.ts +29 -0
  244. package/src/gui/components/molecules/Page/Page.stories.tsx +135 -0
  245. package/src/gui/components/molecules/Page/Page.tsx +94 -0
  246. package/src/gui/components/molecules/Theme/ThemeModeToggle/ThemeModeToggle.resolver.tsx +58 -0
  247. package/src/gui/components/molecules/Theme/ThemeModeToggle/ThemeModeToggle.stories.tsx +133 -0
  248. package/src/gui/components/molecules/Theme/ThemeModeToggle/ThemeModeToggle.tsx +101 -0
  249. package/src/gui/components/molecules/Theme/ThemeModeToggle/ThemeModeToggle.types.ts +29 -0
  250. package/src/gui/components/molecules/Theme/ThemesCatalog/ThemesCatalog.resolver.tsx +15 -0
  251. package/src/gui/components/molecules/Theme/ThemesCatalog/ThemesCatalog.stories.tsx +88 -0
  252. package/src/gui/components/molecules/Theme/ThemesCatalog/ThemesCatalog.tsx +167 -0
  253. package/src/gui/components/molecules/Theme/ThemesCatalog/ThemesCatalog.types.ts +34 -0
  254. package/src/gui/components/molecules/molecules.ts +49 -0
  255. package/src/gui/components/organisms/Blockchain/Blocks/BlocksTable.tsx +119 -0
  256. package/src/gui/components/organisms/Blockchain/Usernames/Identities.stories.tsx +20 -0
  257. package/src/gui/components/organisms/Blockchain/Usernames/QR.tsx +566 -0
  258. package/src/gui/components/organisms/Blockchain/Usernames/Usernames.tsx +448 -0
  259. package/src/gui/components/organisms/Blockchain/Usernames/identities.tsx +710 -0
  260. package/src/gui/components/organisms/Blockchain/blockchain.stories.tsx +17 -0
  261. package/src/gui/components/organisms/Blockchain/blockchain.tsx +368 -0
  262. package/src/gui/components/organisms/Blockchain/scripts/connection.ts +82 -0
  263. package/src/gui/components/organisms/Blockchain/scripts/match_face.ts +143 -0
  264. package/src/gui/components/organisms/HighLighter/HighLighter.stories.tsx +168 -0
  265. package/src/gui/components/organisms/HighLighter/HighLighter.tsx +420 -0
  266. package/src/gui/components/organisms/HighLighter/HighLightsDrawer.tsx +197 -0
  267. package/src/gui/components/organisms/IdentityNoise/FaceRecognition/FaceRecognition.stories.tsx +312 -0
  268. package/src/gui/components/organisms/IdentityNoise/FaceRecognition/FaceRecognition.tsx +765 -0
  269. package/src/gui/components/organisms/IdentityNoise/FaceRecognition/modules/useFaceCameraPermission.ts +70 -0
  270. package/src/gui/components/organisms/IdentityNoise/FaceRecognition/modules/useFaceLandmarker.ts +106 -0
  271. package/src/gui/components/organisms/IdentityNoise/FaceRecognition/modules/useFaceOverlay.ts +489 -0
  272. package/src/gui/components/organisms/IdentityNoise/FaceRecognition/modules/useFaceTemplate.ts +32 -0
  273. package/src/gui/components/organisms/IdentityNoise/FaceRecognition/modules/useFaceTemplateBurst.ts +178 -0
  274. package/src/gui/components/organisms/IdentityNoise/FaceRecognition/modules/verifyTemplate.ts +136 -0
  275. package/src/gui/components/organisms/IdentityNoise/IdentityNoise.tsx +403 -0
  276. package/src/gui/components/organisms/IdentityNoise/IndentityNoise.stories.tsx +15 -0
  277. package/src/gui/components/organisms/IdentityNoise/Noise/Noise.stories.tsx +206 -0
  278. package/src/gui/components/organisms/IdentityNoise/Noise/Noise.tsx +394 -0
  279. package/src/gui/components/organisms/IdentityNoise/Triad/QR.tsx +566 -0
  280. package/src/gui/components/organisms/IdentityNoise/Triad/Tiad.stories.tsx +6 -0
  281. package/src/gui/components/organisms/IdentityNoise/Triad/Triad.tsx +917 -0
  282. package/src/gui/components/organisms/IdentityNoise/Triad/handleCleak.ts +0 -0
  283. package/src/gui/components/organisms/IdentityNoise/Triad/identity.ts +31 -0
  284. package/src/gui/components/organisms/IdentityNoise/Triad/me/fundamentals/vectors/vectors.tsx +252 -0
  285. package/src/gui/components/organisms/IdentityNoise/Triad/me/me.stories.tsx +314 -0
  286. package/src/gui/components/organisms/IdentityNoise/Triad/me/me.tsx +0 -0
  287. package/src/gui/components/organisms/organisms.ts +15 -0
  288. package/src/gui/contexts/InsetsContext.tsx +40 -0
  289. package/src/gui/contexts/LeftSidebarContext.tsx +20 -0
  290. package/src/gui/contexts/RightSidebarContext.tsx +25 -0
  291. package/src/gui/contexts/ThemeContext.ts +34 -0
  292. package/src/gui/contexts/index.ts +4 -0
  293. package/src/gui/hooks/index.ts +11 -0
  294. package/src/gui/hooks/resolveColorToken.ts +39 -0
  295. package/src/gui/hooks/useCodeGen.ts +12 -0
  296. package/src/gui/hooks/useGuiMediaQuery.ts +18 -0
  297. package/src/gui/hooks/useGuiTheme.ts +18 -0
  298. package/src/gui/hooks/useInsets.ts +26 -0
  299. package/src/gui/hooks/useIsMobile.ts +13 -0
  300. package/src/gui/hooks/useIsTouchDevice.ts +25 -0
  301. package/src/gui/hooks/useLeftSidebar.ts +10 -0
  302. package/src/gui/hooks/useRightSidebar.ts +12 -0
  303. package/src/gui/hooks/useViewportKey.ts +19 -0
  304. package/src/gui/hooks/useViewportProp.ts +17 -0
  305. package/src/gui/registry/GuiRegistry.ts +19 -0
  306. package/src/gui/registry/factory.ts +12 -0
  307. package/src/gui/registry/index.ts +3 -0
  308. package/src/gui/registry/types.ts +6 -0
  309. package/src/gui/utils/nodeID.ts +11 -0
  310. package/src/registry/GuiRegistry.ts +19 -0
  311. package/src/stories/01.Home.mdx +22 -0
  312. package/src/stories/02.Understanding.This.GUI.mdx +149 -0
  313. package/src/stories/Theme/Palette.stories.tsx +86 -0
  314. package/src/stories/Theme/ThemeViewer.stories.tsx +91 -0
  315. package/src/stories/Theme/Typography.stories.jsx +211 -0
  316. package/src/stories/assets/this.GUI.png +0 -0
  317. package/src/types/gui.d.ts +67 -0
  318. package/src/types/theme.d.ts +191 -0
  319. package/src/types/viewport.ts +132 -0
@@ -0,0 +1,223 @@
1
+ import * as React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { Drawer, Box, Button, Typography } from '@/gui/components/atoms';
4
+ // ======================= Meta =======================
5
+ const meta: Meta<typeof Drawer> = {
6
+ title: 'Atoms/Containers/Drawer',
7
+ component: Drawer,
8
+ tags: ['autodocs'],
9
+ decorators: [
10
+ (Story) => (
11
+ <div style={{ padding: 16, minHeight: 320 }}>
12
+ <Story />
13
+ </div>
14
+ ),
15
+ ],
16
+ parameters: {
17
+ docs: {
18
+ description: {
19
+ component: `
20
+ The **Drawer** primitive is a thin wrapper over MUI's \`MuiDrawer\`. It preserves all of MUI's props and behavior, while keeping the import surface stable via \`@/gui/primitives\`.
21
+
22
+ ---
23
+ ## Features
24
+ - Variants: \`temporary\`, \`persistent\`, \`permanent\`.
25
+ - Anchors: \`left\`, \`right\`, \`top\`, \`bottom\`.
26
+ - Works with This.GUI theme (via \`GuiProvider\`).
27
+ - Accepts \`sx\` and \`PaperProps\` for styling the surface.
28
+
29
+ > Note: For \`temporary\` drawers, you control visibility with the \`open\` prop and \`onClose\`.
30
+ > For \`permanent\` drawers, \`open\` is ignored by MUI; the drawer is always visible.
31
+
32
+ ---
33
+ ## Basic usage
34
+ ~~~tsx
35
+ import { Drawer } from '@/gui/primitives';
36
+
37
+ <Drawer anchor="left" variant="temporary" open={open} onClose={() => setOpen(false)}>
38
+ <div style={{ width: 260, padding: 16 }}>Content</div>
39
+ </Drawer>
40
+ ~~~
41
+
42
+ ## Permanent sidebar
43
+ ~~~tsx
44
+ <Drawer anchor="left" variant="permanent" PaperProps={{ sx: { width: 260 } }}>
45
+ <div style={{ width: 260, padding: 16 }}>Navigation</div>
46
+ </Drawer>
47
+ ~~~
48
+
49
+ ## Declarative JSON / Config
50
+ ~~~json
51
+ {
52
+ "type": "Drawer",
53
+ "props": {
54
+ "variant": "temporary",
55
+ "anchor": "right",
56
+ "PaperProps": { "sx": { "width": 300 } },
57
+ "children": "<YourMenu />"
58
+ }
59
+ }
60
+ ~~~
61
+
62
+ When used via your registry/resolver, the object above is resolved into a live Drawer with the provided props.
63
+ `,
64
+ },
65
+ },
66
+ },
67
+ argTypes: {
68
+ variant: {
69
+ control: { type: 'radio' },
70
+ options: ['temporary', 'persistent', 'permanent'],
71
+ },
72
+ anchor: {
73
+ control: { type: 'radio' },
74
+ options: ['left', 'right', 'top', 'bottom'],
75
+ },
76
+ open: {
77
+ control: { type: 'boolean' },
78
+ description: 'Only relevant for temporary/persistent variants.',
79
+ },
80
+ // Not useful as a control in SB; better shown in examples
81
+ container: { table: { disable: true } },
82
+ },
83
+ args: {
84
+ variant: 'temporary',
85
+ anchor: 'left',
86
+ open: false,
87
+ },
88
+ };
89
+ export default meta;
90
+
91
+ type Story = StoryObj<typeof Drawer>;
92
+
93
+ // ======================= Helpers =======================
94
+ const DemoList = ({ label = 'Menu' }: { label?: string }) => (
95
+ <Box sx={{ width: 260, p: 2 }}>
96
+ <Typography variant="subtitle1" sx={{ mb: 1.5 }}>{label}</Typography>
97
+ <ul style={{ margin: 0, paddingLeft: 16, lineHeight: 1.9 }}>
98
+ <li><a href="#">Item one</a></li>
99
+ <li><a href="#">Item two</a></li>
100
+ <li><a href="#">Item three</a></li>
101
+ </ul>
102
+ </Box>
103
+ );
104
+
105
+ // ======================= Stories =======================
106
+
107
+ export const Playground: Story = {
108
+ render: (args) => (
109
+ <>
110
+ <Typography variant="body1" sx={{ mb: 1 }}>
111
+ Toggle <strong>open</strong> in controls (temporary/persistent).
112
+ </Typography>
113
+ <Drawer {...args}>
114
+ <DemoList />
115
+ </Drawer>
116
+ </>
117
+ ),
118
+ };
119
+
120
+ export const TemporaryWithToggle: Story = {
121
+ name: 'Temporary (with toggle button)',
122
+ render: () => {
123
+ const [open, setOpen] = React.useState(false);
124
+ return (
125
+ <>
126
+ <Button variant="contained" color="primary" onClick={() => setOpen(true)}>
127
+ Open drawer
128
+ </Button>
129
+ <Drawer
130
+ anchor="left"
131
+ variant="temporary"
132
+ open={open}
133
+ onClose={() => setOpen(false)}
134
+ ModalProps={{ keepMounted: true }}
135
+ >
136
+ <DemoList label="Temporary drawer" />
137
+ </Drawer>
138
+ </>
139
+ );
140
+ },
141
+ };
142
+
143
+ export const PermanentLeft: Story = {
144
+ name: 'Permanent (left)',
145
+ render: () => (
146
+ <div style={{ display: 'flex', minHeight: 320 }}>
147
+ <Drawer
148
+ anchor="left"
149
+ variant="permanent"
150
+ PaperProps={{ sx: { width: 240, position: 'relative' } }}
151
+ >
152
+ <DemoList label="Permanent left" />
153
+ </Drawer>
154
+ <Box sx={{ flex: 1, p: 2 }}>
155
+ <Typography variant="h6" sx={{ mb: 1 }}>Content area</Typography>
156
+ <Typography variant="body2">
157
+ The permanent drawer is always visible and does not use the <code>open</code> prop.
158
+ </Typography>
159
+ </Box>
160
+ </div>
161
+ ),
162
+ };
163
+
164
+ export const RightAnchorTemporary: Story = {
165
+ name: 'Temporary (right anchor)',
166
+ render: () => {
167
+ const [open, setOpen] = React.useState(false);
168
+ return (
169
+ <>
170
+ <Button variant="outlined" onClick={() => setOpen(true)}>
171
+ Open right drawer
172
+ </Button>
173
+ <Drawer
174
+ anchor="right"
175
+ variant="temporary"
176
+ open={open}
177
+ onClose={() => setOpen(false)}
178
+ PaperProps={{ sx: { width: 300 } }}
179
+ >
180
+ <DemoList label="Right side" />
181
+ </Drawer>
182
+ </>
183
+ );
184
+ },
185
+ };
186
+
187
+ export const TopAndBottom: Story = {
188
+ name: 'Top & bottom anchors',
189
+ render: () => {
190
+ const [openTop, setOpenTop] = React.useState(false);
191
+ const [openBottom, setOpenBottom] = React.useState(false);
192
+ return (
193
+ <>
194
+ <div style={{ display: 'flex', gap: 12, marginBottom: 12 }}>
195
+ <Button variant="outlined" onClick={() => setOpenTop(true)}>Open top</Button>
196
+ <Button variant="outlined" onClick={() => setOpenBottom(true)}>Open bottom</Button>
197
+ </div>
198
+ <Drawer
199
+ anchor="top"
200
+ variant="temporary"
201
+ open={openTop}
202
+ onClose={() => setOpenTop(false)}
203
+ PaperProps={{ sx: { height: 200 } }}
204
+ >
205
+ <Box sx={{ p: 2 }}>
206
+ <Typography variant="subtitle1">Top drawer</Typography>
207
+ </Box>
208
+ </Drawer>
209
+ <Drawer
210
+ anchor="bottom"
211
+ variant="temporary"
212
+ open={openBottom}
213
+ onClose={() => setOpenBottom(false)}
214
+ PaperProps={{ sx: { height: 200 } }}
215
+ >
216
+ <Box sx={{ p: 2 }}>
217
+ <Typography variant="subtitle1">Bottom drawer</Typography>
218
+ </Box>
219
+ </Drawer>
220
+ </>
221
+ );
222
+ },
223
+ };
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import MuiDrawer from '@mui/material/Drawer';
3
+ export type DrawerProps = React.ComponentProps<typeof MuiDrawer>;
4
+ /**
5
+ * `Drawer` is a wrapper around MUI's `Drawer` component.
6
+ *
7
+ * It provides a consistent drawer interface for side navigation or temporary content containers.
8
+ * All props from MUI's `Drawer` are forwarded via `DrawerProps`, ensuring type safety and
9
+ * autocomplete support.
10
+ *
11
+ * This component also uses `React.forwardRef` to support ref forwarding for advanced use cases
12
+ * like controlling the drawer programmatically or integrating with custom animations.
13
+ *
14
+ * Example usage:
15
+ * ```tsx
16
+ * <Drawer anchor="left" open={open} onClose={handleClose}>
17
+ * <List>...</List>
18
+ * </Drawer>
19
+ * ```
20
+ */
21
+ export const Drawer = React.forwardRef<HTMLDivElement, DrawerProps>(function Drawer(props, ref) {
22
+ return <MuiDrawer ref={ref} {...props} />;
23
+ });
24
+
25
+ export default Drawer;
@@ -0,0 +1,33 @@
1
+ import type { RegistryEntry, ResolveCtx } from '@/gui/registry/types';
2
+ import { ensureNodeId } from '@/gui/utils/nodeID';
3
+ import Grid from './Grid';
4
+ import type { GridResolverSpec } from './Grid.types';
5
+
6
+ const GridResolver: RegistryEntry = {
7
+ type: 'Grid',
8
+ resolve(spec: GridResolverSpec, _ctx?: ResolveCtx) {
9
+ const p = spec.props ?? {};
10
+ const {
11
+ children,
12
+ id,
13
+ className,
14
+ sx,
15
+ ...rest
16
+ } = p;
17
+
18
+ const gridId = ensureNodeId('grid', id);
19
+
20
+ return (
21
+ <Grid
22
+ id={gridId}
23
+ className={className}
24
+ sx={sx}
25
+ {...rest}
26
+ >
27
+ {children}
28
+ </Grid>
29
+ );
30
+ },
31
+ };
32
+
33
+ export default GridResolver;
@@ -0,0 +1,136 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import Grid from './Grid';
3
+ import Box from '@/gui/atoms/Box/Box';
4
+
5
+ // ======================= Meta =======================
6
+ const meta: Meta<typeof Grid> = {
7
+ title: 'Atoms/Containers/Grid',
8
+ component: Grid,
9
+ tags: ['autodocs'],
10
+ decorators: [
11
+ (Story) => (
12
+ <div style={{ padding: 0, minHeight: 240 }}>
13
+ <Story />
14
+ </div>
15
+ ),
16
+ ],
17
+ parameters: {
18
+ docs: {
19
+ description: {
20
+ component: `
21
+ The **Grid** atom is a thin wrapper around MUI's \`Grid\` component. It keeps the original API and polymorphism but integrates with **This.GUI** tokens and allows declarative usage via the resolver.
22
+
23
+ ---
24
+ ## Features
25
+ - Supports all MUI Grid props like \`container\`, \`item\`, \`spacing\`, \`xs\`, \`sm\`, \`md\`, etc.
26
+ - Fully themeable via **This.GUI** tokens and \`sx\`.
27
+ - Works both as a container and as an item.
28
+ - Can be described declaratively via JSON specs for resolvers.
29
+
30
+ ---
31
+ ## Key Props
32
+ - \`container?: boolean\` — defines a grid container.
33
+ - \`item?: boolean\` — defines a grid item.
34
+ - \`spacing?: number | object\` — gap between items (when container).
35
+ - \`xs | sm | md | lg | xl?: number\` — responsive column sizes.
36
+ - \`sx?: object\` — granular styling.
37
+
38
+ ---
39
+ ## Basic usage (React)
40
+ ~~~tsx
41
+ import { Grid, Box } from '@/gui/atoms';
42
+
43
+ <Grid container spacing={2}>
44
+ <Grid item xs={6}>
45
+ <Box sx={{ backgroundColor: 'primary.main', p: 2, color: '#fff' }}>Item 1</Box>
46
+ </Grid>
47
+ <Grid item xs={6}>
48
+ <Box sx={{ backgroundColor: 'secondary.main', p: 2, color: '#fff' }}>Item 2</Box>
49
+ </Grid>
50
+ </Grid>
51
+ ~~~
52
+
53
+ ---
54
+ ## Declarative JSON / Config usage
55
+ This GUI's **resolver** lets you describe a Grid via a config object:
56
+
57
+ ~~~json
58
+ {
59
+ "type": "Grid",
60
+ "props": {
61
+ "container": true,
62
+ "spacing": 2,
63
+ "children": [
64
+ {
65
+ "type": "Grid",
66
+ "props": {
67
+ "item": true,
68
+ "xs": 6,
69
+ "children": {
70
+ "type": "Box",
71
+ "props": {
72
+ "sx": { "backgroundColor": "primary.main", "p": 2, "color": "#fff" },
73
+ "children": "Item 1"
74
+ }
75
+ }
76
+ }
77
+ },
78
+ {
79
+ "type": "Grid",
80
+ "props": {
81
+ "item": true,
82
+ "xs": 6,
83
+ "children": {
84
+ "type": "Box",
85
+ "props": {
86
+ "sx": { "backgroundColor": "secondary.main", "p": 2, "color": "#fff" },
87
+ "children": "Item 2"
88
+ }
89
+ }
90
+ }
91
+ }
92
+ ]
93
+ }
94
+ }
95
+ ~~~
96
+
97
+ > The resolver maps this spec to real React elements, preserving polymorphism and \`sx\` styling.
98
+ `,
99
+ },
100
+ },
101
+ },
102
+ };
103
+ export default meta;
104
+
105
+ type Story = StoryObj<typeof Grid>;
106
+
107
+ // ======================= Stories =======================
108
+ export const Playground: Story = {
109
+ render: (args) => (
110
+ <Grid {...args} container spacing={2}>
111
+ <Grid item xs={6}>
112
+ <Box sx={{ backgroundColor: 'primary.main', p: 2, color: '#fff' }}>Item 1</Box>
113
+ </Grid>
114
+ <Grid item xs={6}>
115
+ <Box sx={{ backgroundColor: 'secondary.main', p: 2, color: '#fff' }}>Item 2</Box>
116
+ </Grid>
117
+ </Grid>
118
+ ),
119
+ };
120
+
121
+ export const ResponsiveGrid: Story = {
122
+ render: (args) => (
123
+ <Grid {...args} container spacing={2}>
124
+ <Grid item xs={12} sm={6} md={4}>
125
+ <Box sx={{ backgroundColor: 'info.main', p: 2, color: '#fff' }}>xs=12 sm=6 md=4</Box>
126
+ </Grid>
127
+ <Grid item xs={12} sm={6} md={4}>
128
+ <Box sx={{ backgroundColor: 'success.main', p: 2, color: '#fff' }}>xs=12 sm=6 md=4</Box>
129
+ </Grid>
130
+ <Grid item xs={12} sm={12} md={4}>
131
+ <Box sx={{ backgroundColor: 'warning.main', p: 2, color: '#fff' }}>xs=12 sm=12 md=4</Box>
132
+ </Grid>
133
+ </Grid>
134
+ ),
135
+ name: 'Responsive Grid Layout',
136
+ };
@@ -0,0 +1,15 @@
1
+ // File: Grid.tsx
2
+ import MuiGrid from '@mui/material/Grid';
3
+ import type { GridProps } from './Grid.types';
4
+
5
+ /**
6
+ * This.GUI — Grid
7
+ * Wrapper around MUI’s Grid that preserves props & typing.
8
+ *
9
+ * Purpose:
10
+ * - Consistent namespace integration (This.GUI).
11
+ * - Supports full MUI Grid props including `sx`, `container`, `item`, etc.
12
+ */
13
+ const Grid = MuiGrid;
14
+ (Grid as any).displayName = 'Gui.Grid';
15
+ export default Grid;
@@ -0,0 +1,9 @@
1
+ import MuiGrid from '@mui/material/Grid';
2
+ import type { GridProps as MuiGridProps } from '@mui/material/Grid';
3
+ export type GridProps = React.ComponentProps<typeof MuiGrid> & MuiGridProps;
4
+
5
+ export type GridResolverSpec = {
6
+ type: 'Grid';
7
+ props?: GridProps; // or GridProps if you want to alias it
8
+ };
9
+
@@ -0,0 +1,137 @@
1
+ // src/gui/atoms/IconButton/IconButton.resolver.tsx
2
+ import * as React from 'react';
3
+ import IconButton from './IconButton';
4
+ import Icon from '@/gui/Theme/Icon/Icon';
5
+ import Link from '@/gui/atoms/Link/Link';
6
+ import type { RegistryEntry, ResolveCtx } from '@/gui/registry/types';
7
+ import type { SxProps, Theme } from '@mui/material/styles';
8
+ import { ensureNodeId } from '@/gui/utils/nodeID';
9
+
10
+ /**
11
+ * Declarative resolver for IconButton
12
+ * -----------------------------------
13
+ * - Forwards all MUI IconButton props faithfully.
14
+ * - Supports polymorphism via `component` / `as`.
15
+ * - Adds sugar:
16
+ * • `icon` string → rendered through our Icon registry (mui:/lucide: tokens), normalized to lowercase.
17
+ * • Routing helpers: if `to` w/o `component` → uses This.GUI `Link`; if `href`/`external` → uses anchor with safe target/rel.
18
+ * - Provides granular styling via `sx` (root) and optional `iconSx`.
19
+ *
20
+ * A11y note: when rendering only an icon (no visible text), pass an `aria-label`.
21
+ */
22
+ export type IconButtonSpec = {
23
+ type: 'IconButton';
24
+ props?: {
25
+ children?: React.ReactNode;
26
+
27
+ // Polymorphism
28
+ component?: any;
29
+ as?: any; // alias for component
30
+
31
+ // Routing sugar
32
+ to?: string;
33
+ href?: string;
34
+ external?: boolean;
35
+ target?: React.HTMLAttributeAnchorTarget;
36
+ rel?: string;
37
+
38
+ // Sugar: icon may be a token or a node
39
+ icon?: string | React.ReactNode;
40
+ iconProps?: Record<string, any>;
41
+
42
+ // MUI props passthrough (subset; others go via index signature)
43
+ color?:
44
+ | 'inherit'
45
+ | 'default'
46
+ | 'primary'
47
+ | 'secondary'
48
+ | 'success'
49
+ | 'error'
50
+ | 'info'
51
+ | 'warning';
52
+ size?: 'small' | 'medium' | 'large';
53
+ edge?: 'start' | 'end' | false;
54
+ disabled?: boolean;
55
+
56
+ // Styling
57
+ sx?: SxProps<Theme>;
58
+ className?: string;
59
+ id?: string;
60
+ 'data-testid'?: string;
61
+
62
+ // Arbitrary passthrough (MUI will validate)
63
+ [key: string]: any;
64
+ };
65
+ };
66
+
67
+ const IconButtonResolver: RegistryEntry = {
68
+ type: 'IconButton',
69
+ resolve(spec: IconButtonSpec, _ctx?: ResolveCtx) {
70
+ const p = spec.props ?? {};
71
+ const nodeId = ensureNodeId('iconbutton', p.id as string | undefined);
72
+
73
+ // Decide polymorphic target
74
+ const component =
75
+ p.component ??
76
+ p.as ??
77
+ (p.to ? Link : (p.href || p.external) ? 'a' : undefined);
78
+
79
+ // Routing / anchor props
80
+ const routingProps =
81
+ component === 'a' || p.external
82
+ ? {
83
+ href: p.href,
84
+ target: p.target ?? (p.external ? '_blank' : undefined),
85
+ rel: p.rel ?? (p.external ? 'noopener noreferrer' : undefined),
86
+ }
87
+ : component === Link || (p.to && !p.component)
88
+ ? { to: p.to }
89
+ : {};
90
+
91
+ // Prepare children (icon sugar)
92
+ const { children, icon, iconProps } = p;
93
+ const normalizedToken =
94
+ typeof icon === 'string' ? icon.trim() : null;
95
+
96
+ const effectiveChildren =
97
+ children ??
98
+ (normalizedToken ? (
99
+ <Icon
100
+ name={normalizedToken}
101
+ {...(iconProps || {})}
102
+ />
103
+ ) : (
104
+ icon ?? null
105
+ ));
106
+
107
+ // Collect & strip resolver-only keys so they don't leak to DOM
108
+ const {
109
+ as: _as,
110
+ to: _to,
111
+ href: _href,
112
+ external: _external,
113
+ target: _target,
114
+ rel: _rel,
115
+ icon: _icon,
116
+ iconSx: _iconSx,
117
+ iconProps: _iconProps,
118
+ ...rest
119
+ } = p;
120
+
121
+ return (
122
+ <IconButton
123
+ {...(component ? { component } : {})}
124
+ sx={p.sx}
125
+ className={p.className}
126
+ id={nodeId}
127
+ data-testid={p['data-testid']}
128
+ {...routingProps}
129
+ {...rest}
130
+ >
131
+ {effectiveChildren}
132
+ </IconButton>
133
+ );
134
+ },
135
+ };
136
+
137
+ export default IconButtonResolver;