/notifications/new could be a saved flow's own page, so the draft now opens at /notifications/draft/new, which has a segment more than any flow's route. The placeholder id no longer needs reserving. The .notify-node-hits rule styled the removed tree rows; nothing renders it.
289 lines
4.4 KiB
CSS
289 lines
4.4 KiB
CSS
/* NotificationsPage — the flows, each drawn as its graph. */
|
|
|
|
.notify-flows {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.75em;
|
|
}
|
|
|
|
.notify-flow-head {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 0.5em;
|
|
}
|
|
|
|
.notify-flow-name {
|
|
flex: 1 1 auto;
|
|
min-width: 0;
|
|
font-weight: 600;
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
.notify-flow-state {
|
|
color: var(--muted);
|
|
}
|
|
|
|
.notify-flow-actions,
|
|
.notify-panel-actions {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
gap: 0.5em;
|
|
}
|
|
|
|
.notify-graph {
|
|
margin-top: 0.4em;
|
|
}
|
|
|
|
.notify-off {
|
|
opacity: 0.6;
|
|
}
|
|
|
|
/* FlowEditorPage — the head row, the canvas and the inspector beside it. */
|
|
.notify-editor-head {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: flex-end;
|
|
gap: 0.75em 1em;
|
|
margin-bottom: 1em;
|
|
padding-bottom: 1em;
|
|
border-bottom: 1px solid var(--border);
|
|
}
|
|
|
|
.notify-editor-actions {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
gap: 0.5em;
|
|
margin-left: auto;
|
|
}
|
|
|
|
.notify-editor-body {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: flex-start;
|
|
gap: 1em;
|
|
}
|
|
|
|
.notify-canvas-wrap {
|
|
flex: 1 1 24em;
|
|
min-width: 0;
|
|
}
|
|
|
|
.notify-palette {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
gap: 0.5em;
|
|
margin-bottom: 0.5em;
|
|
}
|
|
|
|
.notify-chip {
|
|
padding: 0.2em 0.7em;
|
|
border: 1.5px solid var(--border);
|
|
border-radius: 999px;
|
|
background: var(--bg-elev);
|
|
color: var(--fg);
|
|
font: inherit;
|
|
cursor: grab;
|
|
touch-action: none;
|
|
}
|
|
|
|
.notify-chip-match {
|
|
border-color: var(--purple);
|
|
}
|
|
|
|
.notify-chip-todo {
|
|
border-color: var(--green);
|
|
}
|
|
|
|
.notify-chip-request_reviewer {
|
|
border-color: var(--green);
|
|
}
|
|
|
|
.notify-ghost {
|
|
position: fixed;
|
|
z-index: 10;
|
|
padding: 0.2em 0.6em;
|
|
border: 1.5px solid var(--fg);
|
|
border-radius: 6px;
|
|
background: var(--bg-elev);
|
|
color: var(--fg);
|
|
pointer-events: none;
|
|
}
|
|
|
|
.notify-sr {
|
|
position: absolute;
|
|
width: 1px;
|
|
height: 1px;
|
|
overflow: hidden;
|
|
clip-path: inset(50%);
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.notify-canvas {
|
|
max-height: 70vh;
|
|
user-select: none;
|
|
overflow: auto;
|
|
border: 1px solid var(--border);
|
|
border-radius: 6px;
|
|
background: var(--bg);
|
|
}
|
|
|
|
.notify-edge {
|
|
fill: none;
|
|
stroke: var(--muted);
|
|
stroke-width: 1.5;
|
|
}
|
|
|
|
.notify-box {
|
|
cursor: grab;
|
|
touch-action: none;
|
|
}
|
|
|
|
.notify-box-source {
|
|
cursor: pointer;
|
|
}
|
|
|
|
.notify-box-carried {
|
|
opacity: 0.45;
|
|
}
|
|
|
|
.notify-box.notify-box-target rect {
|
|
stroke: var(--green);
|
|
stroke-width: 3;
|
|
}
|
|
|
|
.notify-box.notify-box-refused rect {
|
|
stroke: var(--red);
|
|
stroke-width: 3;
|
|
stroke-dasharray: 5 3;
|
|
}
|
|
|
|
.notify-box rect {
|
|
fill: var(--bg-elev);
|
|
stroke: var(--border);
|
|
stroke-width: 1.5;
|
|
}
|
|
|
|
.notify-box-source rect {
|
|
stroke: var(--blue);
|
|
}
|
|
|
|
.notify-box-match rect {
|
|
stroke: var(--purple);
|
|
}
|
|
|
|
.notify-box-todo rect,
|
|
.notify-box-request_reviewer rect {
|
|
stroke: var(--green);
|
|
}
|
|
|
|
.notify-box:focus {
|
|
outline: none;
|
|
}
|
|
|
|
.notify-box:focus rect,
|
|
.notify-box-selected rect {
|
|
stroke: var(--fg);
|
|
stroke-width: 2.5;
|
|
}
|
|
|
|
.notify-box text {
|
|
fill: var(--fg);
|
|
font-size: 12px;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.notify-box .notify-box-kind {
|
|
fill: var(--muted);
|
|
font-size: 10px;
|
|
}
|
|
|
|
/* The box's line of text is cut by the browser at the box's own edge. */
|
|
.notify-box-text {
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
color: var(--fg);
|
|
font-size: 12px;
|
|
line-height: 16px;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.notify-inspector {
|
|
flex: 0 1 22em;
|
|
min-width: 16em;
|
|
gap: 0.75em;
|
|
}
|
|
|
|
.notify-inspector h4 {
|
|
margin: 0;
|
|
}
|
|
|
|
.notify-inspector fieldset {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.6em;
|
|
margin: 0;
|
|
padding: 0.6em 0.8em 0.8em;
|
|
border: 1px solid var(--border);
|
|
border-radius: 6px;
|
|
}
|
|
|
|
.notify-inspector legend {
|
|
padding: 0 0.4em;
|
|
color: var(--muted);
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
.notify-condition {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: flex-end;
|
|
gap: 0.5em;
|
|
margin-bottom: 0.4em;
|
|
}
|
|
|
|
.notify-inspector-actions {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 0.5em;
|
|
margin-bottom: 0.75em;
|
|
}
|
|
|
|
.notify-node-id,
|
|
.notify-hint {
|
|
color: var(--muted);
|
|
font-size: 0.85em;
|
|
}
|
|
|
|
.notify-stale,
|
|
.notify-notice {
|
|
margin-bottom: 0.5em;
|
|
padding: 0.4em 0.6em;
|
|
border: 1px solid var(--red);
|
|
border-radius: 6px;
|
|
}
|
|
|
|
.notify-name {
|
|
flex: 0 1 24em;
|
|
}
|
|
|
|
/* The dry run's header line, and the router's "not available". */
|
|
.notify-dry-run {
|
|
margin: 0;
|
|
color: var(--muted);
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
.notify-unavailable {
|
|
margin: 0;
|
|
color: var(--muted);
|
|
}
|
|
|
|
.notify-failed {
|
|
color: var(--red);
|
|
}
|