gigaboard 1.3.2 → 1.3.4

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 (226) hide show
  1. package/README.md +28 -8
  2. package/dist/chunk-35HQL3AK.js +19 -0
  3. package/dist/chunk-35HQL3AK.js.map +1 -0
  4. package/dist/chunk-375XPUCQ.js +18 -0
  5. package/dist/chunk-375XPUCQ.js.map +1 -0
  6. package/dist/chunk-3DEOTW2M.js +16 -0
  7. package/dist/chunk-3DEOTW2M.js.map +1 -0
  8. package/dist/chunk-3UFHYHMR.js +16 -0
  9. package/dist/chunk-3UFHYHMR.js.map +1 -0
  10. package/dist/chunk-52DIWDSX.js +18 -0
  11. package/dist/chunk-52DIWDSX.js.map +1 -0
  12. package/dist/chunk-5OGPVD4R.cjs +18 -0
  13. package/dist/chunk-5OGPVD4R.cjs.map +1 -0
  14. package/dist/chunk-6S6THNZP.js +24 -0
  15. package/dist/chunk-6S6THNZP.js.map +1 -0
  16. package/dist/chunk-6ZEPUUY5.cjs +18 -0
  17. package/dist/chunk-6ZEPUUY5.cjs.map +1 -0
  18. package/dist/chunk-76PL52EB.cjs +21 -0
  19. package/dist/chunk-76PL52EB.cjs.map +1 -0
  20. package/dist/chunk-A3HBH676.cjs +20 -0
  21. package/dist/chunk-A3HBH676.cjs.map +1 -0
  22. package/dist/chunk-AWNSXENI.js +18 -0
  23. package/dist/chunk-AWNSXENI.js.map +1 -0
  24. package/dist/chunk-CMV3NVR3.cjs +18 -0
  25. package/dist/chunk-CMV3NVR3.cjs.map +1 -0
  26. package/dist/{chunk-I4BQGFP5.cjs → chunk-D45G3J5E.cjs} +8 -2
  27. package/dist/chunk-D45G3J5E.cjs.map +1 -0
  28. package/dist/{chunk-CXDGJMYL.js → chunk-EJUGH25P.js} +8 -2
  29. package/dist/chunk-EJUGH25P.js.map +1 -0
  30. package/dist/chunk-EWAHJSTZ.js +18 -0
  31. package/dist/chunk-EWAHJSTZ.js.map +1 -0
  32. package/dist/chunk-F2QTCQXE.cjs +20 -0
  33. package/dist/chunk-F2QTCQXE.cjs.map +1 -0
  34. package/dist/chunk-FACLRSNS.js +16 -0
  35. package/dist/chunk-FACLRSNS.js.map +1 -0
  36. package/dist/chunk-FICI4AMA.cjs +24 -0
  37. package/dist/chunk-FICI4AMA.cjs.map +1 -0
  38. package/dist/chunk-FW54YBHD.cjs +23 -0
  39. package/dist/chunk-FW54YBHD.cjs.map +1 -0
  40. package/dist/chunk-HL6YTFI6.js +18 -0
  41. package/dist/chunk-HL6YTFI6.js.map +1 -0
  42. package/dist/chunk-JHWYLKFQ.cjs +23 -0
  43. package/dist/chunk-JHWYLKFQ.cjs.map +1 -0
  44. package/dist/chunk-KYPCPATQ.js +21 -0
  45. package/dist/chunk-KYPCPATQ.js.map +1 -0
  46. package/dist/chunk-LIC3EXRR.cjs +20 -0
  47. package/dist/chunk-LIC3EXRR.cjs.map +1 -0
  48. package/dist/chunk-M6NSGIVF.cjs +24 -0
  49. package/dist/chunk-M6NSGIVF.cjs.map +1 -0
  50. package/dist/chunk-MDBGFL5S.js +22 -0
  51. package/dist/chunk-MDBGFL5S.js.map +1 -0
  52. package/dist/chunk-NB62E57G.js +21 -0
  53. package/dist/chunk-NB62E57G.js.map +1 -0
  54. package/dist/{chunk-P24JILQQ.js → chunk-OQZ7MNMY.js} +12 -6
  55. package/dist/chunk-OQZ7MNMY.js.map +1 -0
  56. package/dist/chunk-QIIIL4BN.cjs +20 -0
  57. package/dist/chunk-QIIIL4BN.cjs.map +1 -0
  58. package/dist/chunk-RNC76LWZ.js +16 -0
  59. package/dist/chunk-RNC76LWZ.js.map +1 -0
  60. package/dist/chunk-TUO6GFCZ.cjs +20 -0
  61. package/dist/chunk-TUO6GFCZ.cjs.map +1 -0
  62. package/dist/chunk-UERUICKB.cjs +20 -0
  63. package/dist/chunk-UERUICKB.cjs.map +1 -0
  64. package/dist/chunk-UF32KQA3.cjs +18 -0
  65. package/dist/chunk-UF32KQA3.cjs.map +1 -0
  66. package/dist/{chunk-6VYZY2Y4.cjs → chunk-VYTDPENJ.cjs} +12 -6
  67. package/dist/chunk-VYTDPENJ.cjs.map +1 -0
  68. package/dist/chunk-W5WAATJ7.js +22 -0
  69. package/dist/chunk-W5WAATJ7.js.map +1 -0
  70. package/dist/chunk-WD7Y2RDG.js +16 -0
  71. package/dist/chunk-WD7Y2RDG.js.map +1 -0
  72. package/dist/chunk-WNFJK4HA.js +16 -0
  73. package/dist/chunk-WNFJK4HA.js.map +1 -0
  74. package/dist/chunk-XQO7TG53.cjs +18 -0
  75. package/dist/chunk-XQO7TG53.cjs.map +1 -0
  76. package/dist/chunk-XQW5XTYT.js +18 -0
  77. package/dist/chunk-XQW5XTYT.js.map +1 -0
  78. package/dist/chunk-ZB2G3XMO.cjs +18 -0
  79. package/dist/chunk-ZB2G3XMO.cjs.map +1 -0
  80. package/dist/chunk-ZZQ5FPWF.cjs +26 -0
  81. package/dist/chunk-ZZQ5FPWF.cjs.map +1 -0
  82. package/dist/core.cjs +44 -44
  83. package/dist/core.d.cts +1 -1
  84. package/dist/core.d.ts +1 -1
  85. package/dist/core.js +1 -1
  86. package/dist/index.cjs +89 -73
  87. package/dist/index.cjs.map +1 -1
  88. package/dist/index.d.cts +7 -1
  89. package/dist/index.d.ts +7 -1
  90. package/dist/index.js +29 -13
  91. package/dist/index.js.map +1 -1
  92. package/dist/pieces.cjs +1 -1
  93. package/dist/pieces.cjs.map +1 -1
  94. package/dist/pieces.d.cts +1 -1
  95. package/dist/pieces.d.ts +1 -1
  96. package/dist/pieces.js +1 -1
  97. package/dist/pieces.js.map +1 -1
  98. package/dist/server.cjs +15 -8
  99. package/dist/server.cjs.map +1 -1
  100. package/dist/server.js +10 -3
  101. package/dist/server.js.map +1 -1
  102. package/dist/themes/blue.d.cts +255 -3
  103. package/dist/themes/blue.d.ts +255 -3
  104. package/dist/themes/cafeCreme.cjs +12 -0
  105. package/dist/themes/cafeCreme.cjs.map +1 -0
  106. package/dist/themes/cafeCreme.d.cts +1 -0
  107. package/dist/themes/cafeCreme.d.ts +1 -0
  108. package/dist/themes/cafeCreme.js +3 -0
  109. package/dist/themes/cafeCreme.js.map +1 -0
  110. package/dist/themes/canvas.cjs +12 -0
  111. package/dist/themes/canvas.cjs.map +1 -0
  112. package/dist/themes/canvas.d.cts +1 -0
  113. package/dist/themes/canvas.d.ts +1 -0
  114. package/dist/themes/canvas.js +3 -0
  115. package/dist/themes/canvas.js.map +1 -0
  116. package/dist/themes/chesscomBlue.cjs +12 -0
  117. package/dist/themes/chesscomBlue.cjs.map +1 -0
  118. package/dist/themes/chesscomBlue.d.cts +1 -0
  119. package/dist/themes/chesscomBlue.d.ts +1 -0
  120. package/dist/themes/chesscomBlue.js +3 -0
  121. package/dist/themes/chesscomBlue.js.map +1 -0
  122. package/dist/themes/chesscomGreen.cjs +12 -0
  123. package/dist/themes/chesscomGreen.cjs.map +1 -0
  124. package/dist/themes/chesscomGreen.d.cts +1 -0
  125. package/dist/themes/chesscomGreen.d.ts +1 -0
  126. package/dist/themes/chesscomGreen.js +3 -0
  127. package/dist/themes/chesscomGreen.js.map +1 -0
  128. package/dist/themes/darkWood.cjs +12 -0
  129. package/dist/themes/darkWood.cjs.map +1 -0
  130. package/dist/themes/darkWood.d.cts +1 -0
  131. package/dist/themes/darkWood.d.ts +1 -0
  132. package/dist/themes/darkWood.js +3 -0
  133. package/dist/themes/darkWood.js.map +1 -0
  134. package/dist/themes/deuteranopia.cjs +12 -0
  135. package/dist/themes/deuteranopia.cjs.map +1 -0
  136. package/dist/themes/deuteranopia.d.cts +1 -0
  137. package/dist/themes/deuteranopia.d.ts +1 -0
  138. package/dist/themes/deuteranopia.js +3 -0
  139. package/dist/themes/deuteranopia.js.map +1 -0
  140. package/dist/themes/espresso.cjs +12 -0
  141. package/dist/themes/espresso.cjs.map +1 -0
  142. package/dist/themes/espresso.d.cts +1 -0
  143. package/dist/themes/espresso.d.ts +1 -0
  144. package/dist/themes/espresso.js +3 -0
  145. package/dist/themes/espresso.js.map +1 -0
  146. package/dist/themes/green.d.cts +1 -1
  147. package/dist/themes/green.d.ts +1 -1
  148. package/dist/themes/highContrast.cjs +12 -0
  149. package/dist/themes/highContrast.cjs.map +1 -0
  150. package/dist/themes/highContrast.d.cts +1 -0
  151. package/dist/themes/highContrast.d.ts +1 -0
  152. package/dist/themes/highContrast.js +3 -0
  153. package/dist/themes/highContrast.js.map +1 -0
  154. package/dist/themes/ic.cjs +12 -0
  155. package/dist/themes/ic.cjs.map +1 -0
  156. package/dist/themes/ic.d.cts +1 -0
  157. package/dist/themes/ic.d.ts +1 -0
  158. package/dist/themes/ic.js +3 -0
  159. package/dist/themes/ic.js.map +1 -0
  160. package/dist/themes/leather.cjs +12 -0
  161. package/dist/themes/leather.cjs.map +1 -0
  162. package/dist/themes/leather.d.cts +1 -0
  163. package/dist/themes/leather.d.ts +1 -0
  164. package/dist/themes/leather.js +3 -0
  165. package/dist/themes/leather.js.map +1 -0
  166. package/dist/themes/marble.cjs +12 -0
  167. package/dist/themes/marble.cjs.map +1 -0
  168. package/dist/themes/marble.d.cts +1 -0
  169. package/dist/themes/marble.d.ts +1 -0
  170. package/dist/themes/marble.js +3 -0
  171. package/dist/themes/marble.js.map +1 -0
  172. package/dist/themes/neon.cjs +12 -0
  173. package/dist/themes/neon.cjs.map +1 -0
  174. package/dist/themes/neon.d.cts +1 -0
  175. package/dist/themes/neon.d.ts +1 -0
  176. package/dist/themes/neon.js +3 -0
  177. package/dist/themes/neon.js.map +1 -0
  178. package/dist/themes/newspaper.cjs +12 -0
  179. package/dist/themes/newspaper.cjs.map +1 -0
  180. package/dist/themes/newspaper.d.cts +1 -0
  181. package/dist/themes/newspaper.d.ts +1 -0
  182. package/dist/themes/newspaper.js +3 -0
  183. package/dist/themes/newspaper.js.map +1 -0
  184. package/dist/themes/olive.cjs +12 -0
  185. package/dist/themes/olive.cjs.map +1 -0
  186. package/dist/themes/olive.d.cts +1 -0
  187. package/dist/themes/olive.d.ts +1 -0
  188. package/dist/themes/olive.js +3 -0
  189. package/dist/themes/olive.js.map +1 -0
  190. package/dist/themes/pink.cjs +12 -0
  191. package/dist/themes/pink.cjs.map +1 -0
  192. package/dist/themes/pink.d.cts +1 -0
  193. package/dist/themes/pink.d.ts +1 -0
  194. package/dist/themes/pink.js +3 -0
  195. package/dist/themes/pink.js.map +1 -0
  196. package/dist/themes/purple.cjs +12 -0
  197. package/dist/themes/purple.cjs.map +1 -0
  198. package/dist/themes/purple.d.cts +1 -0
  199. package/dist/themes/purple.d.ts +1 -0
  200. package/dist/themes/purple.js +3 -0
  201. package/dist/themes/purple.js.map +1 -0
  202. package/dist/themes/tritanopia.cjs +12 -0
  203. package/dist/themes/tritanopia.cjs.map +1 -0
  204. package/dist/themes/tritanopia.d.cts +1 -0
  205. package/dist/themes/tritanopia.d.ts +1 -0
  206. package/dist/themes/tritanopia.js +3 -0
  207. package/dist/themes/tritanopia.js.map +1 -0
  208. package/dist/themes/walnut.cjs +12 -0
  209. package/dist/themes/walnut.cjs.map +1 -0
  210. package/dist/themes/walnut.d.cts +1 -0
  211. package/dist/themes/walnut.d.ts +1 -0
  212. package/dist/themes/walnut.js +3 -0
  213. package/dist/themes/walnut.js.map +1 -0
  214. package/dist/themes/wood.d.cts +1 -1
  215. package/dist/themes/wood.d.ts +1 -1
  216. package/dist/themes.cjs +116 -8
  217. package/dist/themes.cjs.map +1 -1
  218. package/dist/themes.d.cts +1 -1
  219. package/dist/themes.d.ts +1 -1
  220. package/dist/themes.js +60 -6
  221. package/dist/themes.js.map +1 -1
  222. package/package.json +1 -1
  223. package/dist/chunk-6VYZY2Y4.cjs.map +0 -1
  224. package/dist/chunk-CXDGJMYL.js.map +0 -1
  225. package/dist/chunk-I4BQGFP5.cjs.map +0 -1
  226. package/dist/chunk-P24JILQQ.js.map +0 -1
package/README.md CHANGED
@@ -27,7 +27,7 @@
27
27
  * 🛡️ **100% Permissive MIT License**: Engineered from the ground up as a pure React-native replacement for `chessground` without restrictive GPL/AGPL viral licensing.
28
28
  * 🎯 **Instant Synchronous Engine**: Backed by `gigachess` (`createGigachessAdapter`) — zero WASM lag, sub-millisecond frame-0 render without blank screen flashes.
29
29
  * ♿ **First-Class Accessibility (WAI-ARIA)**: Roving tabindex, full keyboard navigation (arrows, Enter, Space, promotion keys), and screen-reader `LiveRegion` announcements.
30
- * 🎨 **Modular Themes & Crisp Piece Sets**: Tree-shakable pieces (~660B/set) and zero-runtime CSS variable themes (`--gb-*`, ~205B/theme).
30
+ * 🎨 **Modular Themes, Textures & Piece Sets**: 22 zero-runtime themes (~205B–430B/theme) with tactile textures, SVG patterns, and independent piece outline/contrast filters for low vision, plus crisp tree-shakable pieces (~660B/set).
31
31
  * 🏹 **Hardware Canvas Arrow Engine**: Imperative high-DPI 2D canvas arrows, freehand gestures, knight L-shapes, and customizable highlight overlays.
32
32
  * 📦 **SSR & React Server Components Ready**: `gigaboard/server` renders static HTML chessboards on Node/Next.js with zero hydration mismatch and zero client JS.
33
33
 
@@ -132,11 +132,11 @@ Mix and match tree-shakable piece sets and CSS-variable themes without bundle bl
132
132
  ```tsx
133
133
  import { Chessboard, useChessGame } from "gigaboard";
134
134
  import { cburnett } from "gigaboard/pieces/cburnett";
135
- import { wood } from "gigaboard/themes/wood";
135
+ import { newspaper } from "gigaboard/themes/newspaper";
136
136
 
137
137
  export function CustomBoard() {
138
138
  const game = useChessGame();
139
- return <Chessboard game={game} pieces={cburnett} theme={wood} />;
139
+ return <Chessboard game={game} pieces={cburnett} theme={newspaper} />;
140
140
  }
141
141
  ```
142
142
 
@@ -147,11 +147,31 @@ Available piece sets (`gigaboard/pieces/*`):
147
147
  * `alpha` (minimalist mobile silhouettes)
148
148
  * `chesscom` (explicit alias for neo)
149
149
 
150
- Available themes (`gigaboard/themes/*`):
151
- * `green` (default chess.com palette)
152
- * `brown` (classic tournament wood)
153
- * `blue` (modern cool contrast)
154
- * `wood` (warm natural board)
150
+ Available themes (`gigaboard/themes/*` — 22 tree-shakable palettes):
151
+ * **Classic**: `green` (default chess.com), `brown` (tournament wood), `blue` (modern cool contrast), `wood` (warm board), `chesscomGreen`, `chesscomBlue`, `ic`
152
+ * **Textured SVG Patterns**: `newspaper` (vintage newsprint grain), `espresso` (rich dark roast grain), `cafeCreme` (warm cafe froth pattern)
153
+ * **Tactile Materials**: `canvas`, `leather`, `marble`, `walnut`, `darkWood`
154
+ * **Modern & Vibrant**: `neon`, `olive`, `pink`, `purple`
155
+ * **Accessibility & Low Vision**: `highContrast` (pure black/white + invert filter), `deuteranopia` (red-green safe), `tritanopia` (blue-yellow safe)
156
+
157
+ #### Square Textures & Piece Filters
158
+
159
+ All themes are zero-runtime CSS custom-property dictionaries (`Theme = Partial<Record<string, string>>`). You can supply textured backgrounds, gradients, blend modes, and piece drop-shadows or outlines directly:
160
+
161
+ ```tsx
162
+ const customTheme = {
163
+ "--gb-sq-light": "#f0d9b5",
164
+ "--gb-sq-dark": "#b58863",
165
+ "--gb-sq-light-image": "radial-gradient(circle, rgba(255,255,255,0.25) 15%, transparent 16%)",
166
+ "--gb-sq-dark-image": "radial-gradient(circle, rgba(0,0,0,0.18) 15%, transparent 16%)",
167
+ "--gb-sq-image-size": "8px 8px",
168
+ "--gb-sq-blend-mode": "multiply",
169
+ "--gb-piece-filter-white": "drop-shadow(0 2px 3px rgba(0, 0, 0, 0.45))",
170
+ "--gb-piece-filter-black": "drop-shadow(0 2px 3px rgba(0, 0, 0, 0.65))",
171
+ };
172
+
173
+ <Chessboard game={game} theme={customTheme} />
174
+ ```
155
175
 
156
176
  ---
157
177
 
@@ -0,0 +1,19 @@
1
+ // src/themes/darkWood.ts
2
+ var darkWood = Object.freeze({
3
+ "--gb-sq-light": "#9e6b45",
4
+ "--gb-sq-dark": "#3d2314",
5
+ "--gb-sq-light-image": "linear-gradient(to bottom, rgba(255, 255, 255, 0.06) 0%, rgba(0, 0, 0, 0.08) 100%)",
6
+ "--gb-sq-dark-image": "linear-gradient(to bottom, rgba(255, 255, 255, 0.04) 0%, rgba(0, 0, 0, 0.16) 100%)",
7
+ "--gb-piece-filter-black": "drop-shadow(0 0 1.5px rgba(255, 255, 255, 0.45))",
8
+ "--gb-last-move": "rgba(240, 195, 75, 0.48)",
9
+ "--gb-selected": "rgba(240, 195, 75, 0.62)",
10
+ "--gb-legal-target": "rgba(0, 0, 0, 0.2)",
11
+ "--gb-legal-target-capture": "rgba(0, 0, 0, 0.4)",
12
+ "--gb-check": "radial-gradient(rgba(240, 40, 40, 0.6) 30%, rgba(240, 40, 40, 0) 80%)",
13
+ "--gb-coord-light": "#3d2314",
14
+ "--gb-coord-dark": "#9e6b45"
15
+ });
16
+
17
+ export { darkWood };
18
+ //# sourceMappingURL=chunk-35HQL3AK.js.map
19
+ //# sourceMappingURL=chunk-35HQL3AK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/themes/darkWood.ts"],"names":[],"mappings":";AAaO,IAAM,QAAA,GAAkB,OAAO,MAAA,CAAO;AAAA,EAC3C,eAAA,EAAiB,SAAA;AAAA,EACjB,cAAA,EAAgB,SAAA;AAAA,EAChB,qBAAA,EACE,oFAAA;AAAA,EACF,oBAAA,EACE,oFAAA;AAAA,EACF,yBAAA,EAA2B,kDAAA;AAAA,EAC3B,gBAAA,EAAkB,0BAAA;AAAA,EAClB,eAAA,EAAiB,0BAAA;AAAA,EACjB,mBAAA,EAAqB,oBAAA;AAAA,EACrB,2BAAA,EAA6B,oBAAA;AAAA,EAC7B,YAAA,EAAc,uEAAA;AAAA,EACd,kBAAA,EAAoB,SAAA;AAAA,EACpB,iBAAA,EAAmB;AACrB,CAAC","file":"chunk-35HQL3AK.js","sourcesContent":["/**\n * Dark Wood theme — golden-brown teak light squares and deep ebony dark squares.\n *\n * High-contrast dark board with subtle piece filters for readability.\n *\n * ```tsx\n * import { darkWood } from \"gigaboard/themes/darkWood\";\n * <Chessboard game={game} theme={darkWood} />\n * ```\n */\n\nimport type { Theme } from \"./index.js\";\n\nexport const darkWood: Theme = Object.freeze({\n \"--gb-sq-light\": \"#9e6b45\",\n \"--gb-sq-dark\": \"#3d2314\",\n \"--gb-sq-light-image\":\n \"linear-gradient(to bottom, rgba(255, 255, 255, 0.06) 0%, rgba(0, 0, 0, 0.08) 100%)\",\n \"--gb-sq-dark-image\":\n \"linear-gradient(to bottom, rgba(255, 255, 255, 0.04) 0%, rgba(0, 0, 0, 0.16) 100%)\",\n \"--gb-piece-filter-black\": \"drop-shadow(0 0 1.5px rgba(255, 255, 255, 0.45))\",\n \"--gb-last-move\": \"rgba(240, 195, 75, 0.48)\",\n \"--gb-selected\": \"rgba(240, 195, 75, 0.62)\",\n \"--gb-legal-target\": \"rgba(0, 0, 0, 0.2)\",\n \"--gb-legal-target-capture\": \"rgba(0, 0, 0, 0.4)\",\n \"--gb-check\": \"radial-gradient(rgba(240, 40, 40, 0.6) 30%, rgba(240, 40, 40, 0) 80%)\",\n \"--gb-coord-light\": \"#3d2314\",\n \"--gb-coord-dark\": \"#9e6b45\",\n});\n"]}
@@ -0,0 +1,18 @@
1
+ // src/themes/tritanopia.ts
2
+ var tritanopia = Object.freeze({
3
+ "--gb-sq-light": "#d6ece5",
4
+ "--gb-sq-dark": "#c75d5d",
5
+ "--gb-piece-filter-white": "drop-shadow(0 0 1px rgba(0, 0, 0, 0.6))",
6
+ "--gb-piece-filter-black": "drop-shadow(0 0 1px rgba(255, 255, 255, 0.6))",
7
+ "--gb-last-move": "rgba(160, 32, 240, 0.45)",
8
+ "--gb-selected": "rgba(160, 32, 240, 0.65)",
9
+ "--gb-legal-target": "rgba(0, 0, 0, 0.18)",
10
+ "--gb-legal-target-capture": "rgba(160, 32, 240, 0.55)",
11
+ "--gb-check": "radial-gradient(rgba(220, 20, 60, 0.7) 30%, rgba(220, 20, 60, 0) 80%)",
12
+ "--gb-coord-light": "#c75d5d",
13
+ "--gb-coord-dark": "#d6ece5"
14
+ });
15
+
16
+ export { tritanopia };
17
+ //# sourceMappingURL=chunk-375XPUCQ.js.map
18
+ //# sourceMappingURL=chunk-375XPUCQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/themes/tritanopia.ts"],"names":[],"mappings":";AAcO,IAAM,UAAA,GAAoB,OAAO,MAAA,CAAO;AAAA,EAC7C,eAAA,EAAiB,SAAA;AAAA,EACjB,cAAA,EAAgB,SAAA;AAAA,EAChB,yBAAA,EAA2B,yCAAA;AAAA,EAC3B,yBAAA,EAA2B,+CAAA;AAAA,EAC3B,gBAAA,EAAkB,0BAAA;AAAA,EAClB,eAAA,EAAiB,0BAAA;AAAA,EACjB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,2BAAA,EAA6B,0BAAA;AAAA,EAC7B,YAAA,EAAc,uEAAA;AAAA,EACd,kBAAA,EAAoB,SAAA;AAAA,EACpB,iBAAA,EAAmB;AACrB,CAAC","file":"chunk-375XPUCQ.js","sourcesContent":["/**\n * Tritanopia theme — accessible palette scientifically tuned for blue-yellow color blindness.\n *\n * Employs clean seafoam teal and muted salmon tones paired with rich magenta/violet\n * highlights to ensure clarity for blue-yellow color vision deficiency.\n *\n * ```tsx\n * import { tritanopia } from \"gigaboard/themes/tritanopia\";\n * <Chessboard game={game} theme={tritanopia} />\n * ```\n */\n\nimport type { Theme } from \"./index.js\";\n\nexport const tritanopia: Theme = Object.freeze({\n \"--gb-sq-light\": \"#d6ece5\",\n \"--gb-sq-dark\": \"#c75d5d\",\n \"--gb-piece-filter-white\": \"drop-shadow(0 0 1px rgba(0, 0, 0, 0.6))\",\n \"--gb-piece-filter-black\": \"drop-shadow(0 0 1px rgba(255, 255, 255, 0.6))\",\n \"--gb-last-move\": \"rgba(160, 32, 240, 0.45)\",\n \"--gb-selected\": \"rgba(160, 32, 240, 0.65)\",\n \"--gb-legal-target\": \"rgba(0, 0, 0, 0.18)\",\n \"--gb-legal-target-capture\": \"rgba(160, 32, 240, 0.55)\",\n \"--gb-check\": \"radial-gradient(rgba(220, 20, 60, 0.7) 30%, rgba(220, 20, 60, 0) 80%)\",\n \"--gb-coord-light\": \"#c75d5d\",\n \"--gb-coord-dark\": \"#d6ece5\",\n});\n"]}
@@ -0,0 +1,16 @@
1
+ // src/themes/chesscomBlue.ts
2
+ var chesscomBlue = Object.freeze({
3
+ "--gb-sq-light": "#dee3e6",
4
+ "--gb-sq-dark": "#8ca2ad",
5
+ "--gb-last-move": "rgba(122, 178, 216, 0.5)",
6
+ "--gb-selected": "rgba(122, 178, 216, 0.65)",
7
+ "--gb-legal-target": "rgba(0, 0, 0, 0.14)",
8
+ "--gb-legal-target-capture": "rgba(0, 0, 0, 0.3)",
9
+ "--gb-check": "radial-gradient(rgba(255, 0, 0, 0.55) 30%, rgba(255, 0, 0, 0) 80%)",
10
+ "--gb-coord-light": "#8ca2ad",
11
+ "--gb-coord-dark": "#dee3e6"
12
+ });
13
+
14
+ export { chesscomBlue };
15
+ //# sourceMappingURL=chunk-3DEOTW2M.js.map
16
+ //# sourceMappingURL=chunk-3DEOTW2M.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/themes/chesscomBlue.ts"],"names":[],"mappings":";AAWO,IAAM,YAAA,GAAsB,OAAO,MAAA,CAAO;AAAA,EAC/C,eAAA,EAAiB,SAAA;AAAA,EACjB,cAAA,EAAgB,SAAA;AAAA,EAChB,gBAAA,EAAkB,0BAAA;AAAA,EAClB,eAAA,EAAiB,2BAAA;AAAA,EACjB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,2BAAA,EAA6B,oBAAA;AAAA,EAC7B,YAAA,EAAc,oEAAA;AAAA,EACd,kBAAA,EAAoB,SAAA;AAAA,EACpB,iBAAA,EAAmB;AACrB,CAAC","file":"chunk-3DEOTW2M.js","sourcesContent":["/**\n * Chess.com Blue theme — exact standard web blue/slate palette.\n *\n * ```tsx\n * import { chesscomBlue } from \"gigaboard/themes/chesscomBlue\";\n * <Chessboard game={game} theme={chesscomBlue} />\n * ```\n */\n\nimport type { Theme } from \"./index.js\";\n\nexport const chesscomBlue: Theme = Object.freeze({\n \"--gb-sq-light\": \"#dee3e6\",\n \"--gb-sq-dark\": \"#8ca2ad\",\n \"--gb-last-move\": \"rgba(122, 178, 216, 0.5)\",\n \"--gb-selected\": \"rgba(122, 178, 216, 0.65)\",\n \"--gb-legal-target\": \"rgba(0, 0, 0, 0.14)\",\n \"--gb-legal-target-capture\": \"rgba(0, 0, 0, 0.3)\",\n \"--gb-check\": \"radial-gradient(rgba(255, 0, 0, 0.55) 30%, rgba(255, 0, 0, 0) 80%)\",\n \"--gb-coord-light\": \"#8ca2ad\",\n \"--gb-coord-dark\": \"#dee3e6\",\n});\n"]}
@@ -0,0 +1,16 @@
1
+ // src/themes/olive.ts
2
+ var olive = Object.freeze({
3
+ "--gb-sq-light": "#e8e4c9",
4
+ "--gb-sq-dark": "#748259",
5
+ "--gb-last-move": "rgba(205, 220, 57, 0.45)",
6
+ "--gb-selected": "rgba(205, 220, 57, 0.6)",
7
+ "--gb-legal-target": "rgba(0, 0, 0, 0.14)",
8
+ "--gb-legal-target-capture": "rgba(0, 0, 0, 0.3)",
9
+ "--gb-check": "radial-gradient(rgba(255, 0, 0, 0.55) 30%, rgba(255, 0, 0, 0) 80%)",
10
+ "--gb-coord-light": "#748259",
11
+ "--gb-coord-dark": "#e8e4c9"
12
+ });
13
+
14
+ export { olive };
15
+ //# sourceMappingURL=chunk-3UFHYHMR.js.map
16
+ //# sourceMappingURL=chunk-3UFHYHMR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/themes/olive.ts"],"names":[],"mappings":";AAaO,IAAM,KAAA,GAAe,OAAO,MAAA,CAAO;AAAA,EACxC,eAAA,EAAiB,SAAA;AAAA,EACjB,cAAA,EAAgB,SAAA;AAAA,EAChB,gBAAA,EAAkB,0BAAA;AAAA,EAClB,eAAA,EAAiB,yBAAA;AAAA,EACjB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,2BAAA,EAA6B,oBAAA;AAAA,EAC7B,YAAA,EAAc,oEAAA;AAAA,EACd,kBAAA,EAAoB,SAAA;AAAA,EACpB,iBAAA,EAAmB;AACrB,CAAC","file":"chunk-3UFHYHMR.js","sourcesContent":["/**\n * Olive theme — warm sage cream and muted earthy olive.\n *\n * Muted, natural tone that is gentle on the eyes during extended play.\n *\n * ```tsx\n * import { olive } from \"gigaboard/themes/olive\";\n * <Chessboard game={game} theme={olive} />\n * ```\n */\n\nimport type { Theme } from \"./index.js\";\n\nexport const olive: Theme = Object.freeze({\n \"--gb-sq-light\": \"#e8e4c9\",\n \"--gb-sq-dark\": \"#748259\",\n \"--gb-last-move\": \"rgba(205, 220, 57, 0.45)\",\n \"--gb-selected\": \"rgba(205, 220, 57, 0.6)\",\n \"--gb-legal-target\": \"rgba(0, 0, 0, 0.14)\",\n \"--gb-legal-target-capture\": \"rgba(0, 0, 0, 0.3)\",\n \"--gb-check\": \"radial-gradient(rgba(255, 0, 0, 0.55) 30%, rgba(255, 0, 0, 0) 80%)\",\n \"--gb-coord-light\": \"#748259\",\n \"--gb-coord-dark\": \"#e8e4c9\",\n});\n"]}
@@ -0,0 +1,18 @@
1
+ // src/themes/marble.ts
2
+ var marble = Object.freeze({
3
+ "--gb-sq-light": "#e2e6ea",
4
+ "--gb-sq-dark": "#727d85",
5
+ "--gb-sq-light-image": "linear-gradient(135deg, rgba(255, 255, 255, 0.45) 0%, rgba(0, 0, 0, 0.04) 100%)",
6
+ "--gb-sq-dark-image": "linear-gradient(135deg, rgba(255, 255, 255, 0.15) 0%, rgba(0, 0, 0, 0.12) 100%)",
7
+ "--gb-last-move": "rgba(70, 140, 240, 0.42)",
8
+ "--gb-selected": "rgba(70, 140, 240, 0.58)",
9
+ "--gb-legal-target": "rgba(0, 0, 0, 0.14)",
10
+ "--gb-legal-target-capture": "rgba(0, 0, 0, 0.3)",
11
+ "--gb-check": "radial-gradient(rgba(240, 40, 40, 0.6) 30%, rgba(240, 40, 40, 0) 80%)",
12
+ "--gb-coord-light": "#727d85",
13
+ "--gb-coord-dark": "#e2e6ea"
14
+ });
15
+
16
+ export { marble };
17
+ //# sourceMappingURL=chunk-52DIWDSX.js.map
18
+ //# sourceMappingURL=chunk-52DIWDSX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/themes/marble.ts"],"names":[],"mappings":";AAaO,IAAM,MAAA,GAAgB,OAAO,MAAA,CAAO;AAAA,EACzC,eAAA,EAAiB,SAAA;AAAA,EACjB,cAAA,EAAgB,SAAA;AAAA,EAChB,qBAAA,EACE,iFAAA;AAAA,EACF,oBAAA,EACE,iFAAA;AAAA,EACF,gBAAA,EAAkB,0BAAA;AAAA,EAClB,eAAA,EAAiB,0BAAA;AAAA,EACjB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,2BAAA,EAA6B,oBAAA;AAAA,EAC7B,YAAA,EAAc,uEAAA;AAAA,EACd,kBAAA,EAAoB,SAAA;AAAA,EACpB,iBAAA,EAAmB;AACrB,CAAC","file":"chunk-52DIWDSX.js","sourcesContent":["/**\n * Marble theme — cool Carrara white stone and veined slate grey.\n *\n * Classic architectural styling with subtle stone gradients.\n *\n * ```tsx\n * import { marble } from \"gigaboard/themes/marble\";\n * <Chessboard game={game} theme={marble} />\n * ```\n */\n\nimport type { Theme } from \"./index.js\";\n\nexport const marble: Theme = Object.freeze({\n \"--gb-sq-light\": \"#e2e6ea\",\n \"--gb-sq-dark\": \"#727d85\",\n \"--gb-sq-light-image\":\n \"linear-gradient(135deg, rgba(255, 255, 255, 0.45) 0%, rgba(0, 0, 0, 0.04) 100%)\",\n \"--gb-sq-dark-image\":\n \"linear-gradient(135deg, rgba(255, 255, 255, 0.15) 0%, rgba(0, 0, 0, 0.12) 100%)\",\n \"--gb-last-move\": \"rgba(70, 140, 240, 0.42)\",\n \"--gb-selected\": \"rgba(70, 140, 240, 0.58)\",\n \"--gb-legal-target\": \"rgba(0, 0, 0, 0.14)\",\n \"--gb-legal-target-capture\": \"rgba(0, 0, 0, 0.3)\",\n \"--gb-check\": \"radial-gradient(rgba(240, 40, 40, 0.6) 30%, rgba(240, 40, 40, 0) 80%)\",\n \"--gb-coord-light\": \"#727d85\",\n \"--gb-coord-dark\": \"#e2e6ea\",\n});\n"]}
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ // src/themes/chesscomGreen.ts
4
+ var chesscomGreen = Object.freeze({
5
+ "--gb-sq-light": "#eeeed2",
6
+ "--gb-sq-dark": "#769656",
7
+ "--gb-last-move": "rgba(255, 255, 51, 0.5)",
8
+ "--gb-selected": "rgba(255, 255, 51, 0.6)",
9
+ "--gb-legal-target": "rgba(0, 0, 0, 0.14)",
10
+ "--gb-legal-target-capture": "rgba(0, 0, 0, 0.3)",
11
+ "--gb-check": "radial-gradient(rgba(255, 0, 0, 0.55) 30%, rgba(255, 0, 0, 0) 80%)",
12
+ "--gb-coord-light": "#769656",
13
+ "--gb-coord-dark": "#eeeed2"
14
+ });
15
+
16
+ exports.chesscomGreen = chesscomGreen;
17
+ //# sourceMappingURL=chunk-5OGPVD4R.cjs.map
18
+ //# sourceMappingURL=chunk-5OGPVD4R.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/themes/chesscomGreen.ts"],"names":[],"mappings":";;;AAWO,IAAM,aAAA,GAAuB,OAAO,MAAA,CAAO;AAAA,EAChD,eAAA,EAAiB,SAAA;AAAA,EACjB,cAAA,EAAgB,SAAA;AAAA,EAChB,gBAAA,EAAkB,yBAAA;AAAA,EAClB,eAAA,EAAiB,yBAAA;AAAA,EACjB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,2BAAA,EAA6B,oBAAA;AAAA,EAC7B,YAAA,EAAc,oEAAA;AAAA,EACd,kBAAA,EAAoB,SAAA;AAAA,EACpB,iBAAA,EAAmB;AACrB,CAAC","file":"chunk-5OGPVD4R.cjs","sourcesContent":["/**\n * Chess.com Green theme — exact standard web green/cream palette.\n *\n * ```tsx\n * import { chesscomGreen } from \"gigaboard/themes/chesscomGreen\";\n * <Chessboard game={game} theme={chesscomGreen} />\n * ```\n */\n\nimport type { Theme } from \"./index.js\";\n\nexport const chesscomGreen: Theme = Object.freeze({\n \"--gb-sq-light\": \"#eeeed2\",\n \"--gb-sq-dark\": \"#769656\",\n \"--gb-last-move\": \"rgba(255, 255, 51, 0.5)\",\n \"--gb-selected\": \"rgba(255, 255, 51, 0.6)\",\n \"--gb-legal-target\": \"rgba(0, 0, 0, 0.14)\",\n \"--gb-legal-target-capture\": \"rgba(0, 0, 0, 0.3)\",\n \"--gb-check\": \"radial-gradient(rgba(255, 0, 0, 0.55) 30%, rgba(255, 0, 0, 0) 80%)\",\n \"--gb-coord-light\": \"#769656\",\n \"--gb-coord-dark\": \"#eeeed2\",\n});\n"]}
@@ -0,0 +1,24 @@
1
+ // src/themes/newspaper.ts
2
+ var LIGHT_HATCH = `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath d='M0 8L8 0M-1 1L1 -1M7 9L9 7' stroke='%23000' stroke-width='1' stroke-opacity='0.08'/%3E%3C/svg%3E")`;
3
+ var DARK_HATCH = `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath d='M0 8L8 0M-1 1L1 -1M7 9L9 7' stroke='%23000' stroke-width='1.5' stroke-opacity='0.2'/%3E%3C/svg%3E")`;
4
+ var newspaper = Object.freeze({
5
+ "--gb-sq-light": "#ffffff",
6
+ "--gb-sq-dark": "#b8b8b8",
7
+ "--gb-sq-light-image": LIGHT_HATCH,
8
+ "--gb-sq-dark-image": DARK_HATCH,
9
+ "--gb-sq-image-size": "8px 8px",
10
+ "--gb-sq-blend-mode": "multiply",
11
+ "--gb-piece-filter-white": "drop-shadow(0 1px 1.5px rgba(0, 0, 0, 0.45))",
12
+ "--gb-piece-filter-black": "drop-shadow(0 1px 1.5px rgba(255, 255, 255, 0.35))",
13
+ "--gb-last-move": "rgba(0, 0, 0, 0.22)",
14
+ "--gb-selected": "rgba(0, 0, 0, 0.32)",
15
+ "--gb-legal-target": "rgba(0, 0, 0, 0.2)",
16
+ "--gb-legal-target-capture": "rgba(0, 0, 0, 0.38)",
17
+ "--gb-check": "radial-gradient(rgba(200, 0, 0, 0.6) 30%, rgba(200, 0, 0, 0) 80%)",
18
+ "--gb-coord-light": "#777777",
19
+ "--gb-coord-dark": "#ffffff"
20
+ });
21
+
22
+ export { newspaper };
23
+ //# sourceMappingURL=chunk-6S6THNZP.js.map
24
+ //# sourceMappingURL=chunk-6S6THNZP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/themes/newspaper.ts"],"names":[],"mappings":";AAeA,IAAM,WAAA,GACJ,CAAA,sMAAA,CAAA;AAEF,IAAM,UAAA,GACJ,CAAA,uMAAA,CAAA;AAEK,IAAM,SAAA,GAAmB,OAAO,MAAA,CAAO;AAAA,EAC5C,eAAA,EAAiB,SAAA;AAAA,EACjB,cAAA,EAAgB,SAAA;AAAA,EAChB,qBAAA,EAAuB,WAAA;AAAA,EACvB,oBAAA,EAAsB,UAAA;AAAA,EACtB,oBAAA,EAAsB,SAAA;AAAA,EACtB,oBAAA,EAAsB,UAAA;AAAA,EACtB,yBAAA,EAA2B,8CAAA;AAAA,EAC3B,yBAAA,EAA2B,oDAAA;AAAA,EAC3B,gBAAA,EAAkB,qBAAA;AAAA,EAClB,eAAA,EAAiB,qBAAA;AAAA,EACjB,mBAAA,EAAqB,oBAAA;AAAA,EACrB,2BAAA,EAA6B,qBAAA;AAAA,EAC7B,YAAA,EAAc,mEAAA;AAAA,EACd,kBAAA,EAAoB,SAAA;AAAA,EACpB,iBAAA,EAAmB;AACrB,CAAC","file":"chunk-6S6THNZP.js","sourcesContent":["/**\n * Newspaper theme — high-contrast monochrome with diagonal hatching pattern.\n *\n * Inspired by Lichess Newspaper. Light squares feature subtle diagonal lines,\n * and dark squares feature dense cross-hatch patterning using an embedded\n * zero-HTTP SVG data URI.\n *\n * ```tsx\n * import { newspaper } from \"gigaboard/themes/newspaper\";\n * <Chessboard game={game} theme={newspaper} />\n * ```\n */\n\nimport type { Theme } from \"./index.js\";\n\nconst LIGHT_HATCH =\n \"url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath d='M0 8L8 0M-1 1L1 -1M7 9L9 7' stroke='%23000' stroke-width='1' stroke-opacity='0.08'/%3E%3C/svg%3E\\\")\";\n\nconst DARK_HATCH =\n \"url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath d='M0 8L8 0M-1 1L1 -1M7 9L9 7' stroke='%23000' stroke-width='1.5' stroke-opacity='0.2'/%3E%3C/svg%3E\\\")\";\n\nexport const newspaper: Theme = Object.freeze({\n \"--gb-sq-light\": \"#ffffff\",\n \"--gb-sq-dark\": \"#b8b8b8\",\n \"--gb-sq-light-image\": LIGHT_HATCH,\n \"--gb-sq-dark-image\": DARK_HATCH,\n \"--gb-sq-image-size\": \"8px 8px\",\n \"--gb-sq-blend-mode\": \"multiply\",\n \"--gb-piece-filter-white\": \"drop-shadow(0 1px 1.5px rgba(0, 0, 0, 0.45))\",\n \"--gb-piece-filter-black\": \"drop-shadow(0 1px 1.5px rgba(255, 255, 255, 0.35))\",\n \"--gb-last-move\": \"rgba(0, 0, 0, 0.22)\",\n \"--gb-selected\": \"rgba(0, 0, 0, 0.32)\",\n \"--gb-legal-target\": \"rgba(0, 0, 0, 0.2)\",\n \"--gb-legal-target-capture\": \"rgba(0, 0, 0, 0.38)\",\n \"--gb-check\": \"radial-gradient(rgba(200, 0, 0, 0.6) 30%, rgba(200, 0, 0, 0) 80%)\",\n \"--gb-coord-light\": \"#777777\",\n \"--gb-coord-dark\": \"#ffffff\",\n});\n"]}
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ // src/themes/ic.ts
4
+ var ic = Object.freeze({
5
+ "--gb-sq-light": "#eceef2",
6
+ "--gb-sq-dark": "#bac3c7",
7
+ "--gb-last-move": "rgba(100, 160, 220, 0.45)",
8
+ "--gb-selected": "rgba(100, 160, 220, 0.6)",
9
+ "--gb-legal-target": "rgba(0, 0, 0, 0.15)",
10
+ "--gb-legal-target-capture": "rgba(0, 0, 0, 0.3)",
11
+ "--gb-check": "radial-gradient(rgba(255, 0, 0, 0.55) 30%, rgba(255, 0, 0, 0) 80%)",
12
+ "--gb-coord-light": "#bac3c7",
13
+ "--gb-coord-dark": "#eceef2"
14
+ });
15
+
16
+ exports.ic = ic;
17
+ //# sourceMappingURL=chunk-6ZEPUUY5.cjs.map
18
+ //# sourceMappingURL=chunk-6ZEPUUY5.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/themes/ic.ts"],"names":[],"mappings":";;;AAaO,IAAM,EAAA,GAAY,OAAO,MAAA,CAAO;AAAA,EACrC,eAAA,EAAiB,SAAA;AAAA,EACjB,cAAA,EAAgB,SAAA;AAAA,EAChB,gBAAA,EAAkB,2BAAA;AAAA,EAClB,eAAA,EAAiB,0BAAA;AAAA,EACjB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,2BAAA,EAA6B,oBAAA;AAAA,EAC7B,YAAA,EAAc,oEAAA;AAAA,EACd,kBAAA,EAAoB,SAAA;AAAA,EACpB,iBAAA,EAAmB;AACrB,CAAC","file":"chunk-6ZEPUUY5.cjs","sourcesContent":["/**\n * IC theme — icy grey and cold steel blue.\n *\n * Minimalist tournament styling popular in desktop chess GUIs.\n *\n * ```tsx\n * import { ic } from \"gigaboard/themes/ic\";\n * <Chessboard game={game} theme={ic} />\n * ```\n */\n\nimport type { Theme } from \"./index.js\";\n\nexport const ic: Theme = Object.freeze({\n \"--gb-sq-light\": \"#eceef2\",\n \"--gb-sq-dark\": \"#bac3c7\",\n \"--gb-last-move\": \"rgba(100, 160, 220, 0.45)\",\n \"--gb-selected\": \"rgba(100, 160, 220, 0.6)\",\n \"--gb-legal-target\": \"rgba(0, 0, 0, 0.15)\",\n \"--gb-legal-target-capture\": \"rgba(0, 0, 0, 0.3)\",\n \"--gb-check\": \"radial-gradient(rgba(255, 0, 0, 0.55) 30%, rgba(255, 0, 0, 0) 80%)\",\n \"--gb-coord-light\": \"#bac3c7\",\n \"--gb-coord-dark\": \"#eceef2\",\n});\n"]}
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ // src/themes/darkWood.ts
4
+ var darkWood = Object.freeze({
5
+ "--gb-sq-light": "#9e6b45",
6
+ "--gb-sq-dark": "#3d2314",
7
+ "--gb-sq-light-image": "linear-gradient(to bottom, rgba(255, 255, 255, 0.06) 0%, rgba(0, 0, 0, 0.08) 100%)",
8
+ "--gb-sq-dark-image": "linear-gradient(to bottom, rgba(255, 255, 255, 0.04) 0%, rgba(0, 0, 0, 0.16) 100%)",
9
+ "--gb-piece-filter-black": "drop-shadow(0 0 1.5px rgba(255, 255, 255, 0.45))",
10
+ "--gb-last-move": "rgba(240, 195, 75, 0.48)",
11
+ "--gb-selected": "rgba(240, 195, 75, 0.62)",
12
+ "--gb-legal-target": "rgba(0, 0, 0, 0.2)",
13
+ "--gb-legal-target-capture": "rgba(0, 0, 0, 0.4)",
14
+ "--gb-check": "radial-gradient(rgba(240, 40, 40, 0.6) 30%, rgba(240, 40, 40, 0) 80%)",
15
+ "--gb-coord-light": "#3d2314",
16
+ "--gb-coord-dark": "#9e6b45"
17
+ });
18
+
19
+ exports.darkWood = darkWood;
20
+ //# sourceMappingURL=chunk-76PL52EB.cjs.map
21
+ //# sourceMappingURL=chunk-76PL52EB.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/themes/darkWood.ts"],"names":[],"mappings":";;;AAaO,IAAM,QAAA,GAAkB,OAAO,MAAA,CAAO;AAAA,EAC3C,eAAA,EAAiB,SAAA;AAAA,EACjB,cAAA,EAAgB,SAAA;AAAA,EAChB,qBAAA,EACE,oFAAA;AAAA,EACF,oBAAA,EACE,oFAAA;AAAA,EACF,yBAAA,EAA2B,kDAAA;AAAA,EAC3B,gBAAA,EAAkB,0BAAA;AAAA,EAClB,eAAA,EAAiB,0BAAA;AAAA,EACjB,mBAAA,EAAqB,oBAAA;AAAA,EACrB,2BAAA,EAA6B,oBAAA;AAAA,EAC7B,YAAA,EAAc,uEAAA;AAAA,EACd,kBAAA,EAAoB,SAAA;AAAA,EACpB,iBAAA,EAAmB;AACrB,CAAC","file":"chunk-76PL52EB.cjs","sourcesContent":["/**\n * Dark Wood theme — golden-brown teak light squares and deep ebony dark squares.\n *\n * High-contrast dark board with subtle piece filters for readability.\n *\n * ```tsx\n * import { darkWood } from \"gigaboard/themes/darkWood\";\n * <Chessboard game={game} theme={darkWood} />\n * ```\n */\n\nimport type { Theme } from \"./index.js\";\n\nexport const darkWood: Theme = Object.freeze({\n \"--gb-sq-light\": \"#9e6b45\",\n \"--gb-sq-dark\": \"#3d2314\",\n \"--gb-sq-light-image\":\n \"linear-gradient(to bottom, rgba(255, 255, 255, 0.06) 0%, rgba(0, 0, 0, 0.08) 100%)\",\n \"--gb-sq-dark-image\":\n \"linear-gradient(to bottom, rgba(255, 255, 255, 0.04) 0%, rgba(0, 0, 0, 0.16) 100%)\",\n \"--gb-piece-filter-black\": \"drop-shadow(0 0 1.5px rgba(255, 255, 255, 0.45))\",\n \"--gb-last-move\": \"rgba(240, 195, 75, 0.48)\",\n \"--gb-selected\": \"rgba(240, 195, 75, 0.62)\",\n \"--gb-legal-target\": \"rgba(0, 0, 0, 0.2)\",\n \"--gb-legal-target-capture\": \"rgba(0, 0, 0, 0.4)\",\n \"--gb-check\": \"radial-gradient(rgba(240, 40, 40, 0.6) 30%, rgba(240, 40, 40, 0) 80%)\",\n \"--gb-coord-light\": \"#3d2314\",\n \"--gb-coord-dark\": \"#9e6b45\",\n});\n"]}
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ // src/themes/deuteranopia.ts
4
+ var deuteranopia = Object.freeze({
5
+ "--gb-sq-light": "#f2eee3",
6
+ "--gb-sq-dark": "#3b6998",
7
+ "--gb-piece-filter-white": "drop-shadow(0 0 1px rgba(0, 0, 0, 0.7))",
8
+ "--gb-piece-filter-black": "drop-shadow(0 0 1px rgba(255, 255, 255, 0.7))",
9
+ "--gb-last-move": "rgba(255, 191, 0, 0.5)",
10
+ "--gb-selected": "rgba(255, 191, 0, 0.7)",
11
+ "--gb-legal-target": "rgba(0, 0, 0, 0.18)",
12
+ "--gb-legal-target-capture": "rgba(255, 191, 0, 0.6)",
13
+ "--gb-check": "radial-gradient(rgba(0, 100, 255, 0.75) 30%, rgba(0, 100, 255, 0) 80%)",
14
+ "--gb-coord-light": "#3b6998",
15
+ "--gb-coord-dark": "#f2eee3"
16
+ });
17
+
18
+ exports.deuteranopia = deuteranopia;
19
+ //# sourceMappingURL=chunk-A3HBH676.cjs.map
20
+ //# sourceMappingURL=chunk-A3HBH676.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/themes/deuteranopia.ts"],"names":[],"mappings":";;;AAcO,IAAM,YAAA,GAAsB,OAAO,MAAA,CAAO;AAAA,EAC/C,eAAA,EAAiB,SAAA;AAAA,EACjB,cAAA,EAAgB,SAAA;AAAA,EAChB,yBAAA,EAA2B,yCAAA;AAAA,EAC3B,yBAAA,EAA2B,+CAAA;AAAA,EAC3B,gBAAA,EAAkB,wBAAA;AAAA,EAClB,eAAA,EAAiB,wBAAA;AAAA,EACjB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,2BAAA,EAA6B,wBAAA;AAAA,EAC7B,YAAA,EAAc,wEAAA;AAAA,EACd,kBAAA,EAAoB,SAAA;AAAA,EACpB,iBAAA,EAAmB;AACrB,CAAC","file":"chunk-A3HBH676.cjs","sourcesContent":["/**\n * Deuteranopia theme — accessible palette scientifically tuned for red-green color blindness.\n *\n * Replaces red/green cues with high-contrast cobalt blue, warm ivory, and golden-amber\n * highlights to guarantee unambiguous piece and square recognition.\n *\n * ```tsx\n * import { deuteranopia } from \"gigaboard/themes/deuteranopia\";\n * <Chessboard game={game} theme={deuteranopia} />\n * ```\n */\n\nimport type { Theme } from \"./index.js\";\n\nexport const deuteranopia: Theme = Object.freeze({\n \"--gb-sq-light\": \"#f2eee3\",\n \"--gb-sq-dark\": \"#3b6998\",\n \"--gb-piece-filter-white\": \"drop-shadow(0 0 1px rgba(0, 0, 0, 0.7))\",\n \"--gb-piece-filter-black\": \"drop-shadow(0 0 1px rgba(255, 255, 255, 0.7))\",\n \"--gb-last-move\": \"rgba(255, 191, 0, 0.5)\",\n \"--gb-selected\": \"rgba(255, 191, 0, 0.7)\",\n \"--gb-legal-target\": \"rgba(0, 0, 0, 0.18)\",\n \"--gb-legal-target-capture\": \"rgba(255, 191, 0, 0.6)\",\n \"--gb-check\": \"radial-gradient(rgba(0, 100, 255, 0.75) 30%, rgba(0, 100, 255, 0) 80%)\",\n \"--gb-coord-light\": \"#3b6998\",\n \"--gb-coord-dark\": \"#f2eee3\",\n});\n"]}
@@ -0,0 +1,18 @@
1
+ // src/themes/walnut.ts
2
+ var walnut = Object.freeze({
3
+ "--gb-sq-light": "#c9a070",
4
+ "--gb-sq-dark": "#593a22",
5
+ "--gb-sq-light-image": "linear-gradient(to bottom, rgba(255, 255, 255, 0.08) 0%, rgba(0, 0, 0, 0.06) 100%)",
6
+ "--gb-sq-dark-image": "linear-gradient(to bottom, rgba(255, 255, 255, 0.05) 0%, rgba(0, 0, 0, 0.12) 100%)",
7
+ "--gb-last-move": "rgba(235, 180, 60, 0.45)",
8
+ "--gb-selected": "rgba(235, 180, 60, 0.6)",
9
+ "--gb-legal-target": "rgba(0, 0, 0, 0.16)",
10
+ "--gb-legal-target-capture": "rgba(0, 0, 0, 0.32)",
11
+ "--gb-check": "radial-gradient(rgba(240, 40, 40, 0.6) 30%, rgba(240, 40, 40, 0) 80%)",
12
+ "--gb-coord-light": "#593a22",
13
+ "--gb-coord-dark": "#c9a070"
14
+ });
15
+
16
+ export { walnut };
17
+ //# sourceMappingURL=chunk-AWNSXENI.js.map
18
+ //# sourceMappingURL=chunk-AWNSXENI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/themes/walnut.ts"],"names":[],"mappings":";AAaO,IAAM,MAAA,GAAgB,OAAO,MAAA,CAAO;AAAA,EACzC,eAAA,EAAiB,SAAA;AAAA,EACjB,cAAA,EAAgB,SAAA;AAAA,EAChB,qBAAA,EACE,oFAAA;AAAA,EACF,oBAAA,EACE,oFAAA;AAAA,EACF,gBAAA,EAAkB,0BAAA;AAAA,EAClB,eAAA,EAAiB,yBAAA;AAAA,EACjB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,2BAAA,EAA6B,qBAAA;AAAA,EAC7B,YAAA,EAAc,uEAAA;AAAA,EACd,kBAAA,EAAoB,SAAA;AAAA,EACpB,iBAAA,EAAmB;AACrB,CAAC","file":"chunk-AWNSXENI.js","sourcesContent":["/**\n * Walnut theme — deep American walnut heartwood with honey sapwood light squares.\n *\n * Rich furniture-grade tournament board aesthetics.\n *\n * ```tsx\n * import { walnut } from \"gigaboard/themes/walnut\";\n * <Chessboard game={game} theme={walnut} />\n * ```\n */\n\nimport type { Theme } from \"./index.js\";\n\nexport const walnut: Theme = Object.freeze({\n \"--gb-sq-light\": \"#c9a070\",\n \"--gb-sq-dark\": \"#593a22\",\n \"--gb-sq-light-image\":\n \"linear-gradient(to bottom, rgba(255, 255, 255, 0.08) 0%, rgba(0, 0, 0, 0.06) 100%)\",\n \"--gb-sq-dark-image\":\n \"linear-gradient(to bottom, rgba(255, 255, 255, 0.05) 0%, rgba(0, 0, 0, 0.12) 100%)\",\n \"--gb-last-move\": \"rgba(235, 180, 60, 0.45)\",\n \"--gb-selected\": \"rgba(235, 180, 60, 0.6)\",\n \"--gb-legal-target\": \"rgba(0, 0, 0, 0.16)\",\n \"--gb-legal-target-capture\": \"rgba(0, 0, 0, 0.32)\",\n \"--gb-check\": \"radial-gradient(rgba(240, 40, 40, 0.6) 30%, rgba(240, 40, 40, 0) 80%)\",\n \"--gb-coord-light\": \"#593a22\",\n \"--gb-coord-dark\": \"#c9a070\",\n});\n"]}
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ // src/themes/chesscomBlue.ts
4
+ var chesscomBlue = Object.freeze({
5
+ "--gb-sq-light": "#dee3e6",
6
+ "--gb-sq-dark": "#8ca2ad",
7
+ "--gb-last-move": "rgba(122, 178, 216, 0.5)",
8
+ "--gb-selected": "rgba(122, 178, 216, 0.65)",
9
+ "--gb-legal-target": "rgba(0, 0, 0, 0.14)",
10
+ "--gb-legal-target-capture": "rgba(0, 0, 0, 0.3)",
11
+ "--gb-check": "radial-gradient(rgba(255, 0, 0, 0.55) 30%, rgba(255, 0, 0, 0) 80%)",
12
+ "--gb-coord-light": "#8ca2ad",
13
+ "--gb-coord-dark": "#dee3e6"
14
+ });
15
+
16
+ exports.chesscomBlue = chesscomBlue;
17
+ //# sourceMappingURL=chunk-CMV3NVR3.cjs.map
18
+ //# sourceMappingURL=chunk-CMV3NVR3.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/themes/chesscomBlue.ts"],"names":[],"mappings":";;;AAWO,IAAM,YAAA,GAAsB,OAAO,MAAA,CAAO;AAAA,EAC/C,eAAA,EAAiB,SAAA;AAAA,EACjB,cAAA,EAAgB,SAAA;AAAA,EAChB,gBAAA,EAAkB,0BAAA;AAAA,EAClB,eAAA,EAAiB,2BAAA;AAAA,EACjB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,2BAAA,EAA6B,oBAAA;AAAA,EAC7B,YAAA,EAAc,oEAAA;AAAA,EACd,kBAAA,EAAoB,SAAA;AAAA,EACpB,iBAAA,EAAmB;AACrB,CAAC","file":"chunk-CMV3NVR3.cjs","sourcesContent":["/**\n * Chess.com Blue theme — exact standard web blue/slate palette.\n *\n * ```tsx\n * import { chesscomBlue } from \"gigaboard/themes/chesscomBlue\";\n * <Chessboard game={game} theme={chesscomBlue} />\n * ```\n */\n\nimport type { Theme } from \"./index.js\";\n\nexport const chesscomBlue: Theme = Object.freeze({\n \"--gb-sq-light\": \"#dee3e6\",\n \"--gb-sq-dark\": \"#8ca2ad\",\n \"--gb-last-move\": \"rgba(122, 178, 216, 0.5)\",\n \"--gb-selected\": \"rgba(122, 178, 216, 0.65)\",\n \"--gb-legal-target\": \"rgba(0, 0, 0, 0.14)\",\n \"--gb-legal-target-capture\": \"rgba(0, 0, 0, 0.3)\",\n \"--gb-check\": \"radial-gradient(rgba(255, 0, 0, 0.55) 30%, rgba(255, 0, 0, 0) 80%)\",\n \"--gb-coord-light\": \"#8ca2ad\",\n \"--gb-coord-dark\": \"#dee3e6\",\n});\n"]}
@@ -7,6 +7,12 @@ var chunkAYVQCHSG_cjs = require('./chunk-AYVQCHSG.cjs');
7
7
  var CSS_VARS = {
8
8
  SQ_LIGHT: "--gb-sq-light",
9
9
  SQ_DARK: "--gb-sq-dark",
10
+ SQ_LIGHT_IMAGE: "--gb-sq-light-image",
11
+ SQ_DARK_IMAGE: "--gb-sq-dark-image",
12
+ SQ_IMAGE_SIZE: "--gb-sq-image-size",
13
+ SQ_BLEND_MODE: "--gb-sq-blend-mode",
14
+ PIECE_FILTER_WHITE: "--gb-piece-filter-white",
15
+ PIECE_FILTER_BLACK: "--gb-piece-filter-black",
10
16
  LAST_MOVE: "--gb-last-move",
11
17
  SELECTED: "--gb-selected",
12
18
  LEGAL_TARGET: "--gb-legal-target",
@@ -109,5 +115,5 @@ exports.defaultArrowColors = defaultArrowColors;
109
115
  exports.defaultPieces = defaultPieces;
110
116
  exports.defaultTheme = defaultTheme;
111
117
  exports.parseFenPlacement = parseFenPlacement;
112
- //# sourceMappingURL=chunk-I4BQGFP5.cjs.map
113
- //# sourceMappingURL=chunk-I4BQGFP5.cjs.map
118
+ //# sourceMappingURL=chunk-D45G3J5E.cjs.map
119
+ //# sourceMappingURL=chunk-D45G3J5E.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/default-theme.ts","../src/fen.ts","../src/pieces/default-pieces.tsx"],"names":["green","neo"],"mappings":"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","file":"chunk-D45G3J5E.cjs","sourcesContent":["import { green } from \"./themes/green.js\";\nimport type { Theme } from \"./types.js\";\n\n/** Keys every Gigaboard board understands. */\nexport const CSS_VARS = {\n SQ_LIGHT: \"--gb-sq-light\",\n SQ_DARK: \"--gb-sq-dark\",\n SQ_LIGHT_IMAGE: \"--gb-sq-light-image\",\n SQ_DARK_IMAGE: \"--gb-sq-dark-image\",\n SQ_IMAGE_SIZE: \"--gb-sq-image-size\",\n SQ_BLEND_MODE: \"--gb-sq-blend-mode\",\n PIECE_FILTER_WHITE: \"--gb-piece-filter-white\",\n PIECE_FILTER_BLACK: \"--gb-piece-filter-black\",\n LAST_MOVE: \"--gb-last-move\",\n SELECTED: \"--gb-selected\",\n LEGAL_TARGET: \"--gb-legal-target\",\n LEGAL_TARGET_CAPTURE: \"--gb-legal-target-capture\",\n CHECK: \"--gb-check\",\n COORDINATE_LIGHT: \"--gb-coord-light\",\n COORDINATE_DARK: \"--gb-coord-dark\",\n /**\n * Opacity of the piece left behind at the drag origin while the ghost\n * is in flight. Default `0.35` (lichess parity). Themes may override\n * to `0` for a chess.com-style \"piece vanishes\" effect.\n */\n DRAG_GHOST_OPACITY: \"--gb-drag-ghost-opacity\",\n} as const;\n\nexport const defaultTheme: Theme = Object.freeze({\n ...green,\n [CSS_VARS.DRAG_GHOST_OPACITY]: \"0.35\",\n});\n\n/**\n * Default arrow-channel colours. Close to lichess's palette so arrows feel\n * familiar to players migrating over.\n */\nexport const defaultArrowColors = Object.freeze({\n default: \"rgba(21, 120, 27, 0.8)\",\n shift: \"rgba(153, 40, 40, 0.8)\",\n alt: \"rgba(230, 160, 0, 0.8)\",\n ctrl: \"rgba(0, 60, 130, 0.8)\",\n});\n\n/** Distinct blue tint used to preview pending premoves. */\nexport const DEFAULT_PREMOVE_TINT = \"rgba(30, 98, 255, 0.4)\";\n\n/** Red tint used to announce rejected moves. */\nexport const DEFAULT_ILLEGAL_FLASH_TINT = \"rgba(220, 40, 40, 0.55)\";\n","/**\n * FEN placement parsing — the one slice of FEN that both the server\n * `<StaticChessboard/>` and the client fallback-render path need.\n *\n * The parser is intentionally narrow: it only consumes the first\n * whitespace-delimited field of a FEN (piece placement) and returns a\n * 64-byte `Uint8Array` using our {@link BoardCell} encoding. Side-to-move,\n * castling, en-passant and the move clocks are the engine's business and\n * don't affect how the board is drawn.\n *\n * Kept in its own module so that:\n *\n * 1. `server.tsx` can import it without pulling a `\"use client\"` module.\n * 2. The client `<Chessboard/>`'s fallback path (`fallbackFen`) can reuse\n * the exact same parser — one source of truth for FEN shape.\n *\n * Throws on malformed input so misconfiguration fails at render time\n * rather than silently producing a blank board.\n */\n\nimport type { BoardCell } from \"./core/index.js\";\n\n/** FEN piece letter → our 1..12 `BoardCell` code, or 0 for unknown. */\nfunction pieceCellFromFenChar(ch: string): BoardCell {\n switch (ch) {\n case \"P\":\n return 1 as BoardCell;\n case \"N\":\n return 2 as BoardCell;\n case \"B\":\n return 3 as BoardCell;\n case \"R\":\n return 4 as BoardCell;\n case \"Q\":\n return 5 as BoardCell;\n case \"K\":\n return 6 as BoardCell;\n case \"p\":\n return 7 as BoardCell;\n case \"n\":\n return 8 as BoardCell;\n case \"b\":\n return 9 as BoardCell;\n case \"r\":\n return 10 as BoardCell;\n case \"q\":\n return 11 as BoardCell;\n case \"k\":\n return 12 as BoardCell;\n default:\n return 0 as BoardCell;\n }\n}\n\n/**\n * Parse the piece-placement field of a FEN into a 64-byte `Uint8Array`\n * in LERF order (index 0 = a1, index 63 = h8).\n *\n * Only the first whitespace-delimited token is read; anything after it\n * is ignored. That means both a full FEN (`\"rnbq... w KQkq - 0 1\"`) and\n * a bare placement (`\"rnbq...\"`) are accepted.\n */\nexport function parseFenPlacement(fen: string): Uint8Array {\n const placement = fen.trim().split(/\\s+/)[0];\n if (placement === undefined) {\n throw new Error(\"FEN is empty\");\n }\n const ranks = placement.split(\"/\");\n if (ranks.length !== 8) {\n throw new Error(`FEN must have 8 ranks, got ${ranks.length}`);\n }\n const board = new Uint8Array(64);\n for (let r = 0; r < 8; r++) {\n // FEN lists ranks 8→1; our LERF layout has rank 7 at top, 0 at bottom.\n const rank = 7 - r;\n const row = ranks[r];\n if (row === undefined) throw new Error(`FEN rank ${rank + 1} missing`);\n let file = 0;\n for (const ch of row) {\n if (file > 7) throw new Error(`FEN rank ${rank + 1} has too many files`);\n const skip = Number.parseInt(ch, 10);\n if (!Number.isNaN(skip)) {\n file += skip;\n continue;\n }\n const cell = pieceCellFromFenChar(ch);\n if (cell === 0) throw new Error(`FEN contains unknown piece: ${ch}`);\n board[rank * 8 + file] = cell;\n file++;\n }\n if (file !== 8) {\n throw new Error(`FEN rank ${rank + 1} ended at file ${file}, expected 8`);\n }\n }\n return board;\n}\n\n/** Standard starting position FEN, re-exported for convenience. */\nexport const STARTING_FEN = \"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1\";\n","import type { PieceRenderer } from \"../types.js\";\nimport { neo } from \"./sets/neo.js\";\n\nexport const defaultPieces: PieceRenderer = neo;\n"]}
@@ -5,6 +5,12 @@ import { neo } from './chunk-U6WAD322.js';
5
5
  var CSS_VARS = {
6
6
  SQ_LIGHT: "--gb-sq-light",
7
7
  SQ_DARK: "--gb-sq-dark",
8
+ SQ_LIGHT_IMAGE: "--gb-sq-light-image",
9
+ SQ_DARK_IMAGE: "--gb-sq-dark-image",
10
+ SQ_IMAGE_SIZE: "--gb-sq-image-size",
11
+ SQ_BLEND_MODE: "--gb-sq-blend-mode",
12
+ PIECE_FILTER_WHITE: "--gb-piece-filter-white",
13
+ PIECE_FILTER_BLACK: "--gb-piece-filter-black",
8
14
  LAST_MOVE: "--gb-last-move",
9
15
  SELECTED: "--gb-selected",
10
16
  LEGAL_TARGET: "--gb-legal-target",
@@ -101,5 +107,5 @@ function parseFenPlacement(fen) {
101
107
  var defaultPieces = neo;
102
108
 
103
109
  export { CSS_VARS, DEFAULT_ILLEGAL_FLASH_TINT, DEFAULT_PREMOVE_TINT, defaultArrowColors, defaultPieces, defaultTheme, parseFenPlacement };
104
- //# sourceMappingURL=chunk-CXDGJMYL.js.map
105
- //# sourceMappingURL=chunk-CXDGJMYL.js.map
110
+ //# sourceMappingURL=chunk-EJUGH25P.js.map
111
+ //# sourceMappingURL=chunk-EJUGH25P.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/default-theme.ts","../src/fen.ts","../src/pieces/default-pieces.tsx"],"names":[],"mappings":"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","file":"chunk-EJUGH25P.js","sourcesContent":["import { green } from \"./themes/green.js\";\nimport type { Theme } from \"./types.js\";\n\n/** Keys every Gigaboard board understands. */\nexport const CSS_VARS = {\n SQ_LIGHT: \"--gb-sq-light\",\n SQ_DARK: \"--gb-sq-dark\",\n SQ_LIGHT_IMAGE: \"--gb-sq-light-image\",\n SQ_DARK_IMAGE: \"--gb-sq-dark-image\",\n SQ_IMAGE_SIZE: \"--gb-sq-image-size\",\n SQ_BLEND_MODE: \"--gb-sq-blend-mode\",\n PIECE_FILTER_WHITE: \"--gb-piece-filter-white\",\n PIECE_FILTER_BLACK: \"--gb-piece-filter-black\",\n LAST_MOVE: \"--gb-last-move\",\n SELECTED: \"--gb-selected\",\n LEGAL_TARGET: \"--gb-legal-target\",\n LEGAL_TARGET_CAPTURE: \"--gb-legal-target-capture\",\n CHECK: \"--gb-check\",\n COORDINATE_LIGHT: \"--gb-coord-light\",\n COORDINATE_DARK: \"--gb-coord-dark\",\n /**\n * Opacity of the piece left behind at the drag origin while the ghost\n * is in flight. Default `0.35` (lichess parity). Themes may override\n * to `0` for a chess.com-style \"piece vanishes\" effect.\n */\n DRAG_GHOST_OPACITY: \"--gb-drag-ghost-opacity\",\n} as const;\n\nexport const defaultTheme: Theme = Object.freeze({\n ...green,\n [CSS_VARS.DRAG_GHOST_OPACITY]: \"0.35\",\n});\n\n/**\n * Default arrow-channel colours. Close to lichess's palette so arrows feel\n * familiar to players migrating over.\n */\nexport const defaultArrowColors = Object.freeze({\n default: \"rgba(21, 120, 27, 0.8)\",\n shift: \"rgba(153, 40, 40, 0.8)\",\n alt: \"rgba(230, 160, 0, 0.8)\",\n ctrl: \"rgba(0, 60, 130, 0.8)\",\n});\n\n/** Distinct blue tint used to preview pending premoves. */\nexport const DEFAULT_PREMOVE_TINT = \"rgba(30, 98, 255, 0.4)\";\n\n/** Red tint used to announce rejected moves. */\nexport const DEFAULT_ILLEGAL_FLASH_TINT = \"rgba(220, 40, 40, 0.55)\";\n","/**\n * FEN placement parsing — the one slice of FEN that both the server\n * `<StaticChessboard/>` and the client fallback-render path need.\n *\n * The parser is intentionally narrow: it only consumes the first\n * whitespace-delimited field of a FEN (piece placement) and returns a\n * 64-byte `Uint8Array` using our {@link BoardCell} encoding. Side-to-move,\n * castling, en-passant and the move clocks are the engine's business and\n * don't affect how the board is drawn.\n *\n * Kept in its own module so that:\n *\n * 1. `server.tsx` can import it without pulling a `\"use client\"` module.\n * 2. The client `<Chessboard/>`'s fallback path (`fallbackFen`) can reuse\n * the exact same parser — one source of truth for FEN shape.\n *\n * Throws on malformed input so misconfiguration fails at render time\n * rather than silently producing a blank board.\n */\n\nimport type { BoardCell } from \"./core/index.js\";\n\n/** FEN piece letter → our 1..12 `BoardCell` code, or 0 for unknown. */\nfunction pieceCellFromFenChar(ch: string): BoardCell {\n switch (ch) {\n case \"P\":\n return 1 as BoardCell;\n case \"N\":\n return 2 as BoardCell;\n case \"B\":\n return 3 as BoardCell;\n case \"R\":\n return 4 as BoardCell;\n case \"Q\":\n return 5 as BoardCell;\n case \"K\":\n return 6 as BoardCell;\n case \"p\":\n return 7 as BoardCell;\n case \"n\":\n return 8 as BoardCell;\n case \"b\":\n return 9 as BoardCell;\n case \"r\":\n return 10 as BoardCell;\n case \"q\":\n return 11 as BoardCell;\n case \"k\":\n return 12 as BoardCell;\n default:\n return 0 as BoardCell;\n }\n}\n\n/**\n * Parse the piece-placement field of a FEN into a 64-byte `Uint8Array`\n * in LERF order (index 0 = a1, index 63 = h8).\n *\n * Only the first whitespace-delimited token is read; anything after it\n * is ignored. That means both a full FEN (`\"rnbq... w KQkq - 0 1\"`) and\n * a bare placement (`\"rnbq...\"`) are accepted.\n */\nexport function parseFenPlacement(fen: string): Uint8Array {\n const placement = fen.trim().split(/\\s+/)[0];\n if (placement === undefined) {\n throw new Error(\"FEN is empty\");\n }\n const ranks = placement.split(\"/\");\n if (ranks.length !== 8) {\n throw new Error(`FEN must have 8 ranks, got ${ranks.length}`);\n }\n const board = new Uint8Array(64);\n for (let r = 0; r < 8; r++) {\n // FEN lists ranks 8→1; our LERF layout has rank 7 at top, 0 at bottom.\n const rank = 7 - r;\n const row = ranks[r];\n if (row === undefined) throw new Error(`FEN rank ${rank + 1} missing`);\n let file = 0;\n for (const ch of row) {\n if (file > 7) throw new Error(`FEN rank ${rank + 1} has too many files`);\n const skip = Number.parseInt(ch, 10);\n if (!Number.isNaN(skip)) {\n file += skip;\n continue;\n }\n const cell = pieceCellFromFenChar(ch);\n if (cell === 0) throw new Error(`FEN contains unknown piece: ${ch}`);\n board[rank * 8 + file] = cell;\n file++;\n }\n if (file !== 8) {\n throw new Error(`FEN rank ${rank + 1} ended at file ${file}, expected 8`);\n }\n }\n return board;\n}\n\n/** Standard starting position FEN, re-exported for convenience. */\nexport const STARTING_FEN = \"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1\";\n","import type { PieceRenderer } from \"../types.js\";\nimport { neo } from \"./sets/neo.js\";\n\nexport const defaultPieces: PieceRenderer = neo;\n"]}
@@ -0,0 +1,18 @@
1
+ // src/themes/neon.ts
2
+ var neon = Object.freeze({
3
+ "--gb-sq-light": "#00e5ff",
4
+ "--gb-sq-dark": "#121a36",
5
+ "--gb-piece-filter-white": "drop-shadow(0 0 2px #00e5ff)",
6
+ "--gb-piece-filter-black": "drop-shadow(0 0 2px #ff007f)",
7
+ "--gb-last-move": "rgba(255, 0, 128, 0.45)",
8
+ "--gb-selected": "rgba(255, 0, 128, 0.65)",
9
+ "--gb-legal-target": "rgba(0, 229, 255, 0.3)",
10
+ "--gb-legal-target-capture": "rgba(255, 0, 128, 0.5)",
11
+ "--gb-check": "radial-gradient(rgba(255, 0, 80, 0.8) 30%, rgba(255, 0, 80, 0) 80%)",
12
+ "--gb-coord-light": "#121a36",
13
+ "--gb-coord-dark": "#00e5ff"
14
+ });
15
+
16
+ export { neon };
17
+ //# sourceMappingURL=chunk-EWAHJSTZ.js.map
18
+ //# sourceMappingURL=chunk-EWAHJSTZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/themes/neon.ts"],"names":[],"mappings":";AAaO,IAAM,IAAA,GAAc,OAAO,MAAA,CAAO;AAAA,EACvC,eAAA,EAAiB,SAAA;AAAA,EACjB,cAAA,EAAgB,SAAA;AAAA,EAChB,yBAAA,EAA2B,8BAAA;AAAA,EAC3B,yBAAA,EAA2B,8BAAA;AAAA,EAC3B,gBAAA,EAAkB,yBAAA;AAAA,EAClB,eAAA,EAAiB,yBAAA;AAAA,EACjB,mBAAA,EAAqB,wBAAA;AAAA,EACrB,2BAAA,EAA6B,wBAAA;AAAA,EAC7B,YAAA,EAAc,qEAAA;AAAA,EACd,kBAAA,EAAoB,SAAA;AAAA,EACpB,iBAAA,EAAmB;AACrB,CAAC","file":"chunk-EWAHJSTZ.js","sourcesContent":["/**\n * Neon theme — cyberpunk electric cyan and deep midnight navy.\n *\n * Vivid high-energy palette with glowing piece filter accents.\n *\n * ```tsx\n * import { neon } from \"gigaboard/themes/neon\";\n * <Chessboard game={game} theme={neon} />\n * ```\n */\n\nimport type { Theme } from \"./index.js\";\n\nexport const neon: Theme = Object.freeze({\n \"--gb-sq-light\": \"#00e5ff\",\n \"--gb-sq-dark\": \"#121a36\",\n \"--gb-piece-filter-white\": \"drop-shadow(0 0 2px #00e5ff)\",\n \"--gb-piece-filter-black\": \"drop-shadow(0 0 2px #ff007f)\",\n \"--gb-last-move\": \"rgba(255, 0, 128, 0.45)\",\n \"--gb-selected\": \"rgba(255, 0, 128, 0.65)\",\n \"--gb-legal-target\": \"rgba(0, 229, 255, 0.3)\",\n \"--gb-legal-target-capture\": \"rgba(255, 0, 128, 0.5)\",\n \"--gb-check\": \"radial-gradient(rgba(255, 0, 80, 0.8) 30%, rgba(255, 0, 80, 0) 80%)\",\n \"--gb-coord-light\": \"#121a36\",\n \"--gb-coord-dark\": \"#00e5ff\",\n});\n"]}
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ // src/themes/tritanopia.ts
4
+ var tritanopia = Object.freeze({
5
+ "--gb-sq-light": "#d6ece5",
6
+ "--gb-sq-dark": "#c75d5d",
7
+ "--gb-piece-filter-white": "drop-shadow(0 0 1px rgba(0, 0, 0, 0.6))",
8
+ "--gb-piece-filter-black": "drop-shadow(0 0 1px rgba(255, 255, 255, 0.6))",
9
+ "--gb-last-move": "rgba(160, 32, 240, 0.45)",
10
+ "--gb-selected": "rgba(160, 32, 240, 0.65)",
11
+ "--gb-legal-target": "rgba(0, 0, 0, 0.18)",
12
+ "--gb-legal-target-capture": "rgba(160, 32, 240, 0.55)",
13
+ "--gb-check": "radial-gradient(rgba(220, 20, 60, 0.7) 30%, rgba(220, 20, 60, 0) 80%)",
14
+ "--gb-coord-light": "#c75d5d",
15
+ "--gb-coord-dark": "#d6ece5"
16
+ });
17
+
18
+ exports.tritanopia = tritanopia;
19
+ //# sourceMappingURL=chunk-F2QTCQXE.cjs.map
20
+ //# sourceMappingURL=chunk-F2QTCQXE.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/themes/tritanopia.ts"],"names":[],"mappings":";;;AAcO,IAAM,UAAA,GAAoB,OAAO,MAAA,CAAO;AAAA,EAC7C,eAAA,EAAiB,SAAA;AAAA,EACjB,cAAA,EAAgB,SAAA;AAAA,EAChB,yBAAA,EAA2B,yCAAA;AAAA,EAC3B,yBAAA,EAA2B,+CAAA;AAAA,EAC3B,gBAAA,EAAkB,0BAAA;AAAA,EAClB,eAAA,EAAiB,0BAAA;AAAA,EACjB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,2BAAA,EAA6B,0BAAA;AAAA,EAC7B,YAAA,EAAc,uEAAA;AAAA,EACd,kBAAA,EAAoB,SAAA;AAAA,EACpB,iBAAA,EAAmB;AACrB,CAAC","file":"chunk-F2QTCQXE.cjs","sourcesContent":["/**\n * Tritanopia theme — accessible palette scientifically tuned for blue-yellow color blindness.\n *\n * Employs clean seafoam teal and muted salmon tones paired with rich magenta/violet\n * highlights to ensure clarity for blue-yellow color vision deficiency.\n *\n * ```tsx\n * import { tritanopia } from \"gigaboard/themes/tritanopia\";\n * <Chessboard game={game} theme={tritanopia} />\n * ```\n */\n\nimport type { Theme } from \"./index.js\";\n\nexport const tritanopia: Theme = Object.freeze({\n \"--gb-sq-light\": \"#d6ece5\",\n \"--gb-sq-dark\": \"#c75d5d\",\n \"--gb-piece-filter-white\": \"drop-shadow(0 0 1px rgba(0, 0, 0, 0.6))\",\n \"--gb-piece-filter-black\": \"drop-shadow(0 0 1px rgba(255, 255, 255, 0.6))\",\n \"--gb-last-move\": \"rgba(160, 32, 240, 0.45)\",\n \"--gb-selected\": \"rgba(160, 32, 240, 0.65)\",\n \"--gb-legal-target\": \"rgba(0, 0, 0, 0.18)\",\n \"--gb-legal-target-capture\": \"rgba(160, 32, 240, 0.55)\",\n \"--gb-check\": \"radial-gradient(rgba(220, 20, 60, 0.7) 30%, rgba(220, 20, 60, 0) 80%)\",\n \"--gb-coord-light\": \"#c75d5d\",\n \"--gb-coord-dark\": \"#d6ece5\",\n});\n"]}
@@ -0,0 +1,16 @@
1
+ // src/themes/pink.ts
2
+ var pink = Object.freeze({
3
+ "--gb-sq-light": "#f9e4e8",
4
+ "--gb-sq-dark": "#c46d85",
5
+ "--gb-last-move": "rgba(255, 105, 180, 0.4)",
6
+ "--gb-selected": "rgba(255, 105, 180, 0.6)",
7
+ "--gb-legal-target": "rgba(0, 0, 0, 0.15)",
8
+ "--gb-legal-target-capture": "rgba(0, 0, 0, 0.32)",
9
+ "--gb-check": "radial-gradient(rgba(220, 20, 60, 0.65) 30%, rgba(220, 20, 60, 0) 80%)",
10
+ "--gb-coord-light": "#c46d85",
11
+ "--gb-coord-dark": "#f9e4e8"
12
+ });
13
+
14
+ export { pink };
15
+ //# sourceMappingURL=chunk-FACLRSNS.js.map
16
+ //# sourceMappingURL=chunk-FACLRSNS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/themes/pink.ts"],"names":[],"mappings":";AAaO,IAAM,IAAA,GAAc,OAAO,MAAA,CAAO;AAAA,EACvC,eAAA,EAAiB,SAAA;AAAA,EACjB,cAAA,EAAgB,SAAA;AAAA,EAChB,gBAAA,EAAkB,0BAAA;AAAA,EAClB,eAAA,EAAiB,0BAAA;AAAA,EACjB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,2BAAA,EAA6B,qBAAA;AAAA,EAC7B,YAAA,EAAc,wEAAA;AAAA,EACd,kBAAA,EAAoB,SAAA;AAAA,EACpB,iBAAA,EAAmB;AACrB,CAAC","file":"chunk-FACLRSNS.js","sourcesContent":["/**\n * Pink theme — soft pastel rose and muted crimson.\n *\n * Playful, elegant palette with clear contrast.\n *\n * ```tsx\n * import { pink } from \"gigaboard/themes/pink\";\n * <Chessboard game={game} theme={pink} />\n * ```\n */\n\nimport type { Theme } from \"./index.js\";\n\nexport const pink: Theme = Object.freeze({\n \"--gb-sq-light\": \"#f9e4e8\",\n \"--gb-sq-dark\": \"#c46d85\",\n \"--gb-last-move\": \"rgba(255, 105, 180, 0.4)\",\n \"--gb-selected\": \"rgba(255, 105, 180, 0.6)\",\n \"--gb-legal-target\": \"rgba(0, 0, 0, 0.15)\",\n \"--gb-legal-target-capture\": \"rgba(0, 0, 0, 0.32)\",\n \"--gb-check\": \"radial-gradient(rgba(220, 20, 60, 0.65) 30%, rgba(220, 20, 60, 0) 80%)\",\n \"--gb-coord-light\": \"#c46d85\",\n \"--gb-coord-dark\": \"#f9e4e8\",\n});\n"]}
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ // src/themes/cafeCreme.ts
4
+ var WOVEN_LIGHT = `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6'%3E%3Ccircle cx='1' cy='1' r='0.6' fill='%23000' fill-opacity='0.04'/%3E%3Ccircle cx='4' cy='4' r='0.6' fill='%23fff' fill-opacity='0.08'/%3E%3C/svg%3E")`;
5
+ var WOVEN_DARK = `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6'%3E%3Ccircle cx='1' cy='1' r='0.6' fill='%23000' fill-opacity='0.08'/%3E%3Ccircle cx='4' cy='4' r='0.6' fill='%23fff' fill-opacity='0.05'/%3E%3C/svg%3E")`;
6
+ var cafeCreme = Object.freeze({
7
+ "--gb-sq-light": "#f7ece1",
8
+ "--gb-sq-dark": "#b88b58",
9
+ "--gb-sq-light-image": WOVEN_LIGHT,
10
+ "--gb-sq-dark-image": WOVEN_DARK,
11
+ "--gb-sq-image-size": "6px 6px",
12
+ "--gb-sq-blend-mode": "overlay",
13
+ "--gb-last-move": "rgba(180, 140, 60, 0.4)",
14
+ "--gb-selected": "rgba(180, 140, 60, 0.55)",
15
+ "--gb-legal-target": "rgba(0, 0, 0, 0.14)",
16
+ "--gb-legal-target-capture": "rgba(0, 0, 0, 0.3)",
17
+ "--gb-check": "radial-gradient(rgba(255, 0, 0, 0.55) 30%, rgba(255, 0, 0, 0) 80%)",
18
+ "--gb-coord-light": "#b88b58",
19
+ "--gb-coord-dark": "#f7ece1"
20
+ });
21
+
22
+ exports.cafeCreme = cafeCreme;
23
+ //# sourceMappingURL=chunk-FICI4AMA.cjs.map
24
+ //# sourceMappingURL=chunk-FICI4AMA.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/themes/cafeCreme.ts"],"names":[],"mappings":";;;AAaA,IAAM,WAAA,GACJ,CAAA,+OAAA,CAAA;AAEF,IAAM,UAAA,GACJ,CAAA,+OAAA,CAAA;AAEK,IAAM,SAAA,GAAmB,OAAO,MAAA,CAAO;AAAA,EAC5C,eAAA,EAAiB,SAAA;AAAA,EACjB,cAAA,EAAgB,SAAA;AAAA,EAChB,qBAAA,EAAuB,WAAA;AAAA,EACvB,oBAAA,EAAsB,UAAA;AAAA,EACtB,oBAAA,EAAsB,SAAA;AAAA,EACtB,oBAAA,EAAsB,SAAA;AAAA,EACtB,gBAAA,EAAkB,yBAAA;AAAA,EAClB,eAAA,EAAiB,0BAAA;AAAA,EACjB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,2BAAA,EAA6B,oBAAA;AAAA,EAC7B,YAAA,EAAc,oEAAA;AAAA,EACd,kBAAA,EAAoB,SAAA;AAAA,EACpB,iBAAA,EAAmB;AACrB,CAAC","file":"chunk-FICI4AMA.cjs","sourcesContent":["/**\n * Café Crème theme — soft latte and roasted almond palette with subtle woven texture.\n *\n * Inspired by classic French café aesthetic.\n *\n * ```tsx\n * import { cafeCreme } from \"gigaboard/themes/cafeCreme\";\n * <Chessboard game={game} theme={cafeCreme} />\n * ```\n */\n\nimport type { Theme } from \"./index.js\";\n\nconst WOVEN_LIGHT =\n \"url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6'%3E%3Ccircle cx='1' cy='1' r='0.6' fill='%23000' fill-opacity='0.04'/%3E%3Ccircle cx='4' cy='4' r='0.6' fill='%23fff' fill-opacity='0.08'/%3E%3C/svg%3E\\\")\";\n\nconst WOVEN_DARK =\n \"url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6'%3E%3Ccircle cx='1' cy='1' r='0.6' fill='%23000' fill-opacity='0.08'/%3E%3Ccircle cx='4' cy='4' r='0.6' fill='%23fff' fill-opacity='0.05'/%3E%3C/svg%3E\\\")\";\n\nexport const cafeCreme: Theme = Object.freeze({\n \"--gb-sq-light\": \"#f7ece1\",\n \"--gb-sq-dark\": \"#b88b58\",\n \"--gb-sq-light-image\": WOVEN_LIGHT,\n \"--gb-sq-dark-image\": WOVEN_DARK,\n \"--gb-sq-image-size\": \"6px 6px\",\n \"--gb-sq-blend-mode\": \"overlay\",\n \"--gb-last-move\": \"rgba(180, 140, 60, 0.4)\",\n \"--gb-selected\": \"rgba(180, 140, 60, 0.55)\",\n \"--gb-legal-target\": \"rgba(0, 0, 0, 0.14)\",\n \"--gb-legal-target-capture\": \"rgba(0, 0, 0, 0.3)\",\n \"--gb-check\": \"radial-gradient(rgba(255, 0, 0, 0.55) 30%, rgba(255, 0, 0, 0) 80%)\",\n \"--gb-coord-light\": \"#b88b58\",\n \"--gb-coord-dark\": \"#f7ece1\",\n});\n"]}