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,40 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import CardHeader from './CardHeader';
3
+ import Avatar from '@mui/material/Avatar';
4
+ import IconButton from '@mui/material/IconButton';
5
+ import Icon from '@/gui/Theme/Icon/Icon';
6
+
7
+ const meta: Meta<typeof CardHeader> = {
8
+ title: 'Atoms/Organization/Card/CardHeader',
9
+ component: CardHeader,
10
+ tags: ['autodocs'],
11
+ };
12
+
13
+ export default meta;
14
+ type Story = StoryObj<typeof CardHeader>;
15
+
16
+ export const BasicHeader: Story = {
17
+ render: () => (
18
+ <CardHeader
19
+ title="Card Title"
20
+ subheader="September 20, 2025"
21
+ />
22
+ ),
23
+ name: 'Basic Header',
24
+ };
25
+
26
+ export const WithAvatarAndAction: Story = {
27
+ render: () => (
28
+ <CardHeader
29
+ avatar={<Avatar aria-label="recipe">R</Avatar>}
30
+ action={
31
+ <IconButton aria-label="settings">
32
+ <Icon name="more_vert" />
33
+ </IconButton>
34
+ }
35
+ title="Shrimp and Chorizo Paella"
36
+ subheader="September 20, 2025"
37
+ />
38
+ ),
39
+ name: 'Header with Avatar and Action',
40
+ };
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+ import MuiCardHeader from '@mui/material/CardHeader';
3
+
4
+ /**
5
+ * This.GUI — CardHeader (atom)
6
+ * Thin wrapper around MUI’s CardHeader that preserves props & typing.
7
+ * Useful for defining title, subheader, and action areas in cards with consistent API.
8
+ */
9
+ const CardHeader = MuiCardHeader;
10
+ export type CardHeaderProps = React.ComponentProps<typeof CardHeader>;
11
+ (CardHeader as any).displayName = 'Gui.CardHeader';
12
+ export default CardHeader;
@@ -0,0 +1,85 @@
1
+ // src/gui/atoms/Collapse/Collapse.resolver.tsx
2
+ import * as React from 'react';
3
+ import Collapse from './Collapse';
4
+ import type { RegistryEntry, ResolveCtx } from '@/gui/registry/types';
5
+ import type { SxProps, Theme } from '@mui/material/styles';
6
+ import type { TransitionProps } from '@mui/material/transitions';
7
+ import { ensureNodeId } from '@/gui/utils/nodeID';
8
+
9
+ /**
10
+ * Declarative resolver for Collapse
11
+ * ---------------------------------
12
+ * Fidelity
13
+ * - Forwards MUI props faithfully (in, orientation, collapsedSize, timeout, easing, unmountOnExit, etc.).
14
+ * - Supports polymorphism via `component` (and alias `as`).
15
+ * - Provides granular styling through `sx` on the root.
16
+ *
17
+ * Usage (declarative JSON):
18
+ * {
19
+ * "type": "Collapse",
20
+ * "props": {
21
+ * "in": true,
22
+ * "orientation": "vertical",
23
+ * "sx": { "border": "1px dashed", "borderColor": "divider" }
24
+ * }
25
+ * }
26
+ */
27
+ export type CollapseSpec = {
28
+ type: 'Collapse';
29
+ props?: {
30
+ children?: React.ReactNode;
31
+
32
+ // Note: MUI Collapse's `component` must be a React component (not a string tag) due to Transition typing.
33
+ component?: React.ElementType<TransitionProps>;
34
+ as?: any; // alias of component
35
+
36
+ // Core MUI props (subset; others passthrough)
37
+ in?: boolean;
38
+ orientation?: 'vertical' | 'horizontal';
39
+ collapsedSize?: number | string;
40
+ timeout?: 'auto' | number | { appear?: number; enter?: number; exit?: number };
41
+ easing?: string | { enter?: string; exit?: string };
42
+ unmountOnExit?: boolean;
43
+ mountOnEnter?: boolean;
44
+ appear?: boolean;
45
+
46
+ // Styling
47
+ sx?: SxProps<Theme>;
48
+ className?: string;
49
+ id?: string;
50
+ 'data-testid'?: string;
51
+
52
+ // Arbitrary passthrough
53
+ [key: string]: any;
54
+ };
55
+ };
56
+
57
+ const CollapseResolver: RegistryEntry = {
58
+ type: 'Collapse',
59
+ resolve(spec: CollapseSpec, _ctx?: ResolveCtx) {
60
+ const p = spec.props ?? {};
61
+ const { children, as: _as, component: _component, ...rest } = p;
62
+ // Collapse's `component` must be a React component (not a string tag), otherwise TS will error.
63
+ const rawComponent = _component ?? _as;
64
+ const component = (typeof rawComponent === 'string'
65
+ ? undefined
66
+ : (rawComponent as React.ElementType<TransitionProps>)) as React.ElementType<TransitionProps> | undefined;
67
+
68
+ // Guarantee a stable, prefixed id for editor tooling
69
+ const collapseId = ensureNodeId('collapse', p.id);
70
+ return (
71
+ <Collapse
72
+ {...(component ? { component: component as React.ElementType<TransitionProps> } : {})}
73
+ sx={p.sx}
74
+ className={p.className}
75
+ id={collapseId}
76
+ data-testid={p['data-testid']}
77
+ {...rest}
78
+ >
79
+ {children}
80
+ </Collapse>
81
+ );
82
+ },
83
+ };
84
+
85
+ export default CollapseResolver;
@@ -0,0 +1,130 @@
1
+ import * as React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import Collapse from './Collapse';
4
+
5
+ const meta: Meta<typeof Collapse> = {
6
+ title: 'Atoms/Content/Collapse',
7
+ component: Collapse,
8
+ tags: ['autodocs'],
9
+ decorators: [
10
+ (Story) => (
11
+ <div style={{ padding: 16, minHeight: 220 }}>
12
+ <Story />
13
+ </div>
14
+ ),
15
+ ],
16
+ parameters: {
17
+ docs: {
18
+ description: {
19
+ component: `
20
+ The **Collapse** atom is a thin wrapper around MUI's \`MuiCollapse\`, staying faithful to its API and polymorphism.
21
+
22
+ In **declarative** mode (resolver), it forwards MUI props as-is and supports granular styling via \`sx\` on the root.
23
+
24
+ ---
25
+ ## React usage
26
+ ~~~jsx
27
+ const [open, setOpen] = React.useState(true);
28
+
29
+ <Collapse in={open}>
30
+ <div style={{ padding: 12, border: '1px solid var(--mui-palette-divider)', borderRadius: 8 }}>
31
+ Collapsible content
32
+ </div>
33
+ </Collapse>
34
+ ~~~
35
+
36
+ ## Declarative JSON / Resolver
37
+ ~~~json
38
+ {
39
+ "type": "Collapse",
40
+ "props": {
41
+ "in": true,
42
+ "orientation": "vertical",
43
+ "sx": { "border": "1px dashed", "borderColor": "divider", "p": 1 }
44
+ }
45
+ }
46
+ ~~~
47
+ `,
48
+ },
49
+ },
50
+ controls: {
51
+ exclude: ['component', 'children', 'as', 'timeout', 'easing'],
52
+ },
53
+ },
54
+ argTypes: {
55
+ in: { control: 'boolean', description: 'Show/Hide content' },
56
+ orientation: { control: { type: 'radio' }, options: ['vertical', 'horizontal'] },
57
+ collapsedSize: { control: 'text', description: 'number or CSS size' },
58
+ unmountOnExit: { control: 'boolean' },
59
+ mountOnEnter: { control: 'boolean' },
60
+ appear: { control: 'boolean' },
61
+ sx: { control: 'object' },
62
+ },
63
+ args: {
64
+ in: true,
65
+ orientation: 'vertical',
66
+ collapsedSize: 0,
67
+ unmountOnExit: false,
68
+ mountOnEnter: false,
69
+ appear: false,
70
+ sx: {},
71
+ children: undefined,
72
+ },
73
+ };
74
+
75
+ export default meta;
76
+
77
+ type Story = StoryObj<typeof Collapse>;
78
+
79
+ const DemoBlock: React.FC<{ label?: string } & React.HTMLAttributes<HTMLDivElement>> = ({ label = 'Collapsible content', ...rest }) => (
80
+ <div
81
+ {...rest}
82
+ style={{
83
+ padding: 12,
84
+ border: '1px solid var(--mui-palette-divider)',
85
+ borderRadius: 8,
86
+ background: 'var(--mui-palette-background-paper)',
87
+ ...rest.style,
88
+ }}
89
+ >
90
+ {label}
91
+ </div>
92
+ );
93
+
94
+ // ======================= Stories =======================
95
+ export const Playground: Story = {
96
+ render: (args) => <Collapse {...args}><DemoBlock /></Collapse>,
97
+ };
98
+
99
+ export const Horizontal: Story = {
100
+ args: { orientation: 'horizontal', in: true, collapsedSize: 0 },
101
+ render: (args) => (
102
+ <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
103
+ <Collapse {...args}>
104
+ <DemoBlock label="Horizontal content" style={{ width: 240 }} />
105
+ </Collapse>
106
+ <span style={{ opacity: 0.7, fontSize: 12 }}>(Try toggling the \"in\" control)</span>
107
+ </div>
108
+ ),
109
+ };
110
+
111
+ export const WithSx: Story = {
112
+ args: { sx: { border: '1px dashed', borderColor: 'divider', p: 1 } },
113
+ render: (args) => (
114
+ <Collapse {...args}>
115
+ <DemoBlock label="Styled via sx on Collapse" />
116
+ </Collapse>
117
+ ),
118
+ };
119
+
120
+ export const UnmountOnExit: Story = {
121
+ args: { unmountOnExit: true, in: false },
122
+ render: (args) => (
123
+ <div>
124
+ <p style={{ margin: 0, opacity: 0.75 }}>Content is removed from the DOM when closed.</p>
125
+ <Collapse {...args}>
126
+ <DemoBlock label="Unmounts when closed" />
127
+ </Collapse>
128
+ </div>
129
+ ),
130
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * This.GUI — Collapse
3
+ * Thin wrapper around MUI’s Collapse that preserves props & typing.
4
+ *
5
+ * Fidelity
6
+ * - Directly re-exports MUI’s component so behavior/typing remain intact.
7
+ * - No custom logic; consumers keep using it exactly like MUI.
8
+ *
9
+ * Styling / Granular control
10
+ * - Supports MUI System styling via props exposed by MUI (e.g. `sx` on slots where applicable).
11
+ */
12
+ import * as React from 'react';
13
+ import MuiCollapse from '@mui/material/Collapse';
14
+ const Collapse = MuiCollapse;
15
+ export type CollapseProps = React.ComponentProps<typeof Collapse>;
16
+ (Collapse as any).displayName = 'Gui.Collapse';
17
+ export default Collapse;
@@ -0,0 +1,95 @@
1
+ import * as React from 'react';
2
+ import { Divider } from '@/gui/components/atoms';
3
+ import type { SxProps, Theme } from '@mui/material/styles';
4
+ import type { RegistryEntry, ResolveCtx } from '@/gui/registry/types';
5
+ import { ensureNodeId } from '@/gui/utils/nodeID';
6
+
7
+ /**
8
+ * DividerResolver — declarative adapter for MUI Divider
9
+ *
10
+ * Fidelity
11
+ * - Forwards MUI props faithfully (orientation, flexItem, light, variant, textAlign, etc.).
12
+ * - Supports polymorphism via `component` (and alias `as`) when compatible with MUI Divider.
13
+ * - Granular styling via `sx` on the root Divider.
14
+ *
15
+ * Sugar
16
+ * - `text`: convenience for inline content (maps to children). If both `children` and `text`
17
+ * are provided, `children` takes precedence.
18
+ *
19
+ * JSON example:
20
+ * {
21
+ * "type": "Divider",
22
+ * "props": {
23
+ * "orientation": "vertical",
24
+ * "flexItem": true,
25
+ * "text": "OR",
26
+ * "sx": { "borderColor": "primary.main" }
27
+ * }
28
+ * }
29
+ */
30
+ export type DividerSpec = {
31
+ type: 'Divider';
32
+ props?: {
33
+ // Content
34
+ children?: React.ReactNode;
35
+ text?: React.ReactNode; // convenience alias for children
36
+
37
+ // Polymorphism
38
+ component?: React.ElementType | string;
39
+ as?: React.ElementType | string; // alias for component
40
+
41
+ // Common MUI Divider props (subset; passthrough handles the rest)
42
+ orientation?: 'horizontal' | 'vertical';
43
+ flexItem?: boolean;
44
+ light?: boolean;
45
+ variant?: 'fullWidth' | 'inset' | 'middle';
46
+ textAlign?: 'center' | 'left' | 'right';
47
+
48
+ // Styling & misc
49
+ sx?: SxProps<Theme>;
50
+ className?: string;
51
+ id?: string;
52
+ 'data-testid'?: string;
53
+
54
+ // Arbitrary passthrough
55
+ [key: string]: any;
56
+ };
57
+ };
58
+
59
+ const DividerResolver: RegistryEntry = {
60
+ type: 'Divider',
61
+ resolve(spec: DividerSpec, _ctx?: ResolveCtx) {
62
+ const p = spec.props ?? {};
63
+ // Extract and sanitize resolver-only fields so they don't leak to DOM
64
+ const {
65
+ children,
66
+ text,
67
+ as: _as,
68
+ component: _component,
69
+ sx,
70
+ className,
71
+ id,
72
+ 'data-testid': dataTestId,
73
+ ...rest
74
+ } = p;
75
+
76
+ const component = (_component ?? _as) as React.ElementType | string | undefined;
77
+ const content = children ?? text ?? undefined;
78
+ const dividerId = ensureNodeId('divider', id);
79
+
80
+ return (
81
+ <Divider
82
+ {...(component ? { component } : {})}
83
+ sx={sx}
84
+ className={className}
85
+ id={dividerId}
86
+ data-testid={dataTestId}
87
+ {...rest}
88
+ >
89
+ {content}
90
+ </Divider>
91
+ );
92
+ },
93
+ };
94
+
95
+ export default DividerResolver;
@@ -0,0 +1,108 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { Divider, Box, Typography, Stack } from '@/gui/components/atoms';
3
+
4
+ const meta: Meta<typeof Divider> = {
5
+ title: 'Atoms/Content/Divider',
6
+ component: Divider,
7
+ tags: ['autodocs'],
8
+ parameters: {
9
+ docs: {
10
+ description: {
11
+ component:
12
+ 'The Divider component is a thin wrapper over MUI\'s `MuiDivider`. It preserves all props and allows styling via the `sx` prop.',
13
+ },
14
+ },
15
+ },
16
+ argTypes: {
17
+ orientation: {
18
+ control: { type: 'radio' },
19
+ options: ['horizontal', 'vertical'],
20
+ description: 'The divider orientation.',
21
+ },
22
+ variant: {
23
+ control: { type: 'radio' },
24
+ options: ['fullWidth', 'inset', 'middle'],
25
+ description: 'The variant to use.',
26
+ },
27
+ flexItem: {
28
+ control: { type: 'boolean' },
29
+ description: 'If true, the divider is a flex item.',
30
+ },
31
+ },
32
+ args: {
33
+ orientation: 'horizontal',
34
+ variant: 'fullWidth',
35
+ flexItem: false,
36
+ },
37
+ };
38
+
39
+ export default meta;
40
+ type Story = StoryObj<typeof Divider>;
41
+
42
+ export const Playground: Story = {
43
+ render: (args) => (
44
+ <Stack spacing={2} sx={{ width: 300 }}>
45
+ <Typography>Item One</Typography>
46
+ <Divider {...args} />
47
+ <Typography>Item Two</Typography>
48
+ <Divider {...args} />
49
+ <Typography>Item Three</Typography>
50
+ </Stack>
51
+ ),
52
+ parameters: {
53
+ docs: {
54
+ description: {
55
+ story: 'Demonstrates the Divider component with customizable props in a vertical stack.',
56
+ },
57
+ },
58
+ },
59
+ };
60
+
61
+ export const VerticalDivider: Story = {
62
+ render: () => (
63
+ <Stack direction="row" spacing={2} alignItems="center" sx={{ height: 100 }}>
64
+ <Typography>Left</Typography>
65
+ <Divider orientation="vertical" flexItem />
66
+ <Typography>Right</Typography>
67
+ </Stack>
68
+ ),
69
+ parameters: {
70
+ docs: {
71
+ description: {
72
+ story: 'Shows a vertical divider between two items in a horizontal stack.',
73
+ },
74
+ },
75
+ },
76
+ };
77
+
78
+ export const InsetDivider: Story = {
79
+ render: () => (
80
+ <Stack spacing={2} sx={{ width: 300 }}>
81
+ <Typography>First</Typography>
82
+ <Divider variant="inset" />
83
+ <Typography>Second</Typography>
84
+ </Stack>
85
+ ),
86
+ parameters: {
87
+ docs: {
88
+ description: {
89
+ story: 'Demonstrates the inset variant of the Divider between text items.',
90
+ },
91
+ },
92
+ },
93
+ };
94
+
95
+ export const TextDivider: Story = {
96
+ render: () => (
97
+ <Box sx={{ width: 300 }}>
98
+ <Divider>Text Content</Divider>
99
+ </Box>
100
+ ),
101
+ parameters: {
102
+ docs: {
103
+ description: {
104
+ story: 'Shows a divider with text content in the middle.',
105
+ },
106
+ },
107
+ },
108
+ };
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ import MuiDivider from '@mui/material/Divider';
3
+ /**
4
+ * This.GUI — Divider (atom)
5
+ * Thin wrapper around MUI's Divider. Keeps the API stable under our namespace
6
+ * while preserving all props, including `sx`.
7
+ */
8
+ export type DividerProps = React.ComponentProps<typeof MuiDivider>;
9
+ const Divider = React.forwardRef<HTMLHRElement, DividerProps>(function Divider(props, ref) {
10
+ return <MuiDivider ref={ref} {...props} />;
11
+ });
12
+
13
+ (Divider as any).displayName = 'Divider';
14
+ export default Divider;
@@ -0,0 +1,116 @@
1
+ // src/gui/atoms/Drawer/Drawer.resolver.tsx
2
+ import * as React from 'react';
3
+ import { Drawer } from '@/gui/components/atoms';
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
+ /**
9
+ * Declarative resolver for Drawer
10
+ *
11
+ * Goals
12
+ * - Stay faithful to MUI props.
13
+ * - Add ergonomic sugar for JSON-driven UIs (width → PaperProps.sx.width, paperSx merge, content alias, keepMounted).
14
+ * - Keep types helpful (SxProps<Theme> where relevant).
15
+ *
16
+ * Notes
17
+ * - We deliberately DO NOT update layout insets here. That responsibility belongs to higher-level layout components.
18
+ */
19
+ type DrawerSpec = {
20
+ type: 'Drawer';
21
+ props?: {
22
+ // Behavior & placement
23
+ variant?: 'temporary' | 'persistent' | 'permanent';
24
+ anchor?: 'left' | 'right' | 'top' | 'bottom';
25
+ open?: boolean; // if omitted in declarative JSON, default to false
26
+ /**
27
+ * Accept either MUI's full signature or a simple no-arg callback for declarative specs.
28
+ * In runtime, if a no-arg function is provided, we wrap it into MUI's signature.
29
+ */
30
+ onClose?: ((event: object, reason: 'backdropClick' | 'escapeKeyDown') => void) | (() => void);
31
+
32
+ // Styling
33
+ width?: number; // shortcut → merged into PaperProps.sx.width
34
+ sx?: SxProps<Theme>; // root sx
35
+ PaperProps?: any; // will be merged; sx merged with width/paperSx
36
+ paperSx?: SxProps<Theme>; // optional convenience to add to Paper sx
37
+
38
+ // Container/Portal & Modal behavior (temporary/persistent)
39
+ container?: Element | (() => Element) | null;
40
+ ModalProps?: any;
41
+ keepMounted?: boolean; // shorthand → ModalProps.keepMounted = true
42
+
43
+ // Content
44
+ children?: React.ReactNode;
45
+ content?: React.ReactNode;
46
+
47
+ // Misc
48
+ id?: string;
49
+ className?: string;
50
+ 'data-testid'?: string;
51
+
52
+ // passthrough
53
+ [key: string]: any;
54
+ };
55
+ };
56
+
57
+ const DrawerResolver: RegistryEntry = {
58
+ type: 'Drawer',
59
+ resolve(spec: DrawerSpec) {
60
+ const p = spec.props ?? {};
61
+
62
+ // Merge Paper sx with `width` and optional `paperSx`
63
+ const mergedPaperSx = {
64
+ ...(typeof p.width === 'number' ? { width: p.width } : {}),
65
+ ...(p.paperSx ?? {}),
66
+ ...(p.PaperProps?.sx ?? {}),
67
+ };
68
+
69
+ const PaperProps = {
70
+ ...(p.PaperProps ?? {}),
71
+ ...(Object.keys(mergedPaperSx).length ? { sx: mergedPaperSx } : {}),
72
+ };
73
+
74
+ // ModalProps (support keepMounted shorthand and preserve provided values)
75
+ const ModalProps =
76
+ p.keepMounted != null
77
+ ? { ...(p.ModalProps ?? {}), keepMounted: p.keepMounted }
78
+ : p.ModalProps;
79
+
80
+ // Normalize onClose: support no-arg functions from declarative JSON
81
+ let onCloseProp: ((event: object, reason: 'backdropClick' | 'escapeKeyDown') => void) | undefined;
82
+ if (typeof p.onClose === 'function') {
83
+ onCloseProp = (event: object, reason: 'backdropClick' | 'escapeKeyDown') => {
84
+ // If the provided function expects no arguments (JSON sugar), just call it.
85
+ if ((p.onClose as Function).length === 0) {
86
+ (p.onClose as () => void)();
87
+ return;
88
+ }
89
+ // Otherwise, forward MUI's (event, reason)
90
+ (p.onClose as (event: object, reason: 'backdropClick' | 'escapeKeyDown') => void)(event, reason);
91
+ };
92
+ }
93
+
94
+ const children = p.children ?? p.content ?? null;
95
+
96
+ return (
97
+ <Drawer
98
+ variant={p.variant ?? 'temporary'}
99
+ anchor={p.anchor ?? 'left'}
100
+ open={p.open ?? false}
101
+ onClose={onCloseProp}
102
+ PaperProps={PaperProps}
103
+ ModalProps={ModalProps}
104
+ container={p.container}
105
+ sx={p.sx}
106
+ id={ensureNodeId('drawer', p.id)}
107
+ className={p.className}
108
+ data-testid={p['data-testid']}
109
+ >
110
+ {children}
111
+ </Drawer>
112
+ );
113
+ },
114
+ };
115
+
116
+ export default DrawerResolver;