Skip to content

Commit 7e4e4c0

Browse files
committed
Merge branch 'main' into fix-usage-layout-shifts
2 parents cc02dab + bb46369 commit 7e4e4c0

106 files changed

Lines changed: 3434 additions & 463 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.env.example

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ PUBLIC_CONSOLE_FEATURE_FLAGS=
33
PUBLIC_APPWRITE_MULTI_REGION=false
44
PUBLIC_APPWRITE_ENDPOINT=http://localhost/v1
55
PUBLIC_STRIPE_KEY=
6-
PUBLIC_GROWTH_ENDPOINT=
6+
PUBLIC_GROWTH_ENDPOINT=
7+
PUBLIC_CONSOLE_EMAIL_VERIFICATION=false
8+
PUBLIC_CONSOLE_MOCK_AI_SUGGESTIONS=true

.github/workflows/publish.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ jobs:
4141
"PUBLIC_CONSOLE_MODE=cloud"
4242
"PUBLIC_CONSOLE_FEATURE_FLAGS="
4343
"PUBLIC_APPWRITE_MULTI_REGION=true"
44+
"PUBLIC_CONSOLE_EMAIL_VERIFICATION=true"
45+
"PUBLIC_CONSOLE_MOCK_AI_SUGGESTIONS=false"
4446
"PUBLIC_GROWTH_ENDPOINT=${{ secrets.PUBLIC_GROWTH_ENDPOINT }}"
4547
"PUBLIC_STRIPE_KEY=${{ secrets.PUBLIC_STRIPE_KEY }}"
4648
"SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }}"
@@ -81,6 +83,8 @@ jobs:
8183
"PUBLIC_CONSOLE_MODE=cloud"
8284
"PUBLIC_CONSOLE_FEATURE_FLAGS="
8385
"PUBLIC_APPWRITE_MULTI_REGION=true"
86+
"PUBLIC_CONSOLE_EMAIL_VERIFICATION=false"
87+
"PUBLIC_CONSOLE_MOCK_AI_SUGGESTIONS=false"
8488
"PUBLIC_GROWTH_ENDPOINT=${{ secrets.PUBLIC_GROWTH_ENDPOINT }}"
8589
"PUBLIC_STRIPE_KEY=${{ secrets.PUBLIC_STRIPE_KEY_STAGE }}"
8690
publish-self-hosted:
@@ -118,6 +122,8 @@ jobs:
118122
build-args: |
119123
"PUBLIC_CONSOLE_MODE=self-hosted"
120124
"PUBLIC_APPWRITE_MULTI_REGION=false"
125+
"PUBLIC_CONSOLE_EMAIL_VERIFICATION=false"
126+
"PUBLIC_CONSOLE_MOCK_AI_SUGGESTIONS=true"
121127
"PUBLIC_CONSOLE_FEATURE_FLAGS="
122128
"PUBLIC_GROWTH_ENDPOINT=${{ secrets.PUBLIC_GROWTH_ENDPOINT }}"
123129
@@ -156,6 +162,8 @@ jobs:
156162
build-args: |
157163
"PUBLIC_CONSOLE_MODE=cloud"
158164
"PUBLIC_APPWRITE_MULTI_REGION=false"
165+
"PUBLIC_CONSOLE_EMAIL_VERIFICATION=true"
166+
"PUBLIC_CONSOLE_MOCK_AI_SUGGESTIONS=false"
159167
"PUBLIC_CONSOLE_FEATURE_FLAGS="
160168
"PUBLIC_STRIPE_KEY=${{ secrets.PUBLIC_STRIPE_KEY_STAGE }}"
161169
"PUBLIC_GROWTH_ENDPOINT=${{ secrets.PUBLIC_GROWTH_ENDPOINT }}"

Dockerfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ ADD ./static /app/static
2323
ARG PUBLIC_CONSOLE_MODE
2424
ARG PUBLIC_CONSOLE_FEATURE_FLAGS
2525
ARG PUBLIC_APPWRITE_MULTI_REGION
26+
ARG PUBLIC_CONSOLE_EMAIL_VERIFICATION
27+
ARG PUBLIC_CONSOLE_MOCK_AI_SUGGESTIONS
2628
ARG PUBLIC_APPWRITE_ENDPOINT
2729
ARG PUBLIC_GROWTH_ENDPOINT
2830
ARG PUBLIC_STRIPE_KEY
@@ -34,6 +36,8 @@ ENV PUBLIC_GROWTH_ENDPOINT=$PUBLIC_GROWTH_ENDPOINT
3436
ENV PUBLIC_CONSOLE_MODE=$PUBLIC_CONSOLE_MODE
3537
ENV PUBLIC_CONSOLE_FEATURE_FLAGS=$PUBLIC_CONSOLE_FEATURE_FLAGS
3638
ENV PUBLIC_APPWRITE_MULTI_REGION=$PUBLIC_APPWRITE_MULTI_REGION
39+
ENV PUBLIC_CONSOLE_EMAIL_VERIFICATION=$PUBLIC_CONSOLE_EMAIL_VERIFICATION
40+
ENV PUBLIC_CONSOLE_MOCK_AI_SUGGESTIONS=$PUBLIC_CONSOLE_MOCK_AI_SUGGESTIONS
3741
ENV PUBLIC_STRIPE_KEY=$PUBLIC_STRIPE_KEY
3842
ENV SENTRY_AUTH_TOKEN=$SENTRY_AUTH_TOKEN
3943
ENV SENTRY_RELEASE=$SENTRY_RELEASE

build.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ async function main() {
2828
logEnv('MULTI REGION', env?.PUBLIC_APPWRITE_MULTI_REGION);
2929
logEnv('APPWRITE ENDPOINT', env?.PUBLIC_APPWRITE_ENDPOINT, 'relative');
3030
logEnv('GROWTH ENDPOINT', env?.PUBLIC_GROWTH_ENDPOINT);
31+
logEnv('CONSOLE EMAIL VERIFICATION', env?.PUBLIC_CONSOLE_EMAIL_VERIFICATION);
32+
logEnv('CONSOLE MOCK AI SUGGESTIONS', env?.PUBLIC_CONSOLE_MOCK_AI_SUGGESTIONS);
3133
log();
3234
logDelimiter();
3335
await build();

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@
2222
},
2323
"dependencies": {
2424
"@ai-sdk/svelte": "^1.1.24",
25-
"@appwrite.io/console": "https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@7747562",
25+
"@appwrite.io/console": "https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@636ed39",
2626
"@appwrite.io/pink-icons": "0.25.0",
27-
"@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@f2198f1",
27+
"@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@8f82877",
2828
"@appwrite.io/pink-legacy": "^1.0.3",
29-
"@appwrite.io/pink-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@f2198f1",
29+
"@appwrite.io/pink-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@8f82877",
3030
"@faker-js/faker": "^9.9.0",
3131
"@popperjs/core": "^2.11.8",
3232
"@sentry/sveltekit": "^8.38.0",

pnpm-lock.yaml

Lines changed: 15 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/lib/actions/analytics.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,9 +274,12 @@ export enum Submit {
274274
DatabaseDelete = 'submit_database_delete',
275275
DatabaseUpdateName = 'submit_database_update_name',
276276
DatabaseImportCsv = 'submit_database_import_csv',
277+
277278
ColumnCreate = 'submit_column_create',
278279
ColumnUpdate = 'submit_column_update',
279280
ColumnDelete = 'submit_column_delete',
281+
ColumnSuggestions = 'submit_column_suggestions',
282+
280283
RowCreate = 'submit_row_create',
281284
RowDelete = 'submit_row_delete',
282285
RowUpdate = 'submit_row_update',

src/lib/actions/timer.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,16 @@ export const timer: Action<HTMLElement, Props> = (node, props) => {
2121
}
2222

2323
function step() {
24-
const diffInSeconds = Math.floor((new Date().getTime() - startDate.getTime()) / 1000);
25-
const minutes = Math.floor(diffInSeconds / 60);
24+
const elapsedSeconds = Math.max(
25+
0,
26+
Math.floor((new Date().getTime() - startDate.getTime()) / 1000)
27+
);
28+
const minutes = Math.floor(elapsedSeconds / 60);
2629
if (minutes > 0) {
27-
const seconds = diffInSeconds % 60;
30+
const seconds = elapsedSeconds % 60;
2831
node.textContent = `${minutes}m ${seconds}s`;
2932
} else {
30-
node.textContent = calculateTime(diffInSeconds);
33+
node.textContent = calculateTime(elapsedSeconds);
3134
}
3235
frame = window.requestAnimationFrame(step);
3336
}

src/lib/components/alerts/emailVerificationBanner.svelte

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,21 @@
44
import { Typography } from '@appwrite.io/pink-svelte';
55
import { user } from '$lib/stores/user';
66
import SendVerificationEmailModal from '../account/sendVerificationEmailModal.svelte';
7-
import { page } from '$app/stores';
7+
import { page } from '$app/state';
88
import { wizard, isNewWizardStatusOpen } from '$lib/stores/wizard';
9-
import { isCloud } from '$lib/system';
9+
import { isCloud, VARS } from '$lib/system';
1010
1111
const hasUser = $derived(!!$user);
1212
const needsEmailVerification = $derived(hasUser && !$user.emailVerification);
13-
const notOnOnboarding = $derived(!$page.route.id.includes('/onboarding'));
13+
const notOnOnboarding = $derived(!page.route.id.includes('/onboarding'));
1414
const notOnWizard = $derived(!$wizard.show && !$isNewWizardStatusOpen);
1515
const shouldShowEmailBanner = $derived(
16-
isCloud && hasUser && needsEmailVerification && notOnOnboarding && notOnWizard
16+
VARS.EMAIL_VERIFICATION &&
17+
isCloud &&
18+
hasUser &&
19+
needsEmailVerification &&
20+
notOnOnboarding &&
21+
notOnWizard
1722
);
1823
1924
let showSendVerification = $state(false);

src/lib/components/billing/planComparisonBox.svelte

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,30 @@
11
<script lang="ts">
22
import { BillingPlan } from '$lib/constants';
33
import { formatNum } from '$lib/helpers/string';
4-
import { plansInfo, tierFree, tierPro, tierScale, type Tier } from '$lib/stores/billing';
4+
import { plansInfo, tierToPlan, type Tier } from '$lib/stores/billing';
55
import { Card, Layout, Tabs, Typography } from '@appwrite.io/pink-svelte';
66
77
export let downgrade = false;
88
99
let selectedTab: Tier = BillingPlan.FREE;
1010
1111
$: plan = $plansInfo.get(selectedTab);
12+
13+
const allTiers: Tier[] = [BillingPlan.FREE, BillingPlan.PRO, BillingPlan.SCALE];
14+
$: visibleTiers = allTiers.filter((tier) => tier !== BillingPlan.SCALE);
1215
</script>
1316

1417
<Card.Base>
1518
<Layout.Stack>
1619
<Tabs.Root stretch let:root>
17-
<Tabs.Item.Button
18-
{root}
19-
active={selectedTab === BillingPlan.FREE}
20-
on:click={() => (selectedTab = BillingPlan.FREE)}>
21-
{tierFree.name}
22-
</Tabs.Item.Button>
23-
<Tabs.Item.Button
24-
{root}
25-
active={selectedTab === BillingPlan.PRO}
26-
on:click={() => (selectedTab = BillingPlan.PRO)}>
27-
{tierPro.name}
28-
</Tabs.Item.Button>
29-
<Tabs.Item.Button
30-
{root}
31-
active={selectedTab === BillingPlan.SCALE}
32-
on:click={() => (selectedTab = BillingPlan.SCALE)}>
33-
{tierScale.name}
34-
</Tabs.Item.Button>
20+
{#each visibleTiers as tier}
21+
<Tabs.Item.Button
22+
{root}
23+
active={selectedTab === tier}
24+
on:click={() => (selectedTab = tier)}>
25+
{tierToPlan(tier).name}
26+
</Tabs.Item.Button>
27+
{/each}
3528
</Tabs.Root>
3629

3730
<Typography.Text variant="m-600">{plan.name} plan</Typography.Text>

0 commit comments

Comments
 (0)