{"version":3,"file":"PageTemplate.cjs","names":["_styled","_interopRequireDefault","require","_react","_index","_OdysseyDesignTokensContext","_Typography","_useHasUiShell","_useMountLifecycleEffect","_DocumentationLink","_jsxRuntime","e","__esModule","default","TemplateContainer","styled","shouldForwardProp","prop","hasUiShell","isFullWidth","odysseyDesignTokens","maxWidth","Spacing6","marginInline","padding","TemplateHeader","display","alignItems","justifyContent","gap","Spacing4","TemplateHeaderPrimaryContent","TypographyLineLengthMax","marginBlockEnd","TemplateHeaderSecondaryContent","flexDirection","minHeight","Spacing7","whiteSpace","TemplateHeaderButtons","Spacing2","TemplateContent","includes","drawerVariant","isDrawerOpen","isFirstRender","gridTemplateColumns","gridGap","marginBlock","animation","undefined","PageTemplate","children","description","documentationLink","documentationText","drawer","primaryCallToActionComponent","secondaryCallToActionComponent","tertiaryCallToActionComponent","title","useOdysseyDesignTokens","isOpen","variant","props","useHasUiShell","firstRenderRef","useRef","current","onMount","useCallback","useMountLifecycleEffect","jsxs","jsx","Heading4","Paragraph","DocumentationLink","href","icon","DocumentationIcon","target","MemoizedPageTemplate","exports","memo","displayName"],"sources":["../../../../src/labs/PageTemplate/PageTemplate.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport styled from \"@emotion/styled\";\nimport { memo, ReactElement, ReactNode, useCallback, useRef } from \"react\";\n\nimport { DrawerProps } from \"../../Drawer.js\";\nimport { DocumentationIcon } from \"../../icons.generated/index.js\";\nimport {\n  DesignTokens,\n  useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext.js\";\nimport { Heading4, Paragraph } from \"../../Typography.js\";\nimport { useHasUiShell } from \"../../ui-shell/useHasUiShell.js\";\nimport { useMountLifecycleEffect } from \"../../useMountLifecycleEffect.js\";\nimport { DocumentationLink } from \"./DocumentationLink.js\";\n\nexport type PageTemplateProps = {\n  /**\n   * The content of the layout. May be a `string` or any other `ReactNode` or array of `ReactNode`s. Will often be `Grid` objects.\n   */\n  children?: ReactNode;\n  /**\n   * A supplementary description to be situated in the layout header\n   */\n  description?: string;\n  /**\n   * The destination for a documentation `Link` to be situated in the layout header\n   */\n  documentationLink?: string;\n  /**\n   * The text for a documentation `Link` to be situated in the layout header\n   */\n  documentationText?: string;\n  /**\n   * An optional `Drawer` object. Can be of variant 'temporary' or 'persistent'.\n   */\n  drawer?: ReactElement<DrawerProps>;\n  /**\n   * When set to `true`, the layout expands past its max width of 1440px and spans the entire available screen width.\n   */\n  isFullWidth?: boolean;\n  /**\n   * An optional `Button` object to be situated in the layout header. Should almost always be of variant `primary`.\n   */\n  primaryCallToActionComponent?: ReactElement;\n  /**\n   * An optional `Button` object to be situated in the layout header, alongside the `callToActionPrimaryComponent`.\n   */\n  secondaryCallToActionComponent?: ReactElement;\n  /**\n   * An optional `Button` object to be situated in the layout header, alongside the other two `callToAction` components.\n   */\n  tertiaryCallToActionComponent?: ReactElement;\n  /**\n   * The title of the layout to be situated in the layout header\n   */\n  title?: string;\n};\n\ntype TemplateContentProps = {\n  drawerVariant?: string;\n  isDrawerOpen?: boolean;\n  isFirstRender: boolean;\n  odysseyDesignTokens: DesignTokens;\n};\n\nconst TemplateContainer = styled(\"div\", {\n  shouldForwardProp: (prop) =>\n    prop !== \"odysseyDesignTokens\" &&\n    prop !== \"hasUiShell\" &&\n    prop !== \"isFullWidth\",\n})<{\n  hasUiShell: boolean;\n  isFullWidth: boolean;\n  odysseyDesignTokens: DesignTokens;\n}>(({ hasUiShell, isFullWidth, odysseyDesignTokens }) => ({\n  maxWidth: isFullWidth\n    ? \"100%\"\n    : `calc(1440px + ${odysseyDesignTokens.Spacing6} + ${odysseyDesignTokens.Spacing6})`,\n  marginInline:\n    isFullWidth && !hasUiShell ? odysseyDesignTokens.Spacing6 : \"auto\",\n  padding: hasUiShell ? 0 : odysseyDesignTokens.Spacing6,\n}));\n\nconst TemplateHeader = styled(\"div\", {\n  shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n  odysseyDesignTokens: DesignTokens;\n}>(({ odysseyDesignTokens }) => ({\n  display: \"flex\",\n  alignItems: \"flex-start\",\n  justifyContent: \"space-between\",\n  gap: odysseyDesignTokens.Spacing4,\n}));\n\nconst TemplateHeaderPrimaryContent = styled(\"div\", {\n  shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n  odysseyDesignTokens: DesignTokens;\n}>(({ odysseyDesignTokens }) => ({\n  maxWidth: odysseyDesignTokens.TypographyLineLengthMax,\n  [\".MuiTypography-root:last-child\"]: {\n    marginBlockEnd: \"0\",\n  },\n}));\n\nconst TemplateHeaderSecondaryContent = styled(\"div\", {\n  shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n  odysseyDesignTokens: DesignTokens;\n}>(({ odysseyDesignTokens }) => ({\n  alignItems: \"flex-end\",\n  display: \"flex\",\n  flexDirection: \"column\",\n  gap: odysseyDesignTokens.Spacing4,\n  minHeight: odysseyDesignTokens.Spacing7,\n  justifyContent: \"center\",\n  whiteSpace: \"nowrap\",\n}));\n\nconst TemplateHeaderButtons = styled(\"div\", {\n  shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n  odysseyDesignTokens: DesignTokens;\n}>(({ odysseyDesignTokens }) => ({\n  display: \"flex\",\n  gap: odysseyDesignTokens.Spacing2,\n}));\n\nconst TemplateContent = styled(\"div\", {\n  shouldForwardProp: (prop) =>\n    ![\n      \"drawerVariant\",\n      \"isDrawerOpen\",\n      \"isFirstRender\",\n      \"odysseyDesignTokens\",\n    ].includes(prop),\n})<TemplateContentProps>(\n  ({ drawerVariant, isDrawerOpen, isFirstRender, odysseyDesignTokens }) => ({\n    \"@keyframes animate-drawer-open\": {\n      \"0%\": {\n        gridTemplateColumns: \"minmax(0, 1fr) 0\",\n      },\n      \"100%\": {\n        gridTemplateColumns: \"minmax(0, 1fr) 360px\",\n      },\n    },\n    \"@keyframes animate-drawer-close\": {\n      \"0%\": {\n        gridTemplateColumns: \"minmax(0, 1fr) 360px\",\n      },\n      \"100%\": {\n        gridTemplateColumns: \"minmax(0, 1fr) 0\",\n      },\n    },\n    display: \"grid\",\n    gridGap:\n      drawerVariant === \"persistent\" && !isDrawerOpen\n        ? 0\n        : odysseyDesignTokens.Spacing4,\n    gap:\n      drawerVariant === \"persistent\" && !isDrawerOpen\n        ? 0\n        : odysseyDesignTokens.Spacing4,\n    marginBlock: odysseyDesignTokens.Spacing4,\n    gridTemplateColumns:\n      drawerVariant === \"persistent\"\n        ? isDrawerOpen\n          ? \"minmax(0, 1fr) 360px\"\n          : \"minmax(0, 1fr) 0\"\n        : \"minmax(0, 1fr)\",\n    animation:\n      drawerVariant === \"persistent\" && (!isFirstRender || isDrawerOpen)\n        ? `animate-drawer-${isDrawerOpen ? \"open\" : \"close\"} 225ms cubic-bezier(0, 0, 0.2, 1)`\n        : undefined,\n  }),\n);\n\nconst PageTemplate = ({\n  children,\n  description,\n  documentationLink,\n  documentationText,\n  drawer,\n  isFullWidth = false,\n  primaryCallToActionComponent,\n  secondaryCallToActionComponent,\n  tertiaryCallToActionComponent,\n  title,\n}: PageTemplateProps) => {\n  const odysseyDesignTokens = useOdysseyDesignTokens();\n  const { isOpen: isDrawerOpen, variant: drawerVariant } = drawer?.props ?? {};\n\n  const hasUiShell = useHasUiShell();\n\n  const firstRenderRef = useRef(true);\n\n  const isFirstRender = firstRenderRef.current;\n\n  const onMount = useCallback(() => {\n    firstRenderRef.current = false;\n  }, []);\n\n  useMountLifecycleEffect({\n    onMount,\n  });\n\n  return (\n    <TemplateContainer\n      hasUiShell={hasUiShell}\n      isFullWidth={isFullWidth}\n      odysseyDesignTokens={odysseyDesignTokens}\n    >\n      <TemplateHeader odysseyDesignTokens={odysseyDesignTokens}>\n        <TemplateHeaderPrimaryContent odysseyDesignTokens={odysseyDesignTokens}>\n          {title && <Heading4>{title}</Heading4>}\n          {description && <Paragraph>{description}</Paragraph>}\n        </TemplateHeaderPrimaryContent>\n        <TemplateHeaderSecondaryContent\n          odysseyDesignTokens={odysseyDesignTokens}\n        >\n          {documentationLink && (\n            <DocumentationLink\n              href={documentationLink}\n              icon={<DocumentationIcon />}\n              target=\"_blank\"\n            >\n              {documentationText}\n            </DocumentationLink>\n          )}\n          {(primaryCallToActionComponent ||\n            secondaryCallToActionComponent ||\n            tertiaryCallToActionComponent) && (\n            <TemplateHeaderButtons odysseyDesignTokens={odysseyDesignTokens}>\n              {tertiaryCallToActionComponent}\n              {secondaryCallToActionComponent}\n              {primaryCallToActionComponent}\n            </TemplateHeaderButtons>\n          )}\n        </TemplateHeaderSecondaryContent>\n      </TemplateHeader>\n      <TemplateContent\n        drawerVariant={drawerVariant}\n        isDrawerOpen={isDrawerOpen}\n        isFirstRender={isFirstRender}\n        odysseyDesignTokens={odysseyDesignTokens}\n      >\n        {children}\n        {drawer}\n      </TemplateContent>\n    </TemplateContainer>\n  );\n};\n\nconst MemoizedPageTemplate = memo(PageTemplate);\nMemoizedPageTemplate.displayName = \"PageTemplate\";\n\nexport { MemoizedPageTemplate as PageTemplate };\n"],"mappings":"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","ignoreList":[]}