UI: change tablist to reflect fixmycity-design, see #2107

This commit is contained in:
Pieter Vander Vennet 2025-08-27 02:23:06 +02:00
parent c30d52c5f4
commit 0f2e8486cd
4 changed files with 93 additions and 37 deletions

View file

@ -5444,6 +5444,46 @@ button.unstyled, .button-unstyled button {
padding: 0; padding: 0;
} }
/****** Tablist elements *****/
.tablist {
margin: 0.25rem;
padding: 0.5rem;
border: 2px dashed var(--button-background-hover);
border-radius: 0.5rem;
display: flex;
justify-content: center;
}
.tab {
border: unset;
border-radius: 0;
transition: all;
color: var(--foreground-color);
border-bottom: 2px solid var(--foreground-color);
font-weight: bold;
margin: 0.25rem;
padding: 0.25rem;
padding-left: 0.75rem;
padding-right: 0.75rem;
}
.tab-selected {
opacity: 100%;
background: var(--interactive-background);
}
/* Actually used, don't remove*/
.tab-unselected {
background: #00000000 !important;
opacity: 60%;
}
.tab-unselected:hover {
background: var(--interactive-background);
}
/******* Other input elements ******/ /******* Other input elements ******/
.hover-alert:hover { .hover-alert:hover {

View file

@ -43,11 +43,11 @@
} }
}} }}
> >
<div class="interactive sticky top-0 flex items-center justify-between"> <div class="tablist sticky top-0 flex items-center justify-center">
<TabList class="flex flex-wrap"> <TabList class="flex items-center justify-center">
{#if $$slots.title0} {#if $$slots.title0}
<Tab <Tab
class={({ selected }) => twJoin("tab", selected && "primary", !$condition0 && "hidden")} class={({ selected }) => twJoin("tab", selected ? "tab-selected": "tab-unselected", !$condition0 && "hidden")}
> >
<div bind:this={tabElements[0]} class="flex"> <div bind:this={tabElements[0]} class="flex">
<slot name="title0">Tab 0</slot> <slot name="title0">Tab 0</slot>
@ -56,7 +56,7 @@
{/if} {/if}
{#if $$slots.title1} {#if $$slots.title1}
<Tab <Tab
class={({ selected }) => twJoin("tab", selected && "primary", !$condition1 && "hidden")} class={({ selected }) => twJoin("tab", selected ? "tab-selected": "tab-unselected", !$condition1 && "hidden")}
> >
<div bind:this={tabElements[1]} class="flex"> <div bind:this={tabElements[1]} class="flex">
<slot name="title1" /> <slot name="title1" />
@ -65,7 +65,7 @@
{/if} {/if}
{#if $$slots.title2} {#if $$slots.title2}
<Tab <Tab
class={({ selected }) => twJoin("tab", selected && "primary", !$condition2 && "hidden")} class={({ selected }) => twJoin("tab", selected ? "tab-selected": "tab-unselected", !$condition2 && "hidden")}
> >
<div bind:this={tabElements[2]} class="flex"> <div bind:this={tabElements[2]} class="flex">
<slot name="title2" /> <slot name="title2" />
@ -74,7 +74,7 @@
{/if} {/if}
{#if $$slots.title3} {#if $$slots.title3}
<Tab <Tab
class={({ selected }) => twJoin("tab", selected && "primary", !$condition3 && "hidden")} class={({ selected }) => twJoin("tab", selected ? "tab-selected": "tab-unselected", !$condition3 && "hidden")}
> >
<div bind:this={tabElements[3]} class="flex"> <div bind:this={tabElements[3]} class="flex">
<slot name="title3" /> <slot name="title3" />
@ -83,7 +83,7 @@
{/if} {/if}
{#if $$slots.title4} {#if $$slots.title4}
<Tab <Tab
class={({ selected }) => twJoin("tab", selected && "primary", !$condition4 && "hidden")} class={({ selected }) => twJoin("tab", selected ? "tab-selected": "tab-unselected", !$condition4 && "hidden")}
> >
<div bind:this={tabElements[4]} class="flex"> <div bind:this={tabElements[4]} class="flex">
<slot name="title4" /> <slot name="title4" />
@ -92,7 +92,7 @@
{/if} {/if}
{#if $$slots.title5} {#if $$slots.title5}
<Tab <Tab
class={({ selected }) => twJoin("tab", selected && "primary", !$condition5 && "hidden")} class={({ selected }) => twJoin("tab", selected ? "tab-selected": "tab-unselected", !$condition5 && "hidden")}
> >
<div bind:this={tabElements[5]} class="flex"> <div bind:this={tabElements[5]} class="flex">
<slot name="title5" /> <slot name="title5" />
@ -101,7 +101,7 @@
{/if} {/if}
{#if $$slots.title6} {#if $$slots.title6}
<Tab <Tab
class={({ selected }) => twJoin("tab", selected && "primary", !$condition6 && "hidden")} class={({ selected }) => twJoin("tab", selected ? "tab-selected": "tab-unselected", !$condition6 && "hidden")}
> >
<div bind:this={tabElements[6]} class="flex"> <div bind:this={tabElements[6]} class="flex">
<slot name="title6" /> <slot name="title6" />
@ -167,19 +167,6 @@
height: calc(100% - 2rem); height: calc(100% - 2rem);
} }
:global(.tab) {
margin: 0.25rem;
padding: 0.25rem;
padding-left: 0.75rem;
padding-right: 0.75rem;
border-radius: 1rem;
}
:global(.tab .flex) {
align-items: center;
gap: 0.25rem;
}
:global(.tab span|div) { :global(.tab span|div) {
align-items: center; align-items: center;
gap: 0.25rem; gap: 0.25rem;
@ -190,8 +177,4 @@
fill: var(--interactive-contrast); fill: var(--interactive-contrast);
} }
:global(.tab-unselected) {
background-color: var(--background-color) !important;
color: var(--foreground-color) !important;
}
</style> </style>

View file

@ -31,9 +31,9 @@
<WikipediaArticle wikipediaDetails={_wikipediaStores[0]} /> <WikipediaArticle wikipediaDetails={_wikipediaStores[0]} />
{:else} {:else}
<TabGroup> <TabGroup>
<TabList> <TabList class="tablist">
{#each _wikipediaStores as store (store.tag)} {#each _wikipediaStores as store (store.tag)}
<Tab class={({ selected }) => (selected ? "tab-selected" : "tab-unselected")}> <Tab class={({ selected }) => ("tab "+ (selected ? "tab-selected" : "tab-unselected"))}>
<WikipediaTitle wikipediaDetails={store} /> <WikipediaTitle wikipediaDetails={store} />
</Tab> </Tab>
{/each} {/each}
@ -51,14 +51,5 @@
<style> <style>
/* Actually used, don't remove*/ /* Actually used, don't remove*/
.tab-selected {
background-color: rgb(59 130 246);
color: rgb(255 255 255);
}
/* Actually used, don't remove*/
.tab-unselected {
background-color: rgb(255 255 255);
color: rgb(0 0 0);
}
</style> </style>

View file

@ -293,6 +293,48 @@ button.unstyled, .button-unstyled button {
padding: 0; padding: 0;
} }
/****** Tablist elements *****/
.tablist {
margin: 0.25rem;
padding: 0.5rem;
border: 2px dashed var(--button-background-hover);
border-radius: 0.5rem;
display: flex;
justify-content: center;
}
.tab {
border: unset;
border-radius: 0;
transition: all;
color: var(--foreground-color);
border-bottom: 2px solid var(--foreground-color);
font-weight: bold;
margin: 0.25rem;
padding: 0.25rem;
padding-left: 0.75rem;
padding-right: 0.75rem;
}
.tab-selected {
opacity: 100%;
background: var(--interactive-background);
}
/* Actually used, don't remove*/
.tab-unselected {
background: #00000000 !important;
opacity: 60%;
}
.tab-unselected:hover {
background: var(--interactive-background);
}
/******* Other input elements ******/ /******* Other input elements ******/
.hover-alert:hover { .hover-alert:hover {