@vritti/quantum-ui 0.3.11 → 0.3.12

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.
@@ -1,5 +1,5 @@
1
1
  import { DataTableProps } from './types';
2
- export declare function DataTable<TData>({ table, searchConfig, selectActions, emptyStateConfig, toolbarActions, filters, isLoading, className, enableViews, importExport, mode, onRowClick, selectedRowId, }: DataTableProps<TData>): import("react/jsx-runtime").JSX.Element;
2
+ export declare function DataTable<TData>({ table, searchConfig, selectActions, emptyStateConfig, toolbarActions, filters, isLoading, className, enableViews, importExport, mode, onRowClick, selectedRowId, permission, }: DataTableProps<TData>): import("react/jsx-runtime").JSX.Element | null;
3
3
  export declare namespace DataTable {
4
4
  var displayName: string;
5
5
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../lib/components/DataTable/DataTable.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAiB,cAAc,EAA4B,MAAM,SAAS,CAAC;AA8BvF,wBAAgB,SAAS,CAAC,KAAK,EAAE,EAC/B,KAAK,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,OAAO,EACP,SAAiB,EACjB,SAAS,EACT,WAAkB,EAClB,YAAY,EACZ,IAAa,EACb,UAAU,EACV,aAAa,GACd,EAAE,cAAc,CAAC,KAAK,CAAC,2CAgYvB;yBA9Ye,SAAS"}
1
+ {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../lib/components/DataTable/DataTable.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAiB,cAAc,EAA4B,MAAM,SAAS,CAAC;AA8BvF,wBAAgB,SAAS,CAAC,KAAK,EAAE,EAC/B,KAAK,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,OAAO,EACP,SAAiB,EACjB,SAAS,EACT,WAAkB,EAClB,YAAY,EACZ,IAAa,EACb,UAAU,EACV,aAAa,EACb,UAAU,GACX,EAAE,cAAc,CAAC,KAAK,CAAC,kDA0avB;yBAzbe,SAAS"}
@@ -5,8 +5,10 @@ interface DataTableSelectionBarProps<TData> {
5
5
  children?: React.ReactNode;
6
6
  className?: string;
7
7
  importExport?: ImportExportConfig<TData>;
8
+ exportHidden?: boolean;
9
+ exportLockTip?: string;
8
10
  }
9
- export declare function DataTableSelectionBar<TData>({ table, children, className, importExport, }: DataTableSelectionBarProps<TData>): import("react/jsx-runtime").JSX.Element | null;
11
+ export declare function DataTableSelectionBar<TData>({ table, children, className, importExport, exportHidden, exportLockTip, }: DataTableSelectionBarProps<TData>): import("react/jsx-runtime").JSX.Element | null;
10
12
  export declare namespace DataTableSelectionBar {
11
13
  var displayName: string;
12
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DataTableSelectionBar.d.ts","sourceRoot":"","sources":["../../../../../lib/components/DataTable/components/DataTableSelectionBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAKnD,OAAO,KAAK,EAAiB,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGlE,UAAU,0BAA0B,CAAC,KAAK;IACxC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACpB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;CAC1C;AAGD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,EAC3C,KAAK,EACL,QAAQ,EACR,SAAS,EACT,YAAY,GACb,EAAE,0BAA0B,CAAC,KAAK,CAAC,kDAkEnC;yBAvEe,qBAAqB"}
1
+ {"version":3,"file":"DataTableSelectionBar.d.ts","sourceRoot":"","sources":["../../../../../lib/components/DataTable/components/DataTableSelectionBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAKnD,OAAO,KAAK,EAAiB,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGlE,UAAU,0BAA0B,CAAC,KAAK;IACxC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACpB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAGzC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAGD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,EAC3C,KAAK,EACL,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,EAAE,0BAA0B,CAAC,KAAK,CAAC,kDA6EnC;yBApFe,qBAAqB"}
@@ -52,6 +52,8 @@ export interface ImportExportConfig<TData = unknown> {
52
52
  transformExportRow?: (row: TData) => Record<string, unknown>;
53
53
  filename: string;
54
54
  onSuccess?: () => void;
55
+ importPermission?: string;
56
+ exportPermission?: string;
55
57
  }
56
58
  export interface DataTableProps<TData> {
57
59
  table: Table<TData>;
@@ -65,6 +67,7 @@ export interface DataTableProps<TData> {
65
67
  enableViews?: boolean;
66
68
  importExport?: ImportExportConfig<TData>;
67
69
  mode?: 'page' | 'tab' | 'compact';
70
+ permission?: string;
68
71
  onRowClick?: (row: TData) => void;
69
72
  selectedRowId?: string | null;
70
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../lib/components/DataTable/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../lib/components/DataTable/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,189 @@
1
+ export type PlatformBucket = 'web' | 'mobile';
2
+ export declare const PLATFORMS: PlatformBucket[];
3
+ export interface PlatformCodes {
4
+ web?: string[];
5
+ mobile?: string[];
6
+ }
7
+ export interface PlatformDenyCodes {
8
+ web?: string[] | null;
9
+ mobile?: string[] | null;
10
+ }
11
+ export type FeatureUnlocks = Record<string, PlatformCodes>;
12
+ export type BuFeatureLocks = Record<string, PlatformDenyCodes>;
13
+ export interface SnapshotPermission {
14
+ code: string;
15
+ label: string;
16
+ isGlobal: boolean;
17
+ businesses: string[];
18
+ }
19
+ export interface SnapshotMicrofrontendWeb {
20
+ code: string;
21
+ name: string;
22
+ remoteEntry: string;
23
+ exposedModule: string;
24
+ routePrefix: string;
25
+ }
26
+ export interface SnapshotMicrofrontendMobile {
27
+ code: string;
28
+ name: string;
29
+ remoteEntryAndroid: string;
30
+ remoteEntryIos: string;
31
+ exposedModule: string;
32
+ routePrefix: string;
33
+ }
34
+ export interface SnapshotMicrofrontends {
35
+ web?: SnapshotMicrofrontendWeb;
36
+ mobile?: SnapshotMicrofrontendMobile;
37
+ }
38
+ export interface SnapshotFeature {
39
+ code: string;
40
+ name: string;
41
+ lucideIcon: string;
42
+ sfSymbol: string;
43
+ materialSymbol: string;
44
+ permissions: SnapshotPermission[];
45
+ microfrontends: SnapshotMicrofrontends;
46
+ }
47
+ export interface SnapshotApp {
48
+ code: string;
49
+ name: string;
50
+ icon: string;
51
+ sortOrder: number;
52
+ features: string[];
53
+ }
54
+ export interface SnapshotRoleTemplate {
55
+ name: string;
56
+ code: string;
57
+ features: FeatureUnlocks;
58
+ }
59
+ export interface SnapshotPlan {
60
+ code: string;
61
+ name: string;
62
+ isCustom: boolean;
63
+ maxBusinessUnits: number | null;
64
+ unlockedPermissions: FeatureUnlocks;
65
+ }
66
+ export interface SnapshotBusiness {
67
+ name: string;
68
+ apps: SnapshotApp[];
69
+ roleTemplates: Record<string, SnapshotRoleTemplate>;
70
+ plans: Record<string, SnapshotPlan>;
71
+ }
72
+ export interface VersionSnapshot {
73
+ schemaVersion?: number;
74
+ features: Record<string, SnapshotFeature>;
75
+ businesses: Record<string, SnapshotBusiness>;
76
+ }
77
+ export declare const SNAPSHOT_SCHEMA_VERSION = 1;
78
+ export type LockReason = 'PLAN' | 'BU';
79
+ export interface CatalogPermission {
80
+ code: string;
81
+ locked: boolean;
82
+ lockReason: LockReason | null;
83
+ unlockPlans: string[];
84
+ }
85
+ export interface FeatureCatalogEntry {
86
+ code: string;
87
+ name: string;
88
+ lucideIcon: string | null;
89
+ sfSymbol: string;
90
+ materialSymbol: string;
91
+ web: {
92
+ remoteEntry: string;
93
+ exposedModule: string;
94
+ routePrefix: string;
95
+ } | null;
96
+ mobile: {
97
+ remoteEntryAndroid: string;
98
+ remoteEntryIos: string;
99
+ exposedModule: string;
100
+ routePrefix: string;
101
+ } | null;
102
+ appCode: string;
103
+ appName: string;
104
+ appIcon: string | null;
105
+ appSortOrder: number;
106
+ locked: boolean;
107
+ lockReason: LockReason | null;
108
+ unlockPlans: string[];
109
+ permissions: CatalogPermission[];
110
+ }
111
+ export type RoleItem = SnapshotRoleTemplate;
112
+ export interface BuMatrixCell {
113
+ inPlan: boolean;
114
+ selected: boolean;
115
+ availableIn: string[];
116
+ }
117
+ export interface BuMatrixPermission {
118
+ code: string;
119
+ label: string;
120
+ web: BuMatrixCell | null;
121
+ mobile: BuMatrixCell | null;
122
+ }
123
+ export interface BuMatrixFeature {
124
+ code: string;
125
+ name: string;
126
+ icon: string | null;
127
+ platforms: PlatformBucket[];
128
+ inPlan: boolean;
129
+ availableIn: string[];
130
+ permissions: BuMatrixPermission[];
131
+ }
132
+ export interface BuMatrixApp {
133
+ code: string;
134
+ name: string;
135
+ icon: string | null;
136
+ unlockedCount: number;
137
+ totalCount: number;
138
+ features: BuMatrixFeature[];
139
+ }
140
+ export interface BuMatrix {
141
+ plan: {
142
+ code: string;
143
+ name: string;
144
+ };
145
+ apps: BuMatrixApp[];
146
+ locks: BuFeatureLocks;
147
+ }
148
+ export type RevokedGrants = Record<string, PlatformDenyCodes>;
149
+ export type ClientPlatform = 'web' | 'ios' | 'android';
150
+ export interface LockedPermission {
151
+ code: string;
152
+ reason: LockReason | null;
153
+ unlockPlans: string[];
154
+ }
155
+ export interface PermissionFeature {
156
+ code: string;
157
+ name: string;
158
+ lucideIcon: string | null;
159
+ sfSymbol: string;
160
+ materialSymbol: string;
161
+ permissions: string[];
162
+ locked: boolean;
163
+ lockReason: LockReason | null;
164
+ unlockPlans: string[];
165
+ lockedPermissions: LockedPermission[];
166
+ route: {
167
+ remoteEntry: string;
168
+ exposedModule: string;
169
+ routePrefix: string;
170
+ };
171
+ appCode: string;
172
+ appName: string;
173
+ appIcon: string | null;
174
+ appSortOrder: number;
175
+ }
176
+ export interface ResolveUserFeaturesParams {
177
+ snapshot: VersionSnapshot;
178
+ businessCode: string;
179
+ planCode: string | undefined;
180
+ buLocks: BuFeatureLocks | undefined;
181
+ roleFeatures: FeatureUnlocks;
182
+ platform: ClientPlatform;
183
+ }
184
+ export interface ComposeRoleGrantsParams {
185
+ baseFeatures: FeatureUnlocks | undefined;
186
+ additions: FeatureUnlocks;
187
+ revoked: RevokedGrants | undefined;
188
+ }
189
+ //# sourceMappingURL=catalog-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-resolver.d.ts","sourceRoot":"","sources":["../../../lib/types/catalog-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=api-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-response.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ const PLATFORMS = ["web", "mobile"];
2
+ const SNAPSHOT_SCHEMA_VERSION = 1;
3
+
4
+ export { PLATFORMS, SNAPSHOT_SCHEMA_VERSION };
5
+ //# sourceMappingURL=catalog-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-resolver.js","sources":["../../lib/types/catalog-resolver.ts"],"sourcesContent":["// Frontend mirror of @vritti/api-sdk/catalog-resolver types — keep field-for-field in sync.\n// Web apps import from HERE (quantum-ui), never from the server SDK.\n\nexport type PlatformBucket = 'web' | 'mobile';\n\nexport const PLATFORMS: PlatformBucket[] = ['web', 'mobile'];\n\nexport interface PlatformCodes {\n web?: string[];\n mobile?: string[];\n}\n\nexport interface PlatformDenyCodes {\n web?: string[] | null;\n mobile?: string[] | null;\n}\n\nexport type FeatureUnlocks = Record<string, PlatformCodes>;\n\nexport type BuFeatureLocks = Record<string, PlatformDenyCodes>;\n\nexport interface SnapshotPermission {\n code: string;\n label: string;\n isGlobal: boolean;\n businesses: string[];\n}\n\nexport interface SnapshotMicrofrontendWeb {\n code: string;\n name: string;\n remoteEntry: string;\n exposedModule: string;\n routePrefix: string;\n}\n\nexport interface SnapshotMicrofrontendMobile {\n code: string;\n name: string;\n remoteEntryAndroid: string;\n remoteEntryIos: string;\n exposedModule: string;\n routePrefix: string;\n}\n\nexport interface SnapshotMicrofrontends {\n web?: SnapshotMicrofrontendWeb;\n mobile?: SnapshotMicrofrontendMobile;\n}\n\nexport interface SnapshotFeature {\n code: string;\n name: string;\n lucideIcon: string;\n sfSymbol: string;\n materialSymbol: string;\n permissions: SnapshotPermission[];\n microfrontends: SnapshotMicrofrontends;\n}\n\nexport interface SnapshotApp {\n code: string;\n name: string;\n icon: string;\n sortOrder: number;\n features: string[];\n}\n\nexport interface SnapshotRoleTemplate {\n name: string;\n code: string;\n features: FeatureUnlocks;\n}\n\nexport interface SnapshotPlan {\n code: string;\n name: string;\n isCustom: boolean;\n maxBusinessUnits: number | null;\n unlockedPermissions: FeatureUnlocks;\n}\n\nexport interface SnapshotBusiness {\n name: string;\n apps: SnapshotApp[];\n roleTemplates: Record<string, SnapshotRoleTemplate>;\n plans: Record<string, SnapshotPlan>;\n}\n\nexport interface VersionSnapshot {\n schemaVersion?: number;\n features: Record<string, SnapshotFeature>;\n businesses: Record<string, SnapshotBusiness>;\n}\n\nexport const SNAPSHOT_SCHEMA_VERSION = 1;\n\nexport type LockReason = 'PLAN' | 'BU';\n\nexport interface CatalogPermission {\n code: string;\n locked: boolean;\n lockReason: LockReason | null;\n unlockPlans: string[];\n}\n\nexport interface FeatureCatalogEntry {\n code: string;\n name: string;\n lucideIcon: string | null;\n sfSymbol: string;\n materialSymbol: string;\n web: {\n remoteEntry: string;\n exposedModule: string;\n routePrefix: string;\n } | null;\n mobile: {\n remoteEntryAndroid: string;\n remoteEntryIos: string;\n exposedModule: string;\n routePrefix: string;\n } | null;\n appCode: string;\n appName: string;\n appIcon: string | null;\n appSortOrder: number;\n locked: boolean;\n lockReason: LockReason | null;\n unlockPlans: string[];\n permissions: CatalogPermission[];\n}\n\nexport type RoleItem = SnapshotRoleTemplate;\n\nexport interface BuMatrixCell {\n inPlan: boolean;\n selected: boolean;\n availableIn: string[];\n}\n\nexport interface BuMatrixPermission {\n code: string;\n label: string;\n web: BuMatrixCell | null;\n mobile: BuMatrixCell | null;\n}\n\nexport interface BuMatrixFeature {\n code: string;\n name: string;\n icon: string | null;\n platforms: PlatformBucket[];\n inPlan: boolean;\n availableIn: string[];\n permissions: BuMatrixPermission[];\n}\n\nexport interface BuMatrixApp {\n code: string;\n name: string;\n icon: string | null;\n unlockedCount: number;\n totalCount: number;\n features: BuMatrixFeature[];\n}\n\nexport interface BuMatrix {\n plan: { code: string; name: string };\n apps: BuMatrixApp[];\n locks: BuFeatureLocks;\n}\n\nexport type RevokedGrants = Record<string, PlatformDenyCodes>;\n\nexport type ClientPlatform = 'web' | 'ios' | 'android';\n\nexport interface LockedPermission {\n code: string;\n reason: LockReason | null;\n unlockPlans: string[];\n}\n\nexport interface PermissionFeature {\n code: string;\n name: string;\n lucideIcon: string | null;\n sfSymbol: string;\n materialSymbol: string;\n permissions: string[];\n locked: boolean;\n lockReason: LockReason | null;\n unlockPlans: string[];\n lockedPermissions: LockedPermission[];\n route: {\n remoteEntry: string;\n exposedModule: string;\n routePrefix: string;\n };\n appCode: string;\n appName: string;\n appIcon: string | null;\n appSortOrder: number;\n}\n\nexport interface ResolveUserFeaturesParams {\n snapshot: VersionSnapshot;\n businessCode: string;\n planCode: string | undefined;\n buLocks: BuFeatureLocks | undefined;\n roleFeatures: FeatureUnlocks;\n platform: ClientPlatform;\n}\n\nexport interface ComposeRoleGrantsParams {\n baseFeatures: FeatureUnlocks | undefined;\n additions: FeatureUnlocks;\n revoked: RevokedGrants | undefined;\n}\n"],"names":[],"mappings":"AAKO,MAAM,SAAA,GAA8B,CAAC,KAAA,EAAO,QAAQ;AA0FpD,MAAM,uBAAA,GAA0B;;;;"}
@@ -0,0 +1,17 @@
1
+ const EMPTY_TABLE_STATE = {
2
+ filters: [],
3
+ sort: [],
4
+ columnVisibility: {},
5
+ columnOrder: [],
6
+ columnSizing: {},
7
+ columnPinning: { left: [], right: [] },
8
+ lockedColumnSizing: false,
9
+ density: "normal",
10
+ filterOrder: [],
11
+ filterVisibility: {},
12
+ search: null,
13
+ pagination: { limit: 20, offset: 0 }
14
+ };
15
+
16
+ export { EMPTY_TABLE_STATE };
17
+ //# sourceMappingURL=table-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-filter.js","sources":["../../lib/types/table-filter.ts"],"sourcesContent":["export type StringOperator = 'equals' | 'notEquals' | 'contains' | 'notContains';\nexport type NumberOperator = 'equals' | 'notEquals' | 'gt' | 'gte' | 'lt' | 'lte';\nexport type SelectOperator = 'equals' | 'notEquals';\nexport type MultiSelectOperator = 'isAnyOf' | 'isNotAnyOf';\nexport type FilterOperator = StringOperator | NumberOperator | SelectOperator | MultiSelectOperator;\n\nexport interface FilterCondition {\n field: string;\n operator: FilterOperator;\n value: string | number | string[];\n}\n\nexport interface SortCondition {\n field: string;\n direction: 'asc' | 'desc';\n}\n\nexport type DensityType = 'compact' | 'normal' | 'comfortable';\n\nexport type SearchState = { columnId: string; value: string } | null;\n\nexport interface TableViewState {\n filters: FilterCondition[];\n sort: SortCondition[];\n columnVisibility: Record<string, boolean>;\n columnOrder: string[];\n columnSizing: Record<string, number>;\n columnPinning: { left: string[]; right: string[] };\n lockedColumnSizing: boolean;\n density: DensityType;\n filterOrder: string[];\n filterVisibility: Record<string, boolean>;\n search: SearchState;\n pagination: { limit: number; offset: number };\n}\n\nexport const EMPTY_TABLE_STATE: TableViewState = {\n filters: [],\n sort: [],\n columnVisibility: {},\n columnOrder: [],\n columnSizing: {},\n columnPinning: { left: [], right: [] },\n lockedColumnSizing: false,\n density: 'normal',\n filterOrder: [],\n filterVisibility: {},\n search: null,\n pagination: { limit: 20, offset: 0 },\n};\n"],"names":[],"mappings":"AAoCO,MAAM,iBAAA,GAAoC;AAAA,EAC/C,SAAS,EAAC;AAAA,EACV,MAAM,EAAC;AAAA,EACP,kBAAkB,EAAC;AAAA,EACnB,aAAa,EAAC;AAAA,EACd,cAAc,EAAC;AAAA,EACf,eAAe,EAAE,IAAA,EAAM,EAAC,EAAG,KAAA,EAAO,EAAC,EAAE;AAAA,EACrC,kBAAA,EAAoB,KAAA;AAAA,EACpB,OAAA,EAAS,QAAA;AAAA,EACT,aAAa,EAAC;AAAA,EACd,kBAAkB,EAAC;AAAA,EACnB,MAAA,EAAQ,IAAA;AAAA,EACR,UAAA,EAAY,EAAE,KAAA,EAAO,EAAA,EAAI,QAAQ,CAAA;AACnC;;;;"}
@@ -6,11 +6,12 @@ import { a as useDialog, u as useConfirm } from './useConfirm.js';
6
6
  import { B as Button } from './Button.js';
7
7
  import { D as Dialog, a as DialogActions } from './Dialog.js';
8
8
  import { D as DropdownMenu } from './DropdownMenu.js';
9
- import { b as usePermissionGate, l as lockedTip } from './PermissionGate.js';
9
+ import { b as usePermissionGate, l as lockedTip, u as usePermission, a as PermissionLockIcon } from './PermissionGate.js';
10
10
  import { A as ArrowDown, a as ArrowUp, I as Inbox, S as Settings, C as ChevronsLeft, b as ChevronsRight, c as Columns2, P as Pin, E as EllipsisVertical, F as FileUp, d as FilePlusCorner, R as RefreshCw, e as Equal, f as ArrowLeft, B as BookmarkPlus, L as LayoutList, g as Settings2, h as Funnel, i as ArrowUpFromLine, j as ArrowDownToLine, T as TableProperties } from './table-properties.js';
11
11
  import { useMutation, useQueryClient, useQuery } from '@tanstack/react-query';
12
12
  import * as React from 'react';
13
13
  import React__default, { useRef, Children, isValidElement, cloneElement, useMemo, useState, useEffect, forwardRef, useCallback, useLayoutEffect } from 'react';
14
+ import { EMPTY_TABLE_STATE } from './types/table-filter.js';
14
15
  import { axios } from './utils/axios.js';
15
16
  import { E as Empty } from './Empty.js';
16
17
  import { b as SortableList, a as SortableItem } from './Sortable.js';
@@ -814,21 +815,6 @@ const createImpl = (createState) => {
814
815
  };
815
816
  const create = ((createState) => createState ? createImpl(createState) : createImpl);
816
817
 
817
- const EMPTY_TABLE_STATE = {
818
- filters: [],
819
- sort: [],
820
- columnVisibility: {},
821
- columnOrder: [],
822
- columnSizing: {},
823
- columnPinning: { left: [], right: [] },
824
- lockedColumnSizing: false,
825
- density: "normal",
826
- filterOrder: [],
827
- filterVisibility: {},
828
- search: null,
829
- pagination: { limit: 20, offset: 0 }
830
- };
831
-
832
818
  const MAX_TABLES = 20;
833
819
  function viewStatesEqual(a, b) {
834
820
  return deepEqual(a, b);
@@ -17500,7 +17486,9 @@ function DataTableSelectionBar({
17500
17486
  table,
17501
17487
  children,
17502
17488
  className,
17503
- importExport
17489
+ importExport,
17490
+ exportHidden,
17491
+ exportLockTip
17504
17492
  }) {
17505
17493
  const meta = table.options.meta;
17506
17494
  const selectedRows = table.getFilteredSelectedRowModel().rows;
@@ -17519,7 +17507,18 @@ function DataTableSelectionBar({
17519
17507
  " selected"
17520
17508
  ] }),
17521
17509
  children,
17522
- /* @__PURE__ */ jsx("div", { className: "ml-auto flex items-center gap-2", children: importExport ? /* @__PURE__ */ jsx(
17510
+ /* @__PURE__ */ jsx("div", { className: "ml-auto flex items-center gap-2", children: exportHidden ? null : exportLockTip ? /* @__PURE__ */ jsx(
17511
+ Button,
17512
+ {
17513
+ variant: "outline",
17514
+ size: "sm",
17515
+ className: "h-8 text-sm",
17516
+ disabled: true,
17517
+ disabledTip: exportLockTip,
17518
+ startAdornment: /* @__PURE__ */ jsx(Download, { className: "h-4 w-4" }),
17519
+ children: "Export"
17520
+ }
17521
+ ) : importExport ? /* @__PURE__ */ jsx(
17523
17522
  DropdownMenu,
17524
17523
  {
17525
17524
  trigger: { label: "Export", variant: "outline", icon: Download, className: "h-8 text-sm" },
@@ -21829,10 +21828,14 @@ function DataTable({
21829
21828
  importExport,
21830
21829
  mode = "page",
21831
21830
  onRowClick,
21832
- selectedRowId
21831
+ selectedRowId,
21832
+ permission
21833
21833
  }) {
21834
21834
  const [filtersOpen, setFiltersOpen] = useState(false);
21835
21835
  const importDialog = useDialog();
21836
+ const tableGate = usePermission(permission);
21837
+ const importGate = usePermission(importExport?.importPermission);
21838
+ const exportGate = usePermission(importExport?.exportPermission);
21836
21839
  const meta = table.options.meta;
21837
21840
  const slug = meta?.slug;
21838
21841
  const appliedFilterCount = useDataTableStore((s) => slug ? s.tables[slug]?.activeState?.filters?.length ?? 0 : 0);
@@ -21841,7 +21844,9 @@ function DataTable({
21841
21844
  const density = meta?.density ?? "normal";
21842
21845
  const columnCount = table.getAllColumns().length;
21843
21846
  const visibilityEnabled = table.options.enableHiding !== false;
21844
- const showToolbar = searchConfig || visibilityEnabled || toolbarActions || filters || enableViews && slug || importExport;
21847
+ const showImport = !!importExport && importGate.granted;
21848
+ const showExport = !!importExport && exportGate.granted;
21849
+ const showToolbar = searchConfig || visibilityEnabled || toolbarActions || filters || enableViews && slug || showImport || showExport;
21845
21850
  const search = meta?.search ?? null;
21846
21851
  const hasActiveView = !!activeViewId;
21847
21852
  const hasActiveFilters = hasActiveView ? !!meta?.isFiltersDirty : appliedFilterCount > 0;
@@ -21864,6 +21869,22 @@ function DataTable({
21864
21869
  downloadBlob(response.data, `${importExport.filename}.${format}`);
21865
21870
  }
21866
21871
  });
21872
+ if (!tableGate.granted) {
21873
+ return null;
21874
+ }
21875
+ if (tableGate.locked) {
21876
+ return /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-2", className), children: /* @__PURE__ */ jsxs(
21877
+ "div",
21878
+ {
21879
+ className: "flex flex-col items-center justify-center gap-2 rounded-lg border text-center",
21880
+ style: { height: MODE_HEIGHTS[mode] },
21881
+ children: [
21882
+ /* @__PURE__ */ jsx(PermissionLockIcon, { reason: tableGate.reason, className: "size-6" }),
21883
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: lockedTip(tableGate) })
21884
+ ]
21885
+ }
21886
+ ) });
21887
+ }
21867
21888
  return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-2", className), children: [
21868
21889
  showToolbar && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
21869
21890
  /* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1", children: enableViews && slug && /* @__PURE__ */ jsx(DataTableViewTabs, { slug }) }),
@@ -21894,63 +21915,68 @@ function DataTable({
21894
21915
  visibilityEnabled && /* @__PURE__ */ jsx(DataTableViewOptions, { table }),
21895
21916
  /* @__PURE__ */ jsx(DataTableRowDensity, { table }),
21896
21917
  enableViews && slug && /* @__PURE__ */ jsx(DataTableViewsMenu, { slug }),
21897
- importExport && /* @__PURE__ */ jsx(
21918
+ (showImport || showExport) && /* @__PURE__ */ jsx(
21898
21919
  DropdownMenu,
21899
21920
  {
21900
21921
  trigger: {
21901
21922
  children: /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm", className: "h-8 w-8 p-0", "aria-label": "Import / Export", children: /* @__PURE__ */ jsx(TableProperties, { className: "h-4 w-4" }) })
21902
21923
  },
21903
21924
  items: [
21904
- {
21905
- type: "item",
21906
- id: "import",
21907
- label: "Import",
21908
- icon: ArrowUpFromLine,
21909
- onClick: importDialog.open
21910
- },
21911
- {
21912
- type: "sub",
21913
- id: "export",
21914
- label: "Export All",
21915
- icon: ArrowDownToLine,
21916
- items: [
21917
- {
21918
- type: "item",
21919
- id: "csv",
21920
- label: "CSV (.csv)",
21921
- disabled: exportMutation.isPending,
21922
- onClick: () => exportMutation.mutate("csv")
21923
- },
21924
- {
21925
- type: "item",
21926
- id: "xlsx",
21927
- label: "Excel (.xlsx)",
21928
- disabled: exportMutation.isPending,
21929
- onClick: () => exportMutation.mutate("xlsx")
21930
- },
21931
- {
21932
- type: "item",
21933
- id: "xls",
21934
- label: "Excel 97-2004 (.xls)",
21935
- disabled: exportMutation.isPending,
21936
- onClick: () => exportMutation.mutate("xls")
21937
- },
21938
- {
21939
- type: "item",
21940
- id: "ods",
21941
- label: "OpenDocument (.ods)",
21942
- disabled: exportMutation.isPending,
21943
- onClick: () => exportMutation.mutate("ods")
21944
- },
21945
- {
21946
- type: "item",
21947
- id: "tsv",
21948
- label: "TSV (.tsv)",
21949
- disabled: exportMutation.isPending,
21950
- onClick: () => exportMutation.mutate("tsv")
21951
- }
21952
- ]
21953
- }
21925
+ ...showImport ? [
21926
+ {
21927
+ type: "item",
21928
+ id: "import",
21929
+ label: "Import",
21930
+ icon: ArrowUpFromLine,
21931
+ disabled: importGate.locked,
21932
+ onClick: importDialog.open
21933
+ }
21934
+ ] : [],
21935
+ ...showExport ? [
21936
+ {
21937
+ type: "sub",
21938
+ id: "export",
21939
+ label: "Export All",
21940
+ icon: ArrowDownToLine,
21941
+ items: [
21942
+ {
21943
+ type: "item",
21944
+ id: "csv",
21945
+ label: "CSV (.csv)",
21946
+ disabled: exportMutation.isPending || exportGate.locked,
21947
+ onClick: () => exportMutation.mutate("csv")
21948
+ },
21949
+ {
21950
+ type: "item",
21951
+ id: "xlsx",
21952
+ label: "Excel (.xlsx)",
21953
+ disabled: exportMutation.isPending || exportGate.locked,
21954
+ onClick: () => exportMutation.mutate("xlsx")
21955
+ },
21956
+ {
21957
+ type: "item",
21958
+ id: "xls",
21959
+ label: "Excel 97-2004 (.xls)",
21960
+ disabled: exportMutation.isPending || exportGate.locked,
21961
+ onClick: () => exportMutation.mutate("xls")
21962
+ },
21963
+ {
21964
+ type: "item",
21965
+ id: "ods",
21966
+ label: "OpenDocument (.ods)",
21967
+ disabled: exportMutation.isPending || exportGate.locked,
21968
+ onClick: () => exportMutation.mutate("ods")
21969
+ },
21970
+ {
21971
+ type: "item",
21972
+ id: "tsv",
21973
+ label: "TSV (.tsv)",
21974
+ disabled: exportMutation.isPending || exportGate.locked,
21975
+ onClick: () => exportMutation.mutate("tsv")
21976
+ }
21977
+ ]
21978
+ }
21979
+ ] : []
21954
21980
  ]
21955
21981
  }
21956
21982
  ),
@@ -21966,7 +21992,16 @@ function DataTable({
21966
21992
  animate: { height: "auto", opacity: 1 },
21967
21993
  exit: { height: 0, opacity: 0 },
21968
21994
  transition: { duration: 0.3, ease: [0.4, 0, 0.2, 1] },
21969
- children: /* @__PURE__ */ jsx(DataTableSelectionBar, { table, importExport, children: selectActions?.(table.getFilteredSelectedRowModel().rows) })
21995
+ children: /* @__PURE__ */ jsx(
21996
+ DataTableSelectionBar,
21997
+ {
21998
+ table,
21999
+ importExport,
22000
+ exportHidden: !exportGate.granted,
22001
+ exportLockTip: exportGate.locked ? lockedTip(exportGate) : void 0,
22002
+ children: selectActions?.(table.getFilteredSelectedRowModel().rows)
22003
+ }
22004
+ )
21970
22005
  },
21971
22006
  "selection"
21972
22007
  ) : filters && filtersOpen ? /* @__PURE__ */ jsx(
@@ -22100,7 +22135,7 @@ function DataTable({
22100
22135
  ] })
22101
22136
  ] }),
22102
22137
  (mode !== "compact" || table.getRowCount() > (table.getState().pagination?.pageSize ?? 20)) && /* @__PURE__ */ jsx(DataTablePagination, { table }),
22103
- importExport && /* @__PURE__ */ jsx(
22138
+ importExport && showImport && /* @__PURE__ */ jsx(
22104
22139
  DataTableImportDialog,
22105
22140
  {
22106
22141
  handle: importDialog,