UNPKG

sly-svelte-file-tree

Version:

A customizable file tree view component for Svelte

164 lines (144 loc) 3.89 kB
: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; }