scrabble-solver 2.10.7 → 2.10.9

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 (148) hide show
  1. package/babel.config.js +1 -1
  2. package/lerna.json +1 -1
  3. package/package.json +3 -3
  4. package/packages/configs/package-lock.json +4 -4
  5. package/packages/configs/package.json +3 -3
  6. package/packages/constants/package-lock.json +2 -2
  7. package/packages/constants/package.json +1 -1
  8. package/packages/dictionaries/package-lock.json +2 -2
  9. package/packages/dictionaries/package.json +4 -4
  10. package/packages/logger/package-lock.json +2 -2
  11. package/packages/logger/package.json +1 -1
  12. package/packages/scrabble-solver/.next/BUILD_ID +1 -1
  13. package/packages/scrabble-solver/.next/build-manifest.json +15 -21
  14. package/packages/scrabble-solver/.next/cache/.tsbuildinfo +1 -1
  15. package/packages/scrabble-solver/.next/cache/eslint/.cache_8dgz12 +1 -1
  16. package/packages/scrabble-solver/.next/cache/next-server.js.nft.json +1 -1
  17. package/packages/scrabble-solver/.next/cache/webpack/client-production/0.pack +0 -0
  18. package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack +0 -0
  19. package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/0.pack +0 -0
  20. package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/index.pack +0 -0
  21. package/packages/scrabble-solver/.next/cache/webpack/server-production/0.pack +0 -0
  22. package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack +0 -0
  23. package/packages/scrabble-solver/.next/images-manifest.json +1 -1
  24. package/packages/scrabble-solver/.next/next-server.js.nft.json +1 -1
  25. package/packages/scrabble-solver/.next/prerender-manifest.json +1 -1
  26. package/packages/scrabble-solver/.next/required-server-files.json +1 -1
  27. package/packages/scrabble-solver/.next/routes-manifest.json +1 -1
  28. package/packages/scrabble-solver/.next/server/chunks/176.js +4603 -395
  29. package/packages/scrabble-solver/.next/server/chunks/664.js +27 -2414
  30. package/packages/scrabble-solver/.next/server/chunks/859.js +29 -1
  31. package/packages/scrabble-solver/.next/server/font-loader-manifest.js +1 -0
  32. package/packages/scrabble-solver/.next/server/font-loader-manifest.json +6 -0
  33. package/packages/scrabble-solver/.next/server/middleware-build-manifest.js +1 -1
  34. package/packages/scrabble-solver/.next/server/pages/404.html +2 -2
  35. package/packages/scrabble-solver/.next/server/pages/404.js.nft.json +1 -1
  36. package/packages/scrabble-solver/.next/server/pages/500.html +1 -12
  37. package/packages/scrabble-solver/.next/server/pages/_app.js +176 -13
  38. package/packages/scrabble-solver/.next/server/pages/_app.js.nft.json +1 -1
  39. package/packages/scrabble-solver/.next/server/pages/_document.js +1 -1
  40. package/packages/scrabble-solver/.next/server/pages/_document.js.nft.json +1 -1
  41. package/packages/scrabble-solver/.next/server/pages/_error.js +133 -17
  42. package/packages/scrabble-solver/.next/server/pages/_error.js.nft.json +1 -1
  43. package/packages/scrabble-solver/.next/server/pages/api/solve.js +16 -0
  44. package/packages/scrabble-solver/.next/server/pages/index.html +1 -9
  45. package/packages/scrabble-solver/.next/server/pages/index.js +52 -165
  46. package/packages/scrabble-solver/.next/server/pages/index.js.nft.json +1 -1
  47. package/packages/scrabble-solver/.next/server/pages/index.json +1 -1
  48. package/packages/scrabble-solver/.next/server/pages-manifest.json +1 -1
  49. package/packages/scrabble-solver/.next/static/chunks/main-74c4d6b2b5c362f3.js +1 -0
  50. package/packages/scrabble-solver/.next/static/chunks/pages/{404-67383848027ec49b.js → 404-d5ff00df1c687977.js} +1 -1
  51. package/packages/scrabble-solver/.next/static/chunks/pages/_app-52cb288dc680bdfe.js +28 -0
  52. package/packages/scrabble-solver/.next/static/chunks/pages/index-5c2544930e46c5ce.js +1 -0
  53. package/packages/scrabble-solver/.next/static/chunks/webpack-6ef43a8d4a395f49.js +1 -0
  54. package/packages/scrabble-solver/.next/static/css/ec4e47a6b1866fe5.css +1 -0
  55. package/packages/scrabble-solver/.next/static/css/f65b7b2a74f57c1c.css +2 -0
  56. package/packages/scrabble-solver/.next/static/fZRsz4P0gQ8Wgb9jP8eap/_buildManifest.js +1 -0
  57. package/packages/scrabble-solver/.next/trace +55 -55
  58. package/packages/scrabble-solver/package-lock.json +255 -122
  59. package/packages/scrabble-solver/package.json +11 -9
  60. package/packages/scrabble-solver/src/components/Badge/Badge.module.scss +1 -1
  61. package/packages/scrabble-solver/src/components/Board/Board.module.scss +14 -0
  62. package/packages/scrabble-solver/src/components/Board/Board.tsx +117 -19
  63. package/packages/scrabble-solver/src/components/Board/BoardPure.tsx +7 -15
  64. package/packages/scrabble-solver/src/components/Board/components/Actions/Actions.module.scss +64 -0
  65. package/packages/scrabble-solver/src/components/Board/components/Actions/Actions.tsx +68 -0
  66. package/packages/scrabble-solver/src/components/Board/components/Actions/index.ts +1 -0
  67. package/packages/scrabble-solver/src/components/Board/components/Cell/Cell.module.scss +22 -165
  68. package/packages/scrabble-solver/src/components/Board/components/Cell/Cell.tsx +0 -37
  69. package/packages/scrabble-solver/src/components/Board/components/Cell/CellPure.tsx +5 -75
  70. package/packages/scrabble-solver/src/components/Board/components/index.ts +1 -0
  71. package/packages/scrabble-solver/src/components/Board/hooks/useGrid.ts +16 -16
  72. package/packages/scrabble-solver/src/components/Button/Button.module.scss +3 -3
  73. package/packages/scrabble-solver/src/components/Checkbox/Checkbox.tsx +1 -4
  74. package/packages/scrabble-solver/src/components/Dictionary/Dictionary.tsx +28 -30
  75. package/packages/scrabble-solver/src/components/DictionaryInput/DictionaryInput.tsx +3 -0
  76. package/packages/scrabble-solver/src/components/Key/Key.module.scss +1 -1
  77. package/packages/scrabble-solver/src/components/LogoSplashScreen/LogoSplashScreen.module.scss +1 -1
  78. package/packages/scrabble-solver/src/components/Modal/Modal.module.scss +4 -2
  79. package/packages/scrabble-solver/src/components/Rack/Rack.module.scss +5 -0
  80. package/packages/scrabble-solver/src/components/Radio/Radio.tsx +1 -4
  81. package/packages/scrabble-solver/src/components/Results/Results.module.scss +2 -2
  82. package/packages/scrabble-solver/src/components/SeoMessage/SeoMessage.tsx +19 -0
  83. package/packages/scrabble-solver/src/components/SeoMessage/index.ts +1 -0
  84. package/packages/scrabble-solver/src/components/Solver/Solver.module.scss +0 -5
  85. package/packages/scrabble-solver/src/components/Solver/Solver.tsx +1 -1
  86. package/packages/scrabble-solver/src/components/Solver/components/EmptyState/EmptyState.module.scss +1 -1
  87. package/packages/scrabble-solver/src/components/Solver/components/ResultCandidatePicker/ResultCandidatePicker.module.scss +9 -2
  88. package/packages/scrabble-solver/src/components/Solver/components/ResultCandidatePicker/ResultCandidatePicker.tsx +2 -1
  89. package/packages/scrabble-solver/src/components/Tile/Tile.module.scss +23 -11
  90. package/packages/scrabble-solver/src/components/Tile/Tile.tsx +26 -9
  91. package/packages/scrabble-solver/src/components/Tile/TilePure.tsx +9 -4
  92. package/packages/scrabble-solver/src/components/Tooltip/Tooltip.module.scss +7 -7
  93. package/packages/scrabble-solver/src/components/index.ts +1 -0
  94. package/packages/scrabble-solver/src/hooks/useLocalStorage/useLocalStorageBoard.ts +6 -3
  95. package/packages/scrabble-solver/src/hooks/useLocalStorage/useLocalStorageConfigId.ts +6 -3
  96. package/packages/scrabble-solver/src/hooks/useLocalStorage/useLocalStorageLocale.ts +6 -3
  97. package/packages/scrabble-solver/src/hooks/useLocalStorage/useLocalStorageRack.ts +6 -3
  98. package/packages/scrabble-solver/src/i18n/de.json +1 -0
  99. package/packages/scrabble-solver/src/i18n/en.json +1 -0
  100. package/packages/scrabble-solver/src/i18n/es.json +1 -0
  101. package/packages/scrabble-solver/src/i18n/fa.json +1 -0
  102. package/packages/scrabble-solver/src/i18n/fr.json +1 -0
  103. package/packages/scrabble-solver/src/i18n/pl.json +1 -0
  104. package/packages/scrabble-solver/src/icons/Flag.svg +2 -2
  105. package/packages/scrabble-solver/src/icons/FlagFill.svg +4 -0
  106. package/packages/scrabble-solver/src/icons/Square.svg +4 -0
  107. package/packages/scrabble-solver/src/icons/SquareFill.svg +4 -0
  108. package/packages/scrabble-solver/src/icons/index.ts +3 -0
  109. package/packages/scrabble-solver/src/modals/RemainingTilesModal/components/Character/Character.module.scss +1 -1
  110. package/packages/scrabble-solver/src/modals/ResultsModal/ResultsModal.module.scss +1 -1
  111. package/packages/scrabble-solver/src/modals/SettingsModal/components/AutoGroupTilesSetting/AutoGroupTilesSetting.tsx +1 -2
  112. package/packages/scrabble-solver/src/modals/SettingsModal/components/ConfigSetting/ConfigSetting.module.scss +1 -1
  113. package/packages/scrabble-solver/src/modals/SettingsModal/components/ConfigSetting/ConfigSetting.tsx +1 -2
  114. package/packages/scrabble-solver/src/modals/SettingsModal/components/LocaleSetting/LocaleSetting.module.scss +14 -24
  115. package/packages/scrabble-solver/src/modals/SettingsModal/components/LocaleSetting/LocaleSetting.tsx +1 -2
  116. package/packages/scrabble-solver/src/pages/_app.tsx +9 -5
  117. package/packages/scrabble-solver/src/pages/index.module.scss +1 -2
  118. package/packages/scrabble-solver/src/pages/index.tsx +10 -8
  119. package/packages/scrabble-solver/src/parameters/index.ts +12 -0
  120. package/packages/scrabble-solver/src/state/slices/boardSlice.ts +5 -5
  121. package/packages/scrabble-solver/src/styles/animations.scss +10 -0
  122. package/packages/scrabble-solver/src/styles/global.scss +2 -2
  123. package/packages/scrabble-solver/src/styles/mixins.scss +60 -3
  124. package/packages/scrabble-solver/src/styles/variables.scss +43 -33
  125. package/packages/scrabble-solver/src/types/index.ts +1 -0
  126. package/packages/solver/package-lock.json +2 -2
  127. package/packages/solver/package.json +5 -5
  128. package/packages/types/package-lock.json +3 -3
  129. package/packages/types/package.json +2 -2
  130. package/packages/word-definitions/package-lock.json +2 -2
  131. package/packages/word-definitions/package.json +2 -2
  132. package/packages/word-lists/package-lock.json +2 -2
  133. package/packages/word-lists/package.json +2 -2
  134. package/packages/scrabble-solver/.next/server/chunks/210.js +0 -122
  135. package/packages/scrabble-solver/.next/server/chunks/579.js +0 -3925
  136. package/packages/scrabble-solver/.next/server/chunks/676.js +0 -32
  137. package/packages/scrabble-solver/.next/static/6RggBFm8kHrh-k1-CG3um/_buildManifest.js +0 -1
  138. package/packages/scrabble-solver/.next/static/chunks/490-d29992f1c264d70e.js +0 -5
  139. package/packages/scrabble-solver/.next/static/chunks/509-6ad4482d4351452c.js +0 -1
  140. package/packages/scrabble-solver/.next/static/chunks/main-f11614d8aa7ee555.js +0 -1
  141. package/packages/scrabble-solver/.next/static/chunks/pages/_app-c58cfa832b76cc87.js +0 -24
  142. package/packages/scrabble-solver/.next/static/chunks/pages/index-146039f501e49c08.js +0 -1
  143. package/packages/scrabble-solver/.next/static/chunks/webpack-59c5c889f52620d6.js +0 -1
  144. package/packages/scrabble-solver/.next/static/css/4482c4a0064d3807.css +0 -1
  145. package/packages/scrabble-solver/.next/static/css/78e42ad01f580f64.css +0 -1
  146. package/packages/scrabble-solver/.next/static/css/9d1013ec684361b9.css +0 -1
  147. package/packages/scrabble-solver/src/components/Board/components/Cell/Button.tsx +0 -32
  148. /package/packages/scrabble-solver/.next/static/{6RggBFm8kHrh-k1-CG3um → fZRsz4P0gQ8Wgb9jP8eap}/_ssgManifest.js +0 -0
@@ -3,6 +3,7 @@ import Head from 'next/head';
3
3
  import { FunctionComponent } from 'react';
4
4
  import { Provider } from 'react-redux';
5
5
 
6
+ import { SeoMessage } from 'components';
6
7
  import { createAppStore } from 'state';
7
8
 
8
9
  import 'styles/global.scss';
@@ -10,10 +11,16 @@ import 'styles/global.scss';
10
11
  const DESCRIPTION =
11
12
  // eslint-disable-next-line max-len
12
13
  'Scrabble Solver 2 - Free and open-source analysis tool for Scrabble and Literaki. Quickly find top scoring words using given letters and board state. Available in English, French, German, Polish & Spanish.';
14
+
13
15
  const KEYWORDS = [
16
+ 'Scrabble Solver',
14
17
  'Scrabble',
15
18
  'Solver',
19
+ 'Board',
16
20
  'Open-source',
21
+ 'Open',
22
+ 'Source',
23
+ 'Word',
17
24
  'Finder',
18
25
  'Cheating',
19
26
  'Literaki',
@@ -22,6 +29,7 @@ const KEYWORDS = [
22
29
  'Français',
23
30
  'Deutsch',
24
31
  'Polski',
32
+ 'فارسی',
25
33
  'Español',
26
34
  'SOWPODS',
27
35
  'TWL06',
@@ -55,11 +63,7 @@ const App: FunctionComponent<AppProps> = ({ Component, pageProps }) => (
55
63
  </Head>
56
64
 
57
65
  <Provider store={store}>
58
- <p style={{ fontSize: 0 }}>
59
- Scrabble Solver 2 is a free and open-source analysis tool for Scrabble and Literaki. Quickly find top scoring
60
- words using given letters and board state. Available in English, French, German, Polish & Spanish. Source code
61
- is available on GitHub - contributions are welcome!
62
- </p>
66
+ <SeoMessage />
63
67
  <Component {...pageProps} />
64
68
  </Provider>
65
69
  </>
@@ -6,8 +6,7 @@
6
6
  height: 100%;
7
7
  opacity: 0;
8
8
  overflow: auto;
9
- transition: var(--transition);
10
- transition-duration: var(--transition--duration--long);
9
+ transition: var(--transition--long);
11
10
 
12
11
  &.initialized {
13
12
  opacity: 1;
@@ -76,6 +76,10 @@ const Index: FunctionComponent<Props> = ({ version }) => {
76
76
  }
77
77
  }, []);
78
78
 
79
+ if (!isClient) {
80
+ return null;
81
+ }
82
+
79
83
  return (
80
84
  <>
81
85
  <SvgFontFix />
@@ -100,14 +104,12 @@ const Index: FunctionComponent<Props> = ({ version }) => {
100
104
  </div>
101
105
  </div>
102
106
 
103
- {isClient && (
104
- <Solver
105
- className={styles.solver}
106
- height={solverHeight}
107
- width={solverWidth}
108
- onShowResults={() => setShowResults(true)}
109
- />
110
- )}
107
+ <Solver
108
+ className={styles.solver}
109
+ height={solverHeight}
110
+ width={solverWidth}
111
+ onShowResults={() => setShowResults(true)}
112
+ />
111
113
  </div>
112
114
 
113
115
  <MenuModal
@@ -6,6 +6,9 @@ export const BREAKPOINTS = {
6
6
  xl: 1400,
7
7
  };
8
8
 
9
+ export const EASE_OUT_CUBIC = 'cubic-bezier(0.33, 1, 0.68, 1)'; // https://easings.net/#easeOutCubic
10
+ export const TRANSITION = 'var(--transition)';
11
+
9
12
  export const GITHUB_PROJECT_URL = 'https://github.com/kamilmielnik/scrabble-solver';
10
13
 
11
14
  export const INITIALIZATION_DURATION = 100;
@@ -21,6 +24,7 @@ export const COLOR_YELLOW = '#efe3ae';
21
24
  export const COMPONENTS_SPACING = 40;
22
25
  export const COMPONENTS_SPACING_SMALL = 20;
23
26
 
27
+ export const BOARD_CELL_ACTIONS_OFFSET = 3;
24
28
  export const BOARD_CELL_BORDER_WIDTH = 1;
25
29
  export const BOARD_TILE_FONT_SIZE_MIN = 14;
26
30
  export const BOARD_TILE_FONT_SIZE_POINTS_MIN = 10;
@@ -72,3 +76,11 @@ export const REMAINING_TILES_TILE_SIZE = 50;
72
76
  export const RESULTS_HEADER_HEIGHT = 34;
73
77
  export const RESULTS_ITEM_HEIGHT = 40;
74
78
  export const RESULTS_INPUT_HEIGHT = 40;
79
+
80
+ export const TILE_APPEAR_DURATION = 200;
81
+
82
+ export const TILE_APPEAR_KEYFRAMES = [
83
+ { transform: 'translateY(0)' },
84
+ { transform: 'translateY(10%)', offset: 0.5 },
85
+ { transform: 'translateY(0)' },
86
+ ];
@@ -19,6 +19,11 @@ const boardSlice = createSlice({
19
19
  return newBoard;
20
20
  },
21
21
 
22
+ change: (_state, action: PayloadAction<Board>) => {
23
+ const board = action.payload;
24
+ return board;
25
+ },
26
+
22
27
  changeCellValue: (state, action: PayloadAction<{ value: string; x: number; y: number }>) => {
23
28
  const newBoard = state.clone();
24
29
  const { value, x, y } = action.payload;
@@ -32,11 +37,6 @@ const boardSlice = createSlice({
32
37
  return newBoard;
33
38
  },
34
39
 
35
- change: (_state, action: PayloadAction<Board>) => {
36
- const board = action.payload;
37
- return board;
38
- },
39
-
40
40
  init: (_state, action: PayloadAction<Board>) => {
41
41
  const board = action.payload;
42
42
  return board;
@@ -8,6 +8,16 @@
8
8
  }
9
9
  }
10
10
 
11
+ @keyframes show {
12
+ 0% {
13
+ opacity: 0;
14
+ }
15
+
16
+ 100% {
17
+ opacity: 1;
18
+ }
19
+ }
20
+
11
21
  @keyframes progress {
12
22
  0% {
13
23
  clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);
@@ -53,6 +53,6 @@ h4 {
53
53
  }
54
54
 
55
55
  [lang='fa-IR'] {
56
- --font--family: 'Vazirmatn', 'Open Sans', sans-serif;
57
- --font--family--title: 'Vazirmatn', 'Lato', sans-serif;
56
+ --font--family: 'Vazirmatn', sans-serif;
57
+ --font--family--title: 'Vazirmatn', sans-serif;
58
58
  }
@@ -16,6 +16,8 @@ $media-expressions: (
16
16
  * It does not work when applied on input elements.
17
17
  */
18
18
  @mixin focus-effect {
19
+ --focus-effect--size: 6px;
20
+
19
21
  position: relative;
20
22
 
21
23
  &::after {
@@ -25,10 +27,10 @@ $media-expressions: (
25
27
  right: 0;
26
28
  bottom: 0;
27
29
  left: 0;
28
- z-index: 1;
30
+ z-index: var(--z-index--focus-effect);
29
31
  transition: var(--transition);
30
32
  border-radius: var(--border--radius);
31
- box-shadow: 0 0 0 var(--box-shadow--focus--spread) transparent;
33
+ box-shadow: 0 0 0 var(--focus-effect--size) transparent;
32
34
  pointer-events: none;
33
35
  }
34
36
 
@@ -39,7 +41,7 @@ $media-expressions: (
39
41
  }
40
42
 
41
43
  &::after {
42
- box-shadow: 0 0 0 var(--box-shadow--focus--spread) var(--color--focus);
44
+ box-shadow: 0 0 0 var(--focus-effect--size) var(--color--focus);
43
45
  }
44
46
  }
45
47
  }
@@ -86,3 +88,58 @@ $media-expressions: (
86
88
  text-shadow: $size 0 $color, (-$size) 0 $color, 0 $size $color, 0 (-$size) $color, (-$size) (-$size) $color,
87
89
  (-$size) $size $color, $size (-$size) $color, $size $size $color;
88
90
  }
91
+
92
+ @mixin lighthouse-input-size-hack {
93
+ // Hack for this Lighthouse warning:
94
+ // > Interactive elements like buttons and links should be large enough (48x48px), and have
95
+ // > enough space around them, to be easy enough to tap without overlapping onto other elements.
96
+
97
+ input {
98
+ position: absolute;
99
+ top: -100%;
100
+ left: -100%;
101
+ width: 300%;
102
+ height: 300%;
103
+ clip-path: inset((100% / 3));
104
+ }
105
+
106
+ [dir='ltr'] & {
107
+ &:nth-child(1),
108
+ &:nth-child(2),
109
+ &:nth-child(3) {
110
+ input {
111
+ left: 0;
112
+ clip-path: polygon(0 (100% / 3), (100% / 3) (100% / 3), (100% / 3) (200% / 3), 0 (200% / 3));
113
+ }
114
+ }
115
+
116
+ &:nth-last-child(1),
117
+ &:nth-last-child(2),
118
+ &:nth-last-child(3) {
119
+ input {
120
+ left: -200%;
121
+ clip-path: polygon((200% / 3) (100% / 3), 100% (100% / 3), 100% (200% / 3), (200% / 3) (200% / 3));
122
+ }
123
+ }
124
+ }
125
+
126
+ [dir='rtl'] & {
127
+ &:nth-child(1),
128
+ &:nth-child(2),
129
+ &:nth-child(3) {
130
+ input {
131
+ left: -200%;
132
+ clip-path: polygon((200% / 3) (100% / 3), 100% (100% / 3), 100% (200% / 3), (200% / 3) (200% / 3));
133
+ }
134
+ }
135
+
136
+ &:nth-last-child(1),
137
+ &:nth-last-child(2),
138
+ &:nth-last-child(3) {
139
+ input {
140
+ left: 0;
141
+ clip-path: polygon(0 (100% / 3), (100% / 3) (100% / 3), (100% / 3) (200% / 3), 0 (200% / 3));
142
+ }
143
+ }
144
+ }
145
+ }
@@ -1,55 +1,63 @@
1
1
  $easeOutSine: cubic-bezier(0.61, 1, 0.88, 1);
2
2
 
3
3
  :root {
4
+ --border: var(--border--width) solid var(--border--color);
4
5
  --border--color: #cdcdcd;
5
6
  --border--color--light: #d9d9d9;
6
7
  --border--radius: 5px;
7
8
  --border--width: 1px;
8
- --border: var(--border--width) solid var(--border--color);
9
9
 
10
+ --box-shadow: 0 0 var(--box-shadow--blur) var(--box-shadow--spread) var(--box-shadow--color);
10
11
  --box-shadow--blur: 10px;
12
+ --box-shadow--color: rgba(0, 0, 0, 0.15);
11
13
  --box-shadow--spread: 1px;
12
- --box-shadow--offset: 1px;
13
- --box-shadow--offset--negative: calc(-1 * var(--box-shadow--offset));
14
- --box-shadow--color: #{rgba(#000, 0.15)};
15
- --box-shadow: 0 0 var(--box-shadow--blur) var(--box-shadow--spread) var(--box-shadow--color);
16
- --box-shadow--focus--spread: 6px;
17
14
  --box-shadow--null: 0 0 var(--box-shadow--blur) var(--box-shadow--spread) transparent;
18
15
  --box-shadow--error: 0 0 var(--box-shadow--blur) var(--box-shadow--spread) var(--color--error);
19
16
 
20
- --color--background: #f4f4f4;
21
- --color--background--secondary: #111;
22
- --color--background--overlay: rgba(255, 255, 255, 0.65);
23
- --color--error: hsl(0deg, 92%, 62%);
24
- --color--success: #00a900;
25
- --color--info: var(--color--dark-blue);
26
- --color--warning: hsl(35deg, 90%, 60%);
27
- --color--focus: #{rgba(#268fff, 0.5)};
28
- --color--foreground: #222;
29
- --color--foreground--secondary: #444;
30
- --color--inactive: #cdcdcd;
31
- --color--primary: var(--color--violet);
32
-
33
- --color--yellow: #efe3ae;
34
- --color--yellow--light: #f7f1d6;
35
- --color--green: #bae3ba;
36
- --color--green--light: #d6ebd6;
17
+ --color--white: #ffffff;
37
18
  --color--blue: #c7d8f9;
38
19
  --color--blue--light: #dde4f6;
39
- --color--light-blue: #7bb5e5;
40
- --color--light-blue--light: #b8d5ed;
41
- --color--dark-blue: #1868ad;
42
- --color--dark-blue--light: #86aed1;
20
+ --color--green: #bae3ba;
21
+ --color--green--light: #d6ebd6;
43
22
  --color--red: #f7c2aa;
44
23
  --color--red--light: #fbe0d4;
45
24
  --color--violet: #78387f;
46
25
  --color--violet--light: #b284b8;
47
- --color--orange: #fbc997;
48
- --color--pink: #f19393;
26
+ --color--yellow: #efe3ae;
27
+ --color--yellow--light: #f7f1d6;
28
+
29
+ --color--focus: #{rgba(#268fff, 0.5)};
30
+ --color--inactive: #cdcdcd;
31
+ --color--background: #f4f4f4;
32
+ --color--background--element: var(--color--white);
33
+ --color--background--overlay: rgba(255, 255, 255, 0.65);
34
+ --color--foreground: #222;
35
+ --color--foreground--secondary: #444;
36
+ --color--error: hsl(0, 92%, 62%);
37
+ --color--error--opposite: var(--color--white);
38
+ --color--info: #1868ad;
39
+ --color--success: #00a900;
40
+ --color--warning: hsl(35, 90%, 60%);
41
+ --color--primary: var(--color--violet);
42
+ --color--primary--opposite: var(--color--white);
43
+
44
+ --color--bonus--character--1: var(--color--yellow--light);
45
+ --color--bonus--character--2: var(--color--green--light);
46
+ --color--bonus--character--3: var(--color--blue--light);
47
+ --color--bonus--character--5: var(--color--red--light);
48
+ --color--bonus--character-multiplier--2: #b8d5ed;
49
+ --color--bonus--character-multiplier--3: #86aed1;
50
+ --color--bonus--start: var(--color--violet--light);
51
+ --color--bonus--word-multiplier--2: #fbc997;
52
+ --color--bonus--word-multiplier--3: #f19393;
53
+ --color--tooltip--background: #222;
54
+ --color--tooltip--foreground: var(--color--white);
49
55
 
50
56
  --font--family: 'Open Sans', sans-serif;
51
- --font--family--title: 'Lato', sans-serif;
57
+ --font--family--latin: 'Open Sans', sans-serif;
58
+ --font--family--arabic: 'Vazirmatn', sans-serif;
52
59
  --font--family--monospace: 'Roboto Mono', monospace;
60
+ --font--family--title: 'Lato', sans-serif;
53
61
  --font--size--h1: 30px;
54
62
  --font--size--h2: 22px;
55
63
  --font--size--h3: 18px;
@@ -66,13 +74,17 @@ $easeOutSine: cubic-bezier(0.61, 1, 0.88, 1);
66
74
  --spacing--xl: 40px;
67
75
  --spacing--xxl: 80px;
68
76
 
77
+ --transition: all var(--transition--duration) var(--transition--easing);
78
+ --transition--long: all var(--transition--duration--long) var(--transition--easing);
69
79
  --transition--duration: 100ms;
70
80
  --transition--duration--long: 250ms;
71
81
  --transition--easing: #{$easeOutSine};
72
- --transition: all var(--transition--duration) var(--transition--easing);
73
82
 
83
+ --z-index--focus-effect: 1;
84
+ --z-index--actions: 2;
74
85
  --z-index--modal: 100;
75
86
  --z-index--close-button: 101;
87
+ --z-index--tooltip: 102;
76
88
 
77
89
  --dictionary--height: 260px;
78
90
  --modal--width: 370px;
@@ -80,6 +92,4 @@ $easeOutSine: cubic-bezier(0.61, 1, 0.88, 1);
80
92
  --square-button--size: 32px;
81
93
  --button--icon--size: 24px;
82
94
  --text-input--height: 40px;
83
- --tooltip--background: #222;
84
- --tooltip--foreground: #fff;
85
95
  }
@@ -55,6 +55,7 @@ export type TranslationKey =
55
55
  | 'dictionary.empty-state.not-allowed'
56
56
  | 'dictionary.empty-state.uninitialized'
57
57
  | 'dictionary.input.placeholder'
58
+ | 'dictionary.input.title'
58
59
  | 'empty-state.error'
59
60
  | 'empty-state.info'
60
61
  | 'empty-state.success'
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@scrabble-solver/solver",
3
- "version": "2.10.7",
3
+ "version": "2.10.9",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@scrabble-solver/solver",
9
- "version": "2.10.7",
9
+ "version": "2.10.9",
10
10
  "license": "CC-BY-NC-ND-4.0",
11
11
  "dependencies": {
12
12
  "@kamilmielnik/trie": "^2.0.1"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/solver",
3
- "version": "2.10.7",
3
+ "version": "2.10.9",
4
4
  "description": "Scrabble Solver 2 - Solver",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -25,12 +25,12 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@kamilmielnik/trie": "^2.0.1",
28
- "@scrabble-solver/types": "^2.10.7"
28
+ "@scrabble-solver/types": "^2.10.9"
29
29
  },
30
30
  "devDependencies": {
31
- "@scrabble-solver/configs": "^2.10.7",
32
- "@scrabble-solver/constants": "^2.10.7",
33
- "@scrabble-solver/dictionaries": "^2.10.7"
31
+ "@scrabble-solver/configs": "^2.10.9",
32
+ "@scrabble-solver/constants": "^2.10.9",
33
+ "@scrabble-solver/dictionaries": "^2.10.9"
34
34
  },
35
35
  "gitHead": "1e2d1ad49a288d4a44196d8e3336740da132c637"
36
36
  }
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@scrabble-solver/types",
3
- "version": "2.10.7",
3
+ "version": "2.10.9",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@scrabble-solver/types",
9
- "version": "2.10.7",
9
+ "version": "2.10.9",
10
10
  "license": "CC-BY-NC-ND-4.0",
11
11
  "dependencies": {
12
- "@scrabble-solver/constants": "^2.10.7"
12
+ "@scrabble-solver/constants": "^2.10.9"
13
13
  }
14
14
  },
15
15
  "node_modules/@scrabble-solver/constants": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/types",
3
- "version": "2.10.7",
3
+ "version": "2.10.9",
4
4
  "description": "Scrabble Solver 2 - Types",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -24,7 +24,7 @@
24
24
  "clean:force": "npm run clean && rimraf package-lock.json"
25
25
  },
26
26
  "dependencies": {
27
- "@scrabble-solver/constants": "^2.10.7"
27
+ "@scrabble-solver/constants": "^2.10.9"
28
28
  },
29
29
  "gitHead": "1e2d1ad49a288d4a44196d8e3336740da132c637"
30
30
  }
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@scrabble-solver/word-definitions",
3
- "version": "2.10.7",
3
+ "version": "2.10.9",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@scrabble-solver/word-definitions",
9
- "version": "2.10.7",
9
+ "version": "2.10.9",
10
10
  "license": "CC-BY-NC-ND-4.0",
11
11
  "dependencies": {
12
12
  "cheerio": "^1.0.0-rc.12",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/word-definitions",
3
- "version": "2.10.7",
3
+ "version": "2.10.9",
4
4
  "description": "Scrabble Solver 2 - Word definitions",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -23,7 +23,7 @@
23
23
  "clean": "rimraf build/ node_modules/ package-lock.json"
24
24
  },
25
25
  "dependencies": {
26
- "@scrabble-solver/types": "^2.10.7",
26
+ "@scrabble-solver/types": "^2.10.9",
27
27
  "cheerio": "^1.0.0-rc.12",
28
28
  "follow-redirects": "^1.15.2",
29
29
  "striptags": "^3.2.0"
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@scrabble-solver/word-lists",
3
- "version": "2.10.7",
3
+ "version": "2.10.9",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@scrabble-solver/word-lists",
9
- "version": "2.10.7",
9
+ "version": "2.10.9",
10
10
  "license": "CC-BY-NC-ND-4.0",
11
11
  "dependencies": {
12
12
  "cheerio": "^1.0.0-rc.12",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/word-lists",
3
- "version": "2.10.7",
3
+ "version": "2.10.9",
4
4
  "description": "Scrabble Solver 2 - Word lists",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -24,7 +24,7 @@
24
24
  "clean:force": "npm run clean && rimraf package-lock.json"
25
25
  },
26
26
  "dependencies": {
27
- "@scrabble-solver/types": "^2.10.7",
27
+ "@scrabble-solver/types": "^2.10.9",
28
28
  "cheerio": "^1.0.0-rc.12",
29
29
  "follow-redirects": "^1.15.2",
30
30
  "unzipper": "^0.10.11"
@@ -1,122 +0,0 @@
1
- "use strict";
2
- exports.id = 210;
3
- exports.ids = [210];
4
- exports.modules = {
5
-
6
- /***/ 6495:
7
- /***/ ((__unused_webpack_module, exports) => {
8
-
9
- var __webpack_unused_export__;
10
-
11
- __webpack_unused_export__ = ({
12
- value: true
13
- });
14
- Object.defineProperty(exports, "Z", ({
15
- enumerable: true,
16
- get: function() {
17
- return _extends;
18
- }
19
- }));
20
- function extends_() {
21
- extends_ = Object.assign || function(target) {
22
- for(var i = 1; i < arguments.length; i++){
23
- var source = arguments[i];
24
- for(var key in source){
25
- if (Object.prototype.hasOwnProperty.call(source, key)) {
26
- target[key] = source[key];
27
- }
28
- }
29
- }
30
- return target;
31
- };
32
- return extends_.apply(this, arguments);
33
- }
34
- function _extends() {
35
- return extends_.apply(this, arguments);
36
- }
37
-
38
-
39
- /***/ }),
40
-
41
- /***/ 92648:
42
- /***/ ((__unused_webpack_module, exports) => {
43
-
44
- var __webpack_unused_export__;
45
-
46
- __webpack_unused_export__ = ({
47
- value: true
48
- });
49
- Object.defineProperty(exports, "Z", ({
50
- enumerable: true,
51
- get: function() {
52
- return _interopRequireDefault;
53
- }
54
- }));
55
- function _interopRequireDefault(obj) {
56
- return obj && obj.__esModule ? obj : {
57
- default: obj
58
- };
59
- }
60
-
61
-
62
- /***/ }),
63
-
64
- /***/ 91598:
65
- /***/ ((__unused_webpack_module, exports) => {
66
-
67
- var __webpack_unused_export__;
68
-
69
- __webpack_unused_export__ = ({
70
- value: true
71
- });
72
- Object.defineProperty(exports, "Z", ({
73
- enumerable: true,
74
- get: function() {
75
- return _interopRequireWildcard;
76
- }
77
- }));
78
- function _getRequireWildcardCache(nodeInterop) {
79
- if (typeof WeakMap !== "function") return null;
80
- var cacheBabelInterop = new WeakMap();
81
- var cacheNodeInterop = new WeakMap();
82
- return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {
83
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
84
- })(nodeInterop);
85
- }
86
- function _interopRequireWildcard(obj, nodeInterop) {
87
- if (!nodeInterop && obj && obj.__esModule) {
88
- return obj;
89
- }
90
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
91
- return {
92
- default: obj
93
- };
94
- }
95
- var cache = _getRequireWildcardCache(nodeInterop);
96
- if (cache && cache.has(obj)) {
97
- return cache.get(obj);
98
- }
99
- var newObj = {};
100
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
101
- for(var key in obj){
102
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
103
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
104
- if (desc && (desc.get || desc.set)) {
105
- Object.defineProperty(newObj, key, desc);
106
- } else {
107
- newObj[key] = obj[key];
108
- }
109
- }
110
- }
111
- newObj.default = obj;
112
- if (cache) {
113
- cache.set(obj, newObj);
114
- }
115
- return newObj;
116
- }
117
-
118
-
119
- /***/ })
120
-
121
- };
122
- ;