@carlonicora/nextjs-jsonapi 1.31.0 → 1.32.0
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/{BlockNoteEditor-CUIQPN6C.mjs → BlockNoteEditor-TFL6ZXIJ.mjs} +4 -4
- package/dist/{BlockNoteEditor-NBASFIQP.js → BlockNoteEditor-YEVSJSOI.js} +14 -14
- package/dist/{BlockNoteEditor-NBASFIQP.js.map → BlockNoteEditor-YEVSJSOI.js.map} +1 -1
- package/dist/billing/index.js +335 -335
- package/dist/billing/index.mjs +3 -3
- package/dist/{chunk-ITBPDMUX.js → chunk-HIF7DYR3.js} +537 -482
- package/dist/chunk-HIF7DYR3.js.map +1 -0
- package/dist/{chunk-C62JXXUX.mjs → chunk-IXVNXOZT.mjs} +8 -1
- package/dist/{chunk-C62JXXUX.mjs.map → chunk-IXVNXOZT.mjs.map} +1 -1
- package/dist/{chunk-HBCIT6KE.js → chunk-KYG2PIRB.js} +5 -1
- package/dist/chunk-KYG2PIRB.js.map +1 -0
- package/dist/{chunk-OR5NPUWF.js → chunk-NPNKFWV2.js} +9 -2
- package/dist/chunk-NPNKFWV2.js.map +1 -0
- package/dist/{chunk-TM4RWVZE.mjs → chunk-SLANIL6B.mjs} +455 -400
- package/dist/chunk-SLANIL6B.mjs.map +1 -0
- package/dist/{chunk-RACFENTQ.mjs → chunk-YCP2OMFD.mjs} +5 -1
- package/dist/chunk-YCP2OMFD.mjs.map +1 -0
- package/dist/client/index.js +4 -4
- package/dist/client/index.mjs +3 -3
- package/dist/components/index.js +4 -4
- package/dist/components/index.mjs +3 -3
- package/dist/contexts/index.js +4 -4
- package/dist/contexts/index.mjs +3 -3
- package/dist/core/index.d.mts +2 -2
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +2 -2
- package/dist/core/index.mjs +1 -1
- package/dist/index.d.mts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3 -3
- package/dist/index.mjs +2 -2
- package/dist/{s3.service-D7NyMnNY.d.ts → s3.service-CoC0k0iu.d.ts} +3 -0
- package/dist/{s3.service-D2vIfl9y.d.mts → s3.service-Duh9HW2n.d.mts} +3 -0
- package/dist/server/index.d.mts +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +3 -3
- package/dist/server/index.mjs +1 -1
- package/package.json +1 -1
- package/src/features/auth/components/buttons/GoogleSignInButton.tsx +41 -0
- package/src/features/auth/components/details/LandingComponent.tsx +3 -1
- package/src/features/auth/components/forms/Login.tsx +3 -1
- package/src/features/auth/data/auth.interface.ts +3 -0
- package/src/features/auth/data/auth.service.ts +1 -0
- package/src/features/auth/data/auth.ts +3 -0
- package/src/login/config.ts +7 -0
- package/src/login/index.ts +7 -1
- package/dist/chunk-HBCIT6KE.js.map +0 -1
- package/dist/chunk-ITBPDMUX.js.map +0 -1
- package/dist/chunk-OR5NPUWF.js.map +0 -1
- package/dist/chunk-RACFENTQ.mjs.map +0 -1
- package/dist/chunk-TM4RWVZE.mjs.map +0 -1
- /package/dist/{BlockNoteEditor-CUIQPN6C.mjs.map → BlockNoteEditor-TFL6ZXIJ.mjs.map} +0 -0
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
getRoleId,
|
|
6
6
|
getTrackablePages,
|
|
7
7
|
isDiscordAuthEnabled,
|
|
8
|
+
isGoogleAuthEnabled,
|
|
8
9
|
isInternalAuthEnabled,
|
|
9
10
|
isRegistrationAllowed,
|
|
10
11
|
isRolesConfigured,
|
|
@@ -12,7 +13,7 @@ import {
|
|
|
12
13
|
useI18nLocale,
|
|
13
14
|
useI18nRouter,
|
|
14
15
|
useI18nTranslations
|
|
15
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-IXVNXOZT.mjs";
|
|
16
17
|
import {
|
|
17
18
|
AVAILABLE_OAUTH_SCOPES,
|
|
18
19
|
AuthService,
|
|
@@ -39,7 +40,7 @@ import {
|
|
|
39
40
|
showToast,
|
|
40
41
|
useComposedRefs,
|
|
41
42
|
useIsMobile
|
|
42
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-YCP2OMFD.mjs";
|
|
43
44
|
import {
|
|
44
45
|
JsonApiContext
|
|
45
46
|
} from "./chunk-VOXD3ZLY.mjs";
|
|
@@ -11172,7 +11173,7 @@ __name(AllowedUsersDetails, "AllowedUsersDetails");
|
|
|
11172
11173
|
import dynamic from "next/dynamic";
|
|
11173
11174
|
import React15 from "react";
|
|
11174
11175
|
import { jsx as jsx123 } from "react/jsx-runtime";
|
|
11175
|
-
var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-
|
|
11176
|
+
var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-TFL6ZXIJ.mjs"), {
|
|
11176
11177
|
ssr: false
|
|
11177
11178
|
});
|
|
11178
11179
|
var BlockNoteEditorContainer = React15.memo(/* @__PURE__ */ __name(function EditorContainer(props) {
|
|
@@ -12704,32 +12705,85 @@ __name(InnerAuthContainer, "InnerAuthContainer");
|
|
|
12704
12705
|
// src/features/auth/components/details/LandingComponent.tsx
|
|
12705
12706
|
import { useTranslations as useTranslations49 } from "next-intl";
|
|
12706
12707
|
import Image9 from "next/image";
|
|
12707
|
-
|
|
12708
|
+
|
|
12709
|
+
// src/features/auth/components/buttons/GoogleSignInButton.tsx
|
|
12710
|
+
import { jsx as jsx141, jsxs as jsxs81 } from "react/jsx-runtime";
|
|
12711
|
+
function GoogleSignInButton() {
|
|
12712
|
+
if (!isGoogleAuthEnabled()) {
|
|
12713
|
+
return null;
|
|
12714
|
+
}
|
|
12715
|
+
return /* @__PURE__ */ jsx141(Link, { href: `${getApiUrl()}auth/google`, className: "flex w-full justify-end", children: /* @__PURE__ */ jsxs81(
|
|
12716
|
+
Button,
|
|
12717
|
+
{
|
|
12718
|
+
className: "w-full bg-white hover:bg-gray-50 text-gray-700 border border-gray-300",
|
|
12719
|
+
variant: "outline",
|
|
12720
|
+
"data-testid": "page-login-button-google",
|
|
12721
|
+
children: [
|
|
12722
|
+
/* @__PURE__ */ jsxs81("svg", { className: "mr-2 h-5 w-5", viewBox: "0 0 24 24", children: [
|
|
12723
|
+
/* @__PURE__ */ jsx141(
|
|
12724
|
+
"path",
|
|
12725
|
+
{
|
|
12726
|
+
fill: "#4285F4",
|
|
12727
|
+
d: "M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"
|
|
12728
|
+
}
|
|
12729
|
+
),
|
|
12730
|
+
/* @__PURE__ */ jsx141(
|
|
12731
|
+
"path",
|
|
12732
|
+
{
|
|
12733
|
+
fill: "#34A853",
|
|
12734
|
+
d: "M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"
|
|
12735
|
+
}
|
|
12736
|
+
),
|
|
12737
|
+
/* @__PURE__ */ jsx141(
|
|
12738
|
+
"path",
|
|
12739
|
+
{
|
|
12740
|
+
fill: "#FBBC05",
|
|
12741
|
+
d: "M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"
|
|
12742
|
+
}
|
|
12743
|
+
),
|
|
12744
|
+
/* @__PURE__ */ jsx141(
|
|
12745
|
+
"path",
|
|
12746
|
+
{
|
|
12747
|
+
fill: "#EA4335",
|
|
12748
|
+
d: "M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"
|
|
12749
|
+
}
|
|
12750
|
+
)
|
|
12751
|
+
] }),
|
|
12752
|
+
"Sign in with Google"
|
|
12753
|
+
]
|
|
12754
|
+
}
|
|
12755
|
+
) });
|
|
12756
|
+
}
|
|
12757
|
+
__name(GoogleSignInButton, "GoogleSignInButton");
|
|
12758
|
+
|
|
12759
|
+
// src/features/auth/components/details/LandingComponent.tsx
|
|
12760
|
+
import { Fragment as Fragment21, jsx as jsx142, jsxs as jsxs82 } from "react/jsx-runtime";
|
|
12708
12761
|
function LandingComponent() {
|
|
12709
12762
|
const t = useTranslations49();
|
|
12710
12763
|
const { setComponentType } = useAuthContext();
|
|
12711
|
-
return /* @__PURE__ */
|
|
12712
|
-
/* @__PURE__ */
|
|
12713
|
-
/* @__PURE__ */
|
|
12714
|
-
/* @__PURE__ */
|
|
12764
|
+
return /* @__PURE__ */ jsxs82(Fragment21, { children: [
|
|
12765
|
+
/* @__PURE__ */ jsxs82(CardHeader, { className: "mb-4", "data-testid": "page-pre-login-container", children: [
|
|
12766
|
+
/* @__PURE__ */ jsxs82(CardTitle, { className: "text-primary flex flex-col items-center gap-y-8 pb-8 text-4xl", children: [
|
|
12767
|
+
/* @__PURE__ */ jsx142(Image9, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
|
|
12715
12768
|
t(`common.title`)
|
|
12716
12769
|
] }),
|
|
12717
|
-
/* @__PURE__ */
|
|
12770
|
+
/* @__PURE__ */ jsx142(CardDescription, { className: "flex w-full justify-center text-center text-sm", children: t(`common.description`) })
|
|
12718
12771
|
] }),
|
|
12719
|
-
/* @__PURE__ */
|
|
12720
|
-
isInternalAuthEnabled() && /* @__PURE__ */
|
|
12721
|
-
isRegistrationAllowed() && /* @__PURE__ */
|
|
12772
|
+
/* @__PURE__ */ jsxs82(CardFooter, { className: "mt-4 flex w-full flex-col justify-between gap-y-4", children: [
|
|
12773
|
+
isInternalAuthEnabled() && /* @__PURE__ */ jsxs82(Fragment21, { children: [
|
|
12774
|
+
isRegistrationAllowed() && /* @__PURE__ */ jsx142(
|
|
12722
12775
|
Link,
|
|
12723
12776
|
{
|
|
12724
12777
|
href: "#",
|
|
12725
12778
|
className: "flex w-full justify-start",
|
|
12726
12779
|
onClick: () => setComponentType(5 /* Register */),
|
|
12727
|
-
children: /* @__PURE__ */
|
|
12780
|
+
children: /* @__PURE__ */ jsx142(Button, { className: "w-full", variant: `default`, children: t(`auth.buttons.register`) })
|
|
12728
12781
|
}
|
|
12729
12782
|
),
|
|
12730
|
-
/* @__PURE__ */
|
|
12783
|
+
/* @__PURE__ */ jsx142(Link, { href: "#", className: "flex w-full justify-end", onClick: () => setComponentType(0 /* Login */), children: /* @__PURE__ */ jsx142(Button, { className: "w-full", variant: `outline`, "data-testid": "page-login-button-initial-login", children: t(`auth.buttons.login`) }) })
|
|
12731
12784
|
] }),
|
|
12732
|
-
|
|
12785
|
+
isGoogleAuthEnabled() && /* @__PURE__ */ jsx142(GoogleSignInButton, {}),
|
|
12786
|
+
isDiscordAuthEnabled() && /* @__PURE__ */ jsx142(Link, { href: `${getApiUrl()}auth/discord`, className: "flex w-full justify-end", children: /* @__PURE__ */ jsx142(Button, { className: "w-full", variant: `outline`, "data-testid": "page-login-button-initial-login", children: "Login with Discord" }) })
|
|
12733
12787
|
] })
|
|
12734
12788
|
] });
|
|
12735
12789
|
}
|
|
@@ -12742,7 +12796,7 @@ import Image10 from "next/image";
|
|
|
12742
12796
|
import { useEffect as useEffect39, useState as useState47 } from "react";
|
|
12743
12797
|
import { useForm as useForm5 } from "react-hook-form";
|
|
12744
12798
|
import { z as z5 } from "zod";
|
|
12745
|
-
import { Fragment as Fragment22, jsx as
|
|
12799
|
+
import { Fragment as Fragment22, jsx as jsx143, jsxs as jsxs83 } from "react/jsx-runtime";
|
|
12746
12800
|
function AcceptInvitation() {
|
|
12747
12801
|
const { setComponentType, params, setParams } = useAuthContext();
|
|
12748
12802
|
const [showConfirmation, setShowConfirmation] = useState47(false);
|
|
@@ -12805,16 +12859,16 @@ function AcceptInvitation() {
|
|
|
12805
12859
|
errorToast({ title: t(`common.errors.error`), error });
|
|
12806
12860
|
}
|
|
12807
12861
|
}, "onSubmit");
|
|
12808
|
-
return /* @__PURE__ */
|
|
12809
|
-
/* @__PURE__ */
|
|
12810
|
-
/* @__PURE__ */
|
|
12811
|
-
/* @__PURE__ */
|
|
12862
|
+
return /* @__PURE__ */ jsxs83(Fragment22, { children: [
|
|
12863
|
+
/* @__PURE__ */ jsxs83(CardHeader, { children: [
|
|
12864
|
+
/* @__PURE__ */ jsxs83(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
|
|
12865
|
+
/* @__PURE__ */ jsx143(Image10, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
|
|
12812
12866
|
t("auth.accept_invitation")
|
|
12813
12867
|
] }),
|
|
12814
|
-
/* @__PURE__ */
|
|
12868
|
+
/* @__PURE__ */ jsx143(CardDescription, { className: "text-center text-sm", children: error ? /* @__PURE__ */ jsx143(Fragment22, { children: t("auth.errors.activating_account") }) : /* @__PURE__ */ jsx143(Fragment22, { children: t("auth.select_password") }) })
|
|
12815
12869
|
] }),
|
|
12816
|
-
/* @__PURE__ */
|
|
12817
|
-
/* @__PURE__ */
|
|
12870
|
+
/* @__PURE__ */ jsx143(CardContent, { children: showConfirmation ? /* @__PURE__ */ jsx143(CardDescription, { className: "text-center text-xl", children: t("auth.activation_description") }) : error ? /* @__PURE__ */ jsx143(CardDescription, { className: "text-center text-xl", children: error }) : /* @__PURE__ */ jsx143(Form, { ...form, children: /* @__PURE__ */ jsxs83("form", { onSubmit: form.handleSubmit(onSubmit), children: [
|
|
12871
|
+
/* @__PURE__ */ jsx143(
|
|
12818
12872
|
FormPassword,
|
|
12819
12873
|
{
|
|
12820
12874
|
form,
|
|
@@ -12823,7 +12877,7 @@ function AcceptInvitation() {
|
|
|
12823
12877
|
placeholder: t(`user.fields.password.placeholder`)
|
|
12824
12878
|
}
|
|
12825
12879
|
),
|
|
12826
|
-
/* @__PURE__ */
|
|
12880
|
+
/* @__PURE__ */ jsx143(
|
|
12827
12881
|
FormPassword,
|
|
12828
12882
|
{
|
|
12829
12883
|
form,
|
|
@@ -12832,7 +12886,7 @@ function AcceptInvitation() {
|
|
|
12832
12886
|
placeholder: t(`auth.fields.retype_password.placeholder`)
|
|
12833
12887
|
}
|
|
12834
12888
|
),
|
|
12835
|
-
/* @__PURE__ */
|
|
12889
|
+
/* @__PURE__ */ jsx143(Button, { className: "mt-4 w-full", type: "submit", children: t("auth.accept_invitation") })
|
|
12836
12890
|
] }) }) })
|
|
12837
12891
|
] });
|
|
12838
12892
|
}
|
|
@@ -12842,7 +12896,7 @@ __name(AcceptInvitation, "AcceptInvitation");
|
|
|
12842
12896
|
import { useTranslations as useTranslations51 } from "next-intl";
|
|
12843
12897
|
import Image11 from "next/image";
|
|
12844
12898
|
import { useEffect as useEffect40, useState as useState48 } from "react";
|
|
12845
|
-
import { Fragment as Fragment23, jsx as
|
|
12899
|
+
import { Fragment as Fragment23, jsx as jsx144, jsxs as jsxs84 } from "react/jsx-runtime";
|
|
12846
12900
|
function ActivateAccount() {
|
|
12847
12901
|
const { setComponentType, params, setParams } = useAuthContext();
|
|
12848
12902
|
const [showConfirmation, setShowConfirmation] = useState48(false);
|
|
@@ -12875,15 +12929,15 @@ function ActivateAccount() {
|
|
|
12875
12929
|
setError(t(`auth.errors.invalid_invitation_code`));
|
|
12876
12930
|
}
|
|
12877
12931
|
}, []);
|
|
12878
|
-
return /* @__PURE__ */
|
|
12879
|
-
/* @__PURE__ */
|
|
12880
|
-
/* @__PURE__ */
|
|
12881
|
-
/* @__PURE__ */
|
|
12932
|
+
return /* @__PURE__ */ jsxs84(Fragment23, { children: [
|
|
12933
|
+
/* @__PURE__ */ jsxs84(CardHeader, { children: [
|
|
12934
|
+
/* @__PURE__ */ jsxs84(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
|
|
12935
|
+
/* @__PURE__ */ jsx144(Image11, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
|
|
12882
12936
|
t("auth.accept_invitation")
|
|
12883
12937
|
] }),
|
|
12884
|
-
/* @__PURE__ */
|
|
12938
|
+
/* @__PURE__ */ jsx144(CardDescription, { className: "text-center text-sm", children: error ? /* @__PURE__ */ jsx144(Fragment23, { children: t("auth.errors.activating_account") }) : /* @__PURE__ */ jsx144(Fragment23, { children: " " }) })
|
|
12885
12939
|
] }),
|
|
12886
|
-
/* @__PURE__ */
|
|
12940
|
+
/* @__PURE__ */ jsx144(CardContent, { children: /* @__PURE__ */ jsx144(CardDescription, { className: "text-center text-xl", children: showConfirmation ? /* @__PURE__ */ jsx144(Fragment23, { children: t("auth.activation_description") }) : error ? /* @__PURE__ */ jsx144(Fragment23, { children: error }) : /* @__PURE__ */ jsx144(Fragment23, { children: t("auth.activation_wait") }) }) })
|
|
12887
12941
|
] });
|
|
12888
12942
|
}
|
|
12889
12943
|
__name(ActivateAccount, "ActivateAccount");
|
|
@@ -12920,7 +12974,7 @@ import Image12 from "next/image";
|
|
|
12920
12974
|
import { useState as useState50 } from "react";
|
|
12921
12975
|
import { useForm as useForm6 } from "react-hook-form";
|
|
12922
12976
|
import { z as z6 } from "zod";
|
|
12923
|
-
import { Fragment as Fragment24, jsx as
|
|
12977
|
+
import { Fragment as Fragment24, jsx as jsx145, jsxs as jsxs85 } from "react/jsx-runtime";
|
|
12924
12978
|
function ForgotPassword() {
|
|
12925
12979
|
const t = useTranslations52();
|
|
12926
12980
|
const { setComponentType } = useAuthContext();
|
|
@@ -12947,17 +13001,17 @@ function ForgotPassword() {
|
|
|
12947
13001
|
errorToast({ error: e });
|
|
12948
13002
|
}
|
|
12949
13003
|
}, "onSubmit");
|
|
12950
|
-
return /* @__PURE__ */
|
|
12951
|
-
/* @__PURE__ */
|
|
12952
|
-
/* @__PURE__ */
|
|
12953
|
-
/* @__PURE__ */
|
|
13004
|
+
return /* @__PURE__ */ jsxs85(Fragment24, { children: [
|
|
13005
|
+
/* @__PURE__ */ jsxs85(CardHeader, { "data-testid": "page-forgot-password-container", children: [
|
|
13006
|
+
/* @__PURE__ */ jsxs85(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
|
|
13007
|
+
/* @__PURE__ */ jsx145(Image12, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
|
|
12954
13008
|
t("auth.buttons.forgot_password")
|
|
12955
13009
|
] }),
|
|
12956
|
-
/* @__PURE__ */
|
|
13010
|
+
/* @__PURE__ */ jsx145(CardDescription, { className: "text-sm", children: showConfirmation ? /* @__PURE__ */ jsx145(Fragment24, { children: " " }) : /* @__PURE__ */ jsx145(Fragment24, { children: t(`auth.add_email_to_reset`) }) })
|
|
12957
13011
|
] }),
|
|
12958
|
-
showConfirmation ? /* @__PURE__ */
|
|
12959
|
-
/* @__PURE__ */
|
|
12960
|
-
/* @__PURE__ */
|
|
13012
|
+
showConfirmation ? /* @__PURE__ */ jsx145(CardContent, { children: /* @__PURE__ */ jsx145(CardDescription, { className: "text-center text-xl", children: t(`auth.reset_confirmation`) }) }) : /* @__PURE__ */ jsx145(Form, { ...form, children: /* @__PURE__ */ jsxs85("form", { onSubmit: form.handleSubmit(onSubmit), children: [
|
|
13013
|
+
/* @__PURE__ */ jsxs85(CardContent, { children: [
|
|
13014
|
+
/* @__PURE__ */ jsx145(
|
|
12961
13015
|
FormInput,
|
|
12962
13016
|
{
|
|
12963
13017
|
form,
|
|
@@ -12967,9 +13021,9 @@ function ForgotPassword() {
|
|
|
12967
13021
|
testId: "form-forgot-password-input-email"
|
|
12968
13022
|
}
|
|
12969
13023
|
),
|
|
12970
|
-
/* @__PURE__ */
|
|
13024
|
+
/* @__PURE__ */ jsx145(Button, { className: "mt-4 w-full", type: "submit", "data-testid": "form-forgot-password-button-reset", children: t(`auth.buttons.reset_password`) })
|
|
12971
13025
|
] }),
|
|
12972
|
-
/* @__PURE__ */
|
|
13026
|
+
/* @__PURE__ */ jsx145(CardFooter, { className: "flex w-full flex-row justify-between", children: /* @__PURE__ */ jsx145(
|
|
12973
13027
|
Link,
|
|
12974
13028
|
{
|
|
12975
13029
|
href: "#",
|
|
@@ -12990,7 +13044,7 @@ import { useTranslations as useTranslations53 } from "next-intl";
|
|
|
12990
13044
|
import Image13 from "next/image";
|
|
12991
13045
|
import { useForm as useForm7 } from "react-hook-form";
|
|
12992
13046
|
import { z as z7 } from "zod";
|
|
12993
|
-
import { Fragment as Fragment25, jsx as
|
|
13047
|
+
import { Fragment as Fragment25, jsx as jsx146, jsxs as jsxs86 } from "react/jsx-runtime";
|
|
12994
13048
|
function Login() {
|
|
12995
13049
|
const t = useTranslations53();
|
|
12996
13050
|
const { setUser } = useCurrentUserContext();
|
|
@@ -13025,17 +13079,17 @@ function Login() {
|
|
|
13025
13079
|
});
|
|
13026
13080
|
}
|
|
13027
13081
|
}, "onSubmit");
|
|
13028
|
-
return /* @__PURE__ */
|
|
13029
|
-
/* @__PURE__ */
|
|
13030
|
-
/* @__PURE__ */
|
|
13031
|
-
/* @__PURE__ */
|
|
13082
|
+
return /* @__PURE__ */ jsxs86(Fragment25, { children: [
|
|
13083
|
+
/* @__PURE__ */ jsxs86(CardHeader, { "data-testid": "page-login-container", children: [
|
|
13084
|
+
/* @__PURE__ */ jsxs86(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
|
|
13085
|
+
/* @__PURE__ */ jsx146(Image13, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
|
|
13032
13086
|
t("auth.buttons.login")
|
|
13033
13087
|
] }),
|
|
13034
|
-
/* @__PURE__ */
|
|
13088
|
+
/* @__PURE__ */ jsx146(CardDescription, { className: "text-sm", children: t(`auth.login_description`) })
|
|
13035
13089
|
] }),
|
|
13036
|
-
/* @__PURE__ */
|
|
13037
|
-
/* @__PURE__ */
|
|
13038
|
-
/* @__PURE__ */
|
|
13090
|
+
/* @__PURE__ */ jsx146(Form, { ...form, children: /* @__PURE__ */ jsxs86("form", { onSubmit: form.handleSubmit(onSubmit), children: [
|
|
13091
|
+
/* @__PURE__ */ jsx146(CardContent, { children: isInternalAuthEnabled() && /* @__PURE__ */ jsxs86(Fragment25, { children: [
|
|
13092
|
+
/* @__PURE__ */ jsx146(
|
|
13039
13093
|
FormInput,
|
|
13040
13094
|
{
|
|
13041
13095
|
autoFocus: true,
|
|
@@ -13046,7 +13100,7 @@ function Login() {
|
|
|
13046
13100
|
testId: "form-login-input-email"
|
|
13047
13101
|
}
|
|
13048
13102
|
),
|
|
13049
|
-
/* @__PURE__ */
|
|
13103
|
+
/* @__PURE__ */ jsx146(
|
|
13050
13104
|
FormPassword,
|
|
13051
13105
|
{
|
|
13052
13106
|
form,
|
|
@@ -13056,12 +13110,13 @@ function Login() {
|
|
|
13056
13110
|
testId: "form-login-input-password"
|
|
13057
13111
|
}
|
|
13058
13112
|
),
|
|
13059
|
-
/* @__PURE__ */
|
|
13113
|
+
/* @__PURE__ */ jsx146(Button, { className: "mt-4 w-full", type: "submit", "data-testid": "form-login-button-submit", children: t(`auth.buttons.login`) })
|
|
13060
13114
|
] }) }),
|
|
13061
|
-
/* @__PURE__ */
|
|
13062
|
-
|
|
13063
|
-
/* @__PURE__ */
|
|
13064
|
-
|
|
13115
|
+
/* @__PURE__ */ jsxs86(CardFooter, { className: "flex w-full flex-col gap-y-4 mt-4", children: [
|
|
13116
|
+
isGoogleAuthEnabled() && /* @__PURE__ */ jsx146(GoogleSignInButton, {}),
|
|
13117
|
+
isDiscordAuthEnabled() && /* @__PURE__ */ jsx146(Link, { href: `${getApiUrl()}auth/discord`, className: "flex w-full justify-end", children: /* @__PURE__ */ jsx146(Button, { className: "w-full", variant: `outline`, "data-testid": "page-login-button-initial-login", children: "Login with Discord" }) }),
|
|
13118
|
+
/* @__PURE__ */ jsxs86("div", { className: "flex w-full flex-row justify-between", children: [
|
|
13119
|
+
/* @__PURE__ */ jsx146(
|
|
13065
13120
|
Link,
|
|
13066
13121
|
{
|
|
13067
13122
|
href: "#",
|
|
@@ -13070,7 +13125,7 @@ function Login() {
|
|
|
13070
13125
|
children: t(`auth.buttons.register`)
|
|
13071
13126
|
}
|
|
13072
13127
|
),
|
|
13073
|
-
/* @__PURE__ */
|
|
13128
|
+
/* @__PURE__ */ jsx146(
|
|
13074
13129
|
Link,
|
|
13075
13130
|
{
|
|
13076
13131
|
href: "#",
|
|
@@ -13089,7 +13144,7 @@ __name(Login, "Login");
|
|
|
13089
13144
|
|
|
13090
13145
|
// src/features/auth/components/forms/Logout.tsx
|
|
13091
13146
|
import { useEffect as useEffect42 } from "react";
|
|
13092
|
-
import { Fragment as Fragment26, jsx as
|
|
13147
|
+
import { Fragment as Fragment26, jsx as jsx147 } from "react/jsx-runtime";
|
|
13093
13148
|
function Logout() {
|
|
13094
13149
|
const generateUrl = usePageUrlGenerator();
|
|
13095
13150
|
useEffect42(() => {
|
|
@@ -13099,7 +13154,7 @@ function Logout() {
|
|
|
13099
13154
|
}, "logOut");
|
|
13100
13155
|
logOut();
|
|
13101
13156
|
}, []);
|
|
13102
|
-
return /* @__PURE__ */
|
|
13157
|
+
return /* @__PURE__ */ jsx147(Fragment26, {});
|
|
13103
13158
|
}
|
|
13104
13159
|
__name(Logout, "Logout");
|
|
13105
13160
|
|
|
@@ -13140,7 +13195,7 @@ import Image14 from "next/image";
|
|
|
13140
13195
|
import { useEffect as useEffect44, useState as useState51 } from "react";
|
|
13141
13196
|
import { useForm as useForm8 } from "react-hook-form";
|
|
13142
13197
|
import { z as z8 } from "zod";
|
|
13143
|
-
import { Fragment as Fragment27, jsx as
|
|
13198
|
+
import { Fragment as Fragment27, jsx as jsx148, jsxs as jsxs87 } from "react/jsx-runtime";
|
|
13144
13199
|
function ResetPassword() {
|
|
13145
13200
|
const { setComponentType, params, setParams } = useAuthContext();
|
|
13146
13201
|
const [showConfirmation, setShowConfirmation] = useState51(false);
|
|
@@ -13203,18 +13258,18 @@ function ResetPassword() {
|
|
|
13203
13258
|
errorToast({ title: t(`common.errors.error`), error });
|
|
13204
13259
|
}
|
|
13205
13260
|
}, "onSubmit");
|
|
13206
|
-
return /* @__PURE__ */
|
|
13207
|
-
/* @__PURE__ */
|
|
13208
|
-
/* @__PURE__ */
|
|
13209
|
-
/* @__PURE__ */
|
|
13261
|
+
return /* @__PURE__ */ jsxs87(Fragment27, { children: [
|
|
13262
|
+
/* @__PURE__ */ jsxs87(CardHeader, { children: [
|
|
13263
|
+
/* @__PURE__ */ jsxs87(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
|
|
13264
|
+
/* @__PURE__ */ jsx148(Image14, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
|
|
13210
13265
|
t(`auth.password_reset`)
|
|
13211
13266
|
] }),
|
|
13212
|
-
/* @__PURE__ */
|
|
13267
|
+
/* @__PURE__ */ jsx148(CardDescription, { className: "text-center text-sm", children: error ? /* @__PURE__ */ jsx148(Fragment27, { children: t(`auth.errors.password_reset_error`) }) : /* @__PURE__ */ jsx148(Fragment27, { children: t(`auth.reset_password`) }) })
|
|
13213
13268
|
] }),
|
|
13214
|
-
/* @__PURE__ */
|
|
13215
|
-
/* @__PURE__ */
|
|
13216
|
-
/* @__PURE__ */
|
|
13217
|
-
/* @__PURE__ */
|
|
13269
|
+
/* @__PURE__ */ jsx148(CardContent, { children: showConfirmation ? /* @__PURE__ */ jsx148(CardDescription, { className: "text-center text-xl", children: t(`auth.reset_success_description`) }) : error ? /* @__PURE__ */ jsx148(CardDescription, { className: "text-center text-xl", children: error }) : /* @__PURE__ */ jsx148(Form, { ...form, children: /* @__PURE__ */ jsxs87("form", { onSubmit: form.handleSubmit(onSubmit), children: [
|
|
13270
|
+
/* @__PURE__ */ jsx148(FormPassword, { form, id: "password", name: "Password" }),
|
|
13271
|
+
/* @__PURE__ */ jsx148(FormPassword, { form, id: "passwordRetype", name: "Retype Password" }),
|
|
13272
|
+
/* @__PURE__ */ jsx148(Button, { className: "mt-4 w-full", type: "submit", children: t(`auth.buttons.reset_password`) })
|
|
13218
13273
|
] }) }) })
|
|
13219
13274
|
] });
|
|
13220
13275
|
}
|
|
@@ -13222,12 +13277,12 @@ __name(ResetPassword, "ResetPassword");
|
|
|
13222
13277
|
|
|
13223
13278
|
// src/features/content/components/lists/ContentsList.tsx
|
|
13224
13279
|
import { useTranslations as useTranslations55 } from "next-intl";
|
|
13225
|
-
import { jsx as
|
|
13280
|
+
import { jsx as jsx149, jsxs as jsxs88 } from "react/jsx-runtime";
|
|
13226
13281
|
function ContentsList({ contentList }) {
|
|
13227
13282
|
const t = useTranslations55();
|
|
13228
|
-
return /* @__PURE__ */
|
|
13229
|
-
/* @__PURE__ */
|
|
13230
|
-
/* @__PURE__ */
|
|
13283
|
+
return /* @__PURE__ */ jsxs88("div", { className: "flex min-h-0 w-full flex-col overflow-y-auto", children: [
|
|
13284
|
+
/* @__PURE__ */ jsx149("h2", { className: "text-xl font-semibold", children: t(`content.news`) }),
|
|
13285
|
+
/* @__PURE__ */ jsx149("div", { className: "flex flex-col", children: contentList.map((content) => /* @__PURE__ */ jsx149(ContentsListElement, { content }, content.id)) })
|
|
13231
13286
|
] });
|
|
13232
13287
|
}
|
|
13233
13288
|
__name(ContentsList, "ContentsList");
|
|
@@ -13235,25 +13290,25 @@ function ContentsListElement({ content }) {
|
|
|
13235
13290
|
const generateUrl = usePageUrlGenerator();
|
|
13236
13291
|
const contentModule = content.contentType ? Modules.findByModelName(content.contentType) : void 0;
|
|
13237
13292
|
const link = contentModule ? generateUrl({ page: contentModule, id: content.id }) : "#";
|
|
13238
|
-
return /* @__PURE__ */
|
|
13239
|
-
/* @__PURE__ */
|
|
13240
|
-
/* @__PURE__ */
|
|
13293
|
+
return /* @__PURE__ */ jsx149("div", { className: "hover:bg-muted flex w-full flex-col gap-y-2 border-b p-2 py-4", children: /* @__PURE__ */ jsxs88("div", { className: "flex w-full justify-between gap-x-2", children: [
|
|
13294
|
+
/* @__PURE__ */ jsxs88(HoverCard, { children: [
|
|
13295
|
+
/* @__PURE__ */ jsx149(HoverCardTrigger, { children: /* @__PURE__ */ jsxs88(Link, { href: link, className: "flex w-full items-center justify-start gap-2 font-semibold", children: [
|
|
13241
13296
|
contentModule && getIconByModule({ module: contentModule, className: "h-4 w-4" }),
|
|
13242
13297
|
content.name
|
|
13243
13298
|
] }) }),
|
|
13244
|
-
/* @__PURE__ */
|
|
13245
|
-
/* @__PURE__ */
|
|
13246
|
-
/* @__PURE__ */
|
|
13299
|
+
/* @__PURE__ */ jsxs88(HoverCardContent, { className: "flex max-h-96 w-96 flex-col gap-y-4 overflow-y-auto", children: [
|
|
13300
|
+
/* @__PURE__ */ jsx149(Link, { href: link, className: "font-semibold", children: content.name }),
|
|
13301
|
+
/* @__PURE__ */ jsx149("div", { className: "text-xs", children: content.abstract })
|
|
13247
13302
|
] })
|
|
13248
13303
|
] }),
|
|
13249
|
-
/* @__PURE__ */
|
|
13304
|
+
/* @__PURE__ */ jsx149(ContributorsList, { content })
|
|
13250
13305
|
] }) });
|
|
13251
13306
|
}
|
|
13252
13307
|
__name(ContentsListElement, "ContentsListElement");
|
|
13253
13308
|
|
|
13254
13309
|
// src/features/content/components/lists/ContentsListById.tsx
|
|
13255
13310
|
import { useTranslations as useTranslations56 } from "next-intl";
|
|
13256
|
-
import { jsx as
|
|
13311
|
+
import { jsx as jsx150 } from "react/jsx-runtime";
|
|
13257
13312
|
function ContentsListById({ contentIds }) {
|
|
13258
13313
|
const t = useTranslations56();
|
|
13259
13314
|
const data = useDataListRetriever({
|
|
@@ -13261,7 +13316,7 @@ function ContentsListById({ contentIds }) {
|
|
|
13261
13316
|
retriever: /* @__PURE__ */ __name((params) => ContentService.findMany(params), "retriever"),
|
|
13262
13317
|
retrieverParams: { contentIds }
|
|
13263
13318
|
});
|
|
13264
|
-
return /* @__PURE__ */
|
|
13319
|
+
return /* @__PURE__ */ jsx150(
|
|
13265
13320
|
ContentListTable,
|
|
13266
13321
|
{
|
|
13267
13322
|
data,
|
|
@@ -13275,7 +13330,7 @@ __name(ContentsListById, "ContentsListById");
|
|
|
13275
13330
|
|
|
13276
13331
|
// src/features/content/components/lists/RelevantContentsList.tsx
|
|
13277
13332
|
import { useTranslations as useTranslations57 } from "next-intl";
|
|
13278
|
-
import { jsx as
|
|
13333
|
+
import { jsx as jsx151 } from "react/jsx-runtime";
|
|
13279
13334
|
function RelevantContentsList({ id }) {
|
|
13280
13335
|
const t = useTranslations57();
|
|
13281
13336
|
const data = useDataListRetriever({
|
|
@@ -13283,7 +13338,7 @@ function RelevantContentsList({ id }) {
|
|
|
13283
13338
|
retriever: /* @__PURE__ */ __name((params) => ContentService.findRelevant(params), "retriever"),
|
|
13284
13339
|
retrieverParams: { id }
|
|
13285
13340
|
});
|
|
13286
|
-
return /* @__PURE__ */
|
|
13341
|
+
return /* @__PURE__ */ jsx151(
|
|
13287
13342
|
ContentListTable,
|
|
13288
13343
|
{
|
|
13289
13344
|
data,
|
|
@@ -13297,7 +13352,7 @@ __name(RelevantContentsList, "RelevantContentsList");
|
|
|
13297
13352
|
|
|
13298
13353
|
// src/features/notification/components/common/NotificationErrorBoundary.tsx
|
|
13299
13354
|
import { Component } from "react";
|
|
13300
|
-
import { jsx as
|
|
13355
|
+
import { jsx as jsx152, jsxs as jsxs89 } from "react/jsx-runtime";
|
|
13301
13356
|
var NotificationErrorBoundary = class extends Component {
|
|
13302
13357
|
static {
|
|
13303
13358
|
__name(this, "NotificationErrorBoundary");
|
|
@@ -13314,9 +13369,9 @@ var NotificationErrorBoundary = class extends Component {
|
|
|
13314
13369
|
}
|
|
13315
13370
|
render() {
|
|
13316
13371
|
if (this.state.hasError) {
|
|
13317
|
-
return this.props.fallback || /* @__PURE__ */
|
|
13318
|
-
/* @__PURE__ */
|
|
13319
|
-
/* @__PURE__ */
|
|
13372
|
+
return this.props.fallback || /* @__PURE__ */ jsx152("div", { className: "flex items-center justify-center p-4 text-center", children: /* @__PURE__ */ jsxs89("div", { className: "text-muted-foreground text-sm", children: [
|
|
13373
|
+
/* @__PURE__ */ jsx152("p", { children: "Something went wrong with notifications." }),
|
|
13374
|
+
/* @__PURE__ */ jsx152(
|
|
13320
13375
|
"button",
|
|
13321
13376
|
{
|
|
13322
13377
|
onClick: () => this.setState({ hasError: false }),
|
|
@@ -13336,7 +13391,7 @@ import { useTranslations as useTranslations59 } from "next-intl";
|
|
|
13336
13391
|
// src/features/notification/components/lists/NotificationsList.tsx
|
|
13337
13392
|
import { ArchiveIcon } from "lucide-react";
|
|
13338
13393
|
import { useTranslations as useTranslations58 } from "next-intl";
|
|
13339
|
-
import { Fragment as Fragment28, jsx as
|
|
13394
|
+
import { Fragment as Fragment28, jsx as jsx153, jsxs as jsxs90 } from "react/jsx-runtime";
|
|
13340
13395
|
function NotificationsList({ archived }) {
|
|
13341
13396
|
const t = useTranslations58();
|
|
13342
13397
|
const generateUrl = usePageUrlGenerator();
|
|
@@ -13349,30 +13404,30 @@ function NotificationsList({ archived }) {
|
|
|
13349
13404
|
await NotificationService.archive({ id: notification.id });
|
|
13350
13405
|
data.removeElement(notification);
|
|
13351
13406
|
}, "archiveNotification");
|
|
13352
|
-
const LoadingSkeleton = /* @__PURE__ */ __name(() => /* @__PURE__ */
|
|
13353
|
-
/* @__PURE__ */
|
|
13354
|
-
/* @__PURE__ */
|
|
13355
|
-
/* @__PURE__ */
|
|
13356
|
-
/* @__PURE__ */
|
|
13407
|
+
const LoadingSkeleton = /* @__PURE__ */ __name(() => /* @__PURE__ */ jsx153("div", { className: "space-y-4", children: Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsx153(Card, { children: /* @__PURE__ */ jsx153(CardContent, { className: "p-2", children: /* @__PURE__ */ jsxs90("div", { className: "flex w-full flex-row items-center", children: [
|
|
13408
|
+
/* @__PURE__ */ jsx153(Skeleton, { className: "mr-4 h-8 w-8 rounded-full" }),
|
|
13409
|
+
/* @__PURE__ */ jsxs90("div", { className: "flex-1 space-y-2", children: [
|
|
13410
|
+
/* @__PURE__ */ jsx153(Skeleton, { className: "h-4 w-3/4" }),
|
|
13411
|
+
/* @__PURE__ */ jsx153(Skeleton, { className: "h-3 w-1/2" })
|
|
13357
13412
|
] }),
|
|
13358
|
-
/* @__PURE__ */
|
|
13413
|
+
/* @__PURE__ */ jsx153(Skeleton, { className: "h-8 w-20" })
|
|
13359
13414
|
] }) }) }, i)) }), "LoadingSkeleton");
|
|
13360
|
-
return /* @__PURE__ */
|
|
13415
|
+
return /* @__PURE__ */ jsx153("div", { className: "space-y-4", children: data.isLoaded ? data.data?.map((notification) => {
|
|
13361
13416
|
const notificationData = generateNotificationData({ notification, generateUrl });
|
|
13362
|
-
return /* @__PURE__ */
|
|
13363
|
-
notificationData.actor ? /* @__PURE__ */
|
|
13364
|
-
/* @__PURE__ */
|
|
13365
|
-
/* @__PURE__ */
|
|
13366
|
-
strong: /* @__PURE__ */ __name((chunks) => /* @__PURE__ */
|
|
13417
|
+
return /* @__PURE__ */ jsx153(Card, { children: /* @__PURE__ */ jsx153(CardContent, { className: "p-0", children: /* @__PURE__ */ jsxs90("div", { className: `flex w-full flex-row items-center p-2`, children: [
|
|
13418
|
+
notificationData.actor ? /* @__PURE__ */ jsx153("div", { className: "flex w-12 max-w-12 px-2", children: /* @__PURE__ */ jsx153(Link, { href: generateUrl({ page: Modules.User, id: notificationData.actor.id }), children: /* @__PURE__ */ jsx153(UserAvatar, { user: notificationData.actor, className: "h-8 w-8" }) }) }) : /* @__PURE__ */ jsx153("div", { className: "flex w-14 max-w-14 px-2" }),
|
|
13419
|
+
/* @__PURE__ */ jsxs90("div", { className: "flex w-full flex-col", children: [
|
|
13420
|
+
/* @__PURE__ */ jsx153("p", { className: "text-sm", children: t.rich(`notification.${notification.notificationType}.description`, {
|
|
13421
|
+
strong: /* @__PURE__ */ __name((chunks) => /* @__PURE__ */ jsx153("strong", { children: chunks }), "strong"),
|
|
13367
13422
|
actor: notificationData.actor?.name ?? "",
|
|
13368
13423
|
title: notificationData.title
|
|
13369
13424
|
}) }),
|
|
13370
|
-
/* @__PURE__ */
|
|
13425
|
+
/* @__PURE__ */ jsx153("div", { className: "text-muted-foreground mt-1 w-full text-xs", children: new Date(notification.createdAt).toLocaleString() })
|
|
13371
13426
|
] }),
|
|
13372
|
-
/* @__PURE__ */
|
|
13373
|
-
notificationData.url ? /* @__PURE__ */
|
|
13374
|
-
!archived && /* @__PURE__ */
|
|
13375
|
-
/* @__PURE__ */
|
|
13427
|
+
/* @__PURE__ */ jsxs90("div", { className: "flex flex-row items-center", children: [
|
|
13428
|
+
notificationData.url ? /* @__PURE__ */ jsx153(Link, { href: notificationData.url, children: /* @__PURE__ */ jsx153(Button, { variant: `outline`, size: `sm`, onClick: (e) => e.stopPropagation(), children: t(`notification.${notification.notificationType}.buttons.action`) }) }) : /* @__PURE__ */ jsx153(Fragment28, {}),
|
|
13429
|
+
!archived && /* @__PURE__ */ jsxs90(Tooltip2, { children: [
|
|
13430
|
+
/* @__PURE__ */ jsx153(TooltipTrigger, { children: /* @__PURE__ */ jsx153(
|
|
13376
13431
|
Button,
|
|
13377
13432
|
{
|
|
13378
13433
|
variant: `link`,
|
|
@@ -13382,46 +13437,46 @@ function NotificationsList({ archived }) {
|
|
|
13382
13437
|
archiveNotification(notification);
|
|
13383
13438
|
},
|
|
13384
13439
|
className: "text-muted-foreground hover:text-destructive ml-2",
|
|
13385
|
-
children: /* @__PURE__ */
|
|
13440
|
+
children: /* @__PURE__ */ jsx153(ArchiveIcon, { className: "h-4 w-4 cursor-pointer" })
|
|
13386
13441
|
}
|
|
13387
13442
|
) }),
|
|
13388
|
-
/* @__PURE__ */
|
|
13443
|
+
/* @__PURE__ */ jsx153(TooltipContent, { children: t(`notification.buttons.archive`) })
|
|
13389
13444
|
] })
|
|
13390
13445
|
] })
|
|
13391
13446
|
] }) }) }, notification.id);
|
|
13392
|
-
}) : /* @__PURE__ */
|
|
13447
|
+
}) : /* @__PURE__ */ jsx153(LoadingSkeleton, {}) });
|
|
13393
13448
|
}
|
|
13394
13449
|
__name(NotificationsList, "NotificationsList");
|
|
13395
13450
|
|
|
13396
13451
|
// src/features/notification/components/containers/NotificationsListContainer.tsx
|
|
13397
|
-
import { jsx as
|
|
13452
|
+
import { jsx as jsx154, jsxs as jsxs91 } from "react/jsx-runtime";
|
|
13398
13453
|
function NotificationsListContainerContent() {
|
|
13399
13454
|
const t = useTranslations59();
|
|
13400
13455
|
const { notifications, isLoading, error } = useNotificationContext();
|
|
13401
13456
|
if (error) {
|
|
13402
|
-
return /* @__PURE__ */
|
|
13403
|
-
/* @__PURE__ */
|
|
13457
|
+
return /* @__PURE__ */ jsx154("div", { className: "flex items-center justify-center p-8 text-center", children: /* @__PURE__ */ jsxs91("div", { className: "text-destructive text-sm", children: [
|
|
13458
|
+
/* @__PURE__ */ jsxs91("p", { children: [
|
|
13404
13459
|
"Error loading notifications: ",
|
|
13405
13460
|
error
|
|
13406
13461
|
] }),
|
|
13407
|
-
/* @__PURE__ */
|
|
13462
|
+
/* @__PURE__ */ jsx154("p", { className: "text-muted-foreground mt-2", children: "Please try refreshing the page." })
|
|
13408
13463
|
] }) });
|
|
13409
13464
|
}
|
|
13410
13465
|
const tabs = [
|
|
13411
13466
|
{
|
|
13412
13467
|
label: t(`notification.inbox`),
|
|
13413
|
-
content: /* @__PURE__ */
|
|
13468
|
+
content: /* @__PURE__ */ jsx154(NotificationsList, { archived: false })
|
|
13414
13469
|
},
|
|
13415
13470
|
{
|
|
13416
13471
|
label: t(`notification.archived`),
|
|
13417
|
-
content: /* @__PURE__ */
|
|
13472
|
+
content: /* @__PURE__ */ jsx154(NotificationsList, { archived: true })
|
|
13418
13473
|
}
|
|
13419
13474
|
];
|
|
13420
|
-
return /* @__PURE__ */
|
|
13475
|
+
return /* @__PURE__ */ jsx154(TabsContainer, { tabs });
|
|
13421
13476
|
}
|
|
13422
13477
|
__name(NotificationsListContainerContent, "NotificationsListContainerContent");
|
|
13423
13478
|
function NotificationsListContainer() {
|
|
13424
|
-
return /* @__PURE__ */
|
|
13479
|
+
return /* @__PURE__ */ jsx154(NotificationErrorBoundary, { children: /* @__PURE__ */ jsx154(NotificationsListContainerContent, {}) });
|
|
13425
13480
|
}
|
|
13426
13481
|
__name(NotificationsListContainer, "NotificationsListContainer");
|
|
13427
13482
|
|
|
@@ -13429,7 +13484,7 @@ __name(NotificationsListContainer, "NotificationsListContainer");
|
|
|
13429
13484
|
import { BellIcon } from "lucide-react";
|
|
13430
13485
|
import { useTranslations as useTranslations60 } from "next-intl";
|
|
13431
13486
|
import { Fragment as Fragment29, useCallback as useCallback21, useEffect as useEffect45, useMemo as useMemo21, useRef as useRef18, useState as useState52 } from "react";
|
|
13432
|
-
import { jsx as
|
|
13487
|
+
import { jsx as jsx155, jsxs as jsxs92 } from "react/jsx-runtime";
|
|
13433
13488
|
function NotificationModalContent({ isOpen, setIsOpen }) {
|
|
13434
13489
|
const instanceId = useRef18(Math.random().toString(36).substr(2, 9));
|
|
13435
13490
|
const {
|
|
@@ -13559,9 +13614,9 @@ function NotificationModalContent({ isOpen, setIsOpen }) {
|
|
|
13559
13614
|
}
|
|
13560
13615
|
}, "handleOpenChange");
|
|
13561
13616
|
const unreadNotifications = newNotifications && unreadCount > 0;
|
|
13562
|
-
return /* @__PURE__ */
|
|
13563
|
-
/* @__PURE__ */
|
|
13564
|
-
/* @__PURE__ */
|
|
13617
|
+
return /* @__PURE__ */ jsxs92(Popover, { open: isOpen, onOpenChange: handleOpenChange, "data-testid": `sidebar-notification button`, children: [
|
|
13618
|
+
/* @__PURE__ */ jsx155(PopoverTrigger, { children: /* @__PURE__ */ jsxs92(SidebarMenuButton, { render: /* @__PURE__ */ jsx155("div", {}), className: "text-muted-foreground h-6", disabled: isLoading, children: [
|
|
13619
|
+
/* @__PURE__ */ jsx155(
|
|
13565
13620
|
BellIcon,
|
|
13566
13621
|
{
|
|
13567
13622
|
className: `h-5 w-5 cursor-pointer ${unreadNotifications ? "text-destructive" : ""} ${isLoading ? "animate-pulse" : ""}`
|
|
@@ -13569,67 +13624,67 @@ function NotificationModalContent({ isOpen, setIsOpen }) {
|
|
|
13569
13624
|
),
|
|
13570
13625
|
t(`entities.notifications`, { count: 2 })
|
|
13571
13626
|
] }) }),
|
|
13572
|
-
/* @__PURE__ */
|
|
13573
|
-
/* @__PURE__ */
|
|
13574
|
-
/* @__PURE__ */
|
|
13575
|
-
isLoading && /* @__PURE__ */
|
|
13576
|
-
error && /* @__PURE__ */
|
|
13627
|
+
/* @__PURE__ */ jsx155(PopoverContent, { className: "relative left-10 w-80 border-0 p-0 shadow-none", children: /* @__PURE__ */ jsxs92(Card, { children: [
|
|
13628
|
+
/* @__PURE__ */ jsxs92(CardHeader, { className: "p-4", children: [
|
|
13629
|
+
/* @__PURE__ */ jsx155(CardTitle, { children: t(`entities.notifications`, { count: 2 }) }),
|
|
13630
|
+
isLoading && /* @__PURE__ */ jsx155("div", { className: "text-muted-foreground text-xs", children: "Loading..." }),
|
|
13631
|
+
error && /* @__PURE__ */ jsxs92("div", { className: "text-destructive text-xs", children: [
|
|
13577
13632
|
"Error: ",
|
|
13578
13633
|
error
|
|
13579
13634
|
] })
|
|
13580
13635
|
] }),
|
|
13581
|
-
/* @__PURE__ */
|
|
13582
|
-
/* @__PURE__ */
|
|
13636
|
+
/* @__PURE__ */ jsx155(Separator, {}),
|
|
13637
|
+
/* @__PURE__ */ jsx155(ScrollArea, { className: "h-96", children: notifications.length > 0 ? notifications.map((notification) => /* @__PURE__ */ jsx155(Fragment29, { children: generateNotification(notification, () => setIsOpen(false)) }, notification.id)) : /* @__PURE__ */ jsx155("div", { className: "p-4 text-center text-sm text-gray-500", children: t(`notification.empty`) }) })
|
|
13583
13638
|
] }) })
|
|
13584
13639
|
] });
|
|
13585
13640
|
}
|
|
13586
13641
|
__name(NotificationModalContent, "NotificationModalContent");
|
|
13587
13642
|
function NotificationModal(props) {
|
|
13588
|
-
return /* @__PURE__ */
|
|
13643
|
+
return /* @__PURE__ */ jsx155(NotificationErrorBoundary, { children: /* @__PURE__ */ jsx155(NotificationModalContent, { ...props }) });
|
|
13589
13644
|
}
|
|
13590
13645
|
__name(NotificationModal, "NotificationModal");
|
|
13591
13646
|
|
|
13592
13647
|
// src/features/notification/components/notifications/PushNotificationProvider.tsx
|
|
13593
|
-
import { Fragment as Fragment30, jsx as
|
|
13648
|
+
import { Fragment as Fragment30, jsx as jsx156 } from "react/jsx-runtime";
|
|
13594
13649
|
function PushNotificationProvider({ children }) {
|
|
13595
13650
|
usePushNotifications();
|
|
13596
|
-
return /* @__PURE__ */
|
|
13651
|
+
return /* @__PURE__ */ jsx156(Fragment30, { children });
|
|
13597
13652
|
}
|
|
13598
13653
|
__name(PushNotificationProvider, "PushNotificationProvider");
|
|
13599
13654
|
|
|
13600
13655
|
// src/features/role/components/details/RoleDetails.tsx
|
|
13601
13656
|
import { useTranslations as useTranslations61 } from "next-intl";
|
|
13602
|
-
import { jsx as
|
|
13657
|
+
import { jsx as jsx157 } from "react/jsx-runtime";
|
|
13603
13658
|
function RoleDetails() {
|
|
13604
13659
|
const { role } = useRoleContext();
|
|
13605
13660
|
const t = useTranslations61();
|
|
13606
13661
|
if (!role) return null;
|
|
13607
|
-
return /* @__PURE__ */
|
|
13662
|
+
return /* @__PURE__ */ jsx157(Card, { className: "w-full", children: /* @__PURE__ */ jsx157(CardContent, { className: "p-4", children: /* @__PURE__ */ jsx157(AttributeElement, { title: t(`role.fields.description.label`), value: role.description }) }) });
|
|
13608
13663
|
}
|
|
13609
13664
|
__name(RoleDetails, "RoleDetails");
|
|
13610
13665
|
|
|
13611
13666
|
// src/features/role/components/containers/RoleContainer.tsx
|
|
13612
|
-
import { Fragment as Fragment31, jsx as
|
|
13667
|
+
import { Fragment as Fragment31, jsx as jsx158, jsxs as jsxs93 } from "react/jsx-runtime";
|
|
13613
13668
|
function RoleContainer() {
|
|
13614
13669
|
const { role } = useRoleContext();
|
|
13615
13670
|
if (!role) return null;
|
|
13616
|
-
return /* @__PURE__ */
|
|
13617
|
-
/* @__PURE__ */
|
|
13618
|
-
/* @__PURE__ */
|
|
13671
|
+
return /* @__PURE__ */ jsxs93(Fragment31, { children: [
|
|
13672
|
+
/* @__PURE__ */ jsx158(RoleDetails, {}),
|
|
13673
|
+
/* @__PURE__ */ jsx158(RoleUsersList, { role })
|
|
13619
13674
|
] });
|
|
13620
13675
|
}
|
|
13621
13676
|
__name(RoleContainer, "RoleContainer");
|
|
13622
13677
|
|
|
13623
13678
|
// src/features/role/components/forms/FormRoles.tsx
|
|
13624
13679
|
import { useTranslations as useTranslations62 } from "next-intl";
|
|
13625
|
-
import { jsx as
|
|
13680
|
+
import { jsx as jsx159, jsxs as jsxs94 } from "react/jsx-runtime";
|
|
13626
13681
|
function FormRoles({ form, id, name, roles }) {
|
|
13627
13682
|
const t = useTranslations62();
|
|
13628
13683
|
const { hasAccesToFeature } = useCurrentUserContext();
|
|
13629
|
-
return /* @__PURE__ */
|
|
13684
|
+
return /* @__PURE__ */ jsx159("div", { className: "flex w-full flex-col", children: /* @__PURE__ */ jsx159(FormFieldWrapper, { form, name: id, label: name, children: (field) => /* @__PURE__ */ jsx159("div", { children: roles.filter((role) => role.isSelectable).sort((a, b) => a.name.localeCompare(b.name)).map((role) => {
|
|
13630
13685
|
if (role.requiredFeature && !hasAccesToFeature(role.requiredFeature.id)) return null;
|
|
13631
|
-
return /* @__PURE__ */
|
|
13632
|
-
/* @__PURE__ */
|
|
13686
|
+
return /* @__PURE__ */ jsxs94("div", { children: [
|
|
13687
|
+
/* @__PURE__ */ jsx159(
|
|
13633
13688
|
Checkbox,
|
|
13634
13689
|
{
|
|
13635
13690
|
defaultChecked: field.value.some((roleId) => roleId === role.id),
|
|
@@ -13645,9 +13700,9 @@ function FormRoles({ form, id, name, roles }) {
|
|
|
13645
13700
|
}
|
|
13646
13701
|
}
|
|
13647
13702
|
),
|
|
13648
|
-
/* @__PURE__ */
|
|
13649
|
-
/* @__PURE__ */
|
|
13650
|
-
/* @__PURE__ */
|
|
13703
|
+
/* @__PURE__ */ jsxs94(Tooltip2, { children: [
|
|
13704
|
+
/* @__PURE__ */ jsx159(TooltipTrigger, { children: /* @__PURE__ */ jsx159(FieldLabel, { className: "ml-3 font-normal", children: t(`role.roles`, { role: role.id.replaceAll(`-`, ``) }) }) }),
|
|
13705
|
+
/* @__PURE__ */ jsx159(TooltipContent, { children: t(`role.roles_descriptions`, { role: role.id.replaceAll(`-`, ``) }) })
|
|
13651
13706
|
] })
|
|
13652
13707
|
] }, role.id);
|
|
13653
13708
|
}) }) }) });
|
|
@@ -13657,7 +13712,7 @@ __name(FormRoles, "FormRoles");
|
|
|
13657
13712
|
// src/features/role/components/forms/RemoveUserFromRole.tsx
|
|
13658
13713
|
import { useTranslations as useTranslations63 } from "next-intl";
|
|
13659
13714
|
import { useEffect as useEffect46, useState as useState53 } from "react";
|
|
13660
|
-
import { Fragment as Fragment32, jsx as
|
|
13715
|
+
import { Fragment as Fragment32, jsx as jsx160, jsxs as jsxs95 } from "react/jsx-runtime";
|
|
13661
13716
|
function RemoveUserFromRole({ role, user, refresh }) {
|
|
13662
13717
|
const [open, setOpen] = useState53(false);
|
|
13663
13718
|
const [canRemove, setCanRemove] = useState53(false);
|
|
@@ -13689,8 +13744,8 @@ function RemoveUserFromRole({ role, user, refresh }) {
|
|
|
13689
13744
|
}
|
|
13690
13745
|
}, "remove");
|
|
13691
13746
|
const roleName = t(`role.roles`, { role: role.id.replaceAll(`-`, ``) });
|
|
13692
|
-
return /* @__PURE__ */
|
|
13693
|
-
/* @__PURE__ */
|
|
13747
|
+
return /* @__PURE__ */ jsxs95(Dialog, { open, onOpenChange: setOpen, children: [
|
|
13748
|
+
/* @__PURE__ */ jsx160(
|
|
13694
13749
|
DialogTrigger,
|
|
13695
13750
|
{
|
|
13696
13751
|
onClick: (e) => {
|
|
@@ -13698,19 +13753,19 @@ function RemoveUserFromRole({ role, user, refresh }) {
|
|
|
13698
13753
|
e.preventDefault();
|
|
13699
13754
|
setOpen(true);
|
|
13700
13755
|
},
|
|
13701
|
-
children: /* @__PURE__ */
|
|
13756
|
+
children: /* @__PURE__ */ jsx160("span", { className: "hover:text-destructive cursor-pointer", children: t(`role.remove_user.title`) })
|
|
13702
13757
|
}
|
|
13703
13758
|
),
|
|
13704
|
-
/* @__PURE__ */
|
|
13705
|
-
/* @__PURE__ */
|
|
13706
|
-
/* @__PURE__ */
|
|
13707
|
-
/* @__PURE__ */
|
|
13759
|
+
/* @__PURE__ */ jsxs95(DialogContent, { className: `flex max-h-[70vh] max-w-3xl flex-col overflow-y-auto`, children: [
|
|
13760
|
+
/* @__PURE__ */ jsxs95(DialogHeader, { children: [
|
|
13761
|
+
/* @__PURE__ */ jsx160(DialogTitle, { children: t(`role.remove_user.title`) }),
|
|
13762
|
+
/* @__PURE__ */ jsx160(DialogDescription, { children: canRemove ? t(`role.remove_user.subtitle_allowed`) : t(`role.remove_user.subtitle_not_allowed`) })
|
|
13708
13763
|
] }),
|
|
13709
|
-
canRemove ? /* @__PURE__ */
|
|
13764
|
+
canRemove ? /* @__PURE__ */ jsxs95(Fragment32, { children: [
|
|
13710
13765
|
t(`role.remove_user.description_allowed`, { role: roleName, user: user.name }),
|
|
13711
|
-
/* @__PURE__ */
|
|
13712
|
-
/* @__PURE__ */
|
|
13713
|
-
/* @__PURE__ */
|
|
13766
|
+
/* @__PURE__ */ jsxs95("div", { className: "flex justify-end", children: [
|
|
13767
|
+
/* @__PURE__ */ jsx160(Button, { className: "mr-2", variant: "outline", type: `button`, onClick: () => setOpen(false), children: t(`ui.buttons.cancel`) }),
|
|
13768
|
+
/* @__PURE__ */ jsx160(
|
|
13714
13769
|
Button,
|
|
13715
13770
|
{
|
|
13716
13771
|
type: "submit",
|
|
@@ -13723,7 +13778,7 @@ function RemoveUserFromRole({ role, user, refresh }) {
|
|
|
13723
13778
|
}
|
|
13724
13779
|
)
|
|
13725
13780
|
] })
|
|
13726
|
-
] }) : /* @__PURE__ */
|
|
13781
|
+
] }) : /* @__PURE__ */ jsx160(Fragment32, { children: t(`role.remove_user.description_not_allowed`, { role: roleName, user: user.name }) })
|
|
13727
13782
|
] })
|
|
13728
13783
|
] });
|
|
13729
13784
|
}
|
|
@@ -13733,7 +13788,7 @@ __name(RemoveUserFromRole, "RemoveUserFromRole");
|
|
|
13733
13788
|
import { PlusCircle as PlusCircle2 } from "lucide-react";
|
|
13734
13789
|
import { useTranslations as useTranslations64 } from "next-intl";
|
|
13735
13790
|
import { useCallback as useCallback22, useEffect as useEffect47, useRef as useRef19, useState as useState54 } from "react";
|
|
13736
|
-
import { Fragment as Fragment33, jsx as
|
|
13791
|
+
import { Fragment as Fragment33, jsx as jsx161, jsxs as jsxs96 } from "react/jsx-runtime";
|
|
13737
13792
|
function UserRoleAdd({ user, refresh }) {
|
|
13738
13793
|
const [open, setOpen] = useState54(false);
|
|
13739
13794
|
const inputRef = useRef19(null);
|
|
@@ -13780,26 +13835,26 @@ function UserRoleAdd({ user, refresh }) {
|
|
|
13780
13835
|
useEffect47(() => {
|
|
13781
13836
|
if (open) searchRoles("");
|
|
13782
13837
|
}, [open]);
|
|
13783
|
-
return /* @__PURE__ */
|
|
13784
|
-
/* @__PURE__ */
|
|
13785
|
-
/* @__PURE__ */
|
|
13838
|
+
return /* @__PURE__ */ jsxs96(Fragment33, { children: [
|
|
13839
|
+
/* @__PURE__ */ jsxs96(Button, { size: "sm", onClick: () => setOpen(true), children: [
|
|
13840
|
+
/* @__PURE__ */ jsx161(PlusCircle2, { className: "mr-3 h-3.5 w-3.5" }),
|
|
13786
13841
|
t(`common.association.label`, {
|
|
13787
13842
|
source: t(`entities.roles`, { count: 1 }),
|
|
13788
13843
|
destination: t(`entities.users`, { count: 1 })
|
|
13789
13844
|
})
|
|
13790
13845
|
] }),
|
|
13791
|
-
/* @__PURE__ */
|
|
13792
|
-
/* @__PURE__ */
|
|
13846
|
+
/* @__PURE__ */ jsxs96(CommandDialog, { open, onOpenChange: setOpen, children: [
|
|
13847
|
+
/* @__PURE__ */ jsx161(DialogTitle, { children: t(`common.association.label`, {
|
|
13793
13848
|
source: t(`entities.roles`, { count: 1 }),
|
|
13794
13849
|
destination: t(`entities.users`, { count: 1 })
|
|
13795
13850
|
}) }),
|
|
13796
|
-
/* @__PURE__ */
|
|
13851
|
+
/* @__PURE__ */ jsx161(DialogDescription, { children: t(`common.association.description`, {
|
|
13797
13852
|
source: t(`entities.roles`, { count: 1 }),
|
|
13798
13853
|
destination: t(`entities.users`, { count: 1 }),
|
|
13799
13854
|
destination_name: user.name
|
|
13800
13855
|
}) }),
|
|
13801
|
-
/* @__PURE__ */
|
|
13802
|
-
/* @__PURE__ */
|
|
13856
|
+
/* @__PURE__ */ jsxs96(Command, { shouldFilter: false, children: [
|
|
13857
|
+
/* @__PURE__ */ jsx161(
|
|
13803
13858
|
CommandInput,
|
|
13804
13859
|
{
|
|
13805
13860
|
placeholder: t(`ui.search.placeholder`, { type: t(`entities.roles`, { count: 1 }) }),
|
|
@@ -13808,9 +13863,9 @@ function UserRoleAdd({ user, refresh }) {
|
|
|
13808
13863
|
ref: inputRef
|
|
13809
13864
|
}
|
|
13810
13865
|
),
|
|
13811
|
-
/* @__PURE__ */
|
|
13812
|
-
/* @__PURE__ */
|
|
13813
|
-
roles.map((role) => /* @__PURE__ */
|
|
13866
|
+
/* @__PURE__ */ jsxs96(CommandList, { className: "mt-3 h-auto max-h-96 min-h-96 max-w-full overflow-x-hidden overflow-y-auto", children: [
|
|
13867
|
+
/* @__PURE__ */ jsx161(CommandEmpty, { children: t(`ui.search.no_results`, { type: t(`entities.roles`, { count: 1 }) }) }),
|
|
13868
|
+
roles.map((role) => /* @__PURE__ */ jsx161(
|
|
13814
13869
|
CommandItem,
|
|
13815
13870
|
{
|
|
13816
13871
|
className: "cursor-pointer hover:bg-muted data-selected:hover:bg-muted bg-transparent data-selected:bg-transparent",
|
|
@@ -13829,7 +13884,7 @@ __name(UserRoleAdd, "UserRoleAdd");
|
|
|
13829
13884
|
|
|
13830
13885
|
// src/features/role/components/lists/RolesList.tsx
|
|
13831
13886
|
import { useTranslations as useTranslations65 } from "next-intl";
|
|
13832
|
-
import { jsx as
|
|
13887
|
+
import { jsx as jsx162 } from "react/jsx-runtime";
|
|
13833
13888
|
function RolesList() {
|
|
13834
13889
|
const t = useTranslations65();
|
|
13835
13890
|
const data = useDataListRetriever({
|
|
@@ -13837,7 +13892,7 @@ function RolesList() {
|
|
|
13837
13892
|
retrieverParams: {},
|
|
13838
13893
|
module: Modules.Role
|
|
13839
13894
|
});
|
|
13840
|
-
return /* @__PURE__ */
|
|
13895
|
+
return /* @__PURE__ */ jsx162(
|
|
13841
13896
|
ContentListTable,
|
|
13842
13897
|
{
|
|
13843
13898
|
data,
|
|
@@ -13851,7 +13906,7 @@ __name(RolesList, "RolesList");
|
|
|
13851
13906
|
|
|
13852
13907
|
// src/features/role/components/lists/UserRolesList.tsx
|
|
13853
13908
|
import { useTranslations as useTranslations66 } from "next-intl";
|
|
13854
|
-
import { jsx as
|
|
13909
|
+
import { jsx as jsx163 } from "react/jsx-runtime";
|
|
13855
13910
|
function UserRolesList({ user }) {
|
|
13856
13911
|
const t = useTranslations66();
|
|
13857
13912
|
const data = useDataListRetriever({
|
|
@@ -13859,7 +13914,7 @@ function UserRolesList({ user }) {
|
|
|
13859
13914
|
retrieverParams: { userId: user.id },
|
|
13860
13915
|
module: Modules.Role
|
|
13861
13916
|
});
|
|
13862
|
-
return /* @__PURE__ */
|
|
13917
|
+
return /* @__PURE__ */ jsx163(
|
|
13863
13918
|
ContentListTable,
|
|
13864
13919
|
{
|
|
13865
13920
|
data,
|
|
@@ -13874,7 +13929,7 @@ __name(UserRolesList, "UserRolesList");
|
|
|
13874
13929
|
// src/features/oauth/components/OAuthRedirectUriInput.tsx
|
|
13875
13930
|
import { useCallback as useCallback23 } from "react";
|
|
13876
13931
|
import { Plus, Trash2 } from "lucide-react";
|
|
13877
|
-
import { jsx as
|
|
13932
|
+
import { jsx as jsx164, jsxs as jsxs97 } from "react/jsx-runtime";
|
|
13878
13933
|
function isValidRedirectUri(uri) {
|
|
13879
13934
|
if (!uri.trim()) return false;
|
|
13880
13935
|
if (uri.startsWith("http://localhost") || uri.startsWith("http://127.0.0.1")) {
|
|
@@ -13920,17 +13975,17 @@ function OAuthRedirectUriInput({
|
|
|
13920
13975
|
},
|
|
13921
13976
|
[value, onChange]
|
|
13922
13977
|
);
|
|
13923
|
-
return /* @__PURE__ */
|
|
13924
|
-
/* @__PURE__ */
|
|
13978
|
+
return /* @__PURE__ */ jsxs97("div", { className: "space-y-2", children: [
|
|
13979
|
+
/* @__PURE__ */ jsxs97(Label, { children: [
|
|
13925
13980
|
label,
|
|
13926
13981
|
" *"
|
|
13927
13982
|
] }),
|
|
13928
|
-
/* @__PURE__ */
|
|
13929
|
-
/* @__PURE__ */
|
|
13983
|
+
/* @__PURE__ */ jsx164("p", { className: "text-sm text-muted-foreground", children: "Enter the URIs where users will be redirected after authorization. Use https:// for production, or custom schemes for mobile apps." }),
|
|
13984
|
+
/* @__PURE__ */ jsx164("div", { className: "space-y-2", children: value.map((uri, index) => {
|
|
13930
13985
|
const isValid3 = !uri || isValidRedirectUri(uri);
|
|
13931
|
-
return /* @__PURE__ */
|
|
13932
|
-
/* @__PURE__ */
|
|
13933
|
-
/* @__PURE__ */
|
|
13986
|
+
return /* @__PURE__ */ jsxs97("div", { className: "flex gap-2", children: [
|
|
13987
|
+
/* @__PURE__ */ jsxs97("div", { className: "flex-1", children: [
|
|
13988
|
+
/* @__PURE__ */ jsx164(
|
|
13934
13989
|
Input,
|
|
13935
13990
|
{
|
|
13936
13991
|
value: uri,
|
|
@@ -13940,9 +13995,9 @@ function OAuthRedirectUriInput({
|
|
|
13940
13995
|
className: !isValid3 ? "border-destructive" : ""
|
|
13941
13996
|
}
|
|
13942
13997
|
),
|
|
13943
|
-
!isValid3 && /* @__PURE__ */
|
|
13998
|
+
!isValid3 && /* @__PURE__ */ jsx164("p", { className: "text-xs text-destructive mt-1", children: "Must be https://, http://localhost, or a custom scheme (app://)" })
|
|
13944
13999
|
] }),
|
|
13945
|
-
/* @__PURE__ */
|
|
14000
|
+
/* @__PURE__ */ jsx164(
|
|
13946
14001
|
Button,
|
|
13947
14002
|
{
|
|
13948
14003
|
type: "button",
|
|
@@ -13951,12 +14006,12 @@ function OAuthRedirectUriInput({
|
|
|
13951
14006
|
onClick: () => handleRemove(index),
|
|
13952
14007
|
disabled: disabled || value.length === 1,
|
|
13953
14008
|
title: "Remove URI",
|
|
13954
|
-
children: /* @__PURE__ */
|
|
14009
|
+
children: /* @__PURE__ */ jsx164(Trash2, { className: "h-4 w-4" })
|
|
13955
14010
|
}
|
|
13956
14011
|
)
|
|
13957
14012
|
] }, index);
|
|
13958
14013
|
}) }),
|
|
13959
|
-
/* @__PURE__ */
|
|
14014
|
+
/* @__PURE__ */ jsxs97(
|
|
13960
14015
|
Button,
|
|
13961
14016
|
{
|
|
13962
14017
|
type: "button",
|
|
@@ -13966,19 +14021,19 @@ function OAuthRedirectUriInput({
|
|
|
13966
14021
|
disabled,
|
|
13967
14022
|
className: "mt-2",
|
|
13968
14023
|
children: [
|
|
13969
|
-
/* @__PURE__ */
|
|
14024
|
+
/* @__PURE__ */ jsx164(Plus, { className: "h-4 w-4 mr-2" }),
|
|
13970
14025
|
"Add Redirect URI"
|
|
13971
14026
|
]
|
|
13972
14027
|
}
|
|
13973
14028
|
),
|
|
13974
|
-
error && /* @__PURE__ */
|
|
14029
|
+
error && /* @__PURE__ */ jsx164("p", { className: "text-sm text-destructive", children: error })
|
|
13975
14030
|
] });
|
|
13976
14031
|
}
|
|
13977
14032
|
__name(OAuthRedirectUriInput, "OAuthRedirectUriInput");
|
|
13978
14033
|
|
|
13979
14034
|
// src/features/oauth/components/OAuthScopeSelector.tsx
|
|
13980
14035
|
import { useCallback as useCallback24 } from "react";
|
|
13981
|
-
import { jsx as
|
|
14036
|
+
import { jsx as jsx165, jsxs as jsxs98 } from "react/jsx-runtime";
|
|
13982
14037
|
function OAuthScopeSelector({
|
|
13983
14038
|
value,
|
|
13984
14039
|
onChange,
|
|
@@ -14006,25 +14061,25 @@ function OAuthScopeSelector({
|
|
|
14006
14061
|
acc[groupName].push(scope);
|
|
14007
14062
|
return acc;
|
|
14008
14063
|
}, {});
|
|
14009
|
-
return /* @__PURE__ */
|
|
14010
|
-
/* @__PURE__ */
|
|
14011
|
-
/* @__PURE__ */
|
|
14064
|
+
return /* @__PURE__ */ jsxs98("div", { className: "space-y-4", children: [
|
|
14065
|
+
/* @__PURE__ */ jsxs98("div", { children: [
|
|
14066
|
+
/* @__PURE__ */ jsxs98(Label, { children: [
|
|
14012
14067
|
label,
|
|
14013
14068
|
" *"
|
|
14014
14069
|
] }),
|
|
14015
|
-
/* @__PURE__ */
|
|
14070
|
+
/* @__PURE__ */ jsx165("p", { className: "text-sm text-muted-foreground", children: "Select the permissions your application needs." })
|
|
14016
14071
|
] }),
|
|
14017
|
-
/* @__PURE__ */
|
|
14018
|
-
/* @__PURE__ */
|
|
14019
|
-
/* @__PURE__ */
|
|
14072
|
+
/* @__PURE__ */ jsx165("div", { className: "space-y-4", children: Object.entries(groupedScopes).map(([groupName, scopes]) => /* @__PURE__ */ jsxs98("div", { className: "space-y-2", children: [
|
|
14073
|
+
/* @__PURE__ */ jsx165("h4", { className: "text-sm font-medium capitalize", children: groupName }),
|
|
14074
|
+
/* @__PURE__ */ jsx165("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-2 pl-2", children: scopes.map((scopeInfo) => {
|
|
14020
14075
|
const isChecked = value.includes(scopeInfo.scope);
|
|
14021
14076
|
const isAdmin = scopeInfo.scope === "admin";
|
|
14022
|
-
return /* @__PURE__ */
|
|
14077
|
+
return /* @__PURE__ */ jsxs98(
|
|
14023
14078
|
"div",
|
|
14024
14079
|
{
|
|
14025
14080
|
className: `flex items-start space-x-3 p-2 rounded-md border ${isChecked ? "bg-primary/5 border-primary/20" : "border-transparent"} ${isAdmin ? "bg-destructive/5" : ""}`,
|
|
14026
14081
|
children: [
|
|
14027
|
-
/* @__PURE__ */
|
|
14082
|
+
/* @__PURE__ */ jsx165(
|
|
14028
14083
|
Checkbox,
|
|
14029
14084
|
{
|
|
14030
14085
|
id: `scope-${scopeInfo.scope}`,
|
|
@@ -14033,19 +14088,19 @@ function OAuthScopeSelector({
|
|
|
14033
14088
|
disabled
|
|
14034
14089
|
}
|
|
14035
14090
|
),
|
|
14036
|
-
/* @__PURE__ */
|
|
14037
|
-
/* @__PURE__ */
|
|
14091
|
+
/* @__PURE__ */ jsxs98("div", { className: "flex-1", children: [
|
|
14092
|
+
/* @__PURE__ */ jsxs98(
|
|
14038
14093
|
Label,
|
|
14039
14094
|
{
|
|
14040
14095
|
htmlFor: `scope-${scopeInfo.scope}`,
|
|
14041
14096
|
className: "text-sm font-medium cursor-pointer",
|
|
14042
14097
|
children: [
|
|
14043
14098
|
scopeInfo.name,
|
|
14044
|
-
isAdmin && /* @__PURE__ */
|
|
14099
|
+
isAdmin && /* @__PURE__ */ jsx165("span", { className: "ml-2 text-xs text-destructive", children: "(Dangerous)" })
|
|
14045
14100
|
]
|
|
14046
14101
|
}
|
|
14047
14102
|
),
|
|
14048
|
-
/* @__PURE__ */
|
|
14103
|
+
/* @__PURE__ */ jsx165("p", { className: "text-xs text-muted-foreground", children: scopeInfo.description })
|
|
14049
14104
|
] })
|
|
14050
14105
|
]
|
|
14051
14106
|
},
|
|
@@ -14053,7 +14108,7 @@ function OAuthScopeSelector({
|
|
|
14053
14108
|
);
|
|
14054
14109
|
}) })
|
|
14055
14110
|
] }, groupName)) }),
|
|
14056
|
-
error && /* @__PURE__ */
|
|
14111
|
+
error && /* @__PURE__ */ jsx165("p", { className: "text-sm text-destructive", children: error })
|
|
14057
14112
|
] });
|
|
14058
14113
|
}
|
|
14059
14114
|
__name(OAuthScopeSelector, "OAuthScopeSelector");
|
|
@@ -14061,7 +14116,7 @@ __name(OAuthScopeSelector, "OAuthScopeSelector");
|
|
|
14061
14116
|
// src/features/oauth/components/OAuthClientSecretDisplay.tsx
|
|
14062
14117
|
import { useState as useState55, useCallback as useCallback25 } from "react";
|
|
14063
14118
|
import { Copy, Check, AlertTriangle } from "lucide-react";
|
|
14064
|
-
import { jsx as
|
|
14119
|
+
import { jsx as jsx166, jsxs as jsxs99 } from "react/jsx-runtime";
|
|
14065
14120
|
function OAuthClientSecretDisplay({
|
|
14066
14121
|
secret,
|
|
14067
14122
|
onDismiss,
|
|
@@ -14082,24 +14137,24 @@ function OAuthClientSecretDisplay({
|
|
|
14082
14137
|
setCopied(false);
|
|
14083
14138
|
onDismiss();
|
|
14084
14139
|
}, [onDismiss]);
|
|
14085
|
-
return /* @__PURE__ */
|
|
14086
|
-
/* @__PURE__ */
|
|
14087
|
-
/* @__PURE__ */
|
|
14088
|
-
/* @__PURE__ */
|
|
14140
|
+
return /* @__PURE__ */ jsx166(Dialog, { open, onOpenChange: (isOpen) => !isOpen && handleDismiss(), children: /* @__PURE__ */ jsxs99(DialogContent, { className: "sm:max-w-md", children: [
|
|
14141
|
+
/* @__PURE__ */ jsxs99(DialogHeader, { children: [
|
|
14142
|
+
/* @__PURE__ */ jsxs99(DialogTitle, { className: "flex items-center gap-2", children: [
|
|
14143
|
+
/* @__PURE__ */ jsx166(AlertTriangle, { className: "h-5 w-5 text-warning" }),
|
|
14089
14144
|
"Save Your Client Secret"
|
|
14090
14145
|
] }),
|
|
14091
|
-
/* @__PURE__ */
|
|
14146
|
+
/* @__PURE__ */ jsx166(DialogDescription, { children: clientName ? `Your client secret for "${clientName}" is shown below.` : "Your client secret is shown below." })
|
|
14092
14147
|
] }),
|
|
14093
|
-
/* @__PURE__ */
|
|
14094
|
-
/* @__PURE__ */
|
|
14095
|
-
/* @__PURE__ */
|
|
14096
|
-
/* @__PURE__ */
|
|
14097
|
-
/* @__PURE__ */
|
|
14148
|
+
/* @__PURE__ */ jsxs99(Alert, { variant: "destructive", className: "my-4", children: [
|
|
14149
|
+
/* @__PURE__ */ jsx166(AlertTriangle, { className: "h-4 w-4" }),
|
|
14150
|
+
/* @__PURE__ */ jsxs99(AlertDescription, { children: [
|
|
14151
|
+
/* @__PURE__ */ jsx166("strong", { children: "This is the only time your client secret will be displayed." }),
|
|
14152
|
+
/* @__PURE__ */ jsx166("br", {}),
|
|
14098
14153
|
"Copy it now and store it securely. You will not be able to retrieve it later."
|
|
14099
14154
|
] })
|
|
14100
14155
|
] }),
|
|
14101
|
-
/* @__PURE__ */
|
|
14102
|
-
/* @__PURE__ */
|
|
14156
|
+
/* @__PURE__ */ jsxs99("div", { className: "flex items-center space-x-2", children: [
|
|
14157
|
+
/* @__PURE__ */ jsx166("div", { className: "flex-1", children: /* @__PURE__ */ jsx166(
|
|
14103
14158
|
Input,
|
|
14104
14159
|
{
|
|
14105
14160
|
value: secret,
|
|
@@ -14108,7 +14163,7 @@ function OAuthClientSecretDisplay({
|
|
|
14108
14163
|
onClick: (e) => e.currentTarget.select()
|
|
14109
14164
|
}
|
|
14110
14165
|
) }),
|
|
14111
|
-
/* @__PURE__ */
|
|
14166
|
+
/* @__PURE__ */ jsx166(
|
|
14112
14167
|
Button,
|
|
14113
14168
|
{
|
|
14114
14169
|
type: "button",
|
|
@@ -14116,12 +14171,12 @@ function OAuthClientSecretDisplay({
|
|
|
14116
14171
|
size: "icon",
|
|
14117
14172
|
onClick: handleCopy,
|
|
14118
14173
|
title: copied ? "Copied!" : "Copy to clipboard",
|
|
14119
|
-
children: copied ? /* @__PURE__ */
|
|
14174
|
+
children: copied ? /* @__PURE__ */ jsx166(Check, { className: "h-4 w-4 text-green-600" }) : /* @__PURE__ */ jsx166(Copy, { className: "h-4 w-4" })
|
|
14120
14175
|
}
|
|
14121
14176
|
)
|
|
14122
14177
|
] }),
|
|
14123
|
-
copied && /* @__PURE__ */
|
|
14124
|
-
/* @__PURE__ */
|
|
14178
|
+
copied && /* @__PURE__ */ jsx166("p", { className: "text-sm text-green-600 text-center", children: "Copied to clipboard!" }),
|
|
14179
|
+
/* @__PURE__ */ jsx166(DialogFooter, { className: "mt-4", children: /* @__PURE__ */ jsx166(Button, { onClick: handleDismiss, className: "w-full", children: "I've Saved My Secret" }) })
|
|
14125
14180
|
] }) });
|
|
14126
14181
|
}
|
|
14127
14182
|
__name(OAuthClientSecretDisplay, "OAuthClientSecretDisplay");
|
|
@@ -14129,7 +14184,7 @@ __name(OAuthClientSecretDisplay, "OAuthClientSecretDisplay");
|
|
|
14129
14184
|
// src/features/oauth/components/OAuthClientCard.tsx
|
|
14130
14185
|
import { formatDistanceToNow } from "date-fns";
|
|
14131
14186
|
import { Key, MoreVertical, Pencil, Trash2 as Trash22 } from "lucide-react";
|
|
14132
|
-
import { jsx as
|
|
14187
|
+
import { jsx as jsx167, jsxs as jsxs100 } from "react/jsx-runtime";
|
|
14133
14188
|
function OAuthClientCard({
|
|
14134
14189
|
client,
|
|
14135
14190
|
onClick,
|
|
@@ -14138,31 +14193,31 @@ function OAuthClientCard({
|
|
|
14138
14193
|
}) {
|
|
14139
14194
|
const truncatedId = client.clientId.length > 12 ? `${client.clientId.slice(0, 8)}...${client.clientId.slice(-4)}` : client.clientId;
|
|
14140
14195
|
const createdAgo = client.createdAt ? formatDistanceToNow(new Date(client.createdAt), { addSuffix: true }) : "Unknown";
|
|
14141
|
-
return /* @__PURE__ */
|
|
14196
|
+
return /* @__PURE__ */ jsxs100(
|
|
14142
14197
|
Card,
|
|
14143
14198
|
{
|
|
14144
14199
|
className: `cursor-pointer transition-colors hover:bg-accent/50 ${!client.isActive ? "opacity-60" : ""}`,
|
|
14145
14200
|
onClick,
|
|
14146
14201
|
children: [
|
|
14147
|
-
/* @__PURE__ */
|
|
14148
|
-
/* @__PURE__ */
|
|
14149
|
-
/* @__PURE__ */
|
|
14150
|
-
/* @__PURE__ */
|
|
14151
|
-
/* @__PURE__ */
|
|
14202
|
+
/* @__PURE__ */ jsxs100(CardHeader, { className: "pb-2", children: [
|
|
14203
|
+
/* @__PURE__ */ jsxs100("div", { className: "flex items-start justify-between", children: [
|
|
14204
|
+
/* @__PURE__ */ jsxs100("div", { className: "flex items-center gap-2", children: [
|
|
14205
|
+
/* @__PURE__ */ jsx167(Key, { className: "h-5 w-5 text-muted-foreground" }),
|
|
14206
|
+
/* @__PURE__ */ jsx167(CardTitle, { className: "text-lg", children: client.name })
|
|
14152
14207
|
] }),
|
|
14153
|
-
/* @__PURE__ */
|
|
14154
|
-
/* @__PURE__ */
|
|
14155
|
-
(onEdit || onDelete) && /* @__PURE__ */
|
|
14156
|
-
/* @__PURE__ */
|
|
14157
|
-
/* @__PURE__ */
|
|
14158
|
-
onEdit && /* @__PURE__ */
|
|
14208
|
+
/* @__PURE__ */ jsxs100("div", { className: "flex items-center gap-2", children: [
|
|
14209
|
+
/* @__PURE__ */ jsx167(Badge, { variant: client.isActive ? "default" : "secondary", children: client.isActive ? "Active" : "Inactive" }),
|
|
14210
|
+
(onEdit || onDelete) && /* @__PURE__ */ jsxs100(DropdownMenu, { children: [
|
|
14211
|
+
/* @__PURE__ */ jsx167(DropdownMenuTrigger, { onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx167(Button, { render: /* @__PURE__ */ jsx167("div", {}), nativeButton: false, variant: "ghost", size: "icon", className: "h-8 w-8", children: /* @__PURE__ */ jsx167(MoreVertical, { className: "h-4 w-4" }) }) }),
|
|
14212
|
+
/* @__PURE__ */ jsxs100(DropdownMenuContent, { align: "end", children: [
|
|
14213
|
+
onEdit && /* @__PURE__ */ jsxs100(DropdownMenuItem, { onClick: (e) => {
|
|
14159
14214
|
e.stopPropagation();
|
|
14160
14215
|
onEdit();
|
|
14161
14216
|
}, children: [
|
|
14162
|
-
/* @__PURE__ */
|
|
14217
|
+
/* @__PURE__ */ jsx167(Pencil, { className: "h-4 w-4 mr-2" }),
|
|
14163
14218
|
"Edit"
|
|
14164
14219
|
] }),
|
|
14165
|
-
onDelete && /* @__PURE__ */
|
|
14220
|
+
onDelete && /* @__PURE__ */ jsxs100(
|
|
14166
14221
|
DropdownMenuItem,
|
|
14167
14222
|
{
|
|
14168
14223
|
onClick: (e) => {
|
|
@@ -14171,7 +14226,7 @@ function OAuthClientCard({
|
|
|
14171
14226
|
},
|
|
14172
14227
|
className: "text-destructive",
|
|
14173
14228
|
children: [
|
|
14174
|
-
/* @__PURE__ */
|
|
14229
|
+
/* @__PURE__ */ jsx167(Trash22, { className: "h-4 w-4 mr-2" }),
|
|
14175
14230
|
"Delete"
|
|
14176
14231
|
]
|
|
14177
14232
|
}
|
|
@@ -14180,15 +14235,15 @@ function OAuthClientCard({
|
|
|
14180
14235
|
] })
|
|
14181
14236
|
] })
|
|
14182
14237
|
] }),
|
|
14183
|
-
client.description && /* @__PURE__ */
|
|
14238
|
+
client.description && /* @__PURE__ */ jsx167(CardDescription, { className: "line-clamp-2", children: client.description })
|
|
14184
14239
|
] }),
|
|
14185
|
-
/* @__PURE__ */
|
|
14186
|
-
/* @__PURE__ */
|
|
14187
|
-
/* @__PURE__ */
|
|
14240
|
+
/* @__PURE__ */ jsx167(CardContent, { children: /* @__PURE__ */ jsxs100("div", { className: "flex flex-wrap gap-x-4 gap-y-1 text-sm text-muted-foreground", children: [
|
|
14241
|
+
/* @__PURE__ */ jsx167("span", { className: "font-mono", children: truncatedId }),
|
|
14242
|
+
/* @__PURE__ */ jsxs100("span", { children: [
|
|
14188
14243
|
"Created ",
|
|
14189
14244
|
createdAgo
|
|
14190
14245
|
] }),
|
|
14191
|
-
/* @__PURE__ */
|
|
14246
|
+
/* @__PURE__ */ jsx167("span", { children: client.isConfidential ? "Confidential" : "Public" })
|
|
14192
14247
|
] }) })
|
|
14193
14248
|
]
|
|
14194
14249
|
}
|
|
@@ -14198,7 +14253,7 @@ __name(OAuthClientCard, "OAuthClientCard");
|
|
|
14198
14253
|
|
|
14199
14254
|
// src/features/oauth/components/OAuthClientList.tsx
|
|
14200
14255
|
import { Plus as Plus2, Key as Key2 } from "lucide-react";
|
|
14201
|
-
import { jsx as
|
|
14256
|
+
import { jsx as jsx168, jsxs as jsxs101 } from "react/jsx-runtime";
|
|
14202
14257
|
function OAuthClientList({
|
|
14203
14258
|
clients,
|
|
14204
14259
|
isLoading = false,
|
|
@@ -14211,49 +14266,49 @@ function OAuthClientList({
|
|
|
14211
14266
|
title = "OAuth Applications"
|
|
14212
14267
|
}) {
|
|
14213
14268
|
if (isLoading && clients.length === 0) {
|
|
14214
|
-
return /* @__PURE__ */
|
|
14215
|
-
/* @__PURE__ */
|
|
14216
|
-
/* @__PURE__ */
|
|
14217
|
-
/* @__PURE__ */
|
|
14269
|
+
return /* @__PURE__ */ jsxs101("div", { className: "space-y-4", children: [
|
|
14270
|
+
/* @__PURE__ */ jsxs101("div", { className: "flex items-center justify-between", children: [
|
|
14271
|
+
/* @__PURE__ */ jsx168("h2", { className: "text-2xl font-bold", children: title }),
|
|
14272
|
+
/* @__PURE__ */ jsx168(Skeleton, { className: "h-10 w-32" })
|
|
14218
14273
|
] }),
|
|
14219
|
-
/* @__PURE__ */
|
|
14274
|
+
/* @__PURE__ */ jsx168("div", { className: "space-y-3", children: [1, 2, 3].map((i) => /* @__PURE__ */ jsx168(Skeleton, { className: "h-32 w-full" }, i)) })
|
|
14220
14275
|
] });
|
|
14221
14276
|
}
|
|
14222
14277
|
if (error) {
|
|
14223
|
-
return /* @__PURE__ */
|
|
14224
|
-
/* @__PURE__ */
|
|
14225
|
-
/* @__PURE__ */
|
|
14278
|
+
return /* @__PURE__ */ jsxs101("div", { className: "space-y-4", children: [
|
|
14279
|
+
/* @__PURE__ */ jsx168("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsx168("h2", { className: "text-2xl font-bold", children: title }) }),
|
|
14280
|
+
/* @__PURE__ */ jsx168("div", { className: "rounded-lg border border-destructive/50 bg-destructive/10 p-6 text-center", children: /* @__PURE__ */ jsx168("p", { className: "text-destructive", children: error.message }) })
|
|
14226
14281
|
] });
|
|
14227
14282
|
}
|
|
14228
14283
|
if (clients.length === 0) {
|
|
14229
|
-
return /* @__PURE__ */
|
|
14230
|
-
/* @__PURE__ */
|
|
14231
|
-
/* @__PURE__ */
|
|
14232
|
-
onCreateClick && /* @__PURE__ */
|
|
14233
|
-
/* @__PURE__ */
|
|
14284
|
+
return /* @__PURE__ */ jsxs101("div", { className: "space-y-4", children: [
|
|
14285
|
+
/* @__PURE__ */ jsxs101("div", { className: "flex items-center justify-between", children: [
|
|
14286
|
+
/* @__PURE__ */ jsx168("h2", { className: "text-2xl font-bold", children: title }),
|
|
14287
|
+
onCreateClick && /* @__PURE__ */ jsxs101(Button, { onClick: onCreateClick, children: [
|
|
14288
|
+
/* @__PURE__ */ jsx168(Plus2, { className: "h-4 w-4 mr-2" }),
|
|
14234
14289
|
"New App"
|
|
14235
14290
|
] })
|
|
14236
14291
|
] }),
|
|
14237
|
-
/* @__PURE__ */
|
|
14238
|
-
/* @__PURE__ */
|
|
14239
|
-
/* @__PURE__ */
|
|
14240
|
-
/* @__PURE__ */
|
|
14241
|
-
onCreateClick && /* @__PURE__ */
|
|
14242
|
-
/* @__PURE__ */
|
|
14292
|
+
/* @__PURE__ */ jsxs101("div", { className: "rounded-lg border border-dashed p-12 text-center", children: [
|
|
14293
|
+
/* @__PURE__ */ jsx168(Key2, { className: "h-12 w-12 mx-auto text-muted-foreground mb-4" }),
|
|
14294
|
+
/* @__PURE__ */ jsx168("h3", { className: "text-lg font-medium mb-2", children: "No OAuth Applications" }),
|
|
14295
|
+
/* @__PURE__ */ jsx168("p", { className: "text-muted-foreground mb-4", children: emptyStateMessage }),
|
|
14296
|
+
onCreateClick && /* @__PURE__ */ jsxs101(Button, { onClick: onCreateClick, children: [
|
|
14297
|
+
/* @__PURE__ */ jsx168(Plus2, { className: "h-4 w-4 mr-2" }),
|
|
14243
14298
|
"Create Application"
|
|
14244
14299
|
] })
|
|
14245
14300
|
] })
|
|
14246
14301
|
] });
|
|
14247
14302
|
}
|
|
14248
|
-
return /* @__PURE__ */
|
|
14249
|
-
/* @__PURE__ */
|
|
14250
|
-
/* @__PURE__ */
|
|
14251
|
-
onCreateClick && /* @__PURE__ */
|
|
14252
|
-
/* @__PURE__ */
|
|
14303
|
+
return /* @__PURE__ */ jsxs101("div", { className: "space-y-4", children: [
|
|
14304
|
+
/* @__PURE__ */ jsxs101("div", { className: "flex items-center justify-between", children: [
|
|
14305
|
+
/* @__PURE__ */ jsx168("h2", { className: "text-2xl font-bold", children: title }),
|
|
14306
|
+
onCreateClick && /* @__PURE__ */ jsxs101(Button, { onClick: onCreateClick, children: [
|
|
14307
|
+
/* @__PURE__ */ jsx168(Plus2, { className: "h-4 w-4 mr-2" }),
|
|
14253
14308
|
"New App"
|
|
14254
14309
|
] })
|
|
14255
14310
|
] }),
|
|
14256
|
-
/* @__PURE__ */
|
|
14311
|
+
/* @__PURE__ */ jsx168("div", { className: "space-y-3", children: clients.map((client) => /* @__PURE__ */ jsx168(
|
|
14257
14312
|
OAuthClientCard,
|
|
14258
14313
|
{
|
|
14259
14314
|
client,
|
|
@@ -14269,7 +14324,7 @@ __name(OAuthClientList, "OAuthClientList");
|
|
|
14269
14324
|
|
|
14270
14325
|
// src/features/oauth/components/OAuthClientForm.tsx
|
|
14271
14326
|
import { useState as useState56, useCallback as useCallback26 } from "react";
|
|
14272
|
-
import { jsx as
|
|
14327
|
+
import { jsx as jsx169, jsxs as jsxs102 } from "react/jsx-runtime";
|
|
14273
14328
|
function OAuthClientForm({
|
|
14274
14329
|
client,
|
|
14275
14330
|
onSubmit,
|
|
@@ -14316,15 +14371,15 @@ function OAuthClientForm({
|
|
|
14316
14371
|
},
|
|
14317
14372
|
[formState, validate, onSubmit]
|
|
14318
14373
|
);
|
|
14319
|
-
return /* @__PURE__ */
|
|
14320
|
-
/* @__PURE__ */
|
|
14321
|
-
/* @__PURE__ */
|
|
14322
|
-
/* @__PURE__ */
|
|
14374
|
+
return /* @__PURE__ */ jsx169(Card, { children: /* @__PURE__ */ jsxs102("form", { onSubmit: handleSubmit, children: [
|
|
14375
|
+
/* @__PURE__ */ jsxs102(CardHeader, { children: [
|
|
14376
|
+
/* @__PURE__ */ jsx169(CardTitle, { children: isEditMode ? "Edit Application" : "Create OAuth Application" }),
|
|
14377
|
+
/* @__PURE__ */ jsx169(CardDescription, { children: isEditMode ? "Update your OAuth application settings." : "Register a new application to access the API." })
|
|
14323
14378
|
] }),
|
|
14324
|
-
/* @__PURE__ */
|
|
14325
|
-
/* @__PURE__ */
|
|
14326
|
-
/* @__PURE__ */
|
|
14327
|
-
/* @__PURE__ */
|
|
14379
|
+
/* @__PURE__ */ jsxs102(CardContent, { className: "space-y-6", children: [
|
|
14380
|
+
/* @__PURE__ */ jsxs102("div", { className: "space-y-2", children: [
|
|
14381
|
+
/* @__PURE__ */ jsx169(Label, { htmlFor: "name", children: "Application Name *" }),
|
|
14382
|
+
/* @__PURE__ */ jsx169(
|
|
14328
14383
|
Input,
|
|
14329
14384
|
{
|
|
14330
14385
|
id: "name",
|
|
@@ -14335,11 +14390,11 @@ function OAuthClientForm({
|
|
|
14335
14390
|
className: errors.name ? "border-destructive" : ""
|
|
14336
14391
|
}
|
|
14337
14392
|
),
|
|
14338
|
-
errors.name && /* @__PURE__ */
|
|
14393
|
+
errors.name && /* @__PURE__ */ jsx169("p", { className: "text-sm text-destructive", children: errors.name })
|
|
14339
14394
|
] }),
|
|
14340
|
-
/* @__PURE__ */
|
|
14341
|
-
/* @__PURE__ */
|
|
14342
|
-
/* @__PURE__ */
|
|
14395
|
+
/* @__PURE__ */ jsxs102("div", { className: "space-y-2", children: [
|
|
14396
|
+
/* @__PURE__ */ jsx169(Label, { htmlFor: "description", children: "Description" }),
|
|
14397
|
+
/* @__PURE__ */ jsx169(
|
|
14343
14398
|
Textarea,
|
|
14344
14399
|
{
|
|
14345
14400
|
id: "description",
|
|
@@ -14351,7 +14406,7 @@ function OAuthClientForm({
|
|
|
14351
14406
|
}
|
|
14352
14407
|
)
|
|
14353
14408
|
] }),
|
|
14354
|
-
/* @__PURE__ */
|
|
14409
|
+
/* @__PURE__ */ jsx169(
|
|
14355
14410
|
OAuthRedirectUriInput,
|
|
14356
14411
|
{
|
|
14357
14412
|
value: formState.redirectUris,
|
|
@@ -14360,7 +14415,7 @@ function OAuthClientForm({
|
|
|
14360
14415
|
disabled: isLoading
|
|
14361
14416
|
}
|
|
14362
14417
|
),
|
|
14363
|
-
/* @__PURE__ */
|
|
14418
|
+
/* @__PURE__ */ jsx169(
|
|
14364
14419
|
OAuthScopeSelector,
|
|
14365
14420
|
{
|
|
14366
14421
|
value: formState.allowedScopes,
|
|
@@ -14369,38 +14424,38 @@ function OAuthClientForm({
|
|
|
14369
14424
|
disabled: isLoading
|
|
14370
14425
|
}
|
|
14371
14426
|
),
|
|
14372
|
-
/* @__PURE__ */
|
|
14373
|
-
/* @__PURE__ */
|
|
14374
|
-
/* @__PURE__ */
|
|
14427
|
+
/* @__PURE__ */ jsxs102("div", { className: "space-y-3", children: [
|
|
14428
|
+
/* @__PURE__ */ jsx169(Label, { children: "Client Type" }),
|
|
14429
|
+
/* @__PURE__ */ jsxs102(
|
|
14375
14430
|
RadioGroup,
|
|
14376
14431
|
{
|
|
14377
14432
|
value: formState.isConfidential ? "confidential" : "public",
|
|
14378
14433
|
onValueChange: (v) => setFormState((s) => ({ ...s, isConfidential: v === "confidential" })),
|
|
14379
14434
|
disabled: isLoading || isEditMode,
|
|
14380
14435
|
children: [
|
|
14381
|
-
/* @__PURE__ */
|
|
14382
|
-
/* @__PURE__ */
|
|
14383
|
-
/* @__PURE__ */
|
|
14384
|
-
/* @__PURE__ */
|
|
14385
|
-
/* @__PURE__ */
|
|
14436
|
+
/* @__PURE__ */ jsxs102("div", { className: "flex items-start space-x-3 p-3 rounded-md border", children: [
|
|
14437
|
+
/* @__PURE__ */ jsx169(RadioGroupItem, { value: "confidential", id: "confidential", className: "mt-1" }),
|
|
14438
|
+
/* @__PURE__ */ jsxs102("div", { children: [
|
|
14439
|
+
/* @__PURE__ */ jsx169(Label, { htmlFor: "confidential", className: "font-medium cursor-pointer", children: "Confidential" }),
|
|
14440
|
+
/* @__PURE__ */ jsx169("p", { className: "text-sm text-muted-foreground", children: "Server-side application that can securely store the client secret." })
|
|
14386
14441
|
] })
|
|
14387
14442
|
] }),
|
|
14388
|
-
/* @__PURE__ */
|
|
14389
|
-
/* @__PURE__ */
|
|
14390
|
-
/* @__PURE__ */
|
|
14391
|
-
/* @__PURE__ */
|
|
14392
|
-
/* @__PURE__ */
|
|
14443
|
+
/* @__PURE__ */ jsxs102("div", { className: "flex items-start space-x-3 p-3 rounded-md border", children: [
|
|
14444
|
+
/* @__PURE__ */ jsx169(RadioGroupItem, { value: "public", id: "public", className: "mt-1" }),
|
|
14445
|
+
/* @__PURE__ */ jsxs102("div", { children: [
|
|
14446
|
+
/* @__PURE__ */ jsx169(Label, { htmlFor: "public", className: "font-medium cursor-pointer", children: "Public" }),
|
|
14447
|
+
/* @__PURE__ */ jsx169("p", { className: "text-sm text-muted-foreground", children: "Mobile or desktop application. Requires PKCE for authorization." })
|
|
14393
14448
|
] })
|
|
14394
14449
|
] })
|
|
14395
14450
|
]
|
|
14396
14451
|
}
|
|
14397
14452
|
),
|
|
14398
|
-
isEditMode && /* @__PURE__ */
|
|
14453
|
+
isEditMode && /* @__PURE__ */ jsx169("p", { className: "text-sm text-muted-foreground", children: "Client type cannot be changed after creation." })
|
|
14399
14454
|
] })
|
|
14400
14455
|
] }),
|
|
14401
|
-
/* @__PURE__ */
|
|
14402
|
-
/* @__PURE__ */
|
|
14403
|
-
/* @__PURE__ */
|
|
14456
|
+
/* @__PURE__ */ jsxs102(CardFooter, { className: "flex justify-end gap-3", children: [
|
|
14457
|
+
/* @__PURE__ */ jsx169(Button, { type: "button", variant: "outline", onClick: onCancel, disabled: isLoading, children: "Cancel" }),
|
|
14458
|
+
/* @__PURE__ */ jsx169(Button, { type: "submit", disabled: isLoading, children: isLoading ? "Saving..." : isEditMode ? "Save Changes" : "Create Application" })
|
|
14404
14459
|
] })
|
|
14405
14460
|
] }) });
|
|
14406
14461
|
}
|
|
@@ -14410,7 +14465,7 @@ __name(OAuthClientForm, "OAuthClientForm");
|
|
|
14410
14465
|
import { useState as useState57, useCallback as useCallback27 } from "react";
|
|
14411
14466
|
import { format as format2 } from "date-fns";
|
|
14412
14467
|
import { Copy as Copy2, Check as Check2, RefreshCw as RefreshCw2, Pencil as Pencil2, Trash2 as Trash23, ExternalLink } from "lucide-react";
|
|
14413
|
-
import { Fragment as Fragment34, jsx as
|
|
14468
|
+
import { Fragment as Fragment34, jsx as jsx170, jsxs as jsxs103 } from "react/jsx-runtime";
|
|
14414
14469
|
function OAuthClientDetail({
|
|
14415
14470
|
client,
|
|
14416
14471
|
isLoading = false,
|
|
@@ -14453,40 +14508,40 @@ function OAuthClientDetail({
|
|
|
14453
14508
|
}
|
|
14454
14509
|
}, [onRegenerateSecret]);
|
|
14455
14510
|
const createdDate = client.createdAt ? format2(new Date(client.createdAt), "MMMM d, yyyy") : "Unknown";
|
|
14456
|
-
return /* @__PURE__ */
|
|
14457
|
-
/* @__PURE__ */
|
|
14458
|
-
/* @__PURE__ */
|
|
14459
|
-
/* @__PURE__ */
|
|
14460
|
-
/* @__PURE__ */
|
|
14461
|
-
client.description && /* @__PURE__ */
|
|
14511
|
+
return /* @__PURE__ */ jsxs103(Fragment34, { children: [
|
|
14512
|
+
/* @__PURE__ */ jsxs103(Card, { children: [
|
|
14513
|
+
/* @__PURE__ */ jsx170(CardHeader, { children: /* @__PURE__ */ jsxs103("div", { className: "flex items-start justify-between", children: [
|
|
14514
|
+
/* @__PURE__ */ jsxs103("div", { children: [
|
|
14515
|
+
/* @__PURE__ */ jsx170(CardTitle, { className: "text-2xl", children: client.name }),
|
|
14516
|
+
client.description && /* @__PURE__ */ jsx170(CardDescription, { className: "mt-1", children: client.description })
|
|
14462
14517
|
] }),
|
|
14463
|
-
/* @__PURE__ */
|
|
14464
|
-
/* @__PURE__ */
|
|
14465
|
-
/* @__PURE__ */
|
|
14518
|
+
/* @__PURE__ */ jsxs103("div", { className: "flex items-center gap-2", children: [
|
|
14519
|
+
/* @__PURE__ */ jsx170(Badge, { variant: client.isActive ? "default" : "secondary", children: client.isActive ? "Active" : "Inactive" }),
|
|
14520
|
+
/* @__PURE__ */ jsx170(Badge, { variant: "outline", children: client.isConfidential ? "Confidential" : "Public" })
|
|
14466
14521
|
] })
|
|
14467
14522
|
] }) }),
|
|
14468
|
-
/* @__PURE__ */
|
|
14469
|
-
/* @__PURE__ */
|
|
14470
|
-
/* @__PURE__ */
|
|
14471
|
-
/* @__PURE__ */
|
|
14472
|
-
/* @__PURE__ */
|
|
14473
|
-
/* @__PURE__ */
|
|
14523
|
+
/* @__PURE__ */ jsxs103(CardContent, { className: "space-y-6", children: [
|
|
14524
|
+
/* @__PURE__ */ jsxs103("div", { className: "space-y-2", children: [
|
|
14525
|
+
/* @__PURE__ */ jsx170(Label, { children: "Client ID" }),
|
|
14526
|
+
/* @__PURE__ */ jsxs103("div", { className: "flex gap-2", children: [
|
|
14527
|
+
/* @__PURE__ */ jsx170(Input, { value: client.clientId, readOnly: true, className: "font-mono" }),
|
|
14528
|
+
/* @__PURE__ */ jsx170(
|
|
14474
14529
|
Button,
|
|
14475
14530
|
{
|
|
14476
14531
|
variant: "outline",
|
|
14477
14532
|
size: "icon",
|
|
14478
14533
|
onClick: () => copyToClipboard(client.clientId, "clientId"),
|
|
14479
14534
|
title: "Copy Client ID",
|
|
14480
|
-
children: copiedField === "clientId" ? /* @__PURE__ */
|
|
14535
|
+
children: copiedField === "clientId" ? /* @__PURE__ */ jsx170(Check2, { className: "h-4 w-4 text-green-600" }) : /* @__PURE__ */ jsx170(Copy2, { className: "h-4 w-4" })
|
|
14481
14536
|
}
|
|
14482
14537
|
)
|
|
14483
14538
|
] })
|
|
14484
14539
|
] }),
|
|
14485
|
-
/* @__PURE__ */
|
|
14486
|
-
/* @__PURE__ */
|
|
14487
|
-
/* @__PURE__ */
|
|
14488
|
-
/* @__PURE__ */
|
|
14489
|
-
onRegenerateSecret && /* @__PURE__ */
|
|
14540
|
+
/* @__PURE__ */ jsxs103("div", { className: "space-y-2", children: [
|
|
14541
|
+
/* @__PURE__ */ jsx170(Label, { children: "Client Secret" }),
|
|
14542
|
+
/* @__PURE__ */ jsxs103("div", { className: "flex gap-2", children: [
|
|
14543
|
+
/* @__PURE__ */ jsx170(Input, { value: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022", readOnly: true, className: "font-mono" }),
|
|
14544
|
+
onRegenerateSecret && /* @__PURE__ */ jsx170(
|
|
14490
14545
|
Button,
|
|
14491
14546
|
{
|
|
14492
14547
|
variant: "outline",
|
|
@@ -14494,46 +14549,46 @@ function OAuthClientDetail({
|
|
|
14494
14549
|
onClick: () => setShowRegenerateConfirm(true),
|
|
14495
14550
|
title: "Regenerate Secret",
|
|
14496
14551
|
disabled: isLoading,
|
|
14497
|
-
children: /* @__PURE__ */
|
|
14552
|
+
children: /* @__PURE__ */ jsx170(RefreshCw2, { className: "h-4 w-4" })
|
|
14498
14553
|
}
|
|
14499
14554
|
)
|
|
14500
14555
|
] }),
|
|
14501
|
-
/* @__PURE__ */
|
|
14556
|
+
/* @__PURE__ */ jsx170("p", { className: "text-xs text-muted-foreground", children: "Regenerating will invalidate the current secret and all existing tokens." })
|
|
14502
14557
|
] }),
|
|
14503
|
-
/* @__PURE__ */
|
|
14504
|
-
/* @__PURE__ */
|
|
14505
|
-
/* @__PURE__ */
|
|
14506
|
-
/* @__PURE__ */
|
|
14507
|
-
/* @__PURE__ */
|
|
14558
|
+
/* @__PURE__ */ jsx170(Separator, {}),
|
|
14559
|
+
/* @__PURE__ */ jsxs103("div", { className: "space-y-2", children: [
|
|
14560
|
+
/* @__PURE__ */ jsx170(Label, { children: "Redirect URIs" }),
|
|
14561
|
+
/* @__PURE__ */ jsx170("ul", { className: "space-y-1", children: client.redirectUris.map((uri, index) => /* @__PURE__ */ jsxs103("li", { className: "flex items-center gap-2 text-sm font-mono", children: [
|
|
14562
|
+
/* @__PURE__ */ jsx170(ExternalLink, { className: "h-3 w-3 text-muted-foreground" }),
|
|
14508
14563
|
uri
|
|
14509
14564
|
] }, index)) })
|
|
14510
14565
|
] }),
|
|
14511
|
-
/* @__PURE__ */
|
|
14512
|
-
/* @__PURE__ */
|
|
14513
|
-
/* @__PURE__ */
|
|
14566
|
+
/* @__PURE__ */ jsxs103("div", { className: "space-y-2", children: [
|
|
14567
|
+
/* @__PURE__ */ jsx170(Label, { children: "Allowed Scopes" }),
|
|
14568
|
+
/* @__PURE__ */ jsx170("div", { className: "flex flex-wrap gap-2", children: client.allowedScopes.map((scope) => /* @__PURE__ */ jsx170(Badge, { variant: "secondary", children: OAUTH_SCOPE_DISPLAY[scope]?.name || scope }, scope)) })
|
|
14514
14569
|
] }),
|
|
14515
|
-
/* @__PURE__ */
|
|
14516
|
-
/* @__PURE__ */
|
|
14517
|
-
/* @__PURE__ */
|
|
14570
|
+
/* @__PURE__ */ jsxs103("div", { className: "space-y-2", children: [
|
|
14571
|
+
/* @__PURE__ */ jsx170(Label, { children: "Grant Types" }),
|
|
14572
|
+
/* @__PURE__ */ jsx170("div", { className: "flex flex-wrap gap-2", children: client.allowedGrantTypes.map((grant) => /* @__PURE__ */ jsx170(Badge, { variant: "outline", children: grant.replace(/_/g, " ") }, grant)) })
|
|
14518
14573
|
] }),
|
|
14519
|
-
/* @__PURE__ */
|
|
14520
|
-
/* @__PURE__ */
|
|
14574
|
+
/* @__PURE__ */ jsx170(Separator, {}),
|
|
14575
|
+
/* @__PURE__ */ jsx170("div", { className: "flex flex-wrap gap-x-6 gap-y-2 text-sm text-muted-foreground", children: /* @__PURE__ */ jsxs103("span", { children: [
|
|
14521
14576
|
"Created: ",
|
|
14522
14577
|
createdDate
|
|
14523
14578
|
] }) }),
|
|
14524
|
-
/* @__PURE__ */
|
|
14525
|
-
onEdit && /* @__PURE__ */
|
|
14526
|
-
/* @__PURE__ */
|
|
14579
|
+
/* @__PURE__ */ jsxs103("div", { className: "flex gap-3 pt-4", children: [
|
|
14580
|
+
onEdit && /* @__PURE__ */ jsxs103(Button, { variant: "outline", onClick: onEdit, disabled: isLoading, children: [
|
|
14581
|
+
/* @__PURE__ */ jsx170(Pencil2, { className: "h-4 w-4 mr-2" }),
|
|
14527
14582
|
"Edit"
|
|
14528
14583
|
] }),
|
|
14529
|
-
onDelete && /* @__PURE__ */
|
|
14584
|
+
onDelete && /* @__PURE__ */ jsxs103(
|
|
14530
14585
|
Button,
|
|
14531
14586
|
{
|
|
14532
14587
|
variant: "destructive",
|
|
14533
14588
|
onClick: () => setShowDeleteConfirm(true),
|
|
14534
14589
|
disabled: isLoading,
|
|
14535
14590
|
children: [
|
|
14536
|
-
/* @__PURE__ */
|
|
14591
|
+
/* @__PURE__ */ jsx170(Trash23, { className: "h-4 w-4 mr-2" }),
|
|
14537
14592
|
"Delete"
|
|
14538
14593
|
]
|
|
14539
14594
|
}
|
|
@@ -14541,18 +14596,18 @@ function OAuthClientDetail({
|
|
|
14541
14596
|
] })
|
|
14542
14597
|
] })
|
|
14543
14598
|
] }),
|
|
14544
|
-
/* @__PURE__ */
|
|
14545
|
-
/* @__PURE__ */
|
|
14546
|
-
/* @__PURE__ */
|
|
14547
|
-
/* @__PURE__ */
|
|
14599
|
+
/* @__PURE__ */ jsx170(AlertDialog, { open: showDeleteConfirm, onOpenChange: setShowDeleteConfirm, children: /* @__PURE__ */ jsxs103(AlertDialogContent, { children: [
|
|
14600
|
+
/* @__PURE__ */ jsxs103(AlertDialogHeader, { children: [
|
|
14601
|
+
/* @__PURE__ */ jsx170(AlertDialogTitle, { children: "Delete OAuth Application?" }),
|
|
14602
|
+
/* @__PURE__ */ jsxs103(AlertDialogDescription, { children: [
|
|
14548
14603
|
'This will permanently delete "',
|
|
14549
14604
|
client.name,
|
|
14550
14605
|
'" and revoke all access tokens. This action cannot be undone.'
|
|
14551
14606
|
] })
|
|
14552
14607
|
] }),
|
|
14553
|
-
/* @__PURE__ */
|
|
14554
|
-
/* @__PURE__ */
|
|
14555
|
-
/* @__PURE__ */
|
|
14608
|
+
/* @__PURE__ */ jsxs103(AlertDialogFooter, { children: [
|
|
14609
|
+
/* @__PURE__ */ jsx170(AlertDialogCancel, { disabled: isDeleting, children: "Cancel" }),
|
|
14610
|
+
/* @__PURE__ */ jsx170(
|
|
14556
14611
|
AlertDialogAction,
|
|
14557
14612
|
{
|
|
14558
14613
|
onClick: handleDelete,
|
|
@@ -14563,14 +14618,14 @@ function OAuthClientDetail({
|
|
|
14563
14618
|
)
|
|
14564
14619
|
] })
|
|
14565
14620
|
] }) }),
|
|
14566
|
-
/* @__PURE__ */
|
|
14567
|
-
/* @__PURE__ */
|
|
14568
|
-
/* @__PURE__ */
|
|
14569
|
-
/* @__PURE__ */
|
|
14621
|
+
/* @__PURE__ */ jsx170(AlertDialog, { open: showRegenerateConfirm, onOpenChange: setShowRegenerateConfirm, children: /* @__PURE__ */ jsxs103(AlertDialogContent, { children: [
|
|
14622
|
+
/* @__PURE__ */ jsxs103(AlertDialogHeader, { children: [
|
|
14623
|
+
/* @__PURE__ */ jsx170(AlertDialogTitle, { children: "Regenerate Client Secret?" }),
|
|
14624
|
+
/* @__PURE__ */ jsx170(AlertDialogDescription, { children: "This will generate a new client secret and invalidate the old one. All existing tokens will be revoked. You will need to update your application with the new secret." })
|
|
14570
14625
|
] }),
|
|
14571
|
-
/* @__PURE__ */
|
|
14572
|
-
/* @__PURE__ */
|
|
14573
|
-
/* @__PURE__ */
|
|
14626
|
+
/* @__PURE__ */ jsxs103(AlertDialogFooter, { children: [
|
|
14627
|
+
/* @__PURE__ */ jsx170(AlertDialogCancel, { disabled: isRegenerating, children: "Cancel" }),
|
|
14628
|
+
/* @__PURE__ */ jsx170(AlertDialogAction, { onClick: handleRegenerateSecret, disabled: isRegenerating, children: isRegenerating ? "Regenerating..." : "Regenerate" })
|
|
14574
14629
|
] })
|
|
14575
14630
|
] }) })
|
|
14576
14631
|
] });
|
|
@@ -14579,28 +14634,28 @@ __name(OAuthClientDetail, "OAuthClientDetail");
|
|
|
14579
14634
|
|
|
14580
14635
|
// src/features/oauth/components/consent/OAuthConsentHeader.tsx
|
|
14581
14636
|
import { Shield } from "lucide-react";
|
|
14582
|
-
import { jsx as
|
|
14637
|
+
import { jsx as jsx171, jsxs as jsxs104 } from "react/jsx-runtime";
|
|
14583
14638
|
function OAuthConsentHeader({
|
|
14584
14639
|
client,
|
|
14585
14640
|
logoUrl,
|
|
14586
14641
|
appName = "Only35"
|
|
14587
14642
|
}) {
|
|
14588
|
-
return /* @__PURE__ */
|
|
14589
|
-
/* @__PURE__ */
|
|
14643
|
+
return /* @__PURE__ */ jsxs104("div", { className: "text-center space-y-4", children: [
|
|
14644
|
+
/* @__PURE__ */ jsx171("div", { className: "flex justify-center", children: logoUrl ? /* @__PURE__ */ jsx171(
|
|
14590
14645
|
"img",
|
|
14591
14646
|
{
|
|
14592
14647
|
src: logoUrl,
|
|
14593
14648
|
alt: appName,
|
|
14594
14649
|
className: "h-12 w-auto"
|
|
14595
14650
|
}
|
|
14596
|
-
) : /* @__PURE__ */
|
|
14597
|
-
/* @__PURE__ */
|
|
14598
|
-
/* @__PURE__ */
|
|
14651
|
+
) : /* @__PURE__ */ jsx171("div", { className: "h-12 w-12 rounded-full bg-primary flex items-center justify-center", children: /* @__PURE__ */ jsx171(Shield, { className: "h-6 w-6 text-primary-foreground" }) }) }),
|
|
14652
|
+
/* @__PURE__ */ jsxs104("div", { className: "space-y-2", children: [
|
|
14653
|
+
/* @__PURE__ */ jsxs104("h1", { className: "text-2xl font-bold", children: [
|
|
14599
14654
|
"Authorize ",
|
|
14600
14655
|
client.name
|
|
14601
14656
|
] }),
|
|
14602
|
-
/* @__PURE__ */
|
|
14603
|
-
/* @__PURE__ */
|
|
14657
|
+
/* @__PURE__ */ jsxs104("p", { className: "text-muted-foreground", children: [
|
|
14658
|
+
/* @__PURE__ */ jsx171("span", { className: "font-medium text-foreground", children: client.name }),
|
|
14604
14659
|
" ",
|
|
14605
14660
|
"wants to access your ",
|
|
14606
14661
|
appName,
|
|
@@ -14622,7 +14677,7 @@ import {
|
|
|
14622
14677
|
User,
|
|
14623
14678
|
Shield as Shield2
|
|
14624
14679
|
} from "lucide-react";
|
|
14625
|
-
import { jsx as
|
|
14680
|
+
import { jsx as jsx172, jsxs as jsxs105 } from "react/jsx-runtime";
|
|
14626
14681
|
var SCOPE_ICONS = {
|
|
14627
14682
|
eye: Eye,
|
|
14628
14683
|
pencil: Pencil3,
|
|
@@ -14637,19 +14692,19 @@ function OAuthScopeList({ scopes }) {
|
|
|
14637
14692
|
if (scopes.length === 0) {
|
|
14638
14693
|
return null;
|
|
14639
14694
|
}
|
|
14640
|
-
return /* @__PURE__ */
|
|
14641
|
-
/* @__PURE__ */
|
|
14642
|
-
/* @__PURE__ */
|
|
14695
|
+
return /* @__PURE__ */ jsxs105("div", { className: "space-y-3", children: [
|
|
14696
|
+
/* @__PURE__ */ jsx172("h2", { className: "text-sm font-medium text-muted-foreground uppercase tracking-wide", children: "This will allow the application to:" }),
|
|
14697
|
+
/* @__PURE__ */ jsx172("ul", { className: "space-y-3", children: scopes.map((scope) => {
|
|
14643
14698
|
const IconComponent = scope.icon ? SCOPE_ICONS[scope.icon] : Eye;
|
|
14644
|
-
return /* @__PURE__ */
|
|
14699
|
+
return /* @__PURE__ */ jsxs105(
|
|
14645
14700
|
"li",
|
|
14646
14701
|
{
|
|
14647
14702
|
className: "flex items-start gap-3 p-3 rounded-lg bg-muted/50",
|
|
14648
14703
|
children: [
|
|
14649
|
-
/* @__PURE__ */
|
|
14650
|
-
/* @__PURE__ */
|
|
14651
|
-
/* @__PURE__ */
|
|
14652
|
-
/* @__PURE__ */
|
|
14704
|
+
/* @__PURE__ */ jsx172("div", { className: "flex-shrink-0 mt-0.5", children: /* @__PURE__ */ jsx172("div", { className: "h-8 w-8 rounded-full bg-primary/10 flex items-center justify-center", children: IconComponent && /* @__PURE__ */ jsx172(IconComponent, { className: "h-4 w-4 text-primary" }) }) }),
|
|
14705
|
+
/* @__PURE__ */ jsxs105("div", { className: "flex-1", children: [
|
|
14706
|
+
/* @__PURE__ */ jsx172("p", { className: "font-medium", children: scope.name }),
|
|
14707
|
+
/* @__PURE__ */ jsx172("p", { className: "text-sm text-muted-foreground", children: scope.description })
|
|
14653
14708
|
] })
|
|
14654
14709
|
]
|
|
14655
14710
|
},
|
|
@@ -14661,14 +14716,14 @@ function OAuthScopeList({ scopes }) {
|
|
|
14661
14716
|
__name(OAuthScopeList, "OAuthScopeList");
|
|
14662
14717
|
|
|
14663
14718
|
// src/features/oauth/components/consent/OAuthConsentActions.tsx
|
|
14664
|
-
import { jsx as
|
|
14719
|
+
import { jsx as jsx173, jsxs as jsxs106 } from "react/jsx-runtime";
|
|
14665
14720
|
function OAuthConsentActions({
|
|
14666
14721
|
onApprove,
|
|
14667
14722
|
onDeny,
|
|
14668
14723
|
isLoading = false
|
|
14669
14724
|
}) {
|
|
14670
|
-
return /* @__PURE__ */
|
|
14671
|
-
/* @__PURE__ */
|
|
14725
|
+
return /* @__PURE__ */ jsxs106("div", { className: "flex flex-col sm:flex-row gap-3", children: [
|
|
14726
|
+
/* @__PURE__ */ jsx173(
|
|
14672
14727
|
Button,
|
|
14673
14728
|
{
|
|
14674
14729
|
variant: "outline",
|
|
@@ -14678,7 +14733,7 @@ function OAuthConsentActions({
|
|
|
14678
14733
|
children: "Deny"
|
|
14679
14734
|
}
|
|
14680
14735
|
),
|
|
14681
|
-
/* @__PURE__ */
|
|
14736
|
+
/* @__PURE__ */ jsx173(
|
|
14682
14737
|
Button,
|
|
14683
14738
|
{
|
|
14684
14739
|
onClick: onApprove,
|
|
@@ -14693,7 +14748,7 @@ __name(OAuthConsentActions, "OAuthConsentActions");
|
|
|
14693
14748
|
|
|
14694
14749
|
// src/features/oauth/components/consent/OAuthConsentScreen.tsx
|
|
14695
14750
|
import { ExternalLink as ExternalLink2, AlertTriangle as AlertTriangle2, Loader2 as Loader22 } from "lucide-react";
|
|
14696
|
-
import { jsx as
|
|
14751
|
+
import { jsx as jsx174, jsxs as jsxs107 } from "react/jsx-runtime";
|
|
14697
14752
|
function OAuthConsentScreen({
|
|
14698
14753
|
params,
|
|
14699
14754
|
logoUrl,
|
|
@@ -14703,21 +14758,21 @@ function OAuthConsentScreen({
|
|
|
14703
14758
|
}) {
|
|
14704
14759
|
const { clientInfo, isLoading, error, approve, deny, isSubmitting } = useOAuthConsent(params);
|
|
14705
14760
|
if (isLoading) {
|
|
14706
|
-
return /* @__PURE__ */
|
|
14707
|
-
/* @__PURE__ */
|
|
14708
|
-
/* @__PURE__ */
|
|
14761
|
+
return /* @__PURE__ */ jsx174("div", { className: "min-h-screen flex items-center justify-center p-4", children: /* @__PURE__ */ jsx174(Card, { className: "w-full max-w-md", children: /* @__PURE__ */ jsxs107(CardContent, { className: "flex flex-col items-center justify-center py-12", children: [
|
|
14762
|
+
/* @__PURE__ */ jsx174(Loader22, { className: "h-8 w-8 animate-spin text-muted-foreground" }),
|
|
14763
|
+
/* @__PURE__ */ jsx174("p", { className: "mt-4 text-muted-foreground", children: "Loading authorization request..." })
|
|
14709
14764
|
] }) }) });
|
|
14710
14765
|
}
|
|
14711
14766
|
if (error || !clientInfo) {
|
|
14712
|
-
return /* @__PURE__ */
|
|
14713
|
-
/* @__PURE__ */
|
|
14714
|
-
/* @__PURE__ */
|
|
14767
|
+
return /* @__PURE__ */ jsx174("div", { className: "min-h-screen flex items-center justify-center p-4", children: /* @__PURE__ */ jsx174(Card, { className: "w-full max-w-md", children: /* @__PURE__ */ jsx174(CardContent, { className: "py-8", children: /* @__PURE__ */ jsxs107(Alert, { variant: "destructive", children: [
|
|
14768
|
+
/* @__PURE__ */ jsx174(AlertTriangle2, { className: "h-4 w-4" }),
|
|
14769
|
+
/* @__PURE__ */ jsx174(AlertDescription, { children: error?.message || "Invalid authorization request. Please try again." })
|
|
14715
14770
|
] }) }) }) });
|
|
14716
14771
|
}
|
|
14717
14772
|
const { client, scopes } = clientInfo;
|
|
14718
|
-
return /* @__PURE__ */
|
|
14719
|
-
/* @__PURE__ */
|
|
14720
|
-
/* @__PURE__ */
|
|
14773
|
+
return /* @__PURE__ */ jsx174("div", { className: "min-h-screen flex items-center justify-center p-4 bg-muted/30", children: /* @__PURE__ */ jsxs107(Card, { className: "w-full max-w-md", children: [
|
|
14774
|
+
/* @__PURE__ */ jsxs107(CardContent, { className: "pt-6 space-y-6", children: [
|
|
14775
|
+
/* @__PURE__ */ jsx174(
|
|
14721
14776
|
OAuthConsentHeader,
|
|
14722
14777
|
{
|
|
14723
14778
|
client,
|
|
@@ -14725,17 +14780,17 @@ function OAuthConsentScreen({
|
|
|
14725
14780
|
appName
|
|
14726
14781
|
}
|
|
14727
14782
|
),
|
|
14728
|
-
/* @__PURE__ */
|
|
14729
|
-
/* @__PURE__ */
|
|
14730
|
-
/* @__PURE__ */
|
|
14731
|
-
/* @__PURE__ */
|
|
14732
|
-
/* @__PURE__ */
|
|
14733
|
-
/* @__PURE__ */
|
|
14734
|
-
/* @__PURE__ */
|
|
14735
|
-
/* @__PURE__ */
|
|
14783
|
+
/* @__PURE__ */ jsx174(Separator, {}),
|
|
14784
|
+
/* @__PURE__ */ jsx174(OAuthScopeList, { scopes }),
|
|
14785
|
+
/* @__PURE__ */ jsx174(Separator, {}),
|
|
14786
|
+
/* @__PURE__ */ jsxs107("div", { className: "flex items-start gap-2 text-sm text-muted-foreground", children: [
|
|
14787
|
+
/* @__PURE__ */ jsx174(ExternalLink2, { className: "h-4 w-4 mt-0.5 flex-shrink-0" }),
|
|
14788
|
+
/* @__PURE__ */ jsxs107("div", { children: [
|
|
14789
|
+
/* @__PURE__ */ jsx174("span", { children: "Authorizing will redirect you to:" }),
|
|
14790
|
+
/* @__PURE__ */ jsx174("p", { className: "font-mono text-xs mt-1 break-all", children: params.redirectUri })
|
|
14736
14791
|
] })
|
|
14737
14792
|
] }),
|
|
14738
|
-
/* @__PURE__ */
|
|
14793
|
+
/* @__PURE__ */ jsx174(
|
|
14739
14794
|
OAuthConsentActions,
|
|
14740
14795
|
{
|
|
14741
14796
|
onApprove: approve,
|
|
@@ -14744,14 +14799,14 @@ function OAuthConsentScreen({
|
|
|
14744
14799
|
}
|
|
14745
14800
|
)
|
|
14746
14801
|
] }),
|
|
14747
|
-
/* @__PURE__ */
|
|
14802
|
+
/* @__PURE__ */ jsx174(CardFooter, { className: "justify-center", children: /* @__PURE__ */ jsxs107("p", { className: "text-xs text-center text-muted-foreground", children: [
|
|
14748
14803
|
"By authorizing, you agree to the app's",
|
|
14749
14804
|
" ",
|
|
14750
|
-
/* @__PURE__ */
|
|
14805
|
+
/* @__PURE__ */ jsx174("a", { href: termsUrl, className: "underline hover:text-foreground", target: "_blank", rel: "noopener", children: "Terms of Service" }),
|
|
14751
14806
|
" ",
|
|
14752
14807
|
"and",
|
|
14753
14808
|
" ",
|
|
14754
|
-
/* @__PURE__ */
|
|
14809
|
+
/* @__PURE__ */ jsx174("a", { href: privacyUrl, className: "underline hover:text-foreground", target: "_blank", rel: "noopener", children: "Privacy Policy" }),
|
|
14755
14810
|
"."
|
|
14756
14811
|
] }) })
|
|
14757
14812
|
] }) });
|
|
@@ -15177,4 +15232,4 @@ export {
|
|
|
15177
15232
|
useOAuthClients,
|
|
15178
15233
|
useOAuthClient
|
|
15179
15234
|
};
|
|
15180
|
-
//# sourceMappingURL=chunk-
|
|
15235
|
+
//# sourceMappingURL=chunk-SLANIL6B.mjs.map
|