{"version":3,"file":"sign-up.9ba9c11d1f90ab4af0c4.bundle.js","mappings":"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","sources":["webpack://spotlight.web/./ModernScripts/Spotlight/Hooks/useClickOutside.tsx","webpack://spotlight.web/./ModernScripts/Spotlight/Hooks/usePrevious.tsx","webpack://spotlight.web/./ModernScripts/Spotlight/ManageAccount/session-timeout-modal.tsx","webpack://spotlight.web/./Scripts/Spotlight/Helpers/app-routes.ts","webpack://spotlight.web/./Scripts/Spotlight/Helpers/feature-flags.ts","webpack://spotlight.web/./Scripts/Spotlight/Helpers/log.ts","webpack://spotlight.web/./Scripts/Spotlight/Helpers/import-helper.ts","webpack://spotlight.web/./Scripts/Spotlight/Helpers/json.ts","webpack://spotlight.web/./Scripts/Spotlight/Helpers/date-helpers.ts","webpack://spotlight.web/./Scripts/Spotlight/Helpers/product-type.ts","webpack://spotlight.web/./Scripts/Spotlight/Helpers/show-toast-alert.tsx","webpack://spotlight.web/./Scripts/Spotlight/Models/Constants.ts","webpack://spotlight.web/./Scripts/Spotlight/Services/Endpoints.ts","webpack://spotlight.web/./Scripts/Spotlight/Utilities/sort.ts","webpack://spotlight.web/./Scripts/Spotlight/render.tsx","webpack://spotlight.web/./Scripts/Spotlight/sign-up-errors.ts","webpack://spotlight.web/./Scripts/Spotlight/sign-up-validator.ts","webpack://spotlight.web/./Scripts/Spotlight/sign-up.ts","webpack://spotlight.web/./ui/components/alert/alert.tsx","webpack://spotlight.web/./ui/packages/constants/constants.ts","webpack://spotlight.web/./ui/packages/constants/themes.ts","webpack://spotlight.web/./ui/components/loading-spinner/loading-spinner.tsx","webpack://spotlight.web/./ui/components/loading-spinner/images/spinner-black.ts","webpack://spotlight.web/./ui/components/loading-spinner/images/spinner-white.ts","webpack://spotlight.web/./ui/components/button/button.tsx","webpack://spotlight.web/./ui/components/collapsible-band/collapsible-band.tsx","webpack://spotlight.web/./ui/components/collapsible-band/index.ts","webpack://spotlight.web/./ui/components/grid-row/grid-row.tsx","webpack://spotlight.web/./ui/components/grid-col/grid-col.tsx","webpack://spotlight.web/./ui/components/loading-screen/loading-screen.tsx","webpack://spotlight.web/./ui/components/modal/modal.tsx","webpack://spotlight.web/./ui/components/search-filter/search-filter.tsx","webpack://spotlight.web/./ui/components/chart-selector/atoms/chart-group/chart-group.tsx","webpack://spotlight.web/./ui/components/chart-selector/atoms/chart-icon/chart-icon.tsx","webpack://spotlight.web/./ui/components/chart-selector/atoms/chart-info/chart-info.tsx","webpack://spotlight.web/./ui/components/chart-selector/chart-selector.tsx","webpack://spotlight.web/./ui/components/tabs/tabs.tsx","webpack://spotlight.web/./ui/components/tabs/index.ts","webpack://spotlight.web/./ui/components/color-picker/atoms/color-picker-palette/color-picker-palette.tsx","webpack://spotlight.web/./ui/components/color-picker/atoms/custom-color-picker/custom-color-picker-fields.tsx","webpack://spotlight.web/./ui/components/color-picker/helper.ts","webpack://spotlight.web/./ui/components/color-picker/atoms/custom-color-picker/custom-color-picker-pointer.tsx","webpack://spotlight.web/./ui/components/color-picker/atoms/custom-color-picker/custom-color-picker.tsx","webpack://spotlight.web/./ui/components/color-picker/color-picker.tsx","webpack://spotlight.web/./ui/components/color-picker-popover/color-picker-popover.tsx","webpack://spotlight.web/./ui/components/gallery-browser/atoms/item-group/item-group.tsx","webpack://spotlight.web/./ui/components/gallery-icon/gallery-icon.tsx","webpack://spotlight.web/./ui/components/gallery-browser/gallery-browser.tsx","webpack://spotlight.web/./ui/components/gallery-item-info/gallery-item-info.tsx","webpack://spotlight.web/./ui/components/modal-confirm/modal-confirm.tsx","webpack://spotlight.web/./ui/components/breadcrumbs/breadcrumbs.tsx","webpack://spotlight.web/./ui/components/step-process/step-process.tsx","webpack://spotlight.web/./ui/components/text/text.tsx","webpack://spotlight.web/./ui/components/helper-modal/helper-modal.tsx","webpack://spotlight.web/./ui/components/text-input/text-input.tsx","webpack://spotlight.web/./ui/components/text-field-inline/text-field-inline.tsx","webpack://spotlight.web/./ui/components/radio-input/radio-input.tsx","webpack://spotlight.web/./ui/components/checkbox-input/checkbox-input.tsx","webpack://spotlight.web/./ui/components/tracking-settings/tracking-settings-enums.ts","webpack://spotlight.web/./ui/components/tree-collapse/tree-collapse.tsx","webpack://spotlight.web/./ui/components/select-field/select-field.tsx","webpack://spotlight.web/./ui/components/tracking-settings/atoms/TreeCollapseWrapper/tree-collapse-wrapper.tsx","webpack://spotlight.web/./ui/components/tracking-settings/atoms/DataWrapper/data-wrapper.tsx","webpack://spotlight.web/./ui/components/tracking-settings/tracking-settings.tsx","webpack://spotlight.web/./ui/components/tab-button-group/tab-button-group.tsx","webpack://spotlight.web/./ui/components/tab-button-group/atoms/tab-button/tab-button.tsx","webpack://spotlight.web/./ui/components/password-input/password-input.tsx","webpack://spotlight.web/./ui/components/password-field/password-field.tsx","webpack://spotlight.web/./ui/components/number-input/number-input.tsx","webpack://spotlight.web/./ui/components/number-field/number-field.tsx","webpack://spotlight.web/./ui/components/number-field-inline/number-field-inline.tsx","webpack://spotlight.web/./ui/packages/icons/sort-number-asc/sort-number-asc.tsx","webpack://spotlight.web/./ui/packages/icons/sort-number-asc/index.ts","webpack://spotlight.web/./ui/packages/icons/sort-number-desc/sort-number-desc.tsx","webpack://spotlight.web/./ui/packages/icons/sort-number-desc/index.ts","webpack://spotlight.web/./ui/components/sort-number-asc-desc-field/sort-number-asc-desc-field.tsx","webpack://spotlight.web/./ui/components/preview/atoms/thumbnail/thumbnail.tsx","webpack://spotlight.web/./ui/components/preview/atoms/thumbnail/index.ts","webpack://spotlight.web/./ui/components/preview/preview-page.tsx","webpack://spotlight.web/./ui/components/preview/preview-content.tsx","webpack://spotlight.web/./ui/components/preview/preview-navigation-buttons.tsx","webpack://spotlight.web/./ui/components/preview/preview-pagination.tsx","webpack://spotlight.web/./ui/components/preview/preview.tsx","webpack://spotlight.web/./ui/components/preview/index.ts","webpack://spotlight.web/./ui/packages/icons/circle-with-plus/circle-with-plus.tsx","webpack://spotlight.web/./ui/packages/icons/circle-with-plus/index.ts","webpack://spotlight.web/./ui/packages/icons/circle-with-minus/circle-with-minus.tsx","webpack://spotlight.web/./ui/packages/icons/circle-with-minus/index.ts","webpack://spotlight.web/./ui/packages/icons/elimination/elimination.tsx","webpack://spotlight.web/./ui/packages/icons/elimination/index.ts","webpack://spotlight.web/./ui/components/data-grid/atoms/icons/icons.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/account-row/account-row.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/account-cell/account-cell.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/account-cell-input/account-cell-input.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/accounts-list/accounts-list.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/accounts-panel/accounts-panel.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/data-grid-scroller/data-grid-scroller.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/add-fy-totals/add-fy-total.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/table/table.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/fy-total-column/fy-total-column.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/header-cell/header-cell.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/header/header.tsx","webpack://spotlight.web/./ui/components/data-grid/data-grid.tsx","webpack://spotlight.web/./ui/components/data-table/data-table.tsx","webpack://spotlight.web/./ui/packages/icons/triangle-down/triangle-down.tsx","webpack://spotlight.web/./ui/packages/icons/triangle-down/index.ts","webpack://spotlight.web/./ui/components/multi-select-input/multi-select-input.tsx","webpack://spotlight.web/./ui/components/multi-select/multi-select.tsx","webpack://spotlight.web/./ui/components/month-date-picker/month-date-picker.tsx","webpack://spotlight.web/./ui/components/month-date-picker-field/month-date-picker-field.tsx","webpack://spotlight.web/./ui/components/AutoCompleteTextInput/AutoCompleteTextInput.tsx","webpack://spotlight.web/./ui/components/AutoCompleteTextField/AutoCompleteTextField.tsx","webpack://spotlight.web/./ui/components/release-notes/atoms/icons/icons.tsx","webpack://spotlight.web/./ui/components/release-notes/atoms/article/article.tsx","webpack://spotlight.web/./ui/components/release-notes/atoms/images/images.tsx","webpack://spotlight.web/./ui/components/release-notes/release-notes.tsx","webpack://spotlight.web/./ui/components/menu-list/menu-list.tsx","webpack://spotlight.web/./ui/components/dropdown-menu/dropdown-menu.tsx","webpack://spotlight.web/./ui/components/select-menu/atoms/select-menu-button.tsx","webpack://spotlight.web/./ui/components/select-menu/select-menu.tsx","webpack://spotlight.web/./ui/components/select-menu-field/select-menu-field.tsx","webpack://spotlight.web/./ui/components/inline-text-input/inline-text-input.tsx","webpack://spotlight.web/./ui/packages/icons/chevron-left/chevron-left.tsx","webpack://spotlight.web/./ui/packages/icons/chevron-left/index.ts","webpack://spotlight.web/./ui/packages/icons/chevron-right/chevron-right.tsx","webpack://spotlight.web/./ui/packages/icons/chevron-right/index.ts","webpack://spotlight.web/./ui/packages/icons/edit/edit.tsx","webpack://spotlight.web/./ui/packages/icons/edit/index.ts","webpack://spotlight.web/./ui/packages/icons/additional-page/additional-page.tsx","webpack://spotlight.web/./ui/packages/icons/additional-page/index.ts","webpack://spotlight.web/./ui/packages/icons/arrow-right/arrow-right.tsx","webpack://spotlight.web/./ui/packages/icons/circle-with-x/circle-with-x.tsx","webpack://spotlight.web/./ui/packages/icons/circle-with-x/index.ts","webpack://spotlight.web/./ui/packages/icons/circled-tick/circled-tick.tsx","webpack://spotlight.web/./ui/packages/icons/circled-tick/index.ts","webpack://spotlight.web/./ui/packages/icons/circled-x/circled-x.tsx","webpack://spotlight.web/./ui/packages/icons/circled-x/index.ts","webpack://spotlight.web/./ui/packages/icons/exclamation/exclamation.tsx","webpack://spotlight.web/./ui/packages/icons/exclamation/index.ts","webpack://spotlight.web/./ui/packages/icons/info/info.tsx","webpack://spotlight.web/./ui/packages/icons/info/index.ts","webpack://spotlight.web/./ui/packages/icons/new-release-all-products/new-release-all-products.tsx","webpack://spotlight.web/./ui/packages/icons/new-release-all-products/index.ts","webpack://spotlight.web/./ui/packages/icons/new-release-dashboard/new-release-dashboard.tsx","webpack://spotlight.web/./ui/packages/icons/new-release-dashboard/index.ts","webpack://spotlight.web/./ui/packages/icons/new-release-forecasting/new-release-forecasting.tsx","webpack://spotlight.web/./ui/packages/icons/new-release-forecasting/index.ts","webpack://spotlight.web/./ui/packages/icons/new-release-multi/new-release-multi.tsx","webpack://spotlight.web/./ui/packages/icons/new-release-multi/index.ts","webpack://spotlight.web/./ui/packages/icons/new-release-no-data/new-release-no-data.tsx","webpack://spotlight.web/./ui/packages/icons/new-release-no-data/index.ts","webpack://spotlight.web/./ui/packages/icons/new-release-reporting/new-release-reporting.tsx","webpack://spotlight.web/./ui/packages/icons/new-release-reporting/index.ts","webpack://spotlight.web/./ui/packages/icons/search/search.tsx","webpack://spotlight.web/./ui/packages/icons/search/index.ts","webpack://spotlight.web/./ui/packages/icons/sort-down/sort-down.tsx","webpack://spotlight.web/./ui/packages/icons/sort-down/index.ts","webpack://spotlight.web/./ui/packages/icons/spotlight-logo/spotlight-logo.tsx","webpack://spotlight.web/./ui/packages/icons/spotlight-logo/index.ts","webpack://spotlight.web/./ui/packages/icons/tick/tick.tsx","webpack://spotlight.web/./ui/packages/icons/tick/index.ts","webpack://spotlight.web/./ui/packages/icons/trash/trash.tsx","webpack://spotlight.web/./ui/packages/icons/trash/index.ts","webpack://spotlight.web/./ui/packages/icons/star/star.tsx","webpack://spotlight.web/./ui/packages/icons/star/index.ts","webpack://spotlight.web/./ui/packages/icons/svg-base/svg-base.tsx"],"sourcesContent":["import { MutableRefObject, useEffect } from 'react';\r\n\r\n/**\r\n * Helper to handle reacting to a click outside a given element.\r\n * Accepts a ref to the element to monitor for clicks outside of it\r\n * and a function to execute in response.\r\n */\r\nexport const useClickOutside = (\r\n ref: MutableRefObject,\r\n handler: (event: MouseEvent) => void,\r\n): void => {\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n const target = event.target as Element;\r\n if (ref.current && target && !ref.current.contains(target)) {\r\n handler(event);\r\n }\r\n };\r\n window.setTimeout(() => {\r\n document.removeEventListener('click', handleClickOutside);\r\n document.addEventListener('click', handleClickOutside);\r\n }, 0);\r\n return () => {\r\n document.removeEventListener('click', handleClickOutside);\r\n };\r\n }, [ref, handler]);\r\n};\r\n","import { useEffect, useRef } from 'react';\r\n\r\nexport const usePrevious = (value: T): T | undefined => {\r\n const ref = useRef();\r\n useEffect(() => {\r\n ref.current = value;\r\n });\r\n return ref.current;\r\n};\r\n","import * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { Modal, ModalButtonGroup } from '../Common/Modal/modal';\r\nimport { ModernButton } from '../Common/modern-button';\r\n\r\ninterface SessionTimeoutModalProps {\r\n durationMs?: number;\r\n timerIntervalMs?: number;\r\n onTimerDone?: () => void;\r\n onLogOut: () => void;\r\n onContinue: () => void;\r\n}\r\n\r\nconst StyledP = styled.p`\r\n margin-bottom: 30px;\r\n line-height: normal;\r\n`;\r\n\r\nexport const SessionTimeoutModal: React.FC> = ({\r\n durationMs = 1 * 60 * 1000,\r\n timerIntervalMs = 1000,\r\n onTimerDone,\r\n onLogOut,\r\n onContinue,\r\n}) => {\r\n const [timer, setTimer] = useState(durationMs);\r\n\r\n useEffect(() => {\r\n const timerId = setInterval(() => {\r\n setTimer((prevTimer) => {\r\n if (prevTimer - timerIntervalMs > 1000) {\r\n return prevTimer - timerIntervalMs;\r\n } else {\r\n clearInterval(timerId);\r\n onTimerDone && onTimerDone();\r\n return 1000;\r\n }\r\n });\r\n }, timerIntervalMs);\r\n\r\n return () => {\r\n clearInterval(timerId);\r\n };\r\n }, [timerIntervalMs, onTimerDone]);\r\n\r\n const seconds = Math.floor(timer / 1000);\r\n\r\n return (\r\n \r\n \r\n Log out\r\n \r\n \r\n Continue\r\n \r\n \r\n }\r\n >\r\n You are about to be signed out of Spotlight due to inactivity.\r\n \r\n To continue using Spotlight, click the {`'Continue'`} button below in the next {seconds} second\r\n {seconds > 1 && 's'}.\r\n \r\n \r\n );\r\n};\r\n","import { reduce, pairs } from 'underscore';\r\n\r\nimport { DataSourceTypeCode } from '../../Codes';\r\nimport { ProductTypes } from '../Models/Constants';\r\n\r\ntype AppRoute = (args0?: TRoutePathArgs, args1?: TRouteQueryArgs) => string;\r\n\r\nconst objectToQueryParams = (object: Record) => {\r\n return reduce(\r\n pairs(object),\r\n function (memo, pair) {\r\n return memo + (pair[1] ? '&' + encodeURIComponent(pair[0]) + '=' + encodeURIComponent(pair[1]) : '');\r\n },\r\n '',\r\n );\r\n};\r\n\r\n/** returns a route, optionally can append an object as query params to the path */\r\nconst routeBuilder = (routePath, routeQueryArgs?): string => {\r\n if (!routeQueryArgs) {\r\n return routePath;\r\n } else {\r\n // if it doesn't have a ? already, then add one. Also append the query params.\r\n const routeQuery = routePath.includes('?') ? '' : '?' && `${objectToQueryParams(routeQueryArgs)}`;\r\n return `${routePath}${routeQuery}`;\r\n }\r\n};\r\n\r\n/* App Routes the user can navigate to */\r\nexport class AppRoutes {\r\n static CustomisePage: AppRoute<{ windowCode: string; reportId: string; currentStage: number; pageId: string }> = ({\r\n windowCode,\r\n reportId,\r\n currentStage,\r\n pageId,\r\n }) => `/Report/build/${windowCode}?reportId=${reportId}&step=${currentStage}#step${currentStage}/${pageId}`;\r\n static FormulaGallery: AppRoute<{ windowCode: string; reportMode: string }> = ({ windowCode, reportMode }) =>\r\n `/OrganisationSettings/${windowCode}?reportMode=${reportMode}#formula-gallery`;\r\n\r\n static TransformInAction = '/TransformInAction';\r\n\r\n /* Member */\r\n static MFASettings = '/Member/MFASettings';\r\n static ChangePassword = '/Member/ChangePassword';\r\n static SignOut = '/Member/Signout';\r\n\r\n static LandingPage = (productType: ProductTypes): string => {\r\n const productToLandingPage = {\r\n [ProductTypes.Reporting]: this.ReportingLandingPage,\r\n [ProductTypes.Dashboard]: this.DashboardsLandingPage,\r\n [ProductTypes.Forecasting]: this.ForecastingLandingPage,\r\n [ProductTypes.Multi]: this.MultiLandingPage,\r\n [ProductTypes.Sustain]: this.SustainLandingPage,\r\n };\r\n\r\n return productToLandingPage[productType];\r\n };\r\n\r\n /* Reporting */\r\n static ReportingLandingPage = '/Reporting/Organisations';\r\n\r\n /* Dashboards */\r\n static DashboardsLandingPage = '/Dashboard/Organisations';\r\n\r\n /* Multi */\r\n static MultiLandingPage = '/Multi/Organisations';\r\n\r\n /* Forecasting */\r\n static ForecastingLandingPage = '/Forecasting/Organisations';\r\n static AddDataSource: AppRoute<{ organisationId: string }> = ({ organisationId }) =>\r\n `/Forecasting/${organisationId}/AddDataSource`;\r\n static TaskManager: AppRoute<{ organisationId: string }> = ({ organisationId }) =>\r\n `/Forecasting/${organisationId}/TaskManager`;\r\n static ManageGroup: AppRoute<{ organisationId: string }> = ({ organisationId }) =>\r\n `/Forecasting/${organisationId}/ManageGroup`;\r\n static CreateBudget: AppRoute<{ windowCode: string; reportId: string }> = ({ windowCode, reportId }) =>\r\n `/Report/Build2/${windowCode}?reportId=${reportId}#BUDGETCUSTOMISE`;\r\n static CreateForecast: AppRoute<{ windowCode: string; reportId: string }> = ({ windowCode, reportId }) =>\r\n `/Report/Build2/${windowCode}?reportId=${reportId}#FORECASTCUSTOMISE`;\r\n static CustomiseBudget: AppRoute<{ windowCode: string; reportId: string; taskId: string }> = ({\r\n windowCode,\r\n reportId,\r\n taskId,\r\n }) => `/Report/Build2/${windowCode}?reportId=${reportId}#BUDGETCUSTOMISE/${taskId}`;\r\n static CustomiseForecast: AppRoute<{ windowCode: string; reportId: string; taskId: string }> = ({\r\n windowCode,\r\n reportId,\r\n taskId,\r\n }) => `/Report/Build2/${windowCode}?reportId=${reportId}#FORECASTCUSTOMISE/${taskId}`;\r\n static CustomiseDrivers: AppRoute<{ windowCode: string; reportId: string; dataSourceId: string }> = ({\r\n windowCode,\r\n reportId,\r\n dataSourceId,\r\n }) => `/Report/Build2/${windowCode}?reportId=${reportId}#DRIVERSCUSTOMISE/${dataSourceId}`;\r\n static CustomiseMeasures: AppRoute<{ windowCode: string; reportId: string; dataSourceId: string }> = ({\r\n windowCode,\r\n reportId,\r\n dataSourceId,\r\n }) => `/Report/Build2/${windowCode}?reportId=${reportId}#MEASURESCUSTOMISE/${dataSourceId}`;\r\n static CustomiseForecastPage: AppRoute<{ windowCode: string; reportId: string; pageId: string }> = ({\r\n windowCode,\r\n reportId,\r\n pageId,\r\n }) => `/Report/build2/${windowCode}?reportId=${reportId}#CUSTOMISELAYOUT/${pageId}`;\r\n\r\n /* Sustain */\r\n static SustainLandingPage = '/Sustain/Organisations';\r\n static SustainSelectTemplate: AppRoute<{ reportId: string }> = ({ reportId }) =>\r\n `/Sustain/Report/${reportId}/SelectTemplate`;\r\n static SustainAddData: AppRoute<{ reportId: string }> = ({ reportId }) => `/Sustain/Report/${reportId}/AddData`;\r\n static SustainDataSources: AppRoute<{ reportId: string }> = ({ reportId }) =>\r\n `/Sustain/Report/${reportId}/DataSources`;\r\n static SustainBuildReport: AppRoute<{ reportId: string }> = ({ reportId }) =>\r\n `/Sustain/ReportWizard/?reportId=${reportId}#step3`;\r\n static SustainPreviewAndShare: AppRoute<{ reportId: string }> = ({ reportId }) =>\r\n `/Sustain/Report/${reportId}/PreviewAndShare`;\r\n static SustainCustomisePage: AppRoute<{ reportId: string; currentStage: number; pageId: string }> = ({\r\n reportId,\r\n currentStage,\r\n pageId,\r\n }) => `/Sustain/ReportWizard/?reportId=${reportId}#step${currentStage}/${pageId}`;\r\n\r\n /* Webflow */\r\n static TransformInActionLogIn = 'https://transform.spotlightreporting.com/log-in';\r\n\r\n /* Help Centre */\r\n static DesktopConnectorHelp: AppRoute<{ dataSourceTypeCode: DataSourceTypeCode }> = ({ dataSourceTypeCode }) => {\r\n const baseUrl = 'https://help.spotlightreporting.com/reporting';\r\n const paths = {\r\n [DataSourceTypeCode.MyobAccountRightDesktop]: 'myob-accountright-desktop',\r\n [DataSourceTypeCode.QuickBooksDesktop]: 'quickbooks-desktop',\r\n [DataSourceTypeCode.Sage50Desktop]: 'sage-50-accounts',\r\n };\r\n\r\n return `${baseUrl}/${paths[dataSourceTypeCode]}`;\r\n };\r\n}\r\n","import { logError } from '.';\r\n\r\ndeclare const Spotlight: any;\r\n\r\nexport enum FeatureFlags {\r\n NoThumbnails = 'no-thumbnails',\r\n TiaWebflow = 'tia-webflow',\r\n ImportDataReporting = 'import-data-reporting-full-release',\r\n}\r\n\r\n/**\r\n * Checks if the practice has the given feature flag.\r\n * Relies on the featureflags being assigned to the global Spotlight.PracticeFeatureFlags.\r\n * Prefer to instead call asyncPracticeHasFeatureFlag for new code that is safe to operate async.\r\n */\r\n// TODO: Restrict the type of the flag parameter further so that the value must be in the FeatureFlags enum\r\nexport const practiceHasFeatureFlag = (flag: string | FeatureFlags): boolean => {\r\n const flags = typeof Spotlight !== 'undefined' && Spotlight.PracticeFeatureFlags;\r\n if (flags === undefined || flags === '') {\r\n // Note: if the practice has no features toggled on we should at least receive the string 'None' here\r\n logError({\r\n error: new Error(\r\n `Attempted to check practice feature flags but flags were not set. Feature Flag to check was ${flag}.`,\r\n ),\r\n });\r\n return false;\r\n }\r\n return (\r\n flags\r\n .split('|')\r\n .map((flag) => flag.trim().toLowerCase())\r\n .indexOf(flag.toLowerCase()) >= 0\r\n );\r\n};\r\n\r\n/**\r\n * Checks if the practice has the given feature flag.\r\n * Currently just checks the flag from the Spotlight global var.\r\n * Intent would be for this to fetch featureflags from the API\r\n * possibly memoize/cache and remove the dependency on the Spotlight global var.\r\n */\r\n// TODO: Restrict the type of the flag property further so that the value must be in the FeatureFlags enum\r\nexport const asyncPracticeHasFeatureFlag = async ({ flag }: { flag: string | FeatureFlags }): Promise => {\r\n return practiceHasFeatureFlag(flag);\r\n};\r\n","/**\r\n * Logs an error to error monitoring provider.\r\n * Logging wrapper - currently sends to raygun but should be able to swap for any provider.\r\n */\r\ntype logErrorHandler = (value: { error: Error; customData?: unknown; tags?: string[] }) => void;\r\nexport const logError: logErrorHandler = ({ error, customData, tags }) => {\r\n // guard against raygun not being available\r\n if (typeof window.rg4js !== 'function') {\r\n return;\r\n }\r\n // send to raygun\r\n window.rg4js('send', {\r\n error,\r\n customData,\r\n tags: ['MonitoredError', ...(tags ?? [])],\r\n });\r\n};\r\n","import { DataSourceCodes } from '../Models/Constants';\r\n\r\nexport const shouldUseNewImport = (code: DataSourceCodes): boolean =>\r\n [\r\n DataSourceCodes.Excel,\r\n DataSourceCodes.ExcelDesktop,\r\n DataSourceCodes.ExcelPersonalWealth,\r\n DataSourceCodes.QuickBooks,\r\n DataSourceCodes.Xero,\r\n DataSourceCodes.XeroPracticeManager,\r\n DataSourceCodes.GoogleSheets,\r\n ].includes(code);\r\n\r\n/**\r\n * Takes a progress percent and the previous progress percent and returns a smoothed value so progress doesn't jump significantly\r\n */\r\nexport const getSmoothProgress = (pct: number, prevPct: number): number => {\r\n const smoothVal = 3;\r\n const oldPct = prevPct || pct;\r\n\r\n if ((pct !== oldPct || pct - oldPct > smoothVal) && !(oldPct + smoothVal > pct)) {\r\n // Smoothing\r\n if (pct - oldPct > 4 * smoothVal) {\r\n pct = oldPct + 2 * smoothVal;\r\n } else {\r\n pct = oldPct + smoothVal;\r\n }\r\n }\r\n\r\n if (pct > 100) {\r\n // Max 100%\r\n pct = 100;\r\n }\r\n\r\n pct = Math.max(pct, 10); // Always > 10\r\n pct = Math.max(prevPct, pct); // Always grow\r\n return pct;\r\n};\r\n\r\nexport const isDesktop = (code: DataSourceCodes): boolean =>\r\n [\r\n DataSourceCodes.MYOBAccountRightDesktop,\r\n DataSourceCodes.QuickBooksDesktop,\r\n DataSourceCodes.Sage50Desktop,\r\n ].includes(code);\r\n\r\nexport const calculateProgress = ({\r\n code,\r\n lastProgress,\r\n completedWork,\r\n importedReports,\r\n startedOrganisations,\r\n totalReports,\r\n totalOrganisations,\r\n}: {\r\n code: DataSourceCodes;\r\n lastProgress: number;\r\n completedWork: number;\r\n importedReports: number;\r\n startedOrganisations: number;\r\n totalReports: number;\r\n totalOrganisations: number;\r\n}): number => {\r\n const getProgressLessDesktopFile = (pct) => {\r\n if (isDesktop(code)) {\r\n // Uploading the desktop file is worth 50% of the progress, we need to scale 100 into 50%\r\n pct = 50 + pct / 2;\r\n }\r\n return pct;\r\n };\r\n\r\n if (shouldUseNewImport(code)) {\r\n if (completedWork > 1) {\r\n let nextProgress = getProgressLessDesktopFile(completedWork);\r\n nextProgress = getSmoothProgress(nextProgress, lastProgress);\r\n return nextProgress;\r\n }\r\n return 0;\r\n } else {\r\n if (totalReports > 1) {\r\n const pct = Math.floor(\r\n ((importedReports * startedOrganisations) / totalReports / totalOrganisations) * 100,\r\n );\r\n let nextProgress = getProgressLessDesktopFile(pct);\r\n nextProgress = getSmoothProgress(nextProgress, lastProgress);\r\n return nextProgress;\r\n }\r\n return 0;\r\n }\r\n};\r\n","import { logError } from './log';\r\n\r\nclass ParseJSONError extends Error {\r\n constructor(message: string, error: SyntaxError, text: string) {\r\n super(message);\r\n this.name = 'ParseJSONError';\r\n\r\n // Append the text we were attempting to parse to the stack\r\n this.stack = `${error.stack}\\nText: '${text}'`;\r\n }\r\n}\r\n\r\nexport const parseJSON = (text: string, context: string): any => {\r\n try {\r\n return JSON.parse(text);\r\n } catch (syntaxError) {\r\n throw new ParseJSONError(`error parsing json: ${context}`, syntaxError, text);\r\n }\r\n};\r\n","import dayjs from 'dayjs';\r\n\r\n// A wrapper around dayjs that returns undefined if the datetime string is undefined\r\n// This is needed as dayjs treats dayjs(undefined) as dayjs(), which returns a Day.js object with the current date and time\r\nexport const stringToDayJs = (date: string | undefined): dayjs.Dayjs => {\r\n if (!date) {\r\n return undefined;\r\n }\r\n\r\n return dayjs(date);\r\n};\r\n","import { ReportModes, ProductTypes } from '../Models/Constants';\r\n\r\n/**\r\n * Maps a report mode to a product.\r\n * e.g. SPOTLIGHT => REPORTING, FRANCHISE => MULTI\r\n */\r\nexport const getProductByReportMode = (reportMode: ReportModes): ProductTypes => {\r\n switch (reportMode) {\r\n case ReportModes.Spotlight: {\r\n return ProductTypes.Reporting;\r\n }\r\n case ReportModes.Forecast: {\r\n return ProductTypes.Forecasting;\r\n }\r\n case ReportModes.Dashboard: {\r\n return ProductTypes.Dashboard;\r\n }\r\n case ReportModes.Franchise: {\r\n return ProductTypes.Multi;\r\n }\r\n case ReportModes.Sustain: {\r\n return ProductTypes.Sustain;\r\n }\r\n }\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { Alert } from '@ui';\r\nimport toast from 'react-hot-toast';\r\n\r\nexport type Severity = 'error' | 'warning' | 'success' | 'info' | 'none';\r\n\r\nexport const contactSupportMessage = (\r\n <>\r\n If this continues to happen, please email our support desk at{' '}\r\n support@spotlightreporting.com\r\n \r\n);\r\n\r\nexport const showToastAlert = ({\r\n severity,\r\n content,\r\n duration,\r\n dataId,\r\n maxWidth = '500px',\r\n}: {\r\n severity: Severity;\r\n content: React.ReactNode;\r\n duration?: number;\r\n dataId?: string;\r\n maxWidth?: string;\r\n}): void => {\r\n toast.custom(\r\n (t) => (\r\n toast.dismiss(t.id)}\r\n isVisible={t.visible}\r\n variant={'shadowed'}\r\n severity={severity}\r\n maxWidth={maxWidth}\r\n dataId={dataId}\r\n fadeIn\r\n >\r\n {content}\r\n \r\n ),\r\n {\r\n position: 'top-center',\r\n duration: duration ?? Infinity,\r\n },\r\n );\r\n};\r\n\r\nexport const showGenericErrorToast = (): void => {\r\n showToastAlert({\r\n severity: 'error',\r\n content:

Sorry, something went wrong. {contactSupportMessage}.

,\r\n });\r\n};\r\n","export const WizardStepsForecasting = {\r\n TaskManager: 'TASKMANAGER',\r\n CustomiseBudget: 'BUDGETCUSTOMISE',\r\n CustomiseForecast: 'FORECASTCUSTOMISE',\r\n CustomiseScenario: 'SCENARIOCUSTOMISE',\r\n CustomiseDrivers: 'DRIVERSCUSTOMISE',\r\n CustomiseMeasures: 'MEASURESCUSTOMISE',\r\n CustomiseData: 'CUSTOMISEDATA',\r\n Settings: 'SETTINGS',\r\n CustomiseLayout: 'CUSTOMISELAYOUT',\r\n Preview: 'PREVIEW',\r\n Complete: 'COMPLETE',\r\n\r\n QB: 'QB',\r\n MyobAccountRight: 'MYOBACCOUNTRIGHT',\r\n Xero: 'XERO',\r\n Step3: 'step3',\r\n Step4: 'step4',\r\n Step5: 'step5',\r\n};\r\n\r\nexport enum ReportModes {\r\n Spotlight = 'SPOTLIGHT',\r\n Forecast = 'FORECAST',\r\n Dashboard = 'DASHBOARD',\r\n Franchise = 'FRANCHISE',\r\n Sustain = 'SUSTAIN',\r\n}\r\n\r\nexport enum ProductTypes {\r\n Reporting = 'REPORTING',\r\n Forecasting = 'FORECASTING',\r\n Dashboard = 'DASHBOARD',\r\n Multi = 'MULTI',\r\n Sustain = 'SUSTAIN',\r\n}\r\n\r\nexport enum DataSourceCodes {\r\n Xero = 'XERO',\r\n QuickBooks = 'QUICKBOOKS',\r\n QuickBooksDesktop = 'QUICKBOOKSDESKTOP',\r\n MYOBAccountRight = 'MYOBACCOUNTRIGHT',\r\n MYOBAccountRightDesktop = 'MYOBACCOUNTRIGHTDESKTOP',\r\n Sage50Desktop = 'SAGE50DESKTOP',\r\n Excel = 'EXCEL',\r\n ExcelDesktop = 'EXCELDESKTOP',\r\n GoogleAnalytics = 'GOOGLEANALYTICS',\r\n GoogleAnalytics4 = 'GOOGLEANALYTICS4',\r\n GoogleSheets = 'GOOGLESHEETS',\r\n WorkFlowMax = 'WORKFLOWMAX',\r\n XeroPracticeManager = 'XEROPRACTICEMANAGER',\r\n PersonalWealth = 'PERSONALWEALTH',\r\n ExcelPersonalWealth = 'EXCELPERSONALWEALTH',\r\n}\r\n\r\nexport enum DataSourceTypes {\r\n Cloud = 'CLOUD',\r\n Desktop = 'DESKTOP',\r\n Manual = 'MANUAL',\r\n}\r\n\r\nexport enum ImportStatusCode {\r\n Pending = 'PENDING',\r\n NeverImported = 'NEVER',\r\n Importing = 'IMPORTING',\r\n Cancelled = 'CANCELLED',\r\n ImportFailed = 'IMPORTFAILED',\r\n ConnectFailed = 'CONNECTFAILED',\r\n Saving = 'SAVING',\r\n Waiting = 'WAITING',\r\n WaitingToCopyForecastTask = 'WAITING_TO_COPY_FORECAST_TASK',\r\n WaitingToCreateForecastTask = 'WAITING_TO_CREATE_FORECAST_TASK',\r\n WaitingToGenerateJournals = 'WAITING_TO_GENERATE_JOURNALS',\r\n WaitingToSyncForecastTaskData = 'WAITING_TO_SYNC_FORECAST_TASK_DATA',\r\n WaitingToUpdateForecastTaskSettings = 'WAITING_TO_UPDATE_FORECAST_TASK_SETTINGS',\r\n Running = 'RUNNING',\r\n Success = 'SUCCESS',\r\n Ready = 'READY',\r\n TimeOut = 'TIMEOUT',\r\n GANoProfiles = 'GANOPROFILES',\r\n MYOBSelectFile = 'MYOBSELECTFILE',\r\n NoTrackingSelected = 'NOTRACKINGSELECTED',\r\n CyclicalDependencies = 'CYCLICALDEPENDENCIES',\r\n NotRequired = 'NOTREQUIRED',\r\n Checking = 'CHECKING',\r\n UnknownError = 'UNKNOWNERROR',\r\n SuccessWithErrors = 'SUCCESSWITHERRORS',\r\n}\r\n\r\nexport const FailInviteCustomerCareRequest = 'fail-customer-care-request';\r\n","import { DataSourceTypeCode, ReportMode } from '../../Codes';\r\nimport * as Requests from './ApiRequestModels';\r\n\r\nexport class Endpoints {\r\n // Spotlight\r\n static DoEvent = '/DoEvent';\r\n static DoHtmlEvent = '/DoHtmlEvent';\r\n static Refresh = '/Refresh';\r\n static Charts = '/Charts';\r\n static GetMemberRoles = '/GetMemberRoles';\r\n static SendFeedback = '/SendFeedback';\r\n static LogEvent = '/LogEvent';\r\n static Connect = '/Connect';\r\n static ConnectReport = '/ConnectReport';\r\n static Report = '/Report';\r\n static ReportExport = '/ReportExport';\r\n\r\n //Member\r\n static MemberResetPassword = '/Member/ForceResetPassword';\r\n static MemberForgotPasswordOidc = '/Member/ForgotPasswordOidc';\r\n static MemberApiToken = '/Member/ApiToken';\r\n static ResendMfaCode = '/Member/ResendMfaCode';\r\n static AuthenticateMemberByMfaCode = '/Member/AuthenticateByMFACode';\r\n static UpdateMfaSettingsAndAuthenticate = '/Member/UpdateMFASettingsAndAuthenticate';\r\n static Signup = '/Member/Signup';\r\n static CreateOrganisation = '/Member/NewOrganisation';\r\n\r\n // Client\r\n static PreviewPagesClient = '/C/PreviewPages';\r\n\r\n // Report\r\n static ReportCodes = '/Report/ReportCodes';\r\n static ReportStatus = '/Report/ReportStatus';\r\n static ReportVariables = '/Report/ReportVariables';\r\n static FxRates = '/Report/GetFxRates';\r\n static AccountSummary = '/Report/AccountSummary';\r\n static Accounts = '/Report/Accounts';\r\n static ForecastStatus = '/Report/ForecastStatus';\r\n static PreviewPages = '/Report/PreviewPages';\r\n static DataSourceCollection = '/Report/DataSourceCollection';\r\n\r\n static UpdateReport = '/Report/UpdateReport';\r\n static UpdateCharts = '/Report/Charts';\r\n static UpdateDashPanel = '/Report/UpdateDashPanel';\r\n static UpdateFxRates = `/Report/SaveFxRates`;\r\n static KpiPreview = '/Report/KPIPreview';\r\n\r\n // Report history\r\n static Reports = '/ReportHistory/GetReports';\r\n static RecentReports = '/ReportHistory/GetRecentReports';\r\n\r\n // Report export\r\n static StartExport = '/ReportExport/StartExport';\r\n static DocumentStatus = '/ReportExport/DocumentStatus';\r\n\r\n // Forecast\r\n static ForecastTaskManager = '/Forecast/TaskManager';\r\n static ForecastJournals = '/Forecast/Journals';\r\n static ValidateDynamicRule = '/Forecast/ValidateDynamicRule';\r\n static ValidateWagesRule = '/Forecast/ValidateWagesRule';\r\n static ValidateBalanceSheetRule = '/Forecast/ValidateBalanceSheetRule';\r\n static GetCyclicalReferences = '/Forecast/GetCyclicalReferences';\r\n static RunRulesForDataSourcesUsingDrivers = '/Forecast/RunRulesForDataSourcesUsingDrivers';\r\n static ValidateMeasure = '/Forecast/ValidateMeasure';\r\n static CalculateLoanAmortisation = '/Forecast/CalculateLoanAmortisation';\r\n static ExportLoanAmortisation = '/Forecast/ExportLoanAmortisation';\r\n\r\n // FormulaBuilder\r\n static FormulaGallery = '/FormulaGallery/List';\r\n static CreateFormula = '/FormulaGallery/CreateFormula';\r\n static CheckFormulaName = '/FormulaGallery/CheckFormulaName';\r\n static SetTags = '/FormulaGallery/SetTags';\r\n static SaveFormula = '/FormulaGallery/SaveFormula';\r\n static DeleteCustomFormula = '/FormulaGallery/DeleteCustomFormula';\r\n\r\n // Practice\r\n static PracticeThumnails = '/Practice/Thumbnails';\r\n static CoverPreview = '/Practice/CoverPreview';\r\n static CoverTemplates = '/Practice/CoverTemplates';\r\n static ColorPalette = '/Practice/ColorPalette';\r\n static GetPasswordHistoryPreference = '/Practice/GetPasswordHistoryPreference';\r\n static UpdatePasswordHistoryPreference = '/Practice/UpdatePasswordHistoryPreference';\r\n static GetPasswordExpiryPreference = '/Practice/GetPasswordExpiryPreference';\r\n static UpdatePasswordExpiryPreference = '/Practice/UpdatePasswordExpiryPreference';\r\n\r\n // Organisation\r\n static CheckOrganisationName = '/Organisation/CheckName';\r\n static CheckGroupName = '/Organisation/CheckGroupName';\r\n static GetFilteredOrganisationNames = '/Organisation/Names';\r\n static GetFilteredLocations = '/organisation/locations';\r\n\r\n // DataSource\r\n static SaveFilePath = '/DataSource/SaveFilePath';\r\n static GetUploadUrl = '/DataSource/GetUploadUrl';\r\n static SetOptionsValue = '/DataSource/SetOptionsValue';\r\n static DisconnectDataSource = '/DataSource/Disconnect';\r\n static ManualPersonalWealth = '/Datasource/ManualPersonalWealth';\r\n static NewDataSource = '/DataSource/New';\r\n static CheckGoogleAccess = '/DataSource/CheckGoogleAccess';\r\n\r\n static ConnectFranchiseeDataSource = ({\r\n dataSourceTypeCode,\r\n windowCode,\r\n settings,\r\n }: {\r\n dataSourceTypeCode: DataSourceTypeCode;\r\n windowCode?: string;\r\n settings: {\r\n reportMode: string;\r\n franchiseId: string;\r\n actionCode: string;\r\n name?: string;\r\n abbreviation?: string;\r\n };\r\n }): string => {\r\n const supportedDataSourceTypes = [\r\n DataSourceTypeCode.MyobAccountRight,\r\n DataSourceTypeCode.QuickBooks,\r\n DataSourceTypeCode.Xero,\r\n ];\r\n\r\n if (!supportedDataSourceTypes.includes(dataSourceTypeCode)) {\r\n throw new Error('Data source type not supported');\r\n }\r\n\r\n const baseUrl = `/datasource/${dataSourceTypeCode.toLowerCase()}franchisee/${windowCode}`;\r\n const queryStringParams = new URLSearchParams(settings);\r\n\r\n return `${baseUrl}?${queryStringParams}`;\r\n };\r\n\r\n // Desktop\r\n static GenerateWebToken = '/Desktop/GenerateWebToken';\r\n\r\n // Integrations\r\n static CompanyFileLinked = 'IsCompanyFileLinked';\r\n static OpenCompanyFile = 'OpenCompanyFile';\r\n static SelectCompanyFile = 'SelectCompanyFile';\r\n\r\n // MYOB\r\n static OpenMyobCompanyFile = '/MYOB/OpenCompanyFile';\r\n static IsMyobCompanyFileLinked = '/MYOB/IsCompanyFileLinked';\r\n\r\n // Mailgun\r\n static CheckSendingStatus = '/Mailgun/CheckSendingStatus';\r\n static ValidateEmail = '/Mailgun/ValidateEmail';\r\n\r\n // Desktop connector\r\n static AgentIsRunning = 'AgentIsRunning';\r\n static OpenFile = 'OpenFile';\r\n static FileStatus = 'FileStatus';\r\n static JobStatus = 'Import/Status';\r\n static CancelJob = 'Import/Cancel';\r\n static ImportClasses = 'Classes';\r\n static UploadDataFile = 'UploadDataFile';\r\n\r\n // Notifications\r\n static GetNotifications = '/Notification/GetNotifications';\r\n static NotificationBatchUpdate = '/Notification/BatchUpdate';\r\n static NotificationUpdate = '/Notification/Update';\r\n static NotificationDelete = '/Notification/Delete';\r\n static NotificationDeleteAll = '/Notification/DeleteAll';\r\n}\r\n\r\nexport class WebApiEndpoints {\r\n // Spotlight\r\n static GetCurrencies = '/webapi/currencies';\r\n\r\n // Member\r\n static GetMFASettings = '/webapi/members/mfasettings';\r\n static GetMFASettingsForMember = (memberId: string): string => `/webapi/members/${memberId}/mfasettings`;\r\n static VerifyMFASettingsForMember = (memberId: string): string => `/webapi/members/${memberId}/mfasettings/verify`;\r\n static UpdateReleaseNotificationReadDate = '/webapi/members/updatereleasenotificationreaddate';\r\n static GetLoginOIDCType = '/webapi/members/loginoidctype';\r\n static GetProductAccess = '/webapi/members/productaccess';\r\n\r\n // Webflow\r\n static CheckAccessToTransformInAction = '/webapi/webflow/checkaccesstotransforminaction';\r\n static GetWebflowUser = '/webapi/webflow/getuser';\r\n static CreateWebflowUser = '/webapi/webflow/createuser';\r\n static DeleteWebflowUser = '/webapi/webflow/deleteuser';\r\n\r\n // Notifications\r\n static GetUnreadNotificationCount = '/webapi/notification/getUnreadCount';\r\n\r\n // Organisation\r\n static GetOrganisationTypeCode = ({ organisationId }: Requests.GetOrganisationTypeCodeRequestRoute): string =>\r\n `/webapi/organisation/${organisationId}/TypeCode`;\r\n static OrganisationTrackingSettings = (organisationId: string): string =>\r\n `/webapi/organisation/${organisationId}/trackingsettings`;\r\n static GetThumbnails = (reportId: string, thumbnailId: string, pages: number): string =>\r\n `/webapi/reports/${reportId}/thumbnails/${thumbnailId}?pages=${pages}`;\r\n static LoadThumbnails = (reportId: string, localTime: string): string =>\r\n `/webapi/reports/${reportId}/loadthumbnails?localTime=${localTime}`;\r\n static GetGrid = (\r\n accountCode: string,\r\n reportId: string,\r\n dataSourceId: string,\r\n mode: string,\r\n organisationId: string,\r\n date: string,\r\n tracking1: string,\r\n tracking2: string,\r\n ): string =>\r\n `/webapi/organisation/${organisationId}/report/${reportId}/griddata?accountCode=${accountCode}&dataSourceId=${dataSourceId}&mode=${mode}&date=${date}${tracking1}${tracking2}`;\r\n static GetPreviewPage = (\r\n windowCode: string,\r\n reportId: string,\r\n pageId: string,\r\n timeZoneOffset: number,\r\n localTime: string,\r\n activeChartId: string,\r\n ): string =>\r\n `/Report/PagePreview/${windowCode}?reportid=${reportId}&pageId=${pageId}&timeZoneOffset=${timeZoneOffset}&localTime=${localTime}&activeChartId=${activeChartId}`;\r\n static GetAllPreviewPages = (\r\n windowCode: string,\r\n reportId: string,\r\n timeZoneOffset: number,\r\n localTime: string,\r\n ): string =>\r\n `/Report/AllPagesPreview/${windowCode}?reportid=${reportId}&timeZoneOffset=${timeZoneOffset}&localTime=${localTime}`;\r\n static GetOrganisationUsage = (organisationId: string, reportMode: string): string =>\r\n `/webapi/organisation/${organisationId}/usage?reportMode=${reportMode}`;\r\n static GetOrganisationDataSourceCollection = (organisationId: string, reportMode: string): string =>\r\n `/webapi/organisation/${organisationId}/externaldatasources?reportMode=${reportMode}`;\r\n static GetOrganisationCountryCode = (organisationId: string): string =>\r\n `/webapi/organisation/${organisationId}/countrycode`;\r\n static ValidateOrganisationNameIsUnique = (reportmode: ReportMode, name: string): string =>\r\n `/webapi/organisation/${reportmode}/NameIsUnique?name=${name}`;\r\n static DeleteOrganisation = (organisationId: string): string => `/webapi/organisation/${organisationId}`;\r\n static GetOrCreateMemberWindow = (organisationId: string): string =>\r\n `/webapi/organisation/${organisationId}/MemberWindow`;\r\n static GetOrganisationCountLimits = (reportMode: ReportMode): string =>\r\n `/webapi/organisation/${reportMode}/GetOrgCountLimits`;\r\n static GetOrganisationCountLimitsFranchise = (reportMode: ReportMode, franchiseId: string): string =>\r\n `/webapi/organisation/${reportMode}/GetOrgCountLimits?franchiseId=${franchiseId}`;\r\n\r\n // Accounts\r\n static GetDataSourceAccountsByReportCode = (\r\n organisationId: string,\r\n dataSourceId: string,\r\n reportCode: string,\r\n ): string => `/webapi/Organisation/${organisationId}/DataSource/${dataSourceId}?reportCode=${reportCode}`;\r\n\r\n static GetAccountDataByAccountId = (\r\n organisationId: string,\r\n accountId: string,\r\n fromDate: string,\r\n toDate: string,\r\n ): string =>\r\n `/webapi/organisation/${organisationId}/Account/${accountId}/Data?fromDate=${fromDate}&toDate=${toDate}`;\r\n\r\n static GetAccount = ({ organisationId, accountId }: Requests.GetAccountRequestRoute): string =>\r\n `/webapi/organisation/${organisationId}/accounts/${accountId}`;\r\n static GetAccountsDistinct = (organisationId: string, reportMode: string): string =>\r\n `/webapi/organisation/${organisationId}/AccountsDistinct?reportMode=${reportMode}`;\r\n static UpdateAccountDisplayName = ({\r\n organisationId,\r\n accountId,\r\n }: Requests.UpdateAccountDisplayNameRequestRoute): string =>\r\n `/webapi/organisation/${organisationId}/accounts/${accountId}/DisplayName`;\r\n static CreateSustainAccount = (organisationId: string, dataSourceId: string): string =>\r\n `/webapi/organisation/${organisationId}/datasource/${dataSourceId}/SustainAccount`;\r\n static UpdateSustainAccount = (organisationId: string, accountId: string): string =>\r\n `/webapi/organisation/${organisationId}/SustainAccount/${accountId}`;\r\n static DeleteSustainAccounts = (organisationId: string): string =>\r\n `/webapi/organisation/${organisationId}/SustainAccounts`;\r\n\r\n // Forecasting\r\n static GetForecastStatus = (dataSourceId: string): string => `/webapi/forecast/${dataSourceId}/status`;\r\n static GetForecastSettings = (reportId: string, dataSourceId: string): string =>\r\n `/webapi/forecast/${reportId}/task/${dataSourceId}/settings`;\r\n static GetDefaultForecastSettings = (reportId: string): string => `/webapi/forecast/${reportId}/DefaultSettings`;\r\n static GetDefaultForecastSettingsDates = (organisationId: string): string =>\r\n `/webapi/forecast/${organisationId}/DefaultSettingsDates`;\r\n static GetForecastExternalDataSources = (organisationId: string): string =>\r\n `/webapi/forecast/${organisationId}/ExternalDataSources`;\r\n static GetForecastTaskSyncSettings = (taskId: string): string => `/webapi/forecast/${taskId}/TaskSyncSettings`;\r\n static GetForecastGridData = (\r\n reportId: string,\r\n dataSourceId: string,\r\n accountCode: string,\r\n mode: string,\r\n startDate: string,\r\n endDate: string,\r\n tracking1: string,\r\n tracking2: string,\r\n ): string =>\r\n `/webapi/forecast/${reportId}/task/${dataSourceId}/griddata?accountCode=${accountCode}&mode=${mode}&startDate=${startDate}&endDate=${endDate}${tracking1}${tracking2}`;\r\n static GetForecastMeasuresGridData = (organisationId: string, startDate: string, endDate: string): string =>\r\n `/webapi/forecast/${organisationId}/measuresgriddata?startDate=${startDate}&endDate=${endDate}`;\r\n static GetForecastGroupGridData = ({\r\n organisationId,\r\n bandType,\r\n startDate,\r\n endDate,\r\n reportCode,\r\n }: Requests.ForecastGroupGridDataRequest): string => {\r\n let path = `/webapi/forecast/group/${organisationId}/griddata?bandType=${bandType}&startDate=${startDate}&endDate=${endDate}`;\r\n if (typeof reportCode !== 'undefined') {\r\n path += `&reportCode=${reportCode}`;\r\n }\r\n return path;\r\n };\r\n static GetForecastDataSourceUsage = (dataSourceId: string, excludeDataSourceId: string): string =>\r\n `/webapi/forecast/${dataSourceId}/usage?excludeDataSourceId=${excludeDataSourceId}`;\r\n static GetForecastOrganisations = (): string => `/webapi/forecast/organisations`;\r\n static GetForecastOrganisationTasks = (organisationId: string): string =>\r\n `/webapi/forecast/${organisationId}/tasks`;\r\n static GetForecastTasks = (organisationId: string): string => `/webapi/forecast/${organisationId}/forecasttasks`;\r\n static CreateForecastTask = (organisationId: Requests.CreateForecastTaskRequestRoute['organisationId']): string =>\r\n `/webapi/forecast/task/${organisationId}`;\r\n static CopyForecastTask = (dataSourceId: string): string => `/webapi/forecast/task/${dataSourceId}/copy`;\r\n static GetForecastTaskSettings = (taskId: string): string => `/webapi/forecast/${taskId}/tasksettings`;\r\n static GetForecastTaskSummary = (taskId: string): string => `/webapi/forecast/task/${taskId}/summary`;\r\n static GetForecastDriversId = (organisationId: string): string => `/webapi/forecast/${organisationId}/driversid`;\r\n static GetForecastMeasuresId = (organisationId: string): string => `/webapi/forecast/${organisationId}/measuresid`;\r\n static GetForecastDriversMeasuresSummary = (dataSourceId: string): string =>\r\n `/webapi/forecast/driversmeasures/${dataSourceId}/summary`;\r\n static GetForecastGroupSettings = (organisationId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/settings`;\r\n static GetForecastGroupTasks = (organisationId: string): string => `/webapi/forecast/group/${organisationId}/tasks`;\r\n static ValidateForecastRules = (dataSourceId: string): string => `/webapi/forecast/${dataSourceId}/validaterules`;\r\n static CreateForecastGroup = (): string => `/webapi/forecast/newgroup`;\r\n static UpdateForecastTaskSettings = (taskId: string): string => `/webapi/forecast/task/${taskId}/settings`;\r\n static UpdateForecastDriversMeasuresSettings = (dataSourceId: string): string =>\r\n `/webapi/forecast/driversmeasures/${dataSourceId}/settings`;\r\n static SyncForecastTaskData = (organisationId: string, taskId: string): string =>\r\n `/webapi/forecast/${organisationId}/task/${taskId}/syncdata`;\r\n static UpdateForecastAccountDatum = (\r\n dataSourceId: string,\r\n accountId: string,\r\n date: string,\r\n metric: string,\r\n value: number,\r\n tracking1: string,\r\n tracking2: string,\r\n ): string =>\r\n `/webapi/forecast/task/${dataSourceId}/account/${accountId}/datum?date=${date}&metric=${metric}&value=${value}${tracking1}${tracking2}`;\r\n static UpdateForecastGroupSettings = (organisationId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/settings`;\r\n static AddForecastGroupTask = (organisationId: string): string => `/webapi/forecast/group/${organisationId}/tasks`;\r\n static RefreshForecastGroupTaskData = (organisationId: string, taskDataSourceId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/task/${taskDataSourceId}/sync`;\r\n static DeleteForecastTaskDataSource = (dataSourceId: string): string => `/webapi/forecast/task/${dataSourceId}`;\r\n static DeleteForecastGroupTask = (organisationId: string, taskDataSourceId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/task/${taskDataSourceId}`;\r\n static GetForecastSyncStatus = (organisationId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/syncstatus`;\r\n static ResetForecastGroupTemplate = (reportId: string): string =>\r\n `/webapi/forecast/group/${reportId}/resettemplate`;\r\n static GetForecastEliminations = (organisationId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/eliminations`;\r\n static UpdateForecastEliminations = ({\r\n organisationId,\r\n section,\r\n }: {\r\n organisationId: string;\r\n section: string;\r\n }): string => `/webapi/forecast/group/${organisationId}/eliminations?sectionCode=${section}`;\r\n static GetForecastEliminationAdjustments = (organisationId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/eliminationadjustments`;\r\n static UpdateForecastEliminationAdjustments = (organisationId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/eliminationadjustments`;\r\n static GetForecastEliminationsStatus = (organisationId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/eliminationsstatus`;\r\n static GetForecastEliminationTab = (organisationId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/EliminationTab/`;\r\n static GetForecastShowNoJournalWarning = (organisationId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/ShowNoJournalWarning`;\r\n\r\n static ValidateForecastTaskDescriptionUnique = (organisationId: string, description: string): string => {\r\n return `/webapi/forecast/${organisationId}/validatetaskdescriptionunique?description=${encodeURIComponent(\r\n description,\r\n )}`;\r\n };\r\n static ValidateForecastAccountDeletion = (organisationId: string, accountId: string): string =>\r\n `/webapi/forecast/${organisationId}/validateaccountdeletion?accountId=${accountId}`;\r\n static DeleteForecastAccount = (organisationId: string, accountId: string): string =>\r\n `/webapi/forecast/${organisationId}/account?accountId=${accountId}`;\r\n static GetForecastIncomeTaxRule = (organisationId: string, ruleId: string): string =>\r\n `/webapi/forecast/${organisationId}/Task/Rule?ruleId=${ruleId}`;\r\n static UpdateForecastRule = (organisationId: string, dataSourceId: string, ruleId: string): string =>\r\n `/webapi/forecast/${organisationId}/Task/${dataSourceId}/Rule?ruleId=${ruleId}`;\r\n\r\n // Page\r\n static GetPageGallery = ({ organisationType, reportMode }: Requests.GetPageGalleryRequestRoute): string =>\r\n `/webapi/page/metadata/?organisationTypeCode=${organisationType}&reportMode=${reportMode}`;\r\n\r\n // Reports\r\n static GetActiveReportPages = (reportId: Requests.GetActiveReportPagesRequestRoute['reportId']): string =>\r\n `/webapi/reports/${reportId}/ActivePages`;\r\n static AddPageToReport = (reportId: Requests.AddPageRequestRoute['reportId']): string =>\r\n `/webapi/reports/${reportId}/NewReportPage`;\r\n static AddChartToReport = (\r\n reportId: Requests.AddChartRequestRoute['reportId'],\r\n pageId: Requests.AddChartRequestRoute['pageId'],\r\n sectionId: Requests.AddChartRequestRoute['sectionId'],\r\n ): string => `/webapi/reports/${reportId}/Pages/${pageId}/Sections/${sectionId}/NewReportChart`;\r\n static GetReportPageSettings = (reportId: string, pageId: string): string =>\r\n `/webapi/reports/${reportId}/pages/${pageId}/settings`;\r\n static UpdateReportPageSettings = (reportId: string, pageId: string): string =>\r\n `/webapi/reports/${reportId}/pages/${pageId}/settings`;\r\n static GetPageSettingsOptions = (reportId: string, pageId: string, settingExpression: string): string =>\r\n `/webapi/reports/${reportId}/pages/${pageId}/settings/${settingExpression}/options`;\r\n static SetTrackingReportFilter = (reportId: string): string => `/webapi/reports/${reportId}/trackingFilter`;\r\n static GetTrackingReportFilter = (reportId: string): string => `/webapi/reports/${reportId}/trackingFilter`;\r\n static GetTrackingReportPageFilter = (reportId: string, pageId: string): string =>\r\n `/webapi/reports/${reportId}/PageTrackingFilter/${pageId}`;\r\n static GetTrackingReportPagesFilter = (reportId: string): string =>\r\n `/webapi/reports/${reportId}/PageTrackingFilter`;\r\n static SetTrackingReportPageFilter = (reportId: string): string => `/webapi/reports/${reportId}/PageTrackingFilter`;\r\n\r\n static GetReportColorPalette = (reportId: string): string => `/webapi/reports/${reportId}/colorpalette`;\r\n static GetReportNavigation = (reportId: string): string => `/webapi/reports/${reportId}/navigation`;\r\n static GetReportContext = (reportId: string): string => `/webapi/reports/${reportId}/context`;\r\n\r\n static GetDataSourceStatus = (dataSourceId: string): string => `/webapi/datasource/${dataSourceId}/status`;\r\n\r\n static DisconnectDataSource = (dataSourceId: string): string => `/webapi/datasource/${dataSourceId}/disconnect`;\r\n\r\n static DataSourceTrackingConfigured = (dataSourceId: string): string =>\r\n `/webapi/DataSource/${dataSourceId}/TrackingConfigured`;\r\n\r\n static DeleteDataSource = (dataSourceId: string): string => `/webapi/datasource/${dataSourceId}`;\r\n\r\n static GetTextPanelContent = (reportId: string, pageId: string, chartId: string): string =>\r\n `/webapi/reports/${reportId}/pages/${pageId}/textPanel/${chartId}`;\r\n\r\n static UpdateTextPanelContent = (reportId: string, pageId: string, chartId: string): string =>\r\n `/webapi/reports/${reportId}/pages/${pageId}/textPanel/${chartId}`;\r\n\r\n static CreateNewSustainReport = (organisationId: string, useRecentReport: boolean): string =>\r\n `/webapi/reports/NewSustain/${organisationId}?useRecentReport=${useRecentReport}`;\r\n\r\n // Xero Importing\r\n static GetAuthorisedXeroCompanies = (dataSourceId: string): string =>\r\n `/webapi/datasource/${dataSourceId}/GetAuthorisedXeroCompanies`;\r\n static SetAuthorisedXeroCompany = (dataSourceId: string): string =>\r\n `/webapi/datasource/${dataSourceId}/SetSelectedCompany`;\r\n\r\n // MYOB Importing\r\n static GetMyobCompanyFiles = (dataSourceId: string): string =>\r\n `/webapi/datasource/${dataSourceId}/myobcompanyfiles`;\r\n\r\n // Google Sheets Importing\r\n static GoogleSpreadsheet = (dataSourceId: string): string => `/webapi/datasource/${dataSourceId}/googlespreadsheet`;\r\n\r\n // Feature Flags\r\n static DefaultFeatureFlags = (): string => `/webapi/featureflags`;\r\n static PracticeFeatureFlags = (): string => `/webapi/practice/featureflags`;\r\n static PracticeName = (): string => `/webapi/practice/name`;\r\n static GetFeatureFlagValue = (featureFlag: string): string => `/webapi/practice/GetFeatureFlagValue/${featureFlag}`;\r\n\r\n // ReportHistory\r\n static GetRecentReports = (): string => `/webapi/reporthistory/RecentReports`;\r\n\r\n // Tracking\r\n static CategoryAbbreviations = (dataSourceId: string): string =>\r\n `/webapi/datasource/${dataSourceId}/Tracking/CategoryAbbreviations`;\r\n\r\n // Account Groupings\r\n static CreateAccountGroupingLayout = (organisationId: string): string =>\r\n `/webapi/organisation/${organisationId}/accountgroupings`;\r\n\r\n static DeleteAccountGroupingLayout = (\r\n organisationId: string,\r\n layoutId: string,\r\n reportId: string,\r\n pageId: string,\r\n ): string =>\r\n `/webapi/organisation/${organisationId}/accountgroupings/${layoutId}?reportId=${reportId}&pageId=${pageId}`;\r\n\r\n static GetAccountGroupingLayout = (organisationId: string, layoutId: string): string =>\r\n `/webapi/organisation/${organisationId}/accountgroupings/${layoutId}`;\r\n\r\n static GetAllAccountGroupingLayouts = (organisationId: string, pageType: string): string =>\r\n `/webapi/organisation/${organisationId}/accountgroupings?pageType=${pageType}`;\r\n\r\n static SetAccountGroupingLayout = (organisationId: string): string =>\r\n `/webapi/organisation/${organisationId}/accountgroupings`;\r\n\r\n static SetPageAccountGroupingLayout = (reportId: string, pageId: string, layoutId: string): string =>\r\n `/webapi/reports/${reportId}/pages/${pageId}/accountgroupings/${layoutId}`;\r\n\r\n static UpdateAccountGroupingPageOptions = (reportId: string, pageId: string): string =>\r\n `/webapi/reports/${reportId}/pages/${pageId}/accountgroupings/options`;\r\n\r\n // Data Import\r\n static ImportDataSource = (dataSourceId: string, reportMode: string): string =>\r\n `/webapi/datasource/${dataSourceId}/importdatasource/${reportMode}`;\r\n\r\n static DefaultImportSettings = (dataSourceId: string, reportMode: string): string =>\r\n `/webapi/datasource/${dataSourceId}/defaultimportsettings/${reportMode}`;\r\n\r\n // Configuration\r\n static SpotlightConfig = (): string => `/webapi/config`;\r\n\r\n // Payment Schedules\r\n static GetPracticePaymentSchedules = (countryCode: string): string =>\r\n `/webapi/practice/paymentschedules/${countryCode}`;\r\n\r\n // Billing\r\n static GetFranchiseOrganisations = (): string => '/webapi/billing/getfranchiseorganisations';\r\n\r\n static GetCoreOrganisations = (): string => 'webapi/billing/getcoreorganisations';\r\n\r\n static GetOrganisationsByProduct = (productCode: string): string =>\r\n `webapi/billing/getorganisationsbyproduct/${productCode}`;\r\n\r\n static GetPricingPlans = (currentPlanCode: string): string => `/webapi/billing/pricing/${currentPlanCode}`;\r\n\r\n static GetSubscriptionDetails = (): string => `/webapi/billing/subscriptiondetails`;\r\n\r\n static GetNonAdminBillingData = (): string => `/webapi/billing/nonadminbillingdata`;\r\n\r\n static RetryPayment = (productCode: string): string => `/webapi/billing/retrypayment/${productCode}`;\r\n\r\n static Subscribe = (\r\n featuresToPlanCodes: string,\r\n cardToken: string,\r\n firstName: string,\r\n lastName: string,\r\n email: string,\r\n postcode: string,\r\n billingFrequency?: string,\r\n ): string =>\r\n `/webapi/billing/subscribe?featuresToPlanCodes=${featuresToPlanCodes}&cardToken=${cardToken}&firstName=${firstName}&lastName=${lastName}&email=${email}&postcode=${postcode}&billingFrequency=${billingFrequency}`;\r\n\r\n static StartTrial = (productCode: string, planCode: string): string =>\r\n `/webapi/billing/starttrial?productCode=${productCode}&planCode=${planCode}`;\r\n\r\n static GetMemberIdentifiers = (): string => `/webapi/members/getidentifiers`;\r\n\r\n static GetLocations = '/webapi/members/LocationOptions';\r\n\r\n static IsEmailInUse = (email: string): string => `/webapi/billing/isemailinuse?email=${email}`;\r\n\r\n // Sustain\r\n static CreateSustainOrganisation = '/webapi/organisation/NewSustain';\r\n static CreateSustainTemplate = (reportId: string): string => `/webapi/reports/${reportId}/sustaintemplate`;\r\n static UploadImportFile = (windowCode: string): string => `/UploadImportFile/${windowCode}`;\r\n static UpdateReportSetupStep = (reportId: string, setupStep: string): string =>\r\n `/webapi/reports/${reportId}/reportsetupstep?setupStep=${setupStep}`;\r\n\r\n // Organisations\r\n static GetOrganisations = (product: string): string => `/webapi/organisation/${product}/landingpage`;\r\n static GetGroupedOrganisationIDs = (groupId: string): string =>\r\n `/webapi/organisation/${groupId}/GroupedOrganisationIDs`;\r\n static GetForecastingOrganisations = '/webapi/organisation/forecastinglandingpage';\r\n static GetMultiHeadOffices = '/webapi/organisation/multilandingpage';\r\n static GetOrganisationClients = (organisationId: string): string =>\r\n `/webapi/organisation/${organisationId}/clients`;\r\n}\r\n","import { Dayjs } from 'dayjs';\r\n\r\nexport const stringCompare = (a: string, b: string): number => (a ?? '').localeCompare(b ?? '');\r\n\r\nexport const dayjsCompare = (a: Dayjs, b: Dayjs): number => {\r\n if (!a && !b) {\r\n return 0;\r\n }\r\n\r\n if (!a) {\r\n return -1;\r\n }\r\n\r\n if (!b) {\r\n return 1;\r\n }\r\n\r\n if (a.isSame(b)) {\r\n return 0;\r\n }\r\n\r\n return a.isAfter(b) ? 1 : -1;\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\nexport const anyCompare = (a: any, b: any): number => {\r\n if (a === b) {\r\n return 0;\r\n }\r\n\r\n return a < b ? -1 : 1;\r\n};\r\n","import React, { FunctionComponentElement } from 'react';\r\n\r\nimport { Root, createRoot } from 'react-dom/client';\r\n\r\ninterface RenderComponentProps {\r\n id: string;\r\n component: FunctionComponentElement | FunctionComponentElement[];\r\n container: Element;\r\n props?: any;\r\n}\r\n\r\ninterface RenderComponentByReferenceProps {\r\n id: string;\r\n Component: any;\r\n container: Element;\r\n props?: any;\r\n}\r\n\r\n/**\r\n * Store a React Root on the window referenced by a unique container ID\r\n * once we've rendered it so that we can fetch it again when it's time to unmount\r\n */\r\nexport const pushRoot = (id: string, root: Root) => {\r\n window.reactRoots = {\r\n ...window.reactRoots,\r\n [id]: root,\r\n };\r\n};\r\n\r\n/**\r\n * Fetch the React Root on the window by the unique container ID and unmount it\r\n */\r\nexport const popRoot = (id: string): Root => {\r\n const root = window.reactRoots?.[id];\r\n delete window.reactRoots?.[id];\r\n\r\n return root;\r\n};\r\n\r\n/**\r\n * Just a wrapper over ReactDOM.unmountComponentAtNode\r\n */\r\nexport function unmountComponentAtNode(id: string): void {\r\n const root = popRoot(id);\r\n\r\n if (root) {\r\n root.unmount();\r\n }\r\n}\r\n\r\n/**\r\n * Just a wrapper over ReactDOM.render to render a component without a store\r\n */\r\nexport const renderComponent = ({ id, component, container }: RenderComponentProps): void => {\r\n const root = createRoot(container);\r\n root.render(component);\r\n\r\n pushRoot(id, root);\r\n};\r\n\r\n/**\r\n * Just a wrapper over ReactDOM.render to render a component without a store, passing the component by reference.\r\n * This allows components to be rendered from outside of jsx|tsx files.\r\n */\r\nexport const renderComponentByReference = ({\r\n id,\r\n Component,\r\n container,\r\n props,\r\n}: RenderComponentByReferenceProps): void => {\r\n const root = createRoot(container);\r\n root.render();\r\n\r\n pushRoot(id, root);\r\n};\r\n","import { ErrorMessage as ErrorCode } from '../Codes';\r\n\r\nexport enum ErrorType {\r\n None = 'None',\r\n General = 'General',\r\n AcceptTerms = 'AcceptTerms',\r\n Email = 'Email',\r\n FirstName = 'FirstName',\r\n LastName = 'LastName',\r\n Password = 'Password',\r\n PracticeName = 'PracticeName',\r\n}\r\n\r\nexport class SignupErrorCode {\r\n static PasswordTooShort = 'PASSWORD_TOO_SHORT';\r\n static PasswordMissingUpperAndLowerCase = 'PASSWORD_MISSING_UPPER_AND_LOWER_CASE';\r\n static PasswordMissingNumber = 'PASSWORD_MISSING_NUMBER';\r\n static GeneralError = 'GENERAL_ERROR';\r\n}\r\n\r\nexport const ErrorMessages = {\r\n [ErrorCode.EmailAddressInUse]:\r\n 'This email address is already in use. Please use a different email address or contact support@spotlightreporting.com for assistance.',\r\n [ErrorCode.InvalidEmailAddress]: 'Please enter a valid email format, (e.g. name@example.com)',\r\n [ErrorCode.PracticeNameRequired]: 'Please enter your company name',\r\n [ErrorCode.PracticeNameTooLong]: 'Please enter a shorter company name',\r\n [SignupErrorCode.PasswordTooShort]: 'Please use at least eight characters',\r\n [SignupErrorCode.PasswordMissingUpperAndLowerCase]: 'Please use upper and lower case letters (e.g. Aa)',\r\n [SignupErrorCode.PasswordMissingNumber]: 'Please include at least one number',\r\n [ErrorCode.WeakPassword]:\r\n 'Your password must contain a minimum of eight characters, including at least one number, one upper and one lower case letter (e.g. 123456Aa)',\r\n [ErrorCode.InvalidTrialProfile]: 'Please select the plan you want to trial',\r\n [ErrorCode.AcceptTerms]: 'Please read and accept our legal terms to continue',\r\n [SignupErrorCode.GeneralError]:\r\n 'Sorry, there was an issue processing your signup. Please contact our support@spotlightreporting.com for further assistance.',\r\n};\r\n\r\nexport const GetErrorTypeByCode = (code: string): string => {\r\n switch (code) {\r\n case ErrorCode.AcceptTerms:\r\n return ErrorType.AcceptTerms;\r\n case ErrorCode.EmailAddressInUse:\r\n case ErrorCode.InvalidEmailAddress:\r\n return ErrorType.Email;\r\n case ErrorCode.PracticeNameRequired:\r\n case ErrorCode.PracticeNameTooLong:\r\n case ErrorCode.InvalidOrganisationName:\r\n return ErrorType.PracticeName;\r\n case ErrorCode.PasswordRequired:\r\n case SignupErrorCode.PasswordTooShort:\r\n case SignupErrorCode.PasswordMissingUpperAndLowerCase:\r\n case ErrorCode.WeakPassword:\r\n return ErrorType.Password;\r\n case ErrorCode.FirstNameRequired:\r\n return ErrorType.FirstName;\r\n case ErrorCode.LastNameRequired:\r\n return ErrorType.LastName;\r\n case ErrorCode.InvalidTrialProfile:\r\n case ErrorCode.ServerError:\r\n return ErrorType.General;\r\n default:\r\n return ErrorType.General;\r\n }\r\n};\r\n\r\nexport const ClearErrorMessages = (element: Element): void => {\r\n const errorMessageCollection: NodeList = element.querySelectorAll('.error-text');\r\n const errorMessages = errorMessageCollection ? Array.from(errorMessageCollection) : [];\r\n\r\n errorMessages.forEach((error: any) => {\r\n error.remove();\r\n });\r\n};\r\n\r\nexport const ClearInfoMessages = (element: Element): void => {\r\n const infoMessageCollection = element.querySelectorAll('.info-text');\r\n const infoMessages = infoMessageCollection ? Array.from(infoMessageCollection) : [];\r\n\r\n infoMessages.forEach((info: any) => {\r\n info.remove();\r\n });\r\n};\r\n\r\nexport const CreatePasswordValidationMessageHTML = (isError: boolean, message: string): HTMLDivElement => {\r\n const icon = isError\r\n ? ''\r\n : '';\r\n\r\n const style = isError ? 'error-text' : 'info-text';\r\n\r\n const messageHTML = document.createElement('div');\r\n messageHTML.classList.add(style);\r\n messageHTML.innerHTML = icon + message;\r\n\r\n return messageHTML;\r\n};\r\n\r\nexport const CreateErrorMessageHTML = (message: string): HTMLDivElement => {\r\n const messageHTML = document.createElement('div');\r\n messageHTML.classList.add('error-text');\r\n messageHTML.insertAdjacentHTML('beforeend', message);\r\n\r\n return messageHTML;\r\n};\r\n\r\nexport const ContainerHasNoError = (container: Element): boolean => {\r\n return container.querySelector('.error-text') ? false : true;\r\n};\r\n\r\nexport const FocusOnFirstInputWithError = (): void => {\r\n const formEl = document.getElementById('SignupForm');\r\n const firstErrorEl = formEl.querySelector('.error-text');\r\n if (firstErrorEl) {\r\n const inputEl = firstErrorEl.parentElement.querySelector('input');\r\n inputEl && inputEl.focus();\r\n }\r\n};\r\n","// @ts-nocheck\r\nimport { ErrorMessage as ErrorCode } from '../Codes';\r\nimport {\r\n SignupErrorCode,\r\n ErrorMessages,\r\n ClearErrorMessages,\r\n ClearInfoMessages,\r\n CreatePasswordValidationMessageHTML,\r\n CreateErrorMessageHTML,\r\n} from './sign-up-errors';\r\n\r\nconst Validator = (() => {\r\n const doRequiredFieldValidation = (field) => {\r\n ClearErrorMessages(field.parentNode);\r\n field.classList.remove('error');\r\n\r\n if (!field.value) {\r\n field.classList.add('error');\r\n field.parentNode.appendChild(\r\n CreateErrorMessageHTML('Please enter your ' + field.labels[0].textContent.toLowerCase()),\r\n );\r\n }\r\n };\r\n\r\n const doAllRequiredFieldsValidation = () => {\r\n const requiredFields = Array.from(document.querySelectorAll('[required]'));\r\n\r\n requiredFields.forEach((field) => {\r\n doRequiredFieldValidation(field);\r\n });\r\n };\r\n\r\n const doCompanyNameValidation = () => {\r\n const companyField = document.querySelector('input[name=PracticeName]');\r\n const companyName = companyField.value;\r\n\r\n const isTooLong = companyName.length > 100;\r\n const isEmpty = companyName === '';\r\n const isInvalidLength = isEmpty || isTooLong;\r\n\r\n ClearErrorMessages(companyField.parentNode);\r\n companyField.classList.remove('error');\r\n\r\n if (isInvalidLength) companyField.classList.add('error');\r\n\r\n if (isTooLong)\r\n companyField.parentNode.appendChild(CreateErrorMessageHTML(ErrorMessages[ErrorCode.PracticeNameTooLong]));\r\n\r\n if (isEmpty)\r\n companyField.parentNode.appendChild(CreateErrorMessageHTML(ErrorMessages[ErrorCode.PracticeNameRequired]));\r\n };\r\n\r\n const doEmailValidation = () => {\r\n const emailField = document.querySelector('input[name=Email]');\r\n const email = emailField.value;\r\n\r\n const isLongEnough = email.length > 0;\r\n const isCorrectFormat = new RegExp(emailField.pattern).test(email);\r\n\r\n ClearErrorMessages(emailField.parentNode);\r\n emailField.classList.remove('error');\r\n\r\n if (!isLongEnough || !isCorrectFormat) {\r\n emailField.classList.add('error');\r\n emailField.parentNode.appendChild(CreateErrorMessageHTML(ErrorMessages[ErrorCode.InvalidEmailAddress]));\r\n }\r\n };\r\n\r\n const doPasswordValidation = () => {\r\n const passwordField = document.querySelector('input[name=Password]');\r\n const password = passwordField.value;\r\n const messageContainer = document.getElementById('PasswordErrors');\r\n\r\n const isLongEnough = password.length >= 8;\r\n const hasLowerAndUpperCase = /[a-z].*[A-Z]|[A-Z].*[a-z]/.test(password);\r\n const hasNumber = /[0-9]/.test(password);\r\n\r\n passwordField.classList.remove('error');\r\n ClearErrorMessages(passwordField.parentNode);\r\n ClearInfoMessages(passwordField.parentNode);\r\n\r\n const hasError = !isLongEnough || !hasLowerAndUpperCase || !hasNumber;\r\n if (hasError) {\r\n passwordField.classList.add('error');\r\n\r\n messageContainer.appendChild(\r\n CreatePasswordValidationMessageHTML(!isLongEnough, ErrorMessages[SignupErrorCode.PasswordTooShort]),\r\n );\r\n messageContainer.appendChild(\r\n CreatePasswordValidationMessageHTML(\r\n !hasLowerAndUpperCase,\r\n ErrorMessages[SignupErrorCode.PasswordMissingUpperAndLowerCase],\r\n ),\r\n );\r\n messageContainer.appendChild(\r\n CreatePasswordValidationMessageHTML(!hasNumber, ErrorMessages[SignupErrorCode.PasswordMissingNumber]),\r\n );\r\n }\r\n };\r\n\r\n const doSubscriptionPlanvalidation = () => {\r\n const trialPlanCollection = document.querySelectorAll('input[name=\"subscription-plan\"]');\r\n const trialPlans = trialPlanCollection ? Array.from(trialPlanCollection) : [];\r\n\r\n const planList = trialPlans[0].closest('.plan-list');\r\n const subscriptionPlanField = planList.parentNode;\r\n\r\n ClearErrorMessages(subscriptionPlanField);\r\n planList.classList.remove('error');\r\n\r\n const hasPlan = trialPlans.some((plan) => plan.checked == true);\r\n if (!hasPlan) {\r\n planList.classList.add('error');\r\n subscriptionPlanField.appendChild(CreateErrorMessageHTML(ErrorMessages[ErrorCode.InvalidTrialProfile]));\r\n }\r\n };\r\n\r\n const doAcceptTermsValidation = () => {\r\n const acceptTerms = document.querySelector('input[name=\"AcceptTerms\"]');\r\n const acceptTermsField = acceptTerms.closest('.signup-form-field');\r\n\r\n ClearErrorMessages(acceptTermsField);\r\n acceptTerms.labels[0]?.classList.remove('error');\r\n\r\n if (!acceptTerms.checked) {\r\n acceptTermsField.classList.add('error');\r\n acceptTerms.labels[0]?.classList.add('error');\r\n acceptTermsField.appendChild(CreateErrorMessageHTML(ErrorMessages[ErrorCode.AcceptTerms]));\r\n }\r\n };\r\n\r\n const doAll = () => {\r\n doAllRequiredFieldsValidation();\r\n doCompanyNameValidation();\r\n doEmailValidation();\r\n doPasswordValidation();\r\n doSubscriptionPlanvalidation();\r\n doAcceptTermsValidation();\r\n };\r\n\r\n return {\r\n CheckRequiredField: doRequiredFieldValidation,\r\n CheckAllRequiredFields: doAllRequiredFieldsValidation,\r\n CheckCompanyName: doCompanyNameValidation,\r\n CheckEmail: doEmailValidation,\r\n CheckPassword: doPasswordValidation,\r\n CheckSubscriptionPlan: doSubscriptionPlanvalidation,\r\n CheckAcceptTerms: doAcceptTermsValidation,\r\n CheckAll: doAll,\r\n };\r\n})();\r\n\r\nexport default Validator;\r\n","// @ts-nocheck\r\nimport { MFASettingsCaller } from '../Codes';\r\nimport RestService from './Services/RestService';\r\nimport { SignupErrorCode } from './sign-up-errors';\r\nimport {\r\n ErrorType,\r\n ErrorMessages,\r\n GetErrorTypeByCode,\r\n ClearErrorMessages,\r\n ContainerHasNoError,\r\n CreateErrorMessageHTML,\r\n FocusOnFirstInputWithError,\r\n} from './sign-up-errors';\r\nimport Validator from './sign-up-validator';\r\n\r\n(function () {\r\n const signUpForm = document.getElementById('SignupForm');\r\n const loadingSpinner = document.getElementById('LoadingSpinner');\r\n const signupButton = document.getElementById('SignupButton');\r\n let isFirstSubmit = true;\r\n let isFormSubmitting = false;\r\n\r\n const addInputListenerToAllRequiredFields = () => {\r\n const requiredFields = Array.from(signUpForm.querySelectorAll('[required]'));\r\n requiredFields.forEach((field) => {\r\n field.addEventListener('input', function () {\r\n Validator.CheckRequiredField(field);\r\n });\r\n });\r\n };\r\n\r\n const handleError = (errorCodes: string[]) => {\r\n const errorContainer = document.getElementById('GeneralError');\r\n ClearErrorMessages(errorContainer);\r\n\r\n if (errorCodes) {\r\n errorCodes.forEach((errorCode) => {\r\n const errorType = GetErrorTypeByCode(errorCode);\r\n const message = ErrorMessages[errorCode] || ErrorMessages[SignupErrorCode.GeneralError];\r\n\r\n if (errorType && errorType === ErrorType.Email) {\r\n const emailAddress = document.querySelector('input[name=Email]');\r\n emailAddress.closest('.signup-form-field').appendChild(message && CreateErrorMessageHTML(message));\r\n } else {\r\n //Treat all others as general error\r\n errorContainer.appendChild(message && CreateErrorMessageHTML(message));\r\n errorContainer.classList.add('show');\r\n errorContainer.focus();\r\n }\r\n });\r\n } else {\r\n const message = ErrorMessages[SignupErrorCode.GeneralError];\r\n errorContainer.appendChild(message && CreateErrorMessageHTML(message));\r\n errorContainer.classList.add('show');\r\n errorContainer.focus();\r\n }\r\n FocusOnFirstInputWithError();\r\n };\r\n\r\n const hideGeneralError = () => {\r\n const errorContainer = document.getElementById('GeneralError');\r\n errorContainer.classList.remove('show');\r\n };\r\n\r\n const showLoadingSpinner = () => {\r\n signupButton.classList.add('submitted');\r\n loadingSpinner.classList.remove('hide');\r\n loadingSpinner.classList.add('show');\r\n };\r\n\r\n const hideLoadingSpinner = () => {\r\n signupButton.classList.remove('submitted');\r\n loadingSpinner.classList.remove('show');\r\n loadingSpinner.classList.add('hide');\r\n };\r\n\r\n const trimWhiteSpaceAndUpdateFields = () => {\r\n const firstNameField = document.querySelector('input[name=FirstName]');\r\n const lastNameField = document.querySelector('input[name=LastName]');\r\n const practiceNameField = document.querySelector('input[name=PracticeName]');\r\n const mobilePhoneField = document.querySelector('input[name=ContactNumber]');\r\n const emailAddressField = document.querySelector('input[name=Email]');\r\n\r\n firstNameField.value = firstNameField.value.trim();\r\n lastNameField.value = lastNameField.value.trim();\r\n practiceNameField.value = practiceNameField.value.trim();\r\n mobilePhoneField.value = mobilePhoneField.value.trim();\r\n\r\n // Querying the value property for email input already returns trimmed string. The display does not get updated if value is assigned to the same value.\r\n // As a workaround, setAttribute() is called here to change the displayed value.\r\n emailAddressField.value = emailAddressField.value.trim();\r\n emailAddressField.setAttribute('value', emailAddressField.value.trim());\r\n };\r\n\r\n const signup = () => {\r\n const firstName = document.querySelector('input[name=FirstName]').value;\r\n const lastName = document.querySelector('input[name=LastName]').value;\r\n const practiceName = document.querySelector('input[name=PracticeName]').value;\r\n const mobilePhone = document.querySelector('input[name=ContactNumber]').value;\r\n const emailAddress = document.querySelector('input[name=Email]').value;\r\n const password = document.querySelector('input[name=Password]').value;\r\n const country = document.querySelector('select[name=Country]').value;\r\n const acceptTerms = document.querySelector('input[name=AcceptTerms]').checked;\r\n const trialProfile = document.querySelector('input[name=\"subscription-plan\"]:checked').id;\r\n const planCode = document.getElementById('planCode').value;\r\n const __RequestVerificationToken = document.querySelector('input[name=\"__RequestVerificationToken\"]').value;\r\n\r\n const postData = {\r\n firstName: firstName,\r\n lastName: lastName,\r\n practiceName: practiceName,\r\n mobilePhone: mobilePhone,\r\n emailAddress: emailAddress,\r\n password: password,\r\n countryCode: country,\r\n acceptTerms: acceptTerms,\r\n trialProfile: trialProfile,\r\n planCode: planCode,\r\n __RequestVerificationToken: __RequestVerificationToken,\r\n };\r\n\r\n RestService.Signup(\r\n postData,\r\n (response) => {\r\n response.Success\r\n ? window.location.assign(`/member/MFASettings?caller=${MFASettingsCaller.SignUp}`)\r\n : handleError(response.ErrorMessages);\r\n\r\n isFormSubmitting = false;\r\n response.Success ? setTimeout(hideLoadingSpinner, 2000) : hideLoadingSpinner();\r\n },\r\n (error) => {\r\n handleError([SignupErrorCode.GeneralError]);\r\n\r\n isFormSubmitting = false;\r\n hideLoadingSpinner();\r\n },\r\n );\r\n };\r\n\r\n const validate = () => {\r\n hideGeneralError();\r\n Validator.CheckAll();\r\n\r\n const isValid = ContainerHasNoError(signUpForm) || FocusOnFirstInputWithError();\r\n return isValid;\r\n };\r\n\r\n const addValidationOnInputEvents = () => {\r\n addInputListenerToAllRequiredFields();\r\n\r\n const company = document.querySelector('input[name=PracticeName]');\r\n company.addEventListener('input', function () {\r\n Validator.CheckCompanyName();\r\n });\r\n\r\n const email = signUpForm.querySelector('input[name=Email]');\r\n email.addEventListener('input', function () {\r\n Validator.CheckEmail();\r\n });\r\n\r\n const password = signUpForm.querySelector('input[name=Password]');\r\n password.addEventListener('input', function () {\r\n Validator.CheckPassword();\r\n });\r\n\r\n const acceptTerms = signUpForm.querySelector('input[name=\"AcceptTerms\"]');\r\n acceptTerms.addEventListener('click', function () {\r\n Validator.CheckAcceptTerms();\r\n });\r\n };\r\n\r\n const preSelectTrialPlan = () => {\r\n const trialProfile = document.getElementById('TrialPlan').value;\r\n const trialPlanCollection = signUpForm.elements['subscription-plan'];\r\n const trialPlans = trialPlanCollection ? Array.from(trialPlanCollection) : [];\r\n\r\n const plan = trialPlans.find((plan) => plan.id === trialProfile);\r\n\r\n if (plan) {\r\n plan.closest('.signup-form-field').classList.add('hidden');\r\n plan.checked = true;\r\n }\r\n };\r\n\r\n signUpForm.addEventListener('submit', function (evt) {\r\n evt.preventDefault();\r\n\r\n trimWhiteSpaceAndUpdateFields();\r\n\r\n if (isFirstSubmit) {\r\n addValidationOnInputEvents();\r\n isFirstSubmit = false;\r\n }\r\n\r\n if (isFormSubmitting) return true;\r\n\r\n if (validate()) {\r\n isFormSubmitting = true;\r\n showLoadingSpinner();\r\n signup();\r\n }\r\n });\r\n\r\n preSelectTrialPlan();\r\n})();\r\n","import * as React from 'react';\r\n\r\nimport { Xmark } from 'iconoir-react';\r\nimport styled from 'styled-components';\r\n\r\nimport { CircledTick, Exclamation, Info } from '../../packages/icons';\r\n\r\nexport type Severity = 'error' | 'warning' | 'success' | 'info' | 'none';\r\n\r\nexport type Variant = 'outlined' | 'shadowed';\r\n\r\nexport interface AlertProps {\r\n variant: Variant;\r\n children?: React.ReactNode;\r\n dataId?: string;\r\n severity?: Severity;\r\n fadeIn?: boolean;\r\n width?: string;\r\n maxWidth?: string;\r\n /** Can be used to trigger the exit animation manually, by changing from true to false. */\r\n isVisible?: boolean;\r\n /** Function called when the dismiss button is clicked. If not provided, the dismiss button will not be rendered */\r\n onDismiss?: () => void;\r\n}\r\n\r\nconst colors = new Map([\r\n ['error', '#EE7168'],\r\n ['warning', '#FFAC5B'],\r\n ['success', '#4DC082'],\r\n ['info', '#00B1FF'],\r\n]);\r\n\r\ninterface AlertContainerProps {\r\n accentColor?: string;\r\n variant: Variant;\r\n isHidden: boolean;\r\n isDismissable: boolean;\r\n width?: string;\r\n maxWidth?: string;\r\n}\r\n\r\nconst AlertContainer = styled.div`\r\n position: relative;\r\n display: flex;\r\n column-gap: 10px;\r\n box-sizing: border-box;\r\n height: fit-content;\r\n min-width: 100px;\r\n width: ${(props) => props.width ?? 'fit-content'};\r\n max-width: ${(props) => (props.maxWidth ? `min(${props.maxWidth}, 100%)` : '100%')};\r\n font-weight: 600;\r\n font-size: 13px;\r\n line-height: 1.4;\r\n color: #1a1c25;\r\n padding-top: 11px;\r\n padding-bottom: 11px;\r\n padding-left: ${(props) => (props.accentColor ? '14px' : '12px')};\r\n padding-right: ${(props) => (props.isDismissable ? '10px' : '12px')};\r\n background-color: #fff;\r\n opacity: ${(props) => (props.isHidden ? 0 : 1)};\r\n transition: opacity 300ms ease-in-out;\r\n border-radius: 5px;\r\n border: ${(props) => (props.variant === 'outlined' ? `1px solid ${props.accentColor ?? '#CDD3DE'}` : 'none')};\r\n\r\n ${(props) =>\r\n props.variant === 'shadowed' &&\r\n `\r\n box-shadow: 0px 2px 25px rgba(0, 0, 0, 0.08), 0px 1.4px 10.4px rgba(0, 0, 0, 0.055),\r\n 0px 0.9px 5.6px rgba(0, 0, 0, 0.042), 0px 0.6px 3.1px rgba(0, 0, 0, 0.033), 0px 0.3px 1.7px rgba(0, 0, 0, 0.024),\r\n 0px 0.1px 0.7px rgba(0, 0, 0, 0.014);\r\n `}\r\n\r\n ${(props) =>\r\n props.accentColor &&\r\n `\r\n &:before {\r\n content: '';\r\n width: 4px;\r\n background: ${props.accentColor};\r\n position: absolute;\r\n left: 0px;\r\n top: 0;\r\n bottom: 0px;\r\n border-radius: 5px 0 0 5px;\r\n }\r\n `}\r\n`;\r\n\r\nconst IconContainer = styled.div`\r\n flex-shrink: 0;\r\n margin-top: 2px;\r\n`;\r\n\r\nconst ContentContainer = styled.div`\r\n flex-grow: 1;\r\n overflow-wrap: anywhere;\r\n display: flex;\r\n align-items: center;\r\n min-height: 20px;\r\n`;\r\n\r\nconst DismissButton = styled.button`\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-shrink: 0;\r\n padding: 3px;\r\n height: fit-content;\r\n border: none;\r\n border-radius: 50%;\r\n background-color: transparent;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n background-color: #f3f4f7;\r\n }\r\n`;\r\n\r\nexport const Alert: React.FC> = ({\r\n variant,\r\n children,\r\n dataId = 'alert',\r\n severity = 'none',\r\n fadeIn,\r\n width,\r\n maxWidth,\r\n isVisible = true,\r\n onDismiss,\r\n ...props\r\n}) => {\r\n const [isFirstRender, setIsFirstRender] = React.useState(true);\r\n const [isClosing, setIsClosing] = React.useState(false);\r\n\r\n const accentColor = colors.get(severity);\r\n\r\n const handleDismiss = () => {\r\n setIsClosing(true);\r\n onDismiss && onDismiss();\r\n };\r\n\r\n React.useEffect(() => {\r\n setIsFirstRender(false);\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n if (!isVisible) {\r\n setIsClosing(true);\r\n }\r\n\r\n if (isVisible) {\r\n setIsClosing(false);\r\n }\r\n }, [isVisible]);\r\n\r\n return (\r\n \r\n {severity !== 'none' && (\r\n \r\n {severity === 'error' && }\r\n {severity === 'warning' && }\r\n {severity === 'success' && }\r\n {severity === 'info' && }\r\n \r\n )}\r\n\r\n {children}\r\n {onDismiss && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nAlert.displayName = 'Alert';\r\n","import { keyframes } from 'styled-components';\r\nimport { transparentize } from 'polished';\r\n\r\nexport const COLOR = {\r\n // primary colours\r\n PRIMARY: {\r\n RED: '#e63327',\r\n GREEN: '#0dd32c',\r\n BLUE: '#0000ff',\r\n YELLOW: '#ffee00',\r\n BLACK: '#000',\r\n WHITE: '#fff',\r\n GREY: '#555',\r\n HOT_PINK: '#ff00be',\r\n HOT_PURPLE: '#CB35FC',\r\n },\r\n\r\n // main colours\r\n MAIN: {\r\n LIGHT_GREY: '#f7f9fb',\r\n MEDIUM_GREY: '#e4e8ed',\r\n DARK_GREY: '#51688d',\r\n DARK_BLUE: '#0b2a51',\r\n\r\n PRIMARY: '#1a2952',\r\n SECONDARY: '#00B1FF',\r\n ICON_BACKGROUND: '#F5F6F7',\r\n\r\n LABEL_TEXT: '#2A3F5E',\r\n FORM_FIELD: '#EDEDED',\r\n FORM_FIELD_DARK: 'rgb(130, 146, 173)',\r\n\r\n BUTTON_GROUP_BG: '#f8f9fa',\r\n BUTTON_GROUP_BORDER: '#e8e8e8',\r\n },\r\n\r\n // brand colours\r\n BRAND: {\r\n REPORTING: '#1ba3e7',\r\n FORECASTING: '#39b873',\r\n DASHBOARDS: '#e8ab36',\r\n MULTI: '#b65bd6',\r\n },\r\n\r\n // modal\r\n MODAL: {\r\n MODAL_PANEL_ACCENT: '#F6F7F9',\r\n MODAL_OVERLAY: transparentize('0.33', '#1A2952'),\r\n },\r\n\r\n // Dropdown\r\n DROPDOWN: {\r\n DROPDOWN_BORDER: '#D9DEE6',\r\n DROPDOWN_OPTION_HOVER: '#E1E5EC',\r\n DROPDOWN_OPTION_SELECTED: '#5897fb',\r\n DROPDOWN_OPTION_TEXT: '#04255B',\r\n DROPDOWN_DISABLED_OPTION_TEXT: '#CDD3DE',\r\n DROPDOWN_ARROW: '#d4d4d4',\r\n DROPDOWN_ARROW_DARK: '#647798',\r\n },\r\n\r\n // DATAGRID\r\n DATAGRID: {\r\n DATAGRID_TITLE_BG: '#F3F3F3',\r\n DATAGRID_HEADER_BG: '#E0EDF6',\r\n DATAGRID_TOTAL_BG: '#F6F9FB',\r\n DATAGRID_BUDGET_BG: '#FFF7DA',\r\n DATAGRID_DIVIDER_LINE: '#BABABA',\r\n DATAGRID_TEXT: '#2A3F5E',\r\n },\r\n\r\n LEGACY: {\r\n DATAGRID_BORDER: '#C7C7C7',\r\n DATAGRID_TH_BG: '#E0EDF6',\r\n DATAGRID_ARCHIVED_BG: '#FCF0F2',\r\n },\r\n};\r\n\r\n// fonts\r\nexport enum FONT_SIZE {\r\n XXX_LARGE = '48px',\r\n XX_LARGE = '36px',\r\n X_LARGE = '22px',\r\n LARGE = '18px',\r\n MEDIUM = '16px',\r\n SMALL = '14px',\r\n X_SMALL = '12px',\r\n XX_SMALL = '8px',\r\n}\r\n\r\nexport const SPACING_SCALE = 8;\r\n\r\nexport enum SPACING {\r\n BUTTON_DEFAULT = '3px 12px',\r\n XXX_LARGE = '58px',\r\n XX_LARGE = '28px',\r\n X_LARGE = '22px',\r\n LARGE = '18px',\r\n MEDIUM = '12px',\r\n SMALL = '6px',\r\n X_SMALL = '4px',\r\n XX_SMALL = '2px',\r\n}\r\n\r\nexport const PROXIMA_NOVA = '\"Proxima Nova\", Arial, sans-serif';\r\nexport const OPEN_SANS = 'open-sans, sans-serif';\r\n\r\nexport const FONT_STACK = `${OPEN_SANS}`;\r\n\r\nexport const FONT = {\r\n PROXIMA_NOVA,\r\n OPEN_SANS,\r\n};\r\n\r\n/**\r\n * Note: line-height is a very distinct concept from the font-size and won't map 1-to-1 with font-size.\r\n * It should also almost always be specified in unitless values.\r\n */\r\nexport enum LINE_HEIGHT {\r\n /**\r\n * line-height: 1.2; is a good standard line-height, it works well for inline text, buttons etc, should be expanded for larger sections of text\r\n */\r\n MEDIUM = 1.2,\r\n /**\r\n * line-height 1.4 lets the text breathe a bit more, which is good for paragraph text\r\n */\r\n LARGE = 1.4,\r\n}\r\n\r\n/**\r\n * Note: generally the margin-bottom of a paragraph should be 1em so it adjusts 1-to-1 with the font-size\r\n */\r\nexport enum TEXT_RELATIVE_MARGIN {\r\n XX_SMALL = '0.4em',\r\n X_SMALL = '0.6em',\r\n SMALL = '0.8em',\r\n MEDIUM = '1em',\r\n LARGE = '1.2em',\r\n X_LARGE = '1.4em',\r\n XX_LARGE = '1.6em',\r\n}\r\n\r\nexport const FONT_SET = {\r\n XX_LARGE: `font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.XX_LARGE};\r\n line-height: ${LINE_HEIGHT.MEDIUM};\r\n `,\r\n X_LARGE: `font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.X_LARGE};\r\n line-height: ${LINE_HEIGHT.MEDIUM};\r\n `,\r\n LARGE: `font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.LARGE};\r\n line-height: ${LINE_HEIGHT.MEDIUM};\r\n `,\r\n MEDIUM: `font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.MEDIUM};\r\n line-height: ${LINE_HEIGHT.MEDIUM};\r\n `,\r\n SMALL: `font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${LINE_HEIGHT.MEDIUM};\r\n `,\r\n X_SMALL: `font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n line-height: ${LINE_HEIGHT.MEDIUM};\r\n `,\r\n XX_SMALL: `font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.XX_SMALL};\r\n line-height: ${LINE_HEIGHT.MEDIUM};\r\n `,\r\n};\r\n\r\nexport const PARAGRAPH = {\r\n DEFAULT: `color: ${COLOR.MAIN.PRIMARY};\r\n font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.MEDIUM};\r\n line-height: ${LINE_HEIGHT.LARGE};\r\n margin-bottom: ${TEXT_RELATIVE_MARGIN.MEDIUM};\r\n`,\r\n INDENT: `color: ${COLOR.MAIN.FORM_FIELD_DARK};\r\n font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.MEDIUM};\r\n line-height: ${LINE_HEIGHT.LARGE};\r\n margin-bottom: ${TEXT_RELATIVE_MARGIN.MEDIUM};\r\n border-left: ${SPACING.MEDIUM} solid ${COLOR.MAIN.FORM_FIELD_DARK};\r\n padding-left: ${SPACING.MEDIUM};\r\n`,\r\n};\r\n\r\nexport const HEADER = {\r\n H1: `color: ${COLOR.MAIN.PRIMARY};\r\n font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.X_LARGE};\r\n font-weight: 800;\r\n line-height: ${LINE_HEIGHT.LARGE};\r\n padding-bottom: ${SPACING.XX_LARGE};\r\n border-bottom: 1px solid ${COLOR.MAIN.PRIMARY};\r\n margin-bottom: ${TEXT_RELATIVE_MARGIN.MEDIUM};\r\n `,\r\n H2: `color: ${COLOR.MAIN.DARK_BLUE};\r\n font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.LARGE};\r\n font-weight: 800;\r\n line-height: ${LINE_HEIGHT.LARGE};\r\n margin-bottom: ${TEXT_RELATIVE_MARGIN.MEDIUM};\r\n `,\r\n H3: `color: ${COLOR.MAIN.DARK_GREY};\r\n font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.MEDIUM};\r\n font-weight: 800;\r\n line-height: ${LINE_HEIGHT.LARGE};\r\n margin-bottom: ${TEXT_RELATIVE_MARGIN.MEDIUM};\r\n `,\r\n H4: `color: ${COLOR.MAIN.LABEL_TEXT};\r\n font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n line-height: ${LINE_HEIGHT.LARGE};\r\n margin-bottom: ${TEXT_RELATIVE_MARGIN.MEDIUM};\r\n `,\r\n H5: `color: ${COLOR.MAIN.PRIMARY};\r\n font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n font-weight: 400;\r\n line-height: ${LINE_HEIGHT.LARGE};\r\n margin-bottom: ${TEXT_RELATIVE_MARGIN.MEDIUM};\r\n `,\r\n H6: `color: ${COLOR.MAIN.PRIMARY};\r\n font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 800;\r\n text-transform: uppercase;\r\n line-height: ${LINE_HEIGHT.LARGE};\r\n margin-bottom: ${TEXT_RELATIVE_MARGIN.MEDIUM};\r\n `,\r\n};\r\n\r\nexport const BREAKPOINT = {\r\n MOBILE: '320px',\r\n TABLET: '641px',\r\n DESKTOP: '769px',\r\n};\r\n\r\nexport const SPEED = {\r\n TRANSITION: '300ms',\r\n ROTATE: '600ms',\r\n};\r\n\r\nexport const RADIUS = {\r\n FORM_FIELD: '3px',\r\n DEFAULT: '3px',\r\n};\r\n\r\nexport const SHADOW = {\r\n DEFAULT: '0 1px 2px 0 rgb(0 0 0 / 8%)',\r\n};\r\n\r\nexport const ANIMATION = {\r\n FADE_IN: keyframes`\r\n 0% {\r\n opacity: 0;\r\n }\r\n 100% {\r\n opacity: 1;\r\n }\r\n `,\r\n FADE_OUT: keyframes`\r\n 0% {\r\n opacity: 0;\r\n }\r\n 100% {\r\n opacity: 1;\r\n }\r\n `,\r\n SCALE_IN: keyframes`\r\n 0% {\r\n transform: scale(.1);\r\n opacity: 0;\r\n }\r\n 100% {\r\n transform: scale(1);\r\n opacity: 1;\r\n }\r\n `,\r\n ROTATE_CLOCKWISE: keyframes`\r\n 0% {\r\n transform: rotate(0deg);\r\n }\r\n 100% {\r\n transform: rotate(360deg);\r\n }\r\n `,\r\n};\r\n\r\nexport const BUTTON_MIN_WIDTH = {\r\n SMALL: '150px',\r\n};\r\n","import { lighten } from 'polished';\r\n\r\nimport { COLOR } from './constants';\r\n\r\ninterface ThemeSet {\r\n REPORTING: Theme;\r\n FORECASTING: Theme;\r\n DASHBOARDS: Theme;\r\n MULTI: Theme;\r\n GENERIC: Theme;\r\n GENERICBLUE: Theme;\r\n}\r\n\r\nexport interface Theme {\r\n main: string;\r\n mainBorder: string;\r\n mainText: string;\r\n spinnerColor: 'black' | 'white';\r\n hover?: { main?: string; mainBorder?: string; mainText?: string };\r\n}\r\n\r\nconst THEME: ThemeSet = {\r\n REPORTING: {\r\n main: COLOR.BRAND.REPORTING,\r\n mainBorder: COLOR.BRAND.REPORTING,\r\n mainText: COLOR.PRIMARY.WHITE,\r\n spinnerColor: 'white',\r\n hover: {\r\n main: lighten(0.1, COLOR.BRAND.REPORTING),\r\n mainBorder: lighten(0.1, COLOR.BRAND.REPORTING),\r\n mainText: COLOR.PRIMARY.WHITE,\r\n },\r\n },\r\n FORECASTING: {\r\n main: COLOR.BRAND.FORECASTING,\r\n mainBorder: COLOR.BRAND.FORECASTING,\r\n mainText: COLOR.PRIMARY.WHITE,\r\n spinnerColor: 'white',\r\n hover: {\r\n main: lighten(0.1, COLOR.BRAND.FORECASTING),\r\n mainBorder: lighten(0.1, COLOR.BRAND.FORECASTING),\r\n mainText: COLOR.PRIMARY.WHITE,\r\n },\r\n },\r\n DASHBOARDS: {\r\n main: COLOR.BRAND.DASHBOARDS,\r\n mainBorder: COLOR.BRAND.DASHBOARDS,\r\n mainText: COLOR.PRIMARY.WHITE,\r\n spinnerColor: 'white',\r\n hover: {\r\n main: lighten(0.1, COLOR.BRAND.DASHBOARDS),\r\n mainBorder: lighten(0.1, COLOR.BRAND.DASHBOARDS),\r\n mainText: COLOR.PRIMARY.WHITE,\r\n },\r\n },\r\n MULTI: {\r\n main: COLOR.BRAND.MULTI,\r\n mainBorder: COLOR.BRAND.MULTI,\r\n mainText: COLOR.PRIMARY.WHITE,\r\n spinnerColor: 'white',\r\n hover: {\r\n main: lighten(0.1, COLOR.BRAND.MULTI),\r\n mainBorder: lighten(0.1, COLOR.BRAND.MULTI),\r\n mainText: COLOR.PRIMARY.WHITE,\r\n },\r\n },\r\n GENERIC: {\r\n main: COLOR.PRIMARY.WHITE,\r\n mainBorder: COLOR.MAIN.DARK_GREY,\r\n mainText: COLOR.MAIN.DARK_GREY,\r\n spinnerColor: 'black',\r\n hover: {\r\n main: COLOR.MAIN.DARK_GREY,\r\n mainBorder: COLOR.MAIN.DARK_GREY,\r\n mainText: COLOR.PRIMARY.WHITE,\r\n },\r\n },\r\n GENERICBLUE: {\r\n main: COLOR.PRIMARY.WHITE,\r\n mainBorder: COLOR.MAIN.SECONDARY,\r\n mainText: COLOR.MAIN.SECONDARY,\r\n spinnerColor: 'white',\r\n hover: {\r\n main: COLOR.MAIN.SECONDARY,\r\n mainBorder: COLOR.MAIN.SECONDARY,\r\n mainText: COLOR.PRIMARY.WHITE,\r\n },\r\n },\r\n};\r\n\r\nexport default THEME;\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { ANIMATION, SPACING, SPEED } from '../../packages/constants';\r\nimport blackSpinner from './images/spinner-black';\r\nimport whiteSpinner from './images/spinner-white';\r\n\r\nexport interface LoadingSpinnerProps {\r\n children?: React.ReactNode;\r\n onClick?: (e: any) => void;\r\n color?: 'black' | 'white';\r\n justify?: 'flex-start' | 'center' | 'flex-end' | 'space-between' | undefined;\r\n iconWidth?: string;\r\n iconHeight?: string;\r\n className?: string;\r\n}\r\n\r\nexport interface SpinnerIconProps {\r\n width?: string;\r\n height?: string;\r\n}\r\n\r\nconst StyledLoadingSpinner = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: ${(props: LoadingSpinnerProps): string => (props.justify ? props.justify : 'space-between')};\r\n`;\r\n\r\nexport const Icon = styled.img`\r\n width: ${(props) => props.width};\r\n height: ${(props) => props.height};\r\n margin: 0 0 0 ${SPACING.SMALL};\r\n display: inline-block;\r\n animation: ${ANIMATION.ROTATE_CLOCKWISE} ${SPEED.ROTATE} linear infinite;\r\n`;\r\n\r\nexport const LoadingSpinner = ({\r\n children,\r\n color = 'white',\r\n iconWidth = '20px',\r\n iconHeight = '20px',\r\n ...props\r\n}: LoadingSpinnerProps) => (\r\n \r\n {children}\r\n \r\n \r\n);\r\n","export default `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZQAAAGUCAYAAAASxdSgAABZgElEQVR42uyd/29fVRnHb4hfMGYqghjjDxq/BGMMiRpNRBN1moAYl/Oc24+4AVon9jzn0zQMhC3RxFVAltnznFs2hM0NJgIbW5UOmKJuE4cIKG6Kivw7fp77aXc+7d16bU+P937a5528flnWtF2zvfY873PuzSSStZjObf4tgA9emZv7Pqys+yTg1EZlCwXWf0sbNwFd+gEY9xNAP63R/RSQfqatexiQHgP0RwHpyR7PgKFnAd1psO60QvdbsO6EsjSr0c0A0mGw9Ii2/iBY/6BG2gtmisD4H+ox2gbWf1sh5bktvqy77lOb7O6rNt86/W7+2jKJRCKRtCOj24p35GPuIyM49QVt6Ia8628F9Ls00iFA9xuF7uQCjDulDAWQTrEoKhj6w2KUcc8pHMQ/B0h/rGDcmQCdAaQzCun5Csb9SfPn6guJwPo7laGbRsbpSx3jPrrFPnBZJpFIJJLVy9jY/jfmtviA6v1Dq21xizLubkA6oKx7Whn6HZS435cgnYcF0nahQAkN8gLgIDwR0eMKnQNL42D8dZ2u/xD/mWQSiUQiuXg6E3vepdB/Okf/dTC0A7q0TyH9mtdMCinQk8g8MEcQSo1UhkgojEL3Z4W0EP44XssZ9yON7uaRLl3Dq71MIpFI1mNGRycvze301YD+GxqLu3JbHOOuYgGWnmWZpBIKA8gkEgrWCYXqhYJ0IaG8CPMg43vQS+X3bKjQ3WJUjxefGJ08dGkmkUgka7Agfyd03eeULca4BAfjTqhez8EA+pKVCGXh2qtNQqHlCwXjhLIYzb+33yfdBlhs3DzmrsgkEolk2HLjxJ63gfWfB1vcDsY/rAyvrgIsklqhmHUolPp114tMkAlTlYky7uWF+D6WZhUWO3N013Z27H97JpFIJG3L5OTkJR07fZW2fgug8/3jtu4EGH+CZbK0UFydUJg1JZSI/iRCKPQXhX2gh7b+5f6JOPou4NTH+GeYSSQSSRNRvWO7vEqBbnEHH38NEllAEAqDgYpQmCihuCihBPzppEJhmTQglCCTQdxf59HoT2rr79ZjU1/lFWUmkUgkKQPj916ed/3X+EKgQveMQiqBQEUqNVPKinoUEcrS/UlFJrVCYahEGXqFAaSH+NAEn77LJBKJZNUuEBq6ni8NAtJTyrin52mLUJj1IhRIIhSqCEVhH7D86+4AWOrA+P2XZxKJRLLsUr3rrwOkewD98YpIhlYoLqlQlnEHJfLIcEx/Uj+dlOAg7m8KqYd/RSPty5HyLXaX3OaXSCQXLdbfwJfkNNJObdwsSyRwYaFU1l61PUpNMR970gtpAcMvlPT9Sb1QWCYMlQBj6Gz5MYbu5+eUye19iURSpoP+vQppVBt6BJCO93FP9aEB0k8p8cX8cAql6UK+uu66sFBgQCiLOKUtbdPj7n2ZRCJZX+lMHntTeU8Ei3uUoeMMMBhoXihh7ZVKKCqxUJq/g+JL6tZd9UKhJYXCKHTnFNI5Zekgd24TE3venEkkkrUb/h+ktu4WQPeYMjQbYKEwKxRK/dpLhDJPgkI+SX9SP50EMAhlnv7377bzAy0ziUSydpIjfVxjsROQnlTGzfahQGVKiV97RfQoSY8OD79Q2rbuCjKpYNzfGX5XDPdzmUQiGd5Hv+sufRHQT7NImKpQAk2tvSKK+UaFstInDUef8MJ4oaRad1VlEoAeGv2MtrRJSnyJZEhy8x1TbwVTaG38QTBBJHVSCWuvtvUoEUeHh14o8f1JzLorfjoJQAn9g9HWn8yx2MrH0zOJRNK+AE5dqY3/jkZ6HIz7FRhfUhFKirWX7RHVo8Sf9Gq/UNIfGU7Wn8RPJ0EoDJ7nJbC0g08aZhKJpB0vpgLrEZCOsUgCfo6lhOIaXnvFF/PDL5TYR67E9yfp111VmQTcq3Mft1OPFe/JJBJJM+8YKV+La+kJhfTLkgGhRE4pzfco8Se96oViEgkFlyGUhgr59NNJvVBYJgsw/qy2/vuAU/IGSonk/xF+j4VGGgX0R1gii1m+UIJUIu6khFvzkT1KfDHPMgnUC4VpvVCa70/ip5N6oaB/VRn6Z/l5rb9Tnh0mkSTK1u0PbVCGbuI7JD1mAP0MC6TCBYTSonI+QTGf4Lb8kkLxNUKhNggl9Cep1l1IZ5dVxtfLJAhlDv6a+QY+vyohk0gkq3WrnTpg6FEwboZZSijMcKy9UgnFtVwo8YV8uuPCzU8niwHsiyVHsvKefIkkIhqLz/KlsLnCfWaQlFNK9NorbTG/zoXie7S4P4mfTgKlTNy/AnRqxBZfySQSyf+eGyb2fJDfnsciCQSptH5KaaCYhzmaF0qQSTNC8SUJ1l0rkInvETGdVIXSx9Kj/NriTCKRLP1aXd113SCRQKoppb6cD0JhkvcoESe9hlYo8Se84vuT9k8nAUP/LkH3483f239FJpFIFj4mRVmnFLpf9DjKBJEkmFJSlvPoEvco8XdRmhIK1AklvpBPv+7CCKFETidBJgH++vn4PHeNmUSy3pPb6avVGO1liSwm9ZSSfu2Vvphf70Kp6U+i1l3ppxO3oumkKhX3Gv/s5QGUknWbTdt3b9DGd5WhJ5RxR0swED+lxF90TLb2qu9R4oRimhRK7JHh+P4k9bqr+emkKhSFDL2mbXGvHDOWrKuMdO+7BpAOsEwC7mgzU0r82iuiR4kt5uMvNzYolASFfOhPEq27GphO6mXCIJ0H0L+Qj9P1mUSylvPN3s1fjW67Mo4lUqElU0rza69oobi2CmXZJ7ygJEF/ErHuSjmdBJHUCyXIhKFB/gN99snzwSRrLpOTk5fk6K4FdD/vcYSFEqTSzJQSeSeloR4l5uhw+4USWcg3uO6Kv8gYP50EWCYB/n7cjfx3MJNIhj38PySNdBeLZJCaKaXCKk4pCcv5+B4lRiiqzUJJVMinEspwTidBJlXcEYXF+zOJZFgDWGzU3eJQEMkypNLiKWWV3pGyasW8CCWiP2l63RVfxAcuJhPjXgdDr2ukc2Cpk0kkw5RNW3dvAEO3K0OHFdJhYCpCSbD6aqCcb6JHiReKa6lQ6gv5+P4kvoxPP51QYOWrriCTEjqP7vq9W+yuyzKJpO3hR0IonHpAGXeYhcIAMmmmFCbRlJJ+7RVfzMcLxayyUDCBUBrqT5qfTuJXXYtlAjiHpedhvPhMJvkve+fyIlcRhfErRGIUlfjACOrCbFQQVy59gSBZ5dadtCQRMfiYW7eHJgRFFMQM+E6qqifNJJKXITGCuFUERdHVuHDnxvgaNf9I7JN5VGOTnEx/c/rc21MHvn1mJslvvu87pytNPYv3HzZR+Zdb/xnBZAUonEshNcKlyFzNs0AhAavDtQHKKCvDZklgfyIfd+m7Ex4mg0DJrbuwostPEM/Opiv7NPUZehO7qPz7BBMSA5XJcSl47AUU85MIFLw/MQNK7sRdBSZR9Hc57/S2Z2nSaM/OKjxG68BLIBkGCh59NdWl4D2KsQ4AimOAssZXGweBwrzWSACRB4p+3IW7E/EiPspeGSgk+rNMVS7P0qRRui3ZtPQUrz8fQRLVtOhL7CbFOqBHkd/0woGC36DwG14BAQoad6m4E7yI9wNiYfKbWdZUFd6mD2vN0qQZ1+ytjm0trD9IMCEBUBFcI25U7IX3KM0HCl7Iq8RdIQJF8IgRiLpYmJDMgIrSf77n5bm7sjRppGdq2j1QlO7o8tvuDFCY6EvRpRgGKljshfcozQSK9IaXfn+i506QqIt3J8NyC0XbPZqlSSMGEzv3TFH6s6Z050kMVASiLzWXwt2kIOvDeI/SfKAo9SeeBN2e4O5EP+oalvvdWJL/daoKL2Rp0qzn7Oj0NptpP5OX/lOzqggU9egLdylgOc/HXgkofkCyhTwHE1Jt3QkedeEwIdlBhdA6ELZkadKg03op3GZseI9gQlpXqOi7FPnYC+9R0NVhfaBAG15hQag/Acp4RXeyzr0JDxNS6Mt/2Wof2palSTMyTPYfuc+0w5EIk2GgkAT7FDWXgpfz8j3KJANFvj/xJBV3ghTxkr3JlWCSW/8Hid5ZMe3ug1maNKM8zWusP5HbcI4EQgWPvvCCHnApCrEXUMwztyjMB0TyQDEsUPgbFL6Qh/sTIO4CVoXV3YkETKLo6yxm5h7P0qS51ina/qmlY0V3jrQGqMhGX/ouBY+9gB4F2fQaBorTAgpfyENAweMuGXeCF/HaMIkKF4wNu7M0aa42ly5dum5qJjxLEBlWBArQpzDRF1jQ67sUwR4FL+brDhS8kNePu3B3gkddQG/Cw4RUuj9J9Poq/Z+RpUnz/6EPiDOVnzG0Flz5swBUoOhL36UExqUwQIGv5psPFOyokS/kY38yynU8Hnch7kQ/6uJhQuJgYpZVVL7X6W+BZmnSrMzzrx2+qSjDWwQT0shQ4fsUPPrSdyl4OQ/0KM0HClrI43EXf3ui7070oy4eJsb6JVX+i+c6vVuyNGnoL0JRhnciTCJQeKjgJT0afUm6FPnYCy/m8VsU/pEtHCheESgSZbykO0GiLnmYRKAQTFb1l6nCV2Zm/vYszcYderXNWPcBFfAEEQ4qAiW9avQFuBQk9mJ6FKyYH311GAcKwYQ06sowwUQZKIA7AY4YpaKu0lFvIg+TqG/37E+fAbYhp9Xp3Wkqf5hgQhqECh998VDRjr7q7FJEehR9oKzxBgUv5Jn+hIm7gDIecid41IX3JgBMSIMwGdaPRad3T5Zm40wx3b07L30370OEFKEScKgIRF+aLgVfIcZjL7CYbyhQwsKEuROgiJeLuviNLh4mw3ILU1X3/izN5M/utr+Xrt9XYMJARaOkB6Mv3KUA5bxw7BUuKwEFBwpaxuu7E4neBIdJXrpFEv0s0lX9hA/91mAqP59bf4YkABXVPmWcLkUk9uJ7FEGgkGSAwq8M44U8GHexb54A7gQo4oHeRAkmUX5x+fv2SJZmUmESPo4wkYYKf/SoG33h5Twee+E9ChXz2kBhjhpFNryU4i7cneBRF96byMNkVcaGXxJUJjHmKt18Xg6ChIcKAWRYwOaXYvSFuxQ49sJ7FHbTi18d1gUKsOGlF3eB7kQ/6lKASZT1f9P3LMVfE1TAGxvmTOk+yUt35lqgYgSgwvQpQPTVXJfC9ChAMd9MoESYOKg/AeIuBXdSP5jk6wiTFRX0s5g+tD1L09zZ86q7w5TeE0xIAFTAGxW8T9F3KfKx1wjFPLY6XDo5oMQreaFCnl8X5uMusIzH3Yl41MX3JvytCQoTs6yi8j+lleIGHy0W1n8UYYJBRb+klyzoAZfClPNQ7IUX8/JA4a/kGaDI9idjdSfMmjDgTpgVYbyEl4VJFP2CkY4fGzYvvn76ZmO770aIaEEF71OY6EvepUjGXlVfCsV8c4ES+lpDfwLEXYA70Y268BJeDibW/WOs7yt8lz6mpSEzPXv8xsL6WWP9aVKToAJc0bNQ4V0KtkLMl/P4+rDoptcYgCJYyAuU8cwhI+BOgKgL7E30YRIVvm5Nf3hrlqbGMDl+/Pq88m+uwkQfKgIlPRN9CbiU9Svn+dgLLObrBRSpQl4h7gKKeNWoSx8mBBKSHxL9W9q3b/aGLE09H8fK7aEqt+50ThDRgIp8SS8QfUEuBY+9rGN6FKCYrzFQkEIej7vWeVVYoYjHehN9mJDy0v9bWH8sPdJVwynK7q688qcIKHWFClPSi0Vfki6FL+f52Asr5psPFLw/4eOuJriTyYdJBMmgjA1vZGnqM6YKT+SlP0WSggpwTQ/0KUD0Je5S9GMv4BZFDCjMDQpTyOP9CR534e4Ej7pGecp3hPVgXZhE2b5TqcLeLI3+7JwODxvrTxBMoiJUSA2DChJ94QU97lJiOQ/EXkAxDxw3AkCJMMGAwvcneNwl707wqEu+N9GHiR1Q5Rd32e6TWRrdj1TJS3c0gkQaKvznfvElPd6nANGXqkvBYi8eKMwtigJQmKPG4Q0voD8B4i4Fd6IOk1IbJkO6SF93q+w9lKXROFw8tnXpgSx/kuAxkVDBoy9xlyIVe2E9yvCmlzZQsEI+9CUcd2HuhCni1xB1Yb0JcLioBRN3kWAyoJ9b7aPbsjTjmx2d3ubcdg8STEiqUAFKet3oC3cpeDmP9yjA6jDzJkr4HgAKc4MC9CdI3GXxuIs/YsSjLuYj6ZnjRbyE14IJyZAq/03rQNiSpRnPmLZ/xVh3ksRDJZb1w1CJajxUwIIedyl47CVXzDcfKPJxV+hL1J3IR13Nh0lU6eezNGN51+TpFZggUMnHBBW8pPerGjX6wlyKA1wKF3vJ9yg8UJw4UPiVYb4/weOuWrqTDQoTf2WYlO4/9s7uN66jDOMHWiKhgoAAVfmQ+FIKqBIgKIIWVLVwUZWL+systyKgqBGBnTm7cZWUtgGhpgsKhXhn5jhOaJIicYEQSL5DcMcFV4iqqhr+AKReQIFS/oew79rubDg4r/Y8O56d9bzSI1VOldrerX9+nuedOX/blazMt4s8AWHy2IUjsm+v0FbXzaBCShkqeJ/CR1+wS+HLeTj2mvWAIw4UUgCgYBteXH/Cx118GY+4E7yI19vKMCGQeNHf1RmMvlDkmf+Up+p3ispaggkpQwWIvubqUhzgUrDYq1nMxwKKZYDCbHgxhTzTnwBxV0h34mEC9CbYRteCw0TcDCZe17r99VzSz3PuHw5vFcqeEcrDBIaKWiio4H0KHn2FdymadylBinnmtHwEoAD9CRB3we4khagrPkz4voSHiZcjp/LbXu/qW4o885lS1UdXxjAhiYl4sGAbYDhUBAMVgggCFSD6CuZSQsdeKFCY1WEYKMDKMNCfAHFXZHeSPkzw8p0Byd+93I+LPPgINbqnVO4qKWWo4Jtf4aMv3KUgsRf/jBR00ysJoPD9SXNdGHcnXrg7AaKuefYmAWACb3I1QcLDxEsqs1rkAZ8Hr+ylUpmrBwkqeJ9itxWgoMddChp7QcV8AkBB+xP+7AnuTvgiHo+68BKeh4kJCBOLw6Spv3bUhSNFntlnOO5NSm2fJph4uQZYGlABy/pFhkr86ItxKTOW80zs1Xp9uPVZlBhA0QxQ0LiLL+N5dwJEXTBMFLDRlRRM3FgEjb1VavMqvXe7w+GhIs9sI/v1qgeJF+pW4kPF7S9UNAIV3KXw5Tx/WWQcoBgIKLMV8g4ASpgynlkTZor4IFFXEjAB+hIWJrsSlTtb5JnlJHz9SaHtFVKGSoA+Jb5L4WMvvEeJAJQWG15If6K3la47wXuTBGDiQQLDxEsqc1+Rh5/xxWhvk9qeJ5gwUAEiMOCsSnJQsaRILoWPvfAeBV8dxoECrAxz/QnjThig7Ls7idCbRIUJXr7zIGnKviq1e7l7wh0u8rAPy9IEES8WLOGgogJAZeYzKm4ipqQHoi+moIdcCl/O87EX36MIUqOYbwJFjj8HUbnLUtfPlHp0UmpzTCi3Ivv2gbIyn+uo9SNfP3nx/UKPbv9G9ZN30S83a+OLSLvdrVtI9M/0sclN1/ry7V3tPiC+Y+/sKHf36sB+VfSNlH17vKzsKanss1K5X8jx59CikAfiLqiMZ90JU8SDUVd8mKBnTPC+hIeJICn7D/o5VOTZe0TPfHkvmASIwJiyPhZUAvYp++pS8NirTY8ixx8T1eT1/AE9BU/q+kvl2ubHjj0xui2m66Zrg+jJolLXx4W25+h7Lwk0DFACxF2QOwkfdSUCE758xyOuJkg8THalzTeLPM2h3/iEtheEcpcJHJxC9SrAqfrYUAkcffEuxQOFdylY7OWBsvManu7ojQdppbI73DqU0mMYOifNJ2RlHyYAjrXlgYLGXbg7gaIuvDdJCiZiSmjExcPEi77WTlV/tMhzw4rwm6U2TwllLnt5sESOwPizKjhUwD4FXyWel0sRmEvh14e12xC6/pas7Be7vZ++YxnvrKPCVVb1Gr0HmLgrkDuZtYgP35s0N7oAmICn3/evL7GkvUAyrd/Rz9Aiz/ZQhu1BEhAqaj5lffJQieBSgNjr153KPSl0/RX6YXvgllROu8MdZb9GMZnU7g9YGe/G4t2JCOxOcJiYRGCCR1w8TEjmn7LvThR5ioI2FUrtNjxEALAAEVh6UOFLejT6anMlC+9S+DMp9L2hZ0FQHJR/87rRyXeqjU+Jyj6+0x/tcbMw5k74In5/YUKa4RQ8DBN8kwuPuHiQeJiQ6GunJZHioI/su36p7XMrDYgEcitLBhW8T8GjLwIKukJMX3enqnt0Bun69etvKvLcdOh7VPbrz0zcG61E86vCoDvhi3geJobpTYCzJsnBBHclTdlfHXCYmM8TTKbEg6UXv1eJDxW+pA8fffEuhS/n6c/M9+Sg/mx2IphzWe3be6U2RlT2RaaMB9wJGHUBJXxEmLQo3/mIC3cl07JvSGonDuwBRqHc+v8CJYBbCdyrRIIK3qcA0RfmUqS2z9Ebf9KJ5JnriMGld0ttj1N0GNSdhIm64sNEe+1bxIW5khtErw31bgfwAKN5dBoiLcACR2BArwKfVUGgEqZPCe9SSm2f6Y5jmhxp7U8kJgb1PfT/SWNVuLU7sW8owyR2xGUbKpX9F0lqe/HA3dVVavOzUo8aEIniVhYIKvwVLUCfwkRfIVzKzr/zWKnrDxd5IrkWe+fkMGVlX2rhTuAivtmbZJjgrqQJkmnRIdriIAw9yrLU9kcEFC8YLEsPlRYlPRx9IS5l8vdV7tHu6Xzf0KIMXSkjtfsunWlpuJMIURd61iQ+TNxYi+BKmqLXmK4KKpZ9Oto8WCoPEwYsiFvBIzC8rF8sqODRF+9SKvebsu9O0F1YRZ6FnKM9855S2e/TVph3Jy2K+CAlPA4T/vQ7Xr7jrgQHCSdKBoplHjrZLLRzBBSSBwvgVqJHYOGhEr6kx6Mv+jNa+6VSuMiTyGLM+h1CubOiMtcYd8JEXXOGCQmHCb7JFT/iagkSknltrFfoSqtiWUfq+hhBpKkwbiVDZbqkB/oUJvqS2j5Nt/QWedIEy8nRR2Rlf84V8UhvMkMJ3womogVMgL4EiLgCupIdkHjZ12RlN5cTJgPzIXo+/K4AqDBggSMwZrU4YajoifDoy8Pkymr/wr1FnqWYsjIPCe3+yBTxQNSVBkzScyVNkEyLNiuXrzup6sc9UOYPFugwJN6rMGX9IkEFj75Eb/yxylDh/tYiz1INXfMvlD1D3QpfxAeACSkUTHQYmER0JT7e8iBpqnK/Xy6YqPN3C2V2INJUqBgsfASGQ4UUEyqzRl+0oUdus8iz1NOtNj5O7w/OnaQIEyDiCudK8HhrL/2btDQn6LvD4SGhR+cIKA2opOFWgF4FWysu1QwHH7kzKs2SfsZVYvv8qh7dnw8lHrDDkX0jpbZ/4mBCYkr4CDBBy3cg4grpSniQeJh4/WUpEoWyqh8qtb1IIqDgYInvVsRECUAFKuktaQIUuvmXrsop8gCT9nam1HYolGF6k5lK+PgwiR9x4fEWDxIvZZ9IPI/95W2lNmYXKDhY5lragxEYXtbPEyoh+hSh3fN0cWORJ894ZM8+ILT78zyiLjFRAjABIq4Y8RajV5I+aCwGbmUbIk3JBliScStAr5IOVIQyP8xnSvI0oHKqfh+5VhwmJjhM8PI9vivBQeJVKvM63adXpDgPP3X+7UIb5yHCgCVuDBYyAgPWiiNBRZmj3a2tW4o8ef7/dfm3imr0JAGlRQkfByZMX8JEXLgrweMtHCbKvk7fg+7a5ntTvABSlspulr09YBIkBsPdSrQIDIcKf0ULX9JfKWlnPU+egh+6gFBW7gXR7E3iwER77VvEhbsSPt7CQeKlJ1A5l1aJd+bqzhUrdpMEgCW8W8EjsPShQkCpzFkxeDZHXHlmfa7RHZNtQNUeJqQ2MCGIhIIJsA4MuJKQIPGir49et3Q2u/TokWmYxARLBLeSBFSmo6+Odo8Mh9fzExPztBqKR+kWYx91AafgGZgA5TuwEoy7EiTewkHSlKjMehpvrhPucKlsXSqzSQLAAhb34d0K0quEhwq/Tkz/faHsp4s8eeYwcrBxn6jcNWQ9mLl+vgVMoIiLKd5BVwL3JDxImjL/Icnx5yrXNj9YLPpQoeth4sWDBS/ukRhspeVhSLRXwaFiWkFFVOZSfuhVnnlPZ+DuKpV7IQBMkPKdhwnuSoB4KzRIPEz+y97ZhMhRRHG8jCiiRqOIwQT04sUQDxJFggjiF3hwt6smQ74ISA7TVbMbkmAMQQ/GFZNspl71bqJILnoSIUjED0QQ9KBnD36dPCjowYMxH97j1KxJT7azKabfvK7u3feD/yGQJSG7m9/+3+vqklfFzdX/PmsDmdQw7zNescRvK4i9Cu4JsBJSCRx8tBN759YKhqF7EezXVctERpAJYrwVTyR5/mrvnb+/xpdnQcuLJE+zxIJ/vBi/V6GWikrtm+3OqTsFwxCy/WV7j0rdp+VlAmOUCXrxjh9v0exJwiIJ52hdr/a9VRro5SKpqVj0oqDaCn4EVqlUtDvEbwhmqmJi9+xqZeCDCDKJ3Erw4y16kfi4fvr/hvuyNaJuyNQ+V5AIVixeKp3wfqUBbYV4rxKWSku7aX+fv2CYCnmhf6+5/x5DyIRg+R5avJONt+KLxEskhb+Howzsq93JWdXNZvySxwuDRCw6gliI2krVUvF3l/Q/R/xYMBMF/7XnR60EMgnsSyK1Eso9CV4kxWj3S/vw6ZtFXZjs9B5P+jLxkT54sUQcg/VKvRof8WgxrVSMTQTD1IAkdXtHkEmZfQlixEU53oovklCUcTtEXZAdeyhJ7dwg2tZfLPHbCmKvMoJUOiwTpl4kBvYVZYLfl9C3Evx4K5JIwtGDfFcPmXRnH/IiKWa5iIW+rVBIRelsl2CYGuLfJUUgkzitpKki0QtJtD17JVPwjIhNosF4eVwvhXFYVLHANTP2ttKpaK9i+lkkFZW6Lu9MmDrvVKSx744gE9QjwcXFO76V4Mdb8UVSiIGPo9+NkKSQ5am3WBShWAhGYKWk0jLuFX6ai2nC019Suw8RMonWSqT2we9J4oukmMnUboj9ivrMp+5iCY/B8GdXJolHYGGpwOt8zoRp0jkVqd0XV8vEVjLiwrcSWCJNFIkPDCJNdizWQcabEgNHCjIZRS7aNkIs9G0FLxWp3dF25xifgGcahb/sSRr7LVYmBK0EOd6KLxIvinBgcX576fD7t4iqaaXu0YBMRmgtEcSC2a/Qt5URX9ninNS9ewXDNBA19fYDiYbvwzKpvpVI7RNdJJg2EhZJCv8Mx19nEeG2tmxKaucCIkGMw7BPhuHFQt9W8HsVpd3JwQveGKbBSD2/0R+wQ4y4yMdbzRcJLCkSORRl3OeiSvxPw1Jbl6eEWHwQexYqsSgCsQTaCnIE1tsoGGYZsEVnT1U54kLsSQhEgtiPINqIXCLtrntQVEWr6170IinGDVJLseD3K/gxGKqtFKWippwUDLOMkNoeKsokPOKqYryFfgQ44n6kIJFAlIaZCq/7hJmCTAohGIfVUCw0bSU8AlPaHuSzJszyvE4YzlCNuCjGWwQiIRtrhWPP/Z9fKzl+4K+MlR3rBtGFELeW+GKJ31bcKWky2GGO3iUYZhkyMT27Tmr4MTTiii8SWxeR4CSSiySPtudaVbwHsGWyjkwBfLxURpALzTistmKhaytSz/PehFnWSJ09TdJKwuOt5osEIZE84HOGto5237k90c56meQpIxc3CNWehVosqh+iMVj4HvuuVYJhVoRU4LUIrSSiSCK0Eb04MJyz/lp3wjvjs81JCjAcmSd+a9G2BmIJj8HKjsD83qTdPn2jYJgIxLhnSWr45HoyYZGMqY0snd2CisnUdRdEUky9WguFWCKOwbxQDEB7v7tbMMwKoq3deqnh51wmJVpJPt6KLhL8WIteIomG85cjqc6kTBycXZ1oa4clUkouOpzmiwU/BlsslXbHPSwYZgXSMtmzBK2ESiSI/Qh5GwlIpBj/MSRv4VA6e8IL5UrSHgTlUqfWop1PdLGUGoNpu1MwzApGGns83Erw4y2ESOjGWrQSCcfYDsEnFKaGhRJBLk0VC2oMJlN3fNeB3m2CYVYwyb5sjTTwE2K8hRAJZj9C20YQI61R8qUYJ/4tttJAryCSgFxoRmJuEIJxGE4s4cV9qbYi02yzYBhGqO7c1oJMKMdb1PuR+G0knNReSLQ9rzrZfWJcbDHuyYI4EHKhby3xxYIfg/X6MoEDly5dukEwDCP894LU8FnTRYJfstNLZHFUarvjq5tdNx1oKMRyIW4teLGMfQymunCyvd+tFwzDXKGdntjgz6VcPd6CQmKKBN9G4kskD1yQ/SjtvhrbYUaZQk+aPDHkUmlr0c4nqlhaGlqCYZgCiYaZvJXEFAmijSBHWvQSKcZfhoYXipnf5IWSh0AuhK0FJxYbRSxKu7cGt6YxDHPtH3I1/FBjkURoIxiJwJISkTpPq2u3CyzKuB0FoRDJBTESI24ttGJR/QxLpW3sJsEwzPXOpiShPQlCJOixVhMkIkMSyXNxEGPfw776YJVM7Rsy7fUWAoHEkwu2teD3LHixeKmo1O4RDMMEURo+GptIvDDiiySORPTSEhmO0u73w4cvrRJl8VfLytQe98mlkgchF4J9C7a1xBeL//3b986tFQzDBPG3CvqT8wiREIy1mioRL41wVNc+JsqypeueX5BJMRi5+ODkEr+1FBf4eLFI7bYJhmFGaCn+/wVLIBJcGwkv2OGaiSuRcJSxr4qyJKndM1kQSUPlQt9aUGLxfzZfmsUwo7Ft+uS6xMCfaJHohdC3kfgSwcV9I8rgX/eRaJj1QslTRi69BsrFDVKlWFSabREMw4yMMnAkF8k4F+2Qp7kSuYhNktp/L8f/utQdKS0Nj3iBBELQXgjlQthaMGLxf5ede07cIRiGGZmJ/t5RafhjBJEQtZFIEtGUEoFCVApbS7w3B7b6hnI5TZVL/NYSXuAP7m5mGAbzxNfMuETSZIngBeID143U8B97d/MiRxHGcbwQDeILyUFziIqKHtRABEXMScOaQzCY7erJwEZQVpGZqpmNrpAYxZeMcZMYu6t6VQwuIkHEiyLk4l+gJ1GIhyDePInoRQwbXw9ubVh7NjOz1ZNnap7uze8LP5J/IPnw9MxufyCGTSr7Yg5KPgZgyoYLAZbeq2VJ+6x+aGGjQAhdcu6XF0plfy4ICf2xlvJAQkREEhAhA+IH5awYJvf4JVLpQEyqj4sxfcdxtbQyvOsEodFcKSeLfT7Cf41wfB7SBQh1i0P99uGaTrZFjfTE8lQ+BmBIH+rTcQl/tbhvqQiEELla226lPtbiR4TjCvEDsmpqCRRlpSharWkfc5h0jwEY8vUS+JEYHRZltEAIjSyp7ec+RCLCIy0yIoEfZYUBpHfuDZrFQVF2RjbNm90bJzDSMwZcglwttUZ6l0AIjSypkgnea4SOCD8ga09eAOVLUaR6p7PBfa/7YlAIwDBcL9y4+GGRyryMl2chFOQlXN8UgYQTETog6VgAkQOX/t5oLFwjfEWNt+7wYMIATAVx8V8tjwiE0MiLmvY5wjVSOkQYAPHMuj/Px+35hwqcjNmEB4+KAmMGjIrL8FdLrNL06Rc+vF4ghEI89toslfmVBRHVswoDkuPRd9ocKvKh1lNETPiB8V8vrLjELTMtEELBkk3zcSBEGK4QHkD8s6eFr5q2r0llj/csODJ0YOjXC/3RWKFHYq3sboEQCvkCrp1+SOiI8F8hdDwI+0msVTSbbZIqPe7WBxV+YOjXCz8uynSWukIghILlXgQltfmBDxH/h+n8gNAXP3PiZjEo9zXWHJR8LMj4gWG4Xui4xMpKgRAKnvu37EMk5Ifq/ICY88HWTP9YXsvuEoOKVLJjcgmOi8eHDD8wo/7cpT6T3C4QQsGLtdnuRWTdAGIXQ+IxcDo5OFh0ZacibY45RDy7DIGh4xIr8yp+9gShsf5MyvdMiPADQsfDP20+WvP721HTHFuezldpZFS+sNeLH5dYmz0CITS23P8vPkT4AOHHgzTlZr4V/drR6VwplZlzmAweOzL8wBBwiVR2m0AIja1aI3kwR+TyBYQOR/dMPm3P1Tufbuj7PgEPJh5k8jEgQ3hMRgNGDlgvLvZ1fLsLofF/2yvW9sfQiBAeX5UYDzNwkTJ/rqym57f1feWvBw4uZKoPjINFpXjvCUIMxcqcKg8gdrFKeDgwfIu1fVxcnGy9vUsqe5QKSYhHZnRk+IGp6/R+gRAae7VWuq8vIuEBYceDDod/7v/dPqCYJ6VKj16Y7buwyORjQIYIjB+Xeuu96wRCaOzV979zY36FEAAhXB+8ePjhoIFiTveehTqZdZh4xgANDZnwV4wfGKnMswIhxJZU5quyAsJ/dfgn196Zfs8ZOx5MWKDhR4YOTK1tHhUIIU5Q5giA8OPBD0e+ZvrXqqn0N9GdexzjAaOy0NCRoQNT35/eIxBCbMU62z1uQOhXBz8chaeSzWKlqZa5xQnuRsCDjE05kaED88SB5FqBEGJrXyO9IeSH56O8OhjQIC9uzT8gVqrpZJvDxD86OPxXzdiROSAQQuzFypwZxfVRqqtjSDToM/2n5+vdL9V62ANJabEJe83QkYmb2V6BECoDKO+HxYMOBz8a5tKm7UGx0t6mnZQNM/f/VIBVEhofMn5glk9BhFAZQJkeCR4qXzXhMJT9vWrqwmJlToqVImWmJ5cg6Z7sGQM47NDQkakre5NACLEXN7L7cjwYrw4GNEhg+OdA+SIHRZvZqJm+sbLJRpLjki8gOPzYhHhk5v7eaCxcJRBC7E13Tl0tm2ZxWDwY0GAAg7yz3RfKYQeJb2VEp8xXjVT2eYEQKk1Spd9VBA46GGqsOydc7lcPF0WEgA4bOLzQZPsEQqg0Rdp+EgINfjD4t/zjEdFstomABhM65cYmv1CSCYEQKhEo5iUPHAxoVAOMSKX/rLW4nd4qpmbe3RIACmZ0yoFNrW23CoRQaZJtOzkIDk4w+KGgz33pQdRb9s5ImSM9IyLAjw4/OHtmTmwRCKHSJPebewloEMDgQ4I+U2g1ne0U7m1bDhDCKoPPcFcOHRv3rRKBECpN9cbCRjoY6wEKM/JJZadErM12AibrDqBRgRNr+4pACJWuWNlfygYGPxD+Sd+0aQupsolhQbjcASqITlsghEqXVObrCkDBD4Rb0/xbdLEyh0Wsk92RSo4Mnlk14FNse/AOeYRKCor9jA8KE2R0GOiL/2PvfF4jJ8M4/mzbXRUFxYM/wJMeBKsoyLLIgtaTVIQmmY2wiDJQTd6kW/aHq1ut1ngT5n2TUljEf8BD/wGPevTkzZM3b568edM6D8vU1kw7TZ/U94n5fuBT2s6th++nyUyS1O1QmLk4TO2X+2aH5aic0l4HKDTuLQIAaAzKdouh8BIHVZp9v6XxL97jkLSqPEidj0+Uu9cJAKCOyLjP/6NI6A+Dac8oc99RlJar0oDoC5Lz7mBt+xIBALTBm5f/b+JgFJm5H2iQ2sRDNBRHybXiyrXyBQIAqCMw5dsqwmC0aP9swyizP9LAuIwHGIqCVI/R+s4zBABQB1+AJw9C1wPgWjcw7ieu9bXxN0UTV8aDe6x9j9HYKKmeJACAOuK8eqkb4++65s8UpOV1joRWuxqu+Gb5KAEA1MFnD9oNgINjI+N+oTCrbvFwQ1e0Ga44+ephAgCoI1rfearv439G/kphNvooMKPibHS9Nc7vPkQAAHWE5uvHujzcQer+0mho7G80/rLB4w/bjWB8s3yAAADqGN6oHjlurOGp/Z3C3G3yI4C12tUw4VnyAOiE/9kLMP6tGxr3B4VZucXDDdu1KIo5AgCoI97dne/7+J+F/FFqBAVBAQCAdggTtxkk7gvYrjjlBQDoYVDshuZhDtNyq4viaY0AgN4Rpu42DyCcaFvx3dujBwkAoJFzRwpkRFl1Q984d19c2AiA3qB0Ws1EqV3nAYR2i5+TcJRBQ+NV3HoFAASlX3JQ8q6OPBsoFTeHBEAre+eIirlp8msNRUQOGhmXyke+btBzB1n1NAEA9LFXC4rYWYHqTaiCtFzt+/hPNTlgWn52Mu2+g7VykQAAOoNSFHNiSaI8UipjFRg3RBBqURAbfWAvEgBAHQXHII7npykIjDBIKgIlNzTVO9pj0Fzr3Si1rxIAQGVQ4nE8mkqs3xDVJWWGeRXpCwJr1Rkat3lSB8a+QQAAhUHZGwdld/54Y4GCCHU9SEFml2sxEARBEAVFkZAb5dUVAgCog4OxtFQsTJNfa27cqiQIkfcohVn5mocoqA+EPCjlKgEA1MHhkMoh8RAf/RGKcnsRkWhmlNlPp7lywMDYDwkAoI6lQhoUeXjk8ZFLbYeIPz0XmtHzfQ9E01jsmxzvcFjgBpEAKGJvPHovJ8n5o+TYCIIjD488Pn6PgvgCPA+B8BYLeTBmG6TuE/bq9e3HCQCgLCjfnD9sUlNXcOrh0Rgg/tsS3yJEEAlFsSiFsWgejVnG2fazBABQ9ZFhjsgM5cFhlzofHrZZUPiuuB2JhYdgyIxMdZkAAGq4N5DFhcUpcjyam3gIjs743AtKUVzoXCzYxG806o72DY3dYAeZDQgAoOkIZYGDcpSLgtjoDo7cEwWF4fFTFQs2URmNWjiOkYOSEABADRyN07joPTb6g0MTBsZlwljoD4Y8HM3N3J2i+H6BAAAq3pBfXt+5b3l54vohNcVGHhyfQcmrq75jIY+G/DSVyOSAqbszMc7vPkEAABVvyHNQptmt0LCJMDhsu6fDaMKVzC7Lg6E/GvJwsLVw1Fz5R/75RQIA6LigcVjcz9ZiMjsygtAIYqM/OPWghGvVKx6CoSEc8njUHP1L9yYBALyTjIeWY1KzcWRmHM0IXPQSG3lw+OiPJqyk9jkP0VAXjubxYEc1A2M/nhhl1fsEAPAOx2B6TOSRkR/NyEPjMzZ/s3dvv1GUYRjAvwRMSjnLwQQTNVHj8cp4AxrFQyAV2+7sdkRoisshc9htgcrhem4EYWdmsR6SXpF42X/Cf80+IQNLvy6z02dn3tn0fZIn8cIrgvvz+b7Z2ZdA+Xn5z1M1Q4OAg1gdFB7DO+utTxuNRiN6IX/aTfc96+q+QrDwyPDQyGODjgbK0t3efgsM+bXB16sCj/y6nfQ9o9FoZL/QCEyGFFCwyAivGRuaCrEB2GYwTpjeE1gbNcSDBwR/llv6tdFoNGLx1tdfc1fTfa5rdQgyqwLIENAIY2O2puHH3iTCUQIePCBe1t6z+o+vGI1GI5Z2FE3NetF0VuBCAEMhw68ZeWjyQQnSnwTgqB8ePCB2/eQujhWNRqMRuT8BIlYJYOSRqQ8024LiBP1vLTQE4CDwKHF9FAdka1vd9BOj0WhEHhfGgzGohYkoMDwy/LEZXzw+vA0ovU8JNIjVIYMHD0g+Iug8in8Okh+NRqOpPPiAPrfU2z9YCxcCGO6yXx4ZHpqNPduBclJ+dfB4yANitxGkd5yw38X0NhqNptLjLgBi1cKFAIZaMTwy0tBkjwy/FHdjY0+zE98XxmOCAbERedb4efF9H6PRaCp9XPisGx2wIBEBhl8x8sjY0Az9H+VmGN8gjqwqwYO/QCcAQXMBQWO7Xnyn6SXfGI1GU+234zvRARSwcLgUB6b4PQy6WldkUAsWk8UGJZmz4JDHQx4QAhHU8ZNf0Zbf9/TYS6Op7rhr6e6/+93O3wdcgDJYdzcCYyPDQoMHHsywOH7/9ETjYQNS6QqxEbHrBumbRqPRVPJ24blrjw6iQAUlcCkRmMlFZuAJLzsXvbV3c/DYVYDwiNjF49lGo9GUnnb76RQwySqAS82B4ZEZeMLLzuLK2iEBPGQAoY6yCiKCBvEq2gpjPfbSaCo47gIYFih5uEwSMPRlP49M7mdZw0tuE3jUDBB+hfCI2G0E/XeMRqMp89cZ984sRoeyAo8CuKAl4FIyMAIrxuTFCRO3boDwK0QekfmBOl39kqNGU2Zmo/XpmcW1QyhAEcCFXC/1B8aN8IRXTuY7yZnS8OAB4VcIfx9iN0hzEWmEyW0UC9AJkpv6bi+Nprzfjv/e+/3wzOYRPkrAQuAidDyGuhUhgwv5vLi3/nirloDwK0QQEbstP/3caDSaUr57AlDQDJaycLEv9QXWixAwuJAf6UVqTti7V2dA+BVCI5IPiTesvdsNP77lhOkvejmv0Yz/Mv7a/UcHB0ERwIVeL/LA5CMz8ueX00muCAAy+YiEr0Zka5vd+G2j0WjG+mbhRjs6grqbgKA5uFiw1B8XeWAAihk1DT/5jgCEXyH8UZY8IjYkNihB6hiNRjO24MO80e4fQYvAIoCLwHrhgcmQyV65MlLc8MkHBCClrBBRRKg1YheX8lkv3Vk/bjQaDR1cEgOSgVqwFF8tqA2LNC7ywGzsKaQ8C0h1K4RABAUahdcID0nWBe/xOaPRaOjgyckL4cOjFy4/PGqhUsFq4XFBS8ClBGAK3//iRYYCgBArRASRnUGCer2b85t1wqSLv1xGo9FQjwoDk8ECFpSApXa4SK8XtB09nTJIMVCSH+qOiMCRFkog8gKSzX9nJavTib80Go1mx8EH5fnr0euAxG4uLMVxWSwNFzQHF9n1gseyTdE4nf5HAoDUFhF+jdiQZJ33445+0VGj2fk6OX89fT1rEVjkV4uNC3HvUgkweK2NKRqclU0qIvyRlr1GGEiAxtAG6TLa7D75ymg0mh3dnWSYlADLLsMl/3hsx9+fWwj6iwQgxKU6gYjAGmEgydr0447epWg0xX/i17ny4BjqApHCsJRwHIYuSuCClocL2o6iKbPTLHSSM8QKqTki/BrhIUF7z7uw3D9rNBrNyMGHagZKDixoQVj41SKPy3iBsb5/UiRzy49O7QJE2GMtGhI86eV4SbcVJOHl8J+jRqPRjPS9k1kvPu50/zrmdIEJDwtqw8KvFhuXaCJxwSKk3ouDDz8LEOI+hEck/16kyjXCQ7KlfjpvNBpNblxv/TBAyQpUyoRFfrXI40K/f7AZ9i9YgJSNCBrEAmtEDhJ03k87aMt//L7RaDRD025HU4OYlAsLv1rqj0s+MNn7u6i4K/HHOYBIIsKvEf5+hIfkOSZxB20ESRs/XmM0Gs22jwkDjJmrD04AEAKWnAt8UVgqxiV/veDFm4aNF61PE4iUci9S3RopCxJ7lQCSwTaD/hdGo9FYwQciMMn6Klhwv0LCwh+H1R+XkdYLIDfjSKMTXyoBEeJIq/Q1IgUJ1kmIOmEa4D8Go9FoBtbJf3udoHdy5uraCbSesPCrhTgSI3AZvl7w/RMzrjS9/mcCiBBrhDjWkoRksF4S4vX2+iNcGs2Lh4TwFCRAcdClDJYHArAQx2ECq4XFxTqCZyemPCL8GikbErQoJOhWSFDHTwPHj4OWF39oNBqNwds7AMlgc9eKPCz8apHHxTruotP0k4tjQ4Q70posSEZdJd6LApKszSBpr+BlbBrNbr+I38Rj7sZvb6CTDQu/WqrE5X/2zuW3jSqM4iPBohKqQGx4tQUKLY8FYgHiIbUgEEV9xOMZxzRtCA1N7PFMWpUFYp0FEBqPx24RS4TEsv8k3BMxjZuLuUxPrr8Z5zvSUTeVlbTJ/c053713+uaEvIdB2PhdB0QE0gg/HyFBwtdbdiqxHG/les+X6khr1Sycrc3JHkxmQgVee1yw2FDhwQJzYOFTCw8X1F1eLmATgEjzQVI9lUynkyT8x/r+edVRPnNyaX33eQAFdoPFgopvsMAEWOqdWmbUXbzibLwMSHCVFptG+FpLHiTuVAKITLs92F3XyyNVR03dBw+eaN2ZPAeglHZDha/BWLAI1GFe4LKEusuXOunkHQdEZNOIPEj4egsAOWDz9fVhXMuy97SgUh2RXV1Y4C9lBiSlLajwNRgPFn7O4muIz1ZiqLu87rKIDRyISsuRRthayw9IiIF7tXrL8rCEyUN3tiYfBCrVEZmbxP3xC3H/pxe+NN6HCp1WBMAiUYfxcPH+ABtleVzDNCIAEqrecqeSFACxbb7fXrd/71SgUi303OSPY4BJaRdUFCwABzPIt+GC61YC34q2RmcF0ggxaCdAIlBvwbNA8tDJ6Budp6gWeW7SNdAwlcuLgMm0S6iwYLngqMHkwSKfWnB311zekBZmo6QCRLyAJJQDCVFvOSsuB0zg4Z47WbGk8xTVIs5NrplFGzCZtkBaWWCwuOHSuvn78bnd0hGmxbn5pRF5kPD1Fp9KSpjEab4Jh/gzy98PVKoFEhbBK4PipYNAcaQVYbD8XDOw8KllffuPY8G8hPt05phGxEAin0psmIRwf9/x7fsnApVqAYRFDDDZ948vOaBCphW7BuPnKzxY+DkLn1rQRAXzlFl0u0QaEQCJh4H7YaQSd8U1EybtpNjAPAU/0IFK1WBhe2oJEgdUHBWYz7TCD+55sPB1mAsuIvPZzq38TSKN0IN2HiS2eZDYDg8hlRyECUCy7+FGNMhXscUyUKkaeiX9yi0Dic27Jy4au6HivwLjazAeLDDAMe86DHCXuKztSSyY0vMR3yDh6y07lRAVlwUT2Pz9m+Z77OKcUKBSNUioVgAHwKT0xRlgaRnoVKnABGowYbDwdRgeTMVembE8GH7K1VryIBFIJUTFZYNk2p00b+urg1VNukEY24PDb0cn4XjzvgMqPiswdw0mCxb/cxZY9KEU2/uIWqtBIPGaSniYwD3jpPh2Oc0vYh9/oFLVfHswFvAwG50szUCFTyt8DSYPFr4OE1878FbBxoCEqLfYVMLPS9wwCZPhns1nfaZvelTVGSbd21h8fzkFH4QKfLACs6FSeIQKX4M1ESy1OCyNa9XrDRKYB0nlVJISqYSACWy+/vUoGX8UqFQ1FBbRpf69PZgQULHmKq6BPWxBhU0rfA1WG7CUJ+PFFWXjVWLQToOEr7eqD93hcD4V10yYACT/BpOHzsbvBipVjYSF69JG/jJcASpSFZgbLFZaaSZYVldrtEv0ajZ+ixi0i4GETyV8xeULJnCUFjfa2a5CRVULtb8bP4NGIwZQagUVPq1caBRYbLhcrNNrxjHIibHo1QkkfL3lP5VUmpdUh0mU5jeifn4jTkcf6kxFJTkzwWLZHuy8ArugAjug4pirCKQVogaTBgtAX7v1oZUU70mCxB64y6cSfl7CwwTGaXps8dbdXyoJmGBRbg/Gr8AcVO6fcM1V+LQiUIMJg8Vxb5eMbpvIhAX50EGSyoPEkUrIiss/TOAQHuRf6jkV1TzPmWDhXtocvgp7gYq7AnMP7Im0wtZg/I4wHiy1vbU83pqcJ0DC1lvEmRKvqYSfl/RKmMwCiRsmcHuQr5nPu6In6lW+9am5SQMLfgkTDir8XIVPK3wNJg8WGy54Z3ytX9kJSAiARDyV8BWXf5iUjnvDqPXD3eOBSuVB2H66dOfeKfP0e/ryzZ3TslDB1mICKkRa4Wsw/2Bx3Cosr2gw/qyJIOFTCV9xeYdJ6WT0dZyMl01SeTZQqQ65+l4xsOik49OX4ZsEVIgdYAJpRaIGo8Cy9v2fTwV1V+uH34/HSZE5QMIM3KvWW3wqSSulEu/zEjdM4NkwKR0no6srt359MVCpDkFr3w+f6phU0u7vvgZLQCWWgYp7izFfg/FgIdKJqKK0+ORQQCKfSqiKyz9M8seECTz8Gtfew11zAFJfJ6xitwW3NnZeL2HiGyo+h/Xugb3PGsz/jjD4goF/0BThThgs6m6Q8PUWPXQnKi5iXuIZJvDuo0DpPQoUgKR0C39uTb7YG9CpVBXfZYK3hrY2itdhQOUgUKahAohUhQrMQsU9V+HTyvxqMB4s29t/NesBMkx3z8mBhE8lxLykxjCx0wlgEqbF9bBfXDef3dEKTFWl4gI0riS7Z1pZCZRiHyiVobJDQEVgrkKkFaIGo8GytoZ00jDhaTdK8wEBEr7e8p9KGg6TaaDAw+vme73W1gpM5bot2Cx6HQOSK1MGTKpAxQZKdajAPqEy17QCr/kHS2N/t5d7o4+JgTuRSjxsB/Y1L+kdGkzg/wkT2IZJCRQ4SvIv1tCzqlQHtgR3zaIe9UZn4WmgIKVY1Zd3qPDDehgA4dIKDxV3DcaDpdG/0zjS38GCzA/ceZAIVFzVtwXLw6R0NChWomwcawWmmp6NdtZ3zwAkpZFSqkLlsgBUvFRgRFqRqsEa3zzE2eR9gXqLTyV8xdU4mFhAGQxXot5wpZMU73W3H+iVLWKSv/zVwOT5Vnr3DdgssG8cDlR25gSV+x6g4iGteK7BMIZYiF0gHZyVsEEimUrIioufl/iBCfz/YLIPlNkwgc3nX4Xb6bjdvfXrq3pr8dGaleAm2k5y74xZkN5spRMLKKX/a57CbSeWhwqfVuRrMBxiXpjfXfxAzgskcOg4pMhXXPWGiWsI74JJCZRWbx8ocHtQfGU+83MsMoFqobW+vn0MizhAAk8BxYKKa57iHtLLQ4XYWkwP7PkazA0W3GAQLJLQxztAUsdUQs5L3Du53DBxX6nCV102TKISJo8AZfgVHKWjLg5DYkAbqBZKOD197c7kuWhz/Fa0eXfPFlSI6ksAKsQOMA8VmEANtpAPgPhHEE4lfMXFw8QBEjmYwBZMDqSTaaCYCrPbSYqlley3k4FqIdTt//J0tDU6Gyb521G2D5QOYDIDKgBJQ6FSxwrMSw22sA9+qEsokPhPJXbFRQ/f6wYT99wEVdcsmMCASWnzf7kcJ/l5c4eb3l7cUOH1r1ikARK4BApcLaXwUCmB4gcq/A4w4bRSvQb7m71z+ZGiisJ4L4gLDSqJr4UrVxoe8lBAgfCI8hCmqruGThRClJnupruBuDG6nZVDv4GFhsSVf6n3q7FChwtz5s7XZ07V9D3JSViQCfTj/ub7vnNu3d14d//OsG+8eBsHtoK9pWhxlR4mfAgvW12eOpkHChpb9tnD2cl4fUu1dkoSNxa+0p4eXmk/yduDSmuwK6jc8kL6qkGFt8B4tcLbYMpXrNgXDp29UCURJoAJa3XJ6mQeKOisO23U28Pj+WNFY5UWJAicVx9OD7v3/QiA4toDCtpXKbz15Yf08o6KDBW0DBUirC+ZWpFtMPxytxQz7e5DerfesVElRF5iCRP5ShU5N+Gtrp4HEw8oDiar7r3KnO9eX+2NjsWnQ5YLJDjcGt1nRwCSom+uAyrbqZRw64uHyqYCVAImwEwtMF6t/OTC+KUZ8ccbSakSv01ViTwWbA8TeUQ43OryYfISKEVjf6Xee3YKgW8tlkkB6vjOJa3RMfd5OLrVT44WQAlRKQjotfOURUNFMazf5WixPliWbhEZAT0PEvRoKWDi75rwITxhdW2rToqG/ZXmPco76w7PNbp/fxSXI/dmKXHNDUrgkE6cUgRM5oGC9lSKBxUhoA/MU/jJL3uo2KsV2QbDo9hry1bw2DMcqgqqhLC4zGGiEMITVhenTtI5oNSdBVa0Oyy+w7KrW56LOYuCrYVDJwfAg8mXaADFg4qgUqSAnlcpESoaaqX5+PmHS3tTeNN9sKxUCZGXkAuL05/VYEJYXYrqxAOKe61SB940600S3PWWuEW6qFo4NYLfSlfXZp9hIKLoAii3XIerFNn6ilAhoKKkVpZ+GGb1weQHASbEkqJkcbHhuz1MmNzEt7r01QlgMg+UBN2eJGl7fA2HGu4cinDZGURw+29+CD6aHk26kxNoHyi+SgFIBJUSENArhPRGUCHCevHKFt4Ck9WKy5wO1Za98KXAAa+nSvi8xB4mZG7iW11cEM+rEx8obuvevXZ5wxLDSOud3l+HIlxeD5Gmg0HWGZ5ccQ2QvATKzAOKjkoJt75gcwp5ijD5ZQeVsltgyCYxQVuLVathjNHA4qo6TPjchLe6ZHXSG9e3BUrbB4p7jW8VfbszvIqDEl9ibHQvYyaC51jgUE26myfc63mq3trqrINFUh8qgu1FqBQioCesL2lHpfpQ4dVKXCh+5TcvjJcSICHykorDxMjqktQJOlyd+EDJOqObyf+dOns0687OrT4af44LDDEauR8BcsdZFz+6w2zrUB9/nbjn0Wz14KtXgRKmUp6QKoW3vvg8RV58VIAKnatoqpXm+j/RJvasrz9evFfvT9d1LS4+fK8qTHSsrkkOE0GdBADFhwm6gEnR7ufeyLs9vnG7N72Q2z+Pn3+KXZdmszqyH9M4eCQrpnO2DsynxxzYT9e7g9OZAwn6tUDpyUBRUClUQL94qGyWHyq8BSaqFagT9zk6UIvlFz6kBUi0LS5iLFgRJvKuCZ2bGKqTeaAUMEHL6sQHCmCCdj/zOjp5MLyedsfX0I3++DwOUBxC+MJhH8PyxlV84e/99u87eKY3wIcbfXH9/0prcnalNTjr3rczaMCk6KwvAUWAihDOSyqlsRcqhQ7pWajIW/VhUOEtsFC1Eq0uoeqd6dUwkPB5Cb9jYg8T3uri1UlGqJOdA2UoAgUTY/nnqDPM2/3bvkcn/cnl9OHoDA7WpjvwcDDhoIB9humy5PfBQWyVYz8GdhogBMUDOwGNP+MJpM2NjbfwwCL8XYTksKgw/4/pnqY7mPBzG/3BF/X+8HgOi/bkW7T7v39TdNZzMEG3JjlQfKhApQAo81AZeLaXukqRA3pFqGyWHiqWFlic6trhwiMOUQOLywYm8ngwGcIXMJGtriKID1cn8qhwuN018+yuNwEl2QYoAEnRqZseS9ujvHFTQ9Hu9bmSd2t0JelMLhftXo9LRbv39WKjjR5eTNx1/UWnznJLe8ML7j0+XzRynqQ7zDvtAyYsUMJtr2R9ISpFDuhl60shpDeHCh/WY7SYUCuwSfMFxlhyNd2LHgASHZi0NWGCHmrkJrzVxasTMYyn7a7em9UJGjApJ1BmgUBhbS8/nOdVCm99VR0q/AQYb4HlE4+xdl74wvEWFw+TtLIw4a0uQp1Qdpecn4QDJVEGStoCVFig+DmKlu0lX8ciqxR964vcUeGhYhDWy2DJ7+qKFf5sazyHPsKEzU3s1Uno7gnsLik/kYEyNAMKOgAorgcKtpcXziurFML6IkP6UkNlwbkKsro4IrzLwqZ0oztbW4jFZQ8T9J7CBJ1YqBPe7hLzE32gDDigzKuU9jY5SmsxOUo5VQpvfXkhfTWgopar5NOKsXZfuK5BQZUQOyZ2MAnKTWSrSw7ieXUih/F8fuIF8rsFyooFUMJzFNn24sN5QEVcdpQCeoM8RVh8tIQKb4HFEeEFFZ6jsSQwUctNeKsLPeQWGSW7C93m85M3A2VUDqDwOYqC7SWoFG/ZkQjo9fIUf/FRvqJlwVDRCevrv8zer8VaTOFB+ziQqgUTeddEDuHtrS4DdSLkJ8SEV4WAomp78SpF3/pSmfzioYIOhQqbqzTv/xlzk0VXfkVF3x2uMkioHRMeJuG7JjJM+BFhNCCiq07kMJ63uxYzMqwAFHp0mMhRlMJ5XqXA+loGqKB5qPiNEeF4i7DeVfefABp8+G4AEyo34a0ufXXC2l3hQEkWEsjPrlgCBe1NevE5Ch/O66sU8ar7gDzFCCr6E2Bx30S58KGOMOGsLj+I59WJld3FB/I8UNAhQGFzFN724lWKFNCHWV+KeYoZVPiwHtf61GLpV+buZBLykkrBRAjhhdyEsLo4dYJWVSdh+QkPFIBECyh8jqJve/Eqhbe+IlS2YIK75Wqx9qZwQR8Otd3CJC0HTKjchLe6eHUih/Hy7olCfhI6MqwJFCGYJ3IU2vbyn5XCqxTe+qo+VPiwHjdkx3u6DEJ6HKoKk1wVhIlgdRFLjIQ6Ie0uPpCvPFDkHCXI9krWy6RS+DxlP0IFU10xhDcqPF8CB7otTOQrVdRzEyKI11Mnst1F5SfBQBkFAQUQIYASODosB/PIUWjbix8h5lWKovWFlkN69Ka4TW8BFVyKi0cj1GLZVf7Aot70/j6DCbUNLwfxvDqRw3je7uLzE38HxR4o/qQXk6Pwtpe86MheyWJrfcmLjzZQ8XMVPLqjFsu+IKXVYCJf9kiE8HZWF69O5DB+57snM9Hu4gN5C6Dwk16s7cWH87JKIawvW6islQcqcaKrZAVLgJnksoeJrtWlrU54u4vPTyigtDigFLsoDFDkHIW3vexVCm99sSF9maCCjteqlLBwNUHmDgJ1mCiE8AG5ib7VJasTNozn7S5ywksXKPzoMJGjELYXr1LsrS8ipDeCivt/fxCvVSlpXdrYOAD7pOQwkXMT3uqyVyeM3SXnJ/sUKOhBQI7C2V76KkW2vpYVKujk16cfR5iUvHBVAQ43fZjwIbyl1cWrE3u7S5jwqiBQiByFtr14laJjfWnkKfZQwR1d7tLbuGtShcK0BA5CA5iQuQlvdclBPK9OpDA+2O5SCOQNgELtoqjmKMJOijBCHKpS0AYqpaxQ8a+/x4O0ms24a1Kp6riH0eDArCZM/BFhfatLAAqpTuRnn8h2FwcU+R4vfaDwwTxyFML2UlUpN4mAftHWV1mhApjAmq/Fql65D+FBHLalgAmZm6ATKojn1YkcxofvnqgE8v4OSuWAIuYoRrYXoVIMrC9iR0UBKlhi/I+9M2qN4ozC8N4IFmutbWrFixYpFHtbKN5IqXfSkE1m1oFYEUpN02YnwUKh13sjJLubbDW24JX3/krnLAjFwZ5Mnjl7vp09L+w/MPP6vs8556vORoWZLLOK3ZdX5KNsYCYAwgMzcUknJySdAH4Cgby9oegn7PXlRh3M6xxFr70AnAcpxaT6soL0lqYiuybxHnxHJJc75UPOzIRPdAFu0vCSMF9i1NMJN5SamQAgD3ZQzAxFfn0jMK9vzdvVXmaA3o2n6DsqxFS2q/HgYvQ6Tqp0SQ/+fLmWi6koZpIBMwHcRBkRtkwnYFRYgfGg7moA5JUJr8QMxRjMAzgPRohRSknTVNZbMpXiybMvDuKRrK6aynRNPtjnuc/FIbxD1ZV4OvEA8okZymI5Sropxbz68jCV4slhmEnX9dPev1fz6oMMzIRAeFx1cRDP04kO4/m4MAPy9oai3PNSdlE4mNfHh3ntVX8rhacU++rrmXKaZTGmUlTjwVFzrQyoP7yS/za736aZAG7iXnXpi4y87tK24xmQ54YiJmJrKBzMO9ReOKW4VV+OprI5/CcA/KpJrntWf9A5MBMA4b2qLp5OeN3F+UkYCjAUUHuxlFIfI+bVlwFPgaayOYxprpVefpQPY4NdEwzhwTZ8SumE112An9CR4fQNBXAUUHulmVL8ecpZTWW+ZxJLi6LVPtMiH0C6a2LPTXg6cYTxvO5SJrxSMRR9uRFMenUgpQBA78hT9B0VeW0xnu4NzSXwLBue3KuZCYDwhlUXB/E8nXjUXWDCS7vjBQ1F35ZHk17+hsJTCgD0vPoyNpX+L3GbK/SO5H8XeTn9nkN4XnUZp5OamZB0Ym0oHMjrW/J1Qzlq2VBmToai1146nOcpJXvsVX3ZQ/r+ztPPq5orrgaH3vNIVzn7VjMTwE3sqy6eTgxHhWfrlJ90ylB0MK8eitQ4illK2UEpBQB6c55yZlPJyhefxnsmIVXSvVYfnIfATFRuAqouv3TC6y6Vn3TNUOR3PkMxrb0AnPdKKbz6ApC+ZioPD55/1AuFzqrt/dMb8sEHEB5UXU7phI8K07qLA3l9ZDh9Q3GovcDBSMuUklz1JWYi06G9UOg8W/Vbv48Hmpn4VF3ppxNlXBgCeX3CS9lBcTAUZXQYTHrp48O89uIphVdfnqYi51TilEoI76rke5N1YCZK1bWc6cSu7qITXs1HhjcaGkquGIq+i4LBfJ2jJFJ7gZMshtUXNxVZWIy3TEKtSJaVsuH0DuAmDlVX7fEs63TiwE86bygC5h1qLzBCnFhKoTxFfsVwfD0muUKta7A/vSUm0sBMWNXln0786y4E5F0Nhe+icDAPai/rlMIBPa++dFPZ+mP2cS8UslL1B3Gt+keeY26ScDrRYXzzuisMZeww6aXWXtpOiktK4YCem0qxc3qzepjvg14oZK2NiqvIx8yRm/B04lh3cX7SfUNZBEdJMaXw6ovzlOAloYVLOlX5I06v6uLphMN4zk+6ZygzZCig9qKGor2VglIKAvQGPEUaiFhWDLlpvjkrRgDMxCadWMJ4g+14AOQ7ZCgczDffmsdwnqcU/+pLaq5YVgwl82CXfBBB1QXSCTITAONJ3WXPT7SlRgNDqZ2wV3ZRzMF82rWX/EBKabH6yssXX8briqGkJNdGB/IH6FB1AUOxrbs4PyEjw4qhNDtd/x9DaXrCnhuKP0dJJqW0XX0VB88/i4orlPJLkNerGmzLoerySCeg7sL8pPuGooL55hyF1172KYUDer36kmXFR48ml3qhUOqS8wz3q48LqLqSSyeg7sL8BAB5V0Phk14czEdKqaeUeAwrtJTaOhh/le2Oi/+rupYmnRjUXcxQxu0Yyg4wFOPRYQDmQe0FdlJMUgoH9G9NJSuPv45FxdBSq//X0WX5wFmBeJZO7Oqu7FfIT2wnvBI1FM5RvGovnlJsAX1eTgO8h7rzcJf0tvLRV8zELJ2AMyvGdRcH8mEoqdRePKW0XX1JMiken3wS4D3UycvFMnIKqi7ndGJfd6EJLwdDIbsoYNLLlKNwOK+bCl921Ksv2Xiv/uYu9EKhLkvid1aebC4exNvDeG4oHMh3ylAUMM84Cqi9Ek4p8uJqLCmGVm4SbFBObsN0Yg/jUd3F+QkYGU7PUPTRYQDmOUexh/P2KWV7/+jGD6NR3OEKrabkrYVBefzjYtIJh/FK3QX4CQLy+g6KfnbF31D4pJdL7cVTCgf0xfzdktGHvVBo1TXfst89vSUG4JxOUqm74IRXeoYiv74jmPevvXhKkV/dTI6+ebA7XYsHsEKhd/Tz6NXFfPj3dzSdvP3hdIK34+2B/KobCuAooPZKI6XIgmKcmQ+FFMmYY394fHdR6USB8UrdRfgJB/JgqdHcUMDoMALzwlGWqPZqnFI29ifx+FUo1FQy9pjvTdYN0oln3WUD5JfUUAzAfCu1F99Jkd9hqylFdkrksncvFAqdT3JzSOK9jBnzdMJ3T/S6i/MTPjLsbyjyczAUUHulm1LetHcGrU1EURSOuilokWpFW7ooaktFFBWkCCK6EG3VNDOTwVYQQlvTZpJCQdFtdiVNOjOmKrgQ9/2T8Z1CNw76SO+8vMnkfJA/oPSdufecey9Mdxy+ok9CSEosqZjxSiO8U6pFpcxXJxYN+fwLykEqgmK+7SUfdPTq4e1llYJkDJgQQ1QqzTH8sbof2o6x6kQiKHL/RBwZti8o0uiw3JiHjyJue+lnUoxUKRASdzeaouFOyICAKekH0T1XCYasOkma8ebbXXpD3pygtHXXGjWCEmoEJbQgKDIfJStVCsRktXE4zXUphNjcD1aPHqAywW942l1yQ1461Ji8hWJfUORJL/s+ymmqFHezO+M3m9wGTEgWeP+pfR5/vBCDPqLCGjPetn8ijwxr1q4YEBT9tLw+OmzemJe3veTmPCqSoqpIuFaekIyCrzzcf8DjnUZ1Irl9kqZ/km9B0RvzAh/FftvrL1FBahGpLZrthAwJzWbvLLYa4xHNghkPgTNmyA+JoOAnEJSM+yh6UcEcifL+LjH+S8gQU9yMr+LrOCEmFttdSf9EbsjnT1D0xrzcRzHf9ipVuzeWuE6ekHyBGxFeLb6r7kUsC9pdgrhw0j/RG/JZFxT5tLzAmDfko8irFBjt2LXFFSmEjMD0Pda6OEHncRrtLoF/IjDkBTMoORAUjTE/IB8luTDS29qf8zfY1iJkJPGD7xcwSFYMwpcG210UlISgaKLDA/NR5G0vbHDA/AiGbguEEIIvSkQ48ZhBTLJkyJsSlDfWBCUSCkpG2l5BePNVbW+i1+udKRBCyL/2hpW292bRjkmKiX46XuCfaAx5XWQ4w4Iijw7LBUXY9sJPRcTn1z52JjnNTgg51e17X92fKKtHz0K7SxQZzoGgCI15uY+Cn6/mmvyd7hWKCCEk1YuSXi26jkdxOAWlbUBQpAsi5ca83kfpPz7sVTsLiJtzHQohZCCVi7vZmvFULx2PvE1BgZiMiqC4JgQFv+29+/hYcOrfLrMSIYRYA6YszFmnfjCPBzPhn2gGGvs15Cko6fgoOFyFWREk/WisE0IyCZb94aHClHS50X6aEBONIS9IeIkFBQJiUlDwsyEo8FHw/3FShfDWCCFkaI+CudVoCl/EZfVYetvxC027S5vwyr6g2J9FwXwR9rlhfxa9EEJIbif18ZX8Vu14ghEMMdD5J/kXFE3SS2PM498RRjoqQ6zY8f2jcwVCCBnVC5SIpqIlg9bMcZJsK35+moSXfUEJ+xCU/qLDXj1edHZU62rr69xrJR7wrjA3VCCEEPL/6f31z7/Gi43WNAx/DNZhHqYMcZAKyomYGBEU+SwKKhGceHaC1i20rSC2OKLGHVmEEGLC+P/y86If7F8r7Uaz8GcgOMePcXDwTDPUaF1QICCY94DPgRUm7k53Zq3amSyut8Z9n34HIYRkyqdBGw1+AvwaCA8ebbTUfHXoCednsSEXa0Uwh+EG8cOVaryIysCpR49cVTVgG7OqDp6cCEpZCQUEAcECeBgwvhG/hTBgtxVaUViU6DUOFyASqCxWVXWF6uJd7ccE4rmVyu8x/4j+BsknfwBXzdSoslyzmAAAAABJRU5ErkJggg==`;\r\n","export default `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAygAAAMoCAMAAAATKjTDAAAC/VBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+G1NxwAAAA/3RSTlMACRUhLTlFUVxjanJ5gIePlZ6kqKqtr7G0trm8v7q3tbKwrqumn5iRioJ6dG1lXlNHOy4iFgoBDh8vQFBhlKK9vsDBp5l2QzEgDxEmPGd8u8LD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\\n`;\r\n","import * as React from 'react';\r\n\r\nimport styled, { ThemeContext } from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, FONT_STACK, SPACING, SPEED } from '../../packages/constants/';\r\nimport { LoadingSpinner } from '../loading-spinner';\r\n\r\nexport interface ButtonProps {\r\n /**\r\n * Button content\r\n */\r\n children: React.ReactNode;\r\n /**\r\n * Data Test ID\r\n */\r\n dataId: string;\r\n /**\r\n * Optional click handler\r\n */\r\n onClick?: (e: any) => void;\r\n /**\r\n * Is it disabled?\r\n */\r\n disabled?: boolean;\r\n /**\r\n * Value\r\n */\r\n value?: string;\r\n /**\r\n * Is it loading?\r\n */\r\n loading?: boolean;\r\n /**\r\n * Is it inline?\r\n */\r\n inline?: boolean;\r\n /**\r\n * Theme\r\n */\r\n theme?: {\r\n main: string;\r\n mainText: string;\r\n mainBorder: string;\r\n spinnerColor: 'black' | 'white';\r\n hover?: { main?: string; mainBorder?: string; mainText?: string };\r\n };\r\n themeProvider?: {};\r\n /**\r\n * Minimum width\r\n */\r\n minWidth?: string;\r\n /**\r\n * Color\r\n */\r\n color?: string;\r\n /**\r\n * size\r\n */\r\n size?: string;\r\n /**\r\n * Button type\r\n */\r\n type?: 'button' | 'submit' | 'reset' | undefined;\r\n className?: string;\r\n /** Allows the button to be assosciated with a form it is not a direct child of */\r\n form?: string;\r\n variant?: 'medium' | 'large';\r\n}\r\nexport interface ButtonAsTextProps {\r\n children: React.ReactNode;\r\n /**\r\n * Data Test ID cat\r\n */\r\n dataId: string;\r\n /**\r\n * Optional click handler\r\n */\r\n onClick?: (e: any) => void;\r\n /**\r\n * Is it disabled?\r\n */\r\n disabled?: boolean;\r\n /**\r\n * Value\r\n */\r\n value?: string;\r\n /**\r\n * Is it inline?\r\n */\r\n inline?: boolean;\r\n /**\r\n * Theme\r\n */\r\n theme?: {\r\n main: string;\r\n mainText: string;\r\n mainBorder: string;\r\n spinnerColor: 'black' | 'white';\r\n hover?: { main?: string; mainBorder?: string; mainText?: string };\r\n };\r\n themeProvider?: {};\r\n /**\r\n * Minimum width\r\n */\r\n minWidth?: string;\r\n /**\r\n * size\r\n */\r\n size?: string;\r\n /**\r\n * Button type\r\n */\r\n type?: 'button' | 'submit' | 'reset' | undefined;\r\n className?: string;\r\n}\r\nexport interface ButtonGroupProps {\r\n /**\r\n * ButtonGroup content\r\n */\r\n children: React.ReactNode;\r\n /**\r\n * ButtonGroup alignment\r\n */\r\n justify?: 'left' | 'center' | 'right' | 'space-between' | undefined;\r\n}\r\n\r\nconst StyledButton = styled.button.attrs(({ dataId }) => ({\r\n 'data-test-id': dataId,\r\n}))`\r\n display: ${(props) => (props.inline ? 'inline-flex' : 'flex')};\r\n justify-content: center;\r\n align-items: center;\r\n border-radius: ${(props) => (props.variant === 'large' ? '5px' : '2px')};\r\n border-width: 2px;\r\n border-style: solid;\r\n border-color: ${(props) => (props.theme ? props.theme.mainBorder : COLOR.BRAND.REPORTING)};\r\n background-color: ${(props) => (props.theme ? props.theme.main : COLOR.BRAND.REPORTING)};\r\n color: ${(props) => (props.theme ? props.theme.mainText : COLOR.PRIMARY.WHITE)};\r\n cursor: pointer;\r\n font-size: ${(props) =>\r\n props.size ? props.size : props.variant === 'large' ? FONT_SIZE.SMALL : FONT_SIZE.X_SMALL};\r\n font-weight: 700;\r\n line-height: 20px;\r\n text-decoration: none;\r\n padding: ${(props) => (props.variant === 'large' ? '10px 20px' : SPACING.BUTTON_DEFAULT)};\r\n min-width: ${(props) => props.minWidth || '0'};\r\n\r\n :disabled {\r\n opacity: 0.3;\r\n cursor: default;\r\n }\r\n\r\n :hover:not(:disabled) {\r\n border-color: ${({ theme }) => (theme && theme.hover ? theme.hover.mainBorder : COLOR.BRAND.REPORTING)};\r\n background-color: ${({ theme }) => (theme && theme.hover ? theme.hover.main : COLOR.BRAND.REPORTING)};\r\n color: ${({ theme }) => (theme && theme.hover ? theme.hover.mainText : COLOR.PRIMARY.WHITE)};\r\n }\r\n`;\r\n\r\n/**\r\n * Primary UI component for user interaction\r\n *\r\n * - Use the primary button to help users know what to access next.\r\n * - ~~Use a secondary button where the action is not compulsory and there is already a primary button.~~ (We have\r\n * yet to decide on secondary button styles)\r\n * - Use a generic button for cancelling, or configuration.\r\n * - Don't use the primary button in conjunction with another primary button.\r\n **/\r\n\r\nconst Button = React.forwardRef(\r\n (\r\n {\r\n children,\r\n onClick,\r\n disabled = false,\r\n inline,\r\n color,\r\n size,\r\n type = 'button',\r\n loading,\r\n variant = 'medium',\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const themeContext = React.useContext(ThemeContext);\r\n return (\r\n \r\n {loading ? (\r\n \r\n {children}\r\n \r\n ) : (\r\n children\r\n )}\r\n \r\n );\r\n },\r\n);\r\n\r\nButton.displayName = 'Button';\r\n\r\nconst StyledTextButton = styled.button.attrs(({ dataId }) => ({\r\n 'data-test-id': dataId,\r\n}))`\r\n background-color: transparent;\r\n display: ${(props: ButtonProps) => (props.inline ? 'inline-flex' : 'flex')};\r\n justify-content: flex-start;\r\n align-items: center;\r\n color: ${(props) =>\r\n props.theme\r\n ? props.theme.mainBorder\r\n ? props.theme.mainBorder\r\n : COLOR.BRAND.REPORTING\r\n : COLOR.BRAND.REPORTING};\r\n cursor: pointer;\r\n font-family: ${FONT_STACK};\r\n font-size: ${(props: ButtonProps) => props.size || FONT_SIZE.X_SMALL};\r\n font-weight: 700;\r\n line-height: ${FONT_SIZE.SMALL};\r\n text-decoration: none;\r\n padding: 0 0 1px;\r\n margin-right: ${SPACING.X_LARGE};\r\n border: 0;\r\n border-bottom: 1px solid transparent;\r\n transition: border-bottom-color ${SPEED.TRANSITION};\r\n\r\n &:disabled {\r\n opacity: 0.3;\r\n cursor: default;\r\n }\r\n\r\n &:last-of-type {\r\n margin-right: 0;\r\n }\r\n\r\n &:hover:not(:disabled) {\r\n border-bottom-width: 1px;\r\n border-bottom-style: solid;\r\n border-bottom-color: ${(props: ButtonProps) =>\r\n props.theme && props.theme.hover ? props.theme.hover.main : COLOR.BRAND.REPORTING};\r\n }\r\n`;\r\n\r\n/**\r\n * Text UI component for user interaction\r\n */\r\nconst ButtonAsText = React.forwardRef(\r\n ({ children, onClick, disabled, inline, size, type, ...props }, ref) => (\r\n \r\n {children}\r\n \r\n ),\r\n);\r\nButtonAsText.displayName = 'ButtonAsText';\r\n\r\nconst StyledButtonGroup = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: ${({ justify }) =>\r\n justify === 'left'\r\n ? 'flex-start'\r\n : justify === 'center'\r\n ? 'center'\r\n : justify === 'right'\r\n ? 'flex-end'\r\n : justify === 'space-between'\r\n ? 'space-between'\r\n : 'center'};\r\n\r\n ${StyledButton} {\r\n margin-right: ${SPACING.XX_LARGE};\r\n\r\n &:last-child {\r\n margin-right: 0;\r\n }\r\n }\r\n`;\r\n\r\nconst ButtonGroup = ({ children, justify, ...props }: ButtonGroupProps) => (\r\n \r\n {children}\r\n \r\n);\r\n\r\nexport { Button, ButtonAsText, ButtonGroup };\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT, FONT_SIZE, SPACING } from '../../packages/constants';\r\nimport { ChevronRight } from '../../packages/icons';\r\n\r\nexport interface CollapsibleBandProps {\r\n heading: React.ReactNode;\r\n rightColumn?: React.ReactNode;\r\n dataId: string;\r\n onClick?: () => void;\r\n expand: boolean;\r\n theme?: {\r\n main: string;\r\n };\r\n className?: string;\r\n}\r\n\r\ninterface StyledChevronProps {\r\n isExpanded: boolean;\r\n}\r\n\r\ninterface StyledHeadingProps {\r\n isExpanded: boolean;\r\n theme?: {\r\n main: string;\r\n };\r\n}\r\n\r\nconst StyledCollapsibleBand = styled.div`\r\n display: flex;\r\n border-top: 1px solid;\r\n border-bottom: 1px solid;\r\n border-color: ${COLOR.MAIN.MEDIUM_GREY};\r\n align-items: center;\r\n`;\r\n\r\nconst StyledButton = styled.button`\r\n flex-grow: 1;\r\n border: 0;\r\n padding: 10px;\r\n cursor: pointer;\r\n text-align: left;\r\n background-color: transparent;\r\n`;\r\n\r\nconst StyledChevron = styled(ChevronRight)`\r\n display: inline-block;\r\n margin-top: -2px;\r\n margin-right: 6px;\r\n vertical-align: text-top;\r\n width: 12px;\r\n height: 12px;\r\n fill: ${COLOR.MAIN.DARK_GREY};\r\n margin-right: ${SPACING.X_SMALL};\r\n transform: ${(props: StyledChevronProps): string => (props.isExpanded ? 'rotate(-90deg)' : 'rotate(90deg)')};\r\n`;\r\n\r\nconst StyledHeading = styled.p`\r\n display: inline-block;\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.LARGE};\r\n font-weight: 700;\r\n line-height: 1.2;\r\n color: ${(props: StyledHeadingProps): string =>\r\n props.isExpanded ? (props.theme ? props.theme.main : COLOR.BRAND.REPORTING) : COLOR.MAIN.DARK_GREY};\r\n`;\r\n\r\nconst RightColumnContainer = styled.div`\r\n padding: 10px;\r\n`;\r\n\r\nconst CollapsibleBand = React.forwardRef(\r\n ({ heading, rightColumn, expand = false, dataId, onClick, ...props }, ref) => {\r\n return (\r\n \r\n \r\n \r\n \r\n {heading}\r\n \r\n \r\n {rightColumn && {rightColumn}}\r\n \r\n );\r\n },\r\n);\r\nCollapsibleBand.displayName = 'CollapsibleBand';\r\n\r\nexport default CollapsibleBand;\r\n","import CollapsibleBand from './collapsible-band';\r\nexport * from './collapsible-band';\r\nexport default CollapsibleBand;\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { BREAKPOINT } from '../../packages/constants';\r\n\r\nexport interface GridRowProps {\r\n children: React.ReactNode;\r\n bgColor?: string;\r\n}\r\n\r\nconst GridRow = styled.div`\r\n box-sizing: border-box;\r\n display: flex;\r\n flex-direction: column;\r\n background-color: ${(props: GridRowProps): string => (props.bgColor ? props.bgColor : 'transparent')};\r\n width: 100%;\r\n\r\n @media (min-width: ${BREAKPOINT.TABLET}) {\r\n flex-direction: row;\r\n }\r\n`;\r\n\r\nexport default GridRow;\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\n\r\nimport { BREAKPOINT } from '../../packages/constants';\r\n\r\nexport interface GridColProps {\r\n children: React.ReactNode;\r\n bgColor?: string;\r\n width?: string;\r\n dev?: boolean;\r\n}\r\n\r\ninterface Widths {\r\n oneQuarter: string;\r\n oneThird: string;\r\n oneHalf: string;\r\n twoThirds: string;\r\n threeQuarters: string;\r\n full: string;\r\n [key: string]: string;\r\n}\r\n\r\nconst widths: Widths = {\r\n oneQuarter: '25%',\r\n oneThird: '33.3333%',\r\n oneHalf: '50%',\r\n twoThirds: '66.6667%',\r\n threeQuarters: '75%',\r\n full: '100%',\r\n};\r\n\r\nconst getWidth = (value: string) => widths[value];\r\n\r\n// TODO: use configurable gutter\r\nconst GridCol = styled.div`\r\n border: ${(props: GridColProps): string => (props.dev ? '1px solid red' : 'none')};\r\n background-color: ${(props: GridColProps) => props.bgColor || 'transparent'};\r\n box-sizing: border-box;\r\n padding: ${(props: GridColProps): string => (props.dev ? '5px' : '0')};\r\n margin-bottom: ${(props: GridColProps): string => (props.dev ? '5px' : '0')};\r\n width: 100%;\r\n\r\n @media (min-width: ${BREAKPOINT.TABLET}) {\r\n width: ${(props: GridColProps) => (props.width ? getWidth(props.width) : widths.full)};\r\n }\r\n`;\r\n\r\nexport default GridCol;\r\n","import * as React from 'react';\r\n\r\nimport { Portal } from 'react-portal';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE } from '../../packages/constants';\r\nimport { LoadingSpinner } from '../loading-spinner';\r\n\r\nexport interface LoadingScreenProps {\r\n message?: string;\r\n}\r\n\r\nconst StyledLoadingScreen = styled.div`\r\n position: sticky;\r\n top: 25vh;\r\n margin-top: 20px;\r\n margin-bottom: 12px;\r\n display: flex;\r\n background: #fff;\r\n border-radius: 5px;\r\n box-shadow: 0px 0px 6px 0px rgba(0, 0, 0, 0.08), 0 2.2px 1.7px -10px rgba(0, 0, 0, 0.08),\r\n 0 5.3px 4px -10px rgba(0, 0, 0, 0.06), 0 10px 7.5px -10px rgba(0, 0, 0, 0.06),\r\n 0 17.9px 13.4px -10px rgba(0, 0, 0, 0.05), 0 33.4px 25.1px -10px rgba(0, 0, 0, 0.04),\r\n 0 80px 60px -10px rgba(0, 0, 0, 0.04);\r\n padding: 10px;\r\n padding-right: 16px; // temporary to balance because the spinner adds 6px left margin\r\n font-size: bu(2);\r\n height: fit-content;\r\n line-height: normal;\r\n`;\r\n\r\nconst Overlay = styled.div`\r\n background-color: ${COLOR.MODAL.MODAL_OVERLAY};\r\n position: fixed;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n display: flex;\r\n justify-content: center;\r\n z-index: 9999;\r\n`;\r\n\r\nconst StyledLoadingSpinner = styled(LoadingSpinner)`\r\n margin-right: 10px;\r\n`;\r\n\r\nconst StyledMessage = styled.p`\r\n display: block;\r\n flex-grow: 1;\r\n text-align: center;\r\n font-weight: bold;\r\n font-size: ${FONT_SIZE.MEDIUM};\r\n color: ${COLOR.PRIMARY.BLACK};\r\n`;\r\n\r\nexport const LoadingScreen = React.forwardRef(\r\n ({ message = 'Loading...', ...props }, ref) => (\r\n \r\n \r\n \r\n \r\n {message}\r\n \r\n \r\n \r\n ),\r\n);\r\nLoadingScreen.displayName = 'LoadingScreen';\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPACING, THEME } from '../../packages/constants';\r\nimport type { Theme } from '../../packages/constants';\r\nimport { Button } from '../button';\r\n\r\nexport interface ModalProps {\r\n children: React.ReactNode;\r\n /**\r\n * Modal buttons\r\n */\r\n buttons?: React.ReactNode;\r\n /**\r\n * Button group arrangement type\r\n */\r\n buttonGroupType?: ButtonGroupType;\r\n theme?: Theme | string;\r\n /**\r\n * Title of modal\r\n */\r\n title?: string;\r\n /**\r\n * Cancel button text\r\n */\r\n cancelText?: string;\r\n /**\r\n * Primary button text\r\n */\r\n primaryText?: string;\r\n /**\r\n * Function to handle cancel button\r\n */\r\n handleCancelButton?: (e: any) => void;\r\n /**\r\n * Function to handle primary button\r\n */\r\n handlePrimaryButton?: (e: any) => void;\r\n /**\r\n * Width of modal (420px)\r\n */\r\n width?: string;\r\n /**\r\n * Height of modal\r\n */\r\n height?: string;\r\n /**\r\n * Focus on a particular button\r\n */\r\n focusOnButton?: string;\r\n themeProvider?: {};\r\n}\r\n\r\nexport enum ButtonGroupType {\r\n Left = 'LEFT',\r\n Right = 'RIGHT',\r\n}\r\n\r\nexport interface ButtonGroupProps {\r\n buttonGroupType?: ButtonGroupType;\r\n}\r\n\r\ninterface ModalTheme {\r\n theme?: {\r\n main: string;\r\n mainText: string;\r\n mainBorder: string;\r\n spinnerColor: 'black' | 'white';\r\n hover?: { main?: string; mainBorder?: string; mainText?: string };\r\n };\r\n}\r\n\r\nconst Overlay = styled.div`\r\n background-color: ${COLOR.MODAL.MODAL_OVERLAY};\r\n position: fixed;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n z-index: 9999;\r\n`;\r\n\r\nconst StyledModal = styled.div`\r\n border-radius: 4px;\r\n width: ${(props: ModalProps) => (props.width ? props.width : '900px')};\r\n height: ${(props: ModalProps) => (props.height ? props.height : '70vh')};\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst StyledModalTitleBar = styled.div`\r\n background-color: ${(props: ModalTheme) => (props.theme ? props.theme.main : COLOR.BRAND.REPORTING)};\r\n color: ${COLOR.PRIMARY.WHITE};\r\n padding: 12px;\r\n border-top-left-radius: 4px;\r\n border-top-right-radius: 4px;\r\n font-size: ${FONT_SIZE.MEDIUM};\r\n font-weight: 700;\r\n`;\r\n\r\nconst StyledModalContent = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n height: calc(100% - 42px - 65px);\r\n`; // 42px = titlebar, 65px = button bar\r\n\r\nconst StyledButton = styled(Button)``;\r\n\r\nconst StyledButtonGroup = styled.div`\r\n display: flex;\r\n justify-content: ${(props: ButtonGroupProps) =>\r\n props.buttonGroupType === ButtonGroupType.Right ? 'flex-start' : ''};\r\n flex-direction: ${(props: ButtonGroupProps) =>\r\n props.buttonGroupType === ButtonGroupType.Right ? 'row-reverse' : ''};\r\n background-color: ${COLOR.MAIN.BUTTON_GROUP_BG};\r\n border-top: 1px solid ${COLOR.MAIN.BUTTON_GROUP_BORDER};\r\n border-bottom-left-radius: 4px;\r\n border-bottom-right-radius: 4px;\r\n padding: 16px;\r\n\r\n ${StyledButton} {\r\n margin-left: ${SPACING.X_LARGE};\r\n margin-right: ${SPACING.X_LARGE};\r\n\r\n &:first-child {\r\n margin-left: 0;\r\n margin-right: 0;\r\n }\r\n }\r\n`;\r\n\r\nexport const Modal = React.forwardRef(\r\n (\r\n {\r\n children,\r\n buttons = null,\r\n buttonGroupType = ButtonGroupType.Left,\r\n title,\r\n cancelText,\r\n primaryText,\r\n handleCancelButton,\r\n handlePrimaryButton,\r\n width,\r\n focusOnButton,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const cancelButtonRef = React.useRef(null);\r\n const primaryButtonRef = React.useRef(null);\r\n\r\n useEffect(() => {\r\n if (focusOnButton === 'cancel' && cancelButtonRef.current) cancelButtonRef.current.focus();\r\n if (focusOnButton === 'primary' && primaryButtonRef.current) primaryButtonRef.current.focus();\r\n });\r\n\r\n return (\r\n \r\n {title}\r\n {children}\r\n {buttons ? (\r\n buttons\r\n ) : (\r\n \r\n \r\n {primaryText || 'Add'}\r\n \r\n \r\n {cancelText || 'Cancel'}\r\n \r\n \r\n )}\r\n \r\n );\r\n },\r\n);\r\nModal.displayName = 'Modal';\r\n\r\nexport { Overlay, StyledModal, StyledModalTitleBar, StyledModalContent, StyledButton, StyledButtonGroup };\r\n","import * as React from 'react';\r\nimport { useState } from 'react';\r\n\r\nimport { darken, lighten } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, RADIUS } from '../../packages/constants';\r\nimport { CircleWithX, Search } from '../../packages/icons';\r\n\r\nexport interface SearchFilterProps {\r\n assistAccess: boolean;\r\n handleChange?: (e: any) => void;\r\n handleClearButton?: (e: any) => void;\r\n placeholder?: string;\r\n searchTerm?: string;\r\n ref?: any;\r\n isExpandable?: boolean;\r\n isRounded?: boolean;\r\n dataId?: string;\r\n hasFocus?: boolean;\r\n hasClearButton?: boolean;\r\n hasSearchIcon?: boolean;\r\n}\r\n\r\ninterface StyledInputProps {\r\n assistAccess: boolean;\r\n dataTestId: string;\r\n autoComplete?: string;\r\n hideExpandButton?: boolean;\r\n isRounded?: boolean;\r\n isExpandable?: boolean;\r\n hasEndContent: boolean;\r\n ref?: any;\r\n rel?: string;\r\n}\r\n\r\ninterface DataTestIdProps {\r\n dataTestId: string;\r\n}\r\n\r\ninterface ExpandButtonProps {\r\n isRounded?: boolean;\r\n hideExpandButton?: boolean;\r\n}\r\n\r\ninterface StyledFilterProps {\r\n isExpanded: boolean;\r\n isRounded?: boolean;\r\n}\r\n\r\nconst StyledFilter = styled.div`\r\n display: flex;\r\n min-height: 34px;\r\n border: ${(props) => (props.isExpanded ? `1px solid ${COLOR.MAIN.FORM_FIELD}` : 'none')};\r\n border-radius: ${(props): string => (props.isRounded ? '25px' : RADIUS.FORM_FIELD)};\r\n\r\n &:focus-within {\r\n border-color: ${COLOR.BRAND.REPORTING};\r\n }\r\n`;\r\n\r\nconst StyledCircleWithX = styled(CircleWithX)`\r\n width: 18px;\r\n height: 22px;\r\n`;\r\n\r\nconst StyledSearch = styled(Search)`\r\n width: 18px;\r\n height: 22px;\r\n fill: #9ba8bd;\r\n`;\r\n\r\nconst Button = styled.button.attrs(({ dataTestId }) => ({\r\n 'data-test-id': dataTestId,\r\n}))``;\r\n\r\ninterface StyledButtonProps {\r\n isRounded?: boolean;\r\n isExpandable?: boolean;\r\n assistAccess?: boolean;\r\n hideExpandButton?: boolean;\r\n}\r\n\r\nconst StyledButton = styled(Button)`\r\n fill: ${COLOR.MAIN.FORM_FIELD_DARK};\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n border-radius: ${(props): string =>\r\n props.isRounded ? '0 25px 25px 0' : `0 ${RADIUS.FORM_FIELD} ${RADIUS.FORM_FIELD} 0`};\r\n border: none;\r\n padding: 6px;\r\n cursor: pointer;\r\n display: ${(props) => (!props.isExpandable ? 'block' : props.hideExpandButton ? 'block' : 'none')};\r\n\r\n &:focus {\r\n outline: ${(props): string => (props.assistAccess ? '1px dotted #212121' : '0')};\r\n outline: ${(props): string => (props.assistAccess ? '5px auto -webkit-focus-ring-color' : '0')};\r\n\r\n ${StyledCircleWithX} {\r\n fill: ${COLOR.BRAND.REPORTING};\r\n }\r\n }\r\n\r\n &:hover {\r\n ${StyledCircleWithX} {\r\n fill: ${darken('0.2', COLOR.MAIN.FORM_FIELD_DARK)};\r\n }\r\n }\r\n\r\n &:disabled {\r\n cursor: default;\r\n\r\n ${StyledCircleWithX} {\r\n opacity: 0.15;\r\n }\r\n }\r\n`;\r\n\r\ninterface StyledSearchIconContainerProps {\r\n isRounded?: boolean;\r\n}\r\n\r\nconst StyledSearchIconContainer = styled.div`\r\n fill: ${COLOR.MAIN.FORM_FIELD_DARK};\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n border-radius: ${(props): string =>\r\n props.isRounded ? '0 25px 25px 0' : `0 ${RADIUS.FORM_FIELD} ${RADIUS.FORM_FIELD} 0`};\r\n padding: 6px;\r\n display: flex;\r\n align-items: center;\r\n`;\r\n\r\nconst TextInput = styled.input.attrs(({ dataTestId }) => ({\r\n 'data-test-id': dataTestId,\r\n}))``;\r\n\r\nconst StyledInput = styled(TextInput)`\r\n font-size: 14px;\r\n color: ${darken('0.2', COLOR.MAIN.FORM_FIELD_DARK)};\r\n border-radius: ${(props) => (props.isRounded ? '25px' : RADIUS.FORM_FIELD)};\r\n\r\n ${(props) =>\r\n props.hasEndContent &&\r\n `\r\n border-top-right-radius: 0;\r\n border-bottom-right-radius: 0;\r\n `};\r\n\r\n border: none;\r\n padding: ${(props) => (!props.isExpandable ? '2px 6px' : props.hideExpandButton ? '2px 6px' : 0)};\r\n width: ${(props) => (props.isExpandable ? (props.hideExpandButton ? '100%' : '0') : '100%')};\r\n background-color: ${(props) =>\r\n props.isExpandable ? (props.hideExpandButton ? COLOR.PRIMARY.WHITE : 'transparent') : COLOR.PRIMARY.WHITE};\r\n\r\n &::placeholder {\r\n opacity: ${(props) => (!props.isExpandable ? 1 : props.hideExpandButton ? 1 : 0)};\r\n color: ${lighten('0.2', COLOR.MAIN.FORM_FIELD_DARK)};\r\n }\r\n\r\n &:focus {\r\n border-color: ${COLOR.BRAND.REPORTING};\r\n outline: ${(props: StyledInputProps): string => (props.assistAccess ? '1px dotted #212121' : '0')};\r\n outline: ${(props: StyledInputProps): string =>\r\n props.assistAccess ? '5px auto -webkit-focus-ring-color' : '0'};\r\n\r\n ~ ${StyledButton} {\r\n border-color: ${COLOR.BRAND.REPORTING};\r\n }\r\n ~ ${StyledSearchIconContainer} {\r\n border-color: ${COLOR.BRAND.REPORTING};\r\n }\r\n }\r\n\r\n /* 'fix' for removing the internal clear button on Microsoft Edge */\r\n &::-ms-clear {\r\n display: none;\r\n }\r\n`;\r\n\r\nconst ExpandButton = styled.button`\r\n font-size: 14px;\r\n color: ${darken('0.2', COLOR.MAIN.FORM_FIELD_DARK)};\r\n cursor: pointer;\r\n border: 1px solid ${darken(0.04, COLOR.MAIN.MEDIUM_GREY)};\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n border-radius: ${(props) => (props.isRounded ? '25px' : `${RADIUS.FORM_FIELD}`)};\r\n padding: 2px 8px;\r\n min-height: 36px;\r\n display: ${({ hideExpandButton }) => (hideExpandButton ? 'none' : 'flex')};\r\n align-items: center;\r\n justify-content: center;\r\n\r\n &:hover {\r\n border-color: ${lighten(0.5, COLOR.MAIN.LABEL_TEXT)};\r\n background-color: ${lighten(0.65, COLOR.MAIN.LABEL_TEXT)};\r\n\r\n ${StyledSearch} {\r\n fill: ${darken('0.2', COLOR.MAIN.FORM_FIELD_DARK)};\r\n }\r\n }\r\n`;\r\n\r\nconst SearchFilter = React.forwardRef(\r\n (\r\n {\r\n assistAccess,\r\n placeholder,\r\n handleChange,\r\n handleClearButton,\r\n searchTerm,\r\n isRounded,\r\n isExpandable,\r\n dataId,\r\n hasFocus,\r\n hasClearButton = true,\r\n hasSearchIcon = false,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [hideExpandButton, setHideExpandButton] = useState(false);\r\n\r\n // If the input has a search icon, only show the clear button if a search term has been entered\r\n // Otherwise, show the search icon\r\n const isExpanded = !isExpandable || hideExpandButton;\r\n const showClearButton = hasClearButton && (!hasSearchIcon || !!searchTerm);\r\n const showSearchIcon = isExpanded && hasSearchIcon && !showClearButton;\r\n\r\n const handleExpandButton = () => {\r\n setHideExpandButton(true);\r\n // @ts-ignore\r\n ref.current.focus();\r\n };\r\n\r\n const handleBlur = () => {\r\n if (!isExpandable) return;\r\n // @ts-ignore\r\n if (!ref.current.value) setHideExpandButton(false);\r\n };\r\n\r\n return (\r\n \r\n {isExpandable && (\r\n \r\n \r\n \r\n )}\r\n \r\n {showClearButton && (\r\n \r\n \r\n \r\n )}\r\n {showSearchIcon && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n },\r\n);\r\nSearchFilter.displayName = 'SearchFilter';\r\n\r\nexport { SearchFilter };\r\n","import * as React from 'react';\r\n\r\nimport { transparentize } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT, FONT_SIZE, SPACING } from '../../../../packages/constants';\r\nimport { ChevronRight } from '../../../../packages/icons/';\r\n\r\ninterface ChartGroupProps {\r\n onChange?: (e: any) => void;\r\n chartData?: any;\r\n hideFavourites?: boolean;\r\n hideRecent?: boolean;\r\n checked?: any;\r\n assistAccess?: boolean;\r\n}\r\n\r\ninterface DataTestIdProps {\r\n dataTestId: string;\r\n}\r\n\r\ninterface StyledGroupItemProps {\r\n children: React.ReactNode;\r\n checked: boolean;\r\n radioValue: string;\r\n assistAccess?: boolean;\r\n dataTestId?: string;\r\n onChange?: (e: any) => void;\r\n onClick?: (e: any) => void;\r\n ref?: any;\r\n}\r\n\r\ninterface StyledInputProps {\r\n assistAccess?: boolean;\r\n ref?: any;\r\n rel?: string;\r\n autoComplete?: string;\r\n dataTestId?: string;\r\n}\r\n\r\ninterface StyledLabelTextProps {\r\n checked?: boolean;\r\n assistAccess?: boolean;\r\n}\r\n\r\nexport const ChartGroupScroller = styled.div`\r\n margin-top: ${SPACING.LARGE};\r\n height: 100%;\r\n overflow: auto;\r\n padding-top: 5px;\r\n padding-left: ${SPACING.SMALL};\r\n`;\r\n\r\nexport const ChartGroupTitle = styled.h3`\r\n font-weight: 700;\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n color: #6f788a;\r\n padding: 5px;\r\n margin: 0;\r\n margin-top: ${SPACING.MEDIUM};\r\n`;\r\n\r\nconst ClickableLi = styled.li.attrs(({ dataTestId }) => ({\r\n 'data-test-id': dataTestId,\r\n}))``;\r\n\r\nexport const StyledClickableListItem = styled(ClickableLi)`\r\n list-style-type: none;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 1;\r\n data-test-id: ${(props: DataTestIdProps): string => props.dataTestId};\r\n`;\r\n\r\nexport const StyledListItem = styled.li`\r\n list-style-type: none;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 1;\r\n`;\r\n\r\nexport const StyledList = styled.ul`\r\n list-style-type: none;\r\n margin: 0 0 ${SPACING.MEDIUM};\r\n padding: 0;\r\n\r\n ${StyledClickableListItem} {\r\n margin-right: ${SPACING.MEDIUM};\r\n\r\n ${StyledClickableListItem} {\r\n margin-right: 0;\r\n }\r\n }\r\n`;\r\n\r\nconst ChartGroupWrapperPaddingTop = `26px`;\r\n\r\nexport const ChartGroupWrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n background-color: ${COLOR.MODAL.MODAL_PANEL_ACCENT};\r\n padding: ${ChartGroupWrapperPaddingTop} 0 0 ${SPACING.SMALL};\r\n width: 240px;\r\n height: calc(100% - ${ChartGroupWrapperPaddingTop});\r\n\r\n > ${StyledList}:first-child {\r\n margin-left: ${SPACING.SMALL};\r\n }\r\n`;\r\n\r\nexport const HorizontalRule = styled.hr`\r\n border: 0;\r\n border-bottom: 1px solid #b2bccd;\r\n width: calc(100% - ${SPACING.X_LARGE});\r\n margin: ${SPACING.MEDIUM} ${SPACING.X_LARGE} ${SPACING.MEDIUM} ${SPACING.SMALL};\r\n`;\r\n\r\nconst StyledLabel = styled.label`\r\n background-color: ${COLOR.MODAL.MODAL_PANEL_ACCENT};\r\n position: relative;\r\n`;\r\n\r\nconst StyledLabelText = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n background-color: ${(props: StyledLabelTextProps): string => (props.checked ? COLOR.PRIMARY.WHITE : 'transparent')};\r\n color: ${COLOR.BRAND.REPORTING};\r\n padding: 5px;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n background-color: ${(props: StyledLabelTextProps): string =>\r\n props.checked ? COLOR.PRIMARY.WHITE : transparentize('0.5', COLOR.PRIMARY.WHITE)};\r\n }\r\n`;\r\n\r\nconst StyledChevron = styled(ChevronRight)`\r\n fill: #b2bccd;\r\n height: 12px;\r\n width: 12px;\r\n opacity: ${(props: StyledLabelTextProps): number => (props.checked ? 1 : 0)};\r\n`;\r\n\r\nconst StyledRadio = styled.input`\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n opacity: 0;\r\n z-index: -1;\r\n\r\n &:focus ~ ${StyledLabelText} {\r\n outline: ${(props: StyledInputProps): string => (props.assistAccess ? '1px dotted #212121' : '0')};\r\n outline: ${(props: StyledInputProps): string =>\r\n props.assistAccess ? '5px auto -webkit-focus-ring-color' : '0'};\r\n }\r\n`;\r\n\r\nexport const StyledGroupItem = React.forwardRef(\r\n ({ children, onChange, onClick, radioValue, checked, assistAccess, dataTestId, ...props }, ref) => (\r\n \r\n \r\n \r\n \r\n {children} \r\n \r\n \r\n \r\n ),\r\n);\r\nStyledGroupItem.displayName = 'StyledGroupItem';\r\n\r\nconst ChartGroup = React.forwardRef(\r\n ({ onChange, chartData, hideFavourites, hideRecent, checked, assistAccess, ...props }, ref) => (\r\n \r\n \r\n \r\n Create a new chart\r\n \r\n {!hideRecent && (\r\n \r\n Recent\r\n \r\n )}\r\n {!hideFavourites && (\r\n \r\n Favourites\r\n \r\n )}\r\n \r\n\r\n \r\n \r\n \r\n \r\n All...\r\n \r\n {chartData &&\r\n Object.keys(chartData).map((groupTitle) => {\r\n return (\r\n \r\n {chartData[groupTitle].title}\r\n \r\n {Object.keys(chartData[groupTitle].groups).map((groupItem) => {\r\n return (\r\n \r\n {chartData[groupTitle].groups[groupItem].title}\r\n \r\n );\r\n })}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n ),\r\n);\r\nChartGroup.displayName = 'ChartGroup';\r\n\r\nexport default ChartGroup;\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPEED, Theme } from '../../../../packages/constants';\r\n\r\ninterface ChartIconProps {\r\n iconName: string;\r\n iconLabel: string;\r\n id: string;\r\n onChange: (e: any) => void;\r\n isSelected: boolean;\r\n assistAccess?: boolean;\r\n dataTestId?: string;\r\n imagePath?: string;\r\n onKeyDown?: (e: any) => void;\r\n hasModernStyles?: boolean;\r\n}\r\n\r\ninterface StyledIconProps {\r\n iconName: string;\r\n imagePath?: string;\r\n assistAccess?: boolean;\r\n}\r\n\r\ninterface StyledInputProps {\r\n assistAccess?: boolean;\r\n ref?: any;\r\n rel?: string;\r\n autoComplete?: string;\r\n dataTestId?: string;\r\n hasModernStyles?: boolean;\r\n theme?: Theme;\r\n}\r\n\r\ninterface DataTestIdProps {\r\n dataTestId: string;\r\n}\r\n\r\nconst ChartIconWrapper = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n margin-bottom: 100px;\r\n width: 33%;\r\n flex-basis: 33%;\r\n`;\r\n\r\nconst StyledLabel = styled.label`\r\n width: 100px;\r\n height: 100px;\r\n display: block;\r\n position: relative;\r\n cursor: pointer;\r\n`;\r\n\r\nexport const StyledIcon = styled.div`\r\n box-sizing: border-box;\r\n margin-bottom: 12px;\r\n border: 3px solid ${COLOR.MAIN.ICON_BACKGROUND};\r\n border-radius: 15px;\r\n width: 100px;\r\n height: 100px;\r\n background-image: url(${(props) => `${props.imagePath ?? ''}${props.iconName}.svg`});\r\n background-color: ${COLOR.MAIN.ICON_BACKGROUND};\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n background-size: 120% auto;\r\n box-shadow: 2px 2px 4px rgba(4, 37, 91, 0.15);\r\n transition: box-shadow ${SPEED.TRANSITION};\r\n`;\r\n\r\nconst StyledLabelText = styled.div`\r\n color: black;\r\n border-radius: 3px;\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-family: sans-serif;\r\n line-height: ${FONT_SIZE.LARGE};\r\n padding: 5px 2px;\r\n text-align: center;\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n box-shadow: 0 0 15px rgba(4, 37, 91, 0);\r\n`;\r\n\r\nconst Radio = styled.input.attrs(({ dataTestId }) => ({\r\n 'data-test-id': dataTestId,\r\n}))``;\r\n\r\nconst StyledRadio = styled(Radio)`\r\n position: absolute;\r\n opacity: 0;\r\n top: 0;\r\n left: 0;\r\n z-index: -1;\r\n\r\n &:hover {\r\n ~ ${StyledIcon} {\r\n box-shadow: 0 0 15px rgba(4, 37, 91, 0.3);\r\n }\r\n }\r\n\r\n &:focus ~ ${StyledIcon} {\r\n outline: ${(props) => (props.assistAccess ? '1px dotted #212121' : '0')};\r\n outline: ${(props) => (props.assistAccess ? '5px auto -webkit-focus-ring-color' : '0')};\r\n }\r\n\r\n &:checked {\r\n ~ ${StyledIcon} {\r\n border-color: ${(props: StyledInputProps) =>\r\n props.hasModernStyles && props.theme?.mainBorder ? props.theme.mainBorder : COLOR.BRAND.REPORTING};\r\n box-shadow: 0 0 15px rgba(4, 37, 91, 0.3);\r\n }\r\n\r\n ${(props) =>\r\n !props.hasModernStyles &&\r\n `\r\n ~ ${StyledLabelText} {\r\n color: white;\r\n background-color: ${COLOR.BRAND.REPORTING};\r\n box-shadow: 0 0 15px rgba(4, 37, 91, 0.3);\r\n }\r\n `}\r\n }\r\n`;\r\n\r\nexport const StyledChartWrapper = styled.div`\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-content: flex-start;\r\n overflow: auto;\r\n padding: 15px 0 0 0;\r\n height: calc(100% - 95px);\r\n position: relative;\r\n`;\r\n\r\nconst ChartIcon = React.forwardRef(\r\n (\r\n {\r\n iconName,\r\n iconLabel,\r\n id,\r\n onChange,\r\n onKeyDown,\r\n assistAccess,\r\n isSelected,\r\n dataTestId,\r\n imagePath,\r\n hasModernStyles,\r\n },\r\n ref,\r\n ) => (\r\n \r\n \r\n \r\n \r\n {iconLabel}\r\n \r\n \r\n ),\r\n);\r\nChartIcon.displayName = 'ChartIcon';\r\n\r\nexport default ChartIcon;\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { camelToKebab } from '../../../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport { COLOR, FONT, FONT_SIZE, SPACING } from '../../../../packages/constants';\r\nimport Star from '../../../../packages/icons/star';\r\nimport { StyledIcon as ChartIcon } from '../chart-icon/chart-icon';\r\n\r\nexport interface ChartInfoProps {\r\n onClick?: (e: any) => void;\r\n iconName: string;\r\n chartTitle: string;\r\n description: string;\r\n imagePath?: string;\r\n reportCodes?: any;\r\n hideFavourites?: boolean;\r\n isFavourite?: boolean;\r\n assistAccess: boolean;\r\n}\r\n\r\nexport interface StyledButtonProps {\r\n assistAccess: boolean;\r\n}\r\n\r\nconst CHART_INFO_WIDTH = '196px';\r\n\r\nconst StyledChartInfo = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n box-shadow: inset 7px 0 9px -7px rgba(0, 0, 0, 0.15);\r\n width: 100%;\r\n height: 100%;\r\n`;\r\n\r\nconst StyledChartInfoInner = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n padding: 23px ${SPACING.X_LARGE} ${SPACING.X_LARGE};\r\n height: 100%;\r\n`;\r\n\r\nconst StyledChartIcon = styled(ChartIcon)`\r\n margin-left: 44px;\r\n`;\r\n\r\nconst StyledChartTitle = styled.h2`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.LARGE};\r\n font-weight: 500;\r\n line-height: ${FONT_SIZE.X_LARGE};\r\n text-align: center;\r\n margin-bottom: 18px;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n width: ${CHART_INFO_WIDTH};\r\n`;\r\n\r\nconst StyledDescription = styled.p`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n line-height: ${FONT_SIZE.LARGE};\r\n margin-bottom: ${SPACING.X_LARGE};\r\n align-self: flex-start;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n width: ${CHART_INFO_WIDTH};\r\n`;\r\n\r\nconst StyledHeading = styled.h3`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 700;\r\n align-self: flex-start;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n margin-top: ${SPACING.X_SMALL};\r\n margin-bottom: ${SPACING.X_SMALL};\r\n width: ${CHART_INFO_WIDTH};\r\n`;\r\n\r\nconst StyledList = styled.ul`\r\n display: flex;\r\n flex-wrap: wrap;\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n margin: 0;\r\n padding: 0;\r\n list-style-type: none;\r\n align-self: flex-start;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n width: ${CHART_INFO_WIDTH};\r\n`;\r\n\r\nconst StyledStar = styled(Star)`\r\n width: 20px;\r\n margin-right: ${SPACING.MEDIUM};\r\n`;\r\n\r\nconst StyledFavouriteButton = styled.button`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n align-self: flex-start;\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n color: ${COLOR.MAIN.DARK_GREY};\r\n border: 0;\r\n padding: ${SPACING.SMALL} ${SPACING.SMALL} ${SPACING.SMALL} 0;\r\n margin-top: auto;\r\n cursor: pointer;\r\n\r\n &:focus {\r\n outline: ${(props: StyledButtonProps): string => (props.assistAccess ? '1px dotted #212121' : '0')};\r\n outline: ${(props: StyledButtonProps): string =>\r\n props.assistAccess ? '5px auto -webkit-focus-ring-color' : '0'};\r\n }\r\n\r\n &:hover ${StyledStar} {\r\n fill: ${COLOR.PRIMARY.YELLOW};\r\n }\r\n`;\r\n\r\nconst StyledListItem = styled.li`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n font-weight: 400;\r\n line-height: ${FONT_SIZE.LARGE};\r\n align-self: flex-start;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n margin-right: ${SPACING.X_SMALL};\r\n\r\n &::after {\r\n content: ',';\r\n }\r\n\r\n &:last-child {\r\n margin-right: 0;\r\n\r\n &::after {\r\n content: '';\r\n }\r\n }\r\n`;\r\n\r\nconst ChartInfo = React.forwardRef(\r\n (\r\n {\r\n iconName,\r\n chartTitle,\r\n description,\r\n reportCodes,\r\n isFavourite = false,\r\n hideFavourites,\r\n assistAccess,\r\n imagePath,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [favourite, setFavourite] = React.useState(isFavourite);\r\n const handleFavourite = () => {\r\n setFavourite(!favourite);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {chartTitle}\r\n \r\n {description}\r\n {reportCodes && reportCodes.length > 0 && (\r\n <>\r\n Report codes\r\n \r\n {reportCodes.map((code: string, index: number) => (\r\n {code}\r\n ))}\r\n \r\n \r\n )}\r\n {!hideFavourites && (\r\n \r\n \r\n {favourite ? 'Remove from' : 'Add to'} favourites\r\n \r\n )}\r\n \r\n \r\n );\r\n },\r\n);\r\nChartInfo.displayName = 'ChartInfo';\r\n\r\nexport default ChartInfo;\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled, { keyframes } from 'styled-components';\r\n\r\nimport { COLOR, FONT, FONT_SIZE, SPEED, THEME } from '../../packages/constants';\r\nimport {\r\n StyledModal,\r\n StyledModalTitleBar,\r\n StyledModalContent,\r\n StyledButton,\r\n StyledButtonGroup,\r\n ButtonGroupType,\r\n} from '../modal';\r\nimport { SearchFilter } from '../search-filter/search-filter';\r\nimport ChartGroup, {\r\n ChartGroupWrapper,\r\n StyledList,\r\n StyledListItem,\r\n ChartGroupTitle,\r\n HorizontalRule,\r\n StyledGroupItem,\r\n ChartGroupScroller,\r\n} from './atoms/chart-group/chart-group';\r\nimport ChartIcon, { StyledChartWrapper } from './atoms/chart-icon/chart-icon';\r\nimport ChartInfo from './atoms/chart-info/chart-info';\r\n\r\nexport interface ChartSelectorProps {\r\n chartData: any;\r\n assistAccess: boolean;\r\n hideFavourites?: boolean;\r\n hideRecent?: boolean;\r\n imagePath?: string;\r\n existingChart?: string;\r\n handleCancelButton?: (e: any) => void;\r\n handlePrimaryButton?: (e: any) => void;\r\n themeProvider?: {};\r\n hasModernStyles?: boolean;\r\n}\r\n\r\ninterface StyledContentProps {\r\n isChartSelected: boolean;\r\n imagePath?: string;\r\n}\r\n\r\nconst DefaultGroups = {\r\n NewChart: 'create-a-new-chart',\r\n NewTextPanel: 'create-a-new-text-panel',\r\n Recent: 'recent',\r\n Favourites: 'favourites',\r\n All: 'all',\r\n};\r\n\r\nconst exampleAnimation = keyframes`\r\n from {\r\n width: 0;\r\n }\r\n \r\n to {\r\n width: 240px;\r\n }\r\n`;\r\n\r\nconst StyledChartGroup = styled(ChartGroup)``;\r\n\r\nconst StyledChartInfo = styled(ChartInfo)`\r\n overflow: hidden;\r\n width: ${(props: StyledContentProps) => (props.isChartSelected ? '240px' : '0')};\r\n animation: ${exampleAnimation} ${SPEED.TRANSITION} ease-in 1 forwards;\r\n`;\r\n\r\nconst StyledContent = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n height: 100%;\r\n transition: all ${SPEED.TRANSITION} ease-in;\r\n width: ${(props: StyledContentProps) => (props.isChartSelected ? '420px' : '660px')};\r\n`;\r\n\r\nconst StyledChartSelector = styled.div`\r\n display: flex;\r\n height: 100%;\r\n width: 900px;\r\n\r\n ${StyledChartGroup} {\r\n max-width: 240px;\r\n width: 240px;\r\n min-width: 240px;\r\n }\r\n`;\r\n\r\nconst StyledFilterWrapper = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n padding: 22px;\r\n`;\r\n\r\nconst StyledMessage = styled.p`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.MEDIUM};\r\n text-align: center;\r\n color: ${COLOR.MAIN.FORM_FIELD_DARK};\r\n padding-top: 18vh;\r\n width: 100%;\r\n`;\r\n\r\nexport const ChartSelector = React.forwardRef(\r\n (\r\n {\r\n chartData,\r\n hideFavourites,\r\n hideRecent,\r\n assistAccess,\r\n imagePath,\r\n existingChart,\r\n handleCancelButton,\r\n handlePrimaryButton,\r\n hasModernStyles,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [groupItemChecked, setGroupItemChecked] = React.useState(DefaultGroups.All);\r\n const [filterValue, setFilterValue] = React.useState('');\r\n const [chartList, setChartList] = React.useState([]);\r\n const [ignoreScrollIntoView, setIgnoreScrollIntoView] = React.useState(false);\r\n // tslint:disable-next-line:no-null-keyword\r\n const filterInputRef = React.useRef(null);\r\n // tslint:disable-next-line:no-null-keyword\r\n const chartWrapperRef = React.useRef(null);\r\n\r\n // create an array of all the charts\r\n const chartsArray: any = [];\r\n\r\n // if the user is changing a chart (chart is already selected), set as temp variable\r\n let temporaryChartSelected: any = {};\r\n\r\n // loop through all the charts and unselect each\r\n const unselectAllCharts = () => {\r\n Object.keys(chartData).map((groupTitle) =>\r\n Object.keys(chartData[groupTitle].groups).map((groupItem) =>\r\n Object.keys(chartData[groupTitle].groups[groupItem].charts).map((chartItem) => {\r\n const chart = chartData[groupTitle].groups[groupItem].charts[chartItem];\r\n return (chart.selected = false);\r\n }),\r\n ),\r\n );\r\n };\r\n\r\n // loop through all of the charts and build chartsArray\r\n const renderCharts = (groupItemSelected: any) => {\r\n if (groupItemSelected === DefaultGroups.All) {\r\n Object.keys(chartData).map((groupTitle) =>\r\n Object.keys(chartData[groupTitle].groups).map((groupItem) =>\r\n Object.keys(chartData[groupTitle].groups[groupItem].charts).map((chartItem) => {\r\n const chart = chartData[groupTitle].groups[groupItem].charts[chartItem];\r\n // if a chart is selected, add it to the temp variable\r\n if (chart.selected) {\r\n temporaryChartSelected = chart;\r\n }\r\n return chartsArray.push(chart);\r\n }),\r\n ),\r\n );\r\n // TODO: add favourites & recent\r\n // } else if (groupItemSelected === DefaultGroups.Favourites) {\r\n // console.log('handle favourites'); // de-scoped for the time being\r\n // } else if (groupItemSelected === DefaultGroups.Recent) {\r\n // console.log('handle recent'); // de-scoped for the time being\r\n } else if (groupItemSelected === DefaultGroups.NewChart) {\r\n chartsArray.push(\r\n {\r\n title: 'Custom Pie Chart',\r\n description:\r\n \"If you can't find the pie chart you're looking for, you can easily build your own.\",\r\n reportCodes: [],\r\n isFavourite: false,\r\n iconName: 'custom-pie',\r\n id: 'CustomPie',\r\n },\r\n {\r\n title: 'Custom Chart',\r\n description: \"If you can't find the chart you're looking for, you can easily build your own.\",\r\n reportCodes: [],\r\n isFavourite: false,\r\n iconName: 'custom-line',\r\n id: 'Custom',\r\n },\r\n );\r\n } else if (groupItemSelected === DefaultGroups.NewTextPanel) {\r\n chartsArray.push({\r\n title: 'Text Panel',\r\n description: 'Add text to your page, customise colours, and include auto-text or custom tags.',\r\n reportCodes: [],\r\n isFavourite: false,\r\n iconName: 'text-panel',\r\n id: 'TextPanel',\r\n type: 'TEXT',\r\n });\r\n }\r\n };\r\n renderCharts(groupItemChecked);\r\n\r\n // set the initial states for selected chart & isChartSelected, if one is selected\r\n const [selectedChart, setSelectedChart] = React.useState(temporaryChartSelected);\r\n const [isChartSelected, setIsChartSelected] = React.useState(\r\n Object.prototype.hasOwnProperty.call(temporaryChartSelected, 'title'),\r\n );\r\n\r\n // handle click when user clicks on chart icon\r\n const handleChartIconChange = (chart: any) => {\r\n unselectAllCharts();\r\n chart.selected = true;\r\n setSelectedChart(chart);\r\n setIsChartSelected(true);\r\n setIgnoreScrollIntoView(true);\r\n };\r\n\r\n // handle click when user clicks on left column group name\r\n const handleGroupItemClick = (event: any, charts?: any) => {\r\n setIgnoreScrollIntoView(true);\r\n setGroupItemChecked(event.target.value);\r\n if (event.target.value !== DefaultGroups.All) {\r\n setFilterValue('');\r\n }\r\n setChartList(charts);\r\n // @ts-ignore\r\n chartWrapperRef.current.scrollTop = 0;\r\n };\r\n\r\n // handle change when user starts typing in the search-filter\r\n const handleFilterChange = (event: any) => {\r\n setFilterValue(event.target.value.toLowerCase());\r\n setGroupItemChecked(DefaultGroups.All);\r\n };\r\n\r\n // handle click when user clicks the clear search-filter button\r\n const handleFilterClearButton = () => {\r\n setFilterValue('');\r\n // @ts-ignore\r\n filterInputRef.current.focus();\r\n };\r\n\r\n // searchable charts that contains the search string in the title\r\n const filteredData = chartsArray.filter((item: any) => {\r\n const isSearching = filterValue.trim().length > 0;\r\n const isSearchable = !(item.hideInSearch && isSearching);\r\n const isSearchStringInTitle = item.title.toLowerCase().includes(filterValue);\r\n return Object.keys(item).some(() => isSearchable && isSearchStringInTitle);\r\n });\r\n\r\n // scroll to selected chart\r\n React.useEffect(() => {\r\n const selectedChart = document.querySelector(`input[value=\"${temporaryChartSelected.id}\"]`);\r\n // only scroll the view if there is a preselected chart, dont scroll if user clicks a chart\r\n if (selectedChart && !ignoreScrollIntoView) {\r\n selectedChart.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'nearest' });\r\n }\r\n });\r\n\r\n return (\r\n <>\r\n \r\n {existingChart ? 'Change Chart' : 'Add Chart'}\r\n \r\n \r\n \r\n \r\n handleGroupItemClick(e)}\r\n radioValue={DefaultGroups.NewChart}\r\n checked={groupItemChecked === DefaultGroups.NewChart}\r\n assistAccess={assistAccess}\r\n dataTestId={'chart-group-name__create-a-new-chart'}\r\n >\r\n Create a new chart\r\n \r\n handleGroupItemClick(e)}\r\n radioValue={DefaultGroups.NewTextPanel}\r\n checked={groupItemChecked === DefaultGroups.NewTextPanel}\r\n assistAccess={assistAccess}\r\n dataTestId={'chart-group-name__create-a-new-text-panel'}\r\n >\r\n Create a text panel\r\n \r\n {!hideRecent && (\r\n handleGroupItemClick(e)}\r\n radioValue={DefaultGroups.Recent}\r\n checked={groupItemChecked === DefaultGroups.Recent}\r\n assistAccess={assistAccess}\r\n dataTestId={'chart-group-name__recent'}\r\n >\r\n Recent\r\n \r\n )}\r\n {!hideFavourites && (\r\n handleGroupItemClick(e)}\r\n radioValue={DefaultGroups.Favourites}\r\n checked={groupItemChecked === DefaultGroups.Favourites}\r\n assistAccess={assistAccess}\r\n dataTestId={'chart-group-name__favourites'}\r\n >\r\n Favourites\r\n \r\n )}\r\n \r\n\r\n \r\n\r\n \r\n \r\n handleGroupItemClick(e)}\r\n radioValue={DefaultGroups.All}\r\n checked={groupItemChecked === DefaultGroups.All}\r\n assistAccess={assistAccess}\r\n dataTestId={'chart-group-name__all'}\r\n >\r\n All charts...\r\n \r\n {chartData &&\r\n Object.keys(chartData).map((groupTitle: any) => {\r\n return (\r\n \r\n {\r\n \r\n {chartData[groupTitle].title}\r\n \r\n }\r\n \r\n {Object.keys(chartData[groupTitle].groups).map(\r\n (groupItem) => {\r\n const group =\r\n chartData[groupTitle].groups[groupItem];\r\n return (\r\n \r\n handleGroupItemClick(e, group.charts)\r\n }\r\n radioValue={group.id}\r\n key={`group-item-${groupItem}`}\r\n checked={groupItemChecked === group.id}\r\n assistAccess={assistAccess}\r\n dataTestId={`chart-group-name__${group.id}`}\r\n >\r\n {group.title}\r\n \r\n );\r\n },\r\n )}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {Object.values(DefaultGroups).includes(groupItemChecked) ? (\r\n filteredData.length >= 1 ? (\r\n filteredData.map((chart: any) => {\r\n return (\r\n handleChartIconChange(chart)}\r\n key={chart.id}\r\n assistAccess={assistAccess}\r\n isSelected={chart.selected}\r\n dataTestId={`chart-icon__${chart.id}`}\r\n hasModernStyles={hasModernStyles}\r\n />\r\n );\r\n })\r\n ) : (\r\n \r\n {groupItemChecked === DefaultGroups.Recent\r\n ? 'No charts have been used recently'\r\n : groupItemChecked === DefaultGroups.Favourites\r\n ? 'No favourites have been added'\r\n : `No charts found matching \"${filterValue}\"`}\r\n \r\n )\r\n ) : (\r\n chartList.map((chart: any) => {\r\n return (\r\n handleChartIconChange(chart)}\r\n key={chart.id}\r\n assistAccess={assistAccess}\r\n isSelected={chart.selected}\r\n dataTestId={`chart-icon__${chart.id}`}\r\n hasModernStyles={hasModernStyles}\r\n />\r\n );\r\n })\r\n )}\r\n \r\n \r\n\r\n {isChartSelected && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {existingChart ? 'Select' : 'Add'}\r\n \r\n \r\n Cancel\r\n \r\n \r\n \r\n \r\n );\r\n },\r\n);\r\nChartSelector.displayName = 'ChartSelector';\r\n","import * as React from 'react';\r\n\r\nimport { darken } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, RADIUS, SPACING } from '../../packages/constants';\r\n\r\ninterface TabsProps {\r\n children: React.ReactNode;\r\n onClick?: (e: any) => void;\r\n className?: string;\r\n}\r\n\r\ninterface TabListContainerProps {\r\n children: React.ReactNode;\r\n}\r\n\r\ninterface TabListProps {\r\n children: React.ReactNode;\r\n spacingRight?: number;\r\n}\r\n\r\ninterface TabListItemProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\ninterface TabTitleProps {\r\n children: React.ReactNode;\r\n onClick: (e: any) => void;\r\n selected: boolean;\r\n dataId: string;\r\n firstTab?: boolean;\r\n lastTab?: boolean;\r\n title: string;\r\n}\r\n\r\ninterface TabContentProps {\r\n children: React.ReactNode;\r\n selected: boolean;\r\n className?: string;\r\n}\r\n\r\ninterface TabListStyleProps {\r\n spacingRight?: number; // this number would typically be determined by the width of an 'add tab' button occupying the space if there is one\r\n}\r\n\r\ninterface TabTitleStyleProps {\r\n selected: boolean;\r\n firstTab?: boolean;\r\n lastTab?: boolean;\r\n}\r\n\r\nconst StyledTabs = styled.div``;\r\nconst StyledList = styled.ul`\r\n display: inline-flex;\r\n max-width: calc(100% - ${(props) => (props.spacingRight ? props.spacingRight : `0`)}px);\r\n overflow: hidden;\r\n`;\r\nconst StyledTabListContainer = styled.div`\r\n overflow: hidden;\r\n margin-bottom: -1px;\r\n`;\r\n\r\nconst StyledListItem = styled.li`\r\n &:not(:first-child) {\r\n margin-left: -1px;\r\n }\r\n`;\r\nconst StyledTitle = styled.button`\r\n margin: 0px;\r\n border-top: 1px solid ${COLOR.MAIN.MEDIUM_GREY};\r\n border-top-left-radius: ${(props) => (props.firstTab ? RADIUS.FORM_FIELD : `0`)};\r\n border-top-right-radius: ${(props) => (props.lastTab ? RADIUS.FORM_FIELD : `0`)};\r\n border-right: 1px solid ${COLOR.MAIN.MEDIUM_GREY};\r\n border-bottom: ${(props) =>\r\n props.selected ? `1px solid ${COLOR.PRIMARY.WHITE}` : `1px solid ${COLOR.MAIN.MEDIUM_GREY}`};\r\n border-left: 1px solid ${COLOR.MAIN.MEDIUM_GREY};\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n font-weight: 700;\r\n line-height: 20px;\r\n padding: ${SPACING.X_SMALL} ${SPACING.MEDIUM};\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n color: ${(props) => (props.selected && props.theme ? props.theme.main : COLOR.MAIN.LABEL_TEXT)};\r\n cursor: ${(props) => (props.selected ? 'default' : 'pointer')};\r\n max-width: 130px;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n\r\n &:hover {\r\n background-color: ${(props) => (props.selected ? COLOR.PRIMARY.WHITE : darken(0.1, COLOR.PRIMARY.WHITE))};\r\n }\r\n`;\r\nconst StyledContent = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n border: 1px solid ${COLOR.MAIN.MEDIUM_GREY};\r\n border-top-right-radius: ${RADIUS.FORM_FIELD};\r\n border-bottom-left-radius: ${RADIUS.FORM_FIELD};\r\n border-bottom-right-radius: ${RADIUS.FORM_FIELD};\r\n padding: ${SPACING.MEDIUM} ${SPACING.SMALL};\r\n display: ${(props) => (props.selected ? 'block' : 'none')};\r\n`;\r\n\r\nconst Tabs = React.forwardRef(({ children, ...props }, ref) => (\r\n \r\n {children}\r\n \r\n));\r\nTabs.displayName = 'Tabs';\r\n\r\nconst TabListContainer = ({ children, ...props }: TabListContainerProps) => (\r\n {children}\r\n);\r\nconst TabList = ({ children, ...props }: TabListProps) => {children};\r\nconst TabListItem = ({ children, ...props }: TabListItemProps) => (\r\n {children}\r\n);\r\n\r\nconst TabTitle = React.forwardRef(\r\n ({ children, firstTab, lastTab, selected, dataId, title, ...props }, ref) => (\r\n \r\n {children}\r\n \r\n ),\r\n);\r\nTabTitle.displayName = 'TabTitle';\r\n\r\nconst TabContent = React.forwardRef(({ children, selected, ...props }, ref) => (\r\n \r\n {children}\r\n \r\n));\r\nTabContent.displayName = 'TabContent';\r\n\r\nexport default Tabs;\r\nexport { TabListContainer, TabList, TabListItem, TabTitle, TabContent };\r\n","import Tabs from './tabs';\r\nexport * from './tabs';\r\nexport default Tabs;\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { Color } from '../../color-picker-config';\r\n\r\nexport interface ColorPickerPaletteProps {\r\n color: string;\r\n palette: {\r\n [colorName: string]: Color;\r\n };\r\n dataId: string;\r\n onColorSelect: (color: any) => void;\r\n}\r\n\r\ninterface StyledShadeProps {\r\n color: string;\r\n}\r\n\r\nconst StyledColorPickerPalette = styled.table`\r\n padding: 16px;\r\n border-collapse: separate;\r\n width: 100%;\r\n`;\r\n\r\nconst StyledColorName = styled.td`\r\n font: 400 12px open-sans;\r\n width: 8em;\r\n`;\r\n\r\nconst StyledShade = styled.td`\r\n width: 30px;\r\n height: 20px;\r\n background-color: ${(props) => props.color};\r\n cursor: pointer;\r\n`;\r\n\r\nconst StyledDiv = styled.div`\r\n width: 100%;\r\n height: 100%;\r\n position: relative;\r\n ${StyledShade}:hover &::before, ${StyledShade}.active &::before {\r\n content: '';\r\n display: block;\r\n border: 2px solid #ffffff;\r\n position: absolute;\r\n top: -1px;\r\n bottom: -1px;\r\n left: -1px;\r\n right: -1px;\r\n }\r\n`;\r\n\r\nconst StyledDivider = styled.td`\r\n width: 5px;\r\n height: 20px;\r\n`;\r\n\r\nexport const ColorPickerPalette: React.FC> = ({\r\n color,\r\n palette,\r\n dataId,\r\n onColorSelect,\r\n ...props\r\n}) => {\r\n const tableRows = Object.keys(palette).map((colorName) => (\r\n \r\n {colorName}\r\n \r\n onColorSelect(palette[colorName].base)}\r\n >\r\n \r\n \r\n \r\n {palette[colorName].shades.map((colorShade, index) => (\r\n onColorSelect(colorShade)}\r\n >\r\n \r\n \r\n ))}\r\n \r\n {palette[colorName].tints.map((tint, index) => (\r\n onColorSelect(tint)}\r\n >\r\n \r\n \r\n ))}\r\n \r\n ));\r\n return (\r\n \r\n {tableRows}\r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { InjectedColorProps } from 'react-color';\r\nimport { EditableInput } from 'react-color/lib/components/common';\r\nimport styled from 'styled-components';\r\n\r\nimport { isValidColorHex } from '../../helper';\r\n\r\nexport interface CustomColorPickerFieldsProps extends InjectedColorProps {\r\n onChange: (color: any) => void;\r\n}\r\n\r\nconst StyledCustomColorPickerFields = styled.div`\r\n width: 80px;\r\n height: 160px;\r\n position: relative;\r\n`;\r\n\r\nconst styles = {\r\n fieldsWrap: {\r\n position: 'relative',\r\n display: 'flex',\r\n flexDirection: 'row-reverse',\r\n },\r\n input: {\r\n height: 30,\r\n width: 65,\r\n border: '1px solid #f0f0f0',\r\n paddingLeft: 5,\r\n marginBottom: '10px',\r\n boxSizing: 'border-box',\r\n },\r\n label: {\r\n position: 'absolute',\r\n top: '5px',\r\n left: '0px',\r\n width: '14px',\r\n textTransform: 'uppercase',\r\n height: '18px',\r\n lineHeight: '22px',\r\n fontSize: '14px',\r\n },\r\n} as const;\r\n\r\nexport const CustomColorPickerFields = React.forwardRef(\r\n ({ hex, rgb, onChange, ...props }, ref) => {\r\n const handleChange = (data: any) => {\r\n if (data['#']) {\r\n isValidColorHex(data['#']) &&\r\n onChange({\r\n hex: data['#'],\r\n source: 'hex',\r\n });\r\n } else if (data['R'] || data['G'] || data['B']) {\r\n onChange({\r\n r: data['R'] || rgb?.r,\r\n g: data['G'] || rgb?.g,\r\n b: data['B'] || rgb?.b,\r\n source: 'rgb',\r\n });\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n },\r\n);\r\n\r\nCustomColorPickerFields.displayName = 'CustomColorPickerFields';\r\n","import tinycolor from 'tinycolor2';\r\n\r\n// https://github.com/casesandberg/react-color/blob/master/LICENSE\r\nexport const isValidColorHex = (hex: string) => {\r\n if (hex === 'transparent') {\r\n return true;\r\n }\r\n // disable hex4 and hex8\r\n const lh = String(hex).charAt(0) === '#' ? 1 : 0;\r\n return hex.length !== 4 + lh && hex.length < 7 + lh && tinycolor(hex).isValid();\r\n};\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\n\r\nimport { InjectedColorProps } from 'react-color';\r\n\r\nconst StyledCustomColorPickerPointer = styled.div`\r\n position: absolute;\r\n cursor: pointer;\r\n height: 3px;\r\n width: 19px;\r\n top: -3px;\r\n left: -1px;\r\n right: -1px;\r\n border: 1px solid #000;\r\n background: #fff;\r\n opacity: 0.8;\r\n`;\r\n\r\nconst CustomColorPickerPointer = () => {\r\n return ;\r\n};\r\n\r\nconst StyledCustomColorPickerPointerCircle = styled.div`\r\n width: 12px;\r\n height: 12px;\r\n border-radius: 6px;\r\n box-shadow: ${({ hsl }) => {\r\n const isLight = (hsl?.l || 1) > 0.5;\r\n return isLight ? 'inset 0 0 0 1px #000' : 'inset 0 0 0 1px #fff';\r\n }};\r\n transform: translate(-6px, -6px);\r\n`;\r\n\r\nconst CustomColorPickerPointerCircle = ({ hsl }: InjectedColorProps) => (\r\n \r\n);\r\n\r\nexport { CustomColorPickerPointer, CustomColorPickerPointerCircle };\r\n","import * as React from 'react';\r\n\r\nimport { Color, CustomPicker, InjectedColorProps } from 'react-color';\r\nimport { Hue, Saturation } from 'react-color/lib/components/common';\r\nimport styled from 'styled-components';\r\n\r\nimport { CustomColorPickerFields } from './custom-color-picker-fields';\r\nimport { CustomColorPickerPointer, CustomColorPickerPointerCircle } from './custom-color-picker-pointer';\r\n\r\nexport interface SwatchProps {\r\n color: Color;\r\n}\r\n\r\nexport interface CustomColorPickerProps extends InjectedColorProps {\r\n color?: Color;\r\n dataId: string;\r\n onChange: (color: any) => void;\r\n}\r\n\r\nconst StyledSwatch = styled.div`\r\n height: 60px;\r\n width: 80px;\r\n background: ${(props) => props.color};\r\n`;\r\n\r\nconst StyledHue = styled.div`\r\n position: relative;\r\n width: 19px;\r\n margin-left: 5px;\r\n border: 1px solid #b3b3b3;\r\n margin-bottom: 2px solid #f0f0f0;\r\n`;\r\n\r\nconst StyledSaturation = styled.div`\r\n width: 250px;\r\n position: relative;\r\n border: 1px solid #b3b3b3;\r\n border-bottom: 2px solid #f0f0f0;\r\n overflow: hidden;\r\n`;\r\n\r\nconst Controls = styled.div`\r\n flex: 1;\r\n margin-left: 10px;\r\n`;\r\n\r\nconst StyledCustomColorPicker = styled.div`\r\n padding: 16px;\r\n display: flex;\r\n`;\r\n\r\nconst CustomColorPicker = React.forwardRef(\r\n ({ dataId, color, onChange, ...props }, ref) => {\r\n return (\r\n \r\n \r\n {/* @ts-ignore */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n },\r\n);\r\n\r\nCustomColorPicker.displayName = 'CustomColorPicker';\r\n\r\nexport const SpotlightPicker = CustomPicker(CustomColorPicker);\r\n","import * as React from 'react';\r\nimport { useEffect, useState } from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { camelToKebab } from '../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport { COLOR } from '../../packages/constants';\r\nimport Tabs, { TabContent, TabListContainer, TabList, TabListItem, TabTitle } from '../tabs';\r\nimport { ColorPickerPalette } from './atoms/color-picker-palette/color-picker-palette';\r\nimport { SpotlightPicker } from './atoms/custom-color-picker';\r\nimport { Color } from './color-picker-config';\r\nimport defaultPalettes from './color-picker-config.json';\r\n\r\nexport interface ColorPickerProps {\r\n color: string;\r\n currentPalette?: string;\r\n palettes?: {\r\n [paletteName: string]: {\r\n [colorName: string]: Color;\r\n };\r\n };\r\n dataId?: string;\r\n onColorChange: (color: any) => void;\r\n}\r\n\r\nexport interface ExtendedColorPickerProps extends ColorPickerProps {\r\n selectedTab?: number;\r\n ref: any;\r\n onTabChange?: (newIndex: number) => void;\r\n}\r\n\r\nconst defaultTabData = [\r\n {\r\n id: 'tab-1',\r\n title: 'Standard',\r\n paletteName: 'Standard',\r\n content: 'Standard color palette',\r\n },\r\n {\r\n id: 'tab-2',\r\n title: 'Deep',\r\n paletteName: 'Deep',\r\n content: 'Deep color palette',\r\n },\r\n {\r\n id: 'tab-3',\r\n title: 'Custom',\r\n paletteName: '',\r\n content: 'Custom color picker',\r\n },\r\n];\r\n\r\nconst StyledTabListContainer = styled(TabListContainer)`\r\n margin: -2px;\r\n`;\r\n\r\nconst StyledTabList = styled(TabList)`\r\n max-width: unset;\r\n`;\r\n\r\nconst StyledListItem = styled(TabListItem)`\r\n &:not(:first-child) {\r\n margin-left: -2px;\r\n }\r\n\r\n &:focus-within {\r\n z-index: 1000;\r\n }\r\n`;\r\n\r\nconst StyledTabTitle = styled(TabTitle)`\r\n border-width: 2px;\r\n`;\r\n\r\nconst StyledTabContent = styled(TabContent)`\r\n border: none;\r\n border-top: 2px solid ${COLOR.MAIN.MEDIUM_GREY};\r\n border-radius: unset;\r\n padding: 0;\r\n`;\r\n\r\nconst StyledColorPicker = styled.div`\r\n width: 390px;\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n border: 2px solid ${COLOR.MAIN.MEDIUM_GREY};\r\n border-radius: 4px;\r\n`;\r\n\r\nexport const ColorPicker = React.forwardRef(\r\n (\r\n {\r\n color,\r\n palettes,\r\n currentPalette,\r\n selectedTab = 0,\r\n dataId = 'color-picker',\r\n onColorChange,\r\n onTabChange,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [tabData, setTabData] = useState(defaultTabData);\r\n const [tabIndex, setTabIndex] = useState(\r\n // Default to last tab if selected tab exceeds number of tabs\r\n (selectedTab ?? tabData.length - 1) < tabData.length ? selectedTab : tabData.length - 1,\r\n );\r\n const [currentColor, setCurrentColor] = useState(color);\r\n\r\n const colorPalettes = palettes ?? defaultPalettes.palettes;\r\n\r\n const handleTabChange = (newTabIndex: number) => {\r\n setTabIndex(newTabIndex);\r\n onTabChange && onTabChange(newTabIndex);\r\n };\r\n\r\n const handleColorChange = (color: any) => {\r\n const hex = color.hex ? color.hex : color;\r\n\r\n setCurrentColor(hex);\r\n onColorChange(hex);\r\n };\r\n\r\n useEffect(() => {\r\n const prependCurrentPaletteTab = () => {\r\n const currentPaletteTab = {\r\n id: 'tab-0',\r\n title: 'Current Palette',\r\n paletteName: currentPalette ?? '',\r\n content: 'Current color palette',\r\n };\r\n\r\n const isNotStandardPalette = currentPalette && currentPalette !== 'Standard';\r\n const hasNoCurrentPaletteTab = !tabData.map((s) => s.id).includes(currentPaletteTab.id);\r\n const canPrependTab =\r\n isNotStandardPalette &&\r\n hasNoCurrentPaletteTab &&\r\n Object.keys(colorPalettes).includes(currentPalette);\r\n if (canPrependTab) {\r\n setTabData([currentPaletteTab, ...defaultTabData]);\r\n setTabIndex(selectedTab ?? 0);\r\n }\r\n };\r\n\r\n prependCurrentPaletteTab();\r\n }, [currentPalette, colorPalettes, selectedTab, tabData]);\r\n\r\n useEffect(() => {\r\n // Default to last tab if selected tab exceeds number of tabs\r\n setTabIndex((selectedTab ?? tabData.length - 1) < tabData.length ? selectedTab : tabData.length - 1);\r\n }, [selectedTab, tabData]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {tabData.map((tab: any, index: number) => (\r\n \r\n handleTabChange(index)}\r\n title={tab.title}\r\n >\r\n {tab.title || 'tab'}\r\n \r\n \r\n ))}\r\n \r\n \r\n {tabData.map((tab: any, index: number) => (\r\n \r\n {tab.title === 'Custom' ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n ))}\r\n \r\n \r\n );\r\n },\r\n);\r\n\r\nColorPicker.displayName = 'ColorPicker';\r\n","import * as React from 'react';\r\nimport { useCallback, useEffect, useState } from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { useClickOutside } from '../../../ModernScripts/Spotlight/Hooks/useClickOutside';\r\nimport { ColorPicker, ColorPickerProps } from '../color-picker/color-picker';\r\n\r\nexport interface SwatchProps {\r\n color: string;\r\n width?: number;\r\n height?: number;\r\n}\r\n\r\nexport interface ColorPickerPopoverProps extends ColorPickerProps {\r\n isOpen?: boolean;\r\n width?: number;\r\n height?: number;\r\n dataId?: string;\r\n}\r\n\r\nconst Swatch = styled.div`\r\n display: inline-block;\r\n width: ${({ width }) => `${width}px`};\r\n height: ${({ height }) => `${height}px`};\r\n border: 1px solid #ededed;\r\n border-radius: 3px;\r\n background-color: ${(props) => props.color};\r\n cursor: pointer;\r\n`;\r\n\r\nconst StyledColorPicker = styled(ColorPicker)`\r\n position: absolute;\r\n z-index: 1000;\r\n`;\r\n\r\nconst StyledColorPickerPopover = styled.div``;\r\n\r\nexport const ColorPickerPopover = React.forwardRef(\r\n (\r\n {\r\n color,\r\n currentPalette,\r\n palettes,\r\n isOpen = false,\r\n width = 50,\r\n height = 25,\r\n dataId = 'color-picker-popover',\r\n onColorChange,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const colorPickerRef = React.useRef();\r\n const swatchRef = React.useRef();\r\n const [showColorPicker, setShowColorPicker] = useState(isOpen);\r\n const [currentColor, setCurrentColor] = useState(color);\r\n const [currentTab, setCurrentTab] = useState(0);\r\n\r\n const toggleColorPicker = useCallback(\r\n () => setShowColorPicker(!showColorPicker),\r\n [showColorPicker, setShowColorPicker],\r\n );\r\n\r\n const handleColorChange = (color: any) => {\r\n const hex = color.hex ? color.hex : color;\r\n\r\n setCurrentColor(hex);\r\n onColorChange(hex);\r\n };\r\n\r\n useEffect(() => {\r\n function handleKeyListener(e: any) {\r\n const canCloseOnEsc = showColorPicker && e.key === 'Escape';\r\n canCloseOnEsc && setShowColorPicker(false);\r\n\r\n const isSwatchInFocus = document.activeElement === swatchRef.current;\r\n const canToggleOnSpace = isSwatchInFocus && e.key === ' ';\r\n canToggleOnSpace && toggleColorPicker();\r\n }\r\n\r\n document.addEventListener('keydown', handleKeyListener);\r\n\r\n return function cleanupKeyListener() {\r\n document.removeEventListener('keydown', handleKeyListener);\r\n };\r\n }, [showColorPicker, setShowColorPicker, toggleColorPicker]);\r\n\r\n useEffect(() => {\r\n setCurrentColor(color);\r\n }, [color]);\r\n\r\n useClickOutside(colorPickerRef, toggleColorPicker);\r\n\r\n return (\r\n \r\n \r\n {showColorPicker && (\r\n \r\n )}\r\n \r\n );\r\n },\r\n);\r\n\r\nColorPickerPopover.displayName = 'ColorPickerPopover';\r\n","import * as React from 'react';\r\n\r\nimport { transparentize } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT, FONT_SIZE, SPACING } from '../../../../packages/constants';\r\nimport { ChevronRight } from '../../../../packages/icons';\r\n\r\ninterface ItemGroupProps {\r\n onChange?: (e: any) => void;\r\n itemData?: any;\r\n hideFavourites?: boolean;\r\n hideRecent?: boolean;\r\n checked?: any;\r\n assistAccess?: boolean;\r\n}\r\n\r\ninterface DataTestIdProps {\r\n dataTestId: string;\r\n}\r\n\r\ninterface StyledGroupItemProps {\r\n children: React.ReactNode;\r\n checked: boolean;\r\n radioValue: string;\r\n assistAccess?: boolean;\r\n dataTestId?: string;\r\n onChange?: (e: any) => void;\r\n onClick?: (e: any) => void;\r\n ref?: any;\r\n}\r\n\r\ninterface StyledInputProps {\r\n assistAccess?: boolean;\r\n ref?: any;\r\n rel?: string;\r\n autoComplete?: string;\r\n dataTestId?: string;\r\n}\r\n\r\ninterface StyledLabelTextProps {\r\n checked?: boolean;\r\n assistAccess?: boolean;\r\n}\r\n\r\nexport const ItemGroupScroller = styled.div`\r\n margin-top: ${SPACING.LARGE};\r\n height: 100%;\r\n overflow: auto;\r\n padding-top: 5px;\r\n padding-left: ${SPACING.SMALL};\r\n`;\r\n\r\nexport const ItemGroupTitle = styled.h3`\r\n font-weight: 700;\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n color: #6f788a;\r\n padding: 5px;\r\n margin: 0;\r\n margin-top: ${SPACING.MEDIUM};\r\n`;\r\n\r\nexport const StyledListItem = styled.li`\r\n list-style-type: none;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 1;\r\n`;\r\n\r\nexport const StyledList = styled.ul`\r\n list-style-type: none;\r\n margin: 0 0 ${SPACING.MEDIUM};\r\n padding: 0;\r\n\r\n ${StyledListItem} {\r\n margin-right: ${SPACING.MEDIUM};\r\n\r\n ${StyledListItem} {\r\n margin-right: 0;\r\n }\r\n }\r\n`;\r\n\r\nconst ItemGroupWrapperPaddingTop = `26px`;\r\n\r\nexport const ItemGroupWrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n background-color: ${COLOR.MODAL.MODAL_PANEL_ACCENT};\r\n padding: ${ItemGroupWrapperPaddingTop} 0 0 ${SPACING.SMALL};\r\n width: 240px;\r\n height: auto;\r\n\r\n > ${StyledList}:first-child {\r\n margin-left: ${SPACING.SMALL};\r\n }\r\n`;\r\n\r\nexport const HorizontalRule = styled.hr`\r\n border: 0;\r\n border-bottom: 1px solid #b2bccd;\r\n width: calc(100% - ${SPACING.X_LARGE});\r\n margin: ${SPACING.MEDIUM} ${SPACING.X_LARGE} ${SPACING.MEDIUM} ${SPACING.SMALL};\r\n`;\r\n\r\nconst StyledLabel = styled.label`\r\n background-color: ${COLOR.MODAL.MODAL_PANEL_ACCENT};\r\n position: relative;\r\n`;\r\n\r\nconst StyledLabelText = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n background-color: ${(props: StyledLabelTextProps): string => (props.checked ? COLOR.PRIMARY.WHITE : 'transparent')};\r\n color: ${COLOR.BRAND.REPORTING};\r\n padding: 5px;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n background-color: ${(props: StyledLabelTextProps): string =>\r\n props.checked ? COLOR.PRIMARY.WHITE : transparentize('0.5', COLOR.PRIMARY.WHITE)};\r\n }\r\n`;\r\n\r\nconst StyledChevron = styled(ChevronRight)`\r\n fill: #b2bccd;\r\n height: 12px;\r\n width: 12px;\r\n opacity: ${(props: StyledLabelTextProps): number => (props.checked ? 1 : 0)};\r\n`;\r\n\r\nconst Radio = styled.input.attrs(({ dataTestId }) => ({\r\n 'data-test-id': dataTestId,\r\n}))``;\r\n\r\nconst StyledRadio = styled(Radio)`\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n opacity: 0;\r\n z-index: -1;\r\n\r\n &:focus ~ ${StyledLabelText} {\r\n outline: ${(props: StyledInputProps): string => (props.assistAccess ? '1px dotted #212121' : '0')};\r\n outline: ${(props: StyledInputProps): string =>\r\n props.assistAccess ? '5px auto -webkit-focus-ring-color' : '0'};\r\n }\r\n`;\r\n\r\nexport const StyledGroupItem = React.forwardRef(\r\n ({ children, onChange, onClick, radioValue, checked, assistAccess, dataTestId, ...props }, ref) => (\r\n \r\n \r\n \r\n \r\n {children} \r\n \r\n \r\n \r\n ),\r\n);\r\nStyledGroupItem.displayName = 'StyledGroupItem';\r\n\r\nconst ItemGroup = React.forwardRef(\r\n ({ onChange, itemData, hideFavourites, hideRecent, checked, assistAccess, ...props }, ref) => (\r\n \r\n \r\n \r\n Create a new item\r\n \r\n {!hideRecent && (\r\n \r\n Recent\r\n \r\n )}\r\n {!hideFavourites && (\r\n \r\n Favourites\r\n \r\n )}\r\n \r\n\r\n \r\n \r\n \r\n \r\n All...\r\n \r\n {itemData &&\r\n Object.keys(itemData).map((groupTitle) => {\r\n return (\r\n \r\n {itemData[groupTitle].title}\r\n \r\n {Object.keys(itemData[groupTitle].groups).map((groupItem) => {\r\n return (\r\n \r\n {itemData[groupTitle].groups[groupItem].title}\r\n \r\n );\r\n })}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n ),\r\n);\r\nItemGroup.displayName = 'ItemGroup';\r\n\r\nexport default ItemGroup;\r\n","import * as React from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPEED, Theme } from '../../packages/constants';\r\n\r\nexport interface GalleryIconProps {\r\n iconName: string;\r\n iconLabel: string;\r\n id: string;\r\n onChange: (e: any) => void;\r\n isSelected: boolean;\r\n assistAccess?: boolean;\r\n dataTestId?: string;\r\n imagePath?: string;\r\n onKeyDown?: (e: any) => void;\r\n themeProvider?: {};\r\n hasModernStyles?: boolean;\r\n}\r\n\r\ninterface StyledIconProps {\r\n iconName: string;\r\n imagePath?: string;\r\n assistAccess?: boolean;\r\n}\r\n\r\ninterface StyledLabelProps {\r\n dataTestId?: string;\r\n}\r\n\r\ninterface StyledInputProps {\r\n assistAccess?: boolean;\r\n ref?: any;\r\n rel?: string;\r\n autoComplete?: string;\r\n hasModernStyles?: boolean;\r\n theme?: Theme;\r\n}\r\n\r\ninterface DataTestIdProps {\r\n dataTestId: string;\r\n}\r\n\r\nconst GalleryIconWrapper = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n margin-bottom: 100px;\r\n width: 33%;\r\n flex-basis: 33%;\r\n`;\r\n\r\nconst Label = styled.label.attrs(({ dataTestId }) => ({\r\n 'data-test-id': dataTestId,\r\n}))``;\r\n\r\nconst StyledLabel = styled(Label)`\r\n width: 100px;\r\n height: 100px;\r\n display: block;\r\n position: relative;\r\n cursor: pointer;\r\n`;\r\n\r\nexport const StyledIcon = styled.div`\r\n box-sizing: border-box;\r\n margin-bottom: 12px;\r\n border: 3px solid ${COLOR.MAIN.ICON_BACKGROUND};\r\n border-radius: 15px;\r\n width: 100px;\r\n height: 100px;\r\n background-image: url(${(props) => `${props.imagePath ?? ''}${props.iconName}.svg`});\r\n background-color: ${COLOR.MAIN.ICON_BACKGROUND};\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n background-size: 120% auto;\r\n box-shadow: 2px 2px 4px rgba(4, 37, 91, 0.15);\r\n transition: box-shadow ${SPEED.TRANSITION};\r\n`;\r\n\r\nconst StyledLabelText = styled.div`\r\n box-sizing: border-box;\r\n position: relative;\r\n max-height: 80px;\r\n overflow: hidden;\r\n color: black;\r\n border-radius: 3px;\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-family: sans-serif;\r\n line-height: ${FONT_SIZE.LARGE};\r\n padding: 5px 2px;\r\n text-align: center;\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n box-shadow: 0 0 15px rgba(4, 37, 91, 0);\r\n`;\r\n\r\nconst StyledFadeDiv = styled.div`\r\n position: absolute;\r\n top: 60px;\r\n left: 0px;\r\n right: 0px;\r\n height: 20px;\r\n background: linear-gradient(0deg, #ffffff, rgba(255, 255, 255, 0));\r\n`;\r\n\r\nconst StyledRadio = styled.input`\r\n position: absolute;\r\n opacity: 0;\r\n top: 0;\r\n left: 0;\r\n z-index: -1;\r\n\r\n &:hover {\r\n ~ ${StyledIcon} {\r\n box-shadow: 0 0 15px rgba(4, 37, 91, 0.3);\r\n }\r\n }\r\n\r\n &:focus ~ ${StyledIcon} {\r\n outline: ${(props) => (props.assistAccess ? '1px dotted #212121' : '0')};\r\n outline: ${(props) => (props.assistAccess ? '5px auto -webkit-focus-ring-color' : '0')};\r\n }\r\n\r\n &:checked {\r\n ~ ${StyledIcon} {\r\n border-color: ${(props: StyledInputProps) =>\r\n props.hasModernStyles && props.theme?.mainBorder ? props.theme.mainBorder : COLOR.BRAND.REPORTING};\r\n box-shadow: 0 0 15px rgba(4, 37, 91, 0.3);\r\n }\r\n\r\n ${(props) =>\r\n !props.hasModernStyles &&\r\n `\r\n ~ ${StyledLabelText} {\r\n color: white;\r\n background-color: ${COLOR.BRAND.REPORTING};\r\n box-shadow: 0 0 15px rgba(4, 37, 91, 0.3);\r\n }\r\n \r\n ~ ${StyledLabelText} ${StyledFadeDiv} {\r\n background: linear-gradient(0deg, ${COLOR.BRAND.REPORTING}, rgba(255, 255, 255, 0));\r\n }\r\n `}\r\n }\r\n`;\r\n\r\nexport const StyledGalleryIconWrapper = styled.div`\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-content: flex-start;\r\n overflow: auto;\r\n padding: 15px 0 0 0;\r\n height: calc(100% - 95px);\r\n position: relative;\r\n`;\r\n\r\nexport const GalleryIcon = React.forwardRef(\r\n (\r\n {\r\n iconName,\r\n iconLabel,\r\n id,\r\n onChange,\r\n onKeyDown,\r\n assistAccess,\r\n isSelected,\r\n dataTestId,\r\n imagePath,\r\n hasModernStyles,\r\n },\r\n ref,\r\n ) => (\r\n \r\n \r\n \r\n \r\n \r\n {iconLabel}\r\n \r\n \r\n \r\n \r\n ),\r\n);\r\nGalleryIcon.displayName = 'GalleryIcon';\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT, FONT_SIZE, SPEED } from '../../packages/constants';\r\nimport { camelToKebab } from '../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport ItemGroup, {\r\n ItemGroupWrapper,\r\n StyledList,\r\n StyledListItem,\r\n ItemGroupTitle,\r\n HorizontalRule,\r\n StyledGroupItem,\r\n ItemGroupScroller,\r\n} from './atoms/item-group/item-group';\r\nimport { GalleryIcon, StyledGalleryIconWrapper } from '../gallery-icon/gallery-icon';\r\nimport { SearchFilter } from '../search-filter/search-filter';\r\n\r\ninterface Action {\r\n type: TType;\r\n payload?: TPayload;\r\n}\r\n\r\ninterface ItemDataItem {\r\n type: string;\r\n title: string;\r\n description: string;\r\n iconName: string;\r\n id: string;\r\n selected?: boolean;\r\n}\r\n\r\ninterface ItemDataGroup {\r\n title: string;\r\n id: string;\r\n items: ItemDataItem[];\r\n}\r\n\r\ninterface ItemDataSection {\r\n section: 'main' | 'top';\r\n title: string;\r\n groups: ItemDataGroup[];\r\n}\r\n\r\nexport type ItemData = ItemDataSection[];\r\n\r\nexport enum GalleryBrowserActionTypes {\r\n SELECTED_ITEM = 'SELECTED_ITEM',\r\n}\r\n\r\nexport interface GalleryBrowserProps {\r\n itemData: ItemDataSection[];\r\n /**\r\n * The name of the items being displayed, e.g. Chart or Page.\r\n */\r\n itemNoun: string;\r\n /**\r\n * The plural of the items being displayed, e.g. Charts or Pages.\r\n * Used for empty states / error messages etc.\r\n */\r\n itemNounPlural: string;\r\n assistAccess: boolean;\r\n hideFavourites?: boolean;\r\n hideRecent?: boolean;\r\n imagePath?: string;\r\n themeProvider?: {};\r\n galleryWidth?: string;\r\n /**\r\n * External function to dispatch actions to\r\n */\r\n actionHandler?: (action: Action) => Promise;\r\n hasModernStyles?: boolean;\r\n}\r\n\r\ninterface StyledContentProps {\r\n imagePath?: string;\r\n width?: string;\r\n}\r\n\r\nconst StyledItemGroup = styled(ItemGroup)``;\r\n\r\nconst StyledContent = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n height: 100%;\r\n transition: all ${SPEED.TRANSITION} ease-in;\r\n width: ${(props: StyledContentProps) => (props.width ? props.width : '660px')};\r\n`;\r\n\r\nconst StyledGalleryBrowser = styled.div`\r\n display: flex;\r\n height: 100%;\r\n width: auto;\r\n\r\n ${StyledItemGroup} {\r\n max-width: 240px;\r\n width: 240px;\r\n min-width: 240px;\r\n }\r\n`;\r\n\r\nconst StyledFilterWrapper = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n padding: 22px;\r\n`;\r\n\r\nconst StyledMessage = styled.p`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.MEDIUM};\r\n text-align: center;\r\n color: ${COLOR.MAIN.FORM_FIELD_DARK};\r\n padding-top: 18vh;\r\n width: 100%;\r\n`;\r\n\r\n// loop through all of the items and build itemsArray\r\nconst getAllItems = (itemData: ItemData) => {\r\n const arr = [];\r\n for (let ii = 0; ii < itemData.length; ii++) {\r\n for (let jj = 0; jj < itemData[ii].groups.length; jj++) {\r\n for (let kk = 0; kk < itemData[ii].groups[jj].items.length; kk++) {\r\n const item = itemData[ii].groups[jj].items[kk];\r\n arr.push(item);\r\n }\r\n }\r\n }\r\n return arr;\r\n};\r\n\r\nconst getSelectedItem = (itemData: ItemData) => {\r\n for (let ii = 0; ii < itemData.length; ii++) {\r\n for (let jj = 0; jj < itemData[ii].groups.length; jj++) {\r\n for (let kk = 0; kk < itemData[ii].groups[jj].items.length; kk++) {\r\n if (itemData[ii].groups[jj].items[kk].selected) {\r\n return itemData[ii].groups[jj].items[kk];\r\n }\r\n }\r\n }\r\n }\r\n return {};\r\n};\r\n\r\nexport const GalleryBrowser = React.forwardRef(\r\n (\r\n {\r\n itemData,\r\n itemNoun,\r\n itemNounPlural,\r\n hideFavourites,\r\n hideRecent,\r\n assistAccess,\r\n imagePath,\r\n galleryWidth,\r\n actionHandler,\r\n hasModernStyles,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [groupItemChecked, setGroupItemChecked] = React.useState('all');\r\n const [filterValue, setFilterValue] = React.useState('');\r\n const [itemList, setItemList] = React.useState([]);\r\n const [ignoreScrollIntoView, setIgnoreScrollIntoView] = React.useState(false);\r\n // tslint:disable-next-line:no-null-keyword\r\n const filterInputRef = React.useRef(null);\r\n // tslint:disable-next-line:no-null-keyword\r\n const itemWrapperRef = React.useRef(null);\r\n\r\n // create a flat array of all the items\r\n const itemsArray = React.useMemo(() => {\r\n return getAllItems(itemData);\r\n }, [itemData]);\r\n\r\n const [filteredItems, setFilteredItems] = React.useState([]);\r\n\r\n // loop through all the items and unselect each\r\n const unselectAllItems = () => {\r\n for (let ii = 0; ii < itemData.length; ii++) {\r\n for (let jj = 0; jj < itemData[ii].groups.length; jj++) {\r\n for (let kk = 0; kk < itemData[ii].groups[jj].items.length; kk++) {\r\n const item = itemData[ii].groups[jj].items[kk];\r\n item.selected = false;\r\n }\r\n }\r\n }\r\n };\r\n\r\n // handle click when user clicks on item icon\r\n const handleGalleryIconChange = async (item: any) => {\r\n unselectAllItems();\r\n item.selected = true;\r\n setIgnoreScrollIntoView(true);\r\n if (typeof actionHandler !== 'function') {\r\n return;\r\n }\r\n // call function to dispatch the selected item state to parent\r\n await actionHandler({\r\n type: GalleryBrowserActionTypes.SELECTED_ITEM,\r\n payload: { itemId: item.id },\r\n });\r\n };\r\n\r\n // handle click when user clicks on left column group name\r\n const handleGroupItemClick = (event: any, items?: any) => {\r\n setIgnoreScrollIntoView(true);\r\n setGroupItemChecked(event.target.value);\r\n if (event.target.value !== 'all') {\r\n setFilterValue('');\r\n }\r\n setItemList(items);\r\n // @ts-ignore\r\n itemWrapperRef.current.scrollTop = 0;\r\n };\r\n\r\n // handle change when user starts typing in the search-filter\r\n const handleFilterChange = (event: any) => {\r\n setFilterValue(event.target.value.toLowerCase());\r\n setGroupItemChecked('all');\r\n };\r\n\r\n // handle click when user clicks the clear search-filter button\r\n const handleFilterClearButton = () => {\r\n setFilterValue('');\r\n // @ts-ignore\r\n filterInputRef.current.focus();\r\n };\r\n\r\n React.useEffect(() => {\r\n // search-filter the itemsArray data based on the filters input\r\n const filteredData = itemsArray.filter((item: any) => {\r\n return Object.keys(item).some(() => item.title.toLowerCase().includes(filterValue));\r\n });\r\n setFilteredItems(filteredData);\r\n }, [itemsArray, filterValue]);\r\n\r\n // scroll to selected item\r\n React.useEffect(() => {\r\n const temporaryItemSelected = getSelectedItem(itemData);\r\n const selectedItem = document.querySelector(`input[value=\"${(temporaryItemSelected as any).id}\"]`);\r\n // only scroll the view if there is a preselected item, dont scroll if user clicks an item\r\n if (selectedItem && !ignoreScrollIntoView) {\r\n setTimeout(() => {\r\n selectedItem.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'nearest' });\r\n }, 200);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps -- run only once\r\n }, []);\r\n\r\n const topNavItems = itemData.filter((item) => item.section === 'top');\r\n const mainNavItems = itemData.filter((item) => item.section === 'main');\r\n\r\n return (\r\n \r\n \r\n \r\n {topNavItems &&\r\n Object.entries(topNavItems).map(([, section]) => {\r\n return (\r\n \r\n {Object.entries(section.groups).map(([, group]) => {\r\n return (\r\n handleGroupItemClick(e, group.items)}\r\n radioValue={group.id}\r\n key={`top-group-item-${group.id}`}\r\n checked={groupItemChecked === group.id}\r\n assistAccess={assistAccess}\r\n dataTestId={`gallery-item-group-name__${group.id}`}\r\n >\r\n {group.title}\r\n \r\n );\r\n })}\r\n \r\n );\r\n })}\r\n \r\n\r\n \r\n\r\n \r\n \r\n handleGroupItemClick(e)}\r\n radioValue={'all'}\r\n checked={groupItemChecked === 'all'}\r\n assistAccess={assistAccess}\r\n dataTestId={'gallery-item-group-name__all'}\r\n >\r\n All {itemNounPlural}...\r\n \r\n {mainNavItems &&\r\n Object.entries(mainNavItems).map(([, section]) => {\r\n return (\r\n \r\n {{section.title}}\r\n \r\n {Object.entries(section.groups).map(([, group]) => {\r\n return (\r\n handleGroupItemClick(e, group.items)}\r\n radioValue={group.id}\r\n key={`main-group-item-${group.id}`}\r\n checked={groupItemChecked === group.id}\r\n assistAccess={assistAccess}\r\n dataTestId={`gallery-item-group-name__${group.id}`}\r\n >\r\n {group.title}\r\n \r\n );\r\n })}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {groupItemChecked === 'all' ||\r\n groupItemChecked === 'create-a-new-item' ||\r\n groupItemChecked === 'recent' ||\r\n groupItemChecked === 'favourites' ? (\r\n filteredItems.length >= 1 ? (\r\n filteredItems.map((item: any) => {\r\n return (\r\n handleGalleryIconChange(item)}\r\n key={item.id}\r\n assistAccess={assistAccess}\r\n isSelected={item.selected}\r\n dataTestId={`modal-add-${itemNoun}__label-${camelToKebab(item.title)}`}\r\n hasModernStyles={hasModernStyles}\r\n />\r\n );\r\n })\r\n ) : (\r\n \r\n {groupItemChecked === 'recent'\r\n ? `No ${itemNounPlural} have been used recently`\r\n : groupItemChecked === 'favourites'\r\n ? 'No favourites have been added'\r\n : `No ${itemNounPlural} found matching \"${filterValue}\"`}\r\n \r\n )\r\n ) : (\r\n itemList.map((item: any) => {\r\n return (\r\n handleGalleryIconChange(item)}\r\n key={item.id}\r\n assistAccess={assistAccess}\r\n isSelected={item.selected}\r\n dataTestId={`modal-add-${itemNoun}__label-${camelToKebab(item.title)}`}\r\n hasModernStyles={hasModernStyles}\r\n />\r\n );\r\n })\r\n )}\r\n \r\n \r\n \r\n );\r\n },\r\n);\r\nGalleryBrowser.displayName = 'GalleryBrowser';\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, FONT, SPACING } from '../../packages/constants';\r\nimport Star from '../../packages/icons/star';\r\nimport { StyledIcon as GalleryIcon } from '../gallery-icon/gallery-icon';\r\n\r\nexport interface GalleryItemInfoProps {\r\n onClick?: (e: any) => void;\r\n iconName: string;\r\n title: string;\r\n description: string;\r\n imagePath?: string;\r\n reportCodes?: string[];\r\n hideFavourites?: boolean;\r\n isFavourite?: boolean;\r\n assistAccess: boolean;\r\n themeProvider?: {};\r\n}\r\n\r\nexport interface StyledButtonProps {\r\n assistAccess: boolean;\r\n}\r\n\r\nconst StyledGalleryItemInfo = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n box-shadow: inset 7px 0 9px -7px rgba(0, 0, 0, 0.15);\r\n width: 100%;\r\n height: 100%;\r\n overflow: auto;\r\n`;\r\n\r\nconst StyledGalleryItemInfoInner = styled.div`\r\n box-sizing: border-box;\r\n display: flex;\r\n flex-direction: column;\r\n padding: 23px ${SPACING.X_LARGE} ${SPACING.X_LARGE};\r\n max-width: 240px;\r\n width: 100%;\r\n height: 100%;\r\n overflow: auto;\r\n`;\r\n\r\nconst StyledGalleryIcon = styled(GalleryIcon)`\r\n margin-left: 44px;\r\n`;\r\n\r\nconst StyledGalleryItemTitle = styled.h2`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.LARGE};\r\n font-weight: 500;\r\n line-height: ${FONT_SIZE.X_LARGE};\r\n text-align: center;\r\n margin-bottom: 18px;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n width: 100%;\r\n`;\r\n\r\nconst StyledDescription = styled.p`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n line-height: ${FONT_SIZE.LARGE};\r\n margin-bottom: ${SPACING.X_LARGE};\r\n align-self: flex-start;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n width: 100%;\r\n`;\r\n\r\nconst StyledHeading = styled.h3`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 700;\r\n align-self: flex-start;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n margin-top: ${SPACING.X_SMALL};\r\n margin-bottom: ${SPACING.X_SMALL};\r\n width: 100%;\r\n`;\r\n\r\nconst StyledList = styled.ul`\r\n display: flex;\r\n flex-wrap: wrap;\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n margin: 0;\r\n padding: 0;\r\n list-style-type: none;\r\n align-self: flex-start;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n width: 100%;\r\n`;\r\n\r\nconst StyledStar = styled(Star)`\r\n width: 20px;\r\n margin-right: ${SPACING.MEDIUM};\r\n`;\r\n\r\nconst StyledFavouriteButton = styled.button`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n align-self: flex-start;\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n color: ${COLOR.MAIN.DARK_GREY};\r\n border: 0;\r\n padding: ${SPACING.SMALL} ${SPACING.SMALL} ${SPACING.SMALL} 0;\r\n margin-top: auto;\r\n cursor: pointer;\r\n\r\n &:focus {\r\n outline: ${(props: StyledButtonProps): string => (props.assistAccess ? '1px dotted #212121' : '0')};\r\n outline: ${(props: StyledButtonProps): string =>\r\n props.assistAccess ? '5px auto -webkit-focus-ring-color' : '0'};\r\n }\r\n\r\n &:hover ${StyledStar} {\r\n fill: ${COLOR.PRIMARY.YELLOW};\r\n }\r\n`;\r\n\r\nconst StyledListItem = styled.li`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n font-weight: 400;\r\n line-height: ${FONT_SIZE.LARGE};\r\n align-self: flex-start;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n margin-right: ${SPACING.X_SMALL};\r\n\r\n &::after {\r\n content: ',';\r\n }\r\n\r\n &:last-child {\r\n margin-right: 0;\r\n\r\n &::after {\r\n content: '';\r\n }\r\n }\r\n`;\r\n\r\nexport const GalleryItemInfo = React.forwardRef(\r\n (\r\n {\r\n iconName,\r\n title,\r\n description,\r\n reportCodes,\r\n isFavourite = false,\r\n hideFavourites,\r\n assistAccess,\r\n imagePath,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [favourite, setFavourite] = React.useState(isFavourite);\r\n const handleFavourite = () => {\r\n setFavourite(!favourite);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {title}\r\n {description}\r\n {reportCodes && reportCodes.length > 0 && (\r\n <>\r\n Report codes\r\n \r\n {reportCodes.map((code: string, index: number) => (\r\n {code}\r\n ))}\r\n \r\n \r\n )}\r\n {!hideFavourites && (\r\n \r\n \r\n {favourite ? 'Remove from' : 'Add to'} favourites\r\n \r\n )}\r\n \r\n \r\n );\r\n },\r\n);\r\nGalleryItemInfo.displayName = 'GalleryItemInfo';\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { THEME } from '../../packages/constants';\r\nimport { StyledModal, StyledModalTitleBar, StyledModalContent, StyledButton, StyledButtonGroup } from '../modal/modal';\r\nimport type { ModalProps } from '../modal/modal';\r\n\r\nconst StyledModalConfirm = styled(StyledModal)`\r\n width: ${(props: ModalProps) => (props.width ? props.width : '500px')};\r\n height: ${(props: ModalProps) => (props.height ? props.height : 'auto')};\r\n`;\r\n\r\nexport const ModalConfirm = React.forwardRef(\r\n (\r\n {\r\n children,\r\n buttons,\r\n title,\r\n cancelText,\r\n primaryText,\r\n handleCancelButton,\r\n handlePrimaryButton,\r\n width,\r\n height,\r\n focusOnButton,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const cancelButtonRef = React.useRef(null);\r\n const primaryButtonRef = React.useRef(null);\r\n\r\n useEffect(() => {\r\n if (focusOnButton === 'cancel' && cancelButtonRef.current) cancelButtonRef.current.focus();\r\n if (focusOnButton === 'primary' && primaryButtonRef.current) primaryButtonRef.current.focus();\r\n });\r\n\r\n return (\r\n \r\n {title}\r\n {children}\r\n {buttons ? (\r\n buttons\r\n ) : (\r\n \r\n \r\n {primaryText || 'Ok'}\r\n \r\n \r\n {cancelText || 'Cancel'}\r\n \r\n \r\n )}\r\n \r\n );\r\n },\r\n);\r\nModalConfirm.displayName = 'ModalConfirm';\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPACING, SPACING_SCALE, SPEED } from '../../packages/constants';\r\n\r\nexport interface BreadcrumbsProps {\r\n children: React.ReactNode;\r\n}\r\n\r\ninterface BreadcrumbsLinkProps {\r\n children: React.ReactNode;\r\n dataId: string;\r\n href: string;\r\n target?: '_blank' | '_self' | '_parent' | '_top';\r\n theme?: any;\r\n}\r\n\r\nconst StyledBreadcrumbs = styled.div`\r\n margin-bottom: ${SPACING_SCALE * 8}px;\r\n padding-top: ${SPACING_SCALE * 3}px;\r\n`;\r\n\r\nconst StyledBreadcrumbsList = styled.ol`\r\n display: flex;\r\n flex-wrap: wrap;\r\n`;\r\n\r\nconst StyledBreadcrumbsListItem = styled.li`\r\n display: flex;\r\n margin-right: ${SPACING.MEDIUM};\r\n padding-right: ${SPACING.SMALL};\r\n position: relative;\r\n font-size: ${FONT_SIZE.SMALL};\r\n color: ${COLOR.MAIN.DARK_GREY};\r\n\r\n &::before,\r\n &::after {\r\n left: 100%;\r\n top: 50%;\r\n border: solid transparent;\r\n content: '';\r\n height: 0;\r\n width: 0;\r\n position: absolute;\r\n pointer-events: none;\r\n }\r\n\r\n &::after {\r\n border-color: transparent;\r\n border-left-color: ${COLOR.PRIMARY.WHITE};\r\n border-width: 5px;\r\n margin-top: -5px;\r\n }\r\n\r\n &::before {\r\n border-color: transparent;\r\n border-left-color: ${COLOR.MAIN.FORM_FIELD_DARK};\r\n border-width: 6px;\r\n margin-top: -6px;\r\n }\r\n\r\n &:last-child {\r\n &::before,\r\n &::after {\r\n display: none;\r\n }\r\n }\r\n`;\r\n\r\nconst StyledBreadcrumbsLink = styled.a.attrs(({ dataId }) => ({\r\n 'data-test-id': dataId,\r\n}))`\r\n transition: border-bottom-color ${SPEED.TRANSITION};\r\n color: ${(props) => (props.theme ? props.theme.main : COLOR.BRAND.REPORTING) || COLOR.BRAND.REPORTING};\r\n text-decoration: none;\r\n padding-bottom: 1px;\r\n border-bottom: 1px solid transparent;\r\n\r\n &:hover {\r\n border-bottom: 1px solid ${(props) => (props.theme ? props.theme.main : COLOR.BRAND.REPORTING)};\r\n }\r\n`;\r\n\r\nexport const Breadcrumbs = ({ children, ...props }: BreadcrumbsProps) => (\r\n \r\n \r\n {\r\n //\r\n // @ts-ignore\r\n children.length && children.map ? (\r\n // @ts-ignore\r\n children.map(\r\n (child: any, i: number) =>\r\n child &&\r\n (child.length || child.props) && (\r\n {child}\r\n ),\r\n )\r\n ) : (\r\n {children}\r\n )\r\n }\r\n \r\n \r\n);\r\n\r\nexport const BreadcrumbsLink = ({ children, ...props }: BreadcrumbsLinkProps) => (\r\n {children}\r\n);\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\nimport { ANIMATION, COLOR, FONT_SIZE, SPACING_SCALE, SPEED } from '../../packages/constants';\r\n\r\nexport interface StepProcessProps {\r\n /**\r\n * Step data\r\n */\r\n steps: any;\r\n /**\r\n * Index of current step\r\n */\r\n currentStep: number;\r\n}\r\n\r\ninterface StepItemsProps {\r\n childLength: number;\r\n active: boolean;\r\n complete: boolean;\r\n}\r\n\r\nconst roundelSize = 22;\r\n\r\nconst StyledStepProcess = styled.ol`\r\n margin: 0 auto ${SPACING_SCALE * 6}px;\r\n width: 100%;\r\n min-height: 64px;\r\n overflow: hidden;\r\n`;\r\n\r\nconst StyledLabel = styled.p`\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n display: inline-block;\r\n max-width: 50%;\r\n`;\r\n\r\nconst StyledStepItem = styled.li`\r\n list-style-type: none;\r\n width: ${(props: StepItemsProps): string => `${100 / props.childLength}%`};\r\n float: left;\r\n font-size: ${FONT_SIZE.SMALL};\r\n position: relative;\r\n text-align: center;\r\n text-transform: uppercase;\r\n color: ${(props) =>\r\n props.active || props.complete ? props.theme.main || COLOR.BRAND.REPORTING : COLOR.MAIN.FORM_FIELD_DARK};\r\n box-sizing: border-box;\r\n\r\n &::before {\r\n width: ${roundelSize}px;\r\n height: ${roundelSize}px;\r\n content: '';\r\n counter-increment: step;\r\n line-height: ${roundelSize}px;\r\n border-width: 2px;\r\n border-style: solid;\r\n border-color: ${(props) =>\r\n props.active || props.complete ? props.theme.main || COLOR.BRAND.REPORTING : COLOR.MAIN.FORM_FIELD_DARK};\r\n display: block;\r\n text-align: center;\r\n margin: 0 auto 10px;\r\n border-radius: 50%;\r\n background-color: ${(props) =>\r\n props.complete ? props.theme.main || COLOR.BRAND.REPORTING : COLOR.PRIMARY.WHITE};\r\n box-sizing: border-box;\r\n animation: ${SPEED.TRANSITION} ${ANIMATION.FADE_IN} linear forwards;\r\n position: relative;\r\n z-index: 1;\r\n }\r\n\r\n &::after {\r\n background-color: ${(props) => (props.complete ? props.theme.main || COLOR.BRAND.REPORTING : 'transparent')};\r\n width: 100%;\r\n height: 2px;\r\n content: '';\r\n position: absolute;\r\n border-top: ${(props: StepItemsProps): string =>\r\n props.complete ? '2px solid transparent' : `2px dashed ${COLOR.MAIN.FORM_FIELD_DARK}`};\r\n top: ${roundelSize / 2 - 1}px;\r\n right: -50%;\r\n z-index: 0;\r\n box-sizing: border-box;\r\n }\r\n\r\n &:last-child {\r\n &::after {\r\n content: none;\r\n }\r\n }\r\n\r\n ${StyledLabel} {\r\n animation: ${SPEED.TRANSITION} ${ANIMATION.FADE_IN} linear forwards;\r\n }\r\n`;\r\n\r\nexport const StepProcess = ({ steps, currentStep, ...props }: StepProcessProps) => (\r\n \r\n {steps.map(\r\n (step: any, i: number) =>\r\n step &&\r\n !step.skipStep && (\r\n !item.skipStep).length}\r\n key={step.key || i}\r\n >\r\n {step.title}\r\n \r\n ),\r\n )}\r\n \r\n);\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, LINE_HEIGHT, SPEED, TEXT_RELATIVE_MARGIN } from '../../packages/constants';\r\n\r\nexport enum Justify {\r\n Left = 'left',\r\n Right = 'right',\r\n Center = 'center',\r\n}\r\n\r\nexport interface TextProps extends React.HTMLAttributes {\r\n children: React.ReactNode;\r\n heading?: number;\r\n /**\r\n * Pass element type e.g. 'h1', 'p'\r\n * (Note: Font sizes for heading levels haven't been defined in constants yet)\r\n */\r\n as?: any;\r\n /**\r\n * Colour of text\r\n */\r\n color?: string;\r\n /**\r\n * Text justification\r\n */\r\n justify?: Justify;\r\n /**\r\n * Font-size with unit\r\n */\r\n fontSize?: string;\r\n /**\r\n * Line-height\r\n */\r\n lineHeight?: string;\r\n /**\r\n * Margin bottom with unit\r\n */\r\n marginBottom?: string;\r\n /**\r\n * Indent 28px (SPACING.XX_LARGE)\r\n */\r\n indent?: string;\r\n}\r\n\r\n// TODO: heading styles\r\nconst StyledText = styled.p`\r\n color: ${(props: TextProps) => (props.color ? props.color : COLOR.PRIMARY.BLACK)};\r\n text-align: ${(props: TextProps) =>\r\n props.justify === 'left'\r\n ? 'left'\r\n : props.justify === 'center'\r\n ? 'center'\r\n : props.justify === 'right'\r\n ? 'right'\r\n : 'left'};\r\n font-size: ${(props: TextProps) => props.fontSize || FONT_SIZE.MEDIUM};\r\n line-height: ${(props: TextProps) => props.lineHeight || LINE_HEIGHT.LARGE};\r\n margin-bottom: ${(props: TextProps) => props.marginBottom || TEXT_RELATIVE_MARGIN.MEDIUM};\r\n padding: 0 0 0 ${(props: TextProps) => (props.indent ? props.indent : '0')};\r\n`;\r\n\r\nexport const TextLink = styled.a`\r\n transition: border-bottom-color ${SPEED.TRANSITION};\r\n color: ${COLOR.BRAND.REPORTING};\r\n text-decoration: none;\r\n padding-bottom: 1px;\r\n border-bottom: 1px solid transparent;\r\n\r\n &:hover {\r\n border-bottom: 1px solid ${COLOR.BRAND.REPORTING};\r\n }\r\n`;\r\n\r\nexport const Text = ({ children, indent, heading, fontSize, ...props }: TextProps) => (\r\n \r\n {children}\r\n \r\n);\r\n","import * as React from 'react';\r\n\r\nimport { lighten } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, SPACING } from '../../packages/constants';\r\n\r\nexport interface HelperModalProps {\r\n children: React.ReactNode;\r\n dataId: string;\r\n modalContent: React.ReactNode;\r\n position?: 'top' | 'bottom' | undefined;\r\n isOpen?: boolean;\r\n inline?: boolean;\r\n width?: number;\r\n}\r\n\r\ninterface ModalContentProps {\r\n position?: 'top' | 'bottom' | undefined;\r\n width?: number;\r\n}\r\n\r\ninterface StyledHelperModal {\r\n inline?: boolean;\r\n}\r\n\r\nconst StyledHelperModal = styled.div`\r\n display: ${(props: StyledHelperModal): string => (props.inline ? 'inline' : '')};\r\n position: relative;\r\n width: 15px;\r\n height: 15px;\r\n`;\r\n\r\nconst ModalContent = styled.div`\r\n position: absolute;\r\n top: ${(props) => (props.position === 'top' ? 'auto' : '32px')};\r\n bottom: ${(props) => (props.position === 'top' ? '32px' : 'auto')};\r\n left: calc(50% - ((${(props) => `${props.width}px`} / 2) + ${SPACING.LARGE}));\r\n width: ${(props) => `${props.width}px`};\r\n padding: ${SPACING.LARGE};\r\n border: 1px solid ${COLOR.PRIMARY.BLACK};\r\n background-color: #fff;\r\n z-index: 99999;\r\n white-space: normal;\r\n\r\n &::before {\r\n border-top: 1px solid black;\r\n border-right: 1px solid black;\r\n background-color: white;\r\n width: 20px;\r\n height: 20px;\r\n content: '';\r\n position: absolute;\r\n top: ${(props: ModalContentProps): string => (props.position === 'top' ? 'auto' : '-11px')};\r\n bottom: ${(props: ModalContentProps): string => (props.position === 'top' ? '-11px' : 'auto')};\r\n left: calc(50% - 10px);\r\n transform: rotate(${(props: ModalContentProps): string => (props.position === 'top' ? '135deg' : '-45deg')});\r\n }\r\n`;\r\n\r\nconst StyledButton = styled.button`\r\n border: 0;\r\n background-color: transparent;\r\n padding: 0;\r\n margin: 0;\r\n vertical-align: middle;\r\n`;\r\n\r\nconst StyledQuestionMark = styled.i`\r\n background: ${COLOR.MAIN.PRIMARY};\r\n color: ${COLOR.PRIMARY.WHITE};\r\n cursor: pointer;\r\n font-weight: 700;\r\n font-style: normal;\r\n border-radius: 10px;\r\n text-align: center;\r\n line-height: 15px;\r\n display: inline-block;\r\n transform: translateY(-2px);\r\n width: 15px;\r\n height: 15px;\r\n vertical-align: middle;\r\n\r\n &:hover {\r\n background: ${lighten(0.2, COLOR.MAIN.PRIMARY)};\r\n }\r\n`;\r\n\r\nexport const QuestionMark = () => ?;\r\n\r\nexport const HelperModal = ({\r\n children,\r\n position = 'top',\r\n modalContent,\r\n inline,\r\n width = 420,\r\n dataId,\r\n isOpen = false,\r\n ...props\r\n}: HelperModalProps) => {\r\n const elementRef = React.useRef(null);\r\n const [showContent, setShowContent] = React.useState(isOpen);\r\n const toggleContent = () => setShowContent(!showContent);\r\n\r\n React.useEffect(() => {\r\n function handleKeyListener(e: any) {\r\n if ((showContent && e.key === 'Escape') || (showContent && e.key === 'Tab')) {\r\n setShowContent(false);\r\n }\r\n }\r\n\r\n function handleClick(e: any) {\r\n if (showContent && elementRef.current && !elementRef.current.contains(e.target)) {\r\n setShowContent(false);\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', handleKeyListener);\r\n document.addEventListener('click', handleClick);\r\n\r\n return function cleanupKeyListener() {\r\n document.removeEventListener('keydown', handleKeyListener);\r\n document.removeEventListener('click', handleClick);\r\n };\r\n }, [showContent, setShowContent]);\r\n\r\n return (\r\n \r\n \r\n {children}\r\n \r\n {showContent && (\r\n <>\r\n \r\n {modalContent}\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { darken, transparentize } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, RADIUS, SPACING } from '../../packages/constants';\r\nimport { HelperModal, QuestionMark } from '../helper-modal';\r\n\r\nexport interface TextInputProps {\r\n dataId: string;\r\n label: string;\r\n id: string;\r\n name: string;\r\n autofocus?: boolean;\r\n defaultValue?: string;\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n hasHelper?: boolean;\r\n helperContent?: React.ReactNode;\r\n numeralsOnly?: boolean;\r\n placeholder?: string;\r\n validationMessage?: string;\r\n value?: string;\r\n onChange?: (e: any) => void;\r\n onBlur?: (e: any) => void;\r\n maxLength?: number;\r\n minLength?: number;\r\n thinLabel?: boolean;\r\n className?: string;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n thinLabel?: boolean;\r\n}\r\n\r\ninterface StyledValidationMessageProps {\r\n invalid?: boolean;\r\n}\r\n\r\nconst wrapperStyles = `\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst Wrapper = styled.label`\r\n ${wrapperStyles}\r\n`;\r\n\r\nconst WrapperHasHelper = styled.div`\r\n ${wrapperStyles}\r\n`;\r\n\r\nconst StyledLabelWrapper = styled.div`\r\n display: inline-flex;\r\n`;\r\n\r\nconst StyledTextLabel = styled.span`\r\n display: block;\r\n padding-bottom: ${SPACING.XX_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledLabelHasHelper = styled.label`\r\n display: inline-block;\r\n margin-right: ${SPACING.X_SMALL};\r\n padding-bottom: ${SPACING.XX_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledInput = styled.input`\r\n background-color: ${(props: StyledTextLabelProps): string =>\r\n props.disabled ? darken('0.1', COLOR.PRIMARY.WHITE) : COLOR.PRIMARY.WHITE};\r\n color: ${(props: StyledTextLabelProps): string =>\r\n props.disabled ? transparentize('0.5', COLOR.PRIMARY.BLACK) : COLOR.PRIMARY.BLACK};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n padding: ${SPACING.SMALL};\r\n border-width: 1px;\r\n border-style: solid;\r\n border-color: ${(props: StyledTextLabelProps): string =>\r\n props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD};\r\n border-radius: ${RADIUS.DEFAULT};\r\n\r\n &::placeholder {\r\n opacity: 0.65;\r\n }\r\n`;\r\n\r\nconst StyledValidationMessage = styled.div`\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n line-height: ${FONT_SIZE.SMALL};\r\n color: ${(props: StyledValidationMessageProps): string =>\r\n props.invalid ? COLOR.PRIMARY.RED : COLOR.PRIMARY.BLACK};\r\n padding-top: ${SPACING.SMALL};\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n`;\r\n\r\nexport const TextInput = React.forwardRef(\r\n (\r\n {\r\n dataId,\r\n label,\r\n id,\r\n hasHelper,\r\n helperContent,\r\n placeholder,\r\n name,\r\n autofocus,\r\n defaultValue,\r\n disabled,\r\n invalid,\r\n validationMessage,\r\n onChange,\r\n onBlur,\r\n maxLength,\r\n minLength,\r\n thinLabel,\r\n value,\r\n className,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return hasHelper ? (\r\n \r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationMessage && (\r\n {validationMessage}\r\n )}\r\n \r\n ) : (\r\n \r\n \r\n {label}\r\n \r\n \r\n {validationMessage && (\r\n {validationMessage}\r\n )}\r\n \r\n );\r\n },\r\n);\r\nTextInput.displayName = 'TextInput';\r\n","import * as React from 'react';\r\n\r\nimport { darken, transparentize } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, RADIUS, SPACING } from '../../packages/constants';\r\nimport { HelperModal, QuestionMark } from '../helper-modal';\r\n\r\nexport interface TextFieldInlineProps {\r\n dataId: string;\r\n label: string;\r\n id: string;\r\n name: string;\r\n autofocus?: boolean;\r\n defaultValue?: string;\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n hasHelper?: boolean;\r\n helperContent?: React.ReactNode;\r\n placeholder?: string;\r\n validationMessage?: string;\r\n value?: string;\r\n onChange?: (e: any) => void;\r\n onBlur?: (e: any) => void;\r\n maxLength?: number;\r\n minLength?: number;\r\n thinLabel?: boolean;\r\n className?: string;\r\n labelWidth?: string;\r\n labelAlignment?: 'start' | 'center' | 'end' | undefined;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n thinLabel?: boolean;\r\n}\r\n\r\ninterface WrapperProps {\r\n labelWidth?: string;\r\n}\r\n\r\ninterface StyledLabelWrapperProps {\r\n labelAlignment: 'start' | 'center' | 'end';\r\n}\r\n\r\ninterface StyledValidationMessageProps {\r\n invalid?: boolean;\r\n}\r\n\r\nconst Wrapper = styled.div`\r\n display: grid;\r\n grid-template-columns:\r\n ${(props: WrapperProps): string => (props.labelWidth ? props.labelWidth : 'auto')}\r\n minmax(0, 1fr);\r\n`;\r\n\r\nconst StyledLabelWrapper = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n align-items: ${(props: StyledLabelWrapperProps): string => props.labelAlignment};\r\n flex-direction: column;\r\n padding-right: ${SPACING.LARGE};\r\n`;\r\n\r\nconst StyledTextLabel = styled.label`\r\n margin-right: ${SPACING.X_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.LARGE};\r\n max-width: 100%;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledLabelHasHelper = styled.div`\r\n display: inline-flex;\r\n max-width: 100%;\r\n`;\r\n\r\nconst StyledInput = styled.input`\r\n background-color: ${(props: StyledTextLabelProps): string =>\r\n props.disabled ? darken('0.1', COLOR.PRIMARY.WHITE) : COLOR.PRIMARY.WHITE};\r\n color: ${(props: StyledTextLabelProps): string =>\r\n props.disabled ? transparentize('0.5', COLOR.PRIMARY.BLACK) : COLOR.PRIMARY.BLACK};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n padding: ${SPACING.SMALL};\r\n border-width: 1px;\r\n border-style: solid;\r\n border-color: ${(props: StyledTextLabelProps): string =>\r\n props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD};\r\n border-radius: ${RADIUS.DEFAULT};\r\n\r\n &::placeholder {\r\n opacity: 0.65;\r\n }\r\n`;\r\n\r\nconst StyledValidationMessage = styled.div`\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n line-height: ${FONT_SIZE.SMALL};\r\n color: ${(props: StyledValidationMessageProps): string =>\r\n props.invalid ? COLOR.PRIMARY.RED : COLOR.PRIMARY.BLACK};\r\n padding-top: ${SPACING.SMALL};\r\n grid-area: 2 / 2;\r\n`;\r\n\r\nexport const TextFieldInline = React.forwardRef(\r\n (\r\n {\r\n dataId,\r\n label,\r\n id,\r\n hasHelper,\r\n helperContent,\r\n placeholder,\r\n name,\r\n autofocus,\r\n defaultValue,\r\n disabled,\r\n invalid,\r\n onChange,\r\n onBlur,\r\n maxLength,\r\n minLength,\r\n thinLabel,\r\n value,\r\n className,\r\n validationMessage,\r\n labelWidth,\r\n labelAlignment = 'start',\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return (\r\n \r\n \r\n {hasHelper ? (\r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n {label}\r\n \r\n )}\r\n \r\n \r\n {validationMessage && (\r\n {validationMessage}\r\n )}\r\n \r\n );\r\n },\r\n);\r\n\r\nTextFieldInline.displayName = 'TextFieldInline';\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPACING } from '../../packages/constants';\r\nimport { HelperModal, QuestionMark } from '../helper-modal';\r\n\r\nexport interface RadioInputProps {\r\n dataId: string;\r\n id: string;\r\n label: string;\r\n name: string;\r\n value: string;\r\n autofocus?: boolean;\r\n checked?: boolean;\r\n disabled?: boolean;\r\n hasHelper?: boolean;\r\n helperContent?: React.ReactNode;\r\n inline?: boolean;\r\n invalid?: boolean;\r\n onChange?: (e: any) => void;\r\n thinLabel?: boolean;\r\n validationMessage?: string;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n inline?: boolean;\r\n thinLabel?: boolean;\r\n}\r\n\r\ninterface WrapperLabelProps {\r\n inline?: boolean;\r\n}\r\n\r\nconst Wrapper = styled.label`\r\n display: inline-flex;\r\n flex-direction: ${(props: WrapperLabelProps): string => (props.inline ? 'row-reverse' : 'column')};\r\n align-items: ${(props: WrapperLabelProps): string => (props.inline ? 'center' : '')};\r\n justify-content: ${(props: WrapperLabelProps): string => (props.inline ? 'flex-end' : '')};\r\n`;\r\n\r\nconst WrapperHasHelper = styled.div`\r\n display: inline-flex;\r\n flex-direction: ${(props: WrapperLabelProps): string => (props.inline ? 'row-reverse' : 'column')};\r\n align-items: ${(props: WrapperLabelProps): string => (props.inline ? 'center' : '')};\r\n justify-content: ${(props: WrapperLabelProps): string => (props.inline ? 'flex-end' : '')};\r\n`;\r\n\r\nconst StyledLabelWrapper = styled.div`\r\n display: inline-flex;\r\n`;\r\n\r\nconst StyledTextLabel = styled.span`\r\n display: block;\r\n margin-left: ${(props: StyledTextLabelProps): string => (props.inline ? SPACING.X_SMALL : '0')};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledLabelHasHelper = styled.label`\r\n display: inline-block;\r\n margin-right: ${SPACING.X_SMALL};\r\n margin-left: ${(props: StyledTextLabelProps): string => (props.inline ? SPACING.X_SMALL : '0')};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledRadio = styled.input``;\r\n\r\nexport const RadioInput = React.forwardRef(\r\n (\r\n {\r\n onChange,\r\n dataId,\r\n label,\r\n id,\r\n hasHelper,\r\n helperContent,\r\n name,\r\n value,\r\n autofocus,\r\n inline,\r\n thinLabel,\r\n checked,\r\n disabled,\r\n invalid,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return hasHelper ? (\r\n \r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n );\r\n },\r\n);\r\nRadioInput.displayName = 'RadioInput';\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPACING } from '../../packages/constants';\r\nimport { HelperModal, HelperModalProps, QuestionMark } from '../helper-modal';\r\n\r\nexport interface CheckboxInputProps {\r\n /**\r\n * Data-test-id\r\n */\r\n dataId: string;\r\n /**\r\n * Field label\r\n */\r\n label: string;\r\n id: string;\r\n name: string;\r\n /**\r\n * Sets the input to focus on page load\r\n */\r\n autofocus?: boolean;\r\n checked?: boolean;\r\n disabled?: boolean;\r\n /**\r\n * Shows the (?) icon\r\n */\r\n hasHelper?: boolean;\r\n /**\r\n * Content for the helper icon\r\n */\r\n helperContent?: React.ReactNode;\r\n helperProps?: HelperModalProps;\r\n inline?: boolean;\r\n invalid?: boolean;\r\n onChange?: (e: any) => void;\r\n /**\r\n * Makes the label thin\r\n */\r\n thinLabel?: boolean;\r\n className?: string;\r\n labelMaxWidth?: string;\r\n labelOverflow?: string;\r\n labelTextOverflow?: string;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n inline?: boolean;\r\n thinLabel?: boolean;\r\n labelMaxWidth?: string;\r\n labelOverflow?: string;\r\n labelTextOverflow?: string;\r\n}\r\n\r\ninterface WrapperLabelProps {\r\n inline?: boolean;\r\n}\r\n\r\nconst Wrapper = styled.label`\r\n &&& {\r\n display: inline-flex;\r\n flex-direction: ${(props: WrapperLabelProps): string => (props.inline ? 'row-reverse' : 'column')};\r\n align-items: ${(props: WrapperLabelProps): string => (props.inline ? 'center' : '')};\r\n justify-content: ${(props: WrapperLabelProps): string => (props.inline ? 'flex-end' : '')};\r\n }\r\n`;\r\n\r\nconst WrapperHasHelper = styled.div`\r\n display: inline-flex;\r\n flex-direction: ${(props: WrapperLabelProps): string => (props.inline ? 'row-reverse' : 'column')};\r\n align-items: ${(props: WrapperLabelProps): string => (props.inline ? 'center' : '')};\r\n justify-content: ${(props: WrapperLabelProps): string => (props.inline ? 'flex-end' : '')};\r\n`;\r\n\r\nconst StyledLabelWrapper = styled.div`\r\n display: inline-flex;\r\n`;\r\n\r\nconst StyledTextLabel = styled.span`\r\n display: block;\r\n margin-left: ${(props: StyledTextLabelProps): string => (props.inline ? SPACING.X_SMALL : '0')};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n max-width: ${(props: StyledTextLabelProps): string => (props.labelMaxWidth ? props.labelMaxWidth : 'none')};\r\n overflow: ${(props: StyledTextLabelProps): string => (props.labelOverflow ? props.labelOverflow : 'visible')};\r\n text-overflow: ${(props: StyledTextLabelProps): string =>\r\n props.labelTextOverflow ? props.labelTextOverflow : 'clip'};\r\n`;\r\n\r\nconst StyledLabelHasHelper = styled.label`\r\n && {\r\n display: inline-block;\r\n margin-right: ${SPACING.X_SMALL};\r\n margin-left: ${(props: StyledTextLabelProps): string => (props.inline ? SPACING.X_SMALL : '0')};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n max-width: ${(props: StyledTextLabelProps): string => (props.labelMaxWidth ? props.labelMaxWidth : 'none')};\r\n overflow: ${(props: StyledTextLabelProps): string => (props.labelOverflow ? props.labelOverflow : 'visible')};\r\n text-overflow: ${(props: StyledTextLabelProps): string =>\r\n props.labelTextOverflow ? props.labelTextOverflow : 'clip'};\r\n }\r\n`;\r\n\r\nconst StyledCheckbox = styled.input``;\r\n\r\nexport const CheckboxInput = React.forwardRef(\r\n (\r\n {\r\n onChange,\r\n dataId,\r\n label,\r\n id,\r\n hasHelper,\r\n helperContent,\r\n helperProps,\r\n name,\r\n autofocus,\r\n inline,\r\n thinLabel,\r\n checked,\r\n disabled,\r\n invalid,\r\n className,\r\n labelMaxWidth,\r\n labelOverflow,\r\n labelTextOverflow,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return hasHelper ? (\r\n \r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n );\r\n },\r\n);\r\nCheckboxInput.displayName = 'CheckboxInput';\r\n","export enum TrackingSettingsTheme {\r\n Default = 'DEFAULT',\r\n DataGrid = 'DATAGRID',\r\n}\r\n\r\nexport enum TrackingItemStatus {\r\n Active = 'ACTIVE',\r\n Archived = 'ARCHIVED',\r\n}\r\n\r\nexport enum DataSourceNames {\r\n Xero = 'XERO',\r\n Quickbooks = 'QUICKBOOKS',\r\n QuickBooksDesktop = 'QUICKBOOKSDESKTOP',\r\n MyobAccountRight = 'MYOBACCOUNTRIGHT',\r\n MyobAccountRightDesktop = 'MYOBACCOUNTRIGHTDESKTOP',\r\n Sage50Desktop = 'SAGE50DESKTOP',\r\n}\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, SPACING } from '../../packages/constants';\r\nimport { ChevronRight } from '../../packages/icons';\r\nimport { TrackingSettingsTheme } from '../tracking-settings/tracking-settings-enums';\r\n\r\nexport interface TreeCollapseProps {\r\n parentProp: React.ReactNode;\r\n children: React.ReactNode;\r\n dataId: string;\r\n parentClickable?: boolean;\r\n expand?: boolean;\r\n theme?: TrackingSettingsTheme;\r\n hideSplit?: boolean;\r\n}\r\n\r\ninterface StyledChevronProps {\r\n isExpanded: boolean | undefined;\r\n}\r\n\r\ninterface StyledButtonProps {\r\n dataId: string;\r\n parentClickable?: boolean;\r\n}\r\n\r\ninterface StyledListProps {\r\n hideSplit?: boolean;\r\n}\r\n\r\nconst StyledTreeCollapse = styled.ul``;\r\n\r\nconst StyledListItem = styled.li`\r\n position: relative;\r\n\r\n &::after {\r\n border-left: 1px solid ${COLOR.LEGACY.DATAGRID_BORDER};\r\n width: 1px;\r\n height: 100%;\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n right: calc(145px + ${SPACING.MEDIUM});\r\n display: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid && !props.hideSplit ? 'block' : 'none')};\r\n z-index: 2;\r\n }\r\n`;\r\n\r\nconst TreeParent = styled.div`\r\n display: flex;\r\n align-items: center;\r\n position: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? 'sticky' : undefined)};\r\n top: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? 0 : undefined)};\r\n z-index: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? 1 : undefined)};\r\n background-color: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? COLOR.LEGACY.DATAGRID_TH_BG : undefined};\r\n border-bottom: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? `1px solid ${COLOR.LEGACY.DATAGRID_BORDER}` : 0};\r\n border-top: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? `1px solid ${COLOR.LEGACY.DATAGRID_BORDER}` : 0};\r\n padding-left: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? `${SPACING.MEDIUM}` : 0)};\r\n`;\r\n\r\nconst TreeChildren = styled.div`\r\n margin-top: ${SPACING.MEDIUM};\r\n`;\r\n\r\nconst StyledButton = styled.button.attrs(({ dataId }) => ({\r\n 'data-test-id': dataId,\r\n}))`\r\n border: 0;\r\n padding: 0;\r\n background-color: transparent;\r\n display: ${(props: StyledButtonProps): string => (props.parentClickable ? 'flex' : 'inline-block')};\r\n align-items: ${(props: StyledButtonProps): string => (props.parentClickable ? 'center' : '')};\r\n cursor: pointer;\r\n`;\r\n\r\nconst StyledChevron = styled(ChevronRight)`\r\n width: 12px;\r\n height: 12px;\r\n fill: ${COLOR.MAIN.LABEL_TEXT};\r\n margin-right: ${SPACING.X_SMALL};\r\n transform: ${(props: StyledChevronProps): string => (props.isExpanded ? 'rotate(90deg)' : 'rotate(0)')};\r\n`;\r\n\r\nexport const TreeCollapse = ({\r\n parentClickable,\r\n expand,\r\n parentProp,\r\n dataId,\r\n children,\r\n theme,\r\n hideSplit,\r\n ...props\r\n}: TreeCollapseProps) => {\r\n const [isExpanded, setIsExpanded] = React.useState(true);\r\n\r\n React.useEffect(() => {\r\n setIsExpanded(expand || false);\r\n }, [expand]);\r\n\r\n return (\r\n \r\n \r\n {parentClickable ? (\r\n \r\n setIsExpanded(!isExpanded)}\r\n aria-label={`${isExpanded ? 'Collapse' : 'Expand'} tree`}\r\n >\r\n \r\n {parentProp}\r\n \r\n \r\n ) : (\r\n \r\n setIsExpanded(!isExpanded)}\r\n aria-label={`${isExpanded ? 'Collapse' : 'Expand'} tree`}\r\n >\r\n \r\n \r\n {parentProp}\r\n \r\n )}\r\n {isExpanded && {children}}\r\n \r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { darken, transparentize } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, FONT_STACK, RADIUS, SPACING } from '../../packages/constants';\r\nimport { HelperModal, QuestionMark } from '../helper-modal';\r\n\r\ninterface StyledSelectField {\r\n invalid?: boolean;\r\n emphasize?: boolean;\r\n hasLegacyStyles?: boolean;\r\n width?: string;\r\n minWidth?: string;\r\n maxWidth?: string;\r\n thinLabel?: boolean;\r\n}\r\n\r\nexport interface SelectFieldProps {\r\n dataId: string;\r\n id: string;\r\n name: string;\r\n options: SelectFieldOptions;\r\n value?: string;\r\n onChange?: (e: any) => void;\r\n disabled?: boolean;\r\n hasHelper?: boolean;\r\n hasLegacyStyles?: boolean;\r\n helperContent?: React.ReactNode;\r\n invalid?: boolean;\r\n label?: string;\r\n placeholder?: string;\r\n emphasize?: boolean;\r\n width?: string;\r\n minWidth?: string;\r\n maxWidth?: string;\r\n thinLabel?: boolean;\r\n}\r\n\r\nexport type SelectFieldOptions = SelectFieldOptionsItem[];\r\n\r\ninterface SelectFieldOptionsItem {\r\n name: string;\r\n value: string;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n emphasize?: boolean;\r\n hasLegacyStyles?: boolean;\r\n thinLabel?: boolean;\r\n}\r\n\r\ninterface InputWrapperProps {\r\n width?: string;\r\n minWidth?: string;\r\n maxWidth?: string;\r\n disabled?: boolean;\r\n emphasize?: boolean;\r\n}\r\n\r\nconst Wrapper = styled.label`\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst InputWrapper = styled.div`\r\n display: inline-flex;\r\n position: relative;\r\n margin-right: auto;\r\n width: ${(props) => (props.width ? props.width : 'auto')};\r\n min-width: ${(props) => (props.minWidth ? props.minWidth : 0)};\r\n max-width: ${(props) => (props.maxWidth ? props.maxWidth : 'none')};\r\n\r\n &::after {\r\n width: 0;\r\n height: 0;\r\n border-left: 6px solid transparent;\r\n border-right: 6px solid transparent;\r\n border-top: 6px solid\r\n ${(props) => (props.emphasize ? COLOR.DROPDOWN.DROPDOWN_ARROW_DARK : COLOR.DROPDOWN.DROPDOWN_ARROW)};\r\n content: '';\r\n position: absolute;\r\n bottom: ${SPACING.MEDIUM};\r\n right: ${SPACING.SMALL};\r\n opacity: ${(props) => (props.disabled ? '0.7' : '1')};\r\n pointer-events: none;\r\n }\r\n\r\n &:hover {\r\n &::after {\r\n border-top-color: ${(props: InputWrapperProps): string => (props.disabled ? '' : COLOR.BRAND.REPORTING)};\r\n }\r\n }\r\n`;\r\n\r\nconst WrapperHasHelper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n position: relative;\r\n`;\r\n\r\nconst StyledLabelWrapper = styled.div`\r\n display: inline-flex;\r\n`;\r\n\r\nconst StyledTextLabel = styled.span`\r\n display: block;\r\n padding-bottom: ${(props) => (props.hasLegacyStyles ? 0 : SPACING.XX_SMALL)};\r\n font-family: ${FONT_STACK};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n font-size: ${(props) => (props.hasLegacyStyles ? FONT_SIZE.X_SMALL : FONT_SIZE.SMALL)};\r\n line-height: ${(props) => (props.hasLegacyStyles ? 'normal' : FONT_SIZE.MEDIUM)};\r\n margin-bottom: ${(props) => (props.hasLegacyStyles ? '8px' : 0)};\r\n color: ${(props) =>\r\n props.invalid ? COLOR.PRIMARY.RED : props.hasLegacyStyles ? COLOR.PRIMARY.BLACK : COLOR.MAIN.LABEL_TEXT};\r\n opacity: ${(props) => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledLabelHasHelper = styled.label`\r\n display: inline-block;\r\n padding-bottom: ${(props) => (props.hasLegacyStyles ? 0 : SPACING.XX_SMALL)};\r\n font-family: ${FONT_STACK};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n font-size: ${(props) => (props.hasLegacyStyles ? FONT_SIZE.X_SMALL : FONT_SIZE.SMALL)};\r\n line-height: ${(props) => (props.hasLegacyStyles ? 'normal' : FONT_SIZE.MEDIUM)};\r\n margin-bottom: ${(props) => (props.hasLegacyStyles ? '8px' : 0)};\r\n margin-right: ${SPACING.X_SMALL};\r\n color: ${(props) =>\r\n props.invalid ? COLOR.PRIMARY.RED : props.hasLegacyStyles ? COLOR.PRIMARY.BLACK : COLOR.MAIN.LABEL_TEXT};\r\n opacity: ${(props) => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledSelectField = styled.select`\r\n background-color: ${(props) => (props.disabled ? darken('0.1', COLOR.PRIMARY.WHITE) : COLOR.PRIMARY.WHITE)};\r\n color: ${(props) => (props.disabled ? transparentize('0.5', COLOR.PRIMARY.BLACK) : COLOR.PRIMARY.BLACK)};\r\n font-family: ${FONT_STACK};\r\n font-size: ${(props) => (props.hasLegacyStyles ? '13px' : FONT_SIZE.SMALL)};\r\n line-height: ${(props) => (props.hasLegacyStyles ? '18px' : FONT_SIZE.MEDIUM)};\r\n padding: ${SPACING.SMALL} ${SPACING.X_LARGE} ${SPACING.SMALL} ${SPACING.SMALL};\r\n border-width: 1px;\r\n border-style: solid;\r\n border-color: ${(props) =>\r\n props.invalid ? COLOR.PRIMARY.RED : props.emphasize ? COLOR.MAIN.FORM_FIELD_DARK : COLOR.MAIN.FORM_FIELD};\r\n border-radius: ${(props) => (props.hasLegacyStyles ? 0 : RADIUS.DEFAULT)};\r\n appearance: none;\r\n margin: 0;\r\n width: 100%;\r\n\r\n &:focus {\r\n box-shadow: 0 0 1px 3px rgba(59, 153, 252, 0.7);\r\n outline: none;\r\n }\r\n`;\r\n\r\nconst StyledOption = styled.option`\r\n font-weight: normal;\r\n`;\r\n\r\nexport const SelectInput = React.forwardRef(\r\n (\r\n {\r\n dataId,\r\n id,\r\n invalid,\r\n hasLegacyStyles,\r\n disabled,\r\n onChange,\r\n emphasize,\r\n width,\r\n minWidth,\r\n maxWidth,\r\n value,\r\n placeholder,\r\n options,\r\n ...props\r\n },\r\n ref,\r\n ) => (\r\n \r\n \r\n {placeholder && {placeholder}}\r\n {options.map((item: any, i: number) => (\r\n \r\n {item.name}\r\n \r\n ))}\r\n \r\n \r\n ),\r\n);\r\nSelectInput.displayName = 'SelectInput';\r\n\r\nexport const SelectField = React.forwardRef(\r\n (\r\n {\r\n dataId,\r\n id,\r\n disabled,\r\n value,\r\n onChange,\r\n placeholder = '',\r\n invalid,\r\n label,\r\n options,\r\n hasHelper,\r\n hasLegacyStyles,\r\n helperContent,\r\n emphasize,\r\n thinLabel,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return hasHelper ? (\r\n \r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n {label && (\r\n \r\n {label}\r\n \r\n )}\r\n \r\n \r\n );\r\n },\r\n);\r\nSelectField.displayName = 'SelectField';\r\n","import * as React from 'react';\r\nimport { useCallback, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { transparentize } from 'polished';\r\n\r\nimport { TreeCollapse } from '../../../tree-collapse';\r\nimport { CheckboxInput } from '../../../checkbox-input';\r\nimport { SelectField, SelectFieldOptions } from '../../../select-field';\r\nimport { COLOR, FONT_SIZE, SPACING, SPEED } from '../../../../packages/constants';\r\nimport { Edit } from '../../../../packages/icons';\r\nimport { TrackingSettingsTheme, TrackingItemStatus } from '../../tracking-settings-enums';\r\nimport { Text } from '../../../text';\r\nimport { DataSignature } from '../DataWrapper/data-wrapper';\r\n\r\ninterface TreeCollapseProps {\r\n handleUpdateData: (e: DataSignature) => void;\r\n handleSaveOnChange?: (data: DataSignature, e?: HTMLInputElement) => void;\r\n organisationId?: string;\r\n category: any;\r\n categoryIndex: number;\r\n data: DataSignature;\r\n dataIndex: number;\r\n dropdownData?: SelectFieldOptions;\r\n dataItem: any;\r\n isTreeExpanded: boolean;\r\n showAbbreviations?: boolean;\r\n editAbbreviationFunction?: (organisationId: string, dataItemId: string, categoryName: string) => void;\r\n theme?: TrackingSettingsTheme;\r\n filterValue?: any;\r\n}\r\n\r\ninterface ListColumnProps {\r\n alignRight?: boolean;\r\n dropdownData?: SelectFieldOptions;\r\n}\r\n\r\ninterface TrackingListItemProps {\r\n isArchived?: boolean;\r\n}\r\n\r\ninterface CategoryTitleWrapperProps {\r\n dropdownData?: SelectFieldOptions;\r\n}\r\n\r\nexport const TrackingList = styled.ul`\r\n padding-bottom: ${SPACING.MEDIUM};\r\n`;\r\n\r\nexport const TrackingListItem = styled.li`\r\n display: flex;\r\n padding: ${SPACING.XX_SMALL} ${SPACING.MEDIUM} ${SPACING.XX_SMALL} 28px;\r\n background-color: ${(props) => (props.isArchived ? COLOR.LEGACY.DATAGRID_ARCHIVED_BG : 'none')};\r\n`;\r\n\r\nconst budgetColumnWidth = '145px';\r\n\r\nexport const TrackingListColumn = styled.div`\r\n width: ${(props) =>\r\n props.dropdownData && props.dropdownData.length > 0\r\n ? props.alignRight\r\n ? `calc(${budgetColumnWidth} + ${SPACING.MEDIUM})`\r\n : `calc(100% - ${budgetColumnWidth} - ${SPACING.MEDIUM})`\r\n : '100%'};\r\n display: flex;\r\n align-items: center;\r\n justify-content: ${(props) => (props.alignRight ? 'flex-end' : 'flex-start')};\r\n`;\r\n\r\nconst StyledTextLabel = styled.span`\r\n &&& {\r\n display: flex;\r\n margin-left: 0;\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: 700;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n opacity: 1;\r\n justify-content: flex-end;\r\n flex-grow: 1;\r\n margin-right: 90px;\r\n }\r\n`;\r\n\r\nconst StyledCheckbox = styled.input`\r\n margin: 2px 6px 2px 4px;\r\n`;\r\n\r\nconst StyledLabel = styled.label`\r\n &&& {\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n display: inline;\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n line-height: ${FONT_SIZE.LARGE};\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n }\r\n`;\r\n\r\nconst EditButton = styled.button`\r\n min-width: 0px;\r\n border: 1px solid transparent;\r\n border-radius: 15px;\r\n background-color: transparent;\r\n padding: ${SPACING.SMALL};\r\n margin-left: ${SPACING.SMALL};\r\n cursor: pointer;\r\n transition: border-color ${SPEED.TRANSITION}, background-color ${SPEED.TRANSITION};\r\n\r\n &:hover {\r\n border-color: ${transparentize(0.8, COLOR.MAIN.LABEL_TEXT)};\r\n background-color: ${transparentize(0.85, COLOR.MAIN.LABEL_TEXT)};\r\n }\r\n`;\r\n\r\nconst StyledEdit = styled(Edit)`\r\n width: 13px;\r\n height: 13px;\r\n fill: ${COLOR.MAIN.LABEL_TEXT};\r\n`;\r\n\r\nconst NoResultsFound = styled(Text)`\r\n margin-bottom: 0;\r\n`;\r\n\r\nconst StyledCheckBoxInput = styled(CheckboxInput)`\r\n min-width: 0px;\r\n`;\r\n\r\nconst CategoryCounter = styled.span`\r\n margin-left: ${SPACING.SMALL};\r\n white-space: nowrap;\r\n min-width: 0px;\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n font-weight: 400;\r\n`;\r\n\r\nconst CategoryTitleWrapper = styled.div`\r\n width: ${(props) => (props.dropdownData && props.dropdownData.length ? '50%' : '100%')};\r\n display: inline-flex;\r\n align-items: center;\r\n`;\r\n\r\nconst regexString = /[^\\w-_]/g;\r\nconst lowerKebab = (value: string): string => value.replace(regexString, '-').toLowerCase();\r\n\r\nconst TreeCollapseWrapper = ({\r\n data,\r\n dataItem,\r\n dataIndex,\r\n category,\r\n categoryIndex,\r\n filterValue,\r\n isTreeExpanded,\r\n handleUpdateData,\r\n handleSaveOnChange,\r\n organisationId,\r\n dropdownData,\r\n showAbbreviations,\r\n editAbbreviationFunction,\r\n theme,\r\n}: TreeCollapseProps) => {\r\n const [itemsSelected, setItemsSelected] = useState(0);\r\n const [totalCount, setTotalCount] = useState(0);\r\n const handleParentCheckbox = (category: any, e: any) => {\r\n let count = 0;\r\n const tempTrackingData = { ...data };\r\n tempTrackingData.dataSources.forEach((dataItem: any, i: number) => {\r\n dataItem.categories.forEach((dataCategory: any, j: number) => {\r\n if (dataCategory === category) {\r\n tempTrackingData.dataSources[i].categories[j].items.forEach((catItem: any) => {\r\n if (\r\n tempTrackingData.hideArchivedTracking &&\r\n catItem.trackingItemStatusCode === TrackingItemStatus.Archived\r\n ) {\r\n return;\r\n } else {\r\n catItem.isShown = e.target.checked;\r\n if (e.target.checked) {\r\n count += 1;\r\n } else {\r\n count = 0;\r\n }\r\n }\r\n });\r\n }\r\n });\r\n });\r\n if (handleSaveOnChange) handleSaveOnChange(tempTrackingData, e.target);\r\n handleUpdateData(tempTrackingData);\r\n setItemsSelected(count);\r\n };\r\n\r\n const checkParentCheckboxState = useCallback(\r\n (hideArchivedTracking: any) => {\r\n let count = 0;\r\n const categoryCheckboxId = `checkbox__${lowerKebab(dataItem.name)}-category-${lowerKebab(category.name)}`;\r\n const categoryCheckboxElement = document.getElementById(categoryCheckboxId);\r\n const checkedValues: boolean[] = [];\r\n\r\n category.items.forEach((item: any) => {\r\n if (hideArchivedTracking && item.trackingItemStatusCode === TrackingItemStatus.Archived) {\r\n return;\r\n } else {\r\n checkedValues.push(item.isShown);\r\n if (item.isShown === true) {\r\n count += 1;\r\n }\r\n }\r\n });\r\n setItemsSelected(count);\r\n\r\n let firstValue = false;\r\n // loop over each array index\r\n for (let i = 0; checkedValues.length > i; i += 1) {\r\n if (i === 0) {\r\n // set first item to check against\r\n firstValue = checkedValues[0];\r\n // next item to check\r\n } else {\r\n // if its different to the firstValue, set indeterminate\r\n if (firstValue !== checkedValues[i]) {\r\n // set indeterminate\r\n if (categoryCheckboxElement) {\r\n // @ts-ignore\r\n categoryCheckboxElement.indeterminate = true;\r\n break;\r\n }\r\n // if first item is the same, set to true\r\n } else if (firstValue && firstValue === checkedValues[i]) {\r\n // set true\r\n if (categoryCheckboxElement) {\r\n // @ts-ignore\r\n categoryCheckboxElement.indeterminate = false;\r\n }\r\n // otherwise set false\r\n } else if (!firstValue && firstValue === checkedValues[i]) {\r\n // set false\r\n if (categoryCheckboxElement) {\r\n // @ts-ignore\r\n categoryCheckboxElement.indeterminate = false;\r\n }\r\n }\r\n }\r\n }\r\n if (categoryCheckboxElement) {\r\n // @ts-ignore\r\n categoryCheckboxElement.checked = count === checkedValues.length;\r\n }\r\n },\r\n [category.items, category.name, dataItem.name],\r\n );\r\n\r\n const countTotal = useCallback(() => {\r\n if (data.hideArchivedTracking) {\r\n let counter = 0;\r\n category.items.forEach((item: any) => {\r\n if (item.trackingItemStatusCode !== TrackingItemStatus.Archived) {\r\n counter += 1;\r\n }\r\n });\r\n setTotalCount(counter);\r\n } else {\r\n setTotalCount(category.items.length);\r\n }\r\n }, [category.items, data.hideArchivedTracking]);\r\n\r\n const handleCheckbox = (event: any, dataIndex: number, categoryIndex: number) => {\r\n const tempTrackingData = { ...data };\r\n tempTrackingData.dataSources[dataIndex].categories[categoryIndex].items.forEach((item: any) => {\r\n if (item.id === event.id) {\r\n item.isShown = !item.isShown;\r\n }\r\n });\r\n\r\n checkParentCheckboxState(data.hideArchivedTracking);\r\n\r\n if (handleSaveOnChange) handleSaveOnChange(tempTrackingData, event.target);\r\n handleUpdateData(tempTrackingData);\r\n };\r\n\r\n const handleBudgetDropdown = (event: any, itemId: string, dataIndex: number, categoryIndex: number) => {\r\n const tempTrackingData = { ...data };\r\n const option = tempTrackingData.dataSources[dataIndex].categories[categoryIndex].items.find(\r\n (x: { id: string }) => x.id === itemId,\r\n );\r\n if (!option) return;\r\n option.budget = event.target.value;\r\n // tslint:disable-next-line:no-unused-expression\r\n if (handleSaveOnChange) handleSaveOnChange(tempTrackingData, event.target);\r\n handleUpdateData(tempTrackingData);\r\n };\r\n\r\n const handleAbbreviationButton = () => {\r\n if (editAbbreviationFunction && organisationId) {\r\n editAbbreviationFunction(organisationId, dataItem.id, category.id);\r\n }\r\n };\r\n\r\n const filteredList = category.items.filter((item: any) => {\r\n if (filterValue.startsWith(' ')) {\r\n return item.name;\r\n } else {\r\n return item.name.toLowerCase().includes(filterValue);\r\n }\r\n });\r\n\r\n React.useEffect(() => {\r\n checkParentCheckboxState(data.hideArchivedTracking);\r\n countTotal();\r\n }, [data, checkParentCheckboxState, countTotal]);\r\n\r\n return (\r\n \r\n \r\n handleParentCheckbox(category, e)}\r\n labelMaxWidth={dropdownData && dropdownData.length > 0 ? '15vw' : 'none'}\r\n labelOverflow={'hidden'}\r\n labelTextOverflow={'ellipsis'}\r\n />\r\n {`(${itemsSelected} of ${totalCount})`}\r\n {showAbbreviations && (\r\n \r\n \r\n \r\n )}\r\n \r\n {dropdownData && dropdownData.length ? (\r\n \r\n Budgets\r\n \r\n ) : null}\r\n \r\n }\r\n >\r\n \r\n {filteredList.length > 0 ? (\r\n filteredList\r\n .sort((a: any, b: any) => (a.name > b.name ? 1 : -1))\r\n .map((item: any) => (\r\n \r\n {item.trackingItemStatusCode === TrackingItemStatus.Archived &&\r\n data.hideArchivedTracking ? null : (\r\n \r\n \r\n handleCheckbox(item, dataIndex, categoryIndex)}\r\n disabled={\r\n item.trackingItemStatusCode === TrackingItemStatus.Archived &&\r\n data.hideArchivedTracking\r\n }\r\n />\r\n \r\n {item.name}\r\n \r\n \r\n {dropdownData && dropdownData.length ? (\r\n \r\n \r\n handleBudgetDropdown(e, item.id, dataIndex, categoryIndex)\r\n }\r\n name={'budget'}\r\n dataId={`dropdown__${lowerKebab(\r\n dataItem.name,\r\n )}-category-${lowerKebab(category.name)}--${lowerKebab(item.name)}`}\r\n options={dropdownData}\r\n placeholder={'-'}\r\n disabled={!item.isShown}\r\n value={item.budget || ''}\r\n emphasize\r\n minWidth={'130px'}\r\n maxWidth={'130px'}\r\n />\r\n \r\n ) : null}\r\n \r\n )}\r\n \r\n ))\r\n ) : (\r\n
  • \r\n \r\n No results found.\r\n \r\n
  • \r\n )}\r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default TreeCollapseWrapper;\r\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nimport * as React from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport { ButtonAsText } from '../../../button';\r\nimport TreeCollapseWrapper from '../TreeCollapseWrapper/tree-collapse-wrapper';\r\nimport { DataSourceNames, TrackingSettingsTheme } from '../../tracking-settings-enums';\r\nimport { COLOR, FONT_SIZE, SPACING } from '../../../../packages/constants';\r\nimport XeroLogoGenericRound from '../../../../packages/icons/xero-logo-generic-round';\r\nimport QuickbooksLogoGenericRound from '../../../../packages/icons/quickbooks-logo-generic-round';\r\nimport MyobLogoGenericRound from '../../../../packages/icons/myob-logo-generic-round';\r\nimport SageLogoGenericRound from '../../../../packages/icons/sage-logo-generic-round';\r\nimport { SearchFilter } from '../../../search-filter/search-filter';\r\nimport { useEffect, useRef, useState } from 'react';\r\n\r\ninterface CategoryItem {\r\n id: string;\r\n name: string;\r\n isShown: boolean;\r\n budget?: string;\r\n trackingItemStatusCode?: string;\r\n}\r\n\r\ninterface Category {\r\n id: string;\r\n name: string;\r\n items: CategoryItem[];\r\n}\r\n\r\ninterface TrackedBudget {\r\n name: string;\r\n value: string;\r\n}\r\n\r\nexport interface DataSource {\r\n id: string;\r\n dataSourceTypeCode: string;\r\n name: string;\r\n hasTracking?: boolean;\r\n orderPriority?: number;\r\n categories: Category[];\r\n budgets?: TrackedBudget[];\r\n}\r\n\r\ninterface BuildCategoryData {\r\n dataSource: DataSource;\r\n categoryBuilder: (c: Category, i: number) => React.ReactElement;\r\n}\r\n\r\nexport interface DataSignature {\r\n dataSources: DataSource[];\r\n hideArchivedTracking: boolean;\r\n displayUnselectedTrackingItems?: boolean;\r\n}\r\n\r\nexport interface DataWrapperProps {\r\n handleUpdateData: (e: DataSignature) => void;\r\n data: DataSignature;\r\n dataIndex: number;\r\n dataItem: DataSource;\r\n dropdownData?: {\r\n name: string;\r\n value: string;\r\n }[];\r\n editAbbreviationFunction?: any;\r\n handleSaveOnChange?: (data: DataSignature, e?: HTMLInputElement) => void;\r\n organisationId?: string;\r\n showAbbreviations?: boolean;\r\n showExpandCollapseAll?: boolean;\r\n showSearchFilter?: boolean;\r\n theme?: TrackingSettingsTheme;\r\n treesExpanded?: boolean;\r\n}\r\n\r\nconst StyledDataSourceWrapper = styled.div`\r\n margin-bottom: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? 0 : SPACING.XX_LARGE)};\r\n`;\r\n\r\nconst ButtonWrapper = styled.div`\r\n display: flex;\r\n margin-right: ${SPACING.MEDIUM};\r\n`;\r\n\r\nconst StyledDataWrapper = styled.div`\r\n border: 1px solid\r\n ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? COLOR.LEGACY.DATAGRID_BORDER : COLOR.MAIN.MEDIUM_GREY};\r\n border-radius: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '3px 3px 0 0' : 0)};\r\n background-color: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '#fff' : '#f7f9fb')};\r\n padding: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? COLOR.LEGACY.DATAGRID_BORDER : SPACING.MEDIUM};\r\n position: relative;\r\n`;\r\n\r\nconst HeaderWrapper = styled.div`\r\n display: flex;\r\n align-items: center;\r\n padding: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? `8px ${SPACING.MEDIUM}` : `0 0 ${SPACING.MEDIUM}`};\r\n background-image: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? 'linear-gradient(-180deg,#f5f5f5,#f2f1f1)' : 'none'};\r\n box-shadow: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? 'inset 0 1px 0 hsla(0,0%,100%,.5)' : 'none'};\r\n position: relative;\r\n`;\r\n\r\nconst Header = styled.h1`\r\n &&& {\r\n font-size: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '12px' : FONT_SIZE.LARGE)};\r\n line-height: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '16px' : FONT_SIZE.X_LARGE)};\r\n font-weight: 700;\r\n margin: 0 auto 0 ${SPACING.X_SMALL};\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n }\r\n`;\r\n\r\nconst StyledWrapper = styled.div`\r\n padding: ${SPACING.SMALL};\r\n`;\r\n\r\nconst StyledParagraph = styled.p`\r\n &&& {\r\n font-size: ${FONT_SIZE.SMALL};\r\n padding: ${SPACING.SMALL};\r\n line-height: ${FONT_SIZE.LARGE};\r\n white-space: normal;\r\n }\r\n`;\r\n\r\nconst StyledOverflow = styled.div`\r\n overflow: auto;\r\n max-height: 60vh;\r\n`;\r\n\r\nconst StyledSearchFilter = styled(SearchFilter)`\r\n position: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? 'absolute' : 'static')};\r\n top: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '3px' : undefined)};\r\n right: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '3px' : undefined)};\r\n\r\n button {\r\n min-height: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '28px' : undefined)};\r\n }\r\n\r\n svg {\r\n height: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '11px' : undefined)};\r\n width: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '11px' : undefined)};\r\n }\r\n`;\r\n\r\nconst BuildLogo = ({ name }: any) => {\r\n if (name === DataSourceNames.Xero) {\r\n return ;\r\n } else if (name === DataSourceNames.Quickbooks || name === DataSourceNames.QuickBooksDesktop) {\r\n return ; //Replace with a new icon which is wider having the word 'Quickbooks'\r\n } else if (name === DataSourceNames.MyobAccountRight || name === DataSourceNames.MyobAccountRightDesktop) {\r\n return ;\r\n } else if (name === DataSourceNames.Sage50Desktop) {\r\n return ;\r\n } else {\r\n return null;\r\n }\r\n};\r\n\r\nconst BuildContent = ({ dataSource, categoryBuilder }: BuildCategoryData) => {\r\n if (!dataSource.hasTracking) {\r\n return (\r\n \r\n No tracking category data has been imported.\r\n \r\n To import tracking category data, please navigate to the import screen and select the tracking\r\n checkboxes before importing.\r\n \r\n \r\n );\r\n } else if (!dataSource.categories || dataSource.categories.length == 0) {\r\n return (\r\n \r\n \r\n Tracking category data has not been enabled in your accounting system and therefore cannot be\r\n imported into Spotlight.\r\n \r\n \r\n );\r\n } else {\r\n return (\r\n \r\n {dataSource.categories\r\n .sort((a: Category, b: Category) => (a.name > b.name ? 1 : -1))\r\n .map(categoryBuilder)}\r\n \r\n );\r\n }\r\n};\r\n\r\nconst DataWrapper = ({\r\n data,\r\n dropdownData,\r\n dataItem,\r\n dataIndex,\r\n editAbbreviationFunction,\r\n handleUpdateData,\r\n handleSaveOnChange,\r\n organisationId,\r\n showAbbreviations,\r\n showExpandCollapseAll,\r\n showSearchFilter,\r\n theme,\r\n treesExpanded,\r\n}: DataWrapperProps): JSX.Element => {\r\n const [isTreeExpanded, setTreeExpand] = useState(false);\r\n const filterInputRef = useRef(null);\r\n const [filterValue, setFilterValue] = useState('');\r\n\r\n const buildCategory = (category: Category, categoryIndex: number) => (\r\n \r\n );\r\n\r\n const handleFilterChange = (e: any) => {\r\n setFilterValue(e.target.value.toLowerCase());\r\n };\r\n\r\n const handleClearButton = () => {\r\n setFilterValue('');\r\n if (filterInputRef.current) {\r\n filterInputRef.current.focus();\r\n }\r\n };\r\n\r\n // TODO: improve this\r\n // This parent component sets the state to all of the tree components - to be collapsed or expanded.\r\n // If user collapses a tree component, this parent component still thinks it's open\r\n // This code below forces all to be expanded (true) then sets them to collapsed (false)\r\n const handleCollapseAll = () => {\r\n setTreeExpand(true);\r\n setTimeout(() => {\r\n setTreeExpand(false);\r\n }, 0);\r\n };\r\n\r\n // TODO: improve this\r\n const handleExpandAll = () => {\r\n setTreeExpand(false);\r\n setTimeout(() => {\r\n setTreeExpand(true);\r\n }, 0);\r\n };\r\n\r\n useEffect(() => {\r\n if (treesExpanded) setTreeExpand(treesExpanded);\r\n }, [treesExpanded]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n
    \r\n {dataItem.name}\r\n
    \r\n {showExpandCollapseAll && (\r\n \r\n \r\n Expand all\r\n \r\n \r\n Collapse all\r\n \r\n \r\n )}\r\n {showSearchFilter && (\r\n \r\n )}\r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default DataWrapper;\r\n","import * as React from 'react';\r\n\r\nimport styled, { ThemeProvider } from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPACING, THEME } from '../../packages/constants';\r\nimport { CircleWithX, CircledTick } from '../../packages/icons';\r\nimport { Button, ButtonGroup } from '../button';\r\nimport { CheckboxInput } from '../checkbox-input';\r\nimport { Text } from '../text';\r\nimport DataWrapper, { DataSource } from './atoms/DataWrapper/data-wrapper';\r\nimport { DataSignature } from './atoms/DataWrapper/data-wrapper';\r\nimport { TrackingSettingsTheme } from './tracking-settings-enums';\r\n\r\nexport interface TrackingSettingsProps {\r\n data: DataSignature;\r\n dataId: string;\r\n handleSaveButton: (data: DataSignature, e?: HTMLInputElement) => void;\r\n editAbbreviationFunction?: any;\r\n organisationId?: string;\r\n saveOnChange?: boolean;\r\n saveButtonLoading?: boolean;\r\n saveResponse?: { status: string; message: string };\r\n showAbbreviations?: boolean;\r\n showExpandCollapseAll?: boolean;\r\n showSearchFilter?: boolean;\r\n showSingleDataSource?: string;\r\n theme?: TrackingSettingsTheme;\r\n treesExpanded?: boolean;\r\n isLoading?: boolean;\r\n}\r\n\r\nconst LoadingState = styled.div`\r\n position: absolute;\r\n background: rgba(0, 0, 0, 0.14);\r\n height: 100%;\r\n width: 100%;\r\n z-index: 1000;\r\n`;\r\n\r\nconst StyledTrackingSettings = styled.div``;\r\n\r\nconst StyledInner = styled.div`\r\n margin-bottom: ${SPACING.X_LARGE};\r\n position: relative;\r\n`;\r\n\r\nconst IconError = styled(CircleWithX)`\r\n fill: ${COLOR.PRIMARY.RED};\r\n height: 18px;\r\n width: 18px;\r\n margin-right: ${SPACING.X_SMALL};\r\n`;\r\n\r\nconst IconSuccess = styled(CircledTick)`\r\n fill: ${COLOR.PRIMARY.GREEN};\r\n height: 18px;\r\n width: 18px;\r\n margin-right: ${SPACING.X_SMALL};\r\n`;\r\n\r\nconst Message = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n`;\r\n\r\nconst Footer = styled.div`\r\n display: flex;\r\n border: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? `1px solid ${COLOR.LEGACY.DATAGRID_BORDER}` : 0};\r\n border-top: 0;\r\n border-radius: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? `0 0 3px 3px ` : 0)};\r\n padding: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? `8px ${SPACING.MEDIUM}` : `0 0 ${SPACING.MEDIUM}`};\r\n background-image: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? 'linear-gradient(-180deg,#f5f5f5,#f2f1f1)' : 'none'};\r\n box-shadow: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? 'inset 0 1px 0 hsla(0,0%,100%,.5)' : 'none'};\r\n font-size: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '12px' : FONT_SIZE.LARGE)};\r\n line-height: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '16px' : FONT_SIZE.X_LARGE)};\r\n font-weight: 400;\r\n`;\r\n\r\nconst StyledCheckboxListItem = styled.li`\r\n padding: 2px;\r\n`;\r\n\r\nexport const TrackingSettings = ({\r\n data,\r\n dataId,\r\n editAbbreviationFunction,\r\n handleSaveButton,\r\n organisationId,\r\n saveButtonLoading,\r\n saveOnChange,\r\n saveResponse,\r\n showAbbreviations,\r\n showExpandCollapseAll = true,\r\n showSearchFilter,\r\n showSingleDataSource,\r\n theme,\r\n treesExpanded,\r\n isLoading,\r\n ...props\r\n}: TrackingSettingsProps) => {\r\n const [isDisabled, setDisabled] = React.useState(true);\r\n const [showMessage, setShowMessage] = React.useState(true);\r\n const [trackingData, setTrackingData] = React.useState(data);\r\n\r\n React.useEffect(() => {\r\n setTrackingData(data);\r\n }, [data]);\r\n\r\n const updateData = (dataToUpdate: DataSignature) => {\r\n setTrackingData(dataToUpdate);\r\n setDisabled(false);\r\n setShowMessage(false);\r\n };\r\n\r\n const handleHideArchived = () => {\r\n const trackingDataCopy = { ...trackingData };\r\n trackingDataCopy.hideArchivedTracking = !trackingDataCopy.hideArchivedTracking;\r\n updateData(trackingDataCopy);\r\n if (saveOnChange) handleSaveButton(trackingDataCopy, undefined);\r\n };\r\n\r\n const handleDisplayUnselectedTrackingItems = () => {\r\n const trackingDataCopy = { ...trackingData };\r\n trackingDataCopy.displayUnselectedTrackingItems = !trackingDataCopy.displayUnselectedTrackingItems;\r\n updateData(trackingDataCopy);\r\n if (saveOnChange) handleSaveButton(trackingDataCopy, undefined);\r\n };\r\n\r\n React.useEffect(() => {\r\n if (!saveButtonLoading) {\r\n setDisabled(true);\r\n }\r\n\r\n if (saveResponse) {\r\n setShowMessage(true);\r\n\r\n if (saveResponse.status === 'ERROR') {\r\n setDisabled(false);\r\n }\r\n }\r\n }, [saveButtonLoading, saveResponse]);\r\n\r\n React.useEffect(() => {\r\n if (!showSingleDataSource) {\r\n const trackingDataCopy = { ...trackingData };\r\n trackingDataCopy.dataSources.sort((a, b) =>\r\n a.orderPriority && b.orderPriority && a.orderPriority > b.orderPriority ? 1 : -1,\r\n );\r\n setTrackingData(trackingDataCopy);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [showSingleDataSource]);\r\n\r\n React.useEffect(() => {\r\n if (showSingleDataSource) {\r\n setTrackingData({\r\n dataSources: data.dataSources.filter((obj: DataSource) => obj.id === showSingleDataSource),\r\n hideArchivedTracking: trackingData.hideArchivedTracking,\r\n displayUnselectedTrackingItems: trackingData.displayUnselectedTrackingItems,\r\n });\r\n }\r\n }, [\r\n showSingleDataSource,\r\n data.dataSources,\r\n trackingData.hideArchivedTracking,\r\n trackingData.displayUnselectedTrackingItems,\r\n ]);\r\n\r\n const hasTracking = trackingData.dataSources.some((d) => d.hasTracking && d.categories && d.categories.length > 0);\r\n\r\n return (\r\n \r\n \r\n \r\n {isLoading && }\r\n {saveOnChange\r\n ? trackingData.dataSources.map((dataItem: DataSource, dataIndex: number) => (\r\n \r\n a.name.toLowerCase().localeCompare(b.name.toLowerCase()),\r\n )\r\n : []\r\n }\r\n dataIndex={dataIndex}\r\n dataItem={dataItem}\r\n handleUpdateData={updateData}\r\n handleSaveOnChange={handleSaveButton}\r\n treesExpanded={treesExpanded}\r\n organisationId={organisationId}\r\n showAbbreviations={showAbbreviations}\r\n editAbbreviationFunction={editAbbreviationFunction}\r\n theme={theme}\r\n />\r\n ))\r\n : trackingData.dataSources.map((dataItem: DataSource, dataIndex: number) => (\r\n \r\n a.name.toLowerCase().localeCompare(b.name.toLowerCase()),\r\n )\r\n : []\r\n }\r\n dataIndex={dataIndex}\r\n dataItem={dataItem}\r\n handleUpdateData={updateData}\r\n treesExpanded={treesExpanded}\r\n organisationId={organisationId}\r\n showAbbreviations={showAbbreviations}\r\n editAbbreviationFunction={editAbbreviationFunction}\r\n theme={theme}\r\n />\r\n ))}\r\n {hasTracking && (\r\n
    \r\n
      \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
    \r\n
    \r\n )}\r\n
    \r\n {!saveOnChange && (\r\n \r\n handleSaveButton(trackingData, undefined)}\r\n loading={saveButtonLoading}\r\n >\r\n Save\r\n \r\n {saveResponse && showMessage && (\r\n \r\n {saveResponse.status === 'ERROR' && }\r\n {saveResponse.status === 'SUCCESS' && }\r\n \r\n {saveResponse.message}\r\n \r\n \r\n )}\r\n \r\n )}\r\n
    \r\n
    \r\n );\r\n};\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport interface TabButtonGroupProps {\r\n children: React.ReactNode;\r\n}\r\n\r\nconst StyledTabButtonGroup = styled.ul`\r\n list-style-type: none;\r\n > li {\r\n display: inline-block;\r\n }\r\n > li:not(:first-child) > button {\r\n border-left: none;\r\n }\r\n > li:first-child > button {\r\n border-radius: 3px 0px 0px 0px;\r\n }\r\n > li:last-child > button {\r\n border-radius: 0px 3px 0px 0px;\r\n }\r\n`;\r\n\r\nexport const TabButtonGroup = React.forwardRef(({ children, ...props }, ref) => (\r\n \r\n {children}\r\n \r\n));\r\nTabButtonGroup.displayName = 'TabButtonGroup';\r\n","import * as React from 'react';\r\n\r\nimport { darken } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE } from '../../../../packages/constants';\r\n\r\nexport interface TabButtonProps {\r\n onClick?: (e: any) => void;\r\n dataId: string;\r\n children: React.ReactNode;\r\n selected: boolean;\r\n value: string;\r\n}\r\n\r\nconst StyledTabButton = styled.button.attrs(({ dataId }) => ({\r\n 'data-test-id': dataId,\r\n}))`\r\n border: 2px solid ${COLOR.MAIN.MEDIUM_GREY};\r\n padding: 9px 12px;\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 700;\r\n line-height: 1.2;\r\n background-color: ${(props) => (props.selected ? COLOR.PRIMARY.WHITE : darken(0.05, COLOR.PRIMARY.WHITE))};\r\n color: ${COLOR.PRIMARY.BLACK};\r\n cursor: pointer;\r\n`;\r\n\r\nexport const TabButton = React.forwardRef(({ children, ...props }, ref) => (\r\n \r\n {children}\r\n \r\n));\r\nTabButton.displayName = 'TabButton';\r\n","import * as React from 'react';\r\n\r\nimport { darken, transparentize } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, RADIUS, SPACING } from '../../packages/constants';\r\n\r\nexport interface PasswordInputProps {\r\n autoComplete?: string;\r\n autoFocus?: boolean;\r\n dataId: string;\r\n defaultValue?: string | string[];\r\n disabled?: boolean;\r\n id: string;\r\n invalid?: boolean;\r\n maxLength?: number;\r\n minLength?: number;\r\n pattern?: string;\r\n readOnly?: boolean;\r\n name: string;\r\n onChange?: (e: any) => void;\r\n placeholder?: string;\r\n required?: boolean;\r\n value?: string | string[] | number;\r\n className?: string;\r\n}\r\n\r\ninterface StyledInputProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n}\r\n\r\nconst StyledInput = styled.input`\r\n background-color: ${(props: StyledInputProps): string =>\r\n props.disabled ? darken('0.1', COLOR.PRIMARY.WHITE) : COLOR.PRIMARY.WHITE};\r\n color: ${(props: StyledInputProps): string =>\r\n props.disabled ? transparentize('0.5', COLOR.PRIMARY.BLACK) : COLOR.PRIMARY.BLACK};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n padding: ${SPACING.SMALL};\r\n border-width: 1px;\r\n border-style: solid;\r\n border-color: ${(props: StyledInputProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD)};\r\n border-radius: ${RADIUS.DEFAULT};\r\n\r\n &::placeholder {\r\n opacity: 0.65;\r\n }\r\n`;\r\n\r\nexport const PasswordInput = React.forwardRef(\r\n (\r\n {\r\n autoComplete,\r\n autoFocus,\r\n dataId,\r\n defaultValue,\r\n disabled,\r\n id,\r\n invalid,\r\n maxLength,\r\n minLength,\r\n pattern,\r\n readOnly,\r\n name,\r\n placeholder,\r\n required,\r\n value,\r\n onChange,\r\n },\r\n ref,\r\n ) => {\r\n return (\r\n \r\n );\r\n },\r\n);\r\nPasswordInput.displayName = 'PasswordInput';\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPACING } from '../../packages/constants';\r\nimport { HelperModal, QuestionMark } from '../helper-modal';\r\nimport { PasswordInput } from '../password-input';\r\n\r\nexport interface PasswordFieldProps {\r\n dataId: string;\r\n label: string;\r\n id: string;\r\n name: string;\r\n autofocus?: boolean;\r\n defaultValue?: string;\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n hasHelper?: boolean;\r\n helperContent?: React.ReactNode;\r\n numeralsOnly?: boolean;\r\n placeholder?: string;\r\n value?: string;\r\n onChange?: (e: any) => void;\r\n maxLength?: number;\r\n minLength?: number;\r\n pattern?: string;\r\n readOnly?: boolean;\r\n required?: boolean;\r\n thinLabel?: boolean;\r\n className?: string;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n thinLabel?: boolean;\r\n}\r\n\r\nconst wrapperStyles = `\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst Wrapper = styled.label`\r\n ${wrapperStyles}\r\n`;\r\n\r\nconst WrapperHasHelper = styled.div`\r\n ${wrapperStyles}\r\n`;\r\n\r\nconst StyledLabelWrapper = styled.div`\r\n display: inline-flex;\r\n`;\r\n\r\nconst StyledTextLabel = styled.span`\r\n display: block;\r\n padding-bottom: ${SPACING.XX_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledLabelHasHelper = styled.label`\r\n display: inline-block;\r\n margin-right: ${SPACING.X_SMALL};\r\n padding-bottom: ${SPACING.XX_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nexport const PasswordField = React.forwardRef(\r\n (\r\n {\r\n dataId,\r\n label,\r\n id,\r\n hasHelper,\r\n helperContent,\r\n placeholder,\r\n name,\r\n autofocus,\r\n defaultValue,\r\n disabled,\r\n invalid,\r\n onChange,\r\n maxLength,\r\n minLength,\r\n pattern,\r\n readOnly,\r\n required,\r\n thinLabel,\r\n value,\r\n className,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return hasHelper ? (\r\n \r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n );\r\n },\r\n);\r\nPasswordField.displayName = 'PasswordField';\r\n","import * as React from 'react';\r\n\r\nimport { darken, transparentize } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, RADIUS, SPACING } from '../../packages/constants';\r\n\r\nexport interface NumberInputProps {\r\n autoComplete?: string;\r\n autoFocus?: boolean;\r\n dataId: string;\r\n defaultValue?: string | string[];\r\n disabled?: boolean;\r\n id: string;\r\n invalid?: boolean;\r\n max?: number | string;\r\n min?: number | string;\r\n name: string;\r\n onChange?: (e: any) => void;\r\n onBlur?: (e: any) => void;\r\n placeholder?: string;\r\n required?: boolean;\r\n step?: number | string;\r\n value?: string | string[] | number;\r\n className?: string;\r\n ariaLabel?: string;\r\n}\r\n\r\ninterface StyledInputProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n}\r\n\r\nconst StyledInput = styled.input`\r\n background-color: ${(props: StyledInputProps): string =>\r\n props.disabled ? darken('0.1', COLOR.PRIMARY.WHITE) : COLOR.PRIMARY.WHITE};\r\n color: ${(props: StyledInputProps): string =>\r\n props.disabled ? transparentize('0.5', COLOR.PRIMARY.BLACK) : COLOR.PRIMARY.BLACK};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n padding: ${SPACING.SMALL};\r\n border-width: 1px;\r\n border-style: solid;\r\n border-color: ${(props: StyledInputProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD)};\r\n border-radius: ${RADIUS.DEFAULT};\r\n\r\n &::placeholder {\r\n opacity: 0.65;\r\n }\r\n`;\r\n\r\nexport const NumberInput = React.forwardRef(\r\n (\r\n {\r\n autoComplete,\r\n autoFocus,\r\n dataId,\r\n defaultValue,\r\n disabled,\r\n id,\r\n invalid,\r\n max,\r\n min,\r\n name,\r\n placeholder,\r\n required,\r\n step,\r\n value,\r\n onChange,\r\n onBlur,\r\n ariaLabel,\r\n },\r\n ref,\r\n ) => {\r\n return (\r\n \r\n );\r\n },\r\n);\r\nNumberInput.displayName = 'NumberInput';\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPACING } from '../../packages/constants';\r\nimport { HelperModal, QuestionMark } from '../helper-modal';\r\nimport { NumberInput, NumberInputProps } from '../number-input';\r\n\r\nexport interface NumberFieldProps extends Omit {\r\n hasHelper?: boolean;\r\n helperContent?: React.ReactNode;\r\n label: string;\r\n validationMessage?: string;\r\n thinLabel?: boolean;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n thinLabel?: boolean;\r\n}\r\n\r\nconst wrapperStyles = `\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst Wrapper = styled.label`\r\n ${wrapperStyles}\r\n`;\r\n\r\nconst WrapperHasHelper = styled.div`\r\n ${wrapperStyles}\r\n`;\r\n\r\nconst StyledLabelWrapper = styled.div`\r\n display: inline-flex;\r\n`;\r\n\r\nconst StyledTextLabel = styled.span`\r\n display: block;\r\n padding-bottom: ${SPACING.XX_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledLabelHasHelper = styled.label`\r\n display: inline-block;\r\n padding-bottom: ${SPACING.XX_SMALL};\r\n margin-right: ${SPACING.X_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nexport const NumberField = React.forwardRef(\r\n (\r\n {\r\n autoComplete,\r\n autoFocus,\r\n dataId,\r\n defaultValue,\r\n disabled,\r\n hasHelper,\r\n helperContent,\r\n id,\r\n invalid,\r\n label,\r\n max,\r\n min,\r\n name,\r\n placeholder,\r\n required = false,\r\n step,\r\n onChange,\r\n thinLabel,\r\n value,\r\n className,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return hasHelper ? (\r\n \r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n );\r\n },\r\n);\r\nNumberField.displayName = 'NumberField';\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPACING } from '../../packages/constants';\r\nimport { HelperModal, QuestionMark } from '../helper-modal';\r\nimport { NumberInput, NumberInputProps } from '../number-input';\r\n\r\nexport interface NumberFieldInlineProps extends Omit {\r\n hasHelper?: boolean;\r\n helperContent?: React.ReactNode;\r\n label: string;\r\n validationMessage?: string;\r\n thinLabel?: boolean;\r\n labelWidth?: string;\r\n labelAlignment?: 'start' | 'center' | 'end' | undefined;\r\n symbol?: string;\r\n symbolPlacement?: 'before' | 'after' | undefined;\r\n}\r\n\r\nexport interface NumberFieldProps extends Omit {\r\n hasHelper?: boolean;\r\n helperContent?: React.ReactNode;\r\n label: string;\r\n validationMessage?: string;\r\n thinLabel?: boolean;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n thinLabel?: boolean;\r\n}\r\n\r\ninterface WrapperProps {\r\n labelWidth?: string;\r\n symbolPlacement?: 'before' | 'after' | undefined;\r\n}\r\n\r\ninterface StyledLabelWrapperProps {\r\n labelAlignment: 'start' | 'center' | 'end';\r\n}\r\n\r\ninterface StyledValidationMessageProps {\r\n invalid?: boolean;\r\n symbolPlacement?: 'before' | 'after' | undefined;\r\n}\r\n\r\ninterface StyledSymbolProps {\r\n invalid?: boolean;\r\n symbolPlacement: 'before' | 'after';\r\n}\r\n\r\nconst Wrapper = styled.div`\r\n display: grid;\r\n grid-template-columns:\r\n ${(props: WrapperProps): string => (props.labelWidth ? props.labelWidth : 'auto')}\r\n ${(props: WrapperProps): string => (!props.symbolPlacement ? 'minmax(0, 1fr)' : '')}\r\n ${(props: WrapperProps): string => (props.symbolPlacement === 'before' ? 'auto minmax(0, 1fr)' : '')}\r\n ${(props: WrapperProps): string => (props.symbolPlacement === 'after' ? 'minmax(0, 1fr) auto' : '')};\r\n`;\r\n\r\nconst StyledLabelWrapper = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n align-items: ${(props: StyledLabelWrapperProps): string => props.labelAlignment};\r\n flex-direction: column;\r\n padding-right: ${SPACING.LARGE};\r\n`;\r\n\r\nconst StyledTextLabel = styled.label`\r\n margin-right: ${SPACING.X_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.LARGE};\r\n max-width: 100%;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledLabelHasHelper = styled.div`\r\n display: inline-flex;\r\n max-width: 100%;\r\n`;\r\n\r\nconst StyledValidationMessage = styled.div`\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n line-height: ${FONT_SIZE.SMALL};\r\n color: ${(props: StyledValidationMessageProps): string =>\r\n props.invalid ? COLOR.PRIMARY.RED : COLOR.PRIMARY.BLACK};\r\n padding-top: ${SPACING.SMALL};\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n grid-area: ${(props: StyledValidationMessageProps): string => (!props.symbolPlacement ? '2/2' : '')}\r\n ${(props: StyledValidationMessageProps): string => (props.symbolPlacement === 'before' ? '2/3' : '')}\r\n ${(props: StyledValidationMessageProps): string => (props.symbolPlacement === 'after' ? '2/2' : '')};\r\n`;\r\n\r\nconst StyledSymbol = styled.span`\r\n font-size: ${FONT_SIZE.SMALL};\r\n color: ${(props: StyledSymbolProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.PRIMARY.BLACK)};\r\n align-self: center;\r\n margin: ${(props: StyledSymbolProps): string =>\r\n props.symbolPlacement === 'before' ? `0 ${SPACING.SMALL} 0 0` : `0 0 0 ${SPACING.SMALL}`};\r\n`;\r\nexport const NumberFieldInline = React.forwardRef(\r\n (\r\n {\r\n autoComplete,\r\n autoFocus,\r\n dataId,\r\n defaultValue,\r\n disabled,\r\n hasHelper,\r\n helperContent,\r\n id,\r\n invalid,\r\n label,\r\n max,\r\n min,\r\n name,\r\n placeholder,\r\n required = false,\r\n step,\r\n onChange,\r\n thinLabel,\r\n labelWidth,\r\n labelAlignment = 'start',\r\n value,\r\n className,\r\n validationMessage,\r\n symbol,\r\n symbolPlacement,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return (\r\n \r\n \r\n {hasHelper ? (\r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n {label}\r\n \r\n )}\r\n \r\n {symbol && symbolPlacement === 'before' && (\r\n \r\n {symbol}\r\n \r\n )}\r\n \r\n {symbol && symbolPlacement === 'after' && (\r\n \r\n {symbol}\r\n \r\n )}\r\n {validationMessage && (\r\n \r\n {validationMessage}\r\n \r\n )}\r\n \r\n );\r\n },\r\n);\r\n\r\nNumberFieldInline.displayName = 'NumberFieldInline';\r\n","import * as React from 'react';\r\n\r\nimport SVGBase from '../svg-base/svg-base';\r\n\r\nexport interface SortNumberAscProps {\r\n fill?: string;\r\n title?: string;\r\n height?: string;\r\n width?: string;\r\n viewBox?: string;\r\n}\r\n\r\nconst SortNumberAsc: React.FunctionComponent> = ({\r\n fill = '#00b1ff',\r\n title,\r\n height,\r\n width,\r\n ...rest\r\n}): any => (\r\n \r\n \r\n \r\n \r\n \r\n 1\r\n \r\n \r\n \r\n \r\n 9\r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default SortNumberAsc;\r\n","import SortNumberAsc from './sort-number-asc';\r\n\r\nexport * from './sort-number-asc';\r\nexport default SortNumberAsc;\r\n","import * as React from 'react';\r\n\r\nimport SVGBase from '../svg-base/svg-base';\r\n\r\nexport interface SortNumberDescProps {\r\n fill?: string;\r\n title?: string;\r\n height?: string;\r\n width?: string;\r\n viewBox?: string;\r\n}\r\n\r\nconst SortNumberDesc: React.FunctionComponent> = ({\r\n fill = '#00b1ff',\r\n title,\r\n height,\r\n width,\r\n ...rest\r\n}): any => (\r\n \r\n \r\n \r\n \r\n \r\n 9\r\n \r\n \r\n \r\n \r\n 1\r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default SortNumberDesc;\r\n","import SortNumberDesc from './sort-number-desc';\r\n\r\nexport * from './sort-number-desc';\r\nexport default SortNumberDesc;\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled, { ThemeProvider, ThemeProps } from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPACING } from '../../packages/constants';\r\nimport { HelperModal, QuestionMark } from '../helper-modal';\r\nimport SortNumberAsc from '../../packages/icons/sort-number-asc';\r\nimport SortNumberDesc from '../../packages/icons/sort-number-desc';\r\n\r\nexport interface SortNumberAscDescFieldProps {\r\n dataId: string;\r\n id: string;\r\n name: string;\r\n legend: string;\r\n autoFocus?: boolean;\r\n assistAccess?: boolean;\r\n value?: SortValues;\r\n disabled?: boolean;\r\n hasHelper?: boolean;\r\n helperContent?: React.ReactNode;\r\n invalid?: boolean;\r\n thinLabel?: boolean;\r\n thinLegend?: boolean;\r\n theme?: SortFieldTheme;\r\n onChange?: (e: any) => void;\r\n validationMessage?: string;\r\n className?: string;\r\n}\r\n\r\nexport enum SortValues {\r\n NONE = 'NONE',\r\n ASCENDING = 'ASC',\r\n DESCENDING = 'DESC',\r\n}\r\n\r\ninterface SortFieldTheme {\r\n selectedColor: string;\r\n}\r\n\r\ninterface StyledLegendTextProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n thinLegend?: boolean;\r\n}\r\n\r\ninterface StyledLabelProps {\r\n inline?: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface StyledRadioProps {\r\n assistAccess: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface StyledLabelTextProps {\r\n disabled?: boolean;\r\n inline?: boolean;\r\n thinLabel?: boolean;\r\n}\r\n\r\nconst Wrapper = styled.fieldset`\r\n display: inline-flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst WrapperHasHelper = styled.fieldset`\r\n display: inline-flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst StyledLegend = styled.legend`\r\n display: inline-flex;\r\n margin-left: 0;\r\n`;\r\n\r\nconst StyledLegendText = styled.span`\r\n display: inline-block;\r\n margin-right: ${SPACING.X_SMALL};\r\n padding-bottom: ${SPACING.XX_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledLegendTextProps): string => (props.thinLegend ? '400' : '700')};\r\n color: ${(props: StyledLegendTextProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledLegendTextProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledLabel = styled.label`\r\n position: relative;\r\n display: inline-flex;\r\n flex-direction: ${(props: StyledLabelProps): string => (props.inline ? 'row-reverse' : 'column')};\r\n align-items: ${(props: StyledLabelProps): string => (props.inline ? 'center' : '')};\r\n justify-content: ${(props: StyledLabelProps): string => (props.inline ? 'flex-end' : '')};\r\n cursor: ${(props: StyledLabelProps): string => (props.disabled ? 'default' : 'pointer')};\r\n`;\r\n\r\nconst StyledLabelText = styled.span`\r\n display: block;\r\n margin-left: ${(props: StyledLabelTextProps): string => (props.inline ? SPACING.SMALL : '0')};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n opacity: ${(props: StyledLabelTextProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledItemsWrapper = styled.div`\r\n > ${StyledLabel} {\r\n margin-right: ${SPACING.LARGE};\r\n }\r\n`;\r\n\r\nconst StyledAscIcon = styled(SortNumberAsc)`\r\n width: 30px;\r\n height: 30px;\r\n user-select: none;\r\n`;\r\n\r\nconst StyledDescIcon = styled(SortNumberDesc)`\r\n width: 30px;\r\n height: 30px;\r\n user-select: none;\r\n`;\r\n\r\nconst StyledRadio = styled.input`\r\n /* NOTE: it's important the radio position on screen matches where the label is or the browser may scroll to the radio */\r\n position: absolute;\r\n opacity: 0;\r\n top: 0;\r\n left: 0;\r\n z-index: -1;\r\n\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__background,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__background {\r\n fill: #fff;\r\n }\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__outline,\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__1,\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__9,\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__arrow,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__outline,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__1,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__9,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__arrow {\r\n fill: #d5d5d5;\r\n }\r\n\r\n &:hover {\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__outline,\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__1,\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__9,\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__arrow,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__outline,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__1,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__9,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__arrow {\r\n fill: ${(props: StyledRadioProps): string => (props.disabled ? '#d5d5d5' : '#9a9a9a')};\r\n }\r\n }\r\n\r\n &:focus ~ ${StyledAscIcon}, &:focus ~ ${StyledDescIcon} {\r\n outline: ${(props: StyledRadioProps): string => (props.assistAccess ? '1px dotted #212121' : '0')};\r\n outline: ${(props: StyledRadioProps): string =>\r\n props.assistAccess ? '5px auto -webkit-focus-ring-color' : '0'};\r\n }\r\n\r\n &:checked {\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__background,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__background {\r\n fill: ${(props: ThemeProps): string => props.theme.selectedColor};\r\n }\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__outline,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__outline {\r\n fill: none;\r\n }\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__1,\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__9,\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__arrow,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__1,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__9,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__arrow {\r\n fill: #fff;\r\n }\r\n }\r\n`;\r\n\r\nexport const defaultTheme: SortFieldTheme = {\r\n selectedColor: COLOR.BRAND.REPORTING,\r\n};\r\n\r\nexport const SortNumberAscDescField = React.forwardRef(\r\n (\r\n {\r\n assistAccess = false,\r\n autoFocus,\r\n dataId,\r\n disabled,\r\n hasHelper,\r\n helperContent,\r\n id,\r\n invalid,\r\n legend,\r\n name,\r\n onChange,\r\n theme = defaultTheme,\r\n thinLabel,\r\n thinLegend,\r\n value,\r\n className,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return hasHelper ? (\r\n \r\n \r\n \r\n \r\n {legend}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Ascending\r\n \r\n \r\n \r\n \r\n \r\n \r\n Descending\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n {legend}\r\n \r\n \r\n \r\n \r\n \r\n Ascending\r\n \r\n \r\n \r\n \r\n \r\n \r\n Descending\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n },\r\n);\r\nSortNumberAscDescField.displayName = 'SortNumberAscDescField';\r\n","import * as React from 'react';\r\n\r\nimport { Link } from 'react-scroll';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, RADIUS, SPACING, SPEED } from '../../../../packages/constants';\r\nimport { AdditionalPage, ChevronRight } from '../../../../packages/icons';\r\nimport { LoadingSpinner } from '../../../loading-spinner';\r\n\r\ninterface ThumbnailProps {\r\n href: string;\r\n title: string;\r\n additionalPageNumber?: string;\r\n activeClass?: string;\r\n className?: string;\r\n containerId?: string;\r\n duration?: number;\r\n isLoading?: boolean;\r\n isAdditionalPage?: boolean;\r\n imageSrc?: string;\r\n offset?: number;\r\n onSetActive?: (e: any) => void;\r\n onSetInactive?: (e: any) => void;\r\n ref?: any;\r\n showThumbnail?: boolean;\r\n smooth?: boolean;\r\n spy?: boolean;\r\n to?: any;\r\n}\r\n\r\ninterface StyledThumbnailProps {\r\n isAdditionalPage?: boolean;\r\n showThumbnail?: boolean;\r\n onSetInactive?: any;\r\n}\r\n\r\ninterface ImageThumbnailProps {\r\n isAdditionalPage?: boolean;\r\n}\r\n\r\nconst StyledLoadingSpinner = styled(LoadingSpinner)``;\r\n\r\nconst DROP_SHADOW_VALUE = `\r\n 0 1px 5px rgba(4, 37, 91, 0.25)\r\n`;\r\nconst PAGINATION_THUMBNAIL_WIDTH = `220px`;\r\nconst PAGINATION_THUMBNAIL_HEIGHT = `170px`;\r\nconst PAGINATION_THUMBNAIL_STYLED = `\r\n box-sizing: border-box;\r\n box-shadow: ${DROP_SHADOW_VALUE};\r\n border-style: solid;\r\n border-width: 2px;\r\n border-color: transparent;\r\n border-radius: ${RADIUS.DEFAULT};\r\n height: ${PAGINATION_THUMBNAIL_HEIGHT};\r\n margin-bottom: ${SPACING.SMALL};\r\n padding: ${SPACING.X_SMALL} ${SPACING.X_SMALL} ${SPACING.XX_SMALL};\r\n transition: border-color ${SPEED.TRANSITION};\r\n width: ${PAGINATION_THUMBNAIL_WIDTH};\r\n`;\r\n\r\nconst ImagePlaceholder = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n display: flex;\r\n justify-content: center;\r\n ${PAGINATION_THUMBNAIL_STYLED}\r\n`;\r\n\r\nconst ImageThumbnail = styled.img`\r\n ${PAGINATION_THUMBNAIL_STYLED}\r\n`;\r\n\r\nconst StyledImage = styled.img`\r\n display: block;\r\n width: 100%;\r\n height: auto;\r\n`;\r\n\r\nconst StyledAdditionalImage = styled(AdditionalPage)`\r\n display: block;\r\n width: 100%;\r\n height: auto;\r\n`;\r\n\r\nconst StyledThumbnailLabel = styled.div`\r\n align-self: center;\r\n background-color: transparent;\r\n border-radius: ${RADIUS.DEFAULT};\r\n color: ${COLOR.MAIN.DARK_GREY};\r\n display: inline-block;\r\n font-size: ${FONT_SIZE.SMALL};\r\n padding: ${SPACING.SMALL};\r\n transition: color ${SPEED.TRANSITION}, background-color ${SPEED.TRANSITION};\r\n`;\r\n\r\nconst StyledTextLabel = styled.div`\r\n align-items: center;\r\n background-color: transparent;\r\n color: ${COLOR.BRAND.REPORTING};\r\n display: flex;\r\n font-weight: ${'400'};\r\n font-size: ${FONT_SIZE.SMALL};\r\n justify-content: space-between;\r\n padding: 5px;\r\n text-align: left;\r\n transition: color ${SPEED.TRANSITION};\r\n`;\r\n\r\nconst StyledChevron = styled(ChevronRight)`\r\n fill: #b2bccd;\r\n height: 12px;\r\n width: 12px;\r\n opacity: 0;\r\n`;\r\n\r\nconst StyledThumbnailWrapper = styled(Link)`\r\n border: 0;\r\n cursor: pointer;\r\n display: block;\r\n margin: 0;\r\n padding: 0;\r\n text-align: center;\r\n text-decoration: none;\r\n\r\n &.active {\r\n ${ImagePlaceholder},\r\n ${ImageThumbnail} {\r\n border-color: ${COLOR.BRAND.REPORTING};\r\n }\r\n\r\n ${StyledThumbnailLabel} {\r\n background-color: ${COLOR.BRAND.REPORTING};\r\n color: ${COLOR.PRIMARY.WHITE};\r\n }\r\n ${StyledTextLabel} {\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n }\r\n ${StyledChevron} {\r\n opacity: 1;\r\n }\r\n }\r\n\r\n &:hover {\r\n ${StyledThumbnailLabel} {\r\n background-color: ${COLOR.BRAND.REPORTING};\r\n color: ${COLOR.PRIMARY.WHITE};\r\n }\r\n ${StyledTextLabel} {\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n color: ${COLOR.BRAND.REPORTING};\r\n }\r\n }\r\n`;\r\n\r\nconst Thumbnail = React.forwardRef(\r\n (\r\n {\r\n activeClass,\r\n additionalPageNumber,\r\n className,\r\n containerId,\r\n href,\r\n imageSrc,\r\n isLoading,\r\n isAdditionalPage,\r\n offset,\r\n onSetActive,\r\n onSetInactive,\r\n showThumbnail,\r\n title,\r\n to,\r\n ...props\r\n }: ThumbnailProps,\r\n ref,\r\n ) => (\r\n \r\n {showThumbnail ? (\r\n isLoading ? (\r\n <>\r\n \r\n \r\n \r\n \r\n {title}\r\n {additionalPageNumber && ` (page ${Number(additionalPageNumber) + 1})`}\r\n \r\n \r\n ) : (\r\n <>\r\n \r\n {isAdditionalPage ? : }\r\n \r\n \r\n {title}\r\n {additionalPageNumber && ` (page ${Number(additionalPageNumber) + 1})`}\r\n \r\n \r\n )\r\n ) : (\r\n \r\n {title}\r\n {additionalPageNumber && ` (page ${Number(additionalPageNumber) + 1})`}\r\n \r\n \r\n )}\r\n \r\n ),\r\n);\r\nThumbnail.displayName = 'Thumbnail';\r\n\r\nexport default Thumbnail;\r\nexport { StyledLoadingSpinner, DROP_SHADOW_VALUE, PAGINATION_THUMBNAIL_WIDTH };\r\n","import Thumbnail, { DROP_SHADOW_VALUE, PAGINATION_THUMBNAIL_WIDTH } from './thumbnail';\r\n\r\nexport default Thumbnail;\r\nexport { DROP_SHADOW_VALUE, PAGINATION_THUMBNAIL_WIDTH };\r\n","import * as React from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport { DROP_SHADOW_VALUE } from './atoms/thumbnail';\r\nimport { SPACING } from '../../packages/constants';\r\nimport { StyledLoadingSpinner } from './atoms/thumbnail/thumbnail';\r\nimport { camelToKebab } from '../../../Scripts/Spotlight/Components/CamelToKebab';\r\n\r\nexport interface PreviewPageProps {\r\n id: string;\r\n content: string;\r\n title: string;\r\n pageType?: string;\r\n isLoading: boolean;\r\n isFixedSize: boolean;\r\n canBeFullscreen: boolean;\r\n isPortrait: boolean;\r\n maxWidth?: number;\r\n index: number;\r\n}\r\n\r\ninterface PageProps {\r\n isFixedSize?: boolean;\r\n isPortrait?: boolean;\r\n pageLoading?: boolean;\r\n canBeFullscreen?: boolean;\r\n isSinglePage?: boolean;\r\n maxWidth?: number;\r\n}\r\n\r\nconst PageItem = styled.li`\r\n background-color: #fff;\r\n box-shadow: ${DROP_SHADOW_VALUE};\r\n height: ${(props) => (props.pageLoading ? (props.isFixedSize ? '710px' : 'auto') : 'auto')};\r\n margin-bottom: ${(props) => (props.isSinglePage ? 'auto' : '20px')};\r\n max-width: ${(props) =>\r\n props.canBeFullscreen ? (props.isPortrait ? '51vw' : '71vw') : props.isPortrait ? '51vw' : undefined};\r\n min-height: ${(props) => (props.canBeFullscreen ? '48vw' : '710px')};\r\n min-width: 960px;\r\n margin-left: ${(props) => (props.canBeFullscreen || props.isPortrait ? 'auto' : undefined)};\r\n margin-right: ${(props) => (props.canBeFullscreen || props.isPortrait ? 'auto' : undefined)};\r\n width: ${(props) => (props.pageLoading ? '100%' : 'auto')};\r\n max-width: ${(props) => (props.maxWidth ? props.maxWidth : 'unset')};\r\n`;\r\n\r\nconst Page = styled.div`\r\n align-items: ${(props) => (props.pageLoading ? 'center' : 'flex-start')};\r\n box-sizing: border-box;\r\n display: flex;\r\n flex-direction: column;\r\n height: ${(props) => (props.pageLoading ? (props.isFixedSize ? '710px' : '52vw') : 'auto')};\r\n justify-content: ${(props) => (props.pageLoading ? 'center' : 'flex-start')};\r\n min-height: 710px;\r\n padding: ${SPACING.MEDIUM};\r\n width: ${(props) => (props.pageLoading ? (props.isFixedSize ? '960px' : '100%') : 'auto')};\r\n overflow-x: ${(props) => (props.pageLoading ? undefined : 'auto')};\r\n`;\r\n\r\nexport const PreviewPage = ({\r\n id,\r\n isFixedSize,\r\n canBeFullscreen,\r\n isLoading,\r\n isPortrait,\r\n maxWidth,\r\n title,\r\n index,\r\n pageType,\r\n content,\r\n}: PreviewPageProps) => {\r\n return (\r\n \r\n {isLoading ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n )}\r\n \r\n );\r\n};\r\nPreviewPage.displayName = 'PreviewPage';\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\nimport { TransformComponent as ZoomableContent } from 'react-zoom-pan-pinch';\r\n\r\nimport { PreviewPage } from './preview-page';\r\nimport { PageDataProps } from './preview';\r\n\r\nexport interface PreviewContentProps {\r\n /**\r\n * Page data\r\n */\r\n pageData: PageDataProps[];\r\n /**\r\n * Scroll listener\r\n */\r\n scrollListener: (e: any) => void;\r\n /**\r\n * Scroll ref\r\n */\r\n scrollRef: React.RefObject;\r\n /**\r\n * Show navigation?\r\n */\r\n showNavigation: boolean;\r\n /**\r\n * Fixes the size of the page during loading.\r\n */\r\n isFixedSize: boolean;\r\n /**\r\n * Show fullscreen capability?\r\n */\r\n hasFullscreen: boolean;\r\n /**\r\n * Don't show the invisible page at bottom\r\n */\r\n isSinglePage: boolean;\r\n /**\r\n * Limit how wide a page is allowed to be\r\n */\r\n maxPageWidth?: number;\r\n /**\r\n * Is the display currently fullscreen\r\n */\r\n isFullscreen: boolean;\r\n /**\r\n * Should the pages be landscape or portrait?\r\n */\r\n isPortrait: boolean;\r\n}\r\n\r\ninterface PageWrapperProps {\r\n showNavigation: boolean;\r\n hasFullscreen: boolean;\r\n isFullscreen: boolean;\r\n isSinglePage: boolean;\r\n isPortrait: boolean;\r\n}\r\n\r\nconst PageWrapper = styled.div`\r\n box-sizing: border-box;\r\n position: relative;\r\n height: ${(props) => (props.hasFullscreen ? (props.isFullscreen ? '100%' : 'calc(100% - 44px)') : '100%')};\r\n overflow-y: ${(props) => (props.isSinglePage ? 'auto' : 'scroll')};\r\n width: ${(props) => (props.isSinglePage ? '100%' : 'fit-content')};\r\n display: ${(props) => (props.hasFullscreen && props.isSinglePage ? 'flex' : 'block')};\r\n ${(props) =>\r\n props.hasFullscreen &&\r\n (props.isSinglePage || props.isPortrait) &&\r\n `align-items: ${props.isPortrait} ? 'flex-start' : 'center'`}\r\n cursor: grab;\r\n`;\r\n\r\nconst Pages = styled.ul`\r\n margin: 0 auto;\r\n max-width: 100vw;\r\n width: 100%;\r\n padding: 6px;\r\n`;\r\n\r\nconst LastPage = styled.li`\r\n height: 60vh;\r\n max-width: 100vw;\r\n margin: 0 auto;\r\n width: 100%;\r\n`;\r\n\r\nexport const PreviewContent = ({\r\n showNavigation,\r\n hasFullscreen,\r\n isFullscreen,\r\n isSinglePage,\r\n isFixedSize,\r\n isPortrait,\r\n maxPageWidth,\r\n scrollRef,\r\n scrollListener,\r\n pageData,\r\n}: PreviewContentProps) => {\r\n return (\r\n scrollListener(e)}\r\n isPortrait={isPortrait}\r\n >\r\n \r\n \r\n {pageData.map((page: PageDataProps, index: number) => (\r\n \r\n ))}\r\n {!isSinglePage && }\r\n \r\n \r\n \r\n );\r\n};\r\nPreviewContent.displayName = 'PreviewContent';\r\n","import * as React from 'react';\r\nimport { ReactNode, useEffect, useState, useMemo } from 'react';\r\n\r\nimport { Expand } from 'iconoir-react';\r\nimport { lighten } from 'polished';\r\nimport styled, { ThemeProvider } from 'styled-components';\r\n\r\nimport { SPACING, COLOR, THEME } from '../../packages/constants';\r\nimport { Button } from '../button';\r\nimport { CheckboxInput } from '../checkbox-input';\r\nimport { ThumbnailVariants } from './preview';\r\n\r\nexport interface PreviewNavigationButtonsProps {\r\n showFullscreenButton: boolean;\r\n showNavigation: boolean;\r\n isSinglePage: boolean;\r\n showThumbnails: boolean;\r\n isFullscreen: boolean;\r\n onToggleThumbnails: () => void;\r\n onToggleNavigation: () => void;\r\n onToggleFullscreen: () => void;\r\n customNavigationBarContent?: ReactNode;\r\n reportTitle?: string;\r\n isSustain?: boolean;\r\n thumbnailVariant: ThumbnailVariants;\r\n}\r\n\r\ntype ButtonsToShow = 'none' | 'thumbnail_only' | 'fullscreen_only' | 'nav_and_fullscreen' | 'all';\r\n\r\ninterface StyledSettingsProps {\r\n fullscreenAvailable: boolean;\r\n isSustain?: boolean;\r\n}\r\n\r\nconst StyledSettings = styled.div`\r\n display: flex;\r\n justify-content: ${(props) => (props.isSustain ? 'flex-start' : 'space-between')};\r\n align-items: ${(props) => (props.isSustain ? 'flex-start' : 'center')};\r\n padding: ${(props) => (props.fullscreenAvailable ? SPACING.MEDIUM : `0 0 ${SPACING.MEDIUM} ${SPACING.XX_SMALL}`)};\r\n border-bottom: 1px solid\r\n ${(props) => (props.fullscreenAvailable ? lighten(0.3, COLOR.MAIN.FORM_FIELD_DARK) : 'transparent')};\r\n background-color: ${(props) => (props.fullscreenAvailable ? COLOR.PRIMARY.WHITE : 'transparent')};\r\n`;\r\n\r\nconst CheckboxInputContainer = styled.div`\r\n display: flex;\r\n column-gap: ${SPACING.MEDIUM};\r\n min-width: 300px;\r\n`;\r\n\r\nconst FullScreenButton = styled.div`\r\n align-self: flex-end;\r\n flex-shrink: 0;\r\n`;\r\n\r\nconst ReportTitle = styled.div`\r\n flex-grow: 1;\r\n text-align: center;\r\n line-height: 1.5;\r\n font-size: 18px;\r\n font-weight: 600;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n padding-left: 30px;\r\n padding-right: 30px;\r\n`;\r\n\r\ninterface StyledCheckbox {\r\n isSustain?: boolean;\r\n}\r\n\r\nconst StyledCheckbox = styled(CheckboxInput)`\r\n flex-shrink: 0;\r\n min-width: ${(props) => (props.isSustain ? '250px' : '')};\r\n`;\r\n\r\nconst StyledButton = styled(Button)`\r\n line-height: normal;\r\n border-radius: 5px;\r\n border-width: 0;\r\n font-weight: 600;\r\n column-gap: 5px;\r\n font-size: 13px;\r\n padding-bottom: 7px;\r\n padding-top: 8px;\r\n text-decoration: underline;\r\n text-underline-position: under;\r\n color: #031c44;\r\n background-color: #fff;\r\n\r\n &:hover:not(:disabled) {\r\n background-color: #f3f4f7;\r\n color: #031c44;\r\n }\r\n`;\r\n\r\nexport const PreviewNavigationButtons: React.FC> = ({\r\n showFullscreenButton,\r\n showNavigation,\r\n isSinglePage,\r\n showThumbnails,\r\n isFullscreen,\r\n onToggleThumbnails,\r\n onToggleNavigation,\r\n onToggleFullscreen,\r\n customNavigationBarContent,\r\n reportTitle,\r\n isSustain,\r\n thumbnailVariant,\r\n}) => {\r\n const [buttonsToShow, setButtonsToShow] = useState('none');\r\n\r\n useEffect(() => {\r\n if (isFullscreen) setButtonsToShow('none');\r\n else if (isSinglePage && showFullscreenButton) setButtonsToShow('fullscreen_only');\r\n else if (showFullscreenButton && thumbnailVariant !== 'hide') setButtonsToShow('all');\r\n else if (showFullscreenButton) setButtonsToShow('nav_and_fullscreen');\r\n else if (!isSinglePage && thumbnailVariant !== 'hide') setButtonsToShow('thumbnail_only');\r\n else setButtonsToShow('none');\r\n }, [showFullscreenButton, isSinglePage, isFullscreen]);\r\n\r\n const fullscreenButtonVisible = useMemo(() => {\r\n return buttonsToShow === 'all' || buttonsToShow === 'fullscreen_only' || buttonsToShow === 'nav_and_fullscreen';\r\n }, [buttonsToShow]);\r\n\r\n return (\r\n <>\r\n {(buttonsToShow !== 'none' || customNavigationBarContent) && (\r\n \r\n {buttonsToShow === 'thumbnail_only' && (\r\n \r\n )}\r\n {buttonsToShow === 'nav_and_fullscreen' && (\r\n \r\n )}\r\n {buttonsToShow === 'all' && (\r\n \r\n \r\n \r\n \r\n )}\r\n {customNavigationBarContent && !isFullscreen && !fullscreenButtonVisible && isSustain && (\r\n <>{customNavigationBarContent} \r\n )}\r\n {fullscreenButtonVisible && isSustain && {reportTitle}}\r\n {fullscreenButtonVisible && !isSustain && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {fullscreenButtonVisible && isSustain && (\r\n \r\n \r\n \r\n Full screen mode\r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n};\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\n\r\nimport Thumbnail, { PAGINATION_THUMBNAIL_WIDTH } from './atoms/thumbnail';\r\nimport { SPACING } from '../../packages/constants';\r\nimport { camelToKebab } from '../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport { PageDataProps } from './preview';\r\n\r\nexport interface PreviewPaginationProps {\r\n hasFullscreenOption: boolean;\r\n isFullscreen: boolean;\r\n pageData: PageDataProps[];\r\n showThumbnails: boolean;\r\n scrollOffset: number;\r\n onPageSelect: () => void;\r\n}\r\n\r\ninterface PaginationItemProps {\r\n showThumbnails?: boolean;\r\n}\r\n\r\ninterface PaginationProps {\r\n hasFullscreenOption: boolean;\r\n isFullscreen: boolean;\r\n}\r\n\r\nconst Pagination = styled.ul`\r\n box-sizing: border-box;\r\n height: ${(props) => (props.hasFullscreenOption ? (props.isFullscreen ? '100%' : 'calc(100% - 44px)') : '100%')};\r\n overflow-y: auto;\r\n padding: ${(props) =>\r\n `${SPACING.MEDIUM} ${SPACING.MEDIUM} 0 ${props.hasFullscreenOption ? SPACING.MEDIUM : SPACING.X_SMALL};`};\r\n width: ${(props) => (props.hasFullscreenOption ? `calc(${PAGINATION_THUMBNAIL_WIDTH} + 48px)` : `258px`)};\r\n`;\r\n\r\nconst PaginationItem = styled.li`\r\n list-style-type: none;\r\n margin: 0 0 ${(props) => (props.showThumbnails ? SPACING.LARGE : SPACING.X_SMALL)};\r\n padding: 0;\r\n width: 100%;\r\n`;\r\n\r\nexport const PreviewPagination = ({\r\n hasFullscreenOption,\r\n isFullscreen,\r\n pageData,\r\n showThumbnails,\r\n scrollOffset,\r\n onPageSelect,\r\n}: PreviewPaginationProps) => {\r\n return (\r\n \r\n {pageData.map((page: PageDataProps, index: number) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nPreviewPagination.displayName = 'PreviewPagination';\r\n","import * as React from 'react';\r\nimport { useEffect, useState, useRef, MutableRefObject } from 'react';\r\n\r\nimport { TransformWrapper as ZoomableContentWrapper, ReactZoomPanPinchRef } from 'react-zoom-pan-pinch';\r\nimport styled, { ThemeProvider } from 'styled-components';\r\n\r\nimport { SPACING, COLOR, THEME } from '../../packages/constants';\r\nimport { Button } from '../button';\r\nimport { PreviewContent } from './preview-content';\r\nimport { PreviewNavigationButtons } from './preview-navigation-buttons';\r\nimport { PreviewPagination } from './preview-pagination';\r\n\r\nexport type ThumbnailVariants = 'show' | 'available' | 'hide';\r\n\r\nexport interface PreviewProps {\r\n /**\r\n * Page data\r\n */\r\n pageData: PageDataProps[];\r\n /**\r\n * Scroll listener\r\n */\r\n scrollListener: (e: any) => void;\r\n /**\r\n * Scroll ref\r\n */\r\n scrollRef: React.RefObject;\r\n /**\r\n * Show navigation?\r\n */\r\n showNavigation?: boolean;\r\n /**\r\n * Scroll offset\r\n */\r\n scrollOffset?: number;\r\n /**\r\n * Fixes the size of the page during loading.\r\n */\r\n isFixedSize?: boolean;\r\n /**\r\n * Show fullscreen capability?\r\n */\r\n hasFullscreen?: boolean;\r\n /**\r\n * Don't show the invisible page at bottom\r\n */\r\n isSinglePage?: boolean;\r\n /**\r\n * Limit how wide a page is allowed to be\r\n */\r\n maxPageWidth?: number;\r\n isSustain?: boolean;\r\n reportTitle?: string;\r\n customNavigationBarContent?: React.ReactNode;\r\n thumbnailVariant?: ThumbnailVariants;\r\n triggerThumbnailLoad?: () => void;\r\n}\r\n\r\ninterface PageWrapperProps {\r\n showNavigation?: boolean;\r\n hasFullscreen?: boolean;\r\n isFullscreen?: boolean;\r\n isSinglePage?: boolean;\r\n isPortrait?: boolean;\r\n hasFullscreenUseState?: boolean;\r\n}\r\n\r\nexport interface PageDataProps {\r\n id: string;\r\n content: string;\r\n title: string;\r\n pageType?: string;\r\n additionalPageNumber?: string;\r\n imageSrc?: string;\r\n isLoading?: boolean;\r\n isAdditionalPage?: boolean;\r\n map?: (e: any) => React.ReactNode;\r\n thumbnailIsLoading?: boolean;\r\n}\r\n\r\ninterface StyledPreviewInnerProps {\r\n isFullscreen?: boolean;\r\n showNavigation?: boolean;\r\n isSinglePage?: boolean;\r\n}\r\n\r\nconst StyledPreview = styled.div`\r\n background-color: ${COLOR.MAIN.LIGHT_GREY};\r\n height: ${(props) => (props.isSinglePage ? 'auto' : '100%')};\r\n`;\r\n\r\nconst StyledPreviewInner = styled.div`\r\n background-color: ${COLOR.MAIN.LIGHT_GREY};\r\n display: flex;\r\n height: ${(props) => (props.isSinglePage ? 'auto' : '100%')};\r\n position: relative;\r\n padding-left: ${(props) => (props.showNavigation && props.isFullscreen ? SPACING.MEDIUM : undefined)};\r\n width: 100%;\r\n`;\r\n\r\nconst PageViewPort = styled.div`\r\n height: 100%;\r\n padding: ${(props) => (props.isSinglePage ? `0px 0px` : `${SPACING.MEDIUM} 0px 0px`)};\r\n width: ${(props) => (props.isSinglePage ? '100%' : 'calc(100% - 200px)')};\r\n overflow-y: hidden;\r\n overflow-x: auto;\r\n box-sizing: border-box;\r\n`;\r\n\r\nconst ZoomTools = styled.div.attrs((props: { isSinglePage: boolean }) => props)`\r\n display: flex;\r\n position: absolute;\r\n z-index: 2;\r\n bottom: ${(props) => (props.isSinglePage ? '-5px' : '5px')}; // if there's space below, put it there\r\n padding: 6px 6px 6px 10px;\r\n`;\r\n\r\nconst ZoomButton = styled(Button)`\r\n margin-right: 6px;\r\n font-size: 14px;\r\n padding: 6px;\r\n height: 22px;\r\n`;\r\n\r\nexport const Preview = React.forwardRef(\r\n (\r\n {\r\n pageData,\r\n showNavigation,\r\n scrollOffset = -55,\r\n scrollRef,\r\n scrollListener,\r\n isFixedSize,\r\n hasFullscreen = false,\r\n isSinglePage = false,\r\n maxPageWidth,\r\n reportTitle,\r\n customNavigationBarContent,\r\n isSustain,\r\n thumbnailVariant,\r\n triggerThumbnailLoad,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [showNavigationToggle, setNavigationToggle] = useState(showNavigation);\r\n const [thumbnailToggle, setThumbnailToggle] = useState(thumbnailVariant === 'show');\r\n const [data, setData] = useState(pageData);\r\n const [isFullscreen, setFullscreen] = useState(false);\r\n const [hasFullscreenUseState, setHasFullscreen] = useState(hasFullscreen);\r\n const styledPreviewInnerRef = useRef() as MutableRefObject;\r\n const [isPortrait, setIsPortrait] = useState(false);\r\n const transformComponentRef = useRef(null);\r\n\r\n const handleFullscreen = () => {\r\n // taken from https://davidwalsh.name/fullscreen\r\n // i cant believe this is still a thing...\r\n function launchIntoFullscreen(element: any) {\r\n if (element.requestFullscreen) {\r\n element.requestFullscreen();\r\n } else if (element.mozRequestFullScreen) {\r\n element.mozRequestFullScreen();\r\n } else if (element.webkitRequestFullscreen) {\r\n element.webkitRequestFullscreen();\r\n } else if (element.msRequestFullscreen) {\r\n element.msRequestFullscreen();\r\n }\r\n }\r\n\r\n function exitFullscreen() {\r\n if (document.exitFullscreen) {\r\n document.exitFullscreen();\r\n // @ts-ignore\r\n } else if (document.mozCancelFullScreen) {\r\n // @ts-ignore\r\n document.mozCancelFullScreen();\r\n // @ts-ignore\r\n } else if (document.webkitExitFullscreen) {\r\n // @ts-ignore\r\n document.webkitExitFullscreen();\r\n }\r\n }\r\n\r\n if (!document.fullscreenElement) {\r\n launchIntoFullscreen(styledPreviewInnerRef.current);\r\n } else {\r\n exitFullscreen();\r\n }\r\n };\r\n\r\n const resetZoomLocation = () => {\r\n if (transformComponentRef.current) {\r\n transformComponentRef.current.resetTransform();\r\n }\r\n };\r\n\r\n const toggleThumbnails = () => {\r\n if (!thumbnailToggle && triggerThumbnailLoad) {\r\n triggerThumbnailLoad();\r\n }\r\n setThumbnailToggle(!thumbnailToggle);\r\n };\r\n\r\n useEffect(() => {\r\n setNavigationToggle(showNavigation);\r\n setHasFullscreen(hasFullscreen);\r\n setData(pageData);\r\n\r\n if (styledPreviewInnerRef.current) {\r\n // @ts-ignore\r\n styledPreviewInnerRef.current.addEventListener('fullscreenchange', () => {\r\n if (document.fullscreenElement) {\r\n setFullscreen(true);\r\n } else {\r\n setFullscreen(false);\r\n }\r\n });\r\n }\r\n }, [showNavigation, hasFullscreen, pageData, styledPreviewInnerRef]);\r\n\r\n useEffect(() => {\r\n data.forEach((page) => {\r\n if (page.id === 'Performance') setIsPortrait(true);\r\n });\r\n });\r\n\r\n return (\r\n \r\n setNavigationToggle(!showNavigationToggle)}\r\n onToggleFullscreen={handleFullscreen}\r\n customNavigationBarContent={customNavigationBarContent}\r\n reportTitle={reportTitle}\r\n isSustain={isSustain}\r\n thumbnailVariant={thumbnailVariant ?? 'show'}\r\n />\r\n \r\n {showNavigationToggle && (\r\n \r\n )}\r\n \r\n \r\n {({ zoomIn, zoomOut, resetTransform }) => (\r\n <>\r\n \r\n \r\n \r\n zoomOut(0.25)}>\r\n {'\\u2212'}\r\n \r\n zoomIn(0.25)}>\r\n {'\\u002B'}\r\n \r\n resetTransform()}>\r\n RESET\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n },\r\n);\r\nPreview.displayName = 'Preview';\r\n","export { Preview } from './preview';\r\nexport type { ThumbnailVariants } from './preview';\r\n\r\nexport const PreviewDataStub = [\r\n {\r\n id: '0000',\r\n title: 'Cover',\r\n thumbnailIsLoading: true,\r\n isLoading: false,\r\n content: '
    0000
    ',\r\n },\r\n {\r\n id: '0000_1',\r\n title: 'Cover',\r\n thumbnailIsLoading: false,\r\n isLoading: false,\r\n isAdditionalPage: true,\r\n additionalPageNumber: '1',\r\n content: '
    0000
    ',\r\n },\r\n {\r\n id: '1111',\r\n title: 'Table of Contents',\r\n pageType: 'TableOfContents',\r\n thumbnailIsLoading: true,\r\n isLoading: true,\r\n content: '
    1111
    ',\r\n },\r\n {\r\n id: '2222',\r\n title: 'Profit and Loss',\r\n pageType: 'PandLPage',\r\n thumbnailIsLoading: true,\r\n isLoading: true,\r\n content: '
    2222
    ',\r\n },\r\n {\r\n id: '3333',\r\n title: 'Balance Sheet',\r\n pageType: 'BSPage',\r\n thumbnailIsLoading: true,\r\n isLoading: true,\r\n content: '
    3333
    ',\r\n },\r\n {\r\n id: '4444',\r\n title: 'Balance Sheet',\r\n pageType: 'BSPage',\r\n thumbnailIsLoading: true,\r\n isLoading: true,\r\n content: '
    4444
    ',\r\n },\r\n {\r\n id: '5555',\r\n title: 'Balance Sheet',\r\n pageType: 'BSPage',\r\n thumbnailIsLoading: true,\r\n isLoading: true,\r\n content: '
    5555
    ',\r\n },\r\n {\r\n id: '6666',\r\n title: 'Balance Sheet',\r\n pageType: 'BSPage',\r\n thumbnailIsLoading: true,\r\n isLoading: true,\r\n content: '
    6666
    ',\r\n },\r\n {\r\n id: '7777',\r\n title: 'Balance Sheet',\r\n pageType: 'BSPage',\r\n thumbnailIsLoading: true,\r\n isLoading: true,\r\n content: '
    7777
    ',\r\n },\r\n {\r\n id: '8888',\r\n title: 'Balance Sheet',\r\n pageType: 'BSPage',\r\n thumbnailIsLoading: true,\r\n isLoading: true,\r\n content: '
    8888
    ',\r\n },\r\n {\r\n id: '9999',\r\n title: 'Balance Sheet',\r\n pageType: 'BSPage',\r\n thumbnailIsLoading: true,\r\n isLoading: true,\r\n content: '
    9999
    ',\r\n },\r\n];\r\n\r\nexport const PreviewDashboardDataStub = [\r\n {\r\n id: '0000',\r\n title: 'Dashboard',\r\n thumbnailIsLoading: true,\r\n isLoading: false,\r\n content: '
    0000
    ',\r\n },\r\n];\r\n\r\nfunction outputText(amount = 25) {\r\n let textString = ``;\r\n for (let i = 0; i < amount; i++) {\r\n textString += `

    lorem ipsum dolor set

    `;\r\n }\r\n return textString;\r\n}\r\n\r\nexport const PreviewDashboardPerformanceDataStub = [\r\n {\r\n id: 'Performance',\r\n title: 'Performance Dashboard',\r\n thumbnailIsLoading: false,\r\n isLoading: false,\r\n content: `

    Performance layout (portrait)

    \r\n${outputText(70)}\r\n`,\r\n },\r\n];\r\n","import * as React from 'react';\r\n\r\nimport SVGBase from '../svg-base/svg-base';\r\n\r\nexport interface StarProps {\r\n fill?: string;\r\n title?: string;\r\n height?: string;\r\n width?: string;\r\n viewBox?: string;\r\n}\r\n\r\nconst CircleWithPlus: React.FunctionComponent> = ({\r\n fill,\r\n title,\r\n height,\r\n width,\r\n ...rest\r\n}): any => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default CircleWithPlus;\r\n","import CircleWithPlus from './circle-with-plus';\r\n\r\nexport * from './circle-with-plus';\r\nexport default CircleWithPlus;\r\n","import * as React from 'react';\r\n\r\nimport SVGBase from '../svg-base/svg-base';\r\n\r\nexport interface CircleWithMinusProps {\r\n fill?: string;\r\n title?: string;\r\n height?: string;\r\n width?: string;\r\n viewBox?: string;\r\n}\r\n\r\nconst CircleWithMinus: React.FunctionComponent> = ({\r\n fill,\r\n title,\r\n height,\r\n width,\r\n ...rest\r\n}): any => (\r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default CircleWithMinus;\r\n","import CircleWithMinus from './circle-with-minus';\r\n\r\nexport * from './circle-with-minus';\r\nexport default CircleWithMinus;\r\n","import * as React from 'react';\r\n\r\nexport interface EliminationProps {\r\n fill?: string;\r\n title?: string;\r\n height?: string;\r\n width?: string;\r\n viewBox?: string;\r\n}\r\n\r\nconst Elimination: React.FunctionComponent> = ({\r\n height,\r\n width,\r\n ...rest\r\n}): any => (\r\n \r\n);\r\n\r\nexport default Elimination;\r\n","import Elimination from './elimination';\r\n\r\nexport * from './elimination';\r\nexport default Elimination;\r\n","import styled from 'styled-components';\r\n\r\nimport { COLOR } from '../../../../packages/constants';\r\nimport CircleWithPlus from '../../../../packages/icons/circle-with-plus';\r\nimport CircleWithMinus from '../../../../packages/icons/circle-with-minus';\r\nimport Elimination from '../../../../packages/icons/elimination';\r\nimport Edit from '../../../../packages/icons/edit';\r\nimport ChevronLeft from '../../../../packages/icons/chevron-left';\r\nimport ChevronRight from '../../../../packages/icons/chevron-right';\r\n\r\nconst iconWidth = '12px';\r\nexport const StyledPlus = styled(CircleWithPlus)`\r\n fill: ${COLOR.BRAND.REPORTING};\r\n width: ${iconWidth};\r\n height: ${iconWidth};\r\n`;\r\n\r\nexport const StyledMinus = styled(CircleWithMinus)`\r\n fill: ${COLOR.BRAND.REPORTING};\r\n width: ${iconWidth};\r\n height: ${iconWidth};\r\n`;\r\n\r\nexport const StyledElimination = styled(Elimination)`\r\n fill: ${COLOR.BRAND.REPORTING};\r\n width: ${iconWidth};\r\n height: ${iconWidth};\r\n`;\r\n\r\nexport const StyledEdit = styled(Edit)`\r\n fill: ${COLOR.DATAGRID.DATAGRID_TEXT};\r\n width: ${iconWidth};\r\n height: ${iconWidth};\r\n position: absolute;\r\n bottom: 5px;\r\n right: 2px;\r\n z-index: 0;\r\n`;\r\n\r\nconst chevronAttrs = `\r\n fill: ${COLOR.DATAGRID.DATAGRID_TEXT};\r\n width: 10px;\r\n height: 10px;\r\n`;\r\n\r\nexport const StyledChevronRight = styled(ChevronRight)`\r\n ${chevronAttrs}\r\n`;\r\n\r\nexport const StyledChevronLeft = styled(ChevronLeft)`\r\n ${chevronAttrs}\r\n`;\r\n","import styled from 'styled-components';\r\n\r\nimport { SPACING, COLOR } from '../../../../packages/constants';\r\nimport { StyledPlus, StyledMinus, StyledElimination } from '../icons/icons';\r\n\r\nexport const AccountRow = styled.tr`\r\n width: 100%;\r\n\r\n ${StyledElimination} {\r\n margin-right: ${SPACING.X_SMALL};\r\n }\r\n`;\r\n\r\nexport const ToggleAccountRow = styled.button`\r\n margin: 0;\r\n border: 0;\r\n background-color: transparent;\r\n cursor: pointer;\r\n display: flex;\r\n align-content: center;\r\n padding: 0;\r\n font-weight: 700;\r\n font-size: inherit;\r\n line-height: 15px;\r\n color: ${COLOR.DATAGRID.DATAGRID_TEXT};\r\n\r\n ${StyledPlus},\r\n ${StyledMinus},\r\n ${StyledElimination} {\r\n margin-right: ${SPACING.X_SMALL};\r\n }\r\n\r\n .icon--toggle-row {\r\n display: inline-flex;\r\n }\r\n`;\r\n\r\nexport type HandleToggleAccountRowFn = (id: string) => void;\r\n","import styled from 'styled-components';\r\nimport { COLOR, FONT_SIZE, SPACING } from '../../../../packages/constants';\r\nimport { ToggleAccountRow } from '../account-row/account-row';\r\n\r\nexport interface AccountCellProps {\r\n canBeToggled?: boolean; // can toggle visibility\r\n hasBorderRight?: boolean;\r\n hasTextAlignedLeft?: boolean;\r\n hasNoPadding?: boolean;\r\n indent?: boolean;\r\n isBudget?: boolean; // yellow cell isBudget\r\n isEditable?: boolean; // can be edited\r\n isGroup?: boolean; // is a group cell type\r\n isHeader?: boolean; // header styles\r\n isLocked?: boolean; // show lock symbol\r\n isNumber?: boolean; // text-aligned right\r\n isTotal?: boolean; // grey cell\r\n minWidth?: number;\r\n isDisplayed?: boolean;\r\n}\r\n\r\nexport const AccountCell = styled.div`\r\n box-sizing: border-box;\r\n border-top: 1px solid ${(props) => (props.isGroup ? COLOR.DATAGRID.DATAGRID_DIVIDER_LINE : COLOR.MAIN.FORM_FIELD)};\r\n border-left: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n background-color: ${(props) =>\r\n props.isHeader\r\n ? COLOR.PRIMARY.WHITE\r\n : props.isBudget\r\n ? COLOR.DATAGRID.DATAGRID_BUDGET_BG\r\n : props.isTotal\r\n ? COLOR.DATAGRID.DATAGRID_TOTAL_BG\r\n : COLOR.PRIMARY.WHITE};\r\n display: ${(props) => ((props.canBeToggled && props.isDisplayed) || !props.canBeToggled ? 'inline-flex' : 'none')};\r\n padding: ${(props) =>\r\n props.isGroup && !props.isNumber && !props.canBeToggled\r\n ? '0'\r\n : props.indent\r\n ? `${SPACING.SMALL} ${SPACING.SMALL} ${SPACING.SMALL} ${SPACING.XX_LARGE}`\r\n : props.hasNoPadding\r\n ? '0'\r\n : SPACING.SMALL};\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n font-weight: ${(props) => (props.isHeader ? '700' : '400')};\r\n justify-content: ${(props) =>\r\n props.hasTextAlignedLeft\r\n ? 'flex-start'\r\n : props.isHeader && !props.isTotal\r\n ? 'center'\r\n : props.isNumber\r\n ? 'flex-end'\r\n : props.isGroup\r\n ? 'flex-end'\r\n : props.isTotal && props.isHeader\r\n ? 'space-between'\r\n : 'flex-start'};\r\n line-height: 15px;\r\n width: 100%;\r\n min-width: ${(props) => (props.minWidth ? `${props.minWidth}px` : props.isTotal ? '100%' : '95px')};\r\n position: relative;\r\n color: ${COLOR.DATAGRID.DATAGRID_TEXT};\r\n\r\n &:last-child {\r\n border-right: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n }\r\n\r\n ${ToggleAccountRow} {\r\n padding: ${SPACING.SMALL};\r\n }\r\n\r\n input[type='checkbox'] {\r\n margin: 0;\r\n margin-top: -1px;\r\n position: relative;\r\n top: 2px;\r\n height: 13px;\r\n width: 13px;\r\n }\r\n\r\n ${({ isLocked }) =>\r\n isLocked &&\r\n `\r\n padding-left ${SPACING.LARGE};\r\n \r\n &::before {\r\n position: absolute;\r\n font-family: 'FontAwesome', sans-serif;\r\n bottom: ${SPACING.X_SMALL};\r\n left: ${SPACING.X_SMALL};\r\n content: '\\f023';\r\n color: ${COLOR.MAIN.DARK_GREY};\r\n opacity: 0.3;\r\n }`}\r\n`;\r\n\r\nexport const TruncateText = styled.div`\r\n display: block;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n width: 269px;\r\n text-align: left;\r\n`;\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport { useState, useEffect, useRef } from 'react';\r\nimport styled from 'styled-components';\r\nimport { COLOR, FONT_SIZE, FONT_STACK, SPACING } from '../../../../packages/constants';\r\nimport { LoadingSpinner, Icon } from '../../../loading-spinner';\r\nimport { AccountCell, AccountCellProps } from '../account-cell/account-cell';\r\nimport { StyledEdit } from '../icons/icons';\r\n\r\nexport interface AccountCellInputProps extends AccountCellInputDivProps {\r\n cellId: string;\r\n inputProps: InputProps;\r\n}\r\n\r\ninterface AccountCellInputDivProps extends AccountCellProps {\r\n isSaving?: boolean;\r\n}\r\n\r\ninterface InputProps extends React.HTMLProps {\r\n dataId: string;\r\n saveFn: SaveCallbackFn;\r\n}\r\n\r\nexport type SaveCallbackFn = ({ cellId, value }: { cellId: string; value: string }) => Promise;\r\n\r\nexport interface SaveCallbackFnResponse {\r\n data: {\r\n value: string | number;\r\n };\r\n}\r\n\r\nconst StyledLoadingSpinner = styled(LoadingSpinner)`\r\n position: absolute;\r\n bottom: 5px;\r\n right: 2px;\r\n\r\n ${Icon} {\r\n margin: 0;\r\n }\r\n`;\r\n\r\nconst AccountCellInputDiv = styled(AccountCell)``;\r\n\r\nconst InvisibleInput = styled.input`\r\n border: 1px solid transparent;\r\n background-color: transparent;\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n font-family: ${FONT_STACK};\r\n padding: ${SPACING.X_SMALL} ${SPACING.SMALL};\r\n margin: 0;\r\n width: 140px;\r\n z-index: 1;\r\n color: ${COLOR.DATAGRID.DATAGRID_TEXT};\r\n\r\n &:hover + ${StyledEdit} {\r\n fill: ${COLOR.BRAND.REPORTING};\r\n }\r\n\r\n &:focus {\r\n box-shadow: 0 0 3px inset ${COLOR.BRAND.REPORTING};\r\n\r\n + ${StyledEdit} {\r\n fill: ${COLOR.BRAND.REPORTING};\r\n }\r\n }\r\n`;\r\n\r\nconst updateCell = ({\r\n e,\r\n value,\r\n setCellValue,\r\n setLastSavedValue,\r\n lastModifiedRef,\r\n}: {\r\n e: React.BaseSyntheticEvent;\r\n value: string | number;\r\n setCellValue: React.Dispatch>;\r\n setLastSavedValue: React.Dispatch>;\r\n lastModifiedRef: React.MutableRefObject;\r\n}) => {\r\n /**\r\n * Before updating the cell, ensure the user is not currently editing it\r\n * by comparing when it was lastModifed to when the event fired.\r\n * This is necessary to prevent overwriting subsequent changes the user made\r\n * while the callback was beind handled.\r\n * It's important that lastModified is a ref value so it is live rather than\r\n * when the function was called.\r\n */\r\n if (lastModifiedRef.current < e.timeStamp) {\r\n setCellValue(value); // write to the cell the new value\r\n }\r\n // always update the lastSavedValue\r\n setLastSavedValue(value);\r\n};\r\n\r\n/**\r\n * Handles saving and updating the cell saving state and value accordingly\r\n * Will save if it is passed an unsaved value\r\n * Calls a saveCallbackFn passed in to it so the value can be persisted.\r\n */\r\nconst saveHandler = async ({\r\n e,\r\n cellId,\r\n lastSavedValue,\r\n lastModifiedRef,\r\n setCellValue,\r\n setLastAttemptedSaveValue,\r\n setLastSavedValue,\r\n saveCallbackFn,\r\n isMountedRef,\r\n}: {\r\n e: React.BaseSyntheticEvent;\r\n cellId: string;\r\n lastSavedValue: string | number | string[];\r\n lastModifiedRef: React.MutableRefObject;\r\n setCellValue: React.Dispatch>;\r\n setLastAttemptedSaveValue: React.Dispatch>;\r\n setLastSavedValue: React.Dispatch>;\r\n saveCallbackFn: SaveCallbackFn;\r\n isMountedRef: React.MutableRefObject;\r\n}) => {\r\n e.persist(); // react 16 uses event pooling https://reactjs.org/docs/legacy-event-pooling.html\r\n const value = e.target.value;\r\n setLastAttemptedSaveValue(value);\r\n // only save if the value has changed from when it was last saved\r\n if (lastSavedValue !== value) {\r\n try {\r\n const { data } = await saveCallbackFn({ cellId, value });\r\n if (!isMountedRef.current) {\r\n return;\r\n }\r\n // write the value back to the cell to ensure consistency from the server to client\r\n updateCell({ e, value: data.value, setCellValue, setLastSavedValue, lastModifiedRef });\r\n } catch {\r\n console.error('Failed to save', cellId, value);\r\n }\r\n }\r\n};\r\n\r\nconst keyHandler = ({\r\n e,\r\n saveFn,\r\n restoreFn,\r\n}: {\r\n e: React.KeyboardEvent;\r\n saveFn: () => Promise;\r\n restoreFn: () => void;\r\n}) => {\r\n if (e.key === 'Enter') {\r\n saveFn();\r\n } else if (e.key === 'Escape' || e.key === 'Esc') {\r\n restoreFn();\r\n }\r\n};\r\n\r\nexport const AccountCellInput = ({\r\n cellId,\r\n inputProps,\r\n hasTextAlignedLeft,\r\n isGroup,\r\n canBeToggled,\r\n isDisplayed,\r\n hasNoPadding,\r\n}: AccountCellInputProps) => {\r\n const [cellValue, setCellValue] = useState(\r\n inputProps.value === null || typeof inputProps.value === 'undefined' ? '' : inputProps.value,\r\n ); // the current value\r\n const [lastAttemptedSaveValue, setLastAttemptedSaveValue] = useState(\r\n inputProps.value === null || typeof inputProps.value === 'undefined' ? '' : inputProps.value,\r\n );\r\n const [lastSavedValue, setLastSavedValue] = useState(\r\n inputProps.value === null || typeof inputProps.value === 'undefined' ? '' : inputProps.value,\r\n ); // so we can compare or restore the last saved value\r\n const [savingState, setSavingState] = useState({ value: false, lastAttemptedSaveDate: 0 }); // just for display purposes, may have actually completed saving as it has a minimum duration\r\n\r\n const isSaving = savingState.value;\r\n const lastModifiedRef = useRef(0);\r\n const savingTimerRef = useRef(0);\r\n const isMountedRef = useRef(false);\r\n\r\n useEffect(() => {\r\n isMountedRef.current = true;\r\n return () => {\r\n isMountedRef.current = false;\r\n };\r\n }, []);\r\n\r\n /**\r\n * if we get passed in a new value, we should use that value\r\n */\r\n useEffect(() => {\r\n setCellValue(inputProps.value || '');\r\n }, [inputProps.value]);\r\n\r\n /**\r\n * ensure that given the value has not changed (saving the most recent value), saving state isn't set false for a min duration\r\n * if the value has changed (there's a new save pending), the saving state can be cleared\r\n */\r\n useEffect(() => {\r\n if (!isMountedRef.current) {\r\n return;\r\n }\r\n\r\n const currentValueMatchesAttemptedSave = cellValue === lastAttemptedSaveValue;\r\n const attemptedSaveValueMatchesSaved = lastAttemptedSaveValue === lastSavedValue;\r\n const showAsSaving =\r\n currentValueMatchesAttemptedSave && lastAttemptedSaveValue !== null && !attemptedSaveValueMatchesSaved;\r\n const now = Date.now();\r\n const lastAttemptedSaveDate =\r\n lastAttemptedSaveValue !== null && !attemptedSaveValueMatchesSaved\r\n ? now\r\n : savingState.lastAttemptedSaveDate; // the date the user last tried to save a value different to the currently saved value\r\n const diff = now - lastAttemptedSaveDate; // how long it has been since user last tried to save\r\n const minDuration = 500; // minimum time to show saving state for\r\n\r\n // when we're saving the last entered value and clearing the save state a minimum duration must have passed\r\n if (cellValue === lastAttemptedSaveValue && showAsSaving === false) {\r\n savingTimerRef.current = window.setTimeout(() => {\r\n setSavingState({ value: showAsSaving, lastAttemptedSaveDate });\r\n }, Math.max(0, minDuration - diff));\r\n } else {\r\n setSavingState({ value: showAsSaving, lastAttemptedSaveDate });\r\n }\r\n // cleanup\r\n return () => {\r\n window.clearTimeout(savingTimerRef.current);\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [cellValue, lastAttemptedSaveValue, lastSavedValue]);\r\n\r\n return (\r\n \r\n {\r\n setCellValue(e.currentTarget.value);\r\n lastModifiedRef.current = e.timeStamp;\r\n }}\r\n onBlur={(e) =>\r\n saveHandler({\r\n e,\r\n cellId,\r\n // TODO: fix issue #292\r\n // @ts-ignore\r\n lastSavedValue,\r\n lastModifiedRef,\r\n // TODO: fix issue #292\r\n // @ts-ignore\r\n setCellValue,\r\n // TODO: fix issue #292\r\n // @ts-ignore\r\n setLastAttemptedSaveValue,\r\n // TODO: fix issue #292\r\n // @ts-ignore\r\n setLastSavedValue,\r\n saveCallbackFn: inputProps.saveFn,\r\n isMountedRef,\r\n })\r\n }\r\n onKeyDown={(e) =>\r\n keyHandler({\r\n e,\r\n // TODO: fix issue #292\r\n // @ts-ignore\r\n saveFn: saveHandler.bind(e, {\r\n e,\r\n cellId,\r\n lastSavedValue,\r\n lastModifiedRef,\r\n setCellValue,\r\n setLastAttemptedSaveValue,\r\n setLastSavedValue,\r\n saveCallbackFn: inputProps.saveFn,\r\n isMountedRef,\r\n }),\r\n restoreFn: setCellValue.bind(e, lastAttemptedSaveValue === null ? '' : lastAttemptedSaveValue),\r\n })\r\n }\r\n data-test-id={inputProps.dataId}\r\n />\r\n {!isSaving && }\r\n {isSaving && }\r\n \r\n );\r\n};\r\n","import classNames from 'classnames';\r\nimport React, { useEffect, useRef } from 'react';\r\nimport styled from 'styled-components';\r\nimport { COLOR } from '../../../../packages/constants';\r\nimport { camelToKebab } from '../../../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport {\r\n AccountChildrenType,\r\n AccountsEliminationsActions,\r\n AccountsEliminationsActionTypes,\r\n AccountsEliminationsState,\r\n AccountType,\r\n columnWidths,\r\n DataGridModes,\r\n DetailsColumns,\r\n ExpansionMode,\r\n isExpanded,\r\n} from '../../data-grid';\r\nimport { AccountCellInput, SaveCallbackFn } from '../account-cell-input/account-cell-input';\r\nimport { AccountCell, TruncateText } from '../account-cell/account-cell';\r\nimport { AccountRow, HandleToggleAccountRowFn, ToggleAccountRow } from '../account-row/account-row';\r\nimport { StyledElimination, StyledMinus, StyledPlus } from '../icons/icons';\r\n\r\nexport interface AccountsListProps {\r\n dataId: string;\r\n /**\r\n * The accounts to display\r\n */\r\n accounts: AccountType[];\r\n /**\r\n * Columns to display within the details pane\r\n */\r\n detailsColumns?: DetailsColumns[];\r\n /**\r\n * External function to update displayName\r\n */\r\n displayNameChange?: SaveCallbackFn;\r\n /**\r\n * A callback to\r\n */\r\n gridEliminationsDispatch?: any;\r\n /**\r\n * Expand/Collapse all rows\r\n */\r\n expansionMode?: ExpansionMode;\r\n /**\r\n * External function to toggle expand/collapse of a row\r\n */\r\n handleToggleAccountRow: HandleToggleAccountRowFn;\r\n /**\r\n * Display the eliminated icon on eliminated account rows\r\n */\r\n identifyEliminatedAccounts?: boolean;\r\n /**\r\n * Show details columns for accounts\r\n */\r\n showAccountDetails?: boolean;\r\n /**\r\n * The interaction mode of the grid\r\n */\r\n mode: DataGridModes;\r\n accountsEliminationsState?: AccountsEliminationsState;\r\n accountsEliminationsDispatch?: React.Dispatch;\r\n}\r\n\r\nexport const AccountsListTable = styled.table`\r\n border-top: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n\r\n ${AccountRow}:first-child ${AccountCell} {\r\n border-top: none;\r\n }\r\n`;\r\n\r\nconst AccountName = styled(TruncateText)`\r\n width: 258px;\r\n line-height: 15px;\r\n`;\r\n\r\nconst AccountChildName = styled(TruncateText)<{ identifyEliminatedAccounts: boolean }>`\r\n width: ${(props) => (props.identifyEliminatedAccounts ? '252px' : '269px')};\r\n`;\r\n\r\nconst nbsp = '\\u00A0';\r\n\r\nconst EliminateAccountCheckbox = React.forwardRef(\r\n (\r\n {\r\n dataId,\r\n account,\r\n parentAccount,\r\n checked,\r\n accountsEliminationsDispatch,\r\n }: {\r\n dataId: string;\r\n account: AccountType | AccountChildrenType;\r\n parentAccount?: AccountType;\r\n checked: boolean;\r\n accountsEliminationsDispatch: any;\r\n },\r\n ref: any,\r\n ) => {\r\n const update = () => {\r\n accountsEliminationsDispatch({\r\n type: AccountsEliminationsActionTypes.TOGGLE_ELIMINATION,\r\n account: account,\r\n parentAccount: parentAccount,\r\n });\r\n };\r\n\r\n return (\r\n \r\n );\r\n },\r\n);\r\nEliminateAccountCheckbox.displayName = 'EliminateAccountCheckbox';\r\n\r\nexport const AccountsList = ({\r\n accounts,\r\n detailsColumns = [],\r\n displayNameChange,\r\n expansionMode = ExpansionMode.expanded,\r\n handleToggleAccountRow,\r\n identifyEliminatedAccounts = false,\r\n showAccountDetails = false,\r\n mode = DataGridModes.Default,\r\n dataId,\r\n accountsEliminationsState,\r\n accountsEliminationsDispatch,\r\n}: AccountsListProps): JSX.Element => {\r\n const arrayBuffer = 100; // prevent ref collision by spacing the array, assumes no account has more than this many children\r\n const checkboxesRef = useRef<(HTMLInputElement | null)[]>([]);\r\n\r\n useEffect(() => {\r\n // set the indeterminate state of the checkbox elements\r\n checkboxesRef.current.forEach((el) => {\r\n if (!el || el.type !== 'checkbox') {\r\n return;\r\n }\r\n el.indeterminate = false;\r\n const accountId = el.getAttribute('data-account-id');\r\n if (\r\n accountId !== null &&\r\n accountsEliminationsState &&\r\n accountsEliminationsState.indeterminateEliminations.includes(accountId)\r\n ) {\r\n el.indeterminate = true;\r\n }\r\n });\r\n });\r\n\r\n return (\r\n \r\n \r\n {accounts.map((account: AccountType, i: number) => (\r\n \r\n \r\n {mode === DataGridModes.EditEliminations && (\r\n \r\n \r\n \r\n {account.canEliminate ? (\r\n (checkboxesRef.current[i] = el)}\r\n />\r\n ) : (\r\n nbsp\r\n )}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {account.children.length ? (\r\n handleToggleAccountRow(account.id)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n {identifyEliminatedAccounts &&\r\n account.children.find((x) => x.isEliminated) && (\r\n \r\n )}\r\n \r\n {account.name}\r\n \r\n \r\n ) : (\r\n {account.name}\r\n )}\r\n \r\n \r\n {detailsColumns.includes(DetailsColumns.ReportCode) && (\r\n \r\n \r\n {account.reportCode}\r\n \r\n \r\n )}\r\n {detailsColumns.includes(DetailsColumns.DisplayName) &&\r\n typeof displayNameChange === 'function' && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n {account.children.map((accountChild: AccountChildrenType, j: number) => (\r\n \r\n {mode === DataGridModes.EditEliminations && (\r\n \r\n \r\n \r\n {accountChild.canEliminate ? (\r\n \r\n (checkboxesRef.current[(i + 1) * arrayBuffer + j] = el)\r\n }\r\n />\r\n ) : (\r\n nbsp\r\n )}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {identifyEliminatedAccounts && accountChild.isEliminated && (\r\n \r\n )}\r\n {`${accountChild.name}`}\r\n \r\n \r\n {detailsColumns.includes(DetailsColumns.ReportCode) && (\r\n \r\n \r\n {nbsp}\r\n \r\n \r\n )}\r\n {detailsColumns.includes(DetailsColumns.DisplayName) &&\r\n typeof displayNameChange === 'function' && (\r\n \r\n \r\n {nbsp}\r\n \r\n \r\n )}\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n \r\n );\r\n};\r\n","import styled from 'styled-components';\r\nimport { COLOR } from '../../../../packages/constants';\r\n\r\ninterface AccountsPanelProps {\r\n width: number;\r\n}\r\n\r\nexport const AccountsPanel = styled.div`\r\n min-width: ${(props) => `${props.width}px`};\r\n display: flex;\r\n flex-direction: column;\r\n position: relative;\r\n\r\n &::after {\r\n border-left: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n content: '';\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n width: 1px;\r\n height: 17px;\r\n }\r\n`;\r\n","import styled from 'styled-components';\r\nimport { COLOR } from '../../../../packages/constants';\r\nimport { AccountCell } from '../account-cell/account-cell';\r\n\r\ninterface StyledScrollbarProps {\r\n dataGridWidth: number | null;\r\n}\r\ninterface ScrollProps {\r\n disabled: boolean;\r\n}\r\n\r\n/* removes the default scroll bar to the data grid table for: */\r\nexport const removeScrollbar = `\r\n /* - IE and Edge */\r\n -ms-overflow-style: none;\r\n /* - Firefox */\r\n scrollbar-width: none;\r\n /* - Webkit */\r\n &::-webkit-scrollbar {\r\n display: none;\r\n }\r\n`;\r\n\r\nexport const DataGridScroller = styled.div`\r\n box-sizing: border-box;\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n border-left: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n overflow: ${(props) => (props.disabled ? 'hidden' : 'auto')};\r\n width: 100%;\r\n\r\n ${removeScrollbar}\r\n\r\n ${AccountCell} {\r\n &:last-child {\r\n border-right: 0;\r\n }\r\n }\r\n`;\r\n\r\nexport const StyledScrollbarWrapper = styled.div`\r\n height: 17px;\r\n overflow-y: hidden;\r\n overflow-x: ${(props) => (props.disabled ? 'hidden' : 'auto')};\r\n position: sticky;\r\n bottom: 0;\r\n`;\r\n\r\nexport const StyledScrollbar = styled.div`\r\n height: 17px;\r\n width: ${(props) => (props.dataGridWidth ? `${props.dataGridWidth}px` : '0')};\r\n`;\r\n\r\nexport const StyledDataGrid = styled.div`\r\n box-sizing: border-box;\r\n border-top: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n border-right: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n border-bottom: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n display: flex;\r\n justify-content: space-between;\r\n flex-direction: column;\r\n`;\r\n\r\nexport const StyledDataGridInner = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n`;\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport dayjs from 'dayjs';\r\nimport isBetween from 'dayjs/plugin/isBetween';\r\n\r\ndayjs.extend(isBetween);\r\n\r\ninterface AddFYTotalsProps {\r\n dataRow: {\r\n date: string;\r\n value: number;\r\n }[];\r\n currentFinancialYear: number;\r\n financialYearStartMonth: number;\r\n isBalanceSheet: boolean;\r\n endOfForecast: string;\r\n}\r\n\r\nexport const AddFYTotals = ({\r\n dataRow,\r\n currentFinancialYear,\r\n financialYearStartMonth,\r\n isBalanceSheet,\r\n endOfForecast,\r\n}: AddFYTotalsProps) => {\r\n if (!dataRow.length) return <>{0};\r\n\r\n let total = 0;\r\n\r\n const dataRowLength = dataRow.length;\r\n const start = dayjs(`${currentFinancialYear}-${financialYearStartMonth}`, 'YYYY-MM');\r\n const end = start.add(1, 'year');\r\n const endOfForecastDate = dayjs(endOfForecast);\r\n // check if balanceStart exceeds the endOfForecast date\r\n const balanceStart = start.add(11, 'month').isAfter(endOfForecast)\r\n ? endOfForecastDate // if it does, use the final month\r\n : start.add(11, 'month'); // otherwise use the 11th month from the start\r\n const balanceEnd = start.add(11, 'month').isAfter(endOfForecast) ? endOfForecastDate : end;\r\n // set the data start and end dates\r\n const dataStart = isBalanceSheet ? balanceStart : start;\r\n const dataEnd = isBalanceSheet ? balanceEnd : end;\r\n\r\n for (let i = 0; i < dataRowLength; i++) {\r\n // isBetween inclusive of start and end using '[]'\r\n if (dayjs(dataRow[i].date).isBetween(dataStart, dataEnd, null, '[]')) {\r\n total += dataRow[i].value;\r\n }\r\n }\r\n\r\n return <>{Number(total).toFixed(0)};\r\n};\r\n","import styled from 'styled-components';\r\nimport { COLOR } from '../../../../packages/constants';\r\nimport { AccountCell } from '../account-cell/account-cell';\r\nimport { AccountRow } from '../account-row/account-row';\r\nimport { removeScrollbar } from '../data-grid-scroller/data-grid-scroller';\r\n\r\nconst shadowWidth = 8;\r\n\r\nexport const StyledTable = styled.table`\r\n border-top: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n ${AccountRow}:first-child ${AccountCell} {\r\n border-top: none;\r\n }\r\n`;\r\n\r\nexport const DataGridTotal = styled.table`\r\n border-top: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n position: relative;\r\n width: 130px;\r\n\r\n tr:first-child ${AccountCell} {\r\n border-top: none;\r\n }\r\n\r\n ${AccountCell} {\r\n border-left: 1px solid ${COLOR.DATAGRID.DATAGRID_DIVIDER_LINE};\r\n\r\n &:last-child {\r\n border-right: 0;\r\n }\r\n }\r\n\r\n &::after {\r\n background-image: linear-gradient(90deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.07));\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: -${shadowWidth}px;\r\n height: 100%;\r\n width: ${shadowWidth}px;\r\n }\r\n`;\r\n\r\nexport const StyledFloatTable = styled.table`\r\n border-top: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n border-bottom: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n`;\r\n\r\nexport const AccountHeader = styled.thead`\r\n width: 100%;\r\n`;\r\n\r\nexport const FloatTableHead = styled.div`\r\n position: sticky;\r\n z-index: 12;\r\n top: 0;\r\n`;\r\n\r\nexport const FloatHead = styled.div`\r\n box-sizing: border-box;\r\n border-left: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n position: sticky;\r\n z-index: 12;\r\n top: 0;\r\n display: flex;\r\n width: 100%;\r\n overflow: auto;\r\n\r\n ${removeScrollbar}\r\n\r\n ${AccountCell} {\r\n &:last-child {\r\n border-right: 0;\r\n }\r\n }\r\n`;\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport { memo } from 'react';\r\nimport styled from 'styled-components';\r\nimport classNames from 'classnames';\r\n\r\nimport { COLOR } from '../../../../packages/constants';\r\nimport { camelToKebab } from '../../../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport { AccountChildrenType, AccountType, DataGridData, ExpansionMode, isExpanded, TitleBar } from '../../data-grid';\r\nimport { AccountCell } from '../account-cell/account-cell';\r\n\r\nimport { AddFYTotals } from '../add-fy-totals/add-fy-total';\r\nimport { DataGridTotal, StyledFloatTable, FloatTableHead } from '../table/table';\r\n\r\nconst FYTotalColumnContainer = styled.div<{ disabled: boolean }>`\r\n ${(props) => props.disabled && `opacity: 0.2;`};\r\n`;\r\n\r\nconst HeaderTable = styled(StyledFloatTable)`\r\n border-right: 0px;\r\n width: 100%;\r\n`;\r\n\r\nconst FYTotalAccountCellHeading = styled(AccountCell)`\r\n border-left-color: ${COLOR.DATAGRID.DATAGRID_DIVIDER_LINE};\r\n`;\r\n\r\nconst FYHeadingYearText = styled.span`\r\n font-weight: 400;\r\n`;\r\n\r\nconst MemoizedAddFYTotals = memo(AddFYTotals);\r\n\r\ninterface FYTotalColumn {\r\n dataId: string;\r\n gridData: DataGridData;\r\n expansionMode: ExpansionMode;\r\n currentFinancialYear: number;\r\n financialYearStartMonth: number;\r\n isBalanceSheet: boolean;\r\n disabled: boolean;\r\n}\r\n\r\nexport const FYTotalColumn: React.FC> = ({\r\n dataId,\r\n gridData,\r\n expansionMode,\r\n currentFinancialYear,\r\n financialYearStartMonth,\r\n isBalanceSheet,\r\n disabled,\r\n}) => {\r\n return (\r\n \r\n  \r\n \r\n \r\n \r\n \r\n \r\n \r\n Total{' '}\r\n \r\n FY{`${currentFinancialYear + 1}`.substring(2)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {gridData.accounts.map((account: AccountType, accountIndex: number) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {account.children.map((accountChild: AccountChildrenType, accountChildIndex: number) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n ))}\r\n \r\n \r\n \r\n );\r\n};\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport dayjs, { Dayjs } from 'dayjs';\r\nimport { AccountCell } from '../account-cell/account-cell';\r\n\r\ninterface HeaderCellProps {\r\n dataId: string;\r\n month: Dayjs;\r\n financialYearStartMonth: number;\r\n}\r\n\r\nexport const HeaderCell = ({ dataId, month, financialYearStartMonth }: HeaderCellProps) => {\r\n return (\r\n \r\n {month.format('MMM YY')}\r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport { FONT_SIZE, SPACING } from '../../../../packages/constants';\r\nimport THEME from '../../../../packages/constants/themes';\r\nimport { DataGridModes } from '../../data-grid';\r\nimport { Button } from '../../../button';\r\n\r\nconst TopRow = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n padding-top: ${SPACING.X_SMALL};\r\n padding-bottom: ${SPACING.X_SMALL};\r\n`;\r\n\r\nconst TopRowLeftButtonsWrapper = styled.div`\r\n display: flex;\r\n margin-right: auto;\r\n`;\r\n\r\nconst TextAccounts = styled.p`\r\n align-self: center;\r\n font-size: ${FONT_SIZE.SMALL};\r\n`;\r\n\r\nconst TextCurrency = styled.p`\r\n align-self: center;\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n`;\r\n\r\nconst EliminationsSaveButton = styled(Button)`\r\n margin: 0 0 0 10px;\r\n padding: 0 8px;\r\n`;\r\n\r\nconst EliminationsCancelButton = styled(Button)`\r\n margin: 0 0 0 10px;\r\n padding: 0 8px;\r\n`;\r\n\r\nconst EliminationsEditButton = styled(Button)`\r\n margin: 0 0 0 10px;\r\n padding: 0 8px;\r\n`;\r\n\r\nconst AdjustArapButton = styled(Button)`\r\n margin: 0 auto 0 10px;\r\n padding: 0 8px;\r\n`;\r\n\r\ninterface EliminationsControlsProps {\r\n dataId: string;\r\n mode: DataGridModes;\r\n editEliminationsHandler: () => void;\r\n saveEliminationsHandler: () => void;\r\n cancelEliminationsHandler: () => void;\r\n}\r\n\r\nexport const EliminationsControls: React.FC> = ({\r\n dataId,\r\n mode,\r\n editEliminationsHandler,\r\n saveEliminationsHandler,\r\n cancelEliminationsHandler,\r\n}) => {\r\n if (mode === DataGridModes.EditEliminations) {\r\n return (\r\n <>\r\n \r\n Save Eliminations\r\n \r\n \r\n Cancel\r\n \r\n \r\n );\r\n } else {\r\n return (\r\n \r\n Edit Eliminations\r\n \r\n );\r\n }\r\n};\r\n\r\ninterface DataGridHeaderProps {\r\n dataId: string;\r\n mode: DataGridModes;\r\n numAccounts: number;\r\n currency: string;\r\n hasEliminationsMode: boolean;\r\n hasArapAdjustments: boolean;\r\n editEliminationsHandler: () => void;\r\n saveEliminationsHandler: () => Promise;\r\n cancelEliminationsHandler: () => void;\r\n adjustArapHandler: () => void;\r\n}\r\n\r\nexport const DataGridHeader: React.FC> = ({\r\n dataId,\r\n mode,\r\n numAccounts,\r\n currency,\r\n hasEliminationsMode,\r\n hasArapAdjustments,\r\n editEliminationsHandler,\r\n saveEliminationsHandler,\r\n cancelEliminationsHandler,\r\n adjustArapHandler,\r\n}) => {\r\n return (\r\n \r\n {numAccounts} Accounts\r\n \r\n {hasEliminationsMode && (\r\n \r\n )}\r\n {hasArapAdjustments && mode != DataGridModes.EditEliminations && (\r\n \r\n Adjust AR & AP\r\n \r\n )}\r\n \r\n \r\n All values are in {currency}\r\n \r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { memo, useEffect } from 'react';\r\n\r\nimport classNames from 'classnames';\r\nimport dayjs, { Dayjs } from 'dayjs';\r\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\r\nimport styled from 'styled-components';\r\nimport { useDebouncedCallback } from 'use-debounce';\r\n\r\nimport { camelToKebab } from '../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport { COLOR, FONT_SIZE, SPACING } from '../../packages/constants';\r\nimport { SaveCallbackFn } from './atoms/account-cell-input/account-cell-input';\r\nimport { AccountCell } from './atoms/account-cell/account-cell';\r\nimport { AccountRow } from './atoms/account-row/account-row';\r\nimport { AccountsList } from './atoms/accounts-list/accounts-list';\r\nimport { AccountsPanel } from './atoms/accounts-panel/accounts-panel';\r\nimport {\r\n DataGridScroller,\r\n StyledDataGrid,\r\n StyledDataGridInner,\r\n StyledScrollbar,\r\n StyledScrollbarWrapper,\r\n} from './atoms/data-grid-scroller/data-grid-scroller';\r\nimport { FYTotalColumn } from './atoms/fy-total-column/fy-total-column';\r\nimport { HeaderCell } from './atoms/header-cell/header-cell';\r\nimport { DataGridHeader } from './atoms/header/header';\r\nimport { StyledChevronLeft, StyledChevronRight } from './atoms/icons/icons';\r\nimport { StyledTable, StyledFloatTable, AccountHeader, FloatHead, FloatTableHead } from './atoms/table/table';\r\n\r\ndayjs.extend(isSameOrAfter);\r\n\r\nexport interface AccountChildrenType {\r\n id: string;\r\n name: string;\r\n displayName?: string | null;\r\n reportCode?: string | null;\r\n type?: string | null;\r\n children?: AccountChildrenType[] | null;\r\n isEliminated?: boolean;\r\n canEliminate?: boolean;\r\n}\r\n\r\nexport interface AccountType {\r\n id: string;\r\n name: string;\r\n displayName: string | null;\r\n reportCode: string | null;\r\n type: string;\r\n children: AccountChildrenType[];\r\n isEliminated?: boolean;\r\n canEliminate?: boolean;\r\n}\r\n\r\nexport interface DataGridData {\r\n organisation: {\r\n id: string;\r\n name: string;\r\n currency: string;\r\n financialYearStartMonth: number;\r\n startDate: string;\r\n endDate: string;\r\n lastActualsDate: string;\r\n };\r\n accounts: AccountType[];\r\n data: MonthlyDataGroupedByKey;\r\n bandType: string;\r\n mode: string;\r\n isGroup: boolean;\r\n}\r\n\r\n/**\r\n * Columns that appear after the accounts list in a toggleable details pane\r\n */\r\nexport enum DetailsColumns {\r\n ReportCode = 'REPORTCODE',\r\n DisplayName = 'DISPLAYNAME',\r\n}\r\n\r\n/**\r\n * Columns that appear in front of the accounts list\r\n */\r\nexport enum AccountColumns {\r\n Elimination = 'ELIMINATION',\r\n}\r\n\r\n/**\r\n * Columns that appear on the grid (aligned to the end)\r\n */\r\nexport enum GridColumns {\r\n EndOfFinancialYearTotal = 'EOFYTOTAL',\r\n}\r\nexport interface DataGridProps {\r\n data: DataGridData;\r\n /**\r\n * Data Test ID\r\n */\r\n dataId: string;\r\n /**\r\n * External function to update displayName\r\n */\r\n displayNameChange?: SaveCallbackFn;\r\n /**\r\n * Choose what columns to show in the detailsColumns\r\n */\r\n detailsColumns?: DetailsColumns[];\r\n /**\r\n * Option to hide the EOFY column\r\n */\r\n gridColumns?: GridColumns[];\r\n /**\r\n * Expand/Collapse all rows\r\n */\r\n expansionMode?: ExpansionMode;\r\n /**\r\n * Change EOFY calculation method for Balance Sheet\r\n */\r\n isBalanceSheet?: boolean;\r\n /**\r\n * Display the eliminated icon on eliminated account rows\r\n */\r\n identifyEliminatedAccounts?: boolean;\r\n /**\r\n * Can enter mode to edit eliminations\r\n */\r\n hasEliminationsMode?: boolean;\r\n /**\r\n * Can adjust AR and AP\r\n */\r\n hasArapAdjustments?: boolean;\r\n themeProvider?: {};\r\n /**\r\n * External function to dispatch actions to\r\n */\r\n actionHandler?: (action: Action) => Promise;\r\n}\r\n\r\ninterface Action {\r\n type: TType;\r\n payload?: TPayload;\r\n}\r\n\r\ninterface MonthlyDataPoint {\r\n date: string;\r\n value: number;\r\n}\r\n\r\ninterface MonthlyDataGroupedByKey {\r\n [key: string]: MonthlyDataPoint[];\r\n}\r\n\r\ninterface MonthlyDataValueLookup {\r\n [k: string]: number;\r\n}\r\n\r\ninterface GetCellValueProps {\r\n isGroup?: boolean;\r\n month: Dayjs;\r\n accountId: string;\r\n actualsToDate: Dayjs;\r\n monthlyData: MonthlyDataValueLookup;\r\n accountName: string;\r\n dataId: string;\r\n}\r\n\r\n/**\r\n * Different modes control which accounts should be expanded\r\n * In future this might have several modes for having different\r\n * levels of nesting or account types expanded or not\r\n */\r\nexport enum ExpansionMode {\r\n collapsed = 'COLLAPSED', // collapses all accounts\r\n expanded = 'EXPANDED', // expands all accounts\r\n}\r\n\r\n/**\r\n * Actions dispatched to an external handler\r\n */\r\nexport enum DataGridExternalActions {\r\n FETCH_DATA = 'FETCH_DATA',\r\n SAVE_ELIMINATIONS = 'SAVE_ELIMINATIONS',\r\n ADJUST_ARAP = 'ADJUST_ARAP',\r\n}\r\n\r\n/*\r\n * Accounts Eliminations\r\n */\r\n\r\nexport type EliminationsSettings = string[];\r\n\r\nexport enum AccountsEliminationsActionTypes {\r\n TOGGLE_ELIMINATION = 'TOGGLE_ELIMINATION',\r\n RESET_SETTINGS = 'RESET_SETTINGS',\r\n}\r\n\r\nexport interface AccountsEliminationsState {\r\n eliminationsSettings: EliminationsSettings;\r\n indeterminateEliminations: string[];\r\n}\r\n\r\ninterface AccountsEliminationsResetSettingsAction {\r\n type: AccountsEliminationsActionTypes.RESET_SETTINGS;\r\n payload: {\r\n eliminationsSettings: EliminationsSettings;\r\n indeterminateEliminations: string[];\r\n };\r\n}\r\n\r\ninterface AccountsEliminationsToggleEliminationAction {\r\n type: AccountsEliminationsActionTypes.TOGGLE_ELIMINATION;\r\n account: AccountType | AccountChildrenType;\r\n parentAccount?: AccountType;\r\n}\r\n\r\nexport type AccountsEliminationsActions =\r\n | AccountsEliminationsResetSettingsAction\r\n | AccountsEliminationsToggleEliminationAction;\r\n\r\n/**\r\n * Maps accounts that are eliminated to an array.\r\n * Also determines accounts are eliminated if their children are all eliminated.\r\n * Assumes all children are returned necessary to determine the parent is eliminated.\r\n */\r\nconst getEliminatedAccounts = (accounts: AccountType[]) => {\r\n const eliminatedAccounts: string[] = [];\r\n accounts.forEach((account) => {\r\n if (account.isEliminated) {\r\n eliminatedAccounts.push(account.id);\r\n }\r\n if (account.children && account.children.length > 0) {\r\n // filter to get eliminated child accounts\r\n const eliminatedChildren = account.children.filter((item) => {\r\n return item.isEliminated;\r\n });\r\n const eliminatedChildrenIds = eliminatedChildren.map((item) => {\r\n return item.id;\r\n });\r\n /*\r\n * check if the length of the set matches account children length\r\n * if it does, push the account to eliminatedAccounts array\r\n */\r\n if (eliminatedChildren.length === account.children.length) {\r\n eliminatedAccounts.push(account.id);\r\n }\r\n // push the filtered set of child accounts to eliminatedAccounts array\r\n eliminatedAccounts.push(...eliminatedChildrenIds);\r\n }\r\n });\r\n return eliminatedAccounts;\r\n};\r\n\r\nconst getIndeterminateAccounts = (accounts: AccountType[]) => {\r\n const indeterminateAccounts = accounts.filter((account) => {\r\n // set indeterminate if not all children are checked/unchecked\r\n const checkedChildAccounts = account.children.filter((item: AccountChildrenType) => {\r\n return item.isEliminated;\r\n });\r\n if (checkedChildAccounts.length !== 0 && checkedChildAccounts.length !== account.children.length) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n const indeterminateAccountIds: string[] = indeterminateAccounts.map((item) => item.id);\r\n return indeterminateAccountIds;\r\n};\r\n\r\nexport const accountsEliminationsReducer = (\r\n state: AccountsEliminationsState,\r\n action: AccountsEliminationsActions,\r\n): AccountsEliminationsState => {\r\n const handleUpdate = ({\r\n account,\r\n parentAccount,\r\n }: {\r\n account: AccountType | AccountChildrenType;\r\n parentAccount?: AccountType;\r\n }) => {\r\n // toggle state\r\n // push to eliminationsSettings array\r\n const eliminationsSettingsCopy = [...state.eliminationsSettings];\r\n const indeterminateEliminationsCopy = [...state.indeterminateEliminations];\r\n const matchedIndex = eliminationsSettingsCopy.indexOf(account.id);\r\n const isAdding = matchedIndex < 0;\r\n\r\n if (isAdding) {\r\n eliminationsSettingsCopy.push(account.id);\r\n } else {\r\n eliminationsSettingsCopy.splice(matchedIndex, 1);\r\n }\r\n\r\n // remove this account from indeterminate state\r\n const indeterminateAccountIndex = indeterminateEliminationsCopy.indexOf(account.id);\r\n if (indeterminateAccountIndex >= 0) {\r\n indeterminateEliminationsCopy.splice(indeterminateAccountIndex, 1);\r\n }\r\n\r\n if (typeof parentAccount !== 'undefined') {\r\n // remove parent from indeterminate state\r\n const indeterminateParentAccountIndex = indeterminateEliminationsCopy.indexOf(parentAccount.id);\r\n if (indeterminateParentAccountIndex >= 0) {\r\n indeterminateEliminationsCopy.splice(indeterminateParentAccountIndex, 1);\r\n }\r\n //\r\n if (isAdding) {\r\n // set indeterminate if not all children are checked\r\n const checkedItems = parentAccount.children.filter((item: any) => {\r\n const isItemChecked = eliminationsSettingsCopy.includes(item.id);\r\n return isItemChecked;\r\n });\r\n if (\r\n checkedItems.length < parentAccount.children.length &&\r\n !indeterminateEliminationsCopy.includes(parentAccount.id)\r\n ) {\r\n indeterminateEliminationsCopy.push(parentAccount.id);\r\n } else {\r\n // check if all children are checked\r\n if (!eliminationsSettingsCopy.includes(parentAccount.id)) {\r\n eliminationsSettingsCopy.push(parentAccount.id);\r\n }\r\n }\r\n } else {\r\n // uncheck\r\n const parentAccountMatchedIndex = eliminationsSettingsCopy.indexOf(parentAccount.id);\r\n if (parentAccountMatchedIndex >= 0) {\r\n eliminationsSettingsCopy.splice(parentAccountMatchedIndex, 1);\r\n }\r\n // set indeterminate if not all children are unchecked\r\n const distinct = parentAccount.children.filter((item: any) => {\r\n const isItemChecked = eliminationsSettingsCopy.includes(item.id);\r\n return isItemChecked;\r\n });\r\n if (distinct.length > 0 && !indeterminateEliminationsCopy.includes(parentAccount.id)) {\r\n indeterminateEliminationsCopy.push(parentAccount.id);\r\n }\r\n }\r\n }\r\n if (account.children) {\r\n // toggle children\r\n account.children.forEach((childAccount: any) => {\r\n const childMatchedIndex = eliminationsSettingsCopy.indexOf(childAccount.id);\r\n const alreadyHasChild = childMatchedIndex >= 0;\r\n if (isAdding && !alreadyHasChild) {\r\n eliminationsSettingsCopy.push(childAccount.id);\r\n } else if (!isAdding && alreadyHasChild) {\r\n eliminationsSettingsCopy.splice(childMatchedIndex, 1);\r\n }\r\n });\r\n }\r\n\r\n return {\r\n eliminationsSettings: eliminationsSettingsCopy,\r\n indeterminateEliminations: indeterminateEliminationsCopy,\r\n };\r\n };\r\n\r\n switch (action.type) {\r\n case AccountsEliminationsActionTypes.TOGGLE_ELIMINATION: {\r\n const newState = handleUpdate({ account: action.account, parentAccount: action.parentAccount });\r\n return { ...newState };\r\n }\r\n case AccountsEliminationsActionTypes.RESET_SETTINGS: {\r\n const newState = { ...state };\r\n newState.eliminationsSettings = action.payload.eliminationsSettings;\r\n newState.indeterminateEliminations = action.payload.indeterminateEliminations;\r\n return { ...newState };\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const TitleBar = styled.div`\r\n border-left: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n color: ${COLOR.DATAGRID.DATAGRID_TEXT};\r\n display: flex;\r\n align-items: center;\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n font-weight: 700;\r\n justify-content: space-between;\r\n padding: ${SPACING.SMALL};\r\n min-height: 18px;\r\n`;\r\n\r\nconst ToggleAccountDetails = styled.button`\r\n border: 0;\r\n background-color: transparent;\r\n color: ${COLOR.DATAGRID.DATAGRID_TEXT};\r\n cursor: pointer;\r\n line-height: 12px;\r\n font-size: inherit;\r\n border-bottom: 1px solid ${COLOR.PRIMARY.BLACK};\r\n display: flex;\r\n align-items: center;\r\n padding: 0;\r\n`;\r\n\r\nconst DataGridDataTableContainer = styled.div<{ nonDataColumnsWidth: number; disabled: boolean }>`\r\n width: calc(100% - ${(props) => props.nonDataColumnsWidth}px);\r\n position: relative;\r\n ${(props) => props.disabled && `opacity: 0.2;`};\r\n`;\r\n\r\n// flatten the monthly data\r\nconst flattenData = (data: MonthlyDataGroupedByKey) => {\r\n const flatData: MonthlyDataValueLookup = {};\r\n for (const item in data) {\r\n for (const monthlyDataPoint of data[item]) {\r\n flatData[`${item}-${dayjs(monthlyDataPoint.date).format('YYYY-MM')}`] = monthlyDataPoint.value;\r\n }\r\n }\r\n return flatData;\r\n};\r\n\r\nconst GetCellValue = ({\r\n isGroup,\r\n month,\r\n accountId,\r\n actualsToDate,\r\n monthlyData,\r\n accountName,\r\n dataId,\r\n}: GetCellValueProps) => {\r\n const formatString = 'YYYY-MM';\r\n const monthFormatted = dayjs(month).format(formatString);\r\n let value = 0;\r\n const hasVal = typeof monthlyData[`${accountId}-${monthFormatted}`] !== 'undefined';\r\n if (hasVal) {\r\n value = monthlyData[`${accountId}-${monthFormatted}`];\r\n } else {\r\n value = 0;\r\n }\r\n\r\n return (\r\n \r\n {value}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * determines if the account is expanded according to the expansion mode and type of account\r\n * @param expansionMode\r\n * @param account\r\n */\r\n// account is currently unused but should be passed through to make it possible to be used\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nexport const isExpanded = (expansionMode: ExpansionMode, account: AccountType | AccountChildrenType): boolean => {\r\n return expansionMode === ExpansionMode.expanded;\r\n};\r\n\r\nconst MemoizedGetCellValue = memo(GetCellValue);\r\n\r\nexport const columnWidths = {\r\n accounts: 305,\r\n eliminations: 71,\r\n reportCode: 142,\r\n displayName: 156,\r\n endOfFinancialYearTotal: 130,\r\n};\r\n\r\nexport const handleToggleAccountRow = (id: string): void => {\r\n // DOM manipulation to make performance better.\r\n const dataIds = document.querySelectorAll(`.parent-id-${id}`);\r\n const rowIcons = document.querySelectorAll(`[data-account=\"${id}\"] .icon--toggle-row`);\r\n dataIds.forEach((element) => element.classList.toggle('h-display--none'));\r\n rowIcons.forEach((element) => element.classList.toggle('h-display--none'));\r\n};\r\n\r\n/**\r\n * The interaction mode of the grid\r\n */\r\nexport enum DataGridModes {\r\n Default = 'DEFAULT',\r\n EditEliminations = 'EDIT_ELIMINATIONS',\r\n}\r\n\r\nconst DataGrid: React.FC> = ({\r\n data,\r\n dataId,\r\n detailsColumns = [],\r\n gridColumns = [],\r\n expansionMode = ExpansionMode.expanded,\r\n displayNameChange,\r\n isBalanceSheet = false,\r\n identifyEliminatedAccounts = false,\r\n hasEliminationsMode = false,\r\n hasArapAdjustments = false,\r\n actionHandler,\r\n ...props\r\n}) => {\r\n const [showAccountDetails, toggleAccountDetails] = React.useState(false);\r\n const [gridData, setGridData] = React.useState(data);\r\n const [dataGridWidth, setDataGridWidth] = React.useState(0);\r\n const [arrMonths, setArrMonths] = React.useState([]);\r\n const [monthlyData, setMonthlyData] = React.useState(flattenData(data.data));\r\n const [currentFinancialYear, setCurrentFinancialYear] = React.useState(0);\r\n const [actualsToDate, setActualsToDate] = React.useState(dayjs(data.organisation.lastActualsDate));\r\n const [mode, setMode] = React.useState(DataGridModes.Default);\r\n const [accountsEliminationsState, accountsEliminationsDispatch] = React.useReducer(accountsEliminationsReducer, {\r\n eliminationsSettings: getEliminatedAccounts(gridData.accounts),\r\n indeterminateEliminations: getIndeterminateAccounts(gridData.accounts),\r\n });\r\n\r\n const StyledDataGridRef = React.useRef(null);\r\n const DataGridScrollerRef = React.useRef(null);\r\n const DataGridTableRef = React.useRef(null);\r\n const ScrollBarRef = React.useRef(null);\r\n const FloatHeadRef = React.useRef(null);\r\n const FloatHeadRowRef = React.useRef(null);\r\n\r\n let ticking = false;\r\n\r\n const hasDetailsColumns = detailsColumns.length > 0;\r\n const hasFYTotal = gridColumns.includes(GridColumns.EndOfFinancialYearTotal);\r\n\r\n const accountsPanelWidth = (() => {\r\n const accountsWidth = columnWidths.accounts;\r\n const accountColumnsWidth = mode === DataGridModes.EditEliminations ? columnWidths.eliminations : 0;\r\n const detailsWidth = showAccountDetails\r\n ? (() => {\r\n let dw = 0;\r\n detailsColumns.includes(DetailsColumns.ReportCode) && (dw += columnWidths.reportCode);\r\n detailsColumns.includes(DetailsColumns.DisplayName) && (dw += columnWidths.displayName);\r\n return dw;\r\n })()\r\n : 0;\r\n return accountsWidth + accountColumnsWidth + detailsWidth;\r\n })();\r\n\r\n const nonDataColumnsWidth = (() => {\r\n const gridColumnsWidth = hasFYTotal ? columnWidths.endOfFinancialYearTotal : 0;\r\n return accountsPanelWidth + gridColumnsWidth;\r\n })();\r\n\r\n const cells = FloatHeadRef.current && FloatHeadRef.current.querySelectorAll('[data-fy]');\r\n\r\n function update() {\r\n const DataGridScrollerScrollLeft = DataGridScrollerRef.current && DataGridScrollerRef.current.scrollLeft;\r\n const DataGridScrollerRects = DataGridScrollerRef.current && DataGridScrollerRef.current.getClientRects();\r\n\r\n if (DataGridScrollerScrollLeft !== null && DataGridScrollerRects !== null && cells !== null && cells.length) {\r\n const cellNumber =\r\n DataGridScrollerRects[0] &&\r\n cells[0] &&\r\n Math.floor(\r\n (DataGridScrollerRects[0].width + DataGridScrollerScrollLeft) /\r\n cells[0].getBoundingClientRect().width,\r\n );\r\n const cellElement = cells[cellNumber];\r\n\r\n // @ts-ignore\r\n if (cellElement && currentFinancialYear !== Number(cellElement.dataset.fy)) {\r\n // @ts-ignore\r\n setCurrentFinancialYear(Number(cellElement.dataset.fy));\r\n }\r\n if (FloatHeadRowRef.current !== null && DataGridScrollerRef.current !== null) {\r\n if (\r\n FloatHeadRowRef.current.getBoundingClientRect().width -\r\n DataGridScrollerRef.current.getBoundingClientRect().width ===\r\n DataGridScrollerScrollLeft &&\r\n cells[cellNumber - 1]\r\n ) {\r\n // @ts-ignore\r\n setCurrentFinancialYear(Number(cells[cellNumber - 1].dataset.fy));\r\n }\r\n }\r\n }\r\n ticking = false;\r\n }\r\n\r\n function requestTick() {\r\n if (!ticking) {\r\n requestAnimationFrame(update);\r\n ticking = true;\r\n }\r\n }\r\n\r\n function handleScroll() {\r\n requestTick();\r\n }\r\n\r\n handleScroll();\r\n\r\n const handleDataGridScroll = useDebouncedCallback(() => {\r\n if (ScrollBarRef.current !== null && DataGridScrollerRef.current !== null && FloatHeadRef.current !== null) {\r\n const DataGridScrollerScrollLeft = DataGridScrollerRef.current.scrollLeft;\r\n ScrollBarRef.current.scrollLeft = DataGridScrollerScrollLeft;\r\n FloatHeadRef.current.scrollLeft = DataGridScrollerScrollLeft;\r\n }\r\n }, 10);\r\n\r\n const handleScrollBarScroll = () => {\r\n if (DataGridScrollerRef.current !== null && ScrollBarRef.current !== null && FloatHeadRef.current !== null) {\r\n handleScroll();\r\n\r\n DataGridScrollerRef.current.scrollLeft = ScrollBarRef.current.scrollLeft;\r\n FloatHeadRef.current.scrollLeft = DataGridScrollerRef.current.scrollLeft;\r\n }\r\n };\r\n\r\n // update the grid data state when data prop updates\r\n useEffect(() => {\r\n setGridData(data);\r\n }, [data]);\r\n\r\n useEffect(() => {\r\n const startDate = dayjs(gridData.organisation.startDate);\r\n const endDate = dayjs(gridData.organisation.endDate);\r\n // create monthly range between startDate and endDate\r\n const months: Dayjs[] = [];\r\n const diffBetween = endDate.diff(startDate, 'month');\r\n for (let i = 0; i <= diffBetween; i++) {\r\n months.push(startDate.add(i, 'month'));\r\n }\r\n setArrMonths(months);\r\n }, [gridData.organisation.startDate, gridData.organisation.endDate]);\r\n\r\n useEffect(() => {\r\n setActualsToDate(dayjs(gridData.organisation.lastActualsDate));\r\n }, [gridData.organisation.lastActualsDate]);\r\n\r\n useEffect(() => {\r\n setMonthlyData(flattenData(gridData.data));\r\n }, [gridData.data]);\r\n\r\n useEffect(() => {\r\n const getDimensions = () => ({\r\n width: (DataGridTableRef.current && DataGridTableRef.current.offsetWidth) || 0,\r\n });\r\n setDataGridWidth(getDimensions().width);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [DataGridTableRef.current]);\r\n\r\n /* Action handlers */\r\n\r\n const toggleAccountDetailsHandler = () => toggleAccountDetails(!showAccountDetails);\r\n\r\n const editEliminationsHandler = () => {\r\n // set the mode to eliminations mode\r\n setMode(DataGridModes.EditEliminations);\r\n };\r\n\r\n const saveEliminationsHandler = async () => {\r\n if (typeof actionHandler !== 'function') {\r\n // set the mode back to default\r\n setMode(DataGridModes.Default);\r\n return;\r\n }\r\n // save the eliminations settings\r\n await actionHandler({\r\n type: DataGridExternalActions.SAVE_ELIMINATIONS,\r\n payload: { settings: accountsEliminationsState.eliminationsSettings },\r\n });\r\n // set the mode back to default\r\n setMode(DataGridModes.Default);\r\n };\r\n\r\n const cancelEliminationsHandler = () => {\r\n const eliminationsSettings = getEliminatedAccounts(gridData.accounts);\r\n const indeterminateEliminations = getIndeterminateAccounts(gridData.accounts);\r\n\r\n accountsEliminationsDispatch({\r\n type: AccountsEliminationsActionTypes.RESET_SETTINGS,\r\n payload: {\r\n eliminationsSettings: eliminationsSettings,\r\n indeterminateEliminations: indeterminateEliminations,\r\n },\r\n });\r\n\r\n setMode(DataGridModes.Default);\r\n };\r\n\r\n const adjustArapHandler = () => {\r\n if (typeof actionHandler !== 'function') {\r\n return;\r\n }\r\n actionHandler({ type: DataGridExternalActions.ADJUST_ARAP });\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n Accounts{' '}\r\n {hasDetailsColumns && (\r\n \r\n {showAccountDetails && } {showAccountDetails ? 'Hide' : 'Show'}{' '}\r\n details️ {!showAccountDetails && }\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {mode === DataGridModes.EditEliminations && (\r\n \r\n \r\n Eliminate\r\n \r\n \r\n )}\r\n \r\n \r\n Account Name\r\n \r\n \r\n {detailsColumns.includes(DetailsColumns.ReportCode) && (\r\n \r\n \r\n Report Code\r\n \r\n \r\n )}\r\n {detailsColumns.includes(DetailsColumns.DisplayName) && (\r\n \r\n \r\n Spotlight Display Name\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n  \r\n
    \r\n \r\n \r\n \r\n \r\n {arrMonths.map((month: Dayjs) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n handleDataGridScroll()}\r\n disabled={mode === DataGridModes.EditEliminations}\r\n >\r\n \r\n \r\n {gridData.accounts.map((account: AccountType) => (\r\n \r\n \r\n {arrMonths.map((month: Dayjs) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n {account.children.map((accountChild: AccountChildrenType) => (\r\n \r\n {arrMonths.map((month: Dayjs) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n \r\n \r\n handleScrollBarScroll()}\r\n disabled={mode === DataGridModes.EditEliminations}\r\n >\r\n \r\n \r\n \r\n {hasFYTotal && (\r\n \r\n )}{' '}\r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport { DataGrid };\r\n","import * as React from 'react';\r\nimport { useCallback, useEffect, useState } from 'react';\r\n\r\nimport { ArrowSeparateVertical, NavArrowUp, NavArrowDown } from 'iconoir-react';\r\nimport cloneDeep from 'lodash/cloneDeep';\r\nimport styled from 'styled-components';\r\nimport useDeepCompareEffect from 'use-deep-compare-effect';\r\n\r\nimport { camelToKebab } from '../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport { anyCompare, stringCompare } from '../../../Scripts/Spotlight/Utilities/sort';\r\nimport { COLOR, SPACING } from '../../packages/constants';\r\nimport { LoadingSpinner } from '../loading-spinner';\r\n\r\nexport interface DataTableColumnDefinition {\r\n name: string;\r\n header: string;\r\n hideHeader?: boolean;\r\n dataId?: string;\r\n width?: string;\r\n sortable?: boolean;\r\n compareFn?: (value1: any, value2: any) => number;\r\n render?: (row: any) => JSX.Element;\r\n}\r\n\r\ninterface RowData {\r\n id: string;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface DataTableRowDefinition {\r\n data: RowData;\r\n className?: string;\r\n dataId?: string;\r\n}\r\n\r\nexport interface DataTableProps {\r\n columns: DataTableColumnDefinition[];\r\n rows: DataTableRowDefinition[];\r\n defaultSortColumn?: string;\r\n defaultSortDirection?: SortDirection;\r\n rowHeight?: string;\r\n headerFontSize?: string;\r\n dataFontSize?: string;\r\n loading?: boolean;\r\n ariaLabel?: string;\r\n dataId?: string;\r\n pinnedRows?: string[];\r\n}\r\n\r\nexport enum SortDirection {\r\n Ascending = 'ASCENDING',\r\n Descending = 'DESCENDING',\r\n}\r\n\r\ninterface StyledHeaderRowProps {\r\n fontSize?: string;\r\n}\r\n\r\ninterface StyledHeaderCellProps {\r\n width?: string;\r\n}\r\n\r\ninterface StyledRowProps {\r\n height?: string;\r\n fontSize?: string;\r\n}\r\n\r\nconst StyledDataTable = styled.table`\r\n width: 100%;\r\n table-layout: fixed;\r\n border-collapse: separate;\r\n`;\r\n\r\nconst StyledHeaderRow = styled.tr`\r\n font-size: ${(props: StyledHeaderRowProps) => props.fontSize};\r\n font-weight: 400;\r\n color: #031c44;\r\n`;\r\n\r\nconst StyledHeaderCell = styled.th`\r\n padding: 15px ${SPACING.MEDIUM};\r\n text-align: left;\r\n vertical-align: bottom;\r\n word-wrap: break-word;\r\n line-height: 1.5;\r\n ${(props: StyledHeaderCellProps) => (props.width ? `width: ${props.width}` : '')};\r\n`;\r\n\r\nconst StyledRow = styled.tr`\r\n font-size: ${(props: StyledRowProps) => props.fontSize};\r\n color: #031c44;\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n height: ${(props: StyledRowProps) => props.height};\r\n`;\r\n\r\ninterface StyledCellProps {\r\n inFirstRow: boolean;\r\n inLastRow: boolean;\r\n inFirstColumn: boolean;\r\n inLastColumn: boolean;\r\n}\r\n\r\nconst StyledCell = styled.td`\r\n padding: 0 ${SPACING.MEDIUM};\r\n vertical-align: middle;\r\n text-align: left;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n\r\n // border\r\n border-color: #cdd3de;\r\n border-style: solid;\r\n border-left-width: ${(props) => (props.inFirstColumn ? '1px' : '0')};\r\n border-right-width: ${(props) => (props.inLastColumn ? '1px' : '0')};\r\n border-bottom-width: 1px;\r\n border-top-width: ${(props) => (props.inFirstRow ? '1px' : '0')};\r\n border-top-left-radius: ${(props) => (props.inFirstRow && props.inFirstColumn ? '5px' : '0')};\r\n border-top-right-radius: ${(props) => (props.inFirstRow && props.inLastColumn ? '5px' : '0')};\r\n border-bottom-left-radius: ${(props) => (props.inLastRow && props.inFirstColumn ? '5px' : '0')};\r\n border-bottom-right-radius: ${(props) => (props.inLastRow && props.inLastColumn ? '5px' : '0')};\r\n`;\r\n\r\nconst StyledNonSortableHeaderCell = styled.div`\r\n display: flex;\r\n align-items: center;\r\n min-height: 1.4em;\r\n`;\r\n\r\nconst StyledSortableHeaderCell = styled.div`\r\n display: flex;\r\n column-gap: ${SPACING.XX_SMALL};\r\n align-items: center;\r\n cursor: pointer;\r\n user-select: none;\r\n\r\n &:hover {\r\n text-decoration: underline;\r\n text-underline-position: under;\r\n }\r\n`;\r\n\r\nconst StyledSortIcon = styled.div`\r\n align-self: flex-end;\r\n flex-shrink: 0;\r\n height: 1.4em;\r\n width: 1.4em;\r\n`;\r\n\r\nconst StyledHeaderCellText = styled.div`\r\n user-select: text;\r\n`;\r\n\r\nconst StyledLoadingSpinner = styled(LoadingSpinner)`\r\n display: flex;\r\n justify-content: center;\r\n`;\r\n\r\nconst DataTableCell = ({\r\n row,\r\n column,\r\n dataId,\r\n inFirstRow,\r\n inFirstColumn,\r\n inLastRow,\r\n inLastColumn,\r\n}: {\r\n row: DataTableRowDefinition;\r\n column: DataTableColumnDefinition;\r\n dataId?: string;\r\n inFirstRow: boolean;\r\n inFirstColumn: boolean;\r\n inLastRow: boolean;\r\n inLastColumn: boolean;\r\n}) => {\r\n return (\r\n \r\n {column.render ? column.render(row.data) : row.data[column.name] ?? ''}\r\n \r\n );\r\n};\r\n\r\nconst SortableHeaderCell = ({\r\n column,\r\n isCurrentSortColumn,\r\n sortDirection,\r\n changeSortHandler,\r\n}: {\r\n column: DataTableColumnDefinition;\r\n isCurrentSortColumn: boolean;\r\n sortDirection: SortDirection;\r\n changeSortHandler: (columnName: string) => void;\r\n}) => {\r\n return (\r\n changeSortHandler(column.name)}\r\n data-test-id={\r\n column.dataId\r\n ? `${column.dataId}-header-button-sort`\r\n : `${camelToKebab(column.header)}-header-button-sort`\r\n }\r\n >\r\n {!column.hideHeader && {column.header}}\r\n \r\n {isCurrentSortColumn && sortDirection === SortDirection.Ascending && (\r\n \r\n )}\r\n {isCurrentSortColumn && sortDirection === SortDirection.Descending && (\r\n \r\n )}\r\n {!isCurrentSortColumn && }\r\n \r\n \r\n );\r\n};\r\n\r\nexport const DataTable = React.forwardRef(\r\n (\r\n {\r\n columns = [],\r\n rows = [],\r\n defaultSortColumn,\r\n defaultSortDirection = SortDirection.Ascending,\r\n rowHeight = '80px',\r\n headerFontSize = '13px',\r\n dataFontSize = '14px',\r\n loading,\r\n dataId,\r\n ariaLabel,\r\n pinnedRows = [],\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [sortColumnName, setSortColumnName] = useState(defaultSortColumn);\r\n const [sortDirection, setSortDirection] = useState(defaultSortDirection);\r\n\r\n const sort = useCallback(() => {\r\n const rowsClone = cloneDeep(rows);\r\n\r\n if (!sortColumnName) {\r\n return rowsClone;\r\n }\r\n const sortColumn = columns.find((column) => column.name === sortColumnName);\r\n\r\n if (!sortColumn) {\r\n return rowsClone;\r\n }\r\n\r\n const multiplier = sortDirection === SortDirection.Descending ? -1 : 1;\r\n\r\n const defaultCompareFn = (a: any, b: any) => {\r\n const valueA = a[sortColumn.name];\r\n const valueB = b[sortColumn.name];\r\n\r\n if (typeof valueA === 'string' && typeof valueB === 'string') {\r\n return stringCompare(valueA, valueB);\r\n }\r\n\r\n return anyCompare(valueA, valueB);\r\n };\r\n\r\n const sortFn = (rowA: DataTableRowDefinition, rowB: DataTableRowDefinition) => {\r\n const result = sortColumn.compareFn\r\n ? sortColumn.compareFn(rowA.data, rowB.data)\r\n : defaultCompareFn(rowA.data, rowB.data);\r\n\r\n return result * multiplier;\r\n };\r\n\r\n // Calling the sort function on cloned rows, hence mutating the array\r\n rowsClone.sort(sortFn);\r\n\r\n if (pinnedRows) {\r\n const pinnedElements = rowsClone.filter((row) => pinnedRows.includes(row.data.id));\r\n const nonPinnedElements = rowsClone.filter((row) => !pinnedRows.includes(row.data.id));\r\n\r\n const pinnedSortedRows = [...pinnedElements, ...nonPinnedElements];\r\n\r\n return pinnedSortedRows;\r\n } else {\r\n return rowsClone;\r\n }\r\n }, [sortColumnName, sortDirection, rows, columns, pinnedRows]);\r\n\r\n const [sortedRows, setSortedRows] = useState(sort());\r\n\r\n const changeSort = (selectedColumnName: string) => {\r\n const newSortDirection =\r\n sortColumnName === selectedColumnName && sortDirection === SortDirection.Ascending\r\n ? SortDirection.Descending\r\n : SortDirection.Ascending;\r\n\r\n setSortColumnName(selectedColumnName);\r\n setSortDirection(newSortDirection);\r\n };\r\n\r\n useEffect(() => {\r\n setSortColumnName(defaultSortColumn);\r\n setSortDirection(defaultSortColumn ? defaultSortDirection ?? SortDirection.Ascending : null);\r\n }, [defaultSortColumn, defaultSortDirection]);\r\n\r\n useDeepCompareEffect(() => {\r\n const newRows = sort();\r\n setSortedRows(newRows);\r\n }, [columns, rows, sortColumnName, sortDirection, pinnedRows]);\r\n\r\n return (\r\n <>\r\n {loading ? (\r\n \r\n ) : (\r\n \r\n \r\n \r\n {columns.map((column) => (\r\n \r\n {column.sortable ? (\r\n \r\n ) : (\r\n !column.hideHeader && (\r\n \r\n {column.header}\r\n \r\n )\r\n )}\r\n \r\n ))}\r\n \r\n \r\n \r\n {sortedRows.map((row, rowIndex) => {\r\n return (\r\n \r\n {columns.map((column, columnIndex) => (\r\n \r\n ))}\r\n \r\n );\r\n })}\r\n \r\n \r\n )}\r\n \r\n );\r\n },\r\n);\r\nDataTable.displayName = 'DataTable';\r\n","import * as React from 'react';\r\n\r\nimport SVGBase from '../svg-base/svg-base';\r\n\r\nexport interface TriangleDownProps {\r\n fill?: string;\r\n title?: string;\r\n height?: string;\r\n width?: string;\r\n viewBox?: string;\r\n}\r\n\r\nconst TriangleDown = ({ fill, title, height, width, ...rest }: TriangleDownProps) => (\r\n \r\n \r\n \r\n);\r\n\r\nexport default TriangleDown;\r\n","import TriangleDown from './triangle-down';\r\n\r\nexport * from './triangle-down';\r\nexport default TriangleDown;\r\n","import * as React from 'react';\r\nimport { useCallback, useEffect, useRef, useState } from 'react';\r\nimport { useImperativeHandle } from 'react';\r\n\r\nimport styled, { ThemeProvider } from 'styled-components';\r\n\r\nimport { useClickOutside } from '../../../ModernScripts/Spotlight/Hooks/useClickOutside';\r\nimport { camelToKebab } from '../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport { COLOR, FONT_SIZE, FONT_STACK, RADIUS, SHADOW, SPACING, THEME } from '../../packages/constants';\r\nimport { SortDown } from '../../packages/icons';\r\nimport TriangleDown from '../../packages/icons/triangle-down';\r\nimport { Button, ButtonAsText, ButtonGroup } from '../button';\r\nimport { CheckboxInput, CheckboxInputProps } from '../checkbox-input';\r\nimport { MultiSelectVariants } from '../multi-select/multi-select';\r\nimport { SearchFilter } from '../search-filter/search-filter';\r\n\r\nexport interface DataItem {\r\n name: string;\r\n id: string;\r\n selected: boolean;\r\n flagColour?: string;\r\n}\r\n\r\nexport interface Category {\r\n categoryName: string;\r\n options: DataItem[];\r\n}\r\n\r\ninterface StyledCheckboxProps extends CheckboxInputProps {\r\n hasMultipleCategories: boolean;\r\n hasModernVariant?: boolean;\r\n}\r\n\r\nexport interface MultiSelectInputButtonProps {\r\n dataId: string;\r\n onClick: React.MouseEventHandler;\r\n}\r\n\r\ntype triggerEl = ({ dataId, onClick }: MultiSelectInputButtonProps) => JSX.Element;\r\n\r\nexport interface MultiSelectInputProps {\r\n dataSet: Category[];\r\n dataId: string;\r\n handleApplyButton: (e?: Category[]) => void;\r\n handleCancelButton: (e?: DataItem[]) => void;\r\n disabled?: boolean;\r\n maxHeight?: string;\r\n maxWidth?: string;\r\n hasFilter?: boolean;\r\n trigger?: triggerEl;\r\n variant: MultiSelectVariants;\r\n}\r\n\r\ninterface DropDownValueProps {\r\n isDropdownOpen: boolean;\r\n disabled?: boolean;\r\n hasLegacyStyles: boolean;\r\n}\r\n\r\nconst DropDownValue = styled.button`\r\n border-radius: ${(props) =>\r\n props.hasLegacyStyles ? 0 : props.isDropdownOpen ? `${RADIUS.DEFAULT} ${RADIUS.DEFAULT} 0 0` : RADIUS.DEFAULT};\r\n border: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n color: ${COLOR.PRIMARY.BLACK};\r\n padding: 6px;\r\n min-width: 120px;\r\n width: 100%;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n font-family: ${FONT_STACK};\r\n font-size: ${(props) => (props.hasLegacyStyles ? '13px' : FONT_SIZE.SMALL)};\r\n line-height: ${(props) => (props.hasLegacyStyles ? '18px' : FONT_SIZE.MEDIUM)};\r\n opacity: ${(props) => (props.disabled ? '0.6' : '1')};\r\n cursor: pointer;\r\n position: relative;\r\n`;\r\n\r\ninterface StyledDropdownProps {\r\n maxWidth?: string;\r\n ref: any;\r\n hasModernVariant?: boolean;\r\n width: string;\r\n}\r\n\r\nconst StyledDropdown = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n border: 1px solid ${COLOR.DROPDOWN.DROPDOWN_BORDER};\r\n border-radius: ${RADIUS.DEFAULT};\r\n box-shadow: ${SHADOW.DEFAULT};\r\n position: absolute;\r\n z-index: 100;\r\n margin-top: ${SPACING.X_SMALL};\r\n max-width: ${(props) => props.maxWidth ?? 'none'};\r\n width: ${(props) => props.width};\r\n`;\r\n\r\nconst StyledCheckbox = styled(CheckboxInput)`\r\n &&& {\r\n align-items: flex-start;\r\n overflow-wrap: anywhere;\r\n }\r\n\r\n span {\r\n margin-top: 1px;\r\n font-size: 13px;\r\n cursor: pointer;\r\n }\r\n\r\n input {\r\n cursor: pointer;\r\n }\r\n`;\r\n\r\nconst OptionCheckbox = styled(StyledCheckbox)`\r\n &&& {\r\n margin-left: ${(props) => (props.hasMultipleCategories ? SPACING.LARGE : 0)};\r\n margin-bottom: 0;\r\n }\r\n`;\r\n\r\nconst AllCheckbox = styled(StyledCheckbox)`\r\n &&& {\r\n margin-top: ${(props) => (props.hasModernVariant ? SPACING.SMALL : SPACING.LARGE)};\r\n margin-bottom: ${(props) =>\r\n props.hasModernVariant ? 0 : props.hasMultipleCategories ? SPACING.SMALL : SPACING.LARGE};\r\n }\r\n\r\n span {\r\n font-weight: ${(props) => (props.hasModernVariant ? 700 : 400)};\r\n }\r\n`;\r\n\r\nconst NotFound = styled.p`\r\n font-size: ${FONT_SIZE.SMALL};\r\n color: ${COLOR.MAIN.FORM_FIELD_DARK};\r\n padding-left: ${SPACING.X_LARGE};\r\n`;\r\n\r\nconst StyledButtonGroup = styled(ButtonGroup)`\r\n padding: ${SPACING.MEDIUM};\r\n background-color: ${COLOR.MAIN.BUTTON_GROUP_BG};\r\n border-top: 1px solid ${COLOR.MAIN.BUTTON_GROUP_BORDER};\r\n border-radius: 0 0 ${RADIUS.DEFAULT} ${RADIUS.DEFAULT};\r\n`;\r\n\r\ninterface CheckboxScrollAreaProps {\r\n maxHeight?: string;\r\n hasModernVariant?: boolean;\r\n}\r\n\r\nconst CheckboxScrollArea = styled.div`\r\n max-height: ${(props) => props.maxHeight};\r\n overflow: auto;\r\n padding: 0 ${(props) => (props.hasModernVariant ? SPACING.SMALL : SPACING.MEDIUM)} ${SPACING.MEDIUM};\r\n`;\r\n\r\nconst CheckboxWrapper = styled.ul``;\r\n\r\nconst StyledDownArrow = styled(SortDown)`\r\n padding: 2px;\r\n align-self: center;\r\n justify-self: flex-end;\r\n pointer-events: none;\r\n`;\r\n\r\ninterface StyledTriangleDownProps {\r\n dropdownOpenState?: boolean;\r\n}\r\n\r\nconst StyledTriangleDown = styled(TriangleDown)`\r\n height: 8px;\r\n width: 8px;\r\n fill: #888;\r\n transform: rotate(${(props) => (props.dropdownOpenState ? '180deg' : 0)})\r\n translateY(${(props) => (props.dropdownOpenState ? '2px' : 0)});\r\n`;\r\n\r\ninterface StyledListItemProps {\r\n flagColour?: string;\r\n hasModernVariant?: boolean;\r\n}\r\n\r\nconst StyledListItem = styled.li`\r\n padding-top: ${SPACING.X_SMALL};\r\n padding-bottom: ${(props) => (props.hasModernVariant ? SPACING.SMALL : SPACING.X_SMALL)};\r\n position: relative;\r\n\r\n ${(props) =>\r\n props.flagColour &&\r\n `&:before {\r\n content: '';\r\n position: absolute;\r\n top: 0px;\r\n bottom: 1px;\r\n left: -12px;\r\n width: 4px;\r\n background: ${props.flagColour};\r\n }`}\r\n`;\r\n\r\ninterface StyledSearchFilterProps {\r\n variant: MultiSelectVariants;\r\n}\r\n\r\nconst StyledSearchFilter = styled(SearchFilter)`\r\n margin: ${(props) => (props.variant === 'modern' ? '10px' : SPACING.X_SMALL)};\r\n`;\r\n\r\ninterface CheckboxProps {\r\n dataId: string;\r\n category: Category;\r\n handleAllCheckboxes: (e?: any) => void;\r\n handleCheckbox: (id: string, categoryName: string) => void;\r\n filterValue: string;\r\n hasMultipleCategories: boolean;\r\n variant: MultiSelectVariants;\r\n}\r\n\r\nconst checkCheckboxState = (category: Category) => {\r\n const parentCheckboxId = `checkbox-all-${camelToKebab(category.categoryName)}`;\r\n const parentCheckboxElement = document.getElementById(parentCheckboxId);\r\n const checkedValues: boolean[] = [];\r\n let count = 0;\r\n\r\n category.options.forEach((item: DataItem) => {\r\n checkedValues.push(item.selected);\r\n if (item.selected) {\r\n count += 1;\r\n }\r\n });\r\n\r\n let firstValue = false;\r\n if (parentCheckboxElement) {\r\n for (let i = 0; checkedValues.length > i; i += 1) {\r\n if (i === 0) {\r\n firstValue = checkedValues[0];\r\n } else {\r\n if (firstValue !== checkedValues[i]) {\r\n // @ts-ignore\r\n parentCheckboxElement.indeterminate = true;\r\n break;\r\n } else if (firstValue && firstValue === checkedValues[i]) {\r\n // @ts-ignore\r\n parentCheckboxElement.indeterminate = false;\r\n } else if (!firstValue && firstValue === checkedValues[i]) {\r\n // @ts-ignore\r\n parentCheckboxElement.indeterminate = false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (parentCheckboxElement) {\r\n // @ts-ignore\r\n parentCheckboxElement.checked = count === checkedValues.length;\r\n }\r\n};\r\n\r\nconst Checkboxes = ({\r\n dataId,\r\n category,\r\n handleAllCheckboxes,\r\n handleCheckbox,\r\n filterValue,\r\n hasMultipleCategories,\r\n variant,\r\n}: CheckboxProps) => {\r\n const filteredList = category.options.filter((item: DataItem) => {\r\n if (filterValue.startsWith(' ')) {\r\n return item.name;\r\n } else {\r\n return item.name.toLowerCase().includes(filterValue.toLowerCase());\r\n }\r\n });\r\n\r\n const hasModernVariant = variant === 'modern';\r\n\r\n useEffect(() => {\r\n checkCheckboxState(category);\r\n }, [category]);\r\n\r\n return (\r\n <>\r\n \r\n handleAllCheckboxes(e)}\r\n thinLabel\r\n inline\r\n hasModernVariant={hasModernVariant}\r\n />\r\n \r\n {filteredList.length > 0 ? (\r\n filteredList\r\n .sort((a: DataItem, b: DataItem) => a.name.trim().localeCompare(b.name.trim()))\r\n .map((item: DataItem) => (\r\n \r\n handleCheckbox(camelToKebab(item.name), category.categoryName)}\r\n checked={item.selected}\r\n hasMultipleCategories={hasMultipleCategories}\r\n thinLabel\r\n inline\r\n />\r\n \r\n ))\r\n ) : (\r\n
  • \r\n No results found.\r\n
  • \r\n )}\r\n \r\n );\r\n};\r\n\r\ninterface DropdownProps {\r\n data: Category[];\r\n dataId: string;\r\n setData: (data: Category[]) => void;\r\n handleApplyButton: () => void;\r\n handleCancelButton: () => void;\r\n hasFilter?: boolean;\r\n maxHeight?: string;\r\n maxWidth?: string;\r\n variant: MultiSelectVariants;\r\n width: string;\r\n}\r\n\r\nconst Dropdown: React.FC> = ({\r\n data,\r\n dataId,\r\n setData,\r\n handleApplyButton,\r\n handleCancelButton,\r\n hasFilter,\r\n maxHeight,\r\n maxWidth,\r\n variant,\r\n width,\r\n}) => {\r\n const [filterValue, setFilterValue] = React.useState('');\r\n const [isDirty, setDirty] = React.useState(false);\r\n\r\n const filterInputRef = useRef(null);\r\n const dropdownRef = useRef();\r\n\r\n useClickOutside(dropdownRef, () => {\r\n switch (variant) {\r\n case 'legacy':\r\n case 'normal':\r\n handleCancelButton();\r\n break;\r\n case 'modern':\r\n handleApplyButton();\r\n }\r\n });\r\n\r\n const handleFilterChange = (e: React.ChangeEvent) => {\r\n setFilterValue(e.target.value);\r\n };\r\n\r\n const handleClearButton = () => {\r\n setFilterValue('');\r\n // @ts-ignore\r\n filterInputRef.current.focus();\r\n };\r\n\r\n const handleCheckbox = (camelToKebabName: string, categoryName: string) => {\r\n const dataCopy = [...data];\r\n\r\n dataCopy.forEach((category: Category, categoryIndex: number) => {\r\n if (category.categoryName === categoryName) {\r\n dataCopy[categoryIndex].options.forEach((item) => {\r\n if (camelToKebab(item.name) === camelToKebabName) {\r\n item.selected = !item.selected;\r\n setData(dataCopy);\r\n setDirty(true);\r\n }\r\n });\r\n checkCheckboxState({ ...category });\r\n }\r\n });\r\n };\r\n\r\n const handleAllCheckboxes = (e: React.ChangeEvent, categoryIndex: number) => {\r\n const dataCopy = [...data];\r\n dataCopy[categoryIndex].options.forEach((item) => {\r\n item.selected = e.target.checked;\r\n });\r\n\r\n setData(dataCopy);\r\n setDirty(true);\r\n };\r\n\r\n useEffect(() => {\r\n function handleKeyListener(e: KeyboardEvent) {\r\n if (e.key === 'Escape') {\r\n if (variant === 'modern') {\r\n handleApplyButton();\r\n } // @ts-ignore\r\n else if (document.activeElement === filterInputRef.current && filterInputRef.current.value.length) {\r\n handleClearButton();\r\n } else {\r\n handleCancelButton();\r\n }\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', handleKeyListener);\r\n\r\n return function cleanupKeyListener() {\r\n document.removeEventListener('keydown', handleKeyListener);\r\n };\r\n }, [handleCancelButton, handleApplyButton, variant]);\r\n\r\n return (\r\n \r\n {hasFilter && (\r\n handleFilterChange(e)}\r\n handleClearButton={handleClearButton}\r\n searchTerm={filterValue}\r\n assistAccess={false}\r\n data-test-id={`${dataId}-multi-select__filter`}\r\n hasClearButton={variant !== 'modern'}\r\n hasSearchIcon={variant === 'modern'}\r\n variant={variant}\r\n />\r\n )}\r\n \r\n {data &&\r\n data.map((category: Category, index: number) => (\r\n \r\n handleAllCheckboxes(e, index)}\r\n handleCheckbox={handleCheckbox}\r\n filterValue={filterValue}\r\n hasMultipleCategories={data?.length > 1}\r\n variant={variant}\r\n />\r\n \r\n ))}\r\n \r\n {variant !== 'modern' && (\r\n \r\n \r\n handleCancelButton()}\r\n >\r\n Cancel\r\n \r\n \r\n handleApplyButton()}\r\n disabled={!isDirty}\r\n >\r\n Apply\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst defaultFilterString = 'No filter';\r\n\r\nexport const MultiSelectInput = React.forwardRef(\r\n (\r\n {\r\n dataSet,\r\n dataId,\r\n disabled,\r\n handleApplyButton,\r\n handleCancelButton,\r\n hasFilter = true,\r\n maxHeight = '240px',\r\n maxWidth,\r\n trigger,\r\n variant,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [data, setData] = useState(dataSet);\r\n const [dropdownOpenState, setDropDownOpenState] = useState(false);\r\n const [dropdownValue, setDropdownValue] = useState(defaultFilterString);\r\n const [containerWidth, setContainerWidth] = useState(0);\r\n const hasLegacyStyles = variant === 'legacy';\r\n\r\n const containerRef = useRef(null);\r\n useImperativeHandle(ref, () => containerRef.current);\r\n\r\n const handleDropdownToggle = () => {\r\n setDropDownOpenState(!dropdownOpenState);\r\n };\r\n\r\n const applyButton = () => {\r\n handleApplyButton(data);\r\n setDropDownOpenState(false);\r\n };\r\n\r\n const cancelButton = useCallback(() => {\r\n const temp = () => handleCancelButton();\r\n // @ts-ignore\r\n setData(temp);\r\n setDropDownOpenState(false);\r\n }, [handleCancelButton]);\r\n\r\n const Trigger = (props: MultiSelectInputButtonProps) => {\r\n if (!trigger) {\r\n return null;\r\n }\r\n\r\n return trigger(props);\r\n };\r\n\r\n useEffect(() => {\r\n setData(dataSet);\r\n }, [dataSet]);\r\n\r\n useEffect(() => {\r\n if (!data) {\r\n return;\r\n }\r\n\r\n const items = data.flatMap((category) => category.options);\r\n const totalItemCount = items.length;\r\n const selectedItemCount = items.filter((item) => item.selected).length;\r\n\r\n const buttonText =\r\n selectedItemCount === 0\r\n ? defaultFilterString\r\n : `${selectedItemCount} of ${totalItemCount} item${totalItemCount === 1 ? '' : 's'}`;\r\n\r\n setDropdownValue(buttonText);\r\n }, [data]);\r\n\r\n const updateContainerWidth = () => {\r\n const newWidth = containerRef?.current?.children[0].clientWidth;\r\n setContainerWidth(newWidth ?? 0);\r\n };\r\n\r\n useEffect(() => {\r\n updateContainerWidth();\r\n\r\n window.addEventListener('resize', updateContainerWidth);\r\n\r\n return () => {\r\n window.removeEventListener('resize', updateContainerWidth);\r\n };\r\n }, []);\r\n\r\n return (\r\n
    \r\n {trigger && (\r\n handleDropdownToggle()}\r\n />\r\n )}\r\n {!trigger && (\r\n \r\n {dropdownValue}{' '}\r\n {hasLegacyStyles ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n )}\r\n {dropdownOpenState && (\r\n \r\n )}\r\n
    \r\n );\r\n },\r\n);\r\nMultiSelectInput.displayName = 'MultiSelectInput';\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, FONT_STACK, SPACING } from '../../packages/constants';\r\nimport { MultiSelectInput } from '../multi-select-input';\r\n\r\nexport type MultiSelectVariants = 'legacy' | 'normal' | 'modern';\r\n\r\ninterface DataItem {\r\n name: string;\r\n id: string;\r\n selected: boolean;\r\n}\r\n\r\ninterface Category {\r\n categoryName: string;\r\n options: DataItem[];\r\n}\r\n\r\nexport interface MultiSelectProps {\r\n dataSet: Category[];\r\n dataId: string;\r\n handleApplyButton: (e?: Category[]) => void;\r\n handleCancelButton: (e?: DataItem[]) => void;\r\n label: string;\r\n disabled?: boolean;\r\n thinLabel?: boolean;\r\n maxHeight?: string;\r\n maxWidth?: string;\r\n hasFilter?: boolean;\r\n variant?: MultiSelectVariants;\r\n}\r\n\r\nconst StyledMultiSelect = styled.div``;\r\n\r\ninterface StyledLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n thinLabel?: boolean;\r\n hasLegacyStyles?: boolean;\r\n}\r\n\r\nconst StyledLabel = styled.label`\r\n padding-bottom: ${(props) => (props.hasLegacyStyles ? 0 : SPACING.XX_SMALL)};\r\n font-family: ${FONT_STACK};\r\n font-size: ${(props) => (props.hasLegacyStyles ? FONT_SIZE.X_SMALL : FONT_SIZE.SMALL)};\r\n font-weight: ${(props) => (props.thinLabel ? '400' : '700')};\r\n line-height: ${(props) => (props.hasLegacyStyles ? 'normal' : FONT_SIZE.MEDIUM)};\r\n margin-bottom: ${(props) => (props.hasLegacyStyles ? '8px' : 0)};\r\n display: block;\r\n color: ${(props) =>\r\n props.invalid ? COLOR.PRIMARY.RED : props.hasLegacyStyles ? COLOR.PRIMARY.BLACK : COLOR.MAIN.LABEL_TEXT};\r\n opacity: ${(props) => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nexport const MultiSelect = React.forwardRef(\r\n (\r\n {\r\n dataSet,\r\n dataId,\r\n label,\r\n disabled,\r\n handleApplyButton,\r\n handleCancelButton,\r\n hasFilter = true,\r\n maxHeight = '240px',\r\n maxWidth,\r\n thinLabel,\r\n variant = 'normal',\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const hasLegacyStyles = variant === 'legacy';\r\n\r\n return (\r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n );\r\n },\r\n);\r\nMultiSelect.displayName = 'MultiSelect';\r\n","import * as React from 'react';\r\nimport { useState, useEffect, useRef, useImperativeHandle } from 'react';\r\n\r\nimport dayjs from 'dayjs';\r\nimport { darken, lighten, transparentize } from 'polished';\r\nimport styled, { css } from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, FONT_STACK, RADIUS, SHADOW } from '../../packages/constants';\r\nimport { ChevronLeft, ChevronRight, SortDown } from '../../packages/icons';\r\nimport { ButtonAsText } from '../button';\r\nimport { Overlay } from '../modal';\r\n\r\n/**\r\n * Month Date Picker Calendar\r\n */\r\nexport interface MonthDatePickerCalendarProps {\r\n year?: number | null;\r\n monthIndex?: number | null;\r\n dispatch: any;\r\n dataId: string;\r\n mode: 'absolute' | 'fixed';\r\n left?: number;\r\n top?: number;\r\n}\r\n\r\ninterface StyledMonthDatePickerCalendarProps {\r\n mode: 'absolute' | 'fixed';\r\n left?: number;\r\n top?: number;\r\n}\r\n\r\nconst calendarHeight = 194;\r\nconst calendarPadding = 6;\r\nconst calendarMargin = 6;\r\n\r\nconst StyledMonthDatePickerCalendar = styled.div`\r\n ${(props) => props.mode && `position: ${props.mode};`}\r\n ${(props) => props.left && `left: ${props.left}px;`}\r\n ${(props) => props.top && `top: ${props.top}px;`}\r\n z-index: 100;\r\n box-sizing: border-box;\r\n margin-top: ${calendarMargin}px;\r\n margin-bottom: ${calendarMargin}px;\r\n border: 1px solid ${COLOR.DROPDOWN.DROPDOWN_BORDER};\r\n padding: ${calendarPadding}px;\r\n width: 280px;\r\n height: ${calendarHeight}px;\r\n border-radius: ${RADIUS.DEFAULT};\r\n background: #fff;\r\n box-shadow: ${SHADOW.DEFAULT};\r\n font-family: ${FONT_STACK};\r\n`;\r\n\r\nconst Cell = styled.li`\r\n box-sizing: border-box;\r\n display: inline-block;\r\n width: 25%;\r\n padding: 10px;\r\n border-radius: 100%;\r\n color: ${COLOR.DROPDOWN.DROPDOWN_OPTION_TEXT};\r\n`;\r\n\r\ninterface CellButtonProps {\r\n isSelected?: boolean;\r\n isGrey?: boolean;\r\n}\r\n\r\nconst CellButton = styled.button`\r\n background: none;\r\n border: none;\r\n display: block;\r\n margin: 0 auto;\r\n border-radius: 15px;\r\n padding: 6px 10px;\r\n cursor: pointer;\r\n font-family: ${FONT_STACK};\r\n ${(props) =>\r\n props.isGrey &&\r\n css`\r\n color: #b7c3d6;\r\n `};\r\n &:hover {\r\n background: ${COLOR.DROPDOWN.DROPDOWN_OPTION_HOVER};\r\n }\r\n ${(props) =>\r\n props.isSelected &&\r\n css`\r\n color: #fff;\r\n background: ${COLOR.DROPDOWN.DROPDOWN_OPTION_SELECTED};\r\n &:hover {\r\n background: ${COLOR.DROPDOWN.DROPDOWN_OPTION_SELECTED};\r\n }\r\n `};\r\n`;\r\n\r\nconst NavButton = styled.button`\r\n background: none;\r\n border: none;\r\n border-radius: 100%;\r\n height: 30px;\r\n width: 30px;\r\n display: inline-block;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n background: ${COLOR.DROPDOWN.DROPDOWN_OPTION_HOVER};\r\n }\r\n &:active {\r\n background: ${darken('0.1', COLOR.DROPDOWN.DROPDOWN_OPTION_HOVER)};\r\n }\r\n`;\r\n\r\nconst PrevButton = styled(NavButton)``;\r\n\r\nconst NextButton = styled(NavButton)``;\r\n\r\nconst StyledChevronLeft = styled(ChevronLeft)`\r\n margin: 0 auto;\r\n`;\r\n\r\nconst StyledChevronRight = styled(ChevronRight)`\r\n margin: 0 auto;\r\n`;\r\n\r\nconst YearButton = styled(ButtonAsText)`\r\n display: inline-block;\r\n margin: 0 auto;\r\n position: relative;\r\n top: 1px;\r\n align-self: center;\r\n font-weight: 400;\r\n cursor: pointer;\r\n`;\r\n\r\nconst YearRangeHeading = styled.span`\r\n margin: 0 auto;\r\n font-family: ${FONT_STACK};\r\n font-size: ${FONT_SIZE.SMALL};\r\n align-self: center;\r\n`;\r\n\r\nconst CalendarHeader = styled.div`\r\n display: flex;\r\n`;\r\n\r\nconst MonthsList = styled.ol`\r\n display: block;\r\n`;\r\n\r\nconst YearsList = styled(MonthsList)``;\r\n\r\nenum ViewModes {\r\n Month = 'MONTH',\r\n Year = 'YEAR',\r\n}\r\n\r\nconst Years = ({\r\n decadeStart,\r\n clickedYear,\r\n selectedYear,\r\n dataId,\r\n}: {\r\n decadeStart: number;\r\n clickedYear: any;\r\n selectedYear: number | null;\r\n dataId: string;\r\n}) => {\r\n /**\r\n * should be the decade for the year user has navigated to\r\n * e.g. 2020-2029, then have a year either side\r\n */\r\n const yearOptions = (() => {\r\n const arr = [];\r\n for (let i = -1; i < 11; i++) {\r\n arr.push(decadeStart + i);\r\n }\r\n return arr;\r\n })();\r\n const decadeEnd = decadeStart + 9;\r\n\r\n return (\r\n \r\n {yearOptions.map((item) => {\r\n const isSelected = typeof selectedYear === 'number' && item === selectedYear;\r\n return (\r\n \r\n clickedYear(item)}\r\n isGrey={item < decadeStart || item > decadeEnd}\r\n isSelected={isSelected}\r\n data-test-id={`${dataId}__years__button-year-${item}`}\r\n data-selected={isSelected}\r\n type=\"button\"\r\n >\r\n {item}\r\n \r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst Months = ({\r\n clickedMonth,\r\n selectedMonth,\r\n isSelectedYear,\r\n dataId,\r\n}: {\r\n clickedMonth: any;\r\n selectedMonth: number | null;\r\n isSelectedYear: boolean;\r\n dataId: string;\r\n}) => {\r\n const monthOptions = [];\r\n\r\n for (let i = 0; i < 12; i++) {\r\n monthOptions.push(dayjs().month(i).format('MMM'));\r\n }\r\n\r\n return (\r\n \r\n {monthOptions.map((monthName, i) => {\r\n const isSelected = typeof selectedMonth === 'number' && i === selectedMonth && isSelectedYear;\r\n return (\r\n \r\n clickedMonth(i)}\r\n isSelected={isSelected}\r\n data-test-id={`${dataId}__months__button-month-${i}`}\r\n data-selected={isSelected}\r\n type=\"button\"\r\n >\r\n {monthName}\r\n \r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst endash = '\\u2013';\r\n\r\nexport const MonthDatePickerCalendar = React.forwardRef(\r\n ({ year = null, monthIndex = null, dispatch, dataId, ...props }, ref) => {\r\n /**\r\n * The values\r\n */\r\n const [selectedYear, setSelectedYear] = useState(year);\r\n const [selectedMonth, setSelectedMonth] = useState(monthIndex);\r\n /**\r\n * Navigation\r\n */\r\n const [navYear, setNavYear] = useState(selectedYear || dayjs().year());\r\n const [navDecadeStart, setNavDecadeStart] = useState(Math.floor(navYear / 10) * 10);\r\n const [viewMode, setViewMode] = useState(ViewModes.Month);\r\n\r\n const clickedYear = (year: number) => {\r\n setNavYear(year);\r\n setNavDecadeStart(Math.floor(year / 10) * 10);\r\n setSelectedMonth(null); // clear the month when a year is chosen\r\n setViewMode(ViewModes.Month);\r\n };\r\n\r\n const clickedMonth = (monthIndex: number) => {\r\n setSelectedMonth(monthIndex);\r\n setSelectedYear(navYear);\r\n dispatch({ type: 'SELECTED_MONTH', data: { monthIndex, year: navYear } });\r\n };\r\n\r\n const clickedPrev = () => {\r\n const newYear = (() => {\r\n if (viewMode === ViewModes.Year) {\r\n return navYear - 10;\r\n }\r\n return navYear - 1;\r\n })();\r\n\r\n setNavDecadeStart(Math.floor(newYear / 10) * 10);\r\n setNavYear(newYear);\r\n };\r\n\r\n const clickedNext = () => {\r\n const newYear = (() => {\r\n if (viewMode === ViewModes.Year) {\r\n return navYear + 10;\r\n }\r\n return navYear + 1;\r\n })();\r\n\r\n setNavDecadeStart(Math.floor(newYear / 10) * 10);\r\n setNavYear(newYear);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {viewMode === ViewModes.Month && (\r\n setViewMode(ViewModes.Year)}\r\n size={FONT_SIZE.SMALL}\r\n type=\"button\"\r\n >\r\n {navYear}\r\n \r\n )}\r\n {viewMode === ViewModes.Year && (\r\n {`${navDecadeStart} ${endash} ${\r\n navDecadeStart + 9\r\n }`}\r\n )}\r\n \r\n \r\n \r\n \r\n {viewMode === ViewModes.Month && (\r\n \r\n )}\r\n {viewMode === ViewModes.Year && (\r\n \r\n )}\r\n \r\n );\r\n },\r\n);\r\nMonthDatePickerCalendar.displayName = 'MonthDatePickerCalendar';\r\n\r\n/**\r\n * Month Date Picker\r\n */\r\n\r\nexport interface MonthDatePickerProps {\r\n value?: string;\r\n dataId: string;\r\n onChange?: ({ year, monthIndex }: { year: number; monthIndex: number }) => void;\r\n /**\r\n * Is it disabled?\r\n */\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n id?: string;\r\n /**\r\n * placeholder text to display when there is no value\r\n */\r\n placeholder?: string;\r\n initialYearView?: number;\r\n className?: string;\r\n name?: string;\r\n position?: 'fixed' | 'absolute';\r\n ariaLabel?: string;\r\n}\r\ninterface MonthDatePickerState {\r\n year: number;\r\n monthIndex: number;\r\n isOpen: boolean;\r\n initialYearView?: number;\r\n left?: number;\r\n top?: number;\r\n}\r\n\r\ninterface DatePickerButton {\r\n isOpen: boolean;\r\n invalid?: boolean;\r\n}\r\n\r\nconst StyledDatePickerButton = styled.button`\r\n position: relative;\r\n z-index: ${(props) => (props.isOpen ? 100 : 1)};\r\n border: 1px solid;\r\n border-color: ${(props) => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD)};\r\n border-radius: ${RADIUS.FORM_FIELD};\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n color: ${COLOR.PRIMARY.BLACK};\r\n width: 140px;\r\n height: 30px;\r\n cursor: pointer;\r\n padding: 8px;\r\n min-width: 120px;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n\r\n :disabled {\r\n background-color: ${darken('0.1', COLOR.PRIMARY.WHITE)};\r\n color: ${transparentize('0.5', COLOR.PRIMARY.BLACK)};\r\n }\r\n`;\r\n\r\nconst StyledPlaceholderText = styled.span`\r\n color: ${lighten('0.2', COLOR.MAIN.FORM_FIELD_DARK)};\r\n`;\r\n\r\nconst StyledDatePickerWrapper = styled.div``;\r\n\r\nconst StyledOverlay = styled(Overlay)`\r\n background-color: transparent;\r\n z-index: 90;\r\n`;\r\n\r\nconst MonthDatePickerReducer = (state: MonthDatePickerState, action: any) => {\r\n switch (action.type) {\r\n case 'OPEN':\r\n return {\r\n ...state,\r\n left: action.data.left,\r\n top: action.data.top,\r\n isOpen: true,\r\n };\r\n case 'CLOSE':\r\n return {\r\n ...state,\r\n isOpen: false,\r\n };\r\n case 'SELECTED_MONTH':\r\n return {\r\n ...state,\r\n monthIndex: action.data.monthIndex,\r\n year: action.data.year,\r\n isOpen: false,\r\n };\r\n case 'UPDATE_DATE':\r\n return {\r\n ...state,\r\n monthIndex: action.data.monthIndex,\r\n year: action.data.year,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\ninterface UseEscapeListenerFn {\r\n onEsc: () => void;\r\n}\r\n\r\nconst useEscapeListener = ({ onEsc }: UseEscapeListenerFn) => {\r\n useEffect(() => {\r\n function handleKeyListener(e: KeyboardEvent) {\r\n if (e.key === 'Escape') {\r\n onEsc();\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', handleKeyListener);\r\n\r\n return function cleanupKeyListener() {\r\n document.removeEventListener('keydown', handleKeyListener);\r\n };\r\n }, [onEsc]);\r\n};\r\n\r\nexport const MonthDatePicker = React.forwardRef(\r\n (\r\n {\r\n value = '',\r\n dataId,\r\n name,\r\n onChange,\r\n placeholder = 'Select date',\r\n initialYearView,\r\n disabled,\r\n invalid,\r\n position = 'absolute',\r\n ariaLabel,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [state, dispatch] = React.useReducer(MonthDatePickerReducer, {\r\n monthIndex: value ? dayjs(value).month() : undefined,\r\n year: value ? dayjs(value).year() : undefined,\r\n initialYearView: initialYearView,\r\n isOpen: false,\r\n left: undefined,\r\n top: undefined,\r\n });\r\n const { year, monthIndex } = state;\r\n\r\n const calendarRef = useRef(null);\r\n const buttonRef = useRef(null);\r\n useImperativeHandle(ref, () => buttonRef.current);\r\n\r\n const open = (left?: number, top?: number) => {\r\n dispatch({ type: 'OPEN', data: { left: left, top: top } });\r\n };\r\n\r\n const close = () => {\r\n buttonRef?.current?.focus();\r\n\r\n dispatch({ type: 'CLOSE' });\r\n };\r\n\r\n const onEsc = () => {\r\n close();\r\n };\r\n\r\n useEffect(() => {\r\n if (position === 'fixed') {\r\n window.addEventListener('resize', close);\r\n\r\n return function cleanupEventListeners() {\r\n window.removeEventListener('resize', close);\r\n };\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n /* when the value prop changes, update the state by dispatching an action */\r\n // ensure there is a value and that the value has both a year and month, otherwise clear the dates\r\n const dateRegex = new RegExp(/^\\d*[-|/]\\d/);\r\n if (!value || !value.match(dateRegex)) {\r\n dispatch({ type: 'UPDATE_DATE', data: { year: undefined, monthIndex: undefined } });\r\n return;\r\n }\r\n const date = dayjs(value);\r\n const year = date.year();\r\n const month = date.month();\r\n dispatch({ type: 'UPDATE_DATE', data: { year: year, monthIndex: month } });\r\n }, [value]);\r\n\r\n useEffect(() => {\r\n if (typeof onChange === 'function') {\r\n onChange({ year: state.year, monthIndex: state.monthIndex });\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [state.year, state.monthIndex]);\r\n\r\n useEscapeListener({ onEsc });\r\n\r\n const getCalendarPosition = (): { left: number | undefined; top: number | undefined } => {\r\n let left: number | undefined;\r\n let top: number | undefined;\r\n\r\n // Only get position if the calendar is fixed\r\n if (position === 'fixed' && buttonRef?.current) {\r\n const buttonBounds = buttonRef.current.getBoundingClientRect();\r\n\r\n const calendarOuterHeight = calendarHeight + calendarPadding + calendarMargin;\r\n const calendarFitsBelow = buttonBounds.bottom + calendarOuterHeight < window.innerHeight;\r\n const calendarFitsAbove = buttonBounds.top - calendarOuterHeight > 0;\r\n\r\n // If calendar fits above but not below button, put it above.\r\n if (!calendarFitsBelow && calendarFitsAbove) {\r\n top = buttonBounds.top - calendarOuterHeight;\r\n }\r\n // By default, put the calendar below\r\n else {\r\n top = buttonBounds.bottom;\r\n }\r\n\r\n left = buttonBounds.left;\r\n }\r\n\r\n return {\r\n left: left,\r\n top: top,\r\n };\r\n };\r\n\r\n const toggle = () => {\r\n if (state.isOpen) {\r\n close();\r\n } else {\r\n const calendarPosition = getCalendarPosition();\r\n open(calendarPosition.left, calendarPosition.top);\r\n }\r\n };\r\n\r\n const buttonText = (() => {\r\n if (typeof monthIndex === 'number' && typeof year === 'number') {\r\n const monthName = dayjs().set('month', monthIndex).format('MMM');\r\n return `${monthName} ${endash} ${year}`;\r\n }\r\n return {placeholder};\r\n })();\r\n\r\n return (\r\n \r\n \r\n \r\n {buttonText} \r\n \r\n {state.isOpen && (\r\n <>\r\n dispatch({ type: 'CLOSE' })}\r\n data-test-id={`${dataId}__overlay`}\r\n />\r\n \r\n \r\n )}\r\n \r\n );\r\n },\r\n);\r\n\r\nMonthDatePicker.displayName = 'MonthDatePicker';\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { SPACING, FONT_SIZE, COLOR } from '../../packages/constants';\r\nimport { MonthDatePicker, MonthDatePickerProps } from '../month-date-picker';\r\n\r\nexport interface MonthDatePickerFieldProps extends MonthDatePickerProps {\r\n label: string;\r\n validationMessage?: string;\r\n thinLabel?: boolean;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n thinLabel?: boolean;\r\n}\r\n\r\ninterface StyledValidationMessageProps {\r\n invalid?: boolean;\r\n}\r\n\r\nconst StyledTextLabel = styled.label`\r\n display: inline-block;\r\n padding-bottom: ${SPACING.XX_SMALL};\r\n margin-right: ${SPACING.X_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledValidationMessage = styled.div`\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n line-height: ${FONT_SIZE.SMALL};\r\n color: ${(props: StyledValidationMessageProps): string =>\r\n props.invalid ? COLOR.PRIMARY.RED : COLOR.PRIMARY.BLACK};\r\n padding-top: ${SPACING.SMALL};\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n`;\r\n\r\nexport const MonthDatePickerField = React.forwardRef(\r\n ({ disabled, invalid, label, validationMessage, thinLabel, ariaLabel, ...props }, ref) => {\r\n return (\r\n <>\r\n \r\n {label}\r\n \r\n \r\n {validationMessage && (\r\n {validationMessage}\r\n )}\r\n \r\n );\r\n },\r\n);\r\nMonthDatePickerField.displayName = 'MonthDatePickerField';\r\n","import React from 'react';\r\n\r\nimport { darken, transparentize } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, RADIUS, SPACING } from '../../packages/constants';\r\n\r\nexport interface AutoCompleteTextInputProps {\r\n name: string;\r\n textOnChange: (value: string) => void;\r\n dropdownOnChange: (value: string, command: DropDownAction) => void;\r\n defaultItems?: string[];\r\n textValue?: string;\r\n defaultPlaceholder?: string;\r\n ariaLabel?: string;\r\n dataId?: string;\r\n fontSize?: number;\r\n lineHeight?: number;\r\n invalid?: boolean;\r\n disabled?: boolean;\r\n required?: boolean;\r\n}\r\n\r\nexport enum DropDownAction {\r\n Insert = 'INSERT',\r\n Remove = 'REMOVE',\r\n}\r\n\r\ninterface KeyboardEvent {\r\n key: string;\r\n}\r\n\r\ninterface TextBoxProps {\r\n invalid?: boolean;\r\n disabled?: boolean;\r\n name?: string;\r\n fontSize?: number;\r\n lineHeight?: number;\r\n}\r\n\r\nconst TextBox = styled.input`\r\n background-color: ${(props: TextBoxProps): string =>\r\n props.disabled ? darken('0.1', COLOR.PRIMARY.WHITE) : COLOR.PRIMARY.WHITE};\r\n color: ${(props: TextBoxProps): string =>\r\n props.disabled ? transparentize('0.5', COLOR.PRIMARY.BLACK) : COLOR.PRIMARY.BLACK};\r\n font-size: ${(props: TextBoxProps): string => (props.fontSize ? `${props.fontSize}px` : FONT_SIZE.SMALL)};\r\n line-height: ${(props: TextBoxProps): string => (props.lineHeight ? `${props.lineHeight}px` : FONT_SIZE.MEDIUM)};\r\n padding: ${SPACING.SMALL};\r\n border-width: 1px;\r\n border-style: solid;\r\n border-color: ${(props: TextBoxProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD)};\r\n border-radius: ${RADIUS.DEFAULT};\r\n\r\n &::placeholder {\r\n opacity: 0.65;\r\n }\r\n`;\r\n\r\nconst WrapperRef = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n\r\n button {\r\n padding: 7px 20px;\r\n margin: 0 auto auto 10px;\r\n }\r\n`;\r\n\r\nconst OptionWrapper = styled.div`\r\n position: relative;\r\n`;\r\n\r\nconst ControlWrapper = styled.div`\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n`;\r\n\r\nconst StyledOption = styled.span`\r\n font-size: ${(props: TextBoxProps): string => (props.fontSize ? `${props.fontSize}px` : FONT_SIZE.SMALL)};\r\n line-height: ${(props: TextBoxProps): string => (props.lineHeight ? `${props.lineHeight}px` : FONT_SIZE.MEDIUM)};\r\n background-color: ${(props: TextBoxProps): string =>\r\n props.disabled ? darken('0.1', COLOR.PRIMARY.WHITE) : COLOR.PRIMARY.WHITE};\r\n color: ${(props: TextBoxProps): string =>\r\n props.disabled ? transparentize('0.5', COLOR.PRIMARY.BLACK) : COLOR.PRIMARY.BLACK};\r\n padding: ${SPACING.SMALL};\r\n border-color: ${(props: TextBoxProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD)};\r\n border-radius: ${RADIUS.DEFAULT};\r\n border-left: 1px solid\r\n ${(props: TextBoxProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD)};\r\n border-right: 1px solid\r\n ${(props: TextBoxProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD)};\r\n\r\n &:last-of-type {\r\n border-bottom: 1px solid\r\n ${(props: TextBoxProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD)};\r\n }\r\n &:hover,\r\n &:focus {\r\n background-color: ${COLOR.DROPDOWN.DROPDOWN_OPTION_HOVER};\r\n outline: none;\r\n }\r\n`;\r\n\r\nexport const AutoCompleteTextInput = React.forwardRef(\r\n (\r\n {\r\n defaultItems = [],\r\n defaultPlaceholder = 'Please enter a value',\r\n ariaLabel = 'Autocomplete input',\r\n textValue = '',\r\n textOnChange,\r\n dropdownOnChange,\r\n dataId,\r\n disabled,\r\n invalid,\r\n name,\r\n required,\r\n fontSize,\r\n lineHeight,\r\n },\r\n ref,\r\n ) => {\r\n const [displayDropdownList, setDisplayDropdownList] = React.useState(false);\r\n const [placeholder, setPlaceholder] = React.useState(defaultPlaceholder);\r\n const [selectedIndex, setSelectedIndex] = React.useState(-1);\r\n const wrapperRef = React.useRef(null);\r\n const selectRef = React.useRef(null);\r\n\r\n const maxListLength = 2;\r\n const filteredList = defaultItems.filter((item: string) =>\r\n textValue ? item.toLowerCase().includes(textValue.toLowerCase()) : true,\r\n );\r\n const limitedFilteredList = filteredList.slice(0, 3);\r\n\r\n React.useEffect(() => {\r\n document.addEventListener('mousedown', hideList);\r\n\r\n return () => {\r\n document.removeEventListener('mousedown', hideList);\r\n };\r\n });\r\n\r\n React.useEffect(() => {\r\n if (!selectRef.current) return;\r\n\r\n selectRef.current.focus();\r\n }, [selectedIndex]);\r\n\r\n const removeWhiteSpace = (id: string) => {\r\n return id.trim();\r\n };\r\n\r\n const hideList = (e: { target: any }) => {\r\n const { current: wrap } = wrapperRef;\r\n if (wrap && !wrap.contains(e.target)) {\r\n setDisplayDropdownList(false);\r\n setPlaceholder(defaultPlaceholder);\r\n setSelectedIndex(-1);\r\n }\r\n };\r\n\r\n const search = (value: string) => {\r\n textOnChange(value);\r\n setDisplayDropdownList(true);\r\n };\r\n\r\n const selectNext = (e: any) => {\r\n e.preventDefault();\r\n const isLastOrUnselected =\r\n selectedIndex === limitedFilteredList.length - 1 ||\r\n selectedIndex === maxListLength ||\r\n selectedIndex === -1;\r\n const newIndex = isLastOrUnselected ? 0 : selectedIndex + 1;\r\n setSelectedIndex(newIndex);\r\n };\r\n\r\n const selectPrevious = (e: any) => {\r\n e.preventDefault();\r\n const isFirstOrUnselected = selectedIndex === 0 || selectedIndex === -1;\r\n const lastItemIndex = Math.min(limitedFilteredList.length - 1, maxListLength); // Not always showing all 3 items\r\n const newIndex = isFirstOrUnselected ? lastItemIndex : selectedIndex - 1;\r\n setSelectedIndex(newIndex);\r\n };\r\n\r\n const appendValue = (value: string) => {\r\n value = removeWhiteSpace(value);\r\n const getId = defaultItems.indexOf(value);\r\n if (getId !== -1) {\r\n // element exists, we need to remove it and move it to the start of the array\r\n defaultItems.splice(getId, 1);\r\n }\r\n if (value !== '' && value !== defaultPlaceholder) {\r\n dropdownOnChange(value, DropDownAction.Insert);\r\n }\r\n };\r\n\r\n const dropdownListKeyHandler = (event: any, item: string) => {\r\n const itemIndex = defaultItems.indexOf(item);\r\n\r\n if (event.shiftKey && event.key === 'Delete') {\r\n if (itemIndex !== -1) {\r\n dropdownOnChange(defaultItems[itemIndex], DropDownAction.Remove);\r\n setPlaceholder(limitedFilteredList[selectedIndex]);\r\n if (filteredList.length - 1 <= selectedIndex) {\r\n setSelectedIndex(selectedIndex - 1);\r\n }\r\n // If the array only one has item, and we just removed it\r\n if (defaultItems.length === 0 && itemIndex !== -1) {\r\n setPlaceholder(defaultPlaceholder);\r\n setSelectedIndex(-1); // List is empty\r\n }\r\n }\r\n }\r\n };\r\n\r\n const wrapperKeyHandler = (event: KeyboardEvent) => {\r\n switch (event.key) {\r\n case 'ArrowUp':\r\n selectPrevious(event);\r\n break;\r\n\r\n case 'ArrowDown':\r\n selectNext(event);\r\n break;\r\n\r\n case 'Enter':\r\n displayDropdownList\r\n ? selectRef.current\r\n ? selectValue(placeholder)\r\n : appendValue(textValue)\r\n : setDisplayDropdownList(true);\r\n displayDropdownList ? (placeholder == defaultPlaceholder ? setDisplayDropdownList(false) : '') : '';\r\n break;\r\n\r\n case 'Tab':\r\n displayDropdownList ? '' : setDisplayDropdownList(true);\r\n break;\r\n\r\n case 'Escape':\r\n displayDropdownList ? (setDisplayDropdownList(false), setPlaceholder(defaultPlaceholder)) : '';\r\n break;\r\n }\r\n };\r\n\r\n const selectValue = (value: string) => {\r\n if (value !== defaultPlaceholder) {\r\n textOnChange(removeWhiteSpace(value));\r\n }\r\n setDisplayDropdownList(false);\r\n setPlaceholder(defaultPlaceholder);\r\n appendValue(value);\r\n setSelectedIndex(-1);\r\n };\r\n\r\n return (\r\n \r\n \r\n setDisplayDropdownList(defaultItems.length !== 0 && !displayDropdownList)}\r\n onChange={(e: { target: { value: any } }) => search(e.target.value)}\r\n value={textValue}\r\n autoComplete={'off'}\r\n aria-label={ariaLabel}\r\n fontSize={fontSize}\r\n lineHeight={lineHeight}\r\n disabled={disabled}\r\n invalid={invalid}\r\n name={name}\r\n required={required}\r\n />\r\n \r\n \r\n {displayDropdownList\r\n ? limitedFilteredList.map((item: string, index: any) => (\r\n ''}\r\n key={index}\r\n data-index={index}\r\n onClick={() => {\r\n !disabled ? selectValue(item) : setPlaceholder(defaultPlaceholder);\r\n }}\r\n onMouseOver={() => {\r\n !disabled\r\n ? (setSelectedIndex(index), setPlaceholder(removeWhiteSpace(item)))\r\n : setPlaceholder(defaultPlaceholder);\r\n }}\r\n onMouseOut={() => {\r\n setPlaceholder(defaultPlaceholder);\r\n setSelectedIndex(-1);\r\n }}\r\n onKeyDown={(e: any) => dropdownListKeyHandler(e, item)}\r\n tabIndex={0}\r\n onFocus={() => {\r\n !disabled\r\n ? (setSelectedIndex(index), setPlaceholder(removeWhiteSpace(item)))\r\n : setPlaceholder(defaultPlaceholder);\r\n }}\r\n disabled={disabled}\r\n invalid={invalid}\r\n name={name}\r\n fontSize={fontSize}\r\n lineHeight={lineHeight}\r\n >\r\n {removeWhiteSpace(item)}\r\n \r\n ))\r\n : ''}\r\n \r\n \r\n \r\n \r\n );\r\n },\r\n);\r\n\r\nAutoCompleteTextInput.displayName = 'AutoCompleteTextInput';\r\n","import React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, Theme } from '../../packages/constants';\r\nimport { AutoCompleteTextInput, DropDownAction } from '../AutoCompleteTextInput';\r\nimport { Button } from '../button';\r\n\r\nexport interface AutoCompleteTextFieldProps {\r\n name: string;\r\n dropdownOnChange: (value: string, command: DropDownAction) => void;\r\n defaultItems?: string[];\r\n defaultPlaceholder?: string;\r\n ariaLabel?: string;\r\n buttonName?: string;\r\n dataId?: string;\r\n theme?: Theme;\r\n label?: string;\r\n thinLabel?: boolean;\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n required?: boolean;\r\n lineHeight?: number;\r\n fontSize?: number;\r\n disabledButtonHandler?: (value: string) => boolean;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n thinLabel?: boolean;\r\n lineHeight?: number;\r\n fontSize?: number;\r\n}\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n gap: 1rem;\r\n`;\r\n\r\nconst WrapperBtn = styled.div`\r\n display: block;\r\n`;\r\n\r\nconst StyledTextLabel = styled.span`\r\n display: block;\r\n font-size: ${(props: StyledTextLabelProps): string => (props.fontSize ? `${props.fontSize}px` : FONT_SIZE.SMALL)};\r\n line-height: ${(props: StyledTextLabelProps): string =>\r\n props.lineHeight ? `${props.lineHeight}px` : FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nexport const AutoCompleteTextField = ({\r\n dropdownOnChange,\r\n defaultItems = [],\r\n buttonName = 'Submit',\r\n defaultPlaceholder = 'Please enter a value',\r\n ariaLabel = 'Autocomplete input',\r\n label,\r\n dataId,\r\n theme,\r\n invalid,\r\n disabled,\r\n thinLabel,\r\n name,\r\n required = false,\r\n lineHeight,\r\n fontSize,\r\n disabledButtonHandler,\r\n}: AutoCompleteTextFieldProps) => {\r\n const [value, setValue] = React.useState('');\r\n\r\n return (\r\n \r\n {label ? (\r\n \r\n {label}\r\n \r\n ) : (\r\n ''\r\n )}\r\n \r\n \r\n dropdownOnChange(value, DropDownAction.Insert)}\r\n disabled={disabledButtonHandler ? disabledButtonHandler(value) : !value}\r\n size={`${fontSize}px`}\r\n theme={theme}\r\n >\r\n {buttonName}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nAutoCompleteTextField.displayName = 'AutoCompleteTextField';\r\n","import styled from 'styled-components';\r\n\r\nimport {\r\n NewReleaseAllProducts,\r\n NewReleaseDashboard,\r\n NewReleaseForecasting,\r\n NewReleaseMulti,\r\n NewReleaseReporting,\r\n} from '../../../../packages/icons';\r\n\r\nconst iconWidth = '18px';\r\n\r\nexport const StyledNewReleaseAllProducts = styled(NewReleaseAllProducts)`\r\n display: inline-block;\r\n height: ${iconWidth};\r\n width: ${iconWidth};\r\n`;\r\n\r\nexport const StyledNewReleaseDashboard = styled(NewReleaseDashboard)`\r\n display: inline-block;\r\n height: ${iconWidth};\r\n width: ${iconWidth};\r\n`;\r\n\r\nexport const StyledNewReleaseForecasting = styled(NewReleaseForecasting)`\r\n display: inline-block;\r\n height: ${iconWidth};\r\n width: ${iconWidth};\r\n`;\r\n\r\nexport const StyledNewReleaseMulti = styled(NewReleaseMulti)`\r\n display: inline-block;\r\n height: ${iconWidth};\r\n width: ${iconWidth};\r\n`;\r\n\r\nexport const StyledNewReleaseReporting = styled(NewReleaseReporting)`\r\n display: inline-block;\r\n height: ${iconWidth};\r\n width: ${iconWidth};\r\n`;\r\n","import * as React from 'react';\r\n\r\nimport dayjs from 'dayjs';\r\nimport utc from 'dayjs/plugin/utc';\r\nimport styled from 'styled-components';\r\n\r\nimport { FONT_SIZE, SPACING } from '../../../../packages/constants';\r\nimport { Text } from '../../../text';\r\nimport { ArticleData } from '../../release-notes';\r\nimport {\r\n StyledNewReleaseAllProducts,\r\n StyledNewReleaseDashboard,\r\n StyledNewReleaseForecasting,\r\n StyledNewReleaseMulti,\r\n StyledNewReleaseReporting,\r\n} from '../icons/icons';\r\n\r\ndayjs.extend(utc);\r\n\r\nexport interface ArticleProps {\r\n /**\r\n * The article data.\r\n */\r\n data: ArticleData;\r\n /**\r\n * Show videos and images\r\n */\r\n showMedia?: boolean;\r\n /**\r\n * Handles click event on video content.\r\n */\r\n handleOpenVideo: (itemId: string, itemURL: string) => void;\r\n}\r\n\r\nexport interface ProductNameProps {\r\n colour?: string;\r\n}\r\n\r\nconst productCategories = [\r\n {\r\n id: 'all-products',\r\n name: 'All Products',\r\n colour: '#435c84',\r\n icon: ,\r\n },\r\n {\r\n id: 'dashboard',\r\n name: 'Dashboard',\r\n colour: '#ffd943',\r\n icon: ,\r\n },\r\n {\r\n id: 'forecasting',\r\n name: 'Forecasting ',\r\n colour: '#40d98c',\r\n icon: ,\r\n },\r\n {\r\n id: 'multi',\r\n name: 'Multi',\r\n colour: 'hsla(285.0980392156863, 100%, 70%, 1)',\r\n icon: ,\r\n },\r\n {\r\n id: 'reporting',\r\n name: 'Reporting ',\r\n colour: '#40c5ff',\r\n icon: ,\r\n },\r\n];\r\n\r\nconst headerColour = '#8292ad';\r\nconst Header = styled.div`\r\n display: flex;\r\n align-items: center;\r\n border-top-left-radius: 4px;\r\n border-top-right-radius: 4px;\r\n margin-bottom: 10px;\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n line-height: ${FONT_SIZE.X_SMALL};\r\n letter-spacing: 0.6px;\r\n color: ${headerColour};\r\n`;\r\n\r\nconst ProductName = styled.div`\r\n margin-left: ${SPACING.SMALL};\r\n color: ${(props) => props.colour || '#435c84'};\r\n font-weight: 400;\r\n text-transform: uppercase;\r\n`;\r\n\r\nconst Divider = styled.div`\r\n width: 1px;\r\n height: 12px;\r\n margin-right: ${SPACING.MEDIUM};\r\n margin-left: ${SPACING.MEDIUM};\r\n background-color: ${headerColour};\r\n color: ${headerColour};\r\n`;\r\n\r\nconst spotlightBrandColor = '#04255b';\r\nconst Title = styled.div`\r\n white-space: nowrap;\r\n margin-bottom: 10px;\r\n font-size: ${FONT_SIZE.LARGE};\r\n font-weight: 500;\r\n line-height: 1.4;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n color: ${spotlightBrandColor};\r\n`;\r\n\r\nconst ThumbnailContainer = styled.div`\r\n max-width: 420px;\r\n height: auto;\r\n margin-bottom: 10px;\r\n`;\r\n\r\nconst StyledImage = styled.img`\r\n display: block;\r\n width: 100%;\r\n height: auto;\r\n`;\r\n\r\nconst ImageThumbnail = styled(StyledImage)`\r\n border-radius: 2px;\r\n`;\r\n\r\nconst VideoThumbnail = styled(StyledImage)`\r\n position: relative;\r\n`;\r\n\r\nconst VideoPlayContainer = styled.div`\r\n position: absolute;\r\n width: 56px;\r\n padding-right: 0;\r\n opacity: 0.6;\r\n`;\r\n\r\nconst VideoPlayImage = styled.img`\r\n border: 0;\r\n vertical-align: middle;\r\n display: inline-block;\r\n max-width: 100%;\r\n margin-top: 0;\r\n margin-bottom: 0;\r\n`;\r\n\r\nconst VideoButton = styled.button`\r\n display: flex;\r\n position: relative;\r\n overflow: hidden;\r\n width: 100%;\r\n height: 100%;\r\n max-width: none;\r\n margin-right: 20px;\r\n justify-content: center;\r\n align-items: center;\r\n border: none;\r\n padding: 0;\r\n cursor: pointer;\r\n`;\r\n\r\nconst LearnMoreLink = styled.a`\r\n text-transform: capitalize;\r\n display: inline-block;\r\n text-align: center;\r\n margin-top: ${SPACING.MEDIUM};\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n font-weight: 500;\r\n letter-spacing: 0.6px;\r\n color: #00b1ff;\r\n`;\r\n\r\nexport const Article = ({ data, showMedia, handleOpenVideo }: ArticleProps) => {\r\n const defaultCategory = productCategories.find((category) => category.id === 'all-products');\r\n const product = productCategories.find((category) => category.id === data.product) || defaultCategory;\r\n\r\n const thumbnailData = data.videoThumbnails || data.thumbnailImage;\r\n\r\n const openVideo = (e: any) => {\r\n e.preventDefault();\r\n handleOpenVideo(data.videoLink?.id as string, data.videoLink?.url as string);\r\n };\r\n\r\n const video = showMedia && data.videoThumbnails && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n\r\n const image = showMedia && data.thumbnailImage && (\r\n \r\n );\r\n\r\n const thumbnail = video || image;\r\n\r\n return (\r\n
    \r\n
    \r\n {product?.icon}\r\n {`${product?.name}`} \r\n \r\n {`${dayjs.utc(data.releaseDate).format('DD MMMM YYYY')}`}\r\n
    \r\n {data.name}\r\n {thumbnailData && {thumbnail} }\r\n \r\n {data.postSummary}\r\n \r\n {data.learnMoreLink && (\r\n \r\n Learn More\r\n \r\n )}\r\n
    \r\n );\r\n};\r\n","import styled from 'styled-components';\r\n\r\nimport { NewReleaseNoData } from '../../../../packages/icons';\r\n\r\nexport const StyledNewReleaseNoData = styled(NewReleaseNoData)`\r\n display: block;\r\n width: 100%;\r\n height: auto;\r\n`;\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { FONT_SIZE, RADIUS, SPACING } from '../../packages/constants';\r\nimport { Article } from './atoms/article/article';\r\nimport { StyledNewReleaseNoData } from './atoms/images/images';\r\n\r\nexport interface ArticleData {\r\n releaseDate: string;\r\n isArchived: boolean;\r\n learnMoreLink?: string;\r\n isDraft: boolean;\r\n name: string;\r\n slug: string;\r\n videoLink?: MediaLink;\r\n videoThumbnails?: Thumbnail;\r\n thumbnailImage?: Thumbnail;\r\n productLabels: string;\r\n lastUpdated: string;\r\n createdOn: string;\r\n lastPublished: string;\r\n postSummary: string;\r\n id: string;\r\n product: string;\r\n cmsLocaleId: string;\r\n}\r\n\r\ninterface MediaLink {\r\n url: string;\r\n id: string;\r\n}\r\n\r\ninterface Thumbnail {\r\n fileId: string;\r\n url: string;\r\n alt: string;\r\n}\r\n\r\nexport interface ReleaseNotesProps {\r\n /**\r\n * List of articles to display in the release notes.\r\n */\r\n articles: ArticleData[];\r\n /**\r\n * URL to open in a new tab.\r\n */\r\n url?: string;\r\n /**\r\n * Label for the URL.\r\n */\r\n urlDisplayText?: string;\r\n /**\r\n * Number of articles to display.\r\n */\r\n displaySize?: number;\r\n /**\r\n * Show videos and images\r\n */\r\n showMedia?: boolean;\r\n /**\r\n * External function to dispatch actions to.\r\n */\r\n handleAction?: (action: Action) => Promise;\r\n}\r\n\r\ninterface Action {\r\n type: TType;\r\n payload?: TPayload;\r\n}\r\n\r\n/**\r\n * Actions dispatched to an external handler\r\n */\r\nexport enum ReleaseNotesExternalActions {\r\n OPEN_VIDEO = 'OPEN_VIDEO',\r\n}\r\n\r\nconst StyledReleaseNotes = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n`;\r\n\r\nconst ArticleContainer = styled.div`\r\n margin: 5px;\r\n padding: ${SPACING.LARGE};\r\n border-radius: ${RADIUS.DEFAULT};\r\n border-style: solid;\r\n border-width: 2px;\r\n box-sizing: border-box;\r\n width: 100%;\r\n background-color: #ffffff;\r\n border-color: transparent;\r\n box-shadow: 0 1px 5px rgba(4, 37, 91, 0.25);\r\n`;\r\n\r\nconst spotlightBrandColor = '#04255b';\r\nconst Link = styled.a`\r\n position: relative;\r\n text-decoration: none;\r\n text-transform: uppercase;\r\n display: inline-block;\r\n text-align: center;\r\n line-height: 2;\r\n margin-top: ${SPACING.XX_LARGE};\r\n font-size: ${FONT_SIZE.LARGE};\r\n font-weight: 500;\r\n padding: 0 1px;\r\n color: ${spotlightBrandColor};\r\n &::before,\r\n &::after {\r\n content: '';\r\n position: absolute;\r\n background-color: ${spotlightBrandColor};\r\n z-index: 1;\r\n height: 5%;\r\n width: 100%;\r\n left: 100%;\r\n bottom: 0;\r\n }\r\n &::before {\r\n width: 0%;\r\n left: 0;\r\n bottom: 0;\r\n }\r\n &::after {\r\n width: 100%;\r\n left: 0;\r\n bottom: 0;\r\n }\r\n`;\r\n\r\nconst NoNewReleasesImage = styled.div`\r\n max-width: 420px;\r\n height: auto;\r\n`;\r\n\r\nconst ReleaseNotes: React.FC> = ({\r\n displaySize,\r\n articles,\r\n url,\r\n urlDisplayText,\r\n showMedia,\r\n handleAction,\r\n ...props\r\n}) => {\r\n const activeArticles = articles.filter((a) => !a.isArchived && !a.isDraft);\r\n const itemsToDisplay = displaySize && displaySize < activeArticles.length ? activeArticles.slice(0, displaySize) : activeArticles;\r\n\r\n const handleOpenVideo = async (id: string, url: string) => {\r\n if (typeof handleAction !== 'function') {\r\n return;\r\n }\r\n\r\n await handleAction({\r\n type: ReleaseNotesExternalActions.OPEN_VIDEO,\r\n payload: {\r\n id: id,\r\n videoURL: url,\r\n },\r\n });\r\n };\r\n\r\n return (\r\n \r\n {itemsToDisplay.length > 0 ? (\r\n itemsToDisplay.map((article: ArticleData) => (\r\n \r\n
    \r\n \r\n ))\r\n ) : (\r\n \r\n \r\n \r\n )}\r\n {url && urlDisplayText && (\r\n \r\n {urlDisplayText}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport { ReleaseNotes };\r\n","import * as React from 'react';\r\n\r\nimport useMergedRef from '@react-hook/merged-ref';\r\nimport { Portal } from 'react-portal';\r\nimport styled from 'styled-components';\r\n\r\nimport { useClickOutside } from '../../../ModernScripts/Spotlight/Hooks/useClickOutside';\r\nimport { camelToKebab } from '../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport { COLOR } from '../../packages/constants';\r\nimport { SearchFilter } from '../search-filter/search-filter';\r\n\r\nexport interface Option {\r\n value: string;\r\n text: string;\r\n dataId?: string;\r\n flagColour?: string; // little highlight colour\r\n disabled?: boolean;\r\n icon?: React.ReactElement;\r\n}\r\n\r\ninterface ComponentWithDensityProps {\r\n density: Density;\r\n}\r\n\r\ninterface StyledOptionProps {\r\n interactionMode: InteractionModes;\r\n}\r\n\r\ninterface StyledOptionLabelInnerProps extends ComponentWithDensityProps {\r\n interactionMode: InteractionModes;\r\n flagColour?: string; // little highlight colour\r\n disable?: boolean;\r\n}\r\n\r\nexport interface OptionGroup {\r\n label: string;\r\n options: Option[];\r\n}\r\n\r\nexport interface Section {\r\n type: 'section';\r\n options: Array