fcb924d3a5
* refactor WIP * Button design changes * FE2 FormButton Updates * ts composition api * CommonTextLink Changes * CommonTextLink prop updates * Add disabled styles * WIP * Design system updates * Colour Updates * New Text Styles. Initial FE2 changes * More fe2 styling classes * Minor update * Minor update * Fix build * More updates for discussion * More styling updates * Minor updates to inputs * Revert change to size options * More text updates * More font class swapping * Revert dui3 changes * Confirmed Lineheights * Add story files for new text styles * Minor copy changes * Minor typo * Revert variant>color * New Colours WIP * andrew/web-1371-misalignment-in-account-dropdown * andrew/web-1374-settings-text-styles-are-not-right * andrew/web-1375-nav-texts-should-be-14px * andrew/web-1376-decrease-size-of-versions-header * andrew/web-1377-version-card-title * Updates * semibold>medium * Colour updates * Sizing updates * Colour updates * Colour updates * Measure mode * Updates * Fix build * Fix build * WIP Updates * Changes from PR * Updated login, registration and reset password styling * Make share dropdown bg white * Updated viewer titles * Fix: Resize panel highlight color in the viewer should be blue * Fix: Blue + Add link in Models. And other blue links in Viewer * Add labelPosition Prop. Fix Button stories * Updated CommonLink to remove default underline * Add Highlight Color * Card updates from Michal * Updated discussion icon on version card * Small tweaks to version card * Small tweaks to version card * Fix: Ghost button doesn't have padding * Fix: Write Delete... * Fix: Version hover border color * Updates to Project Card. Updates to PageTabs * Fix: Adjust title in announcement modal * Updates from Comments * Select Background Colour * Fix: Select dropdown color * Improve list view. Improve discussions * Fix: Minor tweaks to onboarding checklist * Fix: Clean up nav * Hide third item when not >md * Change project heading size * Add border to version card * Adjust spacing in dropdowns * Slight change * Update button style in Version card * Tweaked nav menu * Tweaked nav menu * Various styling tweaks * Fix settings modal subheader * Various styling tweaks and fixes * Tweak settings dialog styling * Tweak simple scrollbar * Minor tweaks to model page * Minor tweaks to model page * Minor tweak to login * Tweak discussion card * Tweak settings page * Tweak vertical tabs * Tweak Dialog alignment * Fix some paddings * Change IconVersions to ClockIcon * Tweak spacing between icons * Updates to Card Icons * Bold "connectors" in empty project message * Remove padding in Profile field * Update inline model create * Remove icons from share menu * Updated Delete dialog * Wrong text positioning in alert * Updated copy in dropdown * Change bg to bg-foundation in select dropdown component * Fix merge conflicy * Selection Info title colour * Wrong text class * Update card colours based on call * Update card colours * Update empty state * Input label font weight * Updates to Embed * Various styling fixes * Fix; Viewer panel header styling * Fix; Adjust BG in dev mode list items * Fix; Fix button placement in video modal * Fix: Share menu is not using LayoutMenu * Fix: Buttons clash under filters * Fix: Adjust spacing in selection info * Fix: Adjust gray BG behind model preview images * Fix: No hover cursor on model card * Fix: Align text styling in dev mode and selection info panel * Fix for menu width * Fix mobile problems * Fix Add spacing on new login screens * Revert prose change. Add prose-sm * Text - Use contain for bg image * Fix onboarding screens * Responsive fixes * Fix hydration errors * Added padding to Add Model Dialog * Fix versions buttons * Fix build problem * Changes PRE PR * Final Pre PR Changes * Remove DUI3 change * Fix small issue with dialog after merge conflict * Remove label classes from Visibility Select * Revert changes made in Controls.vue * Remove old-webhooks * Add highlight colours to Storybook * Add v-keyboard-clickable --------- Co-authored-by: Mike Tasset <mike.tasset@gmail.com>
161 lines
4.8 KiB
Vue
161 lines
4.8 KiB
Vue
<template>
|
|
<div
|
|
ref="parentEl"
|
|
class="fixed z-30 left-0 top-0 w-screen h-[100dvh] pointer-events-none overflow-hidden"
|
|
>
|
|
<!--
|
|
Tour Slideshow
|
|
-->
|
|
<TourComment
|
|
v-for="(item, index) in slideshowItems.slice(0, tourItems.length)"
|
|
:key="index"
|
|
:item="item"
|
|
:index="index"
|
|
class="absolute"
|
|
:class="isSmallerOrEqualSm ? 'bottom-0 left-0 w-screen' : ''"
|
|
:style="isSmallerOrEqualSm ? undefined : item.style"
|
|
:show-controls="item.showControls"
|
|
@skip="finishSlideshow()"
|
|
>
|
|
<Component :is="tourItems[index]" />
|
|
</TourComment>
|
|
<!-- In case the bubble is closed by the user, we need to display something -->
|
|
<Transition
|
|
enter-from-class="opacity-0"
|
|
leave-to-class="opacity-0"
|
|
enter-active-class="transition duration-300"
|
|
leave-active-class="transition duration-300"
|
|
>
|
|
<div
|
|
v-show="!hasOpenComments"
|
|
class="fixed bottom-0 left-0 w-full h-28 flex align-center p-10 items-center justify-center space-x-2 pointer-events-auto"
|
|
>
|
|
<FormButton size="sm" color="outline" rounded @click="finishSlideshow()">
|
|
Skip
|
|
</FormButton>
|
|
<FormButton
|
|
size="lg"
|
|
:icon-right="ArrowRightIcon"
|
|
rounded
|
|
class="shadow-md"
|
|
@click="resumeSlideshow()"
|
|
>
|
|
Resume tour
|
|
</FormButton>
|
|
</div>
|
|
</Transition>
|
|
</div>
|
|
</template>
|
|
<script setup lang="ts">
|
|
// Disclaimer, not the cleanest code.
|
|
import type { Nullable } from '@speckle/shared'
|
|
import type { Vector3 } from 'three'
|
|
import { items as slideshowItemsRaw } from '~~/lib/tour/slideshowItems'
|
|
import { ArrowRightIcon } from '@heroicons/vue/24/solid'
|
|
import { useViewerAnchoredPoints } from '~~/lib/viewer/composables/anchorPoints'
|
|
|
|
// Slideshow component imports
|
|
import FirstTip from '~~/components/tour/content/FirstTip.vue'
|
|
import BasicViewerNavigation from '~~/components/tour/content/BasicViewerNavigation.vue'
|
|
import OverlayModel from '~~/components/tour/content/OverlayModel.vue'
|
|
import { useCameraUtilities } from '~~/lib/viewer/composables/ui'
|
|
import { useMixpanel } from '~~/lib/core/composables/mp'
|
|
import { useViewerTour } from '~/lib/viewer/composables/tour'
|
|
|
|
const emit = defineEmits(['next'])
|
|
|
|
const tourStage = useViewerTour()
|
|
const { zoom, setView } = useCameraUtilities()
|
|
|
|
// Drives the amount of slideshow items
|
|
const tourItems = [FirstTip, BasicViewerNavigation, OverlayModel /* , LastTip */]
|
|
|
|
// Ensuring we don't have more 3d points than actual tips by slicing the array
|
|
// TODO: should check the other way around, but since this part is so handcrafted
|
|
// doesn't make much sense.
|
|
const slideshowItems = ref(slideshowItemsRaw.slice(0, tourItems.length))
|
|
provide('slideshowItems', slideshowItems)
|
|
|
|
const lastOpenIndex = ref(0)
|
|
const mp = useMixpanel()
|
|
|
|
// const isSmallerOrEqualSm = computed(() => breakpoints.smallerOrEqual('sm').value)
|
|
const { isSmallerOrEqualSm } = useIsSmallerOrEqualThanBreakpoint()
|
|
|
|
const next = (currentIndex: number) => {
|
|
if (currentIndex + 1 >= slideshowItems.value.length) {
|
|
finishSlideshow()
|
|
return
|
|
}
|
|
slideshowItems.value[currentIndex].expanded = false
|
|
slideshowItems.value[currentIndex].viewed = true
|
|
slideshowItems.value[currentIndex + 1].expanded = true
|
|
lastOpenIndex.value = currentIndex + 1
|
|
mp.track('Onboarding Action', {
|
|
type: 'action',
|
|
name: 'slideshow',
|
|
action: 'next',
|
|
step: currentIndex
|
|
})
|
|
}
|
|
|
|
const prev = (currentIndex: number) => {
|
|
if (currentIndex - 1 < 0) return
|
|
slideshowItems.value[currentIndex].expanded = false
|
|
slideshowItems.value[currentIndex - 1].expanded = true
|
|
lastOpenIndex.value = currentIndex - 1
|
|
mp.track('Onboarding Action', {
|
|
type: 'action',
|
|
name: 'slideshow',
|
|
action: 'previous',
|
|
step: currentIndex
|
|
})
|
|
}
|
|
|
|
const toggle = (index: number) => {
|
|
if (!slideshowItems.value[index]) return
|
|
slideshowItems.value[index].expanded = !slideshowItems.value[index].expanded
|
|
if (slideshowItems.value[index].expanded) lastOpenIndex.value = index
|
|
|
|
mp.track('Onboarding Action', {
|
|
type: 'action',
|
|
name: 'slideshow',
|
|
action: 'toggle',
|
|
step: index
|
|
})
|
|
}
|
|
|
|
provide('slideshowActions', { next, prev, toggle })
|
|
|
|
const hasOpenComments = computed(() => {
|
|
return slideshowItems.value.some((item) => item.expanded === true)
|
|
})
|
|
|
|
const parentEl = ref(null as Nullable<HTMLElement>)
|
|
useViewerAnchoredPoints({
|
|
parentEl,
|
|
points: slideshowItems,
|
|
pointLocationGetter: (c) => c.location as Vector3,
|
|
updatePositionCallback: (c, res) => {
|
|
c.style = {
|
|
...c.style,
|
|
...res.style,
|
|
display: 'inline-block',
|
|
transition: 'all 0.1s ease'
|
|
}
|
|
}
|
|
})
|
|
|
|
const finishSlideshow = () => {
|
|
zoom()
|
|
setView('left')
|
|
tourStage.showNavbar.value = true
|
|
tourStage.showControls.value = true
|
|
emit('next')
|
|
}
|
|
|
|
const resumeSlideshow = () => {
|
|
slideshowItems.value[lastOpenIndex.value].expanded = true
|
|
}
|
|
</script>
|