@igstack/app-catalog-frontend-core 0.2.0 → 0.3.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/esm/api/infra/trpc.d.ts +0 -1491
- package/dist/esm/modules/appCatalog/context/AppCatalogContext.js +1 -0
- package/dist/esm/modules/appCatalog/context/AppCatalogContext.js.map +1 -1
- package/dist/esm/modules/appCatalog/ui/filters/FilterBar.js +23 -11
- package/dist/esm/modules/appCatalog/ui/filters/FilterBar.js.map +1 -1
- package/dist/esm/modules/appCatalog/ui/grid/AppCatalogGrid.d.ts +5 -1
- package/dist/esm/modules/appCatalog/ui/grid/AppCatalogGrid.js +146 -56
- package/dist/esm/modules/appCatalog/ui/grid/AppCatalogGrid.js.map +1 -1
- package/dist/esm/modules/appCatalog/ui/pages/AppCatalogPage.js +20 -1
- package/dist/esm/modules/appCatalog/ui/pages/AppCatalogPage.js.map +1 -1
- package/dist/esm/modules/auth/AuthContext.js +1 -1
- package/dist/esm/modules/auth/AuthModalContext.js +1 -1
- package/dist/esm/modules/auth/authClient.d.ts +2 -2
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/schemas.js +4 -37
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/schemas.js.map +1 -1
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/api.js +2 -10
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/api.js.map +1 -1
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/checks.js +1 -1
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/json-schema-processors.js +0 -44
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/json-schema-processors.js.map +1 -1
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/parse.js +0 -4
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/parse.js.map +1 -1
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/regexes.js +0 -2
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/regexes.js.map +1 -1
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/schemas.js +4 -49
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/schemas.js.map +1 -1
- package/dist/esm/routeTree.gen.d.ts +3 -164
- package/dist/esm/routeTree.gen.js +8 -80
- package/dist/esm/routeTree.gen.js.map +1 -1
- package/dist/esm/ui/button.d.ts +1 -1
- package/dist/esm/ui/card.js +1 -48
- package/dist/esm/ui/card.js.map +1 -1
- package/dist/esm/ui/command.js +1 -15
- package/dist/esm/ui/command.js.map +1 -1
- package/dist/esm/ui/components/header/Header.js +2 -11
- package/dist/esm/ui/components/header/Header.js.map +1 -1
- package/dist/esm/ui/input-group.js +125 -0
- package/dist/esm/ui/input-group.js.map +1 -0
- package/package.json +3 -3
- package/src/modules/appCatalog/ui/components/AppDetailModal.tsx +2 -21
- package/src/routeTree.gen.ts +2 -220
- package/src/ui/components/header/Header.tsx +2 -12
- package/dist/esm/components/IconPickerDialog.d.ts +0 -8
- package/dist/esm/components/IconPickerDialog.js +0 -98
- package/dist/esm/components/IconPickerDialog.js.map +0 -1
- package/dist/esm/components/IconPickerField.d.ts +0 -9
- package/dist/esm/components/IconPickerField.js +0 -76
- package/dist/esm/components/IconPickerField.js.map +0 -1
- package/dist/esm/modules/admin-base/components/AdminChat.d.ts +0 -1
- package/dist/esm/modules/admin-base/components/AdminChat.js +0 -82
- package/dist/esm/modules/admin-base/components/AdminChat.js.map +0 -1
- package/dist/esm/modules/admin-base/components/AdminLayout.d.ts +0 -5
- package/dist/esm/modules/admin-base/components/AdminLayout.js +0 -83
- package/dist/esm/modules/admin-base/components/AdminLayout.js.map +0 -1
- package/dist/esm/modules/admin-base/components/AdminWelcome.d.ts +0 -1
- package/dist/esm/modules/admin-base/components/AdminWelcome.js +0 -37
- package/dist/esm/modules/admin-base/components/AdminWelcome.js.map +0 -1
- package/dist/esm/modules/admin-base/context/AdminConfigContext.d.ts +0 -8
- package/dist/esm/modules/admin-base/context/AdminConfigContext.js +0 -27
- package/dist/esm/modules/admin-base/context/AdminConfigContext.js.map +0 -1
- package/dist/esm/modules/admin-base/index.d.ts +0 -5
- package/dist/esm/modules/admin-base/types/adminTypes.d.ts +0 -10
- package/dist/esm/modules/appCatalog/AppCatalogAdminPage.d.ts +0 -1
- package/dist/esm/modules/appCatalog/AppCatalogAdminPage.js +0 -196
- package/dist/esm/modules/appCatalog/AppCatalogAdminPage.js.map +0 -1
- package/dist/esm/modules/appCatalog/ScreenshotItem.js +0 -57
- package/dist/esm/modules/appCatalog/ScreenshotItem.js.map +0 -1
- package/dist/esm/modules/appCatalog/ScreenshotManager.js +0 -155
- package/dist/esm/modules/appCatalog/ScreenshotManager.js.map +0 -1
- package/dist/esm/modules/approvalMethod/AccessRequestFormFields.d.ts +0 -7
- package/dist/esm/modules/approvalMethod/AccessRequestFormFields.js +0 -323
- package/dist/esm/modules/approvalMethod/AccessRequestFormFields.js.map +0 -1
- package/dist/esm/modules/approvalMethod/ApprovalMethodForm.d.ts +0 -14
- package/dist/esm/modules/approvalMethod/ApprovalMethodForm.js +0 -227
- package/dist/esm/modules/approvalMethod/ApprovalMethodForm.js.map +0 -1
- package/dist/esm/modules/approvalMethod/ApprovalMethodSelector.d.ts +0 -7
- package/dist/esm/modules/approvalMethod/ApprovalMethodSelector.js +0 -124
- package/dist/esm/modules/approvalMethod/ApprovalMethodSelector.js.map +0 -1
- package/dist/esm/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.d.ts +0 -381
- package/dist/esm/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.js +0 -26
- package/dist/esm/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.js.map +0 -1
- package/dist/esm/modules/auth/authUtils.js +0 -25
- package/dist/esm/modules/auth/authUtils.js.map +0 -1
- package/dist/esm/modules/icons/IconManagementPage.d.ts +0 -1
- package/dist/esm/modules/icons/IconManagementPage.js +0 -177
- package/dist/esm/modules/icons/IconManagementPage.js.map +0 -1
- package/dist/esm/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.2/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js +0 -60
- package/dist/esm/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.2/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js.map +0 -1
- package/dist/esm/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.2_react@19.1.2__react@19.1.2/node_modules/@dnd-kit/core/dist/core.esm.js +0 -3055
- package/dist/esm/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.2_react@19.1.2__react@19.1.2/node_modules/@dnd-kit/core/dist/core.esm.js.map +0 -1
- package/dist/esm/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.2_react@19.1.2__react@19.1.2__react@19.1.2/node_modules/@dnd-kit/sortable/dist/sortable.esm.js +0 -593
- package/dist/esm/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.2_react@19.1.2__react@19.1.2__react@19.1.2/node_modules/@dnd-kit/sortable/dist/sortable.esm.js.map +0 -1
- package/dist/esm/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.2/node_modules/@dnd-kit/utilities/dist/utilities.esm.js +0 -302
- package/dist/esm/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.2/node_modules/@dnd-kit/utilities/dist/utilities.esm.js.map +0 -1
- package/dist/esm/node_modules/.pnpm/@hookform_resolvers@5.2.2_react-hook-form@7.71.1_react@19.1.2_/node_modules/@hookform/resolvers/dist/resolvers.js +0 -34
- package/dist/esm/node_modules/.pnpm/@hookform_resolvers@5.2.2_react-hook-form@7.71.1_react@19.1.2_/node_modules/@hookform/resolvers/dist/resolvers.js.map +0 -1
- package/dist/esm/node_modules/.pnpm/@hookform_resolvers@5.2.2_react-hook-form@7.71.1_react@19.1.2_/node_modules/@hookform/resolvers/zod/dist/zod.js +0 -94
- package/dist/esm/node_modules/.pnpm/@hookform_resolvers@5.2.2_react-hook-form@7.71.1_react@19.1.2_/node_modules/@hookform/resolvers/zod/dist/zod.js.map +0 -1
- package/dist/esm/node_modules/.pnpm/react-hook-form@7.71.1_react@19.1.2/node_modules/react-hook-form/dist/index.esm.js +0 -1894
- package/dist/esm/node_modules/.pnpm/react-hook-form@7.71.1_react@19.1.2/node_modules/react-hook-form/dist/index.esm.js.map +0 -1
- package/dist/esm/routes/admin/app-for-catalog/$id.d.ts +0 -5
- package/dist/esm/routes/admin/app-for-catalog/_id.js +0 -67
- package/dist/esm/routes/admin/app-for-catalog/_id.js.map +0 -1
- package/dist/esm/routes/admin/app-for-catalog/_id2.js +0 -321
- package/dist/esm/routes/admin/app-for-catalog/_id2.js.map +0 -1
- package/dist/esm/routes/admin/app-for-catalog/index.d.ts +0 -1
- package/dist/esm/routes/admin/app-for-catalog/index.js +0 -9
- package/dist/esm/routes/admin/app-for-catalog/index.js.map +0 -1
- package/dist/esm/routes/admin/app-for-catalog/index2.js +0 -12
- package/dist/esm/routes/admin/app-for-catalog/index2.js.map +0 -1
- package/dist/esm/routes/admin/app-for-catalog.d.ts +0 -1
- package/dist/esm/routes/admin/app-for-catalog.js +0 -14
- package/dist/esm/routes/admin/app-for-catalog.js.map +0 -1
- package/dist/esm/routes/admin/app-for-catalog2.js +0 -9
- package/dist/esm/routes/admin/app-for-catalog2.js.map +0 -1
- package/dist/esm/routes/admin/approval-methods/index.d.ts +0 -32
- package/dist/esm/routes/admin/approval-methods/index.js +0 -24
- package/dist/esm/routes/admin/approval-methods/index.js.map +0 -1
- package/dist/esm/routes/admin/approval-methods/index2.js +0 -100
- package/dist/esm/routes/admin/approval-methods/index2.js.map +0 -1
- package/dist/esm/routes/admin/approval-methods.d.ts +0 -1
- package/dist/esm/routes/admin/approval-methods.js +0 -14
- package/dist/esm/routes/admin/approval-methods.js.map +0 -1
- package/dist/esm/routes/admin/approval-methods2.js +0 -7
- package/dist/esm/routes/admin/approval-methods2.js.map +0 -1
- package/dist/esm/routes/admin/chat.d.ts +0 -1
- package/dist/esm/routes/admin/chat.js +0 -14
- package/dist/esm/routes/admin/chat.js.map +0 -1
- package/dist/esm/routes/admin/chat2.js +0 -9
- package/dist/esm/routes/admin/chat2.js.map +0 -1
- package/dist/esm/routes/admin/icons.d.ts +0 -1
- package/dist/esm/routes/admin/icons.js +0 -14
- package/dist/esm/routes/admin/icons.js.map +0 -1
- package/dist/esm/routes/admin/icons2.js +0 -12
- package/dist/esm/routes/admin/icons2.js.map +0 -1
- package/dist/esm/routes/admin/index.d.ts +0 -1
- package/dist/esm/routes/admin/index.js +0 -9
- package/dist/esm/routes/admin/index.js.map +0 -1
- package/dist/esm/routes/admin/index2.js +0 -9
- package/dist/esm/routes/admin/index2.js.map +0 -1
- package/dist/esm/routes/admin.d.ts +0 -1
- package/dist/esm/routes/admin.js +0 -37
- package/dist/esm/routes/admin.js.map +0 -1
- package/dist/esm/routes/admin2.js +0 -18
- package/dist/esm/routes/admin2.js.map +0 -1
- package/dist/esm/ui/alert-dialog.js +0 -141
- package/dist/esm/ui/alert-dialog.js.map +0 -1
- package/dist/esm/ui/breadcrumb.js +0 -84
- package/dist/esm/ui/breadcrumb.js.map +0 -1
- package/dist/esm/ui/components/Breadcrumbs.js +0 -36
- package/dist/esm/ui/components/Breadcrumbs.js.map +0 -1
- package/dist/esm/ui/crud-list/CrudList.js +0 -189
- package/dist/esm/ui/crud-list/CrudList.js.map +0 -1
- package/dist/esm/ui/editable-list/EditableListField.js +0 -130
- package/dist/esm/ui/editable-list/EditableListField.js.map +0 -1
- package/dist/esm/ui/form.js +0 -134
- package/dist/esm/ui/form.js.map +0 -1
- package/dist/esm/ui/linkExternal.js +0 -26
- package/dist/esm/ui/linkExternal.js.map +0 -1
- package/dist/esm/ui/markdown-editor/MarkdownEditor.js +0 -116
- package/dist/esm/ui/markdown-editor/MarkdownEditor.js.map +0 -1
- package/dist/esm/ui/markdown-editor/MarkdownToolbar.js +0 -99
- package/dist/esm/ui/markdown-editor/MarkdownToolbar.js.map +0 -1
- package/dist/esm/ui/scroll-area.js +0 -62
- package/dist/esm/ui/scroll-area.js.map +0 -1
- package/dist/esm/ui/select.js +0 -138
- package/dist/esm/ui/select.js.map +0 -1
- package/dist/esm/ui/textarea.js +0 -19
- package/dist/esm/ui/textarea.js.map +0 -1
- package/src/components/IconPickerDialog.tsx +0 -136
- package/src/components/IconPickerField.tsx +0 -88
- package/src/modules/admin-base/components/AdminChat.tsx +0 -122
- package/src/modules/admin-base/components/AdminLayout.tsx +0 -111
- package/src/modules/admin-base/components/AdminWelcome.tsx +0 -52
- package/src/modules/admin-base/context/AdminConfigContext.tsx +0 -36
- package/src/modules/admin-base/index.ts +0 -16
- package/src/modules/admin-base/types/adminTypes.ts +0 -11
- package/src/modules/appCatalog/AppCatalogAdminPage.tsx +0 -274
- package/src/modules/approvalMethod/AccessRequestFormFields.tsx +0 -393
- package/src/modules/approvalMethod/ApprovalMethodForm.tsx +0 -323
- package/src/modules/approvalMethod/ApprovalMethodSelector.tsx +0 -150
- package/src/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.ts +0 -34
- package/src/modules/icons/IconManagementPage.tsx +0 -245
- package/src/routes/admin/app-for-catalog/$id.tsx +0 -571
- package/src/routes/admin/app-for-catalog/index.tsx +0 -19
- package/src/routes/admin/app-for-catalog.tsx +0 -12
- package/src/routes/admin/approval-methods/index.tsx +0 -161
- package/src/routes/admin/approval-methods.tsx +0 -10
- package/src/routes/admin/chat.tsx +0 -13
- package/src/routes/admin/icons.tsx +0 -22
- package/src/routes/admin/index.tsx +0 -9
- package/src/routes/admin.tsx +0 -60
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useQueryClient, useQuery, useMutation } from "@tanstack/react-query";
|
|
3
|
-
import { useTRPC } from "../../../api/infra/trpc.js";
|
|
4
|
-
import { ApprovalMethodForm } from "../../../modules/approvalMethod/ApprovalMethodForm.js";
|
|
5
|
-
import { Badge } from "../../../ui/badge.js";
|
|
6
|
-
import { CrudList } from "../../../ui/crud-list/CrudList.js";
|
|
7
|
-
import { Route } from "./index.js";
|
|
8
|
-
const TYPE_LABELS = {
|
|
9
|
-
service: "Service",
|
|
10
|
-
personTeam: "Person/Team",
|
|
11
|
-
custom: "Custom"
|
|
12
|
-
};
|
|
13
|
-
const TYPE_COLORS = {
|
|
14
|
-
service: "default",
|
|
15
|
-
personTeam: "secondary",
|
|
16
|
-
custom: "outline"
|
|
17
|
-
};
|
|
18
|
-
const columns = [{
|
|
19
|
-
accessorKey: "displayName",
|
|
20
|
-
header: "Name"
|
|
21
|
-
}, {
|
|
22
|
-
accessorKey: "type",
|
|
23
|
-
header: "Type",
|
|
24
|
-
cell: ({
|
|
25
|
-
row
|
|
26
|
-
}) => /* @__PURE__ */ jsx(Badge, { variant: TYPE_COLORS[row.original.type], children: TYPE_LABELS[row.original.type] })
|
|
27
|
-
}, {
|
|
28
|
-
accessorKey: "config",
|
|
29
|
-
header: "Configuration",
|
|
30
|
-
cell: ({
|
|
31
|
-
row
|
|
32
|
-
}) => {
|
|
33
|
-
const config = row.original.config;
|
|
34
|
-
if (!config) return /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "-" });
|
|
35
|
-
if (row.original.type === "service" && config.url) {
|
|
36
|
-
return /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground truncate max-w-[200px]", children: config.url });
|
|
37
|
-
}
|
|
38
|
-
if (row.original.type === "personTeam" && Array.isArray(config.reachOutContacts)) {
|
|
39
|
-
return /* @__PURE__ */ jsxs("span", { className: "text-sm text-muted-foreground", children: [
|
|
40
|
-
config.reachOutContacts.length,
|
|
41
|
-
" contact(s)"
|
|
42
|
-
] });
|
|
43
|
-
}
|
|
44
|
-
return /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "-" });
|
|
45
|
-
}
|
|
46
|
-
}];
|
|
47
|
-
function RouteComponent() {
|
|
48
|
-
const trpc = useTRPC();
|
|
49
|
-
const queryClient = useQueryClient();
|
|
50
|
-
const loaderData = Route.useLoaderData();
|
|
51
|
-
const {
|
|
52
|
-
data: approvalMethods = []
|
|
53
|
-
} = useQuery({
|
|
54
|
-
...trpc.approvalMethod.list.queryOptions(),
|
|
55
|
-
initialData: "approvalMethods" in loaderData ? loaderData.approvalMethods : []
|
|
56
|
-
});
|
|
57
|
-
const createMutation = useMutation({
|
|
58
|
-
...trpc.approvalMethod.create.mutationOptions(),
|
|
59
|
-
onSuccess: () => {
|
|
60
|
-
queryClient.invalidateQueries({
|
|
61
|
-
queryKey: trpc.approvalMethod.list.queryKey()
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
const updateMutation = useMutation({
|
|
66
|
-
...trpc.approvalMethod.update.mutationOptions(),
|
|
67
|
-
onSuccess: () => {
|
|
68
|
-
queryClient.invalidateQueries({
|
|
69
|
-
queryKey: trpc.approvalMethod.list.queryKey()
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
const deleteMutation = useMutation({
|
|
74
|
-
...trpc.approvalMethod.delete.mutationOptions(),
|
|
75
|
-
onSuccess: () => {
|
|
76
|
-
queryClient.invalidateQueries({
|
|
77
|
-
queryKey: trpc.approvalMethod.list.queryKey()
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
return /* @__PURE__ */ jsx("div", { className: "p-6", children: /* @__PURE__ */ jsx(CrudList, { data: approvalMethods, columns, getRowId: (item) => item.slug, title: "Approval Methods", createButtonLabel: "Add Method", emptyMessage: "No approval methods configured", renderForm: ({
|
|
82
|
-
mode,
|
|
83
|
-
item,
|
|
84
|
-
onSubmit,
|
|
85
|
-
onCancel,
|
|
86
|
-
isPending
|
|
87
|
-
}) => /* @__PURE__ */ jsx(ApprovalMethodForm, { mode, initialData: item, onSubmit, onCancel, isPending }), onCreate: async (data) => {
|
|
88
|
-
await createMutation.mutateAsync(data);
|
|
89
|
-
}, onUpdate: async (data) => {
|
|
90
|
-
await updateMutation.mutateAsync(data);
|
|
91
|
-
}, onDelete: async (item) => {
|
|
92
|
-
await deleteMutation.mutateAsync({
|
|
93
|
-
slug: item.slug
|
|
94
|
-
});
|
|
95
|
-
} }) });
|
|
96
|
-
}
|
|
97
|
-
export {
|
|
98
|
-
RouteComponent as component
|
|
99
|
-
};
|
|
100
|
-
//# sourceMappingURL=index2.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index2.js","sources":["../../../../../src/routes/admin/approval-methods/index.tsx?tsr-split=component"],"sourcesContent":["import type { ApprovalMethodType, TRPCRouter } from '@igstack/app-catalog-backend-core'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { createFileRoute } from '@tanstack/react-router'\nimport type { TRPCClient } from '@trpc/client'\nimport { useTRPC } from '~/api/infra/trpc'\nimport { ApprovalMethodForm } from '~/modules/approvalMethod/ApprovalMethodForm'\nimport { Badge } from '~/ui/badge'\nimport { CrudList } from '~/ui/crud-list'\n\n/**\n * ApprovalMethod type as returned by tRPC (dates serialized to strings)\n */\ntype SerializedApprovalMethod = Awaited<\n ReturnType<TRPCClient<TRPCRouter>['approvalMethod']['list']['query']>\n>[number]\n\nexport const Route = createFileRoute('/admin/approval-methods/')({\n component: RouteComponent,\n async loader({ context }) {\n const { trpcClient } = context\n return {\n approvalMethods: await trpcClient.approvalMethod.list.query(),\n }\n },\n staticData: {\n breadcrumb: {\n title: 'List',\n },\n },\n})\n\nconst TYPE_LABELS: Record<ApprovalMethodType, string> = {\n service: 'Service',\n personTeam: 'Person/Team',\n custom: 'Custom',\n}\n\nconst TYPE_COLORS: Record<\n ApprovalMethodType,\n 'default' | 'outline' | 'secondary'\n> = {\n service: 'default',\n personTeam: 'secondary',\n custom: 'outline',\n}\n\nconst columns: Array<ColumnDef<SerializedApprovalMethod>> = [\n {\n accessorKey: 'displayName',\n header: 'Name',\n },\n {\n accessorKey: 'type',\n header: 'Type',\n cell: ({ row }) => (\n <Badge variant={TYPE_COLORS[row.original.type]}>\n {TYPE_LABELS[row.original.type]}\n </Badge>\n ),\n },\n {\n accessorKey: 'config',\n header: 'Configuration',\n cell: ({ row }) => {\n const config = row.original.config as Record<string, unknown> | null\n if (!config) return <span className=\"text-muted-foreground\">-</span>\n\n // Show relevant config preview based on type\n if (row.original.type === 'service' && config.url) {\n return (\n <span className=\"text-sm text-muted-foreground truncate max-w-[200px]\">\n {config.url as string}\n </span>\n )\n }\n if (\n row.original.type === 'personTeam' &&\n Array.isArray(config.reachOutContacts)\n ) {\n return (\n <span className=\"text-sm text-muted-foreground\">\n {config.reachOutContacts.length} contact(s)\n </span>\n )\n }\n return <span className=\"text-muted-foreground\">-</span>\n },\n },\n]\n\nfunction RouteComponent() {\n const trpc = useTRPC()\n const queryClient = useQueryClient()\n const loaderData = Route.useLoaderData()\n\n // Use query with loader data as initial data\n const { data: approvalMethods = [] } = useQuery({\n ...trpc.approvalMethod.list.queryOptions(),\n initialData:\n 'approvalMethods' in loaderData ? loaderData.approvalMethods : [],\n })\n\n const createMutation = useMutation({\n ...trpc.approvalMethod.create.mutationOptions(),\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: trpc.approvalMethod.list.queryKey(),\n })\n },\n })\n\n const updateMutation = useMutation({\n ...trpc.approvalMethod.update.mutationOptions(),\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: trpc.approvalMethod.list.queryKey(),\n })\n },\n })\n\n const deleteMutation = useMutation({\n ...trpc.approvalMethod.delete.mutationOptions(),\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: trpc.approvalMethod.list.queryKey(),\n })\n },\n })\n\n return (\n <div className=\"p-6\">\n <CrudList\n data={approvalMethods}\n columns={columns as any}\n getRowId={(item) => item.slug}\n title=\"Approval Methods\"\n createButtonLabel=\"Add Method\"\n emptyMessage=\"No approval methods configured\"\n renderForm={({ mode, item, onSubmit, onCancel, isPending }) => (\n <ApprovalMethodForm\n mode={mode}\n initialData={item as any}\n onSubmit={onSubmit}\n onCancel={onCancel}\n isPending={isPending}\n />\n )}\n onCreate={async (data: any) => {\n await createMutation.mutateAsync(data)\n }}\n onUpdate={async (data: any) => {\n await updateMutation.mutateAsync(data)\n }}\n onDelete={async (item) => {\n await deleteMutation.mutateAsync({ slug: item.slug })\n }}\n />\n </div>\n )\n}\n"],"names":["TYPE_LABELS","service","personTeam","custom","TYPE_COLORS","columns","accessorKey","header","cell","row","original","type","config","url","Array","isArray","reachOutContacts","length","RouteComponent","trpc","useTRPC","queryClient","useQueryClient","loaderData","Route","useLoaderData","data","approvalMethods","useQuery","approvalMethod","list","queryOptions","initialData","createMutation","useMutation","create","mutationOptions","onSuccess","invalidateQueries","queryKey","updateMutation","update","deleteMutation","delete","item","slug","mode","onSubmit","onCancel","isPending","mutateAsync"],"mappings":";;;;;;;AAgCA,MAAMA,cAAkD;AAAA,EACtDC,SAAS;AAAA,EACTC,YAAY;AAAA,EACZC,QAAQ;AACV;AAEA,MAAMC,cAGF;AAAA,EACFH,SAAS;AAAA,EACTC,YAAY;AAAA,EACZC,QAAQ;AACV;AAEA,MAAME,UAAsD,CAC1D;AAAA,EACEC,aAAa;AAAA,EACbC,QAAQ;AACV,GACA;AAAA,EACED,aAAa;AAAA,EACbC,QAAQ;AAAA,EACRC,MAAMA,CAAC;AAAA,IAAEC;AAAAA,EAAAA,MACP,oBAAC,OAAA,EAAM,SAASL,YAAYK,IAAIC,SAASC,IAAI,GAC1CX,UAAAA,YAAYS,IAAIC,SAASC,IAAI,EAAA,CAChC;AAEJ,GACA;AAAA,EACEL,aAAa;AAAA,EACbC,QAAQ;AAAA,EACRC,MAAMA,CAAC;AAAA,IAAEC;AAAAA,EAAAA,MAAU;AACjB,UAAMG,SAASH,IAAIC,SAASE;AAC5B,QAAI,CAACA,OAAQ,4BAAQ,QAAA,EAAK,WAAU,yBAAwB,UAAA,KAAC;AAG7D,QAAIH,IAAIC,SAASC,SAAS,aAAaC,OAAOC,KAAK;AACjD,aACE,oBAAC,QAAA,EAAK,WAAU,wDACbD,iBAAOC,KACV;AAAA,IAEJ;AACA,QACEJ,IAAIC,SAASC,SAAS,gBACtBG,MAAMC,QAAQH,OAAOI,gBAAgB,GACrC;AACA,aACE,qBAAC,QAAA,EAAK,WAAU,iCACbJ,UAAAA;AAAAA,QAAAA,OAAOI,iBAAiBC;AAAAA,QAAO;AAAA,MAAA,GAClC;AAAA,IAEJ;AACA,WAAO,oBAAC,QAAA,EAAK,WAAU,yBAAwB,UAAA,KAAC;AAAA,EAClD;AACF,CAAC;AAGH,SAASC,iBAAiB;AACxB,QAAMC,OAAOC,QAAAA;AACb,QAAMC,cAAcC,eAAAA;AACpB,QAAMC,aAAaC,MAAMC,cAAAA;AAGzB,QAAM;AAAA,IAAEC,MAAMC,kBAAkB,CAAA;AAAA,EAAA,IAAOC,SAAS;AAAA,IAC9C,GAAGT,KAAKU,eAAeC,KAAKC,aAAAA;AAAAA,IAC5BC,aACE,qBAAqBT,aAAaA,WAAWI,kBAAkB,CAAA;AAAA,EAAA,CAClE;AAED,QAAMM,iBAAiBC,YAAY;AAAA,IACjC,GAAGf,KAAKU,eAAeM,OAAOC,gBAAAA;AAAAA,IAC9BC,WAAWA,MAAM;AACfhB,kBAAYiB,kBAAkB;AAAA,QAC5BC,UAAUpB,KAAKU,eAAeC,KAAKS,SAAAA;AAAAA,MAAS,CAC7C;AAAA,IACH;AAAA,EAAA,CACD;AAED,QAAMC,iBAAiBN,YAAY;AAAA,IACjC,GAAGf,KAAKU,eAAeY,OAAOL,gBAAAA;AAAAA,IAC9BC,WAAWA,MAAM;AACfhB,kBAAYiB,kBAAkB;AAAA,QAC5BC,UAAUpB,KAAKU,eAAeC,KAAKS,SAAAA;AAAAA,MAAS,CAC7C;AAAA,IACH;AAAA,EAAA,CACD;AAED,QAAMG,iBAAiBR,YAAY;AAAA,IACjC,GAAGf,KAAKU,eAAec,OAAOP,gBAAAA;AAAAA,IAC9BC,WAAWA,MAAM;AACfhB,kBAAYiB,kBAAkB;AAAA,QAC5BC,UAAUpB,KAAKU,eAAeC,KAAKS,SAAAA;AAAAA,MAAS,CAC7C;AAAA,IACH;AAAA,EAAA,CACD;AAED,SACE,oBAAC,SAAI,WAAU,OACb,8BAAC,UAAA,EACC,MAAMZ,iBACN,SACA,UAAWiB,UAASA,KAAKC,MACzB,OAAM,oBACN,mBAAkB,cAClB,cAAa,kCACb,YAAY,CAAC;AAAA,IAAEC;AAAAA,IAAMF;AAAAA,IAAMG;AAAAA,IAAUC;AAAAA,IAAUC;AAAAA,EAAAA,MAC7C,oBAAC,oBAAA,EACC,MACA,aAAaL,MACb,UACA,UACA,UAAA,CAAqB,GAGzB,UAAU,OAAOlB,SAAc;AAC7B,UAAMO,eAAeiB,YAAYxB,IAAI;AAAA,EACvC,GACA,UAAU,OAAOA,SAAc;AAC7B,UAAMc,eAAeU,YAAYxB,IAAI;AAAA,EACvC,GACA,UAAU,OAAOkB,SAAS;AACxB,UAAMF,eAAeQ,YAAY;AAAA,MAAEL,MAAMD,KAAKC;AAAAA,IAAAA,CAAM;AAAA,EACtD,GAAE,EAAA,CAEN;AAEJ;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const Route: import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/admin", "/admin", "/admin", "/admin", undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, ({ context }: import('@tanstack/router-core').BeforeLoadContextOptions<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, unknown, undefined>) => Promise<void>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/approval-methods", "/admin/approval-methods", "/admin/approval-methods", "/admin/approval-methods", undefined, import('@tanstack/router-core').ResolveParams<"/approval-methods">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
|
|
2
|
-
const $$splitComponentImporter = () => import("./approval-methods2.js");
|
|
3
|
-
const Route = createFileRoute("/admin/approval-methods")({
|
|
4
|
-
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
5
|
-
staticData: {
|
|
6
|
-
breadcrumb: {
|
|
7
|
-
title: "Approval Methods"
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
export {
|
|
12
|
-
Route
|
|
13
|
-
};
|
|
14
|
-
//# sourceMappingURL=approval-methods.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"approval-methods.js","sources":["../../../../src/routes/admin/approval-methods.tsx"],"sourcesContent":["import { Outlet, createFileRoute } from '@tanstack/react-router'\n\nexport const Route = createFileRoute('/admin/approval-methods')({\n component: () => <Outlet />,\n staticData: {\n breadcrumb: {\n title: 'Approval Methods',\n },\n },\n})\n"],"names":["Route","createFileRoute","component","lazyRouteComponent","$$splitComponentImporter","staticData","breadcrumb","title"],"mappings":";;AAEO,MAAMA,QAAQC,gBAAgB,yBAAyB,EAAE;AAAA,EAC9DC,WAASC,mBAAAC,0BAAA,WAAA;AAAA,EACTC,YAAY;AAAA,IACVC,YAAY;AAAA,MACVC,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ,CAAC;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"approval-methods2.js","sources":["../../../../src/routes/admin/approval-methods.tsx?tsr-split=component"],"sourcesContent":["import { Outlet, createFileRoute } from '@tanstack/react-router'\n\nexport const Route = createFileRoute('/admin/approval-methods')({\n component: () => <Outlet />,\n staticData: {\n breadcrumb: {\n title: 'Approval Methods',\n },\n },\n})\n"],"names":["SplitComponent"],"mappings":";;AAAgE,MAAAA,iBAGnDA,MAAM,oBAAC,QAAA,CAAA,CAAM;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const Route: import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/admin", "/admin", "/admin", "/admin", undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, ({ context }: import('@tanstack/router-core').BeforeLoadContextOptions<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, unknown, undefined>) => Promise<void>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/chat", "/admin/chat", "/admin/chat", "/admin/chat", undefined, import('@tanstack/router-core').ResolveParams<"/chat">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
|
|
2
|
-
const $$splitComponentImporter = () => import("./chat2.js");
|
|
3
|
-
const Route = createFileRoute("/admin/chat")({
|
|
4
|
-
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
5
|
-
staticData: {
|
|
6
|
-
breadcrumb: {
|
|
7
|
-
title: "Chat"
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
export {
|
|
12
|
-
Route
|
|
13
|
-
};
|
|
14
|
-
//# sourceMappingURL=chat.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sources":["../../../../src/routes/admin/chat.tsx"],"sourcesContent":["import { createFileRoute } from '@tanstack/react-router'\nimport { AdminChat } from '~/modules/admin-base'\n\nexport const Route = createFileRoute('/admin/chat')({\n component: RouteComponent,\n staticData: {\n breadcrumb: { title: 'Chat' },\n },\n})\n\nfunction RouteComponent() {\n return <AdminChat />\n}\n"],"names":["Route","createFileRoute","component","lazyRouteComponent","$$splitComponentImporter","staticData","breadcrumb","title"],"mappings":";;AAGO,MAAMA,QAAQC,gBAAgB,aAAa,EAAE;AAAA,EAClDC,WAASC,mBAAAC,0BAAA,WAAA;AAAA,EACTC,YAAY;AAAA,IACVC,YAAY;AAAA,MAAEC,OAAO;AAAA,IAAA;AAAA,EAAO;AAEhC,CAAC;"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { AdminChat } from "../../modules/admin-base/components/AdminChat.js";
|
|
3
|
-
function RouteComponent() {
|
|
4
|
-
return /* @__PURE__ */ jsx(AdminChat, {});
|
|
5
|
-
}
|
|
6
|
-
export {
|
|
7
|
-
RouteComponent as component
|
|
8
|
-
};
|
|
9
|
-
//# sourceMappingURL=chat2.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chat2.js","sources":["../../../../src/routes/admin/chat.tsx?tsr-split=component"],"sourcesContent":["import { createFileRoute } from '@tanstack/react-router'\nimport { AdminChat } from '~/modules/admin-base'\n\nexport const Route = createFileRoute('/admin/chat')({\n component: RouteComponent,\n staticData: {\n breadcrumb: { title: 'Chat' },\n },\n})\n\nfunction RouteComponent() {\n return <AdminChat />\n}\n"],"names":["RouteComponent"],"mappings":";;AAUA,SAASA,iBAAiB;AACxB,6BAAQ,WAAA,EAAS;AACnB;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const Route: import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/admin", "/admin", "/admin", "/admin", undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, ({ context }: import('@tanstack/router-core').BeforeLoadContextOptions<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, unknown, undefined>) => Promise<void>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/icons", "/admin/icons", "/admin/icons", "/admin/icons", undefined, import('@tanstack/router-core').ResolveParams<"/icons">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
|
|
2
|
-
const $$splitComponentImporter = () => import("./icons2.js");
|
|
3
|
-
const Route = createFileRoute("/admin/icons")({
|
|
4
|
-
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
5
|
-
staticData: {
|
|
6
|
-
breadcrumb: {
|
|
7
|
-
title: "Icons"
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
export {
|
|
12
|
-
Route
|
|
13
|
-
};
|
|
14
|
-
//# sourceMappingURL=icons.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"icons.js","sources":["../../../../src/routes/admin/icons.tsx"],"sourcesContent":["import { createFileRoute } from '@tanstack/react-router'\nimport { IconManagementPage } from '~/modules/icons/IconManagementPage'\n\nexport const Route = createFileRoute('/admin/icons')({\n component: IconsAdminPage,\n staticData: {\n breadcrumb: { title: 'Icons' },\n },\n})\n\nfunction IconsAdminPage() {\n return (\n <div className=\"flex-1 flex flex-col\">\n <div className=\"border-b px-6 py-4\">\n <h2 className=\"text-xl font-semibold\">Icons</h2>\n </div>\n <div className=\"flex-1 overflow-auto p-6\">\n <IconManagementPage />\n </div>\n </div>\n )\n}\n"],"names":["Route","createFileRoute","component","lazyRouteComponent","$$splitComponentImporter","staticData","breadcrumb","title"],"mappings":";;AAGO,MAAMA,QAAQC,gBAAgB,cAAc,EAAE;AAAA,EACnDC,WAASC,mBAAAC,0BAAA,WAAA;AAAA,EACTC,YAAY;AAAA,IACVC,YAAY;AAAA,MAAEC,OAAO;AAAA,IAAA;AAAA,EAAQ;AAEjC,CAAC;"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
-
import { IconManagementPage } from "../../modules/icons/IconManagementPage.js";
|
|
3
|
-
function IconsAdminPage() {
|
|
4
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex-1 flex flex-col", children: [
|
|
5
|
-
/* @__PURE__ */ jsx("div", { className: "border-b px-6 py-4", children: /* @__PURE__ */ jsx("h2", { className: "text-xl font-semibold", children: "Icons" }) }),
|
|
6
|
-
/* @__PURE__ */ jsx("div", { className: "flex-1 overflow-auto p-6", children: /* @__PURE__ */ jsx(IconManagementPage, {}) })
|
|
7
|
-
] });
|
|
8
|
-
}
|
|
9
|
-
export {
|
|
10
|
-
IconsAdminPage as component
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=icons2.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"icons2.js","sources":["../../../../src/routes/admin/icons.tsx?tsr-split=component"],"sourcesContent":["import { createFileRoute } from '@tanstack/react-router'\nimport { IconManagementPage } from '~/modules/icons/IconManagementPage'\n\nexport const Route = createFileRoute('/admin/icons')({\n component: IconsAdminPage,\n staticData: {\n breadcrumb: { title: 'Icons' },\n },\n})\n\nfunction IconsAdminPage() {\n return (\n <div className=\"flex-1 flex flex-col\">\n <div className=\"border-b px-6 py-4\">\n <h2 className=\"text-xl font-semibold\">Icons</h2>\n </div>\n <div className=\"flex-1 overflow-auto p-6\">\n <IconManagementPage />\n </div>\n </div>\n )\n}\n"],"names":["IconsAdminPage"],"mappings":";;AAUA,SAASA,iBAAiB;AACxB,SACE,qBAAC,OAAA,EAAI,WAAU,wBACb,UAAA;AAAA,IAAA,oBAAC,OAAA,EAAI,WAAU,sBACb,UAAA,oBAAC,QAAG,WAAU,yBAAwB,mBAAK,EAAA,CAC7C;AAAA,wBACC,OAAA,EAAI,WAAU,4BACb,UAAA,oBAAC,sBAAkB,EAAA,CACrB;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const Route: import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/admin", "/admin", "/admin", "/admin", undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, ({ context }: import('@tanstack/router-core').BeforeLoadContextOptions<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, unknown, undefined>) => Promise<void>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/", "/admin/", "/admin/", "/admin/", undefined, import('@tanstack/router-core').ResolveParams<"/">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
|
|
2
|
-
const $$splitComponentImporter = () => import("./index2.js");
|
|
3
|
-
const Route = createFileRoute("/admin/")({
|
|
4
|
-
component: lazyRouteComponent($$splitComponentImporter, "component")
|
|
5
|
-
});
|
|
6
|
-
export {
|
|
7
|
-
Route
|
|
8
|
-
};
|
|
9
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/routes/admin/index.tsx"],"sourcesContent":["import { Navigate, createFileRoute } from '@tanstack/react-router'\n\nexport const Route = createFileRoute('/admin/')({\n component: AdminIndexPage,\n})\n\nfunction AdminIndexPage() {\n return <Navigate to=\"/admin/chat\" replace />\n}\n"],"names":["Route","createFileRoute","component","lazyRouteComponent","$$splitComponentImporter"],"mappings":";;AAEO,MAAMA,QAAQC,gBAAgB,SAAS,EAAE;AAAA,EAC9CC,WAASC,mBAAAC,0BAAA,WAAA;AACX,CAAC;"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Navigate } from "@tanstack/react-router";
|
|
3
|
-
function AdminIndexPage() {
|
|
4
|
-
return /* @__PURE__ */ jsx(Navigate, { to: "/admin/chat", replace: true });
|
|
5
|
-
}
|
|
6
|
-
export {
|
|
7
|
-
AdminIndexPage as component
|
|
8
|
-
};
|
|
9
|
-
//# sourceMappingURL=index2.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index2.js","sources":["../../../../src/routes/admin/index.tsx?tsr-split=component"],"sourcesContent":["import { Navigate, createFileRoute } from '@tanstack/react-router'\n\nexport const Route = createFileRoute('/admin/')({\n component: AdminIndexPage,\n})\n\nfunction AdminIndexPage() {\n return <Navigate to=\"/admin/chat\" replace />\n}\n"],"names":["AdminIndexPage"],"mappings":";;AAMA,SAASA,iBAAiB;AACxB,SAAO,oBAAC,UAAA,EAAS,IAAG,eAAc,SAAO,MAAA;AAC3C;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const Route: import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/admin", "/admin", "/admin", "/admin", undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, ({ context }: import('@tanstack/router-core').BeforeLoadContextOptions<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, unknown, undefined>) => Promise<void>, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
package/dist/esm/routes/admin.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
|
|
2
|
-
import { AuthorizationError } from "../errors/AuthorizationError.js";
|
|
3
|
-
import { isAdmin } from "../modules/auth/authUtils.js";
|
|
4
|
-
const $$splitComponentImporter = () => import("./admin2.js");
|
|
5
|
-
const Route = createFileRoute("/admin")({
|
|
6
|
-
beforeLoad: async ({
|
|
7
|
-
context
|
|
8
|
-
}) => {
|
|
9
|
-
const session = await context.trpcClient.auth.getSession.query();
|
|
10
|
-
const user = session.user;
|
|
11
|
-
if (!user) {
|
|
12
|
-
throw new AuthorizationError({
|
|
13
|
-
message: "You must be logged in to access the admin panel",
|
|
14
|
-
resource: "Admin Panel"
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
const authConfig = await context.trpcClient.authConfig.query();
|
|
18
|
-
const adminGroups = authConfig.adminGroups;
|
|
19
|
-
if (!isAdmin(user, adminGroups)) {
|
|
20
|
-
throw new AuthorizationError({
|
|
21
|
-
message: "You need administrator privileges to access this area",
|
|
22
|
-
requiredRoles: adminGroups,
|
|
23
|
-
resource: "Admin Panel"
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
28
|
-
staticData: {
|
|
29
|
-
breadcrumb: {
|
|
30
|
-
title: "Admin"
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
export {
|
|
35
|
-
Route
|
|
36
|
-
};
|
|
37
|
-
//# sourceMappingURL=admin.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"admin.js","sources":["../../../src/routes/admin.tsx"],"sourcesContent":["import { Outlet, createFileRoute } from '@tanstack/react-router'\nimport { ThemeProvider } from '~/components/theme-provider'\nimport { AdminConfigProvider, AdminLayout } from '~/modules/admin-base'\nimport { TopLevelProviders } from '~/ui/layout/TopLevelProviders'\nimport { AuthorizationError } from '~/errors/AuthorizationError'\nimport { isAdmin } from '~/modules/auth/authUtils'\n\nexport const Route = createFileRoute('/admin')({\n beforeLoad: async ({ context }) => {\n // Fetch current user session with groups from tRPC (not better-auth's /api/auth/session)\n const session = await context.trpcClient.auth.getSession.query()\n const user = session.user\n\n // Check if user is authenticated\n if (!user) {\n throw new AuthorizationError({\n message: 'You must be logged in to access the admin panel',\n resource: 'Admin Panel',\n })\n }\n\n // Fetch auth config from backend to get adminGroups\n const authConfig = await context.trpcClient.authConfig.query()\n const adminGroups = authConfig.adminGroups\n\n // Check if user has admin role\n if (!isAdmin(user, adminGroups)) {\n throw new AuthorizationError({\n message: 'You need administrator privileges to access this area',\n requiredRoles: adminGroups,\n resource: 'Admin Panel',\n })\n }\n },\n component: AdminLayoutRoute,\n staticData: {\n breadcrumb: { title: 'Admin' },\n },\n})\n\nfunction AdminLayoutRoute() {\n const { queryClient, trpcClient } = Route.useRouteContext()\n\n return (\n <TopLevelProviders queryClient={queryClient} trpcClient={trpcClient}>\n <ThemeProvider\n attribute=\"class\"\n defaultTheme=\"system\"\n enableSystem\n disableTransitionOnChange\n >\n <AdminConfigProvider>\n <AdminLayout>\n <Outlet />\n </AdminLayout>\n </AdminConfigProvider>\n </ThemeProvider>\n </TopLevelProviders>\n )\n}\n"],"names":["Route","createFileRoute","beforeLoad","context","session","trpcClient","auth","getSession","query","user","AuthorizationError","message","resource","authConfig","adminGroups","isAdmin","requiredRoles","component","lazyRouteComponent","$$splitComponentImporter","staticData","breadcrumb","title"],"mappings":";;;;AAOO,MAAMA,QAAQC,gBAAgB,QAAQ,EAAE;AAAA,EAC7CC,YAAY,OAAO;AAAA,IAAEC;AAAAA,EAAAA,MAAc;AAEjC,UAAMC,UAAU,MAAMD,QAAQE,WAAWC,KAAKC,WAAWC,MAAAA;AACzD,UAAMC,OAAOL,QAAQK;AAGrB,QAAI,CAACA,MAAM;AACT,YAAM,IAAIC,mBAAmB;AAAA,QAC3BC,SAAS;AAAA,QACTC,UAAU;AAAA,MAAA,CACX;AAAA,IACH;AAGA,UAAMC,aAAa,MAAMV,QAAQE,WAAWQ,WAAWL,MAAAA;AACvD,UAAMM,cAAcD,WAAWC;AAG/B,QAAI,CAACC,QAAQN,MAAMK,WAAW,GAAG;AAC/B,YAAM,IAAIJ,mBAAmB;AAAA,QAC3BC,SAAS;AAAA,QACTK,eAAeF;AAAAA,QACfF,UAAU;AAAA,MAAA,CACX;AAAA,IACH;AAAA,EACF;AAAA,EACAK,WAASC,mBAAAC,0BAAA,WAAA;AAAA,EACTC,YAAY;AAAA,IACVC,YAAY;AAAA,MAAEC,OAAO;AAAA,IAAA;AAAA,EAAQ;AAEjC,CAAC;"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Outlet } from "@tanstack/react-router";
|
|
3
|
-
import { ThemeProvider } from "../components/theme-provider.js";
|
|
4
|
-
import { AdminLayout } from "../modules/admin-base/components/AdminLayout.js";
|
|
5
|
-
import { AdminConfigProvider } from "../modules/admin-base/context/AdminConfigContext.js";
|
|
6
|
-
import { TopLevelProviders } from "../ui/layout/TopLevelProviders.js";
|
|
7
|
-
import { Route } from "./admin.js";
|
|
8
|
-
function AdminLayoutRoute() {
|
|
9
|
-
const {
|
|
10
|
-
queryClient,
|
|
11
|
-
trpcClient
|
|
12
|
-
} = Route.useRouteContext();
|
|
13
|
-
return /* @__PURE__ */ jsx(TopLevelProviders, { queryClient, trpcClient, children: /* @__PURE__ */ jsx(ThemeProvider, { attribute: "class", defaultTheme: "system", enableSystem: true, disableTransitionOnChange: true, children: /* @__PURE__ */ jsx(AdminConfigProvider, { children: /* @__PURE__ */ jsx(AdminLayout, { children: /* @__PURE__ */ jsx(Outlet, {}) }) }) }) });
|
|
14
|
-
}
|
|
15
|
-
export {
|
|
16
|
-
AdminLayoutRoute as component
|
|
17
|
-
};
|
|
18
|
-
//# sourceMappingURL=admin2.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"admin2.js","sources":["../../../src/routes/admin.tsx?tsr-split=component"],"sourcesContent":["import { Outlet, createFileRoute } from '@tanstack/react-router'\nimport { ThemeProvider } from '~/components/theme-provider'\nimport { AdminConfigProvider, AdminLayout } from '~/modules/admin-base'\nimport { TopLevelProviders } from '~/ui/layout/TopLevelProviders'\nimport { AuthorizationError } from '~/errors/AuthorizationError'\nimport { isAdmin } from '~/modules/auth/authUtils'\n\nexport const Route = createFileRoute('/admin')({\n beforeLoad: async ({ context }) => {\n // Fetch current user session with groups from tRPC (not better-auth's /api/auth/session)\n const session = await context.trpcClient.auth.getSession.query()\n const user = session.user\n\n // Check if user is authenticated\n if (!user) {\n throw new AuthorizationError({\n message: 'You must be logged in to access the admin panel',\n resource: 'Admin Panel',\n })\n }\n\n // Fetch auth config from backend to get adminGroups\n const authConfig = await context.trpcClient.authConfig.query()\n const adminGroups = authConfig.adminGroups\n\n // Check if user has admin role\n if (!isAdmin(user, adminGroups)) {\n throw new AuthorizationError({\n message: 'You need administrator privileges to access this area',\n requiredRoles: adminGroups,\n resource: 'Admin Panel',\n })\n }\n },\n component: AdminLayoutRoute,\n staticData: {\n breadcrumb: { title: 'Admin' },\n },\n})\n\nfunction AdminLayoutRoute() {\n const { queryClient, trpcClient } = Route.useRouteContext()\n\n return (\n <TopLevelProviders queryClient={queryClient} trpcClient={trpcClient}>\n <ThemeProvider\n attribute=\"class\"\n defaultTheme=\"system\"\n enableSystem\n disableTransitionOnChange\n >\n <AdminConfigProvider>\n <AdminLayout>\n <Outlet />\n </AdminLayout>\n </AdminConfigProvider>\n </ThemeProvider>\n </TopLevelProviders>\n )\n}\n"],"names":["AdminLayoutRoute","queryClient","trpcClient","Route","useRouteContext"],"mappings":";;;;;;;AAwCA,SAASA,mBAAmB;AAC1B,QAAM;AAAA,IAAEC;AAAAA,IAAaC;AAAAA,EAAAA,IAAeC,MAAMC,gBAAAA;AAE1C,SACE,oBAAC,qBAAkB,aAA0B,YAC3C,8BAAC,eAAA,EACC,WAAU,SACV,cAAa,UACb,cAAY,MACZ,2BAAyB,MAEzB,UAAA,oBAAC,qBAAA,EACC,UAAA,oBAAC,aAAA,EACC,8BAAC,QAAA,CAAA,CAAM,EAAA,CACT,EAAA,CACF,EAAA,CACF,GACF;AAEJ;"}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
|
|
3
|
-
import { cn } from "../lib/utils.js";
|
|
4
|
-
import { buttonVariants } from "./button.js";
|
|
5
|
-
function AlertDialog({
|
|
6
|
-
...props
|
|
7
|
-
}) {
|
|
8
|
-
return /* @__PURE__ */ jsx(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
|
|
9
|
-
}
|
|
10
|
-
function AlertDialogPortal({
|
|
11
|
-
...props
|
|
12
|
-
}) {
|
|
13
|
-
return /* @__PURE__ */ jsx(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", ...props });
|
|
14
|
-
}
|
|
15
|
-
function AlertDialogOverlay({
|
|
16
|
-
className,
|
|
17
|
-
...props
|
|
18
|
-
}) {
|
|
19
|
-
return /* @__PURE__ */ jsx(
|
|
20
|
-
AlertDialogPrimitive.Overlay,
|
|
21
|
-
{
|
|
22
|
-
"data-slot": "alert-dialog-overlay",
|
|
23
|
-
className: cn(
|
|
24
|
-
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
|
|
25
|
-
className
|
|
26
|
-
),
|
|
27
|
-
...props
|
|
28
|
-
}
|
|
29
|
-
);
|
|
30
|
-
}
|
|
31
|
-
function AlertDialogContent({
|
|
32
|
-
className,
|
|
33
|
-
...props
|
|
34
|
-
}) {
|
|
35
|
-
return /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
|
|
36
|
-
/* @__PURE__ */ jsx(AlertDialogOverlay, {}),
|
|
37
|
-
/* @__PURE__ */ jsx(
|
|
38
|
-
AlertDialogPrimitive.Content,
|
|
39
|
-
{
|
|
40
|
-
"data-slot": "alert-dialog-content",
|
|
41
|
-
className: cn(
|
|
42
|
-
"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",
|
|
43
|
-
className
|
|
44
|
-
),
|
|
45
|
-
...props
|
|
46
|
-
}
|
|
47
|
-
)
|
|
48
|
-
] });
|
|
49
|
-
}
|
|
50
|
-
function AlertDialogHeader({
|
|
51
|
-
className,
|
|
52
|
-
...props
|
|
53
|
-
}) {
|
|
54
|
-
return /* @__PURE__ */ jsx(
|
|
55
|
-
"div",
|
|
56
|
-
{
|
|
57
|
-
"data-slot": "alert-dialog-header",
|
|
58
|
-
className: cn("flex flex-col gap-2 text-center sm:text-left", className),
|
|
59
|
-
...props
|
|
60
|
-
}
|
|
61
|
-
);
|
|
62
|
-
}
|
|
63
|
-
function AlertDialogFooter({
|
|
64
|
-
className,
|
|
65
|
-
...props
|
|
66
|
-
}) {
|
|
67
|
-
return /* @__PURE__ */ jsx(
|
|
68
|
-
"div",
|
|
69
|
-
{
|
|
70
|
-
"data-slot": "alert-dialog-footer",
|
|
71
|
-
className: cn(
|
|
72
|
-
"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
|
|
73
|
-
className
|
|
74
|
-
),
|
|
75
|
-
...props
|
|
76
|
-
}
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
function AlertDialogTitle({
|
|
80
|
-
className,
|
|
81
|
-
...props
|
|
82
|
-
}) {
|
|
83
|
-
return /* @__PURE__ */ jsx(
|
|
84
|
-
AlertDialogPrimitive.Title,
|
|
85
|
-
{
|
|
86
|
-
"data-slot": "alert-dialog-title",
|
|
87
|
-
className: cn("text-lg font-semibold", className),
|
|
88
|
-
...props
|
|
89
|
-
}
|
|
90
|
-
);
|
|
91
|
-
}
|
|
92
|
-
function AlertDialogDescription({
|
|
93
|
-
className,
|
|
94
|
-
...props
|
|
95
|
-
}) {
|
|
96
|
-
return /* @__PURE__ */ jsx(
|
|
97
|
-
AlertDialogPrimitive.Description,
|
|
98
|
-
{
|
|
99
|
-
"data-slot": "alert-dialog-description",
|
|
100
|
-
className: cn("text-muted-foreground text-sm", className),
|
|
101
|
-
...props
|
|
102
|
-
}
|
|
103
|
-
);
|
|
104
|
-
}
|
|
105
|
-
function AlertDialogAction({
|
|
106
|
-
className,
|
|
107
|
-
...props
|
|
108
|
-
}) {
|
|
109
|
-
return /* @__PURE__ */ jsx(
|
|
110
|
-
AlertDialogPrimitive.Action,
|
|
111
|
-
{
|
|
112
|
-
className: cn(buttonVariants(), className),
|
|
113
|
-
...props
|
|
114
|
-
}
|
|
115
|
-
);
|
|
116
|
-
}
|
|
117
|
-
function AlertDialogCancel({
|
|
118
|
-
className,
|
|
119
|
-
...props
|
|
120
|
-
}) {
|
|
121
|
-
return /* @__PURE__ */ jsx(
|
|
122
|
-
AlertDialogPrimitive.Cancel,
|
|
123
|
-
{
|
|
124
|
-
className: cn(buttonVariants({ variant: "outline" }), className),
|
|
125
|
-
...props
|
|
126
|
-
}
|
|
127
|
-
);
|
|
128
|
-
}
|
|
129
|
-
export {
|
|
130
|
-
AlertDialog,
|
|
131
|
-
AlertDialogAction,
|
|
132
|
-
AlertDialogCancel,
|
|
133
|
-
AlertDialogContent,
|
|
134
|
-
AlertDialogDescription,
|
|
135
|
-
AlertDialogFooter,
|
|
136
|
-
AlertDialogHeader,
|
|
137
|
-
AlertDialogOverlay,
|
|
138
|
-
AlertDialogPortal,
|
|
139
|
-
AlertDialogTitle
|
|
140
|
-
};
|
|
141
|
-
//# sourceMappingURL=alert-dialog.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"alert-dialog.js","sources":["../../../src/ui/alert-dialog.tsx"],"sourcesContent":["import * as React from 'react'\nimport * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog'\n\nimport { cn } from '~/lib/utils'\nimport { buttonVariants } from '~/ui/button'\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n className={cn(\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg',\n className,\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn('flex flex-col gap-2 text-center sm:text-left', className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n 'flex flex-col-reverse gap-2 sm:flex-row sm:justify-end',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn('text-lg font-semibold', className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action>) {\n return (\n <AlertDialogPrimitive.Action\n className={cn(buttonVariants(), className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogCancel({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {\n return (\n <AlertDialogPrimitive.Cancel\n className={cn(buttonVariants({ variant: 'outline' }), className)}\n {...props}\n />\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n"],"names":[],"mappings":";;;;AAMA,SAAS,YAAY;AAAA,EACnB,GAAG;AACL,GAA2D;AACzD,6BAAQ,qBAAqB,MAArB,EAA0B,aAAU,gBAAgB,GAAG,OAAO;AACxE;AAUA,SAAS,kBAAkB;AAAA,EACzB,GAAG;AACL,GAA6D;AAC3D,6BACG,qBAAqB,QAArB,EAA4B,aAAU,uBAAuB,GAAG,OAAO;AAE5E;AAEA,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA,GAAG;AACL,GAA8D;AAC5D,SACE;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA,GAAG;AACL,GAA8D;AAC5D,8BACG,mBAAA,EACC,UAAA;AAAA,IAAA,oBAAC,oBAAA,EAAmB;AAAA,IACpB;AAAA,MAAC,qBAAqB;AAAA,MAArB;AAAA,QACC,aAAU;AAAA,QACV,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QAAA;AAAA,QAED,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EACN,GACF;AAEJ;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA,GAAG;AACL,GAAgC;AAC9B,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,gDAAgD,SAAS;AAAA,MACtE,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA,GAAG;AACL,GAAgC;AAC9B,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA,GAAG;AACL,GAA4D;AAC1D,SACE;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,yBAAyB,SAAS;AAAA,MAC/C,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAAS,uBAAuB;AAAA,EAC9B;AAAA,EACA,GAAG;AACL,GAAkE;AAChE,SACE;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,iCAAiC,SAAS;AAAA,MACvD,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA,GAAG;AACL,GAA6D;AAC3D,SACE;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,WAAW,GAAG,eAAA,GAAkB,SAAS;AAAA,MACxC,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA,GAAG;AACL,GAA6D;AAC3D,SACE;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,WAAW,GAAG,eAAe,EAAE,SAAS,UAAA,CAAW,GAAG,SAAS;AAAA,MAC9D,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;"}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Slot } from "@radix-ui/react-slot";
|
|
3
|
-
import { ChevronRight } from "lucide-react";
|
|
4
|
-
import { cn } from "../lib/utils.js";
|
|
5
|
-
function Breadcrumb({ ...props }) {
|
|
6
|
-
return /* @__PURE__ */ jsx("nav", { "aria-label": "breadcrumb", "data-slot": "breadcrumb", ...props });
|
|
7
|
-
}
|
|
8
|
-
function BreadcrumbList({ className, ...props }) {
|
|
9
|
-
return /* @__PURE__ */ jsx(
|
|
10
|
-
"ol",
|
|
11
|
-
{
|
|
12
|
-
"data-slot": "breadcrumb-list",
|
|
13
|
-
className: cn(
|
|
14
|
-
"text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm wrap-break-word sm:gap-2.5",
|
|
15
|
-
className
|
|
16
|
-
),
|
|
17
|
-
...props
|
|
18
|
-
}
|
|
19
|
-
);
|
|
20
|
-
}
|
|
21
|
-
function BreadcrumbItem({ className, ...props }) {
|
|
22
|
-
return /* @__PURE__ */ jsx(
|
|
23
|
-
"li",
|
|
24
|
-
{
|
|
25
|
-
"data-slot": "breadcrumb-item",
|
|
26
|
-
className: cn("inline-flex items-center gap-1.5", className),
|
|
27
|
-
...props
|
|
28
|
-
}
|
|
29
|
-
);
|
|
30
|
-
}
|
|
31
|
-
function BreadcrumbLink({
|
|
32
|
-
asChild,
|
|
33
|
-
className,
|
|
34
|
-
...props
|
|
35
|
-
}) {
|
|
36
|
-
const Comp = asChild ? Slot : "a";
|
|
37
|
-
return /* @__PURE__ */ jsx(
|
|
38
|
-
Comp,
|
|
39
|
-
{
|
|
40
|
-
"data-slot": "breadcrumb-link",
|
|
41
|
-
className: cn("hover:text-foreground transition-colors", className),
|
|
42
|
-
...props
|
|
43
|
-
}
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
function BreadcrumbPage({ className, ...props }) {
|
|
47
|
-
return /* @__PURE__ */ jsx(
|
|
48
|
-
"span",
|
|
49
|
-
{
|
|
50
|
-
"data-slot": "breadcrumb-page",
|
|
51
|
-
role: "link",
|
|
52
|
-
"aria-disabled": "true",
|
|
53
|
-
"aria-current": "page",
|
|
54
|
-
className: cn("text-foreground font-normal", className),
|
|
55
|
-
...props
|
|
56
|
-
}
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
function BreadcrumbSeparator({
|
|
60
|
-
children,
|
|
61
|
-
className,
|
|
62
|
-
...props
|
|
63
|
-
}) {
|
|
64
|
-
return /* @__PURE__ */ jsx(
|
|
65
|
-
"li",
|
|
66
|
-
{
|
|
67
|
-
"data-slot": "breadcrumb-separator",
|
|
68
|
-
role: "presentation",
|
|
69
|
-
"aria-hidden": "true",
|
|
70
|
-
className: cn("[&>svg]:size-3.5", className),
|
|
71
|
-
...props,
|
|
72
|
-
children: children ?? /* @__PURE__ */ jsx(ChevronRight, {})
|
|
73
|
-
}
|
|
74
|
-
);
|
|
75
|
-
}
|
|
76
|
-
export {
|
|
77
|
-
Breadcrumb,
|
|
78
|
-
BreadcrumbItem,
|
|
79
|
-
BreadcrumbLink,
|
|
80
|
-
BreadcrumbList,
|
|
81
|
-
BreadcrumbPage,
|
|
82
|
-
BreadcrumbSeparator
|
|
83
|
-
};
|
|
84
|
-
//# sourceMappingURL=breadcrumb.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"breadcrumb.js","sources":["../../../src/ui/breadcrumb.tsx"],"sourcesContent":["import { Slot } from '@radix-ui/react-slot'\nimport { ChevronRight, MoreHorizontal } from 'lucide-react'\nimport * as React from 'react'\n\nimport { cn } from '~/lib/utils'\n\nfunction Breadcrumb({ ...props }: React.ComponentProps<'nav'>) {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<'ol'>) {\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n className={cn(\n 'text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm wrap-break-word sm:gap-2.5',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"breadcrumb-item\"\n className={cn('inline-flex items-center gap-1.5', className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot : 'a'\n\n return (\n <Comp\n data-slot=\"breadcrumb-link\"\n className={cn('hover:text-foreground transition-colors', className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"breadcrumb-page\"\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('text-foreground font-normal', className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('[&>svg]:size-3.5', className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n )\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex size-9 items-center justify-center', className)}\n {...props}\n >\n <MoreHorizontal className=\"size-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n )\n}\n\nexport {\n Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem,\n BreadcrumbLink, BreadcrumbList, BreadcrumbPage,\n BreadcrumbSeparator\n}\n\n"],"names":[],"mappings":";;;;AAMA,SAAS,WAAW,EAAE,GAAG,SAAsC;AAC7D,6BAAQ,OAAA,EAAI,cAAW,cAAa,aAAU,cAAc,GAAG,OAAO;AACxE;AAEA,SAAS,eAAe,EAAE,WAAW,GAAG,SAAqC;AAC3E,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAAS,eAAe,EAAE,WAAW,GAAG,SAAqC;AAC3E,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,oCAAoC,SAAS;AAAA,MAC1D,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAEG;AACD,QAAM,OAAO,UAAU,OAAO;AAE9B,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,2CAA2C,SAAS;AAAA,MACjE,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAAS,eAAe,EAAE,WAAW,GAAG,SAAuC;AAC7E,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,MAAK;AAAA,MACL,iBAAc;AAAA,MACd,gBAAa;AAAA,MACb,WAAW,GAAG,+BAA+B,SAAS;AAAA,MACrD,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAAS,oBAAoB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA+B;AAC7B,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,MAAK;AAAA,MACL,eAAY;AAAA,MACZ,WAAW,GAAG,oBAAoB,SAAS;AAAA,MAC1C,GAAG;AAAA,MAEH,UAAA,gCAAa,cAAA,CAAA,CAAa;AAAA,IAAA;AAAA,EAAA;AAGjC;"}
|