    /** @module Id */

    /**
     * the current instance of Id
     * @type {Id}
     */
    let existingIdInstance;

    /**
     * singleton to generate unique id's
     *
     * usage: `let id = new Id().unique`
     */
    export default class Id {
        constructor() {
            if (!existingIdInstance) {
                existingIdInstance = this;
            }

            /**
             * prefix for the id, that is common in all the Ids
             * @type {String}
             */
            this.prefix = 'id';

            /**
             * numeric part of the next id (the next id without the prefix)
             * @type {number}
             */
            this.nextId = 0;

            return existingIdInstance;
        }

        /**
         * get unique ID
         * @return {string} new unique ID
         */
        get unique() {
            let retVal = this.prefix + this.nextId;

            // find next unused idXXXX to prevent id collision that might be caused by some other component
            // (it really should not happen, but this is a simple way to ensure it)
            while ($('#' + retVal).length) {
                this.nextId++;
                retVal = this.generate();
            }
            // return this id
            this.nextId++;

            return retVal;
        }
    }