@oat-sa/tao-core-ui 1.67.0 → 1.69.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.
Files changed (54) hide show
  1. package/dist/ckeditor/ckConfigurator.js +10 -1
  2. package/dist/maths/calculator/basicCalculator.js +4 -4
  3. package/dist/maths/calculator/calculatorComponent.js +22 -25
  4. package/dist/maths/calculator/core/board.js +12329 -720
  5. package/dist/maths/calculator/core/labels.js +7924 -138
  6. package/dist/maths/calculator/core/plugin.js +4 -5
  7. package/dist/maths/calculator/css/calculator.css +18 -5
  8. package/dist/maths/calculator/css/calculator.css.map +1 -1
  9. package/dist/maths/calculator/defaultCalculator.js +10 -6
  10. package/dist/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +23 -25
  11. package/dist/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +7979 -194
  12. package/dist/maths/calculator/scientificCalculator.js +7 -12
  13. package/package.json +5 -7
  14. package/src/ckeditor/ckConfigurator.js +11 -4
  15. package/src/maths/calculator/basicCalculator.js +1 -4
  16. package/src/maths/calculator/calculatorComponent.js +49 -60
  17. package/src/maths/calculator/core/board.js +372 -493
  18. package/src/maths/calculator/core/labels.js +46 -48
  19. package/src/maths/calculator/core/plugin.js +3 -5
  20. package/src/maths/calculator/core/tpl/terms.tpl +7 -1
  21. package/src/maths/calculator/css/calculator.css +18 -5
  22. package/src/maths/calculator/css/calculator.css.map +1 -1
  23. package/src/maths/calculator/defaultCalculator.js +7 -9
  24. package/src/maths/calculator/plugins/keyboard/templateKeyboard/defaultTemplate.tpl +3 -3
  25. package/src/maths/calculator/plugins/keyboard/templateKeyboard/templateKeyboard.js +17 -20
  26. package/src/maths/calculator/plugins/screen/simpleScreen/simpleScreen.js +102 -108
  27. package/src/maths/calculator/scientificCalculator.js +2 -10
  28. package/src/maths/calculator/scss/calculator.scss +14 -1
  29. package/src/maths/calculator/tpl/basicKeyboard.tpl +3 -3
  30. package/src/maths/calculator/tpl/scientificKeyboard.tpl +4 -4
  31. package/dist/maths/calculator/core/areaBroker.js +0 -43
  32. package/dist/maths/calculator/core/expression.js +0 -463
  33. package/dist/maths/calculator/core/terms.js +0 -456
  34. package/dist/maths/calculator/core/tokenizer.js +0 -229
  35. package/dist/maths/calculator/core/tokens.js +0 -167
  36. package/dist/maths/calculator/plugins/core/degrad.js +0 -71
  37. package/dist/maths/calculator/plugins/core/history.js +0 -149
  38. package/dist/maths/calculator/plugins/core/remind.js +0 -76
  39. package/dist/maths/calculator/plugins/core/stepNavigation.js +0 -148
  40. package/dist/maths/calculator/plugins/modifiers/pow10.js +0 -136
  41. package/dist/maths/calculator/plugins/modifiers/sign.js +0 -314
  42. package/dist/maths/calculator/pluginsLoader.js +0 -47
  43. package/src/maths/calculator/core/areaBroker.js +0 -38
  44. package/src/maths/calculator/core/expression.js +0 -430
  45. package/src/maths/calculator/core/terms.js +0 -459
  46. package/src/maths/calculator/core/tokenizer.js +0 -245
  47. package/src/maths/calculator/core/tokens.js +0 -178
  48. package/src/maths/calculator/plugins/core/degrad.js +0 -90
  49. package/src/maths/calculator/plugins/core/history.js +0 -166
  50. package/src/maths/calculator/plugins/core/remind.js +0 -96
  51. package/src/maths/calculator/plugins/core/stepNavigation.js +0 -175
  52. package/src/maths/calculator/plugins/modifiers/pow10.js +0 -143
  53. package/src/maths/calculator/plugins/modifiers/sign.js +0 -339
  54. package/src/maths/calculator/pluginsLoader.js +0 -46
@@ -1,6 +1,5 @@
1
- define(['lodash', 'core/plugin'], function (_, pluginFactory) { 'use strict';
1
+ define(['core/plugin'], function (pluginFactory) { 'use strict';
2
2
 
3
- _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;
4
3
  pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;
5
4
 
6
5
  /**
@@ -18,15 +17,15 @@ define(['lodash', 'core/plugin'], function (_, pluginFactory) { 'use strict';
18
17
  * along with this program; if not, write to the Free Software
19
18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20
19
  *
21
- * Copyright (c) 2018 Open Assessment Technologies SA ;
20
+ * Copyright (c) 2018-2023 Open Assessment Technologies SA ;
22
21
  */
23
22
 
24
23
  /**
25
24
  * A pluginFactory configured for the calculator
26
- * @returns {Function} the preconfigured plugin factory
25
+ * @returns {Function} the pre-configured plugin factory
27
26
  */
28
27
  function calculatorPluginFactory(provider, defaultConfig) {
29
- return pluginFactory(provider, _.defaults({
28
+ return pluginFactory(provider, Object.assign({
30
29
  //alias getHost to getCalculator
31
30
  hostName: 'calculator'
32
31
  }, defaultConfig));
@@ -35,6 +35,19 @@ Usage:
35
35
  bottom: -0.5em;
36
36
  }
37
37
 
38
+ .calculator [data-type='exponent'] {
39
+ vertical-align: super;
40
+ font-size: 0.75em;
41
+ }
42
+
43
+ .calculator [data-type='variable'] {
44
+ font-weight: bold;
45
+ }
46
+
47
+ .calculator [data-type='function']:not([data-value*='rt']) {
48
+ padding-right: 0.3em;
49
+ }
50
+
38
51
  .calculator .screen,
39
52
  .calculator .input {
40
53
  position: relative;
@@ -306,14 +319,14 @@ Usage:
306
319
  color: #3e7da7;
307
320
  }
308
321
 
309
- .calculator .simple-screen .term.term-variable[data-token='ANS'] {
322
+ .calculator .simple-screen .term.term-variable[data-token='VAR_ANS'] {
310
323
  background: #ecf2f6;
311
324
  padding: 0;
312
325
  margin: 0 0.4em;
313
326
  position: relative;
314
327
  }
315
328
 
316
- .calculator .simple-screen .term.term-variable[data-token='ANS']::before, .calculator .simple-screen .term.term-variable[data-token='ANS']::after {
329
+ .calculator .simple-screen .term.term-variable[data-token='VAR_ANS']::before, .calculator .simple-screen .term.term-variable[data-token='VAR_ANS']::after {
317
330
  background: #ecf2f6;
318
331
  content: '';
319
332
  border-radius: 50%;
@@ -325,19 +338,19 @@ Usage:
325
338
  width: 0.4em;
326
339
  }
327
340
 
328
- .calculator .simple-screen .term.term-variable[data-token='ANS']::before {
341
+ .calculator .simple-screen .term.term-variable[data-token='VAR_ANS']::before {
329
342
  border-left-style: solid;
330
343
  border-left-color: #3e7da7;
331
344
  left: -0.2em;
332
345
  }
333
346
 
334
- .calculator .simple-screen .term.term-variable[data-token='ANS']::after {
347
+ .calculator .simple-screen .term.term-variable[data-token='VAR_ANS']::after {
335
348
  border-right-style: solid;
336
349
  border-right-color: #3e7da7;
337
350
  right: -0.2em;
338
351
  }
339
352
 
340
- .calculator .simple-screen .term.term-variable[data-token='ANS'] * {
353
+ .calculator .simple-screen .term.term-variable[data-token='VAR_ANS'] * {
341
354
  position: relative;
342
355
  z-index: 1;
343
356
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../scss/calculator.scss","../../../../scss/inc/_functions.scss","../../../../scss/inc/fonts/_tao-icon-vars.scss","../../../../scss/inc/_colors.scss"],"names":[],"mappings":"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","file":"calculator.css","sourcesContent":["/* Style for the calculator component */\n@import 'inc/bootstrap';\n\n/* font size mixin specific to calculator to use em instead of rem unit */\n@function calc-em-size($em) {\n @return ($em) * 1em;\n}\n@mixin calc-font-size($em) {\n font-size: calc-em-size($em) !important;\n}\n\n.calculator {\n $calculatorPanelBg: $uiClickableDefaultBg;\n $calculatorPanelTxt: $textColor;\n $calculatorKeyboardBg: $uiClickableDefaultBg;\n $calculatorKeyboardHoverBg: $uiClickableActiveBg;\n $calculatorKeyboardSpecialBg: $uiClickableHoverBg;\n $calculatorKeyboardSpecialTxt: $textHighlight;\n $calculatorKeyboardCommandTxt: $info;\n $calculatorKeyboardSwitchBg: $uiClickableDefaultBg;\n $calculatorKeyboardSwitchTxt: $textColor;\n $calculatorKeyboardSwitchSelectedBg: $uiClickableHoverBg;\n $calculatorKeyboardSwitchSelectedTxt: $textHighlight;\n $calculatorKeyboardSwitchBorder: whiten($textColor, 0.5);\n $calculatorKeyboardTxt: $textColor;\n $calculatorScreenBg: $uiGeneralContentBg;\n $calculatorScreenTxt: $textColor;\n $calculatorScreenBorder: $info;\n $calculatorScreenSpecialTxt: $uiClickableHoverBg;\n $calculatorScreenSpecialBg: whiten($uiClickableHoverBg, 0.9);\n $calculatorHistoryBorder: $uiGeneralContentBorder;\n $calculatorHistoryTxt: whiten($textColor, 0.2);\n\n $calculatorFontSizeBtnPrimary: 1.7;\n $calculatorFontSizeBtnSecondary: 1.3;\n $calculatorFontSizeBtnSwitch: 1;\n $calculatorFontSizeBtnSvg: 1;\n $calculatorFontSizeExpression: 1.3;\n $calculatorFontSizeHistory: 1;\n $calculatorLineHeightExpression: calc-em-size($calculatorFontSizeExpression + 0.3);\n $calculatorLineHeightHistory: calc-em-size($calculatorFontSizeHistory + 0.3);\n $calculatorTermSpace: calc-em-size(0.2);\n $calculatorButtonSize: calc-em-size(3.2);\n $calculatorSwitchSize: calc-em-size(3.2);\n $calculatorButtonPadding: 2px;\n $calculatorSwitchPadding: 4px;\n $calculatorScreenPadding: 8px;\n $calculatorBaseFontSize: 12px;\n\n position: relative;\n font-family: monospace, sans-serif;\n font-size: $calculatorBaseFontSize;\n width: 100%;\n height: 100%;\n @include vendor-prefix(display, flex, value, (-ms-, -webkit-, ''));\n @include vendor-prefix(flex-direction, column, property, (-ms-, -webkit-, ''));\n @include vendor-prefix(align-content, stretch, property, (-ms-, -webkit-, ''));\n\n sup,\n sub {\n font-size: 0.75em;\n }\n sup {\n top: -0.5em;\n }\n sub {\n bottom: -0.5em;\n }\n\n .screen,\n .input {\n position: relative;\n @include vendor-prefix(flex, 0 0 auto, property, (-ms-, -webkit-, ''));\n }\n\n .focus {\n outline: 2px solid $calculatorScreenBorder;\n }\n\n .keyboard {\n padding: 0 20px 20px;\n position: relative;\n @include vendor-prefix(display, flex, value, (-ms-, -webkit-, ''));\n @include vendor-prefix(flex, 1 1, property, (-ms-, -webkit-, ''));\n }\n\n .calculator-keyboard {\n position: relative;\n @include vendor-prefix(display, flex, value, (-ms-, -webkit-, ''));\n @include vendor-prefix(flex-direction, column, property, (-ms-, -webkit-, ''));\n @include vendor-prefix(align-content, stretch, property, (-ms-, -webkit-, ''));\n background: $calculatorKeyboardBg;\n color: $calculatorKeyboardTxt;\n width: 100%;\n height: auto;\n padding-top: $calculatorScreenPadding;\n\n .row {\n position: relative;\n @include vendor-prefix(display, flex, value, (-ms-, -webkit-, ''));\n @include vendor-prefix(flex-direction, row, property, (-ms-, -webkit-, ''));\n @include vendor-prefix(align-content, stretch, property, (-ms-, -webkit-, ''));\n @include vendor-prefix(flex, 1 1 auto, property, (-ms-, -webkit-, ''));\n width: 100%;\n height: 100%;\n }\n\n .spacer {\n @include vendor-prefix(flex, 1 1 auto, property, (-ms-, -webkit-, ''));\n width: $calculatorButtonSize;\n height: 100%;\n }\n\n span {\n position: relative;\n display: inline-block;\n z-index: 1;\n @include calc-font-size($calculatorFontSizeBtnSecondary);\n }\n\n button {\n position: relative;\n background-color: $calculatorKeyboardBg;\n color: $calculatorKeyboardTxt !important;\n display: inline-block;\n border-radius: 0;\n border: none;\n padding: 0;\n text-align: center;\n text-shadow: none;\n cursor: pointer;\n @include vendor-prefix(flex, 1 1 auto, property, (-ms-, -webkit-, ''));\n width: $calculatorButtonSize;\n height: 100%;\n\n @include calc-font-size(1);\n\n &:not(.switch) {\n &:before {\n content: ' ';\n border-radius: 50%;\n display: inline-block;\n position: absolute;\n z-index: 0;\n top: calc(50% - #{$calculatorButtonSize / 2} + #{$calculatorButtonPadding});\n left: calc(50% - #{$calculatorButtonSize / 2} + #{$calculatorButtonPadding});\n width: calc(#{$calculatorButtonSize} - #{$calculatorButtonPadding * 2});\n height: calc(#{$calculatorButtonSize} - #{$calculatorButtonPadding * 2});\n }\n }\n &:hover {\n &:before {\n background: $calculatorKeyboardHoverBg;\n }\n }\n\n &.disabled {\n visibility: hidden;\n }\n &.switch {\n span {\n color: $calculatorKeyboardSwitchTxt !important;\n border-color: $calculatorKeyboardSwitchBorder !important;\n border-top: 1px solid;\n border-bottom: 1px solid;\n height: auto;\n width: 100%;\n padding: $calculatorSwitchPadding 0.5em;\n @include calc-font-size($calculatorFontSizeBtnSwitch);\n }\n\n &.first {\n span {\n border-left: 1px solid;\n border-top-left-radius: 2px;\n border-bottom-left-radius: 2px;\n }\n }\n &.last {\n span {\n border-right: 1px solid;\n border-top-right-radius: 2px;\n border-bottom-right-radius: 2px;\n }\n }\n\n &:before {\n content: ' ';\n border-radius: 2px;\n display: inline-block;\n position: absolute;\n z-index: 0;\n top: calc(50% - #{$calculatorFontSizeBtnSwitch / 2}em - #{$calculatorSwitchPadding});\n bottom: calc(50% - #{$calculatorFontSizeBtnSwitch / 2}em - #{$calculatorSwitchPadding});\n left: 3px;\n right: 3px;\n }\n }\n &.operand {\n span {\n font-weight: bold;\n @include calc-font-size($calculatorFontSizeBtnPrimary);\n }\n }\n &.command {\n span {\n color: $calculatorKeyboardCommandTxt !important;\n }\n }\n &.execute {\n &:before {\n background: $calculatorKeyboardSpecialBg;\n }\n\n span {\n font-weight: bold;\n color: $calculatorKeyboardSpecialTxt !important;\n @include calc-font-size($calculatorFontSizeBtnPrimary);\n }\n }\n\n svg {\n display: inline-block;\n width: calc-em-size($calculatorFontSizeBtnSvg);\n height: calc-em-size($calculatorFontSizeBtnSvg);\n stroke-width: 0;\n stroke: currentColor;\n fill: currentColor;\n\n &.backspace-outline {\n width: calc-em-size($calculatorFontSizeBtnSvg * 1.2);\n height: calc-em-size($calculatorFontSizeBtnSvg * 1.2);\n }\n }\n }\n }\n\n &.degree {\n .calculator-keyboard {\n button.switch[data-command='degree'] {\n &:before {\n background: $calculatorKeyboardSwitchSelectedBg;\n }\n span {\n color: $calculatorKeyboardSwitchSelectedTxt !important;\n }\n }\n }\n }\n &.radian {\n .calculator-keyboard {\n button.switch[data-command='radian'] {\n &:before {\n background: $calculatorKeyboardSwitchSelectedBg;\n }\n span {\n color: $calculatorKeyboardSwitchSelectedTxt !important;\n }\n }\n }\n }\n\n .simple-screen {\n position: relative;\n width: 100%;\n @include calc-font-size($calculatorFontSizeExpression);\n color: $calculatorScreenTxt;\n font-family: monospace;\n\n .screen-panel {\n position: relative;\n width: 100%;\n overflow: auto;\n word-break: break-all;\n text-align: left;\n padding: $calculatorScreenPadding 8px;\n }\n\n .history {\n @include calc-font-size($calculatorFontSizeHistory);\n border: 1px solid $calculatorHistoryBorder;\n color: $calculatorHistoryTxt;\n height: calc(#{$calculatorScreenPadding * 2} + #{$calculatorLineHeightHistory * 3});\n line-height: $calculatorLineHeightHistory;\n\n .history-line {\n .history-expression {\n &,\n .term {\n font-weight: lighter;\n }\n text-align: left;\n }\n .history-result {\n &:before {\n content: '=';\n display: inline-block;\n font-weight: lighter;\n padding-right: $calculatorTermSpace;\n }\n text-align: right;\n font-weight: bolder;\n }\n }\n }\n .expression {\n @include calc-font-size($calculatorFontSizeExpression);\n background: $calculatorScreenBg;\n color: $calculatorScreenTxt;\n height: calc(#{$calculatorScreenPadding * 2} + #{$calculatorLineHeightExpression * 2});\n line-height: $calculatorLineHeightExpression;\n }\n .term {\n padding: 0;\n\n &.term-operator:not([data-token='POW']):not([data-token='FAC']):not([data-token='NEG']) {\n padding: 0 $calculatorTermSpace;\n }\n &.term-operator[data-token='FAC'],\n &.term-operator[data-token='NEG'] {\n margin-left: -$calculatorTermSpace / 2;\n margin-right: -$calculatorTermSpace / 2;\n }\n &.term-operator[data-token='POS'] {\n display: none;\n }\n &.term-function:not([data-token='SQRT']):not([data-token='CBRT']) {\n padding-right: $calculatorTermSpace;\n }\n &.term-operand {\n font-weight: bold;\n }\n &.term-modificator {\n font-weight: lighter;\n }\n &.term-constant {\n font-style: italic;\n font-weight: bold;\n }\n &.term-variable {\n font-weight: bold;\n color: $calculatorScreenSpecialTxt;\n }\n &.term-variable[data-token='ANS'] {\n background: $calculatorScreenSpecialBg;\n padding: 0;\n margin: 0 #{$calculatorTermSpace * 2};\n position: relative;\n &::before,\n &::after {\n background: $calculatorScreenSpecialBg;\n content: '';\n border-radius: 50%;\n border: 2px none;\n position: absolute;\n z-index: 0;\n top: 0;\n bottom: 0;\n width: #{$calculatorTermSpace * 2};\n }\n &::before {\n border-left-style: solid;\n border-left-color: $calculatorScreenSpecialTxt;\n left: #{-$calculatorTermSpace};\n }\n &::after {\n border-right-style: solid;\n border-right-color: $calculatorScreenSpecialTxt;\n right: #{-$calculatorTermSpace};\n }\n * {\n position: relative;\n z-index: 1;\n }\n }\n &.term-unknown {\n color: $warning;\n text-decoration: underline wavy $error;\n }\n &.term-elide {\n display: none;\n }\n &.term-error {\n color: $error;\n }\n &.term-syntaxError {\n color: $error;\n text-decoration: underline wavy $error;\n }\n }\n }\n\n &.error .screen .expression {\n background: $errorBgColor;\n }\n}\n\n/*# sourceMappingURL=calculator.css.map */","@mixin iterate-sprite($iconList, $x, $y, $direction, $prefix:'') {\n @each $icon in $iconList {\n #{$prefix}#{$icon} {\n background-position: $x * 1px $y * 1px;\n }\n @if $direction == 'x' {\n $x: $x - 16;\n } @else {\n $y: $y - 16;\n }\n }\n}\n\n/*\nUsage:\n- linear-gradient((color1, color2, color3)) - returns linear-gradient with evenly distributed colors,\n if 3 colors used then the position of each will be 33,33%\n- linear-gradient((color1 0%, color2 30%, color3 80%)) - returns linear-gradient with manually distributed colors,\n first param - color, second - position. Also you can use px or other valid units for set position.\n*/\n@mixin linear-gradient($colorList, $direction: 'to right') {\n $percentage: 0;\n $units: '%';\n $count: length($colorList);\n $increment: 100 / ($count - 1);\n $css: #{$direction + ', '};\n $sep: ', ';\n @each $colorItem in $colorList {\n $color: $colorItem;\n @if (length($colorItem) > 1) {\n $color: nth($colorItem, 1);\n $percentage: nth($colorItem, 2);\n $units: '';\n }\n @if ($percentage >= 100 or index($colorList, $colorItem) == $count) {\n $sep: '';\n }\n $css: #{$css + $color + ' ' + $percentage + $units + $sep};\n $percentage: $percentage + $increment;\n }\n background: linear-gradient( #{$css} );\n}\n\n@mixin grid-unit($span, $numCols: 12, $gutter: 0) {\n $gridPx: 840;\n $rawSpanPx: (($gridPx - ($numCols * $gutter)) / $numCols);\n $spanPx: $rawSpanPx * $span + (($span - 1) * $gutter);\n $spanPercent: widthPerc($spanPx, $gridPx);\n $marginPercent: widthPerc($gutter, $gridPx);\n margin-left: $marginPercent;\n width: $spanPercent;\n}\n\n\n@mixin vendor-prefix($property, $value, $whatToPrefix: property, $prefixes: (-webkit-, -moz-, -ms-, -o-, '')) {\n @if $whatToPrefix == 'property' {\n @each $prefix in $prefixes {\n #{$prefix + $property}: #{$value};\n }\n }\n @else if $whatToPrefix == 'value' {\n @each $prefix in $prefixes {\n #{$property}: #{$prefix + $value};\n }\n }\n}\n@mixin flex-container($wrapBehavior: nowrap, $direction : row) {\n @include vendor-prefix(display, flex, value, (-ms-, -webkit-, ''));\n\n @include vendor-prefix(flex-direction, $direction, property, (-ms-, -webkit-, ''));\n @include vendor-prefix(flex-wrap, $wrapBehavior, property, (-ms-, -webkit-, ''));\n\n @include vendor-prefix(justify-content, flex-start, property, (-webkit-, ''));\n\n @include vendor-prefix(align-content, flex-start, property, (-webkit-, ''));\n\n @include vendor-prefix(align-items, stretch, property, (-webkit-, ''));\n}\n\n@mixin simple-flex-box($width: auto, $minWidth: 1) {\n\n @include vendor-prefix(order, 0, property, (-ms-, -webkit-, ''));\n flex-item-align: stretch;\n -ms-flex-item-align: stretch;\n @include vendor-prefix(align-self, stretch, property, (-webkit-, ''));\n\n // if both, min width and width are set, width will win this conflict\n @if ($width == auto) {\n @if ($minWidth != 1) {\n @include vendor-prefix(flex, 1 1 $minWidth, property, (-ms-, -webkit-, ''));\n }\n @else {\n @include vendor-prefix(flex, 1 1 auto, property, (-ms-, -webkit-, ''));\n // @see https://developer.mozilla.org/en-US/docs/Web/CSS/flex-basis#Values\n // for a discussion auto vs. main-size\n @include vendor-prefix(flex, 1 1, property, (-ms-, -webkit-, ''));\n }\n }\n @else {\n @include vendor-prefix(flex, 0 0 $width, property, (-ms-, -webkit-, ''));\n }\n}\n\n\n@mixin box-shadow($horiz: 1px, $vert: 1px, $blur: 2px, $spread: 0, $color: rgba(0, 0, 0, .2)) {\n @include vendor-prefix(box-shadow, $horiz $vert $blur $spread $color, property);\n}\n\n@mixin simple-border($color: #ddd) {\n border: 1px solid $color;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n}\n\n@mixin border-radius($radius: 2) {\n -moz-border-radius: $radius * 1px;\n -webkit-border-radius: $radius * 1px;\n border-radius: $radius * 1px;\n}\n\n@mixin border-radius-top($radius: 2) {\n -webkit-border-top-left-radius: $radius * 1px;\n -webkit-border-top-right-radius: $radius * 1px;\n -moz-border-radius-topleft: $radius * 1px;\n -moz-border-radius-topright: $radius * 1px;\n border-top-left-radius: $radius * 1px;\n border-top-right-radius: $radius * 1px;\n}\n\n@mixin border-radius-bottom($radius: 2) {\n -webkit-border-bottom-right-radius: $radius * 1px;\n -webkit-border-bottom-left-radius: $radius * 1px;\n -moz-border-radius-bottomright: $radius * 1px;\n -moz-border-radius-bottomleft: $radius * 1px;\n border-bottom-right-radius: $radius * 1px;\n border-bottom-left-radius: $radius * 1px;\n}\n\n@mixin border-radius-left($radius: 2) {\n -webkit-border-top-left-radius: $radius * 1px;\n -webkit-border-bottom-left-radius: $radius * 1px;\n -moz-border-radius-topleft: $radius * 1px;\n -moz-border-radius-bottomleft: $radius * 1px;\n border-top-left-radius: $radius * 1px;\n border-bottom-left-radius: $radius * 1px;\n}\n\n@mixin border-radius-right($radius: 2) {\n -webkit-border-top-right-radius: $radius * 1px;\n -webkit-border-bottom-right-radius: $radius * 1px;\n -moz-border-radius-topright: $radius * 1px;\n -moz-border-radius-bottomright: $radius * 1px;\n border-top-right-radius: $radius * 1px;\n border-bottom-right-radius: $radius * 1px;\n}\n\n@mixin border-radius-top-left($radius: 2) {\n -webkit-border-top-left-radius: $radius * 1px;\n -moz-border-radius-topleft: $radius * 1px;\n border-top-left-radius: $radius * 1px;\n}\n\n@mixin border-radius-top-right($radius: 2) {\n -webkit-border-top-right-radius: $radius * 1px;\n -moz-border-radius-topright: $radius * 1px;\n border-top-right-radius: $radius * 1px;\n}\n\n@mixin border-radius-bottom-right($radius: 2) {\n -webkit-border-bottom-right-radius: $radius * 1px;\n -moz-border-radius-bottomright: $radius * 1px;\n border-bottom-right-radius: $radius * 1px;\n}\n\n@mixin border-radius-bottom-left($radius: 2) {\n -webkit-border-bottom-left-radius: $radius * 1px;\n -moz-border-radius-bottomleft: $radius * 1px;\n border-bottom-left-radius: $radius * 1px;\n}\n\n@mixin border-box() {\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n\n@function whiten($color, $white: 0.3) {\n @return mix(#fff, $color, ($white * 100) * 1%);\n}\n\n@function blacken($color, $black: 0.3) {\n @return mix(#000, $color, ($black * 100) * 1%);\n}\n\n@function widthPerc($colWidth, $context) {\n @return ($colWidth * 100 / $context) * 1%\n}\n\n@function remDist($fontSizePx) {\n @return ($fontSizePx / 10) * 1rem\n}\n\n@function black($alpha: 1) {\n @return (rgba(0, 0, 0, $alpha))\n}\n\n@function white($alpha: 1) {\n @return (rgba(255, 255, 255, $alpha))\n}\n\n@mixin font-size($remPx, $important: false) {\n @if $important == true {\n font-size: ($remPx) * 1px !important;\n font-size: ($remPx / 10) * 1rem !important;\n }\n @else {\n font-size: ($remPx) * 1px;\n font-size: ($remPx / 10) * 1rem;\n }\n}\n\n\n@mixin keyframes($name) {\n @-o-keyframes #{$name} { @content };\n @-moz-keyframes #{$name} { @content };\n @-webkit-keyframes #{$name} { @content };\n @keyframes #{$name} { @content };\n}\n\n\n@mixin animation($value, $type:'') {\n $animation: animation;\n @if $type != '' {\n $animation: $animation + '-' + $type;\n }\n @include vendor-prefix($animation, $value, property);\n}\n\n/// CSS transition mixin to the current selection (apply also vendor prefixes).\n/// See <https://developer.mozilla.org/en-US/docs/Web/CSS/transition> for the values\n///\n/// @param {property} [$type = all] the CSS property to apply the transition to\n/// @param {time} [$duration = .5s] the transition property\n/// @param {timing-function} [$effect = ease-out] the transition property\n@mixin transition($type : all, $duration : 0.5s, $effect : ease-out, $delay : 0s){\n @include vendor-prefix(transition, $type + ', ' + $duration + ', ' + $effect + ', ' + $delay, property);\n}\n\n@mixin fade($duration: 1s){\n\n @include keyframes(fade) {\n 0% {opacity:0;}\n 50% {opacity:1;}\n 100% {opacity:0;}\n }\n\n @include vendor-prefix(animation, fade 1s forwards, property);\n}\n\n@mixin repeat(){\n @include animation(infinite, iteration-count);\n}\n\n@mixin largeHeading() {\n @include font-size(20);\n font-family: $headingFont;\n font-style: normal;\n}\n\n@mixin disableSelect() {\n @include vendor-prefix(user-select, none, property);\n}\n\n/* based on \"visually-hidden\" mixin in LDS for accessibility goals */\n@mixin visuallyHidden() {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(1px, 1px, 1px, 1px);\n margin: 0;\n padding: 0;\n}\n","/* Do not edit */@mixin tao-icon-setup {\n /* use !important to prevent issues with browser extensions that change fonts */\n font-family: 'tao' !important;\n speak: never;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n\n /* Better Font Rendering =========== */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n@mixin icon-japan-incorrect { content: \"\\e91b\"; }\n@mixin icon-japan-correct { content: \"\\e91c\"; }\n@mixin icon-japan-partial { content: \"\\e91d\"; }\n@mixin icon-score-partial { content: \"\\e91a\"; }\n@mixin icon-furigana { content: \"\\e919\"; }\n@mixin icon-add-subsection { content: \"\\e918\"; }\n@mixin icon-info-bare { content: \"\\e923\"; }\n@mixin icon-bookmark-outline { content: \"\\e922\"; }\n@mixin icon-bookmark { content: \"\\e921\"; }\n@mixin icon-indicator { content: \"\\e920\"; }\n@mixin icon-wrap-inline { content: \"\\e915\"; }\n@mixin icon-wrap-left { content: \"\\e916\"; }\n@mixin icon-wrap-right { content: \"\\e917\"; }\n@mixin icon-offline { content: \"\\e913\"; }\n@mixin icon-online { content: \"\\e914\"; }\n@mixin icon-tab { content: \"\\e90d\"; }\n@mixin icon-untab { content: \"\\e90e\"; }\n@mixin icon-multi-select { content: \"\\e90b\"; }\n@mixin icon-clipboard { content: \"\\e90a\"; }\n@mixin icon-filebox { content: \"\\e909\"; }\n@mixin icon-click-to-speak { content: \"\\e907\"; }\n@mixin icon-speech-bubble { content: \"\\f0e5\"; }\n@mixin icon-microphone { content: \"\\f130\"; }\n@mixin icon-microphone-off { content: \"\\f131\"; }\n@mixin icon-disconnect { content: \"\\e905\"; }\n@mixin icon-connect { content: \"\\e906\"; }\n@mixin icon-eliminate { content: \"\\e904\"; }\n@mixin icon-wheelchair { content: \"\\e903\"; }\n@mixin icon-text-marker { content: \"\\e902\"; }\n@mixin icon-unshield { content: \"\\e32a\"; }\n@mixin icon-shield { content: \"\\e8e8\"; }\n@mixin icon-tree { content: \"\\e6b4\"; }\n@mixin icon-home { content: \"\\e6b3\"; }\n@mixin icon-shared-file { content: \"\\e6b2\"; }\n@mixin icon-end-attempt { content: \"\\e603\"; }\n@mixin icon-icon { content: \"\\f1c5\"; }\n@mixin icon-radio-bg { content: \"\\e600\"; }\n@mixin icon-checkbox-bg { content: \"\\e601\"; }\n@mixin icon-tag { content: \"\\e602\"; }\n@mixin icon-style { content: \"\\e604\"; }\n@mixin icon-ownership-transfer { content: \"\\e605\"; }\n@mixin icon-property-advanced { content: \"\\e606\"; }\n@mixin icon-property-add { content: \"\\e607\"; }\n@mixin icon-repository-add { content: \"\\e608\"; }\n@mixin icon-repository-remove { content: \"\\e609\"; }\n@mixin icon-repository { content: \"\\e60a\"; }\n@mixin icon-result-server { content: \"\\e60b\"; }\n@mixin icon-folder { content: \"\\e60c\"; }\n@mixin icon-folder-open { content: \"\\e60d\"; }\n@mixin icon-left { content: \"\\e60e\"; }\n@mixin icon-right { content: \"\\e60f\"; }\n@mixin icon-up { content: \"\\e610\"; }\n@mixin icon-down { content: \"\\e611\"; }\n@mixin icon-undo { content: \"\\e612\"; }\n@mixin icon-redo { content: \"\\e613\"; }\n@mixin icon-screen { content: \"\\e614\"; }\n@mixin icon-laptop { content: \"\\e615\"; }\n@mixin icon-tablet { content: \"\\e616\"; }\n@mixin icon-phone { content: \"\\e617\"; }\n@mixin icon-move { content: \"\\e618\"; }\n@mixin icon-bin { content: \"\\e619\"; }\n@mixin icon-shuffle { content: \"\\e61a\"; }\n@mixin icon-print { content: \"\\e61b\"; }\n@mixin icon-tools { content: \"\\e61c\"; }\n@mixin icon-settings { content: \"\\e61d\"; }\n@mixin icon-video { content: \"\\e61e\"; }\n@mixin icon-find { content: \"\\e61f\"; }\n@mixin icon-image { content: \"\\e620\"; }\n@mixin icon-edit { content: \"\\e621\"; }\n@mixin icon-document { content: \"\\e622\"; }\n@mixin icon-resize-grid { content: \"\\e623\"; }\n@mixin icon-resize { content: \"\\e624\"; }\n@mixin icon-help { content: \"\\e625\"; }\n@mixin icon-mobile-menu { content: \"\\e626\"; }\n@mixin icon-fix { content: \"\\e627\"; }\n@mixin icon-unlock { content: \"\\e628\"; }\n@mixin icon-lock { content: \"\\e629\"; }\n@mixin icon-ul { content: \"\\e62a\"; }\n@mixin icon-ol { content: \"\\e62b\"; }\n@mixin icon-email { content: \"\\e62c\"; }\n@mixin icon-download { content: \"\\e62d\"; }\n@mixin icon-logout { content: \"\\e62e\"; }\n@mixin icon-login { content: \"\\e62f\"; }\n@mixin icon-spinner { content: \"\\e630\"; }\n@mixin icon-preview { content: \"\\e631\"; }\n@mixin icon-external { content: \"\\e632\"; }\n@mixin icon-time { content: \"\\e633\"; }\n@mixin icon-save { content: \"\\e634\"; }\n@mixin icon-warning { content: \"\\e635\"; }\n@mixin icon-add { content: \"\\e636\"; }\n@mixin icon-error { content: \"\\e900\"; }\n@mixin icon-close { content: \"\\e637\"; }\n@mixin icon-success { content: \"\\e638\"; }\n@mixin icon-remove { content: \"\\e639\"; }\n@mixin icon-info { content: \"\\e63a\"; }\n@mixin icon-danger { content: \"\\e63b\"; }\n@mixin icon-users { content: \"\\e63c\"; }\n@mixin icon-user { content: \"\\e63d\"; }\n@mixin icon-test-taker { content: \"\\e63e\"; }\n@mixin icon-test-takers { content: \"\\e63f\"; }\n@mixin icon-item { content: \"\\e640\"; }\n@mixin icon-test { content: \"\\e641\"; }\n@mixin icon-delivery { content: \"\\e642\"; }\n@mixin icon-eye-slash { content: \"\\e643\"; }\n@mixin icon-result { content: \"\\e644\"; }\n@mixin icon-delivery-small { content: \"\\e645\"; }\n@mixin icon-upload { content: \"\\e646\"; }\n@mixin icon-result-small { content: \"\\e647\"; }\n@mixin icon-mobile-preview { content: \"\\e648\"; }\n@mixin icon-extension { content: \"\\e649\"; }\n@mixin icon-desktop-preview { content: \"\\e64a\"; }\n@mixin icon-tablet-preview { content: \"\\e64b\"; }\n@mixin icon-insert-horizontal-line { content: \"\\e64c\"; }\n@mixin icon-table { content: \"\\e64d\"; }\n@mixin icon-anchor { content: \"\\e64e\"; }\n@mixin icon-unlink { content: \"\\e64f\"; }\n@mixin icon-link { content: \"\\e650\"; }\n@mixin icon-right-left { content: \"\\e651\"; }\n@mixin icon-left-right { content: \"\\e652\"; }\n@mixin icon-special-character { content: \"\\e653\"; }\n@mixin icon-source { content: \"\\e654\"; }\n@mixin icon-new-page { content: \"\\e655\"; }\n@mixin icon-templates { content: \"\\e656\"; }\n@mixin icon-cut { content: \"\\e657\"; }\n@mixin icon-replace { content: \"\\e658\"; }\n@mixin icon-copy { content: \"\\e659\"; }\n@mixin icon-paste { content: \"\\e65a\"; }\n@mixin icon-select-all { content: \"\\e65b\"; }\n@mixin icon-paste-text { content: \"\\e65c\"; }\n@mixin icon-paste-word { content: \"\\e65d\"; }\n@mixin icon-bold { content: \"\\e65e\"; }\n@mixin icon-italic { content: \"\\e65f\"; }\n@mixin icon-underline { content: \"\\e660\"; }\n@mixin icon-subscript { content: \"\\e661\"; }\n@mixin icon-superscript { content: \"\\e662\"; }\n@mixin icon-strike-through { content: \"\\e663\"; }\n@mixin icon-decrease-indent { content: \"\\e664\"; }\n@mixin icon-increase-indent { content: \"\\e665\"; }\n@mixin icon-block-quote { content: \"\\e666\"; }\n@mixin icon-div-container { content: \"\\e667\"; }\n@mixin icon-align-left { content: \"\\e668\"; }\n@mixin icon-center { content: \"\\e669\"; }\n@mixin icon-align-right { content: \"\\e66a\"; }\n@mixin icon-justify { content: \"\\e66b\"; }\n@mixin icon-choice { content: \"\\e66c\"; }\n@mixin icon-inline-choice { content: \"\\e66d\"; }\n@mixin icon-match { content: \"\\e66e\"; }\n@mixin icon-associate { content: \"\\e66f\"; }\n@mixin icon-media { content: \"\\e670\"; }\n@mixin icon-graphic-order { content: \"\\e671\"; }\n@mixin icon-hotspot { content: \"\\e672\"; }\n@mixin icon-graphic-gap { content: \"\\e673\"; }\n@mixin icon-graphic-associate { content: \"\\e674\"; }\n@mixin icon-select-point { content: \"\\e675\"; }\n@mixin icon-pin { content: \"\\e676\"; }\n@mixin icon-import { content: \"\\e677\"; }\n@mixin icon-export { content: \"\\e678\"; }\n@mixin icon-move-item { content: \"\\e679\"; }\n@mixin icon-meta-data { content: \"\\e67a\"; }\n@mixin icon-slider { content: \"\\e67b\"; }\n@mixin icon-summary-report { content: \"\\e67c\"; }\n@mixin icon-text-entry { content: \"\\e67d\"; }\n@mixin icon-extended-text { content: \"\\e67e\"; }\n@mixin icon-eraser { content: \"\\e67f\"; }\n@mixin icon-row { content: \"\\e680\"; }\n@mixin icon-column { content: \"\\e681\"; }\n@mixin icon-text-color { content: \"\\e682\"; }\n@mixin icon-background-color { content: \"\\e683\"; }\n@mixin icon-spell-check { content: \"\\e684\"; }\n@mixin icon-polygon { content: \"\\e685\"; }\n@mixin icon-rectangle { content: \"\\e686\"; }\n@mixin icon-gap-match { content: \"\\e687\"; }\n@mixin icon-order { content: \"\\e688\"; }\n@mixin icon-hottext { content: \"\\e689\"; }\n@mixin icon-free-form { content: \"\\e68a\"; }\n@mixin icon-step-backward { content: \"\\e68b\"; }\n@mixin icon-fast-backward { content: \"\\e68c\"; }\n@mixin icon-backward { content: \"\\e68d\"; }\n@mixin icon-play { content: \"\\e68e\"; }\n@mixin icon-pause { content: \"\\e68f\"; }\n@mixin icon-stop { content: \"\\e690\"; }\n@mixin icon-forward { content: \"\\e691\"; }\n@mixin icon-fast-forward { content: \"\\e692\"; }\n@mixin icon-step-forward { content: \"\\e693\"; }\n@mixin icon-ellipsis { content: \"\\e694\"; }\n@mixin icon-circle { content: \"\\e695\"; }\n@mixin icon-target { content: \"\\e696\"; }\n@mixin icon-guide-arrow { content: \"\\e697\"; }\n@mixin icon-range-slider-right { content: \"\\e698\"; }\n@mixin icon-range-slider-left { content: \"\\e699\"; }\n@mixin icon-radio-checked { content: \"\\e69a\"; }\n@mixin icon-checkbox-indeterminate { content: \"\\e901\"; }\n@mixin icon-checkbox { content: \"\\e69b\"; }\n@mixin icon-checkbox-crossed { content: \"\\e69c\"; }\n@mixin icon-checkbox-checked { content: \"\\e69d\"; }\n@mixin icon-result-nok { content: \"\\e69e\"; }\n@mixin icon-result-ok { content: \"\\e69f\"; }\n@mixin icon-not-evaluated { content: \"\\e6a0\"; }\n@mixin icon-filter { content: \"\\e6a1\"; }\n@mixin icon-translate { content: \"\\e6a2\"; }\n@mixin icon-eject { content: \"\\e6a3\"; }\n@mixin icon-continue { content: \"\\e6a4\"; }\n@mixin icon-radio { content: \"\\e6a5\"; }\n@mixin icon-sphere { content: \"\\e6a6\"; }\n@mixin icon-reset { content: \"\\e6a7\"; }\n@mixin icon-smaller { content: \"\\e6a8\"; }\n@mixin icon-larger { content: \"\\e6a9\"; }\n@mixin icon-clock { content: \"\\e6aa\"; }\n@mixin icon-font { content: \"\\e6ab\"; }\n@mixin icon-maths { content: \"\\e6ac\"; }\n@mixin icon-grip { content: \"\\e6ad\"; }\n@mixin icon-rubric { content: \"\\e6ae\"; }\n@mixin icon-audio { content: \"\\e6af\"; }\n@mixin icon-grip-h { content: \"\\e6b0\"; }\n@mixin icon-magicwand { content: \"\\e6b1\"; }\n@mixin icon-loop { content: \"\\ea2e\"; }\n@mixin icon-calendar { content: \"\\e953\"; }\n@mixin icon-reload { content: \"\\e984\"; }\n@mixin icon-speed { content: \"\\e9a6\"; }\n@mixin icon-volume { content: \"\\ea27\"; }\n@mixin icon-contrast { content: \"\\e9d5\"; }\n@mixin icon-headphones { content: \"\\e910\"; }\n@mixin icon-compress { content: \"\\f066\"; }\n@mixin icon-map-o { content: \"\\f278\"; }\n@mixin icon-variable { content: \"\\e908\"; }\n@mixin icon-tooltip { content: \"\\e90c\"; }\n@mixin icon-globe { content: \"\\e9c9\"; }\n@mixin icon-highlighter { content: \"\\e90f\"; }\n@mixin icon-eliminate-crossed { content: \"\\e911\"; }\n@mixin icon-play-from-here { content: \"\\e912\"; }\n","// buttons and alerts\n$success: rgb(14, 145, 75);\n$info: rgb(14, 93, 145);\n$warning: rgb(216, 174, 91);\n$danger: rgb(201, 96, 67);\n$error: rgb(186, 18, 43);\n$activeInteraction: rgb(195, 90, 19);\n\n// corporate identity\n$logoRed: rgb(186, 18, 43);\n$grey: rgb(173, 161, 148);\n$darkBlueGrey: rgb(164, 187, 197);\n$mediumBlueGrey: rgb(193, 212, 220);\n$lightBlueGrey: rgb(228, 236, 239);\n$brownRedGrey: rgb(154, 137, 123);\n$darkBrown: rgb(111, 99, 89);\n$websiteBorder: rgb(141, 148, 158);\n\n// ui elements, these should only variations of the above\n// naming convention: jQueryUi theme roller -> camelCase\n\n$textColor: #222;\n$textHighlight: white;\n$textSecondary: #737373;\n$shadowColor: rgba(0, 0, 0, 0.25);\n\n$modalBorderColor: #dddfe2;\n$searchInp: #dddfe2;\n\n$uiGeneralContentBg: white();\n$uiGeneralContentBorder: #ddd;\n\n$uiHeaderBg: #d4d5d7;\n\n$uiClickableDefaultBg: #f3f1ef;\n$uiClickableHoverBg: whiten($info, 0.2);\n//$uiClickableActiveBg: $uiHeaderBg;\n$uiClickableActiveBg: whiten($websiteBorder, 0.2);\n//$uiClickableActiveBg: #aaa;\n\n$uiSelectableSelectedBg: whiten($info, 0.2);\n$uiSelectableSelectedHoverBg: whiten($info, 0.1);\n$uiSelectableHoverBg: whiten($info, 0.9);\n\n$uiOverlay: $lightBlueGrey;\n\n// new layout. Implemented now only for review panel\n$uiReviewPanelBg: #f2f2f2;\n$uiReviewPanelTextDisabled: hsl(0, 0%, 45%);\n$uiReviewPanelTextDefault: hsl(0, 0%, 12%);\n$uiReviewPanelBgDefault: $uiGeneralContentBg;\n$uiReviewPanelPrimaryHighlight: hsl(208, 100%, 32%);\n$uiReviewPanelBgInverted: $uiReviewPanelTextDefault;\n$uiReviewPanelTextInverted: $uiGeneralContentBg;\n\n// sidebars etc.\n$canvas: mix(#fff, $grey, 85%);\n\n// colors taken from feedback.scss\n$successBgColor: whiten($success, 0.8);\n$successBorderColor: whiten($success, 0.1);\n\n$infoBgColor: whiten($info, 0.8);\n$infoBorderColor: whiten($info, 0.1);\n\n$warningBgColor: whiten($warning, 0.8);\n$warningBorderColor: whiten($warning, 0.1);\n\n$dangerBgColor: whiten($danger, 0.8);\n$dangerBorderColor: whiten($danger, 0.1);\n\n$errorBgColor: whiten($error, 0.8);\n$errorBorderColor: whiten($error, 0.1);\n\n$darkBar: rgb(51, 51, 51);\n$darkBarTxt: rgb(230, 230, 230);\n$darkBarIcon: rgb(220, 220, 220);\n\n$actionLinkColor: #276d9b;\n$actionLinkHoverColor: #4f83a7;\n\n$colorWheel-01: #c3ba13;\n$colorWheel-02: #84a610;\n$colorWheel-03: #2b8e0e;\n$colorWheel-04: #0f9787;\n$colorWheel-05: #0e5d91;\n$colorWheel-06: #0d2689;\n$colorWheel-07: #400d83;\n$colorWheel-08: #960e7d;\n$colorWheel-09: #ba122b;\n$colorWheel-10: #c34713;\n$colorWheel-11: #c36f13;\n$colorWheel-12: #c39413;\n"]}
1
+ {"version":3,"sources":["../scss/calculator.scss","../../../../scss/inc/_functions.scss","../../../../scss/inc/fonts/_tao-icon-vars.scss","../../../../scss/inc/_colors.scss"],"names":[],"mappings":"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","file":"calculator.css","sourcesContent":["/* Style for the calculator component */\n@import 'inc/bootstrap';\n\n/* font size mixin specific to calculator to use em instead of rem unit */\n@function calc-em-size($em) {\n @return ($em) * 1em;\n}\n@mixin calc-font-size($em) {\n font-size: calc-em-size($em) !important;\n}\n\n.calculator {\n $calculatorPanelBg: $uiClickableDefaultBg;\n $calculatorPanelTxt: $textColor;\n $calculatorKeyboardBg: $uiClickableDefaultBg;\n $calculatorKeyboardHoverBg: $uiClickableActiveBg;\n $calculatorKeyboardSpecialBg: $uiClickableHoverBg;\n $calculatorKeyboardSpecialTxt: $textHighlight;\n $calculatorKeyboardCommandTxt: $info;\n $calculatorKeyboardSwitchBg: $uiClickableDefaultBg;\n $calculatorKeyboardSwitchTxt: $textColor;\n $calculatorKeyboardSwitchSelectedBg: $uiClickableHoverBg;\n $calculatorKeyboardSwitchSelectedTxt: $textHighlight;\n $calculatorKeyboardSwitchBorder: whiten($textColor, 0.5);\n $calculatorKeyboardTxt: $textColor;\n $calculatorScreenBg: $uiGeneralContentBg;\n $calculatorScreenTxt: $textColor;\n $calculatorScreenBorder: $info;\n $calculatorScreenSpecialTxt: $uiClickableHoverBg;\n $calculatorScreenSpecialBg: whiten($uiClickableHoverBg, 0.9);\n $calculatorHistoryBorder: $uiGeneralContentBorder;\n $calculatorHistoryTxt: whiten($textColor, 0.2);\n\n $calculatorFontSizeBtnPrimary: 1.7;\n $calculatorFontSizeBtnSecondary: 1.3;\n $calculatorFontSizeBtnSwitch: 1;\n $calculatorFontSizeBtnSvg: 1;\n $calculatorFontSizeExpression: 1.3;\n $calculatorFontSizeHistory: 1;\n $calculatorLineHeightExpression: calc-em-size($calculatorFontSizeExpression + 0.3);\n $calculatorLineHeightHistory: calc-em-size($calculatorFontSizeHistory + 0.3);\n $calculatorTermSpace: calc-em-size(0.2);\n $calculatorButtonSize: calc-em-size(3.2);\n $calculatorSwitchSize: calc-em-size(3.2);\n $calculatorButtonPadding: 2px;\n $calculatorSwitchPadding: 4px;\n $calculatorScreenPadding: 8px;\n $calculatorBaseFontSize: 12px;\n\n position: relative;\n font-family: monospace, sans-serif;\n font-size: $calculatorBaseFontSize;\n width: 100%;\n height: 100%;\n @include vendor-prefix(display, flex, value, (-ms-, -webkit-, ''));\n @include vendor-prefix(flex-direction, column, property, (-ms-, -webkit-, ''));\n @include vendor-prefix(align-content, stretch, property, (-ms-, -webkit-, ''));\n\n sup,\n sub {\n font-size: 0.75em;\n }\n sup {\n top: -0.5em;\n }\n sub {\n bottom: -0.5em;\n }\n\n [data-type='exponent'] {\n vertical-align: super;\n font-size: 0.75em;\n }\n\n [data-type='variable'] {\n font-weight: bold;\n }\n\n [data-type='function']:not([data-value*='rt']) {\n padding-right: 0.3em;\n }\n\n .screen,\n .input {\n position: relative;\n @include vendor-prefix(flex, 0 0 auto, property, (-ms-, -webkit-, ''));\n }\n\n .focus {\n outline: 2px solid $calculatorScreenBorder;\n }\n\n .keyboard {\n padding: 0 20px 20px;\n position: relative;\n @include vendor-prefix(display, flex, value, (-ms-, -webkit-, ''));\n @include vendor-prefix(flex, 1 1, property, (-ms-, -webkit-, ''));\n }\n\n .calculator-keyboard {\n position: relative;\n @include vendor-prefix(display, flex, value, (-ms-, -webkit-, ''));\n @include vendor-prefix(flex-direction, column, property, (-ms-, -webkit-, ''));\n @include vendor-prefix(align-content, stretch, property, (-ms-, -webkit-, ''));\n background: $calculatorKeyboardBg;\n color: $calculatorKeyboardTxt;\n width: 100%;\n height: auto;\n padding-top: $calculatorScreenPadding;\n\n .row {\n position: relative;\n @include vendor-prefix(display, flex, value, (-ms-, -webkit-, ''));\n @include vendor-prefix(flex-direction, row, property, (-ms-, -webkit-, ''));\n @include vendor-prefix(align-content, stretch, property, (-ms-, -webkit-, ''));\n @include vendor-prefix(flex, 1 1 auto, property, (-ms-, -webkit-, ''));\n width: 100%;\n height: 100%;\n }\n\n .spacer {\n @include vendor-prefix(flex, 1 1 auto, property, (-ms-, -webkit-, ''));\n width: $calculatorButtonSize;\n height: 100%;\n }\n\n span {\n position: relative;\n display: inline-block;\n z-index: 1;\n @include calc-font-size($calculatorFontSizeBtnSecondary);\n }\n\n button {\n position: relative;\n background-color: $calculatorKeyboardBg;\n color: $calculatorKeyboardTxt !important;\n display: inline-block;\n border-radius: 0;\n border: none;\n padding: 0;\n text-align: center;\n text-shadow: none;\n cursor: pointer;\n @include vendor-prefix(flex, 1 1 auto, property, (-ms-, -webkit-, ''));\n width: $calculatorButtonSize;\n height: 100%;\n\n @include calc-font-size(1);\n\n &:not(.switch) {\n &:before {\n content: ' ';\n border-radius: 50%;\n display: inline-block;\n position: absolute;\n z-index: 0;\n top: calc(50% - #{$calculatorButtonSize / 2} + #{$calculatorButtonPadding});\n left: calc(50% - #{$calculatorButtonSize / 2} + #{$calculatorButtonPadding});\n width: calc(#{$calculatorButtonSize} - #{$calculatorButtonPadding * 2});\n height: calc(#{$calculatorButtonSize} - #{$calculatorButtonPadding * 2});\n }\n }\n &:hover {\n &:before {\n background: $calculatorKeyboardHoverBg;\n }\n }\n\n &.disabled {\n visibility: hidden;\n }\n &.switch {\n span {\n color: $calculatorKeyboardSwitchTxt !important;\n border-color: $calculatorKeyboardSwitchBorder !important;\n border-top: 1px solid;\n border-bottom: 1px solid;\n height: auto;\n width: 100%;\n padding: $calculatorSwitchPadding 0.5em;\n @include calc-font-size($calculatorFontSizeBtnSwitch);\n }\n\n &.first {\n span {\n border-left: 1px solid;\n border-top-left-radius: 2px;\n border-bottom-left-radius: 2px;\n }\n }\n &.last {\n span {\n border-right: 1px solid;\n border-top-right-radius: 2px;\n border-bottom-right-radius: 2px;\n }\n }\n\n &:before {\n content: ' ';\n border-radius: 2px;\n display: inline-block;\n position: absolute;\n z-index: 0;\n top: calc(50% - #{$calculatorFontSizeBtnSwitch / 2}em - #{$calculatorSwitchPadding});\n bottom: calc(50% - #{$calculatorFontSizeBtnSwitch / 2}em - #{$calculatorSwitchPadding});\n left: 3px;\n right: 3px;\n }\n }\n &.operand {\n span {\n font-weight: bold;\n @include calc-font-size($calculatorFontSizeBtnPrimary);\n }\n }\n &.command {\n span {\n color: $calculatorKeyboardCommandTxt !important;\n }\n }\n &.execute {\n &:before {\n background: $calculatorKeyboardSpecialBg;\n }\n\n span {\n font-weight: bold;\n color: $calculatorKeyboardSpecialTxt !important;\n @include calc-font-size($calculatorFontSizeBtnPrimary);\n }\n }\n\n svg {\n display: inline-block;\n width: calc-em-size($calculatorFontSizeBtnSvg);\n height: calc-em-size($calculatorFontSizeBtnSvg);\n stroke-width: 0;\n stroke: currentColor;\n fill: currentColor;\n\n &.backspace-outline {\n width: calc-em-size($calculatorFontSizeBtnSvg * 1.2);\n height: calc-em-size($calculatorFontSizeBtnSvg * 1.2);\n }\n }\n }\n }\n\n &.degree {\n .calculator-keyboard {\n button.switch[data-command='degree'] {\n &:before {\n background: $calculatorKeyboardSwitchSelectedBg;\n }\n span {\n color: $calculatorKeyboardSwitchSelectedTxt !important;\n }\n }\n }\n }\n &.radian {\n .calculator-keyboard {\n button.switch[data-command='radian'] {\n &:before {\n background: $calculatorKeyboardSwitchSelectedBg;\n }\n span {\n color: $calculatorKeyboardSwitchSelectedTxt !important;\n }\n }\n }\n }\n\n .simple-screen {\n position: relative;\n width: 100%;\n @include calc-font-size($calculatorFontSizeExpression);\n color: $calculatorScreenTxt;\n font-family: monospace;\n\n .screen-panel {\n position: relative;\n width: 100%;\n overflow: auto;\n word-break: break-all;\n text-align: left;\n padding: $calculatorScreenPadding 8px;\n }\n\n .history {\n @include calc-font-size($calculatorFontSizeHistory);\n border: 1px solid $calculatorHistoryBorder;\n color: $calculatorHistoryTxt;\n height: calc(#{$calculatorScreenPadding * 2} + #{$calculatorLineHeightHistory * 3});\n line-height: $calculatorLineHeightHistory;\n\n .history-line {\n .history-expression {\n &,\n .term {\n font-weight: lighter;\n }\n text-align: left;\n }\n .history-result {\n &:before {\n content: '=';\n display: inline-block;\n font-weight: lighter;\n padding-right: $calculatorTermSpace;\n }\n text-align: right;\n font-weight: bolder;\n }\n }\n }\n .expression {\n @include calc-font-size($calculatorFontSizeExpression);\n background: $calculatorScreenBg;\n color: $calculatorScreenTxt;\n height: calc(#{$calculatorScreenPadding * 2} + #{$calculatorLineHeightExpression * 2});\n line-height: $calculatorLineHeightExpression;\n }\n .term {\n padding: 0;\n\n &.term-operator:not([data-token='POW']):not([data-token='FAC']):not([data-token='NEG']) {\n padding: 0 $calculatorTermSpace;\n }\n &.term-operator[data-token='FAC'],\n &.term-operator[data-token='NEG'] {\n margin-left: -$calculatorTermSpace / 2;\n margin-right: -$calculatorTermSpace / 2;\n }\n &.term-operator[data-token='POS'] {\n display: none;\n }\n &.term-function:not([data-token='SQRT']):not([data-token='CBRT']) {\n padding-right: $calculatorTermSpace;\n }\n &.term-operand {\n font-weight: bold;\n }\n &.term-modificator {\n font-weight: lighter;\n }\n &.term-constant {\n font-style: italic;\n font-weight: bold;\n }\n &.term-variable {\n font-weight: bold;\n color: $calculatorScreenSpecialTxt;\n }\n &.term-variable[data-token='VAR_ANS'] {\n background: $calculatorScreenSpecialBg;\n padding: 0;\n margin: 0 #{$calculatorTermSpace * 2};\n position: relative;\n &::before,\n &::after {\n background: $calculatorScreenSpecialBg;\n content: '';\n border-radius: 50%;\n border: 2px none;\n position: absolute;\n z-index: 0;\n top: 0;\n bottom: 0;\n width: #{$calculatorTermSpace * 2};\n }\n &::before {\n border-left-style: solid;\n border-left-color: $calculatorScreenSpecialTxt;\n left: #{-$calculatorTermSpace};\n }\n &::after {\n border-right-style: solid;\n border-right-color: $calculatorScreenSpecialTxt;\n right: #{-$calculatorTermSpace};\n }\n * {\n position: relative;\n z-index: 1;\n }\n }\n &.term-unknown {\n color: $warning;\n text-decoration: underline wavy $error;\n }\n &.term-elide {\n display: none;\n }\n &.term-error {\n color: $error;\n }\n &.term-syntaxError {\n color: $error;\n text-decoration: underline wavy $error;\n }\n }\n }\n\n &.error .screen .expression {\n background: $errorBgColor;\n }\n}\n\n/*# sourceMappingURL=calculator.css.map */","@mixin iterate-sprite($iconList, $x, $y, $direction, $prefix:'') {\n @each $icon in $iconList {\n #{$prefix}#{$icon} {\n background-position: $x * 1px $y * 1px;\n }\n @if $direction == 'x' {\n $x: $x - 16;\n } @else {\n $y: $y - 16;\n }\n }\n}\n\n/*\nUsage:\n- linear-gradient((color1, color2, color3)) - returns linear-gradient with evenly distributed colors,\n if 3 colors used then the position of each will be 33,33%\n- linear-gradient((color1 0%, color2 30%, color3 80%)) - returns linear-gradient with manually distributed colors,\n first param - color, second - position. Also you can use px or other valid units for set position.\n*/\n@mixin linear-gradient($colorList, $direction: 'to right') {\n $percentage: 0;\n $units: '%';\n $count: length($colorList);\n $increment: 100 / ($count - 1);\n $css: #{$direction + ', '};\n $sep: ', ';\n @each $colorItem in $colorList {\n $color: $colorItem;\n @if (length($colorItem) > 1) {\n $color: nth($colorItem, 1);\n $percentage: nth($colorItem, 2);\n $units: '';\n }\n @if ($percentage >= 100 or index($colorList, $colorItem) == $count) {\n $sep: '';\n }\n $css: #{$css + $color + ' ' + $percentage + $units + $sep};\n $percentage: $percentage + $increment;\n }\n background: linear-gradient( #{$css} );\n}\n\n@mixin grid-unit($span, $numCols: 12, $gutter: 0) {\n $gridPx: 840;\n $rawSpanPx: (($gridPx - ($numCols * $gutter)) / $numCols);\n $spanPx: $rawSpanPx * $span + (($span - 1) * $gutter);\n $spanPercent: widthPerc($spanPx, $gridPx);\n $marginPercent: widthPerc($gutter, $gridPx);\n margin-left: $marginPercent;\n width: $spanPercent;\n}\n\n\n@mixin vendor-prefix($property, $value, $whatToPrefix: property, $prefixes: (-webkit-, -moz-, -ms-, -o-, '')) {\n @if $whatToPrefix == 'property' {\n @each $prefix in $prefixes {\n #{$prefix + $property}: #{$value};\n }\n }\n @else if $whatToPrefix == 'value' {\n @each $prefix in $prefixes {\n #{$property}: #{$prefix + $value};\n }\n }\n}\n@mixin flex-container($wrapBehavior: nowrap, $direction : row) {\n @include vendor-prefix(display, flex, value, (-ms-, -webkit-, ''));\n\n @include vendor-prefix(flex-direction, $direction, property, (-ms-, -webkit-, ''));\n @include vendor-prefix(flex-wrap, $wrapBehavior, property, (-ms-, -webkit-, ''));\n\n @include vendor-prefix(justify-content, flex-start, property, (-webkit-, ''));\n\n @include vendor-prefix(align-content, flex-start, property, (-webkit-, ''));\n\n @include vendor-prefix(align-items, stretch, property, (-webkit-, ''));\n}\n\n@mixin simple-flex-box($width: auto, $minWidth: 1) {\n\n @include vendor-prefix(order, 0, property, (-ms-, -webkit-, ''));\n flex-item-align: stretch;\n -ms-flex-item-align: stretch;\n @include vendor-prefix(align-self, stretch, property, (-webkit-, ''));\n\n // if both, min width and width are set, width will win this conflict\n @if ($width == auto) {\n @if ($minWidth != 1) {\n @include vendor-prefix(flex, 1 1 $minWidth, property, (-ms-, -webkit-, ''));\n }\n @else {\n @include vendor-prefix(flex, 1 1 auto, property, (-ms-, -webkit-, ''));\n // @see https://developer.mozilla.org/en-US/docs/Web/CSS/flex-basis#Values\n // for a discussion auto vs. main-size\n @include vendor-prefix(flex, 1 1, property, (-ms-, -webkit-, ''));\n }\n }\n @else {\n @include vendor-prefix(flex, 0 0 $width, property, (-ms-, -webkit-, ''));\n }\n}\n\n\n@mixin box-shadow($horiz: 1px, $vert: 1px, $blur: 2px, $spread: 0, $color: rgba(0, 0, 0, .2)) {\n @include vendor-prefix(box-shadow, $horiz $vert $blur $spread $color, property);\n}\n\n@mixin simple-border($color: #ddd) {\n border: 1px solid $color;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n}\n\n@mixin border-radius($radius: 2) {\n -moz-border-radius: $radius * 1px;\n -webkit-border-radius: $radius * 1px;\n border-radius: $radius * 1px;\n}\n\n@mixin border-radius-top($radius: 2) {\n -webkit-border-top-left-radius: $radius * 1px;\n -webkit-border-top-right-radius: $radius * 1px;\n -moz-border-radius-topleft: $radius * 1px;\n -moz-border-radius-topright: $radius * 1px;\n border-top-left-radius: $radius * 1px;\n border-top-right-radius: $radius * 1px;\n}\n\n@mixin border-radius-bottom($radius: 2) {\n -webkit-border-bottom-right-radius: $radius * 1px;\n -webkit-border-bottom-left-radius: $radius * 1px;\n -moz-border-radius-bottomright: $radius * 1px;\n -moz-border-radius-bottomleft: $radius * 1px;\n border-bottom-right-radius: $radius * 1px;\n border-bottom-left-radius: $radius * 1px;\n}\n\n@mixin border-radius-left($radius: 2) {\n -webkit-border-top-left-radius: $radius * 1px;\n -webkit-border-bottom-left-radius: $radius * 1px;\n -moz-border-radius-topleft: $radius * 1px;\n -moz-border-radius-bottomleft: $radius * 1px;\n border-top-left-radius: $radius * 1px;\n border-bottom-left-radius: $radius * 1px;\n}\n\n@mixin border-radius-right($radius: 2) {\n -webkit-border-top-right-radius: $radius * 1px;\n -webkit-border-bottom-right-radius: $radius * 1px;\n -moz-border-radius-topright: $radius * 1px;\n -moz-border-radius-bottomright: $radius * 1px;\n border-top-right-radius: $radius * 1px;\n border-bottom-right-radius: $radius * 1px;\n}\n\n@mixin border-radius-top-left($radius: 2) {\n -webkit-border-top-left-radius: $radius * 1px;\n -moz-border-radius-topleft: $radius * 1px;\n border-top-left-radius: $radius * 1px;\n}\n\n@mixin border-radius-top-right($radius: 2) {\n -webkit-border-top-right-radius: $radius * 1px;\n -moz-border-radius-topright: $radius * 1px;\n border-top-right-radius: $radius * 1px;\n}\n\n@mixin border-radius-bottom-right($radius: 2) {\n -webkit-border-bottom-right-radius: $radius * 1px;\n -moz-border-radius-bottomright: $radius * 1px;\n border-bottom-right-radius: $radius * 1px;\n}\n\n@mixin border-radius-bottom-left($radius: 2) {\n -webkit-border-bottom-left-radius: $radius * 1px;\n -moz-border-radius-bottomleft: $radius * 1px;\n border-bottom-left-radius: $radius * 1px;\n}\n\n@mixin border-box() {\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n\n@function whiten($color, $white: 0.3) {\n @return mix(#fff, $color, ($white * 100) * 1%);\n}\n\n@function blacken($color, $black: 0.3) {\n @return mix(#000, $color, ($black * 100) * 1%);\n}\n\n@function widthPerc($colWidth, $context) {\n @return ($colWidth * 100 / $context) * 1%\n}\n\n@function remDist($fontSizePx) {\n @return ($fontSizePx / 10) * 1rem\n}\n\n@function black($alpha: 1) {\n @return (rgba(0, 0, 0, $alpha))\n}\n\n@function white($alpha: 1) {\n @return (rgba(255, 255, 255, $alpha))\n}\n\n@mixin font-size($remPx, $important: false) {\n @if $important == true {\n font-size: ($remPx) * 1px !important;\n font-size: ($remPx / 10) * 1rem !important;\n }\n @else {\n font-size: ($remPx) * 1px;\n font-size: ($remPx / 10) * 1rem;\n }\n}\n\n\n@mixin keyframes($name) {\n @-o-keyframes #{$name} { @content };\n @-moz-keyframes #{$name} { @content };\n @-webkit-keyframes #{$name} { @content };\n @keyframes #{$name} { @content };\n}\n\n\n@mixin animation($value, $type:'') {\n $animation: animation;\n @if $type != '' {\n $animation: $animation + '-' + $type;\n }\n @include vendor-prefix($animation, $value, property);\n}\n\n/// CSS transition mixin to the current selection (apply also vendor prefixes).\n/// See <https://developer.mozilla.org/en-US/docs/Web/CSS/transition> for the values\n///\n/// @param {property} [$type = all] the CSS property to apply the transition to\n/// @param {time} [$duration = .5s] the transition property\n/// @param {timing-function} [$effect = ease-out] the transition property\n@mixin transition($type : all, $duration : 0.5s, $effect : ease-out, $delay : 0s){\n @include vendor-prefix(transition, $type + ', ' + $duration + ', ' + $effect + ', ' + $delay, property);\n}\n\n@mixin fade($duration: 1s){\n\n @include keyframes(fade) {\n 0% {opacity:0;}\n 50% {opacity:1;}\n 100% {opacity:0;}\n }\n\n @include vendor-prefix(animation, fade 1s forwards, property);\n}\n\n@mixin repeat(){\n @include animation(infinite, iteration-count);\n}\n\n@mixin largeHeading() {\n @include font-size(20);\n font-family: $headingFont;\n font-style: normal;\n}\n\n@mixin disableSelect() {\n @include vendor-prefix(user-select, none, property);\n}\n\n/* based on \"visually-hidden\" mixin in LDS for accessibility goals */\n@mixin visuallyHidden() {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(1px, 1px, 1px, 1px);\n margin: 0;\n padding: 0;\n}\n","/* Do not edit */@mixin tao-icon-setup {\n /* use !important to prevent issues with browser extensions that change fonts */\n font-family: 'tao' !important;\n speak: never;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n\n /* Better Font Rendering =========== */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n@mixin icon-japan-incorrect { content: \"\\e91b\"; }\n@mixin icon-japan-correct { content: \"\\e91c\"; }\n@mixin icon-japan-partial { content: \"\\e91d\"; }\n@mixin icon-score-partial { content: \"\\e91a\"; }\n@mixin icon-furigana { content: \"\\e919\"; }\n@mixin icon-add-subsection { content: \"\\e918\"; }\n@mixin icon-info-bare { content: \"\\e923\"; }\n@mixin icon-bookmark-outline { content: \"\\e922\"; }\n@mixin icon-bookmark { content: \"\\e921\"; }\n@mixin icon-indicator { content: \"\\e920\"; }\n@mixin icon-wrap-inline { content: \"\\e915\"; }\n@mixin icon-wrap-left { content: \"\\e916\"; }\n@mixin icon-wrap-right { content: \"\\e917\"; }\n@mixin icon-offline { content: \"\\e913\"; }\n@mixin icon-online { content: \"\\e914\"; }\n@mixin icon-tab { content: \"\\e90d\"; }\n@mixin icon-untab { content: \"\\e90e\"; }\n@mixin icon-multi-select { content: \"\\e90b\"; }\n@mixin icon-clipboard { content: \"\\e90a\"; }\n@mixin icon-filebox { content: \"\\e909\"; }\n@mixin icon-click-to-speak { content: \"\\e907\"; }\n@mixin icon-speech-bubble { content: \"\\f0e5\"; }\n@mixin icon-microphone { content: \"\\f130\"; }\n@mixin icon-microphone-off { content: \"\\f131\"; }\n@mixin icon-disconnect { content: \"\\e905\"; }\n@mixin icon-connect { content: \"\\e906\"; }\n@mixin icon-eliminate { content: \"\\e904\"; }\n@mixin icon-wheelchair { content: \"\\e903\"; }\n@mixin icon-text-marker { content: \"\\e902\"; }\n@mixin icon-unshield { content: \"\\e32a\"; }\n@mixin icon-shield { content: \"\\e8e8\"; }\n@mixin icon-tree { content: \"\\e6b4\"; }\n@mixin icon-home { content: \"\\e6b3\"; }\n@mixin icon-shared-file { content: \"\\e6b2\"; }\n@mixin icon-end-attempt { content: \"\\e603\"; }\n@mixin icon-icon { content: \"\\f1c5\"; }\n@mixin icon-radio-bg { content: \"\\e600\"; }\n@mixin icon-checkbox-bg { content: \"\\e601\"; }\n@mixin icon-tag { content: \"\\e602\"; }\n@mixin icon-style { content: \"\\e604\"; }\n@mixin icon-ownership-transfer { content: \"\\e605\"; }\n@mixin icon-property-advanced { content: \"\\e606\"; }\n@mixin icon-property-add { content: \"\\e607\"; }\n@mixin icon-repository-add { content: \"\\e608\"; }\n@mixin icon-repository-remove { content: \"\\e609\"; }\n@mixin icon-repository { content: \"\\e60a\"; }\n@mixin icon-result-server { content: \"\\e60b\"; }\n@mixin icon-folder { content: \"\\e60c\"; }\n@mixin icon-folder-open { content: \"\\e60d\"; }\n@mixin icon-left { content: \"\\e60e\"; }\n@mixin icon-right { content: \"\\e60f\"; }\n@mixin icon-up { content: \"\\e610\"; }\n@mixin icon-down { content: \"\\e611\"; }\n@mixin icon-undo { content: \"\\e612\"; }\n@mixin icon-redo { content: \"\\e613\"; }\n@mixin icon-screen { content: \"\\e614\"; }\n@mixin icon-laptop { content: \"\\e615\"; }\n@mixin icon-tablet { content: \"\\e616\"; }\n@mixin icon-phone { content: \"\\e617\"; }\n@mixin icon-move { content: \"\\e618\"; }\n@mixin icon-bin { content: \"\\e619\"; }\n@mixin icon-shuffle { content: \"\\e61a\"; }\n@mixin icon-print { content: \"\\e61b\"; }\n@mixin icon-tools { content: \"\\e61c\"; }\n@mixin icon-settings { content: \"\\e61d\"; }\n@mixin icon-video { content: \"\\e61e\"; }\n@mixin icon-find { content: \"\\e61f\"; }\n@mixin icon-image { content: \"\\e620\"; }\n@mixin icon-edit { content: \"\\e621\"; }\n@mixin icon-document { content: \"\\e622\"; }\n@mixin icon-resize-grid { content: \"\\e623\"; }\n@mixin icon-resize { content: \"\\e624\"; }\n@mixin icon-help { content: \"\\e625\"; }\n@mixin icon-mobile-menu { content: \"\\e626\"; }\n@mixin icon-fix { content: \"\\e627\"; }\n@mixin icon-unlock { content: \"\\e628\"; }\n@mixin icon-lock { content: \"\\e629\"; }\n@mixin icon-ul { content: \"\\e62a\"; }\n@mixin icon-ol { content: \"\\e62b\"; }\n@mixin icon-email { content: \"\\e62c\"; }\n@mixin icon-download { content: \"\\e62d\"; }\n@mixin icon-logout { content: \"\\e62e\"; }\n@mixin icon-login { content: \"\\e62f\"; }\n@mixin icon-spinner { content: \"\\e630\"; }\n@mixin icon-preview { content: \"\\e631\"; }\n@mixin icon-external { content: \"\\e632\"; }\n@mixin icon-time { content: \"\\e633\"; }\n@mixin icon-save { content: \"\\e634\"; }\n@mixin icon-warning { content: \"\\e635\"; }\n@mixin icon-add { content: \"\\e636\"; }\n@mixin icon-error { content: \"\\e900\"; }\n@mixin icon-close { content: \"\\e637\"; }\n@mixin icon-success { content: \"\\e638\"; }\n@mixin icon-remove { content: \"\\e639\"; }\n@mixin icon-info { content: \"\\e63a\"; }\n@mixin icon-danger { content: \"\\e63b\"; }\n@mixin icon-users { content: \"\\e63c\"; }\n@mixin icon-user { content: \"\\e63d\"; }\n@mixin icon-test-taker { content: \"\\e63e\"; }\n@mixin icon-test-takers { content: \"\\e63f\"; }\n@mixin icon-item { content: \"\\e640\"; }\n@mixin icon-test { content: \"\\e641\"; }\n@mixin icon-delivery { content: \"\\e642\"; }\n@mixin icon-eye-slash { content: \"\\e643\"; }\n@mixin icon-result { content: \"\\e644\"; }\n@mixin icon-delivery-small { content: \"\\e645\"; }\n@mixin icon-upload { content: \"\\e646\"; }\n@mixin icon-result-small { content: \"\\e647\"; }\n@mixin icon-mobile-preview { content: \"\\e648\"; }\n@mixin icon-extension { content: \"\\e649\"; }\n@mixin icon-desktop-preview { content: \"\\e64a\"; }\n@mixin icon-tablet-preview { content: \"\\e64b\"; }\n@mixin icon-insert-horizontal-line { content: \"\\e64c\"; }\n@mixin icon-table { content: \"\\e64d\"; }\n@mixin icon-anchor { content: \"\\e64e\"; }\n@mixin icon-unlink { content: \"\\e64f\"; }\n@mixin icon-link { content: \"\\e650\"; }\n@mixin icon-right-left { content: \"\\e651\"; }\n@mixin icon-left-right { content: \"\\e652\"; }\n@mixin icon-special-character { content: \"\\e653\"; }\n@mixin icon-source { content: \"\\e654\"; }\n@mixin icon-new-page { content: \"\\e655\"; }\n@mixin icon-templates { content: \"\\e656\"; }\n@mixin icon-cut { content: \"\\e657\"; }\n@mixin icon-replace { content: \"\\e658\"; }\n@mixin icon-copy { content: \"\\e659\"; }\n@mixin icon-paste { content: \"\\e65a\"; }\n@mixin icon-select-all { content: \"\\e65b\"; }\n@mixin icon-paste-text { content: \"\\e65c\"; }\n@mixin icon-paste-word { content: \"\\e65d\"; }\n@mixin icon-bold { content: \"\\e65e\"; }\n@mixin icon-italic { content: \"\\e65f\"; }\n@mixin icon-underline { content: \"\\e660\"; }\n@mixin icon-subscript { content: \"\\e661\"; }\n@mixin icon-superscript { content: \"\\e662\"; }\n@mixin icon-strike-through { content: \"\\e663\"; }\n@mixin icon-decrease-indent { content: \"\\e664\"; }\n@mixin icon-increase-indent { content: \"\\e665\"; }\n@mixin icon-block-quote { content: \"\\e666\"; }\n@mixin icon-div-container { content: \"\\e667\"; }\n@mixin icon-align-left { content: \"\\e668\"; }\n@mixin icon-center { content: \"\\e669\"; }\n@mixin icon-align-right { content: \"\\e66a\"; }\n@mixin icon-justify { content: \"\\e66b\"; }\n@mixin icon-choice { content: \"\\e66c\"; }\n@mixin icon-inline-choice { content: \"\\e66d\"; }\n@mixin icon-match { content: \"\\e66e\"; }\n@mixin icon-associate { content: \"\\e66f\"; }\n@mixin icon-media { content: \"\\e670\"; }\n@mixin icon-graphic-order { content: \"\\e671\"; }\n@mixin icon-hotspot { content: \"\\e672\"; }\n@mixin icon-graphic-gap { content: \"\\e673\"; }\n@mixin icon-graphic-associate { content: \"\\e674\"; }\n@mixin icon-select-point { content: \"\\e675\"; }\n@mixin icon-pin { content: \"\\e676\"; }\n@mixin icon-import { content: \"\\e677\"; }\n@mixin icon-export { content: \"\\e678\"; }\n@mixin icon-move-item { content: \"\\e679\"; }\n@mixin icon-meta-data { content: \"\\e67a\"; }\n@mixin icon-slider { content: \"\\e67b\"; }\n@mixin icon-summary-report { content: \"\\e67c\"; }\n@mixin icon-text-entry { content: \"\\e67d\"; }\n@mixin icon-extended-text { content: \"\\e67e\"; }\n@mixin icon-eraser { content: \"\\e67f\"; }\n@mixin icon-row { content: \"\\e680\"; }\n@mixin icon-column { content: \"\\e681\"; }\n@mixin icon-text-color { content: \"\\e682\"; }\n@mixin icon-background-color { content: \"\\e683\"; }\n@mixin icon-spell-check { content: \"\\e684\"; }\n@mixin icon-polygon { content: \"\\e685\"; }\n@mixin icon-rectangle { content: \"\\e686\"; }\n@mixin icon-gap-match { content: \"\\e687\"; }\n@mixin icon-order { content: \"\\e688\"; }\n@mixin icon-hottext { content: \"\\e689\"; }\n@mixin icon-free-form { content: \"\\e68a\"; }\n@mixin icon-step-backward { content: \"\\e68b\"; }\n@mixin icon-fast-backward { content: \"\\e68c\"; }\n@mixin icon-backward { content: \"\\e68d\"; }\n@mixin icon-play { content: \"\\e68e\"; }\n@mixin icon-pause { content: \"\\e68f\"; }\n@mixin icon-stop { content: \"\\e690\"; }\n@mixin icon-forward { content: \"\\e691\"; }\n@mixin icon-fast-forward { content: \"\\e692\"; }\n@mixin icon-step-forward { content: \"\\e693\"; }\n@mixin icon-ellipsis { content: \"\\e694\"; }\n@mixin icon-circle { content: \"\\e695\"; }\n@mixin icon-target { content: \"\\e696\"; }\n@mixin icon-guide-arrow { content: \"\\e697\"; }\n@mixin icon-range-slider-right { content: \"\\e698\"; }\n@mixin icon-range-slider-left { content: \"\\e699\"; }\n@mixin icon-radio-checked { content: \"\\e69a\"; }\n@mixin icon-checkbox-indeterminate { content: \"\\e901\"; }\n@mixin icon-checkbox { content: \"\\e69b\"; }\n@mixin icon-checkbox-crossed { content: \"\\e69c\"; }\n@mixin icon-checkbox-checked { content: \"\\e69d\"; }\n@mixin icon-result-nok { content: \"\\e69e\"; }\n@mixin icon-result-ok { content: \"\\e69f\"; }\n@mixin icon-not-evaluated { content: \"\\e6a0\"; }\n@mixin icon-filter { content: \"\\e6a1\"; }\n@mixin icon-translate { content: \"\\e6a2\"; }\n@mixin icon-eject { content: \"\\e6a3\"; }\n@mixin icon-continue { content: \"\\e6a4\"; }\n@mixin icon-radio { content: \"\\e6a5\"; }\n@mixin icon-sphere { content: \"\\e6a6\"; }\n@mixin icon-reset { content: \"\\e6a7\"; }\n@mixin icon-smaller { content: \"\\e6a8\"; }\n@mixin icon-larger { content: \"\\e6a9\"; }\n@mixin icon-clock { content: \"\\e6aa\"; }\n@mixin icon-font { content: \"\\e6ab\"; }\n@mixin icon-maths { content: \"\\e6ac\"; }\n@mixin icon-grip { content: \"\\e6ad\"; }\n@mixin icon-rubric { content: \"\\e6ae\"; }\n@mixin icon-audio { content: \"\\e6af\"; }\n@mixin icon-grip-h { content: \"\\e6b0\"; }\n@mixin icon-magicwand { content: \"\\e6b1\"; }\n@mixin icon-loop { content: \"\\ea2e\"; }\n@mixin icon-calendar { content: \"\\e953\"; }\n@mixin icon-reload { content: \"\\e984\"; }\n@mixin icon-speed { content: \"\\e9a6\"; }\n@mixin icon-volume { content: \"\\ea27\"; }\n@mixin icon-contrast { content: \"\\e9d5\"; }\n@mixin icon-headphones { content: \"\\e910\"; }\n@mixin icon-compress { content: \"\\f066\"; }\n@mixin icon-map-o { content: \"\\f278\"; }\n@mixin icon-variable { content: \"\\e908\"; }\n@mixin icon-tooltip { content: \"\\e90c\"; }\n@mixin icon-globe { content: \"\\e9c9\"; }\n@mixin icon-highlighter { content: \"\\e90f\"; }\n@mixin icon-eliminate-crossed { content: \"\\e911\"; }\n@mixin icon-play-from-here { content: \"\\e912\"; }\n","// buttons and alerts\n$success: rgb(14, 145, 75);\n$info: rgb(14, 93, 145);\n$warning: rgb(216, 174, 91);\n$danger: rgb(201, 96, 67);\n$error: rgb(186, 18, 43);\n$activeInteraction: rgb(195, 90, 19);\n\n// corporate identity\n$logoRed: rgb(186, 18, 43);\n$grey: rgb(173, 161, 148);\n$darkBlueGrey: rgb(164, 187, 197);\n$mediumBlueGrey: rgb(193, 212, 220);\n$lightBlueGrey: rgb(228, 236, 239);\n$brownRedGrey: rgb(154, 137, 123);\n$darkBrown: rgb(111, 99, 89);\n$websiteBorder: rgb(141, 148, 158);\n\n// ui elements, these should only variations of the above\n// naming convention: jQueryUi theme roller -> camelCase\n\n$textColor: #222;\n$textHighlight: white;\n$textSecondary: #737373;\n$shadowColor: rgba(0, 0, 0, 0.25);\n\n$modalBorderColor: #dddfe2;\n$searchInp: #dddfe2;\n\n$uiGeneralContentBg: white();\n$uiGeneralContentBorder: #ddd;\n\n$uiHeaderBg: #d4d5d7;\n\n$uiClickableDefaultBg: #f3f1ef;\n$uiClickableHoverBg: whiten($info, 0.2);\n//$uiClickableActiveBg: $uiHeaderBg;\n$uiClickableActiveBg: whiten($websiteBorder, 0.2);\n//$uiClickableActiveBg: #aaa;\n\n$uiSelectableSelectedBg: whiten($info, 0.2);\n$uiSelectableSelectedHoverBg: whiten($info, 0.1);\n$uiSelectableHoverBg: whiten($info, 0.9);\n\n$uiOverlay: $lightBlueGrey;\n\n// new layout. Implemented now only for review panel\n$uiReviewPanelBg: #f2f2f2;\n$uiReviewPanelTextDisabled: hsl(0, 0%, 45%);\n$uiReviewPanelTextDefault: hsl(0, 0%, 12%);\n$uiReviewPanelBgDefault: $uiGeneralContentBg;\n$uiReviewPanelPrimaryHighlight: hsl(208, 100%, 32%);\n$uiReviewPanelBgInverted: $uiReviewPanelTextDefault;\n$uiReviewPanelTextInverted: $uiGeneralContentBg;\n\n// sidebars etc.\n$canvas: mix(#fff, $grey, 85%);\n\n// colors taken from feedback.scss\n$successBgColor: whiten($success, 0.8);\n$successBorderColor: whiten($success, 0.1);\n\n$infoBgColor: whiten($info, 0.8);\n$infoBorderColor: whiten($info, 0.1);\n\n$warningBgColor: whiten($warning, 0.8);\n$warningBorderColor: whiten($warning, 0.1);\n\n$dangerBgColor: whiten($danger, 0.8);\n$dangerBorderColor: whiten($danger, 0.1);\n\n$errorBgColor: whiten($error, 0.8);\n$errorBorderColor: whiten($error, 0.1);\n\n$darkBar: rgb(51, 51, 51);\n$darkBarTxt: rgb(230, 230, 230);\n$darkBarIcon: rgb(220, 220, 220);\n\n$actionLinkColor: #276d9b;\n$actionLinkHoverColor: #4f83a7;\n\n$colorWheel-01: #c3ba13;\n$colorWheel-02: #84a610;\n$colorWheel-03: #2b8e0e;\n$colorWheel-04: #0f9787;\n$colorWheel-05: #0e5d91;\n$colorWheel-06: #0d2689;\n$colorWheel-07: #400d83;\n$colorWheel-08: #960e7d;\n$colorWheel-09: #ba122b;\n$colorWheel-10: #c34713;\n$colorWheel-11: #c36f13;\n$colorWheel-12: #c39413;\n"]}
@@ -20,7 +20,7 @@ define(['lodash', 'ui/maths/calculator/calculatorComponent', 'ui/maths/calculato
20
20
  * along with this program; if not, write to the Free Software
21
21
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22
22
  *
23
- * Copyright (c) 2018 Open Assessment Technologies SA ;
23
+ * Copyright (c) 2018-2023 Open Assessment Technologies SA ;
24
24
  */
25
25
 
26
26
  /**
@@ -32,15 +32,19 @@ define(['lodash', 'ui/maths/calculator/calculatorComponent', 'ui/maths/calculato
32
32
  * @returns {dynamicComponent}
33
33
  */
34
34
  function defaultCalculatorFactory(config) {
35
- var defaultPluginsConfig = {};
36
- if (config && config.keyboardLayout) {
35
+ const defaultPluginsConfig = {};
36
+ const {
37
+ keyboardLayout,
38
+ screenLayout
39
+ } = config || {};
40
+ if (keyboardLayout) {
37
41
  defaultPluginsConfig.templateKeyboard = {
38
- layout: config.keyboardLayout
42
+ layout: keyboardLayout
39
43
  };
40
44
  }
41
- if (config && config.screenLayout) {
45
+ if (screenLayout) {
42
46
  defaultPluginsConfig.simpleScreen = {
43
- layout: config.screenLayout
47
+ layout: screenLayout
44
48
  };
45
49
  }
46
50
  config = _.merge({
@@ -1,7 +1,6 @@
1
- define(['jquery', 'lodash', 'util/namespace', 'ui/maths/calculator/core/plugin', 'ui/maths/calculator/core/labels', 'handlebars', 'lib/handlebars/helpers'], function ($$1, _, nsHelper, pluginFactory, labels, Handlebars, Helpers0) { 'use strict';
1
+ define(['jquery', 'util/namespace', 'ui/maths/calculator/core/plugin', 'ui/maths/calculator/core/labels', 'handlebars', 'lib/handlebars/helpers'], function ($$1, nsHelper, pluginFactory, labels, Handlebars, Helpers0) { 'use strict';
2
2
 
3
3
  $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;
4
- _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;
5
4
  nsHelper = nsHelper && Object.prototype.hasOwnProperty.call(nsHelper, 'default') ? nsHelper['default'] : nsHelper;
6
5
  pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;
7
6
  labels = labels && Object.prototype.hasOwnProperty.call(labels, 'default') ? labels['default'] : labels;
@@ -29,8 +28,8 @@ define(['jquery', 'lodash', 'util/namespace', 'ui/maths/calculator/core/plugin',
29
28
  buffer += "</span></button>\n <button class=\"key command\" data-command=\"clear\"><span>";
30
29
  stack1 = ((stack1 = ((stack1 = (depth0 && depth0.labels)),stack1 == null || stack1 === false ? stack1 : stack1.CLEAR)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1);
31
30
  if(stack1 || stack1 === 0) { buffer += stack1; }
32
- buffer += "</span></button>\n <button class=\"key command\" data-command=\"clearAll\"><span>";
33
- stack1 = ((stack1 = ((stack1 = (depth0 && depth0.labels)),stack1 == null || stack1 === false ? stack1 : stack1.CLEARALL)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1);
31
+ buffer += "</span></button>\n <button class=\"key command\" data-command=\"reset\"><span>";
32
+ stack1 = ((stack1 = ((stack1 = (depth0 && depth0.labels)),stack1 == null || stack1 === false ? stack1 : stack1.RESET)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1);
34
33
  if(stack1 || stack1 === 0) { buffer += stack1; }
35
34
  buffer += "</span></button>\n </div>\n <div class=\"row\">\n <button class=\"key operator\" data-command=\"term\" data-param=\"CBRT\"><span>";
36
35
  stack1 = ((stack1 = ((stack1 = (depth0 && depth0.labels)),stack1 == null || stack1 === false ? stack1 : stack1.CBRT)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1);
@@ -90,9 +89,9 @@ define(['jquery', 'lodash', 'util/namespace', 'ui/maths/calculator/core/plugin',
90
89
  stack1 = ((stack1 = ((stack1 = (depth0 && depth0.labels)),stack1 == null || stack1 === false ? stack1 : stack1.EXECUTE)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1);
91
90
  if(stack1 || stack1 === 0) { buffer += stack1; }
92
91
  buffer += "</span></button>\n <button class=\"key operator\" data-command=\"term\" data-param=\"ADD\"><span>";
93
- stack1 = ((stack1 = ((stack1 = (depth0 && depth0.labels)),stack1 == null || stack1 === false ? stack1 : stack1.SUB)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1);
92
+ stack1 = ((stack1 = ((stack1 = (depth0 && depth0.labels)),stack1 == null || stack1 === false ? stack1 : stack1.ADD)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1);
94
93
  if(stack1 || stack1 === 0) { buffer += stack1; }
95
- buffer += "</span></button>\n </div>\n</div>";
94
+ buffer += "</span></button>\n </div>\n</div>\n";
96
95
  return buffer;
97
96
  });
98
97
  function defaultKeyboardTpl(data, options, asString) {
@@ -115,10 +114,10 @@ define(['jquery', 'lodash', 'util/namespace', 'ui/maths/calculator/core/plugin',
115
114
  * along with this program; if not, write to the Free Software
116
115
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
117
116
  *
118
- * Copyright (c) 2018 Open Assessment Technologies SA ;
117
+ * Copyright (c) 2018-2023 Open Assessment Technologies SA ;
119
118
  */
120
- var pluginName = 'templateKeyboard';
121
- var defaultConfig = {
119
+ const pluginName = 'templateKeyboard';
120
+ const defaultConfig = {
122
121
  layout: defaultKeyboardTpl
123
122
  };
124
123
  var templateKeyboard = pluginFactory({
@@ -126,26 +125,26 @@ define(['jquery', 'lodash', 'util/namespace', 'ui/maths/calculator/core/plugin',
126
125
  /**
127
126
  * Called when the plugin should be initialized.
128
127
  */
129
- init: function init() {
128
+ init() {
130
129
  // required by the plugin factory to validate this plugin
131
130
  },
132
131
  /**
133
132
  * Called when the plugin should be rendered.
134
133
  */
135
- render: function render() {
136
- var calculator = this.getCalculator();
137
- var areaBroker = calculator.getAreaBroker();
138
- var pluginConfig = this.getConfig();
139
- var templateConfig = _.merge({
140
- labels: labels
134
+ render() {
135
+ const calculator = this.getCalculator();
136
+ const areaBroker = calculator.getAreaBroker();
137
+ const pluginConfig = this.getConfig();
138
+ const templateConfig = Object.assign({
139
+ labels
141
140
  }, pluginConfig);
142
- if (!_.isFunction(pluginConfig.layout)) {
141
+ if ('function' !== typeof pluginConfig.layout) {
143
142
  throw new TypeError('The keyboard plugin requires a template to render!');
144
143
  }
145
- this.$layout = $$1(pluginConfig.layout(templateConfig)).on(nsHelper.namespaceAll('click', pluginName), '.key', function () {
146
- var $key = $$1(this).closest('.key');
147
- var command = $key.data('command');
148
- var param = $key.data('param');
144
+ this.$layout = $$1(pluginConfig.layout(templateConfig)).on(nsHelper.namespaceAll('click', pluginName), '.key', function onClick() {
145
+ const $key = $$1(this).closest('.key');
146
+ const command = $key.data('command');
147
+ const param = $key.data('param');
149
148
  if (command) {
150
149
  calculator.useCommand(command, param);
151
150
  }
@@ -155,13 +154,12 @@ define(['jquery', 'lodash', 'util/namespace', 'ui/maths/calculator/core/plugin',
155
154
  /**
156
155
  * Called when the plugin is destroyed. Mostly when the host is destroyed itself.
157
156
  */
158
- destroy: function destroy() {
159
- var calculator = this.getCalculator();
157
+ destroy() {
160
158
  if (this.$layout) {
161
- this.$layout.off('.' + pluginName).remove();
159
+ this.$layout.off(`.${pluginName}`).remove();
162
160
  this.$layout = null;
163
161
  }
164
- calculator.off('.' + pluginName);
162
+ this.getCalculator().off(`.${pluginName}`);
165
163
  }
166
164
  }, defaultConfig);
167
165