@storybook/addon-designs
Version:
Storybook addon for embedding your design preview in addon panel
1 lines • 59.2 kB
Source Map (JSON)
{"version":3,"sources":["../src/manager/components/IFrame.tsx","../src/manager/components/Figma.tsx","../src/manager/components/Figspec.tsx","../src/blocks.tsx","../src/manager/components/hooks/usePan.ts","../src/manager/components/Pan.tsx","../../../node_modules/@storybook/icons/src/icons/SearchIcon.tsx","../../../node_modules/@storybook/icons/src/icons/ZoomIcon.tsx","../../../node_modules/@storybook/icons/src/icons/ZoomOutIcon.tsx","../src/manager/components/ZoomButtons.tsx","../src/manager/components/hooks/useZoom.ts","../src/manager/components/Image.tsx","../src/manager/components/Wrapper.tsx","../src/manager/components/LinkPanel.tsx","../src/manager/components/Sketch.tsx","../src/manager/components/Tabs.tsx","../src/constants.ts"],"names":["IFrame","$container","$loading","$iframe","init_IFrame","__esmMin","config","defer","url","setUrl","useState","loaded","setLoaded","useEffect","handle","jsx","Placeholder","css","figmaURLPattern","isFigmaURL","Figma","init_Figma","iframeConfig","useMemo","Figspec_exports","__export","Figspec","Figspec_default","unwrapJson","res","getAccessToken","cfg","listAllFrames","node","a","b","fullscreen","init_Figspec","state","setState","fetchDetails","signal","match","fileKey","nodeId","accessToken","headers","nodeUrl","imageUrl","documentNode","resp","frames","frame","images","nodes","err","fulfilled","fulfil","ac","Fragment","FigspecFileViewer","FigspecFrameViewer","usePan","cb","deps","lastPosition","savePosition","isPanning","setPanState","onMouseDown","useCallback","ev","onTouchStart","touch","move","p","prev","onMouseMove","screenX","screenY","onTouchMove","clear","Pan","children","className","style","defaultValue","value","onChange","offset","panHandlers","delta","transform","vec","$transformLayer","f","size","forwardedRef","props","color","ZoomOutIcon","ZoomResetIcon","React","ZoomButtons","onZoomIn","onZoomOut","onReset","IconButton","ZoomIcon","useZoom","initialValue","scale","setScale","zoomIn","prevScale","zoomOut","resetZoom","ImagePreview","zoom","imageStyles","FlexBar","Separator","$preview","$image","LinkPanel","Link","v1UrlParser","malformedUrlErrorMessage","pathSegments","s","sid","aid","Sketch","result","parsed","Tabs","tabs","selected","setSelected","SbTabs","tab","lazy","Wrapper","meta","Suspense","AddonName","ParameterName","ResetWrapper","styled","theme","height","collapsed","CollapsedText","DocBlockBase","collapsable","defaultCollapsed","placeholder","showLink","onCollapsedChange","rest","setCollapsed","showOpenInNewTab","ActionBar","newValue","Image","AbsoluteLocater","Design","of","story","useOf"],"mappings":"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","file":"blocks.mjs","sourcesContent":["/** @jsx jsx */\nimport { FC, ReactNode, useEffect, useState } from \"react\";\nimport { css, jsx } from \"storybook/theming\";\n\nimport { Placeholder } from \"storybook/internal/components\";\n\nimport { IFrameConfigBase } from \"../../config\";\n\ninterface Props {\n config: IFrameConfigBase;\n\n /**\n * Whether to defer loading iframe contents\n * @default false\n */\n defer?: boolean;\n}\n\nexport const IFrame: FC<Props> = ({ config, defer = false }) => {\n const [url, setUrl] = useState(defer ? undefined : config.url);\n const [loaded, setLoaded] = useState(false);\n\n // Defer loading iframe URL.\n // Some sites (e.g. Figma) detects Fullscreen API capability on\n // initial load. This is quite common implementation. But in our usage,\n // it seems that React hold the created <iframe> element when update,\n // and it causes \"outdated Fullscreen capability\" problem.\n // This might be a browser bug that \"`fullscreenEnabled` property does not\n // updated\" but I'm not sure what the correct behavior (I couldn't see the\n // statement in the Fulscreen API spec).\n // This side-effect delays the loading of an iframe contents by one frame to\n // make sure the contents gets updated attributes.\n // https://github.com/storybookjs/addon-designs/issues/77\n useEffect(() => {\n if (!defer) {\n return;\n }\n\n const handle = requestAnimationFrame(() => {\n setUrl(config.url);\n });\n\n return () => cancelAnimationFrame(handle);\n }, [defer, config.url]);\n\n useEffect(() => {\n setLoaded(false);\n }, [url]);\n\n return (\n <div css={$container}>\n {!loaded && (\n // @ts-expect-error: @types resolution is completely broken probably due to migration to npm workspace\n <Placeholder css={$loading}>Loading...</Placeholder>\n )}\n <iframe\n css={$iframe}\n src={url}\n allowFullScreen={config.allowFullscreen}\n onLoad={() => setLoaded(true)}\n />\n </div>\n );\n};\n\nexport default IFrame;\n\nconst $container = css`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n overflow: hidden;\n`;\n\nconst $loading = css`\n position: absolute;\n top: 50%;\n left: 50%;\n\n transform: translate(-50%, -50%);\n`;\n\nconst $iframe = css`\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n\n z-index: 1;\n`;\n","/** @jsx jsx */\nimport { FC, useMemo } from \"react\";\nimport { jsx } from \"storybook/theming\";\n\nimport { IFrame } from \"./IFrame\";\n\nimport { FigmaConfig, IFrameConfigBase } from \"../../config\";\n\nexport const figmaURLPattern =\n /https:\\/\\/[\\w.-]+\\.?figma.com\\/([\\w-]+)\\/([0-9a-zA-Z]{22,128})(?:\\/.*)?$/;\n\nexport const isFigmaURL = (url: string) => figmaURLPattern.test(url);\n\ninterface Props {\n config: FigmaConfig;\n}\n\nexport const Figma: FC<Props> = ({ config }) => {\n const iframeConfig = useMemo<IFrameConfigBase>(() => {\n const isValid = isFigmaURL(config.url);\n\n if (!isValid) {\n console.warn(\n \"[storybook-addon-designs] \" +\n \"The URL you specified is not valid Figma URL.\\n\" +\n \"The addon fallbacks to normal iframe mode.\" +\n \"For more detail, please check <https://www.figma.com/developers/embed>.\",\n );\n return config;\n }\n\n const embedHost = config.embedHost || location.hostname;\n const url = `https://www.figma.com/embed?embed_host=${embedHost}&url=${config.url}`;\n\n return {\n url,\n allowFullscreen: config.allowFullscreen,\n };\n }, [config.url, config.allowFullscreen, config.embedHost]);\n\n return <IFrame defer config={iframeConfig} />;\n};\n","/** @jsx jsx */\nimport type {\n FileResponse,\n FileNodesResponse,\n FileImageResponse,\n Node,\n} from \"figma-js\";\nimport { FC, Fragment, useEffect, useMemo, useState } from \"react\";\nimport {\n FigspecFileViewer,\n FigspecFileViewerProps,\n FigspecFrameViewer,\n FigspecFrameViewerProps,\n} from \"@figspec/react\";\nimport { Placeholder } from \"storybook/internal/components\";\nimport { css, jsx } from \"storybook/theming\";\n\nimport { FigspecConfig } from \"../../config\";\n\nimport { figmaURLPattern } from \"./Figma\";\n\nconst fullscreen = css`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n`;\n\ntype RenderItem =\n | {\n type: \"file\";\n props: Pick<\n FigspecFileViewerProps,\n \"documentNode\" | \"renderedImages\" | \"link\"\n >;\n }\n | {\n type: \"frame\";\n props: Pick<FigspecFrameViewerProps, \"nodes\" | \"renderedImage\" | \"link\">;\n };\n\ntype Remote<T, E = Error> =\n | {\n state: \"fetched\";\n value: T;\n }\n | {\n state: \"failed\";\n error: E;\n }\n | {\n state: \"loading\";\n };\n\nfunction unwrapJson<T>(res: Response): Promise<T> {\n return res.status !== 200\n ? Promise.reject(res.statusText)\n : (res.json() as Promise<T>);\n}\n\n/**\n * Safely get Figma API access token.\n */\nfunction getAccessToken(cfg: FigspecConfig): string | null {\n if (cfg.accessToken) {\n return cfg.accessToken;\n }\n\n try {\n return process.env.STORYBOOK_FIGMA_ACCESS_TOKEN ?? null;\n } catch (err) {\n // The only case here is no DefinePlugin entry for `process.env` nor\n // `process.env.STORYBOOK_FIGMA_ACCESS_TOKEN`. We can safely ignore this.\n return null;\n }\n}\n\ninterface Props {\n config: FigspecConfig;\n}\n\nexport const Figspec: FC<Props> = ({ config }) => {\n const [state, setState] = useState<Remote<RenderItem, string>>({\n state: \"loading\",\n });\n\n const fetchDetails = async (signal: AbortSignal) => {\n setState({ state: \"loading\" });\n\n try {\n const match = config.url.match(figmaURLPattern);\n\n if (!match) {\n throw new Error(config.url + \" is not a valid Figma URL.\");\n }\n\n const [, , fileKey] = match;\n\n const url = new URL(config.url);\n\n const nodeId = url.searchParams.get(\"node-id\");\n\n const accessToken = getAccessToken(config);\n\n if (!accessToken) {\n throw new Error(\"Personal Access Token is required.\");\n }\n\n const headers = {\n \"X-FIGMA-TOKEN\": accessToken,\n };\n\n const nodeUrl = new URL(`https://api.figma.com/v1/files/${fileKey}`);\n const imageUrl = new URL(`https://api.figma.com/v1/images/${fileKey}`);\n\n imageUrl.searchParams.set(\"format\", \"svg\");\n\n if (!nodeId) {\n const documentNode = await fetch(nodeUrl.href, {\n headers,\n signal,\n }).then((resp) => unwrapJson<FileResponse>(resp));\n\n const frames = listAllFrames(documentNode.document);\n\n imageUrl.searchParams.set(\n \"ids\",\n frames.map((frame) => frame.id).join(\",\"),\n );\n\n const images = await fetch(imageUrl.href, {\n headers,\n signal,\n }).then((resp) => unwrapJson<FileImageResponse>(resp));\n\n setState({\n state: \"fetched\",\n value: {\n type: \"file\",\n props: {\n documentNode,\n renderedImages: images.images,\n link: config.url,\n },\n },\n });\n return;\n }\n\n nodeUrl.pathname += \"/nodes\";\n\n nodeUrl.searchParams.set(\"ids\", nodeId);\n imageUrl.searchParams.set(\"ids\", nodeId);\n\n const [nodes, images] = await Promise.all([\n fetch(nodeUrl.href, {\n headers,\n signal,\n }).then((resp) => unwrapJson<FileNodesResponse>(resp)),\n fetch(imageUrl.href, { headers, signal }).then((resp) =>\n unwrapJson<FileImageResponse>(resp),\n ),\n ]);\n\n setState({\n state: \"fetched\",\n value: {\n type: \"frame\",\n props: {\n nodes,\n renderedImage: Object.values<string>(images.images)[0],\n link: config.url,\n },\n },\n });\n } catch (err) {\n if (err instanceof DOMException && err.code === DOMException.ABORT_ERR) {\n return;\n }\n\n console.error(err);\n\n setState({\n state: \"failed\",\n error: err instanceof Error ? err.message : String(err),\n });\n }\n };\n\n useEffect(() => {\n let fulfilled = false;\n const fulfil = () => {\n fulfilled = true;\n };\n\n const ac = new AbortController();\n\n fetchDetails(ac.signal).then(fulfil, fulfil);\n\n return () => {\n if (!fulfilled) {\n ac.abort();\n }\n };\n }, [config.url]);\n\n switch (state.state) {\n case \"loading\":\n return (\n <Placeholder>\n <Fragment>Loading Figma file...</Fragment>\n </Placeholder>\n );\n case \"failed\":\n return (\n <Placeholder>\n <Fragment>Failed to load Figma file</Fragment>\n <Fragment>{state.error}</Fragment>\n </Placeholder>\n );\n case \"fetched\":\n return state.value.type === \"file\" ? (\n <FigspecFileViewer css={fullscreen} {...state.value.props} />\n ) : (\n <FigspecFrameViewer css={fullscreen} {...state.value.props} />\n );\n }\n};\n\nexport default Figspec;\n\nfunction listAllFrames(node: Node): Node[] {\n if (\"absoluteBoundingBox\" in node) {\n return [node];\n }\n\n if (!node.children || node.children.length === 0) {\n return [];\n }\n\n return node.children.map(listAllFrames).reduce((a, b) => a.concat(b), []);\n}\n","import React, { useState } from \"react\";\nimport type { CSSProperties, FC } from \"react\";\nimport { ActionBar, Placeholder } from \"storybook/internal/components\";\nimport { styled } from \"storybook/theming\";\nimport { useOf, Of } from \"@storybook/addon-docs/blocks\";\n\nimport { Figma as FigmaInternal } from \"./manager/components/Figma\";\nimport { Figspec as FigspecInternal } from \"./manager/components/Figspec\";\nimport { IFrame as IFrameInternal } from \"./manager/components/IFrame\";\nimport { ImagePreview } from \"./manager/components/Image\";\nimport { Wrapper as WrapperInternal } from \"./manager/components/Wrapper\";\n\nimport * as config from \"./config\";\nimport { ParameterName } from \"./constants\";\n\n// Since the exports of `storybook/internal/components` is unstable, I couldn't manage\n// to import the `components.resetWrapper` while maintaining version requirements.\n// This component does similar to the official one at minimum.\n// https://github.com/storybookjs/storybook/blob/4bd2fc9b0677190c59e60fd63841294ab88e80c5/lib/components/src/typography/DocumentFormatting.tsx#L364-L372\n// https://github.com/storybookjs/storybook/blob/4bd2fc9b0677190c59e60fd63841294ab88e80c5/lib/components/src/typography/shared.tsx#L42-L51\nconst ResetWrapper = styled.div(\n ({ theme }) => `\n font-family: ${theme.typography.fonts.base};\n font-size: ${theme.typography.size.s3}px;\n margin: 0;\n`,\n);\n\nconst Wrapper = styled.div<BlocksCommonProps & { collapsed: boolean }>(\n ({ theme, height = \"60%\", collapsed }) => `\n position: relative;\n width: 100%;\n height: 0;\n padding: 0;\n padding-top: ${\n collapsed ? \"3em\" : typeof height == \"string\" ? height : height + \"px\"\n };\n margin: 25px 0 40px;\n border: 1px solid ${theme.appBorderColor};\n\n border-radius: ${theme.appBorderRadius}px;\n box-shadow:\n ${\n theme.base === \"light\"\n ? \"rgba(0, 0, 0, 0.10) 0 1px 3px 0\"\n : \"rgba(0, 0, 0, 0.20) 0 2px 5px 0\"\n };\n`,\n);\n\nconst CollapsedText = styled(Placeholder)`\n position: absolute;\n top: 50%;\n left: 50%;\n\n transform: translate(-50%, -50%);\n`;\n\nexport interface BlocksCommonProps {\n /**\n * **Doc Block Props**\n *\n * A `class` prop passed down to embed wrapper.\n */\n className?: string;\n /**\n * **Doc Block Props**\n *\n * A `style` passed down to embed wrapper.\n */\n style?: CSSProperties;\n\n /**\n * **Doc Block Props**\n *\n * Height of the block. Numbers will be converted into pixels.\n * Relative value (%) is based on width of the block.\n */\n height?: string | number;\n\n /**\n * **Doc Block Props**\n *\n * Whether to allow the block to toggle collapse/expand.\n * @default true\n */\n collapsable?: boolean;\n\n children?: React.ReactNode;\n\n /**\n * **Doc Block Props**\n *\n * Render the block with collapsed initially?\n * Available when `collapsable` is set to `true`.\n * @default false\n */\n defaultCollapsed?: boolean;\n\n /**\n * **Doc Block Props**\n *\n * Placeholder text shown when the block is collapsed.\n * Default value differs by a type of the block (e.g. \"Design (Figma)\").\n */\n placeholder?: string;\n\n /**\n * **Doc Block Props**\n *\n * Whether to show an \"Open in new tab\" button.\n * @default true\n */\n showLink?: boolean;\n\n /**\n * **Doc Block Props**\n *\n * Will be called when a user changed collapse/expand state of the block.\n */\n onCollapsedChange?(newValue: boolean, oldValue: boolean): void;\n}\n\nexport const DocBlockBase: FC<BlocksCommonProps> = ({\n children,\n collapsable = true,\n defaultCollapsed = false,\n placeholder,\n showLink = true,\n onCollapsedChange,\n ...rest\n}) => {\n const [collapsed, setCollapsed] = useState(!!defaultCollapsed);\n\n const showOpenInNewTab = showLink && \"url\" in rest;\n\n return (\n <ResetWrapper>\n <Wrapper collapsed={collapsable && collapsed} {...rest}>\n {collapsable && collapsed ? (\n <CollapsedText>{placeholder}</CollapsedText>\n ) : (\n children\n )}\n <ActionBar\n actionItems={[\n collapsable && {\n title: collapsed ? \"Show\" : \"Hide\",\n onClick: () => {\n const newValue = !collapsed;\n if (onCollapsedChange) onCollapsedChange(newValue, collapsed);\n setCollapsed(newValue);\n },\n },\n showOpenInNewTab && {\n title: \"Open in new tab\",\n onClick: () => window.open((rest as any).url, \"_blank\"),\n },\n ].filter((s): s is Exclude<typeof s, false> => !!s)}\n />\n </Wrapper>\n </ResetWrapper>\n );\n};\n\nexport const Figma: FC<\n Omit<config.FigmaConfig, \"type\"> & BlocksCommonProps\n> = ({ placeholder, ...props }) => (\n <DocBlockBase placeholder={placeholder ?? \"Design (Figma)\"} {...props}>\n <FigmaInternal config={{ type: \"figma\", ...props }} />\n </DocBlockBase>\n);\n\nexport const Figspec: FC<\n Omit<config.FigspecConfig, \"type\"> & BlocksCommonProps\n> = ({ placeholder, ...props }) => {\n return (\n <DocBlockBase placeholder={placeholder ?? \"Design (Figma-Spec)\"} {...props}>\n <FigspecInternal config={{ type: \"figspec\", ...props }} />\n </DocBlockBase>\n );\n};\n\nexport const IFrame: FC<\n Omit<config.IFrameConfig, \"type\"> & BlocksCommonProps\n> = ({ placeholder, ...props }) => (\n <DocBlockBase placeholder={placeholder ?? \"Design (iframe)\"} {...props}>\n <IFrameInternal config={props} />\n </DocBlockBase>\n);\n\n// Image would do shadowing the native variable (Image constructor, which creates\n// HTMLImageElement), but I think it doesn't matter since there is less chance to\n// use Image constructor in MDX.\nexport const Image: FC<\n Omit<config.ImageConfig, \"type\"> & BlocksCommonProps\n> = ({ placeholder, ...props }) => (\n <DocBlockBase placeholder={placeholder ?? \"Design (Image)\"} {...props}>\n <ImagePreview config={{ type: \"image\", ...props }} />\n </DocBlockBase>\n);\n\nconst AbsoluteLocater = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n overflow: auto;\n`;\n\nexport interface DesignProps {\n /**\n * A reference to a story that has `design` parameter to use for rendering.\n */\n of: Of;\n}\n\nexport const Design: FC<DesignProps & Omit<BlocksCommonProps, \"showLink\">> = (\n props,\n) => {\n const { of, placeholder, ...rest } = props;\n\n if (\"of\" in props && of === undefined) {\n // MDX isn't always type-safe, it's often that users mistype their imports\n throw new Error(\n \"Unexpected `of={undefined}`, did you mistype a CSF file reference?\",\n );\n }\n\n const { story } = useOf(of || \"story\", [\"story\"]);\n\n return (\n <DocBlockBase placeholder={placeholder ?? \"Design\"} {...rest}>\n <AbsoluteLocater>\n <WrapperInternal config={story.parameters[ParameterName]} />\n </AbsoluteLocater>\n </DocBlockBase>\n );\n};\n","import {\n useCallback,\n useState,\n DependencyList,\n MouseEventHandler,\n TouchEventHandler,\n} from \"react\";\n\nexport type Point2D = [number, number];\n\ninterface PanController {\n onMouseDown: MouseEventHandler;\n onMouseMove: MouseEventHandler;\n onMouseUp: MouseEventHandler;\n onMouseLeave: MouseEventHandler;\n onTouchStart: TouchEventHandler;\n onTouchMove: TouchEventHandler;\n onTouchCancel: TouchEventHandler;\n onTouchEnd: TouchEventHandler;\n}\n\n/**\n * Emulate MouseEvent.movementX and MouseEvent.movementY(Candidate Recommendation)\n * Needed due to lack of support in Safari\n */\ntype UsePan = (\n cb: (movement: Point2D) => any,\n deps: DependencyList,\n) => PanController;\n\nexport const usePan: UsePan = (cb, deps) => {\n const [lastPosition, savePosition] = useState<Point2D>([0, 0]);\n const [isPanning, setPanState] = useState<boolean>(false);\n\n const onMouseDown = useCallback<PanController[\"onMouseDown\"]>(\n (ev) => {\n // Ensure to turn on pan mode only for main button down\n if (ev.button !== 0) {\n return;\n }\n\n savePosition([ev.screenX, ev.screenY]);\n setPanState(true);\n },\n [setPanState, savePosition],\n );\n\n const onTouchStart = useCallback<PanController[\"onTouchStart\"]>(\n (ev) => {\n const touch = ev.touches[0];\n\n savePosition([touch.screenX, touch.screenY]);\n setPanState(true);\n },\n [setPanState, savePosition],\n );\n\n const move = useCallback(\n (p: Point2D) => {\n if (!isPanning) {\n return;\n }\n\n savePosition((prev) => {\n cb([p[0] - prev[0], p[1] - prev[1]]);\n\n return p;\n });\n },\n [savePosition, isPanning, ...deps],\n );\n\n const onMouseMove = useCallback<PanController[\"onMouseMove\"]>(\n (ev) => {\n const { screenX, screenY } = ev;\n\n move([screenX, screenY]);\n },\n [move],\n );\n\n const onTouchMove = useCallback<PanController[\"onTouchMove\"]>(\n (ev) => {\n const { screenX, screenY } = ev.touches[0];\n\n move([screenX, screenY]);\n },\n [savePosition, isPanning, ...deps],\n );\n\n const clear = useCallback(() => {\n savePosition([0, 0]);\n setPanState(false);\n }, [setPanState, savePosition]);\n\n return {\n onMouseDown,\n onMouseMove,\n onMouseUp: clear,\n onMouseLeave: clear,\n onTouchStart,\n onTouchMove,\n onTouchCancel: clear,\n onTouchEnd: clear,\n };\n};\n","/** @jsx jsx */\nimport {\n useEffect,\n useMemo,\n useState,\n CSSProperties,\n FC,\n ReactNode,\n} from \"react\";\nimport { css, jsx } from \"storybook/theming\";\n\nimport { usePan, Point2D } from \"./hooks/usePan\";\n\ninterface Props {\n children: ReactNode;\n\n className?: string;\n style?: CSSProperties;\n\n defaultValue?: Point2D;\n\n value?: Point2D;\n\n onChange?(delta: Point2D): any;\n}\n\nexport const Pan: FC<Props> = ({\n children,\n className,\n style,\n defaultValue,\n value,\n onChange,\n}) => {\n const [offset, move] = useState<Point2D>([0, 0]);\n\n useEffect(() => {\n if (defaultValue) {\n move(defaultValue);\n } else {\n move(value || [0, 0]);\n }\n }, [defaultValue]);\n\n const panHandlers = usePan(\n (delta) => {\n if (onChange) {\n onChange(delta);\n }\n\n move((prev) => [prev[0] + delta[0], prev[1] + delta[1]]);\n },\n [move, onChange],\n );\n\n const transform = useMemo<CSSProperties>(() => {\n const vec = value || offset;\n\n return {\n transform: `translate(${vec[0]}px, ${vec[1]}px)`,\n };\n }, [value, offset]);\n\n return (\n <div css={$container} className={className} style={style} {...panHandlers}>\n <div css={$transformLayer} style={transform}>\n {children}\n </div>\n </div>\n );\n};\n\nexport default Pan;\n\nconst $container = css`\n position: relative;\n overflow: hidden;\n\n &:active {\n cursor: move;\n }\n`;\n\nconst $transformLayer = css`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n`;\n","import * as React from 'react';\nimport { IconProps } from '../types';\n\nexport const SearchIcon = /* @__PURE__ */ React.forwardRef<\n SVGSVGElement,\n IconProps\n>(({ color = 'currentColor', size = 14, ...props }, forwardedRef) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={forwardedRef}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.544 10.206a5.5 5.5 0 11.662-.662.5.5 0 01.148.102l3 3a.5.5 0 01-.708.708l-3-3a.5.5 0 01-.102-.148zM10.5 6a4.5 4.5 0 11-9 0 4.5 4.5 0 019 0z\"\n fill={color}\n />\n </svg>\n );\n});\n","import * as React from 'react';\nimport { IconProps } from '../types';\n\nexport const ZoomIcon = /* @__PURE__ */ React.forwardRef<\n SVGSVGElement,\n IconProps\n>(({ color = 'currentColor', size = 14, ...props }, forwardedRef) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={forwardedRef}\n {...props}\n >\n <path\n d=\"M6 3.5a.5.5 0 01.5.5v1.5H8a.5.5 0 010 1H6.5V8a.5.5 0 01-1 0V6.5H4a.5.5 0 010-1h1.5V4a.5.5 0 01.5-.5z\"\n fill={color}\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.544 10.206a5.5 5.5 0 11.662-.662.5.5 0 01.148.102l3 3a.5.5 0 01-.708.708l-3-3a.5.5 0 01-.102-.148zM10.5 6a4.5 4.5 0 11-9 0 4.5 4.5 0 019 0z\"\n fill={color}\n />\n </svg>\n );\n});\n","import * as React from 'react';\nimport { IconProps } from '../types';\n\nexport const ZoomOutIcon = /* @__PURE__ */ React.forwardRef<\n SVGSVGElement,\n IconProps\n>(({ color = 'currentColor', size = 14, ...props }, forwardedRef) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={forwardedRef}\n {...props}\n >\n <path d=\"M4 5.5a.5.5 0 000 1h4a.5.5 0 000-1H4z\" fill={color} />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6 11.5c1.35 0 2.587-.487 3.544-1.294a.5.5 0 00.102.148l3 3a.5.5 0 00.708-.708l-3-3a.5.5 0 00-.148-.102A5.5 5.5 0 106 11.5zm0-1a4.5 4.5 0 100-9 4.5 4.5 0 000 9z\"\n fill={color}\n />\n </svg>\n );\n});\n","/** @jsx jsx */\nimport { Fragment, FC } from \"react\";\nimport { jsx } from \"storybook/theming\";\n\nimport { IconButton } from \"storybook/internal/components\";\nimport { ZoomIcon, ZoomOutIcon, ZoomResetIcon } from \"@storybook/icons\";\n\ninterface Props {\n onZoomIn?(): any;\n onZoomOut?(): any;\n onReset?(): any;\n}\n\nexport const ZoomButtons: FC<Props> = ({ onZoomIn, onZoomOut, onReset }) => (\n <Fragment>\n <IconButton onClick={onZoomIn}>\n <ZoomIcon />\n </IconButton>\n <IconButton onClick={onZoomOut}>\n <ZoomOutIcon />\n </IconButton>\n <IconButton onClick={onReset}>\n <ZoomResetIcon />\n </IconButton>\n </Fragment>\n);\n\nexport default ZoomButtons;\n","import { useCallback, useEffect, useState, DependencyList } from \"react\";\n\ntype UseZoom = (\n initialValue: number,\n deps: DependencyList,\n) => {\n /**\n * Current scale factor.\n * 0.0 < n < Infinity\n */\n scale: number;\n\n /**\n * Zoom in\n */\n zoomIn(): void;\n\n /**\n * Zoom out\n */\n zoomOut(): void;\n\n /**\n * Reset scale factor to 1.\n */\n resetZoom(): void;\n};\n\nexport const useZoom: UseZoom = (initialValue, deps) => {\n const [scale, setScale] = useState<number>(1);\n\n useEffect(() => {\n setScale(initialValue);\n }, deps);\n\n const zoomIn = useCallback(() => {\n setScale((prevScale) => prevScale + 0.1);\n }, [setScale]);\n\n const zoomOut = useCallback(() => {\n setScale((prevScale) => Math.max(prevScale - 0.1, 0.1));\n }, [setScale]);\n\n const resetZoom = useCallback(() => {\n setScale(1);\n }, [setScale]);\n\n return { scale, zoomIn, zoomOut, resetZoom };\n};\n","/** @jsx jsx */\nimport { Fragment, useMemo, CSSProperties, FC } from \"react\";\nimport { css, jsx } from \"storybook/theming\";\n\nimport { FlexBar, Separator } from \"storybook/internal/components\";\n\nimport { Pan } from \"./Pan\";\nimport { ZoomButtons } from \"./ZoomButtons\";\n\nimport { ImageConfig } from \"../../config\";\n\nimport { useZoom } from \"./hooks/useZoom\";\n\ninterface Props {\n config: ImageConfig;\n}\n\nexport const ImagePreview: FC<Props> = ({ config }) => {\n const zoom = useZoom(config.scale || 1, [config.scale]);\n\n const imageStyles = useMemo<CSSProperties>(\n () => ({\n transform: `scale(${zoom.scale})`,\n }),\n [zoom.scale],\n );\n\n return (\n <div css={$container}>\n <FlexBar border>\n <div\n style={{\n display: \"grid\",\n gridAutoFlow: \"column\",\n gap: \"4px\",\n alignItems: \"center\",\n }}\n >\n <Fragment key=\"left\">\n <p>\n <b>Image</b>\n </p>\n <Separator />\n <ZoomButtons\n onReset={zoom.resetZoom}\n onZoomIn={zoom.zoomIn}\n onZoomOut={zoom.zoomOut}\n />\n </Fragment>\n </div>\n </FlexBar>\n <Pan css={$preview} defaultValue={config.offset}>\n <img css={$image} src={config.url} style={imageStyles} />\n </Pan>\n </div>\n );\n};\n\nexport default ImagePreview;\n\nconst $con