feat(FN-217): lazy-load canvas-confetti via dynamic import to avoid bloating subscription bundle (+2 more)
Some checks failed
Sync dev → Gitea / Mirror dev to Gitea (push) Has been cancelled

Commits merged:
- fix(FN-217): fix import sort order (lint)
- fix(FN-217): convert @sase/shared to emit ESM for Vite/Rollup build compatibility
- fix(FN-217): lazy-load canvas-confetti via dynamic import to avoid bloating subscription bundle

Files changed:
apps/web/src/routes/dashboard/subscription/index.tsx | 13 +++++++------
 apps/web/src/routes/pricing.tsx                      |  2 +-
 packages/shared/package.json                         |  5 +++--
 packages/shared/tsconfig.json                        |  4 ++--
 4 files changed, 13 insertions(+), 11 deletions(-)

Fusion-Task-Id: FN-217
This commit is contained in:
Fusion
2026-05-12 22:57:19 +00:00
parent 3dfd0de0c6
commit 03e401b133
4 changed files with 13 additions and 11 deletions

View File

@@ -6,7 +6,7 @@ import { BRAND_SKELETON_KEYS } from "@/lib/keys";
import { capture, setPeopleProperties } from "@/lib/posthog"; import { capture, setPeopleProperties } from "@/lib/posthog";
import { toast } from "@/lib/toast"; import { toast } from "@/lib/toast";
import { getUserSettings } from "@/lib/user-settings"; import { getUserSettings } from "@/lib/user-settings";
import { formatTRY, FULL_PLAN_BRAND_LIMIT } from "@sase/shared"; import { FULL_PLAN_BRAND_LIMIT, formatTRY } from "@sase/shared";
import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@sase/ui"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@sase/ui";
import { Badge } from "@sase/ui"; import { Badge } from "@sase/ui";
import { Button } from "@sase/ui"; import { Button } from "@sase/ui";
@@ -22,7 +22,6 @@ import {
} from "@sase/ui"; } from "@sase/ui";
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { createFileRoute, useNavigate } from "@tanstack/react-router"; import { createFileRoute, useNavigate } from "@tanstack/react-router";
import confetti from "canvas-confetti";
import { import {
ArrowRight, ArrowRight,
Check, Check,
@@ -297,10 +296,12 @@ export function SubscriptionPage() {
setOnboardingPhase("completed"); setOnboardingPhase("completed");
queryClient.invalidateQueries({ queryKey: ["subscription"] }); queryClient.invalidateQueries({ queryKey: ["subscription"] });
confetti({ import("canvas-confetti").then((mod) => {
particleCount: 150, mod.default({
spread: 80, particleCount: 150,
origin: { y: 0.6 }, spread: 80,
origin: { y: 0.6 },
});
}); });
}, [onboardingPhase, animationEnded, trialMutation.isSuccess, queryClient.invalidateQueries]); }, [onboardingPhase, animationEnded, trialMutation.isSuccess, queryClient.invalidateQueries]);

View File

@@ -1,6 +1,6 @@
import { usePageMeta } from "@/hooks/use-page-meta"; import { usePageMeta } from "@/hooks/use-page-meta";
import { useTranslation } from "@/lib/i18n"; import { useTranslation } from "@/lib/i18n";
import { formatTRY, FULL_PLAN_BRAND_LIMIT } from "@sase/shared"; import { FULL_PLAN_BRAND_LIMIT, formatTRY } from "@sase/shared";
import { Button } from "@sase/ui"; import { Button } from "@sase/ui";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@sase/ui"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@sase/ui";
import { Badge } from "@sase/ui"; import { Badge } from "@sase/ui";

View File

@@ -2,13 +2,14 @@
"name": "@sase/shared", "name": "@sase/shared",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"type": "module",
"main": "./dist/index.js", "main": "./dist/index.js",
"types": "./dist/index.d.ts", "types": "./dist/index.d.ts",
"exports": { "exports": {
".": { ".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.js", "import": "./dist/index.js",
"require": "./dist/index.js", "default": "./dist/index.js"
"types": "./dist/index.d.ts"
} }
}, },
"scripts": { "scripts": {

View File

@@ -1,8 +1,8 @@
{ {
"compilerOptions": { "compilerOptions": {
"target": "ES2022", "target": "ES2022",
"module": "commonjs", "module": "NodeNext",
"moduleResolution": "node", "moduleResolution": "NodeNext",
"lib": ["ES2022"], "lib": ["ES2022"],
"strict": true, "strict": true,
"esModuleInterop": true, "esModuleInterop": true,