@jmruthers/pace-core 0.5.181 → 0.5.183

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 (756) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +16 -2
  3. package/dist/{AuthService-DYuQPJj6.d.ts → AuthService-B-cd2MA4.d.ts} +9 -11
  4. package/dist/{DataTable-CWAZZcXC.d.ts → DataTable-Bz8ffqyA.d.ts} +1 -1
  5. package/dist/{DataTable-UA6CL4JI.js → DataTable-QAB34V6K.js} +14 -15
  6. package/dist/UnifiedAuthProvider-7F6T4B6K.js +13 -0
  7. package/dist/{UnifiedAuthProvider-DJxGTftH.d.ts → UnifiedAuthProvider-F86d7dSi.d.ts} +5 -6
  8. package/dist/{api-45XYYO2A.js → api-ROMBCNKU.js} +5 -5
  9. package/dist/{audit-64X3VJXB.js → audit-WRS3KJKI.js} +4 -4
  10. package/dist/auth-BZOJqrdd.d.ts +49 -0
  11. package/dist/{chunk-CX5M4ZAG.js → chunk-5DRSZLL2.js} +1 -1
  12. package/dist/chunk-5DRSZLL2.js.map +1 -0
  13. package/dist/{chunk-BESYRHQM.js → chunk-6C4YBBJM.js} +10 -7
  14. package/dist/chunk-6C4YBBJM.js.map +1 -0
  15. package/dist/{chunk-PLDDJCW6.js → chunk-7D4SUZUM.js} +2 -13
  16. package/dist/{chunk-HRO5HWN2.js → chunk-CSOFYHAG.js} +55 -162
  17. package/dist/chunk-CSOFYHAG.js.map +1 -0
  18. package/dist/{chunk-ANBQRTPX.js → chunk-E66EQZE6.js} +3 -5
  19. package/dist/{chunk-ANBQRTPX.js.map → chunk-E66EQZE6.js.map} +1 -1
  20. package/dist/{chunk-Q5QRDWKI.js → chunk-F2IMUDXZ.js} +4 -6
  21. package/dist/chunk-F2IMUDXZ.js.map +1 -0
  22. package/dist/{chunk-SBVILCCA.js → chunk-FSFQFJCU.js} +28 -6
  23. package/dist/chunk-FSFQFJCU.js.map +1 -0
  24. package/dist/chunk-FUEYYMX5.js +2296 -0
  25. package/dist/chunk-FUEYYMX5.js.map +1 -0
  26. package/dist/{chunk-FFKNH6U5.js → chunk-HKIT6O7W.js} +3 -5
  27. package/dist/{chunk-FFKNH6U5.js.map → chunk-HKIT6O7W.js.map} +1 -1
  28. package/dist/chunk-KQCRWDSA.js +1 -0
  29. package/dist/{chunk-S5OFRT4M.js → chunk-KUEN3HFB.js} +6 -6
  30. package/dist/chunk-KUEN3HFB.js.map +1 -0
  31. package/dist/chunk-LMC26NLJ.js +84 -0
  32. package/dist/chunk-LMC26NLJ.js.map +1 -0
  33. package/dist/{chunk-BVYWGZVV.js → chunk-M7W4CP3M.js} +52 -19
  34. package/dist/chunk-M7W4CP3M.js.map +1 -0
  35. package/dist/{chunk-HZLDFOE4.js → chunk-MI7HBHN3.js} +164 -243
  36. package/dist/chunk-MI7HBHN3.js.map +1 -0
  37. package/dist/{chunk-PPMP5J6T.js → chunk-PWAHJW4G.js} +180 -29
  38. package/dist/chunk-PWAHJW4G.js.map +1 -0
  39. package/dist/chunk-PWLANIRT.js +127 -0
  40. package/dist/{chunk-XDNLUEXI.js.map → chunk-PWLANIRT.js.map} +1 -1
  41. package/dist/chunk-QCDXODCA.js +75 -0
  42. package/dist/chunk-QCDXODCA.js.map +1 -0
  43. package/dist/{chunk-D7LCGMVS.js → chunk-QETLRQI6.js} +526 -887
  44. package/dist/chunk-QETLRQI6.js.map +1 -0
  45. package/dist/{chunk-5MT24GKJ.js → chunk-QUVSNGIP.js} +264 -262
  46. package/dist/chunk-QUVSNGIP.js.map +1 -0
  47. package/dist/chunk-QXHPKYJV.js +113 -0
  48. package/dist/chunk-QXHPKYJV.js.map +1 -0
  49. package/dist/{chunk-OWAG3GSU.js → chunk-R77UEZ4E.js} +11 -1
  50. package/dist/chunk-R77UEZ4E.js.map +1 -0
  51. package/dist/{chunk-ZYTYSTO5.js → chunk-RA3JUFMW.js} +314 -161
  52. package/dist/chunk-RA3JUFMW.js.map +1 -0
  53. package/dist/{chunk-ERISIBYU.js → chunk-SQGMNID3.js} +3 -8
  54. package/dist/chunk-SQGMNID3.js.map +1 -0
  55. package/dist/{chunk-XJ2HZOBU.js → chunk-UHNYIBXL.js} +1 -1
  56. package/dist/chunk-UHNYIBXL.js.map +1 -0
  57. package/{src/utils/secureStorage.ts → dist/chunk-VBXEHIUJ.js} +113 -88
  58. package/dist/{chunk-7QCC6MCP.js.map → chunk-VBXEHIUJ.js.map} +1 -1
  59. package/dist/{chunk-VZ4VDGTB.js → chunk-W22JP75J.js} +5 -13
  60. package/dist/{chunk-VZ4VDGTB.js.map → chunk-W22JP75J.js.map} +1 -1
  61. package/dist/components.d.ts +12 -93
  62. package/dist/components.js +23 -106
  63. package/dist/components.js.map +1 -1
  64. package/dist/core-CUElvH_C.d.ts +164 -0
  65. package/dist/database.generated-CBmg2950.d.ts +8284 -0
  66. package/dist/event-CW5YB_2p.d.ts +239 -0
  67. package/dist/{file-reference-C6Gkn77H.d.ts → file-reference-D06mEEWW.d.ts} +7 -5
  68. package/dist/functions-D_kgHktt.d.ts +208 -0
  69. package/dist/hooks.d.ts +54 -7
  70. package/dist/hooks.js +204 -17
  71. package/dist/hooks.js.map +1 -1
  72. package/dist/{EventLogo-B3V3otev.d.ts → index-Bl--n7-T.d.ts} +387 -397
  73. package/dist/index.d.ts +94 -261
  74. package/dist/index.js +314 -126
  75. package/dist/index.js.map +1 -1
  76. package/dist/providers.d.ts +7 -8
  77. package/dist/providers.js +6 -13
  78. package/dist/rbac/index.d.ts +171 -101
  79. package/dist/rbac/index.js +23 -17
  80. package/dist/styles/index.d.ts +1 -3
  81. package/dist/styles/index.js +2 -17
  82. package/dist/theming/runtime.js +3 -3
  83. package/dist/types-UU913iLA.d.ts +102 -0
  84. package/dist/{types-Dfz9dmVH.d.ts → types-_x1f4QBF.d.ts} +6 -6
  85. package/dist/types.d.ts +88 -227
  86. package/dist/types.js +64 -112
  87. package/dist/types.js.map +1 -1
  88. package/dist/{usePublicRouteParams-B7PabvuH.d.ts → usePublicRouteParams-JJczomYq.d.ts} +203 -6
  89. package/dist/utils.d.ts +299 -13
  90. package/dist/utils.js +481 -55
  91. package/dist/utils.js.map +1 -1
  92. package/dist/validation-643vUDZW.d.ts +177 -0
  93. package/docs/DOCUMENTATION_REVIEW_TRACKER.md +511 -0
  94. package/docs/README.md +9 -8
  95. package/docs/api/README.md +16 -2
  96. package/docs/api/classes/ColumnFactory.md +1 -1
  97. package/docs/api/classes/ErrorBoundary.md +1 -1
  98. package/docs/api/classes/InvalidScopeError.md +4 -4
  99. package/docs/api/classes/MissingUserContextError.md +4 -4
  100. package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
  101. package/docs/api/classes/PermissionDeniedError.md +4 -4
  102. package/docs/api/classes/RBACAuditManager.md +14 -14
  103. package/docs/api/classes/RBACCache.md +1 -1
  104. package/docs/api/classes/RBACEngine.md +2 -2
  105. package/docs/api/classes/RBACError.md +4 -4
  106. package/docs/api/classes/RBACNotInitializedError.md +4 -4
  107. package/docs/api/classes/SecureSupabaseClient.md +29 -9
  108. package/docs/api/classes/StorageUtils.md +1 -1
  109. package/docs/api/enums/FileCategory.md +17 -17
  110. package/docs/api/enums/RBACErrorCode.md +228 -0
  111. package/docs/api/enums/RPCFunction.md +118 -0
  112. package/docs/api/interfaces/AggregateConfig.md +1 -1
  113. package/docs/api/interfaces/BadgeProps.md +1 -1
  114. package/docs/api/interfaces/ButtonProps.md +2 -2
  115. package/docs/api/interfaces/CalendarProps.md +1 -1
  116. package/docs/api/interfaces/CardProps.md +29 -3
  117. package/docs/api/interfaces/ColorPalette.md +1 -1
  118. package/docs/api/interfaces/ColorShade.md +1 -1
  119. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  120. package/docs/api/interfaces/DataRecord.md +1 -1
  121. package/docs/api/interfaces/DataTableAction.md +2 -2
  122. package/docs/api/interfaces/DataTableColumn.md +6 -6
  123. package/docs/api/interfaces/DataTableProps.md +1 -1
  124. package/docs/api/interfaces/DataTableToolbarButton.md +2 -2
  125. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  126. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  127. package/docs/api/interfaces/EventAppRoleData.md +1 -1
  128. package/docs/api/interfaces/ExportColumn.md +5 -5
  129. package/docs/api/interfaces/ExportOptions.md +4 -4
  130. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  131. package/docs/api/interfaces/FileMetadata.md +13 -13
  132. package/docs/api/interfaces/FileReference.md +12 -12
  133. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  134. package/docs/api/interfaces/FileUploadOptions.md +10 -10
  135. package/docs/api/interfaces/FileUploadProps.md +19 -19
  136. package/docs/api/interfaces/FooterProps.md +1 -1
  137. package/docs/api/interfaces/FormFieldProps.md +166 -0
  138. package/docs/api/interfaces/FormProps.md +113 -0
  139. package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
  140. package/docs/api/interfaces/InactivityWarningModalProps.md +8 -8
  141. package/docs/api/interfaces/InputProps.md +2 -2
  142. package/docs/api/interfaces/LabelProps.md +8 -8
  143. package/docs/api/interfaces/LoginFormProps.md +1 -1
  144. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  145. package/docs/api/interfaces/NavigationContextType.md +1 -1
  146. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  147. package/docs/api/interfaces/NavigationItem.md +17 -73
  148. package/docs/api/interfaces/NavigationMenuProps.md +38 -53
  149. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  150. package/docs/api/interfaces/Organisation.md +13 -13
  151. package/docs/api/interfaces/OrganisationContextType.md +21 -21
  152. package/docs/api/interfaces/OrganisationMembership.md +15 -15
  153. package/docs/api/interfaces/OrganisationProviderProps.md +59 -2
  154. package/docs/api/interfaces/OrganisationSecurityError.md +5 -5
  155. package/docs/api/interfaces/PaceAppLayoutProps.md +26 -39
  156. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  157. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  158. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  159. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  160. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  161. package/docs/api/interfaces/PaletteData.md +1 -1
  162. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  163. package/docs/api/interfaces/ProgressProps.md +50 -0
  164. package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
  165. package/docs/api/interfaces/PublicPageFooterProps.md +9 -9
  166. package/docs/api/interfaces/PublicPageHeaderProps.md +10 -10
  167. package/docs/api/interfaces/PublicPageLayoutProps.md +15 -15
  168. package/docs/api/interfaces/RBACAccessValidateParams.md +52 -0
  169. package/docs/api/interfaces/RBACAccessValidateResult.md +41 -0
  170. package/docs/api/interfaces/RBACAuditLogParams.md +85 -0
  171. package/docs/api/interfaces/RBACAuditLogResult.md +52 -0
  172. package/docs/api/interfaces/RBACConfig.md +2 -2
  173. package/docs/api/interfaces/RBACContext.md +52 -0
  174. package/docs/api/interfaces/RBACLogger.md +1 -1
  175. package/docs/api/interfaces/RBACPageAccessCheckParams.md +74 -0
  176. package/docs/api/interfaces/RBACPermissionCheckParams.md +74 -0
  177. package/docs/api/interfaces/RBACPermissionCheckResult.md +52 -0
  178. package/docs/api/interfaces/RBACPermissionsGetParams.md +63 -0
  179. package/docs/api/interfaces/RBACPermissionsGetResult.md +63 -0
  180. package/docs/api/interfaces/RBACResult.md +58 -0
  181. package/docs/api/interfaces/RBACRoleGrantParams.md +63 -0
  182. package/docs/api/interfaces/RBACRoleGrantResult.md +52 -0
  183. package/docs/api/interfaces/RBACRoleRevokeParams.md +63 -0
  184. package/docs/api/interfaces/RBACRoleRevokeResult.md +52 -0
  185. package/docs/api/interfaces/RBACRoleValidateParams.md +52 -0
  186. package/docs/api/interfaces/RBACRoleValidateResult.md +63 -0
  187. package/docs/api/interfaces/RBACRolesListParams.md +52 -0
  188. package/docs/api/interfaces/RBACRolesListResult.md +74 -0
  189. package/docs/api/interfaces/RBACSessionTrackParams.md +74 -0
  190. package/docs/api/interfaces/RBACSessionTrackResult.md +52 -0
  191. package/docs/api/interfaces/ResourcePermissions.md +1 -1
  192. package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
  193. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  194. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  195. package/docs/api/interfaces/RoleManagementResult.md +1 -1
  196. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  197. package/docs/api/interfaces/RouteConfig.md +1 -1
  198. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  199. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  200. package/docs/api/interfaces/SessionRestorationLoaderProps.md +15 -2
  201. package/docs/api/interfaces/StorageConfig.md +1 -1
  202. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  203. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  204. package/docs/api/interfaces/StorageListOptions.md +1 -1
  205. package/docs/api/interfaces/StorageListResult.md +1 -1
  206. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  207. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  208. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  209. package/docs/api/interfaces/StyleImport.md +1 -1
  210. package/docs/api/interfaces/SwitchProps.md +1 -1
  211. package/docs/api/interfaces/TabsContentProps.md +1 -1
  212. package/docs/api/interfaces/TabsListProps.md +1 -1
  213. package/docs/api/interfaces/TabsProps.md +1 -1
  214. package/docs/api/interfaces/TabsTriggerProps.md +43 -2
  215. package/docs/api/interfaces/TextareaProps.md +2 -2
  216. package/docs/api/interfaces/ToastActionElement.md +1 -1
  217. package/docs/api/interfaces/ToastProps.md +1 -1
  218. package/docs/api/interfaces/UnifiedAuthContextType.md +61 -61
  219. package/docs/api/interfaces/UnifiedAuthProviderProps.md +13 -13
  220. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  221. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  222. package/docs/api/interfaces/UsePublicEventLogoOptions.md +87 -0
  223. package/docs/api/interfaces/UsePublicEventLogoReturn.md +81 -0
  224. package/docs/api/interfaces/UsePublicEventOptions.md +3 -3
  225. package/docs/api/interfaces/UsePublicEventReturn.md +5 -5
  226. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +2 -2
  227. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
  228. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  229. package/docs/api/interfaces/UseResolvedScopeOptions.md +2 -2
  230. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  231. package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
  232. package/docs/api/interfaces/UserEventAccess.md +1 -1
  233. package/docs/api/interfaces/UserMenuProps.md +4 -4
  234. package/docs/api/interfaces/UserProfile.md +7 -7
  235. package/docs/api/modules.md +484 -462
  236. package/docs/api-reference/components.md +186 -15
  237. package/docs/api-reference/deprecated.md +376 -0
  238. package/docs/api-reference/hooks.md +149 -19
  239. package/docs/api-reference/providers.md +61 -6
  240. package/docs/api-reference/rpc-functions.md +397 -0
  241. package/docs/api-reference/types.md +135 -78
  242. package/docs/api-reference/utilities.md +51 -380
  243. package/docs/architecture/README.md +49 -3
  244. package/docs/architecture/database-schema-requirements.md +40 -3
  245. package/docs/architecture/rbac-security-architecture.md +41 -4
  246. package/docs/architecture/services.md +127 -42
  247. package/docs/best-practices/README.md +51 -5
  248. package/docs/best-practices/accessibility.md +32 -3
  249. package/docs/best-practices/common-patterns.md +50 -3
  250. package/docs/best-practices/deployment.md +50 -4
  251. package/docs/best-practices/performance.md +50 -3
  252. package/docs/best-practices/security.md +94 -41
  253. package/docs/best-practices/testing.md +33 -4
  254. package/docs/core-concepts/authentication.md +5 -5
  255. package/docs/core-concepts/events.md +3 -3
  256. package/docs/core-concepts/organisations.md +3 -3
  257. package/docs/core-concepts/permissions.md +3 -3
  258. package/docs/core-concepts/rbac-system.md +5 -5
  259. package/docs/documentation-index.md +30 -8
  260. package/docs/getting-started/documentation-index.md +1 -1
  261. package/docs/getting-started/examples/README.md +7 -5
  262. package/docs/getting-started/examples/basic-auth-app.md +3 -0
  263. package/docs/getting-started/examples/full-featured-app.md +5 -3
  264. package/docs/getting-started/faq.md +6 -6
  265. package/docs/getting-started/installation-guide.md +192 -13
  266. package/docs/getting-started/local-development.md +303 -0
  267. package/docs/getting-started/quick-reference.md +3 -3
  268. package/docs/getting-started/quick-start.md +517 -0
  269. package/docs/implementation-guides/app-layout.md +45 -3
  270. package/docs/implementation-guides/authentication.md +66 -7
  271. package/docs/implementation-guides/component-styling.md +53 -3
  272. package/docs/implementation-guides/data-tables.md +76 -7
  273. package/docs/implementation-guides/datatable-filtering.md +1 -2
  274. package/docs/implementation-guides/datatable-rbac-usage.md +0 -1
  275. package/docs/implementation-guides/dynamic-colors.md +155 -4
  276. package/docs/implementation-guides/file-reference-system.md +72 -3
  277. package/docs/implementation-guides/file-upload-storage.md +72 -3
  278. package/docs/implementation-guides/forms.md +53 -3
  279. package/docs/implementation-guides/inactivity-tracking.md +53 -3
  280. package/docs/implementation-guides/large-datasets.md +1 -1
  281. package/docs/implementation-guides/navigation.md +55 -5
  282. package/docs/implementation-guides/organisation-security.md +72 -3
  283. package/docs/implementation-guides/performance.md +57 -1
  284. package/docs/implementation-guides/permission-enforcement.md +81 -8
  285. package/docs/implementation-guides/public-pages.md +560 -14
  286. package/docs/migration/MIGRATION_GUIDE.md +409 -50
  287. package/docs/migration/README.md +37 -3
  288. package/docs/migration/organisation-context-timing-fix.md +39 -4
  289. package/docs/migration/quick-migration-guide.md +41 -5
  290. package/docs/migration/rbac-migration.md +59 -3
  291. package/docs/migration/service-architecture.md +77 -14
  292. package/docs/rbac/README.md +79 -3
  293. package/docs/rbac/advanced-patterns.md +47 -3
  294. package/docs/rbac/api-reference.md +77 -8
  295. package/docs/rbac/event-based-apps.md +50 -5
  296. package/docs/rbac/examples/rbac-rls-integration-example.md +3 -3
  297. package/docs/rbac/examples.md +39 -3
  298. package/docs/rbac/getting-started.md +63 -4
  299. package/docs/rbac/quick-start.md +57 -5
  300. package/docs/rbac/rbac-rls-integration.md +68 -6
  301. package/docs/rbac/super-admin-guide.md +47 -3
  302. package/docs/rbac/troubleshooting.md +3 -3
  303. package/docs/security/README.md +68 -3
  304. package/docs/security/checklist.md +50 -3
  305. package/docs/standards/01-architecture-standard.md +39 -0
  306. package/docs/standards/02-api-and-rpc-standard.md +39 -0
  307. package/docs/standards/03-component-standard.md +32 -0
  308. package/docs/standards/04-code-style-standard.md +32 -0
  309. package/docs/standards/05-security-standard.md +30 -0
  310. package/docs/standards/06-testing-and-docs-standard.md +29 -0
  311. package/docs/standards/README.md +35 -0
  312. package/docs/styles/README.md +89 -8
  313. package/docs/testing/README.md +175 -24
  314. package/docs/troubleshooting/README.md +50 -3
  315. package/docs/troubleshooting/common-issues.md +271 -5
  316. package/docs/troubleshooting/debugging.md +54 -1
  317. package/docs/troubleshooting/migration.md +54 -1
  318. package/docs/troubleshooting/organisation-context-setup.md +29 -3
  319. package/docs/troubleshooting/styling-issues.md +246 -4
  320. package/{src/components/DataTable/examples → examples/DataTable}/GroupingAggregationExample.tsx +1 -1
  321. package/examples/{components 2/DataTable/HierarchicalActionsExample.tsx → DataTable/HierarchicalActionsExample.tsx} +7 -6
  322. package/{src/components/DataTable/examples → examples/DataTable}/HierarchicalExample.tsx +8 -6
  323. package/examples/{components 2/DataTable/PerformanceExample.tsx → DataTable/PerformanceExample.tsx} +2 -2
  324. package/examples/{components 2/DataTable/index.ts → DataTable/index.ts} +1 -0
  325. package/{src/components/Dialog/examples → examples/Dialog}/HtmlDialogExample.tsx +3 -3
  326. package/examples/{components 2/Dialog/ScrollableDialogExample.tsx → Dialog/ScrollableDialogExample.tsx} +1 -1
  327. package/{src/components/Dialog/examples → examples/Dialog}/SmartDialogExample.tsx +1 -1
  328. package/examples/{components 2/Dialog/index.ts → Dialog/index.ts} +0 -3
  329. package/examples/{features/public-pages → PublicPages}/CorrectPublicPageImplementation.tsx +52 -17
  330. package/examples/{features/public-pages → PublicPages}/PublicEventPage.tsx +65 -35
  331. package/examples/{features/public-pages → PublicPages}/PublicPageApp.tsx +52 -18
  332. package/examples/{features/public-pages → PublicPages}/PublicPageUsageExample.tsx +28 -15
  333. package/examples/README.md +81 -33
  334. package/examples/index.ts +14 -12
  335. package/examples/{RBAC → rbac}/CompleteRBACExample.tsx +1 -1
  336. package/examples/{features/rbac → rbac}/EventBasedApp.tsx +4 -4
  337. package/examples/{features/rbac → rbac}/PermissionExample.tsx +5 -3
  338. package/package.json +21 -27
  339. package/src/__tests__/helpers/test-utils.tsx +29 -3
  340. package/src/__tests__/rbac/PagePermissionGuard.test.tsx +7 -5
  341. package/src/components/Alert/Alert.test.tsx +2 -2
  342. package/src/components/Alert/Alert.tsx +4 -4
  343. package/src/components/Avatar/Avatar.test.tsx +17 -6
  344. package/src/components/Badge/Badge.test.tsx +1 -1
  345. package/src/components/Badge/Badge.tsx +2 -2
  346. package/src/components/Button/Button.test.tsx +2 -2
  347. package/src/components/Button/Button.tsx +11 -7
  348. package/src/components/Calendar/Calendar.test.tsx +41 -8
  349. package/src/components/Calendar/Calendar.tsx +39 -36
  350. package/src/components/Card/Card.tsx +51 -13
  351. package/src/components/Checkbox/Checkbox.test.tsx +36 -12
  352. package/src/components/DataTable/DataTable.test.tsx +1 -1
  353. package/src/components/DataTable/__tests__/DataTable.comprehensive.test.tsx +13 -7
  354. package/src/components/DataTable/__tests__/DataTable.default-state.test.tsx +14 -42
  355. package/src/components/DataTable/__tests__/DataTable.export.test.tsx +13 -10
  356. package/src/components/DataTable/__tests__/DataTable.grouping-aggregation.test.tsx +14 -11
  357. package/src/components/DataTable/__tests__/DataTable.hooks.test.tsx +4 -2
  358. package/src/components/DataTable/__tests__/DataTable.test.tsx +13 -7
  359. package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +13 -10
  360. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +15 -11
  361. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +12 -6
  362. package/src/components/DataTable/__tests__/keyboard.test.tsx +12 -6
  363. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +10 -6
  364. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +1 -1
  365. package/src/components/DataTable/components/DataTableBody.tsx +10 -25
  366. package/src/components/DataTable/components/DataTableCore.tsx +1 -1
  367. package/src/components/DataTable/components/FilterRow.tsx +3 -1
  368. package/src/components/DataTable/components/ImportModal.tsx +1 -1
  369. package/src/components/DataTable/components/VirtualizedDataTable.tsx +9 -9
  370. package/src/components/DataTable/core/ColumnFactory.ts +6 -6
  371. package/src/components/DataTable/core/DataTableContext.tsx +14 -10
  372. package/src/components/DataTable/core/LocalDataAdapter.ts +2 -1
  373. package/src/components/DataTable/core/PluginRegistry.ts +3 -3
  374. package/src/components/DataTable/core/StateManager.ts +12 -11
  375. package/src/components/DataTable/core/__tests__/ActionManager.test.ts +104 -0
  376. package/src/components/DataTable/core/__tests__/DataManager.test.ts +101 -0
  377. package/src/components/DataTable/core/__tests__/LocalDataAdapter.test.ts +84 -0
  378. package/src/components/DataTable/core/__tests__/PluginRegistry.test.ts +102 -0
  379. package/src/components/DataTable/core/__tests__/StateManager.test.ts +104 -0
  380. package/src/components/DataTable/core/interfaces.ts +17 -17
  381. package/src/components/DataTable/hooks/__tests__/useDataTableConfiguration.test.ts +124 -0
  382. package/src/components/DataTable/hooks/__tests__/useDataTableDataPipeline.test.ts +117 -0
  383. package/src/components/DataTable/hooks/__tests__/useDataTablePermissions.test.ts +102 -0
  384. package/src/components/DataTable/hooks/__tests__/useEffectiveColumnOrder.test.ts +53 -0
  385. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +0 -2
  386. package/src/components/DataTable/hooks/useDataTablePermissions.ts +9 -8
  387. package/src/components/DataTable/types.ts +5 -5
  388. package/src/components/DataTable/utils/aggregationUtils.ts +4 -4
  389. package/src/components/DataTable/utils/columnUtils.ts +3 -2
  390. package/src/components/DataTable/utils/debugTools.ts +1 -1
  391. package/src/components/DataTable/utils/exportUtils.ts +6 -6
  392. package/src/components/DataTable/utils/hierarchicalSorting.ts +6 -6
  393. package/src/components/DataTable/utils/hierarchicalUtils.ts +0 -8
  394. package/src/components/DataTable/utils/index.ts +0 -1
  395. package/src/components/DataTable/utils/performanceUtils.ts +9 -4
  396. package/src/components/Dialog/Dialog.test.tsx +49 -27
  397. package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +13 -8
  398. package/src/components/EventSelector/EventSelector.test.tsx +60 -12
  399. package/src/components/EventSelector/EventSelector.tsx +38 -15
  400. package/src/components/EventSelector/index.ts +2 -2
  401. package/src/components/FileDisplay/FileDisplay.test.tsx +143 -85
  402. package/src/components/FileDisplay/FileDisplay.tsx +1 -0
  403. package/src/components/FileUpload/FileUpload.test.tsx +532 -152
  404. package/src/components/FileUpload/FileUpload.tsx +43 -8
  405. package/src/components/Footer/Footer.test.tsx +19 -14
  406. package/src/components/Form/Form.test.tsx +96 -14
  407. package/src/components/Form/Form.tsx +210 -1
  408. package/src/components/Form/index.ts +3 -7
  409. package/src/components/Header/Header.test.tsx +24 -17
  410. package/src/components/Header/Header.tsx +3 -1
  411. package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +2 -4
  412. package/src/components/Input/Input.test.tsx +61 -36
  413. package/src/components/Label/{__tests__/Label.test.tsx → Label.test.tsx} +2 -2
  414. package/src/components/Label/Label.tsx +2 -3
  415. package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +6 -5
  416. package/src/components/LoadingSpinner/LoadingSpinner.tsx +6 -2
  417. package/src/components/LoginForm/LoginForm.test.tsx +14 -13
  418. package/src/components/LoginForm/LoginForm.tsx +1 -1
  419. package/src/components/LoginForm/index.ts +7 -0
  420. package/src/components/NavigationMenu/NavigationMenu.test.tsx +233 -20
  421. package/src/components/NavigationMenu/NavigationMenu.tsx +191 -55
  422. package/src/components/NavigationMenu/index.ts +1 -1
  423. package/src/components/OrganisationSelector/OrganisationSelector.test.tsx +20 -11
  424. package/src/components/OrganisationSelector/OrganisationSelector.tsx +1 -1
  425. package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.integration.test.tsx → PaceAppLayout.integration.test.tsx} +272 -79
  426. package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.performance.test.tsx → PaceAppLayout.performance.test.tsx} +155 -32
  427. package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.security.test.tsx → PaceAppLayout.security.test.tsx} +211 -65
  428. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +498 -210
  429. package/src/components/PaceAppLayout/PaceAppLayout.tsx +63 -64
  430. package/src/components/PaceAppLayout/test-setup.tsx +192 -0
  431. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +193 -39
  432. package/src/components/{PasswordReset → PasswordChange}/PasswordChangeForm.test.tsx +2 -2
  433. package/src/components/{PasswordReset → PasswordChange}/PasswordChangeForm.tsx +10 -4
  434. package/src/components/PasswordChange/index.ts +2 -0
  435. package/src/components/Progress/Progress.test.tsx +11 -0
  436. package/src/components/Progress/Progress.tsx +1 -1
  437. package/src/components/Progress/index.ts +10 -0
  438. package/src/components/ProtectedRoute/ProtectedRoute.test.tsx +2 -1
  439. package/src/components/PublicLayout/PublicLayout.test.tsx +1210 -0
  440. package/src/components/PublicLayout/PublicPageLayout.tsx +190 -36
  441. package/src/components/PublicLayout/PublicPageProvider.tsx +8 -7
  442. package/src/components/PublicLayout/index.ts +10 -28
  443. package/src/components/Select/Select.test.tsx +7 -7
  444. package/src/components/Select/Select.tsx +277 -11
  445. package/src/components/Select/index.ts +1 -2
  446. package/src/components/SessionRestorationLoader/SessionRestorationLoader.test.tsx +232 -0
  447. package/src/components/SessionRestorationLoader/SessionRestorationLoader.tsx +40 -19
  448. package/src/components/Table/{__tests__/Table.test.tsx → Table.test.tsx} +94 -41
  449. package/src/components/Tabs/Tabs.test.tsx +10 -9
  450. package/src/components/Tabs/Tabs.tsx +61 -33
  451. package/src/components/Textarea/Textarea.test.tsx +31 -18
  452. package/src/components/Toast/Toast.tsx +2 -2
  453. package/src/components/Tooltip/Tooltip.test.tsx +1 -1
  454. package/src/components/UserMenu/UserMenu.test.tsx +7 -6
  455. package/src/components/UserMenu/UserMenu.tsx +2 -2
  456. package/src/components/index.ts +5 -4
  457. package/src/constants/performance.ts +19 -8
  458. package/src/hooks/__tests__/useAppConfig.unit.test.ts +21 -22
  459. package/src/hooks/__tests__/useEvents.unit.test.ts +5 -4
  460. package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +2 -2
  461. package/src/hooks/__tests__/usePermissionCache.simple.test.ts +17 -0
  462. package/src/hooks/__tests__/usePermissionCache.unit.test.ts +16 -11
  463. package/src/hooks/__tests__/usePublicEvent.simple.test.ts +1 -3
  464. package/src/hooks/__tests__/usePublicEvent.unit.test.ts +1 -3
  465. package/src/hooks/__tests__/useRBAC.unit.test.ts +24 -2
  466. package/src/hooks/index.ts +4 -0
  467. package/src/hooks/public/index.ts +2 -0
  468. package/src/hooks/public/usePublicEvent.ts +4 -6
  469. package/src/hooks/public/usePublicEventLogo.test.ts +147 -0
  470. package/src/hooks/public/usePublicRouteParams.ts +1 -1
  471. package/src/hooks/services/useAuth.ts +2 -4
  472. package/src/hooks/services/useCurrentEvent.ts +1 -1
  473. package/src/hooks/useAppConfig.ts +1 -1
  474. package/src/hooks/useDataTablePerformance.ts +2 -2
  475. package/src/hooks/useEventTheme.ts +1 -1
  476. package/src/hooks/useEvents.ts +51 -10
  477. package/src/hooks/useOrganisationPermissions.test.ts +3 -3
  478. package/src/hooks/useOrganisationPermissions.ts +1 -1
  479. package/src/hooks/useOrganisationSecurity.ts +2 -2
  480. package/src/hooks/usePermissionCache.test.ts +9 -9
  481. package/src/hooks/usePermissionCache.ts +2 -2
  482. package/src/index.ts +19 -12
  483. package/src/providers/OrganisationProvider.tsx +73 -9
  484. package/src/providers/UnifiedAuthProvider.smoke.test.tsx +113 -13
  485. package/src/providers/__tests__/AuthProvider.test.tsx +2 -1
  486. package/src/providers/__tests__/EventProvider.test.tsx +24 -15
  487. package/src/providers/__tests__/OrganisationProvider.test.tsx +87 -36
  488. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +80 -24
  489. package/src/providers/index.ts +0 -3
  490. package/src/providers/services/AuthServiceProvider.tsx +2 -17
  491. package/src/providers/services/EventServiceProvider.tsx +11 -16
  492. package/src/providers/services/InactivityServiceProvider.tsx +9 -12
  493. package/src/providers/services/OrganisationServiceProvider.tsx +9 -12
  494. package/src/providers/services/UnifiedAuthProvider.tsx +85 -18
  495. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +11 -4
  496. package/src/rbac/__tests__/scenarios.user-role.test.tsx +105 -21
  497. package/src/rbac/adapters.tsx +1 -1
  498. package/src/rbac/api.ts +20 -4
  499. package/src/rbac/audit-enhanced.ts +47 -2
  500. package/src/rbac/audit.ts +47 -2
  501. package/src/rbac/components/NavigationGuard.tsx +1 -1
  502. package/src/rbac/components/NavigationProvider.test.tsx +7 -6
  503. package/src/rbac/components/NavigationProvider.tsx +1 -1
  504. package/src/rbac/components/PagePermissionGuard.tsx +1 -1
  505. package/src/rbac/components/PagePermissionProvider.test.tsx +7 -6
  506. package/src/rbac/components/PagePermissionProvider.tsx +1 -1
  507. package/src/rbac/components/PermissionEnforcer.tsx +1 -1
  508. package/src/rbac/components/RoleBasedRouter.tsx +1 -1
  509. package/src/rbac/components/SecureDataProvider.test.tsx +7 -6
  510. package/src/rbac/components/SecureDataProvider.tsx +1 -1
  511. package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +6 -6
  512. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +11 -10
  513. package/src/rbac/components/__tests__/NavigationProvider.test.tsx +10 -11
  514. package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +19 -15
  515. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +13 -12
  516. package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +19 -15
  517. package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +18 -18
  518. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +11 -10
  519. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +8 -7
  520. package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +10 -11
  521. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +48 -19
  522. package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +476 -0
  523. package/src/rbac/hooks/index.ts +3 -0
  524. package/src/rbac/hooks/usePermissions.ts +31 -85
  525. package/src/rbac/hooks/useRBAC.test.ts +13 -1
  526. package/src/rbac/hooks/useRBAC.ts +13 -67
  527. package/src/rbac/hooks/useResolvedScope.ts +11 -0
  528. package/src/rbac/hooks/useSecureSupabase.ts +308 -0
  529. package/src/rbac/index.ts +3 -0
  530. package/src/rbac/secureClient.ts +53 -6
  531. package/src/rbac/security.ts +37 -1
  532. package/src/{types/rbac-functions.ts → rbac/types/functions.ts} +30 -30
  533. package/src/rbac/types.ts +3 -2
  534. package/src/services/AuthService.ts +33 -25
  535. package/src/services/EventService.ts +56 -44
  536. package/src/services/InactivityService.ts +33 -53
  537. package/src/services/OrganisationService.ts +36 -40
  538. package/src/services/__tests__/AuthService.restoreSession.test.ts +6 -2
  539. package/src/services/__tests__/EventService.test.ts +67 -33
  540. package/src/services/interfaces/IEventService.ts +1 -1
  541. package/src/styles/core.css +2 -2
  542. package/src/styles/index.test.ts +21 -0
  543. package/src/styles/index.ts +1 -5
  544. package/src/types/__tests__/guards.test.ts +1 -1
  545. package/src/types/__tests__/organisation.roles.test.ts +55 -0
  546. package/src/types/__tests__/type-validation.test.ts +0 -1
  547. package/src/types/auth.ts +42 -2
  548. package/src/types/core.ts +251 -0
  549. package/src/types/database.ts +11 -496
  550. package/src/types/event.ts +102 -0
  551. package/src/types/file-reference.ts +6 -4
  552. package/src/types/guards.ts +2 -1
  553. package/src/types/index.ts +48 -14
  554. package/src/types/lodash.debounce.d.ts +15 -0
  555. package/src/types/organisation.ts +14 -10
  556. package/src/types/supabase.ts +15 -17
  557. package/src/utils/__tests__/secureErrors.unit.test.ts +1 -1
  558. package/src/utils/__tests__/validationUtils.unit.test.ts +0 -29
  559. package/src/utils/app/appNameResolver.ts +1 -1
  560. package/src/utils/audit/audit.test.ts +65 -0
  561. package/src/utils/device/deviceFingerprint.test.ts +171 -0
  562. package/src/utils/dynamic/dynamicUtils.ts +3 -2
  563. package/src/utils/file-reference/index.ts +25 -6
  564. package/src/utils/security/secureErrors.ts +1 -1
  565. package/src/utils/validation/__tests__/validationUtils.test.ts +72 -0
  566. package/src/utils/validation/index.ts +6 -12
  567. package/src/utils/validation/validationUtils.ts +0 -13
  568. package/dist/UnifiedAuthProvider-B37ATQHE.js +0 -16
  569. package/dist/auth-DReDSLq9.d.ts +0 -16
  570. package/dist/chunk-3JI76CYK.js +0 -2444
  571. package/dist/chunk-3JI76CYK.js.map +0 -1
  572. package/dist/chunk-56XJ3TU6.js +0 -11
  573. package/dist/chunk-56XJ3TU6.js.map +0 -1
  574. package/dist/chunk-5MT24GKJ.js.map +0 -1
  575. package/dist/chunk-7QCC6MCP.js +0 -288
  576. package/dist/chunk-BESYRHQM.js.map +0 -1
  577. package/dist/chunk-BJPBT3CU.js +0 -21
  578. package/dist/chunk-BJPBT3CU.js.map +0 -1
  579. package/dist/chunk-BVYWGZVV.js.map +0 -1
  580. package/dist/chunk-CX5M4ZAG.js.map +0 -1
  581. package/dist/chunk-D7LCGMVS.js.map +0 -1
  582. package/dist/chunk-EGI6MUL6.js +0 -27
  583. package/dist/chunk-EGI6MUL6.js.map +0 -1
  584. package/dist/chunk-ERISIBYU.js.map +0 -1
  585. package/dist/chunk-HRO5HWN2.js.map +0 -1
  586. package/dist/chunk-HZLDFOE4.js.map +0 -1
  587. package/dist/chunk-JISYG63F.js +0 -70
  588. package/dist/chunk-JISYG63F.js.map +0 -1
  589. package/dist/chunk-LIMSTKYD.js +0 -61
  590. package/dist/chunk-LIMSTKYD.js.map +0 -1
  591. package/dist/chunk-OWAG3GSU.js.map +0 -1
  592. package/dist/chunk-PPMP5J6T.js.map +0 -1
  593. package/dist/chunk-Q5QRDWKI.js.map +0 -1
  594. package/dist/chunk-S5OFRT4M.js.map +0 -1
  595. package/dist/chunk-SBVILCCA.js.map +0 -1
  596. package/dist/chunk-TUMEWN34.js +0 -15
  597. package/dist/chunk-TUMEWN34.js.map +0 -1
  598. package/dist/chunk-XDNLUEXI.js +0 -138
  599. package/dist/chunk-XJ2HZOBU.js.map +0 -1
  600. package/dist/chunk-ZYTYSTO5.js.map +0 -1
  601. package/dist/chunk-ZZ2SS7NI.js +0 -237
  602. package/dist/chunk-ZZ2SS7NI.js.map +0 -1
  603. package/dist/database-C6jy7EOu.d.ts +0 -500
  604. package/dist/organisation-D6qRDtbF.d.ts +0 -93
  605. package/dist/schema-DTDZQe2u.d.ts +0 -28
  606. package/dist/unified-DQ4VcT7H.d.ts +0 -198
  607. package/dist/useInactivityTracker-TO6ZOF35.js +0 -11
  608. package/dist/validation.d.ts +0 -47
  609. package/dist/validation.js +0 -24
  610. package/dist/validation.js.map +0 -1
  611. package/docs/DOCUMENTATION_AUDIT.md +0 -172
  612. package/docs/DOCUMENTATION_STANDARD.md +0 -137
  613. package/docs/api/classes/PublicErrorBoundary.md +0 -132
  614. package/docs/api/interfaces/EventLogoProps.md +0 -152
  615. package/docs/api/interfaces/PublicErrorBoundaryProps.md +0 -94
  616. package/docs/api/interfaces/PublicErrorBoundaryState.md +0 -68
  617. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +0 -86
  618. package/docs/architecture/rpc-function-standards.md +0 -1106
  619. package/docs/getting-started/consuming-app-vite-config.md +0 -239
  620. package/docs/implementation-guides/event-theming-summary.md +0 -226
  621. package/docs/implementation-guides/public-pages-advanced.md +0 -1038
  622. package/docs/migration/v0.4.15-tailwind-scanning.md +0 -278
  623. package/docs/migration/v0.4.16-css-first-approach.md +0 -312
  624. package/docs/migration/v0.4.17-source-path-fix.md +0 -235
  625. package/docs/rbac/RBAC_EVENT_CONTEXT_LOADING.md +0 -222
  626. package/docs/rbac/RBAC_LOGIN_SAFETY_FIX.md +0 -95
  627. package/docs/rbac/RBAC_V0.5.147_FIX.md +0 -117
  628. package/docs/rbac/README-rbac-rls-integration.md +0 -374
  629. package/docs/styles/usage.md +0 -227
  630. package/docs/testing/visual-testing.md +0 -120
  631. package/docs/troubleshooting/DEBUG_NETWORK_ERROR.md +0 -152
  632. package/docs/troubleshooting/FIX_SUPABASE_CORS.md +0 -184
  633. package/docs/troubleshooting/cake-page-permission-guard-issue-summary.md +0 -193
  634. package/docs/troubleshooting/database-view-compatibility.md +0 -125
  635. package/docs/troubleshooting/react-hooks-issue-analysis.md +0 -172
  636. package/docs/troubleshooting/tailwind-content-scanning.md +0 -219
  637. package/examples/RBAC/EventBasedApp.tsx +0 -239
  638. package/examples/RBAC/PermissionExample.tsx +0 -151
  639. package/examples/STRUCTURE.md +0 -125
  640. package/examples/components 2/DataTable/HierarchicalExample.tsx +0 -475
  641. package/examples/components 2/Dialog/BasicHtmlTest.tsx +0 -55
  642. package/examples/components 2/Dialog/DebugHtmlExample.tsx +0 -68
  643. package/examples/components 2/Dialog/HtmlDialogExample.tsx +0 -202
  644. package/examples/components 2/Dialog/SimpleHtmlTest.tsx +0 -61
  645. package/examples/components 2/Dialog/SmartDialogExample.tsx +0 -322
  646. package/examples/components 2/index.ts +0 -11
  647. package/examples/features/index.ts +0 -12
  648. package/examples/features/rbac/CompleteRBACExample.tsx +0 -324
  649. package/examples/features/rbac/index.ts +0 -13
  650. package/examples/public-pages/CorrectPublicPageImplementation.tsx +0 -301
  651. package/examples/public-pages/PublicEventPage.tsx +0 -274
  652. package/examples/public-pages/PublicPageApp.tsx +0 -308
  653. package/examples/public-pages/PublicPageUsageExample.tsx +0 -216
  654. package/examples/public-pages/index.ts +0 -14
  655. package/src/__tests__/TEST_STANDARD.md +0 -1008
  656. package/src/components/Checkbox/__mocks__/Checkbox.tsx +0 -2
  657. package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +0 -421
  658. package/src/components/DataTable/examples/InitialPageSizeExample.tsx +0 -177
  659. package/src/components/DataTable/examples/PerformanceExample.tsx +0 -506
  660. package/src/components/DataTable/examples/__tests__/HierarchicalActionsExample.test.tsx +0 -316
  661. package/src/components/DataTable/examples/__tests__/HierarchicalExample.test.tsx +0 -45
  662. package/src/components/DataTable/examples/__tests__/InitialPageSizeExample.test.tsx +0 -211
  663. package/src/components/DataTable/examples/__tests__/PerformanceExample.test.tsx +0 -126
  664. package/src/components/Dialog/README.md +0 -804
  665. package/src/components/Dialog/examples/BasicHtmlTest.tsx +0 -55
  666. package/src/components/Dialog/examples/DebugHtmlExample.tsx +0 -68
  667. package/src/components/Dialog/examples/ScrollableDialogExample.tsx +0 -290
  668. package/src/components/Dialog/examples/SimpleHtmlTest.tsx +0 -61
  669. package/src/components/Dialog/examples/__tests__/HtmlDialogExample.test.tsx +0 -71
  670. package/src/components/Dialog/examples/__tests__/SimpleHtmlTest.test.tsx +0 -122
  671. package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +0 -147
  672. package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +0 -611
  673. package/src/components/Dialog/utils/safeHtml.ts +0 -185
  674. package/src/components/EventSelector/types.ts +0 -79
  675. package/src/components/Form/FormErrorSummary.tsx +0 -113
  676. package/src/components/Form/FormField.tsx +0 -249
  677. package/src/components/Form/FormFieldset.tsx +0 -127
  678. package/src/components/Form/FormLiveRegion.tsx +0 -198
  679. package/src/components/Input/__mocks__/Input.tsx +0 -2
  680. package/src/components/NavigationMenu/types.ts +0 -85
  681. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +0 -326
  682. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +0 -1078
  683. package/src/components/PasswordReset/PasswordResetForm.test.tsx +0 -597
  684. package/src/components/PasswordReset/PasswordResetForm.tsx +0 -201
  685. package/src/components/PasswordReset/index.ts +0 -2
  686. package/src/components/ProtectedRoute/README.md +0 -164
  687. package/src/components/PublicLayout/EventLogo.tsx +0 -175
  688. package/src/components/PublicLayout/PublicErrorBoundary.tsx +0 -282
  689. package/src/components/PublicLayout/PublicLoadingSpinner.tsx +0 -216
  690. package/src/components/PublicLayout/PublicPageContextChecker.tsx +0 -131
  691. package/src/components/PublicLayout/PublicPageDebugger.tsx +0 -104
  692. package/src/components/PublicLayout/PublicPageDiagnostic.tsx +0 -162
  693. package/src/components/PublicLayout/PublicPageFooter.tsx +0 -124
  694. package/src/components/PublicLayout/PublicPageHeader.tsx +0 -209
  695. package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +0 -449
  696. package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +0 -393
  697. package/src/components/PublicLayout/__tests__/PublicPageContextChecker.test.tsx +0 -192
  698. package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +0 -351
  699. package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +0 -402
  700. package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +0 -460
  701. package/src/components/PublicLayout/__tests__/PublicPageProvider.test.tsx +0 -313
  702. package/src/components/Select/hooks.ts +0 -289
  703. package/src/hooks/useCounter.test.ts +0 -131
  704. package/src/hooks/useDebounce.test.ts +0 -375
  705. package/src/providers/AuthProvider.tsx +0 -15
  706. package/src/providers/EventProvider.tsx +0 -16
  707. package/src/providers/InactivityProvider.tsx +0 -15
  708. package/src/providers/OrganisationProvider.context.test.tsx +0 -169
  709. package/src/providers/UnifiedAuthProvider.tsx +0 -15
  710. package/src/types/theme.ts +0 -6
  711. package/src/types/unified.ts +0 -265
  712. package/src/utils/appConfig.ts +0 -47
  713. package/src/utils/appIdResolver.test.ts +0 -499
  714. package/src/utils/appIdResolver.ts +0 -130
  715. package/src/utils/appNameResolver.simple.test.ts +0 -212
  716. package/src/utils/appNameResolver.test.ts +0 -121
  717. package/src/utils/appNameResolver.ts +0 -191
  718. package/src/utils/audit.ts +0 -127
  719. package/src/utils/auth-utils.ts +0 -96
  720. package/src/utils/bundleAnalysis.ts +0 -129
  721. package/src/utils/debugLogger.ts +0 -67
  722. package/src/utils/deviceFingerprint.ts +0 -215
  723. package/src/utils/dynamicUtils.ts +0 -105
  724. package/src/utils/file-reference.test.ts +0 -788
  725. package/src/utils/file-reference.ts +0 -519
  726. package/src/utils/formatDate.test.ts +0 -237
  727. package/src/utils/formatting.ts +0 -170
  728. package/src/utils/lazyLoad.tsx +0 -44
  729. package/src/utils/logger.ts +0 -179
  730. package/src/utils/organisationContext.test.ts +0 -322
  731. package/src/utils/organisationContext.ts +0 -153
  732. package/src/utils/performanceBenchmark.ts +0 -64
  733. package/src/utils/performanceBudgets.ts +0 -110
  734. package/src/utils/permissionTypes.ts +0 -37
  735. package/src/utils/permissionUtils.test.ts +0 -393
  736. package/src/utils/permissionUtils.ts +0 -34
  737. package/src/utils/sanitization.ts +0 -264
  738. package/src/utils/schemaUtils.ts +0 -37
  739. package/src/utils/secureDataAccess.test.ts +0 -711
  740. package/src/utils/secureDataAccess.ts +0 -377
  741. package/src/utils/secureErrors.ts +0 -79
  742. package/src/utils/security.ts +0 -156
  743. package/src/utils/securityMonitor.ts +0 -45
  744. package/src/utils/sessionTracking.ts +0 -126
  745. package/src/utils/validation.ts +0 -111
  746. package/src/utils/validationUtils.ts +0 -120
  747. package/src/validation/index.ts +0 -12
  748. /package/dist/{DataTable-UA6CL4JI.js.map → DataTable-QAB34V6K.js.map} +0 -0
  749. /package/dist/{UnifiedAuthProvider-B37ATQHE.js.map → UnifiedAuthProvider-7F6T4B6K.js.map} +0 -0
  750. /package/dist/{api-45XYYO2A.js.map → api-ROMBCNKU.js.map} +0 -0
  751. /package/dist/{audit-64X3VJXB.js.map → audit-WRS3KJKI.js.map} +0 -0
  752. /package/dist/{chunk-PLDDJCW6.js.map → chunk-7D4SUZUM.js.map} +0 -0
  753. /package/dist/{useInactivityTracker-TO6ZOF35.js.map → chunk-KQCRWDSA.js.map} +0 -0
  754. /package/examples/{components 2/DataTable → DataTable}/InitialPageSizeExample.tsx +0 -0
  755. /package/examples/{features/public-pages → PublicPages}/index.ts +0 -0
  756. /package/examples/{RBAC → rbac}/index.ts +0 -0
@@ -1,804 +0,0 @@
1
- # Dialog Component
2
-
3
- A comprehensive, accessible dialog component system built on top of Radix UI primitives with enhanced features for modern web applications.
4
-
5
- ## Features
6
-
7
- ### 🎯 **Core Features**
8
- - **Semantic HTML Structure** - Uses native `<dialog>` element with proper header, main, footer elements
9
- - **Accessibility First** - WCAG 2.1 AA compliant with full screen reader support
10
- - **Focus Management** - Automatic focus trapping and restoration
11
- - **Keyboard Navigation** - Escape to close, Tab for focus management
12
- - **Responsive Design** - Adapts to all screen sizes with smart constraints
13
-
14
- ### 🚀 **Advanced Features**
15
- - **Smart Height Management** - Automatic viewport-based height constraints
16
- - **Scrollable Content** - Long content scrolls while keeping headers/footers visible
17
- - **Sticky Headers/Footers** - Important UI elements remain accessible during scrolling
18
- - **Multiple Size Variants** - sm, md, lg, xl, full, auto sizing options
19
- - **Custom Dimensions** - Fine-grained control over width and height
20
- - **Configurable Close Behavior** - Control escape key and outside click behavior
21
- - **Smooth Animations** - Polished transitions and micro-interactions
22
- - **HTML Content Rendering** - Safe HTML content with automatic sanitization
23
-
24
- ## Quick Start
25
-
26
- ```tsx
27
- import {
28
- Dialog,
29
- DialogTrigger,
30
- DialogContent,
31
- DialogHeader,
32
- DialogTitle,
33
- DialogDescription,
34
- DialogBody,
35
- DialogFooter,
36
- Button
37
- } from '@jmruthers/pace-core';
38
-
39
- // Basic dialog
40
- <Dialog>
41
- <DialogTrigger asChild>
42
- <Button>Open Dialog</Button>
43
- </DialogTrigger>
44
- <DialogContent size="lg">
45
- <DialogHeader>
46
- <DialogTitle>Edit Profile</DialogTitle>
47
- <DialogDescription>
48
- Make changes to your profile here. Click save when you're done.
49
- </DialogDescription>
50
- </DialogHeader>
51
- <DialogBody>
52
- <section className="space-y-4">
53
- <p>Your content goes here...</p>
54
- </section>
55
- </DialogBody>
56
- <DialogFooter>
57
- <Button variant="outline">Cancel</Button>
58
- <Button>Save changes</Button>
59
- </DialogFooter>
60
- </DialogContent>
61
- </Dialog>
62
- ```
63
-
64
- ## HTML Content Rendering
65
-
66
- The Dialog components support rich HTML content rendering with automatic sanitization. This is perfect for formatted instructions, feature announcements, error details, or any HTML that needs to be displayed in dialogs.
67
-
68
- > **🎯 Key Features:**
69
- > - **Rich HTML Rendering**: Full HTML support with proper styling
70
- > - **Safe Sanitization**: Automatic XSS protection
71
- > - **Prose Styling**: Typography classes for readable content
72
- > - **Fallback Support**: Graceful degradation if HTML fails
73
-
74
- ### Quick Start
75
-
76
- #### Basic HTML Content
77
-
78
- ```tsx
79
- <Dialog>
80
- <DialogContent>
81
- <DialogHeader>
82
- <DialogTitle htmlContent="<h2>Import Instructions</h2>" allowHtml={true} />
83
- </DialogHeader>
84
- <DialogBody
85
- htmlContent="<p>Upload a CSV file with the following format:</p><ul><li>Required columns: name, email</li><li>Optional columns: phone, address</li></ul>"
86
- allowHtml={true}
87
- >
88
- {/* Fallback content if HTML rendering fails */}
89
- <div className="text-acc-500">
90
- HTML content failed to render. This is fallback content.
91
- </div>
92
- </DialogBody>
93
- </DialogContent>
94
- </Dialog>
95
- ```
96
-
97
- #### Rich HTML Content with Styling
98
-
99
- ```tsx
100
- <DialogBody
101
- htmlContent={`
102
- <div class="space-y-4">
103
- <div class="bg-main-50 p-4 rounded-lg">
104
- <h3 class="font-semibold text-main-900 mb-2">📋 Required Format</h3>
105
- <p class="text-sm text-main-800 mb-2">Your CSV file must include these columns:</p>
106
- <ul class="text-sm text-main-700 list-disc list-inside ml-2">
107
- <li><code>name</code> - Full name of the person</li>
108
- <li><code>email</code> - Valid email address</li>
109
- <li><code>phone</code> - Phone number (optional)</li>
110
- </ul>
111
- </div>
112
-
113
- <div class="bg-main-50 p-4 rounded-lg">
114
- <h3 class="font-semibold text-main-900 mb-2">✅ Example Data</h3>
115
- <pre class="text-xs text-main-700 bg-main-50 p-2 rounded border">
116
- name,email,phone
117
- John Doe,john@example.com,555-0123
118
- Jane Smith,jane@example.com,
119
- </pre>
120
- </div>
121
-
122
- <div class="bg-acc-50 p-3 rounded-lg">
123
- <p class="text-sm text-acc-800">
124
- <strong>⚠️ Important:</strong> Make sure your CSV file is properly formatted.
125
- </p>
126
- </div>
127
- </div>
128
- `}
129
- allowHtml={true}
130
- />
131
- ```
132
-
133
- ### Configuration Options
134
-
135
- | Property | Type | Default | Description |
136
- |----------|------|---------|-------------|
137
- | `htmlContent` | `string` | `undefined` | HTML string to render |
138
- | `allowHtml` | `boolean` | `true` | Enable/disable HTML rendering |
139
- | `strictSanitization` | `boolean` | `true` | Use strict HTML sanitization |
140
- | `logWarnings` | `boolean` | `false` | Log sanitization warnings to console |
141
-
142
- ### Supported HTML Elements
143
-
144
- **Allowed HTML Elements:**
145
- - Text formatting: `p`, `div`, `span`, `h1`-`h6`, `strong`, `em`, `b`, `i`, `u`, `s`, `mark`, `small`, `sub`, `sup`
146
- - Lists: `ul`, `ol`, `li`, `dl`, `dt`, `dd`
147
- - Code: `pre`, `code`, `kbd`, `samp`
148
- - Links: `a` (with href validation)
149
- - Tables: `table`, `thead`, `tbody`, `tfoot`, `tr`, `th`, `td`
150
- - Media: `img` (with src validation)
151
- - Layout: `section`, `article`, `aside`, `header`, `footer`, `main`, `nav`
152
- - Interactive: `details`, `summary`
153
-
154
- **Removed Elements:**
155
- - Scripts: `script`, `iframe`, `object`, `embed`
156
- - Forms: `form`, `input`, `button`
157
- - Event handlers: `onclick`, `onload`, etc.
158
- - Dangerous protocols: `javascript:`, `data:`
159
-
160
- ### Styling and Typography
161
-
162
- HTML content is automatically styled with prose classes for optimal readability:
163
-
164
- ```css
165
- /* Applied automatically to HTML content */
166
- .prose {
167
- color: inherit;
168
- max-width: none;
169
- font-size: 0.875rem;
170
- line-height: 1.5;
171
- }
172
-
173
- .prose h1, .prose h2, .prose h3, .prose h4, .prose h5, .prose h6 {
174
- font-weight: 600;
175
- margin-top: 1.5rem;
176
- margin-bottom: 0.5rem;
177
- }
178
-
179
- .prose p {
180
- margin-top: 0.5rem;
181
- margin-bottom: 0.5rem;
182
- }
183
-
184
- .prose ul, .prose ol {
185
- margin-top: 0.5rem;
186
- margin-bottom: 0.5rem;
187
- padding-left: 1.5rem;
188
- }
189
-
190
- .prose code {
191
- background-color: rgb(243 244 246);
192
- padding: 0.125rem 0.25rem;
193
- border-radius: 0.25rem;
194
- font-size: 0.875em;
195
- }
196
-
197
- .prose pre {
198
- background-color: rgb(243 244 246);
199
- padding: 0.75rem;
200
- border-radius: 0.5rem;
201
- overflow-x: auto;
202
- }
203
- ```
204
-
205
- ### Complete Examples
206
-
207
- #### Import Instructions Dialog
208
-
209
- ```tsx
210
- function ImportInstructionsDialog() {
211
- const [isOpen, setIsOpen] = useState(false);
212
-
213
- const importInstructions = `
214
- <div class="space-y-4">
215
- <p class="text-sm text-sec-600 mb-4">
216
- Upload a CSV file with dish or recipe data. The system will automatically detect the format based on your column headers.
217
- </p>
218
-
219
- <div class="bg-main-50 p-4 rounded-lg">
220
- <h3 class="font-semibold text-main-900 mb-2">🍽️ Dish Format (3 columns)</h3>
221
- <p class="text-sm text-main-800 mb-2">Perfect for importing basic dish information:</p>
222
- <div class="space-y-1">
223
- <p class="text-sm"><strong>Required:</strong> <code>dish_code</code>, <code>dish_name</code>, <code>mealtype_name</code></p>
224
- <p class="text-sm"><strong>Optional:</strong> <code>dish_description</code></p>
225
- </div>
226
- <div class="mt-2">
227
- <p class="text-xs text-main-700"><strong>Examples:</strong></p>
228
- <ul class="text-xs text-main-700 list-disc list-inside ml-2">
229
- <li><code>dish_code</code>: BBQ, PC, CTY</li>
230
- <li><code>dish_name</code>: BBQ hamburgers and potato salad</li>
231
- <li><code>mealtype_name</code>: Breakfast, Lunch, Dinner</li>
232
- </ul>
233
- </div>
234
- </div>
235
-
236
- <div class="bg-main-50 p-4 rounded-lg">
237
- <h3 class="font-semibold text-main-900 mb-2">📋 Recipe Format (8 columns)</h3>
238
- <p class="text-sm text-main-800 mb-2">Perfect for importing detailed recipe ingredients:</p>
239
- <div class="space-y-1">
240
- <p class="text-sm"><strong>Required:</strong> <code>dish_code</code>, <code>dish_name</code>, <code>mealtype_name</code>, <code>diettype_name</code>, <code>item_name</code>, <code>recipe_qtypp</code>, <code>recipe_uptake</code></p>
241
- <p class="text-sm"><strong>Optional:</strong> <code>item_brand</code></p>
242
- </div>
243
- <div class="mt-2">
244
- <p class="text-xs text-main-700"><strong>Examples:</strong></p>
245
- <ul class="text-xs text-main-700 list-disc list-inside ml-2">
246
- <li><code>dish_code</code>: BBQ</li>
247
- <li><code>dish_name</code>: BBQ hamburgers and potato salad</li>
248
- <li><code>mealtype_name</code>: Dinner</li>
249
- <li><code>diettype_name</code>: Standard, Gluten Free, Vegan</li>
250
- <li><code>item_name</code>: Lettuce iceberg shredded</li>
251
- <li><code>item_brand</code>: Masterfoods, Coles</li>
252
- <li><code>recipe_qtypp</code>: 35, 1.66</li>
253
- <li><code>recipe_uptake</code>: 1.0, 0.75</li>
254
- </ul>
255
- </div>
256
- </div>
257
-
258
- <div class="bg-acc-50 p-3 rounded-lg">
259
- <p class="text-sm text-acc-800"><strong>⚠️ Important:</strong> Recipe imports will replace all existing recipe data for dishes in the file.</p>
260
- </div>
261
- </div>
262
- `;
263
-
264
- return (
265
- <>
266
- <Button onClick={() => setIsOpen(true)}>
267
- Show Import Instructions
268
- </Button>
269
-
270
- <Dialog open={isOpen} onOpenChange={setIsOpen}>
271
- <DialogContent size="lg">
272
- <DialogHeader>
273
- <DialogTitle htmlContent="<h2>Import Dishes or Recipes</h2>" allowHtml={true} />
274
- </DialogHeader>
275
-
276
- <DialogBody
277
- htmlContent={importInstructions}
278
- allowHtml={true}
279
- strictSanitization={true}
280
- logWarnings={true}
281
- >
282
- {/* Fallback content if HTML rendering fails */}
283
- <div className="text-acc-500">
284
- HTML content failed to render. This is fallback content.
285
- </div>
286
- </DialogBody>
287
-
288
- <DialogFooter>
289
- <Button variant="outline" onClick={() => setIsOpen(false)}>
290
- Cancel
291
- </Button>
292
- <Button onClick={() => setIsOpen(false)}>
293
- Import Data
294
- </Button>
295
- </DialogFooter>
296
- </DialogContent>
297
- </Dialog>
298
- </>
299
- );
300
- }
301
- ```
302
-
303
- ### Mixed Content
304
-
305
- You can mix HTML content with React children:
306
-
307
- ```tsx
308
- <DialogBody>
309
- <div className="space-y-4">
310
- <h3>React Content</h3>
311
- <p>This is rendered using React children.</p>
312
- </div>
313
- <DialogBody
314
- htmlContent="<h3>HTML Content</h3><p>This is rendered from HTML string.</p>"
315
- allowHtml={true}
316
- />
317
- </DialogBody>
318
- ```
319
-
320
- ### Best Practices
321
-
322
- #### 1. HTML Content Structure
323
- - Use semantic HTML elements (`h1`-`h6`, `p`, `ul`, `ol`, etc.)
324
- - Keep content well-structured and accessible
325
- - Use proper heading hierarchy
326
- - Include meaningful alt text for images
327
-
328
- #### 2. Security
329
- - Always use `strictSanitization: true` for user-generated content
330
- - Never trust user input without sanitization
331
- - Test with malicious HTML to ensure proper filtering
332
- - Use `logWarnings: true` in development to catch issues
333
-
334
- #### 3. Styling
335
- - Use Tailwind CSS classes for consistent styling
336
- - Leverage the automatic prose styling
337
- - Test on different screen sizes
338
- - Ensure good contrast and readability
339
-
340
- #### 4. Fallback Content
341
- - Always provide meaningful fallback content
342
- - Test with HTML disabled to ensure graceful degradation
343
- - Use clear error messages for failed rendering
344
-
345
- ### Troubleshooting
346
-
347
- **Common Issues:**
348
-
349
- 1. **HTML not rendering:**
350
- - Check that `allowHtml={true}` is set
351
- - Verify HTML content is valid
352
- - Check console for sanitization warnings
353
- - Ensure content is not empty or undefined
354
-
355
- 2. **Styling not applied:**
356
- - Verify Tailwind CSS classes are available
357
- - Check for CSS conflicts
358
- - Ensure proper class names are used
359
- - Test with browser dev tools
360
-
361
- 3. **Content being stripped:**
362
- - Check sanitization settings
363
- - Verify HTML elements are allowed
364
- - Review console warnings
365
- - Test with simpler HTML first
366
-
367
- **Debug Tips:**
368
- 1. **Enable logging**: Set `logWarnings={true}` to see sanitization warnings
369
- 2. **Test fallback**: Disable `allowHtml` to test fallback content
370
- 3. **Check console**: Look for JavaScript errors or warnings
371
- 4. **Validate HTML**: Use HTML validators to check content
372
- 5. **Test sanitization**: Try with malicious HTML to verify security
373
-
374
- ## API Reference
375
-
376
- ### DialogContent Props
377
-
378
- The main content container with enhanced features:
379
-
380
- ```typescript
381
- interface DialogContentProps {
382
- /** Dialog size variant */
383
- size?: 'sm' | 'md' | 'lg' | 'xl' | 'full' | 'auto';
384
-
385
- /** Whether to show the close button */
386
- showCloseButton?: boolean;
387
-
388
- /** Custom className for the overlay */
389
- overlayClassName?: string;
390
-
391
- /** Whether to prevent closing on escape key */
392
- preventCloseOnEscape?: boolean;
393
-
394
- /** Whether to prevent closing on outside click */
395
- preventCloseOnOutsideClick?: boolean;
396
-
397
- /** Maximum height as percentage of viewport height (0-100) */
398
- maxHeightPercent?: number;
399
-
400
- /** Maximum width as percentage of viewport width (0-100) */
401
- maxWidthPercent?: number;
402
-
403
- /** Enable smart scrolling with sticky header/footer */
404
- enableScrolling?: boolean;
405
-
406
- /** Custom max height in CSS units (overrides maxHeightPercent) */
407
- maxHeight?: string;
408
-
409
- /** Custom max width in CSS units (overrides maxWidthPercent and size) */
410
- maxWidth?: string;
411
-
412
- /** Minimum height in CSS units */
413
- minHeight?: string;
414
-
415
- /** Minimum width in CSS units */
416
- minWidth?: string;
417
- }
418
- ```
419
-
420
- ### DialogHeader Props
421
-
422
- Semantic header container with optional sticky behavior:
423
-
424
- ```typescript
425
- interface DialogHeaderProps {
426
- /** Whether this header should be sticky when scrolling is enabled */
427
- sticky?: boolean;
428
- }
429
- ```
430
-
431
- ### DialogFooter Props
432
-
433
- Semantic footer container with optional sticky behavior:
434
-
435
- ```typescript
436
- interface DialogFooterProps {
437
- /** Whether this footer should be sticky when scrolling is enabled */
438
- sticky?: boolean;
439
- }
440
- ```
441
-
442
- ### DialogBody Props
443
-
444
- Semantic main content area with scrollable functionality and HTML content support:
445
-
446
- ```typescript
447
- interface DialogBodyProps {
448
- /** Custom max height for the scrollable area */
449
- maxHeight?: string;
450
- /** HTML content to render (will be sanitized for security) */
451
- htmlContent?: string;
452
- /** Whether to allow HTML content rendering (default: true) */
453
- allowHtml?: boolean;
454
- /** Whether to use strict HTML sanitization (default: true) */
455
- strictSanitization?: boolean;
456
- /** Whether to log HTML sanitization warnings to console (default: false) */
457
- logWarnings?: boolean;
458
- }
459
- ```
460
-
461
- ### DialogTitle Props
462
-
463
- Dialog title with optional HTML content support:
464
-
465
- ```typescript
466
- interface DialogTitleProps {
467
- /** HTML content to render as title (will be sanitized for security) */
468
- htmlContent?: string;
469
- /** Whether to allow HTML content rendering (default: true) */
470
- allowHtml?: boolean;
471
- }
472
- ```
473
-
474
- ### DialogDescription Props
475
-
476
- Dialog description with optional HTML content support:
477
-
478
- ```typescript
479
- interface DialogDescriptionProps {
480
- /** HTML content to render as description (will be sanitized for security) */
481
- htmlContent?: string;
482
- /** Whether to allow HTML content rendering (default: true) */
483
- allowHtml?: boolean;
484
- }
485
- ```
486
-
487
- ## Examples
488
-
489
- ### Basic Dialog
490
-
491
- ```tsx
492
- <Dialog>
493
- <DialogTrigger asChild>
494
- <Button>Open Dialog</Button>
495
- </DialogTrigger>
496
- <DialogContent size="md">
497
- <DialogHeader>
498
- <DialogTitle>Basic Dialog</DialogTitle>
499
- <DialogDescription>
500
- This is a standard dialog without scrolling enabled.
501
- </DialogDescription>
502
- </DialogHeader>
503
- <DialogBody>
504
- <section className="py-4">
505
- <p>Simple content that fits nicely in the dialog.</p>
506
- </section>
507
- </DialogBody>
508
- <DialogFooter>
509
- <Button variant="outline">Cancel</Button>
510
- <Button>Save</Button>
511
- </DialogFooter>
512
- </DialogContent>
513
- </Dialog>
514
- ```
515
-
516
- ### Scrollable Dialog with Sticky Header/Footer
517
-
518
- ```tsx
519
- <Dialog>
520
- <DialogTrigger asChild>
521
- <Button>Scrollable Dialog</Button>
522
- </DialogTrigger>
523
- <DialogContent
524
- size="lg"
525
- enableScrolling={true}
526
- maxHeightPercent={80}
527
- >
528
- <DialogHeader sticky={true}>
529
- <DialogTitle>Scrollable Dialog</DialogTitle>
530
- <DialogDescription>
531
- This dialog has lots of content and will scroll if needed.
532
- The header stays sticky at the top.
533
- </DialogDescription>
534
- </DialogHeader>
535
- <DialogBody>
536
- <div className="space-y-4">
537
- {Array.from({ length: 50 }, (_, i) => (
538
- <div key={i} className="p-4 border rounded-lg">
539
- <h4>Content Section {i + 1}</h4>
540
- <p>This is content that will scroll...</p>
541
- </div>
542
- ))}
543
- </div>
544
- </DialogBody>
545
- <DialogFooter sticky={true}>
546
- <Button variant="outline">Cancel</Button>
547
- <Button>Save Changes</Button>
548
- </DialogFooter>
549
- </DialogContent>
550
- </Dialog>
551
- ```
552
-
553
- ### Custom Height Dialog
554
-
555
- ```tsx
556
- <Dialog>
557
- <DialogTrigger asChild>
558
- <Button>Custom Height</Button>
559
- </DialogTrigger>
560
- <DialogContent
561
- size="xl"
562
- enableScrolling={true}
563
- maxHeight="400px"
564
- >
565
- <DialogHeader>
566
- <DialogTitle>Custom Height Dialog</DialogTitle>
567
- <DialogDescription>
568
- This dialog has a fixed maximum height of 400px.
569
- </DialogDescription>
570
- </DialogHeader>
571
- <DialogBody>
572
- <div className="space-y-4">
573
- {/* Long content that will scroll */}
574
- </div>
575
- </DialogBody>
576
- <DialogFooter>
577
- <Button>Done</Button>
578
- </DialogFooter>
579
- </DialogContent>
580
- </Dialog>
581
- ```
582
-
583
- ### Auto-Sizing Dialog
584
-
585
- ```tsx
586
- <Dialog>
587
- <DialogTrigger asChild>
588
- <Button>Auto Size</Button>
589
- </DialogTrigger>
590
- <DialogContent size="auto">
591
- <DialogHeader>
592
- <DialogTitle>Auto-Sized Dialog</DialogTitle>
593
- <DialogDescription>
594
- This dialog automatically adjusts its width to fit the content.
595
- </DialogDescription>
596
- </DialogHeader>
597
- <DialogBody>
598
- <section>
599
- <p>Content that determines the dialog width...</p>
600
- </section>
601
- </DialogBody>
602
- </DialogContent>
603
- </Dialog>
604
- ```
605
-
606
- ### Full Screen Dialog
607
-
608
- ```tsx
609
- <Dialog>
610
- <DialogTrigger asChild>
611
- <Button>Full Screen</Button>
612
- </DialogTrigger>
613
- <DialogContent size="full" enableScrolling={true}>
614
- <DialogHeader sticky={true}>
615
- <DialogTitle>Full Screen Dialog</DialogTitle>
616
- <DialogDescription>
617
- This dialog takes up the full screen on mobile and large size on desktop.
618
- </DialogDescription>
619
- </DialogHeader>
620
- <DialogBody>
621
- <div className="space-y-6">
622
- <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
623
- <div className="space-y-4">
624
- <h3>Left Column</h3>
625
- {/* Content */}
626
- </div>
627
- <div className="space-y-4">
628
- <h3>Right Column</h3>
629
- {/* Content */}
630
- </div>
631
- </div>
632
- </div>
633
- </DialogBody>
634
- <DialogFooter sticky={true}>
635
- <Button variant="outline">Cancel</Button>
636
- <Button>Save All Changes</Button>
637
- </DialogFooter>
638
- </DialogContent>
639
- </Dialog>
640
- ```
641
-
642
- ### Dialog with Custom Dimensions
643
-
644
- ```tsx
645
- <Dialog>
646
- <DialogTrigger asChild>
647
- <Button>Custom Dimensions</Button>
648
- </DialogTrigger>
649
- <DialogContent
650
- maxWidth="800px"
651
- maxHeight="600px"
652
- minWidth="400px"
653
- enableScrolling={true}
654
- >
655
- <DialogHeader>
656
- <DialogTitle>Custom Dimensions</DialogTitle>
657
- <DialogDescription>
658
- This dialog has custom width and height constraints.
659
- </DialogDescription>
660
- </DialogHeader>
661
- <DialogBody>
662
- {/* Content */}
663
- </DialogBody>
664
- <DialogFooter>
665
- <Button>Save</Button>
666
- </DialogFooter>
667
- </DialogContent>
668
- </Dialog>
669
- ```
670
-
671
- ### Dialog with Prevented Close Actions
672
-
673
- ```tsx
674
- <Dialog>
675
- <DialogTrigger asChild>
676
- <Button>Important Dialog</Button>
677
- </DialogTrigger>
678
- <DialogContent
679
- size="lg"
680
- preventCloseOnEscape={true}
681
- preventCloseOnOutsideClick={true}
682
- showCloseButton={false}
683
- >
684
- <DialogHeader>
685
- <DialogTitle>Important Action Required</DialogTitle>
686
- <DialogDescription>
687
- This dialog cannot be closed accidentally.
688
- </DialogDescription>
689
- </DialogHeader>
690
- <DialogBody>
691
- <p>Please complete the action below to continue.</p>
692
- </DialogBody>
693
- <DialogFooter>
694
- <Button onClick={() => {/* handle action */}}>
695
- Complete Action
696
- </Button>
697
- </DialogFooter>
698
- </DialogContent>
699
- </Dialog>
700
- ```
701
-
702
- ## Size Variants
703
-
704
- | Size | Max Width | Use Case |
705
- |------|-----------|----------|
706
- | `sm` | 384px | Simple confirmations, alerts |
707
- | `md` | 448px | Standard forms, basic content |
708
- | `lg` | 512px | Complex forms, detailed content |
709
- | `xl` | 576px | Large forms, data tables |
710
- | `full` | 100% | Full screen experiences |
711
- | `auto` | Content-based | Dynamic content sizing |
712
-
713
- ## Accessibility
714
-
715
- ### WCAG 2.1 AA Compliance
716
- - **Semantic HTML** - Uses proper `<dialog>`, `<header>`, `<main>`, `<footer>` elements
717
- - **Focus Management** - Automatic focus trapping and restoration
718
- - **Keyboard Navigation** - Full keyboard support with proper tab order
719
- - **Screen Reader Support** - Complete ARIA attributes and announcements
720
- - **Landmark Navigation** - Proper semantic structure for screen reader navigation
721
-
722
- ### Keyboard Shortcuts
723
- - **Escape** - Close dialog (configurable)
724
- - **Tab** - Navigate through focusable elements
725
- - **Shift + Tab** - Navigate backwards through focusable elements
726
-
727
- ### Screen Reader Features
728
- - Dialog state announcements
729
- - Focus restoration when closed
730
- - Scrollable regions properly announced
731
- - Complete semantic landmark structure
732
-
733
- ## Performance
734
-
735
- ### Optimizations
736
- - **Efficient Focus Management** - Minimal DOM queries and updates
737
- - **Optimized Animations** - Hardware-accelerated transitions
738
- - **Memory Leak Prevention** - Proper cleanup of event listeners
739
- - **Conditional Rendering** - Only renders when needed
740
- - **Optimized Scroll Handling** - Debounced resize events
741
-
742
- ### Best Practices
743
- - Use `enableScrolling={true}` for content that might overflow
744
- - Set appropriate `maxHeightPercent` to prevent viewport overflow
745
- - Use sticky headers/footers for important UI elements
746
- - Consider `size="auto"` for dynamic content
747
-
748
- ## Dependencies
749
-
750
- - **@radix-ui/react-dialog** - Core dialog functionality and accessibility
751
- - **lucide-react** - Close button icon
752
- - **React 18+** - Hooks and refs
753
- - **Tailwind CSS** - Styling and animations
754
-
755
- ## Migration from Basic Dialogs
756
-
757
- If you're upgrading from a basic dialog implementation:
758
-
759
- ```tsx
760
- // Before: Basic dialog
761
- <Dialog>
762
- <DialogTrigger>Open</DialogTrigger>
763
- <DialogContent>
764
- <DialogTitle>Title</DialogTitle>
765
- <div>Content</div>
766
- <DialogFooter>Actions</DialogFooter>
767
- </DialogContent>
768
- </Dialog>
769
-
770
- // After: Enhanced dialog with semantic structure
771
- <Dialog>
772
- <DialogTrigger asChild>
773
- <Button>Open</Button>
774
- </DialogTrigger>
775
- <DialogContent size="lg" enableScrolling={true}>
776
- <DialogHeader>
777
- <DialogTitle>Title</DialogTitle>
778
- <DialogDescription>Description</DialogDescription>
779
- </DialogHeader>
780
- <DialogBody>
781
- <section>Content</section>
782
- </DialogBody>
783
- <DialogFooter>
784
- Actions
785
- </DialogFooter>
786
- </DialogContent>
787
- </Dialog>
788
- ```
789
-
790
- ## Troubleshooting
791
-
792
- ### Common Issues
793
-
794
- 1. **Content not scrolling** - Ensure `enableScrolling={true}` is set
795
- 2. **Header/footer not sticky** - Add `sticky={true}` to header/footer props
796
- 3. **Dialog too tall** - Use `maxHeightPercent` or `maxHeight` props
797
- 4. **Focus issues** - Ensure proper semantic structure with DialogBody
798
-
799
- ### Debug Tips
800
-
801
- - Use browser dev tools to inspect the semantic structure
802
- - Test with keyboard navigation
803
- - Verify screen reader announcements
804
- - Check responsive behavior at different screen sizes