diff --git a/javascript/src/wrapAssembly.ts b/javascript/src/wrapAssembly.ts
index 2f073d18..8d95daa1 100644
--- a/javascript/src/wrapAssembly.ts
+++ b/javascript/src/wrapAssembly.ts
@@ -71,8 +71,8 @@ export type MeasureFunction = (
export type Node = {
calculateLayout(
- width?: number | 'auto',
- height?: number | 'auto',
+ width: number | 'auto' | undefined,
+ height: number | 'auto' | undefined,
direction?: Direction,
): void;
copyStyle(node: Node): void;
@@ -124,45 +124,48 @@ export type Node = {
setAlignContent(alignContent: Align): void;
setAlignItems(alignItems: Align): void;
setAlignSelf(alignSelf: Align): void;
- setAspectRatio(aspectRatio: number): void;
- setBorder(edge: Edge, borderWidth: number): void;
+ setAspectRatio(aspectRatio: number | undefined): void;
+ setBorder(edge: Edge, borderWidth: number | undefined): void;
setDisplay(display: Display): void;
- setFlex(flex: number): void;
- setFlexBasis(flexBasis: number | 'auto' | `${number}%`): void;
- setFlexBasisPercent(flexBasis: number): void;
+ setFlex(flex: number | undefined): void;
+ setFlexBasis(flexBasis: number | 'auto' | `${number}%` | undefined): void;
+ setFlexBasisPercent(flexBasis: number | undefined): void;
setFlexBasisAuto(): void;
setFlexDirection(flexDirection: FlexDirection): void;
- setFlexGrow(flexGrow: number): void;
- setFlexShrink(flexShrink: number): void;
+ setFlexGrow(flexGrow: number | undefined): void;
+ setFlexShrink(flexShrink: number | undefined): void;
setFlexWrap(flexWrap: Wrap): void;
- setHeight(height: number | 'auto' | `${number}%`): void;
+ setHeight(height: number | 'auto' | `${number}%` | undefined): void;
setIsReferenceBaseline(isReferenceBaseline: boolean): void;
setHeightAuto(): void;
- setHeightPercent(height: number): void;
+ setHeightPercent(height: number | undefined): void;
setJustifyContent(justifyContent: Justify): void;
- setGap(gutter: Gutter, gapLength: number): Value;
- setMargin(edge: Edge, margin: number | 'auto' | `${number}%`): void;
+ setGap(gutter: Gutter, gapLength: number | undefined): Value;
+ setMargin(
+ edge: Edge,
+ margin: number | 'auto' | `${number}%` | undefined,
+ ): void;
setMarginAuto(edge: Edge): void;
- setMarginPercent(edge: Edge, margin: number): void;
- setMaxHeight(maxHeight: number | `${number}%`): void;
- setMaxHeightPercent(maxHeight: number): void;
- setMaxWidth(maxWidth: number | `${number}%`): void;
- setMaxWidthPercent(maxWidth: number): void;
+ setMarginPercent(edge: Edge, margin: number | undefined): void;
+ setMaxHeight(maxHeight: number | `${number}%` | undefined): void;
+ setMaxHeightPercent(maxHeight: number | undefined): void;
+ setMaxWidth(maxWidth: number | `${number}%` | undefined): void;
+ setMaxWidthPercent(maxWidth: number | undefined): void;
setDirtiedFunc(dirtiedFunc: DirtiedFunction | null): void;
setMeasureFunc(measureFunc: MeasureFunction | null): void;
- setMinHeight(minHeight: number | `${number}%`): void;
- setMinHeightPercent(minHeight: number): void;
- setMinWidth(minWidth: number | `${number}%`): void;
- setMinWidthPercent(minWidth: number): void;
+ setMinHeight(minHeight: number | `${number}%` | undefined): void;
+ setMinHeightPercent(minHeight: number | undefined): void;
+ setMinWidth(minWidth: number | `${number}%` | undefined): void;
+ setMinWidthPercent(minWidth: number | undefined): void;
setOverflow(overflow: Overflow): void;
- setPadding(edge: Edge, padding: number | `${number}%`): void;
- setPaddingPercent(edge: Edge, padding: number): void;
- setPosition(edge: Edge, position: number | `${number}%`): void;
- setPositionPercent(edge: Edge, position: number): void;
+ setPadding(edge: Edge, padding: number | `${number}%` | undefined): void;
+ setPaddingPercent(edge: Edge, padding: number | undefined): void;
+ setPosition(edge: Edge, position: number | `${number}%` | undefined): void;
+ setPositionPercent(edge: Edge, position: number | undefined): void;
setPositionType(positionType: PositionType): void;
- setWidth(width: number | 'auto' | `${number}%`): void;
+ setWidth(width: number | 'auto' | `${number}%` | undefined): void;
setWidthAuto(): void;
- setWidthPercent(width: number): void;
+ setWidthPercent(width: number | undefined): void;
unsetDirtiedFunc(): void;
unsetMeasureFunc(): void;
};
@@ -227,7 +230,11 @@ export default function wrapAssembly(lib: any): Yoga {
? Unit.Percent
: Unit.Point;
asNumber = parseFloat(value);
- if (!Number.isNaN(value) && Number.isNaN(asNumber)) {
+ if (
+ value !== undefined &&
+ !Number.isNaN(value) &&
+ Number.isNaN(asNumber)
+ ) {
throw new Error(`Invalid value ${value} for ${fnName}`);
}
}
diff --git a/website-next/docusaurus.config.js b/website-next/docusaurus.config.js
index 3f988ddd..b59c0f55 100644
--- a/website-next/docusaurus.config.js
+++ b/website-next/docusaurus.config.js
@@ -66,6 +66,7 @@ export default {
position: 'left',
label: 'Documentation',
},
+ {to: '/playground', label: 'Playground', position: 'left'},
{to: '/blog', label: 'Blog', position: 'left'},
{
href: 'https://github.com/facebook/yoga',
@@ -124,7 +125,11 @@ export default {
},
prism: {
theme: prismThemes.github,
- darkTheme: prismThemes.dracula,
+ darkTheme: prismThemes.oneDark,
+ },
+ colorMode: {
+ defaultMode: 'dark',
+ respectPrefersColorScheme: true,
},
}),
};
diff --git a/website-next/package.json b/website-next/package.json
index 1e64c865..69fbfc00 100644
--- a/website-next/package.json
+++ b/website-next/package.json
@@ -17,14 +17,15 @@
"lint:fix": "eslint . --fix"
},
"dependencies": {
- "@docusaurus/core": "3.0.0",
- "@docusaurus/preset-classic": "3.0.0",
+ "@docusaurus/core": "3.0.1",
+ "@docusaurus/preset-classic": "3.0.1",
"@mdx-js/react": "^3.0.0",
- "clsx": "^1.2.1",
- "immutable": "^4.0.0",
- "prism-react-renderer": "^2.1.0",
+ "clsx": "^2.0.0",
+ "nullthrows": "^1.1.1",
+ "prism-react-renderer": "^2.3.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
+ "react-live": "^4.1.5",
"yoga-layout": "0.0.0"
},
"devDependencies": {
diff --git a/website-next/sidebars.cjs b/website-next/sidebars.cjs
index f41ab4dc..5566ca3c 100644
--- a/website-next/sidebars.cjs
+++ b/website-next/sidebars.cjs
@@ -22,19 +22,6 @@
const sidebars = {
// By default, Docusaurus generates a sidebar from the docs folder structure
docsSidebar: [{type: 'autogenerated', dirName: '.'}],
-
- // But you can create a sidebar manually
- /*
- tutorialSidebar: [
- 'intro',
- 'hello',
- {
- type: 'category',
- label: 'Tutorial',
- items: ['tutorial-basics/create-a-document'],
- },
- ],
- */
};
module.exports = sidebars;
diff --git a/website-next/src/components/EditorToolbar.module.css b/website-next/src/components/EditorToolbar.module.css
new file mode 100644
index 00000000..442194e3
--- /dev/null
+++ b/website-next/src/components/EditorToolbar.module.css
@@ -0,0 +1,80 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+.toolbar {
+ display: flex;
+ column-gap: 8px;
+ position: absolute;
+ top: 10px;
+ right: 10px;
+}
+
+.toolbar button {
+ display: flex;
+ align-items: center;
+ background: var(--prism-background-color);
+ color: var(--prism-color);
+ border: 1px solid var(--ifm-color-emphasis-300);
+ border-radius: var(--ifm-global-radius);
+ padding: 0.4rem;
+ line-height: 0;
+ transition: opacity var(--ifm-transition-fast) ease-in-out;
+ opacity: 0.4;
+}
+
+.toolbar button:focus-visible,
+.toolbar button:hover {
+ opacity: 1 !important;
+}
+
+.icon {
+ width: 24px;
+ height: 24px;
+}
+
+.iconSwitcher {
+ position: relative;
+ width: 24px;
+ height: 24px;
+}
+
+.actionIcon,
+.successIcon {
+ position: absolute;
+ top: 0;
+ left: 0;
+ fill: currentColor;
+ opacity: inherit;
+ width: inherit;
+ height: inherit;
+ transition: all var(--ifm-transition-fast) ease;
+}
+
+.successIcon {
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%) scale(0.33);
+ opacity: 0;
+ color: #00d600;
+}
+
+.clicked .actionIcon {
+ transform: scale(0.33);
+ opacity: 0;
+}
+
+.clicked .successIcon {
+ transform: translate(-50%, -50%) scale(1);
+ opacity: 1;
+ transition-delay: 0.075s;
+}
+
+@media (max-width: 996px) {
+ .toolbar {
+ display: none;
+ }
+}
diff --git a/website-next/src/components/EditorToolbar.tsx b/website-next/src/components/EditorToolbar.tsx
new file mode 100644
index 00000000..f4581057
--- /dev/null
+++ b/website-next/src/components/EditorToolbar.tsx
@@ -0,0 +1,82 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @format
+ */
+
+import {useCallback, useEffect, useRef, useState} from 'react';
+import clsx from 'clsx';
+
+import CopyIcon from '../../static/img/copy.svg';
+import LinkIcon from '../../static/img/link.svg';
+import SuccessIcon from '@theme/Icon/Success';
+
+import styles from './EditorToolbar.module.css';
+
+export type Props = Readonly<{
+ getCode: () => string;
+}>;
+
+export default function EditorToolbar({getCode}: Props): JSX.Element {
+ const handleCopy = useCallback(
+ () => navigator.clipboard.writeText(getCode()),
+ [],
+ );
+
+ const handleShare = useCallback(
+ () =>
+ navigator.clipboard.writeText(
+ window.location.origin +
+ `/playground?code=${encodeURIComponent(btoa(getCode()))}`,
+ ),
+ [],
+ );
+
+ return (
+
+
+
+
+ );
+}
+
+type ToolbarButtonProps = Readonly<{
+ onClick: () => void;
+ Icon: React.ComponentType>;
+ label?: string;
+}>;
+
+function ToolbarButton({
+ onClick,
+ Icon,
+ label,
+}: ToolbarButtonProps): JSX.Element {
+ const [isSuccess, setIsSuccess] = useState(false);
+ const copyTimeout = useRef(undefined);
+
+ useEffect(() => () => window.clearTimeout(copyTimeout.current), []);
+
+ const handleClick = useCallback(() => {
+ onClick();
+ setIsSuccess(true);
+ copyTimeout.current = window.setTimeout(() => {
+ setIsSuccess(false);
+ }, 1000);
+ }, []);
+
+ return (
+
+ );
+}
diff --git a/website-next/src/components/FlexStyle.ts b/website-next/src/components/FlexStyle.ts
new file mode 100644
index 00000000..b428adda
--- /dev/null
+++ b/website-next/src/components/FlexStyle.ts
@@ -0,0 +1,411 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @format
+ */
+
+import {
+ Align,
+ Display,
+ Edge,
+ FlexDirection,
+ Gutter,
+ Justify,
+ Overflow,
+ PositionType,
+ Wrap,
+ Node as YogaNode,
+} from 'yoga-layout';
+
+export type AlignContent =
+ | 'flex-start'
+ | 'flex-end'
+ | 'center'
+ | 'stretch'
+ | 'space-between'
+ | 'space-around'
+ | 'space-evenly';
+
+export type AlignItems =
+ | 'flex-start'
+ | 'flex-end'
+ | 'center'
+ | 'stretch'
+ | 'baseline';
+
+export type JustifyContent =
+ | 'flex-start'
+ | 'flex-end'
+ | 'center'
+ | 'space-between'
+ | 'space-around'
+ | 'space-evenly';
+
+export type FlexStyle = {
+ alignContent?: AlignContent;
+ alignItems?: AlignItems;
+ alignSelf?: AlignItems;
+ aspectRatio?: number;
+ borderBottomWidth?: number;
+ borderEndWidth?: number;
+ borderLeftWidth?: number;
+ borderRightWidth?: number;
+ borderStartWidth?: number;
+ borderTopWidth?: number;
+ borderWidth?: number;
+ borderInlineWidth?: number;
+ borderBlockWidth?: number;
+ bottom?: number | `${number}%`;
+ display?: 'none' | 'flex';
+ end?: number | `${number}%`;
+ flex?: number;
+ flexBasis?: number | 'auto' | `${number}%`;
+ flexDirection?: 'row' | 'column' | 'row-reverse' | 'column-reverse';
+ rowGap?: number;
+ gap?: number;
+ columnGap?: number;
+ flexGrow?: number;
+ flexShrink?: number;
+ flexWrap?: 'wrap' | 'nowrap' | 'wrap-reverse';
+ height?: number | 'auto' | `${number}%`;
+ justifyContent?: JustifyContent;
+ left?: number | `${number}%`;
+ margin?: number | 'auto' | `${number}%`;
+ marginBottom?: number | 'auto' | `${number}%`;
+ marginEnd?: number | 'auto' | `${number}%`;
+ marginLeft?: number | 'auto' | `${number}%`;
+ marginRight?: number | 'auto' | `${number}%`;
+ marginStart?: number | 'auto' | `${number}%`;
+ marginTop?: number | 'auto' | `${number}%`;
+ marginInline?: number | 'auto' | `${number}%`;
+ marginBlock?: number | 'auto' | `${number}%`;
+ maxHeight?: number | `${number}%`;
+ maxWidth?: number | `${number}%`;
+ minHeight?: number | `${number}%`;
+ minWidth?: number | `${number}%`;
+ overflow?: 'visible' | 'hidden' | 'scroll';
+ padding?: number | `${number}%`;
+ paddingBottom?: number | `${number}%`;
+ paddingEnd?: number | `${number}%`;
+ paddingLeft?: number | `${number}%`;
+ paddingRight?: number | `${number}%`;
+ paddingStart?: number | `${number}%`;
+ paddingTop?: number | `${number}%`;
+ paddingInline?: number | `${number}%`;
+ paddingBlock?: number | `${number}%`;
+ position?: 'absolute' | 'relative' | 'static';
+ right?: number | `${number}%`;
+ start?: number | `${number}%`;
+ top?: number | `${number}%`;
+ insetInline?: number | `${number}%`;
+ insetBlock?: number | `${number}%`;
+ inset?: number | `${number}%`;
+ width?: number | 'auto' | `${number}%`;
+};
+
+export function applyStyle(node: YogaNode, style: FlexStyle = {}): void {
+ for (const key of Object.keys(style)) {
+ try {
+ switch (key) {
+ case 'alignContent':
+ node.setAlignContent(alignContent(style.alignContent));
+ break;
+ case 'alignItems':
+ node.setAlignItems(alignItems(style.alignItems));
+ break;
+ case 'alignSelf':
+ node.setAlignSelf(alignItems(style.alignSelf));
+ break;
+ case 'aspectRatio':
+ node.setAspectRatio(style.aspectRatio);
+ break;
+ case 'borderBottomWidth':
+ node.setBorder(Edge.Bottom, style.borderBottomWidth);
+ break;
+ case 'borderEndWidth':
+ node.setBorder(Edge.End, style.borderEndWidth);
+ break;
+ case 'borderLeftWidth':
+ node.setBorder(Edge.Left, style.borderLeftWidth);
+ break;
+ case 'borderRightWidth':
+ node.setBorder(Edge.Right, style.borderRightWidth);
+ break;
+ case 'borderStartWidth':
+ node.setBorder(Edge.Start, style.borderStartWidth);
+ break;
+ case 'borderTopWidth':
+ node.setBorder(Edge.Top, style.borderTopWidth);
+ break;
+ case 'borderWidth':
+ node.setBorder(Edge.All, style.borderWidth);
+ break;
+ case 'borderInlineWidth':
+ node.setBorder(Edge.Horizontal, style.borderInlineWidth);
+ break;
+ case 'borderBlockWidth':
+ node.setBorder(Edge.Vertical, style.borderBlockWidth);
+ break;
+ case 'bottom':
+ node.setPosition(Edge.Bottom, style.bottom);
+ break;
+ case 'display':
+ node.setDisplay(display(style.display));
+ break;
+ case 'end':
+ node.setPosition(Edge.End, style.end);
+ break;
+ case 'flex':
+ node.setFlex(style.flex);
+ break;
+ case 'flexBasis':
+ node.setFlexBasis(style.flexBasis);
+ break;
+ case 'flexDirection':
+ node.setFlexDirection(flexDirection(style.flexDirection));
+ break;
+ case 'rowGap':
+ node.setGap(Gutter.Row, style.rowGap);
+ break;
+ case 'gap':
+ node.setGap(Gutter.All, style.gap);
+ break;
+ case 'columnGap':
+ node.setGap(Gutter.Column, style.columnGap);
+ break;
+ case 'flexGrow':
+ node.setFlexGrow(style.flexGrow);
+ break;
+ case 'flexShrink':
+ node.setFlexShrink(style.flexShrink);
+ break;
+ case 'flexWrap':
+ node.setFlexWrap(flexWrap(style.flexWrap));
+ break;
+ case 'height':
+ node.setHeight(style.height);
+ break;
+ case 'justifyContent':
+ node.setJustifyContent(justifyContent(style.justifyContent));
+ break;
+ case 'left':
+ node.setPosition(Edge.Left, style.left);
+ break;
+ case 'margin':
+ node.setMargin(Edge.All, style.margin);
+ break;
+ case 'marginBottom':
+ node.setMargin(Edge.Bottom, style.marginBottom);
+ break;
+ case 'marginEnd':
+ node.setMargin(Edge.End, style.marginEnd);
+ break;
+ case 'marginLeft':
+ node.setMargin(Edge.Left, style.marginLeft);
+ break;
+ case 'marginRight':
+ node.setMargin(Edge.Right, style.marginRight);
+ break;
+ case 'marginStart':
+ node.setMargin(Edge.Start, style.marginStart);
+ break;
+ case 'marginTop':
+ node.setMargin(Edge.Top, style.marginTop);
+ break;
+ case 'marginInline':
+ node.setMargin(Edge.Horizontal, style.marginInline);
+ break;
+ case 'marginBlock':
+ node.setMargin(Edge.Vertical, style.marginBlock);
+ break;
+ case 'maxHeight':
+ node.setMaxHeight(style.maxHeight);
+ break;
+ case 'maxWidth':
+ node.setMaxWidth(style.maxWidth);
+ break;
+ case 'minHeight':
+ node.setMinHeight(style.minHeight);
+ break;
+ case 'minWidth':
+ node.setMinWidth(style.minWidth);
+ break;
+ case 'overflow':
+ node.setOverflow(overflow(style.overflow));
+ break;
+ case 'padding':
+ node.setPadding(Edge.All, style.padding);
+ break;
+ case 'paddingBottom':
+ node.setPadding(Edge.Bottom, style.paddingBottom);
+ break;
+ case 'paddingEnd':
+ node.setPadding(Edge.End, style.paddingEnd);
+ break;
+ case 'paddingLeft':
+ node.setPadding(Edge.Left, style.paddingLeft);
+ break;
+ case 'paddingRight':
+ node.setPadding(Edge.Right, style.paddingRight);
+ break;
+ case 'paddingStart':
+ node.setPadding(Edge.Start, style.paddingStart);
+ break;
+ case 'paddingTop':
+ node.setPadding(Edge.Top, style.paddingTop);
+ break;
+ case 'paddingInline':
+ node.setPadding(Edge.Horizontal, style.paddingInline);
+ break;
+ case 'paddingBlock':
+ node.setPadding(Edge.Vertical, style.paddingBlock);
+ break;
+ case 'position':
+ node.setPositionType(position(style.position));
+ break;
+ case 'right':
+ node.setPosition(Edge.Right, style.right);
+ break;
+ case 'start':
+ node.setPosition(Edge.Start, style.start);
+ break;
+ case 'top':
+ node.setPosition(Edge.Top, style.top);
+ break;
+ case 'insetInline':
+ node.setPosition(Edge.Horizontal, style.insetInline);
+ break;
+ case 'insetBlock':
+ node.setPosition(Edge.Vertical, style.insetBlock);
+ break;
+ case 'inset':
+ node.setPosition(Edge.All, style.inset);
+ break;
+ case 'width':
+ node.setWidth(style.width);
+ break;
+ }
+ } catch (e) {
+ // Fail gracefully
+ }
+ }
+}
+
+function alignContent(str?: AlignContent): Align {
+ switch (str) {
+ case 'flex-start':
+ return Align.FlexStart;
+ case 'flex-end':
+ return Align.FlexEnd;
+ case 'center':
+ return Align.Center;
+ case 'stretch':
+ return Align.Stretch;
+ case 'space-between':
+ return Align.SpaceBetween;
+ case 'space-around':
+ return Align.SpaceAround;
+ case 'space-evenly':
+ return Align.SpaceEvenly;
+ }
+ throw new Error(`"${str}" is not a valid value for alignContent`);
+}
+
+function alignItems(str?: AlignItems): Align {
+ switch (str) {
+ case 'flex-start':
+ return Align.FlexStart;
+ case 'flex-end':
+ return Align.FlexEnd;
+ case 'center':
+ return Align.Center;
+ case 'stretch':
+ return Align.Stretch;
+ case 'baseline':
+ return Align.Baseline;
+ }
+ throw new Error(`"${str}" is not a valid value for alignItems`);
+}
+
+function display(str?: 'none' | 'flex'): Display {
+ switch (str) {
+ case 'none':
+ return Display.None;
+ case 'flex':
+ return Display.Flex;
+ }
+ throw new Error(`"${str}" is not a valid value for display`);
+}
+
+function flexDirection(
+ str?: 'row' | 'column' | 'row-reverse' | 'column-reverse',
+): FlexDirection {
+ switch (str) {
+ case 'row':
+ return FlexDirection.Row;
+ case 'column':
+ return FlexDirection.Column;
+ case 'row-reverse':
+ return FlexDirection.RowReverse;
+ case 'column-reverse':
+ return FlexDirection.ColumnReverse;
+ }
+ throw new Error(`"${str}" is not a valid value for flexDirection`);
+}
+
+function flexWrap(str?: 'wrap' | 'nowrap' | 'wrap-reverse'): Wrap {
+ switch (str) {
+ case 'wrap':
+ return Wrap.Wrap;
+ case 'nowrap':
+ return Wrap.NoWrap;
+ case 'wrap-reverse':
+ return Wrap.WrapReverse;
+ }
+ throw new Error(`"${str}" is not a valid value for flexWrap`);
+}
+
+function justifyContent(str?: JustifyContent): Justify {
+ switch (str) {
+ case 'flex-start':
+ return Justify.FlexStart;
+ case 'flex-end':
+ return Justify.FlexEnd;
+ case 'center':
+ return Justify.Center;
+ case 'space-between':
+ return Justify.SpaceBetween;
+ case 'space-around':
+ return Justify.SpaceAround;
+ case 'space-evenly':
+ return Justify.SpaceEvenly;
+ }
+ throw new Error(`"${str}" is not a valid value for justifyContent`);
+}
+
+function overflow(str?: 'visible' | 'hidden' | 'scroll'): Overflow {
+ switch (str) {
+ case 'visible':
+ return Overflow.Visible;
+ case 'hidden':
+ return Overflow.Hidden;
+ case 'scroll':
+ return Overflow.Scroll;
+ }
+ throw new Error(`"${str}" is not a valid value for overflow`);
+}
+
+function position(str?: 'absolute' | 'relative' | 'static'): PositionType {
+ switch (str) {
+ case 'absolute':
+ return PositionType.Absolute;
+ case 'relative':
+ return PositionType.Relative;
+ case 'static':
+ return PositionType.Static;
+ }
+ throw new Error(`"${str}" is not a valid value for position`);
+}
diff --git a/website-next/src/components/LayoutBox.module.css b/website-next/src/components/LayoutBox.module.css
new file mode 100644
index 00000000..df0febef
--- /dev/null
+++ b/website-next/src/components/LayoutBox.module.css
@@ -0,0 +1,68 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+ html[data-theme='light'] {
+ --yg-color-node-depth-0: var(--ifm-color-gray-0);
+ --yg-color-node-depth-1: var(--ifm-color-gray-200);
+ --yg-color-node-depth-2: var(--ifm-color-gray-400);
+ --yg-color-node-depth-3: var(--ifm-color-gray-600);
+ --yg-color-node-depth-4: var(--ifm-color-gray-800);
+
+ --yg-border-node-depth-0: 1px solid var(--ifm-color-gray-200);
+ --yg-border-node-depth-1: 1px solid var(--ifm-color-gray-600);
+ --yg-border-node-depth-2: 1px solid var(--ifm-color-gray-700);
+ --yg-border-node-depth-3: 1px solid var(--ifm-color-gray-800);
+ --yg-border-node-depth-4: 1px solid var(--ifm-color-gray-900);
+}
+
+html[data-theme='dark'] {
+ --yg-color-node-depth-0: var(--ifm-color-gray-900);
+ --yg-color-node-depth-1: var(--ifm-color-gray-800);
+ --yg-color-node-depth-2: var(--ifm-color-gray-700);
+ --yg-color-node-depth-3: var(--ifm-color-gray-600);
+ --yg-color-node-depth-4: var(--ifm-color-gray-500);
+
+ --yg-border-node-depth-0: 1px solid var(--ifm-color-gray-800);
+ --yg-border-node-depth-1: 1px solid var(--ifm-color-gray-700);
+ --yg-border-node-depth-2: 1px solid var(--ifm-color-gray-600);
+ --yg-border-node-depth-3: 1px solid var(--ifm-color-gray-500);
+ --yg-border-node-depth-4: 1px solid var(--ifm-color-gray-400);
+}
+
+.layoutBox {
+ box-sizing: border-box;
+ border-radius: 2px;
+}
+
+.zeroDim {
+ border: 0 !important;
+}
+
+.depthZero {
+ background: var(--yg-color-node-depth-0);
+ border: var(--yg-border-node-depth-0);
+}
+
+.depthOne {
+ background-color: var(--yg-color-node-depth-1);
+ border: var(--yg-border-node-depth-1);
+}
+
+.depthTwo {
+ background-color: var(--yg-color-node-depth-2);
+ border: var(--yg-border-node-depth-2);
+}
+
+.depthThree {
+ background-color: var(--yg-color-node-depth-3);
+ border: var(--yg-border-node-depth-3);
+}
+
+.depthFour {
+ background-color: var(--yg-color-node-depth-4);
+ border: var(--yg-border-node-depth-4);
+}
diff --git a/website-next/src/components/LayoutBox.tsx b/website-next/src/components/LayoutBox.tsx
new file mode 100644
index 00000000..6622dc7b
--- /dev/null
+++ b/website-next/src/components/LayoutBox.tsx
@@ -0,0 +1,56 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @format
+ */
+
+import styles from './LayoutBox.module.css';
+import clsx from 'clsx';
+
+export type LayoutMetrics = {
+ top: number;
+ left: number;
+ width: number;
+ height: number;
+ overflow?: 'visible' | 'hidden' | 'scroll';
+ children?: LayoutMetrics[];
+};
+
+export type Props = Readonly<{
+ metrics: LayoutMetrics;
+ className?: string;
+ depth: number;
+}>;
+
+export default function LayoutBox({metrics, depth, className}: Props) {
+ const {children, ...style} = metrics;
+
+ return (
+
+ {children?.map((child, i) => (
+
+ ))}
+
+ );
+}
diff --git a/website-next/src/components/Playground.module.css b/website-next/src/components/Playground.module.css
new file mode 100644
index 00000000..db398a15
--- /dev/null
+++ b/website-next/src/components/Playground.module.css
@@ -0,0 +1,108 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+html[data-theme='light'] {
+ --yg-color-preview-background: var(--ifm-color-primary-lighter);
+ --yg-color-playground-background: var(--ifm-color-gray-200);
+ --yg-color-editor-border: var(--ifm-color-gray-400);
+}
+
+html[data-theme='dark'] {
+ --yg-color-preview-background: var(--ifm-color-primary-dark);
+ --yg-color-playground-background: var(--ifm-color-background);
+ --yg-color-editor-border: var(--ifm-color-gray-800);
+}
+
+.wrapper {
+ display: flex;
+ justify-content: center;
+ min-width: 900px;
+ width: 100%;
+ padding-block: 16px;
+ background-color: var(--yg-color-playground-background);
+}
+
+.editorColumn {
+ position: relative;
+ flex: 8;
+ min-width: 0;
+}
+
+.playgroundRow {
+ display: flex;
+ flex-direction: row;
+ column-gap: 16px;
+}
+
+.playgroundEditor {
+ font: var(--ifm-code-font-size) / var(--ifm-pre-line-height)
+ var(--ifm-font-family-monospace) !important;
+ direction: ltr;
+ height: calc(var(--yg-playground-height, 400px) - 32px);
+ overflow: scroll;
+}
+
+.playgroundEditor :global(.prism-code) {
+ height: 100%;
+ box-shadow: var(--ifm-global-shadow-lw);
+ border: 1px solid var(--yg-color-editor-border);
+}
+
+.previewColumn {
+ display: flex;
+ flex: 5;
+ height: calc(var(--yg-playground-height, 400px) - 32px);
+ align-items: center;
+ justify-content: center;
+ background-color: var(--yg-color-preview-background);
+ overflow: hidden;
+ border-radius: var(--ifm-pre-border-radius);
+ align-self: flex-start;
+ box-shadow: var(--ifm-global-shadow-lw);
+}
+
+.livePreviewWrapper {
+ box-shadow: var(--ifm-global-shadow-md);
+}
+
+.liveError {
+ align-self: flex-start;
+ font-size: 12px;
+ box-shadow: var(--ifm-global-shadow-lw);
+ background-color:var(--ifm-color-danger-darker);
+ color: white;
+ width: 100%;
+ text-align: center;
+ margin: 10px;
+}
+
+@media (max-width: 996px) {
+ .wrapper {
+ min-width: 100%;
+ }
+
+ .playgroundEditor {
+ height: max-content;
+ overflow: visible;
+ }
+
+ .playgroundRow {
+ flex-direction: column;
+ padding-inline: 5px;
+ }
+
+ .editorColumn {
+ padding: 0;
+ flex: 0 !important;
+ margin-bottom: 10px;
+ }
+
+ .previewColumn {
+ padding: 10px;
+ width: 100%;
+ }
+}
diff --git a/website-next/src/components/Playground.tsx b/website-next/src/components/Playground.tsx
new file mode 100644
index 00000000..0ee4a58d
--- /dev/null
+++ b/website-next/src/components/Playground.tsx
@@ -0,0 +1,165 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @format
+ */
+
+import React, {
+ CSSProperties,
+ Suspense,
+ lazy,
+ useCallback,
+ useEffect,
+ useRef,
+ useState,
+} from 'react';
+
+import {usePrismTheme} from '@docusaurus/theme-common';
+import clsx from 'clsx';
+import nullthrows from 'nullthrows';
+import {LiveProvider, LiveEditor, LivePreview, LiveError} from 'react-live';
+import EditorToolbar from './EditorToolbar';
+
+import type {FlexStyle} from './FlexStyle';
+import type {StyleNode} from './YogaViewer';
+
+import styles from './Playground.module.css';
+
+const defaultCode = `
+
+
+
+
+
+`.trim();
+
+export type Props = Readonly<{
+ code?: string;
+ height?: CSSProperties['height'];
+ autoFocus?: boolean;
+}>;
+
+export default function Playground({code, height, autoFocus}: Props) {
+ const prismTheme = usePrismTheme();
+ const playgroundRef = useRef(null);
+ const [isLoaded, setIsLoaded] = useState(false);
+
+ const LivePreviewWrapper = useCallback(
+ (props: React.ComponentProps<'div'>) => {
+ useEffect(() => {
+ setIsLoaded(true);
+ }, []);
+
+ return ;
+ },
+ [],
+ );
+
+ useEffect(() => {
+ // TODO: This is hacky and relies on being called after some operation
+ // "react-live" does which itself can manipulate global focus
+ if (isLoaded && autoFocus) {
+ const codeElem = playgroundRef?.current?.querySelector('.prism-code');
+ const sel = window.getSelection();
+ if (codeElem != null && sel != null) {
+ sel.selectAllChildren(codeElem);
+ sel.collapseToStart();
+ }
+ }
+ }, [isLoaded, autoFocus]);
+
+ const heightStyle = height
+ ? ({'--yg-playground-height': height} as React.CSSProperties)
+ : undefined;
+
+ const resolvedCode = code ?? defaultCode;
+
+ return (
+
+
+
+
+
+ nullthrows(
+ playgroundRef.current?.querySelector('.prism-code')
+ ?.textContent,
+ ),
+ [],
+ )}
+ />
+
+
+
+
+
+
+
+
+
+ );
+}
+
+type LayoutProps = Readonly<{
+ children: React.ReactNode;
+ config?: {useWebDefaults?: boolean};
+}>;
+
+function Layout({children, config}: LayoutProps) {
+ if (React.Children.count(children) !== 1) {
+ return null;
+ }
+
+ const child = React.Children.only(children);
+ if (!React.isValidElement(child) || child.type !== Node) {
+ return null;
+ }
+
+ const styleNode = styleNodeFromYogaNode(child as unknown as Node);
+
+ return (
+
+
+
+ );
+}
+
+type NodeProps = Readonly<{
+ children: React.ReactNode;
+ style: FlexStyle;
+}>;
+
+class Node extends React.PureComponent {}
+
+function styleNodeFromYogaNode(
+ yogaNode: React.ElementRef,
+): StyleNode {
+ const children: StyleNode[] = [];
+
+ React.Children.forEach(yogaNode.props.children, child => {
+ if (React.isValidElement(child) && child.type === Node) {
+ children.push(styleNodeFromYogaNode(child as unknown as Node));
+ }
+ });
+
+ return {
+ style: yogaNode.props.style,
+ children,
+ };
+}
+
+// Docusaurus SSR does not correctly support top-level await in the import
+// chain
+// 1. https://github.com/facebook/docusaurus/issues/7238
+// 2. https://github.com/facebook/docusaurus/issues/9468
+const LazyYogaViewer = lazy(() => import('./YogaViewer'));
diff --git a/website-next/src/components/Playground/EditValue.module.css b/website-next/src/components/Playground/EditValue.module.css
deleted file mode 100644
index ef110373..00000000
--- a/website-next/src/components/Playground/EditValue.module.css
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-.input {
- width: 100%;
-}
diff --git a/website-next/src/components/Playground/EditValue.tsx b/website-next/src/components/Playground/EditValue.tsx
deleted file mode 100644
index eaf790fd..00000000
--- a/website-next/src/components/Playground/EditValue.tsx
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @format
- */
-
-import React from 'react';
-import YogaEnumSelect from './YogaEnumSelect';
-import YogaPositionEditor from './YogaPositionEditor';
-
-import styles from './EditValue.module.css';
-
-type Props = {
- property: string;
- disabled?: boolean;
- value?: T;
- onChange: (property: string, value: T) => void;
- placeholder?: string;
-};
-
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-export default (props: Props) => {
- if (YogaEnumSelect.availableProperties.indexOf(props.property) > -1) {
- // @ts-ignore
- return ;
- } else if (
- YogaPositionEditor.availableProperties.indexOf(props.property) > -1
- ) {
- // @ts-ignore
- return ;
- } else {
- return (
- props.onChange(props.property, e.target.value)}
- placeholder={props.placeholder || 'undefined'}
- onFocus={e => e.target.select()}
- value={Number.isNaN(props.value) ? '' : props.value}
- />
- );
- }
-};
diff --git a/website-next/src/components/Playground/Editor.module.css b/website-next/src/components/Playground/Editor.module.css
deleted file mode 100644
index 0b5181c9..00000000
--- a/website-next/src/components/Playground/Editor.module.css
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-.editor {
- display: flex;
- flex-direction: column;
- height: 100%;
-}
-
-.editor h2 {
- margin-bottom: 8px;
- margin-top: 20px;
- font-size: 12px;
- font-weight: 700;
- color: var(--ifm-color-content-secondary);
- text-transform: uppercase;
-}
-
-.tabItem {
- overflow-y: auto;
- max-height: 400px;
-}
-
-.editorButtons {
- display: flex;
- margin-top: auto;
- gap: 5px;
-}
diff --git a/website-next/src/components/Playground/Editor.tsx b/website-next/src/components/Playground/Editor.tsx
deleted file mode 100644
index a2d12cdc..00000000
--- a/website-next/src/components/Playground/Editor.tsx
+++ /dev/null
@@ -1,268 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @format
- */
-
-import type {LayoutRecordType} from './LayoutRecord';
-import type {Direction} from 'yoga-layout';
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-import React from 'react';
-import EditValue from './EditValue';
-import styles from './Editor.module.css';
-
-type Props = {
- node: LayoutRecordType;
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- onChangeLayout: (key: string, value: any) => void;
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- onChangeSetting: (key: string, value: any) => void;
- direction: Direction;
- selectedNodeIsRoot: boolean;
- onRemove?: () => void;
- onAdd?: () => void;
-};
-
-export default function Editor(props: Props) {
- const {node, selectedNodeIsRoot} = props;
- const disabled = node == null;
-
- return (
-
-
-
- Direction
-
- Flex Direction
-
-
-
-
-
Basis
-
-
-
-
Grow
-
-
-
-
Shrink
-
-
-
-
- Flex Wrap
-
-
-
- Justify Content
-
-
- Align Items
-
-
- Align Self
-
-
- Align Content
-
-
-
- Width × Height
-
- Max-Width × Max-Height
-
- Min-Width × Min-Height
-
-
- Aspect Ratio
-
-
- {['padding', 'border', 'margin'].map(property => (
-
- ))}
- Position Type
-
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/website-next/src/components/Playground/LayoutRecord.tsx b/website-next/src/components/Playground/LayoutRecord.tsx
deleted file mode 100644
index 0892da1d..00000000
--- a/website-next/src/components/Playground/LayoutRecord.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @format
- */
-
-import {Record, List} from 'immutable';
-import PositionRecord from './PositionRecord';
-import type {PositionRecordType} from './PositionRecord';
-
-import {Align, Justify, FlexDirection, Wrap, PositionType} from 'yoga-layout';
-
-export type LayoutRecordType = ReturnType;
-
-export type LayoutRecordFactory = Record.Factory<{
- width?: number | 'auto';
- height?: number | 'auto';
- minWidth?: number;
- minHeight?: number;
- maxWidth?: number;
- maxHeight?: number;
- justifyContent?: Justify;
- padding: PositionRecordType;
- border: PositionRecordType;
- margin: PositionRecordType;
- position: PositionRecordType;
- positionType: PositionType;
- alignItems?: Align;
- alignSelf?: Align;
- alignContent?: Align;
- flexDirection?: FlexDirection;
- flexBasis?: number | 'auto';
- flexGrow?: number;
- flexShrink?: number;
- flexWrap?: Wrap;
- aspectRatio?: number | 'auto';
- children?: List;
-}>;
-
-const r: LayoutRecordFactory = Record({
- width: 'auto',
- height: 'auto',
- justifyContent: Justify.FlexStart,
- alignItems: Align.Stretch,
- alignSelf: Align.Auto,
- alignContent: Align.Stretch,
- flexDirection: FlexDirection.Row,
- padding: PositionRecord(),
- margin: PositionRecord(),
- border: PositionRecord(),
- position: PositionRecord({
- left: NaN,
- top: NaN,
- right: NaN,
- bottom: NaN,
- }),
- positionType: PositionType.Relative,
- flexWrap: Wrap.NoWrap,
- flexBasis: 'auto',
- flexGrow: 0,
- flexShrink: 1,
- children: List(),
- aspectRatio: 'auto',
- minWidth: NaN,
- maxWidth: NaN,
- minHeight: NaN,
- maxHeight: NaN,
-});
-
-export default r;
diff --git a/website-next/src/components/Playground/Playground.tsx b/website-next/src/components/Playground/Playground.tsx
deleted file mode 100644
index 5cfd2526..00000000
--- a/website-next/src/components/Playground/Playground.tsx
+++ /dev/null
@@ -1,300 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @format
- */
-
-import React, {Component} from 'react';
-import {Direction} from 'yoga-layout';
-import YogaNode from './YogaNode';
-import Editor from './Editor';
-import {List, setIn} from 'immutable';
-import PositionRecord from './PositionRecord';
-import LayoutRecord from './LayoutRecord';
-import Sidebar from './Sidebar';
-import type {LayoutRecordType} from './LayoutRecord';
-import styles from './Playground.module.css';
-import clsx from 'clsx';
-
-type Props = {
- layoutDefinition?: LayoutRecordType;
- direction?: Direction;
- maxDepth?: number;
- maxChildren?: number;
- minChildren?: number;
- selectedNodePath?: Array;
- showGuides?: boolean;
- className?: string;
- height?: string | number;
- persist?: boolean;
- renderSidebar?: (
- layoutDefinition: LayoutRecordType,
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- onChange: () => any,
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- ) => any;
-};
-
-type State = {
- selectedNodePath?: Array;
- layoutDefinition: LayoutRecordType;
- direction: Direction;
-};
-
-function getPath(path: Array): Array {
- return path.reduce((acc, cv) => acc.concat('children', cv), []);
-}
-
-export default class Playground extends Component {
- _containerRef?: HTMLElement;
-
- static defaultProps = {
- layoutDefinition: {
- width: 500,
- height: 500,
- children: [
- {width: 100, height: 100},
- {width: 100, height: 100},
- {width: 100, height: 100},
- ],
- },
- direction: Direction.LTR,
- maxDepth: 3,
- showGuides: true,
- persist: false,
- };
-
- rehydrate = (node: LayoutRecordType): LayoutRecordType => {
- let record = LayoutRecord(node);
- record = record.set('padding', PositionRecord(record.padding));
- record = record.set('border', PositionRecord(record.border));
- record = record.set('margin', PositionRecord(record.margin));
- record = record.set('position', PositionRecord(record.position));
- record = record.set('children', List(record.children.map(this.rehydrate)));
- return record;
- };
-
- state = {
- selectedNodePath: this.props.selectedNodePath,
- layoutDefinition: this.rehydrate(this.props.layoutDefinition),
- direction: this.props.direction,
- };
-
- componentDidMount() {
- document.addEventListener('keydown', this.onKeyDown);
-
- // rehydrate
- if (window.location.search && window.location.search.length > 1) {
- try {
- const restoredState = JSON.parse(
- atob(window.location.search.substr(1)),
- );
- this.setState({layoutDefinition: this.rehydrate(restoredState)});
- } catch (e) {
- window.history.replaceState(
- {},
- null,
- window.location.origin + window.location.pathname,
- );
- }
- }
- }
-
- componentWillUnmount() {
- document.removeEventListener('keydown', this.onKeyDown);
- }
-
- onKeyDown = (e: KeyboardEvent) => {
- if (e.key === 'Escape') {
- this.hideSidePanes();
- }
- };
-
- onMouseDown = (e: React.MouseEvent) => {
- if (e.target === this._containerRef) {
- this.hideSidePanes();
- }
- };
-
- hideSidePanes() {
- if (!this.props.renderSidebar) {
- // only unselect if we don't have an external sidebar, otherwise the
- // sidebar may rely on a certain node to be selected
- this.setState({
- selectedNodePath: null,
- });
- }
- }
-
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- onChangeLayout = (key: string, value: any) => {
- const {selectedNodePath} = this.state;
- if (selectedNodePath) {
- this.modifyAtPath([...getPath(selectedNodePath), key], value);
- }
- };
-
- onRemove = () => {
- const {selectedNodePath, layoutDefinition} = this.state;
- if (selectedNodePath) {
- const index = selectedNodePath.pop();
- const path = getPath(selectedNodePath).concat('children');
- // @ts-ignore
- const updatedChildren = layoutDefinition.getIn(path).delete(index);
- this.modifyAtPath(path, updatedChildren);
- this.setState({selectedNodePath: null});
- }
- };
-
- onAdd = () => {
- const {selectedNodePath, layoutDefinition} = this.state;
- if (selectedNodePath) {
- const path = getPath(selectedNodePath).concat('children');
- const updatedChildren = layoutDefinition
- .getIn(path)
- // @ts-ignore
- .push(LayoutRecord({width: 100, height: 100}));
- this.modifyAtPath(path, updatedChildren);
- }
- };
-
- modifyAtPath(
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- path: Array,
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- value: any,
- selectedNodePath: Array = this.state.selectedNodePath,
- ) {
- const layoutDefinition = setIn(this.state.layoutDefinition, path, value);
- this.setState({
- layoutDefinition,
- selectedNodePath,
- });
-
- if (this.props.persist) {
- window.history.replaceState(
- {},
- null,
- window.location.origin +
- window.location.pathname +
- '?' +
- this.getHash(layoutDefinition),
- );
- }
- }
-
- getHash = (
- layoutDefinition: LayoutRecordType = this.state.layoutDefinition,
- ): string =>
- btoa(JSON.stringify(this.removeUnchangedProperties(layoutDefinition)));
-
- removeUnchangedProperties = (
- node: LayoutRecordType,
- ): {children?: unknown} => {
- const untouchedLayout = LayoutRecord({});
- const untouchedPosition = PositionRecord({});
- const result: {children?: unknown} = {};
- if (!node.equals(untouchedLayout)) {
- Object.keys(node.toJS()).forEach(key => {
- if (key === 'children' && node.children.size > 0) {
- result.children = node.children
- .toJSON()
- .map(this.removeUnchangedProperties);
- } else if (
- node[key] instanceof PositionRecord &&
- !node[key].equals(untouchedPosition)
- ) {
- result[key] = {};
- Object.keys(untouchedPosition.toJS()).forEach(position => {
- if (node[key][position] !== untouchedPosition[position]) {
- result[key][position] = node[key][position];
- }
- });
- } else if (node[key] !== untouchedLayout[key]) {
- result[key] = node[key];
- }
- });
- }
- return result;
- };
-
- getChildrenCountForSelectedPath = (): number => {
- const selectedNode: LayoutRecordType = (
- this.state.selectedNodePath || []
- ).reduce(
- (node: LayoutRecordType, cv) => node.children.get(cv),
- this.state.layoutDefinition,
- );
- return selectedNode ? selectedNode.children.size : 0;
- };
-
- render() {
- const {layoutDefinition, selectedNodePath, direction} = this.state;
- const {height} = this.props;
-
- // @ts-ignore
- const selectedNode: LayoutRecordType | null = selectedNodePath
- ? layoutDefinition.getIn(getPath(selectedNodePath))
- : null;
-
- const playground = (
- {
- this._containerRef = ref;
- }}>
- this.setState({selectedNodePath})}
- onDoubleClick={this.onAdd}
- direction={direction}
- showGuides={this.props.showGuides}
- />
-
- );
-
- const sidebarContent = this.props.renderSidebar
- ? this.props.renderSidebar(
- // @ts-ignore
- layoutDefinition.getIn(getPath(selectedNodePath)),
- this.onChangeLayout,
- )
- : this.state.selectedNodePath != null && (
-
- // @ts-ignore
- this.setState({[key]: value})
- }
- direction={direction}
- onRemove={
- selectedNodePath && selectedNodePath.length > 0
- ? this.onRemove
- : undefined
- }
- onAdd={
- selectedNodePath && selectedNodePath.length < this.props.maxDepth
- ? this.onAdd
- : undefined
- }
- />
- );
-
- return (
-
- {playground}
- {sidebarContent}
-
- );
- }
-}
diff --git a/website-next/src/components/Playground/PositionGuide.css b/website-next/src/components/Playground/PositionGuide.css
deleted file mode 100644
index fcb11eac..00000000
--- a/website-next/src/components/Playground/PositionGuide.css
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
- .PositionGuide {
- position: absolute;
- pointer-events: none;
- display: flex;
- align-items: center;
- justify-content: center;
- font-size: 10px;
- user-select: none;
-}
diff --git a/website-next/src/components/Playground/PositionGuide.tsx b/website-next/src/components/Playground/PositionGuide.tsx
deleted file mode 100644
index b46c105f..00000000
--- a/website-next/src/components/Playground/PositionGuide.tsx
+++ /dev/null
@@ -1,159 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @format
- */
-
-import React, {Component} from 'react';
-import PositionRecord from './PositionRecord';
-import type {PositionRecordType} from './PositionRecord';
-import './PositionGuide.css';
-
-type Props = {
- inset?: boolean;
- reverse?: boolean;
- position: PositionRecordType;
- offset: PositionRecordType;
- color: string;
-};
-
-export default class PositionGuide extends Component {
- static defaultProps = {
- offset: PositionRecord({}),
- };
-
- render() {
- const {position, offset, inset, color, reverse} = this.props;
- let {top, left, right, bottom} = position;
- let {top: oTop, left: oLeft, right: oRight, bottom: oBottom} = offset;
-
- if (
- typeof top !== 'number' ||
- typeof left !== 'number' ||
- typeof right !== 'number' ||
- typeof bottom !== 'number' ||
- typeof oTop !== 'number' ||
- typeof oLeft !== 'number' ||
- typeof oRight !== 'number' ||
- typeof oBottom !== 'number'
- ) {
- return null;
- }
- if (reverse) {
- let temp1 = left;
- left = right;
- right = temp1;
- temp1 = oLeft;
- oLeft = oRight;
- oRight = temp1;
- }
-
- if (!top) {
- top = 0;
- }
- if (!left) {
- left = 0;
- }
- if (!right) {
- right = 0;
- }
- if (!bottom) {
- bottom = 0;
- }
- if (!oTop) {
- oTop = 0;
- }
- if (!oLeft) {
- oLeft = 0;
- }
- if (!oRight) {
- oRight = 0;
- }
- if (!oBottom) {
- oBottom = 0;
- }
-
- if (!inset) {
- if (typeof top === 'number' && typeof bottom === 'number') {
- if (top < 0) {
- bottom -= top;
- top = 0;
- }
- if (bottom < 0) {
- top -= bottom;
- bottom = 0;
- }
- }
- if (left < 0) {
- right -= left;
- left = 0;
- }
- if (right < 0) {
- left -= right;
- right = 0;
- }
- }
-
- return [
- top !== 0 ? (
-
- {top}
-
- ) : null,
- left !== 0 ? (
-
- {left}
-
- ) : null,
- right !== 0 ? (
-
- {right}
-
- ) : null,
- bottom !== 0 ? (
-
- {bottom}
-
- ) : null,
- ];
- }
-}
diff --git a/website-next/src/components/Playground/PositionRecord.tsx b/website-next/src/components/Playground/PositionRecord.tsx
deleted file mode 100644
index 439294e7..00000000
--- a/website-next/src/components/Playground/PositionRecord.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @format
- */
-
-import {Record} from 'immutable';
-
-export type PositionRecordType = ReturnType;
-
-export type PositionRecordFactory = Record.Factory<{
- top: string | number;
- right: string | number;
- bottom: string | number;
- left: string | number;
-}>;
-
-const r: PositionRecordFactory = Record({
- top: 0,
- right: 0,
- bottom: 0,
- left: 0,
-});
-
-export default r;
diff --git a/website-next/src/components/Playground/Sidebar.module.css b/website-next/src/components/Playground/Sidebar.module.css
deleted file mode 100644
index a6bfef81..00000000
--- a/website-next/src/components/Playground/Sidebar.module.css
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
- .placeholder {
- color: var(--ifm-color-content-secondary);
- margin: auto;
- text-align: center;
- }
-
- .sidebar {
- z-index: 3;
- width: 320px;
- background: var(--ifm-background-surface-color);
- display: flex;
- flex-direction: column;
- padding: 20px;
-}
diff --git a/website-next/src/components/Playground/Sidebar.tsx b/website-next/src/components/Playground/Sidebar.tsx
deleted file mode 100644
index fe5943e7..00000000
--- a/website-next/src/components/Playground/Sidebar.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @format
- */
-
-import React, {Component} from 'react';
-import styles from './Sidebar.module.css';
-import clsx from 'clsx';
-
-type Props = {
- width?: number;
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- children: any;
-};
-
-function PlaceholderContent() {
- return (
-
-
Select a node to edit its properties
-
- );
-}
-
-export default class Sidebar extends Component {
- render() {
- return (
-
- {this.props.children ||
}
-
- );
- }
-}
diff --git a/website-next/src/components/Playground/YogaEnumSelect.module.css b/website-next/src/components/Playground/YogaEnumSelect.module.css
deleted file mode 100644
index 18fb7a2a..00000000
--- a/website-next/src/components/Playground/YogaEnumSelect.module.css
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-.buttonGroup {
- display: flex;
-}
-
-.button {
- flex: 1;
-}
-
-.select {
- appearance: none;
- width: 100%;
- padding: calc(var(--ifm-button-padding-vertical) * 0.8) calc(var(--ifm-button-padding-horizontal) * 0.8);
- background: transparent;
- color: var(--ifm-font-color-base);
- border: var(--ifm-button-border-width) solid var(--ifm-color-secondary);
- border-radius: var(--ifm-button-border-radius);
- font-size: calc(0.875rem * 0.8);
- font-weight: var(--ifm-button-font-weight);
- line-height: 1.5;
-}
diff --git a/website-next/src/components/Playground/YogaEnumSelect.tsx b/website-next/src/components/Playground/YogaEnumSelect.tsx
deleted file mode 100644
index dc9829ea..00000000
--- a/website-next/src/components/Playground/YogaEnumSelect.tsx
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @format
- */
-
-import React, {Component} from 'react';
-import clsx from 'clsx';
-import Yoga from 'yoga-layout';
-
-import styles from './YogaEnumSelect.module.css';
-
-const PROPERTY_LOOKUP = {
- flexDirection: 'FLEX_DIRECTION',
- direction: 'DIRECTION',
- justifyContent: 'JUSTIFY',
- alignSelf: 'ALIGN',
- alignContent: 'ALIGN',
- alignItems: 'ALIGN',
- positionType: 'POSITION_TYPE',
- flexWrap: 'WRAP',
-};
-
-type Property = keyof typeof PROPERTY_LOOKUP;
-
-type Props = {
- property: Property;
- disabled?: boolean;
- value: string | number;
- onChange: (property: Property, value: number) => void;
-};
-
-export default class YogaEnumSelect extends Component {
- static availableProperties = Object.keys(PROPERTY_LOOKUP);
-
- values: Array<{key: string; value: number}>;
-
- constructor(props: Props) {
- super(props);
-
- const property = PROPERTY_LOOKUP[props.property];
-
- this.values = Object.keys(Yoga)
- .map(key => ({key, value: Yoga[key]}))
- .filter(
- ({key}) => key.startsWith(property) && key !== `${property}_COUNT`,
- );
- }
-
- handleMenuClick = ({key}: {key: string}) => {
- this.props.onChange(this.props.property, Yoga[key]);
- };
-
- getTitle = (property: string, key: string): string => {
- const replacer = new RegExp(`^${property}_`);
- return key.replace(replacer, '').replace('_', ' ').toLowerCase();
- };
-
- render() {
- const property = PROPERTY_LOOKUP[this.props.property];
- const selected = this.values.find(({value}) => value === this.props.value);
-
- return this.values.length > 3 ? (
-
- ) : (
-
- {this.values.map(({key, value}) => (
-
- ))}
-
- );
- }
-}
diff --git a/website-next/src/components/Playground/YogaNode.css b/website-next/src/components/Playground/YogaNode.css
deleted file mode 100644
index 76873b96..00000000
--- a/website-next/src/components/Playground/YogaNode.css
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-.YogaNode {
- box-sizing: border-box;
- background: var(--ifm-background-surface-color);
- position: absolute;
- transform: scale(1);
- box-shadow: var(--ifm-global-shadow-lw);
- cursor: pointer;
- animation: yoga-node-fadein 200ms ease;
-}
-
-@keyframes yoga-node-fadein {
- 0% {
- transform: scale(1.05);
- opacity: 0%;
- }
-
- 100% {
- transform: scale(1.0);
- opacity: 100%;
- }
-}
-
-.YogaNode.hover:not(.focused) {
- background-color: var(--ifm-color-emphasis-100);
-}
-
-.YogaNode .YogaNode {
- background: rgba(255, 255, 255, 0.7);
-}
-
-.YogaNode .YogaNode.hover{
- background: rgba(240, 255, 249, 0.7);
-}
-
-.YogaNode.focused {
- outline: 2px solid var(--ifm-color-primary);
- z-index: 2;
-}
-
-.YogaNode.invisible {
- transform: scale(0);
-}
-
-.YogaNode .label {
- user-select: none;
- pointer-events: none;
- position: absolute;
- left: 0;
- bottom: 0;
- right: 0;
- top: 0;
- display: flex;
- align-items: center;
- justify-content: center;
- font-size: 20px;
- font-weight: 300;
- letter-spacing: 1px;
-}
diff --git a/website-next/src/components/Playground/YogaNode.tsx b/website-next/src/components/Playground/YogaNode.tsx
deleted file mode 100644
index 513678fa..00000000
--- a/website-next/src/components/Playground/YogaNode.tsx
+++ /dev/null
@@ -1,307 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @format
- */
-
-import React, {Component} from 'react';
-import Yoga from 'yoga-layout';
-import PositionGuide from './PositionGuide';
-import PositionRecord from './PositionRecord';
-import LayoutRecord from './LayoutRecord';
-import type {LayoutRecordType} from './LayoutRecord';
-import {Direction, Display, Edge, Node, Wrap} from 'yoga-layout';
-import clsx from 'clsx';
-
-import './YogaNode.css';
-
-type ComputedLayout = {
- left: number;
- top: number;
- width: number;
- height: number;
- children: Array;
- node: Node;
-};
-
-type Props = {
- layoutDefinition: LayoutRecordType;
- className?: string;
- computedLayout?: ComputedLayout;
- path: Array;
- selectedNodePath?: Array;
- direction?: Direction;
- label?: string;
- showGuides: boolean;
- onClick?: (path: Array) => void;
- onDoubleClick?: (path: Array) => void;
-};
-
-type State = {
- visible?: boolean;
- hovered: boolean;
-};
-
-export default class YogaNode extends Component {
- node: Node;
- _ref: HTMLDivElement;
-
- static defaultProps = {
- path: [],
- label: 'root',
- showGuides: true,
- };
-
- state = {
- hovered: false,
- visible: false,
- };
- computedLayout?: ComputedLayout;
- rootNode?: Node;
-
- constructor(props: Props) {
- super(props);
- if (!props.computedLayout) {
- // is root node
- this.calculateLayout(props);
- this.state = {
- hovered: false,
- visible: !props.computedLayout,
- };
- }
- }
-
- componentDidMount() {
- setTimeout(() => this.setState({visible: true}), 200);
- }
-
- componentWillReceiveProps(nextProps: Props) {
- if (
- !nextProps.computedLayout &&
- (!this.props.layoutDefinition.equals(nextProps.layoutDefinition) ||
- this.props.direction !== nextProps.direction)
- ) {
- // is root node and the layout definition or settings changed
- this.calculateLayout(nextProps);
- }
- }
-
- componentWillUnmount() {
- if (this.rootNode) {
- this.rootNode.freeRecursive();
- }
- }
-
- onMouseMove = e => {
- this.setState({hovered: e.target === this._ref});
- };
-
- calculateLayout(props: Props) {
- const root = this.createYogaNodes(props.layoutDefinition);
- root.calculateLayout(
- props.layoutDefinition.width,
- props.layoutDefinition.height,
- props.direction,
- );
- this.computedLayout = this.getComputedLayout(root);
- this.rootNode = root;
- }
-
- createYogaNodes = (layoutDefinition: LayoutRecordType): Node => {
- const root = Yoga.Node.create();
-
- const defaultLayout = LayoutRecord({});
- [
- 'width',
- 'height',
- 'minWidth',
- 'maxWidth',
- 'minHeight',
- 'maxHeight',
- 'justifyContent',
- 'alignItems',
- 'alignSelf',
- 'alignContent',
- 'flexGrow',
- 'flexShrink',
- 'positionType',
- 'aspectRatio',
- 'flexWrap',
- 'flexDirection',
- ].forEach(key => {
- try {
- const value =
- layoutDefinition[key] === ''
- ? defaultLayout[key]
- : layoutDefinition[key];
- root[`set${key[0].toUpperCase()}${key.substr(1)}`](value);
- } catch (e) {
- // Do nothing on failure
- }
- });
-
- ['padding', 'margin', 'position', 'border'].forEach(key => {
- ['top', 'right', 'bottom', 'left'].forEach(direction => {
- try {
- root[`set${key[0].toUpperCase()}${key.substr(1)}`](
- Yoga[`EDGE_${direction.toUpperCase()}`],
- layoutDefinition[key][direction],
- );
- } catch (e) {
- // Do nothing on failure
- }
- });
- });
-
- root.setDisplay(Display.Flex);
-
- (layoutDefinition.children || [])
- .map(this.createYogaNodes)
- .forEach((node, i) => {
- root.insertChild(node, i);
- });
- return root;
- };
-
- getComputedLayout = (node: Node): ComputedLayout => {
- return {
- ...node.getComputedLayout(),
- node,
- children: Array(node.getChildCount()).map((_, i) =>
- this.getComputedLayout(node.getChild(i)),
- ),
- };
- };
-
- onClick = (e: React.MouseEvent) => {
- const {onClick} = this.props;
- if (onClick) {
- e.stopPropagation();
- onClick(this.props.path);
- }
- };
-
- onDoubleClick = (e: React.MouseEvent) => {
- const {onDoubleClick} = this.props;
- if (onDoubleClick) {
- e.stopPropagation();
- onDoubleClick(this.props.path);
- }
- };
-
- onMouseLeave = (_e: React.MouseEvent) => this.setState({hovered: false});
-
- showPositionGuides({node}: ComputedLayout) {
- const padding = PositionRecord({
- top: node.getComputedPadding(Edge.Top),
- left: node.getComputedPadding(Edge.Left),
- right: node.getComputedPadding(Edge.Right),
- bottom: node.getComputedPadding(Edge.Bottom),
- });
- const border = PositionRecord({
- top: node.getComputedBorder(Edge.Top),
- left: node.getComputedBorder(Edge.Left),
- right: node.getComputedBorder(Edge.Right),
- bottom: node.getComputedBorder(Edge.Bottom),
- });
- const margin = PositionRecord({
- top: node.getComputedMargin(Edge.Top),
- left: node.getComputedMargin(Edge.Left),
- right: node.getComputedMargin(Edge.Right),
- bottom: node.getComputedMargin(Edge.Bottom),
- });
- const position = PositionRecord({
- top: node.getPosition(Edge.Top).value,
- left: node.getPosition(Edge.Left).value,
- right: node.getPosition(Edge.Right).value,
- bottom: node.getPosition(Edge.Bottom).value,
- });
-
- return [
- ,
- ,
- ,
- ,
- ];
- }
-
- render() {
- const {layoutDefinition, className, path, selectedNodePath, label} =
- this.props;
-
- const computedLayout: ComputedLayout =
- this.props.computedLayout || this.computedLayout;
- const {left, top, width, height, children} = computedLayout;
-
- const isFocused = selectedNodePath && selectedNodePath.length === 0;
-
- return (
- {
- this._ref = ref;
- }}
- onClick={this.onClick}>
- {label &&
{label}
}
- {isFocused &&
- this.props.showGuides &&
- this.showPositionGuides(computedLayout)}
- {(children || []).map((child: ComputedLayout, i) => (
-
0 &&
- selectedNodePath[0] === i
- ? selectedNodePath.slice(1)
- : null
- }
- path={path.concat(i)}
- onClick={this.props.onClick}
- onDoubleClick={this.props.onDoubleClick}
- showGuides={this.props.showGuides}
- />
- ))}
-
- );
- }
-}
diff --git a/website-next/src/components/Playground/YogaPositionEditor.css b/website-next/src/components/Playground/YogaPositionEditor.css
deleted file mode 100644
index 0280e953..00000000
--- a/website-next/src/components/Playground/YogaPositionEditor.css
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
- .YogaPositionEditor {
- text-align: center;
- margin-top: 20px;
- margin-bottom: 20px;
- width: 60%;
- margin-left: auto;
- margin-right: auto;
-}
-
-.YogaPositionEditor input {
- width: 55px;
- text-align: center;
-}
-
-.YogaPositionEditorRow {
- display: flex;
- justify-content: space-between;
- align-items: center;
- flex-direction: row;
- font-size: 12px;
- font-weight: 700;
- color: #444950;
-}
diff --git a/website-next/src/components/Playground/YogaPositionEditor.tsx b/website-next/src/components/Playground/YogaPositionEditor.tsx
deleted file mode 100644
index 39eb87db..00000000
--- a/website-next/src/components/Playground/YogaPositionEditor.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @format
- */
-
-import React, {Component} from 'react';
-import PositionRecord from './PositionRecord';
-import type {PositionRecordType} from './PositionRecord';
-import './YogaPositionEditor.css';
-
-type Property = 'position' | 'margin' | 'padding' | 'border';
-
-type Props = {
- value: PositionRecordType;
- property: Property;
- disabled?: boolean;
- onChange: (property: Property, value: PositionRecordType) => void;
-};
-
-export default class YogaPositionEditor extends Component {
- static availableProperties = ['position', 'margin', 'padding', 'border'];
-
- static defaultProps = {
- value: PositionRecord(),
- };
-
- render() {
- const {onChange, value, property, disabled} = this.props;
- return (
-
- );
- }
-}
diff --git a/website-next/src/components/YogaViewer.tsx b/website-next/src/components/YogaViewer.tsx
new file mode 100644
index 00000000..534c22ee
--- /dev/null
+++ b/website-next/src/components/YogaViewer.tsx
@@ -0,0 +1,114 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @format
+ */
+
+import React, {useMemo} from 'react';
+import Yoga, {Direction, Overflow, Node as YogaNode} from 'yoga-layout';
+import {FlexStyle, applyStyle} from './FlexStyle';
+import LayoutBox from './LayoutBox';
+
+import type {LayoutMetrics} from './LayoutBox';
+
+export type Props = Readonly<{
+ rootNode: StyleNode;
+ width?: number;
+ height?: number;
+ className?: string;
+ useWebDefaults?: boolean;
+}>;
+
+export type StyleNode = {
+ style?: FlexStyle;
+ children?: StyleNode[];
+};
+
+export default function YogaViewer({
+ rootNode,
+ width,
+ height,
+ className,
+ useWebDefaults,
+}: Props) {
+ const layout = useMemo(
+ () => layoutStyleTree(rootNode, width, height, {useWebDefaults}),
+ [rootNode, width, height],
+ );
+ return ;
+}
+
+type LayoutConfig = Readonly<{
+ useWebDefaults?: boolean;
+}>;
+
+// This is not efficient and not a good real-world-example for the best way to use Yoga, but sufficient for a playground
+function layoutStyleTree(
+ node: StyleNode,
+ rootWidth: number | undefined,
+ rootHeight: number | undefined,
+ layoutConfig: LayoutConfig,
+): LayoutMetrics {
+ const root = yogaNodeFromStyleNode(node, layoutConfig);
+ root.calculateLayout(rootWidth, rootHeight, Direction.LTR);
+
+ const layoutMetrics = metricsFromYogaNode(root);
+ layoutMetrics.overflow = node.style?.overflow;
+
+ root.freeRecursive();
+ return layoutMetrics;
+}
+
+function yogaNodeFromStyleNode(
+ styleNode: StyleNode,
+ layoutConfig: LayoutConfig,
+): YogaNode {
+ const node = Yoga.Node.create(
+ layoutConfig.useWebDefaults ? webDefaultsConfig : undefined,
+ );
+ applyStyle(node, styleNode.style);
+
+ for (const child of styleNode.children ?? []) {
+ node.insertChild(
+ yogaNodeFromStyleNode(child, layoutConfig),
+ node.getChildCount(),
+ );
+ }
+
+ return node;
+}
+
+const webDefaultsConfig = Yoga.Config.create();
+webDefaultsConfig.setUseWebDefaults(true);
+
+function metricsFromYogaNode(node: YogaNode): LayoutMetrics {
+ const children: LayoutMetrics[] = [];
+ for (let i = 0; i < node.getChildCount(); i++) {
+ children.push(metricsFromYogaNode(node.getChild(i)));
+ }
+
+ // Offset is relative to parent padding box, so we need to subtract the extra
+ // border we show as part of the box.
+ const parentBorderThickness = 1;
+
+ return {
+ top: node.getComputedTop() - parentBorderThickness,
+ left: node.getComputedLeft() - parentBorderThickness,
+ width: node.getComputedWidth(),
+ height: node.getComputedHeight(),
+ overflow: (() => {
+ switch (node.getOverflow()) {
+ case Overflow.Hidden:
+ return 'hidden';
+ case Overflow.Scroll:
+ return 'scroll';
+ case Overflow.Visible:
+ return 'visible';
+ }
+ })(),
+ children,
+ };
+}
diff --git a/website-next/src/pages/index.module.css b/website-next/src/pages/index.module.css
index 406b93b9..6b464571 100644
--- a/website-next/src/pages/index.module.css
+++ b/website-next/src/pages/index.module.css
@@ -5,156 +5,30 @@
* LICENSE file in the root directory of this source tree.
*/
-/**
- * CSS files with the .module.css suffix will be treated as CSS modules
- * and scoped locally.
- */
-
- html[data-theme='light'] {
- --yg-color-playound-background: var(--ifm-color-gray-200);
- }
-
- html[data-theme='dark'] {
- --yg-color-playound-background: var(--ifm-color-background);
- }
-
.heroBanner {
- flex: 1;
- display: flex;
- flex-direction: row;
justify-content: center;
-}
+ }
.heroRow {
align-items: center;
-}
-
-.blueprintColumn {
- display: flex;
- align-items: center;
justify-content: center;
}
-@media (max-width: 996px) {
- .blueprintColumn {
- display: none;
- }
-}
-
-.blueprint {
- --blueprint-gap: 5%;
- --fadein-duration: 500ms;
- box-shadow: var(--ifm-global-shadow-tl);
- background-color: var(--ifm-background-surface-color);
- border-radius: 0.5rem;
-}
-
-
-.blueprintContainer {
- position: relative;
- width: var(--ifm-col-width);
- aspect-ratio: 1.0;
- background-color: var(--ifm-color-primary-lighter);
- box-shadow: var(--ifm-global-shadow-lw);
-}
-
-.blueprintAvatar {
- position: absolute;
- left: 0;
- top: 0;
- margin: var(--blueprint-gap) 0 0 var(--blueprint-gap);
- width: calc(25% - (var(--blueprint-gap)));
- height: calc(25% - (var(--blueprint-gap)));
- animation: avatar-fadein var(--fadein-duration) ease;
-}
-
-@keyframes avatar-fadein {
- 0% {
- transform: scale(1.1);
- opacity: 0%;
- }
-
- 50% {
- transform: scale(1.0);
- opacity: 100%;
- }
-}
-
-.blueprintTitle {
- position: absolute;
- left: 25%;
- top: 0;
- right: 10%;
- margin: var(--blueprint-gap) var(--blueprint-gap) 0 var(--blueprint-gap);
- height: calc(10% - (var(--blueprint-gap)));
- animation: title-fadein var(--fadein-duration) ease;
-}
-
-.blueprintSubtitle {
- position: absolute;
- left: 25%;
- top: 10%;
- right: 30%;
- margin: var(--blueprint-gap);
- height: calc(10% - (var(--blueprint-gap)));
- animation: title-fadein var(--fadein-duration) ease;
-}
-
-@keyframes title-fadein {
- 0% {
- transform: scale(1.1);
- opacity: 0%;
- }
-
- 25% {
- transform: scale(1.1);
- opacity: 0%;
- }
-
- 75% {
- transform: scale(1.0);
- opacity: 100%;
- }
-}
-
-.blueprintContent {
- box-sizing: border-box;
- position: absolute;
- bottom: 0;
- margin: var(--blueprint-gap);
- width: calc(100% - (var(--blueprint-gap) * 2));
- height: calc(75% - (var(--blueprint-gap) * 2));
- animation: content-fadein var(--fadein-duration) ease;
-}
-
-@keyframes content-fadein {
- 0% {
- transform: scale(1.1);
- opacity: 0%;
- }
-
- 50% {
- transform: scale(1.1);
- opacity: 0%;
- }
-
- 100% {
- transform: scale(1.0);
- opacity: 100%;
- }
-}
-
-.playgroundSection {
- display: flex;
- flex-direction: column;
- justify-content: center;
- height: 600px;
- width: 100%;
- background-color: var(--yg-color-playound-background);
-}
+.heroLogo {
+ width: 200px;
+ height: 200px;
+ }
@media (max-width: 996px) {
- .playgroundSection {
+ .heroLogo {
display: none;
- }
+ }
+
+ .playgroundSection :global(.prism-code) {
+ display: none;
+ }
+}
+
+.bg {
+ background-color: var(--yg-color-playground-background);
}
diff --git a/website-next/src/pages/index.tsx b/website-next/src/pages/index.tsx
index 382adeae..ce2e555d 100644
--- a/website-next/src/pages/index.tsx
+++ b/website-next/src/pages/index.tsx
@@ -5,83 +5,77 @@
* LICENSE file in the root directory of this source tree.
*/
-import React, {Suspense} from 'react';
+import React from 'react';
import clsx from 'clsx';
import Link from '@docusaurus/Link';
import Layout from '@theme/Layout';
-import BrowserOnly from '@docusaurus/BrowserOnly';
import styles from './index.module.css';
+import YogaLogo from '../../static/img/logo.svg';
+import Playground from '../components/Playground';
+
function HeroSection() {
return (
-
Yoga Layout
+
Yoga
- A portable and perfomant layout engine targeting web standards
+ A portable layout engine targeting web standards
Learn more
-
);
}
-const LazyPlayground = React.lazy(
- () => import('../components/Playground/Playground'),
-);
-
-// Docusaurus SSR does not correctly support top-level await
-// 1. https://github.com/facebook/docusaurus/issues/7238
-// 2. https://github.com/facebook/docusaurus/issues/9468
-function BrowserOnlyPlayground() {
- return (
-
- {() => (
-
-
-
- )}
-
- );
-}
+const playgroundCode = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`.trim();
function PlaygroundSection() {
return (
-
-
-
+
);
}
export default function Home(): JSX.Element {
return (
-
+
diff --git a/website-next/src/components/Playground/Playground.module.css b/website-next/src/pages/playground.module.css
similarity index 62%
rename from website-next/src/components/Playground/Playground.module.css
rename to website-next/src/pages/playground.module.css
index c8c7c3dc..0f352d64 100644
--- a/website-next/src/components/Playground/Playground.module.css
+++ b/website-next/src/pages/playground.module.css
@@ -5,27 +5,19 @@
* LICENSE file in the root directory of this source tree.
*/
- html[data-theme='light'] {
+html[data-theme='light'] {
--yg-color-playound-background: var(--ifm-color-gray-200);
- }
+}
- html[data-theme='dark'] {
+html[data-theme='dark'] {
--yg-color-playound-background: var(--ifm-color-background);
- }
-
-
-.container {
- display: flex;
- flex-direction: row;
- background-color: var(--yg-color-playound-background);
- min-height: 600px;
- padding: 10px;
}
-.playground {
+.playgroundContainer {
+ display: flex;
flex: 1;
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-items: center;
+}
+
+.bg {
+ background-color: var(--yg-color-playound-background);
}
diff --git a/website-next/src/pages/playground.tsx b/website-next/src/pages/playground.tsx
new file mode 100644
index 00000000..3237148f
--- /dev/null
+++ b/website-next/src/pages/playground.tsx
@@ -0,0 +1,27 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import React from 'react';
+import Layout from '@theme/Layout';
+import {useLocation} from '@docusaurus/router';
+
+import Playground from '../components/Playground';
+
+import styles from './playground.module.css';
+
+export default function PlaygroundPage(): JSX.Element {
+ const params = new URLSearchParams(useLocation().search);
+ const codeParam = params.get('code');
+ const code = codeParam ? atob(codeParam) : undefined;
+
+ return (
+ // @ts-ignore missing prop for `wrapperClassName`
+
+
+
+ );
+}
diff --git a/website-next/static/img/copy.svg b/website-next/static/img/copy.svg
new file mode 100644
index 00000000..c855d6b6
--- /dev/null
+++ b/website-next/static/img/copy.svg
@@ -0,0 +1,3 @@
+
diff --git a/website-next/static/img/link.svg b/website-next/static/img/link.svg
new file mode 100644
index 00000000..2cc98388
--- /dev/null
+++ b/website-next/static/img/link.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/website-next/tsconfig.json b/website-next/tsconfig.json
index 5b7d6bd4..1f199040 100644
--- a/website-next/tsconfig.json
+++ b/website-next/tsconfig.json
@@ -3,9 +3,8 @@
"extends": "@docusaurus/tsconfig",
"compilerOptions": {
"baseUrl": ".",
- "target": "esnext",
- "module": "esnext",
- "moduleResolution": "bundler",
- "allowImportingTsExtensions": true
+ "target": "es2022",
+ "allowImportingTsExtensions": true,
+ "strict": true
}
}
diff --git a/yarn.lock b/yarn.lock
index 562dea86..09294c32 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -162,12 +162,12 @@
"@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3"
chokidar "^3.4.0"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.8.3":
- version "7.22.13"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e"
- integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.8.3":
+ version "7.23.5"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244"
+ integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==
dependencies:
- "@babel/highlight" "^7.22.13"
+ "@babel/highlight" "^7.23.4"
chalk "^2.4.2"
"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.2":
@@ -175,33 +175,33 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc"
integrity sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==
-"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.19.6", "@babel/core@^7.22.9", "@babel/core@^7.23.0":
- version "7.23.2"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.2.tgz#ed10df0d580fff67c5f3ee70fd22e2e4c90a9f94"
- integrity sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==
+"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.19.6", "@babel/core@^7.23.0", "@babel/core@^7.23.3":
+ version "7.23.5"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.5.tgz#6e23f2acbcb77ad283c5ed141f824fd9f70101c7"
+ integrity sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==
dependencies:
"@ampproject/remapping" "^2.2.0"
- "@babel/code-frame" "^7.22.13"
- "@babel/generator" "^7.23.0"
+ "@babel/code-frame" "^7.23.5"
+ "@babel/generator" "^7.23.5"
"@babel/helper-compilation-targets" "^7.22.15"
- "@babel/helper-module-transforms" "^7.23.0"
- "@babel/helpers" "^7.23.2"
- "@babel/parser" "^7.23.0"
+ "@babel/helper-module-transforms" "^7.23.3"
+ "@babel/helpers" "^7.23.5"
+ "@babel/parser" "^7.23.5"
"@babel/template" "^7.22.15"
- "@babel/traverse" "^7.23.2"
- "@babel/types" "^7.23.0"
+ "@babel/traverse" "^7.23.5"
+ "@babel/types" "^7.23.5"
convert-source-map "^2.0.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/generator@^7.22.9", "@babel/generator@^7.23.0", "@babel/generator@^7.7.2":
- version "7.23.0"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420"
- integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==
+"@babel/generator@^7.23.3", "@babel/generator@^7.23.5", "@babel/generator@^7.7.2":
+ version "7.23.5"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.5.tgz#17d0a1ea6b62f351d281350a5f80b87a810c4755"
+ integrity sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==
dependencies:
- "@babel/types" "^7.23.0"
+ "@babel/types" "^7.23.5"
"@jridgewell/gen-mapping" "^0.3.2"
"@jridgewell/trace-mapping" "^0.3.17"
jsesc "^2.5.1"
@@ -300,10 +300,10 @@
dependencies:
"@babel/types" "^7.22.15"
-"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.23.0":
- version "7.23.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e"
- integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==
+"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.23.0", "@babel/helper-module-transforms@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1"
+ integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==
dependencies:
"@babel/helper-environment-visitor" "^7.22.20"
"@babel/helper-module-imports" "^7.22.15"
@@ -362,10 +362,10 @@
dependencies:
"@babel/types" "^7.22.5"
-"@babel/helper-string-parser@^7.22.5":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f"
- integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
+"@babel/helper-string-parser@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83"
+ integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==
"@babel/helper-validator-identifier@^7.22.20":
version "7.22.20"
@@ -386,28 +386,28 @@
"@babel/template" "^7.22.15"
"@babel/types" "^7.22.19"
-"@babel/helpers@^7.23.2":
- version "7.23.2"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767"
- integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==
+"@babel/helpers@^7.23.5":
+ version "7.23.5"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.5.tgz#52f522840df8f1a848d06ea6a79b79eefa72401e"
+ integrity sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==
dependencies:
"@babel/template" "^7.22.15"
- "@babel/traverse" "^7.23.2"
- "@babel/types" "^7.23.0"
+ "@babel/traverse" "^7.23.5"
+ "@babel/types" "^7.23.5"
-"@babel/highlight@^7.22.13":
- version "7.22.20"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54"
- integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==
+"@babel/highlight@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b"
+ integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==
dependencies:
"@babel/helper-validator-identifier" "^7.22.20"
chalk "^2.4.2"
js-tokens "^4.0.0"
-"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.22.15", "@babel/parser@^7.22.7", "@babel/parser@^7.23.0":
- version "7.23.0"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719"
- integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==
+"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.22.15", "@babel/parser@^7.22.7", "@babel/parser@^7.23.5":
+ version "7.23.5"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563"
+ integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15":
version "7.22.15"
@@ -1159,7 +1159,7 @@
core-js-pure "^3.30.2"
regenerator-runtime "^0.14.0"
-"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.22.6", "@babel/runtime@^7.8.4":
+"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.22.6", "@babel/runtime@^7.8.4":
version "7.23.2"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885"
integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==
@@ -1175,28 +1175,28 @@
"@babel/parser" "^7.22.15"
"@babel/types" "^7.22.15"
-"@babel/traverse@^7.22.8", "@babel/traverse@^7.23.2", "@babel/traverse@^7.7.2":
- version "7.23.2"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8"
- integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==
+"@babel/traverse@^7.22.8", "@babel/traverse@^7.23.5", "@babel/traverse@^7.7.2":
+ version "7.23.5"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.5.tgz#f546bf9aba9ef2b042c0e00d245990c15508e7ec"
+ integrity sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==
dependencies:
- "@babel/code-frame" "^7.22.13"
- "@babel/generator" "^7.23.0"
+ "@babel/code-frame" "^7.23.5"
+ "@babel/generator" "^7.23.5"
"@babel/helper-environment-visitor" "^7.22.20"
"@babel/helper-function-name" "^7.23.0"
"@babel/helper-hoist-variables" "^7.22.5"
"@babel/helper-split-export-declaration" "^7.22.6"
- "@babel/parser" "^7.23.0"
- "@babel/types" "^7.23.0"
+ "@babel/parser" "^7.23.5"
+ "@babel/types" "^7.23.5"
debug "^4.1.0"
globals "^11.1.0"
-"@babel/types@^7.0.0", "@babel/types@^7.20.0", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
- version "7.23.0"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb"
- integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==
+"@babel/types@^7.0.0", "@babel/types@^7.20.0", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
+ version "7.23.5"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.5.tgz#48d730a00c95109fa4393352705954d74fb5b602"
+ integrity sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==
dependencies:
- "@babel/helper-string-parser" "^7.22.5"
+ "@babel/helper-string-parser" "^7.23.4"
"@babel/helper-validator-identifier" "^7.22.20"
to-fast-properties "^2.0.0"
@@ -1230,13 +1230,13 @@
"@docsearch/css" "3.5.2"
algoliasearch "^4.19.1"
-"@docusaurus/core@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.0.0.tgz#46bc9bf2bcd99ca98a1c8f10a70bf3afaaaf9dcb"
- integrity sha512-bHWtY55tJTkd6pZhHrWz1MpWuwN4edZe0/UWgFF7PW/oJeDZvLSXKqwny3L91X1/LGGoypBGkeZn8EOuKeL4yQ==
+"@docusaurus/core@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.0.1.tgz#ad9a66b20802ea81b25e65db75d4ca952eda7e01"
+ integrity sha512-CXrLpOnW+dJdSv8M5FAJ3JBwXtL6mhUWxFA8aS0ozK6jBG/wgxERk5uvH28fCeFxOGbAT9v1e9dOMo1X2IEVhQ==
dependencies:
- "@babel/core" "^7.22.9"
- "@babel/generator" "^7.22.9"
+ "@babel/core" "^7.23.3"
+ "@babel/generator" "^7.23.3"
"@babel/plugin-syntax-dynamic-import" "^7.8.3"
"@babel/plugin-transform-runtime" "^7.22.9"
"@babel/preset-env" "^7.22.9"
@@ -1245,13 +1245,13 @@
"@babel/runtime" "^7.22.6"
"@babel/runtime-corejs3" "^7.22.6"
"@babel/traverse" "^7.22.8"
- "@docusaurus/cssnano-preset" "3.0.0"
- "@docusaurus/logger" "3.0.0"
- "@docusaurus/mdx-loader" "3.0.0"
+ "@docusaurus/cssnano-preset" "3.0.1"
+ "@docusaurus/logger" "3.0.1"
+ "@docusaurus/mdx-loader" "3.0.1"
"@docusaurus/react-loadable" "5.5.2"
- "@docusaurus/utils" "3.0.0"
- "@docusaurus/utils-common" "3.0.0"
- "@docusaurus/utils-validation" "3.0.0"
+ "@docusaurus/utils" "3.0.1"
+ "@docusaurus/utils-common" "3.0.1"
+ "@docusaurus/utils-validation" "3.0.1"
"@slorber/static-site-generator-webpack-plugin" "^4.0.7"
"@svgr/webpack" "^6.5.1"
autoprefixer "^10.4.14"
@@ -1299,41 +1299,40 @@
tslib "^2.6.0"
update-notifier "^6.0.2"
url-loader "^4.1.1"
- wait-on "^7.0.1"
webpack "^5.88.1"
webpack-bundle-analyzer "^4.9.0"
webpack-dev-server "^4.15.1"
webpack-merge "^5.9.0"
webpackbar "^5.0.2"
-"@docusaurus/cssnano-preset@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.0.0.tgz#87fbf9cbc7c383e207119b44c17fb1d05c73af7c"
- integrity sha512-FHiRfwmVvIVdIGsHcijUOaX7hMn0mugVYB7m4GkpYI6Mi56zwQV4lH5p7DxcW5CUYNWMVxz2loWSCiWEm5ikwA==
+"@docusaurus/cssnano-preset@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.0.1.tgz#22fbf2e97389e338747864baf011743846e8fd26"
+ integrity sha512-wjuXzkHMW+ig4BD6Ya1Yevx9UJadO4smNZCEljqBoQfIQrQskTswBs7lZ8InHP7mCt273a/y/rm36EZhqJhknQ==
dependencies:
cssnano-preset-advanced "^5.3.10"
postcss "^8.4.26"
postcss-sort-media-queries "^4.4.1"
tslib "^2.6.0"
-"@docusaurus/logger@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.0.0.tgz#02a4bfecec6aa3732c8bd9597ca9d5debab813a6"
- integrity sha512-6eX0eOfioMQCk+qgCnHvbLLuyIAA+r2lSID6d6JusiLtDKmYMfNp3F4yyE8bnb0Abmzt2w68XwptEFYyALSAXw==
+"@docusaurus/logger@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.0.1.tgz#06f512eef6c6ae4e2da63064257e01b1cdc41a82"
+ integrity sha512-I5L6Nk8OJzkVA91O2uftmo71LBSxe1vmOn9AMR6JRCzYeEBrqneWMH02AqMvjJ2NpMiviO+t0CyPjyYV7nxCWQ==
dependencies:
chalk "^4.1.2"
tslib "^2.6.0"
-"@docusaurus/mdx-loader@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.0.0.tgz#2593889e43dc4bbd8dfa074d86c8bb4206cf4171"
- integrity sha512-JkGge6WYDrwjNgMxwkb6kNQHnpISt5L1tMaBWFDBKeDToFr5Kj29IL35MIQm0RfrnoOfr/29RjSH4aRtvlAR0A==
+"@docusaurus/mdx-loader@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.0.1.tgz#89f221e5bcc570983fd61d7ab56d6fbe36810b59"
+ integrity sha512-ldnTmvnvlrONUq45oKESrpy+lXtbnTcTsFkOTIDswe5xx5iWJjt6eSa0f99ZaWlnm24mlojcIGoUWNCS53qVlQ==
dependencies:
"@babel/parser" "^7.22.7"
"@babel/traverse" "^7.22.8"
- "@docusaurus/logger" "3.0.0"
- "@docusaurus/utils" "3.0.0"
- "@docusaurus/utils-validation" "3.0.0"
+ "@docusaurus/logger" "3.0.1"
+ "@docusaurus/utils" "3.0.1"
+ "@docusaurus/utils-validation" "3.0.1"
"@mdx-js/mdx" "^3.0.0"
"@slorber/remark-comment" "^1.0.0"
escape-html "^1.0.3"
@@ -1370,18 +1369,32 @@
react-helmet-async "*"
react-loadable "npm:@docusaurus/react-loadable@5.5.2"
-"@docusaurus/plugin-content-blog@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.0.0.tgz#5f3ede003b2b7103043918fbe3f436c116839ca8"
- integrity sha512-iA8Wc3tIzVnROJxrbIsU/iSfixHW16YeW9RWsBw7hgEk4dyGsip9AsvEDXobnRq3lVv4mfdgoS545iGWf1Ip9w==
+"@docusaurus/module-type-aliases@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.0.1.tgz#d45990fe377d7ffaa68841cf89401188a5d65293"
+ integrity sha512-DEHpeqUDsLynl3AhQQiO7AbC7/z/lBra34jTcdYuvp9eGm01pfH1wTVq8YqWZq6Jyx0BgcVl/VJqtE9StRd9Ag==
dependencies:
- "@docusaurus/core" "3.0.0"
- "@docusaurus/logger" "3.0.0"
- "@docusaurus/mdx-loader" "3.0.0"
- "@docusaurus/types" "3.0.0"
- "@docusaurus/utils" "3.0.0"
- "@docusaurus/utils-common" "3.0.0"
- "@docusaurus/utils-validation" "3.0.0"
+ "@docusaurus/react-loadable" "5.5.2"
+ "@docusaurus/types" "3.0.1"
+ "@types/history" "^4.7.11"
+ "@types/react" "*"
+ "@types/react-router-config" "*"
+ "@types/react-router-dom" "*"
+ react-helmet-async "*"
+ react-loadable "npm:@docusaurus/react-loadable@5.5.2"
+
+"@docusaurus/plugin-content-blog@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.0.1.tgz#dee6147187c2d8b634252444d60312d12c9571a6"
+ integrity sha512-cLOvtvAyaMQFLI8vm4j26svg3ktxMPSXpuUJ7EERKoGbfpJSsgtowNHcRsaBVmfuCsRSk1HZ/yHBsUkTmHFEsg==
+ dependencies:
+ "@docusaurus/core" "3.0.1"
+ "@docusaurus/logger" "3.0.1"
+ "@docusaurus/mdx-loader" "3.0.1"
+ "@docusaurus/types" "3.0.1"
+ "@docusaurus/utils" "3.0.1"
+ "@docusaurus/utils-common" "3.0.1"
+ "@docusaurus/utils-validation" "3.0.1"
cheerio "^1.0.0-rc.12"
feed "^4.2.2"
fs-extra "^11.1.1"
@@ -1393,18 +1406,18 @@
utility-types "^3.10.0"
webpack "^5.88.1"
-"@docusaurus/plugin-content-docs@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.0.0.tgz#b579c65d7386905890043bdd4a8f9da3194e90fa"
- integrity sha512-MFZsOSwmeJ6rvoZMLieXxPuJsA9M9vn7/mUZmfUzSUTeHAeq+fEqvLltFOxcj4DVVDTYlQhgWYd+PISIWgamKw==
+"@docusaurus/plugin-content-docs@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.0.1.tgz#d9b1884562186573d5c4521ac3546b68512c1126"
+ integrity sha512-dRfAOA5Ivo+sdzzJGXEu33yAtvGg8dlZkvt/NEJ7nwi1F2j4LEdsxtfX2GKeETB2fP6XoGNSQnFXqa2NYGrHFg==
dependencies:
- "@docusaurus/core" "3.0.0"
- "@docusaurus/logger" "3.0.0"
- "@docusaurus/mdx-loader" "3.0.0"
- "@docusaurus/module-type-aliases" "3.0.0"
- "@docusaurus/types" "3.0.0"
- "@docusaurus/utils" "3.0.0"
- "@docusaurus/utils-validation" "3.0.0"
+ "@docusaurus/core" "3.0.1"
+ "@docusaurus/logger" "3.0.1"
+ "@docusaurus/mdx-loader" "3.0.1"
+ "@docusaurus/module-type-aliases" "3.0.1"
+ "@docusaurus/types" "3.0.1"
+ "@docusaurus/utils" "3.0.1"
+ "@docusaurus/utils-validation" "3.0.1"
"@types/react-router-config" "^5.0.7"
combine-promises "^1.1.0"
fs-extra "^11.1.1"
@@ -1414,96 +1427,96 @@
utility-types "^3.10.0"
webpack "^5.88.1"
-"@docusaurus/plugin-content-pages@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.0.0.tgz#519a946a477a203989080db70dd787cb6db15fab"
- integrity sha512-EXYHXK2Ea1B5BUmM0DgSwaOYt8EMSzWtYUToNo62Q/EoWxYOQFdWglYnw3n7ZEGyw5Kog4LHaRwlazAdmDomvQ==
+"@docusaurus/plugin-content-pages@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.0.1.tgz#27e6424c77173f867760efe53f848bbab8849ea6"
+ integrity sha512-oP7PoYizKAXyEttcvVzfX3OoBIXEmXTMzCdfmC4oSwjG4SPcJsRge3mmI6O8jcZBgUPjIzXD21bVGWEE1iu8gg==
dependencies:
- "@docusaurus/core" "3.0.0"
- "@docusaurus/mdx-loader" "3.0.0"
- "@docusaurus/types" "3.0.0"
- "@docusaurus/utils" "3.0.0"
- "@docusaurus/utils-validation" "3.0.0"
+ "@docusaurus/core" "3.0.1"
+ "@docusaurus/mdx-loader" "3.0.1"
+ "@docusaurus/types" "3.0.1"
+ "@docusaurus/utils" "3.0.1"
+ "@docusaurus/utils-validation" "3.0.1"
fs-extra "^11.1.1"
tslib "^2.6.0"
webpack "^5.88.1"
-"@docusaurus/plugin-debug@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.0.0.tgz#9c6d4abfd5357dbebccf5b41f5aefc06116e03e3"
- integrity sha512-gSV07HfQgnUboVEb3lucuVyv5pEoy33E7QXzzn++3kSc/NLEimkjXh3sSnTGOishkxCqlFV9BHfY/VMm5Lko5g==
+"@docusaurus/plugin-debug@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.0.1.tgz#886b5dd03c066e970484ca251c1b79613df90700"
+ integrity sha512-09dxZMdATky4qdsZGzhzlUvvC+ilQ2hKbYF+wez+cM2mGo4qHbv8+qKXqxq0CQZyimwlAOWQLoSozIXU0g0i7g==
dependencies:
- "@docusaurus/core" "3.0.0"
- "@docusaurus/types" "3.0.0"
- "@docusaurus/utils" "3.0.0"
- "@microlink/react-json-view" "^1.22.2"
+ "@docusaurus/core" "3.0.1"
+ "@docusaurus/types" "3.0.1"
+ "@docusaurus/utils" "3.0.1"
fs-extra "^11.1.1"
+ react-json-view-lite "^1.2.0"
tslib "^2.6.0"
-"@docusaurus/plugin-google-analytics@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.0.0.tgz#8a54f5e21b55c133b6be803ac51bf92d4a515cca"
- integrity sha512-0zcLK8w+ohmSm1fjUQCqeRsjmQc0gflvXnaVA/QVVCtm2yCiBtkrSGQXqt4MdpD7Xq8mwo3qVd5nhIcvrcebqw==
+"@docusaurus/plugin-google-analytics@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.0.1.tgz#ec69902131ea3aad8b062eeb1d17bf0962986f80"
+ integrity sha512-jwseSz1E+g9rXQwDdr0ZdYNjn8leZBnKPjjQhMBEiwDoenL3JYFcNW0+p0sWoVF/f2z5t7HkKA+cYObrUh18gg==
dependencies:
- "@docusaurus/core" "3.0.0"
- "@docusaurus/types" "3.0.0"
- "@docusaurus/utils-validation" "3.0.0"
+ "@docusaurus/core" "3.0.1"
+ "@docusaurus/types" "3.0.1"
+ "@docusaurus/utils-validation" "3.0.1"
tslib "^2.6.0"
-"@docusaurus/plugin-google-gtag@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.0.0.tgz#a4c407b80cb46773bea070816ebb547c5663f0b3"
- integrity sha512-asEKavw8fczUqvXu/s9kG2m1epLnHJ19W6CCCRZEmpnkZUZKiM8rlkDiEmxApwIc2JDDbIMk+Y2TMkJI8mInbQ==
+"@docusaurus/plugin-google-gtag@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.0.1.tgz#bb5526377d3a324ebec235127846fda386562b05"
+ integrity sha512-UFTDvXniAWrajsulKUJ1DB6qplui1BlKLQZjX4F7qS/qfJ+qkKqSkhJ/F4VuGQ2JYeZstYb+KaUzUzvaPK1aRQ==
dependencies:
- "@docusaurus/core" "3.0.0"
- "@docusaurus/types" "3.0.0"
- "@docusaurus/utils-validation" "3.0.0"
+ "@docusaurus/core" "3.0.1"
+ "@docusaurus/types" "3.0.1"
+ "@docusaurus/utils-validation" "3.0.1"
"@types/gtag.js" "^0.0.12"
tslib "^2.6.0"
-"@docusaurus/plugin-google-tag-manager@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.0.0.tgz#8befa315b4747618e9ea65add3f2f4e84df2c7ba"
- integrity sha512-lytgu2eyn+7p4WklJkpMGRhwC29ezj4IjPPmVJ8vGzcSl6JkR1sADTHLG5xWOMuci420xZl9dGEiLTQ8FjCRyA==
+"@docusaurus/plugin-google-tag-manager@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.0.1.tgz#4e36d13279cf90c2614b62438aa1109dd4696ec8"
+ integrity sha512-IPFvuz83aFuheZcWpTlAdiiX1RqWIHM+OH8wS66JgwAKOiQMR3+nLywGjkLV4bp52x7nCnwhNk1rE85Cpy/CIw==
dependencies:
- "@docusaurus/core" "3.0.0"
- "@docusaurus/types" "3.0.0"
- "@docusaurus/utils-validation" "3.0.0"
+ "@docusaurus/core" "3.0.1"
+ "@docusaurus/types" "3.0.1"
+ "@docusaurus/utils-validation" "3.0.1"
tslib "^2.6.0"
-"@docusaurus/plugin-sitemap@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.0.0.tgz#91f300e500d476252ea2f40449ee828766b9b9d6"
- integrity sha512-cfcONdWku56Oi7Hdus2uvUw/RKRRlIGMViiHLjvQ21CEsEqnQ297MRoIgjU28kL7/CXD/+OiANSq3T1ezAiMhA==
+"@docusaurus/plugin-sitemap@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.0.1.tgz#ab55857e90d4500f892e110b30e4bc3289202bd4"
+ integrity sha512-xARiWnjtVvoEniZudlCq5T9ifnhCu/GAZ5nA7XgyLfPcNpHQa241HZdsTlLtVcecEVVdllevBKOp7qknBBaMGw==
dependencies:
- "@docusaurus/core" "3.0.0"
- "@docusaurus/logger" "3.0.0"
- "@docusaurus/types" "3.0.0"
- "@docusaurus/utils" "3.0.0"
- "@docusaurus/utils-common" "3.0.0"
- "@docusaurus/utils-validation" "3.0.0"
+ "@docusaurus/core" "3.0.1"
+ "@docusaurus/logger" "3.0.1"
+ "@docusaurus/types" "3.0.1"
+ "@docusaurus/utils" "3.0.1"
+ "@docusaurus/utils-common" "3.0.1"
+ "@docusaurus/utils-validation" "3.0.1"
fs-extra "^11.1.1"
sitemap "^7.1.1"
tslib "^2.6.0"
-"@docusaurus/preset-classic@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.0.0.tgz#b05c3960c4d0a731b2feb97e94e3757ab073c611"
- integrity sha512-90aOKZGZdi0+GVQV+wt8xx4M4GiDrBRke8NO8nWwytMEXNrxrBxsQYFRD1YlISLJSCiHikKf3Z/MovMnQpnZyg==
+"@docusaurus/preset-classic@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.0.1.tgz#d363ac837bba967095ed2a896d13c54f3717d6b5"
+ integrity sha512-il9m9xZKKjoXn6h0cRcdnt6wce0Pv1y5t4xk2Wx7zBGhKG1idu4IFHtikHlD0QPuZ9fizpXspXcTzjL5FXc1Gw==
dependencies:
- "@docusaurus/core" "3.0.0"
- "@docusaurus/plugin-content-blog" "3.0.0"
- "@docusaurus/plugin-content-docs" "3.0.0"
- "@docusaurus/plugin-content-pages" "3.0.0"
- "@docusaurus/plugin-debug" "3.0.0"
- "@docusaurus/plugin-google-analytics" "3.0.0"
- "@docusaurus/plugin-google-gtag" "3.0.0"
- "@docusaurus/plugin-google-tag-manager" "3.0.0"
- "@docusaurus/plugin-sitemap" "3.0.0"
- "@docusaurus/theme-classic" "3.0.0"
- "@docusaurus/theme-common" "3.0.0"
- "@docusaurus/theme-search-algolia" "3.0.0"
- "@docusaurus/types" "3.0.0"
+ "@docusaurus/core" "3.0.1"
+ "@docusaurus/plugin-content-blog" "3.0.1"
+ "@docusaurus/plugin-content-docs" "3.0.1"
+ "@docusaurus/plugin-content-pages" "3.0.1"
+ "@docusaurus/plugin-debug" "3.0.1"
+ "@docusaurus/plugin-google-analytics" "3.0.1"
+ "@docusaurus/plugin-google-gtag" "3.0.1"
+ "@docusaurus/plugin-google-tag-manager" "3.0.1"
+ "@docusaurus/plugin-sitemap" "3.0.1"
+ "@docusaurus/theme-classic" "3.0.1"
+ "@docusaurus/theme-common" "3.0.1"
+ "@docusaurus/theme-search-algolia" "3.0.1"
+ "@docusaurus/types" "3.0.1"
"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2":
version "5.5.2"
@@ -1513,84 +1526,84 @@
"@types/react" "*"
prop-types "^15.6.2"
-"@docusaurus/theme-classic@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.0.0.tgz#a47eda40747e1a6f79190e6bb786d3a7fc4e06b2"
- integrity sha512-wWOHSrKMn7L4jTtXBsb5iEJ3xvTddBye5PjYBnWiCkTAlhle2yMdc4/qRXW35Ot+OV/VXu6YFG8XVUJEl99z0A==
+"@docusaurus/theme-classic@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.0.1.tgz#3ba4dc77553d2c1608e433c0d01bed7c6db14eb9"
+ integrity sha512-XD1FRXaJiDlmYaiHHdm27PNhhPboUah9rqIH0lMpBt5kYtsGjJzhqa27KuZvHLzOP2OEpqd2+GZ5b6YPq7Q05Q==
dependencies:
- "@docusaurus/core" "3.0.0"
- "@docusaurus/mdx-loader" "3.0.0"
- "@docusaurus/module-type-aliases" "3.0.0"
- "@docusaurus/plugin-content-blog" "3.0.0"
- "@docusaurus/plugin-content-docs" "3.0.0"
- "@docusaurus/plugin-content-pages" "3.0.0"
- "@docusaurus/theme-common" "3.0.0"
- "@docusaurus/theme-translations" "3.0.0"
- "@docusaurus/types" "3.0.0"
- "@docusaurus/utils" "3.0.0"
- "@docusaurus/utils-common" "3.0.0"
- "@docusaurus/utils-validation" "3.0.0"
+ "@docusaurus/core" "3.0.1"
+ "@docusaurus/mdx-loader" "3.0.1"
+ "@docusaurus/module-type-aliases" "3.0.1"
+ "@docusaurus/plugin-content-blog" "3.0.1"
+ "@docusaurus/plugin-content-docs" "3.0.1"
+ "@docusaurus/plugin-content-pages" "3.0.1"
+ "@docusaurus/theme-common" "3.0.1"
+ "@docusaurus/theme-translations" "3.0.1"
+ "@docusaurus/types" "3.0.1"
+ "@docusaurus/utils" "3.0.1"
+ "@docusaurus/utils-common" "3.0.1"
+ "@docusaurus/utils-validation" "3.0.1"
"@mdx-js/react" "^3.0.0"
- clsx "^1.2.1"
+ clsx "^2.0.0"
copy-text-to-clipboard "^3.2.0"
infima "0.2.0-alpha.43"
lodash "^4.17.21"
nprogress "^0.2.0"
postcss "^8.4.26"
- prism-react-renderer "^2.1.0"
+ prism-react-renderer "^2.3.0"
prismjs "^1.29.0"
react-router-dom "^5.3.4"
rtlcss "^4.1.0"
tslib "^2.6.0"
utility-types "^3.10.0"
-"@docusaurus/theme-common@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.0.0.tgz#6dc8c39a7458dd39f95a2fa6eb1c6aaf32b7e103"
- integrity sha512-PahRpCLRK5owCMEqcNtUeTMOkTUCzrJlKA+HLu7f+8osYOni617YurXvHASCsSTxurjXaLz/RqZMnASnqATxIA==
+"@docusaurus/theme-common@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.0.1.tgz#29a5bcb286296a52bc10afa5308e360cbed6b49c"
+ integrity sha512-cr9TOWXuIOL0PUfuXv6L5lPlTgaphKP+22NdVBOYah5jSq5XAAulJTjfe+IfLsEG4L7lJttLbhW7LXDFSAI7Ag==
dependencies:
- "@docusaurus/mdx-loader" "3.0.0"
- "@docusaurus/module-type-aliases" "3.0.0"
- "@docusaurus/plugin-content-blog" "3.0.0"
- "@docusaurus/plugin-content-docs" "3.0.0"
- "@docusaurus/plugin-content-pages" "3.0.0"
- "@docusaurus/utils" "3.0.0"
- "@docusaurus/utils-common" "3.0.0"
+ "@docusaurus/mdx-loader" "3.0.1"
+ "@docusaurus/module-type-aliases" "3.0.1"
+ "@docusaurus/plugin-content-blog" "3.0.1"
+ "@docusaurus/plugin-content-docs" "3.0.1"
+ "@docusaurus/plugin-content-pages" "3.0.1"
+ "@docusaurus/utils" "3.0.1"
+ "@docusaurus/utils-common" "3.0.1"
"@types/history" "^4.7.11"
"@types/react" "*"
"@types/react-router-config" "*"
- clsx "^1.2.1"
+ clsx "^2.0.0"
parse-numeric-range "^1.3.0"
- prism-react-renderer "^2.1.0"
+ prism-react-renderer "^2.3.0"
tslib "^2.6.0"
utility-types "^3.10.0"
-"@docusaurus/theme-search-algolia@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.0.0.tgz#20701c2e7945a236df401365271b511a24ff3cad"
- integrity sha512-PyMUNIS9yu0dx7XffB13ti4TG47pJq3G2KE/INvOFb6M0kWh+wwCnucPg4WAOysHOPh+SD9fjlXILoLQstgEIA==
+"@docusaurus/theme-search-algolia@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.0.1.tgz#d8fb6bddca8d8355e4706c4c7d30d3b800217cf4"
+ integrity sha512-DDiPc0/xmKSEdwFkXNf1/vH1SzJPzuJBar8kMcBbDAZk/SAmo/4lf6GU2drou4Ae60lN2waix+jYWTWcJRahSA==
dependencies:
"@docsearch/react" "^3.5.2"
- "@docusaurus/core" "3.0.0"
- "@docusaurus/logger" "3.0.0"
- "@docusaurus/plugin-content-docs" "3.0.0"
- "@docusaurus/theme-common" "3.0.0"
- "@docusaurus/theme-translations" "3.0.0"
- "@docusaurus/utils" "3.0.0"
- "@docusaurus/utils-validation" "3.0.0"
+ "@docusaurus/core" "3.0.1"
+ "@docusaurus/logger" "3.0.1"
+ "@docusaurus/plugin-content-docs" "3.0.1"
+ "@docusaurus/theme-common" "3.0.1"
+ "@docusaurus/theme-translations" "3.0.1"
+ "@docusaurus/utils" "3.0.1"
+ "@docusaurus/utils-validation" "3.0.1"
algoliasearch "^4.18.0"
algoliasearch-helper "^3.13.3"
- clsx "^1.2.1"
+ clsx "^2.0.0"
eta "^2.2.0"
fs-extra "^11.1.1"
lodash "^4.17.21"
tslib "^2.6.0"
utility-types "^3.10.0"
-"@docusaurus/theme-translations@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.0.0.tgz#98590b80589f15b2064e0daa2acc3a82d126f53b"
- integrity sha512-p/H3+5LdnDtbMU+csYukA6601U1ld2v9knqxGEEV96qV27HsHfP63J9Ta2RBZUrNhQAgrwFzIc9GdDO8P1Baag==
+"@docusaurus/theme-translations@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.0.1.tgz#837a01a166ccd698a3eceaed0c2f798555bc024b"
+ integrity sha512-6UrbpzCTN6NIJnAtZ6Ne9492vmPVX+7Fsz4kmp+yor3KQwA1+MCzQP7ItDNkP38UmVLnvB/cYk/IvehCUqS3dg==
dependencies:
fs-extra "^11.1.1"
tslib "^2.6.0"
@@ -1614,30 +1627,44 @@
webpack "^5.88.1"
webpack-merge "^5.9.0"
-"@docusaurus/utils-common@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.0.0.tgz#fb019e5228b20852a5b98f50672a02843a03ba03"
- integrity sha512-7iJWAtt4AHf4PFEPlEPXko9LZD/dbYnhLe0q8e3GRK1EXZyRASah2lznpMwB3lLmVjq/FR6ZAKF+E0wlmL5j0g==
+"@docusaurus/types@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.0.1.tgz#4fe306aa10ef7c97dbc07588864f6676a40f3b6f"
+ integrity sha512-plyX2iU1tcUsF46uQ01pAd4JhexR7n0iiQ5MSnBFX6M6NSJgDYdru/i1/YNPKOnQHBoXGLHv0dNT6OAlDWNjrg==
+ dependencies:
+ "@types/history" "^4.7.11"
+ "@types/react" "*"
+ commander "^5.1.0"
+ joi "^17.9.2"
+ react-helmet-async "^1.3.0"
+ utility-types "^3.10.0"
+ webpack "^5.88.1"
+ webpack-merge "^5.9.0"
+
+"@docusaurus/utils-common@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.0.1.tgz#111f450089d5f0a290c0c25f8a574a270d08436f"
+ integrity sha512-W0AxD6w6T8g6bNro8nBRWf7PeZ/nn7geEWM335qHU2DDDjHuV4UZjgUGP1AQsdcSikPrlIqTJJbKzer1lRSlIg==
dependencies:
tslib "^2.6.0"
-"@docusaurus/utils-validation@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.0.0.tgz#56f3ba89ceba9826989408a96827897c0b724612"
- integrity sha512-MlIGUspB/HBW5CYgHvRhmkZbeMiUWKbyVoCQYvbGN8S19SSzVgzyy97KRpcjCOYYeEdkhmRCUwFBJBlLg3IoNQ==
+"@docusaurus/utils-validation@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.0.1.tgz#3c5f12941b328a19fc9acb34d070219f3e865ec6"
+ integrity sha512-ujTnqSfyGQ7/4iZdB4RRuHKY/Nwm58IIb+41s5tCXOv/MBU2wGAjOHq3U+AEyJ8aKQcHbxvTKJaRchNHYUVUQg==
dependencies:
- "@docusaurus/logger" "3.0.0"
- "@docusaurus/utils" "3.0.0"
+ "@docusaurus/logger" "3.0.1"
+ "@docusaurus/utils" "3.0.1"
joi "^17.9.2"
js-yaml "^4.1.0"
tslib "^2.6.0"
-"@docusaurus/utils@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.0.0.tgz#2ef0c8e434036fe104dca4c694fd50022b2ba1ed"
- integrity sha512-JwGjh5mtjG9XIAESyPxObL6CZ6LO/yU4OSTpq7Q0x+jN25zi/AMbvLjpSyZzWy+qm5uQiFiIhqFaOxvy+82Ekg==
+"@docusaurus/utils@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.0.1.tgz#c64f68980a90c5bc6d53a5b8f32deb9026b1e303"
+ integrity sha512-TwZ33Am0q4IIbvjhUOs+zpjtD/mXNmLmEgeTGuRq01QzulLHuPhaBTTAC/DHu6kFx3wDgmgpAlaRuCHfTcXv8g==
dependencies:
- "@docusaurus/logger" "3.0.0"
+ "@docusaurus/logger" "3.0.1"
"@svgr/webpack" "^6.5.1"
escape-string-regexp "^4.0.0"
file-loader "^6.2.0"
@@ -2002,16 +2029,6 @@
dependencies:
"@types/mdx" "^2.0.0"
-"@microlink/react-json-view@^1.22.2":
- version "1.23.0"
- resolved "https://registry.yarnpkg.com/@microlink/react-json-view/-/react-json-view-1.23.0.tgz#641c2483b1a0014818303d4e9cce634d5dacc7e9"
- integrity sha512-HYJ1nsfO4/qn8afnAMhuk7+5a1vcjEaS8Gm5Vpr1SqdHDY0yLBJGpA+9DvKyxyVKaUkXzKXt3Mif9RcmFSdtYg==
- dependencies:
- flux "~4.0.1"
- react-base16-styling "~0.6.0"
- react-lifecycles-compat "~3.0.4"
- react-textarea-autosize "~8.3.2"
-
"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3":
version "2.1.8-no-fsevents.3"
resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b"
@@ -3090,6 +3107,11 @@ ansicolors@~0.3.2:
resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979"
integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==
+any-promise@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+ integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==
+
anymatch@^3.0.3, anymatch@~3.1.2:
version "3.1.3"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
@@ -3174,11 +3196,6 @@ array-union@^2.1.0:
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
-asap@~2.0.3:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
- integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==
-
astring@^1.8.0:
version "1.8.6"
resolved "https://registry.yarnpkg.com/astring/-/astring-1.8.6.tgz#2c9c157cf1739d67561c56ba896e6948f6b93731"
@@ -3222,11 +3239,6 @@ async@^3.2.3:
resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
- integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
-
at-least-node@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
@@ -3244,14 +3256,6 @@ autoprefixer@^10.4.12, autoprefixer@^10.4.14:
picocolors "^1.0.0"
postcss-value-parser "^4.2.0"
-axios@^0.27.2:
- version "0.27.2"
- resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972"
- integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==
- dependencies:
- follow-redirects "^1.14.9"
- form-data "^4.0.0"
-
babel-jest@^29.3.1:
version "29.3.1"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.3.1.tgz#05c83e0d128cd48c453eea851482a38782249f44"
@@ -3390,11 +3394,6 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-base16@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70"
- integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==
-
batch@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
@@ -3776,10 +3775,10 @@ clone-deep@^4.0.1:
kind-of "^6.0.2"
shallow-clone "^3.0.0"
-clsx@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12"
- integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==
+clsx@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b"
+ integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==
co@^4.6.0:
version "4.6.0"
@@ -3849,13 +3848,6 @@ combine-promises@^1.1.0:
resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.1.0.tgz#72db90743c0ca7aab7d0d8d2052fd7b0f674de71"
integrity sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==
-combined-stream@^1.0.8:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
- integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
- dependencies:
- delayed-stream "~1.0.0"
-
comma-separated-tokens@^2.0.0:
version "2.0.3"
resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee"
@@ -3871,7 +3863,7 @@ commander@^2.20.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
-commander@^4.0.1:
+commander@^4.0.0, commander@^4.0.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
@@ -4063,13 +4055,6 @@ cosmiconfig@^8.2.0:
parse-json "^5.0.0"
path-type "^4.0.0"
-cross-fetch@^3.1.5:
- version "3.1.6"
- resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.6.tgz#bae05aa31a4da760969756318feeee6e70f15d6c"
- integrity sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==
- dependencies:
- node-fetch "^2.6.11"
-
cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
@@ -4330,11 +4315,6 @@ del@^6.1.1:
rimraf "^3.0.2"
slash "^3.0.0"
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
- integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
-
depd@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
@@ -5044,31 +5024,6 @@ fb-watchman@^2.0.0:
dependencies:
bser "2.1.1"
-fbemitter@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3"
- integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==
- dependencies:
- fbjs "^3.0.0"
-
-fbjs-css-vars@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8"
- integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==
-
-fbjs@^3.0.0, fbjs@^3.0.1:
- version "3.0.5"
- resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.5.tgz#aa0edb7d5caa6340011790bd9249dbef8a81128d"
- integrity sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==
- dependencies:
- cross-fetch "^3.1.5"
- fbjs-css-vars "^1.0.0"
- loose-envify "^1.0.0"
- object-assign "^4.1.0"
- promise "^7.1.1"
- setimmediate "^1.0.5"
- ua-parser-js "^1.0.35"
-
feed@^4.2.2:
version "4.2.2"
resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e"
@@ -5173,15 +5128,7 @@ flatted@^3.1.0:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
-flux@~4.0.1:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.4.tgz#9661182ea81d161ee1a6a6af10d20485ef2ac572"
- integrity sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==
- dependencies:
- fbemitter "^3.0.0"
- fbjs "^3.0.1"
-
-follow-redirects@^1.0.0, follow-redirects@^1.14.9:
+follow-redirects@^1.0.0:
version "1.15.3"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a"
integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==
@@ -5222,15 +5169,6 @@ form-data-encoder@^2.1.2:
resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5"
integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==
-form-data@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
- integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.8"
- mime-types "^2.1.12"
-
format@^0.2.0:
version "0.2.2"
resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b"
@@ -5378,6 +5316,18 @@ glob-to-regexp@^0.4.1:
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
+glob@7.1.6:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0:
version "7.2.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
@@ -5864,11 +5814,6 @@ immer@^9.0.7:
resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176"
integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==
-immutable@^4.0.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.0.tgz#eb1738f14ffb39fd068b1dbe1296117484dd34be"
- integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==
-
import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1:
version "3.3.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
@@ -6587,7 +6532,7 @@ jju@^1.4.0, jju@~1.4.0:
resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a"
integrity sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==
-joi@^17.7.0, joi@^17.9.2:
+joi@^17.9.2:
version "17.11.0"
resolved "https://registry.yarnpkg.com/joi/-/joi-17.11.0.tgz#aa9da753578ec7720e6f0ca2c7046996ed04fc1a"
integrity sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==
@@ -6846,11 +6791,6 @@ locate-path@^7.1.0:
dependencies:
p-locate "^6.0.0"
-lodash.curry@^4.0.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170"
- integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==
-
lodash.debounce@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
@@ -6866,11 +6806,6 @@ lodash.flatten@^4.4.0:
resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==
-lodash.flow@^3.3.0:
- version "3.5.0"
- resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a"
- integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==
-
lodash.get@^4.4.2:
version "4.4.2"
resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
@@ -7704,7 +7639,7 @@ mime-types@2.1.18:
dependencies:
mime-db "~1.33.0"
-mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34:
+mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34:
version "2.1.35"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
@@ -7757,7 +7692,7 @@ minimatch@^5.0.1:
dependencies:
brace-expansion "^2.0.1"
-minimist@^1.2.0, minimist@^1.2.7:
+minimist@^1.2.0:
version "1.2.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
@@ -7817,6 +7752,15 @@ multicast-dns@^7.2.5:
dns-packet "^5.2.2"
thunky "^1.0.2"
+mz@^2.7.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
+ integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
+ dependencies:
+ any-promise "^1.0.0"
+ object-assign "^4.0.1"
+ thenify-all "^1.0.0"
+
nanoid@^3.3.6:
version "3.3.6"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
@@ -7877,13 +7821,6 @@ node-emoji@^2.1.0:
emojilib "^2.4.0"
skin-tone "^2.0.0"
-node-fetch@^2.6.11:
- version "2.6.11"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25"
- integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==
- dependencies:
- whatwg-url "^5.0.0"
-
node-forge@^1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
@@ -7952,7 +7889,12 @@ nth-check@^2.0.1:
dependencies:
boolbase "^1.0.0"
-object-assign@^4.1.0, object-assign@^4.1.1:
+nullthrows@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1"
+ integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==
+
+object-assign@^4.0.1, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
@@ -8289,10 +8231,10 @@ pify@^4.0.1:
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
-pirates@^4.0.4:
- version "4.0.5"
- resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
- integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==
+pirates@^4.0.1, pirates@^4.0.4:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9"
+ integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
pkg-dir@^4.2.0:
version "4.2.0"
@@ -8644,13 +8586,13 @@ pretty-time@^1.1.0:
resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e"
integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==
-prism-react-renderer@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-2.1.0.tgz#a2f418451647412ea73d18cfe363fea20e419f9d"
- integrity sha512-I5cvXHjA1PVGbGm1MsWCpvBCRrYyxEri0MC7/JbfIfYfcXAxHyO5PaUjs3A8H5GW6kJcLhTHxxMaOZZpRZD2iQ==
+prism-react-renderer@^2.0.6, prism-react-renderer@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-2.3.0.tgz#5f8f615af6af8201a0b734bd8c946df3d818ea54"
+ integrity sha512-UYRg2TkVIaI6tRVHC5OJ4/BxqPUxJkJvq/odLT/ykpt1zGYXooNperUxQcCvi87LyRnR4nCh81ceOA+e7nrydg==
dependencies:
"@types/prismjs" "^1.26.0"
- clsx "^1.2.1"
+ clsx "^2.0.0"
prismjs@^1.29.0:
version "1.29.0"
@@ -8662,13 +8604,6 @@ process-nextick-args@^2.0.0, process-nextick-args@~2.0.0:
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-promise@^7.1.1:
- version "7.3.1"
- resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
- integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
- dependencies:
- asap "~2.0.3"
-
prompts@^2.0.1, prompts@^2.4.0, prompts@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
@@ -8721,11 +8656,6 @@ pupa@^3.1.0:
dependencies:
escape-goat "^4.0.0"
-pure-color@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e"
- integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==
-
qs@6.11.0:
version "6.11.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
@@ -8787,16 +8717,6 @@ rc@1.2.8:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
-react-base16-styling@~0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c"
- integrity sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==
- dependencies:
- base16 "^1.0.0"
- lodash.curry "^4.0.1"
- lodash.flow "^3.3.0"
- pure-color "^1.2.0"
-
react-dev-utils@^12.0.1:
version "12.0.1"
resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73"
@@ -8866,10 +8786,19 @@ react-is@^18.0.0:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
-react-lifecycles-compat@~3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
- integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
+react-json-view-lite@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/react-json-view-lite/-/react-json-view-lite-1.2.1.tgz#c59a0bea4ede394db331d482ee02e293d38f8218"
+ integrity sha512-Itc0g86fytOmKZoIoJyGgvNqohWSbh3NXIKNgH6W6FT9PC1ck4xas1tT3Rr/b3UlFXyA9Jjaw9QSXdZy2JwGMQ==
+
+react-live@^4.1.5:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/react-live/-/react-live-4.1.5.tgz#a4fa4cfdcad763503a209a29bace3339764fdfb1"
+ integrity sha512-ul3Zwvqvh6KTg8j7xGCT26+c8J9vQ+LFUrZCbrrrzEExuVB/39s1GKG3NsywnL+aGAjpfnUTaVCe7KlKIvVPiw==
+ dependencies:
+ prism-react-renderer "^2.0.6"
+ sucrase "^3.31.0"
+ use-editable "^2.3.3"
react-loadable-ssr-addon-v5-slorber@^1.0.1:
version "1.0.1"
@@ -8913,15 +8842,6 @@ react-router@5.3.4, react-router@^5.3.4:
tiny-invariant "^1.0.2"
tiny-warning "^1.0.0"
-react-textarea-autosize@~8.3.2:
- version "8.3.4"
- resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz#270a343de7ad350534141b02c9cb78903e553524"
- integrity sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ==
- dependencies:
- "@babel/runtime" "^7.10.2"
- use-composed-ref "^1.3.0"
- use-latest "^1.2.1"
-
react@^18.0.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
@@ -9271,13 +9191,6 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
-rxjs@^7.8.0:
- version "7.8.1"
- resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543"
- integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==
- dependencies:
- tslib "^2.1.0"
-
safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
@@ -9447,11 +9360,6 @@ serve-static@1.15.0:
parseurl "~1.3.3"
send "0.18.0"
-setimmediate@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
- integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==
-
setprototypeof@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
@@ -9786,6 +9694,19 @@ stylehacks@^5.1.1:
browserslist "^4.21.4"
postcss-selector-parser "^6.0.4"
+sucrase@^3.31.0:
+ version "3.34.0"
+ resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f"
+ integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.2"
+ commander "^4.0.0"
+ glob "7.1.6"
+ lines-and-columns "^1.1.6"
+ mz "^2.7.0"
+ pirates "^4.0.1"
+ ts-interface-checker "^0.1.9"
+
supports-color@^5.3.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
@@ -9895,6 +9816,20 @@ text-table@^0.2.0:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+thenify-all@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
+ integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==
+ dependencies:
+ thenify ">= 3.1.0 < 4"
+
+"thenify@>= 3.1.0 < 4":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
+ integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
+ dependencies:
+ any-promise "^1.0.0"
+
thunky@^1.0.2:
version "1.1.0"
resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
@@ -9937,11 +9872,6 @@ totalist@^3.0.0:
resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8"
integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==
-tr46@~0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
- integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
-
trim-lines@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338"
@@ -9952,12 +9882,17 @@ trough@^2.0.0:
resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876"
integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==
+ts-interface-checker@^0.1.9:
+ version "0.1.13"
+ resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
+ integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
+
tslib@^1.8.1:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.0.3, tslib@^2.1.0, tslib@^2.6.0:
+tslib@^2.0.3, tslib@^2.6.0:
version "2.6.2"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
@@ -10031,11 +9966,6 @@ typescript@5.0.4:
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b"
integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==
-ua-parser-js@^1.0.35:
- version "1.0.35"
- resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.35.tgz#c4ef44343bc3db0a3cbefdf21822f1b1fc1ab011"
- integrity sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==
-
undertaker-registry@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/undertaker-registry/-/undertaker-registry-1.0.1.tgz#5e4bda308e4a8a2ae584f9b9a4359a499825cc50"
@@ -10222,22 +10152,10 @@ url-loader@^4.1.1:
mime-types "^2.1.27"
schema-utils "^3.0.0"
-use-composed-ref@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda"
- integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==
-
-use-isomorphic-layout-effect@^1.1.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb"
- integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==
-
-use-latest@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2"
- integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==
- dependencies:
- use-isomorphic-layout-effect "^1.1.1"
+use-editable@^2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/use-editable/-/use-editable-2.3.3.tgz#a292fe9ba4c291cd28d1cc2728c75a5fc8d9a33f"
+ integrity sha512-7wVD2JbfAFJ3DK0vITvXBdpd9JAz5BcKAAolsnLBuBn6UDDwBGuCIAGvR3yA2BNKm578vAMVHFCWaOcA+BhhiA==
util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
version "1.0.2"
@@ -10313,17 +10231,6 @@ vfile@^6.0.0, vfile@^6.0.1:
unist-util-stringify-position "^4.0.0"
vfile-message "^4.0.0"
-wait-on@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-7.0.1.tgz#5cff9f8427e94f4deacbc2762e6b0a489b19eae9"
- integrity sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==
- dependencies:
- axios "^0.27.2"
- joi "^17.7.0"
- lodash "^4.17.21"
- minimist "^1.2.7"
- rxjs "^7.8.0"
-
walker@^1.0.8:
version "1.0.8"
resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"
@@ -10351,11 +10258,6 @@ web-namespaces@^2.0.0:
resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692"
integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==
-webidl-conversions@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
- integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
-
webpack-bundle-analyzer@^4.9.0:
version "4.9.1"
resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz#d00bbf3f17500c10985084f22f1a2bf45cb2f09d"
@@ -10494,14 +10396,6 @@ websocket-extensions@>=0.1.1:
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
-whatwg-url@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
- integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
- dependencies:
- tr46 "~0.0.3"
- webidl-conversions "^3.0.0"
-
which@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"