sly-svelte-file-tree
Version:
A customizable file tree view component for Svelte
164 lines (144 loc) • 3.89 kB
CSS
:root {
--sly-tree-item-end-size: 0px;
--sly-tree-item-actions-size: 0fr;
}
.sly-file-tree-item {
position: relative;
list-style: none;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
color: var(--sly-color-on-content);
background: var(--sly-color-content);
}
.sly-file-tree-item-content {
position: relative;
display: grid;
justify-content: center;
align-content: center;
align-items: center;
justify-items: center;
grid-template-columns: min-content max-content 1fr 0;
width: 100%;
height: auto;
gap: var(--sly-item-cell-gap);
padding: 6px 12px;
overflow: hidden;
box-sizing: border-box;
border-bottom: 1px solid var(--sly-color-control);
transition: var(--sly-tree-item-transition);
}
.sly-file-tree-item-content ul, .sly-file-tree-item-content li {
position: relative;
list-style: none;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
color: var(--sly-color-on-content);
background: var(--sly-color-content);
}
.sly-file-tree-item-content:hover {
color: var(--sly-color-on-hover);
background-color: var(--sly-color-hover);
}
.sly-file-tree-item-content:has(>.actions-transition) {
transition: var(--sly-tree-item-transition);
grid-template-columns: min-content max-content minmax(0, 1fr) var(--sly-tree-item-end-size);
}
.sly-file-tree-item-content:hover:has(>.actions-transition) {
--sly-tree-item-end-size: var(--sly-tree-item-actions-size);
}
.sly-file-tree-item-content:hover > .actions-transition {
opacity: 1;
}
.sly-file-tree-item-content:not(:has(> .actions-transition)) {
grid-template-columns: min-content max-content 1fr max-content;
}
.sly-file-tree-item-content > .name {
position: relative;
display: flex;
justify-content: start;
align-items: center;
width: auto;
gap: 8px;
background: none;
color: inherit;
outline: none;
border: none;
cursor: pointer;
}
.sly-file-tree-item-content > .name:hover > .text {
text-decoration: underline;
}
.sly-file-tree-item-content > .start, .sly-file-tree-item-content > .end {
position: relative;
display: flex;
justify-content: start;
align-items: center;
}
.sly-file-tree-item-content > .metadata {
position: relative;
display: flex;
justify-content: end;
align-items: center;
overflow-y: hidden;
overflow-x: auto;
width: 100%;
}
.sly-file-tree-item-content > .metadata:has(>.tag) {
gap: 4px;
}
.sly-file-tree-item-content > .metadata:has(>.grid) {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(0, auto));
grid-template-rows: 1fr;
}
.sly-file-tree-item-content > .metadata > li {
position: relative;
width: 100%;
height: 100%;
font-size: 0.7em;
display: flex;
justify-content: center;
align-items: center;
vertical-align: middle;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
max-width: 100%;
}
.sly-file-tree-item-content > .metadata > .tag {
position: relative;
width: auto;
height: min-content;
background: var(--sly-color-metadata);
color: var(--sly-color-on-metadata);
padding: 2px 6px;
border-radius: 12px;
}
.sly-file-tree-item-content > .metadata > .grid {
position: relative;
width: auto;
height: min-content;
padding: 2px 6px;
}
.sly-file-tree-item-content > .metadata > .grid:not(:last-of-type) {
border-right: 1px solid var(--sly-color-control);
}
.sly-file-tree-item-content > .metadata > .tag > .name {
font-weight: 600;
padding-right: 4px;
}
.sly-file-tree-item-content .actions-transition {
position: relative;
display: flex;
justify-content: end;
align-items: center;
overflow: hidden;
box-sizing: border-box;
width: 100%;
height: 100%;
opacity: 0;
}