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,243 @@
1
+ // src/context/GuiProvider.tsx
2
+ import React, { createContext, useContext, useEffect, useMemo, useState } from 'react';
3
+ import { ThemeProvider, CssBaseline } from '@mui/material';
4
+ import type { Theme } from '@mui/material/styles';
5
+ import { getTheme, AVAILABLE_THEMES } from '../themes';
6
+
7
+ /**
8
+ * New theme model (family + mode)
9
+ * --------------------------------
10
+ * AVAILABLE_THEMES now comes as a flat list of entries like:
11
+ * { id: 'neurons-light', family: 'neurons', name: 'Neurons Light', mode: 'light', manifest }
12
+ * We normalize that into:
13
+ * • availableFlat: same flat array
14
+ * • availableFamilies: [{ family, name, manifest, modes: ['light','dark'] }]
15
+ *
16
+ * Provider state keeps a single `themeKey` (e.g. 'neurons-light').
17
+ * We expose helpers to change mode or family without callers knowing the key format.
18
+ */
19
+
20
+ // -------------------------------- Types --------------------------------
21
+ export type ThemeMode = 'light' | 'dark';
22
+
23
+ export type ThemeEntry = {
24
+ id: string;
25
+ family: string;
26
+ name?: string;
27
+ mode: ThemeMode;
28
+ manifest?: Record<string, any>;
29
+ };
30
+
31
+ export type ThemeFamilyGroup = {
32
+ family: string;
33
+ name?: string;
34
+ manifest?: Record<string, any>;
35
+ modes: ThemeMode[];
36
+ };
37
+
38
+ export type Insets = { left: number; right: number; nav: number };
39
+
40
+ export type GuiContextValue = {
41
+ // identity of the active theme entry (e.g. 'neurons-light')
42
+ themeKey: string;
43
+ setThemeKey: React.Dispatch<React.SetStateAction<string>>;
44
+
45
+ // derived
46
+ family: string;
47
+ mode: ThemeMode;
48
+
49
+ // catalog
50
+ availableFlat: ThemeEntry[];
51
+ availableFamilies: ThemeFamilyGroup[];
52
+ getManifestForFamily: (family: string) => Record<string, any>;
53
+
54
+ // actions
55
+ setMode: (mode: ThemeMode) => void;
56
+ setFamilyAndMode: (family: string, mode: ThemeMode) => void;
57
+ toggleMode: () => void;
58
+ };
59
+
60
+ export type GuiProviderProps = {
61
+ initialTheme?: string;
62
+ children?: React.ReactNode;
63
+ };
64
+
65
+ // Normalize AVAILABLE_THEMES as ThemeEntry[] (best-effort)
66
+ const THEMES_SOURCE: ThemeEntry[] = Array.isArray(AVAILABLE_THEMES)
67
+ ? (AVAILABLE_THEMES as any[]).map((e) => ({
68
+ id: String(e?.id ?? `${e?.family ?? 'neurons'}-${e?.mode ?? 'dark'}`),
69
+ family:
70
+ String((e?.family ?? String(e?.id ?? '').replace(/-(light|dark)$/i, '')) || 'default'),
71
+ name: e?.name ?? e?.family ?? e?.id,
72
+ mode: (String(e?.mode ?? (String(e?.id).includes('dark') ? 'dark' : 'light')).toLowerCase() as ThemeMode),
73
+ manifest: (e?.manifest ?? {}) as Record<string, any>,
74
+ }))
75
+ : [];
76
+
77
+ // Context (with safe defaults for tooling/tests)
78
+ const ThemeCtx = createContext<GuiContextValue>({
79
+ themeKey: 'neurons-dark',
80
+ setThemeKey: () => {},
81
+ family: 'neurons',
82
+ mode: 'dark',
83
+ availableFlat: [],
84
+ availableFamilies: [],
85
+ getManifestForFamily: () => ({}),
86
+ setMode: () => {},
87
+ setFamilyAndMode: () => {},
88
+ toggleMode: () => {},
89
+ });
90
+
91
+ export function GuiProvider({ initialTheme = 'neurons-dark', children }: GuiProviderProps) {
92
+ // Persist last chosen `themeKey`
93
+ const [themeKey, setThemeKey] = useState<string>(() => {
94
+ try {
95
+ return localStorage.getItem('this.gui:theme') || initialTheme;
96
+ } catch {
97
+ return initialTheme;
98
+ }
99
+ });
100
+
101
+ useEffect(() => {
102
+ try {
103
+ localStorage.setItem('this.gui:theme', themeKey);
104
+ } catch {}
105
+ }, [themeKey]);
106
+
107
+ // Flat catalog straight from AVAILABLE_THEMES (normalized)
108
+ const availableFlat = useMemo<ThemeEntry[]>(() => {
109
+ return THEMES_SOURCE.map((e) => ({
110
+ id: e.id || `${e.family}-${e.mode}`,
111
+ family: e.family || String(e.id || '').replace(/-(light|dark)$/i, '') || 'default',
112
+ name: e.name || e.family || e.id,
113
+ mode: (e.mode ?? (String(e.id).includes('dark') ? 'dark' : 'light')) as ThemeMode,
114
+ manifest: e.manifest || {},
115
+ })).filter((e) => !!e.id && !!e.family && !!e.mode);
116
+ }, []);
117
+
118
+ // Group by family to know which modes each theme provides
119
+ const availableFamilies = useMemo<ThemeFamilyGroup[]>(() => {
120
+ const byFamily = new Map<string, ThemeFamilyGroup>();
121
+ for (const it of availableFlat) {
122
+ const curr: ThemeFamilyGroup =
123
+ byFamily.get(it.family) || {
124
+ family: it.family,
125
+ name: (it.manifest as any)?.name || it.family,
126
+ manifest: it.manifest,
127
+ modes: [] as ThemeMode[],
128
+ };
129
+ if (!curr.modes.includes(it.mode)) curr.modes.push(it.mode);
130
+ byFamily.set(it.family, curr);
131
+ }
132
+ return Array.from(byFamily.values());
133
+ }, [availableFlat]);
134
+
135
+ // Derive family/mode from active key
136
+ const active = useMemo<ThemeEntry>(() => {
137
+ const found = availableFlat.find((e) => e.id === themeKey);
138
+ if (found) return found;
139
+ // fallback: try to coerce from saved string
140
+ const isDark = /dark$/i.test(themeKey);
141
+ const fam = String(themeKey).replace(/-(light|dark)$/i, '') || 'neurons';
142
+ // pick a valid entry in that family
143
+ const fallback =
144
+ availableFlat.find((e) => e.family === fam && e.mode === (isDark ? 'dark' : 'light')) ||
145
+ availableFlat[0];
146
+ return (
147
+ fallback || { id: 'neurons-dark', family: 'neurons', mode: 'dark', manifest: {} }
148
+ ) as ThemeEntry;
149
+ }, [themeKey, availableFlat]);
150
+
151
+ // Build MUI theme from tokens using the single source of truth: themeKey
152
+ const theme = useMemo<Theme>(() => getTheme({ key: active.id }) as Theme, [active.id]);
153
+
154
+ // Insets state (unchanged)
155
+ const [insets, setInsets] = useState<Insets>({ left: 0, right: 0, nav: 0 });
156
+ const updateInsetsCb = React.useCallback(
157
+ ({ left, right, nav }: Partial<Insets> = {}) => {
158
+ setInsets((prev) => {
159
+ const next: Insets = {
160
+ left: left != null ? left : prev.left,
161
+ right: right != null ? right : prev.right,
162
+ nav: nav != null ? nav : prev.nav,
163
+ };
164
+ if (next.left === prev.left && next.right === prev.right && next.nav === prev.nav)
165
+ return prev;
166
+ return next;
167
+ });
168
+ },
169
+ []
170
+ );
171
+
172
+ useEffect(() => {
173
+ // Browser-only side effect: safe in CSR; skipped in SSR
174
+ if (typeof document !== 'undefined') {
175
+ const style = document.documentElement.style;
176
+ style.setProperty('--gui-inset-left', `${insets.left || 0}px`);
177
+ style.setProperty('--gui-inset-right', `${insets.right || 0}px`);
178
+ style.setProperty('--gui-nav-height', `${insets.nav || 0}px`);
179
+ }
180
+ }, [insets]);
181
+
182
+ // Inject insets helpers into the theme object
183
+ const themed = useMemo(() => {
184
+ // Note: we intentionally use `any` to avoid module augmentation here.
185
+ const t: any = { ...theme };
186
+ t.layout = { ...(theme as any).layout, insets: { left: insets.left || 0, right: insets.right || 0, nav: insets.nav || 0 } };
187
+ t.updateInsets = updateInsetsCb;
188
+ return t as Theme & { layout: { insets: Insets }; updateInsets: typeof updateInsetsCb };
189
+ }, [theme, insets, updateInsetsCb]);
190
+
191
+ // Ensure saved key is valid with the current catalog
192
+ useEffect(() => {
193
+ if (availableFlat.length === 0) return;
194
+ const ok = availableFlat.some((e) => e.id === themeKey);
195
+ if (!ok) setThemeKey(availableFlat[0].id);
196
+ }, [availableFlat, themeKey]);
197
+
198
+ // Helpers ------------------------------------------------------------
199
+ const getManifestForFamily = (family: string): Record<string, any> => {
200
+ const fam = availableFamilies.find((f) => f.family === family);
201
+ return fam?.manifest || {};
202
+ };
203
+
204
+ const setMode = (mode: ThemeMode) => {
205
+ const target = availableFlat.find((e) => e.family === active.family && e.mode === mode);
206
+ if (target) setThemeKey(target.id);
207
+ };
208
+
209
+ const setFamilyAndMode = (family: string, mode: ThemeMode) => {
210
+ const target =
211
+ availableFlat.find((e) => e.family === family && e.mode === mode) ||
212
+ availableFlat.find((e) => e.family === family); // any mode of that family
213
+ if (target) setThemeKey(target.id);
214
+ };
215
+
216
+ const toggleMode = () => setMode(active.mode === 'dark' ? 'light' : 'dark');
217
+
218
+ const ctxValue: GuiContextValue = useMemo(
219
+ () => ({
220
+ themeKey: active.id,
221
+ setThemeKey,
222
+ family: active.family,
223
+ mode: active.mode,
224
+ availableFlat,
225
+ availableFamilies,
226
+ getManifestForFamily,
227
+ setMode,
228
+ setFamilyAndMode,
229
+ toggleMode,
230
+ }),
231
+ [active.id, active.family, active.mode, availableFlat, availableFamilies]
232
+ );
233
+
234
+ return (
235
+ <ThemeProvider theme={themed}>
236
+ <CssBaseline />
237
+ <ThemeCtx.Provider value={ctxValue}>{children}</ThemeCtx.Provider>
238
+ </ThemeProvider>
239
+ );
240
+ }
241
+
242
+ export const useThemeContext = () => useContext(ThemeCtx);
243
+ export default GuiProvider;
@@ -0,0 +1,77 @@
1
+ import * as React from 'react';
2
+ import type { SxProps, Theme } from '@mui/material/styles';
3
+ import AppBar from './AppBar';
4
+ import type { RegistryEntry } from '@/registry/types';
5
+ import { ensureNodeId } from '@/gui/utils/nodeID';
6
+
7
+ /**
8
+ * Declarative spec for AppBar.
9
+ * This is the JSON-friendly shape your renderer/LLM can emit.
10
+ */
11
+ type AppBarSpec = {
12
+ type: 'AppBar';
13
+ props?: {
14
+ /** Content inside the AppBar (text, Toolbar, actions, etc.) */
15
+ children?: React.ReactNode;
16
+
17
+ /** Visual props (passthrough to MUI AppBar) */
18
+ position?: 'fixed' | 'absolute' | 'sticky' | 'static' | 'relative';
19
+ color?:
20
+ | 'inherit'
21
+ | 'default'
22
+ | 'primary'
23
+ | 'secondary'
24
+ | 'transparent'
25
+ | 'info'
26
+ | 'success'
27
+ | 'warning'
28
+ | 'error';
29
+ elevation?: number;
30
+ enableColorOnDark?: boolean;
31
+ sx?: SxProps<Theme>;
32
+
33
+ /** Polymorphism passthrough (AppBar extends Paper → supports `component`) */
34
+ component?: React.ElementType;
35
+
36
+ /** Common DOM props */
37
+ id?: string;
38
+ className?: string;
39
+ 'data-testid'?: string;
40
+ };
41
+ };
42
+
43
+ /**
44
+ * AppBarResolver
45
+ * - Maps a JSON-friendly spec to <AppBar /> props.
46
+ * - Keeps MUI polymorphism intact (`component` passthrough).
47
+ * - Allows `sx`, ids and className for styling & targeting.
48
+ */
49
+ const AppBarResolver: RegistryEntry = {
50
+ type: 'AppBar',
51
+ resolve(spec: AppBarSpec) {
52
+ const p = spec.props ?? {};
53
+
54
+ const rootProps: any = {
55
+ position: p.position ?? 'fixed',
56
+ color: p.color ?? 'default',
57
+ elevation: p.elevation,
58
+ enableColorOnDark: p.enableColorOnDark,
59
+ sx: p.sx,
60
+ id: ensureNodeId('appbar', p.id),
61
+ className: p.className,
62
+ 'data-testid': p['data-testid'],
63
+ };
64
+
65
+ if (p.component) {
66
+ rootProps.component = p.component;
67
+ }
68
+
69
+ return (
70
+ <AppBar {...rootProps}>
71
+ {p.children}
72
+ </AppBar>
73
+ );
74
+ },
75
+ };
76
+
77
+ export default AppBarResolver;
@@ -0,0 +1,232 @@
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 { AppBar, Toolbar, Typography, Box, Button } from '@/gui/atoms';
6
+
7
+ // ======================= Meta =======================
8
+ const meta: Meta<typeof AppBar> = {
9
+ title: 'Atoms/AppBar',
10
+ component: AppBar,
11
+ tags: ['autodocs'],
12
+ decorators: [
13
+ (Story) => (
14
+ <MemoryRouter>
15
+ <GuiProvider>
16
+ <div style={{ padding: 0, minHeight: 240 }}>
17
+ <Story />
18
+ </div>
19
+ </GuiProvider>
20
+ </MemoryRouter>
21
+ ),
22
+ ],
23
+ parameters: {
24
+ docs: {
25
+ description: {
26
+ component: `
27
+ The **AppBar** atom is a thin wrapper around MUI's \`AppBar\` that keeps the original API while letting you style it with \`sx\` and use it declaratively through the **resolver**.
28
+
29
+ ---
30
+ ## Features
31
+ - Positions: \`fixed\`, \`absolute\`, \`sticky\`, \`static\`, \`relative\`.
32
+ - Colors: \`default\`, \`inherit\`, \`primary\`, \`secondary\`, \`transparent\`. AppBar **only supports** these colors for the \`color\` prop.
33
+ - Note: \`success\`, \`info\`, \`warning\`, and \`error\` are **not supported** by the \`color\` prop. Use \`sx={{ bgcolor: '...' }}\` for these colors.
34
+ - Additional theme colors can be applied via \`sx={{ bgcolor: 'success.main' }}\` etc.
35
+ - Elevation & dark-mode override with \`enableColorOnDark\`.
36
+ - Accepts any children (e.g., \`<Toolbar/>\`, actions, brand, etc.).
37
+ - Fully themeable via **This.GUI** tokens and \`sx\`.
38
+
39
+ ---
40
+ ## Key Props
41
+ - \`position?: 'fixed' | 'absolute' | 'sticky' | 'static' | 'relative'\`.
42
+ - \`color?: 'default' | 'inherit' | 'primary' | 'secondary' | 'transparent'\` — AppBar **only supports** these values.
43
+ - \`success\`, \`info\`, \`warning\`, and \`error\` are **not supported** by \`color\`; use \`sx={{ bgcolor: '...' }}\` instead.
44
+ - \`elevation?: number\`.
45
+ - \`enableColorOnDark?: boolean\`.
46
+ - \`sx?: object\` — granular styling via the system.
47
+
48
+ ---
49
+ ## Basic usage (React)
50
+ ~~~tsx
51
+ import { AppBar, Toolbar, Typography, Button, Box } from '@/gui/atoms';
52
+
53
+ <AppBar position="fixed" color="default" sx={{ borderBottom: '1px solid', borderColor: 'divider' }}>
54
+ <Toolbar variant="dense">
55
+ <Typography variant="h6" sx={{ flexGrow: 1 }}>My App</Typography>
56
+ <Button variant="text">Login</Button>
57
+ </Toolbar>
58
+ </AppBar>
59
+ ~~~
60
+
61
+ ---
62
+ ## Declarative JSON / Config usage
63
+ This GUI's **resolver** lets you describe an app bar via a config object. Example payload for the \`AppBarResolver\`:
64
+
65
+ ~~~json
66
+ {
67
+ "type": "AppBar",
68
+ "props": {
69
+ "position": "fixed",
70
+ "color": "default",
71
+ "sx": { "borderBottom": "1px solid", "borderColor": "divider" },
72
+ "children": {
73
+ "type": "Toolbar",
74
+ "props": {
75
+ "variant": "dense",
76
+ "children": [
77
+ { "type": "Typography", "props": { "variant": "h6", "sx": { "flexGrow": 1 }, "children": "My App" } },
78
+ { "type": "Button", "props": { "variant": "text", "children": "Login" } }
79
+ ]
80
+ }
81
+ }
82
+ }
83
+ }
84
+ ~~~
85
+
86
+ > The resolver maps this spec to real React elements, preserving polymorphism and \`sx\` styling.
87
+ `,
88
+ },
89
+ },
90
+ },
91
+ argTypes: {
92
+ position: {
93
+ control: { type: 'select' },
94
+ options: ['fixed', 'absolute', 'sticky', 'static', 'relative'],
95
+ },
96
+ color: {
97
+ control: { type: 'select' },
98
+ options: ['default', 'inherit', 'primary', 'secondary', 'transparent'],
99
+ },
100
+ elevation: { control: { type: 'number' } },
101
+ enableColorOnDark: { control: { type: 'boolean' } },
102
+ // component polymorphism is supported but not exposed as a control in SB
103
+ component: { table: { disable: true } },
104
+ },
105
+ args: {
106
+ position: 'fixed',
107
+ elevation: 0,
108
+ enableColorOnDark: false,
109
+ sx: { borderBottom: '1px solid', borderColor: 'divider' },
110
+ },
111
+ };
112
+ export default meta;
113
+
114
+ type Story = StoryObj<typeof AppBar>;
115
+
116
+ // ======================= Stories =======================
117
+ export const Playground: Story = {
118
+ render: (args) => (
119
+ <AppBar {...args}>
120
+ <Toolbar variant="dense">
121
+ <Typography variant="h6" sx={{ flexGrow: 1 }}>Playground</Typography>
122
+ <Button variant="text">Action</Button>
123
+ </Toolbar>
124
+ </AppBar>
125
+ ),
126
+ };
127
+
128
+ export const Positions: Story = {
129
+ render: (args) => (
130
+ <div style={{ display: 'grid', gap: 16 }}>
131
+ {(['fixed', 'absolute', 'sticky', 'static', 'relative'] as const).map((pos) => (
132
+ <AppBar key={pos} {...args} position={pos}>
133
+ <Toolbar variant="dense">
134
+ <Typography variant="subtitle1" sx={{ flexGrow: 1 }}>
135
+ position = {pos}
136
+ </Typography>
137
+ <Button variant="text">Action</Button>
138
+ </Toolbar>
139
+ </AppBar>
140
+ ))}
141
+ </div>
142
+ ),
143
+ };
144
+
145
+ export const Colors: Story = {
146
+ parameters: {
147
+ docs: {
148
+ description: {
149
+ story: `
150
+ The AppBar component only supports the following values for the \`color\` prop: \`default\`, \`inherit\`, \`primary\`, \`secondary\`, and \`transparent\`.
151
+ For colors like \`success\`, \`info\`, \`warning\`, and \`error\`, use the \`sx\` prop with \`bgcolor\` instead, e.g. \`sx={{ bgcolor: 'success.main' }}\`.
152
+ `,
153
+ },
154
+ },
155
+ },
156
+ args: { position: 'static' },
157
+ render: (args) => (
158
+ <div style={{ display: 'grid', gap: 12 }}>
159
+ {(['default', 'inherit', 'primary', 'secondary', 'transparent'] as const).map((c) => (
160
+ <AppBar key={c} {...args} color={c}>
161
+ <Toolbar variant="dense">
162
+ <Typography variant="subtitle2" sx={{ flexGrow: 1 }}>color = {c}</Typography>
163
+ <Button variant="text">Action</Button>
164
+ </Toolbar>
165
+ </AppBar>
166
+ ))}
167
+ </div>
168
+ ),
169
+ };
170
+
171
+ /**
172
+ * The AppBar component does not support 'success', 'info', 'warning', or 'error' as values for the color prop.
173
+ * To use these colors, apply them via the sx prop with bgcolor instead.
174
+ */
175
+ export const CustomColorsWithSx: Story = {
176
+ args: { position: 'static' },
177
+ render: (args) => (
178
+ <div style={{ display: 'grid', gap: 12 }}>
179
+ {(['success.main', 'info.main', 'warning.main', 'error.main'] as const).map((bgcolor) => (
180
+ <AppBar key={bgcolor} {...args} sx={{ bgcolor }}>
181
+ <Toolbar variant="dense">
182
+ <Typography variant="subtitle2" sx={{ flexGrow: 1 }}>{`sx.bgcolor = ${bgcolor}`}</Typography>
183
+ <Button variant="text">Action</Button>
184
+ </Toolbar>
185
+ </AppBar>
186
+ ))}
187
+ </div>
188
+ ),
189
+ };
190
+
191
+ export const WithToolbar: Story = {
192
+ args: { position: 'static', color: 'default' },
193
+ render: (args) => (
194
+ <AppBar {...args} sx={{ px: 2, borderBottom: '1px solid', borderColor: 'divider' }}>
195
+ <Toolbar variant="dense">
196
+ <Typography variant="h6" sx={{ flexGrow: 1 }}>With Toolbar</Typography>
197
+ <Box sx={{ display: 'flex', gap: 1 }}>
198
+ <Button variant="text">Login</Button>
199
+ <Button variant="contained" color="primary">Sign up</Button>
200
+ </Box>
201
+ </Toolbar>
202
+ </AppBar>
203
+ ),
204
+ };
205
+
206
+ export const Elevation: Story = {
207
+ args: { position: 'static', color: 'default' },
208
+ render: (args) => (
209
+ <div style={{ display: 'grid', gap: 12 }}>
210
+ {[0, 1, 2, 4, 8].map((elev) => (
211
+ <AppBar key={elev} {...args} elevation={elev}>
212
+ <Toolbar variant="dense">
213
+ <Typography variant="subtitle2" sx={{ flexGrow: 1 }}>elevation = {elev}</Typography>
214
+ <Button variant="text">Action</Button>
215
+ </Toolbar>
216
+ </AppBar>
217
+ ))}
218
+ </div>
219
+ ),
220
+ };
221
+
222
+ export const EnableColorOnDark: Story = {
223
+ args: { position: 'static', color: 'primary', enableColorOnDark: true },
224
+ render: (args) => (
225
+ <AppBar {...args}>
226
+ <Toolbar variant="dense">
227
+ <Typography variant="subtitle2" sx={{ flexGrow: 1 }}>enableColorOnDark = true</Typography>
228
+ <Button variant="text">Action</Button>
229
+ </Toolbar>
230
+ </AppBar>
231
+ ),
232
+ };
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import MuiAppBar, { AppBarProps as MuiAppBarProps } from '@mui/material/AppBar';
3
+ export type AppBarProps = MuiAppBarProps;
4
+ const AppBar = React.forwardRef<HTMLDivElement, AppBarProps>((props, ref) => {
5
+ return <MuiAppBar ref={ref} {...props} />;
6
+ });
7
+
8
+ AppBar.displayName = 'AppBar';
9
+
10
+ export default AppBar;