@jmruthers/pace-core 0.6.4 → 0.6.5

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 (101) hide show
  1. package/dist/{DataTable-E7YQZD7D.js → DataTable-AOVNCPTX.js} +8 -8
  2. package/dist/{PublicPageProvider-DEMpysFR.d.ts → PublicPageProvider-QTFVrL-Z.d.ts} +65 -83
  3. package/dist/{UnifiedAuthProvider-QPXO24B4.js → UnifiedAuthProvider-4SBX4LU5.js} +4 -4
  4. package/dist/{api-6LVZTHDS.js → api-O6HTBX5Y.js} +3 -3
  5. package/dist/{chunk-I6DAQMWX.js → chunk-6COVEUS7.js} +130 -106
  6. package/dist/chunk-6COVEUS7.js.map +1 -0
  7. package/dist/{chunk-36LVWXB2.js → chunk-AFVQODI2.js} +37 -1
  8. package/dist/{chunk-36LVWXB2.js.map → chunk-AFVQODI2.js.map} +1 -1
  9. package/dist/{chunk-3LPHPB62.js → chunk-EFN2EIMK.js} +2 -2
  10. package/dist/{chunk-ATKZM7RX.js → chunk-G7QEZTYQ.js} +31 -31
  11. package/dist/{chunk-ATKZM7RX.js.map → chunk-G7QEZTYQ.js.map} +1 -1
  12. package/dist/{chunk-NN6WWZ5U.js → chunk-HU2C6SSC.js} +29 -18
  13. package/dist/chunk-HU2C6SSC.js.map +1 -0
  14. package/dist/{chunk-AVMLPIM7.js → chunk-IHB5DR3H.js} +102 -51
  15. package/dist/chunk-IHB5DR3H.js.map +1 -0
  16. package/dist/{chunk-7JPAB3T5.js → chunk-IVOFDYWT.js} +364 -208
  17. package/dist/chunk-IVOFDYWT.js.map +1 -0
  18. package/dist/{chunk-6SOIHG6Z.js → chunk-JGRYX5UX.js} +120 -20
  19. package/dist/chunk-JGRYX5UX.js.map +1 -0
  20. package/dist/{chunk-OEWDTMG7.js → chunk-NTM7ZSB6.js} +4 -4
  21. package/dist/chunk-NTM7ZSB6.js.map +1 -0
  22. package/dist/{chunk-5EC5MEWX.js → chunk-RGAWHO7N.js} +4 -4
  23. package/dist/chunk-RGAWHO7N.js.map +1 -0
  24. package/dist/{chunk-YKRAFF5K.js → chunk-UPPMRMYG.js} +3 -3
  25. package/dist/{chunk-YKRAFF5K.js.map → chunk-UPPMRMYG.js.map} +1 -1
  26. package/dist/components.d.ts +2 -3
  27. package/dist/components.js +24 -28
  28. package/dist/components.js.map +1 -1
  29. package/dist/{contextValidator-OOPCLPZW.js → contextValidator-5OGXSPKS.js} +2 -2
  30. package/dist/hooks.d.ts +3 -3
  31. package/dist/hooks.js +41 -139
  32. package/dist/hooks.js.map +1 -1
  33. package/dist/index.d.ts +27 -18
  34. package/dist/index.js +41 -50
  35. package/dist/index.js.map +1 -1
  36. package/dist/providers.js +3 -3
  37. package/dist/rbac/index.d.ts +16 -9
  38. package/dist/rbac/index.js +6 -6
  39. package/dist/{usePublicRouteParams-i3qtoBgg.d.ts → usePublicRouteParams-ClnV4tnv.d.ts} +8 -8
  40. package/dist/utils.js +1 -1
  41. package/docs/api/modules.md +210 -100
  42. package/package.json +1 -2
  43. package/scripts/validate-master.js +1 -1
  44. package/src/components/DataTable/__tests__/keyboard.test.tsx +15 -2
  45. package/src/components/DataTable/components/ImportModal.tsx +4 -6
  46. package/src/components/DataTable/components/ViewRowModal.tsx +4 -4
  47. package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +455 -96
  48. package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +122 -58
  49. package/src/components/DataTable/core/DataTableContext.tsx +1 -1
  50. package/src/components/DateTimeField/DateTimeField.tsx +17 -19
  51. package/src/components/DateTimeField/README.md +5 -2
  52. package/src/components/Dialog/Dialog.test.tsx +248 -228
  53. package/src/components/Dialog/Dialog.tsx +455 -325
  54. package/src/components/Dialog/index.ts +3 -3
  55. package/src/components/FileDisplay/FileDisplay.test.tsx +41 -0
  56. package/src/components/FileDisplay/FileDisplay.tsx +5 -5
  57. package/src/components/Form/Form.test.tsx +3 -2
  58. package/src/components/Form/Form.tsx +4 -5
  59. package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +28 -28
  60. package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +40 -54
  61. package/src/components/LoginForm/LoginForm.tsx +2 -2
  62. package/src/components/NavigationMenu/NavigationMenu.tsx +2 -2
  63. package/src/components/PaceAppLayout/PaceAppLayout.tsx +32 -39
  64. package/src/components/PaceAppLayout/README.md +10 -9
  65. package/src/components/PaceAppLayout/test-setup.tsx +40 -31
  66. package/src/components/PasswordChange/PasswordChangeForm.test.tsx +61 -0
  67. package/src/components/PasswordChange/PasswordChangeForm.tsx +20 -13
  68. package/src/components/PublicLayout/PublicLayout.test.tsx +7 -3
  69. package/src/components/PublicLayout/PublicPageLayout.tsx +5 -8
  70. package/src/components/UserMenu/UserMenu.test.tsx +38 -6
  71. package/src/components/UserMenu/UserMenu.tsx +36 -34
  72. package/src/components/index.ts +3 -4
  73. package/src/hooks/useEventTheme.ts +4 -4
  74. package/src/hooks/useEvents.ts +11 -7
  75. package/src/hooks/useKeyboardShortcuts.ts +1 -1
  76. package/src/hooks/useOrganisationPermissions.ts +4 -4
  77. package/src/hooks/useOrganisations.ts +13 -7
  78. package/src/index.ts +11 -1
  79. package/src/rbac/README.md +20 -20
  80. package/src/rbac/hooks/useRBAC.test.ts +21 -3
  81. package/src/rbac/hooks/useRBAC.ts +4 -3
  82. package/src/rbac/hooks/useResourcePermissions.test.ts +125 -30
  83. package/src/rbac/hooks/useResourcePermissions.ts +57 -29
  84. package/src/rbac/permissions.ts +17 -17
  85. package/src/rbac/utils/contextValidator.ts +36 -0
  86. package/src/services/AuthService.ts +2 -5
  87. package/src/services/InactivityService.ts +139 -58
  88. package/src/styles/core.css +4 -0
  89. package/src/utils/formatting/formatTime.test.ts +3 -2
  90. package/dist/chunk-5EC5MEWX.js.map +0 -1
  91. package/dist/chunk-6SOIHG6Z.js.map +0 -1
  92. package/dist/chunk-7JPAB3T5.js.map +0 -1
  93. package/dist/chunk-AVMLPIM7.js.map +0 -1
  94. package/dist/chunk-I6DAQMWX.js.map +0 -1
  95. package/dist/chunk-NN6WWZ5U.js.map +0 -1
  96. package/dist/chunk-OEWDTMG7.js.map +0 -1
  97. /package/dist/{DataTable-E7YQZD7D.js.map → DataTable-AOVNCPTX.js.map} +0 -0
  98. /package/dist/{UnifiedAuthProvider-QPXO24B4.js.map → UnifiedAuthProvider-4SBX4LU5.js.map} +0 -0
  99. /package/dist/{api-6LVZTHDS.js.map → api-O6HTBX5Y.js.map} +0 -0
  100. /package/dist/{chunk-3LPHPB62.js.map → chunk-EFN2EIMK.js.map} +0 -0
  101. /package/dist/{contextValidator-OOPCLPZW.js.map → contextValidator-5OGXSPKS.js.map} +0 -0
@@ -69,6 +69,14 @@ import { Dialog, NavigationMenu } from '@jmruthers/pace-core/components';
69
69
  - [EmptyStateConfig](undefined)
70
70
  - [ExportOptions](undefined)
71
71
  - [ExportColumn](undefined)
72
+ - [DialogProps](undefined)
73
+ - [DialogTriggerProps](undefined)
74
+ - [DialogContentProps](undefined)
75
+ - [DialogPortalProps](undefined)
76
+ - [DialogCloseProps](undefined)
77
+ - [DialogHeaderProps](undefined)
78
+ - [DialogFooterProps](undefined)
79
+ - [DialogBodyProps](undefined)
72
80
  - [ErrorBoundaryState](undefined)
73
81
  - [ErrorBoundaryProps](undefined)
74
82
  - [ErrorBoundaryProviderProps](undefined)
@@ -200,6 +208,7 @@ import { Dialog, NavigationMenu } from '@jmruthers/pace-core/components';
200
208
  - [BadgeVariant](undefined)
201
209
  - [GetRowId](undefined)
202
210
  - [DataTableFeatureConfig](undefined)
211
+ - [DialogSize](undefined)
203
212
  - [GlobalErrorHandler](undefined)
204
213
  - [NavigationMode](undefined)
205
214
  - [UseFileReferenceOptions](undefined)
@@ -275,9 +284,8 @@ import { Dialog, NavigationMenu } from '@jmruthers/pace-core/components';
275
284
  - [Dialog](undefined)
276
285
  - [DialogTrigger](undefined)
277
286
  - [DialogPortal](undefined)
278
- - [DialogClose](undefined)
279
- - [DialogOverlay](undefined)
280
287
  - [DialogContent](undefined)
288
+ - [DialogClose](undefined)
281
289
  - [DialogHeader](undefined)
282
290
  - [DialogBody](undefined)
283
291
  - [DialogFooter](undefined)
@@ -972,6 +980,103 @@ Column definition for export
972
980
 
973
981
  ___
974
982
 
983
+ ### DialogProps
984
+
985
+ • **DialogProps**: Interface DialogProps
986
+
987
+ Props for the Dialog root component
988
+
989
+ #### Defined in
990
+
991
+ [packages/core/src/components/Dialog/Dialog.tsx:161](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L161)
992
+
993
+ ___
994
+
995
+ ### DialogTriggerProps
996
+
997
+ • **DialogTriggerProps**: Interface DialogTriggerProps
998
+
999
+ Props for the DialogTrigger component
1000
+
1001
+ #### Defined in
1002
+
1003
+ [packages/core/src/components/Dialog/Dialog.tsx:172](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L172)
1004
+
1005
+ ___
1006
+
1007
+ ### DialogContentProps
1008
+
1009
+ • **DialogContentProps**: Interface DialogContentProps
1010
+
1011
+ Enhanced props for the DialogContent component with size variants and customization
1012
+ Uses semantic HTML dialog element
1013
+
1014
+ #### Defined in
1015
+
1016
+ [packages/core/src/components/Dialog/Dialog.tsx:184](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L184)
1017
+
1018
+ ___
1019
+
1020
+ ### DialogPortalProps
1021
+
1022
+ • **DialogPortalProps**: Interface DialogPortalProps
1023
+
1024
+ Props for the DialogPortal component
1025
+
1026
+ #### Defined in
1027
+
1028
+ [packages/core/src/components/Dialog/Dialog.tsx:223](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L223)
1029
+
1030
+ ___
1031
+
1032
+ ### DialogCloseProps
1033
+
1034
+ • **DialogCloseProps**: Interface DialogCloseProps
1035
+
1036
+ Props for the DialogClose component
1037
+
1038
+ #### Defined in
1039
+
1040
+ [packages/core/src/components/Dialog/Dialog.tsx:231](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L231)
1041
+
1042
+ ___
1043
+
1044
+ ### DialogHeaderProps
1045
+
1046
+ • **DialogHeaderProps**: Interface DialogHeaderProps
1047
+
1048
+ Props for the DialogHeader component (semantic header element)
1049
+
1050
+ #### Defined in
1051
+
1052
+ [packages/core/src/components/Dialog/Dialog.tsx:237](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L237)
1053
+
1054
+ ___
1055
+
1056
+ ### DialogFooterProps
1057
+
1058
+ • **DialogFooterProps**: Interface DialogFooterProps
1059
+
1060
+ Props for the DialogFooter component (semantic footer element)
1061
+
1062
+ #### Defined in
1063
+
1064
+ [packages/core/src/components/Dialog/Dialog.tsx:246](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L246)
1065
+
1066
+ ___
1067
+
1068
+ ### DialogBodyProps
1069
+
1070
+ • **DialogBodyProps**: Interface DialogBodyProps
1071
+
1072
+ Props for the DialogBody component (semantic main element)
1073
+
1074
+ #### Defined in
1075
+
1076
+ [packages/core/src/components/Dialog/Dialog.tsx:255](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L255)
1077
+
1078
+ ___
1079
+
975
1080
  ### ErrorBoundaryState
976
1081
 
977
1082
  • **ErrorBoundaryState**: Interface ErrorBoundaryState
@@ -1057,7 +1162,7 @@ Props for the Form component
1057
1162
 
1058
1163
  #### Defined in
1059
1164
 
1060
- [packages/core/src/components/Form/Form.tsx:84](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Form/Form.tsx#L84)
1165
+ [packages/core/src/components/Form/Form.tsx:83](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Form/Form.tsx#L83)
1061
1166
 
1062
1167
  ___
1063
1168
 
@@ -1076,7 +1181,7 @@ Props for the FormField component
1076
1181
 
1077
1182
  #### Defined in
1078
1183
 
1079
- [packages/core/src/components/Form/Form.tsx:173](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Form/Form.tsx#L173)
1184
+ [packages/core/src/components/Form/Form.tsx:172](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Form/Form.tsx#L172)
1080
1185
 
1081
1186
  ___
1082
1187
 
@@ -1086,7 +1191,7 @@ ___
1086
1191
 
1087
1192
  #### Defined in
1088
1193
 
1089
- [packages/core/src/components/InactivityWarningModal/InactivityWarningModal.tsx:55](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/InactivityWarningModal/InactivityWarningModal.tsx#L55)
1194
+ [packages/core/src/components/InactivityWarningModal/InactivityWarningModal.tsx:56](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/InactivityWarningModal/InactivityWarningModal.tsx#L56)
1090
1195
 
1091
1196
  ___
1092
1197
 
@@ -1161,7 +1266,7 @@ Configures the application layout including navigation, header, and footer.
1161
1266
 
1162
1267
  #### Defined in
1163
1268
 
1164
- [packages/core/src/components/PaceAppLayout/PaceAppLayout.tsx:129](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/PaceAppLayout/PaceAppLayout.tsx#L129)
1269
+ [packages/core/src/components/PaceAppLayout/PaceAppLayout.tsx:130](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/PaceAppLayout/PaceAppLayout.tsx#L130)
1165
1270
 
1166
1271
  ___
1167
1272
 
@@ -1335,7 +1440,7 @@ Props for the UserMenu component.
1335
1440
 
1336
1441
  #### Defined in
1337
1442
 
1338
- [packages/core/src/components/UserMenu/UserMenu.tsx:132](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/UserMenu/UserMenu.tsx#L132)
1443
+ [packages/core/src/components/UserMenu/UserMenu.tsx:130](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/UserMenu/UserMenu.tsx#L130)
1339
1444
 
1340
1445
  ___
1341
1446
 
@@ -2422,6 +2527,18 @@ ergonomic while maintaining strict internal guarantees.
2422
2527
 
2423
2528
  ___
2424
2529
 
2530
+ ### DialogSize
2531
+
2532
+ Ƭ **DialogSize**: "sm" \| "md" \| "lg" \| "xl" \| "full" \| "auto"
2533
+
2534
+ Dialog size variants
2535
+
2536
+ #### Defined in
2537
+
2538
+ [packages/core/src/components/Dialog/Dialog.tsx:131](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L131)
2539
+
2540
+ ___
2541
+
2425
2542
  ### GlobalErrorHandler
2426
2543
 
2427
2544
  Ƭ **GlobalErrorHandler**: Function
@@ -3960,7 +4077,7 @@ ___
3960
4077
 
3961
4078
  ### Dialog
3962
4079
 
3963
- ▸ **Dialog**(`props`): ReactNode \| Promise\<ReactNode\>
4080
+ ▸ **Dialog**(`props`): ReactNode
3964
4081
 
3965
4082
  #### Parameters
3966
4083
 
@@ -3970,11 +4087,11 @@ ___
3970
4087
 
3971
4088
  #### Returns
3972
4089
 
3973
- ReactNode \| Promise\<ReactNode\>
4090
+ ReactNode
3974
4091
 
3975
4092
  #### Defined in
3976
4093
 
3977
- [packages/core/src/components/Dialog/Dialog.tsx:316](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L316)
4094
+ [packages/core/src/components/Dialog/Dialog.tsx:304](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L304)
3978
4095
 
3979
4096
  ___
3980
4097
 
@@ -3986,7 +4103,7 @@ ___
3986
4103
 
3987
4104
  | Name | Type |
3988
4105
  | :------ | :------ |
3989
- | `props` | DialogTriggerProps & RefAttributes\<HTMLButtonElement\> |
4106
+ | `props` | DialogTriggerProps & RefAttributes\<HTMLElement\> |
3990
4107
 
3991
4108
  #### Returns
3992
4109
 
@@ -3994,7 +4111,7 @@ ReactNode
3994
4111
 
3995
4112
  #### Defined in
3996
4113
 
3997
- [packages/core/src/components/Dialog/Dialog.tsx:317](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L317)
4114
+ [packages/core/src/components/Dialog/Dialog.tsx:345](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L345)
3998
4115
 
3999
4116
  ___
4000
4117
 
@@ -4014,135 +4131,111 @@ ReactNode \| Promise\<ReactNode\>
4014
4131
 
4015
4132
  #### Defined in
4016
4133
 
4017
- [packages/core/src/components/Dialog/Dialog.tsx:318](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L318)
4134
+ [packages/core/src/components/Dialog/Dialog.tsx:382](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L382)
4135
+
4136
+ [packages/core/src/components/Dialog/Dialog.tsx:394](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L394)
4018
4137
 
4019
4138
  ___
4020
4139
 
4021
- ### DialogClose
4140
+ ### DialogContent
4022
4141
 
4023
- ▸ **DialogClose**(`props`): ReactNode
4142
+ ▸ **DialogContent**(`props`): ReactNode
4024
4143
 
4025
4144
  #### Parameters
4026
4145
 
4027
- | Name | Type |
4028
- | :------ | :------ |
4029
- | `props` | DialogCloseProps & RefAttributes\<HTMLButtonElement\> |
4146
+ | Name | Type | Description |
4147
+ | :------ | :------ | :------ |
4148
+ | `props` | DialogContentProps & RefAttributes\<HTMLDialogElement\> | Content configuration and styling |
4030
4149
 
4031
4150
  #### Returns
4032
4151
 
4033
4152
  ReactNode
4034
4153
 
4154
+ JSX.Element - The semantic dialog content with overlay and optional close button
4155
+
4035
4156
  #### Defined in
4036
4157
 
4037
- [packages/core/src/components/Dialog/Dialog.tsx:319](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L319)
4158
+ [packages/core/src/components/Dialog/Dialog.tsx:523](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L523)
4038
4159
 
4039
4160
  ___
4040
4161
 
4041
- ### DialogOverlay
4162
+ ### DialogClose
4042
4163
 
4043
- ▸ **DialogOverlay**(`props`): ReactNode
4164
+ ▸ **DialogClose**(`props`): ReactNode
4044
4165
 
4045
4166
  #### Parameters
4046
4167
 
4047
4168
  | Name | Type |
4048
4169
  | :------ | :------ |
4049
- | `props` | DialogOverlayProps & RefAttributes\<HTMLDivElement\> |
4050
-
4051
- #### Returns
4052
-
4053
- ReactNode
4054
-
4055
- #### Defined in
4056
-
4057
- [packages/core/src/components/Dialog/Dialog.tsx:322](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L322)
4058
-
4059
- ___
4060
-
4061
- ### DialogContent
4062
-
4063
- ▸ **DialogContent**(`props`): ReactNode
4064
-
4065
- #### Parameters
4066
-
4067
- | Name | Type | Description |
4068
- | :------ | :------ | :------ |
4069
- | `props` | DialogContentProps & RefAttributes\<HTMLDivElement\> | Content configuration and styling |
4170
+ | `props` | DialogCloseProps & RefAttributes\<HTMLButtonElement\> |
4070
4171
 
4071
4172
  #### Returns
4072
4173
 
4073
4174
  ReactNode
4074
4175
 
4075
- JSX.Element - The semantic dialog content with overlay and optional close button
4076
-
4077
4176
  #### Defined in
4078
4177
 
4079
- [packages/core/src/components/Dialog/Dialog.tsx:465](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L465)
4178
+ [packages/core/src/components/Dialog/Dialog.tsx:715](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L715)
4080
4179
 
4081
4180
  ___
4082
4181
 
4083
4182
  ### DialogHeader
4084
4183
 
4085
- ▸ **DialogHeader**(`props`): Element
4184
+ ▸ **DialogHeader**(`«destructured»`): Element
4086
4185
 
4087
4186
  #### Parameters
4088
4187
 
4089
- | Name | Type | Description |
4090
- | :------ | :------ | :------ |
4091
- | `props` | DialogHeaderProps | Header configuration and styling |
4188
+ | Name | Type |
4189
+ | :------ | :------ |
4190
+ | `«destructured»` | DialogHeaderProps |
4092
4191
 
4093
4192
  #### Returns
4094
4193
 
4095
4194
  Element
4096
4195
 
4097
- JSX.Element - The dialog header container using semantic <header> element
4098
-
4099
4196
  #### Defined in
4100
4197
 
4101
- [packages/core/src/components/Dialog/Dialog.tsx:584](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L584)
4198
+ [packages/core/src/components/Dialog/Dialog.tsx:742](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L742)
4102
4199
 
4103
4200
  ___
4104
4201
 
4105
4202
  ### DialogBody
4106
4203
 
4107
- ▸ **DialogBody**(`props`): Element
4204
+ ▸ **DialogBody**(`«destructured»`): Element
4108
4205
 
4109
4206
  #### Parameters
4110
4207
 
4111
- | Name | Type | Description |
4112
- | :------ | :------ | :------ |
4113
- | `props` | DialogBodyProps | Body configuration and styling |
4208
+ | Name | Type |
4209
+ | :------ | :------ |
4210
+ | `«destructured»` | DialogBodyProps |
4114
4211
 
4115
4212
  #### Returns
4116
4213
 
4117
4214
  Element
4118
4215
 
4119
- JSX.Element - The scrollable dialog body container using semantic <main> element
4120
-
4121
4216
  #### Defined in
4122
4217
 
4123
- [packages/core/src/components/Dialog/Dialog.tsx:625](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L625)
4218
+ [packages/core/src/components/Dialog/Dialog.tsx:762](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L762)
4124
4219
 
4125
4220
  ___
4126
4221
 
4127
4222
  ### DialogFooter
4128
4223
 
4129
- ▸ **DialogFooter**(`props`): Element
4224
+ ▸ **DialogFooter**(`«destructured»`): Element
4130
4225
 
4131
4226
  #### Parameters
4132
4227
 
4133
- | Name | Type | Description |
4134
- | :------ | :------ | :------ |
4135
- | `props` | DialogFooterProps | Footer configuration and styling |
4228
+ | Name | Type |
4229
+ | :------ | :------ |
4230
+ | `«destructured»` | DialogFooterProps |
4136
4231
 
4137
4232
  #### Returns
4138
4233
 
4139
4234
  Element
4140
4235
 
4141
- JSX.Element - The dialog footer container using semantic <footer> element
4142
-
4143
4236
  #### Defined in
4144
4237
 
4145
- [packages/core/src/components/Dialog/Dialog.tsx:706](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L706)
4238
+ [packages/core/src/components/Dialog/Dialog.tsx:830](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L830)
4146
4239
 
4147
4240
  ___
4148
4241
 
@@ -4162,7 +4255,7 @@ ReactNode
4162
4255
 
4163
4256
  #### Defined in
4164
4257
 
4165
- [packages/core/src/components/Dialog/Dialog.tsx:723](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L723)
4258
+ [packages/core/src/components/Dialog/Dialog.tsx:850](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L850)
4166
4259
 
4167
4260
  ___
4168
4261
 
@@ -4174,7 +4267,7 @@ ___
4174
4267
 
4175
4268
  | Name | Type |
4176
4269
  | :------ | :------ |
4177
- | `props` | DialogDescriptionProps & RefAttributes\<HTMLHeadingElement\> |
4270
+ | `props` | DialogDescriptionProps & RefAttributes\<HTMLParagraphElement\> |
4178
4271
 
4179
4272
  #### Returns
4180
4273
 
@@ -4182,7 +4275,7 @@ ReactNode
4182
4275
 
4183
4276
  #### Defined in
4184
4277
 
4185
- [packages/core/src/components/Dialog/Dialog.tsx:758](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L758)
4278
+ [packages/core/src/components/Dialog/Dialog.tsx:889](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L889)
4186
4279
 
4187
4280
  ___
4188
4281
 
@@ -4337,7 +4430,7 @@ JSX.Element - The rendered form with FormProvider context
4337
4430
 
4338
4431
  #### Defined in
4339
4432
 
4340
- [packages/core/src/components/Form/Form.tsx:143](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Form/Form.tsx#L143)
4433
+ [packages/core/src/components/Form/Form.tsx:142](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Form/Form.tsx#L142)
4341
4434
 
4342
4435
  ___
4343
4436
 
@@ -4429,7 +4522,7 @@ JSX.Element - The rendered form field with validation
4429
4522
 
4430
4523
  #### Defined in
4431
4524
 
4432
- [packages/core/src/components/Form/Form.tsx:308](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Form/Form.tsx#L308)
4525
+ [packages/core/src/components/Form/Form.tsx:307](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Form/Form.tsx#L307)
4433
4526
 
4434
4527
  ___
4435
4528
 
@@ -4474,7 +4567,7 @@ Element
4474
4567
 
4475
4568
  #### Defined in
4476
4569
 
4477
- [packages/core/src/components/InactivityWarningModal/InactivityWarningModal.tsx:72](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/InactivityWarningModal/InactivityWarningModal.tsx#L72)
4570
+ [packages/core/src/components/InactivityWarningModal/InactivityWarningModal.tsx:73](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/InactivityWarningModal/InactivityWarningModal.tsx#L73)
4478
4571
 
4479
4572
  ___
4480
4573
 
@@ -4778,7 +4871,7 @@ function AdminApp() {
4778
4871
 
4779
4872
  #### Defined in
4780
4873
 
4781
- [packages/core/src/components/PaceAppLayout/PaceAppLayout.tsx:352](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/PaceAppLayout/PaceAppLayout.tsx#L352)
4874
+ [packages/core/src/components/PaceAppLayout/PaceAppLayout.tsx:353](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/PaceAppLayout/PaceAppLayout.tsx#L353)
4782
4875
 
4783
4876
  ___
4784
4877
 
@@ -4820,7 +4913,7 @@ Element
4820
4913
 
4821
4914
  #### Defined in
4822
4915
 
4823
- [packages/core/src/components/PasswordChange/PasswordChangeForm.tsx:130](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/PasswordChange/PasswordChangeForm.tsx#L130)
4916
+ [packages/core/src/components/PasswordChange/PasswordChangeForm.tsx:133](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/PasswordChange/PasswordChangeForm.tsx#L133)
4824
4917
 
4825
4918
  ___
4826
4919
 
@@ -5824,7 +5917,7 @@ ReactNode
5824
5917
 
5825
5918
  #### Defined in
5826
5919
 
5827
- [packages/core/src/components/UserMenu/UserMenu.tsx:140](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/UserMenu/UserMenu.tsx#L140)
5920
+ [packages/core/src/components/UserMenu/UserMenu.tsx:138](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/UserMenu/UserMenu.tsx#L138)
5828
5921
 
5829
5922
  ___
5830
5923
 
@@ -6254,20 +6347,24 @@ function MyComponent() {
6254
6347
  const { events, selectedEvent, setSelectedEvent } = useEvents();
6255
6348
 
6256
6349
  return (
6257
- <div>
6258
- {events.map(event => (
6259
- <button key={event.id} onClick={() => setSelectedEvent(event)}>
6260
- {event.event_name}
6261
- </button>
6262
- ))}
6263
- </div>
6350
+ <nav>
6351
+ <ul>
6352
+ {events.map(event => (
6353
+ <li key={event.id}>
6354
+ <button onClick={() => setSelectedEvent(event)}>
6355
+ {event.event_name}
6356
+ </button>
6357
+ </li>
6358
+ ))}
6359
+ </ul>
6360
+ </nav>
6264
6361
  );
6265
6362
  }
6266
6363
  ```
6267
6364
 
6268
6365
  #### Defined in
6269
6366
 
6270
- [packages/core/src/hooks/useEvents.ts:51](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/hooks/useEvents.ts#L51)
6367
+ [packages/core/src/hooks/useEvents.ts:55](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/hooks/useEvents.ts#L55)
6271
6368
 
6272
6369
  ___
6273
6370
 
@@ -6568,21 +6665,27 @@ function MyComponent() {
6568
6665
  const { selectedOrganisation, organisations, switchOrganisation } = useOrganisations();
6569
6666
 
6570
6667
  return (
6571
- <div>
6668
+ <main>
6572
6669
  <h1>Current Organisation: {selectedOrganisation.display_name}</h1>
6573
- {organisations.map(org => (
6574
- <button key={org.id} onClick={() => switchOrganisation(org.id)}>
6575
- {org.display_name}
6576
- </button>
6577
- ))}
6578
- </div>
6670
+ <nav>
6671
+ <ul>
6672
+ {organisations.map(org => (
6673
+ <li key={org.id}>
6674
+ <button onClick={() => switchOrganisation(org.id)}>
6675
+ {org.display_name}
6676
+ </button>
6677
+ </li>
6678
+ ))}
6679
+ </ul>
6680
+ </nav>
6681
+ </main>
6579
6682
  );
6580
6683
  }
6581
6684
  ```
6582
6685
 
6583
6686
  #### Defined in
6584
6687
 
6585
- [packages/core/src/hooks/useOrganisations.ts:41](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/hooks/useOrganisations.ts#L41)
6688
+ [packages/core/src/hooks/useOrganisations.ts:47](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/hooks/useOrganisations.ts#L47)
6586
6689
 
6587
6690
  ___
6588
6691
 
@@ -8721,15 +8824,22 @@ permissions for a resource type. It handles scope resolution, user context,
8721
8824
  and provides a simple API for permission checking.
8722
8825
 
8723
8826
  **Page Permission Support:**
8724
- When an `appId` is available in the resolved scope, the resource name is passed
8725
- as `pageId` to enable page-based permission checks. This allows the hook to work
8726
- with both resource-based permissions (when appId is not available) and page-based
8727
- permissions (when appId is available and the resource is a registered page).
8827
+ When an `appId` is available in the resolved scope, the hook automatically:
8828
+ 1. Waits for scope resolution to complete (including `appId` being set)
8829
+ 2. Constructs permission strings with the `page.` prefix (e.g., `create:page.planning`)
8830
+ 3. Passes the resource name as `pageId` to enable page-based permission checks
8831
+
8832
+ This ensures permission strings match the format returned by `rbac_permissions_get`
8833
+ (e.g., `create:page.planning`) rather than resource-based format (e.g., `create:planning`).
8834
+
8835
+ **Scope Resolution Timing:**
8836
+ The hook waits for scope resolution to complete before constructing permission strings.
8837
+ This prevents timing issues where permission checks use the wrong format (e.g., `delete:planning`
8838
+ instead of `delete:page.planning`) when `appId` is not yet available in the scope.
8728
8839
 
8729
- The RPC function `rbac_check_permission_simplified` will automatically resolve
8730
- the page name to a page ID and check page permissions if the resource matches
8731
- a registered page in `rbac_app_pages`. If the resource is not a registered page,
8732
- it will fall back to resource-based permission checking.
8840
+ The RPC function `rbac_check_permission_simplified` will resolve the page name to a page ID
8841
+ and check page permissions if the resource matches a registered page in `rbac_app_pages`.
8842
+ If the resource is not a registered page, it will fall back to resource-based permission checking.
8733
8843
 
8734
8844
  #### Parameters
8735
8845
 
@@ -8779,7 +8889,7 @@ function usePlanning() {
8779
8889
 
8780
8890
  #### Defined in
8781
8891
 
8782
- [packages/core/src/rbac/hooks/useResourcePermissions.ts:131](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/useResourcePermissions.ts#L131)
8892
+ [packages/core/src/rbac/hooks/useResourcePermissions.ts:138](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/useResourcePermissions.ts#L138)
8783
8893
 
8784
8894
  ___
8785
8895
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jmruthers/pace-core",
3
- "version": "0.6.4",
3
+ "version": "0.6.5",
4
4
  "description": "Clean, modern React component library with Tailwind v4 styling and native utilities",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -202,7 +202,6 @@
202
202
  "license": "MIT",
203
203
  "peerDependencies": {
204
204
  "@radix-ui/react-checkbox": "^1.0.0",
205
- "@radix-ui/react-dialog": "^1.0.0",
206
205
  "@radix-ui/react-label": "^2.0.0",
207
206
  "@radix-ui/react-slot": "^1.0.0",
208
207
  "@radix-ui/react-switch": "^1.1.0",
@@ -32,7 +32,7 @@ const validationSteps = {
32
32
  'build': {
33
33
  name: 'Package Build',
34
34
  command: ['npm', 'run', 'build'],
35
- timeout: isCI() ? 180000 : 60000
35
+ timeout: isCI() ? 180000 : 180000
36
36
  },
37
37
  'build:docs': {
38
38
  name: 'Documentation Generation',
@@ -232,6 +232,16 @@ const KeyboardNavigationTestTable: React.FC = () => {
232
232
 
233
233
  describe('DataTable Keyboard Navigation', () => {
234
234
  beforeEach(() => {
235
+ // Mock showModal for dialog elements (needed for test environments)
236
+ HTMLDialogElement.prototype.showModal = vi.fn(function(this: HTMLDialogElement) {
237
+ this.setAttribute('open', '');
238
+ this.dispatchEvent(new Event('show', { bubbles: true }));
239
+ });
240
+ HTMLDialogElement.prototype.close = vi.fn(function(this: HTMLDialogElement) {
241
+ this.removeAttribute('open');
242
+ this.dispatchEvent(new Event('close', { bubbles: true }));
243
+ });
244
+
235
245
  // Clear any existing live regions
236
246
  const existingLiveRegions = document.querySelectorAll('[aria-live]');
237
247
  existingLiveRegions.forEach(region => {
@@ -517,8 +527,11 @@ describe('DataTable Keyboard Navigation', () => {
517
527
  const importButton = await screen.findByRole('button', { name: /import/i });
518
528
  await user.click(importButton);
519
529
 
520
- // Confirm the modal is open
521
- await screen.findByRole('dialog');
530
+ // Confirm the modal is open - wait for dialog to be accessible
531
+ await waitFor(() => {
532
+ const dialog = screen.queryByRole('dialog') || document.querySelector('dialog[role="dialog"]');
533
+ expect(dialog).toBeInTheDocument();
534
+ }, { timeout: 5000 });
522
535
 
523
536
  // Close modal via Escape key
524
537
  await user.keyboard('{Escape}');
@@ -36,7 +36,7 @@
36
36
  * - Customizable text content
37
37
  */
38
38
  import React, { useState, useRef, useEffect } from 'react';
39
- import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '../../Dialog';
39
+ import { Dialog, DialogContent, DialogHeader } from '../../Dialog';
40
40
  import { Button } from '../../Button/Button';
41
41
  import { Input } from '../../Input/Input';
42
42
  import { Progress } from '../../Progress';
@@ -372,12 +372,10 @@ export function ImportModal({ isOpen, onClose, onImport, config = {} }: ImportMo
372
372
 
373
373
  return (
374
374
  <Dialog open={isOpen} onOpenChange={handleClose}>
375
- <DialogContent className="sm:max-w-2xl bg-main-50">
375
+ <DialogContent className="sm:max-w-2xl bg-main-50" title={title} description={description}>
376
376
  <DialogHeader>
377
- <DialogTitle>{title}</DialogTitle>
378
- <DialogDescription>
379
- {description}
380
- </DialogDescription>
377
+ <h2>{title}</h2>
378
+ <p>{description}</p>
381
379
  </DialogHeader>
382
380
 
383
381
  <div className="space-y-4">