this.gui 1.0.18 → 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 (480) 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 -5056
  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 -54
  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 -39
  172. package/src/CreatePage.jsx +0 -61
  173. package/src/MDXEditor.jsx +0 -51
  174. package/src/MdxProvider.jsx +0 -20
  175. package/src/Page.jsx +0 -28
  176. package/src/PageDashboard.jsx +0 -56
  177. package/src/SiteBuilder.jsx +0 -108
  178. package/src/example.json +0 -43
  179. package/src/index.mdx +0 -164
  180. package/src/main.jsx +0 -15
  181. package/src/scripts/ComponentRegistry.js +0 -70
  182. package/src/scripts/logASCIIArt.js +0 -12
  183. package/src/scripts/postinstall.js +0 -111
  184. package/src/scripts/renderComponents.js +0 -11
  185. package/src/stories/Atoms/Alert/Alert.css +0 -211
  186. package/src/stories/Atoms/Alert/Alert.jsx +0 -56
  187. package/src/stories/Atoms/Alert/Alert.stories.jsx +0 -167
  188. package/src/stories/Atoms/Audio/Audio.css +0 -259
  189. package/src/stories/Atoms/Audio/Audio.jsx +0 -216
  190. package/src/stories/Atoms/Audio/Audio.stories.jsx +0 -191
  191. package/src/stories/Atoms/Badge/Badge.css +0 -249
  192. package/src/stories/Atoms/Badge/Badge.jsx +0 -54
  193. package/src/stories/Atoms/Badge/Badge.stories.jsx +0 -121
  194. package/src/stories/Atoms/Button/Button.css +0 -332
  195. package/src/stories/Atoms/Button/Button.jsx +0 -44
  196. package/src/stories/Atoms/Button/Button.stories.jsx +0 -209
  197. package/src/stories/Atoms/Caption/Caption.css +0 -169
  198. package/src/stories/Atoms/Caption/Caption.jsx +0 -72
  199. package/src/stories/Atoms/Caption/Caption.stories.jsx +0 -207
  200. package/src/stories/Atoms/Checkbox/Checkbox.css +0 -182
  201. package/src/stories/Atoms/Checkbox/Checkbox.jsx +0 -83
  202. package/src/stories/Atoms/Checkbox/Checkbox.stories.jsx +0 -112
  203. package/src/stories/Atoms/Container/Container.css +0 -470
  204. package/src/stories/Atoms/Container/Container.jsx +0 -116
  205. package/src/stories/Atoms/Container/Container.stories.jsx +0 -145
  206. package/src/stories/Atoms/Divider/Divider.css +0 -147
  207. package/src/stories/Atoms/Divider/Divider.jsx +0 -62
  208. package/src/stories/Atoms/Divider/Divider.stories.jsx +0 -105
  209. package/src/stories/Atoms/Grid/Grid.css +0 -160
  210. package/src/stories/Atoms/Grid/Grid.jsx +0 -43
  211. package/src/stories/Atoms/Grid/Grid.stories.jsx +0 -84
  212. package/src/stories/Atoms/Heading/Heading.css +0 -112
  213. package/src/stories/Atoms/Heading/Heading.jsx +0 -69
  214. package/src/stories/Atoms/Heading/Heading.stories.jsx +0 -130
  215. package/src/stories/Atoms/Icon/Icon.css +0 -240
  216. package/src/stories/Atoms/Icon/Icon.jsx +0 -80
  217. package/src/stories/Atoms/Icon/Icon.stories.jsx +0 -177
  218. package/src/stories/Atoms/Image/Image.css +0 -245
  219. package/src/stories/Atoms/Image/Image.jsx +0 -175
  220. package/src/stories/Atoms/Image/Image.stories.jsx +0 -332
  221. package/src/stories/Atoms/Label/Label.css +0 -171
  222. package/src/stories/Atoms/Label/Label.jsx +0 -71
  223. package/src/stories/Atoms/Label/Label.stories.jsx +0 -180
  224. package/src/stories/Atoms/Link/Link.css +0 -51
  225. package/src/stories/Atoms/Link/Link.jsx +0 -72
  226. package/src/stories/Atoms/Link/Link.stories.jsx +0 -153
  227. package/src/stories/Atoms/Loader/Loader.css +0 -106
  228. package/src/stories/Atoms/Loader/Loader.jsx +0 -58
  229. package/src/stories/Atoms/Loader/Loader.stories.jsx +0 -99
  230. package/src/stories/Atoms/Logo/Logo.css +0 -94
  231. package/src/stories/Atoms/Logo/Logo.jsx +0 -53
  232. package/src/stories/Atoms/Logo/Logo.stories.jsx +0 -120
  233. package/src/stories/Atoms/Paragraph/Paragraph.css +0 -180
  234. package/src/stories/Atoms/Paragraph/Paragraph.jsx +0 -77
  235. package/src/stories/Atoms/Paragraph/Paragraph.stories.jsx +0 -143
  236. package/src/stories/Atoms/ProgressBar/ProgressBar.css +0 -127
  237. package/src/stories/Atoms/ProgressBar/ProgressBar.jsx +0 -40
  238. package/src/stories/Atoms/ProgressBar/ProgressBar.stories.jsx +0 -86
  239. package/src/stories/Atoms/RadioButton/RadioButton.css +0 -130
  240. package/src/stories/Atoms/RadioButton/RadioButton.jsx +0 -87
  241. package/src/stories/Atoms/RadioButton/RadioButton.stories.jsx +0 -113
  242. package/src/stories/Atoms/Range/Range.css +0 -169
  243. package/src/stories/Atoms/Range/Range.jsx +0 -87
  244. package/src/stories/Atoms/Range/Range.stories.jsx +0 -110
  245. package/src/stories/Atoms/Section/Section.css +0 -268
  246. package/src/stories/Atoms/Section/Section.jsx +0 -63
  247. package/src/stories/Atoms/Section/Section.stories.jsx +0 -46
  248. package/src/stories/Atoms/Select/Select.css +0 -87
  249. package/src/stories/Atoms/Select/Select.jsx +0 -73
  250. package/src/stories/Atoms/Select/Select.stories.jsx +0 -109
  251. package/src/stories/Atoms/Slider/Slider.css +0 -90
  252. package/src/stories/Atoms/Slider/Slider.jsx +0 -129
  253. package/src/stories/Atoms/Slider/Slider.stories.jsx +0 -90
  254. package/src/stories/Atoms/Snackbar/Snackbar.css +0 -313
  255. package/src/stories/Atoms/Snackbar/Snackbar.jsx +0 -72
  256. package/src/stories/Atoms/Snackbar/Snackbar.stories.jsx +0 -78
  257. package/src/stories/Atoms/Spacer/Spacer.css +0 -114
  258. package/src/stories/Atoms/Spacer/Spacer.jsx +0 -35
  259. package/src/stories/Atoms/Spacer/Spacer.stories.jsx +0 -61
  260. package/src/stories/Atoms/Spinner/Spinner.css +0 -110
  261. package/src/stories/Atoms/Spinner/Spinner.jsx +0 -65
  262. package/src/stories/Atoms/Spinner/Spinner.stories.jsx +0 -58
  263. package/src/stories/Atoms/Tag/Tag.css +0 -112
  264. package/src/stories/Atoms/Tag/Tag.jsx +0 -75
  265. package/src/stories/Atoms/Tag/Tag.stories.jsx +0 -67
  266. package/src/stories/Atoms/TextArea/TextArea.css +0 -99
  267. package/src/stories/Atoms/TextArea/TextArea.jsx +0 -118
  268. package/src/stories/Atoms/TextArea/TextArea.stories.jsx +0 -36
  269. package/src/stories/Atoms/TextInput/TextInput.css +0 -102
  270. package/src/stories/Atoms/TextInput/TextInput.jsx +0 -133
  271. package/src/stories/Atoms/TextInput/TextInput.stories.jsx +0 -69
  272. package/src/stories/Atoms/Toggle/Toggle.css +0 -118
  273. package/src/stories/Atoms/Toggle/Toggle.jsx +0 -69
  274. package/src/stories/Atoms/Toggle/Toggle.stories.jsx +0 -35
  275. package/src/stories/Atoms/Tooltip/Tooltip.css +0 -383
  276. package/src/stories/Atoms/Tooltip/Tooltip.jsx +0 -46
  277. package/src/stories/Atoms/Tooltip/Tooltip.stories.jsx +0 -52
  278. package/src/stories/Atoms/Video/Video.css +0 -39
  279. package/src/stories/Atoms/Video/Video.jsx +0 -78
  280. package/src/stories/Atoms/Video/Video.stories.jsx +0 -41
  281. package/src/stories/Atoms/index.js +0 -72
  282. package/src/stories/Atoms/meta_Atoms.js +0 -51
  283. package/src/stories/Components.js +0 -198
  284. package/src/stories/Getting Started.mdx +0 -239
  285. package/src/stories/Layouts/Accordion/Accordion.css +0 -293
  286. package/src/stories/Layouts/Accordion/Accordion.jsx +0 -74
  287. package/src/stories/Layouts/Accordion/Accordion.stories.jsx +0 -39
  288. package/src/stories/Layouts/Flexbox/Flexbox.css +0 -16
  289. package/src/stories/Layouts/Flexbox/Flexbox.jsx +0 -11
  290. package/src/stories/Layouts/Flexbox/Flexbox.stories.jsx +0 -28
  291. package/src/stories/Layouts/Footer/Footer.css +0 -16
  292. package/src/stories/Layouts/Footer/Footer.jsx +0 -31
  293. package/src/stories/Layouts/Footer/Footer.stories.jsx +0 -28
  294. package/src/stories/Layouts/Header/Header.css +0 -16
  295. package/src/stories/Layouts/Header/Header.jsx +0 -31
  296. package/src/stories/Layouts/Header/Header.stories.jsx +0 -28
  297. package/src/stories/Layouts/HeroBanner/HeroBanner.css +0 -16
  298. package/src/stories/Layouts/HeroBanner/HeroBanner.jsx +0 -31
  299. package/src/stories/Layouts/HeroBanner/HeroBanner.stories.jsx +0 -28
  300. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.css +0 -16
  301. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.jsx +0 -31
  302. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.stories.jsx +0 -28
  303. package/src/stories/Layouts/Pagination/Pagination.css +0 -16
  304. package/src/stories/Layouts/Pagination/Pagination.jsx +0 -31
  305. package/src/stories/Layouts/Pagination/Pagination.stories.jsx +0 -28
  306. package/src/stories/Layouts/Sidebar/Sidebar.css +0 -16
  307. package/src/stories/Layouts/Sidebar/Sidebar.jsx +0 -71
  308. package/src/stories/Layouts/Sidebar/Sidebar.stories.jsx +0 -28
  309. package/src/stories/Layouts/Tabs/Tabs.css +0 -16
  310. package/src/stories/Layouts/Tabs/Tabs.jsx +0 -31
  311. package/src/stories/Layouts/Tabs/Tabs.stories.jsx +0 -28
  312. package/src/stories/Layouts/index.js +0 -25
  313. package/src/stories/Layouts/meta_Layouts.js +0 -28
  314. package/src/stories/MDX.mdx +0 -118
  315. package/src/stories/Miscellaneous/Miscellaneous.js +0 -24
  316. package/src/stories/Molecules/Accordion/Accordion.css +0 -4
  317. package/src/stories/Molecules/Accordion/Accordion.jsx +0 -25
  318. package/src/stories/Molecules/Accordion/Accordion.stories.jsx +0 -20
  319. package/src/stories/Molecules/AudioPlayer/AudioPlayer.css +0 -97
  320. package/src/stories/Molecules/AudioPlayer/AudioPlayer.jsx +0 -244
  321. package/src/stories/Molecules/AudioPlayer/AudioPlayer.stories.jsx +0 -55
  322. package/src/stories/Molecules/AvatarWithName/AvatarWithName.css +0 -130
  323. package/src/stories/Molecules/AvatarWithName/AvatarWithName.jsx +0 -80
  324. package/src/stories/Molecules/AvatarWithName/AvatarWithName.stories.jsx +0 -20
  325. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.css +0 -147
  326. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.jsx +0 -51
  327. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.stories.jsx +0 -36
  328. package/src/stories/Molecules/ButtonGroup/ButtonGroup.css +0 -465
  329. package/src/stories/Molecules/ButtonGroup/ButtonGroup.jsx +0 -47
  330. package/src/stories/Molecules/ButtonGroup/ButtonGroup.stories.jsx +0 -44
  331. package/src/stories/Molecules/Card/Card.css +0 -41
  332. package/src/stories/Molecules/Card/Card.jsx +0 -92
  333. package/src/stories/Molecules/Card/Card.stories.jsx +0 -34
  334. package/src/stories/Molecules/ComparisonTable/ComparisonTable.css +0 -35
  335. package/src/stories/Molecules/ComparisonTable/ComparisonTable.jsx +0 -104
  336. package/src/stories/Molecules/ComparisonTable/ComparisonTable.stories.jsx +0 -81
  337. package/src/stories/Molecules/DataTable/DataTable.css +0 -4
  338. package/src/stories/Molecules/DataTable/DataTable.jsx +0 -25
  339. package/src/stories/Molecules/DataTable/DataTable.stories.jsx +0 -20
  340. package/src/stories/Molecules/Dropdown/Dropdown.css +0 -192
  341. package/src/stories/Molecules/Dropdown/Dropdown.jsx +0 -96
  342. package/src/stories/Molecules/Dropdown/Dropdown.stories.jsx +0 -45
  343. package/src/stories/Molecules/FileUpload/FileUpload.css +0 -4
  344. package/src/stories/Molecules/FileUpload/FileUpload.jsx +0 -25
  345. package/src/stories/Molecules/FileUpload/FileUpload.stories.jsx +0 -20
  346. package/src/stories/Molecules/FormField/FormField.css +0 -4
  347. package/src/stories/Molecules/FormField/FormField.jsx +0 -25
  348. package/src/stories/Molecules/FormField/FormField.stories.jsx +0 -20
  349. package/src/stories/Molecules/Header/Header.css +0 -35
  350. package/src/stories/Molecules/Header/Header.jsx +0 -76
  351. package/src/stories/Molecules/Header/Header.stories.jsx +0 -28
  352. package/src/stories/Molecules/IconButton/IconButton.css +0 -4
  353. package/src/stories/Molecules/IconButton/IconButton.jsx +0 -25
  354. package/src/stories/Molecules/IconButton/IconButton.stories.jsx +0 -20
  355. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.css +0 -4
  356. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.jsx +0 -25
  357. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.stories.jsx +0 -20
  358. package/src/stories/Molecules/InputGroup/InputGroup.css +0 -4
  359. package/src/stories/Molecules/InputGroup/InputGroup.jsx +0 -25
  360. package/src/stories/Molecules/InputGroup/InputGroup.stories.jsx +0 -20
  361. package/src/stories/Molecules/InputWithLabel/InputWithLabel.css +0 -4
  362. package/src/stories/Molecules/InputWithLabel/InputWithLabel.jsx +0 -25
  363. package/src/stories/Molecules/InputWithLabel/InputWithLabel.stories.jsx +0 -20
  364. package/src/stories/Molecules/List/List.css +0 -4
  365. package/src/stories/Molecules/List/List.jsx +0 -25
  366. package/src/stories/Molecules/List/List.stories.jsx +0 -20
  367. package/src/stories/Molecules/MediaCard/MediaCard.css +0 -4
  368. package/src/stories/Molecules/MediaCard/MediaCard.jsx +0 -25
  369. package/src/stories/Molecules/MediaCard/MediaCard.stories.jsx +0 -20
  370. package/src/stories/Molecules/Modal/Modal.css +0 -4
  371. package/src/stories/Molecules/Modal/Modal.jsx +0 -25
  372. package/src/stories/Molecules/Modal/Modal.stories.jsx +0 -20
  373. package/src/stories/Molecules/Navbar/Navbar.css +0 -91
  374. package/src/stories/Molecules/Navbar/Navbar.jsx +0 -82
  375. package/src/stories/Molecules/Navbar/Navbar.stories.jsx +0 -70
  376. package/src/stories/Molecules/Notification/Notification.css +0 -4
  377. package/src/stories/Molecules/Notification/Notification.jsx +0 -25
  378. package/src/stories/Molecules/Notification/Notification.stories.jsx +0 -20
  379. package/src/stories/Molecules/PricingTable/PricingTable.css +0 -4
  380. package/src/stories/Molecules/PricingTable/PricingTable.jsx +0 -25
  381. package/src/stories/Molecules/PricingTable/PricingTable.stories.jsx +0 -20
  382. package/src/stories/Molecules/SearchBar/SearchBar.css +0 -69
  383. package/src/stories/Molecules/SearchBar/SearchBar.jsx +0 -73
  384. package/src/stories/Molecules/SearchBar/SearchBar.stories.jsx +0 -29
  385. package/src/stories/Molecules/SelectTheme/SelectTheme.css +0 -25
  386. package/src/stories/Molecules/SelectTheme/SelectTheme.jsx +0 -22
  387. package/src/stories/Molecules/SelectTheme/SelectTheme.stories.jsx +0 -24
  388. package/src/stories/Molecules/Sidebar/Sidebar.css +0 -67
  389. package/src/stories/Molecules/Sidebar/Sidebar.jsx +0 -80
  390. package/src/stories/Molecules/Sidebar/Sidebar.stories.jsx +0 -35
  391. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.css +0 -4
  392. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.jsx +0 -25
  393. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.stories.jsx +0 -20
  394. package/src/stories/Molecules/index.js +0 -58
  395. package/src/stories/Molecules/meta_Molecules.js +0 -47
  396. package/src/stories/Organisms/Profile/UserFriends/UserFriends.context.jsx +0 -15
  397. package/src/stories/Organisms/Profile/UserFriends/UserFriends.css +0 -4
  398. package/src/stories/Organisms/Profile/UserFriends/UserFriends.jsx +0 -13
  399. package/src/stories/Organisms/Profile/UserFriends/UserFriends.stories.jsx +0 -26
  400. package/src/stories/Organisms/Profile/UserPosts/UserPosts.context.jsx +0 -15
  401. package/src/stories/Organisms/Profile/UserPosts/UserPosts.css +0 -4
  402. package/src/stories/Organisms/Profile/UserPosts/UserPosts.jsx +0 -13
  403. package/src/stories/Organisms/Profile/UserPosts/UserPosts.stories.jsx +0 -26
  404. package/src/stories/Organisms/Profile/UserProfile/UserProfile.context.jsx +0 -15
  405. package/src/stories/Organisms/Profile/UserProfile/UserProfile.css +0 -4
  406. package/src/stories/Organisms/Profile/UserProfile/UserProfile.jsx +0 -13
  407. package/src/stories/Organisms/Profile/UserProfile/UserProfile.stories.jsx +0 -26
  408. package/src/stories/Organisms/meta_Organisms.js +0 -39
  409. package/src/stories/Pages/Page/Page.css +0 -69
  410. package/src/stories/Pages/Page/Page.jsx +0 -69
  411. package/src/stories/Pages/Page/Page.stories.js +0 -26
  412. package/src/stories/Pages/Page/Pages.js +0 -31
  413. package/src/stories/Templates/AdminDashboard/AdminDashboard.css +0 -7
  414. package/src/stories/Templates/AdminDashboard/AdminDashboard.jsx +0 -24
  415. package/src/stories/Templates/AdminDashboard/AdminDashboard.stories.jsx +0 -20
  416. package/src/stories/Templates/CallToAction/CallToAction.css +0 -7
  417. package/src/stories/Templates/CallToAction/CallToAction.jsx +0 -24
  418. package/src/stories/Templates/CallToAction/CallToAction.stories.jsx +0 -20
  419. package/src/stories/Templates/FeaturesList/FeaturesList.css +0 -7
  420. package/src/stories/Templates/FeaturesList/FeaturesList.jsx +0 -24
  421. package/src/stories/Templates/FeaturesList/FeaturesList.stories.jsx +0 -20
  422. package/src/stories/Templates/FormSection/FormSection.css +0 -7
  423. package/src/stories/Templates/FormSection/FormSection.jsx +0 -24
  424. package/src/stories/Templates/FormSection/FormSection.stories.jsx +0 -20
  425. package/src/stories/Templates/HeroSection/HeroSection.css +0 -7
  426. package/src/stories/Templates/HeroSection/HeroSection.jsx +0 -24
  427. package/src/stories/Templates/HeroSection/HeroSection.stories.jsx +0 -20
  428. package/src/stories/Templates/LocationInfo/LocationInfo.css +0 -7
  429. package/src/stories/Templates/LocationInfo/LocationInfo.jsx +0 -24
  430. package/src/stories/Templates/LocationInfo/LocationInfo.stories.jsx +0 -20
  431. package/src/stories/Templates/ProductPage/ProductPage.css +0 -7
  432. package/src/stories/Templates/ProductPage/ProductPage.jsx +0 -24
  433. package/src/stories/Templates/ProductPage/ProductPage.stories.jsx +0 -20
  434. package/src/stories/Templates/RegistrationPage/RegistrationPage.css +0 -7
  435. package/src/stories/Templates/RegistrationPage/RegistrationPage.jsx +0 -24
  436. package/src/stories/Templates/RegistrationPage/RegistrationPage.stories.jsx +0 -20
  437. package/src/stories/Templates/ShoppingCart/ShoppingCart.css +0 -7
  438. package/src/stories/Templates/ShoppingCart/ShoppingCart.jsx +0 -24
  439. package/src/stories/Templates/ShoppingCart/ShoppingCart.stories.jsx +0 -20
  440. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.css +0 -7
  441. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.jsx +0 -24
  442. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.stories.jsx +0 -20
  443. package/src/stories/Templates/SignInPage/SignInPage.css +0 -7
  444. package/src/stories/Templates/SignInPage/SignInPage.jsx +0 -24
  445. package/src/stories/Templates/SignInPage/SignInPage.stories.jsx +0 -20
  446. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.css +0 -7
  447. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.jsx +0 -24
  448. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.stories.jsx +0 -20
  449. package/src/stories/Templates/Testimonials/Testimonials.css +0 -7
  450. package/src/stories/Templates/Testimonials/Testimonials.jsx +0 -24
  451. package/src/stories/Templates/Testimonials/Testimonials.stories.jsx +0 -20
  452. package/src/stories/Templates/index.js +0 -33
  453. package/src/stories/Templates/meta_Templates.js +0 -29
  454. package/src/stories/assets/accessibility.png +0 -0
  455. package/src/stories/assets/accessibility.svg +0 -1
  456. package/src/stories/assets/addon-library.png +0 -0
  457. package/src/stories/assets/assets.png +0 -0
  458. package/src/stories/assets/avif-test-image.avif +0 -0
  459. package/src/stories/assets/context.png +0 -0
  460. package/src/stories/assets/discord.svg +0 -1
  461. package/src/stories/assets/docs.png +0 -0
  462. package/src/stories/assets/figma-plugin.png +0 -0
  463. package/src/stories/assets/github.svg +0 -1
  464. package/src/stories/assets/logo.png +0 -0
  465. package/src/stories/assets/logo.svg +0 -106
  466. package/src/stories/assets/share.png +0 -0
  467. package/src/stories/assets/styling.png +0 -0
  468. package/src/stories/assets/test.svg +0 -3
  469. package/src/stories/assets/testing.png +0 -0
  470. package/src/stories/assets/theming.png +0 -0
  471. package/src/stories/assets/tutorials.svg +0 -1
  472. package/src/stories/assets/youtube.svg +0 -1
  473. package/src/themes/README_Styles.md +0 -301
  474. package/src/themes/ThemeProvider.jsx +0 -61
  475. package/src/themes/styles/github/dark.css +0 -0
  476. package/src/themes/styles/github/light.css +0 -0
  477. package/src/themes/styles/neurons/dark.css +0 -247
  478. package/src/themes/styles/neurons/light.css +0 -170
  479. /package/{src/themes/styles/dracula/dark.css → .storybook/preview-head.html} +0 -0
  480. /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;