@jmruthers/pace-core 0.5.193 → 0.6.1

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 (191) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +7 -1
  3. package/cursor-rules/00-pace-core-compliance.mdc +372 -0
  4. package/cursor-rules/01-standards-compliance.mdc +275 -0
  5. package/cursor-rules/02-project-structure.mdc +200 -0
  6. package/cursor-rules/03-solid-principles.mdc +341 -0
  7. package/cursor-rules/04-testing-standards.mdc +315 -0
  8. package/cursor-rules/05-bug-reports-and-features.mdc +246 -0
  9. package/cursor-rules/06-code-quality.mdc +392 -0
  10. package/cursor-rules/07-tech-stack-compliance.mdc +309 -0
  11. package/cursor-rules/CHANGELOG.md +101 -0
  12. package/cursor-rules/README.md +191 -0
  13. package/dist/{DataTable-Be6dH_dR.d.ts → DataTable-CH1U5Tpy.d.ts} +1 -1
  14. package/dist/{DataTable-5FU7IESH.js → DataTable-DQ7RSOHE.js} +6 -6
  15. package/dist/{PublicPageProvider-C0Sm_e5k.d.ts → PublicPageProvider-ce4xlHYA.d.ts} +34 -155
  16. package/dist/{UnifiedAuthProvider-RGJTDE2C.js → UnifiedAuthProvider-ATAP5UTR.js} +2 -2
  17. package/dist/{chunk-6C4YBBJM 5.js → chunk-3QRJFVBR.js} +1 -1
  18. package/dist/chunk-3QRJFVBR.js.map +1 -0
  19. package/dist/{chunk-IIELH4DL.js → chunk-3XTALGJF.js} +2 -2
  20. package/dist/{chunk-IIELH4DL.js.map → chunk-3XTALGJF.js.map} +1 -1
  21. package/dist/{chunk-HWIIPPNI.js → chunk-4N5C5XZU.js} +20 -20
  22. package/dist/chunk-4N5C5XZU.js.map +1 -0
  23. package/dist/{chunk-7EQTDTTJ.js → chunk-4ZC4GX36.js} +5 -5
  24. package/dist/{chunk-7EQTDTTJ.js 2.map → chunk-4ZC4GX36.js.map} +1 -1
  25. package/dist/{chunk-7FLMSG37.js → chunk-BYFSK72L.js} +22 -22
  26. package/dist/chunk-BYFSK72L.js.map +1 -0
  27. package/dist/{chunk-LFNCN2SP.js → chunk-EXUD6RNJ.js} +46 -7
  28. package/dist/chunk-EXUD6RNJ.js.map +1 -0
  29. package/dist/{chunk-NOAYCWCX 5.js → chunk-GLK6VM3F.js} +167 -169
  30. package/dist/chunk-GLK6VM3F.js.map +1 -0
  31. package/dist/{chunk-HW3OVDUF.js → chunk-J36DSWQK.js} +1 -1
  32. package/dist/{chunk-HW3OVDUF.js.map → chunk-J36DSWQK.js.map} +1 -1
  33. package/dist/{chunk-BC4IJKSL.js → chunk-JBKQ3SAO.js} +2 -2
  34. package/dist/{chunk-QWWZ5CAQ.js → chunk-LXQLPRQ2.js} +2 -2
  35. package/dist/{chunk-E3SPN4VZ 5.js → chunk-T33XF5ZC.js} +119 -114
  36. package/dist/chunk-T33XF5ZC.js.map +1 -0
  37. package/dist/{chunk-XNXXZ43G.js → chunk-XM25TVIE.js} +27 -4
  38. package/dist/chunk-XM25TVIE.js.map +1 -0
  39. package/dist/components.d.ts +3 -3
  40. package/dist/components.js +8 -8
  41. package/dist/hooks.d.ts +6 -6
  42. package/dist/hooks.js +17 -22
  43. package/dist/hooks.js.map +1 -1
  44. package/dist/index.d.ts +7 -7
  45. package/dist/index.js +15 -16
  46. package/dist/index.js.map +1 -1
  47. package/dist/providers.js +1 -1
  48. package/dist/rbac/index.d.ts +1 -1
  49. package/dist/rbac/index.js +5 -5
  50. package/dist/{usePublicRouteParams-TZe0gy-4.d.ts → usePublicRouteParams-BJAlWfuJ.d.ts} +3 -3
  51. package/dist/{useToast-C8gR5ir4.d.ts → useToast-AyaT-x7p.d.ts} +2 -2
  52. package/dist/utils.d.ts +1 -1
  53. package/dist/utils.js +3 -3
  54. package/docs/getting-started/cursor-rules.md +262 -0
  55. package/docs/getting-started/installation-guide.md +6 -1
  56. package/docs/getting-started/quick-start.md +6 -1
  57. package/docs/migration/MIGRATION_GUIDE.md +4 -4
  58. package/docs/migration/REACT_19_MIGRATION.md +227 -0
  59. package/docs/standards/README.md +39 -0
  60. package/docs/troubleshooting/migration.md +4 -4
  61. package/examples/PublicPages/PublicEventPage.tsx +1 -1
  62. package/package.json +11 -6
  63. package/scripts/audit-consuming-app.cjs +961 -0
  64. package/scripts/check-pace-core-compliance.cjs +34 -15
  65. package/scripts/install-cursor-rules.cjs +236 -0
  66. package/src/__tests__/helpers/test-providers.tsx +1 -1
  67. package/src/__tests__/helpers/test-utils.tsx +1 -1
  68. package/src/components/Badge/Badge.tsx +2 -4
  69. package/src/components/Button/Button.tsx +5 -4
  70. package/src/components/Calendar/Calendar.tsx +1 -1
  71. package/src/components/DataTable/DataTable.test.tsx +57 -93
  72. package/src/components/DataTable/DataTable.tsx +2 -2
  73. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +13 -5
  74. package/src/components/DataTable/__tests__/ssr.strict-mode.test.tsx +12 -12
  75. package/src/components/DataTable/components/AccessDeniedPage.tsx +1 -1
  76. package/src/components/DataTable/components/BulkOperationsDropdown.tsx +1 -1
  77. package/src/components/DataTable/components/DataTableCore.tsx +4 -7
  78. package/src/components/DataTable/components/DataTableModals.tsx +1 -1
  79. package/src/components/DataTable/components/EditableRow.tsx +1 -1
  80. package/src/components/DataTable/components/UnifiedTableBody.tsx +6 -8
  81. package/src/components/DataTable/components/__tests__/DataTableModals.test.tsx +23 -23
  82. package/src/components/DataTable/components/__tests__/EditableRow.test.tsx +11 -11
  83. package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +36 -36
  84. package/src/components/DataTable/components/__tests__/GroupHeader.test.tsx +27 -27
  85. package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +39 -39
  86. package/src/components/DataTable/components/__tests__/UnifiedTableBody.test.tsx +33 -33
  87. package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +29 -29
  88. package/src/components/DataTable/hooks/useColumnReordering.ts +2 -2
  89. package/src/components/DataTable/hooks/useKeyboardNavigation.ts +2 -2
  90. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +8 -14
  91. package/src/components/Dialog/Dialog.tsx +6 -5
  92. package/src/components/ErrorBoundary/ErrorBoundary.tsx +1 -1
  93. package/src/components/EventSelector/EventSelector.tsx +1 -1
  94. package/src/components/FileDisplay/FileDisplay.test.tsx +2 -2
  95. package/src/components/Footer/Footer.tsx +1 -1
  96. package/src/components/Form/Form.test.tsx +36 -15
  97. package/src/components/Form/Form.tsx +30 -26
  98. package/src/components/Header/Header.tsx +1 -1
  99. package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +40 -40
  100. package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +1 -1
  101. package/src/components/Input/Input.tsx +28 -30
  102. package/src/components/Label/Label.tsx +1 -1
  103. package/src/components/LoadingSpinner/LoadingSpinner.tsx +1 -1
  104. package/src/components/LoginForm/LoginForm.test.tsx +42 -42
  105. package/src/components/LoginForm/LoginForm.tsx +8 -8
  106. package/src/components/NavigationMenu/NavigationMenu.tsx +1 -1
  107. package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +1 -1
  108. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +50 -50
  109. package/src/components/PaceAppLayout/PaceAppLayout.tsx +1 -1
  110. package/src/components/PaceAppLayout/README.md +1 -1
  111. package/src/components/PaceLoginPage/PaceLoginPage.tsx +1 -1
  112. package/src/components/PasswordChange/PasswordChangeForm.test.tsx +33 -33
  113. package/src/components/PasswordChange/PasswordChangeForm.tsx +1 -1
  114. package/src/components/Progress/Progress.tsx +1 -1
  115. package/src/components/PublicLayout/PublicPageLayout.tsx +1 -1
  116. package/src/components/Select/Select.tsx +33 -22
  117. package/src/components/SessionRestorationLoader/SessionRestorationLoader.tsx +1 -1
  118. package/src/components/Table/Table.tsx +1 -1
  119. package/src/components/Textarea/Textarea.tsx +27 -29
  120. package/src/components/Toast/Toast.tsx +1 -1
  121. package/src/components/Tooltip/Tooltip.tsx +1 -1
  122. package/src/components/UserMenu/UserMenu.tsx +1 -1
  123. package/src/hooks/__tests__/hooks.integration.test.tsx +80 -55
  124. package/src/hooks/__tests__/useStorage.unit.test.ts +36 -36
  125. package/src/hooks/public/usePublicEvent.ts +1 -1
  126. package/src/hooks/public/usePublicEventLogo.ts +1 -1
  127. package/src/hooks/public/usePublicRouteParams.ts +1 -1
  128. package/src/hooks/useDataTableState.ts +8 -18
  129. package/src/hooks/useFocusManagement.ts +2 -2
  130. package/src/hooks/useFocusTrap.ts +4 -4
  131. package/src/hooks/useFormDialog.ts +8 -7
  132. package/src/hooks/useInactivityTracker.ts +1 -1
  133. package/src/hooks/usePermissionCache.ts +1 -1
  134. package/src/hooks/useSecureDataAccess.ts +19 -4
  135. package/src/hooks/useToast.ts +2 -2
  136. package/src/providers/__tests__/OrganisationProvider.test.tsx +57 -13
  137. package/src/providers/__tests__/ProviderLifecycle.test.tsx +21 -6
  138. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +10 -10
  139. package/src/providers/services/UnifiedAuthProvider.tsx +22 -22
  140. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +13 -3
  141. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +24 -24
  142. package/src/rbac/components/EnhancedNavigationMenu.tsx +1 -1
  143. package/src/rbac/components/NavigationGuard.tsx +1 -1
  144. package/src/rbac/components/NavigationProvider.tsx +1 -1
  145. package/src/rbac/components/PagePermissionGuard.tsx +1 -1
  146. package/src/rbac/components/PagePermissionProvider.tsx +1 -1
  147. package/src/rbac/components/PermissionEnforcer.tsx +1 -1
  148. package/src/rbac/components/RoleBasedRouter.tsx +1 -1
  149. package/src/rbac/components/SecureDataProvider.tsx +1 -1
  150. package/src/rbac/secureClient.ts +12 -0
  151. package/src/utils/security/secureDataAccess.test.ts +31 -20
  152. package/src/utils/security/secureDataAccess.ts +4 -3
  153. package/dist/chunk-6C4YBBJM.js +0 -628
  154. package/dist/chunk-6C4YBBJM.js.map +0 -1
  155. package/dist/chunk-7D4SUZUM.js 2.map +0 -1
  156. package/dist/chunk-7EQTDTTJ.js.map +0 -1
  157. package/dist/chunk-7FLMSG37.js 2.map +0 -1
  158. package/dist/chunk-7FLMSG37.js.map +0 -1
  159. package/dist/chunk-E3SPN4VZ.js +0 -12917
  160. package/dist/chunk-E3SPN4VZ.js.map +0 -1
  161. package/dist/chunk-E66EQZE6 5.js +0 -37
  162. package/dist/chunk-E66EQZE6.js 2.map +0 -1
  163. package/dist/chunk-HWIIPPNI.js.map +0 -1
  164. package/dist/chunk-I7PSE6JW 5.js +0 -191
  165. package/dist/chunk-I7PSE6JW.js 2.map +0 -1
  166. package/dist/chunk-KNC55RTG.js 5.map +0 -1
  167. package/dist/chunk-KQCRWDSA.js 5.map +0 -1
  168. package/dist/chunk-LFNCN2SP.js 2.map +0 -1
  169. package/dist/chunk-LFNCN2SP.js.map +0 -1
  170. package/dist/chunk-LMC26NLJ 2.js +0 -84
  171. package/dist/chunk-NOAYCWCX.js +0 -4993
  172. package/dist/chunk-NOAYCWCX.js.map +0 -1
  173. package/dist/chunk-QWWZ5CAQ.js.map +0 -1
  174. package/dist/chunk-QXHPKYJV 3.js +0 -113
  175. package/dist/chunk-R77UEZ4E 3.js +0 -68
  176. package/dist/chunk-VBXEHIUJ.js 6.map +0 -1
  177. package/dist/chunk-XNXXZ43G.js.map +0 -1
  178. package/dist/chunk-ZSAAAMVR 6.js +0 -25
  179. package/dist/components.js 5.map +0 -1
  180. package/dist/styles/index 2.js +0 -12
  181. package/dist/styles/index.js 5.map +0 -1
  182. package/dist/theming/runtime 5.js +0 -19
  183. package/dist/theming/runtime.js 5.map +0 -1
  184. /package/dist/{DataTable-5FU7IESH.js.map → DataTable-DQ7RSOHE.js.map} +0 -0
  185. /package/dist/{UnifiedAuthProvider-RGJTDE2C.js.map → UnifiedAuthProvider-ATAP5UTR.js.map} +0 -0
  186. /package/dist/{chunk-BC4IJKSL.js.map → chunk-JBKQ3SAO.js.map} +0 -0
  187. /package/dist/{chunk-QWWZ5CAQ.js 3.map → chunk-LXQLPRQ2.js.map} +0 -0
  188. /package/examples/{rbac → RBAC}/CompleteRBACExample.tsx +0 -0
  189. /package/examples/{rbac → RBAC}/EventBasedApp.tsx +0 -0
  190. /package/examples/{rbac → RBAC}/PermissionExample.tsx +0 -0
  191. /package/examples/{rbac → RBAC}/index.ts +0 -0
@@ -0,0 +1,101 @@
1
+ # Cursor Rules Changelog
2
+
3
+ All notable changes to pace-core cursor rules will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ### Added
11
+ - Initial release of cursor rules system
12
+ - 8 comprehensive rule files covering compliance, standards, structure, SOLID, testing, bug reports, code quality, and tech stack
13
+ - Installation script with safety guards
14
+ - Comprehensive audit tool with Phase 1 (deterministic) and Phase 2 (heuristic) checks
15
+ - Markdown report generation with timestamps
16
+
17
+ ## [1.0.0] - 2025-01-15
18
+
19
+ ### Added
20
+ - **00-pace-core-compliance.mdc** - Enforces pace-core usage patterns
21
+ - **01-standards-compliance.mdc** - Maps to all pace-core standards
22
+ - **02-project-structure.mdc** - Defines standard folder structure
23
+ - **03-solid-principles.mdc** - Enforces SOLID architecture principles
24
+ - **04-testing-standards.mdc** - Enforces testing framework consistency
25
+ - **05-bug-reports-and-features.mdc** - Templates for bug reports and feature requests
26
+ - **06-code-quality.mdc** - Enforces code quality standards
27
+ - **07-tech-stack-compliance.mdc** - Enforces tech stack versions and patterns
28
+
29
+ ### Features
30
+ - Opt-in installation script (not automatic postinstall)
31
+ - Safety guards (environment variable, git check)
32
+ - Version tracking in rule files
33
+ - Rule numbering system (pace-core: 00-09, apps: 50+)
34
+ - Targeted globs for efficient rule application
35
+ - MUST/SHOULD/MAY semantics for clear guidance
36
+ - Comprehensive audit tool with markdown reports
37
+ - Phase-based audit approach (deterministic vs heuristic)
38
+
39
+ ### Documentation
40
+ - README.md with installation and usage guide
41
+ - Getting started guide in docs
42
+ - Updated standards README with cursor rules section
43
+
44
+ ## Migration Guide
45
+
46
+ ### From No Rules to Cursor Rules
47
+
48
+ 1. Install pace-core (if not already installed):
49
+ ```bash
50
+ npm install @jmruthers/pace-core
51
+ ```
52
+
53
+ 2. Install cursor rules:
54
+ ```bash
55
+ node node_modules/@jmruthers/pace-core/scripts/install-cursor-rules.cjs
56
+ ```
57
+
58
+ 3. Restart Cursor to load rules
59
+
60
+ 4. Run audit to check compliance:
61
+ ```bash
62
+ node node_modules/@jmruthers/pace-core/scripts/audit-consuming-app.cjs
63
+ ```
64
+
65
+ ### Updating Rules
66
+
67
+ When pace-core is updated:
68
+
69
+ 1. Update pace-core:
70
+ ```bash
71
+ npm update @jmruthers/pace-core
72
+ ```
73
+
74
+ 2. Update rules:
75
+ ```bash
76
+ npm run setup:cursor-rules
77
+ ```
78
+
79
+ 3. Review any changes in rule files
80
+
81
+ ### Custom Rules
82
+
83
+ If you have custom rules, number them starting at 50:
84
+ - `50-my-custom-rule.mdc`
85
+ - `51-another-rule.mdc`
86
+ - etc.
87
+
88
+ This ensures pace-core rules (00-09) load first.
89
+
90
+ ## Version History
91
+
92
+ - **1.0.0** (2025-01-15) - Initial release
93
+
94
+ ## Future Enhancements
95
+
96
+ Potential future enhancements:
97
+ - CLI for rule validation
98
+ - GitHub Action template for PR audits
99
+ - Rule update notification system
100
+ - Interactive rule configuration
101
+ - Rule effectiveness metrics
@@ -0,0 +1,191 @@
1
+ # pace-core Cursor Rules
2
+
3
+ This directory contains Cursor rules that ensure consuming apps maintain quality, consistency, and compliance with pace-core standards.
4
+
5
+ ## What are Cursor Rules?
6
+
7
+ Cursor rules are `.mdc` (Markdown Cursor) files that guide AI assistants (like Cursor) to follow specific patterns and standards when writing code. These rules are automatically loaded by Cursor when present in `.cursor/rules/` directory.
8
+
9
+ ## Installation
10
+
11
+ ### Automatic Installation (Recommended)
12
+
13
+ Run the installation script from your consuming app root:
14
+
15
+ ```bash
16
+ node node_modules/@jmruthers/pace-core/scripts/install-cursor-rules.cjs
17
+ ```
18
+
19
+ Or add to your `package.json`:
20
+
21
+ ```json
22
+ {
23
+ "scripts": {
24
+ "setup:cursor-rules": "node node_modules/@jmruthers/pace-core/scripts/install-cursor-rules.cjs"
25
+ }
26
+ }
27
+ ```
28
+
29
+ Then run:
30
+
31
+ ```bash
32
+ npm run setup:cursor-rules
33
+ ```
34
+
35
+ ### Manual Installation
36
+
37
+ Copy all `.mdc` files from `node_modules/@jmruthers/pace-core/cursor-rules/` to your `.cursor/rules/` directory.
38
+
39
+ ## Rule Files
40
+
41
+ The rules are numbered for ordering (00-07):
42
+
43
+ - **00-pace-core-compliance.mdc** - Enforce pace-core usage patterns
44
+ - **01-standards-compliance.mdc** - Enforce all pace-core standards
45
+ - **02-project-structure.mdc** - Define standard folder structure
46
+ - **03-solid-principles.mdc** - Enforce SOLID architecture principles
47
+ - **04-testing-standards.mdc** - Enforce testing framework consistency
48
+ - **05-bug-reports-and-features.mdc** - Templates for bug reports and feature requests (guidance-only)
49
+ - **06-code-quality.mdc** - Enforce code quality standards
50
+ - **07-tech-stack-compliance.mdc** - Enforce tech stack versions and patterns
51
+
52
+ ## Rule Numbering System
53
+
54
+ - **pace-core rules**: `00-09` (reserved for pace-core)
55
+ - **Your app rules**: `50+` (create your own rules starting at 50)
56
+
57
+ This ensures pace-core rules load first, and your custom rules load after.
58
+
59
+ ## Customization
60
+
61
+ ### Adding Your Own Rules
62
+
63
+ Create your own rules in `.cursor/rules/` with numbers starting at `50`:
64
+
65
+ ```
66
+ .cursor/rules/
67
+ ├── 00-pace-core-compliance.mdc # pace-core rule
68
+ ├── 01-standards-compliance.mdc # pace-core rule
69
+ ├── ...
70
+ ├── 50-my-custom-rule.mdc # Your custom rule
71
+ └── 51-another-custom-rule.mdc # Your custom rule
72
+ ```
73
+
74
+ ### Updating Rules
75
+
76
+ When pace-core is updated, run the installation script again. The script will:
77
+ - **Automatically update** pace-core rules (00-09) if they've changed (version or content differs)
78
+ - Preserve your custom rules (50+)
79
+ - Skip files that are already up to date
80
+
81
+ ### Force Update
82
+
83
+ To force update all rules (even when versions match):
84
+
85
+ ```bash
86
+ node node_modules/@jmruthers/pace-core/scripts/install-cursor-rules.cjs --force
87
+ ```
88
+
89
+ **Note**: Normally, pace-core rules (00-09) are automatically updated when they change. The `--force` flag forces an update even when versions match (useful if content changed but version metadata wasn't updated).
90
+
91
+ ## How Cursor Uses Rules
92
+
93
+ Cursor automatically loads all `.mdc` files from `.cursor/rules/` when:
94
+ - You open a file that matches the rule's `globs` pattern
95
+ - You ask Cursor to write or modify code
96
+ - Cursor needs context for code generation
97
+
98
+ Rules with `alwaysApply: true` are always considered, while rules with `alwaysApply: false` are only referenced when relevant.
99
+
100
+ ## Explicitly Referencing Rules
101
+
102
+ When working with Cursor, you can explicitly reference rules:
103
+
104
+ > "Use pace-core components and follow rules 00–04."
105
+
106
+ This helps Cursor focus on specific rule sets.
107
+
108
+ ## Rule Format
109
+
110
+ Each rule file follows this format:
111
+
112
+ ```markdown
113
+ ---
114
+ description: Brief description
115
+ globs: ["targeted/path/**/*.{ts,tsx}"] # Files this rule applies to
116
+ alwaysApply: true # or false
117
+ paceCoreVersion: "0.5.x" # pace-core version
118
+ rulesVersion: "2025-01-15" # Rule update date
119
+ ---
120
+
121
+ # Rule Title
122
+
123
+ Content with examples and guidelines.
124
+ ```
125
+
126
+ ## Safety Guards
127
+
128
+ The installation script includes safety guards:
129
+
130
+ - **Environment variable**: Set `PACE_CURSOR_RULES_DISABLED=1` to skip installation
131
+ - **Git check**: Skips if no `.git` folder exists (CI/safety)
132
+ - **Auto-update**: Automatically updates pace-core rules (00-09) when they change
133
+ - **Protection**: Never overwrites custom app rules (50+)
134
+
135
+ ## Monorepo Support
136
+
137
+ For monorepos, run the installation script from each app's root directory. Each app maintains its own `.cursor/rules/` directory.
138
+
139
+ ## Troubleshooting
140
+
141
+ ### Rules Not Loading
142
+
143
+ 1. Verify rules are in `.cursor/rules/` directory
144
+ 2. Check file extensions are `.mdc`
145
+ 3. Restart Cursor if rules were just installed
146
+ 4. Check rule frontmatter is valid YAML
147
+
148
+ ### Rules Conflicting
149
+
150
+ 1. Check rule numbering (pace-core: 00-09, yours: 50+)
151
+ 2. Verify `globs` patterns don't overlap unnecessarily
152
+ 3. Review rule priorities in frontmatter
153
+
154
+ ### Installation Fails
155
+
156
+ 1. Check you're in the app root directory
157
+ 2. Verify `node_modules/@jmruthers/pace-core/` exists
158
+ 3. Check file permissions
159
+ 4. Try with `--force` flag if needed
160
+
161
+ ## Audit Tool
162
+
163
+ Run the audit tool to check compliance:
164
+
165
+ ```bash
166
+ node node_modules/@jmruthers/pace-core/scripts/audit-consuming-app.cjs
167
+ ```
168
+
169
+ This generates a timestamped markdown report in `audit/` directory.
170
+
171
+ ## Version Tracking
172
+
173
+ Each rule file includes version metadata:
174
+ - `paceCoreVersion`: pace-core version these rules target
175
+ - `rulesVersion`: Date when rules were last updated
176
+
177
+ Check these to see if rules need updating.
178
+
179
+ ## Related Documentation
180
+
181
+ - [pace-core Standards](../docs/standards/README.md)
182
+ - [Getting Started Guide](../docs/getting-started/cursor-rules.md)
183
+ - [pace-core Exports](../docs/api-reference/README.md)
184
+
185
+ ## Support
186
+
187
+ For issues with cursor rules:
188
+ 1. Check this README
189
+ 2. Review rule files for guidance
190
+ 3. File an issue in pace-core repository
191
+ 4. Check pace-core documentation
@@ -101,7 +101,7 @@ interface DataTableProps<TData extends DataRecord> {
101
101
  /** Whether the table is in a loading state */
102
102
  isLoading?: boolean;
103
103
  /** Custom component to display when table is empty */
104
- emptyState?: EmptyStateConfig | React__default.ReactElement;
104
+ emptyState?: EmptyStateConfig | React__default.ReactElement<any>;
105
105
  /** Array of aggregation functions for grouped data */
106
106
  aggregates?: AggregateConfig[];
107
107
  /** Import modal configuration */
@@ -60,8 +60,8 @@ import {
60
60
  sum,
61
61
  validateHierarchicalData,
62
62
  validatePaginationConfig
63
- } from "./chunk-E3SPN4VZ.js";
64
- import "./chunk-XNXXZ43G.js";
63
+ } from "./chunk-T33XF5ZC.js";
64
+ import "./chunk-XM25TVIE.js";
65
65
  import {
66
66
  CircuitBreaker,
67
67
  DEFAULT_FALLBACK_CONFIG,
@@ -79,10 +79,10 @@ import {
79
79
  safeExecute,
80
80
  throttle,
81
81
  useDataTablePerformance
82
- } from "./chunk-6C4YBBJM.js";
83
- import "./chunk-IIELH4DL.js";
82
+ } from "./chunk-3QRJFVBR.js";
83
+ import "./chunk-3XTALGJF.js";
84
84
  import "./chunk-KQCRWDSA.js";
85
- import "./chunk-7FLMSG37.js";
85
+ import "./chunk-BYFSK72L.js";
86
86
  import "./chunk-KNC55RTG.js";
87
87
  import "./chunk-63FOKYGO.js";
88
88
  import "./chunk-QXHPKYJV.js";
@@ -170,4 +170,4 @@ export {
170
170
  validateHierarchicalData,
171
171
  validatePaginationConfig
172
172
  };
173
- //# sourceMappingURL=DataTable-5FU7IESH.js.map
173
+ //# sourceMappingURL=DataTable-DQ7RSOHE.js.map
@@ -1,11 +1,11 @@
1
1
  import * as React$1 from 'react';
2
2
  import React__default, { Component, ReactNode } from 'react';
3
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
4
  import { P as ParsedAddress, A as AutocompleteOptions } from './types-CEpcvwwF.js';
4
5
  import * as LabelPrimitive from '@radix-ui/react-label';
5
6
  import { F as FileCategory, e as FileUploadResult, U as UploadProgress, c as FileUploadOptions, a as FileReference } from './file-reference-BavO2eQj.js';
6
7
  import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
7
8
  import * as SwitchPrimitive from '@radix-ui/react-switch';
8
- import * as react_jsx_runtime from 'react/jsx-runtime';
9
9
  import * as DialogPrimitive from '@radix-ui/react-dialog';
10
10
  import * as TabsPrimitive from '@radix-ui/react-tabs';
11
11
  import { DayPickerProps, DateRange } from 'react-day-picker';
@@ -128,56 +128,6 @@ declare const CardFooter: React$1.ForwardRefExoticComponent<React$1.HTMLAttribut
128
128
  declare const CardActions: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLElement> & React$1.RefAttributes<HTMLElement>>;
129
129
  type CardActionsProps = React$1.HTMLAttributes<HTMLElement>;
130
130
 
131
- /**
132
- * @file Input Component Suite
133
- * @package @jmruthers/pace-core
134
- * @module Input
135
- * @since 0.1.0
136
- *
137
- * A comprehensive input component suite including Input and InputGroup.
138
- * Provides flexible, accessible input components with consistent styling and behavior.
139
- *
140
- * Features:
141
- * - Multiple input variants (default, destructive)
142
- * - Multiple input sizes (sm, md, lg)
143
- * - Error state styling
144
- * - Input grouping with consistent spacing
145
- * - Horizontal and vertical orientation support
146
- * - Forwarded ref support
147
- * - Composition support
148
- *
149
- * @example
150
- * ```tsx
151
- * // Basic input
152
- * <Input placeholder="Enter text" />
153
- *
154
- * // Input with variants and sizes
155
- * <Input
156
- * variant="destructive"
157
- * size="lg"
158
- * placeholder="Error input"
159
- * />
160
- *
161
- * // Input group
162
- * <InputGroup orientation="horizontal" spacing="md">
163
- * <Input placeholder="First name" />
164
- * <Input placeholder="Last name" />
165
- * </InputGroup>
166
- *
167
- * // Vertical input group
168
- * <InputGroup orientation="vertical" spacing="lg">
169
- * <Input placeholder="Email" type="email" />
170
- * <Input placeholder="Password" type="password" />
171
- * </InputGroup>
172
- * ```
173
- *
174
- * @accessibility
175
- * - Proper ARIA attributes and roles
176
- * - Keyboard navigation support
177
- * - Screen reader friendly
178
- * - Focus management
179
- */
180
-
181
131
  interface InputProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, 'size'> {
182
132
  /**
183
133
  * Input variant style
@@ -220,7 +170,12 @@ interface InputProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>,
220
170
  * />
221
171
  * ```
222
172
  */
223
- declare const Input: React$1.ForwardRefExoticComponent<InputProps & React$1.RefAttributes<HTMLInputElement>>;
173
+ declare function Input({ className, variant, size, error, type, ref, ...props }: InputProps & {
174
+ ref?: React$1.Ref<HTMLInputElement>;
175
+ }): react_jsx_runtime.JSX.Element;
176
+ declare namespace Input {
177
+ var displayName: string;
178
+ }
224
179
 
225
180
  /**
226
181
  * @file AddressField Component Types
@@ -400,7 +355,7 @@ declare const AddressField: React$1.ForwardRefExoticComponent<AddressFieldProps
400
355
  *
401
356
  * @dependencies
402
357
  * - @radix-ui/react-label - Core label functionality
403
- * - React 18+ - Hooks and refs
358
+ * - React 19+ - Hooks and refs
404
359
  * - Tailwind CSS - Styling
405
360
  */
406
361
 
@@ -440,48 +395,6 @@ interface LabelProps extends React$1.ComponentPropsWithoutRef<typeof LabelPrimit
440
395
  */
441
396
  declare const Label: React$1.ForwardRefExoticComponent<LabelProps & React$1.RefAttributes<HTMLLabelElement>>;
442
397
 
443
- /**
444
- * @file Textarea Component
445
- * @package @jmruthers/pace-core
446
- * @module Textarea
447
- * @since 0.5.141
448
- *
449
- * A multi-line text input component with consistent styling matching the Input component.
450
- * Provides flexible, accessible textarea component with consistent styling and behavior.
451
- *
452
- * Features:
453
- * - Multiple textarea variants (default, destructive)
454
- * - Multiple textarea sizes (sm, md, lg)
455
- * - Error state styling
456
- * - Forwarded ref support
457
- * - Consistent styling with Input component
458
- *
459
- * @example
460
- * ```tsx
461
- * // Basic textarea
462
- * <Textarea placeholder="Enter your message..." />
463
- *
464
- * // Textarea with variants and sizes
465
- * <Textarea
466
- * variant="destructive"
467
- * size="lg"
468
- * placeholder="Error textarea"
469
- * />
470
- *
471
- * // Textarea with error state
472
- * <Textarea
473
- * placeholder="Comments"
474
- * error={true}
475
- * />
476
- * ```
477
- *
478
- * @accessibility
479
- * - Proper ARIA attributes and roles
480
- * - Keyboard navigation support
481
- * - Screen reader friendly
482
- * - Focus management
483
- */
484
-
485
398
  interface TextareaProps extends React$1.TextareaHTMLAttributes<HTMLTextAreaElement> {
486
399
  /**
487
400
  * Textarea variant style
@@ -524,7 +437,12 @@ interface TextareaProps extends React$1.TextareaHTMLAttributes<HTMLTextAreaEleme
524
437
  * />
525
438
  * ```
526
439
  */
527
- declare const Textarea: React$1.ForwardRefExoticComponent<TextareaProps & React$1.RefAttributes<HTMLTextAreaElement>>;
440
+ declare function Textarea({ className, variant, size, error, ref, ...props }: TextareaProps & {
441
+ ref?: React$1.Ref<HTMLTextAreaElement>;
442
+ }): react_jsx_runtime.JSX.Element;
443
+ declare namespace Textarea {
444
+ var displayName: string;
445
+ }
528
446
 
529
447
  /**
530
448
  * @file Alert Component Suite
@@ -652,50 +570,6 @@ interface AvatarProps extends React$1.HTMLAttributes<HTMLDivElement> {
652
570
  */
653
571
  declare const Avatar: React$1.ForwardRefExoticComponent<AvatarProps & React$1.RefAttributes<HTMLDivElement>>;
654
572
 
655
- /**
656
- * @file Badge Component
657
- * @package @jmruthers/pace-core
658
- * @module Components
659
- * @since 0.1.0
660
- *
661
- * A small, non-interactive visual label component for displaying concise information
662
- * such as status indicators, tags, or labels. Acts as a visual alternative to buttons
663
- * for non-interactive content.
664
- *
665
- * Features:
666
- * - 27 combined variants (3 styles × 3 colors × 3 shades)
667
- * - Non-interactive by default (renders as <span>)
668
- * - Supports all pace-core color palettes (main, sec, acc)
669
- * - Customizable styling via className prop
670
- * - Accessible and screen reader friendly
671
- *
672
- * @example
673
- * ```tsx
674
- * // Basic badge with default variant
675
- * <Badge>New</Badge>
676
- *
677
- * // Badge with specific variant
678
- * <Badge variant="solid-main-normal">Active</Badge>
679
- *
680
- * // Outline variant
681
- * <Badge variant="outline-sec-muted">Pending</Badge>
682
- *
683
- * // Soft variant with accent color
684
- * <Badge variant="soft-acc-strong">Featured</Badge>
685
- *
686
- * // Custom styling
687
- * <Badge variant="solid-main-normal" className="px-4">
688
- * Custom Badge
689
- * </Badge>
690
- * ```
691
- *
692
- * @accessibility
693
- * - Renders as semantic <span> element
694
- * - No focus styles (non-interactive by default)
695
- * - Screen reader friendly through semantic HTML
696
- * - Can be wrapped in interactive elements if needed
697
- */
698
-
699
573
  type BadgeVariant = 'solid-main-muted' | 'solid-main-normal' | 'solid-main-strong' | 'solid-sec-muted' | 'solid-sec-normal' | 'solid-sec-strong' | 'solid-acc-muted' | 'solid-acc-normal' | 'solid-acc-strong' | 'outline-main-muted' | 'outline-main-normal' | 'outline-main-strong' | 'outline-sec-muted' | 'outline-sec-normal' | 'outline-sec-strong' | 'outline-acc-muted' | 'outline-acc-normal' | 'outline-acc-strong' | 'soft-main-muted' | 'soft-main-normal' | 'soft-main-strong' | 'soft-sec-muted' | 'soft-sec-normal' | 'soft-sec-strong' | 'soft-acc-muted' | 'soft-acc-normal' | 'soft-acc-strong';
700
574
  interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
701
575
  /** Visual variant of the badge (style-color-shade) */
@@ -721,7 +595,12 @@ interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
721
595
  * <Badge variant="soft-acc-strong">Featured</Badge>
722
596
  * ```
723
597
  */
724
- declare const Badge: React$1.ForwardRefExoticComponent<BadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
598
+ declare function Badge({ className, variant, ref, ...props }: BadgeProps & {
599
+ ref?: React$1.Ref<HTMLSpanElement>;
600
+ }): react_jsx_runtime.JSX.Element;
601
+ declare namespace Badge {
602
+ var displayName: string;
603
+ }
725
604
 
726
605
  /**
727
606
  * @file Checkbox Component
@@ -923,7 +802,7 @@ declare const Switch: React$1.ForwardRefExoticComponent<SwitchProps & React$1.Re
923
802
  * - Minimal DOM structure (native HTML element)
924
803
  *
925
804
  * @dependencies
926
- * - React 18+ - Hooks and refs
805
+ * - React 19+ - Hooks and refs
927
806
  * - Tailwind CSS - Styling
928
807
  */
929
808
 
@@ -1673,7 +1552,7 @@ declare function Toaster(): react_jsx_runtime.JSX.Element;
1673
1552
  *
1674
1553
  * @dependencies
1675
1554
  * - @radix-ui/react-tooltip - Core tooltip functionality
1676
- * - React 18+ - Hooks and refs
1555
+ * - React 19+ - Hooks and refs
1677
1556
  * - Tailwind CSS - Styling and animations
1678
1557
  */
1679
1558
 
@@ -1829,7 +1708,7 @@ interface FormFieldProps<TFieldValues extends FieldValues = FieldValues, TName e
1829
1708
  field: ControllerRenderProps<TFieldValues, TName>;
1830
1709
  fieldState: ControllerFieldState;
1831
1710
  formState: UseFormStateReturn<TFieldValues>;
1832
- }) => React__default.ReactElement;
1711
+ }) => React__default.ReactElement<any>;
1833
1712
  /**
1834
1713
  * Test ID
1835
1714
  */
@@ -1999,7 +1878,7 @@ declare function FormField<TFieldValues extends FieldValues = FieldValues, TName
1999
1878
  * - Minimal re-renders
2000
1879
  *
2001
1880
  * @dependencies
2002
- * - React 18+ - Hooks and memo
1881
+ * - React 19+ - Hooks and memo
2003
1882
  * - Button component
2004
1883
  * - Input component
2005
1884
  * - Label component
@@ -2239,7 +2118,7 @@ declare const LoginForm: React__default.NamedExoticComponent<LoginFormProps>;
2239
2118
  * - Responsive design considerations
2240
2119
  *
2241
2120
  * @dependencies
2242
- * - React 18+ - Component framework and hooks
2121
+ * - React 19+ - Component framework and hooks
2243
2122
  * - Lucide React - Icon components
2244
2123
  * - Radix UI - Dropdown menu primitives
2245
2124
  * - React Router (optional) - For navigation handling
@@ -2581,7 +2460,7 @@ declare const NavigationMenu: React$1.ForwardRefExoticComponent<NavigationMenuPr
2581
2460
  * - Proper error handling
2582
2461
  *
2583
2462
  * @dependencies
2584
- * - React 18+ - Hooks and state
2463
+ * - React 19+ - Hooks and state
2585
2464
  * - Button component
2586
2465
  * - Input component
2587
2466
  * - Label component
@@ -2828,7 +2707,7 @@ declare function Header({ logoUrl, logoAlt, logo, navItems, user, onSignOut, onC
2828
2707
  * - Clear link identification
2829
2708
  *
2830
2709
  * @dependencies
2831
- * - React 18+ - Component framework
2710
+ * - React 19+ - Component framework
2832
2711
  * - Tailwind CSS - Styling
2833
2712
  */
2834
2713
 
@@ -2960,7 +2839,7 @@ declare const Footer: React__default.NamedExoticComponent<FooterProps>;
2960
2839
  * - Optimized avatar rendering
2961
2840
  *
2962
2841
  * @dependencies
2963
- * - React 18+ - Hooks and memo
2842
+ * - React 19+ - Hooks and memo
2964
2843
  * - @supabase/supabase-js - User type
2965
2844
  * - lucide-react - Icons
2966
2845
  * - DropdownMenu components
@@ -3314,7 +3193,7 @@ declare function PaceAppLayout({ appName, navItems, showEventSelector, showOrgSe
3314
3193
  * - Automatic redirect prevention loops
3315
3194
  *
3316
3195
  * @dependencies
3317
- * - React 18+ - Hooks and effects
3196
+ * - React 19+ - Hooks and effects
3318
3197
  * - React Router v6 - Navigation
3319
3198
  * - UnifiedAuthProvider - Authentication
3320
3199
  * - LoginForm component
@@ -3405,7 +3284,7 @@ interface ProtectedRouteProps {
3405
3284
  * @param props - Configuration for route protection
3406
3285
  * @returns React element with route protection logic
3407
3286
  */
3408
- declare function ProtectedRoute({ requireEvent, allowSuperAdminBypass, noEventsFallback, loadingFallback, loginPath }: ProtectedRouteProps): string | number | true | Iterable<React__default.ReactNode> | react_jsx_runtime.JSX.Element;
3287
+ declare function ProtectedRoute({ requireEvent, allowSuperAdminBypass, noEventsFallback, loadingFallback, loginPath }: ProtectedRouteProps): string | number | bigint | true | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element;
3409
3288
 
3410
3289
  /**
3411
3290
  * State interface for the ErrorBoundary component
@@ -3468,7 +3347,7 @@ declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryS
3468
3347
  private reportError;
3469
3348
  private handleRetry;
3470
3349
  componentWillUnmount(): void;
3471
- render(): string | number | boolean | Iterable<React__default.ReactNode> | react_jsx_runtime.JSX.Element | null | undefined;
3350
+ render(): string | number | bigint | boolean | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element | null | undefined;
3472
3351
  }
3473
3352
 
3474
3353
  /**
@@ -3525,7 +3404,7 @@ declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryS
3525
3404
  * - Efficient rendering
3526
3405
  *
3527
3406
  * @dependencies
3528
- * - React 18+ - Component framework
3407
+ * - React 19+ - Component framework
3529
3408
  * - Tailwind CSS - Styling and animations
3530
3409
  */
3531
3410
 
@@ -3584,7 +3463,7 @@ declare const LoadingSpinner: React__default.FC<LoadingSpinnerProps>;
3584
3463
  * - High contrast support
3585
3464
  *
3586
3465
  * @dependencies
3587
- * - React 18+ - Component framework
3466
+ * - React 19+ - Component framework
3588
3467
  * - LoadingSpinner - Spinner component
3589
3468
  * - Tailwind CSS - Styling
3590
3469
  */
@@ -3936,7 +3815,7 @@ type UseFileReferenceForRecordReturn = {
3936
3815
  * - Caption for table description
3937
3816
  *
3938
3817
  * @dependencies
3939
- * - React 18+ - Hooks and refs
3818
+ * - React 19+ - Hooks and refs
3940
3819
  * - Tailwind CSS - Styling
3941
3820
  */
3942
3821
 
@@ -2,7 +2,7 @@ import {
2
2
  UnifiedAuthContext,
3
3
  UnifiedAuthProvider,
4
4
  useUnifiedAuth
5
- } from "./chunk-7FLMSG37.js";
5
+ } from "./chunk-BYFSK72L.js";
6
6
  import "./chunk-KNC55RTG.js";
7
7
  import "./chunk-63FOKYGO.js";
8
8
  import "./chunk-QXHPKYJV.js";
@@ -14,4 +14,4 @@ export {
14
14
  UnifiedAuthProvider,
15
15
  useUnifiedAuth
16
16
  };
17
- //# sourceMappingURL=UnifiedAuthProvider-RGJTDE2C.js.map
17
+ //# sourceMappingURL=UnifiedAuthProvider-ATAP5UTR.js.map
@@ -625,4 +625,4 @@ export {
625
625
  safeExecute,
626
626
  useDataTablePerformance
627
627
  };
628
- //# sourceMappingURL=chunk-6C4YBBJM.js.map
628
+ //# sourceMappingURL=chunk-3QRJFVBR.js.map