diff --git a/.github/workflows/sb.yml b/.github/workflows/sb.yml index fd888e96bd..7649d7aaca 100644 --- a/.github/workflows/sb.yml +++ b/.github/workflows/sb.yml @@ -8,6 +8,11 @@ on: pull_request: branches: - master + types: + - opened + - reopened + - synchronize + - ready_for_review workflow_dispatch: # Allow one concurrent deployment diff --git a/package-lock.json b/package-lock.json index e451e5c18f..13b5555f7a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@fortawesome/fontawesome-free": "^6.1.1", "@open-formulieren/design-tokens": "^0.51.0", - "@open-formulieren/formio-builder": "^0.25.0", + "@open-formulieren/formio-builder": "^0.26.0", "@open-formulieren/leaflet-tools": "^1.0.0", "@open-formulieren/monaco-json-editor": "^0.2.0", "@rjsf/core": "^4.2.1", @@ -4679,16 +4679,16 @@ "integrity": "sha512-SpAYCkqIOe2DMGxPg2vweRJOnUjDwD+h7nQEKZz2+1kgW2XwcFIDwerBRBqgaYtDvzxrYmSaTIB0SnoZYg4YDw==" }, "node_modules/@open-formulieren/formio-builder": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@open-formulieren/formio-builder/-/formio-builder-0.25.0.tgz", - "integrity": "sha512-b4Z33nvT4C1j7VdivAx2MtphKZW533VnSFueM3lj93pGy/rb75Ora/5wrjFha/BwWQXwcVlT+38/8aQREFnfnA==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@open-formulieren/formio-builder/-/formio-builder-0.26.0.tgz", + "integrity": "sha512-p02MHJra6ut6UpmpfwPaW9GaTFC3ghfp2u8yhUlRN0QMwlfXhqdHkH2xMIHrtadbd98bqAWpXufsYk0ILesu8Q==", "dependencies": { "@ckeditor/ckeditor5-react": "^6.2.0", "@floating-ui/react": "^0.26.4", "@open-formulieren/ckeditor5-build-classic": "^1.0.1", "@open-formulieren/leaflet-tools": "^1.0.0", "@open-formulieren/monaco-json-editor": "^0.2.0", - "@storybook/test": "^8.0.8", + "@storybook/test": "^8.2.6", "clsx": "^1.2.1", "formik": "^2.4.5", "leaflet": "^1.9.4", @@ -4713,6 +4713,193 @@ "react": "^18.0.0" } }, + "node_modules/@open-formulieren/formio-builder/node_modules/@storybook/instrumenter": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.2.6.tgz", + "integrity": "sha512-RxtpcMTUSq8/wPM6cR6EXVrPEiNuRbC71cIFVFZagOFYvnnOKwSPV+GOLPK0wxMbGB4c5/+Xe8ADefmZTvxOsA==", + "dependencies": { + "@storybook/global": "^5.0.0", + "@vitest/utils": "^1.3.1", + "util": "^0.12.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.2.6" + } + }, + "node_modules/@open-formulieren/formio-builder/node_modules/@storybook/test": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.2.6.tgz", + "integrity": "sha512-nTzNxReBcMRlX1+8PNU/MuA9ArFbeQhfZXMBIwJJoHOhnNe1knYpyn1++xINxAHKOh0BBhQ0NIMoKdcGmW3V6w==", + "dependencies": { + "@storybook/csf": "0.1.11", + "@storybook/instrumenter": "8.2.6", + "@testing-library/dom": "10.1.0", + "@testing-library/jest-dom": "6.4.5", + "@testing-library/user-event": "14.5.2", + "@vitest/expect": "1.6.0", + "@vitest/spy": "1.6.0", + "util": "^0.12.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.2.6" + } + }, + "node_modules/@open-formulieren/formio-builder/node_modules/@testing-library/dom": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.1.0.tgz", + "integrity": "sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@open-formulieren/formio-builder/node_modules/@vitest/expect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.0.tgz", + "integrity": "sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==", + "dependencies": { + "@vitest/spy": "1.6.0", + "@vitest/utils": "1.6.0", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@open-formulieren/formio-builder/node_modules/@vitest/utils": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.0.tgz", + "integrity": "sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==", + "dependencies": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@open-formulieren/formio-builder/node_modules/@vitest/utils/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@open-formulieren/formio-builder/node_modules/@vitest/utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@open-formulieren/formio-builder/node_modules/@vitest/utils/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "node_modules/@open-formulieren/formio-builder/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@open-formulieren/formio-builder/node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/@open-formulieren/formio-builder/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@open-formulieren/formio-builder/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@open-formulieren/formio-builder/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@open-formulieren/formio-builder/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@open-formulieren/formio-builder/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, "node_modules/@open-formulieren/formio-builder/node_modules/react-tabs": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-4.3.0.tgz", @@ -4725,6 +4912,17 @@ "react": "^16.8.0 || ^17.0.0-0 || ^18.0.0" } }, + "node_modules/@open-formulieren/formio-builder/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@open-formulieren/leaflet-tools": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@open-formulieren/leaflet-tools/-/leaflet-tools-1.0.0.tgz", @@ -5762,6 +5960,7 @@ "version": "8.1.10", "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.10.tgz", "integrity": "sha512-CxZE4XrQoe+F+S2mo8Z9HTvFZKfKHIIiwYfoXKCryVp2U/z7ZKrely2PbfxWsrQvF3H0+oegfYYhYRHRiM21Zw==", + "dev": true, "dependencies": { "@storybook/client-logger": "8.1.10", "@storybook/core-events": "8.1.10", @@ -5995,6 +6194,7 @@ "version": "8.1.10", "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.10.tgz", "integrity": "sha512-sVXCOo7jnlCgRPOcMlQGODAEt6ipPj+8xGkRUws0kie77qiDld1drLSB6R380dWc9lUrbv9E1GpxCd/Y4ZzSJQ==", + "dev": true, "dependencies": { "@storybook/global": "^5.0.0" }, @@ -6332,6 +6532,7 @@ "version": "8.1.10", "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.10.tgz", "integrity": "sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==", + "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", "ts-dedent": "^2.0.0" @@ -6530,9 +6731,9 @@ } }, "node_modules/@storybook/csf": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.7.tgz", - "integrity": "sha512-53JeLZBibjQxi0Ep+/AJTfxlofJlxy1jXcSKENlnKxHjWEYyHQCumMP5yTFjf7vhNnMjEpV3zx6t23ssFiGRyw==", + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.11.tgz", + "integrity": "sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==", "dependencies": { "type-fest": "^2.19.0" } @@ -6681,6 +6882,7 @@ "version": "8.1.10", "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.1.10.tgz", "integrity": "sha512-/TZ3JpTCorbhThCfaR5k4Vs0Svp6xz6t+FVaim/v7N9VErEfmtn+d76CqYLfvmo68DzkEzvArOFBdh2MXtscsw==", + "dev": true, "dependencies": { "@storybook/channels": "8.1.10", "@storybook/client-logger": "8.1.10", @@ -6850,6 +7052,7 @@ "version": "8.1.10", "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.10.tgz", "integrity": "sha512-0Gl8WHDtp/srrA5uBYXl7YbC8kFQA7IxVmwWN7dIS7HAXu63JZ6JfxaFcfy+kCBfZSBD7spFG4J0f5JXRDYbpg==", + "dev": true, "dependencies": { "@storybook/channels": "8.1.10", "@storybook/client-logger": "8.1.10", @@ -7128,6 +7331,7 @@ "version": "8.1.10", "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.1.10.tgz", "integrity": "sha512-uskw/xb/GkGLRTEKPao/5xUKxjP1X3DnDpE52xDF46ZmTvM+gPQbkex97qdG6Mfv37/0lhVhufAsV3g5+CrYKQ==", + "dev": true, "dependencies": { "@storybook/client-logger": "8.1.10", "@storybook/core-events": "8.1.10", @@ -7242,6 +7446,7 @@ "version": "8.1.10", "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.10.tgz", "integrity": "sha512-UJ97iqI+0Mk13I6ayd3TaBfSFBkWnEauwTnFMQe1dN/L3wTh8laOBaLa0Vr3utRSnt2b5hpcw/nq7azB/Gx4Yw==", + "dev": true, "dependencies": { "@storybook/channels": "8.1.10", "@types/express": "^4.7.0", @@ -7486,6 +7691,7 @@ "version": "9.3.4", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -7504,6 +7710,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -7518,6 +7725,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7533,6 +7741,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -7541,6 +7750,7 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -7554,6 +7764,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "engines": { "node": ">=10" }, @@ -7564,12 +7775,14 @@ "node_modules/@testing-library/dom/node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true }, "node_modules/@testing-library/dom/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -7578,9 +7791,9 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.2.tgz", - "integrity": "sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw==", + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.5.tgz", + "integrity": "sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==", "dependencies": { "@adobe/css-tools": "^4.3.2", "@babel/runtime": "^7.9.2", @@ -7588,7 +7801,7 @@ "chalk": "^3.0.0", "css.escape": "^1.5.1", "dom-accessibility-api": "^0.6.3", - "lodash": "^4.17.15", + "lodash": "^4.17.21", "redent": "^3.0.0" }, "engines": { @@ -7817,6 +8030,7 @@ "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -7826,6 +8040,7 @@ "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, "dependencies": { "@types/node": "*" } @@ -7919,6 +8134,7 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -7930,6 +8146,7 @@ "version": "4.19.5", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -7972,7 +8189,8 @@ "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", @@ -8043,7 +8261,8 @@ "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true }, "node_modules/@types/ms": { "version": "0.7.34", @@ -8081,12 +8300,14 @@ "node_modules/@types/qs": { "version": "6.9.10", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", - "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==" + "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true }, "node_modules/@types/react": { "version": "17.0.17", @@ -8127,6 +8348,7 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -8136,6 +8358,7 @@ "version": "1.15.7", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, "dependencies": { "@types/http-errors": "*", "@types/node": "*", @@ -8216,6 +8439,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.3.1.tgz", "integrity": "sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==", + "dev": true, "dependencies": { "@vitest/spy": "1.3.1", "@vitest/utils": "1.3.1", @@ -8229,6 +8453,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.3.1.tgz", "integrity": "sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==", + "dev": true, "dependencies": { "tinyspy": "^2.2.0" }, @@ -8237,9 +8462,9 @@ } }, "node_modules/@vitest/spy": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.5.0.tgz", - "integrity": "sha512-vu6vi6ew5N5MMHJjD5PoakMRKYdmIrNJmyfkhRpQt5d9Ewhw9nZ5Aqynbi3N61bvk9UvZ5UysMT6ayIrZ8GA9w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.0.tgz", + "integrity": "sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==", "dependencies": { "tinyspy": "^2.2.0" }, @@ -8251,6 +8476,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.3.1.tgz", "integrity": "sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==", + "dev": true, "dependencies": { "diff-sequences": "^29.6.3", "estree-walker": "^3.0.3", @@ -12146,6 +12372,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz", "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==", + "dev": true, "dependencies": { "fs-extra": "11.1.1", "ramda": "0.29.0" @@ -12719,6 +12946,7 @@ "version": "11.1.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -16343,6 +16571,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "dependencies": { "universalify": "^2.0.0" }, @@ -16735,7 +16964,8 @@ "node_modules/map-or-similar": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", - "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==" + "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==", + "dev": true }, "node_modules/markdown-to-jsx": { "version": "7.3.2", @@ -16784,6 +17014,7 @@ "version": "1.11.3", "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", + "dev": true, "dependencies": { "map-or-similar": "^1.5.0" } @@ -18998,6 +19229,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -19011,6 +19243,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "engines": { "node": ">=10" }, @@ -19021,7 +19254,8 @@ "node_modules/pretty-format/node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true }, "node_modules/pretty-hrtime": { "version": "1.0.3", @@ -19189,6 +19423,7 @@ "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, "dependencies": { "side-channel": "^1.0.4" }, @@ -19281,6 +19516,7 @@ "version": "0.29.0", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz", "integrity": "sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==", + "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/ramda" @@ -21279,6 +21515,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", + "dev": true, "dependencies": { "memoizerific": "^1.11.3" } @@ -21539,7 +21776,8 @@ "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "dev": true }, "node_modules/tiny-warning": { "version": "1.0.3", @@ -21671,6 +21909,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true, "engines": { "node": ">=6.10" } @@ -21919,6 +22158,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, "engines": { "node": ">= 10.0.0" } @@ -22188,7 +22428,8 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "node_modules/utila": { "version": "0.4.0", @@ -26357,16 +26598,16 @@ "integrity": "sha512-SpAYCkqIOe2DMGxPg2vweRJOnUjDwD+h7nQEKZz2+1kgW2XwcFIDwerBRBqgaYtDvzxrYmSaTIB0SnoZYg4YDw==" }, "@open-formulieren/formio-builder": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@open-formulieren/formio-builder/-/formio-builder-0.25.0.tgz", - "integrity": "sha512-b4Z33nvT4C1j7VdivAx2MtphKZW533VnSFueM3lj93pGy/rb75Ora/5wrjFha/BwWQXwcVlT+38/8aQREFnfnA==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@open-formulieren/formio-builder/-/formio-builder-0.26.0.tgz", + "integrity": "sha512-p02MHJra6ut6UpmpfwPaW9GaTFC3ghfp2u8yhUlRN0QMwlfXhqdHkH2xMIHrtadbd98bqAWpXufsYk0ILesu8Q==", "requires": { "@ckeditor/ckeditor5-react": "^6.2.0", "@floating-ui/react": "^0.26.4", "@open-formulieren/ckeditor5-build-classic": "^1.0.1", "@open-formulieren/leaflet-tools": "^1.0.0", "@open-formulieren/monaco-json-editor": "^0.2.0", - "@storybook/test": "^8.0.8", + "@storybook/test": "^8.2.6", "clsx": "^1.2.1", "formik": "^2.4.5", "leaflet": "^1.9.4", @@ -26387,6 +26628,141 @@ "zod-formik-adapter": "^1.2.0" }, "dependencies": { + "@storybook/instrumenter": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.2.6.tgz", + "integrity": "sha512-RxtpcMTUSq8/wPM6cR6EXVrPEiNuRbC71cIFVFZagOFYvnnOKwSPV+GOLPK0wxMbGB4c5/+Xe8ADefmZTvxOsA==", + "requires": { + "@storybook/global": "^5.0.0", + "@vitest/utils": "^1.3.1", + "util": "^0.12.4" + } + }, + "@storybook/test": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.2.6.tgz", + "integrity": "sha512-nTzNxReBcMRlX1+8PNU/MuA9ArFbeQhfZXMBIwJJoHOhnNe1knYpyn1++xINxAHKOh0BBhQ0NIMoKdcGmW3V6w==", + "requires": { + "@storybook/csf": "0.1.11", + "@storybook/instrumenter": "8.2.6", + "@testing-library/dom": "10.1.0", + "@testing-library/jest-dom": "6.4.5", + "@testing-library/user-event": "14.5.2", + "@vitest/expect": "1.6.0", + "@vitest/spy": "1.6.0", + "util": "^0.12.4" + } + }, + "@testing-library/dom": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.1.0.tgz", + "integrity": "sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + } + }, + "@vitest/expect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.0.tgz", + "integrity": "sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==", + "requires": { + "@vitest/spy": "1.6.0", + "@vitest/utils": "1.6.0", + "chai": "^4.3.10" + } + }, + "@vitest/utils": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.0.tgz", + "integrity": "sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==", + "requires": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + } + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "requires": { + "dequal": "^2.0.3" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + } + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, "react-tabs": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-4.3.0.tgz", @@ -26395,6 +26771,14 @@ "clsx": "^1.1.0", "prop-types": "^15.5.0" } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -27072,6 +27456,7 @@ "version": "8.1.10", "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.10.tgz", "integrity": "sha512-CxZE4XrQoe+F+S2mo8Z9HTvFZKfKHIIiwYfoXKCryVp2U/z7ZKrely2PbfxWsrQvF3H0+oegfYYhYRHRiM21Zw==", + "dev": true, "requires": { "@storybook/client-logger": "8.1.10", "@storybook/core-events": "8.1.10", @@ -27235,6 +27620,7 @@ "version": "8.1.10", "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.10.tgz", "integrity": "sha512-sVXCOo7jnlCgRPOcMlQGODAEt6ipPj+8xGkRUws0kie77qiDld1drLSB6R380dWc9lUrbv9E1GpxCd/Y4ZzSJQ==", + "dev": true, "requires": { "@storybook/global": "^5.0.0" } @@ -27470,6 +27856,7 @@ "version": "8.1.10", "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.10.tgz", "integrity": "sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==", + "dev": true, "requires": { "@storybook/csf": "^0.1.7", "ts-dedent": "^2.0.0" @@ -27624,9 +28011,9 @@ } }, "@storybook/csf": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.7.tgz", - "integrity": "sha512-53JeLZBibjQxi0Ep+/AJTfxlofJlxy1jXcSKENlnKxHjWEYyHQCumMP5yTFjf7vhNnMjEpV3zx6t23ssFiGRyw==", + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.11.tgz", + "integrity": "sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==", "requires": { "type-fest": "^2.19.0" }, @@ -27745,6 +28132,7 @@ "version": "8.1.10", "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.1.10.tgz", "integrity": "sha512-/TZ3JpTCorbhThCfaR5k4Vs0Svp6xz6t+FVaim/v7N9VErEfmtn+d76CqYLfvmo68DzkEzvArOFBdh2MXtscsw==", + "dev": true, "requires": { "@storybook/channels": "8.1.10", "@storybook/client-logger": "8.1.10", @@ -27862,6 +28250,7 @@ "version": "8.1.10", "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.10.tgz", "integrity": "sha512-0Gl8WHDtp/srrA5uBYXl7YbC8kFQA7IxVmwWN7dIS7HAXu63JZ6JfxaFcfy+kCBfZSBD7spFG4J0f5JXRDYbpg==", + "dev": true, "requires": { "@storybook/channels": "8.1.10", "@storybook/client-logger": "8.1.10", @@ -28055,6 +28444,7 @@ "version": "8.1.10", "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.1.10.tgz", "integrity": "sha512-uskw/xb/GkGLRTEKPao/5xUKxjP1X3DnDpE52xDF46ZmTvM+gPQbkex97qdG6Mfv37/0lhVhufAsV3g5+CrYKQ==", + "dev": true, "requires": { "@storybook/client-logger": "8.1.10", "@storybook/core-events": "8.1.10", @@ -28139,6 +28529,7 @@ "version": "8.1.10", "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.10.tgz", "integrity": "sha512-UJ97iqI+0Mk13I6ayd3TaBfSFBkWnEauwTnFMQe1dN/L3wTh8laOBaLa0Vr3utRSnt2b5hpcw/nq7azB/Gx4Yw==", + "dev": true, "requires": { "@storybook/channels": "8.1.10", "@types/express": "^4.7.0", @@ -28265,6 +28656,7 @@ "version": "9.3.4", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", + "dev": true, "requires": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -28280,6 +28672,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -28288,6 +28681,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -28296,12 +28690,14 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, "requires": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -28311,19 +28707,22 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true } } }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -28331,9 +28730,9 @@ } }, "@testing-library/jest-dom": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.2.tgz", - "integrity": "sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw==", + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.5.tgz", + "integrity": "sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==", "requires": { "@adobe/css-tools": "^4.3.2", "@babel/runtime": "^7.9.2", @@ -28341,7 +28740,7 @@ "chalk": "^3.0.0", "css.escape": "^1.5.1", "dom-accessibility-api": "^0.6.3", - "lodash": "^4.17.15", + "lodash": "^4.17.21", "redent": "^3.0.0" }, "dependencies": { @@ -28500,6 +28899,7 @@ "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, "requires": { "@types/connect": "*", "@types/node": "*" @@ -28509,6 +28909,7 @@ "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, "requires": { "@types/node": "*" } @@ -28602,6 +29003,7 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, "requires": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -28613,6 +29015,7 @@ "version": "4.19.5", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dev": true, "requires": { "@types/node": "*", "@types/qs": "*", @@ -28655,7 +29058,8 @@ "@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true }, "@types/istanbul-lib-coverage": { "version": "2.0.4", @@ -28726,7 +29130,8 @@ "@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true }, "@types/ms": { "version": "0.7.34", @@ -28764,12 +29169,14 @@ "@types/qs": { "version": "6.9.10", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", - "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==" + "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", + "dev": true }, "@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true }, "@types/react": { "version": "17.0.17", @@ -28810,6 +29217,7 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, "requires": { "@types/mime": "^1", "@types/node": "*" @@ -28819,6 +29227,7 @@ "version": "1.15.7", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, "requires": { "@types/http-errors": "*", "@types/node": "*", @@ -28899,6 +29308,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.3.1.tgz", "integrity": "sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==", + "dev": true, "requires": { "@vitest/spy": "1.3.1", "@vitest/utils": "1.3.1", @@ -28909,6 +29319,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.3.1.tgz", "integrity": "sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==", + "dev": true, "requires": { "tinyspy": "^2.2.0" } @@ -28916,9 +29327,9 @@ } }, "@vitest/spy": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.5.0.tgz", - "integrity": "sha512-vu6vi6ew5N5MMHJjD5PoakMRKYdmIrNJmyfkhRpQt5d9Ewhw9nZ5Aqynbi3N61bvk9UvZ5UysMT6ayIrZ8GA9w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.0.tgz", + "integrity": "sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==", "requires": { "tinyspy": "^2.2.0" } @@ -28927,6 +29338,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.3.1.tgz", "integrity": "sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==", + "dev": true, "requires": { "diff-sequences": "^29.6.3", "estree-walker": "^3.0.3", @@ -31974,6 +32386,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz", "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==", + "dev": true, "requires": { "fs-extra": "11.1.1", "ramda": "0.29.0" @@ -32398,6 +32811,7 @@ "version": "11.1.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -34983,6 +35397,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" @@ -35298,7 +35713,8 @@ "map-or-similar": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", - "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==" + "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==", + "dev": true }, "markdown-to-jsx": { "version": "7.3.2", @@ -35335,6 +35751,7 @@ "version": "1.11.3", "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", + "dev": true, "requires": { "map-or-similar": "^1.5.0" } @@ -36864,6 +37281,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "requires": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -36873,12 +37291,14 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true }, "react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true } } }, @@ -37022,6 +37442,7 @@ "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, "requires": { "side-channel": "^1.0.4" } @@ -37089,7 +37510,8 @@ "ramda": { "version": "0.29.0", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz", - "integrity": "sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==" + "integrity": "sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==", + "dev": true }, "randombytes": { "version": "2.1.0", @@ -38606,6 +39028,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", + "dev": true, "requires": { "memoizerific": "^1.11.3" } @@ -38805,7 +39228,8 @@ "tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "dev": true }, "tiny-warning": { "version": "1.0.3", @@ -38913,7 +39337,8 @@ "ts-dedent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==" + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true }, "ts-easing": { "version": "0.2.0", @@ -39093,7 +39518,8 @@ "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true }, "unpipe": { "version": "1.0.0", @@ -39266,7 +39692,8 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "utila": { "version": "0.4.0", diff --git a/package.json b/package.json index 3637646f26..9ff880e95a 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "dependencies": { "@fortawesome/fontawesome-free": "^6.1.1", "@open-formulieren/design-tokens": "^0.51.0", - "@open-formulieren/formio-builder": "^0.25.0", + "@open-formulieren/formio-builder": "^0.26.0", "@open-formulieren/leaflet-tools": "^1.0.0", "@open-formulieren/monaco-json-editor": "^0.2.0", "@rjsf/core": "^4.2.1", diff --git a/src/openforms/js/compiled-lang/en.json b/src/openforms/js/compiled-lang/en.json index d65353418b..762e5bade4 100644 --- a/src/openforms/js/compiled-lang/en.json +++ b/src/openforms/js/compiled-lang/en.json @@ -741,12 +741,6 @@ "value": "Maximum date" } ], - "7Vx5It": [ - { - "type": 0, - "value": "No compatible registration backend configured." - } - ], "7X6yT4": [ { "type": 0, @@ -935,6 +929,12 @@ "value": "Please select the logic type:" } ], + "9LdZVP": [ + { + "type": 0, + "value": "Attribute" + } + ], "9LflJr": [ { "type": 0, @@ -1439,6 +1439,12 @@ "value": "Could not retrieve the decision definitions IDs/versions. Is the selected DMN plugin running and properly configured?" } ], + "DWhkNq": [ + { + "type": 0, + "value": "Plugin" + } + ], "DaxIUG": [ { "type": 0, @@ -2233,22 +2239,22 @@ "value": "Below you can specify a custom template for the configuration email. If not specified, the globally configured template will be used." } ], - "MnfzL3": [ + "Mdnl0l": [ { "type": 0, - "value": "Plugin ID" + "value": "Prefill" } ], - "Mv8yjC": [ + "MnfzL3": [ { "type": 0, - "value": "Form variables configuration" + "value": "Plugin ID" } ], - "MzMXRd": [ + "Mv8yjC": [ { "type": 0, - "value": "Prefill attribute" + "value": "Form variables configuration" } ], "NE5h2q": [ @@ -2353,10 +2359,42 @@ "value": ". Extend your session if you wish to continue." } ], - "OibWN2": [ + "Oi+DV0": [ + { + "children": [ + { + "type": 1, + "value": "attr" + } + ], + "type": 8, + "value": "code" + }, { "type": 0, - "value": "Prefill identifier role" + "value": " from " + }, + { + "children": [ + { + "type": 1, + "value": "plugin" + } + ], + "type": 8, + "value": "code" + }, + { + "type": 0, + "value": " (of the " + }, + { + "type": 1, + "value": "role" + }, + { + "type": 0, + "value": ")" } ], "OlPsaw": [ @@ -2521,6 +2559,12 @@ "value": "Payment backend options" } ], + "QsrtPz": [ + { + "type": 0, + "value": "Prefill configuration" + } + ], "R/XadM": [ { "type": 0, @@ -2893,6 +2937,12 @@ "value": "Minimum time" } ], + "Uq9Hbx": [ + { + "type": 0, + "value": "-" + } + ], "Uu+81U": [ { "type": 0, @@ -3097,12 +3147,6 @@ "value": "Logic" } ], - "WjDh7l": [ - { - "type": 0, - "value": "Prefill plugin" - } - ], "WkBjB5": [ { "type": 0, @@ -3551,6 +3595,12 @@ "value": "backendName" } ], + "bmlODS": [ + { + "type": 0, + "value": "Identifier role" + } + ], "bnxtnX": [ { "type": 0, @@ -4077,6 +4127,12 @@ "value": "." } ], + "gqVGbb": [ + { + "type": 0, + "value": "Edit prefill configuration" + } + ], "gr7edY": [ { "type": 0, @@ -5115,6 +5171,12 @@ "value": "Component where the last name should be entered" } ], + "tJQoMq": [ + { + "type": 0, + "value": "There are errors in the prefill configuration." + } + ], "tLL2x4": [ { "type": 0, diff --git a/src/openforms/js/compiled-lang/nl.json b/src/openforms/js/compiled-lang/nl.json index f8f4e52ced..d1629b8178 100644 --- a/src/openforms/js/compiled-lang/nl.json +++ b/src/openforms/js/compiled-lang/nl.json @@ -741,12 +741,6 @@ "value": "Maximale datum" } ], - "7Vx5It": [ - { - "type": 0, - "value": "Er is geen (relevante) registratiemethode ingesteld." - } - ], "7X6yT4": [ { "type": 0, @@ -939,6 +933,12 @@ "value": "Kies het soort logica:" } ], + "9LdZVP": [ + { + "type": 0, + "value": "Attribuut" + } + ], "9LflJr": [ { "type": 0, @@ -1460,6 +1460,12 @@ "value": "Er ging iets fout bij het ophalen van de beschikbare beslisdefinities. Is de geselecteerde DMN-plugin goed ingesteld en beschikbaar?" } ], + "DWhkNq": [ + { + "type": 0, + "value": "Plugin" + } + ], "DaxIUG": [ { "type": 0, @@ -2254,22 +2260,22 @@ "value": "Formulierspecifiek sjabloon voor de bevestigingsmail. Indien leeg, dan worden de algemene instellingen gebruikt." } ], - "MnfzL3": [ + "Mdnl0l": [ { "type": 0, - "value": "Plugin" + "value": "Prefill" } ], - "Mv8yjC": [ + "MnfzL3": [ { "type": 0, - "value": "Formuliervariabelenconfiguratie" + "value": "Plugin" } ], - "MzMXRd": [ + "Mv8yjC": [ { "type": 0, - "value": "Prefill-attribuut" + "value": "Formuliervariabelenconfiguratie" } ], "NE5h2q": [ @@ -2374,10 +2380,42 @@ "value": ". Verleng uw sessie indien u wenst door te gaan." } ], - "OibWN2": [ + "Oi+DV0": [ + { + "children": [ + { + "type": 1, + "value": "attr" + } + ], + "type": 8, + "value": "code" + }, { "type": 0, - "value": "Prefill-bron" + "value": " uit " + }, + { + "children": [ + { + "type": 1, + "value": "plugin" + } + ], + "type": 8, + "value": "code" + }, + { + "type": 0, + "value": " (van de " + }, + { + "type": 1, + "value": "role" + }, + { + "type": 0, + "value": ")" } ], "OlPsaw": [ @@ -2538,6 +2576,12 @@ "value": "Betaalprovider backendopties" } ], + "QsrtPz": [ + { + "type": 0, + "value": "Prefill-instellingen" + } + ], "R/XadM": [ { "type": 0, @@ -2553,7 +2597,7 @@ "R7XVbR": [ { "type": 0, - "value": "Ingelogde/vertegenwoordigde" + "value": "hoofdentiteit" } ], "R8/zGm": [ @@ -2910,6 +2954,12 @@ "value": "Minimale tijd" } ], + "Uq9Hbx": [ + { + "type": 0, + "value": "-" + } + ], "Uu+81U": [ { "type": 0, @@ -3114,12 +3164,6 @@ "value": "Logica" } ], - "WjDh7l": [ - { - "type": 0, - "value": "Prefill-plugin" - } - ], "WkBjB5": [ { "type": 0, @@ -3573,6 +3617,12 @@ "value": "'" } ], + "bmlODS": [ + { + "type": 0, + "value": "Bronhouder" + } + ], "bnxtnX": [ { "type": 0, @@ -4099,6 +4149,12 @@ "value": "." } ], + "gqVGbb": [ + { + "type": 0, + "value": "Prefill instellen" + } + ], "gr7edY": [ { "type": 0, @@ -5137,6 +5193,12 @@ "value": "Veld waar de achternaam voor een afspraak komt te staan" } ], + "tJQoMq": [ + { + "type": 0, + "value": "De prefill-instellingen zijn niet geldig." + } + ], "tLL2x4": [ { "type": 0, diff --git a/src/openforms/js/components/admin/FAIcon.js b/src/openforms/js/components/admin/FAIcon.js deleted file mode 100644 index 60fe220c9e..0000000000 --- a/src/openforms/js/components/admin/FAIcon.js +++ /dev/null @@ -1,18 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; - -const FAIcon = ({icon, title, extraClassname = '', ...props}) => { - let className = `fa-solid fa-${icon}`; - if (extraClassname) { - className += ` ${extraClassname}`; - } - return ; -}; - -FAIcon.propTypes = { - icon: PropTypes.string.isRequired, - title: PropTypes.string.isRequired, - extraClassname: PropTypes.string, -}; - -export default FAIcon; diff --git a/src/openforms/js/components/admin/RJSFWrapper.js b/src/openforms/js/components/admin/RJSFWrapper.js index 732d8925af..9088823ece 100644 --- a/src/openforms/js/components/admin/RJSFWrapper.js +++ b/src/openforms/js/components/admin/RJSFWrapper.js @@ -5,9 +5,9 @@ import isEmpty from 'lodash/isEmpty'; import PropTypes from 'prop-types'; import React from 'react'; -import FAIcon from './FAIcon'; import TinyMCEEditor from './form_design/Editor'; import Field from './forms/Field'; +import {FAIcon} from './icons'; /* Adapted from: diff --git a/src/openforms/js/components/admin/WarningIcon.js b/src/openforms/js/components/admin/WarningIcon.js deleted file mode 100644 index 4066ca55e3..0000000000 --- a/src/openforms/js/components/admin/WarningIcon.js +++ /dev/null @@ -1,33 +0,0 @@ -import classNames from 'classnames'; -import PropTypes from 'prop-types'; -import React, {useId} from 'react'; - -import FAIcon from './FAIcon'; - -const WarningIcon = ({asLead = false, text = ''}) => { - const id = useId(); - return ( - <> - {text && ( - - {text} - - )} - - - ); -}; - -WarningIcon.propTypes = { - asLead: PropTypes.bool, - text: PropTypes.string, -}; - -export default WarningIcon; diff --git a/src/openforms/js/components/admin/form_design/FormLogic.js b/src/openforms/js/components/admin/form_design/FormLogic.js index ba24944dbc..aee4596803 100644 --- a/src/openforms/js/components/admin/form_design/FormLogic.js +++ b/src/openforms/js/components/admin/form_design/FormLogic.js @@ -7,13 +7,12 @@ import useAsync from 'react-use/esm/useAsync'; import useMountedState from 'react-use/esm/useMountedState'; import {useImmerReducer} from 'use-immer'; -import DeleteIcon from 'components/admin/DeleteIcon'; -import FAIcon from 'components/admin/FAIcon'; import Loader from 'components/admin/Loader'; import MessageList from 'components/admin/MessageList'; import ButtonContainer from 'components/admin/forms/ButtonContainer'; import Fieldset from 'components/admin/forms/Fieldset'; import {ValidationErrorContext} from 'components/admin/forms/ValidationErrors'; +import {DeleteIcon, FAIcon} from 'components/admin/icons'; import ErrorBoundary from 'components/errors/ErrorBoundary'; import jsonPropTypeValidator from 'utils/JsonPropTypeValidator'; diff --git a/src/openforms/js/components/admin/form_design/FormStepsNav.js b/src/openforms/js/components/admin/form_design/FormStepsNav.js index d86ea72320..5add066c80 100644 --- a/src/openforms/js/components/admin/form_design/FormStepsNav.js +++ b/src/openforms/js/components/admin/form_design/FormStepsNav.js @@ -3,8 +3,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import {FormattedMessage, useIntl} from 'react-intl'; -import DeleteIcon from 'components/admin/DeleteIcon'; -import FAIcon from 'components/admin/FAIcon'; +import {DeleteIcon, ErrorIcon, FAIcon} from 'components/admin/icons'; const FormStepNavItem = ({ name, @@ -54,9 +53,7 @@ const FormStepNavItem = ({ />
diff --git a/src/openforms/js/components/admin/form_design/NewStepFormDefinitionPicker.js b/src/openforms/js/components/admin/form_design/NewStepFormDefinitionPicker.js index ce923a8dc9..831b8065c2 100644 --- a/src/openforms/js/components/admin/form_design/NewStepFormDefinitionPicker.js +++ b/src/openforms/js/components/admin/form_design/NewStepFormDefinitionPicker.js @@ -2,13 +2,13 @@ import PropTypes from 'prop-types'; import React, {useContext, useState} from 'react'; import {FormattedMessage, useIntl} from 'react-intl'; -import FAIcon from 'components/admin/FAIcon'; import Loader from 'components/admin/Loader'; import {SubmitAction} from 'components/admin/forms/ActionButton'; import Field from 'components/admin/forms/Field'; import FormRow from 'components/admin/forms/FormRow'; import Select from 'components/admin/forms/Select'; import SubmitRow from 'components/admin/forms/SubmitRow'; +import {FAIcon} from 'components/admin/icons'; import {FormModal} from 'components/admin/modals'; import {FormContext} from './Context'; diff --git a/src/openforms/js/components/admin/form_design/PriceLogic.js b/src/openforms/js/components/admin/form_design/PriceLogic.js index aae71e81d3..f9303ad396 100644 --- a/src/openforms/js/components/admin/form_design/PriceLogic.js +++ b/src/openforms/js/components/admin/form_design/PriceLogic.js @@ -2,7 +2,6 @@ import PropTypes from 'prop-types'; import React, {useContext} from 'react'; import {FormattedMessage, defineMessage, useIntl} from 'react-intl'; -import DeleteIcon from 'components/admin/DeleteIcon'; import ButtonContainer from 'components/admin/forms/ButtonContainer'; import Field from 'components/admin/forms/Field'; import Fieldset from 'components/admin/forms/Fieldset'; @@ -10,6 +9,7 @@ import FormRow from 'components/admin/forms/FormRow'; import {NumberInput} from 'components/admin/forms/Inputs'; import Select from 'components/admin/forms/Select'; import {ValidationErrorContext} from 'components/admin/forms/ValidationErrors'; +import {DeleteIcon} from 'components/admin/icons'; import {getTranslatedChoices} from 'utils/i18n'; import DSLEditorNode from './logic/DSLEditorNode'; diff --git a/src/openforms/js/components/admin/form_design/RegistrationFields.js b/src/openforms/js/components/admin/form_design/RegistrationFields.js index a5f09320b7..e212cd0059 100644 --- a/src/openforms/js/components/admin/form_design/RegistrationFields.js +++ b/src/openforms/js/components/admin/form_design/RegistrationFields.js @@ -2,14 +2,14 @@ import PropTypes from 'prop-types'; import React from 'react'; import {FormattedMessage, useIntl} from 'react-intl'; -import DeleteIcon from 'components/admin/DeleteIcon'; import FormRjsfWrapper from 'components/admin/RJSFWrapper'; import ButtonContainer from 'components/admin/forms/ButtonContainer'; import Field from 'components/admin/forms/Field'; import Fieldset from 'components/admin/forms/Fieldset'; import FormRow from 'components/admin/forms/FormRow'; -import {Input, TextInput} from 'components/admin/forms/Inputs'; +import {TextInput} from 'components/admin/forms/Inputs'; import Select from 'components/admin/forms/Select'; +import {DeleteIcon} from 'components/admin/icons'; import {BACKEND_OPTIONS_FORMS} from './registrations'; diff --git a/src/openforms/js/components/admin/form_design/Tab.js b/src/openforms/js/components/admin/form_design/Tab.js index 38589adbca..c7c1b4df45 100644 --- a/src/openforms/js/components/admin/form_design/Tab.js +++ b/src/openforms/js/components/admin/form_design/Tab.js @@ -3,7 +3,7 @@ import React from 'react'; import {useIntl} from 'react-intl'; import {Tab as ReactTab} from 'react-tabs'; -import FAIcon from 'components/admin/FAIcon'; +import {ErrorIcon} from 'components/admin/icons'; const Tab = ({hasErrors = false, children, ...props}) => { const intl = useIntl(); @@ -18,9 +18,7 @@ const Tab = ({hasErrors = false, children, ...props}) => { return ( {children} - {hasErrors ? ( - - ) : null} + {hasErrors ? : null} ); }; diff --git a/src/openforms/js/components/admin/form_design/form-creation-form.js b/src/openforms/js/components/admin/form_design/form-creation-form.js index e42086b68f..88438bdb85 100644 --- a/src/openforms/js/components/admin/form_design/form-creation-form.js +++ b/src/openforms/js/components/admin/form_design/form-creation-form.js @@ -13,9 +13,9 @@ import useAsync from 'react-use/esm/useAsync'; import {useImmerReducer} from 'use-immer'; import Loader from 'components/admin/Loader'; -import WarningIcon from 'components/admin/WarningIcon'; import Fieldset from 'components/admin/forms/Fieldset'; import ValidationErrorsProvider from 'components/admin/forms/ValidationErrors'; +import {WarningIcon} from 'components/admin/icons'; import {APIError, NotAuthenticatedError} from 'utils/exception'; import {post} from 'utils/fetch'; import {getUniqueRandomString} from 'utils/random'; @@ -774,11 +774,19 @@ function reducer(draft, action) { ); const index = draft.formVariables.findIndex(variable => variable.key === key); - draft.formVariables[index][propertyName] = propertyValue; + // empty property = 'root object' + if (propertyName === '') { + Object.assign(draft.formVariables[index], propertyValue); + } else { + draft.formVariables[index][propertyName] = propertyValue; + } // Check if there are errors that need to be reset if (draft.formVariables[index].errors) { - delete draft.formVariables[index].errors[propertyName]; + const errorKeys = propertyName === '' ? Object.keys(propertyValue) : [propertyName]; + for (const errorKey of errorKeys) { + delete draft.formVariables[index].errors[errorKey]; + } } // Check that after the update there are no duplicate keys. diff --git a/src/openforms/js/components/admin/form_design/logic/LogicTypeSelection.js b/src/openforms/js/components/admin/form_design/logic/LogicTypeSelection.js index ce6d4eb3a2..c4b5c0ef57 100644 --- a/src/openforms/js/components/admin/form_design/logic/LogicTypeSelection.js +++ b/src/openforms/js/components/admin/form_design/logic/LogicTypeSelection.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import {FormattedMessage, useIntl} from 'react-intl'; -import FAIcon from 'components/admin/FAIcon'; +import {FAIcon} from 'components/admin/icons'; const LogicTypeSelection = ({onChange, onCancel}) => { const intl = useIntl(); diff --git a/src/openforms/js/components/admin/form_design/logic/ToggleCodeIcon.js b/src/openforms/js/components/admin/form_design/logic/ToggleCodeIcon.js index cdd7ade010..1b725ff7bf 100644 --- a/src/openforms/js/components/admin/form_design/logic/ToggleCodeIcon.js +++ b/src/openforms/js/components/admin/form_design/logic/ToggleCodeIcon.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import {useIntl} from 'react-intl'; -import FAIcon from 'components/admin/FAIcon'; +import {FAIcon} from 'components/admin/icons'; const ToggleCodeIcon = ({viewMode, setViewMode}) => { const intl = useIntl(); diff --git a/src/openforms/js/components/admin/form_design/logic/actions/Action.js b/src/openforms/js/components/admin/form_design/logic/actions/Action.js index 3fca2e0bf3..bdafdfa6a8 100644 --- a/src/openforms/js/components/admin/form_design/logic/actions/Action.js +++ b/src/openforms/js/components/admin/form_design/logic/actions/Action.js @@ -3,13 +3,12 @@ import PropTypes from 'prop-types'; import React, {useState} from 'react'; import {useIntl} from 'react-intl'; -import DeleteIcon from 'components/admin/DeleteIcon'; -import WarningIcon from 'components/admin/WarningIcon'; import DSLEditorNode from 'components/admin/form_design/logic/DSLEditorNode'; import DataPreview from 'components/admin/form_design/logic/DataPreview'; import ToggleCodeIcon from 'components/admin/form_design/logic/ToggleCodeIcon'; import {ACTION_TYPES} from 'components/admin/form_design/logic/constants'; import Select from 'components/admin/forms/Select'; +import {DeleteIcon, WarningIcon} from 'components/admin/icons'; import {ActionComponent, detectProblems} from './Actions'; import {ActionError, Action as ActionType} from './types'; diff --git a/src/openforms/js/components/admin/form_design/logic/actions/dmn/VariableMapping.js b/src/openforms/js/components/admin/form_design/logic/actions/dmn/VariableMapping.js index c46d4d6b4a..818eee9fe2 100644 --- a/src/openforms/js/components/admin/form_design/logic/actions/dmn/VariableMapping.js +++ b/src/openforms/js/components/admin/form_design/logic/actions/dmn/VariableMapping.js @@ -3,12 +3,11 @@ import PropTypes from 'prop-types'; import React from 'react'; import {FormattedMessage, useIntl} from 'react-intl'; -import DeleteIcon from 'components/admin/DeleteIcon'; -import WarningIcon from 'components/admin/WarningIcon'; import ButtonContainer from 'components/admin/forms/ButtonContainer'; import Field from 'components/admin/forms/Field'; import Select from 'components/admin/forms/Select'; import VariableSelection from 'components/admin/forms/VariableSelection'; +import {DeleteIcon, WarningIcon} from 'components/admin/icons'; import {detectMappingProblems} from './utils'; diff --git a/src/openforms/js/components/admin/form_design/mocks.js b/src/openforms/js/components/admin/form_design/mocks.js index ce2828722d..01b5c08547 100644 --- a/src/openforms/js/components/admin/form_design/mocks.js +++ b/src/openforms/js/components/admin/form_design/mocks.js @@ -54,3 +54,10 @@ export const mockDMNParametersGet = definitionsParams => const {inputs, outputs} = versionedParams ?? unVersionedParams; return res(ctx.json({inputs, outputs})); }); + +export const mockPrefillAttributesGet = pluginAttributes => + rest.get(`${API_BASE_URL}/api/v2/prefill/plugins/:plugin/attributes`, (req, res, ctx) => { + const {plugin} = req.params; + const attributeList = pluginAttributes[plugin] || []; + return res(ctx.json(attributeList)); + }); diff --git a/src/openforms/js/components/admin/form_design/registrations/camunda/ComplexProcessVariables.js b/src/openforms/js/components/admin/form_design/registrations/camunda/ComplexProcessVariables.js index 37112c8991..f5978ee535 100644 --- a/src/openforms/js/components/admin/form_design/registrations/camunda/ComplexProcessVariables.js +++ b/src/openforms/js/components/admin/form_design/registrations/camunda/ComplexProcessVariables.js @@ -3,9 +3,9 @@ import React from 'react'; import {FormattedMessage, useIntl} from 'react-intl'; import {useImmerReducer} from 'use-immer'; -import DeleteIcon from 'components/admin/DeleteIcon'; import ButtonContainer from 'components/admin/forms/ButtonContainer'; import {Checkbox, TextInput} from 'components/admin/forms/Inputs'; +import {DeleteIcon} from 'components/admin/icons'; import {jsonComplex as COMPLEX_JSON_TYPES} from 'components/admin/json_editor/types'; import {FormModal} from 'components/admin/modals'; import {ChangelistTableWrapper, HeadColumn, TableRow} from 'components/admin/tables'; diff --git a/src/openforms/js/components/admin/form_design/registrations/camunda/SelectProcessVariables.js b/src/openforms/js/components/admin/form_design/registrations/camunda/SelectProcessVariables.js index 03591789ff..bbddf14fdc 100644 --- a/src/openforms/js/components/admin/form_design/registrations/camunda/SelectProcessVariables.js +++ b/src/openforms/js/components/admin/form_design/registrations/camunda/SelectProcessVariables.js @@ -2,10 +2,10 @@ import PropTypes from 'prop-types'; import React from 'react'; import {FormattedMessage, useIntl} from 'react-intl'; -import DeleteIcon from 'components/admin/DeleteIcon'; import ButtonContainer from 'components/admin/forms/ButtonContainer'; import ComponentSelection from 'components/admin/forms/ComponentSelection'; import {Checkbox, TextInput} from 'components/admin/forms/Inputs'; +import {DeleteIcon} from 'components/admin/icons'; import {ChangelistTableWrapper, HeadColumn, TableRow} from 'components/admin/tables'; const HeadColumns = () => { diff --git a/src/openforms/js/components/admin/form_design/registrations/zgw/ZGWOptionsVariablesProperties.js b/src/openforms/js/components/admin/form_design/registrations/zgw/ZGWOptionsVariablesProperties.js index fe75dd901e..6b24f5aa65 100644 --- a/src/openforms/js/components/admin/form_design/registrations/zgw/ZGWOptionsVariablesProperties.js +++ b/src/openforms/js/components/admin/form_design/registrations/zgw/ZGWOptionsVariablesProperties.js @@ -3,7 +3,6 @@ import PropTypes from 'prop-types'; import React, {useContext, useState} from 'react'; import {FormattedMessage, useIntl} from 'react-intl'; -import DeleteIcon from 'components/admin/DeleteIcon'; import {CustomFieldTemplate} from 'components/admin/RJSFWrapper'; import {FormContext} from 'components/admin/form_design/Context'; import {getComponentDatatype} from 'components/admin/form_design/variables/utils'; @@ -13,6 +12,7 @@ import ComponentSelection from 'components/admin/forms/ComponentSelection'; import {TextInput} from 'components/admin/forms/Inputs'; import SubmitRow from 'components/admin/forms/SubmitRow'; import {ValidationErrorContext} from 'components/admin/forms/ValidationErrors'; +import {DeleteIcon} from 'components/admin/icons'; import {FormModal} from 'components/admin/modals'; import {ChangelistTableWrapper, HeadColumn, TableRow} from 'components/admin/tables'; diff --git a/src/openforms/js/components/admin/form_design/variables/VariablesEditor.stories.js b/src/openforms/js/components/admin/form_design/variables/VariablesEditor.stories.js index f5578c6f99..ebbb5b3b03 100644 --- a/src/openforms/js/components/admin/form_design/variables/VariablesEditor.stories.js +++ b/src/openforms/js/components/admin/form_design/variables/VariablesEditor.stories.js @@ -1,5 +1,6 @@ -import {expect, screen, userEvent, within} from '@storybook/test'; +import {expect, fn, screen, userEvent, within} from '@storybook/test'; +import {mockPrefillAttributesGet} from 'components/admin/form_design/mocks'; import {BACKEND_OPTIONS_FORMS} from 'components/admin/form_design/registrations'; import {mockTargetPathsPost} from 'components/admin/form_design/registrations/objectsapi/mocks'; @@ -112,11 +113,32 @@ export default { type: 'textfield', }, }, + availablePrefillPlugins: [ + {id: 'stuf-bg', label: 'StUF-BG'}, + {id: 'haalcentraal', label: 'BRP Personen (HaalCentraal)'}, + ], + onChange: fn(), + onAdd: fn(), + onDelete: fn(), + onFieldChange: fn(), }, - argTypes: { - onChange: {action: true}, - onAdd: {action: true}, - onDelete: {action: true}, + parameters: { + msw: { + handlers: { + prefill: [ + mockPrefillAttributesGet({ + 'stuf-bg': [ + {id: 'bsn', label: 'BSN'}, + {id: 'postcode', label: 'Postcode'}, + ], + haalcentraal: [ + {id: 'bsn', label: 'BSN'}, + {id: 'verblijfsAdres.postcode', label: 'Verblijfsadres > Postcode'}, + ], + }), + ], + }, + }, }, }; @@ -475,3 +497,76 @@ export const WithObjectsAPIAndTestRegistrationBackends = { }, }, }; + +export const ConfigurePrefill = { + play: async ({canvasElement}) => { + const canvas = within(canvasElement); + + const userDefinedVarsTab = await canvas.findByRole('tab', {name: 'Gebruikersvariabelen'}); + expect(userDefinedVarsTab).toBeVisible(); + await userEvent.click(userDefinedVarsTab); + + // open modal for configuration + const editIcon = canvas.getByTitle('Prefill instellen'); + await userEvent.click(editIcon); + + const pluginDropdown = await screen.findByLabelText('Plugin'); + expect(pluginDropdown).toBeVisible(); + expect(await within(pluginDropdown).findByRole('option', {name: 'StUF-BG'})).toBeVisible(); + }, +}; + +export const WithValidationErrors = { + args: { + variables: [ + { + form: 'http://localhost:8000/api/v2/forms/36612390', + formDefinition: 'http://localhost:8000/api/v2/form-definitions/6de1ea5a', + name: 'Form.io component', + key: 'formioComponent', + source: 'component', + prefillPlugin: '', + prefillAttribute: '', + prefillIdentifierRole: 'main', + dataType: 'string', + dataFormat: undefined, + isSensitiveData: false, + serviceFetchConfiguration: undefined, + initialValue: '', + }, + { + form: 'http://localhost:8000/api/v2/forms/36612390', + formDefinition: undefined, + name: 'User defined', + key: 'userDefined', + source: 'user_defined', + prefillPlugin: 'bad-plugin', + prefillAttribute: 'bad-attribute', + prefillIdentifierRole: 'invalid', + dataType: 'array', + dataFormat: undefined, + isSensitiveData: false, + serviceFetchConfiguration: undefined, + initialValue: [], + errors: { + name: ['A validation error for the name.'], + key: 'The key must be unique.', + prefillPlugin: ['Invalid plugin selected.'], + prefillAttribute: ['Invalid attribute selected.'], + prefillIdentifierRole: ['Invalid identifier role.'], + }, + }, + ], + }, + play: async ({canvasElement}) => { + const canvas = within(canvasElement); + + const userDefinedVarsTab = await canvas.findByRole('tab', {name: 'Gebruikersvariabelen'}); + expect(userDefinedVarsTab).toBeVisible(); + await userEvent.click(userDefinedVarsTab); + + // open modal for configuration + const editIcon = canvas.getByTitle('Prefill instellen'); + await userEvent.click(editIcon); + }, +}; diff --git a/src/openforms/js/components/admin/form_design/variables/VariablesTable.js b/src/openforms/js/components/admin/form_design/variables/VariablesTable.js index efb0f6bf1d..f0a1418b12 100644 --- a/src/openforms/js/components/admin/form_design/variables/VariablesTable.js +++ b/src/openforms/js/components/admin/form_design/variables/VariablesTable.js @@ -2,19 +2,17 @@ import classNames from 'classnames'; import PropTypes from 'prop-types'; import React, {useContext, useState} from 'react'; import {FormattedMessage, useIntl} from 'react-intl'; -import useAsync from 'react-use/esm/useAsync'; -import DeleteIcon from 'components/admin/DeleteIcon'; -import FAIcon from 'components/admin/FAIcon'; import {FormContext} from 'components/admin/form_design/Context'; import LiteralValueInput from 'components/admin/form_design/logic/LiteralValueInput'; import Field from 'components/admin/forms/Field'; import {Checkbox, TextInput} from 'components/admin/forms/Inputs'; import Select from 'components/admin/forms/Select'; +import {DeleteIcon, FAIcon} from 'components/admin/icons'; import {ChangelistTableWrapper, HeadColumn} from 'components/admin/tables'; -import {get} from 'utils/fetch'; -import {DATATYPES_CHOICES, IDENTIFIER_ROLE_CHOICES} from './constants'; +import {DATATYPES_CHOICES} from './constants'; +import {PrefillSummary} from './prefill'; import RegistrationSummaryList from './registration'; import Variable from './types'; import {variableHasErrors} from './utils'; @@ -41,7 +39,7 @@ const Td = ({variable, fieldName}) => { const intl = useIntl(); const field = variable[fieldName]; - let fieldErrors = variable.errors ? variable.errors[fieldName] : []; + let fieldErrors = variable?.errors?.[fieldName] ?? []; if (!Array.isArray(fieldErrors)) fieldErrors = [fieldErrors]; @@ -67,7 +65,6 @@ Td.propTypes = { }; const VariableRow = ({index, variable, onFieldChange}) => { - const intl = useIntl(); const formContext = useContext(FormContext); const formSteps = formContext.formSteps; @@ -89,12 +86,13 @@ const VariableRow = ({index, variable, onFieldChange}) => { {variable.name} {getFormDefinitionName(variable.formDefinition)} - {variable.prefillPlugin} - {variable.prefillAttribute} - {intl.formatMessage( - IDENTIFIER_ROLE_CHOICES[variable.prefillIdentifierRole] || IDENTIFIER_ROLE_CHOICES.main - )} + @@ -115,12 +113,6 @@ const EditableVariableRow = ({index, variable, onDelete, onChange, onFieldChange defaultMessage: 'Are you sure you want to delete this variable?', }); - const formContext = useContext(FormContext); - - const {availablePrefillPlugins} = formContext.plugins; - const prefillPluginChoices = availablePrefillPlugins.map(plugin => [plugin.id, plugin.label]); - const [prefillAttributeChoices, setPrefillAttributeChoices] = useState([]); - const onValueChanged = e => { onChange(variable.key, e.target.name, e.target.value); }; @@ -131,20 +123,6 @@ const EditableVariableRow = ({index, variable, onDelete, onChange, onFieldChange onChange(variable.key, 'key', updatedKey); }; - const {loading} = useAsync(async () => { - setPrefillAttributeChoices([]); - // Load the possible prefill attributes - if (!variable.prefillPlugin) return; - - const url = `/api/v2/prefill/plugins/${variable.prefillPlugin}/attributes`; - const response = await get(url); - if (!response.ok) { - console.error(response.data); - } - - setPrefillAttributeChoices(response.data.map(attribute => [attribute.id, attribute.label])); - }, [variable.prefillPlugin]); - // Cast booleans to strings, otherwise they don't display properly in the select widget const initialValue = variable.dataType === 'boolean' && typeof variable.initialValue == 'boolean' @@ -176,39 +154,23 @@ const EditableVariableRow = ({index, variable, onDelete, onChange, onFieldChange + - - - - - - - ; +}; + +const AttributeField = () => { + const [fieldProps] = useField('attribute'); + const { + values: {plugin}, + } = useFormikContext(); + + // Load the possible prefill attributes + // XXX: this would benefit from client-side caching + const { + loading, + value = [], + error, + } = useAsync(async () => { + if (!plugin) return []; + + const endpoint = `/api/v2/prefill/plugins/${plugin}/attributes`; + // XXX: clean up error handling here at some point... + const response = await get(endpoint); + if (!response.ok) throw response.data; + return response.data.map(attribute => [attribute.id, attribute.label]); + }, [plugin]); + + // throw errors to the nearest error boundary + if (error) throw error; + const choices = loading ? LOADING_OPTION : value; + return ( + + ); +}; + +export default PrefillConfigurationForm; diff --git a/src/openforms/js/components/admin/form_design/variables/prefill/PrefillSummary.js b/src/openforms/js/components/admin/form_design/variables/prefill/PrefillSummary.js new file mode 100644 index 0000000000..2f86590168 --- /dev/null +++ b/src/openforms/js/components/admin/form_design/variables/prefill/PrefillSummary.js @@ -0,0 +1,124 @@ +import PropTypes from 'prop-types'; +import React, {useState} from 'react'; +import {FormattedMessage, useIntl} from 'react-intl'; + +import {normalizeErrors} from 'components/admin/forms/Field'; +import {EditIcon, ErrorIcon} from 'components/admin/icons'; +import {FormModal} from 'components/admin/modals'; +import ErrorBoundary from 'components/errors/ErrorBoundary'; + +import {IDENTIFIER_ROLE_CHOICES} from '../constants'; +import PrefillConfigurationForm from './PrefillConfigurationForm'; + +const PrefillSummary = ({ + plugin = '', + attribute = '', + identifierRole = 'main', + onChange = undefined, + errors = {}, +}) => { + const intl = useIntl(); + const [modalOpen, setModalOpen] = useState(false); + const identifierRoleMsg = IDENTIFIER_ROLE_CHOICES[identifierRole] || IDENTIFIER_ROLE_CHOICES.main; + + const [hasPluginErrors, pluginErrors] = normalizeErrors(errors.prefillPlugin, intl); + const [hasAttributeErrors, attributeErrors] = normalizeErrors(errors.prefillAttribute, intl); + const [hasIdentifierRoleErrors, identifierRoleErrors] = normalizeErrors( + errors.prefillIdentifierRole, + intl + ); + + const hasErrors = hasPluginErrors || hasAttributeErrors || hasIdentifierRoleErrors; + + const icons = ( +
+ {hasErrors && ( + + + + )} + {/* Modal control */} + {onChange && ( + setModalOpen(!modalOpen)} + /> + )} +
+ ); + + return ( +
+ {plugin === '' && attribute === '' ? ( + '-' + ) : ( + {chunks}, + }} + /> + )} + + {icons} + {onChange && ( + + } + isOpen={modalOpen} + closeModal={() => setModalOpen(false)} + > + + { + onChange(values); + setModalOpen(false); + }} + errors={{ + plugin: pluginErrors, + attribute: attributeErrors, + identifierRole: identifierRoleErrors, + }} + /> + + + )} +
+ ); +}; + +const AnyError = PropTypes.oneOfType([ + PropTypes.string, + PropTypes.arrayOf(PropTypes.string), + PropTypes.object, // could be an intl message definition +]); + +PrefillSummary.propTypes = { + plugin: PropTypes.string, + attribute: PropTypes.string, + identifierRole: PropTypes.string, + onChange: PropTypes.func, // if defined, we can edit it in a modal + errors: PropTypes.objectOf(AnyError), +}; + +export default PrefillSummary; diff --git a/src/openforms/js/components/admin/form_design/variables/prefill/index.js b/src/openforms/js/components/admin/form_design/variables/prefill/index.js new file mode 100644 index 0000000000..c6c6e082b9 --- /dev/null +++ b/src/openforms/js/components/admin/form_design/variables/prefill/index.js @@ -0,0 +1 @@ +export {default as PrefillSummary} from './PrefillSummary'; diff --git a/src/openforms/js/components/admin/form_design/variables/registration/RegistrationsSummaryList.js b/src/openforms/js/components/admin/form_design/variables/registration/RegistrationsSummaryList.js index 852990801b..117b8bbf35 100644 --- a/src/openforms/js/components/admin/form_design/variables/registration/RegistrationsSummaryList.js +++ b/src/openforms/js/components/admin/form_design/variables/registration/RegistrationsSummaryList.js @@ -3,11 +3,11 @@ import PropTypes from 'prop-types'; import React, {useContext, useState} from 'react'; import {FormattedMessage, useIntl} from 'react-intl'; -import FAIcon from 'components/admin/FAIcon'; import {FormContext} from 'components/admin/form_design/Context'; import {BACKEND_OPTIONS_FORMS} from 'components/admin/form_design/registrations'; import {SubmitAction} from 'components/admin/forms/ActionButton'; import SubmitRow from 'components/admin/forms/SubmitRow'; +import {EditIcon} from 'components/admin/icons'; import {FormModal} from 'components/admin/modals'; import ErrorBoundary from 'components/errors/ErrorBoundary'; @@ -42,13 +42,11 @@ const RegistrationSummary = ({ {name}
- setModalOpen(!modalOpen)} /> @@ -164,7 +162,7 @@ const RegistrationsSummaryList = ({variable, onFieldChange, registrationBackends return ( ); } diff --git a/src/openforms/js/components/admin/form_versions/FormVersionsTable.js b/src/openforms/js/components/admin/form_versions/FormVersionsTable.js index 2e5258d218..4ab5cba04f 100644 --- a/src/openforms/js/components/admin/form_versions/FormVersionsTable.js +++ b/src/openforms/js/components/admin/form_versions/FormVersionsTable.js @@ -7,9 +7,9 @@ import semverValid from 'semver/functions/valid'; import Loader from 'components/admin/Loader'; import User from 'components/admin/User'; -import WarningIcon from 'components/admin/WarningIcon'; import {APIContext} from 'components/admin/form_design/Context'; import {FORM_ENDPOINT} from 'components/admin/form_design/constants'; +import {WarningIcon} from 'components/admin/icons'; import {get, post} from 'utils/fetch'; const checkVersionsCompatible = (version1, version2) => { diff --git a/src/openforms/js/components/admin/forms/ArrayInput.js b/src/openforms/js/components/admin/forms/ArrayInput.js index 5963407af9..e77297f7fd 100644 --- a/src/openforms/js/components/admin/forms/ArrayInput.js +++ b/src/openforms/js/components/admin/forms/ArrayInput.js @@ -2,8 +2,8 @@ import PropTypes from 'prop-types'; import React, {useState} from 'react'; import {FormattedMessage, useIntl} from 'react-intl'; -import DeleteIcon from 'components/admin/DeleteIcon'; import ButtonContainer from 'components/admin/forms/ButtonContainer'; +import {DeleteIcon} from 'components/admin/icons'; import useOnChanged from 'hooks/useOnChanged'; import {Input} from './Inputs'; diff --git a/src/openforms/js/components/admin/forms/Inputs.js b/src/openforms/js/components/admin/forms/Inputs.js index 6fda4408d7..97a4584763 100644 --- a/src/openforms/js/components/admin/forms/Inputs.js +++ b/src/openforms/js/components/admin/forms/Inputs.js @@ -4,7 +4,7 @@ import PropTypes from 'prop-types'; import React, {useContext, useEffect, useRef} from 'react'; import {defineMessage, useIntl} from 'react-intl'; -import FAIcon from 'components/admin/FAIcon'; +import {FAIcon} from 'components/admin/icons'; import {PrefixContext} from './Context'; diff --git a/src/openforms/js/components/admin/forms/MappingArrayInput.js b/src/openforms/js/components/admin/forms/MappingArrayInput.js index f8a517cff4..40e5c2fce0 100644 --- a/src/openforms/js/components/admin/forms/MappingArrayInput.js +++ b/src/openforms/js/components/admin/forms/MappingArrayInput.js @@ -3,8 +3,8 @@ import PropTypes from 'prop-types'; import React from 'react'; import {FormattedMessage, useIntl} from 'react-intl'; -import DeleteIcon from 'components/admin/DeleteIcon'; import ButtonContainer from 'components/admin/forms/ButtonContainer'; +import {DeleteIcon} from 'components/admin/icons'; import ArrayInput from './ArrayInput'; import {Input, TextInput} from './Inputs'; diff --git a/src/openforms/js/components/admin/forms/Select.js b/src/openforms/js/components/admin/forms/Select.js index 3e1a317da4..0c901c270c 100644 --- a/src/openforms/js/components/admin/forms/Select.js +++ b/src/openforms/js/components/admin/forms/Select.js @@ -12,11 +12,14 @@ export const LOADING_OPTION = [ ], ]; +const capfirst = text => `${text[0].toUpperCase()}${text.slice(1)}`; + const Select = ({ name = 'select', choices, allowBlank = false, translateChoices = false, + capfirstChoices = false, ...extraProps }) => { // normalize to array of choices @@ -28,6 +31,9 @@ const Select = ({ if (translateChoices) { choices = choices.map(([value, msg]) => [value, intl.formatMessage(msg)]); } + if (capfirstChoices) { + choices = choices.map(([value, label]) => [value, capfirst(label)]); + } const prefix = useContext(PrefixContext); name = prefix ? `${prefix}-${name}` : name; diff --git a/src/openforms/js/components/admin/DeleteIcon.js b/src/openforms/js/components/admin/icons/DeleteIcon.js similarity index 100% rename from src/openforms/js/components/admin/DeleteIcon.js rename to src/openforms/js/components/admin/icons/DeleteIcon.js diff --git a/src/openforms/js/components/admin/DeleteIcon.stories.js b/src/openforms/js/components/admin/icons/DeleteIcon.stories.js similarity index 68% rename from src/openforms/js/components/admin/DeleteIcon.stories.js rename to src/openforms/js/components/admin/icons/DeleteIcon.stories.js index e98e5e0167..c4f466fb99 100644 --- a/src/openforms/js/components/admin/DeleteIcon.stories.js +++ b/src/openforms/js/components/admin/icons/DeleteIcon.stories.js @@ -1,8 +1,13 @@ +import {fn} from '@storybook/test'; + import DeleteIcon from './DeleteIcon'; export default { title: 'Admin / Custom / Icons / Delete', component: DeleteIcon, + args: { + onConfirm: fn(), + }, }; export const Delete = {}; diff --git a/src/openforms/js/components/admin/icons/EditIcon.js b/src/openforms/js/components/admin/icons/EditIcon.js new file mode 100644 index 0000000000..3c6d44f9e6 --- /dev/null +++ b/src/openforms/js/components/admin/icons/EditIcon.js @@ -0,0 +1,20 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import FAIcon from './FAIcon'; + +const EditIcon = ({label, onClick}) => ( + +); + +EditIcon.propTypes = { + label: PropTypes.string.isRequired, + onClick: PropTypes.func.isRequired, +}; + +export default EditIcon; diff --git a/src/openforms/js/components/admin/icons/EditIcon.stories.js b/src/openforms/js/components/admin/icons/EditIcon.stories.js new file mode 100644 index 0000000000..c75fb39e64 --- /dev/null +++ b/src/openforms/js/components/admin/icons/EditIcon.stories.js @@ -0,0 +1,14 @@ +import {fn} from '@storybook/test'; + +import EditIcon from './EditIcon'; + +export default { + title: 'Admin / Custom / Icons / Edit', + component: EditIcon, + args: { + label: 'Edit my thing!', + onClick: fn(), + }, +}; + +export const Edit = {}; diff --git a/src/openforms/js/components/admin/icons/ErrorIcon.js b/src/openforms/js/components/admin/icons/ErrorIcon.js new file mode 100644 index 0000000000..0d4d9322a3 --- /dev/null +++ b/src/openforms/js/components/admin/icons/ErrorIcon.js @@ -0,0 +1,15 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import FAIcon from './FAIcon'; + +const ErrorIcon = ({text, extraClassname}) => ( + +); + +ErrorIcon.propTypes = { + text: PropTypes.string, + extraClassname: PropTypes.string, +}; + +export default ErrorIcon; diff --git a/src/openforms/js/components/admin/icons/ErrorIcon.stories.js b/src/openforms/js/components/admin/icons/ErrorIcon.stories.js new file mode 100644 index 0000000000..a8c9df5da7 --- /dev/null +++ b/src/openforms/js/components/admin/icons/ErrorIcon.stories.js @@ -0,0 +1,11 @@ +import ErrorIcon from './ErrorIcon'; + +export default { + title: 'Admin / Custom / Icons / Error', + component: ErrorIcon, + args: { + text: 'Something is wrong.', + }, +}; + +export const Default = {name: 'Error'}; diff --git a/src/openforms/js/components/admin/icons/FAIcon.js b/src/openforms/js/components/admin/icons/FAIcon.js new file mode 100644 index 0000000000..ca1f39e59a --- /dev/null +++ b/src/openforms/js/components/admin/icons/FAIcon.js @@ -0,0 +1,36 @@ +import PropTypes from 'prop-types'; +import React, {useId} from 'react'; + +const FAIcon = ({icon, title, accessibleLabel, extraClassname = '', ...props}) => { + const id = useId(); + + let className = `fa-solid fa-${icon}`; + if (extraClassname) { + className += ` ${extraClassname}`; + } + + return ( + <> + {accessibleLabel && ( + + {accessibleLabel} + + )} + + + ); +}; + +FAIcon.propTypes = { + icon: PropTypes.string.isRequired, + accessibleLabel: PropTypes.string, + title: PropTypes.string, + extraClassname: PropTypes.string, +}; + +export default FAIcon; diff --git a/src/openforms/js/components/admin/icons/WarningIcon.js b/src/openforms/js/components/admin/icons/WarningIcon.js new file mode 100644 index 0000000000..4fa49a06f4 --- /dev/null +++ b/src/openforms/js/components/admin/icons/WarningIcon.js @@ -0,0 +1,22 @@ +import classNames from 'classnames'; +import PropTypes from 'prop-types'; +import React from 'react'; + +import FAIcon from './FAIcon'; + +const WarningIcon = ({asLead = false, text}) => ( + +); + +WarningIcon.propTypes = { + asLead: PropTypes.bool, + text: PropTypes.string, +}; + +export default WarningIcon; diff --git a/src/openforms/js/components/admin/WarningIcon.stories.js b/src/openforms/js/components/admin/icons/WarningIcon.stories.js similarity index 100% rename from src/openforms/js/components/admin/WarningIcon.stories.js rename to src/openforms/js/components/admin/icons/WarningIcon.stories.js diff --git a/src/openforms/js/components/admin/icons/index.js b/src/openforms/js/components/admin/icons/index.js new file mode 100644 index 0000000000..da0c0d21c2 --- /dev/null +++ b/src/openforms/js/components/admin/icons/index.js @@ -0,0 +1,5 @@ +export {default as DeleteIcon} from './DeleteIcon'; +export {default as EditIcon} from './EditIcon'; +export {default as ErrorIcon} from './ErrorIcon'; +export {default as FAIcon} from './FAIcon'; +export {default as WarningIcon} from './WarningIcon'; diff --git a/src/openforms/js/components/admin/json_editor/edit_panel/InterpolatedVariable.js b/src/openforms/js/components/admin/json_editor/edit_panel/InterpolatedVariable.js index d06e173ccd..234f4b440f 100644 --- a/src/openforms/js/components/admin/json_editor/edit_panel/InterpolatedVariable.js +++ b/src/openforms/js/components/admin/json_editor/edit_panel/InterpolatedVariable.js @@ -5,13 +5,13 @@ import PropTypes from 'prop-types'; import React from 'react'; import {FormattedMessage} from 'react-intl'; -import DeleteIcon from 'components/admin/DeleteIcon'; import ButtonContainer from 'components/admin/forms/ButtonContainer'; import ComponentSelection from 'components/admin/forms/ComponentSelection'; import Field from 'components/admin/forms/Field'; import Fieldset from 'components/admin/forms/Fieldset'; import FormRow from 'components/admin/forms/FormRow'; import {TextInput} from 'components/admin/forms/Inputs'; +import {DeleteIcon} from 'components/admin/icons'; import Types from '../types'; diff --git a/src/openforms/js/components/admin/modals/Modal.js b/src/openforms/js/components/admin/modals/Modal.js index 80f2beb71a..6c9705b161 100644 --- a/src/openforms/js/components/admin/modals/Modal.js +++ b/src/openforms/js/components/admin/modals/Modal.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import ReactModal from 'react-modal'; -import FAIcon from 'components/admin/FAIcon'; +import {FAIcon} from 'components/admin/icons'; const CONTENT_CLASS_NAME = 'react-modal__content'; diff --git a/src/openforms/js/components/admin/tables/ChangelistTable.js b/src/openforms/js/components/admin/tables/ChangelistTable.js index 5af081be8b..cec1bc4270 100644 --- a/src/openforms/js/components/admin/tables/ChangelistTable.js +++ b/src/openforms/js/components/admin/tables/ChangelistTable.js @@ -4,8 +4,6 @@ import React from 'react'; import {IconNo, IconUnknown, IconYes} from 'components/admin/BooleanIcons'; import {getBEMClassName} from 'utils/bem'; -import ChangelistColumn from './ChangelistColumn'; - const ChangelistTableWrapper = ({headColumns, children: body, extraModifiers = []}) => (
diff --git a/src/openforms/js/components/errors/ErrorMessage.js b/src/openforms/js/components/errors/ErrorMessage.js index d0bc4500d7..620a515115 100644 --- a/src/openforms/js/components/errors/ErrorMessage.js +++ b/src/openforms/js/components/errors/ErrorMessage.js @@ -1,14 +1,14 @@ import PropTypes from 'prop-types'; import React from 'react'; -import FAIcon from 'components/admin/FAIcon'; +import {ErrorIcon} from 'components/admin/icons'; const ErrorMessage = ({children}) => { if (!children) return null; return (
- +
{children}
diff --git a/src/openforms/js/lang/en.json b/src/openforms/js/lang/en.json index 31aaf261d1..87d19af3a4 100644 --- a/src/openforms/js/lang/en.json +++ b/src/openforms/js/lang/en.json @@ -314,11 +314,6 @@ "description": "Form ID field help text", "originalDefault": "Unique identifier for the form" }, - "7Vx5It": { - "defaultMessage": "No compatible registration backend configured.", - "description": "Registration summary no registration backend fallback message", - "originalDefault": "No compatible registration backend configured." - }, "7X6yT4": { "defaultMessage": "You are modifying an existing form definition! This change affects {count, plural, one {# form} other {# forms} }", "description": "Warning when modifying existing form definitions", @@ -399,6 +394,11 @@ "description": "Logic type selection label", "originalDefault": "Please select the logic type:" }, + "9LdZVP": { + "defaultMessage": "Attribute", + "description": "Variable prefill attribute label", + "originalDefault": "Attribute" + }, "9LflJr": { "defaultMessage": "Key", "description": "Label for 'key' in MappingArrayInput table column", @@ -599,6 +599,11 @@ "description": "Admin error for API error when configuring Camunda actions", "originalDefault": "Could not retrieve the decision definitions IDs/versions. Is the selected DMN plugin running and properly configured?" }, + "DWhkNq": { + "defaultMessage": "Plugin", + "description": "Variable prefill plugin label", + "originalDefault": "Plugin" + }, "DaxIUG": { "defaultMessage": "Variable key", "description": "'Variable key' label", @@ -1039,6 +1044,11 @@ "description": "Custom confirmation email template explanation", "originalDefault": "Below you can specify a custom template for the configuration email. If not specified, the globally configured template will be used." }, + "Mdnl0l": { + "defaultMessage": "Prefill", + "description": "Variable table prefill title", + "originalDefault": "Prefill" + }, "MnfzL3": { "defaultMessage": "Plugin ID", "description": "Plugin ID label", @@ -1049,11 +1059,6 @@ "description": "Form variables configuration editor fieldset title", "originalDefault": "Form variables configuration" }, - "MzMXRd": { - "defaultMessage": "Prefill attribute", - "description": "Variable table prefill attribute title", - "originalDefault": "Prefill attribute" - }, "NE5h2q": { "defaultMessage": "Description", "description": "Description column header", @@ -1109,10 +1114,10 @@ "description": "Session expiry warning (in modal)", "originalDefault": "Your session is about to expire {delta}. Extend your session if you wish to continue." }, - "OibWN2": { - "defaultMessage": "Prefill identifier role", - "description": "Variable table identifier role attribute title", - "originalDefault": "Prefill identifier role" + "Oi+DV0": { + "defaultMessage": "{attr} from {plugin} (of the {role})", + "description": "Prefill configuration summary", + "originalDefault": "{attr} from {plugin} (of the {role})" }, "OmQdqG": { "defaultMessage": "Cache timeout", @@ -1209,6 +1214,11 @@ "description": "Payment backend options label", "originalDefault": "Payment backend options" }, + "QsrtPz": { + "defaultMessage": "Prefill configuration", + "description": "Variable prefill configuration modal title", + "originalDefault": "Prefill configuration" + }, "R78GMf": { "defaultMessage": "Confidentiality", "description": "Indication of the level to which extend the dossier of the ZAAK is meant to be public", @@ -1364,6 +1374,11 @@ "description": "Changing objecttype warning message", "originalDefault": "Changing the objecttype will remove the existing variables mapping. Are you sure you want to continue?" }, + "Uq9Hbx": { + "defaultMessage": "-", + "description": "Registration summary no registration backend fallback message", + "originalDefault": "-" + }, "V21YkS": { "defaultMessage": "Confirm", "description": "Camunda process variables confirm button", @@ -1424,11 +1439,6 @@ "description": "Form logic tab title", "originalDefault": "Logic" }, - "WjDh7l": { - "defaultMessage": "Prefill plugin", - "description": "Variable table prefill plugin title", - "originalDefault": "Prefill plugin" - }, "WnKF/i": { "defaultMessage": "URL that points to the INFORMATIEOBJECTTYPE in the Catalogi API to be used for the submission attachments", "description": "Objects API registration options \"Attachment informatieobjecttype\" description", @@ -1619,6 +1629,11 @@ "description": "Variable registration configuration modal title", "originalDefault": "{varName}: registration configuration for {backendName}" }, + "bmlODS": { + "defaultMessage": "Identifier role", + "description": "Variable prefill identifier role label", + "originalDefault": "Identifier role" + }, "bnxtnX": { "defaultMessage": "Full request", "description": "Service fetch configuration try it out tabpanel full request fieldset title", @@ -1844,6 +1859,11 @@ "description": "Logic action warning icon text", "originalDefault": "Detected some problems in this action: {problems}." }, + "gqVGbb": { + "defaultMessage": "Edit prefill configuration", + "description": "'Edit variable prefill' icon label", + "originalDefault": "Edit prefill configuration" + }, "gr7edY": { "defaultMessage": "App version", "description": "App version column header", @@ -2354,6 +2374,11 @@ "description": "Last Name Component field help text", "originalDefault": "Component where the last name should be entered" }, + "tJQoMq": { + "defaultMessage": "There are errors in the prefill configuration.", + "description": "Prefill configuration errors icon text", + "originalDefault": "There are errors in the prefill configuration." + }, "tLL2x4": { "defaultMessage": "Change form", "description": "Change form page title", diff --git a/src/openforms/js/lang/nl.json b/src/openforms/js/lang/nl.json index ceb6eaa134..a3b5e204e2 100644 --- a/src/openforms/js/lang/nl.json +++ b/src/openforms/js/lang/nl.json @@ -317,11 +317,6 @@ "description": "Form ID field help text", "originalDefault": "Unique identifier for the form" }, - "7Vx5It": { - "defaultMessage": "Er is geen (relevante) registratiemethode ingesteld.", - "description": "Registration summary no registration backend fallback message", - "originalDefault": "No compatible registration backend configured." - }, "7X6yT4": { "defaultMessage": "U bewerkt een bestaande set van formuliervelden! Deze wijziging heeft effect op {count, plural, one {# formulier} other {# formulieren} }.", "description": "Warning when modifying existing form definitions", @@ -403,6 +398,11 @@ "description": "Logic type selection label", "originalDefault": "Please select the logic type:" }, + "9LdZVP": { + "defaultMessage": "Attribuut", + "description": "Variable prefill attribute label", + "originalDefault": "Attribute" + }, "9LflJr": { "defaultMessage": "Sleutel", "description": "Label for 'key' in MappingArrayInput table column", @@ -604,6 +604,12 @@ "description": "Admin error for API error when configuring Camunda actions", "originalDefault": "Could not retrieve the decision definitions IDs/versions. Is the selected DMN plugin running and properly configured?" }, + "DWhkNq": { + "defaultMessage": "Plugin", + "description": "Variable prefill plugin label", + "isTranslated": true, + "originalDefault": "Plugin" + }, "DaxIUG": { "defaultMessage": "Sleutel variabele", "description": "'Variable key' label", @@ -1045,6 +1051,12 @@ "description": "Custom confirmation email template explanation", "originalDefault": "Below you can specify a custom template for the configuration email. If not specified, the globally configured template will be used." }, + "Mdnl0l": { + "defaultMessage": "Prefill", + "description": "Variable table prefill title", + "isTranslated": true, + "originalDefault": "Prefill" + }, "MnfzL3": { "defaultMessage": "Plugin", "description": "Plugin ID label", @@ -1055,11 +1067,6 @@ "description": "Form variables configuration editor fieldset title", "originalDefault": "Form variables configuration" }, - "MzMXRd": { - "defaultMessage": "Prefill-attribuut", - "description": "Variable table prefill attribute title", - "originalDefault": "Prefill attribute" - }, "NE5h2q": { "defaultMessage": "Omschrijving", "description": "Description column header", @@ -1116,10 +1123,10 @@ "description": "Session expiry warning (in modal)", "originalDefault": "Your session is about to expire {delta}. Extend your session if you wish to continue." }, - "OibWN2": { - "defaultMessage": "Prefill-bron", - "description": "Variable table identifier role attribute title", - "originalDefault": "Prefill identifier role" + "Oi+DV0": { + "defaultMessage": "{attr} uit {plugin} (van de {role})", + "description": "Prefill configuration summary", + "originalDefault": "{attr} from {plugin} (of the {role})" }, "OmQdqG": { "defaultMessage": "Cache timeout", @@ -1219,13 +1226,18 @@ "description": "Payment backend options label", "originalDefault": "Payment backend options" }, + "QsrtPz": { + "defaultMessage": "Prefill-instellingen", + "description": "Variable prefill configuration modal title", + "originalDefault": "Prefill configuration" + }, "R78GMf": { "defaultMessage": "Vertrouwelijkheidaanduiding", "description": "Indication of the level to which extend the dossier of the ZAAK is meant to be public", "originalDefault": "Confidentiality" }, "R7XVbR": { - "defaultMessage": "Ingelogde/vertegenwoordigde", + "defaultMessage": "hoofdentiteit", "description": "Identifier role (for mandate context) label for representee", "originalDefault": "Main/representee" }, @@ -1374,6 +1386,12 @@ "description": "Changing objecttype warning message", "originalDefault": "Changing the objecttype will remove the existing variables mapping. Are you sure you want to continue?" }, + "Uq9Hbx": { + "defaultMessage": "-", + "description": "Registration summary no registration backend fallback message", + "isTranslated": true, + "originalDefault": "-" + }, "V21YkS": { "defaultMessage": "Bevestigen", "description": "Camunda process variables confirm button", @@ -1436,11 +1454,6 @@ "description": "Form logic tab title", "originalDefault": "Logic" }, - "WjDh7l": { - "defaultMessage": "Prefill-plugin", - "description": "Variable table prefill plugin title", - "originalDefault": "Prefill plugin" - }, "WnKF/i": { "defaultMessage": "URL naar het INFORMATIEOBJECTTYPE in een Catalogi API die wordt gebruikt voor de bijlagen.", "description": "Objects API registration options \"Attachment informatieobjecttype\" description", @@ -1631,6 +1644,11 @@ "description": "Variable registration configuration modal title", "originalDefault": "{varName}: registration configuration for {backendName}" }, + "bmlODS": { + "defaultMessage": "Bronhouder", + "description": "Variable prefill identifier role label", + "originalDefault": "Identifier role" + }, "bnxtnX": { "defaultMessage": "Volledige HTTP-request", "description": "Service fetch configuration try it out tabpanel full request fieldset title", @@ -1858,6 +1876,11 @@ "description": "Logic action warning icon text", "originalDefault": "Detected some problems in this action: {problems}." }, + "gqVGbb": { + "defaultMessage": "Prefill instellen", + "description": "'Edit variable prefill' icon label", + "originalDefault": "Edit prefill configuration" + }, "gr7edY": { "defaultMessage": "Applicatieversie", "description": "App version column header", @@ -2372,6 +2395,11 @@ "description": "Last Name Component field help text", "originalDefault": "Component where the last name should be entered" }, + "tJQoMq": { + "defaultMessage": "De prefill-instellingen zijn niet geldig.", + "description": "Prefill configuration errors icon text", + "originalDefault": "There are errors in the prefill configuration." + }, "tLL2x4": { "defaultMessage": "Formulier configureren", "description": "Change form page title", diff --git a/src/openforms/scss/components/admin/_ReactModal.scss b/src/openforms/scss/components/admin/_ReactModal.scss index 987573ec94..da88f98aac 100644 --- a/src/openforms/scss/components/admin/_ReactModal.scss +++ b/src/openforms/scss/components/admin/_ReactModal.scss @@ -99,5 +99,17 @@ flex-shrink: 0; bottom: 1px; } + + // bootstrap styles compete with django .form-row styles... + .form-row { + display: block; + margin-inline-start: 0; + margin-inline-end: 0; + + &, + * { + box-sizing: initial; + } + } } } diff --git a/src/openforms/scss/components/admin/_icon.scss b/src/openforms/scss/components/admin/_icon.scss index 37c26712ef..b3f0ccb8d7 100644 --- a/src/openforms/scss/components/admin/_icon.scss +++ b/src/openforms/scss/components/admin/_icon.scss @@ -20,4 +20,8 @@ padding: 0; padding-right: $grid-margin-1; } + + &--compact { + padding: 0; + } }