itemTemplates.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. import i18n from "../i18n";
  2. import { nanoid } from "nanoid";
  3. import Rect from "./Rect";
  4. import Cube from "./Cube";
  5. import Round from "./Round";
  6. import Token from "./Token";
  7. import Image from "./Image";
  8. import Counter from "./Counter";
  9. import Dice from "./Dice";
  10. import Note from "./Note";
  11. import Zone from "./Zone";
  12. import Meeple from "./Meeple";
  13. import Jewel from "./Jewel";
  14. import Pawn from "./Pawn";
  15. import CheckerBoard from "./CheckerBoard";
  16. import Cylinder from "./Cylinder";
  17. import ImageFormFields from "./forms/ImageFormFields";
  18. import CounterFormFields from "./forms/CounterFormFields";
  19. import RectFormFields from "./forms/RectFormFields";
  20. import CubeFormFields from "./forms/CubeFormFields";
  21. import RoundFormFields from "./forms/RoundFormFields";
  22. import DiceFormFields from "./forms/DiceFormFields";
  23. import NoteFormFields from "./forms/NoteFormFields";
  24. import ZoneFormFields from "./forms/ZoneFormFields";
  25. import TokenFormFields from "./forms/TokenFormFields";
  26. import MeepleFormFields from "./forms/MeepleFormFields";
  27. import JewelFormFields from "./forms/JewelFormFields";
  28. import PawnFormFields from "./forms/PawnFormFields";
  29. import CheckerBoardFormFields from "./forms/CheckerBoardFormFields";
  30. import CylinderFormFields from "./forms/CylinderFormFields";
  31. const itemTemplates = {
  32. rect: {
  33. component: Rect,
  34. defaultActions: ["lock", "remove"],
  35. availableActions: [
  36. "stack",
  37. "alignAsLine",
  38. "alignAsSquare",
  39. "shuffle",
  40. "clone",
  41. "lock",
  42. "remove",
  43. ],
  44. form: RectFormFields,
  45. name: i18n.t("Rectangle"),
  46. template: {},
  47. },
  48. cube: {
  49. component: Cube,
  50. defaultActions: ["clone", "lock", "remove"],
  51. availableActions: [
  52. "stack",
  53. "alignAsLine",
  54. "alignAsSquare",
  55. "shuffle",
  56. "clone",
  57. "lock",
  58. "remove",
  59. ],
  60. form: CubeFormFields,
  61. name: i18n.t("Cube"),
  62. template: {},
  63. },
  64. cylinder: {
  65. component: Cylinder,
  66. defaultActions: ["clone", "lock", "remove"],
  67. availableActions: [
  68. "stack",
  69. "alignAsLine",
  70. "alignAsSquare",
  71. "shuffle",
  72. "clone",
  73. "lock",
  74. "remove",
  75. ],
  76. form: CylinderFormFields,
  77. name: i18n.t("Cylinder"),
  78. template: {},
  79. },
  80. round: {
  81. component: Round,
  82. defaultActions: ["clone", "lock", "remove"],
  83. availableActions: [
  84. "stack",
  85. "alignAsLine",
  86. "alignAsSquare",
  87. "shuffle",
  88. "clone",
  89. "lock",
  90. "remove",
  91. ],
  92. form: RoundFormFields,
  93. name: i18n.t("Round"),
  94. template: {},
  95. },
  96. token: {
  97. component: Token,
  98. defaultActions: ["clone", "lock", "remove"],
  99. availableActions: [
  100. "stack",
  101. "alignAsLine",
  102. "alignAsSquare",
  103. "shuffle",
  104. "clone",
  105. "lock",
  106. "remove",
  107. ],
  108. form: TokenFormFields,
  109. name: i18n.t("Token"),
  110. template: {},
  111. },
  112. meeple: {
  113. component: Meeple,
  114. defaultActions: ["clone", "lock", "remove"],
  115. availableActions: [
  116. "stack",
  117. "alignAsLine",
  118. "alignAsSquare",
  119. "shuffle",
  120. "clone",
  121. "lock",
  122. "remove",
  123. ],
  124. form: MeepleFormFields,
  125. name: i18n.t("Meeple"),
  126. template: {},
  127. },
  128. pawn: {
  129. component: Pawn,
  130. defaultActions: ["clone", "lock", "remove"],
  131. availableActions: [
  132. "stack",
  133. "alignAsLine",
  134. "alignAsSquare",
  135. "shuffle",
  136. "clone",
  137. "lock",
  138. "remove",
  139. ],
  140. form: PawnFormFields,
  141. name: i18n.t("Pawn"),
  142. template: {},
  143. },
  144. jewel: {
  145. component: Jewel,
  146. defaultActions: ["clone", "lock", "remove"],
  147. availableActions: [
  148. "stack",
  149. "alignAsLine",
  150. "alignAsSquare",
  151. "shuffle",
  152. "clone",
  153. "lock",
  154. "remove",
  155. ],
  156. form: JewelFormFields,
  157. name: i18n.t("Jewel"),
  158. template: {},
  159. },
  160. checkerboard: {
  161. component: CheckerBoard,
  162. defaultActions: ["clone", "lock", "remove"],
  163. availableActions: ["clone", "lock", "remove"],
  164. form: CheckerBoardFormFields,
  165. name: i18n.t("Checkerboard"),
  166. template: { layer: -1 },
  167. },
  168. image: {
  169. component: Image,
  170. defaultActions: (item) => {
  171. if (item.backContent) {
  172. return [
  173. "flip",
  174. "flipSelf",
  175. "tap",
  176. "stack",
  177. "shuffle",
  178. "clone",
  179. "lock",
  180. "remove",
  181. ];
  182. } else {
  183. return ["tap", "stack", "shuffle", "clone", "lock", "remove"];
  184. }
  185. },
  186. availableActions: (item) => {
  187. if (item.backContent) {
  188. return [
  189. "flip",
  190. "flipSelf",
  191. "tap",
  192. "rotate30",
  193. "rotate45",
  194. "rotate60",
  195. "rotate90",
  196. "rotate180",
  197. "stack",
  198. "alignAsLine",
  199. "alignAsSquare",
  200. "shuffle",
  201. "randomlyRotate30",
  202. "randomlyRotate45",
  203. "randomlyRotate60",
  204. "randomlyRotate90",
  205. "randomlyRotate180",
  206. "clone",
  207. "lock",
  208. "remove",
  209. ];
  210. } else {
  211. return [
  212. "tap",
  213. "rotate30",
  214. "rotate45",
  215. "rotate60",
  216. "rotate90",
  217. "rotate180",
  218. "stack",
  219. "alignAsLine",
  220. "alignAsSquare",
  221. "shuffle",
  222. "randomlyRotate30",
  223. "randomlyRotate45",
  224. "randomlyRotate60",
  225. "randomlyRotate90",
  226. "randomlyRotate180",
  227. "clone",
  228. "lock",
  229. "remove",
  230. ];
  231. }
  232. },
  233. form: ImageFormFields,
  234. name: i18n.t("Image"),
  235. template: {},
  236. },
  237. counter: {
  238. component: Counter,
  239. defaultActions: ["clone", "lock", "remove"],
  240. availableActions: ["clone", "lock", "remove"],
  241. form: CounterFormFields,
  242. name: i18n.t("Counter"),
  243. template: {},
  244. },
  245. dice: {
  246. component: Dice,
  247. defaultActions: ["clone", "lock", "remove"],
  248. availableActions: [
  249. "clone",
  250. "lock",
  251. "remove",
  252. "alignAsLine",
  253. "alignAsSquare",
  254. ],
  255. form: DiceFormFields,
  256. name: i18n.t("Dice"),
  257. template: {},
  258. },
  259. note: {
  260. component: Note,
  261. defaultActions: ["shuffle", "clone", "lock", "remove"],
  262. availableActions: [
  263. "shuffle",
  264. "clone",
  265. "lock",
  266. "remove",
  267. "alignAsLine",
  268. "alignAsSquare",
  269. ],
  270. form: NoteFormFields,
  271. name: i18n.t("Note"),
  272. template: {},
  273. },
  274. zone: {
  275. component: Zone,
  276. defaultActions: ["clone", "lock", "remove"],
  277. availableActions: [
  278. "clone",
  279. "lock",
  280. "remove",
  281. "alignAsLine",
  282. "alignAsSquare",
  283. ],
  284. form: ZoneFormFields,
  285. name: i18n.t("Zone"),
  286. template: { layer: -1 },
  287. },
  288. };
  289. export const itemLibrary = Object.keys(itemTemplates).map((key) => ({
  290. type: key,
  291. ...itemTemplates[key],
  292. uid: nanoid(),
  293. }));
  294. export default itemTemplates;