this.gui 1.0.18 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (480) hide show
  1. package/.storybook/main.js +40 -0
  2. package/.storybook/manager-head.html +13 -0
  3. package/.storybook/manager.js +15 -0
  4. package/.storybook/preview.tsx +54 -0
  5. package/.storybook/vitest.setup.js +6 -0
  6. package/.storybook/withLayout.tsx +18 -0
  7. package/README.md +1 -220
  8. package/dist/GUI.png +0 -0
  9. package/dist/GUI2.png +0 -0
  10. package/dist/favicon.ico +0 -0
  11. package/dist/this-gui.es.js +108493 -5056
  12. package/dist/this-gui.umd.js +239 -44
  13. package/dist/this.GUI.png +0 -0
  14. package/nodes/overall approach.md +93 -0
  15. package/notes/Proyect.md +109 -0
  16. package/package.json +71 -54
  17. package/public/GUI.png +0 -0
  18. package/public/GUI2.png +0 -0
  19. package/public/favicon.ico +0 -0
  20. package/public/this.GUI.png +0 -0
  21. package/src/components/generics/Cards/Gridme.jsx +52 -0
  22. package/src/components/generics/Cards/LilBox.jsx +65 -0
  23. package/src/components/generics/Cards/ModuleCard.jsx +106 -0
  24. package/src/components/generics/Chats/FullChatBot.jsx +223 -0
  25. package/src/components/generics/Code/CodeBlock.jsx +33 -0
  26. package/src/components/generics/Feedback/Callout.jsx +92 -0
  27. package/src/components/generics/Layout/GridX.jsx +29 -0
  28. package/src/components/generics/Layout/Hero2.jsx +132 -0
  29. package/src/components/generics/Layout/PageContainer.jsx +29 -0
  30. package/src/components/generics/Layout/PageDivider.jsx +20 -0
  31. package/src/components/generics/Layout/Section.jsx +43 -0
  32. package/src/components/generics/Layout/SectionHeader.jsx +21 -0
  33. package/src/components/generics/Media/Img.jsx +58 -0
  34. package/src/components/generics/Media/VideoEmbed.jsx +51 -0
  35. package/src/components/generics/Organization/TableOfContents.jsx +51 -0
  36. package/src/components/generics/Organization/Tabs.jsx +45 -0
  37. package/src/components/generics/Text/TextList.jsx +41 -0
  38. package/src/components/generics/Text/TextParagraph.jsx +28 -0
  39. package/src/components/generics/Text/TextQuote.jsx +23 -0
  40. package/src/components/generics/Text/TextTitle.jsx +44 -0
  41. package/src/components/this.me/MeActive.jsx +24 -0
  42. package/src/components/this.me/MeFloating.jsx +183 -0
  43. package/src/components/this.me/MeInactive.jsx +21 -0
  44. package/src/components/this.me/MeListUs.jsx +40 -0
  45. package/src/components/this.me/MeState.jsx +25 -0
  46. package/src/components/this.me/hooks/useMe.js +43 -0
  47. package/src/context/GuiProvider.tsx +243 -0
  48. package/src/gui/atoms/AppBar/AppBar.resolver.tsx +77 -0
  49. package/src/gui/atoms/AppBar/AppBar.stories.tsx +232 -0
  50. package/src/gui/atoms/AppBar/AppBar.tsx +10 -0
  51. package/src/gui/atoms/Box/Box.resolver.tsx +171 -0
  52. package/src/gui/atoms/Box/Box.stories.tsx +271 -0
  53. package/src/gui/atoms/Box/Box.tsx +15 -0
  54. package/src/gui/atoms/Button/Button.resolver.tsx +98 -0
  55. package/src/gui/atoms/Button/Button.stories.tsx +225 -0
  56. package/src/gui/atoms/Button/Button.tsx +40 -0
  57. package/src/gui/atoms/Collapse/Collapse.resolver.tsx +85 -0
  58. package/src/gui/atoms/Collapse/Collapse.stories.tsx +136 -0
  59. package/src/gui/atoms/Collapse/Collapse.tsx +17 -0
  60. package/src/gui/atoms/Divider/Divider.resolver.tsx +95 -0
  61. package/src/gui/atoms/Divider/Divider.stories.tsx +109 -0
  62. package/src/gui/atoms/Divider/Divider.tsx +14 -0
  63. package/src/gui/atoms/Drawer/Drawer.resolver.tsx +116 -0
  64. package/src/gui/atoms/Drawer/Drawer.stories.tsx +229 -0
  65. package/src/gui/atoms/Drawer/Drawer.tsx +8 -0
  66. package/src/gui/atoms/IconButton/IconButton.resolver.tsx +135 -0
  67. package/src/gui/atoms/IconButton/IconButton.stories.tsx +141 -0
  68. package/src/gui/atoms/IconButton/IconButton.tsx +22 -0
  69. package/src/gui/atoms/Link/Link.resolver.tsx +75 -0
  70. package/src/gui/atoms/Link/Link.stories.tsx +164 -0
  71. package/src/gui/atoms/Link/Link.tsx +14 -0
  72. package/src/gui/atoms/List/List.resolver.tsx +95 -0
  73. package/src/gui/atoms/List/List.stories.tsx +143 -0
  74. package/src/gui/atoms/List/List.tsx +20 -0
  75. package/src/gui/atoms/ListItem/ListItem.resolver.tsx +88 -0
  76. package/src/gui/atoms/ListItem/ListItem.stories.tsx +157 -0
  77. package/src/gui/atoms/ListItem/ListItem.tsx +19 -0
  78. package/src/gui/atoms/ListItemButton/ListItemButton.resolver.tsx +208 -0
  79. package/src/gui/atoms/ListItemButton/ListItemButton.stories.tsx +161 -0
  80. package/src/gui/atoms/ListItemButton/ListItemButton.tsx +15 -0
  81. package/src/gui/atoms/ListItemIcon/ListItemIcon.resolver.tsx +102 -0
  82. package/src/gui/atoms/ListItemIcon/ListItemIcon.stories.tsx +135 -0
  83. package/src/gui/atoms/ListItemIcon/ListItemIcon.tsx +11 -0
  84. package/src/gui/atoms/ListItemText/ListItemText.resolver.tsx +112 -0
  85. package/src/gui/atoms/ListItemText/ListItemText.stories.tsx +162 -0
  86. package/src/gui/atoms/ListItemText/ListItemText.tsx +15 -0
  87. package/src/gui/atoms/Menu/Menu.resolver.tsx +112 -0
  88. package/src/gui/atoms/Menu/Menu.stories.tsx +168 -0
  89. package/src/gui/atoms/Menu/Menu.tsx +17 -0
  90. package/src/gui/atoms/MenuItem/MenuItem.resolver.tsx +183 -0
  91. package/src/gui/atoms/MenuItem/MenuItem.stories.tsx +138 -0
  92. package/src/gui/atoms/MenuItem/MenuItem.tsx +14 -0
  93. package/src/gui/atoms/Paper/Paper.resolver.tsx +98 -0
  94. package/src/gui/atoms/Paper/Paper.stories.tsx +191 -0
  95. package/src/gui/atoms/Paper/Paper.tsx +17 -0
  96. package/src/gui/atoms/Stack/Stack.resolver.tsx +94 -0
  97. package/src/gui/atoms/Stack/Stack.stories.tsx +166 -0
  98. package/src/gui/atoms/Stack/Stack.tsx +15 -0
  99. package/src/gui/atoms/Switch/Switch.resolver.tsx +53 -0
  100. package/src/gui/atoms/Switch/Switch.stories.tsx +242 -0
  101. package/src/gui/atoms/Switch/Switch.tsx +22 -0
  102. package/src/gui/atoms/Toolbar/Toolbar.resolver.tsx +60 -0
  103. package/src/gui/atoms/Toolbar/Toolbar.stories.tsx +163 -0
  104. package/src/gui/atoms/Toolbar/Toolbar.tsx +16 -0
  105. package/src/gui/atoms/Tooltip/Tooltip.resolver.tsx +142 -0
  106. package/src/gui/atoms/Tooltip/Tooltip.stories.tsx +118 -0
  107. package/src/gui/atoms/Tooltip/Tooltip.tsx +78 -0
  108. package/src/gui/atoms/Typography/Typography.resolver.tsx +158 -0
  109. package/src/gui/atoms/Typography/Typography.stories.tsx +228 -0
  110. package/src/gui/atoms/Typography/Typography.tsx +27 -0
  111. package/src/gui/atoms.tsx +129 -0
  112. package/src/gui/index.ts +69 -0
  113. package/src/gui/molecules/AppBars/Footer/Footer.resolver.tsx +104 -0
  114. package/src/gui/molecules/AppBars/Footer/Footer.stories.tsx +499 -0
  115. package/src/gui/molecules/AppBars/Footer/Footer.tsx +307 -0
  116. package/src/gui/molecules/AppBars/LeftSidebar/LeftSidebar.resolver.tsx +75 -0
  117. package/src/gui/molecules/AppBars/LeftSidebar/LeftSidebar.stories.tsx +61 -0
  118. package/src/gui/molecules/AppBars/LeftSidebar/LeftSidebar.tsx +511 -0
  119. package/src/gui/molecules/AppBars/LeftSidebar/SidebarToggleButton.tsx +51 -0
  120. package/src/gui/molecules/AppBars/RightSidebar/RightSidebar.resolver.tsx +97 -0
  121. package/src/gui/molecules/AppBars/RightSidebar/RightSidebar.stories.tsx +294 -0
  122. package/src/gui/molecules/AppBars/RightSidebar/RightSidebar.tsx +295 -0
  123. package/src/gui/molecules/AppBars/StickyOptions/StickyOptionsTop.stories.tsx +480 -0
  124. package/src/gui/molecules/AppBars/StickyOptions/StickyOptionsTop.tsx +484 -0
  125. package/src/gui/molecules/AppBars/TopBar/TopBar.resolver.tsx +84 -0
  126. package/src/gui/molecules/AppBars/TopBar/TopBar.stories.tsx +297 -0
  127. package/src/gui/molecules/AppBars/TopBar/TopBar.tsx +299 -0
  128. package/src/gui/molecules/Utilities/ThemeModeToggle/ThemeModeToggle.resolver.tsx +72 -0
  129. package/src/gui/molecules/Utilities/ThemeModeToggle/ThemeModeToggle.stories.tsx +154 -0
  130. package/src/gui/molecules/Utilities/ThemeModeToggle/ThemeModeToggle.tsx +100 -0
  131. package/src/gui/molecules/Utilities/ThemeSelector.jsx +281 -0
  132. package/src/gui/utils/nodeID.ts +8 -0
  133. package/src/index.js +111 -0
  134. package/src/registry/GuiRegistry.ts +19 -0
  135. package/src/registry/factory.ts +12 -0
  136. package/src/registry/index.ts +3 -0
  137. package/src/registry/types.ts +6 -0
  138. package/src/stories/01.Home.mdx +22 -0
  139. package/src/stories/02.Understanding.This.GUI.md +149 -0
  140. package/src/stories/03.Themes.mdx +235 -0
  141. package/src/stories/04.GuiProvider.md +126 -0
  142. package/src/stories/04.GuiProvider.mdx +129 -0
  143. package/src/stories/Theme/BreakPointsAndGrids.stories.jsx +185 -0
  144. package/src/stories/Theme/Colors.stories.jsx +245 -0
  145. package/src/stories/Theme/Icons.stories.jsx +313 -0
  146. package/src/stories/Theme/Motion.stories.jsx +206 -0
  147. package/src/stories/Theme/ShadowAndElevation.stories.jsx +95 -0
  148. package/src/stories/Theme/SpacingAndRadius.stories.jsx +129 -0
  149. package/src/stories/Theme/Typography.stories.jsx +211 -0
  150. package/src/stories/assets/this.GUI.png +0 -0
  151. package/src/templates/BrowserExtension.jsx +56 -0
  152. package/src/templates/Layout.tsx +36 -0
  153. package/src/templates/Minimal.jsx +123 -0
  154. package/src/templates/Shell/Shell.jsx +107 -0
  155. package/src/themes/fromTokens.ts +352 -0
  156. package/src/themes/icons/Icon.tsx +137 -0
  157. package/src/themes/icons/packs/Lucide.ts +72 -0
  158. package/src/themes/icons/packs/Material.ts +87 -0
  159. package/src/themes/icons/registry.tsx +178 -0
  160. package/src/themes/index.js +116 -0
  161. package/src/themes/theme.d.ts +116 -0
  162. package/src/themes/tokens/global.tokens.json +107 -0
  163. package/src/themes/tokens/neurons/dark.tokens.json +45 -0
  164. package/src/themes/tokens/neurons/light.tokens.json +51 -0
  165. package/src/themes/tokens/neurons/manifest.json +23 -0
  166. package/src/types/theme.d.ts +32 -0
  167. package/src/types/viewport.ts +132 -0
  168. package/tsconfig.json +24 -0
  169. package/vite.config.js +74 -0
  170. package/dist/style.css +0 -1
  171. package/src/App.jsx +0 -39
  172. package/src/CreatePage.jsx +0 -61
  173. package/src/MDXEditor.jsx +0 -51
  174. package/src/MdxProvider.jsx +0 -20
  175. package/src/Page.jsx +0 -28
  176. package/src/PageDashboard.jsx +0 -56
  177. package/src/SiteBuilder.jsx +0 -108
  178. package/src/example.json +0 -43
  179. package/src/index.mdx +0 -164
  180. package/src/main.jsx +0 -15
  181. package/src/scripts/ComponentRegistry.js +0 -70
  182. package/src/scripts/logASCIIArt.js +0 -12
  183. package/src/scripts/postinstall.js +0 -111
  184. package/src/scripts/renderComponents.js +0 -11
  185. package/src/stories/Atoms/Alert/Alert.css +0 -211
  186. package/src/stories/Atoms/Alert/Alert.jsx +0 -56
  187. package/src/stories/Atoms/Alert/Alert.stories.jsx +0 -167
  188. package/src/stories/Atoms/Audio/Audio.css +0 -259
  189. package/src/stories/Atoms/Audio/Audio.jsx +0 -216
  190. package/src/stories/Atoms/Audio/Audio.stories.jsx +0 -191
  191. package/src/stories/Atoms/Badge/Badge.css +0 -249
  192. package/src/stories/Atoms/Badge/Badge.jsx +0 -54
  193. package/src/stories/Atoms/Badge/Badge.stories.jsx +0 -121
  194. package/src/stories/Atoms/Button/Button.css +0 -332
  195. package/src/stories/Atoms/Button/Button.jsx +0 -44
  196. package/src/stories/Atoms/Button/Button.stories.jsx +0 -209
  197. package/src/stories/Atoms/Caption/Caption.css +0 -169
  198. package/src/stories/Atoms/Caption/Caption.jsx +0 -72
  199. package/src/stories/Atoms/Caption/Caption.stories.jsx +0 -207
  200. package/src/stories/Atoms/Checkbox/Checkbox.css +0 -182
  201. package/src/stories/Atoms/Checkbox/Checkbox.jsx +0 -83
  202. package/src/stories/Atoms/Checkbox/Checkbox.stories.jsx +0 -112
  203. package/src/stories/Atoms/Container/Container.css +0 -470
  204. package/src/stories/Atoms/Container/Container.jsx +0 -116
  205. package/src/stories/Atoms/Container/Container.stories.jsx +0 -145
  206. package/src/stories/Atoms/Divider/Divider.css +0 -147
  207. package/src/stories/Atoms/Divider/Divider.jsx +0 -62
  208. package/src/stories/Atoms/Divider/Divider.stories.jsx +0 -105
  209. package/src/stories/Atoms/Grid/Grid.css +0 -160
  210. package/src/stories/Atoms/Grid/Grid.jsx +0 -43
  211. package/src/stories/Atoms/Grid/Grid.stories.jsx +0 -84
  212. package/src/stories/Atoms/Heading/Heading.css +0 -112
  213. package/src/stories/Atoms/Heading/Heading.jsx +0 -69
  214. package/src/stories/Atoms/Heading/Heading.stories.jsx +0 -130
  215. package/src/stories/Atoms/Icon/Icon.css +0 -240
  216. package/src/stories/Atoms/Icon/Icon.jsx +0 -80
  217. package/src/stories/Atoms/Icon/Icon.stories.jsx +0 -177
  218. package/src/stories/Atoms/Image/Image.css +0 -245
  219. package/src/stories/Atoms/Image/Image.jsx +0 -175
  220. package/src/stories/Atoms/Image/Image.stories.jsx +0 -332
  221. package/src/stories/Atoms/Label/Label.css +0 -171
  222. package/src/stories/Atoms/Label/Label.jsx +0 -71
  223. package/src/stories/Atoms/Label/Label.stories.jsx +0 -180
  224. package/src/stories/Atoms/Link/Link.css +0 -51
  225. package/src/stories/Atoms/Link/Link.jsx +0 -72
  226. package/src/stories/Atoms/Link/Link.stories.jsx +0 -153
  227. package/src/stories/Atoms/Loader/Loader.css +0 -106
  228. package/src/stories/Atoms/Loader/Loader.jsx +0 -58
  229. package/src/stories/Atoms/Loader/Loader.stories.jsx +0 -99
  230. package/src/stories/Atoms/Logo/Logo.css +0 -94
  231. package/src/stories/Atoms/Logo/Logo.jsx +0 -53
  232. package/src/stories/Atoms/Logo/Logo.stories.jsx +0 -120
  233. package/src/stories/Atoms/Paragraph/Paragraph.css +0 -180
  234. package/src/stories/Atoms/Paragraph/Paragraph.jsx +0 -77
  235. package/src/stories/Atoms/Paragraph/Paragraph.stories.jsx +0 -143
  236. package/src/stories/Atoms/ProgressBar/ProgressBar.css +0 -127
  237. package/src/stories/Atoms/ProgressBar/ProgressBar.jsx +0 -40
  238. package/src/stories/Atoms/ProgressBar/ProgressBar.stories.jsx +0 -86
  239. package/src/stories/Atoms/RadioButton/RadioButton.css +0 -130
  240. package/src/stories/Atoms/RadioButton/RadioButton.jsx +0 -87
  241. package/src/stories/Atoms/RadioButton/RadioButton.stories.jsx +0 -113
  242. package/src/stories/Atoms/Range/Range.css +0 -169
  243. package/src/stories/Atoms/Range/Range.jsx +0 -87
  244. package/src/stories/Atoms/Range/Range.stories.jsx +0 -110
  245. package/src/stories/Atoms/Section/Section.css +0 -268
  246. package/src/stories/Atoms/Section/Section.jsx +0 -63
  247. package/src/stories/Atoms/Section/Section.stories.jsx +0 -46
  248. package/src/stories/Atoms/Select/Select.css +0 -87
  249. package/src/stories/Atoms/Select/Select.jsx +0 -73
  250. package/src/stories/Atoms/Select/Select.stories.jsx +0 -109
  251. package/src/stories/Atoms/Slider/Slider.css +0 -90
  252. package/src/stories/Atoms/Slider/Slider.jsx +0 -129
  253. package/src/stories/Atoms/Slider/Slider.stories.jsx +0 -90
  254. package/src/stories/Atoms/Snackbar/Snackbar.css +0 -313
  255. package/src/stories/Atoms/Snackbar/Snackbar.jsx +0 -72
  256. package/src/stories/Atoms/Snackbar/Snackbar.stories.jsx +0 -78
  257. package/src/stories/Atoms/Spacer/Spacer.css +0 -114
  258. package/src/stories/Atoms/Spacer/Spacer.jsx +0 -35
  259. package/src/stories/Atoms/Spacer/Spacer.stories.jsx +0 -61
  260. package/src/stories/Atoms/Spinner/Spinner.css +0 -110
  261. package/src/stories/Atoms/Spinner/Spinner.jsx +0 -65
  262. package/src/stories/Atoms/Spinner/Spinner.stories.jsx +0 -58
  263. package/src/stories/Atoms/Tag/Tag.css +0 -112
  264. package/src/stories/Atoms/Tag/Tag.jsx +0 -75
  265. package/src/stories/Atoms/Tag/Tag.stories.jsx +0 -67
  266. package/src/stories/Atoms/TextArea/TextArea.css +0 -99
  267. package/src/stories/Atoms/TextArea/TextArea.jsx +0 -118
  268. package/src/stories/Atoms/TextArea/TextArea.stories.jsx +0 -36
  269. package/src/stories/Atoms/TextInput/TextInput.css +0 -102
  270. package/src/stories/Atoms/TextInput/TextInput.jsx +0 -133
  271. package/src/stories/Atoms/TextInput/TextInput.stories.jsx +0 -69
  272. package/src/stories/Atoms/Toggle/Toggle.css +0 -118
  273. package/src/stories/Atoms/Toggle/Toggle.jsx +0 -69
  274. package/src/stories/Atoms/Toggle/Toggle.stories.jsx +0 -35
  275. package/src/stories/Atoms/Tooltip/Tooltip.css +0 -383
  276. package/src/stories/Atoms/Tooltip/Tooltip.jsx +0 -46
  277. package/src/stories/Atoms/Tooltip/Tooltip.stories.jsx +0 -52
  278. package/src/stories/Atoms/Video/Video.css +0 -39
  279. package/src/stories/Atoms/Video/Video.jsx +0 -78
  280. package/src/stories/Atoms/Video/Video.stories.jsx +0 -41
  281. package/src/stories/Atoms/index.js +0 -72
  282. package/src/stories/Atoms/meta_Atoms.js +0 -51
  283. package/src/stories/Components.js +0 -198
  284. package/src/stories/Getting Started.mdx +0 -239
  285. package/src/stories/Layouts/Accordion/Accordion.css +0 -293
  286. package/src/stories/Layouts/Accordion/Accordion.jsx +0 -74
  287. package/src/stories/Layouts/Accordion/Accordion.stories.jsx +0 -39
  288. package/src/stories/Layouts/Flexbox/Flexbox.css +0 -16
  289. package/src/stories/Layouts/Flexbox/Flexbox.jsx +0 -11
  290. package/src/stories/Layouts/Flexbox/Flexbox.stories.jsx +0 -28
  291. package/src/stories/Layouts/Footer/Footer.css +0 -16
  292. package/src/stories/Layouts/Footer/Footer.jsx +0 -31
  293. package/src/stories/Layouts/Footer/Footer.stories.jsx +0 -28
  294. package/src/stories/Layouts/Header/Header.css +0 -16
  295. package/src/stories/Layouts/Header/Header.jsx +0 -31
  296. package/src/stories/Layouts/Header/Header.stories.jsx +0 -28
  297. package/src/stories/Layouts/HeroBanner/HeroBanner.css +0 -16
  298. package/src/stories/Layouts/HeroBanner/HeroBanner.jsx +0 -31
  299. package/src/stories/Layouts/HeroBanner/HeroBanner.stories.jsx +0 -28
  300. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.css +0 -16
  301. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.jsx +0 -31
  302. package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.stories.jsx +0 -28
  303. package/src/stories/Layouts/Pagination/Pagination.css +0 -16
  304. package/src/stories/Layouts/Pagination/Pagination.jsx +0 -31
  305. package/src/stories/Layouts/Pagination/Pagination.stories.jsx +0 -28
  306. package/src/stories/Layouts/Sidebar/Sidebar.css +0 -16
  307. package/src/stories/Layouts/Sidebar/Sidebar.jsx +0 -71
  308. package/src/stories/Layouts/Sidebar/Sidebar.stories.jsx +0 -28
  309. package/src/stories/Layouts/Tabs/Tabs.css +0 -16
  310. package/src/stories/Layouts/Tabs/Tabs.jsx +0 -31
  311. package/src/stories/Layouts/Tabs/Tabs.stories.jsx +0 -28
  312. package/src/stories/Layouts/index.js +0 -25
  313. package/src/stories/Layouts/meta_Layouts.js +0 -28
  314. package/src/stories/MDX.mdx +0 -118
  315. package/src/stories/Miscellaneous/Miscellaneous.js +0 -24
  316. package/src/stories/Molecules/Accordion/Accordion.css +0 -4
  317. package/src/stories/Molecules/Accordion/Accordion.jsx +0 -25
  318. package/src/stories/Molecules/Accordion/Accordion.stories.jsx +0 -20
  319. package/src/stories/Molecules/AudioPlayer/AudioPlayer.css +0 -97
  320. package/src/stories/Molecules/AudioPlayer/AudioPlayer.jsx +0 -244
  321. package/src/stories/Molecules/AudioPlayer/AudioPlayer.stories.jsx +0 -55
  322. package/src/stories/Molecules/AvatarWithName/AvatarWithName.css +0 -130
  323. package/src/stories/Molecules/AvatarWithName/AvatarWithName.jsx +0 -80
  324. package/src/stories/Molecules/AvatarWithName/AvatarWithName.stories.jsx +0 -20
  325. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.css +0 -147
  326. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.jsx +0 -51
  327. package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.stories.jsx +0 -36
  328. package/src/stories/Molecules/ButtonGroup/ButtonGroup.css +0 -465
  329. package/src/stories/Molecules/ButtonGroup/ButtonGroup.jsx +0 -47
  330. package/src/stories/Molecules/ButtonGroup/ButtonGroup.stories.jsx +0 -44
  331. package/src/stories/Molecules/Card/Card.css +0 -41
  332. package/src/stories/Molecules/Card/Card.jsx +0 -92
  333. package/src/stories/Molecules/Card/Card.stories.jsx +0 -34
  334. package/src/stories/Molecules/ComparisonTable/ComparisonTable.css +0 -35
  335. package/src/stories/Molecules/ComparisonTable/ComparisonTable.jsx +0 -104
  336. package/src/stories/Molecules/ComparisonTable/ComparisonTable.stories.jsx +0 -81
  337. package/src/stories/Molecules/DataTable/DataTable.css +0 -4
  338. package/src/stories/Molecules/DataTable/DataTable.jsx +0 -25
  339. package/src/stories/Molecules/DataTable/DataTable.stories.jsx +0 -20
  340. package/src/stories/Molecules/Dropdown/Dropdown.css +0 -192
  341. package/src/stories/Molecules/Dropdown/Dropdown.jsx +0 -96
  342. package/src/stories/Molecules/Dropdown/Dropdown.stories.jsx +0 -45
  343. package/src/stories/Molecules/FileUpload/FileUpload.css +0 -4
  344. package/src/stories/Molecules/FileUpload/FileUpload.jsx +0 -25
  345. package/src/stories/Molecules/FileUpload/FileUpload.stories.jsx +0 -20
  346. package/src/stories/Molecules/FormField/FormField.css +0 -4
  347. package/src/stories/Molecules/FormField/FormField.jsx +0 -25
  348. package/src/stories/Molecules/FormField/FormField.stories.jsx +0 -20
  349. package/src/stories/Molecules/Header/Header.css +0 -35
  350. package/src/stories/Molecules/Header/Header.jsx +0 -76
  351. package/src/stories/Molecules/Header/Header.stories.jsx +0 -28
  352. package/src/stories/Molecules/IconButton/IconButton.css +0 -4
  353. package/src/stories/Molecules/IconButton/IconButton.jsx +0 -25
  354. package/src/stories/Molecules/IconButton/IconButton.stories.jsx +0 -20
  355. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.css +0 -4
  356. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.jsx +0 -25
  357. package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.stories.jsx +0 -20
  358. package/src/stories/Molecules/InputGroup/InputGroup.css +0 -4
  359. package/src/stories/Molecules/InputGroup/InputGroup.jsx +0 -25
  360. package/src/stories/Molecules/InputGroup/InputGroup.stories.jsx +0 -20
  361. package/src/stories/Molecules/InputWithLabel/InputWithLabel.css +0 -4
  362. package/src/stories/Molecules/InputWithLabel/InputWithLabel.jsx +0 -25
  363. package/src/stories/Molecules/InputWithLabel/InputWithLabel.stories.jsx +0 -20
  364. package/src/stories/Molecules/List/List.css +0 -4
  365. package/src/stories/Molecules/List/List.jsx +0 -25
  366. package/src/stories/Molecules/List/List.stories.jsx +0 -20
  367. package/src/stories/Molecules/MediaCard/MediaCard.css +0 -4
  368. package/src/stories/Molecules/MediaCard/MediaCard.jsx +0 -25
  369. package/src/stories/Molecules/MediaCard/MediaCard.stories.jsx +0 -20
  370. package/src/stories/Molecules/Modal/Modal.css +0 -4
  371. package/src/stories/Molecules/Modal/Modal.jsx +0 -25
  372. package/src/stories/Molecules/Modal/Modal.stories.jsx +0 -20
  373. package/src/stories/Molecules/Navbar/Navbar.css +0 -91
  374. package/src/stories/Molecules/Navbar/Navbar.jsx +0 -82
  375. package/src/stories/Molecules/Navbar/Navbar.stories.jsx +0 -70
  376. package/src/stories/Molecules/Notification/Notification.css +0 -4
  377. package/src/stories/Molecules/Notification/Notification.jsx +0 -25
  378. package/src/stories/Molecules/Notification/Notification.stories.jsx +0 -20
  379. package/src/stories/Molecules/PricingTable/PricingTable.css +0 -4
  380. package/src/stories/Molecules/PricingTable/PricingTable.jsx +0 -25
  381. package/src/stories/Molecules/PricingTable/PricingTable.stories.jsx +0 -20
  382. package/src/stories/Molecules/SearchBar/SearchBar.css +0 -69
  383. package/src/stories/Molecules/SearchBar/SearchBar.jsx +0 -73
  384. package/src/stories/Molecules/SearchBar/SearchBar.stories.jsx +0 -29
  385. package/src/stories/Molecules/SelectTheme/SelectTheme.css +0 -25
  386. package/src/stories/Molecules/SelectTheme/SelectTheme.jsx +0 -22
  387. package/src/stories/Molecules/SelectTheme/SelectTheme.stories.jsx +0 -24
  388. package/src/stories/Molecules/Sidebar/Sidebar.css +0 -67
  389. package/src/stories/Molecules/Sidebar/Sidebar.jsx +0 -80
  390. package/src/stories/Molecules/Sidebar/Sidebar.stories.jsx +0 -35
  391. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.css +0 -4
  392. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.jsx +0 -25
  393. package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.stories.jsx +0 -20
  394. package/src/stories/Molecules/index.js +0 -58
  395. package/src/stories/Molecules/meta_Molecules.js +0 -47
  396. package/src/stories/Organisms/Profile/UserFriends/UserFriends.context.jsx +0 -15
  397. package/src/stories/Organisms/Profile/UserFriends/UserFriends.css +0 -4
  398. package/src/stories/Organisms/Profile/UserFriends/UserFriends.jsx +0 -13
  399. package/src/stories/Organisms/Profile/UserFriends/UserFriends.stories.jsx +0 -26
  400. package/src/stories/Organisms/Profile/UserPosts/UserPosts.context.jsx +0 -15
  401. package/src/stories/Organisms/Profile/UserPosts/UserPosts.css +0 -4
  402. package/src/stories/Organisms/Profile/UserPosts/UserPosts.jsx +0 -13
  403. package/src/stories/Organisms/Profile/UserPosts/UserPosts.stories.jsx +0 -26
  404. package/src/stories/Organisms/Profile/UserProfile/UserProfile.context.jsx +0 -15
  405. package/src/stories/Organisms/Profile/UserProfile/UserProfile.css +0 -4
  406. package/src/stories/Organisms/Profile/UserProfile/UserProfile.jsx +0 -13
  407. package/src/stories/Organisms/Profile/UserProfile/UserProfile.stories.jsx +0 -26
  408. package/src/stories/Organisms/meta_Organisms.js +0 -39
  409. package/src/stories/Pages/Page/Page.css +0 -69
  410. package/src/stories/Pages/Page/Page.jsx +0 -69
  411. package/src/stories/Pages/Page/Page.stories.js +0 -26
  412. package/src/stories/Pages/Page/Pages.js +0 -31
  413. package/src/stories/Templates/AdminDashboard/AdminDashboard.css +0 -7
  414. package/src/stories/Templates/AdminDashboard/AdminDashboard.jsx +0 -24
  415. package/src/stories/Templates/AdminDashboard/AdminDashboard.stories.jsx +0 -20
  416. package/src/stories/Templates/CallToAction/CallToAction.css +0 -7
  417. package/src/stories/Templates/CallToAction/CallToAction.jsx +0 -24
  418. package/src/stories/Templates/CallToAction/CallToAction.stories.jsx +0 -20
  419. package/src/stories/Templates/FeaturesList/FeaturesList.css +0 -7
  420. package/src/stories/Templates/FeaturesList/FeaturesList.jsx +0 -24
  421. package/src/stories/Templates/FeaturesList/FeaturesList.stories.jsx +0 -20
  422. package/src/stories/Templates/FormSection/FormSection.css +0 -7
  423. package/src/stories/Templates/FormSection/FormSection.jsx +0 -24
  424. package/src/stories/Templates/FormSection/FormSection.stories.jsx +0 -20
  425. package/src/stories/Templates/HeroSection/HeroSection.css +0 -7
  426. package/src/stories/Templates/HeroSection/HeroSection.jsx +0 -24
  427. package/src/stories/Templates/HeroSection/HeroSection.stories.jsx +0 -20
  428. package/src/stories/Templates/LocationInfo/LocationInfo.css +0 -7
  429. package/src/stories/Templates/LocationInfo/LocationInfo.jsx +0 -24
  430. package/src/stories/Templates/LocationInfo/LocationInfo.stories.jsx +0 -20
  431. package/src/stories/Templates/ProductPage/ProductPage.css +0 -7
  432. package/src/stories/Templates/ProductPage/ProductPage.jsx +0 -24
  433. package/src/stories/Templates/ProductPage/ProductPage.stories.jsx +0 -20
  434. package/src/stories/Templates/RegistrationPage/RegistrationPage.css +0 -7
  435. package/src/stories/Templates/RegistrationPage/RegistrationPage.jsx +0 -24
  436. package/src/stories/Templates/RegistrationPage/RegistrationPage.stories.jsx +0 -20
  437. package/src/stories/Templates/ShoppingCart/ShoppingCart.css +0 -7
  438. package/src/stories/Templates/ShoppingCart/ShoppingCart.jsx +0 -24
  439. package/src/stories/Templates/ShoppingCart/ShoppingCart.stories.jsx +0 -20
  440. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.css +0 -7
  441. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.jsx +0 -24
  442. package/src/stories/Templates/SidebarTopNav/SidebarTopNav.stories.jsx +0 -20
  443. package/src/stories/Templates/SignInPage/SignInPage.css +0 -7
  444. package/src/stories/Templates/SignInPage/SignInPage.jsx +0 -24
  445. package/src/stories/Templates/SignInPage/SignInPage.stories.jsx +0 -20
  446. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.css +0 -7
  447. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.jsx +0 -24
  448. package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.stories.jsx +0 -20
  449. package/src/stories/Templates/Testimonials/Testimonials.css +0 -7
  450. package/src/stories/Templates/Testimonials/Testimonials.jsx +0 -24
  451. package/src/stories/Templates/Testimonials/Testimonials.stories.jsx +0 -20
  452. package/src/stories/Templates/index.js +0 -33
  453. package/src/stories/Templates/meta_Templates.js +0 -29
  454. package/src/stories/assets/accessibility.png +0 -0
  455. package/src/stories/assets/accessibility.svg +0 -1
  456. package/src/stories/assets/addon-library.png +0 -0
  457. package/src/stories/assets/assets.png +0 -0
  458. package/src/stories/assets/avif-test-image.avif +0 -0
  459. package/src/stories/assets/context.png +0 -0
  460. package/src/stories/assets/discord.svg +0 -1
  461. package/src/stories/assets/docs.png +0 -0
  462. package/src/stories/assets/figma-plugin.png +0 -0
  463. package/src/stories/assets/github.svg +0 -1
  464. package/src/stories/assets/logo.png +0 -0
  465. package/src/stories/assets/logo.svg +0 -106
  466. package/src/stories/assets/share.png +0 -0
  467. package/src/stories/assets/styling.png +0 -0
  468. package/src/stories/assets/test.svg +0 -3
  469. package/src/stories/assets/testing.png +0 -0
  470. package/src/stories/assets/theming.png +0 -0
  471. package/src/stories/assets/tutorials.svg +0 -1
  472. package/src/stories/assets/youtube.svg +0 -1
  473. package/src/themes/README_Styles.md +0 -301
  474. package/src/themes/ThemeProvider.jsx +0 -61
  475. package/src/themes/styles/github/dark.css +0 -0
  476. package/src/themes/styles/github/light.css +0 -0
  477. package/src/themes/styles/neurons/dark.css +0 -247
  478. package/src/themes/styles/neurons/light.css +0 -170
  479. /package/{src/themes/styles/dracula/dark.css → .storybook/preview-head.html} +0 -0
  480. /package/src/{themes/styles/dracula/light.css → components/this.me/MeCard.jsx} +0 -0
@@ -0,0 +1,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;