diff --git a/qt/aqt/__init__.py b/qt/aqt/__init__.py index f1bc78cb9..767975982 100644 --- a/qt/aqt/__init__.py +++ b/qt/aqt/__init__.py @@ -353,6 +353,7 @@ class AnkiApp(QApplication): ( QPushButton, QCheckBox, + QRadioButton, # classes with PyQt5 compatibility proxy without_qt5_compat_wrapper(QToolButton), without_qt5_compat_wrapper(QTabBar), diff --git a/qt/aqt/forms/customstudy.ui b/qt/aqt/forms/customstudy.ui index 268955f88..c8c8d14d4 100644 --- a/qt/aqt/forms/customstudy.ui +++ b/qt/aqt/forms/customstudy.ui @@ -16,42 +16,42 @@ - + custom_study_review_ahead - + custom_study_review_forgotten_cards - + custom_study_increase_todays_new_card_limit - + custom_study_increase_todays_review_card_limit - + custom_study_study_by_card_state_or_tag - + custom_study_preview_new_cards diff --git a/qt/aqt/forms/fields.ui b/qt/aqt/forms/fields.ui index f0a372429..7fd9a3f40 100644 --- a/qt/aqt/forms/fields.ui +++ b/qt/aqt/forms/fields.ui @@ -155,7 +155,7 @@ - + fields_sort_by_this_field_in_the diff --git a/qt/aqt/forms/preview.ui b/qt/aqt/forms/preview.ui index 5a3268175..390e0afea 100644 --- a/qt/aqt/forms/preview.ui +++ b/qt/aqt/forms/preview.ui @@ -34,7 +34,7 @@ - + FRONT @@ -44,7 +44,7 @@ - + BACK diff --git a/qt/aqt/forms/stats.ui b/qt/aqt/forms/stats.ui index 07cc79f64..5557432b3 100644 --- a/qt/aqt/forms/stats.ui +++ b/qt/aqt/forms/stats.ui @@ -74,7 +74,7 @@ - + deck @@ -84,7 +84,7 @@ - + collection @@ -100,7 +100,7 @@ - + 1 month @@ -110,14 +110,14 @@ - + 1 year - + deck life diff --git a/qt/aqt/forms/template.ui b/qt/aqt/forms/template.ui index 3a1431585..61588d377 100644 --- a/qt/aqt/forms/template.ui +++ b/qt/aqt/forms/template.ui @@ -52,7 +52,7 @@ - + @@ -65,7 +65,7 @@ - + @@ -75,7 +75,7 @@ - + diff --git a/qt/aqt/stylesheets.py b/qt/aqt/stylesheets.py index 9d8d4f912..4e53ee34a 100644 --- a/qt/aqt/stylesheets.py +++ b/qt/aqt/stylesheets.py @@ -233,7 +233,7 @@ QHeaderView {{ background: {tm.var(colors.CANVAS)}; }} QHeaderView::section {{ - border: 1px solid {tm.var(colors.BORDER_SUBTLE)}; + border: 1px solid {tm.var(colors.BORDER)}; background: { button_gradient( tm.var(colors.BUTTON_GRADIENT_START), @@ -261,19 +261,19 @@ QHeaderView::section:hover {{ }; }} QHeaderView::section:first {{ - border-left: 1px solid {tm.var(colors.BORDER_SUBTLE)}; + border-left: 1px solid {tm.var(colors.BORDER)}; border-top-left-radius: {tm.var(props.BORDER_RADIUS)}; }} QHeaderView::section:!first {{ border-left: none; }} QHeaderView::section:last {{ - border-right: 1px solid {tm.var(colors.BORDER_SUBTLE)}; + border-right: 1px solid {tm.var(colors.BORDER)}; border-top-right-radius: {tm.var(props.BORDER_RADIUS)}; }} QHeaderView::section:only-one {{ - border-left: 1px solid {tm.var(colors.BORDER_SUBTLE)}; - border-right: 1px solid {tm.var(colors.BORDER_SUBTLE)}; + border-left: 1px solid {tm.var(colors.BORDER)}; + border-right: 1px solid {tm.var(colors.BORDER)}; border-top-left-radius: {tm.var(props.BORDER_RADIUS)}; border-top-right-radius: {tm.var(props.BORDER_RADIUS)}; }} @@ -368,24 +368,34 @@ QSpinBox::down-arrow:off {{ def checkbox_styles(tm: ThemeManager) -> str: return f""" -QCheckBox {{ +QCheckBox, +QRadioButton {{ spacing: 8px; margin: 2px 0; }} -QCheckBox::indicator {{ +QCheckBox::indicator, +QRadioButton::indicator {{ border: 1px solid {tm.var(colors.BUTTON_BORDER)}; - border-radius: {tm.var(props.BORDER_RADIUS)}; background: {tm.var(colors.CANVAS_INSET)}; width: 16px; height: 16px; }} +QCheckBox::indicator {{ + border-radius: {tm.var(props.BORDER_RADIUS)}; +}} +QRadioButton::indicator {{ + border-radius: 8px; +}} QCheckBox::indicator:hover, -QCheckBox::indicator:checked:hover {{ +QCheckBox::indicator:checked:hover, +QRadioButton::indicator:hover, +QRadioButton::indicator:checked:hover {{ border: 2px solid {tm.var(colors.BORDER_STRONG)}; width: 14px; height: 14px; }} -QCheckBox::indicator:checked {{ +QCheckBox::indicator:checked, +QRadioButton::indicator:checked {{ image: url({tm.themed_icon("mdi:check")}); }} QCheckBox::indicator:indeterminate {{ diff --git a/sass/_button-mixins.scss b/sass/_button-mixins.scss index 57126c0fe..1c4044dad 100644 --- a/sass/_button-mixins.scss +++ b/sass/_button-mixins.scss @@ -11,7 +11,7 @@ rgba(black, $intensity); } -@mixin btn-border-radius { +@mixin border-radius { border-top-left-radius: var(--border-left-radius); border-bottom-left-radius: var(--border-left-radius); @@ -19,75 +19,100 @@ border-bottom-right-radius: var(--border-right-radius); } -@mixin base( - $selector: button, - $with-primary: false, - $with-hover: true, - $with-active: true, - $with-disabled: true -) { - #{$selector} { - -webkit-appearance: none; - border: 1px solid var(--button-border); - - color: var(--fg); +@mixin background($primary: false) { + @if $primary { + background: linear-gradient( + 180deg, + var(--button-primary-gradient-start) 0%, + var(--button-primary-gradient-end) 100% + ); + &:hover { + background: linear-gradient( + 180deg, + var(--button-primary-hover-gradient-start) 0%, + var(--button-primary-hover-gradient-end) 100% + ); + border-color: var(--button-hover-border); + } + } @else { background: linear-gradient( 180deg, var(--button-gradient-start) 0%, var(--button-gradient-end) 100% ); - - @if ($with-hover) { - &:hover { - background: linear-gradient( - 180deg, - var(--button-hover-gradient-start) 0%, - var(--button-hover-gradient-end) 100% - ); - - border-color: var(--button-hover-border); - } - } - - @if ($with-primary) { - &.btn-primary { - color: white; - background: linear-gradient( - 180deg, - var(--button-primary-gradient-start) 0%, - var(--button-primary-gradient-end) 100% - ); - &:hover { - background: linear-gradient( - 180deg, - var(--button-primary-hover-gradient-start) 0%, - var(--button-primary-hover-gradient-end) 100% - ); - } - } - } - - @if ($with-active) { - &:active { - @include impressed-shadow(0.35); - box-shadow: none; - border-color: var(--button-border); - } - } - - @if ($with-disabled) { - &[disabled] { - color: var(--fg-disabled); - background-color: var(--button-gradient-end) !important; - box-shadow: none !important; - border-color: var(--button-gradient-end) !important; - } + &:hover { + background: linear-gradient( + 180deg, + var(--button-hover-gradient-start) 0%, + var(--button-hover-gradient-end) 100% + ); + border-color: var(--button-hover-border); } } } -$focus-color: vars.color(shadow-focus); +@mixin base( + $primary: false, + $border: true, + $with-hover: true, + $with-active: true, + $active-class: "", + $with-disabled: true +) { + -webkit-appearance: none; + cursor: pointer; + @if $border { + border: 1px solid var(--button-border); + } @else { + border: none; + } + @include background($primary); -@function down-arrow($color) { - @return url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='transparent' stroke='#{$color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"); + @if ($primary) { + color: white; + } @else { + color: var(--fg); + } + + @if ($with-active) { + &:active { + @include impressed-shadow(0.35); + border-color: var(--button-border); + } + @if ($active-class != "") { + &.#{$active-class} { + @include impressed-shadow(0.35); + border-color: var(--button-border); + } + } + } + + @if ($with-disabled) { + &[disabled], + &[disabled]:hover { + cursor: not-allowed; + color: var(--fg-disabled); + box-shadow: none !important; + background-color: var(--button-gradient-end); + } + } +} + +$focus-color: var(--shadow-focus); + +@mixin select($with-disabled: true) { + width: 100%; + white-space: nowrap; + text-overflow: ellipsis; + + pointer-events: all; + cursor: pointer; + + @include base($with-disabled: $with-disabled); + + border-radius: var(--border-radius); + + &.rtl { + direction: rtl; + } } diff --git a/sass/_vars.scss b/sass/_vars.scss index 3d728bb62..d9b4d4f69 100644 --- a/sass/_vars.scss +++ b/sass/_vars.scss @@ -34,8 +34,8 @@ $vars: ( dark: palette(lightgray, 3), ), disabled: ( - light: palette(darkgray, 2), - dark: palette(lightgray, 8), + light: palette(lightgray, 9), + dark: palette(darkgray, 0), ), faint: ( light: palette(lightgray, 7), diff --git a/sass/base.scss b/sass/base.scss index 1338de448..e01bbb45f 100644 --- a/sass/base.scss +++ b/sass/base.scss @@ -1,5 +1,6 @@ @use "vars"; @use "scrollbar"; +@use "button-mixins" as button; $body-color: var(--fg); $body-bg: var(--canvas); @@ -79,6 +80,11 @@ samp { background-position: left 0.75rem center; } } +.form-select:focus { + outline: none; + border: 1px solid var(--border-focus); + box-shadow: none !important; +} .night-mode .form-select:disabled { background-color: var(--fg-disabled); @@ -88,3 +94,20 @@ samp { transition: none !important; animation: none !important; } + +select { + @include button.background; + @include button.border-radius; + + cursor: pointer; + outline: none; + + &:focus, + &.focus { + border: 1px solid var(--border-focus); + } + option { + background: var(--canvas-elevated); + color: var(--fg); + } +} diff --git a/sass/buttons.scss b/sass/buttons.scss index edf161b91..247852aa5 100644 --- a/sass/buttons.scss +++ b/sass/buttons.scss @@ -1,4 +1,5 @@ @use "vars"; +@use "button-mixins" as button; :root { --focus-color: #{vars.palette-of(shadow-focus)}; @@ -21,30 +22,7 @@ } button { - -webkit-appearance: none; - color: vars.color(fg); - cursor: pointer; - - background: linear-gradient( - 180deg, - vars.color(button-gradient-start) 0%, - vars.color(button-gradient-end) 100% - ); - border: 1px solid vars.color(button-border); - - border-radius: vars.prop(border-radius); + @include button.base; + border-radius: var(--border-radius); padding: 3px 10px 3px; - - &:focus { - outline: none; - box-shadow: 0 0 0 1px var(--focus-color); - } -} - -button:hover { - background: linear-gradient( - 180deg, - vars.color(button-hover-gradient-start) 0%, - vars.color(button-hover-gradient-end) 100% - ); } diff --git a/ts/change-notetype/ChangeNotetypePage.svelte b/ts/change-notetype/ChangeNotetypePage.svelte index b1106af9f..033955d77 100644 --- a/ts/change-notetype/ChangeNotetypePage.svelte +++ b/ts/change-notetype/ChangeNotetypePage.svelte @@ -8,6 +8,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import Col from "../components/Col.svelte"; import Container from "../components/Container.svelte"; import Row from "../components/Row.svelte"; + import StickyContainer from "../components/StickyContainer.svelte"; import * as tr from "../lib/ftl"; import { ChangeNotetypeState, MapContext } from "./lib"; import Mapper from "./Mapper.svelte"; @@ -20,20 +21,27 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
- + + +
- + - + {#if $info.templates} {:else} diff --git a/ts/change-notetype/MapperRow.svelte b/ts/change-notetype/MapperRow.svelte index 71caf78cf..8ad7f111d 100644 --- a/ts/change-notetype/MapperRow.svelte +++ b/ts/change-notetype/MapperRow.svelte @@ -5,6 +5,8 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html - + {#each options as name, idx} + (oldIndex = idx)}>{name} {/each} - + {$info.getNewName(ctx, newIndex)} diff --git a/ts/change-notetype/NotetypeSelector.svelte b/ts/change-notetype/NotetypeSelector.svelte index 9dadfeb7e..69035b2cb 100644 --- a/ts/change-notetype/NotetypeSelector.svelte +++ b/ts/change-notetype/NotetypeSelector.svelte @@ -7,9 +7,8 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import ButtonGroup from "../components/ButtonGroup.svelte"; import ButtonToolbar from "../components/ButtonToolbar.svelte"; import LabelButton from "../components/LabelButton.svelte"; - import SelectButton from "../components/SelectButton.svelte"; + import Select from "../components/Select.svelte"; import SelectOption from "../components/SelectOption.svelte"; - import StickyContainer from "../components/StickyContainer.svelte"; import { arrowLeftIcon, arrowRightIcon } from "./icons"; import type { ChangeNotetypeState } from "./lib"; import SaveButton from "./SaveButton.svelte"; @@ -17,40 +16,30 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html export let state: ChangeNotetypeState; const notetypes = state.notetypes; const info = state.info; + let value: number = 0; - async function blur(event: Event): Promise { - await state.setTargetNotetypeIndex( - parseInt((event.target! as HTMLSelectElement).value), - ); - } + $: state.setTargetNotetypeIndex(value); + $: options = Array.from($notetypes, (notetype) => notetype.name); - - - - {$info.oldNotetypeName} - - - {#if window.getComputedStyle(document.body).direction == "rtl"} - {@html arrowLeftIcon} - {:else} - {@html arrowRightIcon} - {/if} - - - - {#each $notetypes as entry} - - {entry.name} - - {/each} - - + + + {$info.oldNotetypeName} + + + {#if window.getComputedStyle(document.body).direction == "rtl"} + {@html arrowLeftIcon} + {:else} + {@html arrowRightIcon} + {/if} + + + + - - - + + diff --git a/ts/change-notetype/SaveButton.svelte b/ts/change-notetype/SaveButton.svelte index d89a26a77..87c9e49fa 100644 --- a/ts/change-notetype/SaveButton.svelte +++ b/ts/change-notetype/SaveButton.svelte @@ -24,7 +24,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html elements -.night-mode select { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23FFFFFF' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"); -} diff --git a/ts/components/BUILD.bazel b/ts/components/BUILD.bazel index fd34c73f6..1e47ed39f 100644 --- a/ts/components/BUILD.bazel +++ b/ts/components/BUILD.bazel @@ -11,6 +11,7 @@ _ts_deps = [ "@npm//@floating-ui/dom", "@npm//bootstrap", "@npm//svelte", + "@npm//@mdi", ] compile_svelte( diff --git a/ts/components/DropdownItem.svelte b/ts/components/DropdownItem.svelte index 66575de39..bd1e7b2dc 100644 --- a/ts/components/DropdownItem.svelte +++ b/ts/components/DropdownItem.svelte @@ -3,17 +3,16 @@ Copyright: Ankitects Pty Ltd and contributors License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html --> -
+
diff --git a/ts/components/Select.svelte b/ts/components/Select.svelte new file mode 100644 index 000000000..cfcee6df4 --- /dev/null +++ b/ts/components/Select.svelte @@ -0,0 +1,86 @@ + + + + (showFloating = false)} + let:asReference +> +
(hover = true)} + on:mouseleave={() => (hover = false)} + on:click={() => (showFloating = !showFloating)} + bind:this={element} + use:asReference + bind:clientWidth + > + {current} +
+ + {@html chevronDown} + +
+
+ + + +
+ + diff --git a/ts/components/SelectButton.svelte b/ts/components/SelectButton.svelte deleted file mode 100644 index c4a4635e3..000000000 --- a/ts/components/SelectButton.svelte +++ /dev/null @@ -1,82 +0,0 @@ - - - - - -
- - diff --git a/ts/components/SelectOption.svelte b/ts/components/SelectOption.svelte index c0112a78e..d3b50c907 100644 --- a/ts/components/SelectOption.svelte +++ b/ts/components/SelectOption.svelte @@ -3,16 +3,22 @@ Copyright: Ankitects Pty Ltd and contributors License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html --> - - - + diff --git a/ts/components/SpinBox.svelte b/ts/components/SpinBox.svelte new file mode 100644 index 000000000..52c483096 --- /dev/null +++ b/ts/components/SpinBox.svelte @@ -0,0 +1,135 @@ + + + +
+ + (focused = true)} + on:focusout={() => (focused = false)} + /> + +
+ + diff --git a/ts/components/StickyContainer.svelte b/ts/components/StickyContainer.svelte index 2f03bc170..058ccb8c2 100644 --- a/ts/components/StickyContainer.svelte +++ b/ts/components/StickyContainer.svelte @@ -27,7 +27,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html bottom: 0; left: 0; right: 0; - z-index: 50; + z-index: var(--z-index, 50); background: var(--sticky-bg, var(--canvas)); border-style: solid; diff --git a/ts/components/WithFloating.svelte b/ts/components/WithFloating.svelte index f0f6955a1..c0ab7ae12 100644 --- a/ts/components/WithFloating.svelte +++ b/ts/components/WithFloating.svelte @@ -61,6 +61,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html export let closeOnInsideClick = false; export let keepOnKeyup = false; + export let hideArrow = false; export let reference: ReferenceElement | undefined = undefined; let floating: FloatingElement; @@ -170,13 +171,15 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html {/if} {/if} -
+
{#if show} {/if}
@@ -188,7 +191,9 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html border-radius: 5px; z-index: 890; - @include elevation.elevation(8); + &.show { + @include elevation.elevation(8); + } &-arrow { position: absolute; diff --git a/ts/components/WithOverlay.svelte b/ts/components/WithOverlay.svelte index 2cb82c536..1477425d7 100644 --- a/ts/components/WithOverlay.svelte +++ b/ts/components/WithOverlay.svelte @@ -140,7 +140,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html {/if} {/if} -
+
{#if show} {/if} @@ -154,6 +154,8 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html border-radius: 5px; z-index: 40; - @include elevation.elevation(5); + &.show { + @include elevation.elevation(5); + } } diff --git a/ts/components/icons.ts b/ts/components/icons.ts new file mode 100644 index 000000000..66fb4539c --- /dev/null +++ b/ts/components/icons.ts @@ -0,0 +1,8 @@ +// Copyright: Ankitects Pty Ltd and contributors +// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html + +/// + +export { default as chevronDown } from "@mdi/svg/svg/chevron-down.svg"; +export { default as chevronLeft } from "@mdi/svg/svg/chevron-left.svg"; +export { default as chevronRight } from "@mdi/svg/svg/chevron-right.svg"; diff --git a/ts/deck-options/ConfigSelector.svelte b/ts/deck-options/ConfigSelector.svelte index 58484a684..2e60d719a 100644 --- a/ts/deck-options/ConfigSelector.svelte +++ b/ts/deck-options/ConfigSelector.svelte @@ -9,7 +9,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import ButtonGroup from "../components/ButtonGroup.svelte"; import ButtonToolbar from "../components/ButtonToolbar.svelte"; import { modalsKey } from "../components/context-keys"; - import SelectButton from "../components/SelectButton.svelte"; + import Select from "../components/Select.svelte"; import SelectOption from "../components/SelectOption.svelte"; import StickyContainer from "../components/StickyContainer.svelte"; import * as tr from "../lib/ftl"; @@ -23,16 +23,19 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html const dispatch = createEventDispatcher(); const dispatchPresetChange = () => dispatch("presetchange"); + $: { + state.setCurrentIndex(value); + dispatchPresetChange(); + } + + $: options = Array.from($configList, (entry) => configLabel(entry)); + $: value = $configList.find((entry) => entry.current)?.idx || 0; + function configLabel(entry: ConfigListEntry): string { const count = tr.deckConfigUsedByDecks({ decks: entry.useCount }); return `${entry.name} (${count})`; } - function blur(event: Event): void { - state.setCurrentIndex(parseInt((event.target! as HTMLSelectElement).value)); - dispatchPresetChange(); - } - function onAddConfig(text: string): void { const trimmed = text.trim(); if (trimmed.length) { @@ -93,18 +96,13 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html - - {#each $configList as entry} - - {configLabel(entry)} + - + {#each options as option, idx} + (value = idx)} + >{option} {/each} - - - + diff --git a/ts/deck-options/EnumSelectorRow.svelte b/ts/deck-options/EnumSelectorRow.svelte index 2a8d76538..b57b0e2bd 100644 --- a/ts/deck-options/EnumSelectorRow.svelte +++ b/ts/deck-options/EnumSelectorRow.svelte @@ -23,7 +23,7 @@ - + diff --git a/ts/deck-options/RevertButton.svelte b/ts/deck-options/RevertButton.svelte index 4ff880f1b..966fb0b81 100644 --- a/ts/deck-options/RevertButton.svelte +++ b/ts/deck-options/RevertButton.svelte @@ -95,5 +95,6 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html .hide :global(.badge) { opacity: 0; + cursor: initial; } diff --git a/ts/deck-options/SaveButton.svelte b/ts/deck-options/SaveButton.svelte index 9f6235ff1..7165b1c31 100644 --- a/ts/deck-options/SaveButton.svelte +++ b/ts/deck-options/SaveButton.svelte @@ -5,11 +5,10 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html - - save(false)} - tooltip={getPlatformString(saveKeyCombination)} - --border-left-radius="5px">{tr.deckConfigSaveButton()} - save(false)} /> + save(false)} + tooltip={getPlatformString(saveKeyCombination)} + --border-left-radius="var(--border-radius)" +> +
{tr.deckConfigSaveButton()}
+
+ save(false)} /> - (showFloating = false)} + (showFloating = false)} +> + (showFloating = !showFloating)} + --border-right-radius="var(--border-radius)" + iconSize={80} > - (showFloating = !showFloating)} + {@html chevronDown} + + + dispatch("add")} + >{tr.deckConfigAddGroup()} - {@html chevronDown} - + dispatch("clone")} + >{tr.deckConfigCloneGroup()} + dispatch("rename")}> + {tr.deckConfigRenameGroup()} + + {tr.deckConfigRemoveGroup()} + + save(true)}> + {tr.deckConfigSaveToAllSubdecks()} + + + - - dispatch("add")} - >{tr.deckConfigAddGroup()} - dispatch("clone")} - >{tr.deckConfigCloneGroup()} - dispatch("rename")}> - {tr.deckConfigRenameGroup()} - - {tr.deckConfigRemoveGroup()} - - save(true)}> - {tr.deckConfigSaveToAllSubdecks()} - - - -
+ diff --git a/ts/deck-options/SpinBox.svelte b/ts/deck-options/SpinBox.svelte deleted file mode 100644 index c5b28ff91..000000000 --- a/ts/deck-options/SpinBox.svelte +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - diff --git a/ts/deck-options/SpinBoxFloat.svelte b/ts/deck-options/SpinBoxFloat.svelte deleted file mode 100644 index 2a3d9cd3a..000000000 --- a/ts/deck-options/SpinBoxFloat.svelte +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - diff --git a/ts/deck-options/SpinBoxFloatRow.svelte b/ts/deck-options/SpinBoxFloatRow.svelte index d33cf79d8..a95db9ce8 100644 --- a/ts/deck-options/SpinBoxFloatRow.svelte +++ b/ts/deck-options/SpinBoxFloatRow.svelte @@ -5,8 +5,8 @@