feat: migrate to the realm rc version

This commit is contained in:
Nazarii Mykhailets
2024-05-28 17:09:54 +03:00
parent 1ca4997c1c
commit 7402168061
46 changed files with 472 additions and 1322 deletions

View File

@@ -1,12 +1,11 @@
import * as React from "react"; import * as React from "react";
import styled from "styled-components"; import styled from "styled-components";
import { useThemeConfig } from "@theme/hooks/useThemeConfig"; import { useThemeConfig, useThemeHooks } from "@redocly/theme/core/hooks";
import { LanguagePicker } from "@theme/i18n/LanguagePicker"; import { LanguagePicker } from "@redocly/theme/components/LanguagePicker/LanguagePicker";
import { useI18n, useTranslate } from "@portal/hooks";
import { slugify } from "../../helpers"; import { slugify } from "../../helpers";
import { Link } from "@portal/Link"; import { Link } from "@redocly/theme/components/Link/Link";
import { ColorModeSwitcher } from "@theme/components/ColorModeSwitcher/ColorModeSwitcher"; import { ColorModeSwitcher } from "@redocly/theme/components/ColorModeSwitcher/ColorModeSwitcher";
import { Search } from "@theme/components/Search/Search"; import { Search } from "@redocly/theme/components/Search/Search";
// @ts-ignore // @ts-ignore
@@ -20,6 +19,7 @@ const alertBanner = {
export function Navbar(props) { export function Navbar(props) {
// const [isOpen, setIsOpen] = useMobileMenu(false); // const [isOpen, setIsOpen] = useMobileMenu(false);
const themeConfig = useThemeConfig(); const themeConfig = useThemeConfig();
const { useI18n } = useThemeHooks();
const { changeLanguage } = useI18n(); const { changeLanguage } = useI18n();
const menu = themeConfig.navbar?.items; const menu = themeConfig.navbar?.items;
const logo = themeConfig.logo; const logo = themeConfig.logo;
@@ -104,10 +104,10 @@ export function Navbar(props) {
<Search className="topnav-search" /> <Search className="topnav-search" />
</div> </div>
<div id="topnav-language" className="nav-item"> <div id="topnav-language" className="nav-item">
<LanguagePicker onChangeLanguage={changeLanguage} onlyIcon /> <LanguagePicker onChangeLanguage={changeLanguage} onlyIcon alignment="end" />
</div> </div>
<div id="topnav-theme" className="nav-item"> <div id="topnav-theme" className="nav-item">
<StyledColorModeSwitcher /> <ColorModeSwitcher />
</div> </div>
</NavItems> </NavItems>
</TopNavCollapsible> </TopNavCollapsible>
@@ -116,10 +116,6 @@ export function Navbar(props) {
); );
} }
const StyledColorModeSwitcher = styled(ColorModeSwitcher)`
padding: 10px;
`;
export function AlertBanner(props) { export function AlertBanner(props) {
const { message, button, link } = props; const { message, button, link } = props;
return ( return (
@@ -151,6 +147,7 @@ export function TopNavCollapsible(props) {
export function NavDropdown(props) { export function NavDropdown(props) {
const { label, items, pathPrefix, labelTranslationKey } = props; const { label, items, pathPrefix, labelTranslationKey } = props;
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const dropdownGroups = items.map((item, index) => { const dropdownGroups = items.map((item, index) => {
@@ -283,6 +280,7 @@ export function MobileMenuIcon() {
} }
export function GetStartedButton() { export function GetStartedButton() {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
return ( return (

View File

@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import dynamicReact from '@markdoc/markdoc/dist/react'; import dynamicReact from '@markdoc/markdoc/dist/react';
import { Link } from '@portal/Link'; import { Link } from '@redocly/theme/components/Link/Link';
export interface XRPLCardProps { export interface XRPLCardProps {
title: string, title: string,

View File

@@ -2,8 +2,8 @@ import * as React from 'react';
import { useLocation } from 'react-router-dom'; import { useLocation } from 'react-router-dom';
// @ts-ignore // @ts-ignore
import dynamicReact from '@markdoc/markdoc/dist/react'; import dynamicReact from '@markdoc/markdoc/dist/react';
import { usePageSharedData, useTranslate } from '@portal/hooks'; import { Link } from '@redocly/theme/components/Link/Link';
import { Link } from '@portal/Link'; import { useThemeHooks } from '@redocly/theme/core/hooks'
import { idify } from '../helpers'; import { idify } from '../helpers';
export {default as XRPLoader} from '../components/XRPLoader'; export {default as XRPLoader} from '../components/XRPLoader';
@@ -11,6 +11,7 @@ export { XRPLCard, CardGrid } from '../components/XRPLCard';
export function IndexPageItems() { export function IndexPageItems() {
const { usePageSharedData } = useThemeHooks();
const data = usePageSharedData('index-page-items') as any[]; const data = usePageSharedData('index-page-items') as any[];
return ( return (
<div className="children-display"> <div className="children-display">
@@ -148,6 +149,7 @@ function shieldsIoEscape(s: string) {
} }
export function NotEnabled() { export function NotEnabled() {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
return ( return (
<span className="status not_enabled" title={translate("This feature is not currently enabled on the production XRP Ledger.")}><i className="fa fa-flask"></i></span> <span className="status not_enabled" title={translate("This feature is not currently enabled on the production XRP Ledger.")}><i className="fa fa-flask"></i></span>

View File

@@ -163,29 +163,26 @@ ul.nav.navbar-nav {
--color-primary-text: #161087; --color-primary-text: #161087;
--color-primary-text-active: #0d086e;*/ --color-primary-text-active: #0d086e;*/
--link-text-color: #fff; --link-color-primary: #fff;
--link-decoration: underline; --link-decoration: underline;
--link-font-weight: var(--font-weight-regular); --link-font-weight: var(--font-weight-regular);
--link-hover-text-color: #9a52ff; --link-color-primary-hover: #9a52ff;
--link-hover-decoration: underline; --link-decoration-hover: underline;
--link-active-decoration: underline; --link-color-visited: #fff;
--link-active-text-color: var(--color-blue-7);
--link-visited-text-color: #fff;
--link-visited-decoration: underline; --link-visited-decoration: underline;
--bg-base: var(--color-gray-10); --bg-color: var(--color-gray-10);
--bg-raised: var(--color-gray-8); --bg-color-raised: var(--color-gray-8);
--background-color: var(--bg-base); --background-color: var(--bg-color);
--font-family-base: 'Work Sans', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; --font-family-base: 'Work Sans', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
--heading-font-family: var(--font-family-base); --heading-font-family: var(--font-family-base);
--inline-code-font-family: "Space Mono", monospace; --inline-code-font-family: "Space Mono", monospace;
--inline-code-text-color: #5beb9d; /* $green-400 */ --inline-code-text-color: #5beb9d; /* $green-400 */
--inline-code-background-color: #0a2e1b; /* $green-1000 */ --inline-code-bg-color: #0a2e1b; /* $green-1000 */
--inline-code-border-radius: 0; --inline-code-border-radius: 0;
--heading-anchor-color: #9a52ff; --heading-anchor-color: #9a52ff;
@@ -197,65 +194,64 @@ ul.nav.navbar-nav {
--h5-font-size: 1.25rem; --h5-font-size: 1.25rem;
--sidebar-border-color: transparent; --sidebar-border-color: transparent;
--sidebar-background-color: transparent; --sidebar-bg-color: transparent;
--sidebar-margin-horizontal: 32px;
--search-item-active-text-color: #E8E9E7;
--border-radius-md: 4px; --border-radius-md: 4px;
--code-block-background-color: #232325; --code-block-bg-color: #232325;
--code-block-controls-background-color: #232325; --code-block-controls-bg-color: #232325;
--code-block-controls-border: none; --code-block-controls-border: none;
--code-block-border-color: #232325;
--code-block-padding: 0 2rem 1.5rem 2rem; --code-block-padding: 0 2rem 1.5rem 2rem;
--code-block-border-radius: 4px;
--breadcrumbs-margin-bottom: 0.5rem; --breadcrumbs-margin-bottom: 0.5rem;
--breadcrumbs-text-color: var(--color-gray-4); --breadcrumbs-text-color: var(--color-gray-4);
--breadcrumbs-gap: 0 8px; --breadcrumbs-gap: 0 8px;
--breadcrumbs-font-size: 0.833em; --breadcrumbs-font-size: 0.833em;
--language-picker-min-height: 38px; --footer-bg-color: transparent;
--footer-column-divider-color: transparent;
--footer-background-color: transparent;
--footer-dividing-border-color: transparent;
--footer-border-color: transparent; --footer-border-color: transparent;
--footer-title-font-weight: 600; --footer-title-font-weight: 600;
--footer-title-font-size: 1rem; --footer-title-font-size: 1rem;
--footer-title-text-color: #A2A2A4; --footer-title-text-color: #A2A2A4;
--sidebar-margin-horizontal: 32px; --menu-item-padding-horizontal: 0px;
--sidebar-item-padding-horizontal: 0;
} }
:root.light { :root.light {
--link-hover-text-color: #4A00B2; --link-color-primary-hover: #4A00B2;
--link-visited-text-color: #000; --link-color-visited: #000;
--text-secondary: #000; --text-color-secondary: #000;
--code-block-background-color: #E0E0E1; --code-block-bg-color: #E0E0E1;
--code-block-controls-background-color: #E0E0E1; --code-block-controls-bg-color: #E0E0E1;
--code-block-controls-border: none; --code-block-controls-border: none;
--code-block-border-color: #E0E0E1; --md-tabs-active-tab-bg-color: #C1C1C2;
--md-tabs-active-tab-background-color: #C1C1C2;
--code-block-tokens-function-color: #B23C00; --code-block-tokens-function-color: #B23C00;
--code-block-tokens-operator-color: #000; --code-block-tokens-operator-color: #000;
--code-block-tokens-comment-color: #343437; --code-block-tokens-comment-color: #343437;
--code-block-tokens-string-color: #145C35; --code-block-tokens-string-color: #145C35;
--inline-code-background-color: #E0E0E1; --inline-code-bg-color: #E0E0E1;
--search-trigger-bg-color: #E0E0E1;
--search-trigger-color: #838386;
--search-trigger-background-color: #E0E0E1;
--search-trigger-text-color: #838386;
--language-picker-border-color: #C1C1C2; --language-picker-border-color: #C1C1C2;
--language-picker-background-color: #E0E0E1; --language-picker-background-color: #E0E0E1;
--select-list-background-color: #E0E0E1; --select-list-bg-color: #E0E0E1;
--footer-title-text-color: #000; --footer-title-text-color: #000;
--bg-base: var(--color-gray-1); --bg-color: var(--color-gray-1);
--bg-raised: var(--color-gray-2); --bg-color-raised: var(--color-gray-2);
--button-background-color: var(--color-gray-2); --button-content-color-link: #000;
} }
:root .form-control-plaintext { :root .form-control-plaintext {
color: var(--text-color); color: var(--text-color);
} }
[data-component-name="Search/SearchTrigger"] > div {
justify-content: start;
width: 100%;
}

View File

@@ -1,5 +1,5 @@
import * as React from "react"; import * as React from "react";
import { useTranslate } from "@portal/hooks"; import { useThemeHooks } from '@redocly/theme/core/hooks';
export const frontmatter = { export const frontmatter = {
seo: { seo: {
@@ -9,6 +9,7 @@ export const frontmatter = {
}; };
export default function History() { export default function History() {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const [openSections, setOpenSections] = React.useState({}); const [openSections, setOpenSections] = React.useState({});

View File

@@ -1,5 +1,5 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { useTranslate } from "@portal/hooks"; import { useThemeHooks } from '@redocly/theme/core/hooks';
import mapDark from "../static/js/impact/mapDark.json"; import mapDark from "../static/js/impact/mapDark.json";
import mapLight from "../static/js/impact/mapLight.json"; import mapLight from "../static/js/impact/mapLight.json";
import { useLottie } from "lottie-react"; import { useLottie } from "lottie-react";
@@ -16,6 +16,7 @@ export const frontmatter = {
export default function Impact() { export default function Impact() {
const theme = useThemeFromClassList(["dark", "light"]); const theme = useThemeFromClassList(["dark", "light"]);
const [videoVisible, setVideoVisible] = useState(false); // State to control visibility const [videoVisible, setVideoVisible] = useState(false); // State to control visibility
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const handleVideoClick = () => { const handleVideoClick = () => {
setVideoVisible(true); // Show the iframe setVideoVisible(true); // Show the iframe

View File

@@ -1,5 +1,5 @@
import * as React from "react"; import * as React from "react";
import { useTranslate } from "@portal/hooks"; import { useThemeHooks } from '@redocly/theme/core/hooks';
export const frontmatter = { export const frontmatter = {
seo: { seo: {
@@ -27,6 +27,7 @@ const faqs = [
]; ];
export default function XrplOverview() { export default function XrplOverview() {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const [videoOne, setVideoOne] = React.useState(false); const [videoOne, setVideoOne] = React.useState(false);
const [currentVideoUrl, setCurrentVideoUrl] = React.useState(""); const [currentVideoUrl, setCurrentVideoUrl] = React.useState("");

View File

@@ -1,5 +1,5 @@
import * as React from "react"; import * as React from "react";
import { useTranslate } from "@portal/hooks"; import { useThemeHooks } from '@redocly/theme/core/hooks';
import numLight from "../static/js/ecosystem/numbers-animation-light.json"; import numLight from "../static/js/ecosystem/numbers-animation-light.json";
import numDark from "../static/js/ecosystem/numbers-animation.json"; import numDark from "../static/js/ecosystem/numbers-animation.json";
import arrow from "../static/js/ecosystem/arrow-animation.json"; import arrow from "../static/js/ecosystem/arrow-animation.json";
@@ -473,6 +473,7 @@ const uses = [
export default function Uses() { export default function Uses() {
const theme = useThemeFromClassList(["dark", "light"]); const theme = useThemeFromClassList(["dark", "light"]);
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const [displayModal, setDisplayModal] = React.useState(false); const [displayModal, setDisplayModal] = React.useState(false);
const [currentIndex, setCurrentIndex] = React.useState(0); const [currentIndex, setCurrentIndex] = React.useState(0);

View File

@@ -1,5 +1,5 @@
import * as React from "react"; import * as React from "react";
import { useTranslate } from "@portal/hooks"; import { useThemeHooks } from '@redocly/theme/core/hooks';
import briefcaseIcon from "../static/img/icons/briefcase.svg"; import briefcaseIcon from "../static/img/icons/briefcase.svg";
import userIcon from "../static/img/icons/user.svg"; import userIcon from "../static/img/icons/user.svg";
export const frontmatter = { export const frontmatter = {
@@ -72,6 +72,7 @@ const exchanges = [
]; ];
export default function XrpOverview() { export default function XrpOverview() {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const [activeSection, setActiveSection] = React.useState(null); const [activeSection, setActiveSection] = React.useState(null);

View File

@@ -1,6 +1,6 @@
import * as React from "react"; import * as React from "react";
import { useState, useRef, useEffect } from "react"; import { useState, useRef, useEffect } from "react";
import { useTranslate, usePageSharedData } from "@portal/hooks"; import { useThemeHooks } from "@redocly/theme/core/hooks";
import moment from "moment"; import moment from "moment";
export const frontmatter = { export const frontmatter = {
@@ -24,6 +24,7 @@ const categories = {
}; };
export default function Index() { export default function Index() {
const { useTranslate, usePageSharedData } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const { blogPosts } = usePageSharedData<any>("blog-posts"); const { blogPosts } = usePageSharedData<any>("blog-posts");

View File

@@ -1,5 +1,5 @@
import * as React from 'react'; import * as React from 'react';
import { useTranslate } from '@portal/hooks'; import { useThemeHooks } from '@redocly/theme/core/hooks';
export const frontmatter = { export const frontmatter = {
seo: { seo: {
@@ -13,6 +13,7 @@ false
const target= {prefix: ''}; // TODO: fixme const target= {prefix: ''}; // TODO: fixme
export default function Ambassadors() { export default function Ambassadors() {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
return ( return (

View File

@@ -1,5 +1,5 @@
import * as React from "react"; import * as React from "react";
import { useTranslate } from "@portal/hooks"; import { useThemeHooks } from '@redocly/theme/core/hooks';
export const frontmatter = { export const frontmatter = {
seo: { seo: {
@@ -13,6 +13,7 @@ false;
const target = { prefix: "" }; // TODO: fixme const target = { prefix: "" }; // TODO: fixme
export default function Funding() { export default function Funding() {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
return ( return (

View File

@@ -1,6 +1,6 @@
import { useState, useMemo } from "react"; import { useState, useMemo } from "react";
import * as React from "react"; import * as React from "react";
import { useTranslate } from "@portal/hooks"; import { useThemeHooks } from '@redocly/theme/core/hooks';
const moment = require("moment"); const moment = require("moment");
const amaImage = require("../static/img/events/AMAs.png") const amaImage = require("../static/img/events/AMAs.png")
const hackathon = require("../static/img/events/Hackathons.png") const hackathon = require("../static/img/events/Hackathons.png")
@@ -686,6 +686,7 @@ const events = [
]; ];
export default function Events() { export default function Events() {
const { useTranslate} = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const { past, upcoming } = useMemo(() => categorizeDates(events), []); const { past, upcoming } = useMemo(() => categorizeDates(events), []);

View File

@@ -1,5 +1,5 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { useTranslate } from "@portal/hooks"; import { useThemeHooks } from '@redocly/theme/core/hooks';
import moment from "moment"; import moment from "moment";
export const frontmatter = { export const frontmatter = {
@@ -167,6 +167,7 @@ const events = [
]; ];
const { nearestDateDiff, nearestEvent } = findNearestUpcomingEvent(events); const { nearestDateDiff, nearestEvent } = findNearestUpcomingEvent(events);
const XrplEventsAndCarouselSection = ({ events }) => { const XrplEventsAndCarouselSection = ({ events }) => {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const [currentIndex, setCurrentIndex] = useState(7); const [currentIndex, setCurrentIndex] = useState(7);
@@ -302,6 +303,7 @@ const XrplEventsAndCarouselSection = ({ events }) => {
}; };
const CommunityPage: React.FC = () => { const CommunityPage: React.FC = () => {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
return ( return (
<div className="no-sidebar landing page-community"> <div className="no-sidebar landing page-community">

View File

@@ -1,5 +1,5 @@
import * as React from 'react'; import * as React from 'react';
import { useTranslate } from '@portal/hooks'; import { useThemeHooks } from '@redocly/theme/core/hooks';
export const frontmatter = { export const frontmatter = {
seo: { seo: {
@@ -208,6 +208,7 @@ function VideoCard(props: { url: string; title: string; src: string }) {
} }
function DevToolCard(props: { link: string; title: string; description: string }) { function DevToolCard(props: { link: string; title: string; description: string }) {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const { link, title, description } = props; const { link, title, description } = props;
return ( return (
@@ -228,6 +229,7 @@ function PrimaryButton(props: { href: string; text: string; isArrowUp: boolean }
} }
export default function Docs() { export default function Docs() {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
return ( return (

View File

@@ -1,4 +1,4 @@
import { useTranslate } from '@portal/hooks'; import { useThemeHooks } from '@redocly/theme/core/hooks';
export const frontmatter = { export const frontmatter = {
seo: { seo: {
@@ -103,6 +103,7 @@ const features = [
]; ];
export default function Index() { export default function Index() {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
return ( return (

1552
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -15,7 +15,7 @@
"@codemirror/state": "6.3.3", "@codemirror/state": "6.3.3",
"@codemirror/view": "^6.22.2", "@codemirror/view": "^6.22.2",
"@lezer/highlight": "^1.2.0", "@lezer/highlight": "^1.2.0",
"@redocly/realm": "^0.82.4", "@redocly/realm": "0.83.0-rc.1",
"@uiw/codemirror-themes": "4.21.21", "@uiw/codemirror-themes": "4.21.21",
"@uiw/react-codemirror": "^4.21.21", "@uiw/react-codemirror": "^4.21.21",
"@xrplf/isomorphic": "^1.0.0-beta.1", "@xrplf/isomorphic": "^1.0.0-beta.1",

View File

@@ -1,5 +1,5 @@
import * as React from 'react'; import * as React from 'react';
import { usePageSharedData, useTranslate } from '@portal/hooks'; import { useThemeHooks } from '@redocly/theme/core/hooks';
export const frontmatter = { export const frontmatter = {
seo: { seo: {
@@ -24,6 +24,7 @@ const target = {
}; };
export default function CodeSamples() { export default function CodeSamples() {
const { useTranslate, usePageSharedData } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const { codeSamples, langs } = usePageSharedData<any>('code-samples'); const { codeSamples, langs } = usePageSharedData<any>('code-samples');

View File

@@ -1,6 +1,6 @@
import clsx from 'clsx' import clsx from 'clsx'
import * as React from 'react'; import * as React from 'react';
import { useTranslate } from '@portal/hooks'; import { useThemeHooks } from '@redocly/theme/core/hooks';
const alertStyle = { const alertStyle = {
position: "relative", position: "relative",
@@ -30,6 +30,7 @@ interface AlertTemplateProps {
} }
export default function AlertTemplate ({ message, options, style, close }: AlertTemplateProps): React.JSX.Element { export default function AlertTemplate ({ message, options, style, close }: AlertTemplateProps): React.JSX.Element {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate() const { translate } = useTranslate()
return( return(
<div className={clsx("bootstrap-growl alert alert-dismissible", typeToClass(options.type))} style={{ ...alertStyle, ...style }}> <div className={clsx("bootstrap-growl alert alert-dismissible", typeToClass(options.type))} style={{ ...alertStyle, ...style }}>

View File

@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { useState } from 'react'; import { useState } from 'react';
import { useTranslate } from '@portal/hooks'; import { useThemeHooks } from '@redocly/theme/core/hooks';
import { clsx } from 'clsx' import { clsx } from 'clsx'
import { isValidAddress } from 'xrpl' import { isValidAddress } from 'xrpl'
@@ -27,6 +27,7 @@ export function DestinationAddressInput(
setDestinationAddress, setDestinationAddress,
} : DestinationAddressInputProps } : DestinationAddressInputProps
): React.JSX.Element { ): React.JSX.Element {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate() const { translate } = useTranslate()
const [ isValidDestinationAddress, setIsValidDestinationAddress ] = useState(true) const [ isValidDestinationAddress, setIsValidDestinationAddress ] = useState(true)

View File

@@ -1,5 +1,5 @@
import * as React from 'react'; import * as React from 'react';
import { useTranslate } from '@portal/hooks'; import { useThemeHooks } from '@redocly/theme/core/hooks';
import { clsx } from 'clsx' import { clsx } from 'clsx'
import { Client, type Wallet, type TxResponse, dropsToXrp } from 'xrpl' import { Client, type Wallet, type TxResponse, dropsToXrp } from 'xrpl'
@@ -176,6 +176,7 @@ export function InitButton({
isInitEnabled: boolean, isInitEnabled: boolean,
toInit: InitializationProps toInit: InitializationProps
}): React.JSX.Element { }): React.JSX.Element {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate() const { translate } = useTranslate()
return (<div className="form-group"> return (<div className="form-group">

View File

@@ -1,7 +1,8 @@
import * as React from 'react'; import * as React from 'react';
import { useTranslate } from "@portal/hooks"; import { useThemeHooks } from '@redocly/theme/core/hooks';
export const Loader = () => { export const Loader = () => {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
return <img className="throbber" src="/img/xrp-loader-96.png" alt={translate("(loading)")} /> return <img className="throbber" src="/img/xrp-loader-96.png" alt={translate("(loading)")} />

View File

@@ -1,5 +1,5 @@
import * as React from 'react'; import * as React from 'react';
import { useTranslate } from '@portal/hooks'; import { useThemeHooks } from '@redocly/theme/core/hooks';
import { clsx } from 'clsx' import { clsx } from 'clsx'
export const CLASS_GOOD = "badge badge-success" export const CLASS_GOOD = "badge badge-success"
@@ -60,6 +60,7 @@ export function LogEntry({
status status
}: LogEntryItem) }: LogEntryItem)
{ {
const { useTranslate } = useThemeHooks();
const {translate} = useTranslate() const {translate} = useTranslate()
let icon = undefined let icon = undefined
if(!!(status?.icon)) { if(!!(status?.icon)) {

View File

@@ -1,5 +1,5 @@
import React, { JSX, ReactElement, ReactNode } from 'react'; import React, { JSX, ReactElement, ReactNode } from 'react';
import { useTranslate } from '@portal/hooks'; import { useThemeHooks } from '@redocly/theme/core/hooks';
interface ModalProps { interface ModalProps {
id: string // used for targeting animations id: string // used for targeting animations
@@ -48,6 +48,7 @@ export const Modal = ({title, footer, children, onClose, id}: ModalProps) => {
} }
export const ModalCloseBtn = ({onClick}) => { export const ModalCloseBtn = ({onClick}) => {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
return <button return <button
@@ -61,6 +62,7 @@ export const ModalCloseBtn = ({onClick}) => {
} }
export const ModalClipboardBtn = ({textareaRef}) => { export const ModalClipboardBtn = ({textareaRef}) => {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
return <button return <button

View File

@@ -1,5 +1,5 @@
import * as React from 'react'; import * as React from 'react';
import { useTranslate } from '@portal/hooks'; import { useThemeHooks } from '@redocly/theme/core/hooks';
import { clsx } from 'clsx' import { clsx } from 'clsx'
import { type Wallet } from 'xrpl' import { type Wallet } from 'xrpl'
@@ -16,6 +16,7 @@ export function StatusSidebar({
connectionReady: boolean, connectionReady: boolean,
txHistory: React.JSX.Element[], txHistory: React.JSX.Element[],
}) { }) {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
return (<aside className="right-sidebar col-lg-6 order-lg-4"> return (<aside className="right-sidebar col-lg-6 order-lg-4">

View File

@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { useState } from 'react' import { useState } from 'react'
import { useTranslate } from '@portal/hooks'; import { useThemeHooks } from '@redocly/theme/core/hooks';
import { LogEntry, LogEntryItem } from './LogEntry'; import { LogEntry, LogEntryItem } from './LogEntry';
/** /**
@@ -42,6 +42,7 @@ export interface TextLookupFormProps {
* @returns A single-entry form which displays logs after submitting. * @returns A single-entry form which displays logs after submitting.
*/ */
export function TextLookupForm(props: TextLookupFormProps) { export function TextLookupForm(props: TextLookupFormProps) {
const { useTranslate } = useThemeHooks()
const { translate } = useTranslate() const { translate } = useTranslate()
const { title, description, buttonDescription, formPlaceholder, handleSubmit } = props const { title, description, buttonDescription, formPlaceholder, handleSubmit } = props

View File

@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { useState } from 'react' import { useState } from 'react'
import { useTranslate } from '@portal/hooks'; import { useThemeHooks } from '@redocly/theme/core/hooks';
import { clsx } from 'clsx' import { clsx } from 'clsx'
import { type Transaction, type Wallet } from 'xrpl' import { type Transaction, type Wallet } from 'xrpl'
@@ -65,6 +65,7 @@ export function TransactionButton({
checkBox, checkBox,
customOnClick customOnClick
}: TransactionButtonProps ) { }: TransactionButtonProps ) {
const { useTranslate } = useThemeHooks()
const { translate } = useTranslate() const { translate } = useTranslate()
const [waitingForTransaction, setWaitingForTransaction] = useState(false) const [waitingForTransaction, setWaitingForTransaction] = useState(false)

View File

@@ -1,4 +1,4 @@
import { useTranslate } from '@portal/hooks' import { useThemeHooks } from '@redocly/theme/core/hooks';
import { ReactElement, useState } from 'react'; import { ReactElement, useState } from 'react';
import JsonView from 'react18-json-view' import JsonView from 'react18-json-view'
@@ -26,6 +26,7 @@ export const RPCResponseGroup = ({ response, anchor, customExpanded, customExpan
} }
const RPCResponseGroupExpanders = ({ customExpanded, customExpandedText, setExpanded }) => { const RPCResponseGroupExpanders = ({ customExpanded, customExpandedText, setExpanded }) => {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
return <ul className="nav nav-pills"> return <ul className="nav nav-pills">

View File

@@ -1,4 +1,4 @@
import { useTranslate } from "@portal/hooks"; import { useThemeHooks } from '@redocly/theme/core/hooks';
import { Connection } from './types'; import { Connection } from './types';
import { ChangeEvent } from 'react'; import { ChangeEvent } from 'react';
import { Modal } from '../Modal'; import { Modal } from '../Modal';
@@ -19,6 +19,7 @@ export const ConnectionModal: React.FC<ConnectionProps> = ({
closeConnectionModal, closeConnectionModal,
connections, connections,
}) => { }) => {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const handleConnectionChange = (event: ChangeEvent<HTMLInputElement>) => { const handleConnectionChange = (event: ChangeEvent<HTMLInputElement>) => {
const selectedValue = event.target.value; const selectedValue = event.target.value;

View File

@@ -1,4 +1,4 @@
import { useTranslate } from "@portal/hooks"; import { useThemeHooks } from '@redocly/theme/core/hooks';
import { Connection } from './types'; import { Connection } from './types';
import { useRef, useState } from 'react'; import { useRef, useState } from 'react';
import { Modal, ModalClipboardBtn, ModalCloseBtn } from '../Modal'; import { Modal, ModalClipboardBtn, ModalCloseBtn } from '../Modal';
@@ -37,6 +37,7 @@ export const CurlModal: React.FC<CurlProps> = ({
selectedConnection, selectedConnection,
}) => { }) => {
const curlRef = useRef(null); const curlRef = useRef(null);
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const footer = <> const footer = <>
<ModalClipboardBtn textareaRef={curlRef} /> <ModalClipboardBtn textareaRef={curlRef} />

View File

@@ -1,5 +1,5 @@
import React, { useRef, useState } from 'react'; import React, { useRef, useState } from 'react';
import { useTranslate } from "@portal/hooks"; import { useThemeHooks } from '@redocly/theme/core/hooks';
import { Connection } from './types'; import { Connection } from './types';
import { Modal, ModalClipboardBtn, ModalCloseBtn } from '../Modal'; import { Modal, ModalClipboardBtn, ModalCloseBtn } from '../Modal';
@@ -17,6 +17,7 @@ const PermalinkModal: React.FC<PermaLinkProps> = ({
currentBody, currentBody,
selectedConnection selectedConnection
}) => { }) => {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const permalinkRef = useRef(null); const permalinkRef = useRef(null);

View File

@@ -1,6 +1,6 @@
import React, { Fragment } from 'react'; import React, { Fragment } from 'react';
import { useTranslate } from "@portal/hooks"; import { useThemeHooks } from '@redocly/theme/core/hooks';
import { Link } from "@portal/Link"; import { Link } from "@redocly/theme/components/Link/Link";
import { slugify } from "./slugify"; import { slugify } from "./slugify";
import { CommandGroup, CommandMethod } from './types'; import { CommandGroup, CommandMethod } from './types';
@@ -15,6 +15,7 @@ export const RightSideBar: React.FC<RightSideBarProps> = ({
currentMethod, currentMethod,
setCurrentMethod, setCurrentMethod,
}) => { }) => {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
return ( return (
<div className="command-list-wrapper"> <div className="command-list-wrapper">

View File

@@ -1,5 +1,5 @@
import * as React from "react"; import * as React from "react";
import { useTranslate } from "@portal/hooks"; import { useThemeHooks } from '@redocly/theme/core/hooks';
import { decode } from "ripple-binary-codec"; import { decode } from "ripple-binary-codec";
import addressCodec, { encodeNodePublic } from "ripple-address-codec"; import addressCodec, { encodeNodePublic } from "ripple-address-codec";
import { verify as keyCodecVerify } from "ripple-keypairs"; import { verify as keyCodecVerify } from "ripple-keypairs";
@@ -19,6 +19,7 @@ const TIPS =
<p>Check if the xrp-ledger.toml file is actually hosted in the /.well-known/ location at the domain in your manifest. Check your server\'s HTTPS settings and certificate, and make sure your server provides the required <a href="xrp-ledger-toml.html#cors-setup">CORS header.</a></p>; <p>Check if the xrp-ledger.toml file is actually hosted in the /.well-known/ location at the domain in your manifest. Check your server\'s HTTPS settings and certificate, and make sure your server provides the required <a href="xrp-ledger-toml.html#cors-setup">CORS header.</a></p>;
const DomainVerificationPage = () => { const DomainVerificationPage = () => {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const TOML_PATH = "/.well-known/xrp-ledger.toml"; const TOML_PATH = "/.well-known/xrp-ledger.toml";
let query_param = 0; let query_param = 0;

View File

@@ -1,5 +1,5 @@
import * as React from "react"; import * as React from "react";
import { useTranslate } from "@portal/hooks"; import { useThemeHooks } from '@redocly/theme/core/hooks';
export const frontmatter = { export const frontmatter = {
seo: { seo: {
@@ -119,6 +119,7 @@ const other = [
]; ];
export default function DevTools() { export default function DevTools() {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
return ( return (

View File

@@ -1,5 +1,5 @@
import { useTranslate } from "@portal/hooks"; import { useThemeHooks } from '@redocly/theme/core/hooks';
import { Link } from '@portal/Link'; import { Link } from '@redocly/theme/components/Link/Link';
import { useState, useEffect } from "react"; import { useState, useEffect } from "react";
import { useLocation } from "react-router-dom"; import { useLocation } from "react-router-dom";
import JsonView from 'react18-json-view' import JsonView from 'react18-json-view'
@@ -25,6 +25,7 @@ export default function RpcTool() {
const [ledgerResponse, setLedgerResponse] = useState(null); const [ledgerResponse, setLedgerResponse] = useState(null);
const [inputText, setInputText] = useState(slug ? slug.slice(1) : ""); const [inputText, setInputText] = useState(slug ? slug.slice(1) : "");
const [errorText, setErrorText] = useState(null); const [errorText, setErrorText] = useState(null);
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const [inputType, setInputType] = useState(""); const [inputType, setInputType] = useState("");
const [showResult, setShowResult] = useState(false); const [showResult, setShowResult] = useState(false);

View File

@@ -1,5 +1,5 @@
import * as React from 'react'; import * as React from 'react';
import { useTranslate } from '@portal/hooks'; import { useThemeHooks } from '@redocly/theme/core/hooks';
import axios, { AxiosError } from "axios"; import axios, { AxiosError } from "axios";
import { parse } from "smol-toml"; import { parse } from "smol-toml";
import { getListEntries } from "./ListTomlFields"; import { getListEntries } from "./ListTomlFields";
@@ -25,7 +25,8 @@ async function validateAndDisplayFields(
domainToVerify?: string, domainToVerify?: string,
filterDisplayedFieldsTo?: Function): Promise<boolean> { filterDisplayedFieldsTo?: Function): Promise<boolean> {
const { translate } = useTranslate() const { useTranslate } = useThemeHooks();
const { translate } = useTranslate();
// If there's no data, do nothing // If there's no data, do nothing
if(!fields) { if(!fields) {

View File

@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { useState } from 'react' import { useState } from 'react'
import { useTranslate } from '@portal/hooks'; import { useThemeHooks } from '@redocly/theme/core/hooks';
import AlertTemplate from './components/AlertTemplate'; import AlertTemplate from './components/AlertTemplate';
import { transitions, positions, Provider as AlertProvider } from 'react-alert' import { transitions, positions, Provider as AlertProvider } from 'react-alert'
@@ -104,6 +104,7 @@ async function onClickCreateEscrow(
} }
function TxSenderBody(): React.JSX.Element { function TxSenderBody(): React.JSX.Element {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const [client, setClient] = useState<Client | undefined>(undefined) const [client, setClient] = useState<Client | undefined>(undefined)

View File

@@ -1,6 +1,6 @@
import { useEffect, useState, useRef } from 'react'; import { useEffect, useState, useRef } from 'react';
import { useLocation } from "react-router-dom"; import { useLocation } from "react-router-dom";
import { useTranslate } from "@portal/hooks"; import { useThemeHooks } from '@redocly/theme/core/hooks';
import { import {
JsonParam, JsonParam,
StringParam, StringParam,
@@ -38,6 +38,7 @@ export function WebsocketApiTool() {
}) })
const { hash: slug } = useLocation(); const { hash: slug } = useLocation();
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const [isConnectionModalVisible, setIsConnectionModalVisible] = const [isConnectionModalVisible, setIsConnectionModalVisible] =
useState(false); useState(false);

View File

@@ -1,5 +1,5 @@
import * as React from 'react'; import * as React from 'react';
import { useTranslate } from '@portal/hooks'; import { useThemeHooks } from '@redocly/theme/core/hooks';
import { useState } from 'react'; import { useState } from 'react';
import { Client, dropsToXrp, Wallet } from 'xrpl'; import { Client, dropsToXrp, Wallet } from 'xrpl';
import * as faucetData from './faucets.json' import * as faucetData from './faucets.json'
@@ -43,6 +43,7 @@ async function waitForSequence(client: Client, address: string):
} }
function FaucetEndpoints({ faucet, givenKey } : { faucet: FaucetInfo, givenKey: string}) { function FaucetEndpoints({ faucet, givenKey } : { faucet: FaucetInfo, givenKey: string}) {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
return (<div key={givenKey}> return (<div key={givenKey}>
@@ -68,6 +69,7 @@ function FaucetSidebar({ faucets }: { faucets: FaucetInfo[] }): React.JSX.Elemen
} }
export default function XRPFaucets(): React.JSX.Element { export default function XRPFaucets(): React.JSX.Element {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const faucets: FaucetInfo[] = faucetData.knownFaucets const faucets: FaucetInfo[] = faucetData.knownFaucets
@@ -124,6 +126,7 @@ async function generateFaucetCredentialsAndUpdateUI(
setSecret("") setSecret("")
setBalance("") setBalance("")
setSequence("") setSequence("")
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
@@ -150,6 +153,7 @@ async function generateFaucetCredentialsAndUpdateUI(
} }
function TestCredentials({selectedFaucet}) { function TestCredentials({selectedFaucet}) {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const [generatedCredentialsFaucet, setGeneratedCredentialsFaucet] = useState("") const [generatedCredentialsFaucet, setGeneratedCredentialsFaucet] = useState("")

View File

@@ -1,5 +1,5 @@
import * as React from 'react'; import * as React from 'react';
import { useTranslate } from '@portal/hooks'; import { useThemeHooks } from '@redocly/theme/core/hooks';
import { TextLookupForm, type TextLookupFormProps } from './components/TextLookupForm'; import { TextLookupForm, type TextLookupFormProps } from './components/TextLookupForm';
import { fetchFile, fetchWallet } from './toml-checker/ValidateTomlSteps'; import { fetchFile, fetchWallet } from './toml-checker/ValidateTomlSteps';
import { LogEntryItem } from './components/LogEntry'; import { LogEntryItem } from './components/LogEntry';
@@ -45,6 +45,7 @@ function handleSubmitDomain(
} }
export default function TomlChecker() { export default function TomlChecker() {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const domainButtonProps: TextLookupFormProps = { const domainButtonProps: TextLookupFormProps = {

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,4 @@
import { useTranslate } from '@portal/hooks'; import { useThemeHooks } from '@redocly/theme/core/hooks';
import { isFunction } from './type-helpers' import { isFunction } from './type-helpers'
import { FC } from 'react' import { FC } from 'react'
import { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
@@ -63,7 +63,7 @@ export const XRPLGuard: FC<{ testCheck?: () => boolean, children }> = ({
testCheck, testCheck,
children, children,
}) => { }) => {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate(); const { translate } = useTranslate();
const isXRPLLoaded = useThrottledCheck( const isXRPLLoaded = useThrottledCheck(
testCheck ?? (() => typeof xrpl === 'object'), testCheck ?? (() => typeof xrpl === 'object'),

View File

@@ -3,6 +3,8 @@ button.MarkpromptFloatingTrigger {
border-radius: $border-radius-sm; border-radius: $border-radius-sm;
right: 16px; right: 16px;
border: 1px solid transparent; border: 1px solid transparent;
color: var(--markprompt-primaryForeground);
background-color: var(--markprompt-primary);
@include media-breakpoint-up(lg) { @include media-breakpoint-up(lg) {
right: 32px; right: 32px;

View File

@@ -1,2 +0,0 @@
theme.page.previousButton: "Previous: {{label}}"
theme.page.nextButton: "Next: {{label}}"

View File

@@ -4,14 +4,7 @@
"baseUrl": ".", "baseUrl": ".",
"jsx": "react-jsx", "jsx": "react-jsx",
"resolveJsonModule": true, "resolveJsonModule": true,
"paths": { "module": "es2015",
"@theme/*": [ "moduleResolution": "bundler"
"./@theme/*",
"./node_modules/@redocly/theme/src/*"
],
"@portal/*": [
"./node_modules/@redocly/realm/dist/client/app/*"
]
},
} }
} }