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,294 @@
1
+ import * as React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { MemoryRouter } from 'react-router-dom';
4
+ import GuiProvider from '@/context/GuiProvider';
5
+ import RightSidebar from './RightSidebar';
6
+ import NavBar from '../TopBar/TopBar';
7
+
8
+ const meta = {
9
+ title: 'Molecules/AppBars/RightSidebar',
10
+ component: RightSidebar,
11
+ tags: ['autodocs'],
12
+ decorators: [
13
+ (Story) => (
14
+ <MemoryRouter>
15
+ <GuiProvider>
16
+ <div style={{ minHeight: '100vh' }}>
17
+ <Story />
18
+ </div>
19
+ </GuiProvider>
20
+ </MemoryRouter>
21
+ ),
22
+ ],
23
+ parameters: {
24
+ docs: {
25
+ description: {
26
+ component: `
27
+ The **RightSidebar** renders a contextual panel on the right side (persistent on desktop, temporary on mobile).
28
+ It supports a hierarchical list with optional **icons** (via the This.GUI icon registry) and **nested groups**.
29
+
30
+ ### Two icon usage modes
31
+
32
+ **1) Declarative mode (recommended)** — pass icon **strings** using the registry prefixes (\`mui:\`, \`lucide:\`).
33
+
34
+ - Color: use \`iconColor\` with a theme key (\`primary\`, \`secondary\`, \`info\`, etc.) or any CSS color (e.g. \`#4caf50\`).
35
+ - The component internally resolves these strings through the registry.
36
+
37
+ **2) Direct React mode (advanced)** — pass a React element as the \`icon\` prop (you import icons yourself).
38
+ This gives you full control, but skips the registry.
39
+
40
+ ### Item shape (\`rightContext.items\`)
41
+
42
+ Each item supports:
43
+ - \`title\` (string) — 'label' or 'item'
44
+ - \`label\` (string)
45
+ - \`href\` (string, internal path or external URL)
46
+ - \`external\` (boolean) — opens external links in new tab
47
+ - \`icon\` (string | ReactNode | Component)
48
+ - \`iconColor\` (string) — theme key or CSS color
49
+ - \`children\` (array) — nested items
50
+
51
+ ### Quick example (declarative)
52
+
53
+ \`\`\`js
54
+ const rightContext = {
55
+ title: 'Quick actions',
56
+ items: [
57
+ { label: 'Inbox', href: '/inbox', icon: 'mui:Mail', iconColor: 'primary' },
58
+ {
59
+ label: 'Analytics',
60
+ icon: 'lucide:bar-chart-3',
61
+ children: [
62
+ { label: 'Reports', href: '/reports', icon: 'mui:Insights', iconColor: '#ff9800' },
63
+ { label: 'Trends', href: '/trends', icon: 'lucide:trending-up', iconColor: '#4caf50' },
64
+ ],
65
+ },
66
+ ],
67
+ };
68
+ <RightSidebar rightContext={rightContext} />
69
+ \`\`\`
70
+
71
+ ---
72
+
73
+ ### Layout Insets (auto‑coordination)
74
+ On **desktop**, RightSidebar is **permanent** and automatically updates the UI insets so other components (e.g., \`Footer\`, page containers) can adapt:
75
+
76
+ - Sets **\`theme.insets.right = drawerWidth\`** when permanent.
77
+ - Sets **\`theme.insets.right = 0\`** on mobile (temporary drawer) or when unmounted.
78
+ - This is wired via the Theme Provider API **\`theme.updateInsets({ right })\`**.
79
+
80
+ **Why it matters:** Layouts or containers can read \`theme.layout.insets.right\` (exposed in the MUI theme) to add padding/margins so content doesn’t go under the drawer.
81
+
82
+ **Example (reading insets inside a component):**
83
+ \`\`\`jsx
84
+ import { useTheme, Box } from '@mui/material';
85
+
86
+ export default function PageContainer({ children }) {
87
+ const theme = useTheme();
88
+ const rightInset = theme?.layout?.insets?.right || 0; // number in px
89
+ return (
90
+ <Box sx={{ pr: rightInset, transition: 'padding 200ms ease' }}>
91
+ {children}
92
+ </Box>
93
+ );
94
+ }
95
+ \`\`\`
96
+
97
+ **Notes**
98
+ - In mobile, the drawer overlays content (no reserved space).
99
+ - Changing \`drawerWidth\` on desktop will propagate to \`theme.insets.right\` automatically.
100
+ `,
101
+ },
102
+ },
103
+ },
104
+ argTypes: {
105
+ rightContext: {
106
+ description: 'Object with `title` and `items` describing the drawer content.',
107
+ control: 'object',
108
+ },
109
+ },
110
+ } satisfies Meta<typeof RightSidebar>;
111
+
112
+ export default meta;
113
+ type Story = StoryObj<typeof meta>;
114
+
115
+ // --- Stories ---
116
+
117
+ const BASE_TITLE = 'Context';
118
+
119
+ export const Default: Story = {
120
+ args: {
121
+ rightContext: {
122
+ title: BASE_TITLE,
123
+ items: [
124
+ { label: 'Overview', href: '/overview' },
125
+ { label: 'Settings', href: '/settings' },
126
+ {
127
+ label: 'Resources',
128
+ children: [
129
+ { label: 'Docs', href: '/docs' },
130
+ { label: 'API', href: '/api' },
131
+ ],
132
+ },
133
+ ],
134
+ },
135
+ },
136
+ };
137
+
138
+ export const WithIcons: Story = {
139
+ args: {
140
+ rightContext: {
141
+ title: BASE_TITLE,
142
+ items: [
143
+ { label: 'Inbox', href: '/inbox', icon: 'mui:Email' },
144
+ { label: 'Reports', href: '/reports', icon: 'mui:Insights' },
145
+ {
146
+ label: 'More',
147
+ icon: 'lucide:more-horizontal',
148
+ children: [
149
+ { label: 'Activity', href: '/activity', icon: 'lucide:activity' },
150
+ { label: 'Security', href: '/security', icon: 'mui:Security' },
151
+ ],
152
+ },
153
+ ],
154
+ },
155
+ },
156
+ };
157
+
158
+ export const WithColoredIcons: Story = {
159
+ args: {
160
+ rightContext: {
161
+ title: BASE_TITLE,
162
+ items: [
163
+ { label: 'Inbox', href: '/inbox', icon: 'mui:Email', iconColor: 'primary' },
164
+ { label: 'Billing', href: '/billing', icon: 'mui:AttachMoney', iconColor: '#2e7d32' },
165
+ {
166
+ label: 'Analytics',
167
+ icon: 'lucide:bar-chart-3',
168
+ iconColor: '#00aa96',
169
+ children: [
170
+ { label: 'Trends', href: '/trends', icon: 'lucide:trending-up', iconColor: '#4caf50' },
171
+ { label: 'Dashboards', href: '/dashboards', icon: 'mui:Insights', iconColor: 'secondary' },
172
+ ],
173
+ },
174
+ ],
175
+ },
176
+ },
177
+ };
178
+
179
+ export const Docs_UsageModes: Story = {
180
+ render: () => (
181
+ <div style={{ maxWidth: 920, padding: 24, lineHeight: 1.55 }}>
182
+ <h2 style={{ marginTop: 0 }}>Using Icons in RightSidebar</h2>
183
+
184
+ <h3>1. Declarative Mode (recommended)</h3>
185
+ <p>
186
+ Provide icon names as <code>strings</code> with the <code>mui:</code> or <code>lucide:</code> prefix.
187
+ Colors can be theme keys (e.g. <code>primary</code>, <code>secondary</code>) or CSS colors (e.g. <code>#4caf50</code>).
188
+ </p>
189
+ <pre style={{ background: '#0f111a', color: '#e6e6e6', padding: 16, borderRadius: 8, overflow: 'auto' }}>
190
+ <code>{`const rightContext = {
191
+ title: 'Context',
192
+ items: [
193
+ { label: 'Inbox', href: '/inbox', icon: 'mui:Email', iconColor: 'primary' },
194
+ { label: 'Reports', href: '/reports', icon: 'mui:Insights', iconColor: '#ff9800' },
195
+ {
196
+ label: 'More', icon: 'lucide:more-horizontal', children: [
197
+ { label: 'Activity', href: '/activity', icon: 'lucide:activity', iconColor: '#00aa96' },
198
+ { label: 'Security', href: '/security', icon: 'mui:Security', iconColor: 'info' },
199
+ ]
200
+ }
201
+ ]
202
+ };
203
+ <RightSidebar rightContext={rightContext} />`}</code>
204
+ </pre>
205
+
206
+ <h3>2. Direct React Mode (advanced)</h3>
207
+ <p>
208
+ Import icon components yourself and pass them as React elements in <code>icon</code>. This bypasses the registry.
209
+ </p>
210
+ <pre style={{ background: '#0f111a', color: '#e6e6e6', padding: 16, borderRadius: 8, overflow: 'auto' }}>
211
+ <code>{`import { Mail } from 'lucide-react';
212
+ import InsightsIcon from '@mui/icons-material/Insights';
213
+
214
+ const rightContext = {
215
+ title: 'Context',
216
+ items: [
217
+ { label: 'Inbox', href: '/inbox', icon: <Mail color="#4caf50" /> },
218
+ { label: 'Reports', href: '/reports', icon: <InsightsIcon htmlColor="#ff9800" /> },
219
+ ]
220
+ };
221
+ <RightSidebar rightContext={rightContext} />`}</code>
222
+ </pre>
223
+
224
+ <p>
225
+ In both modes, nested groups are declared via the <code>children</code> array of any item.
226
+ </p>
227
+ </div>
228
+ ),
229
+ };
230
+
231
+ export const Docs_Insets: Story = {
232
+ render: () => (
233
+ <div style={{ maxWidth: 920, padding: 24, lineHeight: 1.55 }}>
234
+ <h2 style={{ marginTop: 0 }}>RightSidebar & Layout Insets</h2>
235
+ <p>
236
+ On desktop, RightSidebar is permanent and reserves space by updating <code>theme.insets.right</code> via
237
+ the Theme Provider API (<code>theme.updateInsets</code>). On mobile it is temporary and does not reserve space.
238
+ </p>
239
+ <pre style={{ background: '#0f111a', color: '#e6e6e6', padding: 16, borderRadius: 8, overflow: 'auto' }}>
240
+ <code>{`// Inside RightSidebar (simplified)
241
+ useEffect(() => {
242
+ if (isPermanent) theme.updateInsets?.({ right: drawerWidth });
243
+ else theme.updateInsets?.({ right: 0 });
244
+ return () => theme.updateInsets?.({ right: 0 });
245
+ }, [isPermanent, drawerWidth]);
246
+ `}</code>
247
+ </pre>
248
+ <p>
249
+ Consumers can read the value from <code>theme.layout.insets.right</code> to pad containers or footers:
250
+ </p>
251
+ <pre style={{ background: '#0f111a', color: '#e6e6e6', padding: 16, borderRadius: 8, overflow: 'auto' }}>
252
+ <code>{`const theme = useTheme();
253
+ const rightInset = theme.layout.insets.right || 0;
254
+ return <Box sx={{ pr: rightInset }}>Content</Box>;
255
+ `}</code>
256
+ </pre>
257
+ </div>
258
+ ),
259
+ };
260
+
261
+ export const WithNavbar: Story = {
262
+ args: {
263
+ rightContext: {
264
+ title: 'Context',
265
+ items: [
266
+ { label: 'Inbox', href: '/inbox', icon: 'mui:Email' },
267
+ { label: 'Reports', href: '/reports', icon: 'mui:Insights' },
268
+ {
269
+ label: 'More',
270
+ icon: 'lucide:more-horizontal',
271
+ children: [
272
+ { label: 'Activity', href: '/activity', icon: 'lucide:activity' },
273
+ { label: 'Security', href: '/security', icon: 'mui:Security' },
274
+ ],
275
+ },
276
+ ],
277
+ },
278
+ },
279
+ render: (args) => (
280
+ <>
281
+ {/* Fixed AppBar that reports its height via ThemeContext */}
282
+ <NavBar title="Demo" />
283
+ <RightSidebar {...args} />
284
+ </>
285
+ ),
286
+ parameters: {
287
+ docs: {
288
+ description: {
289
+ story:
290
+ 'RightSidebar with a fixed NavBar on top. The NavBar updates `theme.insets.nav` (and `--gui-nav-height`) in real time, so the drawer aligns its `top`/`height` accordingly. Compare this with the default stories (without NavBar).',
291
+ },
292
+ },
293
+ },
294
+ };
@@ -0,0 +1,295 @@
1
+ import React from "react";
2
+ import Icon from "../../../../themes/icons/Icon";
3
+ import {
4
+ Drawer,
5
+ List,
6
+ ListItem,
7
+ ListItemButton,
8
+ ListItemIcon,
9
+ ListItemText,
10
+ Box,
11
+ Typography,
12
+ Collapse,
13
+ } from "@/gui/atoms";
14
+ import { Link as RouterLink } from "react-router-dom";
15
+ import { useGuiTheme, useGuiMediaQuery } from "@/gui";
16
+ import type { GuiTheme } from "@/gui";
17
+ import type * as ReactTypes from "react";
18
+ export type RightSidebarIcon =
19
+ | string
20
+ | ReactTypes.ComponentType<any>
21
+ | React.ReactNode;
22
+ export type RightSidebarItem = {
23
+ type?: "label";
24
+ label?: string;
25
+ href?: string;
26
+ external?: boolean;
27
+ onClick?: () => void;
28
+ icon?: RightSidebarIcon;
29
+ iconColor?: string;
30
+ children?: RightSidebarItem[];
31
+ };
32
+
33
+ export type RightContext = {
34
+ title?: string;
35
+ items: RightSidebarItem[];
36
+ };
37
+
38
+ export type RightSidebarProps = {
39
+ rightContext?: RightContext;
40
+ drawerWidth?: number;
41
+ open?: boolean;
42
+ onClose?: (event?: any) => void;
43
+ sx?: any;
44
+ paperSx?: any;
45
+ headerSx?: any;
46
+ contentSx?: any;
47
+ footerSx?: any;
48
+ id?: string;
49
+ className?: string;
50
+ "data-testid"?: string;
51
+ };
52
+
53
+ const drawerStyles = (
54
+ theme: GuiTheme,
55
+ width: number
56
+ ) => ({
57
+ width,
58
+ backgroundColor:
59
+ theme.palette.mode === "light"
60
+ ? theme.palette.background.paper
61
+ : theme.palette.background.default,
62
+ top: "var(--gui-nav-height, 48px)",
63
+ height: "calc(100vh - var(--gui-nav-height, 48px))",
64
+ });
65
+
66
+ function DrawerContent({ rightContext, headerSx, contentSx }: { rightContext?: RightContext; headerSx?: any; contentSx?: any }) {
67
+ const { title, items: contextItems } = rightContext || {};
68
+ const items = Array.isArray(contextItems) ? contextItems : [];
69
+ const [openItems, setOpenItems] = React.useState<Record<number, boolean>>({});
70
+ const toggleOpen = (index: number) => {
71
+ setOpenItems((prev) => ({ ...prev, [index]: !prev[index] }));
72
+ };
73
+
74
+ return (
75
+ <Box role="presentation">
76
+ {title && (
77
+ <Box
78
+ sx={{ px: 2, pt: 2, pb: 2, borderBottom: "1px solid", borderColor: "divider", ...headerSx }}
79
+ >
80
+ <Typography variant="h6" sx={{ fontWeight: 600 }}>
81
+ {title}
82
+ </Typography>
83
+ </Box>
84
+ )}
85
+ <List sx={contentSx}>
86
+ {items.map((item, index) => {
87
+ if (item.type === "label") {
88
+ return (
89
+ <ListItem key={index} sx={{ px: 2, py: 1.5, justifyContent: "center" }}>
90
+ <Typography
91
+ variant="subtitle2"
92
+ color="text.secondary"
93
+ sx={{
94
+ fontWeight: 600,
95
+ fontSize: "0.85rem",
96
+ textAlign: "center",
97
+ backgroundColor: (theme) => theme.palette.action.hover,
98
+ px: 1.5,
99
+ py: 0.5,
100
+ borderRadius: 1,
101
+ width: "100%",
102
+ }}
103
+ >
104
+ {item.label}
105
+ </Typography>
106
+ </ListItem>
107
+ );
108
+ }
109
+ const hasChildren = Array.isArray(item.children) && item.children.length > 0;
110
+ const isOpen = openItems[index] || false;
111
+ return (
112
+ <React.Fragment key={index}>
113
+ <ListItem disablePadding>
114
+ <ListItemButton
115
+ component={item.href ? RouterLink : "div"}
116
+ to={item.href}
117
+ onClick={
118
+ hasChildren
119
+ ? () => toggleOpen(index)
120
+ : !item.href && item.onClick
121
+ ? item.onClick
122
+ : undefined
123
+ }
124
+ sx={{
125
+ "& .MuiListItemText-primary": { fontWeight: 400 },
126
+ }}
127
+ >
128
+ {item.icon ? (
129
+ <ListItemIcon sx={{ minWidth: 24, mr: 1 }}>
130
+ {typeof item.icon === "string" ? (
131
+ <Icon name={item.icon} iconColor={item.iconColor} size={18} />
132
+ ) : typeof item.icon === "function" ? (
133
+ React.createElement(item.icon as ReactTypes.ComponentType<any>)
134
+ ) : (
135
+ item.icon
136
+ )}
137
+ </ListItemIcon>
138
+ ) : null}
139
+ <ListItemText primary={item.label} />
140
+ {hasChildren &&
141
+ (isOpen ? (
142
+ <Icon name="mui:ExpandLess" size={18} />
143
+ ) : (
144
+ <Icon name="mui:ExpandMore" size={18} />
145
+ ))}
146
+ </ListItemButton>
147
+ </ListItem>
148
+ {hasChildren && (
149
+ <Collapse in={isOpen} timeout="auto" unmountOnExit>
150
+ <Box sx={{ mr: 2, borderRight: "1px dashed", pr: 2 }}>
151
+ {(item.children ?? []).map((child, childIndex) => (
152
+ <ListItem key={childIndex} disablePadding>
153
+ <ListItemButton
154
+ component={child.href ? RouterLink : "div"}
155
+ to={child.href}
156
+ onClick={!child.href && child.onClick ? child.onClick : undefined}
157
+ sx={{
158
+ justifyContent: "flex-end",
159
+ textAlign: "right",
160
+ "& .MuiListItemText-primary": {
161
+ fontWeight: 400,
162
+ textAlign: "right",
163
+ },
164
+ }}
165
+ >
166
+ {child.icon ? (
167
+ <ListItemIcon sx={{ minWidth: 24, mr: 1 }}>
168
+ {typeof child.icon === "string" ? (
169
+ <Icon
170
+ name={child.icon}
171
+ iconColor={child.iconColor}
172
+ size={18}
173
+ />
174
+ ) : typeof child.icon === "function" ? (
175
+ React.createElement(
176
+ child.icon as ReactTypes.ComponentType<any>
177
+ )
178
+ ) : (
179
+ child.icon
180
+ )}
181
+ </ListItemIcon>
182
+ ) : null}
183
+ <ListItemText primary={child.label} />
184
+ </ListItemButton>
185
+ </ListItem>
186
+ ))}
187
+ </Box>
188
+ </Collapse>
189
+ )}
190
+ </React.Fragment>
191
+ );
192
+ })}
193
+ </List>
194
+ </Box>
195
+ );
196
+ }
197
+
198
+ export default function RightSidebar({
199
+ rightContext,
200
+ drawerWidth = 260,
201
+ open,
202
+ onClose,
203
+ sx,
204
+ paperSx,
205
+ headerSx,
206
+ contentSx,
207
+ footerSx,
208
+ id,
209
+ className,
210
+ "data-testid": dataTestId,
211
+ }: RightSidebarProps) {
212
+ const theme = useGuiTheme();
213
+ const isMobile = useGuiMediaQuery(theme.breakpoints.down("md"));
214
+ const isControlled = typeof open === "boolean";
215
+ const [internalOpen, setInternalOpen] = React.useState(false);
216
+ const effectiveOpen = isControlled ? open! : internalOpen;
217
+ const isPermanent = !isMobile;
218
+
219
+ React.useEffect(() => {
220
+ if (!isControlled) {
221
+ setInternalOpen(!isMobile);
222
+ }
223
+ }, [isMobile, isControlled]);
224
+
225
+ React.useEffect(() => {
226
+ const setInsets = theme?.updateInsets;
227
+ const currentRight = theme?.layout?.insets?.right ?? 0;
228
+ if (typeof setInsets === "function") {
229
+ const desired = isPermanent ? drawerWidth : 0;
230
+ if (currentRight !== desired) {
231
+ setInsets({ right: desired });
232
+ }
233
+ return () => {
234
+ const rightOnCleanup = theme?.layout?.insets?.right ?? 0;
235
+ if (rightOnCleanup !== 0) setInsets({ right: 0 });
236
+ };
237
+ }
238
+ }, [isPermanent, drawerWidth]);
239
+
240
+ if (!rightContext || !rightContext.items?.length) return null;
241
+
242
+ return (
243
+ <>
244
+ {!isControlled && isMobile && !effectiveOpen && (
245
+ <Box
246
+ sx={{
247
+ position: "fixed",
248
+ top: "50%",
249
+ right: 0,
250
+ transform: "translateY(-50%)",
251
+ zIndex: theme.zIndex.drawer + 1,
252
+ }}
253
+ >
254
+ <Box
255
+ onClick={() => setInternalOpen(true)}
256
+ sx={{
257
+ backgroundColor: theme.palette.primary.main,
258
+ color: "#fff",
259
+ p: 1,
260
+ borderRadius: "8px 0 0 8px",
261
+ cursor: "pointer",
262
+ width: drawerWidth,
263
+ }}
264
+ >
265
+ &gt;
266
+ </Box>
267
+ </Box>
268
+ )}
269
+ <Drawer
270
+ id={id}
271
+ className={className}
272
+ data-testid={dataTestId}
273
+ anchor="right"
274
+ open={effectiveOpen}
275
+ onClose={() => {
276
+ if (isControlled) {
277
+ onClose?.();
278
+ } else {
279
+ setInternalOpen(false);
280
+ }
281
+ }}
282
+ variant={isMobile ? "temporary" : "persistent"}
283
+ sx={{
284
+ ...sx,
285
+ "& .MuiDrawer-paper": {
286
+ ...drawerStyles(theme, drawerWidth),
287
+ ...paperSx,
288
+ },
289
+ }}
290
+ >
291
+ <DrawerContent rightContext={rightContext} headerSx={headerSx} contentSx={contentSx} />
292
+ </Drawer>
293
+ </>
294
+ );
295
+ }