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.
- package/.storybook/main.js +40 -0
- package/.storybook/manager-head.html +13 -0
- package/.storybook/manager.js +15 -0
- package/.storybook/preview.tsx +54 -0
- package/.storybook/vitest.setup.js +6 -0
- package/.storybook/withLayout.tsx +18 -0
- package/README.md +1 -220
- package/dist/GUI.png +0 -0
- package/dist/GUI2.png +0 -0
- package/dist/favicon.ico +0 -0
- package/dist/this-gui.es.js +108493 -5056
- package/dist/this-gui.umd.js +239 -44
- package/dist/this.GUI.png +0 -0
- package/nodes/overall approach.md +93 -0
- package/notes/Proyect.md +109 -0
- package/package.json +71 -54
- package/public/GUI.png +0 -0
- package/public/GUI2.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/this.GUI.png +0 -0
- package/src/components/generics/Cards/Gridme.jsx +52 -0
- package/src/components/generics/Cards/LilBox.jsx +65 -0
- package/src/components/generics/Cards/ModuleCard.jsx +106 -0
- package/src/components/generics/Chats/FullChatBot.jsx +223 -0
- package/src/components/generics/Code/CodeBlock.jsx +33 -0
- package/src/components/generics/Feedback/Callout.jsx +92 -0
- package/src/components/generics/Layout/GridX.jsx +29 -0
- package/src/components/generics/Layout/Hero2.jsx +132 -0
- package/src/components/generics/Layout/PageContainer.jsx +29 -0
- package/src/components/generics/Layout/PageDivider.jsx +20 -0
- package/src/components/generics/Layout/Section.jsx +43 -0
- package/src/components/generics/Layout/SectionHeader.jsx +21 -0
- package/src/components/generics/Media/Img.jsx +58 -0
- package/src/components/generics/Media/VideoEmbed.jsx +51 -0
- package/src/components/generics/Organization/TableOfContents.jsx +51 -0
- package/src/components/generics/Organization/Tabs.jsx +45 -0
- package/src/components/generics/Text/TextList.jsx +41 -0
- package/src/components/generics/Text/TextParagraph.jsx +28 -0
- package/src/components/generics/Text/TextQuote.jsx +23 -0
- package/src/components/generics/Text/TextTitle.jsx +44 -0
- package/src/components/this.me/MeActive.jsx +24 -0
- package/src/components/this.me/MeFloating.jsx +183 -0
- package/src/components/this.me/MeInactive.jsx +21 -0
- package/src/components/this.me/MeListUs.jsx +40 -0
- package/src/components/this.me/MeState.jsx +25 -0
- package/src/components/this.me/hooks/useMe.js +43 -0
- package/src/context/GuiProvider.tsx +243 -0
- package/src/gui/atoms/AppBar/AppBar.resolver.tsx +77 -0
- package/src/gui/atoms/AppBar/AppBar.stories.tsx +232 -0
- package/src/gui/atoms/AppBar/AppBar.tsx +10 -0
- package/src/gui/atoms/Box/Box.resolver.tsx +171 -0
- package/src/gui/atoms/Box/Box.stories.tsx +271 -0
- package/src/gui/atoms/Box/Box.tsx +15 -0
- package/src/gui/atoms/Button/Button.resolver.tsx +98 -0
- package/src/gui/atoms/Button/Button.stories.tsx +225 -0
- package/src/gui/atoms/Button/Button.tsx +40 -0
- package/src/gui/atoms/Collapse/Collapse.resolver.tsx +85 -0
- package/src/gui/atoms/Collapse/Collapse.stories.tsx +136 -0
- package/src/gui/atoms/Collapse/Collapse.tsx +17 -0
- package/src/gui/atoms/Divider/Divider.resolver.tsx +95 -0
- package/src/gui/atoms/Divider/Divider.stories.tsx +109 -0
- package/src/gui/atoms/Divider/Divider.tsx +14 -0
- package/src/gui/atoms/Drawer/Drawer.resolver.tsx +116 -0
- package/src/gui/atoms/Drawer/Drawer.stories.tsx +229 -0
- package/src/gui/atoms/Drawer/Drawer.tsx +8 -0
- package/src/gui/atoms/IconButton/IconButton.resolver.tsx +135 -0
- package/src/gui/atoms/IconButton/IconButton.stories.tsx +141 -0
- package/src/gui/atoms/IconButton/IconButton.tsx +22 -0
- package/src/gui/atoms/Link/Link.resolver.tsx +75 -0
- package/src/gui/atoms/Link/Link.stories.tsx +164 -0
- package/src/gui/atoms/Link/Link.tsx +14 -0
- package/src/gui/atoms/List/List.resolver.tsx +95 -0
- package/src/gui/atoms/List/List.stories.tsx +143 -0
- package/src/gui/atoms/List/List.tsx +20 -0
- package/src/gui/atoms/ListItem/ListItem.resolver.tsx +88 -0
- package/src/gui/atoms/ListItem/ListItem.stories.tsx +157 -0
- package/src/gui/atoms/ListItem/ListItem.tsx +19 -0
- package/src/gui/atoms/ListItemButton/ListItemButton.resolver.tsx +208 -0
- package/src/gui/atoms/ListItemButton/ListItemButton.stories.tsx +161 -0
- package/src/gui/atoms/ListItemButton/ListItemButton.tsx +15 -0
- package/src/gui/atoms/ListItemIcon/ListItemIcon.resolver.tsx +102 -0
- package/src/gui/atoms/ListItemIcon/ListItemIcon.stories.tsx +135 -0
- package/src/gui/atoms/ListItemIcon/ListItemIcon.tsx +11 -0
- package/src/gui/atoms/ListItemText/ListItemText.resolver.tsx +112 -0
- package/src/gui/atoms/ListItemText/ListItemText.stories.tsx +162 -0
- package/src/gui/atoms/ListItemText/ListItemText.tsx +15 -0
- package/src/gui/atoms/Menu/Menu.resolver.tsx +112 -0
- package/src/gui/atoms/Menu/Menu.stories.tsx +168 -0
- package/src/gui/atoms/Menu/Menu.tsx +17 -0
- package/src/gui/atoms/MenuItem/MenuItem.resolver.tsx +183 -0
- package/src/gui/atoms/MenuItem/MenuItem.stories.tsx +138 -0
- package/src/gui/atoms/MenuItem/MenuItem.tsx +14 -0
- package/src/gui/atoms/Paper/Paper.resolver.tsx +98 -0
- package/src/gui/atoms/Paper/Paper.stories.tsx +191 -0
- package/src/gui/atoms/Paper/Paper.tsx +17 -0
- package/src/gui/atoms/Stack/Stack.resolver.tsx +94 -0
- package/src/gui/atoms/Stack/Stack.stories.tsx +166 -0
- package/src/gui/atoms/Stack/Stack.tsx +15 -0
- package/src/gui/atoms/Switch/Switch.resolver.tsx +53 -0
- package/src/gui/atoms/Switch/Switch.stories.tsx +242 -0
- package/src/gui/atoms/Switch/Switch.tsx +22 -0
- package/src/gui/atoms/Toolbar/Toolbar.resolver.tsx +60 -0
- package/src/gui/atoms/Toolbar/Toolbar.stories.tsx +163 -0
- package/src/gui/atoms/Toolbar/Toolbar.tsx +16 -0
- package/src/gui/atoms/Tooltip/Tooltip.resolver.tsx +142 -0
- package/src/gui/atoms/Tooltip/Tooltip.stories.tsx +118 -0
- package/src/gui/atoms/Tooltip/Tooltip.tsx +78 -0
- package/src/gui/atoms/Typography/Typography.resolver.tsx +158 -0
- package/src/gui/atoms/Typography/Typography.stories.tsx +228 -0
- package/src/gui/atoms/Typography/Typography.tsx +27 -0
- package/src/gui/atoms.tsx +129 -0
- package/src/gui/index.ts +69 -0
- package/src/gui/molecules/AppBars/Footer/Footer.resolver.tsx +104 -0
- package/src/gui/molecules/AppBars/Footer/Footer.stories.tsx +499 -0
- package/src/gui/molecules/AppBars/Footer/Footer.tsx +307 -0
- package/src/gui/molecules/AppBars/LeftSidebar/LeftSidebar.resolver.tsx +75 -0
- package/src/gui/molecules/AppBars/LeftSidebar/LeftSidebar.stories.tsx +61 -0
- package/src/gui/molecules/AppBars/LeftSidebar/LeftSidebar.tsx +511 -0
- package/src/gui/molecules/AppBars/LeftSidebar/SidebarToggleButton.tsx +51 -0
- package/src/gui/molecules/AppBars/RightSidebar/RightSidebar.resolver.tsx +97 -0
- package/src/gui/molecules/AppBars/RightSidebar/RightSidebar.stories.tsx +294 -0
- package/src/gui/molecules/AppBars/RightSidebar/RightSidebar.tsx +295 -0
- package/src/gui/molecules/AppBars/StickyOptions/StickyOptionsTop.stories.tsx +480 -0
- package/src/gui/molecules/AppBars/StickyOptions/StickyOptionsTop.tsx +484 -0
- package/src/gui/molecules/AppBars/TopBar/TopBar.resolver.tsx +84 -0
- package/src/gui/molecules/AppBars/TopBar/TopBar.stories.tsx +297 -0
- package/src/gui/molecules/AppBars/TopBar/TopBar.tsx +299 -0
- package/src/gui/molecules/Utilities/ThemeModeToggle/ThemeModeToggle.resolver.tsx +72 -0
- package/src/gui/molecules/Utilities/ThemeModeToggle/ThemeModeToggle.stories.tsx +154 -0
- package/src/gui/molecules/Utilities/ThemeModeToggle/ThemeModeToggle.tsx +100 -0
- package/src/gui/molecules/Utilities/ThemeSelector.jsx +281 -0
- package/src/gui/utils/nodeID.ts +8 -0
- package/src/index.js +111 -0
- package/src/registry/GuiRegistry.ts +19 -0
- package/src/registry/factory.ts +12 -0
- package/src/registry/index.ts +3 -0
- package/src/registry/types.ts +6 -0
- package/src/stories/01.Home.mdx +22 -0
- package/src/stories/02.Understanding.This.GUI.md +149 -0
- package/src/stories/03.Themes.mdx +235 -0
- package/src/stories/04.GuiProvider.md +126 -0
- package/src/stories/04.GuiProvider.mdx +129 -0
- package/src/stories/Theme/BreakPointsAndGrids.stories.jsx +185 -0
- package/src/stories/Theme/Colors.stories.jsx +245 -0
- package/src/stories/Theme/Icons.stories.jsx +313 -0
- package/src/stories/Theme/Motion.stories.jsx +206 -0
- package/src/stories/Theme/ShadowAndElevation.stories.jsx +95 -0
- package/src/stories/Theme/SpacingAndRadius.stories.jsx +129 -0
- package/src/stories/Theme/Typography.stories.jsx +211 -0
- package/src/stories/assets/this.GUI.png +0 -0
- package/src/templates/BrowserExtension.jsx +56 -0
- package/src/templates/Layout.tsx +36 -0
- package/src/templates/Minimal.jsx +123 -0
- package/src/templates/Shell/Shell.jsx +107 -0
- package/src/themes/fromTokens.ts +352 -0
- package/src/themes/icons/Icon.tsx +137 -0
- package/src/themes/icons/packs/Lucide.ts +72 -0
- package/src/themes/icons/packs/Material.ts +87 -0
- package/src/themes/icons/registry.tsx +178 -0
- package/src/themes/index.js +116 -0
- package/src/themes/theme.d.ts +116 -0
- package/src/themes/tokens/global.tokens.json +107 -0
- package/src/themes/tokens/neurons/dark.tokens.json +45 -0
- package/src/themes/tokens/neurons/light.tokens.json +51 -0
- package/src/themes/tokens/neurons/manifest.json +23 -0
- package/src/types/theme.d.ts +32 -0
- package/src/types/viewport.ts +132 -0
- package/tsconfig.json +24 -0
- package/vite.config.js +74 -0
- package/dist/style.css +0 -1
- package/src/App.jsx +0 -39
- package/src/CreatePage.jsx +0 -61
- package/src/MDXEditor.jsx +0 -51
- package/src/MdxProvider.jsx +0 -20
- package/src/Page.jsx +0 -28
- package/src/PageDashboard.jsx +0 -56
- package/src/SiteBuilder.jsx +0 -108
- package/src/example.json +0 -43
- package/src/index.mdx +0 -164
- package/src/main.jsx +0 -15
- package/src/scripts/ComponentRegistry.js +0 -70
- package/src/scripts/logASCIIArt.js +0 -12
- package/src/scripts/postinstall.js +0 -111
- package/src/scripts/renderComponents.js +0 -11
- package/src/stories/Atoms/Alert/Alert.css +0 -211
- package/src/stories/Atoms/Alert/Alert.jsx +0 -56
- package/src/stories/Atoms/Alert/Alert.stories.jsx +0 -167
- package/src/stories/Atoms/Audio/Audio.css +0 -259
- package/src/stories/Atoms/Audio/Audio.jsx +0 -216
- package/src/stories/Atoms/Audio/Audio.stories.jsx +0 -191
- package/src/stories/Atoms/Badge/Badge.css +0 -249
- package/src/stories/Atoms/Badge/Badge.jsx +0 -54
- package/src/stories/Atoms/Badge/Badge.stories.jsx +0 -121
- package/src/stories/Atoms/Button/Button.css +0 -332
- package/src/stories/Atoms/Button/Button.jsx +0 -44
- package/src/stories/Atoms/Button/Button.stories.jsx +0 -209
- package/src/stories/Atoms/Caption/Caption.css +0 -169
- package/src/stories/Atoms/Caption/Caption.jsx +0 -72
- package/src/stories/Atoms/Caption/Caption.stories.jsx +0 -207
- package/src/stories/Atoms/Checkbox/Checkbox.css +0 -182
- package/src/stories/Atoms/Checkbox/Checkbox.jsx +0 -83
- package/src/stories/Atoms/Checkbox/Checkbox.stories.jsx +0 -112
- package/src/stories/Atoms/Container/Container.css +0 -470
- package/src/stories/Atoms/Container/Container.jsx +0 -116
- package/src/stories/Atoms/Container/Container.stories.jsx +0 -145
- package/src/stories/Atoms/Divider/Divider.css +0 -147
- package/src/stories/Atoms/Divider/Divider.jsx +0 -62
- package/src/stories/Atoms/Divider/Divider.stories.jsx +0 -105
- package/src/stories/Atoms/Grid/Grid.css +0 -160
- package/src/stories/Atoms/Grid/Grid.jsx +0 -43
- package/src/stories/Atoms/Grid/Grid.stories.jsx +0 -84
- package/src/stories/Atoms/Heading/Heading.css +0 -112
- package/src/stories/Atoms/Heading/Heading.jsx +0 -69
- package/src/stories/Atoms/Heading/Heading.stories.jsx +0 -130
- package/src/stories/Atoms/Icon/Icon.css +0 -240
- package/src/stories/Atoms/Icon/Icon.jsx +0 -80
- package/src/stories/Atoms/Icon/Icon.stories.jsx +0 -177
- package/src/stories/Atoms/Image/Image.css +0 -245
- package/src/stories/Atoms/Image/Image.jsx +0 -175
- package/src/stories/Atoms/Image/Image.stories.jsx +0 -332
- package/src/stories/Atoms/Label/Label.css +0 -171
- package/src/stories/Atoms/Label/Label.jsx +0 -71
- package/src/stories/Atoms/Label/Label.stories.jsx +0 -180
- package/src/stories/Atoms/Link/Link.css +0 -51
- package/src/stories/Atoms/Link/Link.jsx +0 -72
- package/src/stories/Atoms/Link/Link.stories.jsx +0 -153
- package/src/stories/Atoms/Loader/Loader.css +0 -106
- package/src/stories/Atoms/Loader/Loader.jsx +0 -58
- package/src/stories/Atoms/Loader/Loader.stories.jsx +0 -99
- package/src/stories/Atoms/Logo/Logo.css +0 -94
- package/src/stories/Atoms/Logo/Logo.jsx +0 -53
- package/src/stories/Atoms/Logo/Logo.stories.jsx +0 -120
- package/src/stories/Atoms/Paragraph/Paragraph.css +0 -180
- package/src/stories/Atoms/Paragraph/Paragraph.jsx +0 -77
- package/src/stories/Atoms/Paragraph/Paragraph.stories.jsx +0 -143
- package/src/stories/Atoms/ProgressBar/ProgressBar.css +0 -127
- package/src/stories/Atoms/ProgressBar/ProgressBar.jsx +0 -40
- package/src/stories/Atoms/ProgressBar/ProgressBar.stories.jsx +0 -86
- package/src/stories/Atoms/RadioButton/RadioButton.css +0 -130
- package/src/stories/Atoms/RadioButton/RadioButton.jsx +0 -87
- package/src/stories/Atoms/RadioButton/RadioButton.stories.jsx +0 -113
- package/src/stories/Atoms/Range/Range.css +0 -169
- package/src/stories/Atoms/Range/Range.jsx +0 -87
- package/src/stories/Atoms/Range/Range.stories.jsx +0 -110
- package/src/stories/Atoms/Section/Section.css +0 -268
- package/src/stories/Atoms/Section/Section.jsx +0 -63
- package/src/stories/Atoms/Section/Section.stories.jsx +0 -46
- package/src/stories/Atoms/Select/Select.css +0 -87
- package/src/stories/Atoms/Select/Select.jsx +0 -73
- package/src/stories/Atoms/Select/Select.stories.jsx +0 -109
- package/src/stories/Atoms/Slider/Slider.css +0 -90
- package/src/stories/Atoms/Slider/Slider.jsx +0 -129
- package/src/stories/Atoms/Slider/Slider.stories.jsx +0 -90
- package/src/stories/Atoms/Snackbar/Snackbar.css +0 -313
- package/src/stories/Atoms/Snackbar/Snackbar.jsx +0 -72
- package/src/stories/Atoms/Snackbar/Snackbar.stories.jsx +0 -78
- package/src/stories/Atoms/Spacer/Spacer.css +0 -114
- package/src/stories/Atoms/Spacer/Spacer.jsx +0 -35
- package/src/stories/Atoms/Spacer/Spacer.stories.jsx +0 -61
- package/src/stories/Atoms/Spinner/Spinner.css +0 -110
- package/src/stories/Atoms/Spinner/Spinner.jsx +0 -65
- package/src/stories/Atoms/Spinner/Spinner.stories.jsx +0 -58
- package/src/stories/Atoms/Tag/Tag.css +0 -112
- package/src/stories/Atoms/Tag/Tag.jsx +0 -75
- package/src/stories/Atoms/Tag/Tag.stories.jsx +0 -67
- package/src/stories/Atoms/TextArea/TextArea.css +0 -99
- package/src/stories/Atoms/TextArea/TextArea.jsx +0 -118
- package/src/stories/Atoms/TextArea/TextArea.stories.jsx +0 -36
- package/src/stories/Atoms/TextInput/TextInput.css +0 -102
- package/src/stories/Atoms/TextInput/TextInput.jsx +0 -133
- package/src/stories/Atoms/TextInput/TextInput.stories.jsx +0 -69
- package/src/stories/Atoms/Toggle/Toggle.css +0 -118
- package/src/stories/Atoms/Toggle/Toggle.jsx +0 -69
- package/src/stories/Atoms/Toggle/Toggle.stories.jsx +0 -35
- package/src/stories/Atoms/Tooltip/Tooltip.css +0 -383
- package/src/stories/Atoms/Tooltip/Tooltip.jsx +0 -46
- package/src/stories/Atoms/Tooltip/Tooltip.stories.jsx +0 -52
- package/src/stories/Atoms/Video/Video.css +0 -39
- package/src/stories/Atoms/Video/Video.jsx +0 -78
- package/src/stories/Atoms/Video/Video.stories.jsx +0 -41
- package/src/stories/Atoms/index.js +0 -72
- package/src/stories/Atoms/meta_Atoms.js +0 -51
- package/src/stories/Components.js +0 -198
- package/src/stories/Getting Started.mdx +0 -239
- package/src/stories/Layouts/Accordion/Accordion.css +0 -293
- package/src/stories/Layouts/Accordion/Accordion.jsx +0 -74
- package/src/stories/Layouts/Accordion/Accordion.stories.jsx +0 -39
- package/src/stories/Layouts/Flexbox/Flexbox.css +0 -16
- package/src/stories/Layouts/Flexbox/Flexbox.jsx +0 -11
- package/src/stories/Layouts/Flexbox/Flexbox.stories.jsx +0 -28
- package/src/stories/Layouts/Footer/Footer.css +0 -16
- package/src/stories/Layouts/Footer/Footer.jsx +0 -31
- package/src/stories/Layouts/Footer/Footer.stories.jsx +0 -28
- package/src/stories/Layouts/Header/Header.css +0 -16
- package/src/stories/Layouts/Header/Header.jsx +0 -31
- package/src/stories/Layouts/Header/Header.stories.jsx +0 -28
- package/src/stories/Layouts/HeroBanner/HeroBanner.css +0 -16
- package/src/stories/Layouts/HeroBanner/HeroBanner.jsx +0 -31
- package/src/stories/Layouts/HeroBanner/HeroBanner.stories.jsx +0 -28
- package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.css +0 -16
- package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.jsx +0 -31
- package/src/stories/Layouts/HeroImageVideo/HeroImageVideo.stories.jsx +0 -28
- package/src/stories/Layouts/Pagination/Pagination.css +0 -16
- package/src/stories/Layouts/Pagination/Pagination.jsx +0 -31
- package/src/stories/Layouts/Pagination/Pagination.stories.jsx +0 -28
- package/src/stories/Layouts/Sidebar/Sidebar.css +0 -16
- package/src/stories/Layouts/Sidebar/Sidebar.jsx +0 -71
- package/src/stories/Layouts/Sidebar/Sidebar.stories.jsx +0 -28
- package/src/stories/Layouts/Tabs/Tabs.css +0 -16
- package/src/stories/Layouts/Tabs/Tabs.jsx +0 -31
- package/src/stories/Layouts/Tabs/Tabs.stories.jsx +0 -28
- package/src/stories/Layouts/index.js +0 -25
- package/src/stories/Layouts/meta_Layouts.js +0 -28
- package/src/stories/MDX.mdx +0 -118
- package/src/stories/Miscellaneous/Miscellaneous.js +0 -24
- package/src/stories/Molecules/Accordion/Accordion.css +0 -4
- package/src/stories/Molecules/Accordion/Accordion.jsx +0 -25
- package/src/stories/Molecules/Accordion/Accordion.stories.jsx +0 -20
- package/src/stories/Molecules/AudioPlayer/AudioPlayer.css +0 -97
- package/src/stories/Molecules/AudioPlayer/AudioPlayer.jsx +0 -244
- package/src/stories/Molecules/AudioPlayer/AudioPlayer.stories.jsx +0 -55
- package/src/stories/Molecules/AvatarWithName/AvatarWithName.css +0 -130
- package/src/stories/Molecules/AvatarWithName/AvatarWithName.jsx +0 -80
- package/src/stories/Molecules/AvatarWithName/AvatarWithName.stories.jsx +0 -20
- package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.css +0 -147
- package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.jsx +0 -51
- package/src/stories/Molecules/Breadcrumbs/Breadcrumbs.stories.jsx +0 -36
- package/src/stories/Molecules/ButtonGroup/ButtonGroup.css +0 -465
- package/src/stories/Molecules/ButtonGroup/ButtonGroup.jsx +0 -47
- package/src/stories/Molecules/ButtonGroup/ButtonGroup.stories.jsx +0 -44
- package/src/stories/Molecules/Card/Card.css +0 -41
- package/src/stories/Molecules/Card/Card.jsx +0 -92
- package/src/stories/Molecules/Card/Card.stories.jsx +0 -34
- package/src/stories/Molecules/ComparisonTable/ComparisonTable.css +0 -35
- package/src/stories/Molecules/ComparisonTable/ComparisonTable.jsx +0 -104
- package/src/stories/Molecules/ComparisonTable/ComparisonTable.stories.jsx +0 -81
- package/src/stories/Molecules/DataTable/DataTable.css +0 -4
- package/src/stories/Molecules/DataTable/DataTable.jsx +0 -25
- package/src/stories/Molecules/DataTable/DataTable.stories.jsx +0 -20
- package/src/stories/Molecules/Dropdown/Dropdown.css +0 -192
- package/src/stories/Molecules/Dropdown/Dropdown.jsx +0 -96
- package/src/stories/Molecules/Dropdown/Dropdown.stories.jsx +0 -45
- package/src/stories/Molecules/FileUpload/FileUpload.css +0 -4
- package/src/stories/Molecules/FileUpload/FileUpload.jsx +0 -25
- package/src/stories/Molecules/FileUpload/FileUpload.stories.jsx +0 -20
- package/src/stories/Molecules/FormField/FormField.css +0 -4
- package/src/stories/Molecules/FormField/FormField.jsx +0 -25
- package/src/stories/Molecules/FormField/FormField.stories.jsx +0 -20
- package/src/stories/Molecules/Header/Header.css +0 -35
- package/src/stories/Molecules/Header/Header.jsx +0 -76
- package/src/stories/Molecules/Header/Header.stories.jsx +0 -28
- package/src/stories/Molecules/IconButton/IconButton.css +0 -4
- package/src/stories/Molecules/IconButton/IconButton.jsx +0 -25
- package/src/stories/Molecules/IconButton/IconButton.stories.jsx +0 -20
- package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.css +0 -4
- package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.jsx +0 -25
- package/src/stories/Molecules/ImageWithCaption/ImageWithCaption.stories.jsx +0 -20
- package/src/stories/Molecules/InputGroup/InputGroup.css +0 -4
- package/src/stories/Molecules/InputGroup/InputGroup.jsx +0 -25
- package/src/stories/Molecules/InputGroup/InputGroup.stories.jsx +0 -20
- package/src/stories/Molecules/InputWithLabel/InputWithLabel.css +0 -4
- package/src/stories/Molecules/InputWithLabel/InputWithLabel.jsx +0 -25
- package/src/stories/Molecules/InputWithLabel/InputWithLabel.stories.jsx +0 -20
- package/src/stories/Molecules/List/List.css +0 -4
- package/src/stories/Molecules/List/List.jsx +0 -25
- package/src/stories/Molecules/List/List.stories.jsx +0 -20
- package/src/stories/Molecules/MediaCard/MediaCard.css +0 -4
- package/src/stories/Molecules/MediaCard/MediaCard.jsx +0 -25
- package/src/stories/Molecules/MediaCard/MediaCard.stories.jsx +0 -20
- package/src/stories/Molecules/Modal/Modal.css +0 -4
- package/src/stories/Molecules/Modal/Modal.jsx +0 -25
- package/src/stories/Molecules/Modal/Modal.stories.jsx +0 -20
- package/src/stories/Molecules/Navbar/Navbar.css +0 -91
- package/src/stories/Molecules/Navbar/Navbar.jsx +0 -82
- package/src/stories/Molecules/Navbar/Navbar.stories.jsx +0 -70
- package/src/stories/Molecules/Notification/Notification.css +0 -4
- package/src/stories/Molecules/Notification/Notification.jsx +0 -25
- package/src/stories/Molecules/Notification/Notification.stories.jsx +0 -20
- package/src/stories/Molecules/PricingTable/PricingTable.css +0 -4
- package/src/stories/Molecules/PricingTable/PricingTable.jsx +0 -25
- package/src/stories/Molecules/PricingTable/PricingTable.stories.jsx +0 -20
- package/src/stories/Molecules/SearchBar/SearchBar.css +0 -69
- package/src/stories/Molecules/SearchBar/SearchBar.jsx +0 -73
- package/src/stories/Molecules/SearchBar/SearchBar.stories.jsx +0 -29
- package/src/stories/Molecules/SelectTheme/SelectTheme.css +0 -25
- package/src/stories/Molecules/SelectTheme/SelectTheme.jsx +0 -22
- package/src/stories/Molecules/SelectTheme/SelectTheme.stories.jsx +0 -24
- package/src/stories/Molecules/Sidebar/Sidebar.css +0 -67
- package/src/stories/Molecules/Sidebar/Sidebar.jsx +0 -80
- package/src/stories/Molecules/Sidebar/Sidebar.stories.jsx +0 -35
- package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.css +0 -4
- package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.jsx +0 -25
- package/src/stories/Molecules/VideoWithDescription/VideoWithDescription.stories.jsx +0 -20
- package/src/stories/Molecules/index.js +0 -58
- package/src/stories/Molecules/meta_Molecules.js +0 -47
- package/src/stories/Organisms/Profile/UserFriends/UserFriends.context.jsx +0 -15
- package/src/stories/Organisms/Profile/UserFriends/UserFriends.css +0 -4
- package/src/stories/Organisms/Profile/UserFriends/UserFriends.jsx +0 -13
- package/src/stories/Organisms/Profile/UserFriends/UserFriends.stories.jsx +0 -26
- package/src/stories/Organisms/Profile/UserPosts/UserPosts.context.jsx +0 -15
- package/src/stories/Organisms/Profile/UserPosts/UserPosts.css +0 -4
- package/src/stories/Organisms/Profile/UserPosts/UserPosts.jsx +0 -13
- package/src/stories/Organisms/Profile/UserPosts/UserPosts.stories.jsx +0 -26
- package/src/stories/Organisms/Profile/UserProfile/UserProfile.context.jsx +0 -15
- package/src/stories/Organisms/Profile/UserProfile/UserProfile.css +0 -4
- package/src/stories/Organisms/Profile/UserProfile/UserProfile.jsx +0 -13
- package/src/stories/Organisms/Profile/UserProfile/UserProfile.stories.jsx +0 -26
- package/src/stories/Organisms/meta_Organisms.js +0 -39
- package/src/stories/Pages/Page/Page.css +0 -69
- package/src/stories/Pages/Page/Page.jsx +0 -69
- package/src/stories/Pages/Page/Page.stories.js +0 -26
- package/src/stories/Pages/Page/Pages.js +0 -31
- package/src/stories/Templates/AdminDashboard/AdminDashboard.css +0 -7
- package/src/stories/Templates/AdminDashboard/AdminDashboard.jsx +0 -24
- package/src/stories/Templates/AdminDashboard/AdminDashboard.stories.jsx +0 -20
- package/src/stories/Templates/CallToAction/CallToAction.css +0 -7
- package/src/stories/Templates/CallToAction/CallToAction.jsx +0 -24
- package/src/stories/Templates/CallToAction/CallToAction.stories.jsx +0 -20
- package/src/stories/Templates/FeaturesList/FeaturesList.css +0 -7
- package/src/stories/Templates/FeaturesList/FeaturesList.jsx +0 -24
- package/src/stories/Templates/FeaturesList/FeaturesList.stories.jsx +0 -20
- package/src/stories/Templates/FormSection/FormSection.css +0 -7
- package/src/stories/Templates/FormSection/FormSection.jsx +0 -24
- package/src/stories/Templates/FormSection/FormSection.stories.jsx +0 -20
- package/src/stories/Templates/HeroSection/HeroSection.css +0 -7
- package/src/stories/Templates/HeroSection/HeroSection.jsx +0 -24
- package/src/stories/Templates/HeroSection/HeroSection.stories.jsx +0 -20
- package/src/stories/Templates/LocationInfo/LocationInfo.css +0 -7
- package/src/stories/Templates/LocationInfo/LocationInfo.jsx +0 -24
- package/src/stories/Templates/LocationInfo/LocationInfo.stories.jsx +0 -20
- package/src/stories/Templates/ProductPage/ProductPage.css +0 -7
- package/src/stories/Templates/ProductPage/ProductPage.jsx +0 -24
- package/src/stories/Templates/ProductPage/ProductPage.stories.jsx +0 -20
- package/src/stories/Templates/RegistrationPage/RegistrationPage.css +0 -7
- package/src/stories/Templates/RegistrationPage/RegistrationPage.jsx +0 -24
- package/src/stories/Templates/RegistrationPage/RegistrationPage.stories.jsx +0 -20
- package/src/stories/Templates/ShoppingCart/ShoppingCart.css +0 -7
- package/src/stories/Templates/ShoppingCart/ShoppingCart.jsx +0 -24
- package/src/stories/Templates/ShoppingCart/ShoppingCart.stories.jsx +0 -20
- package/src/stories/Templates/SidebarTopNav/SidebarTopNav.css +0 -7
- package/src/stories/Templates/SidebarTopNav/SidebarTopNav.jsx +0 -24
- package/src/stories/Templates/SidebarTopNav/SidebarTopNav.stories.jsx +0 -20
- package/src/stories/Templates/SignInPage/SignInPage.css +0 -7
- package/src/stories/Templates/SignInPage/SignInPage.jsx +0 -24
- package/src/stories/Templates/SignInPage/SignInPage.stories.jsx +0 -20
- package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.css +0 -7
- package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.jsx +0 -24
- package/src/stories/Templates/SocialMediaLinks/SocialMediaLinks.stories.jsx +0 -20
- package/src/stories/Templates/Testimonials/Testimonials.css +0 -7
- package/src/stories/Templates/Testimonials/Testimonials.jsx +0 -24
- package/src/stories/Templates/Testimonials/Testimonials.stories.jsx +0 -20
- package/src/stories/Templates/index.js +0 -33
- package/src/stories/Templates/meta_Templates.js +0 -29
- package/src/stories/assets/accessibility.png +0 -0
- package/src/stories/assets/accessibility.svg +0 -1
- package/src/stories/assets/addon-library.png +0 -0
- package/src/stories/assets/assets.png +0 -0
- package/src/stories/assets/avif-test-image.avif +0 -0
- package/src/stories/assets/context.png +0 -0
- package/src/stories/assets/discord.svg +0 -1
- package/src/stories/assets/docs.png +0 -0
- package/src/stories/assets/figma-plugin.png +0 -0
- package/src/stories/assets/github.svg +0 -1
- package/src/stories/assets/logo.png +0 -0
- package/src/stories/assets/logo.svg +0 -106
- package/src/stories/assets/share.png +0 -0
- package/src/stories/assets/styling.png +0 -0
- package/src/stories/assets/test.svg +0 -3
- package/src/stories/assets/testing.png +0 -0
- package/src/stories/assets/theming.png +0 -0
- package/src/stories/assets/tutorials.svg +0 -1
- package/src/stories/assets/youtube.svg +0 -1
- package/src/themes/README_Styles.md +0 -301
- package/src/themes/ThemeProvider.jsx +0 -61
- package/src/themes/styles/github/dark.css +0 -0
- package/src/themes/styles/github/light.css +0 -0
- package/src/themes/styles/neurons/dark.css +0 -247
- package/src/themes/styles/neurons/light.css +0 -170
- /package/{src/themes/styles/dracula/dark.css → .storybook/preview-head.html} +0 -0
- /package/src/{themes/styles/dracula/light.css → components/this.me/MeCard.jsx} +0 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
//src/themes/icons/registry.tsx
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import lucidePack, { LUCIDE_PREFIX, getLucideIcon, normalizeLucideName } from './packs/Lucide';
|
|
4
|
+
import muiPack, { MUI_PREFIX } from './packs/Material';
|
|
5
|
+
|
|
6
|
+
export type LazyIconComp = React.LazyExoticComponent<React.ComponentType<any>>;
|
|
7
|
+
|
|
8
|
+
export interface IconProvider {
|
|
9
|
+
key: string;
|
|
10
|
+
resolve: (name: string) => LazyIconComp;
|
|
11
|
+
exists?: (name: string) => boolean;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Icon registry (pluggable)
|
|
16
|
+
* -------------------------
|
|
17
|
+
* Providers supported out of the box:
|
|
18
|
+
* - lucide:* → lucide-react (tree-shakable, lightweight)
|
|
19
|
+
* - mui:* → @mui/icons-material (richer set; heavier)
|
|
20
|
+
*
|
|
21
|
+
* You can register more providers from your app:
|
|
22
|
+
* import { registerIconProvider } from '@this-gui/icons/registry';
|
|
23
|
+
* registerIconProvider('custom', {
|
|
24
|
+
* resolve: (name) => React.lazy(() => import('./MyIcon').then(m => ({ default: m.MyIcon }))),
|
|
25
|
+
* // optional: exists(name): boolean
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* All resolvers return a React element type (via React.lazy) so consumers can
|
|
29
|
+
* render them in a Suspense boundary uniformly.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
// ---------- fallback / placeholder ----------
|
|
33
|
+
function emptyIconFactory(name: string = 'unknown'): LazyIconComp {
|
|
34
|
+
type PlaceholderProps = {
|
|
35
|
+
size?: number;
|
|
36
|
+
color?: string;
|
|
37
|
+
style?: React.CSSProperties;
|
|
38
|
+
title?: string;
|
|
39
|
+
[key: string]: any;
|
|
40
|
+
};
|
|
41
|
+
const Placeholder: React.FC<PlaceholderProps> = ({ size = 20, color = 'currentColor', style, title, ...rest }) => (
|
|
42
|
+
<svg
|
|
43
|
+
width={size}
|
|
44
|
+
height={size}
|
|
45
|
+
viewBox="0 0 24 24"
|
|
46
|
+
fill="none"
|
|
47
|
+
stroke={color}
|
|
48
|
+
strokeWidth="1.5"
|
|
49
|
+
strokeLinecap="round"
|
|
50
|
+
strokeLinejoin="round"
|
|
51
|
+
role={title ? 'img' : 'presentation'}
|
|
52
|
+
aria-hidden={title ? undefined : true}
|
|
53
|
+
aria-label={title || undefined}
|
|
54
|
+
style={{ display: 'inline-block', verticalAlign: 'middle', ...style }}
|
|
55
|
+
{...rest}
|
|
56
|
+
>
|
|
57
|
+
{title ? <title>{title}</title> : null}
|
|
58
|
+
<circle cx="12" cy="12" r="9" opacity="0.25" />
|
|
59
|
+
<path d="M9.5 9a3 3 0 0 1 5 2c0 2-3 2-3 4" />
|
|
60
|
+
<circle cx="12" cy="17" r="0.75" />
|
|
61
|
+
</svg>
|
|
62
|
+
);
|
|
63
|
+
Placeholder.displayName = `IconPlaceholder(${String(name)})`;
|
|
64
|
+
const Lazy = React.lazy(() => Promise.resolve({ default: Placeholder }));
|
|
65
|
+
return Lazy as LazyIconComp;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// ---------- helpers ----------
|
|
69
|
+
const hasPrefix = (raw: string, prefix: string): boolean =>
|
|
70
|
+
raw.toLowerCase().startsWith(prefix.toLowerCase() + ':') ||
|
|
71
|
+
raw.toLowerCase().startsWith(prefix.toLowerCase() + '/');
|
|
72
|
+
|
|
73
|
+
const stripPrefix = (raw: string, prefix: string): string =>
|
|
74
|
+
raw.replace(new RegExp(`^${prefix}[:/.-]\\s*`, 'i'), '');
|
|
75
|
+
|
|
76
|
+
// ---------- built-in providers ----------
|
|
77
|
+
/**
|
|
78
|
+
* Lucide provider adapter
|
|
79
|
+
* - Dynamically import lucide-react and resolve the named export at runtime.
|
|
80
|
+
*/
|
|
81
|
+
const lucideLazyCache = new Map<string, LazyIconComp>();
|
|
82
|
+
|
|
83
|
+
const lucideProvider: IconProvider = {
|
|
84
|
+
key: LUCIDE_PREFIX,
|
|
85
|
+
resolve: (rawName: string) => {
|
|
86
|
+
const key = stripPrefix(rawName, LUCIDE_PREFIX);
|
|
87
|
+
const pascal = normalizeLucideName(key);
|
|
88
|
+
|
|
89
|
+
if (lucideLazyCache.has(pascal)) {
|
|
90
|
+
return lucideLazyCache.get(pascal)!;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const Lazy = React.lazy(async () => {
|
|
94
|
+
const mod: any = await import('lucide-react');
|
|
95
|
+
const lib: Record<string, any> = (typeof mod.default === 'object' && mod.default) ? mod.default : mod;
|
|
96
|
+
const Comp = lib[pascal] ?? lib.HelpCircle;
|
|
97
|
+
return { default: Comp };
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
lucideLazyCache.set(pascal, Lazy);
|
|
101
|
+
return Lazy as LazyIconComp;
|
|
102
|
+
},
|
|
103
|
+
exists: (name: string) => {
|
|
104
|
+
// Best-effort check using the already-imported pack (fast path)
|
|
105
|
+
try {
|
|
106
|
+
const Comp = getLucideIcon(stripPrefix(name, LUCIDE_PREFIX));
|
|
107
|
+
return Boolean(Comp);
|
|
108
|
+
} catch {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* MUI provider adapter
|
|
116
|
+
* - Material pack already returns React.lazy components via get(name)
|
|
117
|
+
*/
|
|
118
|
+
const muiProvider: IconProvider = {
|
|
119
|
+
key: MUI_PREFIX,
|
|
120
|
+
resolve: (rawName: string) => {
|
|
121
|
+
const Comp = muiPack.get(rawName) as LazyIconComp | undefined;
|
|
122
|
+
return Comp ?? emptyIconFactory(rawName);
|
|
123
|
+
},
|
|
124
|
+
exists: (name: string) => Boolean(muiPack.has?.(name)),
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
// ---------- pluggable registry ----------
|
|
128
|
+
const _providers: Map<string, IconProvider> = new Map([
|
|
129
|
+
[lucideProvider.key, lucideProvider],
|
|
130
|
+
[muiProvider.key, muiProvider],
|
|
131
|
+
]);
|
|
132
|
+
|
|
133
|
+
export function registerIconProvider(key: string, provider: IconProvider): void {
|
|
134
|
+
if (!key || !provider || typeof provider.resolve !== 'function') {
|
|
135
|
+
throw new Error('[icons/registry] registerIconProvider(key, { resolve }) requires a valid resolver');
|
|
136
|
+
}
|
|
137
|
+
_providers.set(String(key).toLowerCase(), { ...provider, key });
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export function getRegisteredProviders(): string[] {
|
|
141
|
+
return Array.from(_providers.keys());
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// ---------- main resolver ----------
|
|
145
|
+
export function lazyIcon(name: string): LazyIconComp {
|
|
146
|
+
const raw = String(name || '');
|
|
147
|
+
if (!raw) return emptyIconFactory('empty');
|
|
148
|
+
|
|
149
|
+
// Try prefixed first (e.g., mui:CameraAlt, lucide:home)
|
|
150
|
+
for (const [key, provider] of _providers) {
|
|
151
|
+
if (hasPrefix(raw, key)) {
|
|
152
|
+
try {
|
|
153
|
+
return provider.resolve(raw);
|
|
154
|
+
} catch {
|
|
155
|
+
return emptyIconFactory(raw);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// No prefix → choose a default order: prefer MUI (richer set), then Lucide
|
|
161
|
+
try {
|
|
162
|
+
return muiProvider.resolve(raw);
|
|
163
|
+
} catch {
|
|
164
|
+
try {
|
|
165
|
+
return lucideProvider.resolve(raw);
|
|
166
|
+
} catch {
|
|
167
|
+
return emptyIconFactory(raw);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export const PROVIDERS: { lucide: string; mui: string } = {
|
|
173
|
+
lucide: lucideProvider.key,
|
|
174
|
+
mui: muiProvider.key,
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
export { lucidePack, muiPack };
|
|
178
|
+
export default { lazyIcon, registerIconProvider, getRegisteredProviders, PROVIDERS };
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// src/themes/index.js
|
|
2
|
+
// Global tokens shared by all themes (radius, spacing, zIndex, etc.)
|
|
3
|
+
import globalTokens from './tokens/global.tokens.json';
|
|
4
|
+
import { makeMuiTheme } from './fromTokens';
|
|
5
|
+
// --- Built-in theme: neurons (manifest-driven) -------------------------------
|
|
6
|
+
import neuronsManifest from './tokens/neurons/manifest.json';
|
|
7
|
+
import neuronsLight from './tokens/neurons/light.tokens.json';
|
|
8
|
+
import neuronsDark from './tokens/neurons/dark.tokens.json';
|
|
9
|
+
/**
|
|
10
|
+
* Registry of built-in themes shipped with the library.
|
|
11
|
+
* Each entry couples a human-readable manifest (metadata) with the concrete
|
|
12
|
+
* token payloads for its available modes.
|
|
13
|
+
*
|
|
14
|
+
* NOTE: We import token JSONs statically so bundlers (Vite) can include them.
|
|
15
|
+
* The manifest gives us metadata (name, description, author, preview) and
|
|
16
|
+
* declares the available modes. If you add another built-in theme, mirror this
|
|
17
|
+
* structure.
|
|
18
|
+
*/
|
|
19
|
+
const BUILT_IN = {
|
|
20
|
+
neurons: {
|
|
21
|
+
manifest: neuronsManifest,
|
|
22
|
+
tokensByMode: {
|
|
23
|
+
light: neuronsLight,
|
|
24
|
+
dark: neuronsDark,
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
// -----------------------------------------------------------------------------
|
|
29
|
+
// Factories
|
|
30
|
+
// -----------------------------------------------------------------------------
|
|
31
|
+
/** Create a MUI theme straight from token JSON + a mode. */
|
|
32
|
+
export const createThemeFromTokens = (tokens, mode = 'light') => {
|
|
33
|
+
return makeMuiTheme(globalTokens, tokens, mode);
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Create a MUI theme from a manifest entry and an optional preloaded map
|
|
37
|
+
* { light, dark, ... } of token JSON objects. For built-ins we pass them
|
|
38
|
+
* statically; for custom themes you can resolve them however you prefer.
|
|
39
|
+
*/
|
|
40
|
+
export const createThemeFromManifest = (manifest, mode = 'light', tokensByMode) => {
|
|
41
|
+
const m = manifest || {};
|
|
42
|
+
const chosenMode = mode || m.defaultMode || 'light';
|
|
43
|
+
// Prefer explicitly provided tokensByMode (preloaded).
|
|
44
|
+
const tokens =
|
|
45
|
+
tokensByMode?.[chosenMode] ??
|
|
46
|
+
// Optional: if your manifest inlines tokens under modes[mode].inlineTokens
|
|
47
|
+
m?.modes?.[chosenMode]?.inlineTokens ??
|
|
48
|
+
null;
|
|
49
|
+
|
|
50
|
+
if (!tokens) {
|
|
51
|
+
// Fallback to light/dark if available; last resort throw a helpful error.
|
|
52
|
+
const fallback =
|
|
53
|
+
tokensByMode?.light ??
|
|
54
|
+
tokensByMode?.dark ??
|
|
55
|
+
null;
|
|
56
|
+
if (!fallback) {
|
|
57
|
+
throw new Error(
|
|
58
|
+
`[themes] No tokens found for mode "${chosenMode}". ` +
|
|
59
|
+
`Provide a tokensByMode map or inline tokens in the manifest.`
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
return createThemeFromTokens(fallback, chosenMode);
|
|
63
|
+
}
|
|
64
|
+
return createThemeFromTokens(tokens, chosenMode);
|
|
65
|
+
};
|
|
66
|
+
// -----------------------------------------------------------------------------
|
|
67
|
+
// Public API
|
|
68
|
+
// -----------------------------------------------------------------------------
|
|
69
|
+
/**
|
|
70
|
+
* getTheme
|
|
71
|
+
* - Prefer passing a manifest and (optionally) a tokensByMode map for custom themes.
|
|
72
|
+
* - For built-ins, use key: 'neurons' with a mode, or legacy keys 'neurons-light'/'neurons-dark'.
|
|
73
|
+
*
|
|
74
|
+
* Examples:
|
|
75
|
+
* getTheme({ key: 'neurons', mode: 'dark' })
|
|
76
|
+
* getTheme({ manifest, mode: 'light', tokensByMode: { light, dark } })
|
|
77
|
+
* getTheme({ tokens, mode: 'light' }) // direct tokens
|
|
78
|
+
*/
|
|
79
|
+
export const getTheme = ({ key, mode, manifest, tokens, tokensByMode } = {}) => {
|
|
80
|
+
// 1) Direct tokens take precedence
|
|
81
|
+
if (tokens) return createThemeFromTokens(tokens, mode || 'light');
|
|
82
|
+
// 2) Manifest-driven (custom or built-in)
|
|
83
|
+
if (manifest) return createThemeFromManifest(manifest, mode || 'light', tokensByMode);
|
|
84
|
+
// 3) Built-ins by key (preferred: 'neurons' + mode)
|
|
85
|
+
if (key && BUILT_IN[key]) {
|
|
86
|
+
const entry = BUILT_IN[key];
|
|
87
|
+
return createThemeFromManifest(entry.manifest, mode || 'light', entry.tokensByMode);
|
|
88
|
+
}
|
|
89
|
+
// 4) Legacy keys support ('neurons-light' | 'neurons-dark')
|
|
90
|
+
if (key === 'neurons-light') {
|
|
91
|
+
return createThemeFromManifest(BUILT_IN.neurons.manifest, 'light', BUILT_IN.neurons.tokensByMode);
|
|
92
|
+
}
|
|
93
|
+
if (key === 'neurons-dark') {
|
|
94
|
+
return createThemeFromManifest(BUILT_IN.neurons.manifest, 'dark', BUILT_IN.neurons.tokensByMode);
|
|
95
|
+
}
|
|
96
|
+
// 5) Default fallback → neurons dark
|
|
97
|
+
return createThemeFromManifest(BUILT_IN.neurons.manifest, 'dark', BUILT_IN.neurons.tokensByMode);
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* AVAILABLE_THEMES
|
|
102
|
+
* - Minimal info for theme pickers / galleries. Pulled from each manifest.
|
|
103
|
+
*/
|
|
104
|
+
export const AVAILABLE_THEMES = Object.entries(BUILT_IN).flatMap(([familyId, entry]) => {
|
|
105
|
+
const m = entry.manifest || {};
|
|
106
|
+
const modes = Object.keys(m.modes || { light: {}, dark: {} });
|
|
107
|
+
return modes.map((mode) => ({
|
|
108
|
+
key: familyId, // ← Add this line
|
|
109
|
+
id: `${familyId}-${mode}`,
|
|
110
|
+
family: familyId,
|
|
111
|
+
name: `${m.name || familyId} ${mode === 'light' ? 'Light' : 'Dark'}`,
|
|
112
|
+
mode,
|
|
113
|
+
// opcional: pasa el manifest completo si tu selector lo usa
|
|
114
|
+
manifest: m,
|
|
115
|
+
}));
|
|
116
|
+
});
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// src/themes/theme.d.ts
|
|
2
|
+
// src/themes/theme.d.ts
|
|
3
|
+
// ---------- This.GUI Theme Manifest types (library-level, not part of MUI) ----------
|
|
4
|
+
export type ThemeIcon =
|
|
5
|
+
| { type: 'mui' | 'lucide'; value: string } // icon token from a known set
|
|
6
|
+
| { type: 'url'; value: string } // URL to an image (svg/png)
|
|
7
|
+
| { type: 'svg'; value: string } // inline SVG markup
|
|
8
|
+
| { type: 'data'; value: string }; // data URI
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* ThemeManifest
|
|
12
|
+
* Describes a theme package and the paths to its light/dark token files.
|
|
13
|
+
* This is metadata for discovery/marketplace; it is intentionally separate
|
|
14
|
+
* from the runtime MUI Theme type augmentation below.
|
|
15
|
+
*/
|
|
16
|
+
export type ThemeManifest = {
|
|
17
|
+
id: string;
|
|
18
|
+
name: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
author?: string;
|
|
21
|
+
version?: string;
|
|
22
|
+
license?: string;
|
|
23
|
+
homepage?: string;
|
|
24
|
+
repository?: { type: string; url: string };
|
|
25
|
+
tags?: string[];
|
|
26
|
+
createdAt?: string;
|
|
27
|
+
updatedAt?: string;
|
|
28
|
+
icon?: ThemeIcon; // Optional theme icon for listings
|
|
29
|
+
modes: {
|
|
30
|
+
light: { path: string };
|
|
31
|
+
dark: { path: string };
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
import '@mui/material/styles';
|
|
35
|
+
declare module '@mui/material/styles' {
|
|
36
|
+
// -----------------------------
|
|
37
|
+
// Palette extensions
|
|
38
|
+
// -----------------------------
|
|
39
|
+
interface TypeBackground {
|
|
40
|
+
/** Custom background color for navigation surfaces (e.g., AppBar). */
|
|
41
|
+
nav?: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
interface Palette {
|
|
45
|
+
/** Default/iconic color separate from text/action semantics. */
|
|
46
|
+
icon: Palette['primary'];
|
|
47
|
+
/** Link colors (normal + optional visited). */
|
|
48
|
+
link: { main: string; visited?: string };
|
|
49
|
+
}
|
|
50
|
+
interface PaletteOptions {
|
|
51
|
+
icon?: PaletteOptions['primary'];
|
|
52
|
+
link?: { main: string; visited?: string };
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// -----------------------------
|
|
56
|
+
// Typography extensions
|
|
57
|
+
// -----------------------------
|
|
58
|
+
interface TypographyVariants {
|
|
59
|
+
/** Optional helper scale for line-heights used by generators/utilities. */
|
|
60
|
+
lineHeights?: {
|
|
61
|
+
tight?: number;
|
|
62
|
+
normal?: number;
|
|
63
|
+
relaxed?: number;
|
|
64
|
+
[key: string]: number | undefined;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
interface TypographyVariantsOptions {
|
|
68
|
+
lineHeights?: {
|
|
69
|
+
tight?: number;
|
|
70
|
+
normal?: number;
|
|
71
|
+
relaxed?: number;
|
|
72
|
+
[key: string]: number | undefined;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// -----------------------------
|
|
77
|
+
// Theme extensions
|
|
78
|
+
// -----------------------------
|
|
79
|
+
interface Theme {
|
|
80
|
+
/** Runtime layout insets coordinated by NavBar/Drawers (pixels). */
|
|
81
|
+
layout: {
|
|
82
|
+
insets: { left: number; right: number; nav: number };
|
|
83
|
+
};
|
|
84
|
+
/** Callback exposed by GuiProvider to update insets at runtime. */
|
|
85
|
+
updateInsets?: (v: Partial<{ left: number; right: number; nav: number }>) => void;
|
|
86
|
+
/** Bag for tokens that don't map 1:1 to MUI. */
|
|
87
|
+
custom?: {
|
|
88
|
+
border?: string;
|
|
89
|
+
gradients?: unknown;
|
|
90
|
+
overlays?: unknown;
|
|
91
|
+
iconSizes?: Record<string, unknown>;
|
|
92
|
+
lineHeights?: Record<string, unknown>;
|
|
93
|
+
[key: string]: unknown;
|
|
94
|
+
};
|
|
95
|
+
/** (Optional) legacy insets for backwards compatibility. */
|
|
96
|
+
insets?: { left?: number; right?: number; nav?: number };
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
interface ThemeOptions {
|
|
100
|
+
layout?: {
|
|
101
|
+
insets?: Partial<{ left: number; right: number; nav: number }>;
|
|
102
|
+
};
|
|
103
|
+
updateInsets?: (v: Partial<{ left: number; right: number; nav: number }>) => void;
|
|
104
|
+
custom?: {
|
|
105
|
+
border?: string;
|
|
106
|
+
gradients?: unknown;
|
|
107
|
+
overlays?: unknown;
|
|
108
|
+
iconSizes?: Record<string, unknown>;
|
|
109
|
+
lineHeights?: Record<string, unknown>;
|
|
110
|
+
[key: string]: unknown;
|
|
111
|
+
};
|
|
112
|
+
insets?: Partial<{ left: number; right: number; nav: number }>;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export {};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$description": "Global design tokens for This.GUI — base values shared across all themes.",
|
|
3
|
+
"radius": {
|
|
4
|
+
"md": {
|
|
5
|
+
"$type": "radius",
|
|
6
|
+
"$value": "10px"
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
"spacing": {
|
|
10
|
+
"base": {
|
|
11
|
+
"$type": "spacing",
|
|
12
|
+
"$value": "8"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"border": {
|
|
16
|
+
"default": {
|
|
17
|
+
"$type": "color",
|
|
18
|
+
"$value": "rgba(0, 0, 0, 0.08)"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"font": {
|
|
22
|
+
"family": {
|
|
23
|
+
"$type": "fontFamily",
|
|
24
|
+
"$value": "Roboto, sans-serif"
|
|
25
|
+
},
|
|
26
|
+
"weightBold": {
|
|
27
|
+
"$type": "fontWeight",
|
|
28
|
+
"$value": "700"
|
|
29
|
+
},
|
|
30
|
+
"weightSemibold": {
|
|
31
|
+
"$type": "fontWeight",
|
|
32
|
+
"$value": "600"
|
|
33
|
+
},
|
|
34
|
+
"sizeBase": {
|
|
35
|
+
"$type": "fontSize",
|
|
36
|
+
"$value": "16"
|
|
37
|
+
},
|
|
38
|
+
"letterTight": {
|
|
39
|
+
"$type": "letterSpacing",
|
|
40
|
+
"$value": "-0.01em"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"color": {
|
|
44
|
+
"$description": "Extended semantic colors, gradients, overlays",
|
|
45
|
+
"success": { "$type": "color", "$value": "#4caf50" },
|
|
46
|
+
"warning": { "$type": "color", "$value": "#ff9800" },
|
|
47
|
+
"error": { "$type": "color", "$value": "#f44336" },
|
|
48
|
+
"info": { "$type": "color", "$value": "#2196f3" },
|
|
49
|
+
"gradientPrimary": { "$type": "gradient", "$value": "linear-gradient(135deg, #00aa96 0%, #008c7d 100%)" }
|
|
50
|
+
},
|
|
51
|
+
"insets": {
|
|
52
|
+
"$description": "Offsets reserved for permanent drawers",
|
|
53
|
+
"$type": "object",
|
|
54
|
+
"left": {
|
|
55
|
+
"$type": "size",
|
|
56
|
+
"$value": "0px"
|
|
57
|
+
},
|
|
58
|
+
"right": {
|
|
59
|
+
"$type": "size",
|
|
60
|
+
"$value": "0px"
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"shadows": {
|
|
64
|
+
"$description": "Consistent elevation levels, AR/3D ready",
|
|
65
|
+
"sm": { "$type": "shadow", "$value": "0px 1px 2px rgba(0, 0, 0, 0.05)" },
|
|
66
|
+
"md": { "$type": "shadow", "$value": "0px 3px 6px rgba(0, 0, 0, 0.1)" },
|
|
67
|
+
"lg": { "$type": "shadow", "$value": "0px 8px 16px rgba(0, 0, 0, 0.15)" }
|
|
68
|
+
},
|
|
69
|
+
"zIndex": {
|
|
70
|
+
"$description": "Advanced layering control",
|
|
71
|
+
"nav": { "$type": "number", "$value": 1100 },
|
|
72
|
+
"modal": { "$type": "number", "$value": 1300 },
|
|
73
|
+
"tooltip": { "$type": "number", "$value": 1500 }
|
|
74
|
+
},
|
|
75
|
+
"breakpoints": {
|
|
76
|
+
"$description": "Declarative responsive interfaces",
|
|
77
|
+
"xs": { "$type": "breakpoint", "$value": "0px" },
|
|
78
|
+
"sm": { "$type": "breakpoint", "$value": "600px" },
|
|
79
|
+
"md": { "$type": "breakpoint", "$value": "900px" },
|
|
80
|
+
"lg": { "$type": "breakpoint", "$value": "1200px" },
|
|
81
|
+
"xl": { "$type": "breakpoint", "$value": "1536px" }
|
|
82
|
+
},
|
|
83
|
+
"motion": {
|
|
84
|
+
"$description": "Animation and transition tokens",
|
|
85
|
+
"durationFast": { "$type": "duration", "$value": "150ms" },
|
|
86
|
+
"durationBase": { "$type": "duration", "$value": "300ms" },
|
|
87
|
+
"easingStandard": { "$type": "easing", "$value": "cubic-bezier(0.4, 0, 0.2, 1)" }
|
|
88
|
+
},
|
|
89
|
+
"opacity": {
|
|
90
|
+
"$description": "Universal interaction effects",
|
|
91
|
+
"disabled": { "$type": "opacity", "$value": "0.38" },
|
|
92
|
+
"hover": { "$type": "opacity", "$value": "0.08" },
|
|
93
|
+
"focus": { "$type": "opacity", "$value": "0.12" }
|
|
94
|
+
},
|
|
95
|
+
"icon": {
|
|
96
|
+
"$description": "Scalable icon sizes for generated GUIs",
|
|
97
|
+
"sm": { "$type": "size", "$value": "16px" },
|
|
98
|
+
"md": { "$type": "size", "$value": "24px" },
|
|
99
|
+
"lg": { "$type": "size", "$value": "32px" }
|
|
100
|
+
},
|
|
101
|
+
"lineHeight": {
|
|
102
|
+
"$description": "Better typographic control",
|
|
103
|
+
"tight": { "$type": "lineHeight", "$value": "1.1" },
|
|
104
|
+
"base": { "$type": "lineHeight", "$value": "1.5" },
|
|
105
|
+
"relaxed": { "$type": "lineHeight", "$value": "1.75" }
|
|
106
|
+
}
|
|
107
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$description": "Neurons Dark Theme Tokens — overrides applied on top of global.tokens.json",
|
|
3
|
+
"id": "neurons-dark",
|
|
4
|
+
"color": {
|
|
5
|
+
"primary": {
|
|
6
|
+
"$type": "color",
|
|
7
|
+
"$value": "#90caf9"
|
|
8
|
+
},
|
|
9
|
+
"secondary": {
|
|
10
|
+
"$type": "color",
|
|
11
|
+
"$value": "#f48fb1"
|
|
12
|
+
},
|
|
13
|
+
"icon": {
|
|
14
|
+
"$type": "color",
|
|
15
|
+
"$value": "#a8a8a8"
|
|
16
|
+
},
|
|
17
|
+
|
|
18
|
+
"background": {
|
|
19
|
+
"default": { "$type": "color", "$value": "#121214" },
|
|
20
|
+
"paper": { "$type": "color", "$value": "#181a1c" },
|
|
21
|
+
"nav": { "$type": "color", "$value": "rgba(18,18,20,0.95)" }
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
"textPrimary": {
|
|
25
|
+
"$type": "color",
|
|
26
|
+
"$value": "#ffffff"
|
|
27
|
+
},
|
|
28
|
+
"textSecondary": {
|
|
29
|
+
"$type": "color",
|
|
30
|
+
"$value": "rgba(255,255,255,0.75)"
|
|
31
|
+
},
|
|
32
|
+
"link": {
|
|
33
|
+
"$type": "color",
|
|
34
|
+
"$value": "#00aa96"
|
|
35
|
+
},
|
|
36
|
+
"linkVisited": {
|
|
37
|
+
"$type": "color",
|
|
38
|
+
"$value": "#008278"
|
|
39
|
+
},
|
|
40
|
+
"border": {
|
|
41
|
+
"$type": "color",
|
|
42
|
+
"$value": "rgb(45,45,55)"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$description": "Design tokens for neurons.light theme — part of This.GUI ecosystem",
|
|
3
|
+
"id": "neurons-light",
|
|
4
|
+
"extends": "global.tokens.json",
|
|
5
|
+
"color": {
|
|
6
|
+
"primary": {
|
|
7
|
+
"$type": "color",
|
|
8
|
+
"$value": "#0a3a42"
|
|
9
|
+
},
|
|
10
|
+
"secondary": {
|
|
11
|
+
"$type": "color",
|
|
12
|
+
"$value": "#e5396f"
|
|
13
|
+
},
|
|
14
|
+
"icon": {
|
|
15
|
+
"$type": "color",
|
|
16
|
+
"$value": "#5e5e5e"
|
|
17
|
+
},
|
|
18
|
+
"default": {
|
|
19
|
+
"$type": "color",
|
|
20
|
+
"$value": "#f8f9fa"
|
|
21
|
+
},
|
|
22
|
+
"paper": {
|
|
23
|
+
"$type": "color",
|
|
24
|
+
"$value": "#ffffff"
|
|
25
|
+
},
|
|
26
|
+
"nav": {
|
|
27
|
+
"$type": "color",
|
|
28
|
+
"$value": "#fdfdfd"
|
|
29
|
+
},
|
|
30
|
+
"textPrimary": {
|
|
31
|
+
"$type": "color",
|
|
32
|
+
"$value": "#111111"
|
|
33
|
+
},
|
|
34
|
+
"textSecondary": {
|
|
35
|
+
"$type": "color",
|
|
36
|
+
"$value": "#444444"
|
|
37
|
+
},
|
|
38
|
+
"link": {
|
|
39
|
+
"$type": "color",
|
|
40
|
+
"$value": "#008c7d"
|
|
41
|
+
},
|
|
42
|
+
"linkVisited": {
|
|
43
|
+
"$type": "color",
|
|
44
|
+
"$value": "#006e64"
|
|
45
|
+
},
|
|
46
|
+
"border": {
|
|
47
|
+
"$type": "color",
|
|
48
|
+
"$value": "rgba(0,0,0,0.08)"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "neurons.me",
|
|
3
|
+
"name": "neurons.me",
|
|
4
|
+
"description": "A modern, flexible theme for Neuroverse.",
|
|
5
|
+
"author": "suiGn",
|
|
6
|
+
"version": "1.0.0",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"homepage": "https://neurons.me/themes/neurons",
|
|
9
|
+
"repository": { "type": "git", "url": "https://github.com/neurons/me-themes.git" },
|
|
10
|
+
"tags": ["official", "default"],
|
|
11
|
+
"createdAt": "2025-09-16T00:00:00.000Z",
|
|
12
|
+
"updatedAt": "2025-09-16T00:00:00.000Z",
|
|
13
|
+
|
|
14
|
+
"icon": {
|
|
15
|
+
"type": "mui",
|
|
16
|
+
"value": "Palette"
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
"modes": {
|
|
20
|
+
"light": { "path": "./light.tokens.json" },
|
|
21
|
+
"dark": { "path": "./dark.tokens.json" }
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// src/types/theme.d.ts
|
|
2
|
+
import '@mui/material/styles';
|
|
3
|
+
// Module augmentation so TS knows about our theme extensions injected by GuiProvider
|
|
4
|
+
declare module '@mui/material/styles' {
|
|
5
|
+
/** Insets reported at runtime by NavBar/Drawers and read by layout components */
|
|
6
|
+
interface Insets {
|
|
7
|
+
left: number;
|
|
8
|
+
right: number;
|
|
9
|
+
nav: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** Runtime theme (what useTheme() returns) */
|
|
13
|
+
interface Theme {
|
|
14
|
+
layout: { insets: Insets };
|
|
15
|
+
/** Callback to update insets; injected by GuiProvider */
|
|
16
|
+
updateInsets?: (next: Partial<Insets>) => void;
|
|
17
|
+
/** Optional legacy field for back-compat (some code reads theme.insets) */
|
|
18
|
+
insets?: Partial<Insets>;
|
|
19
|
+
/** Parking spot for all design tokens not mapped natively to MUI */
|
|
20
|
+
custom: Record<string, any>;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Accepted options when creating the theme */
|
|
24
|
+
interface ThemeOptions {
|
|
25
|
+
layout?: { insets?: Partial<Insets> };
|
|
26
|
+
updateInsets?: (next: Partial<Insets>) => void;
|
|
27
|
+
/** Optional legacy field for back-compat */
|
|
28
|
+
insets?: Partial<Insets>;
|
|
29
|
+
/** Parking spot for all design tokens not mapped natively to MUI */
|
|
30
|
+
custom?: Record<string, any>;
|
|
31
|
+
}
|
|
32
|
+
}
|