tournament-brackets-ui 0.1.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 (268) hide show
  1. package/.storybook/main.js +23 -0
  2. package/.storybook/preview.js +13 -0
  3. package/README.md +70 -0
  4. package/README.old.md +1 -0
  5. package/commands.txt +41 -0
  6. package/dist/esm/CollapsedLeft-B5z4pKZL.js +1042 -0
  7. package/dist/esm/CollapsedLeft-B5z4pKZL.js.map +1 -0
  8. package/dist/esm/CollapsedLeft-B6FNo8Dp.js +727 -0
  9. package/dist/esm/CollapsedLeft-B6FNo8Dp.js.map +1 -0
  10. package/dist/esm/CollapsedLeft-BB1dXff3.js +1215 -0
  11. package/dist/esm/CollapsedLeft-BB1dXff3.js.map +1 -0
  12. package/dist/esm/CollapsedLeft-BMZwFt9m.js +879 -0
  13. package/dist/esm/CollapsedLeft-BMZwFt9m.js.map +1 -0
  14. package/dist/esm/CollapsedLeft-BYfnV5-9.js +1228 -0
  15. package/dist/esm/CollapsedLeft-BYfnV5-9.js.map +1 -0
  16. package/dist/esm/CollapsedLeft-C3BOW8Vh.js +977 -0
  17. package/dist/esm/CollapsedLeft-C3BOW8Vh.js.map +1 -0
  18. package/dist/esm/CollapsedLeft-CBPTeMn9.js +922 -0
  19. package/dist/esm/CollapsedLeft-CBPTeMn9.js.map +1 -0
  20. package/dist/esm/CollapsedLeft-CNXxlyEt.js +887 -0
  21. package/dist/esm/CollapsedLeft-CNXxlyEt.js.map +1 -0
  22. package/dist/esm/CollapsedLeft-DN7qy7MO.js +961 -0
  23. package/dist/esm/CollapsedLeft-DN7qy7MO.js.map +1 -0
  24. package/dist/esm/CollapsedLeft-DO5DyVjM.js +870 -0
  25. package/dist/esm/CollapsedLeft-DO5DyVjM.js.map +1 -0
  26. package/dist/esm/CollapsedLeft-DP4ftgM6.js +796 -0
  27. package/dist/esm/CollapsedLeft-DP4ftgM6.js.map +1 -0
  28. package/dist/esm/CollapsedLeft-DQO8oQL_.js +800 -0
  29. package/dist/esm/CollapsedLeft-DQO8oQL_.js.map +1 -0
  30. package/dist/esm/CollapsedLeft-DXyWTNAC.js +1047 -0
  31. package/dist/esm/CollapsedLeft-DXyWTNAC.js.map +1 -0
  32. package/dist/esm/CollapsedLeft-DZGhG_-q.js +728 -0
  33. package/dist/esm/CollapsedLeft-DZGhG_-q.js.map +1 -0
  34. package/dist/esm/CollapsedLeft-bAhAurv-.js +908 -0
  35. package/dist/esm/CollapsedLeft-bAhAurv-.js.map +1 -0
  36. package/dist/esm/CollapsedLeft-hF26CY1G.js +1003 -0
  37. package/dist/esm/CollapsedLeft-hF26CY1G.js.map +1 -0
  38. package/dist/esm/CollapsedRight-1CTx2ozt.js +860 -0
  39. package/dist/esm/CollapsedRight-1CTx2ozt.js.map +1 -0
  40. package/dist/esm/CollapsedRight-2mcguPWm.js +715 -0
  41. package/dist/esm/CollapsedRight-2mcguPWm.js.map +1 -0
  42. package/dist/esm/CollapsedRight-BCLyZXf2.js +863 -0
  43. package/dist/esm/CollapsedRight-BCLyZXf2.js.map +1 -0
  44. package/dist/esm/CollapsedRight-C13Vq_e3.js +1293 -0
  45. package/dist/esm/CollapsedRight-C13Vq_e3.js.map +1 -0
  46. package/dist/esm/CollapsedRight-C3-pe8RB.js +799 -0
  47. package/dist/esm/CollapsedRight-C3-pe8RB.js.map +1 -0
  48. package/dist/esm/CollapsedRight-CPLDkLx5.js +678 -0
  49. package/dist/esm/CollapsedRight-CPLDkLx5.js.map +1 -0
  50. package/dist/esm/CollapsedRight-CdwTany1.js +1388 -0
  51. package/dist/esm/CollapsedRight-CdwTany1.js.map +1 -0
  52. package/dist/esm/CollapsedRight-DGOaJHqo.js +1123 -0
  53. package/dist/esm/CollapsedRight-DGOaJHqo.js.map +1 -0
  54. package/dist/esm/CollapsedRight-DH1HTBg_.js +1034 -0
  55. package/dist/esm/CollapsedRight-DH1HTBg_.js.map +1 -0
  56. package/dist/esm/CollapsedRight-D_0End0L.js +1013 -0
  57. package/dist/esm/CollapsedRight-D_0End0L.js.map +1 -0
  58. package/dist/esm/CollapsedRight-Da0UMNrq.js +1547 -0
  59. package/dist/esm/CollapsedRight-Da0UMNrq.js.map +1 -0
  60. package/dist/esm/CollapsedRight-DjoLogzE.js +916 -0
  61. package/dist/esm/CollapsedRight-DjoLogzE.js.map +1 -0
  62. package/dist/esm/CollapsedRight-DoOykWbk.js +1219 -0
  63. package/dist/esm/CollapsedRight-DoOykWbk.js.map +1 -0
  64. package/dist/esm/CollapsedRight-RCxUtg7-.js +1140 -0
  65. package/dist/esm/CollapsedRight-RCxUtg7-.js.map +1 -0
  66. package/dist/esm/CollapsedRight-U7cf6t10.js +946 -0
  67. package/dist/esm/CollapsedRight-U7cf6t10.js.map +1 -0
  68. package/dist/esm/CollapsedRight-WXy5eWFq.js +1177 -0
  69. package/dist/esm/CollapsedRight-WXy5eWFq.js.map +1 -0
  70. package/dist/esm/Expanded-BAxI7aFR.js +1540 -0
  71. package/dist/esm/Expanded-BAxI7aFR.js.map +1 -0
  72. package/dist/esm/Expanded-BCEVV7zK.js +1572 -0
  73. package/dist/esm/Expanded-BCEVV7zK.js.map +1 -0
  74. package/dist/esm/Expanded-BJtgsFxf.js +2474 -0
  75. package/dist/esm/Expanded-BJtgsFxf.js.map +1 -0
  76. package/dist/esm/Expanded-C8Bxoixp.js +1374 -0
  77. package/dist/esm/Expanded-C8Bxoixp.js.map +1 -0
  78. package/dist/esm/Expanded-CBu5Dj05.js +1838 -0
  79. package/dist/esm/Expanded-CBu5Dj05.js.map +1 -0
  80. package/dist/esm/Expanded-CDYmOWYL.js +1589 -0
  81. package/dist/esm/Expanded-CDYmOWYL.js.map +1 -0
  82. package/dist/esm/Expanded-CUg2EMDY.js +2242 -0
  83. package/dist/esm/Expanded-CUg2EMDY.js.map +1 -0
  84. package/dist/esm/Expanded-CZX_MCio.js +1406 -0
  85. package/dist/esm/Expanded-CZX_MCio.js.map +1 -0
  86. package/dist/esm/Expanded-CmtBl1ZS.js +1626 -0
  87. package/dist/esm/Expanded-CmtBl1ZS.js.map +1 -0
  88. package/dist/esm/Expanded-Co8V5jgl.js +2024 -0
  89. package/dist/esm/Expanded-Co8V5jgl.js.map +1 -0
  90. package/dist/esm/Expanded-D2_h7YPI.js +1032 -0
  91. package/dist/esm/Expanded-D2_h7YPI.js.map +1 -0
  92. package/dist/esm/Expanded-DFP1nUBY.js +1381 -0
  93. package/dist/esm/Expanded-DFP1nUBY.js.map +1 -0
  94. package/dist/esm/Expanded-DPFndGqw.js +1118 -0
  95. package/dist/esm/Expanded-DPFndGqw.js.map +1 -0
  96. package/dist/esm/Expanded-Jrq0Bh65.js +1739 -0
  97. package/dist/esm/Expanded-Jrq0Bh65.js.map +1 -0
  98. package/dist/esm/Expanded-RJigoSw3.js +1552 -0
  99. package/dist/esm/Expanded-RJigoSw3.js.map +1 -0
  100. package/dist/esm/Expanded-vqC8qzDP.js +1388 -0
  101. package/dist/esm/Expanded-vqC8qzDP.js.map +1 -0
  102. package/dist/esm/ExpandedBase-BUpZvswi.js +88 -0
  103. package/dist/esm/ExpandedBase-BUpZvswi.js.map +1 -0
  104. package/dist/esm/NameRow-B-GWjlou.js +50 -0
  105. package/dist/esm/NameRow-B-GWjlou.js.map +1 -0
  106. package/dist/esm/Team-CLk1m4Vj.js +25 -0
  107. package/dist/esm/Team-CLk1m4Vj.js.map +1 -0
  108. package/dist/esm/TeamsBase-moB9MaNw.js +44 -0
  109. package/dist/esm/TeamsBase-moB9MaNw.js.map +1 -0
  110. package/dist/esm/index.css +1 -0
  111. package/dist/esm/index.js +112 -0
  112. package/dist/esm/index.js.map +1 -0
  113. package/dist/index.cjs +57871 -0
  114. package/dist/index.cjs.map +1 -0
  115. package/dist/index.css +1 -0
  116. package/package.json +87 -0
  117. package/public/favicon.ico +0 -0
  118. package/public/index.html +43 -0
  119. package/public/logo192.png +0 -0
  120. package/public/logo512.png +0 -0
  121. package/public/manifest.json +25 -0
  122. package/public/robots.txt +3 -0
  123. package/rollup.config.mjs +41 -0
  124. package/src/allocatePlayers.js +235 -0
  125. package/src/components/Facades/CollapsedLeft.jsx +26 -0
  126. package/src/components/Facades/CollapsedRight.jsx +27 -0
  127. package/src/components/Facades/Expanded.jsx +27 -0
  128. package/src/components/Individuals/08-Player/CollapsedLeft.jsx +340 -0
  129. package/src/components/Individuals/08-Player/CollapsedRight.jsx +276 -0
  130. package/src/components/Individuals/08-Player/Expanded.jsx +407 -0
  131. package/src/components/Individuals/09-Player/CollapsedLeft.jsx +386 -0
  132. package/src/components/Individuals/09-Player/CollapsedRight.jsx +343 -0
  133. package/src/components/Individuals/09-Player/Expanded.jsx +614 -0
  134. package/src/components/Individuals/10-Player/CollapsedLeft.jsx +315 -0
  135. package/src/components/Individuals/10-Player/CollapsedRight.jsx +367 -0
  136. package/src/components/Individuals/10-Player/Expanded.jsx +611 -0
  137. package/src/components/Individuals/11-Player/CollapsedLeft.jsx +352 -0
  138. package/src/components/Individuals/11-Player/CollapsedRight.jsx +412 -0
  139. package/src/components/Individuals/11-Player/Expanded.jsx +616 -0
  140. package/src/components/Individuals/12-Player/CollapsedLeft.jsx +396 -0
  141. package/src/components/Individuals/12-Player/CollapsedRight.jsx +451 -0
  142. package/src/components/Individuals/12-Player/Expanded.jsx +622 -0
  143. package/src/components/Individuals/13-Player/CollapsedLeft.jsx +426 -0
  144. package/src/components/Individuals/13-Player/CollapsedRight.jsx +490 -0
  145. package/src/components/Individuals/13-Player/Expanded.jsx +701 -0
  146. package/src/components/Individuals/14-Player/CollapsedLeft.jsx +458 -0
  147. package/src/components/Individuals/14-Player/CollapsedRight.jsx +509 -0
  148. package/src/components/Individuals/14-Player/Expanded.jsx +801 -0
  149. package/src/components/Individuals/16-Player/CollapsedLeft.jsx +514 -0
  150. package/src/components/Individuals/16-Player/CollapsedRight.jsx +608 -0
  151. package/src/components/Individuals/16-Player/Expanded.jsx +963 -0
  152. package/src/components/Individuals/stylesheet.module.css +360 -0
  153. package/src/components/NameRow.jsx +21 -0
  154. package/src/components/NameRowFillable.jsx +30 -0
  155. package/src/components/ScoreRow.jsx +29 -0
  156. package/src/components/ScoreRowFillable.jsx +64 -0
  157. package/src/components/Team.jsx +20 -0
  158. package/src/components/TeamFillable.jsx +25 -0
  159. package/src/components/Teams/08-Team/CollapsedLeft.jsx +304 -0
  160. package/src/components/Teams/08-Team/CollapsedRight.jsx +232 -0
  161. package/src/components/Teams/08-Team/Expanded.jsx +356 -0
  162. package/src/components/Teams/09-Team/CollapsedLeft.jsx +335 -0
  163. package/src/components/Teams/09-Team/CollapsedRight.jsx +282 -0
  164. package/src/components/Teams/09-Team/Expanded.jsx +486 -0
  165. package/src/components/Teams/10-Team/CollapsedLeft.jsx +269 -0
  166. package/src/components/Teams/10-Team/CollapsedRight.jsx +304 -0
  167. package/src/components/Teams/10-Team/Expanded.jsx +483 -0
  168. package/src/components/Teams/11-Team/CollapsedLeft.jsx +292 -0
  169. package/src/components/Teams/11-Team/CollapsedRight.jsx +335 -0
  170. package/src/components/Teams/11-Team/Expanded.jsx +491 -0
  171. package/src/components/Teams/12-Team/CollapsedLeft.jsx +328 -0
  172. package/src/components/Teams/12-Team/CollapsedRight.jsx +363 -0
  173. package/src/components/Teams/12-Team/Expanded.jsx +497 -0
  174. package/src/components/Teams/13-Team/CollapsedLeft.jsx +355 -0
  175. package/src/components/Teams/13-Team/CollapsedRight.jsx +399 -0
  176. package/src/components/Teams/13-Team/Expanded.jsx +569 -0
  177. package/src/components/Teams/14-Team/CollapsedLeft.jsx +382 -0
  178. package/src/components/Teams/14-Team/CollapsedRight.jsx +420 -0
  179. package/src/components/Teams/14-Team/Expanded.jsx +661 -0
  180. package/src/components/Teams/16-Team/CollapsedLeft.jsx +437 -0
  181. package/src/components/Teams/16-Team/CollapsedRight.jsx +496 -0
  182. package/src/components/Teams/16-Team/Expanded.jsx +795 -0
  183. package/src/components/Teams/stylesheet.module.css +300 -0
  184. package/src/components/_internal/ExpandedBase.jsx +60 -0
  185. package/src/components/_internal/TeamsBase.jsx +45 -0
  186. package/src/components/_internal/VariantFacade.jsx +26 -0
  187. package/src/index.js +3 -0
  188. package/src/scripts/convert-html-to-jsx.js +46 -0
  189. package/src/scripts/inject-players.js +45 -0
  190. package/src/scripts/scoreUtils.js +25 -0
  191. package/src/scripts/update-classnames.js +26 -0
  192. package/src/seeding.js +488 -0
  193. package/src/stories/Button.jsx +39 -0
  194. package/src/stories/Button.stories.js +49 -0
  195. package/src/stories/Configure.mdx +364 -0
  196. package/src/stories/Header.jsx +56 -0
  197. package/src/stories/Header.stories.js +29 -0
  198. package/src/stories/Individuals/08-Player/CollapsedLeft.stories.jsx +30 -0
  199. package/src/stories/Individuals/08-Player/CollapsedRight.stories.jsx +30 -0
  200. package/src/stories/Individuals/08-Player/Expanded.stories.jsx +30 -0
  201. package/src/stories/Individuals/09-Player/CollapsedLeft.stories.jsx +30 -0
  202. package/src/stories/Individuals/09-Player/CollapsedRight.stories.jsx +30 -0
  203. package/src/stories/Individuals/09-Player/Expanded.stories.jsx +30 -0
  204. package/src/stories/Individuals/10-Player/CollapsedLeft.stories.jsx +30 -0
  205. package/src/stories/Individuals/10-Player/CollapsedRight.stories.jsx +30 -0
  206. package/src/stories/Individuals/10-Player/Expanded.stories.jsx +30 -0
  207. package/src/stories/Individuals/11-Player/CollapsedLeft.stories.jsx +30 -0
  208. package/src/stories/Individuals/11-Player/CollapsedRight.stories.jsx +30 -0
  209. package/src/stories/Individuals/11-Player/Expanded.stories.jsx +30 -0
  210. package/src/stories/Individuals/12-Player/CollapsedLeft.stories.jsx +30 -0
  211. package/src/stories/Individuals/12-Player/CollapsedRight.stories.jsx +30 -0
  212. package/src/stories/Individuals/12-Player/Expanded.stories.jsx +30 -0
  213. package/src/stories/Individuals/13-Player/CollapsedLeft.stories.jsx +30 -0
  214. package/src/stories/Individuals/13-Player/CollapsedRight.stories.jsx +30 -0
  215. package/src/stories/Individuals/13-Player/Expanded.stories.jsx +30 -0
  216. package/src/stories/Individuals/14-Player/CollapsedLeft.stories.jsx +30 -0
  217. package/src/stories/Individuals/14-Player/CollapsedRight.stories.jsx +30 -0
  218. package/src/stories/Individuals/14-Player/Expanded.stories.jsx +30 -0
  219. package/src/stories/Individuals/16-Player/CollapsedLeft.stories.jsx +30 -0
  220. package/src/stories/Individuals/16-Player/CollapsedRight.stories.jsx +30 -0
  221. package/src/stories/Individuals/16-Player/Expanded.stories.jsx +30 -0
  222. package/src/stories/Page.jsx +69 -0
  223. package/src/stories/Page.stories.js +28 -0
  224. package/src/stories/Teams/08-Team/CollapsedLeft.stories.jsx +33 -0
  225. package/src/stories/Teams/08-Team/CollapsedRight.stories.jsx +33 -0
  226. package/src/stories/Teams/08-Team/Expanded.stories.jsx +33 -0
  227. package/src/stories/Teams/09-Team/CollapsedLeft.stories.jsx +33 -0
  228. package/src/stories/Teams/09-Team/CollapsedRight.stories.jsx +33 -0
  229. package/src/stories/Teams/09-Team/Expanded.stories.jsx +33 -0
  230. package/src/stories/Teams/10-Team/CollapsedLeft.stories.jsx +33 -0
  231. package/src/stories/Teams/10-Team/CollapsedRight.stories.jsx +33 -0
  232. package/src/stories/Teams/10-Team/Expanded.stories.jsx +33 -0
  233. package/src/stories/Teams/11-Team/CollapsedLeft.stories.jsx +33 -0
  234. package/src/stories/Teams/11-Team/CollapsedRight.stories.jsx +33 -0
  235. package/src/stories/Teams/11-Team/Expanded.stories.jsx +33 -0
  236. package/src/stories/Teams/12-Team/CollapsedLeft.stories.jsx +33 -0
  237. package/src/stories/Teams/12-Team/CollapsedRight.stories.jsx +33 -0
  238. package/src/stories/Teams/12-Team/Expanded.stories.jsx +33 -0
  239. package/src/stories/Teams/13-Team/CollapsedLeft.stories.jsx +33 -0
  240. package/src/stories/Teams/13-Team/CollapsedRight.stories.jsx +33 -0
  241. package/src/stories/Teams/13-Team/Expanded.stories.jsx +33 -0
  242. package/src/stories/Teams/14-Team/CollapsedLeft.stories.jsx +33 -0
  243. package/src/stories/Teams/14-Team/CollapsedRight.stories.jsx +33 -0
  244. package/src/stories/Teams/14-Team/Expanded.stories.jsx +33 -0
  245. package/src/stories/Teams/16-Team/CollapsedLeft.stories.jsx +33 -0
  246. package/src/stories/Teams/16-Team/CollapsedRight.stories.jsx +33 -0
  247. package/src/stories/Teams/16-Team/Expanded.stories.jsx +33 -0
  248. package/src/stories/assets/accessibility.png +0 -0
  249. package/src/stories/assets/accessibility.svg +1 -0
  250. package/src/stories/assets/addon-library.png +0 -0
  251. package/src/stories/assets/assets.png +0 -0
  252. package/src/stories/assets/avif-test-image.avif +0 -0
  253. package/src/stories/assets/context.png +0 -0
  254. package/src/stories/assets/discord.svg +1 -0
  255. package/src/stories/assets/docs.png +0 -0
  256. package/src/stories/assets/figma-plugin.png +0 -0
  257. package/src/stories/assets/github.svg +1 -0
  258. package/src/stories/assets/share.png +0 -0
  259. package/src/stories/assets/styling.png +0 -0
  260. package/src/stories/assets/testing.png +0 -0
  261. package/src/stories/assets/theming.png +0 -0
  262. package/src/stories/assets/tutorials.svg +1 -0
  263. package/src/stories/assets/youtube.svg +1 -0
  264. package/src/stories/button.css +30 -0
  265. package/src/stories/data/players.js +116 -0
  266. package/src/stories/data/teams.js +32 -0
  267. package/src/stories/header.css +32 -0
  268. package/src/stories/page.css +68 -0
@@ -0,0 +1,300 @@
1
+ tr {
2
+ mso-height-source: auto;
3
+ }
4
+ col {
5
+ mso-width-source: auto;
6
+ }
7
+ br {
8
+ mso-data-placement: same-cell;
9
+ }
10
+ .style0 {
11
+ mso-number-format: General;
12
+ text-align: general;
13
+ vertical-align: bottom;
14
+ white-space: nowrap;
15
+ mso-rotate: 0;
16
+ mso-background-source: auto;
17
+ mso-pattern: auto;
18
+ color: black;
19
+ font-size: 10pt;
20
+ font-weight: 400;
21
+ font-style: normal;
22
+ text-decoration: none;
23
+ font-family: Arial;
24
+ mso-generic-font-family: auto;
25
+ mso-font-charset: 0;
26
+ border: none;
27
+ mso-protection: locked visible;
28
+ mso-style-name: Normal;
29
+ mso-style-id: 0;
30
+ }
31
+ td {
32
+ mso-style-parent: style0;
33
+ padding-top: 1px;
34
+ padding-right: 1px;
35
+ padding-left: 1px;
36
+ mso-ignore: padding;
37
+ color: black;
38
+ font-size: 10pt;
39
+ font-weight: 400;
40
+ font-style: normal;
41
+ text-decoration: none;
42
+ font-family: Arial;
43
+ mso-generic-font-family: auto;
44
+ mso-font-charset: 0;
45
+ mso-number-format: General;
46
+ text-align: general;
47
+ vertical-align: bottom;
48
+ border: none;
49
+ mso-background-source: auto;
50
+ mso-pattern: auto;
51
+ mso-protection: locked visible;
52
+ white-space: nowrap;
53
+ mso-rotate: 0;
54
+ }
55
+ .groupTitle {
56
+ mso-style-parent: style0;
57
+ color: black;
58
+ font-size: 24pt;
59
+ font-weight: 700;
60
+ font-family: Arial, sans-serif;
61
+ mso-font-charset: 0;
62
+ text-align: left;
63
+ vertical-align: middle;
64
+ }
65
+ .teamID {
66
+ mso-style-parent: style0;
67
+ color: black;
68
+ font-size: 11pt;
69
+ font-weight: 700;
70
+ font-family: Arial, sans-serif;
71
+ mso-font-charset: 0;
72
+ text-align: center;
73
+ vertical-align: middle;
74
+ border-top: 0.5pt solid black;
75
+ border-right: 0.5pt solid black;
76
+ border-bottom: none;
77
+ border-left: 0.5pt solid black;
78
+ }
79
+ .teamIDExpanded {
80
+ mso-style-parent: style0;
81
+ color: black;
82
+ font-size: 14pt;
83
+ font-weight: 700;
84
+ font-family: Arial, sans-serif;
85
+ mso-font-charset: 0;
86
+ text-align: center;
87
+ vertical-align: middle;
88
+ border-top: 0.5pt solid black;
89
+ border-right: 0.5pt solid black;
90
+ border-bottom: none;
91
+ border-left: 0.5pt solid black;
92
+ }
93
+ .borderTop {
94
+ mso-style-parent: style0;
95
+ color: black;
96
+ font-size: 12pt;
97
+ font-family: Arial, sans-serif;
98
+ mso-font-charset: 0;
99
+ text-align: center;
100
+ vertical-align: middle;
101
+ border-top: 0.5pt solid black;
102
+ border-right: none;
103
+ border-bottom: none;
104
+ border-left: none;
105
+ }
106
+ .borderRight {
107
+ mso-style-parent: style0;
108
+ color: black;
109
+ font-size: 12pt;
110
+ font-family: Arial, sans-serif;
111
+ mso-font-charset: 0;
112
+ text-align: center;
113
+ vertical-align: middle;
114
+ border-top: none;
115
+ border-right: 0.5pt solid black;
116
+ border-bottom: none;
117
+ border-left: none;
118
+ }
119
+ .borderRightExpanded {
120
+ mso-style-parent: style0;
121
+ color: black;
122
+ font-family: Arial, sans-serif;
123
+ mso-font-charset: 0;
124
+ text-align: center;
125
+ vertical-align: middle;
126
+ border-top: none;
127
+ border-right: 0.5pt solid black;
128
+ border-bottom: none;
129
+ border-left: none;
130
+ }
131
+ .borderBottom {
132
+ mso-style-parent: style0;
133
+ color: black;
134
+ font-size: 12pt;
135
+ font-family: Arial, sans-serif;
136
+ mso-font-charset: 0;
137
+ text-align: center;
138
+ vertical-align: middle;
139
+ border-top: none;
140
+ border-right: none;
141
+ border-bottom: 0.5pt solid black;
142
+ border-left: none;
143
+ }
144
+ .borderLeft {
145
+ mso-style-parent: style0;
146
+ color: black;
147
+ font-size: 12pt;
148
+ font-family: Arial, sans-serif;
149
+ mso-font-charset: 0;
150
+ text-align: center;
151
+ vertical-align: middle;
152
+ border-top: none;
153
+ border-right: none;
154
+ border-bottom: none;
155
+ border-left: 0.5pt solid black;
156
+ }
157
+ .borderTopRight {
158
+ mso-style-parent: style0;
159
+ color: black;
160
+ font-size: 12pt;
161
+ font-family: Arial, sans-serif;
162
+ mso-font-charset: 0;
163
+ text-align: center;
164
+ vertical-align: middle;
165
+ border-top: 0.5pt solid black;
166
+ border-right: 0.5pt solid black;
167
+ border-bottom: none;
168
+ border-left: none;
169
+ }
170
+ .borderRightLeft {
171
+ mso-style-parent: style0;
172
+ color: black;
173
+ font-size: 12pt;
174
+ font-family: Arial, sans-serif;
175
+ mso-font-charset: 0;
176
+ text-align: center;
177
+ vertical-align: middle;
178
+ border-top: none;
179
+ border-right: 0.5pt solid black;
180
+ border-bottom: none;
181
+ border-left: 0.5pt solid black;
182
+ }
183
+ .borderBottomLeft {
184
+ mso-style-parent: style0;
185
+ color: black;
186
+ font-size: 12pt;
187
+ font-family: Arial, sans-serif;
188
+ mso-font-charset: 0;
189
+ text-align: center;
190
+ vertical-align: middle;
191
+ border-top: none;
192
+ border-right: none;
193
+ border-bottom: 0.5pt solid black;
194
+ border-left: 0.5pt solid black;
195
+ }
196
+ .borderRightBottom {
197
+ mso-style-parent: style0;
198
+ color: black;
199
+ font-size: 12pt;
200
+ font-family: Arial, sans-serif;
201
+ mso-font-charset: 0;
202
+ text-align: center;
203
+ vertical-align: middle;
204
+ border-top: none;
205
+ border-right: 0.5pt solid black;
206
+ border-bottom: 0.5pt solid black;
207
+ border-left: none;
208
+ }
209
+ .borderTopLeft {
210
+ mso-style-parent: style0;
211
+ color: black;
212
+ font-size: 12pt;
213
+ font-family: Arial, sans-serif;
214
+ mso-font-charset: 0;
215
+ text-align: center;
216
+ vertical-align: middle;
217
+ border-top: 0.5pt solid black;
218
+ border-right: none;
219
+ border-bottom: none;
220
+ border-left: 0.5pt solid black;
221
+ }
222
+ .borderRBL {
223
+ mso-style-parent: style0;
224
+ color: black;
225
+ font-size: 12pt;
226
+ font-family: Arial, sans-serif;
227
+ mso-font-charset: 0;
228
+ text-align: center;
229
+ vertical-align: middle;
230
+ border-top: none;
231
+ border-right: 0.5pt solid black;
232
+ border-bottom: 0.5pt solid black;
233
+ border-left: 0.5pt solid black;
234
+ }
235
+ .borderTRL {
236
+ mso-style-parent: style0;
237
+ color: black;
238
+ font-size: 12pt;
239
+ font-family: Arial, sans-serif;
240
+ mso-font-charset: 0;
241
+ text-align: center;
242
+ vertical-align: middle;
243
+ border-top: 0.5pt solid black;
244
+ border-right: 0.5pt solid black;
245
+ border-bottom: none;
246
+ border-left: 0.5pt solid black;
247
+ }
248
+
249
+ .xl00 {
250
+ mso-style-parent: style0;
251
+ color: black;
252
+ font-family: Arial, sans-serif;
253
+ mso-font-charset: 0;
254
+ text-align: center;
255
+ vertical-align: middle;
256
+ }
257
+ .xl01 {
258
+ mso-style-parent: style0;
259
+ color: black;
260
+ font-size: 12pt;
261
+ font-family: Arial, sans-serif;
262
+ mso-font-charset: 0;
263
+ text-align: center;
264
+ vertical-align: middle;
265
+ }
266
+
267
+ .inlineInput {
268
+ box-sizing: border-box;
269
+ width: 100%;
270
+ height: 100%;
271
+ border: none;
272
+ padding: 0;
273
+ margin: 0;
274
+ resize: none;
275
+ overflow: hidden;
276
+ font: inherit;
277
+ text-align: center;
278
+ line-height: 1;
279
+ }
280
+ .inlineInput::placeholder {
281
+ color: #aaa;
282
+ opacity: 1;
283
+ }
284
+
285
+ .winnerNameInput {
286
+ box-sizing: border-box;
287
+ width: 100%;
288
+ height: 100%;
289
+ border: none;
290
+ padding: 0;
291
+ margin: 0;
292
+ resize: none;
293
+ overflow: hidden;
294
+ font: inherit;
295
+ line-height: 1;
296
+ }
297
+ .winnerNameInput::placeholder {
298
+ color: #aaa;
299
+ opacity: 1;
300
+ }
@@ -0,0 +1,60 @@
1
+ import { useCallback, useMemo, useState } from "react";
2
+ import { sanitizeScore } from "../../scripts/scoreUtils";
3
+
4
+ export function ExpandedBase({
5
+ initialPlayers = [],
6
+ maxSlots,
7
+ mode, // "view" | "fillable"
8
+ fontFamily = "Arial, sans-serif",
9
+ playerIDFontSize,
10
+ playerNameFontSize,
11
+ }) {
12
+ // State
13
+ const [players, setPlayers] = useState(() =>
14
+ Array.from({ length: maxSlots }, (_, i) =>
15
+ initialPlayers[i] ? { ...initialPlayers[i] } : { id: "", name: "", club: "", score: "" }
16
+ )
17
+ );
18
+
19
+ const updatePlayer = useCallback((index, patch) => {
20
+ setPlayers((ps) => {
21
+ const copy = [...ps];
22
+ copy[index] = { ...copy[index], ...patch };
23
+ return copy;
24
+ });
25
+ }, []);
26
+
27
+ // Styles
28
+ const playerIDStyle = useMemo(
29
+ () => ({ fontSize: `${playerIDFontSize}pt`, fontFamily }),
30
+ [playerIDFontSize, fontFamily]
31
+ );
32
+ const playerNameStyle = useMemo(
33
+ () => ({ fontSize: `${playerNameFontSize}pt`, fontFamily }),
34
+ [playerNameFontSize, fontFamily]
35
+ );
36
+
37
+ // Handlers (index-aware)
38
+ const handleScoreChange = useCallback(
39
+ (i) => (e) => updatePlayer(i, { score: sanitizeScore(e.target.value) }),
40
+ [updatePlayer]
41
+ );
42
+ const handleIDChange = useCallback(
43
+ (i) => (e) => updatePlayer(i, { id: e.target.value.toUpperCase() }),
44
+ [updatePlayer]
45
+ );
46
+ const handleNameChange = useCallback(
47
+ (i) => (e) => updatePlayer(i, { name: e.target.value }),
48
+ [updatePlayer]
49
+ );
50
+
51
+ return {
52
+ players,
53
+ mode,
54
+ playerIDStyle,
55
+ playerNameStyle,
56
+ handleScoreChange,
57
+ handleIDChange,
58
+ handleNameChange,
59
+ };
60
+ }
@@ -0,0 +1,45 @@
1
+ import { useCallback, useMemo, useState } from "react";
2
+
3
+ export function TeamsBase({
4
+ initialTeams = [],
5
+ maxSlots,
6
+ mode, // "view" | "fillable"
7
+ teamIDFontFamily = "Arial, sans-serif",
8
+ teamIDColor,
9
+ teamIDFontSize = 12,
10
+ }) {
11
+ const [teams, setTeams] = useState(() =>
12
+ Array.from({ length: maxSlots }, (_, i) => initialTeams[i] ?? "")
13
+ );
14
+
15
+ // Style object is memoized
16
+ const teamIDStyle = useMemo(
17
+ () => ({
18
+ fontFamily: teamIDFontFamily,
19
+ color: teamIDColor,
20
+ fontSize: teamIDFontSize ? `${teamIDFontSize}pt` : undefined,
21
+ }),
22
+ [teamIDFontFamily, teamIDColor, teamIDFontSize]
23
+ );
24
+
25
+ // Update helpers
26
+ const updateTeam = useCallback((index, patch) => {
27
+ setTeams((ps) => {
28
+ const copy = [...ps];
29
+ copy[index] = { ...copy[index], ...patch };
30
+ return copy;
31
+ });
32
+ }, []);
33
+
34
+ const handleTeamChange = useCallback(
35
+ (i) => (e) => updateTeam(i, e.target.value),
36
+ [updateTeam]
37
+ );
38
+
39
+ return {
40
+ teams,
41
+ mode,
42
+ teamIDStyle,
43
+ handleTeamChange,
44
+ };
45
+ }
@@ -0,0 +1,26 @@
1
+ import React, { Suspense } from "react";
2
+
3
+ export function VariantFacade(registry, displayName) {
4
+ const Facade = ({ entity = "teams", size, ...props }) => {
5
+ const key = String(entity).toLowerCase();
6
+ const Comp = registry[key]?.[size];
7
+ if (!Comp) {
8
+ if (process.env.NODE_ENV !== "production") {
9
+ console.warn(`${displayName}: no variant for entity="${entity}" size=${size}`);
10
+ }
11
+ return null;
12
+ }
13
+ return (
14
+ <Suspense fallback={null}>
15
+ <Comp {...props} />
16
+ </Suspense>
17
+ );
18
+ };
19
+ Facade.displayName = displayName;
20
+
21
+ // Ergonomic sugar
22
+ Facade.Teams = (p) => <Facade entity="teams" {...p} />;
23
+ Facade.Individuals = (p) => <Facade entity="individuals" {...p} />;
24
+
25
+ return Facade;
26
+ }
package/src/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { default as CollapsedLeft } from "./components/Facades/CollapsedLeft";
2
+ export { default as CollapsedRight } from "./components/Facades/CollapsedRight";
3
+ export { default as Expanded } from "./components/Facades/Expanded";
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * convert-html-to-jsx.js
4
+ *
5
+ * Usage:
6
+ * node convert-html-to-jsx.js path/to/input.htm path/to/OutputComponent.jsx
7
+ */
8
+
9
+ const fs = require('fs');
10
+ const path = require('path');
11
+ const HTMLtoJSX = require('htmltojsx');
12
+
13
+ // Grab CLI args
14
+ const [,, inputFile, outputFile] = process.argv;
15
+ if (!inputFile || !outputFile) {
16
+ console.error('Usage: node convert-html-to-jsx.js <input.htm> <Output.jsx>');
17
+ process.exit(1);
18
+ }
19
+
20
+ // 1) Read your .htm
21
+ const html = fs.readFileSync(inputFile, 'utf8');
22
+
23
+ // 2) Strip out <head>, scripts, excel-metadata, etc.
24
+ const bodyMatch = html.match(/<body[^>]*>([\s\S]*)<\/body>/i);
25
+ const innerHtml = bodyMatch ? bodyMatch[1] : html;
26
+
27
+ // 3) Convert to JSX
28
+ const converter = new HTMLtoJSX({ createClass: false });
29
+ let jsxCode = converter.convert(innerHtml);
30
+
31
+ // 4) Wrap in a functional component
32
+ const componentName = path.basename(outputFile).replace(/\..+$/, '');
33
+ const component = `import React from 'react';
34
+ import './${componentName}.css'; // adjust path as needed
35
+
36
+ export default function ${componentName}() {
37
+ return (
38
+ <>
39
+ ${jsxCode.replace(/^/gm, ' ')}
40
+ </>
41
+ );
42
+ }
43
+ `;
44
+
45
+ fs.writeFileSync(outputFile, component, 'utf8');
46
+ console.log(`✅ Wrote ${outputFile}`);
@@ -0,0 +1,45 @@
1
+ // inject-players.js
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+
5
+ // Usage:
6
+ // node inject-players.js input.jsx [output.jsx]
7
+ const [,, inputFile, outputFile] = process.argv;
8
+
9
+ if (!inputFile) {
10
+ console.error('Usage: node inject-players.js <input.jsx> [output.jsx]');
11
+ process.exit(1);
12
+ }
13
+
14
+ const srcPath = path.resolve(process.cwd(), inputFile);
15
+ const outPath = outputFile
16
+ ? path.resolve(process.cwd(), outputFile)
17
+ : srcPath;
18
+
19
+ // read in your component
20
+ let content = fs.readFileSync(srcPath, 'utf8');
21
+
22
+ // 1) replace all Bxx → {players[i].id}
23
+ let idIndex = 0;
24
+ content = content.replace(/>(C\w{2})</g, (_match, _id) => {
25
+ return `>{players[${idIndex++}].id}<`;
26
+ });
27
+
28
+ // 2) replace "Firstname Lastname (CLUB)" → {`${players[i].name} (${players[i].club})`}
29
+ let nameIndex = 0;
30
+ content = content.replace(
31
+ /([A-Za-z]+ [A-Za-z]+) \(([A-Za-z0-9]+)\)/g,
32
+ () => {
33
+ const i = nameIndex++;
34
+ return (
35
+ '{`' +
36
+ '${players[' + i + '].name} (' +
37
+ '${players[' + i + '].club})' +
38
+ '`}'
39
+ );
40
+ }
41
+ );
42
+
43
+ // write back (either to a new file or in-place)
44
+ fs.writeFileSync(outPath, content, 'utf8');
45
+ console.log(`✅ ${outputFile ? 'Transformed' : 'Updated'} ${outPath}`);
@@ -0,0 +1,25 @@
1
+ export const CIRCLED = { M: "Ⓜ", K: "Ⓚ", D: "Ⓓ", T: "Ⓣ" };
2
+ export const RAW = Object.fromEntries(Object.entries(CIRCLED).map(([k, v]) => [v, k]));
3
+ export const ALLOWED = Object.keys(CIRCLED);
4
+
5
+ /** sanitize free-text → canonical raw string (e.g. " m k " -> "MK") */
6
+ export function sanitizeScore(input = "") {
7
+ const noSpaces = String(input).replace(/\s+/g, "");
8
+ let first = "";
9
+ if (noSpaces) {
10
+ const c0 = noSpaces[0];
11
+ first = RAW[c0] || c0.toUpperCase();
12
+ if (!ALLOWED.includes(first)) first = "";
13
+ }
14
+ const rest = Array.from(noSpaces.slice(1).toUpperCase())
15
+ .filter((ch) => ALLOWED.includes(ch))
16
+ .join("");
17
+ return first + rest;
18
+ }
19
+
20
+ /** "MK" -> "Ⓜ K" (for display inputs) */
21
+ export function displayScore(raw = "") {
22
+ if (!raw) return "";
23
+ const head = CIRCLED[raw[0]] ?? raw[0];
24
+ return [head, ...raw.slice(1)].join(" ");
25
+ }
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+
5
+ function processFile(filePath) {
6
+ let src = fs.readFileSync(filePath, 'utf8');
7
+ let dst = src.replace(
8
+ /className="([A-Za-z0-9_-]+)"/g,
9
+ 'className={styles.$1}'
10
+ );
11
+ if (dst !== src) {
12
+ fs.writeFileSync(filePath, dst, 'utf8');
13
+ console.log('→ updated', filePath);
14
+ }
15
+ }
16
+
17
+ function walk(dir) {
18
+ for (let name of fs.readdirSync(dir)) {
19
+ let full = path.join(dir, name);
20
+ if (fs.statSync(full).isDirectory()) walk(full);
21
+ else if (full.match(/\.(jsx?|tsx?)$/)) processFile(full);
22
+ }
23
+ }
24
+
25
+ // point this at your component folder:
26
+ walk(path.resolve(__dirname, '../components/Teams/16-Team'));