├── .github
└── workflows
│ └── pages.yml
├── .gitignore
├── .prettierrc
├── LICENSE
├── README.md
├── index.html
├── package.json
├── public
├── favicon.ico
├── logo192.png
├── logo512.png
├── manifest.json
├── pdf.svg
└── robots.txt
├── screenshot.png
├── src
├── App.tsx
├── assets
│ └── react.svg
├── components
│ ├── Document.tsx
│ ├── DownloadPDF.tsx
│ ├── EditableCalendarInput.tsx
│ ├── EditableFileImage.tsx
│ ├── EditableInput.tsx
│ ├── EditableSelect.tsx
│ ├── EditableTextarea.tsx
│ ├── InvoicePage.tsx
│ ├── Page.tsx
│ ├── Text.tsx
│ └── View.tsx
├── data
│ ├── countryList.ts
│ ├── initialData.ts
│ └── types.ts
├── hooks
│ └── useOnClickOutside.ts
├── images
│ ├── download.svg
│ ├── remove.svg
│ ├── resize.svg
│ ├── template_download.svg
│ └── template_upload.svg
├── main.tsx
├── scss
│ ├── _app.scss
│ ├── _color.scss
│ ├── _icons.scss
│ ├── _layout.scss
│ ├── _spacing.scss
│ ├── _text.scss
│ ├── _typography.scss
│ ├── _variables.scss
│ └── main.scss
├── serviceWorker.ts
├── styles
│ ├── compose.ts
│ └── styles.ts
└── vite-env.d.ts
├── tsconfig.json
├── tsconfig.node.json
├── vite.config.ts
└── yarn.lock
/.github/workflows/pages.yml:
--------------------------------------------------------------------------------
1 | name: Github Pages
2 | on:
3 | push:
4 | branches: ['master']
5 | workflow_dispatch:
6 |
7 | permissions:
8 | pages: write
9 | id-token: write
10 |
11 | concurrency:
12 | group: 'pages'
13 | cancel-in-progress: false
14 |
15 | jobs:
16 | build:
17 | runs-on: ubuntu-latest
18 | steps:
19 | - uses: actions/checkout@v3
20 | - run: yarn
21 | - run: yarn build --base=/react-invoice-generator/
22 | - name: Upload artifact
23 | uses: actions/upload-pages-artifact@v3
24 | with:
25 | name: 'github-pages'
26 | path: 'dist'
27 |
28 | deploy:
29 | environment:
30 | name: github-pages
31 | url: ${{ steps.deployment.outputs.page_url }}
32 | runs-on: ubuntu-latest
33 | needs: build
34 | steps:
35 | - name: Deploy to GitHub Pages
36 | uses: actions/deploy-pages@v4
37 | with:
38 | path: dist
39 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true,
3 | "semi": false,
4 | "printWidth": 100
5 | }
6 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Tuan Pham
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # React Invoice Generator
2 |
3 | React Invoice Generator allows you quickly make invoices and save them as PDF. [https://tuanpham-dev.github.io/react-invoice-generator/](https://tuanpham-dev.github.io/react-invoice-generator/)
4 |
5 | 
6 |
7 | ## Available Scripts
8 |
9 | In the project directory, you can run:
10 |
11 | ### `yarn start`
12 |
13 | Runs the app in the development mode.
14 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
15 |
16 | The page will reload if you make edits.
17 | You will also see any lint errors in the console.
18 |
19 | ### `yarn lint` (`lint:write`)
20 |
21 | Launches Prettier, an opinionated code formatter.
22 |
23 | https://prettier.io/
24 |
25 | ### `yarn build`
26 |
27 | Builds the app for production to the `build` folder.
28 | It correctly bundles React in production mode and optimizes the build for the best performance.
29 |
30 | The build is minified and the filenames include the hashes.
31 | Your app is ready to be deployed!
32 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | React Invoice Generator
8 |
9 |
10 |
11 |
12 |
13 |
14 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "invoice-generator",
3 | "version": "0.2.1",
4 | "private": true,
5 | "type": "module",
6 | "homepage": "https://tuanpham-dev.github.io/react-invoice-generator/",
7 | "scripts": {
8 | "dev": "vite",
9 | "build": "tsc && vite build",
10 | "lint": "prettier -c .",
11 | "lint:write": "prettier -w .",
12 | "preview": "vite preview"
13 | },
14 | "dependencies": {
15 | "@react-pdf/renderer": "^3.4.2",
16 | "@uidotdev/usehooks": "^2.4.1",
17 | "@vitejs/plugin-react-swc": "^3.6.0",
18 | "date-fns": "^3.6.0",
19 | "file-saver": "^2.0.5",
20 | "gh-pages": "^6.1.1",
21 | "rc-slider": "10.5.0",
22 | "react": "^18.2.0",
23 | "react-datepicker": "^6.6.0",
24 | "react-dom": "^18.2.0",
25 | "react-textarea-autosize": "^8.5.3",
26 | "sass": "^1.72.0",
27 | "typescript": "^5.4.3",
28 | "vite": "^5.2.7",
29 | "zod": "^3.22.4"
30 | },
31 | "devDependencies": {
32 | "@types/date-fns": "^2.6.0",
33 | "@types/file-saver": "^2.0.7",
34 | "@types/node": "^20.11.30",
35 | "@types/rc-slider": "^9.3.0",
36 | "@types/react": "^18.2.73",
37 | "@types/react-datepicker": "^6.2.0",
38 | "@types/react-dom": "^18.2.23",
39 | "@types/react-textarea-autosize": "^8.0.0",
40 | "prettier": "^3.2.5"
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tuanpham-dev/react-invoice-generator/63172bd2c6d09455bcaa574bdd6a4b6c5fa5393f/public/favicon.ico
--------------------------------------------------------------------------------
/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tuanpham-dev/react-invoice-generator/63172bd2c6d09455bcaa574bdd6a4b6c5fa5393f/public/logo192.png
--------------------------------------------------------------------------------
/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tuanpham-dev/react-invoice-generator/63172bd2c6d09455bcaa574bdd6a4b6c5fa5393f/public/logo512.png
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "Invoice Generator",
3 | "name": "React Invoice Generator",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/public/pdf.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
22 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tuanpham-dev/react-invoice-generator/63172bd2c6d09455bcaa574bdd6a4b6c5fa5393f/screenshot.png
--------------------------------------------------------------------------------
/src/App.tsx:
--------------------------------------------------------------------------------
1 | import InvoicePage from './components/InvoicePage'
2 | import { Invoice } from './data/types'
3 |
4 | function App() {
5 | const savedInvoice = window.localStorage.getItem('invoiceData')
6 | let data = null
7 |
8 | try {
9 | if (savedInvoice) {
10 | data = JSON.parse(savedInvoice)
11 | }
12 | } catch (_e) {}
13 |
14 | const onInvoiceUpdated = (invoice: Invoice) => {
15 | window.localStorage.setItem('invoiceData', JSON.stringify(invoice))
16 | }
17 |
18 | return (
19 |
20 |
React Invoice Generator
21 |
22 |
23 | )
24 | }
25 |
26 | export default App
27 |
--------------------------------------------------------------------------------
/src/assets/react.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/components/Document.tsx:
--------------------------------------------------------------------------------
1 | import { FC, PropsWithChildren } from 'react'
2 | import { Document as PdfDocument } from '@react-pdf/renderer'
3 |
4 | interface Props {
5 | pdfMode?: boolean
6 | }
7 |
8 | const Document: FC> = ({ pdfMode, children }) => {
9 | return <>{pdfMode ? {children} : <>{children}>}>
10 | }
11 |
12 | export default Document
13 |
--------------------------------------------------------------------------------
/src/components/DownloadPDF.tsx:
--------------------------------------------------------------------------------
1 | import React, { FC } from 'react'
2 | import { PDFDownloadLink } from '@react-pdf/renderer'
3 | import { Invoice, TInvoice } from '../data/types'
4 | import { useDebounce } from '@uidotdev/usehooks'
5 | import InvoicePage from './InvoicePage'
6 | import FileSaver from 'file-saver'
7 |
8 | interface Props {
9 | data: Invoice
10 | setData(data: Invoice): void
11 | }
12 |
13 | const Download: FC = ({ data, setData }) => {
14 | const debounced = useDebounce(data, 500)
15 |
16 | function handleInput(e: React.ChangeEvent) {
17 | if (!e.target.files?.length) return
18 |
19 | const file = e.target.files[0]
20 | file
21 | .text()
22 | .then((str: string) => {
23 | try {
24 | if (!(str.startsWith('{') && str.endsWith('}'))) {
25 | str = atob(str)
26 | }
27 | const d = JSON.parse(str)
28 | const dParsed = TInvoice.parse(d)
29 | console.info('parsed correctly')
30 | setData(dParsed)
31 | } catch (e) {
32 | console.error(e)
33 | return
34 | }
35 | })
36 | .catch((err) => console.error(err))
37 | }
38 |
39 | function handleSaveTemplate() {
40 | const blob = new Blob([JSON.stringify(debounced)], {
41 | type: 'text/plain;charset=utf-8',
42 | })
43 | FileSaver(blob, title + '.template')
44 | }
45 |
46 | const title = data.invoiceTitle ? data.invoiceTitle.toLowerCase() : 'invoice'
47 | return (
48 |
49 |
}
52 | fileName={`${title}.pdf`}
53 | aria-label="Save PDF"
54 | title="Save PDF"
55 | className="download-pdf__pdf"
56 | >
57 |
Save PDF
58 |
59 |
65 |
Save Template
66 |
67 |
70 |
Upload Template
71 |
72 | )
73 | }
74 |
75 | export default Download
76 |
--------------------------------------------------------------------------------
/src/components/EditableCalendarInput.tsx:
--------------------------------------------------------------------------------
1 | import { FC } from 'react'
2 | import { Text } from '@react-pdf/renderer'
3 | import DatePicker from 'react-datepicker'
4 | import 'react-datepicker/dist/react-datepicker.css'
5 | import compose from '../styles/compose'
6 |
7 | interface Props {
8 | className?: string
9 | value?: string
10 | selected?: Date
11 | onChange?: (date: Date | [Date, Date] | null) => void
12 | pdfMode?: boolean
13 | }
14 |
15 | const EditableCalendarInput: FC = ({ className, value, selected, onChange, pdfMode }) => {
16 | return (
17 | <>
18 | {pdfMode ? (
19 | {value}
20 | ) : (
21 | onChange(date) : () => null}
25 | dateFormat="MMM dd, yyyy"
26 | />
27 | )}
28 | >
29 | )
30 | }
31 |
32 | export default EditableCalendarInput
33 |
--------------------------------------------------------------------------------
/src/components/EditableFileImage.tsx:
--------------------------------------------------------------------------------
1 | import { FC, useRef, useState } from 'react'
2 | import Slider from 'rc-slider'
3 | import { Image } from '@react-pdf/renderer'
4 | import useOnClickOutside from '../hooks/useOnClickOutside'
5 | import compose from '../styles/compose'
6 | import 'rc-slider/assets/index.css'
7 |
8 | interface Props {
9 | className?: string
10 | placeholder?: string
11 | value?: string
12 | width?: number
13 | onChangeImage?: (value: string) => void
14 | onChangeWidth?: (value: number) => void
15 | pdfMode?: boolean
16 | }
17 |
18 | const EditableFileImage: FC = ({
19 | className,
20 | placeholder,
21 | value,
22 | width,
23 | onChangeImage,
24 | onChangeWidth,
25 | pdfMode,
26 | }) => {
27 | const fileInput = useRef(null)
28 | const widthWrapper = useRef(null)
29 | const [isEditing, setIsEditing] = useState(false)
30 | const marks = {
31 | 100: '100px',
32 | 150: '150px',
33 | 200: '200px',
34 | 250: '250px',
35 | }
36 |
37 | const handleClickOutside = () => {
38 | if (isEditing) {
39 | setIsEditing(false)
40 | }
41 | }
42 |
43 | useOnClickOutside(widthWrapper, handleClickOutside)
44 |
45 | const handleUpload = () => {
46 | fileInput?.current?.click()
47 | }
48 |
49 | const handleChangeImage = () => {
50 | if (fileInput?.current?.files) {
51 | const files = fileInput.current.files
52 |
53 | if (files.length > 0 && typeof onChangeImage === 'function') {
54 | const reader = new FileReader()
55 |
56 | reader.addEventListener('load', () => {
57 | if (typeof reader.result === 'string') {
58 | onChangeImage(reader.result)
59 | }
60 | })
61 |
62 | reader.readAsDataURL(files[0])
63 | }
64 | }
65 | }
66 |
67 | const handleChangeWidth = (value: number) => {
68 | if (typeof onChangeWidth === 'function') {
69 | onChangeWidth(value)
70 | }
71 | }
72 |
73 | const handleEdit = () => {
74 | setIsEditing(!isEditing)
75 | }
76 |
77 | const clearImage = () => {
78 | if (typeof onChangeImage === 'function') {
79 | onChangeImage('')
80 | }
81 | }
82 |
83 | if (pdfMode) {
84 | if (value) {
85 | return (
86 |
93 | )
94 | } else {
95 | return <>>
96 | }
97 | }
98 |
99 | return (
100 |
101 | {!value ? (
102 |
105 | ) : (
106 | <>
107 |

113 |
114 |
117 |
118 |
121 |
122 |
125 |
126 | {isEditing && (
127 |
128 |
137 |
138 | )}
139 | >
140 | )}
141 |
142 |
150 |
151 | )
152 | }
153 |
154 | export default EditableFileImage
155 |
--------------------------------------------------------------------------------
/src/components/EditableInput.tsx:
--------------------------------------------------------------------------------
1 | import { FC } from 'react'
2 | import { Text } from '@react-pdf/renderer'
3 | import compose from '../styles/compose'
4 |
5 | interface Props {
6 | className?: string
7 | placeholder?: string
8 | value?: string
9 | onChange?: (value: string) => void
10 | pdfMode?: boolean
11 | }
12 |
13 | const EditableInput: FC = ({ className, placeholder, value, onChange, pdfMode }) => {
14 | return (
15 | <>
16 | {pdfMode ? (
17 | {value}
18 | ) : (
19 | onChange(e.target.value) : undefined}
25 | />
26 | )}
27 | >
28 | )
29 | }
30 |
31 | export default EditableInput
32 |
--------------------------------------------------------------------------------
/src/components/EditableSelect.tsx:
--------------------------------------------------------------------------------
1 | import { FC, useState } from 'react'
2 | import { Text } from '@react-pdf/renderer'
3 | import compose from '../styles/compose'
4 |
5 | export interface SelectOption {
6 | value: string
7 | text: string
8 | }
9 |
10 | interface Props {
11 | className?: string
12 | options?: SelectOption[]
13 | placeholder?: string
14 | value?: string
15 | onChange?: (value: string) => void
16 | pdfMode?: boolean
17 | }
18 |
19 | const EditableSelect: FC = ({
20 | className,
21 | options,
22 | placeholder,
23 | value,
24 | onChange,
25 | pdfMode,
26 | }) => {
27 | const [isEditing, setIsEditing] = useState(false)
28 |
29 | return (
30 | <>
31 | {pdfMode ? (
32 | {value}
33 | ) : (
34 | <>
35 | {isEditing ? (
36 |
49 | ) : (
50 | setIsEditing(true)}
57 | />
58 | )}
59 | >
60 | )}
61 | >
62 | )
63 | }
64 |
65 | export default EditableSelect
66 |
--------------------------------------------------------------------------------
/src/components/EditableTextarea.tsx:
--------------------------------------------------------------------------------
1 | import { FC } from 'react'
2 | import TextareaAutosize from 'react-textarea-autosize'
3 | import { Text } from '@react-pdf/renderer'
4 | import compose from '../styles/compose'
5 |
6 | interface Props {
7 | className?: string
8 | placeholder?: string
9 | value?: string
10 | onChange?: (value: string) => void
11 | pdfMode?: boolean
12 | rows?: number
13 | }
14 |
15 | const EditableTextarea: FC = ({
16 | className,
17 | placeholder,
18 | value,
19 | onChange,
20 | pdfMode,
21 | rows,
22 | }) => {
23 | return (
24 | <>
25 | {pdfMode ? (
26 | {value}
27 | ) : (
28 | onChange(e.target.value) : undefined}
34 | />
35 | )}
36 | >
37 | )
38 | }
39 |
40 | export default EditableTextarea
41 |
--------------------------------------------------------------------------------
/src/components/InvoicePage.tsx:
--------------------------------------------------------------------------------
1 | import { FC, useState, useEffect } from 'react'
2 | import { Invoice, ProductLine } from '../data/types'
3 | import { initialInvoice, initialProductLine } from '../data/initialData'
4 | import EditableInput from './EditableInput'
5 | import EditableSelect from './EditableSelect'
6 | import EditableTextarea from './EditableTextarea'
7 | import EditableCalendarInput from './EditableCalendarInput'
8 | import EditableFileImage from './EditableFileImage'
9 | import countryList from '../data/countryList'
10 | import Document from './Document'
11 | import Page from './Page'
12 | import View from './View'
13 | import Text from './Text'
14 | import { Font } from '@react-pdf/renderer'
15 | import Download from './DownloadPDF'
16 | import { format } from 'date-fns/format'
17 |
18 | Font.register({
19 | family: 'Nunito',
20 | fonts: [
21 | { src: 'https://fonts.gstatic.com/s/nunito/v12/XRXV3I6Li01BKofINeaE.ttf' },
22 | {
23 | src: 'https://fonts.gstatic.com/s/nunito/v12/XRXW3I6Li01BKofA6sKUYevN.ttf',
24 | fontWeight: 600,
25 | },
26 | ],
27 | })
28 |
29 | interface Props {
30 | data?: Invoice
31 | pdfMode?: boolean
32 | onChange?: (invoice: Invoice) => void
33 | }
34 |
35 | const InvoicePage: FC = ({ data, pdfMode, onChange }) => {
36 | const [invoice, setInvoice] = useState(data ? { ...data } : { ...initialInvoice })
37 | const [subTotal, setSubTotal] = useState()
38 | const [saleTax, setSaleTax] = useState()
39 |
40 | const dateFormat = 'MMM dd, yyyy'
41 | const invoiceDate = invoice.invoiceDate !== '' ? new Date(invoice.invoiceDate) : new Date()
42 | const invoiceDueDate =
43 | invoice.invoiceDueDate !== ''
44 | ? new Date(invoice.invoiceDueDate)
45 | : new Date(invoiceDate.valueOf())
46 |
47 | if (invoice.invoiceDueDate === '') {
48 | invoiceDueDate.setDate(invoiceDueDate.getDate() + 30)
49 | }
50 |
51 | const handleChange = (name: keyof Invoice, value: string | number) => {
52 | if (name !== 'productLines') {
53 | const newInvoice = { ...invoice }
54 |
55 | if (name === 'logoWidth' && typeof value === 'number') {
56 | newInvoice[name] = value
57 | } else if (name !== 'logoWidth' && typeof value === 'string') {
58 | newInvoice[name] = value
59 | }
60 |
61 | setInvoice(newInvoice)
62 | }
63 | }
64 |
65 | const handleProductLineChange = (index: number, name: keyof ProductLine, value: string) => {
66 | const productLines = invoice.productLines.map((productLine, i) => {
67 | if (i === index) {
68 | const newProductLine = { ...productLine }
69 |
70 | if (name === 'description') {
71 | newProductLine[name] = value
72 | } else {
73 | if (
74 | value[value.length - 1] === '.' ||
75 | (value[value.length - 1] === '0' && value.includes('.'))
76 | ) {
77 | newProductLine[name] = value
78 | } else {
79 | const n = parseFloat(value)
80 |
81 | newProductLine[name] = (n ? n : 0).toString()
82 | }
83 | }
84 |
85 | return newProductLine
86 | }
87 |
88 | return { ...productLine }
89 | })
90 |
91 | setInvoice({ ...invoice, productLines })
92 | }
93 |
94 | const handleRemove = (i: number) => {
95 | const productLines = invoice.productLines.filter((_, index) => index !== i)
96 |
97 | setInvoice({ ...invoice, productLines })
98 | }
99 |
100 | const handleAdd = () => {
101 | const productLines = [...invoice.productLines, { ...initialProductLine }]
102 |
103 | setInvoice({ ...invoice, productLines })
104 | }
105 |
106 | const calculateAmount = (quantity: string, rate: string) => {
107 | const quantityNumber = parseFloat(quantity)
108 | const rateNumber = parseFloat(rate)
109 | const amount = quantityNumber && rateNumber ? quantityNumber * rateNumber : 0
110 |
111 | return amount.toFixed(2)
112 | }
113 |
114 | useEffect(() => {
115 | let subTotal = 0
116 |
117 | invoice.productLines.forEach((productLine) => {
118 | const quantityNumber = parseFloat(productLine.quantity)
119 | const rateNumber = parseFloat(productLine.rate)
120 | const amount = quantityNumber && rateNumber ? quantityNumber * rateNumber : 0
121 |
122 | subTotal += amount
123 | })
124 |
125 | setSubTotal(subTotal)
126 | }, [invoice.productLines])
127 |
128 | useEffect(() => {
129 | const match = invoice.taxLabel.match(/(\d+)%/)
130 | const taxRate = match ? parseFloat(match[1]) : 0
131 | const saleTax = subTotal ? (subTotal * taxRate) / 100 : 0
132 |
133 | setSaleTax(saleTax)
134 | }, [subTotal, invoice.taxLabel])
135 |
136 | useEffect(() => {
137 | if (onChange) {
138 | onChange(invoice)
139 | }
140 | }, [onChange, invoice])
141 |
142 | return (
143 |
144 |
145 | {!pdfMode && setInvoice(d)} />}
146 |
147 |
148 |
149 | handleChange('logo', value)}
156 | onChangeWidth={(value) => handleChange('logoWidth', value)}
157 | />
158 | handleChange('companyName', value)}
163 | pdfMode={pdfMode}
164 | />
165 | handleChange('name', value)}
169 | pdfMode={pdfMode}
170 | />
171 | handleChange('companyAddress', value)}
175 | pdfMode={pdfMode}
176 | />
177 | handleChange('companyAddress2', value)}
181 | pdfMode={pdfMode}
182 | />
183 | handleChange('companyCountry', value)}
187 | pdfMode={pdfMode}
188 | />
189 |
190 |
191 | handleChange('title', value)}
196 | pdfMode={pdfMode}
197 | />
198 |
199 |
200 |
201 |
202 |
203 | handleChange('billTo', value)}
207 | pdfMode={pdfMode}
208 | />
209 | handleChange('clientName', value)}
213 | pdfMode={pdfMode}
214 | />
215 | handleChange('clientAddress', value)}
219 | pdfMode={pdfMode}
220 | />
221 | handleChange('clientAddress2', value)}
225 | pdfMode={pdfMode}
226 | />
227 | handleChange('clientCountry', value)}
231 | pdfMode={pdfMode}
232 | />
233 |
234 |
235 |
236 |
237 | handleChange('invoiceTitleLabel', value)}
241 | pdfMode={pdfMode}
242 | />
243 |
244 |
245 | handleChange('invoiceTitle', value)}
249 | pdfMode={pdfMode}
250 | />
251 |
252 |
253 |
254 |
255 | handleChange('invoiceDateLabel', value)}
259 | pdfMode={pdfMode}
260 | />
261 |
262 |
263 |
267 | handleChange(
268 | 'invoiceDate',
269 | date && !Array.isArray(date) ? format(date, dateFormat) : '',
270 | )
271 | }
272 | pdfMode={pdfMode}
273 | />
274 |
275 |
276 |
277 |
278 | handleChange('invoiceDueDateLabel', value)}
282 | pdfMode={pdfMode}
283 | />
284 |
285 |
286 |
290 | handleChange(
291 | 'invoiceDueDate',
292 | date ? (!Array.isArray(date) ? format(date, dateFormat) : '') : '',
293 | )
294 | }
295 | pdfMode={pdfMode}
296 | />
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 | handleChange('productLineDescription', value)}
308 | pdfMode={pdfMode}
309 | />
310 |
311 |
312 | handleChange('productLineQuantity', value)}
316 | pdfMode={pdfMode}
317 | />
318 |
319 |
320 | handleChange('productLineQuantityRate', value)}
324 | pdfMode={pdfMode}
325 | />
326 |
327 |
328 | handleChange('productLineQuantityAmount', value)}
332 | pdfMode={pdfMode}
333 | />
334 |
335 |
336 |
337 | {invoice.productLines.map((productLine, i) => {
338 | return pdfMode && productLine.description === '' ? (
339 |
340 | ) : (
341 |
342 |
343 | handleProductLineChange(i, 'description', value)}
349 | pdfMode={pdfMode}
350 | />
351 |
352 |
353 | handleProductLineChange(i, 'quantity', value)}
357 | pdfMode={pdfMode}
358 | />
359 |
360 |
361 | handleProductLineChange(i, 'rate', value)}
365 | pdfMode={pdfMode}
366 | />
367 |
368 |
369 |
370 | {calculateAmount(productLine.quantity, productLine.rate)}
371 |
372 |
373 | {!pdfMode && (
374 |
382 | )}
383 |
384 | )
385 | })}
386 |
387 |
388 |
389 | {!pdfMode && (
390 |
394 | )}
395 |
396 |
397 |
398 |
399 | handleChange('subTotalLabel', value)}
402 | pdfMode={pdfMode}
403 | />
404 |
405 |
406 |
407 | {subTotal?.toFixed(2)}
408 |
409 |
410 |
411 |
412 |
413 | handleChange('taxLabel', value)}
416 | pdfMode={pdfMode}
417 | />
418 |
419 |
420 |
421 | {saleTax?.toFixed(2)}
422 |
423 |
424 |
425 |
426 |
427 | handleChange('totalLabel', value)}
431 | pdfMode={pdfMode}
432 | />
433 |
434 |
435 | handleChange('currency', value)}
439 | pdfMode={pdfMode}
440 | />
441 |
442 | {(typeof subTotal !== 'undefined' && typeof saleTax !== 'undefined'
443 | ? subTotal + saleTax
444 | : 0
445 | ).toFixed(2)}
446 |
447 |
448 |
449 |
450 |
451 |
452 |
453 | handleChange('notesLabel', value)}
457 | pdfMode={pdfMode}
458 | />
459 | handleChange('notes', value)}
464 | pdfMode={pdfMode}
465 | />
466 |
467 |
468 | handleChange('termLabel', value)}
472 | pdfMode={pdfMode}
473 | />
474 | handleChange('term', value)}
479 | pdfMode={pdfMode}
480 | />
481 |
482 |
483 |
484 | )
485 | }
486 |
487 | export default InvoicePage
488 |
--------------------------------------------------------------------------------
/src/components/Page.tsx:
--------------------------------------------------------------------------------
1 | import { FC, PropsWithChildren } from 'react'
2 | import { Page as PdfPage } from '@react-pdf/renderer'
3 | import compose from '../styles/compose'
4 |
5 | interface Props {
6 | className?: string
7 | pdfMode?: boolean
8 | }
9 |
10 | const Page: FC> = ({ className, pdfMode, children }) => {
11 | return (
12 | <>
13 | {pdfMode ? (
14 |
15 | {children}
16 |
17 | ) : (
18 | {children}
19 | )}
20 | >
21 | )
22 | }
23 |
24 | export default Page
25 |
--------------------------------------------------------------------------------
/src/components/Text.tsx:
--------------------------------------------------------------------------------
1 | import { FC } from 'react'
2 | import { Text as PdfText } from '@react-pdf/renderer'
3 | import compose from '../styles/compose'
4 |
5 | interface Props {
6 | className?: string
7 | pdfMode?: boolean
8 | children?: string
9 | }
10 |
11 | const Text: FC = ({ className, pdfMode, children }) => {
12 | return (
13 | <>
14 | {pdfMode ? (
15 | {children}
16 | ) : (
17 | {children}
18 | )}
19 | >
20 | )
21 | }
22 |
23 | export default Text
24 |
--------------------------------------------------------------------------------
/src/components/View.tsx:
--------------------------------------------------------------------------------
1 | import { FC, PropsWithChildren } from 'react'
2 | import { View as PdfView } from '@react-pdf/renderer'
3 | import compose from '../styles/compose'
4 |
5 | interface Props {
6 | className?: string
7 | pdfMode?: boolean
8 | }
9 |
10 | const View: FC> = ({ className, pdfMode, children }) => {
11 | return (
12 | <>
13 | {pdfMode ? (
14 | {children}
15 | ) : (
16 | {children}
17 | )}
18 | >
19 | )
20 | }
21 |
22 | export default View
23 |
--------------------------------------------------------------------------------
/src/data/countryList.ts:
--------------------------------------------------------------------------------
1 | const countryList = [
2 | { value: 'Bangladesh', text: 'Bangladesh' },
3 | { value: 'Belgium', text: 'Belgium' },
4 | { value: 'Burkina Faso', text: 'Burkina Faso' },
5 | { value: 'Bulgaria', text: 'Bulgaria' },
6 | { value: 'Bosnia and Herzegovina', text: 'Bosnia and Herzegovina' },
7 | { value: 'Barbados', text: 'Barbados' },
8 | { value: 'Wallis and Futuna', text: 'Wallis and Futuna' },
9 | { value: 'Saint Barthelemy', text: 'Saint Barthelemy' },
10 | { value: 'Bermuda', text: 'Bermuda' },
11 | { value: 'Brunei', text: 'Brunei' },
12 | { value: 'Bolivia', text: 'Bolivia' },
13 | { value: 'Bahrain', text: 'Bahrain' },
14 | { value: 'Burundi', text: 'Burundi' },
15 | { value: 'Benin', text: 'Benin' },
16 | { value: 'Bhutan', text: 'Bhutan' },
17 | { value: 'Jamaica', text: 'Jamaica' },
18 | { value: 'Bouvet Island', text: 'Bouvet Island' },
19 | { value: 'Botswana', text: 'Botswana' },
20 | { value: 'Samoa', text: 'Samoa' },
21 | {
22 | value: 'Bonaire, Saint Eustatius and Saba ',
23 | text: 'Bonaire, Saint Eustatius and Saba ',
24 | },
25 | { value: 'Brazil', text: 'Brazil' },
26 | { value: 'Bahamas', text: 'Bahamas' },
27 | { value: 'Jersey', text: 'Jersey' },
28 | { value: 'Belarus', text: 'Belarus' },
29 | { value: 'Belize', text: 'Belize' },
30 | { value: 'Russia', text: 'Russia' },
31 | { value: 'Rwanda', text: 'Rwanda' },
32 | { value: 'Serbia', text: 'Serbia' },
33 | { value: 'East Timor', text: 'East Timor' },
34 | { value: 'Reunion', text: 'Reunion' },
35 | { value: 'Turkmenistan', text: 'Turkmenistan' },
36 | { value: 'Tajikistan', text: 'Tajikistan' },
37 | { value: 'Romania', text: 'Romania' },
38 | { value: 'Tokelau', text: 'Tokelau' },
39 | { value: 'Guinea-Bissau', text: 'Guinea-Bissau' },
40 | { value: 'Guam', text: 'Guam' },
41 | { value: 'Guatemala', text: 'Guatemala' },
42 | {
43 | value: 'South Georgia and the South Sandwich Islands',
44 | text: 'South Georgia and the South Sandwich Islands',
45 | },
46 | { value: 'Greece', text: 'Greece' },
47 | { value: 'Equatorial Guinea', text: 'Equatorial Guinea' },
48 | { value: 'Guadeloupe', text: 'Guadeloupe' },
49 | { value: 'Japan', text: 'Japan' },
50 | { value: 'Guyana', text: 'Guyana' },
51 | { value: 'Guernsey', text: 'Guernsey' },
52 | { value: 'French Guiana', text: 'French Guiana' },
53 | { value: 'Georgia', text: 'Georgia' },
54 | { value: 'Grenada', text: 'Grenada' },
55 | { value: 'United Kingdom', text: 'United Kingdom' },
56 | { value: 'Gabon', text: 'Gabon' },
57 | { value: 'El Salvador', text: 'El Salvador' },
58 | { value: 'Guinea', text: 'Guinea' },
59 | { value: 'Gambia', text: 'Gambia' },
60 | { value: 'Greenland', text: 'Greenland' },
61 | { value: 'Gibraltar', text: 'Gibraltar' },
62 | { value: 'Ghana', text: 'Ghana' },
63 | { value: 'Oman', text: 'Oman' },
64 | { value: 'Tunisia', text: 'Tunisia' },
65 | { value: 'Jordan', text: 'Jordan' },
66 | { value: 'Croatia', text: 'Croatia' },
67 | { value: 'Haiti', text: 'Haiti' },
68 | { value: 'Hungary', text: 'Hungary' },
69 | { value: 'Hong Kong', text: 'Hong Kong' },
70 | { value: 'Honduras', text: 'Honduras' },
71 | {
72 | value: 'Heard Island and McDonald Islands',
73 | text: 'Heard Island and McDonald Islands',
74 | },
75 | { value: 'Venezuela', text: 'Venezuela' },
76 | { value: 'Puerto Rico', text: 'Puerto Rico' },
77 | { value: 'Palestinian Territory', text: 'Palestinian Territory' },
78 | { value: 'Palau', text: 'Palau' },
79 | { value: 'Portugal', text: 'Portugal' },
80 | { value: 'Svalbard and Jan Mayen', text: 'Svalbard and Jan Mayen' },
81 | { value: 'Paraguay', text: 'Paraguay' },
82 | { value: 'Iraq', text: 'Iraq' },
83 | { value: 'Panama', text: 'Panama' },
84 | { value: 'French Polynesia', text: 'French Polynesia' },
85 | { value: 'Papua New Guinea', text: 'Papua New Guinea' },
86 | { value: 'Peru', text: 'Peru' },
87 | { value: 'Pakistan', text: 'Pakistan' },
88 | { value: 'Philippines', text: 'Philippines' },
89 | { value: 'Pitcairn', text: 'Pitcairn' },
90 | { value: 'Poland', text: 'Poland' },
91 | { value: 'Saint Pierre and Miquelon', text: 'Saint Pierre and Miquelon' },
92 | { value: 'Zambia', text: 'Zambia' },
93 | { value: 'Western Sahara', text: 'Western Sahara' },
94 | { value: 'Estonia', text: 'Estonia' },
95 | { value: 'Egypt', text: 'Egypt' },
96 | { value: 'South Africa', text: 'South Africa' },
97 | { value: 'Ecuador', text: 'Ecuador' },
98 | { value: 'Italy', text: 'Italy' },
99 | { value: 'Vietnam', text: 'Vietnam' },
100 | { value: 'Solomon Islands', text: 'Solomon Islands' },
101 | { value: 'Ethiopia', text: 'Ethiopia' },
102 | { value: 'Somalia', text: 'Somalia' },
103 | { value: 'Zimbabwe', text: 'Zimbabwe' },
104 | { value: 'Saudi Arabia', text: 'Saudi Arabia' },
105 | { value: 'Spain', text: 'Spain' },
106 | { value: 'Eritrea', text: 'Eritrea' },
107 | { value: 'Montenegro', text: 'Montenegro' },
108 | { value: 'Moldova', text: 'Moldova' },
109 | { value: 'Madagascar', text: 'Madagascar' },
110 | { value: 'Saint Martin', text: 'Saint Martin' },
111 | { value: 'Morocco', text: 'Morocco' },
112 | { value: 'Monaco', text: 'Monaco' },
113 | { value: 'Uzbekistan', text: 'Uzbekistan' },
114 | { value: 'Myanmar', text: 'Myanmar' },
115 | { value: 'Mali', text: 'Mali' },
116 | { value: 'Macao', text: 'Macao' },
117 | { value: 'Mongolia', text: 'Mongolia' },
118 | { value: 'Marshall Islands', text: 'Marshall Islands' },
119 | { value: 'Macedonia', text: 'Macedonia' },
120 | { value: 'Mauritius', text: 'Mauritius' },
121 | { value: 'Malta', text: 'Malta' },
122 | { value: 'Malawi', text: 'Malawi' },
123 | { value: 'Maldives', text: 'Maldives' },
124 | { value: 'Martinique', text: 'Martinique' },
125 | { value: 'Northern Mariana Islands', text: 'Northern Mariana Islands' },
126 | { value: 'Montserrat', text: 'Montserrat' },
127 | { value: 'Mauritania', text: 'Mauritania' },
128 | { value: 'Isle of Man', text: 'Isle of Man' },
129 | { value: 'Uganda', text: 'Uganda' },
130 | { value: 'Tanzania', text: 'Tanzania' },
131 | { value: 'Malaysia', text: 'Malaysia' },
132 | { value: 'Mexico', text: 'Mexico' },
133 | { value: 'Israel', text: 'Israel' },
134 | { value: 'France', text: 'France' },
135 | {
136 | value: 'British Indian Ocean Territory',
137 | text: 'British Indian Ocean Territory',
138 | },
139 | { value: 'Saint Helena', text: 'Saint Helena' },
140 | { value: 'Finland', text: 'Finland' },
141 | { value: 'Fiji', text: 'Fiji' },
142 | { value: 'Falkland Islands', text: 'Falkland Islands' },
143 | { value: 'Micronesia', text: 'Micronesia' },
144 | { value: 'Faroe Islands', text: 'Faroe Islands' },
145 | { value: 'Nicaragua', text: 'Nicaragua' },
146 | { value: 'Netherlands', text: 'Netherlands' },
147 | { value: 'Norway', text: 'Norway' },
148 | { value: 'Namibia', text: 'Namibia' },
149 | { value: 'Vanuatu', text: 'Vanuatu' },
150 | { value: 'New Caledonia', text: 'New Caledonia' },
151 | { value: 'Niger', text: 'Niger' },
152 | { value: 'Norfolk Island', text: 'Norfolk Island' },
153 | { value: 'Nigeria', text: 'Nigeria' },
154 | { value: 'New Zealand', text: 'New Zealand' },
155 | { value: 'Nepal', text: 'Nepal' },
156 | { value: 'Nauru', text: 'Nauru' },
157 | { value: 'Niue', text: 'Niue' },
158 | { value: 'Cook Islands', text: 'Cook Islands' },
159 | { value: 'Kosovo', text: 'Kosovo' },
160 | { value: 'Ivory Coast', text: 'Ivory Coast' },
161 | { value: 'Switzerland', text: 'Switzerland' },
162 | { value: 'Colombia', text: 'Colombia' },
163 | { value: 'China', text: 'China' },
164 | { value: 'Cameroon', text: 'Cameroon' },
165 | { value: 'Chile', text: 'Chile' },
166 | { value: 'Cocos Islands', text: 'Cocos Islands' },
167 | { value: 'Canada', text: 'Canada' },
168 | { value: 'Republic of the Congo', text: 'Republic of the Congo' },
169 | { value: 'Central African Republic', text: 'Central African Republic' },
170 | {
171 | value: 'Democratic Republic of the Congo',
172 | text: 'Democratic Republic of the Congo',
173 | },
174 | { value: 'Czech Republic', text: 'Czech Republic' },
175 | { value: 'Cyprus', text: 'Cyprus' },
176 | { value: 'Christmas Island', text: 'Christmas Island' },
177 | { value: 'Costa Rica', text: 'Costa Rica' },
178 | { value: 'Curacao', text: 'Curacao' },
179 | { value: 'Cape Verde', text: 'Cape Verde' },
180 | { value: 'Cuba', text: 'Cuba' },
181 | { value: 'Swaziland', text: 'Swaziland' },
182 | { value: 'Syria', text: 'Syria' },
183 | { value: 'Sint Maarten', text: 'Sint Maarten' },
184 | { value: 'Kyrgyzstan', text: 'Kyrgyzstan' },
185 | { value: 'Kenya', text: 'Kenya' },
186 | { value: 'South Sudan', text: 'South Sudan' },
187 | { value: 'Suriname', text: 'Suriname' },
188 | { value: 'Kiribati', text: 'Kiribati' },
189 | { value: 'Cambodia', text: 'Cambodia' },
190 | { value: 'Saint Kitts and Nevis', text: 'Saint Kitts and Nevis' },
191 | { value: 'Comoros', text: 'Comoros' },
192 | { value: 'Sao Tome and Principe', text: 'Sao Tome and Principe' },
193 | { value: 'Slovakia', text: 'Slovakia' },
194 | { value: 'South Korea', text: 'South Korea' },
195 | { value: 'Slovenia', text: 'Slovenia' },
196 | { value: 'North Korea', text: 'North Korea' },
197 | { value: 'Kuwait', text: 'Kuwait' },
198 | { value: 'Senegal', text: 'Senegal' },
199 | { value: 'San Marino', text: 'San Marino' },
200 | { value: 'Sierra Leone', text: 'Sierra Leone' },
201 | { value: 'Seychelles', text: 'Seychelles' },
202 | { value: 'Kazakhstan', text: 'Kazakhstan' },
203 | { value: 'Cayman Islands', text: 'Cayman Islands' },
204 | { value: 'Singapore', text: 'Singapore' },
205 | { value: 'Sweden', text: 'Sweden' },
206 | { value: 'Sudan', text: 'Sudan' },
207 | { value: 'Dominican Republic', text: 'Dominican Republic' },
208 | { value: 'Dominica', text: 'Dominica' },
209 | { value: 'Djibouti', text: 'Djibouti' },
210 | { value: 'Denmark', text: 'Denmark' },
211 | { value: 'British Virgin Islands', text: 'British Virgin Islands' },
212 | { value: 'Germany', text: 'Germany' },
213 | { value: 'Yemen', text: 'Yemen' },
214 | { value: 'Algeria', text: 'Algeria' },
215 | { value: 'United States', text: 'United States' },
216 | { value: 'Uruguay', text: 'Uruguay' },
217 | { value: 'Mayotte', text: 'Mayotte' },
218 | {
219 | value: 'United States Minor Outlying Islands',
220 | text: 'United States Minor Outlying Islands',
221 | },
222 | { value: 'Lebanon', text: 'Lebanon' },
223 | { value: 'Saint Lucia', text: 'Saint Lucia' },
224 | { value: 'Laos', text: 'Laos' },
225 | { value: 'Tuvalu', text: 'Tuvalu' },
226 | { value: 'Taiwan', text: 'Taiwan' },
227 | { value: 'Trinidad and Tobago', text: 'Trinidad and Tobago' },
228 | { value: 'Turkey', text: 'Turkey' },
229 | { value: 'Sri Lanka', text: 'Sri Lanka' },
230 | { value: 'Liechtenstein', text: 'Liechtenstein' },
231 | { value: 'Latvia', text: 'Latvia' },
232 | { value: 'Tonga', text: 'Tonga' },
233 | { value: 'Lithuania', text: 'Lithuania' },
234 | { value: 'Luxembourg', text: 'Luxembourg' },
235 | { value: 'Liberia', text: 'Liberia' },
236 | { value: 'Lesotho', text: 'Lesotho' },
237 | { value: 'Thailand', text: 'Thailand' },
238 | { value: 'French Southern Territories', text: 'French Southern Territories' },
239 | { value: 'Togo', text: 'Togo' },
240 | { value: 'Chad', text: 'Chad' },
241 | { value: 'Turks and Caicos Islands', text: 'Turks and Caicos Islands' },
242 | { value: 'Libya', text: 'Libya' },
243 | { value: 'Vatican', text: 'Vatican' },
244 | {
245 | value: 'Saint Vincent and the Grenadines',
246 | text: 'Saint Vincent and the Grenadines',
247 | },
248 | { value: 'United Arab Emirates', text: 'United Arab Emirates' },
249 | { value: 'Andorra', text: 'Andorra' },
250 | { value: 'Antigua and Barbuda', text: 'Antigua and Barbuda' },
251 | { value: 'Afghanistan', text: 'Afghanistan' },
252 | { value: 'Anguilla', text: 'Anguilla' },
253 | { value: 'U.S. Virgin Islands', text: 'U.S. Virgin Islands' },
254 | { value: 'Iceland', text: 'Iceland' },
255 | { value: 'Iran', text: 'Iran' },
256 | { value: 'Armenia', text: 'Armenia' },
257 | { value: 'Albania', text: 'Albania' },
258 | { value: 'Angola', text: 'Angola' },
259 | { value: 'Antarctica', text: 'Antarctica' },
260 | { value: 'American Samoa', text: 'American Samoa' },
261 | { value: 'Argentina', text: 'Argentina' },
262 | { value: 'Australia', text: 'Australia' },
263 | { value: 'Austria', text: 'Austria' },
264 | { value: 'Aruba', text: 'Aruba' },
265 | { value: 'India', text: 'India' },
266 | { value: 'Aland Islands', text: 'Aland Islands' },
267 | { value: 'Azerbaijan', text: 'Azerbaijan' },
268 | { value: 'Ireland', text: 'Ireland' },
269 | { value: 'Indonesia', text: 'Indonesia' },
270 | { value: 'Ukraine', text: 'Ukraine' },
271 | { value: 'Qatar', text: 'Qatar' },
272 | { value: 'Mozambique', text: 'Mozambique' },
273 | ]
274 |
275 | export default countryList
276 |
--------------------------------------------------------------------------------
/src/data/initialData.ts:
--------------------------------------------------------------------------------
1 | import { ProductLine, Invoice } from './types'
2 |
3 | export const initialProductLine: ProductLine = {
4 | description: '',
5 | quantity: '1',
6 | rate: '0.00',
7 | }
8 |
9 | export const initialInvoice: Invoice = {
10 | logo: '',
11 | logoWidth: 100,
12 | title: 'INVOICE',
13 | companyName: '',
14 | name: '',
15 | companyAddress: '',
16 | companyAddress2: '',
17 | companyCountry: 'United States',
18 | billTo: 'Bill To:',
19 | clientName: '',
20 | clientAddress: '',
21 | clientAddress2: '',
22 | clientCountry: 'United States',
23 | invoiceTitleLabel: 'Invoice#',
24 | invoiceTitle: '',
25 | invoiceDateLabel: 'Invoice Date',
26 | invoiceDate: '',
27 | invoiceDueDateLabel: 'Due Date',
28 | invoiceDueDate: '',
29 | productLineDescription: 'Item Description',
30 | productLineQuantity: 'Qty',
31 | productLineQuantityRate: 'Rate',
32 | productLineQuantityAmount: 'Amount',
33 | productLines: [
34 | {
35 | description: 'Brochure Design',
36 | quantity: '2',
37 | rate: '100.00',
38 | },
39 | { ...initialProductLine },
40 | { ...initialProductLine },
41 | ],
42 | subTotalLabel: 'Sub Total',
43 | taxLabel: 'Sale Tax (10%)',
44 | totalLabel: 'TOTAL',
45 | currency: '$',
46 | notesLabel: 'Notes',
47 | notes: 'It was great doing business with you.',
48 | termLabel: 'Terms & Conditions',
49 | term: 'Please make the payment by the due date.',
50 | }
51 |
--------------------------------------------------------------------------------
/src/data/types.ts:
--------------------------------------------------------------------------------
1 | import { CSSProperties } from 'react'
2 | import { z, TypeOf } from 'zod'
3 |
4 | export interface ProductLine {
5 | description: string
6 | quantity: string
7 | rate: string
8 | }
9 |
10 | export const TProductLine = z.object({
11 | description: z.string(),
12 | quantity: z.string(),
13 | rate: z.string(),
14 | })
15 |
16 | export const TInvoice = z.object({
17 | logo: z.string(),
18 | logoWidth: z.number(),
19 | title: z.string(),
20 | companyName: z.string(),
21 | name: z.string(),
22 | companyAddress: z.string(),
23 | companyAddress2: z.string(),
24 | companyCountry: z.string(),
25 | billTo: z.string(),
26 | clientName: z.string(),
27 | clientAddress: z.string(),
28 | clientAddress2: z.string(),
29 | clientCountry: z.string(),
30 | invoiceTitleLabel: z.string(),
31 | invoiceTitle: z.string(),
32 | invoiceDateLabel: z.string(),
33 | invoiceDate: z.string(),
34 | invoiceDueDateLabel: z.string(),
35 | invoiceDueDate: z.string(),
36 | productLineDescription: z.string(),
37 | productLineQuantity: z.string(),
38 | productLineQuantityRate: z.string(),
39 | productLineQuantityAmount: z.string(),
40 | productLines: z.array(TProductLine),
41 | subTotalLabel: z.string(),
42 | taxLabel: z.string(),
43 | totalLabel: z.string(),
44 | currency: z.string(),
45 | notesLabel: z.string(),
46 | notes: z.string(),
47 | termLabel: z.string(),
48 | term: z.string(),
49 | })
50 |
51 | export type Invoice = TypeOf
52 |
53 | export interface CSSClasses {
54 | [key: string]: CSSProperties
55 | }
56 |
--------------------------------------------------------------------------------
/src/hooks/useOnClickOutside.ts:
--------------------------------------------------------------------------------
1 | import { RefObject, useEffect } from 'react'
2 |
3 | type AnyEvent = MouseEvent | TouchEvent
4 |
5 | function useOnClickOutside(
6 | ref: RefObject,
7 | handler: (event: AnyEvent) => void,
8 | ) {
9 | useEffect(() => {
10 | const listener = (event: AnyEvent) => {
11 | const el = ref?.current
12 |
13 | // Do nothing if clicking ref's element or descendent elements
14 | if (!el || el.contains(event.target as Node)) {
15 | return
16 | }
17 |
18 | handler(event)
19 | }
20 |
21 | document.addEventListener(`mousedown`, listener)
22 | document.addEventListener(`touchstart`, listener)
23 |
24 | return () => {
25 | document.removeEventListener(`mousedown`, listener)
26 | document.removeEventListener(`touchstart`, listener)
27 | }
28 |
29 | // Reload only if ref or handler changes
30 | }, [ref, handler])
31 | }
32 |
33 | export default useOnClickOutside
34 |
--------------------------------------------------------------------------------
/src/images/download.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
26 |
--------------------------------------------------------------------------------
/src/images/remove.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/images/resize.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/images/template_download.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
20 |
--------------------------------------------------------------------------------
/src/images/template_upload.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
78 |
--------------------------------------------------------------------------------
/src/main.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDOM from 'react-dom/client'
3 | import App from './App.tsx'
4 | import './scss/main.scss'
5 | import * as serviceWorker from './serviceWorker'
6 |
7 | ReactDOM.createRoot(document.getElementById('root')!).render(
8 |
9 |
10 | ,
11 | )
12 |
13 | serviceWorker.register()
14 |
--------------------------------------------------------------------------------
/src/scss/_app.scss:
--------------------------------------------------------------------------------
1 | .app {
2 | margin: 30px auto 50px auto;
3 | width: 700px;
4 | }
5 |
6 | .input,
7 | .span,
8 | .select {
9 | display: inline-block;
10 | width: 98%;
11 | padding: 4px 12px 4px 0;
12 | margin-bottom: 1px;
13 | border: 1px dotted transparent;
14 | transition:
15 | background 0.1s ease-in-out,
16 | border-color 0.2s ease-in-out;
17 | }
18 |
19 | .input,
20 | .select {
21 | &:hover,
22 | &:focus {
23 | background: $color-yellow;
24 | }
25 |
26 | &:focus {
27 | border-color: $color-cyan;
28 | }
29 |
30 | &.white {
31 | &:hover,
32 | &:focus {
33 | color: inherit;
34 | }
35 | }
36 | }
37 |
38 | .invoice-wrapper {
39 | position: relative;
40 | background: #fff;
41 | padding: 40px 35px;
42 | box-shadow: 0 0 17px 0 rgba(16, 40, 73, 0.09);
43 | }
44 |
45 | .download-pdf {
46 | position: fixed;
47 | top: 100px;
48 | margin-left: -110px;
49 | width: 40px;
50 | height: 40px;
51 | transition: opacity 0.2s ease-in-out;
52 |
53 | &.loading {
54 | opacity: 0.3;
55 | }
56 |
57 | button {
58 | border: none;
59 | }
60 |
61 | a,
62 | label,
63 | button {
64 | display: block;
65 | background-repeat: no-repeat;
66 | top: 0;
67 | left: 0;
68 | width: 100%;
69 | height: 100%;
70 | }
71 | .download-pdf__pdf {
72 | background: url('../images/download.svg');
73 | }
74 | .download-pdf__template_download {
75 | width: 30px;
76 | height: 30px;
77 | background: url('../images/template_download.svg');
78 | }
79 | .download-pdf__template_upload {
80 | width: 30px;
81 | height: 30px;
82 | background: url('../images/template_upload.svg');
83 | }
84 | input[type='file'] {
85 | visibility: hidden;
86 | }
87 | }
88 |
89 | .image {
90 | position: relative;
91 | display: inline-block;
92 | }
93 |
94 | .image__file {
95 | position: absolute;
96 | width: 1px;
97 | height: 1px;
98 | padding: 0;
99 | margin: -1px;
100 | overflow: hidden;
101 | clip: rect(0, 0, 0, 0);
102 | border: 0;
103 | }
104 |
105 | .image__upload {
106 | cursor: pointer;
107 | font-size: 12px;
108 | color: $placeholder-color;
109 | background-color: $color-gray;
110 | border: 2px dashed $placeholder-color;
111 | display: block;
112 | width: 100px;
113 | height: 20px;
114 | padding: 0;
115 | outline: none;
116 | transition:
117 | height 0.2s,
118 | font-size 0.2s;
119 |
120 | &:focus,
121 | &:hover {
122 | height: 100px;
123 | font-size: 14px;
124 | }
125 | }
126 |
127 | .image__img {
128 | display: block;
129 | }
130 |
131 | .image__change {
132 | cursor: pointer;
133 | font-size: 14px;
134 | color: $placeholder-color;
135 | background-color: $color-gray;
136 | border: 2px dashed $placeholder-color;
137 | position: absolute;
138 | top: 0;
139 | left: 0;
140 | width: 100%;
141 | height: 100%;
142 | opacity: 0;
143 | transition: opacity 0.2s;
144 |
145 | &:hover,
146 | &:focus {
147 | opacity: 0.95;
148 | }
149 | }
150 |
151 | .image__edit,
152 | .image__remove {
153 | background: #999 no-repeat center center;
154 | background-size: 10px 10px;
155 | border: 0;
156 | border-radius: 50%;
157 | padding: 0;
158 | position: absolute;
159 | width: 20px;
160 | height: 20px;
161 | top: -10px;
162 | text-indent: -9999em;
163 | opacity: 0;
164 | transition:
165 | opacity 0.2s,
166 | background-color 0.2s;
167 |
168 | &:hover,
169 | &:focus {
170 | background-color: #666;
171 | }
172 |
173 | .image:hover &,
174 | .image:focus-within & {
175 | opacity: 1;
176 | }
177 | }
178 |
179 | .image__edit {
180 | background-image: url('../images/resize.svg');
181 | right: 20px;
182 | }
183 |
184 | .image__remove {
185 | background-image: url('../images/remove.svg');
186 | right: -10px;
187 | }
188 |
189 | .image__width-wrapper {
190 | background-color: $color-white;
191 | padding: 10px 20px 25px;
192 | position: absolute;
193 | width: 270px;
194 | top: -70px;
195 | left: 0;
196 | border-radius: 4px;
197 | box-shadow: 2px 1px 6px rgba(0, 0, 0, 0.15);
198 | }
199 |
--------------------------------------------------------------------------------
/src/scss/_color.scss:
--------------------------------------------------------------------------------
1 | .dark {
2 | color: $color-dark;
3 | }
4 |
5 | .white {
6 | color: $color-white;
7 | }
8 |
9 | .bg-white {
10 | background-color: $color-white;
11 | }
12 |
13 | .bg-dark {
14 | background-color: $color-dark-2;
15 | }
16 |
17 | .bg-gray {
18 | background-color: $color-gray;
19 | }
20 |
21 | .bg-red {
22 | background-color: $color-red;
23 | }
24 |
25 | .bg-green {
26 | background-color: $color-green;
27 | }
28 |
--------------------------------------------------------------------------------
/src/scss/_icons.scss:
--------------------------------------------------------------------------------
1 | .icon {
2 | display: inline-block;
3 | position: relative;
4 | width: 16px;
5 | height: 16px;
6 | border: 0;
7 | border-radius: 50%;
8 | }
9 |
10 | .icon-absolute {
11 | position: absolute;
12 | }
13 |
14 | .icon-remove {
15 | &::before,
16 | &::after {
17 | content: '';
18 | position: absolute;
19 | width: 2px;
20 | height: 10px;
21 | left: 7px;
22 | top: 3px;
23 | background-color: $color-white;
24 | }
25 |
26 | &::before {
27 | transform: rotate(45deg);
28 | }
29 |
30 | &::after {
31 | transform: rotate(-45deg);
32 | }
33 | }
34 |
35 | .icon-add {
36 | &::before,
37 | &::after {
38 | content: '';
39 | position: absolute;
40 | width: 2px;
41 | height: 10px;
42 | left: 7px;
43 | top: 3px;
44 | background-color: $color-white;
45 | }
46 |
47 | &::after {
48 | transform: rotate(-90deg);
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/src/scss/_layout.scss:
--------------------------------------------------------------------------------
1 | .block {
2 | display: block;
3 | }
4 |
5 | .flex {
6 | display: flex;
7 | }
8 |
9 | .w-auto {
10 | width: auto !important;
11 | }
12 |
13 | .w-100 {
14 | width: 100% !important;
15 | }
16 |
17 | .w-50 {
18 | width: 50%;
19 | }
20 |
21 | .w-55 {
22 | width: 55%;
23 | }
24 |
25 | .w-45 {
26 | width: 45%;
27 | }
28 |
29 | .w-60 {
30 | width: 60%;
31 | }
32 |
33 | .w-40 {
34 | width: 40%;
35 | }
36 |
37 | .w-48 {
38 | width: 48%;
39 | }
40 |
41 | .w-17 {
42 | width: 17%;
43 | }
44 |
45 | .w-18 {
46 | width: 18%;
47 | }
48 |
49 | .row {
50 | position: relative;
51 | border-bottom: 1px solid $color-gray;
52 | }
53 |
54 | .row__remove {
55 | display: flex;
56 | padding: 0;
57 | position: absolute;
58 | top: 10px;
59 | right: -20px;
60 | opacity: 0;
61 | transition: opacity 0.2s ease-in-out;
62 |
63 | .row:hover &,
64 | .row:focus-within & {
65 | opacity: 1;
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/src/scss/_spacing.scss:
--------------------------------------------------------------------------------
1 | .mt-40 {
2 | margin-top: 40px;
3 | }
4 |
5 | .mt-30 {
6 | margin-top: 30px;
7 | }
8 |
9 | .mt-20 {
10 | margin-top: 20px;
11 | }
12 |
13 | .mt-10 {
14 | margin-top: 10px;
15 | }
16 |
17 | .mb-5 {
18 | margin-bottom: 5px;
19 | }
20 |
21 | .mr-10 {
22 | margin-right: 10px;
23 | }
24 |
25 | .ml-30 {
26 | margin-left: 30px;
27 | }
28 |
29 | .p-4-8 {
30 | padding: 4px 8px;
31 | }
32 |
33 | .p-5 {
34 | padding: 5px;
35 | }
36 |
37 | .pb-10 {
38 | padding-bottom: 10px;
39 | }
40 |
--------------------------------------------------------------------------------
/src/scss/_text.scss:
--------------------------------------------------------------------------------
1 | .right {
2 | text-align: right;
3 | }
4 |
5 | .center {
6 | text-align: center;
7 | }
8 |
9 | .text-small {
10 | font-size: 12px;
11 | }
12 |
13 | .bold {
14 | font-weight: 600;
15 | }
16 |
17 | .fs-20 {
18 | font-size: 20px;
19 | }
20 |
21 | .fs-30 {
22 | font-size: 30px;
23 | }
24 |
25 | .fs-45 {
26 | font-size: 45px;
27 | }
28 |
29 | .upper {
30 | text-transform: uppercase;
31 | }
32 |
--------------------------------------------------------------------------------
/src/scss/_typography.scss:
--------------------------------------------------------------------------------
1 | body {
2 | font-family: Nunito, sans-serif;
3 | font-size: 14px;
4 | color: #555;
5 | background: $background-color;
6 | padding: 0;
7 | margin: 0;
8 | }
9 |
10 | * {
11 | box-sizing: border-box;
12 | }
13 |
14 | ::placeholder {
15 | color: $placeholder-color;
16 | opacity: 1;
17 | }
18 |
19 | input,
20 | textarea,
21 | select {
22 | font-family: Nunito, sans-serif;
23 | font-size: 14px;
24 | color: #555;
25 | background: transparent;
26 | border-radius: 3px;
27 | outline: 0;
28 | }
29 |
30 | select {
31 | outline: 0;
32 | }
33 |
34 | button {
35 | font-family: Nunito, sans-serif;
36 | font-size: 14px;
37 | border-radius: 3px;
38 | }
39 |
40 | textarea {
41 | resize: vertical;
42 | background: transparent;
43 | }
44 |
45 | button.link {
46 | display: flex;
47 | align-items: center;
48 | background: transparent;
49 | border: 0;
50 | color: $color-blue;
51 |
52 | &:hover,
53 | &:focus {
54 | text-decoration: underline;
55 | }
56 |
57 | &:focus {
58 | outline: 1px dotted $color-cyan;
59 | opacity: 1;
60 | }
61 | }
62 |
63 | h1 {
64 | margin-top: 0;
65 | margin-bottom: 30px;
66 | }
67 |
--------------------------------------------------------------------------------
/src/scss/_variables.scss:
--------------------------------------------------------------------------------
1 | $background-color: #f2f3f5;
2 | $placeholder-color: #aaa;
3 |
4 | $color-dark: #222;
5 | $color-dark-2: #666;
6 | $color-gray: #e3e3e3;
7 | $color-yellow: #fdf4db;
8 | $color-cyan: #66afe9;
9 | $color-white: #fff;
10 | $color-red: #f03434;
11 | $color-green: #26a65b;
12 | $color-blue: #428bca;
13 |
--------------------------------------------------------------------------------
/src/scss/main.scss:
--------------------------------------------------------------------------------
1 | @import 'variables';
2 | @import 'color';
3 | @import 'layout';
4 | @import 'typography';
5 | @import 'spacing';
6 | @import 'text';
7 | @import 'icons';
8 | @import 'app';
9 |
--------------------------------------------------------------------------------
/src/serviceWorker.ts:
--------------------------------------------------------------------------------
1 | // This optional code is used to register a service worker.
2 | // register() is not called by default.
3 |
4 | // This lets the app load faster on subsequent visits in production, and gives
5 | // it offline capabilities. However, it also means that developers (and users)
6 | // will only see deployed updates on subsequent visits to a page, after all the
7 | // existing tabs open on the page have been closed, since previously cached
8 | // resources are updated in the background.
9 |
10 | // To learn more about the benefits of this model and instructions on how to
11 | // opt-in, read https://bit.ly/CRA-PWA
12 |
13 | const isLocalhost = Boolean(
14 | window.location.hostname === 'localhost' ||
15 | // [::1] is the IPv6 localhost address.
16 | window.location.hostname === '[::1]' ||
17 | // 127.0.0.0/8 are considered localhost for IPv4.
18 | window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/),
19 | )
20 |
21 | type Config = {
22 | onSuccess?: (registration: ServiceWorkerRegistration) => void
23 | onUpdate?: (registration: ServiceWorkerRegistration) => void
24 | }
25 |
26 | export function register(config?: Config) {
27 | if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
28 | // The URL constructor is available in all browsers that support SW.
29 | const publicUrl = new URL(process.env.PUBLIC_URL!, window.location.href)
30 | if (publicUrl.origin !== window.location.origin) {
31 | // Our service worker won't work if PUBLIC_URL is on a different origin
32 | // from what our page is served on. This might happen if a CDN is used to
33 | // serve assets; see https://github.com/facebook/create-react-app/issues/2374
34 | return
35 | }
36 |
37 | window.addEventListener('load', () => {
38 | const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`
39 |
40 | if (isLocalhost) {
41 | // This is running on localhost. Let's check if a service worker still exists or not.
42 | checkValidServiceWorker(swUrl, config)
43 |
44 | // Add some additional logging to localhost, pointing developers to the
45 | // service worker/PWA documentation.
46 | navigator.serviceWorker.ready.then(() => {
47 | console.log(
48 | 'This web app is being served cache-first by a service ' +
49 | 'worker. To learn more, visit https://bit.ly/CRA-PWA',
50 | )
51 | })
52 | } else {
53 | // Is not localhost. Just register service worker
54 | registerValidSW(swUrl, config)
55 | }
56 | })
57 | }
58 | }
59 |
60 | function registerValidSW(swUrl: string, config?: Config) {
61 | navigator.serviceWorker
62 | .register(swUrl)
63 | .then((registration) => {
64 | registration.onupdatefound = () => {
65 | const installingWorker = registration.installing
66 | if (installingWorker == null) {
67 | return
68 | }
69 | installingWorker.onstatechange = () => {
70 | if (installingWorker.state === 'installed') {
71 | if (navigator.serviceWorker.controller) {
72 | // At this point, the updated precached content has been fetched,
73 | // but the previous service worker will still serve the older
74 | // content until all client tabs are closed.
75 | console.log(
76 | 'New content is available and will be used when all ' +
77 | 'tabs for this page are closed. See https://bit.ly/CRA-PWA.',
78 | )
79 |
80 | // Execute callback
81 | if (config && config.onUpdate) {
82 | config.onUpdate(registration)
83 | }
84 | } else {
85 | // At this point, everything has been precached.
86 | // It's the perfect time to display a
87 | // "Content is cached for offline use." message.
88 | console.log('Content is cached for offline use.')
89 |
90 | // Execute callback
91 | if (config && config.onSuccess) {
92 | config.onSuccess(registration)
93 | }
94 | }
95 | }
96 | }
97 | }
98 | })
99 | .catch((error) => {
100 | console.error('Error during service worker registration:', error)
101 | })
102 | }
103 |
104 | function checkValidServiceWorker(swUrl: string, config?: Config) {
105 | // Check if the service worker can be found. If it can't reload the page.
106 | fetch(swUrl, {
107 | headers: { 'Service-Worker': 'script' },
108 | })
109 | .then((response) => {
110 | // Ensure service worker exists, and that we really are getting a JS file.
111 | const contentType = response.headers.get('content-type')
112 | if (
113 | response.status === 404 ||
114 | (contentType != null && contentType.indexOf('javascript') === -1)
115 | ) {
116 | // No service worker found. Probably a different app. Reload the page.
117 | navigator.serviceWorker.ready.then((registration) => {
118 | registration.unregister().then(() => {
119 | window.location.reload()
120 | })
121 | })
122 | } else {
123 | // Service worker found. Proceed as normal.
124 | registerValidSW(swUrl, config)
125 | }
126 | })
127 | .catch(() => {
128 | console.log('No internet connection found. App is running in offline mode.')
129 | })
130 | }
131 |
132 | export function unregister() {
133 | if ('serviceWorker' in navigator) {
134 | navigator.serviceWorker.ready
135 | .then((registration) => {
136 | registration.unregister()
137 | })
138 | .catch((error) => {
139 | console.error(error.message)
140 | })
141 | }
142 | }
143 |
--------------------------------------------------------------------------------
/src/styles/compose.ts:
--------------------------------------------------------------------------------
1 | import ReactPDF from '@react-pdf/renderer'
2 | import styles from './styles'
3 |
4 | const compose = (classes: string): ReactPDF.Styles => {
5 | const css: ReactPDF.Styles = {
6 | //@ts-ignore
7 | '@import': 'url(https://fonts.bunny.net/css?family=nunito:400,600)',
8 | }
9 |
10 | const classesArray: string[] = classes.replace(/\s+/g, ' ').split(' ')
11 |
12 | classesArray.forEach((className) => {
13 | if (typeof styles[className] !== undefined) {
14 | Object.assign(css, styles[className])
15 | }
16 | })
17 |
18 | return css
19 | }
20 |
21 | export default compose
22 |
--------------------------------------------------------------------------------
/src/styles/styles.ts:
--------------------------------------------------------------------------------
1 | import { CSSClasses } from '../data/types'
2 |
3 | const colorDark = '#222'
4 | const colorDark2 = '#666'
5 | const colorGray = '#e3e3e3'
6 | const colorWhite = '#fff'
7 |
8 | const styles: CSSClasses = {
9 | dark: {
10 | color: colorDark,
11 | },
12 |
13 | white: {
14 | color: colorWhite,
15 | },
16 |
17 | 'bg-dark': {
18 | backgroundColor: colorDark2,
19 | },
20 |
21 | 'bg-gray': {
22 | backgroundColor: colorGray,
23 | },
24 |
25 | flex: {
26 | display: 'flex',
27 | flexDirection: 'row',
28 | flexWrap: 'nowrap',
29 | },
30 |
31 | 'w-auto': {
32 | flex: 1,
33 | paddingRight: '8px',
34 | },
35 |
36 | 'ml-30': {
37 | flex: 1,
38 | },
39 |
40 | 'w-100': {
41 | width: '100%',
42 | },
43 |
44 | 'w-50': {
45 | width: '50%',
46 | },
47 |
48 | 'w-55': {
49 | width: '55%',
50 | },
51 |
52 | 'w-45': {
53 | width: '45%',
54 | },
55 |
56 | 'w-60': {
57 | width: '60%',
58 | },
59 |
60 | 'w-40': {
61 | width: '40%',
62 | },
63 |
64 | 'w-48': {
65 | width: '48%',
66 | },
67 |
68 | 'w-17': {
69 | width: '17%',
70 | },
71 |
72 | 'w-18': {
73 | width: '18%',
74 | },
75 |
76 | row: {
77 | borderBottom: `1px solid ${colorGray}`,
78 | },
79 |
80 | 'mt-40': {
81 | marginTop: '40px',
82 | },
83 |
84 | 'mt-30': {
85 | marginTop: '30px',
86 | },
87 |
88 | 'mt-20': {
89 | marginTop: '20px',
90 | },
91 |
92 | 'mt-10': {
93 | marginTop: '10px',
94 | },
95 |
96 | 'mb-5': {
97 | marginBottom: '5px',
98 | },
99 |
100 | 'p-4-8': {
101 | padding: '4px 8px',
102 | },
103 |
104 | 'p-5': {
105 | padding: '5px',
106 | },
107 |
108 | 'pb-10': {
109 | paddingBottom: '10px',
110 | },
111 |
112 | right: {
113 | textAlign: 'right',
114 | },
115 |
116 | bold: {
117 | fontWeight: 'bold',
118 | },
119 |
120 | 'fs-20': {
121 | fontSize: '20px',
122 | },
123 |
124 | 'fs-45': {
125 | fontSize: '45px',
126 | },
127 |
128 | page: {
129 | fontFamily: 'Nunito',
130 | fontSize: '13px',
131 | color: '#555',
132 | padding: '40px 35px',
133 | },
134 |
135 | span: {
136 | padding: '4px 12px 4px 0',
137 | },
138 |
139 | logo: {
140 | display: 'block',
141 | },
142 | }
143 |
144 | export default styles
145 |
--------------------------------------------------------------------------------
/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2020",
4 | "useDefineForClassFields": true,
5 | "lib": ["ES2020", "DOM", "DOM.Iterable"],
6 | "module": "ESNext",
7 | "skipLibCheck": true,
8 |
9 | /* Bundler mode */
10 | "moduleResolution": "bundler",
11 | "allowImportingTsExtensions": true,
12 | "resolveJsonModule": true,
13 | "isolatedModules": true,
14 | "noEmit": true,
15 | "jsx": "react-jsx",
16 |
17 | /* Linting */
18 | "strict": true,
19 | "noUnusedLocals": true,
20 | "noUnusedParameters": true,
21 | "noFallthroughCasesInSwitch": true
22 | },
23 | "include": ["src"],
24 | "references": [{ "path": "./tsconfig.node.json" }]
25 | }
26 |
--------------------------------------------------------------------------------
/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true,
8 | "strict": true
9 | },
10 | "include": ["vite.config.ts"]
11 | }
12 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react-swc'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | })
8 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/runtime@^7.10.1", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13":
6 | version "7.24.1"
7 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.1.tgz#431f9a794d173b53720e69a6464abc6f0e2a5c57"
8 | integrity sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==
9 | dependencies:
10 | regenerator-runtime "^0.14.0"
11 |
12 | "@esbuild/aix-ppc64@0.20.2":
13 | version "0.20.2"
14 | resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537"
15 | integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==
16 |
17 | "@esbuild/android-arm64@0.20.2":
18 | version "0.20.2"
19 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9"
20 | integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==
21 |
22 | "@esbuild/android-arm@0.20.2":
23 | version "0.20.2"
24 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995"
25 | integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==
26 |
27 | "@esbuild/android-x64@0.20.2":
28 | version "0.20.2"
29 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98"
30 | integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==
31 |
32 | "@esbuild/darwin-arm64@0.20.2":
33 | version "0.20.2"
34 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb"
35 | integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==
36 |
37 | "@esbuild/darwin-x64@0.20.2":
38 | version "0.20.2"
39 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0"
40 | integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==
41 |
42 | "@esbuild/freebsd-arm64@0.20.2":
43 | version "0.20.2"
44 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911"
45 | integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==
46 |
47 | "@esbuild/freebsd-x64@0.20.2":
48 | version "0.20.2"
49 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c"
50 | integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==
51 |
52 | "@esbuild/linux-arm64@0.20.2":
53 | version "0.20.2"
54 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5"
55 | integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==
56 |
57 | "@esbuild/linux-arm@0.20.2":
58 | version "0.20.2"
59 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c"
60 | integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==
61 |
62 | "@esbuild/linux-ia32@0.20.2":
63 | version "0.20.2"
64 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa"
65 | integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==
66 |
67 | "@esbuild/linux-loong64@0.20.2":
68 | version "0.20.2"
69 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5"
70 | integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==
71 |
72 | "@esbuild/linux-mips64el@0.20.2":
73 | version "0.20.2"
74 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa"
75 | integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==
76 |
77 | "@esbuild/linux-ppc64@0.20.2":
78 | version "0.20.2"
79 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20"
80 | integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==
81 |
82 | "@esbuild/linux-riscv64@0.20.2":
83 | version "0.20.2"
84 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300"
85 | integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==
86 |
87 | "@esbuild/linux-s390x@0.20.2":
88 | version "0.20.2"
89 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685"
90 | integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==
91 |
92 | "@esbuild/linux-x64@0.20.2":
93 | version "0.20.2"
94 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff"
95 | integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==
96 |
97 | "@esbuild/netbsd-x64@0.20.2":
98 | version "0.20.2"
99 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6"
100 | integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==
101 |
102 | "@esbuild/openbsd-x64@0.20.2":
103 | version "0.20.2"
104 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf"
105 | integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==
106 |
107 | "@esbuild/sunos-x64@0.20.2":
108 | version "0.20.2"
109 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f"
110 | integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==
111 |
112 | "@esbuild/win32-arm64@0.20.2":
113 | version "0.20.2"
114 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90"
115 | integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==
116 |
117 | "@esbuild/win32-ia32@0.20.2":
118 | version "0.20.2"
119 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23"
120 | integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==
121 |
122 | "@esbuild/win32-x64@0.20.2":
123 | version "0.20.2"
124 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc"
125 | integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==
126 |
127 | "@floating-ui/core@^1.0.0":
128 | version "1.6.0"
129 | resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.0.tgz#fa41b87812a16bf123122bf945946bae3fdf7fc1"
130 | integrity sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==
131 | dependencies:
132 | "@floating-ui/utils" "^0.2.1"
133 |
134 | "@floating-ui/dom@^1.6.1":
135 | version "1.6.3"
136 | resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.3.tgz#954e46c1dd3ad48e49db9ada7218b0985cee75ef"
137 | integrity sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==
138 | dependencies:
139 | "@floating-ui/core" "^1.0.0"
140 | "@floating-ui/utils" "^0.2.0"
141 |
142 | "@floating-ui/react-dom@^2.0.0":
143 | version "2.0.8"
144 | resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.8.tgz#afc24f9756d1b433e1fe0d047c24bd4d9cefaa5d"
145 | integrity sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==
146 | dependencies:
147 | "@floating-ui/dom" "^1.6.1"
148 |
149 | "@floating-ui/react@^0.26.2":
150 | version "0.26.10"
151 | resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.10.tgz#d4a4878bcfaed70963ec0eaa67a71bead5924ee5"
152 | integrity sha512-sh6f9gVvWQdEzLObrWbJ97c0clJObiALsFe0LiR/kb3tDRKwEhObASEH2QyfdoO/ZBPzwxa9j+nYFo+sqgbioA==
153 | dependencies:
154 | "@floating-ui/react-dom" "^2.0.0"
155 | "@floating-ui/utils" "^0.2.0"
156 | tabbable "^6.0.0"
157 |
158 | "@floating-ui/utils@^0.2.0", "@floating-ui/utils@^0.2.1":
159 | version "0.2.1"
160 | resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2"
161 | integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==
162 |
163 | "@react-pdf/fns@2.2.1":
164 | version "2.2.1"
165 | resolved "https://registry.yarnpkg.com/@react-pdf/fns/-/fns-2.2.1.tgz#04fe664a6f70214569c9c27e249e3395836f37d5"
166 | integrity sha512-s78aDg0vDYaijU5lLOCsUD+qinQbfOvcNeaoX9AiE7+kZzzCo6B/nX+l48cmt9OosJmvZvE9DWR9cLhrhOi2pA==
167 | dependencies:
168 | "@babel/runtime" "^7.20.13"
169 |
170 | "@react-pdf/font@^2.4.4":
171 | version "2.4.4"
172 | resolved "https://registry.yarnpkg.com/@react-pdf/font/-/font-2.4.4.tgz#52c2b900a2eb4cca579cc58ea85d062c02a879cd"
173 | integrity sha512-yjK5eSY+LcbxS0m+sOYln8GdgIbUgti4xjwf14kx8OSsOMJQJyHFALHMh2cLcKJR9yZeqVDo1FwCsY6gw1yCkg==
174 | dependencies:
175 | "@babel/runtime" "^7.20.13"
176 | "@react-pdf/types" "^2.4.1"
177 | cross-fetch "^3.1.5"
178 | fontkit "^2.0.2"
179 | is-url "^1.2.4"
180 |
181 | "@react-pdf/image@^2.3.6":
182 | version "2.3.6"
183 | resolved "https://registry.yarnpkg.com/@react-pdf/image/-/image-2.3.6.tgz#72444842517f8b0c08bbf4c216d8b41110498d16"
184 | integrity sha512-7iZDYZrZlJqNzS6huNl2XdMcLFUo68e6mOdzQeJ63d5eApdthhSHBnkGzHfLhH5t8DCpZNtClmklzuLL63ADfw==
185 | dependencies:
186 | "@babel/runtime" "^7.20.13"
187 | "@react-pdf/png-js" "^2.3.1"
188 | cross-fetch "^3.1.5"
189 | jay-peg "^1.0.2"
190 |
191 | "@react-pdf/layout@^3.11.5":
192 | version "3.11.5"
193 | resolved "https://registry.yarnpkg.com/@react-pdf/layout/-/layout-3.11.5.tgz#c1caf04e8f58dbecde56ffed7fd5a56d63f3683c"
194 | integrity sha512-VLOzWIODUKw0ZTrS9XDkwl3q1OHKG8qd6OyCZZ7Q8/SijAh9ho70HEc/f1ffBFmM0nGrKMG0M3L0/7z1XKmOGw==
195 | dependencies:
196 | "@babel/runtime" "^7.20.13"
197 | "@react-pdf/fns" "2.2.1"
198 | "@react-pdf/image" "^2.3.6"
199 | "@react-pdf/pdfkit" "^3.1.9"
200 | "@react-pdf/primitives" "^3.1.1"
201 | "@react-pdf/stylesheet" "^4.2.4"
202 | "@react-pdf/textkit" "^4.4.1"
203 | "@react-pdf/types" "^2.4.1"
204 | cross-fetch "^3.1.5"
205 | emoji-regex "^10.3.0"
206 | queue "^6.0.1"
207 | yoga-layout "^2.0.1"
208 |
209 | "@react-pdf/pdfkit@^3.1.9":
210 | version "3.1.9"
211 | resolved "https://registry.yarnpkg.com/@react-pdf/pdfkit/-/pdfkit-3.1.9.tgz#c6af1ec6880668404fa927dfe66118bafa50a54c"
212 | integrity sha512-9ZPF9gGkBWLcEc+HMkbJ5bHsxenej5Kz9YWWs10EeS8d5v6UF027Ffl+75HXZmgiO5iLVONTYj06LnyYZ95XMQ==
213 | dependencies:
214 | "@babel/runtime" "^7.20.13"
215 | "@react-pdf/png-js" "^2.3.1"
216 | browserify-zlib "^0.2.0"
217 | crypto-js "^4.2.0"
218 | fontkit "^2.0.2"
219 | jay-peg "^1.0.2"
220 | vite-compatible-readable-stream "^3.6.1"
221 |
222 | "@react-pdf/png-js@^2.3.1":
223 | version "2.3.1"
224 | resolved "https://registry.yarnpkg.com/@react-pdf/png-js/-/png-js-2.3.1.tgz#5381d5443ac1134e98fc446fa1debb45950665bc"
225 | integrity sha512-pEZ18I4t1vAUS4lmhvXPmXYP4PHeblpWP/pAlMMRkEyP7tdAeHUN7taQl9sf9OPq7YITMY3lWpYpJU6t4CZgZg==
226 | dependencies:
227 | browserify-zlib "^0.2.0"
228 |
229 | "@react-pdf/primitives@^3.1.1":
230 | version "3.1.1"
231 | resolved "https://registry.yarnpkg.com/@react-pdf/primitives/-/primitives-3.1.1.tgz#45a3253806fa61046f3821b8553bfee3cd848d14"
232 | integrity sha512-miwjxLwTnO3IjoqkTVeTI+9CdyDggwekmSLhVCw+a/7FoQc+gF3J2dSKwsHvAcVFM0gvU8mzCeTofgw0zPDq0w==
233 |
234 | "@react-pdf/render@^3.4.3":
235 | version "3.4.3"
236 | resolved "https://registry.yarnpkg.com/@react-pdf/render/-/render-3.4.3.tgz#1aefea3b130349a6916fecfc229d0196d55f9305"
237 | integrity sha512-9LL059vfwrK1gA0uIA4utpQ/pUH9EW/yia4bb7pCoARs8IlupY5UP265jgax15ua0p+MdUwShZzQ9rilu7kGsw==
238 | dependencies:
239 | "@babel/runtime" "^7.20.13"
240 | "@react-pdf/fns" "2.2.1"
241 | "@react-pdf/primitives" "^3.1.1"
242 | "@react-pdf/textkit" "^4.4.1"
243 | "@react-pdf/types" "^2.4.1"
244 | abs-svg-path "^0.1.1"
245 | color-string "^1.9.1"
246 | normalize-svg-path "^1.1.0"
247 | parse-svg-path "^0.1.2"
248 | svg-arc-to-cubic-bezier "^3.2.0"
249 |
250 | "@react-pdf/renderer@^3.4.2":
251 | version "3.4.2"
252 | resolved "https://registry.yarnpkg.com/@react-pdf/renderer/-/renderer-3.4.2.tgz#f13f7d291a1af108ed543c38c2efb86a4afb9f21"
253 | integrity sha512-YNwioiN97SOqEdCskfixsru+Y7hHbUjyayYFALKwWiAnoTOckfpacfGyIgXZXtZiwPYwnSGYTaJRxpjC7seCkA==
254 | dependencies:
255 | "@babel/runtime" "^7.20.13"
256 | "@react-pdf/font" "^2.4.4"
257 | "@react-pdf/layout" "^3.11.5"
258 | "@react-pdf/pdfkit" "^3.1.9"
259 | "@react-pdf/primitives" "^3.1.1"
260 | "@react-pdf/render" "^3.4.3"
261 | "@react-pdf/types" "^2.4.1"
262 | events "^3.3.0"
263 | object-assign "^4.1.1"
264 | prop-types "^15.6.2"
265 | queue "^6.0.1"
266 | scheduler "^0.17.0"
267 |
268 | "@react-pdf/stylesheet@^4.2.4":
269 | version "4.2.4"
270 | resolved "https://registry.yarnpkg.com/@react-pdf/stylesheet/-/stylesheet-4.2.4.tgz#805ce12d49bc666bd34740e72850f95139f0de47"
271 | integrity sha512-CgRfDzeMtnV0GL7zSn381NubmgwqKhFKcK1YrWX3azl/KWVh52jjFd3HWi6dvcETNT862mjWz5MnExe4WOBJXA==
272 | dependencies:
273 | "@babel/runtime" "^7.20.13"
274 | "@react-pdf/fns" "2.2.1"
275 | "@react-pdf/types" "^2.4.1"
276 | color-string "^1.9.1"
277 | hsl-to-hex "^1.0.0"
278 | media-engine "^1.0.3"
279 | postcss-value-parser "^4.1.0"
280 |
281 | "@react-pdf/textkit@^4.4.1":
282 | version "4.4.1"
283 | resolved "https://registry.yarnpkg.com/@react-pdf/textkit/-/textkit-4.4.1.tgz#b4e4181ea7d4269c54a1794d4022b55c5135f0e7"
284 | integrity sha512-Jl9wdTqIvJ5pX+vAGz0EOhP7ut5Two9H6CzTKo/YYPeD79cM2yTXF3JzTERBC28y7LR0Waq9D2LHQjI+b/EYUQ==
285 | dependencies:
286 | "@babel/runtime" "^7.20.13"
287 | "@react-pdf/fns" "2.2.1"
288 | bidi-js "^1.0.2"
289 | hyphen "^1.6.4"
290 | unicode-properties "^1.4.1"
291 |
292 | "@react-pdf/types@^2.4.1":
293 | version "2.4.1"
294 | resolved "https://registry.yarnpkg.com/@react-pdf/types/-/types-2.4.1.tgz#5a3b1edd86001d740563deb74852691cbe3126ba"
295 | integrity sha512-w8pk7svhjVj5f7d7kjEGXSk26ffCqRSQcgWR4DwcFltNpSM18ZJmzmM6WrNeeP437y48LlykLnmGDA3oATakgw==
296 |
297 | "@rollup/rollup-android-arm-eabi@4.13.2":
298 | version "4.13.2"
299 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.2.tgz#fbf098f49d96a8cac9056f22f5fd80906ef3af85"
300 | integrity sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g==
301 |
302 | "@rollup/rollup-android-arm64@4.13.2":
303 | version "4.13.2"
304 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.2.tgz#0d2448251040fce19a98eee505dff5b3c8ec9b98"
305 | integrity sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ==
306 |
307 | "@rollup/rollup-darwin-arm64@4.13.2":
308 | version "4.13.2"
309 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.2.tgz#78db4d4da5b1b84c22adbe25c8a4961b3f22d3af"
310 | integrity sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA==
311 |
312 | "@rollup/rollup-darwin-x64@4.13.2":
313 | version "4.13.2"
314 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.2.tgz#fcc05af54379f8ee5c7e954987d4514c6fd0fb42"
315 | integrity sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A==
316 |
317 | "@rollup/rollup-linux-arm-gnueabihf@4.13.2":
318 | version "4.13.2"
319 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.2.tgz#2ce200efa1ef4a56ee2af7b453edc74a259d7d31"
320 | integrity sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ==
321 |
322 | "@rollup/rollup-linux-arm64-gnu@4.13.2":
323 | version "4.13.2"
324 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.2.tgz#5a24aac882bff9abfda3f45f6f1db2166c342a4a"
325 | integrity sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ==
326 |
327 | "@rollup/rollup-linux-arm64-musl@4.13.2":
328 | version "4.13.2"
329 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.2.tgz#f1fb4c6f961d3f3397231a99e621d199200e4ea9"
330 | integrity sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA==
331 |
332 | "@rollup/rollup-linux-powerpc64le-gnu@4.13.2":
333 | version "4.13.2"
334 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.13.2.tgz#46b2463d94ac3af3e0f7a2947b695397bc13b755"
335 | integrity sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==
336 |
337 | "@rollup/rollup-linux-riscv64-gnu@4.13.2":
338 | version "4.13.2"
339 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.2.tgz#47b932ee59a5395a3a341b0493e361d9e6032cf2"
340 | integrity sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==
341 |
342 | "@rollup/rollup-linux-s390x-gnu@4.13.2":
343 | version "4.13.2"
344 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.13.2.tgz#8e14a1b3c3b9a4440c70a9c1ba12d32aa21f9712"
345 | integrity sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==
346 |
347 | "@rollup/rollup-linux-x64-gnu@4.13.2":
348 | version "4.13.2"
349 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.2.tgz#270e939194b66df77bcb33dd9a5ddf7784bd7997"
350 | integrity sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==
351 |
352 | "@rollup/rollup-linux-x64-musl@4.13.2":
353 | version "4.13.2"
354 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.2.tgz#e8dd0f3c2046acbda2934490b36552e856a3bc6a"
355 | integrity sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==
356 |
357 | "@rollup/rollup-win32-arm64-msvc@4.13.2":
358 | version "4.13.2"
359 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.2.tgz#f8b65a4a7e7a6b383e7b14439129b2f474ff123c"
360 | integrity sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==
361 |
362 | "@rollup/rollup-win32-ia32-msvc@4.13.2":
363 | version "4.13.2"
364 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.2.tgz#bc1c5a4fbc4337d6cb15da80a4de95fd53ab3573"
365 | integrity sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==
366 |
367 | "@rollup/rollup-win32-x64-msvc@4.13.2":
368 | version "4.13.2"
369 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.2.tgz#851959c4c1c3c6647aba1f388198c8243aed6917"
370 | integrity sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==
371 |
372 | "@swc/core-darwin-arm64@1.4.11":
373 | version "1.4.11"
374 | resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.11.tgz#91ef40816e10495a4038a98dc6c8dfcc85d9c59b"
375 | integrity sha512-C1j1Qp/IHSelVWdEnT7f0iONWxQz6FAqzjCF2iaL+0vFg4V5f2nlgrueY8vj5pNNzSGhrAlxsMxEIp4dj1MXkg==
376 |
377 | "@swc/core-darwin-x64@1.4.11":
378 | version "1.4.11"
379 | resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.4.11.tgz#6f71e3cd4687ef5df226ba0b8a20adc52fa7dc9e"
380 | integrity sha512-0TTy3Ni8ncgaMCchSQ7FK8ZXQLlamy0FXmGWbR58c+pVZWYZltYPTmheJUvVcR0H2+gPAymRKyfC0iLszDALjg==
381 |
382 | "@swc/core-linux-arm-gnueabihf@1.4.11":
383 | version "1.4.11"
384 | resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.11.tgz#08521822b5510cb506bc49e728f416636ff0306f"
385 | integrity sha512-XJLB71uw0rog4DjYAPxFGAuGCBQpgJDlPZZK6MTmZOvI/1t0+DelJ24IjHIxk500YYM26Yv47xPabqFPD7I2zQ==
386 |
387 | "@swc/core-linux-arm64-gnu@1.4.11":
388 | version "1.4.11"
389 | resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.11.tgz#9485bc591aa573b282d08b168b80a60badb8df9b"
390 | integrity sha512-vYQwzJvm/iu052d5Iw27UFALIN5xSrGkPZXxLNMHPySVko2QMNNBv35HLatkEQHbQ3X+VKSW9J9SkdtAvAVRAQ==
391 |
392 | "@swc/core-linux-arm64-musl@1.4.11":
393 | version "1.4.11"
394 | resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.11.tgz#85eecad7aaab7e94b1ff15ab9d95e80a1e95f356"
395 | integrity sha512-eV+KduiRYUFjPsvbZuJ9aknQH9Tj0U2/G9oIZSzLx/18WsYi+upzHbgxmIIHJ2VJgfd7nN40RI/hMtxNsUzR/g==
396 |
397 | "@swc/core-linux-x64-gnu@1.4.11":
398 | version "1.4.11"
399 | resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.11.tgz#16259de893489b4699045e36bf52b2afe5d10f6d"
400 | integrity sha512-WA1iGXZ2HpqM1OR9VCQZJ8sQ1KP2or9O4bO8vWZo6HZJIeoQSo7aa9waaCLRpkZvkng1ct/TF/l6ymqSNFXIzQ==
401 |
402 | "@swc/core-linux-x64-musl@1.4.11":
403 | version "1.4.11"
404 | resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.11.tgz#0f4e644fc2b62c8c966072389d354337a22b4dde"
405 | integrity sha512-UkVJToKf0owwQYRnGvjHAeYVDfeimCEcx0VQSbJoN7Iy0ckRZi7YPlmWJU31xtKvikE2bQWCOVe0qbSDqqcWXA==
406 |
407 | "@swc/core-win32-arm64-msvc@1.4.11":
408 | version "1.4.11"
409 | resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.11.tgz#d836b79d8730bf83e6b38a5b888e83944d6fb233"
410 | integrity sha512-35khwkyly7lF5NDSyvIrukBMzxPorgc5iTSDfVO/LvnmN5+fm4lTlrDr4tUfTdOhv3Emy7CsKlsNAeFRJ+Pm+w==
411 |
412 | "@swc/core-win32-ia32-msvc@1.4.11":
413 | version "1.4.11"
414 | resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.11.tgz#bc60bbdc65134aaa5b214e2aaf209acfce401d17"
415 | integrity sha512-Wx8/6f0ufgQF2pbVPsJ2dAmFLwIOW+xBE5fxnb7VnEbGkTgP1qMDWiiAtD9rtvDSuODG3i1AEmAak/2HAc6i6A==
416 |
417 | "@swc/core-win32-x64-msvc@1.4.11":
418 | version "1.4.11"
419 | resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.11.tgz#92fd6d4e2d70bbd4fda438f02310d998db8c7b7c"
420 | integrity sha512-0xRFW6K9UZQH2NVC/0pVB0GJXS45lY24f+6XaPBF1YnMHd8A8GoHl7ugyM5yNUTe2AKhSgk5fJV00EJt/XBtdQ==
421 |
422 | "@swc/core@^1.3.107":
423 | version "1.4.11"
424 | resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.4.11.tgz#e91f488df9242584cc6f1b034419f8302aeb0c85"
425 | integrity sha512-WKEakMZxkVwRdgMN4AMJ9K5nysY8g8npgQPczmjBeNK5In7QEAZAJwnyccrWwJZU0XjVeHn2uj+XbOKdDW17rg==
426 | dependencies:
427 | "@swc/counter" "^0.1.2"
428 | "@swc/types" "^0.1.5"
429 | optionalDependencies:
430 | "@swc/core-darwin-arm64" "1.4.11"
431 | "@swc/core-darwin-x64" "1.4.11"
432 | "@swc/core-linux-arm-gnueabihf" "1.4.11"
433 | "@swc/core-linux-arm64-gnu" "1.4.11"
434 | "@swc/core-linux-arm64-musl" "1.4.11"
435 | "@swc/core-linux-x64-gnu" "1.4.11"
436 | "@swc/core-linux-x64-musl" "1.4.11"
437 | "@swc/core-win32-arm64-msvc" "1.4.11"
438 | "@swc/core-win32-ia32-msvc" "1.4.11"
439 | "@swc/core-win32-x64-msvc" "1.4.11"
440 |
441 | "@swc/counter@^0.1.2", "@swc/counter@^0.1.3":
442 | version "0.1.3"
443 | resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9"
444 | integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==
445 |
446 | "@swc/helpers@^0.4.2":
447 | version "0.4.36"
448 | resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.36.tgz#fcfff76ed52c214f357e8e9d3f37b568908072d9"
449 | integrity sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q==
450 | dependencies:
451 | legacy-swc-helpers "npm:@swc/helpers@=0.4.14"
452 | tslib "^2.4.0"
453 |
454 | "@swc/types@^0.1.5":
455 | version "0.1.6"
456 | resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.6.tgz#2f13f748995b247d146de2784d3eb7195410faba"
457 | integrity sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg==
458 | dependencies:
459 | "@swc/counter" "^0.1.3"
460 |
461 | "@types/date-fns@^2.6.0":
462 | version "2.6.0"
463 | resolved "https://registry.yarnpkg.com/@types/date-fns/-/date-fns-2.6.0.tgz#b062ca46562002909be0c63a6467ed173136acc1"
464 | integrity sha512-9DSw2ZRzV0Tmpa6PHHJbMcZn79HHus+BBBohcOaDzkK/G3zMjDUDYjJIWBFLbkh+1+/IOS0A59BpQfdr37hASg==
465 | dependencies:
466 | date-fns "*"
467 |
468 | "@types/estree@1.0.5":
469 | version "1.0.5"
470 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
471 | integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
472 |
473 | "@types/file-saver@^2.0.7":
474 | version "2.0.7"
475 | resolved "https://registry.yarnpkg.com/@types/file-saver/-/file-saver-2.0.7.tgz#8dbb2f24bdc7486c54aa854eb414940bbd056f7d"
476 | integrity sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==
477 |
478 | "@types/node@^20.11.30":
479 | version "20.12.2"
480 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.2.tgz#9facdd11102f38b21b4ebedd9d7999663343d72e"
481 | integrity sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ==
482 | dependencies:
483 | undici-types "~5.26.4"
484 |
485 | "@types/prop-types@*":
486 | version "15.7.12"
487 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6"
488 | integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==
489 |
490 | "@types/rc-slider@^9.3.0":
491 | version "9.3.1"
492 | resolved "https://registry.yarnpkg.com/@types/rc-slider/-/rc-slider-9.3.1.tgz#ed0a11a87fdb3064b2767705c7bd94b62a112725"
493 | integrity sha512-apvhMnpQltIzLIvKfZGeI5uvBK4CoDAnqXlV7rtFRVn4Ecwe5Db32I4LF1sNlhAVevLjLJuE+7Fpi3OnG1mVbg==
494 | dependencies:
495 | rc-slider "*"
496 |
497 | "@types/react-datepicker@^6.2.0":
498 | version "6.2.0"
499 | resolved "https://registry.yarnpkg.com/@types/react-datepicker/-/react-datepicker-6.2.0.tgz#1c93c10d12d1d683eacf46a82e35b953cd0da117"
500 | integrity sha512-+JtO4Fm97WLkJTH8j8/v3Ldh7JCNRwjMYjRaKh4KHH0M3jJoXtwiD3JBCsdlg3tsFIw9eQSqyAPeVDN2H2oM9Q==
501 | dependencies:
502 | "@floating-ui/react" "^0.26.2"
503 | "@types/react" "*"
504 | date-fns "^3.3.1"
505 |
506 | "@types/react-dom@^18.2.23":
507 | version "18.2.23"
508 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.23.tgz#112338760f622a16d64271b408355f2f27f6302c"
509 | integrity sha512-ZQ71wgGOTmDYpnav2knkjr3qXdAFu0vsk8Ci5w3pGAIdj7/kKAyn+VsQDhXsmzzzepAiI9leWMmubXz690AI/A==
510 | dependencies:
511 | "@types/react" "*"
512 |
513 | "@types/react-textarea-autosize@^8.0.0":
514 | version "8.0.0"
515 | resolved "https://registry.yarnpkg.com/@types/react-textarea-autosize/-/react-textarea-autosize-8.0.0.tgz#f68f388552aaa608328b3e352d9a23ad7e0f72e4"
516 | integrity sha512-KVqk+/+RMQB3ZDpk7ZTpYHauU3Ue+Y0f09POvGaEpaGb+izzbpoM47tkDGlbF37iT7JYZ8QFwLzqiOPYbQaztA==
517 | dependencies:
518 | react-textarea-autosize "*"
519 |
520 | "@types/react@*", "@types/react@^18.2.73":
521 | version "18.2.73"
522 | resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.73.tgz#0579548ad122660d99e00499d22e33b81e73ed94"
523 | integrity sha512-XcGdod0Jjv84HOC7N5ziY3x+qL0AfmubvKOZ9hJjJ2yd5EE+KYjWhdOjt387e9HPheHkdggF9atTifMRtyAaRA==
524 | dependencies:
525 | "@types/prop-types" "*"
526 | csstype "^3.0.2"
527 |
528 | "@uidotdev/usehooks@^2.4.1":
529 | version "2.4.1"
530 | resolved "https://registry.yarnpkg.com/@uidotdev/usehooks/-/usehooks-2.4.1.tgz#4b733eaeae09a7be143c6c9ca158b56cc1ea75bf"
531 | integrity sha512-1I+RwWyS+kdv3Mv0Vmc+p0dPYH0DTRAo04HLyXReYBL9AeseDWUJyi4THuksBJcu9F0Pih69Ak150VDnqbVnXg==
532 |
533 | "@vitejs/plugin-react-swc@^3.6.0":
534 | version "3.6.0"
535 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-react-swc/-/plugin-react-swc-3.6.0.tgz#dc9cd1363baf3780f3ad3e0a12a46a3ffe0c7526"
536 | integrity sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g==
537 | dependencies:
538 | "@swc/core" "^1.3.107"
539 |
540 | abs-svg-path@^0.1.1:
541 | version "0.1.1"
542 | resolved "https://registry.yarnpkg.com/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf"
543 | integrity sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==
544 |
545 | anymatch@~3.1.2:
546 | version "3.1.3"
547 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
548 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
549 | dependencies:
550 | normalize-path "^3.0.0"
551 | picomatch "^2.0.4"
552 |
553 | array-union@^1.0.1:
554 | version "1.0.2"
555 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
556 | integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==
557 | dependencies:
558 | array-uniq "^1.0.1"
559 |
560 | array-uniq@^1.0.1:
561 | version "1.0.3"
562 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
563 | integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==
564 |
565 | async@^3.2.4:
566 | version "3.2.5"
567 | resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66"
568 | integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==
569 |
570 | balanced-match@^1.0.0:
571 | version "1.0.2"
572 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
573 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
574 |
575 | base64-js@^1.1.2, base64-js@^1.3.0:
576 | version "1.5.1"
577 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
578 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
579 |
580 | bidi-js@^1.0.2:
581 | version "1.0.3"
582 | resolved "https://registry.yarnpkg.com/bidi-js/-/bidi-js-1.0.3.tgz#6f8bcf3c877c4d9220ddf49b9bb6930c88f877d2"
583 | integrity sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==
584 | dependencies:
585 | require-from-string "^2.0.2"
586 |
587 | binary-extensions@^2.0.0:
588 | version "2.3.0"
589 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
590 | integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
591 |
592 | brace-expansion@^1.1.7:
593 | version "1.1.11"
594 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
595 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
596 | dependencies:
597 | balanced-match "^1.0.0"
598 | concat-map "0.0.1"
599 |
600 | braces@~3.0.2:
601 | version "3.0.2"
602 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
603 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
604 | dependencies:
605 | fill-range "^7.0.1"
606 |
607 | brotli@^1.3.2:
608 | version "1.3.3"
609 | resolved "https://registry.yarnpkg.com/brotli/-/brotli-1.3.3.tgz#7365d8cc00f12cf765d2b2c898716bcf4b604d48"
610 | integrity sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==
611 | dependencies:
612 | base64-js "^1.1.2"
613 |
614 | browserify-zlib@^0.2.0:
615 | version "0.2.0"
616 | resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
617 | integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
618 | dependencies:
619 | pako "~1.0.5"
620 |
621 | "chokidar@>=3.0.0 <4.0.0":
622 | version "3.6.0"
623 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
624 | integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
625 | dependencies:
626 | anymatch "~3.1.2"
627 | braces "~3.0.2"
628 | glob-parent "~5.1.2"
629 | is-binary-path "~2.1.0"
630 | is-glob "~4.0.1"
631 | normalize-path "~3.0.0"
632 | readdirp "~3.6.0"
633 | optionalDependencies:
634 | fsevents "~2.3.2"
635 |
636 | classnames@^2.2.5:
637 | version "2.5.1"
638 | resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b"
639 | integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==
640 |
641 | clone@^2.1.2:
642 | version "2.1.2"
643 | resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
644 | integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==
645 |
646 | clsx@^2.1.0:
647 | version "2.1.0"
648 | resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.0.tgz#e851283bcb5c80ee7608db18487433f7b23f77cb"
649 | integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==
650 |
651 | color-name@^1.0.0:
652 | version "1.1.4"
653 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
654 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
655 |
656 | color-string@^1.9.1:
657 | version "1.9.1"
658 | resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4"
659 | integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==
660 | dependencies:
661 | color-name "^1.0.0"
662 | simple-swizzle "^0.2.2"
663 |
664 | commander@^11.0.0:
665 | version "11.1.0"
666 | resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906"
667 | integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==
668 |
669 | commondir@^1.0.1:
670 | version "1.0.1"
671 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
672 | integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==
673 |
674 | concat-map@0.0.1:
675 | version "0.0.1"
676 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
677 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
678 |
679 | cross-fetch@^3.1.5:
680 | version "3.1.8"
681 | resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82"
682 | integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==
683 | dependencies:
684 | node-fetch "^2.6.12"
685 |
686 | crypto-js@^4.2.0:
687 | version "4.2.0"
688 | resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631"
689 | integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==
690 |
691 | csstype@^3.0.2:
692 | version "3.1.3"
693 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
694 | integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
695 |
696 | date-fns@*, date-fns@^3.3.1, date-fns@^3.6.0:
697 | version "3.6.0"
698 | resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-3.6.0.tgz#f20ca4fe94f8b754951b24240676e8618c0206bf"
699 | integrity sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==
700 |
701 | dfa@^1.2.0:
702 | version "1.2.0"
703 | resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.2.0.tgz#96ac3204e2d29c49ea5b57af8d92c2ae12790657"
704 | integrity sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==
705 |
706 | email-addresses@^5.0.0:
707 | version "5.0.0"
708 | resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-5.0.0.tgz#7ae9e7f58eef7d5e3e2c2c2d3ea49b78dc854fa6"
709 | integrity sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==
710 |
711 | emoji-regex@^10.3.0:
712 | version "10.3.0"
713 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23"
714 | integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==
715 |
716 | esbuild@^0.20.1:
717 | version "0.20.2"
718 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1"
719 | integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==
720 | optionalDependencies:
721 | "@esbuild/aix-ppc64" "0.20.2"
722 | "@esbuild/android-arm" "0.20.2"
723 | "@esbuild/android-arm64" "0.20.2"
724 | "@esbuild/android-x64" "0.20.2"
725 | "@esbuild/darwin-arm64" "0.20.2"
726 | "@esbuild/darwin-x64" "0.20.2"
727 | "@esbuild/freebsd-arm64" "0.20.2"
728 | "@esbuild/freebsd-x64" "0.20.2"
729 | "@esbuild/linux-arm" "0.20.2"
730 | "@esbuild/linux-arm64" "0.20.2"
731 | "@esbuild/linux-ia32" "0.20.2"
732 | "@esbuild/linux-loong64" "0.20.2"
733 | "@esbuild/linux-mips64el" "0.20.2"
734 | "@esbuild/linux-ppc64" "0.20.2"
735 | "@esbuild/linux-riscv64" "0.20.2"
736 | "@esbuild/linux-s390x" "0.20.2"
737 | "@esbuild/linux-x64" "0.20.2"
738 | "@esbuild/netbsd-x64" "0.20.2"
739 | "@esbuild/openbsd-x64" "0.20.2"
740 | "@esbuild/sunos-x64" "0.20.2"
741 | "@esbuild/win32-arm64" "0.20.2"
742 | "@esbuild/win32-ia32" "0.20.2"
743 | "@esbuild/win32-x64" "0.20.2"
744 |
745 | escape-string-regexp@^1.0.2:
746 | version "1.0.5"
747 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
748 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
749 |
750 | events@^3.3.0:
751 | version "3.3.0"
752 | resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
753 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
754 |
755 | fast-deep-equal@^3.1.3:
756 | version "3.1.3"
757 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
758 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
759 |
760 | file-saver@^2.0.5:
761 | version "2.0.5"
762 | resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38"
763 | integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==
764 |
765 | filename-reserved-regex@^2.0.0:
766 | version "2.0.0"
767 | resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229"
768 | integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==
769 |
770 | filenamify@^4.3.0:
771 | version "4.3.0"
772 | resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106"
773 | integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==
774 | dependencies:
775 | filename-reserved-regex "^2.0.0"
776 | strip-outer "^1.0.1"
777 | trim-repeated "^1.0.0"
778 |
779 | fill-range@^7.0.1:
780 | version "7.0.1"
781 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
782 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
783 | dependencies:
784 | to-regex-range "^5.0.1"
785 |
786 | find-cache-dir@^3.3.1:
787 | version "3.3.2"
788 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b"
789 | integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==
790 | dependencies:
791 | commondir "^1.0.1"
792 | make-dir "^3.0.2"
793 | pkg-dir "^4.1.0"
794 |
795 | find-up@^4.0.0:
796 | version "4.1.0"
797 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
798 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
799 | dependencies:
800 | locate-path "^5.0.0"
801 | path-exists "^4.0.0"
802 |
803 | fontkit@^2.0.2:
804 | version "2.0.2"
805 | resolved "https://registry.yarnpkg.com/fontkit/-/fontkit-2.0.2.tgz#ac5384f3ecab8327c6d2ea2e4d384afc544b48fd"
806 | integrity sha512-jc4k5Yr8iov8QfS6u8w2CnHWVmbOGtdBtOXMze5Y+QD966Rx6PEVWXSEGwXlsDlKtu1G12cJjcsybnqhSk/+LA==
807 | dependencies:
808 | "@swc/helpers" "^0.4.2"
809 | brotli "^1.3.2"
810 | clone "^2.1.2"
811 | dfa "^1.2.0"
812 | fast-deep-equal "^3.1.3"
813 | restructure "^3.0.0"
814 | tiny-inflate "^1.0.3"
815 | unicode-properties "^1.4.0"
816 | unicode-trie "^2.0.0"
817 |
818 | fs-extra@^11.1.1:
819 | version "11.2.0"
820 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b"
821 | integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==
822 | dependencies:
823 | graceful-fs "^4.2.0"
824 | jsonfile "^6.0.1"
825 | universalify "^2.0.0"
826 |
827 | fs.realpath@^1.0.0:
828 | version "1.0.0"
829 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
830 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
831 |
832 | fsevents@~2.3.2, fsevents@~2.3.3:
833 | version "2.3.3"
834 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
835 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
836 |
837 | gh-pages@^6.1.1:
838 | version "6.1.1"
839 | resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-6.1.1.tgz#e80af927a081cb480657fde5a0b87ea2e77d6c74"
840 | integrity sha512-upnohfjBwN5hBP9w2dPE7HO5JJTHzSGMV1JrLrHvNuqmjoYHg6TBrCcnEoorjG/e0ejbuvnwyKMdTyM40PEByw==
841 | dependencies:
842 | async "^3.2.4"
843 | commander "^11.0.0"
844 | email-addresses "^5.0.0"
845 | filenamify "^4.3.0"
846 | find-cache-dir "^3.3.1"
847 | fs-extra "^11.1.1"
848 | globby "^6.1.0"
849 |
850 | glob-parent@~5.1.2:
851 | version "5.1.2"
852 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
853 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
854 | dependencies:
855 | is-glob "^4.0.1"
856 |
857 | glob@^7.0.3:
858 | version "7.2.3"
859 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
860 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
861 | dependencies:
862 | fs.realpath "^1.0.0"
863 | inflight "^1.0.4"
864 | inherits "2"
865 | minimatch "^3.1.1"
866 | once "^1.3.0"
867 | path-is-absolute "^1.0.0"
868 |
869 | globby@^6.1.0:
870 | version "6.1.0"
871 | resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
872 | integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==
873 | dependencies:
874 | array-union "^1.0.1"
875 | glob "^7.0.3"
876 | object-assign "^4.0.1"
877 | pify "^2.0.0"
878 | pinkie-promise "^2.0.0"
879 |
880 | graceful-fs@^4.1.6, graceful-fs@^4.2.0:
881 | version "4.2.11"
882 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
883 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
884 |
885 | hsl-to-hex@^1.0.0:
886 | version "1.0.0"
887 | resolved "https://registry.yarnpkg.com/hsl-to-hex/-/hsl-to-hex-1.0.0.tgz#c58c826dc6d2f1e0a5ff1da5a7ecbf03faac1352"
888 | integrity sha512-K6GVpucS5wFf44X0h2bLVRDsycgJmf9FF2elg+CrqD8GcFU8c6vYhgXn8NjUkFCwj+xDFb70qgLbTUm6sxwPmA==
889 | dependencies:
890 | hsl-to-rgb-for-reals "^1.1.0"
891 |
892 | hsl-to-rgb-for-reals@^1.1.0:
893 | version "1.1.1"
894 | resolved "https://registry.yarnpkg.com/hsl-to-rgb-for-reals/-/hsl-to-rgb-for-reals-1.1.1.tgz#e1eb23f6b78016e3722431df68197e6dcdc016d9"
895 | integrity sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg==
896 |
897 | hyphen@^1.6.4:
898 | version "1.10.4"
899 | resolved "https://registry.yarnpkg.com/hyphen/-/hyphen-1.10.4.tgz#ae16551b8a56ae7c34ffd4b98777221795e6c912"
900 | integrity sha512-SejXzIpv9gOVdDWXd4suM1fdF1k2dxZGvuTdkOVLoazYfK7O4DykIQbdrvuyG+EaTNlXAGhMndtKrhykgbt0gg==
901 |
902 | immutable@^4.0.0:
903 | version "4.3.5"
904 | resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0"
905 | integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==
906 |
907 | inflight@^1.0.4:
908 | version "1.0.6"
909 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
910 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
911 | dependencies:
912 | once "^1.3.0"
913 | wrappy "1"
914 |
915 | inherits@2, inherits@^2.0.3, inherits@~2.0.3:
916 | version "2.0.4"
917 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
918 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
919 |
920 | is-arrayish@^0.3.1:
921 | version "0.3.2"
922 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
923 | integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
924 |
925 | is-binary-path@~2.1.0:
926 | version "2.1.0"
927 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
928 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
929 | dependencies:
930 | binary-extensions "^2.0.0"
931 |
932 | is-extglob@^2.1.1:
933 | version "2.1.1"
934 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
935 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
936 |
937 | is-glob@^4.0.1, is-glob@~4.0.1:
938 | version "4.0.3"
939 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
940 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
941 | dependencies:
942 | is-extglob "^2.1.1"
943 |
944 | is-number@^7.0.0:
945 | version "7.0.0"
946 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
947 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
948 |
949 | is-url@^1.2.4:
950 | version "1.2.4"
951 | resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
952 | integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
953 |
954 | jay-peg@^1.0.2:
955 | version "1.0.2"
956 | resolved "https://registry.yarnpkg.com/jay-peg/-/jay-peg-1.0.2.tgz#17a54d386e472f5f313f3d6e88770b170ea569f4"
957 | integrity sha512-fyV3NVvv6pTys/3BTapBUGAWAuU9rM2gRcgijZHzptd5KKL+s+S7hESFN+wOsbDH1MzFwdlRAXi0aGxS6uiMKg==
958 | dependencies:
959 | restructure "^3.0.0"
960 |
961 | "js-tokens@^3.0.0 || ^4.0.0":
962 | version "4.0.0"
963 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
964 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
965 |
966 | jsonfile@^6.0.1:
967 | version "6.1.0"
968 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
969 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
970 | dependencies:
971 | universalify "^2.0.0"
972 | optionalDependencies:
973 | graceful-fs "^4.1.6"
974 |
975 | "legacy-swc-helpers@npm:@swc/helpers@=0.4.14":
976 | version "0.4.14"
977 | resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74"
978 | integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==
979 | dependencies:
980 | tslib "^2.4.0"
981 |
982 | locate-path@^5.0.0:
983 | version "5.0.0"
984 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
985 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
986 | dependencies:
987 | p-locate "^4.1.0"
988 |
989 | loose-envify@^1.1.0, loose-envify@^1.4.0:
990 | version "1.4.0"
991 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
992 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
993 | dependencies:
994 | js-tokens "^3.0.0 || ^4.0.0"
995 |
996 | make-dir@^3.0.2:
997 | version "3.1.0"
998 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
999 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
1000 | dependencies:
1001 | semver "^6.0.0"
1002 |
1003 | media-engine@^1.0.3:
1004 | version "1.0.3"
1005 | resolved "https://registry.yarnpkg.com/media-engine/-/media-engine-1.0.3.tgz#be3188f6cd243ea2a40804a35de5a5b032f58dad"
1006 | integrity sha512-aa5tG6sDoK+k70B9iEX1NeyfT8ObCKhNDs6lJVpwF6r8vhUfuKMslIcirq6HIUYuuUYLefcEQOn9bSBOvawtwg==
1007 |
1008 | minimatch@^3.1.1:
1009 | version "3.1.2"
1010 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
1011 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
1012 | dependencies:
1013 | brace-expansion "^1.1.7"
1014 |
1015 | nanoid@^3.3.7:
1016 | version "3.3.7"
1017 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
1018 | integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
1019 |
1020 | node-fetch@^2.6.12:
1021 | version "2.7.0"
1022 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
1023 | integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==
1024 | dependencies:
1025 | whatwg-url "^5.0.0"
1026 |
1027 | normalize-path@^3.0.0, normalize-path@~3.0.0:
1028 | version "3.0.0"
1029 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
1030 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
1031 |
1032 | normalize-svg-path@^1.1.0:
1033 | version "1.1.0"
1034 | resolved "https://registry.yarnpkg.com/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz#0e614eca23c39f0cffe821d6be6cd17e569a766c"
1035 | integrity sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==
1036 | dependencies:
1037 | svg-arc-to-cubic-bezier "^3.0.0"
1038 |
1039 | object-assign@^4.0.1, object-assign@^4.1.1:
1040 | version "4.1.1"
1041 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1042 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
1043 |
1044 | once@^1.3.0:
1045 | version "1.4.0"
1046 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1047 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
1048 | dependencies:
1049 | wrappy "1"
1050 |
1051 | p-limit@^2.2.0:
1052 | version "2.3.0"
1053 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
1054 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
1055 | dependencies:
1056 | p-try "^2.0.0"
1057 |
1058 | p-locate@^4.1.0:
1059 | version "4.1.0"
1060 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
1061 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
1062 | dependencies:
1063 | p-limit "^2.2.0"
1064 |
1065 | p-try@^2.0.0:
1066 | version "2.2.0"
1067 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
1068 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
1069 |
1070 | pako@^0.2.5:
1071 | version "0.2.9"
1072 | resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
1073 | integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==
1074 |
1075 | pako@~1.0.5:
1076 | version "1.0.11"
1077 | resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
1078 | integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
1079 |
1080 | parse-svg-path@^0.1.2:
1081 | version "0.1.2"
1082 | resolved "https://registry.yarnpkg.com/parse-svg-path/-/parse-svg-path-0.1.2.tgz#7a7ec0d1eb06fa5325c7d3e009b859a09b5d49eb"
1083 | integrity sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==
1084 |
1085 | path-exists@^4.0.0:
1086 | version "4.0.0"
1087 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1088 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1089 |
1090 | path-is-absolute@^1.0.0:
1091 | version "1.0.1"
1092 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1093 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
1094 |
1095 | picocolors@^1.0.0:
1096 | version "1.0.0"
1097 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
1098 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
1099 |
1100 | picomatch@^2.0.4, picomatch@^2.2.1:
1101 | version "2.3.1"
1102 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
1103 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
1104 |
1105 | pify@^2.0.0:
1106 | version "2.3.0"
1107 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
1108 | integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
1109 |
1110 | pinkie-promise@^2.0.0:
1111 | version "2.0.1"
1112 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
1113 | integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==
1114 | dependencies:
1115 | pinkie "^2.0.0"
1116 |
1117 | pinkie@^2.0.0:
1118 | version "2.0.4"
1119 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
1120 | integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==
1121 |
1122 | pkg-dir@^4.1.0:
1123 | version "4.2.0"
1124 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
1125 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
1126 | dependencies:
1127 | find-up "^4.0.0"
1128 |
1129 | postcss-value-parser@^4.1.0:
1130 | version "4.2.0"
1131 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
1132 | integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
1133 |
1134 | postcss@^8.4.38:
1135 | version "8.4.38"
1136 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e"
1137 | integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
1138 | dependencies:
1139 | nanoid "^3.3.7"
1140 | picocolors "^1.0.0"
1141 | source-map-js "^1.2.0"
1142 |
1143 | prettier@^3.2.5:
1144 | version "3.2.5"
1145 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368"
1146 | integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==
1147 |
1148 | prop-types@^15.6.2, prop-types@^15.7.2:
1149 | version "15.8.1"
1150 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
1151 | integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
1152 | dependencies:
1153 | loose-envify "^1.4.0"
1154 | object-assign "^4.1.1"
1155 | react-is "^16.13.1"
1156 |
1157 | queue@^6.0.1:
1158 | version "6.0.2"
1159 | resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65"
1160 | integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==
1161 | dependencies:
1162 | inherits "~2.0.3"
1163 |
1164 | rc-slider@*, rc-slider@10.5.0:
1165 | version "10.5.0"
1166 | resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-10.5.0.tgz#1bd4853d114cb3403b67c485125887adb6a2a117"
1167 | integrity sha512-xiYght50cvoODZYI43v3Ylsqiw14+D7ELsgzR40boDZaya1HFa1Etnv9MDkQE8X/UrXAffwv2AcNAhslgYuDTw==
1168 | dependencies:
1169 | "@babel/runtime" "^7.10.1"
1170 | classnames "^2.2.5"
1171 | rc-util "^5.27.0"
1172 |
1173 | rc-util@^5.27.0:
1174 | version "5.39.1"
1175 | resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.39.1.tgz#7bca4fb55e20add0eef5c23166cd9f9e5f51a8a1"
1176 | integrity sha512-OW/ERynNDgNr4y0oiFmtes3rbEamXw7GHGbkbNd9iRr7kgT03T6fT0b9WpJ3mbxKhyOcAHnGcIoh5u/cjrC2OQ==
1177 | dependencies:
1178 | "@babel/runtime" "^7.18.3"
1179 | react-is "^18.2.0"
1180 |
1181 | react-datepicker@^6.6.0:
1182 | version "6.6.0"
1183 | resolved "https://registry.yarnpkg.com/react-datepicker/-/react-datepicker-6.6.0.tgz#0128547211c8fece08fef0b5406efffff2d36f1f"
1184 | integrity sha512-ERC0/Q4pPC9bNIcGUpdCbHc+oCxhkU3WI3UOGHkyJ3A9fqALCYpEmLc5S5xvAd7DuCDdbsyW97oRPM6pWWwjww==
1185 | dependencies:
1186 | "@floating-ui/react" "^0.26.2"
1187 | clsx "^2.1.0"
1188 | date-fns "^3.3.1"
1189 | prop-types "^15.7.2"
1190 | react-onclickoutside "^6.13.0"
1191 |
1192 | react-dom@^18.2.0:
1193 | version "18.2.0"
1194 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
1195 | integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
1196 | dependencies:
1197 | loose-envify "^1.1.0"
1198 | scheduler "^0.23.0"
1199 |
1200 | react-is@^16.13.1:
1201 | version "16.13.1"
1202 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
1203 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
1204 |
1205 | react-is@^18.2.0:
1206 | version "18.2.0"
1207 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
1208 | integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
1209 |
1210 | react-onclickoutside@^6.13.0:
1211 | version "6.13.0"
1212 | resolved "https://registry.yarnpkg.com/react-onclickoutside/-/react-onclickoutside-6.13.0.tgz#e165ea4e5157f3da94f4376a3ab3e22a565f4ffc"
1213 | integrity sha512-ty8So6tcUpIb+ZE+1HAhbLROvAIJYyJe/1vRrrcmW+jLsaM+/powDRqxzo6hSh9CuRZGSL1Q8mvcF5WRD93a0A==
1214 |
1215 | react-textarea-autosize@*, react-textarea-autosize@^8.5.3:
1216 | version "8.5.3"
1217 | resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz#d1e9fe760178413891484847d3378706052dd409"
1218 | integrity sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==
1219 | dependencies:
1220 | "@babel/runtime" "^7.20.13"
1221 | use-composed-ref "^1.3.0"
1222 | use-latest "^1.2.1"
1223 |
1224 | react@^18.2.0:
1225 | version "18.2.0"
1226 | resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
1227 | integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
1228 | dependencies:
1229 | loose-envify "^1.1.0"
1230 |
1231 | readdirp@~3.6.0:
1232 | version "3.6.0"
1233 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
1234 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
1235 | dependencies:
1236 | picomatch "^2.2.1"
1237 |
1238 | regenerator-runtime@^0.14.0:
1239 | version "0.14.1"
1240 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
1241 | integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
1242 |
1243 | require-from-string@^2.0.2:
1244 | version "2.0.2"
1245 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
1246 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
1247 |
1248 | restructure@^3.0.0:
1249 | version "3.0.1"
1250 | resolved "https://registry.yarnpkg.com/restructure/-/restructure-3.0.1.tgz#d610105f09978a42c806c1fc2048ff56900e6a21"
1251 | integrity sha512-6neDpI/yE9eogQo22qmWwKIA9wFPRyYjQleDEh6zaNAf2ZPqLJYUvNBJBWEWNoBlCeQMQkvIOe2YI/K2GOag+g==
1252 |
1253 | rollup@^4.13.0:
1254 | version "4.13.2"
1255 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.13.2.tgz#ac57d2dc48e8f5562f5a6daadb9caee590069262"
1256 | integrity sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==
1257 | dependencies:
1258 | "@types/estree" "1.0.5"
1259 | optionalDependencies:
1260 | "@rollup/rollup-android-arm-eabi" "4.13.2"
1261 | "@rollup/rollup-android-arm64" "4.13.2"
1262 | "@rollup/rollup-darwin-arm64" "4.13.2"
1263 | "@rollup/rollup-darwin-x64" "4.13.2"
1264 | "@rollup/rollup-linux-arm-gnueabihf" "4.13.2"
1265 | "@rollup/rollup-linux-arm64-gnu" "4.13.2"
1266 | "@rollup/rollup-linux-arm64-musl" "4.13.2"
1267 | "@rollup/rollup-linux-powerpc64le-gnu" "4.13.2"
1268 | "@rollup/rollup-linux-riscv64-gnu" "4.13.2"
1269 | "@rollup/rollup-linux-s390x-gnu" "4.13.2"
1270 | "@rollup/rollup-linux-x64-gnu" "4.13.2"
1271 | "@rollup/rollup-linux-x64-musl" "4.13.2"
1272 | "@rollup/rollup-win32-arm64-msvc" "4.13.2"
1273 | "@rollup/rollup-win32-ia32-msvc" "4.13.2"
1274 | "@rollup/rollup-win32-x64-msvc" "4.13.2"
1275 | fsevents "~2.3.2"
1276 |
1277 | safe-buffer@~5.2.0:
1278 | version "5.2.1"
1279 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
1280 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
1281 |
1282 | sass@^1.72.0:
1283 | version "1.72.0"
1284 | resolved "https://registry.yarnpkg.com/sass/-/sass-1.72.0.tgz#5b9978943fcfb32b25a6a5acb102fc9dabbbf41c"
1285 | integrity sha512-Gpczt3WA56Ly0Mn8Sl21Vj94s1axi9hDIzDFn9Ph9x3C3p4nNyvsqJoQyVXKou6cBlfFWEgRW4rT8Tb4i3XnVA==
1286 | dependencies:
1287 | chokidar ">=3.0.0 <4.0.0"
1288 | immutable "^4.0.0"
1289 | source-map-js ">=0.6.2 <2.0.0"
1290 |
1291 | scheduler@^0.17.0:
1292 | version "0.17.0"
1293 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.17.0.tgz#7c9c673e4ec781fac853927916d1c426b6f3ddfe"
1294 | integrity sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==
1295 | dependencies:
1296 | loose-envify "^1.1.0"
1297 | object-assign "^4.1.1"
1298 |
1299 | scheduler@^0.23.0:
1300 | version "0.23.0"
1301 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
1302 | integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
1303 | dependencies:
1304 | loose-envify "^1.1.0"
1305 |
1306 | semver@^6.0.0:
1307 | version "6.3.1"
1308 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
1309 | integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
1310 |
1311 | simple-swizzle@^0.2.2:
1312 | version "0.2.2"
1313 | resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
1314 | integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==
1315 | dependencies:
1316 | is-arrayish "^0.3.1"
1317 |
1318 | "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.0:
1319 | version "1.2.0"
1320 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
1321 | integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
1322 |
1323 | string_decoder@^1.1.1:
1324 | version "1.3.0"
1325 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
1326 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
1327 | dependencies:
1328 | safe-buffer "~5.2.0"
1329 |
1330 | strip-outer@^1.0.1:
1331 | version "1.0.1"
1332 | resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631"
1333 | integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==
1334 | dependencies:
1335 | escape-string-regexp "^1.0.2"
1336 |
1337 | svg-arc-to-cubic-bezier@^3.0.0, svg-arc-to-cubic-bezier@^3.2.0:
1338 | version "3.2.0"
1339 | resolved "https://registry.yarnpkg.com/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz#390c450035ae1c4a0104d90650304c3bc814abe6"
1340 | integrity sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==
1341 |
1342 | tabbable@^6.0.0:
1343 | version "6.2.0"
1344 | resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
1345 | integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
1346 |
1347 | tiny-inflate@^1.0.0, tiny-inflate@^1.0.3:
1348 | version "1.0.3"
1349 | resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4"
1350 | integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==
1351 |
1352 | to-regex-range@^5.0.1:
1353 | version "5.0.1"
1354 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
1355 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1356 | dependencies:
1357 | is-number "^7.0.0"
1358 |
1359 | tr46@~0.0.3:
1360 | version "0.0.3"
1361 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
1362 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
1363 |
1364 | trim-repeated@^1.0.0:
1365 | version "1.0.0"
1366 | resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21"
1367 | integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==
1368 | dependencies:
1369 | escape-string-regexp "^1.0.2"
1370 |
1371 | tslib@^2.4.0:
1372 | version "2.6.2"
1373 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
1374 | integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
1375 |
1376 | typescript@^5.4.3:
1377 | version "5.4.3"
1378 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff"
1379 | integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==
1380 |
1381 | undici-types@~5.26.4:
1382 | version "5.26.5"
1383 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
1384 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
1385 |
1386 | unicode-properties@^1.4.0, unicode-properties@^1.4.1:
1387 | version "1.4.1"
1388 | resolved "https://registry.yarnpkg.com/unicode-properties/-/unicode-properties-1.4.1.tgz#96a9cffb7e619a0dc7368c28da27e05fc8f9be5f"
1389 | integrity sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==
1390 | dependencies:
1391 | base64-js "^1.3.0"
1392 | unicode-trie "^2.0.0"
1393 |
1394 | unicode-trie@^2.0.0:
1395 | version "2.0.0"
1396 | resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8"
1397 | integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==
1398 | dependencies:
1399 | pako "^0.2.5"
1400 | tiny-inflate "^1.0.0"
1401 |
1402 | universalify@^2.0.0:
1403 | version "2.0.1"
1404 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
1405 | integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
1406 |
1407 | use-composed-ref@^1.3.0:
1408 | version "1.3.0"
1409 | resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda"
1410 | integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==
1411 |
1412 | use-isomorphic-layout-effect@^1.1.1:
1413 | version "1.1.2"
1414 | resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb"
1415 | integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==
1416 |
1417 | use-latest@^1.2.1:
1418 | version "1.2.1"
1419 | resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2"
1420 | integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==
1421 | dependencies:
1422 | use-isomorphic-layout-effect "^1.1.1"
1423 |
1424 | util-deprecate@^1.0.1:
1425 | version "1.0.2"
1426 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1427 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
1428 |
1429 | vite-compatible-readable-stream@^3.6.1:
1430 | version "3.6.1"
1431 | resolved "https://registry.yarnpkg.com/vite-compatible-readable-stream/-/vite-compatible-readable-stream-3.6.1.tgz#27267aebbdc9893c0ddf65a421279cbb1e31d8cd"
1432 | integrity sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ==
1433 | dependencies:
1434 | inherits "^2.0.3"
1435 | string_decoder "^1.1.1"
1436 | util-deprecate "^1.0.1"
1437 |
1438 | vite@^5.2.7:
1439 | version "5.2.7"
1440 | resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.7.tgz#e1b8a985eb54fcb9467d7f7f009d87485016df6e"
1441 | integrity sha512-k14PWOKLI6pMaSzAuGtT+Cf0YmIx12z9YGon39onaJNy8DLBfBJrzg9FQEmkAM5lpHBZs9wksWAsyF/HkpEwJA==
1442 | dependencies:
1443 | esbuild "^0.20.1"
1444 | postcss "^8.4.38"
1445 | rollup "^4.13.0"
1446 | optionalDependencies:
1447 | fsevents "~2.3.3"
1448 |
1449 | webidl-conversions@^3.0.0:
1450 | version "3.0.1"
1451 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
1452 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
1453 |
1454 | whatwg-url@^5.0.0:
1455 | version "5.0.0"
1456 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
1457 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
1458 | dependencies:
1459 | tr46 "~0.0.3"
1460 | webidl-conversions "^3.0.0"
1461 |
1462 | wrappy@1:
1463 | version "1.0.2"
1464 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1465 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
1466 |
1467 | yoga-layout@^2.0.1:
1468 | version "2.0.1"
1469 | resolved "https://registry.yarnpkg.com/yoga-layout/-/yoga-layout-2.0.1.tgz#4bc686abe2464f977866650ddccc1dbcf9f0d03c"
1470 | integrity sha512-tT/oChyDXelLo2A+UVnlW9GU7CsvFMaEnd9kVFsaiCQonFAXd3xrHhkLYu+suwwosrAEQ746xBU+HvYtm1Zs2Q==
1471 |
1472 | zod@^3.22.4:
1473 | version "3.22.4"
1474 | resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff"
1475 | integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==
1476 |
--------------------------------------------------------------------------------