meat: ContactUs nodemailer
This commit is contained in:
parent
46706d77fb
commit
3f7bd63c8b
10 changed files with 123 additions and 38140 deletions
2
.env
2
.env
|
|
@ -1 +1 @@
|
|||
ZOHO_PASS=qKppXZmPRR8q
|
||||
NEXT_PUBLIC_ZOHO_PASS=bw8gDdMm5P7i
|
||||
|
|
@ -10,12 +10,12 @@ export const transporter = nodemailer.createTransport({
|
|||
port: 465,
|
||||
secure: true,
|
||||
auth: {
|
||||
user: "keshawa.vizolelabs.com",
|
||||
pass: process.env.ZOHO_PASS,
|
||||
user: "keshawa@vizolelabs.com",
|
||||
pass: process.env.NEXT_PUBLIC_ZOHO_PASS,
|
||||
},
|
||||
})
|
||||
|
||||
export const mailOptions: MailOptions = {
|
||||
from: "Keshawa Anuhas <keshawa.vizolelabs.com>",
|
||||
to: "Keshawa Anuhas <keshawa.vizolelabs.com>",
|
||||
from: "Keshawa Anuhas <keshawa@vizolelabs.com>",
|
||||
to: "Keshawa Anuhas <keshawa@vizolelabs.com>",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,15 +1,30 @@
|
|||
import { mailOptions, transporter } from "./mailTransporter"
|
||||
|
||||
import { replaceMergeTags, stripHTMLTags } from "app/mail/sliceHtml"
|
||||
import { NextResponse } from "next/server"
|
||||
import fs from "fs"
|
||||
import path from "path"
|
||||
|
||||
export async function post(req: any) {
|
||||
export async function POST(req: any) {
|
||||
const data = await req.json()
|
||||
const htmlFilePath = path.join(process.cwd(), "app/mail", "contactForm.html")
|
||||
|
||||
let htmlContent: string
|
||||
try {
|
||||
htmlContent = fs.readFileSync(htmlFilePath, "utf8")
|
||||
} catch (err) {
|
||||
console.error("Error reading HTML file: ", err)
|
||||
return
|
||||
}
|
||||
|
||||
htmlContent = replaceMergeTags(data, htmlContent)
|
||||
const plainTextContent = stripHTMLTags(htmlContent)
|
||||
|
||||
try {
|
||||
await transporter.sendMail({
|
||||
...mailOptions,
|
||||
subject: data.subject,
|
||||
text: `Email: ${data.email}\n\n${data.message}`,
|
||||
subject: `Contact Inquiry - VizoleLabs Web`,
|
||||
text: plainTextContent,
|
||||
html: htmlContent,
|
||||
})
|
||||
return NextResponse.json({ success: true })
|
||||
} catch (error: any) {
|
||||
|
|
|
|||
10
app/mail/contactForm.html
Normal file
10
app/mail/contactForm.html
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<div style="font-family: sans-serif">
|
||||
<h1>Contact Form Inquiry</h1>
|
||||
<p>You have received the following inquiry:</p>
|
||||
<br />
|
||||
<p>Email: {{ email }}</p>
|
||||
<br />
|
||||
<p>Message:</p>
|
||||
<p>{{ message }}</p>
|
||||
<br />
|
||||
</div>
|
||||
32
app/mail/sliceHtml.ts
Normal file
32
app/mail/sliceHtml.ts
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
export const stripHTMLTags = (htmlString: string): string => {
|
||||
// also replaces <br> tags with new lines
|
||||
return htmlString.replace(/<br>/g, "\n").replace(/<[^>]+>/g, "")
|
||||
}
|
||||
|
||||
/**
|
||||
* @param data
|
||||
* @param htmlString
|
||||
* @return The updated HTML string
|
||||
*/
|
||||
export const replaceMergeTags = (data: Record<string, any>, htmlString: string): string => {
|
||||
Object.keys(data)?.forEach((key: string) => {
|
||||
if (htmlString.includes(`{{ ${key} }}`)) {
|
||||
let val: any = data[key]
|
||||
|
||||
// check if value is an array
|
||||
if (val instanceof Array) {
|
||||
const listElements: string[] = val.map((item: any) => {
|
||||
return `<li>${item}</li>`
|
||||
})
|
||||
|
||||
// create an unordered list in HTML
|
||||
val = `<ul>${listElements.join("")}</ul>`
|
||||
}
|
||||
|
||||
const regexPattern = new RegExp(`\\{\\{\\s*${key}\\s*\\}\\}`, "g")
|
||||
htmlString = htmlString.replace(regexPattern, val)
|
||||
}
|
||||
})
|
||||
|
||||
return htmlString
|
||||
}
|
||||
|
|
@ -3,6 +3,7 @@
|
|||
import { Button } from "components/Button/Button"
|
||||
import { useState } from "react"
|
||||
import MoveUpWhenVisible from "utils/ScrollAnimations/MoveUpOnScroll"
|
||||
import { Toaster, toast } from "sonner"
|
||||
|
||||
interface ResponseData {
|
||||
success: boolean
|
||||
|
|
@ -28,26 +29,25 @@ export default function ContactUs() {
|
|||
}
|
||||
|
||||
const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {
|
||||
console.log(e)
|
||||
e.preventDefault()
|
||||
setSubmiting(true)
|
||||
|
||||
const response = await fetch("/api/mail", {
|
||||
const response = await fetch("/api/routes", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
accept: "application/json",
|
||||
Accept: "application/json",
|
||||
},
|
||||
body: JSON.stringify(formData),
|
||||
})
|
||||
|
||||
//const { success, error }: { success: any; error: any } = await response.json()
|
||||
|
||||
const { success, error } = (await response.json()) as ResponseData
|
||||
|
||||
if (success) {
|
||||
alert("Message sent!")
|
||||
toast.success("Message sent successfully")
|
||||
} else {
|
||||
alert(error)
|
||||
toast.error("Something went wrong. Please try again later")
|
||||
}
|
||||
|
||||
setSubmiting(false)
|
||||
|
|
@ -74,7 +74,7 @@ export default function ContactUs() {
|
|||
</label>
|
||||
<input
|
||||
type="email"
|
||||
id="email"
|
||||
name="email"
|
||||
onChange={handleInputChange}
|
||||
className="dark:shadow-sm-light block w-full rounded-lg border border-gray-300 bg-homeBg2 p-2.5 text-sm text-white shadow-sm focus:border-primary-500 focus:ring-primary-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-primary-500 dark:focus:ring-primary-500"
|
||||
placeholder="name@gmail.com"
|
||||
|
|
@ -88,7 +88,7 @@ export default function ContactUs() {
|
|||
<input
|
||||
type="text"
|
||||
onChange={handleInputChange}
|
||||
id="subject"
|
||||
name="subject"
|
||||
className="dark:shadow-sm-light block w-full rounded-lg border border-gray-300 bg-homeBg2 p-3 text-sm text-white shadow-sm focus:border-primary-500 focus:ring-primary-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-primary-500 dark:focus:ring-primary-500"
|
||||
placeholder="Let us know how we can help you"
|
||||
required
|
||||
|
|
@ -100,18 +100,27 @@ export default function ContactUs() {
|
|||
</label>
|
||||
<textarea
|
||||
onChange={handleInputChange}
|
||||
id="message"
|
||||
name="message"
|
||||
rows={6}
|
||||
className="block w-full rounded-lg border border-gray-300 bg-homeBg2 p-2.5 text-sm text-white shadow-sm focus:border-primary-500 focus:ring-primary-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-primary-500 dark:focus:ring-primary-500"
|
||||
placeholder="Leave a comment..."
|
||||
></textarea>
|
||||
</div>
|
||||
<Button
|
||||
<Toaster
|
||||
position="top-right"
|
||||
toastOptions={{
|
||||
classNames: {
|
||||
toast: "bg-vizoleG2",
|
||||
title: "text-white",
|
||||
},
|
||||
}}
|
||||
/>
|
||||
<button
|
||||
type="submit"
|
||||
className="rounded-lg bg-gradient-to-r from-vizoleG1 via-vizoleG2 to-vizoleG3 px-5 py-3 text-center text-sm font-medium text-white hover:bg-primary-800 focus:outline-none focus:ring-4 focus:ring-primary-300 dark:bg-primary-600 dark:hover:bg-primary-700 dark:focus:ring-primary-800 sm:w-fit"
|
||||
>
|
||||
Send message
|
||||
</Button>
|
||||
</button>
|
||||
</form>
|
||||
</MoveUpWhenVisible>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ export default function OurServices() {
|
|||
</MoveLeftWhenVisible>
|
||||
</div>
|
||||
|
||||
<div className=" mt-10 grid max-w-full grid-cols-1 gap-4 sm:grid-cols-1 md:grid-cols-2">
|
||||
<div className=" mt-10 grid h-full max-w-full grid-cols-1 gap-4 sm:grid-cols-1 md:grid-cols-2">
|
||||
<Glow color="#F0B37D">
|
||||
<MoveUpWhenVisible>
|
||||
<div className="glowable-text flex max-w-[100%] items-center rounded-[20px] border p-4 glow:border-glow glow:bg-glow/[.50] glow:ring-2 glow:ring-glow max-md:flex-wrap max-md:items-center max-md:justify-center">
|
||||
|
|
|
|||
38073
package-lock.json
generated
38073
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -82,6 +82,7 @@
|
|||
"react-tsparticles": "^2.12.2",
|
||||
"react-use": "^17.5.0",
|
||||
"react-wow": "^1.0.0",
|
||||
"sonner": "^1.4.41",
|
||||
"tailwind-merge": "^2.2.2",
|
||||
"tailwind-variants": "^0.2.1",
|
||||
"tsparticles": "^3.3.0",
|
||||
|
|
|
|||
81
yarn.lock
81
yarn.lock
|
|
@ -1751,14 +1751,7 @@
|
|||
dependencies:
|
||||
regenerator-runtime "^0.14.0"
|
||||
|
||||
"@babel/runtime@^7.1.2":
|
||||
version "7.24.4"
|
||||
resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz"
|
||||
integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==
|
||||
dependencies:
|
||||
regenerator-runtime "^0.14.0"
|
||||
|
||||
"@babel/runtime@^7.24.0":
|
||||
"@babel/runtime@^7.1.2", "@babel/runtime@^7.24.0":
|
||||
version "7.24.4"
|
||||
resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz"
|
||||
integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==
|
||||
|
|
@ -4132,6 +4125,21 @@
|
|||
resolved "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.12.0.tgz"
|
||||
integrity sha512-hO+bdeGOlJwqowUBoZF5LyP3ORUFOP1G0GRv8N45W/cztXbT2ZEXaAzfokRS9Xc9FWmYrDj32mF6SzH6wuoIyA==
|
||||
|
||||
"@opentelemetry/semantic-conventions@1.18.1":
|
||||
version "1.18.1"
|
||||
resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.18.1.tgz#8e47caf57a84b1dcc1722b2025693348cdf443b4"
|
||||
integrity sha512-+NLGHr6VZwcgE/2lw8zDIufOCGnzsA5CbQIMleXZTrgkBd0TanCX+MiDYJ1TOS4KL/Tqk0nFRxawnaYr6pkZkA==
|
||||
|
||||
"@opentelemetry/semantic-conventions@^1.12.0":
|
||||
version "1.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.23.0.tgz#627f2721b960fe586b7f72a07912cb7699f06eef"
|
||||
integrity sha512-MiqFvfOzfR31t8cc74CTP1OZfz7MbqpAnLCra8NqQoaHJX6ncIRTdYOQYBDQ2uFISDq0WY8Y9dDTWvsgzzBYRg==
|
||||
|
||||
"@panva/hkdf@^1.0.2":
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@panva/hkdf/-/hkdf-1.1.1.tgz#ab9cd8755d1976e72fc77a00f7655a64efe6cd5d"
|
||||
integrity sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==
|
||||
|
||||
"@pkgjs/parseargs@^0.11.0":
|
||||
version "0.11.0"
|
||||
resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz"
|
||||
|
|
@ -9824,16 +9832,16 @@ cookie-signature@1.0.6:
|
|||
resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"
|
||||
integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
|
||||
|
||||
cookie@^0.5.0:
|
||||
version "0.5.0"
|
||||
resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz"
|
||||
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
|
||||
|
||||
cookie@0.6.0:
|
||||
version "0.6.0"
|
||||
resolved "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz"
|
||||
integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
|
||||
|
||||
cookie@^0.5.0:
|
||||
version "0.5.0"
|
||||
resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz"
|
||||
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
|
||||
|
||||
copy-to-clipboard@^3.3.1:
|
||||
version "3.3.3"
|
||||
resolved "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz"
|
||||
|
|
@ -14860,7 +14868,7 @@ next-compose-plugins@^2.2.1:
|
|||
resolved "https://registry.npmjs.org/next-compose-plugins/-/next-compose-plugins-2.2.1.tgz"
|
||||
integrity sha512-OjJ+fV15FXO2uQXQagLD4C0abYErBjyjE0I0FHpOEIB8upw0hg1ldFP6cqHTJBH1cZqy96OeR3u1dJ+Ez2D4Bg==
|
||||
|
||||
next@^14.0.3, "next@^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0":
|
||||
next@^14.0.3:
|
||||
version "14.0.3"
|
||||
resolved "https://registry.npmjs.org/next/-/next-14.0.3.tgz"
|
||||
integrity sha512-AbYdRNfImBr3XGtvnwOxq8ekVCwbFTv/UJoLwmaX89nk9i051AEY4/HAWzU0YpaTDw8IofUpmuIlvzWF13jxIw==
|
||||
|
|
@ -14990,7 +14998,7 @@ node-releases@^2.0.14:
|
|||
resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz"
|
||||
integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
|
||||
|
||||
nodemailer@^6.6.5, nodemailer@^6.9.13:
|
||||
nodemailer@^6.9.13:
|
||||
version "6.9.13"
|
||||
resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.9.13.tgz#5b292bf1e92645f4852ca872c56a6ba6c4a3d3d6"
|
||||
integrity sha512-7o38Yogx6krdoBf3jCAqnIN4oSQFx+fMa0I7dK1D+me9kBxx12D+/33wSb+fhOCtIxvYJ+4x4IMEhmhCKfAiOA==
|
||||
|
|
@ -16106,7 +16114,7 @@ preact-render-to-string@^5.1.19:
|
|||
dependencies:
|
||||
pretty-format "^3.8.0"
|
||||
|
||||
preact@^10.6.3, preact@>=10:
|
||||
preact@^10.6.3:
|
||||
version "10.20.2"
|
||||
resolved "https://registry.npmjs.org/preact/-/preact-10.20.2.tgz"
|
||||
integrity sha512-S1d1ernz3KQ+Y2awUxKakpfOg2CEmJmwOP+6igPx6dgr6pgDvenqYviyokWso2rhHvGtTlWWnJDa7RaPbQerTg==
|
||||
|
|
@ -16506,7 +16514,7 @@ react-docgen@^5.0.0:
|
|||
node-dir "^0.1.10"
|
||||
strip-indent "^3.0.0"
|
||||
|
||||
react-dom@*, "react-dom@^0.14.0 || ^15.0.0-0 || ^16.0.0", "react-dom@^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0", "react-dom@^15.0.0 || ^16.0.0", "react-dom@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom@^15.5.4 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.8 || ^17.0 || ^18.0", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.8.0 || ^17.0.0-rc.1 || ^18.0.0", react-dom@^18.0.0, react-dom@^18.0.11, react-dom@^18.2.0, "react-dom@>=16.8 || ^17.0.0 || ^18.0.0", react-dom@>=16.8.0, react-dom@>=18, react-dom@>=18.0.0, "react-dom@16.8.0 - 18", react-dom@18.2.0:
|
||||
react-dom@18.2.0, react-dom@^18.2.0:
|
||||
version "18.2.0"
|
||||
resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz"
|
||||
integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
|
||||
|
|
@ -16746,7 +16754,7 @@ react-wow@^1.0.0:
|
|||
react-dom "^16.0.0"
|
||||
react-router "^3.0.5"
|
||||
|
||||
react@*, "react@^0.14.0 || ^15.0.0-0 || ^16.0.0", "react@^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0", "react@^15.0.0 || ^16.0.0", "react@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^15.3.0 || ^16.0.0", "react@^15.5.4 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.8 || ^17.0 || ^18.0", "react@^16.8.0 || ^17 || ^18", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17.0.0-rc.1 || ^18.0.0", "react@^16.8.4 || ^17.0.0 || ^18.0.0", "react@^16.x || ^17.x || ^18.x", react@^18.0.0, react@^18.0.11, react@^18.2.0, "react@>= 0.14.0", "react@>= 16.8.0 || 17.x.x || ^18.0.0-0", react@>=16, "react@>=16.8 || ^17.0.0 || ^18.0.0", react@>=16.8.0, react@>=18, react@>=18.0.0, "react@16.8.0 - 18", react@18.2.0:
|
||||
react@18.2.0, react@^18.2.0:
|
||||
version "18.2.0"
|
||||
resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz"
|
||||
integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
|
||||
|
|
@ -17618,6 +17626,11 @@ socks@^2.6.2, socks@^2.7.1:
|
|||
ip "^2.0.0"
|
||||
smart-buffer "^4.2.0"
|
||||
|
||||
sonner@^1.4.41:
|
||||
version "1.4.41"
|
||||
resolved "https://registry.yarnpkg.com/sonner/-/sonner-1.4.41.tgz#ff085ae4f4244713daf294959beaa3e90f842d2c"
|
||||
integrity sha512-uG511ggnnsw6gcn/X+YKkWPo5ep9il9wYi3QJxHsYe7yTZ4+cOd1wuodOUmOpFuXL+/RE3R04LczdNCDygTDgQ==
|
||||
|
||||
source-map-js@^1.0.1, source-map-js@^1.0.2:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz"
|
||||
|
|
@ -17868,16 +17881,7 @@ string-template@~0.2.1:
|
|||
resolved "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz"
|
||||
integrity sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==
|
||||
|
||||
"string-width-cjs@npm:string-width@^4.2.0":
|
||||
version "4.2.3"
|
||||
resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
|
||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||
dependencies:
|
||||
emoji-regex "^8.0.0"
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.1"
|
||||
|
||||
"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
||||
"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
|
||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||
|
|
@ -17951,14 +17955,7 @@ string_decoder@~1.1.1:
|
|||
dependencies:
|
||||
safe-buffer "~5.1.0"
|
||||
|
||||
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
|
||||
version "6.0.1"
|
||||
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
|
||||
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||
dependencies:
|
||||
ansi-regex "^5.0.1"
|
||||
|
||||
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
||||
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
|
||||
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||
|
|
@ -19281,7 +19278,8 @@ wowjs@^1.1.3:
|
|||
dependencies:
|
||||
animate.css latest
|
||||
|
||||
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
|
||||
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
|
||||
name wrap-ansi-cjs
|
||||
version "7.0.0"
|
||||
resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz"
|
||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||
|
|
@ -19299,15 +19297,6 @@ wrap-ansi@^6.2.0:
|
|||
string-width "^4.1.0"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
wrap-ansi@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz"
|
||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||
dependencies:
|
||||
ansi-styles "^4.0.0"
|
||||
string-width "^4.1.0"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
wrap-ansi@^8.1.0:
|
||||
version "8.1.0"
|
||||
resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue