@pie-element/categorize 13.2.0-beta.0 → 13.2.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.md +68 -10
- package/configure/CHANGELOG.md +65 -8
- package/configure/package.json +5 -5
- package/controller/CHANGELOG.md +31 -4
- package/controller/package.json +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/package.json +6 -6
- package/configure/lib/__tests__/main.test.js +0 -100
- package/configure/lib/__tests__/utils.js +0 -39
- package/configure/lib/design/__tests__/builder.test.js +0 -34
- package/configure/lib/design/__tests__/buttons.test.js +0 -36
- package/configure/lib/design/__tests__/header.test.js +0 -37
- package/configure/lib/design/__tests__/index.test.js +0 -269
- package/configure/lib/design/__tests__/input-header.test.js +0 -41
- package/configure/lib/design/categories/__tests__/alternateResponses.test.js +0 -93
- package/configure/lib/design/categories/__tests__/category.test.js +0 -65
- package/configure/lib/design/categories/__tests__/choice-preview.test.js +0 -52
- package/configure/lib/design/categories/__tests__/droppable-placeholder.test.js +0 -63
- package/configure/lib/design/categories/__tests__/index.test.js +0 -91
- package/configure/lib/design/choices/__tests__/choice.test.js +0 -62
- package/configure/lib/design/choices/__tests__/config.test.js +0 -66
- package/configure/lib/design/choices/__tests__/index.test.js +0 -70
- package/controller/lib/__tests__/index.test.js +0 -526
- package/docs/demo/.pie/.configure/package.json +0 -10
- package/docs/demo/.pie/.configure/yarn.lock +0 -2122
- package/docs/demo/.pie/.controllers/package.json +0 -10
- package/docs/demo/.pie/.controllers/yarn.lock +0 -110
- package/docs/demo/.pie/info.entry.js +0 -89
- package/docs/demo/.pie/info.webpack.config.js +0 -119
- package/docs/demo/.pie/package.json +0 -10
- package/docs/demo/.pie/yarn.lock +0 -2137
- package/docs/demo/pie.manifest.json +0 -11
- package/lib/__tests__/index.test.js +0 -197
- package/lib/categorize/__tests__/categories.test.js +0 -138
- package/lib/categorize/__tests__/category.test.js +0 -137
- package/lib/categorize/__tests__/choice.test.js +0 -88
- package/lib/categorize/__tests__/choices.test.js +0 -118
- package/lib/categorize/__tests__/droppable-placeholder.test.js +0 -96
- package/lib/categorize/__tests__/grid-content.test.js +0 -48
- package/lib/categorize/__tests__/index.test.js +0 -250
package/CHANGELOG.md
CHANGED
|
@@ -3,24 +3,82 @@
|
|
|
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
|
-
# [13.2.0
|
|
6
|
+
# [13.2.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize@13.1.11...@pie-element/categorize@13.2.0) (2026-08-21)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- move [@pie-lib](https://github.com/pie-lib) deps back to latest, off next prereleases PIE-927 ([a53e012](https://github.com/pie-framework/pie-elements/commit/a53e0127eb4ac95ece54e1e2bd669ae4974f4251))
|
|
11
|
+
- read the prompt container by class, not by the id pie-lib removed PIE-927 ([aaaf6c2](https://github.com/pie-framework/pie-elements/commit/aaaf6c2f189de3b39f9de85969aeb2e50376c548))
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
- bump libs PIE-856, PIE-681, PIE-927 ([cb26d7a](https://github.com/pie-framework/pie-elements/commit/cb26d7afa6c99522533c321d5ff8ce3148a66e9e))
|
|
16
|
+
|
|
17
|
+
## [13.1.11](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize@13.1.10...@pie-element/categorize@13.1.11) (2026-08-19)
|
|
18
|
+
|
|
19
|
+
### Bug Fixes
|
|
20
|
+
|
|
21
|
+
- bump libs and shared modules PIE-681, PIE-708 ([08af8b5](https://github.com/pie-framework/pie-elements/commit/08af8b5802aecc8ee5454a1b6d60277d7ec94204))
|
|
22
|
+
|
|
23
|
+
## [13.1.10](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize@13.1.8...@pie-element/categorize@13.1.10) (2026-08-13)
|
|
24
|
+
|
|
25
|
+
**Note:** Version bump only for package @pie-element/categorize
|
|
26
|
+
|
|
27
|
+
## [13.1.9](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize@13.1.7...@pie-element/categorize@13.1.9) (2026-08-11)
|
|
28
|
+
|
|
29
|
+
**Note:** Version bump only for package @pie-element/categorize
|
|
30
|
+
|
|
31
|
+
## [13.1.8](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize@13.1.7...@pie-element/categorize@13.1.8) (2026-07-31)
|
|
32
|
+
|
|
33
|
+
**Note:** Version bump only for package @pie-element/categorize
|
|
34
|
+
|
|
35
|
+
## [13.1.7](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize@13.1.6...@pie-element/categorize@13.1.7) (2026-07-08)
|
|
7
36
|
|
|
8
37
|
### Bug Fixes
|
|
9
38
|
|
|
10
39
|
- bump libs & shared modules PIE-706, PIE-702, PIE-679, PIE-698 ([5b1a8c4](https://github.com/pie-framework/pie-elements/commit/5b1a8c4c3eba2126fc43d78fd0187e7cd11d5424))
|
|
11
|
-
- bump shared modules and libs PIE-600, PIE-602 ([ce99f6a](https://github.com/pie-framework/pie-elements/commit/ce99f6af50cb855b666a6df9340f9f5445fde4c4))
|
|
12
|
-
- bump shared modules and libs PIE-661 PIE-664 PIE-683 PIE-666 PIE-656 PIE-657 PIE-658 PIE-659 PIE-670 ([ebd6be4](https://github.com/pie-framework/pie-elements/commit/ebd6be4fd48fca41ad4c4908f606b25334731aed))
|
|
13
|
-
- bump shared modules and libs PIE-674, PIE-662, PIE-705, PIE-674, PIE-963 ([78a3f64](https://github.com/pie-framework/pie-elements/commit/78a3f64652c9581c61bd4159f3210fc1e32d8bcf))
|
|
14
|
-
- bump shared modules and libs PIE-695, PIE-697, PIE-699, PIE-680, PIE-714, PIE-665, PIE-656 ([4b76ae7](https://github.com/pie-framework/pie-elements/commit/4b76ae75d1c5ea6d55f7c6fb53f299dfcbda2b1f))
|
|
15
|
-
- bump shared modules and libsPIE-603, PIE-604, PIE-663, PIE-662, PIE-678 ([e61c7a7](https://github.com/pie-framework/pie-elements/commit/e61c7a7d23744586337dfbb17a18ebfc656c202f))
|
|
16
40
|
- **categorize:** compute allowmultiple based on response when missing, get rid of defaults value PIE, add tests PIE-723 ([3217ede](https://github.com/pie-framework/pie-elements/commit/3217edebf20e3906a8c46d775dfb2e3ee0095fd6))
|
|
17
|
-
- **categorize:** fix lint warnings PIE-433 ([b3a61de](https://github.com/pie-framework/pie-elements/commit/b3a61de893e7aa0b3bfc119ca17a6acc769a042a))
|
|
18
|
-
- **categorize:** normalize categoryCount based on allowMultiplePlacements PIE-433 ([60f8473](https://github.com/pie-framework/pie-elements/commit/60f847381b769fa3cc4add100cce821b2aa6338c))
|
|
19
41
|
- **categorize:** use single quotes lint warning PIE-723 ([4d2162a](https://github.com/pie-framework/pie-elements/commit/4d2162a6a618a7f5104a89e753a02dba75fb8c11))
|
|
20
|
-
|
|
42
|
+
|
|
43
|
+
## [13.1.6](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize@13.1.5...@pie-element/categorize@13.1.6) (2026-07-02)
|
|
44
|
+
|
|
45
|
+
### Bug Fixes
|
|
46
|
+
|
|
47
|
+
- bump shared modules and libs PIE-695, PIE-697, PIE-699, PIE-680, PIE-714, PIE-665, PIE-656 ([4b76ae7](https://github.com/pie-framework/pie-elements/commit/4b76ae75d1c5ea6d55f7c6fb53f299dfcbda2b1f))
|
|
48
|
+
- sync libs versions ([48b5be9](https://github.com/pie-framework/pie-elements/commit/48b5be9559eb5b5235ca05f51c5f0161032a7041))
|
|
49
|
+
|
|
50
|
+
## [13.1.5](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize@13.1.4...@pie-element/categorize@13.1.5) (2026-06-22)
|
|
51
|
+
|
|
52
|
+
### Bug Fixes
|
|
53
|
+
|
|
54
|
+
- bump shared modules and libs PIE-674, PIE-662, PIE-705, PIE-674, PIE-963 ([78a3f64](https://github.com/pie-framework/pie-elements/commit/78a3f64652c9581c61bd4159f3210fc1e32d8bcf))
|
|
21
55
|
- if allowMultiplePlacements default should be false PIE-682 ([b7447f4](https://github.com/pie-framework/pie-elements/commit/b7447f4d97e9d7cc2415f54a17ffe13ed15d1ebb))
|
|
22
56
|
- if allowMultiplePlacements is missing default should be false PIE-682 ([3f93d0d](https://github.com/pie-framework/pie-elements/commit/3f93d0de81de3a5cbd2763184d2241f31e9dbae0))
|
|
23
|
-
|
|
57
|
+
|
|
58
|
+
## [13.1.4](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize@13.1.3...@pie-element/categorize@13.1.4) (2026-06-17)
|
|
59
|
+
|
|
60
|
+
### Bug Fixes
|
|
61
|
+
|
|
62
|
+
- bump shared modules and libs PIE-661 PIE-664 PIE-683 PIE-666 PIE-656 PIE-657 PIE-658 PIE-659 PIE-670 ([ebd6be4](https://github.com/pie-framework/pie-elements/commit/ebd6be4fd48fca41ad4c4908f606b25334731aed))
|
|
63
|
+
- clear \_root reference on disconnect PIE-686 ([0a236ce](https://github.com/pie-framework/pie-elements/commit/0a236ce1decbd64b250d97484212179f62adc049))
|
|
64
|
+
|
|
65
|
+
## [13.1.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize@13.1.2...@pie-element/categorize@13.1.3) (2026-06-12)
|
|
66
|
+
|
|
67
|
+
### Bug Fixes
|
|
68
|
+
|
|
69
|
+
- bump shared modules and libsPIE-603, PIE-604, PIE-663, PIE-662, PIE-678 ([e61c7a7](https://github.com/pie-framework/pie-elements/commit/e61c7a7d23744586337dfbb17a18ebfc656c202f))
|
|
70
|
+
- **categorize:** fix lint warnings PIE-433 ([b3a61de](https://github.com/pie-framework/pie-elements/commit/b3a61de893e7aa0b3bfc119ca17a6acc769a042a))
|
|
71
|
+
- **categorize:** normalize categoryCount based on allowMultiplePlacements PIE-433 ([60f8473](https://github.com/pie-framework/pie-elements/commit/60f847381b769fa3cc4add100cce821b2aa6338c))
|
|
72
|
+
|
|
73
|
+
## [13.1.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize@13.1.1...@pie-element/categorize@13.1.2) (2026-06-04)
|
|
74
|
+
|
|
75
|
+
### Bug Fixes
|
|
76
|
+
|
|
77
|
+
- bump shared modules and libs PIE-600, PIE-602 ([ce99f6a](https://github.com/pie-framework/pie-elements/commit/ce99f6af50cb855b666a6df9340f9f5445fde4c4))
|
|
78
|
+
|
|
79
|
+
## [13.1.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize@13.1.0...@pie-element/categorize@13.1.1) (2026-05-21)
|
|
80
|
+
|
|
81
|
+
**Note:** Version bump only for package @pie-element/categorize
|
|
24
82
|
|
|
25
83
|
# [13.1.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize@13.1.0-next.1...@pie-element/categorize@13.1.0) (2026-05-21)
|
|
26
84
|
|
package/configure/CHANGELOG.md
CHANGED
|
@@ -3,21 +3,78 @@
|
|
|
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
|
-
# [11.2.0
|
|
6
|
+
# [11.2.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-configure@11.1.11...@pie-element/categorize-configure@11.2.0) (2026-08-21)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- move [@pie-lib](https://github.com/pie-lib) deps back to latest, off next prereleases PIE-927 ([a53e012](https://github.com/pie-framework/pie-elements/commit/a53e0127eb4ac95ece54e1e2bd669ae4974f4251))
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
- bump libs PIE-856, PIE-681, PIE-927 ([cb26d7a](https://github.com/pie-framework/pie-elements/commit/cb26d7afa6c99522533c321d5ff8ce3148a66e9e))
|
|
15
|
+
|
|
16
|
+
## [11.1.11](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-configure@11.1.10...@pie-element/categorize-configure@11.1.11) (2026-08-19)
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
- bump libs and shared modules PIE-681, PIE-708 ([08af8b5](https://github.com/pie-framework/pie-elements/commit/08af8b5802aecc8ee5454a1b6d60277d7ec94204))
|
|
21
|
+
|
|
22
|
+
## [11.1.10](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-configure@11.1.8...@pie-element/categorize-configure@11.1.10) (2026-08-13)
|
|
23
|
+
|
|
24
|
+
**Note:** Version bump only for package @pie-element/categorize-configure
|
|
25
|
+
|
|
26
|
+
## [11.1.9](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-configure@11.1.7...@pie-element/categorize-configure@11.1.9) (2026-08-11)
|
|
27
|
+
|
|
28
|
+
**Note:** Version bump only for package @pie-element/categorize-configure
|
|
29
|
+
|
|
30
|
+
## [11.1.8](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-configure@11.1.7...@pie-element/categorize-configure@11.1.8) (2026-07-31)
|
|
31
|
+
|
|
32
|
+
**Note:** Version bump only for package @pie-element/categorize-configure
|
|
33
|
+
|
|
34
|
+
## [11.1.7](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-configure@11.1.6...@pie-element/categorize-configure@11.1.7) (2026-07-08)
|
|
7
35
|
|
|
8
36
|
### Bug Fixes
|
|
9
37
|
|
|
10
38
|
- bump libs & shared modules PIE-706, PIE-702, PIE-679, PIE-698 ([5b1a8c4](https://github.com/pie-framework/pie-elements/commit/5b1a8c4c3eba2126fc43d78fd0187e7cd11d5424))
|
|
11
|
-
- bump shared modules and libs PIE-600, PIE-602 ([ce99f6a](https://github.com/pie-framework/pie-elements/commit/ce99f6af50cb855b666a6df9340f9f5445fde4c4))
|
|
12
|
-
- bump shared modules and libs PIE-661 PIE-664 PIE-683 PIE-666 PIE-656 PIE-657 PIE-658 PIE-659 PIE-670 ([ebd6be4](https://github.com/pie-framework/pie-elements/commit/ebd6be4fd48fca41ad4c4908f606b25334731aed))
|
|
13
|
-
- bump shared modules and libs PIE-674, PIE-662, PIE-705, PIE-674, PIE-963 ([78a3f64](https://github.com/pie-framework/pie-elements/commit/78a3f64652c9581c61bd4159f3210fc1e32d8bcf))
|
|
14
|
-
- bump shared modules and libs PIE-695, PIE-697, PIE-699, PIE-680, PIE-714, PIE-665, PIE-656 ([4b76ae7](https://github.com/pie-framework/pie-elements/commit/4b76ae75d1c5ea6d55f7c6fb53f299dfcbda2b1f))
|
|
15
|
-
- bump shared modules and libsPIE-603, PIE-604, PIE-663, PIE-662, PIE-678 ([e61c7a7](https://github.com/pie-framework/pie-elements/commit/e61c7a7d23744586337dfbb17a18ebfc656c202f))
|
|
16
39
|
- **categorize:** compute allowmultiple based on response when missing, get rid of defaults value PIE, add tests PIE-723 ([3217ede](https://github.com/pie-framework/pie-elements/commit/3217edebf20e3906a8c46d775dfb2e3ee0095fd6))
|
|
17
|
-
|
|
18
|
-
|
|
40
|
+
|
|
41
|
+
## [11.1.6](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-configure@11.1.5...@pie-element/categorize-configure@11.1.6) (2026-07-02)
|
|
42
|
+
|
|
43
|
+
### Bug Fixes
|
|
44
|
+
|
|
45
|
+
- bump shared modules and libs PIE-695, PIE-697, PIE-699, PIE-680, PIE-714, PIE-665, PIE-656 ([4b76ae7](https://github.com/pie-framework/pie-elements/commit/4b76ae75d1c5ea6d55f7c6fb53f299dfcbda2b1f))
|
|
19
46
|
- sync libs versions ([48b5be9](https://github.com/pie-framework/pie-elements/commit/48b5be9559eb5b5235ca05f51c5f0161032a7041))
|
|
20
47
|
|
|
48
|
+
## [11.1.5](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-configure@11.1.4...@pie-element/categorize-configure@11.1.5) (2026-06-22)
|
|
49
|
+
|
|
50
|
+
### Bug Fixes
|
|
51
|
+
|
|
52
|
+
- bump shared modules and libs PIE-674, PIE-662, PIE-705, PIE-674, PIE-963 ([78a3f64](https://github.com/pie-framework/pie-elements/commit/78a3f64652c9581c61bd4159f3210fc1e32d8bcf))
|
|
53
|
+
- if allowMultiplePlacements default should be false PIE-682 ([b7447f4](https://github.com/pie-framework/pie-elements/commit/b7447f4d97e9d7cc2415f54a17ffe13ed15d1ebb))
|
|
54
|
+
|
|
55
|
+
## [11.1.4](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-configure@11.1.3...@pie-element/categorize-configure@11.1.4) (2026-06-17)
|
|
56
|
+
|
|
57
|
+
### Bug Fixes
|
|
58
|
+
|
|
59
|
+
- bump shared modules and libs PIE-661 PIE-664 PIE-683 PIE-666 PIE-656 PIE-657 PIE-658 PIE-659 PIE-670 ([ebd6be4](https://github.com/pie-framework/pie-elements/commit/ebd6be4fd48fca41ad4c4908f606b25334731aed))
|
|
60
|
+
- clear \_root reference on disconnect PIE-686 ([0a236ce](https://github.com/pie-framework/pie-elements/commit/0a236ce1decbd64b250d97484212179f62adc049))
|
|
61
|
+
|
|
62
|
+
## [11.1.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-configure@11.1.2...@pie-element/categorize-configure@11.1.3) (2026-06-12)
|
|
63
|
+
|
|
64
|
+
### Bug Fixes
|
|
65
|
+
|
|
66
|
+
- bump shared modules and libsPIE-603, PIE-604, PIE-663, PIE-662, PIE-678 ([e61c7a7](https://github.com/pie-framework/pie-elements/commit/e61c7a7d23744586337dfbb17a18ebfc656c202f))
|
|
67
|
+
|
|
68
|
+
## [11.1.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-configure@11.1.1...@pie-element/categorize-configure@11.1.2) (2026-06-04)
|
|
69
|
+
|
|
70
|
+
### Bug Fixes
|
|
71
|
+
|
|
72
|
+
- bump shared modules and libs PIE-600, PIE-602 ([ce99f6a](https://github.com/pie-framework/pie-elements/commit/ce99f6af50cb855b666a6df9340f9f5445fde4c4))
|
|
73
|
+
|
|
74
|
+
## [11.1.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-configure@11.1.0...@pie-element/categorize-configure@11.1.1) (2026-05-21)
|
|
75
|
+
|
|
76
|
+
**Note:** Version bump only for package @pie-element/categorize-configure
|
|
77
|
+
|
|
21
78
|
# [11.1.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-configure@11.1.0-next.1...@pie-element/categorize-configure@11.1.0) (2026-05-21)
|
|
22
79
|
|
|
23
80
|
### Bug Fixes
|
package/configure/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"private": true,
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"module": "src/index.js",
|
|
6
|
-
"version": "11.2.0
|
|
6
|
+
"version": "11.2.0",
|
|
7
7
|
"description": "",
|
|
8
8
|
"scripts": {},
|
|
9
9
|
"author": "pie framework developers",
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
"@mui/material": "^7.3.4",
|
|
17
17
|
"@pie-framework/pie-configure-events": "^1.3.0",
|
|
18
18
|
"@pie-lib/categorize": "2.0.2",
|
|
19
|
-
"@pie-lib/config-ui": "13.
|
|
20
|
-
"@pie-lib/drag": "4.
|
|
21
|
-
"@pie-lib/editable-html-tip-tap": "2.
|
|
19
|
+
"@pie-lib/config-ui": "13.0.16",
|
|
20
|
+
"@pie-lib/drag": "4.1.1",
|
|
21
|
+
"@pie-lib/editable-html-tip-tap": "2.1.14",
|
|
22
22
|
"@pie-lib/math-rendering": "5.1.0",
|
|
23
|
-
"@pie-lib/render-ui": "
|
|
23
|
+
"@pie-lib/render-ui": "7.0.0",
|
|
24
24
|
"@pie-lib/translator": "4.0.2",
|
|
25
25
|
"debug": "^4.1.1",
|
|
26
26
|
"lodash-es": "^4.17.23",
|
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,17 +3,44 @@
|
|
|
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
|
+
## [10.1.7](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-controller@10.1.5...@pie-element/categorize-controller@10.1.7) (2026-08-13)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-element/categorize-controller
|
|
9
|
+
|
|
10
|
+
## [10.1.6](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-controller@10.1.5...@pie-element/categorize-controller@10.1.6) (2026-08-11)
|
|
11
|
+
|
|
12
|
+
**Note:** Version bump only for package @pie-element/categorize-controller
|
|
13
|
+
|
|
14
|
+
## [10.1.5](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-controller@10.1.4...@pie-element/categorize-controller@10.1.5) (2026-07-08)
|
|
7
15
|
|
|
8
16
|
### Bug Fixes
|
|
9
17
|
|
|
10
|
-
- bump shared modules and libs PIE-695, PIE-697, PIE-699, PIE-680, PIE-714, PIE-665, PIE-656 ([4b76ae7](https://github.com/pie-framework/pie-elements/commit/4b76ae75d1c5ea6d55f7c6fb53f299dfcbda2b1f))
|
|
11
18
|
- **categorize:** compute allowmultiple based on response when missing, get rid of defaults value PIE, add tests PIE-723 ([3217ede](https://github.com/pie-framework/pie-elements/commit/3217edebf20e3906a8c46d775dfb2e3ee0095fd6))
|
|
12
|
-
- **categorize:** fix lint warnings PIE-433 ([b3a61de](https://github.com/pie-framework/pie-elements/commit/b3a61de893e7aa0b3bfc119ca17a6acc769a042a))
|
|
13
|
-
- **categorize:** normalize categoryCount based on allowMultiplePlacements PIE-433 ([60f8473](https://github.com/pie-framework/pie-elements/commit/60f847381b769fa3cc4add100cce821b2aa6338c))
|
|
14
19
|
- **categorize:** use single quotes lint warning PIE-723 ([4d2162a](https://github.com/pie-framework/pie-elements/commit/4d2162a6a618a7f5104a89e753a02dba75fb8c11))
|
|
20
|
+
|
|
21
|
+
## [10.1.4](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-controller@10.1.3...@pie-element/categorize-controller@10.1.4) (2026-07-02)
|
|
22
|
+
|
|
23
|
+
### Bug Fixes
|
|
24
|
+
|
|
25
|
+
- bump shared modules and libs PIE-695, PIE-697, PIE-699, PIE-680, PIE-714, PIE-665, PIE-656 ([4b76ae7](https://github.com/pie-framework/pie-elements/commit/4b76ae75d1c5ea6d55f7c6fb53f299dfcbda2b1f))
|
|
26
|
+
|
|
27
|
+
## [10.1.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-controller@10.1.2...@pie-element/categorize-controller@10.1.3) (2026-06-22)
|
|
28
|
+
|
|
29
|
+
### Bug Fixes
|
|
30
|
+
|
|
15
31
|
- if allowMultiplePlacements is missing default should be false PIE-682 ([3f93d0d](https://github.com/pie-framework/pie-elements/commit/3f93d0de81de3a5cbd2763184d2241f31e9dbae0))
|
|
16
32
|
|
|
33
|
+
## [10.1.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-controller@10.1.1...@pie-element/categorize-controller@10.1.2) (2026-06-12)
|
|
34
|
+
|
|
35
|
+
### Bug Fixes
|
|
36
|
+
|
|
37
|
+
- **categorize:** fix lint warnings PIE-433 ([b3a61de](https://github.com/pie-framework/pie-elements/commit/b3a61de893e7aa0b3bfc119ca17a6acc769a042a))
|
|
38
|
+
- **categorize:** normalize categoryCount based on allowMultiplePlacements PIE-433 ([60f8473](https://github.com/pie-framework/pie-elements/commit/60f847381b769fa3cc4add100cce821b2aa6338c))
|
|
39
|
+
|
|
40
|
+
## [10.1.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-controller@10.1.0...@pie-element/categorize-controller@10.1.1) (2026-05-21)
|
|
41
|
+
|
|
42
|
+
**Note:** Version bump only for package @pie-element/categorize-controller
|
|
43
|
+
|
|
17
44
|
# [10.1.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/categorize-controller@10.1.0-next.1...@pie-element/categorize-controller@10.1.0) (2026-05-21)
|
|
18
45
|
|
|
19
46
|
### Bug Fixes
|
package/controller/package.json
CHANGED
package/lib/index.js
CHANGED
|
@@ -97,7 +97,7 @@ class Categorize extends HTMLElement {
|
|
|
97
97
|
if (autoplayAudioEnabled && completeAudioEnabled && !this.audioComplete) {
|
|
98
98
|
if (elementContext) {
|
|
99
99
|
const audio = elementContext.querySelector('audio');
|
|
100
|
-
const isInsidePrompt = audio && audio.closest('
|
|
100
|
+
const isInsidePrompt = audio && audio.closest('.preview-prompt');
|
|
101
101
|
|
|
102
102
|
// only require audio completion if audio exists and is inside the prompt
|
|
103
103
|
if (audio && isInsidePrompt) {
|
|
@@ -209,7 +209,7 @@ class Categorize extends HTMLElement {
|
|
|
209
209
|
if (mutation.type === 'childList') {
|
|
210
210
|
if (this._audioInitialized) return;
|
|
211
211
|
const audio = this.querySelector('audio');
|
|
212
|
-
const isInsidePrompt = audio && audio.closest('
|
|
212
|
+
const isInsidePrompt = audio && audio.closest('.preview-prompt');
|
|
213
213
|
if (!this._model) return;
|
|
214
214
|
if (!this._model.autoplayAudioEnabled) return;
|
|
215
215
|
if (audio && !isInsidePrompt) return;
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_mathRendering","_renderUi","_piePlayerEvents","_categorize","Categorize","HTMLElement","constructor","_defineProperty2","default","_mathRenderPending","requestAnimationFrame","_mathObserver","_mathObserverPaused","disconnect","renderMath","setTimeout","observe","childList","subtree","characterData","_root","_initMathObserver","MutationObserver","_scheduleMathRender","_disconnectMathObserver","model","m","_model","eliminateBlindAnswersFromSession","dispatchEvent","ModelSetEvent","tagName","toLowerCase","isComplete","_audioInitialized","render","autoplayAudioEnabled","choices","completeAudioEnabled","hasUnplacedChoices","possibleResponses","responseAreasToBeFilled","elementContext","audioComplete","audio","querySelector","isInsidePrompt","closest","_session","answers","Array","isArray","filledResponseAreas","filter","answer","length","areResponseAreasFilled","duplicatesAllowed","some","choice","categoryCount","allAnswersIds","map","flat","requiredAnswersPlaced","response","every","val","includes","session","s","mappedChoices","c","id","filteredAnswers","answerChoices","changeAnswers","selector","SessionChangedEvent","onShowCorrectToggle","_createAudioInfoToast","info","document","createElement","Object","assign","style","position","top","width","height","display","justifyContent","alignItems","background","zIndex","cursor","img","src","EnableAudioAutoplayImage","alt","appendChild","connectedCallback","observer","mutationsList","forEach","mutation","type","container","enableAudio","play","removeChild","removeEventListener","paused","addEventListener","handlePlaying","audioStartTime","Date","getTime","handleEnded","audioEndTime","waitTime","_audio","_handlePlaying","_handleEnded","_enableAudio","disconnectedCallback","unmount","el","React","CategorizeComponent","onAnswersChange","bind","pauseMathObserver","resumeMathObserver","createRoot","exports"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { EnableAudioAutoplayImage } from '@pie-lib/render-ui';\nimport { SessionChangedEvent, ModelSetEvent } from '@pie-framework/pie-player-events';\nimport CategorizeComponent from './categorize';\n\nexport default class Categorize extends HTMLElement {\n constructor() {\n super();\n this._root = null;\n this._mathObserver = null;\n this._mathRenderPending = false;\n }\n\n _scheduleMathRender = () => {\n if (this._mathRenderPending) return;\n\n this._mathRenderPending = true;\n\n requestAnimationFrame(() => {\n if (this._mathObserver && !this._mathObserverPaused) {\n this._mathObserver.disconnect();\n }\n\n renderMath(this);\n\n this._mathRenderPending = false;\n\n setTimeout(() => {\n if (this._mathObserver && !this._mathObserverPaused) {\n this._mathObserver.observe(this, {\n childList: true,\n subtree: true,\n characterData: false,\n });\n }\n }, 50);\n });\n };\n\n _initMathObserver() {\n if (this._mathObserver) return;\n\n this._mathObserver = new MutationObserver(() => {\n this._scheduleMathRender();\n });\n\n this._mathObserver.observe(this, {\n childList: true,\n subtree: true,\n characterData: false,\n });\n }\n\n _disconnectMathObserver() {\n if (this._mathObserver) {\n this._mathObserver.disconnect();\n this._mathObserver = null;\n }\n }\n\n pauseMathObserver = () => {\n if (this._mathObserver) {\n this._mathObserver.disconnect();\n this._mathObserverPaused = true;\n }\n };\n\n resumeMathObserver = () => {\n if (this._mathObserverPaused) {\n this._mathObserverPaused = false;\n\n if (this._mathObserver) {\n this._mathObserver.observe(this, {\n childList: true,\n subtree: true,\n characterData: false,\n });\n }\n }\n };\n\n set model(m) {\n this._model = m;\n\n this.eliminateBlindAnswersFromSession();\n this.dispatchEvent(new ModelSetEvent(this.tagName.toLowerCase(), this.isComplete(), !!this._model));\n // reset the audioInitialized to false since the model changed, and we might need to reinitialize the audio\n this._audioInitialized = false;\n\n this.render();\n }\n\n isComplete() {\n const {\n autoplayAudioEnabled,\n choices,\n completeAudioEnabled,\n hasUnplacedChoices,\n possibleResponses,\n responseAreasToBeFilled,\n } = this._model || {};\n const elementContext = this;\n\n // check audio completion if audio settings are enabled and audio actually exists\n if (autoplayAudioEnabled && completeAudioEnabled && !this.audioComplete) {\n if (elementContext) {\n const audio = elementContext.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n // only require audio completion if audio exists and is inside the prompt\n if (audio && isInsidePrompt) {\n return false;\n }\n }\n }\n\n if (!this._session || !this._session.answers) {\n return false;\n }\n\n const { answers } = this._session;\n\n if (!Array.isArray(answers)) {\n return false;\n }\n\n // filter answers by category and count the ones with content\n const filledResponseAreas = answers.filter((answer) => answer.choices.length).length;\n // check if an answer choice was added to at least as many response areas\n // as the number of populated response areas in the correct answer\n const areResponseAreasFilled = filledResponseAreas >= responseAreasToBeFilled;\n // check if multiple placements are allowed\n const duplicatesAllowed = (choices || []).some((choice) => choice.categoryCount === 0);\n\n if (duplicatesAllowed) {\n // an answer choice can be used multiple times\n return areResponseAreasFilled;\n }\n\n // any correct answer have any unplaced answer choices (by the author)\n if (hasUnplacedChoices) {\n return areResponseAreasFilled;\n }\n\n const allAnswersIds = answers.map((answer) => answer.choices).flat();\n\n // check if any correct answer have any unplaced answer choices (by the student)\n const requiredAnswersPlaced = (possibleResponses || []).some((response) =>\n response.every((val) => allAnswersIds.includes(val)),\n );\n\n // true - all choices (required for a correct response) were placed into a response area\n return requiredAnswersPlaced;\n }\n\n set session(s) {\n if (s && !s.answers) {\n s.answers = [];\n }\n\n this._session = s;\n this.render();\n }\n\n get session() {\n return this._session;\n }\n\n eliminateBlindAnswersFromSession() {\n const { answers = [] } = this._session || {};\n const { choices = [] } = this._model || {};\n\n const mappedChoices = choices.map((c) => c.id) || [];\n const filteredAnswers = answers.map((answer) => {\n const answerChoices = answer?.choices || [];\n answer.choices = answerChoices.filter((c) => mappedChoices.includes(c));\n\n return answer;\n });\n\n if (filteredAnswers.length > 0) {\n this.changeAnswers(filteredAnswers);\n }\n }\n\n changeAnswers(answers) {\n this._session.answers = answers;\n this._session.selector = 'Mouse';\n\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete()));\n\n this.render();\n }\n\n onShowCorrectToggle() {\n renderMath(this);\n }\n\n _createAudioInfoToast() {\n const info = document.createElement('div');\n info.id = 'play-audio-info';\n\n Object.assign(info.style, {\n position: 'absolute',\n top: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n zIndex: '1000',\n cursor: 'pointer',\n });\n\n const img = document.createElement('img');\n img.src = EnableAudioAutoplayImage;\n img.alt = 'Click anywhere to enable audio autoplay';\n img.width = 500;\n img.height = 300;\n\n info.appendChild(img);\n return info;\n }\n\n connectedCallback() {\n this._initMathObserver();\n \n // Observation: audio in Chrome will have the autoplay attribute,\n // while other browsers will not have the autoplay attribute and will need a user interaction to play the audio\n // This workaround fixes the issue of audio being cached and played on any user interaction in Safari and Firefox\n const observer = new MutationObserver((mutationsList, observer) => {\n mutationsList.forEach((mutation) => {\n if (mutation.type === 'childList') {\n if (this._audioInitialized) return;\n const audio = this.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n if (!this._model) return;\n if (!this._model.autoplayAudioEnabled) return;\n if (audio && !isInsidePrompt) return;\n if (!audio) return;\n\n const info = this._createAudioInfoToast();\n const container = this.querySelector('#main-container');\n const enableAudio = () => {\n if (this.querySelector('#play-audio-info')) {\n audio.play();\n container.removeChild(info);\n }\n\n document.removeEventListener('click', enableAudio);\n };\n\n // if the audio is paused, it means the user has not interacted with the page yet and the audio will not play\n // FIX FOR SAFARI: play with a slight delay to check if autoplay was blocked\n setTimeout(() => {\n if (audio.paused && !this.querySelector('#play-audio-info')) {\n // add info message as a toast to enable audio playback\n container.appendChild(info);\n document.addEventListener('click', enableAudio);\n } else {\n document.removeEventListener('click', enableAudio);\n }\n }, 500);\n\n // we need to listen for the playing event to remove the toast in case the audio plays because of re-rendering\n const handlePlaying = () => {\n //timestamp when auto-played audio started playing\n this._session.audioStartTime = this._session.audioStartTime || new Date().getTime();\n\n const info = this.querySelector('#play-audio-info');\n if (info) {\n container.removeChild(info);\n }\n\n audio.removeEventListener('playing', handlePlaying);\n };\n\n audio.addEventListener('playing', handlePlaying);\n\n // we need to listen for the ended event to update the isComplete state\n const handleEnded = () => {\n //timestamp when auto-played audio completed playing\n this._session.audioEndTime = this._session.audioEndTime || new Date().getTime();\n\n let { audioStartTime, audioEndTime, waitTime } = this._session;\n if (!waitTime && audioStartTime && audioEndTime) {\n // waitTime is elapsed time the user waited for auto-played audio to finish\n this._session.waitTime = audioEndTime - audioStartTime;\n }\n\n this.audioComplete = true;\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete()));\n\n audio.removeEventListener('ended', handleEnded);\n };\n\n audio.addEventListener('ended', handleEnded);\n\n // store references to remove later\n this._audio = audio;\n this._handlePlaying = handlePlaying;\n this._handleEnded = handleEnded;\n this._enableAudio = enableAudio;\n // set to true to prevent multiple initializations\n this._audioInitialized = true;\n\n observer.disconnect();\n }\n });\n });\n\n observer.observe(this, { childList: true, subtree: true });\n }\n\n disconnectedCallback() {\n this._disconnectMathObserver();\n \n document.removeEventListener('click', this._enableAudio);\n\n if (this._audio) {\n this._audio.removeEventListener('playing', this._handlePlaying);\n this._audio.removeEventListener('ended', this._handleEnded);\n this._audio = null;\n }\n\n if (this._root) {\n this._root.unmount();\n }\n }\n\n render() {\n if (this._model && this._session) {\n const el = React.createElement(CategorizeComponent, {\n model: this._model,\n session: this._session,\n onAnswersChange: this.changeAnswers.bind(this),\n onShowCorrectToggle: this.onShowCorrectToggle.bind(this),\n pauseMathObserver: this.pauseMathObserver,\n resumeMathObserver: this.resumeMathObserver,\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(el);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_mathRendering","_renderUi","_piePlayerEvents","_categorize","Categorize","HTMLElement","constructor","_defineProperty2","default","_mathRenderPending","requestAnimationFrame","_mathObserver","_mathObserverPaused","disconnect","renderMath","setTimeout","observe","childList","subtree","characterData","_root","_initMathObserver","MutationObserver","_scheduleMathRender","_disconnectMathObserver","model","m","_model","eliminateBlindAnswersFromSession","dispatchEvent","ModelSetEvent","tagName","toLowerCase","isComplete","_audioInitialized","render","autoplayAudioEnabled","choices","completeAudioEnabled","hasUnplacedChoices","possibleResponses","responseAreasToBeFilled","elementContext","audioComplete","audio","querySelector","isInsidePrompt","closest","_session","answers","Array","isArray","filledResponseAreas","filter","answer","length","areResponseAreasFilled","duplicatesAllowed","some","choice","categoryCount","allAnswersIds","map","flat","requiredAnswersPlaced","response","every","val","includes","session","s","mappedChoices","c","id","filteredAnswers","answerChoices","changeAnswers","selector","SessionChangedEvent","onShowCorrectToggle","_createAudioInfoToast","info","document","createElement","Object","assign","style","position","top","width","height","display","justifyContent","alignItems","background","zIndex","cursor","img","src","EnableAudioAutoplayImage","alt","appendChild","connectedCallback","observer","mutationsList","forEach","mutation","type","container","enableAudio","play","removeChild","removeEventListener","paused","addEventListener","handlePlaying","audioStartTime","Date","getTime","handleEnded","audioEndTime","waitTime","_audio","_handlePlaying","_handleEnded","_enableAudio","disconnectedCallback","unmount","el","React","CategorizeComponent","onAnswersChange","bind","pauseMathObserver","resumeMathObserver","createRoot","exports"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { EnableAudioAutoplayImage } from '@pie-lib/render-ui';\nimport { SessionChangedEvent, ModelSetEvent } from '@pie-framework/pie-player-events';\nimport CategorizeComponent from './categorize';\n\nexport default class Categorize extends HTMLElement {\n constructor() {\n super();\n this._root = null;\n this._mathObserver = null;\n this._mathRenderPending = false;\n }\n\n _scheduleMathRender = () => {\n if (this._mathRenderPending) return;\n\n this._mathRenderPending = true;\n\n requestAnimationFrame(() => {\n if (this._mathObserver && !this._mathObserverPaused) {\n this._mathObserver.disconnect();\n }\n\n renderMath(this);\n\n this._mathRenderPending = false;\n\n setTimeout(() => {\n if (this._mathObserver && !this._mathObserverPaused) {\n this._mathObserver.observe(this, {\n childList: true,\n subtree: true,\n characterData: false,\n });\n }\n }, 50);\n });\n };\n\n _initMathObserver() {\n if (this._mathObserver) return;\n\n this._mathObserver = new MutationObserver(() => {\n this._scheduleMathRender();\n });\n\n this._mathObserver.observe(this, {\n childList: true,\n subtree: true,\n characterData: false,\n });\n }\n\n _disconnectMathObserver() {\n if (this._mathObserver) {\n this._mathObserver.disconnect();\n this._mathObserver = null;\n }\n }\n\n pauseMathObserver = () => {\n if (this._mathObserver) {\n this._mathObserver.disconnect();\n this._mathObserverPaused = true;\n }\n };\n\n resumeMathObserver = () => {\n if (this._mathObserverPaused) {\n this._mathObserverPaused = false;\n\n if (this._mathObserver) {\n this._mathObserver.observe(this, {\n childList: true,\n subtree: true,\n characterData: false,\n });\n }\n }\n };\n\n set model(m) {\n this._model = m;\n\n this.eliminateBlindAnswersFromSession();\n this.dispatchEvent(new ModelSetEvent(this.tagName.toLowerCase(), this.isComplete(), !!this._model));\n // reset the audioInitialized to false since the model changed, and we might need to reinitialize the audio\n this._audioInitialized = false;\n\n this.render();\n }\n\n isComplete() {\n const {\n autoplayAudioEnabled,\n choices,\n completeAudioEnabled,\n hasUnplacedChoices,\n possibleResponses,\n responseAreasToBeFilled,\n } = this._model || {};\n const elementContext = this;\n\n // check audio completion if audio settings are enabled and audio actually exists\n if (autoplayAudioEnabled && completeAudioEnabled && !this.audioComplete) {\n if (elementContext) {\n const audio = elementContext.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('.preview-prompt');\n\n // only require audio completion if audio exists and is inside the prompt\n if (audio && isInsidePrompt) {\n return false;\n }\n }\n }\n\n if (!this._session || !this._session.answers) {\n return false;\n }\n\n const { answers } = this._session;\n\n if (!Array.isArray(answers)) {\n return false;\n }\n\n // filter answers by category and count the ones with content\n const filledResponseAreas = answers.filter((answer) => answer.choices.length).length;\n // check if an answer choice was added to at least as many response areas\n // as the number of populated response areas in the correct answer\n const areResponseAreasFilled = filledResponseAreas >= responseAreasToBeFilled;\n // check if multiple placements are allowed\n const duplicatesAllowed = (choices || []).some((choice) => choice.categoryCount === 0);\n\n if (duplicatesAllowed) {\n // an answer choice can be used multiple times\n return areResponseAreasFilled;\n }\n\n // any correct answer have any unplaced answer choices (by the author)\n if (hasUnplacedChoices) {\n return areResponseAreasFilled;\n }\n\n const allAnswersIds = answers.map((answer) => answer.choices).flat();\n\n // check if any correct answer have any unplaced answer choices (by the student)\n const requiredAnswersPlaced = (possibleResponses || []).some((response) =>\n response.every((val) => allAnswersIds.includes(val)),\n );\n\n // true - all choices (required for a correct response) were placed into a response area\n return requiredAnswersPlaced;\n }\n\n set session(s) {\n if (s && !s.answers) {\n s.answers = [];\n }\n\n this._session = s;\n this.render();\n }\n\n get session() {\n return this._session;\n }\n\n eliminateBlindAnswersFromSession() {\n const { answers = [] } = this._session || {};\n const { choices = [] } = this._model || {};\n\n const mappedChoices = choices.map((c) => c.id) || [];\n const filteredAnswers = answers.map((answer) => {\n const answerChoices = answer?.choices || [];\n answer.choices = answerChoices.filter((c) => mappedChoices.includes(c));\n\n return answer;\n });\n\n if (filteredAnswers.length > 0) {\n this.changeAnswers(filteredAnswers);\n }\n }\n\n changeAnswers(answers) {\n this._session.answers = answers;\n this._session.selector = 'Mouse';\n\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete()));\n\n this.render();\n }\n\n onShowCorrectToggle() {\n renderMath(this);\n }\n\n _createAudioInfoToast() {\n const info = document.createElement('div');\n info.id = 'play-audio-info';\n\n Object.assign(info.style, {\n position: 'absolute',\n top: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n zIndex: '1000',\n cursor: 'pointer',\n });\n\n const img = document.createElement('img');\n img.src = EnableAudioAutoplayImage;\n img.alt = 'Click anywhere to enable audio autoplay';\n img.width = 500;\n img.height = 300;\n\n info.appendChild(img);\n return info;\n }\n\n connectedCallback() {\n this._initMathObserver();\n \n // Observation: audio in Chrome will have the autoplay attribute,\n // while other browsers will not have the autoplay attribute and will need a user interaction to play the audio\n // This workaround fixes the issue of audio being cached and played on any user interaction in Safari and Firefox\n const observer = new MutationObserver((mutationsList, observer) => {\n mutationsList.forEach((mutation) => {\n if (mutation.type === 'childList') {\n if (this._audioInitialized) return;\n const audio = this.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('.preview-prompt');\n\n if (!this._model) return;\n if (!this._model.autoplayAudioEnabled) return;\n if (audio && !isInsidePrompt) return;\n if (!audio) return;\n\n const info = this._createAudioInfoToast();\n const container = this.querySelector('#main-container');\n const enableAudio = () => {\n if (this.querySelector('#play-audio-info')) {\n audio.play();\n container.removeChild(info);\n }\n\n document.removeEventListener('click', enableAudio);\n };\n\n // if the audio is paused, it means the user has not interacted with the page yet and the audio will not play\n // FIX FOR SAFARI: play with a slight delay to check if autoplay was blocked\n setTimeout(() => {\n if (audio.paused && !this.querySelector('#play-audio-info')) {\n // add info message as a toast to enable audio playback\n container.appendChild(info);\n document.addEventListener('click', enableAudio);\n } else {\n document.removeEventListener('click', enableAudio);\n }\n }, 500);\n\n // we need to listen for the playing event to remove the toast in case the audio plays because of re-rendering\n const handlePlaying = () => {\n //timestamp when auto-played audio started playing\n this._session.audioStartTime = this._session.audioStartTime || new Date().getTime();\n\n const info = this.querySelector('#play-audio-info');\n if (info) {\n container.removeChild(info);\n }\n\n audio.removeEventListener('playing', handlePlaying);\n };\n\n audio.addEventListener('playing', handlePlaying);\n\n // we need to listen for the ended event to update the isComplete state\n const handleEnded = () => {\n //timestamp when auto-played audio completed playing\n this._session.audioEndTime = this._session.audioEndTime || new Date().getTime();\n\n let { audioStartTime, audioEndTime, waitTime } = this._session;\n if (!waitTime && audioStartTime && audioEndTime) {\n // waitTime is elapsed time the user waited for auto-played audio to finish\n this._session.waitTime = audioEndTime - audioStartTime;\n }\n\n this.audioComplete = true;\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete()));\n\n audio.removeEventListener('ended', handleEnded);\n };\n\n audio.addEventListener('ended', handleEnded);\n\n // store references to remove later\n this._audio = audio;\n this._handlePlaying = handlePlaying;\n this._handleEnded = handleEnded;\n this._enableAudio = enableAudio;\n // set to true to prevent multiple initializations\n this._audioInitialized = true;\n\n observer.disconnect();\n }\n });\n });\n\n observer.observe(this, { childList: true, subtree: true });\n }\n\n disconnectedCallback() {\n this._disconnectMathObserver();\n \n document.removeEventListener('click', this._enableAudio);\n\n if (this._audio) {\n this._audio.removeEventListener('playing', this._handlePlaying);\n this._audio.removeEventListener('ended', this._handleEnded);\n this._audio = null;\n }\n\n if (this._root) {\n this._root.unmount();\n }\n }\n\n render() {\n if (this._model && this._session) {\n const el = React.createElement(CategorizeComponent, {\n model: this._model,\n session: this._session,\n onAnswersChange: this.changeAnswers.bind(this),\n onShowCorrectToggle: this.onShowCorrectToggle.bind(this),\n pauseMathObserver: this.pauseMathObserver,\n resumeMathObserver: this.resumeMathObserver,\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(el);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "13.2.0
|
|
7
|
+
"version": "13.2.0",
|
|
8
8
|
"description": "",
|
|
9
9
|
"author": "pie framework developers",
|
|
10
10
|
"license": "ISC",
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
"@mui/material": "^7.3.4",
|
|
17
17
|
"@pie-framework/pie-player-events": "^0.1.0",
|
|
18
18
|
"@pie-lib/categorize": "2.0.2",
|
|
19
|
-
"@pie-lib/config-ui": "13.
|
|
20
|
-
"@pie-lib/correct-answer-toggle": "4.0.
|
|
21
|
-
"@pie-lib/drag": "4.
|
|
19
|
+
"@pie-lib/config-ui": "13.0.16",
|
|
20
|
+
"@pie-lib/correct-answer-toggle": "4.0.6",
|
|
21
|
+
"@pie-lib/drag": "4.1.1",
|
|
22
22
|
"@pie-lib/math-rendering": "5.1.0",
|
|
23
|
-
"@pie-lib/render-ui": "
|
|
23
|
+
"@pie-lib/render-ui": "7.0.0",
|
|
24
24
|
"@pie-lib/translator": "4.0.2",
|
|
25
25
|
"debug": "^4.1.1",
|
|
26
26
|
"lodash-es": "^4.17.23",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"react": "18.3.1",
|
|
29
29
|
"react-dom": "18.3.1"
|
|
30
30
|
},
|
|
31
|
-
"gitHead": "
|
|
31
|
+
"gitHead": "e299866c75466c3c3f12469e783c129c800f24fb",
|
|
32
32
|
"scripts": {
|
|
33
33
|
"postpublish": "../../scripts/postpublish"
|
|
34
34
|
},
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _react = _interopRequireDefault(require("react"));
|
|
5
|
-
var _react2 = require("@testing-library/react");
|
|
6
|
-
var _styles = require("@mui/material/styles");
|
|
7
|
-
var _main = require("../main");
|
|
8
|
-
// Mock the Design component to avoid complex dependencies
|
|
9
|
-
jest.mock('../design', () => ({
|
|
10
|
-
model,
|
|
11
|
-
configuration,
|
|
12
|
-
onChange,
|
|
13
|
-
title
|
|
14
|
-
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
15
|
-
"data-testid": "design-component"
|
|
16
|
-
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
17
|
-
"data-testid": "design-title"
|
|
18
|
-
}, title), /*#__PURE__*/_react.default.createElement("span", {
|
|
19
|
-
"data-testid": "categories-count"
|
|
20
|
-
}, model?.categories?.length || 0), /*#__PURE__*/_react.default.createElement("span", {
|
|
21
|
-
"data-testid": "choices-count"
|
|
22
|
-
}, model?.choices?.length || 0)));
|
|
23
|
-
const theme = (0, _styles.createTheme)();
|
|
24
|
-
const createModel = (overrides = {}) => ({
|
|
25
|
-
correctResponse: [],
|
|
26
|
-
choices: [],
|
|
27
|
-
categories: [],
|
|
28
|
-
...overrides
|
|
29
|
-
});
|
|
30
|
-
describe('Main', () => {
|
|
31
|
-
const onModelChanged = jest.fn();
|
|
32
|
-
beforeEach(() => {
|
|
33
|
-
jest.clearAllMocks();
|
|
34
|
-
});
|
|
35
|
-
const renderMain = (extras = {}) => {
|
|
36
|
-
const defaults = {
|
|
37
|
-
classes: {},
|
|
38
|
-
className: 'className',
|
|
39
|
-
onModelChanged,
|
|
40
|
-
model: createModel()
|
|
41
|
-
};
|
|
42
|
-
const props = {
|
|
43
|
-
...defaults,
|
|
44
|
-
...extras
|
|
45
|
-
};
|
|
46
|
-
return (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_styles.ThemeProvider, {
|
|
47
|
-
theme: theme
|
|
48
|
-
}, /*#__PURE__*/_react.default.createElement(_main.Main, props)));
|
|
49
|
-
};
|
|
50
|
-
describe('rendering', () => {
|
|
51
|
-
it('renders without crashing', () => {
|
|
52
|
-
const {
|
|
53
|
-
container
|
|
54
|
-
} = renderMain();
|
|
55
|
-
expect(container).toBeInTheDocument();
|
|
56
|
-
});
|
|
57
|
-
it('renders the Design component', () => {
|
|
58
|
-
renderMain();
|
|
59
|
-
expect(_react2.screen.getByTestId('design-component')).toBeInTheDocument();
|
|
60
|
-
});
|
|
61
|
-
it('passes "Design" as the title', () => {
|
|
62
|
-
renderMain();
|
|
63
|
-
expect(_react2.screen.getByTestId('design-title')).toHaveTextContent('Design');
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
describe('model passing', () => {
|
|
67
|
-
it('passes model with categories to Design', () => {
|
|
68
|
-
renderMain({
|
|
69
|
-
model: createModel({
|
|
70
|
-
categories: [{
|
|
71
|
-
id: '1',
|
|
72
|
-
label: 'Category 1'
|
|
73
|
-
}, {
|
|
74
|
-
id: '2',
|
|
75
|
-
label: 'Category 2'
|
|
76
|
-
}]
|
|
77
|
-
})
|
|
78
|
-
});
|
|
79
|
-
expect(_react2.screen.getByTestId('categories-count')).toHaveTextContent('2');
|
|
80
|
-
});
|
|
81
|
-
it('passes model with choices to Design', () => {
|
|
82
|
-
renderMain({
|
|
83
|
-
model: createModel({
|
|
84
|
-
choices: [{
|
|
85
|
-
id: '1',
|
|
86
|
-
content: 'Choice 1'
|
|
87
|
-
}, {
|
|
88
|
-
id: '2',
|
|
89
|
-
content: 'Choice 2'
|
|
90
|
-
}, {
|
|
91
|
-
id: '3',
|
|
92
|
-
content: 'Choice 3'
|
|
93
|
-
}]
|
|
94
|
-
})
|
|
95
|
-
});
|
|
96
|
-
expect(_react2.screen.getByTestId('choices-count')).toHaveTextContent('3');
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfc3R5bGVzIiwiX21haW4iLCJqZXN0IiwibW9jayIsIm1vZGVsIiwiY29uZmlndXJhdGlvbiIsIm9uQ2hhbmdlIiwidGl0bGUiLCJkZWZhdWx0IiwiY3JlYXRlRWxlbWVudCIsImNhdGVnb3JpZXMiLCJsZW5ndGgiLCJjaG9pY2VzIiwidGhlbWUiLCJjcmVhdGVUaGVtZSIsImNyZWF0ZU1vZGVsIiwib3ZlcnJpZGVzIiwiY29ycmVjdFJlc3BvbnNlIiwiZGVzY3JpYmUiLCJvbk1vZGVsQ2hhbmdlZCIsImZuIiwiYmVmb3JlRWFjaCIsImNsZWFyQWxsTW9ja3MiLCJyZW5kZXJNYWluIiwiZXh0cmFzIiwiZGVmYXVsdHMiLCJjbGFzc2VzIiwiY2xhc3NOYW1lIiwicHJvcHMiLCJyZW5kZXIiLCJUaGVtZVByb3ZpZGVyIiwiTWFpbiIsIml0IiwiY29udGFpbmVyIiwiZXhwZWN0IiwidG9CZUluVGhlRG9jdW1lbnQiLCJzY3JlZW4iLCJnZXRCeVRlc3RJZCIsInRvSGF2ZVRleHRDb250ZW50IiwiaWQiLCJsYWJlbCIsImNvbnRlbnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL21haW4udGVzdC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlbmRlciwgc2NyZWVuIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgeyBUaGVtZVByb3ZpZGVyLCBjcmVhdGVUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcblxuaW1wb3J0IHsgTWFpbiB9IGZyb20gJy4uL21haW4nO1xuXG4vLyBNb2NrIHRoZSBEZXNpZ24gY29tcG9uZW50IHRvIGF2b2lkIGNvbXBsZXggZGVwZW5kZW5jaWVzXG5qZXN0Lm1vY2soJy4uL2Rlc2lnbicsICgpID0+ICh7IG1vZGVsLCBjb25maWd1cmF0aW9uLCBvbkNoYW5nZSwgdGl0bGUgfSkgPT4gKFxuICA8ZGl2IGRhdGEtdGVzdGlkPVwiZGVzaWduLWNvbXBvbmVudFwiPlxuICAgIDxzcGFuIGRhdGEtdGVzdGlkPVwiZGVzaWduLXRpdGxlXCI+e3RpdGxlfTwvc3Bhbj5cbiAgICA8c3BhbiBkYXRhLXRlc3RpZD1cImNhdGVnb3JpZXMtY291bnRcIj57bW9kZWw/LmNhdGVnb3JpZXM/Lmxlbmd0aCB8fCAwfTwvc3Bhbj5cbiAgICA8c3BhbiBkYXRhLXRlc3RpZD1cImNob2ljZXMtY291bnRcIj57bW9kZWw/LmNob2ljZXM/Lmxlbmd0aCB8fCAwfTwvc3Bhbj5cbiAgPC9kaXY+XG4pKTtcblxuY29uc3QgdGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuXG5jb25zdCBjcmVhdGVNb2RlbCA9IChvdmVycmlkZXMgPSB7fSkgPT4gKHtcbiAgY29ycmVjdFJlc3BvbnNlOiBbXSxcbiAgY2hvaWNlczogW10sXG4gIGNhdGVnb3JpZXM6IFtdLFxuICAuLi5vdmVycmlkZXMsXG59KTtcblxuZGVzY3JpYmUoJ01haW4nLCAoKSA9PiB7XG4gIGNvbnN0IG9uTW9kZWxDaGFuZ2VkID0gamVzdC5mbigpO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICB9KTtcblxuICBjb25zdCByZW5kZXJNYWluID0gKGV4dHJhcyA9IHt9KSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICBjbGFzc2VzOiB7fSxcbiAgICAgIGNsYXNzTmFtZTogJ2NsYXNzTmFtZScsXG4gICAgICBvbk1vZGVsQ2hhbmdlZCxcbiAgICAgIG1vZGVsOiBjcmVhdGVNb2RlbCgpLFxuICAgIH07XG4gICAgY29uc3QgcHJvcHMgPSB7IC4uLmRlZmF1bHRzLCAuLi5leHRyYXMgfTtcblxuICAgIHJldHVybiByZW5kZXIoXG4gICAgICA8VGhlbWVQcm92aWRlciB0aGVtZT17dGhlbWV9PlxuICAgICAgICA8TWFpbiB7Li4ucHJvcHN9IC8+XG4gICAgICA8L1RoZW1lUHJvdmlkZXI+XG4gICAgKTtcbiAgfTtcblxuICBkZXNjcmliZSgncmVuZGVyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIHdpdGhvdXQgY3Jhc2hpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyTWFpbigpO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lcikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHRoZSBEZXNpZ24gY29tcG9uZW50JywgKCkgPT4ge1xuICAgICAgcmVuZGVyTWFpbigpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRlc3RJZCgnZGVzaWduLWNvbXBvbmVudCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Bhc3NlcyBcIkRlc2lnblwiIGFzIHRoZSB0aXRsZScsICgpID0+IHtcbiAgICAgIHJlbmRlck1haW4oKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXN0SWQoJ2Rlc2lnbi10aXRsZScpKS50b0hhdmVUZXh0Q29udGVudCgnRGVzaWduJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdtb2RlbCBwYXNzaW5nJywgKCkgPT4ge1xuICAgIGl0KCdwYXNzZXMgbW9kZWwgd2l0aCBjYXRlZ29yaWVzIHRvIERlc2lnbicsICgpID0+IHtcbiAgICAgIHJlbmRlck1haW4oe1xuICAgICAgICBtb2RlbDogY3JlYXRlTW9kZWwoe1xuICAgICAgICAgIGNhdGVnb3JpZXM6IFtcbiAgICAgICAgICAgIHsgaWQ6ICcxJywgbGFiZWw6ICdDYXRlZ29yeSAxJyB9LFxuICAgICAgICAgICAgeyBpZDogJzInLCBsYWJlbDogJ0NhdGVnb3J5IDInIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXN0SWQoJ2NhdGVnb3JpZXMtY291bnQnKSkudG9IYXZlVGV4dENvbnRlbnQoJzInKTtcbiAgICB9KTtcblxuICAgIGl0KCdwYXNzZXMgbW9kZWwgd2l0aCBjaG9pY2VzIHRvIERlc2lnbicsICgpID0+IHtcbiAgICAgIHJlbmRlck1haW4oe1xuICAgICAgICBtb2RlbDogY3JlYXRlTW9kZWwoe1xuICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgIHsgaWQ6ICcxJywgY29udGVudDogJ0Nob2ljZSAxJyB9LFxuICAgICAgICAgICAgeyBpZDogJzInLCBjb250ZW50OiAnQ2hvaWNlIDInIH0sXG4gICAgICAgICAgICB7IGlkOiAnMycsIGNvbnRlbnQ6ICdDaG9pY2UgMycgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRlc3RJZCgnY2hvaWNlcy1jb3VudCcpKS50b0hhdmVUZXh0Q29udGVudCgnMycpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFFQSxJQUFBRyxLQUFBLEdBQUFILE9BQUE7QUFFQTtBQUNBSSxJQUFJLENBQUNDLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO0VBQUVDLEtBQUs7RUFBRUMsYUFBYTtFQUFFQyxRQUFRO0VBQUVDO0FBQU0sQ0FBQyxrQkFDckVYLE1BQUEsQ0FBQVksT0FBQSxDQUFBQyxhQUFBO0VBQUssZUFBWTtBQUFrQixnQkFDakNiLE1BQUEsQ0FBQVksT0FBQSxDQUFBQyxhQUFBO0VBQU0sZUFBWTtBQUFjLEdBQUVGLEtBQVksQ0FBQyxlQUMvQ1gsTUFBQSxDQUFBWSxPQUFBLENBQUFDLGFBQUE7RUFBTSxlQUFZO0FBQWtCLEdBQUVMLEtBQUssRUFBRU0sVUFBVSxFQUFFQyxNQUFNLElBQUksQ0FBUSxDQUFDLGVB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
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.extractArgs = exports.callsOnChange = void 0;
|
|
8
|
-
var _util = _interopRequireDefault(require("util"));
|
|
9
|
-
const extractArgs = argObject => {
|
|
10
|
-
let args = Array.prototype.slice.call(arguments);
|
|
11
|
-
const method = args[0];
|
|
12
|
-
const last = args[args.length - 1];
|
|
13
|
-
const fnArgs = args.splice(1, args.length - 2);
|
|
14
|
-
return {
|
|
15
|
-
method,
|
|
16
|
-
last,
|
|
17
|
-
fnArgs
|
|
18
|
-
};
|
|
19
|
-
};
|
|
20
|
-
exports.extractArgs = extractArgs;
|
|
21
|
-
const callsOnChange = function () {
|
|
22
|
-
let args = Array.prototype.slice.call(arguments);
|
|
23
|
-
const wrapper = args[0];
|
|
24
|
-
const method = args[1];
|
|
25
|
-
const expected = args[args.length - 1];
|
|
26
|
-
const fnArgs = args.splice(2, args.length - 3);
|
|
27
|
-
const argString = fnArgs.map(o => _util.default.inspect(o, {
|
|
28
|
-
colors: true
|
|
29
|
-
})).join(', ');
|
|
30
|
-
it(`${method}(${argString}) calls onChange with ${_util.default.inspect(expected, {
|
|
31
|
-
colors: true
|
|
32
|
-
})}`, () => {
|
|
33
|
-
const instance = wrapper.instance();
|
|
34
|
-
instance[method].apply(instance, fnArgs);
|
|
35
|
-
expected();
|
|
36
|
-
});
|
|
37
|
-
};
|
|
38
|
-
exports.callsOnChange = callsOnChange;
|
|
39
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZXh0cmFjdEFyZ3MiLCJhcmdPYmplY3QiLCJhcmdzIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJzbGljZSIsImNhbGwiLCJhcmd1bWVudHMiLCJtZXRob2QiLCJsYXN0IiwibGVuZ3RoIiwiZm5BcmdzIiwic3BsaWNlIiwiZXhwb3J0cyIsImNhbGxzT25DaGFuZ2UiLCJ3cmFwcGVyIiwiZXhwZWN0ZWQiLCJhcmdTdHJpbmciLCJtYXAiLCJvIiwidXRpbCIsImluc3BlY3QiLCJjb2xvcnMiLCJqb2luIiwiaXQiLCJpbnN0YW5jZSIsImFwcGx5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdXRpbCBmcm9tICd1dGlsJztcblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RBcmdzID0gKGFyZ09iamVjdCkgPT4ge1xuICBsZXQgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gIGNvbnN0IG1ldGhvZCA9IGFyZ3NbMF07XG4gIGNvbnN0IGxhc3QgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gIGNvbnN0IGZuQXJncyA9IGFyZ3Muc3BsaWNlKDEsIGFyZ3MubGVuZ3RoIC0gMik7XG4gIHJldHVybiB7IG1ldGhvZCwgbGFzdCwgZm5BcmdzIH07XG59O1xuXG5leHBvcnQgY29uc3QgY2FsbHNPbkNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgbGV0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICBjb25zdCB3cmFwcGVyID0gYXJnc1swXTtcbiAgY29uc3QgbWV0aG9kID0gYXJnc1sxXTtcbiAgY29uc3QgZXhwZWN0ZWQgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gIGNvbnN0IGZuQXJncyA9IGFyZ3Muc3BsaWNlKDIsIGFyZ3MubGVuZ3RoIC0gMyk7XG4gIGNvbnN0IGFyZ1N0cmluZyA9IGZuQXJncy5tYXAoKG8pID0+IHV0aWwuaW5zcGVjdChvLCB7IGNvbG9yczogdHJ1ZSB9KSkuam9pbignLCAnKTtcbiAgaXQoYCR7bWV0aG9kfSgke2FyZ1N0cmluZ30pIGNhbGxzIG9uQ2hhbmdlIHdpdGggJHt1dGlsLmluc3BlY3QoZXhwZWN0ZWQsIHtcbiAgICBjb2xvcnM6IHRydWUsXG4gIH0pfWAsICgpID0+IHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHdyYXBwZXIuaW5zdGFuY2UoKTtcbiAgICBpbnN0YW5jZVttZXRob2RdLmFwcGx5KGluc3RhbmNlLCBmbkFyZ3MpO1xuICAgIGV4cGVjdGVkKCk7XG4gIH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVPLE1BQU1DLFdBQVcsR0FBSUMsU0FBUyxJQUFLO0VBQ3hDLElBQUlDLElBQUksR0FBR0MsS0FBSyxDQUFDQyxTQUFTLENBQUNDLEtBQUssQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUM7RUFDaEQsTUFBTUMsTUFBTSxHQUFHTixJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3RCLE1BQU1PLElBQUksR0FBR1AsSUFBSSxDQUFDQSxJQUFJLENBQUNRLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDbEMsTUFBTUMsTUFBTSxHQUFHVCxJQUFJLENBQUNVLE1BQU0sQ0FBQyxDQUFDLEVBQUVWLElBQUksQ0FBQ1EsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUM5QyxPQUFPO0lBQUVGLE1BQU07SUFBRUMsSUFBSTtJQUFFRTtFQUFPLENBQUM7QUFDakMsQ0FBQztBQUFDRSxPQUFBLENBQUFiLFdBQUEsR0FBQUEsV0FBQTtBQUVLLE1BQU1jLGFBQWEsR0FBRyxTQUFBQSxDQUFBLEVBQVk7RUFDdkMsSUFBSVosSUFBSSxHQUFHQyxLQUFLLENBQUNDLFNBQVMsQ0FBQ0MsS0FBSyxDQUFDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQztFQUNoRCxNQUFNUSxPQUFPLEdBQUdiLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdkIsTUFBTU0sTUFBTSxHQUFHTixJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3RCLE1BQU1jLFFBQVEsR0FBR2QsSUFBSSxDQUFDQSxJQUFJLENBQUNRLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDdEMsTUFBTUMsTUFBTSxHQUFHVCxJQUFJLENBQUNVLE1BQU0sQ0FBQyxDQUFDLEVBQUVWLElBQUksQ0FBQ1EsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUM5QyxNQUFNTyxTQUFTLEdBQUdOLE1BQU0sQ0FBQ08sR0FBRyxDQUFFQyxDQUFDLElBQUtDLGFBQUksQ0FBQ0MsT0FBTyxDQUFDRixDQUFDLEVBQUU7SUFBRUcsTUFBTSxFQUFFO0VBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQztFQUNqRkMsRUFBRSxDQUFDLEdBQUdoQixNQUFNLElBQUlTLFNBQVMseUJBQXlCRyxhQUFJLENBQUNDLE9BQU8sQ0FBQ0wsUUFBUSxFQUFFO0lBQ3ZFTSxNQUFNLEVBQUU7RUFDVixDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU07SUFDVixNQUFNRyxRQUFRLEdBQUdWLE9BQU8sQ0FBQ1UsUUFBUSxDQUFDLENBQUM7SUFDbkNBLFFBQVEsQ0FBQ2pCLE1BQU0sQ0FBQyxDQUFDa0IsS0FBSyxDQUFDRCxRQUFRLEVBQUVkLE1BQU0sQ0FBQztJQUN4Q0ssUUFBUSxDQUFDLENBQUM7RUFDWixDQUFDLENBQUM7QUFDSixDQUFDO0FBQUNILE9BQUEsQ0FBQUMsYUFBQSxHQUFBQSxhQUFBIiwiaWdub3JlTGlzdCI6W119
|