init
This commit is contained in:
98
files/desktop/DesktopFilesToolbar.js
Normal file
98
files/desktop/DesktopFilesToolbar.js
Normal file
@@ -0,0 +1,98 @@
|
||||
class DesktopFilesToolbar extends Shadow {
|
||||
constructor(title, viewMode, searchText, onViewChange, onSearch, onUpload) {
|
||||
super()
|
||||
this.title = title
|
||||
this.viewMode = viewMode
|
||||
this.searchText = searchText
|
||||
this.onViewChange = onViewChange
|
||||
this.onSearch = onSearch
|
||||
this.onUpload = onUpload
|
||||
}
|
||||
|
||||
render() {
|
||||
const self = this
|
||||
HStack(() => {
|
||||
// Title
|
||||
p(this.title)
|
||||
.margin(0)
|
||||
.fontSize(1.05, em)
|
||||
.fontWeight("700")
|
||||
.color("var(--headertext)")
|
||||
.flex(1)
|
||||
.minWidth(0)
|
||||
|
||||
// Search
|
||||
HStack(() => {
|
||||
p("🔍")
|
||||
.margin(0)
|
||||
.fontSize(0.8, em)
|
||||
.opacity(0.38)
|
||||
.flexShrink(0)
|
||||
input("", "200px")
|
||||
.attr({ type: "text", placeholder: "Search files…", value: this.searchText })
|
||||
.border("none")
|
||||
.outline("none")
|
||||
.background("transparent")
|
||||
.color("var(--headertext)")
|
||||
.fontSize(0.85, em)
|
||||
.onInput((e) => this.onSearch(e.target.value))
|
||||
})
|
||||
.gap(0.5, em)
|
||||
.paddingHorizontal(0.8, em)
|
||||
.paddingVertical(0.52, em)
|
||||
.background("var(--darkaccent)")
|
||||
.border("1px solid var(--divider)")
|
||||
.borderRadius(0.5, em)
|
||||
.alignItems("center")
|
||||
|
||||
// View toggle
|
||||
HStack(() => {
|
||||
this.viewBtn("list", "☰")
|
||||
this.viewBtn("grid", "⊞")
|
||||
})
|
||||
.background("var(--darkaccent)")
|
||||
.border("1px solid var(--divider)")
|
||||
.borderRadius(0.5, em)
|
||||
.overflow("hidden")
|
||||
|
||||
// Upload
|
||||
button("+ Upload")
|
||||
.paddingHorizontal(1, em)
|
||||
.paddingVertical(0.52, em)
|
||||
.background("var(--quillred)")
|
||||
.color("white")
|
||||
.border("none")
|
||||
.borderRadius(0.5, em)
|
||||
.fontSize(0.85, em)
|
||||
.fontWeight("600")
|
||||
.cursor("pointer")
|
||||
.flexShrink(0)
|
||||
.onClick(function(done){ if(done){ self.onUpload() } })
|
||||
})
|
||||
.gap(0.65, em)
|
||||
.paddingHorizontal(1.5, em)
|
||||
.paddingVertical(0.85, em)
|
||||
.borderBottom("1px solid var(--divider)")
|
||||
.alignItems("center")
|
||||
.width(100, pct)
|
||||
.boxSizing("border-box")
|
||||
.flexShrink(0)
|
||||
}
|
||||
|
||||
viewBtn(mode, icon) {
|
||||
const self = this
|
||||
const isActive = this.viewMode === mode;
|
||||
button(icon)
|
||||
.paddingHorizontal(0.65, em)
|
||||
.paddingVertical(0.45, em)
|
||||
.background(isActive ? "var(--app)" : "transparent")
|
||||
.color("var(--headertext)")
|
||||
.border("none")
|
||||
.cursor("pointer")
|
||||
.fontSize(0.95, em)
|
||||
.opacity(isActive ? 1 : 0.45)
|
||||
.onClick(function(done){ if(done){ self.onViewChange(mode) } })
|
||||
}
|
||||
}
|
||||
|
||||
register(DesktopFilesToolbar)
|
||||
Reference in New Issue
Block a user