@testgorilla/tgo-typing-test 1.0.0 → 2.0.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 (134) hide show
  1. package/.eslintrc.json +46 -0
  2. package/jest.config.ts +21 -0
  3. package/ng-package.json +15 -0
  4. package/package.json +7 -22
  5. package/project.json +36 -0
  6. package/src/lib/components/tgo-typing-replay-input/tgo-typing-replay-input.component.html +30 -0
  7. package/src/lib/components/tgo-typing-replay-input/tgo-typing-replay-input.component.spec.ts +250 -0
  8. package/src/lib/components/tgo-typing-replay-input/tgo-typing-replay-input.component.ts +47 -0
  9. package/src/lib/components/tgo-typing-test/tgo-typing-test.component.html +72 -0
  10. package/src/lib/components/tgo-typing-test/tgo-typing-test.component.spec.ts +699 -0
  11. package/src/lib/components/tgo-typing-test/tgo-typing-test.component.ts +287 -0
  12. package/src/lib/helpers/config.ts +28 -0
  13. package/src/lib/helpers/constants/default-config.ts +103 -0
  14. package/src/lib/helpers/controllers/input-controller.ts +710 -0
  15. package/src/lib/helpers/controllers/quotes-controller.ts +183 -0
  16. package/src/lib/helpers/observables/banner-event.ts +18 -0
  17. package/src/lib/helpers/observables/config-event.ts +31 -0
  18. package/src/lib/helpers/observables/timer-event.ts +18 -0
  19. package/src/lib/helpers/states/active-page.ts +9 -0
  20. package/src/lib/helpers/states/composition.ts +29 -0
  21. package/src/lib/helpers/states/page-transition.ts +9 -0
  22. package/src/lib/helpers/states/slow-timer.ts +16 -0
  23. package/src/lib/helpers/states/test-active.ts +9 -0
  24. package/src/lib/helpers/states/time.ts +13 -0
  25. package/src/lib/helpers/test/caps-warning.ts +50 -0
  26. package/src/lib/helpers/test/caret.ts +92 -0
  27. package/src/lib/helpers/test/custom-text.ts +73 -0
  28. package/src/lib/helpers/test/english-punctuation.ts +38 -0
  29. package/src/lib/helpers/test/focus.ts +39 -0
  30. package/src/lib/helpers/test/manual-restart-tracker.ts +13 -0
  31. package/src/lib/helpers/test/out-of-focus.ts +19 -0
  32. package/src/lib/helpers/test/replay.ts +265 -0
  33. package/src/lib/helpers/test/test-input.ts +320 -0
  34. package/src/lib/helpers/test/test-logic.ts +1039 -0
  35. package/src/lib/helpers/test/test-state.ts +17 -0
  36. package/src/lib/helpers/test/test-stats.ts +442 -0
  37. package/src/lib/helpers/test/test-timer.ts +209 -0
  38. package/src/lib/helpers/test/test-ui.ts +370 -0
  39. package/src/lib/helpers/test/test-words.ts +72 -0
  40. package/src/lib/helpers/test/timer-progress.ts +16 -0
  41. package/src/lib/helpers/test/tts.ts +42 -0
  42. package/src/lib/helpers/test/weak-spot.ts +74 -0
  43. package/src/lib/helpers/test/wordset.ts +109 -0
  44. package/src/lib/styles/animations.scss +101 -0
  45. package/src/lib/styles/caret.scss +108 -0
  46. package/src/lib/styles/core.scss +498 -0
  47. package/src/lib/styles/index.scss +19 -0
  48. package/src/lib/styles/inputs.scss +290 -0
  49. package/src/lib/styles/popups.scss +1311 -0
  50. package/src/lib/styles/test.scss +1008 -0
  51. package/src/lib/styles/z_media-queries.scss +848 -0
  52. package/src/lib/types/types.d.ts +731 -0
  53. package/src/lib/utils/misc.ts +776 -0
  54. package/src/test-setup.ts +20 -0
  55. package/tsconfig.json +16 -0
  56. package/tsconfig.lib.json +14 -0
  57. package/tsconfig.lib.prod.json +9 -0
  58. package/tsconfig.spec.json +11 -0
  59. package/esm2022/index.mjs +0 -3
  60. package/esm2022/lib/components/tgo-typing-replay-input/tgo-typing-replay-input.component.mjs +0 -45
  61. package/esm2022/lib/components/tgo-typing-test/tgo-typing-test.component.mjs +0 -299
  62. package/esm2022/lib/helpers/config.mjs +0 -24
  63. package/esm2022/lib/helpers/constants/default-config.mjs +0 -103
  64. package/esm2022/lib/helpers/controllers/input-controller.mjs +0 -586
  65. package/esm2022/lib/helpers/controllers/quotes-controller.mjs +0 -118
  66. package/esm2022/lib/helpers/observables/config-event.mjs +0 -16
  67. package/esm2022/lib/helpers/observables/timer-event.mjs +0 -16
  68. package/esm2022/lib/helpers/states/active-page.mjs +0 -8
  69. package/esm2022/lib/helpers/states/composition.mjs +0 -20
  70. package/esm2022/lib/helpers/states/page-transition.mjs +0 -8
  71. package/esm2022/lib/helpers/states/slow-timer.mjs +0 -15
  72. package/esm2022/lib/helpers/states/test-active.mjs +0 -8
  73. package/esm2022/lib/helpers/states/time.mjs +0 -11
  74. package/esm2022/lib/helpers/test/caps-warning.mjs +0 -50
  75. package/esm2022/lib/helpers/test/caret.mjs +0 -80
  76. package/esm2022/lib/helpers/test/custom-text.mjs +0 -59
  77. package/esm2022/lib/helpers/test/english-punctuation.mjs +0 -29
  78. package/esm2022/lib/helpers/test/focus.mjs +0 -35
  79. package/esm2022/lib/helpers/test/manual-restart-tracker.mjs +0 -11
  80. package/esm2022/lib/helpers/test/out-of-focus.mjs +0 -14
  81. package/esm2022/lib/helpers/test/replay.mjs +0 -217
  82. package/esm2022/lib/helpers/test/test-input.mjs +0 -264
  83. package/esm2022/lib/helpers/test/test-logic.mjs +0 -927
  84. package/esm2022/lib/helpers/test/test-state.mjs +0 -13
  85. package/esm2022/lib/helpers/test/test-stats.mjs +0 -342
  86. package/esm2022/lib/helpers/test/test-timer.mjs +0 -207
  87. package/esm2022/lib/helpers/test/test-ui.mjs +0 -341
  88. package/esm2022/lib/helpers/test/test-words.mjs +0 -69
  89. package/esm2022/lib/helpers/test/timer-progress.mjs +0 -15
  90. package/esm2022/lib/helpers/test/weak-spot.mjs +0 -65
  91. package/esm2022/lib/helpers/test/wordset.mjs +0 -100
  92. package/esm2022/lib/utils/misc.mjs +0 -673
  93. package/esm2022/testgorilla-tgo-typing-test.mjs +0 -5
  94. package/fesm2022/testgorilla-tgo-typing-test.mjs +0 -4707
  95. package/fesm2022/testgorilla-tgo-typing-test.mjs.map +0 -1
  96. package/lib/components/tgo-typing-replay-input/tgo-typing-replay-input.component.d.ts +0 -14
  97. package/lib/components/tgo-typing-test/tgo-typing-test.component.d.ts +0 -54
  98. package/lib/helpers/config.d.ts +0 -98
  99. package/lib/helpers/constants/default-config.d.ts +0 -3
  100. package/lib/helpers/controllers/input-controller.d.ts +0 -16
  101. package/lib/helpers/controllers/quotes-controller.d.ts +0 -20
  102. package/lib/helpers/observables/config-event.d.ts +0 -5
  103. package/lib/helpers/observables/timer-event.d.ts +0 -4
  104. package/lib/helpers/states/active-page.d.ts +0 -2
  105. package/lib/helpers/states/composition.d.ts +0 -10
  106. package/lib/helpers/states/page-transition.d.ts +0 -2
  107. package/lib/helpers/states/slow-timer.d.ts +0 -3
  108. package/lib/helpers/states/test-active.d.ts +0 -2
  109. package/lib/helpers/states/time.d.ts +0 -3
  110. package/lib/helpers/test/caps-warning.d.ts +0 -5
  111. package/lib/helpers/test/caret.d.ts +0 -11
  112. package/lib/helpers/test/custom-text.d.ts +0 -16
  113. package/lib/helpers/test/english-punctuation.d.ts +0 -3
  114. package/lib/helpers/test/focus.d.ts +0 -7
  115. package/lib/helpers/test/manual-restart-tracker.d.ts +0 -3
  116. package/lib/helpers/test/out-of-focus.d.ts +0 -4
  117. package/lib/helpers/test/replay.d.ts +0 -20
  118. package/lib/helpers/test/test-input.d.ts +0 -86
  119. package/lib/helpers/test/test-logic.d.ts +0 -25
  120. package/lib/helpers/test/test-state.d.ts +0 -7
  121. package/lib/helpers/test/test-stats.d.ts +0 -92
  122. package/lib/helpers/test/test-timer.d.ts +0 -6
  123. package/lib/helpers/test/test-ui.d.ts +0 -27
  124. package/lib/helpers/test/test-words.d.ts +0 -23
  125. package/lib/helpers/test/timer-progress.d.ts +0 -3
  126. package/lib/helpers/test/weak-spot.d.ts +0 -3
  127. package/lib/helpers/test/wordset.d.ts +0 -7
  128. package/lib/utils/misc.d.ts +0 -81
  129. /package/{assets → src/assets}/typing-test-languages/english.json +0 -0
  130. /package/{assets → src/assets}/typing-test-languages/english_punctuation.json +0 -0
  131. /package/{assets → src/assets}/typing-test-languages/quotes/english_version_1.json +0 -0
  132. /package/{assets → src/assets}/typing-test-languages/quotes/english_version_2.json +0 -0
  133. /package/{assets → src/assets}/typing-test-languages/quotes/filtered_sources.json +0 -0
  134. /package/{index.d.ts → src/index.ts} +0 -0
@@ -0,0 +1,101 @@
1
+ @keyframes loader {
2
+ 0% {
3
+ width: 0;
4
+ left: 0;
5
+ }
6
+
7
+ 50% {
8
+ width: 100%;
9
+ left: 0;
10
+ }
11
+
12
+ 100% {
13
+ width: 0;
14
+ left: 100%;
15
+ }
16
+ }
17
+
18
+ @keyframes caretFlashSmooth {
19
+ 0%,
20
+ 100% {
21
+ opacity: 0;
22
+ }
23
+
24
+ 50% {
25
+ opacity: 1;
26
+ }
27
+ }
28
+
29
+ @keyframes caretFlashHard {
30
+ 0%,
31
+ 50% {
32
+ opacity: 1;
33
+ }
34
+
35
+ 51%,
36
+ 100% {
37
+ opacity: 0;
38
+ }
39
+ }
40
+
41
+ @keyframes flashKey {
42
+ from {
43
+ color: $--bg-color;
44
+ background-color: $--main-color;
45
+ border-color: $--main-color;
46
+ }
47
+
48
+ to {
49
+ color: $--sub-color;
50
+ background-color: $--bg-color;
51
+ border-color: $--sub-color;
52
+ }
53
+ }
54
+
55
+ @keyframes shake {
56
+ 0% {
57
+ transform: translate(2px, 0) rotate(0deg);
58
+ }
59
+ 50% {
60
+ transform: translate(-2px, 0) rotate(0deg);
61
+ }
62
+ 100% {
63
+ transform: translate(2px, 0) rotate(0deg);
64
+ }
65
+ }
66
+
67
+ @keyframes flashHighlight {
68
+ 0% {
69
+ background-color: $--bg-color;
70
+ }
71
+ 10% {
72
+ background-color: $--main-color;
73
+ }
74
+ 40% {
75
+ background-color: $--main-color;
76
+ }
77
+ 100% {
78
+ background-color: $--bg-color;
79
+ }
80
+ }
81
+
82
+ @keyframes rgb-bg {
83
+ 0% {
84
+ background: hsl(120, 39%, 49%);
85
+ }
86
+ 20% {
87
+ background: hsl(192, 48%, 48%);
88
+ }
89
+ 40% {
90
+ background: hsl(264, 90%, 58%);
91
+ }
92
+ 60% {
93
+ background: hsl(357, 89%, 50%);
94
+ }
95
+ 80% {
96
+ background: hsl(46, 100%, 51%);
97
+ }
98
+ 100% {
99
+ background: hsl(120, 39%, 49%);
100
+ }
101
+ }
@@ -0,0 +1,108 @@
1
+ #caret {
2
+ height: 1.5rem;
3
+ background: $--caret-color;
4
+ animation: caretFlashSmooth 1s infinite;
5
+ position: absolute;
6
+ border-radius: $--roundness;
7
+ transform-origin: top left;
8
+ }
9
+
10
+ #paceCaret {
11
+ height: 1.5rem;
12
+ background: $--sub-color;
13
+ opacity: 0.5;
14
+ position: absolute;
15
+ border-radius: $--roundness;
16
+ transform-origin: top left;
17
+ width: 2px;
18
+ }
19
+
20
+ #caret,
21
+ #paceCaret {
22
+ &.off {
23
+ width: 0;
24
+ }
25
+
26
+ &.default {
27
+ width: 2px;
28
+ }
29
+
30
+ &.block {
31
+ width: 0.7em;
32
+ border-radius: 0;
33
+ z-index: -1;
34
+ }
35
+
36
+ &.outline {
37
+ @extend #caret, .block;
38
+ animation-name: none;
39
+ background: transparent;
40
+ border: 1px solid $--caret-color;
41
+ }
42
+
43
+ &.block,
44
+ &.outline,
45
+ &.underline {
46
+ margin-left: 0.1rem;
47
+
48
+ &.size15 {
49
+ margin-left: 0.15rem;
50
+ }
51
+
52
+ &.size2 {
53
+ margin-left: 0.2rem;
54
+ }
55
+
56
+ &.size3 {
57
+ margin-left: 0.25em;
58
+ }
59
+ &.size4 {
60
+ margin-left: 0.3rem;
61
+ }
62
+ }
63
+
64
+ &.underline {
65
+ height: 2px;
66
+ width: 0.8em;
67
+ margin-top: 1.3em;
68
+
69
+ &.size125 {
70
+ margin-top: 1.8em;
71
+ }
72
+
73
+ &.size15 {
74
+ margin-top: 2.1em;
75
+ }
76
+
77
+ &.size2 {
78
+ margin-top: 2.7em;
79
+ }
80
+
81
+ &.size3 {
82
+ margin-top: 3.9em;
83
+ }
84
+ &.size4 {
85
+ margin-top: 5em;
86
+ }
87
+ }
88
+
89
+ &.size125 {
90
+ transform: scale(1.25);
91
+ }
92
+
93
+ &.size15 {
94
+ transform: scale(1.45);
95
+ }
96
+
97
+ &.size2 {
98
+ transform: scale(1.9);
99
+ }
100
+
101
+ &.size3 {
102
+ transform: scale(2.8);
103
+ }
104
+
105
+ &.size4 {
106
+ transform: scale(3.7);
107
+ }
108
+ }
@@ -0,0 +1,498 @@
1
+ @import url("https://fonts.googleapis.com/css2?family=Fira+Code:wght@300;400;700&display=swap");
2
+ @import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@600&display=swap");
3
+ @import url("https://fonts.googleapis.com/css2?family=Inconsolata:wght@300;400;700&display=swap");
4
+ @import url("https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@300;400;700&display=swap");
5
+ @import url("https://fonts.googleapis.com/css2?family=Source+Code+Pro:wght@300;400;700&display=swap");
6
+ @import url("https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;700&display=swap");
7
+ @import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;700&display=swap");
8
+ @import url("https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap");
9
+ @import url("https://fonts.googleapis.com/css2?family=Titillium+Web:wght@300;400;700&display=swap");
10
+ @import url("https://fonts.googleapis.com/css2?family=Lexend+Deca:wght@300;400;700&display=swap");
11
+ @import url("https://fonts.googleapis.com/css2?family=Oxygen:wght@300;400;700&display=swap");
12
+ @import url("https://fonts.googleapis.com/css2?family=Nunito:wght@300;400;700&display=swap");
13
+ @import url("https://fonts.googleapis.com/css2?family=Itim:wght@300;400;700&display=swap");
14
+ @import url("https://fonts.googleapis.com/css2?family=Comfortaa:wght@300;400;700&display=swap");
15
+ @import url("https://fonts.googleapis.com/css2?family=Coming+Soon:wght@300;400;700&display=swap");
16
+ @import url("https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:wght@300;400;700&display=swap");
17
+ @import url("https://fonts.googleapis.com/css2?family=Lato:wght@300;400;700&display=swap");
18
+ @import url("https://fonts.googleapis.com/css2?family=Lalezar:wght@300;400;700&display=swap");
19
+ @import url("https://fonts.googleapis.com/css2?family=Noto+Naskh+Arabic:wght@300;400;700&display=swap");
20
+ @import url("https://fonts.googleapis.com/css2?family=Vazirmatn:wght@300;400;700&display=swap");
21
+
22
+ $--roundness: 0.5rem;
23
+ $--font: "Roboto Mono", "Vazirmatn";
24
+ ::ng-deep {
25
+ :host {
26
+ scroll-padding-top: 2rem;
27
+ font-weight: 600;
28
+ }
29
+
30
+ ::placeholder {
31
+ color: $--sub-color;
32
+ opacity: 1;
33
+ /* Firefox */
34
+ }
35
+
36
+ #app {
37
+ display: grid;
38
+ grid-template-columns: auto minmax(0, 1000px) auto;
39
+ justify-items: center;
40
+ &.wide125 {
41
+ grid-template-columns: auto minmax(0, 1250px) auto;
42
+ }
43
+ &.wide150 {
44
+ grid-template-columns: auto minmax(0, 1500px) auto;
45
+ }
46
+ &.wide200 {
47
+ grid-template-columns: auto minmax(0, 2000px) auto;
48
+ }
49
+ &.widemax {
50
+ grid-template-columns: auto minmax(0, 1fr) auto;
51
+ }
52
+ }
53
+
54
+ #nocss {
55
+ display: none !important;
56
+ pointer-events: none;
57
+ }
58
+
59
+ .ffscroll {
60
+ scrollbar-width: thin;
61
+ scrollbar-color: $--sub-color transparent;
62
+ }
63
+
64
+ html {
65
+ @extend .ffscroll;
66
+ overflow-y: scroll;
67
+ }
68
+
69
+ a {
70
+ display: inline-block;
71
+ color: $--sub-color;
72
+ transition: 0.25s;
73
+ &:hover {
74
+ color: $--text-color;
75
+ }
76
+ }
77
+
78
+ a[data-link] * {
79
+ pointer-events: none;
80
+ }
81
+
82
+ a.button {
83
+ text-decoration: none;
84
+ }
85
+
86
+ #centerContent {
87
+ margin: 0;
88
+ padding: 0;
89
+ min-height: 300px;
90
+ font-family: $--font;
91
+ color: $--text-color;
92
+ overflow-x: hidden;
93
+ border: 1px solid $--border-color;
94
+ }
95
+
96
+ .customBackground {
97
+ content: "";
98
+ width: 100vw;
99
+ height: 100vh;
100
+ position: fixed;
101
+ left: 0;
102
+ top: 0;
103
+ background-position: center center;
104
+ background-repeat: no-repeat;
105
+ z-index: -999;
106
+ justify-content: center;
107
+ align-items: center;
108
+ display: flex;
109
+ }
110
+
111
+ #backgroundLoader {
112
+ height: 3px;
113
+ position: fixed;
114
+ width: 100%;
115
+ background: $--main-color;
116
+ animation: loader 2s cubic-bezier(0.38, 0.16, 0.57, 0.82) infinite;
117
+ z-index: 9999;
118
+ }
119
+
120
+ label.checkbox {
121
+ span {
122
+ display: block;
123
+ font-size: 0.76rem;
124
+ color: $--sub-color;
125
+ margin-left: 1.5rem;
126
+ }
127
+
128
+ input {
129
+ margin: 0 !important;
130
+ cursor: pointer;
131
+ width: 0;
132
+ height: 0;
133
+ display: none;
134
+ user-select: none;
135
+
136
+ & ~ .customTextCheckbox {
137
+ width: 1.25rem;
138
+ height: 1.25rem;
139
+ background: $--sub-alt-color;
140
+ border-radius: calc($--roundness / 2);
141
+ display: inline-grid;
142
+ margin: 0 0.5rem 0 0;
143
+ user-select: none;
144
+ cursor: pointer;
145
+ & .check {
146
+ opacity: 0;
147
+ color: $--main-color;
148
+ transition: 0.125s;
149
+ }
150
+ }
151
+
152
+ &:checked ~ .customTextCheckbox .check {
153
+ opacity: 1;
154
+ }
155
+ }
156
+ }
157
+
158
+ #centerContent {
159
+ display: grid;
160
+ grid-auto-flow: row;
161
+ padding-left: 2rem;
162
+ padding-right: 2rem;
163
+ padding-top: 10rem;
164
+ padding-bottom: 2rem;
165
+ gap: 2rem;
166
+ align-items: center;
167
+ z-index: 999;
168
+ grid-template-rows: auto 1fr auto;
169
+ width: 100%;
170
+ transition: padding-top 0.125s;
171
+ &.wide125 {
172
+ max-width: 1250px;
173
+ }
174
+ &.wide150 {
175
+ max-width: 1500px;
176
+ }
177
+ &.wide200 {
178
+ max-width: 2000px;
179
+ }
180
+ &.widemax {
181
+ max-width: unset;
182
+ }
183
+ }
184
+
185
+ #key {
186
+ color: $--bg-color;
187
+ background-color: $--sub-color;
188
+ padding: 0.3rem;
189
+ margin: 0rem 0.5rem;
190
+ border-radius: 0.1rem;
191
+ display: inline-block;
192
+ font-size: 0.7rem;
193
+ line-height: 0.7rem;
194
+ }
195
+
196
+ .pageLoading {
197
+ display: grid;
198
+ justify-content: center;
199
+ }
200
+
201
+ .pageLoading,
202
+ .pageAccount {
203
+ .preloader {
204
+ text-align: center;
205
+ justify-self: center;
206
+ display: grid;
207
+ .barWrapper {
208
+ display: grid;
209
+ gap: 1rem;
210
+ grid-row: 1;
211
+ grid-column: 1;
212
+ .bar {
213
+ width: 20rem;
214
+ height: 0.5rem;
215
+ background: $--sub-alt-color;
216
+ border-radius: $--roundness;
217
+ .fill {
218
+ height: 100%;
219
+ width: 0%;
220
+ background: $--main-color;
221
+ border-radius: $--roundness;
222
+ }
223
+ }
224
+ }
225
+ .icon {
226
+ grid-row: 1;
227
+ grid-column: 1;
228
+ font-size: 2rem;
229
+ color: $--main-color;
230
+ margin-bottom: 1rem;
231
+ }
232
+ }
233
+ }
234
+
235
+ .devIndicator {
236
+ position: fixed;
237
+ font-size: 3rem;
238
+ color: $--sub-color;
239
+ opacity: 0.25;
240
+ z-index: -1;
241
+
242
+ &.tl {
243
+ top: 2rem;
244
+ left: 2rem;
245
+ }
246
+
247
+ &.tr {
248
+ top: 2rem;
249
+ right: 2rem;
250
+ }
251
+
252
+ &.bl {
253
+ bottom: 2rem;
254
+ left: 2rem;
255
+ }
256
+
257
+ &.br {
258
+ bottom: 2rem;
259
+ right: 2rem;
260
+ }
261
+ }
262
+
263
+ * {
264
+ box-sizing: border-box;
265
+ }
266
+
267
+ .hidden {
268
+ display: none !important;
269
+ }
270
+
271
+ .invisible {
272
+ opacity: 0 !important;
273
+ pointer-events: none !important;
274
+ }
275
+
276
+ .button {
277
+ color: $--text-color;
278
+ cursor: pointer;
279
+ transition: background 0.125s, color 0.125s;
280
+ padding: 0.5rem;
281
+ border-radius: $--roundness;
282
+ background: $--sub-alt-color;
283
+ text-align: center;
284
+ user-select: none;
285
+ -webkit-user-select: none;
286
+ align-content: center;
287
+ height: min-content;
288
+ height: -moz-min-content;
289
+ line-height: 1.25rem;
290
+ appearance: none;
291
+ border: none;
292
+ font-family: inherit;
293
+ font-size: 1rem;
294
+
295
+ &.active {
296
+ background: $--main-color;
297
+ color: $--bg-color;
298
+ &:hover {
299
+ background: $--text-color;
300
+ }
301
+ &:active {
302
+ background: $--sub-color;
303
+ color: $--bg-color;
304
+ }
305
+ }
306
+
307
+ &.disabled {
308
+ opacity: 0.33;
309
+ cursor: default;
310
+ pointer-events: none;
311
+ &:hover {
312
+ background: $--text-color;
313
+ outline: none;
314
+ }
315
+ &:active {
316
+ background: $--sub-color;
317
+ color: $--bg-color;
318
+ }
319
+ }
320
+
321
+ &:hover {
322
+ color: $--bg-color;
323
+ background: $--text-color;
324
+ outline: none;
325
+ }
326
+ &:focus {
327
+ outline: 2px solid $--text-color;
328
+ }
329
+ &:active {
330
+ background: $--sub-color;
331
+ color: $--bg-color;
332
+ }
333
+ }
334
+
335
+ .textButton {
336
+ color: $--sub-color;
337
+ cursor: pointer;
338
+ transition: background 0.125s, color 0.125s;
339
+ padding: 0.5rem;
340
+ border-radius: $--roundness;
341
+ text-align: center;
342
+ user-select: none;
343
+ -webkit-user-select: none;
344
+ align-content: center;
345
+ height: min-content;
346
+ height: -moz-min-content;
347
+ line-height: 1.25rem;
348
+ appearance: none;
349
+ border: none;
350
+ font-family: inherit;
351
+ font-size: 1rem;
352
+ width: max-content;
353
+ width: -moz-max-content;
354
+ display: grid;
355
+ grid-auto-flow: column;
356
+ gap: 0.25rem;
357
+ text-decoration: none;
358
+
359
+ .fas,
360
+ .far {
361
+ display: grid;
362
+ place-content: center center;
363
+ }
364
+
365
+ &.active {
366
+ color: $--main-color;
367
+ &:hover {
368
+ color: $--text-color;
369
+ }
370
+ &:active {
371
+ color: $--sub-color;
372
+ }
373
+ }
374
+
375
+ &.disabled {
376
+ opacity: 0.33;
377
+ cursor: default;
378
+ pointer-events: none;
379
+ &:hover {
380
+ background: $--text-color;
381
+ outline: none;
382
+ }
383
+ &:active {
384
+ background: $--sub-color;
385
+ color: $--bg-color;
386
+ }
387
+ }
388
+
389
+ &:hover {
390
+ color: $--text-color;
391
+ }
392
+ &:focus {
393
+ color: $--text-color;
394
+ outline: none;
395
+ }
396
+ &:active {
397
+ color: $--sub-color;
398
+ }
399
+ }
400
+
401
+ .scrollToTopButton {
402
+ bottom: 2rem;
403
+ right: 2rem;
404
+ position: fixed;
405
+ font-size: 2rem;
406
+ width: 4rem;
407
+ height: 4rem;
408
+ text-align: center;
409
+ line-height: 4rem;
410
+ background: $--sub-alt-color;
411
+ border-radius: 99rem;
412
+ z-index: 99;
413
+ cursor: pointer;
414
+ color: $--sub-color;
415
+ transition: 0.25s;
416
+ &:hover {
417
+ background: $--text-color;
418
+ color: $--bg-color;
419
+ }
420
+ }
421
+
422
+ .inputAndIndicator {
423
+ input {
424
+ width: 100%;
425
+ }
426
+ position: relative;
427
+ .statusIndicator {
428
+ width: 2.25rem;
429
+ height: 2.25rem;
430
+ position: absolute;
431
+ right: 0;
432
+ top: 0;
433
+ display: grid;
434
+ grid-template-columns: 2.25rem;
435
+ grid-template-rows: 2.25rem;
436
+ place-items: center center;
437
+ cursor: pointer;
438
+
439
+ .indicator {
440
+ grid-column: 1/2;
441
+ grid-row: 1/2;
442
+ &.level-1 {
443
+ color: $--error-color;
444
+ }
445
+ &.level0 {
446
+ color: $--sub-color;
447
+ }
448
+ &.level1 {
449
+ color: $--main-color;
450
+ }
451
+ }
452
+ }
453
+ }
454
+
455
+ .configureAPI.button {
456
+ position: fixed;
457
+ left: 2rem;
458
+ bottom: 2rem;
459
+ display: grid;
460
+ grid-auto-flow: column;
461
+ gap: 0.5rem;
462
+ text-decoration: none;
463
+ z-index: 999999999;
464
+ }
465
+
466
+ .avatar {
467
+ transition: opacity 0.125s, filter 0.125s, webkit-filter 0.125s;
468
+ width: 1.25rem;
469
+ height: 1.25rem;
470
+ border-radius: 100%;
471
+ background-position: center center;
472
+ background-size: contain;
473
+ background-repeat: no-repeat;
474
+ }
475
+
476
+ .badge {
477
+ background: $--sub-color;
478
+ color: $--text-color;
479
+ border-radius: calc($--roundness / 2);
480
+ user-select: none;
481
+ display: grid;
482
+ grid-template-columns: max-content auto;
483
+ align-items: baseline;
484
+ .fas,
485
+ .far {
486
+ margin-right: 0.3rem;
487
+ margin-left: 0.3rem;
488
+ margin-top: 0.15rem;
489
+ margin-bottom: 0.15rem;
490
+ font-size: 0.9em;
491
+ }
492
+ .text {
493
+ margin-top: 0.15rem;
494
+ margin-bottom: 0.15rem;
495
+ margin-right: 0.3rem;
496
+ }
497
+ }
498
+ }
@@ -0,0 +1,19 @@
1
+
2
+ $--bg-color: #F6F6F6;
3
+ $--main-color: #888888;
4
+ $--caret-color: #dc322f;
5
+ $--sub-color: #888888;
6
+ $--sub-alt-color: #e2d8be;
7
+ $--text-color: #181819;
8
+ $--error-color: #d33682;
9
+ $--error-extra-color: #9b225c;
10
+ $--colorful-error-color: #d33682;
11
+ $--colorful-error-extra-color: #9b225c;
12
+ $--border-color: #E0E0E0;
13
+ $--timer-color: rgba(0, 0, 0, 0.5);
14
+
15
+ $--roundness: 0.5rem;
16
+ $--font: "Roboto Mono", "Vazirmatn";
17
+
18
+ @import "animations", "caret", "core", "inputs",
19
+ "popups", "test", "z_media-queries";