diff --git a/.changeset/gentle-seas-jam.md b/.changeset/gentle-seas-jam.md
new file mode 100644
index 00000000..01f3f8ff
--- /dev/null
+++ b/.changeset/gentle-seas-jam.md
@@ -0,0 +1,9 @@
+---
+'@watching/clips-preact': patch
+'@watching/clips-react': patch
+'@watching/design': patch
+'@watching/clips': patch
+'@watching/tools': patch
+---
+
+Rename `ui-action` to `ui-button`
diff --git a/app/features/Account/Account.tsx b/app/features/Account/Account.tsx
index c2b5440a..4aaf8d76 100644
--- a/app/features/Account/Account.tsx
+++ b/app/features/Account/Account.tsx
@@ -9,7 +9,7 @@ import {
Heading,
TextBlock,
BlockStack,
- Action,
+ Button,
Section,
Text,
Banner,
@@ -37,7 +37,7 @@ import {
useGraphQLQueryData,
useGraphQLMutation,
} from '~/shared/graphql.ts';
-import {SignInWithAppleAction} from '~/shared/auth.ts';
+import {SignInWithAppleButton} from '~/shared/auth.ts';
import {SearchParam, PaymentStatus} from '~/global/subscriptions.ts';
@@ -170,14 +170,14 @@ function AccountSection({
Email: {email}
- {
await signOut.run();
navigate('/signed-out');
}}
>
Sign out
-
+
{paymentBanner}
@@ -217,10 +217,10 @@ function FreeAccountSection({onUpdate}: {onUpdate(): Promise}) {
- }>
+ }>
Use gift code…
-
-
+
+
@@ -290,26 +290,26 @@ function MemberAccountSection({
{giftCode == null && (
- }>
+ }>
Use gift code…
-
+
)}
{subscription?.status === 'ACTIVE' && (
-
+
)}
-
+
);
}
-function DeleteAccountAction() {
+function DeleteAccountButton() {
return (
- }>
+ }>
Delete…
-
+
);
}
@@ -324,7 +324,7 @@ function DeleteAccountModal() {
You won’t be able to get any of your data back once you delete your
account.
- {
await deleteAccount.run();
@@ -332,17 +332,17 @@ function DeleteAccountModal() {
}}
>
Delete account
-
+
);
}
-function CancelSubscriptionAction({onUpdate}: {onUpdate(): Promise}) {
+function CancelSubscriptionButton({onUpdate}: {onUpdate(): Promise}) {
return (
- }>
+ }>
Cancel…
-
+
);
}
@@ -357,7 +357,7 @@ function CancelSubscriptionModal({onUpdate}: {onUpdate(): Promise}) {
current season watchthroughs will not be interrupted, and all your
watch activity will be preserved.
- {
await cancelSubscription.run();
@@ -365,7 +365,7 @@ function CancelSubscriptionModal({onUpdate}: {onUpdate(): Promise}) {
}}
>
Cancel subscription
-
+
);
@@ -430,12 +430,12 @@ function SubscribeSection({
{children}
- Subscribe…
+ Subscribe…
);
}
-function SubscribeAction({
+function SubscribeButton({
level,
children,
}: RenderableProps<{
@@ -445,7 +445,7 @@ function SubscribeAction({
const prepareSubscription = useGraphQLMutation(prepareSubscriptionMutation);
return (
- {
@@ -457,7 +457,7 @@ function SubscribeAction({
}}
>
{children}
-
+
);
}
@@ -481,7 +481,7 @@ function AccountGiftCodeModal({onUpdate}: {onUpdate(): Promise}) {
- Redeem
+
@@ -511,7 +511,7 @@ function PasskeySection({
)}
- {
const [{startRegistration}, result] = await Promise.all([
import('@simplewebauthn/browser'),
@@ -538,7 +538,7 @@ function PasskeySection({
}}
>
Create a Passkey
-
+
);
@@ -555,7 +555,7 @@ function Passkey(props: PasskeyProps) {
return (
{id}
- }>Manage
+ }>Manage
);
}
@@ -566,7 +566,7 @@ function PasskeyManageMenu({passkey: {id}, onUpdate}: PasskeyProps) {
return (
);
@@ -600,16 +600,16 @@ function AppleSection({
Apple account
{account?.email ? email: {account.email} : null}
{account ? (
- {
await disconnectAppleAccount.run();
await onUpdate();
}}
>
Disconnect
-
+
) : (
-
Connect
-
+
)}
@@ -650,14 +650,14 @@ function GoogleSection({
Google account
username: {email}
- {
await disconnectAccount.run();
await onUpdate();
}}
>
Disconnect
-
+
);
@@ -687,14 +687,14 @@ function ConnectGoogleAccount({onUpdate}: {onUpdate(): Promise}) {
Connecting your Google account lets you sign in with Google.
- {
setError(false);
open({redirectTo: currentUrl.href});
}}
>
Connect Google
-
+
);
@@ -720,10 +720,10 @@ function GithubSection({
Github account
username: {username}
-
+
-
+
+
);
@@ -766,14 +766,14 @@ function ConnectGithubAccount({
Connecting your Github account lets you sign in with Github.
- {
setError(false);
open({redirectTo: currentUrl.href});
}}
>
Connect Github
-
+
);
diff --git a/app/features/Account/CreateAccount.tsx b/app/features/Account/CreateAccount.tsx
index dcb85162..30761b11 100644
--- a/app/features/Account/CreateAccount.tsx
+++ b/app/features/Account/CreateAccount.tsx
@@ -3,7 +3,7 @@ import {useSignal} from '@quilted/quilt/signals';
import {useNavigate, useCurrentURL} from '@quilted/quilt/navigation';
import {usePerformanceNavigation} from '@quilted/quilt/performance';
import {
- Action,
+ Button,
Banner,
TextField,
Form,
@@ -14,7 +14,7 @@ import {
} from '@lemon/zest';
import {CreateAccountErrorReason} from '~/global/auth.ts';
-import {SignInWithAppleAction} from '~/shared/auth.ts';
+import {SignInWithAppleButton} from '~/shared/auth.ts';
import {useGithubOAuthModal, GithubOAuthFlow} from '~/shared/github.ts';
import {useGoogleOAuthModal, GoogleOAuthFlow} from '~/shared/google.ts';
import {useGraphQLMutation} from '~/shared/graphql.ts';
@@ -90,7 +90,7 @@ function CreateAccountWithEmail() {
autocomplete="email"
/>
- Create account with email
+
);
@@ -107,7 +107,7 @@ function CreateAccountWithApple({
);
return (
-
Create account with Apple
-
+
);
}
@@ -152,7 +152,7 @@ function CreateAccountWithGithub({
});
return (
- {
open({
redirectTo:
@@ -170,7 +170,7 @@ function CreateAccountWithGithub({
}}
>
Create account with Github
-
+
);
}
@@ -191,7 +191,7 @@ function CreateAccountWithGoogle({
});
return (
- {
open({
redirectTo:
@@ -209,7 +209,7 @@ function CreateAccountWithGoogle({
}}
>
Create account with Google
-
+
);
}
diff --git a/app/features/Account/Goodbye.tsx b/app/features/Account/Goodbye.tsx
index 3231f39b..10396099 100644
--- a/app/features/Account/Goodbye.tsx
+++ b/app/features/Account/Goodbye.tsx
@@ -1,5 +1,5 @@
import {usePerformanceNavigation} from '@quilted/quilt/performance';
-import {TextBlock, BlockStack, Action} from '@lemon/zest';
+import {TextBlock, BlockStack, Button} from '@lemon/zest';
export default function Goodbye() {
usePerformanceNavigation();
@@ -7,7 +7,7 @@ export default function Goodbye() {
return (
Until we meet again!
- Go home
+
);
}
diff --git a/app/features/Account/Payment.tsx b/app/features/Account/Payment.tsx
index a9a4620d..308e80da 100644
--- a/app/features/Account/Payment.tsx
+++ b/app/features/Account/Payment.tsx
@@ -16,7 +16,7 @@ import {
type Signal,
} from '@quilted/quilt/signals';
import {createOptionalContext} from '@quilted/quilt/context';
-import {Action, BlockStack, Form, Banner} from '@lemon/zest';
+import {Button, BlockStack, Form, Banner} from '@lemon/zest';
import {Page} from '~/shared/page.ts';
import {
@@ -94,9 +94,9 @@ export default function Payment() {
-
+
+
diff --git a/app/features/Admin/Admin.tsx b/app/features/Admin/Admin.tsx
index c5c687f9..0551067f 100644
--- a/app/features/Admin/Admin.tsx
+++ b/app/features/Admin/Admin.tsx
@@ -1,5 +1,5 @@
import {
- Action,
+ Button,
Banner,
BlockStack,
InlineStack,
@@ -63,14 +63,14 @@ function CreateGiftCodeSection() {
)}
- {
await createAccountGiftCard.run();
await query.rerun();
}}
>
Create gift code
-
+
{giftCodes.map((giftCode) =>
@@ -100,23 +100,23 @@ function UnusedGiftCode({
- }
overlay={
}
>
- Actions
-
+ Buttons
+
);
}
diff --git a/app/features/Apps/Apps.tsx b/app/features/Apps/Apps.tsx
index 5fda1c7a..4c90ac00 100644
--- a/app/features/Apps/Apps.tsx
+++ b/app/features/Apps/Apps.tsx
@@ -3,7 +3,7 @@ import {
BlockStack,
View,
TextBlock,
- Action,
+ Button,
InlineStack,
Section,
Banner,
@@ -42,14 +42,14 @@ export default function Apps() {
{app.name}
{!app.isInstalled && (
- {
await installApp.run({id: app.id});
await query.rerun();
}}
>
Install
-
+
)}
@@ -72,7 +72,7 @@ export default function Apps() {
{extension.name}
{!extension.isInstalled && (
- {
await installExtension.run({
id: extension.id,
@@ -83,7 +83,7 @@ export default function Apps() {
}}
>
Install
-
+
)}
@@ -129,7 +129,7 @@ function AppSecretSection({app}: {app: AppsQueryData.Apps}) {
{app.userDetailsJWT}
- {
const result = await createSecret.run({id: app.id});
console.log(result);
@@ -137,7 +137,7 @@ function AppSecretSection({app}: {app: AppsQueryData.Apps}) {
inlineSize="content"
>
Create secret
-
+
diff --git a/app/features/Authentication/SignIn.tsx b/app/features/Authentication/SignIn.tsx
index fd22832f..9d781448 100644
--- a/app/features/Authentication/SignIn.tsx
+++ b/app/features/Authentication/SignIn.tsx
@@ -16,14 +16,14 @@ import {
BlockStack,
TextBlock,
Banner,
- Action,
+ Button,
} from '@lemon/zest';
import {SignInErrorReason} from '~/global/auth.ts';
import {useGithubOAuthModal, GithubOAuthFlow} from '~/shared/github.ts';
import {useGoogleOAuthModal, GoogleOAuthFlow} from '~/shared/google.ts';
import {useGraphQLMutation} from '~/shared/graphql.ts';
-import {SignInWithAppleAction} from '~/shared/auth.ts';
+import {SignInWithAppleButton} from '~/shared/auth.ts';
import signInWithEmailMutation from './graphql/SignInWithEmailMutation.graphql';
import startPasskeySignInMutation from './graphql/StartPasskeySignInMutation.graphql';
@@ -91,17 +91,17 @@ function SignInWithEmail() {
email.value = value;
}}
/>
- {
await signInWithEmail({email: email.value});
}}
>
Sign in email
-
-
+
+
+
);
@@ -196,7 +196,7 @@ function SignInWithApple({
const signInWithApple = useGraphQLMutation(signInWithAppleMutation);
return (
- {
const result = await signInWithApple.run({
@@ -217,7 +217,7 @@ function SignInWithApple({
}}
>
Sign in with Apple
-
+
);
}
@@ -238,7 +238,7 @@ function SignInWithGithub({
});
return (
- {
open({
redirectTo:
@@ -247,7 +247,7 @@ function SignInWithGithub({
}}
>
Sign in with Github
-
+
);
}
@@ -268,7 +268,7 @@ function SignInWithGoogle({
});
return (
- {
open({
redirectTo:
@@ -277,7 +277,7 @@ function SignInWithGoogle({
}}
>
Sign in with Google
-
+
);
}
diff --git a/app/features/Authentication/SignedOut.tsx b/app/features/Authentication/SignedOut.tsx
index ca1ea812..c1c3418f 100644
--- a/app/features/Authentication/SignedOut.tsx
+++ b/app/features/Authentication/SignedOut.tsx
@@ -1,5 +1,5 @@
import {usePerformanceNavigation} from '@quilted/quilt/performance';
-import {TextBlock, BlockStack, Action} from '@lemon/zest';
+import {TextBlock, BlockStack, Button} from '@lemon/zest';
export default function SignedOut() {
usePerformanceNavigation();
@@ -7,7 +7,7 @@ export default function SignedOut() {
return (
Until next time!
- Sign back in
+
);
}
diff --git a/app/features/Developer/AccessTokens/AccessTokens.tsx b/app/features/Developer/AccessTokens/AccessTokens.tsx
index a32b72af..e56536a5 100644
--- a/app/features/Developer/AccessTokens/AccessTokens.tsx
+++ b/app/features/Developer/AccessTokens/AccessTokens.tsx
@@ -4,7 +4,7 @@ import {usePerformanceNavigation} from '@quilted/quilt/performance';
import {
BlockStack,
TextBlock,
- Action,
+ Button,
Banner,
Text,
InlineGrid,
@@ -63,14 +63,14 @@ export default function AccessTokens() {
: 'never'}
- {
await deleteAccessToken.run({id: accessToken.id});
await query.rerun();
}}
>
Delete
-
+
))
);
@@ -86,7 +86,7 @@ export default function AccessTokens() {
)}
{accessTokens}
- {
setCreateResult(undefined);
const result = await createAccessToken.run();
@@ -121,7 +121,7 @@ export default function AccessTokens() {
}}
>
Create access token
-
+
);
diff --git a/app/features/Developer/Apps/Apps.tsx b/app/features/Developer/Apps/Apps.tsx
index 89b70dea..64c66442 100644
--- a/app/features/Developer/Apps/Apps.tsx
+++ b/app/features/Developer/Apps/Apps.tsx
@@ -1,7 +1,7 @@
import type {ComponentChild} from 'preact';
import {usePerformanceNavigation} from '@quilted/quilt/performance';
-import {Text, InlineStack, View, Action, TextBlock} from '@lemon/zest';
+import {Text, InlineStack, View, Button, TextBlock} from '@lemon/zest';
import {Page} from '~/shared/page.ts';
import {
@@ -37,14 +37,14 @@ export default function Apps() {
name: {app.name}
extensions: {app.extensions.length}
- {
await deleteApp.run({id: app.id});
await query.rerun();
}}
>
Delete
-
+
));
}
diff --git a/app/features/Developer/AuthenticateCli/AuthenticateCli.tsx b/app/features/Developer/AuthenticateCli/AuthenticateCli.tsx
index 57c04eff..af39aa21 100644
--- a/app/features/Developer/AuthenticateCli/AuthenticateCli.tsx
+++ b/app/features/Developer/AuthenticateCli/AuthenticateCli.tsx
@@ -1,6 +1,6 @@
import type {ComponentChild} from 'preact';
import {usePerformanceNavigation} from '@quilted/quilt/performance';
-import {BlockStack, TextBlock, Text, Action, TextLink} from '@lemon/zest';
+import {BlockStack, TextBlock, Text, Button, TextLink} from '@lemon/zest';
import {Page} from '~/shared/page.ts';
@@ -53,13 +53,13 @@ export default function AuthenticateCli() {
.
- {
await authenticateCliWithAccessToken.perform();
}}
>
Authenticate the CLI
-
+
);
}
diff --git a/app/features/Developer/Console/Console.tsx b/app/features/Developer/Console/Console.tsx
index f8181126..1c08ca7e 100644
--- a/app/features/Developer/Console/Console.tsx
+++ b/app/features/Developer/Console/Console.tsx
@@ -3,7 +3,7 @@ import {usePerformanceNavigation} from '@quilted/quilt/performance';
import {
BlockStack,
TextField,
- Action,
+ Button,
Form,
TextBlock,
Heading,
@@ -60,7 +60,7 @@ function ConnectedConsole({server}: {server: ClipsLocalDevelopmentServer}) {
{extension.extends.map(({target, conditions, preview}) => {
return (
- }
@@ -82,7 +82,7 @@ function ConnectedConsole({server}: {server: ClipsLocalDevelopmentServer}) {
);
})}
-
+
);
})}
@@ -143,9 +143,9 @@ function ConnectToConsole({server}: {server: ClipsLocalDevelopmentServer}) {
localUrl.value = value;
}}
/>
-
+
+
);
diff --git a/app/features/Developer/CreatedAccountFromCli/CreatedAccountFromCli.tsx b/app/features/Developer/CreatedAccountFromCli/CreatedAccountFromCli.tsx
index f33f5893..68fdcb2b 100644
--- a/app/features/Developer/CreatedAccountFromCli/CreatedAccountFromCli.tsx
+++ b/app/features/Developer/CreatedAccountFromCli/CreatedAccountFromCli.tsx
@@ -1,6 +1,6 @@
import type {ComponentChild} from 'preact';
import {usePerformanceNavigation} from '@quilted/quilt/performance';
-import {BlockStack, TextBlock, Text, Action} from '@lemon/zest';
+import {BlockStack, TextBlock, Text, Button, TextLink} from '@lemon/zest';
import {Page} from '~/shared/page';
@@ -48,15 +48,18 @@ export default function CreatedAccountFromCli() {
If you want to revoke access to this token in the future, you can do
so on the{' '}
- access tokens page.
+
+ access tokens page
+
+ .
- {
await authenticateCliWithAccessToken.perform();
}}
>
Authenticate the CLI
-
+
);
}
diff --git a/app/features/Developer/Developer.tsx b/app/features/Developer/Developer.tsx
index 6a56114e..508c6eab 100644
--- a/app/features/Developer/Developer.tsx
+++ b/app/features/Developer/Developer.tsx
@@ -1,5 +1,5 @@
import {usePerformanceNavigation} from '@quilted/quilt/performance';
-import {BlockStack, InlineStack, Action} from '@lemon/zest';
+import {BlockStack, InlineStack, Button} from '@lemon/zest';
import {Page} from '~/shared/page.ts';
@@ -10,13 +10,13 @@ export default function Developer() {
- Apps
- Access tokens
- Console
-
+
+
+
+
- Component library
+
+
diff --git a/app/features/Internal/ComponentLibrary.tsx b/app/features/Internal/ComponentLibrary.tsx
index e74f556d..d547278b 100644
--- a/app/features/Internal/ComponentLibrary.tsx
+++ b/app/features/Internal/ComponentLibrary.tsx
@@ -3,7 +3,7 @@ import {useSignal} from '@quilted/quilt/signals';
import {usePerformanceNavigation} from '@quilted/quilt/performance';
import {
Style,
- Action,
+ Button,
ActionList,
Checkbox,
BlockStack,
@@ -46,7 +46,7 @@ import {
BlockGrid,
SkeletonTextBlock,
SkeletonText,
- SkeletonAction,
+ SkeletonButton,
Disclosure,
} from '@lemon/zest';
@@ -81,66 +81,66 @@ function ActionComponents() {
Actions
- Action (button)
- Action (link)
- Action (disabled)
+
+
+
- Action (emphasized)
-
+
+
+
- Action (subdued)
-
+
+
+
-
+
-
+
+
+
- }>Action (modal)
- Action (small)
- Action (large)
- }>Action (detail)
+ }>Action (modal)
+
+
+ }>Action (detail)
Pressable
Pressable (link)
- Action that fills
- Action that fills
-
+
+
+
+
- }>Accessory
- }>
+ }>Accessory
+ }>
Accessory (emphasized)
-
- }>
+
+ }>
Accessory (subdued)
-
- }>
+
+ }>
Accessory (destructive)
-
- }>
+
+ }>
Accessory (disabled)
-
- }>
+
+ }>
Accessory (accessory disabled)
-
- }>
+
+ }>
Accessory (emphasized disabled)
-
+
@@ -227,32 +227,32 @@ function ActionComponents() {
- Item one
- Item two
- Item three
-
+
+
+
+
-
+
+
+
@@ -267,23 +267,23 @@ function LoadingActionExample() {
Loading buttons
- Action (loading)
- Action (loading)
+ }
loading={loading}
>
Action (accessory loading)
-
-
+
+
-
+
+
-
+
+
+
);
@@ -293,13 +293,13 @@ function ActionExamplePopoverMenu(props: ComponentProps) {
return (
);
@@ -307,7 +307,7 @@ function ActionExamplePopoverMenu(props: ComponentProps) {
function ActionAccessoryExampleMenu({disabled = false} = {}) {
return (
-
-
}
@@ -344,8 +344,8 @@ function ActionExampleModal() {
}
>
Dismiss
-
- Save
+
+
@@ -411,20 +411,20 @@ function PopoverExample({
blockAttachment,
}: ComponentProps) {
return (
-
}
>
Popover
-
+
);
}
@@ -463,8 +463,8 @@ function DisplayComponents() {
@@ -782,11 +782,11 @@ function SkeletonComponents() {
Skeleton action
-
-
-
-
-
+
+
+
+
+
Skeleton text
diff --git a/app/features/Series/Series.tsx b/app/features/Series/Series.tsx
index 9f4fd7b2..8428cb43 100644
--- a/app/features/Series/Series.tsx
+++ b/app/features/Series/Series.tsx
@@ -3,7 +3,7 @@ import {useSignal} from '@quilted/quilt/signals';
import {useNavigate} from '@quilted/quilt/navigation';
import {usePerformanceNavigation} from '@quilted/quilt/performance';
import {
- Action,
+ Button,
ActionList,
BlockStack,
InlineStack,
@@ -124,31 +124,31 @@ function SeriesWithData({
overlay={
{user.role === 'ADMIN' && (
)}
@@ -172,12 +172,12 @@ function SeriesWithData({
viewport: {min: 'large'},
})}
>
-
- ) {
@@ -261,16 +261,16 @@ function WatchSeriesAction({
if (ongoingWatchThrough != null) {
return (
-
+
+
);
}
return (
- {
const result = await startWatchThrough.run({
@@ -283,11 +283,11 @@ function WatchSeriesAction({
}}
>
{watchThroughs.length > 0 ? 'Watch again' : 'Watch'}
-
+
);
}
-function WatchlistAction({
+function WatchlistButton({
id,
inWatchLater,
onUpdate,
@@ -302,7 +302,7 @@ function WatchlistAction({
const inWatchList = useSignal(inWatchLater, [inWatchLater]);
return (
-
Watchlist
-
+
);
}
-function SynchronizeSeriesWithTmdbAction({
+function SynchronizeSeriesWithTmdbButton({
seriesId,
onUpdate,
}: {
@@ -334,7 +334,7 @@ function SynchronizeSeriesWithTmdbAction({
const sync = useGraphQLMutation(synchronizeSeriesWithTmdbMutation);
return (
- {
await sync.run({id: seriesId});
@@ -342,19 +342,19 @@ function SynchronizeSeriesWithTmdbAction({
}}
>
Synchronize with TMDB
-
+
);
}
-function DeleteSeriesAction(props: ComponentProps) {
+function DeleteSeriesButton(props: ComponentProps) {
return (
- }
>
Delete…
-
+
);
}
@@ -370,7 +370,7 @@ function DeleteSeriesModal({seriesId}: {seriesId: string}) {
This will fail if any watchthroughs or lists reference the series.
- {
const result = await deleteSeries.run({id: seriesId});
@@ -384,7 +384,7 @@ function DeleteSeriesModal({seriesId}: {seriesId: string}) {
}}
>
Delete
-
+
@@ -465,7 +465,7 @@ function SeasonsSection({
{isUpcoming ? null : (
-
{season.status === 'CONTINUING' && (
)}
);
}
-function SeasonWatchThroughAction({
+function SeasonWatchThroughButton({
seriesId,
season,
lastSeason,
@@ -532,13 +532,13 @@ function SeasonWatchThroughAction({
const accessory =
season.id === lastSeason.id ? null : (
-
}
@@ -560,7 +560,7 @@ function SeasonWatchThroughAction({
);
return (
- {
const result = await startWatchThrough.run({
@@ -574,7 +574,7 @@ function SeasonWatchThroughAction({
}}
>
Watch
-
+
);
}
@@ -606,8 +606,8 @@ function SeasonEpisodesList({id, seriesId}: {id: string; seriesId: string}) {
image={}
menu={
+
);
}
-function WatchSeasonFromEpisodeAction({
+function WatchSeasonFromEpisodeButton({
episode,
season,
seriesId,
@@ -662,7 +662,7 @@ function WatchSeasonFromEpisodeAction({
const navigate = useNavigate();
return (
- {
const result = await startWatchThrough.run({
@@ -676,7 +676,7 @@ function WatchSeasonFromEpisodeAction({
}}
>
Watch from Episode {episode.number}
-
+
);
}
@@ -691,7 +691,7 @@ function WatchThroughsSection({
Watches
{watchThroughs.map((watchThrough) => (
-
-
+
))}
diff --git a/app/features/Start/Start.tsx b/app/features/Start/Start.tsx
index ddad344c..74c858c3 100644
--- a/app/features/Start/Start.tsx
+++ b/app/features/Start/Start.tsx
@@ -1,5 +1,5 @@
import {usePerformanceNavigation} from '@quilted/quilt/performance';
-import {Heading, TextBlock, Text, BlockStack, Action} from '@lemon/zest';
+import {Heading, TextBlock, Text, BlockStack, Button} from '@lemon/zest';
export default function Start() {
usePerformanceNavigation();
@@ -15,9 +15,9 @@ export default function Start() {
source, too.
- Sign in
- Create account
- Go to app
+
+
+
);
}
diff --git a/app/features/WatchThrough/WatchThrough.tsx b/app/features/WatchThrough/WatchThrough.tsx
index 80570d1d..fb655d85 100644
--- a/app/features/WatchThrough/WatchThrough.tsx
+++ b/app/features/WatchThrough/WatchThrough.tsx
@@ -11,7 +11,7 @@ import {
Style,
BlockStack,
InlineStack,
- Action,
+ Button,
ActionList,
Checkbox,
Heading,
@@ -209,21 +209,21 @@ function WatchThroughWithData({
}
menu={
}
>
@@ -347,17 +347,17 @@ function Finished({
{nextSeason && !nextSeason.isUpcoming && (
-
Watch Next Season
-
+
)}
{nextSeason &&
!nextSeason.isUpcoming &&
nextSeason.number !== series.seasonCount && (
-
Watch Rest of Series
-
+
)}
-
+
Watch Again
-
+
{from.season !== to.season && (
-
Watch Season {to.season} Again
-
+
)}
{(series.status === 'RETURNING' ||
series.status === 'IN_PRODUCTION' ||
@@ -390,7 +390,7 @@ function Finished({
);
}
-function WatchAgainAction({
+function WatchAgainButton({
children,
watchThrough,
episodes,
@@ -404,7 +404,7 @@ function WatchAgainAction({
);
return (
- {
const result = await startWatchThroughFromWatchThrough.run({
series: watchThrough.series.id,
@@ -421,7 +421,7 @@ function WatchAgainAction({
}}
>
{children}
-
+
);
}
@@ -501,24 +501,24 @@ function NextEpisode({
-
+
@@ -666,32 +666,32 @@ function NotesTextField({value: notes}: {value: Signal}) {
);
}
-interface SkipEpisodeActionProps extends SkipEpisodeOptions {}
+interface SkipEpisodeButtonProps extends SkipEpisodeOptions {}
-function SkipEpisodeAction(options: SkipEpisodeActionProps) {
+function SkipEpisodeButton(options: SkipEpisodeButtonProps) {
const skipEpisode = useSkipEpisode(options);
return (
-
+
+
);
}
-interface SkipEpisodeWithNotesActionProps extends SkipEpisodeOptions {}
+interface SkipEpisodeWithNotesButtonProps extends SkipEpisodeOptions {}
-function SkipEpisodeWithNotesAction(props: SkipEpisodeWithNotesActionProps) {
+function SkipEpisodeWithNotesButton(props: SkipEpisodeWithNotesButtonProps) {
return (
- }>
+ }>
Skip with note…
-
+
);
}
function SkipEpisodeModal({
form: watchForm,
...options
-}: SkipEpisodeWithNotesActionProps) {
+}: SkipEpisodeWithNotesButtonProps) {
const {initialActionDate} = usePageDetails();
const form = useMemo(
@@ -730,9 +730,9 @@ function SkipEpisodeModal({
-
+
+
@@ -778,24 +778,24 @@ function useSkipEpisode({form, watchThroughId, onUpdate}: SkipEpisodeOptions) {
return skipEpisode;
}
-interface DeleteWatchThroughActionProps {
+interface DeleteWatchThroughButtonProps {
id: string;
name: string;
}
-function DeleteWatchThroughAction(props: DeleteWatchThroughActionProps) {
+function DeleteWatchThroughButton(props: DeleteWatchThroughButtonProps) {
return (
- }
>
Delete…
-
+
);
}
-function DeleteWatchThroughModal({id, name}: DeleteWatchThroughActionProps) {
+function DeleteWatchThroughModal({id, name}: DeleteWatchThroughButtonProps) {
const navigate = useNavigate();
const deleteWatchThrough = useGraphQLMutation(deleteWatchThroughMutation);
@@ -812,9 +812,9 @@ function DeleteWatchThroughModal({id, name}: DeleteWatchThroughActionProps) {
- Cancel
+
- {
const result = await deleteWatchThrough.run({id});
@@ -825,23 +825,23 @@ function DeleteWatchThroughModal({id, name}: DeleteWatchThroughActionProps) {
}}
>
Delete
-
+
);
}
-interface StopWatchThroughActionProps {
+interface StopWatchThroughButtonProps {
id: string;
}
-function StopWatchThroughAction({id}: StopWatchThroughActionProps) {
+function StopWatchThroughButton({id}: StopWatchThroughButtonProps) {
const navigate = useNavigate();
const stopWatchThrough = useGraphQLMutation(stopWatchThroughMutation);
return (
- {
const result = await stopWatchThrough.run({id});
@@ -852,7 +852,7 @@ function StopWatchThroughAction({id}: StopWatchThroughActionProps) {
}}
>
Stop watching
-
+
);
}
@@ -903,7 +903,7 @@ function PreviousActionWatch({action}: {action: WatchAction}) {
) : null;
return (
-
@@ -922,7 +922,7 @@ function PreviousActionWatch({action}: {action: WatchAction}) {
) : null}
-
+
);
}
@@ -948,7 +948,7 @@ function PreviousActionSkip({action}: {action: SkipAction}) {
) : null;
return (
-
@@ -966,7 +966,7 @@ function PreviousActionSkip({action}: {action: SkipAction}) {
) : null}
-
+
);
}
diff --git a/app/features/Watching/Watching.tsx b/app/features/Watching/Watching.tsx
index a09252a0..4070d77f 100644
--- a/app/features/Watching/Watching.tsx
+++ b/app/features/Watching/Watching.tsx
@@ -3,7 +3,7 @@ import type {ComponentChild} from 'preact';
import {useLocalizedFormatting} from '@quilted/quilt/localize';
import {usePerformanceNavigation} from '@quilted/quilt/performance';
-import {Menu, Action, Poster, Spacer, Tag} from '@lemon/zest';
+import {Menu, Button, Poster, Spacer, Tag} from '@lemon/zest';
import {Page} from '~/shared/page.ts';
import {
@@ -49,9 +49,9 @@ export default function Watching(_: Props) {
heading="Watching"
menu={
}
>
diff --git a/app/foundation/frame/Frame.tsx b/app/foundation/frame/Frame.tsx
index cdaa8885..1ceb781a 100644
--- a/app/foundation/frame/Frame.tsx
+++ b/app/foundation/frame/Frame.tsx
@@ -1,6 +1,6 @@
import type {RenderableProps} from 'preact';
-import {Action, Menu, View, Modal, Icon} from '@lemon/zest';
+import {Button, Menu, View, Modal, Icon} from '@lemon/zest';
import {Navigation, NavigationItem} from './components/Navigation.ts';
@@ -17,9 +17,9 @@ export default function Frame({children}: RenderableProps) {
return (
- } overlay={}>
+ } overlay={}>
Go
-
+
@@ -74,31 +74,31 @@ function GoModal() {
return (
diff --git a/app/foundation/frame/components/Navigation/Navigation.tsx b/app/foundation/frame/components/Navigation/Navigation.tsx
index d20dc614..aa66497a 100644
--- a/app/foundation/frame/components/Navigation/Navigation.tsx
+++ b/app/foundation/frame/components/Navigation/Navigation.tsx
@@ -5,7 +5,7 @@ import {
useRouter,
type NavigateTo,
} from '@quilted/quilt/navigation';
-import {View, Action, Icon} from '@lemon/zest';
+import {View, Button, Icon} from '@lemon/zest';
import styles from './Navigation.module.css';
@@ -19,7 +19,7 @@ export interface NavigationItemProps {
to: NavigateTo;
icon: ComponentProps['source'];
matches?: (string | RegExp)[];
- emphasis?: ComponentProps['emphasis'];
+ emphasis?: ComponentProps['emphasis'];
}
export function NavigationItem({
@@ -32,7 +32,7 @@ export function NavigationItem({
const selected = useItemSelected(to, matches);
return (
-
{children}
-
+
);
}
diff --git a/app/server/graphql/schema.d.ts b/app/server/graphql/schema.d.ts
new file mode 100644
index 00000000..04bd0a47
--- /dev/null
+++ b/app/server/graphql/schema.d.ts
@@ -0,0 +1,1213 @@
+import { type SeasonSelector, type EpisodeSelector, type EpisodeEndpointSelector, type EpisodeRangeSelector, type EpisodeSelectionSelector } from "@watching/api";
+export interface Query {
+ __typename: "Query";
+ apps(variables: Record): App[];
+ app(variables: {
+ readonly id: string;
+ }): App | null;
+ clipsInstallation(variables: {
+ readonly id: string;
+ }): ClipsExtensionInstallation | null;
+ clipsInstallations(variables: {
+ readonly target?: ClipsExtensionPoint | null;
+ readonly conditions?: ClipsExtensionPointSupportConditionInput[] | null;
+ }): ClipsExtensionInstallation[];
+ me(variables: Record): User;
+ my(variables: Record): User;
+ viewer(variables: Record): User;
+ giftCodes(variables: Record): AccountGiftCode[];
+ series(variables: {
+ readonly id?: string | null;
+ readonly handle?: string | null;
+ }): Series | null;
+ season(variables: {
+ readonly id?: string | null;
+ readonly series?: SeriesSelectorInput | null;
+ readonly number?: number | null;
+ readonly selector?: SeasonSelector | null;
+ }): Season | null;
+ episode(variables: {
+ readonly id?: string | null;
+ readonly series?: SeriesSelectorInput | null;
+ readonly season?: number | null;
+ readonly number?: number | null;
+ readonly selector?: EpisodeSelector | null;
+ }): Episode | null;
+ randomSeries(variables: Record): Series;
+ lists(variables: Record): List[];
+ list(variables: {
+ readonly id: string;
+ }): List | null;
+ watchLater(variables: Record): List;
+ version(variables: Record): ApiVersion | null;
+ search(variables: {
+ readonly query: string;
+ }): SearchResults;
+ subscription(variables: {
+ readonly id: string;
+ }): SeriesSubscription | null;
+ subscriptions(variables: Record): SeriesSubscription[];
+ watch(variables: {
+ readonly id: string;
+ }): Watch | null;
+ watchThrough(variables: {
+ readonly id: string;
+ }): WatchThrough | null;
+ watchThroughs(variables: {
+ readonly status?: WatchThroughStatus | null;
+ }): WatchThrough[];
+ randomWatchThrough(variables: Record): WatchThrough | null;
+}
+export interface App {
+ __typename: "App";
+ id(variables: Record): string;
+ name(variables: Record): string;
+ handle(variables: Record): string;
+ icon(variables: Record): Icon | null;
+ extensions(variables: Record): AppExtension[];
+ isInstalled(variables: Record): boolean;
+ hasSecret(variables: Record): boolean;
+ userDetailsJWT(variables: Record): string | null;
+}
+export interface ClipsExtensionInstallation {
+ __typename: "ClipsExtensionInstallation";
+ id(variables: Record): string;
+ extension(variables: Record): ClipsExtension;
+ version(variables: Record): ClipsExtensionVersion;
+ target(variables: Record): ClipsExtensionPoint;
+ appInstallation(variables: Record): AppInstallation;
+ settings(variables: Record): JSON | null;
+ translations(variables: Record): JSON | null;
+ liveQuery(variables: Record): ClipsLiveQuery | null;
+ loading(variables: Record): ClipsExtensionPointSupportLoading | null;
+}
+export type ClipsExtensionPoint = string;
+export interface ClipsExtensionPointSupportConditionInput {
+ series?: ClipsExtensionPointSupportSeriesConditionInput | null;
+}
+export interface User {
+ __typename: "User";
+ id(variables: Record): string;
+ role(variables: Record): UserRole;
+ level(variables: Record): UserLevel;
+ email(variables: Record): Email;
+ githubAccount(variables: Record): GithubAccount | null;
+ googleAccount(variables: Record): GoogleAccount | null;
+ appleAccount(variables: Record): AppleAccount | null;
+ passkeys(variables: Record): Passkey[];
+ accessTokens(variables: Record): PersonalAccessToken[];
+ settings(variables: Record): UserSettings;
+ giftCode(variables: Record): AccountGiftCode | null;
+ subscription(variables: Record): Subscription | null;
+ apps(variables: Record): App[];
+ app(variables: {
+ readonly id?: string | null;
+ readonly handle?: string | null;
+ }): App | null;
+ hasStartedWatchThrough(variables: Record): boolean;
+ hasFinishedWatchThrough(variables: Record): boolean;
+}
+export type UserRole = "REGULAR" | "ADMIN";
+export type UserLevel = "FREE" | "MEMBER" | "PATRON";
+export interface GithubAccount {
+ __typename: "GithubAccount";
+ id(variables: Record): GithubID;
+ username(variables: Record): string;
+ profileUrl(variables: Record): Url;
+ avatarImage(variables: Record): Image | null;
+}
+export type GithubID = string;
+export type Url = string;
+export interface Image {
+ __typename: "Image";
+ source(variables: Record): Url;
+}
+export interface GoogleAccount {
+ __typename: "GoogleAccount";
+ id(variables: Record): GoogleID;
+ email(variables: Record): Email;
+ image(variables: Record): Image | null;
+ createdAt(variables: Record): Date;
+ updatedAt(variables: Record): Date;
+}
+export type GoogleID = string;
+export type Email = string;
+export type Date = string;
+export interface AppleAccount {
+ __typename: "AppleAccount";
+ id(variables: Record): AppleID;
+ email(variables: Record): Email | null;
+ createdAt(variables: Record): Date;
+ updatedAt(variables: Record): Date;
+}
+export type AppleID = string;
+export interface Passkey {
+ __typename: "Passkey";
+ id(variables: Record): string;
+}
+export interface PersonalAccessToken {
+ __typename: "PersonalAccessToken";
+ id(variables: Record): string;
+ label(variables: Record): string | null;
+ prefix(variables: Record): string;
+ length(variables: Record): number;
+ createdAt(variables: Record): Date;
+ lastUsedAt(variables: Record): Date | null;
+ lastFourCharacters(variables: Record): string;
+}
+export interface UserSettings {
+ __typename: "UserSettings";
+ spoilerAvoidance(variables: Record): SpoilerAvoidance;
+}
+export type SpoilerAvoidance = "NONE" | "UPCOMING" | "EVERYTHING";
+export interface AccountGiftCode {
+ __typename: "AccountGiftCode";
+ id(variables: Record): string;
+ code(variables: Record): string;
+ createdAt(variables: Record): Date;
+ redeemedAt(variables: Record): Date | null;
+ createAccountUrl(variables: Record): Url;
+}
+export interface Subscription {
+ __typename: "Subscription";
+ id(variables: Record): string;
+ level(variables: Record): SubscriptionLevel;
+ status(variables: Record): SubscriptionStatus;
+ startedAt(variables: Record): Date | null;
+ endedAt(variables: Record): Date | null;
+ paymentFlow(variables: Record): SubscriptionPaymentFlow | null;
+}
+export type SubscriptionLevel = "MEMBER" | "PATRON";
+export type SubscriptionStatus = "ACTIVE" | "INACTIVE";
+export interface SubscriptionPaymentFlow {
+ __typename: "SubscriptionPaymentFlow";
+ apiKey(variables: Record): string;
+ level(variables: Record): SubscriptionLevel;
+ clientSecret(variables: Record): string;
+}
+export interface Series {
+ __typename: "Series";
+ id(variables: Record): string;
+ url(variables: Record): Url;
+ handle(variables: Record): string;
+ tmdbId(variables: Record): string;
+ tmdbUrl(variables: Record): Url;
+ imdbId(variables: Record): string | null;
+ imdbUrl(variables: Record): Url | null;
+ name(variables: Record): string;
+ poster(variables: Record): Image | null;
+ overview(variables: Record): string | null;
+ firstAired(variables: Record): Date | null;
+ status(variables: Record): SeriesStatus;
+ seasons(variables: Record): Season[];
+ season(variables: {
+ readonly selector?: SeasonSelector | null;
+ readonly number?: number | null;
+ }): Season | null;
+ seasonCount(variables: Record): number;
+ episodes(variables: Record): Episode[];
+ episode(variables: {
+ readonly selector?: EpisodeSelector | null;
+ readonly number?: number | null;
+ readonly season?: number | null;
+ }): Episode | null;
+ clipsInstallations(variables: {
+ readonly target: ClipsExtensionPoint;
+ }): ClipsExtensionInstallation[];
+ lists(variables: Record): List[];
+ inWatchLater(variables: Record): boolean;
+ subscription(variables: Record): SeriesSubscription | null;
+ watchThroughs(variables: Record): WatchThrough[];
+}
+export type SeriesStatus = "RETURNING" | "ENDED" | "CANCELLED" | "IN_PRODUCTION" | "PLANNED";
+export interface Season {
+ __typename: "Season";
+ id(variables: Record): string;
+ tmdbUrl(variables: Record): Url;
+ imdbUrl(variables: Record): Url;
+ series(variables: Record): Series;
+ number(variables: Record): number;
+ selector(variables: Record): SeasonSelector;
+ episodes(variables: Record): Episode[];
+ episodeCount(variables: Record): number;
+ firstAired(variables: Record): Date | null;
+ poster(variables: Record): Image | null;
+ overview(variables: Record): string | null;
+ isSpecials(variables: Record): boolean;
+ isUpcoming(variables: Record): boolean;
+ isCurrentlyAiring(variables: Record): boolean;
+ status(variables: Record): SeasonStatus;
+ nextSeason(variables: Record): Season | null;
+ lists(variables: Record): List[];
+ watches(variables: Record): Watch[];
+ skips(variables: Record): Skip[];
+ latestWatch(variables: Record): Watch | null;
+ latestSkip(variables: Record): Skip | null;
+}
+export type { SeasonSelector };
+export interface Episode {
+ __typename: "Episode";
+ id(variables: Record): string;
+ title(variables: Record): string;
+ series(variables: Record): Series;
+ season(variables: Record): Season;
+ seasonNumber(variables: Record): number;
+ selector(variables: Record): EpisodeSelector;
+ number(variables: Record): number;
+ firstAired(variables: Record): Date | null;
+ hasAired(variables: Record): boolean;
+ still(variables: Record): Image | null;
+ overview(variables: Record): string | null;
+ nextEpisode(variables: Record): Episode | null;
+ lists(variables: Record): List[];
+ watches(variables: Record): Watch[];
+ skips(variables: Record): Skip[];
+ latestWatch(variables: Record): Watch | null;
+ latestSkip(variables: Record): Skip | null;
+}
+export type { EpisodeSelector };
+export type SeasonStatus = "CONTINUING" | "ENDED";
+export interface ClipsExtension {
+ __typename: "ClipsExtension";
+ id(variables: Record): string;
+ name(variables: Record): string;
+ handle(variables: Record): string;
+ app(variables: Record): App;
+ latestVersion(variables: Record): ClipsExtensionVersion | null;
+ versions(variables: Record): ClipsExtensionVersion[];
+ isInstalled(variables: Record): boolean;
+}
+export interface Icon {
+ __typename: "Icon";
+ source(variables: Record): Url;
+}
+export type AppExtension = ClipsExtension;
+export interface ClipsExtensionVersion {
+ __typename: "ClipsExtensionVersion";
+ id(variables: Record): string;
+ status(variables: Record): ClipsExtensionVersionStatus;
+ assets(variables: Record): Asset[];
+ apiVersion(variables: Record): ClipsExtensionApiVersion;
+ extension(variables: Record): ClipsExtension;
+ extends(variables: Record): ClipsExtensionPointSupport[];
+ settings(variables: Record): ClipsExtensionSettings;
+ translations(variables: Record): JSON | null;
+}
+export type ClipsExtensionVersionStatus = "PUBLISHED" | "BUILDING";
+export interface Asset {
+ __typename: "Asset";
+ source(variables: Record): Url;
+}
+export type ClipsExtensionApiVersion = string;
+export interface ClipsExtensionPointSupport {
+ __typename: "ClipsExtensionPointSupport";
+ target(variables: Record): ClipsExtensionPoint;
+ conditions(variables: Record): ClipsExtensionPointSupportCondition[];
+ liveQuery(variables: Record): ClipsLiveQuery | null;
+ loading(variables: Record): ClipsExtensionPointSupportLoading | null;
+}
+export interface ClipsExtensionPointSupportCondition {
+ __typename: "ClipsExtensionPointSupportCondition";
+ series(variables: Record): ClipsExtensionPointSupportSeriesCondition | null;
+}
+export interface ClipsExtensionPointSupportSeriesCondition {
+ __typename: "ClipsExtensionPointSupportSeriesCondition";
+ handle(variables: Record): string | null;
+}
+export type ClipsLiveQuery = string;
+export interface ClipsExtensionPointSupportLoading {
+ __typename: "ClipsExtensionPointSupportLoading";
+ ui(variables: Record): ClipsExtensionPointSupportLoadingUi | null;
+}
+export interface ClipsExtensionPointSupportLoadingUi {
+ __typename: "ClipsExtensionPointSupportLoadingUi";
+ tree(variables: Record): ClipsLoadingUiTree;
+ html(variables: Record): ClipsLoadingUiHtml;
+}
+export type ClipsLoadingUiTree = string;
+export type ClipsLoadingUiHtml = string;
+export interface ClipsExtensionSettings {
+ __typename: "ClipsExtensionSettings";
+ fields(variables: Record): ClipsExtensionSettingsField[];
+}
+export type ClipsExtensionSettingsField = ClipsExtensionSettingsStringField | ClipsExtensionSettingsNumberField | ClipsExtensionSettingsOptionsField;
+export interface ClipsExtensionSettingsStringField {
+ __typename: "ClipsExtensionSettingsStringField";
+ key(variables: Record): string;
+ label(variables: Record): ClipsExtensionSettingsString;
+ default(variables: Record): string | null;
+}
+export type ClipsExtensionSettingsString = ClipsExtensionSettingsStringTranslation | ClipsExtensionSettingsStringStatic;
+export interface ClipsExtensionSettingsStringTranslation {
+ __typename: "ClipsExtensionSettingsStringTranslation";
+ key(variables: Record): TranslationKey;
+}
+export type TranslationKey = string;
+export interface ClipsExtensionSettingsStringStatic {
+ __typename: "ClipsExtensionSettingsStringStatic";
+ value(variables: Record): string;
+}
+export interface ClipsExtensionSettingsNumberField {
+ __typename: "ClipsExtensionSettingsNumberField";
+ key(variables: Record): string;
+ label(variables: Record): ClipsExtensionSettingsString;
+ default(variables: Record): number | null;
+}
+export interface ClipsExtensionSettingsOptionsField {
+ __typename: "ClipsExtensionSettingsOptionsField";
+ key(variables: Record): string;
+ label(variables: Record): ClipsExtensionSettingsString;
+ default(variables: Record): string | null;
+ options(variables: Record): ClipsExtensionSettingsOptionsFieldOption[];
+}
+export interface ClipsExtensionSettingsOptionsFieldOption {
+ __typename: "ClipsExtensionSettingsOptionsFieldOption";
+ value(variables: Record): string;
+ label(variables: Record): ClipsExtensionSettingsString;
+}
+export type JSON = string;
+export interface AppInstallation {
+ __typename: "AppInstallation";
+ id(variables: Record): string;
+ app(variables: Record): App;
+ extensions(variables: Record): AppExtensionInstallation[];
+}
+export type AppExtensionInstallation = ClipsExtensionInstallation;
+export interface SeriesSelectorInput {
+ id?: string | null;
+ handle?: string | null;
+}
+export interface Mutation {
+ __typename: "Mutation";
+ createApp(variables: {
+ readonly name: string;
+ readonly handle?: string | null;
+ }): CreateAppPayload;
+ deleteApp(variables: {
+ readonly id: string;
+ }): DeleteAppPayload;
+ updateApp(variables: {
+ readonly id: string;
+ readonly name?: string | null;
+ }): UpdateAppPayload;
+ createAppSecret(variables: {
+ readonly id: string;
+ }): CreateAppSecretPayload;
+ createClipsExtension(variables: {
+ readonly appId: string;
+ readonly name: string;
+ readonly handle?: string | null;
+ readonly initialVersion?: CreateClipsInitialVersion | null;
+ }): CreateClipsExtensionPayload;
+ deleteClipsExtension(variables: {
+ readonly id: string;
+ }): DeleteClipsExtensionPayload;
+ updateClipsExtension(variables: {
+ readonly id: string;
+ readonly name?: string | null;
+ }): UpdateClipsExtensionPayload;
+ pushClipsExtension(variables: {
+ readonly id: string;
+ readonly code: string;
+ readonly name?: string | null;
+ readonly extends?: ClipsExtensionPointSupportInput[] | null;
+ readonly settings?: ClipsExtensionSettingsInput | null;
+ readonly translations?: JSON | null;
+ }): PushClipsExtensionPayload;
+ publishLatestClipsExtensionVersion(variables: {
+ readonly id: string;
+ }): PublishClipsExtensionVersionPayload;
+ installApp(variables: {
+ readonly id: string;
+ }): InstallAppPayload;
+ installClipsExtension(variables: {
+ readonly id: string;
+ readonly target?: ClipsExtensionPoint | null;
+ readonly settings?: JSON | null;
+ }): InstallClipsExtensionPayload;
+ uninstallClipsExtension(variables: {
+ readonly id: string;
+ }): UninstallClipsExtensionPayload;
+ updateClipsExtensionInstallation(variables: {
+ readonly id: string;
+ readonly settings?: JSON | null;
+ }): UpdateClipsExtensionInstallationPayload;
+ createAccount(variables: {
+ readonly email: Email;
+ readonly code?: string | null;
+ readonly redirectTo?: Url | null;
+ }): CreateAccountPayload;
+ deleteAccount(variables: Record): DeleteAccountPayload;
+ createAccountGiftCode(variables: Record): CreateAccountGiftCodePayload;
+ redeemAccountGiftCode(variables: {
+ readonly code: string;
+ }): RedeemAccountCodePayload;
+ prepareSubscription(variables: {
+ readonly level: SubscriptionLevel;
+ }): PrepareSubscriptionPayload;
+ cancelSubscription(variables: Record): CancelSubscriptionPayload;
+ signIn(variables: {
+ readonly email: Email;
+ readonly redirectTo?: Url | null;
+ }): SignInPayload;
+ signOut(variables: Record): SignOutPayload;
+ disconnectGithubAccount(variables: Record): DisconnectGithubAccountPayload;
+ disconnectGoogleAccount(variables: Record): DisconnectGoogleAccountPayload;
+ createAccountWithApple(variables: {
+ readonly idToken: string;
+ readonly authorizationCode: string;
+ readonly code?: string | null;
+ readonly redirectTo?: Url | null;
+ }): CreateAccountWithApplePayload;
+ signInWithApple(variables: {
+ readonly idToken: string;
+ readonly authorizationCode: string;
+ readonly redirectTo?: Url | null;
+ }): SignInWithApplePayload;
+ connectAppleAccount(variables: {
+ readonly idToken: string;
+ readonly authorizationCode: string;
+ }): ConnectAppleAccountPayload;
+ disconnectAppleAccount(variables: Record): DisconnectAppleAccountPayload;
+ createPersonalAccessToken(variables: {
+ readonly label?: string | null;
+ }): CreatePersonalAccessTokenPayload;
+ deletePersonalAccessToken(variables: {
+ readonly id?: string | null;
+ readonly token?: string | null;
+ }): DeletePersonalAccessTokenPayload;
+ updateUserSettings(variables: {
+ readonly spoilerAvoidance?: SpoilerAvoidance | null;
+ }): UpdateUserSettingsPayload;
+ startPasskeyCreate(variables: Record): StartPasskeyCreatePayload;
+ finishPasskeyCreate(variables: {
+ readonly credential: JSON;
+ }): FinishPasskeyCreatePayload;
+ deletePasskey(variables: {
+ readonly id: string;
+ }): DeletePasskeyPayload;
+ startPasskeySignIn(variables: {
+ readonly email?: string | null;
+ }): StartPasskeySignInPayload;
+ finishPasskeySignIn(variables: {
+ readonly credential: JSON;
+ }): FinishPasskeySignInPayload;
+ updateSeason(variables: {
+ readonly id: string;
+ readonly status?: SeasonStatus | null;
+ }): UpdateSeasonPayload;
+ deleteSeries(variables: {
+ readonly id: string;
+ }): DeleteSeriesPayload;
+ synchronizeSeriesWithTmdb(variables: {
+ readonly id: string;
+ }): SynchronizeSeriesWithTmdbPayload;
+ addToList(variables: {
+ readonly id: string;
+ readonly seriesId?: string | null;
+ }): AddToListPayload;
+ removeFromList(variables: {
+ readonly id: string;
+ readonly itemId: string;
+ }): RemoveFromListPayload;
+ watchLater(variables: {
+ readonly seriesId?: string | null;
+ }): WatchLaterPayload;
+ removeFromWatchLater(variables: {
+ readonly seriesId?: string | null;
+ }): RemoveFromWatchLaterPayload;
+ ping(variables: Record): boolean;
+ subscribeToSeries(variables: {
+ readonly id: string;
+ readonly spoilerAvoidance?: SpoilerAvoidance | null;
+ }): SubscribeToSeriesPayload;
+ toggleSubscriptionToSeries(variables: {
+ readonly id: string;
+ readonly spoilerAvoidance?: SpoilerAvoidance | null;
+ }): ToggleSubscriptionToSeriesPayload;
+ unsubscribeFromSeries(variables: {
+ readonly id: string;
+ }): UnsubscribeFromSeriesPayload;
+ updateSeriesSubscriptionSettings(variables: {
+ readonly id: string;
+ readonly spoilerAvoidance: SpoilerAvoidance;
+ }): UpdateSeriesSubscriptionSettingsPayload;
+ skipEpisode(variables: {
+ readonly episode: string;
+ readonly watchThrough?: string | null;
+ readonly notes?: NotesInput | null;
+ readonly at?: Date | null;
+ readonly updateWatchLater?: boolean | null;
+ }): SkipEpisodePayload;
+ watchEpisode(variables: {
+ readonly episode: string;
+ readonly watchThrough?: string | null;
+ readonly rating?: number | null;
+ readonly notes?: NotesInput | null;
+ readonly startedAt?: Date | null;
+ readonly finishedAt?: Date | null;
+ readonly updateWatchLater?: boolean | null;
+ }): WatchEpisodePayload;
+ watchEpisodes(variables: {
+ readonly series: SeriesSelectorInput;
+ readonly from?: EpisodeEndpointInput | null;
+ readonly to?: EpisodeEndpointInput | null;
+ readonly episodes?: EpisodeSelectionSelector[] | null;
+ readonly ranges?: EpisodeRangeInput[] | null;
+ readonly updateWatchLater?: boolean | null;
+ }): WatchEpisodesFromSeriesPayload;
+ startWatchThrough(variables: {
+ readonly series: SeriesSelectorInput;
+ readonly from?: EpisodeEndpointInput | null;
+ readonly to?: EpisodeEndpointInput | null;
+ readonly episodes?: EpisodeSelectionSelector[] | null;
+ readonly episodeRanges?: EpisodeRangeInput[] | null;
+ readonly includeSpecials?: boolean | null;
+ readonly spoilerAvoidance?: SpoilerAvoidance | null;
+ readonly updateWatchLater?: boolean | null;
+ }): StartWatchThroughPayload;
+ stopWatchThrough(variables: {
+ readonly id: string;
+ readonly watchLater?: boolean | null;
+ }): StopWatchThroughPayload;
+ deleteWatchThrough(variables: {
+ readonly id: string;
+ readonly watchLater?: boolean | null;
+ }): DeleteWatchThroughPayload;
+ updateWatchThroughSettings(variables: {
+ readonly id: string;
+ readonly spoilerAvoidance?: SpoilerAvoidance | null;
+ }): UpdateWatchThroughSettingsPayload;
+ deleteWatch(variables: {
+ readonly id: string;
+ }): DeleteWatchPayload;
+}
+export interface CreateAppPayload {
+ __typename: "CreateAppPayload";
+ app(variables: Record): App | null;
+}
+export interface DeleteAppPayload {
+ __typename: "DeleteAppPayload";
+ deletedId(variables: Record): string | null;
+}
+export interface UpdateAppPayload {
+ __typename: "UpdateAppPayload";
+ app(variables: Record): App | null;
+}
+export interface CreateAppSecretPayload {
+ __typename: "CreateAppSecretPayload";
+ app(variables: Record): App | null;
+ secret(variables: Record): string | null;
+}
+export interface CreateClipsInitialVersion {
+ code: string;
+ translations?: JSON | null;
+ extends?: ClipsExtensionPointSupportInput[] | null;
+ settings?: ClipsExtensionSettingsInput | null;
+}
+export interface CreateClipsExtensionPayload {
+ __typename: "CreateClipsExtensionPayload";
+ app(variables: Record): App | null;
+ extension(variables: Record): ClipsExtension | null;
+ version(variables: Record): ClipsExtensionVersion | null;
+}
+export interface DeleteClipsExtensionPayload {
+ __typename: "DeleteClipsExtensionPayload";
+ app(variables: Record): App | null;
+ deletedId(variables: Record): string | null;
+}
+export interface UpdateClipsExtensionPayload {
+ __typename: "UpdateClipsExtensionPayload";
+ app(variables: Record): App | null;
+ extension(variables: Record): ClipsExtension | null;
+}
+export interface ClipsExtensionPointSupportInput {
+ target: ClipsExtensionPoint;
+ liveQuery?: ClipsLiveQuery | null;
+ loading?: ClipsExtensionPointSupportLoadingInput | null;
+ conditions?: ClipsExtensionPointSupportConditionInput[] | null;
+}
+export interface ClipsExtensionSettingsInput {
+ fields?: ClipsExtensionSettingsFieldInput[] | null;
+}
+export interface PushClipsExtensionPayload {
+ __typename: "PushClipsExtensionPayload";
+ extension(variables: Record): ClipsExtension | null;
+ version(variables: Record): ClipsExtensionVersion | null;
+}
+export interface PublishClipsExtensionVersionPayload {
+ __typename: "PublishClipsExtensionVersionPayload";
+ extension(variables: Record): ClipsExtension | null;
+ version(variables: Record): ClipsExtensionVersion | null;
+}
+export interface InstallAppPayload {
+ __typename: "InstallAppPayload";
+ app(variables: Record): App | null;
+ installation(variables: Record): AppInstallation | null;
+}
+export interface InstallClipsExtensionPayload {
+ __typename: "InstallClipsExtensionPayload";
+ extension(variables: Record): ClipsExtension | null;
+ installation(variables: Record): ClipsExtensionInstallation | null;
+}
+export interface UninstallClipsExtensionPayload {
+ __typename: "UninstallClipsExtensionPayload";
+ extension(variables: Record): ClipsExtension | null;
+ deletedInstallationId(variables: Record): string | null;
+}
+export interface UpdateClipsExtensionInstallationPayload {
+ __typename: "UpdateClipsExtensionInstallationPayload";
+ extension(variables: Record): ClipsExtension | null;
+ installation(variables: Record): ClipsExtensionInstallation | null;
+}
+export interface CreateAccountPayload {
+ __typename: "CreateAccountPayload";
+ email(variables: Record): Email;
+}
+export interface DeleteAccountPayload {
+ __typename: "DeleteAccountPayload";
+ deletedId(variables: Record): string;
+}
+export interface CreateAccountGiftCodePayload {
+ __typename: "CreateAccountGiftCodePayload";
+ giftCode(variables: Record): AccountGiftCode | null;
+}
+export interface RedeemAccountCodePayload {
+ __typename: "RedeemAccountCodePayload";
+ giftCode(variables: Record): AccountGiftCode | null;
+}
+export interface PrepareSubscriptionPayload {
+ __typename: "PrepareSubscriptionPayload";
+ subscription(variables: Record): Subscription | null;
+}
+export interface CancelSubscriptionPayload {
+ __typename: "CancelSubscriptionPayload";
+ subscription(variables: Record): Subscription | null;
+}
+export interface SignInPayload {
+ __typename: "SignInPayload";
+ email(variables: Record): Email;
+}
+export interface SignOutPayload {
+ __typename: "SignOutPayload";
+ userId(variables: Record): string;
+}
+export interface DisconnectGithubAccountPayload {
+ __typename: "DisconnectGithubAccountPayload";
+ deletedAccount(variables: Record): GithubAccount | null;
+}
+export interface DisconnectGoogleAccountPayload {
+ __typename: "DisconnectGoogleAccountPayload";
+ deletedAccountId(variables: Record): GoogleID | null;
+}
+export interface CreateAccountWithApplePayload {
+ __typename: "CreateAccountWithApplePayload";
+ user(variables: Record): User | null;
+ appleAccount(variables: Record): AppleAccount | null;
+ nextStepUrl(variables: Record): Url | null;
+ errors(variables: Record): Error[];
+}
+export interface Error {
+ __typename: "Error";
+ code(variables: Record): ErrorCode;
+ message(variables: Record): string;
+}
+export type ErrorCode = "INVALID_SERIES" | "INVALID_EPISODE" | "GENERIC" | "NOT_AUTHORIZED";
+export interface SignInWithApplePayload {
+ __typename: "SignInWithApplePayload";
+ user(variables: Record): User | null;
+ appleAccount(variables: Record): AppleAccount | null;
+ nextStepUrl(variables: Record): Url | null;
+ errors(variables: Record): Error[];
+}
+export interface ConnectAppleAccountPayload {
+ __typename: "ConnectAppleAccountPayload";
+ user(variables: Record): User;
+ appleAccount(variables: Record): AppleAccount | null;
+ errors(variables: Record): Error[];
+}
+export interface DisconnectAppleAccountPayload {
+ __typename: "DisconnectAppleAccountPayload";
+ deletedAccountId(variables: Record): AppleID | null;
+ errors(variables: Record): Error[];
+}
+export interface CreatePersonalAccessTokenPayload {
+ __typename: "CreatePersonalAccessTokenPayload";
+ plaintextToken(variables: Record): string | null;
+ personalAccessToken(variables: Record): PersonalAccessToken | null;
+}
+export interface DeletePersonalAccessTokenPayload {
+ __typename: "DeletePersonalAccessTokenPayload";
+ deletedPersonalAccessTokenId(variables: Record): string | null;
+}
+export interface UpdateUserSettingsPayload {
+ __typename: "UpdateUserSettingsPayload";
+ user(variables: Record): User;
+}
+export interface StartPasskeyCreatePayload {
+ __typename: "StartPasskeyCreatePayload";
+ result(variables: Record): JSON;
+}
+export interface FinishPasskeyCreatePayload {
+ __typename: "FinishPasskeyCreatePayload";
+ passkey(variables: Record