@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
@@ -1,83 +1,190 @@
1
1
  # PACE Core Styling Guide
2
2
 
3
- This guide explains how to properly style PACE Core components using our clean 3-file CSS architecture with Tailwind v4 and native utilities.
3
+ This guide explains how to properly style PACE Core components using our two-file CSS architecture with Tailwind v4 and native utilities.
4
4
 
5
5
  > **🎨 New to PACE Core?** Start with the [Quick Start Guide](./getting-started/quick-start.md) to get up and running in 5 minutes.
6
6
 
7
7
  ## Overview
8
8
 
9
- PACE Core uses a **clean 3-file CSS architecture** that provides:
9
+ PACE Core uses a **two-file CSS architecture** that provides:
10
10
 
11
- 1. **Base Styles** - Fonts, resets, typography, and neutral tokens
12
- 2. **Theme Mappings** - Native Tailwind utilities (bg-main-600, text-sec-700, etc.)
13
- 3. **Dark Mode** - Automatic shade remap for dark mode
14
- 4. **App-Owned Palettes** - Each app defines its own main/sec/acc colors
15
- 5. **No Conflicts** - Safe to import into any consuming application
11
+ 1. **Core Foundation** - Fonts, resets, typography, semantic tokens, and component styles
12
+ 2. **App-Specific Colors** - Each consuming app defines its own main/sec/acc color palettes
13
+ 3. **Native Utilities** - Native Tailwind utilities (bg-main-600, text-sec-700, etc.)
14
+ 4. **Content Scanning** - Each app handles its own Tailwind content scanning
15
+ 5. **No Conflicts** - Clean separation between core styles and app-specific theming
16
16
 
17
- > **💡 Why This Architecture?** This approach provides maximum flexibility while maintaining consistency. Apps own their brand colors, while pace-core provides the styling foundation and component styles.
17
+ > **💡 Why This Architecture?** This approach provides maximum flexibility while maintaining consistency. Apps own their brand colors and content scanning, while pace-core provides the complete styling foundation and semantic token system.
18
18
 
19
- ## The 3-File CSS Architecture
19
+ ## The Two-File CSS Architecture
20
20
 
21
- PACE Core ships with exactly 3 CSS files that work together:
21
+ PACE Core uses a clean separation of concerns with two CSS files:
22
22
 
23
- ### 1. `styles/base.css` - Foundation
23
+ ### `styles/core.css` - Core Foundation (from pace-core package)
24
24
  - **Fonts**: Georama, Open Sans, Reddit Mono with `font-display: swap`
25
25
  - **Base element styles**: h1-h6, p, a, lists, code, etc.
26
26
  - **Resets**: CSS resets and normalization
27
- - **Neutral tokens**: Background, foreground, muted colors that don't change with themes
27
+ - **Semantic color mappings**: Maps main/sec/acc palettes to semantic tokens
28
28
  - **Focus styles**: Accessible focus indicators
29
-
30
- ### 2. `styles/theme.css` - Native Utilities
31
- - **Color mappings**: Maps main/sec/acc palettes to native Tailwind utilities
32
29
  - **Typography**: Font family mappings (font-sans, font-serif, font-mono)
33
30
  - **Shadows & radii**: Named theme tokens for consistent styling
34
31
  - **Ring colors**: Focus ring color mappings
32
+ - **Component styles**: All pace-core component styling
33
+ - **NO color palettes**: Apps define their own main/sec/acc colors
34
+ - **NO source directives**: Apps handle their own content scanning
35
+
36
+ ### `src/app.css` - App-Specific Configuration (in each consuming app)
37
+ - **Color palettes**: Main, secondary, and accent palettes with all shades (50-950)
38
+ - **Source directives**: Tailwind v4 `@source` directives for content scanning
39
+ - **App-specific theming**: Any additional app-specific CSS variables
40
+
35
41
 
36
- ### 3. `styles/dark.css` - Dark Mode
37
- - **Shade remap**: Reverses lightness (50⇄950, 100⇄900, etc.)
38
- - **No hue shifts**: Only lightness changes, colors stay true to brand
39
- - **Neutral updates**: Updates background/foreground for dark mode
42
+ ## App-Specific Color Palettes
40
43
 
41
- ## App-Owned Color Palettes
44
+ Each consuming app must define its own color palettes in `src/app.css`. This provides complete control over branding while maintaining consistency through the semantic token system.
42
45
 
43
- Each consuming app defines its own brand colors in `app.css`:
46
+ ### Required Color Palette Structure
47
+
48
+ Every app must define three color palettes with complete shade ranges (50-950):
44
49
 
45
50
  ```css
46
- /* app.css - Your app's brand colors */
47
51
  @theme static {
48
- /* MAIN palette - your primary brand color */
49
- --color-main-raw: oklch(0.7 0.057 252.02);
50
- --color-main-50: oklch(0.98 0.001 252.02);
51
- --color-main-100: oklch(0.96 0.005 252.02);
52
- --color-main-200: oklch(0.927 0.012 252.02);
53
- --color-main-300: oklch(0.881 0.021 252.02);
54
- --color-main-400: oklch(0.822 0.032 252.02);
55
- --color-main-500: oklch(0.75 0.047 252.02);
56
- --color-main-600: oklch(0.7 0.057 252.02);
57
- --color-main-700: oklch(0.567 0.044 252.02);
58
- --color-main-800: oklch(0.456 0.034 252.02);
59
- --color-main-900: oklch(0.332 0.024 252.02);
60
- --color-main-950: oklch(0.195 0.014 252.02);
61
-
62
- /* SEC palette - your secondary brand color */
63
- --color-sec-raw: oklch(0.58 0.23 280.75);
64
- --color-sec-50: oklch(0.98 0.003 280.75);
65
- /* ... complete palette for sec */
66
-
67
- /* ACC palette - your accent brand color */
68
- --color-acc-raw: oklch(0.64 0.21 37.76);
69
- --color-acc-50: oklch(0.98 0.003 37.76);
70
- /* ... complete palette for acc */
52
+ /* Main palette - Primary brand color */
53
+ --color-main-raw: oklch(0.58 0.23 300);
54
+ --color-main-50: oklch(0.98 0.003 300);
55
+ --color-main-100: oklch(0.96 0.014 300);
56
+ /* ... continue through 950 */
57
+
58
+ /* Secondary palette - Supporting color */
59
+ --color-sec-raw: oklch(0.675 0.169 244.75);
60
+ --color-sec-50: oklch(0.98 0.003 244.75);
61
+ /* ... continue through 950 */
62
+
63
+ /* Accent palette - Highlight color */
64
+ --color-acc-raw: oklch(0.64 0.23 7.385);
65
+ --color-acc-50: oklch(0.98 0.003 7.385);
66
+ /* ... continue through 950 */
71
67
  }
72
68
  ```
73
69
 
74
70
  ### Benefits
75
71
 
76
- 1. **Brand Ownership**: Each app controls its own visual identity
77
- 2. **Native Utilities**: Use standard Tailwind classes (`bg-main-600`, `text-sec-700`)
78
- 3. **No Conflicts**: Clean separation between app colors and component styles
79
- 4. **Easy Updates**: Change colors in one file, everything updates
80
- 5. **Future-Proof**: New features work with your existing colors
72
+ 1. **Brand Control**: Each app defines its own unique color palette
73
+ 2. **Semantic Consistency**: All apps use the same semantic token system
74
+ 3. **Native Utilities**: Use standard Tailwind classes (`bg-main-600`, `text-sec-700`)
75
+ 4. **Easy Maintenance**: Colors are managed per app, not centrally
76
+ 5. **Future-Proof**: New features work with any color palette
77
+
78
+ ## ⚠️ CRITICAL: Required App Configuration
79
+
80
+ **IMPORTANT**: Each consuming app must create a `src/app.css` file with proper color palettes and source directives. Without this configuration, components will be unstyled.
81
+
82
+ ### Required App CSS File
83
+
84
+ **You MUST create `src/app.css` in your consuming app with the following structure:**
85
+
86
+ ```css
87
+ @import "tailwindcss";
88
+
89
+ /* @source directives for Tailwind v4 content scanning */
90
+ @source "./src/**/*.{js,ts,jsx,tsx}";
91
+ @source "./node_modules/@jmruthers/pace-core/src/**/*.{js,ts,jsx,tsx}";
92
+ @source "./node_modules/@jmruthers/pace-core/src/components/**/*.{js,ts,jsx,tsx}";
93
+ @source "./node_modules/@jmruthers/pace-core/src/providers/**/*.{js,ts,jsx,tsx}";
94
+ @source "./node_modules/@jmruthers/pace-core/src/hooks/**/*.{js,ts,jsx,tsx}";
95
+ @source "./node_modules/@jmruthers/pace-core/src/utils/**/*.{js,ts,jsx,tsx}";
96
+ @source "./node_modules/@jmruthers/pace-core/src/types/**/*.{js,ts,jsx,tsx}";
97
+ @source "./node_modules/@jmruthers/pace-core/src/validation/**/*.{js,ts,jsx,tsx}";
98
+ @source "./node_modules/@jmruthers/pace-core/src/rbac/**/*.{js,ts,jsx,tsx}";
99
+
100
+ /* This file is only to contain the color palette for the app. NEVER ADD ANY CSS OVERRIDES TO THIS FILE!! */
101
+ @theme static {
102
+ /* Main palette - Primary brand color */
103
+ --color-main-raw: oklch(0.58 0.23 300);
104
+ --color-main-50: oklch(0.98 0.003 300);
105
+ --color-main-100: oklch(0.96 0.014 300);
106
+ --color-main-200: oklch(0.927 0.033 300);
107
+ --color-main-300: oklch(0.881 0.059 300);
108
+ --color-main-400: oklch(0.822 0.093 300);
109
+ --color-main-500: oklch(0.75 0.133 300);
110
+ --color-main-600: oklch(0.665 0.182 300);
111
+ --color-main-700: oklch(0.58 0.23 300);
112
+ --color-main-800: oklch(0.456 0.158 300);
113
+ --color-main-900: oklch(0.332 0.099 300);
114
+ --color-main-950: oklch(0.195 0.047 300);
115
+
116
+ /* Secondary palette - Supporting color */
117
+ --color-sec-raw: oklch(0.675 0.169 244.75);
118
+ --color-sec-50: oklch(0.98 0.003 244.75);
119
+ --color-sec-100: oklch(0.96 0.014 244.75);
120
+ --color-sec-200: oklch(0.927 0.032 244.75);
121
+ --color-sec-300: oklch(0.881 0.057 244.75);
122
+ --color-sec-400: oklch(0.822 0.089 244.75);
123
+ --color-sec-500: oklch(0.75 0.128 244.75);
124
+ --color-sec-600: oklch(0.675 0.169 244.75);
125
+ --color-sec-700: oklch(0.567 0.134 244.75);
126
+ --color-sec-800: oklch(0.456 0.101 244.75);
127
+ --color-sec-900: oklch(0.332 0.068 244.75);
128
+ --color-sec-950: oklch(0.195 0.037 244.75);
129
+
130
+ /* Accent palette - Highlight color */
131
+ --color-acc-raw: oklch(0.64 0.23 7.385);
132
+ --color-acc-50: oklch(0.98 0.003 7.385);
133
+ --color-acc-100: oklch(0.96 0.017 7.385);
134
+ --color-acc-200: oklch(0.927 0.039 7.385);
135
+ --color-acc-300: oklch(0.881 0.069 7.385);
136
+ --color-acc-400: oklch(0.822 0.109 7.385);
137
+ --color-acc-500: oklch(0.75 0.157 7.385);
138
+ --color-acc-600: oklch(0.64 0.23 7.385);
139
+ --color-acc-700: oklch(0.567 0.193 7.385);
140
+ --color-acc-800: oklch(0.456 0.142 7.385);
141
+ --color-acc-900: oklch(0.332 0.092 7.385);
142
+ --color-acc-950: oklch(0.195 0.047 7.385);
143
+ }
144
+ ```
145
+
146
+ ### Required Import Order
147
+
148
+ **You MUST import both CSS files in the correct order:**
149
+
150
+ ```tsx
151
+ // In your app's entry point (e.g., main.tsx)
152
+ import '@jmruthers/pace-core/styles/core.css'; // Import core first
153
+ import './app.css'; // Import app-specific colors second
154
+ ```
155
+
156
+ ### Why This Configuration is Critical
157
+
158
+ Without proper app.css configuration:
159
+ - ❌ Pace-core component styles will be missing
160
+ - ❌ Colors, spacing, and typography won't work
161
+ - ❌ The UI will be severely compromised
162
+ - ❌ The entire point of using this UI library is undermined
163
+
164
+ ### What This Configuration Does
165
+
166
+ 1. **Scans Your Source Files**: Detects Tailwind classes in your app's source code
167
+ 2. **Scans Pace-Core Components**: Ensures all Tailwind classes used in pace-core components are included
168
+ 3. **Defines Color Palettes**: Provides the main/sec/acc color values that core.css references
169
+ 4. **Enables Proper Styling**: Allows pace-core components to render with correct styles
170
+
171
+ ### Verification
172
+
173
+ After configuration, test with a simple component:
174
+
175
+ ```tsx
176
+ import { Button, Card } from '@jmruthers/pace-core';
177
+
178
+ function TestComponent() {
179
+ return (
180
+ <Card className="p-4">
181
+ <Button variant="primary">Test Button</Button>
182
+ </Card>
183
+ );
184
+ }
185
+ ```
186
+
187
+ The component should render with proper PACE Core styling. If it appears unstyled, check your app.css configuration.
81
188
 
82
189
  ## Quick Start
83
190
 
@@ -87,19 +194,38 @@ Each consuming app defines its own brand colors in `app.css`:
87
194
  npm install @jmruthers/pace-core
88
195
  ```
89
196
 
90
- ### 2. Import the 3 CSS Files
197
+ ### 2. Create Your App CSS File
91
198
 
92
- ```tsx
93
- // In your app's entry point (e.g., main.tsx)
94
- import '@jmruthers/pace-core/styles/base.css';
95
- import '@jmruthers/pace-core/styles/theme.css';
96
- import '@jmruthers/pace-core/styles/dark.css';
97
- import './app.css'; // Your app's color palette
199
+ Create `src/app.css` in your consuming app with your brand colors and source directives:
200
+
201
+ ```css
202
+ @import "tailwindcss";
203
+
204
+ /* @source directives for Tailwind v4 content scanning */
205
+ @source "./src/**/*.{js,ts,jsx,tsx}";
206
+ @source "./node_modules/@jmruthers/pace-core/src/**/*.{js,ts,jsx,tsx}";
207
+ @source "./node_modules/@jmruthers/pace-core/src/components/**/*.{js,ts,jsx,tsx}";
208
+ @source "./node_modules/@jmruthers/pace-core/src/providers/**/*.{js,ts,jsx,tsx}";
209
+ @source "./node_modules/@jmruthers/pace-core/src/hooks/**/*.{js,ts,jsx,tsx}";
210
+ @source "./node_modules/@jmruthers/pace-core/src/utils/**/*.{js,ts,jsx,tsx}";
211
+ @source "./node_modules/@jmruthers/pace-core/src/types/**/*.{js,ts,jsx,tsx}";
212
+ @source "./node_modules/@jmruthers/pace-core/src/validation/**/*.{js,ts,jsx,tsx}";
213
+ @source "./node_modules/@jmruthers/pace-core/src/rbac/**/*.{js,ts,jsx,tsx}";
214
+
215
+ /* Define your brand color palettes */
216
+ @theme static {
217
+ /* Your main, secondary, and accent color palettes here */
218
+ /* See the example above for the complete structure */
219
+ }
98
220
  ```
99
221
 
100
- ### 3. Define Your App's Colors
222
+ ### 3. Import Both CSS Files
101
223
 
102
- Create `app.css` with your brand colors (see example above).
224
+ ```tsx
225
+ // In your app's entry point (e.g., main.tsx)
226
+ import '@jmruthers/pace-core/styles/core.css'; // Import core first
227
+ import './app.css'; // Import app-specific colors second
228
+ ```
103
229
 
104
230
  ### 4. Use Native Tailwind Utilities
105
231
 
@@ -119,33 +245,6 @@ function MyComponent() {
119
245
  }
120
246
  ```
121
247
 
122
- ## Dark Mode
123
-
124
- ### Enable Dark Mode
125
-
126
- Add a dark mode toggle to your app:
127
-
128
- ```tsx
129
- function DarkModeToggle() {
130
- const toggleDarkMode = () => {
131
- document.documentElement.toggleAttribute('data-mode', true);
132
- };
133
-
134
- return (
135
- <button onClick={toggleDarkMode}>
136
- Toggle Dark Mode
137
- </button>
138
- );
139
- }
140
- ```
141
-
142
- ### Dark Mode Behavior
143
-
144
- - Dark mode automatically reverses all color shades (50⇄950, 100⇄900, etc.)
145
- - No hue changes - only lightness reversal
146
- - All components automatically adapt to dark mode
147
- - Uses `[data-mode="dark"]` selector
148
-
149
248
  ## Dynamic Theming
150
249
 
151
250
  ### Organisation/Event Colors
@@ -193,6 +292,19 @@ const themeCSS = generateSSRThemeCSS(paletteData);
193
292
 
194
293
  Same patterns for `sec-*` and `acc-*` palettes.
195
294
 
295
+ ### Semantic Color Utilities
296
+
297
+ PACE Core also provides semantic color utilities that automatically map to your palettes:
298
+
299
+ - `bg-background`, `text-foreground` - Main background and text
300
+ - `bg-primary`, `text-primary-foreground` - Primary actions
301
+ - `bg-secondary`, `text-secondary-foreground` - Secondary elements
302
+ - `bg-destructive`, `text-destructive-foreground` - Destructive actions
303
+ - `bg-muted`, `text-muted-foreground` - Muted content
304
+ - `bg-accent`, `text-accent-foreground` - Accent elements
305
+ - `bg-card`, `text-card-foreground` - Card backgrounds
306
+ - `bg-popover`, `text-popover-foreground` - Popover backgrounds
307
+
196
308
  ### Typography
197
309
 
198
310
  - `font-sans` - Open Sans
@@ -210,8 +322,8 @@ Same patterns for `sec-*` and `acc-*` palettes.
210
322
  ### Before (Old System)
211
323
  ```tsx
212
324
  // Old app-* classes
213
- <div className="bg-app-main-500 text-app-main-50">
214
- <Button className="bg-app-sec-600 hover:bg-app-sec-700">
325
+ <div className="bg-main-500 text-main-50">
326
+ <Button className="bg-sec-600 hover:bg-sec-700">
215
327
  Click me
216
328
  </Button>
217
329
  </div>
@@ -232,7 +344,10 @@ Same patterns for `sec-*` and `acc-*` palettes.
232
344
  - **No arbitrary values**: Use only standard utilities like `bg-main-600`, not `bg-[oklch(...)]`
233
345
  - **No CVA**: Components use native Tailwind utilities, not class-variance-authority
234
346
  - **No utility aliases**: Use standard Tailwind class names
235
- - **App owns palettes**: Only define main/sec/acc in your `app.css`
347
+ - **App-specific palettes required**: Each app must define its own main/sec/acc color palettes in `app.css`
348
+ - **Tailwind v4 only**: Uses CSS-first approach with `@theme` blocks, no `tailwind.config.js`
349
+ - **Two-file architecture**: Must use both `core.css` and `app.css` files
350
+ - **Source directives required**: Each app must include `@source` directives for pace-core scanning
236
351
 
237
352
  ## Troubleshooting
238
353
 
@@ -240,41 +355,41 @@ Same patterns for `sec-*` and `acc-*` palettes.
240
355
 
241
356
  **Problem**: Components appear unstyled or with default browser styling.
242
357
 
243
- **Solution**: Ensure you've imported all 3 CSS files:
358
+ **Solution**: Ensure you've imported both CSS files in the correct order:
244
359
  ```tsx
245
- import '@jmruthers/pace-core/styles/base.css';
246
- import '@jmruthers/pace-core/styles/theme.css';
247
- import '@jmruthers/pace-core/styles/dark.css';
360
+ import '@jmruthers/pace-core/styles/core.css'; // Import core first
361
+ import './app.css'; // Import app-specific colors second
248
362
  ```
249
363
 
250
364
  **Problem**: Colors don't work (bg-main-600 shows as gray).
251
365
 
252
- **Solution**: Ensure you've defined your color palettes in `app.css`:
253
- ```css
254
- @theme static {
255
- --color-main-600: oklch(0.7 0.057 252.02);
256
- /* ... other shades */
257
- }
258
- ```
366
+ **Solution**: Check that you've created `src/app.css` with your color palettes. If colors aren't working, verify that:
367
+ 1. You've created `src/app.css` with complete color palettes (main, sec, acc)
368
+ 2. You've imported both CSS files in the correct order
369
+ 3. Your color palettes include all shades (50-950)
370
+ 4. Tailwind v4 is properly configured
259
371
 
260
- **Problem**: Dark mode doesn't work.
372
+ **Problem**: Fonts don't load correctly.
261
373
 
262
- **Solution**: Ensure you've imported `dark.css` and added the `data-mode="dark"` attribute:
263
- ```tsx
264
- document.documentElement.setAttribute('data-mode', 'dark');
265
- ```
374
+ **Solution**: Fonts are included in the core.css file. Ensure you're importing `core.css` which contains the font definitions.
266
375
 
267
- **Problem**: Fonts don't load correctly.
376
+ **Problem**: Tailwind classes from pace-core components are missing.
268
377
 
269
- **Solution**: Fonts are included in the package. Ensure you're importing `base.css` which contains the font definitions.
378
+ **Solution**: Check that your `src/app.css` includes the proper `@source` directives for pace-core:
379
+ ```css
380
+ @source "./node_modules/@jmruthers/pace-core/src/**/*.{js,ts,jsx,tsx}";
381
+ @source "./node_modules/@jmruthers/pace-core/src/components/**/*.{js,ts,jsx,tsx}";
382
+ /* ... other pace-core source directives */
383
+ ```
270
384
 
271
385
  ## Best Practices
272
386
 
273
- 1. **Import all 3 CSS files** - base.css, theme.css, and dark.css
274
- 2. **Define complete palettes** - Include all shades (50-950) for main, sec, and acc
387
+ 1. **Create app.css** - Always create `src/app.css` with your brand colors and source directives
388
+ 2. **Import both CSS files** - Import core.css first, then app.css
275
389
  3. **Use native utilities** - Stick to standard Tailwind classes like `bg-main-600`
276
- 4. **Test dark mode** - Always test your app in both light and dark modes
277
- 5. **Keep colors in app.css** - Don't define colors in component files
390
+ 4. **Complete color palettes** - Always define all shades (50-950) for main, sec, and acc palettes
391
+ 5. **Use semantic tokens** - Prefer `bg-primary` over `bg-main-600` for better maintainability
392
+ 6. **Keep app.css clean** - Only put color palettes and source directives in app.css, no other CSS
278
393
 
279
394
  ## Support
280
395
 
@@ -624,23 +624,19 @@ describe('Visual Regression Tests', () => {
624
624
 
625
625
  ```tsx
626
626
  import { render } from '@testing-library/react';
627
- import { ThemeProvider, Button } from '@jmruthers/pace-core';
627
+ import { Button } from '@jmruthers/pace-core';
628
628
 
629
- describe('Theme Tests', () => {
630
- test('Button renders with light theme', () => {
629
+ describe('Component Tests', () => {
630
+ test('Button renders correctly', () => {
631
631
  const { container } = render(
632
- <ThemeProvider theme="light">
633
- <Button>Light Theme Button</Button>
634
- </ThemeProvider>
632
+ <Button>Test Button</Button>
635
633
  );
636
634
  expect(container.firstChild).toMatchSnapshot();
637
635
  });
638
636
 
639
- test('Button renders with dark theme', () => {
637
+ test('Button renders correctly', () => {
640
638
  const { container } = render(
641
- <ThemeProvider theme="dark">
642
- <Button>Dark Theme Button</Button>
643
- </ThemeProvider>
639
+ <Button>Test Button</Button>
644
640
  );
645
641
  expect(container.firstChild).toMatchSnapshot();
646
642
  });