{"version":3,"file":"NextStudioLoading-6469ed23.cjs","sources":["../../src/studio/useTheme.ts","../../src/studio/NextStudioNoScript.tsx","../../src/studio/NextStudioLoading.tsx"],"sourcesContent":["import {useMemo} from 'react'\nimport {type Config, type SingleWorkspace, type StudioTheme, defaultTheme} from 'sanity'\n\n/** @alpha */\nexport function useTheme(\n  config?: Config | Required<Pick<SingleWorkspace, 'theme'>>\n): StudioTheme {\n  const workspace = useMemo<\n    SingleWorkspace | Required<Pick<SingleWorkspace, 'theme'>> | undefined\n  >(() => (Array.isArray(config) ? config[0] : config), [config])\n  return useMemo<StudioTheme>(() => workspace?.theme || defaultTheme, [workspace])\n}\n","/* eslint-disable react/no-danger */\n\nconst style = {\n  __html: `\n.sanity-app-no-js__root {\n  position: absolute;\n  top: 0;\n  right: 0;\n  left: 0;\n  bottom: 0;\n  background: #fff;\n  z-index: 1;\n}\n\n.sanity-app-no-js__content {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  text-align: center;\n  font-family: helvetica, arial, sans-serif;\n}\n`,\n} as const\n\n/** @alpha */\nexport const NextStudioNoScript = () => (\n  <noscript>\n    <div className=\"sanity-app-no-js__root\">\n      <div className=\"sanity-app-no-js__content\">\n        <style type=\"text/css\" dangerouslySetInnerHTML={style} />\n        <h1>JavaScript disabled</h1>\n        <p>\n          Please <a href=\"https://www.enable-javascript.com/\">enable JavaScript</a> in your\n          browser and reload the page to proceed.\n        </p>\n      </div>\n    </div>\n  </noscript>\n)\n","/* eslint-disable no-warning-comments */\n// Intentionally not using `styled-components` to ensure it works in any `next` setup.\n// Wether 'styled-components' SSR is setup or not.\n\nimport {SpinnerIcon} from '@sanity/icons'\nimport {_responsive, rem} from '@sanity/ui'\nimport type {Config, SingleWorkspace, StudioProps} from 'sanity'\n\nimport {NextStudioNoScript} from './NextStudioNoScript'\nimport {useTheme} from './useTheme'\n\n/** @alpha */\nexport interface NextStudioLoadingProps extends Pick<StudioProps, 'scheme'> {\n  /**\n   * If your Studio Config has a custom theme you can pass it here to ensure the loading screen matches your theme.\n   */\n  config?: Config | Required<Pick<SingleWorkspace, 'theme'>>\n  /**\n   * Render the <noscript> tag\n   * @defaultValue true\n   * @alpha\n   */\n  unstable__noScript?: boolean\n}\n\nconst keyframes = `\nfrom {\n  transform: rotate(0deg);\n}\n\nto {\n  transform: rotate(360deg);\n}\n`\n\nexport function NextStudioLoading(props: NextStudioLoadingProps) {\n  const {config, scheme = 'light', unstable__noScript = true} = props\n  const id = 'next-sanity-spinner'\n  const theme = useTheme(config)\n  const {fonts, media} = theme\n\n  const styles: any = _responsive(media, [2], (size: number) => {\n    const {ascenderHeight, descenderHeight, lineHeight, iconSize} = fonts.text.sizes[size]\n    const capHeight = lineHeight - ascenderHeight - descenderHeight\n\n    return {\n      wrapper: {\n        display: 'block',\n        animation: `${id} 500ms linear infinite`,\n        color: theme.color[scheme].default.muted.default.enabled.muted.fg,\n        width: rem(capHeight),\n        height: rem(capHeight),\n      },\n      svg: {\n        display: 'block',\n        width: rem(iconSize),\n        height: rem(iconSize),\n        margin: (capHeight - iconSize) / 2,\n      },\n    }\n  })[0]\n\n  return (\n    <>\n      {unstable__noScript && <NextStudioNoScript />}\n      <div\n        style={{\n          fontFamily: fonts.text.family,\n          backgroundColor: theme.color[scheme].default.base.bg,\n          height: '100vh',\n          maxHeight: '100dvh',\n          overscrollBehavior: 'none',\n          WebkitFontSmoothing: 'antialiased',\n          overflow: 'auto',\n        }}\n      >\n        <div\n          data-ui=\"Flex\"\n          style={{\n            display: 'flex',\n            minWidth: 0,\n            minHeight: 0,\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexDirection: 'column',\n            height: '100%',\n            margin: 0,\n            padding: 0,\n            // @TODO use rem calc\n            gap: '10px',\n          }}\n        >\n          <style key={scheme}>{`@keyframes ${id} {${keyframes}}`}</style>\n          <div\n            data-ui=\"Text\"\n            style={{\n              position: 'relative',\n              // @TODO read from theme\n              fontWeight: 400,\n              // @TODO read from theme\n              padding: '1px 0px',\n              // @TODO use rem calc\n              fontSize: '1rem',\n              // @TODO use rem calc\n              lineHeight: 'calc(1.3125)',\n              // @TODO use rem calc\n              transform: 'translateY(-5px)',\n              color: theme.color[scheme].default.muted.default.enabled.muted.fg,\n            }}\n          >\n            <span>Loading…</span>\n          </div>\n          <div data-ui=\"Spinner\" style={styles.wrapper}>\n            <SpinnerIcon style={styles.svg} />\n          </div>\n        </div>\n      </div>\n    </>\n  )\n}\n"],"names":["useTheme","config","workspace","useMemo","Array","isArray","theme","defaultTheme","style","__html","NextStudioNoScript","jsx","children","className","jsxs","type","dangerouslySetInnerHTML","href","keyframes","NextStudioLoading","props","scheme","unstable__noScript","id","fonts","media","styles","_responsive","size","ascenderHeight","descenderHeight","lineHeight","iconSize","text","sizes","capHeight","wrapper","display","animation","color","default","muted","enabled","fg","width","rem","height","svg","margin","Fragment","fontFamily","family","backgroundColor","base","bg","maxHeight","overscrollBehavior","WebkitFontSmoothing","overflow","minWidth","minHeight","alignItems","justifyContent","flexDirection","padding","gap","position","fontWeight","fontSize","transform","SpinnerIcon"],"mappings":"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"}