diff --git a/packages/mini-browser/src/buttons.tsx b/packages/mini-browser/src/buttons.tsx index 84e192bb..ec642e4d 100644 --- a/packages/mini-browser/src/buttons.tsx +++ b/packages/mini-browser/src/buttons.tsx @@ -1,35 +1,38 @@ -import React from "react"; +import { useClasser } from "@code-hike/classer" +import React from "react" function Back() { + const c = useClasser("ch-browser") return ( - ); + ) } function Forward() { + const c = useClasser("ch-browser") return ( - ); + ) } function Refresh() { @@ -43,13 +46,14 @@ function Refresh() { > - ); + ) } function Open({ href }: { href: string }) { + const c = useClasser("ch-browser") return ( - ); + ) } -export { Back, Forward, Refresh, Open }; +export { Back, Forward, Refresh, Open } diff --git a/packages/mini-browser/src/index.scss b/packages/mini-browser/src/index.scss index 4a717ce0..9a6e28d1 100644 --- a/packages/mini-browser/src/index.scss +++ b/packages/mini-browser/src/index.scss @@ -22,3 +22,23 @@ padding: 0 10px; color: #544; } + +.ch-browser-button { + margin: 0 1em; + color: #999; +} + +.ch-browser-back-button { + margin-left: 0.2em; +} + +.ch-browser-forward-button { + margin-left: 0; +} + +.ch-browser-open-button { + color: inherit; +} +.ch-browser-open-icon { + display: block; +} diff --git a/packages/mini-browser/src/mini-browser-hike.tsx b/packages/mini-browser/src/mini-browser-hike.tsx index 3fefb312..edb63f0d 100644 --- a/packages/mini-browser/src/mini-browser-hike.tsx +++ b/packages/mini-browser/src/mini-browser-hike.tsx @@ -4,11 +4,14 @@ import { TitleBar } from "./title-bar" import { MiniBrowserStep, useSteps } from "./use-steps" import { useClasser, Classes } from "@code-hike/classer" +type Transition = "none" | "slide" + export type MiniBrowserHikeProps = { progress?: number backward?: boolean classes?: Classes steps?: MiniBrowserStep[] + transition?: Transition } & React.PropsWithoutRef const MiniBrowserHike = React.forwardRef< @@ -21,6 +24,7 @@ function MiniBrowserWithRef( progress = 0, backward = false, steps: ogSteps, + transition = "none", classes, ...props }: MiniBrowserHikeProps, @@ -29,16 +33,6 @@ function MiniBrowserWithRef( const c = useClasser("ch-mini-browser", classes) const steps = useSteps(ogSteps) - // TODO readability and optional - const X = 50 - const t = progress - Math.floor(progress) - const x = t <= 0.5 ? -X * t : X - X * t - const o = Math.abs(t - 0.5) * 2 - - // const stepIndex = backward - // ? Math.floor(progress) - // : Math.ceil(progress) - const stepIndex = Math.round(progress) const { zoom, displayUrl, loadUrl, children } = steps[ @@ -51,8 +45,7 @@ function MiniBrowserWithRef( zoom={zoom} className={`${c("")} ${props.className || ""}`} style={{ - transform: `translateX(${x}px)`, - opacity: o * o, + ...transitionStyle({ progress, transition }), ...props.style, }} classes={classes} @@ -65,4 +58,24 @@ function MiniBrowserWithRef( ) } +function transitionStyle({ + progress, + transition, +}: { + progress: number + transition: Transition +}) { + if (transition === "slide") { + const X = 50 + const t = progress - Math.floor(progress) + const x = t <= 0.5 ? -X * t : X - X * t + const o = Math.abs(t - 0.5) * 2 + return { + transform: `translateX(${x}px)`, + opacity: o * o, + } + } + return {} +} + export { MiniBrowserHike } diff --git a/packages/scrollycoding/src/mdx-steps.tsx b/packages/scrollycoding/src/mdx-steps.tsx index eef968ff..7527654b 100644 --- a/packages/scrollycoding/src/mdx-steps.tsx +++ b/packages/scrollycoding/src/mdx-steps.tsx @@ -25,12 +25,15 @@ interface Step { codeProps: CodeProps } -const defaultFilename = "App.js" +interface Options { + defaultFileName?: string +} function useMdxSteps( mdx: React.ReactNode, previewProps: PreviewProps, - codeProps: CodeProps + codeProps: CodeProps, + options: Options = {} ) { const steps: Step[] = [] let prevFiles: CodeFiles = {} @@ -41,7 +44,8 @@ function useMdxSteps( const { files, activeFile } = getFiles( stepHeadProps, prevFiles, - prevActiveFile + prevActiveFile, + options.defaultFileName ) const step = { content: [], @@ -69,7 +73,8 @@ function useMdxSteps( function getFiles( stepHeadProps: StepHeadProps, prevFiles: CodeFiles = {}, - prevActiveFile: string = "" + prevActiveFile: string = "", + defaultFileName: string = "App.js" ) { let activeFile = stepHeadProps.activeFile || "" const files = { ...prevFiles } @@ -80,7 +85,7 @@ function getFiles( preElement?.props?.children?.props || {} const lang = codeElementProps.className?.slice(9) const { filename, hideTab } = parseMetastring( - codeElementProps.metastring || defaultFilename + codeElementProps.metastring || defaultFileName ) const code = codeElementProps.children files[filename] = { code, lang, hideTab } diff --git a/packages/scrollycoding/src/preview.tsx b/packages/scrollycoding/src/preview.tsx index 124284d2..5ef863b7 100644 --- a/packages/scrollycoding/src/preview.tsx +++ b/packages/scrollycoding/src/preview.tsx @@ -34,6 +34,7 @@ function Preview({ filesHash, ...props }: PreviewProps) {