diff --git a/.gitignore b/.gitignore
index 7f30cbf2..1753fa3d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -44,7 +44,8 @@ yarn-error.log*
# serverless
.serverless
-.serverless_nextjs
-# Sentry Config File
-.env.sentry-build-plugin
-Notes.md
+.serverless_nextjs
+# Sentry Config File
+.env.sentry-build-plugin
+Notes.md
+/src/styles/vendor
diff --git a/next-env.d.ts b/next-env.d.ts
index cb4c1e39..3a636e00 100644
--- a/next-env.d.ts
+++ b/next-env.d.ts
@@ -1,6 +1,6 @@
///
///
-import "./.next/dev/types/routes.d.ts";
+import "./.next/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/next.config.mjs b/next.config.mjs
index 8ba162b9..a1eb859f 100644
--- a/next.config.mjs
+++ b/next.config.mjs
@@ -151,7 +151,10 @@ const nextConfig = {
// Transpile packages
transpilePackages: [
- "mui-tel-input"
+ "mui-tel-input",
+ "@churchapps/apphelper-website",
+ "@churchapps/apphelper-markdown",
+ "@churchapps/apphelper-donations"
],
// Compiler optimizations
diff --git a/package-lock.json b/package-lock.json
index 6775eae7..0fc58007 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,14 +9,14 @@
"version": "0.1.0",
"hasInstallScript": true,
"dependencies": {
- "@churchapps/apphelper": "0.6.19",
- "@churchapps/apphelper-donations": "^0.6.17",
- "@churchapps/apphelper-forms": "^0.6.14",
- "@churchapps/apphelper-login": "^0.6.18",
- "@churchapps/apphelper-markdown": "^0.6.15",
- "@churchapps/apphelper-website": "^0.6.17",
- "@churchapps/content-providers": "^0.1.6",
- "@churchapps/helpers": "1.2.30",
+ "@churchapps/apphelper": "0.6.20",
+ "@churchapps/apphelper-donations": "0.6.18",
+ "@churchapps/apphelper-forms": "0.6.15",
+ "@churchapps/apphelper-login": "0.6.19",
+ "@churchapps/apphelper-markdown": "0.6.18",
+ "@churchapps/apphelper-website": "0.6.19",
+ "@churchapps/content-providers": "0.1.8",
+ "@churchapps/helpers": "1.2.31",
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.1",
"@mui/icons-material": "^7.3.6",
@@ -45,6 +45,7 @@
"react-dnd-html5-backend": "^16.0.1",
"react-dom": "^19.2.1",
"react-ga4": "^2.1.0",
+ "react-google-recaptcha": "^3.1.0",
"react-image-file-resizer": "^0.4.8",
"react-router-dom": "^7.6.3",
"react-youtube": "^10.1.0",
@@ -349,12 +350,11 @@
}
},
"node_modules/@churchapps/apphelper": {
- "version": "0.6.19",
- "resolved": "https://registry.npmjs.org/@churchapps/apphelper/-/apphelper-0.6.19.tgz",
- "integrity": "sha512-0fOtvzI7+Ei3f5lQEOhibqg2jGcr6VHQreuPyoaWlsMTxitoJplHMxnzAqjaOnYHIfuw0rhFiHGpYxh6FjtORQ==",
+ "version": "0.6.20",
+ "resolved": "https://registry.npmjs.org/@churchapps/apphelper/-/apphelper-0.6.20.tgz",
+ "integrity": "sha512-o1vAxzaL/jD3JYuZqhLH395WYrzD5dMLioQ9303+45NG5Ex8okxgOy701LJ4CsrutG11aOOMlSuOlpv2C2yRYQ==",
"license": "MIT",
"dependencies": {
- "@churchapps/helpers": "^1.2.19",
"@emotion/cache": "^11.14.0",
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.1",
@@ -399,60 +399,65 @@
}
},
"node_modules/@churchapps/apphelper-donations": {
- "version": "0.6.17",
- "resolved": "https://registry.npmjs.org/@churchapps/apphelper-donations/-/apphelper-donations-0.6.17.tgz",
- "integrity": "sha512-ZbE0IUY3Okspf12KSrG5nQXaMQ/8iEKLcTK2sChkN7J/R7IxbbxSsRjdg1JZRiBmhhbCaIbmaRLS5dnHsbGkVw==",
+ "version": "0.6.18",
+ "resolved": "https://registry.npmjs.org/@churchapps/apphelper-donations/-/apphelper-donations-0.6.18.tgz",
+ "integrity": "sha512-9J4t2JuCj31C4+DUrmUV6iMg8jMPnp96gTpWMjEE90dvsEDHyYHDEdIqTse5qBEZMA1N4Lc9k6LdcLnIRCH/0g==",
"license": "MIT",
"dependencies": {
- "@emotion/react": "^11.14.0",
- "@emotion/styled": "^11.14.1",
"@stripe/react-stripe-js": "^3.9.0",
"@stripe/stripe-js": "^7.8.0",
- "@types/react-google-recaptcha": "^2.1.9",
- "axios": "^1.11.0",
- "date-fns": "^4.1.0",
- "i18next": "^25.3.2",
- "jwt-decode": "^4.0.0",
- "react-cookie": "^8.0.1",
- "react-google-recaptcha": "^3.1.0",
- "react-i18next": "^15.6.1",
"rrule": "^2.8.1"
},
"peerDependencies": {
"@churchapps/apphelper": "^0.6.0",
- "@churchapps/helpers": "^1.2.4",
+ "@churchapps/helpers": "file:../helpers",
+ "@emotion/react": "^11.14.0",
+ "@emotion/styled": "^11.14.1",
+ "@mui/icons-material": "^7.3.4",
"@mui/material": "^7.3.1",
+ "axios": "^1.11.0",
+ "date-fns": "^4.1.0",
+ "i18next": "^25.3.2",
+ "jwt-decode": "^4.0.0",
"react": "^18.0.0 || ^19.0.0",
+ "react-cookie": "^8.0.1",
"react-dom": "^18.0.0 || ^19.0.0",
+ "react-google-recaptcha": "^3.1.0",
+ "react-i18next": "^15.6.1",
"react-router-dom": "^7.6.3"
+ },
+ "peerDependenciesMeta": {
+ "react-google-recaptcha": {
+ "optional": true
+ }
}
},
"node_modules/@churchapps/apphelper-forms": {
- "version": "0.6.14",
- "resolved": "https://registry.npmjs.org/@churchapps/apphelper-forms/-/apphelper-forms-0.6.14.tgz",
- "integrity": "sha512-WK4OxsmJCBDq6e3DhUA/a3tlYb7dFKPvozFjDCpUYn9kBiHinkaEXQWiA5hS79rOODQBOJcPbEYp5b0QXnXKDg==",
+ "version": "0.6.15",
+ "resolved": "https://registry.npmjs.org/@churchapps/apphelper-forms/-/apphelper-forms-0.6.15.tgz",
+ "integrity": "sha512-7hbx4dX6WkSzA9n9neVKdoSJ9lzHqyMYtXNEXeruNUAEOndx4dYauqujFGTpLAIvS+MyYOqNV06qLQp9YEebTg==",
"license": "MIT",
"dependencies": {
- "@churchapps/apphelper-donations": "^0.6.0",
+ "@churchapps/apphelper-donations": "^0.6.0"
+ },
+ "peerDependencies": {
+ "@churchapps/apphelper": "^0.6.0",
+ "@churchapps/helpers": "^1.2.19",
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.1",
+ "@mui/material": "^7.3.1",
"axios": "^1.11.0",
"date-fns": "^4.1.0",
"i18next": "^25.3.2",
- "react-i18next": "^15.6.1"
- },
- "peerDependencies": {
- "@churchapps/apphelper": "^0.6.0",
- "@churchapps/helpers": "^1.2.4",
- "@mui/material": "^7.3.1",
"react": "^18.0.0 || ^19.0.0",
- "react-dom": "^18.0.0 || ^19.0.0"
+ "react-dom": "^18.0.0 || ^19.0.0",
+ "react-i18next": "^15.6.1"
}
},
"node_modules/@churchapps/apphelper-login": {
- "version": "0.6.18",
- "resolved": "https://registry.npmjs.org/@churchapps/apphelper-login/-/apphelper-login-0.6.18.tgz",
- "integrity": "sha512-Y19UbUA9is9/Z7XjpzLzqRdDa96u9/P7Ky3Ok9RPW67Xc34wEIDKlYUt289Rs97l96+Yfc+MzO74ukJy1ooVrg==",
+ "version": "0.6.19",
+ "resolved": "https://registry.npmjs.org/@churchapps/apphelper-login/-/apphelper-login-0.6.19.tgz",
+ "integrity": "sha512-k6eFPW5tRiz3fVt1H+RFj+QupjFPT00t/bbgJ+EBRjn4B1LVzPuTVpIOMYNdAyZcxZZK+z6IMV+DkZr32P51Zg==",
"license": "MIT",
"dependencies": {
"@mui/icons-material": "^7.3.1",
@@ -483,9 +488,9 @@
}
},
"node_modules/@churchapps/apphelper-markdown": {
- "version": "0.6.15",
- "resolved": "https://registry.npmjs.org/@churchapps/apphelper-markdown/-/apphelper-markdown-0.6.15.tgz",
- "integrity": "sha512-jf1jSOQVkZAWJG4YBJhaqxD8mZBkufCMeBxu/V2qqgjnUW7z9VMwn2MKxrHbscgapiMeZREUzu5HtaU9K4iTNw==",
+ "version": "0.6.18",
+ "resolved": "https://registry.npmjs.org/@churchapps/apphelper-markdown/-/apphelper-markdown-0.6.18.tgz",
+ "integrity": "sha512-YgfBrUxiAH416BoqDgiTTHMPykTFSpEKJLMRsQHuXc/mh5fCxgRfSq36hhuNxdNgzDVLwfopZXbJL66hwkecYA==",
"license": "MIT",
"dependencies": {
"@lexical/code": "^0.33.1",
@@ -504,23 +509,27 @@
},
"peerDependencies": {
"@churchapps/apphelper": "^0.6.0",
- "@churchapps/helpers": "^1.2.4",
+ "@churchapps/helpers": "^1.2.19",
+ "@mui/icons-material": "^7.3.4",
"@mui/material": "^7.3.1",
"react": "^18.0.0 || ^19.0.0",
"react-dom": "^18.0.0 || ^19.0.0"
}
},
"node_modules/@churchapps/apphelper-website": {
- "version": "0.6.17",
- "resolved": "https://registry.npmjs.org/@churchapps/apphelper-website/-/apphelper-website-0.6.17.tgz",
- "integrity": "sha512-f84sk7PJR+RNC/n3La+9v4QOageHHDZIrjrcsMoQNrNWC8rJmgoryj67J8hzUyNwXPS4tPuBidaNfe2LCQl1Hw==",
+ "version": "0.6.19",
+ "resolved": "https://registry.npmjs.org/@churchapps/apphelper-website/-/apphelper-website-0.6.19.tgz",
+ "integrity": "sha512-HIjfMZAzIeBENCTucZCOLdpxoOIw+LkwWzxgkZLGWfMowT0dBiOz62DY+q0N52FD22p4AZ3A5NBJLiklBRV5LQ==",
"license": "MIT",
"dependencies": {
"rrule": "^2.8.1"
},
"peerDependencies": {
"@churchapps/apphelper": "^0.6.5",
- "@churchapps/helpers": "^1.2.5",
+ "@churchapps/apphelper-donations": "^0.6.17",
+ "@churchapps/apphelper-forms": "^0.6.14",
+ "@churchapps/apphelper-markdown": "^0.6.18",
+ "@churchapps/helpers": "^1.2.19",
"@mui/icons-material": "^7.3.4",
"@mui/material": "^7.3.1",
"@react-google-maps/api": "^2.20.0",
@@ -533,15 +542,13 @@
}
},
"node_modules/@churchapps/content-providers": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/@churchapps/content-providers/-/content-providers-0.1.6.tgz",
- "integrity": "sha512-lZg2BUOE18V2GFqMwEtum9fvhzZmoo6gTuujvm4zShWtaq47sFVCmOkNRdELJ0B1+BSiVKsrYQyF82855Z7lYg==",
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/@churchapps/content-providers/-/content-providers-0.1.8.tgz",
+ "integrity": "sha512-OJpOb3yWmiDWin/WHlGNSl9HWUTRkWpZ6LtKwnZ/Vaito5/rfrrXvPpbJPeDw07tDWXjU4/fVFsil6gp2y+2PQ==",
"license": "MIT"
},
"node_modules/@churchapps/helpers": {
- "version": "1.2.30",
- "resolved": "https://registry.npmjs.org/@churchapps/helpers/-/helpers-1.2.30.tgz",
- "integrity": "sha512-MmKEqEX/Zmzk64KertWvaeDkXwws7hI3a7WDIPKIeYsWpghrcZdd1XIppWOLwBWszVBOTLFBT8vSfS++sx+YlA==",
+ "version": "1.2.31",
"license": "MIT",
"dependencies": {
"dayjs": "^1.11.18"
@@ -1674,17 +1681,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/@jridgewell/source-map": {
- "version": "0.3.11",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz",
- "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25"
- }
- },
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
@@ -2951,7 +2947,7 @@
"version": "1.58.1",
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.1.tgz",
"integrity": "sha512-6LdVIUERWxQMmUSSQi0I53GgCBYgM2RpGngCPY7hSeju+VrKjq3lvs7HpJoPbDiY5QM5EYRtRX5fvrinnMAz3w==",
- "devOptional": true,
+ "dev": true,
"license": "Apache-2.0",
"dependencies": {
"playwright": "1.58.1"
@@ -4670,28 +4666,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@types/eslint": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
- "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@types/estree": "*",
- "@types/json-schema": "*"
- }
- },
- "node_modules/@types/eslint-scope": {
- "version": "3.7.7",
- "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
- "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@types/eslint": "*",
- "@types/estree": "*"
- }
- },
"node_modules/@types/estree": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
@@ -4727,6 +4701,7 @@
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
"license": "MIT"
},
"node_modules/@types/json5": {
@@ -4811,21 +4786,12 @@
"version": "19.2.3",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz",
"integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"peerDependencies": {
"@types/react": "^19.2.0"
}
},
- "node_modules/@types/react-google-recaptcha": {
- "version": "2.1.9",
- "resolved": "https://registry.npmjs.org/@types/react-google-recaptcha/-/react-google-recaptcha-2.1.9.tgz",
- "integrity": "sha512-nT31LrBDuoSZJN4QuwtQSF3O89FVHC4jLhM+NtKEmVF5R1e8OY0Jo4//x2Yapn2aNHguwgX5doAq8Zo+Ehd0ug==",
- "license": "MIT",
- "dependencies": {
- "@types/react": "*"
- }
- },
"node_modules/@types/react-transition-group": {
"version": "4.4.12",
"resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz",
@@ -5376,181 +5342,6 @@
"win32"
]
},
- "node_modules/@webassemblyjs/ast": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
- "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/helper-numbers": "1.13.2",
- "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
- }
- },
- "node_modules/@webassemblyjs/floating-point-hex-parser": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
- "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
- "license": "MIT",
- "peer": true
- },
- "node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
- "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
- "license": "MIT",
- "peer": true
- },
- "node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
- "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
- "license": "MIT",
- "peer": true
- },
- "node_modules/@webassemblyjs/helper-numbers": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
- "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/floating-point-hex-parser": "1.13.2",
- "@webassemblyjs/helper-api-error": "1.13.2",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
- "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
- "license": "MIT",
- "peer": true
- },
- "node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
- "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@webassemblyjs/helper-buffer": "1.14.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
- "@webassemblyjs/wasm-gen": "1.14.1"
- }
- },
- "node_modules/@webassemblyjs/ieee754": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
- "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "node_modules/@webassemblyjs/leb128": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
- "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webassemblyjs/utf8": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
- "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
- "license": "MIT",
- "peer": true
- },
- "node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
- "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@webassemblyjs/helper-buffer": "1.14.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
- "@webassemblyjs/helper-wasm-section": "1.14.1",
- "@webassemblyjs/wasm-gen": "1.14.1",
- "@webassemblyjs/wasm-opt": "1.14.1",
- "@webassemblyjs/wasm-parser": "1.14.1",
- "@webassemblyjs/wast-printer": "1.14.1"
- }
- },
- "node_modules/@webassemblyjs/wasm-gen": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
- "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
- "@webassemblyjs/ieee754": "1.13.2",
- "@webassemblyjs/leb128": "1.13.2",
- "@webassemblyjs/utf8": "1.13.2"
- }
- },
- "node_modules/@webassemblyjs/wasm-opt": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
- "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@webassemblyjs/helper-buffer": "1.14.1",
- "@webassemblyjs/wasm-gen": "1.14.1",
- "@webassemblyjs/wasm-parser": "1.14.1"
- }
- },
- "node_modules/@webassemblyjs/wasm-parser": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
- "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@webassemblyjs/helper-api-error": "1.13.2",
- "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
- "@webassemblyjs/ieee754": "1.13.2",
- "@webassemblyjs/leb128": "1.13.2",
- "@webassemblyjs/utf8": "1.13.2"
- }
- },
- "node_modules/@webassemblyjs/wast-printer": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
- "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@xtuc/ieee754": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
- "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
- "license": "BSD-3-Clause",
- "peer": true
- },
- "node_modules/@xtuc/long": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
- "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
- "license": "Apache-2.0",
- "peer": true
- },
"node_modules/@youversion/platform-core": {
"version": "0.5.8",
"resolved": "https://registry.npmjs.org/@youversion/platform-core/-/platform-core-0.5.8.tgz",
@@ -5598,9 +5389,9 @@
}
},
"node_modules/acorn": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
- "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
+ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
@@ -5618,19 +5409,6 @@
"acorn": "^8"
}
},
- "node_modules/acorn-import-phases": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz",
- "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=10.13.0"
- },
- "peerDependencies": {
- "acorn": "^8.14.0"
- }
- },
"node_modules/acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@@ -5670,48 +5448,6 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/ajv-formats": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
- "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependenciesMeta": {
- "ajv": {
- "optional": true
- }
- }
- },
- "node_modules/ajv-formats/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ajv-formats/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "license": "MIT",
- "peer": true
- },
"node_modules/ansi-regex": {
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
@@ -6119,13 +5855,6 @@
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "license": "MIT",
- "peer": true
- },
"node_modules/call-bind": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
@@ -6257,16 +5986,6 @@
"node": ">= 6"
}
},
- "node_modules/chrome-trace-event": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
- "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6.0"
- }
- },
"node_modules/cjs-module-lexer": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz",
@@ -6411,13 +6130,6 @@
"node": ">= 0.8"
}
},
- "node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "license": "MIT",
- "peer": true
- },
"node_modules/commondir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
@@ -6870,20 +6582,6 @@
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
"license": "MIT"
},
- "node_modules/enhanced-resolve": {
- "version": "5.19.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz",
- "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.3.0"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
"node_modules/entities": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
@@ -7020,13 +6718,6 @@
"node": ">= 0.4"
}
},
- "node_modules/es-module-lexer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz",
- "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==",
- "license": "MIT",
- "peer": true
- },
"node_modules/es-object-atoms": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
@@ -7594,6 +7285,7 @@
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"estraverse": "^5.2.0"
@@ -7606,6 +7298,7 @@
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=4.0"
@@ -7627,16 +7320,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.8.x"
- }
- },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -7687,23 +7370,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/fast-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
- "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fastify"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/fastify"
- }
- ],
- "license": "BSD-3-Clause",
- "peer": true
- },
"node_modules/fastq": {
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
@@ -8106,13 +7772,6 @@
"node": ">=10.13.0"
}
},
- "node_modules/glob-to-regexp": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
- "license": "BSD-2-Clause",
- "peer": true
- },
"node_modules/globalize": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/globalize/-/globalize-0.1.1.tgz",
@@ -8160,13 +7819,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "license": "ISC",
- "peer": true
- },
"node_modules/has-bigints": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
@@ -8184,6 +7836,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -8962,17 +8615,6 @@
"node": ">=18"
}
},
- "node_modules/isomorphic.js": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz",
- "integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==",
- "license": "MIT",
- "peer": true,
- "funding": {
- "type": "GitHub Sponsors ❤",
- "url": "https://github.com/sponsors/dmonad"
- }
- },
"node_modules/iterator.prototype": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
@@ -9006,37 +8648,6 @@
"@pkgjs/parseargs": "^0.11.0"
}
},
- "node_modules/jest-worker": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
- "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- }
- },
- "node_modules/jest-worker/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
"node_modules/js-cookie": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz",
@@ -9258,28 +8869,6 @@
"integrity": "sha512-+kiCS/GshQmCs/meMb8MQT4AMvw3S3Ef0lSCv2Xi6Itvs59OD+NjQWNfYkDteIbKtVE/w0Yiqh56VyGwIb8UcA==",
"license": "MIT"
},
- "node_modules/lib0": {
- "version": "0.2.117",
- "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.117.tgz",
- "integrity": "sha512-DeXj9X5xDCjgKLU/7RR+/HQEVzuuEUiwldwOGsHK/sfAfELGWEyTcf0x+uOvCvK3O2zPmZePXWL85vtia6GyZw==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "isomorphic.js": "^0.2.4"
- },
- "bin": {
- "0ecdsa-generate-keypair": "bin/0ecdsa-generate-keypair.js",
- "0gentesthtml": "bin/gentesthtml.js",
- "0serve": "bin/0serve.js"
- },
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "type": "GitHub Sponsors ❤",
- "url": "https://github.com/sponsors/dmonad"
- }
- },
"node_modules/libphonenumber-js": {
"version": "1.12.36",
"resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.36.tgz",
@@ -9298,20 +8887,6 @@
"integrity": "sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==",
"license": "MIT"
},
- "node_modules/loader-runner": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz",
- "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6.11.5"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
"node_modules/locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -9452,13 +9027,6 @@
"integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==",
"license": "MIT"
},
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "license": "MIT",
- "peer": true
- },
"node_modules/merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -9676,13 +9244,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "license": "MIT",
- "peer": true
- },
"node_modules/next": {
"version": "16.1.6",
"resolved": "https://registry.npmjs.org/next/-/next-16.1.6.tgz",
@@ -10174,7 +9735,7 @@
"version": "1.58.1",
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.1.tgz",
"integrity": "sha512-+2uTZHxSCcxjvGc5C891LrS1/NlxglGxzrC4seZiVjcYVQfUa87wBL6rTDqzGjuoWNjnBzRqKmF6zRYGMvQUaQ==",
- "devOptional": true,
+ "dev": true,
"license": "Apache-2.0",
"dependencies": {
"playwright-core": "1.58.1"
@@ -10193,7 +9754,7 @@
"version": "1.58.1",
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.1.tgz",
"integrity": "sha512-bcWzOaTxcW+VOOGBCQgnaKToLJ65d6AqfLVKEWvexyS3AS6rbXl+xdpYRMGSRBClPvyj44njOWoxjNdL/H9UNg==",
- "devOptional": true,
+ "dev": true,
"license": "Apache-2.0",
"bin": {
"playwright-core": "cli.js"
@@ -10361,16 +9922,6 @@
],
"license": "MIT"
},
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
"node_modules/react": {
"version": "19.2.4",
"resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz",
@@ -10903,16 +10454,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/require-in-the-middle": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-8.0.1.tgz",
@@ -11086,27 +10627,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "peer": true
- },
"node_modules/safe-push-apply": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
@@ -11173,63 +10693,6 @@
"integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
"license": "MIT"
},
- "node_modules/schema-utils": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
- "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@types/json-schema": "^7.0.9",
- "ajv": "^8.9.0",
- "ajv-formats": "^2.1.1",
- "ajv-keywords": "^5.1.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/schema-utils/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/schema-utils/node_modules/ajv-keywords": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
- "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3"
- },
- "peerDependencies": {
- "ajv": "^8.8.2"
- }
- },
- "node_modules/schema-utils/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "license": "MIT",
- "peer": true
- },
"node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -11239,16 +10702,6 @@
"semver": "bin/semver.js"
}
},
- "node_modules/serialize-javascript": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
- "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
- "license": "BSD-3-Clause",
- "peer": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
"node_modules/set-cookie-parser": {
"version": "2.7.2",
"resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz",
@@ -11504,27 +10957,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/source-map-support/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "license": "BSD-3-Clause",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/stable-hash": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
@@ -11882,74 +11314,6 @@
"url": "https://github.com/sponsors/dcastil"
}
},
- "node_modules/tapable": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
- "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/terser": {
- "version": "5.46.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz",
- "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==",
- "license": "BSD-2-Clause",
- "peer": true,
- "dependencies": {
- "@jridgewell/source-map": "^0.3.3",
- "acorn": "^8.15.0",
- "commander": "^2.20.0",
- "source-map-support": "~0.5.20"
- },
- "bin": {
- "terser": "bin/terser"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/terser-webpack-plugin": {
- "version": "5.3.16",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz",
- "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@jridgewell/trace-mapping": "^0.3.25",
- "jest-worker": "^27.4.5",
- "schema-utils": "^4.3.0",
- "serialize-javascript": "^6.0.2",
- "terser": "^5.31.1"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^5.1.0"
- },
- "peerDependenciesMeta": {
- "@swc/core": {
- "optional": true
- },
- "esbuild": {
- "optional": true
- },
- "uglify-js": {
- "optional": true
- }
- }
- },
"node_modules/through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
@@ -12230,7 +11594,7 @@
"version": "5.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
- "devOptional": true,
+ "dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
@@ -12479,20 +11843,6 @@
"loose-envify": "^1.0.0"
}
},
- "node_modules/watchpack": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz",
- "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.1.2"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
"node_modules/webfontloader": {
"version": "1.6.28",
"resolved": "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz",
@@ -12508,59 +11858,10 @@
"node": ">=12"
}
},
- "node_modules/webpack": {
- "version": "5.105.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.0.tgz",
- "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@types/eslint-scope": "^3.7.7",
- "@types/estree": "^1.0.8",
- "@types/json-schema": "^7.0.15",
- "@webassemblyjs/ast": "^1.14.1",
- "@webassemblyjs/wasm-edit": "^1.14.1",
- "@webassemblyjs/wasm-parser": "^1.14.1",
- "acorn": "^8.15.0",
- "acorn-import-phases": "^1.0.3",
- "browserslist": "^4.28.1",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.19.0",
- "es-module-lexer": "^2.0.0",
- "eslint-scope": "5.1.1",
- "events": "^3.2.0",
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.11",
- "json-parse-even-better-errors": "^2.3.1",
- "loader-runner": "^4.3.1",
- "mime-types": "^2.1.27",
- "neo-async": "^2.6.2",
- "schema-utils": "^4.3.3",
- "tapable": "^2.3.0",
- "terser-webpack-plugin": "^5.3.16",
- "watchpack": "^2.5.1",
- "webpack-sources": "^3.3.3"
- },
- "bin": {
- "webpack": "bin/webpack.js"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependenciesMeta": {
- "webpack-cli": {
- "optional": true
- }
- }
- },
"node_modules/webpack-sources": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz",
- "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==",
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz",
+ "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==",
"license": "MIT",
"engines": {
"node": ">=10.13.0"
@@ -12572,30 +11873,6 @@
"integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==",
"license": "MIT"
},
- "node_modules/webpack/node_modules/eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "license": "BSD-2-Clause",
- "peer": true,
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/webpack/node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "license": "BSD-2-Clause",
- "peer": true,
- "engines": {
- "node": ">=4.0"
- }
- },
"node_modules/whatwg-encoding": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
@@ -12991,24 +12268,6 @@
"node": ">=8"
}
},
- "node_modules/yjs": {
- "version": "13.6.29",
- "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.29.tgz",
- "integrity": "sha512-kHqDPdltoXH+X4w1lVmMtddE3Oeqq48nM40FD5ojTd8xYhQpzIDcfE2keMSU5bAgRPJBe225WTUdyUgj1DtbiQ==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "lib0": "^0.2.99"
- },
- "engines": {
- "node": ">=16.0.0",
- "npm": ">=8.0.0"
- },
- "funding": {
- "type": "GitHub Sponsors ❤",
- "url": "https://github.com/sponsors/dmonad"
- }
- },
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
diff --git a/package.json b/package.json
index 7114167d..43334b3d 100644
--- a/package.json
+++ b/package.json
@@ -17,17 +17,17 @@
"test": "playwright test",
"test:headed": "playwright test --headed",
"test:ui": "playwright test --ui",
- "postinstall": "copyfiles -a -f node_modules/@churchapps/apphelper/public/locales/** public/apphelper/locales && copyfiles -a -f node_modules/@churchapps/apphelper-markdown/dist/editor.css public/apphelper/css && copyfiles -a -f node_modules/react-cropper/node_modules/cropperjs/dist/cropper.css public/css"
+ "postinstall": "copyfiles -a -f node_modules/@churchapps/apphelper/public/locales/** public/apphelper/locales && copyfiles -a -f node_modules/@churchapps/apphelper-markdown/dist/editor.css public/apphelper/css && copyfiles -a -f node_modules/react-cropper/node_modules/cropperjs/dist/cropper.css public/css && copyfiles -a -f node_modules/@churchapps/apphelper-website/dist/styles/animations.css node_modules/@churchapps/apphelper-website/dist/styles/pages.css src/styles/vendor && copyfiles -a -f node_modules/@churchapps/apphelper-markdown/dist/components/markdownEditor/editor.css public/apphelper/css/markdown && copyfiles -a -u 7 \"node_modules/@churchapps/apphelper-markdown/dist/components/markdownEditor/images/**/*\" public/apphelper/css/markdown/images"
},
"dependencies": {
- "@churchapps/apphelper": "0.6.19",
- "@churchapps/apphelper-donations": "^0.6.17",
- "@churchapps/apphelper-forms": "^0.6.14",
- "@churchapps/apphelper-login": "^0.6.18",
- "@churchapps/apphelper-markdown": "^0.6.15",
- "@churchapps/apphelper-website": "^0.6.17",
- "@churchapps/content-providers": "^0.1.6",
- "@churchapps/helpers": "1.2.30",
+ "@churchapps/apphelper": "0.6.20",
+ "@churchapps/apphelper-donations": "0.6.18",
+ "@churchapps/apphelper-forms": "0.6.15",
+ "@churchapps/apphelper-login": "0.6.19",
+ "@churchapps/apphelper-markdown": "0.6.18",
+ "@churchapps/apphelper-website": "0.6.19",
+ "@churchapps/content-providers": "0.1.8",
+ "@churchapps/helpers": "1.2.31",
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.1",
"@mui/icons-material": "^7.3.6",
@@ -58,6 +58,7 @@
"react-ga4": "^2.1.0",
"react-image-file-resizer": "^0.4.8",
"react-router-dom": "^7.6.3",
+ "react-google-recaptcha": "^3.1.0",
"react-youtube": "^10.1.0",
"rrule": "^2.8.1",
"webfontloader": "^1.6.28"
diff --git a/playwright.config.ts b/playwright.config.ts
index fb690322..63da97f1 100644
--- a/playwright.config.ts
+++ b/playwright.config.ts
@@ -14,7 +14,7 @@ export default defineConfig({
},
use: {
- baseURL: 'https://grace.demo.b1.church',
+ baseURL: process.env.BASE_URL || 'https://grace.demo.b1.church',
trace: 'retain-on-failure',
screenshot: 'only-on-failure',
video: 'off',
diff --git a/public/apphelper/css/markdown/editor.css b/public/apphelper/css/markdown/editor.css
new file mode 100644
index 00000000..596f1252
--- /dev/null
+++ b/public/apphelper/css/markdown/editor.css
@@ -0,0 +1,787 @@
+.other h2 {
+ font-size: 18px;
+ color: #444;
+ margin-bottom: 7px;
+}
+
+.other a {
+ color: #777;
+ text-decoration: underline;
+ font-size: 14px;
+}
+
+.other ul {
+ padding: 0;
+ margin: 0;
+ list-style-type: none;
+}
+
+/*
+.editor-list-ol li {
+ list-style-type: decimal !important;
+}
+
+.editor-list-ul li {
+ list-style-type: disc !important;
+}
+*/
+
+.text-left {
+ text-align: left;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.editor-container {
+ /*margin: 20px auto 20px auto;*/
+ border-radius: 2px;
+ /*color: #000;*/
+ position: relative;
+ /*line-height: 20px;*/
+ /*font-weight: 400;*/
+ border-radius: 5px;
+}
+
+.editor-inner {
+ position: relative;
+}
+
+.editor-input {
+ min-height: 150px;
+ resize: none;
+ font-size: 15px;
+ caret-color: rgb(5, 5, 5);
+ position: relative;
+ tab-size: 1;
+ outline: 0;
+ padding: 15px 10px;
+ caret-color: #444;
+}
+
+.editor-container.preview .editor-input {
+ padding: 0px 0px;
+}
+
+.editor-placeholder {
+ color: #999;
+ overflow: hidden;
+ position: absolute;
+ text-overflow: ellipsis;
+ top: 15px;
+ left: 10px;
+ font-size: 15px;
+ user-select: none;
+ display: inline-block;
+ pointer-events: none;
+}
+
+.editor-text-bold {
+ font-weight: bold;
+}
+
+.editor-text-italic {
+ font-style: italic;
+}
+
+.editor-text-underline {
+ text-decoration: underline;
+}
+
+.editor-text-strikethrough {
+ text-decoration: line-through;
+}
+
+.editor-text-underlineStrikethrough {
+ text-decoration: underline line-through;
+}
+
+.editor-text-code {
+ background-color: rgb(240, 242, 245);
+ padding: 1px 0.25rem;
+ font-family: Menlo, Consolas, Monaco, monospace;
+ font-size: 94%;
+}
+
+.editor-link {
+ color: rgb(33, 111, 219);
+ text-decoration: none;
+}
+
+.tree-view-output {
+ display: block;
+ background: #222;
+ color: #fff;
+ padding: 5px;
+ font-size: 12px;
+ white-space: pre-wrap;
+ margin: 1px auto 10px auto;
+ max-height: 250px;
+ position: relative;
+ border-bottom-left-radius: 10px;
+ border-bottom-right-radius: 10px;
+ overflow: auto;
+ line-height: 14px;
+}
+
+.editor-code {
+ background-color: rgb(240, 242, 245);
+ font-family: Menlo, Consolas, Monaco, monospace;
+ display: block;
+ padding: 8px 8px 8px 52px;
+ line-height: 1.53;
+ font-size: 13px;
+ margin: 0;
+ margin-top: 8px;
+ margin-bottom: 8px;
+ tab-size: 2;
+ /* white-space: pre; */
+ overflow-x: auto;
+ position: relative;
+}
+
+.editor-code:before {
+ content: attr(data-gutter);
+ position: absolute;
+ background-color: #eee;
+ left: 0;
+ top: 0;
+ border-right: 1px solid #ccc;
+ padding: 8px;
+ color: #777;
+ white-space: pre-wrap;
+ text-align: right;
+ min-width: 25px;
+}
+
+.editor-code:after {
+ content: attr(data-highlight-language);
+ top: 0;
+ right: 3px;
+ padding: 3px;
+ font-size: 10px;
+ text-transform: uppercase;
+ position: absolute;
+ color: rgba(0, 0, 0, 0.5);
+}
+
+.editor-tokenComment {
+ color: slategray;
+}
+
+.editor-tokenPunctuation {
+ color: #999;
+}
+
+.editor-tokenProperty {
+ color: #905;
+}
+
+.editor-tokenSelector {
+ color: #690;
+}
+
+.editor-tokenOperator {
+ color: #9a6e3a;
+}
+
+.editor-tokenAttr {
+ color: #07a;
+}
+
+.editor-tokenVariable {
+ color: #e90;
+}
+
+.editor-tokenFunction {
+ color: #dd4a68;
+}
+
+.editor-paragraph {
+ margin: 0;
+ margin-bottom: 8px;
+ position: relative;
+ /*
+ display: flex;
+ align-items: flex-end;
+ */
+}
+
+.editor-paragraph:last-child {
+ margin-bottom: 0;
+}
+.editor-heading-h1 {
+ line-height: 30px;
+}
+/*
+.editor-heading-h1 {
+ font-size: 24px;
+ font-weight: 400;
+ margin: 0;
+ margin-bottom: 12px;
+ padding: 0;
+ line-height: 24px;
+}
+
+.editor-heading-h2 {
+ font-size: 15px;
+ font-weight: 700;
+ margin: 0;
+ margin-top: 10px;
+ padding: 0;
+}
+*/
+.editor-quote {
+ margin: 0;
+ margin-left: 20px;
+ font-size: 15px;
+ color: rgb(101, 103, 107);
+ border-left-color: rgb(206, 208, 212);
+ border-left-width: 4px;
+ border-left-style: solid;
+ padding-left: 16px;
+}
+
+/*
+.editor-list-ol {
+ padding: 0;
+ margin: 0;
+ margin-left: 16px;
+}
+
+.editor-list-ul {
+ padding: 0;
+ margin: 0;
+ margin-left: 16px;
+}
+
+.editor-listitem {
+ margin: 8px 32px 8px 32px;
+}
+*/
+.editor-nested-listitem {
+ list-style-type: none;
+}
+
+
+.debug-timetravel-panel {
+ overflow: hidden;
+ padding: 0 0 10px 0;
+ margin: auto;
+ display: flex;
+}
+
+.debug-timetravel-panel-slider {
+ padding: 0;
+ flex: 8;
+}
+
+.debug-timetravel-panel-button {
+ padding: 0;
+ border: 0;
+ background: none;
+ flex: 1;
+ color: #fff;
+ font-size: 12px;
+}
+
+.debug-timetravel-panel-button:hover {
+ text-decoration: underline;
+}
+
+.debug-timetravel-button {
+ border: 0;
+ padding: 0;
+ font-size: 12px;
+ top: 10px;
+ right: 15px;
+ position: absolute;
+ background: none;
+ color: #fff;
+}
+
+.debug-timetravel-button:hover {
+ text-decoration: underline;
+}
+
+.emoji {
+ color: transparent;
+ background-size: 16px 16px;
+ background-position: center;
+ background-repeat: no-repeat;
+ vertical-align: middle;
+ margin: 0 -1px;
+}
+
+.emoji-inner {
+ padding: 0 0.15em;
+}
+
+.emoji-inner::selection {
+ color: transparent;
+ background-color: rgba(150, 150, 150, 0.4);
+}
+
+.emoji-inner::-moz-selection {
+ color: transparent;
+ background-color: rgba(150, 150, 150, 0.4);
+}
+
+.emoji.happysmile {
+ background-image: url(./images/emoji/1F642.png);
+}
+
+.toolbar {
+ display: flex;
+ position:sticky;
+ top: 0;
+ background-color: white;
+ z-index: 1;
+ margin-bottom: 1px;
+ padding: 4px;
+ border-top-left-radius: 10px;
+ border-top-right-radius: 10px;
+ vertical-align: middle;
+ border-bottom: 1px solid lightgray;
+}
+
+.toolbar button.toolbar-item {
+ border: 0;
+ display: flex;
+ background: none;
+ border-radius: 10px;
+ padding: 8px;
+ cursor: pointer;
+ vertical-align: middle;
+}
+
+.toolbar button.toolbar-item:disabled {
+ cursor: not-allowed;
+}
+
+.toolbar button.toolbar-item.spaced {
+ margin-right: 2px;
+}
+
+.toolbar button.toolbar-item i.format {
+ background-size: contain;
+ display: inline-block;
+ height: 18px;
+ width: 18px;
+ margin-top: 2px;
+ vertical-align: -0.25em;
+ display: flex;
+ opacity: 0.6;
+}
+
+.toolbar button.toolbar-item:disabled i.format {
+ opacity: 0.2;
+}
+
+.toolbar button.toolbar-item.active {
+ background-color: rgba(223, 232, 250, 0.3);
+}
+
+.toolbar button.toolbar-item.active i {
+ opacity: 1;
+}
+
+.toolbar .toolbar-item:hover:not([disabled]) {
+ background-color: #eee;
+}
+
+.toolbar .divider {
+ width: 1px;
+ background-color: #eee;
+ margin: 0 4px;
+}
+
+.toolbar select.toolbar-item {
+ border: 0;
+ display: flex;
+ background: none;
+ border-radius: 10px;
+ padding: 8px;
+ vertical-align: middle;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ width: 70px;
+ font-size: 14px;
+ color: #777;
+ text-overflow: ellipsis;
+}
+
+.toolbar select.code-language {
+ text-transform: capitalize;
+ width: 130px;
+}
+
+.toolbar .toolbar-item .text {
+ display: flex;
+ line-height: 20px;
+ width: 200px;
+ vertical-align: middle;
+ font-size: 14px;
+ color: #777;
+ text-overflow: ellipsis;
+ width: 70px;
+ overflow: hidden;
+ height: 20px;
+ text-align: left;
+}
+
+.toolbar .toolbar-item .icon {
+ display: flex;
+ width: 20px;
+ height: 20px;
+ user-select: none;
+ margin-right: 8px;
+ line-height: 16px;
+ background-size: contain;
+}
+
+.toolbar i.chevron-down {
+ margin-top: 3px;
+ width: 16px;
+ height: 16px;
+ display: flex;
+ user-select: none;
+}
+
+.toolbar i.chevron-down.inside {
+ width: 16px;
+ height: 16px;
+ display: flex;
+ margin-left: -25px;
+ margin-top: 11px;
+ margin-right: 10px;
+ pointer-events: none;
+}
+
+i.chevron-down {
+ background-color: transparent;
+ background-size: contain;
+ display: inline-block;
+ height: 8px;
+ width: 8px;
+ background-image: url(./images/icons/chevron-down.svg);
+}
+
+#block-controls button:hover {
+ background-color: #efefef;
+}
+
+#block-controls button:focus-visible {
+ border-color: blue;
+}
+
+#block-controls span.block-type {
+ background-size: contain;
+ display: block;
+ width: 18px;
+ height: 18px;
+ margin: 2px;
+}
+
+#block-controls span.block-type.paragraph {
+ background-image: url(./images/icons/text-paragraph.svg);
+}
+
+#block-controls span.block-type.h1 {
+ background-image: url(./images/icons/type-h1.svg);
+}
+
+#block-controls span.block-type.h2 {
+ background-image: url(./images/icons/type-h2.svg);
+}
+
+#block-controls span.block-type.quote {
+ background-image: url(./images/icons/chat-square-quote.svg);
+}
+
+#block-controls span.block-type.ul {
+ background-image: url(./images/icons/list-ul.svg);
+}
+
+#block-controls span.block-type.ol {
+ background-image: url(./images/icons/list-ol.svg);
+}
+
+#block-controls span.block-type.code {
+ background-image: url(./images/icons/code.svg);
+}
+
+.dropdown {
+ z-index: 1301;
+ display: block;
+ position: absolute;
+ box-shadow: 0 12px 28px 0 rgba(0, 0, 0, 0.2), 0 2px 4px 0 rgba(0, 0, 0, 0.1),
+ inset 0 0 0 1px rgba(255, 255, 255, 0.5);
+ border-radius: 8px;
+ min-width: 100px;
+ min-height: 40px;
+ background-color: #fff;
+}
+
+.dropdown .item {
+ margin: 0 8px 0 8px;
+ padding: 8px;
+ color: #050505;
+ cursor: pointer;
+ line-height: 16px;
+ font-size: 15px;
+ display: flex;
+ align-content: center;
+ flex-direction: row;
+ flex-shrink: 0;
+ justify-content: space-between;
+ background-color: #fff;
+ border-radius: 8px;
+ border: 0;
+ min-width: 268px;
+}
+
+.dropdown .item .active {
+ display: flex;
+ width: 20px;
+ height: 20px;
+ background-size: contain;
+}
+
+.dropdown .item:first-child {
+ margin-top: 8px;
+}
+
+.dropdown .item:last-child {
+ margin-bottom: 8px;
+}
+
+.dropdown .item:hover {
+ background-color: #eee;
+}
+
+.dropdown .item .text {
+ display: flex;
+ line-height: 20px;
+ flex-grow: 1;
+ width: 200px;
+}
+
+.dropdown .item .icon {
+ display: flex;
+ width: 20px;
+ height: 20px;
+ user-select: none;
+ margin-right: 12px;
+ line-height: 16px;
+ background-size: contain;
+}
+
+.link-editor {
+ position: absolute;
+ z-index: 1301;
+ top: -10000px;
+ left: -10000px;
+ margin-top: -6px;
+ max-width: 300px;
+ width: 100%;
+ opacity: 0;
+ background-color: #fff;
+ box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.3);
+ border-radius: 8px;
+ transition: opacity 0.5s;
+ padding:10px;
+}
+.link-editor .MuiFormControl-root {
+ margin-top:10px;
+ margin-bottom: 10px;
+}
+
+i.undo {
+ background-image: url(./images/icons/arrow-counterclockwise.svg);
+}
+
+i.redo {
+ background-image: url(./images/icons/arrow-clockwise.svg);
+}
+
+.icon.paragraph {
+ background-image: url(./images/icons/text-paragraph.svg);
+}
+
+.icon.large-heading,
+.icon.h1 {
+ background-image: url(./images/icons/type-h1.svg);
+}
+
+.icon.small-heading,
+.icon.h2 {
+ background-image: url(./images/icons/type-h2.svg);
+}
+
+.icon.h3 {
+ background-image: url(./images/icons/type-h3.svg);
+}
+
+.icon.h4 {
+ background-image: url(./images/icons/type-h4.svg);
+}
+
+.icon.bullet-list,
+.icon.ul {
+ background-image: url(./images/icons/list-ul.svg);
+}
+
+.icon.numbered-list,
+.icon.ol {
+ background-image: url(./images/icons/list-ol.svg);
+}
+
+.icon.quote {
+ background-image: url(./images/icons/chat-square-quote.svg);
+}
+
+.icon.code {
+ background-image: url(./images/icons/code.svg);
+}
+
+i.bold {
+ background-image: url(./images/icons/type-bold.svg);
+}
+
+i.italic {
+ background-image: url(./images/icons/type-italic.svg);
+}
+
+i.underline {
+ background-image: url(./images/icons/type-underline.svg);
+}
+
+i.strikethrough {
+ background-image: url(./images/icons/type-strikethrough.svg);
+}
+
+i.code {
+ background-image: url(./images/icons/code.svg);
+}
+
+i.link {
+ background-image: url(./images/icons/link.svg);
+}
+
+i.left-align {
+ background-image: url(./images/icons/text-left.svg);
+}
+
+i.center-align {
+ background-image: url(./images/icons/text-center.svg);
+}
+
+i.right-align {
+ background-image: url(./images/icons/text-right.svg);
+}
+
+i.justify-align {
+ background-image: url(./images/icons/justify.svg);
+}
+
+.typeahead-popover {
+ background: #fff;
+ box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.3);
+ border-radius: 8px;
+ margin-top: 25px;
+}
+
+.typeahead-popover ul {
+ padding: 0;
+ list-style: none;
+ margin: 0;
+ border-radius: 8px;
+ max-height: 200px;
+ overflow-y: scroll;
+}
+
+.typeahead-popover ul::-webkit-scrollbar {
+ display: none;
+}
+
+.typeahead-popover ul {
+ -ms-overflow-style: none;
+ scrollbar-width: none;
+}
+
+.typeahead-popover ul li {
+ margin: 0;
+ min-width: 180px;
+ font-size: 14px;
+ outline: none;
+ cursor: pointer;
+ border-radius: 8px;
+}
+
+.typeahead-popover ul li.selected {
+ background: #eee;
+}
+
+.typeahead-popover li {
+ margin: 0 8px 0 8px;
+ padding: 8px;
+ color: #050505;
+ cursor: pointer;
+ line-height: 16px;
+ font-size: 15px;
+ display: flex;
+ align-content: center;
+ flex-direction: row;
+ flex-shrink: 0;
+ background-color: #fff;
+ border-radius: 8px;
+ border: 0;
+}
+
+.typeahead-popover li.active {
+ display: flex;
+ width: 20px;
+ height: 20px;
+ background-size: contain;
+}
+
+.typeahead-popover li:first-child {
+ border-radius: 8px 8px 0px 0px;
+}
+
+.typeahead-popover li:last-child {
+ border-radius: 0px 0px 8px 8px;
+}
+
+.typeahead-popover li:hover {
+ background-color: #eee;
+}
+
+.typeahead-popover li .text {
+ display: flex;
+ line-height: 20px;
+ flex-grow: 1;
+ min-width: 150px;
+}
+
+.typeahead-popover li .icon {
+ display: flex;
+ width: 20px;
+ height: 20px;
+ user-select: none;
+ margin-right: 8px;
+ line-height: 16px;
+ background-size: contain;
+ background-repeat: no-repeat;
+ background-position: center;
+}
+
+.emoji-menu {
+ width: 200px;
+}
diff --git a/public/apphelper/css/markdown/images/emoji/1F600.png b/public/apphelper/css/markdown/images/emoji/1F600.png
new file mode 100644
index 00000000..ba0e4feb
Binary files /dev/null and b/public/apphelper/css/markdown/images/emoji/1F600.png differ
diff --git a/public/apphelper/css/markdown/images/emoji/1F641.png b/public/apphelper/css/markdown/images/emoji/1F641.png
new file mode 100644
index 00000000..0dd4e5be
Binary files /dev/null and b/public/apphelper/css/markdown/images/emoji/1F641.png differ
diff --git a/public/apphelper/css/markdown/images/emoji/1F642.png b/public/apphelper/css/markdown/images/emoji/1F642.png
new file mode 100644
index 00000000..b37115fd
Binary files /dev/null and b/public/apphelper/css/markdown/images/emoji/1F642.png differ
diff --git a/public/apphelper/css/markdown/images/emoji/2764.png b/public/apphelper/css/markdown/images/emoji/2764.png
new file mode 100644
index 00000000..2c6c24a9
Binary files /dev/null and b/public/apphelper/css/markdown/images/emoji/2764.png differ
diff --git a/public/apphelper/css/markdown/images/icons/arrow-clockwise.svg b/public/apphelper/css/markdown/images/icons/arrow-clockwise.svg
new file mode 100644
index 00000000..b072eb09
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/arrow-clockwise.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/arrow-counterclockwise.svg b/public/apphelper/css/markdown/images/icons/arrow-counterclockwise.svg
new file mode 100644
index 00000000..b0b23b9b
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/arrow-counterclockwise.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/chat-square-quote.svg b/public/apphelper/css/markdown/images/icons/chat-square-quote.svg
new file mode 100644
index 00000000..40893f49
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/chat-square-quote.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/chevron-down.svg b/public/apphelper/css/markdown/images/icons/chevron-down.svg
new file mode 100644
index 00000000..1f0b8bc7
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/chevron-down.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/code.svg b/public/apphelper/css/markdown/images/icons/code.svg
new file mode 100644
index 00000000..079f5c67
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/code.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/journal-code.svg b/public/apphelper/css/markdown/images/icons/journal-code.svg
new file mode 100644
index 00000000..82098b9c
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/journal-code.svg
@@ -0,0 +1,5 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/journal-text.svg b/public/apphelper/css/markdown/images/icons/journal-text.svg
new file mode 100644
index 00000000..9b66f43a
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/journal-text.svg
@@ -0,0 +1,5 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/justify.svg b/public/apphelper/css/markdown/images/icons/justify.svg
new file mode 100644
index 00000000..009bd721
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/justify.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/link.svg b/public/apphelper/css/markdown/images/icons/link.svg
new file mode 100644
index 00000000..df35bc8a
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/link.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/list-ol.svg b/public/apphelper/css/markdown/images/icons/list-ol.svg
new file mode 100644
index 00000000..5782568d
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/list-ol.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/list-ul.svg b/public/apphelper/css/markdown/images/icons/list-ul.svg
new file mode 100644
index 00000000..217d1539
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/list-ul.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/pencil-fill.svg b/public/apphelper/css/markdown/images/icons/pencil-fill.svg
new file mode 100644
index 00000000..59d2830c
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/pencil-fill.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/text-center.svg b/public/apphelper/css/markdown/images/icons/text-center.svg
new file mode 100644
index 00000000..2887a99f
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/text-center.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/text-left.svg b/public/apphelper/css/markdown/images/icons/text-left.svg
new file mode 100644
index 00000000..04526116
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/text-left.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/text-paragraph.svg b/public/apphelper/css/markdown/images/icons/text-paragraph.svg
new file mode 100644
index 00000000..9779beab
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/text-paragraph.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/text-right.svg b/public/apphelper/css/markdown/images/icons/text-right.svg
new file mode 100644
index 00000000..34686b0f
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/text-right.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/type-bold.svg b/public/apphelper/css/markdown/images/icons/type-bold.svg
new file mode 100644
index 00000000..276d133c
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/type-bold.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/type-h1.svg b/public/apphelper/css/markdown/images/icons/type-h1.svg
new file mode 100644
index 00000000..4c891817
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/type-h1.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/type-h2.svg b/public/apphelper/css/markdown/images/icons/type-h2.svg
new file mode 100644
index 00000000..b6ab7650
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/type-h2.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/type-h3.svg b/public/apphelper/css/markdown/images/icons/type-h3.svg
new file mode 100644
index 00000000..154c293f
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/type-h3.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/type-h4.svg b/public/apphelper/css/markdown/images/icons/type-h4.svg
new file mode 100644
index 00000000..af53db2c
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/type-h4.svg
@@ -0,0 +1,13 @@
+
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/type-italic.svg b/public/apphelper/css/markdown/images/icons/type-italic.svg
new file mode 100644
index 00000000..3ac6b09f
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/type-italic.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/type-strikethrough.svg b/public/apphelper/css/markdown/images/icons/type-strikethrough.svg
new file mode 100644
index 00000000..1c940e42
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/type-strikethrough.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/public/apphelper/css/markdown/images/icons/type-underline.svg b/public/apphelper/css/markdown/images/icons/type-underline.svg
new file mode 100644
index 00000000..c299b8bf
--- /dev/null
+++ b/public/apphelper/css/markdown/images/icons/type-underline.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/src/app/[sdSlug]/[pageSlug]/[id]/page.tsx b/src/app/[sdSlug]/[pageSlug]/[id]/page.tsx
index 9f48759b..133f7d5d 100644
--- a/src/app/[sdSlug]/[pageSlug]/[id]/page.tsx
+++ b/src/app/[sdSlug]/[pageSlug]/[id]/page.tsx
@@ -4,7 +4,7 @@ import { ConfigHelper, EnvironmentHelper } from "@/helpers";
import { ConfigurationInterface } from "@/helpers/ConfigHelper";
import { MetaHelper } from "@/helpers/MetaHelper";
import { Metadata } from "next";
-import "@churchapps/apphelper-website/dist/styles/animations.css";
+import "@/styles/vendor/animations.css";
import { Animate } from "@churchapps/apphelper-website";
import { FormPage } from "./components/FormPage";
import { notFound } from "next/navigation";
diff --git a/src/app/[sdSlug]/[pageSlug]/page.tsx b/src/app/[sdSlug]/[pageSlug]/page.tsx
index 7b152965..b24e44cc 100644
--- a/src/app/[sdSlug]/[pageSlug]/page.tsx
+++ b/src/app/[sdSlug]/[pageSlug]/page.tsx
@@ -5,7 +5,7 @@ import { ConfigHelper, EnvironmentHelper, PageInterface } from "@/helpers";
import { ConfigurationInterface } from "@/helpers/ConfigHelper";
import { MetaHelper } from "@/helpers/MetaHelper";
import { Metadata } from "next";
-import "@churchapps/apphelper-website/dist/styles/animations.css";
+import "@/styles/vendor/animations.css";
import { Animate } from "@churchapps/apphelper-website";
import { VotdPage } from "./components/VotdPage";
import { BiblePage } from "./components/BiblePage";
diff --git a/src/app/[sdSlug]/my/[pageSlug]/[id]/page.tsx b/src/app/[sdSlug]/my/[pageSlug]/[id]/page.tsx
index af340e9e..050ec43d 100644
--- a/src/app/[sdSlug]/my/[pageSlug]/[id]/page.tsx
+++ b/src/app/[sdSlug]/my/[pageSlug]/[id]/page.tsx
@@ -5,7 +5,7 @@ import { ConfigurationInterface } from "@/helpers/ConfigHelper";
import { MetaHelper } from "@/helpers/MetaHelper";
import { Metadata } from "next";
import { redirect } from "next/navigation";
-import "@churchapps/apphelper-website/dist/styles/animations.css";
+import "@/styles/vendor/animations.css";
import { Animate } from "@churchapps/apphelper-website";
import { TimelinePage } from "../components/TimelinePage";
diff --git a/src/app/[sdSlug]/my/[pageSlug]/components/MyWrapper.tsx b/src/app/[sdSlug]/my/[pageSlug]/components/MyWrapper.tsx
index ae1c8cdc..6860c587 100644
--- a/src/app/[sdSlug]/my/[pageSlug]/components/MyWrapper.tsx
+++ b/src/app/[sdSlug]/my/[pageSlug]/components/MyWrapper.tsx
@@ -1,4 +1,4 @@
-import "@churchapps/apphelper-website/dist/styles/animations.css";
+import "@/styles/vendor/animations.css";
import React from "react";
import { Breadcrumbs, Container } from "@mui/material";
diff --git a/src/app/[sdSlug]/my/[pageSlug]/page.tsx b/src/app/[sdSlug]/my/[pageSlug]/page.tsx
index f91b9acc..c776e1c6 100644
--- a/src/app/[sdSlug]/my/[pageSlug]/page.tsx
+++ b/src/app/[sdSlug]/my/[pageSlug]/page.tsx
@@ -4,7 +4,7 @@ import { ConfigHelper, EnvironmentHelper } from "@/helpers";
import { ConfigurationInterface } from "@/helpers/ConfigHelper";
import { MetaHelper } from "@/helpers/MetaHelper";
import { Metadata } from "next";
-import "@churchapps/apphelper-website/dist/styles/animations.css";
+import "@/styles/vendor/animations.css";
import { Animate } from "@churchapps/apphelper-website";
import { TimelinePage } from "./components/TimelinePage";
diff --git a/src/app/[sdSlug]/page.tsx b/src/app/[sdSlug]/page.tsx
index b01bcaa6..f29600e3 100644
--- a/src/app/[sdSlug]/page.tsx
+++ b/src/app/[sdSlug]/page.tsx
@@ -5,7 +5,7 @@ import { PageLayout } from "@/components/PageLayout";
import { Metadata } from "next";
import { MetaHelper } from "@/helpers/MetaHelper";
import { EnvironmentHelper } from "@/helpers/EnvironmentHelper";
-import "@churchapps/apphelper-website/dist/styles/animations.css";
+import "@/styles/vendor/animations.css";
import { Animate } from "@churchapps/apphelper-website";
import { redirect } from "next/navigation";
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index a1c9150e..4c8be49b 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -1,11 +1,10 @@
import "react-activity/dist/Dots.css";
-import "@churchapps/apphelper-website/dist/styles/pages.css";
+import "@/styles/vendor/pages.css";
import "@/styles/member.css";
import "@/styles/streaming.css";
import "@/styles/buttons.css";
import "@/styles/sidebar.css";
import "@/styles/master-detail.css";
-import "@churchapps/apphelper-markdown/dist/components/markdownEditor/editor.css";
import "@youversion/platform-react-ui/styles.css";
import ClientLayout from "./ClientLayout";
import { EnvironmentHelper } from "@/helpers/EnvironmentHelper";
@@ -34,6 +33,7 @@ export default async function RootLayout({ children }: { children: React.ReactNo
+
{children}
diff --git a/src/components/notes/NewConversation.tsx b/src/components/notes/NewConversation.tsx
index 6222792e..e1e2279b 100644
--- a/src/components/notes/NewConversation.tsx
+++ b/src/components/notes/NewConversation.tsx
@@ -64,7 +64,7 @@ export function NewConversation({ context, conversation, ...props }: Props) {
cId = result[0].id;
}
- const m = { ...message, conversationId: cId };
+ const m = { ...message, conversationId: cId, displayName: context?.person?.name?.display || "" };
await ApiHelper.post("/messages", [m], "MessagingApi");
setMessage({ ...message, content: "" });
diff --git a/tests/general.spec.ts b/tests/general.spec.ts
new file mode 100644
index 00000000..4a45abdf
--- /dev/null
+++ b/tests/general.spec.ts
@@ -0,0 +1,434 @@
+import { test, expect } from '@playwright/test';
+import { TestHelpers } from './helpers/test-base';
+
+// OCTAVIAN/OCTAVIUS are the names used for testing. If you see Octavian or Octavius entered anywhere, it is a result of these tests.
+test.describe('General Tests', () => {
+ test.beforeEach(async ({ page }) => {
+ await page.goto('/my/timeline');
+ await page.waitForLoadState('domcontentloaded');
+ const loginBtn = page.locator('[id="login-submit-button"]');
+ await loginBtn.click();
+ await page.waitForTimeout(500);
+ });
+
+ test.describe('Timeline', () => {
+ test('UNFINISHED should send message on updates', async ({ page }) => {
+ const firstItem = page.locator('[class="memberItem"]').first();
+ await firstItem.click();
+ const textbox = page.locator('[name="noteText"]').first();
+ await textbox.fill('Octavian Test Message');
+ const sendBtn = page.locator('button span').getByText('send').first();
+ await sendBtn.click();
+ });
+ });
+
+ test.describe('Giving', () => {
+ test.beforeEach(async ({ page }) => {
+ const directoryTab = page.locator('[data-testid="my-tab-give"]');
+ await directoryTab.click();
+ await page.waitForTimeout(500);
+ });
+
+ test.skip('UNFINSHED should add donation', async ({ page }) => {
+ const donationTab = page.locator('[class="memberName"]').getByText('Give Now');
+ await donationTab.click();
+ });
+
+ test('UNFINSHED should check donation history', async ({ page }) => {
+ const historyTab = page.locator('[class="memberName"]').getByText('History');
+ await historyTab.click();
+ });
+
+ test('UNFINSHED should check recurring donations', async ({ page }) => {
+ const recurringTab = page.locator('[class="memberName"]').getByText('Recurring Donations');
+ await recurringTab.click();
+ });
+ });
+
+ test.describe('Groups', () => {
+ test.beforeEach(async ({ page }) => {
+ const directoryTab = page.locator('[data-testid="my-tab-my groups"]');
+ await directoryTab.click();
+ await page.waitForTimeout(2000);
+ const praiseTeam = page.locator('div').getByText('Praise Team').first();
+ await praiseTeam.click();
+ await page.waitForTimeout(1000);
+ });
+
+ test('should view group details', async ({ page }) => {
+ const details = page.locator('p').getByText('Contemporary worship team for Sunday services');
+ await expect(details).toHaveCount(1);
+ });
+
+ test('should add group member', async ({ page }) => {
+ const memTab = page.locator('[class="sideNav"] li a').getByText('Members');
+ await memTab.click();
+
+ const searchBar = page.locator('[name="personAddText"]');
+ await searchBar.fill('Sarah Wilson');
+ const searchBtn = page.locator('[data-testid="search-person-button"]');
+ await searchBtn.click();
+ const addBtn = page.locator('[data-testid="add-person-PER00000050-button"]');
+ await addBtn.click();
+ const validatedAddition = page.locator('[id="groupMembersBox"] td a').getByText('Sarah Wilson');
+ await expect(validatedAddition).toHaveCount(1);
+ });
+
+ test('should remove group member', async ({ page }) => {
+ const memTab = page.locator('[class="sideNav"] li a').getByText('Members');
+ await memTab.click();
+
+ const removeBtn = page.locator('button span').getByText('remove').last();
+ await removeBtn.click();
+ await page.waitForTimeout(500);
+ const validatedRemoval = page.locator('[id="groupMembersBox"] td a').getByText('Sarah Wilson');
+ await expect(validatedRemoval).toHaveCount(0);
+ });
+
+ test('should view member details', async ({ page }) => {
+ const memTab = page.locator('[class="sideNav"] li a').getByText('Members');
+ await memTab.click();
+ await page.waitForTimeout(500);
+
+ const firstMem = page.locator('[id="groupMembersBox"] td a').first();
+ await firstMem.click();
+ await page.waitForTimeout(500);
+ const loginBtn = page.locator('[id="login-submit-button"]');
+ await loginBtn.click();
+ await page.waitForTimeout(500);
+ const validatedPerson = page.locator('h2').getByText('Michael Davis');
+ await expect(validatedPerson).toHaveCount(1);
+ await expect(page).toHaveURL(/\/my\/community\/PER\d+/);
+ });
+
+ test('should add attendance session', async ({ page }) => {
+ const attTab = page.locator('[class="sideNav"] li a').getByText('Attendance');
+ await attTab.click();
+
+ const addBtn = page.locator('[data-testid="add-service-time-button"]');
+ await addBtn.click();
+ const date = page.locator('input').last();
+ await date.fill('2025-03-01');
+ const saveBtn = page.locator('button').getByText('Save');
+ await saveBtn.click();
+ const sessions = page.locator('[role="combobox"]');
+ await sessions.click();
+ const validatedSession = page.locator('li').getByText('03/01/2025');
+ await expect(validatedSession).toHaveCount(1);
+ });
+
+ test('should add person to session', async ({ page }) => {
+ const attTab = page.locator('[class="sideNav"] li a').getByText('Attendance');
+ await attTab.click();
+
+ const sessions = page.locator('[role="combobox"]');
+ await sessions.click();
+ const session = page.locator('li').getByText('03/01/2025');
+ await session.click();
+ const addBtn = page.locator('button').getByText('Add').first();
+ await addBtn.click();
+ const validatedAddition = page.locator('[id="groupMemberTable"] td a').getByText('Michael Davis');
+ await expect(validatedAddition).toHaveCount(1);
+ });
+
+ test('should remove person from session', async ({ page }) => {
+ const attTab = page.locator('[class="sideNav"] li a').getByText('Attendance');
+ await attTab.click();
+
+ const sessions = page.locator('[role="combobox"]');
+ await sessions.click();
+ const session = page.locator('li').getByText('03/01/2025');
+ await session.click();
+ const removeBtn = page.locator('button').getByText('Remove').first();
+ await removeBtn.click();
+ const validatedRemoval = page.locator('[id="groupMemberTable"] td a').getByText('Michael Davis');
+ await expect(validatedRemoval).toHaveCount(0);
+ });
+
+ test('should add event to calendar', async ({ page }) => {
+ const calendarTab = page.locator('[class="sideNav"] li a').getByText('Calendar');
+ await calendarTab.click();
+
+ const addBtn = page.locator('[data-testid="event-add-button"]');
+ await addBtn.click();
+ const recurring = page.locator('[name="recurring"]');
+ await recurring.click();
+ const startDate = page.locator('[name="start"]');
+ await startDate.fill('2025-03-01T13:00');
+ const endDate = page.locator('[name="end"]');
+ await endDate.fill('2025-03-01T15:00');
+ const frequency = page.locator('[id="mui-component-select-freq"]');
+ await frequency.click();
+ const week = page.locator('li').getByText('Week');
+ await week.click();
+ const title = page.locator('[name="title"]');
+ await title.fill('Octavian Test Event');
+ const notes = page.locator('[role="textbox"]');
+ await notes.fill('Playwright testing event, feel free to delete');
+ const saveBtn = page.locator('[data-testid="save-event-button"]');
+ await saveBtn.click();
+
+ const validatedEvent = page.locator('[title="Octavian Test Event"]').first();
+ await expect(validatedEvent).toHaveCount(1);
+ });
+
+ test('should edit calendar event', async ({ page }) => {
+ const calendarTab = page.locator('[class="sideNav"] li a').getByText('Calendar');
+ await calendarTab.click();
+
+ const event = page.locator('[title="Octavian Test Event"]').first();
+ await event.click();
+ const editBtn = page.locator('[data-testid="event-edit-button"]').first();
+ await editBtn.click();
+ const title = page.locator('[name="title"]');
+ await title.fill('Octavius Test Event');
+ const saveBtn = page.locator('[data-testid="save-event-button"]');
+ await saveBtn.click();
+ const selectAll = page.locator('[value="all"]');
+ await selectAll.click();
+ const confirmSave = page.locator('[data-testid="edit-recurring-save-button"]');
+ await confirmSave.click();
+ const validatedEdit = page.locator('[title="Octavius Test Event"]').first();
+ await expect(validatedEdit).toHaveCount(1);
+ });
+
+ test('should remove event from calendar', async ({ page }) => {
+ const calendarTab = page.locator('[class="sideNav"] li a').getByText('Calendar');
+ await calendarTab.click();
+
+ const event = page.locator('[title="Octavius Test Event"]').first();
+ await event.click();
+ const editBtn = page.locator('[data-testid="event-edit-button"]').first();
+ await editBtn.click();
+ const deleteBtn = page.locator('[data-testid="delete-event-button"]');
+ await deleteBtn.click();
+ const selectAll = page.locator('[value="all"]');
+ await selectAll.click();
+ const confirmDelete = page.locator('[data-testid="edit-recurring-save-button"]');
+ await confirmDelete.click();
+ const validatedEdit = page.locator('[title="Octavius Test Event"]').first();
+ await expect(validatedEdit).toHaveCount(0);
+ });
+
+ test('should send conversation message', async ({ page }) => {
+ const convoTab = page.locator('[class="sideNav"] li a').getByText('Conversations');
+ await convoTab.click();
+
+ const messageBox = page.locator('[name="noteText"]');
+ await messageBox.fill('Octavian Test Message');
+ const sendBtn = page.locator('button span').getByText('send');
+ await sendBtn.click();
+ const validatedMessage = page.locator('p').getByText('Octavian Test Message');
+ await expect(validatedMessage).toHaveCount(1);
+ });
+
+ test('should edit conversation message', async ({ page }) => {
+ const convoTab = page.locator('[class="sideNav"] li a').getByText('Conversations');
+ await convoTab.click();
+
+ const editBtn = page.locator('button span').getByText('edit');
+ await editBtn.click();
+ const messageBox = page.locator('[name="noteText"]');
+ await messageBox.fill('Octavius Test Message');
+ const sendBtn = page.locator('button span').getByText('send');
+ await sendBtn.click();
+ const validatedEdit = page.locator('p').getByText('Octavius Test Message');
+ await expect(validatedEdit).toHaveCount(1);
+ const oldMessage = page.locator('p').getByText('Octavian Test Message');
+ await expect(oldMessage).toHaveCount(0);
+ });
+
+ test('should delete conversation message', async ({ page }) => {
+ const convoTab = page.locator('[class="sideNav"] li a').getByText('Conversations');
+ await convoTab.click();
+
+ const editBtn = page.locator('button span').getByText('edit').first();
+ await editBtn.click();
+ const deleteBtn = page.locator('button span').getByText('delete').first();
+ await deleteBtn.click();
+ const validatedDeletion = page.locator('p').getByText('Octavius Test Message');
+ await expect(validatedDeletion).toHaveCount(0);
+ });
+ });
+
+ test.describe('Directory', () => {
+ test.beforeEach(async ({ page }) => {
+ const directoryTab = page.locator('[data-testid="my-tab-directory"]');
+ await directoryTab.click();
+ await page.waitForTimeout(500);
+ });
+
+ test('should search for person', async ({ page }) => {
+ const searchBar = page.locator('[class="masterSearch"] input');
+ await searchBar.fill('Mary');
+ const searchBtn = page.locator('[class="masterSearch"] button');
+ await searchBtn.click();
+ await page.waitForTimeout(500);
+ const searchResult = page.locator('[class="memberName"]').first();
+ await searchResult.click();
+ await page.waitForTimeout(500);
+ const validatedResult = page.locator('h3').getByText('Mary Smith');
+ await expect(validatedResult).toHaveCount(1);
+ });
+
+ test('UNFINISHED should message person', async ({ page }) => {
+ const firstPerson = page.locator('[class="memberName"]').first();
+ await firstPerson.click();
+ await page.waitForTimeout(500);
+
+ const messageBtn = page.locator('button').getByText('Message');
+ await messageBtn.click();
+ const messageBox = page.locator('[name="noteText"]');
+ await messageBox.fill('Octavian Test Message');
+ const sendBtn = page.locator('button span').getByText('send');
+ await sendBtn.click();
+ });
+
+ test('should search for group member', async ({ page }) => {
+ const groupTab = page.locator('[class="filterBtn"]').getByText('Groups');
+ await groupTab.click();
+ const searchBar = page.locator('[role="combobox"]');
+ await searchBar.click();
+ const group = page.locator('[data-value="GRP00000019"]');
+ await group.click();
+ const searchBtn = page.locator('[class="masterSearch"] button');
+ await searchBtn.click();
+ await page.waitForTimeout(500);
+ const searchResult = page.locator('[class="memberName"]').first();
+ await searchResult.click();
+ await page.waitForTimeout(500);
+ const validatedResult = page.locator('h3').getByText('Emily Davis');
+ await expect(validatedResult).toHaveCount(1);
+ });
+ });
+
+ test.describe('Serving', () => {
+ test.beforeEach(async ({ page }) => {
+ const directoryTab = page.locator('[data-testid="my-tab-serving"]');
+ await directoryTab.click();
+ await page.waitForTimeout(500);
+ });
+
+ test('should add blockout dates', async ({ page }) => {
+ const blockout = page.locator('[class="memberName"]').getByText('Blockout Dates');
+ await blockout.click();
+ const addBtn = page.locator('button span').getByText('add');
+ await addBtn.click();
+ const startDate = page.locator('[name="startDate"]');
+ await startDate.fill('2025-03-01');
+ const endDate = page.locator('[name="endDate"]');
+ await endDate.fill('2025-03-10');
+ const saveBtn = page.locator('button').getByText('save');
+ await saveBtn.click();
+ const validatedStart = page.locator('table td').getByText('Mar 1, 2025');
+ await expect(validatedStart).toHaveCount(1);
+ const validatedEnd = page.locator('table td').getByText('Mar 10, 2025');
+ await expect(validatedEnd).toHaveCount(1);
+ });
+
+ test('should edit blockout dates', async ({ page }) => {
+ const blockout = page.locator('[class="memberName"]').getByText('Blockout Dates');
+ await blockout.click();
+ const editBtn = page.locator('button span').getByText('edit').last();
+ await editBtn.click();
+ const startDate = page.locator('[name="startDate"]');
+ await startDate.fill('2025-04-01');
+ const endDate = page.locator('[name="endDate"]');
+ await endDate.fill('2025-04-10');
+ const saveBtn = page.locator('button').getByText('save');
+ await saveBtn.click();
+ const validatedStart = page.locator('table td').getByText('Apr 1, 2025');
+ await expect(validatedStart).toHaveCount(1);
+ const validatedEnd = page.locator('table td').getByText('Apr 10, 2025');
+ await expect(validatedEnd).toHaveCount(1);
+ });
+
+ test('should cancel editing blockout dates', async ({ page }) => {
+ const blockout = page.locator('[class="memberName"]').getByText('Blockout Dates');
+ await blockout.click();
+ const editBtn = page.locator('button span').getByText('edit').last();
+ await editBtn.click();
+ const startDate = page.locator('[name="startDate"]');
+ await expect(startDate).toHaveCount(1);
+ const cancelBtn = page.locator('button').getByText('Cancel');
+ await cancelBtn.click();
+ await expect(startDate).toHaveCount(0);
+ });
+
+ test('should delete blockout dates', async ({ page }) => {
+ const blockout = page.locator('[class="memberName"]').getByText('Blockout Dates');
+ await blockout.click();
+ const editBtn = page.locator('button span').getByText('edit').last();
+ await editBtn.click();
+ await page.waitForTimeout(300)
+ const deleteBtn = page.locator('[id="delete"]');
+ await deleteBtn.click();
+ const validatedStart = page.locator('table td').getByText('Apr 1, 2025');
+ await expect(validatedStart).toHaveCount(0);
+ const validatedEnd = page.locator('table td').getByText('Apr 10, 2025');
+ await expect(validatedEnd).toHaveCount(0);
+ });
+
+ test('should view/verify serving time details', async ({ page, context }) => {
+ const servTime = page.locator('[class="memberName"]').getByText('Upcoming Worship Schedule');
+ await servTime.click();
+ await page.waitForTimeout(500);
+ const verifiedServTime = page.locator('h1').getByText('Upcoming Worship Schedule');
+ await expect(verifiedServTime).toHaveCount(1);
+ const expectedRole = page.locator('[id="input-box-title"]').getByText('Position: Sound Tech');
+ await expect(expectedRole).toHaveCount(1);
+ const expectedResponse = page.locator('div').getByText('Status: Accepted');
+ await expect(expectedResponse).toHaveCount(1);
+ const techTeam = page.locator('[data-testid="team-technical-display-box"] a').getByText('Demo User');
+ await expect(techTeam).toHaveCount(1);
+ const worshipTeam = page.locator('[data-testid="team-worship-display-box"] a').getByText('David Lopez');
+ await expect(worshipTeam).toHaveCount(1);
+
+ const countdownVid = page.locator('div a').getByText('Countdown Video');
+ await countdownVid.click();
+ const [newPage] = await Promise.all([
+ context.waitForEvent('page'),
+ countdownVid.click()
+ ]);
+ await newPage.waitForLoadState();
+ await page.waitForTimeout(5000);
+ await expect(newPage).toHaveURL('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
+ });
+ });
+
+ test.describe('Check In', () => {
+ test.beforeEach(async ({ page }) => {
+ const checkInTab = page.locator('[data-testid="my-tab-check-in"]');
+ await checkInTab.click();
+ await page.waitForTimeout(500);
+ });
+ test('should check self in', async ({ page }) => {
+ const sundayMorning = page.locator('button div h6').getByText('Sunday Morning Service');
+ await sundayMorning.click();
+ const demoUser = page.locator('button div h6').getByText('Demo User');
+ await demoUser.click();
+ const earlyServ = page.locator('button').getByText('Select Group').last();
+ await earlyServ.click();
+ const sundaySchool = page.locator('button div p').getByText('Sunday School');
+ await sundaySchool.click();
+ const adultBible = page.locator('button div p').getByText('Adult Bible Class');
+ await adultBible.click();
+ const checkInBtn = page.locator('[data-testid="checkin-submit-button"]');
+ await checkInBtn.click();
+ const validatedCheckIn = page.locator('h4').getByText('Check-in Complete');
+ await expect(validatedCheckIn).toHaveCount(1);
+
+ //double check
+ const returnBtn = page.locator('button').getByText('Back to My Page');
+ await returnBtn.click();
+ await page.waitForTimeout(500);
+ const checkInTab = page.locator('[data-testid="my-tab-check-in"]');
+ await checkInTab.click();
+ await page.waitForTimeout(500);
+ await sundayMorning.click();
+ await page.waitForTimeout(500);
+ const validationChip = page.locator('div span').getByText('Adult Bible Class');
+ await expect(validationChip).toHaveCount(1);
+ });
+ });
+});
\ No newline at end of file