Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
9942950
feat(layout): relocate title into scrollable region
eliandoran Dec 8, 2025
d02ec47
feat(breadcrumb): get breadcrumb to render
eliandoran Dec 8, 2025
43ceb19
feat(breadcrumb): hide last note
eliandoran Dec 8, 2025
6e29fe8
feat(breadcrumb): hide preview
eliandoran Dec 8, 2025
5f215b1
feat(breadcrumb): start implementing interactive breadcrumbs
eliandoran Dec 8, 2025
a02235f
feat(breadcrumb): set up dropdown
eliandoran Dec 8, 2025
c428577
feat(breadcrumb): basic navigation in separator
eliandoran Dec 8, 2025
adc356e
fix(breadcrumb): navigation on first level not working
eliandoran Dec 8, 2025
bedca9f
feat(breadcrumb): hide root icon
eliandoran Dec 8, 2025
c5c4ecd
feat(breadcrumb): show current item
eliandoran Dec 8, 2025
200fd76
feat(breadcrumb): display a checkbox for the current note
eliandoran Dec 8, 2025
223ba46
fix(breadcrumb): breadcrumb shown if there are no children
eliandoran Dec 8, 2025
1e5fcf6
feat(breadcrumb): show root title if it's the one active
eliandoran Dec 8, 2025
1146777
feat(breadcrumb): basic overflow support
eliandoran Dec 8, 2025
3fe45db
feat(breadcrumb): improve overflow support
eliandoran Dec 8, 2025
70ded4c
chore(breadcrumb): use bold for highlighting active entry
eliandoran Dec 8, 2025
4cfa403
feat(breadcrumb): apply ellipsis to dropdown
eliandoran Dec 8, 2025
eca2116
feat(breadcrumb): make the root note clickable
eliandoran Dec 8, 2025
a365814
feat(breadcrumb): improve overflow slightly
eliandoran Dec 8, 2025
b16893c
feat(breadcrumb): collapse items if the list is too big
eliandoran Dec 8, 2025
ef3cbca
refactor(breadcrumb): fix eslint issues
eliandoran Dec 8, 2025
d15b5f8
style(next): basic styling of ribbon as a floating toolbar
eliandoran Dec 8, 2025
fcf51ec
chore(eslint): apply to .tsx as well
eliandoran Dec 8, 2025
05679f7
feat(ribbon): prototype sticky ribbon
eliandoran Dec 8, 2025
608ab53
chore(ribbon): reduce note title padding
eliandoran Dec 8, 2025
5973e5c
chore(ribbon): remove label for the root entirely
eliandoran Dec 9, 2025
6fac947
chore(ribbon): address requested changes
eliandoran Dec 9, 2025
7377e4e
chore(ribbon): improve paddings slightly
eliandoran Dec 9, 2025
6b059a9
feat(ribbon): context menu for root item
eliandoran Dec 9, 2025
0805e07
feat(ribbon): basic implementation for scroll pinning
eliandoran Dec 9, 2025
474228b
style(client): remove bottom border & box-shadow for content header
eliandoran Dec 9, 2025
7fc3d41
fix(client): 1px scroll in full-height note
eliandoran Dec 9, 2025
d5d2815
fix(client/floating_buttons): clipped by ribbon
eliandoran Dec 9, 2025
5770222
fix(client/floating_buttons): clipped by floating content header
eliandoran Dec 9, 2025
bfcf85e
fix(client/layout): content header height not properly resized when s…
eliandoran Dec 9, 2025
895e9b8
chore(client/layout): reduce transitions
eliandoran Dec 9, 2025
8df5a01
fix(ribbon): note buttons cut off
eliandoran Dec 9, 2025
fb6c827
chore(ribbon): remove top transition completely
eliandoran Dec 9, 2025
3514e3d
fix(floating_buttons): wrong position when at the top of the note
eliandoran Dec 9, 2025
1998080
style(ribbon): fix some alignment issues & decrease button size
eliandoran Dec 9, 2025
72b0d03
chore(layout): remove some title margins
eliandoran Dec 9, 2025
658b699
fix(collections/geomap): fake floating buttons mispositioned
eliandoran Dec 9, 2025
4d75221
chore(breadcrumbs): address requested changes
eliandoran Dec 9, 2025
2ff8762
chore(client): fix typecheck
eliandoran Dec 9, 2025
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
4 changes: 0 additions & 4 deletions apps/client/src/components/app_context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -498,10 +498,6 @@ type EventMappings = {
noteIds: string[];
};
refreshData: { ntxId: string | null | undefined };
contentSafeMarginChanged: {
top: number;
noteContext: NoteContext;
}
};

export type EventListener<T extends EventNames> = {
Expand Down
23 changes: 16 additions & 7 deletions apps/client/src/layouts/desktop_layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import NoteDetail from "../widgets/NoteDetail.jsx";
import PromotedAttributes from "../widgets/PromotedAttributes.jsx";
import SpacerWidget from "../widgets/launch_bar/SpacerWidget.jsx";
import LauncherContainer from "../widgets/launch_bar/LauncherContainer.jsx";
import Breadcrumb from "../widgets/Breadcrumb.jsx";

This comment was marked as off-topic.


export default class DesktopLayout {

Expand Down Expand Up @@ -117,29 +118,37 @@ export default class DesktopLayout {
new NoteWrapperWidget()
.child(
new FlexContainer("row")
.class("title-row")
.css("height", "50px")
.css("min-height", "50px")
.class("breadcrumb-row")
.css("height", "30px")
.css("min-height", "30px")
.css("align-items", "center")
.cssBlock(".title-row > * { margin: 5px; }")
.child(<NoteIconWidget />)
.child(<NoteTitleWidget />)
.css("padding", "10px")
.cssBlock(".breadcrumb-row > * { margin: 5px; }")
.child(<Breadcrumb />)
.child(<SpacerWidget baseSize={0} growthFactor={1} />)
.child(<MovePaneButton direction="left" />)
.child(<MovePaneButton direction="right" />)
.child(<ClosePaneButton />)
.child(<CreatePaneButton />)
)
.child(<Ribbon />)
.child(new WatchedFileUpdateStatusWidget())
.child(<FloatingButtons items={DESKTOP_FLOATING_BUTTONS} />)
.child(
new ScrollingContainer()
.filling()
.child(new ContentHeader()
.child(new FlexContainer("row")
.class("title-row")
.css("height", "50px")
.css("min-height", "50px")
.css("align-items", "center")
.child(<NoteIconWidget />)
.child(<NoteTitleWidget />)
)
.child(<ReadOnlyNoteInfoBar />)
.child(<SharedInfo />)
)
.child(<Ribbon />)
.child(<PromotedAttributes />)
.child(<SqlTableSchemas />)
.child(<NoteDetail />)
Expand Down
2 changes: 1 addition & 1 deletion apps/client/src/services/link.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ async function createLink(notePath: string | undefined, options: CreateLinkOptio
const viewMode = viewScope.viewMode || "default";
let linkTitle = options.title;

if (!linkTitle) {
if (linkTitle === undefined) {
if (viewMode === "attachments" && viewScope.attachmentId) {
const attachment = await froca.getAttachment(viewScope.attachmentId);

Expand Down
21 changes: 11 additions & 10 deletions apps/client/src/stylesheets/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@
--bs-body-font-family: var(--main-font-family) !important;
--bs-body-font-weight: var(--main-font-weight) !important;
--bs-body-color: var(--main-text-color) !important;
--bs-body-bg: var(--main-background-color) !important;
--ck-mention-list-max-height: 500px;
--bs-body-bg: var(--main-background-color) !important;
--ck-mention-list-max-height: 500px;
--tn-modal-max-height: 90vh;

--tree-item-light-theme-max-color-lightness: 50;
Expand Down Expand Up @@ -471,7 +471,7 @@ body.mobile .dropdown .dropdown-submenu > span {
padding-inline-start: 12px;
}

.dropdown-menu kbd {
.dropdown-menu kbd {
color: var(--muted-text-color);
border: none;
background-color: transparent;
Expand All @@ -487,7 +487,7 @@ body.mobile .dropdown .dropdown-submenu > span {
border: 1px solid transparent !important;
}

/* This is a workaround for Firefox not supporting break-before / break-after: avoid on columns.
/* This is a workaround for Firefox not supporting break-before / break-after: avoid on columns.
* It usually wraps a menu item followed by a separator / header and another menu item. */
.dropdown-no-break {
break-inside: avoid;
Expand Down Expand Up @@ -1591,7 +1591,7 @@ body:not(.mobile) #launcher-pane.horizontal .dropdown-submenu > .dropdown-menu {
inset-inline-start: 0;
inset-inline-end: 0;
margin: 0 !important;
max-height: 85vh;
max-height: 85vh;
display: flex;
}

Expand Down Expand Up @@ -2093,7 +2093,7 @@ body.zen .note-split.type-text .scrolling-container {

body.zen:not(.backdrop-effects-disabled) .note-split.type-text .scrolling-container {
--padding-top: 50px; /* Should be enough to cover the title row */

padding-top: var(--padding-top);
scroll-padding-top: var(--padding-top);
}
Expand Down Expand Up @@ -2365,7 +2365,7 @@ footer.webview-footer button {
margin-bottom: 0;
}

.admonition::before {
.admonition::before {
color: var(--accent-color);
font-family: boxicons !important;
position: absolute;
Expand All @@ -2391,7 +2391,7 @@ footer.webview-footer button {

.ck-content ul.todo-list li:has(> span.todo-list__label input[type="checkbox"]:checked) > span.todo-list__label span.todo-list__label__description {
text-decoration: line-through;
opacity: 0.6;
opacity: 0.6;
}

.chat-options-container {
Expand Down Expand Up @@ -2524,6 +2524,7 @@ iframe.print-iframe {
position: relative;
flex-grow: 1;
width: 100%;
overflow: hidden;
}

/* Calendar collection */
Expand All @@ -2538,7 +2539,7 @@ iframe.print-iframe {
body.mobile {
.split-note-container-widget {
flex-direction: column !important;

.note-split {
width: 100%;
}
Expand All @@ -2553,4 +2554,4 @@ iframe.print-iframe {
opacity: 0.4;
}
}
}
}
16 changes: 14 additions & 2 deletions apps/client/src/stylesheets/theme-next/ribbon.css
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ ul.editability-dropdown li.dropdown-item > div {
background: var(--cmd-button-hover-background-color);
}

/*
/*
* Note info
*/

Expand All @@ -177,4 +177,16 @@ ul.editability-dropdown li.dropdown-item > div {
/* Narrow width layout */
.note-info-widget {
container: info-section / inline-size;
}
}

/*
* Styling as a floating toolbar
*/
.ribbon-container {
position: sticky;
top: 0;
left: 0;
right: 0;
background: var(--main-background-color);
z-index: 997;
}
55 changes: 55 additions & 0 deletions apps/client/src/widgets/Breadcrumb.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
.breadcrumb-row {
position: relative;
}

.component.breadcrumb {
contain: none;
display: flex;
margin: 0;
align-items: center;
font-size: 0.9em;
gap: 0.25em;
flex-wrap: nowrap;
overflow: hidden;
max-width: 85%;

> span,
> span > span {
display: flex;
align-items: center;
min-width: 0;

a {
color: inherit;
text-decoration: none;
min-width: 0;
max-width: 150px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
display: block;
flex-shrink: 2;
}
}

> span:last-of-type a {
max-width: 300px;
flex-shrink: 1;
}

ul {
flex-direction: column;
list-style-type: none;
margin: 0;
padding: 0;
}

.dropdown-item span,
.dropdown-item strong {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
display: block;
max-width: 300px;
}
}
Loading
Loading