diff --git a/packages/website/src/components/Embeds/breakdown.tsx b/packages/website/src/components/Embeds/breakdown.tsx index 3fdfc86c3..3ebda3bea 100644 --- a/packages/website/src/components/Embeds/breakdown.tsx +++ b/packages/website/src/components/Embeds/breakdown.tsx @@ -26,3 +26,9 @@ export function BreakdownPreview() { ); } + +export function BreakdownRenderer() { + const { useState } = useEmbedStateCurry(); + + return useState('cardBodyBackgroundColor'); +} diff --git a/packages/website/src/constants/embeds.ts b/packages/website/src/constants/embeds.ts index 293a2033a..8284acea7 100644 --- a/packages/website/src/constants/embeds.ts +++ b/packages/website/src/constants/embeds.ts @@ -3,6 +3,7 @@ import { grayA, grayDark, grayDarkA } from '@radix-ui/colors'; import type { ReactNode } from 'react'; import { BreakdownPreview, + BreakdownRenderer, compositeStatsKeysOptions, } from '../components/Embeds/breakdown'; import type { @@ -99,3 +100,7 @@ export function extractEmbedConfigDefaults( Object.entries(config).map(([key, value]) => [key, value.default]), ) as ExtractEmbedConfigTypes; } + +export const embedRenderers = { + breakdown: BreakdownRenderer, +} satisfies Record ReactNode>; diff --git a/packages/website/src/layouts/BaseLayout.astro b/packages/website/src/layouts/BaseLayout.astro index 3feb803cc..c35cf4bdf 100644 --- a/packages/website/src/layouts/BaseLayout.astro +++ b/packages/website/src/layouts/BaseLayout.astro @@ -5,25 +5,12 @@ import { Checks } from '../components/Checks'; import Footer from '../components/Footer.astro'; import Navbar from '../components/Navbar.astro'; import Party3 from '../components/Party3.astro'; +import './base.css'; const { pathname } = Astro.url; const isRoot = pathname === '/'; --- - - - { diff --git a/packages/website/src/layouts/EmbedLayout.astro b/packages/website/src/layouts/EmbedLayout.astro new file mode 100644 index 000000000..e77d3bbb1 --- /dev/null +++ b/packages/website/src/layouts/EmbedLayout.astro @@ -0,0 +1,13 @@ +--- +import './base.css'; +--- + + + + + + + + + + diff --git a/packages/website/src/layouts/base.css b/packages/website/src/layouts/base.css new file mode 100644 index 000000000..a3de75274 --- /dev/null +++ b/packages/website/src/layouts/base.css @@ -0,0 +1,5 @@ +@import '@radix-ui/themes/styles.css'; + +body { + margin: 0; +} diff --git a/packages/website/src/pages/tools/embed/[embed]/host/_index.tsx b/packages/website/src/pages/tools/embed/[embed]/host/_index.tsx new file mode 100644 index 000000000..e880b9aa0 --- /dev/null +++ b/packages/website/src/pages/tools/embed/[embed]/host/_index.tsx @@ -0,0 +1,37 @@ +import { useMemo } from 'react'; +import { parse } from 'urlon'; +import { + embedConfigurations, + embedRenderers, + extractEmbedConfigDefaults, +} from '../../../../../constants/embeds'; +import { + EmbedState, + type EmbedConfig, + type ExtractEmbedConfigTypes, +} from '../../../../../stores/embedState'; + +interface PageProps { + embed: keyof typeof embedConfigurations; +} + +export function Page({ embed }: PageProps) { + const state = useMemo(() => { + const params = new URLSearchParams(window.location.search); + const stateRaw = params.get('state'); + const partialState = stateRaw === null ? {} : parse(stateRaw); + const state = { + ...extractEmbedConfigDefaults(embedConfigurations[embed]), + ...partialState, + } as ExtractEmbedConfigTypes; + + return state; + }, [embed]); + const Renderer = embedRenderers[embed]; + + return ( + + + + ); +} diff --git a/packages/website/src/pages/tools/embed/[embed]/host/index.astro b/packages/website/src/pages/tools/embed/[embed]/host/index.astro index b77a65050..61a13a3e0 100644 --- a/packages/website/src/pages/tools/embed/[embed]/host/index.astro +++ b/packages/website/src/pages/tools/embed/[embed]/host/index.astro @@ -1,14 +1,13 @@ --- -import { embedPreviews } from '../../../../../constants/embeds'; -import { EmbedState } from '../../../../../stores/embedState'; +import { capitalize } from 'lodash-es'; +import EmbedLayout from '../../../../../layouts/EmbedLayout.astro'; +import { Page } from './_index'; export { getStaticPaths } from '../index.astro'; - -const Test = embedPreviews.breakdown; --- -sploinky sploinky splonk +BlitzKit - {capitalize(Astro.params.embed)} embed - - - + + + diff --git a/packages/website/src/types/urlon.d.ts b/packages/website/src/types/urlon.d.ts index d9ae460c8..af21bdc51 100644 --- a/packages/website/src/types/urlon.d.ts +++ b/packages/website/src/types/urlon.d.ts @@ -1,4 +1,5 @@ declare module 'urlon' { function stringify(value: any): string; - export { stringify }; + function parse(value: string): any; + export { parse, stringify }; }