this.gui 1.3.24 → 1.3.26
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/dist/this-gui.es.js +0 -1
- package/dist/this-gui.umd.js +65 -65
- package/index.ts +3 -2
- package/init/index.html +1 -2
- package/init/package-lock.json +2 -2
- package/init/package.json +1 -1
- package/init/src/App.tsx +24 -0
- package/init/src/index.css +16 -0
- package/init/src/main.tsx +14 -0
- package/init/src/router/DerivableRouter.tsx +36 -0
- package/package.json +1 -1
- package/src/GUI.tsx +15 -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/gui/Layouts/ResponsiveUI/Content/Content.resolver.tsx +0 -0
- package/src/gui/Layouts/ResponsiveUI/Content/Content.stories.tsx +88 -0
- package/src/gui/Layouts/ResponsiveUI/Content/Content.tsx +53 -0
- package/src/gui/Layouts/ResponsiveUI/Content/Content.types.tsx +40 -0
- package/src/gui/Layouts/ResponsiveUI/Footer/Footer.resolver.tsx +45 -0
- package/src/gui/Layouts/ResponsiveUI/Footer/Footer.stories.tsx +209 -0
- package/src/gui/Layouts/ResponsiveUI/Footer/Footer.tsx +337 -0
- package/src/gui/Layouts/ResponsiveUI/Footer/Footer.types.ts +40 -0
- package/src/gui/Layouts/ResponsiveUI/Layout/Layout.resolver.tsx +37 -0
- package/src/gui/Layouts/ResponsiveUI/Layout/Layout.stories.tsx +290 -0
- package/src/gui/Layouts/ResponsiveUI/Layout/Layout.tsx +112 -0
- package/src/gui/Layouts/ResponsiveUI/Layout/Layout.types.ts +56 -0
- package/src/gui/Layouts/ResponsiveUI/Layout/useLayoutBreakpoints.ts +9 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/LeftSidebar.resolver.tsx +87 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/LeftSidebar.stories.tsx +199 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/LeftSidebar.tsx +311 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/LeftSidebar.types.ts +41 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/SidebarToggleButton.tsx +53 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/components/LeftSidebarAction/LeftSidebarAction.resolver.tsx +19 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/components/LeftSidebarAction/LeftSidebarAction.tsx +107 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/components/LeftSidebarLink/LeftSidebarLink.resolver.tsx +0 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/components/LeftSidebarLink/LeftSidebarLink.tsx +122 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/components/LeftSidebarLink/LeftSidebarLink.types.ts +13 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/components/LeftSidebarMenu/LeftSidebarMenu.tsx +142 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/LeftSidebar/components/LeftSidebarToggleButton/LeftSidebarToggleButton.tsx +23 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/RightSidebar/RightSidebar.resolver.tsx +35 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/RightSidebar/RightSidebar.stories.tsx +240 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/RightSidebar/RightSidebar.tsx +319 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/RightSidebar/RightSidebar.types.ts +17 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/RightSidebar/components/RightSidebarAction/RightSidebarAction.tsx +102 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/RightSidebar/components/RightSidebarLink/RightSidebarLink.tsx +132 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/RightSidebar/components/RightSidebarMenu/RightSidebarMenu.tsx +140 -0
- package/src/gui/Layouts/ResponsiveUI/Sidebars/RightSidebar/components/RightSidebarToggleButton/RightSidebarToggleButton.tsx +22 -0
- package/src/gui/Layouts/ResponsiveUI/StickyOptions/StickyOptionsTop.stories.tsx +469 -0
- package/src/gui/Layouts/ResponsiveUI/StickyOptions/StickyOptionsTop.tsx +489 -0
- package/src/gui/Layouts/ResponsiveUI/TopBar/TopBar.resolver.tsx +86 -0
- package/src/gui/Layouts/ResponsiveUI/TopBar/TopBar.stories.tsx +350 -0
- package/src/gui/Layouts/ResponsiveUI/TopBar/TopBar.tsx +281 -0
- package/src/gui/Layouts/ResponsiveUI/TopBar/TopBar.types.ts +39 -0
- package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarAction/TopBarAction.stories.tsx +83 -0
- package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarAction/TopBarAction.tsx +18 -0
- package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarAction/TopBarAction.types.ts +4 -0
- package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarLink/TopBarLink.stories.tsx +189 -0
- package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarLink/TopBarLink.tsx +30 -0
- package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarLink/TopBarLink.types.ts +9 -0
- package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarMenu/TopBarMenu.resolver.tsx +14 -0
- package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarMenu/TopBarMenu.stories.tsx +56 -0
- package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarMenu/TopBarMenu.tsx +123 -0
- package/src/gui/Layouts/ResponsiveUI/TopBar/components/TopBarMenu/TopBarMenu.types.ts +44 -0
- package/src/gui/Theme/GuiProvider.tsx +125 -0
- package/src/gui/Theme/Icon/Icon.resolver.tsx +29 -0
- package/src/gui/Theme/Icon/Icon.tsx +43 -0
- package/src/gui/Theme/catalog/CherryByte/CherryByte.png +0 -0
- package/src/gui/Theme/catalog/CherryByte/dark.tokens.ts +47 -0
- package/src/gui/Theme/catalog/CherryByte/light.tokens.ts +47 -0
- package/src/gui/Theme/catalog/CherryByte/manifest.ts +24 -0
- package/src/gui/Theme/catalog/GhostShell/dark.tokens.ts +43 -0
- package/src/gui/Theme/catalog/GhostShell/ghost.png +0 -0
- package/src/gui/Theme/catalog/GhostShell/light.tokens.ts +39 -0
- package/src/gui/Theme/catalog/GhostShell/manifest.ts +24 -0
- package/src/gui/Theme/catalog/LunaHex/LunaHex.png +0 -0
- package/src/gui/Theme/catalog/LunaHex/dark.tokens.ts +34 -0
- package/src/gui/Theme/catalog/LunaHex/light.tokens.ts +74 -0
- package/src/gui/Theme/catalog/LunaHex/manifest.ts +24 -0
- package/src/gui/Theme/catalog/MUI/MUI.png +0 -0
- package/src/gui/Theme/catalog/MUI/dark.tokens.ts +58 -0
- package/src/gui/Theme/catalog/MUI/light.tokens.ts +74 -0
- package/src/gui/Theme/catalog/MUI/manifest.ts +24 -0
- package/src/gui/Theme/catalog/PrinceOfDarkness/dark.tokens.ts +48 -0
- package/src/gui/Theme/catalog/PrinceOfDarkness/light.tokens.ts +47 -0
- package/src/gui/Theme/catalog/PrinceOfDarkness/manifest.ts +24 -0
- package/src/gui/Theme/catalog/PrinceOfDarkness/prince.png +0 -0
- package/src/gui/Theme/catalog/PrinceOfDarkness/princeOfDarkness.png +0 -0
- package/src/gui/Theme/catalog/Seafoam/dark.tokens.ts +49 -0
- package/src/gui/Theme/catalog/Seafoam/light.tokens.ts +47 -0
- package/src/gui/Theme/catalog/Seafoam/manifest.ts +24 -0
- package/src/gui/Theme/catalog/Seafoam/seaFoam.png +0 -0
- package/src/gui/Theme/catalog/neurons/dark.tokens.ts +58 -0
- package/src/gui/Theme/catalog/neurons/light.tokens.ts +74 -0
- package/src/gui/Theme/catalog/neurons/manifest.ts +24 -0
- package/src/gui/Theme/catalog/neurons/neurons.me.png +0 -0
- package/src/gui/Theme/fromTokens.ts +273 -0
- package/src/gui/Theme/gui.css +31 -0
- package/src/gui/Theme/index.ts +17 -0
- package/src/gui/Theme/styles/buildShadows.ts +83 -0
- package/src/gui/Theme/styles/theme.tokens.ts +108 -0
- package/src/gui/Theme/utils/catalog.ts +61 -0
- package/src/gui/Theme/utils/persistence.ts +66 -0
- package/src/gui/Theme/utils/themeUtils.ts +34 -0
- package/src/gui/apis/codegen.api.ts +38 -0
- package/src/gui/components/atoms/AppBar/AppBar.resolver.tsx +41 -0
- package/src/gui/components/atoms/AppBar/AppBar.stories.tsx +225 -0
- package/src/gui/components/atoms/AppBar/AppBar.tsx +8 -0
- package/src/gui/components/atoms/AppBar/AppBar.types.ts +28 -0
- package/src/gui/components/atoms/Avatar/Avatar.resolver.tsx +61 -0
- package/src/gui/components/atoms/Avatar/Avatar.stories.tsx +36 -0
- package/src/gui/components/atoms/Avatar/Avatar.tsx +14 -0
- package/src/gui/components/atoms/Box/Box.resolver.tsx +171 -0
- package/src/gui/components/atoms/Box/Box.stories.tsx +263 -0
- package/src/gui/components/atoms/Box/Box.tsx +15 -0
- package/src/gui/components/atoms/Button/Button.resolver.tsx +103 -0
- package/src/gui/components/atoms/Button/Button.stories.tsx +219 -0
- package/src/gui/components/atoms/Button/Button.tsx +40 -0
- package/src/gui/components/atoms/Card/Card.resolver.tsx +63 -0
- package/src/gui/components/atoms/Card/Card.stories.tsx +54 -0
- package/src/gui/components/atoms/Card/Card.tsx +13 -0
- package/src/gui/components/atoms/CardActions/CardActions.resolver.tsx +59 -0
- package/src/gui/components/atoms/CardActions/CardActions.stories.tsx +32 -0
- package/src/gui/components/atoms/CardActions/CardActions.tsx +14 -0
- package/src/gui/components/atoms/CardContent/CardContent.resolver.tsx +60 -0
- package/src/gui/components/atoms/CardContent/CardContent.stories.tsx +34 -0
- package/src/gui/components/atoms/CardContent/CardContent.tsx +13 -0
- package/src/gui/components/atoms/CardHeader/CardHeader.resolver.tsx +68 -0
- package/src/gui/components/atoms/CardHeader/CardHeader.stories.tsx +40 -0
- package/src/gui/components/atoms/CardHeader/CardHeader.tsx +12 -0
- package/src/gui/components/atoms/Collapse/Collapse.resolver.tsx +85 -0
- package/src/gui/components/atoms/Collapse/Collapse.stories.tsx +130 -0
- package/src/gui/components/atoms/Collapse/Collapse.tsx +17 -0
- package/src/gui/components/atoms/Divider/Divider.resolver.tsx +95 -0
- package/src/gui/components/atoms/Divider/Divider.stories.tsx +108 -0
- package/src/gui/components/atoms/Divider/Divider.tsx +14 -0
- package/src/gui/components/atoms/Drawer/Drawer.resolver.tsx +116 -0
- package/src/gui/components/atoms/Drawer/Drawer.stories.tsx +223 -0
- package/src/gui/components/atoms/Drawer/Drawer.tsx +25 -0
- package/src/gui/components/atoms/Grid/Grid.resolver.tsx +33 -0
- package/src/gui/components/atoms/Grid/Grid.stories.tsx +136 -0
- package/src/gui/components/atoms/Grid/Grid.tsx +15 -0
- package/src/gui/components/atoms/Grid/Grid.types.ts +9 -0
- package/src/gui/components/atoms/IconButton/IconButton.resolver.tsx +137 -0
- package/src/gui/components/atoms/IconButton/IconButton.stories.tsx +134 -0
- package/src/gui/components/atoms/IconButton/IconButton.tsx +22 -0
- package/src/gui/components/atoms/Link/Link.resolver.tsx +74 -0
- package/src/gui/components/atoms/Link/Link.stories.tsx +157 -0
- package/src/gui/components/atoms/Link/Link.tsx +36 -0
- package/src/gui/components/atoms/List/List.resolver.tsx +94 -0
- package/src/gui/components/atoms/List/List.stories.tsx +137 -0
- package/src/gui/components/atoms/List/List.tsx +20 -0
- package/src/gui/components/atoms/ListItem/ListItem.resolver.tsx +88 -0
- package/src/gui/components/atoms/ListItem/ListItem.stories.tsx +151 -0
- package/src/gui/components/atoms/ListItem/ListItem.tsx +19 -0
- package/src/gui/components/atoms/ListItemButton/ListItemButton.resolver.tsx +214 -0
- package/src/gui/components/atoms/ListItemButton/ListItemButton.stories.tsx +155 -0
- package/src/gui/components/atoms/ListItemButton/ListItemButton.tsx +15 -0
- package/src/gui/components/atoms/ListItemIcon/ListItemIcon.resolver.tsx +102 -0
- package/src/gui/components/atoms/ListItemIcon/ListItemIcon.stories.tsx +132 -0
- package/src/gui/components/atoms/ListItemIcon/ListItemIcon.tsx +11 -0
- package/src/gui/components/atoms/ListItemText/ListItemText.resolver.tsx +112 -0
- package/src/gui/components/atoms/ListItemText/ListItemText.stories.tsx +156 -0
- package/src/gui/components/atoms/ListItemText/ListItemText.tsx +15 -0
- package/src/gui/components/atoms/Menu/Menu.resolver.tsx +112 -0
- package/src/gui/components/atoms/Menu/Menu.stories.tsx +162 -0
- package/src/gui/components/atoms/Menu/Menu.tsx +17 -0
- package/src/gui/components/atoms/MenuItem/MenuItem.resolver.tsx +183 -0
- package/src/gui/components/atoms/MenuItem/MenuItem.stories.tsx +134 -0
- package/src/gui/components/atoms/MenuItem/MenuItem.tsx +14 -0
- package/src/gui/components/atoms/Paper/Paper.resolver.tsx +98 -0
- package/src/gui/components/atoms/Paper/Paper.stories.tsx +184 -0
- package/src/gui/components/atoms/Paper/Paper.tsx +15 -0
- package/src/gui/components/atoms/Section/Section.resolver.tsx +10 -0
- package/src/gui/components/atoms/Section/Section.stories.tsx +189 -0
- package/src/gui/components/atoms/Section/Section.tsx +76 -0
- package/src/gui/components/atoms/Section/Section.types.tsx +24 -0
- package/src/gui/components/atoms/Stack/Stack.resolver.tsx +94 -0
- package/src/gui/components/atoms/Stack/Stack.stories.tsx +160 -0
- package/src/gui/components/atoms/Stack/Stack.tsx +15 -0
- package/src/gui/components/atoms/Surface/Surface.resolver.tsx +37 -0
- package/src/gui/components/atoms/Surface/Surface.tsx +49 -0
- package/src/gui/components/atoms/Surface/Surface.types.ts +20 -0
- package/src/gui/components/atoms/Switch/Switch.resolver.tsx +53 -0
- package/src/gui/components/atoms/Switch/Switch.stories.tsx +236 -0
- package/src/gui/components/atoms/Switch/Switch.tsx +22 -0
- package/src/gui/components/atoms/TextField/TextField.stories.tsx +28 -0
- package/src/gui/components/atoms/TextField/TextField.tsx +15 -0
- package/src/gui/components/atoms/Toolbar/Toolbar.resolver.tsx +60 -0
- package/src/gui/components/atoms/Toolbar/Toolbar.stories.tsx +155 -0
- package/src/gui/components/atoms/Toolbar/Toolbar.tsx +16 -0
- package/src/gui/components/atoms/Tooltip/Tooltip.resolver.tsx +142 -0
- package/src/gui/components/atoms/Tooltip/Tooltip.stories.tsx +117 -0
- package/src/gui/components/atoms/Tooltip/Tooltip.tsx +70 -0
- package/src/gui/components/atoms/Typography/Typography.resolver.tsx +158 -0
- package/src/gui/components/atoms/Typography/Typography.stories.tsx +222 -0
- package/src/gui/components/atoms/Typography/Typography.tsx +27 -0
- package/src/gui/components/atoms.tsx +138 -0
- package/src/gui/components/molecules/Dialog/Dialog.stories.tsx +18 -0
- package/src/gui/components/molecules/Dialog/Dialog.tsx +5 -0
- package/src/gui/components/molecules/HeroSection/HeroSection.stories.tsx +141 -0
- package/src/gui/components/molecules/HeroSection/HeroSection.tsx +152 -0
- package/src/gui/components/molecules/HeroSection/HeroSection.types.tsx +18 -0
- package/src/gui/components/molecules/ModalBox/ModalBox.resolver.tsx +38 -0
- package/src/gui/components/molecules/ModalBox/ModalBox.stories.tsx +82 -0
- package/src/gui/components/molecules/ModalBox/ModalBox.tsx +106 -0
- package/src/gui/components/molecules/ModalBox/ModalBox.types.ts +29 -0
- package/src/gui/components/molecules/Page/Page.stories.tsx +135 -0
- package/src/gui/components/molecules/Page/Page.tsx +94 -0
- package/src/gui/components/molecules/Theme/ThemeModeToggle/ThemeModeToggle.resolver.tsx +58 -0
- package/src/gui/components/molecules/Theme/ThemeModeToggle/ThemeModeToggle.stories.tsx +133 -0
- package/src/gui/components/molecules/Theme/ThemeModeToggle/ThemeModeToggle.tsx +101 -0
- package/src/gui/components/molecules/Theme/ThemeModeToggle/ThemeModeToggle.types.ts +29 -0
- package/src/gui/components/molecules/Theme/ThemesCatalog/ThemesCatalog.resolver.tsx +15 -0
- package/src/gui/components/molecules/Theme/ThemesCatalog/ThemesCatalog.stories.tsx +88 -0
- package/src/gui/components/molecules/Theme/ThemesCatalog/ThemesCatalog.tsx +167 -0
- package/src/gui/components/molecules/Theme/ThemesCatalog/ThemesCatalog.types.ts +34 -0
- package/src/gui/components/organism/ChatGPTInterface/ChatGPTInterface.stories.tsx +17 -0
- package/src/gui/components/organism/ChatGPTInterface/ChatGPTInterface.tsx +71 -0
- package/src/gui/components/organism/RootDomain/RootDomain.stories.tsx +31 -0
- package/src/gui/components/organism/RootDomain/RootDomain.tsx +100 -0
- package/src/gui/components/organism/RootDomain/staticServices.ts +66 -0
- package/src/gui/components/window/Nodes/node.ts +0 -0
- package/src/gui/components/window/code/block/node.tsx +0 -0
- package/src/gui/components/window/code/hugging.face.api.ts +11 -0
- package/src/gui/components/window/connectors/index.ts +19 -0
- package/src/gui/components/window/window.stories.tsx +20 -0
- package/src/gui/components/window/window.tsx +633 -0
- package/src/gui/contexts/InsetsContext.tsx +38 -0
- package/src/gui/contexts/LeftSidebarContext.tsx +20 -0
- package/src/gui/contexts/RightSidebarContext.tsx +25 -0
- package/src/gui/contexts/ThemeContext.ts +34 -0
- package/src/gui/contexts/index.ts +4 -0
- package/src/gui/hooks/index.ts +11 -0
- package/src/gui/hooks/resolveColorToken.ts +39 -0
- package/src/gui/hooks/useCodeGen.ts +12 -0
- package/src/gui/hooks/useGuiMediaQuery.ts +18 -0
- package/src/gui/hooks/useGuiTheme.ts +18 -0
- package/src/gui/hooks/useInsets.ts +26 -0
- package/src/gui/hooks/useIsMobile.ts +13 -0
- package/src/gui/hooks/useIsTouchDevice.ts +25 -0
- package/src/gui/hooks/useLeftSidebar.ts +10 -0
- package/src/gui/hooks/useRightSidebar.ts +12 -0
- package/src/gui/hooks/useViewportKey.ts +19 -0
- package/src/gui/hooks/useViewportProp.ts +17 -0
- package/src/gui/me/Logic.tsx +31 -0
- package/src/gui/me/Me.stories.tsx +8 -0
- package/src/gui/me/Me.tsx +197 -0
- package/src/gui/me/fundamentals/verbs/verbs.tsx +94 -0
- package/src/gui/me/modificators/Adjectives.ts +0 -0
- package/src/gui/me/modificators/Adverbs.ts +0 -0
- package/src/gui/me/modificators/Complements.ts +27 -0
- package/src/gui/me/utils/Context.tsx +14 -0
- package/src/gui/me/utils/hooks/useMe.js +37 -0
- package/src/gui/utils/nodeID.ts +11 -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.mdx +149 -0
- package/src/stories/Theme/Palette.stories.tsx +86 -0
- package/src/stories/Theme/ThemeViewer.stories.tsx +91 -0
- package/src/stories/Theme/Typography.stories.jsx +211 -0
- package/src/types/gui.d.ts +67 -0
- package/src/types/theme.d.ts +191 -0
- package/src/types/viewport.ts +132 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import Typography from './Typography';
|
|
3
|
+
import Link from '../Link/Link';
|
|
4
|
+
|
|
5
|
+
const meta = {
|
|
6
|
+
title: 'Atoms/Content/Typography',
|
|
7
|
+
component: Typography,
|
|
8
|
+
tags: ['autodocs'],
|
|
9
|
+
decorators: [
|
|
10
|
+
(Story) => (
|
|
11
|
+
<div style={{ padding: 24 }}>
|
|
12
|
+
<Story />
|
|
13
|
+
</div>
|
|
14
|
+
),
|
|
15
|
+
],
|
|
16
|
+
parameters: {
|
|
17
|
+
docs: {
|
|
18
|
+
description: {
|
|
19
|
+
component: `
|
|
20
|
+
**Typography** is a thin, polymorphic wrapper around MUI's Typography that keeps the full API
|
|
21
|
+
while exposing it through This.GUI. Import it from **@/gui/primitives** instead of @mui/material so
|
|
22
|
+
you can swap render engines in the future without breaking consumers.
|
|
23
|
+
|
|
24
|
+
### Key points
|
|
25
|
+
- Preserves MUI's polymorphism (\`component\`, \`as\`, \`variantMapping\`).
|
|
26
|
+
- Works with routers and anchors: \`component={Link}\` + \`to\`, or \`component="a"\` + \`href\`.
|
|
27
|
+
- Styled by your This.GUI theme (typography, palette, spacing).
|
|
28
|
+
|
|
29
|
+
### Common variants
|
|
30
|
+
MUI variants like \`h1..h6\`, \`subtitle1/2\`, \`body1/2\`, \`caption\`, \`overline\` are supported.
|
|
31
|
+
|
|
32
|
+
### Declarative JSON example
|
|
33
|
+
You can describe text nodes in JSON and hydrate them in a renderer:
|
|
34
|
+
|
|
35
|
+
~~~json
|
|
36
|
+
{
|
|
37
|
+
"type": "Typography",
|
|
38
|
+
"props": {
|
|
39
|
+
"variant": "h4",
|
|
40
|
+
"component": "h2",
|
|
41
|
+
"gutterBottom": true
|
|
42
|
+
},
|
|
43
|
+
"children": "Section Title"
|
|
44
|
+
}
|
|
45
|
+
~~~
|
|
46
|
+
|
|
47
|
+
A naive hydration would look like:
|
|
48
|
+
|
|
49
|
+
~~~tsx
|
|
50
|
+
const spec = {
|
|
51
|
+
type: 'Typography',
|
|
52
|
+
props: { variant: 'h4', component: 'h2', gutterBottom: true },
|
|
53
|
+
children: 'Section Title'
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
<Typography {...spec.props}>{spec.children}</Typography>
|
|
57
|
+
~~~
|
|
58
|
+
`,
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
controls: { exclude: ['component', 'to', 'href', 'variantMapping', 'ref'] },
|
|
62
|
+
},
|
|
63
|
+
} satisfies Meta<typeof Typography>;
|
|
64
|
+
|
|
65
|
+
export default meta;
|
|
66
|
+
|
|
67
|
+
type Story = StoryObj<typeof Typography>;
|
|
68
|
+
|
|
69
|
+
export const Basic: Story = {
|
|
70
|
+
args: {
|
|
71
|
+
variant: 'body1',
|
|
72
|
+
children: 'Hello from Typography',
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const Variants: Story = {
|
|
77
|
+
render: () => (
|
|
78
|
+
<div style={{ display: 'grid', gap: 8 }}>
|
|
79
|
+
<Typography variant="h1">h1. Heading</Typography>
|
|
80
|
+
<Typography variant="h2">h2. Heading</Typography>
|
|
81
|
+
<Typography variant="h3">h3. Heading</Typography>
|
|
82
|
+
<Typography variant="h4">h4. Heading</Typography>
|
|
83
|
+
<Typography variant="h5">h5. Heading</Typography>
|
|
84
|
+
<Typography variant="h6">h6. Heading</Typography>
|
|
85
|
+
<Typography variant="subtitle1">subtitle1</Typography>
|
|
86
|
+
<Typography variant="subtitle2">subtitle2</Typography>
|
|
87
|
+
<Typography variant="body1">body1</Typography>
|
|
88
|
+
<Typography variant="body2">body2</Typography>
|
|
89
|
+
<Typography variant="caption">caption</Typography>
|
|
90
|
+
<Typography variant="overline">overline</Typography>
|
|
91
|
+
</div>
|
|
92
|
+
),
|
|
93
|
+
parameters: {
|
|
94
|
+
docs: {
|
|
95
|
+
description: {
|
|
96
|
+
story: 'Preview of common Material UI typography variants.'
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
export const AsPropAndGutter: Story = {
|
|
103
|
+
name: 'Semantic element (component) + gutter',
|
|
104
|
+
render: () => (
|
|
105
|
+
<div>
|
|
106
|
+
<Typography variant="h4" component="h2" gutterBottom>
|
|
107
|
+
Section title (rendered as h2)
|
|
108
|
+
</Typography>
|
|
109
|
+
<Typography variant="body1">
|
|
110
|
+
Body text below the title. The \`gutterBottom\` on the title adds spacing.
|
|
111
|
+
</Typography>
|
|
112
|
+
</div>
|
|
113
|
+
),
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
export const Alignment: Story = {
|
|
117
|
+
render: () => (
|
|
118
|
+
<div style={{ display: 'grid', gap: 8 }}>
|
|
119
|
+
<Typography align="left">Left aligned</Typography>
|
|
120
|
+
<Typography align="center">Center aligned</Typography>
|
|
121
|
+
<Typography align="right">Right aligned</Typography>
|
|
122
|
+
</div>
|
|
123
|
+
),
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
export const Colors: Story = {
|
|
127
|
+
render: () => (
|
|
128
|
+
<div style={{ display: 'grid', gap: 8 }}>
|
|
129
|
+
<Typography color="text.primary">text.primary</Typography>
|
|
130
|
+
<Typography color="text.secondary">text.secondary</Typography>
|
|
131
|
+
<Typography color="primary">primary</Typography>
|
|
132
|
+
<Typography color="#00aa96">#00aa96 (custom)</Typography>
|
|
133
|
+
</div>
|
|
134
|
+
),
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
export const WithRouterAndAnchor: Story = {
|
|
138
|
+
name: 'Routing & anchors',
|
|
139
|
+
render: () => (
|
|
140
|
+
<div style={{ display: 'grid', gap: 12 }}>
|
|
141
|
+
{/* Router link (uses This.GUI Link under the hood) */}
|
|
142
|
+
<Typography component={Link as any} to="/docs" underline="none">
|
|
143
|
+
Go to /docs (Router link)
|
|
144
|
+
</Typography>
|
|
145
|
+
|
|
146
|
+
{/* External anchor */}
|
|
147
|
+
<Typography component="a" href="https://neurons.me" target="_blank" rel="noopener noreferrer">
|
|
148
|
+
Visit neurons.me (anchor)
|
|
149
|
+
</Typography>
|
|
150
|
+
</div>
|
|
151
|
+
),
|
|
152
|
+
parameters: {
|
|
153
|
+
docs: {
|
|
154
|
+
description: {
|
|
155
|
+
story: 'Demonstrates polymorphism: render as router link (with `to`) and as anchor (with `href`).'
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
export const VariantMappingOverride: Story = {
|
|
162
|
+
name: 'variantMapping override',
|
|
163
|
+
render: () => (
|
|
164
|
+
<div style={{ display: 'grid', gap: 8 }}>
|
|
165
|
+
<Typography
|
|
166
|
+
variant="subtitle1"
|
|
167
|
+
variantMapping={{ subtitle1: 'h3', body1: 'p' }}
|
|
168
|
+
>
|
|
169
|
+
subtitle1 text rendered as an H3 element via variantMapping
|
|
170
|
+
</Typography>
|
|
171
|
+
<Typography
|
|
172
|
+
variant="body1"
|
|
173
|
+
variantMapping={{ subtitle1: 'h3', body1: 'p' }}
|
|
174
|
+
>
|
|
175
|
+
body1 text rendered as a P element via variantMapping
|
|
176
|
+
</Typography>
|
|
177
|
+
</div>
|
|
178
|
+
),
|
|
179
|
+
parameters: {
|
|
180
|
+
docs: {
|
|
181
|
+
description: {
|
|
182
|
+
story: 'MUI Typography allows remapping variants to different HTML elements without changing visual style.'
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
export const DeclarativeSpec: Story = {
|
|
189
|
+
name: 'Declarative (JSON → Typography)',
|
|
190
|
+
render: () => {
|
|
191
|
+
const spec = {
|
|
192
|
+
type: 'Typography',
|
|
193
|
+
props: { variant: 'h5', component: 'h3', gutterBottom: true },
|
|
194
|
+
children: 'Declaratively rendered title',
|
|
195
|
+
} as const;
|
|
196
|
+
|
|
197
|
+
return (
|
|
198
|
+
<div style={{ display: 'grid', gap: 12 }}>
|
|
199
|
+
<pre style={{ background: 'rgba(127,127,127,0.08)', padding: 12, borderRadius: 8 }}>
|
|
200
|
+
{`{
|
|
201
|
+
"type": "Typography",
|
|
202
|
+
"props": {
|
|
203
|
+
"variant": "h5",
|
|
204
|
+
"component": "h3",
|
|
205
|
+
"gutterBottom": true
|
|
206
|
+
},
|
|
207
|
+
"children": "Declaratively rendered title"
|
|
208
|
+
}`}
|
|
209
|
+
</pre>
|
|
210
|
+
{/* naive renderer */}
|
|
211
|
+
<Typography {...spec.props}>{spec.children}</Typography>
|
|
212
|
+
</div>
|
|
213
|
+
);
|
|
214
|
+
},
|
|
215
|
+
parameters: {
|
|
216
|
+
docs: {
|
|
217
|
+
description: {
|
|
218
|
+
story: 'Example of hydrating a Typography node from a JSON spec. In production, your app would use a central registry/renderer.'
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This.GUI — Typography (polymorphic)
|
|
3
|
+
* Thin wrapper over MUI's Typography that preserves its full polymorphic API:
|
|
4
|
+
* - `component` / `as` (MUI OverridableComponent)
|
|
5
|
+
* - `variantMapping`
|
|
6
|
+
* - works with router links (`component={Link}`) or anchors (`component="a"`)
|
|
7
|
+
*
|
|
8
|
+
* Import from "@/gui/atoms" instead of "@mui/material" so we can change
|
|
9
|
+
* the underlying engine without breaking consumers.
|
|
10
|
+
*/
|
|
11
|
+
import * as React from 'react';
|
|
12
|
+
import MuiTypography from '@mui/material/Typography';
|
|
13
|
+
import type { OverridableComponent } from '@mui/material/OverridableComponent';
|
|
14
|
+
import type { TypographyTypeMap } from '@mui/material/Typography';
|
|
15
|
+
// Public prop type (mirrors MUI's polymorphic typing)
|
|
16
|
+
export type TypographyProps = React.ComponentProps<
|
|
17
|
+
OverridableComponent<TypographyTypeMap<{}, 'span'>>
|
|
18
|
+
>;
|
|
19
|
+
// Component: preserve MUI OverridableComponent so `component` works as in MUI
|
|
20
|
+
const Typography = MuiTypography as unknown as OverridableComponent<
|
|
21
|
+
TypographyTypeMap<{}, 'span'>
|
|
22
|
+
>;
|
|
23
|
+
// DevTools label
|
|
24
|
+
(Typography as any).displayName = 'Gui.Typography';
|
|
25
|
+
// Helpful alias for consumers who prefer a prefixed name
|
|
26
|
+
export type GuiTypographyProps = TypographyProps;
|
|
27
|
+
export default Typography;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This.GUI — primitives
|
|
3
|
+
* Thin wrappers around MUI components to present a stable, library-owned API.
|
|
4
|
+
* Internally we use MUI, but components in the design system should import from
|
|
5
|
+
* "@/gui/primitives" instead of "@mui/material". This lets us swap engines later.
|
|
6
|
+
*
|
|
7
|
+
* La regla estándar en tu wrapper
|
|
8
|
+
* • Si MUI lo declaró polimórfico → usa OverridableComponent en tu wrapper.
|
|
9
|
+
* • Si no lo es → usa forwardRef normal.
|
|
10
|
+
*
|
|
11
|
+
* Así garantizas dos cosas:
|
|
12
|
+
* ✅ Tu wrapper no pierde nada de lo que MUI ofrece.
|
|
13
|
+
* ✅ No te complicas agregando polimorfismo donde MUI no lo soporta.
|
|
14
|
+
*/
|
|
15
|
+
import * as React from 'react';
|
|
16
|
+
import type { SxProps, Theme } from '@mui/material/styles';
|
|
17
|
+
// AppBar is not polymorphic so we wrap it with forwardRef
|
|
18
|
+
import AppBar from './atoms/AppBar/AppBar';
|
|
19
|
+
export { default as AppBar } from './atoms/AppBar/AppBar';
|
|
20
|
+
// Box is polymorphic so we re-export it directly
|
|
21
|
+
import Box, { type BoxProps } from './atoms/Box/Box';
|
|
22
|
+
export { default as Box } from './atoms/Box/Box';
|
|
23
|
+
export type { BoxProps } from './atoms/Box/Box';
|
|
24
|
+
// Avatar is not polymorphic so we wrap it with forwardRef
|
|
25
|
+
import Avatar, { type AvatarProps } from './atoms/Avatar/Avatar';
|
|
26
|
+
export { default as Avatar } from './atoms/Avatar/Avatar';
|
|
27
|
+
export type { AvatarProps } from './atoms/Avatar/Avatar';
|
|
28
|
+
//Button is polymorphic so we re-export it directly
|
|
29
|
+
import Button from './atoms/Button/Button';
|
|
30
|
+
export { default as Button } from './atoms/Button/Button';
|
|
31
|
+
export type { GuiButtonProps as ButtonProps } from './atoms/Button/Button';
|
|
32
|
+
//Collapse is not polymorphic so we wrap it with forwardRef
|
|
33
|
+
import Collapse, { type CollapseProps } from './atoms/Collapse/Collapse';
|
|
34
|
+
export { default as Collapse } from './atoms/Collapse/Collapse';
|
|
35
|
+
export type { CollapseProps } from './atoms/Collapse/Collapse';
|
|
36
|
+
//IconButton is polymorphic so we re-export it directly
|
|
37
|
+
import IconButton, { type IconButtonProps } from './atoms/IconButton/IconButton';
|
|
38
|
+
export { default as IconButton } from './atoms/IconButton/IconButton';
|
|
39
|
+
export type { IconButtonProps } from './atoms/IconButton/IconButton';
|
|
40
|
+
//Divider is not polymorphic so we wrap it with forwardRef
|
|
41
|
+
import Divider, { type DividerProps } from './atoms/Divider/Divider';
|
|
42
|
+
export { default as Divider } from './atoms/Divider/Divider';
|
|
43
|
+
export type { DividerProps } from './atoms/Divider/Divider';
|
|
44
|
+
//Drawer is not polymorphic so we wrap it with forwardRef
|
|
45
|
+
import Drawer, { type DrawerProps } from './atoms/Drawer/Drawer';
|
|
46
|
+
export { default as Drawer } from './atoms/Drawer/Drawer';
|
|
47
|
+
export type { DrawerProps } from './atoms/Drawer/Drawer';
|
|
48
|
+
//Link is polymorphic so we re-export it directly
|
|
49
|
+
import Link from './atoms/Link/Link';
|
|
50
|
+
export { default as Link } from './atoms/Link/Link';
|
|
51
|
+
export type { LinkProps } from './atoms/Link/Link';
|
|
52
|
+
// List and related are not polymorphic so we wrap them with forwardRef
|
|
53
|
+
import List, { type ListProps } from './atoms/List/List';
|
|
54
|
+
export { default as List } from './atoms/List/List';
|
|
55
|
+
export type { ListProps } from './atoms/List/List';
|
|
56
|
+
import ListItem, { type ListItemProps } from './atoms/ListItem/ListItem';
|
|
57
|
+
export { default as ListItem } from './atoms/ListItem/ListItem';
|
|
58
|
+
export type { ListItemProps } from './atoms/ListItem/ListItem';
|
|
59
|
+
import ListItemButton, { type ListItemButtonProps } from './atoms/ListItemButton/ListItemButton';
|
|
60
|
+
export { default as ListItemButton } from './atoms/ListItemButton/ListItemButton';
|
|
61
|
+
export type { ListItemButtonProps } from './atoms/ListItemButton/ListItemButton';
|
|
62
|
+
import ListItemIcon, { type ListItemIconProps } from './atoms/ListItemIcon/ListItemIcon';
|
|
63
|
+
export { default as ListItemIcon } from './atoms/ListItemIcon/ListItemIcon';
|
|
64
|
+
export type { ListItemIconProps } from './atoms/ListItemIcon/ListItemIcon';
|
|
65
|
+
import ListItemText, { type ListItemTextProps } from './atoms/ListItemText/ListItemText';
|
|
66
|
+
export { default as ListItemText } from './atoms/ListItemText/ListItemText';
|
|
67
|
+
export type { ListItemTextProps } from './atoms/ListItemText/ListItemText';
|
|
68
|
+
//Menu and related are polymorphic so we re-export them directly
|
|
69
|
+
import Menu, { type MenuProps } from './atoms/Menu/Menu';
|
|
70
|
+
export { default as Menu } from './atoms/Menu/Menu';
|
|
71
|
+
export type { MenuProps } from './atoms/Menu/Menu';
|
|
72
|
+
import MenuItem, { type MenuItemProps } from './atoms/MenuItem/MenuItem';
|
|
73
|
+
export { default as MenuItem } from './atoms/MenuItem/MenuItem';
|
|
74
|
+
export type { MenuItemProps } from './atoms/MenuItem/MenuItem';
|
|
75
|
+
//Paper is not polymorphic so we wrap it with forwardRef
|
|
76
|
+
import Paper, { type PaperProps } from './atoms/Paper/Paper';
|
|
77
|
+
export { default as Paper } from './atoms/Paper/Paper';
|
|
78
|
+
export type { PaperProps } from './atoms/Paper/Paper';
|
|
79
|
+
//Stack is not polymorphic so we wrap it with forwardRef
|
|
80
|
+
import Stack, { type StackProps } from './atoms/Stack/Stack';
|
|
81
|
+
export { default as Stack } from './atoms/Stack/Stack';
|
|
82
|
+
export type { StackProps } from './atoms/Stack/Stack';
|
|
83
|
+
//Switch is not polymorphic so we wrap it with forwardRef
|
|
84
|
+
import Switch, { type SwitchProps } from './atoms/Switch/Switch';
|
|
85
|
+
export { default as Switch } from './atoms/Switch/Switch';
|
|
86
|
+
export type { SwitchProps } from './atoms/Switch/Switch';
|
|
87
|
+
//Toolbar is not polymorphic so we wrap it with forwardRef
|
|
88
|
+
import Toolbar from './atoms/Toolbar/Toolbar';
|
|
89
|
+
export { default as Toolbar } from './atoms/Toolbar/Toolbar';
|
|
90
|
+
export type { ToolbarProps } from './atoms/Toolbar/Toolbar';
|
|
91
|
+
//Tooltip is not polymorphic so we wrap it with forwardRef
|
|
92
|
+
import Tooltip from './atoms/Tooltip/Tooltip';
|
|
93
|
+
export { default as Tooltip } from './atoms/Tooltip/Tooltip';
|
|
94
|
+
export type { TooltipProps } from './atoms/Tooltip/Tooltip';
|
|
95
|
+
//Typography is polymorphic so we re-export it directly
|
|
96
|
+
import Typography, { type TypographyProps } from './atoms/Typography/Typography';
|
|
97
|
+
export { default as Typography } from './atoms/Typography/Typography';
|
|
98
|
+
export type { TypographyProps } from './atoms/Typography/Typography';
|
|
99
|
+
import Section from './atoms/Section/Section';
|
|
100
|
+
export { default as Section } from './atoms/Section/Section';
|
|
101
|
+
export type { SectionProps } from './atoms/Section/Section.types';
|
|
102
|
+
|
|
103
|
+
/* -------------------------------------------------------------------------------------------------
|
|
104
|
+
* GuiSx — re-export of MUI’s SxProps<Theme>
|
|
105
|
+
* -------------------------------------------------------------------------------------------------*/
|
|
106
|
+
|
|
107
|
+
/** Public sx type (kept for now to ease migration). */
|
|
108
|
+
export type GuiSx = SxProps<Theme>;
|
|
109
|
+
|
|
110
|
+
/* -------------------------------------------------------------------------------------------------
|
|
111
|
+
* Named bundle export (optional ergonomic import)
|
|
112
|
+
* -------------------------------------------------------------------------------------------------*/
|
|
113
|
+
export const Atoms = {
|
|
114
|
+
Box,
|
|
115
|
+
Typography,
|
|
116
|
+
Link,
|
|
117
|
+
Stack,
|
|
118
|
+
Divider,
|
|
119
|
+
AppBar,
|
|
120
|
+
Toolbar,
|
|
121
|
+
IconButton,
|
|
122
|
+
Menu,
|
|
123
|
+
MenuItem,
|
|
124
|
+
Drawer,
|
|
125
|
+
List,
|
|
126
|
+
ListItem,
|
|
127
|
+
ListItemButton,
|
|
128
|
+
ListItemIcon,
|
|
129
|
+
ListItemText,
|
|
130
|
+
Collapse,
|
|
131
|
+
Button,
|
|
132
|
+
Tooltip,
|
|
133
|
+
Switch,
|
|
134
|
+
Paper,
|
|
135
|
+
Avatar,
|
|
136
|
+
Section,
|
|
137
|
+
} as const;
|
|
138
|
+
export default Atoms;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import Dialog from './Dialog';
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
title: 'Molecules/Dialog/Dialog',
|
|
5
|
+
component: Dialog,
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export const Basic = () => (
|
|
9
|
+
<Dialog>
|
|
10
|
+
This is the basic Dialog with default padding.
|
|
11
|
+
</Dialog>
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
export const WithCustomPadding = () => (
|
|
15
|
+
<Dialog sx={{ p: 4, bgcolor: 'background.default' }}>
|
|
16
|
+
This Dialog has custom padding and background color.
|
|
17
|
+
</Dialog>
|
|
18
|
+
);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import MuiDialogContent, { DialogContentProps as MuiDialogContentProps } from '@mui/material/DialogContent';
|
|
2
|
+
export type DialogProps = MuiDialogContentProps;
|
|
3
|
+
export default function DialogContent(props: DialogProps) {
|
|
4
|
+
return <MuiDialogContent {...props} sx={{ p: 2, bgcolor: 'background.paper', ...props.sx }} />;
|
|
5
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { HeroSection } from './HeroSection';
|
|
4
|
+
|
|
5
|
+
const meta: Meta<typeof HeroSection> = {
|
|
6
|
+
title: 'Molecules/Display/HeroSection',
|
|
7
|
+
component: HeroSection,
|
|
8
|
+
tags: ['autodocs'],
|
|
9
|
+
decorators: [
|
|
10
|
+
(Story) => (
|
|
11
|
+
<div style={{ height: '100vh', overflow: 'hidden' }}>
|
|
12
|
+
<Story />
|
|
13
|
+
</div>
|
|
14
|
+
),
|
|
15
|
+
],
|
|
16
|
+
parameters: {
|
|
17
|
+
docs: {
|
|
18
|
+
description: {
|
|
19
|
+
component: `
|
|
20
|
+
**HeroSection** is a full-screen display component that supports image, GIF, or video backgrounds with overlay and blur options.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
## Features
|
|
24
|
+
- Background types: \`image\`, \`gif\`, \`video\`.
|
|
25
|
+
- Overlay color and opacity control.
|
|
26
|
+
- Theme-aware blur effects: \`light\`, \`medium\`, \`heavy\`, \`all\`.
|
|
27
|
+
- Fully responsive and fills viewport (100vh).
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
## Props
|
|
31
|
+
- \`backgroundSrc\`: Media URL (image, gif, or video).
|
|
32
|
+
- \`backgroundType\`: Type of background media ('image', 'gif', or 'video').
|
|
33
|
+
- \`overlayOpacity\`: Opacity of overlay (0–1).
|
|
34
|
+
- \`overlayColor\`: Color of overlay.
|
|
35
|
+
- \`blur\`: Theme-based blur intensity (\`light\`, \`medium\`, \`heavy\`, \`all\`).
|
|
36
|
+
`,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
export default meta;
|
|
42
|
+
type Story = StoryObj<typeof HeroSection>;
|
|
43
|
+
|
|
44
|
+
export const ImageBackground: Story = {
|
|
45
|
+
args: {
|
|
46
|
+
backgroundSrc: 'https://images.unsplash.com/photo-1507525428034-b723cf961d3e',
|
|
47
|
+
backgroundType: 'image',
|
|
48
|
+
blur: 'none',
|
|
49
|
+
children: (
|
|
50
|
+
<div style={{ color: 'white', fontSize: '2rem', fontWeight: 600, textAlign: 'center', marginTop: '40vh' }}>
|
|
51
|
+
Example: Image Background, Blur none
|
|
52
|
+
</div>
|
|
53
|
+
),
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export const GifBackground: Story = {
|
|
58
|
+
args: {
|
|
59
|
+
backgroundSrc: 'https://media.giphy.com/media/l0MYt5jPR6QX5pnqM/giphy.gif',
|
|
60
|
+
backgroundType: 'gif',
|
|
61
|
+
blur: 'light',
|
|
62
|
+
children: (
|
|
63
|
+
<div style={{ color: 'white', fontSize: '2rem', fontWeight: 600, textAlign: 'center', marginTop: '40vh' }}>
|
|
64
|
+
Example: GIF Background, Blur light
|
|
65
|
+
</div>
|
|
66
|
+
),
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export const VideoBackground: Story = {
|
|
71
|
+
args: {
|
|
72
|
+
backgroundSrc: 'https://www.neurons.me/media/neurons.mp4',
|
|
73
|
+
backgroundType: 'video',
|
|
74
|
+
blur: 'medium',
|
|
75
|
+
children: (
|
|
76
|
+
<div style={{ color: 'white', fontSize: '2rem', fontWeight: 600, textAlign: 'center', marginTop: '40vh' }}>
|
|
77
|
+
Example: Video Background, Blur medium
|
|
78
|
+
</div>
|
|
79
|
+
),
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export const HeavyExample: Story = {
|
|
84
|
+
args: {
|
|
85
|
+
backgroundSrc: 'https://images.unsplash.com/photo-1507525428034-b723cf961d3e',
|
|
86
|
+
backgroundType: 'image',
|
|
87
|
+
blur: 'heavy',
|
|
88
|
+
children: (
|
|
89
|
+
<div
|
|
90
|
+
style={{
|
|
91
|
+
color: 'white',
|
|
92
|
+
fontSize: '2rem',
|
|
93
|
+
fontWeight: 600,
|
|
94
|
+
textAlign: 'center',
|
|
95
|
+
marginTop: '40vh',
|
|
96
|
+
}}
|
|
97
|
+
>
|
|
98
|
+
Example: Heavy blur overlay (theme preset)
|
|
99
|
+
</div>
|
|
100
|
+
),
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
export const BlurVariants: Story = {
|
|
105
|
+
render: () => (
|
|
106
|
+
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: 16 }}>
|
|
107
|
+
{(['none', 'light', 'medium', 'heavy', 'all'] as const).map((b) => (
|
|
108
|
+
<HeroSection
|
|
109
|
+
key={b}
|
|
110
|
+
backgroundSrc="https://images.unsplash.com/photo-1507525428034-b723cf961d3e"
|
|
111
|
+
backgroundType="image"
|
|
112
|
+
blur={b}
|
|
113
|
+
children={
|
|
114
|
+
<div style={{ color: 'white', fontSize: '1.5rem', fontWeight: 600, textAlign: 'center', marginTop: '40vh' }}>
|
|
115
|
+
Blur = {b}
|
|
116
|
+
</div>
|
|
117
|
+
}
|
|
118
|
+
/>
|
|
119
|
+
))}
|
|
120
|
+
</div>
|
|
121
|
+
),
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
export const CustomColorExample: Story = {
|
|
125
|
+
args: {
|
|
126
|
+
backgroundSrc: 'https://images.unsplash.com/photo-1507525428034-b723cf961d3e',
|
|
127
|
+
backgroundType: 'image',
|
|
128
|
+
overlayColor: 'rgba(15, 21, 37, 0.89)', // Semi-transparent dark overlay
|
|
129
|
+
children: (
|
|
130
|
+
<div style={{
|
|
131
|
+
color: 'white',
|
|
132
|
+
fontSize: '2rem',
|
|
133
|
+
fontWeight: 600,
|
|
134
|
+
textAlign: 'center',
|
|
135
|
+
marginTop: '40vh',
|
|
136
|
+
}}>
|
|
137
|
+
Example: Custom Color Overlay
|
|
138
|
+
</div>
|
|
139
|
+
),
|
|
140
|
+
},
|
|
141
|
+
};
|