A simple way to solve this is by creating new points at each corner using the Point.ByCartesianCoordinates() node. Use the X and Y coordinate to perform the offset then create a polygon. Youâ€™ll need to specify each corners coordinates explicitly so it wont be very parametric. If you need a solution that can work on any type of shape, then its safe to say the only way to go is coding due to the myriad of possible conditions: 1. Offset directions, 2. Corners, 3. Inverted corners, 4. Extending lines, 5. Trimming lines, etc, etc.

EDIT:

@Kulkul suggestion could form a key part of a coded solution (could possibly be solved using visual programming, but for complex problems, coding makes life a lot easier):

Create vectors by two points from the corners of the existing shape to the corners of the offset shape. Sticking with the solution using points, the dot product can then be used to determine if the XY coordinates at each corner are any one of the four possible conditions: {+X, +Y} or {+X, -Y} or {-X, +Y} or {-X, -Y}