diff --git a/packages/customWidgets/calendar-web/package.json b/packages/customWidgets/calendar-web/package.json index a34df76e1f..589b124f98 100644 --- a/packages/customWidgets/calendar-web/package.json +++ b/packages/customWidgets/calendar-web/package.json @@ -67,5 +67,8 @@ "react-big-calendar": "0.19.2", "react-dnd": "2.6.0", "react-dnd-html5-backend": "^5.0.1" + }, + "patchedDependencies": { + "react-big-calendar@0.19.2": "patches/react-big-calendar@0.19.2.patch" } } diff --git a/packages/pluggableWidgets/calendar-web/.eslintrc.json b/packages/pluggableWidgets/calendar-web/.eslintrc.json new file mode 100644 index 0000000000..4c04d85747 --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/.eslintrc.json @@ -0,0 +1,4 @@ +{ + "root": true, + "extends": ["@mendix/eslint-config-web-widgets/widget-ts"] +} diff --git a/packages/pluggableWidgets/calendar-web/.prettierrc.js b/packages/pluggableWidgets/calendar-web/.prettierrc.js new file mode 100644 index 0000000000..0892704ab0 --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/.prettierrc.js @@ -0,0 +1 @@ +module.exports = require("@mendix/prettier-config-web-widgets"); diff --git a/packages/pluggableWidgets/calendar-web/CHANGELOG.md b/packages/pluggableWidgets/calendar-web/CHANGELOG.md new file mode 100644 index 0000000000..2fa9989a52 --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/CHANGELOG.md @@ -0,0 +1,11 @@ +# Changelog + +All notable changes to this widget will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Added + +- initial version of calendar widget. diff --git a/packages/pluggableWidgets/calendar-web/README.md b/packages/pluggableWidgets/calendar-web/README.md new file mode 100644 index 0000000000..1728bf4413 --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/README.md @@ -0,0 +1,3 @@ + + +Please see [Calendar](https://docs.mendix.com/appstore/widgets/) in the Mendix documentation for details. diff --git a/packages/pluggableWidgets/calendar-web/cypress.config.cjs b/packages/pluggableWidgets/calendar-web/cypress.config.cjs new file mode 100644 index 0000000000..f5388c3dfd --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/cypress.config.cjs @@ -0,0 +1 @@ +module.exports = require("@mendix/run-e2e/cypress.config.cjs"); diff --git a/packages/pluggableWidgets/calendar-web/jest.config.js b/packages/pluggableWidgets/calendar-web/jest.config.js new file mode 100644 index 0000000000..4b623cc8e0 --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/jest.config.js @@ -0,0 +1,9 @@ +const { join } = require("path"); +const base = require("@mendix/pluggable-widgets-tools/test-config/jest.config"); + +module.exports = { + ...base, + moduleNameMapper: { + ...base.moduleNameMapper + } +}; diff --git a/packages/pluggableWidgets/calendar-web/package.json b/packages/pluggableWidgets/calendar-web/package.json new file mode 100644 index 0000000000..d35e205836 --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/package.json @@ -0,0 +1,66 @@ +{ + "name": "@mendix/calendar-web", + "widgetName": "Calendar", + "version": "1.0.0", + "description": "Calendar", + "copyright": "© Mendix Technology BV 2025. All rights reserved.", + "license": "Apache-2.0", + "repository": { + "type": "git", + "url": "https://github.com/mendix/web-widgets.git" + }, + "config": { + "mendixHost": "http://localhost:8080", + "developmentPort": 3000 + }, + "mxpackage": { + "name": "Calendar", + "type": "widget", + "mpkName": "com.mendix.widget.web.calendar.mpk" + }, + "marketplace": { + "minimumMXVersion": "9.24.0", + "appNumber": 224259, + "appName": "Calendar", + "reactReady": true + }, + "testProject": { + "githubUrl": "https://github.com/mendix/testProjects", + "branchName": "calendar-web" + }, + "packagePath": "com.mendix.widget.web", + "scripts": { + "start": "pluggable-widgets-tools start:server", + "dev": "pluggable-widgets-tools start:web", + "build": "pluggable-widgets-tools build:web", + "format": "pluggable-widgets-tools format", + "lint": "eslint --ext .jsx,.js,.ts,.tsx src/", + "test": "jest --projects jest.config.js", + "e2e": "echo \"Skipping this e2e test\"", + "e2edev": "run-e2e dev --with-preps", + "release": "pluggable-widgets-tools release:web", + "create-gh-release": "rui-create-gh-release", + "create-translation": "rui-create-translation", + "publish-marketplace": "rui-publish-marketplace", + "verify": "rui-verify-package-format", + "update-changelog": "rui-update-changelog-widget" + }, + "devDependencies": { + "@mendix/automation-utils": "workspace:*", + "@mendix/eslint-config-web-widgets": "workspace:*", + "@mendix/pluggable-widgets-tools": "10.16.0", + "@mendix/prettier-config-web-widgets": "workspace:*", + "@mendix/run-e2e": "workspace:^*", + "@mendix/widget-plugin-component-kit": "workspace:*", + "@mendix/widget-plugin-hooks": "workspace:*", + "@mendix/widget-plugin-platform": "workspace:*", + "@mendix/widget-plugin-test-utils": "workspace:*", + "@types/react-big-calendar": "^1.16.1", + "cross-env": "^7.0.3" + }, + "dependencies": { + "classnames": "^2.3.2", + "date-fns": "^4.1.0", + "react-big-calendar": "^1.17.1" + } +} diff --git a/packages/pluggableWidgets/calendar-web/src/Calendar.editorConfig.ts b/packages/pluggableWidgets/calendar-web/src/Calendar.editorConfig.ts new file mode 100644 index 0000000000..a250a466e3 --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/src/Calendar.editorConfig.ts @@ -0,0 +1,43 @@ +import { + StructurePreviewProps, + container, + rowLayout, + structurePreviewPalette, + text +} from "@mendix/widget-plugin-platform/preview/structure-preview-api"; +import { Properties, hidePropertyIn, hidePropertiesIn } from "@mendix/pluggable-widgets-tools"; +import { CalendarPreviewProps } from "../typings/CalendarProps"; + +export function getProperties(values: CalendarPreviewProps, defaultProperties: Properties): Properties { + if (values.heightUnit === "percentageOfWidth") { + hidePropertyIn(defaultProperties, values, "height"); + } else { + hidePropertiesIn(defaultProperties, values, [ + "minHeight", + "minHeightUnit", + "maxHeight", + "maxHeightUnit", + "OverflowY" + ]); + } + + if (values.minHeightUnit === "none") { + hidePropertyIn(defaultProperties, values, "minHeight"); + } + + if (values.maxHeightUnit === "none") { + hidePropertiesIn(defaultProperties, values, ["maxHeight", "OverflowY"]); + } + + return defaultProperties; +} + +export function getPreview(_values: CalendarPreviewProps, isDarkMode: boolean): StructurePreviewProps { + const palette = structurePreviewPalette[isDarkMode ? "dark" : "light"]; + + return rowLayout({ columnSize: "grow", borders: true, backgroundColor: palette.background.containerFill })( + container()(), + rowLayout({ grow: 2, padding: 8 })(text({ fontColor: palette.text.primary, grow: 10 })("calendar")), + container()() + ); +} diff --git a/packages/pluggableWidgets/calendar-web/src/Calendar.editorPreview.tsx b/packages/pluggableWidgets/calendar-web/src/Calendar.editorPreview.tsx new file mode 100644 index 0000000000..2b1fb66d78 --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/src/Calendar.editorPreview.tsx @@ -0,0 +1,33 @@ +import classNames from "classnames"; +import { ReactElement, createElement } from "react"; +import { Calendar, dateFnsLocalizer } from "react-big-calendar"; +import * as dateFns from "date-fns"; +import "react-big-calendar/lib/css/react-big-calendar.css"; +import { CalendarPreviewProps } from "typings/CalendarProps"; + +const localizer = dateFnsLocalizer({ + format: dateFns.format, + parse: dateFns.parse, + startOfWeek: dateFns.startOfWeek, + getDay: dateFns.getDay, + locales: {} +}); + +export function preview(_props: CalendarPreviewProps): ReactElement { + return ( +
+ +
+ ); +} diff --git a/packages/pluggableWidgets/calendar-web/src/Calendar.icon.dark.png b/packages/pluggableWidgets/calendar-web/src/Calendar.icon.dark.png new file mode 100644 index 0000000000..3798dd6bef Binary files /dev/null and b/packages/pluggableWidgets/calendar-web/src/Calendar.icon.dark.png differ diff --git a/packages/pluggableWidgets/calendar-web/src/Calendar.icon.png b/packages/pluggableWidgets/calendar-web/src/Calendar.icon.png new file mode 100644 index 0000000000..0bf35d34a1 Binary files /dev/null and b/packages/pluggableWidgets/calendar-web/src/Calendar.icon.png differ diff --git a/packages/pluggableWidgets/calendar-web/src/Calendar.tile.dark.png b/packages/pluggableWidgets/calendar-web/src/Calendar.tile.dark.png new file mode 100644 index 0000000000..891a0c25c2 Binary files /dev/null and b/packages/pluggableWidgets/calendar-web/src/Calendar.tile.dark.png differ diff --git a/packages/pluggableWidgets/calendar-web/src/Calendar.tile.png b/packages/pluggableWidgets/calendar-web/src/Calendar.tile.png new file mode 100644 index 0000000000..be48898821 Binary files /dev/null and b/packages/pluggableWidgets/calendar-web/src/Calendar.tile.png differ diff --git a/packages/pluggableWidgets/calendar-web/src/Calendar.tsx b/packages/pluggableWidgets/calendar-web/src/Calendar.tsx new file mode 100644 index 0000000000..2a12d74590 --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/src/Calendar.tsx @@ -0,0 +1,67 @@ +import classnames from "classnames"; +import { CSSProperties, ReactElement, createElement } from "react"; +import { CalendarContainerProps } from "../typings/CalendarProps"; +import { Calendar, dateFnsLocalizer } from "react-big-calendar"; +import * as dateFns from "date-fns"; +import "react-big-calendar/lib/css/react-big-calendar.css"; + +const localizer = dateFnsLocalizer({ + format: dateFns.format, + parse: dateFns.parse, + startOfWeek: dateFns.startOfWeek, + getDay: dateFns.getDay, + locales: {} +}); + +function getHeightScale(height: number, heightUnit: "pixels" | "percentageOfParent" | "percentageOfView"): string { + return `${height}${heightUnit === "pixels" ? "px" : heightUnit === "percentageOfView" ? "vh" : "%"}`; +} + +export function constructWrapperStyle(props: CalendarContainerProps): CSSProperties { + const { widthUnit, heightUnit, minHeightUnit, maxHeightUnit, width, height, minHeight, maxHeight, OverflowY } = + props; + + const wrapperStyle: Pick = + {}; + + wrapperStyle.width = `${width}${widthUnit === "pixels" ? "px" : "%"}`; + if (heightUnit === "percentageOfWidth") { + wrapperStyle.height = "auto"; + + if (minHeightUnit !== "none") { + wrapperStyle.minHeight = getHeightScale(minHeight, minHeightUnit); + } + + if (maxHeightUnit !== "none") { + wrapperStyle.maxHeight = getHeightScale(maxHeight, maxHeightUnit); + wrapperStyle.overflowY = OverflowY; + } + } else { + wrapperStyle.height = getHeightScale(height, heightUnit); + } + + return wrapperStyle; +} + +export default function MxCalendar(props: CalendarContainerProps): ReactElement { + const { class: className } = props; + const wrapperStyle = constructWrapperStyle(props); + console.log("wrapperStyle", wrapperStyle); + return ( +
+ +
+ ); +} diff --git a/packages/pluggableWidgets/calendar-web/src/Calendar.xml b/packages/pluggableWidgets/calendar-web/src/Calendar.xml new file mode 100644 index 0000000000..0370acc2eb --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/src/Calendar.xml @@ -0,0 +1,182 @@ + + + Calendar + Calendar + https://docs.mendix.com/appstore/widgets/calendar + + + + + + Events + + + + Title attribute + + + + + + + All day attribute + + + + + + + Start attribute + + + + + + + End attribute + + + + + + + Color attribute + + Attribute containing a valid html color eg: red #FF0000 + rgb(250,10,20) rgba(10,10,10, 0.5) + + + + + + + + + + + View + Standard has Day, Week and Month + + Standard + Custom + + + + Initial selected view + Work week and agenda are only available in custom views + + Day + Week + Month + (Work week) + (Agenda) + + + + Start date attribute + The start date that should be shown in the view + + + + + + Editable + + + Default + Never + + + + Enable create + + + + + + Event data attribute + The attribute to store received raw data + + + + + + On click action + + + + On create action + The create event is triggered when a time slot is selected, and the 'Enable create' property is set to 'true' + + + On change action + The change event is triggered on moving/dragging an item or changing the start or end time of by resizing an item + + + + + Width unit + + + Pixels + Percentage + + + + Width + + + + Height unit + + + Auto + Pixels + Percentage + Viewport + + + + Height + + + + Minimum Height unit + + + None + Pixels + Percentage + Viewport + + + + Minimum height + + + + Maximum Height unit + + + None + Pixels + Percentage + Viewport + + + + Maximum height + + + + Vertical Overflow + + + Auto + Scroll + Hidden + + + + + diff --git a/packages/pluggableWidgets/calendar-web/src/__tests__/AppEvents.spec.tsx b/packages/pluggableWidgets/calendar-web/src/__tests__/AppEvents.spec.tsx new file mode 100644 index 0000000000..84583314e5 --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/src/__tests__/AppEvents.spec.tsx @@ -0,0 +1,28 @@ +import { actionValue } from "@mendix/widget-plugin-test-utils"; +import "@testing-library/jest-dom"; +import { render } from "@testing-library/react"; +// import { mount } from "enzyme"; +import { createElement } from "react"; +import { EventsContainerProps } from "../../typings/EventsProps"; +import Events from "../Events"; + +describe("App events (load)", () => { + let defaultProps: EventsContainerProps; + beforeEach(() => { + defaultProps = { + name: "app events", + class: "app-events", + onComponentLoad: actionValue(), + componentLoadDelay: 0, + onEventChangeDelay: 0, + componentLoadRepeat: false, + componentLoadRepeatInterval: 0 + }; + }); + it("render app events", async () => { + const component = render(); + const renderedDiv = await component.container.querySelector(".widget-events"); + + expect(renderedDiv).toBeEmptyDOMElement(); + }); +}); diff --git a/packages/pluggableWidgets/calendar-web/src/assets/Events.icon.active.svg b/packages/pluggableWidgets/calendar-web/src/assets/Events.icon.active.svg new file mode 100644 index 0000000000..549a748d04 --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/src/assets/Events.icon.active.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/pluggableWidgets/calendar-web/src/assets/Events.icon.dark.active.svg b/packages/pluggableWidgets/calendar-web/src/assets/Events.icon.dark.active.svg new file mode 100644 index 0000000000..2cde472fd8 --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/src/assets/Events.icon.dark.active.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/pluggableWidgets/calendar-web/src/assets/Events.icon.dark.svg b/packages/pluggableWidgets/calendar-web/src/assets/Events.icon.dark.svg new file mode 100644 index 0000000000..e32ab55af4 --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/src/assets/Events.icon.dark.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/pluggableWidgets/calendar-web/src/assets/Events.icon.svg b/packages/pluggableWidgets/calendar-web/src/assets/Events.icon.svg new file mode 100644 index 0000000000..15cba120d4 --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/src/assets/Events.icon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/pluggableWidgets/calendar-web/src/assets/icons.tsx b/packages/pluggableWidgets/calendar-web/src/assets/icons.tsx new file mode 100644 index 0000000000..450c681871 --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/src/assets/icons.tsx @@ -0,0 +1,15 @@ +import { ReactElement, createElement } from "react"; +export function EventsIcon({ isActive }: { isActive?: boolean }): ReactElement { + return ( + + + + + + ); +} diff --git a/packages/pluggableWidgets/calendar-web/src/package.xml b/packages/pluggableWidgets/calendar-web/src/package.xml new file mode 100644 index 0000000000..c5b8f383d1 --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/src/package.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/packages/pluggableWidgets/calendar-web/tsconfig.json b/packages/pluggableWidgets/calendar-web/tsconfig.json new file mode 100644 index 0000000000..a2a5b87e60 --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/tsconfig.json @@ -0,0 +1,31 @@ +{ + "include": ["./src", "./typings"], + "compilerOptions": { + "baseUrl": "./", + "noEmitOnError": true, + "sourceMap": true, + "module": "esnext", + "target": "es6", + "lib": ["esnext", "dom"], + "types": ["jest", "node"], + "moduleResolution": "node", + "declaration": false, + "noLib": false, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "strict": true, + "strictFunctionTypes": false, + "skipLibCheck": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "jsx": "react", + "jsxFactory": "createElement", + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "useUnknownInCatchVariables": false, + "exactOptionalPropertyTypes": false, + "paths": { + "react-hot-loader/root": ["./hot-typescript.ts"] + } + } +} diff --git a/packages/pluggableWidgets/calendar-web/typings/CalendarProps.d.ts b/packages/pluggableWidgets/calendar-web/typings/CalendarProps.d.ts new file mode 100644 index 0000000000..f4f25daa62 --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/typings/CalendarProps.d.ts @@ -0,0 +1,90 @@ +/** + * This file was generated from Calendar.xml + * WARNING: All changes made to this file will be overwritten + * @author Mendix Widgets Framework Team + */ +import { CSSProperties } from "react"; +import { ActionValue, EditableValue, ListValue, ListAttributeValue } from "mendix"; + +export type ViewEnum = "standard" | "custom"; + +export type DefaultViewEnum = "day" | "week" | "month" | "work_week" | "agenda"; + +export type EditableEnum = "default" | "never"; + +export type WidthUnitEnum = "pixels" | "percentage"; + +export type HeightUnitEnum = "percentageOfWidth" | "pixels" | "percentageOfParent" | "percentageOfView"; + +export type MinHeightUnitEnum = "none" | "pixels" | "percentageOfParent" | "percentageOfView"; + +export type MaxHeightUnitEnum = "none" | "pixels" | "percentageOfParent" | "percentageOfView"; + +export type OverflowYEnum = "auto" | "scroll" | "hidden"; + +export interface CalendarContainerProps { + name: string; + class: string; + style?: CSSProperties; + tabIndex?: number; + databaseDataSource?: ListValue; + titleAttribute?: ListAttributeValue; + allDayAttribute?: ListAttributeValue; + startAttribute?: ListAttributeValue; + endAttribute?: ListAttributeValue; + eventColor?: ListAttributeValue; + view: ViewEnum; + defaultView: DefaultViewEnum; + startDateAttribute?: EditableValue; + editable: EditableEnum; + enableCreate: boolean; + eventDataAttribute?: EditableValue; + onClickEvent?: ActionValue; + onCreateEvent?: ActionValue; + onChange?: ActionValue; + widthUnit: WidthUnitEnum; + width: number; + heightUnit: HeightUnitEnum; + height: number; + minHeightUnit: MinHeightUnitEnum; + minHeight: number; + maxHeightUnit: MaxHeightUnitEnum; + maxHeight: number; + OverflowY: OverflowYEnum; +} + +export interface CalendarPreviewProps { + /** + * @deprecated Deprecated since version 9.18.0. Please use class property instead. + */ + className: string; + class: string; + style: string; + styleObject?: CSSProperties; + readOnly: boolean; + renderMode?: "design" | "xray" | "structure"; + databaseDataSource: {} | { caption: string } | { type: string } | null; + titleAttribute: string; + allDayAttribute: string; + startAttribute: string; + endAttribute: string; + eventColor: string; + view: ViewEnum; + defaultView: DefaultViewEnum; + startDateAttribute: string; + editable: EditableEnum; + enableCreate: boolean; + eventDataAttribute: string; + onClickEvent: {} | null; + onCreateEvent: {} | null; + onChange: {} | null; + widthUnit: WidthUnitEnum; + width: number | null; + heightUnit: HeightUnitEnum; + height: number | null; + minHeightUnit: MinHeightUnitEnum; + minHeight: number | null; + maxHeightUnit: MaxHeightUnitEnum; + maxHeight: number | null; + OverflowY: OverflowYEnum; +} diff --git a/packages/pluggableWidgets/calendar-web/typings/declare-svg.ts b/packages/pluggableWidgets/calendar-web/typings/declare-svg.ts new file mode 100644 index 0000000000..e6958d5a9f --- /dev/null +++ b/packages/pluggableWidgets/calendar-web/typings/declare-svg.ts @@ -0,0 +1,4 @@ +declare module "*.svg" { + const content: string; + export = content; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 63f9126e5a..12bff07c02 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -741,6 +741,52 @@ importers: specifier: workspace:* version: link:../../shared/widget-plugin-test-utils + packages/pluggableWidgets/calendar-web: + dependencies: + classnames: + specifier: ^2.3.2 + version: 2.3.2 + date-fns: + specifier: ^4.1.0 + version: 4.1.0 + react-big-calendar: + specifier: ^1.17.1 + version: 1.17.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + devDependencies: + '@mendix/automation-utils': + specifier: workspace:* + version: link:../../../automation/utils + '@mendix/eslint-config-web-widgets': + specifier: workspace:* + version: link:../../shared/eslint-config-web-widgets + '@mendix/pluggable-widgets-tools': + specifier: 10.16.0 + version: 10.16.0(@jest/types@29.6.3)(@swc/core@1.7.26)(@types/babel__core@7.20.3)(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react-native@0.75.3(@babel/core@7.25.8)(@babel/preset-env@7.23.2(@babel/core@7.25.8))(@types/react@18.2.36)(react@18.2.0)(typescript@5.0.4))(react@18.2.0)(tslib@2.7.0) + '@mendix/prettier-config-web-widgets': + specifier: workspace:* + version: link:../../shared/prettier-config-web-widgets + '@mendix/run-e2e': + specifier: workspace:^* + version: link:../../../automation/run-e2e + '@mendix/widget-plugin-component-kit': + specifier: workspace:* + version: link:../../shared/widget-plugin-component-kit + '@mendix/widget-plugin-hooks': + specifier: workspace:* + version: link:../../shared/widget-plugin-hooks + '@mendix/widget-plugin-platform': + specifier: workspace:* + version: link:../../shared/widget-plugin-platform + '@mendix/widget-plugin-test-utils': + specifier: workspace:* + version: link:../../shared/widget-plugin-test-utils + '@types/react-big-calendar': + specifier: ^1.16.1 + version: 1.16.1 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + packages/pluggableWidgets/carousel-web: dependencies: '@types/react-test-renderer': @@ -2881,12 +2927,14 @@ packages: '@babel/plugin-proposal-async-generator-functions@7.20.7': resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-class-properties@7.18.6': resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 @@ -2899,36 +2947,42 @@ packages: '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6': resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-numeric-separator@7.18.6': resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-object-rest-spread@7.20.7': resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-optional-catch-binding@7.18.6': resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-optional-chaining@7.21.0': resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-private-methods@7.18.6': resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. peerDependencies: '@babel/core': ^7.0.0-0 @@ -3684,6 +3738,7 @@ packages: '@humanwhocodes/config-array@0.5.0': resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} @@ -3691,6 +3746,7 @@ packages: '@humanwhocodes/object-schema@1.2.1': resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + deprecated: Use @eslint/object-schema instead '@humanwhocodes/object-schema@2.0.3': resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} @@ -4566,6 +4622,9 @@ packages: '@types/react-big-calendar@0.20.20': resolution: {integrity: sha512-XVKERX7vh5MqUkIPaWKkHBYmurbCYs0OTEBdcxChgKbXqeXviGz7+6Yzff4uI/dy/uBgaD3igQSLcJDgiZhdcQ==} + '@types/react-big-calendar@1.16.1': + resolution: {integrity: sha512-pDHFcVWx+BvZbX6U39R4l8c9930vKnfx+09lf4W8r8HuxBDLzGk7Q63ncBmqqnQImEFNDKfwa6MDyu90cfzJ2A==} + '@types/react-color@2.17.6': resolution: {integrity: sha512-5CEKnrpvgZz8v5UYbpLgBeK+V6K7KdszksSDK6mNjL/8wrsqQfIyKB45CQOAEYtRgn+tWqTeqbUtvFWjXDpURQ==} @@ -5245,6 +5304,7 @@ packages: babel-eslint@10.1.0: resolution: {integrity: sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==} engines: {node: '>=6'} + deprecated: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates. peerDependencies: eslint: '>= 4.12.1' @@ -5536,6 +5596,10 @@ packages: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} + clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + clsx@2.1.0: resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} engines: {node: '>=6'} @@ -5969,6 +6033,9 @@ packages: date-arithmetic@3.1.0: resolution: {integrity: sha512-ynlmvduDVuzwDDYW3OF4RHCikdzegg0vWQtzwjiVKPs/RjZ93b/7AxIwhfZKxSQQFA8l9lwhkyeDVQyrzbPUwA==} + date-arithmetic@4.1.0: + resolution: {integrity: sha512-QWxYLR5P/6GStZcdem+V1xoto6DMadYWpMXU82ES3/RfR3Wdwr3D0+be7mgOJ+Ov0G9D5Dmb9T17sNLQYj9XOg==} + date-fns@2.30.0: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} @@ -5976,6 +6043,9 @@ packages: date-fns@3.6.0: resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + date-format@4.0.14: resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} engines: {node: '>=4.0'} @@ -6496,6 +6566,7 @@ packages: eslint@7.32.0: resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} engines: {node: ^10.12.0 || >=12.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true eslint@8.57.0: @@ -6897,6 +6968,9 @@ packages: resolution: {integrity: sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==} engines: {node: '>=16'} + globalize@0.1.1: + resolution: {integrity: sha512-5e01v8eLGfuQSOvx2MsDMOWS0GFtCx1wPzQSmcHw4hkxFzrQDBO3Xwg/m8Hr/7qXMrHeOIE29qWVzyv06u1TZA==} + globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -7976,6 +8050,10 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} + luxon@3.5.0: + resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==} + engines: {node: '>=12'} + lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -8064,6 +8142,9 @@ packages: memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + mendix-client@7.15.8: resolution: {integrity: sha512-RazCdCHoLVNKUUeKDkSkIL6Lxx6fUaa4iiy+Ltp9ra8mLQhwyNqD33TIN7YZJ3HDjHc3eWh9cjiZWwh6Jg/cQg==} @@ -8261,6 +8342,9 @@ packages: engines: {node: '>= 14.0.0'} hasBin: true + moment-timezone@0.5.47: + resolution: {integrity: sha512-UbNt/JAWS0m/NJOebR0QMRHBk0hu03r5dx9GK8Cs0AS3I81yDcOc9k+DytPItgVvBP7J6Mf6U2n3BPAacAV9oA==} + moment@2.29.4: resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} @@ -9148,6 +9232,12 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 + react-big-calendar@1.17.1: + resolution: {integrity: sha512-LltUAMSGODWQBKx4013bRe6R0jaINV9hrs970+F860KedpozwRGGMT66esV9mA3mAhfSKoazF/QH1WCyLkXYZA==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + react-color@2.19.3: resolution: {integrity: sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==} peerDependencies: @@ -9547,6 +9637,7 @@ packages: rollup-plugin-terser@7.0.2: resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser peerDependencies: rollup: ^2.79.2 @@ -13199,7 +13290,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.12.12 + '@types/node': 22.7.5 '@types/yargs': 15.0.19 chalk: 4.1.2 @@ -14729,7 +14820,7 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 20.12.12 + '@types/node': 22.7.5 '@types/node@20.12.12': dependencies: @@ -14769,6 +14860,12 @@ snapshots: '@types/prop-types': 15.7.9 '@types/react': 18.2.36 + '@types/react-big-calendar@1.16.1': + dependencies: + '@types/date-arithmetic': 3.1.2 + '@types/prop-types': 15.7.9 + '@types/react': 18.2.36 + '@types/react-color@2.17.6': dependencies: '@types/react': 18.2.36 @@ -15992,7 +16089,7 @@ snapshots: chrome-launcher@0.15.2: dependencies: - '@types/node': 20.12.12 + '@types/node': 22.7.5 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -16003,7 +16100,7 @@ snapshots: chromium-edge-launcher@0.2.0: dependencies: - '@types/node': 20.12.12 + '@types/node': 22.7.5 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -16054,6 +16151,8 @@ snapshots: clone@1.0.4: {} + clsx@1.2.1: {} + clsx@2.1.0: {} co@4.6.0: {} @@ -16685,12 +16784,16 @@ snapshots: date-arithmetic@3.1.0: {} + date-arithmetic@4.1.0: {} + date-fns@2.30.0: dependencies: - '@babel/runtime': 7.22.5 + '@babel/runtime': 7.25.7 date-fns@3.6.0: {} + date-fns@4.1.0: {} + date-format@4.0.14: {} dayjs@1.11.13: {} @@ -17870,6 +17973,8 @@ snapshots: kind-of: 6.0.3 which: 4.0.0 + globalize@0.1.1: {} + globals@11.12.0: {} globals@13.20.0: @@ -19399,6 +19504,8 @@ snapshots: dependencies: yallist: 4.0.0 + luxon@3.5.0: {} + lz-string@1.5.0: {} magic-string@0.16.0: @@ -19536,6 +19643,8 @@ snapshots: memoize-one@5.2.1: {} + memoize-one@6.0.0: {} + mendix-client@7.15.8: dependencies: '@types/big.js': 6.2.2 @@ -19910,6 +20019,10 @@ snapshots: yargs-parser: 20.2.4 yargs-unparser: 2.0.0 + moment-timezone@0.5.47: + dependencies: + moment: 2.30.1 + moment@2.29.4: {} moment@2.30.1: {} @@ -21074,6 +21187,27 @@ snapshots: uncontrollable: 4.1.0(react@18.2.0) warning: 2.1.0 + react-big-calendar@1.17.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + '@babel/runtime': 7.25.7 + clsx: 1.2.1 + date-arithmetic: 4.1.0 + dayjs: 1.11.13 + dom-helpers: 5.2.1 + globalize: 0.1.1 + invariant: 2.2.4 + lodash: 4.17.21 + lodash-es: 4.17.21 + luxon: 3.5.0 + memoize-one: 6.0.0 + moment: 2.30.1 + moment-timezone: 0.5.47 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-overlays: 5.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + uncontrollable: 7.2.1(react@18.2.0) + react-color@2.19.3(react@18.2.0): dependencies: '@icons/material': 0.2.4(react@18.2.0) @@ -21329,7 +21463,7 @@ snapshots: react-overlays@5.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.22.5 + '@babel/runtime': 7.25.7 '@popperjs/core': 2.11.8 '@restart/hooks': 0.4.9(react@18.2.0) '@types/warning': 3.0.0