102 lines
3.2 KiB
CSS
102 lines
3.2 KiB
CSS
.viewport {
|
|
position: relative;
|
|
overflow: visible;
|
|
}
|
|
|
|
/* --board-grid-drag-height inherits down the DOM tree like any custom property. A capped
|
|
section's own GridPreviewLayer effect correctly avoids setting it on itself (see
|
|
grid-preview-layer.tsx), but that does nothing to stop it inheriting the value an
|
|
*uncapped* ancestor section (e.g. the board's root section) legitimately sets on itself
|
|
while growing during a drag happening anywhere else on the board - any container (not just
|
|
a scrollable one - a non-scrollable, e.g. collapsible, container is just as capped) sits
|
|
inside that section's DOM tree, so the stray value cascades straight through and silently
|
|
defeats the `var(--board-grid-drag-height, ...px)` fallback in section-grid.tsx (including
|
|
its collapsibleHeaderInset adjustment), which only kicks in when the property is entirely
|
|
unset, not merely inherited. Reset it here so every container can never inherit a stray
|
|
value from anywhere above it, no matter what any ancestor's own drag state is doing.
|
|
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_cascading_variables#custom_properties_and_inheritance */
|
|
.viewport[data-section-kind="container"] {
|
|
--board-grid-drag-height: initial;
|
|
}
|
|
|
|
/* Chained with .viewport (rather than a standalone .scrollableViewport rule) so this always
|
|
wins on specificity, not source order. GridEditor loads as a separate async chunk in edit
|
|
mode, and a board mutation can trigger its stylesheet to re-register - at equal specificity,
|
|
that flips which of these two rules the cascade picks, silently un-capping the container even
|
|
though its height (set inline, see section-grid.tsx) stays correct throughout. */
|
|
.viewport.scrollableViewport {
|
|
overflow-x: hidden;
|
|
overflow-y: auto;
|
|
/* The grid content inside has a fixed pixel width matching this viewport's full
|
|
outer width (needed for the drag/resize math), so there's no room to reserve
|
|
for a scrollbar without it eating into - or overlapping - the content on
|
|
whichever side it renders. Hiding the native scrollbar track entirely (wheel/
|
|
touch/drag scrolling still works) avoids that instead of trying to reserve
|
|
space for it. */
|
|
scrollbar-width: none;
|
|
-ms-overflow-style: none;
|
|
--board-grid-drag-height: initial;
|
|
}
|
|
|
|
.staticGrid,
|
|
.editorGrid {
|
|
position: relative;
|
|
overflow: visible;
|
|
}
|
|
|
|
.editorGrid {
|
|
position: absolute;
|
|
inset: 0 auto auto 0;
|
|
}
|
|
|
|
.editorPortalHost {
|
|
display: contents;
|
|
}
|
|
|
|
.staticItem {
|
|
overflow: visible;
|
|
}
|
|
|
|
.contentMount {
|
|
position: absolute;
|
|
inset: var(--board-grid-item-inset, 0px);
|
|
overflow: visible;
|
|
}
|
|
|
|
.staticItem[data-type="item"] > .contentMount {
|
|
inset: calc(10px * var(--board-canvas-inverse-scale, 1));
|
|
}
|
|
|
|
.staticItem:has([data-board-container-label]) {
|
|
z-index: 2;
|
|
}
|
|
|
|
.editorEntry {
|
|
overflow: visible;
|
|
cursor: grab;
|
|
user-select: none;
|
|
}
|
|
|
|
.editorEntry:active {
|
|
cursor: grabbing;
|
|
}
|
|
|
|
.editorEntry:focus-visible,
|
|
.editorEntry[data-keyboard-editing="true"] {
|
|
outline: 2px solid var(--mantine-primary-color-filled);
|
|
outline-offset: 2px;
|
|
border-radius: var(--mantine-radius-md);
|
|
}
|
|
|
|
.liveRegion {
|
|
position: absolute;
|
|
width: 1px;
|
|
height: 1px;
|
|
padding: 0;
|
|
margin: -1px;
|
|
overflow: hidden;
|
|
clip-path: inset(50%);
|
|
white-space: nowrap;
|
|
border: 0;
|
|
}
|