diff --git a/package-lock.json b/package-lock.json index ee5e63b82..5795a1a21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@bimdata/bcf-components": "6.7.8", "@bimdata/components": "1.10.3", - "@bimdata/design-system": "2.4.4", + "@bimdata/design-system": "3.0.0-beta.47", "@bimdata/typescript-fetch-api-client": "10.48.0", "@bimdata/viewer": "2.20.2-beta.7", "@paddle/paddle-js": "^1.6.5", @@ -1625,9 +1625,9 @@ } }, "node_modules/@bimdata/design-system": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@bimdata/design-system/-/design-system-2.4.4.tgz", - "integrity": "sha512-S9rpxvwR30ylGeyuqIXGbeZO7oOEBPfwxxYV7xkkT/TkFvjcx1GmzzE2VzoaoM9zhXX8RP5Z3e+XXPFn7fDG1A==" + "version": "3.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@bimdata/design-system/-/design-system-3.0.0-beta.47.tgz", + "integrity": "sha512-vzTY/H/hGMjFPy8nVTncSH7aEXZr/FPUab1W8nRc0EBrQ4N4V2Y9i3PjVj0jLzwrqZhcqILaxxbz5Aq23I1qLQ==" }, "node_modules/@bimdata/typescript-fetch-api-client": { "version": "10.48.0", @@ -2914,9 +2914,9 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.4.tgz", - "integrity": "sha512-AJxoUD2/15ESHbvpcyjU274nsAPLuOtPHCk0vKJM5pj//Fg/B1FXNWjPnXTT9PymCYYiHo4zPj0ZomXBKhoy7g==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.6.tgz", + "integrity": "sha512-mRyDmEw9/fCDXCGfL1sbgIw/GUK0PVxRW4YwgPN61F3LQ+fSyoBFarJVzgGyhF6kRzEQZ0FejDqm4WLXSeqQmw==", "dev": true, "license": "MIT", "optional": true, @@ -2931,8 +2931,8 @@ "url": "https://github.com/sponsors/Brooooooklyn" }, "peerDependencies": { - "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", - "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" + "@emnapi/core": "^1.7.1 || 2.0.0-beta.2", + "@emnapi/runtime": "^1.7.1 || 2.0.0-beta.2" } }, "node_modules/@octokit/auth-token": { diff --git a/package.json b/package.json index 3091b67ef..d670ef4eb 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "dependencies": { "@bimdata/bcf-components": "6.7.8", "@bimdata/components": "1.10.3", - "@bimdata/design-system": "2.4.4", + "@bimdata/design-system": "3.0.0-beta.47", "@bimdata/typescript-fetch-api-client": "10.48.0", "@bimdata/viewer": "2.20.2-beta.7", "@paddle/paddle-js": "^1.6.5", diff --git a/src/AppLayout.vue b/src/AppLayout.vue index 20b671b1e..3d95027bf 100644 --- a/src/AppLayout.vue +++ b/src/AppLayout.vue @@ -14,24 +14,29 @@ - -
- -
- -
- + +
+
+ +
+
+
- + +
+ +
+
+
diff --git a/src/components/specific/app/app-header-menu/AppHeaderMenu.scss b/src/components/specific/app/app-header-menu/AppHeaderMenu.scss index 1dd27745b..5bac2d283 100644 --- a/src/components/specific/app/app-header-menu/AppHeaderMenu.scss +++ b/src/components/specific/app/app-header-menu/AppHeaderMenu.scss @@ -1,90 +1,103 @@ .app-header-menu { - .bimdata-dropdown:deep() { - .bimdata-dropdown__content { - padding: 0; - } - - .bimdata-dropdown__elements { - width: 250px; - margin-left: -27px; - } - } + position: relative; + display: flex; + justify-content: center; - &__btn { - display: grid; - grid-template-columns: 36px 135px; - grid-template-rows: 14px 14px; - align-items: center; - gap: 2px 4px; - padding: calc(var(--spacing-unit) / 2); - text-align: left; - width: 190px; - - &__avatar { - grid-row: 1 / span 2; - } + &__trigger { + display: flex; + padding: 2px; + border: none; + border-radius: 50%; + background-color: transparent; + cursor: pointer; + transition: box-shadow 0.2s ease; - &__fullname { - font-weight: bold; + &:hover, + &.active { + box-shadow: 0 0 0 2px var(--color-silver-light); } } - &__container { - position: relative; + &__popover { + position: absolute; + z-index: 200; + bottom: 0; + left: calc(100% + var(--spacing-unit) * 2); + display: flex; flex-direction: column; + width: 231px; + padding: var(--spacing-unit) calc(var(--spacing-unit) * 3 / 2); + border-radius: 20px; + overflow: hidden; + background-color: var(--color-white); + box-shadow: 2px 2px 10px 0 rgba(0, 0, 0, 0.15); font-size: 12px; + } - .user-info { - display: flex; - flex-direction: column; - align-items: center; - gap: var(--spacing-unit); - height: 115px; - - .user-avatar { - margin-top: calc(var(--spacing-unit) / 2); - } + &__user { + display: flex; + align-items: center; + gap: var(--spacing-unit); + padding: var(--spacing-unit) calc(var(--spacing-unit) / 2); - .user-content { - width: 100%; - text-align: center; - .user-name { - font-weight: bold; - } - } + &__content { + min-width: 0; + flex: 1; } - .separator { - height: 1px; - margin: calc(var(--spacing-unit) / 2) var(--spacing-unit); - background-color: var(--color-silver-light); + &__name { + font-weight: bold; + color: var(--color-primary); } - .external-link { - text-decoration: none; - color: inherit; + &__email { + color: var(--color-granite-light); } + } + + &__divider { + height: 1px; + margin: calc(var(--spacing-unit) / 2) 0; + background-color: var(--color-tertiary-lightest, #f7f7f7); + } + + &__item { + display: flex; + align-items: center; + gap: var(--spacing-unit); + width: 100%; + height: 32px; + padding: 0 calc(var(--spacing-unit) / 2); + border: none; + border-radius: 6px; + background-color: transparent; + color: var(--color-primary); + font-size: 12px; + text-align: left; + text-decoration: none; + cursor: pointer; + transition: background-color 0.2s ease; - .bimdata-btn { - justify-content: flex-start; + &:hover { + background-color: var(--color-tertiary-lightest, #f7f7f7); } - .btn-language { + &--language { justify-content: space-between; } + } - .lang-badge { - padding: calc(var(--spacing-unit) / 6) var(--spacing-unit); - font-weight: bold; - border-radius: 2px; - background-color: var(--color-silver); - text-transform: uppercase; - } + &__lang-badge { + padding: calc(var(--spacing-unit) / 6) var(--spacing-unit); + font-weight: 500; + text-transform: uppercase; + border-radius: 2px; + background-color: var(--color-silver); + } - .btn-logout { - margin: calc(var(--spacing-unit) / 2) var(--spacing-unit); - justify-content: center; - } + &__logout { + margin-top: var(--spacing-unit); + justify-content: center; } } diff --git a/src/components/specific/app/app-header-menu/AppHeaderMenu.vue b/src/components/specific/app/app-header-menu/AppHeaderMenu.vue index 8e519a516..2f41ff6c6 100644 --- a/src/components/specific/app/app-header-menu/AppHeaderMenu.vue +++ b/src/components/specific/app/app-header-menu/AppHeaderMenu.vue @@ -1,115 +1,105 @@ @@ -133,16 +123,24 @@ export default { UserAvatar }, setup() { + const router = useRouter(); const { signOut } = useAuth(); const { currentSpace } = useSpaces(); const { user } = useUser(); + const { isOpen, close, toggle } = useToggle(); + const { isOpen: showLanguageSelector, open: openLanguageSelector, close: closeLanguageSelector } = useToggle(); + const goToProfile = () => { + close(); + router.push({ name: routeNames.userProfile }); + }; + const bimdataConnectProfileUrl = ENV.VUE_APP_URL_BIMDATACONNECT + "/profile/"; const documentationUrl = ENV.VUE_APP_URL_DOCUMENTATION; @@ -155,15 +153,19 @@ export default { documentationUrl, marketPlaceUrl, isSubscriptionEnabled: IS_SUBSCRIPTION_ENABLED, + isOpen, routeNames, showLanguageSelector, space: currentSpace, user, userIframeProfile, // Methods + close, + toggle, + goToProfile, closeLanguageSelector, openLanguageSelector, - router: useRouter(), + router, fullName, signOut }; diff --git a/src/components/specific/app/app-sidebar/AppSidebar.scss b/src/components/specific/app/app-sidebar/AppSidebar.scss new file mode 100644 index 000000000..e421cf61d --- /dev/null +++ b/src/components/specific/app/app-sidebar/AppSidebar.scss @@ -0,0 +1,46 @@ +.app-sidebar { + flex-shrink: 0; + height: 100%; + padding: var(--spacing-unit); + + &__rail { + position: relative; + z-index: 100; + display: flex; + flex-direction: column; + align-items: center; + gap: calc(var(--spacing-unit) * 2); + width: 56px; + height: 100%; + padding: calc(var(--spacing-unit) * 2) 0; + border-radius: 13px; + background-color: var(--color-white); + box-shadow: var(--box-shadow); + } + + &__logo { + display: flex; + justify-content: center; + align-items: center; + height: 34px; + margin-bottom: var(--spacing-unit); + } + + &__logo-mark { + width: auto; + height: 26px; + } + + &__nav { + display: flex; + flex-direction: column; + align-items: center; + gap: var(--spacing-unit); + } + + &__bottom { + margin-top: auto; + display: flex; + justify-content: center; + } +} diff --git a/src/components/specific/app/app-sidebar/AppSidebar.vue b/src/components/specific/app/app-sidebar/AppSidebar.vue new file mode 100644 index 000000000..b7fa56861 --- /dev/null +++ b/src/components/specific/app/app-sidebar/AppSidebar.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/src/components/specific/app/app-sidebar/app-sidebar-item/AppSidebarItem.scss b/src/components/specific/app/app-sidebar/app-sidebar-item/AppSidebarItem.scss new file mode 100644 index 000000000..2812983ed --- /dev/null +++ b/src/components/specific/app/app-sidebar/app-sidebar-item/AppSidebarItem.scss @@ -0,0 +1,51 @@ +.app-sidebar-item { + display: flex; + justify-content: center; + + &__target { + display: flex; + justify-content: center; + align-items: center; + width: 40px; + height: 40px; + padding: 0; + border: none; + border-radius: 10px; + background-color: transparent; + color: var(--color-granite-light); + cursor: pointer; + text-decoration: none; + transition: + background-color 0.2s ease, + color 0.2s ease; + + &:hover { + background-color: var(--color-tertiary-lightest, #f7f7f7); + color: var(--color-primary); + } + + &.router-link-active { + background-color: var(--color-primary); + color: var(--color-white); + } + } + + &__icon { + position: relative; + display: flex; + justify-content: center; + align-items: center; + line-height: 0; + } + + &__notif { + position: absolute; + top: -4px; + right: -4px; + width: 7px; + height: 7px; + border-radius: 50%; + border: 1px solid var(--color-white); + background-color: var(--color-high); + } +} diff --git a/src/components/specific/app/app-sidebar/app-sidebar-item/AppSidebarItem.vue b/src/components/specific/app/app-sidebar/app-sidebar-item/AppSidebarItem.vue new file mode 100644 index 000000000..120e5b7b0 --- /dev/null +++ b/src/components/specific/app/app-sidebar/app-sidebar-item/AppSidebarItem.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/src/components/specific/app/go-back-button/GoBackButton.vue b/src/components/specific/app/go-back-button/GoBackButton.vue index a4740779a..5e40aa823 100644 --- a/src/components/specific/app/go-back-button/GoBackButton.vue +++ b/src/components/specific/app/go-back-button/GoBackButton.vue @@ -1,16 +1,6 @@