@pie-lib/rubric 1.0.0-beta.5 → 1.1.0-next.0
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.
- package/CHANGELOG.json +1 -407
- package/CHANGELOG.md +332 -4
- package/LICENSE.md +5 -0
- package/NEXT.CHANGELOG.json +1 -0
- package/lib/__tests__/rubric.test.js +213 -0
- package/lib/authoring.js +262 -173
- package/lib/authoring.js.map +1 -1
- package/lib/index.js +4 -4
- package/lib/index.js.map +1 -1
- package/lib/point-menu.js +23 -38
- package/lib/point-menu.js.map +1 -1
- package/package.json +11 -8
- package/src/__tests__/rubric.test.jsx +179 -0
- package/src/authoring.jsx +211 -159
- package/src/index.js +1 -0
- package/src/point-menu.jsx +8 -15
package/CHANGELOG.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
# [1.0.0-next.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.28.3-next.0...@pie-lib/rubric@1.0.0-next.0) (2026-01-19)
|
|
7
7
|
|
|
8
8
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
9
9
|
|
|
@@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
## [0.
|
|
14
|
+
## [0.28.3-next.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.42.0-mui-update.0...@pie-lib/rubric@0.28.3-next.0) (2026-01-19)
|
|
15
15
|
|
|
16
16
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
17
17
|
|
|
@@ -19,21 +19,349 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
## [0.
|
|
22
|
+
## [0.28.2](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.28.1...@pie-lib/rubric@0.28.2) (2025-11-27)
|
|
23
23
|
|
|
24
24
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
25
25
|
|
|
26
|
+
## [0.28.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.24.2...@pie-lib/rubric@0.28.1) (2025-10-22)
|
|
27
|
+
|
|
28
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
26
29
|
|
|
30
|
+
# [0.28.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.27.0...@pie-lib/rubric@0.28.0) (2025-10-16)
|
|
27
31
|
|
|
32
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
28
33
|
|
|
34
|
+
# [0.27.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.24.0...@pie-lib/rubric@0.27.0) (2025-10-16)
|
|
29
35
|
|
|
30
|
-
|
|
36
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
37
|
+
|
|
38
|
+
# [0.26.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.24.0...@pie-lib/rubric@0.26.0) (2025-10-16)
|
|
39
|
+
|
|
40
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
41
|
+
|
|
42
|
+
# [0.25.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.24.0...@pie-lib/rubric@0.25.0) (2025-10-16)
|
|
43
|
+
|
|
44
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
45
|
+
|
|
46
|
+
## [0.24.2](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.24.1...@pie-lib/rubric@0.24.2) (2025-10-14)
|
|
47
|
+
|
|
48
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
49
|
+
|
|
50
|
+
## [0.24.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.24.0...@pie-lib/rubric@0.24.1) (2025-10-09)
|
|
51
|
+
|
|
52
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
53
|
+
|
|
54
|
+
# [0.24.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.24.0) (2025-09-25)
|
|
55
|
+
|
|
56
|
+
### Bug Fixes
|
|
57
|
+
|
|
58
|
+
- fixed pie-lib/icons import [PD-5126](<[dcb506c](https://github.com/pie-framework/pie-lib/commit/dcb506c914a177f6d88bf73247a023bfe71dac1f)>)
|
|
59
|
+
|
|
60
|
+
### Features
|
|
61
|
+
|
|
62
|
+
- split pie-toolbox into multiple packages [PD-5126](<[7d55a25](https://github.com/pie-framework/pie-lib/commit/7d55a2552d084cd3d0d5c00dc77411b2ced2f5e2)>)
|
|
63
|
+
|
|
64
|
+
# [0.23.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.22.0...@pie-lib/rubric@0.23.0) (2025-09-18)
|
|
65
|
+
|
|
66
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
67
|
+
|
|
68
|
+
# [0.22.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.21.0...@pie-lib/rubric@0.22.0) (2025-09-18)
|
|
69
|
+
|
|
70
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
71
|
+
|
|
72
|
+
# [0.21.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.21.0) (2025-09-18)
|
|
73
|
+
|
|
74
|
+
### Bug Fixes
|
|
75
|
+
|
|
76
|
+
- fixed pie-lib/icons import [PD-5126](<[dcb506c](https://github.com/pie-framework/pie-lib/commit/dcb506c914a177f6d88bf73247a023bfe71dac1f)>)
|
|
77
|
+
|
|
78
|
+
### Features
|
|
79
|
+
|
|
80
|
+
- split pie-toolbox into multiple packages [PD-5126](<[7d55a25](https://github.com/pie-framework/pie-lib/commit/7d55a2552d084cd3d0d5c00dc77411b2ced2f5e2)>)
|
|
81
|
+
|
|
82
|
+
# [0.20.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.19.0...@pie-lib/rubric@0.20.0) (2025-09-17)
|
|
83
|
+
|
|
84
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
85
|
+
|
|
86
|
+
# [0.19.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.18.0...@pie-lib/rubric@0.19.0) (2025-09-17)
|
|
87
|
+
|
|
88
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
89
|
+
|
|
90
|
+
# [0.18.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.17.1...@pie-lib/rubric@0.18.0) (2025-09-17)
|
|
91
|
+
|
|
92
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
93
|
+
|
|
94
|
+
## [0.17.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.17.1) (2025-08-11)
|
|
95
|
+
|
|
96
|
+
### Bug Fixes
|
|
97
|
+
|
|
98
|
+
- fixed pie-lib/icons import [PD-5126](<[dcb506c](https://github.com/pie-framework/pie-lib/commit/dcb506c914a177f6d88bf73247a023bfe71dac1f)>)
|
|
99
|
+
|
|
100
|
+
### Features
|
|
101
|
+
|
|
102
|
+
- split pie-toolbox into multiple packages [PD-5126](<[7d55a25](https://github.com/pie-framework/pie-lib/commit/7d55a2552d084cd3d0d5c00dc77411b2ced2f5e2)>)
|
|
103
|
+
|
|
104
|
+
# [0.17.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.17.0) (2025-08-07)
|
|
105
|
+
|
|
106
|
+
### Features
|
|
107
|
+
|
|
108
|
+
- split pie-toolbox into multiple packages [PD-5126](<[7d55a25](https://github.com/pie-framework/pie-lib/commit/7d55a2552d084cd3d0d5c00dc77411b2ced2f5e2)>)
|
|
109
|
+
|
|
110
|
+
# [0.16.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.16.0) (2025-07-31)
|
|
111
|
+
|
|
112
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
113
|
+
|
|
114
|
+
# [0.15.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.15.0) (2025-07-31)
|
|
115
|
+
|
|
116
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
117
|
+
|
|
118
|
+
# [0.14.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.14.0) (2025-07-31)
|
|
119
|
+
|
|
120
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
121
|
+
|
|
122
|
+
# [0.13.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.13.0) (2025-07-31)
|
|
123
|
+
|
|
124
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
125
|
+
|
|
126
|
+
# [0.12.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.12.0) (2025-07-31)
|
|
127
|
+
|
|
128
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
129
|
+
|
|
130
|
+
# [0.11.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.11.0) (2025-07-31)
|
|
131
|
+
|
|
132
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
133
|
+
|
|
134
|
+
# [0.13.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.13.0) (2025-07-31)
|
|
135
|
+
|
|
136
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
137
|
+
|
|
138
|
+
# [0.12.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.12.0) (2025-07-31)
|
|
139
|
+
|
|
140
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
141
|
+
|
|
142
|
+
# [0.11.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.11.0) (2025-07-31)
|
|
143
|
+
|
|
144
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
145
|
+
|
|
146
|
+
# [0.12.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.12.0) (2025-07-31)
|
|
147
|
+
|
|
148
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
149
|
+
|
|
150
|
+
# [0.11.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.11.0) (2025-07-31)
|
|
151
|
+
|
|
152
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
153
|
+
|
|
154
|
+
# [0.10.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.10.0) (2025-07-31)
|
|
155
|
+
|
|
156
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
157
|
+
|
|
158
|
+
# [0.10.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.10.0) (2025-07-31)
|
|
159
|
+
|
|
160
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
161
|
+
|
|
162
|
+
# [0.11.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.11.0) (2025-07-31)
|
|
163
|
+
|
|
164
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
165
|
+
|
|
166
|
+
# [0.10.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.10.0) (2025-07-31)
|
|
167
|
+
|
|
168
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
169
|
+
|
|
170
|
+
# [0.9.0-beta.8](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.8) (2025-07-25)
|
|
171
|
+
|
|
172
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
173
|
+
|
|
174
|
+
# [0.9.0-beta.7](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.7) (2025-07-25)
|
|
175
|
+
|
|
176
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
177
|
+
|
|
178
|
+
# [0.9.0-beta.7](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.7) (2025-07-25)
|
|
179
|
+
|
|
180
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
181
|
+
|
|
182
|
+
# [0.9.0-beta.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.6) (2025-07-25)
|
|
183
|
+
|
|
184
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
185
|
+
|
|
186
|
+
# [0.9.0-beta.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.6) (2025-07-25)
|
|
187
|
+
|
|
188
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
189
|
+
|
|
190
|
+
# [0.9.0-beta.5](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.5) (2025-07-25)
|
|
191
|
+
|
|
192
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
193
|
+
|
|
194
|
+
# [0.9.0-beta.5](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.5) (2025-07-25)
|
|
195
|
+
|
|
196
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
197
|
+
|
|
198
|
+
# [0.9.0-beta.4](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.4) (2025-07-25)
|
|
199
|
+
|
|
200
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
201
|
+
|
|
202
|
+
# [0.9.0-beta.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.3) (2025-07-25)
|
|
203
|
+
|
|
204
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
205
|
+
|
|
206
|
+
# [0.9.0-beta.4](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.4) (2025-07-23)
|
|
207
|
+
|
|
208
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
209
|
+
|
|
210
|
+
# [0.9.0-beta.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.3) (2025-07-23)
|
|
211
|
+
|
|
212
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
213
|
+
|
|
214
|
+
# [0.9.0-beta.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.3) (2025-07-20)
|
|
215
|
+
|
|
216
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
217
|
+
|
|
218
|
+
# [0.9.0-beta.2](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.2) (2025-07-20)
|
|
219
|
+
|
|
220
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
221
|
+
|
|
222
|
+
# [0.9.0-beta.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.1) (2025-07-20)
|
|
223
|
+
|
|
224
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
225
|
+
|
|
226
|
+
# [0.9.0-beta.2](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.2) (2025-07-20)
|
|
227
|
+
|
|
228
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
229
|
+
|
|
230
|
+
# [0.9.0-beta.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.1) (2025-07-20)
|
|
231
|
+
|
|
232
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
233
|
+
|
|
234
|
+
# [0.9.0-beta.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.1) (2025-07-20)
|
|
235
|
+
|
|
236
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
237
|
+
|
|
238
|
+
# [0.9.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.0) (2025-07-20)
|
|
31
239
|
|
|
32
240
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
33
241
|
|
|
242
|
+
# [0.10.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.10.0-beta.0) (2025-07-15)
|
|
34
243
|
|
|
244
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
245
|
+
|
|
246
|
+
# [0.9.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.31...@pie-lib/rubric@0.9.0-beta.0) (2025-07-15)
|
|
247
|
+
|
|
248
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
249
|
+
|
|
250
|
+
## [0.8.30](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.29...@pie-lib/rubric@0.8.30) (2023-10-16)
|
|
251
|
+
|
|
252
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
253
|
+
|
|
254
|
+
## [0.8.29](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.28...@pie-lib/rubric@0.8.29) (2023-10-16)
|
|
255
|
+
|
|
256
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
257
|
+
|
|
258
|
+
## [0.8.28](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.27...@pie-lib/rubric@0.8.28) (2023-10-03)
|
|
259
|
+
|
|
260
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
261
|
+
|
|
262
|
+
## [0.8.27](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.26...@pie-lib/rubric@0.8.27) (2023-10-01)
|
|
263
|
+
|
|
264
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
265
|
+
|
|
266
|
+
## [0.8.26](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.25...@pie-lib/rubric@0.8.26) (2023-09-27)
|
|
267
|
+
|
|
268
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
269
|
+
|
|
270
|
+
## [0.8.25](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.24...@pie-lib/rubric@0.8.25) (2023-09-27)
|
|
271
|
+
|
|
272
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
273
|
+
|
|
274
|
+
## [0.8.24](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.23...@pie-lib/rubric@0.8.24) (2023-09-27)
|
|
275
|
+
|
|
276
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
277
|
+
|
|
278
|
+
## [0.8.23](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.22...@pie-lib/rubric@0.8.23) (2023-09-26)
|
|
279
|
+
|
|
280
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
281
|
+
|
|
282
|
+
## [0.8.22](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.21...@pie-lib/rubric@0.8.22) (2023-09-25)
|
|
283
|
+
|
|
284
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
35
285
|
|
|
286
|
+
## [0.8.21](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.20...@pie-lib/rubric@0.8.21) (2023-09-20)
|
|
36
287
|
|
|
288
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
289
|
+
|
|
290
|
+
## [0.8.20](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.19...@pie-lib/rubric@0.8.20) (2023-09-20)
|
|
291
|
+
|
|
292
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
293
|
+
|
|
294
|
+
## [0.8.19](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.18...@pie-lib/rubric@0.8.19) (2023-09-18)
|
|
295
|
+
|
|
296
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
297
|
+
|
|
298
|
+
## [0.8.18](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.17...@pie-lib/rubric@0.8.18) (2023-09-14)
|
|
299
|
+
|
|
300
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
301
|
+
|
|
302
|
+
## [0.8.17](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.16...@pie-lib/rubric@0.8.17) (2023-09-14)
|
|
303
|
+
|
|
304
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
305
|
+
|
|
306
|
+
## [0.8.16](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.15...@pie-lib/rubric@0.8.16) (2023-09-14)
|
|
307
|
+
|
|
308
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
309
|
+
|
|
310
|
+
## [0.8.15](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.14...@pie-lib/rubric@0.8.15) (2023-09-05)
|
|
311
|
+
|
|
312
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
313
|
+
|
|
314
|
+
## [0.8.14](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.13...@pie-lib/rubric@0.8.14) (2023-09-02)
|
|
315
|
+
|
|
316
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
317
|
+
|
|
318
|
+
## [0.8.13](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.12...@pie-lib/rubric@0.8.13) (2023-09-02)
|
|
319
|
+
|
|
320
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
321
|
+
|
|
322
|
+
## [0.8.12](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.11...@pie-lib/rubric@0.8.12) (2023-08-30)
|
|
323
|
+
|
|
324
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
325
|
+
|
|
326
|
+
## [0.8.11](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.10...@pie-lib/rubric@0.8.11) (2023-08-21)
|
|
327
|
+
|
|
328
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
329
|
+
|
|
330
|
+
## [0.8.10](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.9...@pie-lib/rubric@0.8.10) (2023-08-21)
|
|
331
|
+
|
|
332
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
333
|
+
|
|
334
|
+
## [0.8.9](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.8...@pie-lib/rubric@0.8.9) (2023-08-15)
|
|
335
|
+
|
|
336
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
337
|
+
|
|
338
|
+
## [0.8.8](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.7...@pie-lib/rubric@0.8.8) (2023-08-07)
|
|
339
|
+
|
|
340
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
341
|
+
|
|
342
|
+
## [0.8.7](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.6...@pie-lib/rubric@0.8.7) (2023-07-31)
|
|
343
|
+
|
|
344
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
345
|
+
|
|
346
|
+
## [0.8.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.5...@pie-lib/rubric@0.8.6) (2023-07-24)
|
|
347
|
+
|
|
348
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
349
|
+
|
|
350
|
+
## [0.8.5](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.4...@pie-lib/rubric@0.8.5) (2023-07-04)
|
|
351
|
+
|
|
352
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
353
|
+
|
|
354
|
+
## [0.8.4](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.3...@pie-lib/rubric@0.8.4) (2023-06-24)
|
|
355
|
+
|
|
356
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
357
|
+
|
|
358
|
+
## [0.8.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.2...@pie-lib/rubric@0.8.3) (2023-06-23)
|
|
359
|
+
|
|
360
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
361
|
+
|
|
362
|
+
## [0.8.2](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.1...@pie-lib/rubric@0.8.2) (2023-06-13)
|
|
363
|
+
|
|
364
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
37
365
|
|
|
38
366
|
## [0.8.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.8.0...@pie-lib/rubric@0.8.1) (2023-06-12)
|
|
39
367
|
|
package/LICENSE.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
Copyright 2019 CoreSpring Inc
|
|
2
|
+
|
|
3
|
+
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
|
|
4
|
+
|
|
5
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[]
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
5
|
+
var _react = require("@testing-library/react");
|
|
6
|
+
var _react2 = _interopRequireDefault(require("react"));
|
|
7
|
+
var _authoring = require("../authoring");
|
|
8
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
9
|
+
var _styles = require("@mui/material/styles");
|
|
10
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
11
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
12
|
+
// Mock dependencies
|
|
13
|
+
jest.mock('@pie-lib/editable-html-tip-tap', function () {
|
|
14
|
+
return function EditableHtml(props) {
|
|
15
|
+
return /*#__PURE__*/_react2["default"].createElement("div", {
|
|
16
|
+
"data-testid": "editable-html",
|
|
17
|
+
"data-markup": props.markup
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
jest.mock('@pie-lib/config-ui', function () {
|
|
22
|
+
return {
|
|
23
|
+
FeedbackConfig: function FeedbackConfig(_ref) {
|
|
24
|
+
var feedback = _ref.feedback;
|
|
25
|
+
return /*#__PURE__*/_react2["default"].createElement("div", {
|
|
26
|
+
"data-testid": "feedback-config"
|
|
27
|
+
}, JSON.stringify(feedback));
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
jest.mock('@hello-pangea/dnd', function () {
|
|
32
|
+
return {
|
|
33
|
+
DragDropContext: function DragDropContext(_ref2) {
|
|
34
|
+
var children = _ref2.children;
|
|
35
|
+
return /*#__PURE__*/_react2["default"].createElement("div", {
|
|
36
|
+
"data-testid": "drag-drop-context"
|
|
37
|
+
}, children);
|
|
38
|
+
},
|
|
39
|
+
Droppable: function Droppable(_ref3) {
|
|
40
|
+
var children = _ref3.children;
|
|
41
|
+
return children({
|
|
42
|
+
droppableProps: {},
|
|
43
|
+
innerRef: function innerRef() {}
|
|
44
|
+
}, {});
|
|
45
|
+
},
|
|
46
|
+
Draggable: function Draggable(_ref4) {
|
|
47
|
+
var children = _ref4.children,
|
|
48
|
+
index = _ref4.index;
|
|
49
|
+
return children({
|
|
50
|
+
innerRef: function innerRef() {},
|
|
51
|
+
draggableProps: {
|
|
52
|
+
'data-draggable-index': index
|
|
53
|
+
},
|
|
54
|
+
dragHandleProps: {}
|
|
55
|
+
}, {});
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
describe('Rubric', function () {
|
|
60
|
+
var points = ['nothing right', 'a teeny bit right', 'mostly right', 'bingo'];
|
|
61
|
+
var sampleAnswers = [null, 'just right', 'not left', null];
|
|
62
|
+
var theme = (0, _styles.createTheme)();
|
|
63
|
+
var renderComponent = function renderComponent() {
|
|
64
|
+
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
65
|
+
var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
66
|
+
var defaultProps = _objectSpread({
|
|
67
|
+
classes: {},
|
|
68
|
+
onChange: jest.fn(),
|
|
69
|
+
className: 'className',
|
|
70
|
+
value: _objectSpread({
|
|
71
|
+
excludeZero: false,
|
|
72
|
+
points: points,
|
|
73
|
+
sampleAnswers: sampleAnswers
|
|
74
|
+
}, value)
|
|
75
|
+
}, props);
|
|
76
|
+
return _objectSpread(_objectSpread({}, (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_styles.ThemeProvider, {
|
|
77
|
+
theme: theme
|
|
78
|
+
}, /*#__PURE__*/_react2["default"].createElement(_authoring.RawAuthoring, defaultProps)))), {}, {
|
|
79
|
+
onChange: defaultProps.onChange,
|
|
80
|
+
props: defaultProps
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
describe('render', function () {
|
|
84
|
+
it('renders rubric title and main structure', function () {
|
|
85
|
+
renderComponent();
|
|
86
|
+
expect(_react.screen.getByText('Rubric')).toBeInTheDocument();
|
|
87
|
+
expect(_react.screen.getByLabelText('Max Points')).toBeInTheDocument();
|
|
88
|
+
expect(_react.screen.getByLabelText('Exclude zeros')).toBeInTheDocument();
|
|
89
|
+
});
|
|
90
|
+
it('renders all point configurations', function () {
|
|
91
|
+
var _renderComponent = renderComponent(),
|
|
92
|
+
container = _renderComponent.container;
|
|
93
|
+
// Verify DragDropContext is rendered
|
|
94
|
+
expect(container.querySelector('[data-testid="drag-drop-context"]')).toBeInTheDocument();
|
|
95
|
+
|
|
96
|
+
// Check that point labels are rendered (4 points = "3 pts", "2 pts", "1 pt", "0 pt")
|
|
97
|
+
// Note: The PointConfig component uses singular "pt" for 0 and 1, plural "pts" for 2+
|
|
98
|
+
expect(_react.screen.getByText('3 pts')).toBeInTheDocument();
|
|
99
|
+
expect(_react.screen.getByText('2 pts')).toBeInTheDocument();
|
|
100
|
+
expect(_react.screen.getByText('1 pt')).toBeInTheDocument();
|
|
101
|
+
expect(_react.screen.getByText('0 pt')).toBeInTheDocument();
|
|
102
|
+
});
|
|
103
|
+
describe('draggable', function () {
|
|
104
|
+
it('renders 3 draggable items when excludeZero is true', function () {
|
|
105
|
+
var _renderComponent2 = renderComponent({
|
|
106
|
+
excludeZero: true
|
|
107
|
+
}),
|
|
108
|
+
container = _renderComponent2.container;
|
|
109
|
+
|
|
110
|
+
// When excludeZero is true, the last point (0 pts) should not be rendered
|
|
111
|
+
// So we should have 3 draggable items
|
|
112
|
+
var draggableItems = container.querySelectorAll('[data-draggable-index]');
|
|
113
|
+
expect(draggableItems.length).toEqual(3);
|
|
114
|
+
|
|
115
|
+
// Verify the 0 pt label is not rendered
|
|
116
|
+
expect(_react.screen.queryByText('0 pt')).not.toBeInTheDocument();
|
|
117
|
+
});
|
|
118
|
+
it('renders 4 draggable items when excludeZero is false', function () {
|
|
119
|
+
var _renderComponent3 = renderComponent({
|
|
120
|
+
excludeZero: false
|
|
121
|
+
}),
|
|
122
|
+
container = _renderComponent3.container;
|
|
123
|
+
|
|
124
|
+
// When excludeZero is false, all points including 0 should be rendered
|
|
125
|
+
var draggableItems = container.querySelectorAll('[data-draggable-index]');
|
|
126
|
+
expect(draggableItems.length).toEqual(4);
|
|
127
|
+
|
|
128
|
+
// Verify all point labels are rendered
|
|
129
|
+
expect(_react.screen.getByText('3 pts')).toBeInTheDocument();
|
|
130
|
+
expect(_react.screen.getByText('2 pts')).toBeInTheDocument();
|
|
131
|
+
expect(_react.screen.getByText('1 pt')).toBeInTheDocument();
|
|
132
|
+
expect(_react.screen.getByText('0 pt')).toBeInTheDocument();
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
describe('logic', function () {
|
|
137
|
+
describe('changeMaxPoints', function () {
|
|
138
|
+
var testChangeMaxPoints = function testChangeMaxPoints(maxPoints, excludeZero, expectedPoints, expectedSampleAnswers) {
|
|
139
|
+
it("maxPoints=".concat(maxPoints, ", excludeZero=").concat(excludeZero, " calls onChange correctly"), function () {
|
|
140
|
+
var _container$querySelec;
|
|
141
|
+
var _renderComponent4 = renderComponent({
|
|
142
|
+
excludeZero: excludeZero
|
|
143
|
+
}),
|
|
144
|
+
onChange = _renderComponent4.onChange,
|
|
145
|
+
container = _renderComponent4.container;
|
|
146
|
+
|
|
147
|
+
// Get the component instance through the container
|
|
148
|
+
// We need to call the method directly since we're testing internal behavior
|
|
149
|
+
var instance = (_container$querySelec = container.querySelector('[class*="MuiBox-root"]')) === null || _container$querySelec === void 0 ? void 0 : _container$querySelec._owner;
|
|
150
|
+
|
|
151
|
+
// Since we can't easily access instance methods in RTL, we'll test the behavior
|
|
152
|
+
// by verifying the onChange prop receives the correct values
|
|
153
|
+
// For now, we'll directly test the logic
|
|
154
|
+
var component = new _authoring.RawAuthoring({
|
|
155
|
+
value: {
|
|
156
|
+
excludeZero: excludeZero,
|
|
157
|
+
points: points,
|
|
158
|
+
sampleAnswers: sampleAnswers
|
|
159
|
+
},
|
|
160
|
+
onChange: onChange,
|
|
161
|
+
classes: {},
|
|
162
|
+
className: 'className'
|
|
163
|
+
});
|
|
164
|
+
component.changeMaxPoints(maxPoints);
|
|
165
|
+
expect(onChange).toHaveBeenCalledWith({
|
|
166
|
+
excludeZero: excludeZero,
|
|
167
|
+
points: expectedPoints,
|
|
168
|
+
sampleAnswers: expectedSampleAnswers,
|
|
169
|
+
maxPoints: expectedPoints.length - 1
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
};
|
|
173
|
+
testChangeMaxPoints(1, false, _lodash["default"].takeRight(points, 2), _lodash["default"].takeRight(sampleAnswers, 2));
|
|
174
|
+
testChangeMaxPoints(1, true, _lodash["default"].takeRight(points, 2), _lodash["default"].takeRight(sampleAnswers, 2));
|
|
175
|
+
testChangeMaxPoints(2, true, _lodash["default"].takeRight(points, 3), _lodash["default"].takeRight(sampleAnswers, 3));
|
|
176
|
+
testChangeMaxPoints(2, false, _lodash["default"].takeRight(points, 3), _lodash["default"].takeRight(sampleAnswers, 3));
|
|
177
|
+
testChangeMaxPoints(5, false, ['', ''].concat(points), [null, null].concat(sampleAnswers));
|
|
178
|
+
});
|
|
179
|
+
describe('changeSampleResponse', function () {
|
|
180
|
+
var testChangeSampleResponse = function testChangeSampleResponse(index, clickedItem, excludeZero, expectedPoints, expectedSampleAnswers) {
|
|
181
|
+
it("Point ".concat(index, " with clickedItem=\"").concat(clickedItem, "\" calls onChange correctly"), function () {
|
|
182
|
+
var _renderComponent5 = renderComponent({
|
|
183
|
+
excludeZero: excludeZero
|
|
184
|
+
}),
|
|
185
|
+
onChange = _renderComponent5.onChange;
|
|
186
|
+
|
|
187
|
+
// Test the logic by creating a component instance and calling the method
|
|
188
|
+
var component = new _authoring.RawAuthoring({
|
|
189
|
+
value: {
|
|
190
|
+
excludeZero: excludeZero,
|
|
191
|
+
points: points,
|
|
192
|
+
sampleAnswers: sampleAnswers
|
|
193
|
+
},
|
|
194
|
+
onChange: onChange,
|
|
195
|
+
classes: {},
|
|
196
|
+
className: 'className'
|
|
197
|
+
});
|
|
198
|
+
component.onPointMenuChange(index, clickedItem);
|
|
199
|
+
expect(onChange).toHaveBeenCalledWith({
|
|
200
|
+
excludeZero: excludeZero,
|
|
201
|
+
points: expectedPoints,
|
|
202
|
+
sampleAnswers: expectedSampleAnswers
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
};
|
|
206
|
+
testChangeSampleResponse(0, 'sample', false, points, ['', 'just right', 'not left', null]);
|
|
207
|
+
testChangeSampleResponse(3, 'sample', false, points, [null, 'just right', 'not left', '']);
|
|
208
|
+
testChangeSampleResponse(1, 'sample', true, points, [null, null, 'not left', null]);
|
|
209
|
+
testChangeSampleResponse(3, 'sample', true, points, [null, 'just right', 'not left', '']);
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX3JlYWN0MiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfYXV0aG9yaW5nIiwiX2xvZGFzaCIsIl9zdHlsZXMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImplc3QiLCJtb2NrIiwiRWRpdGFibGVIdG1sIiwicHJvcHMiLCJjcmVhdGVFbGVtZW50IiwibWFya3VwIiwiRmVlZGJhY2tDb25maWciLCJfcmVmIiwiZmVlZGJhY2siLCJKU09OIiwic3RyaW5naWZ5IiwiRHJhZ0Ryb3BDb250ZXh0IiwiX3JlZjIiLCJjaGlsZHJlbiIsIkRyb3BwYWJsZSIsIl9yZWYzIiwiZHJvcHBhYmxlUHJvcHMiLCJpbm5lclJlZiIsIkRyYWdnYWJsZSIsIl9yZWY0IiwiaW5kZXgiLCJkcmFnZ2FibGVQcm9wcyIsImRyYWdIYW5kbGVQcm9wcyIsImRlc2NyaWJlIiwicG9pbnRzIiwic2FtcGxlQW5zd2VycyIsInRoZW1lIiwiY3JlYXRlVGhlbWUiLCJyZW5kZXJDb21wb25lbnQiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsImRlZmF1bHRQcm9wcyIsImNsYXNzZXMiLCJvbkNoYW5nZSIsImZuIiwiY2xhc3NOYW1lIiwiZXhjbHVkZVplcm8iLCJyZW5kZXIiLCJUaGVtZVByb3ZpZGVyIiwiUmF3QXV0aG9yaW5nIiwiaXQiLCJleHBlY3QiLCJzY3JlZW4iLCJnZXRCeVRleHQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsImdldEJ5TGFiZWxUZXh0IiwiX3JlbmRlckNvbXBvbmVudCIsImNvbnRhaW5lciIsInF1ZXJ5U2VsZWN0b3IiLCJfcmVuZGVyQ29tcG9uZW50MiIsImRyYWdnYWJsZUl0ZW1zIiwicXVlcnlTZWxlY3RvckFsbCIsInRvRXF1YWwiLCJxdWVyeUJ5VGV4dCIsIm5vdCIsIl9yZW5kZXJDb21wb25lbnQzIiwidGVzdENoYW5nZU1heFBvaW50cyIsIm1heFBvaW50cyIsImV4cGVjdGVkUG9pbnRzIiwiZXhwZWN0ZWRTYW1wbGVBbnN3ZXJzIiwiY29uY2F0IiwiX2NvbnRhaW5lciRxdWVyeVNlbGVjIiwiX3JlbmRlckNvbXBvbmVudDQiLCJpbnN0YW5jZSIsIl9vd25lciIsImNvbXBvbmVudCIsImNoYW5nZU1heFBvaW50cyIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwiXyIsInRha2VSaWdodCIsInRlc3RDaGFuZ2VTYW1wbGVSZXNwb25zZSIsImNsaWNrZWRJdGVtIiwiX3JlbmRlckNvbXBvbmVudDUiLCJvblBvaW50TWVudUNoYW5nZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vcnVicmljLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc2NyZWVuIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUmF3QXV0aG9yaW5nIH0gZnJvbSAnLi4vYXV0aG9yaW5nJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBUaGVtZVByb3ZpZGVyLCBjcmVhdGVUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcblxuLy8gTW9jayBkZXBlbmRlbmNpZXNcbmplc3QubW9jaygnQHBpZS1saWIvZWRpdGFibGUtaHRtbC10aXAtdGFwJywgKCkgPT4ge1xuICByZXR1cm4gZnVuY3Rpb24gRWRpdGFibGVIdG1sKHByb3BzKSB7XG4gICAgcmV0dXJuIDxkaXYgZGF0YS10ZXN0aWQ9XCJlZGl0YWJsZS1odG1sXCIgZGF0YS1tYXJrdXA9e3Byb3BzLm1hcmt1cH0gLz47XG4gIH07XG59KTtcblxuamVzdC5tb2NrKCdAcGllLWxpYi9jb25maWctdWknLCAoKSA9PiAoe1xuICBGZWVkYmFja0NvbmZpZzogKHsgZmVlZGJhY2sgfSkgPT4gPGRpdiBkYXRhLXRlc3RpZD1cImZlZWRiYWNrLWNvbmZpZ1wiPntKU09OLnN0cmluZ2lmeShmZWVkYmFjayl9PC9kaXY+LFxufSkpO1xuXG5qZXN0Lm1vY2soJ0BoZWxsby1wYW5nZWEvZG5kJywgKCkgPT4gKHtcbiAgRHJhZ0Ryb3BDb250ZXh0OiAoeyBjaGlsZHJlbiB9KSA9PiA8ZGl2IGRhdGEtdGVzdGlkPVwiZHJhZy1kcm9wLWNvbnRleHRcIj57Y2hpbGRyZW59PC9kaXY+LFxuICBEcm9wcGFibGU6ICh7IGNoaWxkcmVuIH0pID0+IGNoaWxkcmVuKHsgZHJvcHBhYmxlUHJvcHM6IHt9LCBpbm5lclJlZjogKCkgPT4ge30gfSwge30pLFxuICBEcmFnZ2FibGU6ICh7IGNoaWxkcmVuLCBpbmRleCB9KSA9PlxuICAgIGNoaWxkcmVuKFxuICAgICAge1xuICAgICAgICBpbm5lclJlZjogKCkgPT4ge30sXG4gICAgICAgIGRyYWdnYWJsZVByb3BzOiB7ICdkYXRhLWRyYWdnYWJsZS1pbmRleCc6IGluZGV4IH0sXG4gICAgICAgIGRyYWdIYW5kbGVQcm9wczoge30sXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKSxcbn0pKTtcblxuZGVzY3JpYmUoJ1J1YnJpYycsICgpID0+IHtcbiAgY29uc3QgcG9pbnRzID0gWydub3RoaW5nIHJpZ2h0JywgJ2EgdGVlbnkgYml0IHJpZ2h0JywgJ21vc3RseSByaWdodCcsICdiaW5nbyddO1xuICBjb25zdCBzYW1wbGVBbnN3ZXJzID0gW251bGwsICdqdXN0IHJpZ2h0JywgJ25vdCBsZWZ0JywgbnVsbF07XG4gIGNvbnN0IHRoZW1lID0gY3JlYXRlVGhlbWUoKTtcblxuICBjb25zdCByZW5kZXJDb21wb25lbnQgPSAodmFsdWUgPSB7fSwgcHJvcHMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgb25DaGFuZ2U6IGplc3QuZm4oKSxcbiAgICAgIGNsYXNzTmFtZTogJ2NsYXNzTmFtZScsXG4gICAgICB2YWx1ZToge1xuICAgICAgICBleGNsdWRlWmVybzogZmFsc2UsXG4gICAgICAgIHBvaW50cyxcbiAgICAgICAgc2FtcGxlQW5zd2VycyxcbiAgICAgICAgLi4udmFsdWUsXG4gICAgICB9LFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5yZW5kZXIoXG4gICAgICAgIDxUaGVtZVByb3ZpZGVyIHRoZW1lPXt0aGVtZX0+XG4gICAgICAgICAgPFJhd0F1dGhvcmluZyB7Li4uZGVmYXVsdFByb3BzfSAvPlxuICAgICAgICA8L1RoZW1lUHJvdmlkZXI+LFxuICAgICAgKSxcbiAgICAgIG9uQ2hhbmdlOiBkZWZhdWx0UHJvcHMub25DaGFuZ2UsXG4gICAgICBwcm9wczogZGVmYXVsdFByb3BzLFxuICAgIH07XG4gIH07XG5cbiAgZGVzY3JpYmUoJ3JlbmRlcicsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyBydWJyaWMgdGl0bGUgYW5kIG1haW4gc3RydWN0dXJlJywgKCkgPT4ge1xuICAgICAgcmVuZGVyQ29tcG9uZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnUnVicmljJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5TGFiZWxUZXh0KCdNYXggUG9pbnRzJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5TGFiZWxUZXh0KCdFeGNsdWRlIHplcm9zJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBhbGwgcG9pbnQgY29uZmlndXJhdGlvbnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KCk7XG4gICAgICAvLyBWZXJpZnkgRHJhZ0Ryb3BDb250ZXh0IGlzIHJlbmRlcmVkXG4gICAgICBleHBlY3QoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXRlc3RpZD1cImRyYWctZHJvcC1jb250ZXh0XCJdJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG5cbiAgICAgIC8vIENoZWNrIHRoYXQgcG9pbnQgbGFiZWxzIGFyZSByZW5kZXJlZCAoNCBwb2ludHMgPSBcIjMgcHRzXCIsIFwiMiBwdHNcIiwgXCIxIHB0XCIsIFwiMCBwdFwiKVxuICAgICAgLy8gTm90ZTogVGhlIFBvaW50Q29uZmlnIGNvbXBvbmVudCB1c2VzIHNpbmd1bGFyIFwicHRcIiBmb3IgMCBhbmQgMSwgcGx1cmFsIFwicHRzXCIgZm9yIDIrXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnMyBwdHMnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCcyIHB0cycpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJzEgcHQnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCcwIHB0JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZHJhZ2dhYmxlJywgKCkgPT4ge1xuICAgICAgaXQoJ3JlbmRlcnMgMyBkcmFnZ2FibGUgaXRlbXMgd2hlbiBleGNsdWRlWmVybyBpcyB0cnVlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHsgZXhjbHVkZVplcm86IHRydWUgfSk7XG5cbiAgICAgICAgLy8gV2hlbiBleGNsdWRlWmVybyBpcyB0cnVlLCB0aGUgbGFzdCBwb2ludCAoMCBwdHMpIHNob3VsZCBub3QgYmUgcmVuZGVyZWRcbiAgICAgICAgLy8gU28gd2Ugc2hvdWxkIGhhdmUgMyBkcmFnZ2FibGUgaXRlbXNcbiAgICAgICAgY29uc3QgZHJhZ2dhYmxlSXRlbXMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtZHJhZ2dhYmxlLWluZGV4XScpO1xuICAgICAgICBleHBlY3QoZHJhZ2dhYmxlSXRlbXMubGVuZ3RoKS50b0VxdWFsKDMpO1xuXG4gICAgICAgIC8vIFZlcmlmeSB0aGUgMCBwdCBsYWJlbCBpcyBub3QgcmVuZGVyZWRcbiAgICAgICAgZXhwZWN0KHNjcmVlbi5xdWVyeUJ5VGV4dCgnMCBwdCcpKS5ub3QudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmVuZGVycyA0IGRyYWdnYWJsZSBpdGVtcyB3aGVuIGV4Y2x1ZGVaZXJvIGlzIGZhbHNlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHsgZXhjbHVkZVplcm86IGZhbHNlIH0pO1xuXG4gICAgICAgIC8vIFdoZW4gZXhjbHVkZVplcm8gaXMgZmFsc2UsIGFsbCBwb2ludHMgaW5jbHVkaW5nIDAgc2hvdWxkIGJlIHJlbmRlcmVkXG4gICAgICAgIGNvbnN0IGRyYWdnYWJsZUl0ZW1zID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWRyYWdnYWJsZS1pbmRleF0nKTtcbiAgICAgICAgZXhwZWN0KGRyYWdnYWJsZUl0ZW1zLmxlbmd0aCkudG9FcXVhbCg0KTtcblxuICAgICAgICAvLyBWZXJpZnkgYWxsIHBvaW50IGxhYmVscyBhcmUgcmVuZGVyZWRcbiAgICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJzMgcHRzJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCcyIHB0cycpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnMSBwdCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnMCBwdCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsb2dpYycsICgpID0+IHtcbiAgICBkZXNjcmliZSgnY2hhbmdlTWF4UG9pbnRzJywgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdENoYW5nZU1heFBvaW50cyA9IChtYXhQb2ludHMsIGV4Y2x1ZGVaZXJvLCBleHBlY3RlZFBvaW50cywgZXhwZWN0ZWRTYW1wbGVBbnN3ZXJzKSA9PiB7XG4gICAgICAgIGl0KGBtYXhQb2ludHM9JHttYXhQb2ludHN9LCBleGNsdWRlWmVybz0ke2V4Y2x1ZGVaZXJvfSBjYWxscyBvbkNoYW5nZSBjb3JyZWN0bHlgLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBvbkNoYW5nZSwgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoeyBleGNsdWRlWmVybyB9KTtcblxuICAgICAgICAgIC8vIEdldCB0aGUgY29tcG9uZW50IGluc3RhbmNlIHRocm91Z2ggdGhlIGNvbnRhaW5lclxuICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2FsbCB0aGUgbWV0aG9kIGRpcmVjdGx5IHNpbmNlIHdlJ3JlIHRlc3RpbmcgaW50ZXJuYWwgYmVoYXZpb3JcbiAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdbY2xhc3MqPVwiTXVpQm94LXJvb3RcIl0nKT8uX293bmVyO1xuXG4gICAgICAgICAgLy8gU2luY2Ugd2UgY2FuJ3QgZWFzaWx5IGFjY2VzcyBpbnN0YW5jZSBtZXRob2RzIGluIFJUTCwgd2UnbGwgdGVzdCB0aGUgYmVoYXZpb3JcbiAgICAgICAgICAvLyBieSB2ZXJpZnlpbmcgdGhlIG9uQ2hhbmdlIHByb3AgcmVjZWl2ZXMgdGhlIGNvcnJlY3QgdmFsdWVzXG4gICAgICAgICAgLy8gRm9yIG5vdywgd2UnbGwgZGlyZWN0bHkgdGVzdCB0aGUgbG9naWNcbiAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUmF3QXV0aG9yaW5nKHtcbiAgICAgICAgICAgIHZhbHVlOiB7IGV4Y2x1ZGVaZXJvLCBwb2ludHMsIHNhbXBsZUFuc3dlcnMgfSxcbiAgICAgICAgICAgIG9uQ2hhbmdlLFxuICAgICAgICAgICAgY2xhc3Nlczoge30sXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdjbGFzc05hbWUnLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29tcG9uZW50LmNoYW5nZU1heFBvaW50cyhtYXhQb2ludHMpO1xuXG4gICAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgICAgICBleGNsdWRlWmVybyxcbiAgICAgICAgICAgIHBvaW50czogZXhwZWN0ZWRQb2ludHMsXG4gICAgICAgICAgICBzYW1wbGVBbnN3ZXJzOiBleHBlY3RlZFNhbXBsZUFuc3dlcnMsXG4gICAgICAgICAgICBtYXhQb2ludHM6IGV4cGVjdGVkUG9pbnRzLmxlbmd0aCAtIDEsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgdGVzdENoYW5nZU1heFBvaW50cygxLCBmYWxzZSwgXy50YWtlUmlnaHQocG9pbnRzLCAyKSwgXy50YWtlUmlnaHQoc2FtcGxlQW5zd2VycywgMikpO1xuICAgICAgdGVzdENoYW5nZU1heFBvaW50cygxLCB0cnVlLCBfLnRha2VSaWdodChwb2ludHMsIDIpLCBfLnRha2VSaWdodChzYW1wbGVBbnN3ZXJzLCAyKSk7XG4gICAgICB0ZXN0Q2hhbmdlTWF4UG9pbnRzKDIsIHRydWUsIF8udGFrZVJpZ2h0KHBvaW50cywgMyksIF8udGFrZVJpZ2h0KHNhbXBsZUFuc3dlcnMsIDMpKTtcbiAgICAgIHRlc3RDaGFuZ2VNYXhQb2ludHMoMiwgZmFsc2UsIF8udGFrZVJpZ2h0KHBvaW50cywgMyksIF8udGFrZVJpZ2h0KHNhbXBsZUFuc3dlcnMsIDMpKTtcbiAgICAgIHRlc3RDaGFuZ2VNYXhQb2ludHMoNSwgZmFsc2UsIFsnJywgJyddLmNvbmNhdChwb2ludHMpLCBbbnVsbCwgbnVsbF0uY29uY2F0KHNhbXBsZUFuc3dlcnMpKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjaGFuZ2VTYW1wbGVSZXNwb25zZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3RDaGFuZ2VTYW1wbGVSZXNwb25zZSA9IChpbmRleCwgY2xpY2tlZEl0ZW0sIGV4Y2x1ZGVaZXJvLCBleHBlY3RlZFBvaW50cywgZXhwZWN0ZWRTYW1wbGVBbnN3ZXJzKSA9PiB7XG4gICAgICAgIGl0KGBQb2ludCAke2luZGV4fSB3aXRoIGNsaWNrZWRJdGVtPVwiJHtjbGlja2VkSXRlbX1cIiBjYWxscyBvbkNoYW5nZSBjb3JyZWN0bHlgLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBvbkNoYW5nZSB9ID0gcmVuZGVyQ29tcG9uZW50KHsgZXhjbHVkZVplcm8gfSk7XG5cbiAgICAgICAgICAvLyBUZXN0IHRoZSBsb2dpYyBieSBjcmVhdGluZyBhIGNvbXBvbmVudCBpbnN0YW5jZSBhbmQgY2FsbGluZyB0aGUgbWV0aG9kXG4gICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFJhd0F1dGhvcmluZyh7XG4gICAgICAgICAgICB2YWx1ZTogeyBleGNsdWRlWmVybywgcG9pbnRzLCBzYW1wbGVBbnN3ZXJzIH0sXG4gICAgICAgICAgICBvbkNoYW5nZSxcbiAgICAgICAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3NOYW1lJyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbXBvbmVudC5vblBvaW50TWVudUNoYW5nZShpbmRleCwgY2xpY2tlZEl0ZW0pO1xuXG4gICAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgICAgICBleGNsdWRlWmVybyxcbiAgICAgICAgICAgIHBvaW50czogZXhwZWN0ZWRQb2ludHMsXG4gICAgICAgICAgICBzYW1wbGVBbnN3ZXJzOiBleHBlY3RlZFNhbXBsZUFuc3dlcnMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgdGVzdENoYW5nZVNhbXBsZVJlc3BvbnNlKDAsICdzYW1wbGUnLCBmYWxzZSwgcG9pbnRzLCBbJycsICdqdXN0IHJpZ2h0JywgJ25vdCBsZWZ0JywgbnVsbF0pO1xuICAgICAgdGVzdENoYW5nZVNhbXBsZVJlc3BvbnNlKDMsICdzYW1wbGUnLCBmYWxzZSwgcG9pbnRzLCBbbnVsbCwgJ2p1c3QgcmlnaHQnLCAnbm90IGxlZnQnLCAnJ10pO1xuICAgICAgdGVzdENoYW5nZVNhbXBsZVJlc3BvbnNlKDEsICdzYW1wbGUnLCB0cnVlLCBwb2ludHMsIFtudWxsLCBudWxsLCAnbm90IGxlZnQnLCBudWxsXSk7XG4gICAgICB0ZXN0Q2hhbmdlU2FtcGxlUmVzcG9uc2UoMywgJ3NhbXBsZScsIHRydWUsIHBvaW50cywgW251bGwsICdqdXN0IHJpZ2h0JywgJ25vdCBsZWZ0JywgJyddKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQUwsT0FBQTtBQUFrRSxTQUFBTSxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxH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
|