Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
7d07bcb
Mkaing the studionavigationtab
Prashant-thakur77 Dec 21, 2025
5d90ece
Updated
Prashant-thakur77 Dec 21, 2025
d43a8db
Updated
Prashant-thakur77 Dec 21, 2025
21025e9
Updated
Prashant-thakur77 Dec 21, 2025
57bc907
Updated
Prashant-thakur77 Dec 21, 2025
2015bdc
Updated
Prashant-thakur77 Dec 21, 2025
ebe5c29
Update
Prashant-thakur77 Dec 23, 2025
5203327
Update
Prashant-thakur77 Dec 23, 2025
c710316
Update styles
Prashant-thakur77 Dec 23, 2025
54c85eb
Updated sidepanel styles
Prashant-thakur77 Dec 25, 2025
50fa709
Updated sidepanel styles
Prashant-thakur77 Dec 25, 2025
95fc646
Updated sidepanel styles
Prashant-thakur77 Dec 25, 2025
7e1ec05
Updated sidepanel styles
Prashant-thakur77 Dec 25, 2025
34c8a02
Updated sidepanel styles
Prashant-thakur77 Dec 25, 2025
bc124a2
Updated sidepanel styles
Prashant-thakur77 Dec 25, 2025
8d53da0
Updated sidepanel styles
Prashant-thakur77 Dec 25, 2025
f30205b
Updated styles
Prashant-thakur77 Dec 26, 2025
2138fd1
Updated
Prashant-thakur77 Dec 27, 2025
143a1a4
Updated styles for tabs
Prashant-thakur77 Jan 13, 2026
101b323
Updated styles for tabs
Prashant-thakur77 Jan 13, 2026
14173b2
Updated styles for tabs
Prashant-thakur77 Jan 13, 2026
ed5b67d
Updated styles for tabs
Prashant-thakur77 Jan 13, 2026
730ada4
Updated styles of sidepanel
Prashant-thakur77 Jan 13, 2026
4c3496f
Updated styles of sidepanel
Prashant-thakur77 Jan 13, 2026
f5e56c9
Updated sidepanel styles
Prashant-thakur77 Jan 14, 2026
fc1acdf
Updated sidepanel styles
Prashant-thakur77 Jan 14, 2026
1c5082f
Updated sidepanel styles
Prashant-thakur77 Jan 14, 2026
0bfe43e
Updated sidepanel styles
Prashant-thakur77 Jan 14, 2026
d2ec50f
Added scrollable funcality to tabs
Prashant-thakur77 Jan 14, 2026
4b17df3
Updated the link design
Prashant-thakur77 Jan 14, 2026
443b2a5
Updated the link design
Prashant-thakur77 Jan 14, 2026
56edddb
Updated the link design
Prashant-thakur77 Jan 14, 2026
92bc483
Updated the link design
Prashant-thakur77 Jan 14, 2026
c70d685
Updated the link design
Prashant-thakur77 Jan 14, 2026
920f132
Updated the link design
Prashant-thakur77 Jan 14, 2026
79fa4b6
Updated the title styles
Prashant-thakur77 Jan 14, 2026
e7ba119
Updated the title styles
Prashant-thakur77 Jan 14, 2026
382de7c
Updated the sliding indicator
Prashant-thakur77 Jan 14, 2026
4b6871a
Updated the sliding indicator
Prashant-thakur77 Jan 14, 2026
c716f74
Updated class anmes
Prashant-thakur77 Jan 14, 2026
4d845b9
Updated the tabs container
Prashant-thakur77 Jan 15, 2026
7796ebb
Sliding approach
Prashant-thakur77 Jan 15, 2026
858af8c
Sliding approach
Prashant-thakur77 Jan 15, 2026
2205f10
old approach after review
Prashant-thakur77 Jan 15, 2026
445ccf2
updated code for tabs
Prashant-thakur77 Jan 15, 2026
dc79262
Updated menu styles
Prashant-thakur77 Jan 16, 2026
46afbee
Added StudioPanelOption.vue
Prashant-thakur77 Jan 16, 2026
1ba780d
Added StudioPanelOption.vue
Prashant-thakur77 Jan 16, 2026
3983437
Added StudioPanelOption.vue
Prashant-thakur77 Jan 16, 2026
6af0c90
Added StudioPanelOption.vue
Prashant-thakur77 Jan 16, 2026
c8a54eb
Added StudioPanelOption.vue
Prashant-thakur77 Jan 16, 2026
7004dad
Updated styles
Prashant-thakur77 Jan 16, 2026
2aefb26
Updated the skipnavigationlink functionality
Prashant-thakur77 Jan 16, 2026
5fbb3ea
Removed the padding added to the sie panle modal and rather added tha…
Prashant-thakur77 Jan 16, 2026
ff95e6e
updatedstyles
Prashant-thakur77 Jan 16, 2026
f7d437e
updatedstyles
Prashant-thakur77 Jan 16, 2026
0c1a2de
Updated Catalogfiltercontent to handle padding wihout sidepanelmodal
Prashant-thakur77 Jan 16, 2026
d2383be
Updated boolean
Prashant-thakur77 Jan 16, 2026
9057ce4
Updated the tabtrack method to studionavigation
Prashant-thakur77 Jan 16, 2026
07aee46
Updated the tabtrack method to studionavigation
Prashant-thakur77 Jan 16, 2026
4ab184e
finalising
Prashant-thakur77 Jan 16, 2026
3268fe4
Test file updated
Prashant-thakur77 Jan 16, 2026
49f3990
Test file created
Prashant-thakur77 Jan 17, 2026
21d7a44
Updated test files
Prashant-thakur77 Jan 17, 2026
427fb74
Updated strings
Prashant-thakur77 Jan 17, 2026
74eac84
Test files
Prashant-thakur77 Jan 17, 2026
e32937c
Final updates
Prashant-thakur77 Jan 17, 2026
4910918
Final updates
Prashant-thakur77 Jan 17, 2026
79a0f38
Final updates
Prashant-thakur77 Jan 17, 2026
2427703
Updated class names
Prashant-thakur77 Jan 18, 2026
adb8767
precommit
Prashant-thakur77 Jan 18, 2026
4740318
Added aria-label to the nav
Prashant-thakur77 Jan 20, 2026
fbcf22d
Updated
Prashant-thakur77 Jan 23, 2026
243528f
updated
Prashant-thakur77 Jan 23, 2026
bf31a49
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Jan 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
</template>

<template #default>
<div>
<div style="padding: 24px 32px 16px">
<KRadioButtonGroup>
<KRadioButton
:label="modeLive$()"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -656,6 +656,7 @@
display: flex;
flex-direction: column;
gap: 16px;
padding: 24px 32px 16px;
margin-top: -24px;
line-height: 140%;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
<template>

<div class="filter-panel-content">
<div
class="filter-panel-content"
:style="contentStyles"
>
<div class="filters-container">
<!-- Keyword search -->
<KTextbox
Expand Down Expand Up @@ -99,6 +102,7 @@

import { mapGetters } from 'vuex';
import debounce from 'lodash/debounce';
import useKResponsiveWindow from 'kolibri-design-system/lib/composables/useKResponsiveWindow';
import { RouteNames } from '../../../constants';
import { catalogFilterMixin } from '../mixins';
import LanguageFilter from './LanguageFilter.vue';
Expand All @@ -119,6 +123,12 @@
MultiSelect,
},
mixins: [constantsTranslationMixin, catalogFilterMixin],
setup() {
const { windowIsSmall } = useKResponsiveWindow();
return {
windowIsSmall,
};
},

data() {
return {
Expand Down Expand Up @@ -156,6 +166,14 @@
setKeywords() {
return debounce(this.updateKeywords, 500);
},
contentStyles() {
if (this.windowIsSmall) {
return {
padding: '24px 32px 16px',
};
}
return {};
},
},
watch: {
keywords() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,47 +27,21 @@
{{ isFAQPage ? $tr('frequentlyAskedQuestions') : $tr('libraryTitle') }}
</VToolbarTitle>
</VToolbar>
<AppBar v-else>
<template
v-if="loggedIn"
#tabs
>
<VTab
v-for="listType in lists"
:key="listType.id"
:to="getChannelLink(listType)"
@click="trackTabClick(listType)"
>
<VBadge
:value="invitationsByListCounts[listType]"
color="black"
>
<template #badge>
<span>{{ $formatNumber(invitationsByListCounts[listType]) }}</span>
</template>
<span>{{ translateConstant(listType) }}</span>
</VBadge>
</VTab>
<VTab
:to="catalogLink"
@click="publicTabClick"
>
{{ $tr('catalog') }}
</VTab>
<VTab
:to="channelSetLink"
@click="channelSetsTabClick"
>
{{ $tr('channelSets') }}
</VTab>
</template>
</AppBar>

<StudioNavigation
v-else
:tabs="navigationTabs"
/>

<VContent>
<StudioOfflineAlert
v-if="!isCatalogPage"
:offset="toolbarHeight"
/>
<VContainer
id="main"
role="main"
tabindex="-1"
fluid
class="main-container pa-0"
:style="`height: calc(100vh - ${contentOffset}px); margin-top: ${offline ? 48 : 0}px;`"
Expand Down Expand Up @@ -137,7 +111,7 @@
import { ChannelListTypes } from 'shared/constants';
import { constantsTranslationMixin, routerMixin } from 'shared/mixins';
import GlobalSnackbar from 'shared/views/GlobalSnackbar';
import AppBar from 'shared/views/AppBar';
import StudioNavigation from 'shared/views/StudioNavigation';
import StudioOfflineAlert from 'shared/views/StudioOfflineAlert.vue';
import PolicyModals from 'shared/views/policies/PolicyModals';

Expand All @@ -159,7 +133,7 @@
export default {
name: 'ChannelListIndex',
components: {
AppBar,
StudioNavigation,
ChannelInvitation,
ChannelListAppError,
GlobalSnackbar,
Expand All @@ -174,6 +148,41 @@
}),
...mapGetters(['loggedIn']),
...mapGetters('channelList', ['invitations']),

navigationTabs() {
if (!this.loggedIn) return [];

const tabs = [];

this.lists.forEach(listType => {
tabs.push({
id: listType,
label: this.translateConstant(listType),
to: this.getChannelLink(listType),
badgeValue: this.invitationsByListCounts[listType] || 0,
analyticsLabel: ListTypeToAnalyticsLabel[listType],
});
});

tabs.push({
id: 'catalog',
label: this.$tr('catalog'),
to: this.catalogLink,
badgeValue: 0,
analyticsLabel: 'PUBLIC',
});

tabs.push({
id: CHANNEL_SETS,
label: this.$tr('channelSets'),
to: this.channelSetLink,
badgeValue: 0,
analyticsLabel: 'CHANNEL_SETS',
});

return tabs;
},

fullPageError() {
return this.$store.state.errors.fullPageError;
},
Expand Down Expand Up @@ -227,12 +236,6 @@
homeLink() {
return this.libraryMode ? window.Urls.base() : window.Urls.channels();
},
publicTabClick() {
return this.trackTabClick.bind(this, ChannelListTypes.PUBLIC);
},
channelSetsTabClick() {
return this.trackTabClick.bind(this, CHANNEL_SETS);
},
},
watch: {
$route(route) {
Expand Down Expand Up @@ -289,9 +292,6 @@
this.updateTabTitle(title);
}
},
trackTabClick(list) {
this.$analytics.trackClick('channel_list', ListTypeToAnalyticsLabel[list]);
},
},
$trs: {
channelSets: 'Collections',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
<div
class="header-content"
:style="{
flexDirection: closeButtonIconType === 'close' ? 'row' : 'row-reverse',
flexDirection: headerFlexDirection,
}"
>
<div style="overflow: hidden">
Expand Down Expand Up @@ -104,6 +104,13 @@
return ['close', 'back'].includes(value);
},
},
closeButtonPosition: {
type: String,
required: false,
default: null,
validator: value => ['left', 'right'].includes(value),
},

/* Optionally override the default width of the side panel with valid CSS value */
sidePanelWidth: {
type: String,
Expand All @@ -118,6 +125,11 @@
return ['right', 'left'].includes(value);
},
},
fixedWidth: {
type: Boolean,
required: false,
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@MisRob This prop is added here to deal with the full width functionality of sidepanelmodel

default: false,
},
ariaLabel: {
type: String,
required: false,
Expand Down Expand Up @@ -151,7 +163,15 @@
[this.rtlAlignment]: 0,
};
},
headerFlexDirection() {
if (this.closeButtonPosition === 'left') return 'row-reverse';
if (this.closeButtonPosition === 'right') return 'row';
return this.closeButtonIconType === 'close' ? 'row' : 'row-reverse';
},
responsiveWidth() {
if (this.fixedWidth) {
return this.sidePanelWidth;
}
return this.isMobile ? '100vw' : this.sidePanelWidth;
},
/** Styling Properties */
Expand Down Expand Up @@ -253,7 +273,6 @@

.side-panel-content {
flex-grow: 1;
padding: 24px 32px 16px;
overflow-x: hidden;
overflow-y: auto;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
<template>

<div class="skip-nav-link">
<KButton
ref="button"
:style="linkStyles"
appearance="basic-link"
:text="$tr('skipToMainContentAction')"
@click="handleClickSkipLink"
/>
</div>

</template>


<script>

export default {
name: 'SkipNavigationLink',
computed: {
linkStyles() {
return {
backgroundColor: this.$themeTokens.surface + ' !important',
};
},
},
methods: {
handleClickSkipLink() {
// Every page where this is supposed to work needs to have a top-level
// element with 'role' and 'id' attribute equal to 'main' and 'tabindex= -1'.
// If it doesn't have one, clicking this link is a noop, but will re-focus itself
// as a convenience (in case main div is still loading).
const mainEl = document.getElementById('main');
if (mainEl) {
// If it exists, actually target and focus on the main header
const header = mainEl.querySelector('h1');
if (header) {
// HACK: Need to set its tabindex attribute on the fly to get tab behavior
header.setAttribute('tabindex', -1);
header.focus();
} else {
mainEl.focus();
}
} else {
// NOTE: the button retains focus, but loses :focus styling after hitting "Enter"
// TODO: look into theme input modality to see if we can get consistent
// styling when in keyboard modality
this.$refs.button.$el.focus();
}
},
},
$trs: {
skipToMainContentAction: {
message: 'Skip to main content',
context:
'Button label for the hamburger menu in the top left corner. Accessible only to those who use screen readers and other assistive technology (AT).',
},
},
};

</script>


<style lang="scss" scoped>

@import '~kolibri-design-system/lib/styles/definitions';

.skip-nav-link {
position: relative;
z-index: 2;
}

.skip-nav-link a {
@extend %dropshadow-2dp;

position: absolute;
left: -1000px;
padding: 8px 16px;
font-size: 14px;
outline-offset: 0 !important;

&:focus {
top: 8px;
left: 8px;
z-index: 2;
}
}

</style>
Loading
Loading