From cf253cb75fd7c1f2148a224c67c001e4b44300f1 Mon Sep 17 00:00:00 2001 From: Jeroen Date: Sat, 25 Nov 2023 13:51:00 +0100 Subject: [PATCH] Revert "Merge pull request #56 from eyra/development" This reverts commit f9155e5d10884e6b7941e9484b1d35743146eac9, reversing changes made to fb8d30915035da1cd736cf58d400ba4485f508f3. --- .vscode/settings.json | 20 - dist/framework/types/visualizations.d.ts | 62 - dist/framework/types/visualizations.js | 1 - .../react/ui/elements/Minimizable.d.ts | 9 - .../react/ui/elements/Minimizable.js | 24 - .../react/ui/elements/figure.d.ts | 14 - .../visualisation/react/ui/elements/figure.js | 56 - .../ui/elements/figures/recharts_graph.d.ts | 7 - .../ui/elements/figures/recharts_graph.js | 84 - .../ui/elements/figures/visx_wordcloud.d.ts | 7 - .../ui/elements/figures/visx_wordcloud.js | 20 - .../react/ui/elements/pagination.d.ts | 7 - .../react/ui/elements/pagination.js | 13 - .../ui/elements/question_multiple_choice.d.ts | 9 - .../ui/elements/question_multiple_choice.js | 30 - .../question_multiple_choice_checkbox.d.ts | 9 - .../question_multiple_choice_checkbox.js | 37 - .../react/ui/elements/question_open.d.ts | 9 - .../react/ui/elements/question_open.js | 27 - .../react/ui/elements/table_container.d.ts | 10 - .../react/ui/elements/table_container.js | 114 -- .../react/ui/elements/table_items.d.ts | 9 - .../react/ui/elements/table_items.js | 29 - .../ui/hooks/useResponsiveScreenSize.d.ts | 1 - .../react/ui/hooks/useResponsiveScreenSize.js | 40 - .../react/ui/hooks/useUnloadWarning.d.ts | 1 - .../react/ui/hooks/useUnloadWarning.js | 16 - .../react/ui/hooks/useVisualizationData.d.ts | 5 - .../react/ui/hooks/useVisualizationData.js | 24 - .../react/ui/pages/error_page.d.ts | 7 - .../react/ui/pages/error_page.js | 27 - .../react/ui/prompts/questionnaire.d.ts | 7 - .../react/ui/prompts/questionnaire.js | 49 - .../prepareChartData.d.ts | 10 - .../prepareChartData.js | 131 -- .../prepareTextData.d.ts | 3 - .../prepareTextData.js | 67 - .../visualizationDataFunctions/util.d.ts | 7 - .../visualizationDataFunctions/util.js | 83 - .../ui/workers/visualizationDataWorker.d.ts | 1 - .../ui/workers/visualizationDataWorker.js | 34 - package-lock.json | 1613 +++-------------- package.json | 15 +- public/index.html | 8 +- public/port-0.0.0-py3-none-any.whl | Bin 6497 -> 5360 bytes public/port_logo_only.svg | 8 - .../py/dist/port-0.0.0-py3-none-any.whl | Bin 6497 -> 5360 bytes src/framework/processing/py/port/api/props.py | 210 +-- src/framework/processing/py_worker.js | 35 +- src/framework/styles.css | 30 - src/framework/types/elements.ts | 170 +- src/framework/types/pages.ts | 24 +- src/framework/types/prompts.ts | 46 +- src/framework/types/visualizations.ts | 90 - src/framework/visualisation/react/factory.tsx | 6 +- src/framework/visualisation/react/main.tsx | 14 +- .../react/ui/elements/Minimizable.tsx | 87 - .../react/ui/elements/button.tsx | 88 +- .../react/ui/elements/check_box.tsx | 23 +- .../react/ui/elements/figure.tsx | 119 -- .../ui/elements/figures/recharts_graph.tsx | 185 -- .../ui/elements/figures/visx_wordcloud.tsx | 55 - .../react/ui/elements/pagination.tsx | 105 -- .../ui/elements/question_multiple_choice.tsx | 70 - .../question_multiple_choice_checkbox.tsx | 78 - .../react/ui/elements/question_open.tsx | 55 - .../react/ui/elements/search_bar.tsx | 27 +- .../visualisation/react/ui/elements/table.tsx | 779 +++++--- .../react/ui/elements/table_container.tsx | 237 --- .../react/ui/elements/table_items.tsx | 70 - .../ui/hooks/useResponsiveScreenSize.tsx | 38 - .../react/ui/hooks/useUnloadWarning.tsx | 17 - .../react/ui/hooks/useVisualizationData.tsx | 40 - .../react/ui/pages/donation_page.tsx | 47 +- .../react/ui/pages/error_page.tsx | 56 - .../react/ui/pages/templates/page.tsx | 18 +- .../react/ui/prompts/confirm.tsx | 4 +- .../react/ui/prompts/consent_form.tsx | 146 +- .../react/ui/prompts/file_input.tsx | 23 +- .../react/ui/prompts/questionnaire.tsx | 91 - .../prepareChartData.ts | 146 -- .../prepareTextData.ts | 86 - .../visualizationDataFunctions/util.ts | 101 -- .../ui/workers/visualizationDataWorker.ts | 38 - tailwind.config.js | 26 +- tsconfig.json | 13 +- tsconfig.prod.json | 2 +- 87 files changed, 958 insertions(+), 5301 deletions(-) delete mode 100644 .vscode/settings.json delete mode 100644 dist/framework/types/visualizations.d.ts delete mode 100644 dist/framework/types/visualizations.js delete mode 100644 dist/framework/visualisation/react/ui/elements/Minimizable.d.ts delete mode 100644 dist/framework/visualisation/react/ui/elements/Minimizable.js delete mode 100644 dist/framework/visualisation/react/ui/elements/figure.d.ts delete mode 100644 dist/framework/visualisation/react/ui/elements/figure.js delete mode 100644 dist/framework/visualisation/react/ui/elements/figures/recharts_graph.d.ts delete mode 100644 dist/framework/visualisation/react/ui/elements/figures/recharts_graph.js delete mode 100644 dist/framework/visualisation/react/ui/elements/figures/visx_wordcloud.d.ts delete mode 100644 dist/framework/visualisation/react/ui/elements/figures/visx_wordcloud.js delete mode 100644 dist/framework/visualisation/react/ui/elements/pagination.d.ts delete mode 100644 dist/framework/visualisation/react/ui/elements/pagination.js delete mode 100644 dist/framework/visualisation/react/ui/elements/question_multiple_choice.d.ts delete mode 100644 dist/framework/visualisation/react/ui/elements/question_multiple_choice.js delete mode 100644 dist/framework/visualisation/react/ui/elements/question_multiple_choice_checkbox.d.ts delete mode 100644 dist/framework/visualisation/react/ui/elements/question_multiple_choice_checkbox.js delete mode 100644 dist/framework/visualisation/react/ui/elements/question_open.d.ts delete mode 100644 dist/framework/visualisation/react/ui/elements/question_open.js delete mode 100644 dist/framework/visualisation/react/ui/elements/table_container.d.ts delete mode 100644 dist/framework/visualisation/react/ui/elements/table_container.js delete mode 100644 dist/framework/visualisation/react/ui/elements/table_items.d.ts delete mode 100644 dist/framework/visualisation/react/ui/elements/table_items.js delete mode 100644 dist/framework/visualisation/react/ui/hooks/useResponsiveScreenSize.d.ts delete mode 100644 dist/framework/visualisation/react/ui/hooks/useResponsiveScreenSize.js delete mode 100644 dist/framework/visualisation/react/ui/hooks/useUnloadWarning.d.ts delete mode 100644 dist/framework/visualisation/react/ui/hooks/useUnloadWarning.js delete mode 100644 dist/framework/visualisation/react/ui/hooks/useVisualizationData.d.ts delete mode 100644 dist/framework/visualisation/react/ui/hooks/useVisualizationData.js delete mode 100644 dist/framework/visualisation/react/ui/pages/error_page.d.ts delete mode 100644 dist/framework/visualisation/react/ui/pages/error_page.js delete mode 100644 dist/framework/visualisation/react/ui/prompts/questionnaire.d.ts delete mode 100644 dist/framework/visualisation/react/ui/prompts/questionnaire.js delete mode 100644 dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/prepareChartData.d.ts delete mode 100644 dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/prepareChartData.js delete mode 100644 dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/prepareTextData.d.ts delete mode 100644 dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/prepareTextData.js delete mode 100644 dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/util.d.ts delete mode 100644 dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/util.js delete mode 100644 dist/framework/visualisation/react/ui/workers/visualizationDataWorker.d.ts delete mode 100644 dist/framework/visualisation/react/ui/workers/visualizationDataWorker.js delete mode 100644 public/port_logo_only.svg delete mode 100644 src/framework/types/visualizations.ts delete mode 100644 src/framework/visualisation/react/ui/elements/Minimizable.tsx delete mode 100644 src/framework/visualisation/react/ui/elements/figure.tsx delete mode 100644 src/framework/visualisation/react/ui/elements/figures/recharts_graph.tsx delete mode 100644 src/framework/visualisation/react/ui/elements/figures/visx_wordcloud.tsx delete mode 100644 src/framework/visualisation/react/ui/elements/pagination.tsx delete mode 100644 src/framework/visualisation/react/ui/elements/question_multiple_choice.tsx delete mode 100644 src/framework/visualisation/react/ui/elements/question_multiple_choice_checkbox.tsx delete mode 100644 src/framework/visualisation/react/ui/elements/question_open.tsx delete mode 100644 src/framework/visualisation/react/ui/elements/table_container.tsx delete mode 100644 src/framework/visualisation/react/ui/elements/table_items.tsx delete mode 100644 src/framework/visualisation/react/ui/hooks/useResponsiveScreenSize.tsx delete mode 100644 src/framework/visualisation/react/ui/hooks/useUnloadWarning.tsx delete mode 100644 src/framework/visualisation/react/ui/hooks/useVisualizationData.tsx delete mode 100644 src/framework/visualisation/react/ui/pages/error_page.tsx delete mode 100644 src/framework/visualisation/react/ui/prompts/questionnaire.tsx delete mode 100644 src/framework/visualisation/react/ui/workers/visualizationDataFunctions/prepareChartData.ts delete mode 100644 src/framework/visualisation/react/ui/workers/visualizationDataFunctions/prepareTextData.ts delete mode 100644 src/framework/visualisation/react/ui/workers/visualizationDataFunctions/util.ts delete mode 100644 src/framework/visualisation/react/ui/workers/visualizationDataWorker.ts diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index b8870551..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "prettier.trailingComma": "none", - "prettier.tabWidth": 2, - "prettier.semi": false, - "prettier.singleQuote": true, - "prettier.printWidth": 100, - "search.exclude": { - "**/node_modules": true, - "**/dist": true - }, - "tailwindCSS.includeLanguages": { - "html": "html", - "javascript": "javascript", - "typescript": "typescript", - "css": "css" - }, - "editor.quickSuggestions": { - "strings": true - } -} diff --git a/dist/framework/types/visualizations.d.ts b/dist/framework/types/visualizations.d.ts deleted file mode 100644 index ab52b871..00000000 --- a/dist/framework/types/visualizations.d.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { Text } from './elements'; -export interface VisualizationProps { - title: Text; - height?: number; -} -export type AggregationFunction = 'count' | 'mean' | 'sum' | 'count_pct' | 'pct'; -export interface Axis { - label?: string; - column: string; -} -export interface AggregationGroup { - label?: string; - column: string; - dateFormat?: DateFormat; - tokenize?: boolean; -} -export interface AggregationValue { - label?: string; - column: string; - aggregate?: AggregationFunction; - group_by?: string; - secondAxis?: boolean; - z?: string; - zAggregate?: AggregationFunction; - addZeroes?: boolean; -} -export interface ChartVisualization extends VisualizationProps { - type: 'line' | 'bar' | 'area'; - group: AggregationGroup; - values: AggregationValue[]; -} -export interface TextVisualization extends VisualizationProps { - type: 'wordcloud'; - textColumn: string; - valueColumn?: string; - tokenize?: boolean; -} -export interface ScoredTerm { - text: string; - value: number; - importance: number; - rowIds?: string[]; -} -export type VisualizationType = ChartVisualization | TextVisualization; -export interface AxisSettings { - label: string; - secondAxis?: boolean; - tickerFormat?: TickerFormat; -} -export type TickerFormat = 'percent' | 'default'; -export interface ChartVisualizationData { - type: 'line' | 'bar' | 'area'; - data: Array>; - xKey: AxisSettings; - yKeys: Record; -} -export interface TextVisualizationData { - type: 'wordcloud'; - topTerms: ScoredTerm[]; -} -export type VisualizationData = ChartVisualizationData | TextVisualizationData; -export type DateFormat = 'auto' | 'year' | 'quarter' | 'month' | 'day' | 'hour' | 'month_cycle' | 'weekday_cycle' | 'day_cycle' | 'hour_cycle'; diff --git a/dist/framework/types/visualizations.js b/dist/framework/types/visualizations.js deleted file mode 100644 index cb0ff5c3..00000000 --- a/dist/framework/types/visualizations.js +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/dist/framework/visualisation/react/ui/elements/Minimizable.d.ts b/dist/framework/visualisation/react/ui/elements/Minimizable.d.ts deleted file mode 100644 index d0b1f3fa..00000000 --- a/dist/framework/visualisation/react/ui/elements/Minimizable.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ReactNode } from 'react'; -interface Props { - children: ReactNode; - size?: string; - fullSize?: boolean; - minimized?: ReactNode; -} -export declare const Minimizable: ({ children, size, fullSize, minimized }: Props) => JSX.Element; -export {}; diff --git a/dist/framework/visualisation/react/ui/elements/Minimizable.js b/dist/framework/visualisation/react/ui/elements/Minimizable.js deleted file mode 100644 index c8ca0a5b..00000000 --- a/dist/framework/visualisation/react/ui/elements/Minimizable.js +++ /dev/null @@ -1,24 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { useState } from 'react'; -export const Minimizable = ({ children, size = 'h-[15rem] w-[24rem]', fullSize, minimized }) => { - const [isMinimized, setIsMinimized] = useState(true); - const containerStyle = isMinimized - ? `${size} overflow-hidden animate-fadeIn` - : (fullSize !== null && fullSize !== void 0 ? fullSize : false) - ? 'w-full' - : ''; - const childStyle = isMinimized - ? 'scale-50 origin-top-left z-10 p-5 w-[200%] ' - : 'transition-all duration-500'; - const toggleStyle = isMinimized - ? 'transition-all absolute top-0 left-0 h-full w-full z-20 bg-primary/0 hover:bg-primary/25 border-solid cursor-zoom-in' - : 'w-min mr-auto mt-2 cursor-zoom-out'; - const iconStyle = isMinimized ? 'rounded-tr-sm bg-primary' : 'rounded-sm mb-2 bg-primary'; - const minimizedTruthy = Boolean(minimized); - const child = minimizedTruthy - ? minimized - : (_jsx("div", Object.assign({ className: `relative ${childStyle}` }, { children: minimizedTruthy ? minimized : children }))); - return (_jsxs("div", Object.assign({ className: `overflow-auto relative ${containerStyle}` }, { children: [child, _jsx("div", Object.assign({ className: `flex items-end justify-start rounded-sm border-primary ${toggleStyle}`, onClick: () => setIsMinimized(!isMinimized) }, { children: _jsx("div", Object.assign({ className: `relative font-caption text-xl px-4 py-1 backdrop-blur-[2px] text-white z-30 ${iconStyle}` }, { children: isMinimized ? zoomInIcon : zoomOutIcon })) }))] }))); -}; -const zoomInIcon = (_jsx("svg", Object.assign({ className: 'h-6 w-6', fill: 'none', stroke: 'currentColor', strokeWidth: '2', viewBox: '0 0 24 24', xmlns: 'http://www.w3.org/2000/svg', "aria-hidden": 'true' }, { children: _jsx("path", { strokeLinecap: 'round', strokeLinejoin: 'round', d: 'M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607zM10.5 7.5v6m3-3h-6' }) }))); -const zoomOutIcon = (_jsx("svg", Object.assign({ className: 'h-6 w-6', fill: 'none', stroke: 'currentColor', strokeWidth: '2', viewBox: '0 0 24 24', xmlns: 'http://www.w3.org/2000/svg', "aria-hidden": 'true' }, { children: _jsx("path", { strokeLinecap: 'round', strokeLinejoin: 'round', d: 'M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607zM13.5 10.5h-6' }) }))); diff --git a/dist/framework/visualisation/react/ui/elements/figure.d.ts b/dist/framework/visualisation/react/ui/elements/figure.d.ts deleted file mode 100644 index d8a17096..00000000 --- a/dist/framework/visualisation/react/ui/elements/figure.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -/// -import { TableWithContext } from '../../../../types/elements'; -import { VisualizationType } from '../../../../types/visualizations'; -import { ReactFactoryContext } from '../../factory'; -type Props = VisualizationProps & ReactFactoryContext; -export interface VisualizationProps { - table: TableWithContext; - visualization: VisualizationType; - locale: string; - handleDelete: (rowIds: string[]) => void; - handleUndo: () => void; -} -export declare const Figure: ({ table, visualization, locale, handleDelete, handleUndo }: Props) => JSX.Element; -export {}; diff --git a/dist/framework/visualisation/react/ui/elements/figure.js b/dist/framework/visualisation/react/ui/elements/figure.js deleted file mode 100644 index e1425739..00000000 --- a/dist/framework/visualisation/react/ui/elements/figure.js +++ /dev/null @@ -1,56 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import TextBundle from '../../../../text_bundle'; -import { Translator } from '../../../../translator'; -import { memo, useMemo } from 'react'; -import useVisualizationData from '../hooks/useVisualizationData'; -import { Title6 } from './text'; -import Lottie from 'lottie-react'; -import spinnerDark from '../../../../../assets/lottie/spinner-dark.json'; -import RechartsGraph from './figures/recharts_graph'; -import VisxWordcloud from './figures/visx_wordcloud'; -export const Figure = ({ table, visualization, locale, handleDelete, handleUndo }) => { - var _a; - const [visualizationData, status] = useVisualizationData(table, visualization); - const { title } = useMemo(() => { - const title = Translator.translate(visualization.title, locale); - return { title }; - }, [visualization]); - const { errorMsg, noDataMsg } = useMemo(() => prepareCopy(locale), [locale]); - if ((visualizationData == null) && status === 'loading') { - return (_jsx("div", Object.assign({ className: 'w-12 h-12' }, { children: _jsx(Lottie, { animationData: spinnerDark, loop: true }) }))); - } - if (status === 'error') { - return _jsx("div", Object.assign({ className: 'flex justify-center items-center text-error' }, { children: errorMsg })); - } - const visualizationHeightTruthy = Boolean(visualization.height); - const minHeight = visualizationHeightTruthy ? `${(_a = visualization.height) !== null && _a !== void 0 ? _a : ''} px` : '20rem'; - return (_jsxs("div", Object.assign({ className: 'flex flex-col overflow-hidden' }, { children: [_jsx(Title6, { text: title, margin: 'mt-2 mb-4' }), _jsx("div", Object.assign({ className: 'relative z-50 flex max-w-full', style: { flex: `1 1 ${minHeight}`, minHeight } }, { children: _jsx(RenderVisualization, { visualizationData: visualizationData, fallbackMessage: noDataMsg }) }))] }))); -}; -const RenderVisualization = memo(({ visualizationData, fallbackMessage }) => { - if (visualizationData == null) - return null; - const fallback = (_jsx("div", Object.assign({ className: 'm-auto font-bodybold text-4xl text-grey2 ' }, { children: fallbackMessage }))); - if (['line', 'bar', 'area'].includes(visualizationData.type)) { - const chartVisualizationData = visualizationData; - if (chartVisualizationData.data.length === 0) - return fallback; - return _jsx(RechartsGraph, { visualizationData: chartVisualizationData }); - } - if (visualizationData.type === 'wordcloud') { - const textVisualizationData = visualizationData; - if (textVisualizationData.topTerms.length === 0) - return fallback; - return _jsx(VisxWordcloud, { visualizationData: textVisualizationData }); - } - return null; -}); -function prepareCopy(locale) { - return { - errorMsg: Translator.translate(errorMsg, locale), - noDataMsg: Translator.translate(noDataMsg, locale) - }; -} -const noDataMsg = new TextBundle().add('en', 'No data').add('nl', 'Geen data'); -const errorMsg = new TextBundle() - .add('en', 'Could not create visualization') - .add('nl', 'Kon visualisatie niet maken'); diff --git a/dist/framework/visualisation/react/ui/elements/figures/recharts_graph.d.ts b/dist/framework/visualisation/react/ui/elements/figures/recharts_graph.d.ts deleted file mode 100644 index 1892389e..00000000 --- a/dist/framework/visualisation/react/ui/elements/figures/recharts_graph.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// -import { ChartVisualizationData } from '../../../../../types/visualizations'; -interface Props { - visualizationData: ChartVisualizationData; -} -export default function RechartsGraph({ visualizationData }: Props): JSX.Element | null; -export {}; diff --git a/dist/framework/visualisation/react/ui/elements/figures/recharts_graph.js b/dist/framework/visualisation/react/ui/elements/figures/recharts_graph.js deleted file mode 100644 index ddf8d855..00000000 --- a/dist/framework/visualisation/react/ui/elements/figures/recharts_graph.js +++ /dev/null @@ -1,84 +0,0 @@ -import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime"; -import { ResponsiveContainer, LineChart, Line, XAxis, YAxis, Tooltip, Legend, BarChart, Bar, AreaChart, Area } from 'recharts'; -export default function RechartsGraph({ visualizationData }) { - function tooltip() { - return (_jsx(Tooltip, { allowEscapeViewBox: { x: false, y: false }, labelStyle: { marginBottom: '0.5rem' }, contentStyle: { - fontSize: '0.8rem', - lineHeight: '0.8rem', - background: '#fff8', - backdropFilter: 'blur(3px)' - } })); - } - function axes(minTickGap) { - const hasVisualizationData = Boolean(visualizationData); - if (!hasVisualizationData) - return null; - const secondary = Object.values(visualizationData.yKeys).findIndex((yKey) => yKey.secondAxis) !== - -1; - const { tickFormatter, tickFormatter2 } = getTickFormatters(Object.values(visualizationData.yKeys)); - return (_jsxs(_Fragment, { children: [_jsx(XAxis, { dataKey: visualizationData.xKey.label, minTickGap: minTickGap }), _jsx(YAxis, { yAxisId: 'left', tickFormatter: tickFormatter }), secondary && _jsx(YAxis, { yAxisId: 'right', orientation: 'right', tickFormatter: tickFormatter2 })] })); - } - function legend() { - return (_jsx(Legend, { margin: { left: 10 }, align: 'right', verticalAlign: 'top', iconType: 'plainline', wrapperStyle: { fontSize: '0.8rem' } })); - } - let chart = null; - if (visualizationData.type === 'line') { - chart = (_jsxs(LineChart, Object.assign({ data: visualizationData.data }, { children: [axes(20), tooltip(), legend(), Object.values(visualizationData.yKeys).map((yKey, i) => { - var _a; - const { color, dash } = getLineStyle(i); - return (_jsx(Line, { yAxisId: ((_a = yKey.secondAxis) !== null && _a !== void 0 ? _a : false) ? 'right' : 'left', type: 'monotone', dataKey: yKey.label, dot: false, strokeWidth: 2, stroke: color, strokeDasharray: dash }, yKey.label)); - })] }))); - } - if (visualizationData.type === 'bar') { - chart = (_jsxs(BarChart, Object.assign({ data: visualizationData.data }, { children: [axes(0), tooltip(), legend(), Object.values(visualizationData.yKeys).map((yKey, i) => { - var _a; - const { color } = getLineStyle(i); - return (_jsx(Bar, { yAxisId: ((_a = yKey.secondAxis) !== null && _a !== void 0 ? _a : false) ? 'right' : 'left', dataKey: yKey.label, fill: color }, yKey.label)); - })] }))); - } - if (visualizationData.type === 'area') { - chart = (_jsxs(AreaChart, Object.assign({ data: visualizationData.data }, { children: [axes(20), tooltip(), legend(), Object.values(visualizationData.yKeys).map((yKey, i) => { - var _a; - const { color } = getLineStyle(i); - return (_jsx(Area, { yAxisId: ((_a = yKey.secondAxis) !== null && _a !== void 0 ? _a : false) ? 'right' : 'left', dataKey: yKey.label, fill: color }, yKey.label)); - })] }))); - } - if (chart == null) - return null; - return (_jsx(ResponsiveContainer, Object.assign({ width: '100%', height: '100%' }, { children: chart }))); -} -function getLineStyle(index) { - const COLORS = ['#4272EF', '#FF5E5E', '#FFCF60', '#1E3FCC', '#CC3F3F', '#CC9F3F']; - const DASHES = ['1', '5 5', '10 10', '5 5 10 10']; - const cell = index % (COLORS.length * DASHES.length); - const row = index % COLORS.length; - const column = Math.floor(cell / COLORS.length); - return { color: COLORS[row], dash: DASHES[column] }; -} -function getTickFormatters(yKeys) { - var _a; - let tickerFormat; - let tickerFormat2; - for (const yKey of yKeys) { - if (!((_a = yKey.secondAxis) !== null && _a !== void 0 ? _a : false)) { - if (tickerFormat === undefined) - tickerFormat = yKey.tickerFormat; - if (tickerFormat !== yKey.tickerFormat) - tickerFormat = 'default'; - } - else { - if (tickerFormat2 === undefined) - tickerFormat2 = yKey.tickerFormat; - if (tickerFormat2 !== yKey.tickerFormat) - tickerFormat2 = 'default'; - } - } - const tickFormatter = getTickFormatter(tickerFormat !== null && tickerFormat !== void 0 ? tickerFormat : 'default'); - const tickFormatter2 = getTickFormatter(tickerFormat2 !== null && tickerFormat2 !== void 0 ? tickerFormat2 : 'default'); - return { tickFormatter, tickFormatter2 }; -} -function getTickFormatter(format) { - if (format === 'percent') - return (value) => `${value}%`; - return undefined; -} diff --git a/dist/framework/visualisation/react/ui/elements/figures/visx_wordcloud.d.ts b/dist/framework/visualisation/react/ui/elements/figures/visx_wordcloud.d.ts deleted file mode 100644 index 88a94f4c..00000000 --- a/dist/framework/visualisation/react/ui/elements/figures/visx_wordcloud.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// -import { TextVisualizationData } from '../../../../../types/visualizations'; -interface Props { - visualizationData: TextVisualizationData; -} -declare function VisxWordcloud({ visualizationData }: Props): JSX.Element | null; -export default VisxWordcloud; diff --git a/dist/framework/visualisation/react/ui/elements/figures/visx_wordcloud.js b/dist/framework/visualisation/react/ui/elements/figures/visx_wordcloud.js deleted file mode 100644 index 3749737c..00000000 --- a/dist/framework/visualisation/react/ui/elements/figures/visx_wordcloud.js +++ /dev/null @@ -1,20 +0,0 @@ -import { jsx as _jsx } from "react/jsx-runtime"; -import { Text } from '@visx/text'; -import Wordcloud from '@visx/wordcloud/lib/Wordcloud'; -import { ParentSize } from '@visx/responsive'; -import { useMemo } from 'react'; -function VisxWordcloud({ visualizationData }) { - const fontRange = [12, 60]; - const colors = ['#1E3FCC', '#4272EF', '#CC9F3F', '#FFCF60']; - const nWords = 100; - const words = useMemo(() => { - return visualizationData.topTerms.slice(0, nWords); - }, [visualizationData, nWords]); - return (_jsx(ParentSize, { children: (parent) => (_jsx(Wordcloud, Object.assign({ words: words, height: parent.height, width: parent.width, rotate: 0, padding: 3, spiral: 'rectangular', fontSize: (w) => w.importance * (fontRange[1] - fontRange[0]) + fontRange[0], random: () => 0.5 }, { children: (cloudWords) => { - return cloudWords.map((w, i) => { - var _a, _b, _c; - return (_jsx(Text, Object.assign({ fill: colors[Math.floor((i / cloudWords.length) * colors.length)], fontSize: w.size, textAnchor: 'middle', fontFamily: w.font, transform: `translate(${(_a = w.x) !== null && _a !== void 0 ? _a : 0}, ${(_b = w.y) !== null && _b !== void 0 ? _b : 0}) rotate(${(_c = w.rotate) !== null && _c !== void 0 ? _c : 0})` }, { children: w.text }), w.text)); - }); - } }))) })); -} -export default VisxWordcloud; diff --git a/dist/framework/visualisation/react/ui/elements/pagination.d.ts b/dist/framework/visualisation/react/ui/elements/pagination.d.ts deleted file mode 100644 index b2ecad33..00000000 --- a/dist/framework/visualisation/react/ui/elements/pagination.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// -export interface Props { - page: number; - setPage: (page: number) => void; - nPages: number; -} -export declare const Pagination: ({ page, setPage, nPages }: Props) => JSX.Element; diff --git a/dist/framework/visualisation/react/ui/elements/pagination.js b/dist/framework/visualisation/react/ui/elements/pagination.js deleted file mode 100644 index 89e7b303..00000000 --- a/dist/framework/visualisation/react/ui/elements/pagination.js +++ /dev/null @@ -1,13 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -export const Pagination = ({ page, setPage, nPages }) => { - function activeButton(active) { - if (active) - return 'text-primary'; - return 'text-grey3 hover:cursor-default'; - } - return (_jsxs("div", Object.assign({ className: `flex items-center gap-1 lg:gap-3 p-3 ${nPages <= 1 ? 'invisible' : ''}` }, { children: [_jsx("button", Object.assign({ className: activeButton(page > 0), onClick: () => setPage(Math.max(page - 10, 0)) }, { children: doubleBackward })), _jsx("button", Object.assign({ className: activeButton(page > 0), onClick: () => setPage(Math.max(page - 1, 0)) }, { children: backward })), _jsx("div", Object.assign({ className: 'text-center min-w-[2rem] font-title6 text-title6 h-5' }, { children: page + 1 })), _jsx("button", Object.assign({ className: activeButton(page < nPages - 1), onClick: () => setPage(Math.min(page + 1, nPages - 1)) }, { children: forward })), _jsx("button", Object.assign({ className: activeButton(page < nPages - 1), onClick: () => setPage(Math.min(page + 10, nPages - 1)) }, { children: doubleForward }))] }))); -}; -const backward = (_jsx("svg", Object.assign({ className: ' h-4', "aria-hidden": 'true', xmlns: 'http://www.w3.org/2000/svg', fill: 'none', viewBox: '0 0 6 10' }, { children: _jsx("path", { stroke: 'currentColor', strokeLinecap: 'round', strokeLinejoin: 'round', strokeWidth: '2', d: 'M5 1 1 5l4 4' }) }))); -const doubleBackward = (_jsx("svg", Object.assign({ className: 'h-4', "aria-hidden": 'true', xmlns: 'http://www.w3.org/2000/svg', fill: 'none', viewBox: '0 0 12 10' }, { children: _jsx("path", { stroke: 'currentColor', strokeLinecap: 'round', strokeLinejoin: 'round', strokeWidth: '2', d: 'M5 1 1 5l4 4m6-8L7 5l4 4' }) }))); -const forward = (_jsx("svg", Object.assign({ className: 'h-4 ', "aria-hidden": 'true', xmlns: 'http://www.w3.org/2000/svg', fill: 'none', viewBox: '0 0 6 10' }, { children: _jsx("path", { stroke: 'currentColor', strokeLinecap: 'round', strokeLinejoin: 'round', strokeWidth: '2', d: 'm1 9 4-4-4-4' }) }))); -const doubleForward = (_jsx("svg", Object.assign({ className: 'h-4 ', "aria-hidden": 'true', xmlns: 'http://www.w3.org/2000/svg', fill: 'none', viewBox: '0 0 12 10' }, { children: _jsx("path", { stroke: 'currentColor', strokeLinecap: 'round', strokeLinejoin: 'round', strokeWidth: '2', d: 'm7 9 4-4-4-4M1 9l4-4-4-4' }) }))); diff --git a/dist/framework/visualisation/react/ui/elements/question_multiple_choice.d.ts b/dist/framework/visualisation/react/ui/elements/question_multiple_choice.d.ts deleted file mode 100644 index 36faa0b8..00000000 --- a/dist/framework/visualisation/react/ui/elements/question_multiple_choice.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/// -import { PropsUIQuestionMultipleChoice } from '../../../../types/elements'; -import { ReactFactoryContext } from '../../factory'; -interface parentSetter { - parentSetter: (arg: any) => any; -} -type Props = PropsUIQuestionMultipleChoice & parentSetter & ReactFactoryContext; -export declare const MultipleChoiceQuestion: (props: Props) => JSX.Element; -export {}; diff --git a/dist/framework/visualisation/react/ui/elements/question_multiple_choice.js b/dist/framework/visualisation/react/ui/elements/question_multiple_choice.js deleted file mode 100644 index c078e48a..00000000 --- a/dist/framework/visualisation/react/ui/elements/question_multiple_choice.js +++ /dev/null @@ -1,30 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import React from 'react'; -import { Translator } from '../../../../translator'; -import { Title3 } from './text'; -export const MultipleChoiceQuestion = (props) => { - const { question, choices, id, parentSetter, locale } = props; - const [selectedChoice, setSelectedChoice] = React.useState(''); - const [checkedArray, setCheckedArray] = React.useState(Array(choices.length).fill(false)); - const copy = prepareCopy(locale); - const handleChoiceSelect = (choice, index) => { - setSelectedChoice(choice); - setCheckedArray(Array.from({ length: choices.length }, (_, i) => i === index)); - }; - const setParentState = () => { - parentSetter((prevState) => { - prevState[id] = selectedChoice; - return prevState; - }); - }; - React.useEffect(() => { - setParentState(); - }); - return (_jsxs("div", Object.assign({ className: 'p-4' }, { children: [_jsx(Title3, { text: copy.question }), _jsx("ul", Object.assign({ className: 'mt-4 space-y-1' }, { children: copy.choices.map((choice, index) => (_jsxs("li", { children: [_jsx("label", Object.assign({ className: 'inline-flex items-center' }, { children: _jsx("input", { type: 'radio', name: `${index}-${id}`, value: choice, checked: checkedArray.at(index), onChange: () => handleChoiceSelect(choice, index), className: 'mr-1 form-radio' }) })), choice] }, index))) }))] }))); - function prepareCopy(locale) { - return { - choices: choices.map((choice) => Translator.translate(choice, locale)), - question: Translator.translate(question, locale) - }; - } -}; diff --git a/dist/framework/visualisation/react/ui/elements/question_multiple_choice_checkbox.d.ts b/dist/framework/visualisation/react/ui/elements/question_multiple_choice_checkbox.d.ts deleted file mode 100644 index dda6227f..00000000 --- a/dist/framework/visualisation/react/ui/elements/question_multiple_choice_checkbox.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/// -import { PropsUIQuestionMultipleChoiceCheckbox } from '../../../../types/elements'; -import { ReactFactoryContext } from '../../factory'; -interface parentSetter { - parentSetter: (arg: any) => any; -} -type Props = PropsUIQuestionMultipleChoiceCheckbox & parentSetter & ReactFactoryContext; -export declare const MultipleChoiceQuestionCheckbox: (props: Props) => JSX.Element; -export {}; diff --git a/dist/framework/visualisation/react/ui/elements/question_multiple_choice_checkbox.js b/dist/framework/visualisation/react/ui/elements/question_multiple_choice_checkbox.js deleted file mode 100644 index 7f8ec855..00000000 --- a/dist/framework/visualisation/react/ui/elements/question_multiple_choice_checkbox.js +++ /dev/null @@ -1,37 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import React from 'react'; -import { Translator } from '../../../../translator'; -import { Title3 } from './text'; -export const MultipleChoiceQuestionCheckbox = (props) => { - const { question, choices, id, parentSetter, locale } = props; - const [selectedChoices, setSelectedChoices] = React.useState([]); - const copy = prepareCopy(locale); - const setParentState = () => { - parentSetter((prevState) => { - prevState[id] = selectedChoices; - return prevState; - }); - }; - React.useEffect(() => { - setParentState(); - }); - const handleChoiceSelect = (event) => { - const { value, checked } = event.target; - if (checked) { - setSelectedChoices((prevSelectedChoices) => [ - ...prevSelectedChoices, - value - ]); - } - else { - setSelectedChoices((prevSelectedChoices) => prevSelectedChoices.filter((choice) => choice !== value)); - } - }; - return (_jsxs("div", Object.assign({ className: 'p-4' }, { children: [_jsx(Title3, { text: copy.question }), _jsx("ul", Object.assign({ className: 'mt-4 space-y-1' }, { children: copy.choices.map((choice, index) => (_jsx("li", { children: _jsxs("label", Object.assign({ className: 'flex items-center' }, { children: [_jsx("input", { type: 'checkbox', name: 'choice', value: choice, checked: selectedChoices.includes(choice), onChange: handleChoiceSelect, className: 'mr-1 form-checkbox' }), choice] })) }, index))) }))] }))); - function prepareCopy(locale) { - return { - choices: choices.map((choice) => Translator.translate(choice, locale)), - question: Translator.translate(question, locale) - }; - } -}; diff --git a/dist/framework/visualisation/react/ui/elements/question_open.d.ts b/dist/framework/visualisation/react/ui/elements/question_open.d.ts deleted file mode 100644 index 8c9bf4dd..00000000 --- a/dist/framework/visualisation/react/ui/elements/question_open.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/// -import { PropsUIQuestionOpen } from '../../../../types/elements'; -import { ReactFactoryContext } from '../../factory'; -interface parentSetter { - parentSetter: (arg: any) => any; -} -type Props = PropsUIQuestionOpen & parentSetter & ReactFactoryContext; -export declare const OpenQuestion: (props: Props) => JSX.Element; -export {}; diff --git a/dist/framework/visualisation/react/ui/elements/question_open.js b/dist/framework/visualisation/react/ui/elements/question_open.js deleted file mode 100644 index 8d62318f..00000000 --- a/dist/framework/visualisation/react/ui/elements/question_open.js +++ /dev/null @@ -1,27 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import React from 'react'; -import { Translator } from '../../../../translator'; -import { Title3 } from './text'; -export const OpenQuestion = (props) => { - const { question, id, parentSetter, locale } = props; - const [userAnswer, setUserAnswer] = React.useState(''); - const copy = prepareCopy(locale); - const handleInputChange = (event) => { - setUserAnswer(event.target.value); - }; - const setParentState = () => { - parentSetter((prevState) => { - prevState[id] = userAnswer; - return prevState; - }); - }; - React.useEffect(() => { - setParentState(); - }); - return (_jsxs("div", Object.assign({ className: 'p-4' }, { children: [_jsx(Title3, { text: copy.question }), _jsx("input", { type: 'text', value: userAnswer, onChange: handleInputChange, className: 'w-full px-4 py-2 text-gray-700 bg-gray-100 border border-gray-300 rounded-md resize-none h-16' })] }))); - function prepareCopy(locale) { - return { - question: Translator.translate(question, locale) - }; - } -}; diff --git a/dist/framework/visualisation/react/ui/elements/table_container.d.ts b/dist/framework/visualisation/react/ui/elements/table_container.d.ts deleted file mode 100644 index c07f8064..00000000 --- a/dist/framework/visualisation/react/ui/elements/table_container.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -/// -import { TableWithContext } from '../../../../types/elements'; -interface TableContainerProps { - id: string; - table: TableWithContext; - updateTable: (tableId: string, table: TableWithContext) => void; - locale: string; -} -export declare const TableContainer: ({ id, table, updateTable, locale }: TableContainerProps) => JSX.Element; -export {}; diff --git a/dist/framework/visualisation/react/ui/elements/table_container.js b/dist/framework/visualisation/react/ui/elements/table_container.js deleted file mode 100644 index 255b26bd..00000000 --- a/dist/framework/visualisation/react/ui/elements/table_container.js +++ /dev/null @@ -1,114 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { useCallback, useMemo, useState, useEffect, useRef } from 'react'; -import { Figure } from '../elements/figure'; -import { TableItems } from './table_items'; -import { SearchBar } from './search_bar'; -import { Title4 } from './text'; -import TextBundle from '../../../../text_bundle'; -import { Translator } from '../../../../translator'; -import { Table } from './table'; -export const TableContainer = ({ id, table, updateTable, locale }) => { - const tableVisualizations = table.visualizations != null ? table.visualizations : []; - const [searchFilterIds, setSearchFilterIds] = useState(); - const [search, setSearch] = useState(''); - const lastSearch = useRef(''); - const text = useMemo(() => getTranslations(locale), [locale]); - const [show, setShow] = useState(false); - useEffect(() => { - const timer = setTimeout(() => { - const ids = searchRows(table.originalBody.rows, search); - setSearchFilterIds(ids); - if (search !== '' && lastSearch.current === '') - setTimeout(() => setShow(true), 10); - lastSearch.current = search; - }, 300); - return () => clearTimeout(timer); - }, [search, lastSearch]); - const searchedTable = useMemo(() => { - if (searchFilterIds === undefined) - return table; - const filteredRows = table.body.rows.filter((row) => searchFilterIds.has(row.id)); - return Object.assign(Object.assign({}, table), { body: Object.assign(Object.assign({}, table.body), { rows: filteredRows }) }); - }, [table, searchFilterIds]); - const handleDelete = useCallback((rowIds) => { - var _a, _b; - if (rowIds == null) { - if (searchedTable !== null) { - // if no rowIds specified, delete all rows that meet search condition - rowIds = searchedTable.body.rows.map((row) => row.id); - } - else { - return; - } - } - if (rowIds.length > 0) { - if (rowIds.length === ((_b = (_a = searchedTable === null || searchedTable === void 0 ? void 0 : searchedTable.body) === null || _a === void 0 ? void 0 : _a.rows) === null || _b === void 0 ? void 0 : _b.length)) { - setSearch(''); - setSearchFilterIds(undefined); - } - const deletedRows = [...table.deletedRows, rowIds]; - const newTable = deleteTableRows(table, deletedRows); - updateTable(id, newTable); - } - }, [id, table, searchedTable]); - const handleUndo = useCallback(() => { - const deletedRows = table.deletedRows.slice(0, -1); - const newTable = deleteTableRows(table, deletedRows); - updateTable(id, newTable); - }, [id, table]); - return (_jsx("div", Object.assign({ className: 'p-4 flex flex-col gap-4 w-full overflow-hidden border border-[0.2rem] border-grey4 rounded-lg' }, { children: _jsxs("div", Object.assign({ className: 'flex flex-wrap ' }, { children: [_jsxs("div", Object.assign({ className: 'flex justify-between w-full ' }, { children: [_jsx(Title4, { text: table.title, margin: 'mb-2' }), _jsx(SearchBar, { placeholder: text.searchPlaceholder, search: search, onSearch: setSearch })] }), 'Title'), _jsxs("div", Object.assign({ className: 'flex items-center justify-between w-full my-1 py-1 rounded ' }, { children: [_jsx(TableItems, { table: table, searchedTable: searchedTable, locale: locale }), _jsxs("button", Object.assign({ className: ' flex end gap-3 animate-fadeIn', onClick: () => setShow(!show) }, { children: [_jsx("div", Object.assign({ className: 'text-primary' }, { children: show ? zoomOutIcon : zoomInIcon }), 'zoomout'), _jsx("div", Object.assign({ className: 'text-right' }, { children: show ? text.hideTable : text.showTable }), 'zoomin')] }), show ? 'animate' : '')] }), 'TableSummary'), _jsx("div", Object.assign({ className: 'w-full ' }, { children: _jsx("div", Object.assign({ className: '' }, { children: _jsx(Table, { show: show, table: searchedTable, search: search, handleDelete: handleDelete, handleUndo: handleUndo, locale: locale }) })) }), 'Table'), _jsx("div", Object.assign({ className: `pt-2 grid w-full gap-4 transition-all ${tableVisualizations.length > 0 ? '' : 'hidden'}` }, { children: tableVisualizations.map((vs, i) => { - return (_jsx("div", Object.assign({ className: 'p-3 bg-grey6 rounded-md border border-[0.2rem] border-grey4 w-full overflow-auto' }, { children: _jsx(Figure, { table: searchedTable, visualization: vs, locale: locale, handleDelete: handleDelete, handleUndo: handleUndo }) }), `${table.id}_${i}`)); - }) }), 'Visualizations')] })) }), table.id)); -}; -function deleteTableRows(table, deletedRows) { - const deleteIds = new Set(); - for (const deletedSet of deletedRows) { - for (const id of deletedSet) { - deleteIds.add(id); - } - } - const rows = table.originalBody.rows.filter((row) => !deleteIds.has(row.id)); - const deletedRowCount = table.originalBody.rows.length - rows.length; - return Object.assign(Object.assign({}, table), { body: Object.assign(Object.assign({}, table.body), { rows }), deletedRowCount, deletedRows }); -} -function searchRows(rows, search) { - if (search.trim() === '') - return undefined; - // Not sure whether it's better to look for one of the words or exact string. - // Now going for exact string. Note that if you change this, you should also change - // the highlighting behavior in table.tsx () - // const query = search.trim().split(/\s+/) - const query = [search.trim()]; - const regexes = []; - for (const q of query) - regexes.push(new RegExp(q.replace(/[-/\\^$*+?.()|[\]{}]/, '\\$&'), 'i')); - const ids = new Set(); - for (const row of rows) { - for (const regex of regexes) { - let anyCellMatches = false; - for (const cell of row.cells) { - if (regex.test(cell.text)) { - anyCellMatches = true; - break; - } - } - if (anyCellMatches) - ids.add(row.id); - } - } - return ids; -} -const zoomInIcon = (_jsx("svg", Object.assign({ className: 'h-6 w-6', fill: 'none', stroke: 'currentColor', strokeWidth: '2', viewBox: '0 0 24 24', xmlns: 'http://www.w3.org/2000/svg', "aria-hidden": 'true' }, { children: _jsx("path", { strokeLinecap: 'round', strokeLinejoin: 'round', d: 'M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607zM10.5 7.5v6m3-3h-6' }) }))); -const zoomOutIcon = (_jsx("svg", Object.assign({ className: 'h-6 w-6', fill: 'none', stroke: 'currentColor', strokeWidth: '2', viewBox: '0 0 24 24', xmlns: 'http://www.w3.org/2000/svg', "aria-hidden": 'true' }, { children: _jsx("path", { strokeLinecap: 'round', strokeLinejoin: 'round', d: 'M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607zM13.5 10.5h-6' }) }))); -function getTranslations(locale) { - const translated = {}; - for (const [key, value] of Object.entries(translations)) { - translated[key] = Translator.translate(value, locale); - } - return translated; -} -const translations = { - searchPlaceholder: new TextBundle().add('en', 'Search').add('nl', 'Zoeken'), - showTable: new TextBundle().add('en', 'Show table').add('nl', 'Tabel tonen'), - hideTable: new TextBundle().add('en', 'Hide table').add('nl', 'Tabel verbergen') -}; diff --git a/dist/framework/visualisation/react/ui/elements/table_items.d.ts b/dist/framework/visualisation/react/ui/elements/table_items.d.ts deleted file mode 100644 index b4136a00..00000000 --- a/dist/framework/visualisation/react/ui/elements/table_items.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/// -import { TableWithContext } from '../../../../types/elements'; -interface Props { - table: TableWithContext; - searchedTable: TableWithContext; - locale: string; -} -export declare const TableItems: ({ table, searchedTable, locale }: Props) => JSX.Element; -export {}; diff --git a/dist/framework/visualisation/react/ui/elements/table_items.js b/dist/framework/visualisation/react/ui/elements/table_items.js deleted file mode 100644 index add7af9c..00000000 --- a/dist/framework/visualisation/react/ui/elements/table_items.js +++ /dev/null @@ -1,29 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { useMemo } from 'react'; -import TextBundle from '../../../../text_bundle'; -import { Translator } from '../../../../translator'; -export const TableItems = ({ table, searchedTable, locale }) => { - const text = useMemo(() => getTranslations(locale), [locale]); - const deleted = table.deletedRowCount; - const n = table.body.rows.length; - const searched = searchedTable.body.rows.length; - const total = table.originalBody.rows.length - table.deletedRowCount; - const nLabel = n.toLocaleString(locale, { useGrouping: true }); - const totalLabel = total.toLocaleString(locale, { useGrouping: true }); - const searchLabel = searched.toLocaleString(locale, { useGrouping: true }); - const deletedLabel = deleted.toLocaleString('en', { useGrouping: true }) + ' ' + text.deleted; - return (_jsxs("div", Object.assign({ className: 'flex min-w-[200px] gap-1' }, { children: [_jsx("div", Object.assign({ className: 'flex items-center ' }, { children: tableIcon })), _jsxs("div", Object.assign({ className: 'flex flex-wrap items-center pl-2 gap-x-2 animate-fadeIn text-lg text-title6 font-label ' }, { children: [_jsxs("div", { children: [table.head.cells.length, " ", text.columns, ","] }), _jsxs("div", Object.assign({ className: 'animate-fadeIn' }, { children: [searched < n ? searchLabel + ' / ' + nLabel : nLabel, " ", text.rows] }), totalLabel), _jsxs("div", Object.assign({ className: `flex text-grey2 ${deleted > 0 ? '' : 'hidden'}` }, { children: ["(", deletedLabel, ")"] }))] }), `${totalLabel}_${deleted}`)] }))); -}; -const tableIcon = (_jsxs("svg", Object.assign({ className: 'h-9', viewBox: '4 4 18 18', fill: 'none', xmlns: 'http://www.w3.org/2000/svg' }, { children: [_jsx("rect", { x: '9', y: '9', width: '4', height: '2', fill: '#4272EF' }), _jsx("rect", { x: '9', y: '13', width: '4', height: '2', fill: '#4272EF' }), _jsx("rect", { x: '9', y: '17', width: '4', height: '2', fill: '#4272EF' }), _jsx("rect", { x: '15', y: '9', width: '4', height: '2', fill: '#4272EF' }), _jsx("rect", { x: '15', y: '13', width: '4', height: '2', fill: '#4272EF' }), _jsx("rect", { x: '15', y: '17', width: '4', height: '2', fill: '#4272EF' }), _jsx("rect", { x: '4', y: '4', width: '15', height: '3', fill: '#4272EF' }), _jsx("rect", { x: '4', y: '9', width: '3', height: '10', fill: '#4272EF' })] }))); -function getTranslations(locale) { - const translated = {}; - for (const [key, value] of Object.entries(translations)) { - translated[key] = Translator.translate(value, locale); - } - return translated; -} -const translations = { - columns: new TextBundle().add('en', 'columns').add('nl', 'kolommen'), - rows: new TextBundle().add('en', 'rows').add('nl', 'rijen'), - deleted: new TextBundle().add('en', 'deleted').add('nl', 'verwijderd') -}; diff --git a/dist/framework/visualisation/react/ui/hooks/useResponsiveScreenSize.d.ts b/dist/framework/visualisation/react/ui/hooks/useResponsiveScreenSize.d.ts deleted file mode 100644 index e958c379..00000000 --- a/dist/framework/visualisation/react/ui/hooks/useResponsiveScreenSize.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function useResponsiveScreen(): void; diff --git a/dist/framework/visualisation/react/ui/hooks/useResponsiveScreenSize.js b/dist/framework/visualisation/react/ui/hooks/useResponsiveScreenSize.js deleted file mode 100644 index fb2e2eb3..00000000 --- a/dist/framework/visualisation/react/ui/hooks/useResponsiveScreenSize.js +++ /dev/null @@ -1,40 +0,0 @@ -import { useEffect } from 'react'; -// somehow, taking the full height/width sometimes causes overflows. -// subtracing 1 seems to work, but I can't explain why -const darkmass = 1; -export default function useResponsiveScreen() { - useEffect(() => { - var _a, _b; - // Listen for changes to screen size and orientation - window.addEventListener('resize', updateSize); - if (((_a = window === null || window === void 0 ? void 0 : window.screen) === null || _a === void 0 ? void 0 : _a.orientation) !== undefined) { - (_b = window.screen.orientation) === null || _b === void 0 ? void 0 : _b.addEventListener('change', updateSize); - } - return () => { - var _a; - window.removeEventListener('resize', updateSize); - if (((_a = window === null || window === void 0 ? void 0 : window.screen) === null || _a === void 0 ? void 0 : _a.orientation) !== undefined) { - window.screen.orientation.removeEventListener('change', updateSize); - } - }; - }, []); - useEffect(() => { - // set initial size - updateSize(); - // listening for orientation and size changes doesn't always work and on some devices - // size isn't properly set on mount. Therefore also just check the size repeatedly. - // Shouldn't be too expensive, since it only updates on change - const interval = setInterval(updateSize, 1000); - return () => clearInterval(interval); - }, []); -} -function updateSize() { - const height = `${window.innerHeight - darkmass}px`; - const width = `${document.documentElement.clientWidth - darkmass}px`; - if (height !== document.documentElement.style.getPropertyValue('--screen-height')) { - document.documentElement.style.setProperty('--screen-height', height); - } - if (width !== document.documentElement.style.getPropertyValue('--screen-width')) { - document.documentElement.style.setProperty('--screen-width', width); - } -} diff --git a/dist/framework/visualisation/react/ui/hooks/useUnloadWarning.d.ts b/dist/framework/visualisation/react/ui/hooks/useUnloadWarning.d.ts deleted file mode 100644 index ccb2c7c0..00000000 --- a/dist/framework/visualisation/react/ui/hooks/useUnloadWarning.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function useUnloadWarning(disable?: boolean): void; diff --git a/dist/framework/visualisation/react/ui/hooks/useUnloadWarning.js b/dist/framework/visualisation/react/ui/hooks/useUnloadWarning.js deleted file mode 100644 index c953eedd..00000000 --- a/dist/framework/visualisation/react/ui/hooks/useUnloadWarning.js +++ /dev/null @@ -1,16 +0,0 @@ -import { useEffect } from 'react'; -export default function useUnloadWarning(disable) { - useEffect(() => { - // Warn users that they will lose their progress if they leave the page. - // Should use this in components where such as warning is acceptable. - const handleBeforeUnload = (e) => { - e.returnValue = 'If you leave now, any changes made in the current unit will not be saved.'; // most browsers actually show default message - }; - if (disable !== null && disable !== void 0 ? disable : false) - return; - window.addEventListener('beforeunload', handleBeforeUnload); - return () => { - window.removeEventListener('beforeunload', handleBeforeUnload); - }; - }, [disable]); -} diff --git a/dist/framework/visualisation/react/ui/hooks/useVisualizationData.d.ts b/dist/framework/visualisation/react/ui/hooks/useVisualizationData.d.ts deleted file mode 100644 index 4a5654a9..00000000 --- a/dist/framework/visualisation/react/ui/hooks/useVisualizationData.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { TableWithContext } from '../../../../types/elements'; -import { VisualizationType, VisualizationData } from '../../../../types/visualizations'; -type Status = 'loading' | 'success' | 'error'; -export default function useVisualizationData(table: TableWithContext, visualization: VisualizationType): [VisualizationData | undefined, Status]; -export {}; diff --git a/dist/framework/visualisation/react/ui/hooks/useVisualizationData.js b/dist/framework/visualisation/react/ui/hooks/useVisualizationData.js deleted file mode 100644 index 1e2f000a..00000000 --- a/dist/framework/visualisation/react/ui/hooks/useVisualizationData.js +++ /dev/null @@ -1,24 +0,0 @@ -import { useEffect, useState } from 'react'; -export default function useVisualizationData(table, visualization) { - const [visualizationData, setVisualizationData] = useState(); - const [status, setStatus] = useState('loading'); - const [worker, setWorker] = useState(); - useEffect(() => { - const worker = new Worker(new URL('../workers/visualizationDataWorker.ts', import.meta.url)); - setWorker(worker); - return () => { - worker.terminate(); - }; - }, []); - useEffect(() => { - if ((worker != null) && (window.Worker !== undefined)) { - setStatus('loading'); - worker.onmessage = (e) => { - setStatus(e.data.status); - setVisualizationData(e.data.visualizationData); - }; - worker.postMessage({ table, visualization }); - } - }, [table, visualization, worker]); - return [visualizationData, status]; -} diff --git a/dist/framework/visualisation/react/ui/pages/error_page.d.ts b/dist/framework/visualisation/react/ui/pages/error_page.d.ts deleted file mode 100644 index 8e58d89e..00000000 --- a/dist/framework/visualisation/react/ui/pages/error_page.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// -import { Weak } from '../../../../helpers'; -import { PropsUIPageError } from '../../../../types/pages'; -import { ReactFactoryContext } from '../../factory'; -type Props = Weak & ReactFactoryContext; -export declare const ErrorPage: (props: Props) => JSX.Element; -export {}; diff --git a/dist/framework/visualisation/react/ui/pages/error_page.js b/dist/framework/visualisation/react/ui/pages/error_page.js deleted file mode 100644 index b880de34..00000000 --- a/dist/framework/visualisation/react/ui/pages/error_page.js +++ /dev/null @@ -1,27 +0,0 @@ -import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime"; -import { Footer } from './templates/footer'; -import { Page } from './templates/page'; -import TextBundle from '../../../../text_bundle'; -import { Translator } from '../../../../translator'; -import { BodyLarge, Title1 } from '../elements/text'; -export const ErrorPage = (props) => { - window.scrollTo(0, 0); - const { stacktrace } = props; - const { title, text } = prepareCopy(props); - const footer = _jsx(Footer, {}); - const sidebar = _jsx(_Fragment, { children: " " }); - const body = (_jsxs(_Fragment, { children: [_jsx(Title1, { text: title }), _jsx(BodyLarge, { text: text }), _jsx(BodyLarge, { text: stacktrace })] })); - return (_jsx(Page, { sidebar: sidebar, body: body, footer: footer })); -}; -function prepareCopy({ locale }) { - return { - title: Translator.translate(title, locale), - text: Translator.translate(text, locale) - }; -} -const title = new TextBundle() - .add('en', 'Error, not your fault!') - .add('nl', 'Foutje, niet jouw schuld!'); -const text = new TextBundle() - .add('en', 'Consult the researcher, or close the page') - .add('nl', 'Raadpleeg de onderzoeker of sluit de pagina'); diff --git a/dist/framework/visualisation/react/ui/prompts/questionnaire.d.ts b/dist/framework/visualisation/react/ui/prompts/questionnaire.d.ts deleted file mode 100644 index 10ddc8e5..00000000 --- a/dist/framework/visualisation/react/ui/prompts/questionnaire.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// -import { ReactFactoryContext } from '../../factory'; -import { Weak } from '../../../../helpers'; -import { PropsUIPromptQuestionnaire } from '../../../../types/prompts'; -type Props = Weak & ReactFactoryContext; -export declare const Questionnaire: (props: Props) => JSX.Element; -export {}; diff --git a/dist/framework/visualisation/react/ui/prompts/questionnaire.js b/dist/framework/visualisation/react/ui/prompts/questionnaire.js deleted file mode 100644 index 606e866a..00000000 --- a/dist/framework/visualisation/react/ui/prompts/questionnaire.js +++ /dev/null @@ -1,49 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import React from 'react'; -import TextBundle from '../../../../text_bundle'; -import { PrimaryButton } from '../elements/button'; -import { Translator } from '../../../../translator'; -import { isPropsUIQuestionMultipleChoice, isPropsUIQuestionMultipleChoiceCheckbox, isPropsUIQuestionOpen } from '../../../../types/elements'; -import { MultipleChoiceQuestion } from '../../ui/elements/question_multiple_choice'; -import { MultipleChoiceQuestionCheckbox } from '../../ui/elements/question_multiple_choice_checkbox'; -import { OpenQuestion } from '../../ui/elements/question_open'; -export const Questionnaire = (props) => { - const { questions, description, resolve, locale } = props; - const [answers, setAnswers] = React.useState({}); - const copy = prepareCopy(locale); - function handleDonate() { - const value = JSON.stringify(answers); - resolve === null || resolve === void 0 ? void 0 : resolve({ __type__: 'PayloadJSON', value }); - } - // Still here in case case we need a cancel button click event handler - // function handleCancel (): void { - // resolve?.({ __type__: 'PayloadFalse', value: false }) - // } - const renderQuestion = (item) => { - if (isPropsUIQuestionMultipleChoice(item)) { - return (_jsx("div", { children: _jsx(MultipleChoiceQuestion, Object.assign({}, item, { locale: locale, parentSetter: setAnswers })) }, item.id)); - } - if (isPropsUIQuestionMultipleChoiceCheckbox(item)) { - return (_jsx("div", { children: _jsx(MultipleChoiceQuestionCheckbox, Object.assign({}, item, { locale: locale, parentSetter: setAnswers })) }, item.id)); - } - if (isPropsUIQuestionOpen(item)) { - return (_jsx("div", { children: _jsx(OpenQuestion, Object.assign({}, item, { locale: locale, parentSetter: setAnswers })) }, item.id)); - } - else { - return (_jsx("div", {})); - } - }; - const renderQuestions = () => { - return questions.map((item) => renderQuestion(item)); - }; - return (_jsxs("div", { children: [_jsx("div", Object.assign({ className: 'flex-wrap text-bodylarge font-body text-grey1 text-left' }, { children: copy.description })), _jsx("div", { children: renderQuestions() }), _jsx("div", Object.assign({ className: 'flex flex-row gap-4 mt-4 mb-4' }, { children: _jsx(PrimaryButton, { label: copy.continueLabel, onClick: handleDonate, color: 'bg-success text-white' }) }))] })); - function prepareCopy(locale) { - return { - description: Translator.translate(description, locale), - continueLabel: Translator.translate(continueLabel, locale) - }; - } -}; -const continueLabel = new TextBundle() - .add('en', 'Continue') - .add('nl', 'Verder'); diff --git a/dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/prepareChartData.d.ts b/dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/prepareChartData.d.ts deleted file mode 100644 index 49ebd825..00000000 --- a/dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/prepareChartData.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { PropsUITable, TableContext } from '../../../../../types/elements'; -import { ChartVisualizationData, ChartVisualization } from '../../../../../types/visualizations'; -export declare function prepareChartData(table: PropsUITable & TableContext, visualization: ChartVisualization): Promise; -export interface PrepareAggregatedData { - xLabel: string; - xValue: string; - values: Record; - rowIds: Record; - sortBy: number | string; -} diff --git a/dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/prepareChartData.js b/dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/prepareChartData.js deleted file mode 100644 index 6909d488..00000000 --- a/dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/prepareChartData.js +++ /dev/null @@ -1,131 +0,0 @@ -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -import { formatDate, getTableColumn } from './util'; -export function prepareChartData(table, visualization) { - var _a, _b, _c; - return __awaiter(this, void 0, void 0, function* () { - const visualizationData = { - type: visualization.type, - xKey: { - label: visualization.group.label !== undefined - ? visualization.group.label - : visualization.group.column - }, - yKeys: {}, - data: [] - }; - if (table.body.rows.length === 0) - return visualizationData; - // First get the unique values of the x column - const rowIds = table.body.rows.map((row) => row.id); - let groupBy = getTableColumn(table, visualization.group.column); - // KASPER CHECK: I think the first clause in the statement can go - // getTableColumn will return a string array or errs out - // so only check for length is still doing something - if (groupBy.length === 0) { - throw new Error(`X column ${table.id}.${visualization.group.column} not found`); - } - let xSortable = null; // separate variable allows using epoch time for sorting dates - // ADD CODE TO TRANSFORM TO DATE, BUT THEN ALSO KEEP AN INDEX BASED ON THE DATE ORDER - if (visualization.group.dateFormat !== undefined) { - ; - [groupBy, xSortable] = formatDate(groupBy, visualization.group.dateFormat); - } - const aggregate = {}; - for (const value of visualization.values) { - const aggFun = value.aggregate !== undefined ? value.aggregate : 'count'; - let tickerFormat = 'default'; - if (aggFun === 'pct' || aggFun === 'count_pct') - tickerFormat = 'percent'; - const yValues = getTableColumn(table, value.column); - // KASPER CHECK - if (yValues.length === 0) - throw new Error(`Y column ${table.id}.${value.column} not found`); - // If group_by column is specified, the columns in the aggregated data will be the unique group_by columns - const yGroup = value.group_by !== undefined ? getTableColumn(table, value.group_by) : null; - // if missing values should be treated as zero, we need to add the missing values after knowing all groups - const addZeroes = (_a = value.addZeroes) !== null && _a !== void 0 ? _a : false; - const groupSummary = {}; - const uniqueGroups = new Set([]); - for (let i = 0; i < groupBy.length; i++) { - const xValue = groupBy[i]; - const yValue = yValues[i]; - const group = yGroup != null ? yGroup[i] : value.label !== undefined ? value.label : value.column; - if (addZeroes) - uniqueGroups.add(group); - const sortBy = xSortable != null ? xSortable[i] : groupBy[i]; - // calculate group summary statistics. This is used for the mean, pct and count_pct aggregations - if (groupSummary[group] === undefined) - groupSummary[group] = { n: 0, sum: 0 }; - if (aggFun === 'count_pct' || aggFun === 'mean') - groupSummary[group].n += 1; - if (aggFun === 'pct') - groupSummary[group].sum += (_b = Number(yValue)) !== null && _b !== void 0 ? _b : 0; - // add the AxisSettings for the yKeys in this loop, because we need to get the unique group values from the data (if group_by is used) - if (visualizationData.yKeys[group] === undefined) { - visualizationData.yKeys[group] = { - label: group, - secondAxis: value.secondAxis !== undefined, - tickerFormat - }; - } - if (aggregate[xValue] === undefined) { - aggregate[xValue] = { - sortBy: sortBy, - rowIds: {}, - xLabel: visualizationData.xKey.label, - xValue: String(xValue), - values: {} - }; - } - if (aggregate[xValue].rowIds[group] === undefined) - aggregate[xValue].rowIds[group] = []; - aggregate[xValue].rowIds[group].push(rowIds[i]); - if (aggregate[xValue].values[group] === undefined) - aggregate[xValue].values[group] = 0; - if (aggFun === 'count' || aggFun === 'count_pct') - aggregate[xValue].values[group] += 1; - if (aggFun === 'sum' || aggFun === 'mean' || aggFun === 'pct') { - aggregate[xValue].values[group] += (_c = Number(yValue)) !== null && _c !== void 0 ? _c : 0; - } - } - Object.keys(groupSummary).forEach((group) => { - for (const xValue of Object.keys(aggregate)) { - if (aggregate[xValue].values[group] === undefined) { - if (addZeroes) - aggregate[xValue].values[group] = 0; - else - continue; - } - if (aggFun === 'mean') { - aggregate[xValue].values[group] = - Number(aggregate[xValue].values[group]) / groupSummary[group].n; - } - if (aggFun === 'count_pct') { - aggregate[xValue].values[group] = - (100 * Number(aggregate[xValue].values[group])) / groupSummary[group].n; - } - if (aggFun === 'pct') { - aggregate[xValue].values[group] = - (100 * Number(aggregate[xValue].values[group])) / groupSummary[group].sum; - } - } - }); - } - visualizationData.data = Object.values(aggregate) - .sort((a, b) => (a.sortBy < b.sortBy ? -1 : b.sortBy < a.sortBy ? 1 : 0)) - .map((d) => { - for (const key of Object.keys(d.values)) - d.values[key] = Math.round(d.values[key] * 100) / 100; - return Object.assign(Object.assign({}, d.values), { [d.xLabel]: d.xValue, __rowIds: d.rowIds, __sortBy: d.sortBy }); - }); - return visualizationData; - }); -} diff --git a/dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/prepareTextData.d.ts b/dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/prepareTextData.d.ts deleted file mode 100644 index f801f5e0..00000000 --- a/dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/prepareTextData.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { PropsUITable, TableContext } from '../../../../../types/elements'; -import { TextVisualizationData, TextVisualization } from '../../../../../types/visualizations'; -export declare function prepareTextData(table: PropsUITable & TableContext, visualization: TextVisualization): Promise; diff --git a/dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/prepareTextData.js b/dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/prepareTextData.js deleted file mode 100644 index 9b851965..00000000 --- a/dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/prepareTextData.js +++ /dev/null @@ -1,67 +0,0 @@ -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -import { getTableColumn, rescaleToRange, tokenize } from './util'; -export function prepareTextData(table, visualization) { - return __awaiter(this, void 0, void 0, function* () { - const visualizationData = { - type: visualization.type, - topTerms: [] - }; - if (table.body.rows.length === 0) - return visualizationData; - const texts = getTableColumn(table, visualization.textColumn); - const values = visualization.valueColumn != null ? getTableColumn(table, visualization.valueColumn) : null; - const vocabulary = getVocabulary(texts, values, visualization); - visualizationData.topTerms = getTopTerms(vocabulary, texts.length, 200); - return visualizationData; - }); -} -function getVocabulary(texts, values, visualization) { - var _a; - const vocabulary = {}; - for (let i = 0; i < texts.length; i++) { - if ((texts === null || texts === void 0 ? void 0 : texts[i]) == null) - continue; - const text = texts[i]; - const tokens = visualization.tokenize != null && visualization.tokenize ? tokenize(text) : [text]; - const seen = new Set(); - for (const token of tokens) { - if (vocabulary[token] === undefined) - vocabulary[token] = { value: 0, docFreq: 0 }; - if (!seen.has(token)) { - vocabulary[token].docFreq += 1; - seen.add(token); - } - const v = (_a = Number(values === null || values === void 0 ? void 0 : values[i])) !== null && _a !== void 0 ? _a : 1; - if (!isNaN(v)) - vocabulary[token].value += v; - } - } - return vocabulary; -} -function getTopTerms(vocabulary, nDocs, topTerms) { - const words = Object.entries(vocabulary) - .map(([text, stats]) => { - const tf = Math.log(1 + stats.value); - const idf = Math.log(nDocs / stats.docFreq); - return { text, value: stats.value, importance: tf * idf }; - }) - .sort((a, b) => b.importance - a.importance) - .slice(0, topTerms); - const minImportance = Math.min(...words.map((w) => w.importance)); - const maxImportance = Math.max(...words.map((w) => w.importance)); - return words.map((w) => { - return { - text: w.text, - value: w.value, - importance: rescaleToRange(w.importance, minImportance, maxImportance, 0, 1) - }; - }); -} diff --git a/dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/util.d.ts b/dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/util.d.ts deleted file mode 100644 index b1f042df..00000000 --- a/dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/util.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { PropsUITable, TableContext } from '../../../../../types/elements'; -import { DateFormat } from '../../../../../types/visualizations'; -export declare function autoFormatDate(dateNumbers: number[], minValues: number): DateFormat; -export declare function formatDate(dateString: string[], format: DateFormat, minValues?: number): [string[], number[] | null]; -export declare function tokenize(text: string): string[]; -export declare function getTableColumn(table: PropsUITable & TableContext, column: string): string[]; -export declare function rescaleToRange(value: number, min: number, max: number, newMin: number, newMax: number): number; diff --git a/dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/util.js b/dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/util.js deleted file mode 100644 index d978a848..00000000 --- a/dist/framework/visualisation/react/ui/workers/visualizationDataFunctions/util.js +++ /dev/null @@ -1,83 +0,0 @@ -export function autoFormatDate(dateNumbers, minValues) { - const minTime = Math.min(...dateNumbers); - const maxTime = Math.max(...dateNumbers); - let autoFormat = 'hour'; - if (maxTime - minTime > 1000 * 60 * 60 * 24 * minValues) - autoFormat = 'day'; - if (maxTime - minTime > 1000 * 60 * 60 * 24 * 30 * minValues) - autoFormat = 'month'; - if (maxTime - minTime > 1000 * 60 * 60 * 24 * 30 * 3 * minValues) - autoFormat = 'quarter'; - if (maxTime - minTime > 1000 * 60 * 60 * 24 * 365 * minValues) - autoFormat = 'year'; - return autoFormat; -} -export function formatDate(dateString, format, minValues = 10) { - let formattedDate = dateString; - const dateNumbers = dateString.map((date) => new Date(date).getTime()); - let sortableDate = null; - if (format === 'auto') - format = autoFormatDate(dateNumbers, minValues); - if (format === 'year') { - formattedDate = dateNumbers.map((date) => new Date(date).getFullYear().toString()); - sortableDate = dateNumbers; - } - if (format === 'quarter') { - formattedDate = dateNumbers.map((date) => { - const year = new Date(date).getFullYear().toString(); - const quarter = Math.floor(new Date(date).getMonth() / 3) + 1; - return `${year}-Q${quarter}`; - }); - sortableDate = dateNumbers; - } - if (format === 'month') { - formattedDate = dateNumbers.map((date) => { - const year = new Date(date).getFullYear().toString(); - const month = new Date(date).toLocaleString('default', { month: 'short' }); - return year + '-' + month; - }); - sortableDate = dateNumbers; - } - if (format === 'day') { - formattedDate = dateNumbers.map((date) => new Date(date).toISOString().split('T')[0]); - sortableDate = dateNumbers; - } - if (format === 'hour') { - formattedDate = dateNumbers.map((date) => new Date(date).toISOString().split('T')[1].split(':')[0]); - sortableDate = dateNumbers; - } - if (format === 'month_cycle') { - const formatter = new Intl.DateTimeFormat('default', { month: 'long' }); - formattedDate = dateNumbers.map((date) => formatter.format(new Date(date))); - sortableDate = dateNumbers.map((date) => new Date(date).getMonth()); - } - if (format === 'weekday_cycle') { - const formatter = new Intl.DateTimeFormat('default', { weekday: 'long' }); - formattedDate = dateNumbers.map((date) => formatter.format(new Date(date))); - sortableDate = dateNumbers.map((date) => new Date(date).getDay()); - } - if (format === 'day_cycle') { - const formatter = new Intl.DateTimeFormat('default', { day: 'numeric' }); - formattedDate = dateNumbers.map((date) => formatter.format(new Date(date))); - sortableDate = dateNumbers.map((date) => new Date(date).getDay()); - } - if (format === 'hour_cycle') { - const formatter = new Intl.DateTimeFormat('default', { hour: 'numeric' }); - formattedDate = dateNumbers.map((date) => formatter.format(new Date(date))); - sortableDate = dateNumbers.map((date) => new Date(date).getHours()); - } - return [formattedDate, sortableDate]; -} -export function tokenize(text) { - const tokens = text.split(' '); - return tokens.filter((token) => /\p{L}/giu.test(token)); // only tokens with word characters -} -export function getTableColumn(table, column) { - const columnIndex = table.head.cells.findIndex((cell) => cell.text === column); - if (columnIndex < 0) - throw new Error(`column ${table.id}.${column} not found`); - return table.body.rows.map((row) => row.cells[columnIndex].text); -} -export function rescaleToRange(value, min, max, newMin, newMax) { - return ((value - min) / (max - min)) * (newMax - newMin) + newMin; -} diff --git a/dist/framework/visualisation/react/ui/workers/visualizationDataWorker.d.ts b/dist/framework/visualisation/react/ui/workers/visualizationDataWorker.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/dist/framework/visualisation/react/ui/workers/visualizationDataWorker.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/dist/framework/visualisation/react/ui/workers/visualizationDataWorker.js b/dist/framework/visualisation/react/ui/workers/visualizationDataWorker.js deleted file mode 100644 index 56424dfd..00000000 --- a/dist/framework/visualisation/react/ui/workers/visualizationDataWorker.js +++ /dev/null @@ -1,34 +0,0 @@ -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -import { prepareChartData } from './visualizationDataFunctions/prepareChartData'; -import { prepareTextData } from './visualizationDataFunctions/prepareTextData'; -self.onmessage = (e) => { - createVisualizationData(e.data.table, e.data.visualization) - .then((visualizationData) => { - self.postMessage({ status: 'success', visualizationData }); - }) - .catch((error) => { - console.error(error); - self.postMessage({ status: 'error', visualizationData: undefined }); - }); -}; -function createVisualizationData(table, visualization) { - return __awaiter(this, void 0, void 0, function* () { - if (table === undefined || visualization === undefined) - throw new Error('Table and visualization are required'); - if (['line', 'bar', 'area'].includes(visualization.type)) { - return yield prepareChartData(table, visualization); - } - if (['wordcloud'].includes(visualization.type)) { - return yield prepareTextData(table, visualization); - } - throw new Error(`Visualization type ${visualization.type} not supported`); - }); -} diff --git a/package-lock.json b/package-lock.json index c0ed2861..3bed95fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,21 +15,14 @@ "@types/node": "^16.11.59", "@types/react": "^18.0.21", "@types/react-dom": "^18.0.6", - "@visx/responsive": "^3.3.0", - "@visx/scale": "^3.3.0", - "@visx/text": "^3.3.0", - "@visx/wordcloud": "^3.3.0", "concurrently": "^8.2.1", "lodash": "^4.17.21", "lottie-react": "^2.3.1", - "react-highlight-words": "^0.20.0", - "recharts": "^2.7.1", "typescript": "^4.4.3", "web-vitals": "^2.1.4" }, "devDependencies": { "@types/lodash": "^4.14.185", - "@types/react-highlight-words": "^0.16.4", "autoprefixer": "^10.4.12", "husky": "^8.0.1", "nodemon": "^2.0.20", @@ -37,7 +30,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-scripts": "5.0.1", - "tailwindcss": "^3.3.3", + "tailwindcss": "^3.1.8", "ts-standard": "^11.0.0" } }, @@ -46,18 +39,6 @@ "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz", "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==" }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -3578,88 +3559,6 @@ "@types/node": "*" } }, - "node_modules/@types/d3": { - "version": "3.5.49", - "resolved": "https://registry.npmjs.org/@types/d3/-/d3-3.5.49.tgz", - "integrity": "sha512-khhSZi6pn4K/7ReH264ZSsD4/yzWZpHDph9yqjILGnwJabm2lTH4lkjHqn4LyELN9bkFul7VLD7j3NjHDvkquQ==" - }, - "node_modules/@types/d3-array": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.3.tgz", - "integrity": "sha512-Reoy+pKnvsksN0lQUlcH6dOGjRZ/3WRwXR//m+/8lt1BXeI4xyaUZoqULNjyXXRuh0Mj4LNpkCvhUpQlY3X5xQ==" - }, - "node_modules/@types/d3-cloud": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/d3-cloud/-/d3-cloud-1.2.5.tgz", - "integrity": "sha512-vEIER9DsEBUOdpRiwCh3n1qE+cV6h4e1LhxhY2sLt+m8LPNAIkOOhTlqk0JDiBwD+ZPM8ynFAOU3AuPuVYBFBA==", - "dependencies": { - "@types/d3": "^3" - } - }, - "node_modules/@types/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA==" - }, - "node_modules/@types/d3-delaunay": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.1.tgz", - "integrity": "sha512-tLxQ2sfT0p6sxdG75c6f/ekqxjyYR0+LwPrsO1mbC9YDBzPJhs2HbJJRrn8Ez1DBoHRo2yx7YEATI+8V1nGMnQ==" - }, - "node_modules/@types/d3-ease": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz", - "integrity": "sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA==" - }, - "node_modules/@types/d3-format": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.1.tgz", - "integrity": "sha512-5KY70ifCCzorkLuIkDe0Z9YTf9RR2CjBX1iaJG+rgM/cPP+sO+q9YdQ9WdhQcgPj1EQiJ2/0+yUkkziTG6Lubg==" - }, - "node_modules/@types/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==", - "dependencies": { - "@types/d3-color": "*" - } - }, - "node_modules/@types/d3-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.0.tgz", - "integrity": "sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg==" - }, - "node_modules/@types/d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-Yk4htunhPAwN0XGlIwArRomOjdoBFXC3+kCxK2Ubg7I9shQlVSJy/pG/Ht5ASN+gdMIalpk8TJ5xV74jFsetLA==", - "dependencies": { - "@types/d3-time": "*" - } - }, - "node_modules/@types/d3-shape": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.3.tgz", - "integrity": "sha512-cHMdIq+rhF5IVwAV7t61pcEXfEHsEsrbBUPkFGBwTXuxtTAkBBrnrNA8++6OWm3jwVsXoZYQM8NEekg6CPJ3zw==", - "dependencies": { - "@types/d3-path": "*" - } - }, - "node_modules/@types/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" - }, - "node_modules/@types/d3-time-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.1.0.tgz", - "integrity": "sha512-/myT3I7EwlukNOX2xVdMzb8FRgNzRMpsZddwst9Ld/VFe6LyJyRp0s32l/V9XoUzk+Gqu56F/oGk6507+8BxrA==" - }, - "node_modules/@types/d3-timer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz", - "integrity": "sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==" - }, "node_modules/@types/eslint": { "version": "8.4.6", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", @@ -3781,7 +3680,8 @@ "node_modules/@types/lodash": { "version": "4.14.186", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz", - "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==" + "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==", + "dev": true }, "node_modules/@types/mime": { "version": "3.0.1", @@ -3847,15 +3747,6 @@ "@types/react": "*" } }, - "node_modules/@types/react-highlight-words": { - "version": "0.16.5", - "resolved": "https://registry.npmjs.org/@types/react-highlight-words/-/react-highlight-words-0.16.5.tgz", - "integrity": "sha512-5vUJpVzB3G15nwXB8OEfWgAhEnwAlDXkm8SH6qF8i5jCSTEG2JOygKMJIsvetgYBJS6Sq1I8x3YQcAUDMjKxzg==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, "node_modules/@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -4203,94 +4094,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@visx/group": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@visx/group/-/group-3.3.0.tgz", - "integrity": "sha512-yKepDKwJqlzvnvPS0yDuW13XNrYJE4xzT6xM7J++441nu6IybWWwextyap8ey+kU651cYDb+q1Oi6aHvQwyEyw==", - "dependencies": { - "@types/react": "*", - "classnames": "^2.3.1", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0" - } - }, - "node_modules/@visx/responsive": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@visx/responsive/-/responsive-3.3.0.tgz", - "integrity": "sha512-Y3Bgrh6cJ760lG6yXsxJRNCmYZAHKQqSmTG2qxJ8yImledieGEqI0ZizXJgFkxoBaZK5gSMvFsmFWKtf7a86kQ==", - "dependencies": { - "@types/lodash": "^4.14.172", - "@types/react": "*", - "lodash": "^4.17.21", - "prop-types": "^15.6.1" - }, - "peerDependencies": { - "react": "^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0" - } - }, - "node_modules/@visx/scale": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@visx/scale/-/scale-3.3.0.tgz", - "integrity": "sha512-H569k7eQEUcFE/X1Zojcb4rUwxurIU4yso21uAuKvXnZcGpDOTr/3YXXHb1JJqOKfLcZtYZWXok6QVDj5ZGtCw==", - "dependencies": { - "@visx/vendor": "3.3.0" - } - }, - "node_modules/@visx/text": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@visx/text/-/text-3.3.0.tgz", - "integrity": "sha512-fOimcsf0GtQE9whM5MdA/xIkHMaV29z7qNqNXysUDE8znSMKsN+ott7kSg2ljAEE89CQo3WKHkPNettoVsa84w==", - "dependencies": { - "@types/lodash": "^4.14.172", - "@types/react": "*", - "classnames": "^2.3.1", - "lodash": "^4.17.21", - "prop-types": "^15.7.2", - "reduce-css-calc": "^1.3.0" - }, - "peerDependencies": { - "react": "^16.3.0-0 || ^17.0.0-0 || ^18.0.0-0" - } - }, - "node_modules/@visx/vendor": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@visx/vendor/-/vendor-3.3.0.tgz", - "integrity": "sha512-Xf4ziUWP3oUN/91ROYgJr2JJ6tET+j4jgVfa0Mj9XFpFJeY7U8aEwrNDM2mbR1draktCFNyy/OQAaFa69pr8qQ==", - "dependencies": { - "@types/d3-array": "3.0.3", - "@types/d3-color": "3.1.0", - "@types/d3-delaunay": "6.0.1", - "@types/d3-format": "3.0.1", - "@types/d3-interpolate": "3.0.1", - "@types/d3-scale": "4.0.2", - "@types/d3-time": "3.0.0", - "@types/d3-time-format": "2.1.0", - "d3-array": "3.2.1", - "d3-color": "3.1.0", - "d3-delaunay": "6.0.2", - "d3-format": "3.1.0", - "d3-interpolate": "3.0.1", - "d3-scale": "4.0.2", - "d3-time": "3.1.0", - "d3-time-format": "4.1.0", - "internmap": "2.0.3" - } - }, - "node_modules/@visx/wordcloud": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@visx/wordcloud/-/wordcloud-3.3.0.tgz", - "integrity": "sha512-nopA4+qoBo3xDlHPNqq7cQx/8u1pfsNk6a+RNJwQFM4Nql7AgD9X9rcThqxXzGxJK3oODH9qgEhs4q+m4Jn46A==", - "dependencies": { - "@types/d3-cloud": "1.2.5", - "@visx/group": "3.3.0", - "d3-cloud": "^1.2.5" - }, - "peerDependencies": { - "react": "^16.8.0-0 || ^17.0.0-0 || ^18.0.0-0" - } - }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -4526,6 +4329,29 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", @@ -4691,12 +4517,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -5155,7 +4975,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/batch": { "version": "0.6.1", @@ -5552,11 +5373,6 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, - "node_modules/classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" - }, "node_modules/clean-css": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", @@ -6283,11 +6099,6 @@ "node": ">=0.10.0" } }, - "node_modules/css-unit-converter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", - "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" - }, "node_modules/css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -6472,140 +6283,6 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, - "node_modules/d3-array": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.1.tgz", - "integrity": "sha512-gUY/qeHq/yNqqoCKNq4vtpFLdoCdvyNpWoC/KNjhGbhDuQpAM9sIQQKkXSNpXa9h5KySs/gzm7R88WkUutgwWQ==", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-cloud": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/d3-cloud/-/d3-cloud-1.2.7.tgz", - "integrity": "sha512-8TrgcgwRIpoZYQp7s3fGB7tATWfhckRb8KcVd1bOgqkNdkJRDGWfdSf4HkHHzZxSczwQJdSxvfPudwir5IAJ3w==", - "dependencies": { - "d3-dispatch": "^1.0.3" - } - }, - "node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-delaunay": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz", - "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==", - "dependencies": { - "delaunator": "5" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dispatch": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", - "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" - }, - "node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "dependencies": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-shape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "dependencies": { - "d3-path": "^3.1.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "dependencies": { - "d3-time": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "engines": { - "node": ">=12" - } - }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -6664,11 +6341,6 @@ "integrity": "sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw==", "dev": true }, - "node_modules/decimal.js-light": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", - "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" - }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -6727,13 +6399,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "dependencies": { - "robust-predicates": "^3.0.0" - } + "node_modules/defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", + "dev": true }, "node_modules/delayed-stream": { "version": "1.0.0", @@ -6810,6 +6480,23 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dev": true, + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -6886,14 +6573,6 @@ "utila": "~0.4" } }, - "node_modules/dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "dependencies": { - "@babel/runtime": "^7.1.2" - } - }, "node_modules/dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -8114,7 +7793,8 @@ "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true }, "node_modules/events": { "version": "3.3.0", @@ -8320,14 +8000,6 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "node_modules/fast-equals": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", - "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/fast-glob": { "version": "3.2.12", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", @@ -9117,11 +8789,6 @@ "he": "bin/he" } }, - "node_modules/highlight-words-core": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/highlight-words-core/-/highlight-words-core-1.2.2.tgz", - "integrity": "sha512-BXUKIkUuh6cmmxzi5OIbUJxrG8OAk2MqoL1DtO3Wo9D2faJg2ph5ntyuQeLqaHJmzER6H5tllCDA9ZnNe9BVGg==" - }, "node_modules/hoopy": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", @@ -9535,14 +9202,6 @@ "node": ">= 0.4" } }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "engines": { - "node": ">=12" - } - }, "node_modules/ipaddr.js": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", @@ -9611,9 +9270,9 @@ } }, "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -10900,15 +10559,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jiti": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", - "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", - "dev": true, - "bin": { - "jiti": "bin/jiti.js" - } - }, "node_modules/js-sdsl": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", @@ -11132,9 +10782,9 @@ } }, "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", "dev": true, "engines": { "node": ">=10" @@ -11324,11 +10974,6 @@ "tmpl": "1.0.5" } }, - "node_modules/math-expression-evaluator": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.4.0.tgz", - "integrity": "sha512-4vRUvPyxdO8cWULGTh9dZWL2tZK6LDBvj+OGHBER7poH9Qdt7kXEoj20wiz4lQUbUXQZFjPbe5mVDo9nutizCw==" - }, "node_modules/mdn-data": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", @@ -11356,11 +11001,6 @@ "node": ">= 4.0.0" } }, - "node_modules/memoize-one": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-4.0.3.tgz", - "integrity": "sha512-QmpUu4KqDmX0plH4u+tf0riMc1KHE1+lw95cMrLlXQAFOx/xnBtwhZ52XJxd9X2O6kwKBqX32kmhbhlobD0cuw==" - }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -11581,28 +11221,11 @@ "multicast-dns": "cli.js" } }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -11808,6 +11431,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -12478,9 +12102,9 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", + "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", "dev": true, "funding": [ { @@ -12490,14 +12114,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.4", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -12899,9 +12519,9 @@ } }, "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", "dev": true, "dependencies": { "postcss-value-parser": "^4.0.0", @@ -12909,7 +12529,7 @@ "resolve": "^1.1.7" }, "engines": { - "node": ">=14.0.0" + "node": ">=10.0.0" }, "peerDependencies": { "postcss": "^8.0.0" @@ -12925,9 +12545,9 @@ } }, "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", "dev": true, "dependencies": { "camelcase-css": "^2.0.1" @@ -12940,7 +12560,7 @@ "url": "https://opencollective.com/postcss/" }, "peerDependencies": { - "postcss": "^8.4.21" + "postcss": "^8.3.3" } }, "node_modules/postcss-lab-function": { @@ -12964,16 +12584,16 @@ } }, "node_modules/postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", "dev": true, "dependencies": { "lilconfig": "^2.0.5", - "yaml": "^2.1.1" + "yaml": "^1.10.2" }, "engines": { - "node": ">= 14" + "node": ">= 10" }, "funding": { "type": "opencollective", @@ -12992,15 +12612,6 @@ } } }, - "node_modules/postcss-load-config/node_modules/yaml": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", - "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, "node_modules/postcss-loader": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", @@ -13220,12 +12831,12 @@ } }, "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.11" + "postcss-selector-parser": "^6.0.6" }, "engines": { "node": ">=12.0" @@ -13638,9 +13249,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -13841,6 +13452,7 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -13850,7 +13462,8 @@ "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true }, "node_modules/proxy-addr": { "version": "2.0.7", @@ -13946,6 +13559,18 @@ } ] }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/raf": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", @@ -14158,29 +13783,11 @@ "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", "dev": true }, - "node_modules/react-highlight-words": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/react-highlight-words/-/react-highlight-words-0.20.0.tgz", - "integrity": "sha512-asCxy+jCehDVhusNmCBoxDf2mm1AJ//D+EzDx1m5K7EqsMBIHdZ5G4LdwbSEXqZq1Ros0G0UySWmAtntSph7XA==", - "dependencies": { - "highlight-words-core": "^1.2.0", - "memoize-one": "^4.0.0", - "prop-types": "^15.5.8" - }, - "peerDependencies": { - "react": "^0.14.0 || ^15.0.0 || ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0" - } - }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, "node_modules/react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", @@ -14190,18 +13797,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-resize-detector": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-8.1.0.tgz", - "integrity": "sha512-S7szxlaIuiy5UqLhLL1KY3aoyGHbZzsTpYal9eYMwCyKqoqoVLCmIgAgNyIM1FhnP2KyBygASJxdhejrzjMb+w==", - "dependencies": { - "lodash": "^4.17.21" - }, - "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/react-scripts": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", @@ -14290,35 +13885,6 @@ "node": ">=10" } }, - "node_modules/react-smooth": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.4.tgz", - "integrity": "sha512-OkFsrrMBTvQUwEJthE1KXSOj79z57yvEWeFefeXPib+RmQEI9B1Ub1PgzlzzUyBOvl/TjXt5nF2hmD4NsgAh8A==", - "dependencies": { - "fast-equals": "^5.0.0", - "react-transition-group": "2.9.0" - }, - "peerDependencies": { - "prop-types": "^15.6.0", - "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", - "dependencies": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - }, - "peerDependencies": { - "react": ">=15.0.0", - "react-dom": ">=15.0.0" - } - }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -14363,57 +13929,6 @@ "node": ">=8.10.0" } }, - "node_modules/recharts": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.8.0.tgz", - "integrity": "sha512-nciXqQDh3aW8abhwUlA4EBOBusRHLNiKHfpRZiG/yjups1x+auHb2zWPuEcTn/IMiN47vVMMuF8Sr+vcQJtsmw==", - "dependencies": { - "classnames": "^2.2.5", - "eventemitter3": "^4.0.1", - "lodash": "^4.17.19", - "react-is": "^16.10.2", - "react-resize-detector": "^8.0.4", - "react-smooth": "^2.0.2", - "recharts-scale": "^0.4.4", - "reduce-css-calc": "^2.1.8", - "victory-vendor": "^36.6.8" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "prop-types": "^15.6.0", - "react": "^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/recharts-scale": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", - "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", - "dependencies": { - "decimal.js-light": "^2.4.1" - } - }, - "node_modules/recharts/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/recharts/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/recharts/node_modules/reduce-css-calc": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", - "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", - "dependencies": { - "css-unit-converter": "^1.1.1", - "postcss-value-parser": "^3.3.0" - } - }, "node_modules/recursive-readdir": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", @@ -14450,29 +13965,6 @@ "node": ">=8" } }, - "node_modules/reduce-css-calc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", - "integrity": "sha512-0dVfwYVOlf/LBA2ec4OwQ6p3X9mYxn/wOl2xTcLwjnPYrkgEfPx3VI4eGCH3rQLlPISG5v9I9bkZosKsNRTRKA==", - "dependencies": { - "balanced-match": "^0.4.2", - "math-expression-evaluator": "^1.2.14", - "reduce-function-call": "^1.0.1" - } - }, - "node_modules/reduce-css-calc/node_modules/balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==" - }, - "node_modules/reduce-function-call": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz", - "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -14631,12 +14123,12 @@ "dev": true }, "node_modules/resolve": { - "version": "1.22.6", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", - "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -14771,11 +14263,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/robust-predicates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" - }, "node_modules/rollup": { "version": "2.79.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", @@ -15649,71 +15136,6 @@ "postcss": "^8.2.15" } }, - "node_modules/sucrase": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", - "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -15959,40 +15381,43 @@ "dev": true }, "node_modules/tailwindcss": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", - "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz", + "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==", "dev": true, "dependencies": { - "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.12", + "fast-glob": "^3.2.11", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.18.2", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", + "lilconfig": "^2.0.6", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" + "postcss": "^8.4.14", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" }, "bin": { "tailwind": "lib/cli.js", "tailwindcss": "lib/cli.js" }, "engines": { - "node": ">=14.0.0" + "node": ">=12.13.0" + }, + "peerDependencies": { + "postcss": "^8.0.9" } }, "node_modules/tapable": { @@ -16137,27 +15562,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/throat": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", @@ -16268,12 +15672,6 @@ "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", "dev": true }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true - }, "node_modules/ts-standard": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/ts-standard/-/ts-standard-11.0.0.tgz", @@ -17214,27 +16612,6 @@ "node": ">= 0.8" } }, - "node_modules/victory-vendor": { - "version": "36.6.11", - "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.6.11.tgz", - "integrity": "sha512-nT8kCiJp8dQh8g991J/R5w5eE2KnO8EAIP0xocWlh9l2okngMWglOPoMZzJvek8Q1KUc4XE/mJxTZnvOB1sTYg==", - "dependencies": { - "@types/d3-array": "^3.0.3", - "@types/d3-ease": "^3.0.0", - "@types/d3-interpolate": "^3.0.1", - "@types/d3-scale": "^4.0.2", - "@types/d3-shape": "^3.1.0", - "@types/d3-time": "^3.0.0", - "@types/d3-timer": "^3.0.0", - "d3-array": "^3.1.6", - "d3-ease": "^3.0.1", - "d3-interpolate": "^3.0.1", - "d3-scale": "^4.0.2", - "d3-shape": "^3.1.0", - "d3-time": "^3.0.0", - "d3-timer": "^3.0.1" - } - }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -18132,6 +17509,15 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -18201,12 +17587,6 @@ "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz", "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==" }, - "@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true - }, "@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -20649,88 +20029,6 @@ "@types/node": "*" } }, - "@types/d3": { - "version": "3.5.49", - "resolved": "https://registry.npmjs.org/@types/d3/-/d3-3.5.49.tgz", - "integrity": "sha512-khhSZi6pn4K/7ReH264ZSsD4/yzWZpHDph9yqjILGnwJabm2lTH4lkjHqn4LyELN9bkFul7VLD7j3NjHDvkquQ==" - }, - "@types/d3-array": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.3.tgz", - "integrity": "sha512-Reoy+pKnvsksN0lQUlcH6dOGjRZ/3WRwXR//m+/8lt1BXeI4xyaUZoqULNjyXXRuh0Mj4LNpkCvhUpQlY3X5xQ==" - }, - "@types/d3-cloud": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/d3-cloud/-/d3-cloud-1.2.5.tgz", - "integrity": "sha512-vEIER9DsEBUOdpRiwCh3n1qE+cV6h4e1LhxhY2sLt+m8LPNAIkOOhTlqk0JDiBwD+ZPM8ynFAOU3AuPuVYBFBA==", - "requires": { - "@types/d3": "^3" - } - }, - "@types/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA==" - }, - "@types/d3-delaunay": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.1.tgz", - "integrity": "sha512-tLxQ2sfT0p6sxdG75c6f/ekqxjyYR0+LwPrsO1mbC9YDBzPJhs2HbJJRrn8Ez1DBoHRo2yx7YEATI+8V1nGMnQ==" - }, - "@types/d3-ease": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz", - "integrity": "sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA==" - }, - "@types/d3-format": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.1.tgz", - "integrity": "sha512-5KY70ifCCzorkLuIkDe0Z9YTf9RR2CjBX1iaJG+rgM/cPP+sO+q9YdQ9WdhQcgPj1EQiJ2/0+yUkkziTG6Lubg==" - }, - "@types/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==", - "requires": { - "@types/d3-color": "*" - } - }, - "@types/d3-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.0.tgz", - "integrity": "sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg==" - }, - "@types/d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-Yk4htunhPAwN0XGlIwArRomOjdoBFXC3+kCxK2Ubg7I9shQlVSJy/pG/Ht5ASN+gdMIalpk8TJ5xV74jFsetLA==", - "requires": { - "@types/d3-time": "*" - } - }, - "@types/d3-shape": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.3.tgz", - "integrity": "sha512-cHMdIq+rhF5IVwAV7t61pcEXfEHsEsrbBUPkFGBwTXuxtTAkBBrnrNA8++6OWm3jwVsXoZYQM8NEekg6CPJ3zw==", - "requires": { - "@types/d3-path": "*" - } - }, - "@types/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" - }, - "@types/d3-time-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.1.0.tgz", - "integrity": "sha512-/myT3I7EwlukNOX2xVdMzb8FRgNzRMpsZddwst9Ld/VFe6LyJyRp0s32l/V9XoUzk+Gqu56F/oGk6507+8BxrA==" - }, - "@types/d3-timer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz", - "integrity": "sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==" - }, "@types/eslint": { "version": "8.4.6", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", @@ -20852,7 +20150,8 @@ "@types/lodash": { "version": "4.14.186", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz", - "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==" + "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==", + "dev": true }, "@types/mime": { "version": "3.0.1", @@ -20918,15 +20217,6 @@ "@types/react": "*" } }, - "@types/react-highlight-words": { - "version": "0.16.5", - "resolved": "https://registry.npmjs.org/@types/react-highlight-words/-/react-highlight-words-0.16.5.tgz", - "integrity": "sha512-5vUJpVzB3G15nwXB8OEfWgAhEnwAlDXkm8SH6qF8i5jCSTEG2JOygKMJIsvetgYBJS6Sq1I8x3YQcAUDMjKxzg==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, "@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -21163,82 +20453,6 @@ "eslint-visitor-keys": "^3.3.0" } }, - "@visx/group": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@visx/group/-/group-3.3.0.tgz", - "integrity": "sha512-yKepDKwJqlzvnvPS0yDuW13XNrYJE4xzT6xM7J++441nu6IybWWwextyap8ey+kU651cYDb+q1Oi6aHvQwyEyw==", - "requires": { - "@types/react": "*", - "classnames": "^2.3.1", - "prop-types": "^15.6.2" - } - }, - "@visx/responsive": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@visx/responsive/-/responsive-3.3.0.tgz", - "integrity": "sha512-Y3Bgrh6cJ760lG6yXsxJRNCmYZAHKQqSmTG2qxJ8yImledieGEqI0ZizXJgFkxoBaZK5gSMvFsmFWKtf7a86kQ==", - "requires": { - "@types/lodash": "^4.14.172", - "@types/react": "*", - "lodash": "^4.17.21", - "prop-types": "^15.6.1" - } - }, - "@visx/scale": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@visx/scale/-/scale-3.3.0.tgz", - "integrity": "sha512-H569k7eQEUcFE/X1Zojcb4rUwxurIU4yso21uAuKvXnZcGpDOTr/3YXXHb1JJqOKfLcZtYZWXok6QVDj5ZGtCw==", - "requires": { - "@visx/vendor": "3.3.0" - } - }, - "@visx/text": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@visx/text/-/text-3.3.0.tgz", - "integrity": "sha512-fOimcsf0GtQE9whM5MdA/xIkHMaV29z7qNqNXysUDE8znSMKsN+ott7kSg2ljAEE89CQo3WKHkPNettoVsa84w==", - "requires": { - "@types/lodash": "^4.14.172", - "@types/react": "*", - "classnames": "^2.3.1", - "lodash": "^4.17.21", - "prop-types": "^15.7.2", - "reduce-css-calc": "^1.3.0" - } - }, - "@visx/vendor": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@visx/vendor/-/vendor-3.3.0.tgz", - "integrity": "sha512-Xf4ziUWP3oUN/91ROYgJr2JJ6tET+j4jgVfa0Mj9XFpFJeY7U8aEwrNDM2mbR1draktCFNyy/OQAaFa69pr8qQ==", - "requires": { - "@types/d3-array": "3.0.3", - "@types/d3-color": "3.1.0", - "@types/d3-delaunay": "6.0.1", - "@types/d3-format": "3.0.1", - "@types/d3-interpolate": "3.0.1", - "@types/d3-scale": "4.0.2", - "@types/d3-time": "3.0.0", - "@types/d3-time-format": "2.1.0", - "d3-array": "3.2.1", - "d3-color": "3.1.0", - "d3-delaunay": "6.0.2", - "d3-format": "3.1.0", - "d3-interpolate": "3.0.1", - "d3-scale": "4.0.2", - "d3-time": "3.1.0", - "d3-time-format": "4.1.0", - "internmap": "2.0.3" - } - }, - "@visx/wordcloud": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@visx/wordcloud/-/wordcloud-3.3.0.tgz", - "integrity": "sha512-nopA4+qoBo3xDlHPNqq7cQx/8u1pfsNk6a+RNJwQFM4Nql7AgD9X9rcThqxXzGxJK3oODH9qgEhs4q+m4Jn46A==", - "requires": { - "@types/d3-cloud": "1.2.5", - "@visx/group": "3.3.0", - "d3-cloud": "^1.2.5" - } - }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -21457,6 +20671,25 @@ "dev": true, "requires": {} }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, "acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", @@ -21570,12 +20803,6 @@ "color-convert": "^2.0.1" } }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -21924,7 +21151,8 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "batch": { "version": "0.6.1", @@ -22224,11 +21452,6 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, - "classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" - }, "clean-css": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", @@ -22757,11 +21980,6 @@ } } }, - "css-unit-converter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", - "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" - }, "css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -22901,104 +22119,6 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, - "d3-array": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.1.tgz", - "integrity": "sha512-gUY/qeHq/yNqqoCKNq4vtpFLdoCdvyNpWoC/KNjhGbhDuQpAM9sIQQKkXSNpXa9h5KySs/gzm7R88WkUutgwWQ==", - "requires": { - "internmap": "1 - 2" - } - }, - "d3-cloud": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/d3-cloud/-/d3-cloud-1.2.7.tgz", - "integrity": "sha512-8TrgcgwRIpoZYQp7s3fGB7tATWfhckRb8KcVd1bOgqkNdkJRDGWfdSf4HkHHzZxSczwQJdSxvfPudwir5IAJ3w==", - "requires": { - "d3-dispatch": "^1.0.3" - } - }, - "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" - }, - "d3-delaunay": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz", - "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==", - "requires": { - "delaunator": "5" - } - }, - "d3-dispatch": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", - "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" - }, - "d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" - }, - "d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "requires": { - "d3-color": "1 - 3" - } - }, - "d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==" - }, - "d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "requires": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - } - }, - "d3-shape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "requires": { - "d3-path": "^3.1.0" - } - }, - "d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "requires": { - "d3-array": "2 - 3" - } - }, - "d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "requires": { - "d3-time": "1 - 3" - } - }, - "d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" - }, "damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -23039,11 +22159,6 @@ "integrity": "sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw==", "dev": true }, - "decimal.js-light": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", - "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" - }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -23087,13 +22202,11 @@ "object-keys": "^1.1.1" } }, - "delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "requires": { - "robust-predicates": "^3.0.0" - } + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", + "dev": true }, "delayed-stream": { "version": "1.0.0", @@ -23152,6 +22265,17 @@ } } }, + "detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dev": true, + "requires": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + } + }, "didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -23216,14 +22340,6 @@ "utila": "~0.4" } }, - "dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "requires": { - "@babel/runtime": "^7.1.2" - } - }, "dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -24123,7 +23239,8 @@ "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true }, "events": { "version": "3.3.0", @@ -24283,11 +23400,6 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "fast-equals": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", - "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==" - }, "fast-glob": { "version": "3.2.12", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", @@ -24860,11 +23972,6 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, - "highlight-words-core": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/highlight-words-core/-/highlight-words-core-1.2.2.tgz", - "integrity": "sha512-BXUKIkUuh6cmmxzi5OIbUJxrG8OAk2MqoL1DtO3Wo9D2faJg2ph5ntyuQeLqaHJmzER6H5tllCDA9ZnNe9BVGg==" - }, "hoopy": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", @@ -25173,11 +24280,6 @@ "side-channel": "^1.0.4" } }, - "internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" - }, "ipaddr.js": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", @@ -25225,9 +24327,9 @@ "dev": true }, "is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", "dev": true, "requires": { "has": "^1.0.3" @@ -26195,12 +25297,6 @@ } } }, - "jiti": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", - "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", - "dev": true - }, "js-sdsl": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", @@ -26375,9 +25471,9 @@ } }, "lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", "dev": true }, "lines-and-columns": { @@ -26532,11 +25628,6 @@ "tmpl": "1.0.5" } }, - "math-expression-evaluator": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.4.0.tgz", - "integrity": "sha512-4vRUvPyxdO8cWULGTh9dZWL2tZK6LDBvj+OGHBER7poH9Qdt7kXEoj20wiz4lQUbUXQZFjPbe5mVDo9nutizCw==" - }, "mdn-data": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", @@ -26558,11 +25649,6 @@ "fs-monkey": "^1.0.3" } }, - "memoize-one": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-4.0.3.tgz", - "integrity": "sha512-QmpUu4KqDmX0plH4u+tf0riMc1KHE1+lw95cMrLlXQAFOx/xnBtwhZ52XJxd9X2O6kwKBqX32kmhbhlobD0cuw==" - }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -26725,21 +25811,10 @@ "thunky": "^1.0.2" } }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "dev": true }, "natural-compare": { @@ -26894,7 +25969,8 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true }, "object-hash": { "version": "3.0.0", @@ -27385,12 +26461,12 @@ } }, "postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", + "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", "dev": true, "requires": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.4", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } @@ -27611,9 +26687,9 @@ } }, "postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", "dev": true, "requires": { "postcss-value-parser": "^4.0.0", @@ -27629,9 +26705,9 @@ "requires": {} }, "postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", "dev": true, "requires": { "camelcase-css": "^2.0.1" @@ -27648,21 +26724,13 @@ } }, "postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", "dev": true, "requires": { "lilconfig": "^2.0.5", - "yaml": "^2.1.1" - }, - "dependencies": { - "yaml": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", - "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", - "dev": true - } + "yaml": "^1.10.2" } }, "postcss-loader": { @@ -27800,12 +26868,12 @@ } }, "postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.11" + "postcss-selector-parser": "^6.0.6" } }, "postcss-nesting": { @@ -28053,9 +27121,9 @@ } }, "postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -28206,6 +27274,7 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -28215,7 +27284,8 @@ "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true } } }, @@ -28282,6 +27352,12 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, "raf": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", @@ -28453,40 +27529,17 @@ "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", "dev": true }, - "react-highlight-words": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/react-highlight-words/-/react-highlight-words-0.20.0.tgz", - "integrity": "sha512-asCxy+jCehDVhusNmCBoxDf2mm1AJ//D+EzDx1m5K7EqsMBIHdZ5G4LdwbSEXqZq1Ros0G0UySWmAtntSph7XA==", - "requires": { - "highlight-words-core": "^1.2.0", - "memoize-one": "^4.0.0", - "prop-types": "^15.5.8" - } - }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, "react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", "dev": true }, - "react-resize-detector": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-8.1.0.tgz", - "integrity": "sha512-S7szxlaIuiy5UqLhLL1KY3aoyGHbZzsTpYal9eYMwCyKqoqoVLCmIgAgNyIM1FhnP2KyBygASJxdhejrzjMb+w==", - "requires": { - "lodash": "^4.17.21" - } - }, "react-scripts": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", @@ -28554,26 +27607,6 @@ } } }, - "react-smooth": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.4.tgz", - "integrity": "sha512-OkFsrrMBTvQUwEJthE1KXSOj79z57yvEWeFefeXPib+RmQEI9B1Ub1PgzlzzUyBOvl/TjXt5nF2hmD4NsgAh8A==", - "requires": { - "fast-equals": "^5.0.0", - "react-transition-group": "2.9.0" - } - }, - "react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", - "requires": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - } - }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -28611,51 +27644,6 @@ "picomatch": "^2.2.1" } }, - "recharts": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.8.0.tgz", - "integrity": "sha512-nciXqQDh3aW8abhwUlA4EBOBusRHLNiKHfpRZiG/yjups1x+auHb2zWPuEcTn/IMiN47vVMMuF8Sr+vcQJtsmw==", - "requires": { - "classnames": "^2.2.5", - "eventemitter3": "^4.0.1", - "lodash": "^4.17.19", - "react-is": "^16.10.2", - "react-resize-detector": "^8.0.4", - "react-smooth": "^2.0.2", - "recharts-scale": "^0.4.4", - "reduce-css-calc": "^2.1.8", - "victory-vendor": "^36.6.8" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "reduce-css-calc": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", - "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", - "requires": { - "css-unit-converter": "^1.1.1", - "postcss-value-parser": "^3.3.0" - } - } - } - }, - "recharts-scale": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", - "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", - "requires": { - "decimal.js-light": "^2.4.1" - } - }, "recursive-readdir": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", @@ -28685,31 +27673,6 @@ "strip-indent": "^3.0.0" } }, - "reduce-css-calc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", - "integrity": "sha512-0dVfwYVOlf/LBA2ec4OwQ6p3X9mYxn/wOl2xTcLwjnPYrkgEfPx3VI4eGCH3rQLlPISG5v9I9bkZosKsNRTRKA==", - "requires": { - "balanced-match": "^0.4.2", - "math-expression-evaluator": "^1.2.14", - "reduce-function-call": "^1.0.1" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==" - } - } - }, - "reduce-function-call": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz", - "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==", - "requires": { - "balanced-match": "^1.0.0" - } - }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -28837,12 +27800,12 @@ "dev": true }, "resolve": { - "version": "1.22.6", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", - "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "requires": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -28926,11 +27889,6 @@ "glob": "^7.1.3" } }, - "robust-predicates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" - }, "rollup": { "version": "2.79.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", @@ -29593,54 +28551,6 @@ "postcss-selector-parser": "^6.0.4" } }, - "sucrase": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", - "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -29845,33 +28755,33 @@ } }, "tailwindcss": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", - "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz", + "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==", "dev": true, "requires": { - "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.12", + "fast-glob": "^3.2.11", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.18.2", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", + "lilconfig": "^2.0.6", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" + "postcss": "^8.4.14", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" } }, "tapable": { @@ -29966,24 +28876,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, "throat": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", @@ -30072,12 +28964,6 @@ "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", "dev": true }, - "ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true - }, "ts-standard": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/ts-standard/-/ts-standard-11.0.0.tgz", @@ -30717,27 +29603,6 @@ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true }, - "victory-vendor": { - "version": "36.6.11", - "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.6.11.tgz", - "integrity": "sha512-nT8kCiJp8dQh8g991J/R5w5eE2KnO8EAIP0xocWlh9l2okngMWglOPoMZzJvek8Q1KUc4XE/mJxTZnvOB1sTYg==", - "requires": { - "@types/d3-array": "^3.0.3", - "@types/d3-ease": "^3.0.0", - "@types/d3-interpolate": "^3.0.1", - "@types/d3-scale": "^4.0.2", - "@types/d3-shape": "^3.1.0", - "@types/d3-time": "^3.0.0", - "@types/d3-timer": "^3.0.0", - "d3-array": "^3.1.6", - "d3-ease": "^3.0.1", - "d3-interpolate": "^3.0.1", - "d3-scale": "^4.0.2", - "d3-shape": "^3.1.0", - "d3-time": "^3.0.0", - "d3-timer": "^3.0.1" - } - }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -31462,6 +30327,12 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index 281c62dc..bea2a883 100644 --- a/package.json +++ b/package.json @@ -12,14 +12,8 @@ "@types/react": "^18.0.21", "@types/react-dom": "^18.0.6", "concurrently": "^8.2.1", - "@visx/responsive": "^3.3.0", - "@visx/scale": "^3.3.0", - "@visx/text": "^3.3.0", - "@visx/wordcloud": "^3.3.0", "lodash": "^4.17.21", "lottie-react": "^2.3.1", - "react-highlight-words": "^0.20.0", - "recharts": "^2.7.1", "typescript": "^4.4.3", "web-vitals": "^2.1.4" }, @@ -40,9 +34,7 @@ "archive": "cd build && zip -r ../release.zip .", "release": "npm run build && npm run archive", "test": "react-scripts test", - "lint": "npm run fix:ts", - "watch": "concurrently 'npm run dev:start' 'nodemon --ext py --exec \"npm run build:py\"'", - "watch:ts": "tsc -watch" + "lint": "npm run fix:ts" }, "browserslist": { "production": [ @@ -58,7 +50,6 @@ }, "devDependencies": { "@types/lodash": "^4.14.185", - "@types/react-highlight-words": "^0.16.4", "autoprefixer": "^10.4.12", "husky": "^8.0.1", "nodemon": "^2.0.20", @@ -66,7 +57,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-scripts": "5.0.1", - "tailwindcss": "^3.3.3", + "tailwindcss": "^3.1.8", "ts-standard": "^11.0.0" }, "ts-standard": { @@ -76,4 +67,4 @@ "src/framework/processing/py_worker.js" ] } -} +} \ No newline at end of file diff --git a/public/index.html b/public/index.html index 75fbd5ca..842e5723 100644 --- a/public/index.html +++ b/public/index.html @@ -2,12 +2,12 @@ - +