It is a nice UX, but with a fatal flaw: Tiles are supposed to be free when there is a side free, but you instead have it coded to be free when the top or bottom is free. Your app, your rules, so if you intended to do that, cool. It is just a fundamental divergence from how other implementations do it.
No.
According to wikipedia[1]: "A tile is said to be open or exposed if it can be moved either left or right without disturbing other tiles.". Also look at the photo in the wikipedia article[2]. This implementation looks correct to me.
[1]: https://en.wikipedia.org/wiki/Mahjong_solitaire
[2]: https://en.wikipedia.org/wiki/Mahjong_solitaire#/media/File:...