Simplify General Toolbar structure

This commit is contained in:
Henrik Giesel 2021-03-30 00:51:44 +02:00
parent 773f431bb8
commit bf433f13be
11 changed files with 69 additions and 93 deletions

View file

@ -1,10 +0,0 @@
<style lang="scss">
ul {
padding-inline-start: 0;
margin-bottom: 0;
}
</style>
<ul>
<slot />
</ul>

View file

@ -1,19 +0,0 @@
<style lang="scss">
div {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
position: sticky;
top: 0;
left: 0;
z-index: 5;
padding: 2px;
background: var(--bg-color);
}
</style>
<div>
<slot />
</div>

View file

@ -1,34 +1,55 @@
<script lang="typescript"> <script lang="typescript">
import ButtonItem from "./ButtonItem.svelte"; type Buttons =
| { component: SvelteComponent; [...arg: string]: unknown }
| Buttons[];
export let buttons: Buttons;
</script> </script>
<style lang="scss"> <style lang="scss">
ul { ul {
display: inline-block; display: inline-block;
padding-inline-start: 0;
margin-left: 0.25rem; padding-inline-start: 0;
margin-right: 0.25rem; margin-bottom: 0;
& :global(button) { & :global(button) {
margin-left: -1px; margin-left: -1px;
} }
}
& > :global(li:nth-child(1) button) { li {
margin-left: 0px; display: inline-block;
border-top-left-radius: 0.35rem; margin-bottom: 2px;
border-bottom-left-radius: 0.35rem;
&:nth-child(1) {
margin-left: 0.25rem;
& > :global(button) {
border-top-left-radius: 0.25rem;
border-bottom-left-radius: 0.25rem;
}
} }
& > :global(li:nth-last-child(1) button) { &:nth-last-child(1) {
border-top-right-radius: 0.35rem; margin-right: 0.25rem;
border-bottom-right-radius: 0.35rem;
& > :global(button) {
border-top-right-radius: 0.25rem;
border-bottom-right-radius: 0.25rem;
}
} }
} }
</style> </style>
<ButtonItem> <ul>
<ul> {#each buttons as button}
<slot /> <li>
</ul> {#if Array.isArray(button)}
</ButtonItem> <svelte:self buttons={button} />
{:else}
<svelte:component this={button.component} {...button} />
{/if}
</li>
{/each}
</ul>

View file

@ -1,10 +0,0 @@
<style lang="scss">
li {
display: inline-block;
margin-bottom: 2px;
}
</style>
<li>
<slot />
</li>

View file

@ -1,6 +1,4 @@
<script lang="typescript"> <script lang="typescript">
import ButtonItem from "./ButtonItem.svelte";
export let className: string; export let className: string;
export let onChange: (event: ChangeEvent) => void; export let onChange: (event: ChangeEvent) => void;
</script> </script>
@ -28,8 +26,6 @@
} }
</style> </style>
<ButtonItem> <button>
<button> <span class={className}> <input type="color" on:change={onChange} /> </span>
<span class={className}> <input type="color" on:change={onChange} /> </span> </button>
</button>
</ButtonItem>

View file

@ -26,7 +26,6 @@
</script> </script>
<script lang="typescript"> <script lang="typescript">
import ButtonItem from "./ButtonItem.svelte";
import InnerButton from "./InnerButton.svelte"; import InnerButton from "./InnerButton.svelte";
export let className = ""; export let className = "";
@ -50,8 +49,6 @@
} }
</script> </script>
<ButtonItem> <InnerButton {className} {active} {onClick}>
<InnerButton {className} {active} {onClick}> {@html icon}
{@html icon} </InnerButton>
</InnerButton>
</ButtonItem>

View file

@ -1,6 +1,4 @@
<script lang="typescript"> <script lang="typescript">
import ButtonBarOuter from "./ButtonBarOuter.svelte";
import ButtonBar from "./ButtonBar.svelte";
import ButtonGroup from "./ButtonGroup.svelte"; import ButtonGroup from "./ButtonGroup.svelte";
import LabelButton from "./LabelButton.svelte"; import LabelButton from "./LabelButton.svelte";
@ -48,14 +46,21 @@
console.log(nightMode); console.log(nightMode);
</script> </script>
<ButtonBarOuter> <style lang="scss">
<ButtonBar> div {
{#each buttons as group} display: flex;
<ButtonGroup> flex-wrap: wrap;
{#each group as button}
<svelte:component this={button.component} {...button} /> position: sticky;
{/each} top: 0;
</ButtonGroup> left: 0;
{/each} z-index: 5;
</ButtonBar> padding: 2px;
</ButtonBarOuter>
background: var(--bg-color);
}
</style>
<div>
<ButtonGroup {buttons} />
</div>

View file

@ -1,5 +1,4 @@
<script lang="typescript"> <script lang="typescript">
import ButtonItem from "./ButtonItem.svelte";
import InnerButton from "./InnerButton.svelte"; import InnerButton from "./InnerButton.svelte";
export let className = ""; export let className = "";
@ -7,8 +6,6 @@
export let onClick: (event: ClickEvent) => void; export let onClick: (event: ClickEvent) => void;
</script> </script>
<ButtonItem> <InnerButton {className} {onClick}>
<InnerButton {className} {onClick}> {@html icon}
{@html icon} </InnerButton>
</InnerButton>
</ButtonItem>

View file

@ -1,6 +1,4 @@
<script lang="typescript"> <script lang="typescript">
import ButtonItem from "./ButtonItem.svelte";
export let label: string; export let label: string;
</script> </script>
@ -20,6 +18,4 @@
} }
</style> </style>
<ButtonItem> <button type="button" class="btn btn-secondary" on:click> {label} </button>
<button type="button" class="btn btn-secondary" on:click> {label} </button>
</ButtonItem>

View file

@ -6,6 +6,9 @@ anki-editable {
overflow: auto; overflow: auto;
padding: 6px; padding: 6px;
/* Fit bootstraps .rounded */
border-radius: 0.25rem;
&:empty::after { &:empty::after {
content: "\a"; content: "\a";
white-space: pre; white-space: pre;

View file

@ -24,7 +24,7 @@ export class EditingArea extends HTMLDivElement {
constructor() { constructor() {
super(); super();
this.attachShadow({ mode: "open" }); this.attachShadow({ mode: "open" });
this.className = "field"; this.className = "field rounded";
const rootStyle = document.createElement("link"); const rootStyle = document.createElement("link");
rootStyle.setAttribute("rel", "stylesheet"); rootStyle.setAttribute("rel", "stylesheet");