pxt-core
Version:
Microsoft MakeCode provides Blocks / JavaScript / Python tools and editors
523 lines (454 loc) • 13 kB
text/less
/*******************************
Blockly Toolbox
*******************************/
.blocklyToolbox, .monacoToolboxDiv {
background: var(--pxt-target-background3) ;
color: var(--pxt-target-foreground3);
overflow-x: visible;
overflow-y: auto;
padding-top: 0;
z-index: @blocklyToolboxZIndex;
/* so blocks go over toolbox when dragging */
-webkit-tap-highlight-color: transparent;
-webkit-transition: width 1s, background 0.3s; /* Safari */
-moz-transition: width 1s, background 0.3s; /* Mozilla */
-webkit-transition-timing-function: ease-in; /* Mozilla */
-o-transition: width 1s, background 0.3s; /* Opera */
transition: width 1s, background 0.3s;
transition-timing-function: ease-in;
height: 100%;
}
.blocklyToolbox text,
.monacoToolboxDiv text,
span.blocklyTreeIcon {
user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-webkit-user-select: none;
cursor: inherit;
}
.blocklyToolbox.blocklyToolboxDeleting {
background: var(--pxt-colors-red-background) ;
filter: brightness(1.2) saturate(0.8);
}
.monacoToolboxDiv.invisible {
display: none ;
}
.debugger .blocklyToolbox {
width: 20%;
}
.debugger .blocklyToolbox, .debuggerToolbox {
height: 100%;
}
/*******************************
Monaco Flyout Only
*******************************/
#root.flyoutOnly {
// Hide toolbox categories section & flyout header
.monacoToolboxDiv, .monacoFlyoutHeading {
display: none;
}
#monacoEditorInner {
display: flex;
flex-direction: row;
#monacoFlyoutWidget {
position: relative;
border-radius: 0;
border-right: 5px solid var(--pxt-neutral-alpha80);
}
}
}
/*******************************
Toolbox root
*******************************/
div.blocklyTreeRoot {
padding: 0;
}
div.blocklyTreeRoot:focus {
outline: none;
}
/*******************************
Toolbox tree row
*******************************/
div.blocklyTreeRow {
line-height: 22px;
margin-bottom: 3px;
padding-right: 8px;
white-space: nowrap;
height: 100%;
cursor: pointer;
}
div.blocklyTreeRow:not(.blocklyTreeSelected):hover {
background-color: var(--pxt-target-background3-hover);
}
div.blocklyTreeSeparator {
border-bottom: solid var(--pxt-target-stencil3) 1px;
height: 0;
margin: 5px 0;
}
/* This horrendous selector and the next are for subcategories in the Blockly toolbox */
div.blocklyTreeRoot div div div div div.blocklyTreeRow {
border-left-width: 12px ;
padding-left: 0px ;
}
div.blocklyTreeRoot div div div div div.blocklyTreeRow span.blocklyTreeLabel {
font-size: 1rem;
}
/*******************************
Toolbox tree label
*******************************/
/* Blockly toolbox font size same as the page font */
span.blocklyTreeLabel {
padding: 0 3px;
vertical-align: middle;
font-family: @pageFont ;
font-weight: 200;
font-size: 1.15rem;
cursor: pointer;
}
span.blocklyTreeLabel, text.blocklyText {
user-drag: none;
user-select: none;
-moz-user-select: none;
-webkit-user-drag: none;
-webkit-user-select: none;
-ms-user-select: none;
}
/*******************************
Toolbox selected
*******************************/
.blocklyTreeSelected .blocklyTreeLabel {
// Has to contrast with block colors
color: var(--pxt-target-background3);
}
.blocklyTreeSelected .blocklyTreeIcon {
// Has to contrast with block colors
color: var(--pxt-target-background3);
}
.blocklyTreeSelected .blocklyTreeIcon.image-icon {
// Has to contrast with block colors
background-color: var(--pxt-target-background3);
}
/*******************************
Toolbox Label
*******************************/
.toolbox-title {
font-weight: 700;
font-size: 1.2rem;
padding: .5rem 1rem;
border-bottom: var(--pxt-target-stencil3);
user-select: none;
}
@media only screen and (max-width: @largestMobileScreen) {
.toolbox-title {
font-size: .75rem;
padding: 0 0.2rem;
}
}
/*******************************
Toolbox search
*******************************/
/* Blockly Search bar */
.blocklySearchInputField {
border: 0 ;
border-radius: 0 ;
}
@media only screen and (max-width: @largestMobileScreen) {
.blocklySearchInputField {
font-size: .75rem;
}
}
/*******************************
Toolbox delete
*******************************/
/* The trash icon inside the toolbox */
#blocklyTrashIcon {
position: absolute;
top: 30%;
left: 0;
text-align: center;
width: 100px;
height: 80px;
z-index: @blocklyTrashIconZIndex;
font-size:5rem;
color: var(--pxt-primary-background);
}
.flyoutOnly #blocklyTrashIcon {
top: auto;
bottom: 5%;
left: 10rem;
}
.blocklyToolboxDelete .blocklyTreeLabel {
cursor: url("<<<PATH>>>/handdelete.cur") auto;
}
/*******************************
Toolbox tree icon
*******************************/
/* Blockly toolbox icons */
span.blocklyTreeIcon {
opacity: 1;
margin: 0.0em 0.25em 0.0em 0.25em;
width: 30px;
font-family: 'Icons';
font-style: normal;
font-weight: normal;
text-decoration: inherit;
text-align: center;
speak: none;
font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
backface-visibility: hidden;
font-size: 1.3rem;
height: 100%;
display: none;
vertical-align: middle;
&:not(.image-icon) {
background: none ;
}
}
.blocklyTreeIcon.brandIcon {
font-family: 'brand-icons';
}
div.blocklyTreeIcon span {
vertical-align: middle;
}
.blocklyTreeIcon.blocklyTreeIconfunctions {
font-family: xicon ;
}
.blocklyFlyoutLabelIcon.blocklyFlyoutIconfunctions {
font-family: xicon ;
}
.blocklyFlyoutLabelIcon.brandIcon {
font-family: 'brand-icons';
}
.blocklyTreeIcon.image-icon {
background-color: var(--block-meta-color);
mask-image: var(--image-icon-url);
width: 30px;
height: 100%;
mask-size: 20px ;
mask-repeat: no-repeat ;
mask-position: 50% 50% ;
}
#search {
.blocklyTreeRow {
border-left-color: var(--pxt-target-foreground3);
&:not(.blocklyTreeSelected) .blocklyTreeIcon {
color: var(--pxt-target-foreground3);
}
}
}
/*******************************
Toolbox Animation
*******************************/
#monacoEditorToolbox {
.blocklyTreeRoot > div > div > .blocklyTreeAnimate {
animation: gliss 0.6s ease-in-out;
}
}
@keyframes gliss {
50% { border-left-width: 1.5rem; }
}
@keyframes glisssmall {
0% { width: 50px; }
50% { border-left-width: 1rem; }
100% { width: 50px; }
}
/*******************************
Blockly Accessibility
*******************************/
.blocklyTreeRow:focus {
outline: none;
}
.blocklyTreeRow:not(.blocklyTreeSelected):focus {
background-color: var(--pxt-target-background3-hover);
}
.blocklyToolbox .blocklyTreeRoot [role="treeitem"]:focus-visible {
outline: none;
}
/*******************************
Inverted Toolbox
*******************************/
#root.hc .invertedToolbox {
div.blocklyTreeRow {
background-color: var(--pxt-primary-background);
color: var(--pxt-primary-foreground);
}
div.blocklyTreeRow .blocklyTreeIcon:not(.blocklyTreeIconsearch) {
color: var(--block-meta-color);
}
div.blocklyTreeRow.blocklyTreeSelected {
background-color: var(--block-meta-color);
color: var(--pxt-primary-foreground);
.blocklyTreeIcon, .blocklyTreeLabel {
color: var(--pxt-primary-foreground);
}
}
}
.invertedToolbox .blocklyTreeRoot {
div.blocklyTreeRow {
background-color: var(--block-meta-color);
color: var(--pxt-primary-foreground);
}
div.blocklyTreeRow.blocklyTreeSelected {
background-color: var(--block-meta-color);
}
div.blocklyTreeRow:hover {
background-color: var(--block-faded-color);
color: var(--pxt-primary-foreground);
}
#search {
.blocklyTreeRow {
border-left-color: var(--pxt-primary-foreground);
}
.blocklyTreeIcon {
color: var(--pxt-primary-foreground);
}
}
}
/*******************************
Colored Toolbox
*******************************/
.coloredToolbox .blocklyTreeRoot {
div.blocklyTreeRow {
color: var(--block-meta-color);
border-left: 8px solid var(--block-meta-color);
}
div.blocklyTreeRow.blocklyTreeSelected {
background-color: var(--block-meta-color);
color: var(--pxt-primary-foreground);
}
}
/*******************************
Media Adjustments
*******************************/
/* Large Monitor */
@media only screen and (min-width: @largeMonitorBreakpoint) {
/* Blockly */
div.blocklyToolbox, div.monacoToolboxDiv {
min-width: @blocklyRowWidthWide;
}
div.blocklyTreeRow {
min-height: @blocklyRowHeightWide;
}
span.blocklyTreeIcon {
line-height: @blocklyRowHeightWide;
min-height: @blocklyRowHeightWide;
}
#root:not(.flyoutOnly) #blocklyTrashIcon {
width: @blocklyRowWidthWide;
}
}
/* Small Monitor */
@media only screen and (min-width: @computerBreakpoint) and (max-width: @largestSmallMonitor) {
/* Blockly row */
div.blocklyToolbox, div.monacoToolboxDiv {
min-width: @blocklyRowWidthComputer;
}
div.blocklyTreeRow {
min-height: @blocklyRowHeightComputer;
}
span.blocklyTreeIcon {
line-height: @blocklyRowHeightComputer;
min-height: @blocklyRowHeightComputer;
}
#root:not(.flyoutOnly) #blocklyTrashIcon {
width: @blocklyRowWidthComputer;
}
}
/* Tablet */
@media only screen and (min-width: @tabletBreakpoint) and (max-width: @largestTabletScreen) {
/* Blockly */
div.blocklyToolbox, div.monacoToolboxDiv {
min-width: @blocklyRowWidthTablet;
}
div.blocklyTreeRow {
min-height: @blocklyRowHeightTablet;
border-left-width: 12px ;
}
span.blocklyTreeIcon {
line-height: @blocklyRowHeightTablet;
min-height: @blocklyRowHeightTablet;
}
#root:not(.flyoutOnly) #blocklyTrashIcon {
width: @blocklyRowWidthTablet;
}
div.blocklyTreeRoot div div div div div.blocklyTreeRow {
border-left-width: 18px ;
}
}
/* Mobile */
@media only screen and (max-width: @largestMobileScreen) {
div.blocklyToolbox, div.monacoToolboxDiv {
min-width: @blocklyRowWidthMobile;
}
div.blocklyTreeRow {
min-height: @blocklyRowHeightMobile;
border-left-width: 6px ;
}
span.blocklyTreeIcon {
line-height: @blocklyRowHeightMobile;
min-height: @blocklyRowHeightMobile;
}
#root:not(.flyoutOnly) #blocklyTrashIcon {
width: @blocklyRowWidthMobile;
}
#monacoEditorToolbox {
.blocklyTreeRoot > div > div > .blocklyTreeAnimate {
animation: glisssmall 0.6s ease-in-out;
}
}
}
/* >= Small Monitor (Small Monitor + Large Monitor + Wide Monitor) */
@media only screen and (min-width: @computerBreakpoint) {
/* Blockly */
div.blocklyTreeRow {
border-left-width: 12px ;
}
div.blocklyTreeRoot div div:not(#advanced) div div div.blocklyTreeRow {
border-left-width: 18px ;
}
}
/* <= Small Monitor (Mobile + Tablet + Small Monitor) */
@media only screen and (max-width: @largestSmallMonitor) {
/* Blockly */
span.blocklyTreeLabel {
font-size:1rem;
}
}
/* <= Tablet (Mobile + Tablet) */
@media only screen and (max-width: @largestTabletScreen) {
/* Blockly */
span.blocklyTreeLabel {
font-size:1rem;
}
}
/* Mobile */
@media only screen and (max-width: @largestMobileScreen) {
/* Hide blockly tree labels on mobile */
span.blocklyTreeLabel, div.blocklyTreeRow:hover span.blocklyTreeLabel, div.blocklyTreeRow.blocklyTreeSelected:hover span.blocklyTreeLabel {
display: none ;
}
div.blocklyTreeRow {
padding-right: 0;
text-align: center;
}
div.blocklyTreeRoot div div div div div.blocklyTreeRow {
border-left-width: 8px ;
}
/* Blockly trash icon */
#root:not(.flyoutOnly) #blocklyTrashIcon {
font-size: 3rem;
}
/* Hide the blockly toolbox search */
.blocklySearchInput.ui.icon.input {
input {
padding-right: 0 ;
padding-left: 0.2rem;
}
i.icon {
display: none;
}
}
}