diff --git a/assets/css/themes/base/dark.css b/assets/css/themes/base/dark.css index af34c2f5..a459e5c8 100644 --- a/assets/css/themes/base/dark.css +++ b/assets/css/themes/base/dark.css @@ -165,5 +165,14 @@ --dnp-warning-hover-color: hsl(from $vote-down-color h s calc(l + 10)); --poll-form-label-background: hsl(from $border-color h s calc(l + 8)); --tag-dropdown-hover-background: hsl(from $meta-color h s calc(l - 4)); + + --autocomplete-history-color: var(--block-header-link-text-color); + --autocomplete-history-match-color: hsl(from var(--block-header-link-text-color) h s calc(l + 20)); + + --autocomplete-tag-color: hsl(from var(--foreground-color) h s calc(l - 5)); + --autocomplete-tag-match-color: hsl(from var(--foreground-color) h s calc(l + 20)); + --autocomplete-tag-count-color: var(--foreground-half-color); + + --autocomplete-match-selected-color: hsl(from var(--background-color) h s calc(l + 10)); } } diff --git a/assets/css/themes/base/light.css b/assets/css/themes/base/light.css index a72ad6f8..76c2351b 100644 --- a/assets/css/themes/base/light.css +++ b/assets/css/themes/base/light.css @@ -162,5 +162,14 @@ --dnp-warning-hover-color: hsl(from $vote-down-color h s calc(l + 10)); --poll-form-label-background: hsl(from $base-color h calc(s - 16) calc(l + 36)); --tag-dropdown-hover-background: hsl(from $foreground-color h s calc(l - 10)); + + --autocomplete-history-color: var(--block-header-link-text-color); + --autocomplete-history-match-color: hsl(from var(--block-header-link-text-color) h calc(s + 40) calc(l - 15)); + + --autocomplete-tag-color: hsl(from var(--foreground-color) h s calc(l + 20)); + --autocomplete-tag-match-color: hsl(from var(--foreground-color) h s calc(l - 20)); + --autocomplete-tag-count-color: var(--foreground-half-color); + + --autocomplete-match-selected-color: hsl(from var(--background-color) h s calc(l + 10)); } } diff --git a/assets/css/views/tags.css b/assets/css/views/tags.css index 057f8ca9..d4d577bd 100644 --- a/assets/css/views/tags.css +++ b/assets/css/views/tags.css @@ -24,27 +24,91 @@ } /* Autocomplete */ -.autocomplete__list { +.autocomplete { cursor: pointer; display: inline-block; - list-style: none; margin: 0; padding: 0; position: absolute; user-select: none; white-space: nowrap; z-index: 999; + font-family: var(--font-family-monospace); + background: var(--background-color); + + /* Borders */ + border-style: solid; + border-width: 1px; + border-top-width: 0; + border-color: var(--meta-border-color); + + /* Poor man's hack to make sure autocomplete doesn't grow beyond the viewport */ + max-width: 70vw; +} + +.autocomplete__separator { + margin: 0; } .autocomplete__item { - background: var(--base-color); - color: var(--link-light-color); padding: 5px; } -.autocomplete__item--selected { - background: var(--link-light-color); - color: var(--base-color); +.autocomplete__item__content { + /* Squash overly long suggestions */ + text-overflow: ellipsis; + overflow: hidden; +} + +.autocomplete__item__tag { + color: var(--autocomplete-tag-color); + display: flex; + justify-content: space-between; + white-space: pre; +} + +.autocomplete__item__history { + color: var(--autocomplete-history-color); +} + +.autocomplete__item__history__icon { + /* + Makes the history icon aligned in width with the autocomplete__item__tag's icon. + Yes, it's a dirty hack, don't look at me like that >_<, but turns out font-awesome + icons aren't actually all of the same size! + */ + font-size: 11.38px; +} + +.autocomplete__item__history__match { + font-weight: bold; + + /* Use a lighter color to highlight the matched part of the query */ + color: var(--autocomplete-history-match-color); +} + +.autocomplete__item__tag__match { + font-weight: bold; +} + +.autocomplete__item__tag__match:not(.autocomplete__item--selected) { + /* Use a lighter color to highlight the matched part of the query */ + color: var(--autocomplete-tag-match-color); +} + +.autocomplete__item__tag__count { + color: var(--autocomplete-tag-count-color); +} + +.autocomplete__item:hover:not(.autocomplete__item--selected) { + background: var(--autocomplete-match-selected-color); +} + +.autocomplete__item--selected, +.autocomplete__item--selected .autocomplete__item__history__match, +.autocomplete__item--selected .autocomplete__item__tag__match { + background: var(--foreground-color); + color: var(--background-color); } /* Tags */ diff --git a/assets/js/__tests__/tagsinput.spec.ts b/assets/js/__tests__/tagsinput.spec.ts index e32b2dfc..3c46eddc 100644 --- a/assets/js/__tests__/tagsinput.spec.ts +++ b/assets/js/__tests__/tagsinput.spec.ts @@ -1,6 +1,5 @@ import { $, $$, hideEl } from '../utils/dom'; import { assertNotNull } from '../utils/assert'; -import { TermSuggestion } from '../utils/suggestions'; import { setupTagsInput, addTag, reloadTagsInput } from '../tagsinput'; const formData = `