@decidables/detectable-elements 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/LICENSE.md +1112 -0
  3. package/README.md +1218 -0
  4. package/lib/detectableElements.esm.js +18385 -0
  5. package/lib/detectableElements.esm.js.map +1 -0
  6. package/lib/detectableElements.esm.min.js +13 -0
  7. package/lib/detectableElements.esm.min.js.map +1 -0
  8. package/lib/detectableElements.umd.js +18413 -0
  9. package/lib/detectableElements.umd.js.map +1 -0
  10. package/lib/detectableElements.umd.min.js +13 -0
  11. package/lib/detectableElements.umd.min.js.map +1 -0
  12. package/package.json +58 -0
  13. package/src/components/detectable-control.js +272 -0
  14. package/src/components/detectable-response.js +414 -0
  15. package/src/components/detectable-table.js +602 -0
  16. package/src/components/index.js +7 -0
  17. package/src/components/rdk-task.js +586 -0
  18. package/src/components/roc-space.js +1220 -0
  19. package/src/components/sdt-model.js +1835 -0
  20. package/src/detectable-element.js +121 -0
  21. package/src/equations/dc2far.js +182 -0
  22. package/src/equations/dc2hr.js +191 -0
  23. package/src/equations/facr2far.js +120 -0
  24. package/src/equations/hm2hr.js +121 -0
  25. package/src/equations/hmfacr2acc.js +161 -0
  26. package/src/equations/hrfar2c.js +179 -0
  27. package/src/equations/hrfar2d.js +162 -0
  28. package/src/equations/index.js +8 -0
  29. package/src/equations/sdt-equation.js +141 -0
  30. package/src/examples/double-interactive.js +171 -0
  31. package/src/examples/human.js +184 -0
  32. package/src/examples/index.js +6 -0
  33. package/src/examples/interactive.js +131 -0
  34. package/src/examples/model.js +203 -0
  35. package/src/examples/sdt-example.js +76 -0
  36. package/src/examples/unequal.js +43 -0
  37. package/src/index.js +6 -0
@@ -0,0 +1,203 @@
1
+
2
+ import SDTMath from '@decidables/detectable-math';
3
+
4
+ import SDTExample from './sdt-example';
5
+
6
+ /*
7
+ SDTExample_Model element
8
+ <sdt-example-model>
9
+ */
10
+ export default class SDTExampleModel extends SDTExample {
11
+ firstUpdated(/* changedProperties */) {
12
+ this.count = 1;
13
+
14
+ this.detectableControl = this.querySelector('detectable-control');
15
+ this.rdkTask = this.querySelector('rdk-task');
16
+ this.sdtModel = this.querySelector('sdt-model');
17
+ this.detectableResponse = this.querySelector('detectable-response');
18
+ this.detectableTable = this.querySelector('detectable-table');
19
+ this.rocSpace = this.querySelector('roc-space');
20
+
21
+ if (this.detectableControl && this.detectableControl.hasAttribute('color')) {
22
+ this.detectableControl.addEventListener('detectable-control-color', (event) => {
23
+ if (this.sdtModel) {
24
+ this.sdtModel.color = event.detail.color;
25
+ }
26
+
27
+ if (this.detectableTable) {
28
+ this.detectableTable.color = event.detail.color;
29
+ }
30
+ });
31
+ }
32
+
33
+ if (this.detectableControl && this.detectableControl.hasAttribute('duration')) {
34
+ this.detectableControl.addEventListener('detectable-control-duration', (event) => {
35
+ if (this.rdkTask) {
36
+ this.rdkTask.duration = event.detail.duration;
37
+ this.rdkTask.wait = event.detail.duration;
38
+ this.rdkTask.iti = event.detail.duration;
39
+ }
40
+ });
41
+ }
42
+
43
+ if (this.detectableControl && this.detectableControl.hasAttribute('trials')) {
44
+ this.detectableControl.addEventListener('detectable-control-trials', (event) => {
45
+ if (this.rdkTask) {
46
+ this.rdkTask.trials = event.detail.trials;
47
+ }
48
+
49
+ if (this.detectableResponse) {
50
+ this.detectableResponse.trialTotal = event.detail.trials;
51
+ }
52
+ });
53
+ }
54
+
55
+ if (this.detectableControl && this.detectableControl.hasAttribute('coherence')) {
56
+ this.detectableControl.addEventListener('detectable-control-coherence', (event) => {
57
+ if (this.rdkTask) {
58
+ this.rdkTask.coherence = event.detail.coherence;
59
+ }
60
+ });
61
+ }
62
+
63
+ if (this.detectableControl && this.detectableControl.hasAttribute('run')) {
64
+ this.detectableControl.addEventListener('detectable-control-run', (/* event */) => {
65
+ if (this.rdkTask) {
66
+ this.rdkTask.running = true;
67
+ }
68
+ if (this.sdtModel) {
69
+ this.sdtModel.resumeTrial();
70
+ }
71
+ });
72
+ }
73
+
74
+ if (this.detectableControl && this.detectableControl.hasAttribute('pause')) {
75
+ this.detectableControl.addEventListener('detectable-control-pause', (/* event */) => {
76
+ if (this.rdkTask) {
77
+ this.rdkTask.running = false;
78
+ }
79
+ if (this.sdtModel) {
80
+ this.sdtModel.pauseTrial();
81
+ }
82
+ });
83
+ }
84
+
85
+ if (this.detectableControl && this.detectableControl.hasAttribute('reset')) {
86
+ this.detectableControl.addEventListener('detectable-control-reset', (/* event */) => {
87
+ if (this.rdkTask) {
88
+ this.rdkTask.reset();
89
+ }
90
+
91
+ if (this.detectableResponse) {
92
+ this.detectableResponse.reset();
93
+ }
94
+
95
+ if (this.sdtModel) {
96
+ this.sdtModel.reset();
97
+ }
98
+
99
+ if (this.detectableTable) {
100
+ this.detectableTable.h = 0;
101
+ this.detectableTable.m = 0;
102
+ this.detectableTable.fa = 0;
103
+ this.detectableTable.cr = 0;
104
+ }
105
+
106
+ if (this.rocSpace) {
107
+ if (this.rocSpace.hasAttribute('history')) {
108
+ this.count += 1;
109
+ this.rocSpace.set(0.5, 0.5, `point${this.count}`, '', 1);
110
+ } else {
111
+ this.rocSpace.hr = 0.5;
112
+ this.rocSpace.far = 0.5;
113
+ }
114
+ }
115
+ });
116
+ }
117
+
118
+ if (this.rdkTask) {
119
+ if (this.detectableResponse) {
120
+ this.detectableResponse.trialTotal = this.rdkTask.trials;
121
+ }
122
+ }
123
+
124
+ if (this.rdkTask) {
125
+ this.rdkTask.addEventListener('rdk-trial-start', (event) => {
126
+ if (this.detectableResponse) {
127
+ this.detectableResponse.start(event.detail.signal, event.detail.trial);
128
+ }
129
+ if (this.sdtModel) {
130
+ this.sdtModel.trial(
131
+ event.detail.trial,
132
+ event.detail.signal,
133
+ event.detail.duration,
134
+ event.detail.wait,
135
+ event.detail.iti,
136
+ );
137
+ }
138
+ });
139
+ }
140
+
141
+ if (this.rdkTask) {
142
+ this.rdkTask.addEventListener('rdk-trial-middle', (/* event */) => {
143
+ // if (this.sdtModel) {
144
+ // this.sdtModel.trial(event.detail.trial, event.detail.signal);
145
+ // }
146
+ });
147
+ }
148
+
149
+ if (this.rdkTask) {
150
+ this.rdkTask.addEventListener('rdk-trial-end', (/* event */) => {
151
+ if (this.detectableResponse) {
152
+ this.detectableResponse.stop();
153
+ }
154
+ });
155
+ }
156
+
157
+ if (this.rdkTask) {
158
+ this.rdkTask.addEventListener('rdk-block-end', (/* event */) => {
159
+ if (this.detectableControl) {
160
+ this.detectableControl.complete();
161
+ }
162
+ });
163
+ }
164
+
165
+ if (this.sdtModel) {
166
+ this.sdtModel.addEventListener('detectable-response', (event) => {
167
+ if (this.detectableResponse) {
168
+ this.detectableResponse.responded(event.detail.response);
169
+ }
170
+
171
+ if (this.detectableTable) {
172
+ this.detectableTable.h = event.detail.h;
173
+ this.detectableTable.m = event.detail.m;
174
+ this.detectableTable.fa = event.detail.fa;
175
+ this.detectableTable.cr = event.detail.cr;
176
+ }
177
+
178
+ if (this.rocSpace) {
179
+ this.rocSpace.hr = SDTMath.hM2Hr((event.detail.h), (event.detail.m));
180
+ this.rocSpace.far = SDTMath.faCr2Far((event.detail.fa), (event.detail.cr));
181
+ }
182
+ });
183
+ }
184
+
185
+ if (this.sdtModel) {
186
+ this.sdtModel.addEventListener('sdt-model-change', (event) => {
187
+ if (this.detectableTable) {
188
+ this.detectableTable.h = event.detail.h;
189
+ this.detectableTable.m = event.detail.m;
190
+ this.detectableTable.fa = event.detail.fa;
191
+ this.detectableTable.cr = event.detail.cr;
192
+ }
193
+
194
+ if (this.rocSpace) {
195
+ this.rocSpace.hr = SDTMath.hM2Hr((event.detail.h), (event.detail.m));
196
+ this.rocSpace.far = SDTMath.faCr2Far((event.detail.fa), (event.detail.cr));
197
+ }
198
+ });
199
+ }
200
+ }
201
+ }
202
+
203
+ customElements.define('sdt-example-model', SDTExampleModel);
@@ -0,0 +1,76 @@
1
+
2
+ import {html, css} from 'lit';
3
+
4
+ import DetectableElement from '../detectable-element';
5
+
6
+ /*
7
+ SDTExample Base Class - Not intended for instantiation!
8
+ <sdt-example>
9
+ */
10
+ export default class SDTExample extends DetectableElement {
11
+ static get styles() {
12
+ return [
13
+ super.styles,
14
+ css`
15
+ :host {
16
+ ---border: var(--border, 1px solid var(---color-border));
17
+ display: inline-block;
18
+
19
+ /* This makes IE11 happy */
20
+ width: 100%;
21
+
22
+ margin-bottom: 1rem;
23
+ }
24
+
25
+ .holder {
26
+ display: flex;
27
+ }
28
+
29
+ .body {
30
+ display: flex;
31
+
32
+ flex-wrap: wrap;
33
+
34
+ align-items: center;
35
+ justify-content: left;
36
+
37
+ padding: 0.625rem;
38
+
39
+ border: var(---border);
40
+ border-radius: 0.25rem;
41
+ }
42
+
43
+ .body ::slotted(*) {
44
+ margin: 0.625rem;
45
+ }
46
+
47
+ /* HACK: Sibling selectors not working with ::slotted */
48
+ /* .body > rdk-task + detectable-response,
49
+ ::slotted(rdk-task) + ::slotted(detectable-response) { */
50
+ .body ::slotted(detectable-response) {
51
+ margin-left: 0;
52
+ }
53
+
54
+ /* HACK: Sibling selectors not working with ::slotted */
55
+ /* .body > detectable-control + rdk-task,
56
+ ::slotted(detectable-control) + ::slotted(rdk-task) {
57
+ margin-left: 0;
58
+ } */
59
+ .body ::slotted(rdk-task) {
60
+ margin-left: 0;
61
+ }
62
+ `,
63
+ ];
64
+ }
65
+
66
+ render() { // eslint-disable-line class-methods-use-this
67
+ return html`
68
+ <div class="holder">
69
+ <div class="body">
70
+ <slot>Empty!</slot>
71
+ </div>
72
+ </div>`;
73
+ }
74
+ }
75
+
76
+ customElements.define('sdt-example', SDTExample);
@@ -0,0 +1,43 @@
1
+ import * as d3 from 'd3';
2
+
3
+ import SDTExample from './sdt-example';
4
+
5
+ /*
6
+ SDTExampleUnequal element
7
+ <sdt-example-unequal>
8
+ */
9
+ export default class SDTExampleUnequal extends SDTExample {
10
+ firstUpdated(/* changedProperties */) {
11
+ this.detectableControl = this.querySelector('detectable-control');
12
+ this.rocSpace = this.querySelector('roc-space');
13
+ this.sdtModel = this.querySelector('sdt-model');
14
+
15
+ if (this.detectableControl) {
16
+ this.detectableControl.addEventListener('detectable-control-z-roc', (event) => {
17
+ this.rocSpace.zRoc = event.detail.zRoc;
18
+ });
19
+ }
20
+
21
+ if (this.rocSpace) {
22
+ this.rocSpace.setWithSDT(1, 0, 'default', '', 1); // Set 'default' to equal variance for contours
23
+ }
24
+
25
+ if (this.sdtModel) {
26
+ if (this.rocSpace) {
27
+ d3.range(-1.5, 1.6, 0.5).forEach((c, index) => {
28
+ this.rocSpace.setWithSDT(this.sdtModel.d, c, `point${index}`, '', this.sdtModel.s);
29
+ });
30
+ }
31
+
32
+ this.sdtModel.addEventListener('sdt-model-change', (event) => {
33
+ if (this.rocSpace) {
34
+ d3.range(-1.5, 1.6, 0.5).forEach((c, index) => {
35
+ this.rocSpace.setWithSDT(event.detail.d, c, `point${index}`, '', event.detail.s);
36
+ });
37
+ }
38
+ });
39
+ }
40
+ }
41
+ }
42
+
43
+ customElements.define('sdt-example-unequal', SDTExampleUnequal);
package/src/index.js ADDED
@@ -0,0 +1,6 @@
1
+
2
+ // Internal dependencies
3
+ export {default as DetectableElement} from './detectable-element';
4
+ export * from './components';
5
+ export * from './equations';
6
+ export * from './examples';