@jmruthers/pace-core 0.5.188 → 0.5.190

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.
Files changed (424) hide show
  1. package/core-usage-manifest.json +0 -4
  2. package/dist/{AuthService-B-cd2MA4.d.ts → AuthService-CbP_utw2.d.ts} +7 -3
  3. package/dist/{DataTable-GUFUNZ3N.js → DataTable-ON3IXISJ.js} +8 -8
  4. package/dist/{PublicPageProvider-DrLDztHt.d.ts → PublicPageProvider-C4uxosp6.d.ts} +129 -40
  5. package/dist/{UnifiedAuthProvider-BG0AL5eE.d.ts → UnifiedAuthProvider-BYA9qB-o.d.ts} +4 -3
  6. package/dist/{UnifiedAuthProvider-643PUAIM.js → UnifiedAuthProvider-X5NXANVI.js} +4 -2
  7. package/dist/{api-YP7XD5L6.js → api-I6UCQ5S6.js} +4 -2
  8. package/dist/{chunk-DDM4CCYT.js → chunk-4QYC5L4K.js} +60 -35
  9. package/dist/chunk-4QYC5L4K.js.map +1 -0
  10. package/dist/{chunk-IM4QE42D.js → chunk-73HSNNOQ.js} +141 -326
  11. package/dist/chunk-73HSNNOQ.js.map +1 -0
  12. package/dist/{chunk-YHCN776L.js → chunk-DZWK57KZ.js} +2 -75
  13. package/dist/chunk-DZWK57KZ.js.map +1 -0
  14. package/dist/{chunk-3GOZZZYH.js → chunk-HQVPB5MZ.js} +238 -301
  15. package/dist/chunk-HQVPB5MZ.js.map +1 -0
  16. package/dist/{chunk-THRPYOFK.js → chunk-HW3OVDUF.js} +5 -5
  17. package/dist/chunk-HW3OVDUF.js.map +1 -0
  18. package/dist/{chunk-F2IMUDXZ.js → chunk-I7PSE6JW.js} +75 -2
  19. package/dist/chunk-I7PSE6JW.js.map +1 -0
  20. package/dist/{chunk-VGZZXKBR.js → chunk-J2XXC7R5.js} +280 -52
  21. package/dist/chunk-J2XXC7R5.js.map +1 -0
  22. package/dist/{chunk-UNOTYLQF.js → chunk-NIU6J6OX.js} +772 -725
  23. package/dist/chunk-NIU6J6OX.js.map +1 -0
  24. package/dist/{chunk-HESYZWZW.js → chunk-QWWZ5CAQ.js} +2 -2
  25. package/dist/{chunk-HEHYGYOX.js → chunk-RUYZKXOD.js} +401 -46
  26. package/dist/chunk-RUYZKXOD.js.map +1 -0
  27. package/dist/{chunk-2UUZZJFT.js → chunk-SDMHPX3X.js} +176 -160
  28. package/dist/{chunk-2UUZZJFT.js.map → chunk-SDMHPX3X.js.map} +1 -1
  29. package/dist/{chunk-IPCH26AG.js → chunk-STYK4OH2.js} +11 -11
  30. package/dist/chunk-STYK4OH2.js.map +1 -0
  31. package/dist/{chunk-EFCLXK7F.js → chunk-VVBAW5A5.js} +4201 -3809
  32. package/dist/chunk-VVBAW5A5.js.map +1 -0
  33. package/dist/chunk-Y4BUBBHD.js +614 -0
  34. package/dist/chunk-Y4BUBBHD.js.map +1 -0
  35. package/dist/{chunk-SAUPYVLF.js → chunk-ZSAAAMVR.js} +1 -1
  36. package/dist/chunk-ZSAAAMVR.js.map +1 -0
  37. package/dist/components.d.ts +3 -5
  38. package/dist/components.js +19 -23
  39. package/dist/components.js.map +1 -1
  40. package/dist/eslint-rules/pace-core-compliance.cjs +0 -2
  41. package/dist/{file-reference-D037xOFK.d.ts → file-reference-BavO2eQj.d.ts} +13 -10
  42. package/dist/hooks.d.ts +10 -5
  43. package/dist/hooks.js +14 -8
  44. package/dist/hooks.js.map +1 -1
  45. package/dist/index.d.ts +13 -12
  46. package/dist/index.js +79 -73
  47. package/dist/index.js.map +1 -1
  48. package/dist/providers.d.ts +3 -3
  49. package/dist/providers.js +3 -1
  50. package/dist/rbac/index.d.ts +76 -12
  51. package/dist/rbac/index.js +12 -9
  52. package/dist/types.d.ts +1 -1
  53. package/dist/types.js +1 -1
  54. package/dist/{usePublicRouteParams-CTDELQ7H.d.ts → usePublicRouteParams-DxIDS4bC.d.ts} +16 -9
  55. package/dist/utils.js +16 -16
  56. package/docs/README.md +2 -2
  57. package/docs/api/classes/ColumnFactory.md +1 -1
  58. package/docs/api/classes/ErrorBoundary.md +1 -1
  59. package/docs/api/classes/InvalidScopeError.md +2 -2
  60. package/docs/api/classes/Logger.md +1 -1
  61. package/docs/api/classes/MissingUserContextError.md +2 -2
  62. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  63. package/docs/api/classes/PermissionDeniedError.md +1 -1
  64. package/docs/api/classes/RBACAuditManager.md +1 -1
  65. package/docs/api/classes/RBACCache.md +1 -1
  66. package/docs/api/classes/RBACEngine.md +4 -4
  67. package/docs/api/classes/RBACError.md +1 -1
  68. package/docs/api/classes/RBACNotInitializedError.md +2 -2
  69. package/docs/api/classes/SecureSupabaseClient.md +21 -16
  70. package/docs/api/classes/StorageUtils.md +7 -4
  71. package/docs/api/enums/FileCategory.md +1 -1
  72. package/docs/api/enums/LogLevel.md +1 -1
  73. package/docs/api/enums/RBACErrorCode.md +1 -1
  74. package/docs/api/enums/RPCFunction.md +1 -1
  75. package/docs/api/interfaces/AddressFieldProps.md +1 -1
  76. package/docs/api/interfaces/AddressFieldRef.md +1 -1
  77. package/docs/api/interfaces/AggregateConfig.md +1 -1
  78. package/docs/api/interfaces/AutocompleteOptions.md +1 -1
  79. package/docs/api/interfaces/AvatarProps.md +128 -0
  80. package/docs/api/interfaces/BadgeProps.md +1 -1
  81. package/docs/api/interfaces/ButtonProps.md +1 -1
  82. package/docs/api/interfaces/CalendarProps.md +20 -6
  83. package/docs/api/interfaces/CardProps.md +1 -1
  84. package/docs/api/interfaces/ColorPalette.md +1 -1
  85. package/docs/api/interfaces/ColorShade.md +1 -1
  86. package/docs/api/interfaces/ComplianceResult.md +1 -1
  87. package/docs/api/interfaces/DataAccessRecord.md +9 -9
  88. package/docs/api/interfaces/DataRecord.md +1 -1
  89. package/docs/api/interfaces/DataTableAction.md +1 -1
  90. package/docs/api/interfaces/DataTableColumn.md +1 -1
  91. package/docs/api/interfaces/DataTableProps.md +1 -1
  92. package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
  93. package/docs/api/interfaces/DatabaseComplianceResult.md +1 -1
  94. package/docs/api/interfaces/DatabaseIssue.md +1 -1
  95. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  96. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  97. package/docs/api/interfaces/EventAppRoleData.md +1 -1
  98. package/docs/api/interfaces/ExportColumn.md +1 -1
  99. package/docs/api/interfaces/ExportOptions.md +1 -1
  100. package/docs/api/interfaces/FileDisplayProps.md +62 -16
  101. package/docs/api/interfaces/FileMetadata.md +1 -1
  102. package/docs/api/interfaces/FileReference.md +2 -2
  103. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  104. package/docs/api/interfaces/FileUploadOptions.md +26 -12
  105. package/docs/api/interfaces/FileUploadProps.md +30 -19
  106. package/docs/api/interfaces/FooterProps.md +1 -1
  107. package/docs/api/interfaces/FormFieldProps.md +1 -1
  108. package/docs/api/interfaces/FormProps.md +1 -1
  109. package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
  110. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  111. package/docs/api/interfaces/InputProps.md +1 -1
  112. package/docs/api/interfaces/LabelProps.md +1 -1
  113. package/docs/api/interfaces/LoggerConfig.md +1 -1
  114. package/docs/api/interfaces/LoginFormProps.md +1 -1
  115. package/docs/api/interfaces/NavigationAccessRecord.md +10 -10
  116. package/docs/api/interfaces/NavigationContextType.md +9 -9
  117. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  118. package/docs/api/interfaces/NavigationItem.md +1 -1
  119. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  120. package/docs/api/interfaces/NavigationProviderProps.md +7 -7
  121. package/docs/api/interfaces/Organisation.md +1 -1
  122. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  123. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  124. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  125. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  126. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  127. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  128. package/docs/api/interfaces/PageAccessRecord.md +8 -8
  129. package/docs/api/interfaces/PagePermissionContextType.md +8 -8
  130. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  131. package/docs/api/interfaces/PagePermissionProviderProps.md +7 -7
  132. package/docs/api/interfaces/PaletteData.md +1 -1
  133. package/docs/api/interfaces/ParsedAddress.md +1 -1
  134. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  135. package/docs/api/interfaces/ProgressProps.md +3 -11
  136. package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
  137. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  138. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  139. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  140. package/docs/api/interfaces/QuickFix.md +1 -1
  141. package/docs/api/interfaces/RBACAccessValidateParams.md +1 -1
  142. package/docs/api/interfaces/RBACAccessValidateResult.md +1 -1
  143. package/docs/api/interfaces/RBACAuditLogParams.md +1 -1
  144. package/docs/api/interfaces/RBACAuditLogResult.md +1 -1
  145. package/docs/api/interfaces/RBACConfig.md +1 -1
  146. package/docs/api/interfaces/RBACContext.md +1 -1
  147. package/docs/api/interfaces/RBACLogger.md +1 -1
  148. package/docs/api/interfaces/RBACPageAccessCheckParams.md +1 -1
  149. package/docs/api/interfaces/RBACPerformanceMetrics.md +1 -1
  150. package/docs/api/interfaces/RBACPermissionCheckParams.md +1 -1
  151. package/docs/api/interfaces/RBACPermissionCheckResult.md +1 -1
  152. package/docs/api/interfaces/RBACPermissionsGetParams.md +1 -1
  153. package/docs/api/interfaces/RBACPermissionsGetResult.md +1 -1
  154. package/docs/api/interfaces/RBACResult.md +1 -1
  155. package/docs/api/interfaces/RBACRoleGrantParams.md +1 -1
  156. package/docs/api/interfaces/RBACRoleGrantResult.md +1 -1
  157. package/docs/api/interfaces/RBACRoleRevokeParams.md +1 -1
  158. package/docs/api/interfaces/RBACRoleRevokeResult.md +1 -1
  159. package/docs/api/interfaces/RBACRoleValidateParams.md +1 -1
  160. package/docs/api/interfaces/RBACRoleValidateResult.md +1 -1
  161. package/docs/api/interfaces/RBACRolesListParams.md +1 -1
  162. package/docs/api/interfaces/RBACRolesListResult.md +1 -1
  163. package/docs/api/interfaces/RBACSessionTrackParams.md +1 -1
  164. package/docs/api/interfaces/RBACSessionTrackResult.md +1 -1
  165. package/docs/api/interfaces/ResourcePermissions.md +1 -1
  166. package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
  167. package/docs/api/interfaces/RoleBasedRouterContextType.md +8 -8
  168. package/docs/api/interfaces/RoleBasedRouterProps.md +10 -10
  169. package/docs/api/interfaces/RoleManagementResult.md +1 -1
  170. package/docs/api/interfaces/RouteAccessRecord.md +10 -10
  171. package/docs/api/interfaces/RouteConfig.md +10 -10
  172. package/docs/api/interfaces/RuntimeComplianceResult.md +1 -1
  173. package/docs/api/interfaces/SecureDataContextType.md +9 -9
  174. package/docs/api/interfaces/SecureDataProviderProps.md +8 -8
  175. package/docs/api/interfaces/SessionRestorationLoaderProps.md +1 -1
  176. package/docs/api/interfaces/SetupIssue.md +1 -1
  177. package/docs/api/interfaces/StorageConfig.md +4 -4
  178. package/docs/api/interfaces/StorageFileInfo.md +7 -7
  179. package/docs/api/interfaces/StorageFileMetadata.md +25 -14
  180. package/docs/api/interfaces/StorageListOptions.md +22 -9
  181. package/docs/api/interfaces/StorageListResult.md +4 -4
  182. package/docs/api/interfaces/StorageUploadOptions.md +21 -8
  183. package/docs/api/interfaces/StorageUploadResult.md +6 -6
  184. package/docs/api/interfaces/StorageUrlOptions.md +19 -6
  185. package/docs/api/interfaces/StyleImport.md +1 -1
  186. package/docs/api/interfaces/SwitchProps.md +1 -1
  187. package/docs/api/interfaces/TabsContentProps.md +1 -1
  188. package/docs/api/interfaces/TabsListProps.md +1 -1
  189. package/docs/api/interfaces/TabsProps.md +1 -1
  190. package/docs/api/interfaces/TabsTriggerProps.md +1 -1
  191. package/docs/api/interfaces/TextareaProps.md +1 -1
  192. package/docs/api/interfaces/ToastActionElement.md +1 -1
  193. package/docs/api/interfaces/ToastProps.md +1 -1
  194. package/docs/api/interfaces/UnifiedAuthContextType.md +53 -53
  195. package/docs/api/interfaces/UnifiedAuthProviderProps.md +13 -13
  196. package/docs/api/interfaces/UseFormDialogOptions.md +1 -1
  197. package/docs/api/interfaces/UseFormDialogReturn.md +1 -1
  198. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  199. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  200. package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
  201. package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
  202. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  203. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  204. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +1 -1
  205. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
  206. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  207. package/docs/api/interfaces/UseResolvedScopeOptions.md +4 -4
  208. package/docs/api/interfaces/UseResolvedScopeReturn.md +4 -4
  209. package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
  210. package/docs/api/interfaces/UserEventAccess.md +11 -11
  211. package/docs/api/interfaces/UserMenuProps.md +1 -1
  212. package/docs/api/interfaces/UserProfile.md +1 -1
  213. package/docs/api/modules.md +155 -135
  214. package/docs/api-reference/components.md +72 -29
  215. package/docs/api-reference/providers.md +2 -2
  216. package/docs/api-reference/rpc-functions.md +1 -0
  217. package/docs/best-practices/README.md +1 -1
  218. package/docs/best-practices/deployment.md +8 -8
  219. package/docs/getting-started/examples/README.md +2 -2
  220. package/docs/getting-started/installation-guide.md +4 -4
  221. package/docs/getting-started/quick-start.md +3 -3
  222. package/docs/migration/MIGRATION_GUIDE.md +3 -3
  223. package/docs/rbac/compliance/compliance-guide.md +2 -2
  224. package/docs/rbac/event-based-apps.md +2 -2
  225. package/docs/rbac/getting-started.md +2 -2
  226. package/docs/rbac/quick-start.md +2 -2
  227. package/docs/security/README.md +4 -4
  228. package/docs/standards/07-rbac-and-rls-standard.md +430 -7
  229. package/docs/troubleshooting/README.md +2 -2
  230. package/docs/troubleshooting/migration.md +3 -3
  231. package/package.json +1 -4
  232. package/scripts/check-pace-core-compliance.cjs +1 -1
  233. package/scripts/check-pace-core-compliance.js +1 -1
  234. package/src/__tests__/fixtures/supabase.ts +301 -0
  235. package/src/__tests__/public-recipe-view.test.ts +9 -9
  236. package/src/__tests__/rls-policies.test.ts +197 -61
  237. package/src/components/AddressField/AddressField.test.tsx +42 -0
  238. package/src/components/AddressField/AddressField.tsx +71 -60
  239. package/src/components/AddressField/README.md +1 -0
  240. package/src/components/Alert/Alert.test.tsx +50 -10
  241. package/src/components/Alert/Alert.tsx +5 -3
  242. package/src/components/Avatar/Avatar.test.tsx +252 -226
  243. package/src/components/Avatar/Avatar.tsx +179 -53
  244. package/src/components/Avatar/index.ts +1 -1
  245. package/src/components/Button/Button.test.tsx +2 -1
  246. package/src/components/Button/Button.tsx +3 -3
  247. package/src/components/Calendar/Calendar.test.tsx +53 -37
  248. package/src/components/Calendar/Calendar.tsx +409 -82
  249. package/src/components/Card/Card.test.tsx +7 -4
  250. package/src/components/Card/Card.tsx +3 -6
  251. package/src/components/Checkbox/Checkbox.tsx +2 -2
  252. package/src/components/DataTable/components/ActionButtons.tsx +5 -5
  253. package/src/components/DataTable/components/BulkOperationsDropdown.tsx +2 -2
  254. package/src/components/DataTable/components/ColumnFilter.tsx +1 -1
  255. package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +3 -3
  256. package/src/components/DataTable/components/DataTableBody.tsx +12 -12
  257. package/src/components/DataTable/components/DataTableCore.tsx +3 -3
  258. package/src/components/DataTable/components/DataTableToolbar.tsx +5 -5
  259. package/src/components/DataTable/components/DraggableColumnHeader.tsx +3 -3
  260. package/src/components/DataTable/components/EditableRow.tsx +2 -2
  261. package/src/components/DataTable/components/EmptyState.tsx +3 -3
  262. package/src/components/DataTable/components/GroupHeader.tsx +2 -2
  263. package/src/components/DataTable/components/GroupingDropdown.tsx +1 -1
  264. package/src/components/DataTable/components/ImportModal.tsx +4 -4
  265. package/src/components/DataTable/components/LoadingState.tsx +1 -1
  266. package/src/components/DataTable/components/PaginationControls.tsx +11 -11
  267. package/src/components/DataTable/components/UnifiedTableBody.tsx +9 -9
  268. package/src/components/DataTable/components/ViewRowModal.tsx +2 -2
  269. package/src/components/DataTable/components/__tests__/AccessDeniedPage.test.tsx +11 -37
  270. package/src/components/DataTable/components/__tests__/DataTableToolbar.test.tsx +157 -0
  271. package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +2 -1
  272. package/src/components/DataTable/components/__tests__/VirtualizedDataTable.test.tsx +128 -0
  273. package/src/components/DataTable/core/__tests__/ActionManager.test.ts +19 -0
  274. package/src/components/DataTable/core/__tests__/ColumnFactory.test.ts +51 -0
  275. package/src/components/DataTable/core/__tests__/ColumnManager.test.ts +84 -0
  276. package/src/components/DataTable/core/__tests__/DataManager.test.ts +14 -0
  277. package/src/components/DataTable/core/__tests__/DataTableContext.test.tsx +136 -0
  278. package/src/components/DataTable/core/__tests__/LocalDataAdapter.test.ts +16 -0
  279. package/src/components/DataTable/core/__tests__/PluginRegistry.test.ts +18 -0
  280. package/src/components/DataTable/hooks/useDataTablePermissions.ts +28 -7
  281. package/src/components/DataTable/utils/__tests__/hierarchicalUtils.test.ts +30 -1
  282. package/src/components/DataTable/utils/hierarchicalUtils.ts +38 -10
  283. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +8 -3
  284. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.tsx +4 -4
  285. package/src/components/Dialog/Dialog.tsx +2 -2
  286. package/src/components/EventSelector/EventSelector.tsx +7 -7
  287. package/src/components/FileDisplay/FileDisplay.tsx +291 -179
  288. package/src/components/FileUpload/FileUpload.tsx +7 -4
  289. package/src/components/Header/Header.test.tsx +28 -0
  290. package/src/components/Header/Header.tsx +22 -9
  291. package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +2 -2
  292. package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +19 -14
  293. package/src/components/LoadingSpinner/LoadingSpinner.tsx +5 -5
  294. package/src/components/NavigationMenu/NavigationMenu.test.tsx +127 -1
  295. package/src/components/OrganisationSelector/OrganisationSelector.tsx +8 -8
  296. package/src/components/PaceAppLayout/PaceAppLayout.integration.test.tsx +4 -0
  297. package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +3 -0
  298. package/src/components/PaceAppLayout/PaceAppLayout.security.test.tsx +3 -0
  299. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +16 -6
  300. package/src/components/PaceAppLayout/PaceAppLayout.tsx +37 -3
  301. package/src/components/PaceAppLayout/test-setup.tsx +1 -0
  302. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +66 -45
  303. package/src/components/PaceLoginPage/PaceLoginPage.tsx +6 -4
  304. package/src/components/Progress/Progress.test.tsx +18 -19
  305. package/src/components/Progress/Progress.tsx +31 -32
  306. package/src/components/PublicLayout/PublicLayout.test.tsx +6 -6
  307. package/src/components/PublicLayout/PublicPageProvider.tsx +5 -3
  308. package/src/components/Select/Select.tsx +5 -5
  309. package/src/components/Switch/Switch.test.tsx +2 -1
  310. package/src/components/Switch/Switch.tsx +1 -1
  311. package/src/components/Toast/Toast.tsx +1 -1
  312. package/src/components/Tooltip/Tooltip.test.tsx +8 -2
  313. package/src/components/UserMenu/UserMenu.test.tsx +7 -9
  314. package/src/components/UserMenu/UserMenu.tsx +10 -8
  315. package/src/components/index.ts +2 -1
  316. package/src/eslint-rules/pace-core-compliance.cjs +0 -2
  317. package/src/eslint-rules/pace-core-compliance.js +0 -2
  318. package/src/hooks/__tests__/hooks.integration.test.tsx +4 -1
  319. package/src/hooks/__tests__/useAppConfig.unit.test.ts +76 -5
  320. package/src/hooks/__tests__/useDataTableState.test.ts +76 -0
  321. package/src/hooks/__tests__/useFileUrl.unit.test.ts +25 -69
  322. package/src/hooks/__tests__/useFileUrlCache.test.ts +129 -0
  323. package/src/hooks/__tests__/usePreventTabReload.test.ts +88 -0
  324. package/src/hooks/__tests__/{usePublicEvent.unit.test.ts → usePublicEvent.test.ts} +28 -1
  325. package/src/hooks/__tests__/useQueryCache.test.ts +144 -0
  326. package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +58 -16
  327. package/src/hooks/index.ts +1 -1
  328. package/src/hooks/public/usePublicEvent.ts +2 -2
  329. package/src/hooks/public/usePublicFileDisplay.ts +173 -87
  330. package/src/hooks/useAppConfig.ts +24 -5
  331. package/src/hooks/useFileDisplay.ts +297 -34
  332. package/src/hooks/useFileReference.ts +56 -11
  333. package/src/hooks/useFileUrl.ts +1 -1
  334. package/src/hooks/useInactivityTracker.ts +16 -7
  335. package/src/hooks/usePermissionCache.test.ts +85 -8
  336. package/src/hooks/useQueryCache.ts +21 -0
  337. package/src/hooks/useSecureDataAccess.test.ts +80 -35
  338. package/src/hooks/useSecureDataAccess.ts +80 -37
  339. package/src/index.ts +2 -1
  340. package/src/providers/services/EventServiceProvider.tsx +37 -17
  341. package/src/providers/services/InactivityServiceProvider.tsx +4 -4
  342. package/src/providers/services/OrganisationServiceProvider.tsx +8 -1
  343. package/src/providers/services/UnifiedAuthProvider.tsx +115 -29
  344. package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +451 -0
  345. package/src/rbac/__tests__/engine.comprehensive.test.ts +12 -0
  346. package/src/rbac/__tests__/rbac-engine-core-logic.test.ts +8 -0
  347. package/src/rbac/__tests__/rbac-engine-simplified.test.ts +4 -0
  348. package/src/rbac/api.ts +240 -36
  349. package/src/rbac/cache-invalidation.ts +21 -7
  350. package/src/rbac/compliance/quick-fix-suggestions.ts +1 -1
  351. package/src/rbac/components/NavigationGuard.tsx +23 -63
  352. package/src/rbac/components/NavigationProvider.test.tsx +52 -23
  353. package/src/rbac/components/NavigationProvider.tsx +13 -11
  354. package/src/rbac/components/PagePermissionGuard.tsx +77 -203
  355. package/src/rbac/components/PagePermissionProvider.tsx +13 -11
  356. package/src/rbac/components/PermissionEnforcer.tsx +24 -62
  357. package/src/rbac/components/RoleBasedRouter.tsx +14 -12
  358. package/src/rbac/components/SecureDataProvider.tsx +13 -11
  359. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +104 -41
  360. package/src/rbac/components/__tests__/NavigationProvider.test.tsx +49 -12
  361. package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +22 -1
  362. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +161 -82
  363. package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +22 -1
  364. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +77 -30
  365. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +39 -5
  366. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +47 -4
  367. package/src/rbac/engine.ts +4 -2
  368. package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +144 -52
  369. package/src/rbac/hooks/index.ts +3 -0
  370. package/src/rbac/hooks/useCan.test.ts +101 -53
  371. package/src/rbac/hooks/usePermissions.ts +108 -41
  372. package/src/rbac/hooks/useRBAC.test.ts +11 -3
  373. package/src/rbac/hooks/useRBAC.ts +83 -40
  374. package/src/rbac/hooks/useResolvedScope.test.ts +189 -63
  375. package/src/rbac/hooks/useResolvedScope.ts +128 -70
  376. package/src/rbac/hooks/useSecureSupabase.ts +36 -19
  377. package/src/rbac/hooks/useSuperAdminBypass.ts +126 -0
  378. package/src/rbac/request-deduplication.ts +1 -1
  379. package/src/rbac/secureClient.ts +72 -12
  380. package/src/rbac/security.ts +29 -23
  381. package/src/rbac/types.ts +10 -0
  382. package/src/rbac/utils/__tests__/contextValidator.test.ts +150 -0
  383. package/src/rbac/utils/__tests__/deep-equal.test.ts +53 -0
  384. package/src/rbac/utils/__tests__/eventContext.test.ts +6 -1
  385. package/src/rbac/utils/contextValidator.ts +288 -0
  386. package/src/rbac/utils/eventContext.ts +48 -2
  387. package/src/services/EventService.ts +165 -21
  388. package/src/services/OrganisationService.ts +37 -2
  389. package/src/services/__tests__/EventService.test.ts +26 -21
  390. package/src/types/file-reference.ts +13 -10
  391. package/src/utils/app/appNameResolver.test.ts +346 -73
  392. package/src/utils/context/superAdminOverride.ts +58 -0
  393. package/src/utils/file-reference/index.ts +61 -33
  394. package/src/utils/google-places/googlePlacesUtils.test.ts +98 -0
  395. package/src/utils/google-places/loadGoogleMapsScript.test.ts +83 -0
  396. package/src/utils/storage/helpers.test.ts +1 -1
  397. package/src/utils/storage/helpers.ts +38 -19
  398. package/src/utils/storage/types.ts +15 -8
  399. package/src/utils/validation/__tests__/csrf.test.ts +105 -0
  400. package/src/utils/validation/__tests__/sqlInjectionProtection.test.ts +92 -0
  401. package/src/vite-env.d.ts +2 -2
  402. package/dist/chunk-3GOZZZYH.js.map +0 -1
  403. package/dist/chunk-DDM4CCYT.js.map +0 -1
  404. package/dist/chunk-E7UAOUMY.js +0 -75
  405. package/dist/chunk-E7UAOUMY.js.map +0 -1
  406. package/dist/chunk-EFCLXK7F.js.map +0 -1
  407. package/dist/chunk-F2IMUDXZ.js.map +0 -1
  408. package/dist/chunk-HEHYGYOX.js.map +0 -1
  409. package/dist/chunk-IM4QE42D.js.map +0 -1
  410. package/dist/chunk-IPCH26AG.js.map +0 -1
  411. package/dist/chunk-SAUPYVLF.js.map +0 -1
  412. package/dist/chunk-THRPYOFK.js.map +0 -1
  413. package/dist/chunk-UNOTYLQF.js.map +0 -1
  414. package/dist/chunk-VGZZXKBR.js.map +0 -1
  415. package/dist/chunk-YHCN776L.js.map +0 -1
  416. package/src/hooks/__tests__/usePermissionCache.simple.test.ts +0 -192
  417. package/src/hooks/__tests__/usePermissionCache.unit.test.ts +0 -741
  418. package/src/hooks/__tests__/usePublicEvent.simple.test.ts +0 -703
  419. package/src/rbac/hooks/useRBAC.simple.test.ts +0 -95
  420. package/src/rbac/utils/__tests__/eventContext.unit.test.ts +0 -428
  421. /package/dist/{DataTable-GUFUNZ3N.js.map → DataTable-ON3IXISJ.js.map} +0 -0
  422. /package/dist/{UnifiedAuthProvider-643PUAIM.js.map → UnifiedAuthProvider-X5NXANVI.js.map} +0 -0
  423. /package/dist/{api-YP7XD5L6.js.map → api-I6UCQ5S6.js.map} +0 -0
  424. /package/dist/{chunk-HESYZWZW.js.map → chunk-QWWZ5CAQ.js.map} +0 -0
@@ -1,14 +1,16 @@
1
1
  import {
2
- useCan,
3
- useResolvedScope
4
- } from "./chunk-3GOZZZYH.js";
2
+ useCan
3
+ } from "./chunk-HQVPB5MZ.js";
5
4
  import {
6
5
  toast,
7
6
  useDataTablePerformance
8
7
  } from "./chunk-6C4YBBJM.js";
8
+ import {
9
+ useResolvedScope
10
+ } from "./chunk-Y4BUBBHD.js";
9
11
  import {
10
12
  useUnifiedAuth
11
- } from "./chunk-VGZZXKBR.js";
13
+ } from "./chunk-J2XXC7R5.js";
12
14
  import {
13
15
  cn,
14
16
  renderSafeHtml
@@ -5556,7 +5558,7 @@ function getButtonClasses(variant = "default", size = "default") {
5556
5558
  default: "h-9 px-4 py-2",
5557
5559
  sm: "h-8 rounded-md px-3 text-xs",
5558
5560
  lg: "h-10 rounded-md px-8",
5559
- icon: "h-8 w-8"
5561
+ icon: "size-8"
5560
5562
  };
5561
5563
  return `${baseClasses} ${variantClasses[variant]} ${sizeClasses2[size]}`;
5562
5564
  }
@@ -6100,7 +6102,7 @@ var SelectTrigger = React4.forwardRef(
6100
6102
  ChevronDown,
6101
6103
  {
6102
6104
  className: cn(
6103
- "h-4 w-4 opacity-50 transition-transform pointer-events-none float-right",
6105
+ "size-4 opacity-50 transition-transform pointer-events-none float-right",
6104
6106
  open && "rotate-180"
6105
6107
  )
6106
6108
  },
@@ -6144,7 +6146,7 @@ var SelectTrigger = React4.forwardRef(
6144
6146
  ChevronDown,
6145
6147
  {
6146
6148
  className: cn(
6147
- "h-4 w-4 opacity-50 transition-transform pointer-events-none float-right",
6149
+ "size-4 opacity-50 transition-transform pointer-events-none float-right",
6148
6150
  open && "rotate-180"
6149
6151
  )
6150
6152
  }
@@ -6217,7 +6219,7 @@ var SelectContent = React4.forwardRef(
6217
6219
  role: "listbox",
6218
6220
  children: [
6219
6221
  searchable && /* @__PURE__ */ jsx4("div", { className: "p-2 border-b border-main-200", children: /* @__PURE__ */ jsxs2("div", { className: "relative", children: [
6220
- /* @__PURE__ */ jsx4(Search, { className: "absolute left-2 top-1/2 transform -translate-y-1/2 h-4 w-4 text-main-400" }),
6222
+ /* @__PURE__ */ jsx4(Search, { className: "absolute left-2 top-1/2 transform -translate-y-1/2 size-4 text-main-400" }),
6221
6223
  /* @__PURE__ */ jsx4(
6222
6224
  "input",
6223
6225
  {
@@ -6245,7 +6247,7 @@ var SelectContent = React4.forwardRef(
6245
6247
  className: "absolute right-2 top-1/2 transform -translate-y-1/2 text-main-400 hover:text-main-600",
6246
6248
  "data-testid": "select-clear-search",
6247
6249
  "aria-label": "Clear search",
6248
- children: /* @__PURE__ */ jsx4(X, { className: "h-4 w-4" })
6250
+ children: /* @__PURE__ */ jsx4(X, { className: "size-4" })
6249
6251
  }
6250
6252
  )
6251
6253
  ] }) }),
@@ -6338,7 +6340,7 @@ var SelectItem = React4.forwardRef(
6338
6340
  tabIndex: disabled ? -1 : 0,
6339
6341
  children: [
6340
6342
  children,
6341
- isSelected && /* @__PURE__ */ jsx4(Check, { className: "absolute right-2 h-4 w-4 flex-shrink-0 mt-0.5" })
6343
+ isSelected && /* @__PURE__ */ jsx4(Check, { className: "absolute right-2 size-4 flex-shrink-0 mt-0.5" })
6342
6344
  ]
6343
6345
  }
6344
6346
  );
@@ -6413,7 +6415,7 @@ function GroupingDropdown({
6413
6415
  variant: "outline",
6414
6416
  className: className || "",
6415
6417
  children: [
6416
- /* @__PURE__ */ jsx5(Group, { className: "h-4 w-4 mr-2 flex-shrink-0" }),
6418
+ /* @__PURE__ */ jsx5(Group, { className: "size-4 mr-2 flex-shrink-0" }),
6417
6419
  /* @__PURE__ */ jsx5("span", { className: "truncate", children: "Grouping" })
6418
6420
  ]
6419
6421
  }
@@ -6457,7 +6459,7 @@ var Checkbox = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__
6457
6459
  {
6458
6460
  ref,
6459
6461
  className: cn(
6460
- "peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",
6462
+ "peer size-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",
6461
6463
  className
6462
6464
  ),
6463
6465
  ...props,
@@ -6465,7 +6467,7 @@ var Checkbox = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__
6465
6467
  CheckboxPrimitive.Indicator,
6466
6468
  {
6467
6469
  className: cn("flex items-center justify-center text-current"),
6468
- children: /* @__PURE__ */ jsx6(Check2, { className: "h-4 w-4" })
6470
+ children: /* @__PURE__ */ jsx6(Check2, { className: "size-4" })
6469
6471
  }
6470
6472
  )
6471
6473
  }
@@ -6488,7 +6490,7 @@ function ColumnVisibilityDropdown({
6488
6490
  {
6489
6491
  variant: "outline",
6490
6492
  children: [
6491
- /* @__PURE__ */ jsx7(Settings2, { className: "h-4 w-4 mr-2 flex-shrink-0" }),
6493
+ /* @__PURE__ */ jsx7(Settings2, { className: "size-4 mr-2 flex-shrink-0" }),
6492
6494
  /* @__PURE__ */ jsx7("span", { className: "truncate", children: "Columns" })
6493
6495
  ]
6494
6496
  }
@@ -6509,7 +6511,7 @@ function ColumnVisibilityDropdown({
6509
6511
  });
6510
6512
  },
6511
6513
  children: [
6512
- /* @__PURE__ */ jsx7(Eye, { className: "h-3 w-3 mr-1" }),
6514
+ /* @__PURE__ */ jsx7(Eye, { className: "size-3 mr-1" }),
6513
6515
  "Show All"
6514
6516
  ]
6515
6517
  }
@@ -6528,7 +6530,7 @@ function ColumnVisibilityDropdown({
6528
6530
  });
6529
6531
  },
6530
6532
  children: [
6531
- /* @__PURE__ */ jsx7(EyeOff, { className: "h-3 w-3 mr-1" }),
6533
+ /* @__PURE__ */ jsx7(EyeOff, { className: "size-3 mr-1" }),
6532
6534
  "Hide All"
6533
6535
  ]
6534
6536
  }
@@ -6622,7 +6624,7 @@ function DataTableToolbar({
6622
6624
  variant: "outline",
6623
6625
  onClick: onToggleFilterRow,
6624
6626
  children: [
6625
- /* @__PURE__ */ jsx8(Filter, { className: "h-4 w-4 mr-2 flex-shrink-0" }),
6627
+ /* @__PURE__ */ jsx8(Filter, { className: "size-4 mr-2 flex-shrink-0" }),
6626
6628
  /* @__PURE__ */ jsx8("span", { className: "truncate", children: showFilterRow ? "Hide Filters" : "Show Filters" })
6627
6629
  ]
6628
6630
  }
@@ -6633,7 +6635,7 @@ function DataTableToolbar({
6633
6635
  variant: "outline",
6634
6636
  onClick: onCreateRow,
6635
6637
  children: [
6636
- /* @__PURE__ */ jsx8(Plus, { className: "h-4 w-4 mr-2 flex-shrink-0" }),
6638
+ /* @__PURE__ */ jsx8(Plus, { className: "size-4 mr-2 flex-shrink-0" }),
6637
6639
  /* @__PURE__ */ jsx8("span", { className: "truncate", children: "Add Row" })
6638
6640
  ]
6639
6641
  }
@@ -6645,7 +6647,7 @@ function DataTableToolbar({
6645
6647
  onClick: onImportClick,
6646
6648
  "data-restore-target": "datatable-import-button",
6647
6649
  children: [
6648
- /* @__PURE__ */ jsx8(Upload, { className: "h-4 w-4 mr-2 flex-shrink-0" }),
6650
+ /* @__PURE__ */ jsx8(Upload, { className: "size-4 mr-2 flex-shrink-0" }),
6649
6651
  /* @__PURE__ */ jsx8("span", { className: "truncate", children: "Import" })
6650
6652
  ]
6651
6653
  }
@@ -6656,7 +6658,7 @@ function DataTableToolbar({
6656
6658
  variant: "outline",
6657
6659
  onClick: onExport,
6658
6660
  children: [
6659
- /* @__PURE__ */ jsx8(Download, { className: "h-4 w-4 mr-2 flex-shrink-0" }),
6661
+ /* @__PURE__ */ jsx8(Download, { className: "size-4 mr-2 flex-shrink-0" }),
6660
6662
  /* @__PURE__ */ jsx8("span", { className: "truncate", children: "Export" })
6661
6663
  ]
6662
6664
  }
@@ -6668,7 +6670,7 @@ function DataTableToolbar({
6668
6670
  onClick: () => onDeleteSelected?.(rowSelection),
6669
6671
  disabled: Object.values(rowSelection).filter(Boolean).length === 0,
6670
6672
  children: [
6671
- /* @__PURE__ */ jsx8(Trash2, { className: "h-4 w-4 mr-2 flex-shrink-0" }),
6673
+ /* @__PURE__ */ jsx8(Trash2, { className: "size-4 mr-2 flex-shrink-0" }),
6672
6674
  /* @__PURE__ */ jsx8("span", { className: "truncate", children: "Delete" })
6673
6675
  ]
6674
6676
  }
@@ -6707,7 +6709,7 @@ function EmptyState({
6707
6709
  {
6708
6710
  role: "img",
6709
6711
  "aria-hidden": "true",
6710
- className: "h-12 w-12 text-muted-foreground mb-4",
6712
+ className: "size-12 text-muted-foreground mb-4",
6711
6713
  "data-testid": Icon === Database ? "lucide-database" : Icon === User ? "lucide-user" : "custom-icon"
6712
6714
  }
6713
6715
  ),
@@ -6715,11 +6717,11 @@ function EmptyState({
6715
6717
  /* @__PURE__ */ jsx9("p", { className: "text-sm text-muted-foreground mb-4 max-w-sm", children: description || defaultDescription }),
6716
6718
  isFiltered && onClearFilters || action ? /* @__PURE__ */ jsxs6("div", { className: "flex gap-2", children: [
6717
6719
  isFiltered && onClearFilters && /* @__PURE__ */ jsxs6(Button, { variant: "outline", onClick: onClearFilters, children: [
6718
- /* @__PURE__ */ jsx9(Search3, { className: "h-4 w-4 mr-2" }),
6720
+ /* @__PURE__ */ jsx9(Search3, { className: "size-4 mr-2" }),
6719
6721
  "Clear filters"
6720
6722
  ] }),
6721
6723
  action && /* @__PURE__ */ jsxs6(Button, { onClick: action.onClick, children: [
6722
- /* @__PURE__ */ jsx9(Plus2, { className: "h-4 w-4 mr-2" }),
6724
+ /* @__PURE__ */ jsx9(Plus2, { className: "size-4 mr-2" }),
6723
6725
  action.label
6724
6726
  ] })
6725
6727
  ] }) : null
@@ -6837,7 +6839,7 @@ function ColumnFilter({
6837
6839
  {
6838
6840
  variant: "ghost",
6839
6841
  onClick: clearFilter,
6840
- children: /* @__PURE__ */ jsx10(X2, { className: "h-3 w-3" })
6842
+ children: /* @__PURE__ */ jsx10(X2, { className: "size-3" })
6841
6843
  }
6842
6844
  ),
6843
6845
  hasFilter && /* @__PURE__ */ jsx10("div", { className: "absolute -top-1 -right-1 h-2 w-2 bg-main-500 rounded-full" })
@@ -6997,17 +6999,17 @@ function ActionButtonsComponent({
6997
6999
  "aria-disabled": isDisabled,
6998
7000
  "data-testid": action.testId,
6999
7001
  "aria-label": label,
7000
- className: "h-8 w-8 p-0",
7001
- children: Icon && /* @__PURE__ */ jsx12(Icon, { className: "h-4 w-4" })
7002
+ className: "size-8 p-0",
7003
+ children: Icon && /* @__PURE__ */ jsx12(Icon, { className: "size-4" })
7002
7004
  },
7003
7005
  actionIndex
7004
7006
  );
7005
7007
  }) });
7006
7008
  }
7007
7009
  return /* @__PURE__ */ jsxs8(Select, { children: [
7008
- /* @__PURE__ */ jsx12(SelectTrigger, { asChild: true, children: /* @__PURE__ */ jsxs8(Button, { variant: "ghost", className: "h-8 w-8 p-0", children: [
7010
+ /* @__PURE__ */ jsx12(SelectTrigger, { asChild: true, children: /* @__PURE__ */ jsxs8(Button, { variant: "ghost", className: "size-8 p-0", children: [
7009
7011
  /* @__PURE__ */ jsx12("span", { className: "sr-only", children: "Open menu" }),
7010
- /* @__PURE__ */ jsx12(MoreHorizontal, { className: "h-4 w-4" })
7012
+ /* @__PURE__ */ jsx12(MoreHorizontal, { className: "size-4" })
7011
7013
  ] }) }),
7012
7014
  /* @__PURE__ */ jsx12(SelectContent, { className: "!bg-main-50 border border-sec-200 shadow-lg z-[9999]", style: { backgroundColor: "white" }, children: visibleActions.map((action, actionIndex) => {
7013
7015
  const { Icon, label } = renderAction(action, actionIndex);
@@ -7025,7 +7027,7 @@ function ActionButtonsComponent({
7025
7027
  className: "flex items-center gap-2",
7026
7028
  "aria-disabled": isDisabled,
7027
7029
  children: [
7028
- Icon && /* @__PURE__ */ jsx12(Icon, { className: "h-4 w-4" }),
7030
+ Icon && /* @__PURE__ */ jsx12(Icon, { className: "size-4" }),
7029
7031
  /* @__PURE__ */ jsx12("span", { children: label })
7030
7032
  ]
7031
7033
  },
@@ -7049,7 +7051,7 @@ function SelectEditField({
7049
7051
  onChange,
7050
7052
  className
7051
7053
  }) {
7052
- const logger = React9.useMemo(() => createLogger("SelectEditField"), []);
7054
+ const logger2 = React9.useMemo(() => createLogger("SelectEditField"), []);
7053
7055
  const isSearchable = columnDef.selectSearchable !== false;
7054
7056
  const isCreatable = columnDef.creatable === true;
7055
7057
  const selectRef = React9.useRef(null);
@@ -7142,9 +7144,9 @@ function SelectEditField({
7142
7144
  setSearchTerm("");
7143
7145
  setShowCreateOption(false);
7144
7146
  } catch (error) {
7145
- logger.error("Error creating new item:", error);
7147
+ logger2.error("Error creating new item:", error);
7146
7148
  }
7147
- }, [isCreatable, columnDef.onCreateNew, searchTerm, onChange, logger]);
7149
+ }, [isCreatable, columnDef.onCreateNew, searchTerm, onChange, logger2]);
7148
7150
  return /* @__PURE__ */ jsxs9(
7149
7151
  Select,
7150
7152
  {
@@ -7299,8 +7301,8 @@ function EditableRow({
7299
7301
  return /* @__PURE__ */ jsx13("td", { role: "cell", children: /* @__PURE__ */ jsx13("div", { className: cell.column.columnDef.meta?.align === "right" ? "text-right" : "", children: isSystemColumn ? (
7300
7302
  // System columns: render their normal cell content (checkbox for select, buttons for actions)
7301
7303
  cell.column.id === "actions" ? /* @__PURE__ */ jsxs9("div", { className: "flex gap-1", children: [
7302
- /* @__PURE__ */ jsx13(Button, { onClick: onSave, size: "sm", variant: "default", "aria-label": "Save changes", children: /* @__PURE__ */ jsx13(Check3, { className: "h-4 w-4" }) }),
7303
- /* @__PURE__ */ jsx13(Button, { onClick: onCancel, size: "sm", variant: "outline", "aria-label": "Cancel editing", children: /* @__PURE__ */ jsx13(X3, { className: "h-4 w-4" }) })
7304
+ /* @__PURE__ */ jsx13(Button, { onClick: onSave, size: "sm", variant: "default", "aria-label": "Save changes", children: /* @__PURE__ */ jsx13(Check3, { className: "size-4" }) }),
7305
+ /* @__PURE__ */ jsx13(Button, { onClick: onCancel, size: "sm", variant: "outline", "aria-label": "Cancel editing", children: /* @__PURE__ */ jsx13(X3, { className: "size-4" }) })
7304
7306
  ] }) : (
7305
7307
  // Select column: render the checkbox normally
7306
7308
  flexRender(cell.column.columnDef.cell, cell.getContext())
@@ -7396,11 +7398,17 @@ function groupHierarchicalData(data) {
7396
7398
  return groups;
7397
7399
  }
7398
7400
  var depthCache = /* @__PURE__ */ new WeakMap();
7399
- function getRowDepth(row, allData) {
7400
- let cachedDepths = depthCache.get(allData);
7401
+ var logger = createLogger("HierarchicalUtils");
7402
+ function getRowDepth(row, allData, maxDepth = 100) {
7403
+ let cachedDepthsByLimit = depthCache.get(allData);
7404
+ if (!cachedDepthsByLimit) {
7405
+ cachedDepthsByLimit = /* @__PURE__ */ new Map();
7406
+ depthCache.set(allData, cachedDepthsByLimit);
7407
+ }
7408
+ let cachedDepths = cachedDepthsByLimit.get(maxDepth);
7401
7409
  if (!cachedDepths) {
7402
7410
  cachedDepths = /* @__PURE__ */ new Map();
7403
- depthCache.set(allData, cachedDepths);
7411
+ cachedDepthsByLimit.set(maxDepth, cachedDepths);
7404
7412
  }
7405
7413
  if (cachedDepths.has(row.id)) {
7406
7414
  return cachedDepths.get(row.id);
@@ -7417,8 +7425,17 @@ function getRowDepth(row, allData) {
7417
7425
  parentMap.set(item.id, item);
7418
7426
  }
7419
7427
  });
7428
+ const visited = /* @__PURE__ */ new Set();
7420
7429
  let current = row;
7421
- while (current.parentId) {
7430
+ while (current.parentId && depth < maxDepth) {
7431
+ if (visited.has(current.id)) {
7432
+ logger.warn("Circular reference detected while calculating row depth", {
7433
+ rowId: row.id,
7434
+ currentId: current.id
7435
+ });
7436
+ break;
7437
+ }
7438
+ visited.add(current.id);
7422
7439
  depth++;
7423
7440
  const parent = parentMap.get(current.parentId);
7424
7441
  if (!parent || parent.isParent) {
@@ -7430,6 +7447,12 @@ function getRowDepth(row, allData) {
7430
7447
  break;
7431
7448
  }
7432
7449
  }
7450
+ if (depth >= maxDepth && current.parentId) {
7451
+ logger.warn("Maximum hierarchy depth reached while calculating row depth", {
7452
+ rowId: row.id,
7453
+ maxDepth
7454
+ });
7455
+ }
7433
7456
  }
7434
7457
  cachedDepths.set(row.id, depth);
7435
7458
  return depth;
@@ -7558,7 +7581,7 @@ function SelectEditField2({
7558
7581
  placeholder,
7559
7582
  onChange
7560
7583
  }) {
7561
- const logger = React10.useMemo(() => createLogger("SelectEditField"), []);
7584
+ const logger2 = React10.useMemo(() => createLogger("SelectEditField"), []);
7562
7585
  const isSearchable = columnDef.selectSearchable !== false;
7563
7586
  const isCreatable = columnDef.creatable === true;
7564
7587
  const selectRef = React10.useRef(null);
@@ -7658,9 +7681,9 @@ function SelectEditField2({
7658
7681
  setSearchTerm("");
7659
7682
  setShowCreateOption(false);
7660
7683
  } catch (error) {
7661
- logger.error("Error creating new item:", error);
7684
+ logger2.error("Error creating new item:", error);
7662
7685
  }
7663
- }, [isCreatable, columnDef.onCreateNew, searchTerm, onChange, logger]);
7686
+ }, [isCreatable, columnDef.onCreateNew, searchTerm, onChange, logger2]);
7664
7687
  return /* @__PURE__ */ jsxs10(
7665
7688
  Select,
7666
7689
  {
@@ -7799,7 +7822,7 @@ var RowComponent = React10.memo(({
7799
7822
  }) => {
7800
7823
  const rowRef = useRef2(null);
7801
7824
  const firstInputRef = useRef2(null);
7802
- const logger = React10.useMemo(() => createLogger("RowComponent"), []);
7825
+ const logger2 = React10.useMemo(() => createLogger("RowComponent"), []);
7803
7826
  const rowId = getRowIdSafe(row.original, row.index, getRowId);
7804
7827
  const hierarchicalRow = row.original;
7805
7828
  const isHierarchical = hierarchical?.enabled && hierarchicalRow?.isParent !== void 0;
@@ -7858,7 +7881,7 @@ var RowComponent = React10.memo(({
7858
7881
  size: "sm",
7859
7882
  onClick: () => row.toggleExpanded(),
7860
7883
  className: "p-0 h-auto mr-2",
7861
- children: isExpanded ? /* @__PURE__ */ jsx14(ChevronDown2, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx14(ChevronRight, { className: "h-4 w-4" })
7884
+ children: isExpanded ? /* @__PURE__ */ jsx14(ChevronDown2, { className: "size-4" }) : /* @__PURE__ */ jsx14(ChevronRight, { className: "size-4" })
7862
7885
  }
7863
7886
  ),
7864
7887
  /* @__PURE__ */ jsxs10("span", { className: "text-sm", children: [
@@ -7907,7 +7930,7 @@ var RowComponent = React10.memo(({
7907
7930
  cell.id
7908
7931
  );
7909
7932
  } catch (error) {
7910
- logger.warn("Error in aggregation function:", error);
7933
+ logger2.warn("Error in aggregation function:", error);
7911
7934
  return /* @__PURE__ */ jsx14(
7912
7935
  "td",
7913
7936
  {
@@ -7983,10 +8006,10 @@ var RowComponent = React10.memo(({
7983
8006
  variant: "ghost",
7984
8007
  size: "sm",
7985
8008
  onClick: () => hierarchical?.state?.toggleRow(rowId),
7986
- className: "h-6 w-6 p-0 flex-shrink-0",
8009
+ className: "size-6 p-0 flex-shrink-0",
7987
8010
  "aria-label": isExpanded ? "Collapse row" : "Expand row",
7988
8011
  title: isExpanded ? "Collapse row" : "Expand row",
7989
- children: isExpanded ? /* @__PURE__ */ jsx14(ChevronDown2, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx14(ChevronRight, { className: "h-4 w-4" })
8012
+ children: isExpanded ? /* @__PURE__ */ jsx14(ChevronDown2, { className: "size-4" }) : /* @__PURE__ */ jsx14(ChevronRight, { className: "size-4" })
7990
8013
  }
7991
8014
  ),
7992
8015
  cell.column.id === "actions" ? /* @__PURE__ */ jsx14(
@@ -8049,7 +8072,7 @@ function UnifiedTableBody({
8049
8072
  rbac,
8050
8073
  permissions
8051
8074
  }) {
8052
- const logger = React10.useMemo(() => createLogger("UnifiedTableBody"), []);
8075
+ const logger2 = React10.useMemo(() => createLogger("UnifiedTableBody"), []);
8053
8076
  const headerRef = useRef2(null);
8054
8077
  const bodyRef = useRef2(null);
8055
8078
  const parentRef = useRef2(null);
@@ -8068,12 +8091,12 @@ function UnifiedTableBody({
8068
8091
  const totalSize = effectiveShouldVirtualize ? virtualizer.getTotalSize() : 0;
8069
8092
  useEffect2(() => {
8070
8093
  if (shouldVirtualize && !hasScrollContainer) {
8071
- logger.warn("Virtualization enabled but no scroll container found. Falling back to standard rendering.", {
8094
+ logger2.warn("Virtualization enabled but no scroll container found. Falling back to standard rendering.", {
8072
8095
  rowsLength: rows.length,
8073
8096
  dataLength
8074
8097
  });
8075
8098
  }
8076
- }, [shouldVirtualize, hasScrollContainer, rows.length, dataLength, logger]);
8099
+ }, [shouldVirtualize, hasScrollContainer, rows.length, dataLength, logger2]);
8077
8100
  const renderTableContent = () => {
8078
8101
  if (rows.length === 0) {
8079
8102
  return /* @__PURE__ */ jsx14("tr", { children: /* @__PURE__ */ jsx14(
@@ -8221,18 +8244,18 @@ function UnifiedTableBody({
8221
8244
  "button",
8222
8245
  {
8223
8246
  onClick: onSaveCreation,
8224
- className: "h-8 w-8 p-0 hover:bg-muted/50 flex items-center justify-center",
8247
+ className: "size-8 p-0 hover:bg-muted/50 flex items-center justify-center",
8225
8248
  title: "Save new row",
8226
- children: /* @__PURE__ */ jsx14("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsx14("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) })
8249
+ children: /* @__PURE__ */ jsx14("svg", { className: "size-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsx14("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) })
8227
8250
  }
8228
8251
  ),
8229
8252
  /* @__PURE__ */ jsx14(
8230
8253
  "button",
8231
8254
  {
8232
8255
  onClick: onCancelCreation,
8233
- className: "h-8 w-8 p-0 hover:bg-muted/50 flex items-center justify-center",
8256
+ className: "size-8 p-0 hover:bg-muted/50 flex items-center justify-center",
8234
8257
  title: "Cancel new row",
8235
- children: /* @__PURE__ */ jsx14("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsx14("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
8258
+ children: /* @__PURE__ */ jsx14("svg", { className: "size-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsx14("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
8236
8259
  }
8237
8260
  )
8238
8261
  ]
@@ -8362,29 +8385,29 @@ function calculatePaginationState(config) {
8362
8385
  }
8363
8386
  function validatePaginationConfig(config) {
8364
8387
  const { mode, table, serverData, onPageChange, onPageSizeChange } = config;
8365
- const logger = createLogger("PaginationUtils");
8388
+ const logger2 = createLogger("PaginationUtils");
8366
8389
  let isValid = true;
8367
8390
  if (mode === "server") {
8368
8391
  if (!serverData) {
8369
- logger.warn("Server mode requires serverData");
8392
+ logger2.warn("Server mode requires serverData");
8370
8393
  isValid = false;
8371
8394
  }
8372
8395
  if (!onPageChange) {
8373
- logger.warn("Server mode requires onPageChange callback");
8396
+ logger2.warn("Server mode requires onPageChange callback");
8374
8397
  isValid = false;
8375
8398
  }
8376
8399
  if (!onPageSizeChange) {
8377
- logger.warn("Server mode requires onPageSizeChange callback");
8400
+ logger2.warn("Server mode requires onPageSizeChange callback");
8378
8401
  isValid = false;
8379
8402
  }
8380
8403
  }
8381
8404
  if ((mode === "client" || mode === "hybrid") && !table) {
8382
- logger.warn(`${mode} mode requires table instance`);
8405
+ logger2.warn(`${mode} mode requires table instance`);
8383
8406
  isValid = false;
8384
8407
  }
8385
8408
  if (mode === "hybrid") {
8386
8409
  if (!onPageChange) {
8387
- logger.warn("Hybrid mode requires onPageChange callback for server pagination");
8410
+ logger2.warn("Hybrid mode requires onPageChange callback for server pagination");
8388
8411
  isValid = false;
8389
8412
  }
8390
8413
  }
@@ -8457,11 +8480,11 @@ function PaginationControls({
8457
8480
  const getModeIcon = () => {
8458
8481
  switch (paginationMode) {
8459
8482
  case "server":
8460
- return /* @__PURE__ */ jsx15(Server, { className: "h-3 w-3" });
8483
+ return /* @__PURE__ */ jsx15(Server, { className: "size-3" });
8461
8484
  case "hybrid":
8462
- return /* @__PURE__ */ jsx15(Database2, { className: "h-3 w-3" });
8485
+ return /* @__PURE__ */ jsx15(Database2, { className: "size-3" });
8463
8486
  default:
8464
- return /* @__PURE__ */ jsx15(Zap, { className: "h-3 w-3" });
8487
+ return /* @__PURE__ */ jsx15(Zap, { className: "size-3" });
8465
8488
  }
8466
8489
  };
8467
8490
  const getModeLabel = () => {
@@ -8520,12 +8543,12 @@ function PaginationControls({
8520
8543
  {
8521
8544
  variant: "outline",
8522
8545
  size: "sm",
8523
- className: "h-8 w-8 p-0",
8546
+ className: "size-8 p-0",
8524
8547
  onClick: goToFirstPage,
8525
8548
  disabled: !canPreviousPage || isLoading,
8526
8549
  "aria-label": "Go to first page",
8527
8550
  tabIndex: 0,
8528
- children: /* @__PURE__ */ jsx15(ChevronsLeft, { className: "h-4 w-4" })
8551
+ children: /* @__PURE__ */ jsx15(ChevronsLeft, { className: "size-4" })
8529
8552
  }
8530
8553
  ),
8531
8554
  /* @__PURE__ */ jsx15(
@@ -8533,12 +8556,12 @@ function PaginationControls({
8533
8556
  {
8534
8557
  variant: "outline",
8535
8558
  size: "sm",
8536
- className: "h-8 w-8 p-0",
8559
+ className: "size-8 p-0",
8537
8560
  onClick: goToPreviousPage,
8538
8561
  disabled: !canPreviousPage || isLoading,
8539
8562
  "aria-label": "Go to previous page",
8540
8563
  tabIndex: 0,
8541
- children: /* @__PURE__ */ jsx15(ChevronLeft, { className: "h-4 w-4" })
8564
+ children: /* @__PURE__ */ jsx15(ChevronLeft, { className: "size-4" })
8542
8565
  }
8543
8566
  ),
8544
8567
  /* @__PURE__ */ jsx15(
@@ -8546,12 +8569,12 @@ function PaginationControls({
8546
8569
  {
8547
8570
  variant: "outline",
8548
8571
  size: "sm",
8549
- className: "h-8 w-8 p-0",
8572
+ className: "size-8 p-0",
8550
8573
  onClick: goToNextPage,
8551
8574
  disabled: !canNextPage || isLoading,
8552
8575
  "aria-label": "Go to next page",
8553
8576
  tabIndex: 0,
8554
- children: /* @__PURE__ */ jsx15(ChevronRight2, { className: "h-4 w-4" })
8577
+ children: /* @__PURE__ */ jsx15(ChevronRight2, { className: "size-4" })
8555
8578
  }
8556
8579
  ),
8557
8580
  /* @__PURE__ */ jsx15(
@@ -8559,12 +8582,12 @@ function PaginationControls({
8559
8582
  {
8560
8583
  variant: "outline",
8561
8584
  size: "sm",
8562
- className: "h-8 w-8 p-0",
8585
+ className: "size-8 p-0",
8563
8586
  onClick: goToLastPage,
8564
8587
  disabled: !canNextPage || isLoading,
8565
8588
  "aria-label": "Go to last page",
8566
8589
  tabIndex: 0,
8567
- children: /* @__PURE__ */ jsx15(ChevronsRight, { className: "h-4 w-4" })
8590
+ children: /* @__PURE__ */ jsx15(ChevronsRight, { className: "size-4" })
8568
8591
  }
8569
8592
  )
8570
8593
  ]
@@ -8620,7 +8643,7 @@ function EnhancedPaginationControls({
8620
8643
  import { jsx as jsx16, jsxs as jsxs12 } from "react/jsx-runtime";
8621
8644
  function LoadingState() {
8622
8645
  return /* @__PURE__ */ jsx16("div", { className: "p-8 text-center", children: /* @__PURE__ */ jsxs12("div", { className: "flex items-center justify-center space-x-2", children: [
8623
- /* @__PURE__ */ jsx16("div", { className: "animate-spin rounded-full h-6 w-6 border-b-2 border-primary" }),
8646
+ /* @__PURE__ */ jsx16("div", { className: "animate-spin rounded-full size-6 border-b-2 border-primary" }),
8624
8647
  /* @__PURE__ */ jsx16("span", { "aria-live": "polite", className: "text-muted-foreground", children: "Loading..." })
8625
8648
  ] }) });
8626
8649
  }
@@ -8643,7 +8666,7 @@ var sizeClasses = {
8643
8666
  md: "max-w-md",
8644
8667
  lg: "max-w-lg",
8645
8668
  xl: "max-w-xl",
8646
- full: "max-w-full h-full",
8669
+ full: "max-w-full size-full",
8647
8670
  auto: "max-w-none w-auto min-w-0"
8648
8671
  };
8649
8672
  var Dialog = DialogPrimitive.Root;
@@ -8806,7 +8829,7 @@ var DialogContent = React12.forwardRef(({
8806
8829
  children: [
8807
8830
  children,
8808
8831
  showCloseButton && /* @__PURE__ */ jsxs13(DialogPrimitive.Close, { className: "absolute right-4 top-4 z-10 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground", children: [
8809
- /* @__PURE__ */ jsx17(X4, { className: "h-4 w-4" }),
8832
+ /* @__PURE__ */ jsx17(X4, { className: "size-4" }),
8810
8833
  /* @__PURE__ */ jsx17("span", { className: "sr-only", children: "Close" })
8811
8834
  ] })
8812
8835
  ]
@@ -8950,38 +8973,31 @@ DialogDescription.displayName = DialogPrimitive.Description.displayName;
8950
8973
 
8951
8974
  // src/components/Progress/Progress.tsx
8952
8975
  import * as React13 from "react";
8953
- import * as ProgressPrimitive from "@radix-ui/react-progress";
8954
8976
  import { jsx as jsx18 } from "react/jsx-runtime";
8955
- var Progress = React13.forwardRef(({ className, value, max: max2 = 100, ...props }, ref) => /* @__PURE__ */ jsx18(
8956
- ProgressPrimitive.Root,
8957
- {
8958
- ref,
8959
- className: cn(
8960
- "relative h-2 w-full overflow-hidden rounded-full bg-primary/20",
8961
- className
8962
- ),
8963
- ...props,
8964
- value,
8965
- max: max2,
8966
- "aria-valuenow": value,
8967
- "aria-valuemax": max2,
8968
- "aria-valuemin": 0,
8969
- children: /* @__PURE__ */ jsx18(
8970
- ProgressPrimitive.Indicator,
8971
- {
8972
- className: "h-full w-full flex-1 bg-primary transition-all",
8973
- style: { transform: `translateX(-${100 - (value || 0) / max2 * 100}%)` }
8974
- }
8975
- )
8976
- }
8977
- ));
8978
- Progress.displayName = ProgressPrimitive.Root.displayName;
8977
+ var Progress = React13.forwardRef(({ className, value, max: max2 = 100, ...props }, ref) => {
8978
+ const isIndeterminate = value === void 0;
8979
+ return /* @__PURE__ */ jsx18(
8980
+ "progress",
8981
+ {
8982
+ ref,
8983
+ className: cn(
8984
+ "appearance-none border-0 h-2 w-full rounded-full overflow-hidden transition-all accent-primary",
8985
+ isIndeterminate ? "bg-gradient-to-r from-primary/10 via-primary/90 to-primary/10" : "bg-primary/20",
8986
+ className
8987
+ ),
8988
+ ...isIndeterminate ? {} : { value },
8989
+ max: max2,
8990
+ ...props
8991
+ }
8992
+ );
8993
+ });
8994
+ Progress.displayName = "Progress";
8979
8995
 
8980
8996
  // src/components/DataTable/components/ImportModal.tsx
8981
8997
  import { Upload as Upload2, FileText, AlertCircle } from "lucide-react";
8982
8998
  import { jsx as jsx19, jsxs as jsxs14 } from "react/jsx-runtime";
8983
8999
  function ImportModal({ isOpen, onClose, onImport, config = {} }) {
8984
- const logger = createLogger("ImportModal");
9000
+ const logger2 = createLogger("ImportModal");
8985
9001
  const [file, setFile] = useState4(null);
8986
9002
  const [isProcessing, setIsProcessing] = useState4(false);
8987
9003
  const [error, setError] = useState4(null);
@@ -9173,7 +9189,7 @@ function ImportModal({ isOpen, onClose, onImport, config = {} }) {
9173
9189
  setPreviewData(data.slice(0, 5));
9174
9190
  setTotalCount(data.length);
9175
9191
  } catch (err) {
9176
- logger.error("CSV parsing error:", err);
9192
+ logger2.error("CSV parsing error:", err);
9177
9193
  setError(err instanceof Error ? err.message : "Failed to preview file");
9178
9194
  setPreviewData(null);
9179
9195
  setTotalCount(0);
@@ -9187,7 +9203,7 @@ function ImportModal({ isOpen, onClose, onImport, config = {} }) {
9187
9203
  ] }),
9188
9204
  /* @__PURE__ */ jsxs14("div", { className: "space-y-4", children: [
9189
9205
  /* @__PURE__ */ jsxs14("div", { className: "border-2 border-dashed border-sec-200 rounded-lg p-6 text-center", children: [
9190
- /* @__PURE__ */ jsx19(FileText, { className: "h-8 w-8 mx-auto text-sec-400 mb-2" }),
9206
+ /* @__PURE__ */ jsx19(FileText, { className: "size-8 mx-auto text-sec-400 mb-2" }),
9191
9207
  /* @__PURE__ */ jsx19("p", { className: "text-sec-600 mb-2", children: file ? `Selected: ${file.name}` : uploadText }),
9192
9208
  file && /* @__PURE__ */ jsx19("p", { className: "text-xs text-sec-500", children: "File selected, processing preview..." }),
9193
9209
  /* @__PURE__ */ jsxs14(
@@ -9197,7 +9213,7 @@ function ImportModal({ isOpen, onClose, onImport, config = {} }) {
9197
9213
  size: "sm",
9198
9214
  onClick: () => fileInputRef.current?.click(),
9199
9215
  children: [
9200
- /* @__PURE__ */ jsx19(Upload2, { className: "h-4 w-4 mr-2" }),
9216
+ /* @__PURE__ */ jsx19(Upload2, { className: "size-4 mr-2" }),
9201
9217
  selectFileButtonText
9202
9218
  ]
9203
9219
  }
@@ -9214,12 +9230,12 @@ function ImportModal({ isOpen, onClose, onImport, config = {} }) {
9214
9230
  )
9215
9231
  ] }),
9216
9232
  error && /* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-2 p-3 bg-acc-50 border border-acc-200 rounded text-acc-700", children: [
9217
- /* @__PURE__ */ jsx19(AlertCircle, { className: "h-4 w-4" }),
9233
+ /* @__PURE__ */ jsx19(AlertCircle, { className: "size-4" }),
9218
9234
  /* @__PURE__ */ jsx19("span", { className: "text-sm", children: error })
9219
9235
  ] }),
9220
9236
  validationErrors.length > 0 && /* @__PURE__ */ jsxs14("div", { className: "space-y-2", children: [
9221
9237
  /* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-2 p-3 bg-acc-50 border border-acc-200 rounded text-acc-700", children: [
9222
- /* @__PURE__ */ jsx19(AlertCircle, { className: "h-4 w-4" }),
9238
+ /* @__PURE__ */ jsx19(AlertCircle, { className: "size-4" }),
9223
9239
  /* @__PURE__ */ jsxs14("span", { className: "text-sm font-medium", children: [
9224
9240
  validationErrors.length,
9225
9241
  " validation error",
@@ -9290,7 +9306,7 @@ function ImportModal({ isOpen, onClose, onImport, config = {} }) {
9290
9306
  // src/components/DataTable/components/DataTableModals.tsx
9291
9307
  import { Fragment as Fragment4, jsx as jsx20 } from "react/jsx-runtime";
9292
9308
  function mapCSVToTableColumns(csvData, columns) {
9293
- const logger = createLogger("mapCSVToTableColumns");
9309
+ const logger2 = createLogger("mapCSVToTableColumns");
9294
9310
  const columnMap = /* @__PURE__ */ new Map();
9295
9311
  columns.forEach((col) => {
9296
9312
  const fieldName = col.editAccessorKey || col.accessorKey || col.id;
@@ -9309,11 +9325,11 @@ function mapCSVToTableColumns(csvData, columns) {
9309
9325
  columnMap.set(editAccessorKey.toLowerCase(), editAccessorKey);
9310
9326
  }
9311
9327
  } else {
9312
- logger.warn("Skipping column with missing fieldName or header:", col);
9328
+ logger2.warn("Skipping column with missing fieldName or header:", col);
9313
9329
  }
9314
9330
  });
9315
9331
  if (csvData.length === 0) {
9316
- logger.warn("No CSV data to map");
9332
+ logger2.warn("No CSV data to map");
9317
9333
  return [];
9318
9334
  }
9319
9335
  const mappedData = csvData.map((row, index) => {
@@ -9335,7 +9351,7 @@ function mapCSVToTableColumns(csvData, columns) {
9335
9351
  } else {
9336
9352
  mappedRow[csvHeaderLower] = row[csvHeader];
9337
9353
  if (index === 0) {
9338
- logger.warn(`No mapping found for "${csvHeader}", using as-is`);
9354
+ logger2.warn(`No mapping found for "${csvHeader}", using as-is`);
9339
9355
  }
9340
9356
  }
9341
9357
  });
@@ -9352,7 +9368,7 @@ function DataTableModals({
9352
9368
  onStoreFocus,
9353
9369
  onRestoreFocus
9354
9370
  }) {
9355
- const logger = React15.useMemo(() => createLogger("DataTableModals"), []);
9371
+ const logger2 = React15.useMemo(() => createLogger("DataTableModals"), []);
9356
9372
  useEffect5(() => {
9357
9373
  if (showImportModal) {
9358
9374
  onStoreFocus?.();
@@ -9374,11 +9390,11 @@ function DataTableModals({
9374
9390
  if (columns && columns.length > 0) {
9375
9391
  mappedData = mapCSVToTableColumns(rawData, columns);
9376
9392
  } else {
9377
- logger.warn("No columns provided for mapping, using raw data");
9393
+ logger2.warn("No columns provided for mapping, using raw data");
9378
9394
  mappedData = rawData;
9379
9395
  }
9380
9396
  if (!onImport) {
9381
- logger.error("onImport callback is not provided");
9397
+ logger2.error("onImport callback is not provided");
9382
9398
  throw new Error("Import handler is not configured. Please provide an onImport callback.");
9383
9399
  }
9384
9400
  const result = onImport(mappedData);
@@ -9386,7 +9402,7 @@ function DataTableModals({
9386
9402
  await result;
9387
9403
  }
9388
9404
  } catch (error) {
9389
- logger.error("Import error:", error);
9405
+ logger2.error("Import error:", error);
9390
9406
  throw error;
9391
9407
  }
9392
9408
  },
@@ -9418,7 +9434,7 @@ var Alert = React16.forwardRef(({ className, variant = "default", ...props }, re
9418
9434
  return /* @__PURE__ */ jsx21(AlertContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx21(React16.Fragment, { ...props }) });
9419
9435
  }
9420
9436
  return /* @__PURE__ */ jsx21(AlertContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx21(
9421
- "div",
9437
+ "aside",
9422
9438
  {
9423
9439
  ref,
9424
9440
  className: cn(getAlertClasses(variant), className),
@@ -9586,7 +9602,7 @@ function useColumnOrderPersistence({
9586
9602
  enablePersistence = false,
9587
9603
  storageKey
9588
9604
  }) {
9589
- const logger = createLogger("ColumnOrderPersistence");
9605
+ const logger2 = createLogger("ColumnOrderPersistence");
9590
9606
  const [columnOrder, setColumnOrder] = useState5(defaultOrder);
9591
9607
  const [isLoaded, setIsLoaded] = useState5(false);
9592
9608
  const finalStorageKey = storageKey ? `${storageKey}-column-order` : tableId ? `datatable-column-order-${tableId}` : "datatable-column-order";
@@ -9608,7 +9624,7 @@ function useColumnOrderPersistence({
9608
9624
  }
9609
9625
  }
9610
9626
  } catch (error) {
9611
- logger.warn("Failed to load column order from localStorage:", error);
9627
+ logger2.warn("Failed to load column order from localStorage:", error);
9612
9628
  } finally {
9613
9629
  setIsLoaded(true);
9614
9630
  }
@@ -9619,7 +9635,7 @@ function useColumnOrderPersistence({
9619
9635
  try {
9620
9636
  localStorage.setItem(finalStorageKey, JSON.stringify(newOrder));
9621
9637
  } catch (error) {
9622
- logger.warn("Failed to save column order to localStorage:", error);
9638
+ logger2.warn("Failed to save column order to localStorage:", error);
9623
9639
  }
9624
9640
  }, [enablePersistence, finalStorageKey, storageKey, tableId]);
9625
9641
  const updateColumnOrder = useCallback3((newOrder) => {
@@ -9632,7 +9648,7 @@ function useColumnOrderPersistence({
9632
9648
  try {
9633
9649
  localStorage.removeItem(finalStorageKey);
9634
9650
  } catch (error) {
9635
- logger.warn("Failed to remove column order from localStorage:", error);
9651
+ logger2.warn("Failed to remove column order from localStorage:", error);
9636
9652
  }
9637
9653
  }
9638
9654
  }, [defaultOrder, enablePersistence, finalStorageKey, storageKey, tableId]);
@@ -9646,7 +9662,7 @@ function useColumnOrderPersistence({
9646
9662
  }
9647
9663
  });
9648
9664
  } catch (error) {
9649
- logger.warn("Failed to clear datatable preferences:", error);
9665
+ logger2.warn("Failed to clear datatable preferences:", error);
9650
9666
  }
9651
9667
  }, [enablePersistence]);
9652
9668
  return {
@@ -9666,7 +9682,7 @@ function useColumnVisibilityPersistence({
9666
9682
  enablePersistence = false,
9667
9683
  storageKey
9668
9684
  }) {
9669
- const logger = createLogger("ColumnVisibilityPersistence");
9685
+ const logger2 = createLogger("ColumnVisibilityPersistence");
9670
9686
  const [columnVisibility, setColumnVisibility] = useState6(defaultVisibility);
9671
9687
  const [isLoaded, setIsLoaded] = useState6(false);
9672
9688
  const finalStorageKey = storageKey ? `${storageKey}-column-visibility` : tableId ? `datatable-column-visibility-${tableId}` : "datatable-column-visibility";
@@ -9684,7 +9700,7 @@ function useColumnVisibilityPersistence({
9684
9700
  }
9685
9701
  }
9686
9702
  } catch (error) {
9687
- logger.warn("Failed to load column visibility from localStorage:", error);
9703
+ logger2.warn("Failed to load column visibility from localStorage:", error);
9688
9704
  } finally {
9689
9705
  setIsLoaded(true);
9690
9706
  }
@@ -9694,7 +9710,7 @@ function useColumnVisibilityPersistence({
9694
9710
  try {
9695
9711
  localStorage.setItem(finalStorageKey, JSON.stringify(newVisibility));
9696
9712
  } catch (error) {
9697
- logger.warn("Failed to save column visibility to localStorage:", error);
9713
+ logger2.warn("Failed to save column visibility to localStorage:", error);
9698
9714
  }
9699
9715
  }, [enablePersistence, finalStorageKey]);
9700
9716
  const updateColumnVisibility = useCallback4((newVisibility) => {
@@ -9707,7 +9723,7 @@ function useColumnVisibilityPersistence({
9707
9723
  try {
9708
9724
  localStorage.removeItem(finalStorageKey);
9709
9725
  } catch (error) {
9710
- logger.warn("Failed to remove column visibility from localStorage:", error);
9726
+ logger2.warn("Failed to remove column visibility from localStorage:", error);
9711
9727
  }
9712
9728
  }
9713
9729
  }, [defaultVisibility, enablePersistence, finalStorageKey]);
@@ -9721,7 +9737,7 @@ function useColumnVisibilityPersistence({
9721
9737
  }
9722
9738
  });
9723
9739
  } catch (error) {
9724
- logger.warn("Failed to clear datatable preferences:", error);
9740
+ logger2.warn("Failed to clear datatable preferences:", error);
9725
9741
  }
9726
9742
  }, [enablePersistence]);
9727
9743
  return {
@@ -10502,7 +10518,7 @@ var CardHeader = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE
10502
10518
  "header",
10503
10519
  {
10504
10520
  ref,
10505
- className: cn("flex flex-col space-y-1.5 p-6 min-w-0 w-full", className),
10521
+ className: cn("p-6 min-w-0 w-full", className),
10506
10522
  ...props
10507
10523
  }
10508
10524
  ));
@@ -10511,10 +10527,7 @@ var CardTitle = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE_
10511
10527
  "h3",
10512
10528
  {
10513
10529
  ref,
10514
- className: cn(
10515
- "text-2xl font-semibold leading-none tracking-tight",
10516
- className
10517
- ),
10530
+ className: cn(className),
10518
10531
  ...props
10519
10532
  }
10520
10533
  ));
@@ -10541,7 +10554,7 @@ var CardFooter = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE
10541
10554
  "footer",
10542
10555
  {
10543
10556
  ref,
10544
- className: cn("flex items-center p-6 pt-0 min-w-0 w-full", className),
10557
+ className: cn("p-6 pt-0 min-w-0 w-full", className),
10545
10558
  ...props
10546
10559
  }
10547
10560
  ));
@@ -10709,7 +10722,7 @@ function formatLocaleValue(value, locale) {
10709
10722
  return String(value);
10710
10723
  }
10711
10724
  function generateCSVContent(data, columns, options = {}) {
10712
- const logger = createLogger("generateCSVContent");
10725
+ const logger2 = createLogger("generateCSVContent");
10713
10726
  if (!data.length) return "";
10714
10727
  const {
10715
10728
  includeHeaders = true,
@@ -10727,7 +10740,7 @@ function generateCSVContent(data, columns, options = {}) {
10727
10740
  try {
10728
10741
  value = col.accessorFn(row);
10729
10742
  } catch (error) {
10730
- logger.warn("Error evaluating accessorFn for column:", col.id || col.header, error);
10743
+ logger2.warn("Error evaluating accessorFn for column:", col.id || col.header, error);
10731
10744
  value = void 0;
10732
10745
  }
10733
10746
  } else {
@@ -10744,7 +10757,7 @@ function generateCSVContent(data, columns, options = {}) {
10744
10757
  return csvContent;
10745
10758
  }
10746
10759
  async function exportToCSVWithTableRows(tableRows, columns, columnIdToTableColumn, filename = "download.csv", options = {}) {
10747
- const logger = createLogger("ExportUtils");
10760
+ const logger2 = createLogger("ExportUtils");
10748
10761
  return new Promise((resolve, reject) => {
10749
10762
  try {
10750
10763
  if (typeof window === "undefined") {
@@ -10773,7 +10786,7 @@ async function exportToCSVWithTableRows(tableRows, columns, columnIdToTableColum
10773
10786
  try {
10774
10787
  value = col.accessorFn(tableRow.original);
10775
10788
  } catch (accessorError) {
10776
- logger.warn("Error evaluating accessorFn for column:", col.id || col.header, accessorError);
10789
+ logger2.warn("Error evaluating accessorFn for column:", col.id || col.header, accessorError);
10777
10790
  value = void 0;
10778
10791
  }
10779
10792
  } else {
@@ -10808,13 +10821,13 @@ async function exportToCSVWithTableRows(tableRows, columns, columnIdToTableColum
10808
10821
  link.click();
10809
10822
  document.body.removeChild(link);
10810
10823
  } catch (error) {
10811
- logger.error("Failed to export data to CSV:", error);
10824
+ logger2.error("Failed to export data to CSV:", error);
10812
10825
  reject(error);
10813
10826
  }
10814
10827
  });
10815
10828
  }
10816
10829
  function exportToCSV(data, columns, filename = "download.csv", options = {}) {
10817
- const logger = createLogger("ExportUtils");
10830
+ const logger2 = createLogger("ExportUtils");
10818
10831
  return new Promise((resolve, reject) => {
10819
10832
  try {
10820
10833
  if (typeof window === "undefined") {
@@ -10843,7 +10856,7 @@ function exportToCSV(data, columns, filename = "download.csv", options = {}) {
10843
10856
  link.click();
10844
10857
  document.body.removeChild(link);
10845
10858
  } catch (error) {
10846
- logger.error("Failed to export data to CSV:", error);
10859
+ logger2.error("Failed to export data to CSV:", error);
10847
10860
  reject(error);
10848
10861
  }
10849
10862
  });
@@ -10879,7 +10892,7 @@ function normalizeDataTableFeatures(features) {
10879
10892
 
10880
10893
  // src/components/DataTable/hooks/useDataTablePermissions.ts
10881
10894
  function useDataTablePermissions(rbac, features = {}) {
10882
- const logger = createLogger("DataTablePermissions");
10895
+ const logger2 = createLogger("DataTablePermissions");
10883
10896
  const authResult = useUnifiedAuth();
10884
10897
  const user = authResult.user;
10885
10898
  const pageId = rbac?.pageId;
@@ -10899,7 +10912,7 @@ function useDataTablePermissions(rbac, features = {}) {
10899
10912
  appId: void 0,
10900
10913
  eventId: void 0
10901
10914
  });
10902
- if (rawResolvedScope && rawResolvedScope.organisationId) {
10915
+ if (rawResolvedScope) {
10903
10916
  const newScope = {
10904
10917
  organisationId: rawResolvedScope.organisationId,
10905
10918
  appId: rawResolvedScope.appId,
@@ -10912,11 +10925,14 @@ function useDataTablePermissions(rbac, features = {}) {
10912
10925
  eventId: newScope.eventId
10913
10926
  };
10914
10927
  }
10915
- } else if (!rawResolvedScope) {
10928
+ } else if (!rawResolvedScope && !scopeLoading) {
10916
10929
  stableScopeRef.current = { organisationId: void 0, appId: void 0, eventId: void 0 };
10917
10930
  }
10918
10931
  const stableScope = stableScopeRef.current;
10919
- const effectiveScope = !scopeLoading && stableScope.organisationId ? stableScope : null;
10932
+ const isPageName = !pageId && !!pageName;
10933
+ const needsAppIdForResolution = isPageName;
10934
+ const shouldWaitForScope = scopeLoading || needsAppIdForResolution && !stableScope.appId;
10935
+ const effectiveScope = !shouldWaitForScope ? stableScope : null;
10920
10936
  const userId = user?.id || "";
10921
10937
  const readPermission = `read:page.${effectivePageId}`;
10922
10938
  const createPermission = `create:page.${effectivePageId}`;
@@ -11713,7 +11729,7 @@ function DataTableInternal(props) {
11713
11729
  storageKey,
11714
11730
  onLayoutChange
11715
11731
  } = props;
11716
- const logger = React20.useMemo(() => createLogger("DataTableCore"), []);
11732
+ const logger2 = React20.useMemo(() => createLogger("DataTableCore"), []);
11717
11733
  const authResult = useUnifiedAuth();
11718
11734
  const user = authResult.user;
11719
11735
  const requestedFeatures = useMemo14(
@@ -11859,9 +11875,9 @@ function DataTableInternal(props) {
11859
11875
  });
11860
11876
  useEffect11(() => {
11861
11877
  if (!hierarchicalValidation.isValid) {
11862
- logger.error("Hierarchical data validation failed:", hierarchicalValidation.errors);
11878
+ logger2.error("Hierarchical data validation failed:", hierarchicalValidation.errors);
11863
11879
  }
11864
- }, [hierarchicalValidation, logger]);
11880
+ }, [hierarchicalValidation, logger2]);
11865
11881
  const {
11866
11882
  columnOrder: savedColumnOrder,
11867
11883
  isLoaded: isColumnOrderLoaded,
@@ -11899,11 +11915,11 @@ function DataTableInternal(props) {
11899
11915
  const closestOption = sortedOptions.reduce(
11900
11916
  (prev, curr) => Math.abs(curr - initialPageSize) < Math.abs(prev - initialPageSize) ? curr : prev
11901
11917
  );
11902
- logger.warn(
11918
+ logger2.warn(
11903
11919
  `initialPageSize ${initialPageSize} is not available in page size options [${finalPageSizeOptions.join(", ")}]. Using closest option: ${closestOption}`
11904
11920
  );
11905
11921
  return closestOption;
11906
- }, [initialPageSize, finalPageSizeOptions, secureFeatures.pagination, logger]);
11922
+ }, [initialPageSize, finalPageSizeOptions, secureFeatures.pagination, logger2]);
11907
11923
  const effectivePageSize = useMemo14(() => {
11908
11924
  if (!secureFeatures.pagination || !finalPageSizeOptions.length) {
11909
11925
  return state.pagination.pageSize;
@@ -12009,7 +12025,7 @@ function DataTableInternal(props) {
12009
12025
  variant: "default"
12010
12026
  });
12011
12027
  } catch (error) {
12012
- logger.error("Delete error:", error);
12028
+ logger2.error("Delete error:", error);
12013
12029
  toast({
12014
12030
  title: "Delete Failed",
12015
12031
  description: error instanceof Error ? error.message : "Failed to delete row",
@@ -12099,7 +12115,7 @@ function DataTableInternal(props) {
12099
12115
  return /* @__PURE__ */ jsx25(LoadingComponent, {});
12100
12116
  }
12101
12117
  if (!permissions.canRead.can) {
12102
- logger.warn("Access denied - no read permission:", {
12118
+ logger2.warn("Access denied - no read permission:", {
12103
12119
  canRead: permissions.canRead,
12104
12120
  pageId: effectivePageId,
12105
12121
  isLoading: permissions.canRead.isLoading
@@ -12213,7 +12229,7 @@ function DataTableInternal(props) {
12213
12229
  variant: "default"
12214
12230
  });
12215
12231
  } catch (error) {
12216
- logger.error("Failed to export data:", error);
12232
+ logger2.error("Failed to export data:", error);
12217
12233
  const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
12218
12234
  toast({
12219
12235
  title: "Export Failed",
@@ -12244,7 +12260,7 @@ function DataTableInternal(props) {
12244
12260
  variant: "default"
12245
12261
  });
12246
12262
  } catch (error) {
12247
- logger.error("Bulk delete error:", error);
12263
+ logger2.error("Bulk delete error:", error);
12248
12264
  toast({
12249
12265
  title: "Delete Failed",
12250
12266
  description: error instanceof Error ? error.message : "Failed to delete selected rows",
@@ -12321,7 +12337,7 @@ function DataTableInternal(props) {
12321
12337
  tabIndex: 0,
12322
12338
  children: [
12323
12339
  typeof header.column.columnDef.header === "function" ? header.column.columnDef.header(header.getContext()) : header.column.columnDef.header,
12324
- 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" })
12340
+ header.column.getIsSorted() === "asc" ? /* @__PURE__ */ jsx25(ChevronUp2, { className: "size-4" }) : header.column.getIsSorted() === "desc" ? /* @__PURE__ */ jsx25(ChevronDown3, { className: "size-4" }) : /* @__PURE__ */ jsx25(ChevronsUpDown, { className: "size-4" })
12325
12341
  ]
12326
12342
  }
12327
12343
  ) : typeof header.column.columnDef.header === "function" ? header.column.columnDef.header(header.getContext()) : header.column.columnDef.header
@@ -12433,7 +12449,7 @@ function DataTableInternal(props) {
12433
12449
  variant: "default"
12434
12450
  });
12435
12451
  } catch (error) {
12436
- logger.error("Import error:", error);
12452
+ logger2.error("Import error:", error);
12437
12453
  toast({
12438
12454
  title: "Import Failed",
12439
12455
  description: error instanceof Error ? error.message : "Failed to import data",
@@ -12442,7 +12458,7 @@ function DataTableInternal(props) {
12442
12458
  return;
12443
12459
  }
12444
12460
  } else {
12445
- logger.error("onImport handler not provided");
12461
+ logger2.error("onImport handler not provided");
12446
12462
  toast({
12447
12463
  title: "Import Not Configured",
12448
12464
  description: "Import functionality requires an onImport handler to be provided.",
@@ -12470,7 +12486,7 @@ function DataTableCore(props) {
12470
12486
  // src/components/DataTable/DataTable.tsx
12471
12487
  import { jsx as jsx26 } from "react/jsx-runtime";
12472
12488
  function DataTable(props) {
12473
- const logger = React21.useMemo(() => createLogger("DataTable"), []);
12489
+ const logger2 = React21.useMemo(() => createLogger("DataTable"), []);
12474
12490
  const { features, ...rest } = props;
12475
12491
  const normalizedFeatures = React21.useMemo(
12476
12492
  () => normalizeDataTableFeatures(features),
@@ -12478,9 +12494,9 @@ function DataTable(props) {
12478
12494
  );
12479
12495
  React21.useEffect(() => {
12480
12496
  if (normalizedFeatures.deleteSelected && !normalizedFeatures.deletion) {
12481
- logger.warn("deleteSelected requires deletion to be enabled");
12497
+ logger2.warn("deleteSelected requires deletion to be enabled");
12482
12498
  }
12483
- }, [normalizedFeatures.deleteSelected, normalizedFeatures.deletion, logger]);
12499
+ }, [normalizedFeatures.deleteSelected, normalizedFeatures.deletion, logger2]);
12484
12500
  return /* @__PURE__ */ jsx26(DataTableCore, { ...rest, features: normalizedFeatures });
12485
12501
  }
12486
12502
  var DataTableComponent = React21.memo(DataTable);
@@ -12528,7 +12544,7 @@ function BulkOperationsDropdown({
12528
12544
  disabled: !hasSelection,
12529
12545
  className: `min-w-[140px] h-9 px-3 py-2 text-sm font-medium ${className || ""}`,
12530
12546
  children: [
12531
- /* @__PURE__ */ jsx27(MoreHorizontal2, { className: "h-4 w-4 mr-2 flex-shrink-0" }),
12547
+ /* @__PURE__ */ jsx27(MoreHorizontal2, { className: "size-4 mr-2 flex-shrink-0" }),
12532
12548
  /* @__PURE__ */ jsxs18("span", { className: "truncate", children: [
12533
12549
  "Bulk Actions (",
12534
12550
  selectedCount,
@@ -12549,7 +12565,7 @@ function BulkOperationsDropdown({
12549
12565
  disabled: !hasSelection,
12550
12566
  className: `flex items-center gap-2 ${variant === "destructive" ? "text-destructive focus:text-destructive" : ""}`,
12551
12567
  children: [
12552
- /* @__PURE__ */ jsx27(Icon, { className: "h-4 w-4" }),
12568
+ /* @__PURE__ */ jsx27(Icon, { className: "size-4" }),
12553
12569
  /* @__PURE__ */ jsx27("span", { children: label })
12554
12570
  ]
12555
12571
  },
@@ -12578,7 +12594,7 @@ function GroupHeader({
12578
12594
  size: "sm",
12579
12595
  onClick: onToggle,
12580
12596
  className: "p-0 h-auto mr-2",
12581
- children: isExpanded ? /* @__PURE__ */ jsx28(ChevronDown4, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx28(ChevronRight3, { className: "h-4 w-4" })
12597
+ children: isExpanded ? /* @__PURE__ */ jsx28(ChevronDown4, { className: "size-4" }) : /* @__PURE__ */ jsx28(ChevronRight3, { className: "size-4" })
12582
12598
  }
12583
12599
  ),
12584
12600
  /* @__PURE__ */ jsxs19("span", { className: "text-sm", children: [
@@ -12753,4 +12769,4 @@ lodash/lodash.js:
12753
12769
  * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
12754
12770
  *)
12755
12771
  */
12756
- //# sourceMappingURL=chunk-2UUZZJFT.js.map
12772
+ //# sourceMappingURL=chunk-SDMHPX3X.js.map