<commit_before>import * as THREE from 'three';

import {on, Graphics, Meta} from '../../src';

class P {
    constructor(){
        this.name = "Papa"
    }
    intro(){
        console.log(`I am ${this.name}.`)
    }
}

new P().intro()

class F extends P {
    constructor(){
        super()
        this.name = "Flo"
    }
}

new F().intro()

class Red extends Graphics {
    constructor(props){
        super(props = {
            geometry: new THREE.SphereGeometry(.5,16,16),
            material: new THREE.MeshPhongMaterial({color:0xff0000}),
            position: props.position
        })
    }
}

class Blue extends Meta {
    constructor(props){
        super(props = {
            position: props.position,
            graphics: new Graphics({
                geometry: new THREE.SphereGeometry(.5,16,16),
                material: new THREE.MeshPhongMaterial({color:0x0000ff}),              
            }, true)
        })
    }
}

class Yellow extends Meta {
    constructor(props){
        super(props = {
            graphics: new Graphics({
                geometry: new THREE.SphereGeometry(.5,16,16),
                material: new THREE.MeshPhongMaterial({color:0xffff00}),              
            }, true)
        })
    }
}

on('touch', (data) => {

    const r = 
    new Red({
        position: data.position
    })

    const b = 
    new Blue({
        position: data.position
    })

    const y =
    new Yellow()
    .setPosition(data.position)

    console.log(r,b,y)
    
});<commit_msg>Added custom meta objects example<commit_after>import * as THREE from 'three';

import {on, Graphics, Meta} from '../../src';

class P {
    constructor(){
        this.name = "Papa"
    }
    intro(){
        console.log(`I am ${this.name}.`)
    }
}

new P().intro()

class F extends P {
    constructor(){
        super()
        this.name = "Flo"
    }
}

new F().intro()

class Red extends Graphics {
    constructor(props){
        super(props = {
            geometry: new THREE.SphereGeometry(.5,16,16),
            material: new THREE.MeshPhongMaterial({color:0xff0000}),
            position: props.position
        })
    }
}

class Blue extends Meta {
    constructor(props){
        super(props = {
            position: props.position,
            graphics: new Graphics({
                geometry: new THREE.SphereGeometry(.5,16,16),
                material: new THREE.MeshPhongMaterial({color:0x0000ff}),              
            }, true)
        })
    }
}

class Yellow extends Meta {
    constructor(props){
        super(props = {
            graphics: new Graphics({
                geometry: new THREE.SphereGeometry(.5,16,16),
                material: new THREE.MeshPhongMaterial({color:0xffff00}),              
            }, true)
        })
    }
}

on('touch', (data) => {

    const r = 
    
    new Red({
        position: data.position
    })

    const b = 

    new Blue({
        position: data.position
    })

    const y =

    new Yellow()
    .setPosition(data.position)

    console.log(r,b,y)
    
});
{'fraction_non_alphanumeric': 0.13181076672104405, 'fraction_numerical': 0.01827079934747145, 'mean_word_length': 1.7180851063829787, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7035065', 'n_tokens_mistral': 961, 'n_tokens_neox': 882, 'n_words': 204}