-
Notifications
You must be signed in to change notification settings - Fork 286
Comments
[DO NOT MERGE BEFORE Q1 RELEASED] [Remove Vuetify from Studio] Main navigation in Channels#5642
Conversation
👋 Thanks for contributing!
We will assign a reviewer within the next two weeks. In the meantime, please ensure that:
- You ran
pre-commitlocally - All issue requirements are satisfied
- The contribution is aligned with our Contributing guidelines. Pay extra attention to Using generative AI. Pull requests that don't follow the guidelines will be closed.
We'll be in touch! 😊
Hlo @MisRob I have raised the draft pr ,so I think i should start with asking some clearification:
- In SidepanelModel's index.vue file padding is given already due to which alignment problems are occuring.In my view ,I think we should remove the padding on the sidepanelmodal content (IN Index file )itself and add the padding where the component is used as per our desire to maintain flexibility rather than giving a specific padding ,in this case currently i have removed the padding with the help of vdeep ,Do tell what are your thoughts about it.
Here below is the padding in index.vue file
studio/contentcuration/contentcuration/frontend/shared/views/SidePanelModal/index.vue
Lines 254 to 258 in c553c57
.side-panel-content {flex-grow: 1;padding: 24px 32px 16px;overflow-x: hidden;overflow-y: auto;
But if we remove the padding in index file then we have to add padding in other places where the side panel modal was used.
Why in my case padding is not needed:
-
I have updated a prop in side panel model becaue it had a ismobile() method due to which below a certain window breakpoint the the sidepanelmodel covers the whole screen so i have solved it by using a fixedwidth prop
studio/contentcuration/contentcuration/frontend/shared/views/SidePanelModal/index.vue
Lines 154 to 156 in c553c57
responsiveWidth() {return this.isMobile ? '100vw' : this.sidePanelWidth;},
I have checked and it is not causing any problem in older use cases.
Is this way suitable? -
I was having a bit trouble creating the ripple type background-color styling created on clicking the tabs.I would like your insights on it
Screencast From 2026年01月15日 02-16-58.webm
These above are the issue i wanted to clear and also just giving you a check on the work yet left :
- Making test file for StudioNavigation and StudioNavigationTab,SkipNavigationLink.
- Refinement on the sliding and scrolling of the tabs when screen size is reduced.
- Other minor improvements.
There was a problem hiding this comment.
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
2acfefc to
4e0395c
Compare
Hi @MisRob, I’m making good progress on the sliding animation and scroll logic for the tabs. However, with the added implementation for the indicator and chevron behavior, StudioNavigation.vue is approaching 800 lines.
To keep the components modular and maintainable, would you be open to me splitting the tab-wrapper logic into a third component, StudioNavigationTabs.vue? This would house the scrollable container and sliding indicator, leaving StudioNavigation.vue to focus purely on the KToolbar ,SidePanelModal and top-level layout. Or should I stick strictly to the two components mentioned in the issue description?
(There can be some redudant logic which i am currenlty removing ,i just wanted to check if it is a problem if Studionavigation is of this size? or should i do something about it)
MisRob
commented
Jan 15, 2026
Hi @Prashant-thakur77, nice work here, and I appreciate you're reaching out to clarify. Basically below you will find just confirmation for your ideas though :) and a clarification about scope.
(1)
I think we should remove the padding on the sidepanelmodal content (IN Index file )itself and add the padding where the component is used...
Yes that makes much sense and yes it's better than trying to override from outside.
(2)
I have updated a prop in side panel model...
Again yes. As soon as work is finished, I will let a reviewer to check on details, but high-level configuring this behavior via a prop makes sense to me.
(3)
I was having a bit trouble creating the ripple type background-color
I appreciate that you try to stay close to the original, but you don't need to replicate this part exactly - just use Kolibri navigation as reference.
(4)
Making test file for StudioNavigation and StudioNavigationTab,SkipNavigationLink
👍
(5)
Refinement on the sliding and scrolling of the tabs when screen size is reduced.
I’m making good progress on the sliding animation and scroll logic for the tabs
Oh you're very diligent :)! Same answer as for (3). I'm sorry I think I should have emphasize this in the issue better. To begin with, you can just make it behave as in Kolibri. If there's any Studio-specific fine-tuning needed, we can open a follow-up issue, but right now I don't expect it will be needed (but if you already have some code, it'd be pity to lose it - so maybe keep it as backup, just in case?)
(6)
To keep the components modular and maintainable, would you be open
I don't know if it's still relevant after my answer for (5), but in general, absolutely - any optimizations are welcome. Code snippets in issues only show direction that I consider important, and doesn't mean that it cannot be further improved - quite the opposite, I really welcome that you think about maintainability.
Prashant-thakur77
commented
Jan 15, 2026
@MisRob Thanks for the clarification.Now if we are not going very deep in the specific sliding and ripple animations ,then it does make the task easier,i was trying to replicate the sliding, scrolling of the tabs currently and yes i will keep it with me if needed later :)
MisRob
commented
Jan 15, 2026
Re: (3) and (5) now I see that I wrote in the issue
There should be no changes in before / after user experience
in bold - so again apologies for that. I think I didn't realize that some details like animations etc. are a bit different from Kolibri's. Glad that we had a chance to talk through a draft and hopefully you didn't spend much time on those parts.
MisRob
commented
Jan 15, 2026
@Prashant-thakur77 Good thanks for your patience :)
Prashant-thakur77
commented
Jan 15, 2026
Re: (3) and (5) now I see that I wrote in the issue
There should be no changes in before / after user experience
in bold - so again apologies for that. I think I didn't realize that some details like animations etc. are a bit different from Kolibri's. Glad that we had a chance to talk through a draft and hopefully you didn't spend much time on those parts.
No prob,to be frank i did learnt a lot while working on it.😁
MisRob
commented
Jan 15, 2026
Also I'm going to update the issue now @Prashant-thakur77 to reflect above - just to make it clear to reviewers too.
Prashant-thakur77
commented
Jan 15, 2026
Sure
MisRob
commented
Jan 15, 2026
Issue update done @Prashant-thakur77, just search the body for "Update Jan 15 by MisRob" text and you will see three updated places. Please let me know if it's all clear or if you noticed any other areas like this.
@MisRob Regarding the use of Side Panel Modal,I need to ask about a prop problem
studio/contentcuration/contentcuration/frontend/shared/views/SidePanelModal/index.vue
Lines 99 to 105 in ad4d81e
Currenlty 2 types of icon can be passed to sidepanelmodal and when we pass the close icon it gets to the righmost side and when we pass any other icon it moves to the left side
studio/contentcuration/contentcuration/frontend/shared/views/SidePanelModal/index.vue
Lines 26 to 30 in ad4d81e
Due to the above logic , and in current usecase of sidepanel for navigation
I have passed the clear as the prop,hence it appears to the left side
Screenshot From 2026年01月17日 00-24-32closeButtonIconType="clear"
but there are some prop errors such as
Screenshot From 2026年01月17日 00-25-23
What are your thoughts regarding this matter?
Should i update StudioPanelModal or let it be
MisRob
commented
Jan 16, 2026
Hi @Prashant-thakur77, do I understand right that the problem is: You need to use close icon, but the current implementation aligns it to the right side, whereas in this use case it needs to be on the left side?
If so, then I would encourage you to update SidePanelModal to fit this new use-case. One idea to explore would be to:
closeButtonIconTypeto only affect icon type, and not its positioncloseButtonPositionnew prop to configure right/left placement
or similar. Feel free to play and try to find a meaningful and clear API for all our use-cases :) Thanks for checking first.
closeButtonPositionnew prop to configure right/left placement
yes ,i also think this is the best way going forward for future implications too.
closeButtonPosition: {
type: String,
required: false,
default: null,
validator: value => ['left', 'right'].includes(value),
},
And it's working as required :)
I have done the updates @MisRob and will raise the pr soon.
Screencast From 2026年01月18日 01-51-57.webm
ce2d217 to
5ffa338
Compare
1e2c0e6 to
fa32079
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would https://design-system.learningequality.org/klistwithoverflow help to simplify?
I don't think we had KListWithOverflow when we built Kolibri application bar so I didn't connect the dots right away, but now seeing this logic I wonder if it could be used. I am not sure if it will work nicely for this use-case - if you'd like to, you can give it a try real quick and see. If it wouldn't be a good fit, no problem.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I tried using KlistWithOverflow ,but the main issue with it is the indicator problem as the indicator of the Active tab is getting showed under all the tabs,Irrespective of whether it is active or not .I thought it might be because of the logic of the active state but i debugged and checked it ,and the active state is being rendered correctly but still the indicator is getting showed under all the tabs rather than getting showed only under the active one @MisRob so I think that the current approach might be better than using the KlistWithOverflow,but i will still try some other ways to check if it might work.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see @Prashant-thakur7, thanks for checking on it and no problem. KListWithOverflow is very useful but it may not combine well in some cases. There's no need to spend more hours on it. We can just have it work the same as in Kolibri for now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just noting that this implementation has a problem with the invisible tabs still being accessible with keyboard navigation, and we can reach states like this where the visible tabs and the ones hidden in the menu buttons are the same:
imageThis is something that also happens in Kolibri, so don't think it's a blocker, but it's good to be aware of the limitations of this path.
Also, something I think we should fix is the focus outline not being visible
imageI think the easiest way would be to reduce the focus outline offset.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this be nav? Or is <nav> for the top navigation somewhere else I didn't notice?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@MisRob
I haven't used nav for the top navigation somewhere else in the file.
Should I apply nav to the tabs section (line 109) instead of the root div?
The top bar has mixed content (title, menu button, user dropdown), so I'm not sure if the root element should be nav or if it's better suited for just the tabs section which is specifically for navigation.
What would you recommend?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should I apply nav to the tabs section (line 109) instead of the root div?
Looking at this guidance https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/nav#usage_notes, yes that feels appropriate. You could also have a look at how it works in Kolibri and see if there's anything useful. However, I am not certain if the top user menu should too be wrapped in (another) <nav>. I would assume so.
For now, this will probably be a safe start ^ Later I would ask a reviewer to connect with our a11y lead and clarify in detail :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also note aria-labelledby MDN guidance - I believe it will be particular useful since we will have 3 navs on a page :) (top tab links, side panel links, user menu links)
MisRob
commented
Jan 19, 2026
The recording looks fantastic @Prashant-thakur77, for both LTR and RTL! Thanks a lot.
- I gave the code a very quick high-level skim. Just two notes. We will assign a reviewer next week for full review.
- I noticed that Add Notifications page #5610 adds a notification badge + notifications page link to the top-right user menu, and also a new item + notification badge in the side panel.
- After that PR merged, we will need to update this PR accordingly. It will be easiest to attend to it later, likely after your PR is reviewed. I will follow-up when the time comes, and will be ready to support this part.
- But you may already have a look at related places in the notifications PR and consider whether the new architecture will allow those updates be easily added here later.
5e05536 to
243528f
Compare
bf31a49 to
bdd6012
Compare
ae90eae to
583ba3c
Compare
@AlexVelezLl i have done the requested changes and provided comments where needed for explanation.sorry for the delay,going through exams.do tell is any more changes are needed.
Please review when you have time.
AlexVelezLl
commented
Feb 10, 2026
Thanks a lot @Prashant-thakur77! Will try to take a look by the end of this week. But I'll most likely see it next week 🤗.
Prashant-thakur77
commented
Feb 10, 2026
Sure..
Uh oh!
There was an error while loading. Please reload this page.
Fixes #5369
Summary
This Pull Request replaces the Vuetify-based AppBar and navigation components in the Channels view with new, custom-built components using the Kolibri Design System (KDS). This is a sub-issue of the larger project to remove Vuetify dependencies (#5060).
Components such as StudioNavigation, StudioNavigationTab, SkipNavigationLink,StudioNavigationOption .
Screencast From 2026年01月15日 01-54-52.webm
References
Sub-issue of #5060.
Reviewer guidance
Login as a@a.com with password a
Go to Channels
Files Changed
New & Refactored Components:
StudioNavigation.vue: Replaced Vuetify v-app-bar with KDS KToolbar.
StudioNavigationTab.vue: New component replacing v-tab.
StudioNavigationOption.vue: New component for Side Panel links.
SkipNavigationLink.vue: Added this functionality.
SidePanelModal.vue: Updated to function with StudioNavigation; Note: Internal content padding was removed and moved to the parent components to allow for full-bleed headers.
Views & Tests:
ChannelListIndex.vue: Implemented Studio Navigation; updated to pass tabs as a Prop Array.
tests/StudioNavigation.spec.js: Added integration tests.
tests/StudioNavigationTab.spec.js: Updated unit tests.
tests/StudioNavigationOption.spec.js: Updated unit tests.
Other: