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