Documentation for this module may be created at Module:Sandbox/Harshrathod50/Cube 3D/doc

--[[
    The CSS 3D Cube
    Author: Harsh Rathod
    License: MIT
    Version: 1.0.0
]]

local p = {}

function p.cube(frame)
	local side = "100px"
	faceStyle = {
		["align-items"] = "center",
        ["background"] = "yellow",
        ["border"] = "1px solid black",
        ["box-sizing"] = "border-box",
        ["display"] = "flex",
        ["flex-wrap"] = "wrap",
        ["justify-content"] = "center",
        ["height"] = side,
        ["opacity"] = 0.9,
        ["overflow"] = "hidden",
        ["position"] = "absolute",
            ["top"] = "calc(" .. side .. " / -2)",
            ["left"] = "calc(" .. side .. " / -2)",
        ["width"] = side
    }
    cube = mw.html.create("div")
    cube
        :css({
            ["height"] = 0,
            ["position"] = "absolute",
                ["top"] = "50%",
                ["left"] = "50%",
            ["transform"] = "rotateX(-45deg) rotateY(45deg)",
            ["transform-style"] = "preserve-3d",
            ["width"] = 0
        })
        :tag("div")
            :css(faceStyle)
            :css({
            	["transform"] = "translateZ(calc(" .. side .. " / 2))"
            })
            :done()
        :tag("div")
            :css(faceStyle)
            :css({
            	["transform"] = "rotateY(180deg) translateZ(calc(" .. side .. " / 2))"
            })
            :done()
        :tag("div")
            :css(faceStyle)
            :css({
            	["transform"] = "rotateY(90deg) translateZ(calc(" .. side .. " / 2))"
            })
            :done()
        :tag("div")
            :css(faceStyle)
            :css({
            	["transform"] = "rotateY(-90deg) translateZ(calc(" .. side .. " / 2))"
            })
            :done()
        :tag("div")
            :css(faceStyle)
            :css({
            	["transform"] = "rotateX(90deg) translateZ(calc(" .. side .. " / 2))"
            })
            :done()
        :tag("div")
            :css(faceStyle)
            :css({
            	["transform"] = "rotateX(90deg) translateZ(calc(" .. side .. " / -2))"
            })
    cubeContainer = mw.html.create("div")
    cubeContainer
        :node(cube)
        :css({
            ["box-sizing"] = "border-box",
            ["height"] = "calc(" .. side .. " + (" .. side .. " * 0.75))",
            ["position"] = "relative",
            ["width"] = "calc(" .. side .. " + (" .. side .. " * 0.75))"
        })
    return cubeContainer
end

return p