@flowselections/offertes-installatie-techniek 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/dist-lib/_core-safelist.d.ts +2 -0
- package/dist-lib/_core-safelist.d.ts.map +1 -0
- package/dist-lib/_core-safelist.js +15 -0
- package/dist-lib/components/OfferteDetailPage.d.ts +6 -0
- package/dist-lib/components/OfferteDetailPage.d.ts.map +1 -0
- package/dist-lib/components/OfferteDetailPage.js +48 -0
- package/dist-lib/components/OffertesOverzichtPage.d.ts +2 -0
- package/dist-lib/components/OffertesOverzichtPage.d.ts.map +1 -0
- package/dist-lib/components/OffertesOverzichtPage.js +40 -0
- package/dist-lib/components/offertes/NieuweOfferteDialog.d.ts +8 -0
- package/dist-lib/components/offertes/NieuweOfferteDialog.d.ts.map +1 -0
- package/dist-lib/components/offertes/NieuweOfferteDialog.js +81 -0
- package/dist-lib/components/offertes/OfferteDetailPage.d.ts +6 -0
- package/dist-lib/components/offertes/OfferteDetailPage.d.ts.map +1 -0
- package/dist-lib/components/offertes/OfferteDetailPage.js +48 -0
- package/dist-lib/components/offertes/OfferteDetailRoute.d.ts +2 -0
- package/dist-lib/components/offertes/OfferteDetailRoute.d.ts.map +1 -0
- package/dist-lib/components/offertes/OfferteDetailRoute.js +13 -0
- package/dist-lib/components/offertes/OfferteKpiCards.d.ts +7 -0
- package/dist-lib/components/offertes/OfferteKpiCards.d.ts.map +1 -0
- package/dist-lib/components/offertes/OfferteKpiCards.js +33 -0
- package/dist-lib/components/offertes/OfferteRegelsEditor.d.ts +12 -0
- package/dist-lib/components/offertes/OfferteRegelsEditor.d.ts.map +1 -0
- package/dist-lib/components/offertes/OfferteRegelsEditor.js +27 -0
- package/dist-lib/components/offertes/OfferteStatusBadge.d.ts +4 -0
- package/dist-lib/components/offertes/OfferteStatusBadge.d.ts.map +1 -0
- package/dist-lib/components/offertes/OfferteStatusBadge.js +16 -0
- package/dist-lib/components/offertes/OffertesOverzichtPage.d.ts +2 -0
- package/dist-lib/components/offertes/OffertesOverzichtPage.d.ts.map +1 -0
- package/dist-lib/components/offertes/OffertesOverzichtPage.js +40 -0
- package/dist-lib/hooks/useOfferte.d.ts +17 -0
- package/dist-lib/hooks/useOfferte.d.ts.map +1 -0
- package/dist-lib/hooks/useOfferte.js +135 -0
- package/dist-lib/hooks/useOffertes.d.ts +7 -0
- package/dist-lib/hooks/useOffertes.d.ts.map +1 -0
- package/dist-lib/hooks/useOffertes.js +38 -0
- package/dist-lib/hooks/useWerkbonPakketten.d.ts +7 -0
- package/dist-lib/hooks/useWerkbonPakketten.d.ts.map +1 -0
- package/dist-lib/hooks/useWerkbonPakketten.js +20 -0
- package/dist-lib/index.d.ts +15 -0
- package/dist-lib/index.d.ts.map +1 -0
- package/dist-lib/index.js +32 -0
- package/dist-lib/integrations/supabase/auth-attacher.d.ts +2 -0
- package/dist-lib/integrations/supabase/auth-attacher.d.ts.map +1 -0
- package/dist-lib/integrations/supabase/auth-attacher.js +12 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +23409 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -0
- package/dist-lib/integrations/supabase/auth-middleware.js +52 -0
- package/dist-lib/integrations/supabase/client.d.ts +23405 -0
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -0
- package/dist-lib/integrations/supabase/client.js +14 -0
- package/dist-lib/integrations/supabase/client.server.d.ts +23405 -0
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -0
- package/dist-lib/integrations/supabase/client.server.js +30 -0
- package/dist-lib/integrations/supabase/previewAuthStorage.d.ts +6 -0
- package/dist-lib/integrations/supabase/previewAuthStorage.d.ts.map +1 -0
- package/dist-lib/integrations/supabase/previewAuthStorage.js +92 -0
- package/dist-lib/integrations/supabase/types.d.ts +24034 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -0
- package/dist-lib/integrations/supabase/types.js +92 -0
- package/dist-lib/lib/offertes.d.ts +86 -0
- package/dist-lib/lib/offertes.d.ts.map +1 -0
- package/dist-lib/lib/offertes.js +51 -0
- package/dist-lib/lib/utils.d.ts +3 -0
- package/dist-lib/lib/utils.d.ts.map +1 -0
- package/dist-lib/lib/utils.js +5 -0
- package/dist-lib/lib/validationSchemas.d.ts +15 -0
- package/dist-lib/lib/validationSchemas.d.ts.map +1 -0
- package/dist-lib/lib/validationSchemas.js +25 -0
- package/dist-lib/styles.css +1 -0
- package/package.json +92 -0
- package/public/logo.png +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
export const Constants = {
|
|
2
|
+
public: {
|
|
3
|
+
Enums: {
|
|
4
|
+
ai_import_status: [
|
|
5
|
+
"nieuw",
|
|
6
|
+
"verwerken",
|
|
7
|
+
"bevestigen",
|
|
8
|
+
"klaar",
|
|
9
|
+
"mislukt",
|
|
10
|
+
],
|
|
11
|
+
app_role: [
|
|
12
|
+
"admin",
|
|
13
|
+
"planner",
|
|
14
|
+
"monteur",
|
|
15
|
+
"administratie",
|
|
16
|
+
"ai_admin",
|
|
17
|
+
"manager",
|
|
18
|
+
"warehouse",
|
|
19
|
+
"sales",
|
|
20
|
+
"developer",
|
|
21
|
+
"receptie",
|
|
22
|
+
],
|
|
23
|
+
doc_layout_type: [
|
|
24
|
+
"pakbon",
|
|
25
|
+
"factuur",
|
|
26
|
+
"offerte",
|
|
27
|
+
"orderbevestiging",
|
|
28
|
+
"etiket",
|
|
29
|
+
"verzendlabel",
|
|
30
|
+
"productlabel",
|
|
31
|
+
"barcode_label",
|
|
32
|
+
"magazijnlijst",
|
|
33
|
+
"controlelijst",
|
|
34
|
+
"transportdocument",
|
|
35
|
+
"vrij",
|
|
36
|
+
"sticker",
|
|
37
|
+
"productiebon",
|
|
38
|
+
"veilingbon",
|
|
39
|
+
"afleverbrief",
|
|
40
|
+
"veilingbrief",
|
|
41
|
+
],
|
|
42
|
+
doc_orientation: ["portrait", "landscape"],
|
|
43
|
+
exact_env: ["staging", "live"],
|
|
44
|
+
exact_push_status: ["pending", "sent", "error"],
|
|
45
|
+
itk_customer_segment: ["Business", "Private"],
|
|
46
|
+
itk_dynamic_field_type: ["text", "select", "date", "checkbox"],
|
|
47
|
+
planning_item_status: [
|
|
48
|
+
"gepland",
|
|
49
|
+
"bezig",
|
|
50
|
+
"afgerond",
|
|
51
|
+
"geannuleerd",
|
|
52
|
+
"concept",
|
|
53
|
+
"vrijgegeven",
|
|
54
|
+
],
|
|
55
|
+
print_job_status: [
|
|
56
|
+
"wachtend",
|
|
57
|
+
"bezig",
|
|
58
|
+
"voltooid",
|
|
59
|
+
"mislukt",
|
|
60
|
+
"geannuleerd",
|
|
61
|
+
],
|
|
62
|
+
printer_connection: [
|
|
63
|
+
"ipp",
|
|
64
|
+
"raw9100",
|
|
65
|
+
"printnode",
|
|
66
|
+
"cups",
|
|
67
|
+
"usb",
|
|
68
|
+
"windows",
|
|
69
|
+
"airprint",
|
|
70
|
+
"cloud",
|
|
71
|
+
],
|
|
72
|
+
printer_kind: [
|
|
73
|
+
"labelprinter",
|
|
74
|
+
"laserprinter",
|
|
75
|
+
"inkjet",
|
|
76
|
+
"thermal",
|
|
77
|
+
"kantoorprinter",
|
|
78
|
+
"overig",
|
|
79
|
+
],
|
|
80
|
+
quote_status: [
|
|
81
|
+
"concept",
|
|
82
|
+
"verzonden",
|
|
83
|
+
"bekeken",
|
|
84
|
+
"in_behandeling",
|
|
85
|
+
"geaccepteerd",
|
|
86
|
+
"afgewezen",
|
|
87
|
+
"verlopen",
|
|
88
|
+
"gearchiveerd",
|
|
89
|
+
],
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
export type OfferteStatus = "concept" | "mandaat" | "verzonden" | "bekeken" | "goedgekeurd" | "omgezet" | "afgewezen" | "verlopen";
|
|
2
|
+
export interface OfferteRegel {
|
|
3
|
+
id: string;
|
|
4
|
+
offerte_id: string;
|
|
5
|
+
package_id: string | null;
|
|
6
|
+
source: string;
|
|
7
|
+
omschrijving: string;
|
|
8
|
+
quantity: number;
|
|
9
|
+
unit_price_cents: number;
|
|
10
|
+
line_total_cents: number;
|
|
11
|
+
sort_order: number;
|
|
12
|
+
}
|
|
13
|
+
export interface Offerte {
|
|
14
|
+
id: string;
|
|
15
|
+
offerte_number: string | null;
|
|
16
|
+
jaar: number;
|
|
17
|
+
volgnummer: number | null;
|
|
18
|
+
werkbon_id: string | null;
|
|
19
|
+
source_type: string;
|
|
20
|
+
source_ref: string | null;
|
|
21
|
+
source_number: string | null;
|
|
22
|
+
customer_id: string | null;
|
|
23
|
+
contact_id: string | null;
|
|
24
|
+
work_location_id: string | null;
|
|
25
|
+
status: string;
|
|
26
|
+
omschrijving: string;
|
|
27
|
+
notities: string | null;
|
|
28
|
+
subtotal_cents: number;
|
|
29
|
+
vat_rate: number;
|
|
30
|
+
vat_cents: number;
|
|
31
|
+
total_cents: number;
|
|
32
|
+
valid_until: string | null;
|
|
33
|
+
mandaat_restant_cents: number;
|
|
34
|
+
binnen_mandaat: boolean;
|
|
35
|
+
follow_up_werkbon_id: string | null;
|
|
36
|
+
ai_generated: boolean;
|
|
37
|
+
sent_at: string | null;
|
|
38
|
+
viewed_at: string | null;
|
|
39
|
+
approved_at: string | null;
|
|
40
|
+
rejected_at: string | null;
|
|
41
|
+
converted_at: string | null;
|
|
42
|
+
created_at: string;
|
|
43
|
+
updated_at: string;
|
|
44
|
+
}
|
|
45
|
+
export interface OfferteMetKlant extends Offerte {
|
|
46
|
+
klant_naam: string | null;
|
|
47
|
+
werkbon_nummer: string | null;
|
|
48
|
+
}
|
|
49
|
+
export interface OfferteEvent {
|
|
50
|
+
id: string;
|
|
51
|
+
offerte_id: string;
|
|
52
|
+
event_type: string;
|
|
53
|
+
omschrijving: string | null;
|
|
54
|
+
created_at: string;
|
|
55
|
+
}
|
|
56
|
+
/** Bronoptie zoals het broncontract (quote_list_sources) die levert. */
|
|
57
|
+
export interface BronOptie {
|
|
58
|
+
id: string;
|
|
59
|
+
number: string | null;
|
|
60
|
+
customer_id: string | null;
|
|
61
|
+
description: string | null;
|
|
62
|
+
budget_mandate_cents: number | null;
|
|
63
|
+
status: string | null;
|
|
64
|
+
}
|
|
65
|
+
export interface Pakket {
|
|
66
|
+
id: string;
|
|
67
|
+
code: string | null;
|
|
68
|
+
name: string;
|
|
69
|
+
unit_price_cents: number | null;
|
|
70
|
+
default_quantity: number | null;
|
|
71
|
+
active: boolean;
|
|
72
|
+
}
|
|
73
|
+
export declare const OFFERTE_STATUS_LABELS: Record<string, string>;
|
|
74
|
+
/** Tabbladen in het overzicht — key `alle` toont alles. */
|
|
75
|
+
export declare const OFFERTE_TABS: {
|
|
76
|
+
key: string;
|
|
77
|
+
label: string;
|
|
78
|
+
statuses?: string[];
|
|
79
|
+
}[];
|
|
80
|
+
export declare const OPEN_STATUSES: string[];
|
|
81
|
+
export declare function formatEuro(cents: number | null | undefined): string;
|
|
82
|
+
export declare function formatDatum(value: string | null | undefined): string;
|
|
83
|
+
export declare function isVerlopen(offerte: Offerte): boolean;
|
|
84
|
+
/** Effectieve status: rekent verlopen offertes automatisch mee. */
|
|
85
|
+
export declare function effectieveStatus(offerte: Offerte): string;
|
|
86
|
+
//# sourceMappingURL=offertes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offertes.d.ts","sourceRoot":"","sources":["../../src/lib/offertes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/offertes.ts — types, statussen en formatters voor de offertemodule
|
|
3
|
+
// ============================================================================
|
|
4
|
+
export const OFFERTE_STATUS_LABELS = {
|
|
5
|
+
concept: "Concept",
|
|
6
|
+
mandaat: "Mandaat",
|
|
7
|
+
verzonden: "Verzonden",
|
|
8
|
+
bekeken: "Bekeken",
|
|
9
|
+
goedgekeurd: "Goedgekeurd",
|
|
10
|
+
omgezet: "Omgezet",
|
|
11
|
+
afgewezen: "Afgewezen",
|
|
12
|
+
verlopen: "Verlopen",
|
|
13
|
+
};
|
|
14
|
+
/** Tabbladen in het overzicht — key `alle` toont alles. */
|
|
15
|
+
export const OFFERTE_TABS = [
|
|
16
|
+
{ key: "alle", label: "Alle" },
|
|
17
|
+
{ key: "concept", label: "Concept", statuses: ["concept"] },
|
|
18
|
+
{ key: "verzonden", label: "Verzonden", statuses: ["verzonden", "bekeken"] },
|
|
19
|
+
{ key: "goedgekeurd", label: "Goedgekeurd", statuses: ["goedgekeurd", "omgezet"] },
|
|
20
|
+
{ key: "mandaat", label: "Mandaat", statuses: ["mandaat"] },
|
|
21
|
+
{ key: "afgewezen", label: "Afgewezen", statuses: ["afgewezen"] },
|
|
22
|
+
{ key: "verlopen", label: "Verlopen", statuses: ["verlopen"] },
|
|
23
|
+
];
|
|
24
|
+
export const OPEN_STATUSES = ["concept", "mandaat", "verzonden", "bekeken"];
|
|
25
|
+
export function formatEuro(cents) {
|
|
26
|
+
const value = (cents ?? 0) / 100;
|
|
27
|
+
return new Intl.NumberFormat("nl-NL", {
|
|
28
|
+
style: "currency",
|
|
29
|
+
currency: "EUR",
|
|
30
|
+
}).format(value);
|
|
31
|
+
}
|
|
32
|
+
export function formatDatum(value) {
|
|
33
|
+
if (!value)
|
|
34
|
+
return "—";
|
|
35
|
+
return new Intl.DateTimeFormat("nl-NL", {
|
|
36
|
+
day: "numeric",
|
|
37
|
+
month: "short",
|
|
38
|
+
year: "numeric",
|
|
39
|
+
}).format(new Date(value));
|
|
40
|
+
}
|
|
41
|
+
export function isVerlopen(offerte) {
|
|
42
|
+
if (!offerte.valid_until)
|
|
43
|
+
return false;
|
|
44
|
+
if (!OPEN_STATUSES.includes(offerte.status))
|
|
45
|
+
return false;
|
|
46
|
+
return new Date(offerte.valid_until) < new Date(new Date().toDateString());
|
|
47
|
+
}
|
|
48
|
+
/** Effectieve status: rekent verlopen offertes automatisch mee. */
|
|
49
|
+
export function effectieveStatus(offerte) {
|
|
50
|
+
return isVerlopen(offerte) ? "verlopen" : offerte.status;
|
|
51
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAA;AAG5C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const loginSchema: z.ZodObject<{
|
|
3
|
+
email: z.ZodString;
|
|
4
|
+
password: z.ZodString;
|
|
5
|
+
}, z.core.$strip>;
|
|
6
|
+
export declare const bugReportSchema: z.ZodObject<{
|
|
7
|
+
title: z.ZodString;
|
|
8
|
+
description: z.ZodString;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
export declare const ALLOWED_FILE_TYPES: string[];
|
|
11
|
+
export declare function validateFileUpload(file: File): {
|
|
12
|
+
valid: boolean;
|
|
13
|
+
error?: string;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=validationSchemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validationSchemas.d.ts","sourceRoot":"","sources":["../../src/lib/validationSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,WAAW;;;iBAGtB,CAAC;AAEH,eAAO,MAAM,eAAe;;;iBAG1B,CAAC;AAEH,eAAO,MAAM,kBAAkB,UAK9B,CAAC;AAIF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAQjF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const loginSchema = z.object({
|
|
3
|
+
email: z.string().email("Ongeldig e-mailadres"),
|
|
4
|
+
password: z.string().min(6, "Wachtwoord moet minimaal 6 tekens bevatten"),
|
|
5
|
+
});
|
|
6
|
+
export const bugReportSchema = z.object({
|
|
7
|
+
title: z.string().min(1, "Titel is verplicht").max(200),
|
|
8
|
+
description: z.string().min(1, "Beschrijving is verplicht").max(5000),
|
|
9
|
+
});
|
|
10
|
+
export const ALLOWED_FILE_TYPES = [
|
|
11
|
+
"image/png",
|
|
12
|
+
"image/jpeg",
|
|
13
|
+
"image/gif",
|
|
14
|
+
"application/pdf",
|
|
15
|
+
];
|
|
16
|
+
const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB
|
|
17
|
+
export function validateFileUpload(file) {
|
|
18
|
+
if (!ALLOWED_FILE_TYPES.includes(file.type)) {
|
|
19
|
+
return { valid: false, error: "Bestandstype niet toegestaan" };
|
|
20
|
+
}
|
|
21
|
+
if (file.size > MAX_FILE_SIZE) {
|
|
22
|
+
return { valid: false, error: "Bestand is te groot (max 10MB)" };
|
|
23
|
+
}
|
|
24
|
+
return { valid: true };
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@source "./";
|
package/package.json
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@flowselections/offertes-installatie-techniek",
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"flowselections": {
|
|
5
|
+
"moduleId": "offertes-installatietechniek",
|
|
6
|
+
"pages": [
|
|
7
|
+
{
|
|
8
|
+
"export": "OffertesOverzichtPage",
|
|
9
|
+
"route": "offertes",
|
|
10
|
+
"title": "Offertes"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"export": "OfferteDetailRoute",
|
|
14
|
+
"route": "offertes/$offerteId",
|
|
15
|
+
"title": "Offerte detail"
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
"private": false,
|
|
20
|
+
"sideEffects": false,
|
|
21
|
+
"type": "module",
|
|
22
|
+
"main": "./dist-lib/index.js",
|
|
23
|
+
"types": "./dist-lib/index.d.ts",
|
|
24
|
+
"exports": {
|
|
25
|
+
".": {
|
|
26
|
+
"types": "./dist-lib/index.d.ts",
|
|
27
|
+
"default": "./dist-lib/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./styles": "./dist-lib/styles.css"
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"dist-lib",
|
|
33
|
+
"public"
|
|
34
|
+
],
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public"
|
|
37
|
+
},
|
|
38
|
+
"scripts": {
|
|
39
|
+
"dev": "vite dev",
|
|
40
|
+
"build": "vite build",
|
|
41
|
+
"build:lib": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && node -e \"require('fs').writeFileSync('dist-lib/styles.css', '@source \\\"./\\\";\\n')\"",
|
|
42
|
+
"build:lib:watch": "tsc -p tsconfig.build.json --watch",
|
|
43
|
+
"build:dev": "vite build --mode development",
|
|
44
|
+
"preview": "vite preview",
|
|
45
|
+
"lint": "eslint ."
|
|
46
|
+
},
|
|
47
|
+
"peerDependencies": {
|
|
48
|
+
"@flowselections/core": "*",
|
|
49
|
+
"@tanstack/react-query": "^5.0.0",
|
|
50
|
+
"@tanstack/react-router": "^1.0.0",
|
|
51
|
+
"@tanstack/react-start": "^1.0.0",
|
|
52
|
+
"lucide-react": "^0.400.0",
|
|
53
|
+
"react": "^18 || ^19",
|
|
54
|
+
"react-dom": "^18 || ^19",
|
|
55
|
+
"sonner": "^2.0.0"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"@supabase/supabase-js": "^2.112.3"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@cloudflare/vite-plugin": "^1.25.5",
|
|
62
|
+
"@eslint/js": "^9.32.0",
|
|
63
|
+
"@flowselections/core": "1.0.12",
|
|
64
|
+
"@lovable.dev/vite-tanstack-config": "2.13.1",
|
|
65
|
+
"@rsbuild/core": "^1.0.0",
|
|
66
|
+
"@tailwindcss/vite": "^4.2.1",
|
|
67
|
+
"@tanstack/react-query": "^5.83.0",
|
|
68
|
+
"@tanstack/react-router": "^1.168.0",
|
|
69
|
+
"@tanstack/react-start": "^1.167.14",
|
|
70
|
+
"@tanstack/router-plugin": "^1.167.10",
|
|
71
|
+
"@types/node": "^22.16.5",
|
|
72
|
+
"@types/react": "^19.2.0",
|
|
73
|
+
"@types/react-dom": "^19.2.0",
|
|
74
|
+
"@vitejs/plugin-react": "^5.0.4",
|
|
75
|
+
"eslint": "^9.32.0",
|
|
76
|
+
"eslint-plugin-react-hooks": "^5.2.0",
|
|
77
|
+
"eslint-plugin-react-refresh": "^0.4.20",
|
|
78
|
+
"globals": "^15.15.0",
|
|
79
|
+
"lucide-react": "^0.575.0",
|
|
80
|
+
"react": "^19.2.0",
|
|
81
|
+
"react-dom": "^19.2.0",
|
|
82
|
+
"sonner": "^2.0.7",
|
|
83
|
+
"tailwindcss": "^4.2.1",
|
|
84
|
+
"tw-animate-css": "^1.3.4",
|
|
85
|
+
"typescript": "^5.8.3",
|
|
86
|
+
"tsc-alias": "^1.8.10",
|
|
87
|
+
"typescript-eslint": "^8.56.1",
|
|
88
|
+
"vite": "^7.3.1",
|
|
89
|
+
"vite-tsconfig-paths": "^6.0.2",
|
|
90
|
+
"nitro": "3.0.260603-beta"
|
|
91
|
+
}
|
|
92
|
+
}
|
package/public/logo.png
ADDED
|
Binary file
|