diff --git a/.gitignore b/.gitignore index b21ab3bf..a5109d3b 100644 --- a/.gitignore +++ b/.gitignore @@ -54,7 +54,6 @@ storybook-static .DS_Store .nyc_output /docs/.vuepress/dist/ -/packages/tailwind/COLORS.JSON # Yarn .pnp.* diff --git a/.storybook/main.ts b/.storybook/main.ts index 12f9ba17..25f74e32 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -1,7 +1,7 @@ import type { StorybookConfig } from "@storybook/react-vite"; const config: StorybookConfig = { - staticDirs: ["../packages/tailwind/build"], + staticDirs: ["../packages/tailwind-formio/build"], stories: [ "../stories/Getting-started.mdx", diff --git a/commitlint.config.cjs b/commitlint.config.cjs deleted file mode 100644 index 5073c20d..00000000 --- a/commitlint.config.cjs +++ /dev/null @@ -1 +0,0 @@ -module.exports = { extends: ["@commitlint/config-conventional"] }; diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 00000000..fa584fb6 --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1 @@ +export default { extends: ["@commitlint/config-conventional"] }; diff --git a/package.json b/package.json index a87ff7f1..f746e844 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,6 @@ }, "homepage": "https://github.com/TypedProject/tsed-formio", "scripts": { - "/postinstall": "lerna run build --stream", "configure": "monorepo ci configure", "test": "lerna run test --stream", "lint": "eslint", @@ -22,12 +21,12 @@ "build": "monorepo build --verbose", "publish": "monorepo publish --dry-run", "start": "lerna run start --stream --parallel", - "tailwind:build": "lerna run tailwind:build --stream --scope @tsed/tailwind", + "tailwind:build": "lerna run build --stream --scope @tsed/tailwind-formio", "release": "semantic-release", "prepare": "is-ci || husky install", - "storybook:test": "yarn test-storybook", - "storybook:test:ci": "yarn test-storybook --maxWorkers=2", - "storybook:start": "storybook dev -p 6006", + "storybook:test": "yarn build && yarn test-storybook", + "storybook:test:ci": "yarn build && yarn test-storybook --maxWorkers=2", + "storybook:start": "yarn tailwind:build && storybook dev -p 6006", "storybook:build": "yarn run tailwind:build && yarn run build-storybook", "build-storybook": "storybook build -c .storybook", "caniuse": "npx -y update-browserslist-db@latest", @@ -46,10 +45,11 @@ "@types/react-router-dom": "^5.3.3", "@types/react-table": "^7.7.14", "connected-react-router": "6.9.1", - "formiojs": "^4.14.13", + "formiojs": "4.21.6", "history": "5.3.0", "lerna": "8.1.2", "lodash": "4.17.21", + "nodemon": "3.1.9", "react": "^18.2.0", "react-dom": "^18.2.0", "react-redux": "7.2.6", @@ -76,11 +76,11 @@ "@storybook/test-runner": "0.21.0", "@swc/core": "^1.2.208", "@swc/jest": "^0.2.21", - "@testing-library/dom": "^8.14.0", - "@testing-library/jest-dom": "^5.16.4", - "@testing-library/react": "^12.1.5", - "@testing-library/user-event": "^14.2.1", - "@tsed/monorepo-utils": "2.1.2", + "@testing-library/dom": "10.4.0", + "@testing-library/jest-dom": "6.5.0", + "@testing-library/react": "16.1.0", + "@testing-library/user-event": "14.5.2", + "@tsed/monorepo-utils": "2.3.10", "@types/ejs": "^3.0.5", "@types/jest": "27.0.2", "@types/lodash": "4.14.168", @@ -108,19 +108,17 @@ "eslint-plugin-workspaces": "0.10.1", "fs-extra": "10.1.0", "globby": "^14.0.2", - "happy-dom": "^16.0.0", "husky": "^8.0.1", + "jsdom": "25.0.1", "lint-staged": "13.0.3", - "microbundle": "0.13.0", "playwright": "1.49.1", "postcss": "8.4.49", "postcss-nested": "7.0.2", "postcss-normalize": "13.0.1", "prettier": "3.4.2", "prop-types": "^15.8.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-svg": "10.0.23", + "react": "18.3.1", + "react-dom": "18.3.1", "rimraf": "^3.0.2", "rollup-preserve-directives": "^1.1.3", "semantic-release": "23.0.5", diff --git a/packages/integration/index.html b/packages/integration/index.html new file mode 100644 index 00000000..e4b78eae --- /dev/null +++ b/packages/integration/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + TS + + +
+ + + diff --git a/packages/integration/package.json b/packages/integration/package.json new file mode 100644 index 00000000..7920a62f --- /dev/null +++ b/packages/integration/package.json @@ -0,0 +1,36 @@ +{ + "name": "@tsed/react-formio-integration", + "version": "2.3.2", + "description": "", + "private": true, + "type": "module", + "license": "MIT", + "scripts": { + "dev": "vite dev" + }, + "dependencies": { + "classnames": "^2.3.1", + "eventemitter2": "^6.4.3", + "prop-types": "15.8.1" + }, + "peerDependencies": { + "@formio/choices.js": ">=9.0.1", + "formiojs": ">=4.0.0", + "lodash": ">=4.17.20", + "prop-types": ">=15.7.2", + "react": ">=16.14.0", + "react-dnd": ">=16.0.1", + "react-dnd-html5-backend": ">=16.0.1", + "react-dom": ">=16.14.0", + "react-table": ">=7.6.3", + "tooltip.js": ">=1.3.3" + }, + "devDependencies": { + "@tsed/react-formio": "workspace:*", + "@tsed/tailwind-formio": "workspace:*", + "@tsed/typescript": "workspace:*", + "microbundle": "0.13.0", + "vite": "5.4.11", + "vitest": "2.1.8" + } +} diff --git a/packages/integration/postcss.config.js b/packages/integration/postcss.config.js new file mode 100644 index 00000000..93b9521b --- /dev/null +++ b/packages/integration/postcss.config.js @@ -0,0 +1,8 @@ +export default { + plugins: { + "postcss-normalize": {}, + "tailwindcss/nesting": {}, + tailwindcss: {}, + autoprefixer: {} + } +}; diff --git a/packages/integration/public/vite.svg b/packages/integration/public/vite.svg new file mode 100644 index 00000000..e7b8dfb1 --- /dev/null +++ b/packages/integration/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/integration/src/App.tsx b/packages/integration/src/App.tsx new file mode 100644 index 00000000..c12ebca6 --- /dev/null +++ b/packages/integration/src/App.tsx @@ -0,0 +1,118 @@ +import { defaultDisplayChoices, FormEdit } from "@tsed/react-formio"; + +const opts: any = { + typeChoices: [ + { label: "Form", value: "form" }, + { label: "Resources", value: "resource" } + ], + displayChoices: defaultDisplayChoices, + enableTags: true, + // options: { template: "tailwind", iconset: "bx" }, + form: { + type: "form", + tags: [], + owner: "5d0797a382461b6656d2c790", + components: [ + { + label: "Text Field", + labelPosition: "top", + placeholder: "", + description: "", + tooltip: "", + prefix: "", + suffix: "", + widget: { type: "input" }, + inputMask: "", + allowMultipleMasks: false, + customClass: "", + tabindex: "", + autocomplete: "", + hidden: false, + hideLabel: false, + showWordCount: false, + showCharCount: false, + mask: false, + autofocus: false, + spellcheck: true, + disabled: false, + tableView: true, + modalEdit: false, + multiple: false, + persistent: true, + inputFormat: "plain", + protected: false, + dbIndex: false, + case: "", + encrypted: false, + redrawOn: "", + clearOnHide: true, + customDefaultValue: "", + calculateValue: "", + calculateServer: false, + allowCalculateOverride: false, + validateOn: "change", + validate: { + required: true, + pattern: "", + customMessage: "", + custom: "", + customPrivate: false, + json: "", + minLength: "", + maxLength: "", + strictDateValidation: false, + multiple: false, + unique: false + }, + unique: false, + errorLabel: "", + key: "textField", + tags: [], + properties: {}, + conditional: { show: null, when: null, eq: "", json: "" }, + customConditional: "", + logic: [], + attributes: {}, + overlay: { + style: "", + page: "", + left: "", + top: "", + width: "", + height: "" + }, + type: "textfield", + input: true, + refreshOn: "", + inputType: "text", + id: "eqb1o4r", + defaultValue: "" + } + ], + title: "text-field", + display: "form", + access: [ + { + roles: ["5d0797bc872fc747da559858", "5d0797bc872fc71d05559859", "5d0797bc872fc7da3b55985a"], + type: "read_all" + } + ], + submissionAccess: [], + controller: "", + properties: {}, + settings: {}, + name: "textField", + path: "textfield", + machineName: "tcspjwhsevrzpcd:textField" + } +}; + +function App() { + return ( +
+ +
+ ); +} + +export default App; diff --git a/packages/integration/src/assets/react.svg b/packages/integration/src/assets/react.svg new file mode 100644 index 00000000..6c87de9b --- /dev/null +++ b/packages/integration/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/integration/src/main.tsx b/packages/integration/src/main.tsx new file mode 100644 index 00000000..72b1d875 --- /dev/null +++ b/packages/integration/src/main.tsx @@ -0,0 +1,18 @@ +import "./styles/index.css"; + +import { Formio, Templates } from "@tsed/react-formio"; +import tailwind from "@tsed/tailwind-formio"; +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; + +import App from "./App"; + +// eslint-disable-next-line react-hooks/rules-of-hooks +Formio.use(tailwind); +Templates.framework = "tailwind"; + +createRoot(document.getElementById("root")!).render( + + + +); diff --git a/packages/integration/src/styles/fonts/bxicons/animations.css b/packages/integration/src/styles/fonts/bxicons/animations.css new file mode 100644 index 00000000..a7c97930 --- /dev/null +++ b/packages/integration/src/styles/fonts/bxicons/animations.css @@ -0,0 +1,341 @@ +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes spin { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@-webkit-keyframes burst { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + + opacity: 1; + } + 90% { + -webkit-transform: scale(1.5); + transform: scale(1.5); + + opacity: 0; + } +} + +@keyframes burst { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + + opacity: 1; + } + 90% { + -webkit-transform: scale(1.5); + transform: scale(1.5); + + opacity: 0; + } +} + +@-webkit-keyframes flashing { + 0% { + opacity: 1; + } + 45% { + opacity: 0; + } + 90% { + opacity: 1; + } +} + +@keyframes flashing { + 0% { + opacity: 1; + } + 45% { + opacity: 0; + } + 90% { + opacity: 1; + } +} + +@-webkit-keyframes fade-left { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + + opacity: 1; + } + 75% { + -webkit-transform: translateX(-20px); + transform: translateX(-20px); + + opacity: 0; + } +} + +@keyframes fade-left { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + + opacity: 1; + } + 75% { + -webkit-transform: translateX(-20px); + transform: translateX(-20px); + + opacity: 0; + } +} + +@-webkit-keyframes fade-right { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + + opacity: 1; + } + 75% { + -webkit-transform: translateX(20px); + transform: translateX(20px); + + opacity: 0; + } +} + +@keyframes fade-right { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + + opacity: 1; + } + 75% { + -webkit-transform: translateX(20px); + transform: translateX(20px); + + opacity: 0; + } +} + +@-webkit-keyframes fade-up { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + + opacity: 1; + } + 75% { + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + + opacity: 0; + } +} + +@keyframes fade-up { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + + opacity: 1; + } + 75% { + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + + opacity: 0; + } +} + +@-webkit-keyframes fade-down { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + + opacity: 1; + } + 75% { + -webkit-transform: translateY(20px); + transform: translateY(20px); + + opacity: 0; + } +} + +@keyframes fade-down { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + + opacity: 1; + } + 75% { + -webkit-transform: translateY(20px); + transform: translateY(20px); + + opacity: 0; + } +} + +@-webkit-keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, + 20% { + -webkit-transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg); + transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg); + } + + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + } + + 40%, + 60%, + 80% { + -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg); + transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, + 20% { + -webkit-transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg); + transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg); + } + + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + } + + 40%, + 60%, + 80% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.bx-spin { + -webkit-animation: spin 2s linear infinite; + animation: spin 2s linear infinite; +} + +.bx-spin-hover:hover { + -webkit-animation: spin 2s linear infinite; + animation: spin 2s linear infinite; +} + +.bx-tada { + -webkit-animation: tada 1.5s ease infinite; + animation: tada 1.5s ease infinite; +} + +.bx-tada-hover:hover { + -webkit-animation: tada 1.5s ease infinite; + animation: tada 1.5s ease infinite; +} + +.bx-flashing { + -webkit-animation: flashing 1.5s infinite linear; + animation: flashing 1.5s infinite linear; +} + +.bx-flashing-hover:hover { + -webkit-animation: flashing 1.5s infinite linear; + animation: flashing 1.5s infinite linear; +} + +.bx-burst { + -webkit-animation: burst 1.5s infinite linear; + animation: burst 1.5s infinite linear; +} + +.bx-burst-hover:hover { + -webkit-animation: burst 1.5s infinite linear; + animation: burst 1.5s infinite linear; +} + +.bx-fade-up { + -webkit-animation: fade-up 1.5s infinite linear; + animation: fade-up 1.5s infinite linear; +} + +.bx-fade-up-hover:hover { + -webkit-animation: fade-up 1.5s infinite linear; + animation: fade-up 1.5s infinite linear; +} + +.bx-fade-down { + -webkit-animation: fade-down 1.5s infinite linear; + animation: fade-down 1.5s infinite linear; +} + +.bx-fade-down-hover:hover { + -webkit-animation: fade-down 1.5s infinite linear; + animation: fade-down 1.5s infinite linear; +} + +.bx-fade-left { + -webkit-animation: fade-left 1.5s infinite linear; + animation: fade-left 1.5s infinite linear; +} + +.bx-fade-left-hover:hover { + -webkit-animation: fade-left 1.5s infinite linear; + animation: fade-left 1.5s infinite linear; +} + +.bx-fade-right { + -webkit-animation: fade-right 1.5s infinite linear; + animation: fade-right 1.5s infinite linear; +} + +.bx-fade-right-hover:hover { + -webkit-animation: fade-right 1.5s infinite linear; + animation: fade-right 1.5s infinite linear; +} \ No newline at end of file diff --git a/packages/integration/src/styles/fonts/bxicons/boxicons.css b/packages/integration/src/styles/fonts/bxicons/boxicons.css new file mode 100644 index 00000000..ee25cb0a --- /dev/null +++ b/packages/integration/src/styles/fonts/bxicons/boxicons.css @@ -0,0 +1,6477 @@ +@font-face { + font-family: 'boxicons'; + font-weight: normal; + font-style: normal; + + src: url('boxicons.eot'); + src: url('boxicons.eot') format('embedded-opentype'), + url('boxicons.woff2') format('woff2'), + url('boxicons.woff') format('woff'), + url('boxicons.ttf') format('truetype'), + url('boxicons.svg?#boxicons') format('svg'); +} + +.bx { + font-family: 'boxicons' !important; + font-weight: normal; + font-style: normal; + font-variant: normal; + line-height: 1; + + display: inline-block; + + text-transform: none; + + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.bx-ul { + margin-left: 2em; + padding-left: 0; + + list-style: none; +} + +.bx-ul > li { + position: relative; +} + +.bx-ul .bx { + font-size: inherit; + line-height: inherit; + + position: absolute; + left: -2em; + + width: 2em; + + text-align: center; +} + +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes spin { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@-webkit-keyframes burst { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + + opacity: 1; + } + 90% { + -webkit-transform: scale(1.5); + transform: scale(1.5); + + opacity: 0; + } +} + +@keyframes burst { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + + opacity: 1; + } + 90% { + -webkit-transform: scale(1.5); + transform: scale(1.5); + + opacity: 0; + } +} + +@-webkit-keyframes flashing { + 0% { + opacity: 1; + } + 45% { + opacity: 0; + } + 90% { + opacity: 1; + } +} + +@keyframes flashing { + 0% { + opacity: 1; + } + 45% { + opacity: 0; + } + 90% { + opacity: 1; + } +} + +@-webkit-keyframes fade-left { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + + opacity: 1; + } + 75% { + -webkit-transform: translateX(-20px); + transform: translateX(-20px); + + opacity: 0; + } +} + +@keyframes fade-left { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + + opacity: 1; + } + 75% { + -webkit-transform: translateX(-20px); + transform: translateX(-20px); + + opacity: 0; + } +} + +@-webkit-keyframes fade-right { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + + opacity: 1; + } + 75% { + -webkit-transform: translateX(20px); + transform: translateX(20px); + + opacity: 0; + } +} + +@keyframes fade-right { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + + opacity: 1; + } + 75% { + -webkit-transform: translateX(20px); + transform: translateX(20px); + + opacity: 0; + } +} + +@-webkit-keyframes fade-up { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + + opacity: 1; + } + 75% { + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + + opacity: 0; + } +} + +@keyframes fade-up { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + + opacity: 1; + } + 75% { + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + + opacity: 0; + } +} + +@-webkit-keyframes fade-down { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + + opacity: 1; + } + 75% { + -webkit-transform: translateY(20px); + transform: translateY(20px); + + opacity: 0; + } +} + +@keyframes fade-down { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + + opacity: 1; + } + 75% { + -webkit-transform: translateY(20px); + transform: translateY(20px); + + opacity: 0; + } +} + +@-webkit-keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, + 20% { + -webkit-transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg); + transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg); + } + + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + } + + 40%, + 60%, + 80% { + -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg); + transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, + 20% { + -webkit-transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg); + transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg); + } + + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + } + + 40%, + 60%, + 80% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.bx-spin { + -webkit-animation: spin 2s linear infinite; + animation: spin 2s linear infinite; +} + +.bx-spin-hover:hover { + -webkit-animation: spin 2s linear infinite; + animation: spin 2s linear infinite; +} + +.bx-tada { + -webkit-animation: tada 1.5s ease infinite; + animation: tada 1.5s ease infinite; +} + +.bx-tada-hover:hover { + -webkit-animation: tada 1.5s ease infinite; + animation: tada 1.5s ease infinite; +} + +.bx-flashing { + -webkit-animation: flashing 1.5s infinite linear; + animation: flashing 1.5s infinite linear; +} + +.bx-flashing-hover:hover { + -webkit-animation: flashing 1.5s infinite linear; + animation: flashing 1.5s infinite linear; +} + +.bx-burst { + -webkit-animation: burst 1.5s infinite linear; + animation: burst 1.5s infinite linear; +} + +.bx-burst-hover:hover { + -webkit-animation: burst 1.5s infinite linear; + animation: burst 1.5s infinite linear; +} + +.bx-fade-up { + -webkit-animation: fade-up 1.5s infinite linear; + animation: fade-up 1.5s infinite linear; +} + +.bx-fade-up-hover:hover { + -webkit-animation: fade-up 1.5s infinite linear; + animation: fade-up 1.5s infinite linear; +} + +.bx-fade-down { + -webkit-animation: fade-down 1.5s infinite linear; + animation: fade-down 1.5s infinite linear; +} + +.bx-fade-down-hover:hover { + -webkit-animation: fade-down 1.5s infinite linear; + animation: fade-down 1.5s infinite linear; +} + +.bx-fade-left { + -webkit-animation: fade-left 1.5s infinite linear; + animation: fade-left 1.5s infinite linear; +} + +.bx-fade-left-hover:hover { + -webkit-animation: fade-left 1.5s infinite linear; + animation: fade-left 1.5s infinite linear; +} + +.bx-fade-right { + -webkit-animation: fade-right 1.5s infinite linear; + animation: fade-right 1.5s infinite linear; +} + +.bx-fade-right-hover:hover { + -webkit-animation: fade-right 1.5s infinite linear; + animation: fade-right 1.5s infinite linear; +} + +.bx-xs { + font-size: 1rem !important; +} + +.bx-sm { + font-size: 1.55rem !important; +} + +.bx-md { + font-size: 2.25rem !important; +} + +.bx-fw { + font-size: 1.2857142857em; + line-height: .8em; + + width: 1.2857142857em; + height: .8em; + margin-top: -.2em !important; + + vertical-align: middle; +} + +.bx-lg { + font-size: 3.0rem !important; +} + +.bx-pull-left { + float: left; + + margin-right: .3em !important; +} + +.bx-pull-right { + float: right; + + margin-left: .3em !important; +} + +.bx-rotate-90 { + transform: rotate(90deg); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=1)'; +} + +.bx-rotate-180 { + transform: rotate(180deg); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2)'; +} + +.bx-rotate-270 { + transform: rotate(270deg); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=3)'; +} + +.bx-flip-horizontal { + transform: scaleX(-1); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)'; +} + +.bx-flip-vertical { + transform: scaleY(-1); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)'; +} + +.bx-border { + padding: .25em; + + border: .07em solid rgba(0, 0, 0, .1); + border-radius: .25em; +} + +.bx-border-circle { + padding: .25em; + + border: .07em solid rgba(0, 0, 0, .1); + border-radius: 50%; +} + +.bx-abacus:before { + content: "\e900"; +} + +.bx-accessibility:before { + content: "\e901"; +} + +.bx-add-to-queue:before { + content: "\e902"; +} + +.bx-adjust:before { + content: "\e903"; +} + +.bx-alarm:before { + content: "\e904"; +} + +.bx-alarm-add:before { + content: "\e905"; +} + +.bx-alarm-exclamation:before { + content: "\e906"; +} + +.bx-alarm-off:before { + content: "\e907"; +} + +.bx-alarm-snooze:before { + content: "\e908"; +} + +.bx-album:before { + content: "\e909"; +} + +.bx-align-justify:before { + content: "\e90a"; +} + +.bx-align-left:before { + content: "\e90b"; +} + +.bx-align-middle:before { + content: "\e90c"; +} + +.bx-align-right:before { + content: "\e90d"; +} + +.bx-analyse:before { + content: "\e90e"; +} + +.bx-anchor:before { + content: "\e90f"; +} + +.bx-angry:before { + content: "\e910"; +} + +.bx-aperture:before { + content: "\e911"; +} + +.bx-arch:before { + content: "\e912"; +} + +.bx-archive:before { + content: "\e913"; +} + +.bx-archive-in:before { + content: "\e914"; +} + +.bx-archive-out:before { + content: "\e915"; +} + +.bx-area:before { + content: "\e916"; +} + +.bx-arrow-back:before { + content: "\e917"; +} + +.bx-arrow-from-bottom:before { + content: "\e918"; +} + +.bx-arrow-from-left:before { + content: "\e919"; +} + +.bx-arrow-from-right:before { + content: "\e91a"; +} + +.bx-arrow-from-top:before { + content: "\e91b"; +} + +.bx-arrow-to-bottom:before { + content: "\e91c"; +} + +.bx-arrow-to-left:before { + content: "\e91d"; +} + +.bx-arrow-to-right:before { + content: "\e91e"; +} + +.bx-arrow-to-top:before { + content: "\e91f"; +} + +.bx-at:before { + content: "\e920"; +} + +.bx-atom:before { + content: "\e921"; +} + +.bx-award:before { + content: "\e922"; +} + +.bx-badge:before { + content: "\e923"; +} + +.bx-badge-check:before { + content: "\e924"; +} + +.bx-ball:before { + content: "\e925"; +} + +.bx-band-aid:before { + content: "\e926"; +} + +.bx-bar-chart:before { + content: "\e927"; +} + +.bx-bar-chart-alt:before { + content: "\e928"; +} + +.bx-bar-chart-alt-2:before { + content: "\e929"; +} + +.bx-bar-chart-square:before { + content: "\e92a"; +} + +.bx-barcode:before { + content: "\e92b"; +} + +.bx-barcode-reader:before { + content: "\e92c"; +} + +.bx-baseball:before { + content: "\e92d"; +} + +.bx-basket:before { + content: "\e92e"; +} + +.bx-basketball:before { + content: "\e92f"; +} + +.bx-bath:before { + content: "\e930"; +} + +.bx-battery:before { + content: "\e931"; +} + +.bx-bed:before { + content: "\e932"; +} + +.bx-been-here:before { + content: "\e933"; +} + +.bx-beer:before { + content: "\e934"; +} + +.bx-bell:before { + content: "\e935"; +} + +.bx-bell-minus:before { + content: "\e936"; +} + +.bx-bell-off:before { + content: "\e937"; +} + +.bx-bell-plus:before { + content: "\e938"; +} + +.bx-bible:before { + content: "\e939"; +} + +.bx-bitcoin:before { + content: "\e93a"; +} + +.bx-blanket:before { + content: "\e93b"; +} + +.bx-block:before { + content: "\e93c"; +} + +.bx-bluetooth:before { + content: "\e93d"; +} + +.bx-body:before { + content: "\e93e"; +} + +.bx-bold:before { + content: "\e93f"; +} + +.bx-bolt-circle:before { + content: "\e940"; +} + +.bx-bomb:before { + content: "\e941"; +} + +.bx-bone:before { + content: "\e942"; +} + +.bx-bong:before { + content: "\e943"; +} + +.bx-book:before { + content: "\e944"; +} + +.bx-book-add:before { + content: "\e945"; +} + +.bx-book-alt:before { + content: "\e946"; +} + +.bx-book-bookmark:before { + content: "\e947"; +} + +.bx-book-content:before { + content: "\e948"; +} + +.bx-book-heart:before { + content: "\e949"; +} + +.bx-bookmark:before { + content: "\e94a"; +} + +.bx-bookmark-alt:before { + content: "\e94b"; +} + +.bx-bookmark-alt-minus:before { + content: "\e94c"; +} + +.bx-bookmark-alt-plus:before { + content: "\e94d"; +} + +.bx-bookmark-heart:before { + content: "\e94e"; +} + +.bx-bookmark-minus:before { + content: "\e94f"; +} + +.bx-bookmark-plus:before { + content: "\e950"; +} + +.bx-bookmarks:before { + content: "\e951"; +} + +.bx-book-open:before { + content: "\e952"; +} + +.bx-book-reader:before { + content: "\e953"; +} + +.bx-border-all:before { + content: "\e954"; +} + +.bx-border-bottom:before { + content: "\e955"; +} + +.bx-border-inner:before { + content: "\e956"; +} + +.bx-border-left:before { + content: "\e957"; +} + +.bx-border-none:before { + content: "\e958"; +} + +.bx-border-outer:before { + content: "\e959"; +} + +.bx-border-radius:before { + content: "\e95a"; +} + +.bx-border-right:before { + content: "\e95b"; +} + +.bx-border-top:before { + content: "\e95c"; +} + +.bx-bot:before { + content: "\e95d"; +} + +.bx-bowling-ball:before { + content: "\e95e"; +} + +.bx-box:before { + content: "\e95f"; +} + +.bx-bracket:before { + content: "\e960"; +} + +.bx-braille:before { + content: "\e961"; +} + +.bx-brain:before { + content: "\e962"; +} + +.bx-briefcase:before { + content: "\e963"; +} + +.bx-briefcase-alt:before { + content: "\e964"; +} + +.bx-briefcase-alt-2:before { + content: "\e965"; +} + +.bx-brightness:before { + content: "\e966"; +} + +.bx-brightness-half:before { + content: "\e967"; +} + +.bx-broadcast:before { + content: "\e968"; +} + +.bx-brush:before { + content: "\e969"; +} + +.bx-brush-alt:before { + content: "\e96a"; +} + +.bx-bug:before { + content: "\e96b"; +} + +.bx-bug-alt:before { + content: "\e96c"; +} + +.bx-building:before { + content: "\e96d"; +} + +.bx-building-house:before { + content: "\e96e"; +} + +.bx-buildings:before { + content: "\e96f"; +} + +.bx-bulb:before { + content: "\e970"; +} + +.bx-bullseye:before { + content: "\e971"; +} + +.bx-buoy:before { + content: "\e972"; +} + +.bx-bus:before { + content: "\e973"; +} + +.bx-bus-school:before { + content: "\e974"; +} + +.bx-cabinet:before { + content: "\e975"; +} + +.bx-cake:before { + content: "\e976"; +} + +.bx-calculator:before { + content: "\e977"; +} + +.bx-calendar:before { + content: "\e978"; +} + +.bx-calendar-alt:before { + content: "\e979"; +} + +.bx-calendar-check:before { + content: "\e97a"; +} + +.bx-calendar-edit:before { + content: "\e97b"; +} + +.bx-calendar-event:before { + content: "\e97c"; +} + +.bx-calendar-exclamation:before { + content: "\e97d"; +} + +.bx-calendar-heart:before { + content: "\e97e"; +} + +.bx-calendar-minus:before { + content: "\e97f"; +} + +.bx-calendar-plus:before { + content: "\e980"; +} + +.bx-calendar-star:before { + content: "\e981"; +} + +.bx-calendar-week:before { + content: "\e982"; +} + +.bx-calendar-x:before { + content: "\e983"; +} + +.bx-camera:before { + content: "\e984"; +} + +.bx-camera-home:before { + content: "\e985"; +} + +.bx-camera-movie:before { + content: "\e986"; +} + +.bx-camera-off:before { + content: "\e987"; +} + +.bx-capsule:before { + content: "\e988"; +} + +.bx-captions:before { + content: "\e989"; +} + +.bx-car:before { + content: "\e98a"; +} + +.bx-card:before { + content: "\e98b"; +} + +.bx-caret-down:before { + content: "\e98c"; +} + +.bx-caret-down-circle:before { + content: "\e98d"; +} + +.bx-caret-down-square:before { + content: "\e98e"; +} + +.bx-caret-left:before { + content: "\e98f"; +} + +.bx-caret-left-circle:before { + content: "\e990"; +} + +.bx-caret-left-square:before { + content: "\e991"; +} + +.bx-caret-right:before { + content: "\e992"; +} + +.bx-caret-right-circle:before { + content: "\e993"; +} + +.bx-caret-right-square:before { + content: "\e994"; +} + +.bx-caret-up:before { + content: "\e995"; +} + +.bx-caret-up-circle:before { + content: "\e996"; +} + +.bx-caret-up-square:before { + content: "\e997"; +} + +.bx-carousel:before { + content: "\e998"; +} + +.bx-cart:before { + content: "\e999"; +} + +.bx-cart-alt:before { + content: "\e99a"; +} + +.bx-cast:before { + content: "\e99b"; +} + +.bx-category:before { + content: "\e99c"; +} + +.bx-category-alt:before { + content: "\e99d"; +} + +.bx-cctv:before { + content: "\e99e"; +} + +.bx-certification:before { + content: "\e99f"; +} + +.bx-chair:before { + content: "\e9a0"; +} + +.bx-chalkboard:before { + content: "\e9a1"; +} + +.bx-chart:before { + content: "\e9a2"; +} + +.bx-chat:before { + content: "\e9a3"; +} + +.bx-check:before { + content: "\e9a4"; +} + +.bx-checkbox:before { + content: "\e9a5"; +} + +.bx-checkbox-checked:before { + content: "\e9a6"; +} + +.bx-checkbox-square:before { + content: "\e9a7"; +} + +.bx-check-circle:before { + content: "\e9a8"; +} + +.bx-check-double:before { + content: "\e9a9"; +} + +.bx-check-shield:before { + content: "\e9aa"; +} + +.bx-check-square:before { + content: "\e9ab"; +} + +.bx-chevron-down:before { + content: "\e9ac"; +} + +.bx-chevron-down-circle:before { + content: "\e9ad"; +} + +.bx-chevron-down-square:before { + content: "\e9ae"; +} + +.bx-chevron-left:before { + content: "\e9af"; +} + +.bx-chevron-left-circle:before { + content: "\e9b0"; +} + +.bx-chevron-left-square:before { + content: "\e9b1"; +} + +.bx-chevron-right:before { + content: "\e9b2"; +} + +.bx-chevron-right-circle:before { + content: "\e9b3"; +} + +.bx-chevron-right-square:before { + content: "\e9b4"; +} + +.bx-chevrons-down:before { + content: "\e9b5"; +} + +.bx-chevrons-left:before { + content: "\e9b6"; +} + +.bx-chevrons-right:before { + content: "\e9b7"; +} + +.bx-chevrons-up:before { + content: "\e9b8"; +} + +.bx-chevron-up:before { + content: "\e9b9"; +} + +.bx-chevron-up-circle:before { + content: "\e9ba"; +} + +.bx-chevron-up-square:before { + content: "\e9bb"; +} + +.bx-chip:before { + content: "\e9bc"; +} + +.bx-church:before { + content: "\e9bd"; +} + +.bx-circle:before { + content: "\e9be"; +} + +.bx-clinic:before { + content: "\e9bf"; +} + +.bx-clipboard:before { + content: "\e9c0"; +} + +.bx-closet:before { + content: "\e9c1"; +} + +.bx-cloud:before { + content: "\e9c2"; +} + +.bx-cloud-download:before { + content: "\e9c3"; +} + +.bx-cloud-drizzle:before { + content: "\e9c4"; +} + +.bx-cloud-lightning:before { + content: "\e9c5"; +} + +.bx-cloud-light-rain:before { + content: "\e9c6"; +} + +.bx-cloud-rain:before { + content: "\e9c7"; +} + +.bx-cloud-snow:before { + content: "\e9c8"; +} + +.bx-cloud-upload:before { + content: "\e9c9"; +} + +.bx-code:before { + content: "\e9ca"; +} + +.bx-code-alt:before { + content: "\e9cb"; +} + +.bx-code-block:before { + content: "\e9cc"; +} + +.bx-code-curly:before { + content: "\e9cd"; +} + +.bx-coffee:before { + content: "\e9ce"; +} + +.bx-coffee-togo:before { + content: "\e9cf"; +} + +.bx-cog:before { + content: "\e9d0"; +} + +.bx-coin:before { + content: "\e9d1"; +} + +.bx-coin-stack:before { + content: "\e9d2"; +} + +.bx-collapse:before { + content: "\e9d3"; +} + +.bx-collection:before { + content: "\e9d4"; +} + +.bx-color-fill:before { + content: "\e9d5"; +} + +.bx-columns:before { + content: "\e9d6"; +} + +.bx-command:before { + content: "\e9d7"; +} + +.bx-comment:before { + content: "\e9d8"; +} + +.bx-comment-add:before { + content: "\e9d9"; +} + +.bx-comment-check:before { + content: "\e9da"; +} + +.bx-comment-detail:before { + content: "\e9db"; +} + +.bx-comment-dots:before { + content: "\e9dc"; +} + +.bx-comment-edit:before { + content: "\e9dd"; +} + +.bx-comment-error:before { + content: "\e9de"; +} + +.bx-comment-minus:before { + content: "\e9df"; +} + +.bx-comment-x:before { + content: "\e9e0"; +} + +.bx-compass:before { + content: "\e9e1"; +} + +.bx-confused:before { + content: "\e9e2"; +} + +.bx-conversation:before { + content: "\e9e3"; +} + +.bx-cookie:before { + content: "\e9e4"; +} + +.bx-cool:before { + content: "\e9e5"; +} + +.bx-copy:before { + content: "\e9e6"; +} + +.bx-copy-alt:before { + content: "\e9e7"; +} + +.bx-copyright:before { + content: "\e9e8"; +} + +.bx-credit-card:before { + content: "\e9e9"; +} + +.bx-credit-card-alt:before { + content: "\e9ea"; +} + +.bx-credit-card-front:before { + content: "\e9eb"; +} + +.bx-crop:before { + content: "\e9ec"; +} + +.bx-crosshair:before { + content: "\e9ed"; +} + +.bx-crown:before { + content: "\e9ee"; +} + +.bx-cube:before { + content: "\e9ef"; +} + +.bx-cube-alt:before { + content: "\e9f0"; +} + +.bx-cuboid:before { + content: "\e9f1"; +} + +.bx-current-location:before { + content: "\e9f2"; +} + +.bx-customize:before { + content: "\e9f3"; +} + +.bx-cut:before { + content: "\e9f4"; +} + +.bx-cycling:before { + content: "\e9f5"; +} + +.bx-cylinder:before { + content: "\e9f6"; +} + +.bx-data:before { + content: "\e9f7"; +} + +.bx-desktop:before { + content: "\e9f8"; +} + +.bx-detail:before { + content: "\e9f9"; +} + +.bx-devices:before { + content: "\e9fa"; +} + +.bx-dialpad:before { + content: "\e9fb"; +} + +.bx-dialpad-alt:before { + content: "\e9fc"; +} + +.bx-diamond:before { + content: "\e9fd"; +} + +.bx-dice-1:before { + content: "\e9fe"; +} + +.bx-dice-2:before { + content: "\e9ff"; +} + +.bx-dice-3:before { + content: "\ea00"; +} + +.bx-dice-4:before { + content: "\ea01"; +} + +.bx-dice-5:before { + content: "\ea02"; +} + +.bx-dice-6:before { + content: "\ea03"; +} + +.bx-directions:before { + content: "\ea04"; +} + +.bx-disc:before { + content: "\ea05"; +} + +.bx-dish:before { + content: "\ea06"; +} + +.bx-dislike:before { + content: "\ea07"; +} + +.bx-dizzy:before { + content: "\ea08"; +} + +.bx-dna:before { + content: "\ea09"; +} + +.bx-dock-bottom:before { + content: "\ea0a"; +} + +.bx-dock-left:before { + content: "\ea0b"; +} + +.bx-dock-right:before { + content: "\ea0c"; +} + +.bx-dock-top:before { + content: "\ea0d"; +} + +.bx-dollar:before { + content: "\ea0e"; +} + +.bx-dollar-circle:before { + content: "\ea0f"; +} + +.bx-donate-blood:before { + content: "\ea10"; +} + +.bx-donate-heart:before { + content: "\ea11"; +} + +.bx-door-open:before { + content: "\ea12"; +} + +.bx-dots-horizontal:before { + content: "\ea13"; +} + +.bx-dots-horizontal-rounded:before { + content: "\ea14"; +} + +.bx-dots-vertical:before { + content: "\ea15"; +} + +.bx-dots-vertical-rounded:before { + content: "\ea16"; +} + +.bx-doughnut-chart:before { + content: "\ea17"; +} + +.bx-down-arrow:before { + content: "\ea18"; +} + +.bx-down-arrow-alt:before { + content: "\ea19"; +} + +.bx-down-arrow-circle:before { + content: "\ea1a"; +} + +.bx-download:before { + content: "\ea1b"; +} + +.bx-downvote:before { + content: "\ea1c"; +} + +.bx-drink:before { + content: "\ea1d"; +} + +.bx-droplet:before { + content: "\ea1e"; +} + +.bx-dumbbell:before { + content: "\ea1f"; +} + +.bx-duplicate:before { + content: "\ea20"; +} + +.bx-edit:before { + content: "\ea21"; +} + +.bx-edit-alt:before { + content: "\ea22"; +} + +.bx-envelope:before { + content: "\ea23"; +} + +.bx-envelope-open:before { + content: "\ea24"; +} + +.bx-equalizer:before { + content: "\ea25"; +} + +.bx-eraser:before { + content: "\ea26"; +} + +.bx-error:before { + content: "\ea27"; +} + +.bx-error-alt:before { + content: "\ea28"; +} + +.bx-error-circle:before { + content: "\ea29"; +} + +.bx-euro:before { + content: "\ea2a"; +} + +.bx-exclude:before { + content: "\ea2b"; +} + +.bx-exit:before { + content: "\ea2c"; +} + +.bx-exit-fullscreen:before { + content: "\ea2d"; +} + +.bx-expand:before { + content: "\ea2e"; +} + +.bx-expand-alt:before { + content: "\ea2f"; +} + +.bx-export:before { + content: "\ea30"; +} + +.bx-extension:before { + content: "\ea31"; +} + +.bx-face:before { + content: "\ea32"; +} + +.bx-fast-forward:before { + content: "\ea33"; +} + +.bx-fast-forward-circle:before { + content: "\ea34"; +} + +.bx-female:before { + content: "\ea35"; +} + +.bx-female-sign:before { + content: "\ea36"; +} + +.bx-file:before { + content: "\ea37"; +} + +.bx-file-blank:before { + content: "\ea38"; +} + +.bx-file-find:before { + content: "\ea39"; +} + +.bx-film:before { + content: "\ea3a"; +} + +.bx-filter:before { + content: "\ea3b"; +} + +.bx-filter-alt:before { + content: "\ea3c"; +} + +.bx-fingerprint:before { + content: "\ea3d"; +} + +.bx-first-aid:before { + content: "\ea3e"; +} + +.bx-first-page:before { + content: "\ea3f"; +} + +.bx-flag:before { + content: "\ea40"; +} + +.bx-folder:before { + content: "\ea41"; +} + +.bx-folder-minus:before { + content: "\ea42"; +} + +.bx-folder-open:before { + content: "\ea43"; +} + +.bx-folder-plus:before { + content: "\ea44"; +} + +.bx-font:before { + content: "\ea45"; +} + +.bx-font-color:before { + content: "\ea46"; +} + +.bx-font-family:before { + content: "\ea47"; +} + +.bx-font-size:before { + content: "\ea48"; +} + +.bx-food-menu:before { + content: "\ea49"; +} + +.bx-food-tag:before { + content: "\ea4a"; +} + +.bx-football:before { + content: "\ea4b"; +} + +.bx-fridge:before { + content: "\ea4c"; +} + +.bx-fullscreen:before { + content: "\ea4d"; +} + +.bx-game:before { + content: "\ea4e"; +} + +.bx-gas-pump:before { + content: "\ea4f"; +} + +.bx-ghost:before { + content: "\ea50"; +} + +.bx-gift:before { + content: "\ea51"; +} + +.bx-git-branch:before { + content: "\ea52"; +} + +.bx-git-commit:before { + content: "\ea53"; +} + +.bx-git-compare:before { + content: "\ea54"; +} + +.bx-git-merge:before { + content: "\ea55"; +} + +.bx-git-pull-request:before { + content: "\ea56"; +} + +.bx-git-repo-forked:before { + content: "\ea57"; +} + +.bx-glasses:before { + content: "\ea58"; +} + +.bx-glasses-alt:before { + content: "\ea59"; +} + +.bx-globe:before { + content: "\ea5a"; +} + +.bx-globe-alt:before { + content: "\ea5b"; +} + +.bx-grid:before { + content: "\ea5c"; +} + +.bx-grid-alt:before { + content: "\ea5d"; +} + +.bx-grid-horizontal:before { + content: "\ea5e"; +} + +.bx-grid-small:before { + content: "\ea5f"; +} + +.bx-grid-vertical:before { + content: "\ea60"; +} + +.bx-group:before { + content: "\ea61"; +} + +.bx-handicap:before { + content: "\ea62"; +} + +.bx-happy:before { + content: "\ea63"; +} + +.bx-happy-alt:before { + content: "\ea64"; +} + +.bx-happy-beaming:before { + content: "\ea65"; +} + +.bx-happy-heart-eyes:before { + content: "\ea66"; +} + +.bx-hash:before { + content: "\ea67"; +} + +.bx-hdd:before { + content: "\ea68"; +} + +.bx-heading:before { + content: "\ea69"; +} + +.bx-headphone:before { + content: "\ea6a"; +} + +.bx-health:before { + content: "\ea6b"; +} + +.bx-heart:before { + content: "\ea6c"; +} + +.bx-heart-circle:before { + content: "\ea6d"; +} + +.bx-heart-square:before { + content: "\ea6e"; +} + +.bx-help-circle:before { + content: "\ea6f"; +} + +.bx-hide:before { + content: "\ea70"; +} + +.bx-highlight:before { + content: "\ea71"; +} + +.bx-history:before { + content: "\ea72"; +} + +.bx-hive:before { + content: "\ea73"; +} + +.bx-home:before { + content: "\ea74"; +} + +.bx-home-alt:before { + content: "\ea75"; +} + +.bx-home-circle:before { + content: "\ea76"; +} + +.bx-home-heart:before { + content: "\ea77"; +} + +.bx-home-smile:before { + content: "\ea78"; +} + +.bx-horizontal-center:before { + content: "\ea79"; +} + +.bx-hotel:before { + content: "\ea7a"; +} + +.bx-hourglass:before { + content: "\ea7b"; +} + +.bx-id-card:before { + content: "\ea7c"; +} + +.bx-image:before { + content: "\ea7d"; +} + +.bx-image-add:before { + content: "\ea7e"; +} + +.bx-image-alt:before { + content: "\ea7f"; +} + +.bx-images:before { + content: "\ea80"; +} + +.bx-import:before { + content: "\ea81"; +} + +.bx-infinite:before { + content: "\ea82"; +} + +.bx-info-circle:before { + content: "\ea83"; +} + +.bx-info-square:before { + content: "\ea84"; +} + +.bx-intersect:before { + content: "\ea85"; +} + +.bx-italic:before { + content: "\ea86"; +} + +.bx-joystick:before { + content: "\ea87"; +} + +.bx-joystick-alt:before { + content: "\ea88"; +} + +.bx-joystick-button:before { + content: "\ea89"; +} + +.bx-key:before { + content: "\ea8a"; +} + +.bx-label:before { + content: "\ea8b"; +} + +.bx-landscape:before { + content: "\ea8c"; +} + +.bx-laptop:before { + content: "\ea8d"; +} + +.bx-last-page:before { + content: "\ea8e"; +} + +.bx-laugh:before { + content: "\ea8f"; +} + +.bx-layer:before { + content: "\ea90"; +} + +.bx-layer-minus:before { + content: "\ea91"; +} + +.bx-layer-plus:before { + content: "\ea92"; +} + +.bx-layout:before { + content: "\ea93"; +} + +.bx-left-arrow:before { + content: "\ea94"; +} + +.bx-left-arrow-alt:before { + content: "\ea95"; +} + +.bx-left-arrow-circle:before { + content: "\ea96"; +} + +.bx-left-down-arrow-circle:before { + content: "\ea97"; +} + +.bx-left-indent:before { + content: "\ea98"; +} + +.bx-left-top-arrow-circle:before { + content: "\ea99"; +} + +.bx-library:before { + content: "\ea9a"; +} + +.bx-like:before { + content: "\ea9b"; +} + +.bx-line-chart:before { + content: "\ea9c"; +} + +.bx-line-chart-down:before { + content: "\ea9d"; +} + +.bx-link:before { + content: "\ea9e"; +} + +.bx-link-alt:before { + content: "\ea9f"; +} + +.bx-link-external:before { + content: "\eaa0"; +} + +.bx-lira:before { + content: "\eaa1"; +} + +.bx-list-check:before { + content: "\eaa2"; +} + +.bx-list-minus:before { + content: "\eaa3"; +} + +.bx-list-ol:before { + content: "\eaa4"; +} + +.bx-list-plus:before { + content: "\eaa5"; +} + +.bx-list-ul:before { + content: "\eaa6"; +} + +.bx-loader:before { + content: "\eaa7"; +} + +.bx-loader-alt:before { + content: "\eaa8"; +} + +.bx-loader-circle:before { + content: "\eaa9"; +} + +.bx-location-plus:before { + content: "\eaaa"; +} + +.bx-lock:before { + content: "\eaab"; +} + +.bx-lock-alt:before { + content: "\eaac"; +} + +.bx-lock-open:before { + content: "\eaad"; +} + +.bx-lock-open-alt:before { + content: "\eaae"; +} + +.bx-log-in:before { + content: "\eaaf"; +} + +.bx-log-in-circle:before { + content: "\eab0"; +} + +.bx-log-out:before { + content: "\eab1"; +} + +.bx-log-out-circle:before { + content: "\eab2"; +} + +.bx-low-vision:before { + content: "\eab3"; +} + +.bx-magnet:before { + content: "\eab4"; +} + +.bx-mail-send:before { + content: "\eab5"; +} + +.bx-male:before { + content: "\eab6"; +} + +.bx-male-sign:before { + content: "\eab7"; +} + +.bx-map:before { + content: "\eab8"; +} + +.bx-map-alt:before { + content: "\eab9"; +} + +.bx-map-pin:before { + content: "\eaba"; +} + +.bx-mask:before { + content: "\eabb"; +} + +.bx-medal:before { + content: "\eabc"; +} + +.bx-meh:before { + content: "\eabd"; +} + +.bx-meh-alt:before { + content: "\eabe"; +} + +.bx-meh-blank:before { + content: "\eabf"; +} + +.bx-memory-card:before { + content: "\eac0"; +} + +.bx-menu:before { + content: "\eac1"; +} + +.bx-menu-alt-left:before { + content: "\eac2"; +} + +.bx-menu-alt-right:before { + content: "\eac3"; +} + +.bx-merge:before { + content: "\eac4"; +} + +.bx-message:before { + content: "\eac5"; +} + +.bx-message-add:before { + content: "\eac6"; +} + +.bx-message-alt:before { + content: "\eac7"; +} + +.bx-message-alt-add:before { + content: "\eac8"; +} + +.bx-message-alt-check:before { + content: "\eac9"; +} + +.bx-message-alt-detail:before { + content: "\eaca"; +} + +.bx-message-alt-dots:before { + content: "\eacb"; +} + +.bx-message-alt-edit:before { + content: "\eacc"; +} + +.bx-message-alt-error:before { + content: "\eacd"; +} + +.bx-message-alt-minus:before { + content: "\eace"; +} + +.bx-message-alt-x:before { + content: "\eacf"; +} + +.bx-message-check:before { + content: "\ead0"; +} + +.bx-message-detail:before { + content: "\ead1"; +} + +.bx-message-dots:before { + content: "\ead2"; +} + +.bx-message-edit:before { + content: "\ead3"; +} + +.bx-message-error:before { + content: "\ead4"; +} + +.bx-message-minus:before { + content: "\ead5"; +} + +.bx-message-rounded:before { + content: "\ead6"; +} + +.bx-message-rounded-add:before { + content: "\ead7"; +} + +.bx-message-rounded-check:before { + content: "\ead8"; +} + +.bx-message-rounded-detail:before { + content: "\ead9"; +} + +.bx-message-rounded-dots:before { + content: "\eada"; +} + +.bx-message-rounded-edit:before { + content: "\eadb"; +} + +.bx-message-rounded-error:before { + content: "\eadc"; +} + +.bx-message-rounded-minus:before { + content: "\eadd"; +} + +.bx-message-rounded-x:before { + content: "\eade"; +} + +.bx-message-square:before { + content: "\eadf"; +} + +.bx-message-square-add:before { + content: "\eae0"; +} + +.bx-message-square-check:before { + content: "\eae1"; +} + +.bx-message-square-detail:before { + content: "\eae2"; +} + +.bx-message-square-dots:before { + content: "\eae3"; +} + +.bx-message-square-edit:before { + content: "\eae4"; +} + +.bx-message-square-error:before { + content: "\eae5"; +} + +.bx-message-square-minus:before { + content: "\eae6"; +} + +.bx-message-square-x:before { + content: "\eae7"; +} + +.bx-message-x:before { + content: "\eae8"; +} + +.bx-meteor:before { + content: "\eae9"; +} + +.bx-microchip:before { + content: "\eaea"; +} + +.bx-microphone:before { + content: "\eaeb"; +} + +.bx-microphone-off:before { + content: "\eaec"; +} + +.bx-minus:before { + content: "\eaed"; +} + +.bx-minus-back:before { + content: "\eaee"; +} + +.bx-minus-circle:before { + content: "\eaef"; +} + +.bx-minus-front:before { + content: "\eaf0"; +} + +.bx-mobile:before { + content: "\eaf1"; +} + +.bx-mobile-alt:before { + content: "\eaf2"; +} + +.bx-mobile-landscape:before { + content: "\eaf3"; +} + +.bx-mobile-vibration:before { + content: "\eaf4"; +} + +.bx-money:before { + content: "\eaf5"; +} + +.bx-moon:before { + content: "\eaf6"; +} + +.bx-mouse:before { + content: "\eaf7"; +} + +.bx-mouse-alt:before { + content: "\eaf8"; +} + +.bx-move:before { + content: "\eaf9"; +} + +.bx-move-horizontal:before { + content: "\eafa"; +} + +.bx-move-vertical:before { + content: "\eafb"; +} + +.bx-movie:before { + content: "\eafc"; +} + +.bx-movie-play:before { + content: "\eafd"; +} + +.bx-music:before { + content: "\eafe"; +} + +.bx-navigation:before { + content: "\eaff"; +} + +.bx-network-chart:before { + content: "\eb00"; +} + +.bx-news:before { + content: "\eb01"; +} + +.bx-no-entry:before { + content: "\eb02"; +} + +.bx-note:before { + content: "\eb03"; +} + +.bx-notepad:before { + content: "\eb04"; +} + +.bx-notification:before { + content: "\eb05"; +} + +.bx-notification-off:before { + content: "\eb06"; +} + +.bx-outline:before { + content: "\eb07"; +} + +.bx-package:before { + content: "\eb08"; +} + +.bx-paint:before { + content: "\eb09"; +} + +.bx-paint-roll:before { + content: "\eb0a"; +} + +.bx-palette:before { + content: "\eb0b"; +} + +.bx-paperclip:before { + content: "\eb0c"; +} + +.bx-paper-plane:before { + content: "\eb0d"; +} + +.bx-paragraph:before { + content: "\eb0e"; +} + +.bx-paste:before { + content: "\eb0f"; +} + +.bx-pause:before { + content: "\eb10"; +} + +.bx-pause-circle:before { + content: "\eb11"; +} + +.bx-pen:before { + content: "\eb12"; +} + +.bx-pencil:before { + content: "\eb13"; +} + +.bx-phone:before { + content: "\eb14"; +} + +.bx-phone-call:before { + content: "\eb15"; +} + +.bx-phone-incoming:before { + content: "\eb16"; +} + +.bx-phone-outgoing:before { + content: "\eb17"; +} + +.bx-photo-album:before { + content: "\eb18"; +} + +.bx-pie-chart:before { + content: "\eb19"; +} + +.bx-pie-chart-alt:before { + content: "\eb1a"; +} + +.bx-pie-chart-alt-2:before { + content: "\eb1b"; +} + +.bx-pin:before { + content: "\eb1c"; +} + +.bx-planet:before { + content: "\eb1d"; +} + +.bx-play:before { + content: "\eb1e"; +} + +.bx-play-circle:before { + content: "\eb1f"; +} + +.bx-plug:before { + content: "\eb20"; +} + +.bx-plus:before { + content: "\eb21"; +} + +.bx-plus-circle:before { + content: "\eb22"; +} + +.bx-plus-medical:before { + content: "\eb23"; +} + +.bx-pointer:before { + content: "\eb24"; +} + +.bx-poll:before { + content: "\eb25"; +} + +.bx-polygon:before { + content: "\eb26"; +} + +.bx-pound:before { + content: "\eb27"; +} + +.bx-power-off:before { + content: "\eb28"; +} + +.bx-printer:before { + content: "\eb29"; +} + +.bx-pulse:before { + content: "\eb2a"; +} + +.bx-purchase-tag:before { + content: "\eb2b"; +} + +.bx-purchase-tag-alt:before { + content: "\eb2c"; +} + +.bx-pyramid:before { + content: "\eb2d"; +} + +.bx-question-mark:before { + content: "\eb2e"; +} + +.bx-radar:before { + content: "\eb2f"; +} + +.bx-radio:before { + content: "\eb30"; +} + +.bx-radio-circle:before { + content: "\eb31"; +} + +.bx-radio-circle-marked:before { + content: "\eb32"; +} + +.bx-receipt:before { + content: "\eb33"; +} + +.bx-rectangle:before { + content: "\eb34"; +} + +.bx-recycle:before { + content: "\eb35"; +} + +.bx-redo:before { + content: "\eb36"; +} + +.bx-refresh:before { + content: "\eb37"; +} + +.bx-rename:before { + content: "\eb38"; +} + +.bx-repeat:before { + content: "\eb39"; +} + +.bx-reply:before { + content: "\eb3a"; +} + +.bx-reply-all:before { + content: "\eb3b"; +} + +.bx-repost:before { + content: "\eb3c"; +} + +.bx-reset:before { + content: "\eb3d"; +} + +.bx-restaurant:before { + content: "\eb3e"; +} + +.bx-revision:before { + content: "\eb3f"; +} + +.bx-rewind:before { + content: "\eb40"; +} + +.bx-rewind-circle:before { + content: "\eb41"; +} + +.bx-right-arrow:before { + content: "\eb42"; +} + +.bx-right-arrow-alt:before { + content: "\eb43"; +} + +.bx-right-arrow-circle:before { + content: "\eb44"; +} + +.bx-right-down-arrow-circle:before { + content: "\eb45"; +} + +.bx-right-indent:before { + content: "\eb46"; +} + +.bx-right-top-arrow-circle:before { + content: "\eb47"; +} + +.bx-rocket:before { + content: "\eb48"; +} + +.bx-rotate-left:before { + content: "\eb49"; +} + +.bx-rotate-right:before { + content: "\eb4a"; +} + +.bx-rss:before { + content: "\eb4b"; +} + +.bx-ruble:before { + content: "\eb4c"; +} + +.bx-ruler:before { + content: "\eb4d"; +} + +.bx-run:before { + content: "\eb4e"; +} + +.bx-rupee:before { + content: "\eb4f"; +} + +.bx-sad:before { + content: "\eb50"; +} + +.bx-save:before { + content: "\eb51"; +} + +.bx-scan:before { + content: "\eb52"; +} + +.bx-screenshot:before { + content: "\eb53"; +} + +.bx-search:before { + content: "\eb54"; +} + +.bx-search-alt:before { + content: "\eb55"; +} + +.bx-search-alt-2:before { + content: "\eb56"; +} + +.bx-selection:before { + content: "\eb57"; +} + +.bx-select-multiple:before { + content: "\eb58"; +} + +.bx-send:before { + content: "\eb59"; +} + +.bx-server:before { + content: "\eb5a"; +} + +.bx-shape-circle:before { + content: "\eb5b"; +} + +.bx-shape-polygon:before { + content: "\eb5c"; +} + +.bx-shape-square:before { + content: "\eb5d"; +} + +.bx-shape-triangle:before { + content: "\eb5e"; +} + +.bx-share:before { + content: "\eb5f"; +} + +.bx-share-alt:before { + content: "\eb60"; +} + +.bx-shekel:before { + content: "\eb61"; +} + +.bx-shield:before { + content: "\eb62"; +} + +.bx-shield-alt:before { + content: "\eb63"; +} + +.bx-shield-alt-2:before { + content: "\eb64"; +} + +.bx-shield-quarter:before { + content: "\eb65"; +} + +.bx-shield-x:before { + content: "\eb66"; +} + +.bx-shocked:before { + content: "\eb67"; +} + +.bx-shopping-bag:before { + content: "\eb68"; +} + +.bx-show:before { + content: "\eb69"; +} + +.bx-show-alt:before { + content: "\eb6a"; +} + +.bx-shuffle:before { + content: "\eb6b"; +} + +.bx-sidebar:before { + content: "\eb6c"; +} + +.bx-sitemap:before { + content: "\eb6d"; +} + +.bx-skip-next:before { + content: "\eb6e"; +} + +.bx-skip-next-circle:before { + content: "\eb6f"; +} + +.bx-skip-previous:before { + content: "\eb70"; +} + +.bx-skip-previous-circle:before { + content: "\eb71"; +} + +.bx-sleepy:before { + content: "\eb72"; +} + +.bx-slider:before { + content: "\eb73"; +} + +.bx-slider-alt:before { + content: "\eb74"; +} + +.bx-slideshow:before { + content: "\eb75"; +} + +.bx-smile:before { + content: "\eb76"; +} + +.bx-sort:before { + content: "\eb77"; +} + +.bx-sort-alt-2:before { + content: "\eb78"; +} + +.bx-sort-a-z:before { + content: "\eb79"; +} + +.bx-sort-down:before { + content: "\eb7a"; +} + +.bx-sort-up:before { + content: "\eb7b"; +} + +.bx-sort-z-a:before { + content: "\eb7c"; +} + +.bx-spa:before { + content: "\eb7d"; +} + +.bx-space-bar:before { + content: "\eb7e"; +} + +.bx-spray-can:before { + content: "\eb7f"; +} + +.bx-spreadsheet:before { + content: "\eb80"; +} + +.bx-square:before { + content: "\eb81"; +} + +.bx-square-rounded:before { + content: "\eb82"; +} + +.bx-star:before { + content: "\eb83"; +} + +.bx-station:before { + content: "\eb84"; +} + +.bx-stats:before { + content: "\eb85"; +} + +.bx-sticker:before { + content: "\eb86"; +} + +.bx-stop:before { + content: "\eb87"; +} + +.bx-stop-circle:before { + content: "\eb88"; +} + +.bx-stopwatch:before { + content: "\eb89"; +} + +.bx-store:before { + content: "\eb8a"; +} + +.bx-store-alt:before { + content: "\eb8b"; +} + +.bx-street-view:before { + content: "\eb8c"; +} + +.bx-strikethrough:before { + content: "\eb8d"; +} + +.bx-subdirectory-left:before { + content: "\eb8e"; +} + +.bx-subdirectory-right:before { + content: "\eb8f"; +} + +.bx-sun:before { + content: "\eb90"; +} + +.bx-support:before { + content: "\eb91"; +} + +.bx-swim:before { + content: "\eb92"; +} + +.bx-sync:before { + content: "\eb93"; +} + +.bx-tab:before { + content: "\eb94"; +} + +.bx-table:before { + content: "\eb95"; +} + +.bx-tachometer:before { + content: "\eb96"; +} + +.bx-tag:before { + content: "\eb97"; +} + +.bx-tag-alt:before { + content: "\eb98"; +} + +.bx-target-lock:before { + content: "\eb99"; +} + +.bx-task:before { + content: "\eb9a"; +} + +.bx-task-x:before { + content: "\eb9b"; +} + +.bx-taxi:before { + content: "\eb9c"; +} + +.bx-tennis-ball:before { + content: "\eb9d"; +} + +.bx-terminal:before { + content: "\eb9e"; +} + +.bx-test-tube:before { + content: "\eb9f"; +} + +.bx-text:before { + content: "\eba0"; +} + +.bx-time:before { + content: "\eba1"; +} + +.bx-time-five:before { + content: "\eba2"; +} + +.bx-timer:before { + content: "\eba3"; +} + +.bx-tired:before { + content: "\eba4"; +} + +.bx-toggle-left:before { + content: "\eba5"; +} + +.bx-toggle-right:before { + content: "\eba6"; +} + +.bx-tone:before { + content: "\eba7"; +} + +.bx-traffic-cone:before { + content: "\eba8"; +} + +.bx-train:before { + content: "\eba9"; +} + +.bx-transfer:before { + content: "\ebaa"; +} + +.bx-transfer-alt:before { + content: "\ebab"; +} + +.bx-trash:before { + content: "\ebac"; +} + +.bx-trash-alt:before { + content: "\ebad"; +} + +.bx-trending-down:before { + content: "\ebae"; +} + +.bx-trending-up:before { + content: "\ebaf"; +} + +.bx-trim:before { + content: "\ebb0"; +} + +.bx-trip:before { + content: "\ebb1"; +} + +.bx-trophy:before { + content: "\ebb2"; +} + +.bx-tv:before { + content: "\ebb3"; +} + +.bx-underline:before { + content: "\ebb4"; +} + +.bx-undo:before { + content: "\ebb5"; +} + +.bx-unite:before { + content: "\ebb6"; +} + +.bx-unlink:before { + content: "\ebb7"; +} + +.bx-up-arrow:before { + content: "\ebb8"; +} + +.bx-up-arrow-alt:before { + content: "\ebb9"; +} + +.bx-up-arrow-circle:before { + content: "\ebba"; +} + +.bx-upload:before { + content: "\ebbb"; +} + +.bx-upside-down:before { + content: "\ebbc"; +} + +.bx-upvote:before { + content: "\ebbd"; +} + +.bx-usb:before { + content: "\ebbe"; +} + +.bx-user:before { + content: "\ebbf"; +} + +.bx-user-check:before { + content: "\ebc0"; +} + +.bx-user-circle:before { + content: "\ebc1"; +} + +.bx-user-minus:before { + content: "\ebc2"; +} + +.bx-user-pin:before { + content: "\ebc3"; +} + +.bx-user-plus:before { + content: "\ebc4"; +} + +.bx-user-voice:before { + content: "\ebc5"; +} + +.bx-user-x:before { + content: "\ebc6"; +} + +.bx-vector:before { + content: "\ebc7"; +} + +.bx-vertical-center:before { + content: "\ebc8"; +} + +.bx-vial:before { + content: "\ebc9"; +} + +.bx-video:before { + content: "\ebca"; +} + +.bx-video-off:before { + content: "\ebcb"; +} + +.bx-video-plus:before { + content: "\ebcc"; +} + +.bx-video-recording:before { + content: "\ebcd"; +} + +.bx-voicemail:before { + content: "\ebce"; +} + +.bx-volume:before { + content: "\ebcf"; +} + +.bx-volume-full:before { + content: "\ebd0"; +} + +.bx-volume-low:before { + content: "\ebd1"; +} + +.bx-volume-mute:before { + content: "\ebd2"; +} + +.bx-walk:before { + content: "\ebd3"; +} + +.bx-wallet:before { + content: "\ebd4"; +} + +.bx-wallet-alt:before { + content: "\ebd5"; +} + +.bx-water:before { + content: "\ebd6"; +} + +.bx-webcam:before { + content: "\ebd7"; +} + +.bx-wifi:before { + content: "\ebd8"; +} + +.bx-wifi-0:before { + content: "\ebd9"; +} + +.bx-wifi-1:before { + content: "\ebda"; +} + +.bx-wifi-2:before { + content: "\ebdb"; +} + +.bx-wifi-off:before { + content: "\ebdc"; +} + +.bx-wind:before { + content: "\ebdd"; +} + +.bx-window:before { + content: "\ebde"; +} + +.bx-window-alt:before { + content: "\ebdf"; +} + +.bx-window-close:before { + content: "\ebe0"; +} + +.bx-window-open:before { + content: "\ebe1"; +} + +.bx-windows:before { + content: "\ebe2"; +} + +.bx-wine:before { + content: "\ebe3"; +} + +.bx-wink-smile:before { + content: "\ebe4"; +} + +.bx-wink-tongue:before { + content: "\ebe5"; +} + +.bx-won:before { + content: "\ebe6"; +} + +.bx-world:before { + content: "\ebe7"; +} + +.bx-wrench:before { + content: "\ebe8"; +} + +.bx-x:before { + content: "\ebe9"; +} + +.bx-x-circle:before { + content: "\ebea"; +} + +.bx-yen:before { + content: "\ebeb"; +} + +.bx-zoom-in:before { + content: "\ebec"; +} + +.bx-zoom-out:before { + content: "\ebed"; +} + +.bxs-add-to-queue:before { + content: "\ebee"; +} + +.bxs-adjust:before { + content: "\ebef"; +} + +.bxs-adjust-alt:before { + content: "\ebf0"; +} + +.bxs-alarm:before { + content: "\ebf1"; +} + +.bxs-alarm-add:before { + content: "\ebf2"; +} + +.bxs-alarm-exclamation:before { + content: "\ebf3"; +} + +.bxs-alarm-off:before { + content: "\ebf4"; +} + +.bxs-alarm-snooze:before { + content: "\ebf5"; +} + +.bxs-album:before { + content: "\ebf6"; +} + +.bxs-ambulance:before { + content: "\ebf7"; +} + +.bxs-analyse:before { + content: "\ebf8"; +} + +.bxs-angry:before { + content: "\ebf9"; +} + +.bxs-arch:before { + content: "\ebfa"; +} + +.bxs-archive:before { + content: "\ebfb"; +} + +.bxs-archive-in:before { + content: "\ebfc"; +} + +.bxs-archive-out:before { + content: "\ebfd"; +} + +.bxs-area:before { + content: "\ebfe"; +} + +.bxs-arrow-from-bottom:before { + content: "\ebff"; +} + +.bxs-arrow-from-left:before { + content: "\ec00"; +} + +.bxs-arrow-from-right:before { + content: "\ec01"; +} + +.bxs-arrow-from-top:before { + content: "\ec02"; +} + +.bxs-arrow-to-bottom:before { + content: "\ec03"; +} + +.bxs-arrow-to-left:before { + content: "\ec04"; +} + +.bxs-arrow-to-right:before { + content: "\ec05"; +} + +.bxs-arrow-to-top:before { + content: "\ec06"; +} + +.bxs-award:before { + content: "\ec07"; +} + +.bxs-baby-carriage:before { + content: "\ec08"; +} + +.bxs-backpack:before { + content: "\ec09"; +} + +.bxs-badge:before { + content: "\ec0a"; +} + +.bxs-badge-check:before { + content: "\ec0b"; +} + +.bxs-badge-dollar:before { + content: "\ec0c"; +} + +.bxs-ball:before { + content: "\ec0d"; +} + +.bxs-band-aid:before { + content: "\ec0e"; +} + +.bxs-bank:before { + content: "\ec0f"; +} + +.bxs-bar-chart-alt-2:before { + content: "\ec10"; +} + +.bxs-bar-chart-square:before { + content: "\ec11"; +} + +.bxs-barcode:before { + content: "\ec12"; +} + +.bxs-baseball:before { + content: "\ec13"; +} + +.bxs-basket:before { + content: "\ec14"; +} + +.bxs-basketball:before { + content: "\ec15"; +} + +.bxs-bath:before { + content: "\ec16"; +} + +.bxs-battery:before { + content: "\ec17"; +} + +.bxs-battery-charging:before { + content: "\ec18"; +} + +.bxs-battery-full:before { + content: "\ec19"; +} + +.bxs-battery-low:before { + content: "\ec1a"; +} + +.bxs-bed:before { + content: "\ec1b"; +} + +.bxs-been-here:before { + content: "\ec1c"; +} + +.bxs-beer:before { + content: "\ec1d"; +} + +.bxs-bell:before { + content: "\ec1e"; +} + +.bxs-bell-minus:before { + content: "\ec1f"; +} + +.bxs-bell-off:before { + content: "\ec20"; +} + +.bxs-bell-plus:before { + content: "\ec21"; +} + +.bxs-bell-ring:before { + content: "\ec22"; +} + +.bxs-bible:before { + content: "\ec23"; +} + +.bxs-binoculars:before { + content: "\ec24"; +} + +.bxs-blanket:before { + content: "\ec25"; +} + +.bxs-bolt:before { + content: "\ec26"; +} + +.bxs-bolt-circle:before { + content: "\ec27"; +} + +.bxs-bomb:before { + content: "\ec28"; +} + +.bxs-bone:before { + content: "\ec29"; +} + +.bxs-bong:before { + content: "\ec2a"; +} + +.bxs-book:before { + content: "\ec2b"; +} + +.bxs-book-add:before { + content: "\ec2c"; +} + +.bxs-book-alt:before { + content: "\ec2d"; +} + +.bxs-book-bookmark:before { + content: "\ec2e"; +} + +.bxs-book-content:before { + content: "\ec2f"; +} + +.bxs-book-heart:before { + content: "\ec30"; +} + +.bxs-bookmark:before { + content: "\ec31"; +} + +.bxs-bookmark-alt:before { + content: "\ec32"; +} + +.bxs-bookmark-alt-minus:before { + content: "\ec33"; +} + +.bxs-bookmark-alt-plus:before { + content: "\ec34"; +} + +.bxs-bookmark-heart:before { + content: "\ec35"; +} + +.bxs-bookmark-minus:before { + content: "\ec36"; +} + +.bxs-bookmark-plus:before { + content: "\ec37"; +} + +.bxs-bookmarks:before { + content: "\ec38"; +} + +.bxs-bookmark-star:before { + content: "\ec39"; +} + +.bxs-book-open:before { + content: "\ec3a"; +} + +.bxs-book-reader:before { + content: "\ec3b"; +} + +.bxs-bot:before { + content: "\ec3c"; +} + +.bxs-bowling-ball:before { + content: "\ec3d"; +} + +.bxs-box:before { + content: "\ec3e"; +} + +.bxs-brain:before { + content: "\ec3f"; +} + +.bxs-briefcase:before { + content: "\ec40"; +} + +.bxs-briefcase-alt:before { + content: "\ec41"; +} + +.bxs-briefcase-alt-2:before { + content: "\ec42"; +} + +.bxs-brightness:before { + content: "\ec43"; +} + +.bxs-brightness-half:before { + content: "\ec44"; +} + +.bxs-brush:before { + content: "\ec45"; +} + +.bxs-brush-alt:before { + content: "\ec46"; +} + +.bxs-bug:before { + content: "\ec47"; +} + +.bxs-bug-alt:before { + content: "\ec48"; +} + +.bxs-building:before { + content: "\ec49"; +} + +.bxs-building-house:before { + content: "\ec4a"; +} + +.bxs-buildings:before { + content: "\ec4b"; +} + +.bxs-bulb:before { + content: "\ec4c"; +} + +.bxs-bullseye:before { + content: "\ec4d"; +} + +.bxs-buoy:before { + content: "\ec4e"; +} + +.bxs-bus:before { + content: "\ec4f"; +} + +.bxs-business:before { + content: "\ec50"; +} + +.bxs-bus-school:before { + content: "\ec51"; +} + +.bxs-cabinet:before { + content: "\ec52"; +} + +.bxs-cake:before { + content: "\ec53"; +} + +.bxs-calculator:before { + content: "\ec54"; +} + +.bxs-calendar:before { + content: "\ec55"; +} + +.bxs-calendar-alt:before { + content: "\ec56"; +} + +.bxs-calendar-check:before { + content: "\ec57"; +} + +.bxs-calendar-edit:before { + content: "\ec58"; +} + +.bxs-calendar-event:before { + content: "\ec59"; +} + +.bxs-calendar-exclamation:before { + content: "\ec5a"; +} + +.bxs-calendar-heart:before { + content: "\ec5b"; +} + +.bxs-calendar-minus:before { + content: "\ec5c"; +} + +.bxs-calendar-plus:before { + content: "\ec5d"; +} + +.bxs-calendar-star:before { + content: "\ec5e"; +} + +.bxs-calendar-week:before { + content: "\ec5f"; +} + +.bxs-calendar-x:before { + content: "\ec60"; +} + +.bxs-camera:before { + content: "\ec61"; +} + +.bxs-camera-home:before { + content: "\ec62"; +} + +.bxs-camera-movie:before { + content: "\ec63"; +} + +.bxs-camera-off:before { + content: "\ec64"; +} + +.bxs-camera-plus:before { + content: "\ec65"; +} + +.bxs-capsule:before { + content: "\ec66"; +} + +.bxs-captions:before { + content: "\ec67"; +} + +.bxs-car:before { + content: "\ec68"; +} + +.bxs-car-battery:before { + content: "\ec69"; +} + +.bxs-car-crash:before { + content: "\ec6a"; +} + +.bxs-card:before { + content: "\ec6b"; +} + +.bxs-caret-down-circle:before { + content: "\ec6c"; +} + +.bxs-caret-down-square:before { + content: "\ec6d"; +} + +.bxs-caret-left-circle:before { + content: "\ec6e"; +} + +.bxs-caret-left-square:before { + content: "\ec6f"; +} + +.bxs-caret-right-circle:before { + content: "\ec70"; +} + +.bxs-caret-right-square:before { + content: "\ec71"; +} + +.bxs-caret-up-circle:before { + content: "\ec72"; +} + +.bxs-caret-up-square:before { + content: "\ec73"; +} + +.bxs-car-garage:before { + content: "\ec74"; +} + +.bxs-car-mechanic:before { + content: "\ec75"; +} + +.bxs-carousel:before { + content: "\ec76"; +} + +.bxs-cart:before { + content: "\ec77"; +} + +.bxs-cart-add:before { + content: "\ec78"; +} + +.bxs-cart-alt:before { + content: "\ec79"; +} + +.bxs-cart-download:before { + content: "\ec7a"; +} + +.bxs-car-wash:before { + content: "\ec7b"; +} + +.bxs-category:before { + content: "\ec7c"; +} + +.bxs-category-alt:before { + content: "\ec7d"; +} + +.bxs-cctv:before { + content: "\ec7e"; +} + +.bxs-certification:before { + content: "\ec7f"; +} + +.bxs-chalkboard:before { + content: "\ec80"; +} + +.bxs-chart:before { + content: "\ec81"; +} + +.bxs-chat:before { + content: "\ec82"; +} + +.bxs-checkbox:before { + content: "\ec83"; +} + +.bxs-checkbox-checked:before { + content: "\ec84"; +} + +.bxs-check-circle:before { + content: "\ec85"; +} + +.bxs-check-shield:before { + content: "\ec86"; +} + +.bxs-check-square:before { + content: "\ec87"; +} + +.bxs-chess:before { + content: "\ec88"; +} + +.bxs-chevron-down:before { + content: "\ec89"; +} + +.bxs-chevron-down-circle:before { + content: "\ec8a"; +} + +.bxs-chevron-down-square:before { + content: "\ec8b"; +} + +.bxs-chevron-left:before { + content: "\ec8c"; +} + +.bxs-chevron-left-circle:before { + content: "\ec8d"; +} + +.bxs-chevron-left-square:before { + content: "\ec8e"; +} + +.bxs-chevron-right:before { + content: "\ec8f"; +} + +.bxs-chevron-right-circle:before { + content: "\ec90"; +} + +.bxs-chevron-right-square:before { + content: "\ec91"; +} + +.bxs-chevrons-down:before { + content: "\ec92"; +} + +.bxs-chevrons-left:before { + content: "\ec93"; +} + +.bxs-chevrons-right:before { + content: "\ec94"; +} + +.bxs-chevrons-up:before { + content: "\ec95"; +} + +.bxs-chevron-up:before { + content: "\ec96"; +} + +.bxs-chevron-up-circle:before { + content: "\ec97"; +} + +.bxs-chevron-up-square:before { + content: "\ec98"; +} + +.bxs-chip:before { + content: "\ec99"; +} + +.bxs-church:before { + content: "\ec9a"; +} + +.bxs-circle:before { + content: "\ec9b"; +} + +.bxs-city:before { + content: "\ec9c"; +} + +.bxs-clinic:before { + content: "\ec9d"; +} + +.bxs-cloud:before { + content: "\ec9e"; +} + +.bxs-cloud-download:before { + content: "\ec9f"; +} + +.bxs-cloud-lightning:before { + content: "\eca0"; +} + +.bxs-cloud-rain:before { + content: "\eca1"; +} + +.bxs-cloud-upload:before { + content: "\eca2"; +} + +.bxs-coffee:before { + content: "\eca3"; +} + +.bxs-coffee-alt:before { + content: "\eca4"; +} + +.bxs-coffee-togo:before { + content: "\eca5"; +} + +.bxs-cog:before { + content: "\eca6"; +} + +.bxs-coin:before { + content: "\eca7"; +} + +.bxs-coin-stack:before { + content: "\eca8"; +} + +.bxs-collection:before { + content: "\eca9"; +} + +.bxs-color-fill:before { + content: "\ecaa"; +} + +.bxs-comment:before { + content: "\ecab"; +} + +.bxs-comment-add:before { + content: "\ecac"; +} + +.bxs-comment-check:before { + content: "\ecad"; +} + +.bxs-comment-detail:before { + content: "\ecae"; +} + +.bxs-comment-dots:before { + content: "\ecaf"; +} + +.bxs-comment-edit:before { + content: "\ecb0"; +} + +.bxs-comment-error:before { + content: "\ecb1"; +} + +.bxs-comment-minus:before { + content: "\ecb2"; +} + +.bxs-comment-x:before { + content: "\ecb3"; +} + +.bxs-compass:before { + content: "\ecb4"; +} + +.bxs-component:before { + content: "\ecb5"; +} + +.bxs-confused:before { + content: "\ecb6"; +} + +.bxs-contact:before { + content: "\ecb7"; +} + +.bxs-conversation:before { + content: "\ecb8"; +} + +.bxs-cookie:before { + content: "\ecb9"; +} + +.bxs-cool:before { + content: "\ecba"; +} + +.bxs-copy:before { + content: "\ecbb"; +} + +.bxs-copy-alt:before { + content: "\ecbc"; +} + +.bxs-copyright:before { + content: "\ecbd"; +} + +.bxs-coupon:before { + content: "\ecbe"; +} + +.bxs-credit-card:before { + content: "\ecbf"; +} + +.bxs-credit-card-alt:before { + content: "\ecc0"; +} + +.bxs-credit-card-front:before { + content: "\ecc1"; +} + +.bxs-crop:before { + content: "\ecc2"; +} + +.bxs-crown:before { + content: "\ecc3"; +} + +.bxs-cube:before { + content: "\ecc4"; +} + +.bxs-cube-alt:before { + content: "\ecc5"; +} + +.bxs-cuboid:before { + content: "\ecc6"; +} + +.bxs-customize:before { + content: "\ecc7"; +} + +.bxs-cylinder:before { + content: "\ecc8"; +} + +.bxs-dashboard:before { + content: "\ecc9"; +} + +.bxs-data:before { + content: "\ecca"; +} + +.bxs-detail:before { + content: "\eccb"; +} + +.bxs-devices:before { + content: "\eccc"; +} + +.bxs-diamond:before { + content: "\eccd"; +} + +.bxs-dice-1:before { + content: "\ecce"; +} + +.bxs-dice-2:before { + content: "\eccf"; +} + +.bxs-dice-3:before { + content: "\ecd0"; +} + +.bxs-dice-4:before { + content: "\ecd1"; +} + +.bxs-dice-5:before { + content: "\ecd2"; +} + +.bxs-dice-6:before { + content: "\ecd3"; +} + +.bxs-direction-left:before { + content: "\ecd4"; +} + +.bxs-direction-right:before { + content: "\ecd5"; +} + +.bxs-directions:before { + content: "\ecd6"; +} + +.bxs-disc:before { + content: "\ecd7"; +} + +.bxs-discount:before { + content: "\ecd8"; +} + +.bxs-dish:before { + content: "\ecd9"; +} + +.bxs-dislike:before { + content: "\ecda"; +} + +.bxs-dizzy:before { + content: "\ecdb"; +} + +.bxs-dock-bottom:before { + content: "\ecdc"; +} + +.bxs-dock-left:before { + content: "\ecdd"; +} + +.bxs-dock-right:before { + content: "\ecde"; +} + +.bxs-dock-top:before { + content: "\ecdf"; +} + +.bxs-dollar-circle:before { + content: "\ece0"; +} + +.bxs-donate-blood:before { + content: "\ece1"; +} + +.bxs-donate-heart:before { + content: "\ece2"; +} + +.bxs-door-open:before { + content: "\ece3"; +} + +.bxs-doughnut-chart:before { + content: "\ece4"; +} + +.bxs-down-arrow:before { + content: "\ece5"; +} + +.bxs-down-arrow-alt:before { + content: "\ece6"; +} + +.bxs-down-arrow-circle:before { + content: "\ece7"; +} + +.bxs-down-arrow-square:before { + content: "\ece8"; +} + +.bxs-download:before { + content: "\ece9"; +} + +.bxs-downvote:before { + content: "\ecea"; +} + +.bxs-drink:before { + content: "\eceb"; +} + +.bxs-droplet:before { + content: "\ecec"; +} + +.bxs-droplet-half:before { + content: "\eced"; +} + +.bxs-dryer:before { + content: "\ecee"; +} + +.bxs-duplicate:before { + content: "\ecef"; +} + +.bxs-edit:before { + content: "\ecf0"; +} + +.bxs-edit-alt:before { + content: "\ecf1"; +} + +.bxs-edit-location:before { + content: "\ecf2"; +} + +.bxs-eject:before { + content: "\ecf3"; +} + +.bxs-envelope:before { + content: "\ecf4"; +} + +.bxs-envelope-open:before { + content: "\ecf5"; +} + +.bxs-eraser:before { + content: "\ecf6"; +} + +.bxs-error:before { + content: "\ecf7"; +} + +.bxs-error-alt:before { + content: "\ecf8"; +} + +.bxs-error-circle:before { + content: "\ecf9"; +} + +.bxs-ev-station:before { + content: "\ecfa"; +} + +.bxs-exit:before { + content: "\ecfb"; +} + +.bxs-extension:before { + content: "\ecfc"; +} + +.bxs-eyedropper:before { + content: "\ecfd"; +} + +.bxs-face:before { + content: "\ecfe"; +} + +.bxs-face-mask:before { + content: "\ecff"; +} + +.bxs-factory:before { + content: "\ed00"; +} + +.bxs-fast-forward-circle:before { + content: "\ed01"; +} + +.bxs-file:before { + content: "\ed02"; +} + +.bxs-file-archive:before { + content: "\ed03"; +} + +.bxs-file-blank:before { + content: "\ed04"; +} + +.bxs-file-css:before { + content: "\ed05"; +} + +.bxs-file-doc:before { + content: "\ed06"; +} + +.bxs-file-export:before { + content: "\ed07"; +} + +.bxs-file-find:before { + content: "\ed08"; +} + +.bxs-file-gif:before { + content: "\ed09"; +} + +.bxs-file-html:before { + content: "\ed0a"; +} + +.bxs-file-image:before { + content: "\ed0b"; +} + +.bxs-file-import:before { + content: "\ed0c"; +} + +.bxs-file-jpg:before { + content: "\ed0d"; +} + +.bxs-file-js:before { + content: "\ed0e"; +} + +.bxs-file-json:before { + content: "\ed0f"; +} + +.bxs-file-md:before { + content: "\ed10"; +} + +.bxs-file-pdf:before { + content: "\ed11"; +} + +.bxs-file-plus:before { + content: "\ed12"; +} + +.bxs-file-png:before { + content: "\ed13"; +} + +.bxs-file-txt:before { + content: "\ed14"; +} + +.bxs-film:before { + content: "\ed15"; +} + +.bxs-filter-alt:before { + content: "\ed16"; +} + +.bxs-first-aid:before { + content: "\ed17"; +} + +.bxs-flag:before { + content: "\ed18"; +} + +.bxs-flag-alt:before { + content: "\ed19"; +} + +.bxs-flag-checkered:before { + content: "\ed1a"; +} + +.bxs-flame:before { + content: "\ed1b"; +} + +.bxs-flask:before { + content: "\ed1c"; +} + +.bxs-florist:before { + content: "\ed1d"; +} + +.bxs-folder:before { + content: "\ed1e"; +} + +.bxs-folder-minus:before { + content: "\ed1f"; +} + +.bxs-folder-open:before { + content: "\ed20"; +} + +.bxs-folder-plus:before { + content: "\ed21"; +} + +.bxs-food-menu:before { + content: "\ed22"; +} + +.bxs-fridge:before { + content: "\ed23"; +} + +.bxs-game:before { + content: "\ed24"; +} + +.bxs-gas-pump:before { + content: "\ed25"; +} + +.bxs-ghost:before { + content: "\ed26"; +} + +.bxs-gift:before { + content: "\ed27"; +} + +.bxs-graduation:before { + content: "\ed28"; +} + +.bxs-grid:before { + content: "\ed29"; +} + +.bxs-grid-alt:before { + content: "\ed2a"; +} + +.bxs-group:before { + content: "\ed2b"; +} + +.bxs-guitar-amp:before { + content: "\ed2c"; +} + +.bxs-hand-down:before { + content: "\ed2d"; +} + +.bxs-hand-left:before { + content: "\ed2e"; +} + +.bxs-hand-right:before { + content: "\ed2f"; +} + +.bxs-hand-up:before { + content: "\ed30"; +} + +.bxs-happy:before { + content: "\ed31"; +} + +.bxs-happy-alt:before { + content: "\ed32"; +} + +.bxs-happy-beaming:before { + content: "\ed33"; +} + +.bxs-happy-heart-eyes:before { + content: "\ed34"; +} + +.bxs-hdd:before { + content: "\ed35"; +} + +.bxs-heart:before { + content: "\ed36"; +} + +.bxs-heart-circle:before { + content: "\ed37"; +} + +.bxs-heart-square:before { + content: "\ed38"; +} + +.bxs-help-circle:before { + content: "\ed39"; +} + +.bxs-hide:before { + content: "\ed3a"; +} + +.bxs-home:before { + content: "\ed3b"; +} + +.bxs-home-circle:before { + content: "\ed3c"; +} + +.bxs-home-heart:before { + content: "\ed3d"; +} + +.bxs-home-smile:before { + content: "\ed3e"; +} + +.bxs-hot:before { + content: "\ed3f"; +} + +.bxs-hotel:before { + content: "\ed40"; +} + +.bxs-hourglass:before { + content: "\ed41"; +} + +.bxs-hourglass-bottom:before { + content: "\ed42"; +} + +.bxs-hourglass-top:before { + content: "\ed43"; +} + +.bxs-id-card:before { + content: "\ed44"; +} + +.bxs-image:before { + content: "\ed45"; +} + +.bxs-image-add:before { + content: "\ed46"; +} + +.bxs-image-alt:before { + content: "\ed47"; +} + +.bxs-inbox:before { + content: "\ed48"; +} + +.bxs-info-circle:before { + content: "\ed49"; +} + +.bxs-info-square:before { + content: "\ed4a"; +} + +.bxs-institution:before { + content: "\ed4b"; +} + +.bxs-joystick:before { + content: "\ed4c"; +} + +.bxs-joystick-alt:before { + content: "\ed4d"; +} + +.bxs-joystick-button:before { + content: "\ed4e"; +} + +.bxs-key:before { + content: "\ed4f"; +} + +.bxs-keyboard:before { + content: "\ed50"; +} + +.bxs-label:before { + content: "\ed51"; +} + +.bxs-landmark:before { + content: "\ed52"; +} + +.bxs-landscape:before { + content: "\ed53"; +} + +.bxs-laugh:before { + content: "\ed54"; +} + +.bxs-layer:before { + content: "\ed55"; +} + +.bxs-layer-minus:before { + content: "\ed56"; +} + +.bxs-layer-plus:before { + content: "\ed57"; +} + +.bxs-layout:before { + content: "\ed58"; +} + +.bxs-left-arrow:before { + content: "\ed59"; +} + +.bxs-left-arrow-alt:before { + content: "\ed5a"; +} + +.bxs-left-arrow-circle:before { + content: "\ed5b"; +} + +.bxs-left-arrow-square:before { + content: "\ed5c"; +} + +.bxs-left-down-arrow-circle:before { + content: "\ed5d"; +} + +.bxs-left-top-arrow-circle:before { + content: "\ed5e"; +} + +.bxs-like:before { + content: "\ed5f"; +} + +.bxs-location-plus:before { + content: "\ed60"; +} + +.bxs-lock:before { + content: "\ed61"; +} + +.bxs-lock-alt:before { + content: "\ed62"; +} + +.bxs-lock-open:before { + content: "\ed63"; +} + +.bxs-lock-open-alt:before { + content: "\ed64"; +} + +.bxs-log-in:before { + content: "\ed65"; +} + +.bxs-log-in-circle:before { + content: "\ed66"; +} + +.bxs-log-out:before { + content: "\ed67"; +} + +.bxs-log-out-circle:before { + content: "\ed68"; +} + +.bxs-low-vision:before { + content: "\ed69"; +} + +.bxs-magic-wand:before { + content: "\ed6a"; +} + +.bxs-magnet:before { + content: "\ed6b"; +} + +.bxs-map:before { + content: "\ed6c"; +} + +.bxs-map-alt:before { + content: "\ed6d"; +} + +.bxs-map-pin:before { + content: "\ed6e"; +} + +.bxs-mask:before { + content: "\ed6f"; +} + +.bxs-medal:before { + content: "\ed70"; +} + +.bxs-megaphone:before { + content: "\ed71"; +} + +.bxs-meh:before { + content: "\ed72"; +} + +.bxs-meh-alt:before { + content: "\ed73"; +} + +.bxs-meh-blank:before { + content: "\ed74"; +} + +.bxs-memory-card:before { + content: "\ed75"; +} + +.bxs-message:before { + content: "\ed76"; +} + +.bxs-message-add:before { + content: "\ed77"; +} + +.bxs-message-alt:before { + content: "\ed78"; +} + +.bxs-message-alt-add:before { + content: "\ed79"; +} + +.bxs-message-alt-check:before { + content: "\ed7a"; +} + +.bxs-message-alt-detail:before { + content: "\ed7b"; +} + +.bxs-message-alt-dots:before { + content: "\ed7c"; +} + +.bxs-message-alt-edit:before { + content: "\ed7d"; +} + +.bxs-message-alt-error:before { + content: "\ed7e"; +} + +.bxs-message-alt-minus:before { + content: "\ed7f"; +} + +.bxs-message-alt-x:before { + content: "\ed80"; +} + +.bxs-message-check:before { + content: "\ed81"; +} + +.bxs-message-detail:before { + content: "\ed82"; +} + +.bxs-message-dots:before { + content: "\ed83"; +} + +.bxs-message-edit:before { + content: "\ed84"; +} + +.bxs-message-error:before { + content: "\ed85"; +} + +.bxs-message-minus:before { + content: "\ed86"; +} + +.bxs-message-rounded:before { + content: "\ed87"; +} + +.bxs-message-rounded-add:before { + content: "\ed88"; +} + +.bxs-message-rounded-check:before { + content: "\ed89"; +} + +.bxs-message-rounded-detail:before { + content: "\ed8a"; +} + +.bxs-message-rounded-dots:before { + content: "\ed8b"; +} + +.bxs-message-rounded-edit:before { + content: "\ed8c"; +} + +.bxs-message-rounded-error:before { + content: "\ed8d"; +} + +.bxs-message-rounded-minus:before { + content: "\ed8e"; +} + +.bxs-message-rounded-x:before { + content: "\ed8f"; +} + +.bxs-message-square:before { + content: "\ed90"; +} + +.bxs-message-square-add:before { + content: "\ed91"; +} + +.bxs-message-square-check:before { + content: "\ed92"; +} + +.bxs-message-square-detail:before { + content: "\ed93"; +} + +.bxs-message-square-dots:before { + content: "\ed94"; +} + +.bxs-message-square-edit:before { + content: "\ed95"; +} + +.bxs-message-square-error:before { + content: "\ed96"; +} + +.bxs-message-square-minus:before { + content: "\ed97"; +} + +.bxs-message-square-x:before { + content: "\ed98"; +} + +.bxs-message-x:before { + content: "\ed99"; +} + +.bxs-meteor:before { + content: "\ed9a"; +} + +.bxs-microchip:before { + content: "\ed9b"; +} + +.bxs-microphone:before { + content: "\ed9c"; +} + +.bxs-microphone-alt:before { + content: "\ed9d"; +} + +.bxs-microphone-off:before { + content: "\ed9e"; +} + +.bxs-minus-circle:before { + content: "\ed9f"; +} + +.bxs-minus-square:before { + content: "\eda0"; +} + +.bxs-mobile:before { + content: "\eda1"; +} + +.bxs-mobile-vibration:before { + content: "\eda2"; +} + +.bxs-moon:before { + content: "\eda3"; +} + +.bxs-mouse:before { + content: "\eda4"; +} + +.bxs-mouse-alt:before { + content: "\eda5"; +} + +.bxs-movie:before { + content: "\eda6"; +} + +.bxs-movie-play:before { + content: "\eda7"; +} + +.bxs-music:before { + content: "\eda8"; +} + +.bxs-navigation:before { + content: "\eda9"; +} + +.bxs-network-chart:before { + content: "\edaa"; +} + +.bxs-news:before { + content: "\edab"; +} + +.bxs-no-entry:before { + content: "\edac"; +} + +.bxs-note:before { + content: "\edad"; +} + +.bxs-notepad:before { + content: "\edae"; +} + +.bxs-notification:before { + content: "\edaf"; +} + +.bxs-notification-off:before { + content: "\edb0"; +} + +.bxs-offer:before { + content: "\edb1"; +} + +.bxs-package:before { + content: "\edb2"; +} + +.bxs-paint:before { + content: "\edb3"; +} + +.bxs-paint-roll:before { + content: "\edb4"; +} + +.bxs-palette:before { + content: "\edb5"; +} + +.bxs-paper-plane:before { + content: "\edb6"; +} + +.bxs-parking:before { + content: "\edb7"; +} + +.bxs-paste:before { + content: "\edb8"; +} + +.bxs-pen:before { + content: "\edb9"; +} + +.bxs-pencil:before { + content: "\edba"; +} + +.bxs-phone:before { + content: "\edbb"; +} + +.bxs-phone-call:before { + content: "\edbc"; +} + +.bxs-phone-incoming:before { + content: "\edbd"; +} + +.bxs-phone-outgoing:before { + content: "\edbe"; +} + +.bxs-photo-album:before { + content: "\edbf"; +} + +.bxs-piano:before { + content: "\edc0"; +} + +.bxs-pie-chart:before { + content: "\edc1"; +} + +.bxs-pie-chart-alt:before { + content: "\edc2"; +} + +.bxs-pie-chart-alt-2:before { + content: "\edc3"; +} + +.bxs-pin:before { + content: "\edc4"; +} + +.bxs-pizza:before { + content: "\edc5"; +} + +.bxs-plane:before { + content: "\edc6"; +} + +.bxs-plane-alt:before { + content: "\edc7"; +} + +.bxs-plane-land:before { + content: "\edc8"; +} + +.bxs-planet:before { + content: "\edc9"; +} + +.bxs-plane-take-off:before { + content: "\edca"; +} + +.bxs-playlist:before { + content: "\edcb"; +} + +.bxs-plug:before { + content: "\edcc"; +} + +.bxs-plus-circle:before { + content: "\edcd"; +} + +.bxs-plus-square:before { + content: "\edce"; +} + +.bxs-pointer:before { + content: "\edcf"; +} + +.bxs-polygon:before { + content: "\edd0"; +} + +.bxs-printer:before { + content: "\edd1"; +} + +.bxs-purchase-tag:before { + content: "\edd2"; +} + +.bxs-purchase-tag-alt:before { + content: "\edd3"; +} + +.bxs-pyramid:before { + content: "\edd4"; +} + +.bxs-quote-alt-left:before { + content: "\edd5"; +} + +.bxs-quote-alt-right:before { + content: "\edd6"; +} + +.bxs-quote-left:before { + content: "\edd7"; +} + +.bxs-quote-right:before { + content: "\edd8"; +} + +.bxs-quote-single-left:before { + content: "\edd9"; +} + +.bxs-quote-single-right:before { + content: "\edda"; +} + +.bxs-radiation:before { + content: "\eddb"; +} + +.bxs-radio:before { + content: "\eddc"; +} + +.bxs-receipt:before { + content: "\eddd"; +} + +.bxs-rectangle:before { + content: "\edde"; +} + +.bxs-rename:before { + content: "\eddf"; +} + +.bxs-report:before { + content: "\ede0"; +} + +.bxs-rewind-circle:before { + content: "\ede1"; +} + +.bxs-right-arrow:before { + content: "\ede2"; +} + +.bxs-right-arrow-alt:before { + content: "\ede3"; +} + +.bxs-right-arrow-circle:before { + content: "\ede4"; +} + +.bxs-right-arrow-square:before { + content: "\ede5"; +} + +.bxs-right-down-arrow-circle:before { + content: "\ede6"; +} + +.bxs-right-top-arrow-circle:before { + content: "\ede7"; +} + +.bxs-rocket:before { + content: "\ede8"; +} + +.bxs-ruler:before { + content: "\ede9"; +} + +.bxs-sad:before { + content: "\edea"; +} + +.bxs-save:before { + content: "\edeb"; +} + +.bxs-school:before { + content: "\edec"; +} + +.bxs-search:before { + content: "\eded"; +} + +.bxs-search-alt-2:before { + content: "\edee"; +} + +.bxs-select-multiple:before { + content: "\edef"; +} + +.bxs-send:before { + content: "\edf0"; +} + +.bxs-server:before { + content: "\edf1"; +} + +.bxs-shapes:before { + content: "\edf2"; +} + +.bxs-share:before { + content: "\edf3"; +} + +.bxs-share-alt:before { + content: "\edf4"; +} + +.bxs-shield:before { + content: "\edf5"; +} + +.bxs-shield-alt-2:before { + content: "\edf6"; +} + +.bxs-shield-x:before { + content: "\edf7"; +} + +.bxs-ship:before { + content: "\edf8"; +} + +.bxs-shocked:before { + content: "\edf9"; +} + +.bxs-shopping-bag:before { + content: "\edfa"; +} + +.bxs-shopping-bag-alt:before { + content: "\edfb"; +} + +.bxs-shopping-bags:before { + content: "\edfc"; +} + +.bxs-show:before { + content: "\edfd"; +} + +.bxs-skip-next-circle:before { + content: "\edfe"; +} + +.bxs-skip-previous-circle:before { + content: "\edff"; +} + +.bxs-skull:before { + content: "\ee00"; +} + +.bxs-sleepy:before { + content: "\ee01"; +} + +.bxs-slideshow:before { + content: "\ee02"; +} + +.bxs-smile:before { + content: "\ee03"; +} + +.bxs-sort-alt:before { + content: "\ee04"; +} + +.bxs-spa:before { + content: "\ee05"; +} + +.bxs-spray-can:before { + content: "\ee06"; +} + +.bxs-spreadsheet:before { + content: "\ee07"; +} + +.bxs-square:before { + content: "\ee08"; +} + +.bxs-square-rounded:before { + content: "\ee09"; +} + +.bxs-star:before { + content: "\ee0a"; +} + +.bxs-star-half:before { + content: "\ee0b"; +} + +.bxs-sticker:before { + content: "\ee0c"; +} + +.bxs-stopwatch:before { + content: "\ee0d"; +} + +.bxs-store:before { + content: "\ee0e"; +} + +.bxs-store-alt:before { + content: "\ee0f"; +} + +.bxs-sun:before { + content: "\ee10"; +} + +.bxs-tachometer:before { + content: "\ee11"; +} + +.bxs-tag:before { + content: "\ee12"; +} + +.bxs-tag-alt:before { + content: "\ee13"; +} + +.bxs-tag-x:before { + content: "\ee14"; +} + +.bxs-taxi:before { + content: "\ee15"; +} + +.bxs-tennis-ball:before { + content: "\ee16"; +} + +.bxs-terminal:before { + content: "\ee17"; +} + +.bxs-thermometer:before { + content: "\ee18"; +} + +.bxs-time:before { + content: "\ee19"; +} + +.bxs-time-five:before { + content: "\ee1a"; +} + +.bxs-timer:before { + content: "\ee1b"; +} + +.bxs-tired:before { + content: "\ee1c"; +} + +.bxs-toggle-left:before { + content: "\ee1d"; +} + +.bxs-toggle-right:before { + content: "\ee1e"; +} + +.bxs-tone:before { + content: "\ee1f"; +} + +.bxs-torch:before { + content: "\ee20"; +} + +.bxs-to-top:before { + content: "\ee21"; +} + +.bxs-traffic:before { + content: "\ee22"; +} + +.bxs-traffic-barrier:before { + content: "\ee23"; +} + +.bxs-traffic-cone:before { + content: "\ee24"; +} + +.bxs-train:before { + content: "\ee25"; +} + +.bxs-trash:before { + content: "\ee26"; +} + +.bxs-trash-alt:before { + content: "\ee27"; +} + +.bxs-tree:before { + content: "\ee28"; +} + +.bxs-trophy:before { + content: "\ee29"; +} + +.bxs-truck:before { + content: "\ee2a"; +} + +.bxs-t-shirt:before { + content: "\ee2b"; +} + +.bxs-tv:before { + content: "\ee2c"; +} + +.bxs-up-arrow:before { + content: "\ee2d"; +} + +.bxs-up-arrow-alt:before { + content: "\ee2e"; +} + +.bxs-up-arrow-circle:before { + content: "\ee2f"; +} + +.bxs-up-arrow-square:before { + content: "\ee30"; +} + +.bxs-upside-down:before { + content: "\ee31"; +} + +.bxs-upvote:before { + content: "\ee32"; +} + +.bxs-user:before { + content: "\ee33"; +} + +.bxs-user-account:before { + content: "\ee34"; +} + +.bxs-user-badge:before { + content: "\ee35"; +} + +.bxs-user-check:before { + content: "\ee36"; +} + +.bxs-user-circle:before { + content: "\ee37"; +} + +.bxs-user-detail:before { + content: "\ee38"; +} + +.bxs-user-minus:before { + content: "\ee39"; +} + +.bxs-user-pin:before { + content: "\ee3a"; +} + +.bxs-user-plus:before { + content: "\ee3b"; +} + +.bxs-user-rectangle:before { + content: "\ee3c"; +} + +.bxs-user-voice:before { + content: "\ee3d"; +} + +.bxs-user-x:before { + content: "\ee3e"; +} + +.bxs-vector:before { + content: "\ee3f"; +} + +.bxs-vial:before { + content: "\ee40"; +} + +.bxs-video:before { + content: "\ee41"; +} + +.bxs-video-off:before { + content: "\ee42"; +} + +.bxs-video-plus:before { + content: "\ee43"; +} + +.bxs-video-recording:before { + content: "\ee44"; +} + +.bxs-videos:before { + content: "\ee45"; +} + +.bxs-virus:before { + content: "\ee46"; +} + +.bxs-virus-block:before { + content: "\ee47"; +} + +.bxs-volume:before { + content: "\ee48"; +} + +.bxs-volume-full:before { + content: "\ee49"; +} + +.bxs-volume-low:before { + content: "\ee4a"; +} + +.bxs-volume-mute:before { + content: "\ee4b"; +} + +.bxs-wallet:before { + content: "\ee4c"; +} + +.bxs-wallet-alt:before { + content: "\ee4d"; +} + +.bxs-washer:before { + content: "\ee4e"; +} + +.bxs-watch:before { + content: "\ee4f"; +} + +.bxs-watch-alt:before { + content: "\ee50"; +} + +.bxs-webcam:before { + content: "\ee51"; +} + +.bxs-widget:before { + content: "\ee52"; +} + +.bxs-window-alt:before { + content: "\ee53"; +} + +.bxs-wine:before { + content: "\ee54"; +} + +.bxs-wink-smile:before { + content: "\ee55"; +} + +.bxs-wink-tongue:before { + content: "\ee56"; +} + +.bxs-wrench:before { + content: "\ee57"; +} + +.bxs-x-circle:before { + content: "\ee58"; +} + +.bxs-x-square:before { + content: "\ee59"; +} + +.bxs-yin-yang:before { + content: "\ee5a"; +} + +.bxs-zap:before { + content: "\ee5b"; +} + +.bxs-zoom-in:before { + content: "\ee5c"; +} + +.bxs-zoom-out:before { + content: "\ee5d"; +} + +.bxl-500px:before { + content: "\ee5e"; +} + +.bxl-adobe:before { + content: "\ee5f"; +} + +.bxl-airbnb:before { + content: "\ee60"; +} + +.bxl-algolia:before { + content: "\ee61"; +} + +.bxl-amazon:before { + content: "\ee62"; +} + +.bxl-android:before { + content: "\ee63"; +} + +.bxl-angular:before { + content: "\ee64"; +} + +.bxl-apple:before { + content: "\ee65"; +} + +.bxl-audible:before { + content: "\ee66"; +} + +.bxl-baidu:before { + content: "\ee67"; +} + +.bxl-behance:before { + content: "\ee68"; +} + +.bxl-bing:before { + content: "\ee69"; +} + +.bxl-bitcoin:before { + content: "\ee6a"; +} + +.bxl-blender:before { + content: "\ee6b"; +} + +.bxl-blogger:before { + content: "\ee6c"; +} + +.bxl-bootstrap:before { + content: "\ee6d"; +} + +.bxl-chrome:before { + content: "\ee6e"; +} + +.bxl-codepen:before { + content: "\ee6f"; +} + +.bxl-c-plus-plus:before { + content: "\ee70"; +} + +.bxl-creative-commons:before { + content: "\ee71"; +} + +.bxl-css3:before { + content: "\ee72"; +} + +.bxl-dailymotion:before { + content: "\ee73"; +} + +.bxl-deviantart:before { + content: "\ee74"; +} + +.bxl-dev-to:before { + content: "\ee75"; +} + +.bxl-digg:before { + content: "\ee76"; +} + +.bxl-digitalocean:before { + content: "\ee77"; +} + +.bxl-discord:before { + content: "\ee78"; +} + +.bxl-discourse:before { + content: "\ee79"; +} + +.bxl-django:before { + content: "\ee7a"; +} + +.bxl-dribbble:before { + content: "\ee7b"; +} + +.bxl-dropbox:before { + content: "\ee7c"; +} + +.bxl-drupal:before { + content: "\ee7d"; +} + +.bxl-ebay:before { + content: "\ee7e"; +} + +.bxl-edge:before { + content: "\ee7f"; +} + +.bxl-etsy:before { + content: "\ee80"; +} + +.bxl-facebook:before { + content: "\ee81"; +} + +.bxl-facebook-circle:before { + content: "\ee82"; +} + +.bxl-facebook-square:before { + content: "\ee83"; +} + +.bxl-figma:before { + content: "\ee84"; +} + +.bxl-firebase:before { + content: "\ee85"; +} + +.bxl-firefox:before { + content: "\ee86"; +} + +.bxl-flickr:before { + content: "\ee87"; +} + +.bxl-flickr-square:before { + content: "\ee88"; +} + +.bxl-foursquare:before { + content: "\ee89"; +} + +.bxl-git:before { + content: "\ee8a"; +} + +.bxl-github:before { + content: "\ee8b"; +} + +.bxl-gitlab:before { + content: "\ee8c"; +} + +.bxl-google:before { + content: "\ee8d"; +} + +.bxl-google-cloud:before { + content: "\ee8e"; +} + +.bxl-google-plus:before { + content: "\ee8f"; +} + +.bxl-google-plus-circle:before { + content: "\ee90"; +} + +.bxl-html5:before { + content: "\ee91"; +} + +.bxl-imdb:before { + content: "\ee92"; +} + +.bxl-instagram:before { + content: "\ee93"; +} + +.bxl-instagram-alt:before { + content: "\ee94"; +} + +.bxl-internet-explorer:before { + content: "\ee95"; +} + +.bxl-invision:before { + content: "\ee96"; +} + +.bxl-javascript:before { + content: "\ee97"; +} + +.bxl-joomla:before { + content: "\ee98"; +} + +.bxl-jquery:before { + content: "\ee99"; +} + +.bxl-jsfiddle:before { + content: "\ee9a"; +} + +.bxl-kickstarter:before { + content: "\ee9b"; +} + +.bxl-kubernetes:before { + content: "\ee9c"; +} + +.bxl-less:before { + content: "\ee9d"; +} + +.bxl-linkedin:before { + content: "\ee9e"; +} + +.bxl-linkedin-square:before { + content: "\ee9f"; +} + +.bxl-magento:before { + content: "\eea0"; +} + +.bxl-mailchimp:before { + content: "\eea1"; +} + +.bxl-markdown:before { + content: "\eea2"; +} + +.bxl-mastercard:before { + content: "\eea3"; +} + +.bxl-medium:before { + content: "\eea4"; +} + +.bxl-medium-old:before { + content: "\eea5"; +} + +.bxl-medium-square:before { + content: "\eea6"; +} + +.bxl-messenger:before { + content: "\eea7"; +} + +.bxl-microsoft:before { + content: "\eea8"; +} + +.bxl-microsoft-teams:before { + content: "\eea9"; +} + +.bxl-nodejs:before { + content: "\eeaa"; +} + +.bxl-ok-ru:before { + content: "\eeab"; +} + +.bxl-opera:before { + content: "\eeac"; +} + +.bxl-patreon:before { + content: "\eead"; +} + +.bxl-paypal:before { + content: "\eeae"; +} + +.bxl-periscope:before { + content: "\eeaf"; +} + +.bxl-pinterest:before { + content: "\eeb0"; +} + +.bxl-pinterest-alt:before { + content: "\eeb1"; +} + +.bxl-play-store:before { + content: "\eeb2"; +} + +.bxl-pocket:before { + content: "\eeb3"; +} + +.bxl-product-hunt:before { + content: "\eeb4"; +} + +.bxl-python:before { + content: "\eeb5"; +} + +.bxl-quora:before { + content: "\eeb6"; +} + +.bxl-react:before { + content: "\eeb7"; +} + +.bxl-redbubble:before { + content: "\eeb8"; +} + +.bxl-reddit:before { + content: "\eeb9"; +} + +.bxl-redux:before { + content: "\eeba"; +} + +.bxl-sass:before { + content: "\eebb"; +} + +.bxl-shopify:before { + content: "\eebc"; +} + +.bxl-skype:before { + content: "\eebd"; +} + +.bxl-slack:before { + content: "\eebe"; +} + +.bxl-slack-old:before { + content: "\eebf"; +} + +.bxl-snapchat:before { + content: "\eec0"; +} + +.bxl-soundcloud:before { + content: "\eec1"; +} + +.bxl-spotify:before { + content: "\eec2"; +} + +.bxl-spring-boot:before { + content: "\eec3"; +} + +.bxl-squarespace:before { + content: "\eec4"; +} + +.bxl-stack-overflow:before { + content: "\eec5"; +} + +.bxl-stripe:before { + content: "\eec6"; +} + +.bxl-telegram:before { + content: "\eec7"; +} + +.bxl-trello:before { + content: "\eec8"; +} + +.bxl-tumblr:before { + content: "\eec9"; +} + +.bxl-tux:before { + content: "\eeca"; +} + +.bxl-twitch:before { + content: "\eecb"; +} + +.bxl-twitter:before { + content: "\eecc"; +} + +.bxl-unsplash:before { + content: "\eecd"; +} + +.bxl-vimeo:before { + content: "\eece"; +} + +.bxl-visa:before { + content: "\eecf"; +} + +.bxl-vk:before { + content: "\eed0"; +} + +.bxl-vuejs:before { + content: "\eed1"; +} + +.bxl-whatsapp:before { + content: "\eed2"; +} + +.bxl-whatsapp-square:before { + content: "\eed3"; +} + +.bxl-wikipedia:before { + content: "\eed4"; +} + +.bxl-windows:before { + content: "\eed5"; +} + +.bxl-wix:before { + content: "\eed6"; +} + +.bxl-wordpress:before { + content: "\eed7"; +} + +.bxl-yahoo:before { + content: "\eed8"; +} + +.bxl-yelp:before { + content: "\eed9"; +} + +.bxl-youtube:before { + content: "\eeda"; +} + +.bxl-zoom:before { + content: "\eedb"; +} + \ No newline at end of file diff --git a/packages/integration/src/styles/fonts/bxicons/boxicons.eot b/packages/integration/src/styles/fonts/bxicons/boxicons.eot new file mode 100644 index 00000000..09b170b3 Binary files /dev/null and b/packages/integration/src/styles/fonts/bxicons/boxicons.eot differ diff --git a/packages/integration/src/styles/fonts/bxicons/boxicons.svg b/packages/integration/src/styles/fonts/bxicons/boxicons.svg new file mode 100644 index 00000000..dc784e6a --- /dev/null +++ b/packages/integration/src/styles/fonts/bxicons/boxicons.svg @@ -0,0 +1,1510 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/integration/src/styles/fonts/bxicons/boxicons.ttf b/packages/integration/src/styles/fonts/bxicons/boxicons.ttf new file mode 100644 index 00000000..32834610 Binary files /dev/null and b/packages/integration/src/styles/fonts/bxicons/boxicons.ttf differ diff --git a/packages/integration/src/styles/fonts/bxicons/boxicons.woff b/packages/integration/src/styles/fonts/bxicons/boxicons.woff new file mode 100644 index 00000000..7c231050 Binary files /dev/null and b/packages/integration/src/styles/fonts/bxicons/boxicons.woff differ diff --git a/packages/integration/src/styles/fonts/bxicons/boxicons.woff2 b/packages/integration/src/styles/fonts/bxicons/boxicons.woff2 new file mode 100644 index 00000000..d4079f6f Binary files /dev/null and b/packages/integration/src/styles/fonts/bxicons/boxicons.woff2 differ diff --git a/packages/integration/src/styles/fonts/bxicons/index.css b/packages/integration/src/styles/fonts/bxicons/index.css new file mode 100644 index 00000000..f5f919da --- /dev/null +++ b/packages/integration/src/styles/fonts/bxicons/index.css @@ -0,0 +1,3 @@ +@import "boxicons.css"; +@import "animations.css"; +@import "transformations.css"; \ No newline at end of file diff --git a/packages/integration/src/styles/fonts/bxicons/transformations.css b/packages/integration/src/styles/fonts/bxicons/transformations.css new file mode 100644 index 00000000..a4634073 --- /dev/null +++ b/packages/integration/src/styles/fonts/bxicons/transformations.css @@ -0,0 +1,29 @@ +.bx-rotate-90 { + transform: rotate(90deg); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=1)'; +} + +.bx-rotate-180 { + transform: rotate(180deg); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2)'; +} + +.bx-rotate-270 { + transform: rotate(270deg); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=3)'; +} + +.bx-flip-horizontal { + transform: scaleX(-1); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)'; +} + +.bx-flip-vertical { + transform: scaleY(-1); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)'; +} diff --git a/packages/integration/src/styles/fonts/inconsolata/index.css b/packages/integration/src/styles/fonts/inconsolata/index.css new file mode 100644 index 00000000..36643be1 --- /dev/null +++ b/packages/integration/src/styles/fonts/inconsolata/index.css @@ -0,0 +1,27 @@ + +/* vietnamese */ +@font-face { + font-family: 'Inconsolata'; + font-style: normal; + font-weight: 400; + src: local('Inconsolata Regular'), local('Inconsolata-Regular'), url(https://fonts.gstatic.com/s/inconsolata/v16/QldKNThLqRwH-OJ1UHjlKGlW5qhExfHwNJU.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} + +/* latin-ext */ +@font-face { + font-family: 'Inconsolata'; + font-style: normal; + font-weight: 400; + src: local('Inconsolata Regular'), local('Inconsolata-Regular'), url(https://fonts.gstatic.com/s/inconsolata/v16/QldKNThLqRwH-OJ1UHjlKGlX5qhExfHwNJU.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +/* latin */ +@font-face { + font-family: 'Inconsolata'; + font-style: normal; + font-weight: 400; + src: local('Inconsolata Regular'), local('Inconsolata-Regular'), url(https://fonts.gstatic.com/s/inconsolata/v16/QldKNThLqRwH-OJ1UHjlKGlZ5qhExfHw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/packages/integration/src/styles/fonts/index.css b/packages/integration/src/styles/fonts/index.css new file mode 100644 index 00000000..a92aee58 --- /dev/null +++ b/packages/integration/src/styles/fonts/index.css @@ -0,0 +1,3 @@ +@import "bxicons/index.css"; +@import "inconsolata/index.css"; +@import "source-sans-pro/index.css"; diff --git a/packages/integration/src/styles/fonts/source-sans-pro/index.css b/packages/integration/src/styles/fonts/source-sans-pro/index.css new file mode 100644 index 00000000..609c56a4 --- /dev/null +++ b/packages/integration/src/styles/fonts/source-sans-pro/index.css @@ -0,0 +1,188 @@ +/* cyrillic-ext */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 300; + src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmhdu3cOWxy40.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +/* cyrillic */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 300; + src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwkxdu3cOWxy40.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +/* greek-ext */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 300; + src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmxdu3cOWxy40.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} + +/* greek */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 300; + src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlBdu3cOWxy40.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +/* vietnamese */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 300; + src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmBdu3cOWxy40.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} + +/* latin-ext */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 300; + src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmRdu3cOWxy40.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +/* latin */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 300; + src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu3cOWxw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* cyrillic-ext */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 400; + src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +/* cyrillic */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 400; + src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +/* greek-ext */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 400; + src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} + +/* greek */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 400; + src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +/* vietnamese */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 400; + src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} + +/* latin-ext */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 400; + src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +/* latin */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 400; + src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* cyrillic-ext */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 600; + src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmhdu3cOWxy40.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +/* cyrillic */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 600; + src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwkxdu3cOWxy40.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +/* greek-ext */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 600; + src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmxdu3cOWxy40.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} + +/* greek */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 600; + src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlBdu3cOWxy40.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +/* vietnamese */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 600; + src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmBdu3cOWxy40.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} + +/* latin-ext */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 600; + src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRdu3cOWxy40.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +/* latin */ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 600; + src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu3cOWxw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/packages/integration/src/styles/index.css b/packages/integration/src/styles/index.css new file mode 100644 index 00000000..25033417 --- /dev/null +++ b/packages/integration/src/styles/index.css @@ -0,0 +1,6 @@ +@import "tailwind.css"; +@import "fonts/index.css"; +@import "typography.css"; +@import "formiojs/dist/formio.full.css"; +@import "@tsed/tailwind-formio/styles/index.css"; + diff --git a/packages/integration/src/styles/tailwind.css b/packages/integration/src/styles/tailwind.css new file mode 100644 index 00000000..f42b270d --- /dev/null +++ b/packages/integration/src/styles/tailwind.css @@ -0,0 +1,2 @@ +@tailwind base; +@tailwind utilities; diff --git a/packages/integration/src/styles/typography.css b/packages/integration/src/styles/typography.css new file mode 100644 index 00000000..f5f2682f --- /dev/null +++ b/packages/integration/src/styles/typography.css @@ -0,0 +1,33 @@ +body { + font-family: Source Sans Pro, sans-serif; +} + +/* Commons styles */ +html { + box-sizing: border-box; + overflow-x: hidden; + background-color: #fff; +} + +*, +*::before, +*::after { + box-sizing: inherit; + + /* Normalization for tailwindcss border utilities */ + border-color: theme('borderColors.default', currentColor); + border-style: solid; + border-width: 0; +} + +body { + min-width: calc(300rem / 16); + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + line-height: 1.4; + min-height: 100vh; + + @apply text-gray-darker; + @apply text-base; + @apply font-sans; +} diff --git a/packages/integration/src/vite-env.d.ts b/packages/integration/src/vite-env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/packages/integration/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/integration/tailwind.config.ts b/packages/integration/tailwind.config.ts new file mode 100644 index 00000000..fa7d3a51 --- /dev/null +++ b/packages/integration/tailwind.config.ts @@ -0,0 +1,8 @@ +import { tailwindPreset } from "@tsed/tailwind-formio/tailwind.preset"; +import type { Config } from "tailwindcss"; + +export default { + content: ["../*/src/**/*.{js,jsx,ts,tsx,mdx,ejs}"], + darkMode: "class", + presets: [tailwindPreset] +} satisfies Config; diff --git a/packages/integration/tsconfig.app.json b/packages/integration/tsconfig.app.json new file mode 100644 index 00000000..d187a0c6 --- /dev/null +++ b/packages/integration/tsconfig.app.json @@ -0,0 +1,14 @@ +{ + "extends": "@tsed/typescript/tsconfig.web.json", + "compilerOptions": { + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "Bundler", + "baseUrl": ".", + "noEmit": true, + "declaration": false, + "composite": false + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "vite.config.mts", "tailwind.config.ts"], + "exclude": ["node_modules", "dist", "src/**/*.spec.ts", "src/**/*.spec.tsx"] +} diff --git a/packages/integration/tsconfig.json b/packages/integration/tsconfig.json new file mode 100644 index 00000000..94084c57 --- /dev/null +++ b/packages/integration/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "@tsed/typescript/tsconfig.web.json", + "compilerOptions": { + "baseUrl": ".", + "composite": true, + "noEmit": true + }, + "include": [], + "exclude": [], + "references": [ + { + "path": "./tsconfig.app.json" + } + ] +} diff --git a/packages/integration/vite.config.mts b/packages/integration/vite.config.mts new file mode 100644 index 00000000..9a95af47 --- /dev/null +++ b/packages/integration/vite.config.mts @@ -0,0 +1,17 @@ +import react from "@vitejs/plugin-react"; +import {defineConfig} from "vite"; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + resolve: { + conditions: [ + // "source", + "import", + "module", + "browser", + "default" + ], + alias: {} + }, +}); diff --git a/packages/react-formio-container/.eslintignore b/packages/react-formio-container/.eslintignore deleted file mode 100644 index 474be905..00000000 --- a/packages/react-formio-container/.eslintignore +++ /dev/null @@ -1,13 +0,0 @@ -**/node_modules -docs -docs-references -**/lib -**/build -**/dist -**/coverage -**/.nyc_output -**/node_modules -*-lock.json -*.lock -benchmarks.* -**/generated diff --git a/packages/react-formio-container/.eslintrc.js b/packages/react-formio-container/.eslintrc.js deleted file mode 100644 index b4dbf589..00000000 --- a/packages/react-formio-container/.eslintrc.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - extends: [require.resolve("@tsed/config/eslint/web")], - rules: { - "import/no-anonymous-default-export": 0 - } -}; diff --git a/packages/react-formio-container/coverage.json b/packages/react-formio-container/coverage.json deleted file mode 100644 index 64ee77c4..00000000 --- a/packages/react-formio-container/coverage.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "statements": 0, - "branches": 0, - "functions": 0, - "lines": 0 -} diff --git a/packages/react-formio-container/jest.config.js b/packages/react-formio-container/jest.config.js deleted file mode 100644 index fe16413a..00000000 --- a/packages/react-formio-container/jest.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - ...require("@tsed/config/jest/jest.web.config.js"), - coverageThreshold: { - global: require("./coverage.json") - } -}; diff --git a/packages/react-formio-container/package.json b/packages/react-formio-container/package.json index bb6dca86..8caabf8f 100644 --- a/packages/react-formio-container/package.json +++ b/packages/react-formio-container/package.json @@ -2,21 +2,27 @@ "name": "@tsed/react-formio-container", "description": "Provide advanced components and tools to create your own formio backoffice.", "version": "2.3.2", + "type": "module", "main": "dist/index.js", - "module": "dist/index.modern.js", - "source": "src/index.tsx", + "module": "dist/index.js", + "source": "src/index.ts", "license": "MIT", "exports": { ".": { - "import": "./dist/index.modern.js", - "require": "./dist/index.js" + "types": "./dist/index.d.ts", + "tsed-source": "./src/index.ts", + "default": "./dist/index.js" + }, + "./*": { + "types": "./dist/*.d.ts", + "tsed-source": "./src/*", + "default": "./dist/*.js" } }, "scripts": { - "test": "cross-env NODE_ENV=test jest --coverage", - "test:coverage:update": "write-coverage", - "build": "microbundle --no-compress --format modern,cjs --jsx React.createElement --jsxFragment React.Fragment --globals react/jsx-runtime=jsx", - "watch": "microbundle watch --no-compress --format modern,cjs --jsx React.createElement --jsxFragment React.Fragment --globals react/jsx-runtime=jsx" + "test": "vitest run --coverage", + "build": "vite build", + "watch": "vite watch" }, "peerDependencies": { "@formio/choices.js": "^9.0.1", @@ -25,11 +31,11 @@ "classnames": "^2.3.1", "connected-react-router": "^6.9.1", "file-saver": "^2.0.5", - "formiojs": "^4.14.13", + "formiojs": "^4.21.6", "lodash": "^4.17.21", "prop-types": "^15.8.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-is": "^17.0.1", "react-redux": "^7.2.6", "react-router": "^5.2.1", @@ -42,7 +48,9 @@ "@tsed/react-formio": "workspace:*", "@tsed/react-formio-stores": "workspace:*", "@types/file-saver": "^2.0.1", - "file-saver": "^2.0.5" + "file-saver": "^2.0.5", + "vite": "5.4.11", + "vitest": "2.1.8" }, "peerDependenciesMeta": { "choices.js": { diff --git a/packages/react-formio-container/src/formio.container.tsx b/packages/react-formio-container/src/formio.container.tsx index 53647fd4..4651fe86 100644 --- a/packages/react-formio-container/src/formio.container.tsx +++ b/packages/react-formio-container/src/formio.container.tsx @@ -1,4 +1,3 @@ -import React from "react"; import { useParams } from "react-router"; import { Route, Switch } from "react-router-dom"; diff --git a/packages/react-formio-container/src/hooks/useQuery.hook.spec.tsx b/packages/react-formio-container/src/hooks/useQuery.hook.spec.tsx index bf2a227e..1e825d94 100644 --- a/packages/react-formio-container/src/hooks/useQuery.hook.spec.tsx +++ b/packages/react-formio-container/src/hooks/useQuery.hook.spec.tsx @@ -1,5 +1,4 @@ import { fireEvent, render, screen } from "@testing-library/react"; -import React from "react"; import { useQuery } from "./useQuery.hook"; @@ -19,7 +18,7 @@ function FixtureQuery(props: any) { describe("useQueryHook", () => { it("should call onChange", () => { - const onChange = jest.fn(); + const onChange = vi.fn(); render( { }); }); it("should not call onChange", () => { - const onChange = jest.fn(); + const onChange = vi.fn(); render( extends TabsItemProps, Record { action: string; exact: boolean; - component?: React.ComponentType; + component?: ComponentType; roles?: string[]; when?(ctx: { formAction: string; auth: AuthState; form: Partial; item: FormRoute }): boolean; diff --git a/packages/react-formio-container/src/views/form.view.tsx b/packages/react-formio-container/src/views/form.view.tsx index 87a6cfb5..cf3acd1d 100644 --- a/packages/react-formio-container/src/views/form.view.tsx +++ b/packages/react-formio-container/src/views/form.view.tsx @@ -1,5 +1,4 @@ import { Alert, Loader, RemoveModal, Tabs } from "@tsed/react-formio"; -import React from "react"; import { Route, Switch, useParams } from "react-router"; import { useForm } from "../hooks/useForm.hook"; diff --git a/packages/react-formio-container/src/views/formAccess.view.tsx b/packages/react-formio-container/src/views/formAccess.view.tsx index a4ac6a3c..9631469f 100644 --- a/packages/react-formio-container/src/views/formAccess.view.tsx +++ b/packages/react-formio-container/src/views/formAccess.view.tsx @@ -1,5 +1,4 @@ import { FormAccess } from "@tsed/react-formio"; -import React from "react"; import { useForm } from "../hooks/useForm.hook"; diff --git a/packages/react-formio-container/src/views/formAction.view.tsx b/packages/react-formio-container/src/views/formAction.view.tsx index 60acccac..68708b7d 100644 --- a/packages/react-formio-container/src/views/formAction.view.tsx +++ b/packages/react-formio-container/src/views/formAction.view.tsx @@ -1,6 +1,5 @@ import { FormAction, iconClass, RemoveModal, useTooltip } from "@tsed/react-formio"; import classnames from "classnames"; -import React from "react"; import { useParams } from "react-router"; import { UseActionsProps } from "../hooks"; diff --git a/packages/react-formio-container/src/views/formActions.view.tsx b/packages/react-formio-container/src/views/formActions.view.tsx index b22e50d9..06a4d294 100644 --- a/packages/react-formio-container/src/views/formActions.view.tsx +++ b/packages/react-formio-container/src/views/formActions.view.tsx @@ -1,5 +1,4 @@ import { ActionsTable } from "@tsed/react-formio"; -import React from "react"; import { Route, Switch } from "react-router"; import { useActions, UseActionsProps } from "../hooks/useActions.hook"; diff --git a/packages/react-formio-container/src/views/formEdit.view.tsx b/packages/react-formio-container/src/views/formEdit.view.tsx index 30681a53..c4bba2f0 100644 --- a/packages/react-formio-container/src/views/formEdit.view.tsx +++ b/packages/react-formio-container/src/views/formEdit.view.tsx @@ -1,6 +1,5 @@ import { FormEdit } from "@tsed/react-formio"; import classnames from "classnames"; -import React from "react"; import { useForm } from "../hooks/useForm.hook"; diff --git a/packages/react-formio-container/src/views/formExport.view.tsx b/packages/react-formio-container/src/views/formExport.view.tsx index 0187fc3f..e41644e7 100644 --- a/packages/react-formio-container/src/views/formExport.view.tsx +++ b/packages/react-formio-container/src/views/formExport.view.tsx @@ -1,5 +1,4 @@ import { Card, iconClass } from "@tsed/react-formio"; -import React from "react"; import { UseFormProps } from "../hooks/useForm.hook"; import { useFormExport } from "../hooks/useFormExport"; diff --git a/packages/react-formio-container/src/views/formPreview.view.tsx b/packages/react-formio-container/src/views/formPreview.view.tsx index 4172a5cf..be4f0dde 100644 --- a/packages/react-formio-container/src/views/formPreview.view.tsx +++ b/packages/react-formio-container/src/views/formPreview.view.tsx @@ -1,5 +1,4 @@ import { Card, Form } from "@tsed/react-formio"; -import React from "react"; import { useForm } from "../hooks"; diff --git a/packages/react-formio-container/src/views/formSettings.view.tsx b/packages/react-formio-container/src/views/formSettings.view.tsx index 4c47c1b5..b22ca86a 100644 --- a/packages/react-formio-container/src/views/formSettings.view.tsx +++ b/packages/react-formio-container/src/views/formSettings.view.tsx @@ -1,5 +1,4 @@ import { FormSettings } from "@tsed/react-formio"; -import React from "react"; import { useForm } from "../hooks/useForm.hook"; diff --git a/packages/react-formio-container/src/views/forms.stories.tsx b/packages/react-formio-container/src/views/forms.stories.tsx index e7623f9f..1075c231 100644 --- a/packages/react-formio-container/src/views/forms.stories.tsx +++ b/packages/react-formio-container/src/views/forms.stories.tsx @@ -1,5 +1,3 @@ -import React from "react"; - import { FormsComponent } from "./forms.view"; export default { diff --git a/packages/react-formio-container/src/views/forms.view.tsx b/packages/react-formio-container/src/views/forms.view.tsx index 6768189c..e5b281d0 100644 --- a/packages/react-formio-container/src/views/forms.view.tsx +++ b/packages/react-formio-container/src/views/forms.view.tsx @@ -1,5 +1,4 @@ import { Alert, FormsTable } from "@tsed/react-formio"; -import React from "react"; import { useForms, UseFormsProps } from "../hooks/useForms.hook"; diff --git a/packages/react-formio-container/src/views/submission.view.tsx b/packages/react-formio-container/src/views/submission.view.tsx index 2af0a453..6fc795c6 100644 --- a/packages/react-formio-container/src/views/submission.view.tsx +++ b/packages/react-formio-container/src/views/submission.view.tsx @@ -1,6 +1,5 @@ import { Form, iconClass, Loader, RemoveModal, useTooltip } from "@tsed/react-formio"; import classnames from "classnames"; -import React from "react"; import { useParams } from "react-router"; import { UseFormProps } from "../hooks/useForm.hook"; diff --git a/packages/react-formio-container/src/views/submissions.stories.tsx b/packages/react-formio-container/src/views/submissions.stories.tsx index d2bf8920..2fd8f624 100644 --- a/packages/react-formio-container/src/views/submissions.stories.tsx +++ b/packages/react-formio-container/src/views/submissions.stories.tsx @@ -1,5 +1,3 @@ -import React from "react"; - import formSchema from "../__fixtures__/form-schema.json"; import formSubmissions from "../__fixtures__/form-submissions.json"; import { SubmissionsComponent } from "./submissions.view"; diff --git a/packages/react-formio-container/src/views/submissions.view.tsx b/packages/react-formio-container/src/views/submissions.view.tsx index f0ab8add..599eafb1 100644 --- a/packages/react-formio-container/src/views/submissions.view.tsx +++ b/packages/react-formio-container/src/views/submissions.view.tsx @@ -1,5 +1,4 @@ import { SubmissionsTable } from "@tsed/react-formio"; -import React from "react"; import { Route, Switch } from "react-router"; import { UseSubmissionProps } from "../hooks/useSubmission.hook"; diff --git a/packages/react-formio-container/tsconfig.app.json b/packages/react-formio-container/tsconfig.app.json new file mode 100644 index 00000000..85f0596c --- /dev/null +++ b/packages/react-formio-container/tsconfig.app.json @@ -0,0 +1,11 @@ +{ + "extends": "@tsed/typescript/tsconfig.web.json", + "compilerOptions": { + "baseUrl": ".", + "noEmit": true, + "declaration": false, + "composite": false + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "vite.config.mts"], + "exclude": ["node_modules", "dist", "src/**/*.spec.ts", "src/**/*.spec.tsx"] +} diff --git a/packages/react-formio-container/tsconfig.json b/packages/react-formio-container/tsconfig.json index 6d8ba8e4..a42fc695 100644 --- a/packages/react-formio-container/tsconfig.json +++ b/packages/react-formio-container/tsconfig.json @@ -1,15 +1,18 @@ { - "extends": "@tsed/config/tsconfig.web.json", "compilerOptions": { - "rootDir": "src" + "baseUrl": ".", + "composite": true }, - "include": ["src"], + "include": [], "references": [ { - "path": "./tsconfig.node.json" + "path": "../react-formio/tsconfig.json" }, { - "path": "../react-formio/tsconfig.json" + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.spec.json" } ] } diff --git a/packages/react-formio-container/tsconfig.node.json b/packages/react-formio-container/tsconfig.node.json deleted file mode 100644 index 8ce10716..00000000 --- a/packages/react-formio-container/tsconfig.node.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "module": "esnext", - "moduleResolution": "node" - }, - "include": [] -} diff --git a/packages/react-formio-container/tsconfig.spec.json b/packages/react-formio-container/tsconfig.spec.json new file mode 100644 index 00000000..fe01da05 --- /dev/null +++ b/packages/react-formio-container/tsconfig.spec.json @@ -0,0 +1,14 @@ +{ + "extends": "@tsed/typescript/tsconfig.web.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": ".", + "declaration": false, + "composite": false, + "noEmit": true, + "paths": {}, + "types": ["vite/client", "vitest/globals", "@testing-library/jest-dom"] + }, + "include": ["src/**/*.spec.tsx", "src/**/*.spec.ts", "vitest.config.mts"], + "exclude": ["node_modules", "dist", "coverage"] +} diff --git a/packages/react-formio-container/tsconfig.test.json b/packages/react-formio-container/tsconfig.test.json deleted file mode 100644 index 2c7b2841..00000000 --- a/packages/react-formio-container/tsconfig.test.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "module": "commonjs" - } -} diff --git a/packages/react-formio-container/vite.config.mts b/packages/react-formio-container/vite.config.mts new file mode 100644 index 00000000..13dda351 --- /dev/null +++ b/packages/react-formio-container/vite.config.mts @@ -0,0 +1,66 @@ +import {fileURLToPath} from "node:url"; + +import react from "@vitejs/plugin-react"; +import {globbySync} from "globby"; +import {extname, relative} from "path"; +import preserveDirectives from "rollup-preserve-directives"; +import {defineConfig} from "vite"; +import dts from "vite-plugin-dts"; +import {resolve} from "node:path"; +import pkg from "./package.json" with {type: "json"}; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + react(), + dts({ + tsconfigPath: "./tsconfig.app.json", + aliasesExclude: [], + include: ["src/**/*.{ts,tsx}"], + exclude: ["**/*.spec.{ts,tsx}", "**/*.stories.{ts,tsx}", "**/__*__/**"] + }) + ], + resolve: {}, + build: { + sourcemap: true, + lib: { + entry: resolve(import.meta.dirname, "src/index.ts"), + formats: ["es"] + }, + copyPublicDir: false, + rollupOptions: { + external: [ + ...Object.keys(pkg.peerDependencies || {}), + "react", + "react-dom", + "react/jsx-runtime", + /lodash\/.*/, + /formiojs\/.*/, + /@tsed\/.*/ + ], + plugins: [preserveDirectives() as any], + input: Object.fromEntries( + globbySync("src/**/*.{ts,tsx}", { + ignore: ["**/*.spec.{ts,tsx}", "**/*.stories.{ts,tsx}", "**/__*__/**"] + }).map((file) => { + return [ + // The name of the entry point + // src/nested/foo.ts becomes nested/foo + relative("src", file.slice(0, file.length - extname(file).length)), + // The absolute path to the entry file + // src/nested/foo.ts becomes /project/src/nested/foo.ts + fileURLToPath(new URL(file, import.meta.url)) + ]; + }) + ), + output: { + assetFileNames: "assets/[name][extname]", + chunkFileNames: "chunks/[name].js", + entryFileNames: "[name].js", + globals: { + react: "React" + } + } + } + } +}); diff --git a/packages/react-formio-container/vitest.config.mts b/packages/react-formio-container/vitest.config.mts new file mode 100644 index 00000000..d759e817 --- /dev/null +++ b/packages/react-formio-container/vitest.config.mts @@ -0,0 +1,21 @@ +// @ts-ignore +import {presets} from "@tsed/vitest/presets"; +import {defineConfig} from "vitest/config"; + +export default defineConfig( + { + ...presets, + test: { + ...presets.test, + coverage: { + ...presets.test.coverage, + thresholds: { + statements: 0, + branches: 0, + functions: 0, + lines: 0 + } + } + } + } +); diff --git a/packages/react-formio-stores/.eslintignore b/packages/react-formio-stores/.eslintignore deleted file mode 100644 index 474be905..00000000 --- a/packages/react-formio-stores/.eslintignore +++ /dev/null @@ -1,13 +0,0 @@ -**/node_modules -docs -docs-references -**/lib -**/build -**/dist -**/coverage -**/.nyc_output -**/node_modules -*-lock.json -*.lock -benchmarks.* -**/generated diff --git a/packages/react-formio-stores/.eslintrc.js b/packages/react-formio-stores/.eslintrc.js deleted file mode 100644 index 3d887dbf..00000000 --- a/packages/react-formio-stores/.eslintrc.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - extends: [require.resolve("@tsed/config/eslint/web")], - rules: { - "import/no-anonymous-default-export": 0, - "jsx-a11y/no-autofocus": 1 - } -}; diff --git a/packages/react-formio-stores/coverage.json b/packages/react-formio-stores/coverage.json deleted file mode 100644 index 64ee77c4..00000000 --- a/packages/react-formio-stores/coverage.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "statements": 0, - "branches": 0, - "functions": 0, - "lines": 0 -} diff --git a/packages/react-formio-stores/jest.config.js b/packages/react-formio-stores/jest.config.js deleted file mode 100644 index fe16413a..00000000 --- a/packages/react-formio-stores/jest.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - ...require("@tsed/config/jest/jest.web.config.js"), - coverageThreshold: { - global: require("./coverage.json") - } -}; diff --git a/packages/react-formio-stores/package.json b/packages/react-formio-stores/package.json index 2ac1bf34..e5205ae4 100644 --- a/packages/react-formio-stores/package.json +++ b/packages/react-formio-stores/package.json @@ -3,26 +3,24 @@ "version": "2.3.2", "description": "Provide redux stores and action around formio.js API. Written in TypeScript.", "main": "dist/index.js", - "module": "dist/index.modern.js", + "module": "dist/index.js", "source": "src/index.ts", "license": "MIT", "exports": { ".": { - "import": "./dist/index.modern.js", - "require": "./dist/index.js" + "types": "./dist/index.d.ts", + "tsed-source": "./src/index.js", + "default": "./dist/index.js" } }, "scripts": { - "test": "cross-env NODE_ENV=test jest --coverage", - "test:coverage:update": "write-coverage", - "build": "microbundle --no-compress --format modern,cjs --jsx React.createElement --jsxFragment React.Fragment --globals react/jsx-runtime=jsx", - "watch": "microbundle watch --no-compress --format modern,cjs --jsx React.createElement --jsxFragment React.Fragment --globals react/jsx-runtime=jsx" + "test": "vitest run --coverage", + "build": "vite build", + "watch": "vite watch" }, "dependencies": { "@tsed/react-formio": "workspace:*", - "@tsed/redux-utils": "workspace:*", - "eventemitter2": "^6.4.3", - "prop-types": "15.8.1" + "@tsed/redux-utils": "workspace:*" }, "peerDependencies": { "@formio/choices.js": ">=9.0.1", @@ -35,7 +33,8 @@ "tooltip.js": ">=1.3.3" }, "devDependencies": { - "@tsed/tailwind": "workspace:*", - "@tsed/tailwind-formio": "workspace:*" + "@tsed/tailwind-formio": "workspace:*", + "vite": "5.4.11", + "vitest": "2.1.8" } } diff --git a/packages/react-formio-stores/src/stores/action-info/action-info.actions.spec.ts b/packages/react-formio-stores/src/stores/action-info/action-info.actions.spec.ts index 6e7a87a4..55c97ac3 100644 --- a/packages/react-formio-stores/src/stores/action-info/action-info.actions.spec.ts +++ b/packages/react-formio-stores/src/stores/action-info/action-info.actions.spec.ts @@ -2,17 +2,33 @@ import { Formio } from "formiojs"; import { getActionInfo, receiveActionInfo, requestActionInfo } from "./action-info.actions"; -jest.mock("formiojs/Formio"); +vi.mock("formiojs", async (originalImport) => { + return { + ...(await originalImport()), + Formio: class { + static url: string; + + constructor(public url: string) { + (Formio as any).url = url; + } + + static getProjectUrl() { + return "http://localhost"; + } + + actionInfo() {} + } + }; +}); describe("ActionInfo actions", () => { describe("getAction", () => { it("should get action", async () => { const formId = "formId"; const actionType = "oidc"; - const dispatch = jest.fn(); + const dispatch = vi.fn(); - (Formio.getProjectUrl as any).mockReturnValue("http://localhost"); - (Formio.prototype.actionInfo as any).mockReturnValue({ + vi.spyOn(Formio.prototype, "actionInfo").mockReturnValue({ _id: "actionId", name: "oidc", settingsForm: { @@ -26,7 +42,7 @@ describe("ActionInfo actions", () => { type: requestActionInfo.toString(), name: "actionInfo" }); - expect(Formio).toHaveBeenCalledWith("http://localhost/formId"); + expect((Formio as any).url).toEqual("http://localhost/formId"); expect(Formio.prototype.actionInfo).toHaveBeenCalledWith("oidc"); expect(dispatch).toHaveBeenCalledWith({ type: receiveActionInfo.toString(), diff --git a/packages/react-formio-stores/src/stores/action-info/action-info.actions.ts b/packages/react-formio-stores/src/stores/action-info/action-info.actions.ts index 8d820db5..63137884 100644 --- a/packages/react-formio-stores/src/stores/action-info/action-info.actions.ts +++ b/packages/react-formio-stores/src/stores/action-info/action-info.actions.ts @@ -16,6 +16,7 @@ export const getActionInfo = dispatch(requestActionInfo(ACTION_INFO)); const url = getFormUrl(formId); + const formio = new Formio(url); try { diff --git a/packages/react-formio-stores/src/stores/action/action.actions.spec.ts b/packages/react-formio-stores/src/stores/action/action.actions.spec.ts index 5cd3c2ca..bc19b00a 100644 --- a/packages/react-formio-stores/src/stores/action/action.actions.spec.ts +++ b/packages/react-formio-stores/src/stores/action/action.actions.spec.ts @@ -12,21 +12,37 @@ import { sendAction } from "./action.actions"; -jest.mock("formiojs/Formio"); -jest.mock("../action-info"); +vi.mock("formiojs", async (originalImport) => { + return { + ...(await originalImport()), + Formio: class { + static url: string; + constructor(public url: string) { + (Formio as any).url = url; + } + static getProjectUrl() {} + loadAction() { + return; + } + saveAction() {} + deleteAction() {} + } + }; +}); +vi.mock("../action-info"); describe("Action actions", () => { beforeEach(() => { (getActionInfo as any).mockReturnValue({ type: "actionInfo" }); }); - afterEach(() => jest.resetAllMocks()); + afterEach(() => vi.resetAllMocks()); describe("getAction", () => { it("should get action", async () => { const formId = "formId"; const actionId = "actionId"; - const dispatch = jest.fn(); + const dispatch = vi.fn(); - (Formio.prototype.loadAction as any).mockReturnValue({ + vi.spyOn(Formio.prototype, "loadAction").mockReturnValue({ _id: actionId, name: "oidc" }); @@ -37,7 +53,7 @@ describe("Action actions", () => { type: requestAction.toString(), name: "action" }); - expect(Formio).toHaveBeenCalledWith("/formId/action/actionId"); + expect((Formio as any).url).toEqual("/formId/action/actionId"); expect(Formio.prototype.loadAction).toHaveBeenCalledWith(); expect(getActionInfo).toHaveBeenCalledWith("formId", "oidc"); expect(dispatch).toHaveBeenCalledWith({ type: "actionInfo" }); @@ -57,9 +73,9 @@ describe("Action actions", () => { it("should save action", async () => { const formId = "formId"; const actionId = "actionId"; - const dispatch = jest.fn(); + const dispatch = vi.fn(); - (Formio.prototype.saveAction as any).mockReturnValue({ + vi.spyOn(Formio.prototype, "saveAction").mockReturnValue({ _id: actionId }); @@ -76,7 +92,7 @@ describe("Action actions", () => { action: { _id: actionId } } }); - expect(Formio).toHaveBeenCalledWith("/formId/action"); + expect((Formio as any).url).toEqual("/formId/action"); expect(Formio.prototype.saveAction).toHaveBeenCalledWith({ _id: actionId }); @@ -95,7 +111,9 @@ describe("Action actions", () => { it("should delete action", async () => { const formId = "formId"; const actionId = "actionId"; - const dispatch = jest.fn(); + const dispatch = vi.fn(); + + vi.spyOn(Formio.prototype, "deleteAction"); await deleteAction(formId, actionId)(dispatch); @@ -103,7 +121,7 @@ describe("Action actions", () => { type: clearActionError.toString(), name: "action" }); - expect(Formio).toHaveBeenCalledWith("/formId/action/actionId"); + expect((Formio as any).url).toEqual("/formId/action/actionId"); expect(Formio.prototype.deleteAction).toHaveBeenCalledWith(); expect(dispatch).toHaveBeenCalledWith({ type: resetAction.toString(), diff --git a/packages/react-formio-stores/src/stores/action/action.actions.ts b/packages/react-formio-stores/src/stores/action/action.actions.ts index de0dd7bd..7f6f2b71 100644 --- a/packages/react-formio-stores/src/stores/action/action.actions.ts +++ b/packages/react-formio-stores/src/stores/action/action.actions.ts @@ -34,6 +34,7 @@ export const getAction = dispatch(receiveAction(ACTION, { action })); done(null, action); } catch (error) { + console.log(error); dispatch(failAction(ACTION, { error })); done(error); } diff --git a/packages/react-formio-stores/src/stores/actions/actions.actions.spec.ts b/packages/react-formio-stores/src/stores/actions/actions.actions.spec.ts index d7f3867e..9cf945be 100644 --- a/packages/react-formio-stores/src/stores/actions/actions.actions.spec.ts +++ b/packages/react-formio-stores/src/stores/actions/actions.actions.spec.ts @@ -2,22 +2,40 @@ import { Formio } from "formiojs"; import { getActions, receiveActions, requestActions, resetActions } from "./actions.actions"; -jest.mock("formiojs"); +vi.mock("formiojs", async (originalImport) => { + return { + ...(await originalImport()), + Formio: class { + static url: string; + + constructor(public url: string) { + (Formio as any).url = url; + } + + static getProjectUrl() {} + loadActions() {} + availableActions() {} + } + }; +}); describe("Actions actions", () => { + beforeEach(() => { + (Formio as any).url = undefined; + }); describe("getActions", () => { it("should return a result", async () => { const formId = "formId"; const actionId = "actionId"; - const dispatch = jest.fn(); + const dispatch = vi.fn(); - (Formio.prototype.loadActions as any).mockReturnValue([ + vi.spyOn(Formio.prototype, "loadActions").mockReturnValue([ { _id: actionId, name: "oidc" } ]); - (Formio.prototype.availableActions as any).mockReturnValue([ + vi.spyOn(Formio.prototype, "availableActions").mockReturnValue([ { name: "oidc" } @@ -34,7 +52,7 @@ describe("Actions actions", () => { name: "actions" }); - expect(Formio).toHaveBeenCalledWith("/formId"); + expect((Formio as any).url).toEqual("/formId"); expect(Formio.prototype.loadActions).toHaveBeenCalledWith({ params: {} }); diff --git a/packages/react-formio-stores/src/stores/auth/getAccess.action.spec.ts b/packages/react-formio-stores/src/stores/auth/getAccess.action.spec.ts index 26aa5ca9..91f1f65c 100644 --- a/packages/react-formio-stores/src/stores/auth/getAccess.action.spec.ts +++ b/packages/react-formio-stores/src/stores/auth/getAccess.action.spec.ts @@ -4,18 +4,18 @@ import { formAccessUser, submissionAccessUser, userForms, userRoles } from "./au import { AUTH } from "./auth.constant"; import { getAccess } from "./getAccess.action"; -jest.mock("./auth.actions"); +vi.mock("./auth.actions"); describe("getAccess()", () => { beforeEach(() => { - jest.spyOn(Formio, "makeStaticRequest"); - jest.spyOn(Formio, "getProjectUrl"); + vi.spyOn(Formio, "makeStaticRequest"); + vi.spyOn(Formio, "getProjectUrl"); }); afterEach(() => { - jest.resetAllMocks(); + vi.resetAllMocks(); }); it("should get access", async () => { - const dispatch = jest.fn(); + const dispatch = vi.fn(); const access = { roles: { administrator: { diff --git a/packages/react-formio-stores/src/stores/auth/initAuth.action.spec.ts b/packages/react-formio-stores/src/stores/auth/initAuth.action.spec.ts index 6d0ece37..e7ed661e 100644 --- a/packages/react-formio-stores/src/stores/auth/initAuth.action.spec.ts +++ b/packages/react-formio-stores/src/stores/auth/initAuth.action.spec.ts @@ -8,22 +8,22 @@ import { initAuth } from "./initAuth.action"; import { logout } from "./logout.action"; import { setUser } from "./setUser.action"; -jest.mock("./getAccess.action"); -jest.mock("./getProjectAccess.action"); -jest.mock("./setUser.action"); -jest.mock("./logout.action"); -jest.mock("./auth.actions"); +vi.mock("./getAccess.action"); +vi.mock("./getProjectAccess.action"); +vi.mock("./setUser.action"); +vi.mock("./logout.action"); +vi.mock("./auth.actions"); describe("initAuth()", () => { beforeEach(() => { - jest.spyOn(Formio, "currentUser"); + vi.spyOn(Formio, "currentUser"); }); afterEach(() => { - jest.resetAllMocks(); + vi.resetAllMocks(); }); it("should init auth", async () => { - const dispatch = jest.fn(); - const done = jest.fn(); + const dispatch = vi.fn(); + const done = vi.fn(); const user = { data: {} }; (Formio.currentUser as any).mockResolvedValue(user); @@ -38,8 +38,8 @@ describe("initAuth()", () => { expect(logout).not.toHaveBeenCalled(); }); it("should call logout when user is null", async () => { - const dispatch = jest.fn(); - const done = jest.fn(); + const dispatch = vi.fn(); + const done = vi.fn(); const user: any = null; (Formio.currentUser as any).mockResolvedValue(user); diff --git a/packages/react-formio-stores/src/stores/auth/logout.action.spec.ts b/packages/react-formio-stores/src/stores/auth/logout.action.spec.ts index 3d762708..bf7e4f00 100644 --- a/packages/react-formio-stores/src/stores/auth/logout.action.spec.ts +++ b/packages/react-formio-stores/src/stores/auth/logout.action.spec.ts @@ -4,18 +4,18 @@ import { logoutUser } from "./auth.actions"; import { AUTH } from "./auth.constant"; import { logout } from "./logout.action"; -jest.mock("./auth.actions"); -jest.mock("formiojs"); +vi.mock("./auth.actions"); +vi.mock("formiojs"); describe("logout()", () => { beforeEach(() => { - jest.spyOn(Formio, "logout"); + vi.spyOn(Formio, "logout"); }); afterEach(() => { - jest.resetAllMocks(); + vi.resetAllMocks(); }); it("should call logout", async () => { - const dispatch = jest.fn(); + const dispatch = vi.fn(); await logout()(dispatch); diff --git a/packages/react-formio-stores/src/stores/auth/setUser.action.spec.ts b/packages/react-formio-stores/src/stores/auth/setUser.action.spec.ts index 015fa23b..aa3c134f 100644 --- a/packages/react-formio-stores/src/stores/auth/setUser.action.spec.ts +++ b/packages/react-formio-stores/src/stores/auth/setUser.action.spec.ts @@ -4,17 +4,17 @@ import { receiveUser } from "./auth.actions"; import { AUTH } from "./auth.constant"; import { setUser } from "./setUser.action"; -jest.mock("./auth.actions"); +vi.mock("./auth.actions"); describe("setUser()", () => { beforeEach(() => { - jest.spyOn(Formio, "setUser"); + vi.spyOn(Formio, "setUser"); }); afterEach(() => { - jest.resetAllMocks(); + vi.resetAllMocks(); }); it("should call logout", async () => { - const dispatch = jest.fn(); + const dispatch = vi.fn(); const user = {}; await setUser(user)(dispatch); diff --git a/packages/react-formio-stores/src/stores/form/form.actions.spec.ts b/packages/react-formio-stores/src/stores/form/form.actions.spec.ts index 036105f5..3a216f23 100644 --- a/packages/react-formio-stores/src/stores/form/form.actions.spec.ts +++ b/packages/react-formio-stores/src/stores/form/form.actions.spec.ts @@ -2,20 +2,35 @@ import { Formio } from "formiojs"; import { deleteForm, failForm, getForm, receiveForm, requestForm, resetForm, saveForm, sendForm } from "./form.actions"; -jest.mock("formiojs"); +vi.mock("formiojs", async (originalImport) => { + return { + ...(await originalImport()), + Formio: class { + static url: string; + + constructor(public url: string) { + (Formio as any).url = url; + } + + static getProjectUrl() {} + loadForms() {} + loadForm() {} + saveForm() {} + deleteForm() {} + } + }; +}); describe("Form actions", () => { + beforeEach(() => { + (Formio as any).url = undefined; + }); describe("getForm", () => { - beforeEach(() => { - // @ts-ignore - Formio.mockClear(); - }); it("should return a result", async () => { // GIVEN - // @ts-ignore - Formio.prototype.loadForm.mockReturnValue(Promise.resolve({})); + vi.spyOn(Formio.prototype, "loadForm").mockResolvedValue({}); - const dispatch = jest.fn(); + const dispatch = vi.fn(); const name = "name"; const formId = "formId"; @@ -27,7 +42,7 @@ describe("Form actions", () => { await new Promise((resolve) => getForm(name, formId, resolve)(dispatch, getState)); // THEN - expect(Formio).toHaveBeenCalledWith("/formId"); + expect((Formio as any).url).toEqual("/formId"); expect(Formio.prototype.loadForm).toHaveBeenCalledWith(); expect(dispatch).toHaveBeenCalledWith({ name: "name", @@ -49,9 +64,9 @@ describe("Form actions", () => { it("should do nothing when submission is already loaded", async () => { // GIVEN // @ts-ignore - Formio.prototype.loadForm.mockReturnValue(Promise.resolve({})); + vi.spyOn(Formio.prototype, "loadForm").mockResolvedValue({}); - const dispatch = jest.fn(); + const dispatch = vi.fn(); const name = "name"; const formId = "formId"; @@ -68,14 +83,14 @@ describe("Form actions", () => { getForm(name, formId)(dispatch, getState); // THEN - expect(Formio).not.toHaveBeenCalled(); + expect((Formio as any).url).toBeUndefined(); }); it("should throw error", async () => { // GIVEN // @ts-ignore - Formio.prototype.loadForm.mockReturnValue(Promise.reject(new Error("message"))); + vi.spyOn(Formio.prototype, "loadForm").mockRejectedValue(new Error("message")); - const dispatch = jest.fn(); + const dispatch = vi.fn(); const name = "name"; const formId = "formId"; @@ -87,7 +102,7 @@ describe("Form actions", () => { await new Promise((resolve) => getForm(name, formId, resolve)(dispatch, getState)); // THEN - expect(Formio).toHaveBeenCalledWith("/formId"); + expect((Formio as any).url).toEqual("/formId"); expect(Formio.prototype.loadForm).toHaveBeenCalledWith(); expect(dispatch).toHaveBeenCalledWith({ name: "name", @@ -101,18 +116,18 @@ describe("Form actions", () => { describe("saveForm", () => { it("should return a result", async () => { // GIVEN - const dispatch = jest.fn(); + const dispatch = vi.fn(); const name = "name"; const formId = "formId"; const data = { _id: formId }; // @ts-ignore - Formio.prototype.saveForm.mockReturnValue(Promise.resolve(data)); + vi.spyOn(Formio.prototype, "saveForm").mockResolvedValue(data); // WHEN await new Promise((resolve) => saveForm(name, data, resolve)(dispatch)); // THEN - expect(Formio).toHaveBeenCalledWith("/formId"); + expect((Formio as any).url).toEqual("/formId"); expect(Formio.prototype.saveForm).toHaveBeenCalledWith(data); expect(dispatch).toHaveBeenCalledWith({ name: "name", @@ -132,10 +147,9 @@ describe("Form actions", () => { }); it("should throw error", async () => { // GIVEN - // @ts-ignore - Formio.prototype.saveForm.mockReturnValue(Promise.reject(new Error("message"))); + vi.spyOn(Formio.prototype, "saveForm").mockRejectedValue(new Error("message")); - const dispatch = jest.fn(); + const dispatch = vi.fn(); const name = "name"; const formId = "formId"; const data = { _id: formId }; @@ -144,7 +158,7 @@ describe("Form actions", () => { await new Promise((resolve) => saveForm(name, data, resolve)(dispatch)); // THEN - expect(Formio).toHaveBeenCalledWith("/formId"); + expect((Formio as any).url).toEqual("/formId"); expect(Formio.prototype.saveForm).toHaveBeenCalledWith(data); expect(dispatch).toHaveBeenCalledWith({ name: "name", @@ -159,9 +173,9 @@ describe("Form actions", () => { it("should return a result", async () => { // GIVEN // @ts-ignore - Formio.prototype.deleteForm.mockReturnValue(Promise.resolve({})); + vi.spyOn(Formio.prototype, "deleteForm").mockResolvedValue({}); - const dispatch = jest.fn(); + const dispatch = vi.fn(); const name = "name"; const formId = "formId"; @@ -169,7 +183,7 @@ describe("Form actions", () => { await new Promise((resolve) => deleteForm(name, formId, resolve)(dispatch)); // THEN - expect(Formio).toHaveBeenCalledWith("/formId"); + expect((Formio as any).url).toEqual("/formId"); expect(Formio.prototype.deleteForm).toHaveBeenCalledWith(); expect(dispatch).toHaveBeenCalledWith({ name: "name", @@ -178,10 +192,9 @@ describe("Form actions", () => { }); it("should throw error", async () => { // GIVEN - // @ts-ignore - Formio.prototype.deleteForm.mockReturnValue(Promise.reject(new Error("message"))); + vi.spyOn(Formio.prototype, "deleteForm").mockRejectedValue(new Error("message")); - const dispatch = jest.fn(); + const dispatch = vi.fn(); const name = "name"; const formId = "formId"; @@ -189,7 +202,7 @@ describe("Form actions", () => { await new Promise((resolve) => deleteForm(name, formId, resolve)(dispatch)); // THEN - expect(Formio).toHaveBeenCalledWith("/formId"); + expect((Formio as any).url).toEqual("/formId"); expect(Formio.prototype.deleteForm).toHaveBeenCalledWith(); expect(dispatch).toHaveBeenCalledWith({ name: "name", diff --git a/packages/react-formio-stores/src/stores/forms/forms.actions.spec.ts b/packages/react-formio-stores/src/stores/forms/forms.actions.spec.ts index 9c7da632..4f02eb32 100644 --- a/packages/react-formio-stores/src/stores/forms/forms.actions.spec.ts +++ b/packages/react-formio-stores/src/stores/forms/forms.actions.spec.ts @@ -3,20 +3,37 @@ import { Formio } from "formiojs"; import { mapRequestParams } from "../../utils/mapRequestParams"; import { failForms, getForms, receiveForms, requestForms } from "./forms.actions"; -jest.mock("formiojs"); -jest.mock("../../utils/mapRequestParams"); +vi.mock("formiojs", async (originalImport) => { + return { + ...(await originalImport()), + Formio: class { + static url: string; + + constructor(public url: string) { + (Formio as any).url = url; + } + + static getProjectUrl() {} + loadForms() {} + } + }; +}); +vi.mock("../../utils/mapRequestParams"); describe("Forms actions", () => { beforeEach(() => { + vi.resetAllMocks(); + (Formio as any).url = undefined; (mapRequestParams as any).mockImplementation((o: any) => o); }); - afterEach(() => jest.resetAllMocks()); + describe("getForms", () => { it("should return a result", async () => { // GIVEN - (Formio as any).prototype.loadForms.mockReturnValue(Promise.resolve([{}])); - (Formio as any).getProjectUrl.mockReturnValue("https://formio"); - const dispatch = jest.fn(); + vi.spyOn(Formio.prototype, "loadForms").mockResolvedValue([{}]); + vi.spyOn(Formio, "getProjectUrl").mockReturnValue("https://formio"); + + const dispatch = vi.fn(); const name = "name"; const parameters = { pageSize: 10, @@ -33,7 +50,7 @@ describe("Forms actions", () => { await new Promise((resolve) => getForms(name, parameters, resolve)(dispatch, getState)); // THEN - expect(Formio).toHaveBeenCalledWith("https://formio/form"); + expect((Formio as any).url).toEqual("https://formio/form"); expect(Formio.prototype.loadForms).toHaveBeenCalledWith({ params: parameters }); @@ -52,10 +69,10 @@ describe("Forms actions", () => { }); it("should return a error", async () => { // GIVEN - (Formio.prototype.loadForms as any).mockReturnValue(Promise.reject(new Error("message"))); - (Formio.getProjectUrl as any).mockReturnValue("https://formio"); + vi.spyOn(Formio.prototype, "loadForms").mockRejectedValue(new Error("message")); + vi.spyOn(Formio, "getProjectUrl").mockReturnValue("https://formio"); - const dispatch = jest.fn(); + const dispatch = vi.fn(); const name = "name"; const parameters = { pageSize: 10, @@ -72,7 +89,7 @@ describe("Forms actions", () => { await new Promise((resolve) => getForms(name, parameters, resolve)(dispatch, getState)); // THEN - expect(Formio).toHaveBeenCalledWith("https://formio/form"); + expect((Formio as any).url).toEqual("https://formio/form"); expect(Formio.prototype.loadForms).toHaveBeenCalledWith({ params: parameters }); diff --git a/packages/react-formio-stores/src/stores/submission/submission.actions.spec.ts b/packages/react-formio-stores/src/stores/submission/submission.actions.spec.ts index dcff34cb..0fc203e7 100644 --- a/packages/react-formio-stores/src/stores/submission/submission.actions.spec.ts +++ b/packages/react-formio-stores/src/stores/submission/submission.actions.spec.ts @@ -12,18 +12,35 @@ import { sendSubmission } from "./submission.actions"; -jest.mock("formiojs/Formio"); +vi.mock("formiojs", async (originalImport) => { + return { + ...(await originalImport()), + Formio: class { + static url: string; + + constructor(public url: string) { + (Formio as any).url = url; + } + + static getProjectUrl() {} + + loadSubmission() {} + saveSubmission() {} + deleteSubmission() {} + } + }; +}); describe("Submission actions", () => { + beforeEach(() => { + (Formio as any).url = undefined; + }); describe("getSubmission", () => { - beforeEach(() => { - (Formio as any).mockClear(); - }); it("should return a result", async () => { // GIVEN - (Formio as any).prototype.loadSubmission.mockReturnValue(Promise.resolve({})); + vi.spyOn(Formio.prototype, "loadSubmission").mockResolvedValue({}); - const dispatch = jest.fn(); + const dispatch = vi.fn(); const name = "name"; const id = "123454"; const formId = "formId"; @@ -36,7 +53,7 @@ describe("Submission actions", () => { await new Promise((resolve) => getSubmission(name, formId, id, resolve)(dispatch, getState)); // THEN - expect(Formio).toHaveBeenCalledWith("/formId/submission/123454"); + expect((Formio as any).url).toEqual("/formId/submission/123454"); expect(Formio.prototype.loadSubmission).toHaveBeenCalledWith(); expect(dispatch).toHaveBeenCalledWith({ name: "name", @@ -58,9 +75,9 @@ describe("Submission actions", () => { }); it("should do nothing when submission is already loaded", async () => { // GIVEN - (Formio.prototype.loadSubmission as any).mockReturnValue(Promise.resolve({})); + vi.spyOn(Formio.prototype, "loadSubmission").mockResolvedValue({}); - const dispatch = jest.fn(); + const dispatch = vi.fn(); const name = "name"; const id = "123454"; const formId = "formId"; @@ -73,13 +90,13 @@ describe("Submission actions", () => { await getSubmission(name, formId, id)(dispatch, getState); // THEN - expect(Formio).not.toHaveBeenCalled(); + expect((Formio as any).url).toBeUndefined(); }); it("should throw error", async () => { // GIVEN - (Formio.prototype.loadSubmission as any).mockReturnValue(Promise.reject(new Error("message"))); + vi.spyOn(Formio.prototype, "loadSubmission").mockRejectedValue(new Error("message")); - const dispatch = jest.fn(); + const dispatch = vi.fn(); const name = "name"; const id = "123454"; const formId = "formId"; @@ -92,7 +109,7 @@ describe("Submission actions", () => { await new Promise((resolve) => getSubmission(name, formId, id, resolve)(dispatch, getState)); // THEN - expect(Formio).toHaveBeenCalledWith("/formId/submission/123454"); + expect((Formio as any).url).toEqual("/formId/submission/123454"); expect(Formio.prototype.loadSubmission).toHaveBeenCalledWith(); expect(dispatch).toHaveBeenCalledWith({ name: "name", @@ -106,21 +123,21 @@ describe("Submission actions", () => { describe("saveSubmission", () => { it("should return a result", async () => { // GIVEN - const dispatch = jest.fn(); + const dispatch = vi.fn(); const name = "name"; const data = { _id: "123454" }; const formId = "formId"; - (Formio.prototype.saveSubmission as any).mockReturnValue(Promise.resolve(data)); + vi.spyOn(Formio.prototype, "saveSubmission").mockResolvedValue(data); // WHEN - await new Promise((resolve) => saveSubmission(name, formId, data, resolve)(dispatch)); + await new Promise((resolve) => saveSubmission(name, formId, data as never, resolve)(dispatch)); // THEN expect(dispatch).toHaveBeenCalledWith({ name: "name", type: clearSubmissionError.toString() }); - expect(Formio).toHaveBeenCalledWith("/formId/submission/123454"); + expect((Formio as any).url).toEqual("/formId/submission/123454"); expect(Formio.prototype.saveSubmission).toHaveBeenCalledWith(data); expect(dispatch).toHaveBeenCalledWith({ name: "name", @@ -141,20 +158,18 @@ describe("Submission actions", () => { }); it("should throw error", async () => { // GIVEN - (Formio.prototype.saveSubmission as any).mockImplementation(() => { - throw new Error("message"); - }); + vi.spyOn(Formio.prototype, "saveSubmission").mockRejectedValue(new Error("message")); - const dispatch = jest.fn(); + const dispatch = vi.fn(); const name = "name"; const data = { _id: "123454" }; const formId = "formId"; // WHEN - await new Promise((resolve) => saveSubmission(name, formId, data, resolve)(dispatch)); + await new Promise((resolve) => saveSubmission(name, formId, data as never, resolve)(dispatch)); // THEN - expect(Formio).toHaveBeenCalledWith("/formId/submission/123454"); + expect((Formio as any).url).toEqual("/formId/submission/123454"); expect(Formio.prototype.saveSubmission).toHaveBeenCalledWith(data); expect(dispatch).toHaveBeenCalledWith({ name: "name", @@ -168,9 +183,9 @@ describe("Submission actions", () => { describe("deleteSubmission", () => { it("should return a result", async () => { // GIVEN - (Formio.prototype.deleteSubmission as any).mockReturnValue(Promise.resolve({})); + vi.spyOn(Formio.prototype, "deleteSubmission").mockResolvedValue({}); - const dispatch = jest.fn(); + const dispatch = vi.fn(); const name = "name"; const id = "123454"; const formId = "formId"; @@ -179,7 +194,7 @@ describe("Submission actions", () => { await new Promise((resolve) => deleteSubmission(name, formId, id, resolve)(dispatch)); // THEN - expect(Formio).toHaveBeenCalledWith("/formId/submission/123454"); + expect((Formio as any).url).toEqual("/formId/submission/123454"); expect(Formio.prototype.deleteSubmission).toHaveBeenCalledWith(); expect(dispatch).toHaveBeenCalledWith({ name: "name", @@ -188,10 +203,8 @@ describe("Submission actions", () => { }); it("should throw error", async () => { // GIVEN - (Formio.prototype.deleteSubmission as any).mockImplementation(() => { - throw new Error("message"); - }); - const dispatch = jest.fn(); + vi.spyOn(Formio.prototype, "deleteSubmission").mockRejectedValue(new Error("message")); + const dispatch = vi.fn(); const name = "name"; const id = "123454"; const formId = "formId"; @@ -200,7 +213,7 @@ describe("Submission actions", () => { await new Promise((resolve) => deleteSubmission(name, formId, id, resolve)(dispatch)); // THEN - expect(Formio).toHaveBeenCalledWith("/formId/submission/123454"); + expect((Formio as any).url).toEqual("/formId/submission/123454"); expect(Formio.prototype.deleteSubmission).toHaveBeenCalledWith(); expect(dispatch).toHaveBeenCalledWith({ name: "name", diff --git a/packages/react-formio-stores/src/stores/submissions/submissions.actions.spec.ts b/packages/react-formio-stores/src/stores/submissions/submissions.actions.spec.ts index fcbaace6..d3beca4b 100644 --- a/packages/react-formio-stores/src/stores/submissions/submissions.actions.spec.ts +++ b/packages/react-formio-stores/src/stores/submissions/submissions.actions.spec.ts @@ -3,8 +3,23 @@ import { Formio } from "formiojs"; import { mapRequestParams } from "../../utils/mapRequestParams"; import { failSubmissions, getSubmissions, receiveSubmissions, requestSubmissions } from "./submissions.actions"; -jest.mock("formiojs"); -jest.mock("../../utils/mapRequestParams"); +vi.mock("formiojs", async (originalImport) => { + return { + ...(await originalImport()), + Formio: class { + static url: string; + + constructor(public url: string) { + (Formio as any).url = url; + } + + static getProjectUrl() {} + loadSubmissions() {} + availableActions() {} + } + }; +}); +vi.mock("../../utils/mapRequestParams"); describe("Submissions actions", () => { beforeEach(() => { @@ -13,10 +28,10 @@ describe("Submissions actions", () => { describe("getSubmissions", () => { it("should return a result", async () => { // GIVEN - (Formio.prototype.loadSubmissions as any).mockReturnValue(Promise.resolve([{}])); - (Formio.getProjectUrl as any).mockReturnValue("https://formio"); + vi.spyOn(Formio.prototype, "loadSubmissions").mockReturnValue(Promise.resolve([{}])); + vi.spyOn(Formio, "getProjectUrl").mockReturnValue("https://formio"); - const dispatch = jest.fn(); + const dispatch = vi.fn(); const name = "name"; const formId = "formId"; const parameters = { @@ -34,7 +49,7 @@ describe("Submissions actions", () => { await new Promise((resolve) => getSubmissions(name, formId, parameters, resolve)(dispatch, getState)); // THEN - expect(Formio).toHaveBeenCalledWith("https://formio/formId/submission"); + expect((Formio as any).url).toEqual("https://formio/formId/submission"); expect(Formio.prototype.loadSubmissions).toHaveBeenCalledWith({ params: parameters }); @@ -56,10 +71,10 @@ describe("Submissions actions", () => { }); it("should return a error", async () => { // GIVEN - (Formio.prototype.loadSubmissions as any).mockReturnValue(Promise.reject(new Error("message"))); - (Formio.getProjectUrl as any).mockReturnValue("https://formio"); + vi.spyOn(Formio.prototype, "loadSubmissions").mockRejectedValue(new Error("message")); + vi.spyOn(Formio, "getProjectUrl").mockReturnValue("https://formio"); - const dispatch = jest.fn(); + const dispatch = vi.fn(); const name = "name"; const formId = "formId"; const parameters = { @@ -77,7 +92,7 @@ describe("Submissions actions", () => { await new Promise((resolve) => getSubmissions(name, formId, parameters, resolve)(dispatch, getState)); // THEN - expect(Formio).toHaveBeenCalledWith("https://formio/formId/submission"); + expect((Formio as any).url).toEqual("https://formio/formId/submission"); expect(Formio.prototype.loadSubmissions).toHaveBeenCalledWith({ params: parameters }); diff --git a/packages/react-formio-stores/tsconfig.app.json b/packages/react-formio-stores/tsconfig.app.json new file mode 100644 index 00000000..85f0596c --- /dev/null +++ b/packages/react-formio-stores/tsconfig.app.json @@ -0,0 +1,11 @@ +{ + "extends": "@tsed/typescript/tsconfig.web.json", + "compilerOptions": { + "baseUrl": ".", + "noEmit": true, + "declaration": false, + "composite": false + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "vite.config.mts"], + "exclude": ["node_modules", "dist", "src/**/*.spec.ts", "src/**/*.spec.tsx"] +} diff --git a/packages/react-formio-stores/tsconfig.json b/packages/react-formio-stores/tsconfig.json index d189cbb5..5cdf9478 100644 --- a/packages/react-formio-stores/tsconfig.json +++ b/packages/react-formio-stores/tsconfig.json @@ -1,15 +1,18 @@ { - "extends": "@tsed/config/tsconfig.web.json", "compilerOptions": { - "rootDir": "src" + "baseUrl": ".", + "composite": true }, - "include": ["src"], + "include": [], "references": [ { - "path": "./tsconfig.node.json" + "path": "../redux-utils/tsconfig.json" }, { - "path": "../redux-utils/tsconfig.json" + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.spec.json" } ] } diff --git a/packages/react-formio-stores/tsconfig.node.json b/packages/react-formio-stores/tsconfig.node.json deleted file mode 100644 index 8ce10716..00000000 --- a/packages/react-formio-stores/tsconfig.node.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "module": "esnext", - "moduleResolution": "node" - }, - "include": [] -} diff --git a/packages/react-formio-stores/tsconfig.spec.json b/packages/react-formio-stores/tsconfig.spec.json new file mode 100644 index 00000000..804fff86 --- /dev/null +++ b/packages/react-formio-stores/tsconfig.spec.json @@ -0,0 +1,14 @@ +{ + "extends": "@tsed/typescript/tsconfig.web.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": ".", + "declaration": false, + "composite": false, + "noEmit": true, + "paths": {}, + "types": ["vite/client", "vitest/globals", "@testing-library/jest-dom"] + }, + "include": ["src/**/*.spec.ts", "test/**/*.spec.ts", "vitest.config.mts"], + "exclude": ["node_modules", "lib", "benchmark", "coverage"] +} diff --git a/packages/react-formio-stores/vite.config.mts b/packages/react-formio-stores/vite.config.mts new file mode 100644 index 00000000..3d062040 --- /dev/null +++ b/packages/react-formio-stores/vite.config.mts @@ -0,0 +1,68 @@ +import {fileURLToPath} from "node:url"; + +import react from "@vitejs/plugin-react"; +import {globbySync} from "globby"; +import {extname, relative} from "path"; +import preserveDirectives from "rollup-preserve-directives"; +import {defineConfig} from "vite"; +import dts from "vite-plugin-dts"; +import {resolve} from "node:path"; +import pkg from "./package.json" with {type: "json"}; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + react(), + dts({ + tsconfigPath: "./tsconfig.app.json", + aliasesExclude: [], + include: ["src/**/*.{ts,tsx}"], + exclude: ["**/*.spec.{ts,tsx}", "**/*.stories.{ts,tsx}", "**/__*__/**"] + }) + ], + resolve: { + alias: {} + }, + build: { + sourcemap: true, + lib: { + entry: resolve(import.meta.dirname, "src/index.ts"), + formats: ["es"] + }, + copyPublicDir: false, + rollupOptions: { + external: [ + ...Object.keys(pkg.peerDependencies || {}), + "react", + "react-dom", + "react/jsx-runtime", + /lodash\/.*/, + /formiojs\/.*/, + /@tsed\/.*/ + ], + plugins: [preserveDirectives() as any], + input: Object.fromEntries( + globbySync("src/**/*.{ts,tsx}", { + ignore: ["**/*.spec.{ts,tsx}", "**/*.stories.{ts,tsx}", "**/__*__/**"] + }).map((file) => { + return [ + // The name of the entry point + // src/nested/foo.ts becomes nested/foo + relative("src", file.slice(0, file.length - extname(file).length)), + // The absolute path to the entry file + // src/nested/foo.ts becomes /project/src/nested/foo.ts + fileURLToPath(new URL(file, import.meta.url)) + ]; + }) + ), + output: { + assetFileNames: "assets/[name][extname]", + chunkFileNames: "chunks/[name].js", + entryFileNames: "[name].js", + globals: { + react: "React" + } + } + } + } +}); diff --git a/packages/react-formio-stores/vitest.config.mts b/packages/react-formio-stores/vitest.config.mts new file mode 100644 index 00000000..d759e817 --- /dev/null +++ b/packages/react-formio-stores/vitest.config.mts @@ -0,0 +1,21 @@ +// @ts-ignore +import {presets} from "@tsed/vitest/presets"; +import {defineConfig} from "vitest/config"; + +export default defineConfig( + { + ...presets, + test: { + ...presets.test, + coverage: { + ...presets.test.coverage, + thresholds: { + statements: 0, + branches: 0, + functions: 0, + lines: 0 + } + } + } + } +); diff --git a/packages/react-formio/.eslintignore b/packages/react-formio/.eslintignore deleted file mode 100644 index 474be905..00000000 --- a/packages/react-formio/.eslintignore +++ /dev/null @@ -1,13 +0,0 @@ -**/node_modules -docs -docs-references -**/lib -**/build -**/dist -**/coverage -**/.nyc_output -**/node_modules -*-lock.json -*.lock -benchmarks.* -**/generated diff --git a/packages/react-formio/.eslintrc.js b/packages/react-formio/.eslintrc.js deleted file mode 100644 index 3d887dbf..00000000 --- a/packages/react-formio/.eslintrc.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - extends: [require.resolve("@tsed/config/eslint/web")], - rules: { - "import/no-anonymous-default-export": 0, - "jsx-a11y/no-autofocus": 1 - } -}; diff --git a/packages/react-formio/coverage.json b/packages/react-formio/coverage.json deleted file mode 100644 index 64ee77c4..00000000 --- a/packages/react-formio/coverage.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "statements": 0, - "branches": 0, - "functions": 0, - "lines": 0 -} diff --git a/packages/react-formio/jest.config.js b/packages/react-formio/jest.config.js deleted file mode 100644 index fe16413a..00000000 --- a/packages/react-formio/jest.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - ...require("@tsed/config/jest/jest.web.config.js"), - coverageThreshold: { - global: require("./coverage.json") - } -}; diff --git a/packages/react-formio/package.json b/packages/react-formio/package.json index d8c0de9d..bc0a92f3 100644 --- a/packages/react-formio/package.json +++ b/packages/react-formio/package.json @@ -2,22 +2,27 @@ "name": "@tsed/react-formio", "version": "2.3.2", "description": "Provide a react formio wrapper. Written in TypeScript.", + "type": "module", "main": "./dist/index.js", "module": "./dist/index.modern.js", "exports": { ".": { - "import": "./dist/index.modern.js", - "require": "./dist/index.js" + "types": "./dist/index.d.ts", + "tsed-source": "./src/index.ts", + "default": "./dist/index.js" + }, + "./*": { + "types": "./dist/*.d.ts", + "tsed-source": "./src/*", + "default": "./dist/*.js" } }, "source": "src/index.ts", "license": "MIT", "scripts": { - "lint:fix": "yarn lint --fix", - "test": "cross-env NODE_ENV=test jest --coverage", - "test:coverage:update": "write-coverage", - "build": "microbundle --no-compress --format modern,cjs --jsx React.createElement --jsxFragment React.Fragment --globals react/jsx-runtime=jsx", - "watch": "microbundle watch --no-compress --format modern,cjs --jsx React.createElement --jsxFragment React.Fragment --globals react/jsx-runtime=jsx" + "test": "vitest run --coverage", + "build": "vite build", + "watch": "vite build --watch" }, "dependencies": { "classnames": "^2.3.1", @@ -28,6 +33,7 @@ "@formio/choices.js": ">=9.0.1", "formiojs": ">=4.0.0", "lodash": ">=4.17.20", + "moment": ">=2.30.1", "prop-types": ">=15.7.2", "react": ">=16.14.0", "react-dnd": ">=16.0.1", @@ -37,8 +43,10 @@ "tooltip.js": ">=1.3.3" }, "devDependencies": { - "@tsed/tailwind": "workspace:*", "@tsed/tailwind-formio": "workspace:*", - "microbundle": "0.13.0" + "@tsed/typescript": "workspace:*", + "microbundle": "0.13.0", + "vite": "5.4.11", + "vitest": "2.1.8" } } diff --git a/packages/react-formio/src/components/actions-table/actionsTable.component.spec.tsx b/packages/react-formio/src/components/actions-table/actionsTable.component.spec.tsx index 8be59577..4546c854 100644 --- a/packages/react-formio/src/components/actions-table/actionsTable.component.spec.tsx +++ b/packages/react-formio/src/components/actions-table/actionsTable.component.spec.tsx @@ -1,6 +1,5 @@ import { fireEvent, render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; -import React from "react"; import availableActions from "../__fixtures__/form-actions.json"; import data from "./__fixtures__/data.json"; @@ -37,7 +36,7 @@ const args: any = { describe("ActionsTable", () => { it("should render the table actions", async () => { - const onAddAction = jest.fn(); + const onAddAction = vi.fn(); render(); @@ -54,7 +53,7 @@ describe("ActionsTable", () => { expect(options[1].innerHTML).toMatch("Webhook (Premium)"); }); it("should not call addAction when the default item is selected", async () => { - const onAddAction = jest.fn(); + const onAddAction = vi.fn(); render(); @@ -64,7 +63,7 @@ describe("ActionsTable", () => { expect(onAddAction).not.toHaveBeenCalled(); }); it("should call addAction with the selected action", async () => { - const onAddAction = jest.fn(); + const onAddAction = vi.fn(); render(); diff --git a/packages/react-formio/src/components/actions-table/actionsTable.component.tsx b/packages/react-formio/src/components/actions-table/actionsTable.component.tsx index 48f6c2a4..2193953b 100644 --- a/packages/react-formio/src/components/actions-table/actionsTable.component.tsx +++ b/packages/react-formio/src/components/actions-table/actionsTable.component.tsx @@ -1,6 +1,6 @@ import classnames from "classnames"; import noop from "lodash/noop"; -import React, { useState } from "react"; +import { useState } from "react"; import { ActionSchema } from "../../interfaces"; import { iconClass } from "../../utils/iconClass"; diff --git a/packages/react-formio/src/components/alert/alert.component.spec.tsx b/packages/react-formio/src/components/alert/alert.component.spec.tsx index a599439e..5bbe512f 100644 --- a/packages/react-formio/src/components/alert/alert.component.spec.tsx +++ b/packages/react-formio/src/components/alert/alert.component.spec.tsx @@ -1,5 +1,4 @@ import { render, screen } from "@testing-library/react"; -import React from "react"; import { Sandbox } from "./alert.stories"; diff --git a/packages/react-formio/src/components/alert/alert.component.tsx b/packages/react-formio/src/components/alert/alert.component.tsx index a7238eb3..9f3d3d09 100644 --- a/packages/react-formio/src/components/alert/alert.component.tsx +++ b/packages/react-formio/src/components/alert/alert.component.tsx @@ -1,5 +1,3 @@ -import React from "react"; - function formatError(error: any): any { if (typeof error === "string") { return error; diff --git a/packages/react-formio/src/components/alert/alert.stories.tsx b/packages/react-formio/src/components/alert/alert.stories.tsx index 3ebd46bc..f0fe2bf4 100644 --- a/packages/react-formio/src/components/alert/alert.stories.tsx +++ b/packages/react-formio/src/components/alert/alert.stories.tsx @@ -1,5 +1,3 @@ -import React from "react"; - import { Alert } from "./alert.component"; export default { diff --git a/packages/react-formio/src/components/card/card.component.spec.tsx b/packages/react-formio/src/components/card/card.component.spec.tsx index 8f5bb17a..198d42ac 100644 --- a/packages/react-formio/src/components/card/card.component.spec.tsx +++ b/packages/react-formio/src/components/card/card.component.spec.tsx @@ -1,5 +1,4 @@ import { render, screen } from "@testing-library/react"; -import React from "react"; import { Sandbox } from "./card.stories"; diff --git a/packages/react-formio/src/components/card/card.component.tsx b/packages/react-formio/src/components/card/card.component.tsx index 66617741..0ee8fb3b 100644 --- a/packages/react-formio/src/components/card/card.component.tsx +++ b/packages/react-formio/src/components/card/card.component.tsx @@ -1,8 +1,7 @@ import classnames from "classnames"; -import React, { PropsWithChildren } from "react"; +import { PropsWithChildren } from "react"; export interface CardProps { - children: React.ReactNode; label: string; className?: string; } diff --git a/packages/react-formio/src/components/card/card.stories.tsx b/packages/react-formio/src/components/card/card.stories.tsx index f54ae243..b4dc8956 100644 --- a/packages/react-formio/src/components/card/card.stories.tsx +++ b/packages/react-formio/src/components/card/card.stories.tsx @@ -1,5 +1,3 @@ -import React from "react"; - import { Card } from "./card.component"; export default { diff --git a/packages/react-formio/src/components/form-access/formAccess.component.tsx b/packages/react-formio/src/components/form-access/formAccess.component.tsx index 2ef376f6..6f0a8243 100644 --- a/packages/react-formio/src/components/form-access/formAccess.component.tsx +++ b/packages/react-formio/src/components/form-access/formAccess.component.tsx @@ -1,4 +1,4 @@ -import React, { PropsWithChildren, useCallback, useEffect, useMemo, useState } from "react"; +import { PropsWithChildren, useCallback, useEffect, useMemo, useState } from "react"; import type { FormOptions, FormSchema, Submission } from "../../interfaces"; import { Card } from "../card/card.component"; diff --git a/packages/react-formio/src/components/form-action/formAction.component.tsx b/packages/react-formio/src/components/form-action/formAction.component.tsx index 541ece22..ad411a52 100644 --- a/packages/react-formio/src/components/form-action/formAction.component.tsx +++ b/packages/react-formio/src/components/form-action/formAction.component.tsx @@ -1,5 +1,5 @@ import FormioUtils from "formiojs/utils"; -import React, { PropsWithChildren, ReactElement } from "react"; +import { PropsWithChildren, ReactElement } from "react"; import { ActionDefaultsSchema, ActionSchema, FormOptions, Submission } from "../../interfaces"; import { Form } from "../form/form.component"; diff --git a/packages/react-formio/src/components/form-action/formAction.stories.tsx b/packages/react-formio/src/components/form-action/formAction.stories.tsx index cdf398c2..f71523eb 100644 --- a/packages/react-formio/src/components/form-action/formAction.stories.tsx +++ b/packages/react-formio/src/components/form-action/formAction.stories.tsx @@ -1,5 +1,3 @@ -import React from "react"; - import { FormAction } from "./formAction.component"; export default { diff --git a/packages/react-formio/src/components/form-builder/formBuilder.component.tsx b/packages/react-formio/src/components/form-builder/formBuilder.component.tsx index 77fc7a24..60b631da 100755 --- a/packages/react-formio/src/components/form-builder/formBuilder.component.tsx +++ b/packages/react-formio/src/components/form-builder/formBuilder.component.tsx @@ -1,5 +1,3 @@ -/* eslint-disable jsx-a11y/no-static-element-interactions */ -/* eslint-disable jsx-a11y/click-events-have-key-events */ import { ComponentSchema } from "formiojs"; import AllComponents from "formiojs/components"; import Components from "formiojs/components/Components"; @@ -7,7 +5,7 @@ import FormioFormBuilder from "formiojs/FormBuilder"; import cloneDeep from "lodash/cloneDeep"; import noop from "lodash/noop"; import PropTypes from "prop-types"; -import React from "react"; +import { Component } from "react"; import { callLast } from "../../utils/callLast"; @@ -73,7 +71,7 @@ export interface FormBuilderProps { onPasteComponent?: Function; } -export class FormBuilder extends React.Component { +export class FormBuilder extends Component { static defaultProps = { options: {}, onChange: noop, @@ -180,6 +178,8 @@ export class FormBuilder extends React.Component { }); } + /* eslint-disable jsx-a11y/no-static-element-interactions */ + /* eslint-disable jsx-a11y/click-events-have-key-events */ render() { return (
{ name: string; @@ -8,9 +8,9 @@ export interface FormControlProps { label?: string; className?: string; onChange?: (name: string, value: any) => void; - description?: string | React.ComponentType | any; - prefix?: JSX.Element | React.ComponentType | any; - suffix?: JSX.Element | React.ComponentType | any; + description?: string | ReactNode; + prefix?: ReactNode | string; + suffix?: ReactNode | string; shadow?: boolean; } @@ -23,7 +23,7 @@ export function FormControl({ description, label, className -}: React.PropsWithChildren) { +}: PropsWithChildren) { return (
{label && ( diff --git a/packages/react-formio/src/components/form-control/formControl.stories.tsx b/packages/react-formio/src/components/form-control/formControl.stories.tsx index 93925fc6..94d45662 100644 --- a/packages/react-formio/src/components/form-control/formControl.stories.tsx +++ b/packages/react-formio/src/components/form-control/formControl.stories.tsx @@ -1,5 +1,3 @@ -import React from "react"; - import { iconClass } from "../../utils/iconClass"; import { FormControl } from "./formControl.component"; diff --git a/packages/react-formio/src/components/form-edit/formCtas.component.tsx b/packages/react-formio/src/components/form-edit/formCtas.component.tsx index 1468c5b1..58e80372 100644 --- a/packages/react-formio/src/components/form-edit/formCtas.component.tsx +++ b/packages/react-formio/src/components/form-edit/formCtas.component.tsx @@ -1,5 +1,5 @@ import PropTypes from "prop-types"; -import React, { ReactElement } from "react"; +import { ReactElement } from "react"; import { useTooltip } from "../../hooks/useTooltip"; import { FormOptions } from "../../interfaces"; diff --git a/packages/react-formio/src/components/form-edit/formEdit.component.tsx b/packages/react-formio/src/components/form-edit/formEdit.component.tsx index d2b46db9..20371d1c 100644 --- a/packages/react-formio/src/components/form-edit/formEdit.component.tsx +++ b/packages/react-formio/src/components/form-edit/formEdit.component.tsx @@ -1,5 +1,4 @@ import PropTypes from "prop-types"; -import React from "react"; import { FormOptions } from "../../interfaces/FormOptions"; import { FormBuilder } from "../form-builder/formBuilder.component"; diff --git a/packages/react-formio/src/components/form-edit/formEdit.stories.tsx b/packages/react-formio/src/components/form-edit/formEdit.stories.tsx index 05a8b9c4..9911f020 100644 --- a/packages/react-formio/src/components/form-edit/formEdit.stories.tsx +++ b/packages/react-formio/src/components/form-edit/formEdit.stories.tsx @@ -1,5 +1,3 @@ -import React from "react"; - import { FormEdit } from "./formEdit.component"; import { defaultDisplayChoices } from "./formParameters.component"; diff --git a/packages/react-formio/src/components/form-edit/formParameters.component.tsx b/packages/react-formio/src/components/form-edit/formParameters.component.tsx index 2593dd66..1002e2a6 100644 --- a/packages/react-formio/src/components/form-edit/formParameters.component.tsx +++ b/packages/react-formio/src/components/form-edit/formParameters.component.tsx @@ -1,5 +1,5 @@ import PropTypes from "prop-types"; -import React, { ReactElement } from "react"; +import { ReactElement } from "react"; import { FormSchema } from "../../interfaces/FormSchema"; import { InputTags } from "../input-tags/inputTags.component"; diff --git a/packages/react-formio/src/components/form-settings/formSettings.component.spec.tsx b/packages/react-formio/src/components/form-settings/formSettings.component.spec.tsx index 87994369..4a862e43 100644 --- a/packages/react-formio/src/components/form-settings/formSettings.component.spec.tsx +++ b/packages/react-formio/src/components/form-settings/formSettings.component.spec.tsx @@ -1,12 +1,11 @@ import { fireEvent, render, screen } from "@testing-library/react"; -import React from "react"; import { FormSettings } from "./formSettings.component"; import { Sandbox } from "./formSettings.stories"; describe("FormSettings", () => { it("should render form settings", () => { - const onSubmit = jest.fn(); + const onSubmit = vi.fn(); // @ts-ignore Sandbox.args.form.action = "https://test"; diff --git a/packages/react-formio/src/components/form-settings/formSettings.component.tsx b/packages/react-formio/src/components/form-settings/formSettings.component.tsx index d173da68..23fb06ae 100644 --- a/packages/react-formio/src/components/form-settings/formSettings.component.tsx +++ b/packages/react-formio/src/components/form-settings/formSettings.component.tsx @@ -1,6 +1,6 @@ import isEqual from "lodash/isEqual"; import noop from "lodash/noop"; -import React, { useEffect, useState } from "react"; +import { useEffect, useState } from "react"; import { FormOptions, FormSchema } from "../../interfaces"; import { Form } from "../form/form.component"; diff --git a/packages/react-formio/src/components/form-settings/formSettings.stories.tsx b/packages/react-formio/src/components/form-settings/formSettings.stories.tsx index 4845af44..9f7bc055 100644 --- a/packages/react-formio/src/components/form-settings/formSettings.stories.tsx +++ b/packages/react-formio/src/components/form-settings/formSettings.stories.tsx @@ -1,5 +1,3 @@ -import React from "react"; - import { FormSettings } from "./formSettings.component"; export default { diff --git a/packages/react-formio/src/components/form/form.component.spec.tsx b/packages/react-formio/src/components/form/form.component.spec.tsx index a7fc9015..663f178c 100644 --- a/packages/react-formio/src/components/form/form.component.spec.tsx +++ b/packages/react-formio/src/components/form/form.component.spec.tsx @@ -4,7 +4,7 @@ import { render } from "@testing-library/react"; import { Form } from "./form.component"; async function createFixture(props: any = {}) { - const onSubmit = jest.fn(); + const onSubmit = vi.fn(); const form = { type: "form", display: "form", diff --git a/packages/react-formio/src/components/form/form.component.tsx b/packages/react-formio/src/components/form/form.component.tsx index fd734d40..abc97a3d 100755 --- a/packages/react-formio/src/components/form/form.component.tsx +++ b/packages/react-formio/src/components/form/form.component.tsx @@ -1,7 +1,6 @@ import { Components } from "formiojs"; import AllComponents from "formiojs/components"; import PropTypes from "prop-types"; -import React from "react"; import { useForm, UseFormHookProps } from "./useForm.hook"; diff --git a/packages/react-formio/src/components/form/form.stories.tsx b/packages/react-formio/src/components/form/form.stories.tsx index 49d75c29..239afede 100644 --- a/packages/react-formio/src/components/form/form.stories.tsx +++ b/packages/react-formio/src/components/form/form.stories.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import { useState } from "react"; import form from "../__fixtures__/form.fixture.json"; import { Form } from "./form.component"; diff --git a/packages/react-formio/src/components/forms-table/components/formCell.component.tsx b/packages/react-formio/src/components/forms-table/components/formCell.component.tsx index bcc4b1e8..00131282 100644 --- a/packages/react-formio/src/components/forms-table/components/formCell.component.tsx +++ b/packages/react-formio/src/components/forms-table/components/formCell.component.tsx @@ -1,6 +1,5 @@ import classnames from "classnames"; import moment from "moment"; -import React from "react"; import { CellProps } from "react-table"; import { FormSchema } from "../../../interfaces"; diff --git a/packages/react-formio/src/components/forms-table/formsTable.component.tsx b/packages/react-formio/src/components/forms-table/formsTable.component.tsx index f29080c9..d412a0b5 100644 --- a/packages/react-formio/src/components/forms-table/formsTable.component.tsx +++ b/packages/react-formio/src/components/forms-table/formsTable.component.tsx @@ -1,5 +1,3 @@ -import React from "react"; - import { FormSchema } from "../../interfaces"; import { DefaultColumnFilter } from "../table/filters/defaultColumnFilter.component"; import { SelectColumnFilter } from "../table/filters/selectColumnFilter.component"; diff --git a/packages/react-formio/src/components/forms-table/formsTable.stories.tsx b/packages/react-formio/src/components/forms-table/formsTable.stories.tsx index 3e53f20f..f10e0d96 100644 --- a/packages/react-formio/src/components/forms-table/formsTable.stories.tsx +++ b/packages/react-formio/src/components/forms-table/formsTable.stories.tsx @@ -1,5 +1,4 @@ import tailwind from "@tsed/tailwind-formio"; -import React from "react"; import { FormsTable } from "./formsTable.component"; diff --git a/packages/react-formio/src/components/index.ts b/packages/react-formio/src/components/index.ts index 21b9b23f..f0e82ae9 100644 --- a/packages/react-formio/src/components/index.ts +++ b/packages/react-formio/src/components/index.ts @@ -19,7 +19,6 @@ export * from "./loader/loader.component"; export * from "./modal/modal.component"; export * from "./modal/removeModal.component"; export * from "./pagination/pagination.component"; -export * from "./react-component/reactComponent.component"; export * from "./select/select.component"; export * from "./submissions-table/submissionsTable.component"; export * from "./table"; diff --git a/packages/react-formio/src/components/input-tags/inputTags.component.tsx b/packages/react-formio/src/components/input-tags/inputTags.component.tsx index 2bdf5503..ded7142a 100644 --- a/packages/react-formio/src/components/input-tags/inputTags.component.tsx +++ b/packages/react-formio/src/components/input-tags/inputTags.component.tsx @@ -1,7 +1,7 @@ import Choices from "@formio/choices.js"; import uniq from "lodash/uniq"; import PropTypes from "prop-types"; -import React, { useEffect, useRef } from "react"; +import { useEffect, useRef } from "react"; import { FormControl, FormControlProps } from "../form-control/formControl.component"; diff --git a/packages/react-formio/src/components/input-tags/inputTags.stories.tsx b/packages/react-formio/src/components/input-tags/inputTags.stories.tsx index d2319119..a266b6f0 100644 --- a/packages/react-formio/src/components/input-tags/inputTags.stories.tsx +++ b/packages/react-formio/src/components/input-tags/inputTags.stories.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import { useState } from "react"; import { iconClass } from "../../utils/iconClass"; import { InputTags } from "./inputTags.component"; diff --git a/packages/react-formio/src/components/input-text/inputText.component.spec.tsx b/packages/react-formio/src/components/input-text/inputText.component.spec.tsx index a9612e69..4b0c5531 100644 --- a/packages/react-formio/src/components/input-text/inputText.component.spec.tsx +++ b/packages/react-formio/src/components/input-text/inputText.component.spec.tsx @@ -1,5 +1,4 @@ import { fireEvent, render, screen } from "@testing-library/react"; -import React from "react"; import { Sandbox } from "./inputText.stories"; diff --git a/packages/react-formio/src/components/input-text/inputText.component.tsx b/packages/react-formio/src/components/input-text/inputText.component.tsx index a6ccd7f3..8984fac9 100644 --- a/packages/react-formio/src/components/input-text/inputText.component.tsx +++ b/packages/react-formio/src/components/input-text/inputText.component.tsx @@ -1,6 +1,6 @@ import classnames from "classnames"; import PropTypes from "prop-types"; -import React, { useEffect, useMemo, useState } from "react"; +import { useEffect, useMemo, useState } from "react"; import { callLast } from "../../utils/callLast"; import { getEventValue } from "../../utils/getEventValue"; diff --git a/packages/react-formio/src/components/input-text/inputText.stories.tsx b/packages/react-formio/src/components/input-text/inputText.stories.tsx index 1870b423..972ea380 100644 --- a/packages/react-formio/src/components/input-text/inputText.stories.tsx +++ b/packages/react-formio/src/components/input-text/inputText.stories.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import { useState } from "react"; import { iconClass } from "../../utils/iconClass"; import { InputText } from "./inputText.component"; diff --git a/packages/react-formio/src/components/loader/loader.component.spec.tsx b/packages/react-formio/src/components/loader/loader.component.spec.tsx index 1373ed21..f8158a82 100644 --- a/packages/react-formio/src/components/loader/loader.component.spec.tsx +++ b/packages/react-formio/src/components/loader/loader.component.spec.tsx @@ -1,7 +1,7 @@ import { render, screen } from "@testing-library/react"; -import React from "react"; import { Sandbox } from "./loader.stories"; + describe("Loader", () => { it("should render a component (when isActive = true)", () => { render(); diff --git a/packages/react-formio/src/components/loader/loader.component.tsx b/packages/react-formio/src/components/loader/loader.component.tsx index 49051621..61493324 100644 --- a/packages/react-formio/src/components/loader/loader.component.tsx +++ b/packages/react-formio/src/components/loader/loader.component.tsx @@ -1,6 +1,6 @@ import classnames from "classnames"; import PropTypes from "prop-types"; -import React, { PropsWithChildren } from "react"; +import { PropsWithChildren } from "react"; import { iconClass } from "../../utils/iconClass"; diff --git a/packages/react-formio/src/components/loader/loader.stories.tsx b/packages/react-formio/src/components/loader/loader.stories.tsx index 99d3c20f..b5c3a472 100644 --- a/packages/react-formio/src/components/loader/loader.stories.tsx +++ b/packages/react-formio/src/components/loader/loader.stories.tsx @@ -1,5 +1,3 @@ -import React from "react"; - import { Loader } from "./loader.component"; export default { diff --git a/packages/react-formio/src/components/modal/modal.component.spec.tsx b/packages/react-formio/src/components/modal/modal.component.spec.tsx index 6c9f748b..1d81b7f3 100644 --- a/packages/react-formio/src/components/modal/modal.component.spec.tsx +++ b/packages/react-formio/src/components/modal/modal.component.spec.tsx @@ -1,14 +1,11 @@ -import "@testing-library/jest-dom/extend-expect"; - import { fireEvent, render, screen } from "@testing-library/react"; -import React from "react"; import { WithFooter, WithTitle } from "./modal.stories"; describe("Modal", () => { describe("WithTitle", () => { it("should display the modal when we click on the button", async () => { - const onClose = jest.fn(); + const onClose = vi.fn(); render(); @@ -60,7 +57,7 @@ describe("Modal", () => { expect(screen.queryByTestId("modalFooter")).toBeFalsy(); }); it("should call the onSubmit listener", async () => { - const onSubmit = jest.fn(); + const onSubmit = vi.fn(); render(); diff --git a/packages/react-formio/src/components/modal/modal.component.tsx b/packages/react-formio/src/components/modal/modal.component.tsx index 47770733..984626fc 100644 --- a/packages/react-formio/src/components/modal/modal.component.tsx +++ b/packages/react-formio/src/components/modal/modal.component.tsx @@ -1,7 +1,7 @@ /* eslint-disable jsx-a11y/no-static-element-interactions */ /* eslint-disable jsx-a11y/click-events-have-key-events */ import noop from "lodash"; -import React, { PropsWithChildren, useEffect, useRef, useState } from "react"; +import { PropsWithChildren, useEffect, useRef, useState } from "react"; export function useModal() { const [show, setShowModal] = useState(false); diff --git a/packages/react-formio/src/components/modal/modal.stories.tsx b/packages/react-formio/src/components/modal/modal.stories.tsx index a6dbb5cc..df69fa9a 100644 --- a/packages/react-formio/src/components/modal/modal.stories.tsx +++ b/packages/react-formio/src/components/modal/modal.stories.tsx @@ -1,5 +1,3 @@ -import React from "react"; - import { Modal, ModalProps, useModal } from "./modal.component"; import { RemoveModal, RemoveModalProps } from "./removeModal.component"; diff --git a/packages/react-formio/src/components/modal/removeModal.component.tsx b/packages/react-formio/src/components/modal/removeModal.component.tsx index 1fadb2de..5aa4d05a 100644 --- a/packages/react-formio/src/components/modal/removeModal.component.tsx +++ b/packages/react-formio/src/components/modal/removeModal.component.tsx @@ -1,5 +1,5 @@ import classnames from "classnames"; -import React, { PropsWithChildren, useState } from "react"; +import { PropsWithChildren, useState } from "react"; import { iconClass } from "../../utils/iconClass"; import { InputText } from "../input-text/inputText.component"; diff --git a/packages/react-formio/src/components/pagination/pagination.component.spec.tsx b/packages/react-formio/src/components/pagination/pagination.component.spec.tsx index 08f15308..a4a1f3a1 100644 --- a/packages/react-formio/src/components/pagination/pagination.component.spec.tsx +++ b/packages/react-formio/src/components/pagination/pagination.component.spec.tsx @@ -1,5 +1,4 @@ import { fireEvent, render, screen } from "@testing-library/react"; -import React from "react"; import { Sandbox } from "./pagination.stories"; @@ -18,7 +17,7 @@ describe("Pagination", () => { }); it("should call previousPage() callback", () => { - const previousPageSpy = jest.fn(); + const previousPageSpy = vi.fn(); render(); const paginationBtn = screen.queryAllByTestId("pagination-button"); const btnPreviousPage = paginationBtn.find((btn) => btn.textContent === "Previous"); @@ -29,7 +28,7 @@ describe("Pagination", () => { }); it("should call nextPage() callback", () => { - const nextPageSpy = jest.fn(); + const nextPageSpy = vi.fn(); render(); fireEvent.click(screen.getByText(/Next/i)); @@ -38,7 +37,7 @@ describe("Pagination", () => { }); it("should call gotoPage() callback when cliking on a button page", () => { - const gotoPageSpy = jest.fn(); + const gotoPageSpy = vi.fn(); let page: number; render(); @@ -57,7 +56,7 @@ describe("Pagination", () => { }); it("should have Previous button disabled and not clickable", () => { - const previousPageSpy = jest.fn(); + const previousPageSpy = vi.fn(); render(); const previousButton = screen.getByText("Previous"); @@ -68,7 +67,7 @@ describe("Pagination", () => { }); it("should have Previous button NOT disabled and clickable", () => { - const previousPageSpy = jest.fn(); + const previousPageSpy = vi.fn(); render(); const previousButton = screen.getByText("Previous"); @@ -79,7 +78,7 @@ describe("Pagination", () => { }); it("should have Next button disabled and not clickable", () => { - const nextPageSpy = jest.fn(); + const nextPageSpy = vi.fn(); render(); const nextButton = screen.getByText("Next"); @@ -89,7 +88,7 @@ describe("Pagination", () => { }); it("should have Next button NOT disabled and clickable", () => { - const nextPageSpy = jest.fn(); + const nextPageSpy = vi.fn(); render(); const nextButton = screen.getByText("Next"); expect(nextButton).not.toHaveAttribute("disabled"); diff --git a/packages/react-formio/src/components/pagination/pagination.component.tsx b/packages/react-formio/src/components/pagination/pagination.component.tsx index 12de7dec..95f06e95 100644 --- a/packages/react-formio/src/components/pagination/pagination.component.tsx +++ b/packages/react-formio/src/components/pagination/pagination.component.tsx @@ -1,5 +1,5 @@ import classnames from "classnames"; -import React, { PropsWithChildren } from "react"; +import { PropsWithChildren } from "react"; import { Select } from "../select/select.component"; import { getPageNumbers, LEFT_PAGE, RIGHT_PAGE } from "../table/utils/getPageNumbers"; diff --git a/packages/react-formio/src/components/pagination/pagination.stories.tsx b/packages/react-formio/src/components/pagination/pagination.stories.tsx index 20e64385..22b6ade5 100644 --- a/packages/react-formio/src/components/pagination/pagination.stories.tsx +++ b/packages/react-formio/src/components/pagination/pagination.stories.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from "react"; +import { useEffect, useState } from "react"; import { Pagination } from "./pagination.component"; diff --git a/packages/react-formio/src/components/react-component/reactComponent.component.tsx b/packages/react-formio/src/components/react-component/reactComponent.component.tsx deleted file mode 100644 index eea142b6..00000000 --- a/packages/react-formio/src/components/react-component/reactComponent.component.tsx +++ /dev/null @@ -1,197 +0,0 @@ -import { Components, ComponentSchema } from "formiojs"; -import ReactDOM from "react-dom"; - -import { Submission } from "../../interfaces/Submission"; - -export class ReactComponent extends Components.components.field { - public reactInstance: any; - public shouldSetValue?: boolean; - private dataForSetting?: Data; - - /** - * This is the first phase of component building where the component is instantiated. - * - * @param component - The component definition created from the settings form. - * @param options - Any options passed into the renderer. - * @param data - The submission data where this component's data exists. - */ - constructor(component: ComponentSchema, options: any, data: Submission) { - super(component, options, data); - } - - get $reactNode() { - return (this.refs as any)[`react-${this.id}`]; - } - - /** - * This method is called any time the component needs to be rebuilt. It is most frequently used to listen to other - * components using the this.on() function. - */ - init() { - return super.init(); - } - - /** - * This method is called before the component is going to be destroyed, which is when the component instance is - * destroyed. This is different from detach which is when the component instance still exists but the dom instance is - * removed. - */ - destroy() { - return super.destroy(); - } - - /** - * The second phase of component building where the component is rendered as an HTML string. - * - * @returns {string} - The return is the full string of the component - */ - render() { - // For react components, we simply render as a div which will become the react instance. - // By calling super.render(string) it will wrap the component with the needed wrappers to make it a full component. - return super.render(`
`); - } - - /** - * The third phase of component building where the component has been attached to the DOM as 'element' and is ready - * to have its javascript events attached. - * - * @param element - * @returns {Promise} - Return a promise that resolves when the attach is complete. - */ - async attach(element: any) { - super.attach(element); - - // The loadRefs function will find all dom elements that have the "ref" setting that match the object property. - // It can load a single element or multiple elements with the same ref. - this.loadRefs(element, { - [`react-${this.id}`]: "single" - }); - - // @ts-ignore - if (this.refs[`react-${this.id}`]) { - // @ts-ignore - this.reactInstance = this.attachReact(this.refs[`react-${this.id}`]); - - if (this.shouldSetValue) { - this.setValue(this.dataForSetting); - this.updateValue(this.dataForSetting); - } - } - } - - /** - * The fourth phase of component building where the component is being removed from the page. This could be a redraw - * or it is being removed from the form. - */ - detach() { - // @ts-ignore - if (this.refs[`react-${this.id}`]) { - // @ts-ignore - this.detachReact(this.refs[`react-${this.id}`]); - } - super.detach(); - } - - /** - * Override this function to render a react component. - */ - renderReact(): any { - return null; - } - - /** - * Override this function to insert your custom component. - * - * @param element - */ - - attachReact(element?: any) { - // eslint-disable-next-line react/no-render-return-value,react/no-deprecated - return ReactDOM.render(this.renderReact(), element); - } - - /** - * Override this function. - */ - - detachReact(element?: any) { - if (element) { - // eslint-disable-next-line react/no-deprecated - ReactDOM.unmountComponentAtNode(element); - } - } - - /** - * Something external has set a value and our component needs to be updated to reflect that. For example, loading a submission. - * - * @param value - * @param flags - */ - setValue(value: any) { - if (this.reactInstance) { - this.reactInstance.setState({ - value: value - }); - this.shouldSetValue = false; - } else { - this.shouldSetValue = true; - this.dataForSetting = value; - } - - return false; - } - - /** - * The user has changed the value in the component and the value needs to be updated on the main submission object and other components notified of a change event. - * - * @param value - * @param flags - */ - updateValue = (value?: Data, flags?: Record) => { - flags = flags || {}; - - const newValue = value === undefined || value === null ? this.getValue() : value; - - const changed = newValue !== undefined ? this.hasChanged(newValue, this.dataValue) : false; - - this.dataValue = Array.isArray(newValue) ? [...newValue] : newValue; - - this.updateOnChange(flags, changed); - return changed; - }; - - /** - * Get the current value of the component. Should return the value set in the react component. - * - * @returns {*} - */ - getValue(): Data { - if (this.reactInstance) { - return this.reactInstance.state.value; - } - return this.defaultValue; - } - - /** - * Override normal validation check to insert custom validation in react component. - * - * @param data - * @param dirty - * @param rowData - * @returns {boolean} - */ - checkValidity(data: Data, dirty: boolean, rowData: any) { - const valid = super.checkValidity(data, dirty, rowData); - - if (!valid) { - return false; - } - - return this.validate(data, dirty, rowData); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - validate(data: Data, dirty: boolean, rowData: any) { - return true; - } -} diff --git a/packages/react-formio/src/components/select/select.component.spec.tsx b/packages/react-formio/src/components/select/select.component.spec.tsx index a8b2983f..94f38273 100644 --- a/packages/react-formio/src/components/select/select.component.spec.tsx +++ b/packages/react-formio/src/components/select/select.component.spec.tsx @@ -1,5 +1,4 @@ import { fireEvent, render, screen } from "@testing-library/react"; -import React from "react"; import { Choicesjs, Sandbox } from "./select.stories"; @@ -52,7 +51,7 @@ describe("Select", () => { { label: "test2", value: "value2" } ]; const placeHolderTest = "Placeholder test"; - const onChange = jest.fn(); + const onChange = vi.fn(); render(); diff --git a/packages/react-formio/src/components/select/select.component.tsx b/packages/react-formio/src/components/select/select.component.tsx index 120a4a6f..83d989a5 100644 --- a/packages/react-formio/src/components/select/select.component.tsx +++ b/packages/react-formio/src/components/select/select.component.tsx @@ -1,6 +1,6 @@ import Choices from "@formio/choices.js"; import classnames from "classnames"; -import React, { HTMLAttributes, ReactElement, useEffect, useRef } from "react"; +import { HTMLAttributes, ReactElement, useEffect, useRef } from "react"; import { getEventValue } from "../../utils/getEventValue"; import { FormControl, FormControlProps } from "../form-control/formControl.component"; diff --git a/packages/react-formio/src/components/select/select.stories.tsx b/packages/react-formio/src/components/select/select.stories.tsx index d628419a..d34d2d07 100644 --- a/packages/react-formio/src/components/select/select.stories.tsx +++ b/packages/react-formio/src/components/select/select.stories.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import { useState } from "react"; import { iconClass } from "../../utils/iconClass"; import { Select } from "./select.component"; diff --git a/packages/react-formio/src/components/submissions-table/submissionsTable.component.tsx b/packages/react-formio/src/components/submissions-table/submissionsTable.component.tsx index e84cba95..fe481dc6 100644 --- a/packages/react-formio/src/components/submissions-table/submissionsTable.component.tsx +++ b/packages/react-formio/src/components/submissions-table/submissionsTable.component.tsx @@ -1,5 +1,3 @@ -import React from "react"; - import { FormSchema, Submission } from "../../interfaces"; import { TableProps } from "../table/hooks/useCustomTable.hook"; import { Table } from "../table/table.component"; diff --git a/packages/react-formio/src/components/submissions-table/submissionsTable.stories.tsx b/packages/react-formio/src/components/submissions-table/submissionsTable.stories.tsx index aaa6d207..9e8c1b4a 100644 --- a/packages/react-formio/src/components/submissions-table/submissionsTable.stories.tsx +++ b/packages/react-formio/src/components/submissions-table/submissionsTable.stories.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import { useState } from "react"; import { mapPagination } from "../../utils/mapPagination"; import formSchema from "../__fixtures__/form-schema.json"; @@ -49,9 +49,9 @@ export default { }; export const Sandbox = (args: any) => { - const [skip, setSkip] = React.useState(0); - const [limit, setLimit] = React.useState(10); - const [serverCount] = React.useState(87); + const [skip, setSkip] = useState(0); + const [limit, setLimit] = useState(10); + const [serverCount] = useState(87); const onChange = (obj: any) => { setLimit(obj.pageSize); diff --git a/packages/react-formio/src/components/table/components/defaultArrowSort.component.tsx b/packages/react-formio/src/components/table/components/defaultArrowSort.component.tsx index d0fb47f1..d5b19443 100644 --- a/packages/react-formio/src/components/table/components/defaultArrowSort.component.tsx +++ b/packages/react-formio/src/components/table/components/defaultArrowSort.component.tsx @@ -1,5 +1,3 @@ -import React from "react"; - import { iconClass } from "../../../utils/iconClass"; export function DefaultArrowSort({ column }: any) { diff --git a/packages/react-formio/src/components/table/components/defaultCell.component.tsx b/packages/react-formio/src/components/table/components/defaultCell.component.tsx index 9417020a..ef287bd4 100644 --- a/packages/react-formio/src/components/table/components/defaultCell.component.tsx +++ b/packages/react-formio/src/components/table/components/defaultCell.component.tsx @@ -1,5 +1,3 @@ -import React from "react"; - export function DefaultCell({ value, render = (f: any) => f }: any): JSX.Element { if (value === undefined) { return ; diff --git a/packages/react-formio/src/components/table/components/defaultCellHeader.component.tsx b/packages/react-formio/src/components/table/components/defaultCellHeader.component.tsx index 3b835d67..fb313aee 100644 --- a/packages/react-formio/src/components/table/components/defaultCellHeader.component.tsx +++ b/packages/react-formio/src/components/table/components/defaultCellHeader.component.tsx @@ -1,4 +1,3 @@ -import React from "react"; import { HeaderGroup } from "react-table"; export interface DefaultCellHeaderProps extends Record { diff --git a/packages/react-formio/src/components/table/components/defaultCellOperations.component.tsx b/packages/react-formio/src/components/table/components/defaultCellOperations.component.tsx index 9ec836cd..05935c29 100644 --- a/packages/react-formio/src/components/table/components/defaultCellOperations.component.tsx +++ b/packages/react-formio/src/components/table/components/defaultCellOperations.component.tsx @@ -1,5 +1,3 @@ -import React from "react"; - import { DefaultOperationButton, OperationButtonProps } from "./defaultOperationButton.component"; export interface DefaultCellOperationsProps { diff --git a/packages/react-formio/src/components/table/components/defaultCells.component.tsx b/packages/react-formio/src/components/table/components/defaultCells.component.tsx index 5091e2c6..e59315d3 100644 --- a/packages/react-formio/src/components/table/components/defaultCells.component.tsx +++ b/packages/react-formio/src/components/table/components/defaultCells.component.tsx @@ -1,4 +1,3 @@ -import React from "react"; import { Row } from "react-table"; import type { ExtendedCell } from "../hooks/useCustomTable.hook"; diff --git a/packages/react-formio/src/components/table/components/defaultOperationButton.component.tsx b/packages/react-formio/src/components/table/components/defaultOperationButton.component.tsx index 699e421c..0ab37867 100644 --- a/packages/react-formio/src/components/table/components/defaultOperationButton.component.tsx +++ b/packages/react-formio/src/components/table/components/defaultOperationButton.component.tsx @@ -15,6 +15,7 @@ export interface OperationButtonProps extends Omit string; ctx?: any; + permissionsResolver?: (ctx: any) => boolean; } export function DefaultOperationButton(props: OperationButtonProps) { @@ -32,6 +33,8 @@ export function DefaultOperationButton(props: OperationButtonProps) { data, // eslint-disable-next-line @typescript-eslint/no-unused-vars ctx, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + permissionsResolver, ...otherProps } = props; diff --git a/packages/react-formio/src/components/table/components/defaultRow.component.tsx b/packages/react-formio/src/components/table/components/defaultRow.component.tsx index 831c7cd4..0c627d7f 100644 --- a/packages/react-formio/src/components/table/components/defaultRow.component.tsx +++ b/packages/react-formio/src/components/table/components/defaultRow.component.tsx @@ -1,5 +1,5 @@ import classnames from "classnames"; -import React, { DetailedHTMLProps, HTMLAttributes } from "react"; +import { DetailedHTMLProps, HTMLAttributes } from "react"; import { Row } from "react-table"; import { iconClass } from "../../../utils/iconClass"; diff --git a/packages/react-formio/src/components/table/components/dragNDropContainer.tsx b/packages/react-formio/src/components/table/components/dragNDropContainer.tsx index b3c23ea8..fe0cb439 100644 --- a/packages/react-formio/src/components/table/components/dragNDropContainer.tsx +++ b/packages/react-formio/src/components/table/components/dragNDropContainer.tsx @@ -1,4 +1,4 @@ -import React, { PropsWithChildren } from "react"; +import { PropsWithChildren } from "react"; import { DndProvider } from "react-dnd"; import { HTML5Backend } from "react-dnd-html5-backend"; diff --git a/packages/react-formio/src/components/table/filters/defaultColumnFilter.component.spec.tsx b/packages/react-formio/src/components/table/filters/defaultColumnFilter.component.spec.tsx index d6f0a908..77b655b7 100644 --- a/packages/react-formio/src/components/table/filters/defaultColumnFilter.component.spec.tsx +++ b/packages/react-formio/src/components/table/filters/defaultColumnFilter.component.spec.tsx @@ -1,7 +1,4 @@ -import "@testing-library/jest-dom/extend-expect"; - import { act, fireEvent, render, screen } from "@testing-library/react"; -import React from "react"; import { DefaultColumnFilter } from "./defaultColumnFilter.component"; @@ -9,9 +6,9 @@ describe("DefaultColumnFilter", () => { it("should display text-field and handle change", async () => { const props = { filterId: "data.id", - setFilterId: jest.fn(), + setFilterId: vi.fn(), name: "data.id", - column: { id: "id", filterValue: "", setFilter: jest.fn() } + column: { id: "id", filterValue: "", setFilter: vi.fn() } }; render( diff --git a/packages/react-formio/src/components/table/filters/defaultColumnFilter.component.tsx b/packages/react-formio/src/components/table/filters/defaultColumnFilter.component.tsx index b00dd380..09d236ed 100644 --- a/packages/react-formio/src/components/table/filters/defaultColumnFilter.component.tsx +++ b/packages/react-formio/src/components/table/filters/defaultColumnFilter.component.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useState } from "react"; +import { useCallback, useState } from "react"; import { FilterProps } from "react-table"; import { InputText } from "../../input-text/inputText.component"; diff --git a/packages/react-formio/src/components/table/filters/selectColumnFilter.component.spec.tsx b/packages/react-formio/src/components/table/filters/selectColumnFilter.component.spec.tsx index ef98be12..97ebdae9 100644 --- a/packages/react-formio/src/components/table/filters/selectColumnFilter.component.spec.tsx +++ b/packages/react-formio/src/components/table/filters/selectColumnFilter.component.spec.tsx @@ -1,13 +1,10 @@ -import "@testing-library/jest-dom/extend-expect"; - import { render, screen } from "@testing-library/react"; -import React from "react"; import { SelectColumnFilter } from "./selectColumnFilter.component"; describe("SelectColumnFilter", () => { it("should display select with choices", async () => { - const mockSetFilter = jest.fn(); + const mockSetFilter = vi.fn(); const props = { name: "data.id", setFilter: mockSetFilter, @@ -26,7 +23,7 @@ describe("SelectColumnFilter", () => { expect(screen.getByText("select-choice-2")).toBeDefined(); }); it("should display select with custom choices", async () => { - const mockSetFilter = jest.fn(); + const mockSetFilter = vi.fn(); const props = { name: "data.id", setFilter: mockSetFilter, @@ -47,7 +44,7 @@ describe("SelectColumnFilter", () => { }); it("should display select with custom choices (function)", async () => { - const mockSetFilter = jest.fn(); + const mockSetFilter = vi.fn(); const props = { name: "data.id", setFilter: mockSetFilter, diff --git a/packages/react-formio/src/components/table/filters/selectColumnFilter.component.tsx b/packages/react-formio/src/components/table/filters/selectColumnFilter.component.tsx index ee7c4afe..4b0f3dfa 100644 --- a/packages/react-formio/src/components/table/filters/selectColumnFilter.component.tsx +++ b/packages/react-formio/src/components/table/filters/selectColumnFilter.component.tsx @@ -1,4 +1,3 @@ -import React from "react"; import { FilterProps } from "react-table"; import { Select } from "../../select/select.component"; diff --git a/packages/react-formio/src/components/table/filters/sliderColumnFilter.component.tsx b/packages/react-formio/src/components/table/filters/sliderColumnFilter.component.tsx index b574402d..e55b64e7 100644 --- a/packages/react-formio/src/components/table/filters/sliderColumnFilter.component.tsx +++ b/packages/react-formio/src/components/table/filters/sliderColumnFilter.component.tsx @@ -1,18 +1,15 @@ -import React from "react"; import { FilterProps } from "react-table"; export function SliderColumnFilter = {}>({ column: { filterValue, setFilter, preFilteredRows, id } }: FilterProps) { - const [min, max] = React.useMemo(() => { - let min = preFilteredRows.length ? preFilteredRows[0].values[id] : 0; - let max = preFilteredRows.length ? preFilteredRows[0].values[id] : 0; - preFilteredRows.forEach((row) => { - min = Math.min(row?.values[id], min); - max = Math.max(row?.values[id], max); - }); - return [min, max]; - }, [id, preFilteredRows]); + let min = preFilteredRows.length ? preFilteredRows[0].values[id] : 0; + let max = preFilteredRows.length ? preFilteredRows[0].values[id] : 0; + + preFilteredRows.forEach((row) => { + min = Math.min(row?.values[id], min); + max = Math.max(row?.values[id], max); + }); return ( <> diff --git a/packages/react-formio/src/components/table/hooks/useCustomTable.hook.tsx b/packages/react-formio/src/components/table/hooks/useCustomTable.hook.tsx index 83156af3..d99ca71f 100644 --- a/packages/react-formio/src/components/table/hooks/useCustomTable.hook.tsx +++ b/packages/react-formio/src/components/table/hooks/useCustomTable.hook.tsx @@ -1,5 +1,5 @@ import noop from "lodash/noop"; -import React, { PropsWithChildren, useEffect, useState } from "react"; +import { ComponentType, CSSProperties, PropsWithChildren, useEffect, useState } from "react"; import { Cell, CellProps, @@ -27,7 +27,7 @@ export interface ExtraColumnProps { colspan?: number; hidden?: boolean; className?: string; - style?: React.CSSProperties; + style?: CSSProperties; } export type ExtendedColumn = Column & ExtraColumnProps; @@ -66,11 +66,11 @@ export interface TableProps extends TableOptions extends TableOptions>; + Cell?: ComponentType>; /** * Custom Row */ - Row?: React.ComponentType>; + Row?: ComponentType>; /** * */ - CellHeader?: React.ComponentType>; + CellHeader?: ComponentType>; /** * */ - CellOperations?: React.ComponentType; + CellOperations?: ComponentType; /** * Custom Loader */ - Loader?: React.ComponentType; + Loader?: ComponentType; /** * Custom Loader */ - Pagination?: React.ComponentType; + Pagination?: ComponentType; /** * Disable filters */ @@ -179,16 +179,12 @@ export function useCustomTable(props: PropsWithChildre const _onClick = getOperationCallback(operations, onClick); - const defaultColumn = React.useMemo( - () => ({ - // Let's set up our default Filter UI - Filter: ColumnFilter, - ArrowSort - }), - [ColumnFilter, ArrowSort] - ) as any; + const defaultColumn = { + Filter: ColumnFilter, + ArrowSort + }; - const [filterId, setFilterId] = React.useState(controlledFilterId); + const [filterId, setFilterId] = useState(controlledFilterId); // DND const [records, setRecords] = useState(data); @@ -236,7 +232,7 @@ export function useCustomTable(props: PropsWithChildre state: { pageIndex, pageSize, sortBy, filters } } = tableInstance; - React.useEffect(() => { + useEffect(() => { onChange({ pageIndex, pageSize, diff --git a/packages/react-formio/src/components/table/hooks/useOperations.hook.tsx b/packages/react-formio/src/components/table/hooks/useOperations.hook.tsx index 53d99852..3be669a5 100644 --- a/packages/react-formio/src/components/table/hooks/useOperations.hook.tsx +++ b/packages/react-formio/src/components/table/hooks/useOperations.hook.tsx @@ -1,4 +1,4 @@ -import React, { type ComponentType, type FunctionComponent } from "react"; +import { type ComponentType, type FunctionComponent } from "react"; import { Hooks } from "react-table"; import { Operation } from "../../../interfaces"; diff --git a/packages/react-formio/src/components/table/table.component.tsx b/packages/react-formio/src/components/table/table.component.tsx index 868f48f7..2083b408 100644 --- a/packages/react-formio/src/components/table/table.component.tsx +++ b/packages/react-formio/src/components/table/table.component.tsx @@ -1,5 +1,5 @@ import classnames from "classnames"; -import React, { PropsWithChildren } from "react"; +import { PropsWithChildren } from "react"; import { DrapNDropContainer } from "./components/dragNDropContainer"; import { TableProps, useCustomTable } from "./hooks/useCustomTable.hook"; diff --git a/packages/react-formio/src/components/table/table.stories.tsx b/packages/react-formio/src/components/table/table.stories.tsx index cd6ea9aa..96cab6e5 100644 --- a/packages/react-formio/src/components/table/table.stories.tsx +++ b/packages/react-formio/src/components/table/table.stories.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import { useState } from "react"; import { mapPagination } from "../../utils/mapPagination"; import formSchema from "../__fixtures__/form-schema.json"; @@ -14,9 +14,9 @@ export default { }; export const Sandbox = (args: any) => { - const [skip, setSkip] = React.useState(0); - const [limit, setLimit] = React.useState(10); - const [serverCount] = React.useState(87); + const [skip, setSkip] = useState(0); + const [limit, setLimit] = useState(10); + const [serverCount] = useState(87); const onChange = (obj: any) => { setLimit(obj.pageSize); @@ -64,10 +64,10 @@ Sandbox.args = { }; export const TableWithDragNDrop = (args: any) => { - const [skip, setSkip] = React.useState(0); - const [limit, setLimit] = React.useState(10); - const [serverCount] = React.useState(87); - const [data, setData] = React.useState(() => formSubmissions); + const [skip, setSkip] = useState(0); + const [limit, setLimit] = useState(10); + const [serverCount] = useState(87); + const [data, setData] = useState(() => formSubmissions); const onChange = (obj: any) => { setLimit(obj.pageSize); diff --git a/packages/react-formio/src/components/table/utils/mapFormToColumns.tsx b/packages/react-formio/src/components/table/utils/mapFormToColumns.tsx index f303cdcd..e7de18ad 100644 --- a/packages/react-formio/src/components/table/utils/mapFormToColumns.tsx +++ b/packages/react-formio/src/components/table/utils/mapFormToColumns.tsx @@ -1,6 +1,5 @@ import { Components, ExtendedComponentSchema } from "formiojs"; import FormioUtils from "formiojs/utils"; -import React from "react"; import { FormSchema } from "../../../interfaces"; import { DefaultCell } from "../components/defaultCell.component"; diff --git a/packages/react-formio/src/components/tabs/tabs.component.spec.tsx b/packages/react-formio/src/components/tabs/tabs.component.spec.tsx index 1b8e93be..b174e022 100644 --- a/packages/react-formio/src/components/tabs/tabs.component.spec.tsx +++ b/packages/react-formio/src/components/tabs/tabs.component.spec.tsx @@ -1,5 +1,5 @@ import { fireEvent, render, screen } from "@testing-library/react"; -import * as React from "react"; +import { expect, vi } from "vitest"; import { Tabs } from "./tabs.component"; import { Sandbox } from "./tabs.component.stories"; @@ -66,7 +66,7 @@ describe("tabs", () => { label: "Edit" } ]; - const onClick = jest.fn(); + const onClick = vi.fn(); render(); diff --git a/packages/react-formio/src/components/tabs/tabs.component.stories.tsx b/packages/react-formio/src/components/tabs/tabs.component.stories.tsx index f0168735..1b16d76f 100644 --- a/packages/react-formio/src/components/tabs/tabs.component.stories.tsx +++ b/packages/react-formio/src/components/tabs/tabs.component.stories.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import { useState } from "react"; import { Tabs } from "./tabs.component"; diff --git a/packages/react-formio/src/components/tabs/tabs.component.tsx b/packages/react-formio/src/components/tabs/tabs.component.tsx index f67bd6b2..e7ec7e4d 100644 --- a/packages/react-formio/src/components/tabs/tabs.component.tsx +++ b/packages/react-formio/src/components/tabs/tabs.component.tsx @@ -1,5 +1,5 @@ import classnames from "classnames"; -import React, { PropsWithChildren } from "react"; +import { PropsWithChildren } from "react"; import { iconClass } from "../../utils/iconClass"; diff --git a/packages/react-formio/src/setupTests.tsx b/packages/react-formio/src/setupTests.tsx deleted file mode 100644 index 1dd407a6..00000000 --- a/packages/react-formio/src/setupTests.tsx +++ /dev/null @@ -1,5 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import "@testing-library/jest-dom"; diff --git a/packages/react-formio/src/utils/iconClass.ts b/packages/react-formio/src/utils/iconClass.ts index 8ffd698c..5ffdda35 100644 --- a/packages/react-formio/src/utils/iconClass.ts +++ b/packages/react-formio/src/utils/iconClass.ts @@ -1,4 +1,6 @@ -import { Templates } from "formiojs"; +import * as formio from "formiojs"; + +const { Templates } = formio; export function iconClass(iconset: string | undefined, name: string, spinning?: boolean): string { return Templates.current.iconClass(iconset || Templates.current.defaultIconset, name, spinning); diff --git a/packages/react-formio/tsconfig.app.json b/packages/react-formio/tsconfig.app.json new file mode 100644 index 00000000..85f0596c --- /dev/null +++ b/packages/react-formio/tsconfig.app.json @@ -0,0 +1,11 @@ +{ + "extends": "@tsed/typescript/tsconfig.web.json", + "compilerOptions": { + "baseUrl": ".", + "noEmit": true, + "declaration": false, + "composite": false + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "vite.config.mts"], + "exclude": ["node_modules", "dist", "src/**/*.spec.ts", "src/**/*.spec.tsx"] +} diff --git a/packages/react-formio/tsconfig.json b/packages/react-formio/tsconfig.json index 7f62eac6..87a1eaad 100644 --- a/packages/react-formio/tsconfig.json +++ b/packages/react-formio/tsconfig.json @@ -1,16 +1,18 @@ { - "extends": "@tsed/config/tsconfig.web.json", + "extends": "@tsed/typescript/tsconfig.web.json", "compilerOptions": { - "rootDir": "src", - "moduleResolution": "node" + "baseUrl": ".", + "composite": true, + "noEmit": true }, - "include": ["src"], + "include": [], + "exclude": [], "references": [ { - "path": "./tsconfig.node.json" + "path": "./tsconfig.app.json" }, { - "path": "../redux-utils/tsconfig.json" + "path": "./tsconfig.spec.json" } ] } diff --git a/packages/react-formio/tsconfig.node.json b/packages/react-formio/tsconfig.node.json deleted file mode 100644 index 8ce10716..00000000 --- a/packages/react-formio/tsconfig.node.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "module": "esnext", - "moduleResolution": "node" - }, - "include": [] -} diff --git a/packages/react-formio/tsconfig.spec.json b/packages/react-formio/tsconfig.spec.json new file mode 100644 index 00000000..fe01da05 --- /dev/null +++ b/packages/react-formio/tsconfig.spec.json @@ -0,0 +1,14 @@ +{ + "extends": "@tsed/typescript/tsconfig.web.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": ".", + "declaration": false, + "composite": false, + "noEmit": true, + "paths": {}, + "types": ["vite/client", "vitest/globals", "@testing-library/jest-dom"] + }, + "include": ["src/**/*.spec.tsx", "src/**/*.spec.ts", "vitest.config.mts"], + "exclude": ["node_modules", "dist", "coverage"] +} diff --git a/packages/react-formio/vite.config.mts b/packages/react-formio/vite.config.mts new file mode 100644 index 00000000..e070aa69 --- /dev/null +++ b/packages/react-formio/vite.config.mts @@ -0,0 +1,69 @@ +import {fileURLToPath} from "node:url"; + +import react from "@vitejs/plugin-react"; +import {globbySync} from "globby"; +import {extname, relative} from "path"; +import preserveDirectives from "rollup-preserve-directives"; +import {defineConfig} from "vite"; +import dts from "vite-plugin-dts"; +import {resolve} from "node:path"; + +import pkg from "./package.json" with {type: "json"}; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + react(), + dts({ + tsconfigPath: "./tsconfig.app.json", + aliasesExclude: [], + include: ["src/**/*.{ts,tsx}"], + exclude: ["**/*.spec.{ts,tsx}", "**/*.stories.{ts,tsx}", "**/__*__/**"] + }) + ], + resolve: { + alias: {} + }, + build: { + sourcemap: true, + lib: { + entry: resolve(import.meta.dirname, "src/index.ts"), + formats: ["es"] + }, + copyPublicDir: false, + rollupOptions: { + external: [ + ...Object.keys(pkg.peerDependencies || {}), + "react", + "react-dom", + "react/jsx-runtime", + /lodash\/.*/, + /formiojs\/.*/, + /@tsed\/.*/ + ], + plugins: [preserveDirectives() as any], + input: Object.fromEntries( + globbySync("src/**/*.{ts,tsx}", { + ignore: ["**/*.spec.{ts,tsx}", "**/*.stories.{ts,tsx}", "**/__*__/**"] + }).map((file) => { + return [ + // The name of the entry point + // src/nested/foo.ts becomes nested/foo + relative("src", file.slice(0, file.length - extname(file).length)), + // The absolute path to the entry file + // src/nested/foo.ts becomes /project/src/nested/foo.ts + fileURLToPath(new URL(file, import.meta.url)) + ]; + }) + ), + output: { + assetFileNames: "assets/[name][extname]", + chunkFileNames: "chunks/[name].js", + entryFileNames: "[name].js", + globals: { + react: "React" + } + } + } + } +}); diff --git a/packages/react-formio/vitest.config.mts b/packages/react-formio/vitest.config.mts new file mode 100644 index 00000000..d759e817 --- /dev/null +++ b/packages/react-formio/vitest.config.mts @@ -0,0 +1,21 @@ +// @ts-ignore +import {presets} from "@tsed/vitest/presets"; +import {defineConfig} from "vitest/config"; + +export default defineConfig( + { + ...presets, + test: { + ...presets.test, + coverage: { + ...presets.test.coverage, + thresholds: { + statements: 0, + branches: 0, + functions: 0, + lines: 0 + } + } + } + } +); diff --git a/packages/redux-utils/.eslintignore b/packages/redux-utils/.eslintignore deleted file mode 100644 index 474be905..00000000 --- a/packages/redux-utils/.eslintignore +++ /dev/null @@ -1,13 +0,0 @@ -**/node_modules -docs -docs-references -**/lib -**/build -**/dist -**/coverage -**/.nyc_output -**/node_modules -*-lock.json -*.lock -benchmarks.* -**/generated diff --git a/packages/redux-utils/.eslintrc.js b/packages/redux-utils/.eslintrc.js deleted file mode 100644 index 5cf0a5ac..00000000 --- a/packages/redux-utils/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: [require.resolve("@tsed/config/eslint/web")] -}; diff --git a/packages/redux-utils/coverage.json b/packages/redux-utils/coverage.json deleted file mode 100644 index adb66002..00000000 --- a/packages/redux-utils/coverage.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "statements": 83.33, - "branches": 100, - "functions": 66.66, - "lines": 84.21 -} diff --git a/packages/redux-utils/jest.config.js b/packages/redux-utils/jest.config.js deleted file mode 100644 index fe16413a..00000000 --- a/packages/redux-utils/jest.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - ...require("@tsed/config/jest/jest.web.config.js"), - coverageThreshold: { - global: require("./coverage.json") - } -}; diff --git a/packages/redux-utils/package.json b/packages/redux-utils/package.json index 34ff90a2..2796fd84 100644 --- a/packages/redux-utils/package.json +++ b/packages/redux-utils/package.json @@ -1,29 +1,31 @@ { "name": "@tsed/redux-utils", "version": "2.3.2", - "main": "dist/index.js", - "module": "dist/index.modern.js", - "source": "src/index.tsx", "description": "An opinionated lib to create actions and reducers for Redux written in TypeScript", + "type": "module", + "main": "dist/index.js", + "module": "dist/index.js", + "source": "src/index.ts", "author": "Romain Lenzotti", "license": "MIT", "exports": { ".": { - "import": "./dist/index.modern.js", - "require": "./dist/index.js" + "types": "./dist/index.d.ts", + "tsed-source": "./src/index.ts", + "default": "./dist/index.js" } }, "scripts": { - "test": "cross-env NODE_ENV=test jest --coverage", - "test:coverage:update": "write-coverage", - "build": "microbundle --no-compress --format modern,cjs --jsx React.createElement", - "watch": "microbundle watch --no-compress --format modern,cjs --jsx React.createElement" + "test": "vitest run --coverage", + "build": "vite build", + "watch": "vite watch" }, "devDependencies": { - "@tsed/config": "workspace:*" + "vite": "5.4.11", + "vitest": "2.1.8" }, "peerDependencies": { - "react": "^18.2.0", + "react": "^18.3.1", "redux": "^4.0.5" } } diff --git a/packages/redux-utils/src/index.tsx b/packages/redux-utils/src/index.ts similarity index 100% rename from packages/redux-utils/src/index.tsx rename to packages/redux-utils/src/index.ts diff --git a/packages/redux-utils/tsconfig.app.json b/packages/redux-utils/tsconfig.app.json new file mode 100644 index 00000000..85f0596c --- /dev/null +++ b/packages/redux-utils/tsconfig.app.json @@ -0,0 +1,11 @@ +{ + "extends": "@tsed/typescript/tsconfig.web.json", + "compilerOptions": { + "baseUrl": ".", + "noEmit": true, + "declaration": false, + "composite": false + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "vite.config.mts"], + "exclude": ["node_modules", "dist", "src/**/*.spec.ts", "src/**/*.spec.tsx"] +} diff --git a/packages/redux-utils/tsconfig.json b/packages/redux-utils/tsconfig.json index cab986cd..1980d5af 100644 --- a/packages/redux-utils/tsconfig.json +++ b/packages/redux-utils/tsconfig.json @@ -1,30 +1,15 @@ { "compilerOptions": { - "outDir": "dist", - "module": "esnext", - "lib": ["dom", "esnext"], - "moduleResolution": "node", - "jsx": "react", - "sourceMap": true, - "declaration": true, - "esModuleInterop": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noImplicitAny": true, - "strictNullChecks": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "allowSyntheticDefaultImports": true, - "target": "es5", - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noFallthroughCasesInSwitch": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true + "baseUrl": ".", + "composite": true }, - "include": ["src"], - "exclude": ["node_modules", "dist", "example"] + "include": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] } diff --git a/packages/redux-utils/tsconfig.spec.json b/packages/redux-utils/tsconfig.spec.json new file mode 100644 index 00000000..804fff86 --- /dev/null +++ b/packages/redux-utils/tsconfig.spec.json @@ -0,0 +1,14 @@ +{ + "extends": "@tsed/typescript/tsconfig.web.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": ".", + "declaration": false, + "composite": false, + "noEmit": true, + "paths": {}, + "types": ["vite/client", "vitest/globals", "@testing-library/jest-dom"] + }, + "include": ["src/**/*.spec.ts", "test/**/*.spec.ts", "vitest.config.mts"], + "exclude": ["node_modules", "lib", "benchmark", "coverage"] +} diff --git a/packages/redux-utils/tsconfig.test.json b/packages/redux-utils/tsconfig.test.json deleted file mode 100644 index 2c7b2841..00000000 --- a/packages/redux-utils/tsconfig.test.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "module": "commonjs" - } -} diff --git a/packages/redux-utils/vite.config.mts b/packages/redux-utils/vite.config.mts new file mode 100644 index 00000000..3d062040 --- /dev/null +++ b/packages/redux-utils/vite.config.mts @@ -0,0 +1,68 @@ +import {fileURLToPath} from "node:url"; + +import react from "@vitejs/plugin-react"; +import {globbySync} from "globby"; +import {extname, relative} from "path"; +import preserveDirectives from "rollup-preserve-directives"; +import {defineConfig} from "vite"; +import dts from "vite-plugin-dts"; +import {resolve} from "node:path"; +import pkg from "./package.json" with {type: "json"}; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + react(), + dts({ + tsconfigPath: "./tsconfig.app.json", + aliasesExclude: [], + include: ["src/**/*.{ts,tsx}"], + exclude: ["**/*.spec.{ts,tsx}", "**/*.stories.{ts,tsx}", "**/__*__/**"] + }) + ], + resolve: { + alias: {} + }, + build: { + sourcemap: true, + lib: { + entry: resolve(import.meta.dirname, "src/index.ts"), + formats: ["es"] + }, + copyPublicDir: false, + rollupOptions: { + external: [ + ...Object.keys(pkg.peerDependencies || {}), + "react", + "react-dom", + "react/jsx-runtime", + /lodash\/.*/, + /formiojs\/.*/, + /@tsed\/.*/ + ], + plugins: [preserveDirectives() as any], + input: Object.fromEntries( + globbySync("src/**/*.{ts,tsx}", { + ignore: ["**/*.spec.{ts,tsx}", "**/*.stories.{ts,tsx}", "**/__*__/**"] + }).map((file) => { + return [ + // The name of the entry point + // src/nested/foo.ts becomes nested/foo + relative("src", file.slice(0, file.length - extname(file).length)), + // The absolute path to the entry file + // src/nested/foo.ts becomes /project/src/nested/foo.ts + fileURLToPath(new URL(file, import.meta.url)) + ]; + }) + ), + output: { + assetFileNames: "assets/[name][extname]", + chunkFileNames: "chunks/[name].js", + entryFileNames: "[name].js", + globals: { + react: "React" + } + } + } + } +}); diff --git a/packages/redux-utils/vitest.config.mts b/packages/redux-utils/vitest.config.mts new file mode 100644 index 00000000..d759e817 --- /dev/null +++ b/packages/redux-utils/vitest.config.mts @@ -0,0 +1,21 @@ +// @ts-ignore +import {presets} from "@tsed/vitest/presets"; +import {defineConfig} from "vitest/config"; + +export default defineConfig( + { + ...presets, + test: { + ...presets.test, + coverage: { + ...presets.test.coverage, + thresholds: { + statements: 0, + branches: 0, + functions: 0, + lines: 0 + } + } + } + } +); diff --git a/packages/tailwind-formio/package.json b/packages/tailwind-formio/package.json index 2eba66a4..2d276846 100644 --- a/packages/tailwind-formio/package.json +++ b/packages/tailwind-formio/package.json @@ -2,21 +2,39 @@ "name": "@tsed/tailwind-formio", "version": "2.3.2", "description": "Tailwind templates for form.io forms.", + "type": "module", "main": "dist/index.js", "module": "dist/index.js", "source": "src/index.ts", - "type": "module", "exports": { - ".": "./dist/index.js", - "./tailwind.preset": "./dist/tailwind/tailwind.preset.js" + ".": { + "types": "./dist/index.d.ts", + "tsed-source": "./src/index.ts", + "default": "./dist/index.js" + }, + "./styles/*": "./styles/*", + "./tailwind.preset": { + "types": "./dist/tailwind/preset.d.ts", + "default": "./dist/tailwind/preset.js" + }, + "./tailwind.colors": { + "types": "./dist/tailwind/colors.d.ts", + "default": "./dist/tailwind/colors.js" + } }, "scripts": { - "build": "vite build", - "watch": "vite watch" + "build": "vite build && yarn tailwind:build", + "watch": "vite build --watch", + "tailwind:build": "tailwindcss build -o build/tailwind.css && yarn tailwind:build:viewer", + "start:tailwind:viewer": "tailwind-config-viewer -o", + "tailwind:build:viewer": "tailwind-config-viewer export ./build && cp ./build/index.html ./build/tailwind.html && yarn clean:tailwind:viewer", + "clean:tailwind:viewer": "rimraf build/index.html build/favicon.ico" }, "devDependencies": { - "@tsed/tailwind": "workspace:*", "cross-env": "7.0.3", + "rimraf": "3.0.2", + "tailwind-config-viewer": "2.0.4", + "tailwindcss": "3.4.17", "vite": "5.4.11", "vite-plugin-ejs": "1.7.0" }, diff --git a/packages/tailwind-formio/readme.md b/packages/tailwind-formio/readme.md index e655057d..483a487e 100644 --- a/packages/tailwind-formio/readme.md +++ b/packages/tailwind-formio/readme.md @@ -79,12 +79,18 @@ npx tailwindcss-cli@latest init Edit the `tailwind.config.js` and copy the following content: ```js +import { tailwindPreset } from "@tsed/tailwind-formio/tailwind.preset"; + const primary = "hsla(208, 100%, 43%, 1)"; const secondary = "hsla(190, 81%, 42%, 1)"; module.exports = { - purge: [], - darkMode: false, // or 'media' or 'class' + content: [ + "./node_modules/**/*.{js,jsx,ts,tsx,ejs}" + // add your paths + ], + presets: [], + darkMode: "class", theme: { extend: { colors: { @@ -115,131 +121,9 @@ module.exports = { 900: "hsla(190, 81%, 20%, 1)" }, "gray-darker": "#504747" - }, - spacing: { - 7.5: "1.875rem", // 30px - 15: "3.75rem", // 60px - 22: "5.5rem", // 88px - 25: "6.25rem", // 100px - 26: "6.5rem", // 104px - 30: "8.5rem", // 136px - 32: "9rem", // 144px - 68: "17rem" // 272px - }, - padding: { - px: "1px" - }, - margin: { - px: "1px", - "-px": "-1px", - "-2px": "-2px", - auto: "auto" - }, - fontSize: { - micro: ".5rem", // 8px - xxs: ".625rem", // 10px - md: "1.125rem" // 18px - }, - fontWeight: { - hairline: 100 - }, - fontFamily: { - brand: ["Source Sans Pro", "sans-serif"], - sans: ["Source Sans Pro", "sans-serif"], - serif: ["Source Sans Pro", "sans-serif"], - inconsolata: ["Inconsolata"], - source: ["source-code-pro", "Menlo", "Monaco", "Consolas", "Courier New", "monospace"] - }, - minWidth: { - site: "18.75rem", - "input-mini": "17.5rem", - "input-small": "31.25rem", - "input-medium": "36.3125rem", - "input-large": "61.45rem", - "button-mini": "5.5rem", - "button-small": "7rem", - "button-medium": "9.875rem", - "button-large": "10rem" - }, - width: { - arrow: ".8rem", - "3/10": "30%", - "7/10": "70%", - "9/10": "90%", - "12/25": "48%" - }, - maxWidth: { - sm: "30rem", - md: "40rem", - lg: "50rem", - xl: "60rem", - "2xl": "70rem", - "3xl": "80rem", - "4xl": "90rem", - "5xl": "100rem", - "1/4": "25%", - "1/2": "50%", - "3/5": "60%", - "4/5": "80%", - "9/10": "90%", - "site-mini": "17.5rem", - "site-small": "31.25rem", - "site-medium": "43.75rem", - "site-large": "56.25rem", - site: "73.75rem", - screen: "100vw" - }, - height: { - arrow: ".4rem", - px: "1px", - 4: "1rem", - 5: "1.25rem", - 8: "1.8rem", - 9: "2.25rem", - 10: "2.5rem", - 11: "2.75rem", - 12: "3rem", - 16: "4rem", - 24: "6rem", - 32: "8rem" - }, - borderWidth: { - 1: "1px", - 5: "5px" - }, - borderRadius: { - half: "50%", - full: "100%" - }, - zIndex: { - 1: 1, - 2: 2, - 3: 3, - 4: 4, - 5: 5, - 6: 6 - }, - fill: { - transparent: "transparent" - }, - flex: { - 2: "2 2 0%", - 3: "3 3 0%" } - }, - outline: { - none: ["2px solid transparent", "2px"], - white: ["2px dotted white", "2px"], - black: ["2px dotted black", "2px"] } - }, - variants: { - extend: {} - }, - corePlugins: { - borderCollapse: true - }, - plugins: [] + } }; ``` diff --git a/packages/tailwind-formio/src/tailwind/colors.ts b/packages/tailwind-formio/src/tailwind/colors.ts new file mode 100644 index 00000000..c73722d7 --- /dev/null +++ b/packages/tailwind-formio/src/tailwind/colors.ts @@ -0,0 +1,20 @@ +import colors from "tailwindcss/colors.js"; + +import { tailwindPreset } from "./preset.js"; + +const mergedColors = { + ...colors, + ...tailwindPreset.theme.extend.colors +}; + +export { mergedColors as colors }; +export const COLORS = Object.keys(mergedColors).reduce((obj, key) => { + return { + ...obj, + [key]: key + }; +}, {}); + +export const COLORS_LIST = Object.keys(COLORS) + .filter((key) => !["current"].includes(key) && !key.match("-active")) + .sort((a, b) => (a < b ? -1 : 1)); diff --git a/packages/tailwind/tailwind.config.js b/packages/tailwind-formio/src/tailwind/preset.ts similarity index 94% rename from packages/tailwind/tailwind.config.js rename to packages/tailwind-formio/src/tailwind/preset.ts index 3107177c..97485621 100644 --- a/packages/tailwind/tailwind.config.js +++ b/packages/tailwind-formio/src/tailwind/preset.ts @@ -1,9 +1,10 @@ +import type { Config } from "tailwindcss"; + const primary = "hsla(208, 100%, 43%, 1)"; const secondary = "hsla(190, 81%, 42%, 1)"; -export default { +export const tailwindPreset = { content: [], - darkMode: false, // or 'media' or 'class' theme: { extend: { colors: { @@ -60,7 +61,7 @@ export default { md: "1.125rem" // 18px }, fontWeight: { - hairline: 100 + hairline: "100" }, fontFamily: { brand: ["Source Sans Pro", "sans-serif"], @@ -131,12 +132,12 @@ export default { full: "100%" }, zIndex: { - 1: 1, - 2: 2, - 3: 3, - 4: 4, - 5: 5, - 6: 6 + 1: "1", + 2: "2", + 3: "3", + 4: "4", + 5: "5", + 6: "6" }, fill: { transparent: "transparent" @@ -159,4 +160,4 @@ export default { borderCollapse: true }, plugins: [] -}; +} satisfies Config; diff --git a/packages/tailwind-formio/src/tailwind/tailwind.preset.ts b/packages/tailwind-formio/src/tailwind/tailwind.preset.ts deleted file mode 100644 index 21dc5b18..00000000 --- a/packages/tailwind-formio/src/tailwind/tailwind.preset.ts +++ /dev/null @@ -1,300 +0,0 @@ -import type { Config } from "tailwindcss"; -import colors from "tailwindcss/colors"; - -const primary = "hsla(208, 100%, 43%, 1)"; -const secondary = "hsla(190, 81%, 42%, 1)"; - -export const tailwindPreset: Partial = { - content: [], - plugins: [ - require("tailwindcss-transforms")({ - "3d": false // defaults to false - }) - ], - theme: { - extends: { - colors: { - ...Object.entries(colors).reduce((colors, [key, obj]) => { - if (typeof obj === "object") { - obj = { - ...obj, - DEFAULT: obj[600] - }; - } - return { - ...colors, - [key]: obj - }; - }, {}), - current: "currentColor", - transparent: "transparent", - inherit: "inherit", - - // brand - primary: { - DEFAULT: primary, - 50: "hsla(208, 100%, 91%, 1)", - 100: "hsla(208, 100%, 83%, 1)", - 200: "hsla(208, 100%, 75%, 1)", - 300: "hsla(208, 100%, 67%, 1)", - 400: "hsla(208, 100%, 59%, 1)", - 500: "hsla(208, 100%, 51%, 1)", - 600: primary, - 700: "hsla(208, 100%, 35%, 1)", - 800: "hsla(208, 100%, 27%, 1)", - 900: "hsla(208, 100%, 19%, 1)" - }, - - "primary-active": secondary, - - secondary: { - DEFAULT: secondary, - 50: "hsla(190, 81%, 90%, 1)", - 100: "hsla(190, 81%, 82%, 1)", - 200: "hsla(190, 81%, 74%, 1)", - 300: "hsla(190, 81%, 66%, 1)", - 400: "hsla(190, 81%, 58%, 1)", - 500: "hsla(190, 81%, 50%, 1)", - 600: secondary, - 700: "hsla(190, 81%, 34%, 1)", - 800: "hsla(190, 81%, 28%, 1)", - 900: "hsla(190, 81%, 20%, 1)" - }, - - white: "hsla(0, 100%, 100%, 1)", // #ffffff - black: "#000", - - /* Gray colors */ - "gray-lighter": "#f7f7f7", - "gray-lighter-active": "hsla(0, 0%, 92%, 1)", - "gray-light": "#d4d1d1", - "gray-medium": "#a8a0a0", - "gray-dark": "#998e8e", - "gray-darker": "#504747" - }, - spacing: { - 0: "0", - 1: ".25rem", // 4px - 1.5: ".375rem", // 6px - 2: ".5rem", // 8px - 2.5: ".625rem", // 10px - 3: ".75rem", // 12px - 4: "1rem", // 16px - 5: "1.25rem", // 20px - 6: "1.5rem", // 24px - 7: "1.75rem", // 24px - 7.5: "1.875rem", // 30px - 8: "2rem", // 32px - 9: "2.25rem", // 36px - 10: "2.5rem", // 40px - 11: "2.75rem", // 44px - 12: "3rem", // 48px - 15: "3.75rem", // 60px - 16: "4rem", // 64px - 20: "5rem", // 80px - 22: "5.5rem", // 88px - 24: "6rem", // 96px - 25: "6.25rem", // 100px - 26: "6.5rem", // 104px - 28: "8rem", // 128px - 30: "8.5rem", // 136px - 32: "9rem", // 144px - 48: "12rem", // 192px - 52: "13rem", // 208px - 56: "14rem", // 224px - 60: "15rem", // 240px - 68: "17rem" // 272px - }, - screens: { - // xs: '22.51em', /* 360px */ - sm: "40.01em" /* 640px --r-minS (phablet) */, - md: "50.01em" /* 800px --r-minM (tablet) */, - lg: "64.01em" /* 1024px --r-minL (desktop) */, - xl: "76.26em" /* 1220px */ - }, - - // translate: { - // down: "-100%" - // "right-up": ["100%", "-100%"] - // "3d": ["40px", "-60px", "-130px"] - // }, - - fontFamily: { - brand: ["Source Sans Pro", "sans-serif"], - sans: ["Source Sans Pro", "sans-serif"], - serif: ["Source Sans Pro", "sans-serif"], - inconsolata: ["Inconsolata"], - source: ["source-code-pro", "Menlo", "Monaco", "Consolas", "Courier New", "monospace"] - }, - - fontSize: { - micro: ".5rem", // 8px - xxs: ".625rem", // 10px - xs: ".75rem", // 12px - sm: ".875rem", // 14px - base: "1rem", // 16px - md: "1.125rem", // 18px - lg: "1.25rem", // 20px - xl: "1.5rem", // 24px - "2xl": "1.75rem", // 28px - "3xl": "2rem", // 32px - "4xl": "2.25rem", // 36px - "5xl": "2.75rem", // 44px - "7xl": "3.75rem", // 60px - "11xl": "4.75rem" // 76px - }, - - borderWidth: { - 1: "1px", - 5: "5px" - }, - - borderColor: (theme: any) => ({ - DEFAULT: theme("colors.gray-light", "current") - }), - - borderRadius: { - half: "50%", - full: "100%" - }, - - width: { - auto: "auto", - px: "1px", - "1/5": "20%", - "3/10": "30%", - "7/10": "70%", - "9/10": "90%", - "12/25": "48%", - arrow: ".8rem" - }, - - height: { - auto: "auto", - px: "1px", - 0: "0", - 4: "1rem", - 5: "1.25rem", - 8: "1.8rem", - 9: "2.25rem", - 10: "2.5rem", - 11: "2.75rem", - 12: "3rem", - 16: "4rem", - 24: "6rem", - 32: "8rem", - arrow: ".4rem" - }, - - minWidth: { - 0: "0px", - full: "100%", - min: "min-content", - max: "max-content", - site: "18.75rem", - "input-mini": "17.5rem", - "input-small": "31.25rem", - "input-medium": "36.3125rem", - "input-large": "61.45rem", - "button-mini": "5.5rem", - "button-small": "7rem", - "button-medium": "9.875rem", - "button-large": "10rem" - }, - - maxWidth: { - xs: "20rem", - sm: "30rem", - md: "40rem", - lg: "50rem", - xl: "60rem", - "2xl": "70rem", - "3xl": "80rem", - "4xl": "90rem", - "5xl": "100rem", - "1/4": "25%", - "1/2": "50%", - "3/5": "60%", - "4/5": "80%", - "9/10": "90%", - "site-mini": "17.5rem", - "site-small": "31.25rem", - "site-medium": "43.75rem", - "site-large": "56.25rem", - site: "73.75rem", - full: "100%", - screen: "100vw" - }, - - maxHeight: (theme: any) => ({ - ...theme("spacing"), - full: "100%", - screen: "100vh" - }), - - padding: (theme: any) => ({ - ...theme("spacing"), - px: "1px" - }), - - margin: (theme: any, { negative }: any) => ({ - px: "1px", - "-px": "-1px", - "-2px": "-2px", - auto: "auto", - ...theme("spacing"), - ...negative(theme("spacing")) - }), - - // zIndex: { - // auto: "auto", - // 0: 0, - // 1: 1, - // 2: 2, - // 3: 3, - // 4: 4, - // 5: 5, - // 6: 6, - // 10: 10, - // 20: 20, - // 30: 30, - // 40: 40, - // 50: 50 - // }, - - // fill: { - // current: "currentColor", - // transparent: "transparent" - // }, - // - // stroke: { - // current: "currentColor" - // }, - - // flex: { - // 1: "1 1 0%", - // auto: "1 1 auto", - // initial: "0 1 auto", - // none: "none", - // 2: "2 2 0%", - // 3: "3 3 0%" - // }, - - outline: { - none: ["2px solid transparent", "2px"], - white: ["2px dotted white", "2px"], - black: ["2px dotted black", "2px"] - } - } - }, - corePlugins: { - backgroundAttachment: false, - borderCollapse: true, - letterSpacing: false, - userSelect: false - }, - purge: { - enabled: false, - content: [] - } -}; diff --git a/packages/tailwind-formio/src/templates/stories/breadcrumbs.stories.jsx b/packages/tailwind-formio/src/templates/stories/breadcrumbs.stories.jsx index 7f11ca3b..d2b90a8a 100644 --- a/packages/tailwind-formio/src/templates/stories/breadcrumbs.stories.jsx +++ b/packages/tailwind-formio/src/templates/stories/breadcrumbs.stories.jsx @@ -1,6 +1,7 @@ -import { COLORS_LIST } from "@tsed/tailwind/colors"; import React from "react"; +import { COLORS_LIST } from "../../tailwind/colors.ts"; + export default { title: "Formiojs/Breadcrumbs", argTypes: { diff --git a/packages/tailwind-formio/src/templates/tailwind/builderEditForm/form.ejs b/packages/tailwind-formio/src/templates/tailwind/builderEditForm/form.ejs index 0a5a083a..e882a387 100644 --- a/packages/tailwind-formio/src/templates/tailwind/builderEditForm/form.ejs +++ b/packages/tailwind-formio/src/templates/tailwind/builderEditForm/form.ejs @@ -47,14 +47,16 @@
diff --git a/packages/tailwind-formio/src/templates/tailwind/builderSidebarGroup/form.ejs b/packages/tailwind-formio/src/templates/tailwind/builderSidebarGroup/form.ejs index ec2f1768..2fd57c53 100644 --- a/packages/tailwind-formio/src/templates/tailwind/builderSidebarGroup/form.ejs +++ b/packages/tailwind-formio/src/templates/tailwind/builderSidebarGroup/form.ejs @@ -17,7 +17,7 @@
{ const opts = { diff --git a/packages/tailwind/build-colors.js b/packages/tailwind/build-colors.js deleted file mode 100644 index d5d428c2..00000000 --- a/packages/tailwind/build-colors.js +++ /dev/null @@ -1,14 +0,0 @@ -import fs from "node:fs/promises"; - -import colors from "tailwindcss/colors.js"; - -import tailwindConfig from "./tailwind.config.js"; - -const mergedColors = { - ...colors, - ...tailwindConfig.theme.extend.colors -}; - -await fs.mkdir("./dist", { recursive: true }).catch(() => {}); - -await fs.writeFile("./dist/colors.json", JSON.stringify(mergedColors, null, 2), { encoding: "utf8" }); diff --git a/packages/tailwind/colors.js b/packages/tailwind/colors.js deleted file mode 100644 index bd7a4505..00000000 --- a/packages/tailwind/colors.js +++ /dev/null @@ -1,12 +0,0 @@ -import colors from "./dist/colors.json"; - -export const COLORS = Object.keys(colors).reduce((obj, key) => { - return { - ...obj, - [key]: key - }; -}, {}); - -export const COLORS_LIST = Object.keys(COLORS) - .filter((key) => !["current"].includes(key) && !key.match("-active")) - .sort((a, b) => (a < b ? -1 : 1)); diff --git a/packages/tailwind/package.json b/packages/tailwind/package.json deleted file mode 100644 index 1198dd89..00000000 --- a/packages/tailwind/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "@tsed/tailwind", - "version": "2.3.2", - "type": "module", - "main": "./tailwind.config.js", - "module": "./tailwind.config.js", - "description": "Tailwind configuration", - "license": "MIT", - "private": true, - "exports": { - ".": { - "source": "./tailwind.config.js", - "default": "./tailwind.config.js" - } - }, - "scripts": { - "build": "node ./build-colors.js", - "tailwind:build": "tailwindcss-cli build -o build/tailwind.css && yarn tailwind:build:viewer", - "start:tailwind:viewer": "tailwind-config-viewer -o", - "tailwind:build:viewer": "tailwind-config-viewer export ./build && cp ./build/index.html ./build/tailwind.html && yarn clean:tailwind:viewer", - "clean:tailwind:viewer": "rimraf build/index.html build/favicon.ico" - }, - "devDependencies": { - "rimraf": "3.0.2", - "tailwind-config-viewer": "^1.3.1", - "tailwindcss": "3.4.17", - "tailwindcss-cli": "0.1.2", - "tailwindcss-inset": "1.0.0", - "tailwindcss-transforms": "2.2.0" - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - } -} diff --git a/tailwind.config.cjs b/tailwind.config.cjs deleted file mode 100644 index 0f770ec6..00000000 --- a/tailwind.config.cjs +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("@tsed/tailwind"); diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 00000000..fcd0ea0b --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,7 @@ +import { tailwindPreset } from "@tsed/tailwind-formio/tailwind.preset"; + +export default { + content: ["packages/*/src/**/*.{js,jsx,ts,tsx,mdx,ejs}"], + darkMode: "class", // or 'media' or 'class' + presets: [tailwindPreset] +}; diff --git a/tools/vitest/package.json b/tools/vitest/package.json index 0a5df986..82276b7c 100644 --- a/tools/vitest/package.json +++ b/tools/vitest/package.json @@ -6,6 +6,7 @@ "exports": { ".": "./index.js", "./plugins/*": "./plugins/*", + "./setup/*": "./setup/*", "./presets": "./presets/index.js" }, "devDependencies": { diff --git a/tools/vitest/presets/index.js b/tools/vitest/presets/index.js index cef1aebb..c510d844 100644 --- a/tools/vitest/presets/index.js +++ b/tools/vitest/presets/index.js @@ -1,12 +1,15 @@ +import { join } from "node:path"; + import { defineConfig } from "vitest/config"; export const presets = defineConfig({ resolve: { - // alias + conditions: ["tsed-source"] }, test: { globals: true, - environment: "happy-dom", + environment: "jsdom", + setupFiles: join(import.meta.dirname, "../setup/setup.ts"), coverage: { enabled: true, reporter: ["text", "json", "html"], diff --git a/tools/vitest/setup/setup.ts b/tools/vitest/setup/setup.ts new file mode 100644 index 00000000..ec655d17 --- /dev/null +++ b/tools/vitest/setup/setup.ts @@ -0,0 +1,17 @@ +import "@testing-library/jest-dom/vitest"; + +import { vi } from "vitest"; + +Object.defineProperty(globalThis, "matchMedia", { + writable: true, + value: vi.fn().mockImplementation((query) => ({ + matches: false, + media: query, + onchange: null, + addListener: vi.fn(), // deprecated + removeListener: vi.fn(), // deprecated + addEventListener: vi.fn(), + removeEventListener: vi.fn(), + dispatchEvent: vi.fn() + })) +}); diff --git a/tools/vitest/tsconfig.json b/tools/vitest/tsconfig.json index a95cd299..7656152e 100644 --- a/tools/vitest/tsconfig.json +++ b/tools/vitest/tsconfig.json @@ -2,5 +2,5 @@ "compilerOptions": { "noEmit": true }, - "include": ["templates/**"] + "include": ["templates/**", "setup/**"] } diff --git a/vite.config.mts b/vite.config.mts index 9f8d716f..bd4a1ee8 100644 --- a/vite.config.mts +++ b/vite.config.mts @@ -1,11 +1,47 @@ import react from "@vitejs/plugin-react"; -import { defineConfig } from "vite"; +import {defineConfig} from "vite"; import svgr from "vite-plugin-svgr"; +import compile from "lodash/template"; + +const ejsPlugin = () => { + const opts = { + evaluate: /\{%([\s\S]+?)%\}/g, + interpolate: /\{\{([\s\S]+?)\}\}/g, + escape: /\{\{\{([\s\S]+?)\}\}\}/g, + variable: "ctx" + }; + + return { + name: "vite-plugin-ejs", + transform(src: string, id: string) { + // Vérifie si le fichier est un fichier .ejs + if (id.endsWith(".ejs")) { + const template = compile(src, opts); + + // Renvoie le contenu JavaScript + return { + code: `export default ${template.toString()}`, + map: null + }; + } + } + }; +}; export default defineConfig({ // @ts-ignore - plugins: [react(), svgr()], + plugins: [ejsPlugin(), react(), svgr()], base: "./", + resolve: { + conditions: [ + "tsed-source", + "import", + "module", + "browser", + "default" + ], + alias: {} + }, define: { "process.env.NODE_ENV": `'${process.env.NODE_ENV}'` } diff --git a/vitest.workspace.mts b/vitest.workspace.mts new file mode 100644 index 00000000..7f5ae940 --- /dev/null +++ b/vitest.workspace.mts @@ -0,0 +1,3 @@ +export default [ + 'packages/**/vitest.config.{mts,ts}', +] diff --git a/yarn.lock b/yarn.lock index 8a66c8b7..a6ac8392 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,13 +5,6 @@ __metadata: version: 8 cacheKey: 10c0 -"@adobe/css-tools@npm:^4.0.1": - version: 4.2.0 - resolution: "@adobe/css-tools@npm:4.2.0" - checksum: 10c0/b8dbfd9c54df73a398e9b20c922abe26c67732e16afc50668402af0e3d101409e0c944baf69bf814343eb8639014637b96f209426088b06943cea288c1ef1486 - languageName: node - linkType: hard - "@adobe/css-tools@npm:^4.4.0": version: 4.4.1 resolution: "@adobe/css-tools@npm:4.4.1" @@ -1668,7 +1661,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": version: 7.22.3 resolution: "@babel/runtime@npm:7.22.3" dependencies: @@ -1677,6 +1670,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.20.6": + version: 7.26.0 + resolution: "@babel/runtime@npm:7.26.0" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: 10c0/12c01357e0345f89f4f7e8c0e81921f2a3e3e101f06e8eaa18a382b517376520cd2fa8c237726eb094dab25532855df28a7baaf1c26342b52782f6936b07c287 + languageName: node + linkType: hard + "@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.21.9, @babel/template@npm:^7.3.3": version: 7.21.9 resolution: "@babel/template@npm:7.21.9" @@ -2416,12 +2418,23 @@ __metadata: languageName: node linkType: hard -"@formio/bootstrap3@npm:^2.12.2": - version: 2.12.2 - resolution: "@formio/bootstrap3@npm:2.12.2" +"@formio/bootstrap3@npm:2.12.4-rc.1": + version: 2.12.4-rc.1 + resolution: "@formio/bootstrap3@npm:2.12.4-rc.1" dependencies: resize-observer-polyfill: "npm:^1.5.1" - checksum: 10c0/da4bf85619baff5d7c90d82987aa0cacd30b08f2a311ddf7911b721d591551d4607bc1d9fe21fb4568fb561a263104e6e3497f9edda2059ea44e863e35d825ce + checksum: 10c0/22dd4449026f3d87f47dc706de9eef77846da3f0a97abf62a5747a69234943a3f7fdde4d6692e0e0d1239adfd8ecc33b2680963880696b73aed533ed1209ebb0 + languageName: node + linkType: hard + +"@formio/choices.js@npm:10.2.1": + version: 10.2.1 + resolution: "@formio/choices.js@npm:10.2.1" + dependencies: + deepmerge: "npm:^4.2.2" + fuse.js: "npm:^6.6.2" + redux: "npm:^4.2.0" + checksum: 10c0/59491b4e15fa92d26ea1cb8136380f5273f502f500c77b6ee39b5713bb1e08c3abc4fe3f2be9fe71958781433ea13e76ba37a1a1cc514f69a80e4e9a87a32bcb languageName: node linkType: hard @@ -2436,17 +2449,17 @@ __metadata: languageName: node linkType: hard -"@formio/semantic@npm:^2.6.0": - version: 2.6.0 - resolution: "@formio/semantic@npm:2.6.0" - checksum: 10c0/d32f305ca7d92198214a889d59de71017a091d683bfb5f6d0ede84d3233d45bdde9de4e3bc58b851c083759a8cbbead8ce842fc3116b258ca9a6bad8246f8934 +"@formio/semantic@npm:2.6.1": + version: 2.6.1 + resolution: "@formio/semantic@npm:2.6.1" + checksum: 10c0/295c372a1c2385920d5871f5ee8028fb2a8bd94fad1cedc285da477eb98c96a58fca7c2f03f376a575c635288922411522f3c01b562a80b14076747cdf5bf53b languageName: node linkType: hard -"@formio/text-mask-addons@npm:^3.8.0-formio.2": - version: 3.8.0-formio.2 - resolution: "@formio/text-mask-addons@npm:3.8.0-formio.2" - checksum: 10c0/1783e4f83b40be737681e84b4e37bea7982573e6cc3c45c0750bc0c7217fd1f69e41b96e8b1a741f009f995306f7eee9cc4e083cd70fb832862fd2b81eecd140 +"@formio/text-mask-addons@npm:^3.8.0-formio.4": + version: 3.8.0-formio.4 + resolution: "@formio/text-mask-addons@npm:3.8.0-formio.4" + checksum: 10c0/a594dcce0ddb289700fdc906114a54102e8726c98bcba108607f4641c16c012fcdd25219353b1b837b179ebf1da1f99df2715faffa79fdb93df2b172c2446525 languageName: node linkType: hard @@ -2644,15 +2657,6 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/expect-utils@npm:29.5.0" - dependencies: - jest-get-type: "npm:^29.4.3" - checksum: 10c0/e7f44de651b5ef71c6e1b7a0350a704258167c20b6e8165b3100346d5c7f8eb4cd2c229ea2c048e9161666d1c086fbbc422f111f3b77da3fb89a99d52d4b3690 - languageName: node - linkType: hard - "@jest/expect-utils@npm:^29.7.0": version: 29.7.0 resolution: "@jest/expect-utils@npm:29.7.0" @@ -2735,15 +2739,6 @@ __metadata: languageName: node linkType: hard -"@jest/schemas@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/schemas@npm:29.4.3" - dependencies: - "@sinclair/typebox": "npm:^0.25.16" - checksum: 10c0/8a35967cec454d1de2d5a58ab99b49a0ff798d1dce2d817bdd9960bb2f070493f767fbbf419e6a263860d3b1ef1e50ab609a76ae21b5f8c09bb0859e8f51a098 - languageName: node - linkType: hard - "@jest/schemas@npm:^29.6.3": version: 29.6.3 resolution: "@jest/schemas@npm:29.6.3" @@ -2824,20 +2819,6 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/types@npm:29.5.0" - dependencies: - "@jest/schemas": "npm:^29.4.3" - "@types/istanbul-lib-coverage": "npm:^2.0.0" - "@types/istanbul-reports": "npm:^3.0.0" - "@types/node": "npm:*" - "@types/yargs": "npm:^17.0.8" - chalk: "npm:^4.0.0" - checksum: 10c0/f1cccd2e9b00a985bfdac03517f906cdf7a481be3606c335f8ec08a7272b7cf700b23484ce323a912b374defb90d3ab88c643cf2a2f47635c1c4feacfa1c1b2d - languageName: node - linkType: hard - "@jest/types@npm:^29.6.3": version: 29.6.3 resolution: "@jest/types@npm:29.6.3" @@ -2969,16 +2950,16 @@ __metadata: languageName: node linkType: hard -"@koa/router@npm:^9.0.1": - version: 9.4.0 - resolution: "@koa/router@npm:9.4.0" +"@koa/router@npm:^12.0.1": + version: 12.0.2 + resolution: "@koa/router@npm:12.0.2" dependencies: - debug: "npm:^4.1.1" - http-errors: "npm:^1.7.3" + debug: "npm:^4.3.4" + http-errors: "npm:^2.0.0" koa-compose: "npm:^4.1.0" methods: "npm:^1.1.2" - path-to-regexp: "npm:^6.1.0" - checksum: 10c0/6ca18a586e0c48a8acb3093b2143c5488cf62953cad1478104c92e83569609054ece50b6842bd5627d8166cfa31d62bbd92940450013e8030186cf8632501078 + path-to-regexp: "npm:^6.3.0" + checksum: 10c0/9d33af8b5cb7e80cf2a17e156fe1821ad31ad672ff8e9df62a3af2d2e4a6f49abbbb7038edaea45ef078cabdd8a1ce595ad7da810e96b17c5b954ee46f7e554d languageName: node linkType: hard @@ -4363,13 +4344,6 @@ __metadata: languageName: node linkType: hard -"@sinclair/typebox@npm:^0.25.16": - version: 0.25.24 - resolution: "@sinclair/typebox@npm:0.25.24" - checksum: 10c0/2faf9878f3a65a1f2855add80b0fe8c6fe83f084ea1ab432fa7506e7c85c55ae121c4af516d089b5737f5fad23b3628fcc83a6a5df29030c3f611185ce0388ac - languageName: node - linkType: hard - "@sinclair/typebox@npm:^0.27.8": version: 0.27.8 resolution: "@sinclair/typebox@npm:0.27.8" @@ -5253,17 +5227,6 @@ __metadata: languageName: node linkType: hard -"@tanem/svg-injector@npm:^8.0.34": - version: 8.2.5 - resolution: "@tanem/svg-injector@npm:8.2.5" - dependencies: - "@babel/runtime": "npm:^7.12.13" - content-type: "npm:^1.0.4" - tslib: "npm:^2.1.0" - checksum: 10c0/94efe5eb99661671f9ad066383e3782011c35e023ba2e5924ed530e555c766d68bf1e6b1d3c422b01c5fa038977e23873c7e20de1c40d5a4f3719dd9c25c8c50 - languageName: node - linkType: hard - "@testing-library/dom@npm:10.4.0": version: 10.4.0 resolution: "@testing-library/dom@npm:10.4.0" @@ -5280,22 +5243,6 @@ __metadata: languageName: node linkType: hard -"@testing-library/dom@npm:^8.0.0, @testing-library/dom@npm:^8.14.0": - version: 8.20.0 - resolution: "@testing-library/dom@npm:8.20.0" - dependencies: - "@babel/code-frame": "npm:^7.10.4" - "@babel/runtime": "npm:^7.12.5" - "@types/aria-query": "npm:^5.0.1" - aria-query: "npm:^5.0.0" - chalk: "npm:^4.1.0" - dom-accessibility-api: "npm:^0.5.9" - lz-string: "npm:^1.4.4" - pretty-format: "npm:^27.0.2" - checksum: 10c0/454c71f65708d1504256ae055f060adf8ed9eadcc7ddbf6d07a528045beceb842783c1253871759f5c137eca58e5e32700dc64b130cbb37e10e7a52ab08d7b44 - languageName: node - linkType: hard - "@testing-library/jest-dom@npm:6.5.0": version: 6.5.0 resolution: "@testing-library/jest-dom@npm:6.5.0" @@ -5311,34 +5258,23 @@ __metadata: languageName: node linkType: hard -"@testing-library/jest-dom@npm:^5.16.4": - version: 5.16.5 - resolution: "@testing-library/jest-dom@npm:5.16.5" - dependencies: - "@adobe/css-tools": "npm:^4.0.1" - "@babel/runtime": "npm:^7.9.2" - "@types/testing-library__jest-dom": "npm:^5.9.1" - aria-query: "npm:^5.0.0" - chalk: "npm:^3.0.0" - css.escape: "npm:^1.5.1" - dom-accessibility-api: "npm:^0.5.6" - lodash: "npm:^4.17.15" - redent: "npm:^3.0.0" - checksum: 10c0/0925fda78096cca355d164d5358b84b9371c4fb6ba60ce60c2263446ac6d9c6aaca75e2792cdb42699fe78c379924c53db672a3510361b577ebb89a0c6e1c629 - languageName: node - linkType: hard - -"@testing-library/react@npm:^12.1.5": - version: 12.1.5 - resolution: "@testing-library/react@npm:12.1.5" +"@testing-library/react@npm:16.1.0": + version: 16.1.0 + resolution: "@testing-library/react@npm:16.1.0" dependencies: "@babel/runtime": "npm:^7.12.5" - "@testing-library/dom": "npm:^8.0.0" - "@types/react-dom": "npm:<18.0.0" peerDependencies: - react: <18.0.0 - react-dom: <18.0.0 - checksum: 10c0/3c2433d2fdb6535261f62cd85d79657989cebd96f9072da03c098a1cfa56dec4dfec83d7c2e93633a3ccebdb178ea8578261533d11551600966edab77af00c8b + "@testing-library/dom": ^10.0.0 + "@types/react": ^18.0.0 || ^19.0.0 + "@types/react-dom": ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 10c0/8451dcc76ba0d4f3504af78f2a4aacc13117691f4b7a3c279f3e047d5ea817ff686496ad53e7f65f6183112aef2be3f318af609b1f5d666eed42b1014d1c68d5 languageName: node linkType: hard @@ -5351,15 +5287,6 @@ __metadata: languageName: node linkType: hard -"@testing-library/user-event@npm:^14.2.1": - version: 14.4.3 - resolution: "@testing-library/user-event@npm:14.4.3" - peerDependencies: - "@testing-library/dom": ">=7.21.4" - checksum: 10c0/28e1e4ed2fdaa9486e203c6789386be228e305abd3fa41f38c828af415fd4a4e80f4de88de0e502ff11c4b4926f221b874a2a45bcc8170d30714e12dad2c1bd0 - languageName: node - linkType: hard - "@tootallnate/once@npm:2": version: 2.0.0 resolution: "@tootallnate/once@npm:2.0.0" @@ -5374,9 +5301,9 @@ __metadata: languageName: node linkType: hard -"@tsed/monorepo-utils@npm:2.1.2": - version: 2.1.2 - resolution: "@tsed/monorepo-utils@npm:2.1.2" +"@tsed/monorepo-utils@npm:2.3.10": + version: 2.3.10 + resolution: "@tsed/monorepo-utils@npm:2.3.10" dependencies: "@samverschueren/stream-to-observable": "npm:>=0.3.1" "@typescript-eslint/typescript-estree": "npm:>=6.20.0" @@ -5403,7 +5330,7 @@ __metadata: semantic-release: ">=19" bin: monorepo: bin/monorepo.js - checksum: 10c0/cfe99e64f99de0a7585873c37591e7e23afa178410368c22f5741cbf4f8c672c906026a62ca3d166cae5ce88a061e3b45fbc8bb650f00004b584b2ab0c0bfed2 + checksum: 10c0/9111c2a1614a780ff32b50b5ae2c3a41e0bdb72731165f7c83f65f021fbf98252abac4495b829c2ed91fd785cb850897095c50cd0ed8bcbb3c00528e78cbc9d3 languageName: node linkType: hard @@ -5415,6 +5342,7 @@ __metadata: "@tsed/react-formio-stores": "workspace:*" "@types/file-saver": "npm:^2.0.1" file-saver: "npm:^2.0.5" + vite: "npm:5.4.11" vitest: "npm:2.1.8" peerDependencies: "@formio/choices.js": ^9.0.1 @@ -5423,11 +5351,11 @@ __metadata: classnames: ^2.3.1 connected-react-router: ^6.9.1 file-saver: ^2.0.5 - formiojs: ^4.14.13 + formiojs: ^4.21.6 lodash: ^4.17.21 prop-types: ^15.8.1 - react: ^18.2.0 - react-dom: ^18.2.0 + react: ^18.3.1 + react-dom: ^18.3.1 react-is: ^17.0.1 react-redux: ^7.2.6 react-router: ^5.2.1 @@ -5471,16 +5399,41 @@ __metadata: languageName: unknown linkType: soft +"@tsed/react-formio-integration@workspace:packages/integration": + version: 0.0.0-use.local + resolution: "@tsed/react-formio-integration@workspace:packages/integration" + dependencies: + "@tsed/react-formio": "workspace:*" + "@tsed/tailwind-formio": "workspace:*" + "@tsed/typescript": "workspace:*" + classnames: "npm:^2.3.1" + eventemitter2: "npm:^6.4.3" + microbundle: "npm:0.13.0" + prop-types: "npm:15.8.1" + vite: "npm:5.4.11" + vitest: "npm:2.1.8" + peerDependencies: + "@formio/choices.js": ">=9.0.1" + formiojs: ">=4.0.0" + lodash: ">=4.17.20" + prop-types: ">=15.7.2" + react: ">=16.14.0" + react-dnd: ">=16.0.1" + react-dnd-html5-backend: ">=16.0.1" + react-dom: ">=16.14.0" + react-table: ">=7.6.3" + tooltip.js: ">=1.3.3" + languageName: unknown + linkType: soft + "@tsed/react-formio-stores@workspace:*, @tsed/react-formio-stores@workspace:packages/react-formio-stores": version: 0.0.0-use.local resolution: "@tsed/react-formio-stores@workspace:packages/react-formio-stores" dependencies: "@tsed/react-formio": "workspace:*" "@tsed/redux-utils": "workspace:*" - "@tsed/tailwind": "workspace:*" "@tsed/tailwind-formio": "workspace:*" - eventemitter2: "npm:^6.4.3" - prop-types: "npm:15.8.1" + vite: "npm:5.4.11" vitest: "npm:2.1.8" peerDependencies: "@formio/choices.js": ">=9.0.1" @@ -5498,7 +5451,6 @@ __metadata: version: 0.0.0-use.local resolution: "@tsed/react-formio@workspace:packages/react-formio" dependencies: - "@tsed/tailwind": "workspace:*" "@tsed/tailwind-formio": "workspace:*" "@tsed/typescript": "workspace:*" classnames: "npm:^2.3.1" @@ -5511,6 +5463,7 @@ __metadata: "@formio/choices.js": ">=9.0.1" formiojs: ">=4.0.0" lodash: ">=4.17.20" + moment: ">=2.30.1" prop-types: ">=15.7.2" react: ">=16.14.0" react-dnd: ">=16.0.1" @@ -5525,9 +5478,10 @@ __metadata: version: 0.0.0-use.local resolution: "@tsed/redux-utils@workspace:packages/redux-utils" dependencies: + vite: "npm:5.4.11" vitest: "npm:2.1.8" peerDependencies: - react: ^18.2.0 + react: ^18.3.1 redux: ^4.0.5 languageName: unknown linkType: soft @@ -5553,11 +5507,11 @@ __metadata: "@storybook/test-runner": "npm:0.21.0" "@swc/core": "npm:^1.2.208" "@swc/jest": "npm:^0.2.21" - "@testing-library/dom": "npm:^8.14.0" - "@testing-library/jest-dom": "npm:^5.16.4" - "@testing-library/react": "npm:^12.1.5" - "@testing-library/user-event": "npm:^14.2.1" - "@tsed/monorepo-utils": "npm:2.1.2" + "@testing-library/dom": "npm:10.4.0" + "@testing-library/jest-dom": "npm:6.5.0" + "@testing-library/react": "npm:16.1.0" + "@testing-library/user-event": "npm:14.5.2" + "@tsed/monorepo-utils": "npm:2.3.10" "@types/classnames": "npm:^2.2.11" "@types/ejs": "npm:^3.0.5" "@types/jest": "npm:27.0.2" @@ -5591,28 +5545,27 @@ __metadata: eslint-plugin-storybook: "npm:0.11.1" eslint-plugin-testing-library: "npm:7.1.1" eslint-plugin-workspaces: "npm:0.10.1" - formiojs: "npm:^4.14.13" + formiojs: "npm:4.21.6" fs-extra: "npm:10.1.0" globby: "npm:^14.0.2" - happy-dom: "npm:^16.0.0" history: "npm:5.3.0" husky: "npm:^8.0.1" + jsdom: "npm:25.0.1" lerna: "npm:8.1.2" lint-staged: "npm:13.0.3" lodash: "npm:4.17.21" - microbundle: "npm:0.13.0" + nodemon: "npm:3.1.9" playwright: "npm:1.49.1" postcss: "npm:8.4.49" postcss-nested: "npm:7.0.2" postcss-normalize: "npm:13.0.1" prettier: "npm:3.4.2" prop-types: "npm:^15.8.1" - react: "npm:^18.2.0" - react-dom: "npm:^18.2.0" + react: "npm:18.3.1" + react-dom: "npm:18.3.1" react-redux: "npm:7.2.6" react-router: "npm:5.2.1" react-router-dom: "npm:5.2.1" - react-svg: "npm:10.0.23" react-table: "npm:^7.8.0" redux-thunk: "npm:^2.4.1" rimraf: "npm:^3.0.2" @@ -5633,23 +5586,12 @@ __metadata: version: 0.0.0-use.local resolution: "@tsed/tailwind-formio@workspace:packages/tailwind-formio" dependencies: - "@tsed/tailwind": "workspace:*" cross-env: "npm:7.0.3" - vite: "npm:5.4.11" - vite-plugin-ejs: "npm:1.7.0" - languageName: unknown - linkType: soft - -"@tsed/tailwind@workspace:*, @tsed/tailwind@workspace:packages/tailwind": - version: 0.0.0-use.local - resolution: "@tsed/tailwind@workspace:packages/tailwind" - dependencies: rimraf: "npm:3.0.2" - tailwind-config-viewer: "npm:^1.3.1" + tailwind-config-viewer: "npm:2.0.4" tailwindcss: "npm:3.4.17" - tailwindcss-cli: "npm:0.1.2" - tailwindcss-inset: "npm:1.0.0" - tailwindcss-transforms: "npm:2.2.0" + vite: "npm:5.4.11" + vite-plugin-ejs: "npm:1.7.0" languageName: unknown linkType: soft @@ -5898,16 +5840,6 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:*": - version: 29.5.2 - resolution: "@types/jest@npm:29.5.2" - dependencies: - expect: "npm:^29.0.0" - pretty-format: "npm:^29.0.0" - checksum: 10c0/e85525fe83a0792632a31ca32968b33a0014d617442e9a515357d2aa8890052ef622b1f6fd25d48f4f1a3ab806bed94e6d9b056dea23a897464e0e35957ff654 - languageName: node - linkType: hard - "@types/jest@npm:27.0.2": version: 27.0.2 resolution: "@types/jest@npm:27.0.2" @@ -6040,15 +5972,6 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:<18.0.0": - version: 17.0.20 - resolution: "@types/react-dom@npm:17.0.20" - dependencies: - "@types/react": "npm:^17" - checksum: 10c0/1389bfd96ec5f0c580bb1c237c8af137203de912cf403b4116cdfb026762bf31b4206cc1de0a5c20d0df2e07b0ba1b1b72ac51995d5ef45889d5d878321b7418 - languageName: node - linkType: hard - "@types/react-dom@npm:^18.2.4": version: 18.2.4 resolution: "@types/react-dom@npm:18.2.4" @@ -6111,17 +6034,6 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:^17": - version: 17.0.60 - resolution: "@types/react@npm:17.0.60" - dependencies: - "@types/prop-types": "npm:*" - "@types/scheduler": "npm:*" - csstype: "npm:^3.0.2" - checksum: 10c0/beb6ec73ced7fecfd1233110783f17c4e9f037563a74c44d9720451e8fb3d0a0498459b4ba4f64007a4f1ee1d79c255481af3becd0ea76fca1ddff5dd1ed9420 - languageName: node - linkType: hard - "@types/resolve@npm:1.17.1": version: 1.17.1 resolution: "@types/resolve@npm:1.17.1" @@ -6152,12 +6064,10 @@ __metadata: languageName: node linkType: hard -"@types/testing-library__jest-dom@npm:^5.9.1": - version: 5.14.6 - resolution: "@types/testing-library__jest-dom@npm:5.14.6" - dependencies: - "@types/jest": "npm:*" - checksum: 10c0/f681d1af71b969b84cb2bfbf6e09f97a951eed577f983f4c0335e9175bc94b0721217fa10d06f30fabc3b09ccbcfb3c1f5957fa1d3a8becf04c1536bd8364948 +"@types/trusted-types@npm:^2.0.7": + version: 2.0.7 + resolution: "@types/trusted-types@npm:2.0.7" + checksum: 10c0/4c4855f10de7c6c135e0d32ce462419d8abbbc33713b31d294596c0cc34ae1fa6112a2f9da729c8f7a20707782b0d69da3b1f8df6645b0366d08825ca1522e0c languageName: node linkType: hard @@ -6663,6 +6573,13 @@ __metadata: languageName: node linkType: hard +"abortcontroller-polyfill@npm:^1.7.5": + version: 1.7.8 + resolution: "abortcontroller-polyfill@npm:1.7.8" + checksum: 10c0/604f01d78f1749e03b43fbdcbabd16466dee50404eb41920884187f993a1a6d96669424807f1ca1e1a4f3073261d7fd6c3f68452ad3c2d66be5c012d0f9e4eb3 + languageName: node + linkType: hard + "accepts@npm:^1.3.5": version: 1.3.8 resolution: "accepts@npm:1.3.8" @@ -6682,33 +6599,6 @@ __metadata: languageName: node linkType: hard -"acorn-node@npm:^1.8.2": - version: 1.8.2 - resolution: "acorn-node@npm:1.8.2" - dependencies: - acorn: "npm:^7.0.0" - acorn-walk: "npm:^7.0.0" - xtend: "npm:^4.0.2" - checksum: 10c0/e9a20dae515701cd3d03812929a7f74c4363fdcb4c74d762f7c43566dc87175ad817aa281ba11c88dabf5e8d35aec590073393c02a04bbdcfda58c2f320d08ac - languageName: node - linkType: hard - -"acorn-walk@npm:^7.0.0": - version: 7.2.0 - resolution: "acorn-walk@npm:7.2.0" - checksum: 10c0/ff99f3406ed8826f7d6ef6ac76b7608f099d45a1ff53229fa267125da1924188dbacf02e7903dfcfd2ae4af46f7be8847dc7d564c73c4e230dfb69c8ea8e6b4c - languageName: node - linkType: hard - -"acorn@npm:^7.0.0": - version: 7.4.1 - resolution: "acorn@npm:7.4.1" - bin: - acorn: bin/acorn - checksum: 10c0/bd0b2c2b0f334bbee48828ff897c12bd2eb5898d03bf556dcc8942022cec795ac5bb5b6b585e2de687db6231faf07e096b59a361231dd8c9344d5df5f7f0e526 - languageName: node - linkType: hard - "acorn@npm:^8.14.0": version: 8.14.0 resolution: "acorn@npm:8.14.0" @@ -6752,6 +6642,13 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 + languageName: node + linkType: hard + "agentkeepalive@npm:^4.2.1": version: 4.3.0 resolution: "agentkeepalive@npm:4.3.0" @@ -6864,6 +6761,13 @@ __metadata: languageName: node linkType: hard +"animation-frame-polyfill@npm:^1.0.0": + version: 1.0.2 + resolution: "animation-frame-polyfill@npm:1.0.2" + checksum: 10c0/6c22c6b1d58d1251cc5d9aa0ecfb2684a37655be2441e20f98a730f4553560295ff60b38d69da1c46d06615718541f33afce17ac1c955015e01ea4d45a5fb1da + languageName: node + linkType: hard + "ansi-colors@npm:^4.1.1": version: 4.1.3 resolution: "ansi-colors@npm:4.1.3" @@ -7032,7 +6936,7 @@ __metadata: languageName: node linkType: hard -"arg@npm:^5.0.1, arg@npm:^5.0.2": +"arg@npm:^5.0.2": version: 5.0.2 resolution: "arg@npm:5.0.2" checksum: 10c0/ccaf86f4e05d342af6666c569f844bec426595c567d32a8289715087825c2ca7edd8a3d204e4d2fb2aa4602e09a57d0c13ea8c9eea75aac3dbb4af5514e6800e @@ -7114,6 +7018,13 @@ __metadata: languageName: node linkType: hard +"array-from@npm:^2.1.1": + version: 2.1.1 + resolution: "array-from@npm:2.1.1" + checksum: 10c0/565fe078a3fb8be3d1b17d1b1a6b514d14d7f6c7349fb1de0b0f4cb7e0e4ffb6d35e03ff234ac978cffb67fc8f1e93e477271b70fe2f9e0ef76d10b0402d4d26 + languageName: node + linkType: hard + "array-ify@npm:^1.0.0": version: 1.0.0 resolution: "array-ify@npm:1.0.0" @@ -7309,14 +7220,14 @@ __metadata: languageName: node linkType: hard -"autocompleter@npm:^6.1.2": - version: 6.1.3 - resolution: "autocompleter@npm:6.1.3" - checksum: 10c0/69c12bc9c91027d2ef704fb79d03f4b26f0f0368968f364d9199198ae63d652934809311ebccc0153e519b4876f8ada17e5815c07260cc7ec210fde514da2f0c +"autocompleter@npm:^7.0.1": + version: 7.1.0 + resolution: "autocompleter@npm:7.1.0" + checksum: 10c0/3d94711b86089cd075a06478af60a1b9a207f0b6ce1be802b452057602238a2b246865847562ea92d218762a323975fed0c090848ffa9aacb2e503495bba2dbb languageName: node linkType: hard -"autoprefixer@npm:^10.0.2, autoprefixer@npm:^10.1.0, autoprefixer@npm:^10.4.7": +"autoprefixer@npm:^10.1.0, autoprefixer@npm:^10.4.7": version: 10.4.14 resolution: "autoprefixer@npm:10.4.14" dependencies: @@ -7775,13 +7686,6 @@ __metadata: languageName: node linkType: hard -"bytes@npm:^3.0.0": - version: 3.1.2 - resolution: "bytes@npm:3.1.2" - checksum: 10c0/76d1c43cbd602794ad8ad2ae94095cddeb1de78c5dddaa7005c51af10b0176c69971a6d88e805a90c2b6550d76636e43c40d8427a808b8645ede885de4a0358e - languageName: node - linkType: hard - "cac@npm:^6.7.14": version: 6.7.14 resolution: "cac@npm:6.7.14" @@ -8465,23 +8369,13 @@ __metadata: languageName: node linkType: hard -"color-name@npm:^1.0.0, color-name@npm:~1.1.4": +"color-name@npm:~1.1.4": version: 1.1.4 resolution: "color-name@npm:1.1.4" checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 languageName: node linkType: hard -"color-string@npm:^1.9.0": - version: 1.9.1 - resolution: "color-string@npm:1.9.1" - dependencies: - color-name: "npm:^1.0.0" - simple-swizzle: "npm:^0.2.2" - checksum: 10c0/b0bfd74c03b1f837f543898b512f5ea353f71630ccdd0d66f83028d1f0924a7d4272deb278b9aef376cacf1289b522ac3fb175e99895283645a2dc3a33af2404 - languageName: node - linkType: hard - "color-support@npm:^1.1.3": version: 1.1.3 resolution: "color-support@npm:1.1.3" @@ -8491,16 +8385,6 @@ __metadata: languageName: node linkType: hard -"color@npm:^4.0.1": - version: 4.2.3 - resolution: "color@npm:4.2.3" - dependencies: - color-convert: "npm:^2.0.1" - color-string: "npm:^1.9.0" - checksum: 10c0/7fbe7cfb811054c808349de19fb380252e5e34e61d7d168ec3353e9e9aacb1802674bddc657682e4e9730c2786592a4de6f8283e7e0d3870b829bb0b7b2f6118 - languageName: node - linkType: hard - "colord@npm:^2.9.1": version: 2.9.3 resolution: "colord@npm:2.9.3" @@ -8583,13 +8467,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:^8.0.0": - version: 8.3.0 - resolution: "commander@npm:8.3.0" - checksum: 10c0/8b043bb8322ea1c39664a1598a95e0495bfe4ca2fad0d84a92d7d1d8d213e2a155b441d2470c8e08de7c4a28cf2bc6e169211c49e1b21d9f7edc6ae4d9356060 - languageName: node - linkType: hard - "commander@npm:^9.3.0": version: 9.5.0 resolution: "commander@npm:9.5.0" @@ -8621,10 +8498,10 @@ __metadata: languageName: node linkType: hard -"compare-versions@npm:^4.1.3": - version: 4.1.4 - resolution: "compare-versions@npm:4.1.4" - checksum: 10c0/cd3b35190bf2173fa6b43e89ba00606267442d0b4baa39bdb4f969839c266877ffc657f56e484d664cd06b7007a224e344c254545bb6e0184257df8272c5a123 +"compare-versions@npm:^5.0.1": + version: 5.0.3 + resolution: "compare-versions@npm:5.0.3" + checksum: 10c0/e2518d09bedc9b561342d65bca9eaff68bf8248b4ff2b53b371d1759c617995ef80a4af77282b7bf9d4245c38c44286f0e64f08177dbd98975fa42f005368c2f languageName: node linkType: hard @@ -8889,13 +8766,13 @@ __metadata: languageName: node linkType: hard -"cookies@npm:~0.8.0": - version: 0.8.0 - resolution: "cookies@npm:0.8.0" +"cookies@npm:~0.9.0": + version: 0.9.1 + resolution: "cookies@npm:0.9.1" dependencies: depd: "npm:~2.0.0" keygrip: "npm:~1.1.0" - checksum: 10c0/0af32f30d1ece0596efc05782c66b9d61659e20c6cc5b695452abf5ceb51883ef43c5c73d86badd7d028a0da7d39f864c95f33640aef04f97fad70f35986bea3 + checksum: 10c0/3ffa1c0e992b62ee119adae4dd2ddd4a89166fa5434cd9bd9ff84ec4d2f14dfe2318a601280abfe32a4f64f884ec9345fb1912e488b002d188d2efa0d3919ba3 languageName: node linkType: hard @@ -8908,10 +8785,10 @@ __metadata: languageName: node linkType: hard -"core-js@npm:^3.21.1": - version: 3.30.2 - resolution: "core-js@npm:3.30.2" - checksum: 10c0/864d7dc908d4ece507d27e6c6d2830300dcb775d88cfefeec31e34ab95be5016bb23abb29c8b1c4a930bada01318af009276199d75dcab1a230c3cebdf8d3a70 +"core-js@npm:^3.26.1": + version: 3.39.0 + resolution: "core-js@npm:3.39.0" + checksum: 10c0/f7602069b6afb2e3298eec612a5c1e0c3e6a458930fbfc7a4c5f9ac03426507f49ce395eecdd2d9bae9024f820e44582b67ffe16f2272395af26964f174eeb6b languageName: node linkType: hard @@ -8999,6 +8876,15 @@ __metadata: languageName: node linkType: hard +"create-point-cb@npm:^1.0.0": + version: 1.2.0 + resolution: "create-point-cb@npm:1.2.0" + dependencies: + type-func: "npm:^1.0.1" + checksum: 10c0/57fb02ba1098c5a6d2dcb444a62e0169acad50a59a19b6b5fcb1e097553dbe3e7c7e7a461a8f3c5f67ad883803ed0565f99bdf5330401a7e6ed66716dc38e978 + languageName: node + linkType: hard + "cross-env@npm:7.0.3": version: 7.0.3 resolution: "cross-env@npm:7.0.3" @@ -9051,13 +8937,6 @@ __metadata: languageName: node linkType: hard -"css-color-names@npm:^0.0.4": - version: 0.0.4 - resolution: "css-color-names@npm:0.0.4" - checksum: 10c0/88ef97c25bcfb217469cdff428049022438cc546eb208210f0edec03b75050723db3ba02cd0f4959c84cd0659be0b43af3323eff80d1ba5fb15c2accf09ccbe2 - languageName: node - linkType: hard - "css-declaration-sorter@npm:^6.3.1": version: 6.4.0 resolution: "css-declaration-sorter@npm:6.4.0" @@ -9090,13 +8969,6 @@ __metadata: languageName: node linkType: hard -"css-unit-converter@npm:^1.1.1": - version: 1.1.2 - resolution: "css-unit-converter@npm:1.1.2" - checksum: 10c0/540e94213fa5305c49215c6a2ba24d934fa400c0ae0897a87632a3a3a8f4824d168448806180c511dcfb2ecf21cf16be51af0739ff09ef5bcd946f19e9a5624d - languageName: node - linkType: hard - "css-what@npm:^6.0.1": version: 6.1.0 resolution: "css-what@npm:6.1.0" @@ -9190,6 +9062,15 @@ __metadata: languageName: node linkType: hard +"cssstyle@npm:^4.1.0": + version: 4.1.0 + resolution: "cssstyle@npm:4.1.0" + dependencies: + rrweb-cssom: "npm:^0.7.1" + checksum: 10c0/05c6597e5d3e0ec6b15221f2c0ce9a0443a46cc50a6089a3ba9ee1ac27f83ff86a445a8f95435137dadd859f091fc61b6d342abaf396d3c910471b5b33cfcbfa + languageName: node + linkType: hard + "csstype@npm:^3.0.2": version: 3.1.2 resolution: "csstype@npm:3.1.2" @@ -9242,6 +9123,16 @@ __metadata: languageName: node linkType: hard +"data-urls@npm:^5.0.0": + version: 5.0.0 + resolution: "data-urls@npm:5.0.0" + dependencies: + whatwg-mimetype: "npm:^4.0.0" + whatwg-url: "npm:^14.0.0" + checksum: 10c0/1b894d7d41c861f3a4ed2ae9b1c3f0909d4575ada02e36d3d3bc584bdd84278e20709070c79c3b3bff7ac98598cb191eb3e86a89a79ea4ee1ef360e1694f92ad + languageName: node + linkType: hard + "data-view-buffer@npm:^1.0.2": version: 1.0.2 resolution: "data-view-buffer@npm:1.0.2" @@ -9310,7 +9201,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.3.1, debug@npm:^4.3.7, debug@npm:^4.4.0": +"debug@npm:^4, debug@npm:^4.3.1, debug@npm:^4.3.7, debug@npm:^4.4.0": version: 4.4.0 resolution: "debug@npm:4.4.0" dependencies: @@ -9339,6 +9230,13 @@ __metadata: languageName: node linkType: hard +"decimal.js@npm:^10.4.3": + version: 10.4.3 + resolution: "decimal.js@npm:10.4.3" + checksum: 10c0/6d60206689ff0911f0ce968d40f163304a6c1bc739927758e6efc7921cfa630130388966f16bf6ef6b838cb33679fbe8e7a78a2f3c478afce841fd55ac8fb8ee + languageName: node + linkType: hard + "decode-named-character-reference@npm:^1.0.0": version: 1.0.2 resolution: "decode-named-character-reference@npm:1.0.2" @@ -9499,13 +9397,6 @@ __metadata: languageName: node linkType: hard -"defined@npm:^1.0.0": - version: 1.0.1 - resolution: "defined@npm:1.0.1" - checksum: 10c0/357212c95fd69c3b431f4766440f1b10a8362d2663b86e3d7c139fe7fc98a1d5a4996b8b55ca62e97fb882f9887374b76944d29f9650a07993d98e7be86a804a - languageName: node - linkType: hard - "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -9520,7 +9411,7 @@ __metadata: languageName: node linkType: hard -"depd@npm:^2.0.0, depd@npm:~2.0.0": +"depd@npm:2.0.0, depd@npm:^2.0.0, depd@npm:~2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" checksum: 10c0/58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c @@ -9569,19 +9460,6 @@ __metadata: languageName: node linkType: hard -"detective@npm:^5.2.0": - version: 5.2.1 - resolution: "detective@npm:5.2.1" - dependencies: - acorn-node: "npm:^1.8.2" - defined: "npm:^1.0.0" - minimist: "npm:^1.2.6" - bin: - detective: bin/detective.js - checksum: 10c0/0d3bdfe49ef094165e7876d83ae1a9e0a07d037785ab0edc7b50df9e4390e0a050167670f3d2d506457c7b00b612471ba840898964422c425e50fe046a379e55 - languageName: node - linkType: hard - "devlop@npm:^1.0.0, devlop@npm:^1.1.0": version: 1.1.0 resolution: "devlop@npm:1.1.0" @@ -9612,13 +9490,6 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^29.4.3": - version: 29.4.3 - resolution: "diff-sequences@npm:29.4.3" - checksum: 10c0/183800b9fd8523a05a3a50ade0fafe81d4b8a8ac113b077d2bc298052ccdc081e3b896f19bf65768b536daebd8169a493c4764cb70a2195e14c442c12538d121 - languageName: node - linkType: hard - "diff-sequences@npm:^29.6.3": version: 29.6.3 resolution: "diff-sequences@npm:29.6.3" @@ -9687,7 +9558,7 @@ __metadata: languageName: node linkType: hard -"dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": +"dom-accessibility-api@npm:^0.5.9": version: 0.5.16 resolution: "dom-accessibility-api@npm:0.5.16" checksum: 10c0/b2c2eda4fae568977cdac27a9f0c001edf4f95a6a6191dfa611e3721db2478d1badc01db5bb4fa8a848aeee13e442a6c2a4386d65ec65a1436f24715a2f8d053 @@ -9701,6 +9572,36 @@ __metadata: languageName: node linkType: hard +"dom-autoscroller@npm:^2.3.4": + version: 2.3.4 + resolution: "dom-autoscroller@npm:2.3.4" + dependencies: + animation-frame-polyfill: "npm:^1.0.0" + create-point-cb: "npm:^1.0.0" + dom-mousemove-dispatcher: "npm:^1.0.1" + dom-plane: "npm:^1.0.1" + dom-set: "npm:^1.0.1" + type-func: "npm:^1.0.1" + checksum: 10c0/d96f07aa67bba43aba16a3aafd8c2fd31f743d0bd914fb730a7b13d6bb496407bcfa9774378436c655543eda3d9c950469f833d46a8541570a964a95e9855183 + languageName: node + linkType: hard + +"dom-mousemove-dispatcher@npm:^1.0.1": + version: 1.0.1 + resolution: "dom-mousemove-dispatcher@npm:1.0.1" + checksum: 10c0/0a13d54849c55f4309a4a303d02a06126e8ee95eabcd3333698b48f7f50870bbc8c53a6ee83e34ca2b9779ef822e40c80f7609de1d74039a732b99698a631c8e + languageName: node + linkType: hard + +"dom-plane@npm:^1.0.1": + version: 1.0.2 + resolution: "dom-plane@npm:1.0.2" + dependencies: + create-point-cb: "npm:^1.0.0" + checksum: 10c0/a460b650b5d893ebde556fbcf1a0e03acc5901912f00f6d2576ae99bced78c47d70d6fc7aa9c40433e1acc31792ec625fbabd39fea4c50a8db3aa531b44b995d + languageName: node + linkType: hard + "dom-serializer@npm:0": version: 0.2.2 resolution: "dom-serializer@npm:0.2.2" @@ -9722,6 +9623,17 @@ __metadata: languageName: node linkType: hard +"dom-set@npm:^1.0.1": + version: 1.1.1 + resolution: "dom-set@npm:1.1.1" + dependencies: + array-from: "npm:^2.1.1" + is-array: "npm:^1.0.1" + iselement: "npm:^1.1.4" + checksum: 10c0/edc82069179fc03b900a908b2708b47c39e3b9759fa8b7e4426d58d41e0142a2a3626e86bf852c210189e15a7ed62b899e46418ee34a3640f9f33a46966a8501 + languageName: node + linkType: hard + "domelementtype@npm:1, domelementtype@npm:^1.3.1": version: 1.3.1 resolution: "domelementtype@npm:1.3.1" @@ -9754,10 +9666,15 @@ __metadata: languageName: node linkType: hard -"dompurify@npm:^2.3.4": - version: 2.4.5 - resolution: "dompurify@npm:2.4.5" - checksum: 10c0/90d880e04c8476041778777d412eaa3d204448f1be67b9c72f76374f8f113e04552d5abbcee2d76fe36d03db9f9cb97b2cfa48cd7440b20fbcae2e1c7131e9de +"dompurify@npm:^3.0.5": + version: 3.2.3 + resolution: "dompurify@npm:3.2.3" + dependencies: + "@types/trusted-types": "npm:^2.0.7" + dependenciesMeta: + "@types/trusted-types": + optional: true + checksum: 10c0/0ce5cb89b76f396d800751bcb48e0d137792891d350ccc049f1bc9a5eca7332cc69030c25007ff4962e0824a5696904d4d74264df9277b5ad955642dfb6f313f languageName: node linkType: hard @@ -10928,19 +10845,6 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0": - version: 29.5.0 - resolution: "expect@npm:29.5.0" - dependencies: - "@jest/expect-utils": "npm:^29.5.0" - jest-get-type: "npm:^29.4.3" - jest-matcher-utils: "npm:^29.5.0" - jest-message-util: "npm:^29.5.0" - jest-util: "npm:^29.5.0" - checksum: 10c0/3c9382967217ad1453e9271e0da3f83c4aeb12272968007b90fc5873340e7fb64bf4852e1522bdf27556623d031ce62f82aaac09e485a15c6d0589d50999422d - languageName: node - linkType: hard - "expect@npm:^29.7.0": version: 29.7.0 resolution: "expect@npm:29.7.0" @@ -11009,7 +10913,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.2.7, fast-glob@npm:^3.2.9": +"fast-glob@npm:^3.2.9": version: 3.2.12 resolution: "fast-glob@npm:3.2.12" dependencies: @@ -11035,7 +10939,7 @@ __metadata: languageName: node linkType: hard -"fast-json-patch@npm:^3.1.0": +"fast-json-patch@npm:^3.1.1": version: 3.1.1 resolution: "fast-json-patch@npm:3.1.1" checksum: 10c0/8a0438b4818bb53153275fe5b38033610e8c9d9eb11869e6a7dc05eb92fa70f3caa57015e344eb3ae1e71c7a75ad4cc6bc2dc9e0ff281d6ed8ecd44505210ca8 @@ -11377,33 +11281,36 @@ __metadata: languageName: node linkType: hard -"formiojs@npm:^4.14.13": - version: 4.14.13 - resolution: "formiojs@npm:4.14.13" +"formiojs@npm:4.21.6": + version: 4.21.6 + resolution: "formiojs@npm:4.21.6" dependencies: - "@formio/bootstrap3": "npm:^2.12.2" - "@formio/choices.js": "npm:^9.0.1" - "@formio/semantic": "npm:^2.6.0" - "@formio/text-mask-addons": "npm:^3.8.0-formio.2" + "@formio/bootstrap3": "npm:2.12.4-rc.1" + "@formio/choices.js": "npm:10.2.1" + "@formio/semantic": "npm:2.6.1" + "@formio/text-mask-addons": "npm:^3.8.0-formio.4" "@formio/vanilla-text-mask": "npm:^5.1.1-formio.1" - autocompleter: "npm:^6.1.2" + abortcontroller-polyfill: "npm:^1.7.5" + autocompleter: "npm:^7.0.1" browser-cookies: "npm:^1.2.0" browser-md5-file: "npm:^1.1.1" - compare-versions: "npm:^4.1.3" - core-js: "npm:^3.21.1" + compare-versions: "npm:^5.0.1" + core-js: "npm:^3.26.1" custom-event-polyfill: "npm:^1.0.7" dialog-polyfill: "npm:^0.5.6" - dompurify: "npm:^2.3.4" + dom-autoscroller: "npm:^2.3.4" + dompurify: "npm:^3.0.5" downloadjs: "npm:^1.4.7" dragula: "npm:^3.7.3" eventemitter3: "npm:^4.0.7" fast-deep-equal: "npm:^3.1.3" - fast-json-patch: "npm:^3.1.0" + fast-json-patch: "npm:^3.1.1" fetch-ponyfill: "npm:^7.1.0" - i18next: "npm:^21.6.0" - idb: "npm:^6.1.5" + i18next: "npm:22.4.12" + idb: "npm:^7.1.1" + inputmask: "npm:^5.0.9" ismobilejs: "npm:^1.1.1" - json-logic-js: "npm:^2.0.0" + json-logic-js: "npm:^2.0.2" jstimezonedetect: "npm:^1.0.7" jwt-decode: "npm:^3.1.2" lodash: "npm:^4.17.21" @@ -11411,13 +11318,12 @@ __metadata: moment-timezone: "npm:^0.5.40" native-promise-only: "npm:^0.8.1" quill: "npm:^2.0.0-dev.3" - resize-observer-polyfill: "npm:^1.5.1" - signature_pad: "npm:^4.0.4" + signature_pad: "npm:^4.1.4" string-hash: "npm:^1.1.3" tippy.js: "npm:^6.3.7" - uuid: "npm:^8.3.2" + uuid: "npm:^9.0.0" vanilla-picker: "npm:^2.12.1" - checksum: 10c0/0a742bcb7fea87a13f0d358687a7da058f3cf760b08cb695125ab3b79e0c18abcb7b0ccac33e8d224eacd7b7aae84b7d9569dce0d806d6244442ee47864c5206 + checksum: 10c0/2293e1a8cc7d4c7eb478e3b5caec175e70b285ba13e013a9c8a1767afd81add7d208bc60604e2ec5e7b5fa70310d825f82dcd42d5293da425f1e3146171f0ca4 languageName: node linkType: hard @@ -11466,7 +11372,7 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:10.1.0, fs-extra@npm:^10.0.0": +"fs-extra@npm:10.1.0": version: 10.1.0 resolution: "fs-extra@npm:10.1.0" dependencies: @@ -11650,6 +11556,13 @@ __metadata: languageName: node linkType: hard +"fuse.js@npm:^6.6.2": + version: 6.6.2 + resolution: "fuse.js@npm:6.6.2" + checksum: 10c0/c2fe4f234f516e9ea83b06f06f8f3c8b7117f51aa75bbccd052eed0c0423364bf1e360ffbf29cadae8ef6aa39476b7961eaf9d07bed779cea5c83d62b34e2df9 + languageName: node + linkType: hard + "gauge@npm:^4.0.3": version: 4.0.4 resolution: "gauge@npm:4.0.4" @@ -11931,7 +11844,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^6.0.1, glob-parent@npm:^6.0.2": +"glob-parent@npm:^6.0.2": version: 6.0.2 resolution: "glob-parent@npm:6.0.2" dependencies: @@ -11971,7 +11884,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.1.7, glob@npm:^7.2.0": +"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.2.0": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -12203,16 +12116,6 @@ __metadata: languageName: node linkType: hard -"happy-dom@npm:^16.0.0": - version: 16.0.0 - resolution: "happy-dom@npm:16.0.0" - dependencies: - webidl-conversions: "npm:^7.0.0" - whatwg-mimetype: "npm:^3.0.0" - checksum: 10c0/742bc2a41bf6a0a71b372cc2efe1077674c01a98c1a5e89fb1a493b416131084400434f2d144a8d440a6062a2c57797bc097008d9559910bf464fad6895b743b - languageName: node - linkType: hard - "hard-rejection@npm:^2.1.0": version: 2.1.0 resolution: "hard-rejection@npm:2.1.0" @@ -12367,13 +12270,6 @@ __metadata: languageName: node linkType: hard -"hex-color-regex@npm:^1.1.0": - version: 1.1.0 - resolution: "hex-color-regex@npm:1.1.0" - checksum: 10c0/43f0b8bbeb3906b6b2ddfb5ce6cbc28fb4f1e7b5129d0485e006ea20f92dc65f97b3b12591dd6a993de2ca10cb64a16a6a380a37481fc09432e7be0037be8f9c - languageName: node - linkType: hard - "highlight.js@npm:^10.7.1": version: 10.7.3 resolution: "highlight.js@npm:10.7.3" @@ -12472,17 +12368,12 @@ __metadata: languageName: node linkType: hard -"hsl-regex@npm:^1.0.0": - version: 1.0.0 - resolution: "hsl-regex@npm:1.0.0" - checksum: 10c0/ddc29f4943c4a1768e611fadaebf6913d039640267f1fad2ac06f4dbdbe5cbe535d77dd19804898834671dd82751a4401c1b4d2ecade25d158ea23665d263e84 - languageName: node - linkType: hard - -"hsla-regex@npm:^1.0.0": - version: 1.0.0 - resolution: "hsla-regex@npm:1.0.0" - checksum: 10c0/307874844a055af7a8f225e3908e1f7a2d96aa28e86abcb7ce1837cd86acf32d1f3c71ae105416d4c8623c8f9220b1bc799598851b0826274faa047710985f76 +"html-encoding-sniffer@npm:^4.0.0": + version: 4.0.0 + resolution: "html-encoding-sniffer@npm:4.0.0" + dependencies: + whatwg-encoding: "npm:^3.1.1" + checksum: 10c0/523398055dc61ac9b34718a719cb4aa691e4166f29187e211e1607de63dc25ac7af52ca7c9aead0c4b3c0415ffecb17326396e1202e2e86ff4bca4c0ee4c6140 languageName: node linkType: hard @@ -12493,13 +12384,6 @@ __metadata: languageName: node linkType: hard -"html-tags@npm:^3.1.0": - version: 3.3.1 - resolution: "html-tags@npm:3.3.1" - checksum: 10c0/680165e12baa51bad7397452d247dbcc5a5c29dac0e6754b1187eee3bf26f514bc1907a431dd2f7eb56207611ae595ee76a0acc8eaa0d931e72c791dd6463d79 - languageName: node - linkType: hard - "htmlparser2@npm:^3.9.2": version: 3.10.1 resolution: "htmlparser2@npm:3.10.1" @@ -12544,6 +12428,19 @@ __metadata: languageName: node linkType: hard +"http-errors@npm:^2.0.0": + version: 2.0.0 + resolution: "http-errors@npm:2.0.0" + dependencies: + depd: "npm:2.0.0" + inherits: "npm:2.0.4" + setprototypeof: "npm:1.2.0" + statuses: "npm:2.0.1" + toidentifier: "npm:1.0.1" + checksum: 10c0/fc6f2715fe188d091274b5ffc8b3657bd85c63e969daa68ccb77afb05b071a4b62841acb7a21e417b5539014dff2ebf9550f0b14a9ff126f2734a7c1387f8e19 + languageName: node + linkType: hard + "http-errors@npm:~1.6.2": version: 1.6.3 resolution: "http-errors@npm:1.6.3" @@ -12577,6 +12474,16 @@ __metadata: languageName: node linkType: hard +"http-proxy-agent@npm:^7.0.2": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + "https-proxy-agent@npm:^5.0.0": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" @@ -12607,6 +12514,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^7.0.5": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + "human-signals@npm:^2.1.0": version: 2.1.0 resolution: "human-signals@npm:2.1.0" @@ -12646,12 +12563,21 @@ __metadata: languageName: node linkType: hard -"i18next@npm:^21.6.0": - version: 21.10.0 - resolution: "i18next@npm:21.10.0" +"i18next@npm:22.4.12": + version: 22.4.12 + resolution: "i18next@npm:22.4.12" + dependencies: + "@babel/runtime": "npm:^7.20.6" + checksum: 10c0/df425c315a6a937e3fa4752846620aec1ca165bccfb4b48f04a0faef7ef8283611f6c10a0287f5d00b3d0bcae60a1a17ee7c5713b2e6324e2ea79d78bb589bc8 + languageName: node + linkType: hard + +"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" dependencies: - "@babel/runtime": "npm:^7.17.2" - checksum: 10c0/2a674739aab219704d5a0bf62d03bed20ad2bceff9579efb4da61c4946c883fc172062ba7405a26bf795995860f2ab15826b05271f4c457bf7eb19e852f6006d + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 languageName: node linkType: hard @@ -12664,15 +12590,6 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 - languageName: node - linkType: hard - "icss-replace-symbols@npm:^1.1.0": version: 1.1.0 resolution: "icss-replace-symbols@npm:1.1.0" @@ -12689,10 +12606,10 @@ __metadata: languageName: node linkType: hard -"idb@npm:^6.1.5": - version: 6.1.5 - resolution: "idb@npm:6.1.5" - checksum: 10c0/189dfe760ea66780e02c68cb14d2eccdfb18996176c604a85fa987b90fbb613d224cd90fdc0f700378dd4c1abaf1175d22eb149ab7aef5f90e2e1a8787d8f3b9 +"idb@npm:^7.1.1": + version: 7.1.1 + resolution: "idb@npm:7.1.1" + checksum: 10c0/72418e4397638797ee2089f97b45fc29f937b830bc0eb4126f4a9889ecf10320ceacf3a177fe5d7ffaf6b4fe38b20bbd210151549bfdc881db8081eed41c870d languageName: node linkType: hard @@ -12703,6 +12620,13 @@ __metadata: languageName: node linkType: hard +"ignore-by-default@npm:^1.0.1": + version: 1.0.1 + resolution: "ignore-by-default@npm:1.0.1" + checksum: 10c0/9ab6e70e80f7cc12735def7ecb5527cfa56ab4e1152cd64d294522827f2dcf1f6d85531241537dc3713544e88dd888f65cb3c49c7b2cddb9009087c75274e533 + languageName: node + linkType: hard + "ignore-walk@npm:^5.0.1": version: 5.0.1 resolution: "ignore-walk@npm:5.0.1" @@ -12916,6 +12840,13 @@ __metadata: languageName: node linkType: hard +"inputmask@npm:^5.0.9": + version: 5.0.9 + resolution: "inputmask@npm:5.0.9" + checksum: 10c0/12a8c350df5c9af101864a916fe12f997b103c4ae04037150564c9f8df31324460d775fe920d19d624a5df6e6cb1cdb43ecc24a6d07505d1f31b9fba6c7ec89d + languageName: node + linkType: hard + "inquirer@npm:>=9.2.13": version: 9.2.16 resolution: "inquirer@npm:9.2.16" @@ -13067,6 +12998,13 @@ __metadata: languageName: node linkType: hard +"is-array@npm:^1.0.1": + version: 1.0.1 + resolution: "is-array@npm:1.0.1" + checksum: 10c0/fe1fde8d36c6de85f98037d37d607fbf39f0f035c9f62dd67c5e854bb2830075bbed64e886caf816773f460c319c18c7007039311fc958bc508969a038c84b80 + languageName: node + linkType: hard + "is-arrayish@npm:^0.2.1": version: 0.2.1 resolution: "is-arrayish@npm:0.2.1" @@ -13074,13 +13012,6 @@ __metadata: languageName: node linkType: hard -"is-arrayish@npm:^0.3.1": - version: 0.3.2 - resolution: "is-arrayish@npm:0.3.2" - checksum: 10c0/f59b43dc1d129edb6f0e282595e56477f98c40278a2acdc8b0a5c57097c9eff8fe55470493df5775478cf32a4dc8eaf6d3a749f07ceee5bc263a78b2434f6a54 - languageName: node - linkType: hard - "is-async-function@npm:^2.0.0": version: 2.0.0 resolution: "is-async-function@npm:2.0.0" @@ -13171,20 +13102,6 @@ __metadata: languageName: node linkType: hard -"is-color-stop@npm:^1.1.0": - version: 1.1.0 - resolution: "is-color-stop@npm:1.1.0" - dependencies: - css-color-names: "npm:^0.0.4" - hex-color-regex: "npm:^1.1.0" - hsl-regex: "npm:^1.0.0" - hsla-regex: "npm:^1.0.0" - rgb-regex: "npm:^1.0.1" - rgba-regex: "npm:^1.0.0" - checksum: 10c0/12d9a9d6b3da07bd69f678d6dbe897fccbd573ead12057f60c4773129e34ea2b658f29c1fb8ef84c548e8ac62061c04c16e23ffcb00d01900fa1f72b7ab3b569 - languageName: node - linkType: hard - "is-core-module@npm:^2.11.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1": version: 2.12.1 resolution: "is-core-module@npm:2.12.1" @@ -13432,6 +13349,13 @@ __metadata: languageName: node linkType: hard +"is-potential-custom-element-name@npm:^1.0.1": + version: 1.0.1 + resolution: "is-potential-custom-element-name@npm:1.0.1" + checksum: 10c0/b73e2f22bc863b0939941d369486d308b43d7aef1f9439705e3582bfccaa4516406865e32c968a35f97a99396dac84e2624e67b0a16b0a15086a785e16ce7db9 + languageName: node + linkType: hard + "is-reference@npm:^1.2.1": version: 1.2.1 resolution: "is-reference@npm:1.2.1" @@ -13721,6 +13645,13 @@ __metadata: languageName: node linkType: hard +"iselement@npm:^1.1.4": + version: 1.1.4 + resolution: "iselement@npm:1.1.4" + checksum: 10c0/ba19ca3c10434ee0dce0c737a143b99900ae28249febdc86c2e88385db93ab3590f7fbaa1bb4418ab67a1186dd4dc78b124b1a2b4078a771f9d4ecec70d0a427 + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -14089,18 +14020,6 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-diff@npm:29.5.0" - dependencies: - chalk: "npm:^4.0.0" - diff-sequences: "npm:^29.4.3" - jest-get-type: "npm:^29.4.3" - pretty-format: "npm:^29.5.0" - checksum: 10c0/00fda597fa6ee22774453c3cd35c2210bd7f749cf48ad7a41c13b898b2943c9c047842720eb928cdb949b9de87204d8d8987bf12aefdb2f0504f5f4112cab5b0 - languageName: node - linkType: hard - "jest-docblock@npm:^29.7.0": version: 29.7.0 resolution: "jest-docblock@npm:29.7.0" @@ -14144,13 +14063,6 @@ __metadata: languageName: node linkType: hard -"jest-get-type@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-get-type@npm:29.4.3" - checksum: 10c0/874b0ced6b1cc677ff7fcf0dc86d02674617a7d0b73d47097604fb3ca460178d16104efdd3837e8b8bf0520ad5d210838c07483b058802b457b8413e60628fd0 - languageName: node - linkType: hard - "jest-get-type@npm:^29.6.3": version: 29.6.3 resolution: "jest-get-type@npm:29.6.3" @@ -14203,18 +14115,6 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-matcher-utils@npm:29.5.0" - dependencies: - chalk: "npm:^4.0.0" - jest-diff: "npm:^29.5.0" - jest-get-type: "npm:^29.4.3" - pretty-format: "npm:^29.5.0" - checksum: 10c0/0a3ae95ef5c5c4ac2b2c503c2f57e173fa82725722e1fadcd902fd801afe17d9d36e9366820959465f553627bf1e481a0e4a540125f3b4371eec674b3557f7f3 - languageName: node - linkType: hard - "jest-matcher-utils@npm:^29.7.0": version: 29.7.0 resolution: "jest-matcher-utils@npm:29.7.0" @@ -14227,23 +14127,6 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-message-util@npm:29.5.0" - dependencies: - "@babel/code-frame": "npm:^7.12.13" - "@jest/types": "npm:^29.5.0" - "@types/stack-utils": "npm:^2.0.0" - chalk: "npm:^4.0.0" - graceful-fs: "npm:^4.2.9" - micromatch: "npm:^4.0.4" - pretty-format: "npm:^29.5.0" - slash: "npm:^3.0.0" - stack-utils: "npm:^2.0.3" - checksum: 10c0/706e89cacc89c090af584f4687c4e7f0616706481e468ec7c88270e07ae7458a829e477b7b3dff56b75d801f799d65eb2c28d6453c25dd02bea0fd98f0809dbb - languageName: node - linkType: hard - "jest-message-util@npm:^29.7.0": version: 29.7.0 resolution: "jest-message-util@npm:29.7.0" @@ -14451,20 +14334,6 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-util@npm:29.5.0" - dependencies: - "@jest/types": "npm:^29.5.0" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - ci-info: "npm:^3.2.0" - graceful-fs: "npm:^4.2.9" - picomatch: "npm:^2.2.3" - checksum: 10c0/c7f1dc8ae82cd9614a31e09806499560b4812beb57589b214241dd213d3cc6d24417593aef2caf2d3d9694925438849fec371ff36ca8a7f1be8438fd41e83373 - languageName: node - linkType: hard - "jest-util@npm:^29.7.0": version: 29.7.0 resolution: "jest-util@npm:29.7.0" @@ -14650,6 +14519,40 @@ __metadata: languageName: node linkType: hard +"jsdom@npm:25.0.1": + version: 25.0.1 + resolution: "jsdom@npm:25.0.1" + dependencies: + cssstyle: "npm:^4.1.0" + data-urls: "npm:^5.0.0" + decimal.js: "npm:^10.4.3" + form-data: "npm:^4.0.0" + html-encoding-sniffer: "npm:^4.0.0" + http-proxy-agent: "npm:^7.0.2" + https-proxy-agent: "npm:^7.0.5" + is-potential-custom-element-name: "npm:^1.0.1" + nwsapi: "npm:^2.2.12" + parse5: "npm:^7.1.2" + rrweb-cssom: "npm:^0.7.1" + saxes: "npm:^6.0.0" + symbol-tree: "npm:^3.2.4" + tough-cookie: "npm:^5.0.0" + w3c-xmlserializer: "npm:^5.0.0" + webidl-conversions: "npm:^7.0.0" + whatwg-encoding: "npm:^3.1.1" + whatwg-mimetype: "npm:^4.0.0" + whatwg-url: "npm:^14.0.0" + ws: "npm:^8.18.0" + xml-name-validator: "npm:^5.0.0" + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + checksum: 10c0/6bda32a6dfe4e37a30568bf51136bdb3ba9c0b72aadd6356280404275a34c9e097c8c25b5eb3c742e602623741e172da977ff456684befd77c9042ed9bf8c2b4 + languageName: node + linkType: hard + "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" @@ -14684,10 +14587,10 @@ __metadata: languageName: node linkType: hard -"json-logic-js@npm:^2.0.0": - version: 2.0.2 - resolution: "json-logic-js@npm:2.0.2" - checksum: 10c0/b88809e9c40e86a4fe4b1adf49dba95b8fd013bb8a4252f34d8467f761cf49675023e1013c0f0b688d5fbb627b7d82a5493f3bc622deeb257362557bbd30ac3d +"json-logic-js@npm:^2.0.2": + version: 2.0.5 + resolution: "json-logic-js@npm:2.0.5" + checksum: 10c0/c80d96a9f704dac2f4488c7119d9c94cbf67adbd93cb47eaa5b7eadc4947f18ed6d62fd5555f245cc2f87525f9e8d7bd5f70bd9e7fba2c70366e63bd68010f23 languageName: node linkType: hard @@ -14922,15 +14825,15 @@ __metadata: languageName: node linkType: hard -"koa@npm:^2.12.0": - version: 2.14.2 - resolution: "koa@npm:2.14.2" +"koa@npm:^2.14.2": + version: 2.15.3 + resolution: "koa@npm:2.15.3" dependencies: accepts: "npm:^1.3.5" cache-content-type: "npm:^1.0.0" content-disposition: "npm:~0.5.2" content-type: "npm:^1.0.4" - cookies: "npm:~0.8.0" + cookies: "npm:~0.9.0" debug: "npm:^4.3.2" delegates: "npm:^1.0.0" depd: "npm:^2.0.0" @@ -14949,7 +14852,7 @@ __metadata: statuses: "npm:^1.5.0" type-is: "npm:^1.6.16" vary: "npm:^1.1.2" - checksum: 10c0/f60ae84974d7cb834a5937592e010d97134278527a55a3a38973935db9ea409fecbd824e5ff0fa767077d9a9dc1f1a32881b626ddaad8b5978756c345f520cdd + checksum: 10c0/1dca5027e06855dfc4144093fc678c445b5718c3a61b3b7840e3def999f3efcd0359665fb30d3f427890dfee12ebb1e7d01e210d2122a17240d2f3ceae12b2f2 languageName: node linkType: hard @@ -15521,13 +15424,6 @@ __metadata: languageName: node linkType: hard -"lodash.topath@npm:^4.5.2": - version: 4.5.2 - resolution: "lodash.topath@npm:4.5.2" - checksum: 10c0/f555a1459c11c807517be6c3a3e8030a9e92a291b2d6b598511e0bddbe99297e870b20e097019b613a3035d061bac63cb42621386c0b9dc22fd3d85e58459653 - languageName: node - linkType: hard - "lodash.uniq@npm:^4.5.0": version: 4.5.0 resolution: "lodash.uniq@npm:4.5.0" @@ -15549,7 +15445,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4.17.21, lodash@npm:>=4.17.21, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.21, lodash@npm:~4.17.15": +"lodash@npm:4.17.21, lodash@npm:>=4.17.21, lodash@npm:^4.17.14, lodash@npm:^4.17.21, lodash@npm:~4.17.15": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c @@ -15662,7 +15558,7 @@ __metadata: languageName: node linkType: hard -"lz-string@npm:^1.4.4, lz-string@npm:^1.5.0": +"lz-string@npm:^1.5.0": version: 1.5.0 resolution: "lz-string@npm:1.5.0" bin: @@ -16945,13 +16841,6 @@ __metadata: languageName: node linkType: hard -"modern-normalize@npm:^1.1.0": - version: 1.1.0 - resolution: "modern-normalize@npm:1.1.0" - checksum: 10c0/7886fa57dc0fcb1021343c4dbec2f65e06e9ff25f727d51fa3a469b0b684b796e5b98554c643b8859bda8d09ea86f89e5cc70a067da91d23ad9bf7cfd545e36b - languageName: node - linkType: hard - "modify-values@npm:^1.0.1": version: 1.0.1 resolution: "modify-values@npm:1.0.1" @@ -17094,15 +16983,6 @@ __metadata: languageName: node linkType: hard -"node-emoji@npm:^1.11.0": - version: 1.11.0 - resolution: "node-emoji@npm:1.11.0" - dependencies: - lodash: "npm:^4.17.21" - checksum: 10c0/5dac6502dbef087092d041fcc2686d8be61168593b3a9baf964d62652f55a3a9c2277f171b81cccb851ccef33f2d070f45e633fab1fda3264f8e1ae9041c673f - languageName: node - linkType: hard - "node-emoji@npm:^2.1.3": version: 2.1.3 resolution: "node-emoji@npm:2.1.3" @@ -17200,6 +17080,26 @@ __metadata: languageName: node linkType: hard +"nodemon@npm:3.1.9": + version: 3.1.9 + resolution: "nodemon@npm:3.1.9" + dependencies: + chokidar: "npm:^3.5.2" + debug: "npm:^4" + ignore-by-default: "npm:^1.0.1" + minimatch: "npm:^3.1.2" + pstree.remy: "npm:^1.1.8" + semver: "npm:^7.5.3" + simple-update-notifier: "npm:^2.0.0" + supports-color: "npm:^5.5.0" + touch: "npm:^3.1.0" + undefsafe: "npm:^2.0.5" + bin: + nodemon: bin/nodemon.js + checksum: 10c0/dbd6fab40e6be18929ac02366bfdc2203c1688f45186d9468f6bdeb192f0666d044500dfb729d825526715196456e6a17509a13de019b058cbce428d72d04eb5 + languageName: node + linkType: hard + "nopt@npm:^7.0.0, nopt@npm:^7.2.0": version: 7.2.0 resolution: "nopt@npm:7.2.0" @@ -17591,6 +17491,13 @@ __metadata: languageName: node linkType: hard +"nwsapi@npm:^2.2.12": + version: 2.2.16 + resolution: "nwsapi@npm:2.2.16" + checksum: 10c0/0aa0637f4d51043d0183d994e08336bae996b03b42984381bf09ebdf3ff4909c018eda6b2a8aba0a08f3ea8303db8a0dad0608b38dc0bff15fd87017286ae21a + languageName: node + linkType: hard + "nx@npm:18.1.2, nx@npm:>=17.1.2 < 19": version: 18.1.2 resolution: "nx@npm:18.1.2" @@ -17719,13 +17626,6 @@ __metadata: languageName: node linkType: hard -"object-hash@npm:^2.2.0": - version: 2.2.0 - resolution: "object-hash@npm:2.2.0" - checksum: 10c0/1527de843926c5442ed61f8bdddfc7dc181b6497f725b0e89fcf50a55d9c803088763ed447cac85a5aa65345f1e99c2469ba679a54349ef3c4c0aeaa396a3eb9 - languageName: node - linkType: hard - "object-hash@npm:^3.0.0": version: 3.0.0 resolution: "object-hash@npm:3.0.0" @@ -18327,6 +18227,15 @@ __metadata: languageName: node linkType: hard +"parse5@npm:^7.1.2": + version: 7.2.1 + resolution: "parse5@npm:7.2.1" + dependencies: + entities: "npm:^4.5.0" + checksum: 10c0/829d37a0c709215a887e410a7118d754f8e1afd7edb529db95bc7bbf8045fb0266a7b67801331d8e8d9d073ea75793624ec27ce9ff3b96862c3b9008f4d68e80 + languageName: node + linkType: hard + "parseurl@npm:^1.3.2": version: 1.3.3 resolution: "parseurl@npm:1.3.3" @@ -18419,10 +18328,10 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:^6.1.0": - version: 6.2.1 - resolution: "path-to-regexp@npm:6.2.1" - checksum: 10c0/7a73811ca703e5c199e5b50b9649ab8f6f7b458a37f7dff9ea338815203f5b1f95fe8cb24d4fdfe2eab5d67ce43562d92534330babca35cdf3231f966adb9360 +"path-to-regexp@npm:^6.3.0": + version: 6.3.0 + resolution: "path-to-regexp@npm:6.3.0" + checksum: 10c0/73b67f4638b41cde56254e6354e46ae3a2ebc08279583f6af3d96fe4664fc75788f74ed0d18ca44fa4a98491b69434f9eee73b97bb5314bd1b5adb700f5c18d6 languageName: node linkType: hard @@ -18727,16 +18636,6 @@ __metadata: languageName: node linkType: hard -"postcss-js@npm:^3.0.3": - version: 3.0.3 - resolution: "postcss-js@npm:3.0.3" - dependencies: - camelcase-css: "npm:^2.0.1" - postcss: "npm:^8.1.6" - checksum: 10c0/bb569feb35bc4029072c259f52af4bf7b79e5dc2c680e3d6c7cedbb2b8d05114186832bef169abb76d601b75f83952fe0bb8c56b7c071d8f34c6ad8a0aead614 - languageName: node - linkType: hard - "postcss-js@npm:^4.0.1": version: 4.0.1 resolution: "postcss-js@npm:4.0.1" @@ -18748,7 +18647,7 @@ __metadata: languageName: node linkType: hard -"postcss-load-config@npm:^3.0.0, postcss-load-config@npm:^3.1.0": +"postcss-load-config@npm:^3.0.0": version: 3.1.4 resolution: "postcss-load-config@npm:3.1.4" dependencies: @@ -18920,17 +18819,6 @@ __metadata: languageName: node linkType: hard -"postcss-nested@npm:5.0.6": - version: 5.0.6 - resolution: "postcss-nested@npm:5.0.6" - dependencies: - postcss-selector-parser: "npm:^6.0.6" - peerDependencies: - postcss: ^8.2.14 - checksum: 10c0/cff4f05b06ec752a90a36b329b4c1b620352458b3d8e02e2fc7efdfb5073945242573ec42c0dd2b7c4beccba21233e5f089903c3e5e8aea2bbceca09c406fb8f - languageName: node - linkType: hard - "postcss-nested@npm:7.0.2": version: 7.0.2 resolution: "postcss-nested@npm:7.0.2" @@ -19101,7 +18989,7 @@ __metadata: languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.10, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.6, postcss-selector-parser@npm:^6.0.9": +"postcss-selector-parser@npm:^6.0.10, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9": version: 6.0.13 resolution: "postcss-selector-parser@npm:6.0.13" dependencies: @@ -19154,13 +19042,6 @@ __metadata: languageName: node linkType: hard -"postcss-value-parser@npm:^3.3.0": - version: 3.3.1 - resolution: "postcss-value-parser@npm:3.3.1" - checksum: 10c0/23eed98d8eeadb1f9ef1db4a2757da0f1d8e7c1dac2a38d6b35d971aab9eb3c6d8a967d0e9f435558834ffcd966afbbe875a56bcc5bcdd09e663008c106b3e47 - languageName: node - linkType: hard - "postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": version: 4.2.0 resolution: "postcss-value-parser@npm:4.2.0" @@ -19179,7 +19060,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.1.6, postcss@npm:^8.1.8, postcss@npm:^8.2.1, postcss@npm:^8.3.5": +"postcss@npm:^8.2.1": version: 8.4.24 resolution: "postcss@npm:8.4.24" dependencies: @@ -19242,17 +19123,6 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.5.0": - version: 29.5.0 - resolution: "pretty-format@npm:29.5.0" - dependencies: - "@jest/schemas": "npm:^29.4.3" - ansi-styles: "npm:^5.0.0" - react-is: "npm:^18.0.0" - checksum: 10c0/bcc0190d050196b64e501e5c2b44beb802d79a2b70b6fe6b24ae2d5e0f31237dfcb1f0ab2ada4678829b6ee38507ba292396301aff0a8122e575ffd45d5d037c - languageName: node - linkType: hard - "pretty-format@npm:^29.7.0": version: 29.7.0 resolution: "pretty-format@npm:29.7.0" @@ -19264,13 +19134,6 @@ __metadata: languageName: node linkType: hard -"pretty-hrtime@npm:^1.0.3": - version: 1.0.3 - resolution: "pretty-hrtime@npm:1.0.3" - checksum: 10c0/67cb3fc283a72252b49ac488647e6a01b78b7aa1b8f2061834aa1650691229081518ef3ca940f77f41cc8a8f02ba9eeb74b843481596670209e493062f2e89e0 - languageName: node - linkType: hard - "proc-log@npm:^3.0.0": version: 3.0.0 resolution: "proc-log@npm:3.0.0" @@ -19390,6 +19253,13 @@ __metadata: languageName: node linkType: hard +"pstree.remy@npm:^1.1.8": + version: 1.1.8 + resolution: "pstree.remy@npm:1.1.8" + checksum: 10c0/30f78c88ce6393cb3f7834216cb6e282eb83c92ccb227430d4590298ab2811bc4a4745f850a27c5178e79a8f3e316591de0fec87abc19da648c2b3c6eb766d14 + languageName: node + linkType: hard + "punycode@npm:^2.1.0": version: 2.3.0 resolution: "punycode@npm:2.3.0" @@ -19397,6 +19267,13 @@ __metadata: languageName: node linkType: hard +"punycode@npm:^2.3.1": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + "pure-rand@npm:^6.0.0": version: 6.1.0 resolution: "pure-rand@npm:6.1.0" @@ -19404,20 +19281,6 @@ __metadata: languageName: node linkType: hard -"purgecss@npm:^4.0.3": - version: 4.1.3 - resolution: "purgecss@npm:4.1.3" - dependencies: - commander: "npm:^8.0.0" - glob: "npm:^7.1.7" - postcss: "npm:^8.3.5" - postcss-selector-parser: "npm:^6.0.6" - bin: - purgecss: bin/purgecss.js - checksum: 10c0/9b29872298bc65a290c6ccf7ea862dd1c94f78ca593e78ae7d36c6341e113ddbe657bf1c0bf7bb3dad76f8d6c98a0667e6da1d126afa5702d3137db8547feaa2 - languageName: node - linkType: hard - "qrcode-terminal@npm:^0.12.0": version: 0.12.0 resolution: "qrcode-terminal@npm:0.12.0" @@ -19441,13 +19304,6 @@ __metadata: languageName: node linkType: hard -"quick-lru@npm:^5.1.1": - version: 5.1.1 - resolution: "quick-lru@npm:5.1.1" - checksum: 10c0/a24cba5da8cec30d70d2484be37622580f64765fb6390a928b17f60cd69e8dbd32a954b3ff9176fa1b86d86ff2ba05252fae55dc4d40d0291c60412b0ad096da - languageName: node - linkType: hard - "quill-delta@npm:4.2.1": version: 4.2.1 resolution: "quill-delta@npm:4.2.1" @@ -19568,7 +19424,7 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^16.8.0 || ^17.0.0 || ^18.0.0": +"react-dom@npm:18.3.1, react-dom@npm:^16.8.0 || ^17.0.0 || ^18.0.0": version: 18.3.1 resolution: "react-dom@npm:18.3.1" dependencies: @@ -19580,18 +19436,6 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^18.2.0": - version: 18.2.0 - resolution: "react-dom@npm:18.2.0" - dependencies: - loose-envify: "npm:^1.1.0" - scheduler: "npm:^0.23.0" - peerDependencies: - react: ^18.2.0 - checksum: 10c0/66dfc5f93e13d0674e78ef41f92ed21dfb80f9c4ac4ac25a4b51046d41d4d2186abc915b897f69d3d0ebbffe6184e7c5876f2af26bfa956f179225d921be713a - languageName: node - linkType: hard - "react-is@npm:^16.13.1, react-is@npm:^16.6.0, react-is@npm:^16.7.0": version: 16.13.1 resolution: "react-is@npm:16.13.1" @@ -19678,20 +19522,6 @@ __metadata: languageName: node linkType: hard -"react-svg@npm:10.0.23": - version: 10.0.23 - resolution: "react-svg@npm:10.0.23" - dependencies: - "@babel/runtime": "npm:^7.6.3" - "@tanem/svg-injector": "npm:^8.0.34" - prop-types: "npm:^15.7.2" - peerDependencies: - react: ^15.5.4 || ^16.0.0 - react-dom: ^15.5.4 || ^16.0.0 - checksum: 10c0/30e022ebe82f531a4ac1f9b427ba5e9784bbecd6c6de70393a3b1ccb6398e272f99064ecd1252b4f5ba56e8cc731a1fa74b4f5214ebde1bc6fd108b6db81dfaa - languageName: node - linkType: hard - "react-table@npm:^7.8.0": version: 7.8.0 resolution: "react-table@npm:7.8.0" @@ -19701,7 +19531,7 @@ __metadata: languageName: node linkType: hard -"react@npm:^16.8.0 || ^17.0.0 || ^18.0.0": +"react@npm:18.3.1, react@npm:^16.8.0 || ^17.0.0 || ^18.0.0": version: 18.3.1 resolution: "react@npm:18.3.1" dependencies: @@ -19710,15 +19540,6 @@ __metadata: languageName: node linkType: hard -"react@npm:^18.2.0": - version: 18.2.0 - resolution: "react@npm:18.2.0" - dependencies: - loose-envify: "npm:^1.1.0" - checksum: 10c0/b562d9b569b0cb315e44b48099f7712283d93df36b19a39a67c254c6686479d3980b7f013dc931f4a5a3ae7645eae6386b4aa5eea933baa54ecd0f9acb0902b8 - languageName: node - linkType: hard - "read-cache@npm:^1.0.0": version: 1.0.0 resolution: "read-cache@npm:1.0.0" @@ -19913,16 +19734,6 @@ __metadata: languageName: node linkType: hard -"reduce-css-calc@npm:^2.1.8": - version: 2.1.8 - resolution: "reduce-css-calc@npm:2.1.8" - dependencies: - css-unit-converter: "npm:^1.1.1" - postcss-value-parser: "npm:^3.3.0" - checksum: 10c0/9f311cdb38d4a72d5dc9275b9558199e63a6ceff2892a309691e4281fe418730995910a2179a7dd1566c11138c834c6e5958203c629c9f4357600a478470b17b - languageName: node - linkType: hard - "redux-thunk@npm:^2.4.1": version: 2.4.2 resolution: "redux-thunk@npm:2.4.2" @@ -19980,6 +19791,13 @@ __metadata: languageName: node linkType: hard +"regenerator-runtime@npm:^0.14.0": + version: 0.14.1 + resolution: "regenerator-runtime@npm:0.14.1" + checksum: 10c0/1b16eb2c4bceb1665c89de70dcb64126a22bc8eb958feef3cd68fe11ac6d2a4899b5cd1b80b0774c7c03591dc57d16631a7f69d2daa2ec98100e2f29f7ec4cc4 + languageName: node + linkType: hard + "regenerator-transform@npm:^0.15.1": version: 0.15.1 resolution: "regenerator-transform@npm:0.15.1" @@ -20369,20 +20187,6 @@ __metadata: languageName: node linkType: hard -"rgb-regex@npm:^1.0.1": - version: 1.0.1 - resolution: "rgb-regex@npm:1.0.1" - checksum: 10c0/ab43ea8b92c1e0c6d6bc811d7fff05927ae87473f9576363ae57213b1fd10605549a5cf89c79ccb7a02dd32e1f093c79891868ef31fd92cdb5378d7b180d73f5 - languageName: node - linkType: hard - -"rgba-regex@npm:^1.0.0": - version: 1.0.0 - resolution: "rgba-regex@npm:1.0.0" - checksum: 10c0/4296e7dd41c0edf66c18c13824b746099af642e1b52de97addb6b22051398567090cf1df20bacd1d400cfc79aee6f3a428e0def623d358844495e3630189892c - languageName: node - linkType: hard - "rimraf@npm:3.0.2, rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" @@ -20574,6 +20378,13 @@ __metadata: languageName: node linkType: hard +"rrweb-cssom@npm:^0.7.1": + version: 0.7.1 + resolution: "rrweb-cssom@npm:0.7.1" + checksum: 10c0/127b8ca6c8aac45e2755abbae6138d4a813b1bedc2caabf79466ae83ab3cfc84b5bfab513b7033f0aa4561c7753edf787d0dd01163ceacdee2e8eb1b6bf7237e + languageName: node + linkType: hard + "run-async@npm:^2.4.0": version: 2.4.1 resolution: "run-async@npm:2.4.1" @@ -20685,12 +20496,12 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.23.0": - version: 0.23.0 - resolution: "scheduler@npm:0.23.0" +"saxes@npm:^6.0.0": + version: 6.0.0 + resolution: "saxes@npm:6.0.0" dependencies: - loose-envify: "npm:^1.1.0" - checksum: 10c0/b777f7ca0115e6d93e126ac490dbd82642d14983b3079f58f35519d992fa46260be7d6e6cede433a92db70306310c6f5f06e144f0e40c484199e09c1f7be53dd + xmlchars: "npm:^2.2.0" + checksum: 10c0/3847b839f060ef3476eb8623d099aa502ad658f5c40fd60c105ebce86d244389b0d76fcae30f4d0c728d7705ceb2f7e9b34bb54717b6a7dbedaf5dad2d9a4b74 languageName: node linkType: hard @@ -21020,10 +20831,10 @@ __metadata: languageName: node linkType: hard -"signature_pad@npm:^4.0.4": - version: 4.1.5 - resolution: "signature_pad@npm:4.1.5" - checksum: 10c0/90bfa3e96969bd5a2a0bc88cad3f513f9acccf73e941186327322c49c75d9e090863a518656da56d172e5154ca9b2193a7718db84ffb7e1617174005e7091d37 +"signature_pad@npm:^4.1.4": + version: 4.2.0 + resolution: "signature_pad@npm:4.2.0" + checksum: 10c0/9b7792c90fea0d90b095ddb724d046ecaea20ce2de9845c270f08407ca8402888e0b04b9bab2865271e7d18fe765e1954d4a142e0cbfd551f428e9298f3fb890 languageName: node linkType: hard @@ -21056,12 +20867,12 @@ __metadata: languageName: node linkType: hard -"simple-swizzle@npm:^0.2.2": - version: 0.2.2 - resolution: "simple-swizzle@npm:0.2.2" +"simple-update-notifier@npm:^2.0.0": + version: 2.0.0 + resolution: "simple-update-notifier@npm:2.0.0" dependencies: - is-arrayish: "npm:^0.3.1" - checksum: 10c0/df5e4662a8c750bdba69af4e8263c5d96fe4cd0f9fe4bdfa3cbdeb45d2e869dff640beaaeb1ef0e99db4d8d2ec92f85508c269f50c972174851bc1ae5bd64308 + semver: "npm:^7.5.3" + checksum: 10c0/2a00bd03bfbcbf8a737c47ab230d7920f8bfb92d1159d421bdd194479f6d01ebc995d13fbe13d45dace23066a78a3dc6642999b4e3b38b847e6664191575b20c languageName: node linkType: hard @@ -21421,6 +21232,13 @@ __metadata: languageName: node linkType: hard +"statuses@npm:2.0.1": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 10c0/34378b207a1620a24804ce8b5d230fea0c279f00b18a7209646d5d47e419d1cc23e7cbf33a25a1e51ac38973dc2ac2e1e9c647a8e481ef365f77668d72becfd0 + languageName: node + linkType: hard + "statuses@npm:>= 1.4.0 < 2, statuses@npm:>= 1.5.0 < 2, statuses@npm:^1.5.0": version: 1.5.0 resolution: "statuses@npm:1.5.0" @@ -21814,7 +21632,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^5.3.0": +"supports-color@npm:^5.3.0, supports-color@npm:^5.5.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" dependencies: @@ -21889,6 +21707,13 @@ __metadata: languageName: node linkType: hard +"symbol-tree@npm:^3.2.4": + version: 3.2.4 + resolution: "symbol-tree@npm:3.2.4" + checksum: 10c0/dfbe201ae09ac6053d163578778c53aa860a784147ecf95705de0cd23f42c851e1be7889241495e95c37cabb058edb1052f141387bef68f705afc8f9dd358509 + languageName: node + linkType: hard + "synckit@npm:^0.9.1": version: 0.9.2 resolution: "synckit@npm:0.9.2" @@ -21899,14 +21724,14 @@ __metadata: languageName: node linkType: hard -"tailwind-config-viewer@npm:^1.3.1": - version: 1.7.2 - resolution: "tailwind-config-viewer@npm:1.7.2" +"tailwind-config-viewer@npm:2.0.4": + version: 2.0.4 + resolution: "tailwind-config-viewer@npm:2.0.4" dependencies: - "@koa/router": "npm:^9.0.1" + "@koa/router": "npm:^12.0.1" commander: "npm:^6.0.0" fs-extra: "npm:^9.0.1" - koa: "npm:^2.12.0" + koa: "npm:^2.14.2" koa-static: "npm:^5.0.0" open: "npm:^7.0.4" portfinder: "npm:^1.0.26" @@ -21916,36 +21741,7 @@ __metadata: bin: tailwind-config-viewer: cli/index.js tailwindcss-config-viewer: cli/index.js - checksum: 10c0/8a923b5bc059a280d6b5b5dd24327f160657d10b25ca23dbd833e88209e97206ff90d16e86e2a1a83b8d85631d0620480a2068c77585cdac869d861f64f67aba - languageName: node - linkType: hard - -"tailwindcss-cli@npm:0.1.2": - version: 0.1.2 - resolution: "tailwindcss-cli@npm:0.1.2" - dependencies: - autoprefixer: "npm:^10.0.2" - postcss: "npm:^8.1.8" - tailwindcss: "npm:^2.0.1" - bin: - tailwindcss-cli: index.js - checksum: 10c0/1110d67e32c85db7793c3f5aad44b9b83b948df3112b9d16ebcaa8edbd4dfa86ca909fe85f2caa9259fc247146647c02a61eac2da2b99b35256d8414028098a2 - languageName: node - linkType: hard - -"tailwindcss-inset@npm:1.0.0": - version: 1.0.0 - resolution: "tailwindcss-inset@npm:1.0.0" - checksum: 10c0/27872399c2eee7d69ab4aef0118ceea80eab5b9e1a82f567afba43ce27875d6721df58cb64f52e6cf5f4b1de619a8803bc0507ed0310f984584508e7bdec64a7 - languageName: node - linkType: hard - -"tailwindcss-transforms@npm:2.2.0": - version: 2.2.0 - resolution: "tailwindcss-transforms@npm:2.2.0" - dependencies: - lodash: "npm:^4.17.11" - checksum: 10c0/185da78f989e32a89b4ade64bd43e9881c3bd0afbd4363ce8e20e3936a90d511981ea4e4e9bceada240c3ac233daaecc009f08faa29a601ce68b33d75bfdea15 + checksum: 10c0/f193e9e211f134e9e064709ed2a7da668a13230b44f941bf6f5b4846afe4bf9d0166dd7f6d709f038e41f360f167fc7a58e231dba41b964813c7bc46894acd15 languageName: node linkType: hard @@ -21982,52 +21778,6 @@ __metadata: languageName: node linkType: hard -"tailwindcss@npm:^2.0.1": - version: 2.2.19 - resolution: "tailwindcss@npm:2.2.19" - dependencies: - arg: "npm:^5.0.1" - bytes: "npm:^3.0.0" - chalk: "npm:^4.1.2" - chokidar: "npm:^3.5.2" - color: "npm:^4.0.1" - cosmiconfig: "npm:^7.0.1" - detective: "npm:^5.2.0" - didyoumean: "npm:^1.2.2" - dlv: "npm:^1.1.3" - fast-glob: "npm:^3.2.7" - fs-extra: "npm:^10.0.0" - glob-parent: "npm:^6.0.1" - html-tags: "npm:^3.1.0" - is-color-stop: "npm:^1.1.0" - is-glob: "npm:^4.0.1" - lodash: "npm:^4.17.21" - lodash.topath: "npm:^4.5.2" - modern-normalize: "npm:^1.1.0" - node-emoji: "npm:^1.11.0" - normalize-path: "npm:^3.0.0" - object-hash: "npm:^2.2.0" - postcss-js: "npm:^3.0.3" - postcss-load-config: "npm:^3.1.0" - postcss-nested: "npm:5.0.6" - postcss-selector-parser: "npm:^6.0.6" - postcss-value-parser: "npm:^4.1.0" - pretty-hrtime: "npm:^1.0.3" - purgecss: "npm:^4.0.3" - quick-lru: "npm:^5.1.1" - reduce-css-calc: "npm:^2.1.8" - resolve: "npm:^1.20.0" - tmp: "npm:^0.2.1" - peerDependencies: - autoprefixer: ^10.0.2 - postcss: ^8.0.9 - bin: - tailwind: lib/cli.js - tailwindcss: lib/cli.js - checksum: 10c0/eaa0f6e251483271db28b67305f0ab6b1be6b39472ce5ec2baf0795cbe0b05fd4ec2009315e76890b9fcdadd605c12eb6dddcb659a14d993c54f2373dfd4519d - languageName: node - linkType: hard - "tar-stream@npm:~2.2.0": version: 2.2.0 resolution: "tar-stream@npm:2.2.0" @@ -22290,6 +22040,24 @@ __metadata: languageName: node linkType: hard +"tldts-core@npm:^6.1.70": + version: 6.1.70 + resolution: "tldts-core@npm:6.1.70" + checksum: 10c0/befad5eb9888e7b05db6cbe22d43750ec01615a9a26253b76400c367614429f860d0a49e752e257e9b2583f647413ac0599c27923f5b8d4d91af78bba0d6f984 + languageName: node + linkType: hard + +"tldts@npm:^6.1.32": + version: 6.1.70 + resolution: "tldts@npm:6.1.70" + dependencies: + tldts-core: "npm:^6.1.70" + bin: + tldts: bin/cli.js + checksum: 10c0/acfa49cab55242fe55ccb995e0a31d6bbed3cc1d52b0acd18c5ea0520fd44b3e85b850455dea566fbfca65cd9bce667f4922e827fbc216e4cd53585bcf633665 + languageName: node + linkType: hard + "tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -22299,15 +22067,6 @@ __metadata: languageName: node linkType: hard -"tmp@npm:^0.2.1": - version: 0.2.1 - resolution: "tmp@npm:0.2.1" - dependencies: - rimraf: "npm:^3.0.0" - checksum: 10c0/67607aa012059c9ce697bee820ee51bc0f39b29a8766def4f92d3f764d67c7cf9205d537d24e0cb1ce9685c40d4c628ead010910118ea18348666b5c46ed9123 - languageName: node - linkType: hard - "tmp@npm:~0.2.1": version: 0.2.3 resolution: "tmp@npm:0.2.3" @@ -22354,6 +22113,33 @@ __metadata: languageName: node linkType: hard +"touch@npm:^3.1.0": + version: 3.1.1 + resolution: "touch@npm:3.1.1" + bin: + nodetouch: bin/nodetouch.js + checksum: 10c0/d2e4d269a42c846a22a29065b9af0b263de58effc85a1764bb7a2e8fc4b47700e9e2fcbd7eb1f5bffbb7c73d860f93600cef282b93ddac8f0b62321cb498b36e + languageName: node + linkType: hard + +"tough-cookie@npm:^5.0.0": + version: 5.0.0 + resolution: "tough-cookie@npm:5.0.0" + dependencies: + tldts: "npm:^6.1.32" + checksum: 10c0/4a69c885bf6f45c5a64e60262af99e8c0d58a33bd3d0ce5da62121eeb9c00996d0128a72df8fc4614cbde59cc8b70aa3e21e4c3c98c2bbde137d7aba7fa00124 + languageName: node + linkType: hard + +"tr46@npm:^5.0.0": + version: 5.0.0 + resolution: "tr46@npm:5.0.0" + dependencies: + punycode: "npm:^2.3.1" + checksum: 10c0/1521b6e7bbc8adc825c4561480f9fe48eb2276c81335eed9fa610aa4c44a48a3221f78b10e5f18b875769eb3413e30efbf209ed556a17a42aa8d690df44b7bee + languageName: node + linkType: hard + "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -22591,6 +22377,13 @@ __metadata: languageName: node linkType: hard +"type-func@npm:^1.0.1": + version: 1.0.3 + resolution: "type-func@npm:1.0.3" + checksum: 10c0/da42bfbd250e4d2247cba92500dbc270e441feb61c6a660f85ba419559257feb74b32ae75e884217fc34e39da1237d71322181929d02c858b6bc2aedd714f9d3 + languageName: node + linkType: hard + "type-is@npm:^1.6.16": version: 1.6.18 resolution: "type-is@npm:1.6.18" @@ -22801,6 +22594,13 @@ __metadata: languageName: node linkType: hard +"undefsafe@npm:^2.0.5": + version: 2.0.5 + resolution: "undefsafe@npm:2.0.5" + checksum: 10c0/96c0466a5fbf395917974a921d5d4eee67bca4b30d3a31ce7e621e0228c479cf893e783a109af6e14329b52fe2f0cb4108665fad2b87b0018c0df6ac771261d5 + languageName: node + linkType: hard + "undici-types@npm:~6.19.2": version: 6.19.8 resolution: "undici-types@npm:6.19.8" @@ -23386,6 +23186,15 @@ __metadata: languageName: node linkType: hard +"w3c-xmlserializer@npm:^5.0.0": + version: 5.0.0 + resolution: "w3c-xmlserializer@npm:5.0.0" + dependencies: + xml-name-validator: "npm:^5.0.0" + checksum: 10c0/8712774c1aeb62dec22928bf1cdfd11426c2c9383a1a63f2bcae18db87ca574165a0fbe96b312b73652149167ac6c7f4cf5409f2eb101d9c805efe0e4bae798b + languageName: node + linkType: hard + "wait-on@npm:^7.0.0": version: 7.2.0 resolution: "wait-on@npm:7.2.0" @@ -23460,10 +23269,29 @@ __metadata: languageName: node linkType: hard -"whatwg-mimetype@npm:^3.0.0": - version: 3.0.0 - resolution: "whatwg-mimetype@npm:3.0.0" - checksum: 10c0/323895a1cda29a5fb0b9ca82831d2c316309fede0365047c4c323073e3239067a304a09a1f4b123b9532641ab604203f33a1403b5ca6a62ef405bcd7a204080f +"whatwg-encoding@npm:^3.1.1": + version: 3.1.1 + resolution: "whatwg-encoding@npm:3.1.1" + dependencies: + iconv-lite: "npm:0.6.3" + checksum: 10c0/273b5f441c2f7fda3368a496c3009edbaa5e43b71b09728f90425e7f487e5cef9eb2b846a31bd760dd8077739c26faf6b5ca43a5f24033172b003b72cf61a93e + languageName: node + linkType: hard + +"whatwg-mimetype@npm:^4.0.0": + version: 4.0.0 + resolution: "whatwg-mimetype@npm:4.0.0" + checksum: 10c0/a773cdc8126b514d790bdae7052e8bf242970cebd84af62fb2f35a33411e78e981f6c0ab9ed1fe6ec5071b09d5340ac9178e05b52d35a9c4bcf558ba1b1551df + languageName: node + linkType: hard + +"whatwg-url@npm:^14.0.0": + version: 14.1.0 + resolution: "whatwg-url@npm:14.1.0" + dependencies: + tr46: "npm:^5.0.0" + webidl-conversions: "npm:^7.0.0" + checksum: 10c0/f00104f1c67ce086ba8ffedab529cbbd9aefd8c0a6555320026de7aeff31f91c38680f95818b140a7c9cc657cde3781e567835dda552ddb1e2b8faaba0ac3cb6 languageName: node linkType: hard @@ -23770,6 +23598,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^8.18.0": + version: 8.18.0 + resolution: "ws@npm:8.18.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/25eb33aff17edcb90721ed6b0eb250976328533ad3cd1a28a274bd263682e7296a6591ff1436d6cbc50fa67463158b062f9d1122013b361cec99a05f84680e06 + languageName: node + linkType: hard + "ws@npm:^8.2.3": version: 8.13.0 resolution: "ws@npm:8.13.0" @@ -23785,6 +23628,13 @@ __metadata: languageName: node linkType: hard +"xml-name-validator@npm:^5.0.0": + version: 5.0.0 + resolution: "xml-name-validator@npm:5.0.0" + checksum: 10c0/3fcf44e7b73fb18be917fdd4ccffff3639373c7cb83f8fc35df6001fecba7942f1dbead29d91ebb8315e2f2ff786b508f0c9dc0215b6353f9983c6b7d62cb1f5 + languageName: node + linkType: hard + "xml@npm:^1.0.1": version: 1.0.1 resolution: "xml@npm:1.0.1" @@ -23792,7 +23642,14 @@ __metadata: languageName: node linkType: hard -"xtend@npm:^4.0.2, xtend@npm:~4.0.1": +"xmlchars@npm:^2.2.0": + version: 2.2.0 + resolution: "xmlchars@npm:2.2.0" + checksum: 10c0/b64b535861a6f310c5d9bfa10834cf49127c71922c297da9d4d1b45eeaae40bf9b4363275876088fbe2667e5db028d2cd4f8ee72eed9bede840a67d57dab7593 + languageName: node + linkType: hard + +"xtend@npm:~4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" checksum: 10c0/366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e