Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
a41ee02
Mkaing the studionavigationtab
Prashant-thakur77 Dec 21, 2025
582ade4
Updated
Prashant-thakur77 Dec 21, 2025
43e21f4
Updated
Prashant-thakur77 Dec 21, 2025
8e6fc96
Updated
Prashant-thakur77 Dec 21, 2025
122e87d
Updated
Prashant-thakur77 Dec 21, 2025
15924b3
Updated
Prashant-thakur77 Dec 21, 2025
2d7e03b
Update
Prashant-thakur77 Dec 23, 2025
c5737f3
Update
Prashant-thakur77 Dec 23, 2025
fc45630
Update styles
Prashant-thakur77 Dec 23, 2025
1604dec
Updated sidepanel styles
Prashant-thakur77 Dec 25, 2025
b0e4950
Updated sidepanel styles
Prashant-thakur77 Dec 25, 2025
2c7bc32
Updated sidepanel styles
Prashant-thakur77 Dec 25, 2025
4a0f18a
Updated sidepanel styles
Prashant-thakur77 Dec 25, 2025
84fe621
Updated sidepanel styles
Prashant-thakur77 Dec 25, 2025
1d43a46
Updated sidepanel styles
Prashant-thakur77 Dec 25, 2025
e6fd12e
Updated sidepanel styles
Prashant-thakur77 Dec 25, 2025
3664d22
Updated styles
Prashant-thakur77 Dec 26, 2025
072e2eb
Updated
Prashant-thakur77 Dec 27, 2025
a91f07d
Updated styles for tabs
Prashant-thakur77 Jan 13, 2026
e2c5910
Updated styles for tabs
Prashant-thakur77 Jan 13, 2026
bc24744
Updated styles for tabs
Prashant-thakur77 Jan 13, 2026
5a2f933
Updated styles for tabs
Prashant-thakur77 Jan 13, 2026
6e1cd39
Updated styles of sidepanel
Prashant-thakur77 Jan 13, 2026
23375f3
Updated styles of sidepanel
Prashant-thakur77 Jan 13, 2026
4702138
Updated sidepanel styles
Prashant-thakur77 Jan 14, 2026
09466e0
Updated sidepanel styles
Prashant-thakur77 Jan 14, 2026
57982b3
Updated sidepanel styles
Prashant-thakur77 Jan 14, 2026
b2815ef
Updated sidepanel styles
Prashant-thakur77 Jan 14, 2026
5461324
Added scrollable funcality to tabs
Prashant-thakur77 Jan 14, 2026
a02f5d3
Updated the link design
Prashant-thakur77 Jan 14, 2026
45e9f8a
Updated the link design
Prashant-thakur77 Jan 14, 2026
3dbc4a4
Updated the link design
Prashant-thakur77 Jan 14, 2026
e75fa20
Updated the link design
Prashant-thakur77 Jan 14, 2026
86d41fe
Updated the link design
Prashant-thakur77 Jan 14, 2026
a3cbc58
Updated the link design
Prashant-thakur77 Jan 14, 2026
7d7f723
Updated the title styles
Prashant-thakur77 Jan 14, 2026
81f5e8c
Updated the title styles
Prashant-thakur77 Jan 14, 2026
befbeca
Updated the sliding indicator
Prashant-thakur77 Jan 14, 2026
24107b5
Updated the sliding indicator
Prashant-thakur77 Jan 14, 2026
3825ba9
Updated class anmes
Prashant-thakur77 Jan 14, 2026
d5a228e
Updated the tabs container
Prashant-thakur77 Jan 15, 2026
1260432
Sliding approach
Prashant-thakur77 Jan 15, 2026
bddf7c9
Sliding approach
Prashant-thakur77 Jan 15, 2026
7a227e9
old approach after review
Prashant-thakur77 Jan 15, 2026
13b0e46
updated code for tabs
Prashant-thakur77 Jan 15, 2026
2a51498
Updated menu styles
Prashant-thakur77 Jan 16, 2026
3560e7b
Added StudioPanelOption.vue
Prashant-thakur77 Jan 16, 2026
ca79121
Added StudioPanelOption.vue
Prashant-thakur77 Jan 16, 2026
c0267b7
Added StudioPanelOption.vue
Prashant-thakur77 Jan 16, 2026
746ea16
Added StudioPanelOption.vue
Prashant-thakur77 Jan 16, 2026
5a16725
Added StudioPanelOption.vue
Prashant-thakur77 Jan 16, 2026
ba2a51c
Updated styles
Prashant-thakur77 Jan 16, 2026
00cfe57
Updated the skipnavigationlink functionality
Prashant-thakur77 Jan 16, 2026
f2b6a17
Removed the padding added to the sie panle modal and rather added tha…
Prashant-thakur77 Jan 16, 2026
bf4ed5b
updatedstyles
Prashant-thakur77 Jan 16, 2026
8efbeab
updatedstyles
Prashant-thakur77 Jan 16, 2026
115b785
Updated Catalogfiltercontent to handle padding wihout sidepanelmodal
Prashant-thakur77 Jan 16, 2026
fdd4a16
Updated boolean
Prashant-thakur77 Jan 16, 2026
be58910
Updated the tabtrack method to studionavigation
Prashant-thakur77 Jan 16, 2026
330e867
Updated the tabtrack method to studionavigation
Prashant-thakur77 Jan 16, 2026
1faa862
finalising
Prashant-thakur77 Jan 16, 2026
5ffc7d0
Test file updated
Prashant-thakur77 Jan 16, 2026
6a0c587
Test file created
Prashant-thakur77 Jan 17, 2026
4f2bc4a
Updated test files
Prashant-thakur77 Jan 17, 2026
a4bac53
Updated strings
Prashant-thakur77 Jan 17, 2026
bb8a602
Test files
Prashant-thakur77 Jan 17, 2026
75ba5b8
Final updates
Prashant-thakur77 Jan 17, 2026
9c5e306
Final updates
Prashant-thakur77 Jan 17, 2026
5ffa338
Final updates
Prashant-thakur77 Jan 17, 2026
9573b5d
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Jan 17, 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 @@ -654,6 +654,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