Source: example/src/example.js

/**
 * ClassyTemplate Example Class
 * @class Geometry.ExampleClass
 * @summary
 * An example of a JavaScript class that is a member of the API entrypoint
 * @description
 * Documented classes can also include more verbose descriptions that are included in the documentation, as below.
 * 
 * ### Lorem Ipsum
 * Salutatus quem ultrices mentitum discere sodales perpetua audire sed torquent.
 * No recteque dicunt pri a pulvinar penatibus.
 * Litora interpretaris veritus scripserit falli duis.
 *
 * #### Moderatius Facilis Possim
 * Eam vix percipit eius mel civibus cras tellus voluptaria postea.
 * Meliore sale no adipiscing ex deserunt natoque scripserit fusce falli.
 *
 * ### Causae Error
 * Error causae dissentiunt justo fabulas conubia. Graece congue dicit harum saperet sumo adolescens eloquentiam.
 * Torquent quaeque magnis errem mandamus malesuada.
 * @example
 * <caption>An example with a caption</caption>
 * // Captions must be wrapped in <caption></caption> tags
 * new ExampleClass("example");
 * @example
 * // An example without a caption
 * new ExampleClass("example");
 */
export default class ExampleClass {
    /**
     * Constructs an instance of ExampleClass from the supplied parameters
     * @param {String} param1 - an example of a string parameter
     * @param {Object} [param2={}] - an example of an object parameter
     * @param {String} [param2.prop1] - a string property of an object parameter
     * @param {Number} [param2.prop2] - a number property of an object parameter
     * @param {Boolean} [param3=false] - an example of a boolean parameter
     * @property {String} prop1 - an example of a string property
     * @property {Boolean} prop2 - an example of a boolean property
     * @property {Geometry.ExampleClass~ExampleType} prop3 - an example of an object property
     */
    constructor(param1, param2 = {}, param3 = false) {
        this.prop1 = param1;
        this.prop2 = param3;
        
        /**
         * @typedef {Object} Geometry.ExampleClass~ExampleType
         * @property {String} str - a string property of an object property
         * @property {Number} num - a number property of an object property
         */
        this.prop3 = {
            str: param2.prop1,
            num: param2.prop2
        };
    }
    
    /**
     * An example of a static member of a class, with a default value
     * @type {String[]}
     */
    static titles = ["An Example"];
    
    /**
     * Says hello
     * @param {String} name - who to say hello to
     */
    hello(name) {
        console.log(`Hello ${name}!`)
    }
    
    /**
     * Adds two numbers together
     * @param {Number} x - first number
     * @param {Number} y - second number
     * @returns {Number} first and second number added together
     */
    static add(x, y) {
        return x+y;
    }
}

/**
 * Collection of strings documented for the example class
 * @enum
 * @inner
 * @constant
 * @type {String[]}
 * @alias ExampleStrings
 * @memberOf Geometry.ExampleClass
 */
const strings = ["and", "or", "not"];