Blocks
Last updated 3 months ago
Sidebar
Contents
The sidebar is a primary navigation component that provides users with quick access to different sections of the platform. It enhances usability by keeping essential links organized and accessible.
Modern Sidebar
A sleek, compact design optimized for modern UI experiences. It includes collapsible sections, icons, and highlighted active states for improved usability.
View Mode

HTML
<div class="col-lg sidebar-col">
<div class="offcanvas offcanvas-start sidebar-offcanvas" tabindex="-1" id="sidebar" aria-labelledby="offcanvasExampleLabel">
<aside class="sidebar">
<a class="sidebar__logo-area" href="index.html">
<img class="sidebar__logo-img" src="images/logo.svg">
<div class="sidebar__logo-info">
<span class="sidebar__logo-title">رقــمــن</span>
<span class="sidebar__logo-desc">
<span>مُعرّف المنصة :</span>
<span class="text-english">82384</span>
</span>
</div>
<button class="sidebar__close-btn" data-bs-dismiss="offcanvas" aria-label="Close">
<span class="tticon-x"></span>
</button>
</a>
<div class="btn-group w-100" role="group" aria-label="Basic example">
<a class="btn btn-secondary btn-lg" href="#!" target="_blank">
<span class="tticon-arrow-up-left-bold btn-icon"></span>
معاينة المنصة
</a>
<button class="btn btn-secondary btn-lg flex-grow-0" type="button" data-bs-toggle="tooltip" data-bs-title="نسخ" data-bs-offset="0,4">
<span class="tticon-copy-doc btn-icon"></span>
</button>
</div>
<div class="sidebar__content">
<ul class="sidebar__menu">
<li class="sidebar__menu-item sidebar__menu-item--active ${active1}">
<a class="sidebar__menu-link" href="index.html">
<span class="tticon-home-charts sidebar__menu-icon"></span>
لوحة القيادة
</a>
</li>
<li class="sidebar__menu-item ${active2}">
<a class="sidebar__menu-link" href="orders-01.html">
<span class="tticon-docs sidebar__menu-icon"></span>
الطلبات
</a>
</li>
<li class="sidebar__menu-item ${active3}">
<a class="sidebar__menu-link" href="services.html">
<span class="tticon-categories sidebar__menu-icon"></span>
إدارة الخدمات
</a>
</li>
<li class="sidebar__menu-item"><hr class="sidebar__menu-separator"></li>
<li class="sidebar__menu-item ${active4}">
<a class="sidebar__menu-link" href="users-01.html">
<span class="tticon-users-two sidebar__menu-icon"></span>
المستفيدين
</a>
</li>
<li class="sidebar__menu-item ${active5}">
<a class="sidebar__menu-link" href="categories.html">
<span class="tticon-tag sidebar__menu-icon"></span>
الفئات المستفيدة
</a>
</li>
<li class="sidebar__menu-item ${active6}">
<a class="sidebar__menu-link" href="structure.html">
<span class="tticon-git sidebar__menu-icon"></span>
الهيكلة الإدارية
</a>
</li>
<li class="sidebar__menu-item"><hr class="sidebar__menu-separator"></li>
<li class="sidebar__menu-item ${active7}">
<a class="sidebar__menu-link" href="invoices.html">
<span class="tticon-receipt sidebar__menu-icon"></span>
الفواتير والمدفوعات
</a>
</li>
<li class="sidebar__menu-item ${active8}">
<a class="sidebar__menu-link" href="admins-01.html">
<span class="tticon-user-circle sidebar__menu-icon"></span>
المستخدمين
</a>
</li>
<li class="sidebar__menu-item"><hr class="sidebar__menu-separator"></li>
<li class="sidebar__menu-item ${active9}">
<a class="sidebar__menu-link" href="forms.html">
<span class="tticon-doc-edit sidebar__menu-icon"></span>
النماذج
</a>
</li>
<li class="sidebar__menu-item ${active10}">
<a class="sidebar__menu-link" href="pages.html">
<span class="tticon-sticker-note sidebar__menu-icon"></span>
صفحات أخرى
</a>
</li>
<li class="sidebar__menu-item ${active11}">
<a class="sidebar__menu-link" href="articles.html">
<span class="tticon-doc-file sidebar__menu-icon"></span>
المقالات
</a>
</li>
<li class="sidebar__menu-item d-lg-none"><hr class="sidebar__menu-separator"></li>
<li class="sidebar__menu-item d-lg-none ${active12}">
<a class="sidebar__menu-link" href="layout-01.html">
<span class="tticon-grid-vertical sidebar__menu-icon"></span>
تنسيق المنصة
</a>
</li>
<li class="sidebar__menu-item d-lg-none ${active13}">
<a class="sidebar__menu-link" href="setting-01.html">
<span class="tticon-gear sidebar__menu-icon"></span>
الإعدادات
</a>
</li>
</ul>
<div class="sidebar__copyright-area">
<span class="sidebar__copyright-text">
<span class="text-english">© 2024</span>
<span>رقمن.</span>
</span>
<span class="sidebar__copyright-text">جميع الحقوق محفوظة.</span>
<ul class="meta-list sidebar__meta-list">
<li class="meta-list__item">
<a class="meta-list__item-link" href="#!">الخصوصية والأمان</a>
</li>
<li class="meta-list__item">
<a class="meta-list__item-link" href="#!">شروط الإستخدام</a>
</li>
</ul>
</div>
</div>
</aside>
</div>
</div>
<!-- Usage Example -->
<TheSidebarMenu :logo="logo" :title="title" :platform-id="platformId" />
<script setup>
import { ref } from 'vue'
const logo = ref('/images/logo-light.svg')
const title = ref('رقمن')
const platformId = ref('123421')
</script>
<!-- Vue Component Code Block -->
<template>
<div class="col-lg sidebar-col">
<div
class="offcanvas offcanvas-start sidebar-offcanvas"
:class="{ 'sidebar-col--classic': classic }"
tabindex="-1"
id="sidebar"
aria-labelledby="offcanvasExampleLabel"
>
<aside class="sidebar">
<div class="sidebar__logo-area">
<img class="sidebar__logo-img" :src="logo" :alt="title" />
<div class="sidebar__logo-info">
<span class="sidebar__logo-title">{{ title }}</span>
<span class="sidebar__logo-desc">مُعرّف المنصة : {{ platformId }}</span>
</div>
<button class="sidebar__close-btn" data-bs-dismiss="offcanvas" aria-label="Close">
<span class="tticon-x"></span>
</button>
</div>
<div class="btn-group w-100" role="group" aria-label="Basic example">
<a class="btn btn-secondary btn-lg" target="_blank" href="/">
<span class="tticon-arrow-up-left btn-icon"></span>معاينة المنصة
</a>
<button class="btn btn-secondary btn-lg flex-grow-0" @click="copyRootUrl" type="button">
<span class="tticon-copy-doc btn-icon"></span>
</button>
</div>
<div class="sidebar__content">
<ul class="sidebar__menu">
<TheSidebarMenuItem
v-for="item in menuItems"
:key="item.name"
:to="item.path"
:icon="item.meta.icon"
:name="item.name"
:title="item.meta.title"
:is-url="item.isUrl"
:is-active="item.name === route.name"
:has-separator-after="item.meta.hasSeparatorAfter"
:allowed-user-types="item.meta.allowedUserTypes"
/>
</ul>
<div class="sidebar__copyright-area">
<span class="sidebar__copyright-text">
<span class="text-english">© {{ new Date().getFullYear() }}</span>
<span>{{ title }}</span>
</span>
<span class="sidebar__copyright-text">جميع الحقوق محفوظة.</span>
<ul class="meta-list sidebar__meta-list">
<li class="meta-list__item">
<a class="meta-list__item-link" :href="privacyPolicyUrl">الخصوصية والأمان</a>
</li>
<li class="meta-list__item">
<a class="meta-list__item-link" :href="termsAndConditionsUrl">شروط الإستخدام</a>
</li>
</ul>
</div>
</div>
</aside>
</div>
</div>
</template>
<script setup>
import { computed } from 'vue'
import { useRoute } from 'vue-router'
import SideMenuRoutes from './SideMenuRoutes'
import TheSidebarMenuItem from './TheSidebarMenuItem.vue'
const route = useRoute()
defineProps({
logo: String,
title: String,
platformId: String,
classic: Boolean,
privacyPolicyUrl: String,
termsAndConditionsUrl: String,
})
const menuItems = computed(() => {
const appView = SideMenuRoutes.find((r) => r.name === 'app-view')
return appView?.children || []
})
const copyRootUrl = async () => {
try {
await navigator.clipboard.writeText(window.location.origin)
} catch (err) {
console.error(err)
}
}
</script>
<!-- SideMenuRoutes Component Code Block -->
const SideMenuRoutes = [{
path: '/',
name: 'app-view',
meta: {
sidebar: true,
requiresAuth: true,
permissions: [],
breadcrumb: "لوحة المعلومات",
},
// component: App,
children: [{
name: 'home-view',
path: '/admin/',
component: null, // component here
meta: {
sidebar: true,
title: "لوحة القيادة",
icon: 'tticon-home-charts',
},
},
]
}]
export default SideMenuRoutes
<!-- TheSidebarMenuItem Component Code Block -->
<template>
<li class="sidebar__menu-item" :class="{ 'sidebar__menu-item--active': isActive }">
<router-link
v-if="!isUrl"
class="sidebar__menu-link"
:to="to"
:data-v-step="'sidebar-item-' + name"
>
<span class="sidebar__menu-icon" :class="[icon]"></span>{{ title }}
</router-link>
<a v-else target="_blank" :href="to" :data-v-step="'sidebar-item-' + name">
<i :class="[icon]"></i>
<span>{{ title }}</span>
</a>
</li>
<li v-if="hasSeparatorAfter" class="sidebar__menu-item">
<hr class="sidebar__menu-separator" />
</li>
</template>
<script setup>
defineProps({
to: {
type: String,
required: true,
},
allowedUserTypes: {
required: true,
},
icon: {
type: String,
default: '',
},
title: {
type: String,
required: true,
},
name: {
type: String,
required: true,
},
isActive: {
type: Boolean,
default: false,
},
isUrl: {
type: Boolean,
default: false,
},
hasSeparatorAfter: {
type: Boolean,
default: false,
},
})
</script>
Classic Sidebar
A traditional sidebar layout with a full-width design, detailed labels, and a structured menu hierarchy.
View Mode

HTML
<div class="col-lg sidebar-col sidebar-col--classic">
<div class="offcanvas offcanvas-start sidebar-offcanvas" tabindex="-1" id="sidebar" aria-labelledby="offcanvasExampleLabel">
<aside class="sidebar">
<a class="sidebar__logo-area" href="index.html">
<img class="sidebar__logo-img" src="images/logo-light.svg">
<div class="sidebar__logo-info">
<span class="sidebar__logo-title">رقــمــن</span>
<span class="sidebar__logo-desc">
<span>مُعرّف المنصة :</span>
<span class="text-english">82384</span>
</span>
</div>
<button class="sidebar__close-btn" data-bs-dismiss="offcanvas" aria-label="Close">
<span class="tticon-x"></span>
</button>
</a>
<div class="btn-group w-100" role="group" aria-label="Basic example">
<a class="btn btn-secondary btn-lg" href="#!" target="_blank">
<span class="tticon-arrow-up-left btn-icon"></span>
معاينة المنصة
</a>
<button class="btn btn-secondary btn-lg flex-grow-0" type="button">
<span class="tticon-copy-doc btn-icon"></span>
</button>
</div>
<ul class="sidebar__menu">
<li class="sidebar__menu-item sidebar__menu-item--active">
<a class="sidebar__menu-link" href="index.html">
<span class="tticon-home-charts sidebar__menu-icon"></span>
لوحة القيادة
</a>
</li>
<li class="sidebar__menu-item">
<a class="sidebar__menu-link" href="orders-01.html">
<span class="tticon-docs sidebar__menu-icon"></span>
الطلبات
</a>
</li>
<li class="sidebar__menu-item">
<a class="sidebar__menu-link" href="services.html">
<span class="tticon-categories sidebar__menu-icon"></span>
إدارة الخدمات
</a>
</li>
<li class="sidebar__menu-item"><hr class="sidebar__menu-separator"></li>
<li class="sidebar__menu-item">
<a class="sidebar__menu-link" href="users-01.html">
<span class="tticon-users-two sidebar__menu-icon"></span>
المستفيدين
</a>
</li>
<li class="sidebar__menu-item">
<a class="sidebar__menu-link" href="categories.html">
<span class="tticon-tag sidebar__menu-icon"></span>
الفئات المستفيدة
</a>
</li>
<li class="sidebar__menu-item">
<a class="sidebar__menu-link" href="structure.html">
<span class="tticon-git sidebar__menu-icon"></span>
الهيكلة الإدارية
</a>
</li>
<li class="sidebar__menu-item"><hr class="sidebar__menu-separator"></li>
<li class="sidebar__menu-item">
<a class="sidebar__menu-link" href="invoices.html">
<span class="tticon-receipt sidebar__menu-icon"></span>
الفواتير والمدفوعات
</a>
</li>
<li class="sidebar__menu-item">
<a class="sidebar__menu-link" href="admins-01.html">
<span class="tticon-user-circle sidebar__menu-icon"></span>
المستخدمين
</a>
</li>
<li class="sidebar__menu-item"><hr class="sidebar__menu-separator"></li>
<li class="sidebar__menu-item">
<a class="sidebar__menu-link" href="forms.html">
<span class="tticon-doc-edit sidebar__menu-icon"></span>
النماذج
</a>
</li>
<li class="sidebar__menu-item">
<a class="sidebar__menu-link" href="pages.html">
<span class="tticon-sticker-note sidebar__menu-icon"></span>
صفحات أخرى
</a>
</li>
<li class="sidebar__menu-item">
<a class="sidebar__menu-link" href="articles.html">
<span class="tticon-doc-file sidebar__menu-icon"></span>
المقالات
</a>
</li>
<li class="sidebar__menu-item d-xxl-none"><hr class="sidebar__menu-separator"></li>
<li class="sidebar__menu-item d-xxl-none ${active11}">
<a class="sidebar__menu-link" href="layout-01.html">
<span class="tticon-grid-vertical sidebar__menu-icon"></span>
تنسيق المنصة
</a>
</li>
<li class="sidebar__menu-item d-xxl-none ${active11}">
<a class="sidebar__menu-link" href="setting-01.html">
<span class="tticon-gear sidebar__menu-icon"></span>
الإعدادات
</a>
</li>
</ul>
<div class="sidebar__copyright-area">
<span class="sidebar__copyright-text">
<span class="text-english">© 2024</span>
<span>رقمن.</span>
</span>
<span class="sidebar__copyright-text">جميع الحقوق محفوظة.</span>
<ul class="meta-list sidebar__meta-list">
<li class="meta-list__item">
<a class="meta-list__item-link" href="#!">الخصوصية والأمان</a>
</li>
<li class="meta-list__item">
<a class="meta-list__item-link" href="#!">شروط الإستخدام</a>
</li>
</ul>
</div>
</aside>
</div>
</div>
<!-- Usage Example -->
<TheSidebarMenu :classic="true" :logo="logo" :title="title" :platform-id="platformId" />
<script setup>
import { ref } from 'vue'
const logo = ref('/images/logo-light.svg')
const title = ref('رقمن')
const platformId = ref('123421')
</script>
<!-- Vue Component Code Block -->
<template>
<div class="col-lg sidebar-col">
<div
class="offcanvas offcanvas-start sidebar-offcanvas"
:class="{ 'sidebar-col--classic': classic }"
tabindex="-1"
id="sidebar"
aria-labelledby="offcanvasExampleLabel"
>
<aside class="sidebar">
<div class="sidebar__logo-area">
<img class="sidebar__logo-img" :src="logo" :alt="title" />
<div class="sidebar__logo-info">
<span class="sidebar__logo-title">{{ title }}</span>
<span class="sidebar__logo-desc">مُعرّف المنصة : {{ platformId }}</span>
</div>
<button class="sidebar__close-btn" data-bs-dismiss="offcanvas" aria-label="Close">
<span class="tticon-x"></span>
</button>
</div>
<div class="btn-group w-100" role="group" aria-label="Basic example">
<a class="btn btn-secondary btn-lg" target="_blank" href="/">
<span class="tticon-arrow-up-left btn-icon"></span>معاينة المنصة
</a>
<button class="btn btn-secondary btn-lg flex-grow-0" @click="copyRootUrl" type="button">
<span class="tticon-copy-doc btn-icon"></span>
</button>
</div>
<div class="sidebar__content">
<ul class="sidebar__menu">
<TheSidebarMenuItem
v-for="item in menuItems"
:key="item.name"
:to="item.path"
:icon="item.meta.icon"
:name="item.name"
:title="item.meta.title"
:is-url="item.isUrl"
:is-active="item.name === route.name"
:has-separator-after="item.meta.hasSeparatorAfter"
:allowed-user-types="item.meta.allowedUserTypes"
/>
</ul>
<div class="sidebar__copyright-area">
<span class="sidebar__copyright-text">
<span class="text-english">© {{ new Date().getFullYear() }}</span>
<span>{{ title }}</span>
</span>
<span class="sidebar__copyright-text">جميع الحقوق محفوظة.</span>
<ul class="meta-list sidebar__meta-list">
<li class="meta-list__item">
<a class="meta-list__item-link" :href="privacyPolicyUrl">الخصوصية والأمان</a>
</li>
<li class="meta-list__item">
<a class="meta-list__item-link" :href="termsAndConditionsUrl">شروط الإستخدام</a>
</li>
</ul>
</div>
</div>
</aside>
</div>
</div>
</template>
<script setup>
import { computed } from 'vue'
import { useRoute } from 'vue-router'
import SideMenuRoutes from './SideMenuRoutes'
import TheSidebarMenuItem from './TheSidebarMenuItem.vue'
const route = useRoute()
defineProps({
logo: String,
title: String,
platformId: String,
classic: Boolean,
privacyPolicyUrl: String,
termsAndConditionsUrl: String,
})
const menuItems = computed(() => {
const appView = SideMenuRoutes.find((r) => r.name === 'app-view')
return appView?.children || []
})
const copyRootUrl = async () => {
try {
await navigator.clipboard.writeText(window.location.origin)
} catch (err) {
console.error(err)
}
}
</script>
<!-- SideMenuRoutes Component Code Block -->
const SideMenuRoutes = [{
path: '/',
name: 'app-view',
meta: {
sidebar: true,
requiresAuth: true,
permissions: [],
breadcrumb: "لوحة المعلومات",
},
// component: App,
children: [{
name: 'home-view',
path: '/admin/',
component: null, // component here
meta: {
sidebar: true,
title: "لوحة القيادة",
icon: 'tticon-home-charts',
},
},
]
}]
export default SideMenuRoutes
<!-- TheSidebarMenuItem Component Code Block -->
<template>
<li class="sidebar__menu-item" :class="{ 'sidebar__menu-item--active': isActive }">
<router-link
v-if="!isUrl"
class="sidebar__menu-link"
:to="to"
:data-v-step="'sidebar-item-' + name"
>
<span class="sidebar__menu-icon" :class="[icon]"></span>{{ title }}
</router-link>
<a v-else target="_blank" :href="to" :data-v-step="'sidebar-item-' + name">
<i :class="[icon]"></i>
<span>{{ title }}</span>
</a>
</li>
<li v-if="hasSeparatorAfter" class="sidebar__menu-item">
<hr class="sidebar__menu-separator" />
</li>
</template>
<script setup>
defineProps({
to: {
type: String,
required: true,
},
allowedUserTypes: {
required: true,
},
icon: {
type: String,
default: '',
},
title: {
type: String,
required: true,
},
name: {
type: String,
required: true,
},
isActive: {
type: Boolean,
default: false,
},
isUrl: {
type: Boolean,
default: false,
},
hasSeparatorAfter: {
type: Boolean,
default: false,
},
})
</script>