this.gui 1.0.17 → 1.1.0

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 (477) hide show
  1. package/.storybook/main.js +40 -0
  2. package/.storybook/manager-head.html +13 -0
  3. package/.storybook/manager.js +15 -0
  4. package/.storybook/preview.tsx +54 -0
  5. package/.storybook/vitest.setup.js +6 -0
  6. package/.storybook/withLayout.tsx +18 -0
  7. package/README.md +1 -220
  8. package/dist/GUI.png +0 -0
  9. package/dist/GUI2.png +0 -0
  10. package/dist/favicon.ico +0 -0
  11. package/dist/this-gui.es.js +108493 -4976
  12. package/dist/this-gui.umd.js +239 -44
  13. package/dist/this.GUI.png +0 -0
  14. package/nodes/overall approach.md +93 -0
  15. package/notes/Proyect.md +109 -0
  16. package/package.json +71 -53
  17. package/public/GUI.png +0 -0
  18. package/public/GUI2.png +0 -0
  19. package/public/favicon.ico +0 -0
  20. package/public/this.GUI.png +0 -0
  21. package/src/components/generics/Cards/Gridme.jsx +52 -0
  22. package/src/components/generics/Cards/LilBox.jsx +65 -0
  23. package/src/components/generics/Cards/ModuleCard.jsx +106 -0
  24. package/src/components/generics/Chats/FullChatBot.jsx +223 -0
  25. package/src/components/generics/Code/CodeBlock.jsx +33 -0
  26. package/src/components/generics/Feedback/Callout.jsx +92 -0
  27. package/src/components/generics/Layout/GridX.jsx +29 -0
  28. package/src/components/generics/Layout/Hero2.jsx +132 -0
  29. package/src/components/generics/Layout/PageContainer.jsx +29 -0
  30. package/src/components/generics/Layout/PageDivider.jsx +20 -0
  31. package/src/components/generics/Layout/Section.jsx +43 -0
  32. package/src/components/generics/Layout/SectionHeader.jsx +21 -0
  33. package/src/components/generics/Media/Img.jsx +58 -0
  34. package/src/components/generics/Media/VideoEmbed.jsx +51 -0
  35. package/src/components/generics/Organization/TableOfContents.jsx +51 -0
  36. package/src/components/generics/Organization/Tabs.jsx +45 -0
  37. package/src/components/generics/Text/TextList.jsx +41 -0
  38. package/src/components/generics/Text/TextParagraph.jsx +28 -0
  39. package/src/components/generics/Text/TextQuote.jsx +23 -0
  40. package/src/components/generics/Text/TextTitle.jsx +44 -0
  41. package/src/components/this.me/MeActive.jsx +24 -0
  42. package/src/components/this.me/MeFloating.jsx +183 -0
  43. package/src/components/this.me/MeInactive.jsx +21 -0
  44. package/src/components/this.me/MeListUs.jsx +40 -0
  45. package/src/components/this.me/MeState.jsx +25 -0
  46. package/src/components/this.me/hooks/useMe.js +43 -0
  47. package/src/context/GuiProvider.tsx +243 -0
  48. package/src/gui/atoms/AppBar/AppBar.resolver.tsx +77 -0
  49. package/src/gui/atoms/AppBar/AppBar.stories.tsx +232 -0
  50. package/src/gui/atoms/AppBar/AppBar.tsx +10 -0
  51. package/src/gui/atoms/Box/Box.resolver.tsx +171 -0
  52. package/src/gui/atoms/Box/Box.stories.tsx +271 -0
  53. package/src/gui/atoms/Box/Box.tsx +15 -0
  54. package/src/gui/atoms/Button/Button.resolver.tsx +98 -0
  55. package/src/gui/atoms/Button/Button.stories.tsx +225 -0
  56. package/src/gui/atoms/Button/Button.tsx +40 -0
  57. package/src/gui/atoms/Collapse/Collapse.resolver.tsx +85 -0
  58. package/src/gui/atoms/Collapse/Collapse.stories.tsx +136 -0
  59. package/src/gui/atoms/Collapse/Collapse.tsx +17 -0
  60. package/src/gui/atoms/Divider/Divider.resolver.tsx +95 -0
  61. package/src/gui/atoms/Divider/Divider.stories.tsx +109 -0
  62. package/src/gui/atoms/Divider/Divider.tsx +14 -0
  63. package/src/gui/atoms/Drawer/Drawer.resolver.tsx +116 -0
  64. package/src/gui/atoms/Drawer/Drawer.stories.tsx +229 -0
  65. package/src/gui/atoms/Drawer/Drawer.tsx +8 -0
  66. package/src/gui/atoms/IconButton/IconButton.resolver.tsx +135 -0
  67. package/src/gui/atoms/IconButton/IconButton.stories.tsx +141 -0
  68. package/src/gui/atoms/IconButton/IconButton.tsx +22 -0
  69. package/src/gui/atoms/Link/Link.resolver.tsx +75 -0
  70. package/src/gui/atoms/Link/Link.stories.tsx +164 -0
  71. package/src/gui/atoms/Link/Link.tsx +14 -0
  72. package/src/gui/atoms/List/List.resolver.tsx +95 -0
  73. package/src/gui/atoms/List/List.stories.tsx +143 -0
  74. package/src/gui/atoms/List/List.tsx +20 -0
  75. package/src/gui/atoms/ListItem/ListItem.resolver.tsx +88 -0
  76. package/src/gui/atoms/ListItem/ListItem.stories.tsx +157 -0
  77. package/src/gui/atoms/ListItem/ListItem.tsx +19 -0
  78. package/src/gui/atoms/ListItemButton/ListItemButton.resolver.tsx +208 -0
  79. package/src/gui/atoms/ListItemButton/ListItemButton.stories.tsx +161 -0
  80. package/src/gui/atoms/ListItemButton/ListItemButton.tsx +15 -0
  81. package/src/gui/atoms/ListItemIcon/ListItemIcon.resolver.tsx +102 -0
  82. package/src/gui/atoms/ListItemIcon/ListItemIcon.stories.tsx +135 -0
  83. package/src/gui/atoms/ListItemIcon/ListItemIcon.tsx +11 -0
  84. package/src/gui/atoms/ListItemText/ListItemText.resolver.tsx +112 -0
  85. package/src/gui/atoms/ListItemText/ListItemText.stories.tsx +162 -0
  86. package/src/gui/atoms/ListItemText/ListItemText.tsx +15 -0
  87. package/src/gui/atoms/Menu/Menu.resolver.tsx +112 -0
  88. package/src/gui/atoms/Menu/Menu.stories.tsx +168 -0
  89. package/src/gui/atoms/Menu/Menu.tsx +17 -0
  90. package/src/gui/atoms/MenuItem/MenuItem.resolver.tsx +183 -0
  91. package/src/gui/atoms/MenuItem/MenuItem.stories.tsx +138 -0
  92. package/src/gui/atoms/MenuItem/MenuItem.tsx +14 -0
  93. package/src/gui/atoms/Paper/Paper.resolver.tsx +98 -0
  94. package/src/gui/atoms/Paper/Paper.stories.tsx +191 -0
  95. package/src/gui/atoms/Paper/Paper.tsx +17 -0
  96. package/src/gui/atoms/Stack/Stack.resolver.tsx +94 -0
  97. package/src/gui/atoms/Stack/Stack.stories.tsx +166 -0
  98. package/src/gui/atoms/Stack/Stack.tsx +15 -0
  99. package/src/gui/atoms/Switch/Switch.resolver.tsx +53 -0
  100. package/src/gui/atoms/Switch/Switch.stories.tsx +242 -0
  101. package/src/gui/atoms/Switch/Switch.tsx +22 -0
  102. package/src/gui/atoms/Toolbar/Toolbar.resolver.tsx +60 -0
  103. package/src/gui/atoms/Toolbar/Toolbar.stories.tsx +163 -0
  104. package/src/gui/atoms/Toolbar/Toolbar.tsx +16 -0
  105. package/src/gui/atoms/Tooltip/Tooltip.resolver.tsx +142 -0
  106. package/src/gui/atoms/Tooltip/Tooltip.stories.tsx +118 -0
  107. package/src/gui/atoms/Tooltip/Tooltip.tsx +78 -0
  108. package/src/gui/atoms/Typography/Typography.resolver.tsx +158 -0
  109. package/src/gui/atoms/Typography/Typography.stories.tsx +228 -0
  110. package/src/gui/atoms/Typography/Typography.tsx +27 -0
  111. package/src/gui/atoms.tsx +129 -0
  112. package/src/gui/index.ts +69 -0
  113. package/src/gui/molecules/AppBars/Footer/Footer.resolver.tsx +104 -0
  114. package/src/gui/molecules/AppBars/Footer/Footer.stories.tsx +499 -0
  115. package/src/gui/molecules/AppBars/Footer/Footer.tsx +307 -0
  116. package/src/gui/molecules/AppBars/LeftSidebar/LeftSidebar.resolver.tsx +75 -0
  117. package/src/gui/molecules/AppBars/LeftSidebar/LeftSidebar.stories.tsx +61 -0
  118. package/src/gui/molecules/AppBars/LeftSidebar/LeftSidebar.tsx +511 -0
  119. package/src/gui/molecules/AppBars/LeftSidebar/SidebarToggleButton.tsx +51 -0
  120. package/src/gui/molecules/AppBars/RightSidebar/RightSidebar.resolver.tsx +97 -0
  121. package/src/gui/molecules/AppBars/RightSidebar/RightSidebar.stories.tsx +294 -0
  122. package/src/gui/molecules/AppBars/RightSidebar/RightSidebar.tsx +295 -0
  123. package/src/gui/molecules/AppBars/StickyOptions/StickyOptionsTop.stories.tsx +480 -0
  124. package/src/gui/molecules/AppBars/StickyOptions/StickyOptionsTop.tsx +484 -0
  125. package/src/gui/molecules/AppBars/TopBar/TopBar.resolver.tsx +84 -0
  126. package/src/gui/molecules/AppBars/TopBar/TopBar.stories.tsx +297 -0
  127. package/src/gui/molecules/AppBars/TopBar/TopBar.tsx +299 -0
  128. package/src/gui/molecules/Utilities/ThemeModeToggle/ThemeModeToggle.resolver.tsx +72 -0
  129. package/src/gui/molecules/Utilities/ThemeModeToggle/ThemeModeToggle.stories.tsx +154 -0
  130. package/src/gui/molecules/Utilities/ThemeModeToggle/ThemeModeToggle.tsx +100 -0
  131. package/src/gui/molecules/Utilities/ThemeSelector.jsx +281 -0
  132. package/src/gui/utils/nodeID.ts +8 -0
  133. package/src/index.js +111 -0
  134. package/src/registry/GuiRegistry.ts +19 -0
  135. package/src/registry/factory.ts +12 -0
  136. package/src/registry/index.ts +3 -0
  137. package/src/registry/types.ts +6 -0
  138. package/src/stories/01.Home.mdx +22 -0
  139. package/src/stories/02.Understanding.This.GUI.md +149 -0
  140. package/src/stories/03.Themes.mdx +235 -0
  141. package/src/stories/04.GuiProvider.md +126 -0
  142. package/src/stories/04.GuiProvider.mdx +129 -0
  143. package/src/stories/Theme/BreakPointsAndGrids.stories.jsx +185 -0
  144. package/src/stories/Theme/Colors.stories.jsx +245 -0
  145. package/src/stories/Theme/Icons.stories.jsx +313 -0
  146. package/src/stories/Theme/Motion.stories.jsx +206 -0
  147. package/src/stories/Theme/ShadowAndElevation.stories.jsx +95 -0
  148. package/src/stories/Theme/SpacingAndRadius.stories.jsx +129 -0
  149. package/src/stories/Theme/Typography.stories.jsx +211 -0
  150. package/src/stories/assets/this.GUI.png +0 -0
  151. package/src/templates/BrowserExtension.jsx +56 -0
  152. package/src/templates/Layout.tsx +36 -0
  153. package/src/templates/Minimal.jsx +123 -0
  154. package/src/templates/Shell/Shell.jsx +107 -0
  155. package/src/themes/fromTokens.ts +352 -0
  156. package/src/themes/icons/Icon.tsx +137 -0
  157. package/src/themes/icons/packs/Lucide.ts +72 -0
  158. package/src/themes/icons/packs/Material.ts +87 -0
  159. package/src/themes/icons/registry.tsx +178 -0
  160. package/src/themes/index.js +116 -0
  161. package/src/themes/theme.d.ts +116 -0
  162. package/src/themes/tokens/global.tokens.json +107 -0
  163. package/src/themes/tokens/neurons/dark.tokens.json +45 -0
  164. package/src/themes/tokens/neurons/light.tokens.json +51 -0
  165. package/src/themes/tokens/neurons/manifest.json +23 -0
  166. package/src/types/theme.d.ts +32 -0
  167. package/src/types/viewport.ts +132 -0
  168. package/tsconfig.json +24 -0
  169. package/vite.config.js +74 -0
  170. package/dist/style.css +0 -1
  171. package/src/App.jsx +0 -63
  172. package/src/MdxProvider.jsx +0 -20
  173. package/src/Page.jsx +0 -28
  174. package/src/SiteBuilder.jsx +0 -39
  175. package/src/example.json +0 -43
  176. package/src/index.mdx +0 -164
  177. package/src/main.jsx +0 -15
  178. package/src/scripts/ComponentRegistry.js +0 -70
  179. package/src/scripts/logASCIIArt.js +0 -12
  180. package/src/scripts/postinstall.js +0 -100
  181. package/src/scripts/renderComponents.js +0 -11
  182. package/src/stories/Atoms/Alert/Alert.css +0 -211
  183. package/src/stories/Atoms/Alert/Alert.jsx +0 -56
  184. package/src/stories/Atoms/Alert/Alert.stories.jsx +0 -167
  185. package/src/stories/Atoms/Audio/Audio.css +0 -259
  186. package/src/stories/Atoms/Audio/Audio.jsx +0 -216
  187. package/src/stories/Atoms/Audio/Audio.stories.jsx +0 -191
  188. package/src/stories/Atoms/Badge/Badge.css +0 -249
  189. package/src/stories/Atoms/Badge/Badge.jsx +0 -54
  190. package/src/stories/Atoms/Badge/Badge.stories.jsx +0 -121
  191. package/src/stories/Atoms/Button/Button.css +0 -131
  192. package/src/stories/Atoms/Button/Button.jsx +0 -47
  193. package/src/stories/Atoms/Button/Button.stories.jsx +0 -184
  194. package/src/stories/Atoms/Caption/Caption.css +0 -169
  195. package/src/stories/Atoms/Caption/Caption.jsx +0 -72
  196. package/src/stories/Atoms/Caption/Caption.stories.jsx +0 -207
  197. package/src/stories/Atoms/Checkbox/Checkbox.css +0 -182
  198. package/src/stories/Atoms/Checkbox/Checkbox.jsx +0 -83
  199. package/src/stories/Atoms/Checkbox/Checkbox.stories.jsx +0 -112
  200. package/src/stories/Atoms/Container/Container.css +0 -89
  201. package/src/stories/Atoms/Container/Container.jsx +0 -54
  202. package/src/stories/Atoms/Container/Container.stories.jsx +0 -104
  203. package/src/stories/Atoms/Divider/Divider.css +0 -147
  204. package/src/stories/Atoms/Divider/Divider.jsx +0 -62
  205. package/src/stories/Atoms/Divider/Divider.stories.jsx +0 -105
  206. package/src/stories/Atoms/Grid/Grid.css +0 -160
  207. package/src/stories/Atoms/Grid/Grid.jsx +0 -43
  208. package/src/stories/Atoms/Grid/Grid.stories.jsx +0 -84
  209. package/src/stories/Atoms/Heading/Heading.css +0 -112
  210. package/src/stories/Atoms/Heading/Heading.jsx +0 -69
  211. package/src/stories/Atoms/Heading/Heading.stories.jsx +0 -130
  212. package/src/stories/Atoms/Icon/Icon.css +0 -240
  213. package/src/stories/Atoms/Icon/Icon.jsx +0 -80
  214. package/src/stories/Atoms/Icon/Icon.stories.jsx +0 -177
  215. package/src/stories/Atoms/Image/Image.css +0 -245
  216. package/src/stories/Atoms/Image/Image.jsx +0 -175
  217. package/src/stories/Atoms/Image/Image.stories.jsx +0 -332
  218. package/src/stories/Atoms/Label/Label.css +0 -171
  219. package/src/stories/Atoms/Label/Label.jsx +0 -71
  220. package/src/stories/Atoms/Label/Label.stories.jsx +0 -180
  221. package/src/stories/Atoms/Link/Link.css +0 -71
  222. package/src/stories/Atoms/Link/Link.jsx +0 -82
  223. package/src/stories/Atoms/Link/Link.stories.jsx +0 -153
  224. package/src/stories/Atoms/Loader/Loader.css +0 -106
  225. package/src/stories/Atoms/Loader/Loader.jsx +0 -58
  226. package/src/stories/Atoms/Loader/Loader.stories.jsx +0 -99
  227. package/src/stories/Atoms/Logo/Logo.css +0 -94
  228. package/src/stories/Atoms/Logo/Logo.jsx +0 -53
  229. package/src/stories/Atoms/Logo/Logo.stories.jsx +0 -120
  230. package/src/stories/Atoms/Paragraph/Paragraph.css +0 -180
  231. package/src/stories/Atoms/Paragraph/Paragraph.jsx +0 -77
  232. package/src/stories/Atoms/Paragraph/Paragraph.stories.jsx +0 -143
  233. package/src/stories/Atoms/ProgressBar/ProgressBar.css +0 -127
  234. package/src/stories/Atoms/ProgressBar/ProgressBar.jsx +0 -40
  235. package/src/stories/Atoms/ProgressBar/ProgressBar.stories.jsx +0 -86
  236. package/src/stories/Atoms/RadioButton/RadioButton.css +0 -130
  237. package/src/stories/Atoms/RadioButton/RadioButton.jsx +0 -87
  238. package/src/stories/Atoms/RadioButton/RadioButton.stories.jsx +0 -113
  239. package/src/stories/Atoms/Range/Range.css +0 -169
  240. package/src/stories/Atoms/Range/Range.jsx +0 -87
  241. package/src/stories/Atoms/Range/Range.stories.jsx +0 -110
  242. package/src/stories/Atoms/Section/Section.css +0 -268
  243. package/src/stories/Atoms/Section/Section.jsx +0 -63
  244. package/src/stories/Atoms/Section/Section.stories.jsx +0 -46
  245. package/src/stories/Atoms/Select/Select.css +0 -87
  246. package/src/stories/Atoms/Select/Select.jsx +0 -73
  247. package/src/stories/Atoms/Select/Select.stories.jsx +0 -109
  248. package/src/stories/Atoms/Slider/Slider.css +0 -90
  249. package/src/stories/Atoms/Slider/Slider.jsx +0 -129
  250. package/src/stories/Atoms/Slider/Slider.stories.jsx +0 -90
  251. package/src/stories/Atoms/Snackbar/Snackbar.css +0 -313
  252. package/src/stories/Atoms/Snackbar/Snackbar.jsx +0 -72
  253. package/src/stories/Atoms/Snackbar/Snackbar.stories.jsx +0 -78
  254. package/src/stories/Atoms/Spacer/Spacer.css +0 -114
  255. package/src/stories/Atoms/Spacer/Spacer.jsx +0 -35
  256. package/src/stories/Atoms/Spacer/Spacer.stories.jsx +0 -61
  257. package/src/stories/Atoms/Spinner/Spinner.css +0 -110
  258. package/src/stories/Atoms/Spinner/Spinner.jsx +0 -65
  259. package/src/stories/Atoms/Spinner/Spinner.stories.jsx +0 -58
  260. package/src/stories/Atoms/Tag/Tag.css +0 -112
  261. package/src/stories/Atoms/Tag/Tag.jsx +0 -75
  262. package/src/stories/Atoms/Tag/Tag.stories.jsx +0 -67
  263. package/src/stories/Atoms/TextArea/TextArea.css +0 -99
  264. package/src/stories/Atoms/TextArea/TextArea.jsx +0 -118
  265. package/src/stories/Atoms/TextArea/TextArea.stories.jsx +0 -36
  266. package/src/stories/Atoms/TextInput/TextInput.css +0 -102
  267. package/src/stories/Atoms/TextInput/TextInput.jsx +0 -133
  268. package/src/stories/Atoms/TextInput/TextInput.stories.jsx +0 -69
  269. package/src/stories/Atoms/Toggle/Toggle.css +0 -118
  270. package/src/stories/Atoms/Toggle/Toggle.jsx +0 -69
  271. package/src/stories/Atoms/Toggle/Toggle.stories.jsx +0 -35
  272. package/src/stories/Atoms/Tooltip/Tooltip.css +0 -383
  273. package/src/stories/Atoms/Tooltip/Tooltip.jsx +0 -46
  274. package/src/stories/Atoms/Tooltip/Tooltip.stories.jsx +0 -52
  275. package/src/stories/Atoms/Video/Video.css +0 -39
  276. package/src/stories/Atoms/Video/Video.jsx +0 -78
  277. package/src/stories/Atoms/Video/Video.stories.jsx +0 -41
  278. package/src/stories/Atoms/index.js +0 -72
  279. package/src/stories/Atoms/meta_Atoms.js +0 -51
  280. package/src/stories/Components.js +0 -198
  281. package/src/stories/Getting Started.mdx +0 -239
  282. package/src/stories/Layouts/Accordion/Accordion.css +0 -293
  283. package/src/stories/Layouts/Accordion/Accordion.jsx +0 -74
  284. package/src/stories/Layouts/Accordion/Accordion.stories.jsx +0 -39
  285. package/src/stories/Layouts/Flexbox/Flexbox.css +0 -16
  286. package/src/stories/Layouts/Flexbox/Flexbox.jsx +0 -11
  287. package/src/stories/Layouts/Flexbox/Flexbox.stories.jsx +0 -28
  288. package/src/stories/Layouts/Footer/Footer.css +0 -16
  289. package/src/stories/Layouts/Footer/Footer.jsx +0 -31
  290. package/src/stories/Layouts/Footer/Footer.stories.jsx +0 -28
  291. package/src/stories/Layouts/Header/Header.css +0 -16
  292. package/src/stories/Layouts/Header/Header.jsx +0 -31
  293. package/src/stories/Layouts/Header/Header.stories.jsx +0 -28
  294. package/src/stories/Layouts/HeroBanner/HeroBanner.css +0 -16
  295. package/src/stories/Layouts/HeroBanner/HeroBanner.jsx +0 -31
  296. package/src/stories/Layouts/HeroBanner/HeroBanner.stories.jsx +0 -28
  297. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.css +0 -16
  298. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.jsx +0 -31
  299. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.stories.jsx +0 -28
  300. package/src/stories/Layouts/Pagination/Pagination.css +0 -16
  301. package/src/stories/Layouts/Pagination/Pagination.jsx +0 -31
  302. package/src/stories/Layouts/Pagination/Pagination.stories.jsx +0 -28
  303. package/src/stories/Layouts/Sidebar/Sidebar.css +0 -16
  304. package/src/stories/Layouts/Sidebar/Sidebar.jsx +0 -71
  305. package/src/stories/Layouts/Sidebar/Sidebar.stories.jsx +0 -28
  306. package/src/stories/Layouts/Tabs/Tabs.css +0 -16
  307. package/src/stories/Layouts/Tabs/Tabs.jsx +0 -31
  308. package/src/stories/Layouts/Tabs/Tabs.stories.jsx +0 -28
  309. package/src/stories/Layouts/index.js +0 -25
  310. package/src/stories/Layouts/meta_Layouts.js +0 -28
  311. package/src/stories/MDX.mdx +0 -118
  312. package/src/stories/Miscellaneous/Miscellaneous.js +0 -24
  313. package/src/stories/Molecules/Accordion/Accordion.css +0 -4
  314. package/src/stories/Molecules/Accordion/Accordion.jsx +0 -25
  315. package/src/stories/Molecules/Accordion/Accordion.stories.jsx +0 -20
  316. package/src/stories/Molecules/AudioPlayer/AudioPlayer.css +0 -97
  317. package/src/stories/Molecules/AudioPlayer/AudioPlayer.jsx +0 -244
  318. package/src/stories/Molecules/AudioPlayer/AudioPlayer.stories.jsx +0 -55
  319. package/src/stories/Molecules/AvatarWithName/AvatarWithName.css +0 -130
  320. package/src/stories/Molecules/AvatarWithName/AvatarWithName.jsx +0 -80
  321. package/src/stories/Molecules/AvatarWithName/AvatarWithName.stories.jsx +0 -20
  322. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.css +0 -147
  323. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.jsx +0 -51
  324. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.stories.jsx +0 -36
  325. package/src/stories/Molecules/ButtonGroup/ButtonGroup.css +0 -465
  326. package/src/stories/Molecules/ButtonGroup/ButtonGroup.jsx +0 -47
  327. package/src/stories/Molecules/ButtonGroup/ButtonGroup.stories.jsx +0 -44
  328. package/src/stories/Molecules/Card/Card.css +0 -41
  329. package/src/stories/Molecules/Card/Card.jsx +0 -92
  330. package/src/stories/Molecules/Card/Card.stories.jsx +0 -34
  331. package/src/stories/Molecules/ComparisonTable/ComparisonTable.css +0 -35
  332. package/src/stories/Molecules/ComparisonTable/ComparisonTable.jsx +0 -104
  333. package/src/stories/Molecules/ComparisonTable/ComparisonTable.stories.jsx +0 -81
  334. package/src/stories/Molecules/DataTable/DataTable.css +0 -4
  335. package/src/stories/Molecules/DataTable/DataTable.jsx +0 -25
  336. package/src/stories/Molecules/DataTable/DataTable.stories.jsx +0 -20
  337. package/src/stories/Molecules/Dropdown/Dropdown.css +0 -192
  338. package/src/stories/Molecules/Dropdown/Dropdown.jsx +0 -96
  339. package/src/stories/Molecules/Dropdown/Dropdown.stories.jsx +0 -45
  340. package/src/stories/Molecules/FileUpload/FileUpload.css +0 -4
  341. package/src/stories/Molecules/FileUpload/FileUpload.jsx +0 -25
  342. package/src/stories/Molecules/FileUpload/FileUpload.stories.jsx +0 -20
  343. package/src/stories/Molecules/FormField/FormField.css +0 -4
  344. package/src/stories/Molecules/FormField/FormField.jsx +0 -25
  345. package/src/stories/Molecules/FormField/FormField.stories.jsx +0 -20
  346. package/src/stories/Molecules/Header/Header.css +0 -35
  347. package/src/stories/Molecules/Header/Header.jsx +0 -76
  348. package/src/stories/Molecules/Header/Header.stories.jsx +0 -28
  349. package/src/stories/Molecules/IconButton/IconButton.css +0 -4
  350. package/src/stories/Molecules/IconButton/IconButton.jsx +0 -25
  351. package/src/stories/Molecules/IconButton/IconButton.stories.jsx +0 -20
  352. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.css +0 -4
  353. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.jsx +0 -25
  354. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.stories.jsx +0 -20
  355. package/src/stories/Molecules/InputGroup/InputGroup.css +0 -4
  356. package/src/stories/Molecules/InputGroup/InputGroup.jsx +0 -25
  357. package/src/stories/Molecules/InputGroup/InputGroup.stories.jsx +0 -20
  358. package/src/stories/Molecules/InputWithLabel/InputWithLabel.css +0 -4
  359. package/src/stories/Molecules/InputWithLabel/InputWithLabel.jsx +0 -25
  360. package/src/stories/Molecules/InputWithLabel/InputWithLabel.stories.jsx +0 -20
  361. package/src/stories/Molecules/List/List.css +0 -4
  362. package/src/stories/Molecules/List/List.jsx +0 -25
  363. package/src/stories/Molecules/List/List.stories.jsx +0 -20
  364. package/src/stories/Molecules/MediaCard/MediaCard.css +0 -4
  365. package/src/stories/Molecules/MediaCard/MediaCard.jsx +0 -25
  366. package/src/stories/Molecules/MediaCard/MediaCard.stories.jsx +0 -20
  367. package/src/stories/Molecules/Modal/Modal.css +0 -4
  368. package/src/stories/Molecules/Modal/Modal.jsx +0 -25
  369. package/src/stories/Molecules/Modal/Modal.stories.jsx +0 -20
  370. package/src/stories/Molecules/Navbar/Navbar.css +0 -91
  371. package/src/stories/Molecules/Navbar/Navbar.jsx +0 -82
  372. package/src/stories/Molecules/Navbar/Navbar.stories.jsx +0 -70
  373. package/src/stories/Molecules/Notification/Notification.css +0 -4
  374. package/src/stories/Molecules/Notification/Notification.jsx +0 -25
  375. package/src/stories/Molecules/Notification/Notification.stories.jsx +0 -20
  376. package/src/stories/Molecules/PricingTable/PricingTable.css +0 -4
  377. package/src/stories/Molecules/PricingTable/PricingTable.jsx +0 -25
  378. package/src/stories/Molecules/PricingTable/PricingTable.stories.jsx +0 -20
  379. package/src/stories/Molecules/SearchBar/SearchBar.css +0 -69
  380. package/src/stories/Molecules/SearchBar/SearchBar.jsx +0 -73
  381. package/src/stories/Molecules/SearchBar/SearchBar.stories.jsx +0 -29
  382. package/src/stories/Molecules/SelectTheme/SelectTheme.css +0 -25
  383. package/src/stories/Molecules/SelectTheme/SelectTheme.jsx +0 -22
  384. package/src/stories/Molecules/SelectTheme/SelectTheme.stories.jsx +0 -24
  385. package/src/stories/Molecules/Sidebar/Sidebar.css +0 -67
  386. package/src/stories/Molecules/Sidebar/Sidebar.jsx +0 -80
  387. package/src/stories/Molecules/Sidebar/Sidebar.stories.jsx +0 -35
  388. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.css +0 -4
  389. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.jsx +0 -25
  390. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.stories.jsx +0 -20
  391. package/src/stories/Molecules/index.js +0 -58
  392. package/src/stories/Molecules/meta_Molecules.js +0 -47
  393. package/src/stories/Organisms/Profile/UserFriends/UserFriends.context.jsx +0 -15
  394. package/src/stories/Organisms/Profile/UserFriends/UserFriends.css +0 -4
  395. package/src/stories/Organisms/Profile/UserFriends/UserFriends.jsx +0 -13
  396. package/src/stories/Organisms/Profile/UserFriends/UserFriends.stories.jsx +0 -26
  397. package/src/stories/Organisms/Profile/UserPosts/UserPosts.context.jsx +0 -15
  398. package/src/stories/Organisms/Profile/UserPosts/UserPosts.css +0 -4
  399. package/src/stories/Organisms/Profile/UserPosts/UserPosts.jsx +0 -13
  400. package/src/stories/Organisms/Profile/UserPosts/UserPosts.stories.jsx +0 -26
  401. package/src/stories/Organisms/Profile/UserProfile/UserProfile.context.jsx +0 -15
  402. package/src/stories/Organisms/Profile/UserProfile/UserProfile.css +0 -4
  403. package/src/stories/Organisms/Profile/UserProfile/UserProfile.jsx +0 -13
  404. package/src/stories/Organisms/Profile/UserProfile/UserProfile.stories.jsx +0 -26
  405. package/src/stories/Organisms/meta_Organisms.js +0 -39
  406. package/src/stories/Pages/Page/Page.css +0 -69
  407. package/src/stories/Pages/Page/Page.jsx +0 -69
  408. package/src/stories/Pages/Page/Page.stories.js +0 -26
  409. package/src/stories/Pages/Page/Pages.js +0 -31
  410. package/src/stories/Templates/AdminDashboard/AdminDashboard.css +0 -7
  411. package/src/stories/Templates/AdminDashboard/AdminDashboard.jsx +0 -24
  412. package/src/stories/Templates/AdminDashboard/AdminDashboard.stories.jsx +0 -20
  413. package/src/stories/Templates/CallToAction/CallToAction.css +0 -7
  414. package/src/stories/Templates/CallToAction/CallToAction.jsx +0 -24
  415. package/src/stories/Templates/CallToAction/CallToAction.stories.jsx +0 -20
  416. package/src/stories/Templates/FeaturesList/FeaturesList.css +0 -7
  417. package/src/stories/Templates/FeaturesList/FeaturesList.jsx +0 -24
  418. package/src/stories/Templates/FeaturesList/FeaturesList.stories.jsx +0 -20
  419. package/src/stories/Templates/FormSection/FormSection.css +0 -7
  420. package/src/stories/Templates/FormSection/FormSection.jsx +0 -24
  421. package/src/stories/Templates/FormSection/FormSection.stories.jsx +0 -20
  422. package/src/stories/Templates/HeroSection/HeroSection.css +0 -7
  423. package/src/stories/Templates/HeroSection/HeroSection.jsx +0 -24
  424. package/src/stories/Templates/HeroSection/HeroSection.stories.jsx +0 -20
  425. package/src/stories/Templates/LocationInfo/LocationInfo.css +0 -7
  426. package/src/stories/Templates/LocationInfo/LocationInfo.jsx +0 -24
  427. package/src/stories/Templates/LocationInfo/LocationInfo.stories.jsx +0 -20
  428. package/src/stories/Templates/ProductPage/ProductPage.css +0 -7
  429. package/src/stories/Templates/ProductPage/ProductPage.jsx +0 -24
  430. package/src/stories/Templates/ProductPage/ProductPage.stories.jsx +0 -20
  431. package/src/stories/Templates/RegistrationPage/RegistrationPage.css +0 -7
  432. package/src/stories/Templates/RegistrationPage/RegistrationPage.jsx +0 -24
  433. package/src/stories/Templates/RegistrationPage/RegistrationPage.stories.jsx +0 -20
  434. package/src/stories/Templates/ShoppingCart/ShoppingCart.css +0 -7
  435. package/src/stories/Templates/ShoppingCart/ShoppingCart.jsx +0 -24
  436. package/src/stories/Templates/ShoppingCart/ShoppingCart.stories.jsx +0 -20
  437. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.css +0 -7
  438. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.jsx +0 -24
  439. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.stories.jsx +0 -20
  440. package/src/stories/Templates/SignInPage/SignInPage.css +0 -7
  441. package/src/stories/Templates/SignInPage/SignInPage.jsx +0 -24
  442. package/src/stories/Templates/SignInPage/SignInPage.stories.jsx +0 -20
  443. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.css +0 -7
  444. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.jsx +0 -24
  445. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.stories.jsx +0 -20
  446. package/src/stories/Templates/Testimonials/Testimonials.css +0 -7
  447. package/src/stories/Templates/Testimonials/Testimonials.jsx +0 -24
  448. package/src/stories/Templates/Testimonials/Testimonials.stories.jsx +0 -20
  449. package/src/stories/Templates/index.js +0 -33
  450. package/src/stories/Templates/meta_Templates.js +0 -29
  451. package/src/stories/assets/accessibility.png +0 -0
  452. package/src/stories/assets/accessibility.svg +0 -1
  453. package/src/stories/assets/addon-library.png +0 -0
  454. package/src/stories/assets/assets.png +0 -0
  455. package/src/stories/assets/avif-test-image.avif +0 -0
  456. package/src/stories/assets/context.png +0 -0
  457. package/src/stories/assets/discord.svg +0 -1
  458. package/src/stories/assets/docs.png +0 -0
  459. package/src/stories/assets/figma-plugin.png +0 -0
  460. package/src/stories/assets/github.svg +0 -1
  461. package/src/stories/assets/logo.png +0 -0
  462. package/src/stories/assets/logo.svg +0 -106
  463. package/src/stories/assets/share.png +0 -0
  464. package/src/stories/assets/styling.png +0 -0
  465. package/src/stories/assets/test.svg +0 -3
  466. package/src/stories/assets/testing.png +0 -0
  467. package/src/stories/assets/theming.png +0 -0
  468. package/src/stories/assets/tutorials.svg +0 -1
  469. package/src/stories/assets/youtube.svg +0 -1
  470. package/src/themes/README_Styles.md +0 -301
  471. package/src/themes/ThemeProvider.jsx +0 -61
  472. package/src/themes/styles/github/dark.css +0 -0
  473. package/src/themes/styles/github/light.css +0 -0
  474. package/src/themes/styles/neurons/dark.css +0 -247
  475. package/src/themes/styles/neurons/light.css +0 -280
  476. /package/{src/themes/styles/dracula/dark.css → .storybook/preview-head.html} +0 -0
  477. /package/src/{themes/styles/dracula/light.css → components/this.me/MeCard.jsx} +0 -0
@@ -0,0 +1,109 @@
1
+ import React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { Divider, Box, Typography, Stack } from '@/gui/atoms';
4
+
5
+ const meta: Meta<typeof Divider> = {
6
+ title: 'Atoms/Divider',
7
+ component: Divider,
8
+ tags: ['autodocs'],
9
+ parameters: {
10
+ docs: {
11
+ description: {
12
+ component:
13
+ 'The Divider component is a thin wrapper over MUI\'s `MuiDivider`. It preserves all props and allows styling via the `sx` prop.',
14
+ },
15
+ },
16
+ },
17
+ argTypes: {
18
+ orientation: {
19
+ control: { type: 'radio' },
20
+ options: ['horizontal', 'vertical'],
21
+ description: 'The divider orientation.',
22
+ },
23
+ variant: {
24
+ control: { type: 'radio' },
25
+ options: ['fullWidth', 'inset', 'middle'],
26
+ description: 'The variant to use.',
27
+ },
28
+ flexItem: {
29
+ control: { type: 'boolean' },
30
+ description: 'If true, the divider is a flex item.',
31
+ },
32
+ },
33
+ args: {
34
+ orientation: 'horizontal',
35
+ variant: 'fullWidth',
36
+ flexItem: false,
37
+ },
38
+ };
39
+
40
+ export default meta;
41
+ type Story = StoryObj<typeof Divider>;
42
+
43
+ export const Playground: Story = {
44
+ render: (args) => (
45
+ <Stack spacing={2} sx={{ width: 300 }}>
46
+ <Typography>Item One</Typography>
47
+ <Divider {...args} />
48
+ <Typography>Item Two</Typography>
49
+ <Divider {...args} />
50
+ <Typography>Item Three</Typography>
51
+ </Stack>
52
+ ),
53
+ parameters: {
54
+ docs: {
55
+ description: {
56
+ story: 'Demonstrates the Divider component with customizable props in a vertical stack.',
57
+ },
58
+ },
59
+ },
60
+ };
61
+
62
+ export const VerticalDivider: Story = {
63
+ render: () => (
64
+ <Stack direction="row" spacing={2} alignItems="center" sx={{ height: 100 }}>
65
+ <Typography>Left</Typography>
66
+ <Divider orientation="vertical" flexItem />
67
+ <Typography>Right</Typography>
68
+ </Stack>
69
+ ),
70
+ parameters: {
71
+ docs: {
72
+ description: {
73
+ story: 'Shows a vertical divider between two items in a horizontal stack.',
74
+ },
75
+ },
76
+ },
77
+ };
78
+
79
+ export const InsetDivider: Story = {
80
+ render: () => (
81
+ <Stack spacing={2} sx={{ width: 300 }}>
82
+ <Typography>First</Typography>
83
+ <Divider variant="inset" />
84
+ <Typography>Second</Typography>
85
+ </Stack>
86
+ ),
87
+ parameters: {
88
+ docs: {
89
+ description: {
90
+ story: 'Demonstrates the inset variant of the Divider between text items.',
91
+ },
92
+ },
93
+ },
94
+ };
95
+
96
+ export const TextDivider: Story = {
97
+ render: () => (
98
+ <Box sx={{ width: 300 }}>
99
+ <Divider>Text Content</Divider>
100
+ </Box>
101
+ ),
102
+ parameters: {
103
+ docs: {
104
+ description: {
105
+ story: 'Shows a divider with text content in the middle.',
106
+ },
107
+ },
108
+ },
109
+ };
@@ -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/atoms';
4
+ import type { RegistryEntry } from '@/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;
@@ -0,0 +1,229 @@
1
+ import * as React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { Drawer, Box, Button, Typography } from '@/gui/atoms';
4
+ import { MemoryRouter } from 'react-router-dom';
5
+ import GuiProvider from '@/context/GuiProvider';
6
+ // ======================= Meta =======================
7
+ const meta: Meta<typeof Drawer> = {
8
+ title: 'Atoms/Drawer',
9
+ component: Drawer,
10
+ tags: ['autodocs'],
11
+ decorators: [
12
+ (Story) => (
13
+ <MemoryRouter>
14
+ <GuiProvider>
15
+ <div style={{ padding: 16, minHeight: 320 }}>
16
+ <Story />
17
+ </div>
18
+ </GuiProvider>
19
+ </MemoryRouter>
20
+ ),
21
+ ],
22
+ parameters: {
23
+ docs: {
24
+ description: {
25
+ component: `
26
+ 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\`.
27
+
28
+ ---
29
+ ## Features
30
+ - Variants: \`temporary\`, \`persistent\`, \`permanent\`.
31
+ - Anchors: \`left\`, \`right\`, \`top\`, \`bottom\`.
32
+ - Works with This.GUI theme (via \`GuiProvider\`).
33
+ - Accepts \`sx\` and \`PaperProps\` for styling the surface.
34
+
35
+ > Note: For \`temporary\` drawers, you control visibility with the \`open\` prop and \`onClose\`.
36
+ > For \`permanent\` drawers, \`open\` is ignored by MUI; the drawer is always visible.
37
+
38
+ ---
39
+ ## Basic usage
40
+ ~~~tsx
41
+ import { Drawer } from '@/gui/primitives';
42
+
43
+ <Drawer anchor="left" variant="temporary" open={open} onClose={() => setOpen(false)}>
44
+ <div style={{ width: 260, padding: 16 }}>Content</div>
45
+ </Drawer>
46
+ ~~~
47
+
48
+ ## Permanent sidebar
49
+ ~~~tsx
50
+ <Drawer anchor="left" variant="permanent" PaperProps={{ sx: { width: 260 } }}>
51
+ <div style={{ width: 260, padding: 16 }}>Navigation</div>
52
+ </Drawer>
53
+ ~~~
54
+
55
+ ## Declarative JSON / Config
56
+ ~~~json
57
+ {
58
+ "type": "Drawer",
59
+ "props": {
60
+ "variant": "temporary",
61
+ "anchor": "right",
62
+ "PaperProps": { "sx": { "width": 300 } },
63
+ "children": "<YourMenu />"
64
+ }
65
+ }
66
+ ~~~
67
+
68
+ When used via your registry/resolver, the object above is resolved into a live Drawer with the provided props.
69
+ `,
70
+ },
71
+ },
72
+ },
73
+ argTypes: {
74
+ variant: {
75
+ control: { type: 'radio' },
76
+ options: ['temporary', 'persistent', 'permanent'],
77
+ },
78
+ anchor: {
79
+ control: { type: 'radio' },
80
+ options: ['left', 'right', 'top', 'bottom'],
81
+ },
82
+ open: {
83
+ control: { type: 'boolean' },
84
+ description: 'Only relevant for temporary/persistent variants.',
85
+ },
86
+ // Not useful as a control in SB; better shown in examples
87
+ container: { table: { disable: true } },
88
+ },
89
+ args: {
90
+ variant: 'temporary',
91
+ anchor: 'left',
92
+ open: false,
93
+ },
94
+ };
95
+ export default meta;
96
+
97
+ type Story = StoryObj<typeof Drawer>;
98
+
99
+ // ======================= Helpers =======================
100
+ const DemoList = ({ label = 'Menu' }: { label?: string }) => (
101
+ <Box sx={{ width: 260, p: 2 }}>
102
+ <Typography variant="subtitle1" sx={{ mb: 1.5 }}>{label}</Typography>
103
+ <ul style={{ margin: 0, paddingLeft: 16, lineHeight: 1.9 }}>
104
+ <li><a href="#">Item one</a></li>
105
+ <li><a href="#">Item two</a></li>
106
+ <li><a href="#">Item three</a></li>
107
+ </ul>
108
+ </Box>
109
+ );
110
+
111
+ // ======================= Stories =======================
112
+
113
+ export const Playground: Story = {
114
+ render: (args) => (
115
+ <>
116
+ <Typography variant="body1" sx={{ mb: 1 }}>
117
+ Toggle <strong>open</strong> in controls (temporary/persistent).
118
+ </Typography>
119
+ <Drawer {...args}>
120
+ <DemoList />
121
+ </Drawer>
122
+ </>
123
+ ),
124
+ };
125
+
126
+ export const TemporaryWithToggle: Story = {
127
+ name: 'Temporary (with toggle button)',
128
+ render: () => {
129
+ const [open, setOpen] = React.useState(false);
130
+ return (
131
+ <>
132
+ <Button variant="contained" color="primary" onClick={() => setOpen(true)}>
133
+ Open drawer
134
+ </Button>
135
+ <Drawer
136
+ anchor="left"
137
+ variant="temporary"
138
+ open={open}
139
+ onClose={() => setOpen(false)}
140
+ ModalProps={{ keepMounted: true }}
141
+ >
142
+ <DemoList label="Temporary drawer" />
143
+ </Drawer>
144
+ </>
145
+ );
146
+ },
147
+ };
148
+
149
+ export const PermanentLeft: Story = {
150
+ name: 'Permanent (left)',
151
+ render: () => (
152
+ <div style={{ display: 'flex', minHeight: 320 }}>
153
+ <Drawer
154
+ anchor="left"
155
+ variant="permanent"
156
+ PaperProps={{ sx: { width: 240, position: 'relative' } }}
157
+ >
158
+ <DemoList label="Permanent left" />
159
+ </Drawer>
160
+ <Box sx={{ flex: 1, p: 2 }}>
161
+ <Typography variant="h6" sx={{ mb: 1 }}>Content area</Typography>
162
+ <Typography variant="body2">
163
+ The permanent drawer is always visible and does not use the <code>open</code> prop.
164
+ </Typography>
165
+ </Box>
166
+ </div>
167
+ ),
168
+ };
169
+
170
+ export const RightAnchorTemporary: Story = {
171
+ name: 'Temporary (right anchor)',
172
+ render: () => {
173
+ const [open, setOpen] = React.useState(false);
174
+ return (
175
+ <>
176
+ <Button variant="outlined" onClick={() => setOpen(true)}>
177
+ Open right drawer
178
+ </Button>
179
+ <Drawer
180
+ anchor="right"
181
+ variant="temporary"
182
+ open={open}
183
+ onClose={() => setOpen(false)}
184
+ PaperProps={{ sx: { width: 300 } }}
185
+ >
186
+ <DemoList label="Right side" />
187
+ </Drawer>
188
+ </>
189
+ );
190
+ },
191
+ };
192
+
193
+ export const TopAndBottom: Story = {
194
+ name: 'Top & bottom anchors',
195
+ render: () => {
196
+ const [openTop, setOpenTop] = React.useState(false);
197
+ const [openBottom, setOpenBottom] = React.useState(false);
198
+ return (
199
+ <>
200
+ <div style={{ display: 'flex', gap: 12, marginBottom: 12 }}>
201
+ <Button variant="outlined" onClick={() => setOpenTop(true)}>Open top</Button>
202
+ <Button variant="outlined" onClick={() => setOpenBottom(true)}>Open bottom</Button>
203
+ </div>
204
+ <Drawer
205
+ anchor="top"
206
+ variant="temporary"
207
+ open={openTop}
208
+ onClose={() => setOpenTop(false)}
209
+ PaperProps={{ sx: { height: 200 } }}
210
+ >
211
+ <Box sx={{ p: 2 }}>
212
+ <Typography variant="subtitle1">Top drawer</Typography>
213
+ </Box>
214
+ </Drawer>
215
+ <Drawer
216
+ anchor="bottom"
217
+ variant="temporary"
218
+ open={openBottom}
219
+ onClose={() => setOpenBottom(false)}
220
+ PaperProps={{ sx: { height: 200 } }}
221
+ >
222
+ <Box sx={{ p: 2 }}>
223
+ <Typography variant="subtitle1">Bottom drawer</Typography>
224
+ </Box>
225
+ </Drawer>
226
+ </>
227
+ );
228
+ },
229
+ };
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import MuiDrawer from '@mui/material/Drawer';
3
+ export type DrawerProps = React.ComponentProps<typeof MuiDrawer>;
4
+ export const Drawer = React.forwardRef<HTMLDivElement, DrawerProps>(function Drawer(props, ref) {
5
+ return <MuiDrawer ref={ref} {...props} />;
6
+ });
7
+
8
+ export default Drawer;
@@ -0,0 +1,135 @@
1
+ // src/gui/atoms/IconButton/IconButton.resolver.tsx
2
+ import * as React from 'react';
3
+ import IconButton from './IconButton';
4
+ import Icon from '@/themes/icons/Icon';
5
+ import Link from '../Link/Link';
6
+ import type { RegistryEntry, ResolveCtx } from '@/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
+ iconSx?: SxProps<Theme>;
41
+ iconProps?: Record<string, any>;
42
+
43
+ // MUI props passthrough (subset; others go via index signature)
44
+ color?:
45
+ | 'inherit'
46
+ | 'default'
47
+ | 'primary'
48
+ | 'secondary'
49
+ | 'success'
50
+ | 'error'
51
+ | 'info'
52
+ | 'warning';
53
+ size?: 'small' | 'medium' | 'large';
54
+ edge?: 'start' | 'end' | false;
55
+ disabled?: boolean;
56
+
57
+ // Styling
58
+ sx?: SxProps<Theme>;
59
+ className?: string;
60
+ id?: string;
61
+ 'data-testid'?: string;
62
+
63
+ // Arbitrary passthrough (MUI will validate)
64
+ [key: string]: any;
65
+ };
66
+ };
67
+
68
+ const IconButtonResolver: RegistryEntry = {
69
+ type: 'IconButton',
70
+ resolve(spec: IconButtonSpec, _ctx?: ResolveCtx) {
71
+ const p = spec.props ?? {};
72
+ const nodeId = ensureNodeId('iconbutton', p.id as string | undefined);
73
+
74
+ // Decide polymorphic target
75
+ const component =
76
+ p.component ??
77
+ p.as ??
78
+ (p.to ? Link : (p.href || p.external) ? 'a' : undefined);
79
+
80
+ // Routing / anchor props
81
+ const routingProps =
82
+ component === 'a' || p.external
83
+ ? {
84
+ href: p.href,
85
+ target: p.target ?? (p.external ? '_blank' : undefined),
86
+ rel: p.rel ?? (p.external ? 'noopener noreferrer' : undefined),
87
+ }
88
+ : component === Link || (p.to && !p.component)
89
+ ? { to: p.to }
90
+ : {};
91
+
92
+ // Prepare children (icon sugar)
93
+ const { children, icon, iconSx, iconProps } = p;
94
+ const normalizedToken =
95
+ typeof icon === 'string' ? icon.trim().toLowerCase() : null;
96
+
97
+ const effectiveChildren =
98
+ children ??
99
+ (normalizedToken ? (
100
+ <Icon name={normalizedToken} sx={iconSx} {...(iconProps || {})} />
101
+ ) : (
102
+ icon ?? null
103
+ ));
104
+
105
+ // Collect & strip resolver-only keys so they don't leak to DOM
106
+ const {
107
+ as: _as,
108
+ to: _to,
109
+ href: _href,
110
+ external: _external,
111
+ target: _target,
112
+ rel: _rel,
113
+ icon: _icon,
114
+ iconSx: _iconSx,
115
+ iconProps: _iconProps,
116
+ ...rest
117
+ } = p;
118
+
119
+ return (
120
+ <IconButton
121
+ {...(component ? { component } : {})}
122
+ sx={p.sx}
123
+ className={p.className}
124
+ id={nodeId}
125
+ data-testid={p['data-testid']}
126
+ {...routingProps}
127
+ {...rest}
128
+ >
129
+ {effectiveChildren}
130
+ </IconButton>
131
+ );
132
+ },
133
+ };
134
+
135
+ export default IconButtonResolver;