diff --git a/.eslintrc.cjs b/.eslintrc.cjs
index 4cf8c838073..b6fe3292172 100644
--- a/.eslintrc.cjs
+++ b/.eslintrc.cjs
@@ -20,6 +20,7 @@ const frontendFiles = [
`**/pages/**/*.${jsSuffixes}`,
`**/page-templates/**/*.${jsSuffixes}`,
`packages/i18n/**/*.md/*.${jsSuffixes}`,
+ `packages/react-components/**/*.${jsSuffixes}`,
]
module.exports = {
diff --git a/config/dependencies.yaml b/config/dependencies.yaml
index fbdfa82aaec..f6445d6b8b8 100644
--- a/config/dependencies.yaml
+++ b/config/dependencies.yaml
@@ -133,6 +133,9 @@ plugintest:
'@freesewing/plugin-sprinkle': *freesewing
'@freesewing/plugin-svgattr': *freesewing
'@freesewing/plugin-theme': *freesewing
+react-components:
+ peer:
+ react: '>=14'
rehype-jargon:
_:
'unist-util-visit': &unist-util-visit '4.1.2'
diff --git a/config/scripts.yaml b/config/scripts.yaml
index e1b3794c070..0f9b1f1fc2b 100644
--- a/config/scripts.yaml
+++ b/config/scripts.yaml
@@ -45,6 +45,8 @@ rehype-jargon:
lint: "npx eslint 'src/*.mjs'"
snapseries:
lint: "npx eslint 'src/*.mjs'"
+react-components:
+ lint: "eslint 'src/**/*.mjs'"
# Sites go here
backend:
diff --git a/packages/react-components/package.json b/packages/react-components/package.json
index 255d5702022..9aabbee6a76 100644
--- a/packages/react-components/package.json
+++ b/packages/react-components/package.json
@@ -31,12 +31,14 @@
"vbuild": "VERBOSE=1 node build.mjs",
"lab": "cd ../../sites/lab && yarn start",
"tips": "node ../../scripts/help.mjs",
- "lint": "npx eslint 'src/**' 'tests/*.mjs'",
+ "lint": "eslint 'src/**/*.mjs'",
"cibuild_step6": "node build.mjs",
"wbuild": "node build.mjs",
"wcibuild_step6": "node build.mjs"
},
- "peerDependencies": {},
+ "peerDependencies": {
+ "react": ">=14"
+ },
"dependencies": {},
"devDependencies": {},
"files": [
diff --git a/packages/react-components/src/index.mjs b/packages/react-components/src/index.mjs
index 57f3fadfbea..04c7d646d50 100644
--- a/packages/react-components/src/index.mjs
+++ b/packages/react-components/src/index.mjs
@@ -21,7 +21,7 @@ export const Svg = SvgComponent
export const Defs = DefsComponent
export const Group = GroupComponent
export const Stack = StackComponent
-export const Part = DefsComponent
+export const Part = PartComponent
export const Point = PointComponent
export const Path = PathComponent
export const Snippet = SnippetComponent
diff --git a/packages/react-components/src/pattern/circle.mjs b/packages/react-components/src/pattern/circle.mjs
index 86609f251e7..121deac8266 100644
--- a/packages/react-components/src/pattern/circle.mjs
+++ b/packages/react-components/src/pattern/circle.mjs
@@ -1,3 +1,4 @@
+// eslint-disable-next-line no-unused-vars
import React from 'react'
export const Circle = ({ point }) =>
diff --git a/packages/react-components/src/pattern/defs.mjs b/packages/react-components/src/pattern/defs.mjs
index d876255cd69..2f289255caa 100644
--- a/packages/react-components/src/pattern/defs.mjs
+++ b/packages/react-components/src/pattern/defs.mjs
@@ -1,3 +1,4 @@
+// eslint-disable-next-line no-unused-vars
import React from 'react'
const style = ` style="fill: none; stroke: currentColor;" `
@@ -17,6 +18,9 @@ export const Defs = (props) => {
if (typeof part.points.gridAnchor !== 'undefined') anchor = part.points.gridAnchor
else if (typeof part.points.anchor !== 'undefined') anchor = part.points.anchor
+ if (isNaN(anchor.x)) anchor.x = 0
+ if (isNaN(anchor.y)) anchor.y = 0
+
defs += ``
}
}
diff --git a/packages/react-components/src/pattern/grid.mjs b/packages/react-components/src/pattern/grid.mjs
index 852eaa34f07..249a483c5e6 100644
--- a/packages/react-components/src/pattern/grid.mjs
+++ b/packages/react-components/src/pattern/grid.mjs
@@ -1,3 +1,4 @@
+// eslint-disable-next-line no-unused-vars
import React from 'react'
export const Grid = ({ stack, stackName }) => (
diff --git a/packages/react-components/src/pattern/group.mjs b/packages/react-components/src/pattern/group.mjs
index 9eac8c43a21..b72478185df 100644
--- a/packages/react-components/src/pattern/group.mjs
+++ b/packages/react-components/src/pattern/group.mjs
@@ -1,3 +1,4 @@
+// eslint-disable-next-line no-unused-vars
import React, { forwardRef } from 'react'
export const Group = forwardRef((props, ref) => (
@@ -5,3 +6,5 @@ export const Group = forwardRef((props, ref) => (
{props.children}
))
+
+Group.displayName = 'Group'
diff --git a/packages/react-components/src/pattern/index.mjs b/packages/react-components/src/pattern/index.mjs
index cd9da146dbd..54fdc41b0ea 100644
--- a/packages/react-components/src/pattern/index.mjs
+++ b/packages/react-components/src/pattern/index.mjs
@@ -1,3 +1,4 @@
+// eslint-disable-next-line no-unused-vars
import React, { forwardRef } from 'react'
// Components that can be swizzled
import { Svg as DefaultSvg } from './svg.mjs'
@@ -84,3 +85,5 @@ export const Pattern = forwardRef(
)
}
)
+
+Pattern.displayName = 'Pattern'
diff --git a/packages/react-components/src/pattern/part.mjs b/packages/react-components/src/pattern/part.mjs
index ece24d2f8b3..64bd30eedaf 100644
--- a/packages/react-components/src/pattern/part.mjs
+++ b/packages/react-components/src/pattern/part.mjs
@@ -1,3 +1,4 @@
+// eslint-disable-next-line no-unused-vars
import React, { forwardRef } from 'react'
import { getId, getProps } from './utils.mjs'
@@ -38,6 +39,8 @@ export const PartInner = forwardRef(
}
)
+PartInner.displayName = 'PartInner'
+
export const Part = ({ stackName, partName, part, settings, components, t }) => {
const { Group } = components
diff --git a/packages/react-components/src/pattern/path.mjs b/packages/react-components/src/pattern/path.mjs
index e41486e2477..0ef622788f7 100644
--- a/packages/react-components/src/pattern/path.mjs
+++ b/packages/react-components/src/pattern/path.mjs
@@ -1,14 +1,14 @@
+// eslint-disable-next-line no-unused-vars
import React from 'react'
import { getId, getProps } from './utils.mjs'
-export const Path = ({ stackName, pathName, path, partName, part, settings, components, t }) => {
+export const Path = ({ stackName, pathName, path, partName, settings, components, t }) => {
// Don't render hidden paths
if (path.hidden) return null
// Get potentially swizzled components
const { TextOnPath } = components
- const output = []
const pathId = getId({ settings, stackName, partName, pathName })
return (
@@ -19,6 +19,4 @@ export const Path = ({ stackName, pathName, path, partName, part, settings, comp
) : null}
>
)
-
- return output
}
diff --git a/packages/react-components/src/pattern/point.mjs b/packages/react-components/src/pattern/point.mjs
index e956c368fcd..2e4f8d6ffcf 100644
--- a/packages/react-components/src/pattern/point.mjs
+++ b/packages/react-components/src/pattern/point.mjs
@@ -1,7 +1,8 @@
+// eslint-disable-next-line no-unused-vars
import React from 'react'
import { withinPartBounds } from './utils.mjs'
-export const Point = ({ stackName, partName, pointName, part, point, settings, components, t }) => {
+export const Point = ({ stackName, partName, pointName, part, point, components, t }) => {
// Don't include points outside the part bounding box
if (!withinPartBounds(point, part)) return null
diff --git a/packages/react-components/src/pattern/snippet.mjs b/packages/react-components/src/pattern/snippet.mjs
index 43f859dcfd4..91ce5846c77 100644
--- a/packages/react-components/src/pattern/snippet.mjs
+++ b/packages/react-components/src/pattern/snippet.mjs
@@ -1,3 +1,4 @@
+// eslint-disable-next-line no-unused-vars
import React from 'react'
import { getProps } from './utils.mjs'
diff --git a/packages/react-components/src/pattern/stack.mjs b/packages/react-components/src/pattern/stack.mjs
index cb85a6be76a..09c87866510 100644
--- a/packages/react-components/src/pattern/stack.mjs
+++ b/packages/react-components/src/pattern/stack.mjs
@@ -1,3 +1,4 @@
+// eslint-disable-next-line no-unused-vars
import React from 'react'
import { getProps } from './utils.mjs'
@@ -8,7 +9,7 @@ export const Stack = ({ stackName, stack, settings, components, t }) => {
{settings[0].paperless ? : null}
{[...stack.parts].map((part, key) => (
-
+
))}
)
diff --git a/packages/react-components/src/pattern/svg.mjs b/packages/react-components/src/pattern/svg.mjs
index 50cd0f58846..d5d54fbb2df 100644
--- a/packages/react-components/src/pattern/svg.mjs
+++ b/packages/react-components/src/pattern/svg.mjs
@@ -1,3 +1,4 @@
+// eslint-disable-next-line no-unused-vars
import React from 'react'
import { forwardRef } from 'react'
@@ -39,3 +40,5 @@ export const Svg = forwardRef(
)
}
)
+
+Svg.displayName = 'Svg'
diff --git a/packages/react-components/src/pattern/text.mjs b/packages/react-components/src/pattern/text.mjs
index d9cdbe4b8e5..6c4e41aa8ab 100644
--- a/packages/react-components/src/pattern/text.mjs
+++ b/packages/react-components/src/pattern/text.mjs
@@ -1,3 +1,4 @@
+// eslint-disable-next-line no-unused-vars
import React from 'react'
import { translateStrings } from './utils.mjs'
diff --git a/packages/react-components/src/pattern/utils.mjs b/packages/react-components/src/pattern/utils.mjs
index faf9fed0605..f0aeaf14a14 100644
--- a/packages/react-components/src/pattern/utils.mjs
+++ b/packages/react-components/src/pattern/utils.mjs
@@ -1,3 +1,4 @@
+// eslint-disable-next-line no-unused-vars
import React from 'react'
export const getProps = (obj) => {