diff --git a/compatibility-tests/fixtures/next/package/package.json b/compatibility-tests/fixtures/next/package/package.json
index f536242..b9bb805 100644
--- a/compatibility-tests/fixtures/next/package/package.json
+++ b/compatibility-tests/fixtures/next/package/package.json
@@ -9,6 +9,7 @@
"@theatre/core": "0.0.1-COMPAT.1",
"@theatre/r3f": "0.0.1-COMPAT.1",
"@theatre/studio": "0.0.1-COMPAT.1",
+ "theatric": "0.0.1-COMPAT.1",
"next": "latest",
"react": "^18.2.0",
"react-dom": "^18.2.0"
diff --git a/compatibility-tests/fixtures/next/package/pages/theatric.js b/compatibility-tests/fixtures/next/package/pages/theatric.js
new file mode 100644
index 0000000..6408c7d
--- /dev/null
+++ b/compatibility-tests/fixtures/next/package/pages/theatric.js
@@ -0,0 +1,77 @@
+import {button, initialize, useControls} from 'theatric'
+import {render} from 'react-dom'
+import React, {useState} from 'react'
+
+// initialize()
+
+function SomeComponent({id}) {
+ const {foo, $get, $set} = useControls(
+ {
+ foo: 0,
+ bar: 0,
+ bez: button(() => {
+ $set((p) => p.foo, 2)
+ $set((p) => p.bar, 3)
+ console.log($get((p) => p.foo))
+ }),
+ },
+ {folder: id},
+ )
+
+ return (
+
+ {id}: {foo}
+
+ )
+}
+
+export default function App() {
+ const {bar, $set, $get} = useControls({
+ bar: {foo: 'bar'},
+ baz: button(() => console.log($get((p) => p.bar))),
+ })
+
+ const {another, panel, yo} = useControls(
+ {
+ another: '',
+ panel: '',
+ yo: 0,
+ },
+ {panel: 'My panel'},
+ )
+
+ const {} = useControls({})
+
+ const [showComponent, setShowComponent] = useState(false)
+
+ return (
+
+
{JSON.stringify(bar)}
+
+
+
+
+ {showComponent &&
}
+ {yo}
+
+ )
+}
diff --git a/compatibility-tests/scripts/scripts.mjs b/compatibility-tests/scripts/scripts.mjs
index ccfdc96..c3ea58b 100644
--- a/compatibility-tests/scripts/scripts.mjs
+++ b/compatibility-tests/scripts/scripts.mjs
@@ -9,6 +9,13 @@ import onCleanup from 'node-cleanup'
import * as verdaccioPackage from 'verdaccio'
import {chromium, devices} from 'playwright'
+/**
+ * @param {string} pkg
+ * @returns boolean
+ */
+const isTheatreDependency = (pkg) =>
+ pkg.startsWith('@theatre/') || pkg === 'theatric'
+
const verbose = !!argv['verbose']
if (!verbose) {
@@ -120,7 +127,7 @@ async function patchTheatreDependencies(pathToPackageJson, version) {
const dependencies = packageJson[dependencyType]
if (dependencies) {
for (const dependencyName of Object.keys(dependencies)) {
- if (dependencyName.startsWith('@theatre/')) {
+ if (isTheatreDependency(dependencyName)) {
dependencies[dependencyName] = version
}
}
@@ -210,6 +217,7 @@ const packagesToPublish = [
'@theatre/react',
'@theatre/browser-bundles',
'@theatre/r3f',
+ 'theatric',
]
/**
diff --git a/compatibility-tests/verdaccio.yml b/compatibility-tests/verdaccio.yml
index 5d25dbb..dce9ea9 100644
--- a/compatibility-tests/verdaccio.yml
+++ b/compatibility-tests/verdaccio.yml
@@ -15,6 +15,9 @@ packages:
'@theatre/*':
access: $all
publish: $all
+ 'theatric':
+ access: $all
+ publish: $all
'@*/*':
access: $all
publish: $all
diff --git a/packages/theatric/devEnv/build.ts b/packages/theatric/devEnv/build.ts
index 599d720..cb4c484 100644
--- a/packages/theatric/devEnv/build.ts
+++ b/packages/theatric/devEnv/build.ts
@@ -26,6 +26,14 @@ const definedGlobals = {
function createBundles(watch: boolean) {
const pathToPackage = path.join(__dirname, '../')
+ const pkgJson = require(path.join(pathToPackage, 'package.json'))
+ const listOfDependencies = Object.keys(pkgJson.dependencies || {})
+ const listOfPeerDependencies = Object.keys(pkgJson.peerDependencies || {})
+ const listOfAllDependencies = [
+ ...listOfDependencies,
+ ...listOfPeerDependencies,
+ ]
+
const esbuildConfig: Parameters[0] = {
entryPoints: [path.join(pathToPackage, 'src/index.ts')],
bundle: true,
@@ -36,7 +44,12 @@ function createBundles(watch: boolean) {
mainFields: ['browser', 'module', 'main'],
target: ['firefox57', 'chrome58'],
conditions: ['browser', 'node'],
- plugins: [externalPlugin([/^[\@a-zA-Z]+/])],
+ plugins: [
+ externalPlugin([
+ // if a dependency is listed in the package.json, it should be external
+ ...listOfAllDependencies.map((d) => new RegExp(`^${d}`)),
+ ]),
+ ],
}
build({
diff --git a/packages/theatric/package.json b/packages/theatric/package.json
index 0201bab..1693a88 100644
--- a/packages/theatric/package.json
+++ b/packages/theatric/package.json
@@ -36,13 +36,13 @@
"esbuild": "^0.12.15",
"esbuild-register": "^2.5.0",
"npm-run-all": "^4.1.5",
+ "lodash-es": "^4.17.21",
"typescript": "^4.4.2"
},
"dependencies": {
"@theatre/core": "workspace:*",
"@theatre/react": "workspace:*",
- "@theatre/studio": "workspace:*",
- "lodash-es": "^4.17.21"
+ "@theatre/studio": "workspace:*"
},
"peerDependencies": {
"react": "*",
diff --git a/scripts/build.mjs b/scripts/build.mjs
index bdc8385..63d1bca 100644
--- a/scripts/build.mjs
+++ b/scripts/build.mjs
@@ -8,6 +8,7 @@ const packagesToBuild = [
'@theatre/react',
'@theatre/browser-bundles',
'@theatre/r3f',
+ 'theatric',
]
;(async function () {
// better quote function from https://github.com/google/zx/pull/167
diff --git a/scripts/clean.mjs b/scripts/clean.mjs
index f5f46b4..229401f 100644
--- a/scripts/clean.mjs
+++ b/scripts/clean.mjs
@@ -8,6 +8,7 @@ const packages = [
'@theatre/react',
'@theatre/browser-bundles',
'@theatre/r3f',
+ 'theatric',
]
;(async function () {
diff --git a/scripts/prerelease.mjs b/scripts/prerelease.mjs
index 12148e2..7c3e08c 100644
--- a/scripts/prerelease.mjs
+++ b/scripts/prerelease.mjs
@@ -12,6 +12,7 @@ const packagesToPublish = [
'@theatre/react',
'@theatre/browser-bundles',
'@theatre/r3f',
+ 'theatric',
]
/**
diff --git a/scripts/release.mjs b/scripts/release.mjs
index 1f8fa35..be28740 100644
--- a/scripts/release.mjs
+++ b/scripts/release.mjs
@@ -21,6 +21,7 @@ const packagesToBuild = [
'@theatre/react',
'@theatre/browser-bundles',
'@theatre/r3f',
+ 'theatric',
]
const packagesToPublish = [
@@ -30,6 +31,7 @@ const packagesToPublish = [
'@theatre/react',
'@theatre/browser-bundles',
'@theatre/r3f',
+ 'theatric',
]
/**
@@ -44,6 +46,7 @@ const packagesWhoseVersionsShouldBump = [
'packages/react',
'packages/browser-bundles',
'packages/r3f',
+ 'theatric',
]
;(async function () {