@jmruthers/pace-core 0.5.125 → 0.5.127
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/{DataTable-IHD4JP4W.js → DataTable-QZH6SEUM.js} +6 -6
- package/dist/{PublicLoadingSpinner-CaoRbHvJ.d.ts → PublicLoadingSpinner-qqvM-NUe.d.ts} +34 -21
- package/dist/{UnifiedAuthProvider-6C47WIML.js → UnifiedAuthProvider-CQDZRJIS.js} +3 -3
- package/dist/{chunk-ZBLK676C.js → chunk-3CG5L6RN.js} +1 -19
- package/dist/chunk-3CG5L6RN.js.map +1 -0
- package/dist/{chunk-35ZDPMBM.js → chunk-BYXRHAIF.js} +3 -3
- package/dist/{chunk-IJOZZOGT.js → chunk-CQZU6TFE.js} +5 -5
- package/dist/{chunk-C43QIDN3.js → chunk-CTJRBUX2.js} +2 -2
- package/dist/{chunk-ESJTIADP.js → chunk-F64FFPOZ.js} +5 -15
- package/dist/{chunk-ESJTIADP.js.map → chunk-F64FFPOZ.js.map} +1 -1
- package/dist/{chunk-JJVLYIEO.js → chunk-JDBO5NCG.js} +253 -135
- package/dist/chunk-JDBO5NCG.js.map +1 -0
- package/dist/{chunk-4MXVZVNS.js → chunk-TGIY2AR2.js} +2 -2
- package/dist/{chunk-HC7AOIC2.js → chunk-TMUNK34W.js} +428 -446
- package/dist/chunk-TMUNK34W.js.map +1 -0
- package/dist/{chunk-XN6GWKMV.js → chunk-VZ5OR6HD.js} +161 -14
- package/dist/chunk-VZ5OR6HD.js.map +1 -0
- package/dist/{chunk-QWNJCQXZ.js → chunk-ZV77RZMU.js} +2 -2
- package/dist/{chunk-NZGLXZGP.js → chunk-ZYZCRSBD.js} +3 -54
- package/dist/chunk-ZYZCRSBD.js.map +1 -0
- package/dist/components.d.ts +1 -1
- package/dist/components.js +9 -9
- package/dist/hooks.js +7 -7
- package/dist/index.d.ts +1 -1
- package/dist/index.js +12 -12
- package/dist/providers.js +2 -2
- package/dist/rbac/index.js +7 -7
- package/dist/utils.js +1 -1
- package/docs/api/classes/ColumnFactory.md +1 -1
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/classes/InvalidScopeError.md +1 -1
- package/docs/api/classes/MissingUserContextError.md +1 -1
- package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
- package/docs/api/classes/PermissionDeniedError.md +1 -1
- package/docs/api/classes/PublicErrorBoundary.md +1 -1
- package/docs/api/classes/RBACAuditManager.md +1 -1
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +1 -1
- package/docs/api/classes/RBACError.md +1 -1
- package/docs/api/classes/RBACNotInitializedError.md +1 -1
- package/docs/api/classes/SecureSupabaseClient.md +1 -1
- package/docs/api/classes/StorageUtils.md +1 -1
- package/docs/api/enums/FileCategory.md +1 -1
- package/docs/api/interfaces/AggregateConfig.md +1 -1
- package/docs/api/interfaces/ButtonProps.md +1 -1
- package/docs/api/interfaces/CardProps.md +1 -1
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/DataAccessRecord.md +1 -1
- package/docs/api/interfaces/DataRecord.md +1 -1
- package/docs/api/interfaces/DataTableAction.md +1 -1
- package/docs/api/interfaces/DataTableColumn.md +1 -1
- package/docs/api/interfaces/DataTableProps.md +1 -1
- package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
- package/docs/api/interfaces/EmptyStateConfig.md +1 -1
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
- package/docs/api/interfaces/EventAppRoleData.md +1 -1
- package/docs/api/interfaces/FileDisplayProps.md +1 -1
- package/docs/api/interfaces/FileMetadata.md +1 -1
- package/docs/api/interfaces/FileReference.md +1 -1
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadOptions.md +1 -1
- package/docs/api/interfaces/FileUploadProps.md +1 -1
- package/docs/api/interfaces/FooterProps.md +1 -1
- package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
- package/docs/api/interfaces/InputProps.md +1 -1
- package/docs/api/interfaces/LabelProps.md +1 -1
- package/docs/api/interfaces/LoginFormProps.md +1 -1
- package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
- package/docs/api/interfaces/NavigationContextType.md +1 -1
- package/docs/api/interfaces/NavigationGuardProps.md +1 -1
- package/docs/api/interfaces/NavigationItem.md +1 -1
- package/docs/api/interfaces/NavigationMenuProps.md +1 -1
- package/docs/api/interfaces/NavigationProviderProps.md +1 -1
- package/docs/api/interfaces/Organisation.md +1 -1
- package/docs/api/interfaces/OrganisationContextType.md +1 -1
- package/docs/api/interfaces/OrganisationMembership.md +1 -1
- package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
- package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
- package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
- package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
- package/docs/api/interfaces/PageAccessRecord.md +1 -1
- package/docs/api/interfaces/PagePermissionContextType.md +1 -1
- package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
- package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
- package/docs/api/interfaces/PaletteData.md +1 -1
- package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
- package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
- package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
- package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
- package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
- package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
- package/docs/api/interfaces/PublicPageHeaderProps.md +10 -62
- package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
- package/docs/api/interfaces/RBACConfig.md +1 -1
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
- package/docs/api/interfaces/RoleManagementResult.md +1 -1
- package/docs/api/interfaces/RouteAccessRecord.md +1 -1
- package/docs/api/interfaces/RouteConfig.md +1 -1
- package/docs/api/interfaces/SecureDataContextType.md +1 -1
- package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
- package/docs/api/interfaces/StorageConfig.md +1 -1
- package/docs/api/interfaces/StorageFileInfo.md +1 -1
- package/docs/api/interfaces/StorageFileMetadata.md +1 -1
- package/docs/api/interfaces/StorageListOptions.md +1 -1
- package/docs/api/interfaces/StorageListResult.md +1 -1
- package/docs/api/interfaces/StorageUploadOptions.md +1 -1
- package/docs/api/interfaces/StorageUploadResult.md +1 -1
- package/docs/api/interfaces/StorageUrlOptions.md +1 -1
- package/docs/api/interfaces/StyleImport.md +1 -1
- package/docs/api/interfaces/SwitchProps.md +1 -1
- package/docs/api/interfaces/ToastActionElement.md +1 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
- package/docs/api/interfaces/UsePublicFileDisplayOptions.md +1 -1
- package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
- package/docs/api/interfaces/UserEventAccess.md +1 -1
- package/docs/api/interfaces/UserMenuProps.md +1 -1
- package/docs/api/interfaces/UserProfile.md +1 -1
- package/docs/api/modules.md +46 -28
- package/docs/architecture/rpc-function-standards.md +39 -5
- package/package.json +1 -1
- package/src/components/Button/Button.tsx +1 -1
- package/src/components/DataTable/components/ImportModal.tsx +134 -2
- package/src/components/DataTable/components/UnifiedTableBody.tsx +6 -3
- package/src/components/Dialog/Dialog.tsx +0 -13
- package/src/components/FileDisplay/FileDisplay.tsx +76 -0
- package/src/components/Header/Header.tsx +5 -0
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +12 -39
- package/src/components/PublicLayout/PublicPageFooter.tsx +1 -1
- package/src/components/PublicLayout/PublicPageHeader.tsx +69 -128
- package/src/components/PublicLayout/PublicPageLayout.tsx +4 -4
- package/src/components/PublicLayout/PublicPageProvider.tsx +12 -3
- package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +1 -1
- package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +3 -18
- package/src/hooks/__tests__/useAppConfig.unit.test.ts +3 -1
- package/src/hooks/__tests__/usePermissionCache.unit.test.ts +11 -5
- package/src/hooks/__tests__/usePublicRouteParams.unit.test.ts +8 -7
- package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +41 -46
- package/src/hooks/public/usePublicFileDisplay.ts +176 -7
- package/src/hooks/public/usePublicRouteParams.ts +0 -12
- package/src/hooks/useAppConfig.ts +15 -6
- package/src/hooks/usePermissionCache.test.ts +12 -4
- package/src/hooks/usePermissionCache.ts +3 -19
- package/src/hooks/useSecureDataAccess.ts +0 -63
- package/src/services/EventService.ts +0 -19
- package/dist/chunk-HC7AOIC2.js.map +0 -1
- package/dist/chunk-JJVLYIEO.js.map +0 -1
- package/dist/chunk-NZGLXZGP.js.map +0 -1
- package/dist/chunk-XN6GWKMV.js.map +0 -1
- package/dist/chunk-ZBLK676C.js.map +0 -1
- /package/dist/{DataTable-IHD4JP4W.js.map → DataTable-QZH6SEUM.js.map} +0 -0
- /package/dist/{UnifiedAuthProvider-6C47WIML.js.map → UnifiedAuthProvider-CQDZRJIS.js.map} +0 -0
- /package/dist/{chunk-35ZDPMBM.js.map → chunk-BYXRHAIF.js.map} +0 -0
- /package/dist/{chunk-IJOZZOGT.js.map → chunk-CQZU6TFE.js.map} +0 -0
- /package/dist/{chunk-C43QIDN3.js.map → chunk-CTJRBUX2.js.map} +0 -0
- /package/dist/{chunk-4MXVZVNS.js.map → chunk-TGIY2AR2.js.map} +0 -0
- /package/dist/{chunk-QWNJCQXZ.js.map → chunk-ZV77RZMU.js.map} +0 -0
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useCan,
|
|
3
3
|
useResolvedScope
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-BYXRHAIF.js";
|
|
5
5
|
import {
|
|
6
6
|
toast,
|
|
7
7
|
useDataTablePerformance
|
|
8
8
|
} from "./chunk-GKHF54DI.js";
|
|
9
9
|
import {
|
|
10
10
|
init_UnifiedAuthProvider
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-CTJRBUX2.js";
|
|
12
12
|
import {
|
|
13
13
|
useUnifiedAuth
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-3CG5L6RN.js";
|
|
15
15
|
import {
|
|
16
16
|
cn
|
|
17
17
|
} from "./chunk-PYUXFQJ3.js";
|
|
@@ -5502,10 +5502,10 @@ var require_lodash = __commonJS({
|
|
|
5502
5502
|
});
|
|
5503
5503
|
|
|
5504
5504
|
// src/components/DataTable/DataTable.tsx
|
|
5505
|
-
import
|
|
5505
|
+
import React21 from "react";
|
|
5506
5506
|
|
|
5507
5507
|
// src/components/DataTable/components/DataTableCore.tsx
|
|
5508
|
-
import
|
|
5508
|
+
import React20, { useMemo as useMemo14, useCallback as useCallback11, useEffect as useEffect12, useRef as useRef7 } from "react";
|
|
5509
5509
|
import { useReactTable } from "@tanstack/react-table";
|
|
5510
5510
|
import { Edit, Trash, ChevronUp as ChevronUp2, ChevronDown as ChevronDown3, ChevronsUpDown } from "lucide-react";
|
|
5511
5511
|
|
|
@@ -5549,7 +5549,7 @@ function getButtonClasses(variant = "default", size = "default") {
|
|
|
5549
5549
|
outline: "border border-main-300 bg-background shadow-sm hover:bg-acc-400",
|
|
5550
5550
|
secondary: "bg-sec-100 text-sec-900 shadow-sm hover:bg-acc-400",
|
|
5551
5551
|
ghost: "hover:bg-acc-400",
|
|
5552
|
-
link: "text-
|
|
5552
|
+
link: "text-main-700 underline-offset-4 hover:underline hover:drop-shadow-lg hover:drop-shadow-acc-400"
|
|
5553
5553
|
};
|
|
5554
5554
|
const sizeClasses2 = {
|
|
5555
5555
|
default: "h-9 px-4 py-2",
|
|
@@ -7686,7 +7686,7 @@ function SelectEditField2({
|
|
|
7686
7686
|
return false;
|
|
7687
7687
|
};
|
|
7688
7688
|
const hasMatch = (columnDef.fieldOptions || []).some(checkMatch);
|
|
7689
|
-
const shouldShow =
|
|
7689
|
+
const shouldShow = isCreatable && !!columnDef.onCreateNew;
|
|
7690
7690
|
if (import.meta.env.MODE === "development" && isCreatable) {
|
|
7691
7691
|
logger.debug("[SelectEditField] Creatable select check:", {
|
|
7692
7692
|
searchTerm: currentSearch,
|
|
@@ -7695,7 +7695,8 @@ function SelectEditField2({
|
|
|
7695
7695
|
isCreatable,
|
|
7696
7696
|
hasOnCreateNew: !!columnDef.onCreateNew,
|
|
7697
7697
|
shouldShow,
|
|
7698
|
-
fieldOptionsCount: columnDef.fieldOptions?.length || 0
|
|
7698
|
+
fieldOptionsCount: columnDef.fieldOptions?.length || 0,
|
|
7699
|
+
note: "Create option shows when search term exists, regardless of matches"
|
|
7699
7700
|
});
|
|
7700
7701
|
}
|
|
7701
7702
|
setShowCreateOption(shouldShow);
|
|
@@ -7719,7 +7720,7 @@ function SelectEditField2({
|
|
|
7719
7720
|
return false;
|
|
7720
7721
|
};
|
|
7721
7722
|
const hasMatch = (columnDef.fieldOptions || []).some(checkMatch);
|
|
7722
|
-
const shouldShow =
|
|
7723
|
+
const shouldShow = isCreatable && !!columnDef.onCreateNew;
|
|
7723
7724
|
setShowCreateOption(shouldShow);
|
|
7724
7725
|
} else {
|
|
7725
7726
|
setShowCreateOption(false);
|
|
@@ -8691,7 +8692,7 @@ function LoadingState() {
|
|
|
8691
8692
|
}
|
|
8692
8693
|
|
|
8693
8694
|
// src/components/DataTable/components/DataTableModals.tsx
|
|
8694
|
-
import
|
|
8695
|
+
import React15, { useEffect as useEffect6 } from "react";
|
|
8695
8696
|
|
|
8696
8697
|
// src/components/DataTable/components/ImportModal.tsx
|
|
8697
8698
|
import { useState as useState4, useRef as useRef4, useEffect as useEffect5 } from "react";
|
|
@@ -8975,21 +8976,10 @@ var DialogBody = ({
|
|
|
8975
8976
|
if (!htmlContent || !allowHtml) {
|
|
8976
8977
|
return null;
|
|
8977
8978
|
}
|
|
8978
|
-
console.log("\u{1F50D} Dialog HTML Debug:", {
|
|
8979
|
-
originalHtml: htmlContent,
|
|
8980
|
-
allowHtml,
|
|
8981
|
-
strictSanitization,
|
|
8982
|
-
logWarnings
|
|
8983
|
-
});
|
|
8984
8979
|
const result = renderSafeHtml(htmlContent, {
|
|
8985
8980
|
strict: strictSanitization,
|
|
8986
8981
|
logWarnings
|
|
8987
8982
|
});
|
|
8988
|
-
console.log("\u{1F50D} Dialog HTML Result:", {
|
|
8989
|
-
sanitizedHtml: result.html,
|
|
8990
|
-
isValid: result.isValid,
|
|
8991
|
-
warnings: result.warnings
|
|
8992
|
-
});
|
|
8993
8983
|
return result.html;
|
|
8994
8984
|
}, [htmlContent, allowHtml, strictSanitization, logWarnings]);
|
|
8995
8985
|
const hasHtmlContent = Boolean(htmlContent && allowHtml);
|
|
@@ -9082,9 +9072,38 @@ var DialogDescription = React12.forwardRef(({ className, htmlContent, allowHtml
|
|
|
9082
9072
|
});
|
|
9083
9073
|
DialogDescription.displayName = DialogPrimitive.Description.displayName;
|
|
9084
9074
|
|
|
9075
|
+
// src/components/Progress/Progress.tsx
|
|
9076
|
+
import * as React13 from "react";
|
|
9077
|
+
import * as ProgressPrimitive from "@radix-ui/react-progress";
|
|
9078
|
+
import { jsx as jsx18 } from "react/jsx-runtime";
|
|
9079
|
+
var Progress = React13.forwardRef(({ className, value, max = 100, ...props }, ref) => /* @__PURE__ */ jsx18(
|
|
9080
|
+
ProgressPrimitive.Root,
|
|
9081
|
+
{
|
|
9082
|
+
ref,
|
|
9083
|
+
className: cn(
|
|
9084
|
+
"relative h-2 w-full overflow-hidden rounded-full bg-primary/20",
|
|
9085
|
+
className
|
|
9086
|
+
),
|
|
9087
|
+
...props,
|
|
9088
|
+
value,
|
|
9089
|
+
max,
|
|
9090
|
+
"aria-valuenow": value,
|
|
9091
|
+
"aria-valuemax": max,
|
|
9092
|
+
"aria-valuemin": 0,
|
|
9093
|
+
children: /* @__PURE__ */ jsx18(
|
|
9094
|
+
ProgressPrimitive.Indicator,
|
|
9095
|
+
{
|
|
9096
|
+
className: "h-full w-full flex-1 bg-primary transition-all",
|
|
9097
|
+
style: { transform: `translateX(-${100 - (value || 0)}%)` }
|
|
9098
|
+
}
|
|
9099
|
+
)
|
|
9100
|
+
}
|
|
9101
|
+
));
|
|
9102
|
+
Progress.displayName = ProgressPrimitive.Root.displayName;
|
|
9103
|
+
|
|
9085
9104
|
// src/components/DataTable/components/ImportModal.tsx
|
|
9086
9105
|
import { Upload as Upload2, FileText, AlertCircle } from "lucide-react";
|
|
9087
|
-
import { jsx as
|
|
9106
|
+
import { jsx as jsx19, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
9088
9107
|
function ImportModal({ isOpen, onClose, onImport, config = {} }) {
|
|
9089
9108
|
const logger = createLogger("ImportModal");
|
|
9090
9109
|
const [file, setFile] = useState4(null);
|
|
@@ -9093,6 +9112,7 @@ function ImportModal({ isOpen, onClose, onImport, config = {} }) {
|
|
|
9093
9112
|
const [previewData, setPreviewData] = useState4(null);
|
|
9094
9113
|
const [totalCount, setTotalCount] = useState4(0);
|
|
9095
9114
|
const [validationErrors, setValidationErrors] = useState4([]);
|
|
9115
|
+
const [importProgress, setImportProgress] = useState4(null);
|
|
9096
9116
|
const fileInputRef = useRef4(null);
|
|
9097
9117
|
const isMountedRef = useRef4(true);
|
|
9098
9118
|
useEffect5(() => {
|
|
@@ -9108,6 +9128,7 @@ function ImportModal({ isOpen, onClose, onImport, config = {} }) {
|
|
|
9108
9128
|
setError(null);
|
|
9109
9129
|
setValidationErrors([]);
|
|
9110
9130
|
setIsProcessing(false);
|
|
9131
|
+
setImportProgress(null);
|
|
9111
9132
|
if (fileInputRef.current) {
|
|
9112
9133
|
fileInputRef.current.value = "";
|
|
9113
9134
|
}
|
|
@@ -9168,20 +9189,96 @@ function ImportModal({ isOpen, onClose, onImport, config = {} }) {
|
|
|
9168
9189
|
if (!file) return;
|
|
9169
9190
|
setIsProcessing(true);
|
|
9170
9191
|
setError(null);
|
|
9192
|
+
setImportProgress({ current: 0, total: 0, stage: "parsing" });
|
|
9171
9193
|
try {
|
|
9172
9194
|
const text = await file.text();
|
|
9173
|
-
const
|
|
9195
|
+
const lines = text.split("\n").filter((line) => line.trim());
|
|
9196
|
+
const totalLines = lines.length;
|
|
9197
|
+
if (totalLines < 2) {
|
|
9198
|
+
throw new Error("CSV must have at least a header row and one data row");
|
|
9199
|
+
}
|
|
9200
|
+
const CHUNK_SIZE = 1e3;
|
|
9201
|
+
const data = [];
|
|
9202
|
+
if (totalLines > CHUNK_SIZE) {
|
|
9203
|
+
const parseCSVLine = (line) => {
|
|
9204
|
+
const result2 = [];
|
|
9205
|
+
let current = "";
|
|
9206
|
+
let inQuotes = false;
|
|
9207
|
+
for (let i = 0; i < line.length; i++) {
|
|
9208
|
+
const char = line[i];
|
|
9209
|
+
if (char === '"') {
|
|
9210
|
+
inQuotes = !inQuotes;
|
|
9211
|
+
} else if (char === "," && !inQuotes) {
|
|
9212
|
+
result2.push(current.trim());
|
|
9213
|
+
current = "";
|
|
9214
|
+
} else {
|
|
9215
|
+
current += char;
|
|
9216
|
+
}
|
|
9217
|
+
}
|
|
9218
|
+
result2.push(current.trim());
|
|
9219
|
+
return result2;
|
|
9220
|
+
};
|
|
9221
|
+
const headers = parseCSVLine(lines[0]).map((h) => h.replace(/"/g, "").trim());
|
|
9222
|
+
for (let i = 1; i < totalLines; i += CHUNK_SIZE) {
|
|
9223
|
+
const chunkEnd = Math.min(i + CHUNK_SIZE, totalLines);
|
|
9224
|
+
const chunk = lines.slice(i, chunkEnd);
|
|
9225
|
+
chunk.forEach((line, index) => {
|
|
9226
|
+
const values = parseCSVLine(line).map((v) => v.replace(/"/g, "").trim());
|
|
9227
|
+
const row = {};
|
|
9228
|
+
headers.forEach((header, colIndex) => {
|
|
9229
|
+
row[header] = values[colIndex] || "";
|
|
9230
|
+
});
|
|
9231
|
+
data.push(row);
|
|
9232
|
+
});
|
|
9233
|
+
const processed = Math.min(chunkEnd - 1, totalLines - 1);
|
|
9234
|
+
if (isMountedRef.current) {
|
|
9235
|
+
setImportProgress({
|
|
9236
|
+
current: processed,
|
|
9237
|
+
total: totalLines - 1,
|
|
9238
|
+
stage: "parsing"
|
|
9239
|
+
});
|
|
9240
|
+
}
|
|
9241
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
9242
|
+
}
|
|
9243
|
+
} else {
|
|
9244
|
+
const parsedData = processCSV(text);
|
|
9245
|
+
data.push(...parsedData);
|
|
9246
|
+
if (isMountedRef.current) {
|
|
9247
|
+
setImportProgress({
|
|
9248
|
+
current: totalLines - 1,
|
|
9249
|
+
total: totalLines - 1,
|
|
9250
|
+
stage: "parsing"
|
|
9251
|
+
});
|
|
9252
|
+
}
|
|
9253
|
+
}
|
|
9254
|
+
if (isMountedRef.current) {
|
|
9255
|
+
setImportProgress({
|
|
9256
|
+
current: 0,
|
|
9257
|
+
total: data.length,
|
|
9258
|
+
stage: "importing"
|
|
9259
|
+
});
|
|
9260
|
+
}
|
|
9174
9261
|
const result = onImport(data);
|
|
9175
9262
|
if (result && typeof result.then === "function") {
|
|
9176
9263
|
await result;
|
|
9177
9264
|
}
|
|
9265
|
+
if (isMountedRef.current) {
|
|
9266
|
+
setImportProgress({
|
|
9267
|
+
current: data.length,
|
|
9268
|
+
total: data.length,
|
|
9269
|
+
stage: "importing"
|
|
9270
|
+
});
|
|
9271
|
+
}
|
|
9272
|
+
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
9178
9273
|
onClose();
|
|
9179
9274
|
setFile(null);
|
|
9180
9275
|
} catch (err) {
|
|
9181
9276
|
setError(err instanceof Error ? err.message : "Failed to process file");
|
|
9277
|
+
setImportProgress(null);
|
|
9182
9278
|
} finally {
|
|
9183
9279
|
if (isMountedRef.current) {
|
|
9184
9280
|
setIsProcessing(false);
|
|
9281
|
+
setImportProgress(null);
|
|
9185
9282
|
}
|
|
9186
9283
|
}
|
|
9187
9284
|
};
|
|
@@ -9191,6 +9288,7 @@ function ImportModal({ isOpen, onClose, onImport, config = {} }) {
|
|
|
9191
9288
|
setPreviewData(null);
|
|
9192
9289
|
setTotalCount(0);
|
|
9193
9290
|
setValidationErrors([]);
|
|
9291
|
+
setImportProgress(null);
|
|
9194
9292
|
onClose();
|
|
9195
9293
|
};
|
|
9196
9294
|
const handleFileSelect = async (event) => {
|
|
@@ -9217,16 +9315,16 @@ function ImportModal({ isOpen, onClose, onImport, config = {} }) {
|
|
|
9217
9315
|
}
|
|
9218
9316
|
}
|
|
9219
9317
|
};
|
|
9220
|
-
return /* @__PURE__ */
|
|
9318
|
+
return /* @__PURE__ */ jsx19(Dialog, { open: isOpen, onOpenChange: handleClose, children: /* @__PURE__ */ jsxs14(DialogContent, { className: "sm:max-w-2xl bg-main-50", children: [
|
|
9221
9319
|
/* @__PURE__ */ jsxs14(DialogHeader, { children: [
|
|
9222
|
-
/* @__PURE__ */
|
|
9223
|
-
/* @__PURE__ */
|
|
9320
|
+
/* @__PURE__ */ jsx19(DialogTitle, { children: title }),
|
|
9321
|
+
/* @__PURE__ */ jsx19(DialogDescription, { children: description })
|
|
9224
9322
|
] }),
|
|
9225
9323
|
/* @__PURE__ */ jsxs14("div", { className: "space-y-4", children: [
|
|
9226
9324
|
/* @__PURE__ */ jsxs14("div", { className: "border-2 border-dashed border-sec-200 rounded-lg p-6 text-center", children: [
|
|
9227
|
-
/* @__PURE__ */
|
|
9228
|
-
/* @__PURE__ */
|
|
9229
|
-
file && /* @__PURE__ */
|
|
9325
|
+
/* @__PURE__ */ jsx19(FileText, { className: "h-8 w-8 mx-auto text-sec-400 mb-2" }),
|
|
9326
|
+
/* @__PURE__ */ jsx19("p", { className: "text-sec-600 mb-2", children: file ? `Selected: ${file.name}` : uploadText }),
|
|
9327
|
+
file && /* @__PURE__ */ jsx19("p", { className: "text-xs text-sec-500", children: "File selected, processing preview..." }),
|
|
9230
9328
|
/* @__PURE__ */ jsxs14(
|
|
9231
9329
|
Button,
|
|
9232
9330
|
{
|
|
@@ -9234,12 +9332,12 @@ function ImportModal({ isOpen, onClose, onImport, config = {} }) {
|
|
|
9234
9332
|
size: "sm",
|
|
9235
9333
|
onClick: () => fileInputRef.current?.click(),
|
|
9236
9334
|
children: [
|
|
9237
|
-
/* @__PURE__ */
|
|
9335
|
+
/* @__PURE__ */ jsx19(Upload2, { className: "h-4 w-4 mr-2" }),
|
|
9238
9336
|
selectFileButtonText
|
|
9239
9337
|
]
|
|
9240
9338
|
}
|
|
9241
9339
|
),
|
|
9242
|
-
/* @__PURE__ */
|
|
9340
|
+
/* @__PURE__ */ jsx19(
|
|
9243
9341
|
Input,
|
|
9244
9342
|
{
|
|
9245
9343
|
ref: fileInputRef,
|
|
@@ -9251,12 +9349,12 @@ function ImportModal({ isOpen, onClose, onImport, config = {} }) {
|
|
|
9251
9349
|
)
|
|
9252
9350
|
] }),
|
|
9253
9351
|
error && /* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-2 p-3 bg-acc-50 border border-acc-200 rounded text-acc-700", children: [
|
|
9254
|
-
/* @__PURE__ */
|
|
9255
|
-
/* @__PURE__ */
|
|
9352
|
+
/* @__PURE__ */ jsx19(AlertCircle, { className: "h-4 w-4" }),
|
|
9353
|
+
/* @__PURE__ */ jsx19("span", { className: "text-sm", children: error })
|
|
9256
9354
|
] }),
|
|
9257
9355
|
validationErrors.length > 0 && /* @__PURE__ */ jsxs14("div", { className: "space-y-2", children: [
|
|
9258
9356
|
/* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-2 p-3 bg-acc-50 border border-acc-200 rounded text-acc-700", children: [
|
|
9259
|
-
/* @__PURE__ */
|
|
9357
|
+
/* @__PURE__ */ jsx19(AlertCircle, { className: "h-4 w-4" }),
|
|
9260
9358
|
/* @__PURE__ */ jsxs14("span", { className: "text-sm font-medium", children: [
|
|
9261
9359
|
validationErrors.length,
|
|
9262
9360
|
" validation error",
|
|
@@ -9282,17 +9380,36 @@ function ImportModal({ isOpen, onClose, onImport, config = {} }) {
|
|
|
9282
9380
|
] })
|
|
9283
9381
|
] })
|
|
9284
9382
|
] }),
|
|
9285
|
-
|
|
9286
|
-
/* @__PURE__ */
|
|
9287
|
-
|
|
9288
|
-
/* @__PURE__ */
|
|
9289
|
-
|
|
9383
|
+
importProgress && isProcessing && /* @__PURE__ */ jsxs14("div", { className: "space-y-2 p-4 bg-sec-50 rounded-lg border border-sec-200", children: [
|
|
9384
|
+
/* @__PURE__ */ jsxs14("div", { className: "flex items-center justify-between", children: [
|
|
9385
|
+
/* @__PURE__ */ jsx19("span", { className: "text-sm font-medium text-sec-900", children: importProgress.stage === "parsing" ? "Parsing CSV file..." : "Importing data..." }),
|
|
9386
|
+
/* @__PURE__ */ jsxs14("span", { className: "text-sm text-sec-600", children: [
|
|
9387
|
+
importProgress.current.toLocaleString(),
|
|
9388
|
+
" / ",
|
|
9389
|
+
importProgress.total.toLocaleString(),
|
|
9390
|
+
" rows"
|
|
9391
|
+
] })
|
|
9392
|
+
] }),
|
|
9393
|
+
/* @__PURE__ */ jsx19(
|
|
9394
|
+
Progress,
|
|
9395
|
+
{
|
|
9396
|
+
value: importProgress.total > 0 ? importProgress.current / importProgress.total * 100 : 0,
|
|
9397
|
+
className: "h-2 bg-sec-200"
|
|
9398
|
+
}
|
|
9399
|
+
),
|
|
9400
|
+
/* @__PURE__ */ jsx19("p", { className: "text-xs text-sec-500", children: importProgress.total > 0 && importProgress.current < importProgress.total ? `${Math.round(importProgress.current / importProgress.total * 100)}% complete` : importProgress.stage === "importing" && importProgress.current === 0 ? "Processing your data..." : importProgress.current === importProgress.total ? "Complete!" : "Processing..." })
|
|
9401
|
+
] }),
|
|
9402
|
+
file && previewData && previewData.length > 0 && !isProcessing ? /* @__PURE__ */ jsxs14("div", { className: "space-y-3", children: [
|
|
9403
|
+
/* @__PURE__ */ jsx19("h4", { className: "text-sec-900", children: previewHeaderText }),
|
|
9404
|
+
/* @__PURE__ */ jsx19("div", { className: "border rounded-lg overflow-hidden", children: /* @__PURE__ */ jsx19("div", { className: "overflow-x-auto max-h-48", children: /* @__PURE__ */ jsxs14("table", { className: "min-w-full text-xs", children: [
|
|
9405
|
+
/* @__PURE__ */ jsx19("thead", { className: "bg-sec-50", children: /* @__PURE__ */ jsx19("tr", { children: Object.keys(previewData[0]).map((header) => /* @__PURE__ */ jsx19("th", { className: "px-2 py-1 text-left font-medium text-sec-900 border-b", children: header }, header)) }) }),
|
|
9406
|
+
/* @__PURE__ */ jsx19("tbody", { children: previewData.map((row, index) => /* @__PURE__ */ jsx19("tr", { className: index % 2 === 0 ? "bg-app-main-50" : "bg-sec-50", children: Object.values(row).map((value, cellIndex) => /* @__PURE__ */ jsx19("td", { className: "px-2 py-1 text-sec-700 border-b", children: String(value) }, cellIndex)) }, index)) })
|
|
9290
9407
|
] }) }) }),
|
|
9291
|
-
/* @__PURE__ */
|
|
9292
|
-
] }) : !file ? /* @__PURE__ */
|
|
9408
|
+
/* @__PURE__ */ jsx19("p", { className: "text-sec-500", children: totalRowsText.replace("{count}", totalCount.toString()) })
|
|
9409
|
+
] }) : !file ? /* @__PURE__ */ jsx19("div", { className: "border rounded-lg p-6 text-center bg-sec-50", children: /* @__PURE__ */ jsx19("p", { className: "text-sec-500", children: "Select a CSV file to preview" }) }) : null,
|
|
9293
9410
|
/* @__PURE__ */ jsxs14("div", { className: "flex justify-end gap-2", children: [
|
|
9294
|
-
/* @__PURE__ */
|
|
9295
|
-
/* @__PURE__ */
|
|
9411
|
+
/* @__PURE__ */ jsx19(Button, { variant: "outline", onClick: handleClose, children: cancelButtonText }),
|
|
9412
|
+
/* @__PURE__ */ jsx19(
|
|
9296
9413
|
Button,
|
|
9297
9414
|
{
|
|
9298
9415
|
onClick: handleImport,
|
|
@@ -9306,7 +9423,7 @@ function ImportModal({ isOpen, onClose, onImport, config = {} }) {
|
|
|
9306
9423
|
}
|
|
9307
9424
|
|
|
9308
9425
|
// src/components/DataTable/components/DataTableModals.tsx
|
|
9309
|
-
import { Fragment as Fragment4, jsx as
|
|
9426
|
+
import { Fragment as Fragment4, jsx as jsx20 } from "react/jsx-runtime";
|
|
9310
9427
|
function mapCSVToTableColumns(csvData, columns) {
|
|
9311
9428
|
const logger = createLogger("mapCSVToTableColumns");
|
|
9312
9429
|
const columnMap = /* @__PURE__ */ new Map();
|
|
@@ -9388,7 +9505,7 @@ function DataTableModals({
|
|
|
9388
9505
|
onStoreFocus,
|
|
9389
9506
|
onRestoreFocus
|
|
9390
9507
|
}) {
|
|
9391
|
-
const logger =
|
|
9508
|
+
const logger = React15.useMemo(() => createLogger("DataTableModals"), []);
|
|
9392
9509
|
useEffect6(() => {
|
|
9393
9510
|
if (showImportModal) {
|
|
9394
9511
|
onStoreFocus?.();
|
|
@@ -9399,7 +9516,7 @@ function DataTableModals({
|
|
|
9399
9516
|
return () => clearTimeout(timeoutId);
|
|
9400
9517
|
}
|
|
9401
9518
|
}, [showImportModal, onStoreFocus, onRestoreFocus]);
|
|
9402
|
-
return /* @__PURE__ */
|
|
9519
|
+
return /* @__PURE__ */ jsx20(Fragment4, { children: /* @__PURE__ */ jsx20(
|
|
9403
9520
|
ImportModal,
|
|
9404
9521
|
{
|
|
9405
9522
|
isOpen: showImportModal,
|
|
@@ -9437,12 +9554,12 @@ function DataTableModals({
|
|
|
9437
9554
|
}
|
|
9438
9555
|
|
|
9439
9556
|
// src/components/DataTable/components/DataTableErrorBoundary.tsx
|
|
9440
|
-
import
|
|
9557
|
+
import React17, { Component } from "react";
|
|
9441
9558
|
|
|
9442
9559
|
// src/components/Alert/Alert.tsx
|
|
9443
|
-
import * as
|
|
9444
|
-
import { jsx as
|
|
9445
|
-
var AlertContext =
|
|
9560
|
+
import * as React16 from "react";
|
|
9561
|
+
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
9562
|
+
var AlertContext = React16.createContext({ variant: "default" });
|
|
9446
9563
|
var getAlertClasses = (variant = "default") => {
|
|
9447
9564
|
const baseClasses = "relative w-full rounded-lg border p-4";
|
|
9448
9565
|
const variantClasses = {
|
|
@@ -9453,12 +9570,12 @@ var getAlertClasses = (variant = "default") => {
|
|
|
9453
9570
|
};
|
|
9454
9571
|
return `${baseClasses} ${variantClasses[variant]}`;
|
|
9455
9572
|
};
|
|
9456
|
-
var Alert =
|
|
9457
|
-
const contextValue =
|
|
9573
|
+
var Alert = React16.forwardRef(({ className, variant = "default", ...props }, ref) => {
|
|
9574
|
+
const contextValue = React16.useMemo(() => ({ variant }), [variant]);
|
|
9458
9575
|
if (variant === "inline") {
|
|
9459
|
-
return /* @__PURE__ */
|
|
9576
|
+
return /* @__PURE__ */ jsx21(AlertContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx21(React16.Fragment, { ...props }) });
|
|
9460
9577
|
}
|
|
9461
|
-
return /* @__PURE__ */
|
|
9578
|
+
return /* @__PURE__ */ jsx21(AlertContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx21(
|
|
9462
9579
|
"div",
|
|
9463
9580
|
{
|
|
9464
9581
|
ref,
|
|
@@ -9469,12 +9586,12 @@ var Alert = React15.forwardRef(({ className, variant = "default", ...props }, re
|
|
|
9469
9586
|
) });
|
|
9470
9587
|
});
|
|
9471
9588
|
Alert.displayName = "Alert";
|
|
9472
|
-
var AlertTitle =
|
|
9473
|
-
const { variant } =
|
|
9589
|
+
var AlertTitle = React16.forwardRef(({ className, ...props }, ref) => {
|
|
9590
|
+
const { variant } = React16.useContext(AlertContext);
|
|
9474
9591
|
if (variant === "inline") {
|
|
9475
|
-
return /* @__PURE__ */
|
|
9592
|
+
return /* @__PURE__ */ jsx21("strong", { ...props });
|
|
9476
9593
|
}
|
|
9477
|
-
return /* @__PURE__ */
|
|
9594
|
+
return /* @__PURE__ */ jsx21(
|
|
9478
9595
|
"h5",
|
|
9479
9596
|
{
|
|
9480
9597
|
ref,
|
|
@@ -9484,12 +9601,12 @@ var AlertTitle = React15.forwardRef(({ className, ...props }, ref) => {
|
|
|
9484
9601
|
);
|
|
9485
9602
|
});
|
|
9486
9603
|
AlertTitle.displayName = "AlertTitle";
|
|
9487
|
-
var AlertDescription =
|
|
9488
|
-
const { variant } =
|
|
9604
|
+
var AlertDescription = React16.forwardRef(({ className, ...props }, ref) => {
|
|
9605
|
+
const { variant } = React16.useContext(AlertContext);
|
|
9489
9606
|
if (variant === "inline") {
|
|
9490
|
-
return /* @__PURE__ */
|
|
9607
|
+
return /* @__PURE__ */ jsx21("span", { ...props });
|
|
9491
9608
|
}
|
|
9492
|
-
return /* @__PURE__ */
|
|
9609
|
+
return /* @__PURE__ */ jsx21(
|
|
9493
9610
|
"p",
|
|
9494
9611
|
{
|
|
9495
9612
|
ref,
|
|
@@ -9501,7 +9618,7 @@ var AlertDescription = React15.forwardRef(({ className, ...props }, ref) => {
|
|
|
9501
9618
|
AlertDescription.displayName = "AlertDescription";
|
|
9502
9619
|
|
|
9503
9620
|
// src/components/DataTable/components/DataTableErrorBoundary.tsx
|
|
9504
|
-
import { Fragment as Fragment6, jsx as
|
|
9621
|
+
import { Fragment as Fragment6, jsx as jsx22, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
9505
9622
|
var DataTableErrorBoundary = class extends Component {
|
|
9506
9623
|
constructor(props) {
|
|
9507
9624
|
super(props);
|
|
@@ -9573,11 +9690,11 @@ var DataTableErrorBoundary = class extends Component {
|
|
|
9573
9690
|
if (fallback) {
|
|
9574
9691
|
return fallback;
|
|
9575
9692
|
}
|
|
9576
|
-
return /* @__PURE__ */
|
|
9577
|
-
/* @__PURE__ */
|
|
9578
|
-
/* @__PURE__ */
|
|
9693
|
+
return /* @__PURE__ */ jsx22("div", { className: "flex items-center justify-center p-8", children: /* @__PURE__ */ jsxs15(Alert, { variant: "destructive", className: "max-w-md", children: [
|
|
9694
|
+
/* @__PURE__ */ jsx22(AlertTitle, { children: "DataTable Error" }),
|
|
9695
|
+
/* @__PURE__ */ jsx22(AlertDescription, { className: "mt-2", children: /* @__PURE__ */ jsx22("span", { children: "Something went wrong" }) }),
|
|
9579
9696
|
error && error.message ? /* @__PURE__ */ jsxs15("details", { className: "mt-2", children: [
|
|
9580
|
-
/* @__PURE__ */
|
|
9697
|
+
/* @__PURE__ */ jsx22("summary", { className: "cursor-pointer text-sm font-medium", children: "Error Details" }),
|
|
9581
9698
|
/* @__PURE__ */ jsxs15("pre", { className: "mt-2 text-xs overflow-auto max-h-32", children: [
|
|
9582
9699
|
error.message,
|
|
9583
9700
|
showErrorDetails && error.stack && /* @__PURE__ */ jsxs15(Fragment6, { children: [
|
|
@@ -9585,7 +9702,7 @@ var DataTableErrorBoundary = class extends Component {
|
|
|
9585
9702
|
error.stack
|
|
9586
9703
|
] })
|
|
9587
9704
|
] })
|
|
9588
|
-
] }) : /* @__PURE__ */
|
|
9705
|
+
] }) : /* @__PURE__ */ jsx22("div", { className: "mt-2", children: /* @__PURE__ */ jsx22("span", { children: "An unexpected error occurred" }) }),
|
|
9589
9706
|
/* @__PURE__ */ jsxs15("div", { className: "mt-4 flex gap-2", children: [
|
|
9590
9707
|
showRetryButton && retryCount < maxRetries && /* @__PURE__ */ jsxs15(
|
|
9591
9708
|
Button,
|
|
@@ -9603,7 +9720,7 @@ var DataTableErrorBoundary = class extends Component {
|
|
|
9603
9720
|
]
|
|
9604
9721
|
}
|
|
9605
9722
|
),
|
|
9606
|
-
/* @__PURE__ */
|
|
9723
|
+
/* @__PURE__ */ jsx22(
|
|
9607
9724
|
Button,
|
|
9608
9725
|
{
|
|
9609
9726
|
variant: "outline",
|
|
@@ -10460,8 +10577,8 @@ function useDataTableConfiguration({
|
|
|
10460
10577
|
}
|
|
10461
10578
|
|
|
10462
10579
|
// src/components/Card/Card.tsx
|
|
10463
|
-
import * as
|
|
10464
|
-
import { jsx as
|
|
10580
|
+
import * as React18 from "react";
|
|
10581
|
+
import { jsx as jsx23 } from "react/jsx-runtime";
|
|
10465
10582
|
function getCardClasses(variant = "default", size = "default") {
|
|
10466
10583
|
const baseClasses = "rounded-lg border bg-card text-card-foreground shadow-sm";
|
|
10467
10584
|
const variantClasses = {
|
|
@@ -10476,7 +10593,7 @@ function getCardClasses(variant = "default", size = "default") {
|
|
|
10476
10593
|
};
|
|
10477
10594
|
return `${baseClasses} ${variantClasses[variant]} ${sizeClasses2[size]}`;
|
|
10478
10595
|
}
|
|
10479
|
-
var Card =
|
|
10596
|
+
var Card = React18.forwardRef(({ className, variant, size, ...props }, ref) => /* @__PURE__ */ jsx23(
|
|
10480
10597
|
"article",
|
|
10481
10598
|
{
|
|
10482
10599
|
ref,
|
|
@@ -10489,7 +10606,7 @@ var Card = React17.forwardRef(({ className, variant, size, ...props }, ref) => /
|
|
|
10489
10606
|
}
|
|
10490
10607
|
));
|
|
10491
10608
|
Card.displayName = "Card";
|
|
10492
|
-
var CardHeader =
|
|
10609
|
+
var CardHeader = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
|
|
10493
10610
|
"header",
|
|
10494
10611
|
{
|
|
10495
10612
|
ref,
|
|
@@ -10498,7 +10615,7 @@ var CardHeader = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE
|
|
|
10498
10615
|
}
|
|
10499
10616
|
));
|
|
10500
10617
|
CardHeader.displayName = "CardHeader";
|
|
10501
|
-
var CardTitle =
|
|
10618
|
+
var CardTitle = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
|
|
10502
10619
|
"h3",
|
|
10503
10620
|
{
|
|
10504
10621
|
ref,
|
|
@@ -10510,7 +10627,7 @@ var CardTitle = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE_
|
|
|
10510
10627
|
}
|
|
10511
10628
|
));
|
|
10512
10629
|
CardTitle.displayName = "CardTitle";
|
|
10513
|
-
var CardDescription =
|
|
10630
|
+
var CardDescription = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
|
|
10514
10631
|
"p",
|
|
10515
10632
|
{
|
|
10516
10633
|
ref,
|
|
@@ -10519,7 +10636,7 @@ var CardDescription = React17.forwardRef(({ className, ...props }, ref) => /* @_
|
|
|
10519
10636
|
}
|
|
10520
10637
|
));
|
|
10521
10638
|
CardDescription.displayName = "CardDescription";
|
|
10522
|
-
var CardContent =
|
|
10639
|
+
var CardContent = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
|
|
10523
10640
|
"main",
|
|
10524
10641
|
{
|
|
10525
10642
|
ref,
|
|
@@ -10528,7 +10645,7 @@ var CardContent = React17.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
10528
10645
|
}
|
|
10529
10646
|
));
|
|
10530
10647
|
CardContent.displayName = "CardContent";
|
|
10531
|
-
var CardFooter =
|
|
10648
|
+
var CardFooter = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
|
|
10532
10649
|
"footer",
|
|
10533
10650
|
{
|
|
10534
10651
|
ref,
|
|
@@ -10537,7 +10654,7 @@ var CardFooter = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE
|
|
|
10537
10654
|
}
|
|
10538
10655
|
));
|
|
10539
10656
|
CardFooter.displayName = "CardFooter";
|
|
10540
|
-
var CardActions =
|
|
10657
|
+
var CardActions = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
|
|
10541
10658
|
"nav",
|
|
10542
10659
|
{
|
|
10543
10660
|
ref,
|
|
@@ -10548,8 +10665,8 @@ var CardActions = React17.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
10548
10665
|
}
|
|
10549
10666
|
));
|
|
10550
10667
|
CardActions.displayName = "CardActions";
|
|
10551
|
-
var HoverCard =
|
|
10552
|
-
return /* @__PURE__ */
|
|
10668
|
+
var HoverCard = React18.forwardRef(({ children, className, ...props }, ref) => {
|
|
10669
|
+
return /* @__PURE__ */ jsx23(
|
|
10553
10670
|
"section",
|
|
10554
10671
|
{
|
|
10555
10672
|
ref,
|
|
@@ -10560,11 +10677,11 @@ var HoverCard = React17.forwardRef(({ children, className, ...props }, ref) => {
|
|
|
10560
10677
|
);
|
|
10561
10678
|
});
|
|
10562
10679
|
HoverCard.displayName = "HoverCard";
|
|
10563
|
-
var HoverCardTrigger =
|
|
10680
|
+
var HoverCardTrigger = React18.forwardRef(({ className, asChild, children, ...props }, ref) => {
|
|
10564
10681
|
if (asChild) {
|
|
10565
|
-
return /* @__PURE__ */
|
|
10682
|
+
return /* @__PURE__ */ jsx23("span", { className: cn("cursor-pointer", className), children });
|
|
10566
10683
|
}
|
|
10567
|
-
return /* @__PURE__ */
|
|
10684
|
+
return /* @__PURE__ */ jsx23(
|
|
10568
10685
|
"button",
|
|
10569
10686
|
{
|
|
10570
10687
|
ref,
|
|
@@ -10579,7 +10696,7 @@ var HoverCardTrigger = React17.forwardRef(({ className, asChild, children, ...pr
|
|
|
10579
10696
|
);
|
|
10580
10697
|
});
|
|
10581
10698
|
HoverCardTrigger.displayName = "HoverCardTrigger";
|
|
10582
|
-
var HoverCardContent =
|
|
10699
|
+
var HoverCardContent = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
|
|
10583
10700
|
"aside",
|
|
10584
10701
|
{
|
|
10585
10702
|
ref,
|
|
@@ -10595,7 +10712,7 @@ HoverCardContent.displayName = "HoverCardContent";
|
|
|
10595
10712
|
|
|
10596
10713
|
// src/components/DataTable/components/AccessDeniedPage.tsx
|
|
10597
10714
|
import { ShieldX, ArrowLeft, RefreshCw } from "lucide-react";
|
|
10598
|
-
import { Fragment as Fragment7, jsx as
|
|
10715
|
+
import { Fragment as Fragment7, jsx as jsx24, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
10599
10716
|
function AccessDeniedPage({
|
|
10600
10717
|
resource,
|
|
10601
10718
|
operation = "access",
|
|
@@ -10619,19 +10736,19 @@ function AccessDeniedPage({
|
|
|
10619
10736
|
window.history.back();
|
|
10620
10737
|
}
|
|
10621
10738
|
};
|
|
10622
|
-
return /* @__PURE__ */
|
|
10623
|
-
/* @__PURE__ */
|
|
10739
|
+
return /* @__PURE__ */ jsx24("div", { className: `flex items-center justify-center min-h-[400px] p-8 ${className || ""}`, children: /* @__PURE__ */ jsx24(Card, { className: "max-w-md w-full text-center", children: /* @__PURE__ */ jsxs16("div", { className: "flex flex-col items-center space-y-6 p-8", children: [
|
|
10740
|
+
/* @__PURE__ */ jsx24("div", { className: "flex items-center justify-center w-16 h-16 rounded-full bg-acc-100", children: /* @__PURE__ */ jsx24(ShieldX, { className: "w-8 h-8 text-acc-600" }) }),
|
|
10624
10741
|
/* @__PURE__ */ jsxs16("div", { className: "space-y-2", children: [
|
|
10625
|
-
/* @__PURE__ */
|
|
10626
|
-
/* @__PURE__ */
|
|
10742
|
+
/* @__PURE__ */ jsx24("h2", { className: "text-xl font-semibold text-sec-900", children: "Access Denied" }),
|
|
10743
|
+
/* @__PURE__ */ jsx24("p", { className: "text-sec-600", children: defaultMessage })
|
|
10627
10744
|
] }),
|
|
10628
10745
|
/* @__PURE__ */ jsxs16("div", { className: "text-sm text-sec-500 bg-sec-50 rounded-lg p-3 w-full", children: [
|
|
10629
|
-
/* @__PURE__ */
|
|
10746
|
+
/* @__PURE__ */ jsx24("strong", { children: "Resource:" }),
|
|
10630
10747
|
" ",
|
|
10631
10748
|
resource,
|
|
10632
10749
|
operation && /* @__PURE__ */ jsxs16(Fragment7, { children: [
|
|
10633
|
-
/* @__PURE__ */
|
|
10634
|
-
/* @__PURE__ */
|
|
10750
|
+
/* @__PURE__ */ jsx24("br", {}),
|
|
10751
|
+
/* @__PURE__ */ jsx24("strong", { children: "Operation:" }),
|
|
10635
10752
|
" ",
|
|
10636
10753
|
operation
|
|
10637
10754
|
] })
|
|
@@ -10644,7 +10761,7 @@ function AccessDeniedPage({
|
|
|
10644
10761
|
onClick: handleRetry,
|
|
10645
10762
|
className: "flex-1",
|
|
10646
10763
|
children: [
|
|
10647
|
-
/* @__PURE__ */
|
|
10764
|
+
/* @__PURE__ */ jsx24(RefreshCw, { className: "w-4 h-4 mr-2" }),
|
|
10648
10765
|
"Retry"
|
|
10649
10766
|
]
|
|
10650
10767
|
}
|
|
@@ -10656,13 +10773,13 @@ function AccessDeniedPage({
|
|
|
10656
10773
|
onClick: handleBack,
|
|
10657
10774
|
className: "flex-1",
|
|
10658
10775
|
children: [
|
|
10659
|
-
/* @__PURE__ */
|
|
10776
|
+
/* @__PURE__ */ jsx24(ArrowLeft, { className: "w-4 h-4 mr-2" }),
|
|
10660
10777
|
"Go Back"
|
|
10661
10778
|
]
|
|
10662
10779
|
}
|
|
10663
10780
|
)
|
|
10664
10781
|
] }),
|
|
10665
|
-
/* @__PURE__ */
|
|
10782
|
+
/* @__PURE__ */ jsx24("div", { className: "text-xs text-sec-400", children: "If you believe this is an error, please contact your administrator." })
|
|
10666
10783
|
] }) }) });
|
|
10667
10784
|
}
|
|
10668
10785
|
|
|
@@ -10966,7 +11083,7 @@ function useDataTablePermissions(rbac, features = {}) {
|
|
|
10966
11083
|
}
|
|
10967
11084
|
|
|
10968
11085
|
// src/components/DataTable/hooks/useTableColumns.ts
|
|
10969
|
-
import
|
|
11086
|
+
import React19, { useMemo as useMemo13 } from "react";
|
|
10970
11087
|
|
|
10971
11088
|
// src/components/DataTable/core/ColumnFactory.ts
|
|
10972
11089
|
var ColumnFactory = class {
|
|
@@ -11172,14 +11289,14 @@ function useTableColumns({
|
|
|
11172
11289
|
header: ({ table }) => {
|
|
11173
11290
|
const isAllSelected = table.getIsAllPageRowsSelected();
|
|
11174
11291
|
const isSomeSelected = table.getIsSomePageRowsSelected();
|
|
11175
|
-
return
|
|
11292
|
+
return React19.createElement(Checkbox, {
|
|
11176
11293
|
checked: isAllSelected ? true : isSomeSelected ? "indeterminate" : false,
|
|
11177
11294
|
onCheckedChange: (value) => table.toggleAllPageRowsSelected(!!value),
|
|
11178
11295
|
"aria-label": "Select all"
|
|
11179
11296
|
});
|
|
11180
11297
|
},
|
|
11181
11298
|
cell: ({ row }) => {
|
|
11182
|
-
return
|
|
11299
|
+
return React19.createElement(Checkbox, {
|
|
11183
11300
|
checked: row.getIsSelected(),
|
|
11184
11301
|
onCheckedChange: (value) => row.toggleSelected(!!value),
|
|
11185
11302
|
"aria-label": "Select row"
|
|
@@ -11657,7 +11774,7 @@ function useKeyboardNavigation(rowCount, columnCount, options = {}) {
|
|
|
11657
11774
|
}
|
|
11658
11775
|
|
|
11659
11776
|
// src/components/DataTable/components/DataTableCore.tsx
|
|
11660
|
-
import { Fragment as Fragment8, jsx as
|
|
11777
|
+
import { Fragment as Fragment8, jsx as jsx25, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
11661
11778
|
var isCellValue = (value) => {
|
|
11662
11779
|
if (value === null || value === void 0) {
|
|
11663
11780
|
return true;
|
|
@@ -11724,7 +11841,7 @@ function DataTableInternal({
|
|
|
11724
11841
|
storageKey,
|
|
11725
11842
|
onLayoutChange
|
|
11726
11843
|
}) {
|
|
11727
|
-
const logger =
|
|
11844
|
+
const logger = React20.useMemo(() => createLogger("DataTableCore"), []);
|
|
11728
11845
|
const authResult = useUnifiedAuth();
|
|
11729
11846
|
const user = authResult.user;
|
|
11730
11847
|
const requestedFeatures = useMemo14(
|
|
@@ -12224,7 +12341,7 @@ function DataTableInternal({
|
|
|
12224
12341
|
throw new Error("DataTable requires authenticated user for RBAC");
|
|
12225
12342
|
}
|
|
12226
12343
|
if (permissions.canRead.isLoading) {
|
|
12227
|
-
return /* @__PURE__ */
|
|
12344
|
+
return /* @__PURE__ */ jsx25(LoadingComponent, {});
|
|
12228
12345
|
}
|
|
12229
12346
|
if (!permissions.canRead.can) {
|
|
12230
12347
|
logger.warn("Access denied - no read permission:", {
|
|
@@ -12232,10 +12349,10 @@ function DataTableInternal({
|
|
|
12232
12349
|
pageId: effectivePageId,
|
|
12233
12350
|
isLoading: permissions.canRead.isLoading
|
|
12234
12351
|
});
|
|
12235
|
-
return /* @__PURE__ */
|
|
12352
|
+
return /* @__PURE__ */ jsx25(AccessDeniedPage, { resource: effectivePageId || "unknown-page", operation: "read" });
|
|
12236
12353
|
}
|
|
12237
12354
|
if (isLoading) {
|
|
12238
|
-
return /* @__PURE__ */
|
|
12355
|
+
return /* @__PURE__ */ jsx25(LoadingComponent, {});
|
|
12239
12356
|
}
|
|
12240
12357
|
const PaginationComponent = enhancedPagination || finalPaginationMode !== "client" ? EnhancedPaginationControls : PaginationControls;
|
|
12241
12358
|
const visibleColumns = table?.getVisibleFlatColumns() || [];
|
|
@@ -12260,10 +12377,10 @@ function DataTableInternal({
|
|
|
12260
12377
|
children: [
|
|
12261
12378
|
/* @__PURE__ */ jsxs17("caption", { className: "text-left pb-2", children: [
|
|
12262
12379
|
(title || description) && /* @__PURE__ */ jsxs17(Fragment8, { children: [
|
|
12263
|
-
title && /* @__PURE__ */
|
|
12264
|
-
description && /* @__PURE__ */
|
|
12380
|
+
title && /* @__PURE__ */ jsx25("h2", { children: title }),
|
|
12381
|
+
description && /* @__PURE__ */ jsx25("p", { id: "table-description", children: description })
|
|
12265
12382
|
] }),
|
|
12266
|
-
/* @__PURE__ */
|
|
12383
|
+
/* @__PURE__ */ jsx25(Fragment8, { children: /* @__PURE__ */ jsx25(
|
|
12267
12384
|
DataTableToolbar,
|
|
12268
12385
|
{
|
|
12269
12386
|
features: secureFeatures,
|
|
@@ -12371,15 +12488,15 @@ function DataTableInternal({
|
|
|
12371
12488
|
) })
|
|
12372
12489
|
] }),
|
|
12373
12490
|
/* @__PURE__ */ jsxs17("colgroup", { children: [
|
|
12374
|
-
hasSelectColumn && /* @__PURE__ */
|
|
12375
|
-
/* @__PURE__ */
|
|
12376
|
-
hasActionsColumn && /* @__PURE__ */
|
|
12491
|
+
hasSelectColumn && /* @__PURE__ */ jsx25("col", { span: 1, "data-col-type": "select" }),
|
|
12492
|
+
/* @__PURE__ */ jsx25("col", { span: dataColumns, "data-col-type": "data" }),
|
|
12493
|
+
hasActionsColumn && /* @__PURE__ */ jsx25("col", { span: 1, "data-col-type": "actions" })
|
|
12377
12494
|
] }),
|
|
12378
|
-
/* @__PURE__ */
|
|
12495
|
+
/* @__PURE__ */ jsx25("thead", { children: table?.getHeaderGroups().map((headerGroup) => {
|
|
12379
12496
|
const visibleHeaders = headerGroup.headers.filter((header) => {
|
|
12380
12497
|
return typeof header.column.getIsVisible === "function" ? header.column.getIsVisible() : true;
|
|
12381
12498
|
});
|
|
12382
|
-
return /* @__PURE__ */
|
|
12499
|
+
return /* @__PURE__ */ jsx25("tr", { children: visibleHeaders.map((header, index) => {
|
|
12383
12500
|
const isFirst = index === 0;
|
|
12384
12501
|
const isLast = index === visibleHeaders.length - 1;
|
|
12385
12502
|
const isSortable = header.column.getCanSort();
|
|
@@ -12408,7 +12525,7 @@ function DataTableInternal({
|
|
|
12408
12525
|
announceSortChange(columnName, newSort);
|
|
12409
12526
|
}
|
|
12410
12527
|
);
|
|
12411
|
-
return /* @__PURE__ */
|
|
12528
|
+
return /* @__PURE__ */ jsx25(
|
|
12412
12529
|
"th",
|
|
12413
12530
|
{
|
|
12414
12531
|
className: cn(
|
|
@@ -12432,7 +12549,7 @@ function DataTableInternal({
|
|
|
12432
12549
|
tabIndex: 0,
|
|
12433
12550
|
children: [
|
|
12434
12551
|
typeof header.column.columnDef.header === "function" ? header.column.columnDef.header(header.getContext()) : header.column.columnDef.header,
|
|
12435
|
-
header.column.getIsSorted() === "asc" ? /* @__PURE__ */
|
|
12552
|
+
header.column.getIsSorted() === "asc" ? /* @__PURE__ */ jsx25(ChevronUp2, { className: "h-4 w-4" }) : header.column.getIsSorted() === "desc" ? /* @__PURE__ */ jsx25(ChevronDown3, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx25(ChevronsUpDown, { className: "h-4 w-4" })
|
|
12436
12553
|
]
|
|
12437
12554
|
}
|
|
12438
12555
|
) : typeof header.column.columnDef.header === "function" ? header.column.columnDef.header(header.getContext()) : header.column.columnDef.header
|
|
@@ -12441,7 +12558,7 @@ function DataTableInternal({
|
|
|
12441
12558
|
);
|
|
12442
12559
|
}) }, headerGroup.id);
|
|
12443
12560
|
}) }),
|
|
12444
|
-
/* @__PURE__ */
|
|
12561
|
+
/* @__PURE__ */ jsx25(
|
|
12445
12562
|
UnifiedTableBody,
|
|
12446
12563
|
{
|
|
12447
12564
|
table,
|
|
@@ -12488,7 +12605,7 @@ function DataTableInternal({
|
|
|
12488
12605
|
grouping: state.grouping,
|
|
12489
12606
|
aggregates,
|
|
12490
12607
|
getRowId: resolvedGetRowId,
|
|
12491
|
-
emptyState:
|
|
12608
|
+
emptyState: React20.isValidElement(emptyState) ? void 0 : emptyState,
|
|
12492
12609
|
isFiltered: searchQuery !== "" || state.columnFilters.length > 0,
|
|
12493
12610
|
onClearFilters: () => {
|
|
12494
12611
|
stateActions.setSearchQuery("");
|
|
@@ -12513,7 +12630,7 @@ function DataTableInternal({
|
|
|
12513
12630
|
permissions
|
|
12514
12631
|
}
|
|
12515
12632
|
),
|
|
12516
|
-
secureFeatures.pagination && /* @__PURE__ */
|
|
12633
|
+
secureFeatures.pagination && /* @__PURE__ */ jsx25("tfoot", { children: /* @__PURE__ */ jsx25("tr", { children: /* @__PURE__ */ jsx25("td", { colSpan: visibleColumns.length, children: /* @__PURE__ */ jsx25(
|
|
12517
12634
|
PaginationComponent,
|
|
12518
12635
|
{
|
|
12519
12636
|
table,
|
|
@@ -12526,7 +12643,7 @@ function DataTableInternal({
|
|
|
12526
12643
|
]
|
|
12527
12644
|
}
|
|
12528
12645
|
),
|
|
12529
|
-
/* @__PURE__ */
|
|
12646
|
+
/* @__PURE__ */ jsx25(
|
|
12530
12647
|
DataTableModals,
|
|
12531
12648
|
{
|
|
12532
12649
|
showImportModal: state.showImportModal,
|
|
@@ -12577,31 +12694,31 @@ function DataTableInternal({
|
|
|
12577
12694
|
] });
|
|
12578
12695
|
}
|
|
12579
12696
|
function DataTableCore(props) {
|
|
12580
|
-
return /* @__PURE__ */
|
|
12697
|
+
return /* @__PURE__ */ jsx25(DataTableErrorBoundary, { children: /* @__PURE__ */ jsx25(DataTableInternal, { ...props }) });
|
|
12581
12698
|
}
|
|
12582
12699
|
|
|
12583
12700
|
// src/components/DataTable/DataTable.tsx
|
|
12584
|
-
import { jsx as
|
|
12701
|
+
import { jsx as jsx26 } from "react/jsx-runtime";
|
|
12585
12702
|
function DataTable(props) {
|
|
12586
|
-
const logger =
|
|
12703
|
+
const logger = React21.useMemo(() => createLogger("DataTable"), []);
|
|
12587
12704
|
const { features, ...rest } = props;
|
|
12588
|
-
const normalizedFeatures =
|
|
12705
|
+
const normalizedFeatures = React21.useMemo(
|
|
12589
12706
|
() => normalizeDataTableFeatures(features),
|
|
12590
12707
|
[features]
|
|
12591
12708
|
);
|
|
12592
|
-
|
|
12709
|
+
React21.useEffect(() => {
|
|
12593
12710
|
if (!features && import.meta.env?.MODE === "development") {
|
|
12594
12711
|
logger.info("DataTable: no features provided; all capabilities default to disabled. Pass a features object to enable functionality.");
|
|
12595
12712
|
}
|
|
12596
12713
|
}, [features, logger]);
|
|
12597
|
-
|
|
12714
|
+
React21.useEffect(() => {
|
|
12598
12715
|
if (normalizedFeatures.deleteSelected && !normalizedFeatures.deletion) {
|
|
12599
12716
|
logger.warn("deleteSelected requires deletion to be enabled");
|
|
12600
12717
|
}
|
|
12601
12718
|
}, [normalizedFeatures.deleteSelected, normalizedFeatures.deletion, logger]);
|
|
12602
|
-
return /* @__PURE__ */
|
|
12719
|
+
return /* @__PURE__ */ jsx26(DataTableCore, { ...rest, features: normalizedFeatures });
|
|
12603
12720
|
}
|
|
12604
|
-
var DataTableComponent =
|
|
12721
|
+
var DataTableComponent = React21.memo(DataTable);
|
|
12605
12722
|
|
|
12606
12723
|
// src/components/DataTable/components/BulkOperationsDropdown.tsx
|
|
12607
12724
|
import {
|
|
@@ -12609,7 +12726,7 @@ import {
|
|
|
12609
12726
|
Download as Download2,
|
|
12610
12727
|
Trash as Trash3
|
|
12611
12728
|
} from "lucide-react";
|
|
12612
|
-
import { jsx as
|
|
12729
|
+
import { jsx as jsx27, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
12613
12730
|
function BulkOperationsDropdown({
|
|
12614
12731
|
operations,
|
|
12615
12732
|
selectedRows = {},
|
|
@@ -12638,7 +12755,7 @@ function BulkOperationsDropdown({
|
|
|
12638
12755
|
}
|
|
12639
12756
|
};
|
|
12640
12757
|
return /* @__PURE__ */ jsxs18(Select, { disabled: !hasSelection, children: [
|
|
12641
|
-
/* @__PURE__ */
|
|
12758
|
+
/* @__PURE__ */ jsx27(SelectTrigger, { asChild: true, children: /* @__PURE__ */ jsxs18(
|
|
12642
12759
|
Button,
|
|
12643
12760
|
{
|
|
12644
12761
|
variant: "outline",
|
|
@@ -12646,7 +12763,7 @@ function BulkOperationsDropdown({
|
|
|
12646
12763
|
disabled: !hasSelection,
|
|
12647
12764
|
className: `min-w-[140px] h-9 px-3 py-2 text-sm font-medium ${className || ""}`,
|
|
12648
12765
|
children: [
|
|
12649
|
-
/* @__PURE__ */
|
|
12766
|
+
/* @__PURE__ */ jsx27(MoreHorizontal2, { className: "h-4 w-4 mr-2 flex-shrink-0" }),
|
|
12650
12767
|
/* @__PURE__ */ jsxs18("span", { className: "truncate", children: [
|
|
12651
12768
|
"Bulk Actions (",
|
|
12652
12769
|
selectedCount,
|
|
@@ -12655,7 +12772,7 @@ function BulkOperationsDropdown({
|
|
|
12655
12772
|
]
|
|
12656
12773
|
}
|
|
12657
12774
|
) }),
|
|
12658
|
-
/* @__PURE__ */
|
|
12775
|
+
/* @__PURE__ */ jsx27(SelectContent, { className: "w-48 !bg-main-50 border border-sec-200 shadow-lg z-[9999]", style: { backgroundColor: "white" }, children: operations.map((operation) => {
|
|
12659
12776
|
const Icon = operationIcons[operation];
|
|
12660
12777
|
const label = operationLabels[operation];
|
|
12661
12778
|
const variant = operationVariants[operation];
|
|
@@ -12667,8 +12784,8 @@ function BulkOperationsDropdown({
|
|
|
12667
12784
|
disabled: !hasSelection,
|
|
12668
12785
|
className: `flex items-center gap-2 ${variant === "destructive" ? "text-destructive focus:text-destructive" : ""}`,
|
|
12669
12786
|
children: [
|
|
12670
|
-
/* @__PURE__ */
|
|
12671
|
-
/* @__PURE__ */
|
|
12787
|
+
/* @__PURE__ */ jsx27(Icon, { className: "h-4 w-4" }),
|
|
12788
|
+
/* @__PURE__ */ jsx27("span", { children: label })
|
|
12672
12789
|
]
|
|
12673
12790
|
},
|
|
12674
12791
|
operation
|
|
@@ -12679,7 +12796,7 @@ function BulkOperationsDropdown({
|
|
|
12679
12796
|
|
|
12680
12797
|
// src/components/DataTable/components/GroupHeader.tsx
|
|
12681
12798
|
import { ChevronDown as ChevronDown4, ChevronRight as ChevronRight3 } from "lucide-react";
|
|
12682
|
-
import { jsx as
|
|
12799
|
+
import { jsx as jsx28, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
12683
12800
|
function GroupHeader({
|
|
12684
12801
|
row,
|
|
12685
12802
|
groupByColumn,
|
|
@@ -12689,14 +12806,14 @@ function GroupHeader({
|
|
|
12689
12806
|
}) {
|
|
12690
12807
|
const groupValue = row.getValue(groupByColumn);
|
|
12691
12808
|
return /* @__PURE__ */ jsxs19("div", { className: "flex items-center py-2 px-4 bg-muted/50 border-b font-medium", children: [
|
|
12692
|
-
/* @__PURE__ */
|
|
12809
|
+
/* @__PURE__ */ jsx28(
|
|
12693
12810
|
Button,
|
|
12694
12811
|
{
|
|
12695
12812
|
variant: "ghost",
|
|
12696
12813
|
size: "sm",
|
|
12697
12814
|
onClick: onToggle,
|
|
12698
12815
|
className: "p-0 h-auto mr-2",
|
|
12699
|
-
children: isExpanded ? /* @__PURE__ */
|
|
12816
|
+
children: isExpanded ? /* @__PURE__ */ jsx28(ChevronDown4, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx28(ChevronRight3, { className: "h-4 w-4" })
|
|
12700
12817
|
}
|
|
12701
12818
|
),
|
|
12702
12819
|
/* @__PURE__ */ jsxs19("span", { className: "text-sm", children: [
|
|
@@ -12738,6 +12855,7 @@ export {
|
|
|
12738
12855
|
AlertTitle,
|
|
12739
12856
|
AlertDescription,
|
|
12740
12857
|
Checkbox,
|
|
12858
|
+
Progress,
|
|
12741
12859
|
Select,
|
|
12742
12860
|
SelectTrigger,
|
|
12743
12861
|
SelectValue,
|
|
@@ -12814,4 +12932,4 @@ lodash/lodash.js:
|
|
|
12814
12932
|
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
|
12815
12933
|
*)
|
|
12816
12934
|
*/
|
|
12817
|
-
//# sourceMappingURL=chunk-
|
|
12935
|
+
//# sourceMappingURL=chunk-JDBO5NCG.js.map
|