@appsemble/utils 0.30.14-test.5 → 0.32.1-test.14

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 (172) hide show
  1. package/README.md +3 -3
  2. package/allActions.js +5 -3
  3. package/api/components/parameters/$orderby.js +2 -2
  4. package/api/components/parameters/index.d.ts +2 -1
  5. package/api/components/parameters/index.js +2 -1
  6. package/api/components/parameters/webhookName.d.ts +2 -0
  7. package/api/components/parameters/webhookName.js +10 -0
  8. package/api/components/parameters/webhookSecretId.d.ts +2 -0
  9. package/api/components/parameters/webhookSecretId.js +8 -0
  10. package/api/components/schemas/ActionDefinition.js +3 -0
  11. package/api/components/schemas/App.js +8 -0
  12. package/api/components/schemas/AppDefinition.js +6 -0
  13. package/api/components/schemas/AppLayoutDefinition.js +8 -0
  14. package/api/components/schemas/AppServiceSecret.js +5 -0
  15. package/api/components/schemas/AppWebhookSecret.d.ts +2 -0
  16. package/api/components/schemas/AppWebhookSecret.js +25 -0
  17. package/api/components/schemas/DialogOkActionDefinition.js +1 -1
  18. package/api/components/schemas/FilterParametersDefinition.d.ts +2 -0
  19. package/api/components/schemas/FilterParametersDefinition.js +15 -0
  20. package/api/components/schemas/FlowCancelActionDefinition.js +1 -1
  21. package/api/components/schemas/FlowFinishActionDefinition.js +1 -1
  22. package/api/components/schemas/GroupMemberDeleteActionDefinition.js +1 -1
  23. package/api/components/schemas/ResourceDefinition.js +5 -0
  24. package/api/components/schemas/ResourceDeleteAllActionDefinition.d.ts +1 -0
  25. package/api/components/schemas/ResourceDeleteAllActionDefinition.js +21 -0
  26. package/api/components/schemas/ResourceDeleteBulkActionDefinition.d.ts +1 -0
  27. package/api/components/schemas/ResourceDeleteBulkActionDefinition.js +18 -0
  28. package/api/components/schemas/ResourceGetActionDefinition.js +3 -0
  29. package/api/components/schemas/ResourcePatchActionDefinition.js +3 -0
  30. package/api/components/schemas/ResourceSubscriptionStatusActionDefinition.js +1 -0
  31. package/api/components/schemas/ResourceSubscriptionSubscribeActionDefinition.js +1 -0
  32. package/api/components/schemas/ResourceSubscriptionToggleActionDefinition.js +1 -0
  33. package/api/components/schemas/ResourceSubscriptionUnsubscribeActionDefinition.js +1 -0
  34. package/api/components/schemas/ResourceUpdatePositionsActionDefinition.d.ts +1 -0
  35. package/api/components/schemas/ResourceUpdatePositionsActionDefinition.js +21 -0
  36. package/api/components/schemas/SecurityCronDefinition.d.ts +2 -0
  37. package/api/components/schemas/SecurityCronDefinition.js +26 -0
  38. package/api/components/schemas/SecurityDefinition.js +1 -0
  39. package/api/components/schemas/StorageSubtractActionDefinition.js +2 -2
  40. package/api/components/schemas/StorageWriteActionDefinition.js +4 -0
  41. package/api/components/schemas/Training.js +2 -25
  42. package/api/components/schemas/TrainingCompleted.d.ts +2 -0
  43. package/api/components/schemas/TrainingCompleted.js +17 -0
  44. package/api/components/schemas/WebhookDefinition.d.ts +2 -0
  45. package/api/components/schemas/WebhookDefinition.js +17 -0
  46. package/api/components/schemas/index.d.ts +8 -1
  47. package/api/components/schemas/index.js +8 -1
  48. package/api/components/schemas/utils.js +1 -1
  49. package/api/components/securitySchemes/index.d.ts +1 -0
  50. package/api/components/securitySchemes/index.js +1 -0
  51. package/api/components/securitySchemes/webhook.d.ts +2 -0
  52. package/api/components/securitySchemes/webhook.js +6 -0
  53. package/api/paths/apps/appId/resources/resourceType/resourceId/positions.js +54 -0
  54. package/api/paths/apps/appId/secrets/webhook/secretId.js +61 -0
  55. package/api/paths/apps/appId/secrets/webhook.js +44 -0
  56. package/api/paths/apps/appId/webhooks/webhookName.js +35 -0
  57. package/api/paths/apps/appId.js +6 -0
  58. package/api/paths/auth/email/patchPassword.js +30 -0
  59. package/api/paths/index.d.ts +7 -5
  60. package/api/paths/index.js +16 -12
  61. package/api/paths/trainings/completeTraining.js +18 -0
  62. package/api/paths/trainings/completedTrainings.d.ts +2 -0
  63. package/api/paths/trainings/completedTrainings.js +21 -0
  64. package/api/paths/trainings/trainingIds.d.ts +2 -0
  65. package/api/paths/trainings/trainingIds.js +20 -0
  66. package/api/tags/index.js +4 -4
  67. package/appMessages.js +1 -1
  68. package/assets.js +1 -1
  69. package/authorization.d.ts +1 -1
  70. package/authorization.js +1 -1
  71. package/blockUtils.d.ts +1 -1
  72. package/blockUtils.js +1 -0
  73. package/convertToCsv.js +2 -0
  74. package/examples.js +214 -4
  75. package/formatRequestAction.js +2 -2
  76. package/has.d.ts +1 -1
  77. package/has.js +1 -1
  78. package/i18n.js +6 -8
  79. package/ics.js +1 -1
  80. package/iterApp.js +3 -3
  81. package/jsonschema.js +16 -3
  82. package/package.json +15 -11
  83. package/reference-schemas/actions/appMember.d.ts +2 -0
  84. package/reference-schemas/actions/appMember.js +21 -0
  85. package/reference-schemas/actions/flow.d.ts +2 -0
  86. package/reference-schemas/actions/flow.js +13 -0
  87. package/reference-schemas/actions/group.d.ts +2 -0
  88. package/reference-schemas/actions/group.js +13 -0
  89. package/reference-schemas/actions/index.d.ts +7 -0
  90. package/reference-schemas/actions/index.js +8 -0
  91. package/reference-schemas/actions/link.d.ts +2 -0
  92. package/reference-schemas/actions/link.js +9 -0
  93. package/reference-schemas/actions/miscellaneous.d.ts +2 -0
  94. package/reference-schemas/actions/miscellaneous.js +41 -0
  95. package/reference-schemas/actions/resources.d.ts +2 -0
  96. package/reference-schemas/actions/resources.js +19 -0
  97. package/reference-schemas/actions/storage.d.ts +2 -0
  98. package/reference-schemas/actions/storage.js +15 -0
  99. package/reference-schemas/remappers/conditionals.js +39 -0
  100. package/reference-schemas/remappers/data.js +26 -2
  101. package/reference-schemas/remappers/index.d.ts +1 -0
  102. package/reference-schemas/remappers/index.js +1 -0
  103. package/reference-schemas/remappers/objects.js +32 -0
  104. package/reference-schemas/remappers/odata.d.ts +2 -0
  105. package/reference-schemas/remappers/odata.js +95 -0
  106. package/reference-schemas/remappers/strings.js +33 -0
  107. package/reference-schemas/remappers/unsorted.js +9 -0
  108. package/remap.d.ts +2 -0
  109. package/remap.js +192 -15
  110. package/serializeResource.d.ts +7 -0
  111. package/serializeResource.js +7 -0
  112. package/serverActions.d.ts +1 -1
  113. package/serverActions.js +2 -0
  114. package/theme.js +5 -1
  115. package/validateStyle.js +2 -0
  116. package/validation.js +52 -16
  117. package/api/components/parameters/trainingBlockId.d.ts +0 -2
  118. package/api/components/parameters/trainingBlockId.js +0 -8
  119. package/api/components/schemas/TrainingBlock.d.ts +0 -2
  120. package/api/components/schemas/TrainingBlock.js +0 -38
  121. package/api/components/securitySchemes/cli.test.d.ts +0 -1
  122. package/api/components/securitySchemes/cli.test.js +0 -7
  123. package/api/index.test.d.ts +0 -1
  124. package/api/index.test.js +0 -180
  125. package/api/paths/trainingBlocks/trainingBlockId.js +0 -41
  126. package/api/paths/trainings/trainingId/blocks.js +0 -51
  127. package/api/paths/trainings/trainingId/users/current.js +0 -62
  128. package/api/paths/trainings/trainingId/users.js +0 -25
  129. package/api/paths/trainings/trainingId.js +0 -85
  130. package/api/paths/trainings.js +0 -44
  131. package/appMessages.test.d.ts +0 -1
  132. package/appMessages.test.js +0 -409
  133. package/blockUtils.test.d.ts +0 -1
  134. package/blockUtils.test.js +0 -77
  135. package/constants/patterns.test.d.ts +0 -1
  136. package/constants/patterns.test.js +0 -83
  137. package/convertToCsv.test.d.ts +0 -1
  138. package/convertToCsv.test.js +0 -55
  139. package/has.test.d.ts +0 -1
  140. package/has.test.js +0 -17
  141. package/i18n.test.d.ts +0 -1
  142. package/i18n.test.js +0 -76
  143. package/iterApp.test.d.ts +0 -1
  144. package/iterApp.test.js +0 -439
  145. package/jsonschema.test.d.ts +0 -1
  146. package/jsonschema.test.js +0 -256
  147. package/mapValues.test.d.ts +0 -1
  148. package/mapValues.test.js +0 -16
  149. package/miscellaneous.test.d.ts +0 -1
  150. package/miscellaneous.test.js +0 -87
  151. package/normalize.test.d.ts +0 -1
  152. package/normalize.test.js +0 -23
  153. package/objectCache.test.d.ts +0 -1
  154. package/objectCache.test.js +0 -20
  155. package/prefix.test.d.ts +0 -1
  156. package/prefix.test.js +0 -11
  157. package/remap.test.d.ts +0 -1
  158. package/remap.test.js +0 -1387
  159. package/string.test.d.ts +0 -1
  160. package/string.test.js +0 -27
  161. package/theme.test.d.ts +0 -1
  162. package/theme.test.js +0 -91
  163. package/validateStyle.test.d.ts +0 -1
  164. package/validateStyle.test.js +0 -13
  165. package/validation.test.d.ts +0 -1
  166. package/validation.test.js +0 -3121
  167. /package/api/paths/{trainingBlocks/trainingBlockId.d.ts → apps/appId/resources/resourceType/resourceId/positions.d.ts} +0 -0
  168. /package/api/paths/{trainings/trainingId.d.ts → apps/appId/secrets/webhook/secretId.d.ts} +0 -0
  169. /package/api/paths/{trainings.d.ts → apps/appId/secrets/webhook.d.ts} +0 -0
  170. /package/api/paths/{trainings/trainingId/blocks.d.ts → apps/appId/webhooks/webhookName.d.ts} +0 -0
  171. /package/api/paths/{trainings/trainingId/users.d.ts → auth/email/patchPassword.d.ts} +0 -0
  172. /package/api/paths/trainings/{trainingId/users/current.d.ts → completeTraining.d.ts} +0 -0
@@ -0,0 +1,19 @@
1
+ import { ResourceCountActionDefinition, ResourceCreateActionDefinition, ResourceDeleteActionDefinition, ResourceDeleteAllActionDefinition, ResourceDeleteBulkActionDefinition, ResourceGetActionDefinition, ResourceHistoryGetActionDefinition, ResourcePatchActionDefinition, ResourceQueryActionDefinition, ResourceSubscriptionStatusActionDefinition, ResourceSubscriptionSubscribeActionDefinition, ResourceSubscriptionToggleActionDefinition, ResourceSubscriptionUnsubscribeActionDefinition, ResourceUpdateActionDefinition, ResourceUpdatePositionsActionDefinition, } from '../../api/components/schemas/index.js';
2
+ export const resourceActions = {
3
+ 'resource.get': ResourceGetActionDefinition,
4
+ 'resource.history.get': ResourceHistoryGetActionDefinition,
5
+ 'resource.update.positions': ResourceUpdatePositionsActionDefinition,
6
+ 'resource.query': ResourceQueryActionDefinition,
7
+ 'resource.count': ResourceCountActionDefinition,
8
+ 'resource.create': ResourceCreateActionDefinition,
9
+ 'resource.update': ResourceUpdateActionDefinition,
10
+ 'resource.patch': ResourcePatchActionDefinition,
11
+ 'resource.delete': ResourceDeleteActionDefinition,
12
+ 'resource.delete.all': ResourceDeleteAllActionDefinition,
13
+ 'resource.delete.bulk': ResourceDeleteBulkActionDefinition,
14
+ 'resource.subscription.subscribe': ResourceSubscriptionSubscribeActionDefinition,
15
+ 'resource.subscription.unsubscribe': ResourceSubscriptionUnsubscribeActionDefinition,
16
+ 'resource.subscription.toggle': ResourceSubscriptionToggleActionDefinition,
17
+ 'resource.subscription.status': ResourceSubscriptionStatusActionDefinition,
18
+ };
19
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1,2 @@
1
+ import { type OpenAPIV3 } from 'openapi-types';
2
+ export declare const storageActions: Record<string, OpenAPIV3.SchemaObject>;
@@ -0,0 +1,15 @@
1
+ import { StorageAppendActionDefinition } from '../../api/components/schemas/StorageAppendActionDefinition.js';
2
+ import { StorageDeleteActionDefinition } from '../../api/components/schemas/StorageDeleteActionDefinition.js';
3
+ import { StorageReadActionDefinition } from '../../api/components/schemas/StorageReadActionDefinition.js';
4
+ import { StorageSubtractActionDefinition } from '../../api/components/schemas/StorageSubtractActionDefinition.js';
5
+ import { StorageUpdateActionDefinition } from '../../api/components/schemas/StorageUpdateActionDefinition.js';
6
+ import { StorageWriteActionDefinition } from '../../api/components/schemas/StorageWriteActionDefinition.js';
7
+ export const storageActions = {
8
+ 'storage.read': StorageReadActionDefinition,
9
+ 'storage.write': StorageWriteActionDefinition,
10
+ 'storage.append': StorageAppendActionDefinition,
11
+ 'storage.subtract': StorageSubtractActionDefinition,
12
+ 'storage.update': StorageUpdateActionDefinition,
13
+ 'storage.delete': StorageDeleteActionDefinition,
14
+ };
15
+ //# sourceMappingURL=storage.js.map
@@ -124,5 +124,44 @@ ${schemaExample('match')}
124
124
  },
125
125
  },
126
126
  },
127
+ and: {
128
+ type: 'array',
129
+ items: {
130
+ $ref: '#/components/schemas/RemapperDefinition',
131
+ },
132
+ description: `Compare all computed remapper values against each other.
133
+
134
+ Returns \`true\` if all entries are equal to \`true\`, otherwise \`false\`.
135
+
136
+ If only one remapper or none is passed, the remapper value gets computed.
137
+
138
+ ${schemaExample('and')}
139
+ `,
140
+ },
141
+ or: {
142
+ type: 'array',
143
+ items: {
144
+ $ref: '#/components/schemas/RemapperDefinition',
145
+ },
146
+ description: `Compare all computed remapper values against each other.
147
+
148
+ Returns \`false\` if all entries are equal to \`false\`, otherwise \`true\`.
149
+
150
+ If only one remapper or none is passed, the remapper value gets computed.
151
+
152
+ ${schemaExample('or')}
153
+ `,
154
+ },
155
+ defined: {
156
+ $ref: '#/components/schemas/RemapperDefinition',
157
+ description: `Check if a value is defined. Returns \`true\` if defined, \`false\` if not.
158
+
159
+ Considers falsy values like \`0\`, \`""\` and \`false\` as defined.
160
+
161
+ The \`null\` and \`undefined\` values are considered as not defined.
162
+
163
+ ${schemaExample('defined')}
164
+ `,
165
+ },
127
166
  };
128
167
  //# sourceMappingURL=conditionals.js.map
@@ -1,8 +1,8 @@
1
1
  import { schemaExample } from '../../examples.js';
2
2
  export const dataRemappers = {
3
3
  array: {
4
- enum: ['index', 'length', 'item'],
5
- description: `Get the current array.map’s index, length or the current item.
4
+ enum: ['index', 'length', 'item', 'prevItem', 'nextItem'],
5
+ description: `Get the current array.map’s index, length, the current item, previous item or next item.
6
6
 
7
7
  Returns nothing when not in the context of \`array.map’s\`.
8
8
 
@@ -237,6 +237,14 @@ The result of the final page’s log would then be:
237
237
  description: `Gets the chosen property from an object.
238
238
 
239
239
  ${schemaExample('prop')}
240
+ `,
241
+ },
242
+ len: {
243
+ enum: [null],
244
+ description: `
245
+ Returns the length of an input array or an input string, unlike { array: length } remapper this remapper does not require
246
+ an array to be in the context. This can be very useful when working with nested arrays.
247
+ ${schemaExample('len')}
240
248
  `,
241
249
  },
242
250
  root: {
@@ -366,5 +374,21 @@ Example:
366
374
  \`\`\`
367
375
  `,
368
376
  },
377
+ slice: {
378
+ description: `Extract characters from a string, or items from an array
379
+ accepts either an array of two numbers (indexes of starting point and ending point)
380
+ or a number (index of the starting point).
381
+ startIndex is inclusive whereas the endIndex is not.
382
+ ${schemaExample('slice')}`,
383
+ oneOf: [
384
+ {
385
+ type: 'array',
386
+ items: {
387
+ type: 'number',
388
+ },
389
+ },
390
+ { type: 'number' },
391
+ ],
392
+ },
369
393
  };
370
394
  //# sourceMappingURL=data.js.map
@@ -9,3 +9,4 @@ export * from './strings.js';
9
9
  export * from './unsorted.js';
10
10
  export * from './config.js';
11
11
  export * from './numbers.js';
12
+ export * from './odata.js';
@@ -9,4 +9,5 @@ export * from './strings.js';
9
9
  export * from './unsorted.js';
10
10
  export * from './config.js';
11
11
  export * from './numbers.js';
12
+ export * from './odata.js';
12
13
  //# sourceMappingURL=index.js.map
@@ -89,6 +89,38 @@ value? Then you can use \`object.omit\`. The remapper can remove properties from
89
89
  based on the given object keys. This includes nested properties.
90
90
 
91
91
  ${schemaExample('object.omit', { input: 'pretty', result: 'pretty' })}
92
+ `,
93
+ },
94
+ 'object.compare': {
95
+ type: 'array',
96
+ items: {
97
+ minItems: 2,
98
+ maxItems: 2,
99
+ $ref: '#/components/schemas/RemapperDefinition',
100
+ },
101
+ description: `
102
+
103
+ This remapper allows you to compare two objects and get differences in their key-value pairs like in the following example:
104
+
105
+ ${schemaExample('object.compare', { input: 'pretty', result: 'pretty' })}
106
+ `,
107
+ },
108
+ 'object.explode': {
109
+ type: 'string',
110
+ description: `
111
+
112
+ Takes an object with an array property and transforms it into an array of objects.
113
+
114
+ Each object in the resulting array contains all the entries of the original object
115
+ plus all the entries of the corresponding array item from the array property.
116
+
117
+ If one of the items in the array contains a key, which exists in the original object
118
+ it will overwrite the original key.
119
+
120
+ Nested arrays or objects are not exploded.
121
+
122
+ Example:
123
+ ${schemaExample('object.explode', { input: 'pretty', result: 'pretty' })}
92
124
  `,
93
125
  },
94
126
  };
@@ -0,0 +1,2 @@
1
+ import { type OpenAPIV3 } from 'openapi-types';
2
+ export declare const odataRemappers: Record<string, OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject>;
@@ -0,0 +1,95 @@
1
+ import { schemaExample } from '../../examples.js';
2
+ export const odataRemappers = {
3
+ 'filter.from': {
4
+ additionalProperties: {
5
+ $ref: '#/components/schemas/FilterParametersDefinition',
6
+ },
7
+ description: `
8
+
9
+ With this remapper you can generate an OData filter, ready to be passed to the \`$filter\` key in
10
+ resource queries.
11
+
12
+ The different comparator options are as follows:
13
+
14
+ - eq - Equal to
15
+ - ne - Not equal to
16
+ - lt - Less than
17
+ - gt - Greater than
18
+ - le - Less than or equal to
19
+ - ge - Greater than or equal to
20
+
21
+ The most common types of values are \`String\`, \`Number\`, \`Boolean\` and \`Date\`. If you need a more specific
22
+ type, please refer to [the OData spec](https://www.odata.org/documentation/odata-version-2-0/overview/).
23
+
24
+ As a base, the remapper looks like this:
25
+
26
+ ${schemaExample('filter.from')}
27
+
28
+ Here is an example of how you can use the remapper in an app definition:
29
+
30
+ \`\`\`yaml
31
+ type: resource.query
32
+ resource: myResource
33
+ query:
34
+ object.from:
35
+ $filter:
36
+ filter.from:
37
+ name:
38
+ type: String
39
+ comparator: ne
40
+ value: { prop: exclude }
41
+ age:
42
+ type: Int64
43
+ comparator: lt
44
+ value: 10
45
+ birthday:
46
+ type: Date
47
+ comparator: ge
48
+ value: '2000-01-01'
49
+ job:
50
+ type: String
51
+ comparator: eq
52
+ value: null
53
+ employed:
54
+ type: Boolean
55
+ comparator: eq
56
+ value: false
57
+ special:
58
+ type: String
59
+ comparator: eq
60
+ value: "Special character's test"
61
+ \`\`\`
62
+ `,
63
+ },
64
+ 'order.from': {
65
+ additionalProperties: {
66
+ enum: ['asc', 'desc'],
67
+ },
68
+ description: `
69
+
70
+ With this remapper you can generate an OData order, ready to be passed to the \`$orderby\` key in
71
+ resource queries.
72
+
73
+ The different order options are as follows:
74
+
75
+ - asc - Ascending
76
+ - desc - Descending
77
+
78
+ ${schemaExample('order.from', { exclude: ['input'] })}
79
+
80
+ Here is an example of how you can use the remapper in an app definition:
81
+
82
+ \`\`\`yaml
83
+ type: resource.query
84
+ resource: myResource
85
+ query:
86
+ object.from:
87
+ $orderby:
88
+ order.from:
89
+ name: asc
90
+ age: desc
91
+ \`\`\`
92
+ `,
93
+ },
94
+ };
95
+ //# sourceMappingURL=odata.js.map
@@ -5,6 +5,39 @@ export const stringRemappers = {
5
5
  description: `Convert a string to upper or lower case.
6
6
 
7
7
  ${schemaExample('string.case')}
8
+ `,
9
+ },
10
+ 'string.startsWith': {
11
+ type: 'string',
12
+ description: `Check if the initial characters of the string matches with the input string,
13
+ this remapper is case-sensitive.
14
+ ${schemaExample('string.startsWith')}
15
+ `,
16
+ },
17
+ 'string.endsWith': {
18
+ oneOf: [
19
+ {
20
+ type: 'string',
21
+ },
22
+ {
23
+ type: 'object',
24
+ description: 'Alternative way to define input to facilitate the case-insensitive matching',
25
+ required: ['substring'],
26
+ additionalProperties: false,
27
+ properties: {
28
+ substring: {
29
+ type: 'string',
30
+ },
31
+ strict: {
32
+ type: 'boolean',
33
+ },
34
+ },
35
+ },
36
+ ],
37
+ description: `Check if the last characters of the string matches with the input string,
38
+ this remapper is case-sensitive unless specified explicitly,
39
+ To make the remapper ignore casing of the input and passed string, use the following example
40
+ ${schemaExample('string.endsWith')}
8
41
  `,
9
42
  },
10
43
  'string.format': {
@@ -1,3 +1,4 @@
1
+ import { schemaExample } from '../../examples.js';
1
2
  export const unsortedRemappers = {
2
3
  ics: {
3
4
  type: 'object',
@@ -248,5 +249,13 @@ For example:
248
249
  \`\`\`
249
250
  `,
250
251
  },
252
+ 'xml.parse': {
253
+ description: `This can be used to parse an xml string into an object
254
+
255
+ For example:
256
+
257
+ ${schemaExample('xml.parse', { result: 'pretty' })}`,
258
+ $ref: '#/components/schemas/RemapperDefinition',
259
+ },
251
260
  };
252
261
  //# sourceMappingURL=unsorted.js.map
package/remap.d.ts CHANGED
@@ -60,6 +60,8 @@ interface InternalContext extends RemapperContext {
60
60
  index: number;
61
61
  length: number;
62
62
  item: unknown;
63
+ prevItem: unknown;
64
+ nextItem: unknown;
63
65
  };
64
66
  stepRef?: {
65
67
  current: Record<string, any>;