@jmruthers/pace-core 0.4.1 → 0.5.3

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 (660) hide show
  1. package/CHANGELOG.md +26 -1
  2. package/README.md +231 -229
  3. package/dist/{DataTable-2LB6HI6V.js → DataTable-ZQDRE46Q.js} +15 -17
  4. package/dist/{DataTable-BDBqkU-i.d.ts → DataTable-ltTFXHS3.d.ts} +25 -51
  5. package/dist/{Table-CIm9IWqk.d.ts → PublicLoadingSpinner-Bq_-BeK-.d.ts} +635 -122
  6. package/dist/{UnifiedAuthProvider-V7y63NjT.d.ts → RBACProvider-BO4ilsQB.d.ts} +11 -36
  7. package/dist/UnifiedAuthProvider-DGQsy-vY.d.ts +103 -0
  8. package/dist/{api-AIJ3IJX3.js → api-H5A3H4IR.js} +6 -4
  9. package/dist/{appConfig-fB1pP_v3.d.ts → appConfig-BVGyuvI7.d.ts} +1 -1
  10. package/dist/appNameResolver-7GHF5ED2.js +22 -0
  11. package/dist/{audit-PD5L5ZSC.js → audit-BUW3LMJB.js} +3 -3
  12. package/dist/chunk-5H3C2SWM.js +3293 -0
  13. package/dist/chunk-5H3C2SWM.js.map +1 -0
  14. package/dist/chunk-5SIXIV7R.js +1925 -0
  15. package/dist/chunk-5SIXIV7R.js.map +1 -0
  16. package/dist/{chunk-YNU5QJ4S.js → chunk-7BNPOCLL.js} +22 -5
  17. package/dist/chunk-7BNPOCLL.js.map +1 -0
  18. package/dist/{chunk-4ZTIEYU2.js → chunk-CDQ3PX7L.js} +1 -1
  19. package/dist/chunk-CDQ3PX7L.js.map +1 -0
  20. package/dist/chunk-GNTALZV3.js +17 -0
  21. package/dist/chunk-GNTALZV3.js.map +1 -0
  22. package/dist/chunk-GWSBHC4J.js +1349 -0
  23. package/dist/chunk-GWSBHC4J.js.map +1 -0
  24. package/dist/{chunk-JUUNUW3O.js → chunk-HD7PYDUV.js} +14 -5
  25. package/dist/chunk-HD7PYDUV.js.map +1 -0
  26. package/dist/{chunk-H4PZ4B3Y.js → chunk-HXX35Q2M.js} +113 -27
  27. package/dist/chunk-HXX35Q2M.js.map +1 -0
  28. package/dist/chunk-K6B7BLSE.js +388 -0
  29. package/dist/chunk-K6B7BLSE.js.map +1 -0
  30. package/dist/chunk-M4RW7PIP.js +5441 -0
  31. package/dist/chunk-M4RW7PIP.js.map +1 -0
  32. package/dist/chunk-MZBUOP4P.js +119 -0
  33. package/dist/chunk-MZBUOP4P.js.map +1 -0
  34. package/dist/chunk-N2EUGZRW.js +98 -0
  35. package/dist/chunk-N2EUGZRW.js.map +1 -0
  36. package/dist/chunk-NQ4TOOO6.js +20 -0
  37. package/dist/chunk-NQ4TOOO6.js.map +1 -0
  38. package/dist/{chunk-DC5AMYBS.js → chunk-PLDDJCW6.js} +15 -5
  39. package/dist/chunk-PLDDJCW6.js.map +1 -0
  40. package/dist/{chunk-IOX76PSM.js → chunk-PVMYVQSM.js} +270 -28
  41. package/dist/chunk-PVMYVQSM.js.map +1 -0
  42. package/dist/{chunk-4MCJAK7J.js → chunk-QKHFMQ5R.js} +2155 -4853
  43. package/dist/chunk-QKHFMQ5R.js.map +1 -0
  44. package/dist/chunk-QVYBYGT2.js +428 -0
  45. package/dist/chunk-QVYBYGT2.js.map +1 -0
  46. package/dist/{chunk-WHLSWC6W.js → chunk-SS3E6QLB.js} +16 -61
  47. package/dist/chunk-SS3E6QLB.js.map +1 -0
  48. package/dist/chunk-WJARTBCT.js +128 -0
  49. package/dist/chunk-WJARTBCT.js.map +1 -0
  50. package/dist/chunk-YDJW5XTN.js +84 -0
  51. package/dist/chunk-YDJW5XTN.js.map +1 -0
  52. package/dist/components.d.ts +907 -10
  53. package/dist/components.js +3237 -204
  54. package/dist/components.js.map +1 -1
  55. package/dist/{database-CAMsquLm.d.ts → database-C3Szpi5J.d.ts} +28 -11
  56. package/dist/hooks.d.ts +7 -6
  57. package/dist/hooks.js +33 -11
  58. package/dist/hooks.js.map +1 -1
  59. package/dist/index.d.ts +247 -111
  60. package/dist/index.js +330 -185
  61. package/dist/index.js.map +1 -1
  62. package/dist/{organisation-DLNNQhPB.d.ts → organisation-CO3Sh3_D.d.ts} +1 -1
  63. package/dist/providers.d.ts +5 -4
  64. package/dist/providers.js +14 -5
  65. package/dist/rbac/index.d.ts +964 -839
  66. package/dist/rbac/index.js +58 -1970
  67. package/dist/rbac/index.js.map +1 -1
  68. package/dist/styles/core.css +364 -0
  69. package/dist/styles/fonts/georama-italic.woff2 +0 -0
  70. package/dist/styles/fonts/georama.woff2 +0 -0
  71. package/dist/styles/fonts/open-sans-italic.woff2 +0 -0
  72. package/dist/styles/fonts/open-sans.woff2 +0 -0
  73. package/dist/styles/fonts/reddit-mono.woff2 +0 -0
  74. package/dist/styles/index.d.ts +36 -0
  75. package/dist/styles/index.js +24 -0
  76. package/dist/styles/index.js.map +1 -0
  77. package/dist/theming/runtime.d.ts +73 -0
  78. package/dist/theming/runtime.js +16 -0
  79. package/dist/theming/runtime.js.map +1 -0
  80. package/dist/{types-Bavn44NW.d.ts → types-BRDU7N6w.d.ts} +79 -33
  81. package/dist/types.d.ts +5 -5
  82. package/dist/types.js +7 -2
  83. package/dist/types.js.map +1 -1
  84. package/dist/{unified-BtRpPbmp.d.ts → unified-CMPjE_fv.d.ts} +0 -1
  85. package/dist/usePublicRouteParams-B2OcAsur.d.ts +477 -0
  86. package/dist/utils.d.ts +83 -60
  87. package/dist/utils.js +293 -55651
  88. package/dist/utils.js.map +1 -1
  89. package/dist/validation.d.ts +1 -1
  90. package/dist/validation.js +1 -1
  91. package/docs/INDEX.md +192 -0
  92. package/docs/README.md +46 -32
  93. package/docs/api/README.md +231 -229
  94. package/docs/api/classes/ErrorBoundary.md +1 -1
  95. package/docs/api/classes/InvalidScopeError.md +73 -0
  96. package/docs/api/classes/MissingUserContextError.md +66 -0
  97. package/docs/api/classes/OrganisationContextRequiredError.md +66 -0
  98. package/docs/api/classes/PermissionDeniedError.md +73 -0
  99. package/docs/api/classes/PublicErrorBoundary.md +132 -0
  100. package/docs/api/classes/RBACAuditManager.md +270 -0
  101. package/docs/api/classes/RBACCache.md +284 -0
  102. package/docs/api/classes/RBACEngine.md +141 -0
  103. package/docs/api/classes/RBACError.md +76 -0
  104. package/docs/api/classes/RBACNotInitializedError.md +66 -0
  105. package/docs/api/classes/SecureSupabaseClient.md +135 -0
  106. package/docs/api/interfaces/AggregateConfig.md +4 -4
  107. package/docs/api/interfaces/ButtonProps.md +2 -2
  108. package/docs/api/interfaces/CardProps.md +2 -2
  109. package/docs/api/interfaces/ColorPalette.md +1 -1
  110. package/docs/api/interfaces/ColorShade.md +1 -1
  111. package/docs/api/interfaces/DataAccessRecord.md +96 -0
  112. package/docs/api/interfaces/DataTableAction.md +98 -7
  113. package/docs/api/interfaces/DataTableColumn.md +131 -12
  114. package/docs/api/interfaces/DataTableProps.md +77 -274
  115. package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
  116. package/docs/api/interfaces/EmptyStateConfig.md +5 -5
  117. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +235 -0
  118. package/docs/api/interfaces/EventContextType.md +7 -7
  119. package/docs/api/interfaces/EventLogoProps.md +152 -0
  120. package/docs/api/interfaces/EventProviderProps.md +2 -2
  121. package/docs/api/interfaces/FileSizeLimits.md +7 -0
  122. package/docs/api/interfaces/FileUploadProps.md +154 -0
  123. package/docs/api/interfaces/FooterProps.md +1 -1
  124. package/docs/api/interfaces/InactivityWarningModalProps.md +115 -0
  125. package/docs/api/interfaces/InputProps.md +2 -2
  126. package/docs/api/interfaces/LabelProps.md +1 -1
  127. package/docs/api/interfaces/LoginFormProps.md +1 -1
  128. package/docs/api/interfaces/NavigationAccessRecord.md +107 -0
  129. package/docs/api/interfaces/NavigationContextType.md +164 -0
  130. package/docs/api/interfaces/NavigationGuardProps.md +139 -0
  131. package/docs/api/interfaces/NavigationItem.md +1 -1
  132. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  133. package/docs/api/interfaces/NavigationProviderProps.md +117 -0
  134. package/docs/api/interfaces/Organisation.md +1 -1
  135. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  136. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  137. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  138. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  139. package/docs/api/interfaces/PaceAppLayoutProps.md +26 -26
  140. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  141. package/docs/api/interfaces/PageAccessRecord.md +85 -0
  142. package/docs/api/interfaces/PagePermissionContextType.md +140 -0
  143. package/docs/api/interfaces/PagePermissionGuardProps.md +153 -0
  144. package/docs/api/interfaces/PagePermissionProviderProps.md +119 -0
  145. package/docs/api/interfaces/PaletteData.md +1 -1
  146. package/docs/api/interfaces/PermissionEnforcerProps.md +153 -0
  147. package/docs/api/interfaces/PublicErrorBoundaryProps.md +94 -0
  148. package/docs/api/interfaces/PublicErrorBoundaryState.md +68 -0
  149. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +86 -0
  150. package/docs/api/interfaces/PublicPageFooterProps.md +112 -0
  151. package/docs/api/interfaces/PublicPageHeaderProps.md +138 -0
  152. package/docs/api/interfaces/PublicPageLayoutProps.md +138 -0
  153. package/docs/api/interfaces/RBACConfig.md +99 -0
  154. package/docs/api/interfaces/RBACContextType.md +474 -0
  155. package/docs/api/interfaces/RBACLogger.md +112 -0
  156. package/docs/api/interfaces/RBACProviderProps.md +107 -0
  157. package/docs/api/interfaces/RoleBasedRouterContextType.md +151 -0
  158. package/docs/api/interfaces/RoleBasedRouterProps.md +156 -0
  159. package/docs/api/interfaces/RouteAccessRecord.md +107 -0
  160. package/docs/api/interfaces/RouteConfig.md +121 -0
  161. package/docs/api/interfaces/SecureDataContextType.md +168 -0
  162. package/docs/api/interfaces/SecureDataProviderProps.md +132 -0
  163. package/docs/api/interfaces/StorageConfig.md +41 -0
  164. package/docs/api/interfaces/StorageFileInfo.md +74 -0
  165. package/docs/api/interfaces/StorageFileMetadata.md +140 -0
  166. package/docs/api/interfaces/StorageListOptions.md +86 -0
  167. package/docs/api/interfaces/StorageListResult.md +41 -0
  168. package/docs/api/interfaces/StorageUploadOptions.md +88 -0
  169. package/docs/api/interfaces/StorageUploadResult.md +63 -0
  170. package/docs/api/interfaces/StorageUrlOptions.md +47 -0
  171. package/docs/api/interfaces/StyleImport.md +2 -2
  172. package/docs/api/interfaces/ToastActionElement.md +1 -1
  173. package/docs/api/interfaces/ToastProps.md +1 -1
  174. package/docs/api/interfaces/UnifiedAuthContextType.md +465 -64
  175. package/docs/api/interfaces/UnifiedAuthProviderProps.md +95 -9
  176. package/docs/api/interfaces/UseInactivityTrackerOptions.md +136 -0
  177. package/docs/api/interfaces/UseInactivityTrackerReturn.md +123 -0
  178. package/docs/api/interfaces/UsePublicEventLogoOptions.md +87 -0
  179. package/docs/api/interfaces/UsePublicEventLogoReturn.md +81 -0
  180. package/docs/api/interfaces/UsePublicEventOptions.md +34 -0
  181. package/docs/api/interfaces/UsePublicEventReturn.md +68 -0
  182. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +94 -0
  183. package/docs/api/interfaces/UserEventAccess.md +14 -14
  184. package/docs/api/interfaces/UserMenuProps.md +6 -6
  185. package/docs/api/interfaces/UserProfile.md +1 -1
  186. package/docs/api/modules.md +4233 -1134
  187. package/docs/api-reference/components.md +761 -43
  188. package/docs/api-reference/hooks.md +126 -0
  189. package/docs/api-reference/providers.md +141 -65
  190. package/docs/api-reference/types.md +66 -36
  191. package/docs/api-reference/utilities.md +1 -1
  192. package/docs/architecture/README.md +1 -2
  193. package/docs/best-practices/README.md +400 -0
  194. package/docs/consuming-app-example.md +42 -96
  195. package/docs/consuming-app-vite-config.md +233 -0
  196. package/docs/core-concepts/events.md +3 -3
  197. package/docs/core-concepts/organisations.md +0 -1
  198. package/docs/core-concepts/rbac-system.md +23 -10
  199. package/docs/documentation-style-checklist.md +8 -2
  200. package/docs/examples/navigation-menu-auth-fix.md +344 -0
  201. package/docs/getting-started/examples/README.md +15 -1
  202. package/docs/getting-started/examples/basic-auth-app.md +444 -119
  203. package/docs/getting-started/examples/full-featured-app.md +6 -6
  204. package/docs/getting-started/installation.md +231 -52
  205. package/docs/getting-started/quick-start.md +121 -24
  206. package/docs/implementation-guides/app-layout.md +133 -108
  207. package/docs/implementation-guides/data-tables.md +1011 -29
  208. package/docs/implementation-guides/forms.md +3 -3
  209. package/docs/implementation-guides/hierarchical-datatable.md +850 -0
  210. package/docs/implementation-guides/large-datasets.md +2 -2
  211. package/docs/implementation-guides/navigation.md +1 -1
  212. package/docs/implementation-guides/permission-enforcement.md +4 -4
  213. package/docs/implementation-guides/public-pages.md +752 -0
  214. package/docs/migration/README.md +18 -8
  215. package/docs/migration/quick-migration-guide.md +320 -0
  216. package/docs/migration/rbac-migration.md +50 -0
  217. package/docs/migration/v0.4.15-tailwind-scanning.md +272 -0
  218. package/docs/migration/v0.4.16-css-first-approach.md +306 -0
  219. package/docs/migration/v0.4.17-source-path-fix.md +229 -0
  220. package/docs/migration-guide.md +77 -105
  221. package/docs/performance/README.md +1 -4
  222. package/docs/print-components/README.md +258 -0
  223. package/docs/print-components/api-reference.md +636 -0
  224. package/docs/print-components/examples/README.md +204 -0
  225. package/docs/print-components/examples/basic-report.tsx +92 -0
  226. package/docs/print-components/examples/card-catalog.tsx +149 -0
  227. package/docs/print-components/examples/cover-page-report.tsx +163 -0
  228. package/docs/print-components/quick-start.md +363 -0
  229. package/docs/quick-reference.md +53 -36
  230. package/docs/rbac/README.md +136 -69
  231. package/docs/rbac/api-reference.md +39 -8
  232. package/docs/rbac/examples.md +237 -66
  233. package/docs/rbac/getting-started.md +131 -16
  234. package/docs/rbac/quick-start.md +499 -323
  235. package/docs/rbac/troubleshooting.md +240 -262
  236. package/docs/security/README.md +50 -1
  237. package/docs/styles/README.md +226 -111
  238. package/docs/testing/README.md +6 -10
  239. package/docs/troubleshooting/README.md +497 -0
  240. package/docs/troubleshooting/common-issues.md +604 -14
  241. package/docs/troubleshooting/styling-issues.md +219 -0
  242. package/docs/troubleshooting/tailwind-content-scanning.md +213 -0
  243. package/docs/usage.md +54 -91
  244. package/docs/visual-testing.md +0 -7
  245. package/package.json +47 -25
  246. package/src/__mocks__/lucide-react.ts +181 -0
  247. package/src/__tests__/REBUILD_PLAN.md +223 -0
  248. package/src/__tests__/TESTING_GUIDELINES.md +341 -0
  249. package/src/__tests__/fixtures/mocks.ts +93 -0
  250. package/src/__tests__/helpers/component-test-utils.tsx +145 -0
  251. package/src/__tests__/helpers/test-utils.tsx +117 -0
  252. package/src/__tests__/integration/UserProfile.test.tsx +128 -0
  253. package/src/__tests__/setup.ts +71 -0
  254. package/src/__tests__/templates/accessibility.test.template.tsx +279 -0
  255. package/src/__tests__/templates/component.test.template.tsx +144 -0
  256. package/src/__tests__/templates/hook.test.template.ts +173 -0
  257. package/src/__tests__/templates/integration.test.template.tsx +199 -0
  258. package/src/__tests__/types/test.types.ts +106 -0
  259. package/src/components/Alert/Alert.test.tsx +496 -0
  260. package/src/components/Alert/Alert.tsx +134 -0
  261. package/src/components/Alert/index.ts +2 -0
  262. package/src/components/Avatar/Avatar.test.tsx +484 -0
  263. package/src/components/Avatar/Avatar.tsx +84 -0
  264. package/src/components/Avatar/index.ts +2 -0
  265. package/src/components/Button/Button.test.tsx +662 -0
  266. package/src/components/Button/Button.tsx +270 -0
  267. package/src/components/Button/index.ts +2 -0
  268. package/src/components/Card/Card.test.tsx +593 -0
  269. package/src/components/Card/Card.tsx +271 -0
  270. package/src/components/Card/index.ts +1 -0
  271. package/src/components/Checkbox/Checkbox.test.tsx +461 -0
  272. package/src/components/Checkbox/Checkbox.tsx +75 -0
  273. package/src/components/Checkbox/__mocks__/Checkbox.tsx +2 -0
  274. package/src/components/Checkbox/index.ts +2 -0
  275. package/src/components/DataTable/DataTable.tsx +446 -0
  276. package/src/components/DataTable/__tests__/README.md +145 -0
  277. package/src/components/DataTable/__tests__/mocks/MockRBACProvider.tsx +66 -0
  278. package/src/components/DataTable/__tests__/test-utils/dataFactories.ts +103 -0
  279. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +381 -0
  280. package/src/components/DataTable/__tests__/test-utils.ts +94 -0
  281. package/src/components/DataTable/components/AccessDeniedPage.tsx +168 -0
  282. package/src/components/DataTable/components/ActionButtons.tsx +194 -0
  283. package/src/components/DataTable/components/BulkOperationsDropdown.tsx +160 -0
  284. package/src/components/DataTable/components/ColumnFilter.tsx +114 -0
  285. package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +100 -0
  286. package/src/components/DataTable/components/DataTableBody.tsx +461 -0
  287. package/src/components/DataTable/components/DataTableCore.tsx +1027 -0
  288. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +214 -0
  289. package/src/components/DataTable/components/DataTableModals.tsx +87 -0
  290. package/src/components/DataTable/components/DataTableToolbar.tsx +262 -0
  291. package/src/components/DataTable/components/DraggableColumnHeader.tsx +144 -0
  292. package/src/components/DataTable/components/EditableRow.tsx +159 -0
  293. package/src/components/DataTable/components/EmptyState.tsx +64 -0
  294. package/src/components/DataTable/components/ExpandButton.tsx +113 -0
  295. package/src/components/DataTable/components/FilterRow.tsx +100 -0
  296. package/src/components/DataTable/components/GroupHeader.tsx +42 -0
  297. package/src/components/DataTable/components/GroupingDropdown.tsx +96 -0
  298. package/src/components/DataTable/components/ImportModal.tsx +345 -0
  299. package/src/components/DataTable/components/LoadingState.tsx +12 -0
  300. package/src/components/DataTable/components/PaginationControls.tsx +332 -0
  301. package/src/components/DataTable/components/UnifiedTableBody.tsx +742 -0
  302. package/src/components/DataTable/components/ViewRowModal.tsx +68 -0
  303. package/src/components/DataTable/components/VirtualizedDataTable.tsx +513 -0
  304. package/src/components/DataTable/components/index.ts +16 -0
  305. package/src/components/DataTable/context/DataTableContext.tsx +97 -0
  306. package/src/components/DataTable/core/ActionManager.ts +235 -0
  307. package/src/components/DataTable/core/ColumnFactory.ts +268 -0
  308. package/src/components/DataTable/core/ColumnManager.ts +205 -0
  309. package/src/components/DataTable/core/DataManager.ts +188 -0
  310. package/src/components/DataTable/core/DataTableContext.tsx +181 -0
  311. package/src/components/DataTable/core/LocalDataAdapter.ts +264 -0
  312. package/src/components/DataTable/core/PluginRegistry.ts +229 -0
  313. package/src/components/DataTable/core/StateManager.ts +311 -0
  314. package/src/components/DataTable/core/index.ts +8 -0
  315. package/src/components/DataTable/core/interfaces.ts +338 -0
  316. package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +419 -0
  317. package/src/components/DataTable/examples/HierarchicalExample.tsx +475 -0
  318. package/src/components/DataTable/examples/InitialPageSizeExample.tsx +176 -0
  319. package/src/components/DataTable/examples/PerformanceExample.tsx +505 -0
  320. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +95 -0
  321. package/src/components/DataTable/hooks/useColumnReordering.ts +110 -0
  322. package/src/components/DataTable/hooks/useDataTableState.ts +325 -0
  323. package/src/components/DataTable/hooks/useHierarchicalState.ts +174 -0
  324. package/src/components/DataTable/index.ts +68 -0
  325. package/src/components/DataTable/styles.ts +171 -0
  326. package/src/components/DataTable/types.ts +511 -0
  327. package/src/components/DataTable/utils/debugTools.ts +583 -0
  328. package/src/components/DataTable/utils/errorHandling.ts +494 -0
  329. package/src/components/DataTable/utils/exportUtils.ts +126 -0
  330. package/src/components/DataTable/utils/flexibleImport.ts +510 -0
  331. package/src/components/DataTable/utils/hierarchicalSorting.ts +151 -0
  332. package/src/components/DataTable/utils/hierarchicalUtils.ts +218 -0
  333. package/src/components/DataTable/utils/index.ts +1 -0
  334. package/src/components/DataTable/utils/performanceUtils.ts +351 -0
  335. package/src/components/Dialog/Dialog.test.tsx +1139 -0
  336. package/src/components/Dialog/Dialog.tsx +782 -0
  337. package/src/components/Dialog/README.md +804 -0
  338. package/src/components/Dialog/examples/BasicHtmlTest.tsx +55 -0
  339. package/src/components/Dialog/examples/DebugHtmlExample.tsx +68 -0
  340. package/src/components/Dialog/examples/HtmlDialogExample.tsx +202 -0
  341. package/src/components/Dialog/examples/SimpleHtmlTest.tsx +61 -0
  342. package/src/components/Dialog/examples/SmartDialogExample.tsx +322 -0
  343. package/src/components/Dialog/index.ts +12 -0
  344. package/src/components/Dialog/utils/safeHtml.ts +185 -0
  345. package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +752 -0
  346. package/src/components/ErrorBoundary/ErrorBoundary.tsx +312 -0
  347. package/src/components/ErrorBoundary/index.ts +8 -0
  348. package/src/components/EventSelector/EventSelector.tsx +360 -0
  349. package/src/components/EventSelector/index.ts +3 -0
  350. package/src/components/EventSelector/types.ts +79 -0
  351. package/src/components/FileUpload/FileUpload.example.tsx +218 -0
  352. package/src/components/FileUpload/FileUpload.test.tsx +665 -0
  353. package/src/components/FileUpload/FileUpload.tsx +237 -0
  354. package/src/components/FileUpload/index.ts +6 -0
  355. package/src/components/Footer/Footer.test.tsx +482 -0
  356. package/src/components/Footer/Footer.tsx +197 -0
  357. package/src/components/Footer/index.ts +17 -0
  358. package/src/components/Form/Form.test.tsx +1158 -0
  359. package/src/components/Form/Form.tsx +166 -0
  360. package/src/components/Form/FormErrorSummary.tsx +113 -0
  361. package/src/components/Form/FormField.tsx +249 -0
  362. package/src/components/Form/FormFieldset.tsx +127 -0
  363. package/src/components/Form/FormLiveRegion.tsx +198 -0
  364. package/src/components/Form/index.ts +26 -0
  365. package/src/components/Header/Header.test.tsx +582 -0
  366. package/src/components/Header/Header.tsx +301 -0
  367. package/src/components/Header/index.ts +4 -0
  368. package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +489 -0
  369. package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +164 -0
  370. package/src/components/InactivityWarningModal/index.ts +9 -0
  371. package/src/components/Input/Input.test.tsx +466 -0
  372. package/src/components/Input/Input.tsx +201 -0
  373. package/src/components/Input/__mocks__/Input.tsx +2 -0
  374. package/src/components/Input/index.ts +9 -0
  375. package/src/components/Label/Label.tsx +186 -0
  376. package/src/components/Label/index.ts +2 -0
  377. package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +450 -0
  378. package/src/components/LoadingSpinner/LoadingSpinner.tsx +98 -0
  379. package/src/components/LoadingSpinner/index.ts +3 -0
  380. package/src/components/LoginForm/LoginForm.test.tsx +816 -0
  381. package/src/components/LoginForm/LoginForm.tsx +273 -0
  382. package/src/components/LoginForm/index.ts +3 -0
  383. package/src/components/NavigationMenu/NavigationMenu.test.tsx +883 -0
  384. package/src/components/NavigationMenu/NavigationMenu.tsx +698 -0
  385. package/src/components/NavigationMenu/index.ts +10 -0
  386. package/src/components/NavigationMenu/types.ts +85 -0
  387. package/src/components/OrganisationSelector/OrganisationSelector.test.tsx +748 -0
  388. package/src/components/OrganisationSelector/OrganisationSelector.tsx +304 -0
  389. package/src/components/OrganisationSelector/index.ts +9 -0
  390. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +891 -0
  391. package/src/components/PaceAppLayout/PaceAppLayout.tsx +699 -0
  392. package/src/components/PaceAppLayout/README.md +278 -0
  393. package/src/components/PaceAppLayout/index.ts +1 -0
  394. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +475 -0
  395. package/src/components/PaceLoginPage/PaceLoginPage.tsx +221 -0
  396. package/src/components/PaceLoginPage/index.ts +1 -0
  397. package/src/components/PasswordReset/PasswordChangeForm.test.tsx +621 -0
  398. package/src/components/PasswordReset/PasswordChangeForm.tsx +186 -0
  399. package/src/components/PasswordReset/PasswordResetForm.test.tsx +605 -0
  400. package/src/components/PasswordReset/PasswordResetForm.tsx +201 -0
  401. package/src/components/PasswordReset/index.ts +4 -0
  402. package/src/components/PrintButton/PrintButton.tsx +321 -0
  403. package/src/components/PrintButton/PrintButtonGroup.tsx +84 -0
  404. package/src/components/PrintButton/PrintToolbar.tsx +94 -0
  405. package/src/components/PrintButton/examples/PrintButtonShowcase.tsx +438 -0
  406. package/src/components/PrintButton/index.ts +33 -0
  407. package/src/components/PrintButton/types.ts +173 -0
  408. package/src/components/PrintCard/PrintCard.tsx +154 -0
  409. package/src/components/PrintCard/PrintCardContent.tsx +57 -0
  410. package/src/components/PrintCard/PrintCardFooter.tsx +60 -0
  411. package/src/components/PrintCard/PrintCardGrid.tsx +91 -0
  412. package/src/components/PrintCard/PrintCardHeader.tsx +78 -0
  413. package/src/components/PrintCard/PrintCardImage.tsx +81 -0
  414. package/src/components/PrintCard/examples/PrintCardShowcase.tsx +239 -0
  415. package/src/components/PrintCard/index.ts +34 -0
  416. package/src/components/PrintCard/types.ts +171 -0
  417. package/src/components/PrintDataTable/PrintDataTable.tsx +215 -0
  418. package/src/components/PrintDataTable/PrintTableGroup.tsx +90 -0
  419. package/src/components/PrintDataTable/PrintTableRow.tsx +76 -0
  420. package/src/components/PrintDataTable/index.ts +25 -0
  421. package/src/components/PrintDataTable/types.ts +67 -0
  422. package/src/components/PrintFooter/PrintFooter.tsx +183 -0
  423. package/src/components/PrintFooter/PrintFooterContent.tsx +71 -0
  424. package/src/components/PrintFooter/PrintFooterInfo.tsx +86 -0
  425. package/src/components/PrintFooter/PrintPageNumber.tsx +90 -0
  426. package/src/components/PrintFooter/examples/PrintFooterShowcase.tsx +390 -0
  427. package/src/components/PrintFooter/index.ts +30 -0
  428. package/src/components/PrintFooter/types.ts +149 -0
  429. package/src/components/PrintGrid/PrintGrid.tsx +180 -0
  430. package/src/components/PrintGrid/PrintGridBreakpoint.tsx +109 -0
  431. package/src/components/PrintGrid/PrintGridContainer.tsx +128 -0
  432. package/src/components/PrintGrid/PrintGridItem.tsx +220 -0
  433. package/src/components/PrintGrid/examples/PrintGridShowcase.tsx +359 -0
  434. package/src/components/PrintGrid/index.ts +31 -0
  435. package/src/components/PrintGrid/types.ts +159 -0
  436. package/src/components/PrintHeader/PrintCoverHeader.tsx +230 -0
  437. package/src/components/PrintHeader/PrintHeader.tsx +150 -0
  438. package/src/components/PrintHeader/index.ts +17 -0
  439. package/src/components/PrintHeader/types.ts +42 -0
  440. package/src/components/PrintLayout/PrintLayout.tsx +122 -0
  441. package/src/components/PrintLayout/PrintLayoutContext.tsx +66 -0
  442. package/src/components/PrintLayout/PrintPageBreak.tsx +52 -0
  443. package/src/components/PrintLayout/examples/PrintShowcase.tsx +230 -0
  444. package/src/components/PrintLayout/index.ts +19 -0
  445. package/src/components/PrintLayout/types.ts +37 -0
  446. package/src/components/PrintPageBreak/PrintPageBreak.tsx +120 -0
  447. package/src/components/PrintPageBreak/PrintPageBreakGroup.tsx +90 -0
  448. package/src/components/PrintPageBreak/PrintPageBreakIndicator.tsx +112 -0
  449. package/src/components/PrintPageBreak/examples/PrintPageBreakShowcase.tsx +279 -0
  450. package/src/components/PrintPageBreak/index.ts +23 -0
  451. package/src/components/PrintPageBreak/types.ts +94 -0
  452. package/src/components/PrintSection/PrintColumn.tsx +104 -0
  453. package/src/components/PrintSection/PrintDivider.tsx +101 -0
  454. package/src/components/PrintSection/PrintSection.tsx +129 -0
  455. package/src/components/PrintSection/PrintSectionContent.tsx +75 -0
  456. package/src/components/PrintSection/PrintSectionHeader.tsx +97 -0
  457. package/src/components/PrintSection/examples/PrintSectionShowcase.tsx +258 -0
  458. package/src/components/PrintSection/index.ts +33 -0
  459. package/src/components/PrintSection/types.ts +155 -0
  460. package/src/components/PrintText/PrintText.tsx +116 -0
  461. package/src/components/PrintText/index.ts +16 -0
  462. package/src/components/PrintText/types.ts +24 -0
  463. package/src/components/Progress/Progress.tsx +116 -0
  464. package/src/components/Progress/index.ts +3 -0
  465. package/src/components/PublicLayout/EventLogo.tsx +287 -0
  466. package/src/components/PublicLayout/PublicErrorBoundary.tsx +279 -0
  467. package/src/components/PublicLayout/PublicLoadingSpinner.tsx +208 -0
  468. package/src/components/PublicLayout/PublicPageContextChecker.tsx +130 -0
  469. package/src/components/PublicLayout/PublicPageDebugger.tsx +104 -0
  470. package/src/components/PublicLayout/PublicPageDiagnostic.tsx +162 -0
  471. package/src/components/PublicLayout/PublicPageFooter.tsx +124 -0
  472. package/src/components/PublicLayout/PublicPageHeader.tsx +178 -0
  473. package/src/components/PublicLayout/PublicPageLayout.tsx +232 -0
  474. package/src/components/PublicLayout/PublicPageProvider.tsx +137 -0
  475. package/src/components/PublicLayout/index.ts +51 -0
  476. package/src/components/Select/Select.test.tsx +948 -0
  477. package/src/components/Select/Select.tsx +660 -0
  478. package/src/components/Select/index.ts +1 -0
  479. package/src/components/SuperAdminGuard.tsx +116 -0
  480. package/src/components/Table/Table.tsx +222 -0
  481. package/src/components/Table/index.ts +11 -0
  482. package/src/components/Toast/Toast.test.tsx +586 -0
  483. package/src/components/Toast/Toast.tsx +339 -0
  484. package/src/components/Toast/index.ts +14 -0
  485. package/src/components/Tooltip/Tooltip.test.tsx +852 -0
  486. package/src/components/Tooltip/Tooltip.tsx +167 -0
  487. package/src/components/Tooltip/index.ts +7 -0
  488. package/src/components/UserMenu/UserMenu.test.tsx +702 -0
  489. package/src/components/UserMenu/UserMenu.tsx +243 -0
  490. package/src/components/UserMenu/index.ts +3 -0
  491. package/src/components/examples/PermissionExample.tsx +150 -0
  492. package/src/components/index.ts +434 -0
  493. package/src/components.ts +19 -0
  494. package/src/constants/performance.ts +14 -0
  495. package/src/examples/CorrectPublicPageImplementation.tsx +301 -0
  496. package/src/examples/PublicEventPage.tsx +274 -0
  497. package/src/examples/PublicPageApp.tsx +308 -0
  498. package/src/examples/PublicPageUsageExample.tsx +216 -0
  499. package/src/hooks/index.ts +56 -0
  500. package/src/hooks/public/index.ts +34 -0
  501. package/src/hooks/public/usePublicEvent.ts +261 -0
  502. package/src/hooks/public/usePublicEventLogo.ts +285 -0
  503. package/src/hooks/public/usePublicRouteParams.ts +259 -0
  504. package/src/hooks/useAppConfig.ts +94 -0
  505. package/src/hooks/useComponentPerformance.ts +39 -0
  506. package/src/hooks/useCounter.test.ts +135 -0
  507. package/src/hooks/useDataTablePerformance.ts +387 -0
  508. package/src/hooks/useDataTableState.ts +110 -0
  509. package/src/hooks/useDebounce.test.ts +375 -0
  510. package/src/hooks/useDebounce.ts +18 -0
  511. package/src/hooks/useFocusManagement.ts +161 -0
  512. package/src/hooks/useFocusTrap.ts +155 -0
  513. package/src/hooks/useInactivityTracker.ts +372 -0
  514. package/src/hooks/useIsMobile.ts +42 -0
  515. package/src/hooks/useKeyboardShortcuts.ts +237 -0
  516. package/src/hooks/useOrganisationPermissions.test.ts +528 -0
  517. package/src/hooks/useOrganisationPermissions.ts +208 -0
  518. package/src/hooks/useOrganisationSecurity.test.ts +734 -0
  519. package/src/hooks/useOrganisationSecurity.ts +262 -0
  520. package/src/hooks/usePerformanceMonitor.ts +128 -0
  521. package/src/hooks/usePermissionCache.test.ts +542 -0
  522. package/src/hooks/usePermissionCache.ts +455 -0
  523. package/src/hooks/useSecureDataAccess.ts +586 -0
  524. package/src/hooks/useStorage.ts +274 -0
  525. package/src/hooks/useToast.ts +242 -0
  526. package/src/hooks/useZodForm.ts +28 -0
  527. package/src/index.ts +199 -0
  528. package/src/providers/AuthProvider.tsx +369 -0
  529. package/src/providers/EventProvider.tsx +324 -0
  530. package/src/providers/InactivityProvider.tsx +238 -0
  531. package/src/providers/OrganisationProvider.tsx +588 -0
  532. package/src/providers/UnifiedAuthProvider.tsx +327 -0
  533. package/src/providers/index.ts +17 -0
  534. package/src/rbac/README.md +885 -0
  535. package/src/rbac/__tests__/integration.test.tsx +218 -0
  536. package/src/rbac/adapters.tsx +726 -0
  537. package/src/rbac/api.test.ts +441 -0
  538. package/src/rbac/api.ts +339 -0
  539. package/src/rbac/audit-enhanced.ts +339 -0
  540. package/src/rbac/audit.ts +338 -0
  541. package/src/rbac/cache.ts +215 -0
  542. package/src/rbac/components/EnhancedNavigationMenu.tsx +294 -0
  543. package/src/rbac/components/NavigationGuard.tsx +294 -0
  544. package/src/rbac/components/NavigationProvider.tsx +314 -0
  545. package/src/rbac/components/PagePermissionGuard.tsx +430 -0
  546. package/src/rbac/components/PagePermissionProvider.tsx +274 -0
  547. package/src/rbac/components/PermissionEnforcer.tsx +307 -0
  548. package/src/rbac/components/RoleBasedRouter.tsx +425 -0
  549. package/src/rbac/components/SecureDataProvider.tsx +319 -0
  550. package/src/rbac/components/index.ts +64 -0
  551. package/src/rbac/config.ts +133 -0
  552. package/src/rbac/docs/event-based-apps.md +285 -0
  553. package/src/rbac/engine.ts +1026 -0
  554. package/src/rbac/eslint-rules.js +285 -0
  555. package/src/rbac/examples/CompleteRBACExample.tsx +323 -0
  556. package/src/rbac/examples/EventBasedApp.tsx +238 -0
  557. package/src/rbac/hooks/index.ts +21 -0
  558. package/src/rbac/hooks/useCan.test.ts +461 -0
  559. package/src/rbac/hooks/usePermissions.test.ts +359 -0
  560. package/src/rbac/hooks/usePermissions.ts +567 -0
  561. package/src/rbac/hooks/useRBAC.simple.test.ts +90 -0
  562. package/src/rbac/hooks/useRBAC.test.ts +503 -0
  563. package/src/rbac/hooks/useRBAC.ts +262 -0
  564. package/src/rbac/index.ts +109 -0
  565. package/src/rbac/permissions.ts +293 -0
  566. package/src/rbac/providers/RBACProvider.tsx +634 -0
  567. package/src/rbac/providers/__tests__/RBACProvider.test.tsx +687 -0
  568. package/src/rbac/providers/index.ts +11 -0
  569. package/src/rbac/secureClient.ts +244 -0
  570. package/src/rbac/security.ts +346 -0
  571. package/src/rbac/testing/index.tsx +340 -0
  572. package/src/rbac/types.ts +343 -0
  573. package/src/rbac/utils/eventContext.ts +83 -0
  574. package/src/styles/core.css +364 -0
  575. package/src/styles/index.ts +51 -0
  576. package/src/theming/runtime.ts +187 -0
  577. package/src/types/database.ts +472 -0
  578. package/src/types/guards.ts +30 -0
  579. package/src/types/index.ts +25 -0
  580. package/src/types/organisation.ts +184 -0
  581. package/src/types/security.ts +70 -0
  582. package/src/types/supabase.ts +166 -0
  583. package/src/types/theme.ts +6 -0
  584. package/src/types/unified.ts +262 -0
  585. package/src/types/validation.ts +164 -0
  586. package/src/types/vitest-globals.d.ts +43 -0
  587. package/src/utils/__mocks__/supabaseMock.ts +75 -0
  588. package/src/utils/__mocks__/supabaseMock.tsx +198 -0
  589. package/src/utils/appConfig.ts +47 -0
  590. package/src/utils/appIdResolver.ts +130 -0
  591. package/src/utils/appNameResolver.ts +190 -0
  592. package/src/utils/audit.ts +127 -0
  593. package/src/utils/auth-utils.ts +96 -0
  594. package/src/utils/bundleAnalysis.ts +129 -0
  595. package/src/utils/cn.ts +7 -0
  596. package/src/utils/debugLogger.ts +46 -0
  597. package/src/utils/deviceFingerprint.ts +215 -0
  598. package/src/utils/dynamicUtils.ts +105 -0
  599. package/src/utils/formatDate.test.ts +241 -0
  600. package/src/utils/formatting.ts +77 -0
  601. package/src/utils/index.ts +145 -0
  602. package/src/utils/lazyLoad.tsx +44 -0
  603. package/src/utils/organisationContext.ts +135 -0
  604. package/src/utils/performanceBenchmark.ts +64 -0
  605. package/src/utils/performanceBudgets.ts +111 -0
  606. package/src/utils/permissionTypes.ts +37 -0
  607. package/src/utils/permissionUtils.ts +31 -0
  608. package/src/utils/print/PrintDataProcessor.ts +390 -0
  609. package/src/utils/print/examples/PrintUtilitiesShowcase.tsx +397 -0
  610. package/src/utils/print/index.ts +29 -0
  611. package/src/utils/print/types.ts +196 -0
  612. package/src/utils/print/usePrintOptimization.ts +272 -0
  613. package/src/utils/sanitization.ts +264 -0
  614. package/src/utils/schemaUtils.ts +37 -0
  615. package/src/utils/secureDataAccess.ts +361 -0
  616. package/src/utils/secureErrors.ts +79 -0
  617. package/src/utils/secureStorage.ts +244 -0
  618. package/src/utils/security.ts +156 -0
  619. package/src/utils/securityMonitor.ts +45 -0
  620. package/src/utils/sessionTracking.ts +170 -0
  621. package/src/utils/storage/README.md +348 -0
  622. package/src/utils/storage/config.ts +100 -0
  623. package/src/utils/storage/helpers.ts +359 -0
  624. package/src/utils/storage/index.ts +36 -0
  625. package/src/utils/storage/types.ts +90 -0
  626. package/src/utils/validation.ts +111 -0
  627. package/src/utils/validationUtils.ts +120 -0
  628. package/src/validation/common.ts +53 -0
  629. package/src/validation/csrf.ts +214 -0
  630. package/src/validation/index.ts +43 -0
  631. package/src/validation/passwordSchema.ts +125 -0
  632. package/src/validation/sanitization.ts +96 -0
  633. package/src/validation/schemaUtils.ts +42 -0
  634. package/src/validation/sqlInjectionProtection.ts +242 -0
  635. package/src/validation/user.ts +34 -0
  636. package/dist/chunk-4MCJAK7J.js.map +0 -1
  637. package/dist/chunk-4ZTIEYU2.js.map +0 -1
  638. package/dist/chunk-H4PZ4B3Y.js.map +0 -1
  639. package/dist/chunk-IOX76PSM.js.map +0 -1
  640. package/dist/chunk-JUUNUW3O.js.map +0 -1
  641. package/dist/chunk-KK6WIDK6.js +0 -63
  642. package/dist/chunk-KK6WIDK6.js.map +0 -1
  643. package/dist/chunk-U7DY5T33.js +0 -11
  644. package/dist/chunk-U7DY5T33.js.map +0 -1
  645. package/dist/chunk-WHLSWC6W.js.map +0 -1
  646. package/dist/chunk-XI7QFSSC.js +0 -790
  647. package/dist/chunk-XI7QFSSC.js.map +0 -1
  648. package/dist/chunk-XIJMMBDD.js +0 -73
  649. package/dist/chunk-XIJMMBDD.js.map +0 -1
  650. package/dist/chunk-YNU5QJ4S.js.map +0 -1
  651. package/dist/chunk-YWYCNGWH.js +0 -2070
  652. package/dist/chunk-YWYCNGWH.js.map +0 -1
  653. package/dist/chunk-ZJ3UKPIW.js +0 -952
  654. package/dist/chunk-ZJ3UKPIW.js.map +0 -1
  655. package/dist/useAppConfig-CZNJJsT_.d.ts +0 -148
  656. package/dist/{DataTable-2LB6HI6V.js.map → DataTable-ZQDRE46Q.js.map} +0 -0
  657. package/dist/{api-AIJ3IJX3.js.map → api-H5A3H4IR.js.map} +0 -0
  658. package/dist/{audit-PD5L5ZSC.js.map → appNameResolver-7GHF5ED2.js.map} +0 -0
  659. package/dist/{chunk-DC5AMYBS.js.map → audit-BUW3LMJB.js.map} +0 -0
  660. package/dist/{validation-D2-NNCCE.d.ts → validation-PM_iOaTI.d.ts} +6 -6
@@ -225,8 +225,8 @@ export function DashboardPage() {
225
225
  return (
226
226
  <div className="p-6">
227
227
  <div className="mb-8">
228
- <h1 className="text-3xl font-bold text-gray-900">Dashboard</h1>
229
- <p className="text-gray-600 mt-2">
228
+ <h1 className="text-3xl font-bold text-sec-900">Dashboard</h1>
229
+ <p className="text-sec-600 mt-2">
230
230
  Welcome back, {user?.email}. Here's what's happening with your meals.
231
231
  </p>
232
232
  </div>
@@ -238,7 +238,7 @@ export function DashboardPage() {
238
238
  </CardHeader>
239
239
  <CardContent>
240
240
  <p className="text-3xl font-bold">{mealsLoading ? '...' : totalMeals}</p>
241
- <p className="text-sm text-gray-600">All time</p>
241
+ <p className="text-sm text-sec-600">All time</p>
242
242
  </CardContent>
243
243
  </Card>
244
244
 
@@ -248,7 +248,7 @@ export function DashboardPage() {
248
248
  </CardHeader>
249
249
  <CardContent>
250
250
  <p className="text-3xl font-bold">{mealsLoading ? '...' : thisWeekMeals}</p>
251
- <p className="text-sm text-gray-600">Last 7 days</p>
251
+ <p className="text-sm text-sec-600">Last 7 days</p>
252
252
  </CardContent>
253
253
  </Card>
254
254
 
@@ -258,7 +258,7 @@ export function DashboardPage() {
258
258
  </CardHeader>
259
259
  <CardContent>
260
260
  <p className="text-3xl font-bold">{usersLoading ? '...' : totalUsers}</p>
261
- <p className="text-sm text-gray-600">Active users</p>
261
+ <p className="text-sm text-sec-600">Active users</p>
262
262
  </CardContent>
263
263
  </Card>
264
264
  </div>
@@ -269,7 +269,7 @@ export function DashboardPage() {
269
269
  <CardTitle>Recent Activity</CardTitle>
270
270
  </CardHeader>
271
271
  <CardContent>
272
- <p className="text-gray-600">
272
+ <p className="text-sec-600">
273
273
  Your meal tracking activity will appear here.
274
274
  </p>
275
275
  </CardContent>
@@ -1,90 +1,269 @@
1
- # Installation & Setup
1
+ # Complete Installation Guide
2
2
 
3
- Get PACE Core up and running in your project in under 5 minutes.
3
+ This is the definitive guide for installing and configuring pace-core in your application. Follow these steps exactly to ensure proper styling and functionality.
4
4
 
5
- ## Prerequisites
5
+ ## 🚨 Critical Requirements
6
6
 
7
- - Node.js 18+ and npm/yarn/pnpm
8
- - React 18+ project (Next.js, Create React App, Vite, etc.)
9
- - Supabase project (free tier works great)
7
+ **IMPORTANT**: Pace-core requires specific configuration to work properly. Without following these steps exactly, components will be unstyled and the UI will be severely compromised.
10
8
 
11
- ## Quick Installation
9
+ ## Step 1: Install Dependencies
12
10
 
13
- ### 1. Install Dependencies
11
+ ### Required Packages
14
12
 
15
13
  ```bash
16
- npm install @jmruthers/pace-core @supabase/supabase-js
17
- npm install -D tailwindcss @types/react @types/react-dom
14
+ # Install pace-core and all required peer dependencies
15
+ npm install @jmruthers/pace-core @tanstack/react-table @radix-ui/react-checkbox @radix-ui/react-dialog @radix-ui/react-dropdown-menu @radix-ui/react-label @radix-ui/react-slot lucide-react class-variance-authority clsx tailwind-merge
16
+
17
+ # Install Tailwind CSS v4 and Vite plugin (REQUIRED)
18
+ npm install -D @tailwindcss/vite tailwindcss@^4.0.0
18
19
  ```
19
20
 
20
- ### 2. Configure Tailwind CSS
21
+ ### Optional Packages (for full functionality)
21
22
 
22
23
  ```bash
23
- npx tailwindcss init
24
+ # For authentication and database
25
+ npm install @supabase/supabase-js
26
+
27
+ # For routing
28
+ npm install react-router-dom
29
+
30
+ # For TypeScript support
31
+ npm install -D @types/react @types/react-dom
24
32
  ```
25
33
 
26
- Update your `tailwind.config.js`:
34
+ ## Step 2: Configure Vite with Tailwind v4
35
+
36
+ **⚠️ CRITICAL**: This configuration is essential for pace-core components to be styled correctly.
27
37
 
28
- ```js
29
- /** @type {import('tailwindcss').Config} */
30
- module.exports = {
31
- content: [
32
- './src/**/*.{js,ts,jsx,tsx}',
33
- './node_modules/@jmruthers/pace-core/**/*.{js,ts,jsx,tsx}',
38
+ Create or update your `vite.config.ts`:
39
+
40
+ ```typescript
41
+ // vite.config.ts
42
+ import { defineConfig } from 'vite'
43
+ import react from '@vitejs/plugin-react'
44
+ import tailwindcss from '@tailwindcss/vite'
45
+ import path from 'path'
46
+
47
+ export default defineConfig({
48
+ plugins: [
49
+ react(),
50
+ tailwindcss({
51
+ // CRITICAL: Include pace-core components for scanning
52
+ content: [
53
+ './src/**/*.{js,ts,jsx,tsx}',
54
+ './node_modules/@jmruthers/pace-core/**/*.{js,ts,jsx,tsx}'
55
+ ]
56
+ })
34
57
  ],
35
- theme: {
36
- extend: {},
58
+ resolve: {
59
+ alias: {
60
+ "@": path.resolve(__dirname, "./src"),
61
+ },
37
62
  },
38
- plugins: [],
39
- }
63
+ server: {
64
+ port: 3000,
65
+ open: true,
66
+ },
67
+ build: {
68
+ outDir: 'dist',
69
+ sourcemap: true,
70
+ },
71
+ })
40
72
  ```
41
73
 
42
- ### 3. Set Up Environment Variables
74
+ ### Why This Configuration is Critical
43
75
 
44
- Create `.env.local` (or `.env` for Create React App):
76
+ Pace-core components contain Tailwind classes that must be scanned during the build process. Without this configuration:
45
77
 
46
- ```bash
47
- # Supabase Configuration
48
- NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
49
- NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key-here
78
+ - ❌ Component styles will be missing or broken
79
+ - Colors, spacing, and typography won't work
80
+ - ❌ The UI will be severely compromised
81
+ - ❌ The entire point of using this UI library is undermined
82
+
83
+ ### Alternative Configuration (if needed)
84
+
85
+ If you're still having issues with component scanning:
50
86
 
51
- # For Create React App, use REACT_APP_ prefix:
52
- # REACT_APP_SUPABASE_URL=https://your-project.supabase.co
53
- # REACT_APP_SUPABASE_ANON_KEY=your-anon-key-here
87
+ ```typescript
88
+ // vite.config.ts
89
+ import { defineConfig } from 'vite'
90
+ import react from '@vitejs/plugin-react'
91
+ import tailwindcss from '@tailwindcss/vite'
92
+
93
+ export default defineConfig({
94
+ plugins: [
95
+ react(),
96
+ tailwindcss({
97
+ content: {
98
+ files: [
99
+ './src/**/*.{js,ts,jsx,tsx}',
100
+ './node_modules/@jmruthers/pace-core/**/*.{js,ts,jsx,tsx}',
101
+ './node_modules/@jmruthers/pace-core/dist/**/*.{js,ts,jsx,tsx}'
102
+ ]
103
+ }
104
+ })
105
+ ],
106
+ })
54
107
  ```
55
108
 
56
- ### 4. Basic Provider Setup
109
+ ## Step 3: Import Core Styles
110
+
111
+ **CRITICAL**: Import the CSS file in your main entry point:
57
112
 
58
113
  ```tsx
59
- // App.tsx
60
- import { UnifiedAuthProvider } from '@jmruthers/pace-core';
61
- import { createClient } from '@supabase/supabase-js';
114
+ // src/main.tsx (or your app's entry point)
115
+ import '@jmruthers/pace-core/styles/core.css';
116
+ import React from 'react';
117
+ import ReactDOM from 'react-dom/client';
118
+ import App from './App';
62
119
 
63
- const supabase = createClient(
64
- process.env.NEXT_PUBLIC_SUPABASE_URL!,
65
- process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
120
+ const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement);
121
+ root.render(
122
+ <React.StrictMode>
123
+ <App />
124
+ </React.StrictMode>
66
125
  );
126
+ ```
127
+
128
+ ### What the CSS File Includes
129
+
130
+ The `core.css` file provides:
131
+ - Complete color palettes (main, secondary, accent)
132
+ - Font definitions with system font fallbacks
133
+ - Base element styles and resets
134
+ - Tailwind v4 utility classes
135
+ - Component styling foundation
136
+
137
+ **Note on Fonts**: The CSS includes font definitions that fall back to system fonts. For custom fonts, you'll need to provide them separately in your consuming app.
138
+
139
+ ## Step 4: Verify Installation
140
+
141
+ Create a test component to ensure everything works:
142
+
143
+ ```tsx
144
+ // src/App.tsx
145
+ import { Button, Card, Input } from '@jmruthers/pace-core';
67
146
 
68
147
  function App() {
69
148
  return (
70
- <UnifiedAuthProvider
71
- supabaseClient={supabase}
72
- appName="my-app"
73
- >
74
- <AppContent />
75
- </UnifiedAuthProvider>
149
+ <div className="p-8 space-y-4">
150
+ <h1 className="text-2xl font-bold text-main-900">PACE Core Test</h1>
151
+
152
+ <Card className="p-4">
153
+ <h2 className="text-lg font-semibold text-sec-800 mb-2">Components Test</h2>
154
+ <div className="space-y-2">
155
+ <Button variant="primary">Primary Button</Button>
156
+ <Button variant="secondary">Secondary Button</Button>
157
+ <Input placeholder="Test input field" />
158
+ </div>
159
+ </Card>
160
+ </div>
76
161
  );
77
162
  }
163
+
164
+ export default App;
78
165
  ```
79
166
 
80
- ## What's Next?
167
+ ### Expected Result
168
+
169
+ You should see:
170
+ - ✅ Properly styled components with PACE Core's design system
171
+ - ✅ Colors working (text-main-900, bg-sec-500, etc.)
172
+ - ✅ Typography and spacing applied correctly
173
+ - ✅ Hover effects and transitions working
174
+
175
+ ## Step 5: Set Up Authentication (Optional)
81
176
 
82
- - **[Quick Start](./quick-start.md)** - Build your first app in 5 minutes
83
- - **[Examples](./examples/)** - Complete working examples
84
- - **[Core Concepts](../core-concepts/)** - Understand the fundamentals
177
+ If you're using pace-core's authentication features:
178
+
179
+ ### Install Supabase
180
+
181
+ ```bash
182
+ npm install @supabase/supabase-js
183
+ ```
184
+
185
+ ### Create Supabase Client
186
+
187
+ ```typescript
188
+ // src/lib/supabase.ts
189
+ import { createClient } from '@supabase/supabase-js'
190
+
191
+ const supabaseUrl = process.env.REACT_APP_SUPABASE_URL!
192
+ const supabaseAnonKey = process.env.REACT_APP_SUPABASE_ANON_KEY!
193
+
194
+ export const supabase = createClient(supabaseUrl, supabaseAnonKey)
195
+ ```
196
+
197
+ ### Set Up Environment Variables
198
+
199
+ Create `.env.local`:
200
+
201
+ ```bash
202
+ REACT_APP_SUPABASE_URL=https://your-project.supabase.co
203
+ REACT_APP_SUPABASE_ANON_KEY=your-anon-key-here
204
+ ```
205
+
206
+ ### Configure Providers
207
+
208
+ ```tsx
209
+ // src/main.tsx
210
+ import { UnifiedAuthProvider, OrganisationProvider, EventProvider } from '@jmruthers/pace-core';
211
+ import { supabase } from './lib/supabase';
212
+
213
+ ReactDOM.createRoot(document.getElementById('root')!).render(
214
+ <React.StrictMode>
215
+ <UnifiedAuthProvider supabaseClient={supabase} appName="your-app">
216
+ <OrganisationProvider>
217
+ <EventProvider>
218
+ <App />
219
+ </EventProvider>
220
+ </OrganisationProvider>
221
+ </UnifiedAuthProvider>
222
+ </React.StrictMode>
223
+ );
224
+ ```
225
+
226
+ ## Troubleshooting
227
+
228
+ ### Common Issues
229
+
230
+ 1. **Components appear unstyled**
231
+ - Check that pace-core is included in your Vite content configuration
232
+ - Ensure the CSS file is imported
233
+ - Restart your dev server
234
+
235
+ 2. **Colors don't work**
236
+ - Verify the CSS file is imported
237
+ - Check that content scanning includes pace-core
238
+ - Ensure you're using Tailwind v4
239
+
240
+ 3. **Build errors about missing classes**
241
+ - Verify your content paths are correct
242
+ - Check that both source files and pace-core are included
243
+
244
+ ### Verification Checklist
245
+
246
+ Before asking for help, verify:
247
+
248
+ - [ ] CSS file is imported: `import '@jmruthers/pace-core/styles/core.css'`
249
+ - [ ] Vite config includes pace-core in content scanning
250
+ - [ ] Using Tailwind v4 (not v3)
251
+ - [ ] Dev server restarted after config changes
252
+ - [ ] All required peer dependencies installed
253
+ - [ ] Test component renders with proper styling
254
+
255
+ ## Next Steps
256
+
257
+ - [Quick Start Guide](./quick-start.md) - Build your first app
258
+ - [Vite Configuration](../consuming-app-vite-config.md) - Detailed Vite setup
259
+ - [Troubleshooting](../troubleshooting/styling-issues.md) - Fix common problems
260
+ - [Component API](../api/README.md) - Explore all components
85
261
 
86
262
  ## Need Help?
87
263
 
88
- - Check the [Common Issues](../troubleshooting/common-issues.md) guide
89
- - Review [Troubleshooting](../troubleshooting/) for debugging help
90
- - See [Best Practices](../best-practices/) for production-ready patterns
264
+ If you're still having issues:
265
+
266
+ 1. Check the [Troubleshooting Guide](../troubleshooting/styling-issues.md)
267
+ 2. Verify your setup matches this guide exactly
268
+ 3. Test with a minimal example to isolate the issue
269
+ 4. Check your package versions for compatibility
@@ -2,14 +2,29 @@
2
2
 
3
3
  Build a complete PACE Core application with authentication, permissions, and a modern UI in under 10 minutes.
4
4
 
5
+ > **⏱️ Time to Complete**: ~10 minutes
6
+ > **Prerequisites**: Node.js 18+, npm/yarn/pnpm
7
+ > **Difficulty**: Beginner
8
+
5
9
  ## 🎯 What We'll Build
6
10
 
7
- A simple meal management app that demonstrates:
8
- - User authentication and session management
9
- - Role-based access control (RBAC)
10
- - Permission enforcement
11
- - Modern UI components
12
- - Data management with DataTable
11
+ A complete meal management application featuring:
12
+ - ✅ **User Authentication** - Login/logout with Supabase
13
+ - ✅ **Role-Based Access Control** - Different permissions for different users
14
+ - **Interactive Data Tables** - CRUD operations with sorting, filtering, pagination
15
+ - **Form Validation** - Real-time validation with Zod schemas
16
+ - **Responsive Design** - Mobile-first with Tailwind CSS
17
+ - ✅ **Print Reports** - Generate PDF-ready reports
18
+ - ✅ **Modern UI** - Accessible, consistent component library
19
+
20
+ ### Final Result Preview
21
+
22
+ Your app will have:
23
+ - A login page with proper authentication
24
+ - A dashboard with user-specific content
25
+ - A data table for managing meals with full CRUD operations
26
+ - Permission-based UI elements (admin-only features)
27
+ - Responsive design that works on all devices
13
28
 
14
29
  ## 🚀 Step-by-Step Implementation
15
30
 
@@ -25,32 +40,56 @@ cd meal-manager
25
40
  ### 2. Install Dependencies
26
41
 
27
42
  ```bash
28
- npm install @jmruthers/pace-core @supabase/supabase-js react-router-dom
29
- npm install -D tailwindcss @types/react @types/react-dom
43
+ # Install pace-core and required peer dependencies
44
+ npm install @jmruthers/pace-core @tanstack/react-table @radix-ui/react-checkbox @radix-ui/react-dialog @radix-ui/react-dropdown-menu @radix-ui/react-label @radix-ui/react-slot lucide-react class-variance-authority clsx tailwind-merge
45
+
46
+ # Install Supabase and routing
47
+ npm install @supabase/supabase-js react-router-dom
48
+
49
+ # Install Tailwind CSS v4 and development dependencies
50
+ npm install -D @tailwindcss/vite tailwindcss@^4.0.0 @types/react @types/react-dom
30
51
  ```
31
52
 
32
- ### 3. Configure Tailwind CSS
53
+ ### 3. Configure Tailwind CSS v4 (CRITICAL)
33
54
 
55
+ **⚠️ CRITICAL**: pace-core requires Tailwind v4 with proper content scanning. Without this configuration, components will be unstyled.
56
+
57
+ Install Tailwind v4:
34
58
  ```bash
35
- npx tailwindcss init
59
+ npm install -D @tailwindcss/vite tailwindcss@^4.0.0
60
+ # Remove old Tailwind v3 if installed
61
+ npm uninstall tailwindcss@^3.0.0
36
62
  ```
37
63
 
38
- Update `tailwind.config.js`:
64
+ **REQUIRED Vite Configuration** - You MUST include pace-core in content scanning:
39
65
 
40
66
  ```js
41
- /** @type {import('tailwindcss').Config} */
42
- module.exports = {
43
- content: [
44
- './src/**/*.{js,ts,jsx,tsx}',
45
- './node_modules/@jmruthers/pace-core/**/*.{js,ts,jsx,tsx}',
67
+ // vite.config.js
68
+ import { defineConfig } from 'vite'
69
+ import react from '@vitejs/plugin-react'
70
+ import tailwindcss from '@tailwindcss/vite'
71
+
72
+ export default defineConfig({
73
+ plugins: [
74
+ react(),
75
+ tailwindcss({
76
+ // CRITICAL: Include pace-core components for scanning
77
+ content: [
78
+ './src/**/*.{js,ts,jsx,tsx}',
79
+ './node_modules/@jmruthers/pace-core/**/*.{js,ts,jsx,tsx}'
80
+ ]
81
+ })
46
82
  ],
47
- theme: {
48
- extend: {},
49
- },
50
- plugins: [],
51
- }
83
+ })
52
84
  ```
53
85
 
86
+ **Why this is critical:**
87
+ - Pace-core components contain Tailwind classes that must be scanned
88
+ - Without proper content configuration, components will appear unstyled
89
+ - The UI will be severely compromised without this step
90
+
91
+ **No `tailwind.config.js` file needed** - pace-core handles all configuration via CSS imports.
92
+
54
93
  ### 4. Set Up Environment Variables
55
94
 
56
95
  Create `.env.local`:
@@ -72,7 +111,65 @@ const supabaseAnonKey = process.env.REACT_APP_SUPABASE_ANON_KEY!
72
111
  export const supabase = createClient(supabaseUrl, supabaseAnonKey)
73
112
  ```
74
113
 
75
- ### 6. Set Up App Structure
114
+ ### 6. Set Up CSS Imports and HTML Structure
115
+
116
+ **CRITICAL**: Import the CSS file in your main entry point:
117
+
118
+ ```tsx
119
+ // src/main.tsx
120
+ import React from 'react'
121
+ import ReactDOM from 'react-dom/client'
122
+ import { BrowserRouter } from 'react-router-dom'
123
+ import {
124
+ UnifiedAuthProvider,
125
+ OrganisationProvider,
126
+ EventProvider
127
+ } from '@jmruthers/pace-core'
128
+ import { supabase } from './lib/supabase'
129
+ import App from './App.tsx'
130
+
131
+ // CRITICAL: Import the CSS system - includes everything you need
132
+ import '@jmruthers/pace-core/styles/core.css'
133
+
134
+ ReactDOM.createRoot(document.getElementById('root')!).render(
135
+ <React.StrictMode>
136
+ <BrowserRouter>
137
+ <UnifiedAuthProvider supabaseClient={supabase} appName="meal-manager">
138
+ <OrganisationProvider>
139
+ <EventProvider>
140
+ <App />
141
+ </EventProvider>
142
+ </OrganisationProvider>
143
+ </UnifiedAuthProvider>
144
+ </BrowserRouter>
145
+ </React.StrictMode>,
146
+ )
147
+ ```
148
+
149
+ **That's it!** The core.css file includes:
150
+ - Complete color palettes (main, secondary, accent)
151
+ - All fonts (Georama, Open Sans, Reddit Mono)
152
+ - Base element styles and resets
153
+ - Tailwind v4 utility classes
154
+ - Component styling
155
+
156
+ Update your `index.html`:
157
+ ```html
158
+ <!DOCTYPE html>
159
+ <html lang="en">
160
+ <head>
161
+ <meta charset="UTF-8" />
162
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
163
+ <title>Meal Manager</title>
164
+ </head>
165
+ <body class="appGradient">
166
+ <div id="root" class="grid grid-rows-[auto_1fr_auto] min-h-screen"></div>
167
+ <script type="module" src="/src/main.tsx"></script>
168
+ </body>
169
+ </html>
170
+ ```
171
+
172
+ ### 7. Set Up App Structure
76
173
 
77
174
  ```tsx
78
175
  // src/App.tsx
@@ -131,10 +228,10 @@ export function LoginPage() {
131
228
  };
132
229
 
133
230
  return (
134
- <div className="min-h-screen flex items-center justify-center bg-gray-50">
231
+ <div className="min-h-screen flex items-center justify-center bg-sec-50">
135
232
  <div className="max-w-md w-full space-y-8">
136
233
  <div>
137
- <h2 className="mt-6 text-center text-3xl font-extrabold text-gray-900">
234
+ <h2 className="mt-6 text-center text-3xl font-extrabold text-sec-900">
138
235
  Sign in to Meal Manager
139
236
  </h2>
140
237
  </div>