Beercss improvements

This commit is contained in:
WardPearce
2025-10-15 00:25:14 +13:00
parent d7ee20a765
commit 3ee20f52bd
15 changed files with 173 additions and 219 deletions
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "Materialious",
"version": "1.10.13",
"version": "1.10.14",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "Materialious",
"version": "1.10.13",
"version": "1.10.14",
"license": "MIT",
"dependencies": {
"@capacitor-community/electron": "^5.0.0",
+2 -2
View File
@@ -104,8 +104,8 @@ export class ElectronCapacitorApp {
join(app.getAppPath(), 'assets', process.platform === 'win32' ? 'appIcon.ico' : 'appIcon.png')
);
this.mainWindowState = windowStateKeeper({
defaultWidth: 1000,
defaultHeight: 800
defaultWidth: 1920,
defaultHeight: 1080
});
// Setup preload script path and construct our main window.
const preloadPath = join(app.getAppPath(), 'build', 'src', 'preload.js');
+6 -6
View File
@@ -1,12 +1,12 @@
{
"name": "materialious",
"version": "1.10.12",
"version": "1.10.14",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "materialious",
"version": "1.10.12",
"version": "1.10.14",
"hasInstallScript": true,
"dependencies": {
"@capacitor-community/electron": "^5.0.1",
@@ -17,7 +17,7 @@
"@capacitor/clipboard": "^7.0.0",
"@capacitor/core": "^7.4.3",
"@capacitor/screen-orientation": "^7.0.0",
"beercss": "^3.8.0",
"beercss": "^3.12.11",
"bgutils-js": "^3.2.0",
"capacitor-nodejs": "https://github.com/hampoelz/capacitor-nodejs/releases/download/v1.0.0-beta.9/capacitor-nodejs.tgz",
"fuse.js": "^7.0.0",
@@ -4307,9 +4307,9 @@
}
},
"node_modules/beercss": {
"version": "3.10.8",
"resolved": "https://registry.npmjs.org/beercss/-/beercss-3.10.8.tgz",
"integrity": "sha512-LWwkkhF5F3VAD2z3pkDuWD540l/OUKdway9n+ZW+6naX+bKYPl9PKh/nD47/djYqYeH4jGu9QZcpk7p3Xv7YfQ==",
"version": "3.12.11",
"resolved": "https://registry.npmjs.org/beercss/-/beercss-3.12.11.tgz",
"integrity": "sha512-9NQWL3kxSOb5RPWAV5BPVs64CS72F5Z4HgxusqD07Ho4asaTJB33/SkJBMclQeUQs7hFH2CJOgGgDnIsRk2RyQ==",
"license": "MIT",
"dependencies": {
"material-dynamic-colors": "^1.1.2"
+2 -2
View File
@@ -50,7 +50,7 @@
"@capacitor/clipboard": "^7.0.0",
"@capacitor/core": "^7.4.3",
"@capacitor/screen-orientation": "^7.0.0",
"beercss": "^3.8.0",
"beercss": "^3.12.11",
"bgutils-js": "^3.2.0",
"capacitor-nodejs": "https://github.com/hampoelz/capacitor-nodejs/releases/download/v1.0.0-beta.9/capacitor-nodejs.tgz",
"fuse.js": "^7.0.0",
@@ -70,4 +70,4 @@
"svelte-persisted-store": "^0.12.0",
"youtubei.js": "^15.1.1"
}
}
}
@@ -12,9 +12,10 @@
interface Props {
comment: Comment;
videoId: string;
isSubComp?: boolean;
}
let { comment, videoId }: Props = $props();
let { comment, videoId, isSubComp = false }: Props = $props();
let replies: Comments | undefined = $state(undefined);
@@ -53,7 +54,7 @@
});
</script>
<div class="comment">
<article class="comment" class:border={!isSubComp}>
{#if !$interfaceLowBandwidthMode}
<div class="comment-header">
{#if userPfp}
@@ -95,17 +96,16 @@
{#if replies}
<div style="margin-left: 5em;">
{#each replies.comments as reply}
<CommentSelf comment={reply} {videoId} />
<CommentSelf comment={reply} {videoId} isSubComp={true} />
{/each}
</div>
{/if}
</div>
</article>
<style>
.comment {
display: flex;
flex-direction: column;
margin-bottom: 1em;
white-space: pre-line;
}
@@ -223,7 +223,7 @@
{#each items as item, index}
<ContentColumn>
<article
class="no-padding android-tv-item"
class="no-padding android-tv-item border"
class:android-tv-focused={$isAndroidTvStore}
style="height: 100%;"
id={extractUniqueId(item)}
+1 -1
View File
@@ -34,9 +34,9 @@
<svg
version="1.1"
id="svg1"
class={classes}
height="100%"
width="70px"
xml:space="preserve"
xmlns="http://www.w3.org/2000/svg"
viewBox="50.17 104.37 109.67 88.27"
@@ -81,7 +81,7 @@
});
</script>
<dialog id="dialog-settings" class={dialogType}>
<dialog id="dialog-settings" class={dialogType + ' surface-container'}>
<nav style="margin-bottom: 1em;">
<h4 class="max">{$_('layout.settings')}</h4>
<button class="circle transparent" data-ui="#dialog-settings"><i>close</i></button>
@@ -245,7 +245,7 @@
}
.sideways-root {
height: 110px;
height: 112px;
display: flex;
align-items: flex-start;
}
@@ -30,13 +30,15 @@
<div style="white-space: pre-line; overflow-wrap: break-word;">
{@html description}
</div>
</div>
<nav class="scroll">
{#if video.keywords}
{#each video.keywords as keyword}
<a href={`/search/${encodeURIComponent(keyword)}`} class="chip">{keyword}</a>
{/each}
{/if}
</nav>
<article class="border">
<nav class="scroll">
{#if video.keywords}
{#each video.keywords as keyword}
<a href={`/search/${encodeURIComponent(keyword)}`} class="chip">{keyword}</a>
{/each}
{/if}
</nav>
</article>
</div>
</details>
+4 -24
View File
@@ -1,3 +1,7 @@
article {
box-shadow: none !important;
}
.thumbnail-corner {
padding: 0.1em 0.4em;
}
@@ -20,42 +24,18 @@ nav.bottom {
}
main.root {
padding-top: 7em !important;
padding-bottom: 5em !important;
max-height: 100vh;
overflow-y: auto;
}
nav.left {
padding-top: 2em;
}
dialog {
padding-top: calc(var(--safe-area-inset-top) + 1rem) !important;
}
.root-not-tv {
padding-left: 7em !important;
}
.row {
padding: 1em !important;
}
button.row {
background-color: transparent !important;
border: none !important;
color: var(--on-surface) !important;
width: 100%;
margin: 0 !important;
}
button.row:hover {
box-shadow: none !important;
background-color: transparent !important;
width: 100%;
}
@media screen and (max-width: 1000px) {
menu.mobile {
z-index: 9999 !important;
+131 -149
View File
@@ -269,166 +269,154 @@
{/if}
</svelte:head>
{#if !$isAndroidTvStore}
<nav class="left m l small">
<header></header>
<div>
{#if !$isAndroidTvStore}
<nav class="left m l surface-container">
<header
role="presentation"
onclick={() => goto($interfaceDefaultPage)}
style="cursor: pointer;"
tabindex="-1"
>
<Logo />
</header>
{#each getPages() as navPage}
{#if !navPage.requiresAuth || isLoggedIn}
<a href={navPage.href} class:active={$page.url.href.endsWith(navPage.href)}
><i>{navPage.icon}</i>
<div>{navPage.name}</div>
</a>
{/if}
{/each}
</nav>
{/if}
<nav class="top" id="top-content">
{#if !mobileSearchShow}
<button
onclick={() => (mobileSearchShow = !mobileSearchShow)}
class="transparent s circle large"
>
<i>search</i>
</button>
{/if}
{#if Capacitor.getPlatform() === 'electron'}
<nav class="no-space">
<button onclick={() => window.history.back()} class="border left-round">
<i>arrow_back</i>
</button>
<button onclick={() => window.history.forward()} class="border right-round">
<i>arrow_forward</i>
</button>
</nav>
{/if}
<div class="max m l"></div>
<div class="m l">
<Search />
</div>
{#if !mobileSearchShow}
<div class="max"></div>
{/if}
{#if mobileSearchShow}
<div style="width: 100%;">
<Search on:searchCancelled={() => (mobileSearchShow = false)} />
</div>
{:else}
{#if !Capacitor.isNativePlatform()}
<button data-ui="#sync-party" class="circle large transparent">
<i class:primary-text={$syncPartyPeerStore}>group</i>
<div class="tooltip bottom">{$_('layout.syncParty')}</div>
</button>
{/if}
{#if isLoggedIn}
<button class="circle large transparent" onclick={() => ui('#dialog-notifications')}
><i>notifications</i>
<div class="tooltip bottom">{$_('layout.notifications')}</div>
</button>
{/if}
<button class="circle large transparent" onclick={() => ui('#dialog-settings')}>
<i>settings</i>
<div class="tooltip bottom">{$_('layout.settings')}</div>
</button>
{#if !isLoggedIn}
<button onclick={login} class="circle large transparent">
<i>login</i>
<div class="tooltip bottom">{$_('layout.login')}</div>
</button>
{:else}
<button onclick={logout} class="circle large transparent">
<i>logout</i>
<div class="tooltip bottom">{$_('layout.logout')}</div>
</button>
{/if}
{/if}
</nav>
<nav class="bottom s">
{#each getPages() as navPage}
{#if !navPage.requiresAuth || isLoggedIn}
<a
class="round"
href={navPage.href}
class:active={$page.url.href.endsWith(navPage.href)}
data-sveltekit-preload-data="off"
><i>{navPage.icon}</i>
<div>{navPage.name}</div>
<span style="font-size: .8em;">{navPage.name}</span>
</a>
{/if}
{/each}
</nav>
{/if}
<nav class="top" id="top-content">
{#if !mobileSearchShow}
<button
onclick={() => (mobileSearchShow = !mobileSearchShow)}
class="transparent s circle large"
>
<i>search</i>
</button>
{/if}
<Settings />
{#if Capacitor.getPlatform() === 'electron'}
<nav class="no-space">
<button onclick={() => window.history.back()} class="border left-round">
<i>arrow_back</i>
</button>
<button onclick={() => window.history.forward()} class="border right-round">
<i>arrow_forward</i>
</button>
<dialog class="right" id="dialog-notifications">
<nav>
<h5 class="max">{$_('layout.notifications')}</h5>
<button class="circle transparent" data-ui="#dialog-notifications"><i>close</i></button>
</nav>
{/if}
<nav
role="presentation"
onclick={() => goto($interfaceDefaultPage)}
style="cursor: pointer;"
class="m l"
tabindex="-1"
>
<Logo />
<h6 class="l">Materialious</h6>
</nav>
<div class="max m l"></div>
<div class="m l">
<Search />
</div>
{#if !mobileSearchShow}
<div class="max"></div>
{/if}
{#if mobileSearchShow}
<div style="width: 100%;">
<Search on:searchCancelled={() => (mobileSearchShow = false)} />
</div>
{:else}
{#if !Capacitor.isNativePlatform()}
<button data-ui="#sync-party" class="circle large transparent">
<i class:primary-text={$syncPartyPeerStore}>group</i>
<div class="tooltip bottom">{$_('layout.syncParty')}</div>
</button>
{/if}
{#if isLoggedIn}
<button class="circle large transparent" onclick={() => ui('#dialog-notifications')}
><i>notifications</i>
<div class="tooltip bottom">{$_('layout.notifications')}</div>
</button>
{/if}
<button class="circle large transparent" onclick={() => ui('#dialog-settings')}>
<i>settings</i>
<div class="tooltip bottom">{$_('layout.settings')}</div>
</button>
{#if !isLoggedIn}
<button onclick={login} class="circle large transparent">
<i>login</i>
<div class="tooltip bottom">{$_('layout.login')}</div>
</button>
{#if notifications.length === 0}
<p>{$_('layout.noNewNotifications')}</p>
{:else}
<button onclick={logout} class="circle large transparent">
<i>logout</i>
<div class="tooltip bottom">{$_('layout.logout')}</div>
</button>
{/if}
{/if}
</nav>
<nav class="bottom s">
{#each getPages() as navPage}
{#if !navPage.requiresAuth || isLoggedIn}
<a
class="round"
href={navPage.href}
class:active={$page.url.href.endsWith(navPage.href)}
data-sveltekit-preload-data="off"
><i>{navPage.icon}</i>
<span style="font-size: .8em;">{navPage.name}</span>
</a>
{/if}
{/each}
</nav>
<Settings />
<dialog class="right" id="dialog-notifications">
<nav>
<h5 class="max">{$_('layout.notifications')}</h5>
<button class="circle transparent" data-ui="#dialog-notifications"><i>close</i></button>
</nav>
{#if notifications.length === 0}
<p>{$_('layout.noNewNotifications')}</p>
{:else}
{#each notifications as notification}
<article class="no-padding">
<Thumbnail video={notification}></Thumbnail>
</article>
{/each}
{/if}
</dialog>
<main
id="main-content"
class="responsive max root"
tabindex="0"
role="region"
class:root-not-tv={!$isAndroidTvStore}
>
{#if $isAndroidTvStore}
<div class="tabs">
{#each getPages() as navPage}
{#if !navPage.requiresAuth || isLoggedIn}
<a
href={navPage.href}
class:active={$page.url.href.endsWith(navPage.href)}
class="active"
data-sveltekit-preload-data="off"
>
<i>{navPage.icon}</i>
<span>{navPage.name}</span>
</a>
{/if}
{#each notifications as notification}
<article class="no-padding border">
<Thumbnail video={notification}></Thumbnail>
</article>
{/each}
</div>
{/if}
{#if $navigating}
<PageLoading />
{:else}
{@render children?.()}
{/if}
{/if}
</dialog>
<SyncParty />
</main>
<main id="main-content" class="responsive max root" tabindex="0" role="region">
{#if $isAndroidTvStore}
<div class="tabs">
{#each getPages() as navPage}
{#if !navPage.requiresAuth || isLoggedIn}
<a
href={navPage.href}
class:active={$page.url.href.endsWith(navPage.href)}
class="active"
data-sveltekit-preload-data="off"
>
<i>{navPage.icon}</i>
<span>{navPage.name}</span>
</a>
{/if}
{/each}
</div>
{/if}
{#if $navigating}
<PageLoading />
{:else}
{@render children?.()}
{/if}
<SyncParty />
</main>
</div>
<dialog class="modal" id="tv-login">
<h5>{$_('loginRequired')}</h5>
@@ -456,9 +444,3 @@
</nav>
</form>
</dialog>
<style>
nav.left a {
font-size: 0.8em;
}
</style>
@@ -22,14 +22,6 @@
}
</script>
<div class="space"></div>
<nav class="right-align">
<a class="button" href="/subscriptions/manage">
<i>subscriptions</i>
<span>{$_('subscriptions.manageSubscriptions')}</span>
</a>
</nav>
<ItemsList items={videos ?? []} />
<InfiniteLoading on:infinite={loadMore} />
@@ -303,7 +303,7 @@
clearTimeout(pauseTimeout);
}
pauseTimeout = setTimeout(() => {
// player.pause();
playerElement.pause();
pauseTimerSeconds = 0;
clearTimeout(pauseTimeout);
}, pauseTimerSeconds * 1000);
@@ -313,11 +313,9 @@
</script>
<svelte:head>
<title>{data.video.title} | Materialious</title>
<title>{data.video.title}</title>
</svelte:head>
<div class="space"></div>
<div class="grid">
<div class={`s12 m12 l${theatreMode ? '12' : '9'}`}>
<div style="display: flex;justify-content: center;">
@@ -417,12 +415,12 @@
</div>
</div>
<article>
<article class="border">
<Description video={data.video} description={data.content.description} />
</article>
{#if data.content.timestamps.length > 0}
<article>
<article class="border">
<details>
<summary id="chapter-section" class="bold none">
<nav>
@@ -465,7 +463,7 @@
{/if}
{#if comments && comments.comments.length > 0}
<article>
<article class="border">
<details>
<summary id="comment-section" class="none bold">
<nav>
@@ -569,7 +567,7 @@
</article>
{:else if data.video.recommendedVideos}
{#each data.video.recommendedVideos as recommendedVideo}
<article class="no-padding">
<article class="no-padding border">
{#key recommendedVideo.videoId}
<Thumbnail video={recommendedVideo} sideways={true} />
{/key}
@@ -125,7 +125,7 @@
<Author bind:subscribed video={data.video} />
<div class="space"></div>
<LikesDislikes video={data.video} returnYTDislikes={data.streamed.returnYTDislikes} />
<article class="border">
<article>
<Description video={data.video} description={data.content.description} />
</article>