Vertical Timeline UI

Jesse Roberts:
I would like to implement something like this: https://vuetifyjs.com/en/components/timelines/#opposite are there any prebuilt components in BF for this, or do I need to install the component separately?


Delfs:
this is fairly easy to build. do you want it to look exactly the same (well close)?
(with alternating events)


Delfs:
V1, zero code

image


Jesse Roberts:
nice. ok…no need for a component when BFA just pulls it together


Delfs:
give me a sec, almost there lol

image


Jesse Roberts:
indeed


Delfs:

image


Delfs:


    <div class="relative">
        <!-- Timeline -->
        <div class="absolute w-0.5 bg-gray-300 h-full left-1/2 transform -translate-x-1/2"></div>
        <!-- Events -->
        <div v-for="(event, index) in model.events" :key="index" class="mb-8 flex justify-between items-center w-full right-timeline">
            <!-- Event Content Left -->
            <div v-if="index % 2 === 0" class="order-1 w-5/12">
                <!-- Event Details -->
                <div class="bg-white rounded-lg shadow-xl w-full px-6 py-4">
                    <h3 class="mb-3 font-bold text-gray-800 text-xl">{{ event.title }}</h3>
                    <p class="text-sm leading-snug tracking-wide text-gray-900 text-opacity-100">{{ event.description }}</p>
                </div>
            </div>
            <!-- Timeline Dot -->
            <div class="z-20 flex items-center order-1   bg-blue-100  rounded-full">

            </div>
            <!-- Timeline Dot -->
            <div class="z-20 flex items-center order-1 bg-gray-800 shadow-xl w-8 h-8 rounded-full absolute left-1/2 transform -translate-x-1/2">
                <h1 class="mx-auto font-semibold text-lg text-white">{{ index + 1 }}</h1>
            </div>
            <!-- Event Content Right -->
            <div v-if="index % 2 !== 0" class="order-1 w-5/12">
                <!-- Event Details -->
                <div class="bg-white rounded-lg shadow-xl w-full px-6 py-4">
                    <h3 class="mb-3 font-bold text-gray-800 text-xl">{{ event.title }}</h3>
                    <p class="text-sm leading-snug tracking-wide text-gray-900 text-opacity-100">{{ event.description }}</p>
                </div>
            </div>
        </div>
    </div>

example json

{
    "events": [{
        "date": "2023-03-01",
        "description": "First contact with the client to introduce the company and services.",
        "label": "Initial Contact",
        "title": "Initial Outreach to Potential Client"
    }, {
        "date": "2023-03-08",
        "description": "Second meeting to discuss client needs and potential solutions.",
        "label": "Follow-up",
        "title": "Follow-up Meeting"
    }, {
        "date": "2023-03-15",
        "description": "Submission of a detailed proposal outlining the services and pricing.",
        "label": "Proposal Submission",
        "title": "Submit Proposal"
    }, {
        "date": "2023-03-22",
        "description": "Negotiations on proposal terms and pricing.",
        "label": "Negotiation",
        "title": "Negotiation Phase"
    }, {
        "date": "2023-03-29",
        "description": "Final agreement and signing of the contract to close the deal.",
        "label": "Closing",
        "title": "Closing the Deal"
    }, {
        "date": "2023-04-05",
        "description": "Follow-up with the client after the sale to ensure satisfaction and discuss future services.",
        "label": "Follow-up",
        "title": "Post-Sale Follow-up"
    }]
}

Jesse Roberts:
pretty good! what’s the font you are using there?


Delfs:
default, maybe inter?


Delfs:
@Jesse Roberts There is a public example now ‘vertical timeline’
https://christinatest.fmbetterforms.com/#/form/FR_5D8BF1FB-134A-4E4A-AFC3-752AA666FF37

Merry Christmas!