@jmruthers/pace-core 0.6.1 → 0.6.2

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 (502) hide show
  1. package/CHANGELOG.md +43 -10
  2. package/cursor-rules/00-pace-core-compliance.mdc +18 -91
  3. package/cursor-rules/01-standards-compliance.mdc +16 -47
  4. package/cursor-rules/02-project-structure.mdc +4 -4
  5. package/cursor-rules/03-solid-principles.mdc +45 -164
  6. package/cursor-rules/04-testing-standards.mdc +22 -69
  7. package/cursor-rules/05-bug-reports-and-features.mdc +2 -2
  8. package/cursor-rules/06-code-quality.mdc +42 -125
  9. package/cursor-rules/07-tech-stack-compliance.mdc +33 -128
  10. package/cursor-rules/08-markup-quality.mdc +452 -0
  11. package/cursor-rules/CHANGELOG.md +18 -0
  12. package/cursor-rules/README.md +2 -1
  13. package/dist/{AuthService-DjnJHDtC.d.ts → AuthService-BPvc3Ka0.d.ts} +54 -0
  14. package/dist/{DataTable-CH1U5Tpy.d.ts → DataTable-BMRU8a1j.d.ts} +33 -1
  15. package/dist/{DataTable-DQ7RSOHE.js → DataTable-TPTKCX4D.js} +10 -9
  16. package/dist/{PublicPageProvider-ce4xlHYA.d.ts → PublicPageProvider-DC6kCaqf.d.ts} +356 -111
  17. package/dist/{UnifiedAuthProvider-ATAP5UTR.js → UnifiedAuthProvider-CH6Z342H.js} +3 -3
  18. package/dist/{UnifiedAuthProvider-185Ih4dj.d.ts → UnifiedAuthProvider-CVcTjx-d.d.ts} +29 -0
  19. package/dist/{api-N774RPUA.js → api-MVVQZLJI.js} +2 -2
  20. package/dist/{chunk-KNC55RTG.js → chunk-24UVZUZG.js} +90 -54
  21. package/dist/chunk-24UVZUZG.js.map +1 -0
  22. package/dist/{chunk-4N5C5XZU.js → chunk-2UOI2FG5.js} +4 -4
  23. package/dist/chunk-2UOI2FG5.js.map +1 -0
  24. package/dist/{chunk-T33XF5ZC.js → chunk-3XC4CPTD.js} +4317 -3963
  25. package/dist/chunk-3XC4CPTD.js.map +1 -0
  26. package/dist/{chunk-4ZC4GX36.js → chunk-6J4GEEJR.js} +172 -45
  27. package/dist/chunk-6J4GEEJR.js.map +1 -0
  28. package/dist/{chunk-3QRJFVBR.js → chunk-6SOIHG6Z.js} +1 -1
  29. package/dist/chunk-6SOIHG6Z.js.map +1 -0
  30. package/dist/{chunk-BYFSK72L.js → chunk-EHMR7VYL.js} +4 -4
  31. package/dist/chunk-EHMR7VYL.js.map +1 -0
  32. package/dist/{chunk-I7PSE6JW.js → chunk-F2IMUDXZ.js} +2 -75
  33. package/dist/chunk-F2IMUDXZ.js.map +1 -0
  34. package/dist/{chunk-LXQLPRQ2.js → chunk-FFQEQTNW.js} +6 -8
  35. package/dist/chunk-FFQEQTNW.js.map +1 -0
  36. package/dist/chunk-FMUCXFII.js +76 -0
  37. package/dist/chunk-FMUCXFII.js.map +1 -0
  38. package/dist/{chunk-SQGMNID3.js → chunk-L4OXEN46.js} +4 -5
  39. package/dist/chunk-L4OXEN46.js.map +1 -0
  40. package/dist/{chunk-R77UEZ4E.js → chunk-M43Y4SSO.js} +1 -1
  41. package/dist/chunk-M43Y4SSO.js.map +1 -0
  42. package/dist/{chunk-3XTALGJF.js → chunk-MMZ7JXPU.js} +60 -223
  43. package/dist/chunk-MMZ7JXPU.js.map +1 -0
  44. package/dist/{chunk-GLK6VM3F.js → chunk-NECFR5MM.js} +254 -170
  45. package/dist/chunk-NECFR5MM.js.map +1 -0
  46. package/dist/{chunk-JBKQ3SAO.js → chunk-SFZUDBL5.js} +40 -4
  47. package/dist/chunk-SFZUDBL5.js.map +1 -0
  48. package/dist/{chunk-XM25TVIE.js → chunk-XWQCNGTQ.js} +724 -363
  49. package/dist/chunk-XWQCNGTQ.js.map +1 -0
  50. package/dist/components.d.ts +5 -5
  51. package/dist/components.js +14 -11
  52. package/dist/components.js.map +1 -1
  53. package/dist/{functions-D_kgHktt.d.ts → functions-DHebl8-F.d.ts} +1 -1
  54. package/dist/hooks.d.ts +55 -122
  55. package/dist/hooks.js +8 -12
  56. package/dist/hooks.js.map +1 -1
  57. package/dist/index.d.ts +60 -13
  58. package/dist/index.js +19 -19
  59. package/dist/index.js.map +1 -1
  60. package/dist/providers.d.ts +21 -3
  61. package/dist/providers.js +2 -2
  62. package/dist/rbac/index.d.ts +145 -114
  63. package/dist/rbac/index.js +8 -11
  64. package/dist/theming/runtime.d.ts +1 -13
  65. package/dist/theming/runtime.js +1 -1
  66. package/dist/{timezone-_pgH8qrY.d.ts → timezone-CHhWg6b4.d.ts} +3 -10
  67. package/dist/{types-UU913iLA.d.ts → types-BeoeWV5I.d.ts} +8 -0
  68. package/dist/{types-CEpcvwwF.d.ts → types-CkbwOr4Y.d.ts} +6 -0
  69. package/dist/types.d.ts +2 -2
  70. package/dist/{usePublicRouteParams-BJAlWfuJ.d.ts → usePublicRouteParams-1oMokgLF.d.ts} +31 -1
  71. package/dist/utils.d.ts +4 -5
  72. package/dist/utils.js +14 -14
  73. package/dist/utils.js.map +1 -1
  74. package/docs/api/README.md +7 -1
  75. package/docs/api/classes/ColumnFactory.md +8 -8
  76. package/docs/api/classes/InvalidScopeError.md +4 -4
  77. package/docs/api/classes/Logger.md +1 -1
  78. package/docs/api/classes/MissingUserContextError.md +4 -4
  79. package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
  80. package/docs/api/classes/PermissionDeniedError.md +4 -4
  81. package/docs/api/classes/RBACAuditManager.md +1 -1
  82. package/docs/api/classes/RBACCache.md +1 -1
  83. package/docs/api/classes/RBACEngine.md +1 -1
  84. package/docs/api/classes/RBACError.md +4 -4
  85. package/docs/api/classes/RBACNotInitializedError.md +4 -4
  86. package/docs/api/classes/SecureSupabaseClient.md +18 -15
  87. package/docs/api/classes/StorageUtils.md +1 -1
  88. package/docs/api/enums/FileCategory.md +1 -1
  89. package/docs/api/enums/LogLevel.md +1 -1
  90. package/docs/api/enums/RBACErrorCode.md +1 -1
  91. package/docs/api/enums/RPCFunction.md +1 -1
  92. package/docs/api/interfaces/AddressFieldProps.md +1 -1
  93. package/docs/api/interfaces/AddressFieldRef.md +1 -1
  94. package/docs/api/interfaces/AggregateConfig.md +4 -4
  95. package/docs/api/interfaces/AutocompleteOptions.md +1 -1
  96. package/docs/api/interfaces/AvatarProps.md +1 -1
  97. package/docs/api/interfaces/BadgeProps.md +9 -2
  98. package/docs/api/interfaces/ButtonProps.md +7 -4
  99. package/docs/api/interfaces/CalendarProps.md +8 -5
  100. package/docs/api/interfaces/CardProps.md +8 -5
  101. package/docs/api/interfaces/ColorPalette.md +1 -1
  102. package/docs/api/interfaces/ColorShade.md +1 -1
  103. package/docs/api/interfaces/ComplianceResult.md +1 -1
  104. package/docs/api/interfaces/DataAccessRecord.md +9 -9
  105. package/docs/api/interfaces/DataRecord.md +1 -1
  106. package/docs/api/interfaces/DataTableAction.md +24 -21
  107. package/docs/api/interfaces/DataTableColumn.md +31 -31
  108. package/docs/api/interfaces/DataTableProps.md +1 -1
  109. package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
  110. package/docs/api/interfaces/DatabaseComplianceResult.md +1 -1
  111. package/docs/api/interfaces/DatabaseIssue.md +1 -1
  112. package/docs/api/interfaces/EmptyStateConfig.md +5 -5
  113. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  114. package/docs/api/interfaces/ErrorBoundaryProps.md +147 -0
  115. package/docs/api/interfaces/ErrorBoundaryProviderProps.md +36 -0
  116. package/docs/api/interfaces/ErrorBoundaryState.md +75 -0
  117. package/docs/api/interfaces/EventAppRoleData.md +1 -1
  118. package/docs/api/interfaces/ExportColumn.md +1 -1
  119. package/docs/api/interfaces/ExportOptions.md +8 -8
  120. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  121. package/docs/api/interfaces/FileMetadata.md +1 -1
  122. package/docs/api/interfaces/FileReference.md +1 -1
  123. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  124. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  125. package/docs/api/interfaces/FileUploadProps.md +26 -23
  126. package/docs/api/interfaces/FooterProps.md +10 -8
  127. package/docs/api/interfaces/FormFieldProps.md +10 -10
  128. package/docs/api/interfaces/FormProps.md +1 -1
  129. package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
  130. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  131. package/docs/api/interfaces/InputProps.md +7 -4
  132. package/docs/api/interfaces/LabelProps.md +1 -1
  133. package/docs/api/interfaces/LoggerConfig.md +1 -1
  134. package/docs/api/interfaces/LoginFormProps.md +14 -11
  135. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  136. package/docs/api/interfaces/NavigationContextType.md +1 -1
  137. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  138. package/docs/api/interfaces/NavigationItem.md +11 -11
  139. package/docs/api/interfaces/NavigationMenuProps.md +15 -15
  140. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  141. package/docs/api/interfaces/Organisation.md +1 -1
  142. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  143. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  144. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  145. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  146. package/docs/api/interfaces/PaceAppLayoutProps.md +30 -27
  147. package/docs/api/interfaces/PaceLoginPageProps.md +6 -4
  148. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  149. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  150. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  151. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  152. package/docs/api/interfaces/PaletteData.md +1 -1
  153. package/docs/api/interfaces/ParsedAddress.md +1 -1
  154. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  155. package/docs/api/interfaces/ProgressProps.md +1 -1
  156. package/docs/api/interfaces/ProtectedRouteProps.md +7 -26
  157. package/docs/api/interfaces/PublicPageFooterProps.md +9 -9
  158. package/docs/api/interfaces/PublicPageHeaderProps.md +10 -10
  159. package/docs/api/interfaces/PublicPageLayoutProps.md +7 -20
  160. package/docs/api/interfaces/QuickFix.md +1 -1
  161. package/docs/api/interfaces/RBACAccessValidateParams.md +1 -1
  162. package/docs/api/interfaces/RBACAccessValidateResult.md +1 -1
  163. package/docs/api/interfaces/RBACAuditLogParams.md +1 -1
  164. package/docs/api/interfaces/RBACAuditLogResult.md +1 -1
  165. package/docs/api/interfaces/RBACConfig.md +1 -1
  166. package/docs/api/interfaces/RBACContext.md +1 -1
  167. package/docs/api/interfaces/RBACLogger.md +1 -1
  168. package/docs/api/interfaces/RBACPageAccessCheckParams.md +1 -1
  169. package/docs/api/interfaces/RBACPerformanceMetrics.md +1 -1
  170. package/docs/api/interfaces/RBACPermissionCheckParams.md +1 -1
  171. package/docs/api/interfaces/RBACPermissionCheckResult.md +1 -1
  172. package/docs/api/interfaces/RBACPermissionsGetParams.md +1 -1
  173. package/docs/api/interfaces/RBACPermissionsGetResult.md +1 -1
  174. package/docs/api/interfaces/RBACResult.md +1 -1
  175. package/docs/api/interfaces/RBACRoleGrantParams.md +1 -1
  176. package/docs/api/interfaces/RBACRoleGrantResult.md +1 -1
  177. package/docs/api/interfaces/RBACRoleRevokeParams.md +1 -1
  178. package/docs/api/interfaces/RBACRoleRevokeResult.md +1 -1
  179. package/docs/api/interfaces/RBACRoleValidateParams.md +1 -1
  180. package/docs/api/interfaces/RBACRoleValidateResult.md +1 -1
  181. package/docs/api/interfaces/RBACRolesListParams.md +1 -1
  182. package/docs/api/interfaces/RBACRolesListResult.md +1 -1
  183. package/docs/api/interfaces/RBACSessionTrackParams.md +1 -1
  184. package/docs/api/interfaces/RBACSessionTrackResult.md +1 -1
  185. package/docs/api/interfaces/ResourcePermissions.md +1 -1
  186. package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
  187. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  188. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  189. package/docs/api/interfaces/RoleManagementResult.md +1 -1
  190. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  191. package/docs/api/interfaces/RouteConfig.md +1 -1
  192. package/docs/api/interfaces/RuntimeComplianceResult.md +1 -1
  193. package/docs/api/interfaces/SecureDataContextType.md +9 -9
  194. package/docs/api/interfaces/SecureDataProviderProps.md +8 -8
  195. package/docs/api/interfaces/SessionRestorationLoaderProps.md +3 -3
  196. package/docs/api/interfaces/SetupIssue.md +1 -1
  197. package/docs/api/interfaces/StorageConfig.md +1 -1
  198. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  199. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  200. package/docs/api/interfaces/StorageListOptions.md +1 -1
  201. package/docs/api/interfaces/StorageListResult.md +1 -1
  202. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  203. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  204. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  205. package/docs/api/interfaces/StyleImport.md +1 -1
  206. package/docs/api/interfaces/SwitchProps.md +1 -1
  207. package/docs/api/interfaces/TabsContentProps.md +1 -1
  208. package/docs/api/interfaces/TabsListProps.md +1 -1
  209. package/docs/api/interfaces/TabsProps.md +1 -1
  210. package/docs/api/interfaces/TabsTriggerProps.md +3 -3
  211. package/docs/api/interfaces/TextareaProps.md +1 -1
  212. package/docs/api/interfaces/ToastActionElement.md +4 -1
  213. package/docs/api/interfaces/ToastProps.md +1 -1
  214. package/docs/api/interfaces/UnifiedAuthContextType.md +58 -55
  215. package/docs/api/interfaces/UnifiedAuthProviderProps.md +15 -13
  216. package/docs/api/interfaces/UseFormDialogOptions.md +1 -1
  217. package/docs/api/interfaces/UseFormDialogReturn.md +1 -1
  218. package/docs/api/interfaces/UseInactivityTrackerOptions.md +11 -9
  219. package/docs/api/interfaces/UseInactivityTrackerReturn.md +8 -8
  220. package/docs/api/interfaces/UsePublicEventLogoOptions.md +6 -6
  221. package/docs/api/interfaces/UsePublicEventLogoReturn.md +9 -6
  222. package/docs/api/interfaces/UsePublicEventOptions.md +3 -3
  223. package/docs/api/interfaces/UsePublicEventReturn.md +8 -5
  224. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +4 -4
  225. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +12 -9
  226. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +10 -7
  227. package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
  228. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  229. package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
  230. package/docs/api/interfaces/UserEventAccess.md +14 -11
  231. package/docs/api/interfaces/UserMenuProps.md +8 -6
  232. package/docs/api/interfaces/UserProfile.md +1 -1
  233. package/docs/api/modules.md +575 -634
  234. package/docs/architecture/database-schema-requirements.md +161 -0
  235. package/docs/core-concepts/rbac-system.md +3 -3
  236. package/docs/documentation-index.md +2 -4
  237. package/docs/getting-started/cursor-rules.md +2 -1
  238. package/docs/migration/DOCUMENTATION_STRUCTURE.md +441 -0
  239. package/docs/migration/MIGRATION_GUIDE.md +2 -24
  240. package/docs/migration/README.md +52 -6
  241. package/docs/migration/V0.5.190_TO_V0.6.1_MIGRATION.md +1153 -0
  242. package/docs/migration/database-changes-december-2025.md +3 -3
  243. package/docs/rbac/event-based-apps.md +1 -1
  244. package/docs/rbac/getting-started.md +1 -1
  245. package/docs/rbac/quick-start.md +1 -1
  246. package/docs/standards/README.md +1 -0
  247. package/package.json +2 -1
  248. package/scripts/audit/core/checks/accessibility.cjs +197 -0
  249. package/scripts/audit/core/checks/api-usage.cjs +191 -0
  250. package/scripts/audit/core/checks/bundle.cjs +142 -0
  251. package/scripts/{check-pace-core-compliance.cjs → audit/core/checks/compliance.cjs} +714 -687
  252. package/scripts/audit/core/checks/config.cjs +54 -0
  253. package/scripts/audit/core/checks/coverage.cjs +84 -0
  254. package/scripts/audit/core/checks/dependencies.cjs +454 -0
  255. package/scripts/audit/core/checks/documentation.cjs +203 -0
  256. package/scripts/audit/core/checks/environment.cjs +128 -0
  257. package/scripts/audit/core/checks/error-handling.cjs +299 -0
  258. package/scripts/audit/core/checks/forms.cjs +172 -0
  259. package/scripts/audit/core/checks/heuristics.cjs +68 -0
  260. package/scripts/audit/core/checks/hooks.cjs +334 -0
  261. package/scripts/audit/core/checks/imports.cjs +244 -0
  262. package/scripts/audit/core/checks/performance.cjs +325 -0
  263. package/scripts/audit/core/checks/routes.cjs +117 -0
  264. package/scripts/audit/core/checks/state.cjs +130 -0
  265. package/scripts/audit/core/checks/structure.cjs +65 -0
  266. package/scripts/audit/core/checks/style.cjs +584 -0
  267. package/scripts/audit/core/checks/testing.cjs +122 -0
  268. package/scripts/audit/core/checks/typescript.cjs +61 -0
  269. package/scripts/audit/core/scanner.cjs +199 -0
  270. package/scripts/audit/core/utils.cjs +137 -0
  271. package/scripts/audit/index.cjs +223 -0
  272. package/scripts/audit/reporters/console.cjs +151 -0
  273. package/scripts/audit/reporters/json.cjs +54 -0
  274. package/scripts/audit/reporters/markdown.cjs +124 -0
  275. package/scripts/audit-consuming-app.cjs +61 -936
  276. package/scripts/build-docs/build-decision.js +240 -0
  277. package/scripts/build-docs/cache-utils.js +105 -0
  278. package/scripts/build-docs/content-normalization.js +150 -0
  279. package/scripts/build-docs/file-utils.js +105 -0
  280. package/scripts/build-docs/git-utils.js +86 -0
  281. package/scripts/build-docs/hash-utils.js +116 -0
  282. package/scripts/build-docs/typedoc-runner.js +220 -0
  283. package/scripts/build-docs-incremental.js +77 -913
  284. package/scripts/utils/command-runner.js +16 -11
  285. package/scripts/validate-formats.js +61 -56
  286. package/scripts/validate-master.js +74 -69
  287. package/scripts/validate-pre-publish.js +70 -65
  288. package/src/__tests__/hooks/usePermissions.test.ts +2 -2
  289. package/src/components/Alert/Alert.test.tsx +12 -18
  290. package/src/components/Alert/Alert.tsx +5 -7
  291. package/src/components/Avatar/Avatar.test.tsx +4 -4
  292. package/src/components/Badge/Badge.tsx +14 -0
  293. package/src/components/Button/Button.tsx +22 -0
  294. package/src/components/Calendar/Calendar.tsx +8 -2
  295. package/src/components/Card/Card.tsx +4 -0
  296. package/src/components/Checkbox/Checkbox.test.tsx +12 -12
  297. package/src/components/Checkbox/Checkbox.tsx +2 -2
  298. package/src/components/DataTable/DataTable.tsx +38 -4
  299. package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +5 -6
  300. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +18 -4
  301. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +2 -3
  302. package/src/components/DataTable/components/AccessDeniedPage.tsx +16 -25
  303. package/src/components/DataTable/components/ActionButtons.tsx +10 -7
  304. package/src/components/DataTable/components/BulkOperationsDropdown.tsx +1 -1
  305. package/src/components/DataTable/components/ColumnFilter.tsx +10 -0
  306. package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +12 -0
  307. package/src/components/DataTable/components/DataTableBody.tsx +8 -0
  308. package/src/components/DataTable/components/DataTableCore.tsx +196 -554
  309. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +11 -0
  310. package/src/components/DataTable/components/DataTableLayout.tsx +559 -0
  311. package/src/components/DataTable/components/DataTableModals.tsx +8 -0
  312. package/src/components/DataTable/components/DataTableToolbar.tsx +8 -0
  313. package/src/components/DataTable/components/DraggableColumnHeader.tsx +12 -0
  314. package/src/components/DataTable/components/EditFields.tsx +307 -0
  315. package/src/components/DataTable/components/EditableRow.tsx +8 -0
  316. package/src/components/DataTable/components/EmptyState.tsx +10 -0
  317. package/src/components/DataTable/components/FilterRow.tsx +12 -0
  318. package/src/components/DataTable/components/GroupHeader.tsx +12 -0
  319. package/src/components/DataTable/components/GroupingDropdown.tsx +12 -0
  320. package/src/components/DataTable/components/ImportModal.tsx +7 -0
  321. package/src/components/DataTable/components/LoadingState.tsx +6 -0
  322. package/src/components/DataTable/components/PaginationControls.tsx +16 -1
  323. package/src/components/DataTable/components/RowComponent.tsx +391 -0
  324. package/src/components/DataTable/components/UnifiedTableBody.tsx +61 -849
  325. package/src/components/DataTable/components/VirtualizedDataTable.tsx +16 -4
  326. package/src/components/DataTable/components/__tests__/AccessDeniedPage.test.tsx +4 -2
  327. package/src/components/DataTable/components/cellValueUtils.ts +40 -0
  328. package/src/components/DataTable/components/hooks/useImportModalFocus.ts +53 -0
  329. package/src/components/DataTable/components/hooks/usePermissionTracking.ts +126 -0
  330. package/src/components/DataTable/context/DataTableContext.tsx +50 -0
  331. package/src/components/DataTable/core/ColumnFactory.ts +31 -0
  332. package/src/components/DataTable/core/DataTableContext.tsx +32 -1
  333. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +10 -0
  334. package/src/components/DataTable/hooks/useColumnReordering.ts +12 -0
  335. package/src/components/DataTable/hooks/useColumnVisibilityPersistence.ts +10 -0
  336. package/src/components/DataTable/hooks/useDataTableDataPipeline.ts +16 -0
  337. package/src/components/DataTable/hooks/useDataTablePermissions.ts +124 -32
  338. package/src/components/DataTable/hooks/useDataTableState.ts +35 -1
  339. package/src/components/DataTable/hooks/useEffectiveColumnOrder.ts +12 -0
  340. package/src/components/DataTable/hooks/useServerSideDataEffect.ts +11 -0
  341. package/src/components/DataTable/hooks/useTableColumns.ts +8 -0
  342. package/src/components/DataTable/hooks/useTableHandlers.ts +14 -0
  343. package/src/components/DataTable/styles.ts +6 -6
  344. package/src/components/DataTable/types.ts +6 -10
  345. package/src/components/DataTable/utils/a11yUtils.ts +7 -0
  346. package/src/components/DataTable/utils/debugTools.ts +18 -113
  347. package/src/components/DataTable/utils/errorHandling.ts +12 -0
  348. package/src/components/DataTable/utils/exportUtils.ts +9 -0
  349. package/src/components/DataTable/utils/flexibleImport.ts +12 -48
  350. package/src/components/DataTable/utils/paginationUtils.ts +8 -0
  351. package/src/components/DataTable/utils/performanceUtils.ts +5 -1
  352. package/src/components/Dialog/Dialog.tsx +2 -2
  353. package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +180 -1
  354. package/src/components/ErrorBoundary/ErrorBoundary.tsx +45 -5
  355. package/src/components/ErrorBoundary/ErrorBoundaryContext.tsx +129 -0
  356. package/src/components/ErrorBoundary/index.ts +27 -2
  357. package/src/components/EventSelector/EventSelector.tsx +3 -0
  358. package/src/components/FileDisplay/FileDisplay.tsx +32 -18
  359. package/src/components/FileUpload/FileUpload.tsx +22 -2
  360. package/src/components/Footer/Footer.test.tsx +16 -16
  361. package/src/components/Footer/Footer.tsx +14 -11
  362. package/src/components/Form/Form.tsx +1 -0
  363. package/src/components/Header/Header.tsx +21 -10
  364. package/src/components/Input/Input.test.tsx +2 -2
  365. package/src/components/Input/Input.tsx +8 -4
  366. package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +4 -4
  367. package/src/components/LoginForm/LoginForm.tsx +4 -0
  368. package/src/components/NavigationMenu/NavigationMenu.tsx +14 -513
  369. package/src/components/NavigationMenu/types.ts +56 -0
  370. package/src/components/NavigationMenu/useNavigationFiltering.ts +390 -0
  371. package/src/components/OrganisationSelector/OrganisationSelector.tsx +3 -0
  372. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +4 -2
  373. package/src/components/PaceAppLayout/PaceAppLayout.tsx +32 -11
  374. package/src/components/PaceAppLayout/test-setup.tsx +1 -2
  375. package/src/components/PaceLoginPage/PaceLoginPage.tsx +3 -0
  376. package/src/components/PasswordChange/PasswordChangeForm.tsx +9 -0
  377. package/src/components/ProtectedRoute/ProtectedRoute.tsx +3 -9
  378. package/src/components/PublicLayout/PublicPageLayout.tsx +2 -5
  379. package/src/components/PublicLayout/PublicPageProvider.tsx +4 -0
  380. package/src/components/Select/Select.tsx +80 -434
  381. package/src/components/Select/context.ts +23 -0
  382. package/src/components/Select/hooks/useSelectEvents.ts +87 -0
  383. package/src/components/Select/hooks/useSelectSearch.ts +91 -0
  384. package/src/components/Select/hooks/useSelectState.ts +104 -0
  385. package/src/components/Select/index.ts +9 -1
  386. package/src/components/Select/types.ts +123 -0
  387. package/src/components/Select/utils/text.ts +26 -0
  388. package/src/components/SessionRestorationLoader/SessionRestorationLoader.tsx +4 -5
  389. package/src/components/Switch/Switch.tsx +4 -4
  390. package/src/components/Tabs/Tabs.tsx +1 -1
  391. package/src/components/Toast/Toast.tsx +4 -0
  392. package/src/components/Tooltip/Tooltip.tsx +2 -2
  393. package/src/components/UserMenu/UserMenu.test.tsx +24 -11
  394. package/src/components/UserMenu/UserMenu.tsx +21 -18
  395. package/src/components/index.ts +2 -2
  396. package/src/hooks/__tests__/index.unit.test.ts +2 -5
  397. package/src/hooks/index.ts +1 -2
  398. package/src/hooks/public/usePublicEvent.ts +4 -0
  399. package/src/hooks/public/usePublicEventLogo.ts +4 -0
  400. package/src/hooks/public/usePublicFileDisplay.ts +4 -0
  401. package/src/hooks/public/usePublicRouteParams.ts +4 -0
  402. package/src/hooks/services/useAuth.ts +32 -0
  403. package/src/hooks/services/useCurrentEvent.ts +6 -0
  404. package/src/hooks/services/useCurrentOrganisation.ts +6 -0
  405. package/src/hooks/useDebounce.ts +9 -0
  406. package/src/hooks/useEventTheme.ts +6 -0
  407. package/src/hooks/useFileDisplay.ts +4 -0
  408. package/src/hooks/useFileReference.ts +25 -7
  409. package/src/hooks/useFileUrl.ts +11 -1
  410. package/src/hooks/useFocusManagement.ts +14 -0
  411. package/src/hooks/useFocusTrap.ts +3 -0
  412. package/src/hooks/useInactivityTracker.ts +3 -0
  413. package/src/hooks/useKeyboardShortcuts.ts +4 -0
  414. package/src/hooks/useOrganisationPermissions.ts +4 -0
  415. package/src/hooks/useOrganisationSecurity.ts +4 -0
  416. package/src/hooks/usePerformanceMonitor.ts +4 -0
  417. package/src/hooks/usePermissionCache.ts +7 -0
  418. package/src/hooks/useQueryCache.ts +12 -1
  419. package/src/hooks/useSessionRestoration.ts +4 -0
  420. package/src/hooks/useStorage.ts +4 -0
  421. package/src/hooks/useToast.ts +1 -1
  422. package/src/index.ts +2 -1
  423. package/src/providers/__tests__/OrganisationProvider.test.tsx +92 -70
  424. package/src/providers/services/AuthServiceProvider.tsx +18 -0
  425. package/src/providers/services/EventServiceProvider.tsx +18 -0
  426. package/src/providers/services/InactivityServiceProvider.tsx +18 -0
  427. package/src/providers/services/OrganisationServiceProvider.tsx +18 -0
  428. package/src/providers/services/UnifiedAuthProvider.tsx +36 -0
  429. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +29 -13
  430. package/src/rbac/README.md +1 -1
  431. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +2 -2
  432. package/src/rbac/__tests__/scenarios.user-role.test.tsx +4 -5
  433. package/src/rbac/adapters.tsx +14 -5
  434. package/src/rbac/api.ts +100 -67
  435. package/src/rbac/components/NavigationProvider.tsx +4 -1
  436. package/src/rbac/components/PagePermissionGuard.tsx +157 -17
  437. package/src/rbac/components/RoleBasedRouter.tsx +5 -1
  438. package/src/rbac/components/SecureDataProvider.test.tsx +84 -49
  439. package/src/rbac/components/SecureDataProvider.tsx +20 -5
  440. package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +24 -14
  441. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +7 -0
  442. package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +14 -6
  443. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +15 -4
  444. package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +148 -24
  445. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +81 -15
  446. package/src/rbac/engine.ts +38 -14
  447. package/src/rbac/hooks/permissions/index.ts +7 -0
  448. package/src/rbac/hooks/permissions/useAccessLevel.ts +105 -0
  449. package/src/rbac/hooks/permissions/useCachedPermissions.ts +79 -0
  450. package/src/rbac/hooks/permissions/useCan.ts +347 -0
  451. package/src/rbac/hooks/permissions/useHasAllPermissions.ts +90 -0
  452. package/src/rbac/hooks/permissions/useHasAnyPermission.ts +90 -0
  453. package/src/rbac/hooks/permissions/useMultiplePermissions.ts +93 -0
  454. package/src/rbac/hooks/permissions/usePermissions.ts +253 -0
  455. package/src/rbac/hooks/useCan.test.ts +71 -64
  456. package/src/rbac/hooks/usePermissions.ts +14 -995
  457. package/src/rbac/hooks/useResourcePermissions.test.ts +54 -18
  458. package/src/rbac/hooks/useResourcePermissions.ts +14 -4
  459. package/src/rbac/hooks/useSecureSupabase.ts +33 -13
  460. package/src/rbac/permissions.ts +0 -30
  461. package/src/rbac/secureClient.ts +200 -61
  462. package/src/rbac/types.ts +8 -0
  463. package/src/theming/__tests__/parseEventColours.test.ts +6 -9
  464. package/src/theming/parseEventColours.ts +5 -19
  465. package/src/types/vitest-globals.d.ts +51 -26
  466. package/src/utils/__mocks__/supabaseMock.ts +1 -3
  467. package/src/utils/__tests__/formatting.unit.test.ts +4 -4
  468. package/src/utils/__tests__/index.unit.test.ts +2 -2
  469. package/src/utils/audit/audit.ts +0 -3
  470. package/src/utils/core/cn.ts +1 -1
  471. package/src/utils/file-reference/index.ts +53 -1
  472. package/src/utils/formatting/formatting.ts +8 -18
  473. package/src/utils/index.ts +0 -1
  474. package/dist/chunk-3QRJFVBR.js.map +0 -1
  475. package/dist/chunk-3XTALGJF.js.map +0 -1
  476. package/dist/chunk-4N5C5XZU.js.map +0 -1
  477. package/dist/chunk-4ZC4GX36.js.map +0 -1
  478. package/dist/chunk-BYFSK72L.js.map +0 -1
  479. package/dist/chunk-EXUD6RNJ.js +0 -451
  480. package/dist/chunk-EXUD6RNJ.js.map +0 -1
  481. package/dist/chunk-GLK6VM3F.js.map +0 -1
  482. package/dist/chunk-I7PSE6JW.js.map +0 -1
  483. package/dist/chunk-JBKQ3SAO.js.map +0 -1
  484. package/dist/chunk-KNC55RTG.js.map +0 -1
  485. package/dist/chunk-LXQLPRQ2.js.map +0 -1
  486. package/dist/chunk-R77UEZ4E.js.map +0 -1
  487. package/dist/chunk-SQGMNID3.js.map +0 -1
  488. package/dist/chunk-T33XF5ZC.js.map +0 -1
  489. package/dist/chunk-XM25TVIE.js.map +0 -1
  490. package/docs/api/classes/ErrorBoundary.md +0 -144
  491. package/docs/migration/quick-migration-guide.md +0 -356
  492. package/docs/migration/service-architecture.md +0 -281
  493. package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +0 -680
  494. package/src/hooks/useSecureDataAccess.test.ts +0 -559
  495. package/src/hooks/useSecureDataAccess.ts +0 -681
  496. /package/dist/{DataTable-DQ7RSOHE.js.map → DataTable-TPTKCX4D.js.map} +0 -0
  497. /package/dist/{UnifiedAuthProvider-ATAP5UTR.js.map → UnifiedAuthProvider-CH6Z342H.js.map} +0 -0
  498. /package/dist/{api-N774RPUA.js.map → api-MVVQZLJI.js.map} +0 -0
  499. /package/docs/migration/{organisation-context-timing-fix.md → V0.3.44_organisation-context-timing-fix.md} +0 -0
  500. /package/docs/migration/{rbac-migration.md → V0.4.0_rbac-migration.md} +0 -0
  501. /package/docs/migration/{person-scoped-profiles-migration-guide.md → V0.5.190_person-scoped-profiles-migration-guide.md} +0 -0
  502. /package/docs/migration/{REACT_19_MIGRATION.md → V0.6.0_REACT_19_MIGRATION.md} +0 -0
@@ -0,0 +1,452 @@
1
+ ---
2
+ description: Enforce clean markup standards, semantic HTML usage, and pace-core component patterns
3
+ globs: ["src/**/*.{ts,tsx,js,jsx}"]
4
+ alwaysApply: true
5
+ paceCoreVersion: "0.6.x"
6
+ rulesVersion: "2025-01-28"
7
+ ---
8
+ # Markup Quality Guide
9
+
10
+ This guide enforces clean markup standards, semantic HTML usage, and proper pace-core component patterns to ensure maintainable, accessible, and consistent code.
11
+
12
+ ## pace-core First
13
+
14
+ ### MUST: Use pace-core Components
15
+
16
+ **MUST use pace-core components wherever possible:**
17
+
18
+ ```tsx
19
+ // ❌ WRONG: Custom button or native HTML element
20
+ <button className="btn-primary">Click me</button>
21
+ <input type="text" className="form-input" />
22
+
23
+ // ✅ CORRECT: Use pace-core components
24
+ import { Button, Input } from '@jmruthers/pace-core';
25
+ <Button>Click me</Button>
26
+ <Input type="text" />
27
+ ```
28
+
29
+ ### MUST NOT: Add Custom Styles to pace-core Components
30
+
31
+ **MUST NOT add custom styles when pace-core components already provide styling:**
32
+
33
+ ```tsx
34
+ // ❌ WRONG: Overriding pace-core component styles
35
+ <Button className="custom-button-style">Click me</Button>
36
+ <Card className="custom-card-layout">Content</Card>
37
+
38
+ // ✅ CORRECT: Use pace-core component variants/props
39
+ <Button variant="default">Click me</Button>
40
+ <Card>Content</Card>
41
+ ```
42
+
43
+ ### MUST: Rely on pace-core core.css
44
+
45
+ **MUST rely on pace-core `core.css` for typography, spacing, and visual presentation:**
46
+
47
+ ```tsx
48
+ // ❌ WRONG: Custom typography classes
49
+ <h1 className="text-2xl font-bold">Title</h1>
50
+ <p className="text-gray-500 mb-4">Description</p>
51
+
52
+ // ✅ CORRECT: Typography defined in pace-core core.css
53
+ <h1>Title</h1>
54
+ <p>Description</p>
55
+ ```
56
+
57
+ ### SHOULD: Fall Back to Semantic HTML
58
+
59
+ **SHOULD only use plain semantic HTML when no suitable pace-core component exists:**
60
+
61
+ ```tsx
62
+ // ✅ CORRECT: Use semantic HTML when pace-core doesn't provide component
63
+ <main>
64
+ <section>
65
+ <article>
66
+ <h2>Article Title</h2>
67
+ <p>Article content</p>
68
+ </article>
69
+ </section>
70
+ </main>
71
+ ```
72
+
73
+ ## Semantic HTML Only
74
+
75
+ ### MUST: Use Semantic HTML Elements
76
+
77
+ **MUST use semantic HTML elements for their intended purpose:**
78
+
79
+ ```tsx
80
+ // ❌ WRONG: Non-semantic elements
81
+ <div onClick={handleClick}>Click me</div>
82
+ <div className="header">Header</div>
83
+ <div className="footer">Footer</div>
84
+
85
+ // ✅ CORRECT: Semantic HTML elements
86
+ <button onClick={handleClick}>Click me</button>
87
+ <header>Header</header>
88
+ <footer>Footer</footer>
89
+ ```
90
+
91
+ ### MUST NOT: Use `<div>` Elements
92
+
93
+ **MUST NOT use `<div>` elements (except for the first child of `<body>` in `index.html`, React portals, or when required by third-party libraries that mandate specific DOM structure):**
94
+
95
+ ```tsx
96
+ // ❌ WRONG: Using div elements
97
+ <div className="container">
98
+ <div className="content">Content</div>
99
+ </div>
100
+
101
+ // ✅ CORRECT: Use semantic elements or React Fragments
102
+ <main>
103
+ <section>Content</section>
104
+ </main>
105
+ // Or for grouping without semantic meaning:
106
+ <>
107
+ <Component1 />
108
+ <Component2 />
109
+ </>
110
+ ```
111
+
112
+ ### MUST: Choose Most Semantic Element
113
+
114
+ **MUST choose the most semantically accurate element for the content:**
115
+
116
+ ```tsx
117
+ // ✅ CORRECT: Choose appropriate semantic elements
118
+ <main>Main content</main>
119
+ <section>Section of content</section>
120
+ <article>Article content</article>
121
+ <header>Header content</header>
122
+ <footer>Footer content</footer>
123
+ <nav>Navigation</nav>
124
+ <ul><li>List items</li></ul>
125
+ <p>Paragraph text</p>
126
+ ```
127
+
128
+ ## Typography & Styling
129
+
130
+ ### MUST NOT: Apply Typography Styles Directly
131
+
132
+ **MUST NOT apply typography styles directly to elements:**
133
+
134
+ ```tsx
135
+ // ❌ WRONG: Direct typography styling
136
+ <h1 className="text-2xl font-bold">Title</h1>
137
+ <p className="text-gray-500 leading-relaxed">Description</p>
138
+ <label className="text-sm uppercase">Label</label>
139
+
140
+ // ✅ CORRECT: Typography defined in pace-core core.css
141
+ <h1>Title</h1>
142
+ <p>Description</p>
143
+ <label>Label</label>
144
+ ```
145
+
146
+ ### MUST: Use pace-core Typography
147
+
148
+ **MUST rely on typography defined exclusively in `pace-core core.css`:**
149
+
150
+ ```tsx
151
+ // ✅ CORRECT: Typography comes from pace-core core.css
152
+ <h1>Heading 1</h1>
153
+ <h2>Heading 2</h2>
154
+ <h3>Heading 3</h3>
155
+ <p>Paragraph text</p>
156
+ <label>Form label</label>
157
+ ```
158
+
159
+ ### MUST NOT: Add Typography Utilities
160
+
161
+ **MUST NOT add utility classes, inline styles, or custom CSS for typography:**
162
+
163
+ ```tsx
164
+ // ❌ WRONG: Typography utilities or inline styles
165
+ <h1 className="text-3xl font-bold mb-4">Title</h1>
166
+ <p style={{ fontSize: '14px', color: 'gray' }}>Text</p>
167
+ <label className="uppercase tracking-wide">Label</label>
168
+
169
+ // ✅ CORRECT: No typography styling - pace-core handles it
170
+ <h1>Title</h1>
171
+ <p>Text</p>
172
+ <label>Label</label>
173
+ ```
174
+
175
+ ## React Structure Rules
176
+
177
+ ### MUST NOT: Add Wrapper Elements for Single Root
178
+
179
+ **MUST NOT add wrapper elements solely to satisfy React's single-root requirement:**
180
+
181
+ ```tsx
182
+ // ❌ WRONG: Unnecessary wrapper for single root
183
+ function Component() {
184
+ return (
185
+ <div>
186
+ <Header />
187
+ <Main />
188
+ <Footer />
189
+ </div>
190
+ );
191
+ }
192
+
193
+ // ✅ CORRECT: Use React Fragment
194
+ function Component() {
195
+ return (
196
+ <>
197
+ <Header />
198
+ <Main />
199
+ <Footer />
200
+ </>
201
+ );
202
+ }
203
+ ```
204
+
205
+ ### MUST: Use React Fragments
206
+
207
+ **MUST use React Fragments for grouping without adding DOM elements:**
208
+
209
+ ```tsx
210
+ // ✅ CORRECT: Use React Fragments
211
+ function Component() {
212
+ return (
213
+ <>
214
+ <Component1 />
215
+ <Component2 />
216
+ <Component3 />
217
+ </>
218
+ );
219
+ }
220
+ ```
221
+
222
+ ### MUST NOT: Add Extra Elements
223
+
224
+ **MUST NOT introduce extra elements that provide no semantic or functional value:**
225
+
226
+ ```tsx
227
+ // ❌ WRONG: Extra wrapper with no purpose
228
+ <article>
229
+ <div>
230
+ <h2>Title</h2>
231
+ <p>Content</p>
232
+ </div>
233
+ </article>
234
+
235
+ // ✅ CORRECT: Direct semantic structure
236
+ <article>
237
+ <h2>Title</h2>
238
+ <p>Content</p>
239
+ </article>
240
+ ```
241
+
242
+ ## Styling & Layout Discipline
243
+
244
+ ### MUST NOT: Add Wrappers for Styling
245
+
246
+ **MUST NOT add wrapper elements just to apply styles:**
247
+
248
+ ```tsx
249
+ // ❌ WRONG: Wrapper element for styling only
250
+ <div className="flex gap-4">
251
+ <Button>Button 1</Button>
252
+ <Button>Button 2</Button>
253
+ </div>
254
+
255
+ // ✅ CORRECT: Apply styles to existing parent or use pace-core components
256
+ <section className="flex gap-4">
257
+ <Button>Button 1</Button>
258
+ <Button>Button 2</Button>
259
+ </section>
260
+ // Or if no semantic parent exists, leave unstyled or use pace-core layout components
261
+ ```
262
+
263
+ ### SHOULD: Apply Styles to Existing Elements
264
+
265
+ **SHOULD apply styles to existing parent components:**
266
+
267
+ ```tsx
268
+ // ✅ CORRECT: Apply styles to semantic parent
269
+ <main className="flex flex-col gap-4">
270
+ <section>Content 1</section>
271
+ <section>Content 2</section>
272
+ </main>
273
+ ```
274
+
275
+ ### SHOULD: Leave Unstyled When Appropriate
276
+
277
+ **SHOULD leave elements unstyled if styles aren't necessary:**
278
+
279
+ ```tsx
280
+ // ✅ CORRECT: Unstyled semantic structure
281
+ <article>
282
+ <h2>Title</h2>
283
+ <p>Content</p>
284
+ </article>
285
+ ```
286
+
287
+ ### MUST: Use pace-core for Layout
288
+
289
+ **MUST assume most layout and styling will be handled by pace-core, not ad-hoc wrappers:**
290
+
291
+ ```tsx
292
+ // ❌ WRONG: Custom layout wrapper
293
+ <div className="grid grid-cols-2 gap-4">
294
+ <Card>Card 1</Card>
295
+ <Card>Card 2</Card>
296
+ </div>
297
+
298
+ // ✅ CORRECT: Use pace-core layout components or apply to semantic parent
299
+ <section className="grid grid-cols-2 gap-4">
300
+ <Card>Card 1</Card>
301
+ <Card>Card 2</Card>
302
+ </section>
303
+ ```
304
+
305
+ ## Element Minimisation
306
+
307
+ ### MUST: Use Fewest Elements Possible
308
+
309
+ **MUST use the fewest elements possible to achieve the desired structure:**
310
+
311
+ ```tsx
312
+ // ❌ WRONG: Unnecessary nesting
313
+ <main>
314
+ <div>
315
+ <section>
316
+ <div>
317
+ <article>Content</article>
318
+ </div>
319
+ </section>
320
+ </div>
321
+ </main>
322
+
323
+ // ✅ CORRECT: Minimal structure
324
+ <main>
325
+ <section>
326
+ <article>Content</article>
327
+ </section>
328
+ </main>
329
+ ```
330
+
331
+ ### MUST NOT: Create Redundant Nesting
332
+
333
+ **MUST NOT create redundant nesting:**
334
+
335
+ ```tsx
336
+ // ❌ WRONG: Redundant wrapper
337
+ <article>
338
+ <div>
339
+ <h2>Title</h2>
340
+ </div>
341
+ <div>
342
+ <p>Content</p>
343
+ </div>
344
+ </article>
345
+
346
+ // ✅ CORRECT: Direct structure
347
+ <article>
348
+ <h2>Title</h2>
349
+ <p>Content</p>
350
+ </article>
351
+ ```
352
+
353
+ ### MUST: Clear Semantic Purpose
354
+
355
+ **MUST ensure every element has a clear semantic purpose:**
356
+
357
+ ```tsx
358
+ // ❌ WRONG: Element without semantic purpose
359
+ <div>
360
+ <Component1 />
361
+ <Component2 />
362
+ </div>
363
+
364
+ // ✅ CORRECT: Semantic purpose or Fragment
365
+ <section>
366
+ <Component1 />
367
+ <Component2 />
368
+ </section>
369
+ // Or if no semantic grouping needed:
370
+ <>
371
+ <Component1 />
372
+ <Component2 />
373
+ </>
374
+ ```
375
+
376
+ ## Prohibited Patterns
377
+
378
+ ### MUST NOT: Use These Patterns
379
+
380
+ **MUST NOT use the following patterns:**
381
+
382
+ 1. **`<div>` elements** - Use semantic HTML or React Fragments instead
383
+ 2. **Wrapper elements for styling only** - Apply styles to existing elements or use pace-core components
384
+ 3. **Wrapper elements as sole child** - Use React Fragments instead
385
+ 4. **Custom typography classes** - Typography is defined in pace-core core.css
386
+ 5. **Inline styles for typography** - Use pace-core typography
387
+ 6. **Duplicating pace-core layout/visuals** - Use pace-core components instead
388
+
389
+ ```tsx
390
+ // ❌ WRONG: All prohibited patterns
391
+ <div className="wrapper">
392
+ <div className="content">
393
+ <h1 className="text-2xl font-bold">Title</h1>
394
+ <p style={{ color: 'gray' }}>Text</p>
395
+ </div>
396
+ </div>
397
+
398
+ // ✅ CORRECT: Clean, semantic markup
399
+ <main>
400
+ <section>
401
+ <h1>Title</h1>
402
+ <p>Text</p>
403
+ </section>
404
+ </main>
405
+ ```
406
+
407
+ ## Expected Outcome
408
+
409
+ ### Code Quality Goals
410
+
411
+ Code produced under these rules SHOULD:
412
+
413
+ - **Be semantically correct** - Use appropriate HTML elements for their purpose
414
+ - **Be visually consistent** - Rely on pace-core for styling and typography
415
+ - **Contain minimal markup** - Use fewest elements necessary
416
+ - **Avoid unnecessary abstraction** - No wrappers without purpose
417
+ - **Remain easy to reason about** - Clear structure and purpose
418
+ - **Be easy to refactor** - Minimal coupling and dependencies
419
+
420
+ ### Decision Tree
421
+
422
+ **When in doubt, follow this decision tree:**
423
+
424
+ 1. **Does pace-core provide a component?** → Use pace-core component
425
+ 2. **Is a semantic HTML element appropriate?** → Use semantic element (`<main>`, `<section>`, `<article>`, etc.)
426
+ 3. **Do I need to group elements without semantic meaning?** → Use React Fragment (`<>...</>`)
427
+ 4. **Do I need styling?** → Apply to existing semantic parent or use pace-core layout components
428
+ 5. **Still unsure?** → Remove the element, remove the style, and rely on pace-core or semantic HTML
429
+
430
+ ## Markup Quality Checklist
431
+
432
+ Before committing code, verify:
433
+
434
+ - [ ] No `<div>` elements (except first child of `<body>` in `index.html`)
435
+ - [ ] pace-core components used where available
436
+ - [ ] Semantic HTML elements used appropriately
437
+ - [ ] No typography styling applied directly
438
+ - [ ] No wrapper elements for styling only
439
+ - [ ] React Fragments used instead of unnecessary wrappers
440
+ - [ ] Minimal element nesting
441
+ - [ ] Every element has clear semantic purpose
442
+ - [ ] No custom styles overriding pace-core components
443
+ - [ ] Layout handled by pace-core or semantic parents
444
+ - [ ] Code is semantically correct and accessible
445
+
446
+ ## Reference
447
+
448
+ - **pace-core Components**: See `00-pace-core-compliance.mdc` for component usage
449
+ - **Semantic HTML**: https://developer.mozilla.org/en-US/docs/Glossary/Semantics
450
+ - **React Fragments**: https://react.dev/reference/react/Fragment
451
+ - **Accessibility**: See `06-code-quality.mdc` for accessibility requirements
452
+ - **When in doubt**: Remove the element, remove the style, and rely on pace-core or semantic HTML
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Added
11
+ - **08-markup-quality.mdc** - Enforces clean markup standards, semantic HTML usage, and pace-core component patterns
12
+
13
+ ## [1.1.0] - 2025-01-28
14
+
15
+ ### Added
16
+ - **08-markup-quality.mdc** - Comprehensive guide for markup quality, semantic HTML, and pace-core component usage patterns
17
+ - Enforces pace-core component usage over custom solutions
18
+ - Prohibits `<div>` elements (except first child of `<body>` in `index.html`)
19
+ - Requires semantic HTML elements (`<main>`, `<section>`, `<article>`, etc.)
20
+ - Prohibits typography styling (relies on pace-core core.css)
21
+ - Requires React Fragments for grouping without semantic meaning
22
+ - Enforces minimal element nesting and clear semantic purpose
23
+ - Includes decision tree and comprehensive checklist
24
+
25
+ ## [1.0.0] - 2025-01-15
26
+
10
27
  ### Added
11
28
  - Initial release of cursor rules system
12
29
  - 8 comprehensive rule files covering compliance, standards, structure, SOLID, testing, bug reports, code quality, and tech stack
@@ -89,6 +106,7 @@ This ensures pace-core rules (00-09) load first.
89
106
 
90
107
  ## Version History
91
108
 
109
+ - **1.1.0** (2025-01-28) - Added markup quality rule (08-markup-quality.mdc)
92
110
  - **1.0.0** (2025-01-15) - Initial release
93
111
 
94
112
  ## Future Enhancements
@@ -38,7 +38,7 @@ Copy all `.mdc` files from `node_modules/@jmruthers/pace-core/cursor-rules/` to
38
38
 
39
39
  ## Rule Files
40
40
 
41
- The rules are numbered for ordering (00-07):
41
+ The rules are numbered for ordering (00-08):
42
42
 
43
43
  - **00-pace-core-compliance.mdc** - Enforce pace-core usage patterns
44
44
  - **01-standards-compliance.mdc** - Enforce all pace-core standards
@@ -48,6 +48,7 @@ The rules are numbered for ordering (00-07):
48
48
  - **05-bug-reports-and-features.mdc** - Templates for bug reports and feature requests (guidance-only)
49
49
  - **06-code-quality.mdc** - Enforce code quality standards
50
50
  - **07-tech-stack-compliance.mdc** - Enforce tech stack versions and patterns
51
+ - **08-markup-quality.mdc** - Enforce clean markup standards, semantic HTML usage, and pace-core component patterns
51
52
 
52
53
  ## Rule Numbering System
53
54
 
@@ -141,10 +141,21 @@ declare class EventService extends BaseService implements IEventService {
141
141
  getNextEventByDate(events?: Event[]): Event | null;
142
142
  }
143
143
 
144
+ /**
145
+ * Event service context type.
146
+ * Provides event service instance to React components.
147
+ */
144
148
  interface EventServiceContextType {
145
149
  eventService: EventService;
146
150
  }
151
+ /**
152
+ * Context for EventService.
153
+ * Provides event service instance to React components.
154
+ */
147
155
  declare const EventServiceContext: React__default.Context<EventServiceContextType | null>;
156
+ /**
157
+ * Props for the EventServiceProvider component.
158
+ */
148
159
  interface EventServiceProviderProps {
149
160
  children: React__default.ReactNode;
150
161
  supabaseClient: SupabaseClient;
@@ -154,6 +165,13 @@ interface EventServiceProviderProps {
154
165
  selectedOrganisation: Organisation | null;
155
166
  setSelectedEventId: (eventId: string | null) => void;
156
167
  }
168
+ /**
169
+ * React provider for EventService.
170
+ * Provides event service instance to React components.
171
+ *
172
+ * @param props - Event service provider configuration
173
+ * @returns The event service provider
174
+ */
157
175
  declare function EventServiceProvider({ children, supabaseClient, user, session, appName, selectedOrganisation, setSelectedEventId }: EventServiceProviderProps): react_jsx_runtime.JSX.Element;
158
176
 
159
177
  /**
@@ -246,16 +264,34 @@ declare class OrganisationService extends BaseService implements IOrganisationSe
246
264
  private clearAllCachedData;
247
265
  }
248
266
 
267
+ /**
268
+ * Organisation service context type.
269
+ * Provides organisation service instance to React components.
270
+ */
249
271
  interface OrganisationServiceContextType {
250
272
  organisationService: OrganisationService;
251
273
  }
274
+ /**
275
+ * Context for OrganisationService.
276
+ * Provides organisation service instance to React components.
277
+ */
252
278
  declare const OrganisationServiceContext: React__default.Context<OrganisationServiceContextType | null>;
279
+ /**
280
+ * Props for the OrganisationServiceProvider component.
281
+ */
253
282
  interface OrganisationServiceProviderProps {
254
283
  children: React__default.ReactNode;
255
284
  supabaseClient: SupabaseClient;
256
285
  user: User | null;
257
286
  session: Session | null;
258
287
  }
288
+ /**
289
+ * React provider for OrganisationService.
290
+ * Provides organisation service instance to React components.
291
+ *
292
+ * @param props - Organisation service provider configuration
293
+ * @returns The organisation service provider
294
+ */
259
295
  declare function OrganisationServiceProvider({ children, supabaseClient, user, session }: OrganisationServiceProviderProps): react_jsx_runtime.JSX.Element;
260
296
 
261
297
  /**
@@ -343,10 +379,21 @@ declare class InactivityService extends BaseService implements IInactivityServic
343
379
  private setupEventHandlers;
344
380
  }
345
381
 
382
+ /**
383
+ * Inactivity service context type.
384
+ * Provides inactivity service instance to React components.
385
+ */
346
386
  interface InactivityServiceContextType {
347
387
  inactivityService: InactivityService;
348
388
  }
389
+ /**
390
+ * Context for InactivityService.
391
+ * Provides inactivity service instance to React components.
392
+ */
349
393
  declare const InactivityServiceContext: React__default.Context<InactivityServiceContextType | null>;
394
+ /**
395
+ * Props for the InactivityServiceProvider component.
396
+ */
350
397
  interface InactivityServiceProviderProps {
351
398
  children: React__default.ReactNode;
352
399
  supabaseClient: SupabaseClient;
@@ -356,6 +403,13 @@ interface InactivityServiceProviderProps {
356
403
  warnBeforeMs: number;
357
404
  onIdleLogout: (reason: 'inactivity') => void;
358
405
  }
406
+ /**
407
+ * React provider for InactivityService.
408
+ * Provides inactivity service instance to React components.
409
+ *
410
+ * @param props - Inactivity service provider configuration
411
+ * @returns The inactivity service provider
412
+ */
359
413
  declare function InactivityServiceProvider({ children, supabaseClient, user, session, idleTimeoutMs, // REQUIRED: No default - must be explicitly provided
360
414
  warnBeforeMs, // REQUIRED: No default - must be explicitly provided
361
415
  onIdleLogout }: InactivityServiceProviderProps): react_jsx_runtime.JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { d as DataRecord, D as DataTableColumn, e as DataTableRBACConfig, f as DataTableFeatureConfig, H as HierarchicalConfig, g as PerformanceConfig, S as ServerSideConfig, h as PaginationMode, C as ChunkingConfig, i as SearchIndexConfig, j as ExportOptions, G as GetRowId, E as EmptyStateConfig, c as AggregateConfig, a as DataTableAction } from './types-CEpcvwwF.js';
2
+ import { d as DataRecord, D as DataTableColumn, e as DataTableRBACConfig, f as DataTableFeatureConfig, H as HierarchicalConfig, g as PerformanceConfig, S as ServerSideConfig, h as PaginationMode, C as ChunkingConfig, i as SearchIndexConfig, j as ExportOptions, G as GetRowId, E as EmptyStateConfig, c as AggregateConfig, a as DataTableAction } from './types-CkbwOr4Y.js';
3
3
  import React__default from 'react';
4
4
 
5
5
  /**
@@ -129,6 +129,38 @@ interface DataTableProps<TData extends DataRecord> {
129
129
  *
130
130
  * Features are configured through the unified `features` prop for maximum flexibility.
131
131
  */
132
+ /**
133
+ * Enhanced DataTable component with performance optimizations and comprehensive features.
134
+ *
135
+ * This is the main entry point for the DataTable component. It wraps DataTableCore
136
+ * and provides feature normalization and validation.
137
+ *
138
+ * @template TData - The type of data records in the table
139
+ * @param props - DataTable configuration including data, columns, features, and RBAC
140
+ * @returns The rendered DataTable component
141
+ *
142
+ * @example
143
+ * ```tsx
144
+ * <DataTable
145
+ * data={users}
146
+ * columns={userColumns}
147
+ * rbac={{ pageId: 'user-management' }}
148
+ * features={{
149
+ * search: true,
150
+ * pagination: true,
151
+ * sorting: true
152
+ * }}
153
+ * />
154
+ * ```
155
+ */
156
+ /**
157
+ * Comprehensive, feature-rich data table component built on top of TanStack Table.
158
+ * Provides advanced data management capabilities with a clean, accessible interface.
159
+ *
160
+ * @template TData - The type of data records in the table
161
+ * @param props - DataTable configuration and props
162
+ * @returns The rendered DataTable component
163
+ */
132
164
  declare function DataTable<TData extends DataRecord>(props: DataTableProps<TData>): react_jsx_runtime.JSX.Element;
133
165
 
134
166
  export { DataTable as D, type DataTableProps as a };
@@ -60,8 +60,8 @@ import {
60
60
  sum,
61
61
  validateHierarchicalData,
62
62
  validatePaginationConfig
63
- } from "./chunk-T33XF5ZC.js";
64
- import "./chunk-XM25TVIE.js";
63
+ } from "./chunk-3XC4CPTD.js";
64
+ import "./chunk-XWQCNGTQ.js";
65
65
  import {
66
66
  CircuitBreaker,
67
67
  DEFAULT_FALLBACK_CONFIG,
@@ -79,15 +79,16 @@ import {
79
79
  safeExecute,
80
80
  throttle,
81
81
  useDataTablePerformance
82
- } from "./chunk-3QRJFVBR.js";
83
- import "./chunk-3XTALGJF.js";
82
+ } from "./chunk-6SOIHG6Z.js";
83
+ import "./chunk-MMZ7JXPU.js";
84
84
  import "./chunk-KQCRWDSA.js";
85
- import "./chunk-BYFSK72L.js";
86
- import "./chunk-KNC55RTG.js";
85
+ import "./chunk-EHMR7VYL.js";
86
+ import "./chunk-24UVZUZG.js";
87
87
  import "./chunk-63FOKYGO.js";
88
88
  import "./chunk-QXHPKYJV.js";
89
- import "./chunk-R77UEZ4E.js";
90
- import "./chunk-I7PSE6JW.js";
89
+ import "./chunk-M43Y4SSO.js";
90
+ import "./chunk-F2IMUDXZ.js";
91
+ import "./chunk-FMUCXFII.js";
91
92
  import "./chunk-VBXEHIUJ.js";
92
93
  import "./chunk-PWLANIRT.js";
93
94
  import "./chunk-7D4SUZUM.js";
@@ -170,4 +171,4 @@ export {
170
171
  validateHierarchicalData,
171
172
  validatePaginationConfig
172
173
  };
173
- //# sourceMappingURL=DataTable-DQ7RSOHE.js.map
174
+ //# sourceMappingURL=DataTable-TPTKCX4D.js.map