phonograph/sass/viewer.scss

278 lines
4.9 KiB
SCSS
Raw Normal View History

2025-08-10 14:32:15 -07:00
@use 'globals';
@use 'sass:color';
2025-08-24 23:24:01 -07:00
@use 'condition-editor';
2025-09-08 15:56:57 -07:00
@use 'field-adder';
2025-08-10 14:32:15 -07:00
$table-border-color: #ccc;
.lens-grid {
display: grid;
grid-template:
'table' 1fr
'editor' max-content;
height: 100%;
width: 100%;
}
.lens-table {
display: grid;
grid-area: table;
grid-template:
'headers' max-content
'main' 1fr
'inserter' max-content;
height: 100%;
outline: none;
overflow: auto;
width: 100%;
&__headers {
display: flex;
grid-area: headers;
align-items: stretch;
}
&__main {
grid-area: main;
overflow-y: auto;
}
&__row {
align-items: stretch;
display: flex;
2025-09-08 15:56:57 -07:00
height: 2.25rem;
2025-08-10 14:32:15 -07:00
}
&__cell {
2025-09-08 15:56:57 -07:00
align-items: stretch;
2025-08-10 14:32:15 -07:00
border: solid 1px $table-border-color;
border-left: none;
border-top: none;
2025-09-08 15:56:57 -07:00
display: flex;
flex: none;
2025-08-04 13:59:42 -07:00
padding: 0;
2025-08-10 14:32:15 -07:00
&--insertable {
border-style: dashed;
}
2025-08-13 18:52:37 -07:00
}
&__inserter {
align-items: stretch;
display: flex;
grid-area: inserter;
justify-items: flex-start;
margin-bottom: 2rem;
}
}
.lens-cell {
&__container {
align-items: center;
display: flex;
2025-09-08 15:56:57 -07:00
flex: none;
2025-10-16 06:40:11 +00:00
user-select: none;
2025-09-08 15:56:57 -07:00
width: 100%;
2025-08-10 14:32:15 -07:00
&--selected {
2025-08-13 18:52:37 -07:00
outline: 3px solid #37f;
outline-offset: -2px;
2025-08-10 14:32:15 -07:00
}
}
2025-08-13 18:52:37 -07:00
&__content {
flex: 1;
2025-08-10 14:32:15 -07:00
font-family: globals.$font-family-data;
&--text {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
2025-09-08 15:56:57 -07:00
padding: 0 0.5rem;
2025-08-10 14:32:15 -07:00
}
&--uuid {
font-family: globals.$font-family-mono;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
2025-09-08 15:56:57 -07:00
padding: 0 0.5rem;
2025-08-10 14:32:15 -07:00
}
2025-08-13 18:52:37 -07:00
&--null {
2025-09-08 15:56:57 -07:00
align-items: center;
color: color.scale(#000, $lightness: 65%, $space: hsl);
display: flex;
2025-08-13 18:52:37 -07:00
font-family: globals.$font-family-data;
font-style: oblique;
2025-09-08 15:56:57 -07:00
justify-content: center;
padding: 0 0.25rem;
svg path {
fill: currentColor;
}
2025-08-13 18:52:37 -07:00
}
2025-08-10 14:32:15 -07:00
}
2025-08-13 18:52:37 -07:00
&__notice {
align-items: center;
color: color.scale(#000, $lightness: 50%, $space: hsl);
display: flex;
padding: 0 0.25rem;
svg path {
2025-09-08 15:56:57 -07:00
fill: currentColor;
}
}
}
.field-header {
&__container {
align-items: center;
background: #0001;
border: solid 1px #ccc;
border-top: none;
border-left: none;
display: flex;
flex: none;
font-family: globals.$font-family-data;
justify-content: space-between;
padding: 0.25rem;
text-align: left;
}
&__label {
padding: 0.25rem;
}
&__type-indicator {
@include globals.button-clear;
align-items: center;
display: flex;
height: 2rem;
justify-content: center;
padding: 0;
width: 2rem;
svg path {
fill: currentColor;
}
}
&__popover {
&:popover-open {
@include globals.popover;
left: anchor(left);
top: anchor(bottom);
2025-09-08 15:56:57 -07:00
padding: 1rem;
position: absolute;
2025-08-13 18:52:37 -07:00
}
}
}
2025-08-10 14:32:15 -07:00
2025-08-13 18:52:37 -07:00
.lens-inserter {
&__rows {
2025-08-10 14:32:15 -07:00
.lens-table__cell {
border: dashed 1px $table-border-color;
2025-08-04 13:59:42 -07:00
border-left: none;
2025-08-10 14:32:15 -07:00
border-top: none;
2025-08-13 18:52:37 -07:00
&:last-child {
border-right: none;
}
2025-08-04 13:59:42 -07:00
}
2025-08-10 14:32:15 -07:00
.lens-table__row:first-child .lens-table__cell {
border-top: dashed 1px $table-border-color;
}
}
2025-08-13 18:52:37 -07:00
&__submit {
@include globals.reset-button;
align-items: center;
border: dashed 1px globals.$button-primary-background;
border-bottom-right-radius: globals.$border-radius-rounded-sm;
border-top-right-radius: globals.$border-radius-rounded-sm;
color: globals.$button-primary-background;
display: flex;
justify-content: center;
padding: 0 1rem;
svg path {
2025-09-08 15:56:57 -07:00
fill: currentColor;
2025-08-13 18:52:37 -07:00
}
}
2025-08-10 14:32:15 -07:00
}
2025-10-16 06:40:11 +00:00
.table-viewer__datum-editor {
2025-08-10 14:32:15 -07:00
border-top: globals.$default-border;
display: flex;
grid-area: editor;
2025-10-16 06:40:11 +00:00
height: 6rem;
}
.datum-editor {
&__container {
border-left: solid 4px transparent;
display: grid;
flex: 1;
grid-template: 'type-selector type-selector' max-content
'null-control value-control' max-content
'helpers helpers' auto / max-content auto;
&:has(:focus) {
border-left-color: #07f;
}
&--incomplete {
border-left-color: #f33;
}
}
2025-08-10 14:32:15 -07:00
2025-10-16 06:40:11 +00:00
&__type-selector {
grid-area: type-selector;
}
&__null-control {
@include globals.reset_button;
align-self: start;
grid-area: null-control;
padding: 0.75rem;
&--disabled {
opacity: 0.75;
}
}
&__text-input {
2025-08-10 14:32:15 -07:00
@include globals.reset_input;
2025-10-16 06:40:11 +00:00
grid-area: value-control;
2025-08-10 14:32:15 -07:00
font-family: globals.$font-family-data;
2025-10-16 06:40:11 +00:00
padding: 0.75rem 0.5rem;
}
}
2025-08-24 23:24:01 -07:00
.toolbar-item {
padding: 0.5rem;
&__button {
@include globals.button-secondary;
}
}
.toolbar-popover {
&:popover-open {
@include globals.rounded;
inset: unset;
border: globals.$popover-border;
margin: 0;
margin-top: 0.25rem;
position: fixed;
display: block;
width: 24rem;
padding: 0.5rem;
background: #fff;
box-shadow: globals.$popover-shadow;
}
}