@flowselections/mailbox-orders 1.0.9 → 1.0.11
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/dist-lib/components/MailboxAuthBanner.d.ts +16 -0
- package/dist-lib/components/MailboxAuthBanner.d.ts.map +1 -0
- package/dist-lib/components/MailboxAuthBanner.js +14 -0
- package/dist-lib/components/MailboxProcessedPage.d.ts.map +1 -1
- package/dist-lib/components/MailboxProcessedPage.js +10 -2
- package/dist-lib/components/MailboxProposalsPage.d.ts +16 -0
- package/dist-lib/components/MailboxProposalsPage.d.ts.map +1 -1
- package/dist-lib/components/MailboxProposalsPage.js +520 -108
- package/dist-lib/components/SearchableSelect.d.ts +1 -0
- package/dist-lib/components/SearchableSelect.d.ts.map +1 -1
- package/dist-lib/components/SearchableSelect.js +2 -1
- package/dist-lib/components/settings/MailboxAiPromptCard.d.ts +2 -0
- package/dist-lib/components/settings/MailboxAiPromptCard.d.ts.map +1 -0
- package/dist-lib/components/settings/MailboxAiPromptCard.js +39 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +2 -0
- package/dist-lib/integrations/supabase/auth-attacher.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/auth-attacher.js +5 -1
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +2 -11202
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/auth-middleware.js +8 -7
- package/dist-lib/integrations/supabase/client.d.ts +16689 -7180
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +16691 -7181
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +16944 -7220
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.js +63 -1
- package/dist-lib/lib/ai-config.server.d.ts +60 -0
- package/dist-lib/lib/ai-config.server.d.ts.map +1 -0
- package/dist-lib/lib/ai-config.server.js +112 -0
- package/dist-lib/lib/delivery-date.d.ts +37 -0
- package/dist-lib/lib/delivery-date.d.ts.map +1 -0
- package/dist-lib/lib/delivery-date.js +96 -0
- package/dist-lib/lib/load-carriers.d.ts +26 -0
- package/dist-lib/lib/load-carriers.d.ts.map +1 -0
- package/dist-lib/lib/load-carriers.js +73 -0
- package/dist-lib/lib/mailbox-ai-prompt.d.ts +9 -0
- package/dist-lib/lib/mailbox-ai-prompt.d.ts.map +1 -0
- package/dist-lib/lib/mailbox-ai-prompt.js +30 -0
- package/dist-lib/lib/mailbox-ai-settings.functions.d.ts +23 -0
- package/dist-lib/lib/mailbox-ai-settings.functions.d.ts.map +1 -0
- package/dist-lib/lib/mailbox-ai-settings.functions.js +58 -0
- package/dist-lib/lib/mailbox-ai.server.d.ts +56 -4
- package/dist-lib/lib/mailbox-ai.server.d.ts.map +1 -1
- package/dist-lib/lib/mailbox-ai.server.js +329 -6
- package/dist-lib/lib/mailbox-body.d.ts +7 -0
- package/dist-lib/lib/mailbox-body.d.ts.map +1 -0
- package/dist-lib/lib/mailbox-body.js +38 -0
- package/dist-lib/lib/mailbox-ingest.server.d.ts +89 -0
- package/dist-lib/lib/mailbox-ingest.server.d.ts.map +1 -0
- package/dist-lib/lib/mailbox-ingest.server.js +928 -0
- package/dist-lib/lib/mailbox-template.functions.d.ts +7 -67213
- package/dist-lib/lib/mailbox-template.functions.d.ts.map +1 -1
- package/dist-lib/lib/mailbox.functions.d.ts +130 -190511
- package/dist-lib/lib/mailbox.functions.d.ts.map +1 -1
- package/dist-lib/lib/mailbox.functions.js +641 -274
- package/package.json +4 -3
- package/dist-lib/components/CartAssignmentWizard.d.ts +0 -6
- package/dist-lib/components/CartAssignmentWizard.d.ts.map +0 -1
- package/dist-lib/components/CartAssignmentWizard.js +0 -199
- package/dist-lib/components/MailboxInboxPage.d.ts +0 -2
- package/dist-lib/components/MailboxInboxPage.d.ts.map +0 -1
- package/dist-lib/components/MailboxInboxPage.js +0 -120
- package/dist-lib/components/settings/ImapAccountsCard.d.ts +0 -2
- package/dist-lib/components/settings/ImapAccountsCard.d.ts.map +0 -1
- package/dist-lib/components/settings/ImapAccountsCard.js +0 -136
- package/dist-lib/components/settings/ImapProfilesCard.d.ts +0 -2
- package/dist-lib/components/settings/ImapProfilesCard.d.ts.map +0 -1
- package/dist-lib/components/settings/ImapProfilesCard.js +0 -101
- package/dist-lib/components/settings/MailboxSettingsCard.d.ts +0 -2
- package/dist-lib/components/settings/MailboxSettingsCard.d.ts.map +0 -1
- package/dist-lib/components/settings/MailboxSettingsCard.js +0 -85
- package/dist-lib/lib/imap.functions.d.ts +0 -32852
- package/dist-lib/lib/imap.functions.d.ts.map +0 -1
- package/dist-lib/lib/imap.functions.js +0 -235
- package/dist-lib/lib/mailbox-auto.server.d.ts +0 -9
- package/dist-lib/lib/mailbox-auto.server.d.ts.map +0 -1
- package/dist-lib/lib/mailbox-auto.server.js +0 -198
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchableSelect.d.ts","sourceRoot":"","sources":["../../src/components/SearchableSelect.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"SearchableSelect.d.ts","sourceRoot":"","sources":["../../src/components/SearchableSelect.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EAAE,OAAO,EAAE,WAAuB,EAAE,UAA6B,EACtE,UAAiB,EAAE,UAAiC,EACpD,QAAQ,EAAE,SAAS,EAAE,QAAgB,GACtC,EAAE,qBAAqB,+BA2FvB"}
|
|
@@ -17,5 +17,6 @@ export function SearchableSelect({ value, options, placeholder = "Kies...", empt
|
|
|
17
17
|
}, [options, q]);
|
|
18
18
|
return (_jsxs(Popover, { open: open, onOpenChange: (o) => { if (disabled)
|
|
19
19
|
return; setOpen(o); if (!o)
|
|
20
|
-
setQ(""); }, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { type: "button", variant: "outline", role: "combobox", "aria-expanded": open, disabled: disabled, className: `w-full justify-between font-normal ${className ?? ""}`, children: [_jsx("span", { className: `truncate ${selected ? "" : "text-muted-foreground"}`, children: selected?.label ?? placeholder }), _jsx(ChevronsUpDown, { className: "ml-2 h-4 w-4 shrink-0 opacity-50" })] }) }), _jsxs(PopoverContent, { className: "w-[--radix-popover-trigger-width] p-0", align: "start", children: [_jsx("div", { className: "p-2 border-b", children: _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "absolute left-2 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }), _jsx(Input, { autoFocus: true, value: q, onChange: (e) => setQ(e.target.value), placeholder: `Zoek in ${options.length} items...`, className: "pl-8 h-9" })] }) }), _jsxs("div", { className: "max-h-64 overflow-y-auto py-1", children: [allowClear && (_jsxs("button", { type: "button", className: "w-full text-left text-sm px-3 py-2 hover:bg-accent flex items-center gap-2", onClick: () => { onChange(null); setOpen(false); }, children: [value === null && _jsx(Check, { className: "h-3 w-3" }), _jsx("span", { className: "text-muted-foreground italic", children: clearLabel })] })), filtered.length === 0 ? (_jsx("div", { className: "px-3 py-6 text-sm text-muted-foreground text-center", children: emptyLabel })) : (filtered.map((o) => (_jsxs("button", { type: "button",
|
|
20
|
+
setQ(""); }, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { type: "button", variant: "outline", role: "combobox", "aria-expanded": open, disabled: disabled, className: `w-full justify-between font-normal ${className ?? ""}`, children: [_jsx("span", { className: `truncate ${selected ? "" : "text-muted-foreground"}`, children: selected?.label ?? placeholder }), _jsx(ChevronsUpDown, { className: "ml-2 h-4 w-4 shrink-0 opacity-50" })] }) }), _jsxs(PopoverContent, { className: "w-[--radix-popover-trigger-width] p-0", align: "start", children: [_jsx("div", { className: "p-2 border-b", children: _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "absolute left-2 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }), _jsx(Input, { autoFocus: true, value: q, onChange: (e) => setQ(e.target.value), placeholder: `Zoek in ${options.length} items...`, className: "pl-8 h-9" })] }) }), _jsxs("div", { className: "max-h-64 overflow-y-auto py-1", children: [allowClear && (_jsxs("button", { type: "button", className: "w-full text-left text-sm px-3 py-2 hover:bg-accent flex items-center gap-2", onClick: () => { onChange(null); setOpen(false); }, children: [value === null && _jsx(Check, { className: "h-3 w-3" }), _jsx("span", { className: "text-muted-foreground italic", children: clearLabel })] })), filtered.length === 0 ? (_jsx("div", { className: "px-3 py-6 text-sm text-muted-foreground text-center", children: emptyLabel })) : (filtered.map((o) => (_jsxs("button", { type: "button", disabled: o.disabled, title: o.disabled ? "Niet op voorraad — selectie geblokkeerd door de Rule Engine" : undefined, className: `w-full text-left text-sm px-3 py-2 flex items-start gap-2 ${o.disabled ? "opacity-50 cursor-not-allowed" : "hover:bg-accent"}`, onClick: () => { if (o.disabled)
|
|
21
|
+
return; onChange(o.value); setOpen(false); }, children: [_jsx(Check, { className: `h-3 w-3 mt-1 shrink-0 ${value === o.value ? "" : "invisible"}` }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("div", { className: "truncate", children: o.label }), o.hint && _jsx("div", { className: "text-xs text-muted-foreground truncate", children: o.hint })] })] }, o.value)))), filtered.length === 200 && (_jsx("div", { className: "px-3 py-2 text-xs text-muted-foreground text-center border-t", children: "Toon eerste 200 resultaten \u2014 verfijn je zoekopdracht" }))] })] })] }));
|
|
21
22
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MailboxAiPromptCard.d.ts","sourceRoot":"","sources":["../../../src/components/settings/MailboxAiPromptCard.tsx"],"names":[],"mappings":"AAUA,wBAAgB,mBAAmB,gCA2FlC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
4
|
+
import { useServerFn } from "@tanstack/react-start";
|
|
5
|
+
import { Card, CardContent, CardDescription, CardHeader, CardTitle, Button, Label, Textarea, Badge, toast, } from "@flowselections/core";
|
|
6
|
+
import { getMailboxAiSettings, saveMailboxAiSettings } from "../../lib/mailbox-ai-settings.functions";
|
|
7
|
+
import { REQUIRED_FIELD_CHOICES, DEFAULT_REQUIRED_FIELDS } from "../../lib/mailbox-ai-prompt";
|
|
8
|
+
export function MailboxAiPromptCard() {
|
|
9
|
+
const qc = useQueryClient();
|
|
10
|
+
const fetchSettings = useServerFn(getMailboxAiSettings);
|
|
11
|
+
const save = useServerFn(saveMailboxAiSettings);
|
|
12
|
+
const { data } = useQuery({
|
|
13
|
+
queryKey: ["mailbox-ai-settings"],
|
|
14
|
+
queryFn: () => fetchSettings(),
|
|
15
|
+
});
|
|
16
|
+
const [prompt, setPrompt] = useState("");
|
|
17
|
+
const [required, setRequired] = useState(DEFAULT_REQUIRED_FIELDS);
|
|
18
|
+
const [loaded, setLoaded] = useState(false);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
if (!data || loaded)
|
|
21
|
+
return;
|
|
22
|
+
setPrompt(data.system_prompt ?? data.default_prompt ?? "");
|
|
23
|
+
setRequired(Array.isArray(data.required_fields) ? data.required_fields : DEFAULT_REQUIRED_FIELDS);
|
|
24
|
+
setLoaded(true);
|
|
25
|
+
}, [data, loaded]);
|
|
26
|
+
const mut = useMutation({
|
|
27
|
+
mutationFn: () => save({ data: { system_prompt: prompt, required_fields: required } }),
|
|
28
|
+
onSuccess: () => {
|
|
29
|
+
toast.success("AI-instructie opgeslagen");
|
|
30
|
+
void qc.invalidateQueries({ queryKey: ["mailbox-ai-settings"] });
|
|
31
|
+
},
|
|
32
|
+
onError: (e) => toast.error(e?.message ?? "Opslaan mislukt"),
|
|
33
|
+
});
|
|
34
|
+
const toggle = (key) => setRequired((cur) => (cur.includes(key) ? cur.filter((k) => k !== key) : [...cur, key]));
|
|
35
|
+
return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "AI-instructie bestelmails" }), _jsx(CardDescription, { children: "Bepaalt hoe de AI bestelmails analyseert en welke gegevens altijd opgehaald moeten worden. Aanpassen kan hier, zonder codewijziging." })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Systeemprompt" }), _jsx(Textarea, { value: prompt, onChange: (e) => setPrompt(e.target.value), rows: 14, className: "font-mono text-xs", placeholder: "Instructie voor de AI..." })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Verplichte velden" }), _jsx("div", { className: "flex flex-wrap gap-1", children: REQUIRED_FIELD_CHOICES.map((c) => (_jsx(Badge, { variant: required.includes(c.key) ? "default" : "outline", className: "cursor-pointer", onClick: () => toggle(c.key), children: c.label }, c.key))) }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Ontbreekt een verplicht veld na de analyse, dan meldt de AI dit expliciet bij het voorstel in plaats van te gokken." })] }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { onClick: () => mut.mutate(), disabled: mut.isPending, children: mut.isPending ? "Opslaan..." : "Opslaan" }), _jsx(Button, { variant: "outline", onClick: () => {
|
|
36
|
+
setPrompt(data?.default_prompt ?? "");
|
|
37
|
+
setRequired(DEFAULT_REQUIRED_FIELDS);
|
|
38
|
+
}, children: "Standaard herstellen" })] })] })] }));
|
|
39
|
+
}
|
package/dist-lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIvD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAEzE,eAAO,MAAM,mBAAmB,EAAE,UAmBjC,CAAC"}
|
package/dist-lib/index.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// ============================================================================
|
|
4
4
|
import { Mail, ClipboardCheck, CheckCircle2 } from "lucide-react";
|
|
5
5
|
import { MailboxOrderTemplateCard } from "./components/settings/MailboxOrderTemplateCard";
|
|
6
|
+
import { MailboxAiPromptCard } from "./components/settings/MailboxAiPromptCard";
|
|
6
7
|
export * from "./_core-safelist";
|
|
7
8
|
export { MailboxProposalsPage } from "./components/MailboxProposalsPage";
|
|
8
9
|
export { SearchableSelect } from "./components/SearchableSelect";
|
|
@@ -22,5 +23,6 @@ export const mailboxOrdersModule = {
|
|
|
22
23
|
},
|
|
23
24
|
settingsCards: [
|
|
24
25
|
{ component: MailboxOrderTemplateCard, order: 20 },
|
|
26
|
+
{ component: MailboxAiPromptCard, order: 25 },
|
|
25
27
|
],
|
|
26
28
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-attacher.d.ts","sourceRoot":"","sources":["../../../src/integrations/supabase/auth-attacher.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"auth-attacher.d.ts","sourceRoot":"","sources":["../../../src/integrations/supabase/auth-attacher.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,kBAAkB,mHAmE9B,CAAA"}
|
|
@@ -6,7 +6,11 @@ export const attachSupabaseAuth = createMiddleware({ type: 'function' }).client(
|
|
|
6
6
|
if (typeof window === 'undefined') {
|
|
7
7
|
return next();
|
|
8
8
|
}
|
|
9
|
-
|
|
9
|
+
// Auth leeft in de FlowSelections shell/core Supabase-client. De lokale
|
|
10
|
+
// module-client wijst naar de mailbox/e-mail-auth database en heeft geen
|
|
11
|
+
// ingelogde shell-sessie, waardoor protected serverFns zonder bearer-token
|
|
12
|
+
// werden aangeroepen.
|
|
13
|
+
const { supabase } = await import('@flowselections/core');
|
|
10
14
|
const { data } = await supabase.auth.getSession();
|
|
11
15
|
const token = data.session?.access_token;
|
|
12
16
|
const redirectToLogin = async () => {
|