diff --git a/packages/web-wallet/package.json b/packages/web-wallet/package.json index d31cb56..f48d944 100644 --- a/packages/web-wallet/package.json +++ b/packages/web-wallet/package.json @@ -69,9 +69,9 @@ "@sphereon/ssi-sdk.siopv2-oid4vp-op-auth": "0.33.0", "@sphereon/ssi-sdk.w3c-vc-api-issuer-rest-client": "0.33.0", "@sphereon/ssi-types": "0.33.0", - "@sphereon/ui-components.core": "0.4.1-next.7", - "@sphereon/ui-components.credential-branding": "0.4.1-next.7", - "@sphereon/ui-components.ssi-react": "0.4.1-next.7", + "@sphereon/ui-components.core": "0.4.1-unstable.14", + "@sphereon/ui-components.credential-branding": "0.4.1-unstable.14", + "@sphereon/ui-components.ssi-react": "0.4.1-unstable.14", "@supabase/postgrest-js": "1.19.2", "@supabase/storage-js": "^2.7.1", "@tanstack/react-query": "^4.36.1", @@ -85,6 +85,7 @@ "@xstate/react": "3.2.2", "axios": "^1.7.9", "babel-plugin-module-resolver": "^5.0.2", + "clsx": "^2.1.1", "codemirror": "6.0.1", "cookie": "^0.5.0", "dayjs": "^1.11.13", diff --git a/packages/web-wallet/pages/App.module.css b/packages/web-wallet/pages/App.module.css index efa69ec..8cf4784 100644 --- a/packages/web-wallet/pages/App.module.css +++ b/packages/web-wallet/pages/App.module.css @@ -16,3 +16,8 @@ flex-direction: column; flex-grow: 1; } + +.sideNavigationContainer { + display: flex; + border-right: 1px solid #C4C5CA; +} diff --git a/packages/web-wallet/pages/_app.tsx b/packages/web-wallet/pages/_app.tsx index b3c68d6..03d4fe7 100644 --- a/packages/web-wallet/pages/_app.tsx +++ b/packages/web-wallet/pages/_app.tsx @@ -129,7 +129,9 @@ const _app = (props: React.PropsWithChildren) => {
- +
+ +
diff --git a/packages/web-wallet/src/components/assets/icons/ContactIcon/index.tsx b/packages/web-wallet/src/components/assets/icons/ContactIcon/index.tsx deleted file mode 100644 index f5a8ce9..0000000 --- a/packages/web-wallet/src/components/assets/icons/ContactIcon/index.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import React, {FC, ReactElement} from 'react' - -export interface IProps { - width?: number - height?: number - color?: string -} - -const ContactIcon: FC = (props: IProps): ReactElement => { - const {width = 20, height = 21, color = '#303030'} = props // TODO color - - return ( -
- - - -
- ) -} - -export default ContactIcon diff --git a/packages/web-wallet/src/components/assets/icons/CredentialIcon/index.tsx b/packages/web-wallet/src/components/assets/icons/CredentialIcon/index.tsx deleted file mode 100644 index 34f6fb6..0000000 --- a/packages/web-wallet/src/components/assets/icons/CredentialIcon/index.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React, {FC, ReactElement} from 'react' - -export interface IProps { - width?: number - height?: number - color?: string -} - -const CredentialIcon: FC = (props: IProps): ReactElement => { - const {width = 18, height = 14, color = '#303030'} = props - - return ( -
- - - -
- ) -} - -export default CredentialIcon diff --git a/packages/web-wallet/src/components/bars/SideNavigationBar/SideNavigationCategory/index.module.css b/packages/web-wallet/src/components/bars/SideNavigationBar/SideNavigationCategory/index.module.css deleted file mode 100644 index d2d0650..0000000 --- a/packages/web-wallet/src/components/bars/SideNavigationBar/SideNavigationCategory/index.module.css +++ /dev/null @@ -1,52 +0,0 @@ -.navigationLink, -.navigationLink:focus, -.navigationLink:hover, -.navigationLink:visited, -.navigationLink:link, -.navigationLink:active { - color: #4F4F4F; - text-decoration: none; - display: flex; - flex-direction: row; - align-items: center; - gap: 4px; - flex-grow: 1; -} - -.subRouteLabel { - height: 40px; - display: flex; - align-items: center; - font-size: 12px; - padding-left: 4px; -} - -.mainRouteContainer { - display: flex; - flex-direction: row; - align-items: center; -} - -.mainRouteIconContainer { - height: 40px; - width: 40px; - display: flex; - align-items: center; - justify-content: center; -} - -.mainRouteLabel { - font-size: 14px; -} - -.dropdownIconContainer { - cursor: pointer; - margin-left: auto; - height: 40px; - display: flex; - align-items: center; -} - -.dropdownContainer { - margin-left: 40px; -} diff --git a/packages/web-wallet/src/components/bars/SideNavigationBar/SideNavigationCategory/index.tsx b/packages/web-wallet/src/components/bars/SideNavigationBar/SideNavigationCategory/index.tsx deleted file mode 100644 index 83f149c..0000000 --- a/packages/web-wallet/src/components/bars/SideNavigationBar/SideNavigationCategory/index.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import {SSIArrowDownIcon} from '@sphereon/ui-components.ssi-react' -import React, {ReactElement, useState} from 'react' -import {NavigationRoute, MainRoute} from '@typings' -import style from './index.module.css' -import AssetIcon from '@components/assets/icons/AssetIcon' -import {NavLink} from 'react-router-dom' -import WorkflowIcon from '@components/assets/icons/WorkflowIcon' -import ContactIcon from '@components/assets/icons/ContactIcon' -import CredentialIcon from '@components/assets/icons/CredentialIcon' -import DocumentsListIcon from '@components/assets/icons/DocumentsListIcon' -import MoreIcon from '@components/assets/icons/MoreIcon' -import KeyIcon from '@components/assets/icons/KeyIcon' -import RelyingPartyIcon from '@components/assets/icons/RelyingPartyIcon' - -type Props = { - target: string - label?: string - routes?: Array -} - -const SideNavigationCategory: React.FC = (props: Props): ReactElement => { - const {label, routes = [], target} = props - const [isCollapsed, setIsCollapsed] = useState(true) - const icon: ReactElement = getIcon(target) - - const toggleCollapse = async (): Promise => { - setIsCollapsed(!isCollapsed) - } - - const getRouteElements = (): Array => { - return routes.map((route: NavigationRoute, index: number) => ( - -
{route.label}
-
- )) - } - - return ( -
-
- - {({isActive}) => ( - <> -
{React.cloneElement(icon, {...(isActive && {color: '#7C40E8'})})}
- {label && ( -
- {label} -
- )} - - )} -
- {routes.length > 0 && ( -
=> { - await toggleCollapse() - }}> - -
- )} -
- {routes.length > 0 && ( -
- {getRouteElements()} -
- )} -
- ) -} - -const getIcon = (target: string): ReactElement => { - switch (target) { - case MainRoute.ASSETS: - return - case MainRoute.WORKFLOW: - return - case MainRoute.CONTACTS: - return - case MainRoute.CREDENTIALS: - return - case MainRoute.DOCUMENTS: - return - case MainRoute.KEY_MANAGEMENT: - return - case MainRoute.PRESENTATION_DEFINITIONS: - return - case MainRoute.SETTINGS: - return - default: - return
- } -} - -export default SideNavigationCategory diff --git a/packages/web-wallet/src/components/bars/SideNavigationBar/SideNavigationGroup/index.module.css b/packages/web-wallet/src/components/bars/SideNavigationBar/SideNavigationGroup/index.module.css new file mode 100644 index 0000000..93a771d --- /dev/null +++ b/packages/web-wallet/src/components/bars/SideNavigationBar/SideNavigationGroup/index.module.css @@ -0,0 +1,14 @@ +.container { + display: flex; + user-select: none; + flex-direction: column; +} + +.title { + font-size: 0.75rem; + font-style: normal; + font-weight: 400; + line-height: normal; + color: #8D9099; + align-self: flex-start; +} diff --git a/packages/web-wallet/src/components/bars/SideNavigationBar/SideNavigationGroup/index.tsx b/packages/web-wallet/src/components/bars/SideNavigationBar/SideNavigationGroup/index.tsx new file mode 100644 index 0000000..4cf1ce5 --- /dev/null +++ b/packages/web-wallet/src/components/bars/SideNavigationBar/SideNavigationGroup/index.tsx @@ -0,0 +1,29 @@ +import React, {CSSProperties, FC, ReactElement, ReactNode} from 'react' +import {menuItemFrom} from '../../SideNavigationBar' +import {MenuItem} from '../types' +import styles from './index.module.css' + +type Props = { + label?: string + items: Array + style?: CSSProperties +} + +const SideNavigationGroup: FC = (props: Props): ReactElement => { + const { label, items, style } = props + + const groupFrom = (items: Array): ReactNode => { + return items.map(item => menuItemFrom(item)) + } + + return ( +
+ + {label} + + {groupFrom(items)} +
+ ) +} + +export default SideNavigationGroup diff --git a/packages/web-wallet/src/components/bars/SideNavigationBar/SideNavigationItem/index.module.css b/packages/web-wallet/src/components/bars/SideNavigationBar/SideNavigationItem/index.module.css new file mode 100644 index 0000000..4ed7688 --- /dev/null +++ b/packages/web-wallet/src/components/bars/SideNavigationBar/SideNavigationItem/index.module.css @@ -0,0 +1,43 @@ +.container { + padding: 4px 6px; + display: flex; + flex-direction: row; + cursor: pointer; + align-items: center; + user-select: none; + border-radius: 4px; +} + +.container:hover { + background-color: #E3E3E3; +} + +.containerDisabled { + opacity: 0.5; + cursor: not-allowed; + pointer-events: none; /* Prevent hover and clicks */ +} + +.containerActive { + background-color: #E7DEFB; +} + +.containerActive:hover { + background-color: #E7DEFB; /* same as active, prevents hover override */ +} + +.iconContainer { + width: 42px; + height: 42px; + display: flex; + align-items: center; + justify-content: center; +} + +.label { + font-size: 1rem; + font-style: normal; + font-weight: 400; + line-height: normal; + color: #303030; +} diff --git a/packages/web-wallet/src/components/bars/SideNavigationBar/SideNavigationItem/index.tsx b/packages/web-wallet/src/components/bars/SideNavigationBar/SideNavigationItem/index.tsx new file mode 100644 index 0000000..21900f8 --- /dev/null +++ b/packages/web-wallet/src/components/bars/SideNavigationBar/SideNavigationItem/index.tsx @@ -0,0 +1,59 @@ +import React, {CSSProperties, FC, ReactElement} from 'react' +import {NavLink} from 'react-router-dom' +import clsx from 'clsx'; +import {ContactIcon} from '@sphereon/ui-components.ssi-react' + +import {MenuIcon} from '@typings' +import styles from './index.module.css' + +type Props = { + label: string + icon?: MenuIcon + isDisabled?: boolean + href: string + style?: CSSProperties +} + +const SideNavigationItem: FC = (props: Props): ReactElement => { + const { label, icon, href, isDisabled = false, style } = props + + const getIconElement = (icon: MenuIcon): ReactElement => { + switch (icon) { + case 'contact': + return + case 'notification': + return + case 'activity': + return + case 'credential': + return + default: + return
+ } + } + + return ( + clsx( + styles.container, + { + [styles.containerActive]: isActive && !isDisabled, + [styles.containerDisabled]: isDisabled, + } + )} + > + {icon && +
+ {getIconElement(icon)} +
+ } + + {label} + +
+ ) +} + +export default SideNavigationItem diff --git a/packages/web-wallet/src/components/bars/SideNavigationBar/index.module.css b/packages/web-wallet/src/components/bars/SideNavigationBar/index.module.css index 6920abe..b5a672e 100644 --- a/packages/web-wallet/src/components/bars/SideNavigationBar/index.module.css +++ b/packages/web-wallet/src/components/bars/SideNavigationBar/index.module.css @@ -1,22 +1,16 @@ .container { background-color: #F2F2F2; - border-right: 1px solid #C4C5CA; display: flex; flex-direction: column; - width: 225px; + width: 236px; + gap: 24px; } -.routesContainer { - gap: 19px; - display: flex; - flex-direction: column; - margin: 24px 16px 0; -} - -.settingsContainer { - margin: auto 0 40px; +.menuContainer { + padding: 0 16px; } -.roleSelectionContainer { - padding: 6px 6px 0; +.roleSwitcherContainer { + padding: 24px 16px; + border-bottom: 1px solid #C4C4C4; } diff --git a/packages/web-wallet/src/components/bars/SideNavigationBar/index.tsx b/packages/web-wallet/src/components/bars/SideNavigationBar/index.tsx index cece590..6f5650a 100644 --- a/packages/web-wallet/src/components/bars/SideNavigationBar/index.tsx +++ b/packages/web-wallet/src/components/bars/SideNavigationBar/index.tsx @@ -1,79 +1,103 @@ -import React, {ReactElement} from 'react' +import React, {CSSProperties, FC, Fragment, ReactElement, ReactNode} from 'react' import {useTranslate} from '@refinedev/core' -import SideNavigationCategory from '@components/bars/SideNavigationBar/SideNavigationCategory' -import {RoleType} from '@sphereon/ui-components.core'; import {Listbox, RoleViewItem} from '@sphereon/ui-components.ssi-react' -import {KeyManagementRoute, MainRoute, NavigationRoute, RoleData} from '@typings' -import style from './index.module.css' +import SideNavigationItem from './SideNavigationItem' +import SideNavigationGroup from './SideNavigationGroup' +import {MenuEntry, MenuGroup, MenuItem, RoleData} from '@typings' +import roles from '../../../config/roleConfig.json' +import styles from './index.module.css' -const SideNavigationBar: React.FC = (): ReactElement => { - const translate = useTranslate() +type Props = { + style?: CSSProperties +} + +export const menuItemFrom = (item: MenuItem): ReactElement => { + return +} + +export const menuGroupFrom = (item: MenuGroup): ReactElement => { + return +} + +const SideNavigationBar: FC = (props: Props): ReactElement => { + const {style} = props + const translate = useTranslate() + // TODO SSISDK-19 replace dummy data for the Listbox + const [role, setRole] = React.useState((roles as Array)[0]) - // TODO SSISDK-19 replace dummy data for the Listbox - const roles: RoleData[] = [ - { accountName: 'Account 1', role: RoleType.ISSUER }, - { accountName: 'Account 2', role: RoleType.ADMIN, isDisabled: true }, - { accountName: 'Account 3', role: RoleType.RELYING_PARTY }, - { accountName: 'Account 4', role: RoleType.HOLDER }, - ] + const onChangeRole = async (role: RoleData) => setRole(role) - const onChangeRole = async (role: RoleData) => console.log(JSON.stringify(role)) + const groupMenuBlocks = (items: MenuEntry[]) => { + const blocks: MenuEntry[][] = [] + let currentBlock: MenuEntry[] = [] - return ( - - ) + blocks.push([item]) + } + }) + + if (currentBlock.length > 0) { + blocks.push(currentBlock) + } + + return blocks + } + + const menuFrom = (items: MenuEntry[]): ReactNode => { + const blocks = groupMenuBlocks(items) + + return blocks.map((block, index): ReactElement => { + const isGroupBlock = block.length === 1 && block[0].type === 'group' + + return ( + +
+ {isGroupBlock + ? menuGroupFrom(block[0] as MenuGroup) + : block.map((item, index): ReactElement => ( + + {menuItemFrom(item as MenuItem)} + + ))} +
+
+ ) + }) + } + + return ( + + ) } export default SideNavigationBar diff --git a/packages/web-wallet/src/config/roleConfig.json b/packages/web-wallet/src/config/roleConfig.json new file mode 100644 index 0000000..93fd763 --- /dev/null +++ b/packages/web-wallet/src/config/roleConfig.json @@ -0,0 +1,140 @@ +[ + { + "accountName": "Account 1", + "role": "ISSUER", + "navigation":[ + { + "type":"item", + "label":"Credentials", + "icon":"credential", + "path":"/credentials" + }, + { + "type":"group", + "label":"General", + "items":[ + { + "type":"item", + "label":"Notifications", + "icon":"notification", + "path":"/contacts" + }, + { + "type":"item", + "label":"Contacts", + "icon":"contact", + "path":"/contacts" + }, + { + "type":"item", + "label":"Activities", + "icon":"activity", + "path":"/contacts" + } + ] + } + ] + }, + { + "accountName":"Account 2", + "role":"ADMIN", + "navigation":[ + { + "type":"item", + "label":"DID management", + "icon":"contact", + "path":"/key-management/identifiers" + }, + { + "type":"item", + "label":"Key management", + "icon":"contact", + "path":"/key-management/keys" + } + ] + }, + { + "accountName":"Account 3", + "role":"RELYING_PARTY", + "navigation":[ + { + "type":"item", + "label":"Credentials", + "icon":"credential", + "path":"/credentials" + }, + { + "type":"item", + "label":"Issuers", + "icon":"contact", + "path":"/contacts" + }, + { + "type":"item", + "label":"Definitions", + "icon":"contact", + "path":"/presentation_definitions" + }, + { + "type":"group", + "label":"General", + "items":[ + { + "type":"item", + "label":"Notifications", + "icon":"notification", + "path":"/contacts" + }, + { + "type":"item", + "label":"Contacts", + "icon":"contact", + "path":"/contacts" + }, + { + "type":"item", + "label":"Activities", + "icon":"activity", + "path":"/contacts" + } + ] + } + ] + }, + { + "accountName":"Account 4", + "role":"HOLDER", + "navigation":[ + { + "type":"item", + "label":"Credentials", + "icon":"credential", + "path":"/credentials" + }, + { + "type":"group", + "label":"General", + "items":[ + { + "type":"item", + "label":"Notifications", + "icon":"notification", + "path":"/contacts" + }, + { + "type":"item", + "label":"Contacts", + "icon":"contact", + "path":"/contacts" + }, + { + "type":"item", + "label":"Activities", + "icon":"activity", + "path":"/contacts" + } + ] + } + ] + } +] diff --git a/packages/web-wallet/src/types/component/index.ts b/packages/web-wallet/src/types/component/index.ts index 83e6eff..5e70983 100644 --- a/packages/web-wallet/src/types/component/index.ts +++ b/packages/web-wallet/src/types/component/index.ts @@ -88,3 +88,20 @@ export type CredentialCatalogItem = { } actions: string } + +export type MenuEntry = MenuItem | MenuGroup; + +export type MenuItem = { + type: "item" + label: string + icon: MenuIcon + path: string +} + +export type MenuGroup = { + type: "group" + label?: string + items: Array +} + +export type MenuIcon = "contact" | "notification" | "activity" | "credential" diff --git a/packages/web-wallet/src/types/iam/index.ts b/packages/web-wallet/src/types/iam/index.ts index 64cb253..d8c178a 100644 --- a/packages/web-wallet/src/types/iam/index.ts +++ b/packages/web-wallet/src/types/iam/index.ts @@ -1,3 +1,4 @@ import { RoleType } from '@sphereon/ui-components.core'; +import { MenuEntry } from '@/src/types'; -export type RoleData = { accountName: string, role: RoleType, isDisabled?: boolean } +export type RoleData = { accountName: string, role: RoleType, isDisabled?: boolean, navigation: Array} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3bab8e5..8b93c2a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -635,14 +635,14 @@ importers: specifier: 0.33.0 version: 0.33.0 '@sphereon/ui-components.core': - specifier: 0.4.1-next.7 - version: 0.4.1-next.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 0.4.1-unstable.14 + version: 0.4.1-unstable.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@sphereon/ui-components.credential-branding': - specifier: 0.4.1-next.7 - version: 0.4.1-next.7(encoding@0.1.13)(pg@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@18.19.80)(typescript@5.6.3))(typescript@5.6.3) + specifier: 0.4.1-unstable.14 + version: 0.4.1-unstable.14(encoding@0.1.13)(pg@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@18.19.80)(typescript@5.6.3))(typescript@5.6.3) '@sphereon/ui-components.ssi-react': - specifier: 0.4.1-next.7 - version: 0.4.1-next.7(@babel/core@7.26.10)(@types/react@18.3.18)(date-fns@2.30.0)(dayjs@1.11.13)(encoding@0.1.13)(moment@2.30.1)(pg@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@18.19.80)(typescript@5.6.3))(typescript@5.6.3) + specifier: 0.4.1-unstable.14 + version: 0.4.1-unstable.14(@babel/core@7.26.10)(@types/react@18.3.18)(date-fns@2.30.0)(dayjs@1.11.13)(encoding@0.1.13)(moment@2.30.1)(pg@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@18.19.80)(typescript@5.6.3))(typescript@5.6.3) '@supabase/postgrest-js': specifier: 1.16.2 version: 1.16.2 @@ -682,6 +682,9 @@ importers: babel-plugin-module-resolver: specifier: ^5.0.2 version: 5.0.2 + clsx: + specifier: ^2.1.1 + version: 2.1.1 codemirror: specifier: 6.0.1 version: 6.0.1 @@ -3502,18 +3505,18 @@ packages: '@sphereon/ssi-types@0.33.0': resolution: {integrity: sha512-OQnWLKZQU6lHlMw3JS5308q5Kctv1eT/NNQthGNXETarsgJFiD711pWMOJvi0p5kLpU8N1e7/okaH3mXsVAW0A==} - '@sphereon/ui-components.core@0.4.1-next.7': - resolution: {integrity: sha512-IRZOOoSvcOBzvhKHUwLSwJFgi+L2hXy5U19fqLZF8PqvS3J6g8ysfVU2nf3sCrO3/ZncSyf3kVInav4PKkntjQ==} + '@sphereon/ui-components.core@0.4.1-unstable.14': + resolution: {integrity: sha512-G6evufQ64E+/Yeo5iVIVXqtZWO78sYUzTOkPmbp6CqwRteApY4qqUVYK+SDJXSWQKKUvpYhlBzU5Jk1FnZe6+Q==} peerDependencies: react: '>= 18.2' - '@sphereon/ui-components.credential-branding@0.4.1-next.7': - resolution: {integrity: sha512-WktCaf3Wn71ezGKTARGnbzceBbYn8xqHsP1pZAgniDl7usIWc5TD7i5vmDwil4ik2XVjZTRHacfgaIPF25WbDg==} + '@sphereon/ui-components.credential-branding@0.4.1-unstable.14': + resolution: {integrity: sha512-JVVcWftv7GrSBe5lxZC2jrJ4IMW4xwe5eAowbpxW1/Ze0RsYOGMDUAtxYWf9coMeRmtMM0pEP6F3fVWFARPpag==} peerDependencies: react: '>= 18.2' - '@sphereon/ui-components.ssi-react@0.4.1-next.7': - resolution: {integrity: sha512-IA9MJ8OTTikMnUpxPTxFk8K4SAUYd7Z00pAQeSlY/ig3qBwjKtjWjWsSPsRVKEfD0akNnOsJ1y83bGKGRWNplQ==} + '@sphereon/ui-components.ssi-react@0.4.1-unstable.14': + resolution: {integrity: sha512-tTrGxQUPG07emAWTuvptj/nMvpZRQloBeZK1KOyb5qEGAYOR4aM1bFormmTr8y2maBU/AJ3FmOhjL301Wv73UQ==} peerDependencies: react: '>= 18' @@ -16805,7 +16808,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@sphereon/ui-components.core@0.4.1-next.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@sphereon/ui-components.core@0.4.1-unstable.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: i18n-js: 3.9.2 lodash.memoize: 4.1.2 @@ -16814,12 +16817,12 @@ snapshots: transitivePeerDependencies: - react-dom - '@sphereon/ui-components.credential-branding@0.4.1-next.7(encoding@0.1.13)(pg@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@18.19.80)(typescript@5.6.3))(typescript@5.6.3)': + '@sphereon/ui-components.credential-branding@0.4.1-unstable.14(encoding@0.1.13)(pg@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@18.19.80)(typescript@5.6.3))(typescript@5.6.3)': dependencies: '@sphereon/ssi-sdk.core': 0.33.0(encoding@0.1.13) '@sphereon/ssi-sdk.data-store': 0.33.0(encoding@0.1.13)(pg@8.14.0)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@18.19.80)(typescript@5.6.3))(typescript@5.6.3) '@sphereon/ssi-types': 0.33.0 - '@sphereon/ui-components.core': 0.4.1-next.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@sphereon/ui-components.core': 0.4.1-unstable.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@veramo/core': 4.2.0(patch_hash=c5oempznsz4br5w3tcuk2i2mau) '@veramo/utils': 4.2.0(encoding@0.1.13) i18n-js: 3.9.2 @@ -16850,7 +16853,7 @@ snapshots: - typescript - utf-8-validate - '@sphereon/ui-components.ssi-react@0.4.1-next.7(@babel/core@7.26.10)(@types/react@18.3.18)(date-fns@2.30.0)(dayjs@1.11.13)(encoding@0.1.13)(moment@2.30.1)(pg@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@18.19.80)(typescript@5.6.3))(typescript@5.6.3)': + '@sphereon/ui-components.ssi-react@0.4.1-unstable.14(@babel/core@7.26.10)(@types/react@18.3.18)(date-fns@2.30.0)(dayjs@1.11.13)(encoding@0.1.13)(moment@2.30.1)(pg@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@18.19.80)(typescript@5.6.3))(typescript@5.6.3)': dependencies: '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) @@ -16865,7 +16868,7 @@ snapshots: '@mui/system': 5.16.14(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) '@mui/x-date-pickers': 6.20.2(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@mui/material@5.16.14(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@5.16.14(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(date-fns@2.30.0)(dayjs@1.11.13)(moment@2.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@sphereon/ssi-sdk.data-store': 0.33.0(encoding@0.1.13)(pg@8.14.0)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@18.19.80)(typescript@5.6.3))(typescript@5.6.3) - '@sphereon/ui-components.core': 0.4.1-next.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@sphereon/ui-components.core': 0.4.1-unstable.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-table': 8.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-json-tree: 0.18.0(@types/react@18.3.18)(react@18.3.1)