@jmruthers/pace-core 0.6.5 → 0.6.7

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 (473) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/README.md +5 -403
  3. package/audit-tool/00-dependencies.cjs +394 -0
  4. package/audit-tool/audits/01-pace-core-compliance.cjs +556 -0
  5. package/audit-tool/audits/02-project-structure.cjs +255 -0
  6. package/audit-tool/audits/03-architecture.cjs +196 -0
  7. package/audit-tool/audits/04-code-quality.cjs +149 -0
  8. package/audit-tool/audits/05-styling.cjs +224 -0
  9. package/audit-tool/audits/06-security-rbac.cjs +544 -0
  10. package/audit-tool/audits/07-api-tech-stack.cjs +301 -0
  11. package/audit-tool/audits/08-testing-documentation.cjs +202 -0
  12. package/audit-tool/audits/09-operations.cjs +208 -0
  13. package/audit-tool/index.cjs +291 -0
  14. package/audit-tool/utils/code-utils.cjs +218 -0
  15. package/audit-tool/utils/file-utils.cjs +230 -0
  16. package/audit-tool/utils/report-utils.cjs +241 -0
  17. package/core-usage-manifest.json +93 -0
  18. package/cursor-rules/00-standards-overview.mdc +156 -0
  19. package/cursor-rules/01-pace-core-compliance.mdc +586 -0
  20. package/cursor-rules/02-project-structure.mdc +42 -4
  21. package/cursor-rules/{03-solid-principles.mdc → 03-architecture.mdc} +126 -10
  22. package/cursor-rules/04-code-quality.mdc +419 -0
  23. package/cursor-rules/{08-markup-quality.mdc → 05-styling.mdc} +104 -34
  24. package/cursor-rules/06-security-rbac.mdc +518 -0
  25. package/cursor-rules/07-api-tech-stack.mdc +377 -0
  26. package/cursor-rules/08-testing-documentation.mdc +324 -0
  27. package/cursor-rules/09-operations.mdc +365 -0
  28. package/dist/{AuthService-Cb34EQs3.d.ts → AuthService-DmfO5rGS.d.ts} +10 -0
  29. package/dist/DataTable-7PMH7XN7.js +15 -0
  30. package/dist/{DataTable-BMRU8a1j.d.ts → DataTable-DRUIgtUH.d.ts} +1 -1
  31. package/dist/{PublicPageProvider-QTFVrL-Z.d.ts → PublicPageProvider-DlsCaR5v.d.ts} +33 -72
  32. package/dist/UnifiedAuthProvider-ZT6TIGM7.js +7 -0
  33. package/dist/api-Y4MQWOFW.js +4 -0
  34. package/dist/audit-MYQXYZFU.js +3 -0
  35. package/dist/{chunk-DGUM43GV.js → chunk-3RG5ZIWI.js} +1 -4
  36. package/dist/{chunk-QXHPKYJV.js → chunk-4SXLQIZO.js} +1 -26
  37. package/dist/{chunk-UPPMRMYG.js → chunk-5X4QLXRG.js} +73 -151
  38. package/dist/chunk-6F3IILHI.js +62 -0
  39. package/dist/{chunk-E66EQZE6.js → chunk-6GLLNA6U.js} +3 -9
  40. package/dist/{chunk-ZSAAAMVR.js → chunk-6QYDGKQY.js} +1 -4
  41. package/dist/{chunk-FMUCXFII.js → chunk-7ILTDCL2.js} +9 -5
  42. package/dist/{chunk-M43Y4SSO.js → chunk-A3W6LW53.js} +15 -13
  43. package/dist/{chunk-63FOKYGO.js → chunk-AHU7G2R5.js} +2 -11
  44. package/dist/{chunk-HU2C6SSC.js → chunk-BM4CQ5P3.js} +606 -559
  45. package/dist/chunk-C7NSAPTL.js +1 -0
  46. package/dist/{chunk-J36DSWQK.js → chunk-FEJLJNWA.js} +7 -41
  47. package/dist/{chunk-IHB5DR3H.js → chunk-FTCRZOG2.js} +188 -387
  48. package/dist/{chunk-G37KK66H.js → chunk-FYHN4DD5.js} +60 -19
  49. package/dist/chunk-GHYHJTYV.js +994 -0
  50. package/dist/{chunk-VBXEHIUJ.js → chunk-HF6O3O37.js} +6 -88
  51. package/dist/{chunk-FFQEQTNW.js → chunk-IUBRCBSY.js} +134 -45
  52. package/dist/{chunk-6COVEUS7.js → chunk-JGWDVX64.js} +983 -1034
  53. package/dist/{chunk-RGAWHO7N.js → chunk-L4XMVJKY.js} +77 -222
  54. package/dist/chunk-MBADTM7L.js +64 -0
  55. package/dist/{chunk-M7MPQISP.js → chunk-OJ4SKRSV.js} +3 -16
  56. package/dist/{chunk-IVOFDYWT.js → chunk-Q7Q7V5NV.js} +2109 -1604
  57. package/dist/{chunk-JGRYX5UX.js → chunk-S7DKJPLT.js} +29 -58
  58. package/dist/{chunk-PWLANIRT.js → chunk-TTRFSOKR.js} +1 -7
  59. package/dist/{chunk-5DRSZLL2.js → chunk-UH3NTO3F.js} +1 -6
  60. package/dist/{chunk-NTM7ZSB6.js → chunk-VBCS3DUA.js} +261 -168
  61. package/dist/{chunk-EFN2EIMK.js → chunk-ZFYPMX46.js} +271 -87
  62. package/dist/{chunk-L4OXEN46.js → chunk-ZKAWKYT4.js} +10 -24
  63. package/dist/components.d.ts +7 -5
  64. package/dist/components.js +46 -257
  65. package/dist/{database.generated-CzIvgcPu.d.ts → database.generated-CcnC_DRc.d.ts} +4795 -3691
  66. package/dist/eslint-rules/index.cjs +35 -0
  67. package/{src/eslint-rules/pace-core-compliance.cjs → dist/eslint-rules/rules/01-pace-core-compliance.cjs} +234 -235
  68. package/dist/eslint-rules/rules/04-code-quality.cjs +290 -0
  69. package/dist/eslint-rules/rules/05-styling.cjs +61 -0
  70. package/dist/eslint-rules/rules/06-security-rbac.cjs +806 -0
  71. package/dist/eslint-rules/rules/07-api-tech-stack.cjs +263 -0
  72. package/dist/eslint-rules/rules/08-testing.cjs +94 -0
  73. package/dist/eslint-rules/utils/helpers.cjs +42 -0
  74. package/dist/eslint-rules/utils/manifest-loader.cjs +75 -0
  75. package/dist/hooks.d.ts +6 -6
  76. package/dist/hooks.js +62 -172
  77. package/dist/icons/index.d.ts +1 -0
  78. package/dist/icons/index.js +1 -0
  79. package/dist/index.d.ts +12 -11
  80. package/dist/index.js +67 -660
  81. package/dist/providers.d.ts +2 -2
  82. package/dist/providers.js +8 -35
  83. package/dist/rbac/eslint-rules.d.ts +46 -44
  84. package/dist/rbac/eslint-rules.js +7 -4
  85. package/dist/rbac/index.d.ts +109 -586
  86. package/dist/rbac/index.js +14 -207
  87. package/dist/styles/index.js +2 -12
  88. package/dist/theming/runtime.d.ts +14 -1
  89. package/dist/theming/runtime.js +3 -19
  90. package/dist/{timezone-CHhWg6b4.d.ts → timezone-BZe_eUxx.d.ts} +175 -1
  91. package/dist/{types-CkbwOr4Y.d.ts → types-DXstZpNI.d.ts} +4 -17
  92. package/dist/types-t9H8qKRw.d.ts +55 -0
  93. package/dist/types.d.ts +1 -1
  94. package/dist/types.js +7 -94
  95. package/dist/{usePublicRouteParams-ClnV4tnv.d.ts → usePublicRouteParams-MamNgwqe.d.ts} +20 -20
  96. package/dist/utils.d.ts +24 -117
  97. package/dist/utils.js +54 -392
  98. package/docs/README.md +17 -7
  99. package/docs/api/README.md +4 -402
  100. package/docs/api/modules.md +301 -871
  101. package/docs/api-reference/components.md +21 -21
  102. package/docs/api-reference/deprecated.md +31 -6
  103. package/docs/api-reference/hooks.md +80 -80
  104. package/docs/api-reference/rpc-functions.md +78 -3
  105. package/docs/api-reference/types.md +1 -1
  106. package/docs/api-reference/utilities.md +1 -1
  107. package/docs/architecture/README.md +1 -1
  108. package/docs/core-concepts/events.md +3 -3
  109. package/docs/core-concepts/organisations.md +6 -6
  110. package/docs/core-concepts/permissions.md +6 -6
  111. package/docs/documentation-index.md +12 -18
  112. package/docs/getting-started/cursor-rules.md +3 -23
  113. package/docs/getting-started/dependencies.md +650 -0
  114. package/docs/getting-started/documentation-index.md +1 -1
  115. package/docs/getting-started/examples/README.md +4 -4
  116. package/docs/getting-started/examples/full-featured-app.md +1 -1
  117. package/docs/getting-started/faq.md +2 -2
  118. package/docs/getting-started/installation-guide.md +20 -7
  119. package/docs/getting-started/quick-reference.md +4 -4
  120. package/docs/getting-started/quick-start.md +23 -12
  121. package/docs/implementation-guides/authentication.md +15 -15
  122. package/docs/implementation-guides/component-styling.md +1 -1
  123. package/docs/implementation-guides/data-tables.md +126 -33
  124. package/docs/implementation-guides/datatable-rbac-usage.md +1 -1
  125. package/docs/implementation-guides/dynamic-colors.md +3 -3
  126. package/docs/implementation-guides/file-upload-storage.md +2 -2
  127. package/docs/implementation-guides/hierarchical-datatable.md +40 -60
  128. package/docs/implementation-guides/inactivity-tracking.md +3 -3
  129. package/docs/implementation-guides/large-datasets.md +3 -2
  130. package/docs/implementation-guides/organisation-security.md +2 -2
  131. package/docs/implementation-guides/performance.md +2 -2
  132. package/docs/implementation-guides/permission-enforcement.md +5 -1
  133. package/docs/migration/V0.3.44_organisation-context-timing-fix.md +1 -1
  134. package/docs/migration/V0.4.0_rbac-migration.md +6 -6
  135. package/docs/rbac/MIGRATION_GUIDE.md +819 -0
  136. package/docs/rbac/RBAC_CONTRACT.md +724 -0
  137. package/docs/rbac/README.md +17 -8
  138. package/docs/rbac/advanced-patterns.md +6 -6
  139. package/docs/rbac/api-reference.md +20 -20
  140. package/docs/rbac/edge-functions-guide.md +376 -0
  141. package/docs/rbac/event-based-apps.md +3 -3
  142. package/docs/rbac/examples.md +41 -41
  143. package/docs/rbac/getting-started.md +37 -37
  144. package/docs/rbac/performance.md +1 -1
  145. package/docs/rbac/quick-start.md +52 -52
  146. package/docs/rbac/secure-client-protection.md +1 -35
  147. package/docs/rbac/troubleshooting.md +1 -1
  148. package/docs/security/README.md +5 -5
  149. package/docs/standards/0-standards-overview.md +220 -0
  150. package/docs/standards/1-pace-core-compliance-standards.md +986 -0
  151. package/docs/standards/2-project-structure-standards.md +949 -0
  152. package/docs/standards/3-architecture-standards.md +606 -0
  153. package/docs/standards/4-code-quality-standards.md +728 -0
  154. package/docs/standards/5-styling-standards.md +348 -0
  155. package/docs/standards/{07-rbac-and-rls-standard.md → 6-security-rbac-standards.md} +269 -66
  156. package/docs/standards/7-api-tech-stack-standards.md +662 -0
  157. package/docs/standards/8-testing-documentation-standards.md +401 -0
  158. package/docs/standards/9-operations-standards.md +1102 -0
  159. package/docs/standards/README.md +185 -57
  160. package/docs/troubleshooting/README.md +4 -4
  161. package/docs/troubleshooting/common-issues.md +2 -2
  162. package/docs/troubleshooting/debugging.md +9 -9
  163. package/docs/troubleshooting/migration.md +4 -4
  164. package/docs/troubleshooting/organisation-context-setup.md +42 -19
  165. package/eslint-config-pace-core.cjs +33 -6
  166. package/package.json +35 -23
  167. package/scripts/install-cursor-rules.cjs +25 -6
  168. package/scripts/install-eslint-config.cjs +284 -0
  169. package/src/__tests__/fixtures/supabase.ts +1 -1
  170. package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +3 -3
  171. package/src/__tests__/helpers/__tests__/optimized-test-setup.test.ts +1 -1
  172. package/src/__tests__/helpers/__tests__/supabaseMock.test.ts +1 -1
  173. package/src/__tests__/helpers/__tests__/test-providers.test.tsx +2 -2
  174. package/src/__tests__/helpers/__tests__/test-utils.test.tsx +13 -13
  175. package/src/__tests__/helpers/component-test-utils.tsx +1 -1
  176. package/src/__tests__/helpers/supabaseMock.ts +2 -2
  177. package/src/__tests__/integration/UserProfile.test.tsx +14 -14
  178. package/src/__tests__/public-recipe-view.test.ts +38 -9
  179. package/src/__tests__/rbac/PagePermissionGuard.test.tsx +6 -6
  180. package/src/__tests__/templates/accessibility.test.template.tsx +9 -9
  181. package/src/__tests__/templates/component.test.template.tsx +18 -15
  182. package/src/components/Button/Button.tsx +5 -1
  183. package/src/components/Calendar/Calendar.tsx +201 -47
  184. package/src/components/ContextSelector/ContextSelector.tsx +106 -119
  185. package/src/components/DataTable/AUDIT_REPORT.md +293 -0
  186. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +10 -2
  187. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +10 -4
  188. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +9 -9
  189. package/src/components/DataTable/components/ColumnFilter.tsx +63 -74
  190. package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +43 -41
  191. package/src/components/DataTable/components/DataTableCore.tsx +186 -13
  192. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +9 -11
  193. package/src/components/DataTable/components/DataTableLayout.tsx +35 -21
  194. package/src/components/DataTable/components/EditFields.tsx +23 -3
  195. package/src/components/DataTable/components/EditableRow.tsx +12 -9
  196. package/src/components/DataTable/components/EmptyState.tsx +10 -9
  197. package/src/components/DataTable/components/FilterRow.tsx +2 -4
  198. package/src/components/DataTable/components/ImportModal.tsx +124 -126
  199. package/src/components/DataTable/components/LoadingState.tsx +5 -6
  200. package/src/components/DataTable/components/RowComponent.tsx +12 -0
  201. package/src/components/DataTable/components/SortIndicator.tsx +50 -0
  202. package/src/components/DataTable/components/__tests__/COVERAGE_NOTE.md +4 -4
  203. package/src/components/DataTable/components/__tests__/ColumnFilter.test.tsx +23 -82
  204. package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +37 -9
  205. package/src/components/DataTable/components/__tests__/EmptyState.test.tsx +7 -4
  206. package/src/components/DataTable/components/__tests__/FilterRow.test.tsx +12 -4
  207. package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +41 -27
  208. package/src/components/DataTable/components/hooks/usePermissionTracking.ts +0 -4
  209. package/src/components/DataTable/components/index.ts +2 -1
  210. package/src/components/DataTable/hooks/__tests__/useDataTableState.test.ts +51 -47
  211. package/src/components/DataTable/hooks/useDataTablePermissions.ts +24 -21
  212. package/src/components/DataTable/hooks/useDataTableState.ts +125 -9
  213. package/src/components/DataTable/hooks/useTableColumns.ts +40 -2
  214. package/src/components/DataTable/hooks/useTableHandlers.ts +11 -0
  215. package/src/components/DataTable/types.ts +5 -18
  216. package/src/components/DataTable/utils/a11yUtils.ts +17 -0
  217. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +2 -1
  218. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.tsx +11 -15
  219. package/src/components/DateTimeField/DateTimeField.tsx +10 -9
  220. package/src/components/Dialog/Dialog.test.tsx +128 -104
  221. package/src/components/Dialog/Dialog.tsx +742 -24
  222. package/src/components/ErrorBoundary/ErrorBoundary.tsx +77 -79
  223. package/src/components/FileDisplay/FileDisplay.test.tsx +4 -2
  224. package/src/components/FileDisplay/FileDisplay.tsx +23 -17
  225. package/src/components/FileUpload/FileUpload.test.tsx +52 -14
  226. package/src/components/FileUpload/FileUpload.tsx +112 -130
  227. package/src/components/Form/Form.test.tsx +6 -8
  228. package/src/components/Form/Form.tsx +365 -4
  229. package/src/components/NavigationMenu/NavigationMenu.test.tsx +14 -13
  230. package/src/components/NavigationMenu/useNavigationFiltering.ts +11 -21
  231. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +6 -4
  232. package/src/components/PaceAppLayout/PaceAppLayout.tsx +11 -15
  233. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +108 -61
  234. package/src/components/PaceLoginPage/PaceLoginPage.tsx +27 -3
  235. package/src/components/Progress/Progress.tsx +2 -4
  236. package/src/components/ProtectedRoute/ProtectedRoute.tsx +8 -8
  237. package/src/components/Select/Select.tsx +109 -98
  238. package/src/components/Select/types.ts +4 -1
  239. package/src/components/UserMenu/UserMenu.tsx +9 -6
  240. package/src/hooks/__tests__/ServiceHooks.test.tsx +16 -16
  241. package/src/hooks/__tests__/hooks.integration.test.tsx +55 -57
  242. package/src/hooks/__tests__/useAppConfig.unit.test.ts +129 -67
  243. package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +97 -97
  244. package/src/hooks/__tests__/usePublicEvent.simple.test.ts +149 -67
  245. package/src/hooks/__tests__/usePublicEvent.test.ts +149 -79
  246. package/src/hooks/__tests__/usePublicEvent.unit.test.ts +158 -109
  247. package/src/hooks/__tests__/useSessionDraft.test.ts +163 -0
  248. package/src/hooks/__tests__/useSessionRestoration.unit.test.tsx +10 -5
  249. package/src/hooks/public/usePublicEvent.ts +67 -195
  250. package/src/hooks/public/usePublicEventLogo.test.ts +70 -17
  251. package/src/hooks/public/usePublicEventLogo.ts +24 -14
  252. package/src/hooks/public/usePublicFileDisplay.ts +2 -2
  253. package/src/hooks/public/usePublicRouteParams.ts +5 -5
  254. package/src/hooks/useAppConfig.ts +28 -26
  255. package/src/hooks/useEventTheme.test.ts +217 -239
  256. package/src/hooks/useEventTheme.ts +16 -28
  257. package/src/hooks/useFileDisplay.ts +2 -2
  258. package/src/hooks/useOrganisationPermissions.ts +5 -7
  259. package/src/hooks/useQueryCache.ts +0 -1
  260. package/src/hooks/useSessionDraft.ts +380 -0
  261. package/src/hooks/useSessionRestoration.ts +3 -1
  262. package/src/icons/index.ts +27 -0
  263. package/src/index.ts +5 -0
  264. package/src/providers/OrganisationProvider.tsx +23 -14
  265. package/src/providers/UnifiedAuthProvider.smoke.test.tsx +21 -21
  266. package/src/providers/__tests__/AuthProvider.test.tsx +21 -21
  267. package/src/providers/__tests__/EventProvider.test.tsx +61 -61
  268. package/src/providers/__tests__/InactivityProvider.test.tsx +56 -56
  269. package/src/providers/__tests__/OrganisationProvider.test.tsx +75 -75
  270. package/src/providers/__tests__/ProviderLifecycle.test.tsx +37 -37
  271. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +103 -103
  272. package/src/providers/services/EventServiceProvider.tsx +1 -24
  273. package/src/providers/services/UnifiedAuthProvider.tsx +5 -48
  274. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +7 -7
  275. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +13 -10
  276. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +7 -457
  277. package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +33 -7
  278. package/src/rbac/adapters.tsx +7 -295
  279. package/src/rbac/api.test.ts +44 -56
  280. package/src/rbac/api.ts +10 -17
  281. package/src/rbac/cache-invalidation.ts +0 -1
  282. package/src/rbac/compliance/index.ts +10 -0
  283. package/src/rbac/compliance/pattern-detector.ts +553 -0
  284. package/src/rbac/compliance/runtime-compliance.ts +22 -0
  285. package/src/rbac/components/AccessDenied.tsx +150 -0
  286. package/src/rbac/components/NavigationGuard.tsx +12 -20
  287. package/src/rbac/components/PagePermissionGuard.tsx +4 -24
  288. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +21 -8
  289. package/src/rbac/components/index.ts +3 -41
  290. package/src/rbac/eslint-rules.js +1 -1
  291. package/src/rbac/hooks/index.ts +0 -3
  292. package/src/rbac/hooks/permissions/index.ts +0 -3
  293. package/src/rbac/hooks/permissions/useAccessLevel.ts +4 -8
  294. package/src/rbac/hooks/usePermissions.ts +0 -3
  295. package/src/rbac/hooks/useResolvedScope.test.ts +57 -47
  296. package/src/rbac/hooks/useResolvedScope.ts +58 -140
  297. package/src/rbac/hooks/useResourcePermissions.test.ts +124 -38
  298. package/src/rbac/hooks/useResourcePermissions.ts +139 -48
  299. package/src/rbac/hooks/useRoleManagement.test.ts +65 -22
  300. package/src/rbac/hooks/useRoleManagement.ts +147 -19
  301. package/src/rbac/hooks/useSecureSupabase.ts +4 -8
  302. package/src/rbac/index.ts +7 -9
  303. package/src/rbac/utils/contextValidator.ts +9 -7
  304. package/src/services/AuthService.ts +130 -18
  305. package/src/services/EventService.ts +4 -97
  306. package/src/services/InactivityService.ts +16 -0
  307. package/src/services/OrganisationService.ts +7 -44
  308. package/src/services/__tests__/OrganisationService.test.ts +26 -8
  309. package/src/services/base/BaseService.ts +0 -3
  310. package/src/styles/core.css +7 -0
  311. package/src/theming/__tests__/parseEventColours.test.ts +9 -3
  312. package/src/theming/parseEventColours.ts +22 -10
  313. package/src/types/database.generated.ts +4733 -3809
  314. package/src/utils/__tests__/lazyLoad.unit.test.tsx +42 -39
  315. package/src/utils/__tests__/organisationContext.unit.test.ts +9 -10
  316. package/src/utils/context/organisationContext.test.ts +13 -28
  317. package/src/utils/context/organisationContext.ts +21 -52
  318. package/src/utils/dynamic/dynamicUtils.ts +1 -1
  319. package/src/utils/file-reference/index.ts +39 -15
  320. package/src/utils/formatting/formatDateTime.test.ts +3 -2
  321. package/src/utils/google-places/loadGoogleMapsScript.ts +29 -4
  322. package/src/utils/index.ts +4 -1
  323. package/src/utils/persistence/__tests__/keyDerivation.test.ts +135 -0
  324. package/src/utils/persistence/__tests__/sensitiveFieldDetection.test.ts +123 -0
  325. package/src/utils/persistence/keyDerivation.ts +304 -0
  326. package/src/utils/persistence/sensitiveFieldDetection.ts +212 -0
  327. package/src/utils/security/secureStorage.ts +5 -5
  328. package/src/utils/storage/README.md +1 -1
  329. package/src/utils/storage/helpers.ts +3 -3
  330. package/src/utils/supabase/createBaseClient.ts +147 -0
  331. package/src/utils/timezone/timezone.test.ts +1 -2
  332. package/src/utils/timezone/timezone.ts +1 -1
  333. package/src/utils/validation/csrf.ts +4 -4
  334. package/cursor-rules/00-pace-core-compliance.mdc +0 -331
  335. package/cursor-rules/01-standards-compliance.mdc +0 -244
  336. package/cursor-rules/04-testing-standards.mdc +0 -268
  337. package/cursor-rules/05-bug-reports-and-features.mdc +0 -246
  338. package/cursor-rules/06-code-quality.mdc +0 -309
  339. package/cursor-rules/07-tech-stack-compliance.mdc +0 -214
  340. package/cursor-rules/CHANGELOG.md +0 -119
  341. package/cursor-rules/README.md +0 -192
  342. package/dist/DataTable-AOVNCPTX.js +0 -175
  343. package/dist/DataTable-AOVNCPTX.js.map +0 -1
  344. package/dist/UnifiedAuthProvider-4SBX4LU5.js +0 -18
  345. package/dist/UnifiedAuthProvider-4SBX4LU5.js.map +0 -1
  346. package/dist/api-O6HTBX5Y.js +0 -52
  347. package/dist/api-O6HTBX5Y.js.map +0 -1
  348. package/dist/audit-V53FV5AG.js +0 -17
  349. package/dist/audit-V53FV5AG.js.map +0 -1
  350. package/dist/chunk-5DRSZLL2.js.map +0 -1
  351. package/dist/chunk-63FOKYGO.js.map +0 -1
  352. package/dist/chunk-6COVEUS7.js.map +0 -1
  353. package/dist/chunk-AFVQODI2.js +0 -263
  354. package/dist/chunk-AFVQODI2.js.map +0 -1
  355. package/dist/chunk-DGUM43GV.js.map +0 -1
  356. package/dist/chunk-E66EQZE6.js.map +0 -1
  357. package/dist/chunk-EFN2EIMK.js.map +0 -1
  358. package/dist/chunk-FFQEQTNW.js.map +0 -1
  359. package/dist/chunk-FMUCXFII.js.map +0 -1
  360. package/dist/chunk-G37KK66H.js.map +0 -1
  361. package/dist/chunk-G7QEZTYQ.js +0 -2053
  362. package/dist/chunk-G7QEZTYQ.js.map +0 -1
  363. package/dist/chunk-HU2C6SSC.js.map +0 -1
  364. package/dist/chunk-IHB5DR3H.js.map +0 -1
  365. package/dist/chunk-IVOFDYWT.js.map +0 -1
  366. package/dist/chunk-J36DSWQK.js.map +0 -1
  367. package/dist/chunk-JGRYX5UX.js.map +0 -1
  368. package/dist/chunk-KQCRWDSA.js +0 -1
  369. package/dist/chunk-KQCRWDSA.js.map +0 -1
  370. package/dist/chunk-L4OXEN46.js.map +0 -1
  371. package/dist/chunk-LMC26NLJ.js +0 -84
  372. package/dist/chunk-LMC26NLJ.js.map +0 -1
  373. package/dist/chunk-M43Y4SSO.js.map +0 -1
  374. package/dist/chunk-M7MPQISP.js.map +0 -1
  375. package/dist/chunk-NTM7ZSB6.js.map +0 -1
  376. package/dist/chunk-PWLANIRT.js.map +0 -1
  377. package/dist/chunk-QXHPKYJV.js.map +0 -1
  378. package/dist/chunk-RGAWHO7N.js.map +0 -1
  379. package/dist/chunk-UPPMRMYG.js.map +0 -1
  380. package/dist/chunk-VBXEHIUJ.js.map +0 -1
  381. package/dist/chunk-ZSAAAMVR.js.map +0 -1
  382. package/dist/components.js.map +0 -1
  383. package/dist/contextValidator-5OGXSPKS.js +0 -9
  384. package/dist/contextValidator-5OGXSPKS.js.map +0 -1
  385. package/dist/eslint-rules/pace-core-compliance.cjs +0 -510
  386. package/dist/hooks.js.map +0 -1
  387. package/dist/index.js.map +0 -1
  388. package/dist/providers.js.map +0 -1
  389. package/dist/rbac/eslint-rules.js.map +0 -1
  390. package/dist/rbac/index.js.map +0 -1
  391. package/dist/styles/index.js.map +0 -1
  392. package/dist/theming/runtime.js.map +0 -1
  393. package/dist/types.js.map +0 -1
  394. package/dist/utils.js.map +0 -1
  395. package/docs/best-practices/README.md +0 -472
  396. package/docs/best-practices/accessibility.md +0 -601
  397. package/docs/best-practices/common-patterns.md +0 -516
  398. package/docs/best-practices/deployment.md +0 -1103
  399. package/docs/best-practices/performance.md +0 -1328
  400. package/docs/best-practices/security.md +0 -940
  401. package/docs/best-practices/testing.md +0 -1034
  402. package/docs/rbac/compliance/compliance-guide.md +0 -544
  403. package/docs/standards/01-architecture-standard.md +0 -44
  404. package/docs/standards/02-api-and-rpc-standard.md +0 -39
  405. package/docs/standards/03-component-standard.md +0 -32
  406. package/docs/standards/04-code-style-standard.md +0 -32
  407. package/docs/standards/05-security-standard.md +0 -44
  408. package/docs/standards/06-testing-and-docs-standard.md +0 -29
  409. package/docs/standards/pace-core-compliance.md +0 -432
  410. package/scripts/audit/core/checks/accessibility.cjs +0 -197
  411. package/scripts/audit/core/checks/api-usage.cjs +0 -191
  412. package/scripts/audit/core/checks/bundle.cjs +0 -142
  413. package/scripts/audit/core/checks/compliance.cjs +0 -2706
  414. package/scripts/audit/core/checks/config.cjs +0 -54
  415. package/scripts/audit/core/checks/coverage.cjs +0 -84
  416. package/scripts/audit/core/checks/dependencies.cjs +0 -994
  417. package/scripts/audit/core/checks/documentation.cjs +0 -268
  418. package/scripts/audit/core/checks/environment.cjs +0 -116
  419. package/scripts/audit/core/checks/error-handling.cjs +0 -340
  420. package/scripts/audit/core/checks/forms.cjs +0 -172
  421. package/scripts/audit/core/checks/heuristics.cjs +0 -68
  422. package/scripts/audit/core/checks/hooks.cjs +0 -334
  423. package/scripts/audit/core/checks/imports.cjs +0 -244
  424. package/scripts/audit/core/checks/performance.cjs +0 -325
  425. package/scripts/audit/core/checks/routes.cjs +0 -117
  426. package/scripts/audit/core/checks/state.cjs +0 -130
  427. package/scripts/audit/core/checks/structure.cjs +0 -65
  428. package/scripts/audit/core/checks/style.cjs +0 -584
  429. package/scripts/audit/core/checks/testing.cjs +0 -122
  430. package/scripts/audit/core/checks/typescript.cjs +0 -61
  431. package/scripts/audit/core/scanner.cjs +0 -199
  432. package/scripts/audit/core/utils.cjs +0 -137
  433. package/scripts/audit/index.cjs +0 -223
  434. package/scripts/audit/reporters/console.cjs +0 -151
  435. package/scripts/audit/reporters/json.cjs +0 -54
  436. package/scripts/audit/reporters/markdown.cjs +0 -124
  437. package/scripts/audit-consuming-app.cjs +0 -86
  438. package/src/components/DataTable/components/DataTableBody.tsx +0 -454
  439. package/src/components/DataTable/components/DraggableColumnHeader.tsx +0 -156
  440. package/src/components/DataTable/components/ExpandButton.tsx +0 -113
  441. package/src/components/DataTable/components/GroupHeader.tsx +0 -54
  442. package/src/components/DataTable/components/ViewRowModal.tsx +0 -68
  443. package/src/components/DataTable/components/VirtualizedDataTable.tsx +0 -525
  444. package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +0 -462
  445. package/src/components/DataTable/components/__tests__/GroupHeader.test.tsx +0 -393
  446. package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +0 -476
  447. package/src/components/DataTable/components/__tests__/VirtualizedDataTable.test.tsx +0 -128
  448. package/src/components/DataTable/core/DataTableContext.tsx +0 -216
  449. package/src/components/DataTable/core/__tests__/DataTableContext.test.tsx +0 -136
  450. package/src/components/DataTable/hooks/__tests__/useColumnReordering.test.ts +0 -570
  451. package/src/components/DataTable/hooks/useColumnReordering.ts +0 -123
  452. package/src/components/DataTable/utils/debugTools.ts +0 -514
  453. package/src/eslint-rules/pace-core-compliance.js +0 -638
  454. package/src/rbac/components/EnhancedNavigationMenu.test.tsx +0 -555
  455. package/src/rbac/components/EnhancedNavigationMenu.tsx +0 -293
  456. package/src/rbac/components/NavigationProvider.test.tsx +0 -481
  457. package/src/rbac/components/NavigationProvider.tsx +0 -345
  458. package/src/rbac/components/PagePermissionProvider.test.tsx +0 -476
  459. package/src/rbac/components/PagePermissionProvider.tsx +0 -279
  460. package/src/rbac/components/PermissionEnforcer.tsx +0 -312
  461. package/src/rbac/components/RoleBasedRouter.tsx +0 -440
  462. package/src/rbac/components/SecureDataProvider.test.tsx +0 -543
  463. package/src/rbac/components/SecureDataProvider.tsx +0 -339
  464. package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +0 -620
  465. package/src/rbac/components/__tests__/NavigationProvider.test.tsx +0 -726
  466. package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +0 -661
  467. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +0 -881
  468. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +0 -783
  469. package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +0 -645
  470. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +0 -659
  471. package/src/rbac/hooks/permissions/useCachedPermissions.ts +0 -79
  472. package/src/rbac/hooks/permissions/useHasAllPermissions.ts +0 -90
  473. package/src/rbac/hooks/permissions/useHasAnyPermission.ts +0 -90
@@ -29,11 +29,11 @@ vi.mock('../../hooks/useInactivityTracker', () => ({
29
29
  vi.mock('../../components/InactivityWarningModal/InactivityWarningModal', () => ({
30
30
  InactivityWarningModal: ({ isOpen, timeRemaining, onStaySignedIn, onSignOutNow }: any) => (
31
31
  isOpen ? (
32
- <div data-testid="inactivity-modal">
33
- <div data-testid="time-remaining">{timeRemaining}</div>
32
+ <section data-testid="inactivity-modal">
33
+ <p data-testid="time-remaining">{timeRemaining}</p>
34
34
  <button onClick={onStaySignedIn}>Stay Signed In</button>
35
35
  <button onClick={onSignOutNow}>Sign Out Now</button>
36
- </div>
36
+ </section>
37
37
  ) : null
38
38
  ),
39
39
  }));
@@ -43,18 +43,18 @@ const TestComponent = () => {
43
43
  const inactivity = useInactivity();
44
44
 
45
45
  return (
46
- <div data-testid="test-component">
47
- <div data-testid="showWarning">{inactivity.showInactivityWarning ? 'true' : 'false'}</div>
48
- <div data-testid="timeRemaining">{inactivity.inactivityTimeRemaining}</div>
49
- <div data-testid="isIdle">{inactivity.isIdle ? 'true' : 'false'}</div>
50
- <div data-testid="isTracking">{inactivity.isTracking ? 'true' : 'false'}</div>
46
+ <section data-testid="test-component">
47
+ <p data-testid="showWarning">{inactivity.showInactivityWarning ? 'true' : 'false'}</p>
48
+ <p data-testid="timeRemaining">{inactivity.inactivityTimeRemaining}</p>
49
+ <p data-testid="isIdle">{inactivity.isIdle ? 'true' : 'false'}</p>
50
+ <p data-testid="isTracking">{inactivity.isTracking ? 'true' : 'false'}</p>
51
51
  <button onClick={inactivity.resetActivity}>Reset Activity</button>
52
52
  <button onClick={inactivity.startTracking}>Start Tracking</button>
53
53
  <button onClick={inactivity.stopTracking}>Stop Tracking</button>
54
54
  <button onClick={inactivity.handleIdleLogout}>Idle Logout</button>
55
55
  <button onClick={inactivity.handleStaySignedIn}>Stay Signed In</button>
56
56
  <button onClick={inactivity.handleSignOutNow}>Sign Out Now</button>
57
- </div>
57
+ </section>
58
58
  );
59
59
  };
60
60
 
@@ -90,21 +90,21 @@ describe('InactivityProvider', () => {
90
90
  it('renders children without crashing', () => {
91
91
  render(
92
92
  <TestWrapper supabaseClient={mockSupabaseClient}>
93
- <div>Test content</div>
93
+ <p>Test content</p>
94
94
  </TestWrapper>
95
95
  );
96
96
 
97
- expect(screen.getByText('Test content')).toBeInTheDocument();
97
+ expect(screen.getByText('Test content')).toBeDefined();
98
98
  });
99
99
 
100
100
  it('renders without user and session', () => {
101
101
  render(
102
102
  <TestWrapper user={null} session={null} supabaseClient={mockSupabaseClient}>
103
- <div>Test content</div>
103
+ <p>Test content</p>
104
104
  </TestWrapper>
105
105
  );
106
106
 
107
- expect(screen.getByText('Test content')).toBeInTheDocument();
107
+ expect(screen.getByText('Test content')).toBeDefined();
108
108
  });
109
109
  });
110
110
 
@@ -127,14 +127,14 @@ describe('InactivityProvider', () => {
127
127
  const inactivity = useInactivity();
128
128
 
129
129
  return (
130
- <div>
131
- <div data-testid="hasResetActivity">{typeof inactivity.resetActivity === 'function' ? 'true' : 'false'}</div>
132
- <div data-testid="hasStartTracking">{typeof inactivity.startTracking === 'function' ? 'true' : 'false'}</div>
133
- <div data-testid="hasStopTracking">{typeof inactivity.stopTracking === 'function' ? 'true' : 'false'}</div>
134
- <div data-testid="hasHandleIdleLogout">{typeof inactivity.handleIdleLogout === 'function' ? 'true' : 'false'}</div>
135
- <div data-testid="hasHandleStaySignedIn">{typeof inactivity.handleStaySignedIn === 'function' ? 'true' : 'false'}</div>
136
- <div data-testid="hasHandleSignOutNow">{typeof inactivity.handleSignOutNow === 'function' ? 'true' : 'false'}</div>
137
- </div>
130
+ <section>
131
+ <p data-testid="hasResetActivity">{typeof inactivity.resetActivity === 'function' ? 'true' : 'false'}</p>
132
+ <p data-testid="hasStartTracking">{typeof inactivity.startTracking === 'function' ? 'true' : 'false'}</p>
133
+ <p data-testid="hasStopTracking">{typeof inactivity.stopTracking === 'function' ? 'true' : 'false'}</p>
134
+ <p data-testid="hasHandleIdleLogout">{typeof inactivity.handleIdleLogout === 'function' ? 'true' : 'false'}</p>
135
+ <p data-testid="hasHandleStaySignedIn">{typeof inactivity.handleStaySignedIn === 'function' ? 'true' : 'false'}</p>
136
+ <p data-testid="hasHandleSignOutNow">{typeof inactivity.handleSignOutNow === 'function' ? 'true' : 'false'}</p>
137
+ </section>
138
138
  );
139
139
  };
140
140
 
@@ -162,7 +162,7 @@ describe('InactivityProvider', () => {
162
162
  );
163
163
 
164
164
  // Just verify the component renders - tracking logic is tested in service layer
165
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
165
+ expect(screen.getByTestId('test-component')).toBeDefined();
166
166
  });
167
167
 
168
168
  it('disables tracking when no user or session', () => {
@@ -173,7 +173,7 @@ describe('InactivityProvider', () => {
173
173
  );
174
174
 
175
175
  // Just verify the component renders - tracking logic is tested in service layer
176
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
176
+ expect(screen.getByTestId('test-component')).toBeDefined();
177
177
  });
178
178
 
179
179
  it('disables tracking when dangerously disabled', () => {
@@ -184,7 +184,7 @@ describe('InactivityProvider', () => {
184
184
  );
185
185
 
186
186
  // Just verify the component renders - tracking logic is tested in service layer
187
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
187
+ expect(screen.getByTestId('test-component')).toBeDefined();
188
188
  });
189
189
 
190
190
  it('uses custom timeout values', () => {
@@ -199,7 +199,7 @@ describe('InactivityProvider', () => {
199
199
  );
200
200
 
201
201
  // Just verify the component renders - tracking logic is tested in service layer
202
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
202
+ expect(screen.getByTestId('test-component')).toBeDefined();
203
203
  });
204
204
  });
205
205
 
@@ -214,7 +214,7 @@ describe('InactivityProvider', () => {
214
214
  );
215
215
 
216
216
  // Test that the component renders and the method is available
217
- expect(screen.getByText('Idle Logout')).toBeInTheDocument();
217
+ expect(screen.getByText('Idle Logout')).toBeDefined();
218
218
  });
219
219
 
220
220
  it('handles idle logout without callback', async () => {
@@ -225,7 +225,7 @@ describe('InactivityProvider', () => {
225
225
  );
226
226
 
227
227
  // Test that the component renders
228
- expect(screen.getByText('Idle Logout')).toBeInTheDocument();
228
+ expect(screen.getByText('Idle Logout')).toBeDefined();
229
229
  });
230
230
 
231
231
  it('handles sign out errors gracefully', async () => {
@@ -239,7 +239,7 @@ describe('InactivityProvider', () => {
239
239
  );
240
240
 
241
241
  // Test that the component renders
242
- expect(screen.getByText('Idle Logout')).toBeInTheDocument();
242
+ expect(screen.getByText('Idle Logout')).toBeDefined();
243
243
 
244
244
  consoleErrorSpy.mockRestore();
245
245
  });
@@ -272,7 +272,7 @@ describe('InactivityProvider', () => {
272
272
  );
273
273
 
274
274
  // Service layer handles the actual logic - just verify the UI renders
275
- expect(screen.getByTestId('showWarning')).toBeInTheDocument();
275
+ expect(screen.getByTestId('showWarning')).toBeDefined();
276
276
  });
277
277
 
278
278
  it('handles activity callback', () => {
@@ -317,7 +317,7 @@ describe('InactivityProvider', () => {
317
317
 
318
318
  screen.getByText('Reset Activity').click();
319
319
  // Service layer handles the actual logic - just verify the UI responds
320
- expect(screen.getByText('Reset Activity')).toBeInTheDocument();
320
+ expect(screen.getByText('Reset Activity')).toBeDefined();
321
321
  });
322
322
 
323
323
  it('handles start tracking', () => {
@@ -329,7 +329,7 @@ describe('InactivityProvider', () => {
329
329
 
330
330
  screen.getByText('Start Tracking').click();
331
331
  // Service layer handles the actual logic - just verify the UI responds
332
- expect(screen.getByText('Start Tracking')).toBeInTheDocument();
332
+ expect(screen.getByText('Start Tracking')).toBeDefined();
333
333
  });
334
334
 
335
335
  it('handles stop tracking', () => {
@@ -341,7 +341,7 @@ describe('InactivityProvider', () => {
341
341
 
342
342
  screen.getByText('Stop Tracking').click();
343
343
  // Service layer handles the actual logic - just verify the UI responds
344
- expect(screen.getByText('Stop Tracking')).toBeInTheDocument();
344
+ expect(screen.getByText('Stop Tracking')).toBeDefined();
345
345
  });
346
346
 
347
347
  it('handles manual idle logout', async () => {
@@ -356,7 +356,7 @@ describe('InactivityProvider', () => {
356
356
  screen.getByText('Idle Logout').click();
357
357
 
358
358
  // Test that the button is clickable
359
- expect(screen.getByText('Idle Logout')).toBeInTheDocument();
359
+ expect(screen.getByText('Idle Logout')).toBeDefined();
360
360
  });
361
361
 
362
362
  it('handles stay signed in', () => {
@@ -368,7 +368,7 @@ describe('InactivityProvider', () => {
368
368
 
369
369
  screen.getByText('Stay Signed In').click();
370
370
  // Service layer handles the actual logic - just verify the UI responds
371
- expect(screen.getByText('Stay Signed In')).toBeInTheDocument();
371
+ expect(screen.getByText('Stay Signed In')).toBeDefined();
372
372
  });
373
373
 
374
374
  it('handles sign out now', async () => {
@@ -383,7 +383,7 @@ describe('InactivityProvider', () => {
383
383
  screen.getByText('Sign Out Now').click();
384
384
 
385
385
  // Test that the button is clickable
386
- expect(screen.getByText('Sign Out Now')).toBeInTheDocument();
386
+ expect(screen.getByText('Sign Out Now')).toBeDefined();
387
387
  });
388
388
  });
389
389
 
@@ -403,16 +403,16 @@ describe('InactivityProvider', () => {
403
403
  );
404
404
 
405
405
  // Test that the component renders
406
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
406
+ expect(screen.getByTestId('test-component')).toBeDefined();
407
407
  });
408
408
 
409
409
  it('renders custom warning modal when provided', () => {
410
410
  const customRenderer = vi.fn(({ timeRemaining, onStaySignedIn, onSignOutNow }) => (
411
- <div data-testid="custom-modal">
412
- <div data-testid="custom-time">{timeRemaining}</div>
411
+ <section data-testid="custom-modal">
412
+ <p data-testid="custom-time">{timeRemaining}</p>
413
413
  <button onClick={onStaySignedIn}>Custom Stay</button>
414
414
  <button onClick={onSignOutNow}>Custom Sign Out</button>
415
- </div>
415
+ </section>
416
416
  ));
417
417
 
418
418
  // Mock tracker with warning state
@@ -429,15 +429,15 @@ describe('InactivityProvider', () => {
429
429
  );
430
430
 
431
431
  // Test that the component renders
432
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
432
+ expect(screen.getByTestId('test-component')).toBeDefined();
433
433
  });
434
434
 
435
435
  it('handles custom modal actions', async () => {
436
436
  const customRenderer = vi.fn(({ onStaySignedIn, onSignOutNow }) => (
437
- <div>
437
+ <section>
438
438
  <button onClick={onStaySignedIn}>Custom Stay</button>
439
439
  <button onClick={onSignOutNow}>Custom Sign Out</button>
440
- </div>
440
+ </section>
441
441
  ));
442
442
 
443
443
  // Mock tracker with warning state
@@ -454,7 +454,7 @@ describe('InactivityProvider', () => {
454
454
  );
455
455
 
456
456
  // Test that the component renders
457
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
457
+ expect(screen.getByTestId('test-component')).toBeDefined();
458
458
  });
459
459
  });
460
460
 
@@ -469,7 +469,7 @@ describe('InactivityProvider', () => {
469
469
  );
470
470
 
471
471
  // Service layer may log different messages - just verify component renders
472
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
472
+ expect(screen.getByTestId('test-component')).toBeDefined();
473
473
 
474
474
  consoleErrorSpy.mockRestore();
475
475
  });
@@ -484,7 +484,7 @@ describe('InactivityProvider', () => {
484
484
  );
485
485
 
486
486
  // Service layer may log different messages - just verify component renders
487
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
487
+ expect(screen.getByTestId('test-component')).toBeDefined();
488
488
 
489
489
  consoleWarnSpy.mockRestore();
490
490
  });
@@ -507,14 +507,14 @@ describe('InactivityProvider', () => {
507
507
  const inactivity = useInactivity();
508
508
 
509
509
  return (
510
- <div>
511
- <div data-testid="hasShowWarning">{typeof inactivity.showInactivityWarning === 'boolean' ? 'true' : 'false'}</div>
512
- <div data-testid="hasTimeRemaining">{typeof inactivity.inactivityTimeRemaining === 'number' ? 'true' : 'false'}</div>
513
- <div data-testid="hasIsIdle">{typeof inactivity.isIdle === 'boolean' ? 'true' : 'false'}</div>
514
- <div data-testid="hasTimeRemaining2">{typeof inactivity.timeRemaining === 'number' ? 'true' : 'false'}</div>
515
- <div data-testid="hasShowWarning2">{typeof inactivity.showWarning === 'boolean' ? 'true' : 'false'}</div>
516
- <div data-testid="hasIsTracking">{typeof inactivity.isTracking === 'boolean' ? 'true' : 'false'}</div>
517
- </div>
510
+ <section>
511
+ <p data-testid="hasShowWarning">{typeof inactivity.showInactivityWarning === 'boolean' ? 'true' : 'false'}</p>
512
+ <p data-testid="hasTimeRemaining">{typeof inactivity.inactivityTimeRemaining === 'number' ? 'true' : 'false'}</p>
513
+ <p data-testid="hasIsIdle">{typeof inactivity.isIdle === 'boolean' ? 'true' : 'false'}</p>
514
+ <p data-testid="hasTimeRemaining2">{typeof inactivity.timeRemaining === 'number' ? 'true' : 'false'}</p>
515
+ <p data-testid="hasShowWarning2">{typeof inactivity.showWarning === 'boolean' ? 'true' : 'false'}</p>
516
+ <p data-testid="hasIsTracking">{typeof inactivity.isTracking === 'boolean' ? 'true' : 'false'}</p>
517
+ </section>
518
518
  );
519
519
  };
520
520
 
@@ -542,7 +542,7 @@ describe('InactivityProvider', () => {
542
542
  );
543
543
 
544
544
  // Service layer handles time conversion - just verify the UI renders
545
- expect(screen.getByTestId('timeRemaining')).toBeInTheDocument();
545
+ expect(screen.getByTestId('timeRemaining')).toBeDefined();
546
546
  });
547
547
 
548
548
  it('handles fractional seconds correctly', () => {
@@ -553,7 +553,7 @@ describe('InactivityProvider', () => {
553
553
  );
554
554
 
555
555
  // Service layer handles time conversion - just verify the UI renders
556
- expect(screen.getByTestId('timeRemaining')).toBeInTheDocument();
556
+ expect(screen.getByTestId('timeRemaining')).toBeDefined();
557
557
  });
558
558
  });
559
559
 
@@ -561,7 +561,7 @@ describe('InactivityProvider', () => {
561
561
  it('handles component unmount gracefully', () => {
562
562
  const { unmount } = render(
563
563
  <TestWrapper>
564
- <div>Test content</div>
564
+ <p>Test content</p>
565
565
  </TestWrapper>
566
566
  );
567
567