From c7221154ff9fd17d7e9bf8a02b3e2e136ad53671 Mon Sep 17 00:00:00 2001 From: Roman Vyakhirev Date: Fri, 1 Aug 2025 17:08:17 +0200 Subject: [PATCH] chore: backport dropdown improvements --- package.json | 7 +- .../web/_datagrid-dropdown-filter.scss | 20 +- .../datagrid-dropdown-filter-web/CHANGELOG.md | 10 + .../datagrid-dropdown-filter-web/package.json | 2 +- .../DatagridDropdownFilter.editorConfig.ts | 4 +- .../DatagridDropdownFilter.editorPreview.tsx | 8 +- .../src/DatagridDropdownFilter.tsx | 6 +- .../src/DatagridDropdownFilter.xml | 25 +- .../src/components/RefFilterContainer.tsx | 11 +- .../src/components/StaticFilterContainer.tsx | 11 +- .../__tests__/DataGridDropdownFilter.spec.tsx | 19 +- .../DataGridDropdownFilter.spec.tsx.snap | 22 +- .../src/package.xml | 2 +- .../typings/DatagridDropdownFilterProps.d.ts | 4 + .../controllers/picker/RefBaseController.ts | 6 +- .../picker/RefComboboxController.ts | 4 +- .../controllers/picker/RefSelectController.ts | 5 +- .../picker/RefTagPickerController.ts | 4 +- .../picker/StaticBaseController.ts | 6 +- .../picker/StaticComboboxController.ts | 4 +- .../picker/StaticSelectController.ts | 5 +- .../picker/StaticTagPickerController.ts | 4 +- .../picker/mixins/ComboboxControllerMixin.ts | 2 + .../picker/mixins/SelectControllerMixin.ts | 17 +- .../picker/mixins/TagPickerControllerMixin.ts | 14 + .../src/controls/base/ClearButton.tsx | 32 ++- .../src/controls/base/OptionsWrapper.tsx | 46 +-- .../src/controls/combobox/Combobox.tsx | 9 +- .../src/controls/hooks/useFloatingMenu.tsx | 8 +- .../src/controls/select/Select.tsx | 30 +- .../src/controls/tag-picker/TagPicker.tsx | 44 +-- pnpm-lock.yaml | 268 +----------------- 32 files changed, 276 insertions(+), 383 deletions(-) diff --git a/package.json b/package.json index 5662e41d22..8bd9426894 100644 --- a/package.json +++ b/package.json @@ -55,14 +55,13 @@ "json5@0.x": ">=1.0.2", "@codemirror/view": "^6.34.2", "enzyme>cheerio": "1.0.0-rc.10", - "ts-node": "10.9.2" + "ts-node": "10.9.2", + "mendix": "^10.16" }, "patchedDependencies": { - "react-big-calendar@0.19.2": "patches/react-big-calendar@0.19.2.patch", "mobx@6.12.3": "patches/mobx@6.12.3.patch", "mobx-react-lite@4.0.7": "patches/mobx-react-lite@4.0.7.patch", - "mime-types": "patches/mime-types.patch", - "rc-trigger": "patches/rc-trigger.patch" + "mime-types": "patches/mime-types.patch" }, "onlyBuiltDependencies": [ "canvas" diff --git a/packages/modules/data-widgets/src/themesource/datawidgets/web/_datagrid-dropdown-filter.scss b/packages/modules/data-widgets/src/themesource/datawidgets/web/_datagrid-dropdown-filter.scss index b77663d6cc..affc9a7cd0 100644 --- a/packages/modules/data-widgets/src/themesource/datawidgets/web/_datagrid-dropdown-filter.scss +++ b/packages/modules/data-widgets/src/themesource/datawidgets/web/_datagrid-dropdown-filter.scss @@ -1,6 +1,6 @@ @mixin scroll-shadow { background: - /* Shadow Cover TOP */ + /* Shadow Cover TOP */ linear-gradient(white 30%, rgba(255, 255, 255, 0)) center top, /* Shadow Cover BOTTOM */ linear-gradient(rgba(255, 255, 255, 0), white 70%) center bottom, /* Shadow TOP */ linear-gradient(0deg, rgba(255, 255, 255, 0.6), rgba(197, 197, 197, 0.6)) center top, @@ -138,7 +138,6 @@ $root: ".widget-dropdown-filter"; &-clear { @include btn-with-cross; align-items: center; - align-self: center; display: flex; flex-shrink: 0; justify-self: end; @@ -150,6 +149,11 @@ $root: ".widget-dropdown-filter"; &:has(+ #{$root}-toggle) { border-inline-end: 1px solid var(--gray, #787d87); } + + &:focus-visible { + outline-offset: -2px; + outline: var(--brand-primary, $brand-primary) solid 1px; + } } &-state-icon { @@ -262,9 +266,13 @@ $root: ".widget-dropdown-filter"; justify-content: center; line-height: 1.334; padding: var(--wdf-tag-padding); + margin: var(--spacing-smallest, 2px); &:focus-visible { outline: var(--brand-primary, #264ae5) auto 1px; } + &:focus { + background-color: var(--color-primary-light, $color-primary-light); + } } #{$root}-input { @@ -273,6 +281,14 @@ $root: ".widget-dropdown-filter"; width: initial; } + &:not(:focus-within):not([data-empty]) { + #{$root}-input { + opacity: 0; + flex-shrink: 1; + min-width: 1px; + } + } + #{$root}-clear { border-color: transparent; } diff --git a/packages/pluggableWidgets/datagrid-dropdown-filter-web/CHANGELOG.md b/packages/pluggableWidgets/datagrid-dropdown-filter-web/CHANGELOG.md index f3a4b1743f..28c7355e63 100644 --- a/packages/pluggableWidgets/datagrid-dropdown-filter-web/CHANGELOG.md +++ b/packages/pluggableWidgets/datagrid-dropdown-filter-web/CHANGELOG.md @@ -6,6 +6,16 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] +### Fixed + +- We enhanced dropdown widget customization by separating texts for empty selection, empty option caption, and input placeholder. This change allows for more granular control over the widget's text configurations. + +- We improved dropdown widget usability with enhanced keyboard navigation, visual feedback, and interaction behavior. + +### Breaking changes + +- Text configurations for empty option, empty selection, and input placeholder need to be reviewed and reconfigured. + ## [2.10.1] - 2025-04-16 ### Fixed diff --git a/packages/pluggableWidgets/datagrid-dropdown-filter-web/package.json b/packages/pluggableWidgets/datagrid-dropdown-filter-web/package.json index 237afa8944..7af59ce35b 100644 --- a/packages/pluggableWidgets/datagrid-dropdown-filter-web/package.json +++ b/packages/pluggableWidgets/datagrid-dropdown-filter-web/package.json @@ -1,7 +1,7 @@ { "name": "@mendix/datagrid-dropdown-filter-web", "widgetName": "DatagridDropdownFilter", - "version": "2.10.1", + "version": "2.30.0", "description": "", "copyright": "© Mendix Technology BV 2025. All rights reserved.", "license": "Apache-2.0", diff --git a/packages/pluggableWidgets/datagrid-dropdown-filter-web/src/DatagridDropdownFilter.editorConfig.ts b/packages/pluggableWidgets/datagrid-dropdown-filter-web/src/DatagridDropdownFilter.editorConfig.ts index cd2dbe6373..5194e4211a 100644 --- a/packages/pluggableWidgets/datagrid-dropdown-filter-web/src/DatagridDropdownFilter.editorConfig.ts +++ b/packages/pluggableWidgets/datagrid-dropdown-filter-web/src/DatagridDropdownFilter.editorConfig.ts @@ -20,6 +20,8 @@ export function getProperties(values: DatagridDropdownFilterPreviewProps, defaul if (values.filterable) { hidePropertyIn(defaultProperties, values, "clearable"); hidePropertyIn(defaultProperties, values, "emptyOptionCaption"); + } else { + hidePropertyIn(defaultProperties, values, "filterInputPlaceholderCaption"); } if (!showSelectedItemsStyle) { @@ -54,7 +56,7 @@ export const getPreview = (values: DatagridDropdownFilterPreviewProps, isDarkMod text({ fontColor: palette.text.secondary, italic: true - })(values.emptyOptionCaption || " ") + })(values.emptySelectionCaption || " ") ], grow: 1 } as ContainerProps, diff --git a/packages/pluggableWidgets/datagrid-dropdown-filter-web/src/DatagridDropdownFilter.editorPreview.tsx b/packages/pluggableWidgets/datagrid-dropdown-filter-web/src/DatagridDropdownFilter.editorPreview.tsx index 9d42df5e76..56e4f8b346 100644 --- a/packages/pluggableWidgets/datagrid-dropdown-filter-web/src/DatagridDropdownFilter.editorPreview.tsx +++ b/packages/pluggableWidgets/datagrid-dropdown-filter-web/src/DatagridDropdownFilter.editorPreview.tsx @@ -10,10 +10,12 @@ function Preview(props: DatagridDropdownFilterPreviewProps): ReactElement { return ( - )} + )} - {item.caption} + {item.caption || "\u00A0"} ))} diff --git a/packages/shared/widget-plugin-filtering/src/controls/combobox/Combobox.tsx b/packages/shared/widget-plugin-filtering/src/controls/combobox/Combobox.tsx index 6abe9f341e..3eabd1adbf 100644 --- a/packages/shared/widget-plugin-filtering/src/controls/combobox/Combobox.tsx +++ b/packages/shared/widget-plugin-filtering/src/controls/combobox/Combobox.tsx @@ -11,6 +11,8 @@ import { Arrow, classes } from "../picker-primitives"; interface ComboboxProps { options: OptionWithState[]; inputPlaceholder: string; + emptyCaption: string; + ariaLabel: string; empty: boolean; className?: string; style?: React.CSSProperties; @@ -42,11 +44,11 @@ export const Combobox = observer(function Combobox(props: ComboboxProps) { diff --git a/packages/shared/widget-plugin-filtering/src/controls/hooks/useFloatingMenu.tsx b/packages/shared/widget-plugin-filtering/src/controls/hooks/useFloatingMenu.tsx index a6aa518c6c..1e7a45a4ed 100644 --- a/packages/shared/widget-plugin-filtering/src/controls/hooks/useFloatingMenu.tsx +++ b/packages/shared/widget-plugin-filtering/src/controls/hooks/useFloatingMenu.tsx @@ -1,7 +1,9 @@ import { useMemo } from "react"; -import { autoUpdate, size, useFloating } from "@floating-ui/react-dom"; +import { autoUpdate, size, useFloating, ReferenceType } from "@floating-ui/react-dom"; -export function useFloatingMenu(open: boolean): ReturnType { +export function useFloatingMenu( + open: boolean +): ReturnType> { const middleware = useMemo( () => [ size({ @@ -15,7 +17,7 @@ export function useFloatingMenu(open: boolean): ReturnType { [] ); - return useFloating({ + return useFloating({ open, placement: "bottom-start", strategy: "fixed", diff --git a/packages/shared/widget-plugin-filtering/src/controls/select/Select.tsx b/packages/shared/widget-plugin-filtering/src/controls/select/Select.tsx index 71b18e0582..9f42766865 100644 --- a/packages/shared/widget-plugin-filtering/src/controls/select/Select.tsx +++ b/packages/shared/widget-plugin-filtering/src/controls/select/Select.tsx @@ -1,7 +1,7 @@ import cn from "classnames"; import { useSelect, UseSelectProps } from "downshift"; import { observer } from "mobx-react-lite"; -import React, { createElement, useRef } from "react"; +import React, { createElement } from "react"; import { OptionWithState } from "../../typings/OptionWithState"; import { ClearButton } from "../base/ClearButton"; import { OptionsWrapper } from "../base/OptionsWrapper"; @@ -14,19 +14,19 @@ interface SelectProps { clearable: boolean; empty: boolean; className?: string; - showCheckboxes?: boolean; + showCheckboxes: boolean; style?: React.CSSProperties; useSelectProps: () => UseSelectProps; onClear: () => void; - onFocus?: React.FocusEventHandler; + onFocus?: React.FocusEventHandler; onMenuScroll?: React.UIEventHandler; + ariaLabel: string; } const cls = classes(); export const Select = observer(function Select(props: SelectProps): React.ReactElement { const { empty: isEmpty, showCheckboxes, clearable } = props; - const toggleRef = useRef(null); const { getToggleButtonProps, getMenuProps, getItemProps, isOpen, highlightedIndex } = useSelect( props.useSelectProps() ); @@ -37,35 +37,32 @@ export const Select = observer(function Select(props: SelectProps): React.ReactE return (
- +
diff --git a/packages/shared/widget-plugin-filtering/src/controls/tag-picker/TagPicker.tsx b/packages/shared/widget-plugin-filtering/src/controls/tag-picker/TagPicker.tsx index 23f9dc04c5..39050d79d7 100644 --- a/packages/shared/widget-plugin-filtering/src/controls/tag-picker/TagPicker.tsx +++ b/packages/shared/widget-plugin-filtering/src/controls/tag-picker/TagPicker.tsx @@ -13,9 +13,10 @@ interface TagPickerProps { options: OptionWithState[]; empty: boolean; inputPlaceholder: string; + emptyCaption: string; showCheckboxes: boolean; selectedStyle?: "boxes" | "text"; - ariaLabel?: string; + ariaLabel: string; className?: string; style?: React.CSSProperties; useMultipleSelectionProps: () => UseMultipleSelectionProps; @@ -31,12 +32,20 @@ const cls = classes(); export const TagPicker = observer(function TagPicker(props: TagPickerProps): React.ReactElement { const [inputContainerId, helperText1] = [useId(), useId()]; const { showCheckboxes, selectedStyle = "boxes", ariaLabel: inputLabel = "Search" } = props; - const inputRef = useRef(null); + const inputContainerRef = useRef(null); const { getSelectedItemProps, getDropdownProps, removeSelectedItem } = useMultipleSelection( props.useMultipleSelectionProps() ); - const { inputValue, isOpen, highlightedIndex, getInputProps, getToggleButtonProps, getMenuProps, getItemProps } = - useCombobox(props.useComboboxProps()); + const { + inputValue, + isOpen, + highlightedIndex, + getInputProps, + getToggleButtonProps, + getMenuProps, + getItemProps, + openMenu + } = useCombobox(props.useComboboxProps()); const { refs, floatingStyles } = useFloatingMenu(isOpen); return ( @@ -54,19 +63,20 @@ export const TagPicker = observer(function TagPicker(props: TagPickerProps): Rea data-expanded={isOpen} data-empty={props.empty ? true : undefined} style={props.style} + onClick={event => { + if (event.target === event.currentTarget || event.target === inputContainerRef.current) { + if (!isOpen) { + openMenu(); + } else { + inputContainerRef.current?.querySelector("input")?.focus(); + } + } + }} > Current filter values: -
{ - if (event.currentTarget === event.target) { - inputRef.current?.focus(); - } - }} - > +
{selectedStyle === "boxes" && props.selected.map((item, index) => (
@@ -107,7 +117,7 @@ export const TagPicker = observer(function TagPicker(props: TagPickerProps): Rea cls={cls} onClick={() => { props.onClear(); - inputRef.current?.focus(); + inputContainerRef.current?.querySelector("input")?.focus(); }} visible={!props.empty} /> @@ -116,6 +126,7 @@ export const TagPicker = observer(function TagPicker(props: TagPickerProps): Rea diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7ab66a03e5..adf08220a9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,6 +23,7 @@ overrides: '@codemirror/view': ^6.34.2 enzyme>cheerio: 1.0.0-rc.10 ts-node: 10.9.2 + mendix: ^10.16 pnpmfileChecksum: sha256-s93SB6R9/asG3ZoJ8Hr+99P758r3p0dOebXMUkycQnk= @@ -36,12 +37,6 @@ patchedDependencies: mobx@6.12.3: hash: 39c55279e8f75c9a322eba64dd22e1a398f621c64bbfc3632e55a97f46edfeb9 path: patches/mobx@6.12.3.patch - rc-trigger: - hash: ed1e3ff08d043fe0d57534d0d74502691ed5cc3297839600375d33bb84c7be99 - path: patches/rc-trigger.patch - react-big-calendar@0.19.2: - hash: d8f03ab5a445efa65feb8cf9de6d013131afabc5b7e269c61364b2997ef90f94 - path: patches/react-big-calendar@0.19.2.patch importers: @@ -620,76 +615,6 @@ importers: specifier: workspace:* version: link:../../shared/widget-plugin-platform - packages/shared/charts: - dependencies: - classnames: - specifier: ^2.3.2 - version: 2.3.2 - deepmerge: - specifier: ^4.3.1 - version: 4.3.1 - plotly.js: - specifier: npm:plotly.js-dist-min@3.0.0 - version: plotly.js-dist-min@3.0.0 - plotly.js-dist-min: - specifier: ^3.0.0 - version: 3.0.1 - react-plotly.js: - specifier: ^2.6.0 - version: 2.6.0(plotly.js-dist-min@3.0.0)(react@18.2.0) - devDependencies: - '@mendix/eslint-config-web-widgets': - specifier: workspace:* - version: link:../eslint-config-web-widgets - '@mendix/prettier-config-web-widgets': - specifier: workspace:* - version: link:../prettier-config-web-widgets - '@mendix/tsconfig-web-widgets': - specifier: workspace:^ - version: link:../tsconfig-web-widgets - '@mendix/widget-plugin-component-kit': - specifier: workspace:* - version: link:../widget-plugin-component-kit - '@mendix/widget-plugin-hooks': - specifier: workspace:* - version: link:../widget-plugin-hooks - '@mendix/widget-plugin-platform': - specifier: workspace:* - version: link:../widget-plugin-platform - '@mendix/widget-plugin-test-utils': - specifier: workspace:* - version: link:../widget-plugin-test-utils - '@rollup/plugin-commonjs': - specifier: ^28.0.3 - version: 28.0.3(rollup@3.29.5) - '@rollup/plugin-node-resolve': - specifier: ^16.0.0 - version: 16.0.1(rollup@3.29.5) - '@rollup/plugin-replace': - specifier: ^6.0.2 - version: 6.0.2(rollup@3.29.5) - '@rollup/plugin-terser': - specifier: ^0.4.4 - version: 0.4.4(rollup@3.29.5) - '@types/plotly.js-dist-min': - specifier: ^2.3.4 - version: 2.3.4 - '@types/react-plotly.js': - specifier: ^2.6.3 - version: 2.6.3 - copy-and-watch: - specifier: ^0.1.6 - version: 0.1.6 - rimraf: - specifier: ^4.4.1 - version: 4.4.1 - rollup: - specifier: '*' - version: 3.29.5 - rollup-plugin-copy: - specifier: ^3.5.0 - version: 3.5.0 - packages/shared/eslint-config-web-widgets: dependencies: '@eslint/js': @@ -819,8 +744,8 @@ importers: specifier: ^9.0.8 version: 9.0.8(react@18.2.0) mendix: - specifier: ^10.16.49747 - version: 10.16.49747 + specifier: ^10.16 + version: 10.22.68245 mobx: specifier: 6.12.3 version: 6.12.3(patch_hash=39c55279e8f75c9a322eba64dd22e1a398f621c64bbfc3632e55a97f46edfeb9) @@ -988,8 +913,8 @@ importers: packages/shared/widget-plugin-test-utils: dependencies: mendix: - specifier: ^10.16.49747 - version: 10.16.49747 + specifier: ^10.16 + version: 10.22.68245 devDependencies: '@mendix/eslint-config-web-widgets': specifier: workspace:* @@ -2350,15 +2275,6 @@ packages: rollup: optional: true - '@rollup/plugin-replace@6.0.2': - resolution: {integrity: sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/plugin-terser@0.4.4': resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} engines: {node: '>=14.0.0'} @@ -2600,12 +2516,6 @@ packages: '@types/estree@1.0.7': resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} - '@types/fs-extra@8.1.5': - resolution: {integrity: sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==} - - '@types/glob@7.2.0': - resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} - '@types/graceful-fs@4.1.8': resolution: {integrity: sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==} @@ -2627,9 +2537,6 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/minimatch@3.0.5': - resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} - '@types/node-fetch@2.6.2': resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==} @@ -2639,12 +2546,6 @@ packages: '@types/node@22.14.0': resolution: {integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==} - '@types/plotly.js-dist-min@2.3.4': - resolution: {integrity: sha512-ISwLFV6Zs/v3DkaRFLyk2rvYAfVdnYP2VVVy7h+fBDWw52sn7sMUzytkWiN4M75uxr1uz1uiBioePTDpAfoFIg==} - - '@types/plotly.js@2.12.30': - resolution: {integrity: sha512-/yeGIFTrh5e5Q9HUCVZWDwwxqGyWHYsi4IVhG/1YKaOScslMlimLBIoce/F/Tjw7YahRTbh4xHNDfGxvq51w7Q==} - '@types/prop-types@15.7.9': resolution: {integrity: sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==} @@ -2654,15 +2555,9 @@ packages: '@types/react-dom@18.2.14': resolution: {integrity: sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==} - '@types/react-native@0.70.16': - resolution: {integrity: sha512-zHPWfszSWTctG1O1gsAHTQzOC33GY7Iv/Mk44tSMkcHiUtqB1GjOZz1VLqSyxW3Qw77HX4GUHi8b1ksOFrq2KQ==} - '@types/react-native@0.72.8': resolution: {integrity: sha512-St6xA7+EoHN5mEYfdWnfYt0e8u6k2FR0P9s2arYgakQGFgU1f9FlPrIEcj0X24pLCF5c5i3WVuLCUdiCYHmOoA==} - '@types/react-plotly.js@2.6.3': - resolution: {integrity: sha512-HBQwyGuu/dGXDsWhnQrhH+xcJSsHvjkwfSRjP+YpOsCCWryIuXF78ZCBjpfgO3sCc0Jo8sYp4NOGtqT7Cn3epQ==} - '@types/react@18.2.36': resolution: {integrity: sha512-o9XFsHYLLZ4+sb9CWUYwHqFVoG61SesydF353vFMMsQziiyRu8np4n2OYMUSDZ8XuImxDr9c5tR7gidlH29Vnw==} @@ -4456,10 +4351,6 @@ packages: engines: {node: '>=12'} deprecated: Glob versions prior to v9 are no longer supported - glob@9.3.5: - resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} - engines: {node: '>=16 || 14 >=14.17'} - global-directory@4.0.1: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} engines: {node: '>=18'} @@ -4492,10 +4383,6 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} - globby@10.0.1: - resolution: {integrity: sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==} - engines: {node: '>=8'} - globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -4872,10 +4759,6 @@ packages: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} - is-plain-object@3.0.1: - resolution: {integrity: sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==} - engines: {node: '>=0.10.0'} - is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} @@ -5420,9 +5303,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -5471,12 +5351,12 @@ packages: memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} - mendix@10.16.49747: - resolution: {integrity: sha512-soc4deezipGgzWVWrfsg1e73w8xXE3ydlW0PyRsV8IHq4BCliloWag1Vh5kYEpYqt+4naBKuLASMHLhSlKKQIw==} - mendix@10.20.60519: resolution: {integrity: sha512-gVOhd23gVAX7rE2wYk4MYeVDLKMPGSYk6h97eqNI41hcT1qESeJ6nyDvf9M4wWRVmWKTFpA+nWSIihVxCZsKGg==} + mendix@10.22.68245: + resolution: {integrity: sha512-20VIWzMZGDlZn4jDga8dLiXb4O/Gqqs+VLH6m21YhdiSbsT9TvUtaoovf/HVQyOUtWegJ5jsymghTKqCIBQuEQ==} + meow@12.1.1: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} @@ -5609,10 +5489,6 @@ packages: resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} engines: {node: '>=10'} - minimatch@8.0.4: - resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -5620,14 +5496,6 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@4.2.8: - resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} - engines: {node: '>=8'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -5968,10 +5836,6 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -6032,12 +5896,6 @@ packages: engines: {node: '>=18'} hasBin: true - plotly.js-dist-min@3.0.0: - resolution: {integrity: sha512-AlU1XkNRzwUI55A+kJYj0xJETp3h7aeFe4O1cmhzOryscYdw9jOywXZo+7Zy+y2kEKq12CnTzII4jV7Vgpy4xQ==} - - plotly.js-dist-min@3.0.1: - resolution: {integrity: sha512-RReOqr6TfoHaTbVAoHR1UbTCOSRDsQ7Hbthd+3XAxOwaKmxCE3oejMhLG7urQSqWC65DAcSKV23kZd8e+7mG7w==} - possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} @@ -6420,12 +6278,6 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 - react-plotly.js@2.6.0: - resolution: {integrity: sha512-g93xcyhAVCSt9kV1svqG1clAEdL6k3U+jjuSzfTV7owaSU9Go6Ph8bl25J+jKfKvIGAEYpe4qj++WHJuc9IaeA==} - peerDependencies: - plotly.js: '>1.34.0' - react: ^18.0.0 - react-refresh@0.14.2: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} @@ -6601,21 +6453,12 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rimraf@4.4.1: - resolution: {integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==} - engines: {node: '>=14'} - hasBin: true - rollup-plugin-clear@2.0.7: resolution: {integrity: sha512-Hg8NC3JcJBO1ofgyQC0IACpyKn/yhHPGZ3C7R3ubNGWUXy9JXHQrewk4J4hVcZznw6SOKayLsaNae596Rwt8Vg==} rollup-plugin-command@1.1.3: resolution: {integrity: sha512-9nIcP5mgVYWGU7x/6ufTgtqI4vl5vvsYs6fTTil91NX53EIPcim42FXmq1TPdZRFJbUM1ikrg05clahPxObL1g==} - rollup-plugin-copy@3.5.0: - resolution: {integrity: sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA==} - engines: {node: '>=8.3'} - rollup-plugin-license@3.6.0: resolution: {integrity: sha512-1ieLxTCaigI5xokIfszVDRoy6c/Wmlot1fDEnea7Q/WXSR8AqOjYljHDLObAx7nFxHC2mbxT3QnTSPhaic2IYw==} engines: {node: '>=14.0.0'} @@ -9597,13 +9440,6 @@ snapshots: optionalDependencies: rollup: 3.29.5 - '@rollup/plugin-replace@6.0.2(rollup@3.29.5)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@3.29.5) - magic-string: 0.30.10 - optionalDependencies: - rollup: 3.29.5 - '@rollup/plugin-terser@0.4.4(rollup@3.29.5)': dependencies: serialize-javascript: 6.0.2 @@ -9830,15 +9666,6 @@ snapshots: '@types/estree@1.0.7': {} - '@types/fs-extra@8.1.5': - dependencies: - '@types/node': 22.14.0 - - '@types/glob@7.2.0': - dependencies: - '@types/minimatch': 3.0.5 - '@types/node': 22.14.0 - '@types/graceful-fs@4.1.8': dependencies: '@types/node': 22.14.0 @@ -9866,8 +9693,6 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/minimatch@3.0.5': {} - '@types/node-fetch@2.6.2': dependencies: '@types/node': 22.14.0 @@ -9881,12 +9706,6 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/plotly.js-dist-min@2.3.4': - dependencies: - '@types/plotly.js': 2.12.30 - - '@types/plotly.js@2.12.30': {} - '@types/prop-types@15.7.9': {} '@types/react-datepicker@6.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': @@ -9902,10 +9721,6 @@ snapshots: dependencies: '@types/react': 18.2.36 - '@types/react-native@0.70.16': - dependencies: - '@types/react': 18.2.36 - '@types/react-native@0.72.8(react-native@0.75.3(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@18.2.36)(react@18.2.0)(typescript@5.8.2))': dependencies: '@react-native/virtualized-lists': 0.72.8(react-native@0.75.3(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@18.2.36)(react@18.2.0)(typescript@5.8.2)) @@ -9913,11 +9728,6 @@ snapshots: transitivePeerDependencies: - react-native - '@types/react-plotly.js@2.6.3': - dependencies: - '@types/plotly.js': 2.12.30 - '@types/react': 18.2.36 - '@types/react@18.2.36': dependencies: '@types/prop-types': 15.7.9 @@ -12241,13 +12051,6 @@ snapshots: minimatch: 5.0.1 once: 1.4.0 - glob@9.3.5: - dependencies: - fs.realpath: 1.0.0 - minimatch: 8.0.4 - minipass: 4.2.8 - path-scurry: 1.11.1 - global-directory@4.0.1: dependencies: ini: 4.1.1 @@ -12273,17 +12076,6 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 - globby@10.0.1: - dependencies: - '@types/glob': 7.2.0 - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - glob: 7.2.3 - ignore: 5.3.2 - merge2: 1.4.1 - slash: 3.0.0 - globby@11.1.0: dependencies: array-union: 2.1.0 @@ -12624,8 +12416,6 @@ snapshots: dependencies: isobject: 3.0.1 - is-plain-object@3.0.1: {} - is-potential-custom-element-name@1.0.1: {} is-reference@1.2.1: @@ -13476,8 +13266,6 @@ snapshots: dependencies: js-tokens: 4.0.0 - lru-cache@10.4.3: {} - lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -13526,13 +13314,12 @@ snapshots: memoize-one@5.2.1: {} - mendix@10.16.49747: + mendix@10.20.60519: dependencies: '@types/big.js': 6.2.2 '@types/react': 18.2.36 - '@types/react-native': 0.70.16 - mendix@10.20.60519: + mendix@10.22.68245: dependencies: '@types/big.js': 6.2.2 '@types/react': 18.2.36 @@ -13803,20 +13590,12 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@8.0.4: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 minimist@1.2.8: {} - minipass@4.2.8: {} - - minipass@7.1.2: {} - mkdirp@0.5.6: dependencies: minimist: 1.2.8 @@ -14162,11 +13941,6 @@ snapshots: path-parse@1.0.7: {} - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - path-type@4.0.0: {} peggy@1.2.0: {} @@ -14205,10 +13979,6 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - plotly.js-dist-min@3.0.0: {} - - plotly.js-dist-min@3.0.1: {} - possible-typed-array-names@1.0.0: {} postcss-calc@8.2.4(postcss@8.4.47): @@ -14626,12 +14396,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-plotly.js@2.6.0(plotly.js-dist-min@3.0.0)(react@18.2.0): - dependencies: - plotly.js: plotly.js-dist-min@3.0.0 - prop-types: 15.8.1 - react: 18.2.0 - react-refresh@0.14.2: {} react-refresh@0.4.3: {} @@ -14828,24 +14592,12 @@ snapshots: dependencies: glob: 7.2.3 - rimraf@4.4.1: - dependencies: - glob: 9.3.5 - rollup-plugin-clear@2.0.7: dependencies: rimraf: 2.7.1 rollup-plugin-command@1.1.3: {} - rollup-plugin-copy@3.5.0: - dependencies: - '@types/fs-extra': 8.1.5 - colorette: 1.4.0 - fs-extra: 8.1.0 - globby: 10.0.1 - is-plain-object: 3.0.1 - rollup-plugin-license@3.6.0(picomatch@4.0.2)(rollup@3.29.5): dependencies: commenting: 1.1.0