kokopu-react 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,10 @@
1
1
  ChangeLog
2
2
  =========
3
3
 
4
+ 3.3.0 (April 23, 2024)
5
+ ----------------------
6
+ * Add methods `NavigationBoard.size()` and `NavigationBoard.adaptSquareSize()`.
7
+
4
8
  3.2.0 (April 22, 2024)
5
9
  ----------------------
6
10
  * Add support for additional buttons in the toolbar of `NavigationBoard`.
@@ -99,6 +99,31 @@ export interface ChessboardProps extends DynamicBoardGraphicProps {
99
99
  */
100
100
  bottomComponent?: (attr: Pick<StaticBoardGraphicProps, 'squareSize' | 'coordinateVisible' | 'turnVisible'>) => JSX.Element;
101
101
  }
102
+ type AuxilliaryComponentSizeFunction = (attr: Pick<StaticBoardGraphicProps, 'squareSize' | 'coordinateVisible' | 'turnVisible'>) => {
103
+ width: number;
104
+ height: number;
105
+ };
106
+ /**
107
+ * Attributes for method `Chessboard.size()`.
108
+ */
109
+ export interface ChessboardSizeAttr {
110
+ squareSize?: ChessboardProps['squareSize'];
111
+ coordinateVisible?: ChessboardProps['coordinateVisible'];
112
+ turnVisible?: ChessboardProps['turnVisible'];
113
+ smallScreenLimits?: ChessboardProps['smallScreenLimits'];
114
+ topComponent?: AuxilliaryComponentSizeFunction;
115
+ bottomComponent?: AuxilliaryComponentSizeFunction;
116
+ }
117
+ /**
118
+ * Attributes for method `Chessboard.adaptSquareSize()`.
119
+ */
120
+ export interface ChessboardAdaptSquareSizeAttr {
121
+ coordinateVisible?: ChessboardProps['coordinateVisible'];
122
+ turnVisible?: ChessboardProps['turnVisible'];
123
+ smallScreenLimits?: ChessboardProps['smallScreenLimits'];
124
+ topComponent?: AuxilliaryComponentSizeFunction;
125
+ bottomComponent?: AuxilliaryComponentSizeFunction;
126
+ }
102
127
  interface ChessboardState {
103
128
  windowWidth: number;
104
129
  }
@@ -118,14 +143,14 @@ export declare class Chessboard extends React.Component<ChessboardProps, Chessbo
118
143
  /**
119
144
  * Return the size of the chessboard, assuming it is built with the given attributes.
120
145
  */
121
- static size(attr?: Partial<Pick<ChessboardProps, 'squareSize' | 'coordinateVisible' | 'turnVisible' | 'smallScreenLimits'>>): {
146
+ static size(attr?: ChessboardSizeAttr): {
122
147
  width: number;
123
148
  height: number;
124
149
  };
125
150
  /**
126
151
  * Return the maximum square size that would allow the chessboard to fit in a rectangle of size `width x height`.
127
152
  */
128
- static adaptSquareSize(width: number, height: number, attr?: Partial<Pick<ChessboardProps, 'coordinateVisible' | 'turnVisible' | 'smallScreenLimits'>>): number;
153
+ static adaptSquareSize(width: number, height: number, attr?: ChessboardAdaptSquareSizeAttr): number;
129
154
  /**
130
155
  * Minimum square size (inclusive).
131
156
  *
@@ -129,42 +129,42 @@ export class Chessboard extends React.Component {
129
129
  * Return the size of the chessboard, assuming it is built with the given attributes.
130
130
  */
131
131
  static size(attr) {
132
- let { squareSize, coordinateVisible, turnVisible, smallScreenLimits } = sanitizePartialObject(attr, () => new IllegalArgument('Chessboard.size()', 'attr'));
132
+ const { squareSize, coordinateVisible, turnVisible, smallScreenLimits, topComponent, bottomComponent } = sanitizePartialObject(attr, () => new IllegalArgument('Chessboard.size()', 'attr'));
133
133
  // Sanitize the arguments.
134
- squareSize = squareSize === undefined ? DEFAULT_SQUARE_SIZE :
134
+ let actualSquareSize = squareSize === undefined ? DEFAULT_SQUARE_SIZE :
135
135
  sanitizeBoundedInteger(squareSize, MIN_SQUARE_SIZE, MAX_SQUARE_SIZE, () => new IllegalArgument('Chessboard.size()', 'squareSize'));
136
- coordinateVisible = coordinateVisible === undefined ? true : sanitizeBoolean(coordinateVisible);
137
- turnVisible = turnVisible === undefined ? true : sanitizeBoolean(turnVisible);
138
- smallScreenLimits = sanitizeSmallScreenLimits(smallScreenLimits, () => new IllegalArgument('Chessboard.size()', 'smallScreenLimits'));
136
+ let actualCoordinateVisible = coordinateVisible === undefined ? true : sanitizeBoolean(coordinateVisible);
137
+ let actualTurnVisible = turnVisible === undefined ? true : sanitizeBoolean(turnVisible);
138
+ const actualLimits = sanitizeSmallScreenLimits(smallScreenLimits, () => new IllegalArgument('Chessboard.size()', 'smallScreenLimits'));
139
139
  // Enforce small-screen limits, if any.
140
140
  if (typeof window !== 'undefined') {
141
- squareSize = computeSquareSizeForSmallScreens(squareSize, smallScreenLimits, window.innerWidth);
142
- coordinateVisible = computeCoordinateVisibleForSmallScreens(coordinateVisible, smallScreenLimits, window.innerWidth);
143
- turnVisible = computeTurnVisibleForSmallScreens(turnVisible, smallScreenLimits, window.innerWidth);
141
+ actualSquareSize = computeSquareSizeForSmallScreens(actualSquareSize, actualLimits, window.innerWidth);
142
+ actualCoordinateVisible = computeCoordinateVisibleForSmallScreens(actualCoordinateVisible, actualLimits, window.innerWidth);
143
+ actualTurnVisible = computeTurnVisibleForSmallScreens(actualTurnVisible, actualLimits, window.innerWidth);
144
144
  }
145
145
  // Compute the dimensions.
146
- return chessboardSize(squareSize, coordinateVisible, turnVisible);
146
+ return chessBoardWithAuxilliaryComponentSize(actualSquareSize, actualCoordinateVisible, actualTurnVisible, topComponent, bottomComponent);
147
147
  }
148
148
  /**
149
149
  * Return the maximum square size that would allow the chessboard to fit in a rectangle of size `width x height`.
150
150
  */
151
151
  static adaptSquareSize(width, height, attr) {
152
- let { coordinateVisible, turnVisible, smallScreenLimits } = sanitizePartialObject(attr, () => new IllegalArgument('Chessboard.adaptSquareSize()', 'attr'));
152
+ const { coordinateVisible, turnVisible, smallScreenLimits, topComponent, bottomComponent } = sanitizePartialObject(attr, () => new IllegalArgument('Chessboard.adaptSquareSize()', 'attr'));
153
153
  // Sanitize the arguments.
154
154
  width = sanitizeInteger(width, () => new IllegalArgument('Chessboard.adaptSquareSize()', 'width'));
155
155
  height = sanitizeInteger(height, () => new IllegalArgument('Chessboard.adaptSquareSize()', 'height'));
156
- coordinateVisible = coordinateVisible === undefined ? true : sanitizeBoolean(coordinateVisible);
157
- turnVisible = turnVisible === undefined ? true : sanitizeBoolean(turnVisible);
158
- smallScreenLimits = sanitizeSmallScreenLimits(smallScreenLimits, () => new IllegalArgument('Chessboard.adaptSquareSize()', 'smallScreenLimits'));
156
+ let actualCoordinateVisible = coordinateVisible === undefined ? true : sanitizeBoolean(coordinateVisible);
157
+ let actualTurnVisible = turnVisible === undefined ? true : sanitizeBoolean(turnVisible);
158
+ const actualLimits = sanitizeSmallScreenLimits(smallScreenLimits, () => new IllegalArgument('Chessboard.adaptSquareSize()', 'smallScreenLimits'));
159
159
  // Enforce small-screen limits, if any.
160
160
  let maxSquareSize = MAX_SQUARE_SIZE;
161
161
  if (typeof window !== 'undefined') {
162
- maxSquareSize = computeSquareSizeForSmallScreens(maxSquareSize, smallScreenLimits, window.innerWidth);
163
- coordinateVisible = computeCoordinateVisibleForSmallScreens(coordinateVisible, smallScreenLimits, window.innerWidth);
164
- turnVisible = computeTurnVisibleForSmallScreens(turnVisible, smallScreenLimits, window.innerWidth);
162
+ maxSquareSize = computeSquareSizeForSmallScreens(maxSquareSize, actualLimits, window.innerWidth);
163
+ actualCoordinateVisible = computeCoordinateVisibleForSmallScreens(actualCoordinateVisible, actualLimits, window.innerWidth);
164
+ actualTurnVisible = computeTurnVisibleForSmallScreens(actualTurnVisible, actualLimits, window.innerWidth);
165
165
  }
166
166
  function isAdapted(squareSize) {
167
- const { width: actualWidth, height: actualHeight } = chessboardSize(squareSize, coordinateVisible, turnVisible);
167
+ const { width: actualWidth, height: actualHeight } = chessBoardWithAuxilliaryComponentSize(squareSize, actualCoordinateVisible, actualTurnVisible, topComponent, bottomComponent);
168
168
  return actualWidth <= width && actualHeight <= height;
169
169
  }
170
170
  // Check min/max bounds.
@@ -226,6 +226,25 @@ Chessboard.defaultProps = {
226
226
  position: 'start',
227
227
  flipped: false,
228
228
  };
229
+ function chessBoardWithAuxilliaryComponentSize(squareSize, coordinateVisible, turnVisible, topComponent, bottomComponent) {
230
+ let { width, height } = chessboardSize(squareSize, coordinateVisible, turnVisible);
231
+ const auxilliaryComponentAttr = {
232
+ squareSize: squareSize,
233
+ coordinateVisible: coordinateVisible,
234
+ turnVisible: turnVisible,
235
+ };
236
+ if (topComponent) {
237
+ const { width: auxilliaryWidth, height: auxilliaryHeight } = topComponent(auxilliaryComponentAttr);
238
+ width = Math.max(width, auxilliaryWidth);
239
+ height += auxilliaryHeight;
240
+ }
241
+ if (bottomComponent) {
242
+ const { width: auxilliaryWidth, height: auxilliaryHeight } = bottomComponent(auxilliaryComponentAttr);
243
+ width = Math.max(width, auxilliaryWidth);
244
+ height += auxilliaryHeight;
245
+ }
246
+ return { width: width, height: height };
247
+ }
229
248
  /**
230
249
  * Compute the actual square size taking into account the given small-screen limits and window width.
231
250
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Chessboard.js","sourceRoot":"","sources":["../../../src/chessboard/Chessboard.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Chessboard.js","sourceRoot":"","sources":["../../../src/chessboard/Chessboard.tsx"],"names":[],"mappings":"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"}
@@ -32,6 +32,6 @@ export { SmallScreenLimit } from './chessboard/BoardProperties';
32
32
  export { Chessboard, ChessboardProps } from './chessboard/Chessboard';
33
33
  export { formatMove, moveFormatter } from './movetext/moveFormatter';
34
34
  export { Movetext, MovetextProps, MoveSelectEventOrigin } from './movetext/Movetext';
35
- export { NavigationButton, NavigationButtonList, isNavigationButton } from './navigationboard/NavigationButton';
35
+ export { NavigationButton, NavigationBar, NavigationBarScheme, isNavigationButton, isNavigationBar, isNavigationBarScheme } from './navigationboard/NavigationButton';
36
36
  export { firstNodeId, previousNodeId, nextNodeId, lastNodeId } from './navigationboard/NavigationField';
37
37
  export { NavigationBoard, NavigationBoardProps } from './navigationboard/NavigationBoard';
package/dist/lib/index.js CHANGED
@@ -31,7 +31,7 @@ export { ChessPieceIcon } from './icons/ChessPieceIcon';
31
31
  export { Chessboard } from './chessboard/Chessboard';
32
32
  export { formatMove, moveFormatter } from './movetext/moveFormatter';
33
33
  export { Movetext } from './movetext/Movetext';
34
- export { isNavigationButton } from './navigationboard/NavigationButton';
34
+ export { isNavigationButton, isNavigationBar, isNavigationBarScheme } from './navigationboard/NavigationButton';
35
35
  export { firstNodeId, previousNodeId, nextNodeId, lastNodeId } from './navigationboard/NavigationField';
36
36
  export { NavigationBoard } from './navigationboard/NavigationBoard';
37
37
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;gFAqBgF;AAGhF,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAEzC,OAAO,EACH,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAChJ,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE7E,OAAO,EAAE,QAAQ,EAAiB,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAyB,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,cAAc,EAAuB,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAwB,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAuB,MAAM,wBAAwB,CAAC;AAG7E,OAAO,EAAE,UAAU,EAAmB,MAAM,yBAAyB,CAAC;AAEtE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAwC,MAAM,qBAAqB,CAAC;AAErF,OAAO,EAA0C,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAChH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACxG,OAAO,EAAE,eAAe,EAAwB,MAAM,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;gFAqBgF;AAGhF,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAEzC,OAAO,EACH,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAChJ,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE7E,OAAO,EAAE,QAAQ,EAAiB,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAyB,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,cAAc,EAAuB,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAwB,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAuB,MAAM,wBAAwB,CAAC;AAG7E,OAAO,EAAE,UAAU,EAAmB,MAAM,yBAAyB,CAAC;AAEtE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAwC,MAAM,qBAAqB,CAAC;AAErF,OAAO,EAAwD,kBAAkB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AACtK,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACxG,OAAO,EAAE,eAAe,EAAwB,MAAM,mCAAmC,CAAC"}
@@ -23,7 +23,7 @@
23
23
  import * as React from 'react';
24
24
  import { Database, Game } from 'kokopu';
25
25
  import { DynamicBoardGraphicProps } from '../chessboard/BoardProperties';
26
- import { NavigationButton, NavigationButtonList } from './NavigationButton';
26
+ import { NavigationBar, NavigationBarScheme } from './NavigationButton';
27
27
  export interface NavigationBoardProps extends DynamicBoardGraphicProps {
28
28
  /**
29
29
  * Displayed game. Can be a [kokopu.Game](https://kokopu.yo35.org/docs/current/classes/Game.html) object,
@@ -99,7 +99,30 @@ export interface NavigationBoardProps extends DynamicBoardGraphicProps {
99
99
  /**
100
100
  * Additional buttons to be added to the toolbar.
101
101
  */
102
- additionalButtons: NavigationButton | NavigationButtonList;
102
+ additionalButtons: NavigationBar;
103
+ }
104
+ /**
105
+ * Attributes for method `NavigationBoard.size()`.
106
+ */
107
+ interface NavigationBoardSizeAttr {
108
+ squareSize?: NavigationBoardProps['squareSize'];
109
+ coordinateVisible?: NavigationBoardProps['coordinateVisible'];
110
+ turnVisible?: NavigationBoardProps['turnVisible'];
111
+ smallScreenLimits?: NavigationBoardProps['smallScreenLimits'];
112
+ playButtonVisible?: NavigationBoardProps['playButtonVisible'];
113
+ flipButtonVisible?: NavigationBoardProps['flipButtonVisible'];
114
+ additionalButtons?: NavigationBarScheme;
115
+ }
116
+ /**
117
+ * Attributes for method `NavigationBoard.adaptSquareSize()`.
118
+ */
119
+ interface NavigationBoardAdaptSquareSizeAttr {
120
+ coordinateVisible?: NavigationBoardProps['coordinateVisible'];
121
+ turnVisible?: NavigationBoardProps['turnVisible'];
122
+ smallScreenLimits?: NavigationBoardProps['smallScreenLimits'];
123
+ playButtonVisible?: NavigationBoardProps['playButtonVisible'];
124
+ flipButtonVisible?: NavigationBoardProps['flipButtonVisible'];
125
+ additionalButtons?: NavigationBarScheme;
103
126
  }
104
127
  interface NavigationBoardState {
105
128
  nodeIdAsUncontrolled: string;
@@ -120,11 +143,6 @@ export declare class NavigationBoard extends React.Component<NavigationBoardProp
120
143
  flipButtonVisible: boolean;
121
144
  additionalButtons: never[];
122
145
  moveArrowVisible: boolean;
123
- /**
124
- * ID of the selected move (or `'start'`/`'end'` for the beginning/end of the main variation).
125
- * Use [kokopu.Node#id](https://kokopu.yo35.org/docs/current/classes/Node.html#id) to get the ID of a game move.
126
- * If provided (i.e. if the component is controlled), the attribute `onNodeIdChanged` must be provided as well.
127
- */
128
146
  moveArrowColor: import("..").AnnotationColor;
129
147
  animated: boolean;
130
148
  squareSize: number;
@@ -152,5 +170,16 @@ export declare class NavigationBoard extends React.Component<NavigationBoardProp
152
170
  * @public
153
171
  */
154
172
  focus(): void;
173
+ /**
174
+ * Return the size of the {@link NavigationBoard}, assuming it is built with the given attributes.
175
+ */
176
+ static size(attr?: NavigationBoardSizeAttr): {
177
+ width: number;
178
+ height: number;
179
+ };
180
+ /**
181
+ * Return the maximum square size that would allow the {@link NavigationBoard} to fit in a rectangle of size `width x height`.
182
+ */
183
+ static adaptSquareSize(width: number, height: number, attr?: NavigationBoardAdaptSquareSizeAttr): number;
155
184
  }
156
185
  export {};
@@ -24,14 +24,14 @@ import * as React from 'react';
24
24
  import { Game, Node as GameNode, Variation } from 'kokopu';
25
25
  import { IllegalArgument } from '../exception';
26
26
  import { i18n } from '../i18n';
27
- import { sanitizeBoolean, sanitizeOptional, sanitizeString } from '../sanitization';
27
+ import { sanitizeBoolean, sanitizeOptional, sanitizeString, sanitizePartialObject } from '../sanitization';
28
28
  import { defaultDynamicBoardProps } from '../chessboard/BoardProperties';
29
29
  import { Chessboard } from '../chessboard/Chessboard';
30
30
  import { parseGame } from '../errorbox/parsing';
31
31
  import { NavigationField, firstNodeId, previousNodeId, nextNodeId, lastNodeId } from '../navigationboard/NavigationField';
32
32
  import { GO_FIRST_ICON_PATH, GO_PREVIOUS_ICON_PATH, GO_NEXT_ICON_PATH, GO_LAST_ICON_PATH, PLAY_ICON_PATH, STOP_ICON_PATH, FLIP_ICON_PATH } from './iconPaths';
33
- import { isNavigationButton } from './NavigationButton';
34
- import { NavigationToolbar } from './NavigationToolbar';
33
+ import { isNavigationBar, isNavigationBarScheme } from './NavigationButton';
34
+ import { NavigationToolbar, navigationToolbarSize } from './NavigationToolbar';
35
35
  const INTER_MOVE_DURATION = 1000;
36
36
  /**
37
37
  * Component displaying the positions occurring in a chess game, with navigation buttons to browse these positions.
@@ -75,6 +75,7 @@ export class NavigationBoard extends React.Component {
75
75
  return React.createElement(NavigationField, { ref: this.navigationFieldRef, onFirstPressed: () => this.handleNavClicked(firstNodeId(game, currentNodeId)), onPreviousPressed: () => this.handleNavClicked(previousNodeId(game, currentNodeId)), onNextPressed: () => this.handleNavClicked(nextNodeId(game, currentNodeId)), onLastPressed: () => this.handleNavClicked(lastNodeId(game, currentNodeId)) });
76
76
  }
77
77
  renderToolbar(game, node, squareSize, isPlaying) {
78
+ // WARNING: the logic here must be the same as the one in `computeBarScheme()`.
78
79
  const buttons = [];
79
80
  // Core navigation buttons
80
81
  const currentNodeId = node.id();
@@ -103,8 +104,10 @@ export class NavigationBoard extends React.Component {
103
104
  }
104
105
  }
105
106
  // Additional buttons.
106
- const additionalButtons = sanitizeNavigationButtonList(this.props.additionalButtons, () => new IllegalArgument('NavigationBoard', 'additionalButtons'));
107
- for (const button of additionalButtons) {
107
+ if (!isNavigationBar(this.props.additionalButtons)) {
108
+ throw new IllegalArgument('NavigationBoard', 'additionalButtons');
109
+ }
110
+ for (const button of this.props.additionalButtons) {
108
111
  buttons.push(button);
109
112
  }
110
113
  return React.createElement(NavigationToolbar, { squareSize: squareSize, buttons: buttons });
@@ -161,6 +164,45 @@ export class NavigationBoard extends React.Component {
161
164
  target.focus();
162
165
  }
163
166
  }
167
+ /**
168
+ * Return the size of the {@link NavigationBoard}, assuming it is built with the given attributes.
169
+ */
170
+ static size(attr) {
171
+ const { squareSize, coordinateVisible, turnVisible, smallScreenLimits, playButtonVisible, flipButtonVisible, additionalButtons } = sanitizePartialObject(attr, () => new IllegalArgument('NavigationBoard.size()', 'attr'));
172
+ // Sanitization
173
+ const actualPlayButtonVisible = sanitizeOptional(playButtonVisible, sanitizeBoolean);
174
+ const actualFlipButtonVisible = sanitizeOptional(flipButtonVisible, sanitizeBoolean);
175
+ if (additionalButtons !== undefined && !isNavigationBarScheme(additionalButtons)) {
176
+ throw new IllegalArgument('NavigationBoard.size()', 'additionalButtons');
177
+ }
178
+ const buttons = computeBarScheme(actualPlayButtonVisible, actualFlipButtonVisible, additionalButtons);
179
+ return Chessboard.size({
180
+ squareSize: squareSize,
181
+ coordinateVisible: coordinateVisible,
182
+ turnVisible: turnVisible,
183
+ smallScreenLimits: smallScreenLimits,
184
+ bottomComponent: ({ squareSize: sz }) => navigationToolbarSize(sz, buttons),
185
+ });
186
+ }
187
+ /**
188
+ * Return the maximum square size that would allow the {@link NavigationBoard} to fit in a rectangle of size `width x height`.
189
+ */
190
+ static adaptSquareSize(width, height, attr) {
191
+ const { coordinateVisible, turnVisible, smallScreenLimits, playButtonVisible, flipButtonVisible, additionalButtons } = sanitizePartialObject(attr, () => new IllegalArgument('NavigationBoard.adaptSquareSize()', 'attr'));
192
+ // Sanitization
193
+ const actualPlayButtonVisible = sanitizeOptional(playButtonVisible, sanitizeBoolean);
194
+ const actualFlipButtonVisible = sanitizeOptional(flipButtonVisible, sanitizeBoolean);
195
+ if (additionalButtons !== undefined && !isNavigationBarScheme(additionalButtons)) {
196
+ throw new IllegalArgument('NavigationBoard.adaptSquareSize()', 'additionalButtons');
197
+ }
198
+ const buttons = computeBarScheme(actualPlayButtonVisible, actualFlipButtonVisible, additionalButtons);
199
+ return Chessboard.adaptSquareSize(width, height, {
200
+ coordinateVisible: coordinateVisible,
201
+ turnVisible: turnVisible,
202
+ smallScreenLimits: smallScreenLimits,
203
+ bottomComponent: ({ squareSize: sz }) => navigationToolbarSize(sz, buttons),
204
+ });
205
+ }
164
206
  }
165
207
  NavigationBoard.defaultProps = {
166
208
  ...defaultDynamicBoardProps(),
@@ -173,23 +215,26 @@ NavigationBoard.defaultProps = {
173
215
  flipButtonVisible: true,
174
216
  additionalButtons: [],
175
217
  };
176
- /**
177
- * Sanitization method for the additional button parameter.
178
- */
179
- function sanitizeNavigationButtonList(type, exceptionBuilder) {
180
- if (Array.isArray(type)) {
181
- return type.map(t => {
182
- if (t !== 'spacer' && !isNavigationButton(t)) {
183
- throw exceptionBuilder();
184
- }
185
- return t;
186
- });
218
+ function computeBarScheme(playButtonVisible, flipButtonVisible, additionalButtons) {
219
+ // WARNING: the logic here must be the same as the one in `renderToolbar()`.
220
+ const buttons = [];
221
+ buttons.push('button'); // go-first
222
+ buttons.push('button'); // go-previous
223
+ if (playButtonVisible ?? NavigationBoard.defaultProps.playButtonVisible) {
224
+ buttons.push('button');
187
225
  }
188
- else if (isNavigationButton(type)) {
189
- return [type];
226
+ buttons.push('button'); // go-next
227
+ buttons.push('button'); // go-last
228
+ buttons.push('spacer');
229
+ if (flipButtonVisible ?? NavigationBoard.defaultProps.flipButtonVisible) {
230
+ buttons.push('button');
190
231
  }
191
- else {
192
- throw exceptionBuilder();
232
+ buttons.push('spacer');
233
+ if (additionalButtons !== undefined) {
234
+ for (const button of additionalButtons) {
235
+ buttons.push(button);
236
+ }
193
237
  }
238
+ return buttons;
194
239
  }
195
240
  //# sourceMappingURL=NavigationBoard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationBoard.js","sourceRoot":"","sources":["../../../src/navigationboard/NavigationBoard.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NavigationBoard.js","sourceRoot":"","sources":["../../../src/navigationboard/NavigationBoard.tsx"],"names":[],"mappings":"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"}
@@ -47,8 +47,20 @@ export type NavigationButton = {
47
47
  /**
48
48
  * List of additional buttons to be added to the toolbar of {@link NavigationBoard}, together with optional spacers in-between.
49
49
  */
50
- export type NavigationButtonList = (NavigationButton | 'spacer')[];
50
+ export type NavigationBar = (NavigationButton | 'spacer')[];
51
+ /**
52
+ * Scheme of additional button list to be added to the toolbar of {@link NavigationBoard}, together with optional spacers in-between.
53
+ */
54
+ export type NavigationBarScheme = ('button' | 'spacer')[];
51
55
  /**
52
56
  * Whether the given object is a {@link NavigationButton} or not.
53
57
  */
54
58
  export declare function isNavigationButton(button: unknown): button is NavigationButton;
59
+ /**
60
+ * Whether the given object is a {@link NavigationBar} or not.
61
+ */
62
+ export declare function isNavigationBar(buttons: unknown): buttons is NavigationBar;
63
+ /**
64
+ * Whether the given object is a {@link NavigationBarScheme} or not.
65
+ */
66
+ export declare function isNavigationBarScheme(buttons: unknown): buttons is NavigationBarScheme;
@@ -32,4 +32,36 @@ export function isNavigationButton(button) {
32
32
  (button.enabled === undefined || typeof button.enabled === 'boolean') &&
33
33
  (button.onClick === undefined || typeof button.onClick === 'function');
34
34
  }
35
+ /**
36
+ * Whether the given object is a {@link NavigationBar} or not.
37
+ */
38
+ export function isNavigationBar(buttons) {
39
+ if (Array.isArray(buttons)) {
40
+ for (const button of buttons) {
41
+ if (!(isNavigationButton(button) || button === 'spacer')) {
42
+ return false;
43
+ }
44
+ }
45
+ return true;
46
+ }
47
+ else {
48
+ return false;
49
+ }
50
+ }
51
+ /**
52
+ * Whether the given object is a {@link NavigationBarScheme} or not.
53
+ */
54
+ export function isNavigationBarScheme(buttons) {
55
+ if (Array.isArray(buttons)) {
56
+ for (const button of buttons) {
57
+ if (!(button === 'button' || button === 'spacer')) {
58
+ return false;
59
+ }
60
+ }
61
+ return true;
62
+ }
63
+ else {
64
+ return false;
65
+ }
66
+ }
35
67
  //# sourceMappingURL=NavigationButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationButton.js","sourceRoot":"","sources":["../../../src/navigationboard/NavigationButton.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;gFAqBgF;AAuChF;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAe;IAC9C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,OAAQ,MAA2B,CAAC,QAAQ,KAAK,QAAQ;QAC5D,CAAE,MAA2B,CAAC,OAAO,KAAK,SAAS,IAAI,OAAQ,MAA2B,CAAC,OAAO,KAAK,QAAQ,CAAC;QAChH,CAAE,MAA2B,CAAC,OAAO,KAAK,SAAS,IAAI,OAAQ,MAA2B,CAAC,OAAO,KAAK,SAAS,CAAC;QACjH,CAAE,MAA2B,CAAC,OAAO,KAAK,SAAS,IAAI,OAAQ,MAA2B,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC;AAC3H,CAAC"}
1
+ {"version":3,"file":"NavigationButton.js","sourceRoot":"","sources":["../../../src/navigationboard/NavigationButton.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;gFAqBgF;AA6ChF;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAe;IAC9C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,OAAQ,MAA2B,CAAC,QAAQ,KAAK,QAAQ;QAC5D,CAAE,MAA2B,CAAC,OAAO,KAAK,SAAS,IAAI,OAAQ,MAA2B,CAAC,OAAO,KAAK,QAAQ,CAAC;QAChH,CAAE,MAA2B,CAAC,OAAO,KAAK,SAAS,IAAI,OAAQ,MAA2B,CAAC,OAAO,KAAK,SAAS,CAAC;QACjH,CAAE,MAA2B,CAAC,OAAO,KAAK,SAAS,IAAI,OAAQ,MAA2B,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC;AAC3H,CAAC;AAGD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC;gBACvD,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;SACI,CAAC;QACF,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAGD;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IAClD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC;gBAChD,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;SACI,CAAC;QACF,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC"}
@@ -21,14 +21,21 @@
21
21
  * *
22
22
  * -------------------------------------------------------------------------- */
23
23
  import * as React from 'react';
24
- import { NavigationButtonList } from './NavigationButton';
24
+ import { NavigationBar, NavigationBarScheme } from './NavigationButton';
25
25
  import './NavigationToolbar.css';
26
26
  interface NavigationToolbarProps {
27
27
  squareSize: number;
28
- buttons: NavigationButtonList;
28
+ buttons: NavigationBar;
29
29
  }
30
30
  /**
31
31
  * Toolbar below the navigation board.
32
32
  */
33
33
  export declare function NavigationToolbar({ squareSize, buttons }: NavigationToolbarProps): React.JSX.Element;
34
+ /**
35
+ * Size of the navigation toolbar (taking into account the margin between the toolbar and the chessboard), assuming the given square size.
36
+ */
37
+ export declare function navigationToolbarSize(squareSize: number, buttons: NavigationBarScheme): {
38
+ width: number;
39
+ height: number;
40
+ };
34
41
  export {};
@@ -45,7 +45,7 @@ export function NavigationToolbar({ squareSize, buttons }) {
45
45
  // Enqueue the button node.
46
46
  buttonNodes.push(React.createElement(NavigationButtonImpl, { key: buttonNodes.length, tooltip: button.tooltip, iconPath: button.iconPath, enabled: button.enabled, onClick: button.onClick, size: buttonSize, spaceOnLeft: i === 0 || buttons[i - 1] === 'spacer', spaceOnRight: i === buttons.length - 1 || buttons[i + 1] === 'spacer' }));
47
47
  }
48
- return React.createElement("div", { className: "kokopu-navigationToolbar", style: { marginTop: Math.round(buttonSize / 4) } }, buttonNodes);
48
+ return React.createElement("div", { className: "kokopu-navigationToolbar", style: { marginTop: computeMarginTop(squareSize) } }, buttonNodes);
49
49
  }
50
50
  /**
51
51
  * Button for the navigation toolbar.
@@ -58,6 +58,33 @@ function NavigationButtonImpl({ size, spaceOnLeft, spaceOnRight, iconPath, toolt
58
58
  React.createElement("svg", { viewBox: "0 0 32 32", width: size, height: size },
59
59
  React.createElement("path", { d: `M 16 0 ${leftBoundary} ${rightBoundary} Z ${iconPath}`, fill: "currentcolor" }))));
60
60
  }
61
+ /**
62
+ * Size of the navigation toolbar (taking into account the margin between the toolbar and the chessboard), assuming the given square size.
63
+ */
64
+ export function navigationToolbarSize(squareSize, buttons) {
65
+ const buttonSize = computeButtonSize(squareSize);
66
+ const spacerSize = computeSpacerSize(squareSize);
67
+ let width = 0;
68
+ let atLeastOneButtonEncountered = false;
69
+ for (let i = 0; i < buttons.length; ++i) {
70
+ // Skip the spacers.
71
+ if (buttons[i] === 'spacer') {
72
+ continue;
73
+ }
74
+ // Enqueue a spacer if necessary.
75
+ // Remark: consecutive spacers are collapsed into a single one for rendering, and spacers at the begin and end of the button list are not rendered.
76
+ if (atLeastOneButtonEncountered && buttons[i - 1] === 'spacer') {
77
+ width += spacerSize;
78
+ }
79
+ atLeastOneButtonEncountered = true;
80
+ // Enqueue the button node.
81
+ width += buttonSize;
82
+ }
83
+ return {
84
+ width: width,
85
+ height: buttonSize + computeMarginTop(squareSize),
86
+ };
87
+ }
61
88
  /**
62
89
  * Return the height/width of the buttons assuming the given square size.
63
90
  */
@@ -70,4 +97,10 @@ function computeButtonSize(squareSize) {
70
97
  function computeSpacerSize(squareSize) {
71
98
  return Math.round((squareSize * 2 + 116) / 14);
72
99
  }
100
+ /**
101
+ * Return the height of the margin between the toolbar and the chessboard.
102
+ */
103
+ function computeMarginTop(squareSize) {
104
+ return Math.round((squareSize * 2 + 116) / 28);
105
+ }
73
106
  //# sourceMappingURL=NavigationToolbar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationToolbar.js","sourceRoot":"","sources":["../../../src/navigationboard/NavigationToolbar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NavigationToolbar.js","sourceRoot":"","sources":["../../../src/navigationboard/NavigationToolbar.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kokopu-react",
3
- "version": "3.2.0",
3
+ "version": "3.3.0",
4
4
  "description": "A React-based library to create and display chessboard and chess-related components.",
5
5
  "keywords": [
6
6
  "chess",
@@ -129,6 +129,34 @@ export interface ChessboardProps extends DynamicBoardGraphicProps {
129
129
  }
130
130
 
131
131
 
132
+ type AuxilliaryComponentSizeFunction = (attr: Pick<StaticBoardGraphicProps, 'squareSize' | 'coordinateVisible' | 'turnVisible'>) => { width: number, height: number };
133
+
134
+
135
+ /**
136
+ * Attributes for method `Chessboard.size()`.
137
+ */
138
+ export interface ChessboardSizeAttr {
139
+ squareSize?: ChessboardProps['squareSize'];
140
+ coordinateVisible?: ChessboardProps['coordinateVisible'];
141
+ turnVisible?: ChessboardProps['turnVisible'];
142
+ smallScreenLimits?: ChessboardProps['smallScreenLimits'];
143
+ topComponent?: AuxilliaryComponentSizeFunction;
144
+ bottomComponent?: AuxilliaryComponentSizeFunction;
145
+ }
146
+
147
+
148
+ /**
149
+ * Attributes for method `Chessboard.adaptSquareSize()`.
150
+ */
151
+ export interface ChessboardAdaptSquareSizeAttr {
152
+ coordinateVisible?: ChessboardProps['coordinateVisible'];
153
+ turnVisible?: ChessboardProps['turnVisible'];
154
+ smallScreenLimits?: ChessboardProps['smallScreenLimits'];
155
+ topComponent?: AuxilliaryComponentSizeFunction;
156
+ bottomComponent?: AuxilliaryComponentSizeFunction;
157
+ }
158
+
159
+
132
160
  interface ChessboardState {
133
161
  windowWidth: number;
134
162
  }
@@ -261,50 +289,53 @@ export class Chessboard extends React.Component<ChessboardProps, ChessboardState
261
289
  /**
262
290
  * Return the size of the chessboard, assuming it is built with the given attributes.
263
291
  */
264
- static size(attr?: Partial<Pick<ChessboardProps, 'squareSize' | 'coordinateVisible' | 'turnVisible' | 'smallScreenLimits'>>): { width: number, height: number } {
265
- let { squareSize, coordinateVisible, turnVisible, smallScreenLimits } = sanitizePartialObject(attr, () => new IllegalArgument('Chessboard.size()', 'attr'));
292
+ static size(attr?: ChessboardSizeAttr): { width: number, height: number } {
293
+ const { squareSize, coordinateVisible, turnVisible, smallScreenLimits, topComponent, bottomComponent } = sanitizePartialObject(attr,
294
+ () => new IllegalArgument('Chessboard.size()', 'attr'));
266
295
 
267
296
  // Sanitize the arguments.
268
- squareSize = squareSize === undefined ? DEFAULT_SQUARE_SIZE :
297
+ let actualSquareSize = squareSize === undefined ? DEFAULT_SQUARE_SIZE :
269
298
  sanitizeBoundedInteger(squareSize, MIN_SQUARE_SIZE, MAX_SQUARE_SIZE, () => new IllegalArgument('Chessboard.size()', 'squareSize'));
270
- coordinateVisible = coordinateVisible === undefined ? true : sanitizeBoolean(coordinateVisible);
271
- turnVisible = turnVisible === undefined ? true : sanitizeBoolean(turnVisible);
272
- smallScreenLimits = sanitizeSmallScreenLimits(smallScreenLimits, () => new IllegalArgument('Chessboard.size()', 'smallScreenLimits'));
299
+ let actualCoordinateVisible = coordinateVisible === undefined ? true : sanitizeBoolean(coordinateVisible);
300
+ let actualTurnVisible = turnVisible === undefined ? true : sanitizeBoolean(turnVisible);
301
+ const actualLimits = sanitizeSmallScreenLimits(smallScreenLimits, () => new IllegalArgument('Chessboard.size()', 'smallScreenLimits'));
273
302
 
274
303
  // Enforce small-screen limits, if any.
275
304
  if (typeof window !== 'undefined') {
276
- squareSize = computeSquareSizeForSmallScreens(squareSize, smallScreenLimits, window.innerWidth);
277
- coordinateVisible = computeCoordinateVisibleForSmallScreens(coordinateVisible, smallScreenLimits, window.innerWidth);
278
- turnVisible = computeTurnVisibleForSmallScreens(turnVisible, smallScreenLimits, window.innerWidth);
305
+ actualSquareSize = computeSquareSizeForSmallScreens(actualSquareSize, actualLimits, window.innerWidth);
306
+ actualCoordinateVisible = computeCoordinateVisibleForSmallScreens(actualCoordinateVisible, actualLimits, window.innerWidth);
307
+ actualTurnVisible = computeTurnVisibleForSmallScreens(actualTurnVisible, actualLimits, window.innerWidth);
279
308
  }
280
309
 
281
310
  // Compute the dimensions.
282
- return chessboardSize(squareSize, coordinateVisible, turnVisible);
311
+ return chessBoardWithAuxilliaryComponentSize(actualSquareSize, actualCoordinateVisible, actualTurnVisible, topComponent, bottomComponent);
283
312
  }
284
313
 
285
314
  /**
286
315
  * Return the maximum square size that would allow the chessboard to fit in a rectangle of size `width x height`.
287
316
  */
288
- static adaptSquareSize(width: number, height: number, attr?: Partial<Pick<ChessboardProps, 'coordinateVisible' | 'turnVisible' | 'smallScreenLimits'>>): number {
289
- let { coordinateVisible, turnVisible, smallScreenLimits } = sanitizePartialObject(attr, () => new IllegalArgument('Chessboard.adaptSquareSize()', 'attr'));
317
+ static adaptSquareSize(width: number, height: number, attr?: ChessboardAdaptSquareSizeAttr): number {
318
+ const { coordinateVisible, turnVisible, smallScreenLimits, topComponent, bottomComponent } = sanitizePartialObject(attr,
319
+ () => new IllegalArgument('Chessboard.adaptSquareSize()', 'attr'));
290
320
 
291
321
  // Sanitize the arguments.
292
322
  width = sanitizeInteger(width, () => new IllegalArgument('Chessboard.adaptSquareSize()', 'width'));
293
323
  height = sanitizeInteger(height, () => new IllegalArgument('Chessboard.adaptSquareSize()', 'height'));
294
- coordinateVisible = coordinateVisible === undefined ? true : sanitizeBoolean(coordinateVisible);
295
- turnVisible = turnVisible === undefined ? true : sanitizeBoolean(turnVisible);
296
- smallScreenLimits = sanitizeSmallScreenLimits(smallScreenLimits, () => new IllegalArgument('Chessboard.adaptSquareSize()', 'smallScreenLimits'));
324
+ let actualCoordinateVisible = coordinateVisible === undefined ? true : sanitizeBoolean(coordinateVisible);
325
+ let actualTurnVisible = turnVisible === undefined ? true : sanitizeBoolean(turnVisible);
326
+ const actualLimits = sanitizeSmallScreenLimits(smallScreenLimits, () => new IllegalArgument('Chessboard.adaptSquareSize()', 'smallScreenLimits'));
297
327
 
298
328
  // Enforce small-screen limits, if any.
299
329
  let maxSquareSize = MAX_SQUARE_SIZE;
300
330
  if (typeof window !== 'undefined') {
301
- maxSquareSize = computeSquareSizeForSmallScreens(maxSquareSize, smallScreenLimits, window.innerWidth);
302
- coordinateVisible = computeCoordinateVisibleForSmallScreens(coordinateVisible, smallScreenLimits, window.innerWidth);
303
- turnVisible = computeTurnVisibleForSmallScreens(turnVisible, smallScreenLimits, window.innerWidth);
331
+ maxSquareSize = computeSquareSizeForSmallScreens(maxSquareSize, actualLimits, window.innerWidth);
332
+ actualCoordinateVisible = computeCoordinateVisibleForSmallScreens(actualCoordinateVisible, actualLimits, window.innerWidth);
333
+ actualTurnVisible = computeTurnVisibleForSmallScreens(actualTurnVisible, actualLimits, window.innerWidth);
304
334
  }
305
335
 
306
336
  function isAdapted(squareSize: number) {
307
- const { width: actualWidth, height: actualHeight } = chessboardSize(squareSize, coordinateVisible!, turnVisible!);
337
+ const { width: actualWidth, height: actualHeight } = chessBoardWithAuxilliaryComponentSize(squareSize, actualCoordinateVisible, actualTurnVisible,
338
+ topComponent, bottomComponent);
308
339
  return actualWidth <= width && actualHeight <= height;
309
340
  }
310
341
 
@@ -369,6 +400,31 @@ export class Chessboard extends React.Component<ChessboardProps, ChessboardState
369
400
  }
370
401
 
371
402
 
403
+ function chessBoardWithAuxilliaryComponentSize(squareSize: number, coordinateVisible: boolean, turnVisible: boolean,
404
+ topComponent: AuxilliaryComponentSizeFunction | undefined, bottomComponent: AuxilliaryComponentSizeFunction | undefined): { width: number, height: number } {
405
+
406
+ let { width, height } = chessboardSize(squareSize, coordinateVisible, turnVisible);
407
+ const auxilliaryComponentAttr = {
408
+ squareSize: squareSize,
409
+ coordinateVisible: coordinateVisible,
410
+ turnVisible: turnVisible,
411
+ };
412
+
413
+ if (topComponent) {
414
+ const { width: auxilliaryWidth, height: auxilliaryHeight } = topComponent(auxilliaryComponentAttr);
415
+ width = Math.max(width, auxilliaryWidth);
416
+ height += auxilliaryHeight;
417
+ }
418
+ if (bottomComponent) {
419
+ const { width: auxilliaryWidth, height: auxilliaryHeight } = bottomComponent(auxilliaryComponentAttr);
420
+ width = Math.max(width, auxilliaryWidth);
421
+ height += auxilliaryHeight;
422
+ }
423
+
424
+ return { width: width, height: height };
425
+ }
426
+
427
+
372
428
  /**
373
429
  * Compute the actual square size taking into account the given small-screen limits and window width.
374
430
  */
package/src/index.ts CHANGED
@@ -42,6 +42,6 @@ export { Chessboard, ChessboardProps } from './chessboard/Chessboard';
42
42
  export { formatMove, moveFormatter } from './movetext/moveFormatter';
43
43
  export { Movetext, MovetextProps, MoveSelectEventOrigin } from './movetext/Movetext';
44
44
 
45
- export { NavigationButton, NavigationButtonList, isNavigationButton } from './navigationboard/NavigationButton';
45
+ export { NavigationButton, NavigationBar, NavigationBarScheme, isNavigationButton, isNavigationBar, isNavigationBarScheme } from './navigationboard/NavigationButton';
46
46
  export { firstNodeId, previousNodeId, nextNodeId, lastNodeId } from './navigationboard/NavigationField';
47
47
  export { NavigationBoard, NavigationBoardProps } from './navigationboard/NavigationBoard';
@@ -28,15 +28,15 @@ import { Database, Game, Node as GameNode, Variation } from 'kokopu';
28
28
 
29
29
  import { IllegalArgument } from '../exception';
30
30
  import { i18n } from '../i18n';
31
- import { sanitizeBoolean, sanitizeOptional, sanitizeString } from '../sanitization';
31
+ import { sanitizeBoolean, sanitizeOptional, sanitizeString, sanitizePartialObject } from '../sanitization';
32
32
 
33
33
  import { DynamicBoardGraphicProps, defaultDynamicBoardProps } from '../chessboard/BoardProperties';
34
34
  import { Chessboard } from '../chessboard/Chessboard';
35
35
  import { parseGame } from '../errorbox/parsing';
36
36
  import { NavigationField, firstNodeId, previousNodeId, nextNodeId, lastNodeId } from '../navigationboard/NavigationField';
37
37
  import { GO_FIRST_ICON_PATH, GO_PREVIOUS_ICON_PATH, GO_NEXT_ICON_PATH, GO_LAST_ICON_PATH, PLAY_ICON_PATH, STOP_ICON_PATH, FLIP_ICON_PATH } from './iconPaths';
38
- import { NavigationButton, NavigationButtonList, isNavigationButton } from './NavigationButton';
39
- import { NavigationToolbar } from './NavigationToolbar';
38
+ import { NavigationBar, NavigationBarScheme, isNavigationBar, isNavigationBarScheme } from './NavigationButton';
39
+ import { NavigationToolbar, navigationToolbarSize } from './NavigationToolbar';
40
40
 
41
41
 
42
42
  const INTER_MOVE_DURATION = 1000;
@@ -131,7 +131,34 @@ export interface NavigationBoardProps extends DynamicBoardGraphicProps {
131
131
  /**
132
132
  * Additional buttons to be added to the toolbar.
133
133
  */
134
- additionalButtons: NavigationButton | NavigationButtonList;
134
+ additionalButtons: NavigationBar;
135
+ }
136
+
137
+
138
+ /**
139
+ * Attributes for method `NavigationBoard.size()`.
140
+ */
141
+ interface NavigationBoardSizeAttr {
142
+ squareSize?: NavigationBoardProps['squareSize'];
143
+ coordinateVisible?: NavigationBoardProps['coordinateVisible'];
144
+ turnVisible?: NavigationBoardProps['turnVisible'];
145
+ smallScreenLimits?: NavigationBoardProps['smallScreenLimits'];
146
+ playButtonVisible?: NavigationBoardProps['playButtonVisible'];
147
+ flipButtonVisible?: NavigationBoardProps['flipButtonVisible'];
148
+ additionalButtons?: NavigationBarScheme;
149
+ }
150
+
151
+
152
+ /**
153
+ * Attributes for method `NavigationBoard.adaptSquareSize()`.
154
+ */
155
+ interface NavigationBoardAdaptSquareSizeAttr {
156
+ coordinateVisible?: NavigationBoardProps['coordinateVisible'];
157
+ turnVisible?: NavigationBoardProps['turnVisible'];
158
+ smallScreenLimits?: NavigationBoardProps['smallScreenLimits'];
159
+ playButtonVisible?: NavigationBoardProps['playButtonVisible'];
160
+ flipButtonVisible?: NavigationBoardProps['flipButtonVisible'];
161
+ additionalButtons?: NavigationBarScheme;
135
162
  }
136
163
 
137
164
 
@@ -229,7 +256,9 @@ export class NavigationBoard extends React.Component<NavigationBoardProps, Navig
229
256
  }
230
257
 
231
258
  private renderToolbar(game: Game, node: GameNode | Variation, squareSize: number, isPlaying: boolean) {
232
- const buttons: NavigationButtonList = [];
259
+
260
+ // WARNING: the logic here must be the same as the one in `computeBarScheme()`.
261
+ const buttons: NavigationBar = [];
233
262
 
234
263
  // Core navigation buttons
235
264
  const currentNodeId = node.id();
@@ -260,8 +289,10 @@ export class NavigationBoard extends React.Component<NavigationBoardProps, Navig
260
289
  }
261
290
 
262
291
  // Additional buttons.
263
- const additionalButtons = sanitizeNavigationButtonList(this.props.additionalButtons, () => new IllegalArgument('NavigationBoard', 'additionalButtons'));
264
- for (const button of additionalButtons) {
292
+ if (!isNavigationBar(this.props.additionalButtons)) {
293
+ throw new IllegalArgument('NavigationBoard', 'additionalButtons');
294
+ }
295
+ for (const button of this.props.additionalButtons) {
265
296
  buttons.push(button);
266
297
  }
267
298
 
@@ -326,25 +357,81 @@ export class NavigationBoard extends React.Component<NavigationBoardProps, Navig
326
357
  }
327
358
  }
328
359
 
329
- }
360
+ /**
361
+ * Return the size of the {@link NavigationBoard}, assuming it is built with the given attributes.
362
+ */
363
+ static size(attr?: NavigationBoardSizeAttr): { width: number, height: number } {
364
+ const { squareSize, coordinateVisible, turnVisible, smallScreenLimits, playButtonVisible, flipButtonVisible, additionalButtons } =
365
+ sanitizePartialObject(attr, () => new IllegalArgument('NavigationBoard.size()', 'attr'));
366
+
367
+ // Sanitization
368
+ const actualPlayButtonVisible = sanitizeOptional(playButtonVisible, sanitizeBoolean);
369
+ const actualFlipButtonVisible = sanitizeOptional(flipButtonVisible, sanitizeBoolean);
370
+ if (additionalButtons !== undefined && !isNavigationBarScheme(additionalButtons)) {
371
+ throw new IllegalArgument('NavigationBoard.size()', 'additionalButtons');
372
+ }
330
373
 
374
+ const buttons = computeBarScheme(actualPlayButtonVisible, actualFlipButtonVisible, additionalButtons);
375
+ return Chessboard.size({
376
+ squareSize: squareSize,
377
+ coordinateVisible: coordinateVisible,
378
+ turnVisible: turnVisible,
379
+ smallScreenLimits: smallScreenLimits,
380
+ bottomComponent: ({ squareSize: sz }) => navigationToolbarSize(sz, buttons),
381
+ });
382
+ }
331
383
 
332
- /**
333
- * Sanitization method for the additional button parameter.
334
- */
335
- function sanitizeNavigationButtonList(type: NavigationButton | NavigationButtonList, exceptionBuilder: () => IllegalArgument): NavigationButtonList {
336
- if (Array.isArray(type)) {
337
- return type.map(t => {
338
- if (t !== 'spacer' && !isNavigationButton(t)) {
339
- throw exceptionBuilder();
340
- }
341
- return t;
384
+ /**
385
+ * Return the maximum square size that would allow the {@link NavigationBoard} to fit in a rectangle of size `width x height`.
386
+ */
387
+ static adaptSquareSize(width: number, height: number, attr?: NavigationBoardAdaptSquareSizeAttr): number {
388
+
389
+ const { coordinateVisible, turnVisible, smallScreenLimits, playButtonVisible, flipButtonVisible, additionalButtons } =
390
+ sanitizePartialObject(attr, () => new IllegalArgument('NavigationBoard.adaptSquareSize()', 'attr'));
391
+
392
+ // Sanitization
393
+ const actualPlayButtonVisible = sanitizeOptional(playButtonVisible, sanitizeBoolean);
394
+ const actualFlipButtonVisible = sanitizeOptional(flipButtonVisible, sanitizeBoolean);
395
+ if (additionalButtons !== undefined && !isNavigationBarScheme(additionalButtons)) {
396
+ throw new IllegalArgument('NavigationBoard.adaptSquareSize()', 'additionalButtons');
397
+ }
398
+
399
+ const buttons = computeBarScheme(actualPlayButtonVisible, actualFlipButtonVisible, additionalButtons);
400
+ return Chessboard.adaptSquareSize(width, height, {
401
+ coordinateVisible: coordinateVisible,
402
+ turnVisible: turnVisible,
403
+ smallScreenLimits: smallScreenLimits,
404
+ bottomComponent: ({ squareSize: sz }) => navigationToolbarSize(sz, buttons),
342
405
  });
343
406
  }
344
- else if (isNavigationButton(type)) {
345
- return [ type ];
407
+
408
+ }
409
+
410
+
411
+ function computeBarScheme(playButtonVisible: boolean | undefined, flipButtonVisible: boolean | undefined,
412
+ additionalButtons: NavigationBarScheme | undefined): NavigationBarScheme {
413
+
414
+ // WARNING: the logic here must be the same as the one in `renderToolbar()`.
415
+ const buttons: NavigationBarScheme = [];
416
+
417
+ buttons.push('button'); // go-first
418
+ buttons.push('button'); // go-previous
419
+ if (playButtonVisible ?? NavigationBoard.defaultProps.playButtonVisible) {
420
+ buttons.push('button');
421
+ }
422
+ buttons.push('button'); // go-next
423
+ buttons.push('button'); // go-last
424
+ buttons.push('spacer');
425
+ if (flipButtonVisible ?? NavigationBoard.defaultProps.flipButtonVisible) {
426
+ buttons.push('button');
346
427
  }
347
- else {
348
- throw exceptionBuilder();
428
+ buttons.push('spacer');
429
+
430
+ if (additionalButtons !== undefined) {
431
+ for (const button of additionalButtons) {
432
+ buttons.push(button);
433
+ }
349
434
  }
435
+
436
+ return buttons;
350
437
  }
@@ -55,7 +55,13 @@ export type NavigationButton = {
55
55
  /**
56
56
  * List of additional buttons to be added to the toolbar of {@link NavigationBoard}, together with optional spacers in-between.
57
57
  */
58
- export type NavigationButtonList = (NavigationButton | 'spacer')[];
58
+ export type NavigationBar = (NavigationButton | 'spacer')[];
59
+
60
+
61
+ /**
62
+ * Scheme of additional button list to be added to the toolbar of {@link NavigationBoard}, together with optional spacers in-between.
63
+ */
64
+ export type NavigationBarScheme = ('button' | 'spacer')[];
59
65
 
60
66
 
61
67
  /**
@@ -70,3 +76,39 @@ export function isNavigationButton(button: unknown): button is NavigationButton
70
76
  ((button as NavigationButton).enabled === undefined || typeof (button as NavigationButton).enabled === 'boolean') &&
71
77
  ((button as NavigationButton).onClick === undefined || typeof (button as NavigationButton).onClick === 'function');
72
78
  }
79
+
80
+
81
+ /**
82
+ * Whether the given object is a {@link NavigationBar} or not.
83
+ */
84
+ export function isNavigationBar(buttons: unknown): buttons is NavigationBar {
85
+ if (Array.isArray(buttons)) {
86
+ for (const button of buttons) {
87
+ if (!(isNavigationButton(button) || button === 'spacer')) {
88
+ return false;
89
+ }
90
+ }
91
+ return true;
92
+ }
93
+ else {
94
+ return false;
95
+ }
96
+ }
97
+
98
+
99
+ /**
100
+ * Whether the given object is a {@link NavigationBarScheme} or not.
101
+ */
102
+ export function isNavigationBarScheme(buttons: unknown): buttons is NavigationBarScheme {
103
+ if (Array.isArray(buttons)) {
104
+ for (const button of buttons) {
105
+ if (!(button === 'button' || button === 'spacer')) {
106
+ return false;
107
+ }
108
+ }
109
+ return true;
110
+ }
111
+ else {
112
+ return false;
113
+ }
114
+ }
@@ -24,14 +24,14 @@
24
24
 
25
25
  import * as React from 'react';
26
26
 
27
- import { NavigationButton, NavigationButtonList } from './NavigationButton';
27
+ import { NavigationButton, NavigationBar, NavigationBarScheme } from './NavigationButton';
28
28
 
29
29
  import './NavigationToolbar.css';
30
30
 
31
31
 
32
32
  interface NavigationToolbarProps {
33
33
  squareSize: number;
34
- buttons: NavigationButtonList;
34
+ buttons: NavigationBar;
35
35
  }
36
36
 
37
37
 
@@ -71,7 +71,7 @@ export function NavigationToolbar({ squareSize, buttons }: NavigationToolbarProp
71
71
  />);
72
72
  }
73
73
 
74
- return <div className="kokopu-navigationToolbar" style={{ marginTop: Math.round(buttonSize / 4) }}>{buttonNodes}</div>;
74
+ return <div className="kokopu-navigationToolbar" style={{ marginTop: computeMarginTop(squareSize) }}>{buttonNodes}</div>;
75
75
  }
76
76
 
77
77
 
@@ -101,6 +101,41 @@ function NavigationButtonImpl({ size, spaceOnLeft, spaceOnRight, iconPath, toolt
101
101
  }
102
102
 
103
103
 
104
+ /**
105
+ * Size of the navigation toolbar (taking into account the margin between the toolbar and the chessboard), assuming the given square size.
106
+ */
107
+ export function navigationToolbarSize(squareSize: number, buttons: NavigationBarScheme): { width: number, height: number } {
108
+
109
+ const buttonSize = computeButtonSize(squareSize);
110
+ const spacerSize = computeSpacerSize(squareSize);
111
+ let width = 0;
112
+
113
+ let atLeastOneButtonEncountered = false;
114
+ for (let i = 0; i < buttons.length; ++i) {
115
+
116
+ // Skip the spacers.
117
+ if (buttons[i] === 'spacer') {
118
+ continue;
119
+ }
120
+
121
+ // Enqueue a spacer if necessary.
122
+ // Remark: consecutive spacers are collapsed into a single one for rendering, and spacers at the begin and end of the button list are not rendered.
123
+ if (atLeastOneButtonEncountered && buttons[i - 1] === 'spacer') {
124
+ width += spacerSize;
125
+ }
126
+ atLeastOneButtonEncountered = true;
127
+
128
+ // Enqueue the button node.
129
+ width += buttonSize;
130
+ }
131
+
132
+ return {
133
+ width: width,
134
+ height: buttonSize + computeMarginTop(squareSize),
135
+ };
136
+ }
137
+
138
+
104
139
  /**
105
140
  * Return the height/width of the buttons assuming the given square size.
106
141
  */
@@ -115,3 +150,11 @@ function computeButtonSize(squareSize: number) {
115
150
  function computeSpacerSize(squareSize: number) {
116
151
  return Math.round((squareSize * 2 + 116) / 14);
117
152
  }
153
+
154
+
155
+ /**
156
+ * Return the height of the margin between the toolbar and the chessboard.
157
+ */
158
+ function computeMarginTop(squareSize: number) {
159
+ return Math.round((squareSize * 2 + 116) / 28);
160
+ }
@@ -22,7 +22,7 @@
22
22
  * -------------------------------------------------------------------------- */
23
23
 
24
24
 
25
- const { exception, Chessboard } = require('../build/test_headless/index');
25
+ const { exception, Chessboard, NavigationBoard } = require('../build/test_headless/index');
26
26
  const test = require('unit.js');
27
27
 
28
28
 
@@ -45,6 +45,22 @@ describe('Chessboard.size()', () => {
45
45
  itChessboardSize('Default without turn', 330, 333, { turnVisible: false });
46
46
  itChessboardSize('Default board only', 320, 320, { coordinateVisible: false, turnVisible: false });
47
47
 
48
+ function topComponent({ squareSize, coordinateVisible, turnVisible }) {
49
+ const width = squareSize * 20;
50
+ const height = (coordinateVisible ? 11 : 0) + (turnVisible ? 107 : 0);
51
+ return { width: width, height: height };
52
+ }
53
+
54
+ function bottomComponent({ squareSize, coordinateVisible, turnVisible }) {
55
+ const width = squareSize * 19;
56
+ const height = (coordinateVisible ? 3 : 0) + (turnVisible ? 157 : 0);
57
+ return { width: width, height: height };
58
+ }
59
+
60
+ itChessboardSize('With top component', 800, 451, { topComponent: topComponent });
61
+ itChessboardSize('With bottom component', 760, 493, { bottomComponent: bottomComponent });
62
+ itChessboardSize('With top & bottom components', 800, 611, { topComponent: topComponent, bottomComponent: bottomComponent });
63
+
48
64
  itInvalidArgument('Attribute not an object', () => Chessboard.size('not-an-object'));
49
65
  itInvalidArgument('Square size not an integer', () => Chessboard.size({ squareSize: 'not-an-integer' }));
50
66
  itInvalidArgument('Small-screen limits not an array', () => Chessboard.size({ smallScreenLimits: 'not-an-array' }));
@@ -54,6 +70,38 @@ describe('Chessboard.size()', () => {
54
70
  });
55
71
 
56
72
 
73
+ describe('NavigationBoard.size()', () => {
74
+
75
+ function itNavigationBoardSize(label, expectedWidth, expectedHeight, attr) {
76
+ it(label, () => {
77
+ test.value(NavigationBoard.size(attr)).is({ width: expectedWidth, height: expectedHeight });
78
+ });
79
+ }
80
+
81
+ itNavigationBoardSize('Default', 374, 368);
82
+ itNavigationBoardSize('Minimal square size with all default buttons', 130, 121, {
83
+ squareSize: 12,
84
+ coordinateVisible: false,
85
+ turnVisible: false,
86
+ playButtonVisible: true,
87
+ flipButtonVisible: true,
88
+ });
89
+ itNavigationBoardSize('With additional buttons', 198, 188, {
90
+ squareSize: 20,
91
+ coordinateVisible: false,
92
+ turnVisible: false,
93
+ playButtonVisible: true,
94
+ flipButtonVisible: false,
95
+ additionalButtons: [ 'button', 'button', 'spacer', 'spacer', 'button' ],
96
+ });
97
+
98
+ itInvalidArgument('Attribute not an object', () => NavigationBoard.size('not-an-object'));
99
+ itInvalidArgument('Square size not an integer', () => NavigationBoard.size({ squareSize: 'not-an-integer' }));
100
+ itInvalidArgument('Additional buttons not an array', () => NavigationBoard.size({ additionalButtons: 'not-an-array' }));
101
+ itInvalidArgument('Additional buttons with invalid items', () => NavigationBoard.size({ additionalButtons: [ 'not-a-button-nor-a-spacer' ] }));
102
+ });
103
+
104
+
57
105
  function testAdaptSquareSize(expectedSquareSize, width, height, coordinateVisible, turnVisible, smallScreenLimits) {
58
106
 
59
107
  test.value(Chessboard.adaptSquareSize(width, height, {
@@ -119,6 +167,34 @@ describe('Adapt square-size', () => {
119
167
  });
120
168
 
121
169
 
170
+ describe('Adapt square-size (NavigationBoard)', () => {
171
+
172
+ function itAdaptSquareSize(label, width, height, attributes, expectedSquareSize) {
173
+ it(label, () => {
174
+ test.value(NavigationBoard.adaptSquareSize(width, height, attributes)).is(expectedSquareSize);
175
+
176
+ const actualSizeIncremented = NavigationBoard.size({
177
+ ...attributes,
178
+ squareSize: expectedSquareSize + 1,
179
+ });
180
+ test.value(actualSizeIncremented.width > width || actualSizeIncremented.height > height).isTrue();
181
+ });
182
+ }
183
+
184
+ itAdaptSquareSize('Size 300x300 (default)', 300, 300, {}, 32);
185
+ itAdaptSquareSize('Size 136x200 (with play button)', 136, 200, { coordinateVisible: false, turnVisible: false, playButtonVisible: true }, 15);
186
+ itAdaptSquareSize('Size 136x200 (with minimal buttons)', 136, 200, { coordinateVisible: false, turnVisible: false, flipButtonVisible: false }, 17);
187
+
188
+ itInvalidArgument('Width <null>', () => NavigationBoard.adaptSquareSize(null, 400));
189
+ itInvalidArgument('Width not-a-number', () => NavigationBoard.adaptSquareSize('500', 400));
190
+ itInvalidArgument('Height <undefined>', () => NavigationBoard.adaptSquareSize(500, undefined));
191
+ itInvalidArgument('Height object', () => NavigationBoard.adaptSquareSize(500, {}));
192
+ itInvalidArgument('Attribute not-an-object', () => NavigationBoard.adaptSquareSize(500, 400, 'not-an-object'));
193
+ itInvalidArgument('Additional buttons not an array', () => NavigationBoard.adaptSquareSize(500, 400, { additionalButtons: 'not-an-array' }));
194
+ itInvalidArgument('Small-screen limits not-an-array', () => NavigationBoard.adaptSquareSize(500, 400, { smallScreenLimits: 'not-an-array' }));
195
+ });
196
+
197
+
122
198
  describe('Adapt square-size with small-screen limits', () => {
123
199
 
124
200
  const limits = [
@@ -29,7 +29,7 @@ import { NavigationBoard } from '../../../dist/lib/index';
29
29
  import pgn from '../common/games.pgn';
30
30
 
31
31
  testApp([ /* eslint-disable react/jsx-key */
32
- <NavigationBoard game={pgn} additionalButtons={{ iconPath: 'M 11 11 H 21 V 21 H 11 Z' }} />,
32
+ <NavigationBoard game={pgn} additionalButtons={[ { iconPath: 'M 11 11 H 21 V 21 H 11 Z' } ]} />,
33
33
  <NavigationBoard game={pgn} additionalButtons={[
34
34
  { iconPath: 'M 11 11 H 21 V 21 H 11 Z', tooltip: 'Button 0', enabled: true },
35
35
  { iconPath: 'M 9 16 L 16 9 L 23 16 L 16 23 Z', tooltip: 'Button A', onClick: () => setSandbox('Button A clicked') },