{"_id":"jsx-in-ttpg","_rev":"32-cb292695305296f816b9fbb9c8452ffe","name":"jsx-in-ttpg","dist-tags":{"latest":"2.3.0"},"versions":{"0.0.1":{"name":"jsx-in-ttpg","version":"0.0.1","license":"UNLICENSE","_id":"jsx-in-ttpg@0.0.1","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"adad134d56d976bd05d65895837e63e402addf3d","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-0.0.1.tgz","fileCount":15,"integrity":"sha512-Amse+iTxeb4zVbdKsyjcK3mR3hsscIG+H7RqF2mOvpg8btsnZp2UFAuqjqLm82gtLCpJagYA5sWBY9zPnpmN+A==","signatures":[{"sig":"MEQCIDmXPM+CmkddyD7d2l23Khf0rBAQorzuLUFDJ4i0goI0AiB8Zl6lwB3qLio7KpQCzhy4pe8ccw2apuoh468aETXiGA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":70233},"main":"dist/index.js","_from":"file:jsx-in-ttpg-0.0.1.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/*.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/dc464379837d675e98dd242cabe47a58/jsx-in-ttpg-0.0.1.tgz","_integrity":"sha512-Amse+iTxeb4zVbdKsyjcK3mR3hsscIG+H7RqF2mOvpg8btsnZp2UFAuqjqLm82gtLCpJagYA5sWBY9zPnpmN+A==","_npmVersion":"8.19.4","directories":{},"_nodeVersion":"16.20.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_0.0.1_1691463875440_0.4055336412854029","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"jsx-in-ttpg","version":"0.0.2","license":"UNLICENSE","_id":"jsx-in-ttpg@0.0.2","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"721bf7ad8d518b66e5f42c2a55173b81398d1237","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-0.0.2.tgz","fileCount":11,"integrity":"sha512-BQaYX1g5aay4hsD2jq0wMz3sqjvKLGMzliHe5RALYqQKg1htXv74iy5JnKfPPYqtM6NJX7gDN1kvKDmAzUmzpQ==","signatures":[{"sig":"MEQCIAo2yVPG/5g1/f3qwhm08A9rrA6uUo4HLfNb/RzjRD2RAiASSTRiRfiANQ53gDhZ2EJU6DfhsIgYCs0QDoS0avjPsQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":95732},"main":"dist/index.js","_from":"file:jsx-in-ttpg-0.0.2.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/e2bd8168733cdf1fe42beecd399b3e04/jsx-in-ttpg-0.0.2.tgz","_integrity":"sha512-BQaYX1g5aay4hsD2jq0wMz3sqjvKLGMzliHe5RALYqQKg1htXv74iy5JnKfPPYqtM6NJX7gDN1kvKDmAzUmzpQ==","_npmVersion":"8.19.4","directories":{},"_nodeVersion":"16.20.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_0.0.2_1691465076296_0.3764959511950603","host":"s3://npm-registry-packages"}},"0.0.9":{"name":"jsx-in-ttpg","version":"0.0.9","license":"UNLICENSE","_id":"jsx-in-ttpg@0.0.9","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"24fd13161a8f5cb980aaba8d5378e07089135198","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-0.0.9.tgz","fileCount":7,"integrity":"sha512-ujjcViM6n14BayvDh628BafBjDcBXwko/uBO6mQ6VW5SgBIz0/RVB5WdfjhPnU7Yt8+AGU5K/S2SqvNgKk1tSw==","signatures":[{"sig":"MEUCIGhJ4oYWyKB6QF/YMgN8swKLdy/LohFN1Lu7UzIT1zKHAiEA/V35D3up+kdPIKd+pCSTGGtc0U5NOXrkh40acbrBnX4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":85864},"main":"dist/index.js","_from":"file:jsx-in-ttpg-0.0.9.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/63b375162c58a390f3efd06dcff1a7c5/jsx-in-ttpg-0.0.9.tgz","_integrity":"sha512-ujjcViM6n14BayvDh628BafBjDcBXwko/uBO6mQ6VW5SgBIz0/RVB5WdfjhPnU7Yt8+AGU5K/S2SqvNgKk1tSw==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_0.0.9_1691474349057_0.5055184938578332","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"jsx-in-ttpg","version":"1.0.0","license":"UNLICENSE","_id":"jsx-in-ttpg@1.0.0","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"d0c230325f9e6225896c9d2af47c38b38104a877","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.0.0.tgz","fileCount":7,"integrity":"sha512-9oiLnT23n7O8lTFUBRQ65UXu3ErGc21JR4Wk2zbXTt/9bzTYxzkaZ0AOAEKV1WCVp4CZ/buV4irX/UHnWXwBvw==","signatures":[{"sig":"MEQCIDB9NKDPeqwqwoIBOODAmz2/GdZD4NutinUnp5I3pZZUAiAM3/slTb1rPaeWNHDWts17DoRhj/KOSlji/fpAA++a9Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":85864},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.0.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/c7b29e83e44878f3c4ca67aafa9950e7/jsx-in-ttpg-1.0.0.tgz","_integrity":"sha512-9oiLnT23n7O8lTFUBRQ65UXu3ErGc21JR4Wk2zbXTt/9bzTYxzkaZ0AOAEKV1WCVp4CZ/buV4irX/UHnWXwBvw==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.0.0_1691474474629_0.8106367039425049","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"jsx-in-ttpg","version":"1.1.0","license":"UNLICENSE","_id":"jsx-in-ttpg@1.1.0","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"76180fbf6a9dc625678675f971c7ebe21fac1f45","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.1.0.tgz","fileCount":7,"integrity":"sha512-MG6L6+axqcOIH5XHUjajKuYAxt92xlt6qSsTzrfG9XW33XPqt0wdnZFiPkj6AcP1arbcQofZI1rXxqgpL6Oi5g==","signatures":[{"sig":"MEUCIFg1e4BQGeGbTItSg4LnF9xH2Cv861Sy5iMX8WVSXBmAAiEAmGzuvpjN8nc11/L7UJzb6r4a46qrpqVdMyxsu2oE2So=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":84832},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.1.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/8937194ba844da4d95e286ab7219cc33/jsx-in-ttpg-1.1.0.tgz","_integrity":"sha512-MG6L6+axqcOIH5XHUjajKuYAxt92xlt6qSsTzrfG9XW33XPqt0wdnZFiPkj6AcP1arbcQofZI1rXxqgpL6Oi5g==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.1.0_1691509753001_0.06956320547136463","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"jsx-in-ttpg","version":"1.1.1","license":"UNLICENSE","_id":"jsx-in-ttpg@1.1.1","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"411191d7ff479731fc8024b1a73549859da48366","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.1.1.tgz","fileCount":7,"integrity":"sha512-w/ENg7EWPEPp+hGTcOcwrPBd5WyTMSxprv+mWcit8SuvuoAZuRyHbmjzkkCu687zTz3f0NQkfYS3xAo/9pyRRg==","signatures":[{"sig":"MEUCIGubKON+ZZ7F3yRJGVgH4UWnWS7rh9Kk55lNPgzoXVXxAiEA4cWcJXCl40GPuCSr/OOoriD0jF+0130sXMfK0q7v8fE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":85656},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.1.1.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/1451984d5c0b910202a67bd81bf42e85/jsx-in-ttpg-1.1.1.tgz","_integrity":"sha512-w/ENg7EWPEPp+hGTcOcwrPBd5WyTMSxprv+mWcit8SuvuoAZuRyHbmjzkkCu687zTz3f0NQkfYS3xAo/9pyRRg==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.1.1_1691510788826_0.9115888942165482","host":"s3://npm-registry-packages"}},"1.1.2":{"name":"jsx-in-ttpg","version":"1.1.2","license":"UNLICENSE","_id":"jsx-in-ttpg@1.1.2","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"f2f051707abc3dbdd668568b24299e37bfa9a4b4","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.1.2.tgz","fileCount":7,"integrity":"sha512-vPgkxuBykUqz1HXnsyDS7AQzOrYcpThnm4BhJLYjU+SyOLwNECk5Yj/RZMgpPqYeAIKQUC3om4qfspeyxNKlRw==","signatures":[{"sig":"MEQCIDKsvbGjbg9eHh4Qyhk+qfaDOAwC+AUtLLgOYn33Gn10AiBoR7Z7BukQCBn3osJDa9hZQ4x1nmXi8280mOmpJdcd0A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":86568},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.1.2.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/0d397e4200a563df88e17781fe06b50e/jsx-in-ttpg-1.1.2.tgz","_integrity":"sha512-vPgkxuBykUqz1HXnsyDS7AQzOrYcpThnm4BhJLYjU+SyOLwNECk5Yj/RZMgpPqYeAIKQUC3om4qfspeyxNKlRw==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.1.2_1691511697494_0.9795406974564631","host":"s3://npm-registry-packages"}},"1.1.3":{"name":"jsx-in-ttpg","version":"1.1.3","license":"UNLICENSE","_id":"jsx-in-ttpg@1.1.3","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"7de55af45410e9cdd369c3847e709994b95dc4c8","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.1.3.tgz","fileCount":7,"integrity":"sha512-8kWNePtLCiA/sdeaFcxJAVtVoBvod1qHKc7pON5dXJiYLpnicx1RXGv2shjizf41UoQHtdgCjVzGh8ubjqdQrw==","signatures":[{"sig":"MEUCIQD0hnxVwZT+ox+ix4yQpU2RIkn1KKRRAbHt4sRyTvU9DgIgT3uX55l0vwLvNc2efxqFW3XMEWwIkRmqhnNgBhbJkYo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":85332},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.1.3.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/89ee68ff1057ff24002fac9ae21e6f26/jsx-in-ttpg-1.1.3.tgz","_integrity":"sha512-8kWNePtLCiA/sdeaFcxJAVtVoBvod1qHKc7pON5dXJiYLpnicx1RXGv2shjizf41UoQHtdgCjVzGh8ubjqdQrw==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.1.3_1691513159560_0.10526165816089228","host":"s3://npm-registry-packages"}},"1.1.4":{"name":"jsx-in-ttpg","version":"1.1.4","license":"UNLICENSE","_id":"jsx-in-ttpg@1.1.4","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"f77ff5a277225f002e8dc8b99e5437f479c11e41","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.1.4.tgz","fileCount":7,"integrity":"sha512-4tIK1pgLRp7gTnxB3HpseT0x+kLTey6qihaeBQ9pvqT5sVXM0aj8pYeC7mQ35AZqNiTk+EdurBulHU8TYi50EQ==","signatures":[{"sig":"MEUCIQD5TYrsIQLXp9RnshcVwrWqTFCNTaaZf1m1RV10xzPTegIgHS1g5PCL/6nT8aKSVafjxNad0bhs/5SC0+hDeHZrYgI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":88821},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.1.4.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/ceafa678132b74c3d82f9de72a84cad8/jsx-in-ttpg-1.1.4.tgz","_integrity":"sha512-4tIK1pgLRp7gTnxB3HpseT0x+kLTey6qihaeBQ9pvqT5sVXM0aj8pYeC7mQ35AZqNiTk+EdurBulHU8TYi50EQ==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.1.4_1691544677222_0.723973439952194","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"jsx-in-ttpg","version":"1.2.0","license":"UNLICENSE","_id":"jsx-in-ttpg@1.2.0","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"115fe1b6473bfa63ef66bcceb5e89f8522be9d7f","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.2.0.tgz","fileCount":7,"integrity":"sha512-UiEGBSWfdbrsybUyjifxJMwJhOdgENsdBK6MNHDGq27u66+Zcxe5zVVzhBi66gL3jglBpsD7a+Zy+NC1d+dC6Q==","signatures":[{"sig":"MEUCIQC/wp+fyrTIEzObR9GILundX7ecnY72HbZwsJTs+WYE2gIgGghKiASlfNGJJXSxGdVeJmdK/obd3mwTcHk3EXge9r8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":95669},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.2.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/af11ad88ac51795d0fe9cd830e7c76a4/jsx-in-ttpg-1.2.0.tgz","_integrity":"sha512-UiEGBSWfdbrsybUyjifxJMwJhOdgENsdBK6MNHDGq27u66+Zcxe5zVVzhBi66gL3jglBpsD7a+Zy+NC1d+dC6Q==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.2.0_1691590862447_0.13093255371841295","host":"s3://npm-registry-packages"}},"1.2.1":{"name":"jsx-in-ttpg","version":"1.2.1","license":"UNLICENSE","_id":"jsx-in-ttpg@1.2.1","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"1c073544f9a52326c6b81e1c5707cb6dd2e7bd2a","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.2.1.tgz","fileCount":7,"integrity":"sha512-gQTofKWp3J54FBn6baZLdx37Sh2zSXfMEYiIiCUF1NanpK6Fvd1rwEk/1/pa79F236ESNFWe8TskVPYKcFpgug==","signatures":[{"sig":"MEUCIFkmteXFeRH+A6yH95jYZ9F9kyLYClc/F5E+uc59wPo5AiEA2MR8V538IvNPMQdSRT5GEZCO53tDfEaDHHVB8WP5WSI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":95681},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.2.1.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/00ab6da49e5cfc3342b4f820e666bbb8/jsx-in-ttpg-1.2.1.tgz","_integrity":"sha512-gQTofKWp3J54FBn6baZLdx37Sh2zSXfMEYiIiCUF1NanpK6Fvd1rwEk/1/pa79F236ESNFWe8TskVPYKcFpgug==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.2.1_1691591087034_0.1043197351201044","host":"s3://npm-registry-packages"}},"1.2.2":{"name":"jsx-in-ttpg","version":"1.2.2","license":"UNLICENSE","_id":"jsx-in-ttpg@1.2.2","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"5f08dbc4b92b3558a5d51c8d5360a4a969bef1f1","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.2.2.tgz","fileCount":7,"integrity":"sha512-erfEVorrdHYJSMH9j2lPd33TJRsMhU4+GwvGM+nFl5gJ5u9eMuN25TABWT9qiiJL85lyjKrbfU2Q0IIaQOW9HA==","signatures":[{"sig":"MEQCIGcrzek1gW+LHGBIVK9q2Ls0aZ3KKAn0Ww34WTDp1wW/AiAvLQAxxh9boSN9sD6nLMN/Hxr7R7ykQAPt+I0hadDO7A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":97441},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.2.2.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/cf3bb1b109611e57e5c3e06e811d95be/jsx-in-ttpg-1.2.2.tgz","_integrity":"sha512-erfEVorrdHYJSMH9j2lPd33TJRsMhU4+GwvGM+nFl5gJ5u9eMuN25TABWT9qiiJL85lyjKrbfU2Q0IIaQOW9HA==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.2.2_1693771139153_0.4074518676072054","host":"s3://npm-registry-packages"}},"1.2.3":{"name":"jsx-in-ttpg","version":"1.2.3","license":"UNLICENSE","_id":"jsx-in-ttpg@1.2.3","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"a040d4e153258c437bd58cf7584deeffa84314a9","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.2.3.tgz","fileCount":7,"integrity":"sha512-ASCK9Vqltki5DHdd2WwUGTky5t/VZmaG5YwFTvBQLErshXQ53OLkYmOKgxA257jPc95OSV+IW5IQ2QM8sEg+6Q==","signatures":[{"sig":"MEUCIHkUSKP2A6G+DXp+gW15hh/YerNZ7M6gvYaZvzmOBN6fAiEAmxUttK9ziYkwcfPzuz5MugDNxNARmGust1BYO+hAFRg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":97439},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.2.3.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/f9d294485fe9d5a4ccf53424378bd815/jsx-in-ttpg-1.2.3.tgz","_integrity":"sha512-ASCK9Vqltki5DHdd2WwUGTky5t/VZmaG5YwFTvBQLErshXQ53OLkYmOKgxA257jPc95OSV+IW5IQ2QM8sEg+6Q==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.2.3_1693772240319_0.6863758716015451","host":"s3://npm-registry-packages"}},"1.2.4":{"name":"jsx-in-ttpg","version":"1.2.4","license":"UNLICENSE","_id":"jsx-in-ttpg@1.2.4","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"50ca3427fafe9735dd56a27df14fa8f713b969bb","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.2.4.tgz","fileCount":7,"integrity":"sha512-hJn8ueUdfb7+KlO72hv+6vCoWRBuMjE8AgBHx5GGy7KaowDF+IfSqovVVgu8yEr59boMkJfCIDDn94mi1d5YjQ==","signatures":[{"sig":"MEYCIQCJottjjwefpAnc03Y/RACjqspUVEsyvdihAsxWGfiwGwIhAKJkA94ylc5tp4WO+kBORSJfNDE0dQynGhpEaJVWH9I7","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":97701},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.2.4.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/96ee917c19c6eb41d3d2fb168cb9c899/jsx-in-ttpg-1.2.4.tgz","_integrity":"sha512-hJn8ueUdfb7+KlO72hv+6vCoWRBuMjE8AgBHx5GGy7KaowDF+IfSqovVVgu8yEr59boMkJfCIDDn94mi1d5YjQ==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.2.4_1693775784893_0.834970009913655","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"jsx-in-ttpg","version":"1.3.0","license":"UNLICENSE","_id":"jsx-in-ttpg@1.3.0","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"daefcb0cd30bdf72281bc3ff827a3ca5c4d8d56e","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.3.0.tgz","fileCount":7,"integrity":"sha512-1PzITmPfZCsrpCrEOU0pj2k4dGhAknBlyl8EVJ28lPeOplWfvDgkL+qacQ5RH0MtWOyMpxZtgvz5KNtAAHoltQ==","signatures":[{"sig":"MEUCIGWpnf1A7eRrtNqkjN/9ZHdKc6LZVoGfKwIWZsD6h7DlAiEA3eDCxAe4f0gDZYtFhT7l7KmDL0B5txpmBbPDmCHOUDU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98241},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.3.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/b2b7f0633d7a096bf1fed108c7be0c7d/jsx-in-ttpg-1.3.0.tgz","_integrity":"sha512-1PzITmPfZCsrpCrEOU0pj2k4dGhAknBlyl8EVJ28lPeOplWfvDgkL+qacQ5RH0MtWOyMpxZtgvz5KNtAAHoltQ==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.3.0_1693782888149_0.029964138504230853","host":"s3://npm-registry-packages"}},"1.3.1":{"name":"jsx-in-ttpg","version":"1.3.1","license":"UNLICENSE","_id":"jsx-in-ttpg@1.3.1","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"23a5d727ff2217094f37a927b9d434290cbd5cc7","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.3.1.tgz","fileCount":7,"integrity":"sha512-qpJ2HzBmf9wglyru33t94iuGDx6ufEvRwaIRsOm1pulV63RgHhPxYO5izIvGL7zJMsgrM0RbyfW3I9B/+6GznA==","signatures":[{"sig":"MEUCIDKsYvz5rbADETh6pW8YAlGbb4HcpbZTzIxllGO2CwgCAiEAtHJgkwIGVEJ5bbX3RIldGMa98YEMiF9VgsA3TVnz+gI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":96587},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.3.1.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/15c4b5a70631d53624f68c27d173cc55/jsx-in-ttpg-1.3.1.tgz","_integrity":"sha512-qpJ2HzBmf9wglyru33t94iuGDx6ufEvRwaIRsOm1pulV63RgHhPxYO5izIvGL7zJMsgrM0RbyfW3I9B/+6GznA==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.3.1_1693783189550_0.8164809783227707","host":"s3://npm-registry-packages"}},"1.3.2":{"name":"jsx-in-ttpg","version":"1.3.2","license":"UNLICENSE","_id":"jsx-in-ttpg@1.3.2","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"200c0d990e6aab356eeaf4cb66af0f5a589a4bc8","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.3.2.tgz","fileCount":7,"integrity":"sha512-jOVNRpUOh3RuzQhKikjSNxvL0NHzuMgtE7zUWvXKMvxof7J4Kuju9jEQTpcLAcPte2ncia2qrRuoPg5cVGsa+A==","signatures":[{"sig":"MEYCIQDeUOOqSZLrsMa/EA7UR94oyShr6VIrkh5Z2lxPM3waSQIhANpl7iElsT935/CMzWlg6vg69Ix6MTTwLYLQjL5cssx5","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":96587},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.3.2.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/34d3892541247b7abefe65d464e4b6f1/jsx-in-ttpg-1.3.2.tgz","_integrity":"sha512-jOVNRpUOh3RuzQhKikjSNxvL0NHzuMgtE7zUWvXKMvxof7J4Kuju9jEQTpcLAcPte2ncia2qrRuoPg5cVGsa+A==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.3.2_1693790646363_0.945265476757206","host":"s3://npm-registry-packages"}},"1.3.3":{"name":"jsx-in-ttpg","version":"1.3.3","license":"UNLICENSE","_id":"jsx-in-ttpg@1.3.3","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"6ee624c9e90cd060f4921e2b6f80d31d05344cf8","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.3.3.tgz","fileCount":7,"integrity":"sha512-H74GHbqZBM/2VgfzRHU0dJ/HB4non30y0pFJWeaUCqxU2U7JPlfhzBssmP91ALl8N8SRxv25t8UMUrYgX5y8AA==","signatures":[{"sig":"MEQCIERb2tInEhx8rDaORKyhKczVIV7i69KKrnVI1g8tQme9AiBFf7gc12CwRZjMBvDp6Bicywk/2Lf1J6WsUrRJIssGgA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":96607},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.3.3.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/594c05bea2976507e355dc991336a3c2/jsx-in-ttpg-1.3.3.tgz","_integrity":"sha512-H74GHbqZBM/2VgfzRHU0dJ/HB4non30y0pFJWeaUCqxU2U7JPlfhzBssmP91ALl8N8SRxv25t8UMUrYgX5y8AA==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.3.3_1693791338714_0.048557017572915306","host":"s3://npm-registry-packages"}},"1.3.4":{"name":"jsx-in-ttpg","version":"1.3.4","license":"UNLICENSE","_id":"jsx-in-ttpg@1.3.4","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"50c3d676d9c70b83a405166a755c4553cdd263e8","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.3.4.tgz","fileCount":7,"integrity":"sha512-FcZVp5ixs8z96l27QER/+wPntkSA62xRCk4kTT7ksggDEHUpvFSGatE835AhOZVG9OMlMbBlJGN1dJ+HuI2nNA==","signatures":[{"sig":"MEUCID1TFrDACXP3wOYBWpx1GLR1JfYU3pFfD3Rr0MTEDhNIAiEAwKoI7aSA0R6ssXksNA8fAPQlIQH86e7bQGCNQG+qs9M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":97046},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.3.4.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/1fdd60fc7457c28aaa93d6b51f31ad70/jsx-in-ttpg-1.3.4.tgz","_integrity":"sha512-FcZVp5ixs8z96l27QER/+wPntkSA62xRCk4kTT7ksggDEHUpvFSGatE835AhOZVG9OMlMbBlJGN1dJ+HuI2nNA==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.3.4_1693856268727_0.5462861002382198","host":"s3://npm-registry-packages"}},"1.3.5":{"name":"jsx-in-ttpg","version":"1.3.5","license":"UNLICENSE","_id":"jsx-in-ttpg@1.3.5","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"465a591752780f9befc264a2d63bdaa6bcc5274b","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.3.5.tgz","fileCount":7,"integrity":"sha512-OIvMs4W52yX/Qgr2+ra6IGONa0TmWM7ljIdyyqRgxRRf9RpxX1RMOEv12kQvRFggVPDpdCWMLgGM/SU9UOTtVw==","signatures":[{"sig":"MEYCIQC1F1xrlxdIs1nLH6UlPq0wEul3kflEZo0hM8ddTwmQhAIhANrhCygVomPUe2dHjk1x5uSMdm1MJkatkTnngCHVbotX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":97068},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.3.5.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/98435ff3b8ab53cf1553420e8824bb5e/jsx-in-ttpg-1.3.5.tgz","_integrity":"sha512-OIvMs4W52yX/Qgr2+ra6IGONa0TmWM7ljIdyyqRgxRRf9RpxX1RMOEv12kQvRFggVPDpdCWMLgGM/SU9UOTtVw==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.3.5_1694007536410_0.9540065918676599","host":"s3://npm-registry-packages"}},"1.3.6":{"name":"jsx-in-ttpg","version":"1.3.6","license":"UNLICENSE","_id":"jsx-in-ttpg@1.3.6","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"5fa31509c772c20d6ef7eb3283b6b3763840bb61","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.3.6.tgz","fileCount":7,"integrity":"sha512-8rxga43qp97vzmqxH/ccz4eEIKteHLlKQqIdsJGzcULSp7he1NUTlz6jWiS+C1mSmj+ue6EXMe88urssWMYloQ==","signatures":[{"sig":"MEUCIALmiK4x7WPRpFEzyYVFTF00HMiwK9df/chnpghl2SMzAiEAzmamINo01uWfx+boHmP7qQfLz5ehhsrAk65unC+KOWU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":97288},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.3.6.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/41c8a6c74ca12f11e4a2ee988a71228a/jsx-in-ttpg-1.3.6.tgz","_integrity":"sha512-8rxga43qp97vzmqxH/ccz4eEIKteHLlKQqIdsJGzcULSp7he1NUTlz6jWiS+C1mSmj+ue6EXMe88urssWMYloQ==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.3.6_1694056852222_0.5226951908798458","host":"s3://npm-registry-packages"}},"1.3.7":{"name":"jsx-in-ttpg","version":"1.3.7","license":"UNLICENSE","_id":"jsx-in-ttpg@1.3.7","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"2744acbbc6cefe9e7458620503b66fc7439a0801","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-1.3.7.tgz","fileCount":7,"integrity":"sha512-m6lf8MlAJ2+IwusxgrdApjBCNJ65rVWV6MgnfElTtFu6O3r7GGBzYL/IhGyjI8RCbXkyyau2pDh+1VgyVMw/Yg==","signatures":[{"sig":"MEUCIQC56uX1Miie1V+zwEFYcvyAOzD8mYTh2Ss91jFMAnYWJAIgKzBiOgPbZDez/XMC6FPWppXOGPI+QYT4lzSsiNkoL7k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":97428},"main":"dist/index.js","_from":"file:jsx-in-ttpg-1.3.7.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/3f4938c6e68dba4910f654859cbb6693/jsx-in-ttpg-1.3.7.tgz","_integrity":"sha512-m6lf8MlAJ2+IwusxgrdApjBCNJ65rVWV6MgnfElTtFu6O3r7GGBzYL/IhGyjI8RCbXkyyau2pDh+1VgyVMw/Yg==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.36.1"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_1.3.7_1694073173564_0.3341511134035524","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"jsx-in-ttpg","version":"2.0.0","license":"UNLICENSE","_id":"jsx-in-ttpg@2.0.0","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"a6be2f57e6e3eb359e14a2035c8a87f700cb040d","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-2.0.0.tgz","fileCount":7,"integrity":"sha512-gF+chfUoQA9u+QR8ieMBl24TWbVw9p/vKhjrtFcz0OqPBI8K1Z8PHmER0Vr8K1k8FtnGPhIx0GLsw3+Fbo4TbA==","signatures":[{"sig":"MEUCIQDQugt+6haPhUv9I9J/YkXrH83METAnCFWjFjv4wIsqqwIgbgJM+xh2RWOJb4ScaUHEDzN3LAGS1QtPEUIJxvOgVUM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":95610},"main":"dist/index.js","_from":"file:jsx-in-ttpg-2.0.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/1885f46e4037fd06fd98786462d43b85/jsx-in-ttpg-2.0.0.tgz","_integrity":"sha512-gF+chfUoQA9u+QR8ieMBl24TWbVw9p/vKhjrtFcz0OqPBI8K1Z8PHmER0Vr8K1k8FtnGPhIx0GLsw3+Fbo4TbA==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.1.0","typescript":"^5.1.6"},"peerDependencies":{"@tabletop-playground/api":"^0.37.0"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_2.0.0_1695929407755_0.2163329244386365","host":"s3://npm-registry-packages"}},"2.0.1":{"name":"jsx-in-ttpg","version":"2.0.1","license":"UNLICENSE","_id":"jsx-in-ttpg@2.0.1","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"a4d51441c9baf306ad5a19025ac58fe847d32d33","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-2.0.1.tgz","fileCount":7,"integrity":"sha512-OuWAcQBvtb42n5tQ6seljj1oFGH/0mdUDTOBJD00u5SFmk5h6mmYEU2ltdkEUFj9GPQTSyNNa2qpvHHZB3cI1w==","signatures":[{"sig":"MEUCIE4AoZse9oqZmm2GttE5GfaNQ6IadZbNQn9IjgzRkpN5AiEA77TFVzWzG3kiM4hkCjjyC1/3YwLr6qslHcOY5EvewsY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":95486},"main":"dist/index.js","_from":"file:jsx-in-ttpg-2.0.1.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/7f9cc77c10077246cec0e89bd4bcafcc/jsx-in-ttpg-2.0.1.tgz","_integrity":"sha512-OuWAcQBvtb42n5tQ6seljj1oFGH/0mdUDTOBJD00u5SFmk5h6mmYEU2ltdkEUFj9GPQTSyNNa2qpvHHZB3cI1w==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.2.0","typescript":"^5.2.2"},"peerDependencies":{"@tabletop-playground/api":"^0.37.0"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_2.0.1_1698188883380_0.6002920376303749","host":"s3://npm-registry-packages"}},"2.0.2":{"name":"jsx-in-ttpg","version":"2.0.2","license":"UNLICENSE","_id":"jsx-in-ttpg@2.0.2","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"cecd962f121987799c0f1c1cd5c98a03c39ca0b3","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-2.0.2.tgz","fileCount":7,"integrity":"sha512-puz2hdOo9wt9/gBnd5Nv9jqZfEvj+id6cEmIeWG8dYizFrcyWGzpuwX7IlSaQEIJcMfP7gEL2RkHgEH+cWhhWA==","signatures":[{"sig":"MEYCIQDHe0RpyVfgXg9D2YGEg/V8cHvryOZQPGPZmJJLmSmtuwIhAJv3r9p5GrLSXHOttW8tW3+AX/mQ3wurgkYiMfHWl8Q4","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":95486},"main":"dist/index.js","_from":"file:jsx-in-ttpg-2.0.2.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/4207ab002cd15c551aec53c471315040/jsx-in-ttpg-2.0.2.tgz","_integrity":"sha512-puz2hdOo9wt9/gBnd5Nv9jqZfEvj+id6cEmIeWG8dYizFrcyWGzpuwX7IlSaQEIJcMfP7gEL2RkHgEH+cWhhWA==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.2.0","typescript":"^5.2.2"},"peerDependencies":{"@tabletop-playground/api":"^0.38.0"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_2.0.2_1698289469145_0.2796822476562497","host":"s3://npm-registry-packages"}},"2.1.0":{"name":"jsx-in-ttpg","version":"2.1.0","license":"UNLICENSE","_id":"jsx-in-ttpg@2.1.0","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"4ef0013815f2662ef3cbcd98cab3a4984988850a","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-2.1.0.tgz","fileCount":7,"integrity":"sha512-Vx+xSig4adru3988+ZCz9aGcLnGC5K4mfcxfhIe2aHdxLs68FtqOWIVQWtA0VkRW+QWGba6trDFcO2l4O46KXQ==","signatures":[{"sig":"MEUCIQDngOLs2YxlRoOZgguXcVNIn7c6HHTTVdq1HbWhYErQlAIgbLh/MjAoev2Y1hLc9m1WtiwV/H5cu1Xn5PxDqYumKxI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":95632},"main":"dist/index.js","_from":"file:jsx-in-ttpg-2.1.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/867bd2a8ab2759e08c32694432684bbc/jsx-in-ttpg-2.1.0.tgz","_integrity":"sha512-Vx+xSig4adru3988+ZCz9aGcLnGC5K4mfcxfhIe2aHdxLs68FtqOWIVQWtA0VkRW+QWGba6trDFcO2l4O46KXQ==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.2.0","typescript":"^5.2.2"},"peerDependencies":{"@tabletop-playground/api":"^0.38.0"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_2.1.0_1698590721907_0.8658561727648666","host":"s3://npm-registry-packages"}},"2.1.1":{"name":"jsx-in-ttpg","version":"2.1.1","license":"UNLICENSE","_id":"jsx-in-ttpg@2.1.1","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"560d763b42291c0370f1ea69d16a073796868fbb","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-2.1.1.tgz","fileCount":7,"integrity":"sha512-ZtCuHHVGpIXjxuQMU6qaGUoNAk65Dkb6MVucOiLqy7uHw83R/Gg8/REIwkp8UCrR1oPhpQf7pHF5OFWnaVAEQw==","signatures":[{"sig":"MEQCIDXO90hNbkUlEQ5saCfKbpGOhCk2mFkMCOH8HqoR//miAiBTgH9u7/DoyOZ7NA9lCVnbokCqNNGM0v5/MMRQVfgMRw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":95682},"main":"dist/index.js","_from":"file:jsx-in-ttpg-2.1.1.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/24cc13668b118d92d7771bd79539ee8d/jsx-in-ttpg-2.1.1.tgz","_integrity":"sha512-ZtCuHHVGpIXjxuQMU6qaGUoNAk65Dkb6MVucOiLqy7uHw83R/Gg8/REIwkp8UCrR1oPhpQf7pHF5OFWnaVAEQw==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.3.3"},"peerDependencies":{"@tabletop-playground/api":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_2.1.1_1703437495980_0.5092681102207008","host":"s3://npm-registry-packages"}},"2.2.1":{"name":"jsx-in-ttpg","version":"2.2.1","license":"UNLICENSE","_id":"jsx-in-ttpg@2.2.1","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"a3f3e2bb29ffb0dc2cef582be97c1a21d4018268","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-2.2.1.tgz","fileCount":7,"integrity":"sha512-3rasaVuvmkllkLaXMv2b+A5yBgDHsbBEFvTfmhIFEXCdGYAAK6MZ/rvmsE9F5Yks89Brx7DF1ewfCh7Fq+q07g==","signatures":[{"sig":"MEQCIAuurHfeVCM8jnHzV/neUvyHrTKXIrk67UXMnPtgC+HjAiA11FtP8J4rcy7qCfQqdW47YoF1GBce3/e/QTwrZhguqw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":95682},"main":"dist/index.js","_from":"file:jsx-in-ttpg-2.2.1.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/5a9ff8532f6fc558c9e677df31f6f0ca/jsx-in-ttpg-2.2.1.tgz","_integrity":"sha512-3rasaVuvmkllkLaXMv2b+A5yBgDHsbBEFvTfmhIFEXCdGYAAK6MZ/rvmsE9F5Yks89Brx7DF1ewfCh7Fq+q07g==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.3.3"},"peerDependencies":{"@tabletop-playground/api":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_2.2.1_1703437588501_0.11700111507419675","host":"s3://npm-registry-packages"}},"2.2.2":{"name":"jsx-in-ttpg","version":"2.2.2","license":"UNLICENSE","_id":"jsx-in-ttpg@2.2.2","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"b55f832f837570e80e8d3c21b8db0f3473e0541f","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-2.2.2.tgz","fileCount":7,"integrity":"sha512-FsiW7U9xczA9uPvFJB3i2ylmTPNw3L0cxVWC6JCEKzmXpuY+mn7aESNOqstbS/g2NfSnkepIpsjdXJ2DwLfU9w==","signatures":[{"sig":"MEYCIQCSFPkNnDIqViQHd4zv1dSxxh+ynSW5UyYdKpjdQBF/xgIhAMqjMho/emo7vKEUt1V+ArFaGVsib6SQxplYRrHSXlN3","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":95748},"main":"dist/index.js","_from":"file:jsx-in-ttpg-2.2.2.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/2ac380040cf7334234a28cc8e49a20cc/jsx-in-ttpg-2.2.2.tgz","_integrity":"sha512-FsiW7U9xczA9uPvFJB3i2ylmTPNw3L0cxVWC6JCEKzmXpuY+mn7aESNOqstbS/g2NfSnkepIpsjdXJ2DwLfU9w==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.3.3"},"peerDependencies":{"@tabletop-playground/api":"^0.39.0"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_2.2.2_1703908133095_0.9697584323420401","host":"s3://npm-registry-packages"}},"2.2.3":{"name":"jsx-in-ttpg","version":"2.2.3","license":"UNLICENSE","_id":"jsx-in-ttpg@2.2.3","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"dist":{"shasum":"41990e9832e94cc6a69f1107204788766b4f6f8d","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-2.2.3.tgz","fileCount":7,"integrity":"sha512-n84zJ2ozcT5oh8OB4NqVSSUptFcQCdaBDt25//SDQaLiMdrj1ODrZ6uiznNsubSVI5CKe0B0H1deyrqS0p3IRQ==","signatures":[{"sig":"MEUCIDjIGo1iA7GLgwadp0teUmxWYOUKTskQa6fd/6EEXT+fAiEA9dWCI4TCK/JIllyyL5yYHxgbRChBdt0Nb5/9+HFtnhw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":95928},"main":"dist/index.js","_from":"file:jsx-in-ttpg-2.2.3.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/02fb662d40e685c27681e85c894e905b/jsx-in-ttpg-2.2.3.tgz","_integrity":"sha512-n84zJ2ozcT5oh8OB4NqVSSUptFcQCdaBDt25//SDQaLiMdrj1ODrZ6uiznNsubSVI5CKe0B0H1deyrqS0p3IRQ==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.2","typescript":"^5.4.4"},"peerDependencies":{"@tabletop-playground/api":"^0.41.0"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_2.2.3_1712326426533_0.5446302886870336","host":"s3://npm-registry-packages"}},"2.2.4":{"name":"jsx-in-ttpg","version":"2.2.4","license":"UNLICENSE","_id":"jsx-in-ttpg@2.2.4","dist":{"shasum":"95ef532ba4d2c0c70be3aeda46f84304dd3d3ecf","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-2.2.4.tgz","fileCount":7,"integrity":"sha512-7D60zgfHcTwaUovc/VoWZKqQYWxe6BOS+aQuNi7/T9HC08NSEkd6ppUR4pQTjUK5ElrNGbJK0Sj/828Z0urw9w==","signatures":[{"sig":"MEQCIBujuFMcH59Bt1KPjiOC4ZNNPy0R2LgyG5yshtJWQCpiAiBVaV3hcuPenVz5R4uZnOvDWUKA5apMsTTR1f6TG2Q7zQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":96094},"main":"dist/index.js","_from":"file:jsx-in-ttpg-2.2.4.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"lint":"tsc","build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist"},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"_resolved":"/tmp/2cf25bd9d0ef376c47b9e2d80de4648a/jsx-in-ttpg-2.2.4.tgz","_integrity":"sha512-7D60zgfHcTwaUovc/VoWZKqQYWxe6BOS+aQuNi7/T9HC08NSEkd6ppUR4pQTjUK5ElrNGbJK0Sj/828Z0urw9w==","_npmVersion":"8.19.4","description":"before:","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.2","typescript":"^5.4.4"},"peerDependencies":{"@tabletop-playground/api":"^0.41.0"},"_npmOperationalInternal":{"tmp":"tmp/jsx-in-ttpg_2.2.4_1719544401089_0.696891019666499","host":"s3://npm-registry-packages"}},"2.3.0":{"name":"jsx-in-ttpg","license":"UNLICENSE","version":"2.3.0","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","peerDependencies":{"@tabletop-playground/api":"^0.41.0"},"devDependencies":{"tsup":"^8.1.0","typescript":"^5.5.2"},"scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --no-splitting","clean":"rm -rf ./dist","lint":"tsc"},"_id":"jsx-in-ttpg@2.3.0","description":"before:","_integrity":"sha512-QAcdXmfGRBpkUf39wx3YTXHBY/x6Eg9BeDMNsyC3J/o5HEJvPFzM4hGL7BFNdUV+GelPlSvDeESVqxfBplR6fA==","_resolved":"/tmp/80b5c33abd42727346e55241a130a201/jsx-in-ttpg-2.3.0.tgz","_from":"file:jsx-in-ttpg-2.3.0.tgz","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-QAcdXmfGRBpkUf39wx3YTXHBY/x6Eg9BeDMNsyC3J/o5HEJvPFzM4hGL7BFNdUV+GelPlSvDeESVqxfBplR6fA==","shasum":"985fcc19b1eb73d813d0eaadd813fbecf1cf90c3","tarball":"https://registry.npmjs.org/jsx-in-ttpg/-/jsx-in-ttpg-2.3.0.tgz","fileCount":7,"unpackedSize":96040,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDvr696DuSlSFYiTpY3OvIHb2xG9uVJzhdfYK22cvz9mgIgRDu86a3no1WOUPR4+DZvcSGvPnwFKBPauit4qDFCVTk="}]},"_npmUser":{"name":"robmayer","email":"rob.c.mayer@gmail.com"},"directories":{},"maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/jsx-in-ttpg_2.3.0_1742327670461_0.790887686531621"},"_hasShrinkwrap":false}},"time":{"created":"2023-08-08T03:04:35.436Z","modified":"2025-03-18T19:54:30.839Z","0.0.1":"2023-08-08T03:04:35.607Z","0.0.2":"2023-08-08T03:24:36.475Z","0.0.9":"2023-08-08T05:59:09.213Z","1.0.0":"2023-08-08T06:01:14.795Z","1.1.0":"2023-08-08T15:49:13.242Z","1.1.1":"2023-08-08T16:06:29.005Z","1.1.2":"2023-08-08T16:21:37.771Z","1.1.3":"2023-08-08T16:45:59.804Z","1.1.4":"2023-08-09T01:31:17.441Z","1.2.0":"2023-08-09T14:21:02.618Z","1.2.1":"2023-08-09T14:24:47.262Z","1.2.2":"2023-09-03T19:58:59.530Z","1.2.3":"2023-09-03T20:17:20.504Z","1.2.4":"2023-09-03T21:16:25.082Z","1.3.0":"2023-09-03T23:14:48.338Z","1.3.1":"2023-09-03T23:19:49.752Z","1.3.2":"2023-09-04T01:24:06.575Z","1.3.3":"2023-09-04T01:35:38.970Z","1.3.4":"2023-09-04T19:37:48.943Z","1.3.5":"2023-09-06T13:38:56.607Z","1.3.6":"2023-09-07T03:20:52.439Z","1.3.7":"2023-09-07T07:52:53.812Z","2.0.0":"2023-09-28T19:30:07.929Z","2.0.1":"2023-10-24T23:08:03.636Z","2.0.2":"2023-10-26T03:04:29.468Z","2.1.0":"2023-10-29T14:45:22.191Z","2.1.1":"2023-12-24T17:04:56.177Z","2.2.1":"2023-12-24T17:06:28.705Z","2.2.2":"2023-12-30T03:48:53.241Z","2.2.3":"2024-04-05T14:13:46.782Z","2.2.4":"2024-06-28T03:13:21.286Z","2.3.0":"2025-03-18T19:54:30.682Z"},"license":"UNLICENSE","description":"before:","maintainers":[{"name":"robmayer","email":"rob.c.mayer@gmail.com"}],"readme":"# JSX in TabletopPlayground\r\n\r\nbefore:\r\n\r\n```typescript\r\nconst image = new ImageWidget();\r\nimage.setTintColor([1, 1, 1, 0.75]);\r\nimage.setUrl(\"http://somewhere.com/image.png\");\r\n\r\nconst element = new UIElement();\r\nelement.widget = image;\r\n\r\nrefObject.addUI(element);\r\n```\r\n\r\nafter:\r\n\r\n```tsx\r\nconst element = new UIElement();\r\nelement.widget = render(<image url={\"http://somewhere.com/image.png\"} color={[1, 1, 1, 0.75]} />);\r\nrefObject.addUI(element);\r\n```\r\n\r\n# Setting up the JSX transformer.\r\n\r\nFor now, you'll need to use Typescript, and I'll assume that you're familiar enough with the basics of typescript to know things like what your tsconfig.json file is. If someone wants to make something that'll work with esbuild or what not, I welcome it.\r\n\r\nYou can also use `yarn create ttpg-package --template tsx` to get a new workspace with jsx-int-tpg set up already.\r\n\r\n## changes to tsconfig.json\r\n\r\nAdd the \"jsx\" and \"jsxFactory\" fields to compilerOptions, and be sure to include \"tsx\" files to your tsc config. Files that use JSX need to have the file extension of \"tsx\".\r\n\r\n```json\r\n    {\r\n        \"compilerOptions\" {\r\n            \"jsx\": \"react\",\r\n            \"jsxFactory\": \"jsxInTTPG\",\r\n            \"jsxFragmentFactory\": \"jsxFrag\",\r\n            /* ... other compilerOptions ... */\r\n        },\r\n        \"include\": [\"./src/**/*.tsx\", /* other includes */]\r\n    },\r\n\r\n```\r\n\r\nadditionally, you'll need to add this import at the top of any file that uses JSX\r\n\r\n`import { jsxInTTPG } from \"jsx-in-ttpg\";`\r\n\r\n## adding JSX to a UIElement or ScreenUIElement or a vanilla Widget\r\n\r\nuse the provided `render` function to ensure a JSX tag is a Widget. The top-level JSX tag must be a vanilla widget (or a string or array string, since jsxInTTPG will wrap a lone string in a `<text>` widget automagically). This could also be a custom component, so long as any nested components resolve to a structure with a top-level widget.\r\n\r\n```tsx\r\nimport { render, jsxInTTPG } from \"jsx-in-ttpg\";\r\n\r\nconst ui = new UIElement();\r\n/* do stuff to set up ui element */\r\nui.widget = render(<text>Hello World</text>);\r\nrefObject.addUI(ui);\r\n```\r\n\r\nin instances where you need to set a new widget, or add a child, or if you want to mix-n-match JSX with vanilla TTPG elements, you can make use of the `render()` function in the same way:\r\n\r\n```tsx\r\nconst layoutBox = new LayoutBox();\r\n\r\nlayoutBox.setChild(render(<text>some text</text>));\r\n```\r\n\r\n## Fragments\r\n\r\na custom component should always return a single JSXNode (or a primitive, null, etc, etc). If it turns out that you need to return multiple elements, wrap the returned elements in a fragment `<>{...}</>`. You will need to `import {jsxFrag} from 'jsx-in-ttpg'` to do so\r\n\r\n```tsx\r\nimport { render, jsxInTTPG, jsxFrag } from \"jsx-in-ttpg\";\r\n\r\nconst MyComponent = () => {\r\n    return (\r\n        <>\r\n            <horizontalbox>\r\n                <text>Hello</text>\r\n                <text>World</text>\r\n            </horizontalbox>\r\n            <horizontalbox>\r\n                <richtext>Some fancy [b]bolded[/b] text</richtext>\r\n            </horizontalbox>\r\n        </>\r\n    );\r\n};\r\n\r\nconst ui = new UIElement();\r\n\r\nui.widget = render(\r\n    <layout>\r\n        <verticalbox>\r\n            <MyComponent />\r\n        </verticalbox>\r\n    </layout>\r\n);\r\n\r\nrefObject.addUI(ui);\r\n```\r\n\r\n# Syntax\r\n\r\nEvery Tabletop Playground widget is resprestented in a JSX intrinsic element with certain attributes that function as function calls or property setters for that widget.\r\n\r\n-   Canvas: `<canvas>`\r\n-   ImageWidget: `<image>`\r\n-   ImageButton: `<imagebutton>`\r\n-   ContentButton: `<contentbutton>`\r\n-   Border: `<border>`\r\n-   HorizontalBox: `<horizontalbox>`\r\n-   VerticalBox: `<verticalbox>`\r\n-   LayoutBox: `<layout>`\r\n-   Text: `<text>`\r\n-   Button: `<button>`\r\n-   CheckBox: `<checkbox>`\r\n-   MultilineTextBox: `<textarea>`\r\n-   ProgressBar: `<progressbar>`\r\n-   RichText: `<richtext>`\r\n-   SelectionBox: `<select>`\r\n-   Slider: `<slider>`\r\n-   TextBox: `<input>`\r\n\r\n## Attributes\r\n\r\nseveral function calls, event handlers, or properties of TTPG widgets are available as attributes on the JSX element.\r\n\r\nNote that boolean-type attributes don't require you to put the actual true/false value to have that value be \"true\" - for example `<button disabled>Some Text</button>` is equivilent to `<button disabled={true}>Some Text</button>`. (this is why certain properties are kind of the \"inverse\" of what you find in vanilla TTPG widget syntax, such as \"disabled\" vs \"setEnabled\" and \"hidden\" vs \"setVisible\")\r\n\r\n### Common Attributes\r\n\r\n-   `disabled` - `optional boolean` - equivilent to \"setEnabled(!disabled)\"\r\n-   `hidden` - `optional boolean` - equivilent to \"setVisible(!hidden)\";\r\n-   `ref` - `optional RefObject<T>` where T is the widget class being used - more on refs later.\r\n\r\n#### ImageWidget\r\n\r\n```tsx\r\n<image onLoad={() => {}} color={[1, 1, 1, 1]} card={Card} url={\"http://...\"} src={\"someimage.jpg\"} package={\"...\"} />\r\n```\r\n\r\n-   `src` - `string`: Equivilent to calling `imageWidget.setImage(src)`\r\n-   `srcPackage` - `string`: Equivilent to calling `imageWidget.setImage(src, srcPackage)` - you must provide the `src` attribute for the `srcPackage` attribute to have any effect.\r\n-   `url` - `string`: Equivilent to calling `imagewidget.setUrl(...)` - mutually exclusive with `src` and `srcPackage` as well as `card`.\r\n-   `card` - `Card`: Equivilent to calling `imageWidget.setSourceCard(...)` - mutually exclusive with `src` and `srcPackage` as well as `url`.\r\n-   `onLoad` - `(image: ImageWidget, filename: string, packageId: string) => void`: Equivilent to calling `imagewidget.onImageLoaded.add(...)`.\r\n-   `color` - `[number, number, number, number]` or `Color`: Equivilent to calling `imagewidget.setTintColor(...)`.\r\n-   `width` - `number`: Equivilent to calling `imagewidget.setWidth(...)`.\r\n-   `height` - `number`: Equivilent to calling `imagewidget.setHeight(...)`.\r\n\r\n-   `<image>` takes no children\r\n\r\n#### ImageButton\r\n\r\n```tsx\r\n<imagebutton onLoad={() => {}} color={[1, 1, 1, 1]} card={Card} url={\"http://...\"} src={\"someimage.jpg\"} package={\"...\"} onClick={() => {}} />\r\n```\r\n\r\n-   `onClick`: Equivilent of `imageButton.onClicked.add(...)`\r\n-   `src` - `string`: Equivilent to calling `imageWidget.setImage(src)`\r\n-   `srcPackage` - `string`: Equivilent to calling `imageWidget.setImage(src, srcPackage)` - you must provide the `src` attribute for the `srcPackage` attribute to have any effect.\r\n-   `url` - `string`: Equivilent to calling `imagewidget.setUrl(...)` - mutually exclusive with `src` and `srcPackage` as well as `card`.\r\n-   `card` - `Card`: Equivilent to calling `imageWidget.setSourceCard(...)` - mutually exclusive with `src` and `srcPackage` as well as `url`.\r\n-   `onLoad` - `(image: ImageWidget, filename: string, packageId: string) => void`: Equivilent to calling `imagewidget.onImageLoaded.add(...)`.\r\n-   `color` - `[number, number, number, number]` or `Color`: Equivilent to calling `imagewidget.setTintColor(...)`.\r\n-   `width` - `number`: Equivilent to calling `imagewidget.setWidth(...)`.\r\n-   `height` - `number`: Equivilent to calling `imagewidget.setHeight(...)`.\r\n\r\n-   `<imagebutton>` takes no children\r\n\r\n#### Border\r\n\r\n```tsx\r\n<border ref={borderRef} color={[1, 0, 0, 1]}>\r\n    <text>\"Hello, world!\"</text>\r\n</border>\r\n```\r\n\r\n-   `color` - `[number, number, number, number]` or `Color`: Equivalent to calling `border.setColor(...)`.\r\n\r\n-   `<border>` can take strings or a single widget as children.\r\n\r\n#### Canvas\r\n\r\nThe canvas has no additional attributes. however, canvases take an atypical child function. You can have more than one. This is so you can set the x, y, width, and height inline.\r\n\r\n```tsx\r\n<canvas>\r\n    {canvasChild({ x: 0, y: 0, width: 100, height: 100 }, <button>SomeText</button>)}\r\n    {canvasChild({ x: 200, y: 0, width: 100, height: 100 }, <button>Some Other Text</button>)}\r\n</canvas>\r\n```\r\n\r\n-   `<canvas>` can take multiple `canvasChild` calls as children. the second argument of canvasChild can be a string or a single widget.\r\n\r\n#### LayoutBox\r\n\r\n```tsx\r\n<layout halign={HorizontalAlignment.Center} valign={VerticalAlignment.Middle} padding={{ left: 10, right: 10, top: 5, bottom: 5 }}>\r\n    <image src=\"avatar.jpg\" />\r\n</layout>\r\n```\r\n\r\n-   `valign` - `VerticalAlignment`: Equivalent to calling `layoutBox.setVerticalAlignment(...)`.\r\n-   `halign` - `HorizontalAlignment`: Equivalent to calling `layoutBox.setHorizontalAlignment(...)`.\r\n-   `padding` - `number | { left?: number, right?: number, top?: number, bottom?: number }`: Equivalent to calling `layoutBox.setPadding(...)` if a single number is used, it is applied to all four directions.\r\n-   `maxHeight` - `number`: Equivalent to calling `layoutBox.setMaximumHeight(...)`.\r\n-   `minHeight` - `number`: Equivalent to calling `layoutBox.setMinimumHeight(...)`.\r\n-   `height` - `number`: Equivalent to calling `layoutBox.setOverrideHeight(...)`.\r\n-   `maxWidth` - `number`: Equivalent to calling `layoutBox.setMaximumWidth(...)`.\r\n-   `minWidth` - `number`: Equivalent to calling `layoutBox.setMinimumWidth(...)`.\r\n-   `width` - `number`: Equivalent to calling `layoutBox.setOverrideWidth(...)`.\r\n\r\n-   `<layout>` can take strings or a single widget as children.\r\n\r\n#### VerticalBox\r\n\r\nVerticalBox (as well as the HorizontalBox) can take a special function child, much like Canvas. Unlike Canvas, however, it's not required. the first parameter of boxChild is the \"weight\" and the second is the Widget (or string) that will be that child.\r\n\r\n```tsx\r\n<verticalbox gap={10} halign={HorizontalAlignment.Left} valign={VerticalAlignment.Middle}>\r\n    <text>\"Hello!\"</text>\r\n    {boxChild(3, <button>Some Button</button>)}\r\n    <image src=\"image1.jpg\" />\r\n</verticalbox>\r\n```\r\n\r\n-   `gap` - `number`: Equivalent to calling `verticalBox.setChildDistance(...)`.\r\n-   `valign` - `VerticalAlignment`: Equivalent to calling `verticalBox.setVerticalAlignment(...)`.\r\n-   `halign` - `HorizontalAlignment`: Equivalent to calling `verticalBox.setHorizontalAlignment(...)`.\r\n\r\n-   `<verticalbox>` can take strings, any number of widgets, or the special {boxChild(1, <...>)} function.\r\n\r\n#### HorizontalBox\r\n\r\n```tsx\r\n<horizontalbox ref={hboxRef} disabled={false} hidden={false} gap={10} halign={HorizontalAlignment.Left} valign={VerticalAlignment.Middle}>\r\n    <image src=\"image1.jpg\" />\r\n    <text>\"Hello!\"</text>\r\n</horizontalbox>\r\n```\r\n\r\n-   `gap` - `number`: Equivalent to calling `verticalBox.setChildDistance(...)`.\r\n-   `valign` - `VerticalAlignment`: Equivalent to calling `verticalBox.setVerticalAlignment(...)`.\r\n-   `halign` - `HorizontalAlignment`: Equivalent to calling `verticalBox.setHorizontalAlignment(...)`.\r\n\r\n-   `<horizontalbox>`, like `<verticalbox>`, can take strings, any number of widgets, or the special {boxChild(1, <...>)} function.\r\n\r\n#### ContentButton\r\n\r\n```tsx\r\n<contentbutton\r\n    ref={buttonRef}\r\n    disabled={false}\r\n    hidden={false}\r\n    onClick={(button, player) => {\r\n        /* Click handler */\r\n    }}\r\n>\r\n    <image src=\"button_icon.png\" />\r\n</contentbutton>\r\n```\r\n\r\n-   `onClick` - `(button: ContentButton, player: Player) => void`: Equivalent to adding a click event handler using `onClicked.add(...)`.\r\n\r\n-   <contentbutton> can take strings or a single widget as children.\r\n\r\n#### Text\r\n\r\n```tsx\r\n<text ref={textRef} disabled={false} hidden={false} bold={true} italic={false} size={18} color={[1, 0, 0, 1]} wrap={true} justify={TextJustification.Center}>\r\n    Sample text content.\r\n</text>\r\n```\r\n\r\n-   `bold` - `boolean`: Equivalent to calling `text.setBold(...)`.\r\n-   `italic` - `boolean`: Equivalent to calling `text.setItalic(...)`.\r\n-   `size` - `number`: Equivalent to calling `text.setFontSize(...)`.\r\n-   `color` - `[number, number, number, number]` or `Color`: Equivalent to calling `text.setTextColor(...)`.\r\n-   `wrap` - `boolean`: Equivalent to calling `text.setAutoWrap(...)`.\r\n-   `justify` - `TextJustification`: Equivalent to calling `text.setJustification(...)`.\r\n-   `font` - `string`: Equivalent to setting the font using `setFont(...)`.\r\n-   `fontPackage` - `string`: Equivalent to setting the font package using `setFont(...)` with a package specifier.\r\n\r\n-   `<text>` obviously takes a string as a child\r\n\r\n#### Button\r\n\r\n```tsx\r\n<button\r\n    ref={buttonRef}\r\n    disabled={false}\r\n    hidden={false}\r\n    bold={true}\r\n    italic={false}\r\n    size={18}\r\n    color={[1, 0, 0, 1]}\r\n    onClick={(button, player) => {\r\n        /* Click handler */\r\n    }}\r\n>\r\n    Click Me!\r\n</button>\r\n```\r\n\r\n-   `bold` - `boolean`: Equivalent to calling `button.setBold(...)`.\r\n-   `italic` - `boolean`: Equivalent to calling `button.setItalic(...)`.\r\n-   `size` - `number`: Equivalent to calling `button.setFontSize(...)`.\r\n-   `color` - `[number, number, number, number]` or `Color`: Equivalent to calling `button.setTextColor(...)`.\r\n-   `onClick` - `(button: Button, player: Player) => void`: Equivalent to adding a click event handler using `onClicked.add(...)`.\r\n-   `font` - `string`: Equivalent to setting the font using `setFont(...)`.\r\n-   `fontPackage` - `string`: Equivalent to setting the font package using `setFont(...)` with a package specifier.\r\n\r\n-   `<button>` can take a string as a child\r\n\r\n#### CheckBox\r\n\r\n```tsx\r\n<checkbox\r\n    ref={checkboxRef}\r\n    disabled={false}\r\n    hidden={false}\r\n    bold={true}\r\n    italic={false}\r\n    size={18}\r\n    color={[1, 0, 0, 1]}\r\n    onChange={(checkbox, player, state) => {\r\n        /* Change handler */\r\n    }}\r\n    checked={true}\r\n    label=\"Check me!\"\r\n/>\r\n```\r\n\r\n-   `bold` - `boolean`: Equivalent to calling `checkbox.setBold(...)`.\r\n-   `italic` - `boolean`: Equivalent to calling `checkbox.setItalic(...)`.\r\n-   `size` - `number`: Equivalent to calling `checkbox.setFontSize(...)`.\r\n-   `color` - `[number, number, number, number]` or `Color`: Equivalent to calling `checkbox.setTextColor(...)`.\r\n-   `onChange` - `(checkbox: CheckBox, player: Player, state: boolean) => void`: Equivalent to adding a change event handler using `onCheckStateChanged.add(...)` but will only trigger on user input, not on programmatic input.\r\n-   `onChangeActual` - `(checkbox: CheckBox, player: Player | undefined, state: boolean) => void`: Equivalent to adding a change event handler using `onCheckStateChanged.add(...)`.\r\n-   `checked` - `boolean`: Equivalent to calling `checkbox.setIsChecked(...)`.\r\n-   `label` - `string` or `string[]`: Equivalent to setting the checkbox label using `setText(...)`.\r\n-   `font` - `string`: Equivalent to setting the font using `setFont(...)`.\r\n-   `fontPackage` - `string`: Equivalent to setting the font package using `setFont(...)` with a package specifier.\r\n\r\n-   `<checkbox>` takes no children\r\n\r\n#### MultilineTextBox\r\n\r\n```tsx\r\n<textarea\r\n    ref={textareaRef}\r\n    disabled={false}\r\n    hidden={false}\r\n    bold={true}\r\n    italic={false}\r\n    size={18}\r\n    color={[1, 0, 0, 1]}\r\n    onChange={(element, player, text) => {\r\n        /* Change handler */\r\n    }}\r\n    onCommit={(element, player, text) => {\r\n        /* Commit handler */\r\n    }}\r\n    maxLength={100}\r\n    transparent={false}\r\n/>\r\n```\r\n\r\n-   `bold` - `boolean`: Equivalent to calling `multilineTextBox.setBold(...)`.\r\n-   `italic` - `boolean`: Equivalent to calling `multilineTextBox.setItalic(...)`.\r\n-   `size` - `number`: Equivalent to calling `multilineTextBox.setFontSize(...)`.\r\n-   `color` - `[number, number, number, number]` or `Color`: Equivalent to calling `multilineTextBox.setTextColor(...)`.\r\n-   `onChange` - `(element: MultilineTextBox, player: Player, text: string) => void`: Equivalent to adding a change event handler using `onTextChanged.add(...)` but will only trigger on user interaction, not programatic interaction.\r\n-   `onChangeActual` - `(element: MultilineTextBox, player: Player | undefined, text: string) => void`: Equivalent to adding a change event handler using `onTextChanged.add(...)`.\r\n-   `onCommit` - `(element: MultilineTextBox, player: Player, text: string) => void`: Equivalent to adding a commit event handler using `onTextCommitted.add(...)` but will only trigger on user interaction, not programatic interaction.\r\n-   `onCommitActual` - `(element: MultilineTextBox, player: Player | undefined, text: string) => void`: Equivalent to adding a commit event handler using `onTextCommitted.add(...)`.\r\n-   `maxLength` - `number`: Equivalent to setting the maximum length of the text using `setMaxLength(...)`.\r\n-   `transparent` - `boolean`: Equivalent to calling `multilineTextBox.setTransparent(...)`.\r\n-   `font` - `string`: Equivalent to setting the font using `setFont(...)`.\r\n-   `fontPackage` - `string`: Equivalent to setting the font package using `setFont(...)` with a package specifier.\r\n\r\n-   `<textarea>` can take a string as a child\r\n\r\n#### ProgressBar\r\n\r\n```tsx\r\n<progressbar ref={progressbarRef} disabled={false} hidden={false} bold={true} italic={false} wrap={true} size={18} color={[1, 0, 0, 1]} value={50} label=\"Loading...\" />\r\n```\r\n\r\n-   `bold` - `boolean`: Equivalent to calling `progressBar.setBold(...)`.\r\n-   `italic` - `boolean`: Equivalent to calling `progressBar.setItalic(...)`.\r\n-   `wrap` - `boolean`: Equivalent to calling `progressBar.setWrap(...)`.\r\n-   `size` - `number`: Equivalent to calling `progressBar.setFontSize(...)`.\r\n-   `color` - `[number, number, number, number]` or `Color`: Equivalent to calling `progressBar.setTextColor(...)`.\r\n-   `value` - `number`: Equivalent to calling `progressBar.setProgress(...)`.\r\n-   `label` - `string` or `string[]`: Equivalent to setting the progress bar label using `setText(...)`.\r\n-   `font` - `string`: Equivalent to setting the font using `setFont(...)`.\r\n-   `fontPackage` - `string`: Equivalent to setting the font package using `setFont(...)` with a package specifier.\r\n\r\n-   `<progressbar>` takes no children\r\n\r\n#### RichText\r\n\r\n```tsx\r\n<richtext ref={richtextRef} disabled={false} hidden={false} bold={true} italic={false} size={18} color={[1, 0, 0, 1]} wrap={true} justify={TextJustification.Center}>\r\n    This is a sample [b]rich[/b] text.\r\n</richtext>\r\n```\r\n\r\n-   `bold` - `boolean`: Equivalent to calling `richText.setBold(...)`.\r\n-   `italic` - `boolean`: Equivalent to calling `richText.setItalic(...)`.\r\n-   `size` - `number`: Equivalent to calling `richText.setFontSize(...)`.\r\n-   `color` - `[number, number, number, number]` or `Color`: Equivalent to calling `richText.setTextColor(...)`.\r\n-   `wrap` - `boolean`: Equivalent to calling `richText.setAutoWrap(...)`.\r\n-   `justify` - `TextJustification`: Equivalent to calling `richText.setJustification(...)`.\r\n-   `font` - `string`: Equivalent to setting the font using `setFont(...)`.\r\n-   `fontPackage` - `string`: Equivalent to setting the font package using `setFont(...)` with a package specifier.\r\n\r\n-   `<richtext>` can take a string as it's child.\r\n\r\n#### SelectionBox (Select)\r\n\r\n```tsx\r\n<select\r\n    ref={selectRef}\r\n    disabled={false}\r\n    hidden={false}\r\n    bold={true}\r\n    italic={false}\r\n    size={18}\r\n    color={[1, 0, 0, 1]}\r\n    onChange={(element, player, index, option) => {\r\n        /* Change handler */\r\n    }}\r\n    value=\"option2\"\r\n    options={[\"option1\", \"option2\", \"option3\"]}\r\n/>\r\n```\r\n\r\n-   `bold` - `boolean`: Equivalent to calling `selectionBox.setBold(...)`.\r\n-   `italic` - `boolean`: Equivalent to calling `selectionBox.setItalic(...)`.\r\n-   `size` - `number`: Equivalent to calling `selectionBox.setFontSize(...)`.\r\n-   `color` - `[number, number, number, number]` or `Color`: Equivalent to calling `selectionBox.setTextColor(...)`.\r\n-   `onChange` - `(element: SelectionBox, player: Player, index: number, option: string) => void`: Equivalent to adding a change event handler using `onSelectionChanged.add(...)` but will only trigger on user interaction, not programatic interaction.\r\n-   `onChangeActual` - `(element: SelectionBox, player: Player | undefined, index: number, option: string) => void`: Equivalent to adding a change event handler using `onSelectionChanged.add(...)`.\r\n-   `value` - `string`: Equivalent to setting the selected option using `setSelectedOption(...)`.\r\n-   `options` - `string[]`: An array of available options for the selection box.\r\n-   `font` - `string`: Equivalent to setting the font using `setFont(...)`.\r\n-   `fontPackage` - `string`: Equivalent to setting the font package using `setFont(...)` with a package specifier.\r\n\r\n-   `<select>` takes no children\r\n\r\n#### Slider\r\n\r\n```tsx\r\n<slider\r\n    ref={sliderRef}\r\n    disabled={false}\r\n    hidden={false}\r\n    bold={true}\r\n    italic={false}\r\n    size={18}\r\n    color={[1, 0, 0, 1]}\r\n    min={0}\r\n    value={50}\r\n    max={100}\r\n    step={1}\r\n    onChange={(element, player, value) => {\r\n        /* Change handler */\r\n    }}\r\n    inputWidth={50}\r\n    font=\"Arial\"\r\n    fontPackage=\"main\"\r\n/>\r\n```\r\n\r\n-   `bold` - `boolean`: Equivalent to calling `slider.setBold(...)`.\r\n-   `italic` - `boolean`: Equivalent to calling `slider.setItalic(...)`.\r\n-   `size` - `number`: Equivalent to calling `slider.setFontSize(...)`.\r\n-   `color` - `[number, number, number, number]` or `Color`: Equivalent to calling `slider.setTextColor(...)`.\r\n-   `min` - `number`: Equivalent to setting the minimum value using `setMinValue(...)`.\r\n-   `value` - `number`: Equivalent to setting the current value using `setValue(...)`.\r\n-   `max` - `number`: Equivalent to setting the maximum value using `setMaxValue(...)`.\r\n-   `step` - `number`: Equivalent to setting the step size using `setStepSize(...)`.\r\n-   `onChange` - `(element: Slider, player: Player, value: number) => void`: Equivalent to adding a change event handler using `onValueChanged.add(...)` but will only trigger on user interaction, not programatic interaction.\r\n-   `onChangeActual` - `(element: Slider, player: Player | undefined, value: number) => void`: Equivalent to adding a change event handler using `onValueChanged.add(...)`.\r\n-   `inputWidth` - `number`: Equivalent to setting the width of the input box using `setTextBoxWidth(...)`.\r\n-   `font` - `string`: Equivalent to setting the font using `setFont(...)`.\r\n-   `fontPackage` - `string`: Equivalent to setting the font package using `setFont(...)` with a package specifier.\r\n\r\n-   `<slider>` takes no children\r\n\r\n#### TextBox\r\n\r\n```tsx\r\n<input\r\n    size={18}\r\n    color={[1, 0, 0, 1]}\r\n    onChange={(element, player, text) => {\r\n        /* Change handler */\r\n    }}\r\n    onCommit={(element, player, text, hardCommit) => {\r\n        /* Commit handler */\r\n    }}\r\n    maxLength={100}\r\n    transparent={false}\r\n    selectOnFocus={true}\r\n    value=\"Initial Value\"\r\n    type=\"string\"\r\n    font=\"Arial\"\r\n    fontPackage=\"main\"\r\n/>\r\n```\r\n\r\n-   `bold` - `boolean`: Equivalent to calling `textBox.setBold(...)`.\r\n-   `italic` - `boolean`: Equivalent to calling `textBox.setItalic(...)`.\r\n-   `size` - `number`: Equivalent to calling `textBox.setFontSize(...)`.\r\n-   `color` - `[number, number, number, number]` or `Color`: Equivalent to calling `textBox.setTextColor(...)`.\r\n-   `onChange` - `(element: TextBox, player: Player, text: string) => void`: Equivalent to adding a change event handler using `onTextChanged.add(...)` but will only trigger on user interaction, not programatic interaction.\r\n-   `onChangeActual` - `(element: TextBox, player: Player | undefined, text: string) => void`: Equivalent to adding a change event handler using `onTextChanged.add(...)`.\r\n-   `onCommit` - `(element: TextBox, player: Player, text: string, hardCommit: boolean) => void`: Equivalent to adding a commit event handler using `onTextCommitted.add(...)` but will only trigger on user interaction, not programatic interaction.\r\n-   `onCommitActual` - `(element: TextBox, player: Player | undefined, text: string, hardCommit: boolean) => void`: Equivalent to adding a commit event handler using `onTextCommitted.add(...)`.\r\n-   `maxLength` - `number`: Equivalent to setting the maximum length of the text using `setMaxLength(...)`.\r\n-   `transparent` - `boolean`: Equivalent to calling `textBox.setBackgroundTransparent(...)`.\r\n-   `selectOnFocus` - `boolean`: Equivalent to calling `textBox.setSelectTextOnFocus(...)`.\r\n-   `value` - `string`: Equivalent to setting the initial value using `setText(...)`.\r\n-   `type` - `\"string\" | \"float\" | \"positive-float\" | \"integer\" | \"positive-integer\"`: Equivalent to setting the input type using `setInputType(...)` but with a string argument instead of numeric arguments.\r\n-   `font` - `string`: Equivalent to setting the font using `setFont(...)`.\r\n-   `fontPackage` - `string`: Equivalent to setting the font package using `setFont(...)` with a package specifier.\r\n\r\n-   `<input>` takes no children\r\n\r\n# Extendable Component-esque functions\r\n\r\nYou can make your own \"components\" that you can re-use throughout your code. I've re-used the same convention that React/Typescript uses: built-in widgets are all lowercase. Custom components must start with an Uppercase letter. Note the below: \"RobPanel\" vs \"verticalbox\".\r\n\r\n```tsx\r\n// RobPanel can be used anywhere I want this style of panel - with some forward thinking, it can be made more abstract and re-usable, if one wanted to.\r\n\r\nconst RobPanel = (props: { children?: SingleNode; title: TextNode; onClose?: () => void }) => {\r\n    return (\r\n        <border color={[0, 0, 0, 1]}>\r\n            <verticalbox>\r\n                <border color={[0.125, 0.125, 0.125, 1]}>\r\n                    <horizontalbox valign={VerticalAlignment.Center}>\r\n                        {boxChild(1, <text justify={TextJustification.Center}>{props.title}</text>)}\r\n                        <button onClick={props.onClose}>Close</button>\r\n                    </horizontalbox>\r\n                </border>\r\n                {boxChild(1, props.children)}\r\n            </verticalbox>\r\n        </border>\r\n    );\r\n};\r\n\r\nconst element = new UIElement();\r\nelement.widget = render(<RobPanel title={\"My Model\"}>Hi There</RobPanel>);\r\n\r\nrefObject.addUI(element);\r\n```\r\n\r\n# Using Refs\r\n\r\nJSX is only used to instantiate a widget. It does not take into account any changes you make to the widget inline through some state. For those who are familiar with JSX in the context of React or simiar, this will be jarring, no doubt. In order to programmatically access and alter a deeply nested widget, you can pass in a ref object into the ref attribute of an element.\r\n\r\nTo do this, call the provided `useRef()` function to generate a ref object. Once the widget has been instantiated, you can access the Widget directly using `refObj.current`. see the below.\r\n\r\nif the widget hasn't been instantiated yet, the `ref.current` value will be `null`.\r\n\r\nThere is a trap here, however. It's important that if you are done with a certain widget, you clear the ref, otherwise the widget may not get properly garbage collected. To do this, call `refObj.clear()`. additionally, you can pass the same refObject to a new element to recyle it if you're no need a reference to the previous widget.\r\n\r\n## Example with useRef\r\n\r\n```tsx\r\nconst imageRef = useRef<ImageWidget>();\r\nconst layoutRef = useRef<LayoutBox>();\r\n\r\nconst checkRef = () => {\r\n    console.log(imageRef.current);\r\n    if (imageRef.current) {\r\n        console.log(imageRef.current.getTintColor());\r\n    }\r\n};\r\n\r\nelement.widget = render(\r\n    <border color={[0, 0, 0, 1]}>\r\n        <verticalbox gap={10}>\r\n            <layout maxWidth={240}>\r\n                <image ref={imageRef} url={\"https://raw.githubusercontent.com/RobMayer/TTSLibrary/master/ads/offworldcolonies_h.jpg\"} />\r\n            </layout>\r\n            <horizontalbox>\r\n                <button onClick={checkRef}>Check</button>\r\n            </horizontalbox>\r\n        </verticalbox>\r\n    </border>\r\n);\r\n\r\nrefObject.addUI(element);\r\n```\r\n\r\nyou can also just keep a reference to the widget the old-fashioned way, too, but I find it easier to keep the widget in the right place in the hierarchy rather than scattering discreet widgets around the script.\r\n\r\n```tsx\r\nconst layoutRef = useRef<LayoutBox>();\r\n\r\nconst imageElement = render(<image url={\"https://raw.githubusercontent.com/RobMayer/TTSLibrary/master/ads/offworldcolonies_h.jpg\"} />);\r\n\r\nconst checkRef = () => {\r\n    console.log(imageElement);\r\n    console.log(imageElement.getTintColor());\r\n};\r\n\r\nelement.widget = render(\r\n    <border color={[0, 0, 0, 1]}>\r\n        <verticalbox gap={10}>\r\n            <layout maxWidth={240}>{imageElement}</layout>\r\n            <horizontalbox>\r\n                <button onClick={checkRef}>Check</button>\r\n            </horizontalbox>\r\n        </verticalbox>\r\n    </border>\r\n);\r\n\r\nrefObject.addUI(element);\r\n```\r\n","readmeFilename":"README.md"}