From 192afb83ed36c10e891e4827223e455eb3179b52 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 25 Nov 2024 16:26:36 +0100 Subject: [PATCH 001/100] refactor: Clean up --- app/components/chart-panel-layout-grid.tsx | 12 +++--- app/components/chart-panel.tsx | 3 +- app/components/react-grid.tsx | 5 +-- .../components/layout-configurator.tsx | 41 ++++++++----------- 4 files changed, 27 insertions(+), 34 deletions(-) diff --git a/app/components/chart-panel-layout-grid.tsx b/app/components/chart-panel-layout-grid.tsx index c8f4a00dd..a1045a8c6 100644 --- a/app/components/chart-panel-layout-grid.tsx +++ b/app/components/chart-panel-layout-grid.tsx @@ -32,8 +32,8 @@ const decodeLayouts = (layouts: Layouts) => { ); }; -const ChartPanelLayoutCanvas = (props: ChartPanelLayoutTypeProps) => { - const { chartConfigs } = props; +export const ChartPanelLayoutCanvas = (props: ChartPanelLayoutTypeProps) => { + const { chartConfigs, renderChart, className } = props; const [state, dispatch] = useConfiguratorState(hasChartConfigs); const [layouts, setLayouts] = useState(() => { assert( @@ -69,16 +69,14 @@ const ChartPanelLayoutCanvas = (props: ChartPanelLayoutTypeProps) => { return ( handleChangeLayouts(allLayouts)} + onLayoutChange={(_, allLayouts) => handleChangeLayouts(allLayouts)} breakpoints={FREE_CANVAS_BREAKPOINTS} > - {chartConfigs.map((chartConfig) => props.renderChart(chartConfig))} + {chartConfigs.map(renderChart)} ); }; - -export default ChartPanelLayoutCanvas; diff --git a/app/components/chart-panel.tsx b/app/components/chart-panel.tsx index 81bd9a237..1b99af979 100644 --- a/app/components/chart-panel.tsx +++ b/app/components/chart-panel.tsx @@ -3,7 +3,8 @@ import { makeStyles } from "@mui/styles"; import clsx from "clsx"; import React, { HTMLProps, forwardRef } from "react"; -import ChartPanelLayoutCanvas, { +import { + ChartPanelLayoutCanvas, chartPanelLayoutGridClasses, } from "@/components/chart-panel-layout-grid"; import { ChartPanelLayoutTall } from "@/components/chart-panel-layout-tall"; diff --git a/app/components/react-grid.tsx b/app/components/react-grid.tsx index 054f55048..f8285b40d 100644 --- a/app/components/react-grid.tsx +++ b/app/components/react-grid.tsx @@ -14,7 +14,6 @@ import { getChartWrapperId } from "@/components/chart-panel"; import { hasChartConfigs, isLayouting, - LayoutDashboardFreeCanvas, ReactGridLayoutType, } from "@/configurator"; import { useTimeout } from "@/hooks/use-timeout"; @@ -227,11 +226,11 @@ export const ChartGridLayout = ({ } & ComponentProps) => { const classes = useStyles(); const [state, dispatch] = useConfiguratorState(hasChartConfigs); + const configLayout = state.layout; assert( - state.layout.type === "dashboard" && state.layout.layout === "canvas", + configLayout.type === "dashboard" && configLayout.layout === "canvas", "ChartGridLayout can only be used in a canvas layout!" ); - const configLayout = state.layout as LayoutDashboardFreeCanvas; const allowHeightInitialization = isLayouting(state); const [mounted, setMounted] = useState(false); const mountedForSomeTime = useTimeout(500, mounted); diff --git a/app/configurator/components/layout-configurator.tsx b/app/configurator/components/layout-configurator.tsx index fa39f3fb0..bf13bb8f7 100644 --- a/app/configurator/components/layout-configurator.tsx +++ b/app/configurator/components/layout-configurator.tsx @@ -242,8 +242,8 @@ const LayoutSharedFiltersConfigurator = () => { {timeRange && combinedTemporalDimension.values.length ? ( <> - { checked={timeRange.active} onChange={handleTimeRangeFilterToggle} /> - + {timeRange.active ? ( { {dataFilters ? ( <> {potentialDataFilterIds.map((id, i) => { - const dimension = dimensions.find( - (dimension) => dimension.id === id - ); - if (!dimension) { + const dim = dimensions.find((d) => d.id === id); + + if (!dim) { return null; } - const checked = dataFilters.componentIds.includes( - dimension.id - ); + + const checked = dataFilters.componentIds.includes(dim.id); return ( - - - - {dimension.label} - + {dim.label} { - handleDataFiltersToggle(checked, dimension.id); + handleDataFiltersToggle(checked, dim.id); }} /> - + {checked ? ( { /> ) : null} - + ); })} From 8f1d155054f5d855aaa8bc8999f0cabaea68eb81 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 26 Nov 2024 09:02:58 +0100 Subject: [PATCH 002/100] refactor: Do not use default export --- app/components/chart-panel-layout-grid.tsx | 3 ++- app/components/react-grid.stories.tsx | 4 ++-- app/components/react-grid.tsx | 2 -- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/components/chart-panel-layout-grid.tsx b/app/components/chart-panel-layout-grid.tsx index a1045a8c6..055c6879d 100644 --- a/app/components/chart-panel-layout-grid.tsx +++ b/app/components/chart-panel-layout-grid.tsx @@ -5,7 +5,8 @@ import { useState } from "react"; import { Layouts } from "react-grid-layout"; import { ChartPanelLayoutTypeProps } from "@/components/chart-panel"; -import ChartGridLayout, { +import { + ChartGridLayout, FREE_CANVAS_BREAKPOINTS, } from "@/components/react-grid"; import { ReactGridLayoutsType, hasChartConfigs } from "@/configurator"; diff --git a/app/components/react-grid.stories.tsx b/app/components/react-grid.stories.tsx index b4e99c382..ff4231426 100644 --- a/app/components/react-grid.stories.tsx +++ b/app/components/react-grid.stories.tsx @@ -8,7 +8,7 @@ import { import { useMemo, useState } from "react"; import { Layouts } from "react-grid-layout"; -import ShowcaseLayout, { +import { ChartGridLayout, GridLayout, availableHandles, @@ -100,7 +100,7 @@ export const Example = () => { const meta = { title: "Components/ReactGrid", - component: ShowcaseLayout, + component: ChartGridLayout, }; export default meta; diff --git a/app/components/react-grid.tsx b/app/components/react-grid.tsx index f8285b40d..1be7e98fe 100644 --- a/app/components/react-grid.tsx +++ b/app/components/react-grid.tsx @@ -429,5 +429,3 @@ export const generateLayout = function ({ .exhaustive(); }); }; - -export default ChartGridLayout; From 52ded1b0b7469eff9815c37e3b4f7c22a10ae639 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 26 Nov 2024 13:51:28 +0100 Subject: [PATCH 003/100] fix: Ids --- app/configurator/components/layout-configurator.tsx | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/configurator/components/layout-configurator.tsx b/app/configurator/components/layout-configurator.tsx index bf13bb8f7..9cdb179b8 100644 --- a/app/configurator/components/layout-configurator.tsx +++ b/app/configurator/components/layout-configurator.tsx @@ -76,12 +76,11 @@ const LayoutLayoutConfigurator = () => { return ( Layout Options @@ -228,11 +227,11 @@ const LayoutSharedFiltersConfigurator = () => { return ( From f100b05d1896d929dcfe9566e4fa037f28bb2b39 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 26 Nov 2024 13:56:13 +0100 Subject: [PATCH 004/100] feat: Set up LayoutBlocksConfigurator skeleton and translations --- .../components/layout-configurator.tsx | 14 ++++++++++++++ app/locales/de/messages.po | 4 ++++ app/locales/en/messages.po | 4 ++++ app/locales/fr/messages.po | 4 ++++ app/locales/it/messages.po | 4 ++++ 5 files changed, 30 insertions(+) diff --git a/app/configurator/components/layout-configurator.tsx b/app/configurator/components/layout-configurator.tsx index 9cdb179b8..9f2714357 100644 --- a/app/configurator/components/layout-configurator.tsx +++ b/app/configurator/components/layout-configurator.tsx @@ -64,6 +64,7 @@ export const LayoutConfigurator = () => { + ); }; @@ -537,6 +538,19 @@ const DashboardTimeRangeFilterOptions = ({ ); }; +const LayoutBlocksConfigurator = () => { + return ( + + + Text elements + + + <> + + + ); +}; + const migrateLayout = ( layout: LayoutDashboard, newLayoutType: LayoutDashboard["layout"], diff --git a/app/locales/de/messages.po b/app/locales/de/messages.po index a8f92d315..330fc9b55 100644 --- a/app/locales/de/messages.po +++ b/app/locales/de/messages.po @@ -816,6 +816,10 @@ msgstr "Verwenden Sie den Typ Abgestuft, um die Animation in festen Abständen z msgid "controls.section.animation.type.stepped" msgstr "Abgestuft" +#: app/configurator/components/layout-configurator.tsx +msgid "controls.section.block-options" +msgstr "Textelemente" + #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" msgstr "Diagramm-Einstellungen" diff --git a/app/locales/en/messages.po b/app/locales/en/messages.po index 74056298f..625b904b3 100644 --- a/app/locales/en/messages.po +++ b/app/locales/en/messages.po @@ -816,6 +816,10 @@ msgstr "Use the Stepped type to make the animation jump between data points at f msgid "controls.section.animation.type.stepped" msgstr "Stepped" +#: app/configurator/components/layout-configurator.tsx +msgid "controls.section.block-options" +msgstr "Text elements" + #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" msgstr "Chart Options" diff --git a/app/locales/fr/messages.po b/app/locales/fr/messages.po index 15e57cd85..8219d669d 100644 --- a/app/locales/fr/messages.po +++ b/app/locales/fr/messages.po @@ -816,6 +816,10 @@ msgstr "Utilisez le type en escalier pour que l'animation passe d'un point de do msgid "controls.section.animation.type.stepped" msgstr "En escalier" +#: app/configurator/components/layout-configurator.tsx +msgid "controls.section.block-options" +msgstr "Éléments de texte" + #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" msgstr "Paramètres graphiques" diff --git a/app/locales/it/messages.po b/app/locales/it/messages.po index 1f0e0c63b..16d4c281a 100644 --- a/app/locales/it/messages.po +++ b/app/locales/it/messages.po @@ -816,6 +816,10 @@ msgstr "Usare il tipo a gradini per far saltare l'animazione tra i punti di dati msgid "controls.section.animation.type.stepped" msgstr "A gradini" +#: app/configurator/components/layout-configurator.tsx +msgid "controls.section.block-options" +msgstr "Elementi di testo" + #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" msgstr "Opzioni del grafico" From 700dbeac74bfa925246e8ba24321a51199c9e04d Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 26 Nov 2024 14:04:42 +0100 Subject: [PATCH 005/100] refactor: Extract AddButton --- app/components/add-button.tsx | 22 ++++++++++++++++++++++ app/components/chart-selection-tabs.tsx | 11 +++-------- 2 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 app/components/add-button.tsx diff --git a/app/components/add-button.tsx b/app/components/add-button.tsx new file mode 100644 index 000000000..4867ad86d --- /dev/null +++ b/app/components/add-button.tsx @@ -0,0 +1,22 @@ +import { Button, ButtonProps } from "@mui/material"; + +import { Icon } from "@/icons"; + +export const AddButton = (props: ButtonProps) => { + const { sx, ...rest } = props; + + return ( + + )} ); From 8255398cd95008bd24fa91fc8cb2f960d7f2b36f Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 26 Nov 2024 14:05:46 +0100 Subject: [PATCH 006/100] feat: Add an "Add text" button + translations --- app/configurator/components/layout-configurator.tsx | 7 ++++++- app/locales/de/messages.po | 4 ++++ app/locales/en/messages.po | 4 ++++ app/locales/fr/messages.po | 4 ++++ app/locales/it/messages.po | 4 ++++ 5 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/configurator/components/layout-configurator.tsx b/app/configurator/components/layout-configurator.tsx index 9f2714357..6a1d3925a 100644 --- a/app/configurator/components/layout-configurator.tsx +++ b/app/configurator/components/layout-configurator.tsx @@ -13,6 +13,7 @@ import { useCallback, useEffect, useMemo, useRef } from "react"; import { DataFilterGenericDimensionProps } from "@/charts/shared/chart-data-filters"; import { useCombinedTemporalDimension } from "@/charts/shared/use-combined-temporal-dimension"; +import { AddButton } from "@/components/add-button"; import { Select } from "@/components/form"; import { FREE_CANVAS_BREAKPOINTS, @@ -545,7 +546,11 @@ const LayoutBlocksConfigurator = () => { Text elements - <> + + + Add text + + ); diff --git a/app/locales/de/messages.po b/app/locales/de/messages.po index 330fc9b55..9d1ee245a 100644 --- a/app/locales/de/messages.po +++ b/app/locales/de/messages.po @@ -820,6 +820,10 @@ msgstr "Abgestuft" msgid "controls.section.block-options" msgstr "Textelemente" +#: app/configurator/components/layout-configurator.tsx +msgid "controls.section.block-options.text-block-add" +msgstr "Text hinzufügen" + #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" msgstr "Diagramm-Einstellungen" diff --git a/app/locales/en/messages.po b/app/locales/en/messages.po index 625b904b3..06639ad37 100644 --- a/app/locales/en/messages.po +++ b/app/locales/en/messages.po @@ -820,6 +820,10 @@ msgstr "Stepped" msgid "controls.section.block-options" msgstr "Text elements" +#: app/configurator/components/layout-configurator.tsx +msgid "controls.section.block-options.text-block-add" +msgstr "Add text" + #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" msgstr "Chart Options" diff --git a/app/locales/fr/messages.po b/app/locales/fr/messages.po index 8219d669d..dbc71b903 100644 --- a/app/locales/fr/messages.po +++ b/app/locales/fr/messages.po @@ -820,6 +820,10 @@ msgstr "En escalier" msgid "controls.section.block-options" msgstr "Éléments de texte" +#: app/configurator/components/layout-configurator.tsx +msgid "controls.section.block-options.text-block-add" +msgstr "Ajouter du texte" + #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" msgstr "Paramètres graphiques" diff --git a/app/locales/it/messages.po b/app/locales/it/messages.po index 16d4c281a..80a6bd0f0 100644 --- a/app/locales/it/messages.po +++ b/app/locales/it/messages.po @@ -820,6 +820,10 @@ msgstr "A gradini" msgid "controls.section.block-options" msgstr "Elementi di testo" +#: app/configurator/components/layout-configurator.tsx +msgid "controls.section.block-options.text-block-add" +msgstr "Aggiungi testo" + #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" msgstr "Opzioni del grafico" From 3869fcd5fb6634f033315da69a81bbb3f7a10899 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 26 Nov 2024 14:09:03 +0100 Subject: [PATCH 007/100] feat: Only render LayoutBlocksConfigurator for dashboard canvas layout --- app/configurator/components/layout-configurator.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/configurator/components/layout-configurator.tsx b/app/configurator/components/layout-configurator.tsx index 6a1d3925a..32c39ca24 100644 --- a/app/configurator/components/layout-configurator.tsx +++ b/app/configurator/components/layout-configurator.tsx @@ -540,7 +540,10 @@ const DashboardTimeRangeFilterOptions = ({ }; const LayoutBlocksConfigurator = () => { - return ( + const [state] = useConfiguratorState(isLayouting); + const { layout } = state; + + return layout.type === "dashboard" && layout.layout === "canvas" ? ( Text elements @@ -553,7 +556,7 @@ const LayoutBlocksConfigurator = () => { - ); + ) : null; }; const migrateLayout = ( From 9613d39b9663d9d4306b856cf7a185997a0198d0 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 26 Nov 2024 14:25:00 +0100 Subject: [PATCH 008/100] refactor: createChartId -> createId --- app/charts/index.ts | 4 ++-- app/components/chart-shared.tsx | 4 ++-- app/configurator/configurator-state/context.tsx | 4 ++-- app/utils/chart-config/api.ts | 4 ++-- app/utils/chart-config/versioning.ts | 4 ++-- app/utils/create-chart-id.ts | 3 --- app/utils/create-id.ts | 3 +++ 7 files changed, 13 insertions(+), 13 deletions(-) delete mode 100644 app/utils/create-chart-id.ts create mode 100644 app/utils/create-id.ts diff --git a/app/charts/index.ts b/app/charts/index.ts index d6ef4c986..b0dcc726e 100644 --- a/app/charts/index.ts +++ b/app/charts/index.ts @@ -87,7 +87,7 @@ import { } from "@/palettes"; import { bfs } from "@/utils/bfs"; import { CHART_CONFIG_VERSION } from "@/utils/chart-config/constants"; -import { createChartId } from "@/utils/create-chart-id"; +import { createId } from "@/utils/create-id"; import { isMultiHierarchyNode } from "@/utils/hierarchy"; import { unreachableError } from "@/utils/unreachable"; @@ -369,7 +369,7 @@ export const getInitialConfig = ( activeField: string | undefined; } => { return { - key: key ?? createChartId(), + key: key ?? createId(), version: CHART_CONFIG_VERSION, meta: meta ?? META, // Technically, we should scope filters per cube; but as we only set initial diff --git a/app/components/chart-shared.tsx b/app/components/chart-shared.tsx index 03bb67893..6869d28ff 100644 --- a/app/components/chart-shared.tsx +++ b/app/components/chart-shared.tsx @@ -56,7 +56,7 @@ import { getChartIcon } from "@/icons"; import SvgIcMore from "@/icons/components/IcMore"; import { useLocale } from "@/src"; import { animationFrame } from "@/utils/animation-frame"; -import { createChartId } from "@/utils/create-chart-id"; +import { createId } from "@/utils/create-id"; import { DISABLE_SCREENSHOT_ATTR, useScreenshot, @@ -346,7 +346,7 @@ export const DuplicateChartMenuActionItem = ({ dispatch({ type: "CHART_CONFIG_ADD", value: { - chartConfig: { ...chartConfig, key: createChartId() }, + chartConfig: { ...chartConfig, key: createId() }, locale, }, }); diff --git a/app/configurator/configurator-state/context.tsx b/app/configurator/configurator-state/context.tsx index 0dd90e840..322d9d696 100644 --- a/app/configurator/configurator-state/context.tsx +++ b/app/configurator/configurator-state/context.tsx @@ -30,7 +30,7 @@ import { fetchChartConfig, updateConfig, } from "@/utils/chart-config/api"; -import { createChartId } from "@/utils/create-chart-id"; +import { createId } from "@/utils/create-id"; import { getRouterChartId } from "@/utils/router/helpers"; const ConfiguratorStateContext = createContext< @@ -322,7 +322,7 @@ const ConfiguratorStateProviderInternal = ( chartId === "new" ? query.edit && typeof query.edit === "string" ? query.edit - : createChartId() + : createId() : chartId; if (chartId === "new") { replace(`/create/${savedChartId}`); diff --git a/app/utils/chart-config/api.ts b/app/utils/chart-config/api.ts index 17b718337..7f705cc09 100644 --- a/app/utils/chart-config/api.ts +++ b/app/utils/chart-config/api.ts @@ -8,7 +8,7 @@ import { ParsedConfig } from "@/db/config"; import { ConfiguratorState } from "../../config-types"; import { apiFetch } from "../api"; -import { createChartId } from "../create-chart-id"; +import { createId } from "../create-id"; import type apiConfigCreate from "../../pages/api/config-create"; import type apiConfigUpdate from "../../pages/api/config-update"; @@ -49,7 +49,7 @@ export const createConfig = async (options: CreateConfigOptions) => { data: { // Create a new chart ID, as the one in the state could be already // used by a chart that has been published. - key: createChartId(), + key: createId(), ...options.data, }, user_id: options.user_id, diff --git a/app/utils/chart-config/versioning.ts b/app/utils/chart-config/versioning.ts index cae7468a2..bbb7e479b 100644 --- a/app/utils/chart-config/versioning.ts +++ b/app/utils/chart-config/versioning.ts @@ -24,7 +24,7 @@ import { getUnversionedCubeIri, getUnversionedCubeIriServerSide, } from "@/utils/chart-config/upgrade-cube"; -import { createChartId } from "@/utils/create-chart-id"; +import { createId } from "@/utils/create-id"; type Migration = { description: string; @@ -616,7 +616,7 @@ export const chartConfigMigrations: Migration[] = [ to: "2.0.0", up: (config, configuratorState) => { const newConfig = { ...config, version: "2.0.0" }; - newConfig.key = createChartId(); + newConfig.key = createId(); newConfig.meta = configuratorState.meta; newConfig.activeField = configuratorState.activeField; diff --git a/app/utils/create-chart-id.ts b/app/utils/create-chart-id.ts deleted file mode 100644 index 9ff36fe5f..000000000 --- a/app/utils/create-chart-id.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { nanoid } from "nanoid"; - -export const createChartId = () => nanoid(12); diff --git a/app/utils/create-id.ts b/app/utils/create-id.ts new file mode 100644 index 000000000..fa2ad1ee3 --- /dev/null +++ b/app/utils/create-id.ts @@ -0,0 +1,3 @@ +import { nanoid } from "nanoid"; + +export const createId = () => nanoid(12); From 433bbe28d93b4c9a2f6b5ff66ca3a3a7318f2447 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 26 Nov 2024 14:50:10 +0100 Subject: [PATCH 009/100] feat: Add a way to add and remove text blocks ...not rendered on the canvas yet. --- app/components/chart-panel-layout-grid.tsx | 14 ++-- app/components/react-grid.tsx | 26 ++++--- app/config-types.ts | 29 +++++--- .../components/add-dataset-dialog.mock.ts | 1 + app/configurator/components/configurator.tsx | 3 + .../components/layout-configurator.tsx | 71 +++++++++++++++++-- .../configurator-state/context.tsx | 5 +- .../configurator-state/initial.tsx | 1 + app/configurator/configurator-state/mocks.ts | 2 + app/docs/charts.stories.tsx | 8 +++ app/docs/fixtures.ts | 1 + app/docs/lines.stories.tsx | 3 +- app/utils/chart-config/constants.ts | 2 +- app/utils/chart-config/versioning.ts | 57 +++++++++++++++ 14 files changed, 187 insertions(+), 36 deletions(-) diff --git a/app/components/chart-panel-layout-grid.tsx b/app/components/chart-panel-layout-grid.tsx index 055c6879d..4fda0eb28 100644 --- a/app/components/chart-panel-layout-grid.tsx +++ b/app/components/chart-panel-layout-grid.tsx @@ -33,26 +33,30 @@ const decodeLayouts = (layouts: Layouts) => { ); }; -export const ChartPanelLayoutCanvas = (props: ChartPanelLayoutTypeProps) => { - const { chartConfigs, renderChart, className } = props; +export const ChartPanelLayoutCanvas = ({ + chartConfigs, + renderChart, + className, +}: ChartPanelLayoutTypeProps) => { const [state, dispatch] = useConfiguratorState(hasChartConfigs); + const layout = state.layout; const [layouts, setLayouts] = useState(() => { assert( - state.layout.type === "dashboard" && state.layout.layout === "canvas", + layout.type === "dashboard" && layout.layout === "canvas", "ChartPanelLayoutGrid should be rendered only for dashboard layout with canvas" ); - return state.layout.layouts; + return layout.layouts; }); const handleChangeLayouts = (layouts: Layouts) => { - const layout = state.layout; assert( layout.type === "dashboard" && layout.layout === "canvas", "ChartPanelLayoutGrid should be rendered only for dashboard layout with canvas" ); const parsedLayouts = decodeLayouts(layouts); + if (!parsedLayouts) { return; } diff --git a/app/components/react-grid.tsx b/app/components/react-grid.tsx index 1be7e98fe..1dc531afc 100644 --- a/app/components/react-grid.tsx +++ b/app/components/react-grid.tsx @@ -226,9 +226,9 @@ export const ChartGridLayout = ({ } & ComponentProps) => { const classes = useStyles(); const [state, dispatch] = useConfiguratorState(hasChartConfigs); - const configLayout = state.layout; + const layout = state.layout; assert( - configLayout.type === "dashboard" && configLayout.layout === "canvas", + layout.type === "dashboard" && layout.layout === "canvas", "ChartGridLayout can only be used in a canvas layout!" ); const allowHeightInitialization = isLayouting(state); @@ -268,7 +268,10 @@ export const ChartGridLayout = ({ return [ breakpoint, chartLayouts.map((chartLayout) => { - if (configLayout.layoutsMetadata[chartLayout.i]?.initialized) { + if ( + layout.blocks.find((block) => block.key === chartLayout.i) + ?.initialized + ) { return chartLayout; } @@ -315,14 +318,15 @@ export const ChartGridLayout = ({ dispatch({ type: "LAYOUT_CHANGED", value: { - ...configLayout, + ...layout, layouts: newLayouts, - layoutsMetadata: Object.fromEntries( - state.chartConfigs.map(({ key }) => { - const layoutMetadata = configLayout.layoutsMetadata[key]; - return [key, { ...layoutMetadata, initialized: true }]; - }) - ), + blocks: layout.blocks.map((block) => { + return { + ...block, + // TODO: initialize other block types + initialized: block.type === "chart" ? true : block.initialized, + }; + }), }, }); } @@ -333,7 +337,7 @@ export const ChartGridLayout = ({ enhancedLayouts, mountedForSomeTime, resize, - configLayout, + layout, state.chartConfigs, ]); diff --git a/app/config-types.ts b/app/config-types.ts index 8f905c312..cd7bee3fb 100644 --- a/app/config-types.ts +++ b/app/config-types.ts @@ -1217,23 +1217,31 @@ export const ReactGridLayoutsType = t.record( ); export type ReactGridLayoutsType = t.TypeOf; -const ReactGridLayoutMetadata = t.type({ - initialized: t.boolean, +const LayoutChartBlock = t.type({ + type: t.literal("chart"), + key: t.string, }); -export type ReactGridLayoutMetadata = t.TypeOf; +export type LayoutChartBlock = t.TypeOf; -const ReactGridLayoutsMetadataType = t.record( - t.string, - ReactGridLayoutMetadata -); -export type ReactGridLayoutsMetadataType = t.TypeOf< - typeof ReactGridLayoutsMetadataType ->; +const LayoutTextBlock = t.type({ + type: t.literal("text"), + key: t.string, + title: t.string, + description: t.string, +}); +export type LayoutTextBlock = t.TypeOf; + +const LayoutBlock = t.intersection([ + t.union([LayoutChartBlock, LayoutTextBlock]), + t.type({ initialized: t.boolean }), +]); +export type LayoutBlock = t.TypeOf; const Layout = t.intersection([ t.type({ activeField: t.union([t.undefined, t.string]), meta: Meta, + blocks: t.array(LayoutBlock), }), t.union([ t.type({ @@ -1247,7 +1255,6 @@ const Layout = t.intersection([ type: t.literal("dashboard"), layout: t.literal("canvas"), layouts: ReactGridLayoutsType, - layoutsMetadata: ReactGridLayoutsMetadataType, }), t.type({ type: t.literal("singleURLs"), diff --git a/app/configurator/components/add-dataset-dialog.mock.ts b/app/configurator/components/add-dataset-dialog.mock.ts index 078e166a5..aa1b32752 100644 --- a/app/configurator/components/add-dataset-dialog.mock.ts +++ b/app/configurator/components/add-dataset-dialog.mock.ts @@ -10,6 +10,7 @@ export const photovoltaikChartStateMock: ConfiguratorStateConfiguringChart = { layout: { activeField: "y", type: "tab", + blocks: [{ type: "chart", key: "8-5RW138pTDA", initialized: true }], meta: { title: { de: "", diff --git a/app/configurator/components/configurator.tsx b/app/configurator/components/configurator.tsx index cfd4963a5..db47989cd 100644 --- a/app/configurator/components/configurator.tsx +++ b/app/configurator/components/configurator.tsx @@ -598,6 +598,7 @@ const LayoutingStep = () => { value: { type: "tab", meta: state.layout.meta, + blocks: state.layout.blocks, activeField: undefined, }, }); @@ -614,6 +615,7 @@ const LayoutingStep = () => { value: { type: "dashboard", meta: state.layout.meta, + blocks: state.layout.blocks, layout: "tall", activeField: undefined, }, @@ -634,6 +636,7 @@ const LayoutingStep = () => { (chartConfig) => chartConfig.key ), meta: state.layout.meta, + blocks: state.layout.blocks, activeField: undefined, }, }); diff --git a/app/configurator/components/layout-configurator.tsx b/app/configurator/components/layout-configurator.tsx index 32c39ca24..7e0b344ae 100644 --- a/app/configurator/components/layout-configurator.tsx +++ b/app/configurator/components/layout-configurator.tsx @@ -1,6 +1,7 @@ import { t, Trans } from "@lingui/macro"; import { Box, + IconButton as MUIIconButton, Stack, Switch, SwitchProps, @@ -55,8 +56,10 @@ import { } from "@/domain/data"; import { useTimeFormatLocale, useTimeFormatUnit } from "@/formatters"; import { useConfigsCubeComponents } from "@/graphql/hooks"; +import { Icon } from "@/icons"; import { useLocale } from "@/src"; import { useDashboardInteractiveFilters } from "@/stores/interactive-filters"; +import { createId } from "@/utils/create-id"; import { getTimeFilterOptions } from "@/utils/time-filter-options"; export const LayoutConfigurator = () => { @@ -540,8 +543,38 @@ const DashboardTimeRangeFilterOptions = ({ }; const LayoutBlocksConfigurator = () => { - const [state] = useConfiguratorState(isLayouting); + const [state, dispatch] = useConfiguratorState(isLayouting); const { layout } = state; + const { blocks } = layout; + + const handleAddTextBlock = useEventCallback(() => { + dispatch({ + type: "LAYOUT_CHANGED", + value: { + ...layout, + blocks: [ + ...layout.blocks, + { + type: "text", + key: createId(), + title: "", + description: "", + initialized: false, + }, + ], + }, + }); + }); + + const handleRemoveBlock = useEventCallback((key: string) => { + dispatch({ + type: "LAYOUT_CHANGED", + value: { + ...layout, + blocks: layout.blocks.filter((b) => b.key !== key), + }, + }); + }); return layout.type === "dashboard" && layout.layout === "canvas" ? ( @@ -549,7 +582,31 @@ const LayoutBlocksConfigurator = () => { Text elements - + + {blocks + .filter((b) => b.type === "text") + .map((block) => ( + + {block.key} + handleRemoveBlock(block.key)} + > + + + + ))} + + Add text @@ -585,9 +642,13 @@ const migrateLayout = ( ...layout, layout: newLayoutType, layouts, - layoutsMetadata: Object.fromEntries( - chartConfigs.map(({ key }) => [key, { initialized: false }]) - ), + blocks: chartConfigs.map(({ key }) => { + return { + type: "chart", + key, + initialized: false, + }; + }), }; } else { return { diff --git a/app/configurator/configurator-state/context.tsx b/app/configurator/configurator-state/context.tsx index 322d9d696..ef4fca709 100644 --- a/app/configurator/configurator-state/context.tsx +++ b/app/configurator/configurator-state/context.tsx @@ -191,7 +191,7 @@ export async function publishState( ) { switch (state.layout.type) { case "singleURLs": - const { publishableChartKeys, meta } = state.layout; + const { publishableChartKeys, meta, blocks } = state.layout; const reversedChartKeys = publishableChartKeys.slice().reverse(); // Charts are published in order, keep the current tab open with first chart @@ -203,7 +203,8 @@ export async function publishState( // Ensure that the layout is reset to single-chart mode layout: { type: "tab", - meta: meta, + meta, + blocks, activeField: undefined, }, }, diff --git a/app/configurator/configurator-state/initial.tsx b/app/configurator/configurator-state/initial.tsx index b35e93924..4b7ff9d1e 100644 --- a/app/configurator/configurator-state/initial.tsx +++ b/app/configurator/configurator-state/initial.tsx @@ -39,6 +39,7 @@ export const getInitialConfiguringConfigBasedOnCube = (props: { it: "", }, }, + blocks: [{ type: "chart", key: chartConfig.key, initialized: false }], activeField: undefined, }, chartConfigs: [chartConfig], diff --git a/app/configurator/configurator-state/mocks.ts b/app/configurator/configurator-state/mocks.ts index 589c9f9b4..f55ded037 100644 --- a/app/configurator/configurator-state/mocks.ts +++ b/app/configurator/configurator-state/mocks.ts @@ -22,6 +22,7 @@ export const configStateMock = { type: "singleURLs", publishableChartKeys: [], meta: {} as ConfiguratorStateConfiguringChart["layout"]["meta"], + blocks: [{ type: "chart", key: "abc", initialized: true }], }, chartConfigs: [ { @@ -101,6 +102,7 @@ export const configStateMock = { it: "", }, }, + blocks: [{ type: "chart", key: "2of7iJAjccuj", initialized: true }], }, chartConfigs: [ { diff --git a/app/docs/charts.stories.tsx b/app/docs/charts.stories.tsx index d4118c2af..a3a0a7316 100644 --- a/app/docs/charts.stories.tsx +++ b/app/docs/charts.stories.tsx @@ -65,6 +65,7 @@ const ColumnsStory = { description: { en: "", de: "", fr: "", it: "" }, label: { en: "", de: "", fr: "", it: "" }, }, + blocks: [{ type: "chart", key: chartConfig.key, initialized: true }], activeField: undefined, }, chartConfigs: [chartConfig], @@ -129,6 +130,13 @@ const ScatterplotStory = { description: { en: "", de: "", fr: "", it: "" }, label: { en: "", de: "", fr: "", it: "" }, }, + blocks: [ + { + type: "chart", + key: scatterplotChartConfig.key, + initialized: true, + }, + ], activeField: undefined, }, chartConfigs: [chartConfig], diff --git a/app/docs/fixtures.ts b/app/docs/fixtures.ts index e151d4323..00eba1612 100644 --- a/app/docs/fixtures.ts +++ b/app/docs/fixtures.ts @@ -28,6 +28,7 @@ export const states: ConfiguratorState[] = [ description: { en: "", de: "", fr: "", it: "" }, label: { en: "", de: "", fr: "", it: "" }, }, + blocks: [{ type: "chart", key: "column", initialized: true }], activeField: undefined, }, chartConfigs: [ diff --git a/app/docs/lines.stories.tsx b/app/docs/lines.stories.tsx index 3a4b85a5e..1a67b8214 100644 --- a/app/docs/lines.stories.tsx +++ b/app/docs/lines.stories.tsx @@ -43,10 +43,11 @@ const LineChartStory = () => ( description: { en: "", de: "", fr: "", it: "" }, label: { en: "", de: "", fr: "", it: "" }, }, + blocks: [{ type: "chart", key: chartConfig.key, initialized: false }], activeField: undefined, }, chartConfigs: [chartConfig], - activeChartKey: "line", + activeChartKey: chartConfig.key, dashboardFilters: { timeRange: { active: false, diff --git a/app/utils/chart-config/constants.ts b/app/utils/chart-config/constants.ts index 4079da244..8427f0135 100644 --- a/app/utils/chart-config/constants.ts +++ b/app/utils/chart-config/constants.ts @@ -1,3 +1,3 @@ -export const CONFIGURATOR_STATE_VERSION = "4.0.0"; +export const CONFIGURATOR_STATE_VERSION = "4.1.0"; export const CHART_CONFIG_VERSION = "4.0.0"; diff --git a/app/utils/chart-config/versioning.ts b/app/utils/chart-config/versioning.ts index bbb7e479b..44b7fb9ac 100644 --- a/app/utils/chart-config/versioning.ts +++ b/app/utils/chart-config/versioning.ts @@ -1868,6 +1868,63 @@ export const configuratorStateMigrations: Migration[] = [ delete dataFilters.componentIds; newConfig.dashboardFilters.dataFilters = dataFilters; + return newConfig; + }, + }, + { + description: `ALL { + layout { + + blocks + - layoutsMetadata + } + }`, + from: "4.0.0", + to: "4.1.0", + up: async (config) => { + const newConfig = { ...config, version: "4.1.0" }; + + if (newConfig.layout.layoutsMetadata) { + newConfig.layout.blocks = Object.entries( + newConfig.layout.layoutsMetadata + ).map(([k, v]) => { + return { + type: "chart", + key: k, + ...(v as object), + }; + }); + delete newConfig.layout.layoutsMetadata; + } else { + newConfig.layout.blocks = newConfig.chartConfigs.map( + (chartConfig: any) => { + return { + type: "chart", + key: chartConfig.key, + initialized: false, + }; + } + ); + } + + return newConfig; + }, + down: async (config) => { + const newConfig = { ...config, version: "4.0.0" }; + + if ( + newConfig.layout.type === "dashboard" && + newConfig.layout.layout === "canvas" + ) { + newConfig.layout.layoutsMetadata = Object.fromEntries( + newConfig.layout.blocks.map((block: any) => { + const { key, initialized } = block; + return [key, { initialized }]; + }) + ); + } + + delete newConfig.layout.blocks; + return newConfig; }, }, From d2cd43adf6602d444419d3b04271b8725d0743d6 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 26 Nov 2024 16:20:59 +0100 Subject: [PATCH 010/100] chore: Update translations --- app/configurator/components/layout-configurator.tsx | 2 +- app/locales/de/messages.po | 2 +- app/locales/en/messages.po | 2 +- app/locales/fr/messages.po | 2 +- app/locales/it/messages.po | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/configurator/components/layout-configurator.tsx b/app/configurator/components/layout-configurator.tsx index 7e0b344ae..76faa4924 100644 --- a/app/configurator/components/layout-configurator.tsx +++ b/app/configurator/components/layout-configurator.tsx @@ -579,7 +579,7 @@ const LayoutBlocksConfigurator = () => { return layout.type === "dashboard" && layout.layout === "canvas" ? ( - Text elements + Objects diff --git a/app/locales/de/messages.po b/app/locales/de/messages.po index 9d1ee245a..865156c83 100644 --- a/app/locales/de/messages.po +++ b/app/locales/de/messages.po @@ -818,7 +818,7 @@ msgstr "Abgestuft" #: app/configurator/components/layout-configurator.tsx msgid "controls.section.block-options" -msgstr "Textelemente" +msgstr "Objekte" #: app/configurator/components/layout-configurator.tsx msgid "controls.section.block-options.text-block-add" diff --git a/app/locales/en/messages.po b/app/locales/en/messages.po index 06639ad37..d89806bbb 100644 --- a/app/locales/en/messages.po +++ b/app/locales/en/messages.po @@ -818,7 +818,7 @@ msgstr "Stepped" #: app/configurator/components/layout-configurator.tsx msgid "controls.section.block-options" -msgstr "Text elements" +msgstr "Objects" #: app/configurator/components/layout-configurator.tsx msgid "controls.section.block-options.text-block-add" diff --git a/app/locales/fr/messages.po b/app/locales/fr/messages.po index dbc71b903..13035bbff 100644 --- a/app/locales/fr/messages.po +++ b/app/locales/fr/messages.po @@ -818,7 +818,7 @@ msgstr "En escalier" #: app/configurator/components/layout-configurator.tsx msgid "controls.section.block-options" -msgstr "Éléments de texte" +msgstr "Objets" #: app/configurator/components/layout-configurator.tsx msgid "controls.section.block-options.text-block-add" diff --git a/app/locales/it/messages.po b/app/locales/it/messages.po index 80a6bd0f0..81742fb0e 100644 --- a/app/locales/it/messages.po +++ b/app/locales/it/messages.po @@ -818,7 +818,7 @@ msgstr "A gradini" #: app/configurator/components/layout-configurator.tsx msgid "controls.section.block-options" -msgstr "Elementi di testo" +msgstr "Oggetti" #: app/configurator/components/layout-configurator.tsx msgid "controls.section.block-options.text-block-add" From cc1f59332e2a332293565638cc53c7b1acdddcc5 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Thu, 28 Nov 2024 13:07:12 +0100 Subject: [PATCH 011/100] refactor: Base dashboard rendering on blocks --- app/components/chart-panel-layout-grid.tsx | 6 +- app/components/chart-panel-layout-tall.tsx | 60 ++++++++----------- .../chart-panel-layout-vertical.tsx | 8 ++- app/components/chart-panel.tsx | 47 ++++++++++++--- .../components/layout-configurator.tsx | 18 +++--- 5 files changed, 81 insertions(+), 58 deletions(-) diff --git a/app/components/chart-panel-layout-grid.tsx b/app/components/chart-panel-layout-grid.tsx index 4fda0eb28..4ae98924f 100644 --- a/app/components/chart-panel-layout-grid.tsx +++ b/app/components/chart-panel-layout-grid.tsx @@ -34,8 +34,8 @@ const decodeLayouts = (layouts: Layouts) => { }; export const ChartPanelLayoutCanvas = ({ - chartConfigs, - renderChart, + blocks, + renderBlock, className, }: ChartPanelLayoutTypeProps) => { const [state, dispatch] = useConfiguratorState(hasChartConfigs); @@ -81,7 +81,7 @@ export const ChartPanelLayoutCanvas = ({ onLayoutChange={(_, allLayouts) => handleChangeLayouts(allLayouts)} breakpoints={FREE_CANVAS_BREAKPOINTS} > - {chartConfigs.map(renderChart)} + {blocks.map(renderBlock)} ); }; diff --git a/app/components/chart-panel-layout-tall.tsx b/app/components/chart-panel-layout-tall.tsx index 5bed8f915..48731c76c 100644 --- a/app/components/chart-panel-layout-tall.tsx +++ b/app/components/chart-panel-layout-tall.tsx @@ -1,20 +1,18 @@ import { Box, useMediaQuery } from "@mui/material"; import { useMemo } from "react"; +import { ChartPanelLayoutTypeProps } from "@/components/chart-panel"; import classes from "@/components/chart-panel-layout-tall.module.css"; -import { ChartConfig } from "@/config-types"; +import { LayoutBlock } from "@/config-types"; import { useTheme } from "@/themes"; -type ChartPanelLayoutTallProps = { - chartConfigs: ChartConfig[]; - renderChart: (chartConfig: ChartConfig) => JSX.Element; -}; - -export const ChartPanelLayoutTall = (props: ChartPanelLayoutTallProps) => { - const { chartConfigs, renderChart } = props; +export const ChartPanelLayoutTall = ({ + blocks, + renderBlock, +}: ChartPanelLayoutTypeProps) => { const rows = useMemo(() => { - return getChartPanelLayoutTallRows(chartConfigs, renderChart); - }, [chartConfigs, renderChart]); + return getChartPanelLayoutTallRows({ blocks, renderBlock }); + }, [blocks, renderBlock]); return ( <> @@ -24,67 +22,61 @@ export const ChartPanelLayoutTall = (props: ChartPanelLayoutTallProps) => { ); }; -type ChartPanelLayoutTallRowProps = { - row: ChartPanelLayoutTallRow; -}; -const ChartPanelLayoutTallRow = (props: ChartPanelLayoutTallRowProps) => { - const { row } = props; +const ChartPanelLayoutTallRow = ({ row }: { row: ChartPanelLayoutTallRow }) => { const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down("md")); switch (row.type) { case "wide": - return row.renderChart(row.chartConfig); + return row.renderBlock(row.block); case "narrow": if (isMobile) { - return <>{row.chartConfigs.map(row.renderChart)}; + return <>{row.chartConfigs.map(row.renderBlock)}; } return ( - {row.chartConfigs.map(row.renderChart)} + {row.chartConfigs.map(row.renderBlock)} ); } }; type ChartPanelLayoutTallRow = { - renderChart: (chartConfig: ChartConfig) => JSX.Element; + renderBlock: (block: LayoutBlock) => JSX.Element; } & ( | { type: "wide"; - chartConfig: ChartConfig; + block: LayoutBlock; } | { type: "narrow"; - chartConfigs: [ChartConfig] | [ChartConfig, ChartConfig]; + chartConfigs: [LayoutBlock] | [LayoutBlock, LayoutBlock]; } ); -export const getChartPanelLayoutTallRows = ( - chartConfigs: ChartConfig[], - renderChart: (chartConfig: ChartConfig) => JSX.Element -): ChartPanelLayoutTallRow[] => { +export const getChartPanelLayoutTallRows = ({ + blocks, + renderBlock, +}: ChartPanelLayoutTypeProps): ChartPanelLayoutTallRow[] => { const rows: ChartPanelLayoutTallRow[] = []; - for (let i = 0; i < chartConfigs.length; i += 1) { + for (let i = 0; i < blocks.length; i += 1) { if (i % 3 === 0) { rows.push({ type: "wide", - chartConfig: chartConfigs[i], - renderChart, + block: blocks[i], + renderBlock, }); } if (i % 3 === 1) { - const currentConfig = chartConfigs[i]; - const nextConfig = chartConfigs[i + 1]; + const block = blocks[i]; + const nextBlock = blocks[i + 1]; rows.push({ type: "narrow", - chartConfigs: nextConfig - ? [currentConfig, nextConfig] - : [currentConfig], - renderChart, + chartConfigs: nextBlock ? [block, nextBlock] : [block], + renderBlock, }); } } diff --git a/app/components/chart-panel-layout-vertical.tsx b/app/components/chart-panel-layout-vertical.tsx index 46f540d20..f24d3aca8 100644 --- a/app/components/chart-panel-layout-vertical.tsx +++ b/app/components/chart-panel-layout-vertical.tsx @@ -1,6 +1,8 @@ import { ChartPanelLayoutTypeProps } from "@/components/chart-panel"; -export const ChartPanelLayoutVertical = (props: ChartPanelLayoutTypeProps) => { - const { chartConfigs, renderChart } = props; - return <>{chartConfigs.map(renderChart)}; +export const ChartPanelLayoutVertical = ({ + blocks, + renderBlock, +}: ChartPanelLayoutTypeProps) => { + return <>{blocks.map(renderBlock)}; }; diff --git a/app/components/chart-panel.tsx b/app/components/chart-panel.tsx index 1b99af979..1072fbf82 100644 --- a/app/components/chart-panel.tsx +++ b/app/components/chart-panel.tsx @@ -1,7 +1,7 @@ -import { Box, BoxProps, Theme } from "@mui/material"; +import { Box, BoxProps, Theme, Typography } from "@mui/material"; import { makeStyles } from "@mui/styles"; import clsx from "clsx"; -import React, { HTMLProps, forwardRef } from "react"; +import { forwardRef, HTMLProps, PropsWithChildren, useCallback } from "react"; import { ChartPanelLayoutCanvas, @@ -12,7 +12,7 @@ import { ChartPanelLayoutVertical } from "@/components/chart-panel-layout-vertic import { ChartSelectionTabs } from "@/components/chart-selection-tabs"; import { DashboardInteractiveFilters } from "@/components/dashboard-interactive-filters"; import { ChartConfig, Layout, LayoutDashboard } from "@/config-types"; -import { hasChartConfigs } from "@/configurator"; +import { hasChartConfigs, LayoutBlock, LayoutTextBlock } from "@/configurator"; import { useConfiguratorState } from "@/src"; const useStyles = makeStyles((theme: Theme) => ({ @@ -75,7 +75,7 @@ export const ChartWrapper = forwardRef( } ); -type ChartPanelLayoutProps = React.PropsWithChildren<{ +type ChartPanelLayoutProps = PropsWithChildren<{ layoutType: LayoutDashboard["layout"]; chartConfigs: ChartConfig[]; renderChart: (chartConfig: ChartConfig) => JSX.Element; @@ -83,8 +83,8 @@ type ChartPanelLayoutProps = React.PropsWithChildren<{ HTMLProps; export type ChartPanelLayoutTypeProps = { - chartConfigs: ChartConfig[]; - renderChart: (chartConfig: ChartConfig) => JSX.Element; + blocks: LayoutBlock[]; + renderBlock: (block: LayoutBlock) => JSX.Element; className?: string; }; @@ -109,15 +109,46 @@ export const ChartPanelLayout = (props: ChartPanelLayoutProps) => { const classes = useStyles(); const Wrapper = Wrappers[layoutType]; const [state] = useConfiguratorState(hasChartConfigs); + const { layout } = state; + const { blocks } = layout; + + const renderTextBlock = useCallback((textBlock: LayoutTextBlock) => { + return ( + // Important, otherwise ReactGrid breaks +
+ {textBlock.title} + {textBlock.description} +
+ ); + }, []); + + const renderBlock = useCallback( + (block: LayoutBlock) => { + switch (block.type) { + case "chart": + const chartConfig = chartConfigs.find( + (c) => c.key === block.key + ) as ChartConfig; + return renderChart(chartConfig); + case "text": + return renderTextBlock(block); + default: + const _exhaustiveCheck: never = block; + return _exhaustiveCheck; + } + }, + [chartConfigs, renderChart, renderTextBlock] + ); + return (
- {/** We want to completely remount this component if chartConfigs change */} {state.layout.type === "dashboard" ? ( x.key).join(",")} /> ) : null} - +
); }; diff --git a/app/configurator/components/layout-configurator.tsx b/app/configurator/components/layout-configurator.tsx index 76faa4924..a073ab412 100644 --- a/app/configurator/components/layout-configurator.tsx +++ b/app/configurator/components/layout-configurator.tsx @@ -21,7 +21,6 @@ import { generateLayout, } from "@/components/react-grid"; import { - ChartConfig, DashboardTimeRangeFilter, getChartConfig, LayoutDashboard, @@ -557,8 +556,8 @@ const LayoutBlocksConfigurator = () => { { type: "text", key: createId(), - title: "", - description: "", + title: "Example title.", + description: "Example description.", initialized: false, }, ], @@ -619,15 +618,15 @@ const LayoutBlocksConfigurator = () => { const migrateLayout = ( layout: LayoutDashboard, newLayoutType: LayoutDashboard["layout"], - chartConfigs: ChartConfig[] + blocks: LayoutDashboard["blocks"] ): LayoutDashboard => { if (newLayoutType === "canvas") { const defaultLayout = generateLayout({ - count: chartConfigs.length, + count: blocks.length, layout: "tiles", }).map((l, i) => ({ ...l, - i: chartConfigs[i].key, + i: blocks[i].key, })); const layouts: Record< keyof typeof FREE_CANVAS_BREAKPOINTS, @@ -642,10 +641,9 @@ const migrateLayout = ( ...layout, layout: newLayoutType, layouts, - blocks: chartConfigs.map(({ key }) => { + blocks: blocks.map((block) => { return { - type: "chart", - key, + ...block, initialized: false, }; }), @@ -682,7 +680,7 @@ const DashboardLayoutButton = ({ } else { dispatch({ type: "LAYOUT_CHANGED", - value: migrateLayout(layout, type, config.chartConfigs), + value: migrateLayout(layout, type, config.layout.blocks), }); } }); From 2a022a346e610059add9e8582c43c82d9df12394 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Wed, 11 Dec 2024 14:36:34 +0100 Subject: [PATCH 012/100] chore: Update translations --- app/configurator/components/layout-configurator.tsx | 4 ++-- app/locales/de/messages.po | 4 ++-- app/locales/en/messages.po | 4 ++-- app/locales/fr/messages.po | 4 ++-- app/locales/it/messages.po | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/configurator/components/layout-configurator.tsx b/app/configurator/components/layout-configurator.tsx index a073ab412..316bdfdfd 100644 --- a/app/configurator/components/layout-configurator.tsx +++ b/app/configurator/components/layout-configurator.tsx @@ -606,8 +606,8 @@ const LayoutBlocksConfigurator = () => { ))}
- - Add text + + Add object
diff --git a/app/locales/de/messages.po b/app/locales/de/messages.po index 865156c83..4d705920c 100644 --- a/app/locales/de/messages.po +++ b/app/locales/de/messages.po @@ -821,8 +821,8 @@ msgid "controls.section.block-options" msgstr "Objekte" #: app/configurator/components/layout-configurator.tsx -msgid "controls.section.block-options.text-block-add" -msgstr "Text hinzufügen" +msgid "controls.section.block-options.block-add" +msgstr "Objekt hinzufügen" #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" diff --git a/app/locales/en/messages.po b/app/locales/en/messages.po index d89806bbb..e0568ee9d 100644 --- a/app/locales/en/messages.po +++ b/app/locales/en/messages.po @@ -821,8 +821,8 @@ msgid "controls.section.block-options" msgstr "Objects" #: app/configurator/components/layout-configurator.tsx -msgid "controls.section.block-options.text-block-add" -msgstr "Add text" +msgid "controls.section.block-options.block-add" +msgstr "Add object" #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" diff --git a/app/locales/fr/messages.po b/app/locales/fr/messages.po index 13035bbff..97b7a7946 100644 --- a/app/locales/fr/messages.po +++ b/app/locales/fr/messages.po @@ -821,8 +821,8 @@ msgid "controls.section.block-options" msgstr "Objets" #: app/configurator/components/layout-configurator.tsx -msgid "controls.section.block-options.text-block-add" -msgstr "Ajouter du texte" +msgid "controls.section.block-options.block-add" +msgstr "Ajouter un objet" #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" diff --git a/app/locales/it/messages.po b/app/locales/it/messages.po index 81742fb0e..2374e79e8 100644 --- a/app/locales/it/messages.po +++ b/app/locales/it/messages.po @@ -821,8 +821,8 @@ msgid "controls.section.block-options" msgstr "Oggetti" #: app/configurator/components/layout-configurator.tsx -msgid "controls.section.block-options.text-block-add" -msgstr "Aggiungi testo" +msgid "controls.section.block-options.block-add" +msgstr "Aggiungi oggetto" #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" From 9b1d978daa16a9a12893e6bcdeba22c0a15dedde Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Wed, 11 Dec 2024 15:54:00 +0100 Subject: [PATCH 013/100] feat: AddLayoutBlocks --- .../components/layout-configurator.tsx | 113 +++++++++++++----- app/locales/de/messages.po | 4 + app/locales/en/messages.po | 4 + app/locales/fr/messages.po | 4 + app/locales/it/messages.po | 4 + 5 files changed, 98 insertions(+), 31 deletions(-) diff --git a/app/configurator/components/layout-configurator.tsx b/app/configurator/components/layout-configurator.tsx index 316bdfdfd..c5ebc982e 100644 --- a/app/configurator/components/layout-configurator.tsx +++ b/app/configurator/components/layout-configurator.tsx @@ -1,16 +1,26 @@ import { t, Trans } from "@lingui/macro"; import { Box, + Menu, + MenuItem, IconButton as MUIIconButton, Stack, Switch, SwitchProps, Typography, - useEventCallback, } from "@mui/material"; +import { Theme } from "@mui/material/styles"; +import { makeStyles } from "@mui/styles"; import capitalize from "lodash/capitalize"; import omit from "lodash/omit"; -import { useCallback, useEffect, useMemo, useRef } from "react"; +import { + MouseEvent, + useCallback, + useEffect, + useMemo, + useRef, + useState, +} from "react"; import { DataFilterGenericDimensionProps } from "@/charts/shared/chart-data-filters"; import { useCombinedTemporalDimension } from "@/charts/shared/use-combined-temporal-dimension"; @@ -60,6 +70,7 @@ import { useLocale } from "@/src"; import { useDashboardInteractiveFilters } from "@/stores/interactive-filters"; import { createId } from "@/utils/create-id"; import { getTimeFilterOptions } from "@/utils/time-filter-options"; +import useEvent from "@/utils/use-event"; export const LayoutConfigurator = () => { return ( @@ -133,7 +144,7 @@ const LayoutSharedFiltersConfigurator = () => { const combinedTemporalDimension = useCombinedTemporalDimension(); - const handleTimeRangeFilterToggle: SwitchProps["onChange"] = useEventCallback( + const handleTimeRangeFilterToggle: SwitchProps["onChange"] = useEvent( (_, checked) => { if (checked) { const options = getTimeFilterOptions({ @@ -170,7 +181,7 @@ const LayoutSharedFiltersConfigurator = () => { } ); - const handleDataFiltersToggle = useEventCallback( + const handleDataFiltersToggle = useEvent( (checked: boolean, componentId: string) => { if (checked) { dispatch({ @@ -546,26 +557,7 @@ const LayoutBlocksConfigurator = () => { const { layout } = state; const { blocks } = layout; - const handleAddTextBlock = useEventCallback(() => { - dispatch({ - type: "LAYOUT_CHANGED", - value: { - ...layout, - blocks: [ - ...layout.blocks, - { - type: "text", - key: createId(), - title: "Example title.", - description: "Example description.", - initialized: false, - }, - ], - }, - }); - }); - - const handleRemoveBlock = useEventCallback((key: string) => { + const handleRemoveBlock = useEvent((key: string) => { dispatch({ type: "LAYOUT_CHANGED", value: { @@ -581,7 +573,7 @@ const LayoutBlocksConfigurator = () => { Objects - + {blocks .filter((b) => b.type === "text") .map((block) => ( @@ -605,16 +597,75 @@ const LayoutBlocksConfigurator = () => { ))} - - - Add object - - +
) : null; }; +const AddLayoutBlocks = () => { + const [state, dispatch] = useConfiguratorState(isLayouting); + const { layout } = state; + const [anchorEl, setAnchorEl] = useState(null); + const handleOpen = useEvent((e: MouseEvent) => { + setAnchorEl(e.currentTarget); + }); + const handleClose = useEvent(() => { + setAnchorEl(null); + }); + const handleAddTextBlock = useEvent(() => { + dispatch({ + type: "LAYOUT_CHANGED", + value: { + ...layout, + blocks: [ + ...layout.blocks, + { + type: "text", + key: createId(), + title: "Example title.", + description: "Example description.", + initialized: false, + }, + ], + }, + }); + handleClose(); + }); + const classes = useAddTextBlocksStyles(); + + return ( + <> + + Add object + + + + + + + Add text + + + + + + ); +}; + +const useAddTextBlocksStyles = makeStyles((theme) => ({ + menuItem: { + minWidth: 200, + padding: theme.spacing(3), + }, + menuItemIcon: { + marginRight: "0.75rem", + }, + menuItemText: { + color: theme.palette.grey[700], + }, +})); + const migrateLayout = ( layout: LayoutDashboard, newLayoutType: LayoutDashboard["layout"], @@ -671,7 +722,7 @@ const DashboardLayoutButton = ({ ref.current = layout; } }, [layout, checked]); - const handleClick = useEventCallback(() => { + const handleClick = useEvent(() => { if (ref.current?.layout === type) { dispatch({ type: "LAYOUT_CHANGED", diff --git a/app/locales/de/messages.po b/app/locales/de/messages.po index 4d705920c..67c39dec6 100644 --- a/app/locales/de/messages.po +++ b/app/locales/de/messages.po @@ -824,6 +824,10 @@ msgstr "Objekte" msgid "controls.section.block-options.block-add" msgstr "Objekt hinzufügen" +#: app/configurator/components/layout-configurator.tsx +msgid "controls.section.block-options.block-add.text" +msgstr "Text" + #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" msgstr "Diagramm-Einstellungen" diff --git a/app/locales/en/messages.po b/app/locales/en/messages.po index e0568ee9d..afd088e9e 100644 --- a/app/locales/en/messages.po +++ b/app/locales/en/messages.po @@ -824,6 +824,10 @@ msgstr "Objects" msgid "controls.section.block-options.block-add" msgstr "Add object" +#: app/configurator/components/layout-configurator.tsx +msgid "controls.section.block-options.block-add.text" +msgstr "Text" + #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" msgstr "Chart Options" diff --git a/app/locales/fr/messages.po b/app/locales/fr/messages.po index 97b7a7946..79e66ac0f 100644 --- a/app/locales/fr/messages.po +++ b/app/locales/fr/messages.po @@ -824,6 +824,10 @@ msgstr "Objets" msgid "controls.section.block-options.block-add" msgstr "Ajouter un objet" +#: app/configurator/components/layout-configurator.tsx +msgid "controls.section.block-options.block-add.text" +msgstr "Texte" + #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" msgstr "Paramètres graphiques" diff --git a/app/locales/it/messages.po b/app/locales/it/messages.po index 2374e79e8..f6b40c721 100644 --- a/app/locales/it/messages.po +++ b/app/locales/it/messages.po @@ -824,6 +824,10 @@ msgstr "Oggetti" msgid "controls.section.block-options.block-add" msgstr "Aggiungi oggetto" +#: app/configurator/components/layout-configurator.tsx +msgid "controls.section.block-options.block-add.text" +msgstr "Testo" + #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" msgstr "Opzioni del grafico" From 763c9ca8838a2dac694544658ab28080f9f5f426 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Wed, 11 Dec 2024 16:11:09 +0100 Subject: [PATCH 014/100] chore: Add react-markdown --- app/package.json | 1 + yarn.lock | 627 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 627 insertions(+), 1 deletion(-) diff --git a/app/package.json b/app/package.json index 150cbaba4..5c5747e9a 100644 --- a/app/package.json +++ b/app/package.json @@ -103,6 +103,7 @@ "react-grid-layout": "^1.4.4", "react-inspector": "^6.0.2", "react-map-gl": "^7.0.10", + "react-markdown": "^9.0.1", "react-string-replace": "^1.1.1", "react-table": "^7.8.0", "react-virtualized-auto-sizer": "^1.0.24", diff --git a/yarn.lock b/yarn.lock index 8d43d8c4c..7223b538c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9019,6 +9019,13 @@ "@types/d3-transition" "*" "@types/d3-zoom" "*" +"@types/debug@^4.0.0": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + "@types/detect-port@^1.3.0": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/detect-port/-/detect-port-1.3.5.tgz#deecde143245989dee0e82115f3caba5ee0ea747" @@ -9085,6 +9092,13 @@ "@types/estree" "*" "@types/json-schema" "*" +"@types/estree-jsx@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18" + integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== + dependencies: + "@types/estree" "*" + "@types/estree@*": version "0.0.48" resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.48.tgz" @@ -9207,6 +9221,13 @@ dependencies: "@types/unist" "*" +"@types/hast@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== + dependencies: + "@types/unist" "*" + "@types/hoist-non-react-statics@^3.3.0": version "3.3.1" resolved "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz" @@ -9358,6 +9379,13 @@ dependencies: "@types/unist" "*" +"@types/mdast@^4.0.0": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== + dependencies: + "@types/unist" "*" + "@types/mdx@^2.0.0": version "2.0.11" resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.11.tgz#21f4c166ed0e0a3a733869ba04cd8daea9834b8e" @@ -9383,6 +9411,11 @@ resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz" integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== +"@types/ms@*": + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + "@types/node-fetch@^2.6.4": version "2.6.11" resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" @@ -9775,6 +9808,11 @@ resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz" integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== +"@types/unist@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== + "@types/use-sync-external-store@^0.0.3": version "0.0.3" resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" @@ -10047,6 +10085,11 @@ "@typescript-eslint/types" "6.21.0" eslint-visitor-keys "^3.4.1" +"@ungap/structured-clone@^1.0.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.1.tgz#28fa185f67daaf7b7a1a8c1d445132c5d979f8bd" + integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA== + "@urql/core@^2.3.2": version "2.3.5" resolved "https://registry.npmjs.org/@urql/core/-/core-2.3.5.tgz" @@ -11387,6 +11430,11 @@ bail@^1.0.0: resolved "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz" integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== +bail@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== + balanced-match@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" @@ -11958,6 +12006,11 @@ ccount@^1.0.0: resolved "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz" integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + chai@^4.3.10, chai@^4.3.7: version "4.4.1" resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" @@ -12061,21 +12114,41 @@ char-regex@^1.0.2: resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +character-entities-html4@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + character-entities-legacy@^1.0.0: version "1.1.4" resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz" integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + character-entities@^1.0.0: version "1.2.4" resolved "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz" integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + character-reference-invalid@^1.0.0: version "1.1.4" resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== +character-reference-invalid@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" + integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" @@ -12509,6 +12582,11 @@ comma-separated-tokens@^1.0.0: resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz" integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + commander@*, commander@^7.2.0: version "7.2.0" resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" @@ -13435,6 +13513,13 @@ decimal.js@^10.2.1: resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz" integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== +decode-named-character-reference@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" + integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== + dependencies: + character-entities "^2.0.0" + decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" @@ -13620,7 +13705,7 @@ dependency-tree@^9.0.0: precinct "^9.0.0" typescript "^4.0.0" -dequal@^2.0.2, dequal@^2.0.3: +dequal@^2.0.0, dequal@^2.0.2, dequal@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== @@ -13835,6 +13920,13 @@ detective-typescript@^9.0.0, detective-typescript@^9.1.1: node-source-walk "^5.0.1" typescript "^4.9.5" +devlop@^1.0.0, devlop@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== + dependencies: + dequal "^2.0.0" + diff-sequences@^27.0.6: version "27.0.6" resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz" @@ -14845,6 +14937,11 @@ estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-util-is-identifier-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd" + integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== + estree-walker@^0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz" @@ -16366,6 +16463,27 @@ hast-util-raw@6.0.1: xtend "^4.0.0" zwitch "^1.0.0" +hast-util-to-jsx-runtime@^2.0.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz#6d11b027473e69adeaa00ca4cfb5bb68e3d282fa" + integrity sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg== + dependencies: + "@types/estree" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + comma-separated-tokens "^2.0.0" + devlop "^1.0.0" + estree-util-is-identifier-name "^3.0.0" + hast-util-whitespace "^3.0.0" + mdast-util-mdx-expression "^2.0.0" + mdast-util-mdx-jsx "^3.0.0" + mdast-util-mdxjs-esm "^2.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + style-to-object "^1.0.0" + unist-util-position "^5.0.0" + vfile-message "^4.0.0" + hast-util-to-parse5@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz" @@ -16377,6 +16495,13 @@ hast-util-to-parse5@^6.0.0: xtend "^4.0.0" zwitch "^1.0.0" +hast-util-whitespace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" + integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== + dependencies: + "@types/hast" "^3.0.0" + hastscript@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz" @@ -16477,6 +16602,11 @@ html-to-image@^1.11.11: resolved "https://registry.yarnpkg.com/html-to-image/-/html-to-image-1.11.11.tgz#c0f8a34dc9e4b97b93ff7ea286eb8562642ebbea" integrity sha512-9gux8QhvjRO/erSnDPv28noDZcPZmYE7e1vFsBLKLlRlKDSqNJYebj6Qz1TGd5lsRV+X+xYyjCKjuZdABinWjA== +html-url-attributes@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/html-url-attributes/-/html-url-attributes-3.0.1.tgz#83b052cd5e437071b756cd74ae70f708870c2d87" + integrity sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ== + html-void-elements@^1.0.0: version "1.0.5" resolved "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz" @@ -16741,6 +16871,11 @@ inline-style-parser@0.1.1: resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== +inline-style-parser@0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.4.tgz#f4af5fe72e612839fcd453d989a586566d695f22" + integrity sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q== + inquirer@^6.0.0: version "6.5.2" resolved "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz" @@ -16851,6 +16986,11 @@ is-alphabetical@1.0.4, is-alphabetical@^1.0.0: resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz" integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== +is-alphabetical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" + integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== + is-alphanumerical@^1.0.0: version "1.0.4" resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz" @@ -16859,6 +16999,14 @@ is-alphanumerical@^1.0.0: is-alphabetical "^1.0.0" is-decimal "^1.0.0" +is-alphanumerical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" + integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== + dependencies: + is-alphabetical "^2.0.0" + is-decimal "^2.0.0" + is-arguments@^1.0.4, is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" @@ -16979,6 +17127,11 @@ is-decimal@^1.0.0: resolved "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz" integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== +is-decimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" + integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== + is-deflate@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-deflate/-/is-deflate-1.0.0.tgz#c862901c3c161fb09dac7cdc7e784f80e98f2f14" @@ -17090,6 +17243,11 @@ is-hexadecimal@^1.0.0: resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== +is-hexadecimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" + integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== + is-in-browser@^1.0.2, is-in-browser@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" @@ -17182,6 +17340,11 @@ is-plain-obj@^2.0.0: resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-plain-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + is-plain-object@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" @@ -18919,6 +19082,11 @@ long@^4.0.0: resolved "https://registry.npmjs.org/long/-/long-4.0.0.tgz" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== +longest-streak@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" + integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" @@ -19204,6 +19372,74 @@ mdast-util-definitions@^4.0.0: dependencies: unist-util-visit "^2.0.0" +mdast-util-from-markdown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz#4850390ca7cf17413a9b9a0fbefcd1bc0eb4160a" + integrity sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + mdast-util-to-string "^4.0.0" + micromark "^4.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-decode-string "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + unist-util-stringify-position "^4.0.0" + +mdast-util-mdx-expression@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz#43f0abac9adc756e2086f63822a38c8d3c3a5096" + integrity sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-mdx-jsx@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz#76b957b3da18ebcfd0de3a9b4451dcd6fdec2320" + integrity sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + ccount "^2.0.0" + devlop "^1.1.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + parse-entities "^4.0.0" + stringify-entities "^4.0.0" + unist-util-stringify-position "^4.0.0" + vfile-message "^4.0.0" + +mdast-util-mdxjs-esm@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz#019cfbe757ad62dd557db35a695e7314bcc9fa97" + integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-phrasing@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" + integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== + dependencies: + "@types/mdast" "^4.0.0" + unist-util-is "^6.0.0" + mdast-util-to-hast@10.0.1: version "10.0.1" resolved "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz" @@ -19218,11 +19454,48 @@ mdast-util-to-hast@10.0.1: unist-util-position "^3.0.0" unist-util-visit "^2.0.0" +mdast-util-to-hast@^13.0.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4" + integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@ungap/structured-clone" "^1.0.0" + devlop "^1.0.0" + micromark-util-sanitize-uri "^2.0.0" + trim-lines "^3.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + +mdast-util-to-markdown@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz#f910ffe60897f04bb4b7e7ee434486f76288361b" + integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + longest-streak "^3.0.0" + mdast-util-phrasing "^4.0.0" + mdast-util-to-string "^4.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-decode-string "^2.0.0" + unist-util-visit "^5.0.0" + zwitch "^2.0.0" + mdast-util-to-string@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527" integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== +mdast-util-to-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" + integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== + dependencies: + "@types/mdast" "^4.0.0" + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" @@ -19323,6 +19596,200 @@ microee@^0.0.6: resolved "https://registry.yarnpkg.com/microee/-/microee-0.0.6.tgz#a12bdb0103681e8b126a9b071eba4c467c78fffe" integrity sha512-/LdL3jiBWDJ3oQIRLgRhfeCZNE3patM1LiwCC124+/HHn10sI/G2OAyiMfTNzH5oYWoZBk0tRZADAUOv+0Wt0A== +micromark-core-commonmark@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz#6a45bbb139e126b3f8b361a10711ccc7c6e15e93" + integrity sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w== + dependencies: + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-factory-destination "^2.0.0" + micromark-factory-label "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-factory-title "^2.0.0" + micromark-factory-whitespace "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-html-tag-name "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-destination@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639" + integrity sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-label@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz#5267efa97f1e5254efc7f20b459a38cb21058ba1" + integrity sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg== + dependencies: + devlop "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-space@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz#36d0212e962b2b3121f8525fc7a3c7c029f334fc" + integrity sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-title@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz#237e4aa5d58a95863f01032d9ee9b090f1de6e94" + integrity sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-whitespace@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz#06b26b2983c4d27bfcc657b33e25134d4868b0b1" + integrity sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-character@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" + integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== + dependencies: + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-chunked@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz#47fbcd93471a3fccab86cff03847fc3552db1051" + integrity sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-classify-character@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz#d399faf9c45ca14c8b4be98b1ea481bced87b629" + integrity sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-combine-extensions@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz#2a0f490ab08bff5cc2fd5eec6dd0ca04f89b30a9" + integrity sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg== + dependencies: + micromark-util-chunked "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-decode-numeric-character-reference@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz#fcf15b660979388e6f118cdb6bf7d79d73d26fe5" + integrity sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-decode-string@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz#6cb99582e5d271e84efca8e61a807994d7161eb2" + integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-encode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" + integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== + +micromark-util-html-tag-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz#e40403096481986b41c106627f98f72d4d10b825" + integrity sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA== + +micromark-util-normalize-identifier@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz#c30d77b2e832acf6526f8bf1aa47bc9c9438c16d" + integrity sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-resolve-all@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz#e1a2d62cdd237230a2ae11839027b19381e31e8b" + integrity sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg== + dependencies: + micromark-util-types "^2.0.0" + +micromark-util-sanitize-uri@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" + integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-subtokenize@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.3.tgz#70ffb99a454bd8c913c8b709c3dc97baefb65f96" + integrity sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg== + dependencies: + devlop "^1.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-symbol@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" + integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== + +micromark-util-types@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.1.tgz#a3edfda3022c6c6b55bfb049ef5b75d70af50709" + integrity sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ== + +micromark@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.1.tgz#294c2f12364759e5f9e925a767ae3dfde72223ff" + integrity sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + micromatch@4.0.2: version "4.0.2" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz" @@ -20391,6 +20858,20 @@ parse-entities@^2.0.0: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" +parse-entities@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.1.tgz#4e2a01111fb1c986549b944af39eeda258fc9e4e" + integrity sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w== + dependencies: + "@types/unist" "^2.0.0" + character-entities "^2.0.0" + character-entities-legacy "^3.0.0" + character-reference-invalid "^2.0.0" + decode-named-character-reference "^1.0.0" + is-alphanumerical "^2.0.0" + is-decimal "^2.0.0" + is-hexadecimal "^2.0.0" + parse-filepath@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz" @@ -21181,6 +21662,11 @@ property-information@^5.0.0, property-information@^5.3.0: dependencies: xtend "^4.0.0" +property-information@^6.0.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" + integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== + protocol-buffers-schema@^3.3.1: version "3.5.1" resolved "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.5.1.tgz" @@ -21702,6 +22188,22 @@ react-map-gl@^7.0.10: dependencies: "@types/mapbox-gl" "^2.6.0" +react-markdown@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-9.0.1.tgz#c05ddbff67fd3b3f839f8c648e6fb35d022397d1" + integrity sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg== + dependencies: + "@types/hast" "^3.0.0" + devlop "^1.0.0" + hast-util-to-jsx-runtime "^2.0.0" + html-url-attributes "^3.0.0" + mdast-util-to-hast "^13.0.0" + remark-parse "^11.0.0" + remark-rehype "^11.0.0" + unified "^11.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + react-redux@^7.2.0: version "7.2.4" resolved "https://registry.npmjs.org/react-redux/-/react-redux-7.2.4.tgz" @@ -22201,6 +22703,27 @@ remark-parse@8.0.3: vfile-location "^3.0.0" xtend "^4.0.1" +remark-parse@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" + integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-from-markdown "^2.0.0" + micromark-util-types "^2.0.0" + unified "^11.0.0" + +remark-rehype@^11.0.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.1.tgz#f864dd2947889a11997c0a2667cd6b38f685bca7" + integrity sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + mdast-util-to-hast "^13.0.0" + unified "^11.0.0" + vfile "^6.0.0" + remark-slug@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/remark-slug/-/remark-slug-6.1.0.tgz#0503268d5f0c4ecb1f33315c00465ccdd97923ce" @@ -23146,6 +23669,11 @@ space-separated-tokens@^1.0.0: resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz" integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== + sparql-http-client@^2.2.2: version "2.4.0" resolved "https://registry.npmjs.org/sparql-http-client/-/sparql-http-client-2.4.0.tgz" @@ -23560,6 +24088,14 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +stringify-entities@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== + dependencies: + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" + stringify-object@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" @@ -23661,6 +24197,13 @@ style-to-object@0.3.0, style-to-object@^0.3.0: dependencies: inline-style-parser "0.1.1" +style-to-object@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.8.tgz#67a29bca47eaa587db18118d68f9d95955e81292" + integrity sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g== + dependencies: + inline-style-parser "0.2.4" + styled-jsx@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" @@ -24160,6 +24703,11 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" @@ -24180,6 +24728,11 @@ trough@^1.0.0: resolved "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz" integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== +trough@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== + ts-api-utils@^1.0.1: version "1.3.0" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" @@ -24613,6 +25166,19 @@ unified@9.2.0: trough "^1.0.0" vfile "^4.0.0" +unified@^11.0.0: + version "11.0.5" + resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" + integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== + dependencies: + "@types/unist" "^3.0.0" + bail "^2.0.0" + devlop "^1.0.0" + extend "^3.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^6.0.0" + union-value@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -24650,11 +25216,25 @@ unist-util-is@^4.0.0: resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz" integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== +unist-util-is@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" + integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-position@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz" integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== +unist-util-position@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" + integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== + dependencies: + "@types/unist" "^3.0.0" + unist-util-remove-position@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz" @@ -24676,6 +25256,13 @@ unist-util-stringify-position@^2.0.0: dependencies: "@types/unist" "^2.0.2" +unist-util-stringify-position@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== + dependencies: + "@types/unist" "^3.0.0" + unist-util-visit-parents@^3.0.0: version "3.1.1" resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz" @@ -24684,6 +25271,14 @@ unist-util-visit-parents@^3.0.0: "@types/unist" "^2.0.0" unist-util-is "^4.0.0" +unist-util-visit-parents@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" + integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit@2.0.3, unist-util-visit@^2.0.0: version "2.0.3" resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz" @@ -24693,6 +25288,15 @@ unist-util-visit@2.0.3, unist-util-visit@^2.0.0: unist-util-is "^4.0.0" unist-util-visit-parents "^3.0.0" +unist-util-visit@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" + integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + universalify@^0.1.0, universalify@^0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" @@ -24979,6 +25583,14 @@ vfile-message@^2.0.0: "@types/unist" "^2.0.0" unist-util-stringify-position "^2.0.0" +vfile-message@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181" + integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" + vfile@^4.0.0: version "4.2.1" resolved "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz" @@ -24989,6 +25601,14 @@ vfile@^4.0.0: unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" +vfile@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" + integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== + dependencies: + "@types/unist" "^3.0.0" + vfile-message "^4.0.0" + vite@^5.1.5: version "5.1.5" resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.5.tgz#bdbc2b15e8000d9cc5172f059201178f9c9de5fb" @@ -25668,3 +26288,8 @@ zwitch@^1.0.0: version "1.0.5" resolved "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz" integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== + +zwitch@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== From 24d775d4b321ade7619f57f748e3cbc60b3dc330 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Wed, 11 Dec 2024 16:13:02 +0100 Subject: [PATCH 015/100] feat: Use react-markdown for text blocks --- app/components/chart-panel.tsx | 10 +++++----- app/config-types.ts | 3 +-- app/configurator/components/layout-configurator.tsx | 11 +++++++++-- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/app/components/chart-panel.tsx b/app/components/chart-panel.tsx index 1072fbf82..beecbb459 100644 --- a/app/components/chart-panel.tsx +++ b/app/components/chart-panel.tsx @@ -1,7 +1,8 @@ -import { Box, BoxProps, Theme, Typography } from "@mui/material"; +import { Box, BoxProps, Theme } from "@mui/material"; import { makeStyles } from "@mui/styles"; import clsx from "clsx"; import { forwardRef, HTMLProps, PropsWithChildren, useCallback } from "react"; +import Markdown from "react-markdown"; import { ChartPanelLayoutCanvas, @@ -114,10 +115,9 @@ export const ChartPanelLayout = (props: ChartPanelLayoutProps) => { const renderTextBlock = useCallback((textBlock: LayoutTextBlock) => { return ( - // Important, otherwise ReactGrid breaks -
- {textBlock.title} - {textBlock.description} + // Important, otherwise ReactGrid breaks. +
+ {textBlock.text}
); }, []); diff --git a/app/config-types.ts b/app/config-types.ts index cd7bee3fb..f2b2ffd64 100644 --- a/app/config-types.ts +++ b/app/config-types.ts @@ -1226,8 +1226,7 @@ export type LayoutChartBlock = t.TypeOf; const LayoutTextBlock = t.type({ type: t.literal("text"), key: t.string, - title: t.string, - description: t.string, + text: t.string, }); export type LayoutTextBlock = t.TypeOf; diff --git a/app/configurator/components/layout-configurator.tsx b/app/configurator/components/layout-configurator.tsx index c5ebc982e..52d349ab3 100644 --- a/app/configurator/components/layout-configurator.tsx +++ b/app/configurator/components/layout-configurator.tsx @@ -623,8 +623,15 @@ const AddLayoutBlocks = () => { { type: "text", key: createId(), - title: "Example title.", - description: "Example description.", + text: `# Heading 1! +## Heading 2! +### Heading 3! +#### Heading 4! +##### Heading 5! +###### Heading 6! +**Bold text** +*Italic text* +[Link](https://example.com)`, initialized: false, }, ], From 086dd67238ce25472017ba9a9232356d0bdfc14d Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Wed, 11 Dec 2024 16:39:27 +0100 Subject: [PATCH 016/100] refactor: Rename --- .../components/chart-controls/control-tab.tsx | 60 ++++++++----------- app/configurator/components/field.tsx | 33 +++++----- 2 files changed, 40 insertions(+), 53 deletions(-) diff --git a/app/configurator/components/chart-controls/control-tab.tsx b/app/configurator/components/chart-controls/control-tab.tsx index 02f6f76e9..2144f2e50 100644 --- a/app/configurator/components/chart-controls/control-tab.tsx +++ b/app/configurator/components/chart-controls/control-tab.tsx @@ -23,7 +23,16 @@ import SvgIcEdit from "@/icons/components/IcEdit"; import SvgIcExclamation from "@/icons/components/IcExclamation"; import useEvent from "@/utils/use-event"; -type ControlTabProps = { +export const ControlTabFieldInner = ({ + chartConfig, + fieldComponents, + value, + onClick, + checked, + labelId, + disabled, + warnMessage, +}: { chartConfig: ChartConfig; fieldComponents?: Component[]; value: string; @@ -31,28 +40,14 @@ type ControlTabProps = { labelId: string | null; disabled?: boolean; warnMessage?: string; -} & FieldProps; - -export const ControlTab = (props: ControlTabProps) => { - const { - chartConfig, - fieldComponents, - value, - onClick, - checked, - labelId, - disabled, - warnMessage, - } = props; +} & FieldProps) => { const handleClick = useEvent(() => onClick(value)); const components = fieldComponents; const firstComponent = components?.[0]; - const isActive = overrideChecked(chartConfig, value) - ? true - : !!firstComponent; + const isActive = overrideChecked(chartConfig, value) || !!firstComponent; - const labels = components?.map((x) => getComponentLabel(x)); + const labels = components?.map((c) => getComponentLabel(c)); const { upperLabel, mainLabel } = getLabels( chartConfig, @@ -193,7 +188,7 @@ export const OnOffControlTab = ({ ); }; -export type AnnotatorTabProps = { +export type ControlTabProps = { disabled?: boolean; onClick: (x: string) => void; value: string; @@ -204,7 +199,7 @@ export type AnnotatorTabProps = { rightIcon?: ReactNode; } & FieldProps; -export const AnnotatorTab = ({ +export const ControlTab = ({ value, checked, onClick, @@ -213,7 +208,7 @@ export const AnnotatorTab = ({ mainLabel, lowerLabel, rightIcon, -}: AnnotatorTabProps) => { +}: ControlTabProps) => { return ( ({ minWidth: 160, padding: `${theme.spacing(3)} ${theme.spacing(2)}`, fontWeight: "normal", - fontSize: "0.875rem", transition: "background-color .2s", cursor: "pointer", @@ -309,16 +303,16 @@ const useStyles = makeStyles((theme: Theme) => ({ }, }, controlTabButtonInnerIcon: { + justifyContent: "center", + alignItems: "center", width: 32, - height: 32, minWidth: 32, + height: 32, borderRadius: 2, - justifyContent: "center", - alignItems: "center", + color: theme.palette.grey[700], }, })); -// Generic component const ControlTabButton = ({ disabled, checked, @@ -329,20 +323,19 @@ const ControlTabButton = ({ disabled?: boolean; checked?: boolean; value: string; - onClick: (x: string) => void; + onClick: (value: string) => void; children: ReactNode; }) => { const classes = useStyles(); return ( + + +
+ ) : null; }; diff --git a/app/configurator/components/layout-configurator.tsx b/app/configurator/components/layout-configurator.tsx index e41abdcd2..5c82949a2 100644 --- a/app/configurator/components/layout-configurator.tsx +++ b/app/configurator/components/layout-configurator.tsx @@ -574,6 +574,8 @@ const LayoutBlocksConfigurator = () => { .map((block) => ( onClick(block.key)} From 8a39e65fbb008abee7c6f9e31fdd5f801a056918 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Thu, 12 Dec 2024 13:12:54 +0100 Subject: [PATCH 021/100] refactor: Extract useOrderedLocales --- app/configurator/components/annotation-options.tsx | 8 ++------ app/locales/use-locale.ts | 8 +++++++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/configurator/components/annotation-options.tsx b/app/configurator/components/annotation-options.tsx index c95073cbb..b2463d58f 100644 --- a/app/configurator/components/annotation-options.tsx +++ b/app/configurator/components/annotation-options.tsx @@ -15,8 +15,7 @@ import { } from "@/configurator/components/chart-controls/section"; import { MetaInputField } from "@/configurator/components/field"; import { getFieldLabel } from "@/configurator/components/field-i18n"; -import { locales } from "@/locales/locales"; -import { useLocale } from "@/locales/use-locale"; +import { useOrderedLocales } from "@/locales/use-locale"; import useEvent from "@/utils/use-event"; export const ChartAnnotationsSelector = () => { @@ -51,10 +50,7 @@ type AnnotationOptionsProps = { const AnnotationOptions = (props: AnnotationOptionsProps) => { const { type, activeField, meta } = props; const [_, dispatch] = useConfiguratorState(); - const locale = useLocale(); - // Reorder locales so the input field for - // the current locale is on top - const orderedLocales = [locale, ...locales.filter((l) => l !== locale)]; + const orderedLocales = useOrderedLocales(); const panelRef = useRef(null); const handleClosePanel = useEvent(() => { dispatch({ diff --git a/app/locales/use-locale.ts b/app/locales/use-locale.ts index 362a84992..fb6bc1b94 100644 --- a/app/locales/use-locale.ts +++ b/app/locales/use-locale.ts @@ -1,6 +1,6 @@ import { createContext, useContext } from "react"; -import { defaultLocale, Locale } from "./locales"; +import { defaultLocale, Locale, locales } from "./locales"; const LocaleContext = createContext(defaultLocale); @@ -9,3 +9,9 @@ export const LocaleProvider = LocaleContext.Provider; export const useLocale = () => { return useContext(LocaleContext); }; + +/** Returns ordered locales, with the current locale being first. */ +export const useOrderedLocales = () => { + const locale = useLocale(); + return [locale, ...locales.filter((l) => l !== locale)]; +}; From 17ea8bbe56c7845bba6b514b16fa699fa06ca1b0 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Thu, 12 Dec 2024 13:14:47 +0100 Subject: [PATCH 022/100] feat: Add a way to edit text blocks content --- ...options.tsx => block-options-selector.tsx} | 13 +++++- app/configurator/components/configurator.tsx | 2 +- app/configurator/components/field.tsx | 43 +++++++++++++++++++ 3 files changed, 56 insertions(+), 2 deletions(-) rename app/configurator/components/{block-options.tsx => block-options-selector.tsx} (76%) diff --git a/app/configurator/components/block-options.tsx b/app/configurator/components/block-options-selector.tsx similarity index 76% rename from app/configurator/components/block-options.tsx rename to app/configurator/components/block-options-selector.tsx index b3674ebcd..f839432d2 100644 --- a/app/configurator/components/block-options.tsx +++ b/app/configurator/components/block-options-selector.tsx @@ -6,12 +6,16 @@ import { ControlSectionContent, SectionTitle, } from "@/configurator/components/chart-controls/section"; +import { TextBlockInputField } from "@/configurator/components/field"; +import { getFieldLabel } from "@/configurator/components/field-i18n"; import { isLayouting } from "@/configurator/configurator-state"; +import { useOrderedLocales } from "@/locales/use-locale"; import { useConfiguratorState } from "@/src"; import { assert } from "@/utils/assert"; import useEvent from "@/utils/use-event"; export const LayoutBlocksSelector = () => { + const orderedLocales = useOrderedLocales(); const [state, dispatch] = useConfiguratorState(isLayouting); const { layout } = state; const { blocks } = layout; @@ -48,9 +52,16 @@ export const LayoutBlocksSelector = () => { Text object + {orderedLocales.map((locale) => ( + + ))} + + + + diff --git a/app/configurator/components/configurator.tsx b/app/configurator/components/configurator.tsx index 6444e9510..e05a18ec5 100644 --- a/app/configurator/components/configurator.tsx +++ b/app/configurator/components/configurator.tsx @@ -45,7 +45,7 @@ import { LayoutAnnotationsSelector, } from "@/configurator/components/annotation-options"; import { Description, Title } from "@/configurator/components/annotators"; -import { LayoutBlocksSelector } from "@/configurator/components/block-options"; +import { LayoutBlocksSelector } from "@/configurator/components/block-options-selector"; import { ChartConfigurator } from "@/configurator/components/chart-configurator"; import { ChartOptionsSelector } from "@/configurator/components/chart-options-selector"; import { diff --git a/app/configurator/components/field.tsx b/app/configurator/components/field.tsx index 4a9380cff..e83b43200 100644 --- a/app/configurator/components/field.tsx +++ b/app/configurator/components/field.tsx @@ -95,6 +95,7 @@ import { useTimeFormatLocale } from "@/formatters"; import { TimeUnit } from "@/graphql/query-hooks"; import { useLocale } from "@/locales/use-locale"; import { getPalette } from "@/palettes"; +import { assert } from "@/utils/assert"; import { hierarchyToOptions } from "@/utils/hierarchy"; import { makeDimensionValueSorters } from "@/utils/sorting-values"; import useEvent from "@/utils/use-event"; @@ -676,6 +677,48 @@ export const MetaInputField = ({ return ; }; +export const TextBlockInputField = ({ label }: { label: string }) => { + const [state, dispatch] = useConfiguratorState(isLayouting); + const { layout } = state; + const { blocks } = layout; + const activeBlock = useMemo(() => { + const activeBlock = blocks.find( + (block) => block.key === layout.activeField + ); + + assert( + activeBlock?.type === "text", + "We can only edit text blocks from TextBlockInputField" + ); + + return activeBlock; + }, [blocks, layout.activeField]); + const handleChanged = useCallback( + (e: ChangeEvent) => { + const text = e.currentTarget.value; + dispatch({ + type: "LAYOUT_CHANGED", + value: { + ...layout, + blocks: blocks.map((b) => + b.key === layout.activeField ? { ...b, text } : b + ), + }, + }); + }, + [dispatch, layout, blocks] + ); + + return ( + + ); +}; + const useMultiFilterColorPicker = (value: string) => { const [state, dispatch] = useConfiguratorState(isConfiguring); const chartConfig = getChartConfig(state); From 510a6722185fc79246a0b3af3dd46cb7e84efed7 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Thu, 12 Dec 2024 13:27:09 +0100 Subject: [PATCH 023/100] feat: Text blocks can be defined per locale --- app/components/chart-panel.tsx | 39 ++++++++++--------- app/config-types.ts | 7 +++- .../components/block-options-selector.tsx | 3 +- app/configurator/components/field.tsx | 19 +++++++-- .../components/layout-configurator.tsx | 10 ++++- 5 files changed, 51 insertions(+), 27 deletions(-) diff --git a/app/components/chart-panel.tsx b/app/components/chart-panel.tsx index beecbb459..726e91e51 100644 --- a/app/components/chart-panel.tsx +++ b/app/components/chart-panel.tsx @@ -14,7 +14,7 @@ import { ChartSelectionTabs } from "@/components/chart-selection-tabs"; import { DashboardInteractiveFilters } from "@/components/dashboard-interactive-filters"; import { ChartConfig, Layout, LayoutDashboard } from "@/config-types"; import { hasChartConfigs, LayoutBlock, LayoutTextBlock } from "@/configurator"; -import { useConfiguratorState } from "@/src"; +import { useConfiguratorState, useLocale } from "@/src"; const useStyles = makeStyles((theme: Theme) => ({ panelLayout: { @@ -98,29 +98,32 @@ const Wrappers: Record< canvas: ChartPanelLayoutCanvas, }; -export const ChartPanelLayout = (props: ChartPanelLayoutProps) => { - const { - children, - renderChart, - chartConfigs, - className, - layoutType, - ...rest - } = props; +export const ChartPanelLayout = ({ + children, + renderChart, + chartConfigs, + className, + layoutType, + ...rest +}: ChartPanelLayoutProps) => { + const locale = useLocale(); const classes = useStyles(); const Wrapper = Wrappers[layoutType]; const [state] = useConfiguratorState(hasChartConfigs); const { layout } = state; const { blocks } = layout; - const renderTextBlock = useCallback((textBlock: LayoutTextBlock) => { - return ( - // Important, otherwise ReactGrid breaks. -
- {textBlock.text} -
- ); - }, []); + const renderTextBlock = useCallback( + (textBlock: LayoutTextBlock) => { + return ( + // Important, otherwise ReactGrid breaks. +
+ {textBlock.text[locale]} +
+ ); + }, + [locale] + ); const renderBlock = useCallback( (block: LayoutBlock) => { diff --git a/app/config-types.ts b/app/config-types.ts index f2b2ffd64..49e3e3e3f 100644 --- a/app/config-types.ts +++ b/app/config-types.ts @@ -1226,7 +1226,12 @@ export type LayoutChartBlock = t.TypeOf; const LayoutTextBlock = t.type({ type: t.literal("text"), key: t.string, - text: t.string, + text: t.type({ + de: t.string, + fr: t.string, + it: t.string, + en: t.string, + }), }); export type LayoutTextBlock = t.TypeOf; diff --git a/app/configurator/components/block-options-selector.tsx b/app/configurator/components/block-options-selector.tsx index f839432d2..c3899ab0b 100644 --- a/app/configurator/components/block-options-selector.tsx +++ b/app/configurator/components/block-options-selector.tsx @@ -7,7 +7,6 @@ import { SectionTitle, } from "@/configurator/components/chart-controls/section"; import { TextBlockInputField } from "@/configurator/components/field"; -import { getFieldLabel } from "@/configurator/components/field-i18n"; import { isLayouting } from "@/configurator/configurator-state"; import { useOrderedLocales } from "@/locales/use-locale"; import { useConfiguratorState } from "@/src"; @@ -53,7 +52,7 @@ export const LayoutBlocksSelector = () => { Text object {orderedLocales.map((locale) => ( - + ))}
diff --git a/app/configurator/components/field.tsx b/app/configurator/components/field.tsx index e83b43200..8c6020a83 100644 --- a/app/configurator/components/field.tsx +++ b/app/configurator/components/field.tsx @@ -54,6 +54,7 @@ import { DatePickerField, DatePickerTimeUnit, } from "@/configurator/components/field-date-picker"; +import { getFieldLabel } from "@/configurator/components/field-i18n"; import { getTimeIntervalFormattedSelectOptions, getTimeIntervalWithProps, @@ -93,6 +94,7 @@ import { } from "@/domain/most-recent-value"; import { useTimeFormatLocale } from "@/formatters"; import { TimeUnit } from "@/graphql/query-hooks"; +import { Locale } from "@/locales/locales"; import { useLocale } from "@/locales/use-locale"; import { getPalette } from "@/palettes"; import { assert } from "@/utils/assert"; @@ -677,7 +679,7 @@ export const MetaInputField = ({ return ; }; -export const TextBlockInputField = ({ label }: { label: string }) => { +export const TextBlockInputField = ({ locale }: { locale: Locale }) => { const [state, dispatch] = useConfiguratorState(isLayouting); const { layout } = state; const { blocks } = layout; @@ -701,19 +703,28 @@ export const TextBlockInputField = ({ label }: { label: string }) => { value: { ...layout, blocks: blocks.map((b) => - b.key === layout.activeField ? { ...b, text } : b + b.key === activeBlock.key + ? { + ...b, + text: { + ...activeBlock.text, + [locale]: text, + }, + } + : b ), }, }); }, - [dispatch, layout, blocks] + [dispatch, layout, blocks, activeBlock.key, activeBlock.text, locale] ); + const label = getFieldLabel(locale); return ( ); diff --git a/app/configurator/components/layout-configurator.tsx b/app/configurator/components/layout-configurator.tsx index 5c82949a2..122d1488d 100644 --- a/app/configurator/components/layout-configurator.tsx +++ b/app/configurator/components/layout-configurator.tsx @@ -553,6 +553,7 @@ const DashboardTimeRangeFilterOptions = ({ }; const LayoutBlocksConfigurator = () => { + const locale = useLocale(); const [state, dispatch] = useConfiguratorState(isLayouting); const { layout } = state; const { blocks } = layout; @@ -576,7 +577,7 @@ const LayoutBlocksConfigurator = () => { key={block.key} // todo: standardize the id with block options selector id={`tab-block-${block.key}`} - mainLabel={block.text} + mainLabel={block.text[locale]} checked={state.layout.activeField === block.key} onClick={() => onClick(block.key)} value={state.layout.activeField ?? ""} @@ -622,7 +623,8 @@ const AddLayoutBlocks = () => { { type: "text", key: createId(), - text: `# Heading 1! + text: { + de: `# Heading 1! ## Heading 2! ### Heading 3! #### Heading 4! @@ -631,6 +633,10 @@ const AddLayoutBlocks = () => { **Bold text** *Italic text* [Link](https://example.com)`, + fr: "", + it: "", + en: "", + }, initialized: false, }, ], From 913af1eca77f1f7ee07d3dfbd648f333f8dbeaf0 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Thu, 12 Dec 2024 16:06:13 +0100 Subject: [PATCH 024/100] feat: Make theInput multiline --- app/components/form.tsx | 1 + app/themes/federal.tsx | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/form.tsx b/app/components/form.tsx index 67f1a28ec..d8946fffb 100644 --- a/app/components/form.tsx +++ b/app/components/form.tsx @@ -626,6 +626,7 @@ export const Input = ({ id={name} size="small" color="secondary" + multiline name={name} value={value} disabled={disabled} diff --git a/app/themes/federal.tsx b/app/themes/federal.tsx index 89657ca39..f9b469907 100644 --- a/app/themes/federal.tsx +++ b/app/themes/federal.tsx @@ -466,7 +466,6 @@ theme.components = { minHeight: 48, }, sizeSmall: { - height: 40, minHeight: 40, fontSize: `${theme.typography.body2.fontSize} !important`, lineHeight: `${theme.typography.body2.lineHeight} !important`, From 49b47732bedbf940fb30bbce7e08d81e57a0f66b Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Thu, 12 Dec 2024 16:10:05 +0100 Subject: [PATCH 025/100] feat: Make Title and Description Markdown-compatible --- app/configurator/components/annotators.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/configurator/components/annotators.tsx b/app/configurator/components/annotators.tsx index 579ca51ba..277d30b03 100644 --- a/app/configurator/components/annotators.tsx +++ b/app/configurator/components/annotators.tsx @@ -2,6 +2,7 @@ import { Trans } from "@lingui/macro"; import { Theme, Typography, TypographyProps } from "@mui/material"; import { makeStyles } from "@mui/styles"; import clsx from "clsx"; +import Markdown from "react-markdown"; import { getChartConfig } from "@/config-types"; import { @@ -57,7 +58,11 @@ export const Title = (props: Props) => { ...sx, }} > - {text ? text : [ Title ]} + {text ? ( + {text} + ) : ( + [ Title ] + )} ); }; @@ -66,6 +71,7 @@ export const Description = (props: Props) => { const { text, lighterColor, smaller, onClick, className, sx, ...rest } = props; const classes = useStyles({ interactive: !!onClick }); + return ( { }} > {text ? ( - text + {text} ) : ( [ Description ] )} From 7d33f0e68ce1799950e090913122e8a19da1aa1e Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Thu, 12 Dec 2024 16:46:30 +0100 Subject: [PATCH 026/100] refactor: Consolidate Markdown usage ...so that we will be able to define components in a single place. --- app/components/chart-panel.tsx | 2 +- app/components/markdown.tsx | 10 ++++++++ app/configurator/components/annotators.tsx | 27 ++++++++++++++++------ 3 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 app/components/markdown.tsx diff --git a/app/components/chart-panel.tsx b/app/components/chart-panel.tsx index 726e91e51..1244a7113 100644 --- a/app/components/chart-panel.tsx +++ b/app/components/chart-panel.tsx @@ -2,7 +2,6 @@ import { Box, BoxProps, Theme } from "@mui/material"; import { makeStyles } from "@mui/styles"; import clsx from "clsx"; import { forwardRef, HTMLProps, PropsWithChildren, useCallback } from "react"; -import Markdown from "react-markdown"; import { ChartPanelLayoutCanvas, @@ -12,6 +11,7 @@ import { ChartPanelLayoutTall } from "@/components/chart-panel-layout-tall"; import { ChartPanelLayoutVertical } from "@/components/chart-panel-layout-vertical"; import { ChartSelectionTabs } from "@/components/chart-selection-tabs"; import { DashboardInteractiveFilters } from "@/components/dashboard-interactive-filters"; +import { Markdown } from "@/components/markdown"; import { ChartConfig, Layout, LayoutDashboard } from "@/config-types"; import { hasChartConfigs, LayoutBlock, LayoutTextBlock } from "@/configurator"; import { useConfiguratorState, useLocale } from "@/src"; diff --git a/app/components/markdown.tsx b/app/components/markdown.tsx new file mode 100644 index 000000000..3661e7ce6 --- /dev/null +++ b/app/components/markdown.tsx @@ -0,0 +1,10 @@ +import { ComponentProps } from "react"; +import ReactMarkdown from "react-markdown"; + +const components: ComponentProps["components"] = {}; + +export const Markdown = ( + props: Omit, "components"> +) => { + return ; +}; diff --git a/app/configurator/components/annotators.tsx b/app/configurator/components/annotators.tsx index 277d30b03..7d51bbe8d 100644 --- a/app/configurator/components/annotators.tsx +++ b/app/configurator/components/annotators.tsx @@ -2,8 +2,8 @@ import { Trans } from "@lingui/macro"; import { Theme, Typography, TypographyProps } from "@mui/material"; import { makeStyles } from "@mui/styles"; import clsx from "clsx"; -import Markdown from "react-markdown"; +import { Markdown } from "@/components/markdown"; import { getChartConfig } from "@/config-types"; import { ControlSection, @@ -41,10 +41,17 @@ type Props = TypographyProps & { smaller?: boolean; }; -export const Title = (props: Props) => { - const { text, lighterColor, smaller, onClick, className, sx, ...rest } = - props; +export const Title = ({ + text, + lighterColor, + smaller, + onClick, + className, + sx, + ...rest +}: Props) => { const classes = useStyles({ interactive: !!onClick }); + return ( { ); }; -export const Description = (props: Props) => { - const { text, lighterColor, smaller, onClick, className, sx, ...rest } = - props; +export const Description = ({ + text, + lighterColor, + smaller, + onClick, + className, + sx, + ...rest +}: Props) => { const classes = useStyles({ interactive: !!onClick }); return ( From a71c3148d40fe3d79d2fe95f1f1499f926a4a139 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Thu, 12 Dec 2024 16:51:10 +0100 Subject: [PATCH 027/100] style: Use white background for ReactGridItems --- app/components/react-grid.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/react-grid.tsx b/app/components/react-grid.tsx index 1dc531afc..5eaaab07b 100644 --- a/app/components/react-grid.tsx +++ b/app/components/react-grid.tsx @@ -181,7 +181,7 @@ const useStyles = makeStyles((theme: Theme) => ({ transform: "rotate(45deg)", }, "& .react-grid-item:not(.react-grid-placeholder)": { - background: "#eee", + background: theme.palette.background.paper, border: theme.palette.divider, boxShadow: theme.shadows[1], }, From 3f3876777f39f55635054dc8c030f0af05881060 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 08:46:36 +0100 Subject: [PATCH 028/100] chore: Update MUI --- app/package.json | 6 +- yarn.lock | 317 ++++++++++++++++++++++++++++++++++------------- 2 files changed, 236 insertions(+), 87 deletions(-) diff --git a/app/package.json b/app/package.json index 5c5747e9a..805559fc7 100644 --- a/app/package.json +++ b/app/package.json @@ -27,9 +27,9 @@ "@mapbox/mapbox-gl-supported": "^2.0.1", "@mdx-js/react": "^1.6.22", "@mui/lab": "^5.0.0-alpha.74", - "@mui/material": "^5.5.2", - "@mui/styles": "5.5.1", - "@mui/utils": "^5.4.4", + "@mui/material": "^6.2.0", + "@mui/styles": "6.2.0", + "@mui/utils": "^6.2.0", "@next/bundle-analyzer": "^11.0.1", "@next/mdx": "^11.0.1", "@preconstruct/next": "^3.0.1", diff --git a/yarn.lock b/yarn.lock index 7223b538c..0114778ac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2495,6 +2495,13 @@ dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" + integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/standalone@^7.11.6": version "7.14.6" resolved "https://registry.npmjs.org/@babel/standalone/-/standalone-7.14.6.tgz" @@ -2922,6 +2929,17 @@ "@emotion/utils" "0.11.3" "@emotion/weak-memoize" "0.2.5" +"@emotion/cache@^11.13.5": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" + integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== + dependencies: + "@emotion/memoize" "^0.9.0" + "@emotion/sheet" "^1.4.0" + "@emotion/utils" "^1.4.2" + "@emotion/weak-memoize" "^0.4.0" + stylis "4.2.0" + "@emotion/cache@^11.7.1": version "11.7.1" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.7.1.tgz#08d080e396a42e0037848214e8aa7bf879065539" @@ -2938,6 +2956,11 @@ resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz" integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== +"@emotion/hash@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" + integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== + "@emotion/is-prop-valid@^0.8.2": version "0.8.8" resolved "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz" @@ -2962,6 +2985,11 @@ resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz" integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ== +"@emotion/memoize@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" + integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== + "@emotion/react@^11.8.2": version "11.8.2" resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.8.2.tgz#e51f5e6372e22e82780836c9288da19af4b51e70" @@ -2997,6 +3025,17 @@ "@emotion/utils" "^1.0.0" csstype "^3.0.2" +"@emotion/serialize@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.3.tgz#d291531005f17d704d0463a032fe679f376509e8" + integrity sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA== + dependencies: + "@emotion/hash" "^0.9.2" + "@emotion/memoize" "^0.9.0" + "@emotion/unitless" "^0.10.0" + "@emotion/utils" "^1.4.2" + csstype "^3.0.2" + "@emotion/sheet@0.9.4": version "0.9.4" resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz" @@ -3007,6 +3046,11 @@ resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.1.0.tgz#56d99c41f0a1cda2726a05aa6a20afd4c63e58d2" integrity sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g== +"@emotion/sheet@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" + integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== + "@emotion/styled@^11.8.1": version "11.8.1" resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.8.1.tgz#856f6f63aceef0eb783985fa2322e2bf66d04e17" @@ -3028,6 +3072,11 @@ resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== +"@emotion/unitless@^0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745" + integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg== + "@emotion/use-insertion-effect-with-fallbacks@^1.0.0", "@emotion/use-insertion-effect-with-fallbacks@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963" @@ -3048,11 +3097,21 @@ resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.1.0.tgz#86b0b297f3f1a0f2bdb08eeac9a2f49afd40d0cf" integrity sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ== +"@emotion/utils@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.2.tgz#6df6c45881fcb1c412d6688a311a98b7f59c1b52" + integrity sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA== + "@emotion/weak-memoize@0.2.5", "@emotion/weak-memoize@^0.2.5": version "0.2.5" resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== +"@emotion/weak-memoize@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" + integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== + "@endemolshinegroup/cosmiconfig-typescript-loader@3.0.2": version "3.0.2" resolved "https://registry.npmjs.org/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz" @@ -5285,6 +5344,11 @@ prop-types "^15.7.2" react-is "^17.0.2" +"@mui/core-downloads-tracker@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-6.2.0.tgz#52953b858eaf3204ac505bf0329528fd3130c775" + integrity sha512-Nn5PSkUqbDrvezpiiiYZiAbX4SFEiy3CbikUL6pWOXEUsq+L1j50OOyyUIHpaX2Hr+5V5UxTh+fPeC4nsGNhdw== + "@mui/lab@^5.0.0-alpha.74": version "5.0.0-alpha.74" resolved "https://registry.yarnpkg.com/@mui/lab/-/lab-5.0.0-alpha.74.tgz#8744c8a45c3107abbb65d45931725fd878e94b04" @@ -5304,23 +5368,23 @@ react-transition-group "^4.4.2" rifm "^0.12.1" -"@mui/material@^5.5.2": - version "5.5.2" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.5.2.tgz#9cea96abda87bed51d435e8676d5bfad99750b8a" - integrity sha512-r4p1u9eDlSqW3TS/Iq9yolifWHpuW6e0BSeqEJW3EEIcKfPVVk4WNUNJ+s8DtN7dBoDcveXxcQVVjYXTIv1d9g== - dependencies: - "@babel/runtime" "^7.17.2" - "@mui/base" "5.0.0-alpha.73" - "@mui/system" "^5.5.2" - "@mui/types" "^7.1.3" - "@mui/utils" "^5.4.4" - "@types/react-transition-group" "^4.4.4" - clsx "^1.1.1" - csstype "^3.0.11" - hoist-non-react-statics "^3.3.2" - prop-types "^15.7.2" - react-is "^17.0.2" - react-transition-group "^4.4.2" +"@mui/material@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-6.2.0.tgz#e649438c3de3d26c8e79845711572a4ae34125bb" + integrity sha512-7FXXUPIyYzP02a7GvqwJ7ocmdP+FkvLvmy/uxG1TDmTlsr8nEClQp75uxiVznJqAY/jJy4d+Rj/fNWNxwidrYQ== + dependencies: + "@babel/runtime" "^7.26.0" + "@mui/core-downloads-tracker" "^6.2.0" + "@mui/system" "^6.2.0" + "@mui/types" "^7.2.19" + "@mui/utils" "^6.2.0" + "@popperjs/core" "^2.11.8" + "@types/react-transition-group" "^4.4.11" + clsx "^2.1.1" + csstype "^3.1.3" + prop-types "^15.8.1" + react-is "^19.0.0" + react-transition-group "^4.4.5" "@mui/private-theming@^5.4.4": version "5.4.4" @@ -5331,6 +5395,15 @@ "@mui/utils" "^5.4.4" prop-types "^15.7.2" +"@mui/private-theming@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-6.2.0.tgz#b94a7c5726b7337cfad1800bfd5927cf2af4b131" + integrity sha512-lYd2MrVddhentF1d/cMXKnwlDjr/shbO3A2eGq22PCYUoZaqtAGZMc0U86KnJ/Sh5YzNYePqTOaaowAN8Qea8A== + dependencies: + "@babel/runtime" "^7.26.0" + "@mui/utils" "^6.2.0" + prop-types "^15.8.1" + "@mui/styled-engine@^5.5.2": version "5.5.2" resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.5.2.tgz#1f92dd27d76f0b7df7aa52c7c7a710e59b2275a6" @@ -5340,28 +5413,40 @@ "@emotion/cache" "^11.7.1" prop-types "^15.7.2" -"@mui/styles@5.5.1": - version "5.5.1" - resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-5.5.1.tgz#cfd2b6dbdb4b2cb0e989568bb9cc45f5d7346d2a" - integrity sha512-mxwfjwTwPE+r7/U4Nn/QKPzJ2cIqmRuK3xu44Us613D5jqPeB/ftOsAy0OpCYAwpkUxmQIrRQiilQ8zE+f4rBQ== - dependencies: - "@babel/runtime" "^7.17.2" - "@emotion/hash" "^0.8.0" - "@mui/private-theming" "^5.4.4" - "@mui/types" "^7.1.3" - "@mui/utils" "^5.4.4" - clsx "^1.1.1" - csstype "^3.0.11" +"@mui/styled-engine@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-6.2.0.tgz#f0d4450b86ee4f39906b51d1439710b754269d3f" + integrity sha512-rV4YCu6kcCjMnHFXU/tQcL6XfYVfFVR8n3ZVNGnk2rpXnt/ctOPJsF+eUQuhkHciueLVKpI06+umr1FxWWhVmQ== + dependencies: + "@babel/runtime" "^7.26.0" + "@emotion/cache" "^11.13.5" + "@emotion/serialize" "^1.3.3" + "@emotion/sheet" "^1.4.0" + csstype "^3.1.3" + prop-types "^15.8.1" + +"@mui/styles@6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-6.2.0.tgz#a24cabf0b3084f35967bb0cea7a0bd68b6553bf0" + integrity sha512-/fBb08Enfui8NGxbFgoZsJcHFdxFq1gwuzjr9Jwtw3++AMAC3Q7h36xToC52KiZta15lbj3r1Hk+mJC16IOKnw== + dependencies: + "@babel/runtime" "^7.26.0" + "@emotion/hash" "^0.9.2" + "@mui/private-theming" "^6.2.0" + "@mui/types" "^7.2.19" + "@mui/utils" "^6.2.0" + clsx "^2.1.1" + csstype "^3.1.3" hoist-non-react-statics "^3.3.2" - jss "^10.8.2" - jss-plugin-camel-case "^10.8.2" - jss-plugin-default-unit "^10.8.2" - jss-plugin-global "^10.8.2" - jss-plugin-nested "^10.8.2" - jss-plugin-props-sort "^10.8.2" - jss-plugin-rule-value-function "^10.8.2" - jss-plugin-vendor-prefixer "^10.8.2" - prop-types "^15.7.2" + jss "^10.10.0" + jss-plugin-camel-case "^10.10.0" + jss-plugin-default-unit "^10.10.0" + jss-plugin-global "^10.10.0" + jss-plugin-nested "^10.10.0" + jss-plugin-props-sort "^10.10.0" + jss-plugin-rule-value-function "^10.10.0" + jss-plugin-vendor-prefixer "^10.10.0" + prop-types "^15.8.1" "@mui/system@^5.5.2": version "5.5.2" @@ -5377,11 +5462,30 @@ csstype "^3.0.11" prop-types "^15.7.2" +"@mui/system@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-6.2.0.tgz#1841438bc50716c7c739345756bc4cd60aa34a71" + integrity sha512-DCeqev9Cd4f4pm3O1lqSGW/DIHHBG6ZpqMX9iIAvN4asYv+pPWv2/lKov9kWk5XThhxFnGSv93SRNE1kNRRg5Q== + dependencies: + "@babel/runtime" "^7.26.0" + "@mui/private-theming" "^6.2.0" + "@mui/styled-engine" "^6.2.0" + "@mui/types" "^7.2.19" + "@mui/utils" "^6.2.0" + clsx "^2.1.1" + csstype "^3.1.3" + prop-types "^15.8.1" + "@mui/types@^7.1.3": version "7.1.3" resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.1.3.tgz#d7636f3046110bcccc63e6acfd100e2ad9ca712a" integrity sha512-DDF0UhMBo4Uezlk+6QxrlDbchF79XG6Zs0zIewlR4c0Dt6GKVFfUtzPtHCH1tTbcSlq/L2bGEdiaoHBJ9Y1gSA== +"@mui/types@^7.2.19": + version "7.2.19" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.19.tgz#c941954dd24393fdce5f07830d44440cf4ab6c80" + integrity sha512-6XpZEM/Q3epK9RN8ENoXuygnqUQxE+siN/6rGRi2iwJPgBUR25mphYQ9ZI87plGh58YoZ5pp40bFvKYOCDJ3tA== + "@mui/utils@^5.4.4": version "5.4.4" resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.4.4.tgz#bd7dde4f48f60c02b6debf976bd74f3505b188fe" @@ -5393,6 +5497,18 @@ prop-types "^15.7.2" react-is "^17.0.2" +"@mui/utils@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-6.2.0.tgz#a39f0a2837048a42114169d298ce970913097203" + integrity sha512-77CaFJi+OIi2SjbPwCis8z5DXvE0dfx9hBz5FguZHt1VYFlWEPCWTHcMsQCahSErnfik5ebLsYK8+D+nsjGVfw== + dependencies: + "@babel/runtime" "^7.26.0" + "@mui/types" "^7.2.19" + "@types/prop-types" "^15.7.14" + clsx "^2.1.1" + prop-types "^15.8.1" + react-is "^19.0.0" + "@ndelangen/get-tarball@^3.0.7": version "3.0.9" resolved "https://registry.yarnpkg.com/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz#727ff4454e65f34707e742a59e5e6b1f525d8964" @@ -5812,6 +5928,11 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.4.tgz#d8c7b8db9226d2d7664553a0741ad7d0397ee503" integrity sha512-q/ytXxO5NKvyT37pmisQAItCFqA7FD/vNb8dgaJy3/630Fsc+Mz9/9f2SziBoIZ30TJooXyTwZmhi1zjXmObYg== +"@popperjs/core@^2.11.8": + version "2.11.8" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + "@preconstruct/cli@^2.7.0": version "2.7.0" resolved "https://registry.yarnpkg.com/@preconstruct/cli/-/cli-2.7.0.tgz#78891a094871ebb401a2e8e42871bc208717cba7" @@ -9519,6 +9640,11 @@ resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz" integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== +"@types/prop-types@^15.7.14": + version "15.7.14" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2" + integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== + "@types/prop-types@^15.7.4": version "15.7.4" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" @@ -9647,12 +9773,10 @@ dependencies: "@types/react" "*" -"@types/react-transition-group@^4.4.4": - version "4.4.4" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.4.tgz#acd4cceaa2be6b757db61ed7b432e103242d163e" - integrity sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug== - dependencies: - "@types/react" "*" +"@types/react-transition-group@^4.4.11": + version "4.4.12" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" + integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== "@types/react-window@^1.8.2": version "1.8.3" @@ -12486,7 +12610,7 @@ clsx@^1.1.1: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== -clsx@^2.0.0: +clsx@^2.0.0, clsx@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== @@ -13140,6 +13264,11 @@ csstype@^3.0.2: resolved "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz" integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== +csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + d3-array@2, d3-array@^2.3.0, d3-array@^2.5.0: version "2.12.1" resolved "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz" @@ -18492,70 +18621,70 @@ jsonwebtoken@^8.5.1: ms "^2.1.1" semver "^5.6.0" -jss-plugin-camel-case@^10.8.2: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.0.tgz#4921b568b38d893f39736ee8c4c5f1c64670aaf7" - integrity sha512-UH6uPpnDk413/r/2Olmw4+y54yEF2lRIV8XIZyuYpgPYTITLlPOsq6XB9qeqv+75SQSg3KLocq5jUBXW8qWWww== +jss-plugin-camel-case@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz#27ea159bab67eb4837fa0260204eb7925d4daa1c" + integrity sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw== dependencies: "@babel/runtime" "^7.3.1" hyphenate-style-name "^1.0.3" - jss "10.9.0" + jss "10.10.0" -jss-plugin-default-unit@^10.8.2: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.0.tgz#bb23a48f075bc0ce852b4b4d3f7582bc002df991" - integrity sha512-7Ju4Q9wJ/MZPsxfu4T84mzdn7pLHWeqoGd/D8O3eDNNJ93Xc8PxnLmV8s8ZPNRYkLdxZqKtm1nPQ0BM4JRlq2w== +jss-plugin-default-unit@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz#db3925cf6a07f8e1dd459549d9c8aadff9804293" + integrity sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.0" + jss "10.10.0" -jss-plugin-global@^10.8.2: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.9.0.tgz#fc07a0086ac97aca174e37edb480b69277f3931f" - integrity sha512-4G8PHNJ0x6nwAFsEzcuVDiBlyMsj2y3VjmFAx/uHk/R/gzJV+yRHICjT4MKGGu1cJq2hfowFWCyrr/Gg37FbgQ== +jss-plugin-global@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz#1c55d3c35821fab67a538a38918292fc9c567efd" + integrity sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.0" + jss "10.10.0" -jss-plugin-nested@^10.8.2: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.9.0.tgz#cc1c7d63ad542c3ccc6e2c66c8328c6b6b00f4b3" - integrity sha512-2UJnDrfCZpMYcpPYR16oZB7VAC6b/1QLsRiAutOt7wJaaqwCBvNsosLEu/fUyKNQNGdvg2PPJFDO5AX7dwxtoA== +jss-plugin-nested@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz#db872ed8925688806e77f1fc87f6e62264513219" + integrity sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.0" + jss "10.10.0" tiny-warning "^1.0.2" -jss-plugin-props-sort@^10.8.2: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.0.tgz#30e9567ef9479043feb6e5e59db09b4de687c47d" - integrity sha512-7A76HI8bzwqrsMOJTWKx/uD5v+U8piLnp5bvru7g/3ZEQOu1+PjHvv7bFdNO3DwNPC9oM0a//KwIJsIcDCjDzw== +jss-plugin-props-sort@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz#67f4dd4c70830c126f4ec49b4b37ccddb680a5d7" + integrity sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.0" + jss "10.10.0" -jss-plugin-rule-value-function@^10.8.2: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.0.tgz#379fd2732c0746fe45168011fe25544c1a295d67" - integrity sha512-IHJv6YrEf8pRzkY207cPmdbBstBaE+z8pazhPShfz0tZSDtRdQua5jjg6NMz3IbTasVx9FdnmptxPqSWL5tyJg== +jss-plugin-rule-value-function@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz#7d99e3229e78a3712f78ba50ab342e881d26a24b" + integrity sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.0" + jss "10.10.0" tiny-warning "^1.0.2" -jss-plugin-vendor-prefixer@^10.8.2: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.0.tgz#aa9df98abfb3f75f7ed59a3ec50a5452461a206a" - integrity sha512-MbvsaXP7iiVdYVSEoi+blrW+AYnTDvHTW6I6zqi7JcwXdc6I9Kbm234nEblayhF38EftoenbM+5218pidmC5gA== +jss-plugin-vendor-prefixer@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz#c01428ef5a89f2b128ec0af87a314d0c767931c7" + integrity sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg== dependencies: "@babel/runtime" "^7.3.1" css-vendor "^2.0.8" - jss "10.9.0" + jss "10.10.0" -jss@10.9.0, jss@^10.8.2: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss/-/jss-10.9.0.tgz#7583ee2cdc904a83c872ba695d1baab4b59c141b" - integrity sha512-YpzpreB6kUunQBbrlArlsMpXYyndt9JATbt95tajx0t4MTJJcCJdd4hdNpHmOIDiUJrF/oX5wtVFrS3uofWfGw== +jss@10.10.0, jss@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss/-/jss-10.10.0.tgz#a75cc85b0108c7ac8c7b7d296c520a3e4fbc6ccc" + integrity sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw== dependencies: "@babel/runtime" "^7.3.1" csstype "^3.0.2" @@ -22181,6 +22310,11 @@ react-is@^18.0.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== +react-is@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0.tgz#d6669fd389ff022a9684f708cf6fa4962d1fea7a" + integrity sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g== + react-map-gl@^7.0.10: version "7.0.10" resolved "https://registry.yarnpkg.com/react-map-gl/-/react-map-gl-7.0.10.tgz#4b92b748b9fbc376d88174c2e0c6099c73df96a7" @@ -22307,6 +22441,16 @@ react-transition-group@^4.4.2: loose-envify "^1.4.0" prop-types "^15.6.2" +react-transition-group@^4.4.5: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + react-virtualized-auto-sizer@^1.0.24: version "1.0.24" resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.24.tgz#3ebdc92f4b05ad65693b3cc8e7d8dd54924c0227" @@ -24216,6 +24360,11 @@ stylis@4.0.13: resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91" integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag== +stylis@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" + integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== + stylus-lookup@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/stylus-lookup/-/stylus-lookup-3.0.2.tgz#c9eca3ff799691020f30b382260a67355fefdddd" From 0e917bb17716f066b15eb8a0f0436561fb2f26fb Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 08:48:50 +0100 Subject: [PATCH 029/100] chore: Update TypeScript --- package.json | 2 +- yarn.lock | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 086753d5b..ffed776d9 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "start-server-and-test": "^1.11.4", "storybook": "^7.6.17", "tsx": "^4.19.2", - "typescript": "4" + "typescript": "5.7.2" }, "workspaces": [ ".", diff --git a/yarn.lock b/yarn.lock index 0114778ac..9d1ff0346 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25188,16 +25188,21 @@ typescript-lru-cache@^2.0.0: resolved "https://registry.yarnpkg.com/typescript-lru-cache/-/typescript-lru-cache-2.0.0.tgz#d4ad0f071ab51987b088a57c3c502d7dd62dee07" integrity sha512-Jp57Qyy8wXeMkdNuZiglE6v2Cypg13eDA1chHwDG6kq51X7gk4K7P7HaDdzZKCxkegXkVHNcPD0n5aW6OZH3aA== -typescript@4, typescript@^4.0.0, typescript@^4.9.5: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@5.7.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.2.tgz#3169cf8c4c8a828cde53ba9ecb3d2b1d5dd67be6" + integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== typescript@^3.9.10, typescript@^3.9.7: version "3.9.10" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== +typescript@^4.0.0, typescript@^4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + typewise-core@^1.2, typewise-core@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195" From 5609cc04421533cca115c0b5da6e11f0cc763707 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 08:56:17 +0100 Subject: [PATCH 030/100] style: Keep vertical padding in textarea --- app/themes/federal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/themes/federal.tsx b/app/themes/federal.tsx index f9b469907..a25aff44c 100644 --- a/app/themes/federal.tsx +++ b/app/themes/federal.tsx @@ -462,7 +462,7 @@ theme.components = { border: "1px solid", borderColor: theme.palette.divider, borderRadius: (theme.shape.borderRadius as number) * 2, - padding: "0 6px", + padding: "10px 6px", minHeight: 48, }, sizeSmall: { From c4a838d51d820b18dbcd7f512dcebf46842232d8 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 09:05:25 +0100 Subject: [PATCH 031/100] fix: TypeScript errors --- app/components/metadata-panel.tsx | 1 - .../components/chart-controls/section.tsx | 2 +- app/docs/theme.stories.tsx | 12 +++++++----- app/gql-flamegraph/devtool.tsx | 9 ++------- app/graphql/hooks.spec.tsx | 2 ++ 5 files changed, 12 insertions(+), 14 deletions(-) diff --git a/app/components/metadata-panel.tsx b/app/components/metadata-panel.tsx index a0fa0be3d..4f7dc50c8 100644 --- a/app/components/metadata-panel.tsx +++ b/app/components/metadata-panel.tsx @@ -806,7 +806,6 @@ const ComponentTabPanel = ({ {isJoinByComponent(component) ? ( diff --git a/app/configurator/components/chart-controls/section.tsx b/app/configurator/components/chart-controls/section.tsx index 4bf03f89a..70ae41fc2 100644 --- a/app/configurator/components/chart-controls/section.tsx +++ b/app/configurator/components/chart-controls/section.tsx @@ -180,7 +180,7 @@ const useControlSectionContentStyles = makeStyles< })); export const ControlSectionContent = ({ - component, + component = "div", role, ariaLabelledBy, children, diff --git a/app/docs/theme.stories.tsx b/app/docs/theme.stories.tsx index 4e35de28a..2e351c86c 100644 --- a/app/docs/theme.stories.tsx +++ b/app/docs/theme.stories.tsx @@ -28,10 +28,9 @@ import { rgbToHex, useTheme, } from "@mui/material"; -import { BoxProps } from "@mui/system"; import { Meta } from "@storybook/react"; import { useSnackbar } from "notistack"; -import { ComponentProps, useState } from "react"; +import { ComponentProps, ReactNode, useState } from "react"; import SvgIcChevronLeft from "@/icons/components/IcChevronLeft"; import SvgIcChevronRight from "@/icons/components/IcChevronRight"; @@ -46,19 +45,22 @@ const meta: Meta = { const StorybookBody = ({ children, ...props -}: { children: React.ReactNode } & BoxProps) => ( +}: { children: ReactNode } & Omit, "children">) => ( {children} ); const StorybookSection = ({ children, ...props -}: { children: React.ReactNode } & BoxProps) => ( +}: { children: ReactNode } & Omit, "children">) => ( {children} ); const StorybookSectionTitle = ({ children, ...props -}: { children: React.ReactNode } & ComponentProps) => ( +}: { children: ReactNode } & Omit< + ComponentProps, + "children" +>) => ( {children} diff --git a/app/gql-flamegraph/devtool.tsx b/app/gql-flamegraph/devtool.tsx index e11f6a3b3..31f9d1bcc 100644 --- a/app/gql-flamegraph/devtool.tsx +++ b/app/gql-flamegraph/devtool.tsx @@ -497,15 +497,10 @@ const DebugPanel = () => { - + - setTab(tab)}> + setTab(tab)}> diff --git a/app/graphql/hooks.spec.tsx b/app/graphql/hooks.spec.tsx index f4f9ee5a8..369246143 100644 --- a/app/graphql/hooks.spec.tsx +++ b/app/graphql/hooks.spec.tsx @@ -92,6 +92,7 @@ const sleep = (duration: number) => describe("useComponentsQuery - keepPreviousData: false", () => { it("should work", async () => { + // @ts-ignore global.fetch = async ( _url: RequestInfo | URL, options: RequestInit | undefined @@ -218,6 +219,7 @@ describe("useComponentsQuery - keepPreviousData: false", () => { describe("useComponentsQuery - keepPreviousData: true", () => { it("should work", async () => { + // @ts-ignore global.fetch = async ( _url: RequestInfo | URL, options: RequestInit | undefined From c774a2d23442111010d7b6f549241fbf3adc55b7 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 09:31:37 +0100 Subject: [PATCH 032/100] feat: Improve Markdown text styles --- app/components/chart-panel.tsx | 4 ++-- app/components/markdown.tsx | 11 ++++++++++- app/configurator/components/annotators.tsx | 2 ++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/app/components/chart-panel.tsx b/app/components/chart-panel.tsx index 1244a7113..671d4c44d 100644 --- a/app/components/chart-panel.tsx +++ b/app/components/chart-panel.tsx @@ -116,8 +116,8 @@ export const ChartPanelLayout = ({ const renderTextBlock = useCallback( (textBlock: LayoutTextBlock) => { return ( - // Important, otherwise ReactGrid breaks. -
+ // Key is important, otherwise ReactGrid breaks. +
{textBlock.text[locale]}
); diff --git a/app/components/markdown.tsx b/app/components/markdown.tsx index 3661e7ce6..3ffc9936d 100644 --- a/app/components/markdown.tsx +++ b/app/components/markdown.tsx @@ -1,7 +1,16 @@ import { ComponentProps } from "react"; import ReactMarkdown from "react-markdown"; -const components: ComponentProps["components"] = {}; +const components: ComponentProps["components"] = { + h1: ({ children }) =>

{children}

, + h2: ({ children }) =>

{children}

, + h3: ({ children }) =>

{children}

, + h4: ({ children }) =>

{children}

, + h5: ({ children }) =>
{children}
, + h6: ({ children }) =>
{children}
, + p: ({ children }) =>

{children}

, + a: ({ children }) => {children}, +}; export const Markdown = ( props: Omit, "components"> diff --git a/app/configurator/components/annotators.tsx b/app/configurator/components/annotators.tsx index 7d51bbe8d..f9709f71f 100644 --- a/app/configurator/components/annotators.tsx +++ b/app/configurator/components/annotators.tsx @@ -56,6 +56,7 @@ export const Title = ({ Date: Mon, 16 Dec 2024 09:41:46 +0100 Subject: [PATCH 033/100] fix: Ignore MUI theme TypeScript errors --- app/themes/federal.tsx | 3 +++ app/themes/index.ts | 1 + 2 files changed, 4 insertions(+) diff --git a/app/themes/federal.tsx b/app/themes/federal.tsx index a25aff44c..5c4c2dc47 100644 --- a/app/themes/federal.tsx +++ b/app/themes/federal.tsx @@ -36,6 +36,7 @@ export const theme = createTheme({ primary: { light: "#d8e8ef", main: "#006699", + // @ts-expect-error it works hover: "#004B70", active: "#00334D", disabled: "#599cbd", @@ -46,6 +47,7 @@ export const theme = createTheme({ }, secondary: { main: "#757575", + // @ts-expect-error it works hover: "#616161", active: "#4F4F4F", disabled: "#A5A5A5", @@ -53,6 +55,7 @@ export const theme = createTheme({ success: { main: "#3c763d", light: "#DFF0D8", + // @ts-expect-error it works hover: "#3c763d", active: "#3c763d", disabled: "#DFF0D8", diff --git a/app/themes/index.ts b/app/themes/index.ts index 11d0e55d6..2cb5130d0 100644 --- a/app/themes/index.ts +++ b/app/themes/index.ts @@ -12,6 +12,7 @@ declare module "@mui/material" { } declare module "@mui/material" { + // @ts-expect-error it works interface PaletteColorOptions { light?: string; main: string; From aa58351d4c0035974239841ef2dcac3b26e9f5ff Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 09:58:10 +0100 Subject: [PATCH 034/100] fix: Use allowed fontWeight value --- app/components/form.tsx | 2 +- app/themes/federal.tsx | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/components/form.tsx b/app/components/form.tsx index d8946fffb..b8757a471 100644 --- a/app/components/form.tsx +++ b/app/components/form.tsx @@ -732,7 +732,7 @@ export const FieldSetLegend = ({ component="legend" sx={{ lineHeight: ["1rem", "1.125rem", "1.125rem"], - fontWeight: "regular", + fontWeight: "normal", fontSize: ["0.625rem", "0.75rem", "0.75rem"], pl: 0, mb: 1, diff --git a/app/themes/federal.tsx b/app/themes/federal.tsx index 5c4c2dc47..1fc015a67 100644 --- a/app/themes/federal.tsx +++ b/app/themes/federal.tsx @@ -169,17 +169,17 @@ theme.typography = merge(theme.typography, { body1: createTypographyVariant(theme, { fontSize: [14, 16], lineHeight: [22, 24], - fontWeight: "regular", + fontWeight: "normal", }), body2: createTypographyVariant(theme, { fontSize: [12, 14], lineHeight: [18, 20], - fontWeight: "regular", + fontWeight: "normal", }), caption: createTypographyVariant(theme, { fontSize: [12], lineHeight: [18], - fontWeight: "regular", + fontWeight: "normal", }), }); From 409b327bfbedd791680fbc166f9d4c0366584843 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 10:04:41 +0100 Subject: [PATCH 035/100] refactor: Extract to useStyles --- app/configurator/components/annotators.tsx | 41 ++++++++++++---------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/app/configurator/components/annotators.tsx b/app/configurator/components/annotators.tsx index f9709f71f..bd11d68eb 100644 --- a/app/configurator/components/annotators.tsx +++ b/app/configurator/components/annotators.tsx @@ -22,18 +22,24 @@ import { } from "@/configurator/configurator-state"; import { useLocale } from "@/locales/use-locale"; -const useStyles = makeStyles({ +const useStyles = makeStyles< + Theme, + { interactive?: boolean; empty: boolean; lighterColor?: boolean } +>((theme) => ({ text: { + wordBreak: "break-word", + color: ({ empty, lighterColor }) => + !empty + ? theme.palette.text.primary + : lighterColor + ? theme.palette.grey[500] + : theme.palette.secondary.main, cursor: ({ interactive }) => (interactive ? "pointer" : "text"), "&:hover": { textDecoration: ({ interactive }) => (interactive ? "underline" : "none"), }, }, -}); - -const getEmptyColor = (lighterColor?: boolean) => { - return lighterColor ? "grey.500" : "secondary.main"; -}; +})); type Props = TypographyProps & { text: string; @@ -50,7 +56,11 @@ export const Title = ({ sx, ...rest }: Props) => { - const classes = useStyles({ interactive: !!onClick }); + const classes = useStyles({ + interactive: !!onClick, + empty: !text, + lighterColor, + }); return ( {text ? ( {text} @@ -84,7 +88,11 @@ export const Description = ({ sx, ...rest }: Props) => { - const classes = useStyles({ interactive: !!onClick }); + const classes = useStyles({ + interactive: !!onClick, + empty: !text, + lighterColor, + }); return ( {text ? ( {text} From 22ddf0f1f5e48ed7a62a74f73b234a2154571646 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 10:04:53 +0100 Subject: [PATCH 036/100] style: Remove border bottom from last child --- app/configurator/components/annotators.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/configurator/components/annotators.tsx b/app/configurator/components/annotators.tsx index bd11d68eb..48df9cce6 100644 --- a/app/configurator/components/annotators.tsx +++ b/app/configurator/components/annotators.tsx @@ -38,6 +38,9 @@ const useStyles = makeStyles< "&:hover": { textDecoration: ({ interactive }) => (interactive ? "underline" : "none"), }, + "& > :last-child": { + marginBottom: 0, + }, }, })); From 90ffd1336aa01a2db533cab6cf610960fa7b7e18 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 10:07:06 +0100 Subject: [PATCH 037/100] style: Remove background --- app/components/react-grid.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/app/components/react-grid.tsx b/app/components/react-grid.tsx index 5eaaab07b..0d80b70bf 100644 --- a/app/components/react-grid.tsx +++ b/app/components/react-grid.tsx @@ -181,7 +181,6 @@ const useStyles = makeStyles((theme: Theme) => ({ transform: "rotate(45deg)", }, "& .react-grid-item:not(.react-grid-placeholder)": { - background: theme.palette.background.paper, border: theme.palette.divider, boxShadow: theme.shadows[1], }, From 50539a045af37389bc56d09b10729906afb2428b Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 10:15:37 +0100 Subject: [PATCH 038/100] feat: Open text block editing panel on text click --- app/components/chart-panel.tsx | 45 ++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/app/components/chart-panel.tsx b/app/components/chart-panel.tsx index 671d4c44d..391a92860 100644 --- a/app/components/chart-panel.tsx +++ b/app/components/chart-panel.tsx @@ -13,10 +13,16 @@ import { ChartSelectionTabs } from "@/components/chart-selection-tabs"; import { DashboardInteractiveFilters } from "@/components/dashboard-interactive-filters"; import { Markdown } from "@/components/markdown"; import { ChartConfig, Layout, LayoutDashboard } from "@/config-types"; -import { hasChartConfigs, LayoutBlock, LayoutTextBlock } from "@/configurator"; +import { + hasChartConfigs, + isLayouting, + LayoutBlock, + LayoutTextBlock, +} from "@/configurator"; import { useConfiguratorState, useLocale } from "@/src"; +import useEvent from "@/utils/use-event"; -const useStyles = makeStyles((theme: Theme) => ({ +const useStyles = makeStyles((theme) => ({ panelLayout: { containerType: "inline-size", display: "flex", @@ -42,6 +48,12 @@ const useStyles = makeStyles((theme: Theme) => ({ width: "auto", height: "100%", }, + textBlockWrapper: { + padding: "0.75rem", + "&:hover": { + textDecoration: ({ editable }) => (editable ? "underline" : "none"), + }, + }, })); export const getChartWrapperId = (chartKey: string) => @@ -56,7 +68,8 @@ export type ChartWrapperProps = BoxProps & { export const ChartWrapper = forwardRef( (props, ref) => { const { children, editing, layoutType, ...rest } = props; - const classes = useStyles(); + const classes = useStyles({}); + return ( { const locale = useLocale(); - const classes = useStyles(); + const [state, dispatch] = useConfiguratorState(hasChartConfigs); + const layouting = isLayouting(state); + const classes = useStyles({ editable: layouting }); const Wrapper = Wrappers[layoutType]; - const [state] = useConfiguratorState(hasChartConfigs); const { layout } = state; const { blocks } = layout; + const handleTextBlockClick = useEvent((block: LayoutTextBlock) => { + dispatch({ + type: "LAYOUT_ACTIVE_FIELD_CHANGED", + value: block.key, + }); + }); + const renderTextBlock = useCallback( - (textBlock: LayoutTextBlock) => { + (block: LayoutTextBlock) => { return ( - // Key is important, otherwise ReactGrid breaks. -
- {textBlock.text[locale]} +
handleTextBlockClick(block)} + > + {block.text[locale]}
); }, - [locale] + [classes.textBlockWrapper, handleTextBlockClick, locale] ); const renderBlock = useCallback( From 7946b01297b98afdbfe20dde6c182d51b4fcf0fd Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 10:59:27 +0100 Subject: [PATCH 039/100] style: Use pointer when makes sense --- app/components/chart-panel.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/app/components/chart-panel.tsx b/app/components/chart-panel.tsx index 391a92860..1464e37df 100644 --- a/app/components/chart-panel.tsx +++ b/app/components/chart-panel.tsx @@ -50,6 +50,7 @@ const useStyles = makeStyles((theme) => ({ }, textBlockWrapper: { padding: "0.75rem", + cursor: ({ editable }) => (editable ? "pointer" : "default"), "&:hover": { textDecoration: ({ editable }) => (editable ? "underline" : "none"), }, From 87aa433f84b48f349fb576ba8ffebfb71543fab9 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 11:21:42 +0100 Subject: [PATCH 040/100] chore: Add Markdown plugins --- app/components/markdown.tsx | 12 +- app/package.json | 3 + yarn.lock | 446 +++++++++++++++++++++++++++++++++--- 3 files changed, 429 insertions(+), 32 deletions(-) diff --git a/app/components/markdown.tsx b/app/components/markdown.tsx index 3ffc9936d..25d63bd5c 100644 --- a/app/components/markdown.tsx +++ b/app/components/markdown.tsx @@ -1,5 +1,8 @@ import { ComponentProps } from "react"; import ReactMarkdown from "react-markdown"; +import rehypeRaw from "rehype-raw"; +import rehypeSanitize from "rehype-sanitize"; +import remarkGfm from "remark-gfm"; const components: ComponentProps["components"] = { h1: ({ children }) =>

{children}

, @@ -15,5 +18,12 @@ const components: ComponentProps["components"] = { export const Markdown = ( props: Omit, "components"> ) => { - return ; + return ( + + ); }; diff --git a/app/package.json b/app/package.json index 805559fc7..c35f0bfb6 100644 --- a/app/package.json +++ b/app/package.json @@ -108,6 +108,9 @@ "react-table": "^7.8.0", "react-virtualized-auto-sizer": "^1.0.24", "react-window": "^1.8.10", + "rehype-raw": "^7.0.0", + "rehype-sanitize": "^6.0.0", + "remark-gfm": "^4.0.0", "simple-statistics": "^7.6.0", "sparql-http-client": "^2.4.1", "storybook": "^8.1.0", diff --git a/yarn.lock b/yarn.lock index 9d1ff0346..7d7a1684e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -201,7 +201,7 @@ "@babel/highlight" "^7.24.2" picocolors "^1.0.0" -"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0": +"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": version "7.26.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== @@ -230,7 +230,29 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.2.tgz#278b6b13664557de95b8f35b90d96785850bb56e" integrity sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg== -"@babel/core@7.12.9", "@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.10.5", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.12.9", "@babel/core@^7.14.6", "@babel/core@^7.18.9", "@babel/core@^7.21.0", "@babel/core@^7.23.0", "@babel/core@^7.23.2", "@babel/core@^7.24.4", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.7.7": +"@babel/core@7.12.9": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" + integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.7" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.9" + "@babel/types" "^7.12.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.10.5", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.12.9", "@babel/core@^7.18.9", "@babel/core@^7.21.0", "@babel/core@^7.23.0", "@babel/core@^7.23.2", "@babel/core@^7.24.4", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.7.7": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== @@ -260,6 +282,17 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.12.5", "@babel/generator@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019" + integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== + dependencies: + "@babel/parser" "^7.26.3" + "@babel/types" "^7.26.3" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + "@babel/generator@^7.20.14": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" @@ -538,6 +571,15 @@ "@babel/traverse" "^7.25.9" "@babel/types" "^7.25.9" +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/helper-module-transforms@^7.14.5": version "7.15.8" resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz" @@ -563,15 +605,6 @@ "@babel/helper-split-export-declaration" "^7.22.6" "@babel/helper-validator-identifier" "^7.22.20" -"@babel/helper-module-transforms@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" - integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/helper-optimise-call-expression@^7.14.5", "@babel/helper-optimise-call-expression@^7.15.4": version "7.15.4" resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz" @@ -786,7 +819,7 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.26.0": +"@babel/helpers@^7.12.5", "@babel/helpers@^7.26.0": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== @@ -840,7 +873,12 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@7.12.16", "@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.14.6", "@babel/parser@^7.14.7", "@babel/parser@^7.15.4", "@babel/parser@^7.20.15", "@babel/parser@^7.20.7", "@babel/parser@^7.21.2", "@babel/parser@^7.21.4", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0", "@babel/parser@^7.24.0", "@babel/parser@^7.24.4", "@babel/parser@^7.24.5", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.2", "@babel/parser@^7.7.2": +"@babel/parser@7.12.16": + version "7.12.16" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.16.tgz#cc31257419d2c3189d394081635703f549fc1ed4" + integrity sha512-c/+u9cqV6F0+4Hpq01jnJO+GLp2DdT63ppz9Xa+6cHaajM9VFzK/iDXiKK65YtpeVwu+ctfS6iqlMqRgQRzeCw== + +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.15.4", "@babel/parser@^7.20.15", "@babel/parser@^7.20.7", "@babel/parser@^7.21.2", "@babel/parser@^7.21.4", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0", "@babel/parser@^7.24.0", "@babel/parser@^7.24.4", "@babel/parser@^7.24.5", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.2", "@babel/parser@^7.26.3", "@babel/parser@^7.7.2": version "7.26.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== @@ -2507,6 +2545,15 @@ resolved "https://registry.npmjs.org/@babel/standalone/-/standalone-7.14.6.tgz" integrity sha512-oAoSp82jhJFnXKybKTOj5QF04XxiDRyiiqrFToiU1udlBXuZoADlPmmnOcuqBrZxSNNUjzJIVK8vt838Qoqjxg== +"@babel/template@^7.12.7", "@babel/template@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/template@^7.15.4", "@babel/template@^7.3.3": version "7.15.4" resolved "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz" @@ -2534,15 +2581,6 @@ "@babel/parser" "^7.24.0" "@babel/types" "^7.24.0" -"@babel/template@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" - integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== - dependencies: - "@babel/code-frame" "^7.25.9" - "@babel/parser" "^7.25.9" - "@babel/types" "^7.25.9" - "@babel/traverse@7.12.13": version "7.12.13" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.13.tgz" @@ -2573,6 +2611,19 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.12.9": + version "7.26.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" + integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.3" + "@babel/parser" "^7.26.3" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.3" + debug "^4.3.1" + globals "^11.1.0" + "@babel/traverse@^7.18.9", "@babel/traverse@^7.23.2": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" @@ -2635,6 +2686,14 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" +"@babel/types@^7.12.7", "@babel/types@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" + integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/types@^7.16.7": version "7.17.0" resolved "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz" @@ -2705,14 +2764,6 @@ "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" -"@babel/types@^7.26.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" - integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@base2/pretty-print-object@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz#371ba8be66d556812dc7fb169ebc3c08378f69d4" @@ -14429,6 +14480,11 @@ entities@^2.0.0: resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +entities@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + env-paths@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -14780,6 +14836,11 @@ escape-string-regexp@^2.0.0: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + escodegen@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz" @@ -15880,7 +15941,7 @@ fwd-stream@^1.0.4: dependencies: readable-stream "~1.0.26-4" -gensync@^1.0.0-beta.2: +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== @@ -16546,6 +16607,13 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + hast-to-hyperscript@^9.0.0: version "9.0.1" resolved "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz" @@ -16571,11 +16639,32 @@ hast-util-from-parse5@^6.0.0: vfile-location "^3.2.0" web-namespaces "^1.0.0" +hast-util-from-parse5@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.2.tgz#29b42758ba96535fd6021f0f533c000886c0f00f" + integrity sha512-SfMzfdAi/zAoZ1KkFEyyeXBn7u/ShQrfd675ZEE9M3qj+PMFX05xubzRyF76CCSJu8au9jgVxDV1+okFvgZU4A== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + devlop "^1.0.0" + hastscript "^9.0.0" + property-information "^6.0.0" + vfile "^6.0.0" + vfile-location "^5.0.0" + web-namespaces "^2.0.0" + hast-util-parse-selector@^2.0.0: version "2.2.5" resolved "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz" integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== +hast-util-parse-selector@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz#352879fa86e25616036037dd8931fb5f34cb4a27" + integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A== + dependencies: + "@types/hast" "^3.0.0" + hast-util-raw@6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz" @@ -16592,6 +16681,34 @@ hast-util-raw@6.0.1: xtend "^4.0.0" zwitch "^1.0.0" +hast-util-raw@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-9.1.0.tgz#79b66b26f6f68fb50dfb4716b2cdca90d92adf2e" + integrity sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + "@ungap/structured-clone" "^1.0.0" + hast-util-from-parse5 "^8.0.0" + hast-util-to-parse5 "^8.0.0" + html-void-elements "^3.0.0" + mdast-util-to-hast "^13.0.0" + parse5 "^7.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + +hast-util-sanitize@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/hast-util-sanitize/-/hast-util-sanitize-5.0.2.tgz#edb260d94e5bba2030eb9375790a8753e5bf391f" + integrity sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg== + dependencies: + "@types/hast" "^3.0.0" + "@ungap/structured-clone" "^1.0.0" + unist-util-position "^5.0.0" + hast-util-to-jsx-runtime@^2.0.0: version "2.3.2" resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz#6d11b027473e69adeaa00ca4cfb5bb68e3d282fa" @@ -16624,6 +16741,19 @@ hast-util-to-parse5@^6.0.0: xtend "^4.0.0" zwitch "^1.0.0" +hast-util-to-parse5@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz#477cd42d278d4f036bc2ea58586130f6f39ee6ed" + integrity sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw== + dependencies: + "@types/hast" "^3.0.0" + comma-separated-tokens "^2.0.0" + devlop "^1.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + hast-util-whitespace@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" @@ -16642,6 +16772,17 @@ hastscript@^6.0.0: property-information "^5.0.0" space-separated-tokens "^1.0.0" +hastscript@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-9.0.0.tgz#2b76b9aa3cba8bf6d5280869f6f6f7165c230763" + integrity sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw== + dependencies: + "@types/hast" "^3.0.0" + comma-separated-tokens "^2.0.0" + hast-util-parse-selector "^4.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -16741,6 +16882,11 @@ html-void-elements@^1.0.0: resolved "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz" integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== +html-void-elements@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7" + integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== + html-webpack-plugin@^5.5.0: version "5.6.0" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz#50a8fa6709245608cb00e811eacecb8e0d7b7ea0" @@ -17225,6 +17371,13 @@ is-core-module@^2.13.0: dependencies: hasown "^2.0.0" +is-core-module@^2.16.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.0.tgz#6c01ffdd5e33c49c1d2abfa93334a85cb56bd81c" + integrity sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g== + dependencies: + hasown "^2.0.2" + is-core-module@^2.2.0: version "2.4.0" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz" @@ -19449,6 +19602,11 @@ markdown-escapes@^1.0.0: resolved "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz" integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== +markdown-table@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.4.tgz#fe44d6d410ff9d6f2ea1797a3f60aa4d2b631c2a" + integrity sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw== + markdown-to-jsx@^7.1.8: version "7.4.1" resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.4.1.tgz#1ed6a60f8f9cd944bec39d9923fbbc8d3d60dcb9" @@ -19501,6 +19659,16 @@ mdast-util-definitions@^4.0.0: dependencies: unist-util-visit "^2.0.0" +mdast-util-find-and-replace@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz#a6fc7b62f0994e973490e45262e4bc07607b04e0" + integrity sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA== + dependencies: + "@types/mdast" "^4.0.0" + escape-string-regexp "^5.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + mdast-util-from-markdown@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz#4850390ca7cf17413a9b9a0fbefcd1bc0eb4160a" @@ -19519,6 +19687,71 @@ mdast-util-from-markdown@^2.0.0: micromark-util-types "^2.0.0" unist-util-stringify-position "^4.0.0" +mdast-util-gfm-autolink-literal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz#abd557630337bd30a6d5a4bd8252e1c2dc0875d5" + integrity sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ== + dependencies: + "@types/mdast" "^4.0.0" + ccount "^2.0.0" + devlop "^1.0.0" + mdast-util-find-and-replace "^3.0.0" + micromark-util-character "^2.0.0" + +mdast-util-gfm-footnote@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz#25a1753c7d16db8bfd53cd84fe50562bd1e6d6a9" + integrity sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.1.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + +mdast-util-gfm-strikethrough@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz#d44ef9e8ed283ac8c1165ab0d0dfd058c2764c16" + integrity sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-gfm-table@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz#7a435fb6223a72b0862b33afbd712b6dae878d38" + integrity sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + markdown-table "^3.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-gfm-task-list-item@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz#e68095d2f8a4303ef24094ab642e1047b991a936" + integrity sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-gfm@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz#3f2aecc879785c3cb6a81ff3a243dc11eca61095" + integrity sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw== + dependencies: + mdast-util-from-markdown "^2.0.0" + mdast-util-gfm-autolink-literal "^2.0.0" + mdast-util-gfm-footnote "^2.0.0" + mdast-util-gfm-strikethrough "^2.0.0" + mdast-util-gfm-table "^2.0.0" + mdast-util-gfm-task-list-item "^2.0.0" + mdast-util-to-markdown "^2.0.0" + mdast-util-mdx-expression@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz#43f0abac9adc756e2086f63822a38c8d3c3a5096" @@ -19747,6 +19980,85 @@ micromark-core-commonmark@^2.0.0: micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" +micromark-extension-gfm-autolink-literal@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz#6286aee9686c4462c1e3552a9d505feddceeb935" + integrity sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-footnote@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz#4dab56d4e398b9853f6fe4efac4fc9361f3e0750" + integrity sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw== + dependencies: + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-strikethrough@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz#86106df8b3a692b5f6a92280d3879be6be46d923" + integrity sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw== + dependencies: + devlop "^1.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-table@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz#5cadedfbb29fca7abf752447967003dc3b6583c9" + integrity sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g== + dependencies: + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-tagfilter@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz#f26d8a7807b5985fba13cf61465b58ca5ff7dc57" + integrity sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg== + dependencies: + micromark-util-types "^2.0.0" + +micromark-extension-gfm-task-list-item@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz#bcc34d805639829990ec175c3eea12bb5b781f2c" + integrity sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw== + dependencies: + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz#3e13376ab95dd7a5cfd0e29560dfe999657b3c5b" + integrity sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w== + dependencies: + micromark-extension-gfm-autolink-literal "^2.0.0" + micromark-extension-gfm-footnote "^2.0.0" + micromark-extension-gfm-strikethrough "^2.0.0" + micromark-extension-gfm-table "^2.0.0" + micromark-extension-gfm-tagfilter "^2.0.0" + micromark-extension-gfm-task-list-item "^2.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-types "^2.0.0" + micromark-factory-destination@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639" @@ -21040,6 +21352,13 @@ parse5@6.0.1, parse5@^6.0.0: resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parse5@^7.0.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.2.1.tgz#8928f55915e6125f430cc44309765bf17556a33a" + integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ== + dependencies: + entities "^4.5.0" + parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -22755,6 +23074,23 @@ regjsparser@^0.9.1: dependencies: jsesc "~0.5.0" +rehype-raw@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-7.0.0.tgz#59d7348fd5dbef3807bbaa1d443efd2dd85ecee4" + integrity sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww== + dependencies: + "@types/hast" "^3.0.0" + hast-util-raw "^9.0.0" + vfile "^6.0.0" + +rehype-sanitize@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/rehype-sanitize/-/rehype-sanitize-6.0.0.tgz#16e95f4a67a69cbf0f79e113c8e0df48203db73c" + integrity sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg== + dependencies: + "@types/hast" "^3.0.0" + hast-util-sanitize "^5.0.0" + relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" @@ -22811,6 +23147,18 @@ remark-footnotes@2.0.0: resolved "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz" integrity sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ== +remark-gfm@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.0.tgz#aea777f0744701aa288b67d28c43565c7e8c35de" + integrity sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-gfm "^3.0.0" + micromark-extension-gfm "^3.0.0" + remark-parse "^11.0.0" + remark-stringify "^11.0.0" + unified "^11.0.0" + remark-mdx@1.6.22: version "1.6.22" resolved "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz" @@ -22884,6 +23232,15 @@ remark-squeeze-paragraphs@4.0.0: dependencies: mdast-squeeze-paragraphs "^4.0.0" +remark-stringify@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-11.0.0.tgz#4c5b01dd711c269df1aaae11743eb7e2e7636fd3" + integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-to-markdown "^2.0.0" + unified "^11.0.0" + remedial@^1.0.7: version "1.0.8" resolved "https://registry.npmjs.org/remedial/-/remedial-1.0.8.tgz" @@ -23053,6 +23410,15 @@ resolve@^1.21.0, resolve@^1.22.0, resolve@^1.22.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.3.2: + version "1.22.9" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.9.tgz#6da76e4cdc57181fa4471231400e8851d0a924f3" + integrity sha512-QxrmX1DzraFIi9PxdG5VkRfRwIgjwyud+z/iBwfRRrVmHc+P9Q7u2lSSpQ6bjr2gy5lrqIiU9vb6iAeGf2400A== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.4: version "2.0.0-next.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" @@ -23366,6 +23732,11 @@ semver@7.x, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: dependencies: lru-cache "^6.0.0" +semver@^5.4.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" @@ -25729,6 +26100,14 @@ vfile-location@^3.0.0, vfile-location@^3.2.0: resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz" integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== +vfile-location@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-5.0.3.tgz#cb9eacd20f2b6426d19451e0eafa3d0a846225c3" + integrity sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg== + dependencies: + "@types/unist" "^3.0.0" + vfile "^6.0.0" + vfile-message@^2.0.0: version "2.0.4" resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz" @@ -25864,6 +26243,11 @@ web-namespaces@^1.0.0: resolved "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz" integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== +web-namespaces@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" + integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== + web-streams-polyfill@^3.0.3: version "3.2.1" resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" From b70e8645e13178a5615bdfba594eb879c5c2c8b2 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 11:26:33 +0100 Subject: [PATCH 041/100] feat: Add keydown handler for most popular actions (b, i, u) --- app/components/form.tsx | 127 ++++++++++++++++++++++++++++++++-------- 1 file changed, 103 insertions(+), 24 deletions(-) diff --git a/app/components/form.tsx b/app/components/form.tsx index b8757a471..5ba91780e 100644 --- a/app/components/form.tsx +++ b/app/components/form.tsx @@ -31,7 +31,9 @@ import { import { useId } from "@reach/auto-id"; import flatten from "lodash/flatten"; import React, { + ChangeEvent, ComponentProps, + KeyboardEvent, ReactNode, SyntheticEvent, createContext, @@ -606,6 +608,68 @@ export const MinimalisticSelect = (props: MinimalisticSelectProps) => { ); }; +const makeKeyDownHandler = + ({ + key, + wrapStart, + wrapEnd, + }: { + key: string; + wrapStart: string; + wrapEnd: string; + }) => + ( + e: KeyboardEvent, + { + input, + onChange, + value, + }: { + input: HTMLInputElement; + onChange: (e: ChangeEvent) => void; + value: string; + } + ) => { + if ((e.metaKey || e.ctrlKey) && e.key === key) { + e.preventDefault(); + + const { selectionStart: start, selectionEnd: end } = input; + + if (start === null || end === null || start === end) { + return; + } + + const text = value.slice(start, end); + const wrappedText = `${wrapStart}${text}${wrapEnd}`; + const newValue = `${value.slice(0, start)}${wrappedText}${value.slice(end)}`; + + // Keep the change in the undo stack, so we can use CMD+Z as expected. + // Even though it's deprecated, it still works in most browsers. + document.execCommand("insertText", false, wrappedText); + + onChange({ + currentTarget: { value: newValue }, + } as ChangeEvent); + + input.selectionStart = start + wrapStart.length; + input.selectionEnd = start + text.length + wrapStart.length; + + return true; + } + }; + +const keyDownHandlers = [ + { key: "b", wrapStart: "**", wrapEnd: "**" }, + { key: "i", wrapStart: "_", wrapEnd: "_" }, + { key: "u", wrapStart: "", wrapEnd: "" }, +].map(({ key, wrapStart, wrapEnd }) => { + return makeKeyDownHandler({ + key, + wrapStart, + wrapEnd, + }); +}); + export const Input = ({ label, name, @@ -615,30 +679,45 @@ export const Input = ({ }: { label?: string | ReactNode; disabled?: boolean; -} & FieldProps) => ( - - {label && name && ( - - )} - - -); +} & FieldProps) => { + const inputRef = useRef(null); + const handleKeyDown = useEvent((e: KeyboardEvent) => { + const input = inputRef.current; + + if (!input || !onChange || typeof value !== "string") { + return; + } + + return keyDownHandlers.some((cb) => cb(e, { input, onChange, value })); + }); + + return ( + + {label && name ? ( + + ) : null} + + + ); +}; export const SearchField = ({ id, From 9817df89ff63262d8aa7610f10d6deec5a233964 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 11:33:23 +0100 Subject: [PATCH 042/100] feat: Allow re-doing actions --- app/components/form.tsx | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/app/components/form.tsx b/app/components/form.tsx index 5ba91780e..416812226 100644 --- a/app/components/form.tsx +++ b/app/components/form.tsx @@ -641,18 +641,38 @@ const makeKeyDownHandler = const text = value.slice(start, end); const wrappedText = `${wrapStart}${text}${wrapEnd}`; - const newValue = `${value.slice(0, start)}${wrappedText}${value.slice(end)}`; + const maybeWrappedText = value.slice( + start - wrapStart.length, + end + wrapEnd.length + ); - // Keep the change in the undo stack, so we can use CMD+Z as expected. - // Even though it's deprecated, it still works in most browsers. - document.execCommand("insertText", false, wrappedText); + if (maybeWrappedText === wrappedText) { + const newValue = `${value.slice(0, start - wrapStart.length)}${text}${value.slice( + end + wrapEnd.length + )}`; + // Keep the change in the undo stack, so we can use CMD+Z as expected. + // Even though it's deprecated, it still works in most browsers. + document.execCommand("insertText", false, text); + onChange({ + currentTarget: { value: newValue }, + } as ChangeEvent); + setTimeout(() => { + input.selectionStart = start - wrapStart.length; + input.selectionEnd = start + text.length - wrapStart.length; + }, 0); + + return true; + } + const newValue = `${value.slice(0, start)}${wrappedText}${value.slice(end)}`; + document.execCommand("insertText", false, wrappedText); onChange({ currentTarget: { value: newValue }, } as ChangeEvent); - - input.selectionStart = start + wrapStart.length; - input.selectionEnd = start + text.length + wrapStart.length; + setTimeout(() => { + input.selectionStart = start + wrapStart.length; + input.selectionEnd = start + text.length + wrapStart.length; + }, 0); return true; } From dfc2a6dd4b54f79d1054699fabd6134754e193e6 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 11:36:34 +0100 Subject: [PATCH 043/100] refactor: Improve types --- app/components/form.tsx | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/app/components/form.tsx b/app/components/form.tsx index 416812226..c3a8715f9 100644 --- a/app/components/form.tsx +++ b/app/components/form.tsx @@ -608,16 +608,14 @@ export const MinimalisticSelect = (props: MinimalisticSelectProps) => { ); }; +type KeyDownHandlerProps = { + key: string; + wrapStart: string; + wrapEnd: string; +}; + const makeKeyDownHandler = - ({ - key, - wrapStart, - wrapEnd, - }: { - key: string; - wrapStart: string; - wrapEnd: string; - }) => + ({ key, wrapStart, wrapEnd }: KeyDownHandlerProps) => ( e: KeyboardEvent, { @@ -678,11 +676,13 @@ const makeKeyDownHandler = } }; -const keyDownHandlers = [ - { key: "b", wrapStart: "**", wrapEnd: "**" }, - { key: "i", wrapStart: "_", wrapEnd: "_" }, - { key: "u", wrapStart: "", wrapEnd: "" }, -].map(({ key, wrapStart, wrapEnd }) => { +const keyDownHandlers = ( + [ + { key: "b", wrapStart: "**", wrapEnd: "**" }, + { key: "i", wrapStart: "_", wrapEnd: "_" }, + { key: "u", wrapStart: "", wrapEnd: "" }, + ] satisfies KeyDownHandlerProps[] +).map(({ key, wrapStart, wrapEnd }) => { return makeKeyDownHandler({ key, wrapStart, From c213b11f5f084a41afcf9a19b6010ed4c20f06b0 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 11:50:18 +0100 Subject: [PATCH 044/100] chore: Only use one prettier --- package.json | 1 - yarn.lock | 141 +++++++++++---------------------------------------- 2 files changed, 31 insertions(+), 111 deletions(-) diff --git a/package.json b/package.json index ffed776d9..cd1614ca6 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,6 @@ "fs-extra": "^10.0.0", "import-move-codemod": "^0.0.3", "madge": "^6.1.0", - "prettier": "^2.1.2", "rollup": "^2.52.2", "rollup-plugin-analyzer": "^4.0.0", "rollup-plugin-babel": "^4.3.3", diff --git a/yarn.lock b/yarn.lock index 7d7a1684e..28a7d2299 100644 --- a/yarn.lock +++ b/yarn.lock @@ -201,7 +201,7 @@ "@babel/highlight" "^7.24.2" picocolors "^1.0.0" -"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": +"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0": version "7.26.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== @@ -230,29 +230,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.2.tgz#278b6b13664557de95b8f35b90d96785850bb56e" integrity sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg== -"@babel/core@7.12.9": - version "7.12.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" - integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.5" - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helpers" "^7.12.5" - "@babel/parser" "^7.12.7" - "@babel/template" "^7.12.7" - "@babel/traverse" "^7.12.9" - "@babel/types" "^7.12.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.10.5", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.12.9", "@babel/core@^7.18.9", "@babel/core@^7.21.0", "@babel/core@^7.23.0", "@babel/core@^7.23.2", "@babel/core@^7.24.4", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.7.7": +"@babel/core@7.12.9", "@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.10.5", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.12.9", "@babel/core@^7.14.6", "@babel/core@^7.18.9", "@babel/core@^7.21.0", "@babel/core@^7.23.0", "@babel/core@^7.23.2", "@babel/core@^7.24.4", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.7.7": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== @@ -282,17 +260,6 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.12.5", "@babel/generator@^7.26.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019" - integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== - dependencies: - "@babel/parser" "^7.26.3" - "@babel/types" "^7.26.3" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^3.0.2" - "@babel/generator@^7.20.14": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" @@ -571,15 +538,6 @@ "@babel/traverse" "^7.25.9" "@babel/types" "^7.25.9" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" - integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/helper-module-transforms@^7.14.5": version "7.15.8" resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz" @@ -605,6 +563,15 @@ "@babel/helper-split-export-declaration" "^7.22.6" "@babel/helper-validator-identifier" "^7.22.20" +"@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/helper-optimise-call-expression@^7.14.5", "@babel/helper-optimise-call-expression@^7.15.4": version "7.15.4" resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz" @@ -819,7 +786,7 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.12.5", "@babel/helpers@^7.26.0": +"@babel/helpers@^7.26.0": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== @@ -873,12 +840,7 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@7.12.16": - version "7.12.16" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.16.tgz#cc31257419d2c3189d394081635703f549fc1ed4" - integrity sha512-c/+u9cqV6F0+4Hpq01jnJO+GLp2DdT63ppz9Xa+6cHaajM9VFzK/iDXiKK65YtpeVwu+ctfS6iqlMqRgQRzeCw== - -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.15.4", "@babel/parser@^7.20.15", "@babel/parser@^7.20.7", "@babel/parser@^7.21.2", "@babel/parser@^7.21.4", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0", "@babel/parser@^7.24.0", "@babel/parser@^7.24.4", "@babel/parser@^7.24.5", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.2", "@babel/parser@^7.26.3", "@babel/parser@^7.7.2": +"@babel/parser@7.12.16", "@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.14.6", "@babel/parser@^7.14.7", "@babel/parser@^7.15.4", "@babel/parser@^7.20.15", "@babel/parser@^7.20.7", "@babel/parser@^7.21.2", "@babel/parser@^7.21.4", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0", "@babel/parser@^7.24.0", "@babel/parser@^7.24.4", "@babel/parser@^7.24.5", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.2", "@babel/parser@^7.7.2": version "7.26.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== @@ -2545,15 +2507,6 @@ resolved "https://registry.npmjs.org/@babel/standalone/-/standalone-7.14.6.tgz" integrity sha512-oAoSp82jhJFnXKybKTOj5QF04XxiDRyiiqrFToiU1udlBXuZoADlPmmnOcuqBrZxSNNUjzJIVK8vt838Qoqjxg== -"@babel/template@^7.12.7", "@babel/template@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" - integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== - dependencies: - "@babel/code-frame" "^7.25.9" - "@babel/parser" "^7.25.9" - "@babel/types" "^7.25.9" - "@babel/template@^7.15.4", "@babel/template@^7.3.3": version "7.15.4" resolved "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz" @@ -2581,6 +2534,15 @@ "@babel/parser" "^7.24.0" "@babel/types" "^7.24.0" +"@babel/template@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/traverse@7.12.13": version "7.12.13" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.13.tgz" @@ -2611,19 +2573,6 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.12.9": - version "7.26.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" - integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.3" - "@babel/parser" "^7.26.3" - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.3" - debug "^4.3.1" - globals "^11.1.0" - "@babel/traverse@^7.18.9", "@babel/traverse@^7.23.2": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" @@ -2686,14 +2635,6 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" -"@babel/types@^7.12.7", "@babel/types@^7.26.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" - integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/types@^7.16.7": version "7.17.0" resolved "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz" @@ -2764,6 +2705,14 @@ "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" +"@babel/types@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" + integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@base2/pretty-print-object@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz#371ba8be66d556812dc7fb169ebc3c08378f69d4" @@ -15941,7 +15890,7 @@ fwd-stream@^1.0.4: dependencies: readable-stream "~1.0.26-4" -gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: +gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== @@ -16607,13 +16556,6 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" -hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - hast-to-hyperscript@^9.0.0: version "9.0.1" resolved "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz" @@ -17371,13 +17313,6 @@ is-core-module@^2.13.0: dependencies: hasown "^2.0.0" -is-core-module@^2.16.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.0.tgz#6c01ffdd5e33c49c1d2abfa93334a85cb56bd81c" - integrity sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g== - dependencies: - hasown "^2.0.2" - is-core-module@^2.2.0: version "2.4.0" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz" @@ -23410,15 +23345,6 @@ resolve@^1.21.0, resolve@^1.22.0, resolve@^1.22.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.3.2: - version "1.22.9" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.9.tgz#6da76e4cdc57181fa4471231400e8851d0a924f3" - integrity sha512-QxrmX1DzraFIi9PxdG5VkRfRwIgjwyud+z/iBwfRRrVmHc+P9Q7u2lSSpQ6bjr2gy5lrqIiU9vb6iAeGf2400A== - dependencies: - is-core-module "^2.16.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - resolve@^2.0.0-next.4: version "2.0.0-next.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" @@ -23732,11 +23658,6 @@ semver@7.x, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: dependencies: lru-cache "^6.0.0" -semver@^5.4.1: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" From b925ac22a69b60d01a0cd25797cabb193657f59d Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 11:50:29 +0100 Subject: [PATCH 045/100] fix: Syntax TypeScript error --- app/components/form.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/components/form.tsx b/app/components/form.tsx index c3a8715f9..8b9507e2a 100644 --- a/app/components/form.tsx +++ b/app/components/form.tsx @@ -681,7 +681,9 @@ const keyDownHandlers = ( { key: "b", wrapStart: "**", wrapEnd: "**" }, { key: "i", wrapStart: "_", wrapEnd: "_" }, { key: "u", wrapStart: "", wrapEnd: "" }, - ] satisfies KeyDownHandlerProps[] + { key: "s", wrapStart: "~~", wrapEnd: "~~" }, + // Would be better to use `satisfies` here, but it's resulting in syntax errors + ] as KeyDownHandlerProps[] ).map(({ key, wrapStart, wrapEnd }) => { return makeKeyDownHandler({ key, From cb18a05af1d116d69b366f0e68afff32ee8582e3 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 12:48:33 +0100 Subject: [PATCH 046/100] fix: Type issues --- app/configurator/components/layout-configurator.tsx | 6 +++++- app/utils/use-screenshot.ts | 5 +++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/configurator/components/layout-configurator.tsx b/app/configurator/components/layout-configurator.tsx index 122d1488d..795fcba5e 100644 --- a/app/configurator/components/layout-configurator.tsx +++ b/app/configurator/components/layout-configurator.tsx @@ -33,6 +33,7 @@ import { DashboardTimeRangeFilter, getChartConfig, LayoutDashboard, + LayoutTextBlock, ReactGridLayoutType, } from "@/config-types"; import { LayoutAnnotator } from "@/configurator/components/annotators"; @@ -571,7 +572,10 @@ const LayoutBlocksConfigurator = () => {
{blocks - .filter((b) => b.type === "text") + .filter( + (block): block is LayoutTextBlock & { initialized: boolean } => + block.type === "text" + ) .map((block) => ( - c.charCodeAt(0) + let arrayBuffer: Uint8Array = Uint8Array.from( + atob(dataUrl.split(",")[1]), + (c) => c.charCodeAt(0) ); pngMetadata?.forEach(({ key, value }) => { From 264bfa9719e0ad046be1c58a559a4d3e78881e83 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 12:56:24 +0100 Subject: [PATCH 047/100] docs: Update CHANGELOG --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45cdbf2a8..3fd0f6ab0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,12 @@ You can also check the # Unreleased - Features + - Added a new chart type - bar - It's now possible to export charts as images +- Fixes + - Themes fetching is now done by using standard SPARQL iris (starting with + https://), so that it behaves consistently across different SPARQL database + engines # [5.0.2] - 2024-11-28 From 4122bf33dfc5d06d1d9d44284d199e41137c7aa1 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 13:05:04 +0100 Subject: [PATCH 048/100] chore: Add pull request template --- .github/pull_request_template.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..5e0ee7a9e --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,19 @@ + + +Closes # + + + +This PR... + + + +## How to test + +1. Go to... + + + +--- + +- [ ] Add a CHANGELOG entry From df7177ca51eb0f056d09a0840c3f0370226e90b3 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 13:09:18 +0100 Subject: [PATCH 049/100] style: Improve styles --- app/components/form.tsx | 1 + app/configurator/components/annotators.tsx | 1 + app/themes/federal.tsx | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/components/form.tsx b/app/components/form.tsx index 8b9507e2a..884e02cb3 100644 --- a/app/components/form.tsx +++ b/app/components/form.tsx @@ -733,6 +733,7 @@ export const Input = ({ inputRef={inputRef} sx={{ width: "100%", + padding: "10px 6px", borderColor: "grey.500", backgroundColor: "grey.100", }} diff --git a/app/configurator/components/annotators.tsx b/app/configurator/components/annotators.tsx index 48df9cce6..7aea1820b 100644 --- a/app/configurator/components/annotators.tsx +++ b/app/configurator/components/annotators.tsx @@ -72,6 +72,7 @@ export const Title = ({ component="span" className={clsx(classes.text, className)} onClick={onClick} + style={{ marginBottom: "0.5rem" }} > {text ? ( {text} diff --git a/app/themes/federal.tsx b/app/themes/federal.tsx index 1fc015a67..f80c1b81e 100644 --- a/app/themes/federal.tsx +++ b/app/themes/federal.tsx @@ -465,7 +465,7 @@ theme.components = { border: "1px solid", borderColor: theme.palette.divider, borderRadius: (theme.shape.borderRadius as number) * 2, - padding: "10px 6px", + padding: "0 6px", minHeight: 48, }, sizeSmall: { From 5f7f6ae1ef0db7bf0d83778983e5e1703ff55a46 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 13:34:29 +0100 Subject: [PATCH 050/100] refactor: Apply class name directly in the component --- app/components/chart-preview.tsx | 9 +-------- app/components/drag-handle.tsx | 10 +++++++--- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/app/components/chart-preview.tsx b/app/components/chart-preview.tsx index 6e7082bc7..fb7206c80 100644 --- a/app/components/chart-preview.tsx +++ b/app/components/chart-preview.tsx @@ -28,7 +28,6 @@ import { ChartWrapper, ChartWrapperProps, } from "@/components/chart-panel"; -import { chartPanelLayoutGridClasses } from "@/components/chart-panel-layout-grid"; import { ChartControls, ChartMoreButton, @@ -263,12 +262,7 @@ const ReactGridChartPreview = forwardRef< - } + actionElementSlot={} > {children} @@ -324,7 +318,6 @@ const DndChartPreview = (props: CommonChartPreviewProps) => { actionElementSlot={ diff --git a/app/components/drag-handle.tsx b/app/components/drag-handle.tsx index 3b429bdd7..deb2990af 100644 --- a/app/components/drag-handle.tsx +++ b/app/components/drag-handle.tsx @@ -2,11 +2,11 @@ import { Box, BoxProps } from "@mui/material"; import clsx from "clsx"; import { forwardRef, Ref } from "react"; +import { chartPanelLayoutGridClasses } from "@/components/chart-panel-layout-grid"; +import { useIconStyles } from "@/components/chart-selection-tabs"; import { Icon } from "@/icons"; import { DISABLE_SCREENSHOT_ATTR } from "@/utils/use-screenshot"; -import { useIconStyles } from "./chart-selection-tabs"; - export type DragHandleProps = Omit & { ref?: Ref; dragging?: boolean; @@ -22,7 +22,11 @@ export const DragHandle = forwardRef( {...DISABLE_SCREENSHOT_ATTR} ref={ref} {...rest} - className={clsx(classes.dragIconWrapper, props.className)} + className={clsx( + classes.dragIconWrapper, + props.className, + chartPanelLayoutGridClasses.dragHandle + )} > From 76bd701e856ef1164e22634ace30063c001e2fc7 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 13:34:40 +0100 Subject: [PATCH 051/100] chore: Remove default text initialization --- app/configurator/components/layout-configurator.tsx | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/app/configurator/components/layout-configurator.tsx b/app/configurator/components/layout-configurator.tsx index 795fcba5e..1e2c0c324 100644 --- a/app/configurator/components/layout-configurator.tsx +++ b/app/configurator/components/layout-configurator.tsx @@ -628,15 +628,7 @@ const AddLayoutBlocks = () => { type: "text", key: createId(), text: { - de: `# Heading 1! -## Heading 2! -### Heading 3! -#### Heading 4! -##### Heading 5! -###### Heading 6! -**Bold text** -*Italic text* -[Link](https://example.com)`, + de: "", fr: "", it: "", en: "", From b61ebda42b9b4e8332168395ac34a9b82fa67b47 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 13:35:11 +0100 Subject: [PATCH 052/100] feat: Add a way to drag text blocks in free canvas layout --- app/components/chart-panel.tsx | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/app/components/chart-panel.tsx b/app/components/chart-panel.tsx index 1464e37df..81d74e0da 100644 --- a/app/components/chart-panel.tsx +++ b/app/components/chart-panel.tsx @@ -11,6 +11,7 @@ import { ChartPanelLayoutTall } from "@/components/chart-panel-layout-tall"; import { ChartPanelLayoutVertical } from "@/components/chart-panel-layout-vertical"; import { ChartSelectionTabs } from "@/components/chart-selection-tabs"; import { DashboardInteractiveFilters } from "@/components/dashboard-interactive-filters"; +import { DragHandle } from "@/components/drag-handle"; import { Markdown } from "@/components/markdown"; import { ChartConfig, Layout, LayoutDashboard } from "@/config-types"; import { @@ -49,6 +50,7 @@ const useStyles = makeStyles((theme) => ({ height: "100%", }, textBlockWrapper: { + display: "flex", padding: "0.75rem", cursor: ({ editable }) => (editable ? "pointer" : "default"), "&:hover": { @@ -142,13 +144,28 @@ export const ChartPanelLayout = ({ // Important, otherwise ReactGrid breaks. key={block.key} className={classes.textBlockWrapper} - onClick={() => handleTextBlockClick(block)} + onClick={(e) => { + if (e.isPropagationStopped()) { + return; + } + + handleTextBlockClick(block); + }} > - {block.text[locale]} +
+ {block.text[locale]} +
+ {layouting ? ( + { + e.stopPropagation(); + }} + /> + ) : null}
); }, - [classes.textBlockWrapper, handleTextBlockClick, locale] + [classes.textBlockWrapper, handleTextBlockClick, layouting, locale] ); const renderBlock = useCallback( From cfdeb3ef65bc94c7232a26eb04c74bc070f8166d Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 14:43:05 +0100 Subject: [PATCH 053/100] chore: Update translations --- app/components/chart-shared.tsx | 2 +- app/locales/de/messages.po | 22 +++++++++++++++++----- app/locales/en/messages.po | 18 +++++++++++++++--- app/locales/fr/messages.po | 24 ++++++++++++++++++------ app/locales/it/messages.po | 24 ++++++++++++++++++------ 5 files changed, 69 insertions(+), 21 deletions(-) diff --git a/app/components/chart-shared.tsx b/app/components/chart-shared.tsx index 6869d28ff..548a8bcc2 100644 --- a/app/components/chart-shared.tsx +++ b/app/components/chart-shared.tsx @@ -419,7 +419,7 @@ const DownloadPNGImageMenuActionItem = ({ onClick={screenshot} disabled={loading} leadingIconName="download" - label={`${t({ id: "chart-controls.export", message: "Export" })} PNG`} + label={t({ id: "chart-controls.export-png", message: "Export PNG" })} /> ); }; diff --git a/app/locales/de/messages.po b/app/locales/de/messages.po index 67c39dec6..dda1d48a7 100644 --- a/app/locales/de/messages.po +++ b/app/locales/de/messages.po @@ -181,8 +181,8 @@ msgid "chart-controls.edit-tab-label" msgstr "Tab-Titel editieren" #: app/components/chart-shared.tsx -msgid "chart-controls.export" -msgstr "Export" +msgid "chart-controls.export-png" +msgstr "PNG exportieren" #: app/components/dataset-metadata.tsx msgid "chart-controls.sparql-query" @@ -326,6 +326,15 @@ msgstr "Horizontale Achse" msgid "controls.axis.vertical" msgstr "Vertikale Achse" +#: app/configurator/components/field-i18n.ts +msgid "controls.bar.grouped" +msgstr "Gruppiert" + +#: app/configurator/components/field-i18n.ts +msgid "controls.bar.stacked" +msgstr "Gestapelt" + +#: app/charts/chart-config-ui-options.ts #: app/charts/chart-config-ui-options.ts msgid "controls.calculation.disabled-by-grouped" msgstr "Der 100%-Modus kann nicht mit einem gruppierten Layout verwendet werden." @@ -409,11 +418,11 @@ msgstr "Es sind mindestens zwei numerische Messungen erforderlich." #: app/charts/index.ts msgid "controls.chart.disabled.numerical" -msgstr "Es ist mindestens eine numerische Massnahme erforderlich." +msgstr "Es ist mindestens eine numerische Mass erforderlich." #: app/charts/index.ts msgid "controls.chart.disabled.same-unit" -msgstr "Es sind mindestens zwei Zahlenwerte mit gleicher Einheit erforderlich." +msgstr "Es sind mindestens zwei numerische Masse mit der gleichen Einheit erforderlich." #: app/charts/index.ts #: app/charts/index.ts @@ -911,7 +920,7 @@ msgstr "Konfidenzintervall anzeigen" #: app/configurator/components/chart-options-selector.tsx msgid "controls.section.show-confidence-interval.explanation" -msgstr "Zeigen Sie Unsicherheiten an, die sich aus Datenpunkten ergeben, um Konfidenzintervalle darzustellen" +msgstr "Unsicherheiten, die sich aus Datenpunkten ergeben anzeigen, um Konfidenzintervalle darzustellen" #: app/configurator/components/chart-options-selector.tsx msgid "controls.section.show-standard-error" @@ -946,6 +955,7 @@ msgstr "Fügen Sie einen Titel oder eine Beschreibung hinzu" msgid "controls.segment" msgstr "Segmentierung" +#: app/charts/chart-config-ui-options.ts #: app/charts/chart-config-ui-options.ts #: app/charts/chart-config-ui-options.ts msgid "controls.segment.stacked.disabled-by-scale-type" @@ -1557,6 +1567,8 @@ msgid "logo.swiss.confederation" msgstr "Logo der Schweizerischen Eidgenossenschaft" #: app/components/chart-footnotes.tsx +#: app/components/chart-published.tsx +#: app/components/chart-shared.tsx msgid "metadata.link.created.with" msgstr "Erstellt mit" diff --git a/app/locales/en/messages.po b/app/locales/en/messages.po index afd088e9e..26f7fe1f3 100644 --- a/app/locales/en/messages.po +++ b/app/locales/en/messages.po @@ -181,8 +181,8 @@ msgid "chart-controls.edit-tab-label" msgstr "Edit tab label" #: app/components/chart-shared.tsx -msgid "chart-controls.export" -msgstr "Export" +msgid "chart-controls.export-png" +msgstr "Export PNG" #: app/components/dataset-metadata.tsx msgid "chart-controls.sparql-query" @@ -326,6 +326,15 @@ msgstr "Horizontal Axis" msgid "controls.axis.vertical" msgstr "Vertical Axis" +#: app/configurator/components/field-i18n.ts +msgid "controls.bar.grouped" +msgstr "Grouped" + +#: app/configurator/components/field-i18n.ts +msgid "controls.bar.stacked" +msgstr "Stacked" + +#: app/charts/chart-config-ui-options.ts #: app/charts/chart-config-ui-options.ts msgid "controls.calculation.disabled-by-grouped" msgstr "100% mode can't be used with grouped layout." @@ -946,6 +955,7 @@ msgstr "Please add a title or description." msgid "controls.segment" msgstr "Segmentation" +#: app/charts/chart-config-ui-options.ts #: app/charts/chart-config-ui-options.ts #: app/charts/chart-config-ui-options.ts msgid "controls.segment.stacked.disabled-by-scale-type" @@ -1157,7 +1167,7 @@ msgstr "Keywords" #: app/browser/dataset-browse.tsx msgid "dataset-result.dimension-joined-by" -msgstr "Joined by" +msgstr "Contains value of" #: app/browser/dataset-browse.tsx msgid "dataset-result.shared-dimensions" @@ -1557,6 +1567,8 @@ msgid "logo.swiss.confederation" msgstr "Logo of the Swiss Confederation" #: app/components/chart-footnotes.tsx +#: app/components/chart-published.tsx +#: app/components/chart-shared.tsx msgid "metadata.link.created.with" msgstr "Created with" diff --git a/app/locales/fr/messages.po b/app/locales/fr/messages.po index 79e66ac0f..70bb749e3 100644 --- a/app/locales/fr/messages.po +++ b/app/locales/fr/messages.po @@ -181,8 +181,8 @@ msgid "chart-controls.edit-tab-label" msgstr "Modifier le nom de l'onglet" #: app/components/chart-shared.tsx -msgid "chart-controls.export" -msgstr "Exporter" +msgid "chart-controls.export-png" +msgstr "Exporter PNG" #: app/components/dataset-metadata.tsx msgid "chart-controls.sparql-query" @@ -326,6 +326,15 @@ msgstr "Axe horizontal" msgid "controls.axis.vertical" msgstr "Axe vertical" +#: app/configurator/components/field-i18n.ts +msgid "controls.bar.grouped" +msgstr "groupées" + +#: app/configurator/components/field-i18n.ts +msgid "controls.bar.stacked" +msgstr "empilées" + +#: app/charts/chart-config-ui-options.ts #: app/charts/chart-config-ui-options.ts msgid "controls.calculation.disabled-by-grouped" msgstr "Le mode 100% ne peut pas être utilisé avec une mise en page groupée." @@ -911,7 +920,7 @@ msgstr "Afficher l'intervalle de confiance" #: app/configurator/components/chart-options-selector.tsx msgid "controls.section.show-confidence-interval.explanation" -msgstr "Afficher les incertitudes s'étendant des points de données pour représenter les intervalles de confiance" +msgstr "Afficher les incertitudes" #: app/configurator/components/chart-options-selector.tsx msgid "controls.section.show-standard-error" @@ -946,6 +955,7 @@ msgstr "Ajoutez un titre et une description" msgid "controls.segment" msgstr "Segmentation" +#: app/charts/chart-config-ui-options.ts #: app/charts/chart-config-ui-options.ts #: app/charts/chart-config-ui-options.ts msgid "controls.segment.stacked.disabled-by-scale-type" @@ -1157,7 +1167,7 @@ msgstr "Mots clés" #: app/browser/dataset-browse.tsx msgid "dataset-result.dimension-joined-by" -msgstr "Contient des valeurs de" +msgstr "Rejoint via" #: app/browser/dataset-browse.tsx msgid "dataset-result.shared-dimensions" @@ -1492,7 +1502,7 @@ msgstr "Gardez à l'esprit que la suppression de cette visualisation affectera t #: app/login/components/login-menu.tsx msgid "login.profile.feature-request" -msgstr "Requête de fonctionnalité" +msgstr "Demande de fonctionnalité" #: app/login/components/login-menu.tsx msgid "login.profile.feedback" @@ -1557,6 +1567,8 @@ msgid "logo.swiss.confederation" msgstr "Logo de la Confédération Suisse" #: app/components/chart-footnotes.tsx +#: app/components/chart-published.tsx +#: app/components/chart-shared.tsx msgid "metadata.link.created.with" msgstr "Créé avec" @@ -1594,7 +1606,7 @@ msgstr "Supprimer la bordure" #: app/components/publish-actions.tsx msgid "publication.embed.iframe.remove-border.warn" -msgstr "Pour intégrer des visualisations dans des systèmes sans frontière." +msgstr "Pour intégrer des visualisations sans bordure dans des systèmes externes." #: app/components/publish-actions.tsx msgid "publication.embed.iframe.responsive" diff --git a/app/locales/it/messages.po b/app/locales/it/messages.po index f6b40c721..cae30df14 100644 --- a/app/locales/it/messages.po +++ b/app/locales/it/messages.po @@ -181,8 +181,8 @@ msgid "chart-controls.edit-tab-label" msgstr "Modifica l'etichetta della scheda" #: app/components/chart-shared.tsx -msgid "chart-controls.export" -msgstr "Esportare" +msgid "chart-controls.export-png" +msgstr "Esporta PNG" #: app/components/dataset-metadata.tsx msgid "chart-controls.sparql-query" @@ -326,6 +326,15 @@ msgstr "Asse orizzontale" msgid "controls.axis.vertical" msgstr "Asse verticale" +#: app/configurator/components/field-i18n.ts +msgid "controls.bar.grouped" +msgstr "raggruppate" + +#: app/configurator/components/field-i18n.ts +msgid "controls.bar.stacked" +msgstr "impilate" + +#: app/charts/chart-config-ui-options.ts #: app/charts/chart-config-ui-options.ts msgid "controls.calculation.disabled-by-grouped" msgstr "La modalità 100% non può essere utilizzata con un layout raggruppato." @@ -393,11 +402,11 @@ msgstr "Misura dell'asse destro" #: app/charts/index.ts msgid "controls.chart.disabled.categorical" -msgstr "È richiesta almeno una dimensione categoriale." +msgstr "È richiesta almeno una dimensione di tipo categoriale." #: app/charts/index.ts msgid "controls.chart.disabled.different-unit" -msgstr "Sono necessarie almeno due misure numeriche con unità diverse." +msgstr "Sono richieste almeno due misure numeriche con unità diverse." #: app/charts/index.ts msgid "controls.chart.disabled.geographical" @@ -405,7 +414,7 @@ msgstr "È richiesta almeno una dimensione geografica." #: app/charts/index.ts msgid "controls.chart.disabled.multiple-measures" -msgstr "Sono necessarie almeno due misure numeriche." +msgstr "Sono richieste almeno due misure numeriche." #: app/charts/index.ts msgid "controls.chart.disabled.numerical" @@ -911,7 +920,7 @@ msgstr "Mostra intervallo di confidenza" #: app/configurator/components/chart-options-selector.tsx msgid "controls.section.show-confidence-interval.explanation" -msgstr "Mostra le incertezze che si estendono dai punti dati per rappresentare gli intervalli di confidenza" +msgstr "Mostra le incertezze" #: app/configurator/components/chart-options-selector.tsx msgid "controls.section.show-standard-error" @@ -946,6 +955,7 @@ msgstr "Aggiungi un titolo o una descrizione" msgid "controls.segment" msgstr "Segmentazione" +#: app/charts/chart-config-ui-options.ts #: app/charts/chart-config-ui-options.ts #: app/charts/chart-config-ui-options.ts msgid "controls.segment.stacked.disabled-by-scale-type" @@ -1557,6 +1567,8 @@ msgid "logo.swiss.confederation" msgstr "Logo della Confederazione svizzera" #: app/components/chart-footnotes.tsx +#: app/components/chart-published.tsx +#: app/components/chart-shared.tsx msgid "metadata.link.created.with" msgstr "Creato con" From f7e734ed1a7b36ec0d0e9167839aed4ea02f521f Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 16:11:20 +0100 Subject: [PATCH 054/100] refactor: Improve types --- app/config-types.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/app/config-types.ts b/app/config-types.ts index 49e3e3e3f..0654b1cf2 100644 --- a/app/config-types.ts +++ b/app/config-types.ts @@ -1204,6 +1204,7 @@ const ResizeHandle = t.keyof({ const ReactGridLayoutType = t.type({ w: t.number, h: t.number, + minH: t.union([t.number, t.undefined]), x: t.number, y: t.number, i: t.string, From 655578ef5535fd028ebc97e825116e7a6e25d508 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 16:11:49 +0100 Subject: [PATCH 055/100] feat: Improve ChartGridLayout ...so it can work as expected with auto-sizing text blocks. --- app/components/chart-panel-layout-grid.tsx | 17 +++++------------ app/components/react-grid.tsx | 15 +++++++-------- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/app/components/chart-panel-layout-grid.tsx b/app/components/chart-panel-layout-grid.tsx index 4ae98924f..052fc3ce8 100644 --- a/app/components/chart-panel-layout-grid.tsx +++ b/app/components/chart-panel-layout-grid.tsx @@ -1,7 +1,6 @@ import clsx from "clsx"; import { fold } from "fp-ts/lib/Either"; import { pipe } from "fp-ts/lib/function"; -import { useState } from "react"; import { Layouts } from "react-grid-layout"; import { ChartPanelLayoutTypeProps } from "@/components/chart-panel"; @@ -40,15 +39,10 @@ export const ChartPanelLayoutCanvas = ({ }: ChartPanelLayoutTypeProps) => { const [state, dispatch] = useConfiguratorState(hasChartConfigs); const layout = state.layout; - const [layouts, setLayouts] = useState(() => { - assert( - layout.type === "dashboard" && layout.layout === "canvas", - "ChartPanelLayoutGrid should be rendered only for dashboard layout with canvas" - ); - - return layout.layouts; - }); - + assert( + layout.type === "dashboard" && layout.layout === "canvas", + "ChartPanelLayoutGrid should be rendered only for dashboard layout with canvas" + ); const handleChangeLayouts = (layouts: Layouts) => { assert( layout.type === "dashboard" && layout.layout === "canvas", @@ -68,14 +62,13 @@ export const ChartPanelLayoutCanvas = ({ layouts: parsedLayouts, }, }); - setLayouts(layouts); }; return ( handleChangeLayouts(allLayouts)} diff --git a/app/components/react-grid.tsx b/app/components/react-grid.tsx index 0d80b70bf..e328ba675 100644 --- a/app/components/react-grid.tsx +++ b/app/components/react-grid.tsx @@ -15,9 +15,9 @@ import { hasChartConfigs, isLayouting, ReactGridLayoutType, + useConfiguratorState, } from "@/configurator"; import { useTimeout } from "@/hooks/use-timeout"; -import { useConfiguratorState } from "@/src"; import { theme } from "@/themes/federal"; import { assert } from "@/utils/assert"; @@ -53,7 +53,7 @@ export const FREE_CANVAS_BREAKPOINTS = { md: 480, sm: 0, }; -const ROW_HEIGHT = 100; +export const ROW_HEIGHT = 100; const useStyles = makeStyles((theme: Theme) => ({ root: { @@ -69,7 +69,7 @@ const useStyles = makeStyles((theme: Theme) => ({ }, "& .react-grid-item": { transition: "all 200ms ease", - transitionProperty: "left, top, width, height", + transitionProperty: "none", // Customization boxSizing: "border-box", @@ -79,7 +79,7 @@ const useStyles = makeStyles((theme: Theme) => ({ userSelect: "none", }, "& .react-grid-item.cssTransforms": { - transitionProperty: "transform, width, height", + transitionProperty: "none", }, "& .react-grid-item.resizing": { transition: "none", @@ -220,10 +220,10 @@ export const ChartGridLayout = ({ ...rest }: { className: string; - onLayoutChange: Function; resize?: boolean; } & ComponentProps) => { const classes = useStyles(); + const [state, dispatch] = useConfiguratorState(hasChartConfigs); const layout = state.layout; assert( @@ -343,12 +343,11 @@ export const ChartGridLayout = ({ return ( From faf6de3cee948430f1c8d1d41659169fee54a6d4 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 16:12:03 +0100 Subject: [PATCH 056/100] feat: Add initial auto-sizing text blocks logic --- app/components/chart-panel.tsx | 77 ++++++++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 3 deletions(-) diff --git a/app/components/chart-panel.tsx b/app/components/chart-panel.tsx index 81d74e0da..5e09a8634 100644 --- a/app/components/chart-panel.tsx +++ b/app/components/chart-panel.tsx @@ -1,7 +1,15 @@ import { Box, BoxProps, Theme } from "@mui/material"; import { makeStyles } from "@mui/styles"; +import cx from "classnames"; import clsx from "clsx"; -import { forwardRef, HTMLProps, PropsWithChildren, useCallback } from "react"; +import { selectAll } from "d3-selection"; +import { + forwardRef, + HTMLProps, + PropsWithChildren, + useCallback, + useEffect, +} from "react"; import { ChartPanelLayoutCanvas, @@ -13,6 +21,7 @@ import { ChartSelectionTabs } from "@/components/chart-selection-tabs"; import { DashboardInteractiveFilters } from "@/components/dashboard-interactive-filters"; import { DragHandle } from "@/components/drag-handle"; import { Markdown } from "@/components/markdown"; +import { ROW_HEIGHT } from "@/components/react-grid"; import { ChartConfig, Layout, LayoutDashboard } from "@/config-types"; import { hasChartConfigs, @@ -21,6 +30,7 @@ import { LayoutTextBlock, } from "@/configurator"; import { useConfiguratorState, useLocale } from "@/src"; +import { assert } from "@/utils/assert"; import useEvent from "@/utils/use-event"; const useStyles = makeStyles((theme) => ({ @@ -114,6 +124,9 @@ const Wrappers: Record< canvas: ChartPanelLayoutCanvas, }; +const TEXT_BLOCK_WRAPPER_CLASS = "text-block-wrapper"; +const TEXT_BLOCK_CONTENT_CLASS = "text-block-content"; + export const ChartPanelLayout = ({ children, renderChart, @@ -143,7 +156,8 @@ export const ChartPanelLayout = ({
{ if (e.isPropagationStopped()) { return; @@ -152,7 +166,10 @@ export const ChartPanelLayout = ({ handleTextBlockClick(block); }} > -
+
{block.text[locale]}
{layouting ? ( @@ -168,6 +185,8 @@ export const ChartPanelLayout = ({ [classes.textBlockWrapper, handleTextBlockClick, layouting, locale] ); + useSyncTextBlockHeight(); + const renderBlock = useCallback( (block: LayoutBlock) => { switch (block.type) { @@ -198,3 +217,55 @@ export const ChartPanelLayout = ({
); }; + +const useSyncTextBlockHeight = () => { + const [state, dispatch] = useConfiguratorState(hasChartConfigs); + const layout = state.layout; + const layouting = isLayouting(state); + + useEffect(() => { + // Only adjust the height when not in published mode. + if (!layouting) { + return; + } + + assert( + layout.type === "dashboard" && layout.layout === "canvas", + "useSyncTextBlockHeight can only be used with free canvas layout" + ); + + selectAll(`.${TEXT_BLOCK_WRAPPER_CLASS}`).each( + function () { + const wrapperEl = this; + const contentEl = wrapperEl.querySelector( + `.${TEXT_BLOCK_CONTENT_CLASS}` + ); + + if (!contentEl) { + return; + } + + const key = wrapperEl.id; + const h = Math.ceil(contentEl.clientHeight / ROW_HEIGHT) || 1; + // TODO: how to get current layout? + const bp = "xl"; + const blockLayout = layout.layouts[bp].find((b) => b.i === key); + + if (blockLayout && blockLayout.minH !== h) { + dispatch({ + type: "LAYOUT_CHANGED", + value: { + ...layout, + layouts: { + ...layout.layouts, + [bp]: layout.layouts[bp].map((b) => { + return b.i === key ? { ...b, h, minH: h } : b; + }), + }, + }, + }); + } + } + ); + }, [dispatch, layout, layouting]); +}; From 1b4e6789080b736e4bdf491b6108e390de9735c8 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 16:19:10 +0100 Subject: [PATCH 057/100] fix: Types --- app/components/react-grid.tsx | 7 ++++++- app/configurator/configurator-state/reducer.tsx | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/components/react-grid.tsx b/app/components/react-grid.tsx index e328ba675..90cc8a62e 100644 --- a/app/components/react-grid.tsx +++ b/app/components/react-grid.tsx @@ -41,7 +41,7 @@ export const availableHandles: ResizeHandle[] = [ const MAX_H = 10; const INITIAL_H = 7; -const MIN_H = 1; +export const MIN_H = 1; /** In grid unit */ const MAX_W = 4; @@ -381,6 +381,7 @@ export const generateLayout = function ({ y: i * h, w: maxWidth, h, + minH: MIN_H, i: i.toString(), resizeHandles, }; @@ -392,6 +393,7 @@ export const generateLayout = function ({ y: 0, w: w, h: maxHeight, + minH: MIN_H, i: i.toString(), resizeHandles, }; @@ -403,6 +405,7 @@ export const generateLayout = function ({ y: i === 0 ? 0 : h * (i - 1), w: maxWidth / 2, h: i === 0 ? maxHeight : h, + minH: MIN_H, i: i.toString(), resizeHandles, }; @@ -413,6 +416,7 @@ export const generateLayout = function ({ y: Math.floor(i / 2) * INITIAL_H, w: getInitialTileWidth(), h: getInitialTileHeight(), + minH: MIN_H, i: i.toString(), resizeHandles: [], }; @@ -424,6 +428,7 @@ export const generateLayout = function ({ y: i === 0 ? 0 : maxHeight / 2, w: i === 0 ? maxWidth : w, h: maxHeight / 2, + minH: MIN_H, i: i.toString(), resizeHandles, }; diff --git a/app/configurator/configurator-state/reducer.tsx b/app/configurator/configurator-state/reducer.tsx index a3d43629c..0cab2e60a 100644 --- a/app/configurator/configurator-state/reducer.tsx +++ b/app/configurator/configurator-state/reducer.tsx @@ -24,6 +24,7 @@ import { FREE_CANVAS_BREAKPOINTS, getInitialTileHeight, getInitialTileWidth, + MIN_H, } from "@/components/react-grid"; import { ChartConfig, @@ -1206,6 +1207,7 @@ export function ensureDashboardLayoutIsCorrect( y: chartY, w: chartW, h: chartH, + minH: MIN_H, // Is initialized later resizeHandles: [], }); From f785c91c838944adb1f2ddd128b0e55e6a1511e5 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 16:27:15 +0100 Subject: [PATCH 058/100] chore: Update ts-jest --- app/package.json | 2 +- package.json | 2 +- yarn.lock | 96 ++++++++++++++++++++---------------------------- 3 files changed, 41 insertions(+), 59 deletions(-) diff --git a/app/package.json b/app/package.json index c35f0bfb6..ceec680a8 100644 --- a/app/package.json +++ b/app/package.json @@ -193,6 +193,6 @@ "jest": "^27.3.0", "playwright-testing-library": "^4.5.0", "prettier": "^3.2.5", - "ts-jest": "^27.0.7" + "ts-jest": "^29.2.5" } } diff --git a/package.json b/package.json index cd1614ca6..5832c40bd 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "next": "^13.5.2", "react": "^18.2.0", "react-dom": "^18.2.0", - "ts-jest": "^29.1.2", + "ts-jest": "^29.2.5", "ts-node": "^10.9.2" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 28a7d2299..adec16a6c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11871,9 +11871,9 @@ browserslist@^4.24.0: node-releases "^2.0.18" update-browserslist-db "^1.1.1" -bs-logger@0.x: +bs-logger@^0.2.6: version "0.2.6" - resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== dependencies: fast-json-stable-stringify "2.x" @@ -18308,7 +18308,7 @@ jest-snapshot@^27.3.0: pretty-format "^27.3.0" semver "^7.3.2" -jest-util@^27.0.0, jest-util@^27.3.0: +jest-util@^27.3.0: version "27.3.0" resolved "https://registry.npmjs.org/jest-util/-/jest-util-27.3.0.tgz" integrity sha512-SFSDBGKkxXi4jClmU1WLp/cMMlb4YX6+5Lb0CUySxmonArio8yJ2NALMWvQuXchgySiH7Rb912hVZ2QZ6t3x7w== @@ -18597,13 +18597,6 @@ json-to-pretty-yaml@^1.2.2: remedial "^1.0.7" remove-trailing-spaces "^1.0.6" -json5@2.x, json5@^2.1.2: - version "2.2.0" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -18616,6 +18609,13 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" @@ -19225,10 +19225,10 @@ lodash.isundefined@^3.0.1: resolved "https://registry.yarnpkg.com/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz#23ef3d9535565203a66cefd5b830f848911afb48" integrity sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g= -lodash.memoize@4.x: +lodash.memoize@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== lodash.merge@^4.6.2: version "4.6.2" @@ -19452,9 +19452,9 @@ make-dir@^3.0.0, make-dir@^3.0.2: dependencies: semver "^6.0.0" -make-error@1.x, make-error@^1, make-error@^1.1.1: +make-error@^1, make-error@^1.1.1, make-error@^1.3.6: version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== make-plural@6.2.2, make-plural@^6.2.2: @@ -23651,13 +23651,6 @@ semver-compare@^1.0.0: resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.x, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" @@ -23675,6 +23668,13 @@ semver@^7.2.1: dependencies: lru-cache "^6.0.0" +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" @@ -23682,11 +23682,6 @@ semver@^7.3.7: dependencies: lru-cache "^6.0.0" -semver@^7.5.3: - version "7.6.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" - integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== - semver@^7.5.4, semver@^7.6.0: version "7.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" @@ -23694,6 +23689,11 @@ semver@^7.5.4, semver@^7.6.0: dependencies: lru-cache "^6.0.0" +semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + semver@~2.3.1: version "2.3.2" resolved "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz" @@ -25196,33 +25196,20 @@ ts-invariant@^0.7.0: dependencies: tslib "^2.1.0" -ts-jest@^27.0.7: - version "27.0.7" - resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.7.tgz" - integrity sha512-O41shibMqzdafpuP+CkrOL7ykbmLh+FqQrXEmV9CydQ5JBk0Sj0uAEF5TNNe94fZWKm3yYvWa/IbyV4Yg1zK2Q== +ts-jest@^29.2.5: + version "29.2.5" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.2.5.tgz#591a3c108e1f5ebd013d3152142cb5472b399d63" + integrity sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA== dependencies: - bs-logger "0.x" - fast-json-stable-stringify "2.x" - jest-util "^27.0.0" - json5 "2.x" - lodash.memoize "4.x" - make-error "1.x" - semver "7.x" - yargs-parser "20.x" - -ts-jest@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.2.tgz#7613d8c81c43c8cb312c6904027257e814c40e09" - integrity sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g== - dependencies: - bs-logger "0.x" - fast-json-stable-stringify "2.x" + bs-logger "^0.2.6" + ejs "^3.1.10" + fast-json-stable-stringify "^2.1.0" jest-util "^29.0.0" json5 "^2.2.3" - lodash.memoize "4.x" - make-error "1.x" - semver "^7.5.3" - yargs-parser "^21.0.1" + lodash.memoize "^4.1.2" + make-error "^1.3.6" + semver "^7.6.3" + yargs-parser "^21.1.1" ts-log@^2.2.3: version "2.2.3" @@ -26628,11 +26615,6 @@ yaml@^2.0.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== -yargs-parser@20.x: - version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - yargs-parser@^18.1.2, yargs-parser@^18.1.3: version "18.1.3" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" @@ -26646,7 +26628,7 @@ yargs-parser@^20.2.2: resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz" integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== -yargs-parser@^21.0.1: +yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== From dac1c163c3bcb469e2637ed1f6fac8b4a38445ba Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 16:30:36 +0100 Subject: [PATCH 059/100] fix: Mocking Markdown packages in tests --- app/jest.setup.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/app/jest.setup.ts b/app/jest.setup.ts index 2c9c0156a..5746de2a3 100644 --- a/app/jest.setup.ts +++ b/app/jest.setup.ts @@ -9,6 +9,27 @@ import * as ns from "@/rdf/namespace"; import { GRAPHQL_ENDPOINT } from "./domain/env"; +jest.mock("react-markdown", () => { + return { + ReactMarkdown: () => null, + }; +}); +jest.mock("rehype-raw", () => { + return { + rehypeRaw: () => null, + }; +}); +jest.mock("rehype-sanitize", () => { + return { + rehypeSanitize: () => null, + }; +}); +jest.mock("remark-gfm", () => { + return { + remarkGfm: () => null, + }; +}); + // @ts-ignore Ignoring cannot be compiled as isolated module warning. It's working. jest.mock("@lingui/macro", () => { return { From 57712ab7cab433758a4d67818c60cf7fd9a402b6 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 16:38:03 +0100 Subject: [PATCH 060/100] fix: Condition --- app/components/chart-panel.tsx | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/app/components/chart-panel.tsx b/app/components/chart-panel.tsx index 5e09a8634..9aa712478 100644 --- a/app/components/chart-panel.tsx +++ b/app/components/chart-panel.tsx @@ -30,7 +30,6 @@ import { LayoutTextBlock, } from "@/configurator"; import { useConfiguratorState, useLocale } from "@/src"; -import { assert } from "@/utils/assert"; import useEvent from "@/utils/use-event"; const useStyles = makeStyles((theme) => ({ @@ -225,15 +224,14 @@ const useSyncTextBlockHeight = () => { useEffect(() => { // Only adjust the height when not in published mode. - if (!layouting) { + if ( + !layouting || + layout.type !== "dashboard" || + layout.layout !== "canvas" + ) { return; } - assert( - layout.type === "dashboard" && layout.layout === "canvas", - "useSyncTextBlockHeight can only be used with free canvas layout" - ); - selectAll(`.${TEXT_BLOCK_WRAPPER_CLASS}`).each( function () { const wrapperEl = this; From a5fb4144c516d178e6383c5336a9c98230388dfb Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 17:00:09 +0100 Subject: [PATCH 061/100] refactor: Names --- app/components/chart-panel-layout-tall.tsx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/app/components/chart-panel-layout-tall.tsx b/app/components/chart-panel-layout-tall.tsx index 48731c76c..b8c61cb5c 100644 --- a/app/components/chart-panel-layout-tall.tsx +++ b/app/components/chart-panel-layout-tall.tsx @@ -32,13 +32,11 @@ const ChartPanelLayoutTallRow = ({ row }: { row: ChartPanelLayoutTallRow }) => { return row.renderBlock(row.block); case "narrow": if (isMobile) { - return <>{row.chartConfigs.map(row.renderBlock)}; + return <>{row.blocks.map(row.renderBlock)}; } return ( - - {row.chartConfigs.map(row.renderBlock)} - + {row.blocks.map(row.renderBlock)} ); } }; @@ -51,7 +49,7 @@ type ChartPanelLayoutTallRow = { } | { type: "narrow"; - chartConfigs: [LayoutBlock] | [LayoutBlock, LayoutBlock]; + blocks: [LayoutBlock] | [LayoutBlock, LayoutBlock]; } ); @@ -75,7 +73,7 @@ export const getChartPanelLayoutTallRows = ({ const nextBlock = blocks[i + 1]; rows.push({ type: "narrow", - chartConfigs: nextBlock ? [block, nextBlock] : [block], + blocks: nextBlock ? [block, nextBlock] : [block], renderBlock, }); } From 3774801a0add69afc07d30de301570aa5408323e Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 17:06:12 +0100 Subject: [PATCH 062/100] chore: Add translations --- app/configurator/components/block-options-selector.tsx | 7 ++++++- app/locales/de/messages.po | 4 ++++ app/locales/en/messages.po | 4 ++++ app/locales/fr/messages.po | 4 ++++ app/locales/it/messages.po | 4 ++++ 5 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/configurator/components/block-options-selector.tsx b/app/configurator/components/block-options-selector.tsx index c3899ab0b..2d7492a23 100644 --- a/app/configurator/components/block-options-selector.tsx +++ b/app/configurator/components/block-options-selector.tsx @@ -1,3 +1,4 @@ +import { Trans } from "@lingui/macro"; import { Button, Typography } from "@mui/material"; import { useMemo } from "react"; @@ -49,7 +50,11 @@ export const LayoutBlocksSelector = () => { tabIndex={-1} > - Text object + + + Text object + + {orderedLocales.map((locale) => ( diff --git a/app/locales/de/messages.po b/app/locales/de/messages.po index dda1d48a7..ca449432b 100644 --- a/app/locales/de/messages.po +++ b/app/locales/de/messages.po @@ -837,6 +837,10 @@ msgstr "Objekt hinzufügen" msgid "controls.section.block-options.block-add.text" msgstr "Text" +#: app/configurator/components/block-options-selector.tsx +msgid "controls.section.block-options.block.text" +msgstr "Textobjekt" + #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" msgstr "Diagramm-Einstellungen" diff --git a/app/locales/en/messages.po b/app/locales/en/messages.po index 26f7fe1f3..1129f9222 100644 --- a/app/locales/en/messages.po +++ b/app/locales/en/messages.po @@ -837,6 +837,10 @@ msgstr "Add object" msgid "controls.section.block-options.block-add.text" msgstr "Text" +#: app/configurator/components/block-options-selector.tsx +msgid "controls.section.block-options.block.text" +msgstr "Text object" + #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" msgstr "Chart Options" diff --git a/app/locales/fr/messages.po b/app/locales/fr/messages.po index 70bb749e3..087d0a487 100644 --- a/app/locales/fr/messages.po +++ b/app/locales/fr/messages.po @@ -837,6 +837,10 @@ msgstr "Ajouter un objet" msgid "controls.section.block-options.block-add.text" msgstr "Texte" +#: app/configurator/components/block-options-selector.tsx +msgid "controls.section.block-options.block.text" +msgstr "Objet texte" + #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" msgstr "Paramètres graphiques" diff --git a/app/locales/it/messages.po b/app/locales/it/messages.po index cae30df14..3a96a26bb 100644 --- a/app/locales/it/messages.po +++ b/app/locales/it/messages.po @@ -837,6 +837,10 @@ msgstr "Aggiungi oggetto" msgid "controls.section.block-options.block-add.text" msgstr "Testo" +#: app/configurator/components/block-options-selector.tsx +msgid "controls.section.block-options.block.text" +msgstr "Oggetto di testo" + #: app/configurator/components/chart-configurator.tsx msgid "controls.section.chart.options" msgstr "Opzioni del grafico" From 339ae7feb4e24054eca8c46cef9cceec88eebc34 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 16 Dec 2024 17:16:53 +0100 Subject: [PATCH 063/100] chore: Comments --- app/components/markdown.tsx | 1 + app/configurator/components/layout-configurator.tsx | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/components/markdown.tsx b/app/components/markdown.tsx index 25d63bd5c..711aa32fc 100644 --- a/app/components/markdown.tsx +++ b/app/components/markdown.tsx @@ -5,6 +5,7 @@ import rehypeSanitize from "rehype-sanitize"; import remarkGfm from "remark-gfm"; const components: ComponentProps["components"] = { + // TODO: Maybe can be handled by Title and Description components? h1: ({ children }) =>

{children}

, h2: ({ children }) =>

{children}

, h3: ({ children }) =>

{children}

, diff --git a/app/configurator/components/layout-configurator.tsx b/app/configurator/components/layout-configurator.tsx index 1e2c0c324..0c175d4a4 100644 --- a/app/configurator/components/layout-configurator.tsx +++ b/app/configurator/components/layout-configurator.tsx @@ -579,7 +579,7 @@ const LayoutBlocksConfigurator = () => { .map((block) => ( Date: Mon, 13 Jan 2025 09:13:17 +0100 Subject: [PATCH 064/100] chore: yarn.lock --- yarn.lock | 84 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 67 insertions(+), 17 deletions(-) diff --git a/yarn.lock b/yarn.lock index 762067d37..652e4e675 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9681,12 +9681,7 @@ "@typescript-eslint/types" "8.19.1" eslint-visitor-keys "^4.2.0" -"@ungap/structured-clone@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.1.tgz#28fa185f67daaf7b7a1a8c1d445132c5d979f8bd" - integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA== - -"@ungap/structured-clone@^1.0.0": +"@ungap/structured-clone@^1.0.0", "@ungap/structured-clone@^1.2.0": version "1.2.1" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.1.tgz#28fa185f67daaf7b7a1a8c1d445132c5d979f8bd" integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA== @@ -11672,6 +11667,11 @@ ccount@^1.0.0: resolved "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz" integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + chai@^4.3.10: version "4.4.1" resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" @@ -12243,6 +12243,11 @@ comma-separated-tokens@^1.0.0: resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz" integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + commander@*, commander@7, commander@^7.2.0: version "7.2.0" resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" @@ -12806,6 +12811,11 @@ csstype@^3.0.2: resolved "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz" integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== +csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + "d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5" @@ -21571,7 +21581,7 @@ prettier@^2.8.0: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -prettier@^3.4.2: +prettier@^3.2.5, prettier@^3.4.2: version "3.4.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== @@ -22348,6 +22358,16 @@ react-transition-group@^4.4.2: loose-envify "^1.4.0" prop-types "^15.6.2" +react-transition-group@^4.4.5: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + react-virtualized-auto-sizer@^1.0.25: version "1.0.25" resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.25.tgz#b13cbc528ac200be2bd1ffa40c8bb19bcc60ac3f" @@ -22677,6 +22697,23 @@ rehackt@^0.1.0: resolved "https://registry.yarnpkg.com/rehackt/-/rehackt-0.1.0.tgz#a7c5e289c87345f70da8728a7eb878e5d03c696b" integrity sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw== +rehype-raw@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-7.0.0.tgz#59d7348fd5dbef3807bbaa1d443efd2dd85ecee4" + integrity sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww== + dependencies: + "@types/hast" "^3.0.0" + hast-util-raw "^9.0.0" + vfile "^6.0.0" + +rehype-sanitize@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/rehype-sanitize/-/rehype-sanitize-6.0.0.tgz#16e95f4a67a69cbf0f79e113c8e0df48203db73c" + integrity sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg== + dependencies: + "@types/hast" "^3.0.0" + hast-util-sanitize "^5.0.0" + relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" @@ -23318,6 +23355,11 @@ semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" @@ -23332,11 +23374,6 @@ semver@^7.5.4, semver@^7.6.0: dependencies: lru-cache "^6.0.0" -semver@^7.6.3: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - semver@~2.3.1: version "2.3.2" resolved "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz" @@ -24876,6 +24913,11 @@ trough@^1.0.0: resolved "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz" integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== +trough@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== + ts-api-utils@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.0.0.tgz#b9d7d5f7ec9f736f4d0f09758b8607979044a900" @@ -25792,6 +25834,14 @@ vfile@^4.0.0: unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" +vfile@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" + integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== + dependencies: + "@types/unist" "^3.0.0" + vfile-message "^4.0.0" + vm-browserify@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" @@ -26356,11 +26406,6 @@ yaml@^1.10.0, yaml@^1.7.2: resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@20.x, yargs-parser@^20.2.7: - version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - yargs-parser@^18.1.2, yargs-parser@^18.1.3: version "18.1.3" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" @@ -26374,6 +26419,11 @@ yargs-parser@^20.2.2: resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz" integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== +yargs-parser@^20.2.7: + version "20.2.9" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" From bea97eef9dad6f9325fbf9270aa0fbf3d55a6fab Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 13 Jan 2025 10:40:23 +0100 Subject: [PATCH 065/100] chore: Downgrade TS --- app/components/chart-panel-layout-tall.tsx | 2 +- app/themes/federal.tsx | 3 --- app/themes/index.ts | 1 - package.json | 2 +- yarn.lock | 13 ++++--------- 5 files changed, 6 insertions(+), 15 deletions(-) diff --git a/app/components/chart-panel-layout-tall.tsx b/app/components/chart-panel-layout-tall.tsx index b8c61cb5c..c4f1ba2bd 100644 --- a/app/components/chart-panel-layout-tall.tsx +++ b/app/components/chart-panel-layout-tall.tsx @@ -53,7 +53,7 @@ type ChartPanelLayoutTallRow = { } ); -export const getChartPanelLayoutTallRows = ({ +const getChartPanelLayoutTallRows = ({ blocks, renderBlock, }: ChartPanelLayoutTypeProps): ChartPanelLayoutTallRow[] => { diff --git a/app/themes/federal.tsx b/app/themes/federal.tsx index 0e3220ebc..a94a32f32 100644 --- a/app/themes/federal.tsx +++ b/app/themes/federal.tsx @@ -36,7 +36,6 @@ export const theme = createTheme({ primary: { light: "#d8e8ef", main: "#006699", - // @ts-expect-error it works hover: "#004B70", active: "#00334D", disabled: "#599cbd", @@ -47,7 +46,6 @@ export const theme = createTheme({ }, secondary: { main: "#757575", - // @ts-expect-error it works hover: "#616161", active: "#4F4F4F", disabled: "#A5A5A5", @@ -55,7 +53,6 @@ export const theme = createTheme({ success: { main: "#3c763d", light: "#DFF0D8", - // @ts-expect-error it works hover: "#3c763d", active: "#3c763d", disabled: "#DFF0D8", diff --git a/app/themes/index.ts b/app/themes/index.ts index 45fe1dd81..248d41d52 100644 --- a/app/themes/index.ts +++ b/app/themes/index.ts @@ -8,7 +8,6 @@ declare module "@mui/material" { } declare module "@mui/material" { - // @ts-expect-error it works interface PaletteColorOptions { light?: string; main: string; diff --git a/package.json b/package.json index 1eda71739..f8e9c805d 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "rollup-plugin-terser": "^7.0.2", "storybook": "^7.6.17", "tsx": "^4.19.2", - "typescript": "5.7.2" + "typescript": "4" }, "workspaces": [ ".", diff --git a/yarn.lock b/yarn.lock index 652e4e675..dd9ddadec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25259,21 +25259,16 @@ typescript-lru-cache@^2.0.0: resolved "https://registry.yarnpkg.com/typescript-lru-cache/-/typescript-lru-cache-2.0.0.tgz#d4ad0f071ab51987b088a57c3c502d7dd62dee07" integrity sha512-Jp57Qyy8wXeMkdNuZiglE6v2Cypg13eDA1chHwDG6kq51X7gk4K7P7HaDdzZKCxkegXkVHNcPD0n5aW6OZH3aA== -typescript@5.7.2: - version "5.7.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.2.tgz#3169cf8c4c8a828cde53ba9ecb3d2b1d5dd67be6" - integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== +typescript@4, typescript@^4.0.0, typescript@^4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== typescript@^3.9.10, typescript@^3.9.7: version "3.9.10" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== -typescript@^4.0.0, typescript@^4.9.5: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - typewise-core@^1.2, typewise-core@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195" From ccd8edc8f7673b7868d2a8a7fc70d35d78dee46a Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 13 Jan 2025 10:43:20 +0100 Subject: [PATCH 066/100] chore: Remove not needed --- app/components/chart-panel.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/components/chart-panel.tsx b/app/components/chart-panel.tsx index 9aa712478..87f135f2e 100644 --- a/app/components/chart-panel.tsx +++ b/app/components/chart-panel.tsx @@ -1,6 +1,5 @@ import { Box, BoxProps, Theme } from "@mui/material"; import { makeStyles } from "@mui/styles"; -import cx from "classnames"; import clsx from "clsx"; import { selectAll } from "d3-selection"; import { @@ -156,7 +155,7 @@ export const ChartPanelLayout = ({ // Important, otherwise ReactGrid breaks. key={block.key} id={block.key} - className={cx(classes.textBlockWrapper, TEXT_BLOCK_WRAPPER_CLASS)} + className={clsx(classes.textBlockWrapper, TEXT_BLOCK_WRAPPER_CLASS)} onClick={(e) => { if (e.isPropagationStopped()) { return; From 9bb1efa61462487f124a819ec7c316decb7bbe94 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 13 Jan 2025 11:03:43 +0100 Subject: [PATCH 067/100] chore: Downgrade MUI ...as e2e tests fail with the new version. --- app/package.json | 6 +- yarn.lock | 186 +++++++++++++++++++++-------------------------- 2 files changed, 87 insertions(+), 105 deletions(-) diff --git a/app/package.json b/app/package.json index 17b136866..1e5790c2b 100644 --- a/app/package.json +++ b/app/package.json @@ -29,9 +29,9 @@ "@mapbox/mapbox-gl-supported": "^2.0.1", "@mdx-js/react": "^1.6.22", "@mui/lab": "^5.0.0-alpha.74", - "@mui/material": "^6.2.0", - "@mui/styles": "6.2.0", - "@mui/utils": "^6.2.0", + "@mui/material": "^5.5.2", + "@mui/styles": "^5.5.2", + "@mui/utils": "^5.5.2", "@next/bundle-analyzer": "^11.0.1", "@next/mdx": "^11.0.1", "@preconstruct/next": "^3.0.1", diff --git a/yarn.lock b/yarn.lock index dd9ddadec..8d16ebec5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2523,6 +2523,13 @@ dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.23.9": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" + integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/runtime@^7.24.4": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.5.tgz#230946857c053a36ccc66e1dd03b17dd0c4ed02c" @@ -2530,13 +2537,6 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" - integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== - dependencies: - regenerator-runtime "^0.14.0" - "@babel/standalone@^7.11.6": version "7.14.6" resolved "https://registry.npmjs.org/@babel/standalone/-/standalone-7.14.6.tgz" @@ -2998,7 +2998,7 @@ resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz" integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== -"@emotion/hash@^0.9.2": +"@emotion/hash@^0.9.1": version "0.9.2" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== @@ -3067,17 +3067,6 @@ "@emotion/utils" "^1.0.0" csstype "^3.0.2" -"@emotion/serialize@^1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.3.tgz#d291531005f17d704d0463a032fe679f376509e8" - integrity sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA== - dependencies: - "@emotion/hash" "^0.9.2" - "@emotion/memoize" "^0.9.0" - "@emotion/unitless" "^0.10.0" - "@emotion/utils" "^1.4.2" - csstype "^3.0.2" - "@emotion/sheet@0.9.4": version "0.9.4" resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz" @@ -3114,11 +3103,6 @@ resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== -"@emotion/unitless@^0.10.0": - version "0.10.0" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745" - integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg== - "@emotion/use-insertion-effect-with-fallbacks@^1.0.0", "@emotion/use-insertion-effect-with-fallbacks@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963" @@ -5190,10 +5174,10 @@ prop-types "^15.7.2" react-is "^17.0.2" -"@mui/core-downloads-tracker@^6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-6.2.0.tgz#52953b858eaf3204ac505bf0329528fd3130c775" - integrity sha512-Nn5PSkUqbDrvezpiiiYZiAbX4SFEiy3CbikUL6pWOXEUsq+L1j50OOyyUIHpaX2Hr+5V5UxTh+fPeC4nsGNhdw== +"@mui/core-downloads-tracker@^5.16.14": + version "5.16.14" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.14.tgz#e6536f1b6caa873f7915fbf9703fdc840a5a98d9" + integrity sha512-sbjXW+BBSvmzn61XyTMun899E7nGPTXwqD9drm1jBUAvWEhJpPFIRxwQQiATWZnd9rvdxtnhhdsDxEGWI0jxqA== "@mui/lab@^5.0.0-alpha.74": version "5.0.0-alpha.74" @@ -5214,24 +5198,33 @@ react-transition-group "^4.4.2" rifm "^0.12.1" -"@mui/material@^6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-6.2.0.tgz#e649438c3de3d26c8e79845711572a4ae34125bb" - integrity sha512-7FXXUPIyYzP02a7GvqwJ7ocmdP+FkvLvmy/uxG1TDmTlsr8nEClQp75uxiVznJqAY/jJy4d+Rj/fNWNxwidrYQ== - dependencies: - "@babel/runtime" "^7.26.0" - "@mui/core-downloads-tracker" "^6.2.0" - "@mui/system" "^6.2.0" - "@mui/types" "^7.2.19" - "@mui/utils" "^6.2.0" +"@mui/material@^5.5.2": + version "5.16.14" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.16.14.tgz#da8a75822f039d8c1b0ab7fb4146d767c2f9248a" + integrity sha512-eSXQVCMKU2xc7EcTxe/X/rC9QsV2jUe8eLM3MUCPYbo6V52eCE436akRIvELq/AqZpxx2bwkq7HC0cRhLB+yaw== + dependencies: + "@babel/runtime" "^7.23.9" + "@mui/core-downloads-tracker" "^5.16.14" + "@mui/system" "^5.16.14" + "@mui/types" "^7.2.15" + "@mui/utils" "^5.16.14" "@popperjs/core" "^2.11.8" - "@types/react-transition-group" "^4.4.11" - clsx "^2.1.1" + "@types/react-transition-group" "^4.4.10" + clsx "^2.1.0" csstype "^3.1.3" prop-types "^15.8.1" react-is "^19.0.0" react-transition-group "^4.4.5" +"@mui/private-theming@^5.16.14": + version "5.16.14" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.16.14.tgz#7ad2b8a8fe0417f9fdfd05011806b9cb33c1a20a" + integrity sha512-12t7NKzvYi819IO5IapW2BcR33wP/KAVrU8d7gLhGHoAmhDxyXlRoKiRij3TOD8+uzk0B6R9wHUNKi4baJcRNg== + dependencies: + "@babel/runtime" "^7.23.9" + "@mui/utils" "^5.16.14" + prop-types "^15.8.1" + "@mui/private-theming@^5.4.4": version "5.4.4" resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.4.4.tgz#cc2b2d897888ce5d1c319adfa2c50c0063a649ab" @@ -5241,13 +5234,14 @@ "@mui/utils" "^5.4.4" prop-types "^15.7.2" -"@mui/private-theming@^6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-6.2.0.tgz#b94a7c5726b7337cfad1800bfd5927cf2af4b131" - integrity sha512-lYd2MrVddhentF1d/cMXKnwlDjr/shbO3A2eGq22PCYUoZaqtAGZMc0U86KnJ/Sh5YzNYePqTOaaowAN8Qea8A== +"@mui/styled-engine@^5.16.14": + version "5.16.14" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.16.14.tgz#f90fef5b4f8ebf11d48e1b1df8854a45bb31a9f5" + integrity sha512-UAiMPZABZ7p8mUW4akDV6O7N3+4DatStpXMZwPlt+H/dA0lt67qawN021MNND+4QTpjaiMYxbhKZeQcyWCbuKw== dependencies: - "@babel/runtime" "^7.26.0" - "@mui/utils" "^6.2.0" + "@babel/runtime" "^7.23.9" + "@emotion/cache" "^11.13.5" + csstype "^3.1.3" prop-types "^15.8.1" "@mui/styled-engine@^5.5.2": @@ -5259,29 +5253,17 @@ "@emotion/cache" "^11.7.1" prop-types "^15.7.2" -"@mui/styled-engine@^6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-6.2.0.tgz#f0d4450b86ee4f39906b51d1439710b754269d3f" - integrity sha512-rV4YCu6kcCjMnHFXU/tQcL6XfYVfFVR8n3ZVNGnk2rpXnt/ctOPJsF+eUQuhkHciueLVKpI06+umr1FxWWhVmQ== - dependencies: - "@babel/runtime" "^7.26.0" - "@emotion/cache" "^11.13.5" - "@emotion/serialize" "^1.3.3" - "@emotion/sheet" "^1.4.0" - csstype "^3.1.3" - prop-types "^15.8.1" - -"@mui/styles@6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-6.2.0.tgz#a24cabf0b3084f35967bb0cea7a0bd68b6553bf0" - integrity sha512-/fBb08Enfui8NGxbFgoZsJcHFdxFq1gwuzjr9Jwtw3++AMAC3Q7h36xToC52KiZta15lbj3r1Hk+mJC16IOKnw== - dependencies: - "@babel/runtime" "^7.26.0" - "@emotion/hash" "^0.9.2" - "@mui/private-theming" "^6.2.0" - "@mui/types" "^7.2.19" - "@mui/utils" "^6.2.0" - clsx "^2.1.1" +"@mui/styles@^5.5.2": + version "5.16.14" + resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-5.16.14.tgz#a9482d0287ae83636c146817ba99f7dde6fcdaca" + integrity sha512-J3iE718GbU06mnD9qu57/Fx+TosuBlhzs8nk1Q87QRQ76xo6qzLc3ek9n3dUPourGXWVenTxv1YX8lTOAnbHBA== + dependencies: + "@babel/runtime" "^7.23.9" + "@emotion/hash" "^0.9.1" + "@mui/private-theming" "^5.16.14" + "@mui/types" "^7.2.15" + "@mui/utils" "^5.16.14" + clsx "^2.1.0" csstype "^3.1.3" hoist-non-react-statics "^3.3.2" jss "^10.10.0" @@ -5294,6 +5276,20 @@ jss-plugin-vendor-prefixer "^10.10.0" prop-types "^15.8.1" +"@mui/system@^5.16.14": + version "5.16.14" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.16.14.tgz#92765ba01a3d1f8ee4967248cb00077d7aed225b" + integrity sha512-KBxMwCb8mSIABnKvoGbvM33XHyT+sN0BzEBG+rsSc0lLQGzs7127KWkCA6/H8h6LZ00XpBEME5MAj8mZLiQ1tw== + dependencies: + "@babel/runtime" "^7.23.9" + "@mui/private-theming" "^5.16.14" + "@mui/styled-engine" "^5.16.14" + "@mui/types" "^7.2.15" + "@mui/utils" "^5.16.14" + clsx "^2.1.0" + csstype "^3.1.3" + prop-types "^15.8.1" + "@mui/system@^5.5.2": version "5.5.2" resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.5.2.tgz#df8fbbfb17cccfeca3122fe9dff04a481bda179a" @@ -5308,29 +5304,27 @@ csstype "^3.0.11" prop-types "^15.7.2" -"@mui/system@^6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-6.2.0.tgz#1841438bc50716c7c739345756bc4cd60aa34a71" - integrity sha512-DCeqev9Cd4f4pm3O1lqSGW/DIHHBG6ZpqMX9iIAvN4asYv+pPWv2/lKov9kWk5XThhxFnGSv93SRNE1kNRRg5Q== - dependencies: - "@babel/runtime" "^7.26.0" - "@mui/private-theming" "^6.2.0" - "@mui/styled-engine" "^6.2.0" - "@mui/types" "^7.2.19" - "@mui/utils" "^6.2.0" - clsx "^2.1.1" - csstype "^3.1.3" - prop-types "^15.8.1" - "@mui/types@^7.1.3": version "7.1.3" resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.1.3.tgz#d7636f3046110bcccc63e6acfd100e2ad9ca712a" integrity sha512-DDF0UhMBo4Uezlk+6QxrlDbchF79XG6Zs0zIewlR4c0Dt6GKVFfUtzPtHCH1tTbcSlq/L2bGEdiaoHBJ9Y1gSA== -"@mui/types@^7.2.19": - version "7.2.19" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.19.tgz#c941954dd24393fdce5f07830d44440cf4ab6c80" - integrity sha512-6XpZEM/Q3epK9RN8ENoXuygnqUQxE+siN/6rGRi2iwJPgBUR25mphYQ9ZI87plGh58YoZ5pp40bFvKYOCDJ3tA== +"@mui/types@^7.2.15": + version "7.2.21" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.21.tgz#63f50874eda8e4a021a69aaa8ba9597369befda2" + integrity sha512-6HstngiUxNqLU+/DPqlUJDIPbzUBxIVHb1MmXP0eTWDIROiCR2viugXpEif0PPe2mLqqakPzzRClWAnK+8UJww== + +"@mui/utils@^5.16.14", "@mui/utils@^5.5.2": + version "5.16.14" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.16.14.tgz#7217e876a5092cd04c184b34bca348e0befaef8c" + integrity sha512-wn1QZkRzSmeXD1IguBVvJJHV3s6rxJrfb6YuC9Kk6Noh9f8Fb54nUs5JRkKm+BOerRhj5fLg05Dhx/H3Ofb8Mg== + dependencies: + "@babel/runtime" "^7.23.9" + "@mui/types" "^7.2.15" + "@types/prop-types" "^15.7.12" + clsx "^2.1.1" + prop-types "^15.8.1" + react-is "^19.0.0" "@mui/utils@^5.4.4": version "5.4.4" @@ -5343,18 +5337,6 @@ prop-types "^15.7.2" react-is "^17.0.2" -"@mui/utils@^6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-6.2.0.tgz#a39f0a2837048a42114169d298ce970913097203" - integrity sha512-77CaFJi+OIi2SjbPwCis8z5DXvE0dfx9hBz5FguZHt1VYFlWEPCWTHcMsQCahSErnfik5ebLsYK8+D+nsjGVfw== - dependencies: - "@babel/runtime" "^7.26.0" - "@mui/types" "^7.2.19" - "@types/prop-types" "^15.7.14" - clsx "^2.1.1" - prop-types "^15.8.1" - react-is "^19.0.0" - "@ndelangen/get-tarball@^3.0.7": version "3.0.9" resolved "https://registry.yarnpkg.com/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz#727ff4454e65f34707e742a59e5e6b1f525d8964" @@ -9150,7 +9132,7 @@ resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz" integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== -"@types/prop-types@^15.7.14": +"@types/prop-types@^15.7.12": version "15.7.14" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2" integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== @@ -9283,7 +9265,7 @@ dependencies: "@types/react" "*" -"@types/react-transition-group@^4.4.11": +"@types/react-transition-group@^4.4.10": version "4.4.12" resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== @@ -12147,7 +12129,7 @@ clsx@^1.1.1: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== -clsx@^2.0.0, clsx@^2.1.1: +clsx@^2.0.0, clsx@^2.1.0, clsx@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== From 35adb71da9bbce99fa8e5aa90a7e8d8804cbb6da Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 13 Jan 2025 13:53:58 +0100 Subject: [PATCH 068/100] chore: yarn.lock --- app/package.json | 4 +- yarn.lock | 335 +++++++++++++++-------------------------------- 2 files changed, 107 insertions(+), 232 deletions(-) diff --git a/app/package.json b/app/package.json index 1e5790c2b..45486e86a 100644 --- a/app/package.json +++ b/app/package.json @@ -30,8 +30,8 @@ "@mdx-js/react": "^1.6.22", "@mui/lab": "^5.0.0-alpha.74", "@mui/material": "^5.5.2", - "@mui/styles": "^5.5.2", - "@mui/utils": "^5.5.2", + "@mui/styles": "5.5.1", + "@mui/utils": "^5.4.4", "@next/bundle-analyzer": "^11.0.1", "@next/mdx": "^11.0.1", "@preconstruct/next": "^3.0.1", diff --git a/yarn.lock b/yarn.lock index 8d16ebec5..7072e3e2a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2523,13 +2523,6 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.23.9": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" - integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== - dependencies: - regenerator-runtime "^0.14.0" - "@babel/runtime@^7.24.4": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.5.tgz#230946857c053a36ccc66e1dd03b17dd0c4ed02c" @@ -2971,17 +2964,6 @@ "@emotion/utils" "0.11.3" "@emotion/weak-memoize" "0.2.5" -"@emotion/cache@^11.13.5": - version "11.14.0" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" - integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== - dependencies: - "@emotion/memoize" "^0.9.0" - "@emotion/sheet" "^1.4.0" - "@emotion/utils" "^1.4.2" - "@emotion/weak-memoize" "^0.4.0" - stylis "4.2.0" - "@emotion/cache@^11.7.1": version "11.7.1" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.7.1.tgz#08d080e396a42e0037848214e8aa7bf879065539" @@ -2998,11 +2980,6 @@ resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz" integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== -"@emotion/hash@^0.9.1": - version "0.9.2" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" - integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== - "@emotion/is-prop-valid@^0.8.2": version "0.8.8" resolved "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz" @@ -3027,11 +3004,6 @@ resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz" integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ== -"@emotion/memoize@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" - integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== - "@emotion/react@^11.8.2": version "11.8.2" resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.8.2.tgz#e51f5e6372e22e82780836c9288da19af4b51e70" @@ -3077,11 +3049,6 @@ resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.1.0.tgz#56d99c41f0a1cda2726a05aa6a20afd4c63e58d2" integrity sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g== -"@emotion/sheet@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" - integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== - "@emotion/styled@^11.8.1": version "11.8.1" resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.8.1.tgz#856f6f63aceef0eb783985fa2322e2bf66d04e17" @@ -3123,21 +3090,11 @@ resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.1.0.tgz#86b0b297f3f1a0f2bdb08eeac9a2f49afd40d0cf" integrity sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ== -"@emotion/utils@^1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.2.tgz#6df6c45881fcb1c412d6688a311a98b7f59c1b52" - integrity sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA== - "@emotion/weak-memoize@0.2.5", "@emotion/weak-memoize@^0.2.5": version "0.2.5" resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== -"@emotion/weak-memoize@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" - integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== - "@endemolshinegroup/cosmiconfig-typescript-loader@3.0.2": version "3.0.2" resolved "https://registry.npmjs.org/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz" @@ -5174,11 +5131,6 @@ prop-types "^15.7.2" react-is "^17.0.2" -"@mui/core-downloads-tracker@^5.16.14": - version "5.16.14" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.14.tgz#e6536f1b6caa873f7915fbf9703fdc840a5a98d9" - integrity sha512-sbjXW+BBSvmzn61XyTMun899E7nGPTXwqD9drm1jBUAvWEhJpPFIRxwQQiATWZnd9rvdxtnhhdsDxEGWI0jxqA== - "@mui/lab@^5.0.0-alpha.74": version "5.0.0-alpha.74" resolved "https://registry.yarnpkg.com/@mui/lab/-/lab-5.0.0-alpha.74.tgz#8744c8a45c3107abbb65d45931725fd878e94b04" @@ -5199,31 +5151,22 @@ rifm "^0.12.1" "@mui/material@^5.5.2": - version "5.16.14" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.16.14.tgz#da8a75822f039d8c1b0ab7fb4146d767c2f9248a" - integrity sha512-eSXQVCMKU2xc7EcTxe/X/rC9QsV2jUe8eLM3MUCPYbo6V52eCE436akRIvELq/AqZpxx2bwkq7HC0cRhLB+yaw== - dependencies: - "@babel/runtime" "^7.23.9" - "@mui/core-downloads-tracker" "^5.16.14" - "@mui/system" "^5.16.14" - "@mui/types" "^7.2.15" - "@mui/utils" "^5.16.14" - "@popperjs/core" "^2.11.8" - "@types/react-transition-group" "^4.4.10" - clsx "^2.1.0" - csstype "^3.1.3" - prop-types "^15.8.1" - react-is "^19.0.0" - react-transition-group "^4.4.5" - -"@mui/private-theming@^5.16.14": - version "5.16.14" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.16.14.tgz#7ad2b8a8fe0417f9fdfd05011806b9cb33c1a20a" - integrity sha512-12t7NKzvYi819IO5IapW2BcR33wP/KAVrU8d7gLhGHoAmhDxyXlRoKiRij3TOD8+uzk0B6R9wHUNKi4baJcRNg== + version "5.5.2" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.5.2.tgz#9cea96abda87bed51d435e8676d5bfad99750b8a" + integrity sha512-r4p1u9eDlSqW3TS/Iq9yolifWHpuW6e0BSeqEJW3EEIcKfPVVk4WNUNJ+s8DtN7dBoDcveXxcQVVjYXTIv1d9g== dependencies: - "@babel/runtime" "^7.23.9" - "@mui/utils" "^5.16.14" - prop-types "^15.8.1" + "@babel/runtime" "^7.17.2" + "@mui/base" "5.0.0-alpha.73" + "@mui/system" "^5.5.2" + "@mui/types" "^7.1.3" + "@mui/utils" "^5.4.4" + "@types/react-transition-group" "^4.4.4" + clsx "^1.1.1" + csstype "^3.0.11" + hoist-non-react-statics "^3.3.2" + prop-types "^15.7.2" + react-is "^17.0.2" + react-transition-group "^4.4.2" "@mui/private-theming@^5.4.4": version "5.4.4" @@ -5234,16 +5177,6 @@ "@mui/utils" "^5.4.4" prop-types "^15.7.2" -"@mui/styled-engine@^5.16.14": - version "5.16.14" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.16.14.tgz#f90fef5b4f8ebf11d48e1b1df8854a45bb31a9f5" - integrity sha512-UAiMPZABZ7p8mUW4akDV6O7N3+4DatStpXMZwPlt+H/dA0lt67qawN021MNND+4QTpjaiMYxbhKZeQcyWCbuKw== - dependencies: - "@babel/runtime" "^7.23.9" - "@emotion/cache" "^11.13.5" - csstype "^3.1.3" - prop-types "^15.8.1" - "@mui/styled-engine@^5.5.2": version "5.5.2" resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.5.2.tgz#1f92dd27d76f0b7df7aa52c7c7a710e59b2275a6" @@ -5253,42 +5186,28 @@ "@emotion/cache" "^11.7.1" prop-types "^15.7.2" -"@mui/styles@^5.5.2": - version "5.16.14" - resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-5.16.14.tgz#a9482d0287ae83636c146817ba99f7dde6fcdaca" - integrity sha512-J3iE718GbU06mnD9qu57/Fx+TosuBlhzs8nk1Q87QRQ76xo6qzLc3ek9n3dUPourGXWVenTxv1YX8lTOAnbHBA== - dependencies: - "@babel/runtime" "^7.23.9" - "@emotion/hash" "^0.9.1" - "@mui/private-theming" "^5.16.14" - "@mui/types" "^7.2.15" - "@mui/utils" "^5.16.14" - clsx "^2.1.0" - csstype "^3.1.3" +"@mui/styles@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-5.5.1.tgz#cfd2b6dbdb4b2cb0e989568bb9cc45f5d7346d2a" + integrity sha512-mxwfjwTwPE+r7/U4Nn/QKPzJ2cIqmRuK3xu44Us613D5jqPeB/ftOsAy0OpCYAwpkUxmQIrRQiilQ8zE+f4rBQ== + dependencies: + "@babel/runtime" "^7.17.2" + "@emotion/hash" "^0.8.0" + "@mui/private-theming" "^5.4.4" + "@mui/types" "^7.1.3" + "@mui/utils" "^5.4.4" + clsx "^1.1.1" + csstype "^3.0.11" hoist-non-react-statics "^3.3.2" - jss "^10.10.0" - jss-plugin-camel-case "^10.10.0" - jss-plugin-default-unit "^10.10.0" - jss-plugin-global "^10.10.0" - jss-plugin-nested "^10.10.0" - jss-plugin-props-sort "^10.10.0" - jss-plugin-rule-value-function "^10.10.0" - jss-plugin-vendor-prefixer "^10.10.0" - prop-types "^15.8.1" - -"@mui/system@^5.16.14": - version "5.16.14" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.16.14.tgz#92765ba01a3d1f8ee4967248cb00077d7aed225b" - integrity sha512-KBxMwCb8mSIABnKvoGbvM33XHyT+sN0BzEBG+rsSc0lLQGzs7127KWkCA6/H8h6LZ00XpBEME5MAj8mZLiQ1tw== - dependencies: - "@babel/runtime" "^7.23.9" - "@mui/private-theming" "^5.16.14" - "@mui/styled-engine" "^5.16.14" - "@mui/types" "^7.2.15" - "@mui/utils" "^5.16.14" - clsx "^2.1.0" - csstype "^3.1.3" - prop-types "^15.8.1" + jss "^10.8.2" + jss-plugin-camel-case "^10.8.2" + jss-plugin-default-unit "^10.8.2" + jss-plugin-global "^10.8.2" + jss-plugin-nested "^10.8.2" + jss-plugin-props-sort "^10.8.2" + jss-plugin-rule-value-function "^10.8.2" + jss-plugin-vendor-prefixer "^10.8.2" + prop-types "^15.7.2" "@mui/system@^5.5.2": version "5.5.2" @@ -5309,23 +5228,6 @@ resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.1.3.tgz#d7636f3046110bcccc63e6acfd100e2ad9ca712a" integrity sha512-DDF0UhMBo4Uezlk+6QxrlDbchF79XG6Zs0zIewlR4c0Dt6GKVFfUtzPtHCH1tTbcSlq/L2bGEdiaoHBJ9Y1gSA== -"@mui/types@^7.2.15": - version "7.2.21" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.21.tgz#63f50874eda8e4a021a69aaa8ba9597369befda2" - integrity sha512-6HstngiUxNqLU+/DPqlUJDIPbzUBxIVHb1MmXP0eTWDIROiCR2viugXpEif0PPe2mLqqakPzzRClWAnK+8UJww== - -"@mui/utils@^5.16.14", "@mui/utils@^5.5.2": - version "5.16.14" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.16.14.tgz#7217e876a5092cd04c184b34bca348e0befaef8c" - integrity sha512-wn1QZkRzSmeXD1IguBVvJJHV3s6rxJrfb6YuC9Kk6Noh9f8Fb54nUs5JRkKm+BOerRhj5fLg05Dhx/H3Ofb8Mg== - dependencies: - "@babel/runtime" "^7.23.9" - "@mui/types" "^7.2.15" - "@types/prop-types" "^15.7.12" - clsx "^2.1.1" - prop-types "^15.8.1" - react-is "^19.0.0" - "@mui/utils@^5.4.4": version "5.4.4" resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.4.4.tgz#bd7dde4f48f60c02b6debf976bd74f3505b188fe" @@ -5652,11 +5554,6 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.4.tgz#d8c7b8db9226d2d7664553a0741ad7d0397ee503" integrity sha512-q/ytXxO5NKvyT37pmisQAItCFqA7FD/vNb8dgaJy3/630Fsc+Mz9/9f2SziBoIZ30TJooXyTwZmhi1zjXmObYg== -"@popperjs/core@^2.11.8": - version "2.11.8" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" - integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== - "@preconstruct/cli@^2.7.0": version "2.7.0" resolved "https://registry.yarnpkg.com/@preconstruct/cli/-/cli-2.7.0.tgz#78891a094871ebb401a2e8e42871bc208717cba7" @@ -9132,11 +9029,6 @@ resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz" integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== -"@types/prop-types@^15.7.12": - version "15.7.14" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2" - integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== - "@types/prop-types@^15.7.4": version "15.7.4" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" @@ -9265,10 +9157,12 @@ dependencies: "@types/react" "*" -"@types/react-transition-group@^4.4.10": - version "4.4.12" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" - integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== +"@types/react-transition-group@^4.4.4": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.4.tgz#acd4cceaa2be6b757db61ed7b432e103242d163e" + integrity sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug== + dependencies: + "@types/react" "*" "@types/react-window@^1.8.2": version "1.8.3" @@ -12129,7 +12023,7 @@ clsx@^1.1.1: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== -clsx@^2.0.0, clsx@^2.1.0, clsx@^2.1.1: +clsx@^2.0.0, clsx@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== @@ -12793,11 +12687,6 @@ csstype@^3.0.2: resolved "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz" integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== -csstype@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - "d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5" @@ -18380,70 +18269,70 @@ jsonwebtoken@^8.5.1: ms "^2.1.1" semver "^5.6.0" -jss-plugin-camel-case@^10.10.0: - version "10.10.0" - resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz#27ea159bab67eb4837fa0260204eb7925d4daa1c" - integrity sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw== +jss-plugin-camel-case@^10.8.2: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.0.tgz#4921b568b38d893f39736ee8c4c5f1c64670aaf7" + integrity sha512-UH6uPpnDk413/r/2Olmw4+y54yEF2lRIV8XIZyuYpgPYTITLlPOsq6XB9qeqv+75SQSg3KLocq5jUBXW8qWWww== dependencies: "@babel/runtime" "^7.3.1" hyphenate-style-name "^1.0.3" - jss "10.10.0" + jss "10.9.0" -jss-plugin-default-unit@^10.10.0: - version "10.10.0" - resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz#db3925cf6a07f8e1dd459549d9c8aadff9804293" - integrity sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ== +jss-plugin-default-unit@^10.8.2: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.0.tgz#bb23a48f075bc0ce852b4b4d3f7582bc002df991" + integrity sha512-7Ju4Q9wJ/MZPsxfu4T84mzdn7pLHWeqoGd/D8O3eDNNJ93Xc8PxnLmV8s8ZPNRYkLdxZqKtm1nPQ0BM4JRlq2w== dependencies: "@babel/runtime" "^7.3.1" - jss "10.10.0" + jss "10.9.0" -jss-plugin-global@^10.10.0: - version "10.10.0" - resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz#1c55d3c35821fab67a538a38918292fc9c567efd" - integrity sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A== +jss-plugin-global@^10.8.2: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.9.0.tgz#fc07a0086ac97aca174e37edb480b69277f3931f" + integrity sha512-4G8PHNJ0x6nwAFsEzcuVDiBlyMsj2y3VjmFAx/uHk/R/gzJV+yRHICjT4MKGGu1cJq2hfowFWCyrr/Gg37FbgQ== dependencies: "@babel/runtime" "^7.3.1" - jss "10.10.0" + jss "10.9.0" -jss-plugin-nested@^10.10.0: - version "10.10.0" - resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz#db872ed8925688806e77f1fc87f6e62264513219" - integrity sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA== +jss-plugin-nested@^10.8.2: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.9.0.tgz#cc1c7d63ad542c3ccc6e2c66c8328c6b6b00f4b3" + integrity sha512-2UJnDrfCZpMYcpPYR16oZB7VAC6b/1QLsRiAutOt7wJaaqwCBvNsosLEu/fUyKNQNGdvg2PPJFDO5AX7dwxtoA== dependencies: "@babel/runtime" "^7.3.1" - jss "10.10.0" + jss "10.9.0" tiny-warning "^1.0.2" -jss-plugin-props-sort@^10.10.0: - version "10.10.0" - resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz#67f4dd4c70830c126f4ec49b4b37ccddb680a5d7" - integrity sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg== +jss-plugin-props-sort@^10.8.2: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.0.tgz#30e9567ef9479043feb6e5e59db09b4de687c47d" + integrity sha512-7A76HI8bzwqrsMOJTWKx/uD5v+U8piLnp5bvru7g/3ZEQOu1+PjHvv7bFdNO3DwNPC9oM0a//KwIJsIcDCjDzw== dependencies: "@babel/runtime" "^7.3.1" - jss "10.10.0" + jss "10.9.0" -jss-plugin-rule-value-function@^10.10.0: - version "10.10.0" - resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz#7d99e3229e78a3712f78ba50ab342e881d26a24b" - integrity sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g== +jss-plugin-rule-value-function@^10.8.2: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.0.tgz#379fd2732c0746fe45168011fe25544c1a295d67" + integrity sha512-IHJv6YrEf8pRzkY207cPmdbBstBaE+z8pazhPShfz0tZSDtRdQua5jjg6NMz3IbTasVx9FdnmptxPqSWL5tyJg== dependencies: "@babel/runtime" "^7.3.1" - jss "10.10.0" + jss "10.9.0" tiny-warning "^1.0.2" -jss-plugin-vendor-prefixer@^10.10.0: - version "10.10.0" - resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz#c01428ef5a89f2b128ec0af87a314d0c767931c7" - integrity sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg== +jss-plugin-vendor-prefixer@^10.8.2: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.0.tgz#aa9df98abfb3f75f7ed59a3ec50a5452461a206a" + integrity sha512-MbvsaXP7iiVdYVSEoi+blrW+AYnTDvHTW6I6zqi7JcwXdc6I9Kbm234nEblayhF38EftoenbM+5218pidmC5gA== dependencies: "@babel/runtime" "^7.3.1" css-vendor "^2.0.8" - jss "10.10.0" + jss "10.9.0" -jss@10.10.0, jss@^10.10.0: - version "10.10.0" - resolved "https://registry.yarnpkg.com/jss/-/jss-10.10.0.tgz#a75cc85b0108c7ac8c7b7d296c520a3e4fbc6ccc" - integrity sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw== +jss@10.9.0, jss@^10.8.2: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss/-/jss-10.9.0.tgz#7583ee2cdc904a83c872ba695d1baab4b59c141b" + integrity sha512-YpzpreB6kUunQBbrlArlsMpXYyndt9JATbt95tajx0t4MTJJcCJdd4hdNpHmOIDiUJrF/oX5wtVFrS3uofWfGw== dependencies: "@babel/runtime" "^7.3.1" csstype "^3.0.2" @@ -19277,9 +19166,9 @@ mdast-util-definitions@^4.0.0: unist-util-visit "^2.0.0" mdast-util-find-and-replace@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz#a6fc7b62f0994e973490e45262e4bc07607b04e0" - integrity sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA== + version "3.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz#70a3174c894e14df722abf43bc250cbae44b11df" + integrity sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg== dependencies: "@types/mdast" "^4.0.0" escape-string-regexp "^5.0.0" @@ -19382,9 +19271,9 @@ mdast-util-mdx-expression@^2.0.0: mdast-util-to-markdown "^2.0.0" mdast-util-mdx-jsx@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz#76b957b3da18ebcfd0de3a9b4451dcd6fdec2320" - integrity sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ== + version "3.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz#fd04c67a2a7499efb905a8a5c578dddc9fdada0d" + integrity sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q== dependencies: "@types/estree-jsx" "^1.0.0" "@types/hast" "^3.0.0" @@ -20981,12 +20870,11 @@ parse-entities@^2.0.0: is-hexadecimal "^1.0.0" parse-entities@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.1.tgz#4e2a01111fb1c986549b944af39eeda258fc9e4e" - integrity sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w== + version "4.0.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.2.tgz#61d46f5ed28e4ee62e9ddc43d6b010188443f159" + integrity sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw== dependencies: "@types/unist" "^2.0.0" - character-entities "^2.0.0" character-entities-legacy "^3.0.0" character-reference-invalid "^2.0.0" decode-named-character-reference "^1.0.0" @@ -22209,11 +22097,6 @@ react-is@^18.0.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-is@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0.tgz#d6669fd389ff022a9684f708cf6fa4962d1fea7a" - integrity sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g== - react-map-gl@^7.0.10: version "7.0.10" resolved "https://registry.yarnpkg.com/react-map-gl/-/react-map-gl-7.0.10.tgz#4b92b748b9fbc376d88174c2e0c6099c73df96a7" @@ -22222,9 +22105,9 @@ react-map-gl@^7.0.10: "@types/mapbox-gl" "^2.6.0" react-markdown@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-9.0.1.tgz#c05ddbff67fd3b3f839f8c648e6fb35d022397d1" - integrity sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg== + version "9.0.3" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-9.0.3.tgz#c12bf60dad05e9bf650b86bcc612d80636e8456e" + integrity sha512-Yk7Z94dbgYTOrdk41Z74GoKA7rThnsbbqBTRYuxoe08qvfQ9tJVhmAKw6BJS/ZORG7kTy/s1QvYzSuaoBA1qfw== dependencies: "@types/hast" "^3.0.0" devlop "^1.0.0" @@ -22340,16 +22223,6 @@ react-transition-group@^4.4.2: loose-envify "^1.4.0" prop-types "^15.6.2" -react-transition-group@^4.4.5: - version "4.4.5" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" - integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== - dependencies: - "@babel/runtime" "^7.5.5" - dom-helpers "^5.0.1" - loose-envify "^1.4.0" - prop-types "^15.6.2" - react-virtualized-auto-sizer@^1.0.25: version "1.0.25" resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.25.tgz#b13cbc528ac200be2bd1ffa40c8bb19bcc60ac3f" @@ -23337,10 +23210,12 @@ semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.6.3: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" semver@^7.3.7: version "7.3.7" @@ -23356,6 +23231,11 @@ semver@^7.5.4, semver@^7.6.0: dependencies: lru-cache "^6.0.0" +semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + semver@~2.3.1: version "2.3.2" resolved "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz" @@ -24393,11 +24273,6 @@ stylis@4.0.13: resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91" integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag== -stylis@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" - integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== - stylus-lookup@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/stylus-lookup/-/stylus-lookup-3.0.2.tgz#c9eca3ff799691020f30b382260a67355fefdddd" From a82521d53e517143233c1939f68d4cd3a66ad01f Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Mon, 13 Jan 2025 14:10:15 +0100 Subject: [PATCH 069/100] feat: Immediately open new text blocks --- app/configurator/components/layout-configurator.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/configurator/components/layout-configurator.tsx b/app/configurator/components/layout-configurator.tsx index 2aa7823b8..0c4c87831 100644 --- a/app/configurator/components/layout-configurator.tsx +++ b/app/configurator/components/layout-configurator.tsx @@ -618,6 +618,7 @@ const AddLayoutBlocks = () => { setAnchorEl(null); }); const handleAddTextBlock = useEvent(() => { + const key = createId(); dispatch({ type: "LAYOUT_CHANGED", value: { @@ -626,7 +627,7 @@ const AddLayoutBlocks = () => { ...layout.blocks, { type: "text", - key: createId(), + key, text: { de: "", fr: "", @@ -638,6 +639,10 @@ const AddLayoutBlocks = () => { ], }, }); + dispatch({ + type: "LAYOUT_ACTIVE_FIELD_CHANGED", + value: key, + }); handleClose(); }); const classes = useAddTextBlocksStyles(); From bff8cf41b1e5dc43d7b051053d8a928d0a142948 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 14 Jan 2025 09:49:11 +0100 Subject: [PATCH 070/100] feat: Ensure dashboard layout is correct when changing layout --- app/configurator/configurator-state/reducer.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/configurator/configurator-state/reducer.tsx b/app/configurator/configurator-state/reducer.tsx index 9fbc3e7a2..b704155e3 100644 --- a/app/configurator/configurator-state/reducer.tsx +++ b/app/configurator/configurator-state/reducer.tsx @@ -999,7 +999,9 @@ const reducer_: Reducer = ( return draft; } + break; + case "CHART_CONFIG_REMOVE": if (isConfiguring(draft) || isLayouting(draft)) { const index = draft.chartConfigs.findIndex( @@ -1060,6 +1062,8 @@ const reducer_: Reducer = ( } } + ensureDashboardLayoutIsCorrect(draft); + return draft; case "LAYOUT_ACTIVE_FIELD_CHANGED": From cb90e16b9169a905941a56f0c2cfab6869ee90ef Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 14 Jan 2025 09:51:18 +0100 Subject: [PATCH 071/100] feat: Update ensureDashboardLayoutIsCorrect to be based on blocks --- .../configurator-state/reducer.tsx | 118 +++++++++--------- 1 file changed, 61 insertions(+), 57 deletions(-) diff --git a/app/configurator/configurator-state/reducer.tsx b/app/configurator/configurator-state/reducer.tsx index b704155e3..9f5c72eba 100644 --- a/app/configurator/configurator-state/reducer.tsx +++ b/app/configurator/configurator-state/reducer.tsx @@ -1,5 +1,5 @@ import produce, { createDraft, current, Draft, isDraft } from "immer"; -import { WritableDraft } from "immer/dist/internal"; +import { WritableDraft } from "immer/dist/types/types-external"; import get from "lodash/get"; import isEqual from "lodash/isEqual"; import setWith from "lodash/setWith"; @@ -21,7 +21,6 @@ import { } from "@/charts/chart-config-ui-options"; import { COLS, - FREE_CANVAS_BREAKPOINTS, getInitialTileHeight, getInitialTileWidth, MIN_H, @@ -42,6 +41,19 @@ import { } from "@/config-types"; import { getChartConfig, makeMultiFilter } from "@/config-utils"; import { mapValueIrisToColor } from "@/configurator/components/ui-helpers"; +import { + addDatasetInConfig, + getPreviousState, + getStateWithCurrentDataSource, + hasChartConfigs, + isConfiguring, + isLayouting, +} from "@/configurator/configurator-state"; +import { ConfiguratorStateAction } from "@/configurator/configurator-state/actions"; +import { + getInitialConfiguringConfigBasedOnCube, + SELECTING_DATASET_STATE, +} from "@/configurator/configurator-state/initial"; import { FIELD_VALUE_NONE } from "@/configurator/constants"; import { toggleInteractiveFilterDataDimension } from "@/configurator/interactive-filters/interactive-filters-config-state"; import { Dimension, isGeoDimension, isJoinByComponent } from "@/domain/data"; @@ -52,21 +64,6 @@ import { getCachedComponents } from "@/urql-cache"; import { assert } from "@/utils/assert"; import { unreachableError } from "@/utils/unreachable"; -import { ConfiguratorStateAction } from "./actions"; -import { - getInitialConfiguringConfigBasedOnCube, - SELECTING_DATASET_STATE, -} from "./initial"; - -import { - addDatasetInConfig, - getPreviousState, - getStateWithCurrentDataSource, - hasChartConfigs, - isConfiguring, - isLayouting, -} from "./index"; - /** * Is responsible for inferring filters when changing chart type, or when * changing some chart fields. Makes sure that we are always showing the @@ -221,7 +218,8 @@ export const applyNonTableDimensionToFilters = (props: { : undefined; const filterValue = hierarchyTopMost ? hierarchyTopMost.value - : Object.keys(currentFilter.values)[0] ?? dimension.values[0].value; + : (Object.keys(currentFilter.values)[0] ?? + dimension.values[0].value); filters[originalIri] = { type: "single", value: filterValue, @@ -251,7 +249,7 @@ export const applyNonTableDimensionToFilters = (props: { : undefined; const filterValue = hierarchyTopMost ? hierarchyTopMost.value - : possibleFilter?.value ?? dimension.values[0]?.value; + : (possibleFilter?.value ?? dimension.values[0]?.value); if (filterValue) { filters[dimension.id] = { @@ -1185,52 +1183,58 @@ export function ensureDashboardLayoutIsCorrect( draft.layout.type === "dashboard" && draft.layout.layout === "canvas" ) { - const layouts = draft.layout.layouts; - const chartConfigKeys = draft.chartConfigs.map((c) => c.key).sort(); - - const breakpoints = Object.keys(FREE_CANVAS_BREAKPOINTS); - const layoutConfigKeys = Array.from( - new Set(breakpoints.flatMap((bp) => layouts[bp].map((c) => c.i))) - ).sort(); - - const newConfigs = draft.chartConfigs.filter( - (x) => !layoutConfigKeys.includes(x.key) - ); + const { blocks, layouts } = draft.layout; - if (!isEqual(chartConfigKeys, layoutConfigKeys)) { - for (const bp of breakpoints) { - const canvasLayouts = draft.layout.layouts[bp].filter((c) => - chartConfigKeys.includes(c.i) - ); + for (const [breakpoint, _breakpointLayouts] of Object.entries(layouts)) { + const breakpointLayouts = [..._breakpointLayouts]; + const breakpointLayoutKeys = breakpointLayouts.map((l) => l.i); + const newBlocks = blocks.filter((block) => { + return !breakpointLayoutKeys.includes(block.key); + }); + const cols = COLS[breakpoint as keyof typeof COLS]; + + let x = Math.max(...breakpointLayouts.map((c) => c.x + c.w)) % cols; + let y = Math.max(...breakpointLayouts.map((c) => c.y + c.h)); + let w = 0; + let h = 0; + + for (const block of newBlocks) { + switch (block.type) { + case "chart": + w = getInitialTileWidth(); + h = getInitialTileHeight(); + break; + case "text": + w = 1; + h = 1; + break; + default: + const _exhaustiveCheck: never = block; + return _exhaustiveCheck; + } - let curX = - (Math.max(...canvasLayouts.map((c) => c.x + c.w)) ?? 0) % COLS.lg; - let curY = Math.max(...canvasLayouts.map((c) => c.y + c.h)) ?? 0; - - for (const chartConfig of newConfigs) { - let chartX = curX; - let chartY = curY; - let chartW = getInitialTileWidth(); - let chartH = getInitialTileHeight(); - canvasLayouts.push({ - i: chartConfig.key, - x: chartX, - y: chartY, - w: chartW, - h: chartH, + breakpointLayouts.push({ + i: block.key, + x, + y, + w, + h, minH: MIN_H, - // Is initialized later resizeHandles: [], }); - curX += chartW; - if (curX > COLS.lg) { - curX = 0; - curY += chartH; + + x += w; + + if (x > cols) { + x = 0; + y += h; } } - draft.layout.layouts[bp] = canvasLayouts; - } + draft.layout.layouts = { + ...draft.layout.layouts, + [breakpoint]: breakpointLayouts, + }; } } } From 26c0a9bfe086289bb092e8c1d3d5f9119a03a2e7 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 14 Jan 2025 14:30:13 +0100 Subject: [PATCH 072/100] feat: Ensure blocks are in sync with reality --- app/components/react-grid.tsx | 3 +-- .../configurator-state/reducer.tsx | 23 +++++++++++++------ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/app/components/react-grid.tsx b/app/components/react-grid.tsx index 5833ded8a..851caf37d 100644 --- a/app/components/react-grid.tsx +++ b/app/components/react-grid.tsx @@ -322,8 +322,7 @@ export const ChartGridLayout = ({ blocks: layout.blocks.map((block) => { return { ...block, - // TODO: initialize other block types - initialized: block.type === "chart" ? true : block.initialized, + initialized: true, }; }), }, diff --git a/app/configurator/configurator-state/reducer.tsx b/app/configurator/configurator-state/reducer.tsx index 9f5c72eba..c98f60da3 100644 --- a/app/configurator/configurator-state/reducer.tsx +++ b/app/configurator/configurator-state/reducer.tsx @@ -914,11 +914,17 @@ const reducer_: Reducer = ( }, { dimensions: dataCubesComponents.dimensions } ); + const key = action.value.chartConfig.key; draft.chartConfigs.push(newConfig); - draft.activeChartKey = action.value.chartConfig.key; - } + draft.activeChartKey = key; + draft.layout.blocks.push({ + key, + type: "chart", + initialized: false, + }); - ensureDashboardLayoutIsCorrect(draft); + ensureDashboardLayoutIsCorrect(draft); + } } return draft; @@ -1007,6 +1013,9 @@ const reducer_: Reducer = ( ); const removedKey = draft.chartConfigs[index].key; draft.chartConfigs.splice(index, 1); + draft.layout.blocks = draft.layout.blocks.filter( + (block) => block.key !== removedKey + ); if (removedKey === draft.activeChartKey) { draft.activeChartKey = draft.chartConfigs[Math.max(index - 1, 0)].key; @@ -1219,17 +1228,17 @@ export function ensureDashboardLayoutIsCorrect( y, w, h, - minH: MIN_H, - resizeHandles: [], - }); + minH: MIN_H, + resizeHandles: [], + }); x += w; if (x > cols) { x = 0; y += h; - } } + } draft.layout.layouts = { ...draft.layout.layouts, From bc23c122c573bc6e8f04606be4d6eab26d6f818e Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 14 Jan 2025 14:43:37 +0100 Subject: [PATCH 073/100] feat: Disable immer's autoFreeze --- .../configurator-state/reducer.tsx | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/app/configurator/configurator-state/reducer.tsx b/app/configurator/configurator-state/reducer.tsx index c98f60da3..48ff79eab 100644 --- a/app/configurator/configurator-state/reducer.tsx +++ b/app/configurator/configurator-state/reducer.tsx @@ -1,4 +1,10 @@ -import produce, { createDraft, current, Draft, isDraft } from "immer"; +import produce, { + createDraft, + current, + Draft, + isDraft, + setAutoFreeze, +} from "immer"; import { WritableDraft } from "immer/dist/types/types-external"; import get from "lodash/get"; import isEqual from "lodash/isEqual"; @@ -64,12 +70,21 @@ import { getCachedComponents } from "@/urql-cache"; import { assert } from "@/utils/assert"; import { unreachableError } from "@/utils/unreachable"; +/** + * Setting auto-freeze behavior to false, to prevent hard-to-trace bugs. + * It looks like the state is sometimes being mutated in a way that is not + * expected by immer - I'd prefer to not be constrained by the auto-freeze + * behavior. + * + * Also see https://immerjs.github.io/immer/freezing. + */ +setAutoFreeze(false); + /** * Is responsible for inferring filters when changing chart type, or when * changing some chart fields. Makes sure that we are always showing the * non-"duplicated" data (with the correct filters for key dimensions). */ - export const deriveFiltersFromFields = produce( ( draft: ChartConfig, From f028d32c44661d6658d8e58ddd87461a7c50f495 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 14 Jan 2025 14:55:51 +0100 Subject: [PATCH 074/100] feat: Improve default cell selection logic --- .../configurator-state/reducer.tsx | 52 +++++++++++++++---- 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/app/configurator/configurator-state/reducer.tsx b/app/configurator/configurator-state/reducer.tsx index 48ff79eab..9af0df991 100644 --- a/app/configurator/configurator-state/reducer.tsx +++ b/app/configurator/configurator-state/reducer.tsx @@ -44,6 +44,7 @@ import { GenericFields, isAreaConfig, isTableConfig, + ReactGridLayoutType, } from "@/config-types"; import { getChartConfig, makeMultiFilter } from "@/config-utils"; import { mapValueIrisToColor } from "@/configurator/components/ui-helpers"; @@ -1216,9 +1217,10 @@ export function ensureDashboardLayoutIsCorrect( return !breakpointLayoutKeys.includes(block.key); }); const cols = COLS[breakpoint as keyof typeof COLS]; - - let x = Math.max(...breakpointLayouts.map((c) => c.x + c.w)) % cols; - let y = Math.max(...breakpointLayouts.map((c) => c.y + c.h)); + const { x, y } = getPreferredEmptyCellCoords({ + layouts: breakpointLayouts, + cols, + }); let w = 0; let h = 0; @@ -1246,13 +1248,6 @@ export function ensureDashboardLayoutIsCorrect( minH: MIN_H, resizeHandles: [], }); - - x += w; - - if (x > cols) { - x = 0; - y += h; - } } draft.layout.layouts = { @@ -1262,3 +1257,40 @@ export function ensureDashboardLayoutIsCorrect( } } } + +const getPreferredEmptyCellCoords = ({ + layouts, + cols, +}: { + layouts: ReactGridLayoutType[]; + cols: number; +}) => { + const makeKey = (x: number, y: number) => `${x},${y}`; + const occupiedCells = new Set(); + + for (const layout of layouts) { + for (let dx = 0; dx < layout.w; dx++) { + for (let dy = 0; dy < layout.h; dy++) { + occupiedCells.add(makeKey(layout.x + dx, layout.y + dy)); + } + } + } + + let x = 0; + let y = 0; + + while (true) { + const key = makeKey(x, y); + + if (!occupiedCells.has(key)) { + return { x, y }; + } + + x++; + + if (x >= cols) { + x = 0; + y++; + } + } +}; From a5ad3ad521be60c47202cd23235406c714ad1bd6 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 14 Jan 2025 15:09:05 +0100 Subject: [PATCH 075/100] fix: Displaying of text blocks in tall dashboard ...so that they don't cause the chart to grow unnecessarily. --- app/components/chart-panel.tsx | 3 +++ app/components/chart-shared.tsx | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/components/chart-panel.tsx b/app/components/chart-panel.tsx index 87f135f2e..ca75b564b 100644 --- a/app/components/chart-panel.tsx +++ b/app/components/chart-panel.tsx @@ -17,6 +17,7 @@ import { import { ChartPanelLayoutTall } from "@/components/chart-panel-layout-tall"; import { ChartPanelLayoutVertical } from "@/components/chart-panel-layout-vertical"; import { ChartSelectionTabs } from "@/components/chart-selection-tabs"; +import { CHART_GRID_ROW_COUNT } from "@/components/chart-shared"; import { DashboardInteractiveFilters } from "@/components/dashboard-interactive-filters"; import { DragHandle } from "@/components/drag-handle"; import { Markdown } from "@/components/markdown"; @@ -58,6 +59,8 @@ const useStyles = makeStyles((theme) => ({ height: "100%", }, textBlockWrapper: { + // Make sure the text block doesn't cause the grid to grow. + gridRow: `span ${CHART_GRID_ROW_COUNT + 1}`, display: "flex", padding: "0.75rem", cursor: ({ editable }) => (editable ? "pointer" : "default"), diff --git a/app/components/chart-shared.tsx b/app/components/chart-shared.tsx index c0b41044a..266e099fc 100644 --- a/app/components/chart-shared.tsx +++ b/app/components/chart-shared.tsx @@ -63,6 +63,8 @@ import { UseScreenshotProps, } from "@/utils/use-screenshot"; +export const CHART_GRID_ROW_COUNT = 7; + /** Generic styles shared between `ChartPreview` and `ChartPublished`. */ export const useChartStyles = makeStyles( (theme) => ({ @@ -71,7 +73,7 @@ export const useChartStyles = makeStyles( display: "grid", gridTemplateRows: "subgrid", /** Should stay in sync with the number of rows contained in a chart */ - gridRow: "span 7", + gridRow: `span ${CHART_GRID_ROW_COUNT}`, padding: theme.spacing(6), backgroundColor: theme.palette.background.paper, border: ({ disableBorder }) => From c7987e63f08765f59505e85b4dc3ae2fad1c046c Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 14 Jan 2025 15:24:02 +0100 Subject: [PATCH 076/100] feat: Sync text blocks' height across all breakpoints --- app/components/chart-panel.tsx | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/app/components/chart-panel.tsx b/app/components/chart-panel.tsx index ca75b564b..3e04c9237 100644 --- a/app/components/chart-panel.tsx +++ b/app/components/chart-panel.tsx @@ -2,6 +2,7 @@ import { Box, BoxProps, Theme } from "@mui/material"; import { makeStyles } from "@mui/styles"; import clsx from "clsx"; import { selectAll } from "d3-selection"; +import isEqual from "lodash/isEqual"; import { forwardRef, HTMLProps, @@ -247,21 +248,22 @@ const useSyncTextBlockHeight = () => { const key = wrapperEl.id; const h = Math.ceil(contentEl.clientHeight / ROW_HEIGHT) || 1; - // TODO: how to get current layout? - const bp = "xl"; - const blockLayout = layout.layouts[bp].find((b) => b.i === key); - if (blockLayout && blockLayout.minH !== h) { + const newLayouts = Object.fromEntries( + Object.entries(layout.layouts).map(([bp, layouts]) => [ + bp, + layouts.map((b) => { + return b.i === key ? { ...b, h, minH: h } : b; + }), + ]) + ); + + if (!isEqual(newLayouts, layout.layouts)) { dispatch({ type: "LAYOUT_CHANGED", value: { ...layout, - layouts: { - ...layout.layouts, - [bp]: layout.layouts[bp].map((b) => { - return b.i === key ? { ...b, h, minH: h } : b; - }), - }, + layouts: newLayouts, }, }); } From 8f106e942f5d1cf1b084a3c0e68250dfa842829b Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 14 Jan 2025 15:39:38 +0100 Subject: [PATCH 077/100] chore: Add unlisted dependency to package.json --- app/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/app/package.json b/app/package.json index 80bcb141f..889c031f9 100644 --- a/app/package.json +++ b/app/package.json @@ -23,6 +23,7 @@ "@dnd-kit/utilities": "3.2.2", "@emotion/react": "^11.8.2", "@emotion/styled": "^11.8.1", + "@graphql-tools/schema": "^7.1.5", "@juggle/resize-observer": "^3.4.0", "@lingui/core": "^3.17.2", "@lingui/react": "^3.17.2", From 21c6bee832ebf73ecca43606b436486d8976a5c5 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 14 Jan 2025 15:44:12 +0100 Subject: [PATCH 078/100] fix: Test --- app/configurator/configurator-state/reducer.spec.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/configurator/configurator-state/reducer.spec.tsx b/app/configurator/configurator-state/reducer.spec.tsx index d6db37c6b..d59476f68 100644 --- a/app/configurator/configurator-state/reducer.spec.tsx +++ b/app/configurator/configurator-state/reducer.spec.tsx @@ -1201,8 +1201,15 @@ describe("ensureDashboardLayoutIsCorrect", () => { ...state.chartConfigs[0], key: "newKey", }); + state.layout.blocks.push({ + type: "chart", + key: "newKey", + initialized: false, + }); ensureDashboardLayoutIsCorrect(state); + return state; }); + expect((newState as any).layout.layouts.lg.length).toBe(2); }); From 0f1feb7e425abcebef52e2941854d68a3671e12e Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 14 Jan 2025 15:55:11 +0100 Subject: [PATCH 079/100] feat: Show Objects panel for every dashboard type --- app/configurator/components/layout-configurator.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/configurator/components/layout-configurator.tsx b/app/configurator/components/layout-configurator.tsx index 0c4c87831..3ab626ea6 100644 --- a/app/configurator/components/layout-configurator.tsx +++ b/app/configurator/components/layout-configurator.tsx @@ -564,7 +564,7 @@ const LayoutBlocksConfigurator = () => { dispatch({ type: "LAYOUT_ACTIVE_FIELD_CHANGED", value: blockKey }); }); - return layout.type === "dashboard" && layout.layout === "canvas" ? ( + return layout.type === "dashboard" ? ( Objects From fd2f8bc3a466617f8032e3f0d022ccdd1f4d8195 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 14 Jan 2025 16:19:26 +0100 Subject: [PATCH 080/100] feat: Only allow horizontal resizing for text blocks --- app/components/react-grid.stories.tsx | 4 +- app/components/react-grid.tsx | 37 +++++++++++-------- .../configurator-state/reducer.tsx | 9 +++-- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/app/components/react-grid.stories.tsx b/app/components/react-grid.stories.tsx index b6e97937f..f52d4177e 100644 --- a/app/components/react-grid.stories.tsx +++ b/app/components/react-grid.stories.tsx @@ -9,7 +9,7 @@ import { useMemo, useState } from "react"; import { Layouts } from "react-grid-layout"; import { - availableHandles, + availableHandlesByBlockType, ChartGridLayout, generateLayout, GridLayout, @@ -32,7 +32,7 @@ export const Example = () => { const [allowResize, setAllowResize] = useState(false); const resizeHandles = useMemo( - () => (allowResize ? availableHandles : []), + () => (allowResize ? availableHandlesByBlockType.chart : []), [allowResize] ); const [layouts, setLayouts] = useLocalState( diff --git a/app/components/react-grid.tsx b/app/components/react-grid.tsx index 851caf37d..a3cc0704d 100644 --- a/app/components/react-grid.tsx +++ b/app/components/react-grid.tsx @@ -14,6 +14,7 @@ import { getChartWrapperId } from "@/components/chart-panel"; import { hasChartConfigs, isLayouting, + LayoutBlock, ReactGridLayoutType, useConfiguratorState, } from "@/configurator"; @@ -26,16 +27,13 @@ const ResponsiveReactGridLayout = WidthProvider(Responsive); type ResizeHandle = NonNullable[number]; export type GridLayout = "horizontal" | "vertical" | "wide" | "tall"; -export const availableHandles: ResizeHandle[] = [ - "s", - "w", - "e", - "n", - "sw", - "nw", - "se", - "ne", -]; +export const availableHandlesByBlockType: Record< + LayoutBlock["type"], + ResizeHandle[] +> = { + chart: ["s", "w", "e", "n", "sw", "nw", "se", "ne"], + text: ["w", "e"], +}; /** In grid unit */ const MAX_H = 10; @@ -241,11 +239,16 @@ export const ChartGridLayout = ({ return mapValues(layouts, (chartLayouts) => { return chartLayouts.map((chartLayout) => { + const block = layout.blocks.find( + (block) => block.key === chartLayout.i + ); + return { ...chartLayout, maxW: MAX_W, w: Math.min(MAX_W, chartLayout.w), - resizeHandles: resize ? availableHandles : [], + resizeHandles: + resize && block ? availableHandlesByBlockType[block.type] : [], minH: chartLayout.minH ?? MIN_H, h: Math.max(MIN_H, chartLayout.h), }; @@ -267,10 +270,11 @@ export const ChartGridLayout = ({ return [ breakpoint, chartLayouts.map((chartLayout) => { - if ( - layout.blocks.find((block) => block.key === chartLayout.i) - ?.initialized - ) { + const block = layout.blocks.find( + (block) => block.key === chartLayout.i + ); + + if (block?.initialized) { return chartLayout; } @@ -303,7 +307,8 @@ export const ChartGridLayout = ({ ...chartLayout, maxW: MAX_W, w: Math.min(MAX_W, chartLayout.w), - resizeHandles: resize ? availableHandles : [], + resizeHandles: + resize && block ? availableHandlesByBlockType[block.type] : [], minH, h: minH, }; diff --git a/app/configurator/configurator-state/reducer.tsx b/app/configurator/configurator-state/reducer.tsx index 3e0b19c00..444e10d89 100644 --- a/app/configurator/configurator-state/reducer.tsx +++ b/app/configurator/configurator-state/reducer.tsx @@ -26,6 +26,7 @@ import { getChartFieldOptionChangeSideEffect, } from "@/charts/chart-config-ui-options"; import { + availableHandlesByBlockType, COLS, getInitialTileHeight, getInitialTileWidth, @@ -1221,9 +1222,9 @@ const withLogging = ( }; export const reducer = reducerLogging ? withLogging(reducer_) : reducer_; -export function ensureDashboardLayoutIsCorrect( +export const ensureDashboardLayoutIsCorrect = ( draft: WritableDraft -) { +) => { if ( hasChartConfigs(draft) && draft.layout.type === "dashboard" && @@ -1267,7 +1268,7 @@ export function ensureDashboardLayoutIsCorrect( w, h, minH: MIN_H, - resizeHandles: [], + resizeHandles: availableHandlesByBlockType[block.type], }); } @@ -1277,7 +1278,7 @@ export function ensureDashboardLayoutIsCorrect( }; } } -} +}; const getPreferredEmptyCellCoords = ({ layouts, From 5d275af90eeb66836f4efbafe5eaf17a702d522f Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Tue, 14 Jan 2025 16:43:54 +0100 Subject: [PATCH 081/100] refactor: Extract ActionElementsContainer --- app/components/action-elements-container.tsx | 22 ++++++++++++++++++++ app/components/chart-preview.tsx | 12 +++-------- app/components/chart-published.tsx | 5 +++-- 3 files changed, 28 insertions(+), 11 deletions(-) create mode 100644 app/components/action-elements-container.tsx diff --git a/app/components/action-elements-container.tsx b/app/components/action-elements-container.tsx new file mode 100644 index 000000000..1788b7d0f --- /dev/null +++ b/app/components/action-elements-container.tsx @@ -0,0 +1,22 @@ +import { Theme } from "@mui/material"; +import { makeStyles } from "@mui/styles"; +import { ReactNode } from "react"; + +const useStyles = makeStyles((theme) => ({ + root: { + display: "flex", + alignItems: "center", + gap: theme.spacing(2), + marginTop: "-0.33rem", + }, +})); + +export const ActionElementsContainer = ({ + children, +}: { + children: ReactNode; +}) => { + const classes = useStyles(); + + return
{children}
; +}; diff --git a/app/components/chart-preview.tsx b/app/components/chart-preview.tsx index 4b17ddee5..a72f16cb0 100644 --- a/app/components/chart-preview.tsx +++ b/app/components/chart-preview.tsx @@ -21,6 +21,7 @@ import { import { DataSetTable } from "@/browse/datatable"; import { LoadingStateProvider } from "@/charts/shared/chart-loading-state"; +import { ActionElementsContainer } from "@/components/action-elements-container"; import { ChartErrorBoundary } from "@/components/chart-error-boundary"; import { ChartFootnotes } from "@/components/chart-footnotes"; import { @@ -487,21 +488,14 @@ const ChartPreviewInner = ({ // title and the chart (subgrid layout) )} - + {actionElementSlot} - + {configuring || chartConfig.meta.description[locale] ? ( { // title and the chart (subgrid layout) )} - + - + {meta.description[locale] ? ( Date: Wed, 15 Jan 2025 08:58:25 +0100 Subject: [PATCH 082/100] fix: Remove not needed blocks from layouts --- app/configurator/configurator-state/reducer.tsx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/configurator/configurator-state/reducer.tsx b/app/configurator/configurator-state/reducer.tsx index 444e10d89..fd9b562b8 100644 --- a/app/configurator/configurator-state/reducer.tsx +++ b/app/configurator/configurator-state/reducer.tsx @@ -1238,6 +1238,9 @@ export const ensureDashboardLayoutIsCorrect = ( const newBlocks = blocks.filter((block) => { return !breakpointLayoutKeys.includes(block.key); }); + const keysToRemove = breakpointLayoutKeys.filter( + (key) => !blocks.find((block) => block.key === key) + ); const cols = COLS[breakpoint as keyof typeof COLS]; const { x, y } = getPreferredEmptyCellCoords({ layouts: breakpointLayouts, @@ -1272,6 +1275,11 @@ export const ensureDashboardLayoutIsCorrect = ( }); } + for (const key of keysToRemove) { + const index = breakpointLayouts.findIndex((l) => l.i === key); + breakpointLayouts.splice(index, 1); + } + draft.layout.layouts = { ...draft.layout.layouts, [breakpoint]: breakpointLayouts, From b3db438e58e60e7e033cb714f0f8d3e647db7084 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Wed, 15 Jan 2025 09:42:15 +0100 Subject: [PATCH 083/100] feat: Add BlockMoreButton ...and move removal of a block from the panel to it. --- app/components/chart-panel.tsx | 15 ++- app/components/dashboard-shared.tsx | 116 ++++++++++++++++++ .../components/block-options-selector.tsx | 24 +--- app/locales/de/messages.po | 18 ++- app/locales/en/messages.po | 18 ++- app/locales/fr/messages.po | 18 ++- app/locales/it/messages.po | 18 ++- 7 files changed, 187 insertions(+), 40 deletions(-) create mode 100644 app/components/dashboard-shared.tsx diff --git a/app/components/chart-panel.tsx b/app/components/chart-panel.tsx index 3e04c9237..0f5ddaa51 100644 --- a/app/components/chart-panel.tsx +++ b/app/components/chart-panel.tsx @@ -11,6 +11,7 @@ import { useEffect, } from "react"; +import { ActionElementsContainer } from "@/components/action-elements-container"; import { ChartPanelLayoutCanvas, chartPanelLayoutGridClasses, @@ -20,6 +21,7 @@ import { ChartPanelLayoutVertical } from "@/components/chart-panel-layout-vertic import { ChartSelectionTabs } from "@/components/chart-selection-tabs"; import { CHART_GRID_ROW_COUNT } from "@/components/chart-shared"; import { DashboardInteractiveFilters } from "@/components/dashboard-interactive-filters"; +import { BlockMoreButton } from "@/components/dashboard-shared"; import { DragHandle } from "@/components/drag-handle"; import { Markdown } from "@/components/markdown"; import { ROW_HEIGHT } from "@/components/react-grid"; @@ -175,11 +177,14 @@ export const ChartPanelLayout = ({ {block.text[locale]}
{layouting ? ( - { - e.stopPropagation(); - }} - /> + + + { + e.stopPropagation(); + }} + /> + ) : null}
); diff --git a/app/components/dashboard-shared.tsx b/app/components/dashboard-shared.tsx new file mode 100644 index 000000000..23b426394 --- /dev/null +++ b/app/components/dashboard-shared.tsx @@ -0,0 +1,116 @@ +import { t } from "@lingui/macro"; +import { IconButton, useEventCallback } from "@mui/material"; +import { useState } from "react"; + +import { ArrowMenuTopBottom } from "@/components/arrow-menu"; +import { MenuActionItem } from "@/components/menu-action-item"; +import { + isLayouting, + useConfiguratorState, +} from "@/configurator/configurator-state"; +import SvgIcMore from "@/icons/components/IcMore"; +import { createId } from "@/utils/create-id"; +import { DISABLE_SCREENSHOT_ATTR } from "@/utils/use-screenshot"; + +export const BlockMoreButton = ({ blockKey }: { blockKey: string }) => { + const [state, dispatch] = useConfiguratorState(isLayouting); + const { layout } = state; + const [anchor, setAnchor] = useState(null); + const handleClose = useEventCallback(() => setAnchor(null)); + const handleDuplicate = useEventCallback(() => { + const key = createId(); + const block = layout.blocks.find((b) => b.key === blockKey); + + if (!block) { + return; + } + + dispatch({ + type: "LAYOUT_CHANGED", + value: { + ...layout, + blocks: [ + ...layout.blocks, + { + ...block, + key, + }, + ], + }, + }); + dispatch({ + type: "LAYOUT_ACTIVE_FIELD_CHANGED", + value: key, + }); + }); + const handleRemove = useEventCallback(() => { + dispatch({ + type: "LAYOUT_CHANGED", + value: { + ...layout, + blocks: layout.blocks.filter((b) => b.key !== blockKey), + }, + }); + + if (layout.activeField === blockKey) { + dispatch({ + type: "LAYOUT_ACTIVE_FIELD_CHANGED", + value: undefined, + }); + } + }); + + return ( + <> + setAnchor(ev.currentTarget)} + sx={{ height: "fit-content" }} + {...DISABLE_SCREENSHOT_ATTR} + data-testid="block-more-button" + > + + + +
+ { + handleDuplicate(); + handleClose(); + }} + leadingIconName="duplicate" + label={t({ id: "block-controls.duplicate", message: "Duplicate" })} + /> + { + handleRemove(); + handleClose(); + }} + leadingIconName="trash" + label={t({ id: "block-controls.delete", message: "Delete" })} + /> +
+
+ + ); +}; diff --git a/app/configurator/components/block-options-selector.tsx b/app/configurator/components/block-options-selector.tsx index 2d7492a23..120bdb164 100644 --- a/app/configurator/components/block-options-selector.tsx +++ b/app/configurator/components/block-options-selector.tsx @@ -1,5 +1,4 @@ import { Trans } from "@lingui/macro"; -import { Button, Typography } from "@mui/material"; import { useMemo } from "react"; import { @@ -12,11 +11,10 @@ import { isLayouting } from "@/configurator/configurator-state"; import { useOrderedLocales } from "@/locales/use-locale"; import { useConfiguratorState } from "@/src"; import { assert } from "@/utils/assert"; -import useEvent from "@/utils/use-event"; export const LayoutBlocksSelector = () => { const orderedLocales = useOrderedLocales(); - const [state, dispatch] = useConfiguratorState(isLayouting); + const [state] = useConfiguratorState(isLayouting); const { layout } = state; const { blocks } = layout; const activeBlock = useMemo(() => { @@ -31,16 +29,6 @@ export const LayoutBlocksSelector = () => { return activeBlock; }, [blocks, layout.activeField]); - const handleRemoveBlock = useEvent((key: string) => { - dispatch({ - type: "LAYOUT_CHANGED", - value: { - ...layout, - blocks: layout.blocks.filter((b) => b.key !== key), - }, - }); - dispatch({ type: "LAYOUT_ACTIVE_FIELD_CHANGED", value: undefined }); - }); return activeBlock ? (
{ ))} - - - - -
) : null; }; diff --git a/app/locales/de/messages.po b/app/locales/de/messages.po index 2c7d7aaaf..00952cd86 100644 --- a/app/locales/de/messages.po +++ b/app/locales/de/messages.po @@ -35,9 +35,21 @@ msgstr "[ Ohne Beschreibung ]" msgid "annotation.add.title" msgstr "[ Ohne Titel ]" -#: app/configurator/components/beta-tag.tsx -msgid "beta-tag.tooltip" -msgstr "Diese Funktion befindet sich derzeit in der Entwicklung. Möglicherweise treten Fehler auf und Leistungsprobleme." +#: app/components/dashboard-shared.tsx +msgid "block-controls.delete" +msgstr "Löschen" + +#: app/components/dashboard-shared.tsx +msgid "block-controls.delete.confirmation" +msgstr "Möchten Sie diesen Block wirklich löschen?" + +#: app/components/dashboard-shared.tsx +msgid "block-controls.delete.title" +msgstr "Block löschen?" + +#: app/components/dashboard-shared.tsx +msgid "block-controls.duplicate" +msgstr "Duplizieren" #: app/browser/dataset-browse.tsx msgid "browse-panel.organizations" diff --git a/app/locales/en/messages.po b/app/locales/en/messages.po index b265360ba..c5a24e1ab 100644 --- a/app/locales/en/messages.po +++ b/app/locales/en/messages.po @@ -35,9 +35,21 @@ msgstr "[ No Description ]" msgid "annotation.add.title" msgstr "[ No Title ]" -#: app/configurator/components/beta-tag.tsx -msgid "beta-tag.tooltip" -msgstr "This feature is currently under development, you may encounter bugs and performance problems." +#: app/components/dashboard-shared.tsx +msgid "block-controls.delete" +msgstr "Delete" + +#: app/components/dashboard-shared.tsx +msgid "block-controls.delete.confirmation" +msgstr "Are you sure you want to delete this block?" + +#: app/components/dashboard-shared.tsx +msgid "block-controls.delete.title" +msgstr "Delete block?" + +#: app/components/dashboard-shared.tsx +msgid "block-controls.duplicate" +msgstr "Duplicate" #: app/browser/dataset-browse.tsx msgid "browse-panel.organizations" diff --git a/app/locales/fr/messages.po b/app/locales/fr/messages.po index 83c101abd..5f94a431a 100644 --- a/app/locales/fr/messages.po +++ b/app/locales/fr/messages.po @@ -35,9 +35,21 @@ msgstr "[ Pas de description ]" msgid "annotation.add.title" msgstr "[ Pas de titre ]" -#: app/configurator/components/beta-tag.tsx -msgid "beta-tag.tooltip" -msgstr "Cette fonctionnalité est actuellement en cours de développement, vous pouvez rencontrer des bugs et des problèmes de performances." +#: app/components/dashboard-shared.tsx +msgid "block-controls.delete" +msgstr "Supprimer" + +#: app/components/dashboard-shared.tsx +msgid "block-controls.delete.confirmation" +msgstr "Etes-vous sûr de vouloir supprimer ce bloc ?" + +#: app/components/dashboard-shared.tsx +msgid "block-controls.delete.title" +msgstr "Supprimer le bloc ?" + +#: app/components/dashboard-shared.tsx +msgid "block-controls.duplicate" +msgstr "Dupliquer" #: app/browser/dataset-browse.tsx msgid "browse-panel.organizations" diff --git a/app/locales/it/messages.po b/app/locales/it/messages.po index f01078f11..2eecde1ed 100644 --- a/app/locales/it/messages.po +++ b/app/locales/it/messages.po @@ -35,9 +35,21 @@ msgstr "[ Nessuna descrizione ]" msgid "annotation.add.title" msgstr "[ Nessun titolo ]" -#: app/configurator/components/beta-tag.tsx -msgid "beta-tag.tooltip" -msgstr "Questa funzionalità è attualmente in fase di sviluppo, potresti riscontrare bug e problemi di prestazioni." +#: app/components/dashboard-shared.tsx +msgid "block-controls.delete" +msgstr "Elimina" + +#: app/components/dashboard-shared.tsx +msgid "block-controls.delete.confirmation" +msgstr "Sei sicuro di voler eliminare questo blocco?" + +#: app/components/dashboard-shared.tsx +msgid "block-controls.delete.title" +msgstr "Eliminare il blocco?" + +#: app/components/dashboard-shared.tsx +msgid "block-controls.duplicate" +msgstr "Duplicare" #: app/browser/dataset-browse.tsx msgid "browse-panel.organizations" From e2afbe6a53df4b060afcba470736df4da1ca652c Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Wed, 15 Jan 2025 09:44:08 +0100 Subject: [PATCH 084/100] fix: Do not open panel when shouldn't --- app/components/dashboard-shared.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/app/components/dashboard-shared.tsx b/app/components/dashboard-shared.tsx index 23b426394..2cd5fbda5 100644 --- a/app/components/dashboard-shared.tsx +++ b/app/components/dashboard-shared.tsx @@ -64,7 +64,10 @@ export const BlockMoreButton = ({ blockKey }: { blockKey: string }) => { <> setAnchor(ev.currentTarget)} + onClick={(e) => { + e.stopPropagation(); + setAnchor(e.currentTarget); + }} sx={{ height: "fit-content" }} {...DISABLE_SCREENSHOT_ATTR} data-testid="block-more-button" @@ -74,7 +77,11 @@ export const BlockMoreButton = ({ blockKey }: { blockKey: string }) => { { + // @ts-ignore this is correct + e.stopPropagation(); + handleClose(); + }} anchorOrigin={{ horizontal: "right", vertical: "bottom" }} transformOrigin={{ horizontal: "right", vertical: "top" }} > From 92e7f2c614de7382875482204ef95f79cf7f44a7 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Wed, 15 Jan 2025 09:54:53 +0100 Subject: [PATCH 085/100] feat: Add a CTA to empty text blocks --- app/components/chart-panel.tsx | 9 ++++++++- app/locales/de/messages.po | 4 ++++ app/locales/en/messages.po | 4 ++++ app/locales/fr/messages.po | 4 ++++ app/locales/it/messages.po | 4 ++++ 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/components/chart-panel.tsx b/app/components/chart-panel.tsx index 0f5ddaa51..ead7dc9c4 100644 --- a/app/components/chart-panel.tsx +++ b/app/components/chart-panel.tsx @@ -1,3 +1,4 @@ +import { Trans } from "@lingui/macro"; import { Box, BoxProps, Theme } from "@mui/material"; import { makeStyles } from "@mui/styles"; import clsx from "clsx"; @@ -156,6 +157,8 @@ export const ChartPanelLayout = ({ const renderTextBlock = useCallback( (block: LayoutTextBlock) => { + const text = block.text[locale]; + return (
- {block.text[locale]} + {text ? ( + {text} + ) : ( + [ Add text ] + )}
{layouting ? ( diff --git a/app/locales/de/messages.po b/app/locales/de/messages.po index 00952cd86..66454a93a 100644 --- a/app/locales/de/messages.po +++ b/app/locales/de/messages.po @@ -30,6 +30,10 @@ msgstr "Kein Ergebnis" msgid "annotation.add.description" msgstr "[ Ohne Beschreibung ]" +#: app/components/chart-panel.tsx +msgid "annotation.add.text" +msgstr "[ Text hinzufügen ]" + #: app/configurator/components/annotators.tsx #: app/login/components/profile-tables.tsx msgid "annotation.add.title" diff --git a/app/locales/en/messages.po b/app/locales/en/messages.po index c5a24e1ab..6afb2dc15 100644 --- a/app/locales/en/messages.po +++ b/app/locales/en/messages.po @@ -30,6 +30,10 @@ msgstr "No results" msgid "annotation.add.description" msgstr "[ No Description ]" +#: app/components/chart-panel.tsx +msgid "annotation.add.text" +msgstr "[ Add text ]" + #: app/configurator/components/annotators.tsx #: app/login/components/profile-tables.tsx msgid "annotation.add.title" diff --git a/app/locales/fr/messages.po b/app/locales/fr/messages.po index 5f94a431a..b1425ddc1 100644 --- a/app/locales/fr/messages.po +++ b/app/locales/fr/messages.po @@ -30,6 +30,10 @@ msgstr "Aucun résultat" msgid "annotation.add.description" msgstr "[ Pas de description ]" +#: app/components/chart-panel.tsx +msgid "annotation.add.text" +msgstr "[ Ajouter du texte ]" + #: app/configurator/components/annotators.tsx #: app/login/components/profile-tables.tsx msgid "annotation.add.title" diff --git a/app/locales/it/messages.po b/app/locales/it/messages.po index 2eecde1ed..b8c8b44b2 100644 --- a/app/locales/it/messages.po +++ b/app/locales/it/messages.po @@ -30,6 +30,10 @@ msgstr "Nessun risultato" msgid "annotation.add.description" msgstr "[ Nessuna descrizione ]" +#: app/components/chart-panel.tsx +msgid "annotation.add.text" +msgstr "[ Aggiungi testo ]" + #: app/configurator/components/annotators.tsx #: app/login/components/profile-tables.tsx msgid "annotation.add.title" From 8cfb53d00d5d259cfcabdf8c3c9c100b0e24291b Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Wed, 15 Jan 2025 10:39:44 +0100 Subject: [PATCH 086/100] style: Do not let ActionElementsContainer grow --- app/components/action-elements-container.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/app/components/action-elements-container.tsx b/app/components/action-elements-container.tsx index 1788b7d0f..80820b8c1 100644 --- a/app/components/action-elements-container.tsx +++ b/app/components/action-elements-container.tsx @@ -7,6 +7,7 @@ const useStyles = makeStyles((theme) => ({ display: "flex", alignItems: "center", gap: theme.spacing(2), + height: "fit-content", marginTop: "-0.33rem", }, })); From 504a555784de5df8ace873dc80014b9e1d560b4f Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Wed, 15 Jan 2025 10:40:40 +0100 Subject: [PATCH 087/100] fix: Stop event propagation --- app/components/dashboard-shared.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/components/dashboard-shared.tsx b/app/components/dashboard-shared.tsx index 2cd5fbda5..047b869b4 100644 --- a/app/components/dashboard-shared.tsx +++ b/app/components/dashboard-shared.tsx @@ -89,7 +89,8 @@ export const BlockMoreButton = ({ blockKey }: { blockKey: string }) => { { + onClick={(e) => { + e.stopPropagation(); handleDuplicate(); handleClose(); }} @@ -109,7 +110,8 @@ export const BlockMoreButton = ({ blockKey }: { blockKey: string }) => { id: "block-controls.delete.confirmation", message: "Are you sure you want to delete this block?", })} - onClick={() => { + onClick={(e) => { + e.stopPropagation(); handleRemove(); handleClose(); }} From 2f375d9a5219ba635124a66076150d4999cf0f75 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Wed, 15 Jan 2025 10:59:23 +0100 Subject: [PATCH 088/100] fix: Pass props to Markdown components --- app/components/markdown.tsx | 48 ++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/app/components/markdown.tsx b/app/components/markdown.tsx index 711aa32fc..c52664a77 100644 --- a/app/components/markdown.tsx +++ b/app/components/markdown.tsx @@ -6,14 +6,46 @@ import remarkGfm from "remark-gfm"; const components: ComponentProps["components"] = { // TODO: Maybe can be handled by Title and Description components? - h1: ({ children }) =>

{children}

, - h2: ({ children }) =>

{children}

, - h3: ({ children }) =>

{children}

, - h4: ({ children }) =>

{children}

, - h5: ({ children }) =>
{children}
, - h6: ({ children }) =>
{children}
, - p: ({ children }) =>

{children}

, - a: ({ children }) => {children}, + h1: ({ children, style, ...props }) => ( +

+ {children} +

+ ), + h2: ({ children, style, ...props }) => ( +

+ {children} +

+ ), + h3: ({ children, style, ...props }) => ( +

+ {children} +

+ ), + h4: ({ children, style, ...props }) => ( +

+ {children} +

+ ), + h5: ({ children, style, ...props }) => ( +
+ {children} +
+ ), + h6: ({ children, style, ...props }) => ( +
+ {children} +
+ ), + p: ({ children, style, ...props }) => ( +

+ {children} +

+ ), + a: ({ children, style, ...props }) => ( + + {children} + + ), }; export const Markdown = ( From 150383c99a97d1d8c5295f83ed58aad60d3933af Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Wed, 15 Jan 2025 11:02:26 +0100 Subject: [PATCH 089/100] fix: Add missing dependency --- app/configurator/components/field.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/configurator/components/field.tsx b/app/configurator/components/field.tsx index 083fc2c4b..65094d9a2 100644 --- a/app/configurator/components/field.tsx +++ b/app/configurator/components/field.tsx @@ -779,7 +779,7 @@ const useMultiFilterColorPicker = (value: string) => { }paletteId` ), }); - }, [chartConfig, colorConfigPath, colorField]); + }, [chartConfig, colorConfigPath, colorField, hasColorField]); const checkedState = dimensionId ? isMultiFilterFieldChecked(filters, dimensionId, value) From f31be3564e98090c5f31685497ffaa85dffe9482 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Thu, 16 Jan 2025 09:33:21 +0100 Subject: [PATCH 090/100] chore: Add @mdxeditor/editor --- app/package.json | 1 + yarn.lock | 1715 ++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 1666 insertions(+), 50 deletions(-) diff --git a/app/package.json b/app/package.json index 889c031f9..c5b69c84c 100644 --- a/app/package.json +++ b/app/package.json @@ -29,6 +29,7 @@ "@lingui/react": "^3.17.2", "@mapbox/mapbox-gl-supported": "^2.0.1", "@mdx-js/react": "^1.6.22", + "@mdxeditor/editor": "^3.20.0", "@mui/lab": "^5.0.0-alpha.74", "@mui/material": "^5.5.2", "@mui/styles": "5.5.1", diff --git a/yarn.lock b/yarn.lock index 70185ecef..4d9267024 100644 --- a/yarn.lock +++ b/yarn.lock @@ -257,7 +257,7 @@ "@babel/highlight" "^7.24.2" picocolors "^1.0.0" -"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0": +"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": version "7.26.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== @@ -286,7 +286,29 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.2.tgz#278b6b13664557de95b8f35b90d96785850bb56e" integrity sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg== -"@babel/core@7.12.9", "@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.10.5", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.12.9", "@babel/core@^7.14.6", "@babel/core@^7.18.9", "@babel/core@^7.23.0", "@babel/core@^7.23.2", "@babel/core@^7.24.4", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.7.7": +"@babel/core@7.12.9": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" + integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.7" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.9" + "@babel/types" "^7.12.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.10.5", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.12.9", "@babel/core@^7.18.9", "@babel/core@^7.23.0", "@babel/core@^7.23.2", "@babel/core@^7.24.4", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.7.7": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== @@ -316,6 +338,17 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.12.5", "@babel/generator@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.5.tgz#e44d4ab3176bbcaf78a5725da5f1dc28802a9458" + integrity sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw== + dependencies: + "@babel/parser" "^7.26.5" + "@babel/types" "^7.26.5" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + "@babel/generator@^7.20.14": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" @@ -594,6 +627,15 @@ "@babel/traverse" "^7.25.9" "@babel/types" "^7.25.9" +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/helper-module-transforms@^7.14.5": version "7.15.8" resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz" @@ -619,15 +661,6 @@ "@babel/helper-split-export-declaration" "^7.22.6" "@babel/helper-validator-identifier" "^7.22.20" -"@babel/helper-module-transforms@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" - integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/helper-optimise-call-expression@^7.14.5", "@babel/helper-optimise-call-expression@^7.15.4": version "7.15.4" resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz" @@ -837,7 +870,7 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.26.0": +"@babel/helpers@^7.12.5", "@babel/helpers@^7.26.0": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== @@ -882,7 +915,12 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@7.12.16", "@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.14.6", "@babel/parser@^7.14.7", "@babel/parser@^7.15.4", "@babel/parser@^7.20.15", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0", "@babel/parser@^7.24.0", "@babel/parser@^7.24.4", "@babel/parser@^7.24.5", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.2", "@babel/parser@^7.7.2": +"@babel/parser@7.12.16": + version "7.12.16" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.16.tgz#cc31257419d2c3189d394081635703f549fc1ed4" + integrity sha512-c/+u9cqV6F0+4Hpq01jnJO+GLp2DdT63ppz9Xa+6cHaajM9VFzK/iDXiKK65YtpeVwu+ctfS6iqlMqRgQRzeCw== + +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.15.4", "@babel/parser@^7.20.15", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0", "@babel/parser@^7.24.0", "@babel/parser@^7.24.4", "@babel/parser@^7.24.5", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.2", "@babel/parser@^7.26.5", "@babel/parser@^7.7.2": version "7.26.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.5.tgz#6fec9aebddef25ca57a935c86dbb915ae2da3e1f" integrity sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw== @@ -2502,6 +2540,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.14.8": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" + integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/runtime@^7.17.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.7": version "7.17.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941" @@ -2535,6 +2580,15 @@ resolved "https://registry.npmjs.org/@babel/standalone/-/standalone-7.14.6.tgz" integrity sha512-oAoSp82jhJFnXKybKTOj5QF04XxiDRyiiqrFToiU1udlBXuZoADlPmmnOcuqBrZxSNNUjzJIVK8vt838Qoqjxg== +"@babel/template@^7.12.7", "@babel/template@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/template@^7.15.4", "@babel/template@^7.3.3": version "7.15.4" resolved "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz" @@ -2562,15 +2616,6 @@ "@babel/parser" "^7.24.0" "@babel/types" "^7.24.0" -"@babel/template@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" - integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== - dependencies: - "@babel/code-frame" "^7.25.9" - "@babel/parser" "^7.25.9" - "@babel/types" "^7.25.9" - "@babel/traverse@7.12.13": version "7.12.13" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.13.tgz" @@ -2601,6 +2646,19 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.12.9": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.5.tgz#6d0be3e772ff786456c1a37538208286f6e79021" + integrity sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.5" + "@babel/parser" "^7.26.5" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.5" + debug "^4.3.1" + globals "^11.1.0" + "@babel/traverse@^7.18.9", "@babel/traverse@^7.23.2": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" @@ -2663,6 +2721,14 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" +"@babel/types@^7.12.7", "@babel/types@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.5.tgz#7a1e1c01d28e26d1fe7f8ec9567b3b92b9d07747" + integrity sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/types@^7.16.7": version "7.17.0" resolved "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz" @@ -2733,14 +2799,6 @@ "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" -"@babel/types@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.5.tgz#7a1e1c01d28e26d1fe7f8ec9567b3b92b9d07747" - integrity sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@base2/pretty-print-object@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz#371ba8be66d556812dc7fb169ebc3c08378f69d4" @@ -2779,6 +2837,387 @@ srcset "^2.0.0" url "^0.11.0" +"@codemirror/autocomplete@^6.0.0", "@codemirror/autocomplete@^6.3.2", "@codemirror/autocomplete@^6.4.0", "@codemirror/autocomplete@^6.7.1": + version "6.18.4" + resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.18.4.tgz#4394f55d6771727179f2e28a871ef46bbbeb11b1" + integrity sha512-sFAphGQIqyQZfP2ZBsSHV7xQvo9Py0rV0dW7W3IMRdS+zDuNb2l3no78CvUaWKGfzFjI4FTrLdUSj86IGb2hRA== + dependencies: + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.17.0" + "@lezer/common" "^1.0.0" + +"@codemirror/commands@^6.0.0", "@codemirror/commands@^6.1.3": + version "6.8.0" + resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-6.8.0.tgz#92f200b66f852939bd6ebb90d48c2d9e9c813d64" + integrity sha512-q8VPEFaEP4ikSlt6ZxjB3zW72+7osfAYW9i8Zu943uqbKuz6utc1+F170hyLUCUltXORjQXRyYQNfkckzA/bPQ== + dependencies: + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.4.0" + "@codemirror/view" "^6.27.0" + "@lezer/common" "^1.1.0" + +"@codemirror/lang-angular@^0.1.0": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@codemirror/lang-angular/-/lang-angular-0.1.3.tgz#83035e7e9e1f0e2ba466e83d778407b519089a28" + integrity sha512-xgeWGJQQl1LyStvndWtruUvb4SnBZDAu/gvFH/ZU+c0W25tQR8e5hq7WTwiIY2dNxnf+49mRiGI/9yxIwB6f5w== + dependencies: + "@codemirror/lang-html" "^6.0.0" + "@codemirror/lang-javascript" "^6.1.2" + "@codemirror/language" "^6.0.0" + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.3.3" + +"@codemirror/lang-cpp@^6.0.0": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@codemirror/lang-cpp/-/lang-cpp-6.0.2.tgz#076c98340c3beabde016d7d83e08eebe17254ef9" + integrity sha512-6oYEYUKHvrnacXxWxYa6t4puTlbN3dgV662BDfSH8+MfjQjVmP697/KYTDOqpxgerkvoNm7q5wlFMBeX8ZMocg== + dependencies: + "@codemirror/language" "^6.0.0" + "@lezer/cpp" "^1.0.0" + +"@codemirror/lang-css@^6.0.0", "@codemirror/lang-css@^6.0.1", "@codemirror/lang-css@^6.2.0": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@codemirror/lang-css/-/lang-css-6.3.1.tgz#763ca41aee81bb2431be55e3cfcc7cc8e91421a3" + integrity sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg== + dependencies: + "@codemirror/autocomplete" "^6.0.0" + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@lezer/common" "^1.0.2" + "@lezer/css" "^1.1.7" + +"@codemirror/lang-go@^6.0.0": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@codemirror/lang-go/-/lang-go-6.0.1.tgz#598222c90f56eae28d11069c612ca64d0306b057" + integrity sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg== + dependencies: + "@codemirror/autocomplete" "^6.0.0" + "@codemirror/language" "^6.6.0" + "@codemirror/state" "^6.0.0" + "@lezer/common" "^1.0.0" + "@lezer/go" "^1.0.0" + +"@codemirror/lang-html@^6.0.0", "@codemirror/lang-html@^6.4.0": + version "6.4.9" + resolved "https://registry.yarnpkg.com/@codemirror/lang-html/-/lang-html-6.4.9.tgz#d586f2cc9c341391ae07d1d7c545990dfa069727" + integrity sha512-aQv37pIMSlueybId/2PVSP6NPnmurFDVmZwzc7jszd2KAF8qd4VBbvNYPXWQq90WIARjsdVkPbw29pszmHws3Q== + dependencies: + "@codemirror/autocomplete" "^6.0.0" + "@codemirror/lang-css" "^6.0.0" + "@codemirror/lang-javascript" "^6.0.0" + "@codemirror/language" "^6.4.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.17.0" + "@lezer/common" "^1.0.0" + "@lezer/css" "^1.1.0" + "@lezer/html" "^1.3.0" + +"@codemirror/lang-java@^6.0.0": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@codemirror/lang-java/-/lang-java-6.0.1.tgz#03bd06334da7c8feb9dff6db01ac6d85bd2e48bb" + integrity sha512-OOnmhH67h97jHzCuFaIEspbmsT98fNdhVhmA3zCxW0cn7l8rChDhZtwiwJ/JOKXgfm4J+ELxQihxaI7bj7mJRg== + dependencies: + "@codemirror/language" "^6.0.0" + "@lezer/java" "^1.0.0" + +"@codemirror/lang-javascript@^6.0.0", "@codemirror/lang-javascript@^6.1.2": + version "6.2.2" + resolved "https://registry.yarnpkg.com/@codemirror/lang-javascript/-/lang-javascript-6.2.2.tgz#7141090b22994bef85bcc5608a3bc1257f2db2ad" + integrity sha512-VGQfY+FCc285AhWuwjYxQyUQcYurWlxdKYT4bqwr3Twnd5wP5WSeu52t4tvvuWmljT4EmgEgZCqSieokhtY8hg== + dependencies: + "@codemirror/autocomplete" "^6.0.0" + "@codemirror/language" "^6.6.0" + "@codemirror/lint" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.17.0" + "@lezer/common" "^1.0.0" + "@lezer/javascript" "^1.0.0" + +"@codemirror/lang-json@^6.0.0": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@codemirror/lang-json/-/lang-json-6.0.1.tgz#0a0be701a5619c4b0f8991f9b5e95fe33f462330" + integrity sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ== + dependencies: + "@codemirror/language" "^6.0.0" + "@lezer/json" "^1.0.0" + +"@codemirror/lang-less@^6.0.0": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@codemirror/lang-less/-/lang-less-6.0.2.tgz#2e3d82a3ddb8710e6409689cd4a28c66558d0cb8" + integrity sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ== + dependencies: + "@codemirror/lang-css" "^6.2.0" + "@codemirror/language" "^6.0.0" + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@codemirror/lang-liquid@^6.0.0": + version "6.2.2" + resolved "https://registry.yarnpkg.com/@codemirror/lang-liquid/-/lang-liquid-6.2.2.tgz#5b5a2391ac14b6af85c520b8b81ea1f344d40a62" + integrity sha512-7Dm841fk37+JQW6j2rI1/uGkJyESrjzyhiIkaLjbbR0U6aFFQvMrJn35WxQreRMADMhzkyVkZM4467OR7GR8nQ== + dependencies: + "@codemirror/autocomplete" "^6.0.0" + "@codemirror/lang-html" "^6.0.0" + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" + "@lezer/common" "^1.0.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.3.1" + +"@codemirror/lang-markdown@^6.0.0", "@codemirror/lang-markdown@^6.2.3": + version "6.3.2" + resolved "https://registry.yarnpkg.com/@codemirror/lang-markdown/-/lang-markdown-6.3.2.tgz#841a922c9305c035678600de5187c1b7a80f6c21" + integrity sha512-c/5MYinGbFxYl4itE9q/rgN/sMTjOr8XL5OWnC+EaRMLfCbVUmmubTJfdgpfcSS2SCaT7b+Q+xi3l6CgoE+BsA== + dependencies: + "@codemirror/autocomplete" "^6.7.1" + "@codemirror/lang-html" "^6.0.0" + "@codemirror/language" "^6.3.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" + "@lezer/common" "^1.2.1" + "@lezer/markdown" "^1.0.0" + +"@codemirror/lang-php@^6.0.0": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@codemirror/lang-php/-/lang-php-6.0.1.tgz#fa34cc75562178325861a5731f79bd621f57ffaa" + integrity sha512-ublojMdw/PNWa7qdN5TMsjmqkNuTBD3k6ndZ4Z0S25SBAiweFGyY68AS3xNcIOlb6DDFDvKlinLQ40vSLqf8xA== + dependencies: + "@codemirror/lang-html" "^6.0.0" + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@lezer/common" "^1.0.0" + "@lezer/php" "^1.0.0" + +"@codemirror/lang-python@^6.0.0": + version "6.1.6" + resolved "https://registry.yarnpkg.com/@codemirror/lang-python/-/lang-python-6.1.6.tgz#0c55e7e2dfa85b68be93b9692e5d3f76f284bbb2" + integrity sha512-ai+01WfZhWqM92UqjnvorkxosZ2aq2u28kHvr+N3gu012XqY2CThD67JPMHnGceRfXPDBmn1HnyqowdpF57bNg== + dependencies: + "@codemirror/autocomplete" "^6.3.2" + "@codemirror/language" "^6.8.0" + "@codemirror/state" "^6.0.0" + "@lezer/common" "^1.2.1" + "@lezer/python" "^1.1.4" + +"@codemirror/lang-rust@^6.0.0": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@codemirror/lang-rust/-/lang-rust-6.0.1.tgz#d6829fc7baa39a15bcd174a41a9e0a1bf7cf6ba8" + integrity sha512-344EMWFBzWArHWdZn/NcgkwMvZIWUR1GEBdwG8FEp++6o6vT6KL9V7vGs2ONsKxxFUPXKI0SPcWhyYyl2zPYxQ== + dependencies: + "@codemirror/language" "^6.0.0" + "@lezer/rust" "^1.0.0" + +"@codemirror/lang-sass@^6.0.0": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@codemirror/lang-sass/-/lang-sass-6.0.2.tgz#38c1b0a1326cc9f5cb2741d2cd51cfbcd7abc0b2" + integrity sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q== + dependencies: + "@codemirror/lang-css" "^6.2.0" + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@lezer/common" "^1.0.2" + "@lezer/sass" "^1.0.0" + +"@codemirror/lang-sql@^6.0.0": + version "6.8.0" + resolved "https://registry.yarnpkg.com/@codemirror/lang-sql/-/lang-sql-6.8.0.tgz#1ae68ad49f378605ff88a4cc428ba667ce056068" + integrity sha512-aGLmY4OwGqN3TdSx3h6QeA1NrvaYtF7kkoWR/+W7/JzB0gQtJ+VJxewlnE3+VImhA4WVlhmkJr109PefOOhjLg== + dependencies: + "@codemirror/autocomplete" "^6.0.0" + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@codemirror/lang-vue@^0.1.1": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@codemirror/lang-vue/-/lang-vue-0.1.3.tgz#bf79b9152cc18b4903d64c1f67e186ae045c8a97" + integrity sha512-QSKdtYTDRhEHCfo5zOShzxCmqKJvgGrZwDQSdbvCRJ5pRLWBS7pD/8e/tH44aVQT6FKm0t6RVNoSUWHOI5vNug== + dependencies: + "@codemirror/lang-html" "^6.0.0" + "@codemirror/lang-javascript" "^6.1.2" + "@codemirror/language" "^6.0.0" + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.3.1" + +"@codemirror/lang-wast@^6.0.0": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@codemirror/lang-wast/-/lang-wast-6.0.2.tgz#d2b14175e5e80d7878cbbb29e20ec90dc12d3a2b" + integrity sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q== + dependencies: + "@codemirror/language" "^6.0.0" + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@codemirror/lang-xml@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@codemirror/lang-xml/-/lang-xml-6.1.0.tgz#e3e786e1a89fdc9520efe75c1d6d3de1c40eb91c" + integrity sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg== + dependencies: + "@codemirror/autocomplete" "^6.0.0" + "@codemirror/language" "^6.4.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" + "@lezer/common" "^1.0.0" + "@lezer/xml" "^1.0.0" + +"@codemirror/lang-yaml@^6.0.0": + version "6.1.2" + resolved "https://registry.yarnpkg.com/@codemirror/lang-yaml/-/lang-yaml-6.1.2.tgz#c84280c68fa7af456a355d91183b5e537e9b7038" + integrity sha512-dxrfG8w5Ce/QbT7YID7mWZFKhdhsaTNOYjOkSIMt1qmC4VQnXSDSYVHHHn8k6kJUfIhtLo8t1JJgltlxWdsITw== + dependencies: + "@codemirror/autocomplete" "^6.0.0" + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.2.0" + "@lezer/lr" "^1.0.0" + "@lezer/yaml" "^1.0.0" + +"@codemirror/language-data@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@codemirror/language-data/-/language-data-6.5.1.tgz#5cb9413d5225ef27a577c23781bbc0b36c58bb67" + integrity sha512-0sWxeUSNlBr6OmkqybUTImADFUP0M3P0IiSde4nc24bz/6jIYzqYSgkOSLS+CBIoW1vU8Q9KUWXscBXeoMVC9w== + dependencies: + "@codemirror/lang-angular" "^0.1.0" + "@codemirror/lang-cpp" "^6.0.0" + "@codemirror/lang-css" "^6.0.0" + "@codemirror/lang-go" "^6.0.0" + "@codemirror/lang-html" "^6.0.0" + "@codemirror/lang-java" "^6.0.0" + "@codemirror/lang-javascript" "^6.0.0" + "@codemirror/lang-json" "^6.0.0" + "@codemirror/lang-less" "^6.0.0" + "@codemirror/lang-liquid" "^6.0.0" + "@codemirror/lang-markdown" "^6.0.0" + "@codemirror/lang-php" "^6.0.0" + "@codemirror/lang-python" "^6.0.0" + "@codemirror/lang-rust" "^6.0.0" + "@codemirror/lang-sass" "^6.0.0" + "@codemirror/lang-sql" "^6.0.0" + "@codemirror/lang-vue" "^0.1.1" + "@codemirror/lang-wast" "^6.0.0" + "@codemirror/lang-xml" "^6.0.0" + "@codemirror/lang-yaml" "^6.0.0" + "@codemirror/language" "^6.0.0" + "@codemirror/legacy-modes" "^6.4.0" + +"@codemirror/language@^6.0.0", "@codemirror/language@^6.3.0", "@codemirror/language@^6.3.2", "@codemirror/language@^6.4.0", "@codemirror/language@^6.6.0", "@codemirror/language@^6.8.0": + version "6.10.8" + resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.10.8.tgz#3e3a346a2b0a8cf63ee1cfe03349eb1965dce5f9" + integrity sha512-wcP8XPPhDH2vTqf181U8MbZnW+tDyPYy0UzVOa+oHORjyT+mhhom9vBd7dApJwoDz9Nb/a8kHjJIsuA/t8vNFw== + dependencies: + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.23.0" + "@lezer/common" "^1.1.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + style-mod "^4.0.0" + +"@codemirror/legacy-modes@^6.4.0": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@codemirror/legacy-modes/-/legacy-modes-6.4.2.tgz#723a55aae21304d4c112575943d3467c9040d217" + integrity sha512-HsvWu08gOIIk303eZQCal4H4t65O/qp1V4ul4zVa3MHK5FJ0gz3qz3O55FIkm+aQUcshUOjBx38t2hPiJwW5/g== + dependencies: + "@codemirror/language" "^6.0.0" + +"@codemirror/lint@^6.0.0": + version "6.8.4" + resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.8.4.tgz#7d8aa5d1a6dec89ffcc23ad45ddca2e12e90982d" + integrity sha512-u4q7PnZlJUojeRe8FJa/njJcMctISGgPQ4PnWsd9268R4ZTtU+tfFYmwkBvgcrK2+QQ8tYFVALVb5fVJykKc5A== + dependencies: + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.35.0" + crelt "^1.0.5" + +"@codemirror/merge@^6.4.0": + version "6.8.0" + resolved "https://registry.yarnpkg.com/@codemirror/merge/-/merge-6.8.0.tgz#8e78c75590e989c48079b0aae5739495f8a82bab" + integrity sha512-EcCD4OJlGz6lJaqZOFM/RE6fqM4XSQlWNWVxm2CJS1snbrbkgYLTvj8c++pFUWpJOUiNgcxvYMYkMisnC0aR6g== + dependencies: + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.17.0" + "@lezer/highlight" "^1.0.0" + style-mod "^4.1.0" + +"@codemirror/search@^6.0.0": + version "6.5.8" + resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-6.5.8.tgz#b59b3659b46184cc75d6108d7c050a4ca344c3a0" + integrity sha512-PoWtZvo7c1XFeZWmmyaOp2G0XVbOnm+fJzvghqGAktBW3cufwJUWvSCcNG0ppXiBEM05mZu6RhMtXPv2hpllig== + dependencies: + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" + crelt "^1.0.5" + +"@codemirror/state@^6.0.0", "@codemirror/state@^6.2.0", "@codemirror/state@^6.4.0", "@codemirror/state@^6.5.0": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.5.1.tgz#e5c0599f7b43cf03f19e05861317df5425c07904" + integrity sha512-3rA9lcwciEB47ZevqvD8qgbzhM9qMb8vCcQCNmDfVRPQG4JT9mSb0Jg8H7YjKGGQcFnLN323fj9jdnG59Kx6bg== + dependencies: + "@marijn/find-cluster-break" "^1.0.0" + +"@codemirror/view@^6.0.0", "@codemirror/view@^6.17.0", "@codemirror/view@^6.23.0", "@codemirror/view@^6.27.0", "@codemirror/view@^6.35.0", "@codemirror/view@^6.7.1": + version "6.36.2" + resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.36.2.tgz#aeb644e161440734ac5a153bf6e5b4a4355047be" + integrity sha512-DZ6ONbs8qdJK0fdN7AB82CgI6tYXf4HWk1wSVa0+9bhVznCuuvhQtX8bFBoy3dv8rZSQqUd8GvhVAcielcidrA== + dependencies: + "@codemirror/state" "^6.5.0" + style-mod "^4.1.0" + w3c-keyname "^2.2.4" + +"@codesandbox/nodebox@0.1.8": + version "0.1.8" + resolved "https://registry.yarnpkg.com/@codesandbox/nodebox/-/nodebox-0.1.8.tgz#2dc701005cedefac386f17a69a4c9a4f38c2325d" + integrity sha512-2VRS6JDSk+M+pg56GA6CryyUSGPjBEe8Pnae0QL3jJF1mJZJVMDKr93gJRtBbLkfZN6LD/DwMtf+2L0bpWrjqg== + dependencies: + outvariant "^1.4.0" + strict-event-emitter "^0.4.3" + +"@codesandbox/sandpack-client@^2.19.8": + version "2.19.8" + resolved "https://registry.yarnpkg.com/@codesandbox/sandpack-client/-/sandpack-client-2.19.8.tgz#45f936179aa8e012f11285ddd830911e6260a0f7" + integrity sha512-CMV4nr1zgKzVpx4I3FYvGRM5YT0VaQhALMW9vy4wZRhEyWAtJITQIqZzrTGWqB1JvV7V72dVEUCUPLfYz5hgJQ== + dependencies: + "@codesandbox/nodebox" "0.1.8" + buffer "^6.0.3" + dequal "^2.0.2" + mime-db "^1.52.0" + outvariant "1.4.0" + static-browser-server "1.0.3" + +"@codesandbox/sandpack-react@^2.10.0": + version "2.19.10" + resolved "https://registry.yarnpkg.com/@codesandbox/sandpack-react/-/sandpack-react-2.19.10.tgz#96e9a3b0c2b023c488cb2ed75e86a1ac68107844" + integrity sha512-X/7NzhR7R5pp5qYS+Gc31OzJvy+EzGz++H1YN9bJlDE+VzxTBsMN9dv3adzeo5wtxUhqexVOJS7mGr//e7KP2A== + dependencies: + "@codemirror/autocomplete" "^6.4.0" + "@codemirror/commands" "^6.1.3" + "@codemirror/lang-css" "^6.0.1" + "@codemirror/lang-html" "^6.4.0" + "@codemirror/lang-javascript" "^6.1.2" + "@codemirror/language" "^6.3.2" + "@codemirror/state" "^6.2.0" + "@codemirror/view" "^6.7.1" + "@codesandbox/sandpack-client" "^2.19.8" + "@lezer/highlight" "^1.1.3" + "@react-hook/intersection-observer" "^3.1.1" + "@stitches/core" "^1.2.6" + anser "^2.1.1" + clean-set "^1.1.2" + dequal "^2.0.2" + escape-carriage "^1.3.1" + lz-string "^1.4.4" + react-devtools-inline "4.4.0" + react-is "^17.0.2" + "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" @@ -4728,6 +5167,351 @@ resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== +"@lexical/clipboard@0.17.1", "@lexical/clipboard@^0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/clipboard/-/clipboard-0.17.1.tgz#816b2559e60c5cfb5df5c6a4d1d1dcd850662d14" + integrity sha512-OVqnEfWX8XN5xxuMPo6BfgGKHREbz++D5V5ISOiml0Z8fV/TQkdgwqbBJcUdJHGRHWSUwdK7CWGs/VALvVvZyw== + dependencies: + "@lexical/html" "0.17.1" + "@lexical/list" "0.17.1" + "@lexical/selection" "0.17.1" + "@lexical/utils" "0.17.1" + lexical "0.17.1" + +"@lexical/code@0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/code/-/code-0.17.1.tgz#1db1cd221fb6ec74342e8a6526ec8ac370f4c06b" + integrity sha512-ZspfTm6g6dN3nAb4G5bPp3SqxzdkB/bjGfa0uRKMU6/eBKtrMUgZsGxt0a8JRZ1eq2TZrQhx+l1ceRoLXii/bQ== + dependencies: + "@lexical/utils" "0.17.1" + lexical "0.17.1" + prismjs "^1.27.0" + +"@lexical/devtools-core@0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/devtools-core/-/devtools-core-0.17.1.tgz#08e0e0fe7312486a41b49d75c075d6edf60fc11e" + integrity sha512-SzL1EX9Rt5GptIo87t6nDxAc9TtYtl6DyAPNz/sCltspdd69KQgs23sTRa26/tkNFCS1jziRN7vpN3mlnmm5wA== + dependencies: + "@lexical/html" "0.17.1" + "@lexical/link" "0.17.1" + "@lexical/mark" "0.17.1" + "@lexical/table" "0.17.1" + "@lexical/utils" "0.17.1" + lexical "0.17.1" + +"@lexical/dragon@0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/dragon/-/dragon-0.17.1.tgz#e196a8a226889f0d0a7ef271163e9cecd53b8a85" + integrity sha512-lhBRKP7RlhiVCLtF0qiNqmMhEO6cQB43sMe7d4bvuY1G2++oKY/XAJPg6QJZdXRrCGRQ6vZ26QRNhRPmCxL5Ng== + dependencies: + lexical "0.17.1" + +"@lexical/hashtag@0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/hashtag/-/hashtag-0.17.1.tgz#137896cff6d7d2e3638cfc8cadf1d3e035809c14" + integrity sha512-XtP0BI8vEewAe7tzq9MC49UPUvuChuNJI/jqFp+ezZlt/RUq0BClQCOPuSlrTJhluvE2rWnUnOnVMk8ILRvggQ== + dependencies: + "@lexical/utils" "0.17.1" + lexical "0.17.1" + +"@lexical/history@0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/history/-/history-0.17.1.tgz#864f8bd5450bc6a2b513e02c42f022299400e63b" + integrity sha512-OU/ohajz4FXchUhghsWC7xeBPypFe50FCm5OePwo767G7P233IztgRKIng2pTT4zhCPW7S6Mfl53JoFHKehpWA== + dependencies: + "@lexical/utils" "0.17.1" + lexical "0.17.1" + +"@lexical/html@0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/html/-/html-0.17.1.tgz#746ecfeea6a1aef3b0a5ce821cf059262f182dd5" + integrity sha512-yGG+K2DXl7Wn2DpNuZ0Y3uCHJgfHkJN3/MmnFb4jLnH1FoJJiuy7WJb/BRRh9H+6xBJ9v70iv+kttDJ0u1xp5w== + dependencies: + "@lexical/selection" "0.17.1" + "@lexical/utils" "0.17.1" + lexical "0.17.1" + +"@lexical/link@0.17.1", "@lexical/link@^0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/link/-/link-0.17.1.tgz#ef93c41710e33028512986334c98df7f0ad285c4" + integrity sha512-qFJEKBesZAtR8kfJfIVXRFXVw6dwcpmGCW7duJbtBRjdLjralOxrlVKyFhW9PEXGhi4Mdq2Ux16YnnDncpORdQ== + dependencies: + "@lexical/utils" "0.17.1" + lexical "0.17.1" + +"@lexical/list@0.17.1", "@lexical/list@^0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/list/-/list-0.17.1.tgz#8b29d42fe310b25de0a160577adf5fc0b7c2a874" + integrity sha512-k9ZnmQuBvW+xVUtWJZwoGtiVG2cy+hxzkLGU4jTq1sqxRIoSeGcjvhFAK8JSEj4i21SgkB1FmkWXoYK5kbwtRA== + dependencies: + "@lexical/utils" "0.17.1" + lexical "0.17.1" + +"@lexical/mark@0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/mark/-/mark-0.17.1.tgz#58e74f494e3dc4a43b5b5efd1b28436f2941f937" + integrity sha512-V82SSRjvygmV+ZMwVpy5gwgr2ZDrJpl3TvEDO+G5I4SDSjbgvua8hO4dKryqiDVlooxQq9dsou0GrZ9Qtm6rYg== + dependencies: + "@lexical/utils" "0.17.1" + lexical "0.17.1" + +"@lexical/markdown@0.17.1", "@lexical/markdown@^0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/markdown/-/markdown-0.17.1.tgz#e5435f4aa711f0859433eba2b96ee2afb04b636a" + integrity sha512-uexR9snyT54jfQTrbr/GZAtzX+8Oyykr4p1HS0vCVL1KU5MDuP2PoyFfOv3rcfB2TASc+aYiINhU2gSXzwCHNg== + dependencies: + "@lexical/code" "0.17.1" + "@lexical/link" "0.17.1" + "@lexical/list" "0.17.1" + "@lexical/rich-text" "0.17.1" + "@lexical/text" "0.17.1" + "@lexical/utils" "0.17.1" + lexical "0.17.1" + +"@lexical/offset@0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/offset/-/offset-0.17.1.tgz#3c008d9a0eb17ff0a056e6db4eab61f1ae909522" + integrity sha512-fX0ZSIFWwUKAjxf6l21vyXFozJGExKWyWxA+EMuOloNAGotHnAInxep0Mt8t/xcvHs7luuyQUxEPw7YrTJP7aw== + dependencies: + lexical "0.17.1" + +"@lexical/overflow@0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/overflow/-/overflow-0.17.1.tgz#f158c5498cac353764d7f0c8c53b42ee14582f5b" + integrity sha512-oElVDq486R3rO2+Zz0EllXJGpW3tN0tfcH+joZ5h36+URKuNeKddqkJuDRvgSLOr9l8Jhtv3+/YKduPJVKMz6w== + dependencies: + lexical "0.17.1" + +"@lexical/plain-text@0.17.1", "@lexical/plain-text@^0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/plain-text/-/plain-text-0.17.1.tgz#da03dfee8862622c150e64db823065a4eff751cd" + integrity sha512-CSvi4j1a4ame0OAvOKUCCmn2XrNsWcST4lExGTa9Ei/VIh8IZ+a97h4Uby8T3lqOp10x+oiizYWzY30pb9QaBg== + dependencies: + "@lexical/clipboard" "0.17.1" + "@lexical/selection" "0.17.1" + "@lexical/utils" "0.17.1" + lexical "0.17.1" + +"@lexical/react@^0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/react/-/react-0.17.1.tgz#ec9595e6d554d3d8787885db4558848233c2ce33" + integrity sha512-DI4k25tO0E1WyozrjaLgKMOmLjOB7+39MT4eZN9brPlU7g+w0wzdGbTZUPgPmFGIKPK+MSLybCwAJCK97j8HzQ== + dependencies: + "@lexical/clipboard" "0.17.1" + "@lexical/code" "0.17.1" + "@lexical/devtools-core" "0.17.1" + "@lexical/dragon" "0.17.1" + "@lexical/hashtag" "0.17.1" + "@lexical/history" "0.17.1" + "@lexical/link" "0.17.1" + "@lexical/list" "0.17.1" + "@lexical/mark" "0.17.1" + "@lexical/markdown" "0.17.1" + "@lexical/overflow" "0.17.1" + "@lexical/plain-text" "0.17.1" + "@lexical/rich-text" "0.17.1" + "@lexical/selection" "0.17.1" + "@lexical/table" "0.17.1" + "@lexical/text" "0.17.1" + "@lexical/utils" "0.17.1" + "@lexical/yjs" "0.17.1" + lexical "0.17.1" + react-error-boundary "^3.1.4" + +"@lexical/rich-text@0.17.1", "@lexical/rich-text@^0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/rich-text/-/rich-text-0.17.1.tgz#c74b8d5d2ca767e021c313e4f3258e1ecf5cd1a6" + integrity sha512-T3kvj4P1OpedX9jvxN3WN8NP1Khol6mCW2ScFIRNRz2dsXgyN00thH1Q1J/uyu7aKyGS7rzcY0rb1Pz1qFufqQ== + dependencies: + "@lexical/clipboard" "0.17.1" + "@lexical/selection" "0.17.1" + "@lexical/utils" "0.17.1" + lexical "0.17.1" + +"@lexical/selection@0.17.1", "@lexical/selection@^0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/selection/-/selection-0.17.1.tgz#9a537e69fec4e5682b43b226239c78fd7af19811" + integrity sha512-qBKVn+lMV2YIoyRELNr1/QssXx/4c0id9NCB/BOuYlG8du5IjviVJquEF56NEv2t0GedDv4BpUwkhXT2QbNAxA== + dependencies: + lexical "0.17.1" + +"@lexical/table@0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/table/-/table-0.17.1.tgz#62473f95a96c44ab20e4a1c1dec4b53a5093897c" + integrity sha512-2fUYPmxhyuMQX3MRvSsNaxbgvwGNJpHaKx1Ldc+PT2MvDZ6ALZkfsxbi0do54Q3i7dOon8/avRp4TuVaCnqvoA== + dependencies: + "@lexical/utils" "0.17.1" + lexical "0.17.1" + +"@lexical/text@0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/text/-/text-0.17.1.tgz#b54ce8c7e6d891e063321d340172053bb43bbd87" + integrity sha512-zD2pAGXaMfPpT8PeNrx3+n0+jGnQORHyn0NEBO+hnyacKfUq5z5sI6Gebsq5NwH789bRadmJM5LvX5w8fsuv6w== + dependencies: + lexical "0.17.1" + +"@lexical/utils@0.17.1", "@lexical/utils@^0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/utils/-/utils-0.17.1.tgz#58465121a977a04b7995efde6fde8ca97cbfff8d" + integrity sha512-jCQER5EsvhLNxKH3qgcpdWj/necUb82Xjp8qWQ3c0tyL07hIRm2tDRA/s9mQmvcP855HEZSmGVmR5SKtkcEAVg== + dependencies: + "@lexical/list" "0.17.1" + "@lexical/selection" "0.17.1" + "@lexical/table" "0.17.1" + lexical "0.17.1" + +"@lexical/yjs@0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@lexical/yjs/-/yjs-0.17.1.tgz#6d13506f168f465fd6e68cc64aa822b6c49adedb" + integrity sha512-9mn5PDtaH5uLMH6hQ59EAx5FkRzmJJFcVs3E6zSIbtgkG3UASR3CFEfgsLKTjl/GC5NnTGuMck+jXaupDVBhOg== + dependencies: + "@lexical/offset" "0.17.1" + lexical "0.17.1" + +"@lezer/common@^1.0.0", "@lezer/common@^1.0.2", "@lezer/common@^1.1.0", "@lezer/common@^1.2.0", "@lezer/common@^1.2.1": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.2.3.tgz#138fcddab157d83da557554851017c6c1e5667fd" + integrity sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA== + +"@lezer/cpp@^1.0.0": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@lezer/cpp/-/cpp-1.1.2.tgz#1db93b09e011e8a7a08c347c9d5b7749971253bf" + integrity sha512-macwKtyeUO0EW86r3xWQCzOV9/CF8imJLpJlPv3sDY57cPGeUZ8gXWOWNlJr52TVByMV3PayFQCA5SHEERDmVQ== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@lezer/css@^1.1.0", "@lezer/css@^1.1.7": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@lezer/css/-/css-1.1.9.tgz#404563d361422c5a1fe917295f1527ee94845ed1" + integrity sha512-TYwgljcDv+YrV0MZFFvYFQHCfGgbPMR6nuqLabBdmZoFH3EP1gvw8t0vae326Ne3PszQkbXfVBjCnf3ZVCr0bA== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@lezer/go@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@lezer/go/-/go-1.0.0.tgz#26cd2463f8583e630f52e714dca6d7420c5f7d7e" + integrity sha512-co9JfT3QqX1YkrMmourYw2Z8meGC50Ko4d54QEcQbEYpvdUvN4yb0NBZdn/9ertgvjsySxHsKzH3lbm3vqJ4Jw== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@lezer/highlight@^1.0.0", "@lezer/highlight@^1.1.3", "@lezer/highlight@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@lezer/highlight/-/highlight-1.2.1.tgz#596fa8f9aeb58a608be0a563e960c373cbf23f8b" + integrity sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA== + dependencies: + "@lezer/common" "^1.0.0" + +"@lezer/html@^1.3.0": + version "1.3.10" + resolved "https://registry.yarnpkg.com/@lezer/html/-/html-1.3.10.tgz#1be9a029a6fe835c823b20a98a449a630416b2af" + integrity sha512-dqpT8nISx/p9Do3AchvYGV3qYc4/rKr3IBZxlHmpIKam56P47RSHkSF5f13Vu9hebS1jM0HmtJIwLbWz1VIY6w== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@lezer/java@^1.0.0": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@lezer/java/-/java-1.1.3.tgz#9efd6a29b4142d07f211076a6fb5e8061c85e147" + integrity sha512-yHquUfujwg6Yu4Fd1GNHCvidIvJwi/1Xu2DaKl/pfWIA2c1oXkVvawH3NyXhCaFx4OdlYBVX5wvz2f7Aoa/4Xw== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@lezer/javascript@^1.0.0": + version "1.4.21" + resolved "https://registry.yarnpkg.com/@lezer/javascript/-/javascript-1.4.21.tgz#8ebf7d1f891c70e3d00864f5a03ac42c75d19492" + integrity sha512-lL+1fcuxWYPURMM/oFZLEDm0XuLN128QPV+VuGtKpeaOGdcl9F2LYC3nh1S9LkPqx9M0mndZFdXCipNAZpzIkQ== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.1.3" + "@lezer/lr" "^1.3.0" + +"@lezer/json@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@lezer/json/-/json-1.0.3.tgz#e773a012ad0088fbf07ce49cfba875cc9e5bc05f" + integrity sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@lezer/lr@^1.0.0", "@lezer/lr@^1.1.0", "@lezer/lr@^1.3.0", "@lezer/lr@^1.3.1", "@lezer/lr@^1.3.3", "@lezer/lr@^1.4.0": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.4.2.tgz#931ea3dea8e9de84e90781001dae30dea9ff1727" + integrity sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA== + dependencies: + "@lezer/common" "^1.0.0" + +"@lezer/markdown@^1.0.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@lezer/markdown/-/markdown-1.4.0.tgz#404455209fbc65c029b865409efe4b6d36778ab5" + integrity sha512-mk4MYeq6ZQdxgsgRAe0G7kqPRV6Desajfa14TcHoGGXIqqj1/2ARN31VFpmrXDgvXiGBWpA7RXtv0he+UdTkGw== + dependencies: + "@lezer/common" "^1.0.0" + "@lezer/highlight" "^1.0.0" + +"@lezer/php@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@lezer/php/-/php-1.0.2.tgz#7c291631fc1e7f7efe99977522bc48bdc732658a" + integrity sha512-GN7BnqtGRpFyeoKSEqxvGvhJQiI4zkgmYnDk/JIyc7H7Ifc1tkPnUn/R2R8meH3h/aBf5rzjvU8ZQoyiNDtDrA== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.1.0" + +"@lezer/python@^1.1.4": + version "1.1.15" + resolved "https://registry.yarnpkg.com/@lezer/python/-/python-1.1.15.tgz#14a21b3bf1997d1b578f0bb959bf2062641798a2" + integrity sha512-aVQ43m2zk4FZYedCqL0KHPEUsqZOrmAvRhkhHlVPnDD1HODDyyQv5BRIuod4DadkgBEZd53vQOtXTonNbEgjrQ== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@lezer/rust@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@lezer/rust/-/rust-1.0.2.tgz#cc9a75605d67182a0e799ac40b1965a61dcc6ef0" + integrity sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@lezer/sass@^1.0.0": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@lezer/sass/-/sass-1.0.7.tgz#e90066b1d386eee6160edc88a39293844e4ba106" + integrity sha512-8HLlOkuX/SMHOggI2DAsXUw38TuURe+3eQ5hiuk9QmYOUyC55B1dYEIMkav5A4IELVaW4e1T4P9WRiI5ka4mdw== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@lezer/xml@^1.0.0": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@lezer/xml/-/xml-1.0.6.tgz#908c203923288f854eb8e2f4d9b06c437e8610b9" + integrity sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + +"@lezer/yaml@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@lezer/yaml/-/yaml-1.0.3.tgz#b23770ab42b390056da6b187d861b998fd60b1ff" + integrity sha512-GuBLekbw9jDBDhGur82nuwkxKQ+a3W5H0GfaAthDXcAu+XdpS43VlnxA9E9hllkpSP5ellRDKjLLj7Lu9Wr6xA== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.4.0" + "@lingui/babel-plugin-extract-messages@3.17.2": version "3.17.2" resolved "https://registry.yarnpkg.com/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-3.17.2.tgz#0df680b3721e7c931d037f2435277da316219e45" @@ -4974,6 +5758,11 @@ rw "^1.3.3" sort-object "^3.0.3" +"@marijn/find-cluster-break@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz#775374306116d51c0c500b8c4face0f9a04752d8" + integrity sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g== + "@math.gl/core@3.6.3", "@math.gl/core@^3.6.2": version "3.6.3" resolved "https://registry.yarnpkg.com/@math.gl/core/-/core-3.6.3.tgz#a6bf796ed421093099749d609de8d99a3ac20a53" @@ -5070,6 +5859,69 @@ resolved "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz" integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== +"@mdxeditor/editor@^3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@mdxeditor/editor/-/editor-3.20.0.tgz#d70f75d90149b7b4f58873a6002e621f19aa2d64" + integrity sha512-vt/2jrse+xjT2Lnx/KT9jbCEg+93GBzDSQNSdBYcyJztz34dOYZjQmT5NDH7tdcMOSL007PvLCKXbO7YQ96R6g== + dependencies: + "@codemirror/lang-markdown" "^6.2.3" + "@codemirror/language-data" "^6.5.1" + "@codemirror/merge" "^6.4.0" + "@codemirror/state" "^6.4.0" + "@codemirror/view" "^6.23.0" + "@codesandbox/sandpack-react" "^2.10.0" + "@lexical/clipboard" "^0.17.1" + "@lexical/link" "^0.17.1" + "@lexical/list" "^0.17.1" + "@lexical/markdown" "^0.17.1" + "@lexical/plain-text" "^0.17.1" + "@lexical/react" "^0.17.1" + "@lexical/rich-text" "^0.17.1" + "@lexical/selection" "^0.17.1" + "@lexical/utils" "^0.17.1" + "@mdxeditor/gurx" "^1.1.4" + "@radix-ui/colors" "^3.0.0" + "@radix-ui/react-dialog" "^1.0.5" + "@radix-ui/react-icons" "^1.3.0" + "@radix-ui/react-popover" "^1.0.7" + "@radix-ui/react-select" "^2.0.0" + "@radix-ui/react-toggle-group" "^1.0.4" + "@radix-ui/react-toolbar" "^1.0.4" + "@radix-ui/react-tooltip" "^1.0.7" + classnames "^2.3.2" + cm6-theme-basic-light "^0.2.0" + codemirror "^6.0.1" + downshift "^7.6.0" + js-yaml "4.1.0" + lexical "^0.17.1" + mdast-util-directive "^3.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-frontmatter "^2.0.1" + mdast-util-gfm-strikethrough "^2.0.0" + mdast-util-gfm-table "^2.0.0" + mdast-util-gfm-task-list-item "^2.0.0" + mdast-util-mdx "^3.0.0" + mdast-util-mdx-jsx "^3.0.0" + mdast-util-to-markdown "^2.1.0" + micromark-extension-directive "^3.0.0" + micromark-extension-frontmatter "^2.0.0" + micromark-extension-gfm-strikethrough "^2.0.0" + micromark-extension-gfm-table "^2.0.0" + micromark-extension-gfm-task-list-item "^2.0.1" + micromark-extension-mdx-jsx "^3.0.0" + micromark-extension-mdx-md "^2.0.0" + micromark-extension-mdxjs "^3.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.1" + micromark-util-symbol "^2.0.0" + react-hook-form "^7.44.2" + unidiff "^1.0.2" + +"@mdxeditor/gurx@^1.1.4": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@mdxeditor/gurx/-/gurx-1.2.3.tgz#088ecff5cec85f8d9667a599a23d15fb167e57c0" + integrity sha512-5DQOlEx46oN9spggrC8husAGAhVoEFBGIYKN48es08XhRUbSU6l5bcIQYwRrQaY8clU1tExIcXzw8/fNnoxjpg== + "@messageformat/parser@^5.0.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@messageformat/parser/-/parser-5.1.0.tgz#05e4851c782d633ad735791dd0a68ee65d2a7201" @@ -5521,6 +6373,11 @@ resolved "https://registry.yarnpkg.com/@oclif/screen/-/screen-1.0.4.tgz#b740f68609dfae8aa71c3a6cab15d816407ba493" integrity sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw== +"@open-draft/deferred-promise@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz#4a822d10f6f0e316be4d67b4d4f8c9a124b073bd" + integrity sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA== + "@panva/hkdf@^1.0.2": version "1.1.1" resolved "https://registry.yarnpkg.com/@panva/hkdf/-/hkdf-1.1.1.tgz#ab9cd8755d1976e72fc77a00f7655a64efe6cd5d" @@ -5744,6 +6601,11 @@ resolved "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz" integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= +"@radix-ui/colors@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/colors/-/colors-3.0.0.tgz#e8a591a303c44e503bd1212cacf40a09511165e0" + integrity sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg== + "@radix-ui/number@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.0.1.tgz#644161a3557f46ed38a042acf4a770e826021674" @@ -5751,6 +6613,11 @@ dependencies: "@babel/runtime" "^7.13.10" +"@radix-ui/number@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.1.0.tgz#1e95610461a09cdf8bb05c152e76ca1278d5da46" + integrity sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ== + "@radix-ui/primitive@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.0.1.tgz#e46f9958b35d10e9f6dc71c497305c22e3e55dbd" @@ -5758,6 +6625,11 @@ dependencies: "@babel/runtime" "^7.13.10" +"@radix-ui/primitive@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.1.tgz#fc169732d755c7fbad33ba8d0cd7fd10c90dc8e3" + integrity sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA== + "@radix-ui/react-arrow@1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz#c24f7968996ed934d57fe6cde5d6ec7266e1d25d" @@ -5766,6 +6638,13 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-primitive" "1.0.3" +"@radix-ui/react-arrow@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.1.tgz#2103721933a8bfc6e53bbfbdc1aaad5fc8ba0dd7" + integrity sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w== + dependencies: + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-collection@1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.0.3.tgz#9595a66e09026187524a36c6e7e9c7d286469159" @@ -5777,6 +6656,16 @@ "@radix-ui/react-primitive" "1.0.3" "@radix-ui/react-slot" "1.0.2" +"@radix-ui/react-collection@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.1.tgz#be2c7e01d3508e6d4b6d838f492e7d182f17d3b0" + integrity sha512-LwT3pSho9Dljg+wY2KN2mrrh6y3qELfftINERIzBUO9e0N+t0oMTyn3k9iv+ZqgrwGkRnLpNJrsMv9BZlt2yuA== + dependencies: + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-slot" "1.1.1" + "@radix-ui/react-compose-refs@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz#7ed868b66946aa6030e580b1ffca386dd4d21989" @@ -5784,6 +6673,11 @@ dependencies: "@babel/runtime" "^7.13.10" +"@radix-ui/react-compose-refs@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz#6f766faa975f8738269ebb8a23bad4f5a8d2faec" + integrity sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw== + "@radix-ui/react-context@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.0.1.tgz#fe46e67c96b240de59187dcb7a1a50ce3e2ec00c" @@ -5791,6 +6685,31 @@ dependencies: "@babel/runtime" "^7.13.10" +"@radix-ui/react-context@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.1.tgz#82074aa83a472353bb22e86f11bcbd1c61c4c71a" + integrity sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q== + +"@radix-ui/react-dialog@^1.0.5": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.1.4.tgz#d68e977acfcc0d044b9dab47b6dd2c179d2b3191" + integrity sha512-Ur7EV1IwQGCyaAuyDRiOLA5JIUZxELJljF+MbM/2NC0BYwfuRrbpS30BiQBJrVruscgUkieKkqXYDOoByaxIoA== + dependencies: + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-dismissable-layer" "1.1.3" + "@radix-ui/react-focus-guards" "1.1.1" + "@radix-ui/react-focus-scope" "1.1.1" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-portal" "1.1.3" + "@radix-ui/react-presence" "1.1.2" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-slot" "1.1.1" + "@radix-ui/react-use-controllable-state" "1.1.0" + aria-hidden "^1.1.1" + react-remove-scroll "^2.6.1" + "@radix-ui/react-direction@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.0.1.tgz#9cb61bf2ccf568f3421422d182637b7f47596c9b" @@ -5798,6 +6717,11 @@ dependencies: "@babel/runtime" "^7.13.10" +"@radix-ui/react-direction@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.0.tgz#a7d39855f4d077adc2a1922f9c353c5977a09cdc" + integrity sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg== + "@radix-ui/react-dismissable-layer@1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz#883a48f5f938fa679427aa17fcba70c5494c6978" @@ -5810,6 +6734,17 @@ "@radix-ui/react-use-callback-ref" "1.0.1" "@radix-ui/react-use-escape-keydown" "1.0.3" +"@radix-ui/react-dismissable-layer@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.3.tgz#4ee0f0f82d53bf5bd9db21665799bb0d1bad5ed8" + integrity sha512-onrWn/72lQoEucDmJnr8uczSNTujT0vJnA/X5+3AkChVPowr8n1yvIKIabhWyMQeMvvmdpsvcyDqx3X1LEXCPg== + dependencies: + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-escape-keydown" "1.1.0" + "@radix-ui/react-focus-guards@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz#1ea7e32092216b946397866199d892f71f7f98ad" @@ -5817,6 +6752,11 @@ dependencies: "@babel/runtime" "^7.13.10" +"@radix-ui/react-focus-guards@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz#8635edd346304f8b42cae86b05912b61aef27afe" + integrity sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg== + "@radix-ui/react-focus-scope@1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.3.tgz#9c2e8d4ed1189a1d419ee61edd5c1828726472f9" @@ -5827,6 +6767,20 @@ "@radix-ui/react-primitive" "1.0.3" "@radix-ui/react-use-callback-ref" "1.0.1" +"@radix-ui/react-focus-scope@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.1.tgz#5c602115d1db1c4fcfa0fae4c3b09bb8919853cb" + integrity sha512-01omzJAYRxXdG2/he/+xy+c8a8gCydoQ1yOxnWNcRhrrBW5W+RQJ22EK1SaO8tb3WoUsuEw7mJjBozPzihDFjA== + dependencies: + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-use-callback-ref" "1.1.0" + +"@radix-ui/react-icons@^1.3.0": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-icons/-/react-icons-1.3.2.tgz#09be63d178262181aeca5fb7f7bc944b10a7f441" + integrity sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g== + "@radix-ui/react-id@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.0.1.tgz#73cdc181f650e4df24f0b6a5b7aa426b912c88c0" @@ -5835,6 +6789,34 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-use-layout-effect" "1.0.1" +"@radix-ui/react-id@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.0.tgz#de47339656594ad722eb87f94a6b25f9cffae0ed" + integrity sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.0" + +"@radix-ui/react-popover@^1.0.7": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popover/-/react-popover-1.1.4.tgz#d83104e5fb588870a673b55f3387da4844e5836e" + integrity sha512-aUACAkXx8LaFymDma+HQVji7WhvEhpFJ7+qPz17Nf4lLZqtreGOFRiNQWQmhzp7kEWg9cOyyQJpdIMUMPc/CPw== + dependencies: + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-dismissable-layer" "1.1.3" + "@radix-ui/react-focus-guards" "1.1.1" + "@radix-ui/react-focus-scope" "1.1.1" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-popper" "1.2.1" + "@radix-ui/react-portal" "1.1.3" + "@radix-ui/react-presence" "1.1.2" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-slot" "1.1.1" + "@radix-ui/react-use-controllable-state" "1.1.0" + aria-hidden "^1.1.1" + react-remove-scroll "^2.6.1" + "@radix-ui/react-popper@1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.1.2.tgz#4c0b96fcd188dc1f334e02dba2d538973ad842e9" @@ -5852,6 +6834,22 @@ "@radix-ui/react-use-size" "1.0.1" "@radix-ui/rect" "1.0.1" +"@radix-ui/react-popper@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.1.tgz#2fc66cfc34f95f00d858924e3bee54beae2dff0a" + integrity sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw== + dependencies: + "@floating-ui/react-dom" "^2.0.0" + "@radix-ui/react-arrow" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-rect" "1.1.0" + "@radix-ui/react-use-size" "1.1.0" + "@radix-ui/rect" "1.1.0" + "@radix-ui/react-portal@1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.0.3.tgz#ffb961244c8ed1b46f039e6c215a6c4d9989bda1" @@ -5860,6 +6858,22 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-primitive" "1.0.3" +"@radix-ui/react-portal@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.3.tgz#b0ea5141103a1671b715481b13440763d2ac4440" + integrity sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw== + dependencies: + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-use-layout-effect" "1.1.0" + +"@radix-ui/react-presence@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.2.tgz#bb764ed8a9118b7ec4512da5ece306ded8703cdc" + integrity sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg== + dependencies: + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-primitive@1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz#d49ea0f3f0b2fe3ab1cb5667eb03e8b843b914d0" @@ -5868,6 +6882,13 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-slot" "1.0.2" +"@radix-ui/react-primitive@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz#6d9efc550f7520135366f333d1e820cf225fad9e" + integrity sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg== + dependencies: + "@radix-ui/react-slot" "1.1.1" + "@radix-ui/react-roving-focus@1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz#e90c4a6a5f6ac09d3b8c1f5b5e81aab2f0db1974" @@ -5884,6 +6905,21 @@ "@radix-ui/react-use-callback-ref" "1.0.1" "@radix-ui/react-use-controllable-state" "1.0.1" +"@radix-ui/react-roving-focus@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.1.tgz#3b3abb1e03646937f28d9ab25e96343667ca6520" + integrity sha512-QE1RoxPGJ/Nm8Qmk0PxP8ojmoaS67i0s7hVssS7KuI2FQoc/uzVlZsqKfQvxPE6D8hICCPHJ4D88zNhT3OOmkw== + dependencies: + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-collection" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-direction" "1.1.0" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-select@^1.2.2": version "1.2.2" resolved "https://registry.yarnpkg.com/@radix-ui/react-select/-/react-select-1.2.2.tgz#caa981fa0d672cf3c1b2a5240135524e69b32181" @@ -5912,6 +6948,33 @@ aria-hidden "^1.1.1" react-remove-scroll "2.5.5" +"@radix-ui/react-select@^2.0.0": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-select/-/react-select-2.1.4.tgz#8957050203640b668a883a225260c403514b3772" + integrity sha512-pOkb2u8KgO47j/h7AylCj7dJsm69BXcjkrvTqMptFqsE2i0p8lHkfgneXKjAgPzBMivnoMyt8o4KiV4wYzDdyQ== + dependencies: + "@radix-ui/number" "1.1.0" + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-collection" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-direction" "1.1.0" + "@radix-ui/react-dismissable-layer" "1.1.3" + "@radix-ui/react-focus-guards" "1.1.1" + "@radix-ui/react-focus-scope" "1.1.1" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-popper" "1.2.1" + "@radix-ui/react-portal" "1.1.3" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-slot" "1.1.1" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-previous" "1.1.0" + "@radix-ui/react-visually-hidden" "1.1.1" + aria-hidden "^1.1.1" + react-remove-scroll "^2.6.1" + "@radix-ui/react-separator@1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-separator/-/react-separator-1.0.3.tgz#be5a931a543d5726336b112f465f58585c04c8aa" @@ -5928,6 +6991,13 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-compose-refs" "1.0.1" +"@radix-ui/react-slot@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.1.1.tgz#ab9a0ffae4027db7dc2af503c223c978706affc3" + integrity sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g== + dependencies: + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-toggle-group@1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@radix-ui/react-toggle-group/-/react-toggle-group-1.0.4.tgz#f5b5c8c477831b013bec3580c55e20a68179d6ec" @@ -5942,6 +7012,19 @@ "@radix-ui/react-toggle" "1.0.3" "@radix-ui/react-use-controllable-state" "1.0.1" +"@radix-ui/react-toggle-group@^1.0.4": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.1.tgz#81fc65212758f3a4c9d505d38c0053f463c2e247" + integrity sha512-OgDLZEA30Ylyz8YSXvnGqIHtERqnUt1KUYTKdw/y8u7Ci6zGiJfXc02jahmcSNK3YcErqioj/9flWC9S1ihfwg== + dependencies: + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-direction" "1.1.0" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-roving-focus" "1.1.1" + "@radix-ui/react-toggle" "1.1.1" + "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-toggle@1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-toggle/-/react-toggle-1.0.3.tgz#aecb2945630d1dc5c512997556c57aba894e539e" @@ -5952,6 +7035,15 @@ "@radix-ui/react-primitive" "1.0.3" "@radix-ui/react-use-controllable-state" "1.0.1" +"@radix-ui/react-toggle@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-toggle/-/react-toggle-1.1.1.tgz#939162f87d2c6cfba912a9908ed5ee651bd1ce8f" + integrity sha512-i77tcgObYr743IonC1hrsnnPmszDRn8p+EGUsUt+5a/JFn28fxaM88Py6V2mc8J5kELMWishI0rLnuGLFD/nnQ== + dependencies: + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-toolbar@^1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@radix-ui/react-toolbar/-/react-toolbar-1.0.4.tgz#3211a105567fa016e89921b5b514877f833de559" @@ -5966,6 +7058,24 @@ "@radix-ui/react-separator" "1.0.3" "@radix-ui/react-toggle-group" "1.0.4" +"@radix-ui/react-tooltip@^1.0.7": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-1.1.6.tgz#eab98e9a5c876ef0abfae3cfeee229870528ed06" + integrity sha512-TLB5D8QLExS1uDn7+wH/bjEmRurNMTzNrtq7IjaS4kjion9NtzsTGkvR5+i7yc9q01Pi2KMM2cN3f8UG4IvvXA== + dependencies: + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-dismissable-layer" "1.1.3" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-popper" "1.2.1" + "@radix-ui/react-portal" "1.1.3" + "@radix-ui/react-presence" "1.1.2" + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-slot" "1.1.1" + "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-visually-hidden" "1.1.1" + "@radix-ui/react-use-callback-ref@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz#f4bb1f27f2023c984e6534317ebc411fc181107a" @@ -5973,6 +7083,11 @@ dependencies: "@babel/runtime" "^7.13.10" +"@radix-ui/react-use-callback-ref@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz#bce938ca413675bc937944b0d01ef6f4a6dc5bf1" + integrity sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw== + "@radix-ui/react-use-controllable-state@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz#ecd2ced34e6330caf89a82854aa2f77e07440286" @@ -5981,6 +7096,13 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-use-callback-ref" "1.0.1" +"@radix-ui/react-use-controllable-state@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz#1321446857bb786917df54c0d4d084877aab04b0" + integrity sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw== + dependencies: + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-escape-keydown@1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz#217b840c250541609c66f67ed7bab2b733620755" @@ -5989,6 +7111,13 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-use-callback-ref" "1.0.1" +"@radix-ui/react-use-escape-keydown@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz#31a5b87c3b726504b74e05dac1edce7437b98754" + integrity sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw== + dependencies: + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-layout-effect@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz#be8c7bc809b0c8934acf6657b577daf948a75399" @@ -5996,6 +7125,11 @@ dependencies: "@babel/runtime" "^7.13.10" +"@radix-ui/react-use-layout-effect@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz#3c2c8ce04827b26a39e442ff4888d9212268bd27" + integrity sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w== + "@radix-ui/react-use-previous@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz#b595c087b07317a4f143696c6a01de43b0d0ec66" @@ -6003,6 +7137,11 @@ dependencies: "@babel/runtime" "^7.13.10" +"@radix-ui/react-use-previous@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz#d4dd37b05520f1d996a384eb469320c2ada8377c" + integrity sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og== + "@radix-ui/react-use-rect@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz#fde50b3bb9fd08f4a1cd204572e5943c244fcec2" @@ -6011,6 +7150,13 @@ "@babel/runtime" "^7.13.10" "@radix-ui/rect" "1.0.1" +"@radix-ui/react-use-rect@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz#13b25b913bd3e3987cc9b073a1a164bb1cf47b88" + integrity sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ== + dependencies: + "@radix-ui/rect" "1.1.0" + "@radix-ui/react-use-size@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz#1c5f5fea940a7d7ade77694bb98116fb49f870b2" @@ -6019,6 +7165,13 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-use-layout-effect" "1.0.1" +"@radix-ui/react-use-size@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz#b4dba7fbd3882ee09e8d2a44a3eed3a7e555246b" + integrity sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-visually-hidden@1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz#51aed9dd0fe5abcad7dee2a234ad36106a6984ac" @@ -6027,6 +7180,13 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-primitive" "1.0.3" +"@radix-ui/react-visually-hidden@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.1.tgz#f7b48c1af50dfdc366e92726aee6d591996c5752" + integrity sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg== + dependencies: + "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/rect@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.0.1.tgz#bf8e7d947671996da2e30f4904ece343bc4a883f" @@ -6034,6 +7194,11 @@ dependencies: "@babel/runtime" "^7.13.10" +"@radix-ui/rect@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.0.tgz#f817d1d3265ac5415dadc67edab30ae196696438" + integrity sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg== + "@rdf-esm/data-model@^0.5.1", "@rdf-esm/data-model@^0.5.3", "@rdf-esm/data-model@^0.5.4": version "0.5.4" resolved "https://registry.npmjs.org/@rdf-esm/data-model/-/data-model-0.5.4.tgz" @@ -6339,6 +7504,19 @@ tiny-warning "^1.0.3" tslib "^2.3.0" +"@react-hook/intersection-observer@^3.1.1": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@react-hook/intersection-observer/-/intersection-observer-3.1.2.tgz#f6f0e42588e03c4afeac0276889d97927d67edc7" + integrity sha512-mWU3BMkmmzyYMSuhO9wu3eJVP21N8TcgYm9bZnTrMwuM818bEk+0NRM3hP+c/TqA9Ln5C7qE53p1H0QMtzYdvQ== + dependencies: + "@react-hook/passive-layout-effect" "^1.2.0" + intersection-observer "^0.10.0" + +"@react-hook/passive-layout-effect@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@react-hook/passive-layout-effect/-/passive-layout-effect-1.2.1.tgz#c06dac2d011f36d61259aa1c6df4f0d5e28bc55e" + integrity sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg== + "@rollup/plugin-alias@^3.1.1": version "3.1.2" resolved "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.2.tgz" @@ -6649,6 +7827,11 @@ ignore "^5.1.8" p-map "^4.0.0" +"@stitches/core@^1.2.6": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@stitches/core/-/core-1.2.8.tgz#dce3b8fdc764fbc6dbea30c83b73bfb52cf96173" + integrity sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg== + "@storybook/addon-actions@7.6.17": version "7.6.17" resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.6.17.tgz#b1be5ab28b22b4a50c6aa0cd0a3671ca5b6f5f71" @@ -8320,6 +9503,13 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== +"@types/acorn@^4.0.0": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.6.tgz#d61ca5480300ac41a7d973dd5b84d0a591154a22" + integrity sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ== + dependencies: + "@types/estree" "*" + "@types/argparse@^2.0.10": version "2.0.10" resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-2.0.10.tgz#664e84808accd1987548d888b9d21b3e9c996a6c" @@ -10215,7 +11405,7 @@ acorn-import-assertions@^1.9.0: resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== -acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: +acorn-jsx@^5.0.0, acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -10240,6 +11430,11 @@ acorn@^7.1.1, acorn@^7.4.1: resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.0.0, acorn@^8.9.0: + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== + acorn@^8.0.4: version "8.4.0" resolved "https://registry.npmjs.org/acorn/-/acorn-8.4.0.tgz" @@ -10260,11 +11455,6 @@ acorn@^8.8.2: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== -acorn@^8.9.0: - version "8.14.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" - integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== - address@^1.0.1: version "1.2.2" resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" @@ -10337,6 +11527,11 @@ ajv@^8.0.0, ajv@^8.9.0: require-from-string "^2.0.2" uri-js "^4.2.2" +anser@^2.1.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/anser/-/anser-2.3.0.tgz#9b30c8cffe864e646eebd6cd578ba67f2dfe8b2e" + integrity sha512-pGGR7Nq1K/i9KGs29PvHDXA8AsfZ3OiYRMDClT3FIC085Kbns9CJ7ogq9MEiGnrjd9THOGoh7B+kWzePHzZyJQ== + ansi-colors@^4.1.1: version "4.1.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" @@ -12016,6 +13211,11 @@ classnames@^2.3.1: resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== +classnames@^2.3.2: + version "2.5.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== + clean-css@^5.2.2: version "5.3.3" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" @@ -12023,6 +13223,11 @@ clean-css@^5.2.2: dependencies: source-map "~0.6.0" +clean-set@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/clean-set/-/clean-set-1.1.2.tgz#76d8bf238c3e27827bfa73073ecdfdc767187070" + integrity sha512-cA8uCj0qSoG9e0kevyOWXwPaELRPVg5Pxp6WskLMwerx257Zfnh8Nl0JBH59d7wQzij2CK7qEfJQK3RjuKKIug== + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -12231,6 +13436,11 @@ clsx@^2.0.0, clsx@^2.1.1: resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== +cm6-theme-basic-light@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/cm6-theme-basic-light/-/cm6-theme-basic-light-0.2.0.tgz#29d2d6b9675feb7b563b31eda6f3da37d9ae3167" + integrity sha512-1prg2gv44sYfpHscP26uLT/ePrh0mlmVwMSoSd3zYKQ92Ab3jPRLzyCnpyOCQLJbK+YdNs4HvMRqMNYdy4pMhA== + co@^4.6.0: version "4.6.0" resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" @@ -12250,6 +13460,19 @@ code-point-at@^1.0.0: resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +codemirror@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-6.0.1.tgz#62b91142d45904547ee3e0e0e4c1a79158035a29" + integrity sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg== + dependencies: + "@codemirror/autocomplete" "^6.0.0" + "@codemirror/commands" "^6.0.0" + "@codemirror/language" "^6.0.0" + "@codemirror/lint" "^6.0.0" + "@codemirror/search" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" + collapse-white-space@^1.0.2: version "1.0.6" resolved "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz" @@ -12417,6 +13640,11 @@ compression@^1.7.4: safe-buffer "5.1.2" vary "~1.1.2" +compute-scroll-into-view@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-2.0.4.tgz#2b444b2b9e4724819d2531efacb7ac094155fdf6" + integrity sha512-y/ZA3BGnxoM/QHHQ2Uy49CLtnWPbt4tTPpEEZiEmmiWBFKjej7nEyH8Ryz54jH0MLXflUYA3Er2zUxPSJu5R+g== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -12713,6 +13941,11 @@ create-require@^1.1.0: resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== +crelt@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72" + integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g== + cross-fetch@3.0.6: version "3.0.6" resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz" @@ -13057,6 +14290,14 @@ d3-transition@3, d3-transition@^3.0.1: d3-interpolate "1 - 3" d3-timer "1 - 3" +d@1, d@^1.0.1, d@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" + integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== + dependencies: + es5-ext "^0.10.64" + type "^2.7.2" + damerau-levenshtein@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" @@ -13636,7 +14877,7 @@ diff@^4.0.1: resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -diff@^5.2.0: +diff@^5.1.0, diff@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== @@ -13814,6 +15055,17 @@ dotenv@^8.2.0: resolved "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz" integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== +downshift@^7.6.0: + version "7.6.2" + resolved "https://registry.yarnpkg.com/downshift/-/downshift-7.6.2.tgz#16fc951b7ff8f9c1c47d0f71b5ff10d78fb06e4c" + integrity sha512-iOv+E1Hyt3JDdL9yYcOgW7nZ7GQ2Uz6YbggwXvKUSleetYhU2nXD482Rz6CzvM4lvI1At34BYruKAL4swRGxaA== + dependencies: + "@babel/runtime" "^7.14.8" + compute-scroll-into-view "^2.0.4" + prop-types "^15.7.2" + react-is "^17.0.2" + tslib "^2.3.0" + dunder-proto@^1.0.0, dunder-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" @@ -14241,16 +15493,43 @@ es-to-primitive@^1.3.0: is-date-object "^1.0.5" is-symbol "^1.0.4" +es5-ext@^0.10.35, es5-ext@^0.10.62, es5-ext@^0.10.64, es5-ext@~0.10.14: + version "0.10.64" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" + integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + esniff "^2.0.1" + next-tick "^1.1.0" + es6-error@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== +es6-iterator@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + es6-promisify@^6.0.0: version "6.1.1" resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz" integrity sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg== +es6-symbol@^3, es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.4" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.4.tgz#f4e7d28013770b4208ecbf3e0bf14d3bcb557b8c" + integrity sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg== + dependencies: + d "^1.0.2" + ext "^1.7.0" + esbuild-plugin-alias@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/esbuild-plugin-alias/-/esbuild-plugin-alias-0.2.1.tgz#45a86cb941e20e7c2bc68a2bea53562172494fcb" @@ -14360,6 +15639,11 @@ escalade@^3.2.0: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== +escape-carriage@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/escape-carriage/-/escape-carriage-1.3.1.tgz#842658e5422497b1232585e517dc813fc6a86170" + integrity sha512-GwBr6yViW3ttx1kb7/Oh+gKQ1/TrhYwxKqVmg5gS+BK+Qe2KrOa/Vh7w3HPBvgGf0LfcDGoY9I6NHKoA5Hozhw== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -14634,6 +15918,16 @@ eslint@^8.57.1: strip-ansi "^6.0.1" text-table "^0.2.0" +esniff@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" + integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + event-emitter "^0.3.5" + type "^2.7.2" + espree@^9.6.0, espree@^9.6.1: version "9.6.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" @@ -14677,6 +15971,14 @@ estree-util-is-identifier-name@^3.0.0: resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd" integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== +estree-util-visit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/estree-util-visit/-/estree-util-visit-2.0.0.tgz#13a9a9f40ff50ed0c022f831ddf4b58d05446feb" + integrity sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/unist" "^3.0.0" + estree-walker@^0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz" @@ -14709,6 +16011,14 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +event-emitter@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== + dependencies: + d "1" + es5-ext "~0.10.14" + event-target-shim@^5.0.0: version "5.0.1" resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" @@ -14836,6 +16146,13 @@ express@^4.17.3: utils-merge "1.0.1" vary "~1.1.2" +ext@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + dependencies: + type "^2.7.2" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -14999,6 +16316,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fault@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fault/-/fault-2.0.1.tgz#d47ca9f37ca26e4bd38374a7c500b5a384755b6c" + integrity sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ== + dependencies: + format "^0.2.0" + fb-watchman@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" @@ -15303,6 +16627,11 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +format@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== + formdata-polyfill@^4.0.10: version "4.0.10" resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" @@ -15463,7 +16792,7 @@ fwd-stream@^1.0.4: dependencies: readable-stream "~1.0.26-4" -gensync@^1.0.0-beta.2: +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== @@ -16800,6 +18129,11 @@ internal-slot@^1.1.0: resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== +intersection-observer@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.10.0.tgz#4d11d63c1ff67e21e62987be24d55218da1a1a69" + integrity sha512-fn4bQ0Xq8FTej09YC/jqKZwtijpvARlRp6wxL5WTA6yPe2YWSJ5RJh7Nm79rK2qB0wr6iDQzH60XGq5V/7u8YQ== + invariant@^2.2.1, invariant@^2.2.4: version "2.2.4" resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" @@ -18240,6 +19574,13 @@ jose@^4.15.5: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-yaml@4.1.0, js-yaml@^4.0.0, js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + js-yaml@^3.13.1, js-yaml@^3.14.1, js-yaml@^3.9.1: version "3.14.1" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" @@ -18248,13 +19589,6 @@ js-yaml@^3.13.1, js-yaml@^3.14.1, js-yaml@^3.9.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^4.0.0, js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - jscodeshift@^0.15.1: version "0.15.2" resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.15.2.tgz#145563860360b4819a558c75c545f39683e5a0be" @@ -18801,6 +20135,11 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lexical@0.17.1, lexical@^0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/lexical/-/lexical-0.17.1.tgz#02f4057b82cb302ceb9ca9b031dcf9406be5780a" + integrity sha512-72/MhR7jqmyqD10bmJw8gztlCm4KDDT+TPtU4elqXrEvHoO5XENi34YAEUD9gIkPfqSwyLa9mwAX1nKzIr5xEA== + lie@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" @@ -19387,6 +20726,20 @@ mdast-util-definitions@^4.0.0: dependencies: unist-util-visit "^2.0.0" +mdast-util-directive@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz#3fb1764e705bbdf0afb0d3f889e4404c3e82561f" + integrity sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + parse-entities "^4.0.0" + stringify-entities "^4.0.0" + unist-util-visit-parents "^6.0.0" + mdast-util-find-and-replace@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz#70a3174c894e14df722abf43bc250cbae44b11df" @@ -19415,6 +20768,18 @@ mdast-util-from-markdown@^2.0.0: micromark-util-types "^2.0.0" unist-util-stringify-position "^4.0.0" +mdast-util-frontmatter@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz#f5f929eb1eb36c8a7737475c7eb438261f964ee8" + integrity sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + escape-string-regexp "^5.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + micromark-extension-frontmatter "^2.0.0" + mdast-util-gfm-autolink-literal@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz#abd557630337bd30a6d5a4bd8252e1c2dc0875d5" @@ -19510,6 +20875,17 @@ mdast-util-mdx-jsx@^3.0.0: unist-util-stringify-position "^4.0.0" vfile-message "^4.0.0" +mdast-util-mdx@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz#792f9cf0361b46bee1fdf1ef36beac424a099c41" + integrity sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w== + dependencies: + mdast-util-from-markdown "^2.0.0" + mdast-util-mdx-expression "^2.0.0" + mdast-util-mdx-jsx "^3.0.0" + mdast-util-mdxjs-esm "^2.0.0" + mdast-util-to-markdown "^2.0.0" + mdast-util-mdxjs-esm@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz#019cfbe757ad62dd557db35a695e7314bcc9fa97" @@ -19559,7 +20935,7 @@ mdast-util-to-hast@^13.0.0: unist-util-visit "^5.0.0" vfile "^6.0.0" -mdast-util-to-markdown@^2.0.0: +mdast-util-to-markdown@^2.0.0, mdast-util-to-markdown@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz#f910ffe60897f04bb4b7e7ee434486f76288361b" integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA== @@ -19708,6 +21084,29 @@ micromark-core-commonmark@^2.0.0: micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" +micromark-extension-directive@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz#2eb61985d1995a7c1ff7621676a4f32af29409e8" + integrity sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA== + dependencies: + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-factory-whitespace "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + parse-entities "^4.0.0" + +micromark-extension-frontmatter@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz#651c52ffa5d7a8eeed687c513cd869885882d67a" + integrity sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg== + dependencies: + fault "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + micromark-extension-gfm-autolink-literal@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz#6286aee9686c4462c1e3552a9d505feddceeb935" @@ -19762,7 +21161,7 @@ micromark-extension-gfm-tagfilter@^2.0.0: dependencies: micromark-util-types "^2.0.0" -micromark-extension-gfm-task-list-item@^2.0.0: +micromark-extension-gfm-task-list-item@^2.0.0, micromark-extension-gfm-task-list-item@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz#bcc34d805639829990ec175c3eea12bb5b781f2c" integrity sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw== @@ -19787,6 +21186,73 @@ micromark-extension-gfm@^3.0.0: micromark-util-combine-extensions "^2.0.0" micromark-util-types "^2.0.0" +micromark-extension-mdx-expression@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz#1407b9ce69916cf5e03a196ad9586889df25302a" + integrity sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ== + dependencies: + "@types/estree" "^1.0.0" + devlop "^1.0.0" + micromark-factory-mdx-expression "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-events-to-acorn "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-mdx-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz#5abb83da5ddc8e473a374453e6ea56fbd66b59ad" + integrity sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg== + dependencies: + "@types/acorn" "^4.0.0" + "@types/estree" "^1.0.0" + devlop "^1.0.0" + estree-util-is-identifier-name "^3.0.0" + micromark-factory-mdx-expression "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-events-to-acorn "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + vfile-message "^4.0.0" + +micromark-extension-mdx-md@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz#1d252881ea35d74698423ab44917e1f5b197b92d" + integrity sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ== + dependencies: + micromark-util-types "^2.0.0" + +micromark-extension-mdxjs-esm@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz#de21b2b045fd2059bd00d36746081de38390d54a" + integrity sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A== + dependencies: + "@types/estree" "^1.0.0" + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-events-to-acorn "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + unist-util-position-from-estree "^2.0.0" + vfile-message "^4.0.0" + +micromark-extension-mdxjs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz#b5a2e0ed449288f3f6f6c544358159557549de18" + integrity sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ== + dependencies: + acorn "^8.0.0" + acorn-jsx "^5.0.0" + micromark-extension-mdx-expression "^3.0.0" + micromark-extension-mdx-jsx "^3.0.0" + micromark-extension-mdx-md "^2.0.0" + micromark-extension-mdxjs-esm "^3.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-types "^2.0.0" + micromark-factory-destination@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639" @@ -19806,6 +21272,21 @@ micromark-factory-label@^2.0.0: micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" +micromark-factory-mdx-expression@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz#2afaa8ba6d5f63e0cead3e4dee643cad184ca260" + integrity sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw== + dependencies: + "@types/estree" "^1.0.0" + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-events-to-acorn "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + unist-util-position-from-estree "^2.0.0" + vfile-message "^4.0.0" + micromark-factory-space@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz#36d0212e962b2b3121f8525fc7a3c7c029f334fc" @@ -19834,7 +21315,7 @@ micromark-factory-whitespace@^2.0.0: micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" -micromark-util-character@^2.0.0: +micromark-util-character@^2.0.0, micromark-util-character@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== @@ -19888,6 +21369,20 @@ micromark-util-encode@^2.0.0: resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== +micromark-util-events-to-acorn@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz#4275834f5453c088bd29cd72dfbf80e3327cec07" + integrity sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA== + dependencies: + "@types/acorn" "^4.0.0" + "@types/estree" "^1.0.0" + "@types/unist" "^3.0.0" + devlop "^1.0.0" + estree-util-visit "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + vfile-message "^4.0.0" + micromark-util-html-tag-name@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz#e40403096481986b41c106627f98f72d4d10b825" @@ -20001,6 +21496,11 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +mime-db@^1.52.0: + version "1.53.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" + integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== + mime-types@^2.1.12: version "2.1.31" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz" @@ -20324,6 +21824,11 @@ next-auth@4.24.11: preact-render-to-string "^5.1.19" uuid "^8.3.2" +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + next@^14.2.23: version "14.2.23" resolved "https://registry.yarnpkg.com/next/-/next-14.2.23.tgz#37edc9a4d42c135fd97a4092f829e291e2e7c943" @@ -20948,6 +22453,16 @@ os-tmpdir@~1.0.2: resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= +outvariant@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.0.tgz#e742e4bda77692da3eca698ef5bfac62d9fba06e" + integrity sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw== + +outvariant@^1.3.0, outvariant@^1.4.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.3.tgz#221c1bfc093e8fec7075497e7799fdbf43d14873" + integrity sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA== + own-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" @@ -21751,6 +23266,11 @@ prismjs@^1.14.0: resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz" integrity sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg== +prismjs@^1.27.0: + version "1.29.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" + integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== + process-es6@^0.11.2: version "0.11.6" resolved "https://registry.npmjs.org/process-es6/-/process-es6-0.11.6.tgz" @@ -22214,6 +23734,13 @@ react-colorful@^5.1.2: resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.6.1.tgz#7dc2aed2d7c72fac89694e834d179e32f3da563b" integrity sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw== +react-devtools-inline@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/react-devtools-inline/-/react-devtools-inline-4.4.0.tgz#e032a6eb17a9977b682306f84b46e683adf4bf68" + integrity sha512-ES0GolSrKO8wsKbsEkVeiR/ZAaHQTY4zDh1UW8DImVmm8oaGLl3ijJDvSGe+qDRKPZdPRnDtWWnSvvrgxXdThQ== + dependencies: + es6-symbol "^3" + react-docgen-typescript@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz#4611055e569edc071204aadb20e1c93e1ab1659c" @@ -22268,7 +23795,7 @@ react-element-to-jsx-string@^15.0.0: is-plain-object "5.0.0" react-is "18.1.0" -react-error-boundary@^3.1.0: +react-error-boundary@^3.1.0, react-error-boundary@^3.1.4: version "3.1.4" resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-3.1.4.tgz#255db92b23197108757a888b01e5b729919abde0" integrity sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA== @@ -22294,6 +23821,11 @@ react-grid-layout@^1.5.0: react-resizable "^3.0.5" resize-observer-polyfill "^1.5.1" +react-hook-form@^7.44.2: + version "7.54.2" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.54.2.tgz#8c26ed54c71628dff57ccd3c074b1dd377cfb211" + integrity sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg== + react-inspector@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-6.0.2.tgz#aa3028803550cb6dbd7344816d5c80bf39d07e9d" @@ -22367,6 +23899,14 @@ react-remove-scroll-bar@^2.3.3: react-style-singleton "^2.2.1" tslib "^2.0.0" +react-remove-scroll-bar@^2.3.7: + version "2.3.8" + resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz#99c20f908ee467b385b68a3469b4a3e750012223" + integrity sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q== + dependencies: + react-style-singleton "^2.2.2" + tslib "^2.0.0" + react-remove-scroll@2.5.5: version "2.5.5" resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz#1e31a1260df08887a8a0e46d09271b52b3a37e77" @@ -22378,6 +23918,17 @@ react-remove-scroll@2.5.5: use-callback-ref "^1.3.0" use-sidecar "^1.1.2" +react-remove-scroll@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.6.2.tgz#2518d2c5112e71ea8928f1082a58459b5c7a2a97" + integrity sha512-KmONPx5fnlXYJQqC62Q+lwIeAk64ws/cUw6omIumRzMRPqgnYqhSSti99nbj0Ry13bv7dF+BKn7NB+OqkdZGTw== + dependencies: + react-remove-scroll-bar "^2.3.7" + react-style-singleton "^2.2.1" + tslib "^2.1.0" + use-callback-ref "^1.3.3" + use-sidecar "^1.1.2" + react-resizable@^3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/react-resizable/-/react-resizable-3.0.5.tgz#362721f2efbd094976f1780ae13f1ad7739786c1" @@ -22430,6 +23981,14 @@ react-style-singleton@^2.2.1: invariant "^2.2.4" tslib "^2.0.0" +react-style-singleton@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.3.tgz#4265608be69a4d70cfe3047f2c6c88b2c3ace388" + integrity sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ== + dependencies: + get-nonce "^1.0.0" + tslib "^2.0.0" + react-table@^7.8.0: version "7.8.0" resolved "https://registry.yarnpkg.com/react-table/-/react-table-7.8.0.tgz#07858c01c1718c09f7f1aed7034fcfd7bda907d2" @@ -23105,7 +24664,7 @@ resolve@^1.21.0, resolve@^1.22.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.22.4: +resolve@^1.22.4, resolve@^1.3.2: version "1.22.10" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== @@ -23422,6 +24981,11 @@ semver-compare@^1.0.0: resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@^5.4.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" @@ -24085,6 +25649,16 @@ state-toggle@^1.0.0: resolved "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz" integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== +static-browser-server@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/static-browser-server/-/static-browser-server-1.0.3.tgz#9030d141b99ed92c8eec1a7546b87548fd036f5d" + integrity sha512-ZUyfgGDdFRbZGGJQ1YhiM930Yczz5VlbJObrQLlk24+qNHVQx4OlLcYswEUo3bIyNAbQUIUR9Yr5/Hqjzqb4zA== + dependencies: + "@open-draft/deferred-promise" "^2.1.0" + dotenv "^16.0.3" + mime-db "^1.52.0" + outvariant "^1.3.0" + statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" @@ -24179,6 +25753,11 @@ strict-event-emitter-types@^2.0.0: resolved "https://registry.yarnpkg.com/strict-event-emitter-types/-/strict-event-emitter-types-2.0.0.tgz#05e15549cb4da1694478a53543e4e2f4abcf277f" integrity sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA== +strict-event-emitter@^0.4.3: + version "0.4.6" + resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz#ff347c8162b3e931e3ff5f02cfce6772c3b07eb3" + integrity sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg== + strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" @@ -24469,6 +26048,11 @@ style-loader@^3.3.1: resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.4.tgz#f30f786c36db03a45cbd55b6a70d930c479090e7" integrity sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w== +style-mod@^4.0.0, style-mod@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-4.1.2.tgz#ca238a1ad4786520f7515a8539d5a63691d7bf67" + integrity sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw== + style-to-object@0.3.0, style-to-object@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz" @@ -25271,6 +26855,11 @@ type-is@^1.6.18, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +type@^2.7.2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.3.tgz#436981652129285cc3ba94f392886c2637ea0486" + integrity sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ== + typed-array-buffer@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" @@ -25458,6 +27047,13 @@ unicorn-magic@^0.1.0: resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== +unidiff@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unidiff/-/unidiff-1.0.4.tgz#45096a898285821c51e22e84be4215c05d6511cd" + integrity sha512-ynU0vsAXw0ir8roa+xPCUHmnJ5goc5BTM2Kuc3IJd8UwgaeRs7VSD5+eeaQL+xp1JtB92hu/Zy/Lgy7RZcr1pQ== + dependencies: + diff "^5.1.0" + unified@9.2.0: version "9.2.0" resolved "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz" @@ -25527,6 +27123,13 @@ unist-util-is@^6.0.0: dependencies: "@types/unist" "^3.0.0" +unist-util-position-from-estree@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz#d94da4df596529d1faa3de506202f0c9a23f2200" + integrity sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ== + dependencies: + "@types/unist" "^3.0.0" + unist-util-position@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz" @@ -25731,6 +27334,13 @@ use-callback-ref@^1.3.0: dependencies: tslib "^2.0.0" +use-callback-ref@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.3.tgz#98d9fab067075841c5b2c6852090d5d0feabe2bf" + integrity sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg== + dependencies: + tslib "^2.0.0" + use-debounce@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/use-debounce/-/use-debounce-7.0.0.tgz" @@ -25942,6 +27552,11 @@ w3c-hr-time@^1.0.2: dependencies: browser-process-hrtime "^1.0.0" +w3c-keyname@^2.2.4: + version "2.2.8" + resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz#7b17c8c6883d4e8b86ac8aba79d39e880f8869c5" + integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ== + w3c-xmlserializer@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz" From 0ba61ac1ed636dd071eb2d231c369f4b7b5aafbc Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Thu, 16 Jan 2025 09:48:29 +0100 Subject: [PATCH 091/100] feat: Add basic MarkdownInput --- app/components/form.tsx | 191 +++++++++++++------------- app/configurator/components/field.tsx | 3 +- 2 files changed, 97 insertions(+), 97 deletions(-) diff --git a/app/components/form.tsx b/app/components/form.tsx index 3891df48f..6980b3679 100644 --- a/app/components/form.tsx +++ b/app/components/form.tsx @@ -1,4 +1,16 @@ import { Trans } from "@lingui/macro"; +import { + BoldItalicUnderlineToggles, + headingsPlugin, + linkPlugin, + listsPlugin, + ListsToggle, + markdownShortcutPlugin, + MDXEditor, + quotePlugin, + thematicBreakPlugin, + toolbarPlugin, +} from "@mdxeditor/editor"; import { Box, BoxProps, @@ -24,18 +36,18 @@ import { styled, Switch as MUISwitch, SxProps, + Theme, Tooltip, Typography, TypographyProps, } from "@mui/material"; +import { makeStyles } from "@mui/styles"; import { useId } from "@reach/auto-id"; import flatten from "lodash/flatten"; import React, { - ChangeEvent, ComponentProps, createContext, forwardRef, - KeyboardEvent, ReactNode, SyntheticEvent, useCallback, @@ -62,6 +74,8 @@ import { useLocale } from "@/locales/use-locale"; import { valueComparator } from "@/utils/sorting-values"; import useEvent from "@/utils/use-event"; +import "@mdxeditor/editor/style.css"; + export const Label = ({ htmlFor, smaller = false, @@ -603,90 +617,6 @@ export const MinimalisticSelect = (props: MinimalisticSelectProps) => { ); }; -type KeyDownHandlerProps = { - key: string; - wrapStart: string; - wrapEnd: string; -}; - -const makeKeyDownHandler = - ({ key, wrapStart, wrapEnd }: KeyDownHandlerProps) => - ( - e: KeyboardEvent, - { - input, - onChange, - value, - }: { - input: HTMLInputElement; - onChange: (e: ChangeEvent) => void; - value: string; - } - ) => { - if ((e.metaKey || e.ctrlKey) && e.key === key) { - e.preventDefault(); - - const { selectionStart: start, selectionEnd: end } = input; - - if (start === null || end === null || start === end) { - return; - } - - const text = value.slice(start, end); - const wrappedText = `${wrapStart}${text}${wrapEnd}`; - const maybeWrappedText = value.slice( - start - wrapStart.length, - end + wrapEnd.length - ); - - if (maybeWrappedText === wrappedText) { - const newValue = `${value.slice(0, start - wrapStart.length)}${text}${value.slice( - end + wrapEnd.length - )}`; - // Keep the change in the undo stack, so we can use CMD+Z as expected. - // Even though it's deprecated, it still works in most browsers. - document.execCommand("insertText", false, text); - onChange({ - currentTarget: { value: newValue }, - } as ChangeEvent); - setTimeout(() => { - input.selectionStart = start - wrapStart.length; - input.selectionEnd = start + text.length - wrapStart.length; - }, 0); - - return true; - } - - const newValue = `${value.slice(0, start)}${wrappedText}${value.slice(end)}`; - document.execCommand("insertText", false, wrappedText); - onChange({ - currentTarget: { value: newValue }, - } as ChangeEvent); - setTimeout(() => { - input.selectionStart = start + wrapStart.length; - input.selectionEnd = start + text.length + wrapStart.length; - }, 0); - - return true; - } - }; - -const keyDownHandlers = ( - [ - { key: "b", wrapStart: "**", wrapEnd: "**" }, - { key: "i", wrapStart: "_", wrapEnd: "_" }, - { key: "u", wrapStart: "", wrapEnd: "" }, - { key: "s", wrapStart: "~~", wrapEnd: "~~" }, - // Would be better to use `satisfies` here, but it's resulting in syntax errors - ] as KeyDownHandlerProps[] -).map(({ key, wrapStart, wrapEnd }) => { - return makeKeyDownHandler({ - key, - wrapStart, - wrapEnd, - }); -}); - export const Input = ({ label, name, @@ -698,15 +628,6 @@ export const Input = ({ disabled?: boolean; } & FieldProps) => { const inputRef = useRef(null); - const handleKeyDown = useEvent((e: KeyboardEvent) => { - const input = inputRef.current; - - if (!input || !onChange || typeof value !== "string") { - return; - } - - return keyDownHandlers.some((cb) => cb(e, { input, onChange, value })); - }); return ( @@ -724,7 +645,6 @@ export const Input = ({ value={value} disabled={disabled} onChange={onChange} - onKeyDown={handleKeyDown} inputRef={inputRef} sx={{ width: "100%", @@ -737,6 +657,85 @@ export const Input = ({ ); }; +export const MarkdownInput = ({ + label, + name, + value, + onChange, +}: { + label?: string | ReactNode; +} & FieldProps) => { + const classes = useMarkdownInputStyles(); + + return ( + + {label && name ? ( + + ) : null} + ( + <> + + + + ), + }), + headingsPlugin(), + listsPlugin(), + linkPlugin(), + quotePlugin(), + markdownShortcutPlugin(), + thematicBreakPlugin(), + ]} + onChange={(newValue) => { + onChange?.({ + currentTarget: { + value: newValue + // is not supported in react-markdown we use for rendering. + .replaceAll("", "") + .replace("", ""), + }, + } as any); + }} + /> + + ); +}; + +const useMarkdownInputStyles = makeStyles((theme) => ({ + root: { + "& [data-lexical-editor='true']": { + padding: "0.5rem 0.75rem", + border: `1px solid ${theme.palette.grey[300]}`, + borderRadius: 3, + backgroundColor: theme.palette.grey[100], + "&:focus": { + border: `1px solid ${theme.palette.secondary.main}`, + }, + "& *": { + margin: "0.25em 0", + }, + "& :first-child": { + marginTop: 0, + }, + "& :last-child": { + marginBottom: 0, + }, + }, + }, + toolbar: { + borderRadius: 0, + backgroundColor: theme.palette.background.paper, + }, +})); + export const SearchField = ({ id, label, diff --git a/app/configurator/components/field.tsx b/app/configurator/components/field.tsx index 65094d9a2..c8223eb47 100644 --- a/app/configurator/components/field.tsx +++ b/app/configurator/components/field.tsx @@ -29,6 +29,7 @@ import Flex from "@/components/flex"; import { Checkbox, Input, + MarkdownInput, Radio, Select, SelectOption, @@ -724,7 +725,7 @@ export const TextBlockInputField = ({ locale }: { locale: Locale }) => { const label = getFieldLabel(locale); return ( - Date: Thu, 16 Jan 2025 10:43:33 +0100 Subject: [PATCH 092/100] style: Improve MarkdownInput margins --- app/components/form.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/components/form.tsx b/app/components/form.tsx index 6980b3679..95cce0e96 100644 --- a/app/components/form.tsx +++ b/app/components/form.tsx @@ -720,7 +720,8 @@ const useMarkdownInputStyles = makeStyles((theme) => ({ border: `1px solid ${theme.palette.secondary.main}`, }, "& *": { - margin: "0.25em 0", + margin: "1em 0", + lineHeight: 1.2, }, "& :first-child": { marginTop: 0, From 021be3750e387034ec9e51efef1398a58ce377ff Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Thu, 16 Jan 2025 10:43:44 +0100 Subject: [PATCH 093/100] feat: Move label below toolbar --- app/components/form.tsx | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/app/components/form.tsx b/app/components/form.tsx index 95cce0e96..a55d0c661 100644 --- a/app/components/form.tsx +++ b/app/components/form.tsx @@ -669,11 +669,6 @@ export const MarkdownInput = ({ return ( - {label && name ? ( - - ) : null} ( - <> - - - +
+ + + + + {label && name ? ( + + ) : null} +
), }), headingsPlugin(), From 438627a8102260aa00ee3e8be2f6e3d7641f3bc9 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Thu, 16 Jan 2025 12:28:54 +0100 Subject: [PATCH 094/100] feat: Add and update icons --- app/icons/components/IcBold.tsx | 19 +++++++++++++++++++ app/icons/components/IcFontSize.tsx | 19 +++++++++++++++++++ app/icons/components/IcItalic.tsx | 19 +++++++++++++++++++ app/icons/components/IcLink.tsx | 13 ++++++++++--- app/icons/components/IcListBulleted.tsx | 19 +++++++++++++++++++ app/icons/components/IcListNumbered.tsx | 19 +++++++++++++++++++ app/icons/components/IcUnderlined.tsx | 19 +++++++++++++++++++ app/icons/components/index.tsx | 12 ++++++++++++ app/icons/svg/ic_bold.svg | 3 +++ app/icons/svg/ic_font_size.svg | 3 +++ app/icons/svg/ic_italic.svg | 3 +++ app/icons/svg/ic_link.svg | 11 ++++++++++- app/icons/svg/ic_list_bulleted.svg | 3 +++ app/icons/svg/ic_list_numbered.svg | 3 +++ app/icons/svg/ic_underlined.svg | 3 +++ 15 files changed, 164 insertions(+), 4 deletions(-) create mode 100644 app/icons/components/IcBold.tsx create mode 100644 app/icons/components/IcFontSize.tsx create mode 100644 app/icons/components/IcItalic.tsx create mode 100644 app/icons/components/IcListBulleted.tsx create mode 100644 app/icons/components/IcListNumbered.tsx create mode 100644 app/icons/components/IcUnderlined.tsx create mode 100644 app/icons/svg/ic_bold.svg create mode 100644 app/icons/svg/ic_font_size.svg create mode 100644 app/icons/svg/ic_italic.svg create mode 100644 app/icons/svg/ic_list_bulleted.svg create mode 100644 app/icons/svg/ic_list_numbered.svg create mode 100644 app/icons/svg/ic_underlined.svg diff --git a/app/icons/components/IcBold.tsx b/app/icons/components/IcBold.tsx new file mode 100644 index 000000000..e0417ce74 --- /dev/null +++ b/app/icons/components/IcBold.tsx @@ -0,0 +1,19 @@ +import * as React from "react"; +function SvgIcBold(props: React.SVGProps) { + return ( + + + + ); +} +export default SvgIcBold; diff --git a/app/icons/components/IcFontSize.tsx b/app/icons/components/IcFontSize.tsx new file mode 100644 index 000000000..e156d2ed4 --- /dev/null +++ b/app/icons/components/IcFontSize.tsx @@ -0,0 +1,19 @@ +import * as React from "react"; +function SvgIcFontSize(props: React.SVGProps) { + return ( + + + + ); +} +export default SvgIcFontSize; diff --git a/app/icons/components/IcItalic.tsx b/app/icons/components/IcItalic.tsx new file mode 100644 index 000000000..fa09df464 --- /dev/null +++ b/app/icons/components/IcItalic.tsx @@ -0,0 +1,19 @@ +import * as React from "react"; +function SvgIcItalic(props: React.SVGProps) { + return ( + + + + ); +} +export default SvgIcItalic; diff --git a/app/icons/components/IcLink.tsx b/app/icons/components/IcLink.tsx index 62a0d3ca8..727b3e141 100644 --- a/app/icons/components/IcLink.tsx +++ b/app/icons/components/IcLink.tsx @@ -4,17 +4,24 @@ function SvgIcLink(props: React.SVGProps) { - - + + + + + + ); } diff --git a/app/icons/components/IcListBulleted.tsx b/app/icons/components/IcListBulleted.tsx new file mode 100644 index 000000000..c7a0ad2d9 --- /dev/null +++ b/app/icons/components/IcListBulleted.tsx @@ -0,0 +1,19 @@ +import * as React from "react"; +function SvgIcListBulleted(props: React.SVGProps) { + return ( + + + + ); +} +export default SvgIcListBulleted; diff --git a/app/icons/components/IcListNumbered.tsx b/app/icons/components/IcListNumbered.tsx new file mode 100644 index 000000000..a9b81dbbf --- /dev/null +++ b/app/icons/components/IcListNumbered.tsx @@ -0,0 +1,19 @@ +import * as React from "react"; +function SvgIcListNumbered(props: React.SVGProps) { + return ( + + + + ); +} +export default SvgIcListNumbered; diff --git a/app/icons/components/IcUnderlined.tsx b/app/icons/components/IcUnderlined.tsx new file mode 100644 index 000000000..4d85e0a1a --- /dev/null +++ b/app/icons/components/IcUnderlined.tsx @@ -0,0 +1,19 @@ +import * as React from "react"; +function SvgIcUnderlined(props: React.SVGProps) { + return ( + + + + ); +} +export default SvgIcUnderlined; diff --git a/app/icons/components/index.tsx b/app/icons/components/index.tsx index 3ef58afae..ca795cb50 100644 --- a/app/icons/components/index.tsx +++ b/app/icons/components/index.tsx @@ -8,6 +8,7 @@ import { default as ArrowLeft } from "@/icons/components/IcArrowLeft"; import { default as ArrowRight } from "@/icons/components/IcArrowRight"; import { default as ArrowTop } from "@/icons/components/IcArrowTop"; import { default as ArrowUp } from "@/icons/components/IcArrowUp"; +import { default as Bold } from "@/icons/components/IcBold"; import { default as Calendar } from "@/icons/components/IcCalendar"; import { default as CaretDown } from "@/icons/components/IcCaretDown"; import { default as CaretLeft } from "@/icons/components/IcCaretLeft"; @@ -62,6 +63,7 @@ import { default as Feed } from "@/icons/components/IcFeed"; import { default as File } from "@/icons/components/IcFile"; import { default as Filter } from "@/icons/components/IcFilter"; import { default as Folder } from "@/icons/components/IcFolder"; +import { default as FontSize } from "@/icons/components/IcFontSize"; import { default as Formatting } from "@/icons/components/IcFormatting"; import { default as Forward } from "@/icons/components/IcForward"; import { default as Geographical } from "@/icons/components/IcGeographical"; @@ -71,6 +73,7 @@ import { default as Image } from "@/icons/components/IcImage"; import { default as Indeterminate } from "@/icons/components/IcIndeterminate"; import { default as Info } from "@/icons/components/IcInfo"; import { default as InfoOutline } from "@/icons/components/IcInfoOutline"; +import { default as Italic } from "@/icons/components/IcItalic"; import { default as Laptop } from "@/icons/components/IcLaptop"; import { default as LayoutCanvas } from "@/icons/components/IcLayoutCanvas"; import { default as LayoutDashboard } from "@/icons/components/IcLayoutDashboard"; @@ -83,6 +86,8 @@ import { default as LeftAligned } from "@/icons/components/IcLeftAligned"; import { default as Link } from "@/icons/components/IcLink"; import { default as LinkExternal } from "@/icons/components/IcLinkExternal"; import { default as List } from "@/icons/components/IcList"; +import { default as ListBulleted } from "@/icons/components/IcListBulleted"; +import { default as ListNumbered } from "@/icons/components/IcListNumbered"; import { default as Loading } from "@/icons/components/IcLoading"; import { default as Mail } from "@/icons/components/IcMail"; import { default as MapMaptype } from "@/icons/components/IcMapMaptype"; @@ -145,6 +150,7 @@ import { default as Tools } from "@/icons/components/IcTools"; import { default as Trash } from "@/icons/components/IcTrash"; import { default as Triangle } from "@/icons/components/IcTriangle"; import { default as Twitter } from "@/icons/components/IcTwitter"; +import { default as Underlined } from "@/icons/components/IcUnderlined"; import { default as Unfold } from "@/icons/components/IcUnfold"; import { default as Unpublish } from "@/icons/components/IcUnpublish"; import { default as Warning } from "@/icons/components/IcWarning"; @@ -164,6 +170,7 @@ export const Icons = { arrowRight: ArrowRight, arrowTop: ArrowTop, arrowUp: ArrowUp, + bold: Bold, calendar: Calendar, caretDown: CaretDown, caretLeft: CaretLeft, @@ -218,6 +225,7 @@ export const Icons = { file: File, filter: Filter, folder: Folder, + fontSize: FontSize, formatting: Formatting, forward: Forward, geographical: Geographical, @@ -227,6 +235,7 @@ export const Icons = { indeterminate: Indeterminate, info: Info, infoOutline: InfoOutline, + italic: Italic, laptop: Laptop, layoutCanvas: LayoutCanvas, layoutDashboard: LayoutDashboard, @@ -239,6 +248,8 @@ export const Icons = { linkExternal: LinkExternal, link: Link, list: List, + listBulleted: ListBulleted, + listNumbered: ListNumbered, loading: Loading, mail: Mail, mapMaptype: MapMaptype, @@ -301,6 +312,7 @@ export const Icons = { trash: Trash, triangle: Triangle, twitter: Twitter, + underlined: Underlined, unfold: Unfold, unpublish: Unpublish, warning: Warning, diff --git a/app/icons/svg/ic_bold.svg b/app/icons/svg/ic_bold.svg new file mode 100644 index 000000000..3aa690426 --- /dev/null +++ b/app/icons/svg/ic_bold.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/app/icons/svg/ic_font_size.svg b/app/icons/svg/ic_font_size.svg new file mode 100644 index 000000000..53535bf7e --- /dev/null +++ b/app/icons/svg/ic_font_size.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/app/icons/svg/ic_italic.svg b/app/icons/svg/ic_italic.svg new file mode 100644 index 000000000..8d7628e42 --- /dev/null +++ b/app/icons/svg/ic_italic.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/app/icons/svg/ic_link.svg b/app/icons/svg/ic_link.svg index 8748b2c91..eb2a4281b 100644 --- a/app/icons/svg/ic_link.svg +++ b/app/icons/svg/ic_link.svg @@ -1 +1,10 @@ - \ No newline at end of file + + + + + + + + + + \ No newline at end of file diff --git a/app/icons/svg/ic_list_bulleted.svg b/app/icons/svg/ic_list_bulleted.svg new file mode 100644 index 000000000..e61182908 --- /dev/null +++ b/app/icons/svg/ic_list_bulleted.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/app/icons/svg/ic_list_numbered.svg b/app/icons/svg/ic_list_numbered.svg new file mode 100644 index 000000000..c8de13706 --- /dev/null +++ b/app/icons/svg/ic_list_numbered.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/app/icons/svg/ic_underlined.svg b/app/icons/svg/ic_underlined.svg new file mode 100644 index 000000000..0eb9c1752 --- /dev/null +++ b/app/icons/svg/ic_underlined.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file From 5d77b7c832c6c2e18030c86d4777df7aa98a98a3 Mon Sep 17 00:00:00 2001 From: Bartosz Prusinowski Date: Thu, 16 Jan 2025 12:41:55 +0100 Subject: [PATCH 095/100] feat: Add BlockTypeMenu --- app/components/form.tsx | 6 +- app/components/markdown.tsx | 125 +++++++++++++++++++++++++++++++++++- 2 files changed, 128 insertions(+), 3 deletions(-) diff --git a/app/components/form.tsx b/app/components/form.tsx index a55d0c661..53b1846f8 100644 --- a/app/components/form.tsx +++ b/app/components/form.tsx @@ -58,6 +58,7 @@ import React, { } from "react"; import { useBrowseContext } from "@/browser/context"; +import { BlockTypeMenu } from "@/components/markdown"; import { MaybeTooltip } from "@/components/maybe-tooltip"; import { BANNER_MARGIN_TOP } from "@/components/presence"; import { TooltipTitle } from "@/components/tooltip-utils"; @@ -668,7 +669,7 @@ export const MarkdownInput = ({ const classes = useMarkdownInputStyles(); return ( - + + {label && name ? ( -