const MODULE_DEFS = [
    {
        id: '1',
        tabId: 'module-1',
        num: 'Mod 1',
        label: "4' Sloping Section",
        type: 'section',
        tooltip: 'Used for descending ramp sections. Connects to any other module.',
        scale: 5,
        orientations: [
            { key: 'N', width: 577,  height: 657  },
            { key: 'S', width: 577,  height: 657  },
            { key: 'W', width: 657,  height: 577  },
            { key: 'E', width: 657,  height: 577  },
        ],
    },
    {
        id: '2',
        tabId: 'module-2',
        num: 'Mod 2',
        label: "4' Bridge Section",
        type: 'bridge',
        tooltip: 'A legless sloping section designed to connect with turning or resting platforms.',
        scale: 10,
        orientations: [
            { key: 'N', width: 968,  height: 1223 },
            { key: 'W', width: 1223, height: 968  },
        ],
    },
    {
        id: '3',
        tabId: 'module-3',
        num: 'Mod 3',
        label: "4' 90° Platform",
        type: 'platform',
        ada: 'non-compliant',
        tooltip: 'Creates a 90-degree left or right turn on a level surface and connects to sloping or straight ramp sections.',
        scale: 10,
        orientations: [
            { key: 'N', width: 1497, height: 1494 },
            { key: 'S', width: 1497, height: 1494 },
            { key: 'W', width: 1494, height: 1497 },
            { key: 'E', width: 1494, height: 1497 },
        ],
    },
    {
        id: '4',
        tabId: 'module-4',
        num: 'Mod 4',
        label: 'Entry & Exit Section',
        type: 'entry',
        ada: 'non-compliant',
        tooltip: 'Provides a ramp exit using a sloping section with a Mod 6 plate and curved handrails.',
        scale: 10,
        orientations: [
            { key: 'N', width: 1185, height: 630  },
            { key: 'S', width: 1185, height: 630  },
            { key: 'W', width: 630,  height: 1185 },
            { key: 'E', width: 630,  height: 1185 },
        ],
    },
    {
        id: '4v2',
        tabId: 'module-4v2',
        num: 'Mod 4v2',
        label: 'Entry & Exit Section',
        type: 'entry',
        ada: 'compliant',
        tooltip: 'Provides an ADA-compliant ramp exit with extended curved handrails.',
        scale: 10,
        orientations: [
            { key: 'N', width: 1185, height: 1200 },
            { key: 'S', width: 1185, height: 1200 },
            { key: 'W', width: 1200, height: 1185 },
            { key: 'E', width: 1200, height: 1185 },
        ],
    },
    {
        id: '6',
        tabId: 'module-6',
        num: 'Mod 6',
        label: 'Transition Plate',
        type: 'entry',
        tooltip: 'Creates the starting point at a door threshold or other connection point. This module does not include a frame, legs, or handrails. It fastens to the ramp and rests on the adjacent structure.',
        scale: 10,
        orientations: [
            { key: 'N', width: 920, height: 366 },
            { key: 'S', width: 920, height: 367 },
            { key: 'W', width: 366, height: 920 },
            { key: 'E', width: 366, height: 920 },
        ],
    },
    {
        id: '7',
        tabId: 'module-7',
        num: 'Mod 7',
        label: "1' Bridge Section",
        type: 'bridge',
        tooltip: "A 1’ sloping section without legs used to achieve desired distance, create a 180 degree switchback between two turning platforms, or begin a sloping section from a platform.",
        scale: 10,
        orientations: [
            { key: 'N', width: 968, height: 313 },
            { key: 'W', width: 313, height: 968 },
        ],
    },
    {
        id: '7B',
        tabId: 'module-7B',
        imagePrefix: '7B-',
        num: 'Mod 7B',
        label: "1' Legged Bridge Section",
        type: 'bridge',
        tooltip: 'A 1’ sloping section with legs used to achieve desired distance, create a 180 degree switchback between two turning platforms, or begin a sloping section from a platform.',
        scale: 5,
        orientations: [
            { key: 'N', width: 577, height: 205 },
            { key: 'S', width: 577, height: 205 },
            { key: 'W', width: 205, height: 577 },
            { key: 'E', width: 205, height: 577 },
        ],
    },
    {
        id: '8',
        tabId: 'module-8',
        num: 'Mod 8',
        label: "5' 90° Platform",
        type: 'platform',
        ada: 'compliant',
        tooltip: 'A larger 90-degree turning platform used in ADA-compliant ramp layouts.',
        scale: 10,
        orientations: [
            { key: 'N', width: 1767, height: 1764 },
            { key: 'S', width: 1764, height: 1767 },
            { key: 'W', width: 1764, height: 1767 },
            { key: 'E', width: 1767, height: 1764 },
        ],
    },
    {
        id: '9',
        tabId: 'module-9',
        num: 'Mod 9',
        label: "4' Straight Platform",
        type: 'platform',
        ada: 'non-compliant',
        tooltip: 'Provides a resting platform for long ramp runs, allowing straight entry and exit.',
        scale: 10,
        orientations: [
            { key: 'N', width: 1467, height: 1530 },
            { key: 'S', width: 1467, height: 1530 },
            { key: 'W', width: 1530, height: 1467 },
            { key: 'E', width: 1530, height: 1467 },
        ],
    },
    {
        id: '10',
        tabId: 'module-10',
        num: 'Mod 10',
        label: "5' Straight Platform",
        type: 'platform',
        ada: 'compliant',
        tooltip: 'A larger straight resting platform similar to Mod 9, offering greater maneuvering space.',
        scale: 10,
        orientations: [
            { key: 'N', width: 1760, height: 1836 },
            { key: 'S', width: 1760, height: 1836 },
            { key: 'W', width: 1836, height: 1760 },
            { key: 'E', width: 1836, height: 1760 },
        ],
    },
];

const modCompatibility = {
    Module1N : { N:['Module1N', 'Module3S', 'Module3W', 'Module3E', 'Module4S', 'Module4v2S', 'Module7BN', 'Module8S', 'Module8W', 'Module9N', 'Module9S', 'Module10N', 'Module10S'],
                 S:['Module1N', 'Module2N', 'Module6S', 'Module7N', 'Module7BN'],
                 W:[],
                 E:[]},
    Module1S : { N:['Module1S', 'Module2N', 'Module6N', 'Module7N', 'Module7BS'],
                 S:['Module1S', 'Module3N', 'Module3E', 'Module4N', 'Module4v2N', 'Module5N', 'Module7BS', 'Module8E', 'Module8N', 'Module9N', 'Module9S', 'Module10N', 'Module10S'],
                 W:[],
                 E:[]},
    Module1W : { W:['Module1W', 'Module2W', 'Module6E', 'Module7W', 'Module7BW'],
                 E:['Module1W', 'Module3S', 'Module3E', 'Module5W', 'Module7BW', 'Module8S', 'Module8E', 'Module9W', 'Module9E', 'Module10W', 'Module10E'],
                 N:[],
                 S:[]},
    Module1E : { W:['Module1E', 'Module3W', 'Module3N', 'Module4E', 'Module4v2E', 'Module7BE', 'Module8N', 'Module8W', 'Module9E', 'Module9W', 'Module10E', 'Module10W'],
                 E:['Module1E', 'Module2W', 'Module6W', 'Module7W', 'Module7BE'],
                 N:[],
                 S:[]},
    Module2N : { N:['Module1N', 'Module3S', 'Module3W', 'Module3S', 'Module4S', 'Module4v2S', 'Module5N', 'Module7BN', 'Module8W', 'Module8S', 'Module9S', 'Module9N', 'Module10S', 'Module10N'],
                 S:['Module1S', 'Module3N', 'Module3E', 'Module4N', 'Module4v2N', 'Module5N', 'Module7BS', 'Module8N', 'Module8E', 'Module9N', 'Module9S', 'Module10N', 'Module10S'],
                 W:[],
                 E:[]},
    Module2W : { W:['Module1E', 'Module3N', 'Module3W', 'Module4E', 'Module4v2E', 'Module5W', 'Module7BE', 'Module8N', 'Module8W', 'Module9W', 'Module9E', 'Module10W', 'Module10E'],
                 E:['Module1W', 'Module3S', 'Module3E', 'Module5W', 'Module7BW', 'Module8S', 'Module8E', 'Module9W', 'Module9E', 'Module10W', 'Module10E'],
                 N:[],
                 S:[]},
    Module3N : { N:['Module2N', 'Module6N', 'Module7N'],
                 S:[],
                 W:[],
                 E:['Module1E', 'Module2W', 'Module6W', 'Module7W', 'Module7BE']},
    Module3S : { N:[],
                 S:['Module1N', 'Module2N', 'Module6S', 'Module7N', 'Module7BN'],
                 W:['Module1W', 'Module2W', 'Module6E', 'Module7W', 'Module7BW'],
                 E:[]},
    Module3W : { N:[],
                 S:['Module1N', 'Module2N', 'Module6S', 'Module7N', 'Module7BN'],
                 W:[],
                 E:['Module1E', 'Module2W', 'Module6W', 'Module7W', 'Module7BE']},
    Module3E : { N:['Module1S', 'Module2N', 'Module6N', 'Module7N', 'Module7BS'],
                 S:[],
                 W:['Module1W', 'Module2W', 'Module6E', 'Module7W', 'Module7BW'],
                 E:[]},
    Module4N : { N:['Module1S', 'Module2N', 'Module7N', 'Module7BS'],
                 S:[null],
                 W:[],
                 E:[]},
    Module4S : { N:[],
                 S:['Module1N', 'Module2N', 'Module7N', 'Module7BN'],
                 W:[],
                 E:[]},
    Module4W : { N:[],
                 S:[],
                 W:['Module1W', 'Module2W', 'Module7E', 'Module7BW'],
                 E:[]},
    Module4E : { N:[],
                 S:[],
                 W:[],
                 E:['Module1E', 'Module2W', 'Module7W', 'Module7BE']},
    Module4v2N : { N:['Module1S', 'Module2N', 'Module7N', 'Module7BS'],
                   S:[null],
                   W:[],
                   E:[]},
    Module4v2S : { N:[],
                   S:['Module1N', 'Module2N', 'Module7N', 'Module7BN'],
                   W:[],
                   E:[]},
    Module4v2W : { N:[],
                   S:[],
                   W:['Module1W', 'Module2W', 'Module7E', 'Module7BW'],
                   E:[]},
    Module4v2E : { N:[],
                   S:[],
                   W:[],
                   E:['Module1E', 'Module2W', 'Module7W', 'Module7BE']},
    Module5N : { N:['Module1S', 'Module2N', 'Module6N', 'Module7N', 'Module7BS'],
                 S:['Module1N', 'Module2N', 'Module6S', 'Module7N', 'Module7BN'],
                 W:[],
                 E:[]},
    Module5W : { N:[],
                 S:[],
                 W:['Module1W', 'Module2W', 'Module6E', 'Module7BW'],
                 E:['Module1E', 'Module2W', 'Module6W', 'Module7W', 'Module7BE']},
    Module6N : { N:[],
                 S:['Module1S', 'Module3N', 'Module3E', 'Module5N', 'Module7BS', 'Module8E', 'Module8N', 'Module9N', 'Module9S', 'Module10N', 'Module10S'],
                 W:[],
                 E:[]},
    Module6S : { N:['Module1N', 'Module3W', 'Module3S', 'Module5N', 'Module7BN', 'Module8W', 'Module8S', 'Module9N', 'Module9S', 'Module10N', 'Module10S'],
                 S:[null, 'Module3W', 'Module3S', 'Module5N', 'Module8W'],
                 W:[],
                 E:[]},
    Module6W : { N:[],
                 S:[],
                 W:['Module1E', 'Module3W', 'Module3N', 'Module5W', 'Module7BE', 'Module8N', 'Module8W', 'Module9W', 'Module9E', 'Module10W', 'Module10E'],
                 E:[]},
    Module6E : { N:[],
                 S:[],
                 W:[],
                 E:['Module1W', 'Module3S', 'Module3E', 'Module5W', 'Module7BW', 'Module8S', 'Module8E', 'Module9W', 'Module9E', 'Module10W', 'Module10E']},
    Module7N : { N:['Module1N', 'Module3W', 'Module3S', 'Module4S', 'Module4v2S', 'Module5N', 'Module7BN', 'Module8W', 'Module8S', 'Module8N', 'Module9N', 'Module9S', 'Module10N', 'Module10S'],
                 S:['Module1S', 'Module3N', 'Module3E', 'Module4N', 'Module4v2N', 'Module5N', 'Module7BS', 'Module8N', 'Module8E', 'Module9N', 'Module9S', 'Module10N', 'Module10S'],
                 W:[],
                 E:['Module3N']},
    Module7W : { N:[],
                 S:[],
                 W:['Module1E', 'Module3W', 'Module3N', 'Module4E', 'Module4v2E', 'Module5W', 'Module7BE', 'Module8W', 'Module8N', 'Module9W', 'Module9E', 'Module10W', 'Module10E'],
                 E:['Module1W', 'Module3S', 'Module3E', 'Module5W', 'Module7BW', 'Module8E', 'Module8S', 'Module9W', 'Module9E', 'Module10W', 'Module10E']},
    Module7BN : { N:['Module1N', 'Module3S', 'Module3W', 'Module3E', 'Module4S', 'Module4v2S', 'Module7BN', 'Module8S', 'Module8W', 'Module9N', 'Module9S', 'Module10N', 'Module10S'],
                  S:['Module1N', 'Module2N', 'Module6S', 'Module7N', 'Module7BN'],
                  W:[],
                  E:[]},
    Module7BS : { N:['Module1S', 'Module2N', 'Module6N', 'Module7N', 'Module7BS'],
                  S:['Module1S', 'Module3N', 'Module3E', 'Module4N', 'Module4v2N', 'Module5N', 'Module7BS', 'Module8E', 'Module8N', 'Module9N', 'Module9S', 'Module10N', 'Module10S'],
                  W:[],
                  E:[]},
    Module7BW : { W:['Module1W', 'Module2W', 'Module6E', 'Module7W', 'Module7BW'],
                  E:['Module1W', 'Module3S', 'Module3E', 'Module5W', 'Module7BW', 'Module8S', 'Module8E', 'Module9W', 'Module9E', 'Module10W', 'Module10E'],
                  N:[],
                  S:[]},
    Module7BE : { W:['Module1E', 'Module3W', 'Module3N', 'Module4E', 'Module4v2E', 'Module7BE', 'Module8N', 'Module8W', 'Module9E', 'Module9W', 'Module10E', 'Module10W'],
                  E:['Module1E', 'Module2W', 'Module6W', 'Module7W', 'Module7BE'],
                  N:[],
                  S:[]},
    Module8N : { N:['Module2N', 'Module6N', 'Module7N'],
                 S:[],
                 W:[],
                 E:['Module1E', 'Module2W', 'Module6W', 'Module7W', 'Module7BE']},
    Module8S : { N:[],
                 S:['Module1N', 'Module2N', 'Module6S', 'Module7N', 'Module7BN'],
                 W:['Module1W', 'Module2W', 'Module6E', 'Module7W', 'Module7BW'],
                 E:[]},
    Module8W : { N:[],
                 S:['Module1N', 'Module2N', 'Module6S', 'Module7N', 'Module7BN'],
                 W:[],
                 E:['Module1E', 'Module2W', 'Module6W', 'Module7W', 'Module7BE']},
    Module8E : { N:['Module1S', 'Module2N', 'Module6N', 'Module7N', 'Module7BS'],
                 S:[],
                 W:['Module1W', 'Module2W', 'Module6E', 'Module7W', 'Module7BW'],
                 E:[]},
    Module9N : { N:['Module1S', 'Module2N', 'Module6N', 'Module7N', 'Module7S', 'Module7BS'],
                 S:['Module1N', 'Module2N', 'Module6S', 'Module7N', 'Module7S', 'Module7BN'],
                 W:[],
                 E:[]},
    Module9S : { N:['Module1S', 'Module2N', 'Module6N', 'Module7N', 'Module7S', 'Module7BS'],
                 S:['Module1N', 'Module2N', 'Module6S', 'Module7N', 'Module7S', 'Module7BN'],
                 W:[],
                 E:[]},
    Module9W : { N:[],
                 S:[],
                 W:['Module1W', 'Module2W', 'Module6E', 'Module7W', 'Module7BW'],
                 E:['Module1E', 'Module2W', 'Module6W', 'Module7W', 'Module7BE']},
    Module9E : { N:[],
                 S:[],
                 W:['Module1W', 'Module2W', 'Module6E', 'Module7W', 'Module7BW'],
                 E:['Module1E', 'Module2W', 'Module6W', 'Module7W', 'Module7BE']},
    Module10N : { N:['Module1S', 'Module2N', 'Module6N', 'Module7N', 'Module7S', 'Module7BS'],
                  S:['Module1N', 'Module2N', 'Module6S', 'Module7N', 'Module7S', 'Module7BN'],
                  W:[],
                  E:[]},
    Module10S : { N:['Module1S', 'Module2N', 'Module6N', 'Module7N', 'Module7S', 'Module7BS'],
                  S:['Module1N', 'Module2N', 'Module6S', 'Module7N', 'Module7S', 'Module7BN'],
                  W:[],
                  E:[]},
    Module10W : { N:[],
                  S:[],
                  W:['Module1W', 'Module2W', 'Module6E', 'Module7W', 'Module7BW'],
                  E:['Module1E', 'Module2W', 'Module6W', 'Module7W', 'Module7BE']},
    Module10E : { N:[],
                  S:[],
                  W:['Module1W', 'Module2W', 'Module6E', 'Module7W', 'Module7BW'],
                  E:['Module1E', 'Module2W', 'Module6W', 'Module7W', 'Module7BE']},
};
