<script setup> import Grid from "../../src/Grid.vue"; import CircularCard from "./components/CircularCard.vue"; </script> <template> <div id="app"> <Grid :rows="5" :cols="5" :pos-validation="blockField" v-model="items"> <div id="blocker"> This field is blocked because it's filled, the next one programmatically </div> <template #item="item"> <div class="container">{{ item }}</div> </template> </Grid> <Grid :rows="3" :cols="3" v-model="ticTacToe" class="tic-tac-toe"> <template #item="item"> <CircularCard> {{ item.key.startsWith("a") ? "X" : "O"}}</CircularCard> </template> </Grid> </div> </template> <script> export default { name: "App", methods: { blockField(x, y, key) { // We won't move fields with ID 'obj8' and nothing into (4, 3) if (x === 4 && y === 3) return false; return key !== "obj8"; }, }, data() { return { items: [ { x: 1, y: 3, w: 1, h: 1, key: "obj1", data: {} }, { x: 2, y: 1, w: 1, h: 1, key: "obj2", data: {} }, { x: 3, y: 1, w: 2, h: 2, key: "obj3", data: {} }, { x: 5, y: 2, w: 1, h: 1, key: "obj4", data: {} }, { x: 1, y: 1, w: 1, h: 2, key: "obj5", data: {} }, { x: 5, y: 1, w: 1, h: 1, key: "obj6", data: {} }, { x: 2, y: 2, w: 1, h: 3, key: "obj7", data: {} }, { x: 1, y: 4, w: 1, h: 1, key: "obj8", data: { title: "I'm blocked from moving!" }, }, { x: 5, y: 3, w: 1, h: 1, key: "obj9", data: {} }, ], ticTacToe: [ { x: 1, y: 1, w: 1, h: 1, key: "a1", data: {} }, { x: 1, y: 3, w: 1, h: 1, key: "a2", data: {} }, { x: 2, y: 2, w: 1, h: 1, key: "a3", data: {} }, { x: 3, y: 2, w: 1, h: 1, key: "a4", data: {} }, { x: 3, y: 3, w: 1, h: 1, key: "b1", data: {} }, { x: 1, y: 2, w: 1, h: 1, key: "b2", data: {} }, { x: 3, y: 1, w: 1, h: 1, key: "b3", data: {} }, ] }; }, }; </script> <style scoped> #blocker { grid-row: 3 / span 1; grid-column: 3 / span 1; background-image: linear-gradient( 45deg, #edd85f 25%, #0f2b3d 25%, #0f2b3d 50%, #edd85f 50%, #edd85f 75%, #0f2b3d 75%, #0f2b3d 100% ); background-size: 56.57px 56.57px; color: white; font-size: large; font-weight: bold; text-shadow: 4px 4px 4px #2c3e50; } .container { background: lightcoral; width: 100%; height: 100%; } .tic-tac-toe { max-width: 400px; } </style>