summaryrefslogtreecommitdiffstats
path: root/assets/sass/@primer/css/select-menu/select-menu.scss
diff options
context:
space:
mode:
authoramzrk22020-04-13 19:13:39 +0800
committeramzrk22020-04-13 19:13:39 +0800
commit6bdd1c4c0ea567c45fdecb1e858a99ee5da246ad (patch)
treeb13e4c3a49823b602ebb918c899dd4a964c1f445 /assets/sass/@primer/css/select-menu/select-menu.scss
downloadhugo-theme-fuji-6bdd1c4c0ea567c45fdecb1e858a99ee5da246ad.tar.gz
hugo-theme-fuji-6bdd1c4c0ea567c45fdecb1e858a99ee5da246ad.tar.bz2
hugo-theme-fuji-6bdd1c4c0ea567c45fdecb1e858a99ee5da246ad.zip
Initial commit
Diffstat (limited to 'assets/sass/@primer/css/select-menu/select-menu.scss')
-rw-r--r--assets/sass/@primer/css/select-menu/select-menu.scss428
1 files changed, 428 insertions, 0 deletions
diff --git a/assets/sass/@primer/css/select-menu/select-menu.scss b/assets/sass/@primer/css/select-menu/select-menu.scss
new file mode 100644
index 0000000..bf3b103
--- /dev/null
+++ b/assets/sass/@primer/css/select-menu/select-menu.scss
@@ -0,0 +1,428 @@
+// stylelint-disable selector-max-type
+// selector-max-type is needed for body:not(.intent-mouse) to target keyboard only styles.
+
+// TODO@15.0.0: remove styles below
+@media (hover: hover) {
+ .SelectMenu-tab:not([aria-checked="true"]):hover,
+ .SelectMenu-tab:not([aria-checked="true"]):active {
+ background-color: $bg-white;
+ }
+}
+
+$SelectMenu-max-height: 480px !default;
+
+// Select Menu
+//
+// A more advanced menu with support for navigation, filtering, and more.
+
+.SelectMenu {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 99;
+ display: flex;
+ padding: $spacer-3;
+ pointer-events: none;
+ flex-direction: column;
+
+ @include breakpoint(sm) {
+ position: absolute;
+ top: auto;
+ right: auto;
+ bottom: auto;
+ left: auto;
+ padding: 0;
+ }
+}
+
+// Backdrop
+//
+// Adds a dark, semi transparent "cover" underneat the modal. Only visible for xs.
+
+.SelectMenu::before {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ pointer-events: none;
+ content: "";
+ background-color: $bg-black-fade;
+
+ @include breakpoint(sm) {
+ display: none;
+ }
+}
+
+// Modal
+//
+// The main "box" that contains the content
+
+.SelectMenu-modal {
+ position: relative;
+ z-index: 99; // Needs to be higher than .details-overlay's z-index: 80.
+ display: flex;
+ max-height: 66%;
+ margin: auto 0;
+ overflow: hidden; // Enables border radius on scrollable child elements
+ pointer-events: auto;
+ flex-direction: column;
+ background-color: $bg-gray;
+ // stylelint-disable-next-line primer/borders
+ border-radius: $border-radius * 2;
+ // stylelint-disable-next-line primer/box-shadow
+ box-shadow: 0 0 18px rgba(0, 0, 0, 0.4);
+ animation: SelectMenu-modal-animation 0.12s cubic-bezier(0, 0.1, 0.1, 1) backwards;
+
+ @keyframes SelectMenu-modal-animation {
+ 0% {
+ opacity: 0;
+ transform: scale(0.9);
+ }
+ }
+
+ @keyframes SelectMenu-modal-animation--sm {
+ 0% {
+ opacity: 0;
+ transform: translateY(-$spacer-3);
+ }
+ }
+
+ @include breakpoint(sm) {
+ width: 300px;
+ height: auto;
+ max-height: $SelectMenu-max-height;
+ margin: $spacer-1 0 $spacer-3 0;
+ font-size: $font-size-small;
+ border: $border-width $border-style $border-gray-dark;
+ border-radius: $border-radius;
+ box-shadow: $box-shadow-medium;
+ animation-name: SelectMenu-modal-animation--sm;
+ }
+}
+
+// Header
+//
+// Used for showing a title and the close button. Close button is only visible for xs.
+
+.SelectMenu-header {
+ display: flex;
+ flex: none; // fixes header from getting squeezed in Safari iOS
+ padding: $spacer-3;
+
+ @include breakpoint(sm) {
+ padding-top: $spacer-2;
+ padding-bottom: $spacer-2;
+ }
+}
+
+.SelectMenu-title {
+ flex: auto;
+ font-size: $body-font-size;
+ font-weight: $font-weight-bold;
+
+ @include breakpoint(sm) {
+ font-size: inherit;
+ }
+}
+
+.SelectMenu-closeButton {
+ padding: $spacer-3;
+ margin: -$spacer-3;
+ color: $text-gray-light;
+ background-color: transparent;
+ border: 0;
+
+ @include breakpoint(sm) {
+ display: none;
+ }
+}
+
+// Filter
+//
+// An input to filter a large list
+
+.SelectMenu-filter {
+ padding: $spacer-3;
+ margin: 0;
+ border-top: $border;
+
+ @include breakpoint(sm) {
+ padding: $spacer-2;
+ }
+}
+
+.SelectMenu-input {
+ display: block;
+ width: 100%;
+
+ @include breakpoint(sm) {
+ font-size: $h5-size;
+ }
+}
+
+// List
+//
+// The container that holds all the list items. Starts scrolling when the list gets too long.
+
+.SelectMenu-list {
+ position: relative;
+ padding: 0;
+ margin: 0;
+ // stylelint-disable-next-line primer/spacing
+ margin-bottom: -$border-width; // Hides the last border in the list
+ flex: auto;
+ overflow-x: hidden;
+ overflow-y: auto;
+ background-color: $bg-white;
+ border-top: $border;
+ -webkit-overflow-scrolling: touch; // Adds momentum + bouncy scrolling
+}
+
+// List Item
+//
+// The interactive element used to make a selection
+
+.SelectMenu-item {
+ display: flex;
+ align-items: center;
+ width: 100%;
+ padding: $spacer-3;
+ overflow: hidden;
+ color: $text-gray;
+ text-align: left;
+ cursor: pointer;
+ background-color: $bg-white;
+ border: 0;
+ border-bottom: $border-width $border-style $border-gray-light;
+
+ @include breakpoint(sm) {
+ padding-top: $spacer-2;
+ padding-bottom: $spacer-2;
+ }
+}
+
+// Icon
+//
+// Icon shown on the left of a list item.
+
+.SelectMenu-icon {
+ width: $spacer-3; // fixed width to make sure following content aligns
+ margin-right: $spacer-2;
+ flex-shrink: 0;
+}
+
+// Check icon
+.SelectMenu-icon--check {
+ visibility: hidden;
+ transition: transform 0.12s cubic-bezier(0.5, 0.1, 1, 0.5), visibility 0s 0.12s linear;
+ transform: scale(0);
+}
+
+// Tabs
+//
+// Allows switching between multiple lists
+
+.SelectMenu-tabs {
+ display: flex;
+ flex-shrink: 0;
+ // stylelint-disable-next-line primer/spacing
+ margin-bottom: -$border-width; // hide border of element below
+ overflow-x: auto;
+ overflow-y: hidden;
+ border-top: $border;
+ -webkit-overflow-scrolling: touch;
+
+ // Hide scrollbar so it doesn't cover the text
+ &::-webkit-scrollbar {
+ display: none;
+ }
+
+ @include breakpoint(sm) {
+ padding: 0 $spacer-2;
+ border-top: 0;
+ }
+}
+
+.SelectMenu-tab {
+ flex: 1;
+ padding: $spacer-2 $spacer-3;
+ font-size: $font-size-small;
+ font-weight: $font-weight-semibold;
+ color: $text-gray-light;
+ text-align: center;
+ background-color: transparent;
+ border: 0;
+ // stylelint-disable-next-line primer/box-shadow
+ box-shadow: inset 0 -1px 0 $border-color;
+
+ @include breakpoint(sm) {
+ flex: none;
+ padding: $spacer-1 $spacer-3;
+ border: $border-width $border-style transparent;
+ border-bottom-width: 0;
+ border-top-left-radius: $border-radius;
+ border-top-right-radius: $border-radius;
+ }
+
+ &[aria-selected="true"] {
+ z-index: 1; // Keeps box-shadow visible when hovering
+ color: $text-gray-dark;
+ cursor: default;
+ background-color: $bg-white;
+ // stylelint-disable-next-line primer/box-shadow
+ box-shadow: 0 0 0 1px $border-color;
+
+ @include breakpoint(sm) {
+ border-color: $border-color;
+ box-shadow: none;
+ }
+ }
+}
+
+// Message, Blankslate and Loading
+//
+// A container used to show different kinds of content. Like a message, a blankslate or the loading animation.
+
+.SelectMenu-message {
+ border-bottom: $border-width $border-style $border-gray-light;
+}
+
+.SelectMenu-message,
+.SelectMenu-blankslate,
+.SelectMenu-loading {
+ padding: $spacer-4 $spacer-3;
+ text-align: center;
+ background-color: $bg-white;
+}
+
+// Divider
+//
+// Can be used to divide the list into multiple groups
+
+.SelectMenu-divider {
+ padding: $spacer-1 $spacer-3;
+ margin: 0;
+ font-size: $font-size-small;
+ font-weight: $font-weight-bold;
+ color: $text-gray-light;
+ background-color: $bg-gray;
+ border-bottom: $border-width $border-style $border-gray-light;
+}
+
+// Footer
+//
+// A container at the bottom.
+
+.SelectMenu-footer {
+ z-index: 0; // Avoid top border from getting covered by the negative margin of the list
+ padding: $spacer-2 $spacer-3;
+ font-size: $font-size-small;
+ color: $text-gray-light;
+ text-align: center;
+ border-top: $border;
+
+ @include breakpoint(sm) {
+ padding: $spacer-1 $spacer-2;
+ }
+}
+
+// Has Filter (modifier)
+//
+// Makes sure that the filter input keeps a fixed position at the top while typing. Only visible for xs.
+
+.SelectMenu--hasFilter {
+ .SelectMenu-modal {
+ height: 80%;
+ max-height: none;
+ margin-top: 0;
+
+ @include breakpoint(sm) {
+ height: auto;
+ max-height: $SelectMenu-max-height;
+ margin-top: $spacer-1;
+ }
+ }
+}
+
+// States
+//
+// Different states
+
+// Reset outlines
+.SelectMenu-tab:focus,
+.SelectMenu-item:focus {
+ outline: none;
+}
+
+// Reset <a> elements
+.SelectMenu-item:hover {
+ text-decoration: none;
+}
+
+// Selected
+//
+// Visible when a used clicks/taps on a list item
+
+.SelectMenu-item[aria-checked="true"] {
+ font-weight: $font-weight-semibold;
+ color: $text-gray-dark;
+
+ .SelectMenu-icon--check {
+ visibility: visible;
+ transition: transform 0.12s cubic-bezier(0, 0, 0.2, 1), visibility 0s linear;
+ transform: scale(1);
+ }
+}
+
+// Can hover states
+//
+// For mouse/keyboard input
+
+@media (hover: hover) {
+ body:not(.intent-mouse) .SelectMenu-item:focus,
+ .SelectMenu-item:hover {
+ background-color: $bg-gray;
+ }
+
+ .SelectMenu-item:active {
+ background-color: $bg-gray-light;
+ }
+
+ body:not(.intent-mouse) .SelectMenu-tab:focus {
+ // stylelint-disable-next-line primer/colors
+ background-color: $blue-100;
+ }
+
+ .SelectMenu-tab:not([aria-selected="true"]):hover {
+ color: $text-gray-dark;
+ // stylelint-disable-next-line primer/colors
+ background-color: $gray-200;
+ }
+
+ .SelectMenu-tab:not([aria-selected="true"]):active {
+ color: $text-gray-dark;
+ background-color: $bg-gray;
+ }
+}
+
+// Can not hover states
+//
+// For touch input
+
+@media (hover: none) {
+ // Android
+ .SelectMenu-item:focus,
+ .SelectMenu-item:active {
+ background-color: $bg-gray-light;
+ }
+
+ // iOS Safari
+ // :active would work if ontouchstart is added to the button
+ // Instead this tweaks the "native" highlight color
+ .SelectMenu-item {
+ -webkit-tap-highlight-color: rgba($gray-300, 0.5);
+ }
+}