@decafhub/decaf-react-webapp 0.0.13 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/components/Error.tsx","../src/utils.tsx","../src/style.ts","../src/theme.tsx","../src/components/Logo.tsx","../src/components/PageScroller.tsx","../src/components/Screenshotter.tsx","../src/components/ThemeSwitcher.tsx","../src/components/VersionSelector.tsx","../src/components/ZendeskWidget.tsx","../src/components/Layout.tsx","../src/components/PageAbout.tsx","../src/index.tsx"],"sourcesContent":["import { Button, Result, Typography } from 'antd';\nimport React from 'react';\nimport { Link } from 'react-router-dom';\n\nexport function Page404() {\n return <Result status=\"404\" title={'404'} subTitle={'Sorry, the page you visited does not exist.'} />;\n}\n\nexport function ErrorElement() {\n return (\n <Result\n status=\"500\"\n title={'Error'}\n subTitle={\n <>\n <Typography>\n Something went wrong. Please try again later. If the problem persists, please contact the administrator.\n </Typography>\n <Link to=\"/\">\n <Button style={{ marginTop: 20 }}>Back Home</Button>\n </Link>\n </>\n }\n />\n );\n}\n","import { useLayoutEffect, useState } from 'react';\n\n/**\n * This hook is used to calculate the max possible height of a table.\n * It is used to set the height of the table to make it scrollable\n * when the content is too large.\n * @param elementId the id of the element that contains the table.\n * @param bottomSpace extra space to be added to the bottom of the table container.\n * @returns the max height of the table.\n * @example\n * ```tsx\n * const maxHeight = useTableMaxHeight('table-container', 50);\n * return (\n * <Table\n {...tableProps}\n id={'table-container'}\n scroll={{\n x: 'max-content',\n y: maxHeight,\n }}\n />\n* );\n* ```\n**/\nexport function useTableMaxHeight(elementId: string, bottomSpace?: number): string | number {\n const [maxHeight, setMaxHeight] = useState<string | number>(400);\n const w = document.getElementById(elementId);\n\n useLayoutEffect(() => {\n const calculate = () => {\n if (!w) {\n return;\n }\n const footerHeight = 50; // height of the footer with some padding\n let parentPaddingBottom = 80; // default padding bottom of the container element\n const closestContainer = w.parentElement; // get the closest container element\n if (closestContainer) {\n parentPaddingBottom = parseFloat(getComputedStyle(closestContainer, null).paddingBottom);\n parentPaddingBottom = isNaN(parentPaddingBottom) || parentPaddingBottom < 10 ? 80 : parentPaddingBottom;\n }\n const bottomMargin = parentPaddingBottom + footerHeight + (bottomSpace || 0);\n const boundingRect = w.getBoundingClientRect(); // get area and offset information.\n const max = window.innerHeight - boundingRect.top - bottomMargin; // this is the height of the our table content.\n setMaxHeight(max > 350 ? max : '100%');\n };\n\n calculate();\n w?.addEventListener('resize', calculate);\n window.addEventListener('resize', calculate);\n\n return () => {\n window.removeEventListener('resize', calculate);\n w?.removeEventListener('resize', calculate);\n };\n }, [elementId, w, bottomSpace]);\n\n return maxHeight;\n}\n\nexport function lightenDarkenColor(col: string, amt: number) {\n let usePound = false;\n\n if (col[0] === '#') {\n col = col.slice(1);\n usePound = true;\n }\n\n const num = parseInt(col, 16);\n\n let r = (num >> 16) + amt;\n\n if (r > 255) r = 255;\n else if (r < 0) r = 0;\n\n let b = ((num >> 8) & 0x00ff) + amt;\n\n if (b > 255) b = 255;\n else if (b < 0) b = 0;\n\n let g = (num & 0x0000ff) + amt;\n\n if (g > 255) g = 255;\n else if (g < 0) g = 0;\n\n return (usePound ? '#' : '') + String('000000' + (g | (b << 8) | (r << 16)).toString(16)).slice(-6);\n}\n","import { Interpolation, Theme } from '@emotion/react';\nimport { ThemeConfig } from 'antd/es/config-provider/context';\nimport { lightenDarkenColor } from './utils';\n\nfunction getBaseStyles(theme: ThemeConfig): Interpolation<Theme> {\n return {\n body: {\n background: theme.token?.colorBgBase,\n fontFamily: 'Lato, sans-serif',\n margin: 0,\n },\n button: {\n boxShadow: 'none !important',\n },\n '.ant-table-body': {\n overflow: 'auto !important',\n },\n '#decaf-header': {\n position: 'fixed',\n zIndex: 999,\n right: 0,\n left: 0,\n paddingInline: 0,\n },\n '#decaf-content': {\n paddingInline: 20,\n paddingTop: '5rem',\n paddingBottom: '5rem',\n },\n '#decaf-footer': {\n position: 'fixed',\n bottom: 0,\n right: 0,\n left: 0,\n background: theme.token?.colorBgContainer,\n paddingBlock: 0,\n paddingInline: 0,\n zIndex: 999,\n\n button: {\n height: 34,\n },\n },\n '.dot': {\n borderRadius: '50%',\n width: 10,\n height: 10,\n display: 'inline-block',\n backgroundColor: 'rgba(255,255,255,.25)',\n '&.green': {\n backgroundColor: `#80ff00 !important`,\n },\n '&.yellow': {\n backgroundColor: `#ff0 !important`,\n },\n '&.orange': {\n backgroundColor: `#ff7000 !important`,\n },\n '&.red': {\n backgroundColor: `#ff0000 !important`,\n },\n },\n };\n}\n\nexport function getLightStyles(theme: ThemeConfig): Interpolation<Theme> {\n const baseStyles = getBaseStyles(theme) as any;\n\n return {\n ...(baseStyles as any),\n };\n}\n\nexport function getDarkStyles(theme: ThemeConfig): Interpolation<Theme> {\n const baseStyles = getBaseStyles(theme) as any;\n\n return {\n ...baseStyles,\n '*': {\n '&::-webkit-scrollbar': {\n width: 10,\n height: 10,\n },\n '&::-webkit-scrollbar-track': {\n background: theme.token?.colorBgBase,\n },\n '&::-webkit-scrollbar-thumb': {\n background: theme.token?.colorPrimary,\n },\n },\n '.ant-page-header-back-button, .ant-page-header-heading-title': {\n color: `${theme.token?.colorWhite} !important`,\n },\n '.ant-badge-count': {\n color: `${theme.token?.colorWhite} !important`,\n },\n '.ant-table-thead > tr > th': {\n background: `${lightenDarkenColor(theme.token?.colorBgContainer || '', -5)} !important`,\n '&:hover': {\n background: `${theme.token?.colorBgContainer} !important`,\n },\n },\n '.ant-table-filter-dropdown': {\n 'input, .ant-table-filter-dropdown-search-input': {\n background: `${theme.token?.colorBgBase} !important`,\n },\n '.ant-dropdown-menu-item, .ant-dropdown-menu': {\n background: `${theme.token?.colorBgContainer} !important`,\n },\n },\n '.ant-menu-light.ant-menu-horizontal >.ant-menu-item-selected': {\n color: `${theme.token?.colorWhite} !important`,\n },\n '.ant-tabs-tab-active': {\n '.ant-tabs-tab-btn': {\n color: `${theme.token?.colorWhite} !important`,\n },\n },\n };\n}\n","import { css, Global } from '@emotion/react';\nimport { ConfigProvider, theme } from 'antd';\nimport { ThemeConfig } from 'antd/es/config-provider/context';\nimport React from 'react';\nimport { getDarkStyles, getLightStyles } from './style';\n\nconst MAIN_BLACK = '#10161d';\nconst INPUT_BG_COLOR = '#2c3d50';\n\nconst BORDER_COLORS_TRANSPARENT = {\n colorBorder: 'transparent',\n colorBorderSecondary: 'transparent',\n colorBorderBg: 'transparent',\n};\n\nexport const decafThemeLight: ThemeConfig = {\n hashed: true,\n algorithm: [theme.defaultAlgorithm],\n token: {\n borderRadius: 0,\n },\n};\n\nexport const decafThemeDark: ThemeConfig = {\n hashed: true,\n components: {\n Layout: {\n colorBgHeader: MAIN_BLACK,\n },\n Button: {\n boxShadow: 'none',\n boxShadowSecondary: 'none',\n colorBgContainer: INPUT_BG_COLOR,\n },\n Input: {\n ...BORDER_COLORS_TRANSPARENT,\n colorBgContainer: INPUT_BG_COLOR,\n },\n Select: {\n ...BORDER_COLORS_TRANSPARENT,\n colorBgContainer: INPUT_BG_COLOR,\n },\n Dropdown: {\n ...BORDER_COLORS_TRANSPARENT,\n },\n DatePicker: {\n ...BORDER_COLORS_TRANSPARENT,\n colorBgContainer: INPUT_BG_COLOR,\n colorBgElevated: INPUT_BG_COLOR,\n },\n InputNumber: {\n ...BORDER_COLORS_TRANSPARENT,\n colorBgContainer: INPUT_BG_COLOR,\n },\n Menu: {\n colorItemText: 'rgba(255, 255, 255, 0.5)',\n },\n },\n token: {\n fontFamily: 'Lato, sans-serif',\n colorPrimary: '#344961',\n colorBgBase: '#1a242f',\n colorBgContainer: MAIN_BLACK,\n colorBgElevated: '#1a242f',\n colorBorderSecondary: '#1a242f',\n colorBorder: '#1a242f',\n colorBgLayout: '#1a242f',\n borderRadius: 0,\n green: '#48734d',\n red: '#b03a38',\n blue: '#0d6efd',\n yellow: '#ffc107',\n orange: '#fd7e14',\n colorWhite: '#fff',\n colorLink: '#a4bfff',\n colorLinkHover: '#7199fb',\n colorLinkActive: '#7199fb',\n },\n\n algorithm: [theme.darkAlgorithm],\n};\n\ninterface ThemeContextProps {\n theme: 'dark' | 'light';\n toggleTheme: () => void;\n}\nexport const ThemeContext = React.createContext<ThemeContextProps>({\n theme: 'dark',\n toggleTheme: () => {},\n});\n\ninterface ThemeProviderProps {\n children: React.ReactNode;\n themeConfig?: ThemeConfig;\n theme?: 'dark' | 'light';\n}\nexport function ThemeProvider(props: ThemeProviderProps) {\n const [value, setValue] = React.useState<'dark' | 'light'>(() => {\n const theme = props.theme || localStorage.getItem('decafAppTheme');\n if (theme === 'dark' || theme === 'light') {\n return theme;\n }\n return 'dark';\n });\n\n function setTheme() {\n const t = value === 'dark' ? 'light' : 'dark';\n setValue(t);\n localStorage.setItem('decafAppTheme', t);\n }\n\n let theme = value === 'light' ? decafThemeLight : decafThemeDark;\n theme = { ...theme, ...(props.themeConfig || {}) };\n theme = { ...theme, token: { ...theme.token, fontFamily: 'Lato, sans-serif' } };\n\n const globalStyles = value === 'light' ? getLightStyles(theme) : getDarkStyles(theme);\n\n return (\n <ThemeContext.Provider\n value={{\n theme: value,\n toggleTheme: setTheme,\n }}\n >\n <ConfigProvider theme={theme}>\n <Global\n styles={css`\n @import url(https://fonts.googleapis.com/css2?family=Lato:wght@400;700&display=swap);\n `}\n />\n <Global styles={globalStyles} />\n\n {props.children}\n </ConfigProvider>\n </ThemeContext.Provider>\n );\n}\n\nexport const useDecafTheme = () => React.useContext(ThemeContext);\n","import React from 'react';\n\nexport default function Logo() {\n return (\n <svg\n version=\"1.1\"\n id=\"Layer_1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n x=\"0px\"\n y=\"0px\"\n viewBox=\"0 0 649.6 767.9\"\n enableBackground={'new 0 0 649.6 767.9'}\n xmlSpace=\"preserve\"\n width={50}\n height={50}\n >\n <g>\n <path\n fill=\"#52CEF4\"\n d=\"M324,767.9c-6.6-5.1-14.2-8.6-21.3-12.9c-22-13-44.3-25.6-66.4-38.5c-21.3-12.4-42.5-25-63.8-37.4\n c-33.5-19.5-67.1-39-100.7-58.5c-22.7-13.2-45.3-26.5-68-39.6c-2.8-1.6-3.8-3.3-3.8-6.5c0.2-58.6-0.2-117.3,0.4-175.9\n C1,333,0.7,267.3,1,201.6c0-1.8-0.6-3.7,0.6-5.4c6.4,3.8,12.7,7.6,19.1,11.3c23.8,13.9,47.7,27.9,71.5,41.8\n c4.9,2.9,9.6,6.2,14.9,8.4c-1.2,5.2-0.2,10.3-0.1,15.5c0.5,56.1-0.2,112.2,0.9,168.3c0.3,18.4,0.2,36.8,0.2,55.2\n c0,3,0.7,4.9,3.5,6.4c6.3,3.4,12.3,7.3,18.5,11c26.1,15.7,52.3,31.5,78.4,47.2c33,19.8,66,39.6,99,59.3c5.7,3.4,10.9,7.5,17.2,9.7\n c0,1.5,0.1,2.9,0.1,4.4c0,42.4,0,84.8,0,127.3c0,1.8-0.7,3.7,0.8,5.3c0,0.2,0,0.4,0,0.7C325.1,767.9,324.5,767.9,324,767.9z\"\n />\n <path\n fill=\"#227EC3\"\n d=\"M107.1,257.6c-5.3-2.2-10-5.5-14.9-8.4c-23.8-13.9-47.7-27.8-71.5-41.8c-6.4-3.7-12.7-7.6-19.1-11.3\n c8.2-6,17.1-10.7,25.7-16c28.7-17.5,57.5-34.9,86.3-52.4c39.2-23.8,78.5-47.6,117.7-71.4c27-16.3,53.9-32.7,80.9-49\n c4-2.4,8.1-4.6,11.7-7.4c1.3,0,2.7,0,4,0c0.3,1.6,1.9,1.8,2.9,2.4c31,18.9,62,37.8,93.1,56.4c4.2,2.5,5.9,5.2,5.9,10.3\n c-0.3,38.3-0.1,76.7-0.1,115c0,2.7-0.1,5.3-0.2,8c-10.5-6.3-21-12.5-31.4-18.9c-23.1-14-46.2-28-69.3-42c-1.6-1-2.8-1.6-5-0.4\n c-26.8,15.8-53.7,31.5-80.6,47.2c-26.1,15.2-52.2,30.4-78.3,45.7C145.7,235,126.4,246.3,107.1,257.6z\"\n />\n <path\n fill=\"#409DD5\"\n d=\"M324.7,630.2c5.2-4.2,11-7.4,16.7-10.9c32.6-20.3,65.3-40.6,98-60.8c30.8-19,61.6-38,92.4-57\n c7.5-4.6,7.5-4.6,7.5-13.6c0-58.6,0.1-117.3,0.1-175.9c0-1.6-0.1-3.2-0.1-4.8c0.8-1.5,0.4-3.1,0.4-4.7c0.1-14.7,0.2-29.5,0.3-44.2\n c1.3,0.1,2.4-0.4,3.4-1c8.7-5.1,17.4-10.2,26.1-15.3c15.8-9.2,31.7-18.3,47.6-27.5c10.5-6.1,21.1-12.3,31.6-18.4\n c1.5,0.9,0.8,2.4,0.8,3.6c0,124.2,0,248.4,0.1,372.6c0,2.7-0.9,4-3.1,5.3c-35.3,20.8-70.5,41.7-105.8,62.6\n c-27.2,16.1-54.5,32.2-81.7,48.4c-27,16-54,32.1-81,48c-17.4,10.3-34.8,20.4-52.3,30.7c-1.5-1.6-0.8-3.5-0.8-5.3\n c0-42.4,0-84.8,0-127.3C324.8,633.2,324.7,631.7,324.7,630.2z\"\n />\n <path\n fill=\"#227EC3\"\n d=\"M648.7,196.1c-10.5,6.1-21,12.3-31.6,18.4c-15.8,9.2-31.7,18.3-47.6,27.5c-8.7,5.1-17.4,10.2-26.1,15.3\n c-1,0.6-2.1,1.1-3.4,1c0-12.4-0.1-24.8-0.1-37.2c0-30.2,0-60.5,0-91c2.8,0.3,4.5,2,6.5,3.1c28.4,17.3,56.8,34.7,85.2,52\n C637.3,188.8,643.4,191.8,648.7,196.1z\"\n />\n <path\n fill=\"#227EC3\"\n d=\"M216.2,322.3c-0.3-1.6-0.4-2.9,1.4-4c29.2-18,58.4-36.1,87.5-54.1c4.7-2.9,9.5-5.8,14.2-8.9\n c1.5-1,2.7-1.1,4.3-0.2c26.9,15.9,53.8,31.8,80.7,47.7c7.1,4.2,14.1,8.5,21.4,12.4c3.5,1.9,4.8,4.3,3.9,8c-1.7,1.1-3.3,2.2-5,3.2\n c-20.5,11.9-41.1,23.8-61.6,35.7c-13,7.6-26.1,15.2-39.1,22.8c-7-4-14-8.1-21-12.1c-21.7-12.7-43.2-25.5-65-38\n C230.7,330.5,223.8,325.8,216.2,322.3z\"\n />\n <path\n fill=\"#52CEF4\"\n d=\"M216.2,322.3c7.6,3.5,14.5,8.2,21.8,12.4c21.7,12.5,43.3,25.3,65,38c7,4.1,14,8.1,21,12.1\n c0,39.3,0.1,78.6,0.1,117.9c-1.5,0.9-2.5-0.4-3.6-1c-21.3-12.8-42.5-25.5-63.7-38.3c-13.3-8-26.5-16.1-39.8-24\n c-1.8-1.1-2.5-2.3-2.5-4.4c0.4-26.9,0.4-53.8,1.1-80.7C215.8,343.6,215.4,332.9,216.2,322.3z\"\n />\n <path\n fill=\"#409DD5\"\n d=\"M324,502.6c0-39.3-0.1-78.6-0.1-117.9c13-7.6,26.1-15.2,39.1-22.8c20.5-11.9,41.1-23.8,61.6-35.7\n c1.7-1,3.3-2.1,5-3.2c0.1,7.6,0.1,15.2,0.1,22.8c0,30.5,0,61,0,91.5c0,2.6-0.4,4.4-2.9,5.8c-31.6,18.2-63,36.5-94.5,54.8\n C329.6,499.6,327.2,501.8,324,502.6z\"\n />\n </g>\n </svg>\n );\n}\n","import { DownOutlined, UpOutlined } from '@ant-design/icons';\nimport { Button } from 'antd';\nimport React from 'react';\n\nexport default function PageScroller() {\n return (\n <div>\n <Button\n title=\"Scroll to top\"\n type=\"text\"\n size=\"small\"\n onClick={() => window.scrollTo({ top: 0, behavior: 'smooth' })}\n icon={<UpOutlined />}\n />\n <Button\n title=\"Scroll to bottom\"\n type=\"text\"\n size=\"small\"\n onClick={() => window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' })}\n icon={<DownOutlined />}\n />\n </div>\n );\n}\n","import { CameraOutlined } from '@ant-design/icons';\nimport { Button } from 'antd';\nimport html2canvas from 'html2canvas';\nimport React from 'react';\n\nexport interface ScreenShotterProps {\n triggerNode?: React.ReactNode;\n}\nexport default function ScreenShotter(props: ScreenShotterProps) {\n async function handleScreenshot() {\n // hide footer before taking screenshot\n const footer = document.getElementById('decaf-footer');\n footer?.style.setProperty('display', 'none');\n\n const canvas = await html2canvas(document.body);\n const dataUrl = canvas.toDataURL('image/png');\n\n // show footer after taking screenshot\n footer?.style.setProperty('display', 'block');\n\n const link = document.createElement('a');\n link.download = 'screenshot.png';\n link.href = dataUrl;\n link.click();\n link.remove();\n }\n\n if (props.triggerNode) {\n return React.cloneElement(props.triggerNode as React.ReactElement, {\n onClick: handleScreenshot,\n });\n } else {\n return (\n <Button\n title=\"Take a screenshot of the current page\"\n type=\"text\"\n size=\"small\"\n icon={<CameraOutlined />}\n onClick={handleScreenshot}\n />\n );\n }\n}\n","import { BulbFilled } from '@ant-design/icons';\nimport { Button } from 'antd';\nimport React from 'react';\n\ninterface ThemeSwitcherProps {\n theme: 'dark' | 'light';\n onChange: () => void;\n}\nexport default function ThemeSwitcher(props: ThemeSwitcherProps) {\n return (\n <Button\n title={props.theme === 'dark' ? 'switch to light theme' : 'switch to dark theme'}\n type=\"text\"\n size=\"small\"\n icon={\n <BulbFilled\n style={{\n color: props.theme === 'dark' ? 'white' : 'black',\n }}\n />\n }\n onClick={() => props.onChange()}\n />\n );\n}\n","import { CaretUpOutlined } from '@ant-design/icons';\nimport { Button, Dropdown } from 'antd';\nimport React from 'react';\n\ntype VersionCode = 'production' | 'staging' | 'testing' | 'development' | 'preview' | 'release';\nexport type Version = {\n code: VersionCode;\n name: string;\n color: string;\n url: string;\n show: boolean;\n};\n\nfunction getAppNameFromUrl(url: string) {\n const parts = url.split('/');\n const indexOfWebapps = parts.indexOf('webapps');\n if (indexOfWebapps === -1) {\n return '';\n } else {\n return parts[indexOfWebapps + 1];\n }\n}\n\nfunction getAppVersionFromUrl(url: string) {\n const parts = url.split('/');\n const indexOfWebapps = parts.indexOf('webapps');\n if (indexOfWebapps === -1) {\n return '';\n } else {\n return parts[indexOfWebapps + 2];\n }\n}\n\nfunction isPreviewVersion(version: string) {\n return version.startsWith('preview-') && version.length > 8;\n}\n\nfunction isReleaseVersion(version: string) {\n return version.startsWith('v') && version.length > 1;\n}\n\nfunction getAppVersionCode(version: string) {\n if (isPreviewVersion(version)) {\n return 'preview';\n } else if (isReleaseVersion(version)) {\n return 'release';\n } else {\n return version;\n }\n}\n\nfunction getCurrentAppPath(url: string) {\n const parts = url.split('/');\n const indexOfWebapps = parts.indexOf('webapps');\n if (indexOfWebapps === -1) {\n return '';\n } else {\n return parts.slice(indexOfWebapps + 3).join('/');\n }\n}\n\nexport default function VersionSelector() {\n const appName = getAppNameFromUrl(window.location.href);\n const appVersion = getAppVersionFromUrl(window.location.href); // development, staging, preview-123, v1.0.0\n const appVersionCode = getAppVersionCode(appVersion); // development, staging, preview, release\n\n const versions: Version[] = [\n {\n code: 'development',\n name: 'Development Version',\n color: 'red',\n url: `/webapps/${appName}/development/${getCurrentAppPath(window.location.href)}`,\n show: process.env.NODE_ENV === 'development',\n },\n {\n code: 'testing',\n name: 'Testing Version',\n color: 'orange',\n url: `/webapps/${appName}/testing/${getCurrentAppPath(window.location.href)}`,\n show: true,\n },\n {\n code: 'staging',\n name: 'Staging Version',\n color: 'yellow',\n url: `/webapps/${appName}/staging/${getCurrentAppPath(window.location.href)}`,\n show: true,\n },\n {\n code: 'production',\n name: 'Production Version',\n color: 'green',\n url: `/webapps/${appName}/production/${getCurrentAppPath(window.location.href)}`,\n show: true,\n },\n {\n code: 'preview',\n name: 'Preview Version',\n color: 'grey',\n url: `/`,\n show: false,\n },\n {\n code: 'release',\n name: 'Release Version',\n color: 'grey',\n url: `/`,\n show: false,\n },\n ];\n\n const currentVersion = versions.find((v) => v.code === appVersionCode);\n\n if (!currentVersion) {\n return null;\n }\n\n return (\n <Dropdown\n placement=\"top\"\n arrow\n menu={{\n items: versions\n .filter((v) => v.show)\n .map((version) => ({\n key: version.name,\n label: (\n <span>\n <i className={`dot ${version.color}`} /> {version.name}\n </span>\n ),\n onClick: () => {\n window.location.href = version.url;\n },\n })),\n }}\n >\n <Button type=\"text\" size=\"small\">\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <i className={`dot ${currentVersion?.color}`} style={{ marginRight: 5 }} />\n {currentVersion.code !== 'production' && (\n <span style={{ marginRight: 5 }}>\n You are on <b>{currentVersion.name}</b>\n </span>\n )}\n <CaretUpOutlined />\n </div>\n </Button>\n </Dropdown>\n );\n}\n","import { QuestionCircleOutlined } from '@ant-design/icons';\nimport { useDecaf } from '@decafhub/decaf-react';\nimport { Button } from 'antd';\nimport React, { useEffect, useState } from 'react';\n\nconst ZENDESK_WIDGET_SCRIPT = 'https://static.zdassets.com/ekr/snippet.js';\n\ndeclare global {\n // eslint-disable-next-line no-unused-vars\n interface Window {\n zE: any;\n zESettings: any;\n }\n}\n\nexport default function ZendeskWidget() {\n const { me, publicConfig } = useDecaf();\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n if (!publicConfig.zendesk || typeof document === 'undefined') return;\n const script = document.createElement('script');\n script.src = ZENDESK_WIDGET_SCRIPT + '?key=' + publicConfig.zendesk;\n script.async = true;\n script.id = 'ze-snippet'; // do not change this. zendesk expects this to be ze-snippet\n script.onload = () => {\n window.zE('webWidget', 'hide');\n window.zE('webWidget:on', 'open', () => {\n window.zE('webWidget', 'show');\n setOpen(true);\n });\n window.zE('webWidget:on', 'close', () => {\n window.zE('webWidget', 'hide');\n setOpen(false);\n });\n };\n\n document.body.appendChild(script);\n window.zESettings = {\n webWidget: {\n offset: {\n horizontal: -7,\n vertical: 20,\n },\n },\n contactForm: {\n subject: true,\n fields: [\n {\n id: 'name',\n prefill: { '*': me.fullname },\n },\n {\n id: 'email',\n prefill: { '*': me.email },\n },\n ],\n },\n };\n\n return () => {\n document.body.removeChild(script);\n };\n }, [publicConfig, me]);\n\n function toggle() {\n if (open) {\n window.zE?.('webWidget', 'close');\n } else {\n window.zE?.('webWidget', 'open');\n }\n setOpen(!open);\n }\n\n if (!publicConfig.zendesk) return null;\n\n return (\n <Button size=\"small\" icon={<QuestionCircleOutlined />} onClick={toggle}>\n Support\n </Button>\n );\n}\n","import { UserOutlined } from '@ant-design/icons';\nimport { useDecaf } from '@decafhub/decaf-react';\nimport { Button, Col, Layout, Menu, Row, theme as anttheme, Typography } from 'antd';\nimport { ItemType, SubMenuType } from 'antd/es/menu/hooks/useItems';\nimport React from 'react';\nimport { Link, NavLink, Outlet, useLocation, useMatches } from 'react-router-dom';\nimport { useDecafTheme } from '../theme';\nimport Logo from './Logo';\nimport PageScroller from './PageScroller';\nimport ScreenShotter from './Screenshotter';\nimport ThemeSwitcher from './ThemeSwitcher';\nimport VersionSelector from './VersionSelector';\nimport ZendeskWidget from './ZendeskWidget';\n\ninterface BaseDecafMenuItem {\n label: any;\n icon?: React.ReactNode;\n children?: DecafMenuItem[];\n}\n\nexport type DecafMenuItem = BaseDecafMenuItem & ({ to?: string } | { href?: string });\n\nexport interface DecafLayoutProps {\n menu: DecafMenuItem[];\n appName: string;\n}\n\nfunction buildAntMenuFromDecafMenu(routes: DecafMenuItem[]): ItemType[] {\n const result: ItemType[] = [];\n routes.forEach((route) => {\n const item: ItemType = {\n key: 'to' in route ? route.to : route.label,\n label: route.label,\n icon: route.icon,\n };\n if ('to' in route && route.to) {\n item.label = (\n <NavLink to={route.to} end={route.to === '/'}>\n {route.label}\n </NavLink>\n );\n } else if ('href' in route && route.href) {\n item.label = <a href={route.href}>{route.label}</a>;\n } else if (route.children) {\n item.label = route.label;\n (item as SubMenuType).children = buildAntMenuFromDecafMenu(route.children || []);\n }\n result.push(item);\n });\n\n return result;\n}\n\nexport default function DecafLayout(props: DecafLayoutProps) {\n const menuItems = buildAntMenuFromDecafMenu(props.menu);\n const matches = useMatches();\n const location = useLocation();\n const matchedMenuItems = matches\n .map((match) => match.pathname)\n .filter((pathname) => (location.pathname !== '/' ? pathname !== '/' : true)); // WORKAROUND: the root path always matches. We don't want that.\n const { me } = useDecaf();\n const { token } = anttheme.useToken();\n const { theme, toggleTheme: setTheme } = useDecafTheme();\n\n return (\n <Layout style={{ height: '100%' }}>\n <Layout.Header id=\"decaf-header\" style={{ background: token.colorBgContainer }}>\n <div style={{ paddingInline: 20, display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <Link to=\"/\" style={{ display: 'flex', alignItems: 'center', gap: 10 }}>\n <Logo />\n <Typography.Title level={4} style={{ margin: 0 }}>\n {props.appName}\n </Typography.Title>\n </Link>\n <Menu\n style={{ justifyContent: 'flex-end', backgroundColor: 'transparent', border: 'none', flex: 1 }}\n mode=\"horizontal\"\n items={menuItems}\n selectedKeys={matchedMenuItems}\n />\n </div>\n </Layout.Header>\n <Layout.Content id=\"decaf-content\">\n <Outlet />\n </Layout.Content>\n <Layout.Footer id=\"decaf-footer\">\n <Row justify=\"space-between\" align={'middle'}>\n <Col span={10}>\n <ZendeskWidget />\n </Col>\n <Col span={4} style={{ textAlign: 'center' }}>\n <Typography.Text type=\"secondary\">\n Powered by{' '}\n <b>\n <a href=\"https://teloscube.com\" target=\"_blank\" rel=\"noreferrer\">\n Teloscube\n </a>\n </b>\n </Typography.Text>\n </Col>\n <Col span={10} style={{ justifyContent: 'flex-end', display: 'flex', gap: 10 }}>\n <Button size=\"small\" icon={<UserOutlined />}>\n {me.username}\n </Button>\n <VersionSelector />\n <ThemeSwitcher theme={theme} onChange={setTheme} />\n <ScreenShotter />\n <PageScroller />\n </Col>\n </Row>\n </Layout.Footer>\n </Layout>\n );\n}\n","import { useDecaf } from '@decafhub/decaf-react';\nimport { Descriptions, Space } from 'antd';\nimport React, { useEffect, useState } from 'react';\n\nexport interface AboutPageProps {\n appName?: string;\n appVersion?: string;\n appDescription?: string;\n content?: React.ReactNode;\n}\nexport default function PageAbout(props: AboutPageProps) {\n const { client } = useDecaf();\n const [versionBarista, setVersionBarista] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n client.barista.get<{ version: string }>('/version/').then(({ data }) => setVersionBarista(data.version));\n }, [client]);\n\n return (\n <Space direction=\"vertical\" size=\"middle\" style={{ width: '100%' }}>\n <Descriptions title=\"About\" column={1} bordered>\n <Descriptions.Item label=\"Web Application Name\">{props.appName}</Descriptions.Item>\n <Descriptions.Item label=\"Web Application Description\">{props.appDescription}</Descriptions.Item>\n <Descriptions.Item label=\"Web Application Version\">{`v${props.appVersion}`}</Descriptions.Item>\n <Descriptions.Item label=\"DECAF Barista Version\">{`v${versionBarista}`}</Descriptions.Item>\n </Descriptions>\n {props.content}\n </Space>\n );\n}\n","import { InfoCircleOutlined } from '@ant-design/icons';\nimport { DecafApp, DecafAppConfig, DecafAppController, DecafWebappController } from '@decafhub/decaf-react';\nimport { css, Global } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport 'antd/dist/reset.css';\nimport { ThemeConfig } from 'antd/es/config-provider/context';\nimport React, { useEffect } from 'react';\nimport { createBrowserRouter, RouteObject, RouterProvider } from 'react-router-dom';\nimport { ErrorElement, Page404 } from './components/Error';\nimport DecafLayout, { DecafMenuItem } from './components/Layout';\nimport PageAbout from './components/PageAbout';\nimport { decafThemeDark, decafThemeLight, ThemeProvider } from './theme';\nimport { useTableMaxHeight } from './utils';\n\nexport type DecafRoute = RouteObject;\n\nexport interface DecafWebappProps {\n config?: DecafAppConfig;\n controller?: DecafAppController;\n /**\n * The theme of the app.\n *\n * Defaults to `dark`.\n */\n theme?: 'dark' | 'light';\n /**\n * The theme config of the app.\n *\n * This will be merged with the default theme config (dark or light).\n *\n * See https://ant.design/docs/react/customize-theme\n */\n themeConfig?: ThemeConfig;\n /**\n * App routes.\n *\n * About page and 404 page will be added automatically.\n *\n * See https://reactrouter.com/en/main/routers/create-browser-router#routes\n */\n routes: DecafRoute[];\n /**\n * App menu.<br />\n * About page will be added automatically.\n */\n menuItems: DecafMenuItem[];\n appName: string;\n appDescription?: string;\n /**\n * The extra content to show on the about page.\n */\n aboutPageContent?: React.ReactNode;\n}\n\nfunction addTo<T>(array: T[], items: T[], key: keyof T): T[] {\n const result: T[] = [...array];\n items.forEach((item) => {\n const index = result.findIndex((r) => r[key] === item[key]);\n if (index >= 0) {\n result[index] = item;\n } else {\n result.push(item);\n }\n });\n return result;\n}\n\nfunction DecafWebapp(props: DecafWebappProps) {\n useEffect(() => {\n // add plausible analytics\n const script = document.createElement('script');\n script.defer = true;\n script.setAttribute('data-domain', location.hostname);\n script.src = 'https://webax.svc.sys.decafhub.com/js/plausible.js';\n document.body.appendChild(script);\n\n return () => {\n document.body.removeChild(script);\n };\n }, []);\n\n let routes = addTo<RouteObject>(\n props.routes,\n [\n {\n path: '/about',\n element: (\n <PageAbout\n appName={props.appName}\n appVersion={props.config?.currentVersion}\n appDescription={props.appDescription}\n content={props.aboutPageContent}\n />\n ),\n },\n { path: '*', element: <Page404 /> },\n ],\n 'path'\n );\n\n const menuWithAboutPage = addTo(\n props.menuItems,\n [\n {\n label: 'About',\n to: '/about',\n icon: <InfoCircleOutlined />,\n },\n ],\n 'to' as any\n );\n\n routes = [\n {\n element: <DecafLayout menu={menuWithAboutPage} appName={props.appName} />,\n path: '/',\n children: routes,\n errorElement: <ErrorElement />,\n },\n ];\n\n const router = createBrowserRouter(routes, {\n basename: props.config?.basePath,\n });\n\n const controller = props.controller || DecafWebappController;\n controller.disableZendeskWidget = true;\n\n return (\n <ThemeProvider themeConfig={props.themeConfig} theme={props.theme}>\n <DecafApp config={props.config} controller={controller}>\n <RouterProvider router={router} />\n </DecafApp>\n </ThemeProvider>\n );\n}\nexport { DecafWebapp, Global as GlobalStyle, css, styled, decafThemeDark, decafThemeLight, useTableMaxHeight };\n"],"names":["Page404","React","createElement","Result","status","title","subTitle","ErrorElement","Fragment","Typography","Link","to","Button","style","marginTop","lightenDarkenColor","col","amt","usePound","slice","num","parseInt","r","b","g","String","toString","getBaseStyles","theme","_theme$token","_theme$token2","body","background","token","colorBgBase","fontFamily","margin","button","boxShadow","overflow","position","zIndex","right","left","paddingInline","paddingTop","paddingBottom","bottom","colorBgContainer","paddingBlock","height","borderRadius","width","display","backgroundColor","MAIN_BLACK","INPUT_BG_COLOR","BORDER_COLORS_TRANSPARENT","colorBorder","colorBorderSecondary","colorBorderBg","decafThemeLight","hashed","algorithm","defaultAlgorithm","decafThemeDark","components","Layout","colorBgHeader","boxShadowSecondary","Input","Select","Dropdown","_extends","DatePicker","colorBgElevated","InputNumber","Menu","colorItemText","colorPrimary","colorBgLayout","green","red","blue","yellow","orange","colorWhite","colorLink","colorLinkHover","colorLinkActive","darkAlgorithm","ThemeContext","createContext","toggleTheme","ThemeProvider","props","useState","localStorage","getItem","value","_React$useState","setValue","themeConfig","globalStyles","baseStyles","getLightStyles","_theme$token3","_theme$token4","_theme$token5","_theme$token6","_theme$token7","_theme$token8","_theme$token9","_theme$token10","_theme$token11","_theme$token12","color","getDarkStyles","Provider","t","setItem","ConfigProvider","Global","styles","css","_templateObject","children","useDecafTheme","useContext","Logo","version","id","xmlns","xmlnsXlink","x","y","viewBox","enableBackground","xmlSpace","fill","d","PageScroller","type","size","onClick","window","scrollTo","top","behavior","icon","UpOutlined","document","scrollHeight","DownOutlined","ScreenShotter","handleScreenshot","getElementById","footer","setProperty","Promise","resolve","html2canvas","canvas","dataUrl","toDataURL","link","download","href","click","remove","e","reject","triggerNode","cloneElement","CameraOutlined","ThemeSwitcher","BulbFilled","onChange","url","parts","split","indexOfWebapps","indexOf","join","VersionSelector","appName","location","appVersion","getAppVersionFromUrl","startsWith","length","isPreviewVersion","isReleaseVersion","versions","code","name","getCurrentAppPath","show","process","env","NODE_ENV","currentVersion","find","v","appVersionCode","placement","arrow","menu","items","filter","map","key","label","className","alignItems","marginRight","CaretUpOutlined","ZENDESK_WIDGET_SCRIPT","ZendeskWidget","useDecaf","me","_useDecaf","publicConfig","open","_useState","setOpen","useEffect","zendesk","script","src","async","onload","zE","appendChild","zESettings","webWidget","offset","horizontal","vertical","contactForm","subject","fields","prefill","fullname","email","removeChild","QuestionCircleOutlined","routes","forEach","route","item","NavLink","end","buildAntMenuFromDecafMenu","result","push","DecafLayout","menuItems","matches","useMatches","useLocation","matchedMenuItems","match","pathname","anttheme","useToken","_useDecafTheme","setTheme","Header","justifyContent","gap","Title","level","border","flex","mode","selectedKeys","Content","Outlet","Footer","Row","justify","align","Col","span","textAlign","Text","target","rel","UserOutlined","username","PageAbout","client","undefined","versionBarista","setVersionBarista","barista","get","then","data","Space","direction","Descriptions","column","bordered","Item","appDescription","content","array","index","findIndex","defer","setAttribute","hostname","addTo","path","element","config","_props$config","aboutPageContent","menuWithAboutPage","InfoCircleOutlined","errorElement","router","createBrowserRouter","basename","_props$config2","basePath","controller","DecafWebappController","disableZendeskWidget","DecafApp","RouterProvider","useTableMaxHeight","elementId","bottomSpace","maxHeight","setMaxHeight","w","useLayoutEffect","calculate","parentPaddingBottom","closestContainer","parentElement","parseFloat","getComputedStyle","isNaN","getBoundingClientRect","max","innerHeight","boundingRect","bottomMargin","addEventListener","removeEventListener"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.js","sources":["../src/theme.tsx","../src/components/Error.tsx","../src/utils.tsx","../src/style.ts","../src/components/Logo.tsx","../src/components/PageScroller.tsx","../src/components/Screenshotter.tsx","../src/components/ThemeSwitcher.tsx","../src/components/VersionSelector.tsx","../src/components/ZendeskWidget.tsx","../src/components/Layout.tsx","../src/components/PageAbout.tsx","../src/index.tsx"],"sourcesContent":["import { css, Global } from '@emotion/react';\nimport { ConfigProvider, theme } from 'antd';\nimport { ThemeConfig } from 'antd/es/config-provider/context';\nimport React from 'react';\nimport { getDarkStyles, getLightStyles } from './style';\n\nconst MAIN_BLACK = '#10161d';\nconst INPUT_BG_COLOR = '#2c3d50';\n\nconst BORDER_COLORS_TRANSPARENT = {\n colorBorder: 'transparent',\n colorBorderSecondary: 'transparent',\n colorBorderBg: 'transparent',\n};\n\nexport const decafThemeLight: ThemeConfig = {\n hashed: true,\n algorithm: [theme.defaultAlgorithm],\n components: {\n Layout: {\n colorBgHeader: '#ededed',\n },\n },\n token: {\n borderRadius: 0,\n colorBgContainer: '#f8f8f8',\n colorBgBase: '#f8f8f8',\n colorBgLayout: '#f8f8f8',\n },\n};\n\nexport const decafThemeDark: ThemeConfig = {\n hashed: true,\n components: {\n Layout: {\n colorBgHeader: MAIN_BLACK,\n },\n Button: {\n boxShadow: 'none',\n boxShadowSecondary: 'none',\n colorBgContainer: INPUT_BG_COLOR,\n },\n Input: {\n ...BORDER_COLORS_TRANSPARENT,\n colorBgContainer: INPUT_BG_COLOR,\n },\n Select: {\n ...BORDER_COLORS_TRANSPARENT,\n colorBgContainer: INPUT_BG_COLOR,\n },\n Checkbox: {\n ...BORDER_COLORS_TRANSPARENT,\n colorBgContainer: INPUT_BG_COLOR,\n },\n Dropdown: {\n ...BORDER_COLORS_TRANSPARENT,\n },\n DatePicker: {\n ...BORDER_COLORS_TRANSPARENT,\n colorBgContainer: INPUT_BG_COLOR,\n colorBgElevated: INPUT_BG_COLOR,\n },\n InputNumber: {\n ...BORDER_COLORS_TRANSPARENT,\n colorBgContainer: INPUT_BG_COLOR,\n },\n Menu: {\n colorItemText: 'rgba(255, 255, 255, 0.5)',\n },\n },\n token: {\n fontFamily: 'Inter, sans-serif',\n colorPrimary: '#344961',\n colorBgBase: '#1a242f',\n colorBgContainer: MAIN_BLACK,\n colorBgElevated: '#1a242f',\n colorBorderSecondary: '#1a242f',\n colorBorder: '#1a242f',\n colorBgLayout: '#1a242f',\n borderRadius: 0,\n green: '#48734d',\n red: '#b03a38',\n blue: '#0d6efd',\n yellow: '#ffc107',\n orange: '#fd7e14',\n colorWhite: '#fff',\n colorLink: '#a4bfff',\n colorLinkHover: '#7199fb',\n colorLinkActive: '#7199fb',\n },\n\n algorithm: [theme.darkAlgorithm],\n};\n\ninterface ThemeContextProps {\n theme: 'dark' | 'light';\n toggleTheme: () => void;\n}\nexport const ThemeContext = React.createContext<ThemeContextProps>({\n theme: 'dark',\n toggleTheme: () => {},\n});\n\ninterface ThemeProviderProps {\n children: React.ReactNode;\n themeConfig?: ThemeConfig;\n theme?: 'dark' | 'light';\n}\nexport function ThemeProvider(props: ThemeProviderProps) {\n const [value, setValue] = React.useState<'dark' | 'light'>(() => {\n const theme = props.theme || localStorage.getItem('decafAppTheme');\n if (theme === 'dark' || theme === 'light') {\n return theme;\n }\n return 'dark';\n });\n\n function setTheme() {\n const t = value === 'dark' ? 'light' : 'dark';\n setValue(t);\n localStorage.setItem('decafAppTheme', t);\n }\n\n let theme = value === 'light' ? decafThemeLight : decafThemeDark;\n theme = { ...theme, ...(props.themeConfig || {}) };\n theme = { ...theme, token: { ...theme.token, fontFamily: 'Inter, sans-serif' } };\n\n const globalStyles = value === 'light' ? getLightStyles(theme) : getDarkStyles(theme);\n\n return (\n <ThemeContext.Provider\n value={{\n theme: value,\n toggleTheme: setTheme,\n }}\n >\n <ConfigProvider theme={theme}>\n <Global\n styles={css`\n @import url(https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap);\n `}\n />\n <Global styles={globalStyles} />\n\n {props.children}\n </ConfigProvider>\n </ThemeContext.Provider>\n );\n}\n\nexport const useDecafTheme = () => React.useContext(ThemeContext);\n","import { LockFilled } from '@ant-design/icons';\nimport { Button, Result, Typography } from 'antd';\nimport React from 'react';\nimport { Link } from 'react-router-dom';\n\nfunction ErrorPageSubtitle({ message }: { message: string }) {\n return (\n <>\n <Typography>{message}</Typography>\n <Link to=\"/\">\n <Button style={{ marginTop: 20 }}>Home Page</Button>\n </Link>\n </>\n );\n}\n\nexport function Page401() {\n return (\n <Result\n icon={<LockFilled style={{ color: '#ff603b' }} />}\n title={'Authentication Error'}\n subTitle={<ErrorPageSubtitle message={'Your credentials are invalid. Please try to log in again.'} />}\n />\n );\n}\n\nexport function Page403() {\n return (\n <Result\n status=\"403\"\n title={'Access Denied'}\n subTitle={<ErrorPageSubtitle message={'You are not authorized to access this content.'} />}\n />\n );\n}\n\nexport function Page404() {\n return (\n <Result\n status=\"404\"\n title={'Page Not Found'}\n subTitle={<ErrorPageSubtitle message={'Sorry, the page you visited does not exist.'} />}\n />\n );\n}\n\nexport function PageError() {\n return (\n <Result\n status=\"500\"\n title={'Error'}\n subTitle={\n <ErrorPageSubtitle\n message={\n 'Something went wrong. Please try again later. If the problem persists, please contact the administrator.'\n }\n />\n }\n />\n );\n}\n","import { useLayoutEffect, useState } from 'react';\n\n/**\n * This hook is used to calculate the max possible height of a table.\n * It is used to set the height of the table to make it scrollable\n * when the content is too large.\n * @param elementId the id of the element that contains the table.\n * @param bottomSpace extra space to be added to the bottom of the table container.\n * @returns the max height of the table.\n * @example\n * ```tsx\n * const maxHeight = useTableMaxHeight('table-container', 50);\n * return (\n * <Table\n {...tableProps}\n id={'table-container'}\n scroll={{\n x: 'max-content',\n y: maxHeight,\n }}\n />\n* );\n* ```\n**/\nexport function useTableMaxHeight(elementId: string, bottomSpace?: number): string | number {\n const [maxHeight, setMaxHeight] = useState<string | number>(400);\n const w = document.getElementById(elementId);\n\n useLayoutEffect(() => {\n const calculate = () => {\n if (!w) {\n return;\n }\n const footerHeight = 50; // height of the footer with some padding\n let parentPaddingBottom = 80; // default padding bottom of the container element\n const closestContainer = w.parentElement; // get the closest container element\n if (closestContainer) {\n parentPaddingBottom = parseFloat(getComputedStyle(closestContainer, null).paddingBottom);\n parentPaddingBottom = isNaN(parentPaddingBottom) || parentPaddingBottom < 10 ? 80 : parentPaddingBottom;\n }\n const bottomMargin = parentPaddingBottom + footerHeight + (bottomSpace || 0);\n const boundingRect = w.getBoundingClientRect(); // get area and offset information.\n const max = window.innerHeight - boundingRect.top - bottomMargin; // this is the height of the our table content.\n setMaxHeight(max > 350 ? max : '100%');\n };\n\n calculate();\n w?.addEventListener('resize', calculate);\n window.addEventListener('resize', calculate);\n\n return () => {\n window.removeEventListener('resize', calculate);\n w?.removeEventListener('resize', calculate);\n };\n }, [elementId, w, bottomSpace]);\n\n return maxHeight;\n}\n\nexport function lightenDarkenColor(col: string, amt: number) {\n let usePound = false;\n\n if (col[0] === '#') {\n col = col.slice(1);\n usePound = true;\n }\n\n const num = parseInt(col, 16);\n\n let r = (num >> 16) + amt;\n\n if (r > 255) r = 255;\n else if (r < 0) r = 0;\n\n let b = ((num >> 8) & 0x00ff) + amt;\n\n if (b > 255) b = 255;\n else if (b < 0) b = 0;\n\n let g = (num & 0x0000ff) + amt;\n\n if (g > 255) g = 255;\n else if (g < 0) g = 0;\n\n return (usePound ? '#' : '') + String('000000' + (g | (b << 8) | (r << 16)).toString(16)).slice(-6);\n}\n","import { Interpolation, Theme } from '@emotion/react';\nimport { ThemeConfig } from 'antd/es/config-provider/context';\nimport { lightenDarkenColor } from './utils';\n\nfunction getBaseStyles(theme: ThemeConfig): Interpolation<Theme> {\n return {\n body: {\n background: theme.token?.colorBgBase,\n fontFamily: 'Inter, sans-serif',\n margin: 0,\n },\n button: {\n boxShadow: 'none !important',\n },\n '.ant-table-body': {\n overflow: 'auto !important',\n },\n '#decaf-header': {\n position: 'fixed',\n zIndex: 999,\n right: 0,\n left: 0,\n paddingInline: 0,\n },\n '#decaf-content': {\n paddingInline: 20,\n paddingTop: '5rem',\n paddingBottom: '5rem',\n },\n '#decaf-footer': {\n position: 'fixed',\n bottom: 0,\n right: 0,\n left: 0,\n background: theme.components?.Layout?.colorBgHeader,\n paddingBlock: 0,\n paddingInline: 0,\n zIndex: 999,\n\n button: {\n height: 34,\n },\n },\n '.dot': {\n borderRadius: '50%',\n width: 10,\n height: 10,\n display: 'inline-block',\n backgroundColor: 'rgba(255,255,255,.25)',\n '&.green': {\n backgroundColor: `#80ff00 !important`,\n },\n '&.yellow': {\n backgroundColor: `#ff0 !important`,\n },\n '&.orange': {\n backgroundColor: `#ff7000 !important`,\n },\n '&.red': {\n backgroundColor: `#ff0000 !important`,\n },\n },\n };\n}\n\nexport function getLightStyles(theme: ThemeConfig): Interpolation<Theme> {\n const baseStyles = getBaseStyles(theme) as any;\n\n return {\n ...(baseStyles as any),\n };\n}\n\nexport function getDarkStyles(theme: ThemeConfig): Interpolation<Theme> {\n const baseStyles = getBaseStyles(theme) as any;\n\n return {\n ...baseStyles,\n '*': {\n '&::-webkit-scrollbar': {\n width: 10,\n height: 10,\n },\n '&::-webkit-scrollbar-track': {\n background: theme.token?.colorBgContainer,\n },\n '&::-webkit-scrollbar-thumb': {\n background: theme.token?.colorPrimary,\n },\n },\n '.ant-page-header-back-button, .ant-page-header-heading-title': {\n color: `${theme.token?.colorWhite} !important`,\n },\n '.ant-badge-count': {\n color: `${theme.token?.colorWhite} !important`,\n },\n '.ant-table-thead > tr > th': {\n background: `${lightenDarkenColor(theme.token?.colorBgContainer || '', -5)} !important`,\n '&:hover': {\n background: `${theme.token?.colorBgContainer} !important`,\n },\n },\n '.ant-table-filter-dropdown': {\n 'input, .ant-table-filter-dropdown-search-input': {\n background: `${theme.token?.colorBgBase} !important`,\n },\n '.ant-dropdown-menu-item, .ant-dropdown-menu': {\n background: `${theme.token?.colorBgContainer} !important`,\n },\n },\n '.ant-menu-light.ant-menu-horizontal >.ant-menu-item-selected': {\n color: `${theme.token?.colorWhite} !important`,\n },\n '.ant-tabs-tab-active': {\n '.ant-tabs-tab-btn': {\n color: `${theme.token?.colorWhite} !important`,\n },\n },\n '.ant-radio-button-wrapper-checked': {\n backgroundColor: `${theme.components?.Button?.colorBgContainer} !important`,\n color: `${theme.token?.colorWhite} !important`,\n },\n '.ant-picker-date-panel': {\n '.ant-picker-cell-in-range, .ant-picker-cell-range-start, .ant-picker-cell-range-end': {\n '&::before': {\n background: `${theme.token?.colorBgBase} !important`,\n },\n '.ant-picker-cell-inner': {\n background: `${theme.token?.colorBgBase} !important`,\n },\n },\n '.ant-picker-cell-range-start, .ant-picker-cell-range-end': {\n '.ant-picker-cell-inner': {\n background: `${theme.token?.colorPrimary} !important`,\n },\n },\n },\n };\n}\n","import React from 'react';\n\nexport default function Logo() {\n return (\n <svg\n version=\"1.1\"\n id=\"Layer_1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n x=\"0px\"\n y=\"0px\"\n viewBox=\"0 0 649.6 767.9\"\n enableBackground={'new 0 0 649.6 767.9'}\n xmlSpace=\"preserve\"\n width={50}\n height={50}\n >\n <g>\n <path\n fill=\"#52CEF4\"\n d=\"M324,767.9c-6.6-5.1-14.2-8.6-21.3-12.9c-22-13-44.3-25.6-66.4-38.5c-21.3-12.4-42.5-25-63.8-37.4\n c-33.5-19.5-67.1-39-100.7-58.5c-22.7-13.2-45.3-26.5-68-39.6c-2.8-1.6-3.8-3.3-3.8-6.5c0.2-58.6-0.2-117.3,0.4-175.9\n C1,333,0.7,267.3,1,201.6c0-1.8-0.6-3.7,0.6-5.4c6.4,3.8,12.7,7.6,19.1,11.3c23.8,13.9,47.7,27.9,71.5,41.8\n c4.9,2.9,9.6,6.2,14.9,8.4c-1.2,5.2-0.2,10.3-0.1,15.5c0.5,56.1-0.2,112.2,0.9,168.3c0.3,18.4,0.2,36.8,0.2,55.2\n c0,3,0.7,4.9,3.5,6.4c6.3,3.4,12.3,7.3,18.5,11c26.1,15.7,52.3,31.5,78.4,47.2c33,19.8,66,39.6,99,59.3c5.7,3.4,10.9,7.5,17.2,9.7\n c0,1.5,0.1,2.9,0.1,4.4c0,42.4,0,84.8,0,127.3c0,1.8-0.7,3.7,0.8,5.3c0,0.2,0,0.4,0,0.7C325.1,767.9,324.5,767.9,324,767.9z\"\n />\n <path\n fill=\"#227EC3\"\n d=\"M107.1,257.6c-5.3-2.2-10-5.5-14.9-8.4c-23.8-13.9-47.7-27.8-71.5-41.8c-6.4-3.7-12.7-7.6-19.1-11.3\n c8.2-6,17.1-10.7,25.7-16c28.7-17.5,57.5-34.9,86.3-52.4c39.2-23.8,78.5-47.6,117.7-71.4c27-16.3,53.9-32.7,80.9-49\n c4-2.4,8.1-4.6,11.7-7.4c1.3,0,2.7,0,4,0c0.3,1.6,1.9,1.8,2.9,2.4c31,18.9,62,37.8,93.1,56.4c4.2,2.5,5.9,5.2,5.9,10.3\n c-0.3,38.3-0.1,76.7-0.1,115c0,2.7-0.1,5.3-0.2,8c-10.5-6.3-21-12.5-31.4-18.9c-23.1-14-46.2-28-69.3-42c-1.6-1-2.8-1.6-5-0.4\n c-26.8,15.8-53.7,31.5-80.6,47.2c-26.1,15.2-52.2,30.4-78.3,45.7C145.7,235,126.4,246.3,107.1,257.6z\"\n />\n <path\n fill=\"#409DD5\"\n d=\"M324.7,630.2c5.2-4.2,11-7.4,16.7-10.9c32.6-20.3,65.3-40.6,98-60.8c30.8-19,61.6-38,92.4-57\n c7.5-4.6,7.5-4.6,7.5-13.6c0-58.6,0.1-117.3,0.1-175.9c0-1.6-0.1-3.2-0.1-4.8c0.8-1.5,0.4-3.1,0.4-4.7c0.1-14.7,0.2-29.5,0.3-44.2\n c1.3,0.1,2.4-0.4,3.4-1c8.7-5.1,17.4-10.2,26.1-15.3c15.8-9.2,31.7-18.3,47.6-27.5c10.5-6.1,21.1-12.3,31.6-18.4\n c1.5,0.9,0.8,2.4,0.8,3.6c0,124.2,0,248.4,0.1,372.6c0,2.7-0.9,4-3.1,5.3c-35.3,20.8-70.5,41.7-105.8,62.6\n c-27.2,16.1-54.5,32.2-81.7,48.4c-27,16-54,32.1-81,48c-17.4,10.3-34.8,20.4-52.3,30.7c-1.5-1.6-0.8-3.5-0.8-5.3\n c0-42.4,0-84.8,0-127.3C324.8,633.2,324.7,631.7,324.7,630.2z\"\n />\n <path\n fill=\"#227EC3\"\n d=\"M648.7,196.1c-10.5,6.1-21,12.3-31.6,18.4c-15.8,9.2-31.7,18.3-47.6,27.5c-8.7,5.1-17.4,10.2-26.1,15.3\n c-1,0.6-2.1,1.1-3.4,1c0-12.4-0.1-24.8-0.1-37.2c0-30.2,0-60.5,0-91c2.8,0.3,4.5,2,6.5,3.1c28.4,17.3,56.8,34.7,85.2,52\n C637.3,188.8,643.4,191.8,648.7,196.1z\"\n />\n <path\n fill=\"#227EC3\"\n d=\"M216.2,322.3c-0.3-1.6-0.4-2.9,1.4-4c29.2-18,58.4-36.1,87.5-54.1c4.7-2.9,9.5-5.8,14.2-8.9\n c1.5-1,2.7-1.1,4.3-0.2c26.9,15.9,53.8,31.8,80.7,47.7c7.1,4.2,14.1,8.5,21.4,12.4c3.5,1.9,4.8,4.3,3.9,8c-1.7,1.1-3.3,2.2-5,3.2\n c-20.5,11.9-41.1,23.8-61.6,35.7c-13,7.6-26.1,15.2-39.1,22.8c-7-4-14-8.1-21-12.1c-21.7-12.7-43.2-25.5-65-38\n C230.7,330.5,223.8,325.8,216.2,322.3z\"\n />\n <path\n fill=\"#52CEF4\"\n d=\"M216.2,322.3c7.6,3.5,14.5,8.2,21.8,12.4c21.7,12.5,43.3,25.3,65,38c7,4.1,14,8.1,21,12.1\n c0,39.3,0.1,78.6,0.1,117.9c-1.5,0.9-2.5-0.4-3.6-1c-21.3-12.8-42.5-25.5-63.7-38.3c-13.3-8-26.5-16.1-39.8-24\n c-1.8-1.1-2.5-2.3-2.5-4.4c0.4-26.9,0.4-53.8,1.1-80.7C215.8,343.6,215.4,332.9,216.2,322.3z\"\n />\n <path\n fill=\"#409DD5\"\n d=\"M324,502.6c0-39.3-0.1-78.6-0.1-117.9c13-7.6,26.1-15.2,39.1-22.8c20.5-11.9,41.1-23.8,61.6-35.7\n c1.7-1,3.3-2.1,5-3.2c0.1,7.6,0.1,15.2,0.1,22.8c0,30.5,0,61,0,91.5c0,2.6-0.4,4.4-2.9,5.8c-31.6,18.2-63,36.5-94.5,54.8\n C329.6,499.6,327.2,501.8,324,502.6z\"\n />\n </g>\n </svg>\n );\n}\n","import { DownOutlined, UpOutlined } from '@ant-design/icons';\nimport { Button } from 'antd';\nimport React from 'react';\n\nexport default function PageScroller() {\n return (\n <div>\n <Button\n title=\"Scroll to top\"\n type=\"text\"\n size=\"small\"\n onClick={() => window.scrollTo({ top: 0, behavior: 'smooth' })}\n icon={<UpOutlined />}\n />\n <Button\n title=\"Scroll to bottom\"\n type=\"text\"\n size=\"small\"\n onClick={() => window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' })}\n icon={<DownOutlined />}\n />\n </div>\n );\n}\n","import { CameraOutlined } from '@ant-design/icons';\nimport { Button } from 'antd';\nimport html2canvas from 'html2canvas';\nimport React from 'react';\n\nexport interface ScreenShotterProps {\n triggerNode?: React.ReactNode;\n}\nexport default function ScreenShotter(props: ScreenShotterProps) {\n async function handleScreenshot() {\n // hide footer before taking screenshot\n const footer = document.getElementById('decaf-footer');\n footer?.style.setProperty('display', 'none');\n\n const canvas = await html2canvas(document.body);\n const dataUrl = canvas.toDataURL('image/png');\n\n // show footer after taking screenshot\n footer?.style.setProperty('display', 'block');\n\n const link = document.createElement('a');\n link.download = 'screenshot.png';\n link.href = dataUrl;\n link.click();\n link.remove();\n }\n\n if (props.triggerNode) {\n return React.cloneElement(props.triggerNode as React.ReactElement, {\n onClick: handleScreenshot,\n });\n } else {\n return (\n <Button\n title=\"Take a screenshot of the current page\"\n type=\"text\"\n size=\"small\"\n icon={<CameraOutlined />}\n onClick={handleScreenshot}\n />\n );\n }\n}\n","import { BulbFilled } from '@ant-design/icons';\nimport { Button } from 'antd';\nimport React from 'react';\n\ninterface ThemeSwitcherProps {\n theme: 'dark' | 'light';\n onChange: () => void;\n}\nexport default function ThemeSwitcher(props: ThemeSwitcherProps) {\n return (\n <Button\n title={props.theme === 'dark' ? 'switch to light theme' : 'switch to dark theme'}\n type=\"text\"\n size=\"small\"\n icon={\n <BulbFilled\n style={{\n color: props.theme === 'dark' ? 'white' : 'black',\n }}\n />\n }\n onClick={() => props.onChange()}\n />\n );\n}\n","import { CaretUpOutlined } from '@ant-design/icons';\nimport { Button, Dropdown } from 'antd';\nimport React from 'react';\n\ntype VersionCode = 'production' | 'staging' | 'testing' | 'development' | 'preview' | 'release';\nexport type Version = {\n code: VersionCode;\n name: string;\n color: string;\n url: string;\n show: boolean;\n};\n\nfunction getAppNameFromUrl(url: string) {\n const parts = url.split('/');\n const indexOfWebapps = parts.indexOf('webapps');\n if (indexOfWebapps === -1) {\n return '';\n } else {\n return parts[indexOfWebapps + 1];\n }\n}\n\nfunction getAppVersionFromUrl(url: string) {\n const parts = url.split('/');\n const indexOfWebapps = parts.indexOf('webapps');\n if (indexOfWebapps === -1) {\n return '';\n } else {\n return parts[indexOfWebapps + 2];\n }\n}\n\nfunction isPreviewVersion(version: string) {\n return version.startsWith('preview-') && version.length > 8;\n}\n\nfunction isReleaseVersion(version: string) {\n return version.startsWith('v') && version.length > 1;\n}\n\nfunction getAppVersionCode(version: string) {\n if (isPreviewVersion(version)) {\n return 'preview';\n } else if (isReleaseVersion(version)) {\n return 'release';\n } else {\n return version;\n }\n}\n\nfunction getCurrentAppPath(url: string) {\n const parts = url.split('/');\n const indexOfWebapps = parts.indexOf('webapps');\n if (indexOfWebapps === -1) {\n return '';\n } else {\n return parts.slice(indexOfWebapps + 3).join('/');\n }\n}\n\nexport default function VersionSelector() {\n const appName = getAppNameFromUrl(window.location.href);\n const appVersion = getAppVersionFromUrl(window.location.href); // development, staging, preview-123, v1.0.0\n const appVersionCode = getAppVersionCode(appVersion); // development, staging, preview, release\n\n const versions: Version[] = [\n {\n code: 'development',\n name: 'Development Version',\n color: 'red',\n url: `/webapps/${appName}/development/${getCurrentAppPath(window.location.href)}`,\n show: process.env.NODE_ENV === 'development',\n },\n {\n code: 'testing',\n name: 'Testing Version',\n color: 'orange',\n url: `/webapps/${appName}/testing/${getCurrentAppPath(window.location.href)}`,\n show: true,\n },\n {\n code: 'staging',\n name: 'Staging Version',\n color: 'yellow',\n url: `/webapps/${appName}/staging/${getCurrentAppPath(window.location.href)}`,\n show: true,\n },\n {\n code: 'production',\n name: 'Production Version',\n color: 'green',\n url: `/webapps/${appName}/production/${getCurrentAppPath(window.location.href)}`,\n show: true,\n },\n {\n code: 'preview',\n name: 'Preview Version',\n color: 'grey',\n url: `/`,\n show: false,\n },\n {\n code: 'release',\n name: 'Release Version',\n color: 'grey',\n url: `/`,\n show: false,\n },\n ];\n\n const currentVersion = versions.find((v) => v.code === appVersionCode);\n\n if (!currentVersion) {\n return null;\n }\n\n return (\n <Dropdown\n placement=\"top\"\n arrow\n menu={{\n items: versions\n .filter((v) => v.show)\n .map((version) => ({\n key: version.name,\n label: (\n <span>\n <i className={`dot ${version.color}`} /> {version.name}\n </span>\n ),\n onClick: () => {\n window.location.href = version.url;\n },\n })),\n }}\n >\n <Button type=\"text\" size=\"small\">\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <i className={`dot ${currentVersion?.color}`} style={{ marginRight: 5 }} />\n {currentVersion.code !== 'production' && (\n <span style={{ marginRight: 5 }}>\n You are on <b>{currentVersion.name}</b>\n </span>\n )}\n <CaretUpOutlined />\n </div>\n </Button>\n </Dropdown>\n );\n}\n","import { QuestionCircleOutlined } from '@ant-design/icons';\nimport { useDecaf } from '@decafhub/decaf-react';\nimport { Button } from 'antd';\nimport React, { useEffect, useState } from 'react';\n\nconst ZENDESK_WIDGET_SCRIPT = 'https://static.zdassets.com/ekr/snippet.js';\n\ndeclare global {\n // eslint-disable-next-line no-unused-vars\n interface Window {\n zE: any;\n zESettings: any;\n }\n}\n\nexport default function ZendeskWidget() {\n const { me, publicConfig } = useDecaf();\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n if (!publicConfig.zendesk || typeof document === 'undefined') return;\n const script = document.createElement('script');\n script.src = ZENDESK_WIDGET_SCRIPT + '?key=' + publicConfig.zendesk;\n script.async = true;\n script.id = 'ze-snippet'; // do not change this. zendesk expects this to be ze-snippet\n script.onload = () => {\n window.zE('webWidget', 'hide');\n window.zE('webWidget:on', 'open', () => {\n window.zE('webWidget', 'show');\n setOpen(true);\n });\n window.zE('webWidget:on', 'close', () => {\n window.zE('webWidget', 'hide');\n setOpen(false);\n });\n };\n\n document.body.appendChild(script);\n window.zESettings = {\n webWidget: {\n offset: {\n horizontal: -7,\n vertical: 20,\n },\n },\n contactForm: {\n subject: true,\n fields: [\n {\n id: 'name',\n prefill: { '*': me.fullname },\n },\n {\n id: 'email',\n prefill: { '*': me.email },\n },\n ],\n },\n };\n\n return () => {\n document.body.removeChild(script);\n };\n }, [publicConfig, me]);\n\n function toggle() {\n if (open) {\n window.zE?.('webWidget', 'close');\n } else {\n window.zE?.('webWidget', 'open');\n }\n setOpen(!open);\n }\n\n if (!publicConfig.zendesk) return null;\n\n return (\n <Button size=\"small\" icon={<QuestionCircleOutlined />} onClick={toggle}>\n Support\n </Button>\n );\n}\n","import { UserOutlined } from '@ant-design/icons';\nimport { useDecaf } from '@decafhub/decaf-react';\nimport { Button, Col, Layout, Menu, Row, Typography } from 'antd';\nimport { ItemType, SubMenuType } from 'antd/es/menu/hooks/useItems';\nimport React from 'react';\nimport { Link, NavLink, Outlet, useLocation, useMatches } from 'react-router-dom';\nimport { useDecafTheme } from '../theme';\nimport Logo from './Logo';\nimport PageScroller from './PageScroller';\nimport ScreenShotter from './Screenshotter';\nimport ThemeSwitcher from './ThemeSwitcher';\nimport VersionSelector from './VersionSelector';\nimport ZendeskWidget from './ZendeskWidget';\n\ninterface BaseDecafMenuItem {\n label: any;\n icon?: React.ReactNode;\n children?: DecafMenuItem[];\n}\n\nexport type DecafMenuItem = BaseDecafMenuItem & ({ to?: string } | { href?: string });\n\nexport interface DecafLayoutProps {\n menu: DecafMenuItem[];\n appName: string;\n}\n\nfunction buildAntMenuFromDecafMenu(routes: DecafMenuItem[]): ItemType[] {\n const result: ItemType[] = [];\n routes.forEach((route) => {\n const item: ItemType = {\n key: 'to' in route ? route.to : route.label,\n label: route.label,\n icon: route.icon,\n };\n if ('to' in route && route.to) {\n item.label = (\n <NavLink to={route.to} end={route.to === '/'}>\n {route.label}\n </NavLink>\n );\n } else if ('href' in route && route.href) {\n item.label = <a href={route.href}>{route.label}</a>;\n } else if (route.children) {\n item.label = route.label;\n (item as SubMenuType).children = buildAntMenuFromDecafMenu(route.children || []);\n }\n result.push(item);\n });\n\n return result;\n}\n\nexport default function DecafLayout(props: DecafLayoutProps) {\n const menuItems = buildAntMenuFromDecafMenu(props.menu);\n const matches = useMatches();\n const location = useLocation();\n const matchedMenuItems = matches\n .map((match) => match.pathname)\n .filter((pathname) => (location.pathname !== '/' ? pathname !== '/' : true)); // WORKAROUND: the root path always matches. We don't want that.\n const { me } = useDecaf();\n const { theme, toggleTheme: setTheme } = useDecafTheme();\n\n return (\n <Layout style={{ height: '100%' }}>\n <Layout.Header id=\"decaf-header\">\n <div style={{ paddingInline: 20, display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <Link to=\"/\" style={{ display: 'flex', alignItems: 'center', gap: 10 }}>\n <Logo />\n <Typography.Title level={4} style={{ margin: 0 }}>\n {props.appName}\n </Typography.Title>\n </Link>\n <Menu\n style={{ justifyContent: 'flex-end', backgroundColor: 'transparent', border: 'none', flex: 1 }}\n mode=\"horizontal\"\n items={menuItems}\n selectedKeys={matchedMenuItems}\n />\n </div>\n </Layout.Header>\n <Layout.Content id=\"decaf-content\">\n <Outlet />\n </Layout.Content>\n <Layout.Footer id=\"decaf-footer\">\n <Row justify=\"space-between\" align={'middle'}>\n <Col span={10}>\n <ZendeskWidget />\n </Col>\n <Col span={4} style={{ textAlign: 'center' }}>\n <Typography.Text type=\"secondary\">\n Powered by{' '}\n <b>\n <a href=\"https://teloscube.com\" target=\"_blank\" rel=\"noreferrer\">\n Teloscube\n </a>\n </b>\n </Typography.Text>\n </Col>\n <Col span={10} style={{ justifyContent: 'flex-end', display: 'flex', gap: 10 }}>\n <Button size=\"small\" icon={<UserOutlined />}>\n {me.username}\n </Button>\n <VersionSelector />\n <ThemeSwitcher theme={theme} onChange={setTheme} />\n <ScreenShotter />\n <PageScroller />\n </Col>\n </Row>\n </Layout.Footer>\n </Layout>\n );\n}\n","import { useDecaf } from '@decafhub/decaf-react';\nimport { Descriptions, Space } from 'antd';\nimport React, { useEffect, useState } from 'react';\n\nexport interface AboutPageProps {\n appName?: string;\n appVersion?: string;\n appDescription?: string;\n content?: React.ReactNode;\n}\nexport default function PageAbout(props: AboutPageProps) {\n const { client } = useDecaf();\n const [versionBarista, setVersionBarista] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n client.barista.get<{ version: string }>('/version/').then(({ data }) => setVersionBarista(data.version));\n }, [client]);\n\n return (\n <Space direction=\"vertical\" size=\"middle\" style={{ width: '100%' }}>\n <Descriptions title=\"About\" column={1} bordered style={{ maxWidth: 700, width: '100%' }}>\n <Descriptions.Item label=\"Application Name\">{props.appName}</Descriptions.Item>\n <Descriptions.Item label=\"Application Description\">{props.appDescription}</Descriptions.Item>\n <Descriptions.Item label=\"Application Version\">{`v${props.appVersion}`}</Descriptions.Item>\n <Descriptions.Item label=\"DECAF Barista Version\">{`v${versionBarista}`}</Descriptions.Item>\n </Descriptions>\n {props.content}\n </Space>\n );\n}\n","import { InfoCircleOutlined } from '@ant-design/icons';\nimport { DecafApp, DecafAppConfig, DecafAppController, DecafWebappController } from '@decafhub/decaf-react';\nimport { css, Global } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport 'antd/dist/reset.css';\nimport { ThemeConfig } from 'antd/es/config-provider/context';\nimport React, { useEffect } from 'react';\nimport { createBrowserRouter, RouteObject, RouterProvider } from 'react-router-dom';\nimport { Page401, Page403, Page404, PageError } from './components/Error';\nimport DecafLayout, { DecafMenuItem } from './components/Layout';\nimport PageAbout from './components/PageAbout';\nimport { decafThemeDark, decafThemeLight, ThemeProvider } from './theme';\nimport { useTableMaxHeight } from './utils';\n\nexport type DecafRoute = RouteObject;\n\nexport interface DecafWebappProps {\n config?: DecafAppConfig;\n controller?: DecafAppController;\n /**\n * The theme of the app.\n *\n * Defaults to `dark`.\n */\n theme?: 'dark' | 'light';\n /**\n * The theme config of the app.\n *\n * This will be merged with the default theme config (dark or light).\n *\n * See https://ant.design/docs/react/customize-theme\n */\n themeConfig?: ThemeConfig;\n /**\n * App routes.\n *\n * About page and 404 page will be added automatically.\n *\n * See https://reactrouter.com/en/main/routers/create-browser-router#routes\n */\n routes: DecafRoute[];\n /**\n * App menu.<br />\n * About page will be added automatically.\n */\n menuItems: DecafMenuItem[];\n appName: string;\n appDescription?: string;\n /**\n * The extra content to show on the about page.\n */\n aboutPageContent?: React.ReactNode;\n}\n\nfunction addTo<T>(array: T[], items: T[], key: keyof T): T[] {\n const result: T[] = [...array];\n items.forEach((item) => {\n const index = result.findIndex((r) => r[key] === item[key]);\n if (index >= 0) {\n result[index] = item;\n } else {\n result.push(item);\n }\n });\n return result;\n}\n\nfunction DecafWebapp(props: DecafWebappProps) {\n useEffect(() => {\n // add plausible analytics\n const script = document.createElement('script');\n script.defer = true;\n script.setAttribute('data-domain', location.hostname);\n script.src = 'https://webax.svc.sys.decafhub.com/js/plausible.js';\n document.body.appendChild(script);\n\n return () => {\n document.body.removeChild(script);\n };\n }, []);\n\n let routes = addTo<RouteObject>(\n props.routes,\n [\n {\n path: '/about',\n element: (\n <PageAbout\n appName={props.appName}\n appVersion={props.config?.currentVersion}\n appDescription={props.appDescription}\n content={props.aboutPageContent}\n />\n ),\n },\n { path: '*', element: <Page404 /> },\n ],\n 'path'\n );\n\n const menuWithAboutPage = addTo(\n props.menuItems,\n [\n {\n label: 'About',\n to: '/about',\n icon: <InfoCircleOutlined />,\n },\n ],\n 'to' as any\n );\n\n routes = [\n {\n element: <DecafLayout menu={menuWithAboutPage} appName={props.appName} />,\n path: '/',\n children: routes,\n errorElement: <PageError />,\n },\n ];\n\n const router = createBrowserRouter(routes, {\n basename: props.config?.basePath,\n });\n\n const controller = props.controller || DecafWebappController;\n controller.disableZendeskWidget = true;\n\n return (\n <ThemeProvider themeConfig={props.themeConfig} theme={props.theme}>\n <DecafApp config={props.config} controller={controller}>\n <RouterProvider router={router} />\n </DecafApp>\n </ThemeProvider>\n );\n}\n\nexport {\n DecafWebapp,\n Global as GlobalStyle,\n css,\n styled,\n decafThemeDark,\n decafThemeLight,\n useTableMaxHeight,\n Page401,\n Page403,\n Page404,\n PageError,\n};\n"],"names":["_templateObject","ErrorPageSubtitle","_ref","React","createElement","Fragment","Typography","message","Link","to","Button","style","marginTop","Page404","Result","status","title","subTitle","PageError","lightenDarkenColor","col","amt","usePound","slice","num","parseInt","r","b","g","String","toString","getBaseStyles","theme","_theme$token","_theme$components","_theme$components$Lay","body","background","token","colorBgBase","fontFamily","margin","button","boxShadow","overflow","position","zIndex","right","left","paddingInline","paddingTop","paddingBottom","bottom","components","Layout","colorBgHeader","paddingBlock","height","borderRadius","width","display","backgroundColor","MAIN_BLACK","INPUT_BG_COLOR","BORDER_COLORS_TRANSPARENT","colorBorder","colorBorderSecondary","colorBorderBg","decafThemeLight","hashed","algorithm","defaultAlgorithm","colorBgContainer","colorBgLayout","decafThemeDark","boxShadowSecondary","Input","Select","_extends","Checkbox","Dropdown","DatePicker","colorBgElevated","InputNumber","Menu","colorItemText","colorPrimary","green","red","blue","yellow","orange","colorWhite","colorLink","colorLinkHover","colorLinkActive","darkAlgorithm","ThemeContext","createContext","toggleTheme","ThemeProvider","props","_React$useState","useState","localStorage","getItem","value","setValue","themeConfig","globalStyles","getLightStyles","_theme$token2","_theme$token3","_theme$token4","_theme$token5","_theme$token6","_theme$token7","_theme$token8","_theme$token9","_theme$token10","_theme$token11","_theme$components2","_theme$components2$Bu","_theme$token12","_theme$token13","_theme$token14","_theme$token15","color","getDarkStyles","Provider","t","setItem","ConfigProvider","Global","styles","css","children","useDecafTheme","useContext","Logo","version","id","xmlns","xmlnsXlink","x","y","viewBox","enableBackground","xmlSpace","fill","d","PageScroller","type","size","onClick","window","scrollTo","top","behavior","icon","UpOutlined","document","scrollHeight","DownOutlined","ScreenShotter","handleScreenshot","getElementById","footer","setProperty","Promise","resolve","html2canvas","canvas","dataUrl","toDataURL","link","download","href","click","remove","e","reject","triggerNode","cloneElement","CameraOutlined","ThemeSwitcher","BulbFilled","onChange","url","parts","split","indexOfWebapps","indexOf","join","VersionSelector","appName","location","appVersion","getAppVersionFromUrl","startsWith","length","isPreviewVersion","isReleaseVersion","versions","code","name","getCurrentAppPath","show","process","env","NODE_ENV","currentVersion","find","v","appVersionCode","placement","arrow","menu","items","filter","map","key","label","className","alignItems","marginRight","CaretUpOutlined","ZENDESK_WIDGET_SCRIPT","ZendeskWidget","useDecaf","me","_useDecaf","publicConfig","open","_useState","setOpen","useEffect","zendesk","script","src","async","onload","zE","appendChild","zESettings","webWidget","offset","horizontal","vertical","contactForm","subject","fields","prefill","fullname","email","removeChild","QuestionCircleOutlined","buildAntMenuFromDecafMenu","routes","result","forEach","route","item","NavLink","end","push","matches","useMatches","useLocation","matchedMenuItems","match","pathname","setTheme","Header","justifyContent","gap","Title","level","border","flex","mode","menuItems","selectedKeys","Content","Outlet","Footer","Row","justify","align","Col","span","textAlign","Text","target","rel","UserOutlined","username","PageAbout","client","undefined","versionBarista","setVersionBarista","barista","get","then","data","Space","direction","Descriptions","column","bordered","maxWidth","Item","appDescription","content","addTo","array","index","findIndex","defer","setAttribute","hostname","path","element","_props$config","config","aboutPageContent","menuWithAboutPage","InfoCircleOutlined","DecafLayout","errorElement","router","createBrowserRouter","basename","_props$config2","basePath","controller","DecafWebappController","disableZendeskWidget","DecafApp","RouterProvider","Page401","LockFilled","useTableMaxHeight","elementId","bottomSpace","maxHeight","setMaxHeight","w","useLayoutEffect","calculate","parentPaddingBottom","closestContainer","parentElement","parseFloat","getComputedStyle","isNaN","getBoundingClientRect","max","innerHeight","boundingRect","bottomMargin","addEventListener","removeEventListener"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../src/style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAgE9D,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAMvE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CA8CtE"}
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../src/style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAgE9D,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAMvE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAiEtE"}
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,eAAO,MAAM,eAAe,EAAE,WAM7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,WAyD5B,CAAC;AAEF,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AACD,eAAO,MAAM,YAAY,kCAGvB,CAAC;AAEH,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AACD,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,eAwCtD;AAED,eAAO,MAAM,aAAa,yBAAuC,CAAC"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,eAAO,MAAM,eAAe,EAAE,WAc7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,WA6D5B,CAAC;AAEF,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AACD,eAAO,MAAM,YAAY,kCAGvB,CAAC;AAEH,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AACD,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,eAwCtD;AAED,eAAO,MAAM,aAAa,yBAAuC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decafhub/decaf-react-webapp",
3
- "version": "0.0.13",
3
+ "version": "0.0.15",
4
4
  "keywords": [
5
5
  "decafhub",
6
6
  "react"
@@ -42,28 +42,28 @@
42
42
  "react-router-dom": "^6"
43
43
  },
44
44
  "dependencies": {
45
- "@emotion/react": "^11.10.5",
46
- "@emotion/styled": "^11.10.5",
45
+ "@emotion/react": "^11.10.6",
46
+ "@emotion/styled": "^11.10.6",
47
47
  "html2canvas": "^1.4.1"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@ant-design/icons": "^5.0.1",
51
- "@commitlint/cli": "^17.4.2",
52
- "@commitlint/config-conventional": "^17.4.2",
51
+ "@commitlint/cli": "^17.4.4",
52
+ "@commitlint/config-conventional": "^17.4.4",
53
53
  "@decafhub/decaf-client": "^0.3.1",
54
54
  "@decafhub/decaf-react": "^0.1.9",
55
55
  "@testing-library/jest-dom": "^5.16.5",
56
- "@testing-library/react": "^13.4.0",
56
+ "@testing-library/react": "^14.0.0",
57
57
  "@types/jest": "^29.4.0",
58
- "@types/js-cookie": "^3.0.2",
59
- "@types/node": "^18.13.0",
58
+ "@types/js-cookie": "^3.0.3",
59
+ "@types/node": "^18.14.3",
60
60
  "@types/react": "^18.0.28",
61
- "@types/react-dom": "^18.0.10",
62
- "@typescript-eslint/eslint-plugin": "^5.51.0",
63
- "@typescript-eslint/parser": "^5.51.0",
64
- "antd": "^5.2.0",
61
+ "@types/react-dom": "^18.0.11",
62
+ "@typescript-eslint/eslint-plugin": "^5.54.0",
63
+ "@typescript-eslint/parser": "^5.54.0",
64
+ "antd": "^5.2.3",
65
65
  "cross-env": "^7.0.3",
66
- "eslint": "^8.34.0",
66
+ "eslint": "^8.35.0",
67
67
  "eslint-config-prettier": "^8.6.0",
68
68
  "eslint-config-standard": "^17.0.0",
69
69
  "eslint-plugin-import": "^2.27.5",
@@ -75,17 +75,17 @@
75
75
  "eslint-plugin-standard": "^5.0.0",
76
76
  "husky": "^8.0.3",
77
77
  "identity-obj-proxy": "^3.0.0",
78
- "jest": "^29.4.2",
79
- "jest-environment-jsdom": "^29.4.2",
80
- "lint-staged": "^13.1.1",
78
+ "jest": "^29.4.3",
79
+ "jest-environment-jsdom": "^29.4.3",
80
+ "lint-staged": "^13.1.2",
81
81
  "microbundle": "^0.15.1",
82
82
  "postcss": "^8.4.21",
83
83
  "prettier": "^2.8.4",
84
84
  "react": "^18.2.0",
85
85
  "react-dom": "^18.2.0",
86
- "react-router-dom": "^6.8.1",
86
+ "react-router-dom": "^6.8.2",
87
87
  "ts-jest": "^29.0.5",
88
- "typedoc": "^0.23.25",
88
+ "typedoc": "^0.23.26",
89
89
  "typescript": "^4.9.5"
90
90
  },
91
91
  "lint-staged": {