@jmruthers/pace-core 0.6.6 → 0.6.8

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 (292) hide show
  1. package/{scripts/audit/audit-dependencies.cjs → audit-tool/00-dependencies.cjs} +227 -22
  2. package/audit-tool/audits/01-pace-core-compliance.cjs +556 -0
  3. package/audit-tool/audits/02-project-structure.cjs +240 -0
  4. package/audit-tool/audits/03-architecture.cjs +224 -0
  5. package/audit-tool/audits/04-code-quality.cjs +149 -0
  6. package/audit-tool/audits/05-styling.cjs +224 -0
  7. package/audit-tool/audits/06-security-rbac.cjs +554 -0
  8. package/audit-tool/audits/07-api-tech-stack.cjs +355 -0
  9. package/audit-tool/audits/08-testing-documentation.cjs +202 -0
  10. package/audit-tool/audits/09-operations.cjs +208 -0
  11. package/audit-tool/index.cjs +295 -0
  12. package/audit-tool/utils/code-utils.cjs +218 -0
  13. package/audit-tool/utils/file-utils.cjs +230 -0
  14. package/audit-tool/utils/report-utils.cjs +380 -0
  15. package/cursor-rules/00-standards-overview.mdc +156 -0
  16. package/cursor-rules/{00-pace-core-compliance.mdc → 01-pace-core-compliance.mdc} +187 -34
  17. package/cursor-rules/02-project-structure.mdc +37 -5
  18. package/cursor-rules/{03-solid-principles.mdc → 03-architecture.mdc} +125 -11
  19. package/cursor-rules/04-code-quality.mdc +419 -0
  20. package/cursor-rules/{08-markup-quality.mdc → 05-styling.mdc} +55 -10
  21. package/cursor-rules/{09-rbac-compliance.mdc → 06-security-rbac.mdc} +62 -6
  22. package/cursor-rules/07-api-tech-stack.mdc +377 -0
  23. package/cursor-rules/08-testing-documentation.mdc +324 -0
  24. package/cursor-rules/09-operations.mdc +365 -0
  25. package/dist/DataTable-6RMSCQJ6.js +15 -0
  26. package/dist/{DataTable-2N_tqbfq.d.ts → DataTable-DRUIgtUH.d.ts} +1 -1
  27. package/dist/{PublicPageProvider-BBH6Vqg7.d.ts → PublicPageProvider-CIGSujI2.d.ts} +40 -24
  28. package/dist/{UnifiedAuthProvider-ZT6TIGM7.js → UnifiedAuthProvider-7SNDOWYD.js} +2 -2
  29. package/dist/{api-Y4MQWOFW.js → api-7P7DI652.js} +1 -1
  30. package/dist/{chunk-MAGBIDNS.js → chunk-4DDCYDQ3.js} +8 -7
  31. package/dist/{chunk-BVP2BCJF.js → chunk-5W2A3DRC.js} +10 -9
  32. package/dist/{chunk-SD6WQY43.js → chunk-7ILTDCL2.js} +9 -1
  33. package/dist/{chunk-3QC3KRHK.js → chunk-A3W6LW53.js} +16 -1
  34. package/dist/{chunk-3O3WHILE.js → chunk-EF2UGZWY.js} +239 -63
  35. package/dist/{chunk-LAZMKTTF.js → chunk-EURB7QFZ.js} +341 -337
  36. package/dist/{chunk-2HGJFNAH.js → chunk-FEJLJNWA.js} +1 -15
  37. package/dist/{chunk-7TYHROIV.js → chunk-GS5672WG.js} +55 -13
  38. package/dist/{chunk-UIYSCEV7.js → chunk-IUBRCBSY.js} +1 -1
  39. package/dist/{chunk-ZFYPMX46.js → chunk-LX6U42O3.js} +1 -1
  40. package/dist/{chunk-FENMYN2U.js → chunk-MPBLMWVR.js} +3 -3
  41. package/dist/{chunk-ZS5VO5JB.js → chunk-NKHKXPI4.js} +408 -453
  42. package/dist/{chunk-A55DK444.js → chunk-OJ4SKRSV.js} +1 -7
  43. package/dist/{chunk-4T7OBVTU.js → chunk-S6ZQKDY6.js} +1 -1
  44. package/dist/{chunk-FTCRZOG2.js → chunk-T5CVK4R3.js} +5 -5
  45. package/dist/{chunk-OHIK3MIO.js → chunk-Z2FNRKF3.js} +13 -13
  46. package/dist/components.d.ts +5 -4
  47. package/dist/components.js +29 -34
  48. package/dist/eslint-rules/index.cjs +22 -9
  49. package/{src/eslint-rules/rules/compliance.cjs → dist/eslint-rules/rules/01-pace-core-compliance.cjs} +184 -23
  50. package/dist/eslint-rules/rules/04-code-quality.cjs +346 -0
  51. package/dist/eslint-rules/rules/05-styling.cjs +61 -0
  52. package/dist/eslint-rules/rules/{rbac.cjs → 06-security-rbac.cjs} +34 -13
  53. package/dist/eslint-rules/rules/07-api-tech-stack.cjs +385 -0
  54. package/dist/eslint-rules/rules/08-testing.cjs +94 -0
  55. package/dist/{functions-DHebl8-F.d.ts → functions-lBy5L2ry.d.ts} +1 -1
  56. package/dist/hooks.d.ts +5 -5
  57. package/dist/hooks.js +8 -8
  58. package/dist/index.d.ts +7 -7
  59. package/dist/index.js +21 -20
  60. package/dist/providers.js +2 -2
  61. package/dist/rbac/index.d.ts +1 -1
  62. package/dist/rbac/index.js +8 -8
  63. package/dist/theming/runtime.d.ts +61 -1
  64. package/dist/theming/runtime.js +1 -1
  65. package/dist/{types-B-K_5VnO.d.ts → types-DXstZpNI.d.ts} +0 -17
  66. package/dist/types.d.ts +2 -2
  67. package/dist/{usePublicRouteParams-COZ28Mvq.d.ts → usePublicRouteParams-MamNgwqe.d.ts} +19 -19
  68. package/dist/utils.d.ts +2 -2
  69. package/dist/utils.js +8 -8
  70. package/docs/README.md +1 -1
  71. package/docs/api/modules.md +106 -41
  72. package/docs/api-reference/components.md +18 -20
  73. package/docs/api-reference/hooks.md +80 -80
  74. package/docs/api-reference/types.md +1 -1
  75. package/docs/api-reference/utilities.md +1 -1
  76. package/docs/architecture/README.md +1 -1
  77. package/docs/core-concepts/events.md +3 -3
  78. package/docs/core-concepts/organisations.md +6 -6
  79. package/docs/core-concepts/permissions.md +6 -6
  80. package/docs/documentation-index.md +12 -18
  81. package/docs/getting-started/dependencies.md +23 -0
  82. package/docs/getting-started/documentation-index.md +1 -1
  83. package/docs/getting-started/examples/README.md +4 -4
  84. package/docs/getting-started/examples/full-featured-app.md +1 -1
  85. package/docs/getting-started/faq.md +2 -2
  86. package/docs/getting-started/quick-reference.md +4 -4
  87. package/docs/implementation-guides/app-layout.md +1 -1
  88. package/docs/implementation-guides/authentication.md +15 -15
  89. package/docs/implementation-guides/component-styling.md +1 -1
  90. package/docs/implementation-guides/data-tables.md +127 -34
  91. package/docs/implementation-guides/datatable-rbac-usage.md +1 -1
  92. package/docs/implementation-guides/dynamic-colors.md +3 -3
  93. package/docs/implementation-guides/file-upload-storage.md +2 -2
  94. package/docs/implementation-guides/hierarchical-datatable.md +40 -60
  95. package/docs/implementation-guides/inactivity-tracking.md +3 -3
  96. package/docs/implementation-guides/large-datasets.md +3 -2
  97. package/docs/implementation-guides/organisation-security.md +2 -2
  98. package/docs/implementation-guides/performance.md +2 -2
  99. package/docs/implementation-guides/permission-enforcement.md +1 -1
  100. package/docs/migration/V0.3.44_organisation-context-timing-fix.md +1 -1
  101. package/docs/migration/V0.4.0_rbac-migration.md +6 -6
  102. package/docs/rbac/README.md +5 -5
  103. package/docs/rbac/advanced-patterns.md +6 -6
  104. package/docs/rbac/api-reference.md +20 -20
  105. package/docs/rbac/event-based-apps.md +3 -3
  106. package/docs/rbac/examples.md +41 -41
  107. package/docs/rbac/getting-started.md +37 -37
  108. package/docs/rbac/performance.md +1 -1
  109. package/docs/rbac/quick-start.md +52 -52
  110. package/docs/rbac/secure-client-protection.md +1 -1
  111. package/docs/rbac/troubleshooting.md +1 -1
  112. package/docs/security/README.md +5 -5
  113. package/docs/standards/0-standards-overview.md +220 -0
  114. package/docs/standards/{00-pace-core-compliance.md → 1-pace-core-compliance-standards.md} +241 -185
  115. package/docs/standards/{02-project-structure.md → 2-project-structure-standards.md} +11 -47
  116. package/docs/standards/3-architecture-standards.md +606 -0
  117. package/docs/standards/4-code-quality-standards.md +728 -0
  118. package/docs/standards/{08-markup-quality.md → 5-styling-standards.md} +12 -9
  119. package/docs/standards/{09-rbac-compliance.md → 6-security-rbac-standards.md} +126 -18
  120. package/docs/standards/7-api-tech-stack-standards.md +662 -0
  121. package/docs/standards/8-testing-documentation-standards.md +401 -0
  122. package/docs/standards/9-operations-standards.md +1102 -0
  123. package/docs/standards/README.md +203 -104
  124. package/docs/troubleshooting/README.md +4 -4
  125. package/docs/troubleshooting/common-issues.md +2 -2
  126. package/docs/troubleshooting/debugging.md +9 -9
  127. package/docs/troubleshooting/migration.md +4 -4
  128. package/eslint-config-pace-core.cjs +50 -20
  129. package/package.json +50 -19
  130. package/scripts/eslint-audit.cjs +123 -0
  131. package/scripts/install-cursor-rules.cjs +11 -243
  132. package/scripts/install-eslint-config.cjs +349 -0
  133. package/scripts/validate-dependencies.cjs +248 -0
  134. package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +2 -2
  135. package/src/__tests__/helpers/__tests__/test-providers.test.tsx +2 -2
  136. package/src/__tests__/helpers/__tests__/test-utils.test.tsx +30 -18
  137. package/src/__tests__/integration/UserProfile.test.tsx +14 -14
  138. package/src/__tests__/rbac/PagePermissionGuard.test.tsx +6 -6
  139. package/src/__tests__/templates/accessibility.test.template.tsx +10 -9
  140. package/src/__tests__/templates/component.test.template.tsx +18 -15
  141. package/src/components/AddressField/AddressField.tsx +26 -1
  142. package/src/components/Alert/Alert.test.tsx +86 -22
  143. package/src/components/Alert/Alert.tsx +19 -11
  144. package/src/components/Badge/Badge.tsx +1 -1
  145. package/src/components/Calendar/Calendar.tsx +201 -47
  146. package/src/components/Checkbox/Checkbox.test.tsx +2 -1
  147. package/src/components/ContextSelector/ContextSelector.tsx +108 -126
  148. package/src/components/DataTable/AUDIT_REPORT.md +293 -0
  149. package/src/components/DataTable/DataTable.tsx +1 -19
  150. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +6 -2
  151. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +21 -6
  152. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +3 -2
  153. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +9 -9
  154. package/src/components/DataTable/components/ColumnFilter.tsx +63 -74
  155. package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +43 -41
  156. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +9 -11
  157. package/src/components/DataTable/components/DataTableLayout.tsx +5 -16
  158. package/src/components/DataTable/components/EditableRow.tsx +5 -7
  159. package/src/components/DataTable/components/EmptyState.tsx +11 -10
  160. package/src/components/DataTable/components/FilterRow.tsx +2 -4
  161. package/src/components/DataTable/components/ImportModal.tsx +124 -126
  162. package/src/components/DataTable/components/LoadingState.tsx +5 -6
  163. package/src/components/DataTable/components/SortIndicator.tsx +50 -0
  164. package/src/components/DataTable/components/__tests__/COVERAGE_NOTE.md +4 -4
  165. package/src/components/DataTable/components/__tests__/ColumnFilter.test.tsx +23 -82
  166. package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +37 -9
  167. package/src/components/DataTable/components/__tests__/EmptyState.test.tsx +7 -4
  168. package/src/components/DataTable/components/__tests__/FilterRow.test.tsx +12 -4
  169. package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +45 -27
  170. package/src/components/DataTable/components/index.ts +2 -1
  171. package/src/components/DataTable/types.ts +0 -18
  172. package/src/components/DataTable/utils/a11yUtils.ts +17 -0
  173. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +1 -1
  174. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.tsx +11 -15
  175. package/src/components/DateTimeField/DateTimeField.tsx +7 -8
  176. package/src/components/Dialog/Dialog.test.tsx +1 -0
  177. package/src/components/Dialog/Dialog.tsx +25 -8
  178. package/src/components/ErrorBoundary/ErrorBoundary.tsx +77 -79
  179. package/src/components/FileUpload/FileUpload.test.tsx +45 -16
  180. package/src/components/FileUpload/FileUpload.tsx +141 -130
  181. package/src/components/NavigationMenu/NavigationMenu.test.tsx +48 -12
  182. package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +9 -9
  183. package/src/components/PaceAppLayout/PaceAppLayout.security.test.tsx +30 -30
  184. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +4 -4
  185. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +7 -1
  186. package/src/components/Progress/Progress.tsx +2 -4
  187. package/src/components/ProtectedRoute/ProtectedRoute.tsx +8 -8
  188. package/src/components/Select/Select.tsx +86 -77
  189. package/src/components/Select/types.ts +3 -0
  190. package/src/hooks/__tests__/ServiceHooks.test.tsx +16 -16
  191. package/src/hooks/__tests__/hooks.integration.test.tsx +49 -49
  192. package/src/hooks/__tests__/useDataTablePerformance.unit.test.ts +8 -5
  193. package/src/hooks/__tests__/useFileUrl.unit.test.ts +4 -0
  194. package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +99 -99
  195. package/src/hooks/__tests__/useInactivityTracker.unit.test.ts +45 -8
  196. package/src/hooks/__tests__/usePerformanceMonitor.unit.test.ts +22 -2
  197. package/src/hooks/public/usePublicEvent.ts +5 -5
  198. package/src/hooks/public/usePublicEventLogo.ts +5 -5
  199. package/src/hooks/public/usePublicFileDisplay.ts +2 -2
  200. package/src/hooks/public/usePublicRouteParams.ts +13 -9
  201. package/src/hooks/useAddressAutocomplete.test.ts +18 -18
  202. package/src/hooks/useAppConfig.ts +2 -2
  203. package/src/hooks/useEventTheme.test.ts +7 -7
  204. package/src/hooks/useEventTheme.ts +2 -1
  205. package/src/hooks/useFileDisplay.ts +2 -2
  206. package/src/hooks/useFileUrl.ts +52 -8
  207. package/src/hooks/useOrganisationSecurity.test.ts +2 -1
  208. package/src/providers/UnifiedAuthProvider.smoke.test.tsx +21 -21
  209. package/src/providers/__tests__/AuthProvider.test.tsx +21 -21
  210. package/src/providers/__tests__/EventProvider.test.tsx +61 -61
  211. package/src/providers/__tests__/InactivityProvider.test.tsx +56 -56
  212. package/src/providers/__tests__/OrganisationProvider.test.tsx +75 -75
  213. package/src/providers/__tests__/ProviderLifecycle.test.tsx +38 -38
  214. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +103 -103
  215. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +7 -7
  216. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +10 -10
  217. package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +15 -6
  218. package/src/rbac/__tests__/rbac-functions.test.ts +3 -3
  219. package/src/rbac/api.test.ts +104 -0
  220. package/src/rbac/engine.ts +1 -1
  221. package/src/rbac/hooks/useCan.test.ts +2 -2
  222. package/src/rbac/secureClient.ts +1 -1
  223. package/src/rbac/types/functions.ts +1 -1
  224. package/src/styles/core.css +7 -0
  225. package/src/theming/__tests__/parseEventColours.test.ts +118 -3
  226. package/src/theming/parseEventColours.ts +77 -11
  227. package/src/types/supabase.ts +2 -3
  228. package/src/utils/__tests__/bundleAnalysis.unit.test.ts +9 -9
  229. package/src/utils/__tests__/lazyLoad.unit.test.tsx +42 -39
  230. package/src/utils/file-reference/__tests__/file-reference.test.ts +4 -0
  231. package/src/utils/formatting/formatDate.test.ts +3 -2
  232. package/src/utils/formatting/formatDateTime.test.ts +2 -2
  233. package/src/utils/google-places/googlePlacesUtils.test.ts +36 -24
  234. package/src/utils/storage/README.md +1 -1
  235. package/src/utils/storage/__tests__/helpers.unit.test.ts +19 -12
  236. package/src/utils/storage/helpers.test.ts +69 -3
  237. package/cursor-rules/01-standards-compliance.mdc +0 -285
  238. package/cursor-rules/04-testing-standards.mdc +0 -270
  239. package/cursor-rules/05-bug-reports-and-features.mdc +0 -248
  240. package/cursor-rules/06-code-quality.mdc +0 -311
  241. package/cursor-rules/07-tech-stack-compliance.mdc +0 -216
  242. package/cursor-rules/10-error-handling-patterns.mdc +0 -179
  243. package/cursor-rules/11-performance-optimization.mdc +0 -169
  244. package/cursor-rules/12-ci-cd-integration.mdc +0 -150
  245. package/dist/DataTable-LRJL4IRV.js +0 -15
  246. package/dist/eslint-rules/rules/compliance.cjs +0 -348
  247. package/dist/eslint-rules/rules/components.cjs +0 -113
  248. package/dist/eslint-rules/rules/imports.cjs +0 -102
  249. package/docs/best-practices/README.md +0 -472
  250. package/docs/best-practices/accessibility.md +0 -604
  251. package/docs/best-practices/common-patterns.md +0 -516
  252. package/docs/best-practices/deployment.md +0 -1103
  253. package/docs/best-practices/performance.md +0 -1328
  254. package/docs/best-practices/security.md +0 -940
  255. package/docs/best-practices/testing.md +0 -1034
  256. package/docs/rbac/compliance/compliance-guide.md +0 -544
  257. package/docs/standards/01-standards-compliance.md +0 -188
  258. package/docs/standards/03-solid-principles.md +0 -39
  259. package/docs/standards/04-testing-standards.md +0 -36
  260. package/docs/standards/05-bug-reports-and-features.md +0 -27
  261. package/docs/standards/06-code-quality.md +0 -34
  262. package/docs/standards/07-tech-stack-compliance.md +0 -30
  263. package/docs/standards/10-error-handling-patterns.md +0 -401
  264. package/docs/standards/11-performance-optimization.md +0 -348
  265. package/docs/standards/12-ci-cd-integration.md +0 -370
  266. package/docs/standards/ALIGNMENT_REVIEW_SUMMARY.md +0 -192
  267. package/scripts/audit/audit-compliance.cjs +0 -1295
  268. package/scripts/audit/audit-components.cjs +0 -260
  269. package/scripts/audit/audit-rbac.cjs +0 -954
  270. package/scripts/audit/audit-standards.cjs +0 -1268
  271. package/scripts/audit/index.cjs +0 -1927
  272. package/src/components/DataTable/components/DataTableBody.tsx +0 -478
  273. package/src/components/DataTable/components/DraggableColumnHeader.tsx +0 -156
  274. package/src/components/DataTable/components/ExpandButton.tsx +0 -113
  275. package/src/components/DataTable/components/GroupHeader.tsx +0 -54
  276. package/src/components/DataTable/components/ViewRowModal.tsx +0 -68
  277. package/src/components/DataTable/components/VirtualizedDataTable.tsx +0 -525
  278. package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +0 -462
  279. package/src/components/DataTable/components/__tests__/GroupHeader.test.tsx +0 -393
  280. package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +0 -476
  281. package/src/components/DataTable/components/__tests__/VirtualizedDataTable.test.tsx +0 -128
  282. package/src/components/DataTable/core/DataTableContext.tsx +0 -216
  283. package/src/components/DataTable/core/__tests__/DataTableContext.test.tsx +0 -136
  284. package/src/components/DataTable/hooks/__tests__/useColumnReordering.test.ts +0 -570
  285. package/src/components/DataTable/hooks/useColumnReordering.ts +0 -123
  286. package/src/components/DataTable/utils/debugTools.ts +0 -514
  287. package/src/eslint-rules/index.cjs +0 -22
  288. package/src/eslint-rules/rules/components.cjs +0 -113
  289. package/src/eslint-rules/rules/imports.cjs +0 -102
  290. package/src/eslint-rules/rules/rbac.cjs +0 -790
  291. package/src/eslint-rules/utils/helpers.cjs +0 -42
  292. package/src/eslint-rules/utils/manifest-loader.cjs +0 -75
@@ -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