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,102 @@
1
+ // src/gui/atoms/ListItemIcon/ListItemIcon.resolver.tsx
2
+ import * as React from 'react';
3
+ import ListItemIcon from './ListItemIcon';
4
+ import Icon from '@/themes/icons/Icon';
5
+ import type { RegistryEntry, ResolveCtx } from '@/registry/types';
6
+ import type { SxProps, Theme } from '@mui/material/styles';
7
+ import { ensureNodeId } from '@/gui/utils/nodeID';
8
+
9
+ /**
10
+ * Declarative spec for ListItemIcon
11
+ *
12
+ * Fidelity
13
+ * - Forwards MUI props faithfully to `<ListItemIcon />`.
14
+ * - `children` has priority over any sugar props.
15
+ *
16
+ * Sugar
17
+ * - `icon`: string token (e.g., "lucide:mail", "mui:settings") or a ReactNode.
18
+ * - `iconProps`: forwarded to `<Icon />` when `icon` is a string.
19
+ * - `iconColor`: convenience alias mapped to Icon's color/htmlColor semantics.
20
+ * - `size`: sets Icon size (default 20).
21
+ *
22
+ * Editor/Inspector
23
+ * - Always emits a stable `data-gui-id` (auto via `ensureNodeId`) unless provided.
24
+ */
25
+ export type ListItemIconSpec = {
26
+ type: 'ListItemIcon';
27
+ props?: {
28
+ // content
29
+ children?: React.ReactNode;
30
+
31
+ // sugar for registry-driven icons
32
+ icon?: React.ReactNode | string;
33
+ iconProps?: Record<string, any>;
34
+ iconColor?: string;
35
+ size?: number;
36
+
37
+ // styling
38
+ sx?: SxProps<Theme>;
39
+ className?: string;
40
+ id?: string;
41
+ 'data-testid'?: string;
42
+
43
+ // inspector id (auto if omitted)
44
+ 'data-gui-id'?: string;
45
+
46
+ // passthrough
47
+ [key: string]: any;
48
+ };
49
+ };
50
+
51
+ const normalizeToken = (s: string) => String(s).trim().toLowerCase();
52
+
53
+ const ListItemIconResolver: RegistryEntry = {
54
+ type: 'ListItemIcon',
55
+ resolve(spec: ListItemIconSpec, _ctx?: ResolveCtx) {
56
+ const p = spec.props ?? {};
57
+
58
+ // Build content with precedence: children > icon sugar
59
+ const { children, icon, iconColor, iconProps, size = 20 } = p;
60
+ let content: React.ReactNode = children;
61
+ if (content == null && icon) {
62
+ content =
63
+ typeof icon === 'string'
64
+ ? <Icon name={normalizeToken(icon)} iconColor={iconColor} size={size} {...iconProps} />
65
+ : icon;
66
+ }
67
+
68
+ // Prepare safe props for ListItemIcon (avoid leaking resolver-only keys)
69
+ const {
70
+ // sugar / resolver-only
71
+ icon: _icon,
72
+ iconProps: _iconProps,
73
+ iconColor: _iconColor,
74
+ size: _size,
75
+ 'data-gui-id': providedNodeId,
76
+ // keep common
77
+ sx,
78
+ className,
79
+ id,
80
+ 'data-testid': dataTestId,
81
+ // everything else passes through
82
+ ...rest
83
+ } = p;
84
+
85
+ const dataGuiId = ensureNodeId('list-item-icon', providedNodeId);
86
+
87
+ return (
88
+ <ListItemIcon
89
+ sx={sx}
90
+ className={className}
91
+ id={id}
92
+ data-testid={dataTestId}
93
+ data-gui-id={dataGuiId}
94
+ {...rest}
95
+ >
96
+ {content}
97
+ </ListItemIcon>
98
+ );
99
+ },
100
+ };
101
+
102
+ export default ListItemIconResolver;
@@ -0,0 +1,135 @@
1
+ import * as React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import List from '@mui/material/List';
4
+ import ListItem from '@mui/material/ListItem';
5
+ import ListItemText from '../ListItemText/ListItemText';
6
+ import ListItemIcon from './ListItemIcon';
7
+ import Icon from '@/themes/icons/Icon';
8
+ import { MemoryRouter } from 'react-router-dom';
9
+ import GuiProvider from '@/context/GuiProvider';
10
+
11
+ const meta: Meta<typeof ListItemIcon> = {
12
+ title: 'Atoms/ListItemIcon',
13
+ component: ListItemIcon,
14
+ tags: ['autodocs'],
15
+ decorators: [
16
+ (Story) => (
17
+ <MemoryRouter>
18
+ <GuiProvider>
19
+ <div style={{ padding: 16, minHeight: 260, maxWidth: 520 }}>
20
+ <Story />
21
+ </div>
22
+ </GuiProvider>
23
+ </MemoryRouter>
24
+ ),
25
+ ],
26
+ parameters: {
27
+ docs: {
28
+ description: {
29
+ component: `
30
+ The **ListItemIcon** atom is a thin wrapper around MUI's \`MuiListItemIcon\` and remains faithful to its API.
31
+
32
+ In **declarative** mode, the resolver adds sugar to render icons by **token** via the registry:
33
+ - \`icon\`: string token (e.g., \`"lucide:mail"\`, \`"mui:settings"\`) or React node
34
+ - \`iconProps\`: forwarded to the registry \`<Icon />\` when \`icon\` is a token
35
+ - \`iconColor\`: convenience color for the registry icon
36
+ - \`size\`: icon size (default 20)
37
+
38
+ Tokens are **normalized** (lowercased & trimmed) to avoid missing icons due to casing.
39
+
40
+ ---
41
+ ## React usage
42
+ ~~~jsx
43
+ <List>
44
+ <ListItem>
45
+ <ListItemIcon sx={{ minWidth: 36 }}>
46
+ <Icon name="lucide:mail" size={20} />
47
+ </ListItemIcon>
48
+ <ListItemText primary="Inbox" />
49
+ </ListItem>
50
+ </List>
51
+ ~~~
52
+
53
+ ## Declarative JSON / Resolver
54
+ ~~~json
55
+ {
56
+ "type": "ListItemIcon",
57
+ "props": {
58
+ "icon": "lucide:mail",
59
+ "sx": { "minWidth": 36 },
60
+ "iconProps": { "strokeWidth": 1.5 }
61
+ }
62
+ }
63
+ ~~~
64
+ `,
65
+ },
66
+ },
67
+ controls: {
68
+ exclude: ['children'],
69
+ },
70
+ },
71
+ argTypes: {
72
+ sx: { control: 'object', table: { category: 'Style' } },
73
+ className: { control: 'text' },
74
+ },
75
+ args: {
76
+ sx: {},
77
+ children: undefined,
78
+ },
79
+ };
80
+
81
+ export default meta;
82
+ type Story = StoryObj<typeof ListItemIcon>;
83
+
84
+ const DemoList: React.FC<{ children?: React.ReactNode }> = ({ children }) => (
85
+ <List dense>
86
+ <ListItem>{children}</ListItem>
87
+ </List>
88
+ );
89
+
90
+ // ======================= Stories =======================
91
+ export const Playground: Story = {
92
+ render: (args) => (
93
+ <DemoList>
94
+ <ListItemIcon {...args}>
95
+ <Icon name="lucide:mail" />
96
+ </ListItemIcon>
97
+ <ListItemText primary="Item with icon slot" />
98
+ </DemoList>
99
+ ),
100
+ };
101
+
102
+ export const WithTokenViaResolverExample: Story = {
103
+ name: 'Declarative token (doc example)',
104
+ render: () => (
105
+ <DemoList>
106
+ {/* Emula el resultado del resolver al usar icon="lucide:mail" */}
107
+ <ListItemIcon sx={{ minWidth: 36 }}>
108
+ <Icon name="lucide:mail" size={20} />
109
+ </ListItemIcon>
110
+ <ListItemText primary="Inbox (token)" />
111
+ </DemoList>
112
+ ),
113
+ };
114
+
115
+ export const WithReactChild: Story = {
116
+ render: () => (
117
+ <DemoList>
118
+ <ListItemIcon sx={{ minWidth: 40 }}>
119
+ <Icon name="mui:settings" />
120
+ </ListItemIcon>
121
+ <ListItemText primary="Settings (React child)" />
122
+ </DemoList>
123
+ ),
124
+ };
125
+
126
+ export const WithSx: Story = {
127
+ render: () => (
128
+ <DemoList>
129
+ <ListItemIcon sx={{ minWidth: 48 }}>
130
+ <Icon name="lucide:user" />
131
+ </ListItemIcon>
132
+ <ListItemText primary="Custom minWidth via sx" />
133
+ </DemoList>
134
+ ),
135
+ };
@@ -0,0 +1,11 @@
1
+ /*
2
+ * This.GUI — ListItemIcon
3
+ * Thin wrapper that preserves MUI typing.
4
+ * Use our resolver for declarative sugar (icon tokens) and granular styling patterns.
5
+ */
6
+ import * as React from 'react';
7
+ import MuiListItemIcon from '@mui/material/ListItemIcon';
8
+ const ListItemIcon = MuiListItemIcon;
9
+ export type ListItemIconProps = React.ComponentProps<typeof ListItemIcon>;
10
+ (ListItemIcon as any).displayName = 'Gui.ListItemIcon';
11
+ export default ListItemIcon;
@@ -0,0 +1,112 @@
1
+ // src/gui/atoms/ListItemText/ListItemText.resolver.tsx
2
+ import * as React from 'react';
3
+ import ListItemText from './ListItemText';
4
+ import type { RegistryEntry, ResolveCtx } from '@/registry/types';
5
+ import type { SxProps, Theme } from '@mui/material/styles';
6
+ import { ensureNodeId } from '@/gui/utils/nodeID';
7
+
8
+ /**
9
+ * Declarative spec for ListItemText
10
+ *
11
+ * Goals
12
+ * - Be faithful to MUI's API: pass through native props like `primary`, `secondary`,
13
+ * `inset`, `disableTypography`, `primaryTypographyProps`, `secondaryTypographyProps`, etc.
14
+ * - Add **granular styling** sugar for slots:
15
+ * - `sx` → root container
16
+ * - `primarySx` → merged into `primaryTypographyProps.sx`
17
+ * - `secondarySx` → merged into `secondaryTypographyProps.sx`
18
+ *
19
+ * Notes
20
+ * - Not a routing component; we simply respect optional `component` (or `as`) for polymorphism.
21
+ * - We avoid inserting `undefined` inside `sx` arrays; we compute merged values safely.
22
+ */
23
+ export type ListItemTextSpec = {
24
+ type: 'ListItemText';
25
+ props?: {
26
+ // MUI core props (subset; the rest are forwarded)
27
+ primary?: React.ReactNode;
28
+ secondary?: React.ReactNode;
29
+ inset?: boolean;
30
+ disableTypography?: boolean;
31
+ primaryTypographyProps?: any;
32
+ secondaryTypographyProps?: any;
33
+
34
+ // Polymorphism
35
+ component?: any;
36
+ as?: any; // alias of component
37
+
38
+ // Granular styling
39
+ sx?: SxProps<Theme>; // root
40
+ primarySx?: SxProps<Theme>; // Typography for primary
41
+ secondarySx?: SxProps<Theme>; // Typography for secondary
42
+
43
+ // Misc
44
+ id?: string;
45
+ className?: string;
46
+ 'data-testid'?: string;
47
+ 'data-gui-id'?: string;
48
+
49
+ // Allow arbitrary passthrough (Typography props, etc.)
50
+ [key: string]: any;
51
+ };
52
+ };
53
+
54
+ const ListItemTextResolver: RegistryEntry = {
55
+ type: 'ListItemText',
56
+ resolve(spec: ListItemTextSpec, _ctx?: ResolveCtx) {
57
+ const p = spec.props ?? {};
58
+
59
+ const dataGuiId = ensureNodeId('list-item-text', (p as any)['data-gui-id']);
60
+
61
+ // Determine component target (no routing here)
62
+ const component = p.component ?? p.as;
63
+
64
+ const {
65
+ // extract slot style sugar and slot props to merge
66
+ primarySx,
67
+ secondarySx,
68
+ primaryTypographyProps,
69
+ secondaryTypographyProps,
70
+ // strip resolver-only alias
71
+ as: _as,
72
+ "data-gui-id": dataGuiIdProp,
73
+ // keep the rest (includes primary/secondary/sx/etc.)
74
+ ...rest
75
+ } = p;
76
+
77
+ // Merge sx into Typography slot props without introducing undefined in arrays
78
+ const mergedPrimarySx =
79
+ primarySx != null && primaryTypographyProps?.sx != null
80
+ ? [primarySx, primaryTypographyProps.sx]
81
+ : primarySx ?? primaryTypographyProps?.sx;
82
+
83
+ const mergedSecondarySx =
84
+ secondarySx != null && secondaryTypographyProps?.sx != null
85
+ ? [secondarySx, secondaryTypographyProps.sx]
86
+ : secondarySx ?? secondaryTypographyProps?.sx;
87
+
88
+ const finalPrimaryTypographyProps = primaryTypographyProps
89
+ ? { ...primaryTypographyProps, sx: mergedPrimarySx }
90
+ : mergedPrimarySx != null
91
+ ? { sx: mergedPrimarySx }
92
+ : undefined;
93
+
94
+ const finalSecondaryTypographyProps = secondaryTypographyProps
95
+ ? { ...secondaryTypographyProps, sx: mergedSecondarySx }
96
+ : mergedSecondarySx != null
97
+ ? { sx: mergedSecondarySx }
98
+ : undefined;
99
+
100
+ return (
101
+ <ListItemText
102
+ component={component}
103
+ primaryTypographyProps={finalPrimaryTypographyProps}
104
+ secondaryTypographyProps={finalSecondaryTypographyProps}
105
+ data-gui-id={dataGuiId}
106
+ {...rest}
107
+ />
108
+ );
109
+ },
110
+ };
111
+
112
+ export default ListItemTextResolver;
@@ -0,0 +1,162 @@
1
+ import * as React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import ListItemText from './ListItemText';
4
+ import List from '@mui/material/List';
5
+ import ListItem from '@mui/material/ListItem';
6
+ import { MemoryRouter } from 'react-router-dom';
7
+ import GuiProvider from '@/context/GuiProvider';
8
+
9
+ const meta: Meta<typeof ListItemText> = {
10
+ title: 'Atoms/ListItemText',
11
+ component: ListItemText,
12
+ tags: ['autodocs'],
13
+ decorators: [
14
+ (Story) => (
15
+ <MemoryRouter>
16
+ <GuiProvider>
17
+ <div style={{ padding: 16, minHeight: 260, maxWidth: 520 }}>
18
+ <Story />
19
+ </div>
20
+ </GuiProvider>
21
+ </MemoryRouter>
22
+ ),
23
+ ],
24
+ parameters: {
25
+ docs: {
26
+ description: {
27
+ component: `
28
+ The **ListItemText** atom is a thin wrapper around MUI's \`MuiListItemText\`.
29
+ It preserves MUI props and typing (faithful to the original), and fits naturally into This.GUI's declarative/resolver pattern.
30
+
31
+ ---
32
+ ## Basic usage
33
+ ~~~jsx
34
+ <List>
35
+ <ListItem>
36
+ <ListItemText primary="Single line" />
37
+ </ListItem>
38
+ <ListItem>
39
+ <ListItemText primary="Primary" secondary="Secondary description" />
40
+ </ListItem>
41
+ </List>
42
+ ~~~
43
+
44
+ ## Typography control
45
+ ~~~jsx
46
+ <List>
47
+ <ListItem>
48
+ <ListItemText
49
+ primary="Custom primary"
50
+ primaryTypographyProps={{ variant: 'subtitle1', sx: { fontWeight: 600 } }}
51
+ />
52
+ </ListItem>
53
+ <ListItem>
54
+ <ListItemText
55
+ primary="Primary"
56
+ secondary="Secondary"
57
+ secondaryTypographyProps={{ color: 'text.secondary', sx: { fontStyle: 'italic' } }}
58
+ />
59
+ </ListItem>
60
+ </List>
61
+ ~~~
62
+
63
+ ## Declarative JSON / Resolver
64
+ ~~~json
65
+ {
66
+ "type": "ListItemText",
67
+ "props": {
68
+ "primary": "Primary",
69
+ "secondary": "Secondary",
70
+ "primarySx": { "fontWeight": 600 },
71
+ "secondarySx": { "color": "text.secondary", "fontStyle": "italic" }
72
+ }
73
+ }
74
+ ~~~
75
+
76
+ *Note:* In React usage, use \`primaryTypographyProps.sx\` / \`secondaryTypographyProps.sx\`.
77
+ In declarative mode, you can also use \`primarySx\` / \`secondarySx\` and the resolver will merge them into the Typography slot props.
78
+ `,
79
+ },
80
+ },
81
+ controls: {
82
+ exclude: ['component', 'primaryTypographyProps', 'secondaryTypographyProps'],
83
+ },
84
+ },
85
+ argTypes: {
86
+ primary: { control: 'text' },
87
+ secondary: { control: 'text' },
88
+ inset: { control: 'boolean' },
89
+ disableTypography: { control: 'boolean' },
90
+ sx: { control: 'object' },
91
+ },
92
+ args: {
93
+ primary: 'Primary',
94
+ secondary: 'Secondary',
95
+ inset: false,
96
+ disableTypography: false,
97
+ sx: {},
98
+ },
99
+ };
100
+
101
+ export default meta;
102
+ type Story = StoryObj<typeof ListItemText>;
103
+
104
+ const DemoList: React.FC<{ children?: React.ReactNode }> = ({ children }) => (
105
+ <List dense>
106
+ <ListItem>{children}</ListItem>
107
+ </List>
108
+ );
109
+
110
+ // ======================= Stories =======================
111
+ export const Playground: Story = {
112
+ render: (args) => (
113
+ <DemoList>
114
+ <ListItemText {...args} />
115
+ </DemoList>
116
+ ),
117
+ };
118
+
119
+ export const PrimaryOnly: Story = {
120
+ args: { secondary: '' },
121
+ render: (args) => (
122
+ <DemoList>
123
+ <ListItemText {...args} />
124
+ </DemoList>
125
+ ),
126
+ };
127
+
128
+ export const WithTypographyProps: Story = {
129
+ render: () => (
130
+ <List>
131
+ <ListItem>
132
+ <ListItemText
133
+ primary="Custom primary"
134
+ primaryTypographyProps={{ variant: 'subtitle1', sx: { fontWeight: 600 } }}
135
+ />
136
+ </ListItem>
137
+ <ListItem>
138
+ <ListItemText
139
+ primary="Primary"
140
+ secondary="Secondary"
141
+ secondaryTypographyProps={{ color: 'text.secondary', sx: { fontStyle: 'italic' } }}
142
+ />
143
+ </ListItem>
144
+ </List>
145
+ ),
146
+ };
147
+
148
+ export const InsetAndDisabledTypography: Story = {
149
+ render: () => (
150
+ <List>
151
+ <ListItem>
152
+ <ListItemText primary="Inset item" inset />
153
+ </ListItem>
154
+ <ListItem>
155
+ <ListItemText
156
+ primary={<strong>Disable Typography wrapper</strong>}
157
+ disableTypography
158
+ />
159
+ </ListItem>
160
+ </List>
161
+ ),
162
+ };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * This component is a thin wrapper around MUI’s ListItemText.
3
+ * It preserves MUI’s own props and typing.
4
+ * It is kept polymorphic in line with MUI’s design.
5
+ * This wrapper enables consistency with This.GUI’s declarative/resolver pattern.
6
+ *
7
+ * It is faithful to MUI because it re-exports MuiListItemText directly,
8
+ * keeping props intact and typing consistent.
9
+ */
10
+ import React from 'react';
11
+ import MuiListItemText from '@mui/material/ListItemText';
12
+ const ListItemText = MuiListItemText;
13
+ export type ListItemTextProps = React.ComponentProps<typeof ListItemText>;
14
+ (ListItemText as any).displayName = 'Gui.ListItemText';
15
+ export default ListItemText;
@@ -0,0 +1,112 @@
1
+ // src/gui/atoms/Menu/Menu.resolver.tsx
2
+ import * as React from 'react';
3
+ import Menu from './Menu';
4
+ import type { RegistryEntry, ResolveCtx } from '@/registry/types';
5
+ import type { SxProps, Theme } from '@mui/material/styles';
6
+ import type { PopoverOrigin } from '@mui/material/Popover';
7
+ import { ensureNodeId } from '@/gui/utils/nodeID';
8
+
9
+ /**
10
+ * Declarative spec for Menu
11
+ *
12
+ * Notes
13
+ * - Wraps MUI's Menu. Not polymorphic.
14
+ * - Supports granular styling via:
15
+ * - `sx` (root Popover/Menu container)
16
+ * - `paperSx` (Paper slot)
17
+ * - `listSx` (MenuList slot)
18
+ * - You can also pass through `PaperProps` and `MenuListProps`; their `sx` will be merged with `paperSx`/`listSx`.
19
+ * - Supports `"data-gui-id"` for editor instrumentation.
20
+ */
21
+ export type MenuSpec = {
22
+ type: 'Menu';
23
+ props?: {
24
+ children?: React.ReactNode;
25
+
26
+ // Core Menu props (subset; rest is passthrough)
27
+ open?: boolean;
28
+ anchorEl?: Element | null;
29
+ onClose?: (...args: any[]) => void;
30
+ onClick?: (...args: any[]) => void;
31
+ keepMounted?: boolean;
32
+ elevation?: number;
33
+ variant?: 'menu' | 'selectedMenu';
34
+ anchorOrigin?: PopoverOrigin;
35
+ transformOrigin?: PopoverOrigin;
36
+ TransitionProps?: any;
37
+
38
+ // Granular styling
39
+ sx?: SxProps<Theme>; // root (Popover)
40
+ paperSx?: SxProps<Theme>; // Paper slot
41
+ listSx?: SxProps<Theme>; // MenuList slot
42
+
43
+ // Slot props passthrough
44
+ PaperProps?: any;
45
+ MenuListProps?: any;
46
+
47
+ // Misc passthrough
48
+ id?: string;
49
+ className?: string;
50
+ 'data-testid'?: string;
51
+ "data-gui-id"?: string;
52
+
53
+ // Allow arbitrary passthrough
54
+ [key: string]: any;
55
+ };
56
+ };
57
+
58
+ const MenuResolver: RegistryEntry = {
59
+ type: 'Menu',
60
+ resolve(spec: MenuSpec, _ctx?: ResolveCtx) {
61
+ const p = spec.props ?? {};
62
+
63
+ // Extract resolver-only style helpers and children
64
+ const {
65
+ sx,
66
+ id,
67
+ className,
68
+ paperSx,
69
+ listSx,
70
+ PaperProps,
71
+ MenuListProps,
72
+ open,
73
+ "data-gui-id": dataGuiId,
74
+ // keep other props in `rest`
75
+ ...rest
76
+ } = p;
77
+
78
+ const guiId = ensureNodeId('menu', dataGuiId);
79
+
80
+ // Merge sx for Paper/MenuList without inserting `undefined` inside arrays
81
+ const mergedPaperSx =
82
+ paperSx != null && PaperProps?.sx != null
83
+ ? [paperSx, PaperProps.sx]
84
+ : paperSx ?? PaperProps?.sx;
85
+
86
+ const mergedListSx =
87
+ listSx != null && MenuListProps?.sx != null
88
+ ? [listSx, MenuListProps.sx]
89
+ : listSx ?? MenuListProps?.sx;
90
+
91
+ const finalPaperProps = PaperProps ? { ...PaperProps, sx: mergedPaperSx } : (mergedPaperSx != null ? { sx: mergedPaperSx } : undefined);
92
+ const finalMenuListProps = MenuListProps ? { ...MenuListProps, sx: mergedListSx } : (mergedListSx != null ? { sx: mergedListSx } : undefined);
93
+
94
+ return (
95
+ <Menu
96
+ open={!!open}
97
+ sx={sx}
98
+ id={id}
99
+ className={className}
100
+ data-testid={p['data-testid']}
101
+ data-gui-id={guiId}
102
+ {...rest}
103
+ PaperProps={finalPaperProps}
104
+ MenuListProps={finalMenuListProps}
105
+ >
106
+ {p.children}
107
+ </Menu>
108
+ );
109
+ },
110
+ };
111
+
112
+ export default MenuResolver;