aboutsummaryrefslogtreecommitdiffstats
path: root/app/assets/stylesheets/components/_dropdown.scss
diff options
context:
space:
mode:
authorsadbeast <sadbeast@sadbeast.com>2024-01-31 17:47:56 -0800
committersadbeast <sadbeast@sadbeast.com>2024-01-31 17:47:56 -0800
commit332ec93366315fa1ed7b4acd7a3407c96e8ddfa7 (patch)
tree6ae553317f12a7a6a29c849c8805ffab96436dc2 /app/assets/stylesheets/components/_dropdown.scss
downloadtd-main.tar.gz
td-main.tar.bz2
initial mistakeHEADmain
Diffstat (limited to 'app/assets/stylesheets/components/_dropdown.scss')
-rw-r--r--app/assets/stylesheets/components/_dropdown.scss214
1 files changed, 214 insertions, 0 deletions
diff --git a/app/assets/stylesheets/components/_dropdown.scss b/app/assets/stylesheets/components/_dropdown.scss
new file mode 100644
index 0000000..a16e6d2
--- /dev/null
+++ b/app/assets/stylesheets/components/_dropdown.scss
@@ -0,0 +1,214 @@
+/**
+ * Dropdown ([role="list"])
+ */
+
+// Menu
+details[role="list"],
+li[role="list"] {
+ position: relative;
+}
+
+details[role="list"] summary + ul,
+li[role="list"] > ul {
+ display: flex;
+ z-index: 99;
+ position: absolute;
+ top: auto;
+ right: 0;
+ left: 0;
+ flex-direction: column;
+ margin: 0;
+ padding: 0;
+ border: var(--border-width) solid var(--dropdown-border-color);
+ border-radius: var(--border-radius);
+ border-top-right-radius: 0;
+ border-top-left-radius: 0;
+ background-color: var(--dropdown-background-color);
+ box-shadow: var(--card-box-shadow);
+ color: var(--dropdown-color);
+ white-space: nowrap;
+
+ li {
+ width: 100%;
+ margin-bottom: 0;
+ padding: calc(var(--form-element-spacing-vertical) * 0.5)
+ var(--form-element-spacing-horizontal);
+ list-style: none;
+
+ &:first-of-type {
+ margin-top: calc(var(--form-element-spacing-vertical) * 0.5);
+ }
+
+ &:last-of-type {
+ margin-bottom: calc(var(--form-element-spacing-vertical) * 0.5);
+ }
+
+ a {
+ display: block;
+ margin: calc(var(--form-element-spacing-vertical) * -0.5)
+ calc(var(--form-element-spacing-horizontal) * -1);
+ padding: calc(var(--form-element-spacing-vertical) * 0.5)
+ var(--form-element-spacing-horizontal);
+ overflow: hidden;
+ color: var(--dropdown-color);
+ text-decoration: none;
+ text-overflow: ellipsis;
+
+ &:hover {
+ background-color: var(--dropdown-hover-background-color);
+ }
+ }
+ }
+}
+
+// Marker
+details[role="list"] summary,
+li[role="list"] > a {
+ &::after {
+ display: block;
+ width: 1rem;
+ height: calc(1rem * var(--line-height, 1.5));
+ margin-inline-start: 0.5rem;
+ float: right;
+ transform: rotate(0deg);
+ background-image: var(--icon-chevron);
+ background-position: right center;
+ background-size: 1rem auto;
+ background-repeat: no-repeat;
+ content: "";
+ }
+}
+
+// Global dropdown only
+details[role="list"] {
+ padding: 0;
+ border-bottom: none;
+
+ // Style <summary> as <select>
+ summary {
+ margin-bottom: 0;
+
+ &:not([role]) {
+ height: calc(
+ 1rem * var(--line-height) + var(--form-element-spacing-vertical) * 2 +
+ var(--border-width) * 2
+ );
+ padding: var(--form-element-spacing-vertical)
+ var(--form-element-spacing-horizontal);
+ border: var(--border-width) solid var(--form-element-border-color);
+ border-radius: var(--border-radius);
+ background-color: var(--form-element-background-color);
+ color: var(--form-element-placeholder-color);
+ line-height: inherit;
+ cursor: pointer;
+
+ @if $enable-transitions {
+ transition: background-color var(--transition),
+ border-color var(--transition), color var(--transition),
+ box-shadow var(--transition);
+ }
+
+ &:active,
+ &:focus {
+ border-color: var(--form-element-active-border-color);
+ background-color: var(--form-element-active-background-color);
+ }
+
+ &:focus {
+ box-shadow: 0 0 0 var(--outline-width) var(--form-element-focus-color);
+ }
+ }
+ }
+
+ // Close for details[role="list"]
+ &[open] summary {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+
+ &::before {
+ display: block;
+ z-index: 1;
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background: none;
+ content: "";
+ cursor: default;
+ }
+ }
+}
+
+// All Dropdowns inside <nav>
+nav details[role="list"] summary,
+nav li[role="list"] a {
+ display: flex;
+ direction: ltr;
+}
+
+nav details[role="list"] summary + ul,
+nav li[role="list"] > ul {
+ min-width: fit-content;
+ border-radius: var(--border-radius);
+
+ li a {
+ border-radius: 0;
+ }
+}
+
+// Dropdowns inside <nav> as nested <details>
+nav details[role="list"] {
+ summary,
+ summary:not([role]) {
+ height: auto;
+ padding: var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal);
+ }
+
+ &[open] summary {
+ border-radius: var(--border-radius);
+ }
+
+ summary + ul {
+ margin-top: var(--outline-width);
+ margin-inline-start: 0;
+ }
+
+ summary[role="link"] {
+ margin-bottom: calc(var(--nav-link-spacing-vertical) * -1);
+ line-height: var(--line-height);
+
+ + ul {
+ margin-top: calc(var(--nav-link-spacing-vertical) + var(--outline-width));
+ margin-inline-start: calc(var(--nav-link-spacing-horizontal) * -1);
+ }
+ }
+}
+
+// Dropdowns inside a <nav> without using <details>
+li[role="list"] {
+ // Open on hover (for mobile)
+ // or on active/focus (for keyboard navigation)
+ &:hover > ul,
+ a:active ~ ul,
+ a:focus ~ ul {
+ display: flex;
+ }
+
+ > ul {
+ display: none;
+ margin-top: calc(var(--nav-link-spacing-vertical) + var(--outline-width));
+ margin-inline-start: calc(
+ var(--nav-element-spacing-horizontal) - var(--nav-link-spacing-horizontal)
+ );
+ }
+
+ > a::after {
+ background-image: var(--icon-chevron);
+ }
+}
+
+label > details[role="list"] {
+ margin-top: calc(var(--spacing) * .25);
+ margin-bottom: var(--spacing);
+}