summaryrefslogtreecommitdiffstats
path: root/assets/sass/@primer/css/select-menu
diff options
context:
space:
mode:
Diffstat (limited to 'assets/sass/@primer/css/select-menu')
-rw-r--r--assets/sass/@primer/css/select-menu/README.md25
-rw-r--r--assets/sass/@primer/css/select-menu/index.scss3
-rw-r--r--assets/sass/@primer/css/select-menu/select-menu.scss428
3 files changed, 456 insertions, 0 deletions
diff --git a/assets/sass/@primer/css/select-menu/README.md b/assets/sass/@primer/css/select-menu/README.md
new file mode 100644
index 0000000..ca1c915
--- /dev/null
+++ b/assets/sass/@primer/css/select-menu/README.md
@@ -0,0 +1,25 @@
+---
+bundle: "select-menu"
+generated: true
+---
+
+# Primer CSS: `select-menu` bundle
+
+## Usage
+
+Primer CSS source files are written in [SCSS]. To include this Primer CSS module in your own build, ensure that your `node_modules` directory is listed in your Sass include paths, then import it with:
+
+```scss
+@import "@primer/css/select-menu/index.scss";
+```
+
+## Build
+
+The `@primer/css` npm package includes a standalone CSS build of this module in `dist/select-menu.css`.
+
+## License
+
+[MIT](https://github.com/primer/css/blob/master/LICENSE) © [GitHub](https://github.com/)
+
+
+[scss]: https://sass-lang.com/documentation/syntax#scss
diff --git a/assets/sass/@primer/css/select-menu/index.scss b/assets/sass/@primer/css/select-menu/index.scss
new file mode 100644
index 0000000..dd916e3
--- /dev/null
+++ b/assets/sass/@primer/css/select-menu/index.scss
@@ -0,0 +1,3 @@
+// support files
+@import "../support/index.scss";
+@import "./select-menu.scss";
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);
+ }
+}