@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
@@ -17,13 +17,13 @@ const TestComponent = ({ options = {} }: { options?: any }) => {
17
17
  const focusTrap = useFocusTrap(options);
18
18
 
19
19
  return (
20
- <div ref={focusTrap.containerRef as any} data-testid="container">
20
+ <section ref={focusTrap.containerRef as any} data-testid="container">
21
21
  <button data-testid="button-1">Button 1</button>
22
22
  <input data-testid="input-1" type="text" />
23
23
  <button data-testid="button-2">Button 2</button>
24
24
  <button data-testid="button-3" disabled>Disabled Button</button>
25
- <div data-testid="non-focusable">Non-focusable</div>
26
- </div>
25
+ <p data-testid="non-focusable">Non-focusable</p>
26
+ </section>
27
27
  );
28
28
  };
29
29
 
@@ -39,26 +39,26 @@ describe('useFocusTrap', () => {
39
39
 
40
40
  it('should render with container element', () => {
41
41
  renderWithProviders(<TestComponent />);
42
- expect(screen.getByTestId('container')).toBeInTheDocument();
42
+ expect(screen.getByTestId('container')).toBeDefined();
43
43
  });
44
44
 
45
45
  it('should render with focusable elements', () => {
46
46
  renderWithProviders(<TestComponent />);
47
- expect(screen.getByTestId('button-1')).toBeInTheDocument();
48
- expect(screen.getByTestId('input-1')).toBeInTheDocument();
49
- expect(screen.getByTestId('button-2')).toBeInTheDocument();
47
+ expect(screen.getByTestId('button-1')).toBeDefined();
48
+ expect(screen.getByTestId('input-1')).toBeDefined();
49
+ expect(screen.getByTestId('button-2')).toBeDefined();
50
50
  });
51
51
 
52
52
  it('should handle disabled elements', () => {
53
53
  renderWithProviders(<TestComponent />);
54
54
  const disabledButton = screen.getByTestId('button-3');
55
- expect(disabledButton).toBeInTheDocument();
55
+ expect(disabledButton).toBeDefined();
56
56
  expect(disabledButton).toBeDisabled();
57
57
  });
58
58
 
59
59
  it('should handle non-focusable elements', () => {
60
60
  renderWithProviders(<TestComponent />);
61
- expect(screen.getByTestId('non-focusable')).toBeInTheDocument();
61
+ expect(screen.getByTestId('non-focusable')).toBeDefined();
62
62
  });
63
63
  });
64
64
 
@@ -72,7 +72,7 @@ describe('useFocusTrap', () => {
72
72
  expect(typeof focusTrap.focusLast).toBe('function');
73
73
  expect(typeof focusTrap.getFocusableElements).toBe('function');
74
74
 
75
- return <div ref={focusTrap.containerRef as any} data-testid="container" />;
75
+ return <section ref={focusTrap.containerRef as any} data-testid="container" />;
76
76
  };
77
77
 
78
78
  renderWithProviders(<TestHook />);
@@ -85,7 +85,7 @@ describe('useFocusTrap', () => {
85
85
  // Should work with default options
86
86
  expect(focusTrap.containerRef.current).toBeDefined();
87
87
 
88
- return <div ref={focusTrap.containerRef as any} data-testid="container" />;
88
+ return <section ref={focusTrap.containerRef as any} data-testid="container" />;
89
89
  };
90
90
 
91
91
  renderWithProviders(<TestHook />);
@@ -103,7 +103,7 @@ describe('useFocusTrap', () => {
103
103
 
104
104
  expect(focusTrap.containerRef.current).toBeDefined();
105
105
 
106
- return <div ref={focusTrap.containerRef as any} data-testid="container" />;
106
+ return <section ref={focusTrap.containerRef as any} data-testid="container" />;
107
107
  };
108
108
 
109
109
  renderWithProviders(<TestHook />);
@@ -120,7 +120,7 @@ describe('useFocusTrap', () => {
120
120
  expect(() => focusTrap.focusLast()).not.toThrow();
121
121
  expect(() => focusTrap.getFocusableElements()).not.toThrow();
122
122
 
123
- return <div ref={focusTrap.containerRef as any} data-testid="container" />;
123
+ return <section ref={focusTrap.containerRef as any} data-testid="container" />;
124
124
  };
125
125
 
126
126
  renderWithProviders(<TestHook />);
@@ -135,7 +135,7 @@ describe('useFocusTrap', () => {
135
135
  expect(() => focusTrap.focusLast()).not.toThrow();
136
136
  expect(() => focusTrap.getFocusableElements()).not.toThrow();
137
137
 
138
- return <div ref={focusTrap.containerRef as any} data-testid="container" />;
138
+ return <section ref={focusTrap.containerRef as any} data-testid="container" />;
139
139
  };
140
140
 
141
141
  renderWithProviders(<TestHook />);
@@ -147,7 +147,7 @@ describe('useFocusTrap', () => {
147
147
  const TestHook = () => {
148
148
  const focusTrap = useFocusTrap({ isActive: true });
149
149
  expect(focusTrap.containerRef.current).toBeDefined();
150
- return <div ref={focusTrap.containerRef as any} data-testid="container" />;
150
+ return <section ref={focusTrap.containerRef as any} data-testid="container" />;
151
151
  };
152
152
 
153
153
  renderWithProviders(<TestHook />);
@@ -157,7 +157,7 @@ describe('useFocusTrap', () => {
157
157
  const TestHook = () => {
158
158
  const focusTrap = useFocusTrap({ autoFocus: true });
159
159
  expect(focusTrap.containerRef.current).toBeDefined();
160
- return <div ref={focusTrap.containerRef as any} data-testid="container" />;
160
+ return <section ref={focusTrap.containerRef as any} data-testid="container" />;
161
161
  };
162
162
 
163
163
  renderWithProviders(<TestHook />);
@@ -167,7 +167,7 @@ describe('useFocusTrap', () => {
167
167
  const TestHook = () => {
168
168
  const focusTrap = useFocusTrap({ restoreFocus: true });
169
169
  expect(focusTrap.containerRef.current).toBeDefined();
170
- return <div ref={focusTrap.containerRef as any} data-testid="container" />;
170
+ return <section ref={focusTrap.containerRef as any} data-testid="container" />;
171
171
  };
172
172
 
173
173
  renderWithProviders(<TestHook />);
@@ -178,7 +178,7 @@ describe('useFocusTrap', () => {
178
178
  const TestHook = () => {
179
179
  const focusTrap = useFocusTrap({ onEscape });
180
180
  expect(focusTrap.containerRef.current).toBeDefined();
181
- return <div ref={focusTrap.containerRef as any} data-testid="container" />;
181
+ return <section ref={focusTrap.containerRef as any} data-testid="container" />;
182
182
  };
183
183
 
184
184
  renderWithProviders(<TestHook />);
@@ -190,7 +190,7 @@ describe('useFocusTrap', () => {
190
190
  focusableSelector: 'button:not([disabled])'
191
191
  });
192
192
  expect(focusTrap.containerRef.current).toBeDefined();
193
- return <div ref={focusTrap.containerRef as any} data-testid="container" />;
193
+ return <section ref={focusTrap.containerRef as any} data-testid="container" />;
194
194
  };
195
195
 
196
196
  renderWithProviders(<TestHook />);
@@ -207,16 +207,16 @@ describe('useFocusTrap', () => {
207
207
  expect(focusTrap2.containerRef.current).toBeDefined();
208
208
 
209
209
  return (
210
- <div>
211
- <div ref={focusTrap1.containerRef as any} data-testid="container-1" />
212
- <div ref={focusTrap2.containerRef as any} data-testid="container-2" />
213
- </div>
210
+ <section>
211
+ <section ref={focusTrap1.containerRef as any} data-testid="container-1" />
212
+ <section ref={focusTrap2.containerRef as any} data-testid="container-2" />
213
+ </section>
214
214
  );
215
215
  };
216
216
 
217
217
  renderWithProviders(<TestMultiple />);
218
- expect(screen.getByTestId('container-1')).toBeInTheDocument();
219
- expect(screen.getByTestId('container-2')).toBeInTheDocument();
218
+ expect(screen.getByTestId('container-1')).toBeDefined();
219
+ expect(screen.getByTestId('container-2')).toBeDefined();
220
220
  });
221
221
 
222
222
  it('should handle component unmounting', () => {
@@ -238,11 +238,11 @@ describe('useFocusTrap', () => {
238
238
 
239
239
  expect(focusTrap.containerRef.current).toBeDefined();
240
240
 
241
- return <div ref={focusTrap.containerRef as any} data-testid="container" />;
241
+ return <section ref={focusTrap.containerRef as any} data-testid="container" />;
242
242
  };
243
243
 
244
244
  renderWithProviders(<TestAllOptions />);
245
- expect(screen.getByTestId('container')).toBeInTheDocument();
245
+ expect(screen.getByTestId('container')).toBeDefined();
246
246
  });
247
247
  });
248
248
 
@@ -256,7 +256,7 @@ describe('useFocusTrap', () => {
256
256
  expect(() => focusTrap.focusLast()).not.toThrow();
257
257
  expect(() => focusTrap.getFocusableElements()).not.toThrow();
258
258
 
259
- return <div ref={focusTrap.containerRef as any} data-testid="container" />;
259
+ return <section ref={focusTrap.containerRef as any} data-testid="container" />;
260
260
  };
261
261
 
262
262
  renderWithProviders(<TestNullRef />);
@@ -268,7 +268,7 @@ describe('useFocusTrap', () => {
268
268
 
269
269
  expect(focusTrap.containerRef.current).toBeDefined();
270
270
 
271
- return <div ref={focusTrap.containerRef as any} data-testid="container" />;
271
+ return <section ref={focusTrap.containerRef as any} data-testid="container" />;
272
272
  };
273
273
 
274
274
  renderWithProviders(<TestUndefinedOptions />);
@@ -280,7 +280,7 @@ describe('useFocusTrap', () => {
280
280
 
281
281
  expect(focusTrap.containerRef.current).toBeDefined();
282
282
 
283
- return <div ref={focusTrap.containerRef as any} data-testid="container" />;
283
+ return <section ref={focusTrap.containerRef as any} data-testid="container" />;
284
284
  };
285
285
 
286
286
  renderWithProviders(<TestPartialOptions />);
@@ -301,14 +301,14 @@ describe('useFocusTrap', () => {
301
301
  }, []);
302
302
 
303
303
  return (
304
- <div>
304
+ <section>
305
305
  <button ref={restoreButton} data-testid="restore-button">Restore Target</button>
306
- <div ref={focusTrap.containerRef as any} data-testid="container">
306
+ <section ref={focusTrap.containerRef as any} data-testid="container">
307
307
  <button data-testid="button-1">Button 1</button>
308
308
  <button data-testid="button-2">Button 2</button>
309
- </div>
309
+ </section>
310
310
  <button onClick={() => setIsActive(false)} data-testid="deactivate">Deactivate</button>
311
- </div>
311
+ </section>
312
312
  );
313
313
  };
314
314
 
@@ -338,13 +338,13 @@ describe('useFocusTrap', () => {
338
338
  }, []);
339
339
 
340
340
  return (
341
- <div>
341
+ <section>
342
342
  <button ref={restoreButton} data-testid="restore-button">Restore Target</button>
343
- <div ref={focusTrap.containerRef as any} data-testid="container">
343
+ <section ref={focusTrap.containerRef as any} data-testid="container">
344
344
  <button data-testid="button-1">Button 1</button>
345
- </div>
345
+ </section>
346
346
  <button onClick={() => setIsActive(false)} data-testid="deactivate">Deactivate</button>
347
- </div>
347
+ </section>
348
348
  );
349
349
  };
350
350
 
@@ -361,10 +361,10 @@ describe('useFocusTrap', () => {
361
361
  const focusTrap = useFocusTrap({ isActive: true, autoFocus: true });
362
362
 
363
363
  return (
364
- <div ref={focusTrap.containerRef as any} data-testid="container">
364
+ <section ref={focusTrap.containerRef as any} data-testid="container">
365
365
  <button data-testid="button-1">Button 1</button>
366
366
  <button data-testid="button-2">Button 2</button>
367
- </div>
367
+ </section>
368
368
  );
369
369
  };
370
370
 
@@ -375,7 +375,7 @@ describe('useFocusTrap', () => {
375
375
 
376
376
  const button1 = screen.getByTestId('button-1');
377
377
  // The first button should be focused (though timing may vary)
378
- expect(button1).toBeInTheDocument();
378
+ expect(button1).toBeDefined();
379
379
  });
380
380
 
381
381
  it('should not auto-focus when autoFocus=false', () => {
@@ -383,9 +383,9 @@ describe('useFocusTrap', () => {
383
383
  const focusTrap = useFocusTrap({ isActive: true, autoFocus: false });
384
384
 
385
385
  return (
386
- <div ref={focusTrap.containerRef as any} data-testid="container">
386
+ <section ref={focusTrap.containerRef as any} data-testid="container">
387
387
  <button data-testid="button-1">Button 1</button>
388
- </div>
388
+ </section>
389
389
  );
390
390
  };
391
391
 
@@ -393,7 +393,7 @@ describe('useFocusTrap', () => {
393
393
 
394
394
  const button1 = screen.getByTestId('button-1');
395
395
  // When autoFocus is false, focus should not automatically move
396
- expect(button1).toBeInTheDocument();
396
+ expect(button1).toBeDefined();
397
397
  });
398
398
 
399
399
  it('should not auto-focus when isActive=false', () => {
@@ -401,16 +401,16 @@ describe('useFocusTrap', () => {
401
401
  const focusTrap = useFocusTrap({ isActive: false, autoFocus: true });
402
402
 
403
403
  return (
404
- <div ref={focusTrap.containerRef as any} data-testid="container">
404
+ <section ref={focusTrap.containerRef as any} data-testid="container">
405
405
  <button data-testid="button-1">Button 1</button>
406
- </div>
406
+ </section>
407
407
  );
408
408
  };
409
409
 
410
410
  renderWithProviders(<TestInactive />);
411
411
 
412
412
  // When inactive, auto-focus should not occur
413
- expect(screen.getByTestId('button-1')).toBeInTheDocument();
413
+ expect(screen.getByTestId('button-1')).toBeDefined();
414
414
  });
415
415
  });
416
416
 
@@ -422,11 +422,11 @@ describe('useFocusTrap', () => {
422
422
  });
423
423
 
424
424
  return (
425
- <div ref={focusTrap.containerRef as any} data-testid="container">
425
+ <section ref={focusTrap.containerRef as any} data-testid="container">
426
426
  <button className="custom-focusable" data-testid="custom-1">Custom 1</button>
427
427
  <button data-testid="regular-1">Regular 1</button>
428
428
  <button className="custom-focusable" data-testid="custom-2">Custom 2</button>
429
- </div>
429
+ </section>
430
430
  );
431
431
  };
432
432
 
@@ -443,11 +443,11 @@ describe('useFocusTrap', () => {
443
443
  });
444
444
 
445
445
  return (
446
- <div ref={focusTrap.containerRef as any} data-testid="container">
446
+ <section ref={focusTrap.containerRef as any} data-testid="container">
447
447
  <input type="text" data-testid="text-input" />
448
448
  <input type="checkbox" data-testid="checkbox-input" />
449
449
  <button data-testid="button">Button</button>
450
- </div>
450
+ </section>
451
451
  );
452
452
  };
453
453
 
@@ -464,11 +464,11 @@ describe('useFocusTrap', () => {
464
464
  const focusTrap = useFocusTrap({ isActive: true });
465
465
 
466
466
  return (
467
- <div ref={focusTrap.containerRef as any} data-testid="container">
467
+ <section ref={focusTrap.containerRef as any} data-testid="container">
468
468
  <button data-testid="button-1">Button 1</button>
469
469
  <button data-testid="button-2">Button 2</button>
470
470
  <button data-testid="button-3">Button 3</button>
471
- </div>
471
+ </section>
472
472
  );
473
473
  };
474
474
 
@@ -486,7 +486,7 @@ describe('useFocusTrap', () => {
486
486
  button1.dispatchEvent(tabEvent);
487
487
 
488
488
  // Focus should move to button 2
489
- expect(button1).toBeInTheDocument();
489
+ expect(button1).toBeDefined();
490
490
  });
491
491
 
492
492
  it('should handle Shift+Tab when focus is on last element', () => {
@@ -494,11 +494,11 @@ describe('useFocusTrap', () => {
494
494
  const focusTrap = useFocusTrap({ isActive: true });
495
495
 
496
496
  return (
497
- <div ref={focusTrap.containerRef as any} data-testid="container">
497
+ <section ref={focusTrap.containerRef as any} data-testid="container">
498
498
  <button data-testid="button-1">Button 1</button>
499
499
  <button data-testid="button-2">Button 2</button>
500
500
  <button data-testid="button-3">Button 3</button>
501
- </div>
501
+ </section>
502
502
  );
503
503
  };
504
504
 
@@ -517,7 +517,7 @@ describe('useFocusTrap', () => {
517
517
  button3.dispatchEvent(shiftTabEvent);
518
518
 
519
519
  // Focus should wrap to first element
520
- expect(button3).toBeInTheDocument();
520
+ expect(button3).toBeDefined();
521
521
  });
522
522
 
523
523
  it('should handle Escape key with onEscape callback', () => {
@@ -526,9 +526,9 @@ describe('useFocusTrap', () => {
526
526
  const focusTrap = useFocusTrap({ isActive: true, onEscape });
527
527
 
528
528
  return (
529
- <div ref={focusTrap.containerRef as any} data-testid="container">
529
+ <section ref={focusTrap.containerRef as any} data-testid="container">
530
530
  <button data-testid="button-1">Button 1</button>
531
- </div>
531
+ </section>
532
532
  );
533
533
  };
534
534
 
@@ -549,9 +549,9 @@ describe('useFocusTrap', () => {
549
549
  const focusTrap = useFocusTrap({ isActive: true });
550
550
 
551
551
  return (
552
- <div ref={focusTrap.containerRef as any} data-testid="container">
552
+ <section ref={focusTrap.containerRef as any} data-testid="container">
553
553
  <button data-testid="button-1">Button 1</button>
554
- </div>
554
+ </section>
555
555
  );
556
556
  };
557
557
 
@@ -572,9 +572,9 @@ describe('useFocusTrap', () => {
572
572
  const focusTrap = useFocusTrap({ isActive: true });
573
573
 
574
574
  return (
575
- <div ref={focusTrap.containerRef as any} data-testid="container">
576
- <div data-testid="non-focusable">No focusable elements</div>
577
- </div>
575
+ <section ref={focusTrap.containerRef as any} data-testid="container">
576
+ <p data-testid="non-focusable">No focusable elements</p>
577
+ </section>
578
578
  );
579
579
  };
580
580
 
@@ -600,13 +600,13 @@ describe('useFocusTrap', () => {
600
600
  expect(focusTrap.containerRef).toBeDefined();
601
601
  expect(focusTrap.containerRef.current).toBeNull(); // Before render
602
602
 
603
- return <div ref={focusTrap.containerRef as any} data-testid="container" />;
603
+ return <section ref={focusTrap.containerRef as any} data-testid="container" />;
604
604
  };
605
605
 
606
606
  renderWithProviders(<TestRefAttachment />);
607
607
 
608
608
  const container = screen.getByTestId('container');
609
- expect(container).toBeInTheDocument();
609
+ expect(container).toBeDefined();
610
610
  });
611
611
 
612
612
  it('should handle ref when container is conditionally rendered', () => {
@@ -615,20 +615,20 @@ describe('useFocusTrap', () => {
615
615
  const focusTrap = useFocusTrap();
616
616
 
617
617
  return (
618
- <div>
618
+ <section>
619
619
  {show && (
620
- <div ref={focusTrap.containerRef as any} data-testid="container">
620
+ <section ref={focusTrap.containerRef as any} data-testid="container">
621
621
  <button>Button</button>
622
- </div>
622
+ </section>
623
623
  )}
624
624
  <button onClick={() => setShow(!show)} data-testid="toggle">Toggle</button>
625
- </div>
625
+ </section>
626
626
  );
627
627
  };
628
628
 
629
629
  const { getByTestId } = renderWithProviders(<TestConditionalRef />);
630
630
 
631
- expect(screen.getByTestId('container')).toBeInTheDocument();
631
+ expect(screen.getByTestId('container')).toBeDefined();
632
632
 
633
633
  act(() => {
634
634
  getByTestId('toggle').click();
@@ -645,7 +645,7 @@ describe('useFocusTrap', () => {
645
645
  const focusTrap = useFocusTrap({ isActive: true });
646
646
 
647
647
  return (
648
- <div ref={focusTrap.containerRef as any} data-testid="container">
648
+ <section ref={focusTrap.containerRef as any} data-testid="container">
649
649
  {elements.map((label, index) => (
650
650
  <button key={index} data-testid={`button-${index}`}>{label}</button>
651
651
  ))}
@@ -655,19 +655,19 @@ describe('useFocusTrap', () => {
655
655
  >
656
656
  Add
657
657
  </button>
658
- </div>
658
+ </section>
659
659
  );
660
660
  };
661
661
 
662
662
  const { getByTestId } = renderWithProviders(<TestDynamicElements />);
663
663
 
664
- expect(screen.getByTestId('button-0')).toBeInTheDocument();
664
+ expect(screen.getByTestId('button-0')).toBeDefined();
665
665
 
666
666
  act(() => {
667
667
  getByTestId('add-button').click();
668
668
  });
669
669
 
670
- expect(screen.getByTestId('button-1')).toBeInTheDocument();
670
+ expect(screen.getByTestId('button-1')).toBeDefined();
671
671
 
672
672
  // getFocusableElements should return the new elements
673
673
  const container = screen.getByTestId('container');
@@ -681,9 +681,9 @@ describe('useFocusTrap', () => {
681
681
  const focusTrap = useFocusTrap({ isActive: true });
682
682
 
683
683
  return (
684
- <div ref={focusTrap.containerRef as any} data-testid="container">
684
+ <section ref={focusTrap.containerRef as any} data-testid="container">
685
685
  {elements.map((label, index) => (
686
- <div key={`${label}-${index}`} style={{ display: 'flex', gap: '8px' }}>
686
+ <section key={`${label}-${index}`} style={{ display: 'flex', gap: '8px' }}>
687
687
  <button data-testid={`button-${label}`}>
688
688
  {label}
689
689
  </button>
@@ -693,17 +693,17 @@ describe('useFocusTrap', () => {
693
693
  >
694
694
  Remove
695
695
  </button>
696
- </div>
696
+ </section>
697
697
  ))}
698
- </div>
698
+ </section>
699
699
  );
700
700
  };
701
701
 
702
702
  const { getByTestId } = renderWithProviders(<TestRemoveElements />);
703
703
 
704
- expect(screen.getByTestId('button-Button 1')).toBeInTheDocument();
705
- expect(screen.getByTestId('button-Button 2')).toBeInTheDocument();
706
- expect(screen.getByTestId('button-Button 3')).toBeInTheDocument();
704
+ expect(screen.getByTestId('button-Button 1')).toBeDefined();
705
+ expect(screen.getByTestId('button-Button 2')).toBeDefined();
706
+ expect(screen.getByTestId('button-Button 3')).toBeDefined();
707
707
 
708
708
  act(() => {
709
709
  getByTestId('remove-1').click();
@@ -715,9 +715,9 @@ describe('useFocusTrap', () => {
715
715
  });
716
716
 
717
717
  // Verify the removed button is gone and others remain
718
- expect(screen.getByTestId('button-Button 1')).toBeInTheDocument();
719
- expect(screen.getByTestId('button-Button 3')).toBeInTheDocument();
720
- expect(screen.queryByTestId('button-Button 2')).not.toBeInTheDocument();
718
+ expect(screen.getByTestId('button-Button 1')).toBeDefined();
719
+ expect(screen.getByTestId('button-Button 3')).toBeDefined();
720
+ expect(screen.queryByTestId('button-Button 2')).not.toBeInTheDocument();
721
721
  });
722
722
 
723
723
  it('should handle elements becoming disabled/enabled', () => {
@@ -726,14 +726,14 @@ describe('useFocusTrap', () => {
726
726
  const focusTrap = useFocusTrap({ isActive: true });
727
727
 
728
728
  return (
729
- <div ref={focusTrap.containerRef as any} data-testid="container">
729
+ <section ref={focusTrap.containerRef as any} data-testid="container">
730
730
  <button disabled={disabled} data-testid="toggleable-button">
731
731
  Toggleable Button
732
732
  </button>
733
733
  <button onClick={() => setDisabled(!disabled)} data-testid="toggle">
734
734
  Toggle Disabled
735
735
  </button>
736
- </div>
736
+ </section>
737
737
  );
738
738
  };
739
739
 
@@ -762,10 +762,10 @@ describe('useFocusTrap', () => {
762
762
  }, []);
763
763
 
764
764
  return (
765
- <div ref={focusTrap.containerRef as any} data-testid="container">
765
+ <section ref={focusTrap.containerRef as any} data-testid="container">
766
766
  <button data-testid="button-1">Button 1</button>
767
767
  <button data-testid="button-2">Button 2</button>
768
- </div>
768
+ </section>
769
769
  );
770
770
  };
771
771
 
@@ -773,7 +773,7 @@ describe('useFocusTrap', () => {
773
773
 
774
774
  const button1 = screen.getByTestId('button-1');
775
775
  // focusFirst should focus the first element
776
- expect(button1).toBeInTheDocument();
776
+ expect(button1).toBeDefined();
777
777
  });
778
778
 
779
779
  it('should focus last element when focusLast is called', () => {
@@ -785,10 +785,10 @@ describe('useFocusTrap', () => {
785
785
  }, []);
786
786
 
787
787
  return (
788
- <div ref={focusTrap.containerRef as any} data-testid="container">
788
+ <section ref={focusTrap.containerRef as any} data-testid="container">
789
789
  <button data-testid="button-1">Button 1</button>
790
790
  <button data-testid="button-2">Button 2</button>
791
- </div>
791
+ </section>
792
792
  );
793
793
  };
794
794
 
@@ -796,7 +796,7 @@ describe('useFocusTrap', () => {
796
796
 
797
797
  const button2 = screen.getByTestId('button-2');
798
798
  // focusLast should focus the last element
799
- expect(button2).toBeInTheDocument();
799
+ expect(button2).toBeDefined();
800
800
  });
801
801
 
802
802
  it('getFocusableElements should return correct elements', () => {
@@ -810,19 +810,19 @@ describe('useFocusTrap', () => {
810
810
  }, []);
811
811
 
812
812
  return (
813
- <div ref={focusTrap.containerRef as any} data-testid="container">
813
+ <section ref={focusTrap.containerRef as any} data-testid="container">
814
814
  <button data-testid="button-1">Button 1</button>
815
815
  <input data-testid="input-1" type="text" />
816
816
  <button data-testid="button-2" disabled>Disabled</button>
817
- <div data-testid="non-focusable">Non-focusable</div>
818
- </div>
817
+ <p data-testid="non-focusable">Non-focusable</p>
818
+ </section>
819
819
  );
820
820
  };
821
821
 
822
822
  renderWithProviders(<TestGetFocusable />);
823
823
 
824
824
  // getFocusableElements should return 2 (button-1 and input-1, excluding disabled button and div)
825
- expect(screen.getByTestId('container')).toBeInTheDocument();
825
+ expect(screen.getByTestId('container')).toBeDefined();
826
826
  });
827
827
  });
828
828
  });