gigaboard 1.5.3 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +18 -0
  2. package/dist/chunk-GL2OZMOW.js +79 -0
  3. package/dist/chunk-GL2OZMOW.js.map +1 -0
  4. package/dist/chunk-KTL53IC3.cjs +82 -0
  5. package/dist/chunk-KTL53IC3.cjs.map +1 -0
  6. package/dist/index.cjs +2 -0
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.js +2 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/pieces/giga-diagram.cjs +17 -0
  11. package/dist/pieces/giga-diagram.cjs.map +1 -0
  12. package/dist/pieces/giga-diagram.d.cts +11 -0
  13. package/dist/pieces/giga-diagram.d.ts +11 -0
  14. package/dist/pieces/giga-diagram.js +4 -0
  15. package/dist/pieces/giga-diagram.js.map +1 -0
  16. package/dist/pieces-svg/giga-diagram/bB.svg +23 -0
  17. package/dist/pieces-svg/giga-diagram/bK.svg +23 -0
  18. package/dist/pieces-svg/giga-diagram/bN.svg +20 -0
  19. package/dist/pieces-svg/giga-diagram/bP.svg +23 -0
  20. package/dist/pieces-svg/giga-diagram/bQ.svg +35 -0
  21. package/dist/pieces-svg/giga-diagram/bR.svg +20 -0
  22. package/dist/pieces-svg/giga-diagram/wB.svg +23 -0
  23. package/dist/pieces-svg/giga-diagram/wK.svg +23 -0
  24. package/dist/pieces-svg/giga-diagram/wN.svg +20 -0
  25. package/dist/pieces-svg/giga-diagram/wP.svg +23 -0
  26. package/dist/pieces-svg/giga-diagram/wQ.svg +35 -0
  27. package/dist/pieces-svg/giga-diagram/wR.svg +20 -0
  28. package/dist/pieces.cjs +7 -1
  29. package/dist/pieces.cjs.map +1 -1
  30. package/dist/pieces.d.cts +2 -0
  31. package/dist/pieces.d.ts +2 -0
  32. package/dist/pieces.js +4 -1
  33. package/dist/pieces.js.map +1 -1
  34. package/dist/server.cjs +1 -0
  35. package/dist/server.cjs.map +1 -1
  36. package/dist/server.js +1 -0
  37. package/dist/server.js.map +1 -1
  38. package/dist/themes.cjs +13 -13
  39. package/dist/themes.js +6 -6
  40. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server.tsx"],"names":[],"mappings":"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","file":"server.js","sourcesContent":["/**\n * `gigaboard/server` — server-only static board.\n *\n * Ships **zero** client JavaScript. No hooks, no state, no event handlers,\n * no imports of any client module. Imports only:\n *\n * - `default-theme.ts`\n * - `default-pieces.tsx`\n * - `types.ts` (types only)\n *\n * Perfect for PGN viewers, position diagrams in blog posts, shareable\n * board URLs, and anywhere a board doesn't need interaction. Renders\n * produce identical markup between Node and the browser so they hydrate\n * cleanly under an interactive `<Chessboard/>` if you later attach one.\n *\n * @example\n * ```tsx\n * import { StaticChessboard } from \"gigaboard/server\";\n *\n * export default function Page() {\n * return (\n * <StaticChessboard fen=\"rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1\" />\n * );\n * }\n * ```\n */\n\nimport type { CSSProperties, ReactNode } from \"react\";\nimport type { BoardCell, SquareIndex } from \"./core/index.js\";\nimport { CSS_VARS, defaultTheme } from \"./default-theme.js\";\nimport { parseFenPlacement } from \"./fen.js\";\nimport { defaultPieces } from \"./pieces/default-pieces.js\";\nimport type { Orientation, PieceRenderer, Theme } from \"./types.js\";\n\n/* ============================================================ geometry */\n\nfunction algebraicOf(index: SquareIndex): string {\n const file = index & 7;\n const rank = index >> 3;\n return `${String.fromCharCode(0x61 + file)}${rank + 1}`;\n}\n\nfunction positionOf(index: SquareIndex, orientation: Orientation): { x: number; y: number } {\n const file = index & 7;\n const rank = index >> 3;\n const col = orientation === \"white\" ? file : 7 - file;\n const row = orientation === \"white\" ? 7 - rank : rank;\n return { x: col * 12.5, y: row * 12.5 };\n}\n\n/* ============================================================ component */\n\n/** Props for {@link StaticChessboard}. */\nexport interface StaticChessboardProps {\n /** Piece-placement FEN (first whitespace-delimited field is enough). */\n readonly fen: string;\n\n /** Board orientation. Defaults to `\"white\"`. */\n readonly orientation?: Orientation;\n\n /** Theme — defaults to the green palette from `gigaboard/themes`. */\n readonly theme?: Theme;\n\n /** Piece renderer — defaults to the `neo` set from `gigaboard/pieces`. */\n readonly pieces?: PieceRenderer;\n\n /** Show algebraic coordinate labels on the edges. Default `true`. */\n readonly showCoordinates?: boolean;\n\n /** Optional container style overrides. */\n readonly style?: CSSProperties;\n\n /** Optional class name on the outer container. */\n readonly className?: string;\n\n /** Accessible label. Default `\"Chess position\"`. */\n readonly ariaLabel?: string;\n}\n\n/**\n * Static board for server rendering. No interactivity; no client JS\n * shipped. Exactly the same visual layout as the interactive\n * `<Chessboard/>`, so a static SSR board can be swapped for an\n * interactive one on hydration without the markup shifting.\n */\nexport function StaticChessboard(props: StaticChessboardProps): ReactNode {\n const {\n fen,\n orientation = \"white\",\n theme = defaultTheme,\n pieces = defaultPieces,\n showCoordinates = true,\n style,\n className,\n ariaLabel = \"Chess position\",\n } = props;\n\n const board = parseFenPlacement(fen);\n const squares = buildSquareOrder(orientation);\n\n const containerStyle: CSSProperties = {\n position: \"relative\",\n aspectRatio: \"1 / 1\",\n width: \"100%\",\n ...(theme as CSSProperties),\n ...style,\n };\n\n return (\n <div\n className={className}\n style={containerStyle}\n data-gb-orientation={orientation}\n data-gb-static=\"true\"\n >\n {/* 8×8 grid of static squares — no event handlers, no tabindex. */}\n <div\n role=\"grid\"\n aria-label={ariaLabel}\n aria-rowcount={8}\n aria-colcount={8}\n aria-readonly=\"true\"\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"grid\",\n gridTemplateColumns: \"repeat(8, 1fr)\",\n gridTemplateRows: \"repeat(8, 1fr)\",\n }}\n >\n {squares.map((index) => {\n const file = index & 7;\n const rank = index >> 3;\n const isLight = (file + rank) % 2 === 1;\n return (\n <div\n key={index}\n role=\"gridcell\"\n aria-label={algebraicOf(index)}\n aria-rowindex={rank + 1}\n aria-colindex={file + 1}\n data-square={algebraicOf(index)}\n data-gb-square=\"\"\n data-light={isLight ? \"true\" : \"false\"}\n style={{\n position: \"relative\",\n backgroundColor: `var(${isLight ? CSS_VARS.SQ_LIGHT : CSS_VARS.SQ_DARK})`,\n backgroundImage: `var(${isLight ? CSS_VARS.SQ_LIGHT_IMAGE : CSS_VARS.SQ_DARK_IMAGE},none)`,\n backgroundSize: `var(${CSS_VARS.SQ_IMAGE_SIZE},cover)`,\n backgroundBlendMode: `var(${CSS_VARS.SQ_BLEND_MODE},normal)`,\n userSelect: \"none\",\n outline: \"none\",\n containerType: \"size\",\n }}\n />\n );\n })}\n </div>\n\n {/* Piece overlay — one div per occupied square. */}\n <div\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n }}\n >\n {Array.from({ length: 64 }, (_, i) => {\n const cell = board[i] as BoardCell;\n if (cell === 0) return null;\n const idx = i as SquareIndex;\n const square = algebraicOf(idx);\n const { x, y } = positionOf(idx, orientation);\n return (\n <div\n key={square}\n data-piece-square={square}\n data-piece-cell={cell}\n style={{\n position: \"absolute\",\n left: `${x}%`,\n top: `${y}%`,\n width: \"12.5%\",\n height: \"12.5%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n containerType: \"size\",\n filter: `var(${cell <= 6 ? CSS_VARS.PIECE_FILTER_WHITE : CSS_VARS.PIECE_FILTER_BLACK}, none)`,\n }}\n >\n {pieces({ cell, square: idx })}\n </div>\n );\n })}\n </div>\n\n {showCoordinates ? <StaticCoordinates orientation={orientation} /> : null}\n </div>\n );\n}\n\n/* ======================================================== subsidiary helpers */\n\n/** Same rank-first ordering used by the interactive BoardGrid. */\nfunction buildSquareOrder(orientation: Orientation): SquareIndex[] {\n const squares: SquareIndex[] = [];\n if (orientation === \"white\") {\n for (let rank = 7; rank >= 0; rank--) {\n for (let file = 0; file < 8; file++) {\n squares.push((rank * 8 + file) as SquareIndex);\n }\n }\n } else {\n for (let rank = 0; rank < 8; rank++) {\n for (let file = 7; file >= 0; file--) {\n squares.push((rank * 8 + file) as SquareIndex);\n }\n }\n }\n return squares;\n}\n\nconst FILE_LETTERS = [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\"] as const;\n\n/** Pure coordinate overlay — identical output to the interactive version. */\nfunction StaticCoordinates({ orientation }: { orientation: Orientation }): ReactNode {\n return (\n <div\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n fontSize: \"min(1.6vmin, 11px)\",\n fontWeight: 600,\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n }}\n >\n {FILE_LETTERS.map((letter, idx) => {\n const col = orientation === \"white\" ? idx : 7 - idx;\n const bottomRank = orientation === \"white\" ? 0 : 7;\n const isLightSquare = (col + bottomRank) % 2 === 1;\n return (\n <span\n key={`file-${letter}`}\n style={{\n position: \"absolute\",\n left: `${col * 12.5 + 10}%`,\n bottom: \"1%\",\n color: `var(${isLightSquare ? CSS_VARS.COORDINATE_LIGHT : CSS_VARS.COORDINATE_DARK})`,\n }}\n >\n {letter}\n </span>\n );\n })}\n {FILE_LETTERS.map((_, idx) => {\n const rank = idx;\n const row = orientation === \"white\" ? 7 - rank : rank;\n const leftFile = orientation === \"white\" ? 0 : 7;\n const isLightSquare = (leftFile + rank) % 2 === 1;\n return (\n <span\n key={`rank-${rank}`}\n style={{\n position: \"absolute\",\n top: `${row * 12.5 + 1}%`,\n left: \"1%\",\n color: `var(${isLightSquare ? CSS_VARS.COORDINATE_LIGHT : CSS_VARS.COORDINATE_DARK})`,\n }}\n >\n {rank + 1}\n </span>\n );\n })}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/server.tsx"],"names":[],"mappings":";;;;;;AAoCA,SAAS,YAAY,KAAA,EAA4B;AAC/C,EAAA,MAAM,OAAO,KAAA,GAAQ,CAAA;AACrB,EAAA,MAAM,OAAO,KAAA,IAAS,CAAA;AACtB,EAAA,OAAO,CAAA,EAAG,OAAO,YAAA,CAAa,EAAA,GAAO,IAAI,CAAC,CAAA,EAAG,OAAO,CAAC,CAAA,CAAA;AACvD;AAEA,SAAS,UAAA,CAAW,OAAoB,WAAA,EAAoD;AAC1F,EAAA,MAAM,OAAO,KAAA,GAAQ,CAAA;AACrB,EAAA,MAAM,OAAO,KAAA,IAAS,CAAA;AACtB,EAAA,MAAM,GAAA,GAAM,WAAA,KAAgB,OAAA,GAAU,IAAA,GAAO,CAAA,GAAI,IAAA;AACjD,EAAA,MAAM,GAAA,GAAM,WAAA,KAAgB,OAAA,GAAU,CAAA,GAAI,IAAA,GAAO,IAAA;AACjD,EAAA,OAAO,EAAE,CAAA,EAAG,GAAA,GAAM,IAAA,EAAM,CAAA,EAAG,MAAM,IAAA,EAAK;AACxC;AAqCO,SAAS,iBAAiB,KAAA,EAAyC;AACxE,EAAA,MAAM;AAAA,IACJ,GAAA;AAAA,IACA,WAAA,GAAc,OAAA;AAAA,IACd,KAAA,GAAQ,YAAA;AAAA,IACR,MAAA,GAAS,aAAA;AAAA,IACT,eAAA,GAAkB,IAAA;AAAA,IAClB,KAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA,GAAY;AAAA,GACd,GAAI,KAAA;AAEJ,EAAA,MAAM,KAAA,GAAQ,kBAAkB,GAAG,CAAA;AACnC,EAAA,MAAM,OAAA,GAAU,iBAAiB,WAAW,CAAA;AAE5C,EAAA,MAAM,cAAA,GAAgC;AAAA,IACpC,QAAA,EAAU,UAAA;AAAA,IACV,WAAA,EAAa,OAAA;AAAA,IACb,KAAA,EAAO,MAAA;AAAA,IACP,GAAI,KAAA;AAAA,IACJ,GAAG;AAAA,GACL;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA,EAAO,cAAA;AAAA,MACP,qBAAA,EAAqB,WAAA;AAAA,MACrB,gBAAA,EAAe,MAAA;AAAA,MACf,GAAA,EAAI,KAAA;AAAA,MAGJ,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,MAAA;AAAA,YACL,YAAA,EAAY,SAAA;AAAA,YACZ,eAAA,EAAe,CAAA;AAAA,YACf,eAAA,EAAe,CAAA;AAAA,YACf,eAAA,EAAc,MAAA;AAAA,YACd,KAAA,EAAO;AAAA,cACL,QAAA,EAAU,UAAA;AAAA,cACV,KAAA,EAAO,CAAA;AAAA,cACP,OAAA,EAAS,MAAA;AAAA,cACT,mBAAA,EAAqB,gBAAA;AAAA,cACrB,gBAAA,EAAkB;AAAA,aACpB;AAAA,YAEC,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,KAAU;AACtB,cAAA,MAAM,OAAO,KAAA,GAAQ,CAAA;AACrB,cAAA,MAAM,OAAO,KAAA,IAAS,CAAA;AACtB,cAAA,MAAM,OAAA,GAAA,CAAW,IAAA,GAAO,IAAA,IAAQ,CAAA,KAAM,CAAA;AACtC,cAAA,uBACE,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEC,IAAA,EAAK,UAAA;AAAA,kBACL,YAAA,EAAY,YAAY,KAAK,CAAA;AAAA,kBAC7B,iBAAe,IAAA,GAAO,CAAA;AAAA,kBACtB,iBAAe,IAAA,GAAO,CAAA;AAAA,kBACtB,aAAA,EAAa,YAAY,KAAK,CAAA;AAAA,kBAC9B,gBAAA,EAAe,EAAA;AAAA,kBACf,YAAA,EAAY,UAAU,MAAA,GAAS,OAAA;AAAA,kBAC/B,KAAA,EAAO;AAAA,oBACL,QAAA,EAAU,UAAA;AAAA,oBACV,iBAAiB,CAAA,IAAA,EAAO,OAAA,GAAU,QAAA,CAAS,QAAA,GAAW,SAAS,OAAO,CAAA,CAAA,CAAA;AAAA,oBACtE,iBAAiB,CAAA,IAAA,EAAO,OAAA,GAAU,QAAA,CAAS,cAAA,GAAiB,SAAS,aAAa,CAAA,MAAA,CAAA;AAAA,oBAClF,cAAA,EAAgB,CAAA,IAAA,EAAO,QAAA,CAAS,aAAa,CAAA,OAAA,CAAA;AAAA,oBAC7C,mBAAA,EAAqB,CAAA,IAAA,EAAO,QAAA,CAAS,aAAa,CAAA,QAAA,CAAA;AAAA,oBAClD,UAAA,EAAY,MAAA;AAAA,oBACZ,OAAA,EAAS,MAAA;AAAA,oBACT,aAAA,EAAe;AAAA;AACjB,iBAAA;AAAA,gBAjBK;AAAA,eAkBP;AAAA,YAEJ,CAAC;AAAA;AAAA,SACH;AAAA,wBAGA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,KAAA,EAAO;AAAA,cACL,QAAA,EAAU,UAAA;AAAA,cACV,KAAA,EAAO,CAAA;AAAA,cACP,aAAA,EAAe;AAAA,aACjB;AAAA,YAEC,QAAA,EAAA,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,IAAG,EAAG,CAAC,GAAG,CAAA,KAAM;AACpC,cAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,cAAA,IAAI,IAAA,KAAS,GAAG,OAAO,IAAA;AACvB,cAAA,MAAM,GAAA,GAAM,CAAA;AACZ,cAAA,MAAM,MAAA,GAAS,YAAY,GAAG,CAAA;AAC9B,cAAA,MAAM,EAAE,CAAA,EAAG,CAAA,EAAE,GAAI,UAAA,CAAW,KAAK,WAAW,CAAA;AAC5C,cAAA,uBACE,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEC,mBAAA,EAAmB,MAAA;AAAA,kBACnB,iBAAA,EAAiB,IAAA;AAAA,kBACjB,KAAA,EAAO;AAAA,oBACL,QAAA,EAAU,UAAA;AAAA,oBACV,IAAA,EAAM,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA,oBACV,GAAA,EAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA,oBACT,KAAA,EAAO,OAAA;AAAA,oBACP,MAAA,EAAQ,OAAA;AAAA,oBACR,OAAA,EAAS,MAAA;AAAA,oBACT,UAAA,EAAY,QAAA;AAAA,oBACZ,cAAA,EAAgB,QAAA;AAAA,oBAChB,aAAA,EAAe,MAAA;AAAA,oBACf,QAAQ,CAAA,IAAA,EAAO,IAAA,IAAQ,IAAI,QAAA,CAAS,kBAAA,GAAqB,SAAS,kBAAkB,CAAA,OAAA;AAAA,mBACtF;AAAA,kBAEC,QAAA,EAAA,MAAA,CAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAK;AAAA,iBAAA;AAAA,gBAhBxB;AAAA,eAiBP;AAAA,YAEJ,CAAC;AAAA;AAAA,SACH;AAAA,QAEC,eAAA,mBAAkB,GAAA,CAAC,iBAAA,EAAA,EAAkB,WAAA,EAA0B,CAAA,GAAK;AAAA;AAAA;AAAA,GACvE;AAEJ;AAKA,SAAS,iBAAiB,WAAA,EAAyC;AACjE,EAAA,MAAM,UAAyB,EAAC;AAChC,EAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,IAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,IAAQ,CAAA,EAAG,IAAA,EAAA,EAAQ;AACpC,MAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,CAAA,EAAG,IAAA,EAAA,EAAQ;AACnC,QAAA,OAAA,CAAQ,IAAA,CAAM,IAAA,GAAO,CAAA,GAAI,IAAoB,CAAA;AAAA,MAC/C;AAAA,IACF;AAAA,EACF,CAAA,MAAO;AACL,IAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,CAAA,EAAG,IAAA,EAAA,EAAQ;AACnC,MAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,IAAQ,CAAA,EAAG,IAAA,EAAA,EAAQ;AACpC,QAAA,OAAA,CAAQ,IAAA,CAAM,IAAA,GAAO,CAAA,GAAI,IAAoB,CAAA;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAEA,IAAM,YAAA,GAAe,CAAC,GAAA,EAAK,GAAA,EAAK,KAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAG5D,SAAS,iBAAA,CAAkB,EAAE,WAAA,EAAY,EAA4C;AACnF,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAY,MAAA;AAAA,MACZ,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,UAAA;AAAA,QACV,KAAA,EAAO,CAAA;AAAA,QACP,aAAA,EAAe,MAAA;AAAA,QACf,QAAA,EAAU,oBAAA;AAAA,QACV,UAAA,EAAY,GAAA;AAAA,QACZ,UAAA,EAAY;AAAA,OACd;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,YAAA,CAAa,GAAA,CAAI,CAAC,MAAA,EAAQ,GAAA,KAAQ;AACjC,UAAA,MAAM,GAAA,GAAM,WAAA,KAAgB,OAAA,GAAU,GAAA,GAAM,CAAA,GAAI,GAAA;AAChD,UAAA,MAAM,UAAA,GAAa,WAAA,KAAgB,OAAA,GAAU,CAAA,GAAI,CAAA;AACjD,UAAA,MAAM,aAAA,GAAA,CAAiB,GAAA,GAAM,UAAA,IAAc,CAAA,KAAM,CAAA;AACjD,UAAA,uBACE,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cAEC,KAAA,EAAO;AAAA,gBACL,QAAA,EAAU,UAAA;AAAA,gBACV,IAAA,EAAM,CAAA,EAAG,GAAA,GAAM,IAAA,GAAO,EAAE,CAAA,CAAA,CAAA;AAAA,gBACxB,MAAA,EAAQ,IAAA;AAAA,gBACR,OAAO,CAAA,IAAA,EAAO,aAAA,GAAgB,QAAA,CAAS,gBAAA,GAAmB,SAAS,eAAe,CAAA,CAAA;AAAA,eACpF;AAAA,cAEC,QAAA,EAAA;AAAA,aAAA;AAAA,YARI,QAAQ,MAAM,CAAA;AAAA,WASrB;AAAA,QAEJ,CAAC,CAAA;AAAA,QACA,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,EAAG,GAAA,KAAQ;AAC5B,UAAA,MAAM,IAAA,GAAO,GAAA;AACb,UAAA,MAAM,GAAA,GAAM,WAAA,KAAgB,OAAA,GAAU,CAAA,GAAI,IAAA,GAAO,IAAA;AACjD,UAAA,MAAM,QAAA,GAAW,WAAA,KAAgB,OAAA,GAAU,CAAA,GAAI,CAAA;AAC/C,UAAA,MAAM,aAAA,GAAA,CAAiB,QAAA,GAAW,IAAA,IAAQ,CAAA,KAAM,CAAA;AAChD,UAAA,uBACE,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cAEC,KAAA,EAAO;AAAA,gBACL,QAAA,EAAU,UAAA;AAAA,gBACV,GAAA,EAAK,CAAA,EAAG,GAAA,GAAM,IAAA,GAAO,CAAC,CAAA,CAAA,CAAA;AAAA,gBACtB,IAAA,EAAM,IAAA;AAAA,gBACN,OAAO,CAAA,IAAA,EAAO,aAAA,GAAgB,QAAA,CAAS,gBAAA,GAAmB,SAAS,eAAe,CAAA,CAAA;AAAA,eACpF;AAAA,cAEC,QAAA,EAAA,IAAA,GAAO;AAAA,aAAA;AAAA,YARH,QAAQ,IAAI,CAAA;AAAA,WASnB;AAAA,QAEJ,CAAC;AAAA;AAAA;AAAA,GACH;AAEJ","file":"server.js","sourcesContent":["/**\n * `gigaboard/server` — server-only static board.\n *\n * Ships **zero** client JavaScript. No hooks, no state, no event handlers,\n * no imports of any client module. Imports only:\n *\n * - `default-theme.ts`\n * - `default-pieces.tsx`\n * - `types.ts` (types only)\n *\n * Perfect for PGN viewers, position diagrams in blog posts, shareable\n * board URLs, and anywhere a board doesn't need interaction. Renders\n * produce identical markup between Node and the browser so they hydrate\n * cleanly under an interactive `<Chessboard/>` if you later attach one.\n *\n * @example\n * ```tsx\n * import { StaticChessboard } from \"gigaboard/server\";\n *\n * export default function Page() {\n * return (\n * <StaticChessboard fen=\"rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1\" />\n * );\n * }\n * ```\n */\n\nimport type { CSSProperties, ReactNode } from \"react\";\nimport type { BoardCell, SquareIndex } from \"./core/index.js\";\nimport { CSS_VARS, defaultTheme } from \"./default-theme.js\";\nimport { parseFenPlacement } from \"./fen.js\";\nimport { defaultPieces } from \"./pieces/default-pieces.js\";\nimport type { Orientation, PieceRenderer, Theme } from \"./types.js\";\n\n/* ============================================================ geometry */\n\nfunction algebraicOf(index: SquareIndex): string {\n const file = index & 7;\n const rank = index >> 3;\n return `${String.fromCharCode(0x61 + file)}${rank + 1}`;\n}\n\nfunction positionOf(index: SquareIndex, orientation: Orientation): { x: number; y: number } {\n const file = index & 7;\n const rank = index >> 3;\n const col = orientation === \"white\" ? file : 7 - file;\n const row = orientation === \"white\" ? 7 - rank : rank;\n return { x: col * 12.5, y: row * 12.5 };\n}\n\n/* ============================================================ component */\n\n/** Props for {@link StaticChessboard}. */\nexport interface StaticChessboardProps {\n /** Piece-placement FEN (first whitespace-delimited field is enough). */\n readonly fen: string;\n\n /** Board orientation. Defaults to `\"white\"`. */\n readonly orientation?: Orientation;\n\n /** Theme — defaults to the green palette from `gigaboard/themes`. */\n readonly theme?: Theme;\n\n /** Piece renderer — defaults to the `neo` set from `gigaboard/pieces`. */\n readonly pieces?: PieceRenderer;\n\n /** Show algebraic coordinate labels on the edges. Default `true`. */\n readonly showCoordinates?: boolean;\n\n /** Optional container style overrides. */\n readonly style?: CSSProperties;\n\n /** Optional class name on the outer container. */\n readonly className?: string;\n\n /** Accessible label. Default `\"Chess position\"`. */\n readonly ariaLabel?: string;\n}\n\n/**\n * Static board for server rendering. No interactivity; no client JS\n * shipped. Exactly the same visual layout as the interactive\n * `<Chessboard/>`, so a static SSR board can be swapped for an\n * interactive one on hydration without the markup shifting.\n */\nexport function StaticChessboard(props: StaticChessboardProps): ReactNode {\n const {\n fen,\n orientation = \"white\",\n theme = defaultTheme,\n pieces = defaultPieces,\n showCoordinates = true,\n style,\n className,\n ariaLabel = \"Chess position\",\n } = props;\n\n const board = parseFenPlacement(fen);\n const squares = buildSquareOrder(orientation);\n\n const containerStyle: CSSProperties = {\n position: \"relative\",\n aspectRatio: \"1 / 1\",\n width: \"100%\",\n ...(theme as CSSProperties),\n ...style,\n };\n\n return (\n <div\n className={className}\n style={containerStyle}\n data-gb-orientation={orientation}\n data-gb-static=\"true\"\n dir=\"ltr\"\n >\n {/* 8×8 grid of static squares — no event handlers, no tabindex. */}\n <div\n role=\"grid\"\n aria-label={ariaLabel}\n aria-rowcount={8}\n aria-colcount={8}\n aria-readonly=\"true\"\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"grid\",\n gridTemplateColumns: \"repeat(8, 1fr)\",\n gridTemplateRows: \"repeat(8, 1fr)\",\n }}\n >\n {squares.map((index) => {\n const file = index & 7;\n const rank = index >> 3;\n const isLight = (file + rank) % 2 === 1;\n return (\n <div\n key={index}\n role=\"gridcell\"\n aria-label={algebraicOf(index)}\n aria-rowindex={rank + 1}\n aria-colindex={file + 1}\n data-square={algebraicOf(index)}\n data-gb-square=\"\"\n data-light={isLight ? \"true\" : \"false\"}\n style={{\n position: \"relative\",\n backgroundColor: `var(${isLight ? CSS_VARS.SQ_LIGHT : CSS_VARS.SQ_DARK})`,\n backgroundImage: `var(${isLight ? CSS_VARS.SQ_LIGHT_IMAGE : CSS_VARS.SQ_DARK_IMAGE},none)`,\n backgroundSize: `var(${CSS_VARS.SQ_IMAGE_SIZE},cover)`,\n backgroundBlendMode: `var(${CSS_VARS.SQ_BLEND_MODE},normal)`,\n userSelect: \"none\",\n outline: \"none\",\n containerType: \"size\",\n }}\n />\n );\n })}\n </div>\n\n {/* Piece overlay — one div per occupied square. */}\n <div\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n }}\n >\n {Array.from({ length: 64 }, (_, i) => {\n const cell = board[i] as BoardCell;\n if (cell === 0) return null;\n const idx = i as SquareIndex;\n const square = algebraicOf(idx);\n const { x, y } = positionOf(idx, orientation);\n return (\n <div\n key={square}\n data-piece-square={square}\n data-piece-cell={cell}\n style={{\n position: \"absolute\",\n left: `${x}%`,\n top: `${y}%`,\n width: \"12.5%\",\n height: \"12.5%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n containerType: \"size\",\n filter: `var(${cell <= 6 ? CSS_VARS.PIECE_FILTER_WHITE : CSS_VARS.PIECE_FILTER_BLACK}, none)`,\n }}\n >\n {pieces({ cell, square: idx })}\n </div>\n );\n })}\n </div>\n\n {showCoordinates ? <StaticCoordinates orientation={orientation} /> : null}\n </div>\n );\n}\n\n/* ======================================================== subsidiary helpers */\n\n/** Same rank-first ordering used by the interactive BoardGrid. */\nfunction buildSquareOrder(orientation: Orientation): SquareIndex[] {\n const squares: SquareIndex[] = [];\n if (orientation === \"white\") {\n for (let rank = 7; rank >= 0; rank--) {\n for (let file = 0; file < 8; file++) {\n squares.push((rank * 8 + file) as SquareIndex);\n }\n }\n } else {\n for (let rank = 0; rank < 8; rank++) {\n for (let file = 7; file >= 0; file--) {\n squares.push((rank * 8 + file) as SquareIndex);\n }\n }\n }\n return squares;\n}\n\nconst FILE_LETTERS = [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\"] as const;\n\n/** Pure coordinate overlay — identical output to the interactive version. */\nfunction StaticCoordinates({ orientation }: { orientation: Orientation }): ReactNode {\n return (\n <div\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n fontSize: \"min(1.6vmin, 11px)\",\n fontWeight: 600,\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n }}\n >\n {FILE_LETTERS.map((letter, idx) => {\n const col = orientation === \"white\" ? idx : 7 - idx;\n const bottomRank = orientation === \"white\" ? 0 : 7;\n const isLightSquare = (col + bottomRank) % 2 === 1;\n return (\n <span\n key={`file-${letter}`}\n style={{\n position: \"absolute\",\n left: `${col * 12.5 + 10}%`,\n bottom: \"1%\",\n color: `var(${isLightSquare ? CSS_VARS.COORDINATE_LIGHT : CSS_VARS.COORDINATE_DARK})`,\n }}\n >\n {letter}\n </span>\n );\n })}\n {FILE_LETTERS.map((_, idx) => {\n const rank = idx;\n const row = orientation === \"white\" ? 7 - rank : rank;\n const leftFile = orientation === \"white\" ? 0 : 7;\n const isLightSquare = (leftFile + rank) % 2 === 1;\n return (\n <span\n key={`rank-${rank}`}\n style={{\n position: \"absolute\",\n top: `${row * 12.5 + 1}%`,\n left: \"1%\",\n color: `var(${isLightSquare ? CSS_VARS.COORDINATE_LIGHT : CSS_VARS.COORDINATE_DARK})`,\n }}\n >\n {rank + 1}\n </span>\n );\n })}\n </div>\n );\n}\n"]}
package/dist/themes.cjs CHANGED
@@ -1,6 +1,8 @@
1
1
  'use strict';
2
2
 
3
+ var chunkUERUICKB_cjs = require('./chunk-UERUICKB.cjs');
3
4
  var chunkVYSVIIZA_cjs = require('./chunk-VYSVIIZA.cjs');
5
+ var chunkFW54YBHD_cjs = require('./chunk-FW54YBHD.cjs');
4
6
  var chunkLIC3EXRR_cjs = require('./chunk-LIC3EXRR.cjs');
5
7
  var chunkTUO6GFCZ_cjs = require('./chunk-TUO6GFCZ.cjs');
6
8
  var chunkZZQ5FPWF_cjs = require('./chunk-ZZQ5FPWF.cjs');
@@ -8,19 +10,17 @@ var chunkUF32KQA3_cjs = require('./chunk-UF32KQA3.cjs');
8
10
  var chunkXQO7TG53_cjs = require('./chunk-XQO7TG53.cjs');
9
11
  var chunkZB2G3XMO_cjs = require('./chunk-ZB2G3XMO.cjs');
10
12
  var chunkF2QTCQXE_cjs = require('./chunk-F2QTCQXE.cjs');
11
- var chunkUERUICKB_cjs = require('./chunk-UERUICKB.cjs');
13
+ var chunkCMV3NVR3_cjs = require('./chunk-CMV3NVR3.cjs');
12
14
  var chunk5OGPVD4R_cjs = require('./chunk-5OGPVD4R.cjs');
13
15
  var chunk76PL52EB_cjs = require('./chunk-76PL52EB.cjs');
14
16
  var chunkA3HBH676_cjs = require('./chunk-A3HBH676.cjs');
15
17
  var chunkM6NSGIVF_cjs = require('./chunk-M6NSGIVF.cjs');
16
18
  var chunkQIIIL4BN_cjs = require('./chunk-QIIIL4BN.cjs');
17
19
  var chunk6ZEPUUY5_cjs = require('./chunk-6ZEPUUY5.cjs');
18
- var chunkFW54YBHD_cjs = require('./chunk-FW54YBHD.cjs');
19
20
  var chunkB26QLI2K_cjs = require('./chunk-B26QLI2K.cjs');
20
21
  var chunkHSMILJKQ_cjs = require('./chunk-HSMILJKQ.cjs');
21
22
  var chunkFICI4AMA_cjs = require('./chunk-FICI4AMA.cjs');
22
23
  var chunkJHWYLKFQ_cjs = require('./chunk-JHWYLKFQ.cjs');
23
- var chunkCMV3NVR3_cjs = require('./chunk-CMV3NVR3.cjs');
24
24
  var chunkG6ZFOJZR_cjs = require('./chunk-G6ZFOJZR.cjs');
25
25
 
26
26
  // src/themes/index.ts
@@ -50,10 +50,18 @@ var themes = Object.freeze({
50
50
  });
51
51
  var PACKAGE_VERSION = "1.3.3";
52
52
 
53
+ Object.defineProperty(exports, "walnut", {
54
+ enumerable: true,
55
+ get: function () { return chunkUERUICKB_cjs.walnut; }
56
+ });
53
57
  Object.defineProperty(exports, "wood", {
54
58
  enumerable: true,
55
59
  get: function () { return chunkVYSVIIZA_cjs.wood; }
56
60
  });
61
+ Object.defineProperty(exports, "leather", {
62
+ enumerable: true,
63
+ get: function () { return chunkFW54YBHD_cjs.leather; }
64
+ });
57
65
  Object.defineProperty(exports, "marble", {
58
66
  enumerable: true,
59
67
  get: function () { return chunkLIC3EXRR_cjs.marble; }
@@ -82,9 +90,9 @@ Object.defineProperty(exports, "tritanopia", {
82
90
  enumerable: true,
83
91
  get: function () { return chunkF2QTCQXE_cjs.tritanopia; }
84
92
  });
85
- Object.defineProperty(exports, "walnut", {
93
+ Object.defineProperty(exports, "chesscomBlue", {
86
94
  enumerable: true,
87
- get: function () { return chunkUERUICKB_cjs.walnut; }
95
+ get: function () { return chunkCMV3NVR3_cjs.chesscomBlue; }
88
96
  });
89
97
  Object.defineProperty(exports, "chesscomGreen", {
90
98
  enumerable: true,
@@ -110,10 +118,6 @@ Object.defineProperty(exports, "ic", {
110
118
  enumerable: true,
111
119
  get: function () { return chunk6ZEPUUY5_cjs.ic; }
112
120
  });
113
- Object.defineProperty(exports, "leather", {
114
- enumerable: true,
115
- get: function () { return chunkFW54YBHD_cjs.leather; }
116
- });
117
121
  Object.defineProperty(exports, "blue", {
118
122
  enumerable: true,
119
123
  get: function () { return chunkB26QLI2K_cjs.blue; }
@@ -130,10 +134,6 @@ Object.defineProperty(exports, "canvas", {
130
134
  enumerable: true,
131
135
  get: function () { return chunkJHWYLKFQ_cjs.canvas; }
132
136
  });
133
- Object.defineProperty(exports, "chesscomBlue", {
134
- enumerable: true,
135
- get: function () { return chunkCMV3NVR3_cjs.chesscomBlue; }
136
- });
137
137
  Object.defineProperty(exports, "green", {
138
138
  enumerable: true,
139
139
  get: function () { return chunkG6ZFOJZR_cjs.green; }
package/dist/themes.js CHANGED
@@ -1,5 +1,9 @@
1
+ import { walnut } from './chunk-AWNSXENI.js';
2
+ export { walnut } from './chunk-AWNSXENI.js';
1
3
  import { wood } from './chunk-NAA5O4BT.js';
2
4
  export { wood } from './chunk-NAA5O4BT.js';
5
+ import { leather } from './chunk-NB62E57G.js';
6
+ export { leather } from './chunk-NB62E57G.js';
3
7
  import { marble } from './chunk-52DIWDSX.js';
4
8
  export { marble } from './chunk-52DIWDSX.js';
5
9
  import { neon } from './chunk-EWAHJSTZ.js';
@@ -14,8 +18,8 @@ import { purple } from './chunk-RNC76LWZ.js';
14
18
  export { purple } from './chunk-RNC76LWZ.js';
15
19
  import { tritanopia } from './chunk-375XPUCQ.js';
16
20
  export { tritanopia } from './chunk-375XPUCQ.js';
17
- import { walnut } from './chunk-AWNSXENI.js';
18
- export { walnut } from './chunk-AWNSXENI.js';
21
+ import { chesscomBlue } from './chunk-3DEOTW2M.js';
22
+ export { chesscomBlue } from './chunk-3DEOTW2M.js';
19
23
  import { chesscomGreen } from './chunk-WNFJK4HA.js';
20
24
  export { chesscomGreen } from './chunk-WNFJK4HA.js';
21
25
  import { darkWood } from './chunk-35HQL3AK.js';
@@ -28,8 +32,6 @@ import { highContrast } from './chunk-XQW5XTYT.js';
28
32
  export { highContrast } from './chunk-XQW5XTYT.js';
29
33
  import { ic } from './chunk-WD7Y2RDG.js';
30
34
  export { ic } from './chunk-WD7Y2RDG.js';
31
- import { leather } from './chunk-NB62E57G.js';
32
- export { leather } from './chunk-NB62E57G.js';
33
35
  import { blue } from './chunk-P72B3YTG.js';
34
36
  export { blue } from './chunk-P72B3YTG.js';
35
37
  import { brown } from './chunk-5WAOEWKS.js';
@@ -38,8 +40,6 @@ import { cafeCreme } from './chunk-W5WAATJ7.js';
38
40
  export { cafeCreme } from './chunk-W5WAATJ7.js';
39
41
  import { canvas } from './chunk-KYPCPATQ.js';
40
42
  export { canvas } from './chunk-KYPCPATQ.js';
41
- import { chesscomBlue } from './chunk-3DEOTW2M.js';
42
- export { chesscomBlue } from './chunk-3DEOTW2M.js';
43
43
  import { green } from './chunk-OQLY5GJF.js';
44
44
  export { green } from './chunk-OQLY5GJF.js';
45
45
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gigaboard",
3
- "version": "1.5.3",
3
+ "version": "1.6.0",
4
4
  "description": "Ultra-fast React chessboard with owned state, byte-scoped subscriptions, refs-only drag, polished default theme and pieces, sounds, arrows, premoves, and SSR static rendering.",
5
5
  "license": "MIT",
6
6
  "author": "Yahor Barkouski (forked as gigaboard)",
@@ -128,7 +128,7 @@
128
128
  "LICENSE"
129
129
  ],
130
130
  "scripts": {
131
- "build": "tsup && mkdir -p dist/sounds && cp src/sounds/*.mp3 dist/sounds/",
131
+ "build": "tsup && mkdir -p dist/sounds dist/pieces-svg/giga-diagram && cp src/sounds/*.mp3 dist/sounds/ && cp src/pieces/svg/giga-diagram/*.svg dist/pieces-svg/giga-diagram/",
132
132
  "dev": "tsup --watch",
133
133
  "lint": "biome check src test",
134
134
  "typecheck": "tsc --noEmit",