this.gui 1.3.41 → 1.3.42
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/package.json +3 -2
- package/src/GUI.tsx +46 -0
- package/src/QRouter/QRegistry.tsx +53 -0
- package/src/QRouter/QRouter.stories.tsx +31 -0
- package/src/QRouter/QRouter.tsx +57 -0
- package/src/gui/Theme/GuiProvider.tsx +111 -0
- package/src/gui/Theme/Icon/Icon.resolver.tsx +29 -0
- package/src/gui/Theme/Icon/Icon.tsx +43 -0
- package/src/gui/Theme/Layout/Content/Content.resolver.tsx +0 -0
- package/src/gui/Theme/Layout/Content/Content.stories.tsx +88 -0
- package/src/gui/Theme/Layout/Content/Content.tsx +53 -0
- package/src/gui/Theme/Layout/Content/Content.types.tsx +40 -0
- package/src/gui/Theme/Layout/Footer/Footer.resolver.tsx +45 -0
- package/src/gui/Theme/Layout/Footer/Footer.stories.tsx +205 -0
- package/src/gui/Theme/Layout/Footer/Footer.tsx +337 -0
- package/src/gui/Theme/Layout/Footer/Footer.types.ts +40 -0
- package/src/gui/Theme/Layout/Layout/Layout.resolver.tsx +37 -0
- package/src/gui/Theme/Layout/Layout/Layout.stories.tsx +289 -0
- package/src/gui/Theme/Layout/Layout/Layout.tsx +117 -0
- package/src/gui/Theme/Layout/Layout/Layout.types.ts +57 -0
- package/src/gui/Theme/Layout/Layout/useLayoutBreakpoints.ts +9 -0
- package/src/gui/Theme/Layout/Namespace/Namespace.stories.tsx +105 -0
- package/src/gui/Theme/Layout/Namespace/Namespace.tsx +26 -0
- package/src/gui/Theme/Layout/Sidebars/LeftSidebar/LeftSidebar.resolver.tsx +87 -0
- package/src/gui/Theme/Layout/Sidebars/LeftSidebar/LeftSidebar.stories.tsx +199 -0
- package/src/gui/Theme/Layout/Sidebars/LeftSidebar/LeftSidebar.tsx +311 -0
- package/src/gui/Theme/Layout/Sidebars/LeftSidebar/LeftSidebar.types.ts +41 -0
- package/src/gui/Theme/Layout/Sidebars/LeftSidebar/SidebarToggleButton.tsx +53 -0
- package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarAction/LeftSidebarAction.resolver.tsx +19 -0
- package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarAction/LeftSidebarAction.tsx +107 -0
- package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarLink/LeftSidebarLink.resolver.tsx +0 -0
- package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarLink/LeftSidebarLink.tsx +134 -0
- package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarLink/LeftSidebarLink.types.ts +15 -0
- package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarMenu/LeftSidebarMenu.tsx +142 -0
- package/src/gui/Theme/Layout/Sidebars/LeftSidebar/components/LeftSidebarToggleButton/LeftSidebarToggleButton.tsx +23 -0
- package/src/gui/Theme/Layout/Sidebars/RightSidebar/RightSidebar.resolver.tsx +35 -0
- package/src/gui/Theme/Layout/Sidebars/RightSidebar/RightSidebar.stories.tsx +239 -0
- package/src/gui/Theme/Layout/Sidebars/RightSidebar/RightSidebar.tsx +319 -0
- package/src/gui/Theme/Layout/Sidebars/RightSidebar/RightSidebar.types.ts +17 -0
- package/src/gui/Theme/Layout/Sidebars/RightSidebar/components/RightSidebarAction/RightSidebarAction.tsx +102 -0
- package/src/gui/Theme/Layout/Sidebars/RightSidebar/components/RightSidebarLink/RightSidebarLink.tsx +132 -0
- package/src/gui/Theme/Layout/Sidebars/RightSidebar/components/RightSidebarMenu/RightSidebarMenu.tsx +140 -0
- package/src/gui/Theme/Layout/Sidebars/RightSidebar/components/RightSidebarToggleButton/RightSidebarToggleButton.tsx +22 -0
- package/src/gui/Theme/Layout/StickyOptions/StickyOptionsTop.stories.tsx +469 -0
- package/src/gui/Theme/Layout/StickyOptions/StickyOptionsTop.tsx +489 -0
- package/src/gui/Theme/Layout/TopBar/TopBar.resolver.tsx +86 -0
- package/src/gui/Theme/Layout/TopBar/TopBar.stories.tsx +350 -0
- package/src/gui/Theme/Layout/TopBar/TopBar.tsx +292 -0
- package/src/gui/Theme/Layout/TopBar/TopBar.types.ts +39 -0
- package/src/gui/Theme/Layout/TopBar/components/TopBarAction/TopBarAction.stories.tsx +83 -0
- package/src/gui/Theme/Layout/TopBar/components/TopBarAction/TopBarAction.tsx +18 -0
- package/src/gui/Theme/Layout/TopBar/components/TopBarAction/TopBarAction.types.ts +4 -0
- package/src/gui/Theme/Layout/TopBar/components/TopBarLink/TopBarLink.stories.tsx +189 -0
- package/src/gui/Theme/Layout/TopBar/components/TopBarLink/TopBarLink.tsx +30 -0
- package/src/gui/Theme/Layout/TopBar/components/TopBarLink/TopBarLink.types.ts +9 -0
- package/src/gui/Theme/Layout/TopBar/components/TopBarMenu/TopBarMenu.resolver.tsx +14 -0
- package/src/gui/Theme/Layout/TopBar/components/TopBarMenu/TopBarMenu.stories.tsx +56 -0
- package/src/gui/Theme/Layout/TopBar/components/TopBarMenu/TopBarMenu.tsx +123 -0
- package/src/gui/Theme/Layout/TopBar/components/TopBarMenu/TopBarMenu.types.ts +44 -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 +272 -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/components/atoms/AppBar/AppBar.resolver.tsx +46 -0
- package/src/gui/components/atoms/AppBar/AppBar.stories.tsx +251 -0
- package/src/gui/components/atoms/AppBar/AppBar.tsx +107 -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/Table/Body/TableBody.tsx +7 -0
- package/src/gui/components/atoms/Table/Cell/TableCell.tsx +18 -0
- package/src/gui/components/atoms/Table/Head/TableHead.tsx +9 -0
- package/src/gui/components/atoms/Table/Row/TableRow.tsx +20 -0
- package/src/gui/components/atoms/Table/Table.resolver.tsx +77 -0
- package/src/gui/components/atoms/Table/Table.stories.tsx +173 -0
- package/src/gui/components/atoms/Table/Table.tsx +20 -0
- package/src/gui/components/atoms/TextField/TextField.stories.tsx +25 -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/Window/Nodes/node.ts +0 -0
- package/src/gui/components/atoms/Window/code/block/node.tsx +0 -0
- package/src/gui/components/atoms/Window/code/hugging.face.api.ts +11 -0
- package/src/gui/components/atoms/Window/connectors/index.ts +19 -0
- package/src/gui/components/atoms/Window/window.stories.tsx +20 -0
- package/src/gui/components/atoms/Window/window.tsx +636 -0
- package/src/gui/components/atoms/atoms.tsx +151 -0
- package/src/gui/components/atoms/index.ts +2 -0
- package/src/gui/components/generics/Cards/Gridme.jsx +52 -0
- package/src/gui/components/generics/Cards/LilBox.jsx +65 -0
- package/src/gui/components/generics/Cards/ModuleCard.jsx +106 -0
- package/src/gui/components/generics/Chats/FullChatBot.jsx +223 -0
- package/src/gui/components/generics/Code/CodeBlock.jsx +33 -0
- package/src/gui/components/generics/EmojiCursor/EmojiCursor.stories.tsx +153 -0
- package/src/gui/components/generics/EmojiCursor/EmojiCursor.tsx +23 -0
- package/src/gui/components/generics/Feedback/Callout.jsx +92 -0
- package/src/gui/components/generics/Layout/GridX.jsx +29 -0
- package/src/gui/components/generics/Layout/Hero2.jsx +132 -0
- package/src/gui/components/generics/Layout/PageContainer.jsx +29 -0
- package/src/gui/components/generics/Layout/PageDivider.jsx +20 -0
- package/src/gui/components/generics/Layout/Section.jsx +43 -0
- package/src/gui/components/generics/Layout/SectionHeader.jsx +21 -0
- package/src/gui/components/generics/Media/Img.jsx +58 -0
- package/src/gui/components/generics/Media/VideoEmbed.jsx +51 -0
- package/src/gui/components/generics/Organization/TableOfContents.jsx +51 -0
- package/src/gui/components/generics/Organization/Tabs.jsx +45 -0
- package/src/gui/components/generics/Text/TextList.jsx +41 -0
- package/src/gui/components/generics/Text/TextParagraph.jsx +28 -0
- package/src/gui/components/generics/Text/TextQuote.jsx +23 -0
- package/src/gui/components/generics/Text/TextTitle.jsx +44 -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/Hero/Hero.stories.tsx +140 -0
- package/src/gui/components/molecules/Hero/Hero.tsx +152 -0
- package/src/gui/components/molecules/Hero/Hero.types.tsx +18 -0
- package/src/gui/components/molecules/Modal/Modal.resolver.tsx +38 -0
- package/src/gui/components/molecules/Modal/Modal.stories.tsx +82 -0
- package/src/gui/components/molecules/Modal/Modal.tsx +110 -0
- package/src/gui/components/molecules/Modal/Modal.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/molecules/molecules.ts +49 -0
- package/src/gui/components/organisms/Blockchain/Blocks/BlocksTable.tsx +119 -0
- package/src/gui/components/organisms/Blockchain/Usernames/Identities.stories.tsx +20 -0
- package/src/gui/components/organisms/Blockchain/Usernames/QR.tsx +566 -0
- package/src/gui/components/organisms/Blockchain/Usernames/Usernames.tsx +448 -0
- package/src/gui/components/organisms/Blockchain/Usernames/identities.tsx +710 -0
- package/src/gui/components/organisms/Blockchain/blockchain.stories.tsx +17 -0
- package/src/gui/components/organisms/Blockchain/blockchain.tsx +368 -0
- package/src/gui/components/organisms/Blockchain/scripts/connection.ts +82 -0
- package/src/gui/components/organisms/Blockchain/scripts/match_face.ts +143 -0
- package/src/gui/components/organisms/HighLighter/HighLighter.stories.tsx +168 -0
- package/src/gui/components/organisms/HighLighter/HighLighter.tsx +420 -0
- package/src/gui/components/organisms/HighLighter/HighLightsDrawer.tsx +197 -0
- package/src/gui/components/organisms/IdentityNoise/FaceRecognition/FaceRecognition.stories.tsx +312 -0
- package/src/gui/components/organisms/IdentityNoise/FaceRecognition/FaceRecognition.tsx +765 -0
- package/src/gui/components/organisms/IdentityNoise/FaceRecognition/modules/useFaceCameraPermission.ts +70 -0
- package/src/gui/components/organisms/IdentityNoise/FaceRecognition/modules/useFaceLandmarker.ts +106 -0
- package/src/gui/components/organisms/IdentityNoise/FaceRecognition/modules/useFaceOverlay.ts +489 -0
- package/src/gui/components/organisms/IdentityNoise/FaceRecognition/modules/useFaceTemplate.ts +32 -0
- package/src/gui/components/organisms/IdentityNoise/FaceRecognition/modules/useFaceTemplateBurst.ts +178 -0
- package/src/gui/components/organisms/IdentityNoise/FaceRecognition/modules/verifyTemplate.ts +136 -0
- package/src/gui/components/organisms/IdentityNoise/IdentityNoise.tsx +403 -0
- package/src/gui/components/organisms/IdentityNoise/IndentityNoise.stories.tsx +15 -0
- package/src/gui/components/organisms/IdentityNoise/Noise/Noise.stories.tsx +206 -0
- package/src/gui/components/organisms/IdentityNoise/Noise/Noise.tsx +394 -0
- package/src/gui/components/organisms/IdentityNoise/Triad/QR.tsx +566 -0
- package/src/gui/components/organisms/IdentityNoise/Triad/Tiad.stories.tsx +6 -0
- package/src/gui/components/organisms/IdentityNoise/Triad/Triad.tsx +917 -0
- package/src/gui/components/organisms/IdentityNoise/Triad/handleCleak.ts +0 -0
- package/src/gui/components/organisms/IdentityNoise/Triad/identity.ts +31 -0
- package/src/gui/components/organisms/IdentityNoise/Triad/me/fundamentals/vectors/vectors.tsx +252 -0
- package/src/gui/components/organisms/IdentityNoise/Triad/me/me.stories.tsx +314 -0
- package/src/gui/components/organisms/IdentityNoise/Triad/me/me.tsx +0 -0
- package/src/gui/components/organisms/organisms.ts +15 -0
- package/src/gui/contexts/InsetsContext.tsx +40 -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/registry/GuiRegistry.ts +19 -0
- package/src/gui/registry/factory.ts +12 -0
- package/src/gui/registry/index.ts +3 -0
- package/src/gui/registry/types.ts +6 -0
- package/src/gui/utils/nodeID.ts +11 -0
- package/src/registry/GuiRegistry.ts +19 -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/stories/assets/this.GUI.png +0 -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,223 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { Drawer, Box, Button, Typography } from '@/gui/components/atoms';
|
|
4
|
+
// ======================= Meta =======================
|
|
5
|
+
const meta: Meta<typeof Drawer> = {
|
|
6
|
+
title: 'Atoms/Containers/Drawer',
|
|
7
|
+
component: Drawer,
|
|
8
|
+
tags: ['autodocs'],
|
|
9
|
+
decorators: [
|
|
10
|
+
(Story) => (
|
|
11
|
+
<div style={{ padding: 16, minHeight: 320 }}>
|
|
12
|
+
<Story />
|
|
13
|
+
</div>
|
|
14
|
+
),
|
|
15
|
+
],
|
|
16
|
+
parameters: {
|
|
17
|
+
docs: {
|
|
18
|
+
description: {
|
|
19
|
+
component: `
|
|
20
|
+
The **Drawer** primitive is a thin wrapper over MUI's \`MuiDrawer\`. It preserves all of MUI's props and behavior, while keeping the import surface stable via \`@/gui/primitives\`.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
## Features
|
|
24
|
+
- Variants: \`temporary\`, \`persistent\`, \`permanent\`.
|
|
25
|
+
- Anchors: \`left\`, \`right\`, \`top\`, \`bottom\`.
|
|
26
|
+
- Works with This.GUI theme (via \`GuiProvider\`).
|
|
27
|
+
- Accepts \`sx\` and \`PaperProps\` for styling the surface.
|
|
28
|
+
|
|
29
|
+
> Note: For \`temporary\` drawers, you control visibility with the \`open\` prop and \`onClose\`.
|
|
30
|
+
> For \`permanent\` drawers, \`open\` is ignored by MUI; the drawer is always visible.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
## Basic usage
|
|
34
|
+
~~~tsx
|
|
35
|
+
import { Drawer } from '@/gui/primitives';
|
|
36
|
+
|
|
37
|
+
<Drawer anchor="left" variant="temporary" open={open} onClose={() => setOpen(false)}>
|
|
38
|
+
<div style={{ width: 260, padding: 16 }}>Content</div>
|
|
39
|
+
</Drawer>
|
|
40
|
+
~~~
|
|
41
|
+
|
|
42
|
+
## Permanent sidebar
|
|
43
|
+
~~~tsx
|
|
44
|
+
<Drawer anchor="left" variant="permanent" PaperProps={{ sx: { width: 260 } }}>
|
|
45
|
+
<div style={{ width: 260, padding: 16 }}>Navigation</div>
|
|
46
|
+
</Drawer>
|
|
47
|
+
~~~
|
|
48
|
+
|
|
49
|
+
## Declarative JSON / Config
|
|
50
|
+
~~~json
|
|
51
|
+
{
|
|
52
|
+
"type": "Drawer",
|
|
53
|
+
"props": {
|
|
54
|
+
"variant": "temporary",
|
|
55
|
+
"anchor": "right",
|
|
56
|
+
"PaperProps": { "sx": { "width": 300 } },
|
|
57
|
+
"children": "<YourMenu />"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
~~~
|
|
61
|
+
|
|
62
|
+
When used via your registry/resolver, the object above is resolved into a live Drawer with the provided props.
|
|
63
|
+
`,
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
argTypes: {
|
|
68
|
+
variant: {
|
|
69
|
+
control: { type: 'radio' },
|
|
70
|
+
options: ['temporary', 'persistent', 'permanent'],
|
|
71
|
+
},
|
|
72
|
+
anchor: {
|
|
73
|
+
control: { type: 'radio' },
|
|
74
|
+
options: ['left', 'right', 'top', 'bottom'],
|
|
75
|
+
},
|
|
76
|
+
open: {
|
|
77
|
+
control: { type: 'boolean' },
|
|
78
|
+
description: 'Only relevant for temporary/persistent variants.',
|
|
79
|
+
},
|
|
80
|
+
// Not useful as a control in SB; better shown in examples
|
|
81
|
+
container: { table: { disable: true } },
|
|
82
|
+
},
|
|
83
|
+
args: {
|
|
84
|
+
variant: 'temporary',
|
|
85
|
+
anchor: 'left',
|
|
86
|
+
open: false,
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
export default meta;
|
|
90
|
+
|
|
91
|
+
type Story = StoryObj<typeof Drawer>;
|
|
92
|
+
|
|
93
|
+
// ======================= Helpers =======================
|
|
94
|
+
const DemoList = ({ label = 'Menu' }: { label?: string }) => (
|
|
95
|
+
<Box sx={{ width: 260, p: 2 }}>
|
|
96
|
+
<Typography variant="subtitle1" sx={{ mb: 1.5 }}>{label}</Typography>
|
|
97
|
+
<ul style={{ margin: 0, paddingLeft: 16, lineHeight: 1.9 }}>
|
|
98
|
+
<li><a href="#">Item one</a></li>
|
|
99
|
+
<li><a href="#">Item two</a></li>
|
|
100
|
+
<li><a href="#">Item three</a></li>
|
|
101
|
+
</ul>
|
|
102
|
+
</Box>
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
// ======================= Stories =======================
|
|
106
|
+
|
|
107
|
+
export const Playground: Story = {
|
|
108
|
+
render: (args) => (
|
|
109
|
+
<>
|
|
110
|
+
<Typography variant="body1" sx={{ mb: 1 }}>
|
|
111
|
+
Toggle <strong>open</strong> in controls (temporary/persistent).
|
|
112
|
+
</Typography>
|
|
113
|
+
<Drawer {...args}>
|
|
114
|
+
<DemoList />
|
|
115
|
+
</Drawer>
|
|
116
|
+
</>
|
|
117
|
+
),
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
export const TemporaryWithToggle: Story = {
|
|
121
|
+
name: 'Temporary (with toggle button)',
|
|
122
|
+
render: () => {
|
|
123
|
+
const [open, setOpen] = React.useState(false);
|
|
124
|
+
return (
|
|
125
|
+
<>
|
|
126
|
+
<Button variant="contained" color="primary" onClick={() => setOpen(true)}>
|
|
127
|
+
Open drawer
|
|
128
|
+
</Button>
|
|
129
|
+
<Drawer
|
|
130
|
+
anchor="left"
|
|
131
|
+
variant="temporary"
|
|
132
|
+
open={open}
|
|
133
|
+
onClose={() => setOpen(false)}
|
|
134
|
+
ModalProps={{ keepMounted: true }}
|
|
135
|
+
>
|
|
136
|
+
<DemoList label="Temporary drawer" />
|
|
137
|
+
</Drawer>
|
|
138
|
+
</>
|
|
139
|
+
);
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
export const PermanentLeft: Story = {
|
|
144
|
+
name: 'Permanent (left)',
|
|
145
|
+
render: () => (
|
|
146
|
+
<div style={{ display: 'flex', minHeight: 320 }}>
|
|
147
|
+
<Drawer
|
|
148
|
+
anchor="left"
|
|
149
|
+
variant="permanent"
|
|
150
|
+
PaperProps={{ sx: { width: 240, position: 'relative' } }}
|
|
151
|
+
>
|
|
152
|
+
<DemoList label="Permanent left" />
|
|
153
|
+
</Drawer>
|
|
154
|
+
<Box sx={{ flex: 1, p: 2 }}>
|
|
155
|
+
<Typography variant="h6" sx={{ mb: 1 }}>Content area</Typography>
|
|
156
|
+
<Typography variant="body2">
|
|
157
|
+
The permanent drawer is always visible and does not use the <code>open</code> prop.
|
|
158
|
+
</Typography>
|
|
159
|
+
</Box>
|
|
160
|
+
</div>
|
|
161
|
+
),
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
export const RightAnchorTemporary: Story = {
|
|
165
|
+
name: 'Temporary (right anchor)',
|
|
166
|
+
render: () => {
|
|
167
|
+
const [open, setOpen] = React.useState(false);
|
|
168
|
+
return (
|
|
169
|
+
<>
|
|
170
|
+
<Button variant="outlined" onClick={() => setOpen(true)}>
|
|
171
|
+
Open right drawer
|
|
172
|
+
</Button>
|
|
173
|
+
<Drawer
|
|
174
|
+
anchor="right"
|
|
175
|
+
variant="temporary"
|
|
176
|
+
open={open}
|
|
177
|
+
onClose={() => setOpen(false)}
|
|
178
|
+
PaperProps={{ sx: { width: 300 } }}
|
|
179
|
+
>
|
|
180
|
+
<DemoList label="Right side" />
|
|
181
|
+
</Drawer>
|
|
182
|
+
</>
|
|
183
|
+
);
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
export const TopAndBottom: Story = {
|
|
188
|
+
name: 'Top & bottom anchors',
|
|
189
|
+
render: () => {
|
|
190
|
+
const [openTop, setOpenTop] = React.useState(false);
|
|
191
|
+
const [openBottom, setOpenBottom] = React.useState(false);
|
|
192
|
+
return (
|
|
193
|
+
<>
|
|
194
|
+
<div style={{ display: 'flex', gap: 12, marginBottom: 12 }}>
|
|
195
|
+
<Button variant="outlined" onClick={() => setOpenTop(true)}>Open top</Button>
|
|
196
|
+
<Button variant="outlined" onClick={() => setOpenBottom(true)}>Open bottom</Button>
|
|
197
|
+
</div>
|
|
198
|
+
<Drawer
|
|
199
|
+
anchor="top"
|
|
200
|
+
variant="temporary"
|
|
201
|
+
open={openTop}
|
|
202
|
+
onClose={() => setOpenTop(false)}
|
|
203
|
+
PaperProps={{ sx: { height: 200 } }}
|
|
204
|
+
>
|
|
205
|
+
<Box sx={{ p: 2 }}>
|
|
206
|
+
<Typography variant="subtitle1">Top drawer</Typography>
|
|
207
|
+
</Box>
|
|
208
|
+
</Drawer>
|
|
209
|
+
<Drawer
|
|
210
|
+
anchor="bottom"
|
|
211
|
+
variant="temporary"
|
|
212
|
+
open={openBottom}
|
|
213
|
+
onClose={() => setOpenBottom(false)}
|
|
214
|
+
PaperProps={{ sx: { height: 200 } }}
|
|
215
|
+
>
|
|
216
|
+
<Box sx={{ p: 2 }}>
|
|
217
|
+
<Typography variant="subtitle1">Bottom drawer</Typography>
|
|
218
|
+
</Box>
|
|
219
|
+
</Drawer>
|
|
220
|
+
</>
|
|
221
|
+
);
|
|
222
|
+
},
|
|
223
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import MuiDrawer from '@mui/material/Drawer';
|
|
3
|
+
export type DrawerProps = React.ComponentProps<typeof MuiDrawer>;
|
|
4
|
+
/**
|
|
5
|
+
* `Drawer` is a wrapper around MUI's `Drawer` component.
|
|
6
|
+
*
|
|
7
|
+
* It provides a consistent drawer interface for side navigation or temporary content containers.
|
|
8
|
+
* All props from MUI's `Drawer` are forwarded via `DrawerProps`, ensuring type safety and
|
|
9
|
+
* autocomplete support.
|
|
10
|
+
*
|
|
11
|
+
* This component also uses `React.forwardRef` to support ref forwarding for advanced use cases
|
|
12
|
+
* like controlling the drawer programmatically or integrating with custom animations.
|
|
13
|
+
*
|
|
14
|
+
* Example usage:
|
|
15
|
+
* ```tsx
|
|
16
|
+
* <Drawer anchor="left" open={open} onClose={handleClose}>
|
|
17
|
+
* <List>...</List>
|
|
18
|
+
* </Drawer>
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export const Drawer = React.forwardRef<HTMLDivElement, DrawerProps>(function Drawer(props, ref) {
|
|
22
|
+
return <MuiDrawer ref={ref} {...props} />;
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
export default Drawer;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { RegistryEntry, ResolveCtx } from '@/gui/registry/types';
|
|
2
|
+
import { ensureNodeId } from '@/gui/utils/nodeID';
|
|
3
|
+
import Grid from './Grid';
|
|
4
|
+
import type { GridResolverSpec } from './Grid.types';
|
|
5
|
+
|
|
6
|
+
const GridResolver: RegistryEntry = {
|
|
7
|
+
type: 'Grid',
|
|
8
|
+
resolve(spec: GridResolverSpec, _ctx?: ResolveCtx) {
|
|
9
|
+
const p = spec.props ?? {};
|
|
10
|
+
const {
|
|
11
|
+
children,
|
|
12
|
+
id,
|
|
13
|
+
className,
|
|
14
|
+
sx,
|
|
15
|
+
...rest
|
|
16
|
+
} = p;
|
|
17
|
+
|
|
18
|
+
const gridId = ensureNodeId('grid', id);
|
|
19
|
+
|
|
20
|
+
return (
|
|
21
|
+
<Grid
|
|
22
|
+
id={gridId}
|
|
23
|
+
className={className}
|
|
24
|
+
sx={sx}
|
|
25
|
+
{...rest}
|
|
26
|
+
>
|
|
27
|
+
{children}
|
|
28
|
+
</Grid>
|
|
29
|
+
);
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export default GridResolver;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import Grid from './Grid';
|
|
3
|
+
import Box from '@/gui/atoms/Box/Box';
|
|
4
|
+
|
|
5
|
+
// ======================= Meta =======================
|
|
6
|
+
const meta: Meta<typeof Grid> = {
|
|
7
|
+
title: 'Atoms/Containers/Grid',
|
|
8
|
+
component: Grid,
|
|
9
|
+
tags: ['autodocs'],
|
|
10
|
+
decorators: [
|
|
11
|
+
(Story) => (
|
|
12
|
+
<div style={{ padding: 0, minHeight: 240 }}>
|
|
13
|
+
<Story />
|
|
14
|
+
</div>
|
|
15
|
+
),
|
|
16
|
+
],
|
|
17
|
+
parameters: {
|
|
18
|
+
docs: {
|
|
19
|
+
description: {
|
|
20
|
+
component: `
|
|
21
|
+
The **Grid** atom is a thin wrapper around MUI's \`Grid\` component. It keeps the original API and polymorphism but integrates with **This.GUI** tokens and allows declarative usage via the resolver.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
## Features
|
|
25
|
+
- Supports all MUI Grid props like \`container\`, \`item\`, \`spacing\`, \`xs\`, \`sm\`, \`md\`, etc.
|
|
26
|
+
- Fully themeable via **This.GUI** tokens and \`sx\`.
|
|
27
|
+
- Works both as a container and as an item.
|
|
28
|
+
- Can be described declaratively via JSON specs for resolvers.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
## Key Props
|
|
32
|
+
- \`container?: boolean\` — defines a grid container.
|
|
33
|
+
- \`item?: boolean\` — defines a grid item.
|
|
34
|
+
- \`spacing?: number | object\` — gap between items (when container).
|
|
35
|
+
- \`xs | sm | md | lg | xl?: number\` — responsive column sizes.
|
|
36
|
+
- \`sx?: object\` — granular styling.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
## Basic usage (React)
|
|
40
|
+
~~~tsx
|
|
41
|
+
import { Grid, Box } from '@/gui/atoms';
|
|
42
|
+
|
|
43
|
+
<Grid container spacing={2}>
|
|
44
|
+
<Grid item xs={6}>
|
|
45
|
+
<Box sx={{ backgroundColor: 'primary.main', p: 2, color: '#fff' }}>Item 1</Box>
|
|
46
|
+
</Grid>
|
|
47
|
+
<Grid item xs={6}>
|
|
48
|
+
<Box sx={{ backgroundColor: 'secondary.main', p: 2, color: '#fff' }}>Item 2</Box>
|
|
49
|
+
</Grid>
|
|
50
|
+
</Grid>
|
|
51
|
+
~~~
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
## Declarative JSON / Config usage
|
|
55
|
+
This GUI's **resolver** lets you describe a Grid via a config object:
|
|
56
|
+
|
|
57
|
+
~~~json
|
|
58
|
+
{
|
|
59
|
+
"type": "Grid",
|
|
60
|
+
"props": {
|
|
61
|
+
"container": true,
|
|
62
|
+
"spacing": 2,
|
|
63
|
+
"children": [
|
|
64
|
+
{
|
|
65
|
+
"type": "Grid",
|
|
66
|
+
"props": {
|
|
67
|
+
"item": true,
|
|
68
|
+
"xs": 6,
|
|
69
|
+
"children": {
|
|
70
|
+
"type": "Box",
|
|
71
|
+
"props": {
|
|
72
|
+
"sx": { "backgroundColor": "primary.main", "p": 2, "color": "#fff" },
|
|
73
|
+
"children": "Item 1"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"type": "Grid",
|
|
80
|
+
"props": {
|
|
81
|
+
"item": true,
|
|
82
|
+
"xs": 6,
|
|
83
|
+
"children": {
|
|
84
|
+
"type": "Box",
|
|
85
|
+
"props": {
|
|
86
|
+
"sx": { "backgroundColor": "secondary.main", "p": 2, "color": "#fff" },
|
|
87
|
+
"children": "Item 2"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
~~~
|
|
96
|
+
|
|
97
|
+
> The resolver maps this spec to real React elements, preserving polymorphism and \`sx\` styling.
|
|
98
|
+
`,
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
export default meta;
|
|
104
|
+
|
|
105
|
+
type Story = StoryObj<typeof Grid>;
|
|
106
|
+
|
|
107
|
+
// ======================= Stories =======================
|
|
108
|
+
export const Playground: Story = {
|
|
109
|
+
render: (args) => (
|
|
110
|
+
<Grid {...args} container spacing={2}>
|
|
111
|
+
<Grid item xs={6}>
|
|
112
|
+
<Box sx={{ backgroundColor: 'primary.main', p: 2, color: '#fff' }}>Item 1</Box>
|
|
113
|
+
</Grid>
|
|
114
|
+
<Grid item xs={6}>
|
|
115
|
+
<Box sx={{ backgroundColor: 'secondary.main', p: 2, color: '#fff' }}>Item 2</Box>
|
|
116
|
+
</Grid>
|
|
117
|
+
</Grid>
|
|
118
|
+
),
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export const ResponsiveGrid: Story = {
|
|
122
|
+
render: (args) => (
|
|
123
|
+
<Grid {...args} container spacing={2}>
|
|
124
|
+
<Grid item xs={12} sm={6} md={4}>
|
|
125
|
+
<Box sx={{ backgroundColor: 'info.main', p: 2, color: '#fff' }}>xs=12 sm=6 md=4</Box>
|
|
126
|
+
</Grid>
|
|
127
|
+
<Grid item xs={12} sm={6} md={4}>
|
|
128
|
+
<Box sx={{ backgroundColor: 'success.main', p: 2, color: '#fff' }}>xs=12 sm=6 md=4</Box>
|
|
129
|
+
</Grid>
|
|
130
|
+
<Grid item xs={12} sm={12} md={4}>
|
|
131
|
+
<Box sx={{ backgroundColor: 'warning.main', p: 2, color: '#fff' }}>xs=12 sm=12 md=4</Box>
|
|
132
|
+
</Grid>
|
|
133
|
+
</Grid>
|
|
134
|
+
),
|
|
135
|
+
name: 'Responsive Grid Layout',
|
|
136
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// File: Grid.tsx
|
|
2
|
+
import MuiGrid from '@mui/material/Grid';
|
|
3
|
+
import type { GridProps } from './Grid.types';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* This.GUI — Grid
|
|
7
|
+
* Wrapper around MUI’s Grid that preserves props & typing.
|
|
8
|
+
*
|
|
9
|
+
* Purpose:
|
|
10
|
+
* - Consistent namespace integration (This.GUI).
|
|
11
|
+
* - Supports full MUI Grid props including `sx`, `container`, `item`, etc.
|
|
12
|
+
*/
|
|
13
|
+
const Grid = MuiGrid;
|
|
14
|
+
(Grid as any).displayName = 'Gui.Grid';
|
|
15
|
+
export default Grid;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import MuiGrid from '@mui/material/Grid';
|
|
2
|
+
import type { GridProps as MuiGridProps } from '@mui/material/Grid';
|
|
3
|
+
export type GridProps = React.ComponentProps<typeof MuiGrid> & MuiGridProps;
|
|
4
|
+
|
|
5
|
+
export type GridResolverSpec = {
|
|
6
|
+
type: 'Grid';
|
|
7
|
+
props?: GridProps; // or GridProps if you want to alias it
|
|
8
|
+
};
|
|
9
|
+
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
// src/gui/atoms/IconButton/IconButton.resolver.tsx
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import IconButton from './IconButton';
|
|
4
|
+
import Icon from '@/gui/Theme/Icon/Icon';
|
|
5
|
+
import Link from '@/gui/atoms/Link/Link';
|
|
6
|
+
import type { RegistryEntry, ResolveCtx } from '@/gui/registry/types';
|
|
7
|
+
import type { SxProps, Theme } from '@mui/material/styles';
|
|
8
|
+
import { ensureNodeId } from '@/gui/utils/nodeID';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Declarative resolver for IconButton
|
|
12
|
+
* -----------------------------------
|
|
13
|
+
* - Forwards all MUI IconButton props faithfully.
|
|
14
|
+
* - Supports polymorphism via `component` / `as`.
|
|
15
|
+
* - Adds sugar:
|
|
16
|
+
* • `icon` string → rendered through our Icon registry (mui:/lucide: tokens), normalized to lowercase.
|
|
17
|
+
* • Routing helpers: if `to` w/o `component` → uses This.GUI `Link`; if `href`/`external` → uses anchor with safe target/rel.
|
|
18
|
+
* - Provides granular styling via `sx` (root) and optional `iconSx`.
|
|
19
|
+
*
|
|
20
|
+
* A11y note: when rendering only an icon (no visible text), pass an `aria-label`.
|
|
21
|
+
*/
|
|
22
|
+
export type IconButtonSpec = {
|
|
23
|
+
type: 'IconButton';
|
|
24
|
+
props?: {
|
|
25
|
+
children?: React.ReactNode;
|
|
26
|
+
|
|
27
|
+
// Polymorphism
|
|
28
|
+
component?: any;
|
|
29
|
+
as?: any; // alias for component
|
|
30
|
+
|
|
31
|
+
// Routing sugar
|
|
32
|
+
to?: string;
|
|
33
|
+
href?: string;
|
|
34
|
+
external?: boolean;
|
|
35
|
+
target?: React.HTMLAttributeAnchorTarget;
|
|
36
|
+
rel?: string;
|
|
37
|
+
|
|
38
|
+
// Sugar: icon may be a token or a node
|
|
39
|
+
icon?: string | React.ReactNode;
|
|
40
|
+
iconProps?: Record<string, any>;
|
|
41
|
+
|
|
42
|
+
// MUI props passthrough (subset; others go via index signature)
|
|
43
|
+
color?:
|
|
44
|
+
| 'inherit'
|
|
45
|
+
| 'default'
|
|
46
|
+
| 'primary'
|
|
47
|
+
| 'secondary'
|
|
48
|
+
| 'success'
|
|
49
|
+
| 'error'
|
|
50
|
+
| 'info'
|
|
51
|
+
| 'warning';
|
|
52
|
+
size?: 'small' | 'medium' | 'large';
|
|
53
|
+
edge?: 'start' | 'end' | false;
|
|
54
|
+
disabled?: boolean;
|
|
55
|
+
|
|
56
|
+
// Styling
|
|
57
|
+
sx?: SxProps<Theme>;
|
|
58
|
+
className?: string;
|
|
59
|
+
id?: string;
|
|
60
|
+
'data-testid'?: string;
|
|
61
|
+
|
|
62
|
+
// Arbitrary passthrough (MUI will validate)
|
|
63
|
+
[key: string]: any;
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const IconButtonResolver: RegistryEntry = {
|
|
68
|
+
type: 'IconButton',
|
|
69
|
+
resolve(spec: IconButtonSpec, _ctx?: ResolveCtx) {
|
|
70
|
+
const p = spec.props ?? {};
|
|
71
|
+
const nodeId = ensureNodeId('iconbutton', p.id as string | undefined);
|
|
72
|
+
|
|
73
|
+
// Decide polymorphic target
|
|
74
|
+
const component =
|
|
75
|
+
p.component ??
|
|
76
|
+
p.as ??
|
|
77
|
+
(p.to ? Link : (p.href || p.external) ? 'a' : undefined);
|
|
78
|
+
|
|
79
|
+
// Routing / anchor props
|
|
80
|
+
const routingProps =
|
|
81
|
+
component === 'a' || p.external
|
|
82
|
+
? {
|
|
83
|
+
href: p.href,
|
|
84
|
+
target: p.target ?? (p.external ? '_blank' : undefined),
|
|
85
|
+
rel: p.rel ?? (p.external ? 'noopener noreferrer' : undefined),
|
|
86
|
+
}
|
|
87
|
+
: component === Link || (p.to && !p.component)
|
|
88
|
+
? { to: p.to }
|
|
89
|
+
: {};
|
|
90
|
+
|
|
91
|
+
// Prepare children (icon sugar)
|
|
92
|
+
const { children, icon, iconProps } = p;
|
|
93
|
+
const normalizedToken =
|
|
94
|
+
typeof icon === 'string' ? icon.trim() : null;
|
|
95
|
+
|
|
96
|
+
const effectiveChildren =
|
|
97
|
+
children ??
|
|
98
|
+
(normalizedToken ? (
|
|
99
|
+
<Icon
|
|
100
|
+
name={normalizedToken}
|
|
101
|
+
{...(iconProps || {})}
|
|
102
|
+
/>
|
|
103
|
+
) : (
|
|
104
|
+
icon ?? null
|
|
105
|
+
));
|
|
106
|
+
|
|
107
|
+
// Collect & strip resolver-only keys so they don't leak to DOM
|
|
108
|
+
const {
|
|
109
|
+
as: _as,
|
|
110
|
+
to: _to,
|
|
111
|
+
href: _href,
|
|
112
|
+
external: _external,
|
|
113
|
+
target: _target,
|
|
114
|
+
rel: _rel,
|
|
115
|
+
icon: _icon,
|
|
116
|
+
iconSx: _iconSx,
|
|
117
|
+
iconProps: _iconProps,
|
|
118
|
+
...rest
|
|
119
|
+
} = p;
|
|
120
|
+
|
|
121
|
+
return (
|
|
122
|
+
<IconButton
|
|
123
|
+
{...(component ? { component } : {})}
|
|
124
|
+
sx={p.sx}
|
|
125
|
+
className={p.className}
|
|
126
|
+
id={nodeId}
|
|
127
|
+
data-testid={p['data-testid']}
|
|
128
|
+
{...routingProps}
|
|
129
|
+
{...rest}
|
|
130
|
+
>
|
|
131
|
+
{effectiveChildren}
|
|
132
|
+
</IconButton>
|
|
133
|
+
);
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
export default IconButtonResolver;
|