diff --git a/config/.neutrinorc.js b/config/.neutrinorc.js
index 3ab1f32..1760bba 100644
--- a/config/.neutrinorc.js
+++ b/config/.neutrinorc.js
@@ -45,6 +45,11 @@ module.exports = {
const testEntry = neutrino.config.entry('test').clear();
testPaths.forEach((path) => testEntry.add(path));
}
+ const cssPaths = glob.sync('./src/**/*.{css,scss}');
+ if (cssPaths.length > 0) {
+ const cssEntry = neutrino.config.entry('index.css').clear();
+ cssPaths.forEach((path) => cssEntry.add(path));
+ }
neutrino.options.output = '.';
react({
clean: false,
diff --git a/packages/core/src/client/index.js b/packages/core/src/client/index.js
index 518efeb..e69de29 100644
--- a/packages/core/src/client/index.js
+++ b/packages/core/src/client/index.js
@@ -1,26 +0,0 @@
-import flatten from 'lodash.flatten';
-
-import BinaryResourceRenderer from './renderers/binary';
-import ImageResourceRenderer from './renderers/image';
-import TextResourceRenderer from './renderers/text';
-
-export {default as Number} from './components/number';
-export {default as Range, rangePropType} from './components/range';
-export {default as Vector, vectorPropType} from './components/vector';
-export {default as VectorRange, vectorRangePropType} from './components/vector-range';
-export {default as Stage} from './stage';
-
-export default {
- hooks: {
- '@latus/core/starting': async (latus) => {
- const Renderers = flatten(await latus.invokeOrdered('@persea/core/resource-renderers'));
- Renderers.push(
- ImageResourceRenderer,
- TextResourceRenderer,
- BinaryResourceRenderer,
- );
- const Renderer = (uri) => Renderers.find(({matcher}) => uri.match(matcher)).Component;
- latus.set('%resource-renderers', Renderer);
- },
- },
-};
diff --git a/packages/core/src/client/components/number/index.jsx b/packages/core/src/components/number/index.jsx
similarity index 98%
rename from packages/core/src/client/components/number/index.jsx
rename to packages/core/src/components/number/index.jsx
index 3e045c0..06833b8 100644
--- a/packages/core/src/client/components/number/index.jsx
+++ b/packages/core/src/components/number/index.jsx
@@ -1,5 +1,3 @@
-import './index.scss';
-
import {
PropTypes,
React,
diff --git a/packages/core/src/client/components/number/index.scss b/packages/core/src/components/number/index.scss
similarity index 100%
rename from packages/core/src/client/components/number/index.scss
rename to packages/core/src/components/number/index.scss
diff --git a/packages/core/src/client/components/range/index.jsx b/packages/core/src/components/range/index.jsx
similarity index 98%
rename from packages/core/src/client/components/range/index.jsx
rename to packages/core/src/components/range/index.jsx
index 9278f63..5ceab20 100644
--- a/packages/core/src/client/components/range/index.jsx
+++ b/packages/core/src/components/range/index.jsx
@@ -1,5 +1,3 @@
-import './index.scss';
-
import {
PropTypes,
React,
diff --git a/packages/core/src/client/components/range/index.scss b/packages/core/src/components/range/index.scss
similarity index 100%
rename from packages/core/src/client/components/range/index.scss
rename to packages/core/src/components/range/index.scss
diff --git a/packages/core/src/client/stage/index.jsx b/packages/core/src/components/stage/index.jsx
similarity index 97%
rename from packages/core/src/client/stage/index.jsx
rename to packages/core/src/components/stage/index.jsx
index ca6afb8..4fcaaa9 100644
--- a/packages/core/src/client/stage/index.jsx
+++ b/packages/core/src/components/stage/index.jsx
@@ -1,5 +1,3 @@
-import './index.scss';
-
import {Renderer} from '@avocado/graphics';
import {
PropTypes,
diff --git a/packages/core/src/client/renderers/binary/index.scss b/packages/core/src/components/stage/index.scss
similarity index 100%
rename from packages/core/src/client/renderers/binary/index.scss
rename to packages/core/src/components/stage/index.scss
diff --git a/packages/core/src/client/components/vector-range/index.jsx b/packages/core/src/components/vector-range/index.jsx
similarity index 98%
rename from packages/core/src/client/components/vector-range/index.jsx
rename to packages/core/src/components/vector-range/index.jsx
index c93c932..6960613 100644
--- a/packages/core/src/client/components/vector-range/index.jsx
+++ b/packages/core/src/components/vector-range/index.jsx
@@ -1,5 +1,3 @@
-import './index.scss';
-
import {
PropTypes,
React,
diff --git a/packages/core/src/client/components/vector-range/index.scss b/packages/core/src/components/vector-range/index.scss
similarity index 100%
rename from packages/core/src/client/components/vector-range/index.scss
rename to packages/core/src/components/vector-range/index.scss
diff --git a/packages/core/src/client/components/vector/index.jsx b/packages/core/src/components/vector/index.jsx
similarity index 95%
rename from packages/core/src/client/components/vector/index.jsx
rename to packages/core/src/components/vector/index.jsx
index 5452d51..78a0ee0 100644
--- a/packages/core/src/client/components/vector/index.jsx
+++ b/packages/core/src/components/vector/index.jsx
@@ -1,6 +1,8 @@
-import './index.scss';
+import {
+ PropTypes,
+ React,
+} from '@latus/react';
-import {PropTypes, React} from '@latus/react';
import Number from '../number';
const Vector = ({
diff --git a/packages/core/src/client/components/vector/index.scss b/packages/core/src/components/vector/index.scss
similarity index 100%
rename from packages/core/src/client/components/vector/index.scss
rename to packages/core/src/components/vector/index.scss
diff --git a/packages/core/src/index.js b/packages/core/src/index.js
index 83b2539..7ab226c 100644
--- a/packages/core/src/index.js
+++ b/packages/core/src/index.js
@@ -1,5 +1,15 @@
+import flatten from 'lodash.flatten';
+
+import BinaryResourceRenderer from './resource-renderers/binary';
+import ImageResourceRenderer from './resource-renderers/image';
+import TextResourceRenderer from './resource-renderers/text';
import {projects, user} from './state';
+export {default as Number} from './components/number';
+export {default as Range, rangePropType} from './components/range';
+export {default as Vector, vectorPropType} from './components/vector';
+export {default as VectorRange, vectorRangePropType} from './components/vector-range';
+export {default as Stage} from './components/stage';
export {default as ProjectContext} from './context/project';
export {default as UriContext} from './context/uri';
export {default as useProject} from './hooks/use-project';
@@ -11,6 +21,16 @@ export default {
'@latus/core/config': () => ({
'resource-renderers': [],
}),
+ '@latus/core/starting': async (latus) => {
+ const Renderers = flatten(await latus.invokeOrdered('@persea/core/resource-renderers'));
+ Renderers.push(
+ ImageResourceRenderer,
+ TextResourceRenderer,
+ BinaryResourceRenderer,
+ );
+ const Renderer = (uri) => Renderers.find(({matcher}) => uri.match(matcher)).Component;
+ latus.set('%resource-renderers', Renderer);
+ },
'@latus/redux/slices': () => ({
projects,
user,
diff --git a/packages/core/src/client/renderers/binary/index.jsx b/packages/core/src/resource-renderers/binary/index.jsx
similarity index 79%
rename from packages/core/src/client/renderers/binary/index.jsx
rename to packages/core/src/resource-renderers/binary/index.jsx
index 96c5492..fe22cd2 100644
--- a/packages/core/src/client/renderers/binary/index.jsx
+++ b/packages/core/src/resource-renderers/binary/index.jsx
@@ -1,6 +1,7 @@
-import './index.scss';
-
-import {PropTypes, React} from '@latus/react';
+import {
+ PropTypes,
+ React,
+} from '@latus/react';
import HexEditor from 'react-hex-editor';
import oneDarkPro from 'react-hex-editor/themes/oneDarkPro';
@@ -32,8 +33,16 @@ export default class BinaryResourceRenderer {
);
}
+ static encode(buffer) {
+ return buffer.toString('base64');
+ }
+
static get matcher() {
return /.*/;
}
+ static decode(encoded) {
+ return Buffer.from(encoded, 'base64');
+ }
+
}
diff --git a/packages/core/src/client/stage/index.scss b/packages/core/src/resource-renderers/binary/index.scss
similarity index 100%
rename from packages/core/src/client/stage/index.scss
rename to packages/core/src/resource-renderers/binary/index.scss
diff --git a/packages/core/src/client/renderers/image/index.jsx b/packages/core/src/resource-renderers/image/index.jsx
similarity index 88%
rename from packages/core/src/client/renderers/image/index.jsx
rename to packages/core/src/resource-renderers/image/index.jsx
index 9a937c0..a01834d 100644
--- a/packages/core/src/client/renderers/image/index.jsx
+++ b/packages/core/src/resource-renderers/image/index.jsx
@@ -1,6 +1,7 @@
-import './index.scss';
-
-import {PropTypes, React} from '@latus/react';
+import {
+ PropTypes,
+ React,
+} from '@latus/react';
const ImageRendererComponent = ({buffer}) => (
diff --git a/packages/core/src/client/renderers/image/index.scss b/packages/core/src/resource-renderers/image/index.scss
similarity index 100%
rename from packages/core/src/client/renderers/image/index.scss
rename to packages/core/src/resource-renderers/image/index.scss
diff --git a/packages/core/src/client/renderers/text/index.jsx b/packages/core/src/resource-renderers/text/index.jsx
similarity index 85%
rename from packages/core/src/client/renderers/text/index.jsx
rename to packages/core/src/resource-renderers/text/index.jsx
index d1dca45..4a74d44 100644
--- a/packages/core/src/client/renderers/text/index.jsx
+++ b/packages/core/src/resource-renderers/text/index.jsx
@@ -1,6 +1,7 @@
-import './index.scss';
-
-import {PropTypes, React} from '@latus/react';
+import {
+ PropTypes,
+ React,
+} from '@latus/react';
const TextRendererComponent = ({buffer}) => (
{buffer.toString()}
diff --git a/packages/core/src/client/renderers/text/index.scss b/packages/core/src/resource-renderers/text/index.scss
similarity index 100%
rename from packages/core/src/client/renderers/text/index.scss
rename to packages/core/src/resource-renderers/text/index.scss
diff --git a/packages/entity/.neutrinorc.js b/packages/entity/.neutrinorc.js
index d6c3d9d..bfa7912 100644
--- a/packages/entity/.neutrinorc.js
+++ b/packages/entity/.neutrinorc.js
@@ -1 +1,5 @@
module.exports = require('../../config/.neutrinorc');
+
+module.exports.use.push((neutrino) => {
+ neutrino.config.entry('index.css').prepend('react-tabs/style/react-tabs.scss');
+});
diff --git a/packages/entity/src/client/index.js b/packages/entity/src/client/index.js
index a9c287b..e69de29 100644
--- a/packages/entity/src/client/index.js
+++ b/packages/entity/src/client/index.js
@@ -1,26 +0,0 @@
-import 'react-tabs/style/react-tabs.css';
-
-import {basename, extname} from 'path';
-
-import {camelCase} from '@latus/core';
-
-import EntityRenderer from '../entity-renderer';
-
-export default {
- hooks: {
- '@latus/core/starting': async (latus) => {
- const TraitRenderers = latus.invokeReduce('@persea/entity/trait-renderers');
- latus.set('%trait-renderers', TraitRenderers);
- },
- '@persea/core/resource-renderers': () => [
- EntityRenderer,
- ],
- '@persea/entity/trait-renderers': () => {
- const context = require.context('../trait-renderers', false, /\.jsx$/);
- return context.keys().reduce((r, key) => ({
- ...r,
- [camelCase(basename(key, extname(key)))]: context(key).default,
- }), {});
- },
- },
-};
diff --git a/packages/entity/src/index.js b/packages/entity/src/index.js
index e69de29..6c31be5 100644
--- a/packages/entity/src/index.js
+++ b/packages/entity/src/index.js
@@ -0,0 +1,24 @@
+import {basename, extname} from 'path';
+
+import {camelCase} from '@latus/core';
+
+import EntityRenderer from './resource-renderers/entity';
+
+export default {
+ hooks: {
+ '@latus/core/starting': async (latus) => {
+ const TraitRenderers = latus.invokeReduce('@persea/entity/trait-renderers');
+ latus.set('%trait-renderers', TraitRenderers);
+ },
+ '@persea/core/resource-renderers': () => [
+ EntityRenderer,
+ ],
+ '@persea/entity/trait-renderers': () => {
+ const context = require.context('./trait-renderers', false, /\.jsx$/);
+ return context.keys().reduce((r, key) => ({
+ ...r,
+ [camelCase(basename(key, extname(key)))]: context(key).default,
+ }), {});
+ },
+ },
+};
diff --git a/packages/entity/src/entity-renderer/index.jsx b/packages/entity/src/resource-renderers/entity/index.jsx
similarity index 94%
rename from packages/entity/src/entity-renderer/index.jsx
rename to packages/entity/src/resource-renderers/entity/index.jsx
index 4520e0a..b0dd167 100644
--- a/packages/entity/src/entity-renderer/index.jsx
+++ b/packages/entity/src/resource-renderers/entity/index.jsx
@@ -1,8 +1,9 @@
-import './index.scss';
-
import {join} from 'path';
-import {PropTypes, React} from '@latus/react';
+import {
+ PropTypes,
+ React,
+} from '@latus/react';
import {
Tab,
Tabs,
diff --git a/packages/entity/src/entity-renderer/index.scss b/packages/entity/src/resource-renderers/entity/index.scss
similarity index 100%
rename from packages/entity/src/entity-renderer/index.scss
rename to packages/entity/src/resource-renderers/entity/index.scss
diff --git a/packages/entity/src/entity-renderer/stage/index.jsx b/packages/entity/src/resource-renderers/entity/stage/index.jsx
similarity index 93%
rename from packages/entity/src/entity-renderer/stage/index.jsx
rename to packages/entity/src/resource-renderers/entity/stage/index.jsx
index 17550b4..0cf2ddb 100644
--- a/packages/entity/src/entity-renderer/stage/index.jsx
+++ b/packages/entity/src/resource-renderers/entity/stage/index.jsx
@@ -1,5 +1,3 @@
-import './index.scss';
-
import {Rectangle, Vector} from '@avocado/math';
import {
PropTypes,
@@ -7,7 +5,7 @@ import {
useEffect,
useState,
} from '@latus/react';
-import {Stage} from '@persea/core/client';
+import {Stage} from '@persea/core';
const EntityStage = ({entity}) => {
const [size, setSize] = useState([0, 0]);
diff --git a/packages/entity/src/entity-renderer/stage/index.scss b/packages/entity/src/resource-renderers/entity/stage/index.scss
similarity index 100%
rename from packages/entity/src/entity-renderer/stage/index.scss
rename to packages/entity/src/resource-renderers/entity/stage/index.scss
diff --git a/packages/entity/src/entity-renderer/traits/index.jsx b/packages/entity/src/resource-renderers/entity/traits/index.jsx
similarity index 98%
rename from packages/entity/src/entity-renderer/traits/index.jsx
rename to packages/entity/src/resource-renderers/entity/traits/index.jsx
index 07ae2b8..a443742 100644
--- a/packages/entity/src/entity-renderer/traits/index.jsx
+++ b/packages/entity/src/resource-renderers/entity/traits/index.jsx
@@ -1,5 +1,3 @@
-import './index.scss';
-
import {join} from 'path';
import {Trait as BaseTrait} from '@avocado/traits';
diff --git a/packages/entity/src/entity-renderer/traits/index.scss b/packages/entity/src/resource-renderers/entity/traits/index.scss
similarity index 100%
rename from packages/entity/src/entity-renderer/traits/index.scss
rename to packages/entity/src/resource-renderers/entity/traits/index.scss
diff --git a/packages/entity/src/entity-renderer/view/index.jsx b/packages/entity/src/resource-renderers/entity/view/index.jsx
similarity index 82%
rename from packages/entity/src/entity-renderer/view/index.jsx
rename to packages/entity/src/resource-renderers/entity/view/index.jsx
index a2f482c..3f5eb47 100644
--- a/packages/entity/src/entity-renderer/view/index.jsx
+++ b/packages/entity/src/resource-renderers/entity/view/index.jsx
@@ -1,8 +1,9 @@
-import './index.scss';
+import {
+ PropTypes,
+ React,
+} from '@latus/react';
-import {PropTypes, React} from '@latus/react';
-
-import useEntity from '../../hooks/use-entity';
+import useEntity from '../../../hooks/use-entity';
import EntityStage from '../stage';
const View = ({json}) => {
diff --git a/packages/entity/src/entity-renderer/view/index.scss b/packages/entity/src/resource-renderers/entity/view/index.scss
similarity index 100%
rename from packages/entity/src/entity-renderer/view/index.scss
rename to packages/entity/src/resource-renderers/entity/view/index.scss
diff --git a/packages/entity/src/trait-renderers/emitted.jsx b/packages/entity/src/trait-renderers/emitted.jsx
index c5ad9a2..ba15be3 100644
--- a/packages/entity/src/trait-renderers/emitted.jsx
+++ b/packages/entity/src/trait-renderers/emitted.jsx
@@ -1,5 +1,3 @@
-import './emitted.scss';
-
import {join} from 'path';
import {
@@ -13,7 +11,7 @@ import {
rangePropType,
VectorRange,
vectorRangePropType,
-} from '@persea/core/client';
+} from '@persea/core';
import {useJsonPatcher} from '@persea/json';
const Emitted = ({json, path}) => {
diff --git a/packages/entity/src/trait-renderers/emitter.jsx b/packages/entity/src/trait-renderers/emitter.jsx
index ed1e699..6fd3557 100644
--- a/packages/entity/src/trait-renderers/emitter.jsx
+++ b/packages/entity/src/trait-renderers/emitter.jsx
@@ -1,5 +1,3 @@
-import './emitter.scss';
-
import {join} from 'path';
import {PropTypes, React} from '@latus/react';
diff --git a/packages/entity/src/trait-renderers/emitter/particle.jsx b/packages/entity/src/trait-renderers/emitter/particle.jsx
index 07b625a..8b09719 100644
--- a/packages/entity/src/trait-renderers/emitter/particle.jsx
+++ b/packages/entity/src/trait-renderers/emitter/particle.jsx
@@ -1,15 +1,13 @@
-import './particle.scss';
-
import {EntityListView} from '@avocado/entity';
import {
PropTypes,
React,
useLatus,
} from '@latus/react';
-import {Number, Stage} from '@persea/core/client';
+import {Number, Stage} from '@persea/core';
import {useJsonPatcher} from '@persea/json';
-import Entity from '../../entity-renderer';
+import Entity from '../../resource-renderers/entity';
import useEntity from '../../hooks/use-entity';
const emitterJson = {
diff --git a/packages/entity/src/trait-renderers/existent.jsx b/packages/entity/src/trait-renderers/existent.jsx
index 3673a4a..1fb90ad 100644
--- a/packages/entity/src/trait-renderers/existent.jsx
+++ b/packages/entity/src/trait-renderers/existent.jsx
@@ -1,5 +1,3 @@
-import './existent.scss';
-
import {join} from 'path';
import {PropTypes, React} from '@latus/react';