@decidables/discountable-elements 0.1.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 +39 -0
- package/LICENSE.md +1003 -0
- package/README.md +1405 -0
- package/lib/discountableElements.esm.js +23333 -0
- package/lib/discountableElements.esm.js.map +1 -0
- package/lib/discountableElements.esm.min.js +1625 -0
- package/lib/discountableElements.esm.min.js.map +1 -0
- package/lib/discountableElements.umd.js +23353 -0
- package/lib/discountableElements.umd.js.map +1 -0
- package/lib/discountableElements.umd.min.js +1625 -0
- package/lib/discountableElements.umd.min.js.map +1 -0
- package/package.json +69 -0
- package/src/components/discountable-control.js +173 -0
- package/src/components/discountable-response.js +283 -0
- package/src/components/htd-calculation.js +230 -0
- package/src/components/htd-curves.js +1073 -0
- package/src/components/htd-fit-worker.js +71 -0
- package/src/components/htd-fit.js +197 -0
- package/src/components/index.js +9 -0
- package/src/components/itc-choice.js +134 -0
- package/src/components/itc-option.js +173 -0
- package/src/components/itc-task.js +253 -0
- package/src/discountable-element.js +105 -0
- package/src/equations/adk2v.js +135 -0
- package/src/equations/htd-equation.js +202 -0
- package/src/equations/index.js +3 -0
- package/src/examples/htd-example.js +73 -0
- package/src/examples/human.js +154 -0
- package/src/examples/index.js +4 -0
- package/src/examples/interactive.js +123 -0
- package/src/examples/model.js +179 -0
- package/src/index.js +6 -0
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
|
|
2
|
+
import {html, css} from 'lit';
|
|
3
|
+
import {animate, fadeIn} from '@lit-labs/motion';
|
|
4
|
+
|
|
5
|
+
import '@decidables/decidables-elements/spinner';
|
|
6
|
+
import HTDMath from '@decidables/discountable-math';
|
|
7
|
+
|
|
8
|
+
import HTDEquation from '../equations/htd-equation';
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
HTDCalculation element
|
|
12
|
+
<htd-calculation>
|
|
13
|
+
*/
|
|
14
|
+
export default class HTDCalculation extends HTDEquation {
|
|
15
|
+
static get properties() {
|
|
16
|
+
return {
|
|
17
|
+
numeric: {
|
|
18
|
+
attribute: 'numeric',
|
|
19
|
+
type: Boolean,
|
|
20
|
+
reflect: true,
|
|
21
|
+
},
|
|
22
|
+
|
|
23
|
+
as: {
|
|
24
|
+
attribute: 'amount-ss',
|
|
25
|
+
type: Number,
|
|
26
|
+
reflect: true,
|
|
27
|
+
},
|
|
28
|
+
ds: {
|
|
29
|
+
attribute: 'delay-ss',
|
|
30
|
+
type: Number,
|
|
31
|
+
reflect: true,
|
|
32
|
+
},
|
|
33
|
+
al: {
|
|
34
|
+
attribute: 'amount-ll',
|
|
35
|
+
type: Number,
|
|
36
|
+
reflect: true,
|
|
37
|
+
},
|
|
38
|
+
dl: {
|
|
39
|
+
attribute: 'delay-ll',
|
|
40
|
+
type: Number,
|
|
41
|
+
reflect: true,
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
k: {
|
|
45
|
+
attribute: 'k',
|
|
46
|
+
type: Number,
|
|
47
|
+
reflect: true,
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
constructor() {
|
|
53
|
+
super();
|
|
54
|
+
|
|
55
|
+
this.numeric = false;
|
|
56
|
+
|
|
57
|
+
this.as = 20;
|
|
58
|
+
this.ds = 5;
|
|
59
|
+
this.al = 50;
|
|
60
|
+
this.dl = 40;
|
|
61
|
+
|
|
62
|
+
this.k = 0.1;
|
|
63
|
+
|
|
64
|
+
this.alignState();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
alignState() {
|
|
68
|
+
// Calculate value
|
|
69
|
+
this.vs = HTDMath.adk2v(this.as, this.ds, this.k);
|
|
70
|
+
this.vl = HTDMath.adk2v(this.al, this.dl, this.k);
|
|
71
|
+
// Calculate difference
|
|
72
|
+
this.vDiff = this.vs - this.vl;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
sendEvent() {
|
|
76
|
+
this.dispatchEvent(new CustomEvent('htd-calculation-change', {
|
|
77
|
+
detail: {
|
|
78
|
+
as: this.as,
|
|
79
|
+
ds: this.ds,
|
|
80
|
+
al: this.al,
|
|
81
|
+
dl: this.dl,
|
|
82
|
+
|
|
83
|
+
k: this.k,
|
|
84
|
+
},
|
|
85
|
+
bubbles: true,
|
|
86
|
+
}));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
asInput(e) {
|
|
90
|
+
this.as = parseFloat(e.target.value);
|
|
91
|
+
this.alignState();
|
|
92
|
+
this.sendEvent();
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
dsInput(e) {
|
|
96
|
+
this.ds = parseFloat(e.target.value);
|
|
97
|
+
this.alignState();
|
|
98
|
+
this.sendEvent();
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
alInput(e) {
|
|
102
|
+
this.al = parseFloat(e.target.value);
|
|
103
|
+
this.alignState();
|
|
104
|
+
this.sendEvent();
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
dlInput(e) {
|
|
108
|
+
this.dl = parseFloat(e.target.value);
|
|
109
|
+
this.alignState();
|
|
110
|
+
this.sendEvent();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
kInput(e) {
|
|
114
|
+
this.k = parseFloat(e.target.value);
|
|
115
|
+
this.alignState();
|
|
116
|
+
this.sendEvent();
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
static get styles() {
|
|
120
|
+
return [
|
|
121
|
+
super.styles,
|
|
122
|
+
css`
|
|
123
|
+
/* :host {
|
|
124
|
+
display: inline-block;
|
|
125
|
+
} */
|
|
126
|
+
|
|
127
|
+
var {
|
|
128
|
+
border-radius: var(---border-radius);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
decidables-spinner {
|
|
132
|
+
border-radius: var(---border-radius);
|
|
133
|
+
}
|
|
134
|
+
`,
|
|
135
|
+
];
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
render() {
|
|
139
|
+
this.alignState();
|
|
140
|
+
let as;
|
|
141
|
+
let ds;
|
|
142
|
+
let al;
|
|
143
|
+
let dl;
|
|
144
|
+
let k;
|
|
145
|
+
let vs;
|
|
146
|
+
let vl;
|
|
147
|
+
let vDiff;
|
|
148
|
+
if (this.numeric) {
|
|
149
|
+
as = html`<decidables-spinner class="a as" ?disabled=${!this.interactive} step="1" .value="${this.as}" @input=${this.asInput.bind(this)}>
|
|
150
|
+
<var class="math-var">A<sub class="subscript">ss</sub></var>
|
|
151
|
+
</decidables-spinner>`;
|
|
152
|
+
ds = html`<decidables-spinner class="d ds" ?disabled=${!this.interactive} min="0" step="1" .value="${this.ds}" @input=${this.dsInput.bind(this)}>
|
|
153
|
+
<var class="math-var">D<sub class="subscript">ss</sub></var>
|
|
154
|
+
</decidables-spinner>`;
|
|
155
|
+
al = html`<decidables-spinner class="a al" ?disabled=${!this.interactive} step="1" .value="${this.al}" @input=${this.alInput.bind(this)}>
|
|
156
|
+
<var class="math-var">A<sub class="subscript">ll</sub></var>
|
|
157
|
+
</decidables-spinner>`;
|
|
158
|
+
dl = html`<decidables-spinner class="d dl" ?disabled=${!this.interactive} min="0" step="1" .value="${this.dl}" @input=${this.dlInput.bind(this)}>
|
|
159
|
+
<var class="math-var">D<sub class="subscript">ll</sub></var>
|
|
160
|
+
</decidables-spinner>`;
|
|
161
|
+
k = html`<decidables-spinner class="k" ?disabled=${!this.interactive} min="0" max="100" step=".001" .value="${this.k}" @input=${this.kInput.bind(this)}>
|
|
162
|
+
<var class="math-var">k</var>
|
|
163
|
+
</decidables-spinner>`;
|
|
164
|
+
|
|
165
|
+
vs = html`<decidables-spinner class="v vs" disabled .value="${+this.vs.toFixed(2)}">
|
|
166
|
+
<var class="math-var">V<sub class="subscript">ss</sub></var>
|
|
167
|
+
</decidables-spinner>`;
|
|
168
|
+
vl = html`<decidables-spinner class="v vl" disabled .value="${+this.vl.toFixed(2)}">
|
|
169
|
+
<var class="math-var">V<sub class="subscript">ll</sub></var>
|
|
170
|
+
</decidables-spinner>`;
|
|
171
|
+
vDiff = html`${(this.vDiff > 0)
|
|
172
|
+
? html`<span class="comparison" ${animate({in: fadeIn})}>></span>`
|
|
173
|
+
: (this.vDiff < 0)
|
|
174
|
+
? html`<span class="comparison" ${animate({in: fadeIn})}><</span>`
|
|
175
|
+
: html`<span class="comparison" ${animate({in: fadeIn})}>=</span>`}`;
|
|
176
|
+
} else {
|
|
177
|
+
as = html`<var class="math-var a as">A<sub class="subscript">ss</sub></var>`;
|
|
178
|
+
ds = html`<var class="math-var d ds">D<sub class="subscript">ss</sub></var>`;
|
|
179
|
+
al = html`<var class="math-var a al">A<sub class="subscript">ll</sub></var>`;
|
|
180
|
+
dl = html`<var class="math-var d dl">D<sub class="subscript">ll</sub></var>`;
|
|
181
|
+
|
|
182
|
+
k = html`<var class="math-var k">k</var>`;
|
|
183
|
+
|
|
184
|
+
vs = html`<var class="math-var v vs">V<sub class="subscript">ss</sub></var>`;
|
|
185
|
+
vl = html`<var class="math-var v vl">V<sub class="subscript">ll</sub></var>`;
|
|
186
|
+
vDiff = html`<span class="comparison">≟</span>`;
|
|
187
|
+
}
|
|
188
|
+
const equation = html`
|
|
189
|
+
<tr>
|
|
190
|
+
<td class="underline">
|
|
191
|
+
${as}
|
|
192
|
+
</td>
|
|
193
|
+
<td rowspan="2">
|
|
194
|
+
${vDiff}
|
|
195
|
+
</td>
|
|
196
|
+
<td class="underline">
|
|
197
|
+
${al}
|
|
198
|
+
</td>
|
|
199
|
+
</tr>
|
|
200
|
+
<tr>
|
|
201
|
+
<td class="">
|
|
202
|
+
<span class="paren tight">(</span>1<span class="plus">+</span>${k}${ds}<span class="paren tight">)</span>
|
|
203
|
+
</td>
|
|
204
|
+
<td class="">
|
|
205
|
+
<span class="paren tight">(</span>1<span class="plus">+</span>${k}${dl}<span class="paren tight">)</span>
|
|
206
|
+
</td>
|
|
207
|
+
</tr>
|
|
208
|
+
<tr>
|
|
209
|
+
<td class="right">
|
|
210
|
+
${vs}
|
|
211
|
+
</td>
|
|
212
|
+
<td>
|
|
213
|
+
${vDiff}
|
|
214
|
+
</td>
|
|
215
|
+
<td class="left">
|
|
216
|
+
${vl}
|
|
217
|
+
</td>
|
|
218
|
+
</tr>`;
|
|
219
|
+
return html`
|
|
220
|
+
<div class="holder">
|
|
221
|
+
<table class="equation">
|
|
222
|
+
<tbody>
|
|
223
|
+
${equation}
|
|
224
|
+
</tbody>
|
|
225
|
+
</table>
|
|
226
|
+
</div>`;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
customElements.define('htd-calculation', HTDCalculation);
|