this.gui 1.3.40 → 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/dist/init/index.html +27 -0
- package/dist/init/package-lock.json +5779 -0
- package/dist/init/package.json +24 -0
- package/dist/init/src/App.tsx +40 -0
- package/dist/init/src/index.css +16 -0
- package/dist/init/src/main.tsx +13 -0
- package/dist/init/src/router/DerivableRouter.tsx +36 -0
- package/dist/init/tsconfig.json +17 -0
- package/dist/init/vite.config.ts +11 -0
- package/package.json +5 -3
- 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,77 @@
|
|
|
1
|
+
// src/gui/components/atoms/Table/Table.resolver.tsx
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import type { RegistryEntry, ResolveCtx } from '@/gui/registry/types';
|
|
4
|
+
import { ensureNodeId } from '@/gui/utils/nodeID';
|
|
5
|
+
import type { SxProps, Theme } from '@mui/material/styles';
|
|
6
|
+
import Table from './Table';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Declarative spec for Table
|
|
10
|
+
*
|
|
11
|
+
* Notes
|
|
12
|
+
* - Wraps MUI's Table. Polymorphic.
|
|
13
|
+
* - Supports `sx` and common passthrough props.
|
|
14
|
+
* - Use `id` / `data-gui-id` for editor instrumentation.
|
|
15
|
+
*/
|
|
16
|
+
export type TableSpec = {
|
|
17
|
+
type: 'Table';
|
|
18
|
+
props?: {
|
|
19
|
+
children?: React.ReactNode;
|
|
20
|
+
|
|
21
|
+
// Common Table props (subset; rest is passthrough)
|
|
22
|
+
component?: any;
|
|
23
|
+
as?: any; // alias
|
|
24
|
+
size?: 'small' | 'medium';
|
|
25
|
+
padding?: 'default' | 'checkbox' | 'none';
|
|
26
|
+
stickyHeader?: boolean;
|
|
27
|
+
|
|
28
|
+
// Styling
|
|
29
|
+
sx?: SxProps<Theme>;
|
|
30
|
+
|
|
31
|
+
// Instrumentation / misc
|
|
32
|
+
id?: string;
|
|
33
|
+
className?: string;
|
|
34
|
+
'data-testid'?: string;
|
|
35
|
+
'data-gui-id'?: string;
|
|
36
|
+
|
|
37
|
+
// Allow arbitrary passthrough
|
|
38
|
+
[key: string]: any;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const TableResolver: RegistryEntry = {
|
|
43
|
+
type: 'Table',
|
|
44
|
+
resolve(spec: TableSpec, _ctx?: ResolveCtx) {
|
|
45
|
+
const p = spec.props ?? {};
|
|
46
|
+
|
|
47
|
+
const {
|
|
48
|
+
children,
|
|
49
|
+
sx,
|
|
50
|
+
id,
|
|
51
|
+
className,
|
|
52
|
+
as: _as,
|
|
53
|
+
component: componentProp,
|
|
54
|
+
'data-gui-id': dataGuiIdProp,
|
|
55
|
+
...rest
|
|
56
|
+
} = p as any;
|
|
57
|
+
|
|
58
|
+
const component = componentProp ?? _as;
|
|
59
|
+
const tableId = ensureNodeId('table', dataGuiIdProp ?? id);
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<Table
|
|
63
|
+
component={component}
|
|
64
|
+
id={tableId}
|
|
65
|
+
className={className}
|
|
66
|
+
sx={sx}
|
|
67
|
+
data-testid={p['data-testid']}
|
|
68
|
+
data-gui-id={tableId}
|
|
69
|
+
{...rest}
|
|
70
|
+
>
|
|
71
|
+
{children}
|
|
72
|
+
</Table>
|
|
73
|
+
);
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export default TableResolver;
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import Table from './Table';
|
|
4
|
+
import { Box,
|
|
5
|
+
TableHead,
|
|
6
|
+
TableRow,
|
|
7
|
+
TableCell,
|
|
8
|
+
TableBody,
|
|
9
|
+
Typography } from '@/gui/components/atoms';
|
|
10
|
+
|
|
11
|
+
const meta: Meta<typeof Table> = {
|
|
12
|
+
title: 'Atoms/DataDisplay/Table',
|
|
13
|
+
component: Table,
|
|
14
|
+
tags: ['autodocs'],
|
|
15
|
+
decorators: [
|
|
16
|
+
(Story) => (
|
|
17
|
+
<div style={{ padding: 16, minHeight: 260, maxWidth: 920 }}>
|
|
18
|
+
<Story />
|
|
19
|
+
</div>
|
|
20
|
+
),
|
|
21
|
+
],
|
|
22
|
+
parameters: {
|
|
23
|
+
docs: {
|
|
24
|
+
description: {
|
|
25
|
+
component: `
|
|
26
|
+
The **Table** atom is a thin wrapper around MUI's \`Table\`.
|
|
27
|
+
It preserves MUI props and typing (faithful to the original), and fits naturally into This.GUI's declarative/resolver pattern.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
## Features
|
|
31
|
+
- Fully preserves MUI Table API and typing.
|
|
32
|
+
- Supports \`sx\` styling via the system.
|
|
33
|
+
- Works with other Table atoms: \`TableHead\`, \`TableBody\`, \`TableRow\`, \`TableCell\`.
|
|
34
|
+
- Can be described declaratively via the **TableResolver**.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
## Basic usage (React)
|
|
38
|
+
~~~tsx
|
|
39
|
+
import { Table, TableHead, TableBody, TableRow, TableCell } from '@/gui/components/atoms';
|
|
40
|
+
|
|
41
|
+
<Table size="small">
|
|
42
|
+
<TableHead>
|
|
43
|
+
<TableRow>
|
|
44
|
+
<TableCell>ID</TableCell>
|
|
45
|
+
<TableCell>Name</TableCell>
|
|
46
|
+
</TableRow>
|
|
47
|
+
</TableHead>
|
|
48
|
+
<TableBody>
|
|
49
|
+
<TableRow>
|
|
50
|
+
<TableCell>1</TableCell>
|
|
51
|
+
<TableCell>Alice</TableCell>
|
|
52
|
+
</TableRow>
|
|
53
|
+
</TableBody>
|
|
54
|
+
</Table>
|
|
55
|
+
~~~
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
## Declarative JSON / Resolver
|
|
59
|
+
~~~json
|
|
60
|
+
{
|
|
61
|
+
"type": "Table",
|
|
62
|
+
"props": {
|
|
63
|
+
"size": "small",
|
|
64
|
+
"sx": { "minWidth": 420 },
|
|
65
|
+
"children": [
|
|
66
|
+
{ "type": "TableHead", "props": { "children": { "type": "TableRow", "props": { "children": [
|
|
67
|
+
{ "type": "TableCell", "props": { "children": "ID" } },
|
|
68
|
+
{ "type": "TableCell", "props": { "children": "Name" } }
|
|
69
|
+
]}}}},
|
|
70
|
+
{ "type": "TableBody", "props": { "children": { "type": "TableRow", "props": { "children": [
|
|
71
|
+
{ "type": "TableCell", "props": { "children": 1 } },
|
|
72
|
+
{ "type": "TableCell", "props": { "children": "Alice" } }
|
|
73
|
+
]}}}}
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
~~~
|
|
78
|
+
`,
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
argTypes: {
|
|
83
|
+
size: { control: { type: 'radio' }, options: ['small', 'medium'] },
|
|
84
|
+
padding: { control: { type: 'select' }, options: ['default', 'checkbox', 'none'] },
|
|
85
|
+
stickyHeader: { control: { type: 'boolean' } },
|
|
86
|
+
sx: { control: 'object' },
|
|
87
|
+
component: { table: { disable: true } },
|
|
88
|
+
},
|
|
89
|
+
args: {
|
|
90
|
+
size: 'small',
|
|
91
|
+
padding: 'default' as any, // MUI's types allow 'normal' depending on version; keep story loose
|
|
92
|
+
stickyHeader: false,
|
|
93
|
+
sx: {},
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export default meta;
|
|
98
|
+
type Story = StoryObj<typeof Table>;
|
|
99
|
+
|
|
100
|
+
const DemoTable: React.FC<React.ComponentProps<typeof Table>> = (props) => {
|
|
101
|
+
return (
|
|
102
|
+
<Box
|
|
103
|
+
sx={{
|
|
104
|
+
border: '1px solid',
|
|
105
|
+
borderColor: 'divider',
|
|
106
|
+
borderRadius: 2,
|
|
107
|
+
overflow: 'hidden',
|
|
108
|
+
bgcolor: 'background.paper',
|
|
109
|
+
}}
|
|
110
|
+
>
|
|
111
|
+
<Table {...props}>
|
|
112
|
+
{props.children ?? (
|
|
113
|
+
<>
|
|
114
|
+
<TableHead>
|
|
115
|
+
<TableRow sx={{ background: 'background.nav' }}>
|
|
116
|
+
<TableCell>
|
|
117
|
+
<Typography fontWeight={700}>ID</Typography>
|
|
118
|
+
</TableCell>
|
|
119
|
+
<TableCell>
|
|
120
|
+
<Typography fontWeight={700}>Name</Typography>
|
|
121
|
+
</TableCell>
|
|
122
|
+
<TableCell align="right">
|
|
123
|
+
<Typography fontWeight={700}>Score</Typography>
|
|
124
|
+
</TableCell>
|
|
125
|
+
</TableRow>
|
|
126
|
+
</TableHead>
|
|
127
|
+
<TableBody>
|
|
128
|
+
{[
|
|
129
|
+
{ id: 1, name: 'Alice', score: 98 },
|
|
130
|
+
{ id: 2, name: 'Bob', score: 84 },
|
|
131
|
+
{ id: 3, name: 'Charlie', score: 91 },
|
|
132
|
+
].map((row) => (
|
|
133
|
+
<TableRow key={row.id} hover>
|
|
134
|
+
<TableCell>{row.id}</TableCell>
|
|
135
|
+
<TableCell>{row.name}</TableCell>
|
|
136
|
+
<TableCell align="right">{row.score}</TableCell>
|
|
137
|
+
</TableRow>
|
|
138
|
+
))}
|
|
139
|
+
</TableBody>
|
|
140
|
+
</>
|
|
141
|
+
)}
|
|
142
|
+
</Table>
|
|
143
|
+
</Box>
|
|
144
|
+
);
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
export const Playground: Story = {
|
|
148
|
+
render: (args) => <DemoTable {...args} />,
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
export const MediumSize: Story = {
|
|
152
|
+
args: { size: 'medium' },
|
|
153
|
+
render: (args) => <DemoTable {...args} />,
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
export const StickyHeader: Story = {
|
|
157
|
+
args: { stickyHeader: true, sx: { minWidth: 520 } },
|
|
158
|
+
render: (args) => (
|
|
159
|
+
<Box sx={{ maxHeight: 180, overflow: 'auto', border: '1px solid', borderColor: 'divider', borderRadius: 2 }}>
|
|
160
|
+
<DemoTable {...args} />
|
|
161
|
+
</Box>
|
|
162
|
+
),
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
export const DensePaddingNone: Story = {
|
|
166
|
+
args: { padding: 'none' as any, size: 'small' },
|
|
167
|
+
render: (args) => <DemoTable {...args} />,
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
export const WithSx: Story = {
|
|
171
|
+
args: { sx: { minWidth: 640 } },
|
|
172
|
+
render: (args) => <DemoTable {...args} />,
|
|
173
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This.GUI — Table
|
|
3
|
+
* Thin wrapper that preserves MUI's own typing and API.
|
|
4
|
+
*
|
|
5
|
+
* Examples:
|
|
6
|
+
* <Table size="small">
|
|
7
|
+
* ...
|
|
8
|
+
* </Table>
|
|
9
|
+
*
|
|
10
|
+
* Notes:
|
|
11
|
+
* - Preserves polymorphism and full MUI Table props.
|
|
12
|
+
* - Integrates into This.GUI namespace and resolver pattern.
|
|
13
|
+
*/
|
|
14
|
+
import * as React from 'react';
|
|
15
|
+
import MuiTable from '@mui/material/Table';
|
|
16
|
+
// Re-export using MUI's own component type to keep full typing
|
|
17
|
+
const Table = MuiTable;
|
|
18
|
+
export type TableProps = React.ComponentProps<typeof Table>;
|
|
19
|
+
(Table as any).displayName = 'Gui.Table';
|
|
20
|
+
export default Table;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import TextField from "./TextField";
|
|
2
|
+
import { Stack } from "@/gui/components/atoms";
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
title: "Atoms/Elements/TextField",
|
|
6
|
+
component: TextField,
|
|
7
|
+
parameters: {
|
|
8
|
+
layout: "centered",
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const Variants = () => (
|
|
13
|
+
<Stack spacing={2} sx={{ width: 400 }}>
|
|
14
|
+
<TextField label="Default" variant="outlined" placeholder="Type something..." />
|
|
15
|
+
<TextField label="Filled" variant="filled" placeholder="Type something..." />
|
|
16
|
+
<TextField label="Standard" variant="standard" placeholder="Type something..." />
|
|
17
|
+
<TextField
|
|
18
|
+
label="Multiline"
|
|
19
|
+
variant="outlined"
|
|
20
|
+
multiline
|
|
21
|
+
rows={4}
|
|
22
|
+
placeholder="Write a long message..."
|
|
23
|
+
/>
|
|
24
|
+
</Stack>
|
|
25
|
+
);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This.GUI — TextField (polymorphic)
|
|
3
|
+
* Wrapper that keeps MUI's typing, including full prop support.
|
|
4
|
+
* Examples:
|
|
5
|
+
* <TextField label="Name" variant="outlined" />
|
|
6
|
+
* <TextField multiline rows={4} placeholder="Write something..." />
|
|
7
|
+
*/
|
|
8
|
+
import MuiTextField from '@mui/material/TextField';
|
|
9
|
+
import * as React from 'react';
|
|
10
|
+
|
|
11
|
+
// Re-export using MUI's own component type
|
|
12
|
+
const TextField = MuiTextField;
|
|
13
|
+
export type TextFieldProps = React.ComponentProps<typeof TextField>;
|
|
14
|
+
(TextField as any).displayName = 'Gui.TextField';
|
|
15
|
+
export default TextField;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// src/gui/atoms/Toolbar/Toolbar.resolver.tsx
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import Toolbar from './Toolbar';
|
|
4
|
+
import type { RegistryEntry } from '@/gui/registry/types';
|
|
5
|
+
import type { SxProps, Theme } from '@mui/material/styles';
|
|
6
|
+
import { ensureNodeId } from '@/gui/utils/nodeID';
|
|
7
|
+
|
|
8
|
+
type ToolbarSpec = {
|
|
9
|
+
type: 'Toolbar';
|
|
10
|
+
props?: {
|
|
11
|
+
/** Children content (text or nodes) */
|
|
12
|
+
children?: React.ReactNode;
|
|
13
|
+
|
|
14
|
+
/** MUI props */
|
|
15
|
+
variant?: 'regular' | 'dense';
|
|
16
|
+
disableGutters?: boolean;
|
|
17
|
+
|
|
18
|
+
/** Styling / misc */
|
|
19
|
+
sx?: SxProps<Theme>;
|
|
20
|
+
id?: string;
|
|
21
|
+
className?: string;
|
|
22
|
+
'data-testid'?: string;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* ToolbarResolver
|
|
28
|
+
* - Maps JSON-friendly spec → <Toolbar /> props.
|
|
29
|
+
* - Accepts sx/id/className for styling and test hooks.
|
|
30
|
+
*/
|
|
31
|
+
const ToolbarResolver: RegistryEntry = {
|
|
32
|
+
type: 'Toolbar',
|
|
33
|
+
resolve(spec: ToolbarSpec) {
|
|
34
|
+
const p = spec.props ?? {};
|
|
35
|
+
const {
|
|
36
|
+
children,
|
|
37
|
+
variant,
|
|
38
|
+
disableGutters,
|
|
39
|
+
sx,
|
|
40
|
+
className,
|
|
41
|
+
} = p;
|
|
42
|
+
|
|
43
|
+
const id = ensureNodeId('Toolbar', p.id);
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<Toolbar
|
|
47
|
+
variant={variant}
|
|
48
|
+
disableGutters={disableGutters}
|
|
49
|
+
sx={sx}
|
|
50
|
+
id={id}
|
|
51
|
+
className={className}
|
|
52
|
+
data-testid={p['data-testid']}
|
|
53
|
+
>
|
|
54
|
+
{children}
|
|
55
|
+
</Toolbar>
|
|
56
|
+
);
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export default ToolbarResolver;
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
// Atoms used in the examples
|
|
3
|
+
import { Toolbar, AppBar, Box, IconButton, Typography, Button } from '@/gui/components/atoms';
|
|
4
|
+
import Icon from '@/gui/Theme/Icon/Icon';
|
|
5
|
+
|
|
6
|
+
// ======================= Meta =======================
|
|
7
|
+
const meta: Meta<typeof Toolbar> = {
|
|
8
|
+
title: 'Atoms/Containers/Toolbar',
|
|
9
|
+
component: Toolbar,
|
|
10
|
+
tags: ['autodocs'],
|
|
11
|
+
decorators: [
|
|
12
|
+
(Story) => (
|
|
13
|
+
<div style={{ padding: 16, minHeight: 240 }}>
|
|
14
|
+
<Story />
|
|
15
|
+
</div>
|
|
16
|
+
),
|
|
17
|
+
],
|
|
18
|
+
parameters: {
|
|
19
|
+
docs: {
|
|
20
|
+
description: {
|
|
21
|
+
component: `
|
|
22
|
+
The **Toolbar** atom is a thin wrapper over MUI's \`MuiToolbar\`.
|
|
23
|
+
|
|
24
|
+
> **Not polymorphic.** Unlike \`Button\` or \`Box\`, **Toolbar does not accept** a \`component\` prop in MUI. If you need a different semantic element (e.g. \`<header>\`), wrap it with \`<Box component="header">\`.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
## Features
|
|
28
|
+
- Density via \`variant\`: \`'regular'\` | \`'dense'\`.
|
|
29
|
+
- Optional gutters removal with \`disableGutters\`.
|
|
30
|
+
- Full **\`sx\`** support for styling.
|
|
31
|
+
- Plays nicely inside **AppBar** and custom layouts.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
## Key Props
|
|
35
|
+
- \`variant?: 'regular' | 'dense'\`
|
|
36
|
+
- \`disableGutters?: boolean\`
|
|
37
|
+
- \`sx?: SxProps\` — theme-aware styling.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
## Basic usage
|
|
41
|
+
~~~tsx
|
|
42
|
+
import { Toolbar } from '@/gui/atoms';
|
|
43
|
+
|
|
44
|
+
<Toolbar>
|
|
45
|
+
<span>Left content</span>
|
|
46
|
+
</Toolbar>
|
|
47
|
+
~~~
|
|
48
|
+
|
|
49
|
+
## In an AppBar
|
|
50
|
+
~~~tsx
|
|
51
|
+
import { AppBar, Toolbar, Typography } from '@/gui/atoms';
|
|
52
|
+
|
|
53
|
+
<AppBar position="static">
|
|
54
|
+
<Toolbar>
|
|
55
|
+
<Typography variant="h6">Title</Typography>
|
|
56
|
+
</Toolbar>
|
|
57
|
+
</AppBar>
|
|
58
|
+
~~~
|
|
59
|
+
|
|
60
|
+
## Change semantic element with Box
|
|
61
|
+
~~~tsx
|
|
62
|
+
import { Box, Toolbar } from '@/gui/atoms';
|
|
63
|
+
|
|
64
|
+
<Box component="header">
|
|
65
|
+
<Toolbar variant="dense">Compact header</Toolbar>
|
|
66
|
+
</Box>
|
|
67
|
+
~~~
|
|
68
|
+
`,
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
controls: {
|
|
72
|
+
exclude: ['component']
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
argTypes: {
|
|
76
|
+
variant: {
|
|
77
|
+
control: { type: 'radio' },
|
|
78
|
+
options: ['regular', 'dense'],
|
|
79
|
+
},
|
|
80
|
+
disableGutters: { control: 'boolean' },
|
|
81
|
+
// Toolbar is not polymorphic in MUI, so hide any notion of `component`
|
|
82
|
+
},
|
|
83
|
+
args: {
|
|
84
|
+
variant: 'regular',
|
|
85
|
+
disableGutters: false,
|
|
86
|
+
children: (
|
|
87
|
+
<div style={{ display: 'flex', width: '100%', alignItems: 'center', gap: 12 }}>
|
|
88
|
+
<strong>Toolbar content</strong>
|
|
89
|
+
</div>
|
|
90
|
+
),
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
export default meta;
|
|
94
|
+
|
|
95
|
+
type Story = StoryObj<typeof Toolbar>;
|
|
96
|
+
|
|
97
|
+
// ======================= Stories =======================
|
|
98
|
+
export const Playground: Story = {};
|
|
99
|
+
|
|
100
|
+
export const DenseVsRegular: Story = {
|
|
101
|
+
render: () => (
|
|
102
|
+
<div style={{ display: 'grid', gap: 12 }}>
|
|
103
|
+
<Toolbar>
|
|
104
|
+
<Typography variant="body2">Regular Toolbar</Typography>
|
|
105
|
+
</Toolbar>
|
|
106
|
+
<Toolbar variant="dense">
|
|
107
|
+
<Typography variant="body2">Dense Toolbar</Typography>
|
|
108
|
+
</Toolbar>
|
|
109
|
+
</div>
|
|
110
|
+
),
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
export const WithActions: Story = {
|
|
114
|
+
render: () => (
|
|
115
|
+
<Toolbar sx={{ display: 'flex', gap: 8 }}>
|
|
116
|
+
<Typography sx={{ flex: 1 }} variant="h6">Title</Typography>
|
|
117
|
+
<IconButton aria-label="search">
|
|
118
|
+
<Icon name="search" fontSize={20} />
|
|
119
|
+
</IconButton>
|
|
120
|
+
<IconButton aria-label="user">
|
|
121
|
+
<Icon name="person" fontSize={20} />
|
|
122
|
+
</IconButton>
|
|
123
|
+
<Button variant="contained" size="small">Action</Button>
|
|
124
|
+
</Toolbar>
|
|
125
|
+
),
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
export const InAppBar: Story = {
|
|
129
|
+
render: () => (
|
|
130
|
+
<AppBar position="static">
|
|
131
|
+
<Toolbar>
|
|
132
|
+
<Typography variant="h6" sx={{ flex: 1 }}>App Bar + Toolbar</Typography>
|
|
133
|
+
<Button color="inherit" size="small">Login</Button>
|
|
134
|
+
</Toolbar>
|
|
135
|
+
</AppBar>
|
|
136
|
+
),
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
export const WrappedInHeader: Story = {
|
|
140
|
+
render: () => (
|
|
141
|
+
<Box component="header" sx={{ border: '1px solid', borderColor: 'divider' }}>
|
|
142
|
+
<Toolbar variant="dense">
|
|
143
|
+
<Typography variant="body2">Header Toolbar (wrapped by Box)</Typography>
|
|
144
|
+
</Toolbar>
|
|
145
|
+
</Box>
|
|
146
|
+
),
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
export const WithCustomSx: Story = {
|
|
150
|
+
render: () => (
|
|
151
|
+
<Toolbar sx={{ bgcolor: 'background.paper', border: '1px dashed', borderColor: 'divider', borderRadius: 1 }}>
|
|
152
|
+
<Typography variant="body2">Styled with sx</Typography>
|
|
153
|
+
</Toolbar>
|
|
154
|
+
),
|
|
155
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import MuiToolbar from '@mui/material/Toolbar';
|
|
3
|
+
/**
|
|
4
|
+
* This.GUI — Toolbar atom
|
|
5
|
+
* Thin wrapper around MUI's Toolbar so consumers import from "@/gui/atoms"
|
|
6
|
+
* instead of "@mui/material". This keeps the engine swappable.
|
|
7
|
+
*
|
|
8
|
+
* Notes:
|
|
9
|
+
* - We type props from MuiToolbar to preserve its full API (incl. `component`, `sx`, etc.).
|
|
10
|
+
* - Ref is HTMLDivElement, matching the default DOM element Toolbar renders.
|
|
11
|
+
*/
|
|
12
|
+
export type ToolbarProps = React.ComponentProps<typeof MuiToolbar>;
|
|
13
|
+
const Toolbar = React.forwardRef<HTMLDivElement, ToolbarProps>(function Toolbar(props, ref) {
|
|
14
|
+
return <MuiToolbar ref={ref} {...props} />;});
|
|
15
|
+
(Toolbar as any).displayName = 'Gui.Toolbar';
|
|
16
|
+
export default Toolbar;
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import Tooltip from './Tooltip';
|
|
3
|
+
import type { SxProps, Theme } from '@mui/material/styles';
|
|
4
|
+
import { ensureNodeId } from '@/gui/utils/nodeID';
|
|
5
|
+
import type { RegistryEntry, ResolveCtx } from '@/gui/registry/types';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Tooltip — Resolver
|
|
9
|
+
* --------------------------------------------------
|
|
10
|
+
* Declarative spec → live <Tooltip /> with correct props.
|
|
11
|
+
* Supports nested declarative children via ctx.render when available.
|
|
12
|
+
*/
|
|
13
|
+
export type TooltipSpec = {
|
|
14
|
+
type: 'Tooltip';
|
|
15
|
+
props?: {
|
|
16
|
+
// Content
|
|
17
|
+
title?: React.ReactNode | string; // required by MUI; we default if missing
|
|
18
|
+
children?: React.ReactNode | any; // can be a nested spec object
|
|
19
|
+
|
|
20
|
+
// Behavior
|
|
21
|
+
placement?:
|
|
22
|
+
| 'bottom-end' | 'bottom-start' | 'bottom'
|
|
23
|
+
| 'left-end' | 'left-start' | 'left'
|
|
24
|
+
| 'right-end' | 'right-start' | 'right'
|
|
25
|
+
| 'top-end' | 'top-start' | 'top';
|
|
26
|
+
arrow?: boolean;
|
|
27
|
+
followCursor?: boolean;
|
|
28
|
+
enterDelay?: number;
|
|
29
|
+
enterNextDelay?: number;
|
|
30
|
+
enterTouchDelay?: number;
|
|
31
|
+
leaveDelay?: number;
|
|
32
|
+
leaveTouchDelay?: number;
|
|
33
|
+
disableFocusListener?: boolean;
|
|
34
|
+
disableHoverListener?: boolean;
|
|
35
|
+
disableInteractive?: boolean;
|
|
36
|
+
disableTouchListener?: boolean;
|
|
37
|
+
open?: boolean; // controlled mode
|
|
38
|
+
|
|
39
|
+
// Styling / test ids
|
|
40
|
+
sx?: SxProps<Theme>;
|
|
41
|
+
id?: string;
|
|
42
|
+
className?: string;
|
|
43
|
+
'data-testid'?: string;
|
|
44
|
+
'data-gui-id'?: string;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const TooltipResolver: RegistryEntry = {
|
|
49
|
+
type: 'Tooltip',
|
|
50
|
+
resolve(spec: TooltipSpec, ctx?: ResolveCtx) {
|
|
51
|
+
const p = spec.props ?? {};
|
|
52
|
+
const guiId = ensureNodeId('Tooltip', (p as any)['data-gui-id']);
|
|
53
|
+
|
|
54
|
+
// Resolve child: if a nested spec is provided and we have a renderer in ctx, use it.
|
|
55
|
+
let childCandidate: any = (spec.props?.children ?? (spec.props as any)?.child) as any;
|
|
56
|
+
if (!React.isValidElement(childCandidate) && childCandidate && typeof childCandidate === 'object' && ctx?.render) {
|
|
57
|
+
childCandidate = ctx.render(childCandidate);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Tooltip expects exactly ONE ReactElement child. Coerce anything else into an element.
|
|
61
|
+
let childEl: React.ReactElement;
|
|
62
|
+
if (React.isValidElement(childCandidate)) {
|
|
63
|
+
childEl = childCandidate as React.ReactElement;
|
|
64
|
+
} else if (
|
|
65
|
+
typeof childCandidate === 'string' ||
|
|
66
|
+
typeof childCandidate === 'number' ||
|
|
67
|
+
typeof childCandidate === 'bigint'
|
|
68
|
+
) {
|
|
69
|
+
childEl = <span>{String(childCandidate)}</span>;
|
|
70
|
+
} else if (childCandidate) {
|
|
71
|
+
// Arrays, iterables, true/false, portals, promises, etc. → wrap safely
|
|
72
|
+
childEl = <span>{childCandidate as any}</span>;
|
|
73
|
+
} else {
|
|
74
|
+
// No child provided → harmless inline element to satisfy MUI contract
|
|
75
|
+
childEl = <span style={{ display: 'inline-block', width: 0, height: 0 }} />;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
let titleNode: React.ReactNode = p.title;
|
|
79
|
+
if (titleNode && !React.isValidElement(titleNode) && typeof titleNode === 'object' && ctx?.render) {
|
|
80
|
+
titleNode = ctx.render(titleNode as any);
|
|
81
|
+
}
|
|
82
|
+
if (typeof titleNode === 'undefined' || titleNode === null) {
|
|
83
|
+
titleNode = '';
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const {
|
|
87
|
+
// remove resolver-only keys
|
|
88
|
+
id,
|
|
89
|
+
className,
|
|
90
|
+
sx,
|
|
91
|
+
placement,
|
|
92
|
+
arrow,
|
|
93
|
+
followCursor,
|
|
94
|
+
enterDelay,
|
|
95
|
+
enterNextDelay,
|
|
96
|
+
enterTouchDelay,
|
|
97
|
+
leaveDelay,
|
|
98
|
+
leaveTouchDelay,
|
|
99
|
+
disableFocusListener,
|
|
100
|
+
disableHoverListener,
|
|
101
|
+
disableInteractive,
|
|
102
|
+
disableTouchListener,
|
|
103
|
+
open,
|
|
104
|
+
// keep title out, we already computed titleNode
|
|
105
|
+
title: _title,
|
|
106
|
+
// also remove our custom id
|
|
107
|
+
['data-gui-id']: _dataGuiId,
|
|
108
|
+
// and remove the alias 'child' if present
|
|
109
|
+
child: _child,
|
|
110
|
+
...rest
|
|
111
|
+
} = p as any;
|
|
112
|
+
|
|
113
|
+
return (
|
|
114
|
+
<Tooltip
|
|
115
|
+
title={titleNode}
|
|
116
|
+
placement={placement}
|
|
117
|
+
arrow={arrow}
|
|
118
|
+
followCursor={followCursor}
|
|
119
|
+
enterDelay={enterDelay}
|
|
120
|
+
enterNextDelay={enterNextDelay}
|
|
121
|
+
enterTouchDelay={enterTouchDelay}
|
|
122
|
+
leaveDelay={leaveDelay}
|
|
123
|
+
leaveTouchDelay={leaveTouchDelay}
|
|
124
|
+
disableFocusListener={disableFocusListener}
|
|
125
|
+
disableHoverListener={disableHoverListener}
|
|
126
|
+
disableInteractive={disableInteractive}
|
|
127
|
+
disableTouchListener={disableTouchListener}
|
|
128
|
+
open={open}
|
|
129
|
+
sx={sx}
|
|
130
|
+
id={id}
|
|
131
|
+
className={className}
|
|
132
|
+
data-testid={(p as any)['data-testid']}
|
|
133
|
+
data-gui-id={guiId}
|
|
134
|
+
{...rest}
|
|
135
|
+
>
|
|
136
|
+
{childEl}
|
|
137
|
+
</Tooltip>
|
|
138
|
+
);
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
export default TooltipResolver;
|