@carlonicora/nextjs-jsonapi 1.89.1 → 1.90.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-7XTFKIVT.mjs → BlockNoteEditor-2DELE7RC.mjs} +2 -2
- package/dist/{BlockNoteEditor-C2HEQ2GF.js → BlockNoteEditor-QIM2ZKC6.js} +9 -9
- package/dist/{BlockNoteEditor-C2HEQ2GF.js.map → BlockNoteEditor-QIM2ZKC6.js.map} +1 -1
- package/dist/billing/index.js +299 -299
- package/dist/billing/index.mjs +1 -1
- package/dist/{chunk-IB5YCA74.js → chunk-7D4A7G7U.js} +23 -4
- package/dist/chunk-7D4A7G7U.js.map +1 -0
- package/dist/{chunk-VFS7UECR.mjs → chunk-JUM7DE6J.mjs} +869 -850
- package/dist/chunk-JUM7DE6J.mjs.map +1 -0
- package/dist/client/index.js +2 -2
- package/dist/client/index.mjs +1 -1
- package/dist/components/index.d.mts +6 -1
- package/dist/components/index.d.ts +6 -1
- package/dist/components/index.js +4 -2
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +3 -1
- package/dist/contexts/index.js +2 -2
- package/dist/contexts/index.mjs +1 -1
- package/package.json +1 -1
- package/src/components/forms/FormDateTime.tsx +1 -0
- package/src/components/tables/cells/cell.dateTime.tsx +20 -0
- package/src/components/tables/cells/index.ts +1 -0
- package/dist/chunk-IB5YCA74.js.map +0 -1
- package/dist/chunk-VFS7UECR.mjs.map +0 -1
- /package/dist/{BlockNoteEditor-7XTFKIVT.mjs.map → BlockNoteEditor-2DELE7RC.mjs.map} +0 -0
|
@@ -9211,7 +9211,7 @@ __name(FormCheckbox, "FormCheckbox");
|
|
|
9211
9211
|
import dynamic from "next/dynamic";
|
|
9212
9212
|
import React14 from "react";
|
|
9213
9213
|
import { jsx as jsx73 } from "react/jsx-runtime";
|
|
9214
|
-
var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-
|
|
9214
|
+
var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-2DELE7RC.mjs"), {
|
|
9215
9215
|
ssr: false
|
|
9216
9216
|
});
|
|
9217
9217
|
var BlockNoteEditorContainer = React14.memo(/* @__PURE__ */ __name(function EditorContainer(props) {
|
|
@@ -9425,7 +9425,8 @@ function FormDateTime({
|
|
|
9425
9425
|
month: "long",
|
|
9426
9426
|
day: "numeric",
|
|
9427
9427
|
hour: "2-digit",
|
|
9428
|
-
minute: "2-digit"
|
|
9428
|
+
minute: "2-digit",
|
|
9429
|
+
hour12: false
|
|
9429
9430
|
}),
|
|
9430
9431
|
[locale]
|
|
9431
9432
|
);
|
|
@@ -13861,14 +13862,31 @@ var cellDate = /* @__PURE__ */ __name((params) => {
|
|
|
13861
13862
|
};
|
|
13862
13863
|
}, "cellDate");
|
|
13863
13864
|
|
|
13864
|
-
// src/components/tables/cells/cell.
|
|
13865
|
+
// src/components/tables/cells/cell.dateTime.tsx
|
|
13865
13866
|
import { jsx as jsx156 } from "react/jsx-runtime";
|
|
13867
|
+
var cellDateTime = /* @__PURE__ */ __name((params) => {
|
|
13868
|
+
return {
|
|
13869
|
+
id: params.name,
|
|
13870
|
+
accessorKey: params.name,
|
|
13871
|
+
header: params.title,
|
|
13872
|
+
cell: /* @__PURE__ */ __name(({ row }) => {
|
|
13873
|
+
const date = row.getValue(params.name);
|
|
13874
|
+
if (!date) return null;
|
|
13875
|
+
return /* @__PURE__ */ jsx156("span", { className: "text-muted-foreground text-xs", children: date.toLocaleString("en", { dateStyle: "medium", timeStyle: "short", hour12: false }) });
|
|
13876
|
+
}, "cell"),
|
|
13877
|
+
enableSorting: false,
|
|
13878
|
+
enableHiding: false
|
|
13879
|
+
};
|
|
13880
|
+
}, "cellDateTime");
|
|
13881
|
+
|
|
13882
|
+
// src/components/tables/cells/cell.id.tsx
|
|
13883
|
+
import { jsx as jsx157 } from "react/jsx-runtime";
|
|
13866
13884
|
var cellId = /* @__PURE__ */ __name((params) => {
|
|
13867
13885
|
return {
|
|
13868
13886
|
id: params.name,
|
|
13869
13887
|
accessorKey: params.name,
|
|
13870
13888
|
header: "",
|
|
13871
|
-
cell: /* @__PURE__ */ __name(({ row }) => params.toggleId ? /* @__PURE__ */
|
|
13889
|
+
cell: /* @__PURE__ */ __name(({ row }) => params.toggleId ? /* @__PURE__ */ jsx157(
|
|
13872
13890
|
Checkbox,
|
|
13873
13891
|
{
|
|
13874
13892
|
checked: params.checkedIds?.includes(row.getValue(params.name)) || false,
|
|
@@ -13885,26 +13903,26 @@ var cellId = /* @__PURE__ */ __name((params) => {
|
|
|
13885
13903
|
}, "cellId");
|
|
13886
13904
|
|
|
13887
13905
|
// src/components/tables/cells/cell.link.tsx
|
|
13888
|
-
import { jsx as
|
|
13906
|
+
import { jsx as jsx158 } from "react/jsx-runtime";
|
|
13889
13907
|
var cellLink = /* @__PURE__ */ __name((params) => {
|
|
13890
13908
|
return {
|
|
13891
13909
|
id: params.name,
|
|
13892
13910
|
accessorKey: params.name,
|
|
13893
13911
|
header: params.title,
|
|
13894
|
-
cell: /* @__PURE__ */ __name(({ row }) => /* @__PURE__ */
|
|
13912
|
+
cell: /* @__PURE__ */ __name(({ row }) => /* @__PURE__ */ jsx158(Link, { href: params.generateUrl(row.getValue(params.id)), children: row.getValue(params.name) }), "cell"),
|
|
13895
13913
|
enableSorting: false,
|
|
13896
13914
|
enableHiding: false
|
|
13897
13915
|
};
|
|
13898
13916
|
}, "cellLink");
|
|
13899
13917
|
|
|
13900
13918
|
// src/components/tables/cells/cell.url.tsx
|
|
13901
|
-
import { jsx as
|
|
13919
|
+
import { jsx as jsx159 } from "react/jsx-runtime";
|
|
13902
13920
|
var cellUrl = /* @__PURE__ */ __name((params) => {
|
|
13903
13921
|
return {
|
|
13904
13922
|
id: params.name,
|
|
13905
13923
|
accessorKey: params.name,
|
|
13906
13924
|
header: params.title,
|
|
13907
|
-
cell: /* @__PURE__ */ __name(({ row }) => /* @__PURE__ */
|
|
13925
|
+
cell: /* @__PURE__ */ __name(({ row }) => /* @__PURE__ */ jsx159(Link, { href: row.getValue(params.name), children: row.getValue(params.name) }), "cell"),
|
|
13908
13926
|
enableSorting: false,
|
|
13909
13927
|
enableHiding: false
|
|
13910
13928
|
};
|
|
@@ -13912,7 +13930,7 @@ var cellUrl = /* @__PURE__ */ __name((params) => {
|
|
|
13912
13930
|
|
|
13913
13931
|
// src/client/context/JsonApiProvider.tsx
|
|
13914
13932
|
import { useEffect as useEffect42, useMemo as useMemo19 } from "react";
|
|
13915
|
-
import { jsx as
|
|
13933
|
+
import { jsx as jsx160 } from "react/jsx-runtime";
|
|
13916
13934
|
function JsonApiProvider({ config, children }) {
|
|
13917
13935
|
useEffect42(() => {
|
|
13918
13936
|
if (config.bootstrapper) {
|
|
@@ -13920,7 +13938,7 @@ function JsonApiProvider({ config, children }) {
|
|
|
13920
13938
|
}
|
|
13921
13939
|
}, [config.bootstrapper]);
|
|
13922
13940
|
const memoizedConfig = useMemo19(() => config, [config]);
|
|
13923
|
-
return /* @__PURE__ */
|
|
13941
|
+
return /* @__PURE__ */ jsx160(JsonApiContext.Provider, { value: memoizedConfig, children });
|
|
13924
13942
|
}
|
|
13925
13943
|
__name(JsonApiProvider, "JsonApiProvider");
|
|
13926
13944
|
|
|
@@ -14144,7 +14162,7 @@ __name(useRehydrationList, "useRehydrationList");
|
|
|
14144
14162
|
// src/features/company/hooks/useCompanyTableStructure.tsx
|
|
14145
14163
|
import { useTranslations as useTranslations52 } from "next-intl";
|
|
14146
14164
|
import { useMemo as useMemo21 } from "react";
|
|
14147
|
-
import { jsx as
|
|
14165
|
+
import { jsx as jsx161 } from "react/jsx-runtime";
|
|
14148
14166
|
var useCompanyTableStructure = /* @__PURE__ */ __name((params) => {
|
|
14149
14167
|
const t = useTranslations52();
|
|
14150
14168
|
const generateUrl = usePageUrlGenerator();
|
|
@@ -14173,7 +14191,7 @@ var useCompanyTableStructure = /* @__PURE__ */ __name((params) => {
|
|
|
14173
14191
|
header: t(`user.fields.name.label`),
|
|
14174
14192
|
cell: /* @__PURE__ */ __name(({ row }) => {
|
|
14175
14193
|
const company = row.original.jsonApiData;
|
|
14176
|
-
return /* @__PURE__ */
|
|
14194
|
+
return /* @__PURE__ */ jsx161(
|
|
14177
14195
|
Link,
|
|
14178
14196
|
{
|
|
14179
14197
|
href: hasRole(getRoleId().Administrator) ? generateUrl({
|
|
@@ -14276,7 +14294,7 @@ __name(useSubscriptionStatus, "useSubscriptionStatus");
|
|
|
14276
14294
|
// src/features/role/hooks/useRoleTableStructure.tsx
|
|
14277
14295
|
import { useTranslations as useTranslations53 } from "next-intl";
|
|
14278
14296
|
import { useMemo as useMemo23 } from "react";
|
|
14279
|
-
import { Fragment as Fragment24, jsx as
|
|
14297
|
+
import { Fragment as Fragment24, jsx as jsx162 } from "react/jsx-runtime";
|
|
14280
14298
|
var useRoleTableStructure = /* @__PURE__ */ __name((params) => {
|
|
14281
14299
|
const t = useTranslations53();
|
|
14282
14300
|
const generateUrl = usePageUrlGenerator();
|
|
@@ -14304,7 +14322,7 @@ var useRoleTableStructure = /* @__PURE__ */ __name((params) => {
|
|
|
14304
14322
|
header: t(`role.fields.name.label`),
|
|
14305
14323
|
cell: /* @__PURE__ */ __name(({ row }) => {
|
|
14306
14324
|
const role = row.original.jsonApiData;
|
|
14307
|
-
return /* @__PURE__ */
|
|
14325
|
+
return /* @__PURE__ */ jsx162(Link, { href: generateUrl({ page: Modules.Role, id: role.id }), children: row.getValue("name") });
|
|
14308
14326
|
}, "cell"),
|
|
14309
14327
|
enableSorting: false,
|
|
14310
14328
|
enableHiding: false
|
|
@@ -14313,7 +14331,7 @@ var useRoleTableStructure = /* @__PURE__ */ __name((params) => {
|
|
|
14313
14331
|
id: "description",
|
|
14314
14332
|
accessorKey: "description",
|
|
14315
14333
|
header: t(`role.fields.description.label`),
|
|
14316
|
-
cell: /* @__PURE__ */ __name(({ row }) => /* @__PURE__ */
|
|
14334
|
+
cell: /* @__PURE__ */ __name(({ row }) => /* @__PURE__ */ jsx162(Fragment24, { children: row.getValue("description") }), "cell"),
|
|
14317
14335
|
enableSorting: false,
|
|
14318
14336
|
enableHiding: false
|
|
14319
14337
|
}),
|
|
@@ -14331,7 +14349,7 @@ var useRoleTableStructure = /* @__PURE__ */ __name((params) => {
|
|
|
14331
14349
|
// src/features/content/hooks/useContentTableStructure.tsx
|
|
14332
14350
|
import { useTranslations as useTranslations54 } from "next-intl";
|
|
14333
14351
|
import { useMemo as useMemo24 } from "react";
|
|
14334
|
-
import { Fragment as Fragment25, jsx as
|
|
14352
|
+
import { Fragment as Fragment25, jsx as jsx163, jsxs as jsxs93 } from "react/jsx-runtime";
|
|
14335
14353
|
var useContentTableStructure = /* @__PURE__ */ __name((params) => {
|
|
14336
14354
|
const t = useTranslations54();
|
|
14337
14355
|
const generateUrl = usePageUrlGenerator();
|
|
@@ -14362,11 +14380,11 @@ var useContentTableStructure = /* @__PURE__ */ __name((params) => {
|
|
|
14362
14380
|
const contentModule = content.contentType ? Modules.findByModelName(content.contentType) : void 0;
|
|
14363
14381
|
const link = contentModule ? generateUrl({ page: contentModule, id: content.id }) : "#";
|
|
14364
14382
|
return /* @__PURE__ */ jsxs93(Tooltip2, { children: [
|
|
14365
|
-
/* @__PURE__ */
|
|
14383
|
+
/* @__PURE__ */ jsx163(TooltipTrigger, { className: "flex items-center justify-start space-x-2", children: /* @__PURE__ */ jsxs93(Fragment25, { children: [
|
|
14366
14384
|
contentModule && getIconByModule({ module: contentModule, className: "h-4 w-4" }),
|
|
14367
|
-
/* @__PURE__ */
|
|
14385
|
+
/* @__PURE__ */ jsx163(Link, { href: link, children: content.name })
|
|
14368
14386
|
] }) }),
|
|
14369
|
-
/* @__PURE__ */
|
|
14387
|
+
/* @__PURE__ */ jsx163(TooltipContent, { children: content.tldr })
|
|
14370
14388
|
] });
|
|
14371
14389
|
}, "cell"),
|
|
14372
14390
|
enableSorting: false,
|
|
@@ -14378,17 +14396,17 @@ var useContentTableStructure = /* @__PURE__ */ __name((params) => {
|
|
|
14378
14396
|
header: t(`common.relevance`),
|
|
14379
14397
|
cell: /* @__PURE__ */ __name(({ row }) => {
|
|
14380
14398
|
const content = row.original.jsonApiData;
|
|
14381
|
-
if (!content.relevance) return /* @__PURE__ */
|
|
14399
|
+
if (!content.relevance) return /* @__PURE__ */ jsx163(Fragment25, {});
|
|
14382
14400
|
const response = `${content.relevance.toFixed(0)}%`;
|
|
14383
14401
|
return /* @__PURE__ */ jsxs93("div", { className: "relative flex h-5 w-20 items-center justify-center overflow-clip rounded border text-center", children: [
|
|
14384
|
-
/* @__PURE__ */
|
|
14402
|
+
/* @__PURE__ */ jsx163(
|
|
14385
14403
|
"div",
|
|
14386
14404
|
{
|
|
14387
14405
|
className: `bg-accent absolute top-0 left-0 h-full opacity-${Math.round(content.relevance)}`,
|
|
14388
14406
|
style: { width: `${content.relevance}%` }
|
|
14389
14407
|
}
|
|
14390
14408
|
),
|
|
14391
|
-
/* @__PURE__ */
|
|
14409
|
+
/* @__PURE__ */ jsx163(
|
|
14392
14410
|
"span",
|
|
14393
14411
|
{
|
|
14394
14412
|
className: `relative text-xs ${content.relevance < 40 ? "text-muted-foreground" : "text-accent-foreground font-semibold"}`,
|
|
@@ -14406,7 +14424,7 @@ var useContentTableStructure = /* @__PURE__ */ __name((params) => {
|
|
|
14406
14424
|
header: t(`common.relationships.author.label`),
|
|
14407
14425
|
cell: /* @__PURE__ */ __name(({ row }) => {
|
|
14408
14426
|
const content = row.original.jsonApiData;
|
|
14409
|
-
return /* @__PURE__ */
|
|
14427
|
+
return /* @__PURE__ */ jsx163(ContributorsList, { content });
|
|
14410
14428
|
}, "cell"),
|
|
14411
14429
|
enableSorting: false,
|
|
14412
14430
|
enableHiding: false
|
|
@@ -14734,7 +14752,7 @@ import { memo, useMemo as useMemo25, useState as useState55 } from "react";
|
|
|
14734
14752
|
import { RefreshCw, Search, X as X3 } from "lucide-react";
|
|
14735
14753
|
import { useTranslations as useTranslations55 } from "next-intl";
|
|
14736
14754
|
import { useCallback as useCallback34, useEffect as useEffect47, useRef as useRef26, useState as useState54 } from "react";
|
|
14737
|
-
import { jsx as
|
|
14755
|
+
import { jsx as jsx164, jsxs as jsxs94 } from "react/jsx-runtime";
|
|
14738
14756
|
function ContentTableSearch({ data }) {
|
|
14739
14757
|
const t = useTranslations55();
|
|
14740
14758
|
const searchTermRef = useRef26("");
|
|
@@ -14781,14 +14799,14 @@ function ContentTableSearch({ data }) {
|
|
|
14781
14799
|
{
|
|
14782
14800
|
className: `relative flex h-6 items-center text-xs font-normal transition-all duration-300 ease-in-out ${isExpanded ? "w-64" : "w-6"}`,
|
|
14783
14801
|
children: [
|
|
14784
|
-
/* @__PURE__ */
|
|
14802
|
+
/* @__PURE__ */ jsx164(
|
|
14785
14803
|
Search,
|
|
14786
14804
|
{
|
|
14787
14805
|
className: `absolute top-1 left-1 h-4 w-4 transition-colors ${isExpanded ? "text-muted-foreground" : "text-muted-foreground hover:text-foreground cursor-pointer"}`,
|
|
14788
14806
|
onClick: handleSearchIconClick
|
|
14789
14807
|
}
|
|
14790
14808
|
),
|
|
14791
|
-
isExpanded && /* @__PURE__ */
|
|
14809
|
+
isExpanded && /* @__PURE__ */ jsx164(
|
|
14792
14810
|
Input,
|
|
14793
14811
|
{
|
|
14794
14812
|
ref: inputRef,
|
|
@@ -14806,8 +14824,8 @@ function ContentTableSearch({ data }) {
|
|
|
14806
14824
|
value: searchTerm
|
|
14807
14825
|
}
|
|
14808
14826
|
),
|
|
14809
|
-
isExpanded && isSearching && /* @__PURE__ */
|
|
14810
|
-
isExpanded && !isSearching && searchTermRef.current && /* @__PURE__ */
|
|
14827
|
+
isExpanded && isSearching && /* @__PURE__ */ jsx164(RefreshCw, { className: "text-muted-foreground absolute top-1 right-1 h-4 w-4 animate-spin" }),
|
|
14828
|
+
isExpanded && !isSearching && searchTermRef.current && /* @__PURE__ */ jsx164(
|
|
14811
14829
|
X3,
|
|
14812
14830
|
{
|
|
14813
14831
|
className: "text-muted-foreground hover:text-foreground absolute top-1 right-1 h-4 w-4 cursor-pointer",
|
|
@@ -14821,7 +14839,7 @@ function ContentTableSearch({ data }) {
|
|
|
14821
14839
|
__name(ContentTableSearch, "ContentTableSearch");
|
|
14822
14840
|
|
|
14823
14841
|
// src/components/tables/ContentListTable.tsx
|
|
14824
|
-
import { Fragment as Fragment26, jsx as
|
|
14842
|
+
import { Fragment as Fragment26, jsx as jsx165, jsxs as jsxs95 } from "react/jsx-runtime";
|
|
14825
14843
|
var EMPTY_ARRAY = [];
|
|
14826
14844
|
var ContentListTable = memo(/* @__PURE__ */ __name(function ContentListTable2(props) {
|
|
14827
14845
|
const { data, fields, checkedIds, toggleId, allowSearch, filters: _filters, fullWidth } = props;
|
|
@@ -14862,15 +14880,15 @@ var ContentListTable = memo(/* @__PURE__ */ __name(function ContentListTable2(pr
|
|
|
14862
14880
|
});
|
|
14863
14881
|
const rowModel = tableData ? table.getRowModel() : null;
|
|
14864
14882
|
const showFooter = !!(data.next || data.previous);
|
|
14865
|
-
return /* @__PURE__ */
|
|
14883
|
+
return /* @__PURE__ */ jsx165("div", { className: "flex w-full flex-col", children: /* @__PURE__ */ jsx165("div", { className: cn(`overflow-clip`, fullWidth ? `` : `rounded-md border`), children: /* @__PURE__ */ jsxs95(Table, { children: [
|
|
14866
14884
|
/* @__PURE__ */ jsxs95(TableHeader, { className: "bg-muted font-semibold", children: [
|
|
14867
|
-
props.title && /* @__PURE__ */
|
|
14885
|
+
props.title && /* @__PURE__ */ jsx165(TableRow, { children: /* @__PURE__ */ jsx165(
|
|
14868
14886
|
TableHead,
|
|
14869
14887
|
{
|
|
14870
14888
|
className: "bg-card rounded-t-lg text-primary p-4 text-left font-bold",
|
|
14871
14889
|
colSpan: tableColumns.length,
|
|
14872
14890
|
children: /* @__PURE__ */ jsxs95("div", { className: "flex w-full items-center justify-between gap-x-2", children: [
|
|
14873
|
-
/* @__PURE__ */
|
|
14891
|
+
/* @__PURE__ */ jsx165("div", { className: "w-full", children: /* @__PURE__ */ jsxs95(
|
|
14874
14892
|
"div",
|
|
14875
14893
|
{
|
|
14876
14894
|
className: cn(
|
|
@@ -14878,7 +14896,7 @@ var ContentListTable = memo(/* @__PURE__ */ __name(function ContentListTable2(pr
|
|
|
14878
14896
|
fullWidth ? `text-lg` : `text-sm`
|
|
14879
14897
|
),
|
|
14880
14898
|
children: [
|
|
14881
|
-
props.tableGeneratorType.icon && /* @__PURE__ */
|
|
14899
|
+
props.tableGeneratorType.icon && /* @__PURE__ */ jsx165(
|
|
14882
14900
|
props.tableGeneratorType.icon,
|
|
14883
14901
|
{
|
|
14884
14902
|
className: cn(`text-primary`, fullWidth ? `h-6 w-6` : `h-4 w-4`)
|
|
@@ -14891,22 +14909,22 @@ var ContentListTable = memo(/* @__PURE__ */ __name(function ContentListTable2(pr
|
|
|
14891
14909
|
(props.functions || props.filters || allowSearch) && /* @__PURE__ */ jsxs95(Fragment26, { children: [
|
|
14892
14910
|
props.functions,
|
|
14893
14911
|
props.filters,
|
|
14894
|
-
/* @__PURE__ */
|
|
14912
|
+
/* @__PURE__ */ jsx165(ContentTableSearch, { data })
|
|
14895
14913
|
] })
|
|
14896
14914
|
] })
|
|
14897
14915
|
}
|
|
14898
14916
|
) }),
|
|
14899
|
-
table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */
|
|
14917
|
+
table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx165(TableRow, { children: headerGroup.headers.map((header) => {
|
|
14900
14918
|
const meta = header.column.columnDef.meta;
|
|
14901
|
-
return /* @__PURE__ */
|
|
14919
|
+
return /* @__PURE__ */ jsx165(TableHead, { className: meta?.className, children: header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext()) }, header.id);
|
|
14902
14920
|
}) }, headerGroup.id))
|
|
14903
14921
|
] }),
|
|
14904
|
-
/* @__PURE__ */
|
|
14922
|
+
/* @__PURE__ */ jsx165(TableBody, { children: rowModel && rowModel.rows?.length ? rowModel.rows.map((row) => /* @__PURE__ */ jsx165(TableRow, { children: row.getVisibleCells().map((cell) => {
|
|
14905
14923
|
const meta = cell.column.columnDef.meta;
|
|
14906
|
-
return /* @__PURE__ */
|
|
14907
|
-
}) }, row.id)) : /* @__PURE__ */
|
|
14908
|
-
showFooter && /* @__PURE__ */
|
|
14909
|
-
/* @__PURE__ */
|
|
14924
|
+
return /* @__PURE__ */ jsx165(TableCell, { className: meta?.className, children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id);
|
|
14925
|
+
}) }, row.id)) : /* @__PURE__ */ jsx165(TableRow, { children: /* @__PURE__ */ jsx165(TableCell, { colSpan: tableColumns.length, className: "h-24 text-center", children: "No results." }) }) }),
|
|
14926
|
+
showFooter && /* @__PURE__ */ jsx165(TableFooter, { children: /* @__PURE__ */ jsx165(TableRow, { children: /* @__PURE__ */ jsx165(TableCell, { colSpan: tableColumns.length, className: "bg-card py-4 text-right", children: /* @__PURE__ */ jsxs95("div", { className: "flex items-center justify-end space-x-2", children: [
|
|
14927
|
+
/* @__PURE__ */ jsx165(
|
|
14910
14928
|
Button,
|
|
14911
14929
|
{
|
|
14912
14930
|
variant: "outline",
|
|
@@ -14916,11 +14934,11 @@ var ContentListTable = memo(/* @__PURE__ */ __name(function ContentListTable2(pr
|
|
|
14916
14934
|
data.previous?.(true);
|
|
14917
14935
|
},
|
|
14918
14936
|
disabled: !data.previous,
|
|
14919
|
-
children: /* @__PURE__ */
|
|
14937
|
+
children: /* @__PURE__ */ jsx165(ChevronLeft, { className: "h-4 w-4" })
|
|
14920
14938
|
}
|
|
14921
14939
|
),
|
|
14922
|
-
data.pageInfo && /* @__PURE__ */
|
|
14923
|
-
/* @__PURE__ */
|
|
14940
|
+
data.pageInfo && /* @__PURE__ */ jsx165("span", { className: "text-muted-foreground text-xs", children: `${data.pageInfo.startItem}-${data.pageInfo.endItem}${data.total ? ` of ${data.total}` : ""}` }),
|
|
14941
|
+
/* @__PURE__ */ jsx165(
|
|
14924
14942
|
Button,
|
|
14925
14943
|
{
|
|
14926
14944
|
variant: "outline",
|
|
@@ -14930,7 +14948,7 @@ var ContentListTable = memo(/* @__PURE__ */ __name(function ContentListTable2(pr
|
|
|
14930
14948
|
data.next?.(true);
|
|
14931
14949
|
},
|
|
14932
14950
|
disabled: !data.next,
|
|
14933
|
-
children: /* @__PURE__ */
|
|
14951
|
+
children: /* @__PURE__ */ jsx165(ChevronRight, { className: "h-4 w-4" })
|
|
14934
14952
|
}
|
|
14935
14953
|
)
|
|
14936
14954
|
] }) }) }) })
|
|
@@ -14939,7 +14957,7 @@ var ContentListTable = memo(/* @__PURE__ */ __name(function ContentListTable2(pr
|
|
|
14939
14957
|
|
|
14940
14958
|
// src/components/grids/ContentListGrid.tsx
|
|
14941
14959
|
import { useEffect as useEffect48, useRef as useRef27 } from "react";
|
|
14942
|
-
import { Fragment as Fragment27, jsx as
|
|
14960
|
+
import { Fragment as Fragment27, jsx as jsx166, jsxs as jsxs96 } from "react/jsx-runtime";
|
|
14943
14961
|
var DEFAULT_GRID_CLASSES = "grid grid-cols-2 gap-4 p-4 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5";
|
|
14944
14962
|
function ContentListGrid(props) {
|
|
14945
14963
|
const { data, ItemComponent, allowSearch, fullWidth, gridClassName } = props;
|
|
@@ -14955,9 +14973,9 @@ function ContentListGrid(props) {
|
|
|
14955
14973
|
observer.observe(sentinelRef.current);
|
|
14956
14974
|
return () => observer.disconnect();
|
|
14957
14975
|
}, [data.next]);
|
|
14958
|
-
return /* @__PURE__ */
|
|
14976
|
+
return /* @__PURE__ */ jsx166("div", { className: "flex w-full flex-col", children: /* @__PURE__ */ jsxs96("div", { className: cn("overflow-clip", fullWidth ? "" : "rounded-md border"), children: [
|
|
14959
14977
|
props.title !== void 0 && /* @__PURE__ */ jsxs96("div", { className: "bg-card text-primary flex items-center justify-between gap-x-2 rounded-t-lg border-b p-4 font-bold", children: [
|
|
14960
|
-
/* @__PURE__ */
|
|
14978
|
+
/* @__PURE__ */ jsx166("div", { className: "w-full", children: /* @__PURE__ */ jsxs96(
|
|
14961
14979
|
"div",
|
|
14962
14980
|
{
|
|
14963
14981
|
className: cn(
|
|
@@ -14965,7 +14983,7 @@ function ContentListGrid(props) {
|
|
|
14965
14983
|
fullWidth ? "text-lg" : "text-sm"
|
|
14966
14984
|
),
|
|
14967
14985
|
children: [
|
|
14968
|
-
props.tableGeneratorType.icon && /* @__PURE__ */
|
|
14986
|
+
props.tableGeneratorType.icon && /* @__PURE__ */ jsx166(props.tableGeneratorType.icon, { className: cn("text-primary", fullWidth ? "h-6 w-6" : "h-4 w-4") }),
|
|
14969
14987
|
props.title
|
|
14970
14988
|
]
|
|
14971
14989
|
}
|
|
@@ -14973,14 +14991,14 @@ function ContentListGrid(props) {
|
|
|
14973
14991
|
(props.functions || props.filters || allowSearch) && /* @__PURE__ */ jsxs96(Fragment27, { children: [
|
|
14974
14992
|
props.functions,
|
|
14975
14993
|
props.filters,
|
|
14976
|
-
allowSearch && /* @__PURE__ */
|
|
14994
|
+
allowSearch && /* @__PURE__ */ jsx166(ContentTableSearch, { data })
|
|
14977
14995
|
] })
|
|
14978
14996
|
] }),
|
|
14979
|
-
data.data && data.data.length > 0 ? /* @__PURE__ */
|
|
14997
|
+
data.data && data.data.length > 0 ? /* @__PURE__ */ jsx166("div", { className: gridClassName ?? DEFAULT_GRID_CLASSES, children: data.data.map((item) => {
|
|
14980
14998
|
const id = item.id;
|
|
14981
|
-
return /* @__PURE__ */
|
|
14982
|
-
}) }) : /* @__PURE__ */
|
|
14983
|
-
data.next && /* @__PURE__ */
|
|
14999
|
+
return /* @__PURE__ */ jsx166(ItemComponent, { item }, id);
|
|
15000
|
+
}) }) : /* @__PURE__ */ jsx166("div", { className: "text-muted-foreground p-8 text-center text-sm", children: "No results." }),
|
|
15001
|
+
data.next && /* @__PURE__ */ jsx166("div", { ref: sentinelRef, style: { height: 1 } })
|
|
14984
15002
|
] }) });
|
|
14985
15003
|
}
|
|
14986
15004
|
__name(ContentListGrid, "ContentListGrid");
|
|
@@ -15040,7 +15058,7 @@ __name(validateItalianTaxCode, "validateItalianTaxCode");
|
|
|
15040
15058
|
import { useTranslations as useTranslations56 } from "next-intl";
|
|
15041
15059
|
import { forwardRef as forwardRef8, useCallback as useCallback35, useImperativeHandle as useImperativeHandle2, useRef as useRef28, useState as useState56 } from "react";
|
|
15042
15060
|
import { z as z4 } from "zod";
|
|
15043
|
-
import { jsx as
|
|
15061
|
+
import { jsx as jsx167, jsxs as jsxs97 } from "react/jsx-runtime";
|
|
15044
15062
|
var ItalianFiscalData = forwardRef8(/* @__PURE__ */ __name(function ItalianFiscalData2({ initialData }, ref) {
|
|
15045
15063
|
const t = useTranslations56();
|
|
15046
15064
|
const initialRef = useRef28(initialData);
|
|
@@ -15086,8 +15104,8 @@ var ItalianFiscalData = forwardRef8(/* @__PURE__ */ __name(function ItalianFisca
|
|
|
15086
15104
|
}));
|
|
15087
15105
|
return /* @__PURE__ */ jsxs97("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-3", children: [
|
|
15088
15106
|
/* @__PURE__ */ jsxs97(Field, { "data-invalid": !!fiscalErrors.codice_fiscale, children: [
|
|
15089
|
-
/* @__PURE__ */
|
|
15090
|
-
/* @__PURE__ */
|
|
15107
|
+
/* @__PURE__ */ jsx167(FieldLabel, { children: t("common.fields.codice_fiscale.label") }),
|
|
15108
|
+
/* @__PURE__ */ jsx167(
|
|
15091
15109
|
Input,
|
|
15092
15110
|
{
|
|
15093
15111
|
value: fiscalData.codice_fiscale || "",
|
|
@@ -15095,11 +15113,11 @@ var ItalianFiscalData = forwardRef8(/* @__PURE__ */ __name(function ItalianFisca
|
|
|
15095
15113
|
placeholder: t("common.fields.codice_fiscale.placeholder")
|
|
15096
15114
|
}
|
|
15097
15115
|
),
|
|
15098
|
-
fiscalErrors.codice_fiscale && /* @__PURE__ */
|
|
15116
|
+
fiscalErrors.codice_fiscale && /* @__PURE__ */ jsx167(FieldError, { children: fiscalErrors.codice_fiscale })
|
|
15099
15117
|
] }),
|
|
15100
15118
|
/* @__PURE__ */ jsxs97(Field, { "data-invalid": !!fiscalErrors.partita_iva, children: [
|
|
15101
|
-
/* @__PURE__ */
|
|
15102
|
-
/* @__PURE__ */
|
|
15119
|
+
/* @__PURE__ */ jsx167(FieldLabel, { children: t("common.fields.partita_iva.label") }),
|
|
15120
|
+
/* @__PURE__ */ jsx167(
|
|
15103
15121
|
Input,
|
|
15104
15122
|
{
|
|
15105
15123
|
value: fiscalData.partita_iva || "",
|
|
@@ -15107,11 +15125,11 @@ var ItalianFiscalData = forwardRef8(/* @__PURE__ */ __name(function ItalianFisca
|
|
|
15107
15125
|
placeholder: t("common.fields.partita_iva.placeholder")
|
|
15108
15126
|
}
|
|
15109
15127
|
),
|
|
15110
|
-
fiscalErrors.partita_iva && /* @__PURE__ */
|
|
15128
|
+
fiscalErrors.partita_iva && /* @__PURE__ */ jsx167(FieldError, { children: fiscalErrors.partita_iva })
|
|
15111
15129
|
] }),
|
|
15112
15130
|
/* @__PURE__ */ jsxs97(Field, { children: [
|
|
15113
|
-
/* @__PURE__ */
|
|
15114
|
-
/* @__PURE__ */
|
|
15131
|
+
/* @__PURE__ */ jsx167(FieldLabel, { children: t("common.fields.sdi.label") }),
|
|
15132
|
+
/* @__PURE__ */ jsx167(
|
|
15115
15133
|
Input,
|
|
15116
15134
|
{
|
|
15117
15135
|
value: fiscalData.sdi || "",
|
|
@@ -15121,8 +15139,8 @@ var ItalianFiscalData = forwardRef8(/* @__PURE__ */ __name(function ItalianFisca
|
|
|
15121
15139
|
)
|
|
15122
15140
|
] }),
|
|
15123
15141
|
/* @__PURE__ */ jsxs97(Field, { children: [
|
|
15124
|
-
/* @__PURE__ */
|
|
15125
|
-
/* @__PURE__ */
|
|
15142
|
+
/* @__PURE__ */ jsx167(FieldLabel, { children: t("common.fields.rea.label") }),
|
|
15143
|
+
/* @__PURE__ */ jsx167(
|
|
15126
15144
|
Input,
|
|
15127
15145
|
{
|
|
15128
15146
|
value: fiscalData.rea || "",
|
|
@@ -15132,8 +15150,8 @@ var ItalianFiscalData = forwardRef8(/* @__PURE__ */ __name(function ItalianFisca
|
|
|
15132
15150
|
)
|
|
15133
15151
|
] }),
|
|
15134
15152
|
/* @__PURE__ */ jsxs97(Field, { "data-invalid": !!fiscalErrors.pec, children: [
|
|
15135
|
-
/* @__PURE__ */
|
|
15136
|
-
/* @__PURE__ */
|
|
15153
|
+
/* @__PURE__ */ jsx167(FieldLabel, { children: t("common.fields.pec.label") }),
|
|
15154
|
+
/* @__PURE__ */ jsx167(
|
|
15137
15155
|
Input,
|
|
15138
15156
|
{
|
|
15139
15157
|
value: fiscalData.pec || "",
|
|
@@ -15141,7 +15159,7 @@ var ItalianFiscalData = forwardRef8(/* @__PURE__ */ __name(function ItalianFisca
|
|
|
15141
15159
|
placeholder: t("common.fields.pec.placeholder")
|
|
15142
15160
|
}
|
|
15143
15161
|
),
|
|
15144
|
-
fiscalErrors.pec && /* @__PURE__ */
|
|
15162
|
+
fiscalErrors.pec && /* @__PURE__ */ jsx167(FieldError, { children: fiscalErrors.pec })
|
|
15145
15163
|
] })
|
|
15146
15164
|
] });
|
|
15147
15165
|
}, "ItalianFiscalData"));
|
|
@@ -15166,7 +15184,7 @@ import { z as z5 } from "zod";
|
|
|
15166
15184
|
|
|
15167
15185
|
// src/features/auth/components/GdprConsentSection.tsx
|
|
15168
15186
|
import { useTranslations as useTranslations57 } from "next-intl";
|
|
15169
|
-
import { Fragment as Fragment28, jsx as
|
|
15187
|
+
import { Fragment as Fragment28, jsx as jsx168, jsxs as jsxs98 } from "react/jsx-runtime";
|
|
15170
15188
|
function GdprConsentSection({
|
|
15171
15189
|
form,
|
|
15172
15190
|
termsCheckboxId = "termsAccepted",
|
|
@@ -15176,15 +15194,15 @@ function GdprConsentSection({
|
|
|
15176
15194
|
const termsLabel = /* @__PURE__ */ jsxs98(Fragment28, { children: [
|
|
15177
15195
|
t("terms_prefix"),
|
|
15178
15196
|
" ",
|
|
15179
|
-
/* @__PURE__ */
|
|
15197
|
+
/* @__PURE__ */ jsx168(Link, { href: "/terms", target: "_blank", rel: "noopener", className: "underline", children: t("terms_of_service") }),
|
|
15180
15198
|
" ",
|
|
15181
15199
|
t("and"),
|
|
15182
15200
|
" ",
|
|
15183
|
-
/* @__PURE__ */
|
|
15201
|
+
/* @__PURE__ */ jsx168(Link, { href: "/privacy", target: "_blank", rel: "noopener", className: "underline", children: t("privacy_policy") })
|
|
15184
15202
|
] });
|
|
15185
15203
|
return /* @__PURE__ */ jsxs98("div", { className: "space-y-4 py-4", children: [
|
|
15186
|
-
/* @__PURE__ */
|
|
15187
|
-
/* @__PURE__ */
|
|
15204
|
+
/* @__PURE__ */ jsx168(GdprConsentCheckbox, { form, id: termsCheckboxId, label: termsLabel, required: true }),
|
|
15205
|
+
/* @__PURE__ */ jsx168(
|
|
15188
15206
|
GdprConsentCheckbox,
|
|
15189
15207
|
{
|
|
15190
15208
|
form,
|
|
@@ -15198,7 +15216,7 @@ function GdprConsentSection({
|
|
|
15198
15216
|
__name(GdprConsentSection, "GdprConsentSection");
|
|
15199
15217
|
|
|
15200
15218
|
// src/features/auth/components/forms/Register.tsx
|
|
15201
|
-
import { Fragment as Fragment29, jsx as
|
|
15219
|
+
import { Fragment as Fragment29, jsx as jsx169, jsxs as jsxs99 } from "react/jsx-runtime";
|
|
15202
15220
|
var REFERRAL_COOKIE_NAME = "referral_code";
|
|
15203
15221
|
function getReferralCode() {
|
|
15204
15222
|
if (typeof document === "undefined") return null;
|
|
@@ -15317,54 +15335,54 @@ function Register() {
|
|
|
15317
15335
|
}, "onSubmit");
|
|
15318
15336
|
if (registrationMode === "waitlist" && inviteCode && isValidatingInvite) {
|
|
15319
15337
|
return /* @__PURE__ */ jsxs99(Fragment29, { children: [
|
|
15320
|
-
/* @__PURE__ */
|
|
15321
|
-
/* @__PURE__ */
|
|
15338
|
+
/* @__PURE__ */ jsx169(CardHeader, { children: /* @__PURE__ */ jsxs99(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
|
|
15339
|
+
/* @__PURE__ */ jsx169(Image7, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
|
|
15322
15340
|
t("waitlist.invite.validating_title")
|
|
15323
15341
|
] }) }),
|
|
15324
15342
|
/* @__PURE__ */ jsxs99(CardContent, { className: "flex flex-col items-center justify-center space-y-4 py-8", children: [
|
|
15325
|
-
/* @__PURE__ */
|
|
15326
|
-
/* @__PURE__ */
|
|
15343
|
+
/* @__PURE__ */ jsx169(Loader23, { className: "h-8 w-8 animate-spin text-primary" }),
|
|
15344
|
+
/* @__PURE__ */ jsx169("p", { className: "text-muted-foreground", children: t("waitlist.invite.validating_description") })
|
|
15327
15345
|
] })
|
|
15328
15346
|
] });
|
|
15329
15347
|
}
|
|
15330
15348
|
if (registrationMode === "waitlist" && inviteCode && inviteError) {
|
|
15331
15349
|
return /* @__PURE__ */ jsxs99(Fragment29, { children: [
|
|
15332
|
-
/* @__PURE__ */
|
|
15333
|
-
/* @__PURE__ */
|
|
15350
|
+
/* @__PURE__ */ jsx169(CardHeader, { children: /* @__PURE__ */ jsxs99(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
|
|
15351
|
+
/* @__PURE__ */ jsx169(Image7, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
|
|
15334
15352
|
t("waitlist.invite.invalid_title")
|
|
15335
15353
|
] }) }),
|
|
15336
15354
|
/* @__PURE__ */ jsxs99(CardContent, { className: "text-center", children: [
|
|
15337
|
-
/* @__PURE__ */
|
|
15338
|
-
/* @__PURE__ */
|
|
15339
|
-
/* @__PURE__ */
|
|
15355
|
+
/* @__PURE__ */ jsx169("p", { className: "text-destructive mb-4", children: inviteError }),
|
|
15356
|
+
/* @__PURE__ */ jsx169("p", { className: "mb-4", children: t("waitlist.invite.join_prompt") }),
|
|
15357
|
+
/* @__PURE__ */ jsx169(Link, { href: "/waitlist", className: "text-primary underline", children: t("waitlist.invite.join_link") })
|
|
15340
15358
|
] })
|
|
15341
15359
|
] });
|
|
15342
15360
|
}
|
|
15343
15361
|
if (registrationMode === "waitlist" && !inviteCode) {
|
|
15344
15362
|
return /* @__PURE__ */ jsxs99(Fragment29, { children: [
|
|
15345
|
-
/* @__PURE__ */
|
|
15346
|
-
/* @__PURE__ */
|
|
15363
|
+
/* @__PURE__ */ jsx169(CardHeader, { children: /* @__PURE__ */ jsxs99(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
|
|
15364
|
+
/* @__PURE__ */ jsx169(Image7, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
|
|
15347
15365
|
t("waitlist.invite.registration_title")
|
|
15348
15366
|
] }) }),
|
|
15349
15367
|
/* @__PURE__ */ jsxs99(CardContent, { className: "text-center", children: [
|
|
15350
|
-
/* @__PURE__ */
|
|
15351
|
-
/* @__PURE__ */
|
|
15352
|
-
/* @__PURE__ */
|
|
15368
|
+
/* @__PURE__ */ jsx169("p", { className: "mb-4", children: t("waitlist.invite.registration_description") }),
|
|
15369
|
+
/* @__PURE__ */ jsx169("p", { className: "mb-4", children: t("waitlist.invite.registration_hint") }),
|
|
15370
|
+
/* @__PURE__ */ jsx169(Link, { href: "/waitlist", className: "text-primary underline", children: t("waitlist.invite.join_link") })
|
|
15353
15371
|
] }),
|
|
15354
|
-
/* @__PURE__ */
|
|
15372
|
+
/* @__PURE__ */ jsx169(CardFooter, { className: "flex w-full flex-row justify-between", children: /* @__PURE__ */ jsx169(Link, { href: "#", className: "flex w-full justify-start", onClick: () => setComponentType(0 /* Login */), children: t("auth.buttons.login") }) })
|
|
15355
15373
|
] });
|
|
15356
15374
|
}
|
|
15357
15375
|
return /* @__PURE__ */ jsxs99(Fragment29, { children: [
|
|
15358
15376
|
/* @__PURE__ */ jsxs99(CardHeader, { children: [
|
|
15359
15377
|
/* @__PURE__ */ jsxs99(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
|
|
15360
|
-
/* @__PURE__ */
|
|
15378
|
+
/* @__PURE__ */ jsx169(Image7, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
|
|
15361
15379
|
t(`auth.buttons.register`)
|
|
15362
15380
|
] }),
|
|
15363
|
-
/* @__PURE__ */
|
|
15381
|
+
/* @__PURE__ */ jsx169(CardDescription, { className: "text-sm", children: showConfirmation ? /* @__PURE__ */ jsx169(Fragment29, { children: " " }) : /* @__PURE__ */ jsx169(Fragment29, { children: t(`auth.register_description`) }) })
|
|
15364
15382
|
] }),
|
|
15365
|
-
showConfirmation ? /* @__PURE__ */
|
|
15383
|
+
showConfirmation ? /* @__PURE__ */ jsx169(CardContent, { children: /* @__PURE__ */ jsx169(CardDescription, { className: "text-center text-xl", children: t("auth.register_confirmation") }) }) : /* @__PURE__ */ jsx169(Form, { ...form, children: /* @__PURE__ */ jsxs99("form", { onSubmit: form.handleSubmit(onSubmit), children: [
|
|
15366
15384
|
/* @__PURE__ */ jsxs99(CardContent, { children: [
|
|
15367
|
-
/* @__PURE__ */
|
|
15385
|
+
/* @__PURE__ */ jsx169(
|
|
15368
15386
|
FormInput,
|
|
15369
15387
|
{
|
|
15370
15388
|
isRequired: true,
|
|
@@ -15374,7 +15392,7 @@ function Register() {
|
|
|
15374
15392
|
placeholder: t(`company.fields.name.placeholder`)
|
|
15375
15393
|
}
|
|
15376
15394
|
),
|
|
15377
|
-
/* @__PURE__ */
|
|
15395
|
+
/* @__PURE__ */ jsx169(
|
|
15378
15396
|
FormInput,
|
|
15379
15397
|
{
|
|
15380
15398
|
isRequired: true,
|
|
@@ -15384,7 +15402,7 @@ function Register() {
|
|
|
15384
15402
|
placeholder: t(`user.fields.name.placeholder`)
|
|
15385
15403
|
}
|
|
15386
15404
|
),
|
|
15387
|
-
/* @__PURE__ */
|
|
15405
|
+
/* @__PURE__ */ jsx169(
|
|
15388
15406
|
FormInput,
|
|
15389
15407
|
{
|
|
15390
15408
|
isRequired: true,
|
|
@@ -15394,7 +15412,7 @@ function Register() {
|
|
|
15394
15412
|
placeholder: t(`common.fields.email.placeholder`)
|
|
15395
15413
|
}
|
|
15396
15414
|
),
|
|
15397
|
-
/* @__PURE__ */
|
|
15415
|
+
/* @__PURE__ */ jsx169(
|
|
15398
15416
|
FormPassword,
|
|
15399
15417
|
{
|
|
15400
15418
|
isRequired: true,
|
|
@@ -15404,15 +15422,15 @@ function Register() {
|
|
|
15404
15422
|
placeholder: t(`user.fields.password.placeholder`)
|
|
15405
15423
|
}
|
|
15406
15424
|
),
|
|
15407
|
-
/* @__PURE__ */
|
|
15408
|
-
/* @__PURE__ */
|
|
15425
|
+
/* @__PURE__ */ jsx169(GdprConsentSection, { form }),
|
|
15426
|
+
/* @__PURE__ */ jsx169(Button, { className: "mt-4 w-full", type: "submit", children: t(`auth.buttons.register`) }),
|
|
15409
15427
|
(registrationMode !== "waitlist" || inviteValidated) && (isGoogleAuthEnabled() || isDiscordAuthEnabled()) && /* @__PURE__ */ jsxs99("div", { className: "space-y-4 pt-4", children: [
|
|
15410
15428
|
/* @__PURE__ */ jsxs99("div", { className: "relative", children: [
|
|
15411
|
-
/* @__PURE__ */
|
|
15412
|
-
/* @__PURE__ */
|
|
15429
|
+
/* @__PURE__ */ jsx169("div", { className: "absolute inset-0 flex items-center", children: /* @__PURE__ */ jsx169("span", { className: "w-full border-t" }) }),
|
|
15430
|
+
/* @__PURE__ */ jsx169("div", { className: "relative flex justify-center text-xs uppercase", children: /* @__PURE__ */ jsx169("span", { className: "bg-card px-2 text-muted-foreground", children: t("auth.buttons.or") }) })
|
|
15413
15431
|
] }),
|
|
15414
15432
|
/* @__PURE__ */ jsxs99("div", { className: "space-y-2", children: [
|
|
15415
|
-
isGoogleAuthEnabled() && /* @__PURE__ */
|
|
15433
|
+
isGoogleAuthEnabled() && /* @__PURE__ */ jsx169(
|
|
15416
15434
|
Link,
|
|
15417
15435
|
{
|
|
15418
15436
|
href: `${getPublicApiUrl()}auth/google${buildOAuthQueryParams(inviteCode, referralCode)}`,
|
|
@@ -15425,28 +15443,28 @@ function Register() {
|
|
|
15425
15443
|
type: "button",
|
|
15426
15444
|
children: [
|
|
15427
15445
|
/* @__PURE__ */ jsxs99("svg", { className: "mr-2 h-5 w-5", viewBox: "0 0 24 24", children: [
|
|
15428
|
-
/* @__PURE__ */
|
|
15446
|
+
/* @__PURE__ */ jsx169(
|
|
15429
15447
|
"path",
|
|
15430
15448
|
{
|
|
15431
15449
|
fill: "#4285F4",
|
|
15432
15450
|
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"
|
|
15433
15451
|
}
|
|
15434
15452
|
),
|
|
15435
|
-
/* @__PURE__ */
|
|
15453
|
+
/* @__PURE__ */ jsx169(
|
|
15436
15454
|
"path",
|
|
15437
15455
|
{
|
|
15438
15456
|
fill: "#34A853",
|
|
15439
15457
|
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"
|
|
15440
15458
|
}
|
|
15441
15459
|
),
|
|
15442
|
-
/* @__PURE__ */
|
|
15460
|
+
/* @__PURE__ */ jsx169(
|
|
15443
15461
|
"path",
|
|
15444
15462
|
{
|
|
15445
15463
|
fill: "#FBBC05",
|
|
15446
15464
|
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"
|
|
15447
15465
|
}
|
|
15448
15466
|
),
|
|
15449
|
-
/* @__PURE__ */
|
|
15467
|
+
/* @__PURE__ */ jsx169(
|
|
15450
15468
|
"path",
|
|
15451
15469
|
{
|
|
15452
15470
|
fill: "#EA4335",
|
|
@@ -15460,13 +15478,13 @@ function Register() {
|
|
|
15460
15478
|
)
|
|
15461
15479
|
}
|
|
15462
15480
|
),
|
|
15463
|
-
isDiscordAuthEnabled() && /* @__PURE__ */
|
|
15481
|
+
isDiscordAuthEnabled() && /* @__PURE__ */ jsx169(
|
|
15464
15482
|
Link,
|
|
15465
15483
|
{
|
|
15466
15484
|
href: `${getPublicApiUrl()}auth/discord${buildOAuthQueryParams(inviteCode, referralCode)}`,
|
|
15467
15485
|
className: "flex w-full",
|
|
15468
15486
|
children: /* @__PURE__ */ jsxs99(Button, { className: "w-full", variant: "outline", type: "button", children: [
|
|
15469
|
-
/* @__PURE__ */
|
|
15487
|
+
/* @__PURE__ */ jsx169("svg", { className: "mr-2 h-5 w-5", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx169("path", { d: "M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028 14.09 14.09 0 0 0 1.226-1.994.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z" }) }),
|
|
15470
15488
|
t("waitlist.buttons.register_with_discord")
|
|
15471
15489
|
] })
|
|
15472
15490
|
}
|
|
@@ -15475,7 +15493,7 @@ function Register() {
|
|
|
15475
15493
|
] })
|
|
15476
15494
|
] }),
|
|
15477
15495
|
/* @__PURE__ */ jsxs99(CardFooter, { className: "flex w-full flex-row justify-between", children: [
|
|
15478
|
-
/* @__PURE__ */
|
|
15496
|
+
/* @__PURE__ */ jsx169(
|
|
15479
15497
|
Link,
|
|
15480
15498
|
{
|
|
15481
15499
|
href: "#",
|
|
@@ -15484,7 +15502,7 @@ function Register() {
|
|
|
15484
15502
|
children: t(`auth.buttons.login`)
|
|
15485
15503
|
}
|
|
15486
15504
|
),
|
|
15487
|
-
/* @__PURE__ */
|
|
15505
|
+
/* @__PURE__ */ jsx169(
|
|
15488
15506
|
Link,
|
|
15489
15507
|
{
|
|
15490
15508
|
href: "#",
|
|
@@ -15500,7 +15518,7 @@ function Register() {
|
|
|
15500
15518
|
__name(Register, "Register");
|
|
15501
15519
|
|
|
15502
15520
|
// src/features/auth/contexts/AuthContext.tsx
|
|
15503
|
-
import { jsx as
|
|
15521
|
+
import { jsx as jsx170 } from "react/jsx-runtime";
|
|
15504
15522
|
var AuthContext = createContext20(void 0);
|
|
15505
15523
|
var AuthContextProvider = /* @__PURE__ */ __name(({
|
|
15506
15524
|
children,
|
|
@@ -15514,24 +15532,24 @@ var AuthContextProvider = /* @__PURE__ */ __name(({
|
|
|
15514
15532
|
if (componentType === void 0) return null;
|
|
15515
15533
|
switch (componentType) {
|
|
15516
15534
|
case 0 /* Login */:
|
|
15517
|
-
return /* @__PURE__ */
|
|
15535
|
+
return /* @__PURE__ */ jsx170(Login, {});
|
|
15518
15536
|
case 5 /* Register */:
|
|
15519
|
-
return /* @__PURE__ */
|
|
15537
|
+
return /* @__PURE__ */ jsx170(Register, {});
|
|
15520
15538
|
case 1 /* ForgotPassword */:
|
|
15521
|
-
return /* @__PURE__ */
|
|
15539
|
+
return /* @__PURE__ */ jsx170(ForgotPassword, {});
|
|
15522
15540
|
case 3 /* ActivateAccount */:
|
|
15523
|
-
return /* @__PURE__ */
|
|
15541
|
+
return /* @__PURE__ */ jsx170(ActivateAccount, {});
|
|
15524
15542
|
case 2 /* ResetPassword */:
|
|
15525
|
-
return /* @__PURE__ */
|
|
15543
|
+
return /* @__PURE__ */ jsx170(ResetPassword, {});
|
|
15526
15544
|
case 4 /* AcceptInvitation */:
|
|
15527
|
-
return /* @__PURE__ */
|
|
15545
|
+
return /* @__PURE__ */ jsx170(AcceptInvitation, {});
|
|
15528
15546
|
case "2fa_challenge" /* TwoFactorChallenge */:
|
|
15529
|
-
return /* @__PURE__ */
|
|
15547
|
+
return /* @__PURE__ */ jsx170(TwoFactorChallenge, {});
|
|
15530
15548
|
default:
|
|
15531
|
-
return /* @__PURE__ */
|
|
15549
|
+
return /* @__PURE__ */ jsx170(LandingComponent, {});
|
|
15532
15550
|
}
|
|
15533
15551
|
}, [componentType]);
|
|
15534
|
-
return /* @__PURE__ */
|
|
15552
|
+
return /* @__PURE__ */ jsx170(
|
|
15535
15553
|
AuthContext.Provider,
|
|
15536
15554
|
{
|
|
15537
15555
|
value: {
|
|
@@ -15555,16 +15573,16 @@ var useAuthContext = /* @__PURE__ */ __name(() => {
|
|
|
15555
15573
|
}, "useAuthContext");
|
|
15556
15574
|
|
|
15557
15575
|
// src/features/auth/components/containers/AuthContainer.tsx
|
|
15558
|
-
import { jsx as
|
|
15576
|
+
import { jsx as jsx171 } from "react/jsx-runtime";
|
|
15559
15577
|
function AuthContainer({ componentType, params }) {
|
|
15560
|
-
return /* @__PURE__ */
|
|
15578
|
+
return /* @__PURE__ */ jsx171(AuthContextProvider, { initialComponentType: componentType, initialParams: params, children: /* @__PURE__ */ jsx171(InnerAuthContainer, {}) });
|
|
15561
15579
|
}
|
|
15562
15580
|
__name(AuthContainer, "AuthContainer");
|
|
15563
15581
|
function InnerAuthContainer() {
|
|
15564
15582
|
const { activeComponent } = useAuthContext();
|
|
15565
15583
|
if (activeComponent === null)
|
|
15566
|
-
return /* @__PURE__ */
|
|
15567
|
-
return /* @__PURE__ */
|
|
15584
|
+
return /* @__PURE__ */ jsx171("div", { className: "max-w-sm", children: /* @__PURE__ */ jsx171(Image8, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, className: "animate-spin-slow", priority: true }) });
|
|
15585
|
+
return /* @__PURE__ */ jsx171(Card, { className: "w-full max-w-md", children: activeComponent });
|
|
15568
15586
|
}
|
|
15569
15587
|
__name(InnerAuthContainer, "InnerAuthContainer");
|
|
15570
15588
|
|
|
@@ -15578,7 +15596,7 @@ import { v4 as v48 } from "uuid";
|
|
|
15578
15596
|
import { Copy, Download, RefreshCw as RefreshCw2 } from "lucide-react";
|
|
15579
15597
|
import { useTranslations as useTranslations59 } from "next-intl";
|
|
15580
15598
|
import { useState as useState59 } from "react";
|
|
15581
|
-
import { jsx as
|
|
15599
|
+
import { jsx as jsx172, jsxs as jsxs100 } from "react/jsx-runtime";
|
|
15582
15600
|
function BackupCodesDialog({ remainingCodes, onRegenerate, trigger }) {
|
|
15583
15601
|
const t = useTranslations59();
|
|
15584
15602
|
const [open, setOpen] = useState59(false);
|
|
@@ -15625,52 +15643,52 @@ Keep these codes safe. Each code can only be used once.`;
|
|
|
15625
15643
|
}
|
|
15626
15644
|
}, "handleOpenChange");
|
|
15627
15645
|
return /* @__PURE__ */ jsxs100(Dialog, { open, onOpenChange: handleOpenChange, children: [
|
|
15628
|
-
trigger ? /* @__PURE__ */
|
|
15646
|
+
trigger ? /* @__PURE__ */ jsx172(DialogTrigger, { render: trigger }) : /* @__PURE__ */ jsx172(DialogTrigger, { render: /* @__PURE__ */ jsx172(Button, { variant: "outline", children: t("auth.two_factor.manage_backup_codes") }) }),
|
|
15629
15647
|
/* @__PURE__ */ jsxs100(DialogContent, { className: "sm:max-w-md", children: [
|
|
15630
15648
|
/* @__PURE__ */ jsxs100(DialogHeader, { children: [
|
|
15631
|
-
/* @__PURE__ */
|
|
15632
|
-
/* @__PURE__ */
|
|
15649
|
+
/* @__PURE__ */ jsx172(DialogTitle, { children: t("auth.two_factor.backup_codes") }),
|
|
15650
|
+
/* @__PURE__ */ jsx172(DialogDescription, { children: showCodes ? t("auth.two_factor.save_backup_codes") : t("auth.two_factor.backup_codes_description") })
|
|
15633
15651
|
] }),
|
|
15634
15652
|
!showCodes ? /* @__PURE__ */ jsxs100("div", { className: "flex flex-col gap-4", children: [
|
|
15635
15653
|
/* @__PURE__ */ jsxs100("p", { className: "text-sm", children: [
|
|
15636
15654
|
t("auth.two_factor.remaining_codes"),
|
|
15637
15655
|
": ",
|
|
15638
|
-
/* @__PURE__ */
|
|
15656
|
+
/* @__PURE__ */ jsx172("strong", { children: remainingCodes })
|
|
15639
15657
|
] }),
|
|
15640
15658
|
/* @__PURE__ */ jsxs100(AlertDialog, { children: [
|
|
15641
|
-
/* @__PURE__ */
|
|
15659
|
+
/* @__PURE__ */ jsx172(
|
|
15642
15660
|
AlertDialogTrigger,
|
|
15643
15661
|
{
|
|
15644
15662
|
render: /* @__PURE__ */ jsxs100(Button, { variant: "outline", className: "w-full", children: [
|
|
15645
|
-
/* @__PURE__ */
|
|
15663
|
+
/* @__PURE__ */ jsx172(RefreshCw2, { className: "h-4 w-4 mr-2" }),
|
|
15646
15664
|
t("auth.two_factor.generate_new_codes")
|
|
15647
15665
|
] })
|
|
15648
15666
|
}
|
|
15649
15667
|
),
|
|
15650
15668
|
/* @__PURE__ */ jsxs100(AlertDialogContent, { children: [
|
|
15651
15669
|
/* @__PURE__ */ jsxs100(AlertDialogHeader, { children: [
|
|
15652
|
-
/* @__PURE__ */
|
|
15653
|
-
/* @__PURE__ */
|
|
15670
|
+
/* @__PURE__ */ jsx172(AlertDialogTitle, { children: t("auth.two_factor.regenerate_codes") }),
|
|
15671
|
+
/* @__PURE__ */ jsx172(AlertDialogDescription, { children: t("auth.two_factor.regenerate_codes_warning") })
|
|
15654
15672
|
] }),
|
|
15655
15673
|
/* @__PURE__ */ jsxs100(AlertDialogFooter, { children: [
|
|
15656
|
-
/* @__PURE__ */
|
|
15657
|
-
/* @__PURE__ */
|
|
15674
|
+
/* @__PURE__ */ jsx172(AlertDialogCancel, { children: t("common.buttons.cancel") }),
|
|
15675
|
+
/* @__PURE__ */ jsx172(AlertDialogAction, { onClick: handleGenerate, disabled: isLoading, children: t("auth.two_factor.generate") })
|
|
15658
15676
|
] })
|
|
15659
15677
|
] })
|
|
15660
15678
|
] })
|
|
15661
15679
|
] }) : /* @__PURE__ */ jsxs100("div", { className: "flex flex-col gap-4", children: [
|
|
15662
|
-
/* @__PURE__ */
|
|
15680
|
+
/* @__PURE__ */ jsx172("div", { className: "grid grid-cols-2 gap-2 p-4 bg-muted rounded-lg font-mono text-sm", children: codes.map((code, index) => /* @__PURE__ */ jsx172("div", { className: "text-center", "data-testid": `backup-code-${index}`, children: code }, index)) }),
|
|
15663
15681
|
/* @__PURE__ */ jsxs100("div", { className: "flex gap-2", children: [
|
|
15664
15682
|
/* @__PURE__ */ jsxs100(Button, { variant: "outline", className: "flex-1", onClick: handleCopyAll, children: [
|
|
15665
|
-
/* @__PURE__ */
|
|
15683
|
+
/* @__PURE__ */ jsx172(Copy, { className: "h-4 w-4 mr-2" }),
|
|
15666
15684
|
t("auth.two_factor.copy_all")
|
|
15667
15685
|
] }),
|
|
15668
15686
|
/* @__PURE__ */ jsxs100(Button, { variant: "outline", className: "flex-1", onClick: handleDownload, children: [
|
|
15669
|
-
/* @__PURE__ */
|
|
15687
|
+
/* @__PURE__ */ jsx172(Download, { className: "h-4 w-4 mr-2" }),
|
|
15670
15688
|
t("auth.two_factor.download")
|
|
15671
15689
|
] })
|
|
15672
15690
|
] }),
|
|
15673
|
-
/* @__PURE__ */
|
|
15691
|
+
/* @__PURE__ */ jsx172("p", { className: "text-xs text-destructive text-center", children: t("auth.two_factor.codes_shown_once") })
|
|
15674
15692
|
] })
|
|
15675
15693
|
] })
|
|
15676
15694
|
] });
|
|
@@ -15683,7 +15701,7 @@ import { useState as useState61 } from "react";
|
|
|
15683
15701
|
|
|
15684
15702
|
// src/features/auth/components/two-factor/TotpInput.tsx
|
|
15685
15703
|
import { useEffect as useEffect50, useRef as useRef29, useState as useState60 } from "react";
|
|
15686
|
-
import { jsx as
|
|
15704
|
+
import { jsx as jsx173, jsxs as jsxs101 } from "react/jsx-runtime";
|
|
15687
15705
|
function TotpInput({ onComplete, disabled = false, autoFocus = true, error }) {
|
|
15688
15706
|
const [digits, setDigits] = useState60(["", "", "", "", "", ""]);
|
|
15689
15707
|
const inputRefs = useRef29([]);
|
|
@@ -15721,7 +15739,7 @@ function TotpInput({ onComplete, disabled = false, autoFocus = true, error }) {
|
|
|
15721
15739
|
}
|
|
15722
15740
|
}, "handlePaste");
|
|
15723
15741
|
return /* @__PURE__ */ jsxs101("div", { className: "flex flex-col items-center gap-4", children: [
|
|
15724
|
-
/* @__PURE__ */
|
|
15742
|
+
/* @__PURE__ */ jsx173("div", { className: "flex gap-2", children: digits.map((digit, index) => /* @__PURE__ */ jsx173(
|
|
15725
15743
|
Input,
|
|
15726
15744
|
{
|
|
15727
15745
|
ref: (el) => {
|
|
@@ -15740,13 +15758,13 @@ function TotpInput({ onComplete, disabled = false, autoFocus = true, error }) {
|
|
|
15740
15758
|
},
|
|
15741
15759
|
index
|
|
15742
15760
|
)) }),
|
|
15743
|
-
error && /* @__PURE__ */
|
|
15761
|
+
error && /* @__PURE__ */ jsx173("p", { className: "text-sm text-destructive", "data-testid": "totp-error", children: error })
|
|
15744
15762
|
] });
|
|
15745
15763
|
}
|
|
15746
15764
|
__name(TotpInput, "TotpInput");
|
|
15747
15765
|
|
|
15748
15766
|
// src/features/auth/components/two-factor/DisableTwoFactorDialog.tsx
|
|
15749
|
-
import { jsx as
|
|
15767
|
+
import { jsx as jsx174, jsxs as jsxs102 } from "react/jsx-runtime";
|
|
15750
15768
|
function DisableTwoFactorDialog({ onSuccess, trigger }) {
|
|
15751
15769
|
const t = useTranslations60();
|
|
15752
15770
|
const [open, setOpen] = useState61(false);
|
|
@@ -15774,15 +15792,15 @@ function DisableTwoFactorDialog({ onSuccess, trigger }) {
|
|
|
15774
15792
|
}
|
|
15775
15793
|
}, "handleOpenChange");
|
|
15776
15794
|
return /* @__PURE__ */ jsxs102(Dialog, { open, onOpenChange: handleOpenChange, children: [
|
|
15777
|
-
trigger ? /* @__PURE__ */
|
|
15795
|
+
trigger ? /* @__PURE__ */ jsx174(DialogTrigger, { render: trigger }) : /* @__PURE__ */ jsx174(DialogTrigger, { render: /* @__PURE__ */ jsx174(Button, { variant: "destructive", children: t("auth.two_factor.disable") }) }),
|
|
15778
15796
|
/* @__PURE__ */ jsxs102(DialogContent, { className: "sm:max-w-md", children: [
|
|
15779
15797
|
/* @__PURE__ */ jsxs102(DialogHeader, { children: [
|
|
15780
|
-
/* @__PURE__ */
|
|
15781
|
-
/* @__PURE__ */
|
|
15798
|
+
/* @__PURE__ */ jsx174(DialogTitle, { children: t("auth.two_factor.disable_2fa") }),
|
|
15799
|
+
/* @__PURE__ */ jsx174(DialogDescription, { children: t("auth.two_factor.disable_warning") })
|
|
15782
15800
|
] }),
|
|
15783
15801
|
/* @__PURE__ */ jsxs102("div", { className: "flex flex-col items-center gap-4", children: [
|
|
15784
|
-
/* @__PURE__ */
|
|
15785
|
-
/* @__PURE__ */
|
|
15802
|
+
/* @__PURE__ */ jsx174("p", { className: "text-sm text-muted-foreground text-center", children: t("auth.two_factor.enter_code_to_disable") }),
|
|
15803
|
+
/* @__PURE__ */ jsx174(TotpInput, { onComplete: handleVerify, disabled: isLoading, error })
|
|
15786
15804
|
] })
|
|
15787
15805
|
] })
|
|
15788
15806
|
] });
|
|
@@ -15793,7 +15811,7 @@ __name(DisableTwoFactorDialog, "DisableTwoFactorDialog");
|
|
|
15793
15811
|
import { Edit, Key, Trash2 } from "lucide-react";
|
|
15794
15812
|
import { useTranslations as useTranslations61 } from "next-intl";
|
|
15795
15813
|
import { useState as useState62 } from "react";
|
|
15796
|
-
import { Fragment as Fragment30, jsx as
|
|
15814
|
+
import { Fragment as Fragment30, jsx as jsx175, jsxs as jsxs103 } from "react/jsx-runtime";
|
|
15797
15815
|
function PasskeyList({ passkeys, onRefresh }) {
|
|
15798
15816
|
const t = useTranslations61();
|
|
15799
15817
|
const [renameDialogOpen, setRenameDialogOpen] = useState62(false);
|
|
@@ -15847,14 +15865,14 @@ function PasskeyList({ passkeys, onRefresh }) {
|
|
|
15847
15865
|
setRenameDialogOpen(true);
|
|
15848
15866
|
}, "openRenameDialog");
|
|
15849
15867
|
if (passkeys.length === 0) {
|
|
15850
|
-
return /* @__PURE__ */
|
|
15868
|
+
return /* @__PURE__ */ jsx175("p", { className: "text-sm text-muted-foreground text-center py-4", children: t("auth.two_factor.no_passkeys") });
|
|
15851
15869
|
}
|
|
15852
15870
|
return /* @__PURE__ */ jsxs103(Fragment30, { children: [
|
|
15853
|
-
/* @__PURE__ */
|
|
15871
|
+
/* @__PURE__ */ jsx175("div", { className: "space-y-2", children: passkeys.map((passkey) => /* @__PURE__ */ jsxs103("div", { className: "flex items-center justify-between p-3 border rounded-lg", children: [
|
|
15854
15872
|
/* @__PURE__ */ jsxs103("div", { className: "flex items-center gap-3", children: [
|
|
15855
|
-
/* @__PURE__ */
|
|
15873
|
+
/* @__PURE__ */ jsx175(Key, { className: "h-5 w-5 text-muted-foreground" }),
|
|
15856
15874
|
/* @__PURE__ */ jsxs103("div", { children: [
|
|
15857
|
-
/* @__PURE__ */
|
|
15875
|
+
/* @__PURE__ */ jsx175("p", { className: "font-medium", children: passkey.name }),
|
|
15858
15876
|
/* @__PURE__ */ jsxs103("p", { className: "text-sm text-muted-foreground", children: [
|
|
15859
15877
|
passkey.backedUp && "\u2601\uFE0F ",
|
|
15860
15878
|
passkey.lastUsedAt ? `${t("auth.two_factor.last_used")}: ${new Date(passkey.lastUsedAt).toLocaleDateString()}` : t("auth.two_factor.never_used")
|
|
@@ -15862,22 +15880,22 @@ function PasskeyList({ passkeys, onRefresh }) {
|
|
|
15862
15880
|
] })
|
|
15863
15881
|
] }),
|
|
15864
15882
|
/* @__PURE__ */ jsxs103("div", { className: "flex gap-2", children: [
|
|
15865
|
-
/* @__PURE__ */
|
|
15883
|
+
/* @__PURE__ */ jsx175(Button, { variant: "ghost", size: "icon", onClick: () => openRenameDialog(passkey), disabled: isLoading, children: /* @__PURE__ */ jsx175(Edit, { className: "h-4 w-4" }) }),
|
|
15866
15884
|
/* @__PURE__ */ jsxs103(AlertDialog, { children: [
|
|
15867
|
-
/* @__PURE__ */
|
|
15885
|
+
/* @__PURE__ */ jsx175(
|
|
15868
15886
|
AlertDialogTrigger,
|
|
15869
15887
|
{
|
|
15870
|
-
render: /* @__PURE__ */
|
|
15888
|
+
render: /* @__PURE__ */ jsx175(Button, { variant: "ghost", size: "icon", disabled: isLoading, children: /* @__PURE__ */ jsx175(Trash2, { className: "h-4 w-4 text-destructive" }) })
|
|
15871
15889
|
}
|
|
15872
15890
|
),
|
|
15873
15891
|
/* @__PURE__ */ jsxs103(AlertDialogContent, { children: [
|
|
15874
15892
|
/* @__PURE__ */ jsxs103(AlertDialogHeader, { children: [
|
|
15875
|
-
/* @__PURE__ */
|
|
15876
|
-
/* @__PURE__ */
|
|
15893
|
+
/* @__PURE__ */ jsx175(AlertDialogTitle, { children: t("auth.two_factor.remove_passkey") }),
|
|
15894
|
+
/* @__PURE__ */ jsx175(AlertDialogDescription, { children: t("auth.two_factor.confirm_delete_passkey") })
|
|
15877
15895
|
] }),
|
|
15878
15896
|
/* @__PURE__ */ jsxs103(AlertDialogFooter, { children: [
|
|
15879
|
-
/* @__PURE__ */
|
|
15880
|
-
/* @__PURE__ */
|
|
15897
|
+
/* @__PURE__ */ jsx175(AlertDialogCancel, { children: t("common.buttons.cancel") }),
|
|
15898
|
+
/* @__PURE__ */ jsx175(
|
|
15881
15899
|
AlertDialogAction,
|
|
15882
15900
|
{
|
|
15883
15901
|
onClick: () => handleDelete(passkey),
|
|
@@ -15890,9 +15908,9 @@ function PasskeyList({ passkeys, onRefresh }) {
|
|
|
15890
15908
|
] })
|
|
15891
15909
|
] })
|
|
15892
15910
|
] }, passkey.id)) }),
|
|
15893
|
-
/* @__PURE__ */
|
|
15894
|
-
/* @__PURE__ */
|
|
15895
|
-
/* @__PURE__ */
|
|
15911
|
+
/* @__PURE__ */ jsx175(Dialog, { open: renameDialogOpen, onOpenChange: setRenameDialogOpen, children: /* @__PURE__ */ jsxs103(DialogContent, { children: [
|
|
15912
|
+
/* @__PURE__ */ jsx175(DialogHeader, { children: /* @__PURE__ */ jsx175(DialogTitle, { children: t("auth.two_factor.rename_passkey") }) }),
|
|
15913
|
+
/* @__PURE__ */ jsx175("div", { className: "space-y-4", children: /* @__PURE__ */ jsx175(
|
|
15896
15914
|
Input,
|
|
15897
15915
|
{
|
|
15898
15916
|
value: newName,
|
|
@@ -15902,8 +15920,8 @@ function PasskeyList({ passkeys, onRefresh }) {
|
|
|
15902
15920
|
}
|
|
15903
15921
|
) }),
|
|
15904
15922
|
/* @__PURE__ */ jsxs103(DialogFooter, { children: [
|
|
15905
|
-
/* @__PURE__ */
|
|
15906
|
-
/* @__PURE__ */
|
|
15923
|
+
/* @__PURE__ */ jsx175(Button, { variant: "outline", onClick: () => setRenameDialogOpen(false), children: t("common.cancel") }),
|
|
15924
|
+
/* @__PURE__ */ jsx175(Button, { onClick: handleRename, disabled: !newName.trim() || isLoading, children: t("common.save") })
|
|
15907
15925
|
] })
|
|
15908
15926
|
] }) })
|
|
15909
15927
|
] });
|
|
@@ -15915,7 +15933,7 @@ import { startRegistration } from "@simplewebauthn/browser";
|
|
|
15915
15933
|
import { useTranslations as useTranslations62 } from "next-intl";
|
|
15916
15934
|
import { useState as useState63 } from "react";
|
|
15917
15935
|
import { v4 as v46 } from "uuid";
|
|
15918
|
-
import { jsx as
|
|
15936
|
+
import { jsx as jsx176, jsxs as jsxs104 } from "react/jsx-runtime";
|
|
15919
15937
|
function PasskeySetupDialog({ open, onOpenChange, onSuccess }) {
|
|
15920
15938
|
const t = useTranslations62();
|
|
15921
15939
|
const { currentUser } = useCurrentUserContext();
|
|
@@ -15956,15 +15974,15 @@ function PasskeySetupDialog({ open, onOpenChange, onSuccess }) {
|
|
|
15956
15974
|
setIsLoading(false);
|
|
15957
15975
|
}
|
|
15958
15976
|
}, "handleRegister");
|
|
15959
|
-
return /* @__PURE__ */
|
|
15977
|
+
return /* @__PURE__ */ jsx176(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs104(DialogContent, { children: [
|
|
15960
15978
|
/* @__PURE__ */ jsxs104(DialogHeader, { children: [
|
|
15961
|
-
/* @__PURE__ */
|
|
15962
|
-
/* @__PURE__ */
|
|
15979
|
+
/* @__PURE__ */ jsx176(DialogTitle, { children: t("auth.two_factor.setup_passkey") }),
|
|
15980
|
+
/* @__PURE__ */ jsx176(DialogDescription, { children: t("auth.two_factor.passkey_setup_description") })
|
|
15963
15981
|
] }),
|
|
15964
15982
|
/* @__PURE__ */ jsxs104("div", { className: "space-y-4", children: [
|
|
15965
15983
|
/* @__PURE__ */ jsxs104("div", { className: "space-y-2", children: [
|
|
15966
|
-
/* @__PURE__ */
|
|
15967
|
-
/* @__PURE__ */
|
|
15984
|
+
/* @__PURE__ */ jsx176(Label, { htmlFor: "passkey-name", children: t("auth.two_factor.passkey_name") }),
|
|
15985
|
+
/* @__PURE__ */ jsx176(
|
|
15968
15986
|
Input,
|
|
15969
15987
|
{
|
|
15970
15988
|
id: "passkey-name",
|
|
@@ -15975,7 +15993,7 @@ function PasskeySetupDialog({ open, onOpenChange, onSuccess }) {
|
|
|
15975
15993
|
}
|
|
15976
15994
|
)
|
|
15977
15995
|
] }),
|
|
15978
|
-
/* @__PURE__ */
|
|
15996
|
+
/* @__PURE__ */ jsx176(Button, { onClick: handleRegister, disabled: !name.trim() || isLoading, className: "w-full", children: isLoading ? t("common.loading") : t("auth.two_factor.register_passkey") })
|
|
15979
15997
|
] })
|
|
15980
15998
|
] }) });
|
|
15981
15999
|
}
|
|
@@ -15985,7 +16003,7 @@ __name(PasskeySetupDialog, "PasskeySetupDialog");
|
|
|
15985
16003
|
import { Smartphone, Trash2 as Trash22 } from "lucide-react";
|
|
15986
16004
|
import { useTranslations as useTranslations63 } from "next-intl";
|
|
15987
16005
|
import { useState as useState64 } from "react";
|
|
15988
|
-
import { jsx as
|
|
16006
|
+
import { jsx as jsx177, jsxs as jsxs105 } from "react/jsx-runtime";
|
|
15989
16007
|
function TotpAuthenticatorList({ authenticators, onDelete }) {
|
|
15990
16008
|
const t = useTranslations63();
|
|
15991
16009
|
const [deletingId, setDeletingId] = useState64(null);
|
|
@@ -16004,13 +16022,13 @@ function TotpAuthenticatorList({ authenticators, onDelete }) {
|
|
|
16004
16022
|
}
|
|
16005
16023
|
}, "handleDelete");
|
|
16006
16024
|
if (authenticators.length === 0) {
|
|
16007
|
-
return /* @__PURE__ */
|
|
16025
|
+
return /* @__PURE__ */ jsx177("p", { className: "text-sm text-muted-foreground", children: t("auth.two_factor.no_authenticators") });
|
|
16008
16026
|
}
|
|
16009
|
-
return /* @__PURE__ */
|
|
16027
|
+
return /* @__PURE__ */ jsx177("div", { className: "space-y-2", children: authenticators.map((auth) => /* @__PURE__ */ jsx177(Card, { "data-testid": `authenticator-${auth.id}`, children: /* @__PURE__ */ jsxs105(CardContent, { className: "flex items-center justify-between p-4", children: [
|
|
16010
16028
|
/* @__PURE__ */ jsxs105("div", { className: "flex items-center gap-3", children: [
|
|
16011
|
-
/* @__PURE__ */
|
|
16029
|
+
/* @__PURE__ */ jsx177(Smartphone, { className: "h-5 w-5 text-muted-foreground" }),
|
|
16012
16030
|
/* @__PURE__ */ jsxs105("div", { children: [
|
|
16013
|
-
/* @__PURE__ */
|
|
16031
|
+
/* @__PURE__ */ jsx177("p", { className: "font-medium", children: auth.name }),
|
|
16014
16032
|
auth.lastUsedAt && /* @__PURE__ */ jsxs105("p", { className: "text-xs text-muted-foreground", children: [
|
|
16015
16033
|
t("auth.two_factor.last_used"),
|
|
16016
16034
|
": ",
|
|
@@ -16019,29 +16037,29 @@ function TotpAuthenticatorList({ authenticators, onDelete }) {
|
|
|
16019
16037
|
] })
|
|
16020
16038
|
] }),
|
|
16021
16039
|
/* @__PURE__ */ jsxs105(AlertDialog, { children: [
|
|
16022
|
-
/* @__PURE__ */
|
|
16040
|
+
/* @__PURE__ */ jsx177(
|
|
16023
16041
|
AlertDialogTrigger,
|
|
16024
16042
|
{
|
|
16025
|
-
render: /* @__PURE__ */
|
|
16043
|
+
render: /* @__PURE__ */ jsx177(
|
|
16026
16044
|
Button,
|
|
16027
16045
|
{
|
|
16028
16046
|
variant: "ghost",
|
|
16029
16047
|
size: "icon",
|
|
16030
16048
|
disabled: deletingId === auth.id,
|
|
16031
16049
|
"data-testid": `delete-auth-${auth.id}`,
|
|
16032
|
-
children: /* @__PURE__ */
|
|
16050
|
+
children: /* @__PURE__ */ jsx177(Trash22, { className: "h-4 w-4 text-destructive" })
|
|
16033
16051
|
}
|
|
16034
16052
|
)
|
|
16035
16053
|
}
|
|
16036
16054
|
),
|
|
16037
16055
|
/* @__PURE__ */ jsxs105(AlertDialogContent, { children: [
|
|
16038
16056
|
/* @__PURE__ */ jsxs105(AlertDialogHeader, { children: [
|
|
16039
|
-
/* @__PURE__ */
|
|
16040
|
-
/* @__PURE__ */
|
|
16057
|
+
/* @__PURE__ */ jsx177(AlertDialogTitle, { children: t("auth.two_factor.remove_authenticator") }),
|
|
16058
|
+
/* @__PURE__ */ jsx177(AlertDialogDescription, { children: t("auth.two_factor.remove_authenticator_confirm") })
|
|
16041
16059
|
] }),
|
|
16042
16060
|
/* @__PURE__ */ jsxs105(AlertDialogFooter, { children: [
|
|
16043
|
-
/* @__PURE__ */
|
|
16044
|
-
/* @__PURE__ */
|
|
16061
|
+
/* @__PURE__ */ jsx177(AlertDialogCancel, { children: t("common.buttons.cancel") }),
|
|
16062
|
+
/* @__PURE__ */ jsx177(
|
|
16045
16063
|
AlertDialogAction,
|
|
16046
16064
|
{
|
|
16047
16065
|
onClick: () => handleDelete(auth.id),
|
|
@@ -16061,7 +16079,7 @@ import { useTranslations as useTranslations64 } from "next-intl";
|
|
|
16061
16079
|
import { QRCodeSVG } from "qrcode.react";
|
|
16062
16080
|
import { useState as useState65 } from "react";
|
|
16063
16081
|
import { v4 as v47 } from "uuid";
|
|
16064
|
-
import { jsx as
|
|
16082
|
+
import { jsx as jsx178, jsxs as jsxs106 } from "react/jsx-runtime";
|
|
16065
16083
|
function TotpSetupDialog({ onSuccess, trigger }) {
|
|
16066
16084
|
const t = useTranslations64();
|
|
16067
16085
|
const { currentUser } = useCurrentUserContext();
|
|
@@ -16128,10 +16146,10 @@ function TotpSetupDialog({ onSuccess, trigger }) {
|
|
|
16128
16146
|
if (!newOpen) resetState();
|
|
16129
16147
|
}, "handleOpenChange");
|
|
16130
16148
|
return /* @__PURE__ */ jsxs106(Dialog, { open, onOpenChange: handleOpenChange, children: [
|
|
16131
|
-
trigger ? /* @__PURE__ */
|
|
16149
|
+
trigger ? /* @__PURE__ */ jsx178(DialogTrigger, { render: trigger }) : /* @__PURE__ */ jsx178(DialogTrigger, { render: /* @__PURE__ */ jsx178(Button, { variant: "outline", children: t("auth.two_factor.add_authenticator") }) }),
|
|
16132
16150
|
/* @__PURE__ */ jsxs106(DialogContent, { className: "sm:max-w-md", children: [
|
|
16133
16151
|
/* @__PURE__ */ jsxs106(DialogHeader, { children: [
|
|
16134
|
-
/* @__PURE__ */
|
|
16152
|
+
/* @__PURE__ */ jsx178(DialogTitle, { children: t("auth.two_factor.setup_authenticator") }),
|
|
16135
16153
|
/* @__PURE__ */ jsxs106(DialogDescription, { children: [
|
|
16136
16154
|
step === "name" && t("auth.two_factor.name_your_authenticator"),
|
|
16137
16155
|
step === "scan" && t("auth.two_factor.scan_qr_code"),
|
|
@@ -16140,8 +16158,8 @@ function TotpSetupDialog({ onSuccess, trigger }) {
|
|
|
16140
16158
|
] }),
|
|
16141
16159
|
step === "name" && /* @__PURE__ */ jsxs106("div", { className: "flex flex-col gap-4", children: [
|
|
16142
16160
|
/* @__PURE__ */ jsxs106("div", { className: "flex flex-col gap-2", children: [
|
|
16143
|
-
/* @__PURE__ */
|
|
16144
|
-
/* @__PURE__ */
|
|
16161
|
+
/* @__PURE__ */ jsx178(Label, { htmlFor: "authenticator-name", children: t("auth.two_factor.authenticator_name") }),
|
|
16162
|
+
/* @__PURE__ */ jsx178(
|
|
16145
16163
|
Input,
|
|
16146
16164
|
{
|
|
16147
16165
|
id: "authenticator-name",
|
|
@@ -16152,21 +16170,21 @@ function TotpSetupDialog({ onSuccess, trigger }) {
|
|
|
16152
16170
|
}
|
|
16153
16171
|
)
|
|
16154
16172
|
] }),
|
|
16155
|
-
/* @__PURE__ */
|
|
16173
|
+
/* @__PURE__ */ jsx178(Button, { onClick: handleStartSetup, disabled: !name.trim() || isLoading, "data-testid": "start-setup-button", children: t("common.buttons.continue") })
|
|
16156
16174
|
] }),
|
|
16157
16175
|
step === "scan" && /* @__PURE__ */ jsxs106("div", { className: "flex flex-col items-center gap-4", children: [
|
|
16158
|
-
/* @__PURE__ */
|
|
16159
|
-
/* @__PURE__ */
|
|
16160
|
-
/* @__PURE__ */
|
|
16176
|
+
/* @__PURE__ */ jsx178("div", { className: "p-4 bg-white rounded-lg", children: /* @__PURE__ */ jsx178(QRCodeSVG, { value: qrCodeUri, size: 200, "data-testid": "totp-qr-code" }) }),
|
|
16177
|
+
/* @__PURE__ */ jsx178("p", { className: "text-sm text-muted-foreground text-center", children: t("auth.two_factor.scan_with_app") }),
|
|
16178
|
+
/* @__PURE__ */ jsx178(Button, { onClick: () => setStep("verify"), "data-testid": "next-to-verify", children: t("common.buttons.next") })
|
|
16161
16179
|
] }),
|
|
16162
|
-
step === "verify" && /* @__PURE__ */
|
|
16180
|
+
step === "verify" && /* @__PURE__ */ jsx178("div", { className: "flex flex-col items-center gap-4", children: /* @__PURE__ */ jsx178(TotpInput, { onComplete: handleVerify, disabled: isLoading, error: verifyError }) })
|
|
16163
16181
|
] })
|
|
16164
16182
|
] });
|
|
16165
16183
|
}
|
|
16166
16184
|
__name(TotpSetupDialog, "TotpSetupDialog");
|
|
16167
16185
|
|
|
16168
16186
|
// src/features/auth/components/two-factor/TwoFactorSettings.tsx
|
|
16169
|
-
import { Fragment as Fragment31, jsx as
|
|
16187
|
+
import { Fragment as Fragment31, jsx as jsx179, jsxs as jsxs107 } from "react/jsx-runtime";
|
|
16170
16188
|
function TwoFactorSettings() {
|
|
16171
16189
|
const t = useTranslations65();
|
|
16172
16190
|
const [status, setStatus] = useState66(null);
|
|
@@ -16211,66 +16229,66 @@ function TwoFactorSettings() {
|
|
|
16211
16229
|
}
|
|
16212
16230
|
}, "handleEnable2FA");
|
|
16213
16231
|
if (isLoading) {
|
|
16214
|
-
return /* @__PURE__ */
|
|
16232
|
+
return /* @__PURE__ */ jsx179(Card, { children: /* @__PURE__ */ jsx179(CardContent, { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ jsx179("p", { className: "text-muted-foreground", children: t("common.loading") }) }) });
|
|
16215
16233
|
}
|
|
16216
16234
|
const isEnabled = status?.isEnabled ?? false;
|
|
16217
16235
|
return /* @__PURE__ */ jsxs107(Card, { children: [
|
|
16218
|
-
/* @__PURE__ */
|
|
16219
|
-
isEnabled ? /* @__PURE__ */
|
|
16236
|
+
/* @__PURE__ */ jsx179(CardHeader, { children: /* @__PURE__ */ jsxs107("div", { className: "flex items-center gap-2", children: [
|
|
16237
|
+
isEnabled ? /* @__PURE__ */ jsx179(ShieldCheck, { className: "h-6 w-6 text-green-600" }) : /* @__PURE__ */ jsx179(ShieldAlert, { className: "h-6 w-6 text-yellow-600" }),
|
|
16220
16238
|
/* @__PURE__ */ jsxs107("div", { children: [
|
|
16221
|
-
/* @__PURE__ */
|
|
16222
|
-
/* @__PURE__ */
|
|
16239
|
+
/* @__PURE__ */ jsx179(CardTitle, { children: t("auth.two_factor.title") }),
|
|
16240
|
+
/* @__PURE__ */ jsx179(CardDescription, { children: isEnabled ? t("auth.two_factor.enabled_description") : t("auth.two_factor.disabled_description") })
|
|
16223
16241
|
] })
|
|
16224
16242
|
] }) }),
|
|
16225
16243
|
/* @__PURE__ */ jsxs107(CardContent, { className: "space-y-6", children: [
|
|
16226
16244
|
/* @__PURE__ */ jsxs107("div", { className: "space-y-4", children: [
|
|
16227
16245
|
/* @__PURE__ */ jsxs107("div", { className: "flex items-center justify-between", children: [
|
|
16228
16246
|
/* @__PURE__ */ jsxs107("div", { children: [
|
|
16229
|
-
/* @__PURE__ */
|
|
16230
|
-
/* @__PURE__ */
|
|
16247
|
+
/* @__PURE__ */ jsx179("h3", { className: "font-medium", children: t("auth.two_factor.authenticator_apps") }),
|
|
16248
|
+
/* @__PURE__ */ jsx179("p", { className: "text-sm text-muted-foreground", children: t("auth.two_factor.authenticator_apps_description") })
|
|
16231
16249
|
] }),
|
|
16232
|
-
/* @__PURE__ */
|
|
16250
|
+
/* @__PURE__ */ jsx179(TotpSetupDialog, { onSuccess: handleRefresh })
|
|
16233
16251
|
] }),
|
|
16234
|
-
/* @__PURE__ */
|
|
16252
|
+
/* @__PURE__ */ jsx179(TotpAuthenticatorList, { authenticators, onDelete: handleRefresh })
|
|
16235
16253
|
] }),
|
|
16236
|
-
/* @__PURE__ */
|
|
16254
|
+
/* @__PURE__ */ jsx179(Separator, {}),
|
|
16237
16255
|
/* @__PURE__ */ jsxs107("div", { className: "space-y-4", children: [
|
|
16238
16256
|
/* @__PURE__ */ jsxs107("div", { className: "flex items-center justify-between", children: [
|
|
16239
16257
|
/* @__PURE__ */ jsxs107("div", { children: [
|
|
16240
|
-
/* @__PURE__ */
|
|
16241
|
-
/* @__PURE__ */
|
|
16258
|
+
/* @__PURE__ */ jsx179("h3", { className: "font-medium", children: t("auth.two_factor.passkeys") }),
|
|
16259
|
+
/* @__PURE__ */ jsx179("p", { className: "text-sm text-muted-foreground", children: t("auth.two_factor.passkeys_description") })
|
|
16242
16260
|
] }),
|
|
16243
|
-
/* @__PURE__ */
|
|
16261
|
+
/* @__PURE__ */ jsx179(Button, { variant: "outline", onClick: () => setPasskeyDialogOpen(true), children: t("auth.two_factor.add_passkey") })
|
|
16244
16262
|
] }),
|
|
16245
|
-
/* @__PURE__ */
|
|
16263
|
+
/* @__PURE__ */ jsx179(PasskeyList, { passkeys, onRefresh: handleRefresh })
|
|
16246
16264
|
] }),
|
|
16247
|
-
/* @__PURE__ */
|
|
16248
|
-
/* @__PURE__ */
|
|
16249
|
-
/* @__PURE__ */
|
|
16265
|
+
/* @__PURE__ */ jsx179(PasskeySetupDialog, { open: passkeyDialogOpen, onOpenChange: setPasskeyDialogOpen, onSuccess: handleRefresh }),
|
|
16266
|
+
/* @__PURE__ */ jsx179(Separator, {}),
|
|
16267
|
+
/* @__PURE__ */ jsx179("div", { className: "space-y-4", children: /* @__PURE__ */ jsxs107("div", { className: "flex items-center justify-between", children: [
|
|
16250
16268
|
/* @__PURE__ */ jsxs107("div", { children: [
|
|
16251
|
-
/* @__PURE__ */
|
|
16252
|
-
/* @__PURE__ */
|
|
16269
|
+
/* @__PURE__ */ jsx179("h3", { className: "font-medium", children: t("auth.two_factor.backup_codes") }),
|
|
16270
|
+
/* @__PURE__ */ jsx179("p", { className: "text-sm text-muted-foreground", children: t("auth.two_factor.backup_codes_description") })
|
|
16253
16271
|
] }),
|
|
16254
|
-
/* @__PURE__ */
|
|
16272
|
+
/* @__PURE__ */ jsx179(BackupCodesDialog, { remainingCodes: status?.backupCodesCount ?? 0, onRegenerate: handleRefresh })
|
|
16255
16273
|
] }) }),
|
|
16256
16274
|
!isEnabled && (authenticators.length > 0 || passkeys.length > 0) && /* @__PURE__ */ jsxs107(Fragment31, { children: [
|
|
16257
|
-
/* @__PURE__ */
|
|
16275
|
+
/* @__PURE__ */ jsx179(Separator, {}),
|
|
16258
16276
|
/* @__PURE__ */ jsxs107("div", { className: "flex items-center justify-between", children: [
|
|
16259
16277
|
/* @__PURE__ */ jsxs107("div", { children: [
|
|
16260
|
-
/* @__PURE__ */
|
|
16261
|
-
/* @__PURE__ */
|
|
16278
|
+
/* @__PURE__ */ jsx179("h3", { className: "font-medium text-green-600", children: t("auth.two_factor.enable_2fa") }),
|
|
16279
|
+
/* @__PURE__ */ jsx179("p", { className: "text-sm text-muted-foreground", children: t("auth.two_factor.enable_description") })
|
|
16262
16280
|
] }),
|
|
16263
|
-
/* @__PURE__ */
|
|
16281
|
+
/* @__PURE__ */ jsx179(Button, { onClick: handleEnable2FA, disabled: isEnabling, children: isEnabling ? t("common.loading") : t("auth.two_factor.enable_button") })
|
|
16264
16282
|
] })
|
|
16265
16283
|
] }),
|
|
16266
16284
|
isEnabled && /* @__PURE__ */ jsxs107(Fragment31, { children: [
|
|
16267
|
-
/* @__PURE__ */
|
|
16285
|
+
/* @__PURE__ */ jsx179(Separator, {}),
|
|
16268
16286
|
/* @__PURE__ */ jsxs107("div", { className: "flex items-center justify-between", children: [
|
|
16269
16287
|
/* @__PURE__ */ jsxs107("div", { children: [
|
|
16270
|
-
/* @__PURE__ */
|
|
16271
|
-
/* @__PURE__ */
|
|
16288
|
+
/* @__PURE__ */ jsx179("h3", { className: "font-medium text-destructive", children: t("auth.two_factor.disable_2fa") }),
|
|
16289
|
+
/* @__PURE__ */ jsx179("p", { className: "text-sm text-muted-foreground", children: t("auth.two_factor.disable_warning") })
|
|
16272
16290
|
] }),
|
|
16273
|
-
/* @__PURE__ */
|
|
16291
|
+
/* @__PURE__ */ jsx179(DisableTwoFactorDialog, { onSuccess: handleRefresh })
|
|
16274
16292
|
] })
|
|
16275
16293
|
] })
|
|
16276
16294
|
] })
|
|
@@ -16279,9 +16297,9 @@ function TwoFactorSettings() {
|
|
|
16279
16297
|
__name(TwoFactorSettings, "TwoFactorSettings");
|
|
16280
16298
|
|
|
16281
16299
|
// src/features/auth/components/containers/SecurityContainer.tsx
|
|
16282
|
-
import { jsx as
|
|
16300
|
+
import { jsx as jsx180 } from "react/jsx-runtime";
|
|
16283
16301
|
function SecurityContainer() {
|
|
16284
|
-
return /* @__PURE__ */
|
|
16302
|
+
return /* @__PURE__ */ jsx180("div", { className: "space-y-6", children: /* @__PURE__ */ jsx180(TwoFactorSettings, {}) });
|
|
16285
16303
|
}
|
|
16286
16304
|
__name(SecurityContainer, "SecurityContainer");
|
|
16287
16305
|
|
|
@@ -16290,7 +16308,7 @@ import { useTranslations as useTranslations66 } from "next-intl";
|
|
|
16290
16308
|
import Image9 from "next/image";
|
|
16291
16309
|
|
|
16292
16310
|
// src/features/auth/components/buttons/GoogleSignInButton.tsx
|
|
16293
|
-
import { jsx as
|
|
16311
|
+
import { jsx as jsx181, jsxs as jsxs108 } from "react/jsx-runtime";
|
|
16294
16312
|
function GoogleSignInButton({ referralCode }) {
|
|
16295
16313
|
if (!isGoogleAuthEnabled()) {
|
|
16296
16314
|
return null;
|
|
@@ -16300,7 +16318,7 @@ function GoogleSignInButton({ referralCode }) {
|
|
|
16300
16318
|
if (!referralCode) return baseUrl;
|
|
16301
16319
|
return `${baseUrl}?referral=${encodeURIComponent(referralCode)}`;
|
|
16302
16320
|
}, "buildGoogleOAuthUrl");
|
|
16303
|
-
return /* @__PURE__ */
|
|
16321
|
+
return /* @__PURE__ */ jsx181(Link, { href: buildGoogleOAuthUrl(), className: "flex w-full justify-end", children: /* @__PURE__ */ jsxs108(
|
|
16304
16322
|
Button,
|
|
16305
16323
|
{
|
|
16306
16324
|
className: "w-full bg-white hover:bg-gray-50 text-gray-700 border border-gray-300",
|
|
@@ -16308,28 +16326,28 @@ function GoogleSignInButton({ referralCode }) {
|
|
|
16308
16326
|
"data-testid": "page-login-button-google",
|
|
16309
16327
|
children: [
|
|
16310
16328
|
/* @__PURE__ */ jsxs108("svg", { className: "mr-2 h-5 w-5", viewBox: "0 0 24 24", children: [
|
|
16311
|
-
/* @__PURE__ */
|
|
16329
|
+
/* @__PURE__ */ jsx181(
|
|
16312
16330
|
"path",
|
|
16313
16331
|
{
|
|
16314
16332
|
fill: "#4285F4",
|
|
16315
16333
|
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"
|
|
16316
16334
|
}
|
|
16317
16335
|
),
|
|
16318
|
-
/* @__PURE__ */
|
|
16336
|
+
/* @__PURE__ */ jsx181(
|
|
16319
16337
|
"path",
|
|
16320
16338
|
{
|
|
16321
16339
|
fill: "#34A853",
|
|
16322
16340
|
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"
|
|
16323
16341
|
}
|
|
16324
16342
|
),
|
|
16325
|
-
/* @__PURE__ */
|
|
16343
|
+
/* @__PURE__ */ jsx181(
|
|
16326
16344
|
"path",
|
|
16327
16345
|
{
|
|
16328
16346
|
fill: "#FBBC05",
|
|
16329
16347
|
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"
|
|
16330
16348
|
}
|
|
16331
16349
|
),
|
|
16332
|
-
/* @__PURE__ */
|
|
16350
|
+
/* @__PURE__ */ jsx181(
|
|
16333
16351
|
"path",
|
|
16334
16352
|
{
|
|
16335
16353
|
fill: "#EA4335",
|
|
@@ -16345,33 +16363,33 @@ function GoogleSignInButton({ referralCode }) {
|
|
|
16345
16363
|
__name(GoogleSignInButton, "GoogleSignInButton");
|
|
16346
16364
|
|
|
16347
16365
|
// src/features/auth/components/details/LandingComponent.tsx
|
|
16348
|
-
import { Fragment as Fragment32, jsx as
|
|
16366
|
+
import { Fragment as Fragment32, jsx as jsx182, jsxs as jsxs109 } from "react/jsx-runtime";
|
|
16349
16367
|
function LandingComponent() {
|
|
16350
16368
|
const t = useTranslations66();
|
|
16351
16369
|
const { setComponentType } = useAuthContext();
|
|
16352
16370
|
return /* @__PURE__ */ jsxs109(Fragment32, { children: [
|
|
16353
16371
|
/* @__PURE__ */ jsxs109(CardHeader, { className: "mb-4", "data-testid": "page-pre-login-container", children: [
|
|
16354
16372
|
/* @__PURE__ */ jsxs109(CardTitle, { className: "text-primary flex flex-col items-center gap-y-8 pb-8 text-4xl", children: [
|
|
16355
|
-
/* @__PURE__ */
|
|
16373
|
+
/* @__PURE__ */ jsx182(Image9, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
|
|
16356
16374
|
t(`common.title`)
|
|
16357
16375
|
] }),
|
|
16358
|
-
/* @__PURE__ */
|
|
16376
|
+
/* @__PURE__ */ jsx182(CardDescription, { className: "flex w-full justify-center text-center text-sm", children: t(`common.description`) })
|
|
16359
16377
|
] }),
|
|
16360
16378
|
/* @__PURE__ */ jsxs109(CardFooter, { className: "mt-4 flex w-full flex-col justify-between gap-y-4", children: [
|
|
16361
16379
|
isInternalAuthEnabled() && /* @__PURE__ */ jsxs109(Fragment32, { children: [
|
|
16362
|
-
isRegistrationAllowed() && /* @__PURE__ */
|
|
16380
|
+
isRegistrationAllowed() && /* @__PURE__ */ jsx182(
|
|
16363
16381
|
Link,
|
|
16364
16382
|
{
|
|
16365
16383
|
href: "#",
|
|
16366
16384
|
className: "flex w-full justify-start",
|
|
16367
16385
|
onClick: () => setComponentType(5 /* Register */),
|
|
16368
|
-
children: /* @__PURE__ */
|
|
16386
|
+
children: /* @__PURE__ */ jsx182(Button, { className: "w-full", variant: `default`, children: t(`auth.buttons.register`) })
|
|
16369
16387
|
}
|
|
16370
16388
|
),
|
|
16371
|
-
/* @__PURE__ */
|
|
16389
|
+
/* @__PURE__ */ jsx182(Link, { href: "#", className: "flex w-full justify-end", onClick: () => setComponentType(0 /* Login */), children: /* @__PURE__ */ jsx182(Button, { className: "w-full", variant: `outline`, "data-testid": "page-login-button-initial-login", children: t(`auth.buttons.login`) }) })
|
|
16372
16390
|
] }),
|
|
16373
|
-
isGoogleAuthEnabled() && /* @__PURE__ */
|
|
16374
|
-
isDiscordAuthEnabled() && /* @__PURE__ */
|
|
16391
|
+
isGoogleAuthEnabled() && /* @__PURE__ */ jsx182(GoogleSignInButton, {}),
|
|
16392
|
+
isDiscordAuthEnabled() && /* @__PURE__ */ jsx182(Link, { href: `${getPublicApiUrl()}auth/discord`, className: "flex w-full justify-end", children: /* @__PURE__ */ jsx182(Button, { className: "w-full", variant: `outline`, "data-testid": "page-login-button-initial-login", children: "Login with Discord" }) })
|
|
16375
16393
|
] })
|
|
16376
16394
|
] });
|
|
16377
16395
|
}
|
|
@@ -16384,7 +16402,7 @@ import Image10 from "next/image";
|
|
|
16384
16402
|
import { useEffect as useEffect52, useState as useState67 } from "react";
|
|
16385
16403
|
import { useForm as useForm6 } from "react-hook-form";
|
|
16386
16404
|
import { z as z6 } from "zod";
|
|
16387
|
-
import { Fragment as Fragment33, jsx as
|
|
16405
|
+
import { Fragment as Fragment33, jsx as jsx183, jsxs as jsxs110 } from "react/jsx-runtime";
|
|
16388
16406
|
function AcceptInvitation() {
|
|
16389
16407
|
const { setComponentType, params, setParams } = useAuthContext();
|
|
16390
16408
|
const [showConfirmation, setShowConfirmation] = useState67(false);
|
|
@@ -16450,13 +16468,13 @@ function AcceptInvitation() {
|
|
|
16450
16468
|
return /* @__PURE__ */ jsxs110(Fragment33, { children: [
|
|
16451
16469
|
/* @__PURE__ */ jsxs110(CardHeader, { children: [
|
|
16452
16470
|
/* @__PURE__ */ jsxs110(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
|
|
16453
|
-
/* @__PURE__ */
|
|
16471
|
+
/* @__PURE__ */ jsx183(Image10, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
|
|
16454
16472
|
t("auth.accept_invitation")
|
|
16455
16473
|
] }),
|
|
16456
|
-
/* @__PURE__ */
|
|
16474
|
+
/* @__PURE__ */ jsx183(CardDescription, { className: "text-center text-sm", children: error ? /* @__PURE__ */ jsx183(Fragment33, { children: t("auth.errors.activating_account") }) : /* @__PURE__ */ jsx183(Fragment33, { children: t("auth.select_password") }) })
|
|
16457
16475
|
] }),
|
|
16458
|
-
/* @__PURE__ */
|
|
16459
|
-
/* @__PURE__ */
|
|
16476
|
+
/* @__PURE__ */ jsx183(CardContent, { children: showConfirmation ? /* @__PURE__ */ jsx183(CardDescription, { className: "text-center text-xl", children: t("auth.activation_description") }) : error ? /* @__PURE__ */ jsx183(CardDescription, { className: "text-center text-xl", children: error }) : /* @__PURE__ */ jsx183(Form, { ...form, children: /* @__PURE__ */ jsxs110("form", { onSubmit: form.handleSubmit(onSubmit), children: [
|
|
16477
|
+
/* @__PURE__ */ jsx183(
|
|
16460
16478
|
FormPassword,
|
|
16461
16479
|
{
|
|
16462
16480
|
form,
|
|
@@ -16465,7 +16483,7 @@ function AcceptInvitation() {
|
|
|
16465
16483
|
placeholder: t(`user.fields.password.placeholder`)
|
|
16466
16484
|
}
|
|
16467
16485
|
),
|
|
16468
|
-
/* @__PURE__ */
|
|
16486
|
+
/* @__PURE__ */ jsx183(
|
|
16469
16487
|
FormPassword,
|
|
16470
16488
|
{
|
|
16471
16489
|
form,
|
|
@@ -16474,7 +16492,7 @@ function AcceptInvitation() {
|
|
|
16474
16492
|
placeholder: t(`auth.fields.retype_password.placeholder`)
|
|
16475
16493
|
}
|
|
16476
16494
|
),
|
|
16477
|
-
/* @__PURE__ */
|
|
16495
|
+
/* @__PURE__ */ jsx183(Button, { className: "mt-4 w-full", type: "submit", children: t("auth.accept_invitation") })
|
|
16478
16496
|
] }) }) })
|
|
16479
16497
|
] });
|
|
16480
16498
|
}
|
|
@@ -16484,7 +16502,7 @@ __name(AcceptInvitation, "AcceptInvitation");
|
|
|
16484
16502
|
import { useTranslations as useTranslations68 } from "next-intl";
|
|
16485
16503
|
import Image11 from "next/image";
|
|
16486
16504
|
import { useEffect as useEffect53, useState as useState68 } from "react";
|
|
16487
|
-
import { Fragment as Fragment34, jsx as
|
|
16505
|
+
import { Fragment as Fragment34, jsx as jsx184, jsxs as jsxs111 } from "react/jsx-runtime";
|
|
16488
16506
|
function ActivateAccount() {
|
|
16489
16507
|
const { setComponentType, params, setParams } = useAuthContext();
|
|
16490
16508
|
const [showConfirmation, setShowConfirmation] = useState68(false);
|
|
@@ -16520,12 +16538,12 @@ function ActivateAccount() {
|
|
|
16520
16538
|
return /* @__PURE__ */ jsxs111(Fragment34, { children: [
|
|
16521
16539
|
/* @__PURE__ */ jsxs111(CardHeader, { children: [
|
|
16522
16540
|
/* @__PURE__ */ jsxs111(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
|
|
16523
|
-
/* @__PURE__ */
|
|
16541
|
+
/* @__PURE__ */ jsx184(Image11, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
|
|
16524
16542
|
t("auth.accept_invitation")
|
|
16525
16543
|
] }),
|
|
16526
|
-
/* @__PURE__ */
|
|
16544
|
+
/* @__PURE__ */ jsx184(CardDescription, { className: "text-center text-sm", children: error ? /* @__PURE__ */ jsx184(Fragment34, { children: t("auth.errors.activating_account") }) : /* @__PURE__ */ jsx184(Fragment34, { children: " " }) })
|
|
16527
16545
|
] }),
|
|
16528
|
-
/* @__PURE__ */
|
|
16546
|
+
/* @__PURE__ */ jsx184(CardContent, { children: /* @__PURE__ */ jsx184(CardDescription, { className: "text-center text-xl", children: showConfirmation ? /* @__PURE__ */ jsx184(Fragment34, { children: t("auth.activation_description") }) : error ? /* @__PURE__ */ jsx184(Fragment34, { children: error }) : /* @__PURE__ */ jsx184(Fragment34, { children: t("auth.activation_wait") }) }) })
|
|
16529
16547
|
] });
|
|
16530
16548
|
}
|
|
16531
16549
|
__name(ActivateAccount, "ActivateAccount");
|
|
@@ -16562,7 +16580,7 @@ import Image12 from "next/image";
|
|
|
16562
16580
|
import { useState as useState70 } from "react";
|
|
16563
16581
|
import { useForm as useForm7 } from "react-hook-form";
|
|
16564
16582
|
import { z as z7 } from "zod";
|
|
16565
|
-
import { Fragment as Fragment35, jsx as
|
|
16583
|
+
import { Fragment as Fragment35, jsx as jsx185, jsxs as jsxs112 } from "react/jsx-runtime";
|
|
16566
16584
|
function ForgotPassword() {
|
|
16567
16585
|
const t = useTranslations69();
|
|
16568
16586
|
const { setComponentType } = useAuthContext();
|
|
@@ -16592,14 +16610,14 @@ function ForgotPassword() {
|
|
|
16592
16610
|
return /* @__PURE__ */ jsxs112(Fragment35, { children: [
|
|
16593
16611
|
/* @__PURE__ */ jsxs112(CardHeader, { "data-testid": "page-forgot-password-container", children: [
|
|
16594
16612
|
/* @__PURE__ */ jsxs112(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
|
|
16595
|
-
/* @__PURE__ */
|
|
16613
|
+
/* @__PURE__ */ jsx185(Image12, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
|
|
16596
16614
|
t("auth.buttons.forgot_password")
|
|
16597
16615
|
] }),
|
|
16598
|
-
/* @__PURE__ */
|
|
16616
|
+
/* @__PURE__ */ jsx185(CardDescription, { className: "text-sm", children: showConfirmation ? /* @__PURE__ */ jsx185(Fragment35, { children: " " }) : /* @__PURE__ */ jsx185(Fragment35, { children: t(`auth.add_email_to_reset`) }) })
|
|
16599
16617
|
] }),
|
|
16600
|
-
showConfirmation ? /* @__PURE__ */
|
|
16618
|
+
showConfirmation ? /* @__PURE__ */ jsx185(CardContent, { children: /* @__PURE__ */ jsx185(CardDescription, { className: "text-center text-xl", children: t(`auth.reset_confirmation`) }) }) : /* @__PURE__ */ jsx185(Form, { ...form, children: /* @__PURE__ */ jsxs112("form", { onSubmit: form.handleSubmit(onSubmit), children: [
|
|
16601
16619
|
/* @__PURE__ */ jsxs112(CardContent, { children: [
|
|
16602
|
-
/* @__PURE__ */
|
|
16620
|
+
/* @__PURE__ */ jsx185(
|
|
16603
16621
|
FormInput,
|
|
16604
16622
|
{
|
|
16605
16623
|
form,
|
|
@@ -16609,9 +16627,9 @@ function ForgotPassword() {
|
|
|
16609
16627
|
testId: "form-forgot-password-input-email"
|
|
16610
16628
|
}
|
|
16611
16629
|
),
|
|
16612
|
-
/* @__PURE__ */
|
|
16630
|
+
/* @__PURE__ */ jsx185(Button, { className: "mt-4 w-full", type: "submit", "data-testid": "form-forgot-password-button-reset", children: t(`auth.buttons.reset_password`) })
|
|
16613
16631
|
] }),
|
|
16614
|
-
/* @__PURE__ */
|
|
16632
|
+
/* @__PURE__ */ jsx185(CardFooter, { className: "flex w-full flex-row justify-between", children: /* @__PURE__ */ jsx185(
|
|
16615
16633
|
Link,
|
|
16616
16634
|
{
|
|
16617
16635
|
href: "#",
|
|
@@ -16634,7 +16652,7 @@ import { useRouter, useSearchParams as useSearchParams3 } from "next/navigation"
|
|
|
16634
16652
|
import { useEffect as useEffect55, useState as useState71 } from "react";
|
|
16635
16653
|
import { useForm as useForm8 } from "react-hook-form";
|
|
16636
16654
|
import { z as z8 } from "zod";
|
|
16637
|
-
import { Fragment as Fragment36, jsx as
|
|
16655
|
+
import { Fragment as Fragment36, jsx as jsx186, jsxs as jsxs113 } from "react/jsx-runtime";
|
|
16638
16656
|
function Login() {
|
|
16639
16657
|
const t = useTranslations70();
|
|
16640
16658
|
const { setUser } = useCurrentUserContext();
|
|
@@ -16703,14 +16721,14 @@ function Login() {
|
|
|
16703
16721
|
return /* @__PURE__ */ jsxs113(Fragment36, { children: [
|
|
16704
16722
|
/* @__PURE__ */ jsxs113(CardHeader, { "data-testid": "page-login-container", children: [
|
|
16705
16723
|
/* @__PURE__ */ jsxs113(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
|
|
16706
|
-
/* @__PURE__ */
|
|
16724
|
+
/* @__PURE__ */ jsx186(Image13, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
|
|
16707
16725
|
t("auth.buttons.login")
|
|
16708
16726
|
] }),
|
|
16709
|
-
/* @__PURE__ */
|
|
16727
|
+
/* @__PURE__ */ jsx186(CardDescription, { className: "text-sm", children: t(`auth.login_description`) })
|
|
16710
16728
|
] }),
|
|
16711
|
-
/* @__PURE__ */
|
|
16712
|
-
/* @__PURE__ */
|
|
16713
|
-
/* @__PURE__ */
|
|
16729
|
+
/* @__PURE__ */ jsx186(Form, { ...form, children: /* @__PURE__ */ jsxs113("form", { onSubmit: form.handleSubmit(onSubmit), children: [
|
|
16730
|
+
/* @__PURE__ */ jsx186(CardContent, { children: isInternalAuthEnabled() && /* @__PURE__ */ jsxs113(Fragment36, { children: [
|
|
16731
|
+
/* @__PURE__ */ jsx186(
|
|
16714
16732
|
FormInput,
|
|
16715
16733
|
{
|
|
16716
16734
|
autoFocus: true,
|
|
@@ -16721,7 +16739,7 @@ function Login() {
|
|
|
16721
16739
|
testId: "form-login-input-email"
|
|
16722
16740
|
}
|
|
16723
16741
|
),
|
|
16724
|
-
/* @__PURE__ */
|
|
16742
|
+
/* @__PURE__ */ jsx186(
|
|
16725
16743
|
FormPassword,
|
|
16726
16744
|
{
|
|
16727
16745
|
form,
|
|
@@ -16731,13 +16749,13 @@ function Login() {
|
|
|
16731
16749
|
testId: "form-login-input-password"
|
|
16732
16750
|
}
|
|
16733
16751
|
),
|
|
16734
|
-
/* @__PURE__ */
|
|
16752
|
+
/* @__PURE__ */ jsx186(Button, { className: "mt-4 w-full", type: "submit", "data-testid": "form-login-button-submit", children: t(`auth.buttons.login`) })
|
|
16735
16753
|
] }) }),
|
|
16736
16754
|
/* @__PURE__ */ jsxs113(CardFooter, { className: "flex w-full flex-col gap-y-4 mt-4", children: [
|
|
16737
|
-
isGoogleAuthEnabled() && /* @__PURE__ */
|
|
16738
|
-
isDiscordAuthEnabled() && /* @__PURE__ */
|
|
16755
|
+
isGoogleAuthEnabled() && /* @__PURE__ */ jsx186(GoogleSignInButton, { referralCode }),
|
|
16756
|
+
isDiscordAuthEnabled() && /* @__PURE__ */ jsx186(Link, { href: buildDiscordOAuthUrl(), className: "flex w-full justify-end", children: /* @__PURE__ */ jsx186(Button, { className: "w-full", variant: `outline`, "data-testid": "page-login-button-initial-login", children: "Login with Discord" }) }),
|
|
16739
16757
|
/* @__PURE__ */ jsxs113("div", { className: "flex w-full flex-row justify-between", children: [
|
|
16740
|
-
/* @__PURE__ */
|
|
16758
|
+
/* @__PURE__ */ jsx186(
|
|
16741
16759
|
Link,
|
|
16742
16760
|
{
|
|
16743
16761
|
href: "#",
|
|
@@ -16746,7 +16764,7 @@ function Login() {
|
|
|
16746
16764
|
children: t(`auth.buttons.register`)
|
|
16747
16765
|
}
|
|
16748
16766
|
),
|
|
16749
|
-
/* @__PURE__ */
|
|
16767
|
+
/* @__PURE__ */ jsx186(
|
|
16750
16768
|
Link,
|
|
16751
16769
|
{
|
|
16752
16770
|
href: "#",
|
|
@@ -16776,7 +16794,7 @@ function clearClientStorage(keys) {
|
|
|
16776
16794
|
__name(clearClientStorage, "clearClientStorage");
|
|
16777
16795
|
|
|
16778
16796
|
// src/features/auth/components/forms/Logout.tsx
|
|
16779
|
-
import { Fragment as Fragment37, jsx as
|
|
16797
|
+
import { Fragment as Fragment37, jsx as jsx187 } from "react/jsx-runtime";
|
|
16780
16798
|
function Logout({ storageKeys }) {
|
|
16781
16799
|
const generateUrl = usePageUrlGenerator();
|
|
16782
16800
|
useEffect56(() => {
|
|
@@ -16789,7 +16807,7 @@ function Logout({ storageKeys }) {
|
|
|
16789
16807
|
}, "logOut");
|
|
16790
16808
|
logOut();
|
|
16791
16809
|
}, []);
|
|
16792
|
-
return /* @__PURE__ */
|
|
16810
|
+
return /* @__PURE__ */ jsx187(Fragment37, {});
|
|
16793
16811
|
}
|
|
16794
16812
|
__name(Logout, "Logout");
|
|
16795
16813
|
|
|
@@ -16830,7 +16848,7 @@ import Image14 from "next/image";
|
|
|
16830
16848
|
import { useEffect as useEffect58, useState as useState72 } from "react";
|
|
16831
16849
|
import { useForm as useForm9 } from "react-hook-form";
|
|
16832
16850
|
import { z as z9 } from "zod";
|
|
16833
|
-
import { Fragment as Fragment38, jsx as
|
|
16851
|
+
import { Fragment as Fragment38, jsx as jsx188, jsxs as jsxs114 } from "react/jsx-runtime";
|
|
16834
16852
|
function ResetPassword() {
|
|
16835
16853
|
const { setComponentType, params, setParams } = useAuthContext();
|
|
16836
16854
|
const [showConfirmation, setShowConfirmation] = useState72(false);
|
|
@@ -16896,15 +16914,15 @@ function ResetPassword() {
|
|
|
16896
16914
|
return /* @__PURE__ */ jsxs114(Fragment38, { children: [
|
|
16897
16915
|
/* @__PURE__ */ jsxs114(CardHeader, { children: [
|
|
16898
16916
|
/* @__PURE__ */ jsxs114(CardTitle, { className: "text-primary flex flex-col items-center pb-10 text-4xl", children: [
|
|
16899
|
-
/* @__PURE__ */
|
|
16917
|
+
/* @__PURE__ */ jsx188(Image14, { src: "/logo.webp", alt: "Logo", width: 100, height: 100, priority: true }),
|
|
16900
16918
|
t(`auth.password_reset`)
|
|
16901
16919
|
] }),
|
|
16902
|
-
/* @__PURE__ */
|
|
16920
|
+
/* @__PURE__ */ jsx188(CardDescription, { className: "text-center text-sm", children: error ? /* @__PURE__ */ jsx188(Fragment38, { children: t(`auth.errors.password_reset_error`) }) : /* @__PURE__ */ jsx188(Fragment38, { children: t(`auth.reset_password`) }) })
|
|
16903
16921
|
] }),
|
|
16904
|
-
/* @__PURE__ */
|
|
16905
|
-
/* @__PURE__ */
|
|
16906
|
-
/* @__PURE__ */
|
|
16907
|
-
/* @__PURE__ */
|
|
16922
|
+
/* @__PURE__ */ jsx188(CardContent, { children: showConfirmation ? /* @__PURE__ */ jsx188(CardDescription, { className: "text-center text-xl", children: t(`auth.reset_success_description`) }) : error ? /* @__PURE__ */ jsx188(CardDescription, { className: "text-center text-xl", children: error }) : /* @__PURE__ */ jsx188(Form, { ...form, children: /* @__PURE__ */ jsxs114("form", { onSubmit: form.handleSubmit(onSubmit), children: [
|
|
16923
|
+
/* @__PURE__ */ jsx188(FormPassword, { form, id: "password", name: "Password" }),
|
|
16924
|
+
/* @__PURE__ */ jsx188(FormPassword, { form, id: "passwordRetype", name: "Retype Password" }),
|
|
16925
|
+
/* @__PURE__ */ jsx188(Button, { className: "mt-4 w-full", type: "submit", children: t(`auth.buttons.reset_password`) })
|
|
16908
16926
|
] }) }) })
|
|
16909
16927
|
] });
|
|
16910
16928
|
}
|
|
@@ -16921,7 +16939,7 @@ import { startAuthentication } from "@simplewebauthn/browser";
|
|
|
16921
16939
|
import { useTranslations as useTranslations72 } from "next-intl";
|
|
16922
16940
|
import { useState as useState73 } from "react";
|
|
16923
16941
|
import { v4 as v49 } from "uuid";
|
|
16924
|
-
import { jsx as
|
|
16942
|
+
import { jsx as jsx189 } from "react/jsx-runtime";
|
|
16925
16943
|
function PasskeyButton({ pendingToken, onSuccess, onError, disabled = false }) {
|
|
16926
16944
|
const t = useTranslations72();
|
|
16927
16945
|
const [isLoading, setIsLoading] = useState73(false);
|
|
@@ -16943,7 +16961,7 @@ function PasskeyButton({ pendingToken, onSuccess, onError, disabled = false }) {
|
|
|
16943
16961
|
setIsLoading(false);
|
|
16944
16962
|
}
|
|
16945
16963
|
}, "handleClick");
|
|
16946
|
-
return /* @__PURE__ */
|
|
16964
|
+
return /* @__PURE__ */ jsx189(
|
|
16947
16965
|
Button,
|
|
16948
16966
|
{
|
|
16949
16967
|
type: "button",
|
|
@@ -16959,7 +16977,7 @@ function PasskeyButton({ pendingToken, onSuccess, onError, disabled = false }) {
|
|
|
16959
16977
|
__name(PasskeyButton, "PasskeyButton");
|
|
16960
16978
|
|
|
16961
16979
|
// src/features/auth/components/forms/TwoFactorChallenge.tsx
|
|
16962
|
-
import { Fragment as Fragment39, jsx as
|
|
16980
|
+
import { Fragment as Fragment39, jsx as jsx190, jsxs as jsxs115 } from "react/jsx-runtime";
|
|
16963
16981
|
function TwoFactorChallenge() {
|
|
16964
16982
|
const t = useTranslations73();
|
|
16965
16983
|
const { setUser } = useCurrentUserContext();
|
|
@@ -17041,22 +17059,22 @@ function TwoFactorChallenge() {
|
|
|
17041
17059
|
const hasBackup = availableMethods.includes("backup");
|
|
17042
17060
|
return /* @__PURE__ */ jsxs115(Fragment39, { children: [
|
|
17043
17061
|
/* @__PURE__ */ jsxs115(CardHeader, { "data-testid": "page-2fa-challenge", children: [
|
|
17044
|
-
/* @__PURE__ */
|
|
17045
|
-
/* @__PURE__ */
|
|
17062
|
+
/* @__PURE__ */ jsx190(CardTitle, { className: "text-primary text-2xl", children: t("auth.two_factor.verification_required") }),
|
|
17063
|
+
/* @__PURE__ */ jsx190(CardDescription, { children: t("auth.two_factor.enter_verification_code") })
|
|
17046
17064
|
] }),
|
|
17047
|
-
/* @__PURE__ */
|
|
17065
|
+
/* @__PURE__ */ jsx190(CardContent, { children: /* @__PURE__ */ jsxs115(Tabs, { defaultValue: hasTotp ? "totp" : hasPasskey ? "passkey" : "backup", children: [
|
|
17048
17066
|
/* @__PURE__ */ jsxs115(TabsList, { className: "grid w-full grid-cols-3", children: [
|
|
17049
|
-
hasTotp && /* @__PURE__ */
|
|
17050
|
-
hasPasskey && /* @__PURE__ */
|
|
17051
|
-
hasBackup && /* @__PURE__ */
|
|
17067
|
+
hasTotp && /* @__PURE__ */ jsx190(TabsTrigger, { value: "totp", "data-testid": "tab-totp", children: t("auth.two_factor.authenticator") }),
|
|
17068
|
+
hasPasskey && /* @__PURE__ */ jsx190(TabsTrigger, { value: "passkey", "data-testid": "tab-passkey", children: t("auth.two_factor.passkey") }),
|
|
17069
|
+
hasBackup && /* @__PURE__ */ jsx190(TabsTrigger, { value: "backup", "data-testid": "tab-backup", children: t("auth.two_factor.backup_code") })
|
|
17052
17070
|
] }),
|
|
17053
|
-
hasTotp && /* @__PURE__ */
|
|
17054
|
-
/* @__PURE__ */
|
|
17055
|
-
/* @__PURE__ */
|
|
17071
|
+
hasTotp && /* @__PURE__ */ jsx190(TabsContent, { value: "totp", className: "mt-6", children: /* @__PURE__ */ jsxs115("div", { className: "flex flex-col items-center gap-4", children: [
|
|
17072
|
+
/* @__PURE__ */ jsx190("p", { className: "text-sm text-muted-foreground text-center", children: t("auth.two_factor.enter_authenticator_code") }),
|
|
17073
|
+
/* @__PURE__ */ jsx190(TotpInput, { onComplete: handleTotpComplete, disabled: isVerifying, error: totpError })
|
|
17056
17074
|
] }) }),
|
|
17057
|
-
hasPasskey && /* @__PURE__ */
|
|
17058
|
-
/* @__PURE__ */
|
|
17059
|
-
/* @__PURE__ */
|
|
17075
|
+
hasPasskey && /* @__PURE__ */ jsx190(TabsContent, { value: "passkey", className: "mt-6", children: /* @__PURE__ */ jsxs115("div", { className: "flex flex-col items-center gap-4", children: [
|
|
17076
|
+
/* @__PURE__ */ jsx190("p", { className: "text-sm text-muted-foreground text-center", children: t("auth.two_factor.use_passkey_description") }),
|
|
17077
|
+
/* @__PURE__ */ jsx190(
|
|
17060
17078
|
PasskeyButton,
|
|
17061
17079
|
{
|
|
17062
17080
|
pendingToken: pendingTwoFactor.pendingToken,
|
|
@@ -17066,9 +17084,9 @@ function TwoFactorChallenge() {
|
|
|
17066
17084
|
}
|
|
17067
17085
|
)
|
|
17068
17086
|
] }) }),
|
|
17069
|
-
hasBackup && /* @__PURE__ */
|
|
17070
|
-
/* @__PURE__ */
|
|
17071
|
-
/* @__PURE__ */
|
|
17087
|
+
hasBackup && /* @__PURE__ */ jsx190(TabsContent, { value: "backup", className: "mt-6", children: /* @__PURE__ */ jsxs115("div", { className: "flex flex-col items-center gap-4", children: [
|
|
17088
|
+
/* @__PURE__ */ jsx190("p", { className: "text-sm text-muted-foreground text-center", children: t("auth.two_factor.enter_backup_code") }),
|
|
17089
|
+
/* @__PURE__ */ jsx190(
|
|
17072
17090
|
Input,
|
|
17073
17091
|
{
|
|
17074
17092
|
type: "text",
|
|
@@ -17081,8 +17099,8 @@ function TwoFactorChallenge() {
|
|
|
17081
17099
|
"data-testid": "backup-code-input"
|
|
17082
17100
|
}
|
|
17083
17101
|
),
|
|
17084
|
-
backupError && /* @__PURE__ */
|
|
17085
|
-
/* @__PURE__ */
|
|
17102
|
+
backupError && /* @__PURE__ */ jsx190("p", { className: "text-sm text-destructive", children: backupError }),
|
|
17103
|
+
/* @__PURE__ */ jsx190(
|
|
17086
17104
|
Button,
|
|
17087
17105
|
{
|
|
17088
17106
|
onClick: handleBackupSubmit,
|
|
@@ -17099,12 +17117,12 @@ __name(TwoFactorChallenge, "TwoFactorChallenge");
|
|
|
17099
17117
|
|
|
17100
17118
|
// src/features/content/components/lists/ContentsList.tsx
|
|
17101
17119
|
import { useTranslations as useTranslations74 } from "next-intl";
|
|
17102
|
-
import { jsx as
|
|
17120
|
+
import { jsx as jsx191, jsxs as jsxs116 } from "react/jsx-runtime";
|
|
17103
17121
|
function ContentsList({ contentList }) {
|
|
17104
17122
|
const t = useTranslations74();
|
|
17105
17123
|
return /* @__PURE__ */ jsxs116("div", { className: "flex min-h-0 w-full flex-col overflow-y-auto", children: [
|
|
17106
|
-
/* @__PURE__ */
|
|
17107
|
-
/* @__PURE__ */
|
|
17124
|
+
/* @__PURE__ */ jsx191("h2", { className: "text-xl font-semibold", children: t(`content.news`) }),
|
|
17125
|
+
/* @__PURE__ */ jsx191("div", { className: "flex flex-col", children: contentList.map((content) => /* @__PURE__ */ jsx191(ContentsListElement, { content }, content.id)) })
|
|
17108
17126
|
] });
|
|
17109
17127
|
}
|
|
17110
17128
|
__name(ContentsList, "ContentsList");
|
|
@@ -17112,25 +17130,25 @@ function ContentsListElement({ content }) {
|
|
|
17112
17130
|
const generateUrl = usePageUrlGenerator();
|
|
17113
17131
|
const contentModule = content.contentType ? Modules.findByModelName(content.contentType) : void 0;
|
|
17114
17132
|
const link = contentModule ? generateUrl({ page: contentModule, id: content.id }) : "#";
|
|
17115
|
-
return /* @__PURE__ */
|
|
17133
|
+
return /* @__PURE__ */ jsx191("div", { className: "hover:bg-muted flex w-full flex-col gap-y-2 border-b p-2 py-4", children: /* @__PURE__ */ jsxs116("div", { className: "flex w-full justify-between gap-x-2", children: [
|
|
17116
17134
|
/* @__PURE__ */ jsxs116(HoverCard, { children: [
|
|
17117
|
-
/* @__PURE__ */
|
|
17135
|
+
/* @__PURE__ */ jsx191(HoverCardTrigger, { children: /* @__PURE__ */ jsxs116(Link, { href: link, className: "flex w-full items-center justify-start gap-2 font-semibold", children: [
|
|
17118
17136
|
contentModule && getIconByModule({ module: contentModule, className: "h-4 w-4" }),
|
|
17119
17137
|
content.name
|
|
17120
17138
|
] }) }),
|
|
17121
17139
|
/* @__PURE__ */ jsxs116(HoverCardContent, { className: "flex max-h-96 w-96 flex-col gap-y-4 overflow-y-auto", children: [
|
|
17122
|
-
/* @__PURE__ */
|
|
17123
|
-
/* @__PURE__ */
|
|
17140
|
+
/* @__PURE__ */ jsx191(Link, { href: link, className: "font-semibold", children: content.name }),
|
|
17141
|
+
/* @__PURE__ */ jsx191("div", { className: "text-xs", children: content.abstract })
|
|
17124
17142
|
] })
|
|
17125
17143
|
] }),
|
|
17126
|
-
/* @__PURE__ */
|
|
17144
|
+
/* @__PURE__ */ jsx191(ContributorsList, { content })
|
|
17127
17145
|
] }) });
|
|
17128
17146
|
}
|
|
17129
17147
|
__name(ContentsListElement, "ContentsListElement");
|
|
17130
17148
|
|
|
17131
17149
|
// src/features/content/components/lists/ContentsListById.tsx
|
|
17132
17150
|
import { useTranslations as useTranslations75 } from "next-intl";
|
|
17133
|
-
import { jsx as
|
|
17151
|
+
import { jsx as jsx192 } from "react/jsx-runtime";
|
|
17134
17152
|
function ContentsListById({ contentIds }) {
|
|
17135
17153
|
const t = useTranslations75();
|
|
17136
17154
|
const data = useDataListRetriever({
|
|
@@ -17138,7 +17156,7 @@ function ContentsListById({ contentIds }) {
|
|
|
17138
17156
|
retriever: /* @__PURE__ */ __name((params) => ContentService.findMany(params), "retriever"),
|
|
17139
17157
|
retrieverParams: { contentIds }
|
|
17140
17158
|
});
|
|
17141
|
-
return /* @__PURE__ */
|
|
17159
|
+
return /* @__PURE__ */ jsx192(
|
|
17142
17160
|
ContentListTable,
|
|
17143
17161
|
{
|
|
17144
17162
|
data,
|
|
@@ -17152,7 +17170,7 @@ __name(ContentsListById, "ContentsListById");
|
|
|
17152
17170
|
|
|
17153
17171
|
// src/features/content/components/lists/RelevantContentsList.tsx
|
|
17154
17172
|
import { useTranslations as useTranslations76 } from "next-intl";
|
|
17155
|
-
import { jsx as
|
|
17173
|
+
import { jsx as jsx193 } from "react/jsx-runtime";
|
|
17156
17174
|
function RelevantContentsList({ id }) {
|
|
17157
17175
|
const t = useTranslations76();
|
|
17158
17176
|
const data = useDataListRetriever({
|
|
@@ -17160,7 +17178,7 @@ function RelevantContentsList({ id }) {
|
|
|
17160
17178
|
retriever: /* @__PURE__ */ __name((params) => ContentService.findRelevant(params), "retriever"),
|
|
17161
17179
|
retrieverParams: { id }
|
|
17162
17180
|
});
|
|
17163
|
-
return /* @__PURE__ */
|
|
17181
|
+
return /* @__PURE__ */ jsx193(
|
|
17164
17182
|
ContentListTable,
|
|
17165
17183
|
{
|
|
17166
17184
|
data,
|
|
@@ -17249,7 +17267,7 @@ function extractHeadings(blocks) {
|
|
|
17249
17267
|
__name(extractHeadings, "extractHeadings");
|
|
17250
17268
|
|
|
17251
17269
|
// src/features/how-to/components/containers/HowToCommandViewer.tsx
|
|
17252
|
-
import { jsx as
|
|
17270
|
+
import { jsx as jsx194, jsxs as jsxs117 } from "react/jsx-runtime";
|
|
17253
17271
|
function HowToCommandViewer({ howTo, onBack, onStartChat }) {
|
|
17254
17272
|
const t = useTranslations77();
|
|
17255
17273
|
const readingTime = useMemo27(() => calculateReadingTime(howTo.description), [howTo.description]);
|
|
@@ -17257,17 +17275,17 @@ function HowToCommandViewer({ howTo, onBack, onStartChat }) {
|
|
|
17257
17275
|
return /* @__PURE__ */ jsxs117("div", { className: "flex h-full flex-col", children: [
|
|
17258
17276
|
/* @__PURE__ */ jsxs117("div", { className: "flex items-center gap-3 border-b px-4 py-3", children: [
|
|
17259
17277
|
/* @__PURE__ */ jsxs117(Button, { variant: "ghost", size: "sm", onClick: onBack, className: "h-8 px-2", children: [
|
|
17260
|
-
/* @__PURE__ */
|
|
17261
|
-
/* @__PURE__ */
|
|
17278
|
+
/* @__PURE__ */ jsx194(ArrowLeft, { className: "h-4 w-4" }),
|
|
17279
|
+
/* @__PURE__ */ jsx194("span", { className: "ml-1", children: t("howto.command.back") })
|
|
17262
17280
|
] }),
|
|
17263
|
-
/* @__PURE__ */
|
|
17281
|
+
/* @__PURE__ */ jsx194("h2", { className: "flex-1 truncate text-lg font-semibold", children: howTo.name }),
|
|
17264
17282
|
/* @__PURE__ */ jsxs117("div", { className: "text-muted-foreground flex items-center gap-1.5 text-sm", children: [
|
|
17265
|
-
/* @__PURE__ */
|
|
17266
|
-
/* @__PURE__ */
|
|
17283
|
+
/* @__PURE__ */ jsx194(BookOpen, { className: "h-4 w-4" }),
|
|
17284
|
+
/* @__PURE__ */ jsx194("span", { children: t("howto.reading_time.label", { minutes: readingTime }) })
|
|
17267
17285
|
] })
|
|
17268
17286
|
] }),
|
|
17269
17287
|
/* @__PURE__ */ jsxs117("div", { className: "flex min-h-0 flex-1", children: [
|
|
17270
|
-
headings.length > 0 && /* @__PURE__ */
|
|
17288
|
+
headings.length > 0 && /* @__PURE__ */ jsx194("div", { className: "w-50 shrink-0 overflow-y-auto border-r p-4", children: /* @__PURE__ */ jsx194("nav", { className: "space-y-1", children: headings.map((heading) => /* @__PURE__ */ jsx194(
|
|
17271
17289
|
"a",
|
|
17272
17290
|
{
|
|
17273
17291
|
href: `#${heading.id}`,
|
|
@@ -17277,10 +17295,10 @@ function HowToCommandViewer({ howTo, onBack, onStartChat }) {
|
|
|
17277
17295
|
},
|
|
17278
17296
|
heading.id
|
|
17279
17297
|
)) }) }),
|
|
17280
|
-
/* @__PURE__ */
|
|
17298
|
+
/* @__PURE__ */ jsx194("div", { id: "howto-viewer-content", className: "min-w-0 flex-1 overflow-y-auto p-4", children: /* @__PURE__ */ jsx194(BlockNoteEditorContainer, { id: howTo.id, type: "howto", initialContent: howTo.description }) })
|
|
17281
17299
|
] }),
|
|
17282
|
-
onStartChat && /* @__PURE__ */
|
|
17283
|
-
/* @__PURE__ */
|
|
17300
|
+
onStartChat && /* @__PURE__ */ jsx194("div", { className: "flex items-center justify-end gap-2 border-t px-4 py-3", children: /* @__PURE__ */ jsxs117(Button, { onClick: onStartChat, variant: "default", size: "sm", children: [
|
|
17301
|
+
/* @__PURE__ */ jsx194(MessageSquare, { className: "mr-2 h-4 w-4" }),
|
|
17284
17302
|
t("howto.command.chat_button")
|
|
17285
17303
|
] }) })
|
|
17286
17304
|
] });
|
|
@@ -17288,7 +17306,7 @@ function HowToCommandViewer({ howTo, onBack, onStartChat }) {
|
|
|
17288
17306
|
__name(HowToCommandViewer, "HowToCommandViewer");
|
|
17289
17307
|
|
|
17290
17308
|
// src/features/how-to/components/containers/HowToCommand.tsx
|
|
17291
|
-
import { Fragment as Fragment40, jsx as
|
|
17309
|
+
import { Fragment as Fragment40, jsx as jsx195, jsxs as jsxs118 } from "react/jsx-runtime";
|
|
17292
17310
|
function matchPage(pathname, pattern) {
|
|
17293
17311
|
if (pattern.includes(":")) {
|
|
17294
17312
|
const pathSegments = pathname.split("/").filter(Boolean);
|
|
@@ -17368,12 +17386,12 @@ function HowToCommand({ pathname, extraGroups, onStartChat }) {
|
|
|
17368
17386
|
onClick: () => setDialogOpen(true),
|
|
17369
17387
|
className: "text-muted-foreground",
|
|
17370
17388
|
children: [
|
|
17371
|
-
/* @__PURE__ */
|
|
17372
|
-
/* @__PURE__ */
|
|
17389
|
+
/* @__PURE__ */ jsx195(LifeBuoyIcon, {}),
|
|
17390
|
+
/* @__PURE__ */ jsx195("span", { children: t(`howto.command.trigger`) })
|
|
17373
17391
|
]
|
|
17374
17392
|
}
|
|
17375
17393
|
),
|
|
17376
|
-
/* @__PURE__ */
|
|
17394
|
+
/* @__PURE__ */ jsx195(
|
|
17377
17395
|
Dialog,
|
|
17378
17396
|
{
|
|
17379
17397
|
open: dialogOpen,
|
|
@@ -17388,10 +17406,10 @@ function HowToCommand({ pathname, extraGroups, onStartChat }) {
|
|
|
17388
17406
|
className: `flex flex-col gap-0 overflow-hidden p-0 ${selectedHowTo ? "h-[80vh] max-w-3xl" : "max-w-lg"}`,
|
|
17389
17407
|
children: [
|
|
17390
17408
|
/* @__PURE__ */ jsxs118(DialogHeader, { className: "sr-only", children: [
|
|
17391
|
-
/* @__PURE__ */
|
|
17392
|
-
/* @__PURE__ */
|
|
17409
|
+
/* @__PURE__ */ jsx195(DialogTitle, { children: selectedHowTo ? selectedHowTo.name : t("howto.command.title") }),
|
|
17410
|
+
/* @__PURE__ */ jsx195(DialogDescription, { children: " " })
|
|
17393
17411
|
] }),
|
|
17394
|
-
selectedHowTo ? /* @__PURE__ */
|
|
17412
|
+
selectedHowTo ? /* @__PURE__ */ jsx195(
|
|
17395
17413
|
HowToCommandViewer,
|
|
17396
17414
|
{
|
|
17397
17415
|
howTo: selectedHowTo,
|
|
@@ -17404,7 +17422,7 @@ function HowToCommand({ pathname, extraGroups, onStartChat }) {
|
|
|
17404
17422
|
shouldFilter: false,
|
|
17405
17423
|
className: "[&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5",
|
|
17406
17424
|
children: [
|
|
17407
|
-
/* @__PURE__ */
|
|
17425
|
+
/* @__PURE__ */ jsx195(
|
|
17408
17426
|
CommandInput,
|
|
17409
17427
|
{
|
|
17410
17428
|
onKeyDown: (e) => {
|
|
@@ -17419,28 +17437,28 @@ function HowToCommand({ pathname, extraGroups, onStartChat }) {
|
|
|
17419
17437
|
}
|
|
17420
17438
|
),
|
|
17421
17439
|
/* @__PURE__ */ jsxs118(CommandList, { className: "max-h-[60vh] overflow-y-auto", children: [
|
|
17422
|
-
/* @__PURE__ */
|
|
17440
|
+
/* @__PURE__ */ jsx195(CommandEmpty, { children: t(`howto.command.empty`) }),
|
|
17423
17441
|
!searchTerm && extraGroups,
|
|
17424
|
-
relevantHowTos.length > 0 && /* @__PURE__ */
|
|
17425
|
-
/* @__PURE__ */
|
|
17426
|
-
/* @__PURE__ */
|
|
17442
|
+
relevantHowTos.length > 0 && /* @__PURE__ */ jsx195(CommandGroup, { heading: t(`howto.command.relevant`), children: relevantHowTos.map((howTo) => /* @__PURE__ */ jsxs118(CommandItem, { onSelect: () => setSelectedHowTo(howTo), className: "cursor-pointer", children: [
|
|
17443
|
+
/* @__PURE__ */ jsx195(ArrowRight, { className: "h-4 w-4" }),
|
|
17444
|
+
/* @__PURE__ */ jsx195("span", { children: howTo.name })
|
|
17427
17445
|
] }, howTo.id)) }),
|
|
17428
|
-
otherHowTos.length > 0 && /* @__PURE__ */
|
|
17429
|
-
/* @__PURE__ */
|
|
17430
|
-
/* @__PURE__ */
|
|
17446
|
+
otherHowTos.length > 0 && /* @__PURE__ */ jsx195(CommandGroup, { heading: searchTerm ? void 0 : t(`howto.command.all`), children: otherHowTos.map((howTo) => /* @__PURE__ */ jsxs118(CommandItem, { onSelect: () => setSelectedHowTo(howTo), className: "cursor-pointer", children: [
|
|
17447
|
+
/* @__PURE__ */ jsx195(ArrowRight, { className: "h-4 w-4" }),
|
|
17448
|
+
/* @__PURE__ */ jsx195("span", { children: howTo.name })
|
|
17431
17449
|
] }, howTo.id)) })
|
|
17432
17450
|
] }),
|
|
17433
17451
|
/* @__PURE__ */ jsxs118("div", { className: "text-muted-foreground flex items-center justify-center gap-4 border-t px-3 py-2 text-xs", children: [
|
|
17434
17452
|
/* @__PURE__ */ jsxs118("span", { className: "flex items-center gap-1", children: [
|
|
17435
|
-
/* @__PURE__ */
|
|
17453
|
+
/* @__PURE__ */ jsx195("kbd", { className: "bg-muted rounded border px-1.5 py-0.5 font-mono text-[10px]", children: "\u23CE" }),
|
|
17436
17454
|
t(`howto.command.keyboard.select`)
|
|
17437
17455
|
] }),
|
|
17438
17456
|
/* @__PURE__ */ jsxs118("span", { className: "flex items-center gap-1", children: [
|
|
17439
|
-
/* @__PURE__ */
|
|
17457
|
+
/* @__PURE__ */ jsx195("kbd", { className: "bg-muted rounded border px-1.5 py-0.5 font-mono text-[10px]", children: "\u2191\u2193" }),
|
|
17440
17458
|
t(`howto.command.keyboard.navigate`)
|
|
17441
17459
|
] }),
|
|
17442
17460
|
/* @__PURE__ */ jsxs118("span", { className: "flex items-center gap-1", children: [
|
|
17443
|
-
/* @__PURE__ */
|
|
17461
|
+
/* @__PURE__ */ jsx195("kbd", { className: "bg-muted rounded border px-1.5 py-0.5 font-mono text-[10px]", children: t(`howto.keyboard.esc`) }),
|
|
17444
17462
|
t(`howto.command.keyboard.close`)
|
|
17445
17463
|
] })
|
|
17446
17464
|
] })
|
|
@@ -17457,28 +17475,28 @@ function HowToCommand({ pathname, extraGroups, onStartChat }) {
|
|
|
17457
17475
|
__name(HowToCommand, "HowToCommand");
|
|
17458
17476
|
|
|
17459
17477
|
// src/features/how-to/components/details/HowToContent.tsx
|
|
17460
|
-
import { jsx as
|
|
17478
|
+
import { jsx as jsx196 } from "react/jsx-runtime";
|
|
17461
17479
|
function HowToContent() {
|
|
17462
17480
|
const { howTo } = useHowToContext();
|
|
17463
17481
|
if (!howTo) return null;
|
|
17464
|
-
return /* @__PURE__ */
|
|
17482
|
+
return /* @__PURE__ */ jsx196(Card, { className: "flex w-full flex-col p-4", children: /* @__PURE__ */ jsx196(BlockNoteEditorContainer, { id: howTo.id, type: "howto", initialContent: howTo.description }) });
|
|
17465
17483
|
}
|
|
17466
17484
|
__name(HowToContent, "HowToContent");
|
|
17467
17485
|
|
|
17468
17486
|
// src/features/how-to/components/details/HowToDetails.tsx
|
|
17469
17487
|
import { useTranslations as useTranslations79 } from "next-intl";
|
|
17470
|
-
import { jsx as
|
|
17488
|
+
import { jsx as jsx197, jsxs as jsxs119 } from "react/jsx-runtime";
|
|
17471
17489
|
function HowToDetailsInternal({ howTo }) {
|
|
17472
17490
|
const t = useTranslations79();
|
|
17473
17491
|
const { title } = useSharedContext();
|
|
17474
17492
|
const pagesList = HowTo.parsePagesFromString(howTo.pages);
|
|
17475
17493
|
return /* @__PURE__ */ jsxs119("div", { className: "flex w-full flex-col gap-y-4", children: [
|
|
17476
|
-
/* @__PURE__ */
|
|
17477
|
-
pagesList.length > 0 && /* @__PURE__ */
|
|
17494
|
+
/* @__PURE__ */ jsx197(ContentTitle, { type: title.type, element: title.element, functions: title.functions, module: Modules.HowTo }),
|
|
17495
|
+
pagesList.length > 0 && /* @__PURE__ */ jsx197("div", { className: "border-t pt-4", children: /* @__PURE__ */ jsx197(
|
|
17478
17496
|
AttributeElement,
|
|
17479
17497
|
{
|
|
17480
17498
|
title: t(`howto.fields.pages.label`),
|
|
17481
|
-
value: /* @__PURE__ */
|
|
17499
|
+
value: /* @__PURE__ */ jsx197("ul", { className: "flex flex-col gap-y-1", children: pagesList.map((page, index) => /* @__PURE__ */ jsx197("li", { children: /* @__PURE__ */ jsx197(Link, { href: page, className: "text-primary", children: page }) }, index)) })
|
|
17482
17500
|
}
|
|
17483
17501
|
) })
|
|
17484
17502
|
] });
|
|
@@ -17487,20 +17505,20 @@ __name(HowToDetailsInternal, "HowToDetailsInternal");
|
|
|
17487
17505
|
function HowToDetails() {
|
|
17488
17506
|
const { howTo } = useHowToContext();
|
|
17489
17507
|
if (!howTo) return null;
|
|
17490
|
-
return /* @__PURE__ */
|
|
17508
|
+
return /* @__PURE__ */ jsx197(HowToDetailsInternal, { howTo });
|
|
17491
17509
|
}
|
|
17492
17510
|
__name(HowToDetails, "HowToDetails");
|
|
17493
17511
|
|
|
17494
17512
|
// src/features/how-to/components/containers/HowToContainer.tsx
|
|
17495
|
-
import { jsx as
|
|
17513
|
+
import { jsx as jsx198 } from "react/jsx-runtime";
|
|
17496
17514
|
function HowToContainerInternal({ howTo }) {
|
|
17497
|
-
return /* @__PURE__ */
|
|
17515
|
+
return /* @__PURE__ */ jsx198(RoundPageContainer, { module: Modules.HowTo, details: /* @__PURE__ */ jsx198(HowToDetails, {}), children: /* @__PURE__ */ jsx198(HowToContent, {}) });
|
|
17498
17516
|
}
|
|
17499
17517
|
__name(HowToContainerInternal, "HowToContainerInternal");
|
|
17500
17518
|
function HowToContainer() {
|
|
17501
17519
|
const { howTo } = useHowToContext();
|
|
17502
17520
|
if (!howTo) return null;
|
|
17503
|
-
return /* @__PURE__ */
|
|
17521
|
+
return /* @__PURE__ */ jsx198(HowToContainerInternal, { howTo });
|
|
17504
17522
|
}
|
|
17505
17523
|
__name(HowToContainer, "HowToContainer");
|
|
17506
17524
|
|
|
@@ -17510,7 +17528,7 @@ import { useTranslations as useTranslations81 } from "next-intl";
|
|
|
17510
17528
|
// src/features/how-to/hooks/useHowToTableStructure.tsx
|
|
17511
17529
|
import { useTranslations as useTranslations80 } from "next-intl";
|
|
17512
17530
|
import { useMemo as useMemo29 } from "react";
|
|
17513
|
-
import { Fragment as Fragment41, jsx as
|
|
17531
|
+
import { Fragment as Fragment41, jsx as jsx199 } from "react/jsx-runtime";
|
|
17514
17532
|
var useHowToTableStructure = /* @__PURE__ */ __name((params) => {
|
|
17515
17533
|
const t = useTranslations80();
|
|
17516
17534
|
const generateUrl = usePageUrlGenerator();
|
|
@@ -17538,7 +17556,7 @@ var useHowToTableStructure = /* @__PURE__ */ __name((params) => {
|
|
|
17538
17556
|
header: t(`howto.fields.name.label`),
|
|
17539
17557
|
cell: /* @__PURE__ */ __name(({ row }) => {
|
|
17540
17558
|
const howTo = row.original.jsonApiData;
|
|
17541
|
-
return /* @__PURE__ */
|
|
17559
|
+
return /* @__PURE__ */ jsx199(Link, { href: generateUrl({ page: Modules.HowTo, id: howTo.id }), children: howTo.name });
|
|
17542
17560
|
}, "cell"),
|
|
17543
17561
|
enableSorting: false,
|
|
17544
17562
|
enableHiding: false
|
|
@@ -17547,7 +17565,7 @@ var useHowToTableStructure = /* @__PURE__ */ __name((params) => {
|
|
|
17547
17565
|
id: "description",
|
|
17548
17566
|
accessorKey: "description",
|
|
17549
17567
|
header: t(`howto.fields.description.label`),
|
|
17550
|
-
cell: /* @__PURE__ */ __name(({ row }) => /* @__PURE__ */
|
|
17568
|
+
cell: /* @__PURE__ */ __name(({ row }) => /* @__PURE__ */ jsx199(Fragment41, { children: row.getValue("description") }), "cell"),
|
|
17551
17569
|
enableSorting: false,
|
|
17552
17570
|
enableHiding: false
|
|
17553
17571
|
}),
|
|
@@ -17555,7 +17573,7 @@ var useHowToTableStructure = /* @__PURE__ */ __name((params) => {
|
|
|
17555
17573
|
id: "pages",
|
|
17556
17574
|
accessorKey: "pages",
|
|
17557
17575
|
header: t(`howto.fields.pages.label`),
|
|
17558
|
-
cell: /* @__PURE__ */ __name(({ row }) => /* @__PURE__ */
|
|
17576
|
+
cell: /* @__PURE__ */ __name(({ row }) => /* @__PURE__ */ jsx199(Fragment41, { children: row.getValue("pages") }), "cell"),
|
|
17559
17577
|
enableSorting: false,
|
|
17560
17578
|
enableHiding: false
|
|
17561
17579
|
}),
|
|
@@ -17576,7 +17594,7 @@ var useHowToTableStructure = /* @__PURE__ */ __name((params) => {
|
|
|
17576
17594
|
registerTableGenerator("howtos", useHowToTableStructure);
|
|
17577
17595
|
|
|
17578
17596
|
// src/features/how-to/components/lists/HowToList.tsx
|
|
17579
|
-
import { jsx as
|
|
17597
|
+
import { jsx as jsx200 } from "react/jsx-runtime";
|
|
17580
17598
|
function HowToList({ fullWidth }) {
|
|
17581
17599
|
const t = useTranslations81();
|
|
17582
17600
|
const data = useDataListRetriever({
|
|
@@ -17584,8 +17602,8 @@ function HowToList({ fullWidth }) {
|
|
|
17584
17602
|
retriever: /* @__PURE__ */ __name((params) => HowToService.findMany(params), "retriever"),
|
|
17585
17603
|
retrieverParams: {}
|
|
17586
17604
|
});
|
|
17587
|
-
const functions = [/* @__PURE__ */
|
|
17588
|
-
return /* @__PURE__ */
|
|
17605
|
+
const functions = [/* @__PURE__ */ jsx200(HowToEditor, {}, "create-how-to")];
|
|
17606
|
+
return /* @__PURE__ */ jsx200(
|
|
17589
17607
|
ContentListTable,
|
|
17590
17608
|
{
|
|
17591
17609
|
data,
|
|
@@ -17600,19 +17618,19 @@ function HowToList({ fullWidth }) {
|
|
|
17600
17618
|
__name(HowToList, "HowToList");
|
|
17601
17619
|
|
|
17602
17620
|
// src/features/how-to/components/containers/HowToListContainer.tsx
|
|
17603
|
-
import { jsx as
|
|
17621
|
+
import { jsx as jsx201 } from "react/jsx-runtime";
|
|
17604
17622
|
function HowToListContainerInternal() {
|
|
17605
|
-
return /* @__PURE__ */
|
|
17623
|
+
return /* @__PURE__ */ jsx201(RoundPageContainer, { module: Modules.HowTo, fullWidth: true, children: /* @__PURE__ */ jsx201(HowToList, { fullWidth: true }) });
|
|
17606
17624
|
}
|
|
17607
17625
|
__name(HowToListContainerInternal, "HowToListContainerInternal");
|
|
17608
17626
|
function HowToListContainer() {
|
|
17609
|
-
return /* @__PURE__ */
|
|
17627
|
+
return /* @__PURE__ */ jsx201(HowToListContainerInternal, {});
|
|
17610
17628
|
}
|
|
17611
17629
|
__name(HowToListContainer, "HowToListContainer");
|
|
17612
17630
|
|
|
17613
17631
|
// src/features/how-to/components/forms/HowToMultiSelector.tsx
|
|
17614
17632
|
import { useTranslations as useTranslations82 } from "next-intl";
|
|
17615
|
-
import { jsx as
|
|
17633
|
+
import { jsx as jsx202 } from "react/jsx-runtime";
|
|
17616
17634
|
function HowToMultiSelector({
|
|
17617
17635
|
id,
|
|
17618
17636
|
form,
|
|
@@ -17623,7 +17641,7 @@ function HowToMultiSelector({
|
|
|
17623
17641
|
isRequired = false
|
|
17624
17642
|
}) {
|
|
17625
17643
|
const t = useTranslations82();
|
|
17626
|
-
return /* @__PURE__ */
|
|
17644
|
+
return /* @__PURE__ */ jsx202(
|
|
17627
17645
|
EntityMultiSelector,
|
|
17628
17646
|
{
|
|
17629
17647
|
id,
|
|
@@ -17646,7 +17664,7 @@ __name(HowToMultiSelector, "HowToMultiSelector");
|
|
|
17646
17664
|
import { CircleX as CircleX2, RefreshCwIcon as RefreshCwIcon3, SearchIcon as SearchIcon6, XIcon as XIcon10 } from "lucide-react";
|
|
17647
17665
|
import { useTranslations as useTranslations83 } from "next-intl";
|
|
17648
17666
|
import { useCallback as useCallback38, useEffect as useEffect60, useRef as useRef31, useState as useState76 } from "react";
|
|
17649
|
-
import { Fragment as Fragment42, jsx as
|
|
17667
|
+
import { Fragment as Fragment42, jsx as jsx203, jsxs as jsxs120 } from "react/jsx-runtime";
|
|
17650
17668
|
function HowToSelector({
|
|
17651
17669
|
id,
|
|
17652
17670
|
form,
|
|
@@ -17698,10 +17716,10 @@ function HowToSelector({
|
|
|
17698
17716
|
setOpen(false);
|
|
17699
17717
|
}, 0);
|
|
17700
17718
|
}, "setHowTo");
|
|
17701
|
-
return /* @__PURE__ */
|
|
17719
|
+
return /* @__PURE__ */ jsx203("div", { className: "flex w-full flex-col", children: /* @__PURE__ */ jsx203(FormFieldWrapper, { form, name: id, label, isRequired, children: (field) => /* @__PURE__ */ jsxs120(Popover, { open, onOpenChange: setOpen, modal: true, children: [
|
|
17702
17720
|
/* @__PURE__ */ jsxs120("div", { className: "flex w-full flex-row items-center justify-between", children: [
|
|
17703
|
-
/* @__PURE__ */
|
|
17704
|
-
field.value && /* @__PURE__ */
|
|
17721
|
+
/* @__PURE__ */ jsx203(PopoverTrigger, { className: "w-full", children: /* @__PURE__ */ jsx203("div", { className: "flex w-full flex-row items-center justify-start rounded-md", children: field.value ? /* @__PURE__ */ jsx203("div", { className: "bg-input/20 dark:bg-input/30 border-input flex h-7 w-full flex-row items-center justify-start rounded-md border px-2 py-0.5 text-sm md:text-xs/relaxed", children: /* @__PURE__ */ jsx203("span", { children: field.value?.name ?? "" }) }) : /* @__PURE__ */ jsx203("div", { className: "bg-input/20 dark:bg-input/30 border-input text-muted-foreground flex h-7 w-full flex-row items-center justify-start rounded-md border px-2 py-0.5 text-sm md:text-xs/relaxed", children: placeholder ?? t(`generic.search.placeholder`, { type: t(`entities.howtos`, { count: 1 }) }) }) }) }),
|
|
17722
|
+
field.value && /* @__PURE__ */ jsx203(
|
|
17705
17723
|
CircleX2,
|
|
17706
17724
|
{
|
|
17707
17725
|
className: "text-muted hover:text-destructive ml-2 h-4 w-4 shrink-0 cursor-pointer",
|
|
@@ -17709,10 +17727,10 @@ function HowToSelector({
|
|
|
17709
17727
|
}
|
|
17710
17728
|
)
|
|
17711
17729
|
] }),
|
|
17712
|
-
/* @__PURE__ */
|
|
17730
|
+
/* @__PURE__ */ jsx203(PopoverContent, { align: "start", className: "w-(--anchor-width)", children: /* @__PURE__ */ jsxs120(Command, { shouldFilter: false, children: [
|
|
17713
17731
|
/* @__PURE__ */ jsxs120("div", { className: "relative mb-2 w-full", children: [
|
|
17714
|
-
/* @__PURE__ */
|
|
17715
|
-
/* @__PURE__ */
|
|
17732
|
+
/* @__PURE__ */ jsx203(SearchIcon6, { className: "text-muted-foreground absolute top-2.5 left-2.5 h-4 w-4" }),
|
|
17733
|
+
/* @__PURE__ */ jsx203(
|
|
17716
17734
|
Input,
|
|
17717
17735
|
{
|
|
17718
17736
|
placeholder: t(`generic.search.placeholder`, { type: t(`entities.howtos`, { count: 1 }) }),
|
|
@@ -17722,7 +17740,7 @@ function HowToSelector({
|
|
|
17722
17740
|
value: searchTerm
|
|
17723
17741
|
}
|
|
17724
17742
|
),
|
|
17725
|
-
isSearching ? /* @__PURE__ */
|
|
17743
|
+
isSearching ? /* @__PURE__ */ jsx203(RefreshCwIcon3, { className: "text-muted-foreground absolute top-2.5 right-2.5 h-4 w-4 animate-spin" }) : searchTermRef.current ? /* @__PURE__ */ jsx203(
|
|
17726
17744
|
XIcon10,
|
|
17727
17745
|
{
|
|
17728
17746
|
className: `absolute top-2.5 right-2.5 h-4 w-4 ${searchTermRef.current ? "cursor-pointer" : "text-muted-foreground"}`,
|
|
@@ -17731,9 +17749,9 @@ function HowToSelector({
|
|
|
17731
17749
|
search("");
|
|
17732
17750
|
}
|
|
17733
17751
|
}
|
|
17734
|
-
) : /* @__PURE__ */
|
|
17752
|
+
) : /* @__PURE__ */ jsx203(Fragment42, {})
|
|
17735
17753
|
] }),
|
|
17736
|
-
/* @__PURE__ */
|
|
17754
|
+
/* @__PURE__ */ jsx203(CommandList, { children: data.data && data.data.length > 0 && data.data.map((howTo) => /* @__PURE__ */ jsx203(
|
|
17737
17755
|
CommandItem,
|
|
17738
17756
|
{
|
|
17739
17757
|
className: "cursor-pointer hover:bg-muted data-selected:hover:bg-muted bg-transparent data-selected:bg-transparent",
|
|
@@ -17772,15 +17790,15 @@ function groupThreadsByBucket(threads) {
|
|
|
17772
17790
|
__name(groupThreadsByBucket, "groupThreadsByBucket");
|
|
17773
17791
|
|
|
17774
17792
|
// src/features/assistant/components/parts/AssistantSidebar.tsx
|
|
17775
|
-
import { Fragment as Fragment43, jsx as
|
|
17793
|
+
import { Fragment as Fragment43, jsx as jsx204, jsxs as jsxs121 } from "react/jsx-runtime";
|
|
17776
17794
|
function AssistantSidebar({ threads, activeId, onSelect, onNew }) {
|
|
17777
17795
|
const t = useTranslations84();
|
|
17778
17796
|
const groups = groupThreadsByBucket(threads);
|
|
17779
17797
|
const renderSection = /* @__PURE__ */ __name((label, items) => {
|
|
17780
17798
|
if (items.length === 0) return null;
|
|
17781
17799
|
return /* @__PURE__ */ jsxs121("div", { className: "mb-2", children: [
|
|
17782
|
-
/* @__PURE__ */
|
|
17783
|
-
items.map((thread) => /* @__PURE__ */
|
|
17800
|
+
/* @__PURE__ */ jsx204("div", { className: "text-muted-foreground px-2 py-1 text-[10px] font-semibold uppercase tracking-wider", children: label }),
|
|
17801
|
+
items.map((thread) => /* @__PURE__ */ jsx204(
|
|
17784
17802
|
"button",
|
|
17785
17803
|
{
|
|
17786
17804
|
type: "button",
|
|
@@ -17793,12 +17811,12 @@ function AssistantSidebar({ threads, activeId, onSelect, onNew }) {
|
|
|
17793
17811
|
] });
|
|
17794
17812
|
}, "renderSection");
|
|
17795
17813
|
return /* @__PURE__ */ jsxs121("aside", { className: "bg-muted/30 flex w-64 flex-col border-r", children: [
|
|
17796
|
-
/* @__PURE__ */
|
|
17797
|
-
/* @__PURE__ */
|
|
17814
|
+
/* @__PURE__ */ jsx204("div", { className: "border-b p-3", children: /* @__PURE__ */ jsxs121(Button, { onClick: onNew, className: "w-full", size: "sm", children: [
|
|
17815
|
+
/* @__PURE__ */ jsx204(Plus, { className: "mr-1 h-4 w-4" }),
|
|
17798
17816
|
" ",
|
|
17799
17817
|
t("features.assistant.new")
|
|
17800
17818
|
] }) }),
|
|
17801
|
-
/* @__PURE__ */
|
|
17819
|
+
/* @__PURE__ */ jsx204("div", { className: "flex-1 overflow-y-auto p-2", children: threads.length === 0 ? /* @__PURE__ */ jsx204("div", { className: "text-muted-foreground mt-6 text-center text-xs", children: t("features.assistant.empty_sidebar") }) : /* @__PURE__ */ jsxs121(Fragment43, { children: [
|
|
17802
17820
|
renderSection(t("features.assistant.bucket_today"), groups.today),
|
|
17803
17821
|
renderSection(t("features.assistant.bucket_week"), groups.thisWeek),
|
|
17804
17822
|
renderSection(t("features.assistant.bucket_earlier"), groups.earlier)
|
|
@@ -17816,7 +17834,7 @@ import { Sparkles } from "lucide-react";
|
|
|
17816
17834
|
import { useState as useState77 } from "react";
|
|
17817
17835
|
import { useTranslations as useTranslations85 } from "next-intl";
|
|
17818
17836
|
import { ArrowUp } from "lucide-react";
|
|
17819
|
-
import { jsx as
|
|
17837
|
+
import { jsx as jsx205, jsxs as jsxs122 } from "react/jsx-runtime";
|
|
17820
17838
|
function AssistantComposer({ onSend, disabled, value: controlled, onValueChange }) {
|
|
17821
17839
|
const t = useTranslations85();
|
|
17822
17840
|
const [internal, setInternal] = useState77("");
|
|
@@ -17837,7 +17855,7 @@ function AssistantComposer({ onSend, disabled, value: controlled, onValueChange
|
|
|
17837
17855
|
}, "onKeyDown");
|
|
17838
17856
|
return /* @__PURE__ */ jsxs122("div", { className: "flex flex-col gap-1 border-t p-4", children: [
|
|
17839
17857
|
/* @__PURE__ */ jsxs122("div", { className: "bg-muted/30 flex items-end gap-2 rounded-lg border p-2", children: [
|
|
17840
|
-
/* @__PURE__ */
|
|
17858
|
+
/* @__PURE__ */ jsx205(
|
|
17841
17859
|
Textarea,
|
|
17842
17860
|
{
|
|
17843
17861
|
value,
|
|
@@ -17850,32 +17868,32 @@ function AssistantComposer({ onSend, disabled, value: controlled, onValueChange
|
|
|
17850
17868
|
}
|
|
17851
17869
|
),
|
|
17852
17870
|
/* @__PURE__ */ jsxs122(Button, { onClick: submit, disabled: !canSend, size: "sm", className: "h-8", children: [
|
|
17853
|
-
/* @__PURE__ */
|
|
17871
|
+
/* @__PURE__ */ jsx205(ArrowUp, { className: "mr-1 h-4 w-4" }),
|
|
17854
17872
|
" ",
|
|
17855
17873
|
t("ui.buttons.save")
|
|
17856
17874
|
] })
|
|
17857
17875
|
] }),
|
|
17858
|
-
/* @__PURE__ */
|
|
17876
|
+
/* @__PURE__ */ jsx205("div", { className: "text-muted-foreground text-right text-xs", children: t("features.assistant.keyboard_hint") })
|
|
17859
17877
|
] });
|
|
17860
17878
|
}
|
|
17861
17879
|
__name(AssistantComposer, "AssistantComposer");
|
|
17862
17880
|
|
|
17863
17881
|
// src/features/assistant/components/parts/AssistantEmptyState.tsx
|
|
17864
|
-
import { jsx as
|
|
17882
|
+
import { jsx as jsx206, jsxs as jsxs123 } from "react/jsx-runtime";
|
|
17865
17883
|
var STARTER_KEYS = ["a", "b", "c", "d"];
|
|
17866
17884
|
function AssistantEmptyState({ onSend }) {
|
|
17867
17885
|
const t = useTranslations86();
|
|
17868
17886
|
const [draft, setDraft] = useState78("");
|
|
17869
|
-
return /* @__PURE__ */
|
|
17887
|
+
return /* @__PURE__ */ jsx206("div", { className: "flex h-full w-full items-center justify-center p-10", children: /* @__PURE__ */ jsxs123("div", { className: "flex w-full max-w-2xl flex-col gap-6", children: [
|
|
17870
17888
|
/* @__PURE__ */ jsxs123("div", { className: "text-center", children: [
|
|
17871
|
-
/* @__PURE__ */
|
|
17872
|
-
/* @__PURE__ */
|
|
17873
|
-
/* @__PURE__ */
|
|
17889
|
+
/* @__PURE__ */ jsx206("div", { className: "mx-auto mb-3 flex h-10 w-10 items-center justify-center rounded-full bg-gradient-to-br from-blue-400 to-violet-500 text-white", children: /* @__PURE__ */ jsx206(Sparkles, { className: "h-5 w-5" }) }),
|
|
17890
|
+
/* @__PURE__ */ jsx206("h3", { className: "text-foreground text-xl font-semibold", children: t("features.assistant.empty_state.title") }),
|
|
17891
|
+
/* @__PURE__ */ jsx206("p", { className: "text-muted-foreground mt-1 text-sm", children: t("features.assistant.empty_state.subtitle") })
|
|
17874
17892
|
] }),
|
|
17875
|
-
/* @__PURE__ */
|
|
17876
|
-
/* @__PURE__ */
|
|
17893
|
+
/* @__PURE__ */ jsx206(AssistantComposer, { value: draft, onValueChange: setDraft, onSend }),
|
|
17894
|
+
/* @__PURE__ */ jsx206("div", { className: "grid grid-cols-2 gap-2", children: STARTER_KEYS.map((k) => {
|
|
17877
17895
|
const text = t(`features.assistant.starters.${k}`);
|
|
17878
|
-
return /* @__PURE__ */
|
|
17896
|
+
return /* @__PURE__ */ jsx206(
|
|
17879
17897
|
"button",
|
|
17880
17898
|
{
|
|
17881
17899
|
type: "button",
|
|
@@ -17893,7 +17911,7 @@ __name(AssistantEmptyState, "AssistantEmptyState");
|
|
|
17893
17911
|
// src/features/assistant/components/parts/AssistantThreadHeader.tsx
|
|
17894
17912
|
import { useState as useState79 } from "react";
|
|
17895
17913
|
import { useTranslations as useTranslations87 } from "next-intl";
|
|
17896
|
-
import { jsx as
|
|
17914
|
+
import { jsx as jsx207, jsxs as jsxs124 } from "react/jsx-runtime";
|
|
17897
17915
|
function AssistantThreadHeader({ assistant, onRename, onDelete }) {
|
|
17898
17916
|
const t = useTranslations87();
|
|
17899
17917
|
const [renameValue, setRenameValue] = useState79(assistant.title);
|
|
@@ -17909,17 +17927,17 @@ function AssistantThreadHeader({ assistant, onRename, onDelete }) {
|
|
|
17909
17927
|
setDeleteOpen(false);
|
|
17910
17928
|
}, "handleDelete");
|
|
17911
17929
|
return /* @__PURE__ */ jsxs124("div", { className: "flex items-center justify-between border-b px-5 py-3", children: [
|
|
17912
|
-
/* @__PURE__ */
|
|
17930
|
+
/* @__PURE__ */ jsx207("div", { className: "text-foreground text-base font-semibold", children: assistant.title }),
|
|
17913
17931
|
/* @__PURE__ */ jsxs124("div", { className: "flex items-center gap-2", children: [
|
|
17914
17932
|
/* @__PURE__ */ jsxs124(Popover, { open: renameOpen, onOpenChange: setRenameOpen, children: [
|
|
17915
|
-
/* @__PURE__ */
|
|
17933
|
+
/* @__PURE__ */ jsx207(
|
|
17916
17934
|
PopoverTrigger,
|
|
17917
17935
|
{
|
|
17918
|
-
render: /* @__PURE__ */
|
|
17936
|
+
render: /* @__PURE__ */ jsx207(Button, { variant: "outline", size: "sm", children: t("features.assistant.rename") })
|
|
17919
17937
|
}
|
|
17920
17938
|
),
|
|
17921
17939
|
/* @__PURE__ */ jsxs124(PopoverContent, { className: "flex flex-col gap-2 p-3", children: [
|
|
17922
|
-
/* @__PURE__ */
|
|
17940
|
+
/* @__PURE__ */ jsx207(
|
|
17923
17941
|
Input,
|
|
17924
17942
|
{
|
|
17925
17943
|
value: renameValue,
|
|
@@ -17927,21 +17945,21 @@ function AssistantThreadHeader({ assistant, onRename, onDelete }) {
|
|
|
17927
17945
|
placeholder: t("features.assistant.rename_placeholder")
|
|
17928
17946
|
}
|
|
17929
17947
|
),
|
|
17930
|
-
/* @__PURE__ */
|
|
17948
|
+
/* @__PURE__ */ jsx207(Button, { onClick: handleRename, size: "sm", children: t("ui.buttons.save") })
|
|
17931
17949
|
] })
|
|
17932
17950
|
] }),
|
|
17933
17951
|
/* @__PURE__ */ jsxs124(Dialog, { open: deleteOpen, onOpenChange: setDeleteOpen, children: [
|
|
17934
|
-
/* @__PURE__ */
|
|
17952
|
+
/* @__PURE__ */ jsx207(
|
|
17935
17953
|
DialogTrigger,
|
|
17936
17954
|
{
|
|
17937
|
-
render: /* @__PURE__ */
|
|
17955
|
+
render: /* @__PURE__ */ jsx207(Button, { variant: "outline", size: "sm", className: "text-destructive", children: t("features.assistant.delete") })
|
|
17938
17956
|
}
|
|
17939
17957
|
),
|
|
17940
17958
|
/* @__PURE__ */ jsxs124(DialogContent, { children: [
|
|
17941
|
-
/* @__PURE__ */
|
|
17959
|
+
/* @__PURE__ */ jsx207(DialogHeader, { children: /* @__PURE__ */ jsx207(DialogTitle, { children: t("features.assistant.delete_confirm") }) }),
|
|
17942
17960
|
/* @__PURE__ */ jsxs124(DialogFooter, { children: [
|
|
17943
|
-
/* @__PURE__ */
|
|
17944
|
-
/* @__PURE__ */
|
|
17961
|
+
/* @__PURE__ */ jsx207(Button, { variant: "outline", onClick: () => setDeleteOpen(false), children: t("ui.buttons.cancel") }),
|
|
17962
|
+
/* @__PURE__ */ jsx207(Button, { variant: "destructive", onClick: handleDelete, children: t("ui.buttons.confirm") })
|
|
17945
17963
|
] })
|
|
17946
17964
|
] })
|
|
17947
17965
|
] })
|
|
@@ -17970,17 +17988,17 @@ import { ChevronDown as ChevronDown4, ChevronRight as ChevronRight2 } from "luci
|
|
|
17970
17988
|
// src/features/assistant-message/components/parts/tabs/ReferencesTab.tsx
|
|
17971
17989
|
import { useTranslations as useTranslations88 } from "next-intl";
|
|
17972
17990
|
import Link4 from "next/link";
|
|
17973
|
-
import { jsx as
|
|
17991
|
+
import { jsx as jsx208, jsxs as jsxs125 } from "react/jsx-runtime";
|
|
17974
17992
|
function ReferencesTab({ references }) {
|
|
17975
17993
|
const t = useTranslations88();
|
|
17976
17994
|
const generate = usePageUrlGenerator();
|
|
17977
17995
|
if (references.length === 0) return null;
|
|
17978
17996
|
return /* @__PURE__ */ jsxs125(Table, { children: [
|
|
17979
|
-
/* @__PURE__ */
|
|
17980
|
-
/* @__PURE__ */
|
|
17981
|
-
/* @__PURE__ */
|
|
17997
|
+
/* @__PURE__ */ jsx208(TableHeader, { children: /* @__PURE__ */ jsxs125(TableRow, { children: [
|
|
17998
|
+
/* @__PURE__ */ jsx208(TableHead, { children: t("features.assistant.message.sources.source") }),
|
|
17999
|
+
/* @__PURE__ */ jsx208(TableHead, { className: "w-32", children: t("features.assistant.message.sources.type") })
|
|
17982
18000
|
] }) }),
|
|
17983
|
-
/* @__PURE__ */
|
|
18001
|
+
/* @__PURE__ */ jsx208(TableBody, { children: references.map((ref) => {
|
|
17984
18002
|
let module;
|
|
17985
18003
|
try {
|
|
17986
18004
|
module = ModuleRegistry.findByName(ref.type);
|
|
@@ -17989,8 +18007,8 @@ function ReferencesTab({ references }) {
|
|
|
17989
18007
|
}
|
|
17990
18008
|
const href = generate({ page: module, id: ref.id });
|
|
17991
18009
|
return /* @__PURE__ */ jsxs125(TableRow, { children: [
|
|
17992
|
-
/* @__PURE__ */
|
|
17993
|
-
/* @__PURE__ */
|
|
18010
|
+
/* @__PURE__ */ jsx208(TableCell, { children: /* @__PURE__ */ jsx208(Link4, { href, target: "_blank", rel: "noopener noreferrer", className: "font-medium", children: ref.identifier }) }),
|
|
18011
|
+
/* @__PURE__ */ jsx208(TableCell, { className: "text-muted-foreground text-xs", children: module.name })
|
|
17994
18012
|
] }, `${ref.type}/${ref.id}`);
|
|
17995
18013
|
}) })
|
|
17996
18014
|
] });
|
|
@@ -18005,7 +18023,7 @@ import ReactMarkdown2 from "react-markdown";
|
|
|
18005
18023
|
import remarkGfm2 from "remark-gfm";
|
|
18006
18024
|
|
|
18007
18025
|
// src/features/assistant-message/components/parts/RelevanceMeter.tsx
|
|
18008
|
-
import { jsx as
|
|
18026
|
+
import { jsx as jsx209, jsxs as jsxs126 } from "react/jsx-runtime";
|
|
18009
18027
|
function RelevanceMeter({ value, className = "" }) {
|
|
18010
18028
|
const pct = Math.max(0, Math.min(100, value <= 1 ? value * 100 : value));
|
|
18011
18029
|
const label = `${Math.round(pct)}%`;
|
|
@@ -18019,8 +18037,8 @@ function RelevanceMeter({ value, className = "" }) {
|
|
|
18019
18037
|
"aria-label": `Relevance ${label}`,
|
|
18020
18038
|
className: `bg-muted relative mx-auto flex h-5 w-20 items-center justify-center overflow-hidden rounded border ${className}`,
|
|
18021
18039
|
children: [
|
|
18022
|
-
/* @__PURE__ */
|
|
18023
|
-
/* @__PURE__ */
|
|
18040
|
+
/* @__PURE__ */ jsx209("div", { className: "bg-accent absolute top-0 left-0 h-full", style: { width: `${pct}%` } }),
|
|
18041
|
+
/* @__PURE__ */ jsx209(
|
|
18024
18042
|
"span",
|
|
18025
18043
|
{
|
|
18026
18044
|
className: `relative text-xs ${pct < 40 ? "text-muted-foreground" : "text-accent-foreground font-semibold"}`,
|
|
@@ -18034,7 +18052,7 @@ function RelevanceMeter({ value, className = "" }) {
|
|
|
18034
18052
|
__name(RelevanceMeter, "RelevanceMeter");
|
|
18035
18053
|
|
|
18036
18054
|
// src/features/assistant-message/components/parts/tabs/CitationsTab.tsx
|
|
18037
|
-
import { jsx as
|
|
18055
|
+
import { jsx as jsx210, jsxs as jsxs127 } from "react/jsx-runtime";
|
|
18038
18056
|
function CitationsTab({ citations, sources }) {
|
|
18039
18057
|
const t = useTranslations89();
|
|
18040
18058
|
const [expanded, setExpanded] = useState80(/* @__PURE__ */ new Set());
|
|
@@ -18049,18 +18067,18 @@ function CitationsTab({ citations, sources }) {
|
|
|
18049
18067
|
});
|
|
18050
18068
|
}, "toggle");
|
|
18051
18069
|
return /* @__PURE__ */ jsxs127(Table, { className: "table-fixed", children: [
|
|
18052
|
-
/* @__PURE__ */
|
|
18053
|
-
/* @__PURE__ */
|
|
18054
|
-
/* @__PURE__ */
|
|
18070
|
+
/* @__PURE__ */ jsx210(TableHeader, { children: /* @__PURE__ */ jsxs127(TableRow, { children: [
|
|
18071
|
+
/* @__PURE__ */ jsx210(TableHead, { children: t("features.assistant.message.sources.source") }),
|
|
18072
|
+
/* @__PURE__ */ jsx210(TableHead, { className: "w-28 text-center", children: t("features.assistant.message.sources.relevance") })
|
|
18055
18073
|
] }) }),
|
|
18056
|
-
/* @__PURE__ */
|
|
18074
|
+
/* @__PURE__ */ jsx210(TableBody, { children: sorted.map((chunk) => {
|
|
18057
18075
|
const isOpen = expanded.has(chunk.id);
|
|
18058
18076
|
const resolved = chunk.nodeId ? sources?.get(chunk.nodeId) : void 0;
|
|
18059
18077
|
const fallbackName = chunk.nodeId ? `${chunk.nodeType ?? t("features.assistant.message.sources.source")} ${chunk.nodeId.slice(0, 8)}` : chunk.nodeType ?? t("features.assistant.message.sources.source");
|
|
18060
18078
|
const sourceName = resolved?.name ?? fallbackName;
|
|
18061
18079
|
return /* @__PURE__ */ jsxs127(Fragment44, { children: [
|
|
18062
18080
|
/* @__PURE__ */ jsxs127(TableRow, { children: [
|
|
18063
|
-
/* @__PURE__ */
|
|
18081
|
+
/* @__PURE__ */ jsx210(TableCell, { children: /* @__PURE__ */ jsxs127(
|
|
18064
18082
|
"div",
|
|
18065
18083
|
{
|
|
18066
18084
|
role: "button",
|
|
@@ -18075,18 +18093,18 @@ function CitationsTab({ citations, sources }) {
|
|
|
18075
18093
|
"aria-expanded": isOpen,
|
|
18076
18094
|
className: "flex w-full cursor-pointer items-center justify-start gap-x-2",
|
|
18077
18095
|
children: [
|
|
18078
|
-
/* @__PURE__ */
|
|
18079
|
-
/* @__PURE__ */
|
|
18096
|
+
/* @__PURE__ */ jsx210(ChevronDown3, { className: cn("h-4 w-4 transition-transform", !isOpen && "-rotate-90") }),
|
|
18097
|
+
/* @__PURE__ */ jsx210("span", { className: "font-semibold", children: sourceName }),
|
|
18080
18098
|
chunk.reason && /* @__PURE__ */ jsxs127(Tooltip2, { children: [
|
|
18081
|
-
/* @__PURE__ */
|
|
18082
|
-
/* @__PURE__ */
|
|
18099
|
+
/* @__PURE__ */ jsx210(TooltipTrigger, { className: "text-muted-foreground inline-flex", children: /* @__PURE__ */ jsx210(HelpCircle, { className: "h-3.5 w-3.5" }) }),
|
|
18100
|
+
/* @__PURE__ */ jsx210(TooltipContent, { className: "max-w-64 text-xs", children: chunk.reason })
|
|
18083
18101
|
] })
|
|
18084
18102
|
]
|
|
18085
18103
|
}
|
|
18086
18104
|
) }),
|
|
18087
|
-
/* @__PURE__ */
|
|
18105
|
+
/* @__PURE__ */ jsx210(TableCell, { className: "text-center", children: /* @__PURE__ */ jsx210(RelevanceMeter, { value: chunk.relevance ?? 0 }) })
|
|
18088
18106
|
] }),
|
|
18089
|
-
isOpen && /* @__PURE__ */
|
|
18107
|
+
isOpen && /* @__PURE__ */ jsx210(TableRow, { children: /* @__PURE__ */ jsx210(TableCell, { colSpan: 2, className: "border-t-0 p-4", children: /* @__PURE__ */ jsx210("div", { className: "bg-card w-full max-w-full overflow-x-auto rounded border p-4 text-sm break-words", children: /* @__PURE__ */ jsx210(ReactMarkdown2, { remarkPlugins: [remarkGfm2], children: chunk.content }) }) }) })
|
|
18090
18108
|
] }, chunk.id);
|
|
18091
18109
|
}) })
|
|
18092
18110
|
] });
|
|
@@ -18096,7 +18114,7 @@ __name(CitationsTab, "CitationsTab");
|
|
|
18096
18114
|
// src/features/assistant-message/components/parts/tabs/ContentsTab.tsx
|
|
18097
18115
|
import { useTranslations as useTranslations90 } from "next-intl";
|
|
18098
18116
|
import Link5 from "next/link";
|
|
18099
|
-
import { jsx as
|
|
18117
|
+
import { jsx as jsx211, jsxs as jsxs128 } from "react/jsx-runtime";
|
|
18100
18118
|
function ContentsTab({ citations, sources }) {
|
|
18101
18119
|
const t = useTranslations90();
|
|
18102
18120
|
const generate = usePageUrlGenerator();
|
|
@@ -18119,11 +18137,11 @@ function ContentsTab({ citations, sources }) {
|
|
|
18119
18137
|
);
|
|
18120
18138
|
if (rows.length === 0) return null;
|
|
18121
18139
|
return /* @__PURE__ */ jsxs128(Table, { children: [
|
|
18122
|
-
/* @__PURE__ */
|
|
18123
|
-
/* @__PURE__ */
|
|
18124
|
-
/* @__PURE__ */
|
|
18140
|
+
/* @__PURE__ */ jsx211(TableHeader, { children: /* @__PURE__ */ jsxs128(TableRow, { children: [
|
|
18141
|
+
/* @__PURE__ */ jsx211(TableHead, { children: t("features.assistant.message.sources.source") }),
|
|
18142
|
+
/* @__PURE__ */ jsx211(TableHead, { className: "w-32", children: t("features.assistant.message.sources.type") })
|
|
18125
18143
|
] }) }),
|
|
18126
|
-
/* @__PURE__ */
|
|
18144
|
+
/* @__PURE__ */ jsx211(TableBody, { children: rows.map(({ source, citationCount }) => {
|
|
18127
18145
|
let module;
|
|
18128
18146
|
try {
|
|
18129
18147
|
module = ModuleRegistry.findByName(source.type);
|
|
@@ -18133,14 +18151,14 @@ function ContentsTab({ citations, sources }) {
|
|
|
18133
18151
|
const href = generate({ page: module, id: source.id });
|
|
18134
18152
|
const name = source.name ?? source.identifier;
|
|
18135
18153
|
return /* @__PURE__ */ jsxs128(TableRow, { children: [
|
|
18136
|
-
/* @__PURE__ */
|
|
18137
|
-
/* @__PURE__ */
|
|
18154
|
+
/* @__PURE__ */ jsx211(TableCell, { children: /* @__PURE__ */ jsxs128(Link5, { href, target: "_blank", rel: "noopener noreferrer", children: [
|
|
18155
|
+
/* @__PURE__ */ jsx211("span", { className: "font-medium", children: name }),
|
|
18138
18156
|
" ",
|
|
18139
|
-
/* @__PURE__ */
|
|
18157
|
+
/* @__PURE__ */ jsx211("span", { className: "text-muted-foreground text-xs", children: t("features.assistant.message.sources.citations_count", {
|
|
18140
18158
|
count: citationCount
|
|
18141
18159
|
}) })
|
|
18142
18160
|
] }) }),
|
|
18143
|
-
/* @__PURE__ */
|
|
18161
|
+
/* @__PURE__ */ jsx211(TableCell, { className: "text-muted-foreground text-xs", children: module.name })
|
|
18144
18162
|
] }, `${source.type}/${source.id}`);
|
|
18145
18163
|
}) })
|
|
18146
18164
|
] });
|
|
@@ -18150,7 +18168,7 @@ __name(ContentsTab, "ContentsTab");
|
|
|
18150
18168
|
// src/features/assistant-message/components/parts/tabs/UsersTab.tsx
|
|
18151
18169
|
import { useTranslations as useTranslations91 } from "next-intl";
|
|
18152
18170
|
import Link6 from "next/link";
|
|
18153
|
-
import { jsx as
|
|
18171
|
+
import { jsx as jsx212, jsxs as jsxs129 } from "react/jsx-runtime";
|
|
18154
18172
|
function getInitials2(name) {
|
|
18155
18173
|
return name.split(/\s+/).map((p) => p.charAt(0)).filter(Boolean).slice(0, 2).join("").toUpperCase();
|
|
18156
18174
|
}
|
|
@@ -18198,7 +18216,7 @@ function UsersTab({ users, citations, sources }) {
|
|
|
18198
18216
|
(a, b) => b.citationCount - a.citationCount || (a.user.name ?? "").localeCompare(b.user.name ?? "")
|
|
18199
18217
|
);
|
|
18200
18218
|
if (rows.length === 0) return null;
|
|
18201
|
-
return /* @__PURE__ */
|
|
18219
|
+
return /* @__PURE__ */ jsx212(Table, { children: /* @__PURE__ */ jsx212(TableBody, { children: rows.map(({ user, contentCount, citationCount }) => {
|
|
18202
18220
|
let module;
|
|
18203
18221
|
try {
|
|
18204
18222
|
module = ModuleRegistry.findByName(user.type);
|
|
@@ -18209,13 +18227,13 @@ function UsersTab({ users, citations, sources }) {
|
|
|
18209
18227
|
const name = user.name ?? user.fullName ?? user.identifier ?? "User";
|
|
18210
18228
|
const avatarUrl = user.avatar;
|
|
18211
18229
|
const showCounts = citationCount > 0 || contentCount > 0;
|
|
18212
|
-
return /* @__PURE__ */
|
|
18230
|
+
return /* @__PURE__ */ jsx212(TableRow, { children: /* @__PURE__ */ jsx212(TableCell, { children: /* @__PURE__ */ jsxs129(Link6, { href, target: "_blank", rel: "noopener noreferrer", className: "flex items-center gap-3", children: [
|
|
18213
18231
|
/* @__PURE__ */ jsxs129(Avatar, { className: "h-7 w-7", children: [
|
|
18214
|
-
/* @__PURE__ */
|
|
18215
|
-
/* @__PURE__ */
|
|
18232
|
+
/* @__PURE__ */ jsx212(AvatarImage, { src: avatarUrl, "aria-label": name }),
|
|
18233
|
+
/* @__PURE__ */ jsx212(AvatarFallback, { "aria-label": name, children: getInitials2(name) })
|
|
18216
18234
|
] }),
|
|
18217
18235
|
/* @__PURE__ */ jsxs129("span", { className: "flex flex-col", children: [
|
|
18218
|
-
/* @__PURE__ */
|
|
18236
|
+
/* @__PURE__ */ jsx212("span", { className: "font-medium", children: name }),
|
|
18219
18237
|
showCounts && /* @__PURE__ */ jsxs129("span", { className: "text-muted-foreground text-xs", children: [
|
|
18220
18238
|
t("features.assistant.message.sources.contents_count", {
|
|
18221
18239
|
count: contentCount
|
|
@@ -18232,10 +18250,10 @@ function UsersTab({ users, citations, sources }) {
|
|
|
18232
18250
|
__name(UsersTab, "UsersTab");
|
|
18233
18251
|
|
|
18234
18252
|
// src/features/assistant-message/components/parts/tabs/SuggestedQuestionsTab.tsx
|
|
18235
|
-
import { jsx as
|
|
18253
|
+
import { jsx as jsx213 } from "react/jsx-runtime";
|
|
18236
18254
|
function SuggestedQuestionsTab({ questions, onSelect }) {
|
|
18237
18255
|
if (questions.length === 0) return null;
|
|
18238
|
-
return /* @__PURE__ */
|
|
18256
|
+
return /* @__PURE__ */ jsx213("div", { className: "flex flex-col gap-1", children: questions.map((q) => /* @__PURE__ */ jsx213(
|
|
18239
18257
|
"button",
|
|
18240
18258
|
{
|
|
18241
18259
|
type: "button",
|
|
@@ -18249,7 +18267,7 @@ function SuggestedQuestionsTab({ questions, onSelect }) {
|
|
|
18249
18267
|
__name(SuggestedQuestionsTab, "SuggestedQuestionsTab");
|
|
18250
18268
|
|
|
18251
18269
|
// src/features/assistant-message/components/parts/MessageSourcesPanel.tsx
|
|
18252
|
-
import { jsx as
|
|
18270
|
+
import { jsx as jsx214, jsxs as jsxs130 } from "react/jsx-runtime";
|
|
18253
18271
|
function MessageSourcesPanel({ message, isLatestAssistant, onSelectFollowUp, sources, users }) {
|
|
18254
18272
|
const t = useTranslations92();
|
|
18255
18273
|
const visibleReferences = useMemo30(
|
|
@@ -18297,13 +18315,13 @@ function MessageSourcesPanel({ message, isLatestAssistant, onSelectFollowUp, sou
|
|
|
18297
18315
|
"aria-controls": panelId,
|
|
18298
18316
|
className: "text-primary inline-flex items-center gap-1 text-xs font-medium",
|
|
18299
18317
|
children: [
|
|
18300
|
-
open ? /* @__PURE__ */
|
|
18318
|
+
open ? /* @__PURE__ */ jsx214(ChevronDown4, { className: "h-3 w-3" }) : /* @__PURE__ */ jsx214(ChevronRight2, { className: "h-3 w-3" }),
|
|
18301
18319
|
open ? t("features.assistant.message.sources.toggle_hide") : t("features.assistant.message.sources.toggle", { count: total })
|
|
18302
18320
|
]
|
|
18303
18321
|
}
|
|
18304
18322
|
),
|
|
18305
|
-
open && /* @__PURE__ */
|
|
18306
|
-
/* @__PURE__ */
|
|
18323
|
+
open && /* @__PURE__ */ jsx214("div", { id: panelId, className: "mt-2 w-full min-w-0", children: /* @__PURE__ */ jsxs130(Tabs, { value: active, onValueChange: (v) => setActive(v), children: [
|
|
18324
|
+
/* @__PURE__ */ jsx214(TabsList, { children: visibleTabs.map((key) => /* @__PURE__ */ jsxs130(TabsTrigger, { value: key, children: [
|
|
18307
18325
|
t(`features.assistant.message.sources.tabs.${key === "suggested" ? "suggested_questions" : key}`),
|
|
18308
18326
|
/* @__PURE__ */ jsxs130("span", { className: "text-muted-foreground ml-1.5 text-[10px]", children: [
|
|
18309
18327
|
key === "suggested" && suggestionsCount,
|
|
@@ -18313,18 +18331,18 @@ function MessageSourcesPanel({ message, isLatestAssistant, onSelectFollowUp, sou
|
|
|
18313
18331
|
key === "users" && usersCount
|
|
18314
18332
|
] })
|
|
18315
18333
|
] }, key)) }),
|
|
18316
|
-
suggestionsCount > 0 && /* @__PURE__ */
|
|
18317
|
-
refsCount > 0 && /* @__PURE__ */
|
|
18318
|
-
citationsCount > 0 && /* @__PURE__ */
|
|
18319
|
-
contentsCount > 0 && /* @__PURE__ */
|
|
18320
|
-
usersCount > 0 && /* @__PURE__ */
|
|
18334
|
+
suggestionsCount > 0 && /* @__PURE__ */ jsx214(TabsContent, { value: "suggested", children: /* @__PURE__ */ jsx214(SuggestedQuestionsTab, { questions: message.suggestedQuestions, onSelect: onSelectFollowUp }) }),
|
|
18335
|
+
refsCount > 0 && /* @__PURE__ */ jsx214(TabsContent, { value: "references", children: /* @__PURE__ */ jsx214(ReferencesTab, { references: visibleReferences }) }),
|
|
18336
|
+
citationsCount > 0 && /* @__PURE__ */ jsx214(TabsContent, { value: "citations", children: /* @__PURE__ */ jsx214(CitationsTab, { citations: message.citations, sources }) }),
|
|
18337
|
+
contentsCount > 0 && /* @__PURE__ */ jsx214(TabsContent, { value: "contents", children: /* @__PURE__ */ jsx214(ContentsTab, { citations: message.citations, sources }) }),
|
|
18338
|
+
usersCount > 0 && /* @__PURE__ */ jsx214(TabsContent, { value: "users", children: /* @__PURE__ */ jsx214(UsersTab, { users: users ?? [], citations: message.citations, sources }) })
|
|
18321
18339
|
] }) })
|
|
18322
18340
|
] });
|
|
18323
18341
|
}
|
|
18324
18342
|
__name(MessageSourcesPanel, "MessageSourcesPanel");
|
|
18325
18343
|
|
|
18326
18344
|
// src/features/assistant-message/components/parts/MessageSourcesContainer.tsx
|
|
18327
|
-
import { jsx as
|
|
18345
|
+
import { jsx as jsx215 } from "react/jsx-runtime";
|
|
18328
18346
|
var SourcesFetcher = class extends ClientAbstractService {
|
|
18329
18347
|
static {
|
|
18330
18348
|
__name(this, "SourcesFetcher");
|
|
@@ -18416,7 +18434,7 @@ function MessageSourcesContainer({ message, isLatestAssistant, onSelectFollowUp
|
|
|
18416
18434
|
}
|
|
18417
18435
|
return Array.from(userMap.values());
|
|
18418
18436
|
}, [resolved]);
|
|
18419
|
-
return /* @__PURE__ */
|
|
18437
|
+
return /* @__PURE__ */ jsx215(
|
|
18420
18438
|
MessageSourcesPanel,
|
|
18421
18439
|
{
|
|
18422
18440
|
message,
|
|
@@ -18430,28 +18448,28 @@ function MessageSourcesContainer({ message, isLatestAssistant, onSelectFollowUp
|
|
|
18430
18448
|
__name(MessageSourcesContainer, "MessageSourcesContainer");
|
|
18431
18449
|
|
|
18432
18450
|
// src/features/assistant-message/components/MessageItem.tsx
|
|
18433
|
-
import { jsx as
|
|
18451
|
+
import { jsx as jsx216, jsxs as jsxs131 } from "react/jsx-runtime";
|
|
18434
18452
|
function MessageItem({ message, isLatestAssistant, onSelectFollowUp, failedMessageIds, onRetry }) {
|
|
18435
18453
|
const t = useTranslations93();
|
|
18436
18454
|
const isUser = message.role === "user";
|
|
18437
18455
|
const isFailed = isUser && !!failedMessageIds?.has(message.id);
|
|
18438
18456
|
if (isUser) {
|
|
18439
18457
|
return /* @__PURE__ */ jsxs131("div", { className: "flex flex-col items-end gap-1", children: [
|
|
18440
|
-
/* @__PURE__ */
|
|
18458
|
+
/* @__PURE__ */ jsx216("div", { className: "bg-primary text-primary-foreground max-w-[72%] rounded-2xl rounded-br-sm px-3.5 py-2 text-sm", children: message.content }),
|
|
18441
18459
|
isFailed && /* @__PURE__ */ jsxs131("div", { className: "text-destructive flex items-center gap-2 text-xs", children: [
|
|
18442
|
-
/* @__PURE__ */
|
|
18443
|
-
/* @__PURE__ */
|
|
18444
|
-
/* @__PURE__ */
|
|
18460
|
+
/* @__PURE__ */ jsx216(AlertCircle, { className: "h-3.5 w-3.5" }),
|
|
18461
|
+
/* @__PURE__ */ jsx216("span", { children: t("features.assistant.send_failed") }),
|
|
18462
|
+
/* @__PURE__ */ jsx216("button", { type: "button", className: "underline", onClick: () => onRetry?.(message.id), children: t("features.assistant.retry") })
|
|
18445
18463
|
] })
|
|
18446
18464
|
] });
|
|
18447
18465
|
}
|
|
18448
18466
|
return /* @__PURE__ */ jsxs131("div", { className: "flex min-w-0 max-w-[78%] flex-col gap-1.5", children: [
|
|
18449
18467
|
/* @__PURE__ */ jsxs131("div", { className: "text-muted-foreground flex items-center gap-2 pl-1 text-xs", children: [
|
|
18450
|
-
/* @__PURE__ */
|
|
18451
|
-
/* @__PURE__ */
|
|
18468
|
+
/* @__PURE__ */ jsx216("span", { className: "flex h-4 w-4 items-center justify-center rounded-full bg-gradient-to-br from-blue-400 to-violet-500 text-white", children: /* @__PURE__ */ jsx216(Sparkles2, { className: "h-2.5 w-2.5" }) }),
|
|
18469
|
+
/* @__PURE__ */ jsx216("span", { children: t("features.assistant.agent_name") })
|
|
18452
18470
|
] }),
|
|
18453
|
-
/* @__PURE__ */
|
|
18454
|
-
/* @__PURE__ */
|
|
18471
|
+
/* @__PURE__ */ jsx216("div", { className: "bg-muted text-foreground rounded-2xl rounded-bl-sm px-3.5 py-2.5 text-sm leading-relaxed", children: /* @__PURE__ */ jsx216(ReactMarkdown3, { remarkPlugins: [remarkGfm3], children: message.content }) }),
|
|
18472
|
+
/* @__PURE__ */ jsx216(
|
|
18455
18473
|
MessageSourcesContainer,
|
|
18456
18474
|
{
|
|
18457
18475
|
message,
|
|
@@ -18464,7 +18482,7 @@ function MessageItem({ message, isLatestAssistant, onSelectFollowUp, failedMessa
|
|
|
18464
18482
|
__name(MessageItem, "MessageItem");
|
|
18465
18483
|
|
|
18466
18484
|
// src/features/assistant-message/components/MessageList.tsx
|
|
18467
|
-
import { jsx as
|
|
18485
|
+
import { jsx as jsx217 } from "react/jsx-runtime";
|
|
18468
18486
|
function MessageList({ messages, onSelectFollowUp, failedMessageIds, onRetry }) {
|
|
18469
18487
|
const ordered = [...messages].sort((a, b) => a.position - b.position);
|
|
18470
18488
|
let lastAssistantIndex = -1;
|
|
@@ -18474,7 +18492,7 @@ function MessageList({ messages, onSelectFollowUp, failedMessageIds, onRetry })
|
|
|
18474
18492
|
break;
|
|
18475
18493
|
}
|
|
18476
18494
|
}
|
|
18477
|
-
return /* @__PURE__ */
|
|
18495
|
+
return /* @__PURE__ */ jsx217("div", { className: "flex min-w-0 flex-col gap-y-3", children: ordered.map((m, i) => /* @__PURE__ */ jsx217(
|
|
18478
18496
|
MessageItem,
|
|
18479
18497
|
{
|
|
18480
18498
|
message: m,
|
|
@@ -18491,26 +18509,26 @@ __name(MessageList, "MessageList");
|
|
|
18491
18509
|
// src/features/assistant/components/parts/AssistantStatusLine.tsx
|
|
18492
18510
|
import { useTranslations as useTranslations94 } from "next-intl";
|
|
18493
18511
|
import { Loader2 as Loader24 } from "lucide-react";
|
|
18494
|
-
import { jsx as
|
|
18512
|
+
import { jsx as jsx218, jsxs as jsxs132 } from "react/jsx-runtime";
|
|
18495
18513
|
function AssistantStatusLine({ status }) {
|
|
18496
18514
|
const t = useTranslations94();
|
|
18497
18515
|
const text = status ?? t("features.assistant.thinking");
|
|
18498
18516
|
return /* @__PURE__ */ jsxs132("div", { className: "text-muted-foreground flex items-center gap-2 px-4 py-2 text-sm", children: [
|
|
18499
|
-
/* @__PURE__ */
|
|
18500
|
-
/* @__PURE__ */
|
|
18517
|
+
/* @__PURE__ */ jsx218(Loader24, { className: "h-4 w-4 animate-spin" }),
|
|
18518
|
+
/* @__PURE__ */ jsx218("span", { children: text })
|
|
18501
18519
|
] });
|
|
18502
18520
|
}
|
|
18503
18521
|
__name(AssistantStatusLine, "AssistantStatusLine");
|
|
18504
18522
|
|
|
18505
18523
|
// src/features/assistant/components/parts/AssistantThread.tsx
|
|
18506
|
-
import { jsx as
|
|
18524
|
+
import { jsx as jsx219, jsxs as jsxs133 } from "react/jsx-runtime";
|
|
18507
18525
|
function AssistantThread({ messages, sending, status, onSelectFollowUp, failedMessageIds, onRetry }) {
|
|
18508
18526
|
const endRef = useRef32(null);
|
|
18509
18527
|
useEffect62(() => {
|
|
18510
18528
|
endRef.current?.scrollIntoView({ behavior: "smooth" });
|
|
18511
18529
|
}, [messages.length, sending]);
|
|
18512
18530
|
return /* @__PURE__ */ jsxs133("div", { className: "flex-1 min-w-0 overflow-x-hidden overflow-y-auto px-6 py-5", children: [
|
|
18513
|
-
/* @__PURE__ */
|
|
18531
|
+
/* @__PURE__ */ jsx219(
|
|
18514
18532
|
MessageList,
|
|
18515
18533
|
{
|
|
18516
18534
|
messages,
|
|
@@ -18519,19 +18537,19 @@ function AssistantThread({ messages, sending, status, onSelectFollowUp, failedMe
|
|
|
18519
18537
|
onRetry
|
|
18520
18538
|
}
|
|
18521
18539
|
),
|
|
18522
|
-
sending && /* @__PURE__ */
|
|
18523
|
-
/* @__PURE__ */
|
|
18540
|
+
sending && /* @__PURE__ */ jsx219(AssistantStatusLine, { status }),
|
|
18541
|
+
/* @__PURE__ */ jsx219("div", { ref: endRef })
|
|
18524
18542
|
] });
|
|
18525
18543
|
}
|
|
18526
18544
|
__name(AssistantThread, "AssistantThread");
|
|
18527
18545
|
|
|
18528
18546
|
// src/features/assistant/components/containers/AssistantContainer.tsx
|
|
18529
|
-
import { Fragment as Fragment45, jsx as
|
|
18547
|
+
import { Fragment as Fragment45, jsx as jsx220, jsxs as jsxs134 } from "react/jsx-runtime";
|
|
18530
18548
|
function AssistantContainer() {
|
|
18531
18549
|
const ctx = useAssistantContext();
|
|
18532
18550
|
const showThread = !!ctx.assistant || ctx.sending || ctx.messages.length > 0;
|
|
18533
|
-
return /* @__PURE__ */
|
|
18534
|
-
/* @__PURE__ */
|
|
18551
|
+
return /* @__PURE__ */ jsx220(RoundPageContainer, { module: Modules.Assistant, fullWidth: true, children: /* @__PURE__ */ jsxs134("div", { className: "bg-background flex h-full w-full overflow-hidden rounded-lg border", children: [
|
|
18552
|
+
/* @__PURE__ */ jsx220(
|
|
18535
18553
|
AssistantSidebar,
|
|
18536
18554
|
{
|
|
18537
18555
|
threads: ctx.threads,
|
|
@@ -18540,16 +18558,16 @@ function AssistantContainer() {
|
|
|
18540
18558
|
onNew: ctx.startNew
|
|
18541
18559
|
}
|
|
18542
18560
|
),
|
|
18543
|
-
/* @__PURE__ */
|
|
18544
|
-
ctx.assistant ? /* @__PURE__ */
|
|
18561
|
+
/* @__PURE__ */ jsx220("main", { className: "flex flex-1 flex-col", children: !showThread ? /* @__PURE__ */ jsx220(AssistantEmptyState, { onSend: ctx.sendMessage }) : /* @__PURE__ */ jsxs134(Fragment45, { children: [
|
|
18562
|
+
ctx.assistant ? /* @__PURE__ */ jsx220(
|
|
18545
18563
|
AssistantThreadHeader,
|
|
18546
18564
|
{
|
|
18547
18565
|
assistant: ctx.assistant,
|
|
18548
18566
|
onRename: (title) => ctx.renameThread(ctx.assistant.id, title),
|
|
18549
18567
|
onDelete: () => ctx.deleteThread(ctx.assistant.id)
|
|
18550
18568
|
}
|
|
18551
|
-
) : /* @__PURE__ */
|
|
18552
|
-
/* @__PURE__ */
|
|
18569
|
+
) : /* @__PURE__ */ jsx220("div", { className: "flex items-center justify-between border-b px-5 py-3", "aria-hidden": true, children: /* @__PURE__ */ jsx220("div", { className: "h-5" }) }),
|
|
18570
|
+
/* @__PURE__ */ jsx220(
|
|
18553
18571
|
AssistantThread,
|
|
18554
18572
|
{
|
|
18555
18573
|
messages: ctx.messages,
|
|
@@ -18560,7 +18578,7 @@ function AssistantContainer() {
|
|
|
18560
18578
|
onRetry: ctx.retrySend
|
|
18561
18579
|
}
|
|
18562
18580
|
),
|
|
18563
|
-
/* @__PURE__ */
|
|
18581
|
+
/* @__PURE__ */ jsx220(AssistantComposer, { onSend: ctx.sendMessage, disabled: ctx.sending })
|
|
18564
18582
|
] }) })
|
|
18565
18583
|
] }) });
|
|
18566
18584
|
}
|
|
@@ -18568,7 +18586,7 @@ __name(AssistantContainer, "AssistantContainer");
|
|
|
18568
18586
|
|
|
18569
18587
|
// src/features/notification/components/common/NotificationErrorBoundary.tsx
|
|
18570
18588
|
import { Component } from "react";
|
|
18571
|
-
import { jsx as
|
|
18589
|
+
import { jsx as jsx221, jsxs as jsxs135 } from "react/jsx-runtime";
|
|
18572
18590
|
var NotificationErrorBoundary = class extends Component {
|
|
18573
18591
|
static {
|
|
18574
18592
|
__name(this, "NotificationErrorBoundary");
|
|
@@ -18585,9 +18603,9 @@ var NotificationErrorBoundary = class extends Component {
|
|
|
18585
18603
|
}
|
|
18586
18604
|
render() {
|
|
18587
18605
|
if (this.state.hasError) {
|
|
18588
|
-
return this.props.fallback || /* @__PURE__ */
|
|
18589
|
-
/* @__PURE__ */
|
|
18590
|
-
/* @__PURE__ */
|
|
18606
|
+
return this.props.fallback || /* @__PURE__ */ jsx221("div", { className: "flex items-center justify-center p-4 text-center", children: /* @__PURE__ */ jsxs135("div", { className: "text-muted-foreground text-sm", children: [
|
|
18607
|
+
/* @__PURE__ */ jsx221("p", { children: "Something went wrong with notifications." }),
|
|
18608
|
+
/* @__PURE__ */ jsx221(
|
|
18591
18609
|
"button",
|
|
18592
18610
|
{
|
|
18593
18611
|
onClick: () => this.setState({ hasError: false }),
|
|
@@ -18607,7 +18625,7 @@ import { useTranslations as useTranslations96 } from "next-intl";
|
|
|
18607
18625
|
// src/features/notification/components/lists/NotificationsList.tsx
|
|
18608
18626
|
import { ArchiveIcon } from "lucide-react";
|
|
18609
18627
|
import { useTranslations as useTranslations95 } from "next-intl";
|
|
18610
|
-
import { Fragment as Fragment46, jsx as
|
|
18628
|
+
import { Fragment as Fragment46, jsx as jsx222, jsxs as jsxs136 } from "react/jsx-runtime";
|
|
18611
18629
|
function NotificationsList({ archived }) {
|
|
18612
18630
|
const t = useTranslations95();
|
|
18613
18631
|
const generateUrl = usePageUrlGenerator();
|
|
@@ -18620,30 +18638,30 @@ function NotificationsList({ archived }) {
|
|
|
18620
18638
|
await NotificationService.archive({ id: notification.id });
|
|
18621
18639
|
data.removeElement(notification);
|
|
18622
18640
|
}, "archiveNotification");
|
|
18623
|
-
const LoadingSkeleton = /* @__PURE__ */ __name(() => /* @__PURE__ */
|
|
18624
|
-
/* @__PURE__ */
|
|
18641
|
+
const LoadingSkeleton = /* @__PURE__ */ __name(() => /* @__PURE__ */ jsx222("div", { className: "space-y-4", children: Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsx222(Card, { children: /* @__PURE__ */ jsx222(CardContent, { className: "p-2", children: /* @__PURE__ */ jsxs136("div", { className: "flex w-full flex-row items-center", children: [
|
|
18642
|
+
/* @__PURE__ */ jsx222(Skeleton, { className: "mr-4 h-8 w-8 rounded-full" }),
|
|
18625
18643
|
/* @__PURE__ */ jsxs136("div", { className: "flex-1 space-y-2", children: [
|
|
18626
|
-
/* @__PURE__ */
|
|
18627
|
-
/* @__PURE__ */
|
|
18644
|
+
/* @__PURE__ */ jsx222(Skeleton, { className: "h-4 w-3/4" }),
|
|
18645
|
+
/* @__PURE__ */ jsx222(Skeleton, { className: "h-3 w-1/2" })
|
|
18628
18646
|
] }),
|
|
18629
|
-
/* @__PURE__ */
|
|
18647
|
+
/* @__PURE__ */ jsx222(Skeleton, { className: "h-8 w-20" })
|
|
18630
18648
|
] }) }) }, i)) }), "LoadingSkeleton");
|
|
18631
|
-
return /* @__PURE__ */
|
|
18649
|
+
return /* @__PURE__ */ jsx222("div", { className: "space-y-4", children: data.isLoaded ? data.data?.map((notification) => {
|
|
18632
18650
|
const notificationData = generateNotificationData({ notification, generateUrl });
|
|
18633
|
-
return /* @__PURE__ */
|
|
18634
|
-
notificationData.actor ? /* @__PURE__ */
|
|
18651
|
+
return /* @__PURE__ */ jsx222(Card, { children: /* @__PURE__ */ jsx222(CardContent, { className: "p-0", children: /* @__PURE__ */ jsxs136("div", { className: `flex w-full flex-row items-center p-2`, children: [
|
|
18652
|
+
notificationData.actor ? /* @__PURE__ */ jsx222("div", { className: "flex w-12 max-w-12 px-2", children: /* @__PURE__ */ jsx222(Link, { href: generateUrl({ page: Modules.User, id: notificationData.actor.id }), children: /* @__PURE__ */ jsx222(UserAvatar, { user: notificationData.actor, className: "h-8 w-8" }) }) }) : /* @__PURE__ */ jsx222("div", { className: "flex w-14 max-w-14 px-2" }),
|
|
18635
18653
|
/* @__PURE__ */ jsxs136("div", { className: "flex w-full flex-col", children: [
|
|
18636
|
-
/* @__PURE__ */
|
|
18637
|
-
strong: /* @__PURE__ */ __name((chunks) => /* @__PURE__ */
|
|
18654
|
+
/* @__PURE__ */ jsx222("p", { className: "text-sm", children: t.rich(`notification.${notification.notificationType}.description`, {
|
|
18655
|
+
strong: /* @__PURE__ */ __name((chunks) => /* @__PURE__ */ jsx222("strong", { children: chunks }), "strong"),
|
|
18638
18656
|
actor: notificationData.actor?.name ?? "",
|
|
18639
18657
|
title: notificationData.title
|
|
18640
18658
|
}) }),
|
|
18641
|
-
/* @__PURE__ */
|
|
18659
|
+
/* @__PURE__ */ jsx222("div", { className: "text-muted-foreground mt-1 w-full text-xs", children: new Date(notification.createdAt).toLocaleString() })
|
|
18642
18660
|
] }),
|
|
18643
18661
|
/* @__PURE__ */ jsxs136("div", { className: "flex flex-row items-center", children: [
|
|
18644
|
-
notificationData.url ? /* @__PURE__ */
|
|
18662
|
+
notificationData.url ? /* @__PURE__ */ jsx222(Link, { href: notificationData.url, children: /* @__PURE__ */ jsx222(Button, { variant: `outline`, size: `sm`, onClick: (e) => e.stopPropagation(), children: t(`notification.${notification.notificationType}.buttons.action`) }) }) : /* @__PURE__ */ jsx222(Fragment46, {}),
|
|
18645
18663
|
!archived && /* @__PURE__ */ jsxs136(Tooltip2, { children: [
|
|
18646
|
-
/* @__PURE__ */
|
|
18664
|
+
/* @__PURE__ */ jsx222(TooltipTrigger, { children: /* @__PURE__ */ jsx222(
|
|
18647
18665
|
Button,
|
|
18648
18666
|
{
|
|
18649
18667
|
variant: `link`,
|
|
@@ -18653,46 +18671,46 @@ function NotificationsList({ archived }) {
|
|
|
18653
18671
|
archiveNotification(notification);
|
|
18654
18672
|
},
|
|
18655
18673
|
className: "text-muted-foreground hover:text-destructive ml-2",
|
|
18656
|
-
children: /* @__PURE__ */
|
|
18674
|
+
children: /* @__PURE__ */ jsx222(ArchiveIcon, { className: "h-4 w-4 cursor-pointer" })
|
|
18657
18675
|
}
|
|
18658
18676
|
) }),
|
|
18659
|
-
/* @__PURE__ */
|
|
18677
|
+
/* @__PURE__ */ jsx222(TooltipContent, { children: t(`notification.buttons.archive`) })
|
|
18660
18678
|
] })
|
|
18661
18679
|
] })
|
|
18662
18680
|
] }) }) }, notification.id);
|
|
18663
|
-
}) : /* @__PURE__ */
|
|
18681
|
+
}) : /* @__PURE__ */ jsx222(LoadingSkeleton, {}) });
|
|
18664
18682
|
}
|
|
18665
18683
|
__name(NotificationsList, "NotificationsList");
|
|
18666
18684
|
|
|
18667
18685
|
// src/features/notification/components/containers/NotificationsListContainer.tsx
|
|
18668
|
-
import { jsx as
|
|
18686
|
+
import { jsx as jsx223, jsxs as jsxs137 } from "react/jsx-runtime";
|
|
18669
18687
|
function NotificationsListContainerContent() {
|
|
18670
18688
|
const t = useTranslations96();
|
|
18671
18689
|
const { notifications: _notifications, isLoading: _isLoading, error } = useNotificationContext();
|
|
18672
18690
|
if (error) {
|
|
18673
|
-
return /* @__PURE__ */
|
|
18691
|
+
return /* @__PURE__ */ jsx223("div", { className: "flex items-center justify-center p-8 text-center", children: /* @__PURE__ */ jsxs137("div", { className: "text-destructive text-sm", children: [
|
|
18674
18692
|
/* @__PURE__ */ jsxs137("p", { children: [
|
|
18675
18693
|
"Error loading notifications: ",
|
|
18676
18694
|
error
|
|
18677
18695
|
] }),
|
|
18678
|
-
/* @__PURE__ */
|
|
18696
|
+
/* @__PURE__ */ jsx223("p", { className: "text-muted-foreground mt-2", children: "Please try refreshing the page." })
|
|
18679
18697
|
] }) });
|
|
18680
18698
|
}
|
|
18681
18699
|
const tabs = [
|
|
18682
18700
|
{
|
|
18683
18701
|
label: t(`notification.inbox`),
|
|
18684
|
-
content: /* @__PURE__ */
|
|
18702
|
+
content: /* @__PURE__ */ jsx223(NotificationsList, { archived: false })
|
|
18685
18703
|
},
|
|
18686
18704
|
{
|
|
18687
18705
|
label: t(`notification.archived`),
|
|
18688
|
-
content: /* @__PURE__ */
|
|
18706
|
+
content: /* @__PURE__ */ jsx223(NotificationsList, { archived: true })
|
|
18689
18707
|
}
|
|
18690
18708
|
];
|
|
18691
|
-
return /* @__PURE__ */
|
|
18709
|
+
return /* @__PURE__ */ jsx223(TabsContainer, { tabs });
|
|
18692
18710
|
}
|
|
18693
18711
|
__name(NotificationsListContainerContent, "NotificationsListContainerContent");
|
|
18694
18712
|
function NotificationsListContainer() {
|
|
18695
|
-
return /* @__PURE__ */
|
|
18713
|
+
return /* @__PURE__ */ jsx223(NotificationErrorBoundary, { children: /* @__PURE__ */ jsx223(NotificationsListContainerContent, {}) });
|
|
18696
18714
|
}
|
|
18697
18715
|
__name(NotificationsListContainer, "NotificationsListContainer");
|
|
18698
18716
|
|
|
@@ -18700,7 +18718,7 @@ __name(NotificationsListContainer, "NotificationsListContainer");
|
|
|
18700
18718
|
import { BellIcon } from "lucide-react";
|
|
18701
18719
|
import { useTranslations as useTranslations97 } from "next-intl";
|
|
18702
18720
|
import { Fragment as Fragment47, useCallback as useCallback39, useEffect as useEffect63, useMemo as useMemo32, useRef as useRef33, useState as useState83 } from "react";
|
|
18703
|
-
import { jsx as
|
|
18721
|
+
import { jsx as jsx224, jsxs as jsxs138 } from "react/jsx-runtime";
|
|
18704
18722
|
function NotificationModalContent({ isOpen, setIsOpen }) {
|
|
18705
18723
|
const _instanceId = useRef33(Math.random().toString(36).substr(2, 9));
|
|
18706
18724
|
const {
|
|
@@ -18835,8 +18853,8 @@ function NotificationModalContent({ isOpen, setIsOpen }) {
|
|
|
18835
18853
|
}, "handleOpenChange");
|
|
18836
18854
|
const unreadNotifications = newNotifications && unreadCount > 0;
|
|
18837
18855
|
return /* @__PURE__ */ jsxs138(Popover, { open: isOpen, onOpenChange: handleOpenChange, "data-testid": `sidebar-notification button`, children: [
|
|
18838
|
-
/* @__PURE__ */
|
|
18839
|
-
/* @__PURE__ */
|
|
18856
|
+
/* @__PURE__ */ jsx224(PopoverTrigger, { children: /* @__PURE__ */ jsxs138(SidebarMenuButton, { render: /* @__PURE__ */ jsx224("div", {}), className: "text-muted-foreground h-6", disabled: isLoading, children: [
|
|
18857
|
+
/* @__PURE__ */ jsx224(
|
|
18840
18858
|
BellIcon,
|
|
18841
18859
|
{
|
|
18842
18860
|
className: `h-5 w-5 cursor-pointer ${unreadNotifications ? "text-destructive" : ""} ${isLoading ? "animate-pulse" : ""}`
|
|
@@ -18844,31 +18862,31 @@ function NotificationModalContent({ isOpen, setIsOpen }) {
|
|
|
18844
18862
|
),
|
|
18845
18863
|
t(`entities.notifications`, { count: 2 })
|
|
18846
18864
|
] }) }),
|
|
18847
|
-
/* @__PURE__ */
|
|
18865
|
+
/* @__PURE__ */ jsx224(PopoverContent, { className: "relative left-10 w-80 border-0 p-0 shadow-none", children: /* @__PURE__ */ jsxs138(Card, { children: [
|
|
18848
18866
|
/* @__PURE__ */ jsxs138(CardHeader, { className: "p-4", children: [
|
|
18849
|
-
/* @__PURE__ */
|
|
18850
|
-
isLoading && /* @__PURE__ */
|
|
18867
|
+
/* @__PURE__ */ jsx224(CardTitle, { children: t(`entities.notifications`, { count: 2 }) }),
|
|
18868
|
+
isLoading && /* @__PURE__ */ jsx224("div", { className: "text-muted-foreground text-xs", children: "Loading..." }),
|
|
18851
18869
|
error && /* @__PURE__ */ jsxs138("div", { className: "text-destructive text-xs", children: [
|
|
18852
18870
|
"Error: ",
|
|
18853
18871
|
error
|
|
18854
18872
|
] })
|
|
18855
18873
|
] }),
|
|
18856
|
-
/* @__PURE__ */
|
|
18857
|
-
/* @__PURE__ */
|
|
18874
|
+
/* @__PURE__ */ jsx224(Separator, {}),
|
|
18875
|
+
/* @__PURE__ */ jsx224(ScrollArea, { className: "h-96", children: notifications.length > 0 ? notifications.map((notification) => /* @__PURE__ */ jsx224(Fragment47, { children: generateNotification(notification, () => setIsOpen(false)) }, notification.id)) : /* @__PURE__ */ jsx224("div", { className: "p-4 text-center text-sm text-gray-500", children: t(`notification.empty`) }) })
|
|
18858
18876
|
] }) })
|
|
18859
18877
|
] });
|
|
18860
18878
|
}
|
|
18861
18879
|
__name(NotificationModalContent, "NotificationModalContent");
|
|
18862
18880
|
function NotificationModal(props) {
|
|
18863
|
-
return /* @__PURE__ */
|
|
18881
|
+
return /* @__PURE__ */ jsx224(NotificationErrorBoundary, { children: /* @__PURE__ */ jsx224(NotificationModalContent, { ...props }) });
|
|
18864
18882
|
}
|
|
18865
18883
|
__name(NotificationModal, "NotificationModal");
|
|
18866
18884
|
|
|
18867
18885
|
// src/features/notification/components/notifications/PushNotificationProvider.tsx
|
|
18868
|
-
import { Fragment as Fragment48, jsx as
|
|
18886
|
+
import { Fragment as Fragment48, jsx as jsx225 } from "react/jsx-runtime";
|
|
18869
18887
|
function PushNotificationProvider({ children }) {
|
|
18870
18888
|
usePushNotifications();
|
|
18871
|
-
return /* @__PURE__ */
|
|
18889
|
+
return /* @__PURE__ */ jsx225(Fragment48, { children });
|
|
18872
18890
|
}
|
|
18873
18891
|
__name(PushNotificationProvider, "PushNotificationProvider");
|
|
18874
18892
|
|
|
@@ -18964,7 +18982,7 @@ function useReferralStats() {
|
|
|
18964
18982
|
__name(useReferralStats, "useReferralStats");
|
|
18965
18983
|
|
|
18966
18984
|
// src/features/referral/components/ReferralWidget.tsx
|
|
18967
|
-
import { jsx as
|
|
18985
|
+
import { jsx as jsx226, jsxs as jsxs139 } from "react/jsx-runtime";
|
|
18968
18986
|
var DEFAULT_TRANSLATIONS = {
|
|
18969
18987
|
title: "Invite Friends",
|
|
18970
18988
|
description: "Share your referral link and earn rewards when your friends subscribe.",
|
|
@@ -19070,30 +19088,30 @@ function ReferralWidget({
|
|
|
19070
19088
|
);
|
|
19071
19089
|
if (loading) {
|
|
19072
19090
|
if (isDialog) {
|
|
19073
|
-
return /* @__PURE__ */
|
|
19091
|
+
return /* @__PURE__ */ jsx226("div", { className: "flex items-center justify-center py-4", children: /* @__PURE__ */ jsx226(Loader25, { className: "text-muted-foreground h-6 w-6 animate-spin" }) });
|
|
19074
19092
|
}
|
|
19075
|
-
return /* @__PURE__ */
|
|
19093
|
+
return /* @__PURE__ */ jsx226(Card, { className: `p-6 ${className ?? ""}`, children: /* @__PURE__ */ jsx226("div", { className: "flex items-center justify-center py-4", children: /* @__PURE__ */ jsx226(Loader25, { className: "text-muted-foreground h-6 w-6 animate-spin" }) }) });
|
|
19076
19094
|
}
|
|
19077
19095
|
if (error) {
|
|
19078
19096
|
const errorMessage = error instanceof Error ? error.message : "Failed to load referral data";
|
|
19079
19097
|
if (isDialog) {
|
|
19080
|
-
return /* @__PURE__ */
|
|
19098
|
+
return /* @__PURE__ */ jsx226("div", { className: "text-destructive text-center text-sm", children: errorMessage });
|
|
19081
19099
|
}
|
|
19082
|
-
return /* @__PURE__ */
|
|
19100
|
+
return /* @__PURE__ */ jsx226(Card, { className: `p-6 ${className ?? ""}`, children: /* @__PURE__ */ jsx226("div", { className: "text-destructive text-center text-sm", children: errorMessage }) });
|
|
19083
19101
|
}
|
|
19084
19102
|
const content = /* @__PURE__ */ jsxs139("div", { className: "flex flex-col gap-4", children: [
|
|
19085
19103
|
!isDialog && /* @__PURE__ */ jsxs139("div", { className: "flex items-start gap-3", children: [
|
|
19086
|
-
/* @__PURE__ */
|
|
19104
|
+
/* @__PURE__ */ jsx226("div", { className: "bg-primary/10 rounded-full p-2", children: /* @__PURE__ */ jsx226(Users, { className: "text-primary h-5 w-5" }) }),
|
|
19087
19105
|
/* @__PURE__ */ jsxs139("div", { className: "flex flex-col gap-1", children: [
|
|
19088
|
-
/* @__PURE__ */
|
|
19089
|
-
/* @__PURE__ */
|
|
19106
|
+
/* @__PURE__ */ jsx226("h3", { className: "text-lg font-semibold", children: t.title }),
|
|
19107
|
+
/* @__PURE__ */ jsx226("p", { className: "text-muted-foreground text-sm", children: t.description })
|
|
19090
19108
|
] })
|
|
19091
19109
|
] }),
|
|
19092
19110
|
/* @__PURE__ */ jsxs139("div", { className: "flex flex-col gap-2", children: [
|
|
19093
|
-
/* @__PURE__ */
|
|
19111
|
+
/* @__PURE__ */ jsx226(Label, { className: "text-sm font-medium", children: t.yourLink }),
|
|
19094
19112
|
/* @__PURE__ */ jsxs139("div", { className: "flex gap-2", children: [
|
|
19095
|
-
/* @__PURE__ */
|
|
19096
|
-
/* @__PURE__ */
|
|
19113
|
+
/* @__PURE__ */ jsx226(Input, { ref: linkInputRef, value: referralUrl, readOnly: true, className: "font-mono text-sm" }),
|
|
19114
|
+
/* @__PURE__ */ jsx226(
|
|
19097
19115
|
Button,
|
|
19098
19116
|
{
|
|
19099
19117
|
type: "button",
|
|
@@ -19102,16 +19120,16 @@ function ReferralWidget({
|
|
|
19102
19120
|
onClick: handleCopyLink,
|
|
19103
19121
|
disabled: !referralUrl,
|
|
19104
19122
|
"aria-label": t.copyButton,
|
|
19105
|
-
children: /* @__PURE__ */
|
|
19123
|
+
children: /* @__PURE__ */ jsx226(Copy2, { className: `h-4 w-4 ${copied ? "text-green-500" : ""}` })
|
|
19106
19124
|
}
|
|
19107
19125
|
)
|
|
19108
19126
|
] })
|
|
19109
19127
|
] }),
|
|
19110
19128
|
/* @__PURE__ */ jsxs139("div", { className: "flex flex-col gap-2", children: [
|
|
19111
|
-
/* @__PURE__ */
|
|
19112
|
-
/* @__PURE__ */
|
|
19129
|
+
/* @__PURE__ */ jsx226(Label, { className: "text-sm font-medium", children: t.inviteTitle }),
|
|
19130
|
+
/* @__PURE__ */ jsx226("p", { className: "text-muted-foreground text-sm", children: t.inviteDescription }),
|
|
19113
19131
|
/* @__PURE__ */ jsxs139("div", { className: "flex gap-2", children: [
|
|
19114
|
-
/* @__PURE__ */
|
|
19132
|
+
/* @__PURE__ */ jsx226(
|
|
19115
19133
|
Input,
|
|
19116
19134
|
{
|
|
19117
19135
|
type: "email",
|
|
@@ -19122,7 +19140,7 @@ function ReferralWidget({
|
|
|
19122
19140
|
disabled: sending
|
|
19123
19141
|
}
|
|
19124
19142
|
),
|
|
19125
|
-
/* @__PURE__ */
|
|
19143
|
+
/* @__PURE__ */ jsx226(
|
|
19126
19144
|
Button,
|
|
19127
19145
|
{
|
|
19128
19146
|
type: "button",
|
|
@@ -19131,12 +19149,12 @@ function ReferralWidget({
|
|
|
19131
19149
|
onClick: handleSendInvite,
|
|
19132
19150
|
disabled: sending || !email,
|
|
19133
19151
|
"aria-label": sending ? t.sendingButton : t.sendButton,
|
|
19134
|
-
children: sending ? /* @__PURE__ */
|
|
19152
|
+
children: sending ? /* @__PURE__ */ jsx226(Loader25, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx226(Mail, { className: "h-4 w-4" })
|
|
19135
19153
|
}
|
|
19136
19154
|
)
|
|
19137
19155
|
] })
|
|
19138
19156
|
] }),
|
|
19139
|
-
stats && stats.completedReferrals > 0 && /* @__PURE__ */
|
|
19157
|
+
stats && stats.completedReferrals > 0 && /* @__PURE__ */ jsx226("div", { className: "border-border border-t pt-3", children: /* @__PURE__ */ jsxs139("p", { className: "text-muted-foreground text-sm", children: [
|
|
19140
19158
|
t.completedLabel,
|
|
19141
19159
|
": ",
|
|
19142
19160
|
stats.completedReferrals
|
|
@@ -19145,12 +19163,12 @@ function ReferralWidget({
|
|
|
19145
19163
|
if (isDialog) {
|
|
19146
19164
|
return content;
|
|
19147
19165
|
}
|
|
19148
|
-
return /* @__PURE__ */
|
|
19166
|
+
return /* @__PURE__ */ jsx226(Card, { className: `p-6 ${className ?? ""}`, children: content });
|
|
19149
19167
|
}
|
|
19150
19168
|
__name(ReferralWidget, "ReferralWidget");
|
|
19151
19169
|
|
|
19152
19170
|
// src/features/referral/components/ReferralDialog.tsx
|
|
19153
|
-
import { jsx as
|
|
19171
|
+
import { jsx as jsx227, jsxs as jsxs140 } from "react/jsx-runtime";
|
|
19154
19172
|
var DEFAULT_DIALOG_TRANSLATIONS = {
|
|
19155
19173
|
dialogTitle: "Invite Friends",
|
|
19156
19174
|
dialogDescription: "Share your referral link and earn rewards when your friends subscribe."
|
|
@@ -19166,49 +19184,49 @@ function ReferralDialog({
|
|
|
19166
19184
|
return null;
|
|
19167
19185
|
}
|
|
19168
19186
|
const t = { ...DEFAULT_DIALOG_TRANSLATIONS, ...translations };
|
|
19169
|
-
return /* @__PURE__ */
|
|
19187
|
+
return /* @__PURE__ */ jsx227(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs140(DialogContent, { className: dialogClassName ?? "max-w-md", children: [
|
|
19170
19188
|
/* @__PURE__ */ jsxs140(DialogHeader, { children: [
|
|
19171
|
-
/* @__PURE__ */
|
|
19172
|
-
/* @__PURE__ */
|
|
19189
|
+
/* @__PURE__ */ jsx227(DialogTitle, { children: t.dialogTitle }),
|
|
19190
|
+
/* @__PURE__ */ jsx227(DialogDescription, { children: t.dialogDescription })
|
|
19173
19191
|
] }),
|
|
19174
|
-
/* @__PURE__ */
|
|
19192
|
+
/* @__PURE__ */ jsx227(ReferralWidget, { ...widgetProps, translations, isDialog: true })
|
|
19175
19193
|
] }) });
|
|
19176
19194
|
}
|
|
19177
19195
|
__name(ReferralDialog, "ReferralDialog");
|
|
19178
19196
|
|
|
19179
19197
|
// src/features/role/components/details/RoleDetails.tsx
|
|
19180
19198
|
import { useTranslations as useTranslations98 } from "next-intl";
|
|
19181
|
-
import { jsx as
|
|
19199
|
+
import { jsx as jsx228 } from "react/jsx-runtime";
|
|
19182
19200
|
function RoleDetails() {
|
|
19183
19201
|
const { role } = useRoleContext();
|
|
19184
19202
|
const t = useTranslations98();
|
|
19185
19203
|
if (!role) return null;
|
|
19186
|
-
return /* @__PURE__ */
|
|
19204
|
+
return /* @__PURE__ */ jsx228(Card, { className: "w-full", children: /* @__PURE__ */ jsx228(CardContent, { className: "p-4", children: /* @__PURE__ */ jsx228(AttributeElement, { title: t(`role.fields.description.label`), value: role.description }) }) });
|
|
19187
19205
|
}
|
|
19188
19206
|
__name(RoleDetails, "RoleDetails");
|
|
19189
19207
|
|
|
19190
19208
|
// src/features/role/components/containers/RoleContainer.tsx
|
|
19191
|
-
import { Fragment as Fragment49, jsx as
|
|
19209
|
+
import { Fragment as Fragment49, jsx as jsx229, jsxs as jsxs141 } from "react/jsx-runtime";
|
|
19192
19210
|
function RoleContainer() {
|
|
19193
19211
|
const { role } = useRoleContext();
|
|
19194
19212
|
if (!role) return null;
|
|
19195
19213
|
return /* @__PURE__ */ jsxs141(Fragment49, { children: [
|
|
19196
|
-
/* @__PURE__ */
|
|
19197
|
-
/* @__PURE__ */
|
|
19214
|
+
/* @__PURE__ */ jsx229(RoleDetails, {}),
|
|
19215
|
+
/* @__PURE__ */ jsx229(RoleUsersList, { role })
|
|
19198
19216
|
] });
|
|
19199
19217
|
}
|
|
19200
19218
|
__name(RoleContainer, "RoleContainer");
|
|
19201
19219
|
|
|
19202
19220
|
// src/features/role/components/forms/FormRoles.tsx
|
|
19203
19221
|
import { useTranslations as useTranslations99 } from "next-intl";
|
|
19204
|
-
import { jsx as
|
|
19222
|
+
import { jsx as jsx230, jsxs as jsxs142 } from "react/jsx-runtime";
|
|
19205
19223
|
function FormRoles({ form, id, name, roles }) {
|
|
19206
19224
|
const t = useTranslations99();
|
|
19207
19225
|
const { hasAccesToFeature } = useCurrentUserContext();
|
|
19208
|
-
return /* @__PURE__ */
|
|
19226
|
+
return /* @__PURE__ */ jsx230("div", { className: "flex w-full flex-col", children: /* @__PURE__ */ jsx230(FormFieldWrapper, { form, name: id, label: name, children: (field) => /* @__PURE__ */ jsx230("div", { className: "flex w-full flex-col gap-y-1", children: roles.filter((role) => role.isSelectable).sort((a, b) => a.name.localeCompare(b.name)).map((role) => {
|
|
19209
19227
|
if (role.requiredFeature && !hasAccesToFeature(role.requiredFeature.id)) return null;
|
|
19210
19228
|
return /* @__PURE__ */ jsxs142("div", { className: "flex w-full items-center", children: [
|
|
19211
|
-
/* @__PURE__ */
|
|
19229
|
+
/* @__PURE__ */ jsx230(
|
|
19212
19230
|
Checkbox,
|
|
19213
19231
|
{
|
|
19214
19232
|
id: `role-${role.id}`,
|
|
@@ -19226,8 +19244,8 @@ function FormRoles({ form, id, name, roles }) {
|
|
|
19226
19244
|
}
|
|
19227
19245
|
),
|
|
19228
19246
|
/* @__PURE__ */ jsxs142(Tooltip2, { children: [
|
|
19229
|
-
/* @__PURE__ */
|
|
19230
|
-
/* @__PURE__ */
|
|
19247
|
+
/* @__PURE__ */ jsx230(TooltipTrigger, { children: /* @__PURE__ */ jsx230(FieldLabel, { htmlFor: `role-${role.id}`, className: "ml-3 cursor-pointer font-normal", children: t(`role.roles`, { role: role.id.replaceAll(`-`, ``) }) }) }),
|
|
19248
|
+
/* @__PURE__ */ jsx230(TooltipContent, { children: t(`role.roles_descriptions`, { role: role.id.replaceAll(`-`, ``) }) })
|
|
19231
19249
|
] })
|
|
19232
19250
|
] }, role.id);
|
|
19233
19251
|
}) }) }) });
|
|
@@ -19237,7 +19255,7 @@ __name(FormRoles, "FormRoles");
|
|
|
19237
19255
|
// src/features/role/components/forms/RemoveUserFromRole.tsx
|
|
19238
19256
|
import { useTranslations as useTranslations100 } from "next-intl";
|
|
19239
19257
|
import { useEffect as useEffect66, useState as useState87 } from "react";
|
|
19240
|
-
import { Fragment as Fragment50, jsx as
|
|
19258
|
+
import { Fragment as Fragment50, jsx as jsx231, jsxs as jsxs143 } from "react/jsx-runtime";
|
|
19241
19259
|
function RemoveUserFromRole({ role, user, refresh }) {
|
|
19242
19260
|
const [open, setOpen] = useState87(false);
|
|
19243
19261
|
const [canRemove, setCanRemove] = useState87(false);
|
|
@@ -19270,7 +19288,7 @@ function RemoveUserFromRole({ role, user, refresh }) {
|
|
|
19270
19288
|
}, "remove");
|
|
19271
19289
|
const roleName = t(`role.roles`, { role: role.id.replaceAll(`-`, ``) });
|
|
19272
19290
|
return /* @__PURE__ */ jsxs143(Dialog, { open, onOpenChange: setOpen, children: [
|
|
19273
|
-
/* @__PURE__ */
|
|
19291
|
+
/* @__PURE__ */ jsx231(
|
|
19274
19292
|
DialogTrigger,
|
|
19275
19293
|
{
|
|
19276
19294
|
onClick: (e) => {
|
|
@@ -19278,19 +19296,19 @@ function RemoveUserFromRole({ role, user, refresh }) {
|
|
|
19278
19296
|
e.preventDefault();
|
|
19279
19297
|
setOpen(true);
|
|
19280
19298
|
},
|
|
19281
|
-
children: /* @__PURE__ */
|
|
19299
|
+
children: /* @__PURE__ */ jsx231("span", { className: "hover:text-destructive cursor-pointer", children: t(`role.remove_user.title`) })
|
|
19282
19300
|
}
|
|
19283
19301
|
),
|
|
19284
19302
|
/* @__PURE__ */ jsxs143(DialogContent, { className: `flex max-h-[70vh] max-w-3xl flex-col overflow-y-auto`, children: [
|
|
19285
19303
|
/* @__PURE__ */ jsxs143(DialogHeader, { children: [
|
|
19286
|
-
/* @__PURE__ */
|
|
19287
|
-
/* @__PURE__ */
|
|
19304
|
+
/* @__PURE__ */ jsx231(DialogTitle, { children: t(`role.remove_user.title`) }),
|
|
19305
|
+
/* @__PURE__ */ jsx231(DialogDescription, { children: canRemove ? t(`role.remove_user.subtitle_allowed`) : t(`role.remove_user.subtitle_not_allowed`) })
|
|
19288
19306
|
] }),
|
|
19289
19307
|
canRemove ? /* @__PURE__ */ jsxs143(Fragment50, { children: [
|
|
19290
19308
|
t(`role.remove_user.description_allowed`, { role: roleName, user: user.name }),
|
|
19291
19309
|
/* @__PURE__ */ jsxs143("div", { className: "flex justify-end", children: [
|
|
19292
|
-
/* @__PURE__ */
|
|
19293
|
-
/* @__PURE__ */
|
|
19310
|
+
/* @__PURE__ */ jsx231(Button, { className: "mr-2", variant: "outline", type: `button`, onClick: () => setOpen(false), children: t(`ui.buttons.cancel`) }),
|
|
19311
|
+
/* @__PURE__ */ jsx231(
|
|
19294
19312
|
Button,
|
|
19295
19313
|
{
|
|
19296
19314
|
type: "submit",
|
|
@@ -19303,7 +19321,7 @@ function RemoveUserFromRole({ role, user, refresh }) {
|
|
|
19303
19321
|
}
|
|
19304
19322
|
)
|
|
19305
19323
|
] })
|
|
19306
|
-
] }) : /* @__PURE__ */
|
|
19324
|
+
] }) : /* @__PURE__ */ jsx231(Fragment50, { children: t(`role.remove_user.description_not_allowed`, { role: roleName, user: user.name }) })
|
|
19307
19325
|
] })
|
|
19308
19326
|
] });
|
|
19309
19327
|
}
|
|
@@ -19313,7 +19331,7 @@ __name(RemoveUserFromRole, "RemoveUserFromRole");
|
|
|
19313
19331
|
import { PlusCircle as PlusCircle2 } from "lucide-react";
|
|
19314
19332
|
import { useTranslations as useTranslations101 } from "next-intl";
|
|
19315
19333
|
import { useCallback as useCallback41, useEffect as useEffect67, useRef as useRef35, useState as useState88 } from "react";
|
|
19316
|
-
import { Fragment as Fragment51, jsx as
|
|
19334
|
+
import { Fragment as Fragment51, jsx as jsx232, jsxs as jsxs144 } from "react/jsx-runtime";
|
|
19317
19335
|
function UserRoleAdd({ user, refresh }) {
|
|
19318
19336
|
const [open, setOpen] = useState88(false);
|
|
19319
19337
|
const inputRef = useRef35(null);
|
|
@@ -19362,24 +19380,24 @@ function UserRoleAdd({ user, refresh }) {
|
|
|
19362
19380
|
}, [open]);
|
|
19363
19381
|
return /* @__PURE__ */ jsxs144(Fragment51, { children: [
|
|
19364
19382
|
/* @__PURE__ */ jsxs144(Button, { size: "sm", onClick: () => setOpen(true), children: [
|
|
19365
|
-
/* @__PURE__ */
|
|
19383
|
+
/* @__PURE__ */ jsx232(PlusCircle2, { className: "mr-3 h-3.5 w-3.5" }),
|
|
19366
19384
|
t(`common.association.label`, {
|
|
19367
19385
|
source: t(`entities.roles`, { count: 1 }),
|
|
19368
19386
|
destination: t(`entities.users`, { count: 1 })
|
|
19369
19387
|
})
|
|
19370
19388
|
] }),
|
|
19371
19389
|
/* @__PURE__ */ jsxs144(CommandDialog, { open, onOpenChange: setOpen, children: [
|
|
19372
|
-
/* @__PURE__ */
|
|
19390
|
+
/* @__PURE__ */ jsx232(DialogTitle, { children: t(`common.association.label`, {
|
|
19373
19391
|
source: t(`entities.roles`, { count: 1 }),
|
|
19374
19392
|
destination: t(`entities.users`, { count: 1 })
|
|
19375
19393
|
}) }),
|
|
19376
|
-
/* @__PURE__ */
|
|
19394
|
+
/* @__PURE__ */ jsx232(DialogDescription, { children: t(`common.association.description`, {
|
|
19377
19395
|
source: t(`entities.roles`, { count: 1 }),
|
|
19378
19396
|
destination: t(`entities.users`, { count: 1 }),
|
|
19379
19397
|
destination_name: user.name
|
|
19380
19398
|
}) }),
|
|
19381
19399
|
/* @__PURE__ */ jsxs144(Command, { shouldFilter: false, children: [
|
|
19382
|
-
/* @__PURE__ */
|
|
19400
|
+
/* @__PURE__ */ jsx232(
|
|
19383
19401
|
CommandInput,
|
|
19384
19402
|
{
|
|
19385
19403
|
placeholder: t(`ui.search.placeholder`, { type: t(`entities.roles`, { count: 1 }) }),
|
|
@@ -19389,8 +19407,8 @@ function UserRoleAdd({ user, refresh }) {
|
|
|
19389
19407
|
}
|
|
19390
19408
|
),
|
|
19391
19409
|
/* @__PURE__ */ jsxs144(CommandList, { className: "mt-3 h-auto max-h-96 min-h-96 max-w-full overflow-x-hidden overflow-y-auto", children: [
|
|
19392
|
-
/* @__PURE__ */
|
|
19393
|
-
roles.map((role) => /* @__PURE__ */
|
|
19410
|
+
/* @__PURE__ */ jsx232(CommandEmpty, { children: t(`ui.search.no_results`, { type: t(`entities.roles`, { count: 1 }) }) }),
|
|
19411
|
+
roles.map((role) => /* @__PURE__ */ jsx232(
|
|
19394
19412
|
CommandItem,
|
|
19395
19413
|
{
|
|
19396
19414
|
className: "cursor-pointer hover:bg-muted data-selected:hover:bg-muted bg-transparent data-selected:bg-transparent",
|
|
@@ -19409,7 +19427,7 @@ __name(UserRoleAdd, "UserRoleAdd");
|
|
|
19409
19427
|
|
|
19410
19428
|
// src/features/role/components/lists/RolesList.tsx
|
|
19411
19429
|
import { useTranslations as useTranslations102 } from "next-intl";
|
|
19412
|
-
import { jsx as
|
|
19430
|
+
import { jsx as jsx233 } from "react/jsx-runtime";
|
|
19413
19431
|
function RolesList() {
|
|
19414
19432
|
const t = useTranslations102();
|
|
19415
19433
|
const data = useDataListRetriever({
|
|
@@ -19417,7 +19435,7 @@ function RolesList() {
|
|
|
19417
19435
|
retrieverParams: {},
|
|
19418
19436
|
module: Modules.Role
|
|
19419
19437
|
});
|
|
19420
|
-
return /* @__PURE__ */
|
|
19438
|
+
return /* @__PURE__ */ jsx233(
|
|
19421
19439
|
ContentListTable,
|
|
19422
19440
|
{
|
|
19423
19441
|
data,
|
|
@@ -19431,7 +19449,7 @@ __name(RolesList, "RolesList");
|
|
|
19431
19449
|
|
|
19432
19450
|
// src/features/role/components/lists/UserRolesList.tsx
|
|
19433
19451
|
import { useTranslations as useTranslations103 } from "next-intl";
|
|
19434
|
-
import { jsx as
|
|
19452
|
+
import { jsx as jsx234 } from "react/jsx-runtime";
|
|
19435
19453
|
function UserRolesList({ user }) {
|
|
19436
19454
|
const t = useTranslations103();
|
|
19437
19455
|
const data = useDataListRetriever({
|
|
@@ -19439,7 +19457,7 @@ function UserRolesList({ user }) {
|
|
|
19439
19457
|
retrieverParams: { userId: user.id },
|
|
19440
19458
|
module: Modules.Role
|
|
19441
19459
|
});
|
|
19442
|
-
return /* @__PURE__ */
|
|
19460
|
+
return /* @__PURE__ */ jsx234(
|
|
19443
19461
|
ContentListTable,
|
|
19444
19462
|
{
|
|
19445
19463
|
data,
|
|
@@ -19454,7 +19472,7 @@ __name(UserRolesList, "UserRolesList");
|
|
|
19454
19472
|
// src/features/oauth/components/OAuthRedirectUriInput.tsx
|
|
19455
19473
|
import { useCallback as useCallback42 } from "react";
|
|
19456
19474
|
import { Plus as Plus2, Trash2 as Trash23 } from "lucide-react";
|
|
19457
|
-
import { jsx as
|
|
19475
|
+
import { jsx as jsx235, jsxs as jsxs145 } from "react/jsx-runtime";
|
|
19458
19476
|
function isValidRedirectUri(uri) {
|
|
19459
19477
|
if (!uri.trim()) return false;
|
|
19460
19478
|
if (uri.startsWith("http://localhost") || uri.startsWith("http://127.0.0.1")) {
|
|
@@ -19505,12 +19523,12 @@ function OAuthRedirectUriInput({
|
|
|
19505
19523
|
label,
|
|
19506
19524
|
" *"
|
|
19507
19525
|
] }),
|
|
19508
|
-
/* @__PURE__ */
|
|
19509
|
-
/* @__PURE__ */
|
|
19526
|
+
/* @__PURE__ */ jsx235("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." }),
|
|
19527
|
+
/* @__PURE__ */ jsx235("div", { className: "space-y-2", children: value.map((uri, index) => {
|
|
19510
19528
|
const isValid3 = !uri || isValidRedirectUri(uri);
|
|
19511
19529
|
return /* @__PURE__ */ jsxs145("div", { className: "flex gap-2", children: [
|
|
19512
19530
|
/* @__PURE__ */ jsxs145("div", { className: "flex-1", children: [
|
|
19513
|
-
/* @__PURE__ */
|
|
19531
|
+
/* @__PURE__ */ jsx235(
|
|
19514
19532
|
Input,
|
|
19515
19533
|
{
|
|
19516
19534
|
value: uri,
|
|
@@ -19520,9 +19538,9 @@ function OAuthRedirectUriInput({
|
|
|
19520
19538
|
className: !isValid3 ? "border-destructive" : ""
|
|
19521
19539
|
}
|
|
19522
19540
|
),
|
|
19523
|
-
!isValid3 && /* @__PURE__ */
|
|
19541
|
+
!isValid3 && /* @__PURE__ */ jsx235("p", { className: "text-xs text-destructive mt-1", children: "Must be https://, http://localhost, or a custom scheme (app://)" })
|
|
19524
19542
|
] }),
|
|
19525
|
-
/* @__PURE__ */
|
|
19543
|
+
/* @__PURE__ */ jsx235(
|
|
19526
19544
|
Button,
|
|
19527
19545
|
{
|
|
19528
19546
|
type: "button",
|
|
@@ -19531,23 +19549,23 @@ function OAuthRedirectUriInput({
|
|
|
19531
19549
|
onClick: () => handleRemove(index),
|
|
19532
19550
|
disabled: disabled || value.length === 1,
|
|
19533
19551
|
title: "Remove URI",
|
|
19534
|
-
children: /* @__PURE__ */
|
|
19552
|
+
children: /* @__PURE__ */ jsx235(Trash23, { className: "h-4 w-4" })
|
|
19535
19553
|
}
|
|
19536
19554
|
)
|
|
19537
19555
|
] }, index);
|
|
19538
19556
|
}) }),
|
|
19539
19557
|
/* @__PURE__ */ jsxs145(Button, { type: "button", variant: "outline", size: "sm", onClick: handleAdd, disabled, className: "mt-2", children: [
|
|
19540
|
-
/* @__PURE__ */
|
|
19558
|
+
/* @__PURE__ */ jsx235(Plus2, { className: "h-4 w-4 mr-2" }),
|
|
19541
19559
|
"Add Redirect URI"
|
|
19542
19560
|
] }),
|
|
19543
|
-
error && /* @__PURE__ */
|
|
19561
|
+
error && /* @__PURE__ */ jsx235("p", { className: "text-sm text-destructive", children: error })
|
|
19544
19562
|
] });
|
|
19545
19563
|
}
|
|
19546
19564
|
__name(OAuthRedirectUriInput, "OAuthRedirectUriInput");
|
|
19547
19565
|
|
|
19548
19566
|
// src/features/oauth/components/OAuthScopeSelector.tsx
|
|
19549
19567
|
import { useCallback as useCallback43 } from "react";
|
|
19550
|
-
import { jsx as
|
|
19568
|
+
import { jsx as jsx236, jsxs as jsxs146 } from "react/jsx-runtime";
|
|
19551
19569
|
function OAuthScopeSelector({
|
|
19552
19570
|
value,
|
|
19553
19571
|
onChange,
|
|
@@ -19584,11 +19602,11 @@ function OAuthScopeSelector({
|
|
|
19584
19602
|
label,
|
|
19585
19603
|
" *"
|
|
19586
19604
|
] }),
|
|
19587
|
-
/* @__PURE__ */
|
|
19605
|
+
/* @__PURE__ */ jsx236("p", { className: "text-sm text-muted-foreground", children: "Select the permissions your application needs." })
|
|
19588
19606
|
] }),
|
|
19589
|
-
/* @__PURE__ */
|
|
19590
|
-
/* @__PURE__ */
|
|
19591
|
-
/* @__PURE__ */
|
|
19607
|
+
/* @__PURE__ */ jsx236("div", { className: "space-y-4", children: Object.entries(groupedScopes).map(([groupName, scopes]) => /* @__PURE__ */ jsxs146("div", { className: "space-y-2", children: [
|
|
19608
|
+
/* @__PURE__ */ jsx236("h4", { className: "text-sm font-medium capitalize", children: groupName }),
|
|
19609
|
+
/* @__PURE__ */ jsx236("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-2 pl-2", children: scopes.map((scopeInfo) => {
|
|
19592
19610
|
const isChecked = value.includes(scopeInfo.scope);
|
|
19593
19611
|
const isAdmin = scopeInfo.scope === "admin";
|
|
19594
19612
|
return /* @__PURE__ */ jsxs146(
|
|
@@ -19596,7 +19614,7 @@ function OAuthScopeSelector({
|
|
|
19596
19614
|
{
|
|
19597
19615
|
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" : ""}`,
|
|
19598
19616
|
children: [
|
|
19599
|
-
/* @__PURE__ */
|
|
19617
|
+
/* @__PURE__ */ jsx236(
|
|
19600
19618
|
Checkbox,
|
|
19601
19619
|
{
|
|
19602
19620
|
id: `scope-${scopeInfo.scope}`,
|
|
@@ -19608,9 +19626,9 @@ function OAuthScopeSelector({
|
|
|
19608
19626
|
/* @__PURE__ */ jsxs146("div", { className: "flex-1", children: [
|
|
19609
19627
|
/* @__PURE__ */ jsxs146(Label, { htmlFor: `scope-${scopeInfo.scope}`, className: "text-sm font-medium cursor-pointer", children: [
|
|
19610
19628
|
scopeInfo.name,
|
|
19611
|
-
isAdmin && /* @__PURE__ */
|
|
19629
|
+
isAdmin && /* @__PURE__ */ jsx236("span", { className: "ml-2 text-xs text-destructive", children: "(Dangerous)" })
|
|
19612
19630
|
] }),
|
|
19613
|
-
/* @__PURE__ */
|
|
19631
|
+
/* @__PURE__ */ jsx236("p", { className: "text-xs text-muted-foreground", children: scopeInfo.description })
|
|
19614
19632
|
] })
|
|
19615
19633
|
]
|
|
19616
19634
|
},
|
|
@@ -19618,7 +19636,7 @@ function OAuthScopeSelector({
|
|
|
19618
19636
|
);
|
|
19619
19637
|
}) })
|
|
19620
19638
|
] }, groupName)) }),
|
|
19621
|
-
error && /* @__PURE__ */
|
|
19639
|
+
error && /* @__PURE__ */ jsx236("p", { className: "text-sm text-destructive", children: error })
|
|
19622
19640
|
] });
|
|
19623
19641
|
}
|
|
19624
19642
|
__name(OAuthScopeSelector, "OAuthScopeSelector");
|
|
@@ -19626,7 +19644,7 @@ __name(OAuthScopeSelector, "OAuthScopeSelector");
|
|
|
19626
19644
|
// src/features/oauth/components/OAuthClientSecretDisplay.tsx
|
|
19627
19645
|
import { useState as useState89, useCallback as useCallback44 } from "react";
|
|
19628
19646
|
import { Copy as Copy3, Check, AlertTriangle } from "lucide-react";
|
|
19629
|
-
import { jsx as
|
|
19647
|
+
import { jsx as jsx237, jsxs as jsxs147 } from "react/jsx-runtime";
|
|
19630
19648
|
function OAuthClientSecretDisplay({ secret, onDismiss, open, clientName }) {
|
|
19631
19649
|
const [copied, setCopied] = useState89(false);
|
|
19632
19650
|
const handleCopy = useCallback44(async () => {
|
|
@@ -19642,25 +19660,25 @@ function OAuthClientSecretDisplay({ secret, onDismiss, open, clientName }) {
|
|
|
19642
19660
|
setCopied(false);
|
|
19643
19661
|
onDismiss();
|
|
19644
19662
|
}, [onDismiss]);
|
|
19645
|
-
return /* @__PURE__ */
|
|
19663
|
+
return /* @__PURE__ */ jsx237(Dialog, { open, onOpenChange: (isOpen) => !isOpen && handleDismiss(), children: /* @__PURE__ */ jsxs147(DialogContent, { className: "sm:max-w-md", children: [
|
|
19646
19664
|
/* @__PURE__ */ jsxs147(DialogHeader, { children: [
|
|
19647
19665
|
/* @__PURE__ */ jsxs147(DialogTitle, { className: "flex items-center gap-2", children: [
|
|
19648
|
-
/* @__PURE__ */
|
|
19666
|
+
/* @__PURE__ */ jsx237(AlertTriangle, { className: "h-5 w-5 text-warning" }),
|
|
19649
19667
|
"Save Your Client Secret"
|
|
19650
19668
|
] }),
|
|
19651
|
-
/* @__PURE__ */
|
|
19669
|
+
/* @__PURE__ */ jsx237(DialogDescription, { children: clientName ? `Your client secret for "${clientName}" is shown below.` : "Your client secret is shown below." })
|
|
19652
19670
|
] }),
|
|
19653
19671
|
/* @__PURE__ */ jsxs147(Alert, { variant: "destructive", className: "my-4", children: [
|
|
19654
|
-
/* @__PURE__ */
|
|
19672
|
+
/* @__PURE__ */ jsx237(AlertTriangle, { className: "h-4 w-4" }),
|
|
19655
19673
|
/* @__PURE__ */ jsxs147(AlertDescription, { children: [
|
|
19656
|
-
/* @__PURE__ */
|
|
19657
|
-
/* @__PURE__ */
|
|
19674
|
+
/* @__PURE__ */ jsx237("strong", { children: "This is the only time your client secret will be displayed." }),
|
|
19675
|
+
/* @__PURE__ */ jsx237("br", {}),
|
|
19658
19676
|
"Copy it now and store it securely. You will not be able to retrieve it later."
|
|
19659
19677
|
] })
|
|
19660
19678
|
] }),
|
|
19661
19679
|
/* @__PURE__ */ jsxs147("div", { className: "flex items-center space-x-2", children: [
|
|
19662
|
-
/* @__PURE__ */
|
|
19663
|
-
/* @__PURE__ */
|
|
19680
|
+
/* @__PURE__ */ jsx237("div", { className: "flex-1", children: /* @__PURE__ */ jsx237(Input, { value: secret, readOnly: true, className: "font-mono text-sm", onClick: (e) => e.currentTarget.select() }) }),
|
|
19681
|
+
/* @__PURE__ */ jsx237(
|
|
19664
19682
|
Button,
|
|
19665
19683
|
{
|
|
19666
19684
|
type: "button",
|
|
@@ -19668,12 +19686,12 @@ function OAuthClientSecretDisplay({ secret, onDismiss, open, clientName }) {
|
|
|
19668
19686
|
size: "icon",
|
|
19669
19687
|
onClick: handleCopy,
|
|
19670
19688
|
title: copied ? "Copied!" : "Copy to clipboard",
|
|
19671
|
-
children: copied ? /* @__PURE__ */
|
|
19689
|
+
children: copied ? /* @__PURE__ */ jsx237(Check, { className: "h-4 w-4 text-green-600" }) : /* @__PURE__ */ jsx237(Copy3, { className: "h-4 w-4" })
|
|
19672
19690
|
}
|
|
19673
19691
|
)
|
|
19674
19692
|
] }),
|
|
19675
|
-
copied && /* @__PURE__ */
|
|
19676
|
-
/* @__PURE__ */
|
|
19693
|
+
copied && /* @__PURE__ */ jsx237("p", { className: "text-sm text-green-600 text-center", children: "Copied to clipboard!" }),
|
|
19694
|
+
/* @__PURE__ */ jsx237(DialogFooter, { className: "mt-4", children: /* @__PURE__ */ jsx237(Button, { onClick: handleDismiss, className: "w-full", children: "I've Saved My Secret" }) })
|
|
19677
19695
|
] }) });
|
|
19678
19696
|
}
|
|
19679
19697
|
__name(OAuthClientSecretDisplay, "OAuthClientSecretDisplay");
|
|
@@ -19681,7 +19699,7 @@ __name(OAuthClientSecretDisplay, "OAuthClientSecretDisplay");
|
|
|
19681
19699
|
// src/features/oauth/components/OAuthClientCard.tsx
|
|
19682
19700
|
import { formatDistanceToNow } from "date-fns";
|
|
19683
19701
|
import { Key as Key2, MoreVertical, Pencil, Trash2 as Trash24 } from "lucide-react";
|
|
19684
|
-
import { jsx as
|
|
19702
|
+
import { jsx as jsx238, jsxs as jsxs148 } from "react/jsx-runtime";
|
|
19685
19703
|
function OAuthClientCard({ client, onClick, onEdit, onDelete }) {
|
|
19686
19704
|
const truncatedId = client.clientId.length > 12 ? `${client.clientId.slice(0, 8)}...${client.clientId.slice(-4)}` : client.clientId;
|
|
19687
19705
|
const createdAgo = client.createdAt ? formatDistanceToNow(new Date(client.createdAt), { addSuffix: true }) : "Unknown";
|
|
@@ -19694,13 +19712,13 @@ function OAuthClientCard({ client, onClick, onEdit, onDelete }) {
|
|
|
19694
19712
|
/* @__PURE__ */ jsxs148(CardHeader, { className: "pb-2", children: [
|
|
19695
19713
|
/* @__PURE__ */ jsxs148("div", { className: "flex items-start justify-between", children: [
|
|
19696
19714
|
/* @__PURE__ */ jsxs148("div", { className: "flex items-center gap-2", children: [
|
|
19697
|
-
/* @__PURE__ */
|
|
19698
|
-
/* @__PURE__ */
|
|
19715
|
+
/* @__PURE__ */ jsx238(Key2, { className: "h-5 w-5 text-muted-foreground" }),
|
|
19716
|
+
/* @__PURE__ */ jsx238(CardTitle, { className: "text-lg", children: client.name })
|
|
19699
19717
|
] }),
|
|
19700
19718
|
/* @__PURE__ */ jsxs148("div", { className: "flex items-center gap-2", children: [
|
|
19701
|
-
/* @__PURE__ */
|
|
19719
|
+
/* @__PURE__ */ jsx238(Badge, { variant: client.isActive ? "default" : "secondary", children: client.isActive ? "Active" : "Inactive" }),
|
|
19702
19720
|
(onEdit || onDelete) && /* @__PURE__ */ jsxs148(DropdownMenu, { children: [
|
|
19703
|
-
/* @__PURE__ */
|
|
19721
|
+
/* @__PURE__ */ jsx238(DropdownMenuTrigger, { onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx238(Button, { render: /* @__PURE__ */ jsx238("div", {}), nativeButton: false, variant: "ghost", size: "icon", className: "h-8 w-8", children: /* @__PURE__ */ jsx238(MoreVertical, { className: "h-4 w-4" }) }) }),
|
|
19704
19722
|
/* @__PURE__ */ jsxs148(DropdownMenuContent, { align: "end", children: [
|
|
19705
19723
|
onEdit && /* @__PURE__ */ jsxs148(
|
|
19706
19724
|
DropdownMenuItem,
|
|
@@ -19710,7 +19728,7 @@ function OAuthClientCard({ client, onClick, onEdit, onDelete }) {
|
|
|
19710
19728
|
onEdit();
|
|
19711
19729
|
},
|
|
19712
19730
|
children: [
|
|
19713
|
-
/* @__PURE__ */
|
|
19731
|
+
/* @__PURE__ */ jsx238(Pencil, { className: "h-4 w-4 mr-2" }),
|
|
19714
19732
|
"Edit"
|
|
19715
19733
|
]
|
|
19716
19734
|
}
|
|
@@ -19724,7 +19742,7 @@ function OAuthClientCard({ client, onClick, onEdit, onDelete }) {
|
|
|
19724
19742
|
},
|
|
19725
19743
|
className: "text-destructive",
|
|
19726
19744
|
children: [
|
|
19727
|
-
/* @__PURE__ */
|
|
19745
|
+
/* @__PURE__ */ jsx238(Trash24, { className: "h-4 w-4 mr-2" }),
|
|
19728
19746
|
"Delete"
|
|
19729
19747
|
]
|
|
19730
19748
|
}
|
|
@@ -19733,15 +19751,15 @@ function OAuthClientCard({ client, onClick, onEdit, onDelete }) {
|
|
|
19733
19751
|
] })
|
|
19734
19752
|
] })
|
|
19735
19753
|
] }),
|
|
19736
|
-
client.description && /* @__PURE__ */
|
|
19754
|
+
client.description && /* @__PURE__ */ jsx238(CardDescription, { className: "line-clamp-2", children: client.description })
|
|
19737
19755
|
] }),
|
|
19738
|
-
/* @__PURE__ */
|
|
19739
|
-
/* @__PURE__ */
|
|
19756
|
+
/* @__PURE__ */ jsx238(CardContent, { children: /* @__PURE__ */ jsxs148("div", { className: "flex flex-wrap gap-x-4 gap-y-1 text-sm text-muted-foreground", children: [
|
|
19757
|
+
/* @__PURE__ */ jsx238("span", { className: "font-mono", children: truncatedId }),
|
|
19740
19758
|
/* @__PURE__ */ jsxs148("span", { children: [
|
|
19741
19759
|
"Created ",
|
|
19742
19760
|
createdAgo
|
|
19743
19761
|
] }),
|
|
19744
|
-
/* @__PURE__ */
|
|
19762
|
+
/* @__PURE__ */ jsx238("span", { children: client.isConfidential ? "Confidential" : "Public" })
|
|
19745
19763
|
] }) })
|
|
19746
19764
|
]
|
|
19747
19765
|
}
|
|
@@ -19751,7 +19769,7 @@ __name(OAuthClientCard, "OAuthClientCard");
|
|
|
19751
19769
|
|
|
19752
19770
|
// src/features/oauth/components/OAuthClientList.tsx
|
|
19753
19771
|
import { Plus as Plus3, Key as Key3 } from "lucide-react";
|
|
19754
|
-
import { jsx as
|
|
19772
|
+
import { jsx as jsx239, jsxs as jsxs149 } from "react/jsx-runtime";
|
|
19755
19773
|
function OAuthClientList({
|
|
19756
19774
|
clients,
|
|
19757
19775
|
isLoading = false,
|
|
@@ -19766,33 +19784,33 @@ function OAuthClientList({
|
|
|
19766
19784
|
if (isLoading && clients.length === 0) {
|
|
19767
19785
|
return /* @__PURE__ */ jsxs149("div", { className: "space-y-4", children: [
|
|
19768
19786
|
/* @__PURE__ */ jsxs149("div", { className: "flex items-center justify-between", children: [
|
|
19769
|
-
/* @__PURE__ */
|
|
19770
|
-
/* @__PURE__ */
|
|
19787
|
+
/* @__PURE__ */ jsx239("h2", { className: "text-2xl font-bold", children: title }),
|
|
19788
|
+
/* @__PURE__ */ jsx239(Skeleton, { className: "h-10 w-32" })
|
|
19771
19789
|
] }),
|
|
19772
|
-
/* @__PURE__ */
|
|
19790
|
+
/* @__PURE__ */ jsx239("div", { className: "space-y-3", children: [1, 2, 3].map((i) => /* @__PURE__ */ jsx239(Skeleton, { className: "h-32 w-full" }, i)) })
|
|
19773
19791
|
] });
|
|
19774
19792
|
}
|
|
19775
19793
|
if (error) {
|
|
19776
19794
|
return /* @__PURE__ */ jsxs149("div", { className: "space-y-4", children: [
|
|
19777
|
-
/* @__PURE__ */
|
|
19778
|
-
/* @__PURE__ */
|
|
19795
|
+
/* @__PURE__ */ jsx239("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsx239("h2", { className: "text-2xl font-bold", children: title }) }),
|
|
19796
|
+
/* @__PURE__ */ jsx239("div", { className: "rounded-lg border border-destructive/50 bg-destructive/10 p-6 text-center", children: /* @__PURE__ */ jsx239("p", { className: "text-destructive", children: error.message }) })
|
|
19779
19797
|
] });
|
|
19780
19798
|
}
|
|
19781
19799
|
if (clients.length === 0) {
|
|
19782
19800
|
return /* @__PURE__ */ jsxs149("div", { className: "space-y-4", children: [
|
|
19783
19801
|
/* @__PURE__ */ jsxs149("div", { className: "flex items-center justify-between", children: [
|
|
19784
|
-
/* @__PURE__ */
|
|
19802
|
+
/* @__PURE__ */ jsx239("h2", { className: "text-2xl font-bold", children: title }),
|
|
19785
19803
|
onCreateClick && /* @__PURE__ */ jsxs149(Button, { onClick: onCreateClick, children: [
|
|
19786
|
-
/* @__PURE__ */
|
|
19804
|
+
/* @__PURE__ */ jsx239(Plus3, { className: "h-4 w-4 mr-2" }),
|
|
19787
19805
|
"New App"
|
|
19788
19806
|
] })
|
|
19789
19807
|
] }),
|
|
19790
19808
|
/* @__PURE__ */ jsxs149("div", { className: "rounded-lg border border-dashed p-12 text-center", children: [
|
|
19791
|
-
/* @__PURE__ */
|
|
19792
|
-
/* @__PURE__ */
|
|
19793
|
-
/* @__PURE__ */
|
|
19809
|
+
/* @__PURE__ */ jsx239(Key3, { className: "h-12 w-12 mx-auto text-muted-foreground mb-4" }),
|
|
19810
|
+
/* @__PURE__ */ jsx239("h3", { className: "text-lg font-medium mb-2", children: "No OAuth Applications" }),
|
|
19811
|
+
/* @__PURE__ */ jsx239("p", { className: "text-muted-foreground mb-4", children: emptyStateMessage }),
|
|
19794
19812
|
onCreateClick && /* @__PURE__ */ jsxs149(Button, { onClick: onCreateClick, children: [
|
|
19795
|
-
/* @__PURE__ */
|
|
19813
|
+
/* @__PURE__ */ jsx239(Plus3, { className: "h-4 w-4 mr-2" }),
|
|
19796
19814
|
"Create Application"
|
|
19797
19815
|
] })
|
|
19798
19816
|
] })
|
|
@@ -19800,13 +19818,13 @@ function OAuthClientList({
|
|
|
19800
19818
|
}
|
|
19801
19819
|
return /* @__PURE__ */ jsxs149("div", { className: "space-y-4", children: [
|
|
19802
19820
|
/* @__PURE__ */ jsxs149("div", { className: "flex items-center justify-between", children: [
|
|
19803
|
-
/* @__PURE__ */
|
|
19821
|
+
/* @__PURE__ */ jsx239("h2", { className: "text-2xl font-bold", children: title }),
|
|
19804
19822
|
onCreateClick && /* @__PURE__ */ jsxs149(Button, { onClick: onCreateClick, children: [
|
|
19805
|
-
/* @__PURE__ */
|
|
19823
|
+
/* @__PURE__ */ jsx239(Plus3, { className: "h-4 w-4 mr-2" }),
|
|
19806
19824
|
"New App"
|
|
19807
19825
|
] })
|
|
19808
19826
|
] }),
|
|
19809
|
-
/* @__PURE__ */
|
|
19827
|
+
/* @__PURE__ */ jsx239("div", { className: "space-y-3", children: clients.map((client) => /* @__PURE__ */ jsx239(
|
|
19810
19828
|
OAuthClientCard,
|
|
19811
19829
|
{
|
|
19812
19830
|
client,
|
|
@@ -19822,7 +19840,7 @@ __name(OAuthClientList, "OAuthClientList");
|
|
|
19822
19840
|
|
|
19823
19841
|
// src/features/oauth/components/OAuthClientForm.tsx
|
|
19824
19842
|
import { useState as useState90, useCallback as useCallback45 } from "react";
|
|
19825
|
-
import { jsx as
|
|
19843
|
+
import { jsx as jsx240, jsxs as jsxs150 } from "react/jsx-runtime";
|
|
19826
19844
|
function OAuthClientForm({ client, onSubmit, onCancel, isLoading = false }) {
|
|
19827
19845
|
const isEditMode = !!client;
|
|
19828
19846
|
const [formState, setFormState] = useState90({
|
|
@@ -19864,15 +19882,15 @@ function OAuthClientForm({ client, onSubmit, onCancel, isLoading = false }) {
|
|
|
19864
19882
|
},
|
|
19865
19883
|
[formState, validate, onSubmit]
|
|
19866
19884
|
);
|
|
19867
|
-
return /* @__PURE__ */
|
|
19885
|
+
return /* @__PURE__ */ jsx240(Card, { children: /* @__PURE__ */ jsxs150("form", { onSubmit: handleSubmit, children: [
|
|
19868
19886
|
/* @__PURE__ */ jsxs150(CardHeader, { children: [
|
|
19869
|
-
/* @__PURE__ */
|
|
19870
|
-
/* @__PURE__ */
|
|
19887
|
+
/* @__PURE__ */ jsx240(CardTitle, { children: isEditMode ? "Edit Application" : "Create OAuth Application" }),
|
|
19888
|
+
/* @__PURE__ */ jsx240(CardDescription, { children: isEditMode ? "Update your OAuth application settings." : "Register a new application to access the API." })
|
|
19871
19889
|
] }),
|
|
19872
19890
|
/* @__PURE__ */ jsxs150(CardContent, { className: "space-y-6", children: [
|
|
19873
19891
|
/* @__PURE__ */ jsxs150("div", { className: "space-y-2", children: [
|
|
19874
|
-
/* @__PURE__ */
|
|
19875
|
-
/* @__PURE__ */
|
|
19892
|
+
/* @__PURE__ */ jsx240(Label, { htmlFor: "name", children: "Application Name *" }),
|
|
19893
|
+
/* @__PURE__ */ jsx240(
|
|
19876
19894
|
Input,
|
|
19877
19895
|
{
|
|
19878
19896
|
id: "name",
|
|
@@ -19883,11 +19901,11 @@ function OAuthClientForm({ client, onSubmit, onCancel, isLoading = false }) {
|
|
|
19883
19901
|
className: errors.name ? "border-destructive" : ""
|
|
19884
19902
|
}
|
|
19885
19903
|
),
|
|
19886
|
-
errors.name && /* @__PURE__ */
|
|
19904
|
+
errors.name && /* @__PURE__ */ jsx240("p", { className: "text-sm text-destructive", children: errors.name })
|
|
19887
19905
|
] }),
|
|
19888
19906
|
/* @__PURE__ */ jsxs150("div", { className: "space-y-2", children: [
|
|
19889
|
-
/* @__PURE__ */
|
|
19890
|
-
/* @__PURE__ */
|
|
19907
|
+
/* @__PURE__ */ jsx240(Label, { htmlFor: "description", children: "Description" }),
|
|
19908
|
+
/* @__PURE__ */ jsx240(
|
|
19891
19909
|
Textarea,
|
|
19892
19910
|
{
|
|
19893
19911
|
id: "description",
|
|
@@ -19899,7 +19917,7 @@ function OAuthClientForm({ client, onSubmit, onCancel, isLoading = false }) {
|
|
|
19899
19917
|
}
|
|
19900
19918
|
)
|
|
19901
19919
|
] }),
|
|
19902
|
-
/* @__PURE__ */
|
|
19920
|
+
/* @__PURE__ */ jsx240(
|
|
19903
19921
|
OAuthRedirectUriInput,
|
|
19904
19922
|
{
|
|
19905
19923
|
value: formState.redirectUris,
|
|
@@ -19908,7 +19926,7 @@ function OAuthClientForm({ client, onSubmit, onCancel, isLoading = false }) {
|
|
|
19908
19926
|
disabled: isLoading
|
|
19909
19927
|
}
|
|
19910
19928
|
),
|
|
19911
|
-
/* @__PURE__ */
|
|
19929
|
+
/* @__PURE__ */ jsx240(
|
|
19912
19930
|
OAuthScopeSelector,
|
|
19913
19931
|
{
|
|
19914
19932
|
value: formState.allowedScopes,
|
|
@@ -19918,7 +19936,7 @@ function OAuthClientForm({ client, onSubmit, onCancel, isLoading = false }) {
|
|
|
19918
19936
|
}
|
|
19919
19937
|
),
|
|
19920
19938
|
/* @__PURE__ */ jsxs150("div", { className: "space-y-3", children: [
|
|
19921
|
-
/* @__PURE__ */
|
|
19939
|
+
/* @__PURE__ */ jsx240(Label, { children: "Client Type" }),
|
|
19922
19940
|
/* @__PURE__ */ jsxs150(
|
|
19923
19941
|
RadioGroup,
|
|
19924
19942
|
{
|
|
@@ -19927,28 +19945,28 @@ function OAuthClientForm({ client, onSubmit, onCancel, isLoading = false }) {
|
|
|
19927
19945
|
disabled: isLoading || isEditMode,
|
|
19928
19946
|
children: [
|
|
19929
19947
|
/* @__PURE__ */ jsxs150("div", { className: "flex items-start space-x-3 p-3 rounded-md border", children: [
|
|
19930
|
-
/* @__PURE__ */
|
|
19948
|
+
/* @__PURE__ */ jsx240(RadioGroupItem, { value: "confidential", id: "confidential", className: "mt-1" }),
|
|
19931
19949
|
/* @__PURE__ */ jsxs150("div", { children: [
|
|
19932
|
-
/* @__PURE__ */
|
|
19933
|
-
/* @__PURE__ */
|
|
19950
|
+
/* @__PURE__ */ jsx240(Label, { htmlFor: "confidential", className: "font-medium cursor-pointer", children: "Confidential" }),
|
|
19951
|
+
/* @__PURE__ */ jsx240("p", { className: "text-sm text-muted-foreground", children: "Server-side application that can securely store the client secret." })
|
|
19934
19952
|
] })
|
|
19935
19953
|
] }),
|
|
19936
19954
|
/* @__PURE__ */ jsxs150("div", { className: "flex items-start space-x-3 p-3 rounded-md border", children: [
|
|
19937
|
-
/* @__PURE__ */
|
|
19955
|
+
/* @__PURE__ */ jsx240(RadioGroupItem, { value: "public", id: "public", className: "mt-1" }),
|
|
19938
19956
|
/* @__PURE__ */ jsxs150("div", { children: [
|
|
19939
|
-
/* @__PURE__ */
|
|
19940
|
-
/* @__PURE__ */
|
|
19957
|
+
/* @__PURE__ */ jsx240(Label, { htmlFor: "public", className: "font-medium cursor-pointer", children: "Public" }),
|
|
19958
|
+
/* @__PURE__ */ jsx240("p", { className: "text-sm text-muted-foreground", children: "Mobile or desktop application. Requires PKCE for authorization." })
|
|
19941
19959
|
] })
|
|
19942
19960
|
] })
|
|
19943
19961
|
]
|
|
19944
19962
|
}
|
|
19945
19963
|
),
|
|
19946
|
-
isEditMode && /* @__PURE__ */
|
|
19964
|
+
isEditMode && /* @__PURE__ */ jsx240("p", { className: "text-sm text-muted-foreground", children: "Client type cannot be changed after creation." })
|
|
19947
19965
|
] })
|
|
19948
19966
|
] }),
|
|
19949
19967
|
/* @__PURE__ */ jsxs150(CardFooter, { className: "flex justify-end gap-3", children: [
|
|
19950
|
-
/* @__PURE__ */
|
|
19951
|
-
/* @__PURE__ */
|
|
19968
|
+
/* @__PURE__ */ jsx240(Button, { type: "button", variant: "outline", onClick: onCancel, disabled: isLoading, children: "Cancel" }),
|
|
19969
|
+
/* @__PURE__ */ jsx240(Button, { type: "submit", disabled: isLoading, children: isLoading ? "Saving..." : isEditMode ? "Save Changes" : "Create Application" })
|
|
19952
19970
|
] })
|
|
19953
19971
|
] }) });
|
|
19954
19972
|
}
|
|
@@ -19958,7 +19976,7 @@ __name(OAuthClientForm, "OAuthClientForm");
|
|
|
19958
19976
|
import { useState as useState91, useCallback as useCallback46 } from "react";
|
|
19959
19977
|
import { format as format2 } from "date-fns";
|
|
19960
19978
|
import { Copy as Copy4, Check as Check2, RefreshCw as RefreshCw3, Pencil as Pencil2, Trash2 as Trash25, ExternalLink } from "lucide-react";
|
|
19961
|
-
import { Fragment as Fragment52, jsx as
|
|
19979
|
+
import { Fragment as Fragment52, jsx as jsx241, jsxs as jsxs151 } from "react/jsx-runtime";
|
|
19962
19980
|
function OAuthClientDetail({
|
|
19963
19981
|
client,
|
|
19964
19982
|
isLoading = false,
|
|
@@ -20003,38 +20021,38 @@ function OAuthClientDetail({
|
|
|
20003
20021
|
const createdDate = client.createdAt ? format2(new Date(client.createdAt), "MMMM d, yyyy") : "Unknown";
|
|
20004
20022
|
return /* @__PURE__ */ jsxs151(Fragment52, { children: [
|
|
20005
20023
|
/* @__PURE__ */ jsxs151(Card, { children: [
|
|
20006
|
-
/* @__PURE__ */
|
|
20024
|
+
/* @__PURE__ */ jsx241(CardHeader, { children: /* @__PURE__ */ jsxs151("div", { className: "flex items-start justify-between", children: [
|
|
20007
20025
|
/* @__PURE__ */ jsxs151("div", { children: [
|
|
20008
|
-
/* @__PURE__ */
|
|
20009
|
-
client.description && /* @__PURE__ */
|
|
20026
|
+
/* @__PURE__ */ jsx241(CardTitle, { className: "text-2xl", children: client.name }),
|
|
20027
|
+
client.description && /* @__PURE__ */ jsx241(CardDescription, { className: "mt-1", children: client.description })
|
|
20010
20028
|
] }),
|
|
20011
20029
|
/* @__PURE__ */ jsxs151("div", { className: "flex items-center gap-2", children: [
|
|
20012
|
-
/* @__PURE__ */
|
|
20013
|
-
/* @__PURE__ */
|
|
20030
|
+
/* @__PURE__ */ jsx241(Badge, { variant: client.isActive ? "default" : "secondary", children: client.isActive ? "Active" : "Inactive" }),
|
|
20031
|
+
/* @__PURE__ */ jsx241(Badge, { variant: "outline", children: client.isConfidential ? "Confidential" : "Public" })
|
|
20014
20032
|
] })
|
|
20015
20033
|
] }) }),
|
|
20016
20034
|
/* @__PURE__ */ jsxs151(CardContent, { className: "space-y-6", children: [
|
|
20017
20035
|
/* @__PURE__ */ jsxs151("div", { className: "space-y-2", children: [
|
|
20018
|
-
/* @__PURE__ */
|
|
20036
|
+
/* @__PURE__ */ jsx241(Label, { children: "Client ID" }),
|
|
20019
20037
|
/* @__PURE__ */ jsxs151("div", { className: "flex gap-2", children: [
|
|
20020
|
-
/* @__PURE__ */
|
|
20021
|
-
/* @__PURE__ */
|
|
20038
|
+
/* @__PURE__ */ jsx241(Input, { value: client.clientId, readOnly: true, className: "font-mono" }),
|
|
20039
|
+
/* @__PURE__ */ jsx241(
|
|
20022
20040
|
Button,
|
|
20023
20041
|
{
|
|
20024
20042
|
variant: "outline",
|
|
20025
20043
|
size: "icon",
|
|
20026
20044
|
onClick: () => copyToClipboard2(client.clientId, "clientId"),
|
|
20027
20045
|
title: "Copy Client ID",
|
|
20028
|
-
children: copiedField === "clientId" ? /* @__PURE__ */
|
|
20046
|
+
children: copiedField === "clientId" ? /* @__PURE__ */ jsx241(Check2, { className: "h-4 w-4 text-green-600" }) : /* @__PURE__ */ jsx241(Copy4, { className: "h-4 w-4" })
|
|
20029
20047
|
}
|
|
20030
20048
|
)
|
|
20031
20049
|
] })
|
|
20032
20050
|
] }),
|
|
20033
20051
|
/* @__PURE__ */ jsxs151("div", { className: "space-y-2", children: [
|
|
20034
|
-
/* @__PURE__ */
|
|
20052
|
+
/* @__PURE__ */ jsx241(Label, { children: "Client Secret" }),
|
|
20035
20053
|
/* @__PURE__ */ jsxs151("div", { className: "flex gap-2", children: [
|
|
20036
|
-
/* @__PURE__ */
|
|
20037
|
-
onRegenerateSecret && /* @__PURE__ */
|
|
20054
|
+
/* @__PURE__ */ jsx241(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" }),
|
|
20055
|
+
onRegenerateSecret && /* @__PURE__ */ jsx241(
|
|
20038
20056
|
Button,
|
|
20039
20057
|
{
|
|
20040
20058
|
variant: "outline",
|
|
@@ -20042,48 +20060,48 @@ function OAuthClientDetail({
|
|
|
20042
20060
|
onClick: () => setShowRegenerateConfirm(true),
|
|
20043
20061
|
title: "Regenerate Secret",
|
|
20044
20062
|
disabled: isLoading,
|
|
20045
|
-
children: /* @__PURE__ */
|
|
20063
|
+
children: /* @__PURE__ */ jsx241(RefreshCw3, { className: "h-4 w-4" })
|
|
20046
20064
|
}
|
|
20047
20065
|
)
|
|
20048
20066
|
] }),
|
|
20049
|
-
/* @__PURE__ */
|
|
20067
|
+
/* @__PURE__ */ jsx241("p", { className: "text-xs text-muted-foreground", children: "Regenerating will invalidate the current secret and all existing tokens." })
|
|
20050
20068
|
] }),
|
|
20051
|
-
/* @__PURE__ */
|
|
20069
|
+
/* @__PURE__ */ jsx241(Separator, {}),
|
|
20052
20070
|
/* @__PURE__ */ jsxs151("div", { className: "space-y-2", children: [
|
|
20053
|
-
/* @__PURE__ */
|
|
20054
|
-
/* @__PURE__ */
|
|
20055
|
-
/* @__PURE__ */
|
|
20071
|
+
/* @__PURE__ */ jsx241(Label, { children: "Redirect URIs" }),
|
|
20072
|
+
/* @__PURE__ */ jsx241("ul", { className: "space-y-1", children: client.redirectUris.map((uri, index) => /* @__PURE__ */ jsxs151("li", { className: "flex items-center gap-2 text-sm font-mono", children: [
|
|
20073
|
+
/* @__PURE__ */ jsx241(ExternalLink, { className: "h-3 w-3 text-muted-foreground" }),
|
|
20056
20074
|
uri
|
|
20057
20075
|
] }, index)) })
|
|
20058
20076
|
] }),
|
|
20059
20077
|
/* @__PURE__ */ jsxs151("div", { className: "space-y-2", children: [
|
|
20060
|
-
/* @__PURE__ */
|
|
20061
|
-
/* @__PURE__ */
|
|
20078
|
+
/* @__PURE__ */ jsx241(Label, { children: "Allowed Scopes" }),
|
|
20079
|
+
/* @__PURE__ */ jsx241("div", { className: "flex flex-wrap gap-2", children: client.allowedScopes.map((scope) => /* @__PURE__ */ jsx241(Badge, { variant: "secondary", children: OAUTH_SCOPE_DISPLAY[scope]?.name || scope }, scope)) })
|
|
20062
20080
|
] }),
|
|
20063
20081
|
/* @__PURE__ */ jsxs151("div", { className: "space-y-2", children: [
|
|
20064
|
-
/* @__PURE__ */
|
|
20065
|
-
/* @__PURE__ */
|
|
20082
|
+
/* @__PURE__ */ jsx241(Label, { children: "Grant Types" }),
|
|
20083
|
+
/* @__PURE__ */ jsx241("div", { className: "flex flex-wrap gap-2", children: client.allowedGrantTypes.map((grant) => /* @__PURE__ */ jsx241(Badge, { variant: "outline", children: grant.replace(/_/g, " ") }, grant)) })
|
|
20066
20084
|
] }),
|
|
20067
|
-
/* @__PURE__ */
|
|
20068
|
-
/* @__PURE__ */
|
|
20085
|
+
/* @__PURE__ */ jsx241(Separator, {}),
|
|
20086
|
+
/* @__PURE__ */ jsx241("div", { className: "flex flex-wrap gap-x-6 gap-y-2 text-sm text-muted-foreground", children: /* @__PURE__ */ jsxs151("span", { children: [
|
|
20069
20087
|
"Created: ",
|
|
20070
20088
|
createdDate
|
|
20071
20089
|
] }) }),
|
|
20072
20090
|
/* @__PURE__ */ jsxs151("div", { className: "flex gap-3 pt-4", children: [
|
|
20073
20091
|
onEdit && /* @__PURE__ */ jsxs151(Button, { variant: "outline", onClick: onEdit, disabled: isLoading, children: [
|
|
20074
|
-
/* @__PURE__ */
|
|
20092
|
+
/* @__PURE__ */ jsx241(Pencil2, { className: "h-4 w-4 mr-2" }),
|
|
20075
20093
|
"Edit"
|
|
20076
20094
|
] }),
|
|
20077
20095
|
onDelete && /* @__PURE__ */ jsxs151(Button, { variant: "destructive", onClick: () => setShowDeleteConfirm(true), disabled: isLoading, children: [
|
|
20078
|
-
/* @__PURE__ */
|
|
20096
|
+
/* @__PURE__ */ jsx241(Trash25, { className: "h-4 w-4 mr-2" }),
|
|
20079
20097
|
"Delete"
|
|
20080
20098
|
] })
|
|
20081
20099
|
] })
|
|
20082
20100
|
] })
|
|
20083
20101
|
] }),
|
|
20084
|
-
/* @__PURE__ */
|
|
20102
|
+
/* @__PURE__ */ jsx241(AlertDialog, { open: showDeleteConfirm, onOpenChange: setShowDeleteConfirm, children: /* @__PURE__ */ jsxs151(AlertDialogContent, { children: [
|
|
20085
20103
|
/* @__PURE__ */ jsxs151(AlertDialogHeader, { children: [
|
|
20086
|
-
/* @__PURE__ */
|
|
20104
|
+
/* @__PURE__ */ jsx241(AlertDialogTitle, { children: "Delete OAuth Application?" }),
|
|
20087
20105
|
/* @__PURE__ */ jsxs151(AlertDialogDescription, { children: [
|
|
20088
20106
|
'This will permanently delete "',
|
|
20089
20107
|
client.name,
|
|
@@ -20091,8 +20109,8 @@ function OAuthClientDetail({
|
|
|
20091
20109
|
] })
|
|
20092
20110
|
] }),
|
|
20093
20111
|
/* @__PURE__ */ jsxs151(AlertDialogFooter, { children: [
|
|
20094
|
-
/* @__PURE__ */
|
|
20095
|
-
/* @__PURE__ */
|
|
20112
|
+
/* @__PURE__ */ jsx241(AlertDialogCancel, { disabled: isDeleting, children: "Cancel" }),
|
|
20113
|
+
/* @__PURE__ */ jsx241(
|
|
20096
20114
|
AlertDialogAction,
|
|
20097
20115
|
{
|
|
20098
20116
|
onClick: handleDelete,
|
|
@@ -20103,14 +20121,14 @@ function OAuthClientDetail({
|
|
|
20103
20121
|
)
|
|
20104
20122
|
] })
|
|
20105
20123
|
] }) }),
|
|
20106
|
-
/* @__PURE__ */
|
|
20124
|
+
/* @__PURE__ */ jsx241(AlertDialog, { open: showRegenerateConfirm, onOpenChange: setShowRegenerateConfirm, children: /* @__PURE__ */ jsxs151(AlertDialogContent, { children: [
|
|
20107
20125
|
/* @__PURE__ */ jsxs151(AlertDialogHeader, { children: [
|
|
20108
|
-
/* @__PURE__ */
|
|
20109
|
-
/* @__PURE__ */
|
|
20126
|
+
/* @__PURE__ */ jsx241(AlertDialogTitle, { children: "Regenerate Client Secret?" }),
|
|
20127
|
+
/* @__PURE__ */ jsx241(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." })
|
|
20110
20128
|
] }),
|
|
20111
20129
|
/* @__PURE__ */ jsxs151(AlertDialogFooter, { children: [
|
|
20112
|
-
/* @__PURE__ */
|
|
20113
|
-
/* @__PURE__ */
|
|
20130
|
+
/* @__PURE__ */ jsx241(AlertDialogCancel, { disabled: isRegenerating, children: "Cancel" }),
|
|
20131
|
+
/* @__PURE__ */ jsx241(AlertDialogAction, { onClick: handleRegenerateSecret, disabled: isRegenerating, children: isRegenerating ? "Regenerating..." : "Regenerate" })
|
|
20114
20132
|
] })
|
|
20115
20133
|
] }) })
|
|
20116
20134
|
] });
|
|
@@ -20119,17 +20137,17 @@ __name(OAuthClientDetail, "OAuthClientDetail");
|
|
|
20119
20137
|
|
|
20120
20138
|
// src/features/oauth/components/consent/OAuthConsentHeader.tsx
|
|
20121
20139
|
import { Shield } from "lucide-react";
|
|
20122
|
-
import { jsx as
|
|
20140
|
+
import { jsx as jsx242, jsxs as jsxs152 } from "react/jsx-runtime";
|
|
20123
20141
|
function OAuthConsentHeader({ client, logoUrl, appName = "Only35" }) {
|
|
20124
20142
|
return /* @__PURE__ */ jsxs152("div", { className: "text-center space-y-4", children: [
|
|
20125
|
-
/* @__PURE__ */
|
|
20143
|
+
/* @__PURE__ */ jsx242("div", { className: "flex justify-center", children: logoUrl ? /* @__PURE__ */ jsx242("img", { src: logoUrl, alt: appName, className: "h-12 w-auto" }) : /* @__PURE__ */ jsx242("div", { className: "h-12 w-12 rounded-full bg-primary flex items-center justify-center", children: /* @__PURE__ */ jsx242(Shield, { className: "h-6 w-6 text-primary-foreground" }) }) }),
|
|
20126
20144
|
/* @__PURE__ */ jsxs152("div", { className: "space-y-2", children: [
|
|
20127
20145
|
/* @__PURE__ */ jsxs152("h1", { className: "text-2xl font-bold", children: [
|
|
20128
20146
|
"Authorize ",
|
|
20129
20147
|
client.name
|
|
20130
20148
|
] }),
|
|
20131
20149
|
/* @__PURE__ */ jsxs152("p", { className: "text-muted-foreground", children: [
|
|
20132
|
-
/* @__PURE__ */
|
|
20150
|
+
/* @__PURE__ */ jsx242("span", { className: "font-medium text-foreground", children: client.name }),
|
|
20133
20151
|
" wants to access your ",
|
|
20134
20152
|
appName,
|
|
20135
20153
|
" account"
|
|
@@ -20141,7 +20159,7 @@ __name(OAuthConsentHeader, "OAuthConsentHeader");
|
|
|
20141
20159
|
|
|
20142
20160
|
// src/features/oauth/components/consent/OAuthScopeList.tsx
|
|
20143
20161
|
import { Eye, Pencil as Pencil3, Image as Image15, Upload, Film, FolderPlus, User, Shield as Shield2 } from "lucide-react";
|
|
20144
|
-
import { jsx as
|
|
20162
|
+
import { jsx as jsx243, jsxs as jsxs153 } from "react/jsx-runtime";
|
|
20145
20163
|
var SCOPE_ICONS = {
|
|
20146
20164
|
eye: Eye,
|
|
20147
20165
|
pencil: Pencil3,
|
|
@@ -20157,14 +20175,14 @@ function OAuthScopeList({ scopes }) {
|
|
|
20157
20175
|
return null;
|
|
20158
20176
|
}
|
|
20159
20177
|
return /* @__PURE__ */ jsxs153("div", { className: "space-y-3", children: [
|
|
20160
|
-
/* @__PURE__ */
|
|
20161
|
-
/* @__PURE__ */
|
|
20178
|
+
/* @__PURE__ */ jsx243("h2", { className: "text-sm font-medium text-muted-foreground uppercase tracking-wide", children: "This will allow the application to:" }),
|
|
20179
|
+
/* @__PURE__ */ jsx243("ul", { className: "space-y-3", children: scopes.map((scope) => {
|
|
20162
20180
|
const IconComponent = scope.icon ? SCOPE_ICONS[scope.icon] : Eye;
|
|
20163
20181
|
return /* @__PURE__ */ jsxs153("li", { className: "flex items-start gap-3 p-3 rounded-lg bg-muted/50", children: [
|
|
20164
|
-
/* @__PURE__ */
|
|
20182
|
+
/* @__PURE__ */ jsx243("div", { className: "flex-shrink-0 mt-0.5", children: /* @__PURE__ */ jsx243("div", { className: "h-8 w-8 rounded-full bg-primary/10 flex items-center justify-center", children: IconComponent && /* @__PURE__ */ jsx243(IconComponent, { className: "h-4 w-4 text-primary" }) }) }),
|
|
20165
20183
|
/* @__PURE__ */ jsxs153("div", { className: "flex-1", children: [
|
|
20166
|
-
/* @__PURE__ */
|
|
20167
|
-
/* @__PURE__ */
|
|
20184
|
+
/* @__PURE__ */ jsx243("p", { className: "font-medium", children: scope.name }),
|
|
20185
|
+
/* @__PURE__ */ jsx243("p", { className: "text-sm text-muted-foreground", children: scope.description })
|
|
20168
20186
|
] })
|
|
20169
20187
|
] }, scope.scope);
|
|
20170
20188
|
}) })
|
|
@@ -20173,18 +20191,18 @@ function OAuthScopeList({ scopes }) {
|
|
|
20173
20191
|
__name(OAuthScopeList, "OAuthScopeList");
|
|
20174
20192
|
|
|
20175
20193
|
// src/features/oauth/components/consent/OAuthConsentActions.tsx
|
|
20176
|
-
import { jsx as
|
|
20194
|
+
import { jsx as jsx244, jsxs as jsxs154 } from "react/jsx-runtime";
|
|
20177
20195
|
function OAuthConsentActions({ onApprove, onDeny, isLoading = false }) {
|
|
20178
20196
|
return /* @__PURE__ */ jsxs154("div", { className: "flex flex-col sm:flex-row gap-3", children: [
|
|
20179
|
-
/* @__PURE__ */
|
|
20180
|
-
/* @__PURE__ */
|
|
20197
|
+
/* @__PURE__ */ jsx244(Button, { variant: "outline", onClick: onDeny, disabled: isLoading, className: "flex-1", children: "Deny" }),
|
|
20198
|
+
/* @__PURE__ */ jsx244(Button, { onClick: onApprove, disabled: isLoading, className: "flex-1", children: isLoading ? "Authorizing..." : "Authorize" })
|
|
20181
20199
|
] });
|
|
20182
20200
|
}
|
|
20183
20201
|
__name(OAuthConsentActions, "OAuthConsentActions");
|
|
20184
20202
|
|
|
20185
20203
|
// src/features/oauth/components/consent/OAuthConsentScreen.tsx
|
|
20186
20204
|
import { ExternalLink as ExternalLink2, AlertTriangle as AlertTriangle2, Loader2 as Loader26 } from "lucide-react";
|
|
20187
|
-
import { jsx as
|
|
20205
|
+
import { jsx as jsx245, jsxs as jsxs155 } from "react/jsx-runtime";
|
|
20188
20206
|
function OAuthConsentScreen({
|
|
20189
20207
|
params,
|
|
20190
20208
|
logoUrl,
|
|
@@ -20194,41 +20212,41 @@ function OAuthConsentScreen({
|
|
|
20194
20212
|
}) {
|
|
20195
20213
|
const { clientInfo, isLoading, error, approve, deny, isSubmitting } = useOAuthConsent(params);
|
|
20196
20214
|
if (isLoading) {
|
|
20197
|
-
return /* @__PURE__ */
|
|
20198
|
-
/* @__PURE__ */
|
|
20199
|
-
/* @__PURE__ */
|
|
20215
|
+
return /* @__PURE__ */ jsx245("div", { className: "min-h-screen flex items-center justify-center p-4", children: /* @__PURE__ */ jsx245(Card, { className: "w-full max-w-md", children: /* @__PURE__ */ jsxs155(CardContent, { className: "flex flex-col items-center justify-center py-12", children: [
|
|
20216
|
+
/* @__PURE__ */ jsx245(Loader26, { className: "h-8 w-8 animate-spin text-muted-foreground" }),
|
|
20217
|
+
/* @__PURE__ */ jsx245("p", { className: "mt-4 text-muted-foreground", children: "Loading authorization request..." })
|
|
20200
20218
|
] }) }) });
|
|
20201
20219
|
}
|
|
20202
20220
|
if (error || !clientInfo) {
|
|
20203
|
-
return /* @__PURE__ */
|
|
20204
|
-
/* @__PURE__ */
|
|
20205
|
-
/* @__PURE__ */
|
|
20221
|
+
return /* @__PURE__ */ jsx245("div", { className: "min-h-screen flex items-center justify-center p-4", children: /* @__PURE__ */ jsx245(Card, { className: "w-full max-w-md", children: /* @__PURE__ */ jsx245(CardContent, { className: "py-8", children: /* @__PURE__ */ jsxs155(Alert, { variant: "destructive", children: [
|
|
20222
|
+
/* @__PURE__ */ jsx245(AlertTriangle2, { className: "h-4 w-4" }),
|
|
20223
|
+
/* @__PURE__ */ jsx245(AlertDescription, { children: error?.message || "Invalid authorization request. Please try again." })
|
|
20206
20224
|
] }) }) }) });
|
|
20207
20225
|
}
|
|
20208
20226
|
const { client, scopes } = clientInfo;
|
|
20209
|
-
return /* @__PURE__ */
|
|
20227
|
+
return /* @__PURE__ */ jsx245("div", { className: "min-h-screen flex items-center justify-center p-4 bg-muted/30", children: /* @__PURE__ */ jsxs155(Card, { className: "w-full max-w-md", children: [
|
|
20210
20228
|
/* @__PURE__ */ jsxs155(CardContent, { className: "pt-6 space-y-6", children: [
|
|
20211
|
-
/* @__PURE__ */
|
|
20212
|
-
/* @__PURE__ */
|
|
20213
|
-
/* @__PURE__ */
|
|
20214
|
-
/* @__PURE__ */
|
|
20229
|
+
/* @__PURE__ */ jsx245(OAuthConsentHeader, { client, logoUrl, appName }),
|
|
20230
|
+
/* @__PURE__ */ jsx245(Separator, {}),
|
|
20231
|
+
/* @__PURE__ */ jsx245(OAuthScopeList, { scopes }),
|
|
20232
|
+
/* @__PURE__ */ jsx245(Separator, {}),
|
|
20215
20233
|
/* @__PURE__ */ jsxs155("div", { className: "flex items-start gap-2 text-sm text-muted-foreground", children: [
|
|
20216
|
-
/* @__PURE__ */
|
|
20234
|
+
/* @__PURE__ */ jsx245(ExternalLink2, { className: "h-4 w-4 mt-0.5 flex-shrink-0" }),
|
|
20217
20235
|
/* @__PURE__ */ jsxs155("div", { children: [
|
|
20218
|
-
/* @__PURE__ */
|
|
20219
|
-
/* @__PURE__ */
|
|
20236
|
+
/* @__PURE__ */ jsx245("span", { children: "Authorizing will redirect you to:" }),
|
|
20237
|
+
/* @__PURE__ */ jsx245("p", { className: "font-mono text-xs mt-1 break-all", children: params.redirectUri })
|
|
20220
20238
|
] })
|
|
20221
20239
|
] }),
|
|
20222
|
-
/* @__PURE__ */
|
|
20240
|
+
/* @__PURE__ */ jsx245(OAuthConsentActions, { onApprove: approve, onDeny: deny, isLoading: isSubmitting })
|
|
20223
20241
|
] }),
|
|
20224
|
-
/* @__PURE__ */
|
|
20242
|
+
/* @__PURE__ */ jsx245(CardFooter, { className: "justify-center", children: /* @__PURE__ */ jsxs155("p", { className: "text-xs text-center text-muted-foreground", children: [
|
|
20225
20243
|
"By authorizing, you agree to the app's",
|
|
20226
20244
|
" ",
|
|
20227
|
-
/* @__PURE__ */
|
|
20245
|
+
/* @__PURE__ */ jsx245("a", { href: termsUrl, className: "underline hover:text-foreground", target: "_blank", rel: "noopener", children: "Terms of Service" }),
|
|
20228
20246
|
" ",
|
|
20229
20247
|
"and",
|
|
20230
20248
|
" ",
|
|
20231
|
-
/* @__PURE__ */
|
|
20249
|
+
/* @__PURE__ */ jsx245("a", { href: privacyUrl, className: "underline hover:text-foreground", target: "_blank", rel: "noopener", children: "Privacy Policy" }),
|
|
20232
20250
|
"."
|
|
20233
20251
|
] }) })
|
|
20234
20252
|
] }) });
|
|
@@ -20245,7 +20263,7 @@ import { v4 as v411 } from "uuid";
|
|
|
20245
20263
|
import { z as z10 } from "zod";
|
|
20246
20264
|
|
|
20247
20265
|
// src/features/waitlist/components/forms/WaitlistQuestionnaireRenderer.tsx
|
|
20248
|
-
import { jsx as
|
|
20266
|
+
import { jsx as jsx246, jsxs as jsxs156 } from "react/jsx-runtime";
|
|
20249
20267
|
function WaitlistQuestionnaireRenderer({
|
|
20250
20268
|
form,
|
|
20251
20269
|
fields,
|
|
@@ -20254,11 +20272,11 @@ function WaitlistQuestionnaireRenderer({
|
|
|
20254
20272
|
if (!fields || fields.length === 0) {
|
|
20255
20273
|
return null;
|
|
20256
20274
|
}
|
|
20257
|
-
return /* @__PURE__ */
|
|
20275
|
+
return /* @__PURE__ */ jsx246("div", { className: "space-y-4", children: fields.map((field) => {
|
|
20258
20276
|
const fieldId = `${fieldPrefix}.${field.id}`;
|
|
20259
20277
|
switch (field.type) {
|
|
20260
20278
|
case "text":
|
|
20261
|
-
return /* @__PURE__ */
|
|
20279
|
+
return /* @__PURE__ */ jsx246(
|
|
20262
20280
|
FormInput,
|
|
20263
20281
|
{
|
|
20264
20282
|
form,
|
|
@@ -20270,7 +20288,7 @@ function WaitlistQuestionnaireRenderer({
|
|
|
20270
20288
|
field.id
|
|
20271
20289
|
);
|
|
20272
20290
|
case "textarea":
|
|
20273
|
-
return /* @__PURE__ */
|
|
20291
|
+
return /* @__PURE__ */ jsx246(
|
|
20274
20292
|
FormTextarea,
|
|
20275
20293
|
{
|
|
20276
20294
|
form,
|
|
@@ -20285,7 +20303,7 @@ function WaitlistQuestionnaireRenderer({
|
|
|
20285
20303
|
if (!field.options || field.options.length === 0) {
|
|
20286
20304
|
return null;
|
|
20287
20305
|
}
|
|
20288
|
-
return /* @__PURE__ */
|
|
20306
|
+
return /* @__PURE__ */ jsx246(
|
|
20289
20307
|
FormSelect,
|
|
20290
20308
|
{
|
|
20291
20309
|
form,
|
|
@@ -20300,7 +20318,7 @@ function WaitlistQuestionnaireRenderer({
|
|
|
20300
20318
|
);
|
|
20301
20319
|
case "checkbox":
|
|
20302
20320
|
if (!field.options || field.options.length === 0) {
|
|
20303
|
-
return /* @__PURE__ */
|
|
20321
|
+
return /* @__PURE__ */ jsx246(
|
|
20304
20322
|
FormCheckbox,
|
|
20305
20323
|
{
|
|
20306
20324
|
form,
|
|
@@ -20315,10 +20333,10 @@ function WaitlistQuestionnaireRenderer({
|
|
|
20315
20333
|
return /* @__PURE__ */ jsxs156("div", { className: "space-y-2", children: [
|
|
20316
20334
|
/* @__PURE__ */ jsxs156("span", { className: "text-sm font-medium", children: [
|
|
20317
20335
|
field.label,
|
|
20318
|
-
field.required && /* @__PURE__ */
|
|
20336
|
+
field.required && /* @__PURE__ */ jsx246("span", { className: "text-destructive ml-1", children: "*" })
|
|
20319
20337
|
] }),
|
|
20320
|
-
field.description && /* @__PURE__ */
|
|
20321
|
-
/* @__PURE__ */
|
|
20338
|
+
field.description && /* @__PURE__ */ jsx246("p", { className: "text-muted-foreground text-xs", children: field.description }),
|
|
20339
|
+
/* @__PURE__ */ jsx246("div", { className: "space-y-2", children: field.options.map((option) => /* @__PURE__ */ jsx246(
|
|
20322
20340
|
FormCheckbox,
|
|
20323
20341
|
{
|
|
20324
20342
|
form,
|
|
@@ -20337,7 +20355,7 @@ function WaitlistQuestionnaireRenderer({
|
|
|
20337
20355
|
__name(WaitlistQuestionnaireRenderer, "WaitlistQuestionnaireRenderer");
|
|
20338
20356
|
|
|
20339
20357
|
// src/features/waitlist/components/forms/WaitlistForm.tsx
|
|
20340
|
-
import { Fragment as Fragment53, jsx as
|
|
20358
|
+
import { Fragment as Fragment53, jsx as jsx247, jsxs as jsxs157 } from "react/jsx-runtime";
|
|
20341
20359
|
function WaitlistForm({ onSuccess }) {
|
|
20342
20360
|
const t = useTranslations104();
|
|
20343
20361
|
const [isSubmitting, setIsSubmitting] = useState92(false);
|
|
@@ -20427,19 +20445,19 @@ function WaitlistForm({ onSuccess }) {
|
|
|
20427
20445
|
}, "onSubmit");
|
|
20428
20446
|
if (isSuccess) {
|
|
20429
20447
|
return /* @__PURE__ */ jsxs157("div", { className: "space-y-6 text-center", children: [
|
|
20430
|
-
/* @__PURE__ */
|
|
20448
|
+
/* @__PURE__ */ jsx247("div", { className: "mx-auto flex h-16 w-16 items-center justify-center rounded-full bg-green-100", children: /* @__PURE__ */ jsx247(CheckCircle, { className: "h-8 w-8 text-green-600" }) }),
|
|
20431
20449
|
/* @__PURE__ */ jsxs157("div", { className: "space-y-2", children: [
|
|
20432
|
-
/* @__PURE__ */
|
|
20433
|
-
/* @__PURE__ */
|
|
20450
|
+
/* @__PURE__ */ jsx247("h3", { className: "text-xl font-semibold", children: t("waitlist.success.title") }),
|
|
20451
|
+
/* @__PURE__ */ jsx247("p", { className: "text-muted-foreground", children: t("waitlist.success.description") })
|
|
20434
20452
|
] }),
|
|
20435
20453
|
/* @__PURE__ */ jsxs157("div", { className: "flex items-center justify-center gap-2 text-muted-foreground text-sm", children: [
|
|
20436
|
-
/* @__PURE__ */
|
|
20437
|
-
/* @__PURE__ */
|
|
20454
|
+
/* @__PURE__ */ jsx247(Mail2, { className: "h-4 w-4" }),
|
|
20455
|
+
/* @__PURE__ */ jsx247("span", { children: t("waitlist.success.hint") })
|
|
20438
20456
|
] })
|
|
20439
20457
|
] });
|
|
20440
20458
|
}
|
|
20441
|
-
return /* @__PURE__ */
|
|
20442
|
-
/* @__PURE__ */
|
|
20459
|
+
return /* @__PURE__ */ jsx247(Form, { ...form, children: /* @__PURE__ */ jsxs157("form", { onSubmit: form.handleSubmit(onSubmit), className: "space-y-4", children: [
|
|
20460
|
+
/* @__PURE__ */ jsx247(
|
|
20443
20461
|
FormInput,
|
|
20444
20462
|
{
|
|
20445
20463
|
isRequired: true,
|
|
@@ -20449,23 +20467,23 @@ function WaitlistForm({ onSuccess }) {
|
|
|
20449
20467
|
placeholder: t("common.fields.email.placeholder")
|
|
20450
20468
|
}
|
|
20451
20469
|
),
|
|
20452
|
-
questionnaireFields.length > 0 && /* @__PURE__ */
|
|
20470
|
+
questionnaireFields.length > 0 && /* @__PURE__ */ jsx247(WaitlistQuestionnaireRenderer, { form, fields: questionnaireFields }),
|
|
20453
20471
|
/* @__PURE__ */ jsxs157("div", { className: "space-y-4 py-4", children: [
|
|
20454
|
-
/* @__PURE__ */
|
|
20472
|
+
/* @__PURE__ */ jsx247(
|
|
20455
20473
|
GdprConsentCheckbox,
|
|
20456
20474
|
{
|
|
20457
20475
|
form,
|
|
20458
20476
|
id: "gdprConsent",
|
|
20459
20477
|
label: /* @__PURE__ */ jsxs157(Fragment53, { children: [
|
|
20460
20478
|
t("auth.gdpr.terms_prefix"),
|
|
20461
|
-
/* @__PURE__ */
|
|
20479
|
+
/* @__PURE__ */ jsx247(Link, { href: "/terms", target: "_blank", rel: "noopener", className: "underline", children: t("auth.gdpr.terms_of_service") }),
|
|
20462
20480
|
t("auth.gdpr.and"),
|
|
20463
|
-
/* @__PURE__ */
|
|
20481
|
+
/* @__PURE__ */ jsx247(Link, { href: "/privacy", target: "_blank", rel: "noopener", className: "underline", children: t("auth.gdpr.privacy_policy") })
|
|
20464
20482
|
] }),
|
|
20465
20483
|
required: true
|
|
20466
20484
|
}
|
|
20467
20485
|
),
|
|
20468
|
-
/* @__PURE__ */
|
|
20486
|
+
/* @__PURE__ */ jsx247(
|
|
20469
20487
|
GdprConsentCheckbox,
|
|
20470
20488
|
{
|
|
20471
20489
|
form,
|
|
@@ -20475,29 +20493,29 @@ function WaitlistForm({ onSuccess }) {
|
|
|
20475
20493
|
}
|
|
20476
20494
|
)
|
|
20477
20495
|
] }),
|
|
20478
|
-
/* @__PURE__ */
|
|
20496
|
+
/* @__PURE__ */ jsx247(Button, { type: "submit", className: "w-full", disabled: isSubmitting, children: isSubmitting ? t("common.actions.submitting") : t("waitlist.buttons.join") })
|
|
20479
20497
|
] }) });
|
|
20480
20498
|
}
|
|
20481
20499
|
__name(WaitlistForm, "WaitlistForm");
|
|
20482
20500
|
|
|
20483
20501
|
// src/features/waitlist/components/sections/WaitlistHeroSection.tsx
|
|
20484
20502
|
import { CheckCircle as CheckCircle2 } from "lucide-react";
|
|
20485
|
-
import { jsx as
|
|
20503
|
+
import { jsx as jsx248, jsxs as jsxs158 } from "react/jsx-runtime";
|
|
20486
20504
|
function WaitlistHeroSection() {
|
|
20487
20505
|
const config = getWaitlistConfig();
|
|
20488
|
-
return /* @__PURE__ */
|
|
20506
|
+
return /* @__PURE__ */ jsx248("section", { className: "relative overflow-hidden py-16 md:py-24", children: /* @__PURE__ */ jsx248("div", { className: "container mx-auto px-4", children: /* @__PURE__ */ jsxs158("div", { className: "grid gap-12 lg:grid-cols-2 lg:items-center", children: [
|
|
20489
20507
|
/* @__PURE__ */ jsxs158("div", { className: "space-y-8", children: [
|
|
20490
20508
|
/* @__PURE__ */ jsxs158("div", { className: "space-y-4", children: [
|
|
20491
|
-
config.heroTitle && /* @__PURE__ */
|
|
20492
|
-
config.heroSubtitle && /* @__PURE__ */
|
|
20493
|
-
config.heroDescription && /* @__PURE__ */
|
|
20509
|
+
config.heroTitle && /* @__PURE__ */ jsx248("h1", { className: "text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", children: config.heroTitle }),
|
|
20510
|
+
config.heroSubtitle && /* @__PURE__ */ jsx248("p", { className: "text-muted-foreground text-xl md:text-2xl", children: config.heroSubtitle }),
|
|
20511
|
+
config.heroDescription && /* @__PURE__ */ jsx248("p", { className: "text-muted-foreground", children: config.heroDescription })
|
|
20494
20512
|
] }),
|
|
20495
|
-
config.benefits && config.benefits.length > 0 && /* @__PURE__ */
|
|
20496
|
-
/* @__PURE__ */
|
|
20497
|
-
/* @__PURE__ */
|
|
20513
|
+
config.benefits && config.benefits.length > 0 && /* @__PURE__ */ jsx248("ul", { className: "space-y-3", children: config.benefits.map((benefit, index) => /* @__PURE__ */ jsxs158("li", { className: "flex items-start gap-3", children: [
|
|
20514
|
+
/* @__PURE__ */ jsx248(CheckCircle2, { className: "text-primary mt-0.5 h-5 w-5 shrink-0" }),
|
|
20515
|
+
/* @__PURE__ */ jsx248("span", { children: benefit })
|
|
20498
20516
|
] }, index)) })
|
|
20499
20517
|
] }),
|
|
20500
|
-
/* @__PURE__ */
|
|
20518
|
+
/* @__PURE__ */ jsx248("div", { className: "lg:pl-8", children: /* @__PURE__ */ jsx248("div", { className: "bg-card rounded-lg border p-6 shadow-lg md:p-8", children: /* @__PURE__ */ jsx248(WaitlistForm, {}) }) })
|
|
20501
20519
|
] }) }) });
|
|
20502
20520
|
}
|
|
20503
20521
|
__name(WaitlistHeroSection, "WaitlistHeroSection");
|
|
@@ -20505,14 +20523,14 @@ __name(WaitlistHeroSection, "WaitlistHeroSection");
|
|
|
20505
20523
|
// src/features/waitlist/components/sections/WaitlistSuccessState.tsx
|
|
20506
20524
|
import { CheckCircle as CheckCircle3 } from "lucide-react";
|
|
20507
20525
|
import { useTranslations as useTranslations105 } from "next-intl";
|
|
20508
|
-
import { jsx as
|
|
20526
|
+
import { jsx as jsx249, jsxs as jsxs159 } from "react/jsx-runtime";
|
|
20509
20527
|
function WaitlistSuccessState() {
|
|
20510
20528
|
const t = useTranslations105();
|
|
20511
20529
|
return /* @__PURE__ */ jsxs159("div", { className: "flex flex-col items-center justify-center space-y-4 py-8 text-center", children: [
|
|
20512
|
-
/* @__PURE__ */
|
|
20513
|
-
/* @__PURE__ */
|
|
20514
|
-
/* @__PURE__ */
|
|
20515
|
-
/* @__PURE__ */
|
|
20530
|
+
/* @__PURE__ */ jsx249("div", { className: "bg-primary/10 rounded-full p-4", children: /* @__PURE__ */ jsx249(CheckCircle3, { className: "text-primary h-12 w-12" }) }),
|
|
20531
|
+
/* @__PURE__ */ jsx249("h2", { className: "text-2xl font-bold", children: t("waitlist.success.title") }),
|
|
20532
|
+
/* @__PURE__ */ jsx249("p", { className: "text-muted-foreground max-w-md", children: t("waitlist.success.description") }),
|
|
20533
|
+
/* @__PURE__ */ jsx249("p", { className: "text-muted-foreground text-sm", children: t("waitlist.success.hint") })
|
|
20516
20534
|
] });
|
|
20517
20535
|
}
|
|
20518
20536
|
__name(WaitlistSuccessState, "WaitlistSuccessState");
|
|
@@ -20521,7 +20539,7 @@ __name(WaitlistSuccessState, "WaitlistSuccessState");
|
|
|
20521
20539
|
import { CheckCircle as CheckCircle4, Loader2 as Loader27, XCircle as XCircle2 } from "lucide-react";
|
|
20522
20540
|
import { useTranslations as useTranslations106 } from "next-intl";
|
|
20523
20541
|
import { useEffect as useEffect68, useState as useState93 } from "react";
|
|
20524
|
-
import { jsx as
|
|
20542
|
+
import { jsx as jsx250, jsxs as jsxs160 } from "react/jsx-runtime";
|
|
20525
20543
|
function WaitlistConfirmation({ code }) {
|
|
20526
20544
|
const t = useTranslations106();
|
|
20527
20545
|
const [state, setState] = useState93("loading");
|
|
@@ -20541,23 +20559,23 @@ function WaitlistConfirmation({ code }) {
|
|
|
20541
20559
|
}, [code, t]);
|
|
20542
20560
|
if (state === "loading") {
|
|
20543
20561
|
return /* @__PURE__ */ jsxs160("div", { className: "flex flex-col items-center justify-center space-y-4 py-16 text-center", children: [
|
|
20544
|
-
/* @__PURE__ */
|
|
20545
|
-
/* @__PURE__ */
|
|
20562
|
+
/* @__PURE__ */ jsx250(Loader27, { className: "text-primary h-12 w-12 animate-spin" }),
|
|
20563
|
+
/* @__PURE__ */ jsx250("p", { className: "text-muted-foreground", children: t("waitlist.confirmation.loading") })
|
|
20546
20564
|
] });
|
|
20547
20565
|
}
|
|
20548
20566
|
if (state === "error") {
|
|
20549
20567
|
return /* @__PURE__ */ jsxs160("div", { className: "flex flex-col items-center justify-center space-y-4 py-16 text-center", children: [
|
|
20550
|
-
/* @__PURE__ */
|
|
20551
|
-
/* @__PURE__ */
|
|
20552
|
-
/* @__PURE__ */
|
|
20553
|
-
/* @__PURE__ */
|
|
20568
|
+
/* @__PURE__ */ jsx250("div", { className: "bg-destructive/10 rounded-full p-4", children: /* @__PURE__ */ jsx250(XCircle2, { className: "text-destructive h-12 w-12" }) }),
|
|
20569
|
+
/* @__PURE__ */ jsx250("h2", { className: "text-2xl font-bold", children: t("waitlist.confirmation.error_title") }),
|
|
20570
|
+
/* @__PURE__ */ jsx250("p", { className: "text-muted-foreground max-w-md", children: errorMessage }),
|
|
20571
|
+
/* @__PURE__ */ jsx250(Link, { href: "/waitlist", className: buttonVariants({ variant: "outline" }), children: t("waitlist.buttons.return") })
|
|
20554
20572
|
] });
|
|
20555
20573
|
}
|
|
20556
20574
|
return /* @__PURE__ */ jsxs160("div", { className: "flex flex-col items-center justify-center space-y-4 py-16 text-center", children: [
|
|
20557
|
-
/* @__PURE__ */
|
|
20558
|
-
/* @__PURE__ */
|
|
20559
|
-
/* @__PURE__ */
|
|
20560
|
-
/* @__PURE__ */
|
|
20575
|
+
/* @__PURE__ */ jsx250("div", { className: "bg-primary/10 rounded-full p-4", children: /* @__PURE__ */ jsx250(CheckCircle4, { className: "text-primary h-12 w-12" }) }),
|
|
20576
|
+
/* @__PURE__ */ jsx250("h2", { className: "text-2xl font-bold", children: t("waitlist.confirmation.success_title") }),
|
|
20577
|
+
/* @__PURE__ */ jsx250("p", { className: "text-muted-foreground max-w-md", children: t("waitlist.confirmation.success_description") }),
|
|
20578
|
+
/* @__PURE__ */ jsx250("p", { className: "text-muted-foreground text-sm", children: t("waitlist.confirmation.success_hint") })
|
|
20561
20579
|
] });
|
|
20562
20580
|
}
|
|
20563
20581
|
__name(WaitlistConfirmation, "WaitlistConfirmation");
|
|
@@ -20571,7 +20589,7 @@ import { useCallback as useCallback47, useEffect as useEffect69, useState as use
|
|
|
20571
20589
|
// src/features/waitlist/hooks/useWaitlistTableStructure.tsx
|
|
20572
20590
|
import { Send } from "lucide-react";
|
|
20573
20591
|
import { useTranslations as useTranslations107 } from "next-intl";
|
|
20574
|
-
import { jsx as
|
|
20592
|
+
import { jsx as jsx251, jsxs as jsxs161 } from "react/jsx-runtime";
|
|
20575
20593
|
function parseQuestionnaire(questionnaire) {
|
|
20576
20594
|
if (!questionnaire) return null;
|
|
20577
20595
|
try {
|
|
@@ -20593,13 +20611,13 @@ function useWaitlistTableStructure({
|
|
|
20593
20611
|
registered: { variant: "default" }
|
|
20594
20612
|
};
|
|
20595
20613
|
const config = variants[status];
|
|
20596
|
-
return /* @__PURE__ */
|
|
20614
|
+
return /* @__PURE__ */ jsx251(Badge, { variant: config.variant, children: t(`waitlist.admin.status.${status}`) });
|
|
20597
20615
|
}, "getStatusBadge");
|
|
20598
20616
|
return [
|
|
20599
20617
|
{
|
|
20600
20618
|
accessorKey: "email",
|
|
20601
20619
|
header: t("waitlist.admin.columns.email"),
|
|
20602
|
-
cell: /* @__PURE__ */ __name(({ row }) => /* @__PURE__ */
|
|
20620
|
+
cell: /* @__PURE__ */ __name(({ row }) => /* @__PURE__ */ jsx251("span", { className: "font-medium", children: row.original.email }), "cell")
|
|
20603
20621
|
},
|
|
20604
20622
|
{
|
|
20605
20623
|
accessorKey: "status",
|
|
@@ -20620,17 +20638,17 @@ function useWaitlistTableStructure({
|
|
|
20620
20638
|
cell: /* @__PURE__ */ __name(({ row }) => {
|
|
20621
20639
|
const questionnaire = parseQuestionnaire(row.original.questionnaire);
|
|
20622
20640
|
if (!questionnaire || Object.keys(questionnaire).length === 0) {
|
|
20623
|
-
return /* @__PURE__ */
|
|
20641
|
+
return /* @__PURE__ */ jsx251("span", { className: "text-muted-foreground", children: "-" });
|
|
20624
20642
|
}
|
|
20625
20643
|
return /* @__PURE__ */ jsxs161("details", { className: "cursor-pointer", children: [
|
|
20626
|
-
/* @__PURE__ */
|
|
20627
|
-
/* @__PURE__ */
|
|
20644
|
+
/* @__PURE__ */ jsx251("summary", { className: "text-primary text-sm", children: t("waitlist.admin.questionnaire.view_answers") }),
|
|
20645
|
+
/* @__PURE__ */ jsx251("div", { className: "bg-muted mt-2 rounded p-2 text-sm", children: Object.entries(questionnaire).map(([key, value]) => /* @__PURE__ */ jsxs161("div", { className: "mb-1", children: [
|
|
20628
20646
|
/* @__PURE__ */ jsxs161("span", { className: "font-medium", children: [
|
|
20629
20647
|
key,
|
|
20630
20648
|
":"
|
|
20631
20649
|
] }),
|
|
20632
20650
|
" ",
|
|
20633
|
-
/* @__PURE__ */
|
|
20651
|
+
/* @__PURE__ */ jsx251("span", { className: "text-muted-foreground", children: Array.isArray(value) ? value.join(", ") : String(value) })
|
|
20634
20652
|
] }, key)) })
|
|
20635
20653
|
] });
|
|
20636
20654
|
}, "cell")
|
|
@@ -20642,17 +20660,17 @@ function useWaitlistTableStructure({
|
|
|
20642
20660
|
const entry = row.original;
|
|
20643
20661
|
if (entry.status === "confirmed") {
|
|
20644
20662
|
return /* @__PURE__ */ jsxs161(Button, { size: "sm", variant: "outline", onClick: () => onInvite(entry), children: [
|
|
20645
|
-
/* @__PURE__ */
|
|
20663
|
+
/* @__PURE__ */ jsx251(Send, { className: "mr-2 h-4 w-4" }),
|
|
20646
20664
|
t("waitlist.admin.actions.invite")
|
|
20647
20665
|
] });
|
|
20648
20666
|
}
|
|
20649
20667
|
if (entry.status === "invited" && entry.invitedAt) {
|
|
20650
|
-
return /* @__PURE__ */
|
|
20668
|
+
return /* @__PURE__ */ jsx251("span", { className: "text-muted-foreground text-sm", children: t("waitlist.admin.actions.invited_on", { date: new Date(entry.invitedAt).toLocaleDateString() }) });
|
|
20651
20669
|
}
|
|
20652
20670
|
if (entry.status === "registered") {
|
|
20653
|
-
return /* @__PURE__ */
|
|
20671
|
+
return /* @__PURE__ */ jsx251("span", { className: "text-muted-foreground text-sm", children: t("waitlist.admin.actions.registered") });
|
|
20654
20672
|
}
|
|
20655
|
-
return /* @__PURE__ */
|
|
20673
|
+
return /* @__PURE__ */ jsx251("span", { className: "text-muted-foreground text-sm", children: t("waitlist.admin.actions.awaiting_confirmation") });
|
|
20656
20674
|
}, "cell")
|
|
20657
20675
|
}
|
|
20658
20676
|
];
|
|
@@ -20660,7 +20678,7 @@ function useWaitlistTableStructure({
|
|
|
20660
20678
|
__name(useWaitlistTableStructure, "useWaitlistTableStructure");
|
|
20661
20679
|
|
|
20662
20680
|
// src/features/waitlist/components/lists/WaitlistList.tsx
|
|
20663
|
-
import { jsx as
|
|
20681
|
+
import { jsx as jsx252, jsxs as jsxs162 } from "react/jsx-runtime";
|
|
20664
20682
|
function WaitlistList() {
|
|
20665
20683
|
const t = useTranslations108();
|
|
20666
20684
|
const [entries, setEntries] = useState94([]);
|
|
@@ -20703,8 +20721,8 @@ function WaitlistList() {
|
|
|
20703
20721
|
return /* @__PURE__ */ jsxs162("div", { className: "space-y-4", children: [
|
|
20704
20722
|
/* @__PURE__ */ jsxs162("div", { className: "flex items-center justify-between", children: [
|
|
20705
20723
|
/* @__PURE__ */ jsxs162("div", { className: "flex items-center gap-2", children: [
|
|
20706
|
-
/* @__PURE__ */
|
|
20707
|
-
/* @__PURE__ */
|
|
20724
|
+
/* @__PURE__ */ jsx252(Users2, { className: "h-5 w-5" }),
|
|
20725
|
+
/* @__PURE__ */ jsx252("h2", { className: "text-xl font-semibold", children: t("waitlist.admin.title") }),
|
|
20708
20726
|
/* @__PURE__ */ jsxs162("span", { className: "text-muted-foreground", children: [
|
|
20709
20727
|
"(",
|
|
20710
20728
|
t("waitlist.admin.entries_count", { count: total }),
|
|
@@ -20713,21 +20731,21 @@ function WaitlistList() {
|
|
|
20713
20731
|
] }),
|
|
20714
20732
|
/* @__PURE__ */ jsxs162("div", { className: "flex items-center gap-4", children: [
|
|
20715
20733
|
/* @__PURE__ */ jsxs162(Select, { value: statusFilter, onValueChange: (value) => setStatusFilter(value ?? "all"), children: [
|
|
20716
|
-
/* @__PURE__ */
|
|
20734
|
+
/* @__PURE__ */ jsx252(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ jsx252(SelectValue, { placeholder: t("waitlist.admin.filter_placeholder") }) }),
|
|
20717
20735
|
/* @__PURE__ */ jsxs162(SelectContent, { children: [
|
|
20718
|
-
/* @__PURE__ */
|
|
20719
|
-
/* @__PURE__ */
|
|
20720
|
-
/* @__PURE__ */
|
|
20721
|
-
/* @__PURE__ */
|
|
20722
|
-
/* @__PURE__ */
|
|
20736
|
+
/* @__PURE__ */ jsx252(SelectItem, { value: "all", children: t("waitlist.admin.all_statuses") }),
|
|
20737
|
+
/* @__PURE__ */ jsx252(SelectItem, { value: "pending", children: t("waitlist.admin.status.pending") }),
|
|
20738
|
+
/* @__PURE__ */ jsx252(SelectItem, { value: "confirmed", children: t("waitlist.admin.status.confirmed") }),
|
|
20739
|
+
/* @__PURE__ */ jsx252(SelectItem, { value: "invited", children: t("waitlist.admin.status.invited") }),
|
|
20740
|
+
/* @__PURE__ */ jsx252(SelectItem, { value: "registered", children: t("waitlist.admin.status.registered") })
|
|
20723
20741
|
] })
|
|
20724
20742
|
] }),
|
|
20725
|
-
/* @__PURE__ */
|
|
20743
|
+
/* @__PURE__ */ jsx252(Button, { variant: "outline", size: "icon", onClick: loadEntries, disabled: isLoading, children: /* @__PURE__ */ jsx252(RefreshCw4, { className: `h-4 w-4 ${isLoading ? "animate-spin" : ""}` }) })
|
|
20726
20744
|
] })
|
|
20727
20745
|
] }),
|
|
20728
|
-
/* @__PURE__ */
|
|
20729
|
-
/* @__PURE__ */
|
|
20730
|
-
/* @__PURE__ */
|
|
20746
|
+
/* @__PURE__ */ jsx252("div", { className: "rounded-md border", children: /* @__PURE__ */ jsxs162(Table, { children: [
|
|
20747
|
+
/* @__PURE__ */ jsx252(TableHeader, { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx252(TableRow, { children: headerGroup.headers.map((header) => /* @__PURE__ */ jsx252(TableHead, { children: header.isPlaceholder ? null : flexRender2(header.column.columnDef.header, header.getContext()) }, header.id)) }, headerGroup.id)) }),
|
|
20748
|
+
/* @__PURE__ */ jsx252(TableBody, { children: isLoading ? /* @__PURE__ */ jsx252(TableRow, { children: /* @__PURE__ */ jsx252(TableCell, { colSpan: columns.length, className: "h-24 text-center", children: t("waitlist.admin.loading") }) }) : entries.length === 0 ? /* @__PURE__ */ jsx252(TableRow, { children: /* @__PURE__ */ jsx252(TableCell, { colSpan: columns.length, className: "h-24 text-center", children: t("waitlist.admin.empty") }) }) : table.getRowModel().rows.map((row) => /* @__PURE__ */ jsx252(TableRow, { children: row.getVisibleCells().map((cell) => /* @__PURE__ */ jsx252(TableCell, { children: flexRender2(cell.column.columnDef.cell, cell.getContext()) }, cell.id)) }, row.id)) })
|
|
20731
20749
|
] }) })
|
|
20732
20750
|
] });
|
|
20733
20751
|
}
|
|
@@ -20740,7 +20758,7 @@ import { memo as memo2, useCallback as useCallback49, useEffect as useEffect71,
|
|
|
20740
20758
|
|
|
20741
20759
|
// src/features/rbac/components/RbacPermissionCell.tsx
|
|
20742
20760
|
import { CheckIcon as CheckIcon9, MinusIcon as MinusIcon2, XIcon as XIcon11 } from "lucide-react";
|
|
20743
|
-
import { jsx as
|
|
20761
|
+
import { jsx as jsx253, jsxs as jsxs163 } from "react/jsx-runtime";
|
|
20744
20762
|
function RbacPermissionCell({
|
|
20745
20763
|
value,
|
|
20746
20764
|
originalValue,
|
|
@@ -20749,7 +20767,7 @@ function RbacPermissionCell({
|
|
|
20749
20767
|
}) {
|
|
20750
20768
|
const isDirty = originalValue !== void 0 && value !== originalValue;
|
|
20751
20769
|
if (isRoleColumn && (value === null || value === void 0)) {
|
|
20752
|
-
return /* @__PURE__ */
|
|
20770
|
+
return /* @__PURE__ */ jsx253(
|
|
20753
20771
|
"div",
|
|
20754
20772
|
{
|
|
20755
20773
|
onClick,
|
|
@@ -20757,12 +20775,12 @@ function RbacPermissionCell({
|
|
|
20757
20775
|
"flex h-8 w-full items-center justify-center rounded px-2 transition-colors hover:bg-muted cursor-pointer",
|
|
20758
20776
|
isDirty && "ring-2 ring-amber-400/50"
|
|
20759
20777
|
),
|
|
20760
|
-
children: /* @__PURE__ */
|
|
20778
|
+
children: /* @__PURE__ */ jsx253(MinusIcon2, { className: "h-3.5 w-3.5 text-muted-foreground" })
|
|
20761
20779
|
}
|
|
20762
20780
|
);
|
|
20763
20781
|
}
|
|
20764
20782
|
if (value === true) {
|
|
20765
|
-
return /* @__PURE__ */
|
|
20783
|
+
return /* @__PURE__ */ jsx253(
|
|
20766
20784
|
"div",
|
|
20767
20785
|
{
|
|
20768
20786
|
onClick,
|
|
@@ -20771,14 +20789,14 @@ function RbacPermissionCell({
|
|
|
20771
20789
|
isDirty && "ring-2 ring-amber-400/50"
|
|
20772
20790
|
),
|
|
20773
20791
|
children: /* @__PURE__ */ jsxs163(Badge, { variant: "default", className: "bg-emerald-600 hover:bg-emerald-700 gap-1 text-xs", children: [
|
|
20774
|
-
/* @__PURE__ */
|
|
20775
|
-
/* @__PURE__ */
|
|
20792
|
+
/* @__PURE__ */ jsx253(CheckIcon9, { className: "h-3 w-3" }),
|
|
20793
|
+
/* @__PURE__ */ jsx253("span", { children: "true" })
|
|
20776
20794
|
] })
|
|
20777
20795
|
}
|
|
20778
20796
|
);
|
|
20779
20797
|
}
|
|
20780
20798
|
if (value === false) {
|
|
20781
|
-
return /* @__PURE__ */
|
|
20799
|
+
return /* @__PURE__ */ jsx253(
|
|
20782
20800
|
"div",
|
|
20783
20801
|
{
|
|
20784
20802
|
onClick,
|
|
@@ -20787,8 +20805,8 @@ function RbacPermissionCell({
|
|
|
20787
20805
|
isDirty && "ring-2 ring-amber-400/50"
|
|
20788
20806
|
),
|
|
20789
20807
|
children: /* @__PURE__ */ jsxs163(Badge, { variant: "destructive", className: "gap-1 text-xs", children: [
|
|
20790
|
-
/* @__PURE__ */
|
|
20791
|
-
/* @__PURE__ */
|
|
20808
|
+
/* @__PURE__ */ jsx253(XIcon11, { className: "h-3 w-3" }),
|
|
20809
|
+
/* @__PURE__ */ jsx253("span", { children: "false" })
|
|
20792
20810
|
] })
|
|
20793
20811
|
}
|
|
20794
20812
|
);
|
|
@@ -20796,7 +20814,7 @@ function RbacPermissionCell({
|
|
|
20796
20814
|
const displayValue = typeof value === "string" ? value : String(value);
|
|
20797
20815
|
const truncated = displayValue.length > 20 ? displayValue.substring(0, 18) + "..." : displayValue;
|
|
20798
20816
|
return /* @__PURE__ */ jsxs163(Tooltip2, { children: [
|
|
20799
|
-
/* @__PURE__ */
|
|
20817
|
+
/* @__PURE__ */ jsx253(
|
|
20800
20818
|
TooltipTrigger,
|
|
20801
20819
|
{
|
|
20802
20820
|
onClick,
|
|
@@ -20804,11 +20822,11 @@ function RbacPermissionCell({
|
|
|
20804
20822
|
"flex h-8 w-full items-center justify-center rounded px-2 transition-colors hover:bg-muted cursor-pointer",
|
|
20805
20823
|
isDirty && "ring-2 ring-amber-400/50"
|
|
20806
20824
|
),
|
|
20807
|
-
render: /* @__PURE__ */
|
|
20808
|
-
children: /* @__PURE__ */
|
|
20825
|
+
render: /* @__PURE__ */ jsx253("div", {}),
|
|
20826
|
+
children: /* @__PURE__ */ jsx253(Badge, { variant: "outline", className: "max-w-full truncate text-xs font-mono", children: truncated })
|
|
20809
20827
|
}
|
|
20810
20828
|
),
|
|
20811
|
-
/* @__PURE__ */
|
|
20829
|
+
/* @__PURE__ */ jsx253(TooltipContent, { side: "top", className: "max-w-xs", children: /* @__PURE__ */ jsx253("p", { className: "font-mono text-xs break-all", children: displayValue }) })
|
|
20812
20830
|
] });
|
|
20813
20831
|
}
|
|
20814
20832
|
__name(RbacPermissionCell, "RbacPermissionCell");
|
|
@@ -20818,7 +20836,7 @@ import { Popover as PopoverPrimitive2 } from "@base-ui/react/popover";
|
|
|
20818
20836
|
import { CheckIcon as CheckIcon10, MinusIcon as MinusIcon3, XIcon as XIcon12 } from "lucide-react";
|
|
20819
20837
|
import { useTranslations as useTranslations109 } from "next-intl";
|
|
20820
20838
|
import { useCallback as useCallback48, useEffect as useEffect70, useState as useState95 } from "react";
|
|
20821
|
-
import { Fragment as Fragment54, jsx as
|
|
20839
|
+
import { Fragment as Fragment54, jsx as jsx254, jsxs as jsxs164 } from "react/jsx-runtime";
|
|
20822
20840
|
function RbacPermissionPicker({
|
|
20823
20841
|
open,
|
|
20824
20842
|
anchor,
|
|
@@ -20851,14 +20869,14 @@ function RbacPermissionPicker({
|
|
|
20851
20869
|
}
|
|
20852
20870
|
setCustomSegment("");
|
|
20853
20871
|
}, [customSegment, currentSegments, onSetValue]);
|
|
20854
|
-
return /* @__PURE__ */
|
|
20872
|
+
return /* @__PURE__ */ jsx254(
|
|
20855
20873
|
PopoverPrimitive2.Root,
|
|
20856
20874
|
{
|
|
20857
20875
|
open,
|
|
20858
20876
|
onOpenChange: (next) => {
|
|
20859
20877
|
if (!next) onClose();
|
|
20860
20878
|
},
|
|
20861
|
-
children: /* @__PURE__ */
|
|
20879
|
+
children: /* @__PURE__ */ jsx254(PopoverPrimitive2.Portal, { children: /* @__PURE__ */ jsx254(
|
|
20862
20880
|
PopoverPrimitive2.Positioner,
|
|
20863
20881
|
{
|
|
20864
20882
|
anchor: anchor ?? void 0,
|
|
@@ -20868,7 +20886,7 @@ function RbacPermissionPicker({
|
|
|
20868
20886
|
className: "isolate z-50",
|
|
20869
20887
|
children: /* @__PURE__ */ jsxs164(PopoverPrimitive2.Popup, { className: "bg-popover text-popover-foreground ring-foreground/10 z-50 flex w-96 flex-col gap-3 rounded-lg p-3 text-xs shadow-md outline-hidden ring-1 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 duration-100", children: [
|
|
20870
20888
|
/* @__PURE__ */ jsxs164("div", { children: [
|
|
20871
|
-
/* @__PURE__ */
|
|
20889
|
+
/* @__PURE__ */ jsx254("p", { className: "text-muted-foreground mb-2 text-xs font-medium", children: t("rbac.quick_value") }),
|
|
20872
20890
|
/* @__PURE__ */ jsxs164("div", { className: "flex gap-2", children: [
|
|
20873
20891
|
/* @__PURE__ */ jsxs164(
|
|
20874
20892
|
Button,
|
|
@@ -20881,8 +20899,8 @@ function RbacPermissionPicker({
|
|
|
20881
20899
|
onClose();
|
|
20882
20900
|
},
|
|
20883
20901
|
children: [
|
|
20884
|
-
/* @__PURE__ */
|
|
20885
|
-
/* @__PURE__ */
|
|
20902
|
+
/* @__PURE__ */ jsx254(CheckIcon10, { className: "h-3 w-3" }),
|
|
20903
|
+
/* @__PURE__ */ jsx254("span", { children: "true" })
|
|
20886
20904
|
]
|
|
20887
20905
|
}
|
|
20888
20906
|
),
|
|
@@ -20897,15 +20915,15 @@ function RbacPermissionPicker({
|
|
|
20897
20915
|
onClose();
|
|
20898
20916
|
},
|
|
20899
20917
|
children: [
|
|
20900
|
-
/* @__PURE__ */
|
|
20901
|
-
/* @__PURE__ */
|
|
20918
|
+
/* @__PURE__ */ jsx254(XIcon12, { className: "h-3 w-3" }),
|
|
20919
|
+
/* @__PURE__ */ jsx254("span", { children: "false" })
|
|
20902
20920
|
]
|
|
20903
20921
|
}
|
|
20904
20922
|
)
|
|
20905
20923
|
] })
|
|
20906
20924
|
] }),
|
|
20907
20925
|
isRoleColumn && onClear && /* @__PURE__ */ jsxs164(Fragment54, { children: [
|
|
20908
|
-
/* @__PURE__ */
|
|
20926
|
+
/* @__PURE__ */ jsx254(Separator, {}),
|
|
20909
20927
|
/* @__PURE__ */ jsxs164(
|
|
20910
20928
|
Button,
|
|
20911
20929
|
{
|
|
@@ -20917,34 +20935,34 @@ function RbacPermissionPicker({
|
|
|
20917
20935
|
onClose();
|
|
20918
20936
|
},
|
|
20919
20937
|
children: [
|
|
20920
|
-
/* @__PURE__ */
|
|
20938
|
+
/* @__PURE__ */ jsx254(MinusIcon3, { className: "h-3 w-3" }),
|
|
20921
20939
|
t("rbac.inherit_from_defaults")
|
|
20922
20940
|
]
|
|
20923
20941
|
}
|
|
20924
20942
|
)
|
|
20925
20943
|
] }),
|
|
20926
|
-
/* @__PURE__ */
|
|
20944
|
+
/* @__PURE__ */ jsx254(Separator, {}),
|
|
20927
20945
|
/* @__PURE__ */ jsxs164("div", { children: [
|
|
20928
|
-
/* @__PURE__ */
|
|
20929
|
-
knownSegments.length > 0 && /* @__PURE__ */
|
|
20946
|
+
/* @__PURE__ */ jsx254("p", { className: "text-muted-foreground mb-2 text-xs font-medium", children: t("rbac.relationships") }),
|
|
20947
|
+
knownSegments.length > 0 && /* @__PURE__ */ jsx254("div", { className: "max-h-40 space-y-1 overflow-y-auto", children: knownSegments.map((segment) => /* @__PURE__ */ jsxs164(
|
|
20930
20948
|
"label",
|
|
20931
20949
|
{
|
|
20932
20950
|
className: "hover:bg-muted flex cursor-pointer items-center gap-2 rounded px-1 py-0.5 text-sm",
|
|
20933
20951
|
children: [
|
|
20934
|
-
/* @__PURE__ */
|
|
20952
|
+
/* @__PURE__ */ jsx254(
|
|
20935
20953
|
Checkbox,
|
|
20936
20954
|
{
|
|
20937
20955
|
checked: currentSegments.includes(segment),
|
|
20938
20956
|
onCheckedChange: () => toggleSegment(segment)
|
|
20939
20957
|
}
|
|
20940
20958
|
),
|
|
20941
|
-
/* @__PURE__ */
|
|
20959
|
+
/* @__PURE__ */ jsx254("span", { className: "font-mono text-xs", children: segment })
|
|
20942
20960
|
]
|
|
20943
20961
|
},
|
|
20944
20962
|
segment
|
|
20945
20963
|
)) }),
|
|
20946
20964
|
/* @__PURE__ */ jsxs164("div", { className: "mt-2 flex gap-1", children: [
|
|
20947
|
-
/* @__PURE__ */
|
|
20965
|
+
/* @__PURE__ */ jsx254(
|
|
20948
20966
|
Input,
|
|
20949
20967
|
{
|
|
20950
20968
|
value: customSegment,
|
|
@@ -20959,7 +20977,7 @@ function RbacPermissionPicker({
|
|
|
20959
20977
|
}
|
|
20960
20978
|
}
|
|
20961
20979
|
),
|
|
20962
|
-
/* @__PURE__ */
|
|
20980
|
+
/* @__PURE__ */ jsx254(
|
|
20963
20981
|
Button,
|
|
20964
20982
|
{
|
|
20965
20983
|
size: "sm",
|
|
@@ -20972,8 +20990,8 @@ function RbacPermissionPicker({
|
|
|
20972
20990
|
)
|
|
20973
20991
|
] }),
|
|
20974
20992
|
currentSegments.length > 0 && /* @__PURE__ */ jsxs164("div", { className: "bg-muted mt-2 rounded p-2", children: [
|
|
20975
|
-
/* @__PURE__ */
|
|
20976
|
-
/* @__PURE__ */
|
|
20993
|
+
/* @__PURE__ */ jsx254("p", { className: "text-muted-foreground mb-1 text-xs", children: t("rbac.preview") }),
|
|
20994
|
+
/* @__PURE__ */ jsx254("p", { className: "font-mono text-xs break-all", children: currentSegments.join("|") })
|
|
20977
20995
|
] })
|
|
20978
20996
|
] })
|
|
20979
20997
|
] })
|
|
@@ -20985,7 +21003,7 @@ function RbacPermissionPicker({
|
|
|
20985
21003
|
__name(RbacPermissionPicker, "RbacPermissionPicker");
|
|
20986
21004
|
|
|
20987
21005
|
// src/features/rbac/components/RbacContainer.tsx
|
|
20988
|
-
import { jsx as
|
|
21006
|
+
import { jsx as jsx255, jsxs as jsxs165 } from "react/jsx-runtime";
|
|
20989
21007
|
function findToken(tokens, action) {
|
|
20990
21008
|
if (!tokens) return void 0;
|
|
20991
21009
|
return tokens.find((t) => t.action === action);
|
|
@@ -21011,7 +21029,7 @@ var CellButton = memo2(/* @__PURE__ */ __name(function CellButton2({
|
|
|
21011
21029
|
if (!ref.current) return;
|
|
21012
21030
|
onOpen({ moduleId, rowKey, action, isRoleColumn, anchor: ref.current });
|
|
21013
21031
|
}, [onOpen, moduleId, rowKey, action, isRoleColumn]);
|
|
21014
|
-
return /* @__PURE__ */
|
|
21032
|
+
return /* @__PURE__ */ jsx255("div", { ref, children: /* @__PURE__ */ jsx255(RbacPermissionCell, { value, isRoleColumn, onClick: handleClick }) });
|
|
21015
21033
|
}, "CellButton"));
|
|
21016
21034
|
var ACTION_LABELS = {
|
|
21017
21035
|
read: "Read",
|
|
@@ -21031,18 +21049,18 @@ var ModuleEditor = memo2(/* @__PURE__ */ __name(function ModuleEditor2({
|
|
|
21031
21049
|
const defaultTokens = block.default ?? [];
|
|
21032
21050
|
return /* @__PURE__ */ jsxs165("div", { className: "rounded-lg border border-accent bg-card", children: [
|
|
21033
21051
|
/* @__PURE__ */ jsxs165("div", { className: "flex items-center justify-between border-b px-4 py-2", children: [
|
|
21034
|
-
/* @__PURE__ */
|
|
21035
|
-
/* @__PURE__ */
|
|
21052
|
+
/* @__PURE__ */ jsx255("h4", { className: "text-sm font-medium", children: moduleLabel }),
|
|
21053
|
+
/* @__PURE__ */ jsx255("span", { className: "font-mono text-[10px] text-muted-foreground", children: moduleId })
|
|
21036
21054
|
] }),
|
|
21037
|
-
/* @__PURE__ */
|
|
21038
|
-
/* @__PURE__ */
|
|
21039
|
-
/* @__PURE__ */
|
|
21040
|
-
ACTION_TYPES.map((action) => /* @__PURE__ */
|
|
21055
|
+
/* @__PURE__ */ jsx255("div", { className: "overflow-x-auto", children: /* @__PURE__ */ jsxs165("table", { className: "w-full text-sm", children: [
|
|
21056
|
+
/* @__PURE__ */ jsx255("thead", { children: /* @__PURE__ */ jsxs165("tr", { className: "border-b bg-muted/50", children: [
|
|
21057
|
+
/* @__PURE__ */ jsx255("th", { className: "w-40 px-4 py-2 text-left text-xs font-medium text-muted-foreground", children: t("rbac.role") }),
|
|
21058
|
+
ACTION_TYPES.map((action) => /* @__PURE__ */ jsx255("th", { className: "min-w-28 px-2 py-2 text-center text-xs font-medium text-muted-foreground", children: ACTION_LABELS[action] }, action))
|
|
21041
21059
|
] }) }),
|
|
21042
21060
|
/* @__PURE__ */ jsxs165("tbody", { children: [
|
|
21043
21061
|
/* @__PURE__ */ jsxs165("tr", { className: cn("border-b bg-muted/30"), children: [
|
|
21044
|
-
/* @__PURE__ */
|
|
21045
|
-
ACTION_TYPES.map((action) => /* @__PURE__ */
|
|
21062
|
+
/* @__PURE__ */ jsx255("td", { className: "px-4 py-1 text-xs font-bold text-muted-foreground", children: t("rbac.defaults") }),
|
|
21063
|
+
ACTION_TYPES.map((action) => /* @__PURE__ */ jsx255("td", { className: "px-2 py-1", children: /* @__PURE__ */ jsx255(
|
|
21046
21064
|
CellButton,
|
|
21047
21065
|
{
|
|
21048
21066
|
moduleId,
|
|
@@ -21058,8 +21076,8 @@ var ModuleEditor = memo2(/* @__PURE__ */ __name(function ModuleEditor2({
|
|
|
21058
21076
|
const roleTokens = block[roleId];
|
|
21059
21077
|
const roleLabel = roleNames?.[roleId] ?? roleId;
|
|
21060
21078
|
return /* @__PURE__ */ jsxs165("tr", { className: "border-b last:border-b-0", children: [
|
|
21061
|
-
/* @__PURE__ */
|
|
21062
|
-
ACTION_TYPES.map((action) => /* @__PURE__ */
|
|
21079
|
+
/* @__PURE__ */ jsx255("td", { className: "px-4 py-1 text-xs font-medium text-muted-foreground", children: roleLabel }),
|
|
21080
|
+
ACTION_TYPES.map((action) => /* @__PURE__ */ jsx255("td", { className: "px-2 py-1", children: /* @__PURE__ */ jsx255(
|
|
21063
21081
|
CellButton,
|
|
21064
21082
|
{
|
|
21065
21083
|
moduleId,
|
|
@@ -21136,16 +21154,16 @@ function RbacContainer() {
|
|
|
21136
21154
|
clearCell(activePicker.moduleId, activePicker.rowKey, activePicker.action);
|
|
21137
21155
|
}, [activePicker, clearCell]);
|
|
21138
21156
|
if (loading) {
|
|
21139
|
-
return /* @__PURE__ */
|
|
21157
|
+
return /* @__PURE__ */ jsx255(RoundPageContainer, { fullWidth: true, children: /* @__PURE__ */ jsx255("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx255(Loader2Icon3, { className: "h-8 w-8 animate-spin text-muted-foreground" }) }) });
|
|
21140
21158
|
}
|
|
21141
21159
|
if (error) {
|
|
21142
|
-
return /* @__PURE__ */
|
|
21160
|
+
return /* @__PURE__ */ jsx255(RoundPageContainer, { fullWidth: true, children: /* @__PURE__ */ jsx255("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx255("p", { className: "text-destructive", children: error }) }) });
|
|
21143
21161
|
}
|
|
21144
21162
|
if (!matrix) return null;
|
|
21145
21163
|
const selectedBlock = selectedModuleId ? matrix[selectedModuleId] : void 0;
|
|
21146
21164
|
return /* @__PURE__ */ jsxs165(RoundPageContainer, { fullWidth: true, forceHeader: true, children: [
|
|
21147
21165
|
/* @__PURE__ */ jsxs165("div", { className: "flex h-full w-full", children: [
|
|
21148
|
-
/* @__PURE__ */
|
|
21166
|
+
/* @__PURE__ */ jsx255("aside", { className: "w-60 shrink-0 overflow-y-auto border-r bg-muted/20", children: /* @__PURE__ */ jsx255("ul", { className: "py-1", children: sortedModuleIds.map((id) => /* @__PURE__ */ jsx255("li", { children: /* @__PURE__ */ jsx255(
|
|
21149
21167
|
"button",
|
|
21150
21168
|
{
|
|
21151
21169
|
type: "button",
|
|
@@ -21159,7 +21177,7 @@ function RbacContainer() {
|
|
|
21159
21177
|
children: moduleNames?.[id] ?? id
|
|
21160
21178
|
}
|
|
21161
21179
|
) }, id)) }) }),
|
|
21162
|
-
/* @__PURE__ */
|
|
21180
|
+
/* @__PURE__ */ jsx255("section", { className: "flex-1 overflow-y-auto p-4", children: selectedModuleId && selectedBlock ? /* @__PURE__ */ jsx255(
|
|
21163
21181
|
ModuleEditor,
|
|
21164
21182
|
{
|
|
21165
21183
|
moduleId: selectedModuleId,
|
|
@@ -21169,9 +21187,9 @@ function RbacContainer() {
|
|
|
21169
21187
|
roleNames,
|
|
21170
21188
|
onOpenPicker: openPicker
|
|
21171
21189
|
}
|
|
21172
|
-
) : /* @__PURE__ */
|
|
21190
|
+
) : /* @__PURE__ */ jsx255("p", { className: "text-muted-foreground text-sm", children: t("rbac.select_module_prompt") }) })
|
|
21173
21191
|
] }),
|
|
21174
|
-
/* @__PURE__ */
|
|
21192
|
+
/* @__PURE__ */ jsx255(
|
|
21175
21193
|
RbacPermissionPicker,
|
|
21176
21194
|
{
|
|
21177
21195
|
open: !!activePicker,
|
|
@@ -21192,7 +21210,7 @@ __name(RbacContainer, "RbacContainer");
|
|
|
21192
21210
|
import { Loader2Icon as Loader2Icon4 } from "lucide-react";
|
|
21193
21211
|
import { useTranslations as useTranslations111 } from "next-intl";
|
|
21194
21212
|
import { Fragment as Fragment55, memo as memo3, useCallback as useCallback50, useEffect as useEffect72, useMemo as useMemo34, useRef as useRef37, useState as useState97 } from "react";
|
|
21195
|
-
import { jsx as
|
|
21213
|
+
import { jsx as jsx256, jsxs as jsxs166 } from "react/jsx-runtime";
|
|
21196
21214
|
function findToken2(tokens, action) {
|
|
21197
21215
|
if (!tokens) return void 0;
|
|
21198
21216
|
return tokens.find((t) => t.action === action);
|
|
@@ -21218,7 +21236,7 @@ var CellButton3 = memo3(/* @__PURE__ */ __name(function CellButton4({
|
|
|
21218
21236
|
if (!ref.current) return;
|
|
21219
21237
|
onOpen({ moduleId, rowKey, action, isRoleColumn, anchor: ref.current });
|
|
21220
21238
|
}, [onOpen, moduleId, rowKey, action, isRoleColumn]);
|
|
21221
|
-
return /* @__PURE__ */
|
|
21239
|
+
return /* @__PURE__ */ jsx256("div", { ref, children: /* @__PURE__ */ jsx256(RbacPermissionCell, { value, isRoleColumn, onClick: handleClick }) });
|
|
21222
21240
|
}, "CellButton"));
|
|
21223
21241
|
var ACTION_LABELS2 = {
|
|
21224
21242
|
read: "Read",
|
|
@@ -21277,15 +21295,15 @@ function RbacByRoleContainer() {
|
|
|
21277
21295
|
clearCell(activePicker.moduleId, activePicker.rowKey, activePicker.action);
|
|
21278
21296
|
}, [activePicker, clearCell]);
|
|
21279
21297
|
if (loading) {
|
|
21280
|
-
return /* @__PURE__ */
|
|
21298
|
+
return /* @__PURE__ */ jsx256(RoundPageContainer, { fullWidth: true, children: /* @__PURE__ */ jsx256("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx256(Loader2Icon4, { className: "h-8 w-8 animate-spin text-muted-foreground" }) }) });
|
|
21281
21299
|
}
|
|
21282
21300
|
if (error) {
|
|
21283
|
-
return /* @__PURE__ */
|
|
21301
|
+
return /* @__PURE__ */ jsx256(RoundPageContainer, { fullWidth: true, children: /* @__PURE__ */ jsx256("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx256("p", { className: "text-destructive", children: error }) }) });
|
|
21284
21302
|
}
|
|
21285
21303
|
if (!matrix || !selectedRoleId) return null;
|
|
21286
21304
|
return /* @__PURE__ */ jsxs166(RoundPageContainer, { fullWidth: true, forceHeader: true, children: [
|
|
21287
21305
|
/* @__PURE__ */ jsxs166("div", { className: "flex h-full w-full", children: [
|
|
21288
|
-
/* @__PURE__ */
|
|
21306
|
+
/* @__PURE__ */ jsx256("aside", { className: "w-60 shrink-0 overflow-y-auto border-r bg-muted/20", children: /* @__PURE__ */ jsx256("ul", { className: "py-1", children: sortedRoleIds.map((id) => /* @__PURE__ */ jsx256("li", { children: /* @__PURE__ */ jsx256(
|
|
21289
21307
|
"button",
|
|
21290
21308
|
{
|
|
21291
21309
|
type: "button",
|
|
@@ -21299,10 +21317,10 @@ function RbacByRoleContainer() {
|
|
|
21299
21317
|
children: roleNames?.[id] ?? id
|
|
21300
21318
|
}
|
|
21301
21319
|
) }, id)) }) }),
|
|
21302
|
-
/* @__PURE__ */
|
|
21303
|
-
/* @__PURE__ */
|
|
21304
|
-
/* @__PURE__ */
|
|
21305
|
-
ACTION_TYPES.map((action) => /* @__PURE__ */
|
|
21320
|
+
/* @__PURE__ */ jsx256("section", { className: "flex-1 overflow-y-auto p-4", children: sortedModuleIds.length > 0 ? /* @__PURE__ */ jsx256("div", { className: "rounded-lg border border-accent bg-card", children: /* @__PURE__ */ jsx256("div", { className: "overflow-x-auto", children: /* @__PURE__ */ jsxs166("table", { className: "w-full text-sm", children: [
|
|
21321
|
+
/* @__PURE__ */ jsx256("thead", { className: "sticky top-0 z-10", children: /* @__PURE__ */ jsxs166("tr", { className: "border-b bg-muted/80 backdrop-blur-sm", children: [
|
|
21322
|
+
/* @__PURE__ */ jsx256("th", { className: "w-40 px-4 py-2 text-left text-xs font-medium text-muted-foreground", children: t("rbac.module") }),
|
|
21323
|
+
ACTION_TYPES.map((action) => /* @__PURE__ */ jsx256(
|
|
21306
21324
|
"th",
|
|
21307
21325
|
{
|
|
21308
21326
|
className: "min-w-28 px-2 py-2 text-center text-xs font-medium text-muted-foreground",
|
|
@@ -21311,14 +21329,14 @@ function RbacByRoleContainer() {
|
|
|
21311
21329
|
action
|
|
21312
21330
|
))
|
|
21313
21331
|
] }) }),
|
|
21314
|
-
/* @__PURE__ */
|
|
21332
|
+
/* @__PURE__ */ jsx256("tbody", { children: sortedModuleIds.map((moduleId) => {
|
|
21315
21333
|
const block = matrix[moduleId];
|
|
21316
21334
|
if (!block) return null;
|
|
21317
21335
|
const defaultTokens = block.default ?? [];
|
|
21318
21336
|
const roleTokens = block[selectedRoleId];
|
|
21319
21337
|
const moduleLabel = moduleNames?.[moduleId] ?? moduleId;
|
|
21320
21338
|
return /* @__PURE__ */ jsxs166(Fragment55, { children: [
|
|
21321
|
-
/* @__PURE__ */
|
|
21339
|
+
/* @__PURE__ */ jsx256("tr", { className: "border-b bg-muted/40", children: /* @__PURE__ */ jsx256(
|
|
21322
21340
|
"td",
|
|
21323
21341
|
{
|
|
21324
21342
|
colSpan: ACTION_TYPES.length + 1,
|
|
@@ -21327,12 +21345,12 @@ function RbacByRoleContainer() {
|
|
|
21327
21345
|
}
|
|
21328
21346
|
) }),
|
|
21329
21347
|
/* @__PURE__ */ jsxs166("tr", { className: "border-b bg-muted/20", children: [
|
|
21330
|
-
/* @__PURE__ */
|
|
21331
|
-
ACTION_TYPES.map((action) => /* @__PURE__ */
|
|
21348
|
+
/* @__PURE__ */ jsx256("td", { className: "px-4 py-1 text-xs text-muted-foreground", children: t("rbac.defaults") }),
|
|
21349
|
+
ACTION_TYPES.map((action) => /* @__PURE__ */ jsx256("td", { className: "px-2 py-1", children: /* @__PURE__ */ jsx256(RbacPermissionCell, { value: cellValue2(defaultTokens, action) }) }, action))
|
|
21332
21350
|
] }),
|
|
21333
21351
|
/* @__PURE__ */ jsxs166("tr", { className: "border-b last:border-b-0", children: [
|
|
21334
|
-
/* @__PURE__ */
|
|
21335
|
-
ACTION_TYPES.map((action) => /* @__PURE__ */
|
|
21352
|
+
/* @__PURE__ */ jsx256("td", { className: "px-4 py-1 text-xs font-medium text-muted-foreground", children: roleNames?.[selectedRoleId] ?? selectedRoleId }),
|
|
21353
|
+
ACTION_TYPES.map((action) => /* @__PURE__ */ jsx256("td", { className: "px-2 py-1", children: /* @__PURE__ */ jsx256(
|
|
21336
21354
|
CellButton3,
|
|
21337
21355
|
{
|
|
21338
21356
|
moduleId,
|
|
@@ -21346,9 +21364,9 @@ function RbacByRoleContainer() {
|
|
|
21346
21364
|
] })
|
|
21347
21365
|
] }, moduleId);
|
|
21348
21366
|
}) })
|
|
21349
|
-
] }) }) }) : /* @__PURE__ */
|
|
21367
|
+
] }) }) }) : /* @__PURE__ */ jsx256("p", { className: "text-muted-foreground text-sm", children: t("rbac.select_role_prompt") }) })
|
|
21350
21368
|
] }),
|
|
21351
|
-
/* @__PURE__ */
|
|
21369
|
+
/* @__PURE__ */ jsx256(
|
|
21352
21370
|
RbacPermissionPicker,
|
|
21353
21371
|
{
|
|
21354
21372
|
open: !!activePicker,
|
|
@@ -21740,6 +21758,7 @@ export {
|
|
|
21740
21758
|
PageContentContainer,
|
|
21741
21759
|
cellComponent,
|
|
21742
21760
|
cellDate,
|
|
21761
|
+
cellDateTime,
|
|
21743
21762
|
cellId,
|
|
21744
21763
|
cellLink,
|
|
21745
21764
|
cellUrl,
|
|
@@ -21876,4 +21895,4 @@ export {
|
|
|
21876
21895
|
useOAuthClients,
|
|
21877
21896
|
useOAuthClient
|
|
21878
21897
|
};
|
|
21879
|
-
//# sourceMappingURL=chunk-
|
|
21898
|
+
//# sourceMappingURL=chunk-JUM7DE6J.mjs.map
|