diff --git a/.gitignore b/.gitignore index a4f08efae..b088b652a 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,8 @@ api/tmp # cloudflare web/**/*.json -web/**/cert.pem \ No newline at end of file +web/**/cert.pem + +tmp/* + +/view/next-project/.env diff --git a/api/docs/docs.go b/api/docs/docs.go index 954772d3f..08fe0926e 100644 --- a/api/docs/docs.go +++ b/api/docs/docs.go @@ -56,26 +56,26 @@ const docTemplate = `{ } }, }, - "/activities/details/{year}": { - "get": { - tags: ["activity"], - "description": "年度で指定されたactivitiesとsponsor,sponsorStyle,userの一覧を取得", - "parameters": [ - { - "name": "year", - "in": "path", - "description": "year", - "required": true, - "type": "integer" - } - ], - "responses": { - "200": { - "description": "年度で指定されたactivitiesとsponsor,sponsorStyle,userの一覧を取得", - } + "/activities/details/{year}": { + "get": { + tags: ["activity"], + "description": "年度で指定されたactivitiesとsponsor,sponsorStyle,userの一覧を取得", + "parameters": [ + { + "name": "year", + "in": "path", + "description": "year", + "required": true, + "type": "integer" } - }, + ], + "responses": { + "200": { + "description": "年度で指定されたactivitiesとsponsor,sponsorStyle,userの一覧を取得", + } + } }, + }, "/activities/{id}": { "get": { tags: ["activity"], @@ -139,6 +139,98 @@ const docTemplate = `{ }, }, }, + "/activity_informations": { + "get": { + tags: ["activity_information"], + "description": "activity_informationの一覧を取得", + "responses": { + "200": { + "description": "activity_informationの一覧の取得", + } + } + }, + "post": { + tags: ["activity_information"], + "description": "activity_informationの作成", + "parameters": [ + { + "in": "body", + "name": "activity_information", + "schema":{ + "$ref": "#/definitions/activity_information" + }, + }, + ], + responses: { + "200": { + "description": "create されたactivity_informationが返ってくる", + } + }, + }, + }, + "/activity_informations/{id}": { + "get": { + tags: ["activity_information"], + "description": "IDで指定されたactivity_informationsの取得", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "id", + "required": true, + "type": "integer" + } + ], + "responses": { + "200": { + "description": "activity_informationの取得", + } + } + }, + "put": { + tags: ["activity_information"], + "description": "activity_informationの更新", + responses: { + "200": { + "description": "更新されたactivity_informationが返ってくる", + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "id", + "required": true, + "type": "integer" + }, + { + "in": "body", + "name": "activity_information", + "schema":{ + "$ref": "#/definitions/activity_information" + }, + }, + ], + }, + "delete": { + tags: ["activity_information"], + "description": "IDを指定してactivity_informationの削除", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "id", + "required": true, + "type": "integer" + } + ], + responses: { + "200": { + "description": "activity_informationの削除完了", + } + }, + }, + }, "/activity_styles": { "get": { tags: ["activity_style"], @@ -731,6 +823,26 @@ const docTemplate = `{ } }, }, + "/expenses/fiscalyear/{year}": { + "get": { + tags: ["expense"], + "description": "年度で指定されたexpensesを取得", + "parameters": [ + { + "name": "year", + "in": "path", + "description": "year", + "required": true, + "type": "integer" + } + ], + "responses": { + "200": { + "description": "yearで指定されたexpensesを取得", + } + } + }, + }, "/fund_informations": { "get": { tags: ["fund_information"], @@ -1647,26 +1759,26 @@ const docTemplate = `{ }, }, }, - "/sponsors/{year}": { - "get": { - tags: ["sponsor"], - "description": "年度で指定されたsponsorを取得", - "parameters": [ - { - "name": "year", - "in": "path", - "description": "year", - "required": true, - "type": "integer" - } - ], - "responses": { - "200": { - "description": "sponsorの取得完了", - } + "/sponsors/periods/{year}": { + "get": { + tags: ["sponsor"], + "description": "年度で指定されたsponsorを取得", + "parameters": [ + { + "name": "year", + "in": "path", + "description": "year", + "required": true, + "type": "integer" } - }, + ], + "responses": { + "200": { + "description": "sponsorの取得完了", + } + } }, + }, "/sponsorstyles": { "get": { tags: ["sponsorstyle"], @@ -2212,7 +2324,6 @@ const docTemplate = `{ "sponsorID":{ "type": "int", "example": 1, - }, "userID":{ "type": "int", @@ -2253,6 +2364,36 @@ const docTemplate = `{ "remark", }, }, + "activity_information":{ + "properties":{ + "activityID":{ + "type": "int", + "example": 1, + + }, + "bucketName":{ + "type": "string", + "example": "なし", + }, + "fileName":{ + "type": "string", + "example": "なし", + }, + "fileType":{ + "type": "string", + "example": "なし", + + }, + "designProgress":{ + "type": "int", + "example": 1, + }, + "fileInformation":{ + "type": "string", + "example": "", + }, + }, + }, "activity_style":{ "properties":{ "activityID":{ diff --git a/api/externals/controller/activity_information_controller.go b/api/externals/controller/activity_information_controller.go new file mode 100644 index 000000000..c91a1d990 --- /dev/null +++ b/api/externals/controller/activity_information_controller.go @@ -0,0 +1,102 @@ +package controller + +import ( + "fmt" + "net/http" + "strconv" + + "github.com/NUTFes/FinanSu/api/internals/domain" + "github.com/NUTFes/FinanSu/api/internals/usecase" + + "github.com/labstack/echo/v4" +) + +type activityInformationController struct { + u usecase.ActivityInformationUseCase +} + +type ActivityInformationController interface { + IndexActivityInformation(echo.Context) error + ShowActivityInformation(echo.Context) error + CreateActivityInformation(echo.Context) error + UpdateActivityInformation(echo.Context) error + DestroyActivityInformation(echo.Context) error +} + +func NewActivityInformationController(u usecase.ActivityInformationUseCase) ActivityInformationController { + return &activityInformationController{u} +} + +// Index +func (a *activityInformationController) IndexActivityInformation(c echo.Context) error { + activityInformations, err := a.u.GetActivityInformation(c.Request().Context()) + if err != nil { + return err + } + return c.JSON(http.StatusOK, activityInformations) +} + +// Show +func (a *activityInformationController) ShowActivityInformation(c echo.Context) error { + id := c.Param("id") + activityInformation, err := a.u.GetActivityInformationByID(c.Request().Context(), id) + if err != nil { + return err + } + return c.JSON(http.StatusOK, activityInformation) +} + +// Create +func (a *activityInformationController) CreateActivityInformation(c echo.Context) error { + activityInformation := new(domain.ActivityInformation) + if err := c.Bind(activityInformation); err != nil { + fmt.Println("err") + return err + } + + latastActivityInformation, err := a.u.CreateActivityInformation(c.Request().Context() , + strconv.Itoa(int(activityInformation.ActivityId)), + activityInformation.BucketName, + activityInformation.FileName, + activityInformation.FileType, + strconv.Itoa(int(activityInformation.DesignProgress)), + activityInformation.FileInformation, + ) + if err != nil { + return err + } + return c.JSON(http.StatusOK, latastActivityInformation) +} + +// Update +func (a *activityInformationController) UpdateActivityInformation(c echo.Context) error { + id := c.Param("id") + activityInformation := new(domain.ActivityInformation) + if err := c.Bind(activityInformation); err != nil { + fmt.Println("err") + return err + } + updatedActivity, err := a.u.UpdateActivityInformation(c.Request().Context(), + id, + strconv.Itoa(int(activityInformation.ActivityId)), + activityInformation.BucketName, + activityInformation.FileName, + activityInformation.FileType, + strconv.Itoa(int(activityInformation.DesignProgress)), + activityInformation.FileInformation) + + if err != nil { + return err + } + return c.JSON(http.StatusOK, updatedActivity) +} + +// Destroy +func (a *activityInformationController) DestroyActivityInformation(c echo.Context) error { + id := c.Param("id") + err := a.u.DestroyActivityInformation(c.Request().Context(), id) + if err != nil { + return err + } + return c.JSON(http.StatusOK, "Destroy ActivityInformations") +} diff --git a/api/externals/controller/expense_controller.go b/api/externals/controller/expense_controller.go index 5fa2e0138..611ba1543 100644 --- a/api/externals/controller/expense_controller.go +++ b/api/externals/controller/expense_controller.go @@ -21,6 +21,7 @@ type ExpenseController interface { IndexExpenseDetails(echo.Context) error ShowExpenseDetail(echo.Context) error IndexExpenseDetailsByPeriod(echo.Context) error + IndexExpenseByPeriod(echo.Context) error } func NewExpenseController(u usecase.ExpenseUseCase) ExpenseController { @@ -119,3 +120,12 @@ func (e *expenseController) IndexExpenseDetailsByPeriod(c echo.Context) error { } return c.JSON(http.StatusOK, expenseDetails) } + +func (e *expenseController) IndexExpenseByPeriod(c echo.Context) error { + year := c.Param("year") + expense, err := e.u.GetExpensesByPeriod(c.Request().Context(), year) + if err != nil { + return err + } + return c.JSON(http.StatusOK, expense) +} diff --git a/api/externals/repository/activity_information_repository.go b/api/externals/repository/activity_information_repository.go new file mode 100644 index 000000000..8829504bd --- /dev/null +++ b/api/externals/repository/activity_information_repository.go @@ -0,0 +1,105 @@ +package repository + +import ( + "context" + "database/sql" + + "github.com/NUTFes/FinanSu/api/drivers/db" + "github.com/NUTFes/FinanSu/api/externals/repository/abstract" +) + +type activityInformationRepository struct { + client db.Client + crud abstract.Crud +} + +type ActivityInformationRepository interface { + All(context.Context) (*sql.Rows, error) + Find(context.Context, string) (*sql.Row, error) + Create(context.Context, string, string, string, string, string, string) error + Update(context.Context, string, string, string, string, string, string, string) error + Destroy(context.Context, string) error + FindLatestRecord(context.Context) (*sql.Row, error) +} + +func NewActivityInformationsRepository(c db.Client, ac abstract.Crud) ActivityInformationRepository { + return &activityInformationRepository{c, ac} +} + +// 全件取得 +func (ar *activityInformationRepository) All(c context.Context) (*sql.Rows, error) { + query := "SELECT * FROM activity_informations" + return ar.crud.Read(c, query) +} + +// 1件取得 +func (ar *activityInformationRepository) Find(c context.Context, id string) (*sql.Row, error) { + query := "SELECT * FROM activity_informations WHERE id =" + id + return ar.crud.ReadByID(c, query) +} + +// 作成 +func (ar *activityInformationRepository) Create( + c context.Context, + activityId string, + bucketName string, + fileName string, + fileType string, + designProgress string, + fileInformation string, + ) error { + + query := ` + INSERT INTO activity_informations + (activity_id, bucket_name, file_name, file_type, design_progress, file_information) + VALUES + (` + activityId + `, "` + bucketName + `", "` + fileName +`", "` + fileType + `", ` + designProgress +`, "` + fileInformation +`")` + + return ar.crud.UpdateDB(c, query) +} + +// 編集 +func (ar *activityInformationRepository) Update( + c context.Context, + id string, + activityId string, + bucketName string, + fileName string, + fileType string, + designProgress string, + fileInformation string, + ) error { + + query := ` + UPDATE activity_informations + SET + activity_id = ` + activityId + + `, bucket_name = "` + bucketName + + `", file_name = "` + fileName + + `", file_type = "` + fileType + + `", design_progress = ` + designProgress + + `, file_information = "` + fileInformation + + `" where id = ` + id + + return ar.crud.UpdateDB(c, query) +} + +// 削除 +func (ar *activityInformationRepository) Destroy(c context.Context, id string) error { + query := "DELETE FROM activity_informations WHERE id = " + id + return ar.crud.UpdateDB(c, query) +} + +// 最新のレコードを取得 +func (ar *activityInformationRepository) FindLatestRecord(c context.Context) (*sql.Row, error) { + query := ` + SELECT + * + FROM + activity_informations + ORDER BY + id + DESC LIMIT 1 + ` + return ar.crud.ReadByID(c, query) +} diff --git a/api/externals/repository/activity_repository.go b/api/externals/repository/activity_repository.go index a201b2755..304208bc8 100644 --- a/api/externals/repository/activity_repository.go +++ b/api/externals/repository/activity_repository.go @@ -23,6 +23,7 @@ type ActivityRepository interface { FindLatestRecord(c context.Context) (*sql.Row, error) FindSponsorStyle(context.Context, string) (*sql.Rows, error) AllDetailsByPeriod(context.Context, string) (*sql.Rows, error) + FindActivityInformation(context.Context, string) (*sql.Rows, error) } func NewActivityRepository(c db.Client, ac abstract.Crud) ActivityRepository { @@ -145,6 +146,12 @@ func (ar *activityRepository) FindSponsorStyle(c context.Context, sponsorStyleID return ar.crud.Read(c, query) } +// 指定したactivity_idのactivityを取得する +func (ar *activityRepository) FindActivityInformation(c context.Context, activityID string) (*sql.Rows, error) { + query := "SELECT * FROM activity_informations WHERE activity_id =" + activityID + return ar.crud.Read(c, query) +} + // 年度別のactivityに紐づくsponserとusersを取得する func (ar *activityRepository) AllDetailsByPeriod(c context.Context, year string) (*sql.Rows, error) { query := ` @@ -174,7 +181,7 @@ func (ar *activityRepository) AllDetailsByPeriod(c context.Context, year string) year_periods.year_id = years.id WHERE years.year = ` + year + - " ORDER BY activities.id;" + " ORDER BY activities.id" return ar.crud.Read(c, query) } diff --git a/api/externals/repository/expense_repository.go b/api/externals/repository/expense_repository.go index 3f79e0c27..ee7213c4c 100644 --- a/api/externals/repository/expense_repository.go +++ b/api/externals/repository/expense_repository.go @@ -24,6 +24,7 @@ type ExpenseRepository interface { AllItemInfo(context.Context, string) (*sql.Rows, error) AllOrderAndReportInfo(context.Context, string) (*sql.Rows, error) AllByPeriod(context.Context, string) (*sql.Rows, error) + OnlyExpensesByPeriod(context.Context, string) (*sql.Rows, error) } func NewExpenseRepository(c db.Client, ac abstract.Crud) ExpenseRepository { @@ -124,3 +125,19 @@ func (er *expenseRepository) AllByPeriod(c context.Context, year string) (*sql.R " ORDER BY expenses.id;" return er.crud.Read(c, query) } + +func (er *expenseRepository) OnlyExpensesByPeriod(c context.Context, year string) (*sql.Rows, error) { + query := ` + SELECT + expenses.* + FROM + expenses + INNER JOIN + years + ON + expenses.yearID = years.id + WHERE + years.year = ` + year + + " ORDER BY expenses.id;" + return er.crud.Read(c, query) +} diff --git a/api/internals/di/di.go b/api/internals/di/di.go index 17ede41ad..fd579d955 100644 --- a/api/internals/di/di.go +++ b/api/internals/di/di.go @@ -25,6 +25,7 @@ func InitializeServer() db.Client { // Repository activityRepository := repository.NewActivityRepository(client, crud) + activityInformationRepository := repository.NewActivityInformationsRepository(client, crud) activityStyleRepository := repository.NewActivityStyleRepository(client, crud) budgetRepository := repository.NewBudgetRepository(client, crud) bureauRepository := repository.NewBureauRepository(client, crud) @@ -46,6 +47,7 @@ func InitializeServer() db.Client { // UseCase activityUseCase := usecase.NewActivityUseCase(activityRepository) + activityInformationUseCase := usecase.NewActivityInformationUseCase(activityInformationRepository) activityStyleUseCase := usecase.NewActivityStyleUseCase(activityStyleRepository) budgetUseCase := usecase.NewBudgetUseCase(budgetRepository) bureauUseCase := usecase.NewBureauUseCase(bureauRepository) @@ -66,6 +68,7 @@ func InitializeServer() db.Client { // Controller activityController := controller.NewActivityController(activityUseCase) + activityInformationController := controller.NewActivityInformationController(activityInformationUseCase) activityStyleController := controller.NewActivityStyleController(activityStyleUseCase) budgetController := controller.NewBudgetController(budgetUseCase) bureauController := controller.NewBureauController(bureauUseCase) @@ -88,6 +91,7 @@ func InitializeServer() db.Client { // router router := router.NewRouter( activityController, + activityInformationController, activityStyleController, budgetController, bureauController, diff --git a/api/internals/domain/activity.go b/api/internals/domain/activity.go index 2fe52062f..b318d6a9b 100644 --- a/api/internals/domain/activity.go +++ b/api/internals/domain/activity.go @@ -19,10 +19,11 @@ type Activity struct { } type ActivityDetail struct { - Activity Activity `json:"sponsorActivity"` - Sponsor Sponsor `json:"sponsor"` - User User `json:"user"` - StyleDetail []StyleDetail `json:"styleDetail"` + Activity Activity `json:"sponsorActivity"` + Sponsor Sponsor `json:"sponsor"` + User User `json:"user"` + ActivityInformation []ActivityInformation `json:"sponsorActivityInformations"` + StyleDetail []StyleDetail `json:"styleDetail"` } type StyleDetail struct { diff --git a/api/internals/domain/activity_information.go b/api/internals/domain/activity_information.go new file mode 100644 index 000000000..6f1a19e11 --- /dev/null +++ b/api/internals/domain/activity_information.go @@ -0,0 +1,17 @@ +package domain + +import ( + "time" +) + +type ActivityInformation struct { + ID int `json:"id"` + ActivityId int `json:"activityID"` + BucketName string `json:"bucketName"` + FileName string `json:"fileName"` + FileType string `json:"fileType"` + DesignProgress int `json:"designProgress"` + FileInformation string `json:"fileInformation"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` +} diff --git a/api/internals/usecase/activity_information_usecase.go b/api/internals/usecase/activity_information_usecase.go new file mode 100644 index 000000000..9649b3b85 --- /dev/null +++ b/api/internals/usecase/activity_information_usecase.go @@ -0,0 +1,148 @@ +package usecase + +import ( + "context" + + rep "github.com/NUTFes/FinanSu/api/externals/repository" + "github.com/NUTFes/FinanSu/api/internals/domain" + "github.com/pkg/errors" +) + +type activityInformationUseCase struct { + rep rep.ActivityInformationRepository +} + +type ActivityInformationUseCase interface { + GetActivityInformation(context.Context) ([]domain.ActivityInformation, error) + GetActivityInformationByID(context.Context, string) (domain.ActivityInformation, error) + CreateActivityInformation(context.Context, string, string, string, string, string, string) (domain.ActivityInformation, error) + UpdateActivityInformation(context.Context, string, string, string, string, string, string, string) (domain.ActivityInformation, error) + DestroyActivityInformation(context.Context, string) error +} + +func NewActivityInformationUseCase(rep rep.ActivityInformationRepository) ActivityInformationUseCase { + return &activityInformationUseCase{rep} +} + +func (a *activityInformationUseCase) GetActivityInformation(c context.Context) ([]domain.ActivityInformation, error) { + + activityInformation := domain.ActivityInformation{} + var activityInformations []domain.ActivityInformation + + // クエリー実行 + rows, err := a.rep.All(c) + if err != nil { + return nil, err + } + defer rows.Close() + + for rows.Next() { + err := rows.Scan( + &activityInformation.ID, + &activityInformation.ActivityId, + &activityInformation.BucketName, + &activityInformation.FileName, + &activityInformation.FileType, + &activityInformation.DesignProgress, + &activityInformation.FileInformation, + &activityInformation.CreatedAt, + &activityInformation.UpdatedAt, + ) + + if err != nil { + return nil, errors.Wrapf(err, "cannot connect SQL") + } + + activityInformations = append(activityInformations, activityInformation) + } + return activityInformations, nil +} + +func (a *activityInformationUseCase) GetActivityInformationByID(c context.Context, id string) (domain.ActivityInformation, error) { + var activityInformation domain.ActivityInformation + + row, err := a.rep.Find(c, id) + err = row.Scan( + &activityInformation.ID, + &activityInformation.ActivityId, + &activityInformation.BucketName, + &activityInformation.FileName, + &activityInformation.FileType, + &activityInformation.DesignProgress, + &activityInformation.FileInformation, + &activityInformation.CreatedAt, + &activityInformation.UpdatedAt, + ) + + if err != nil { + return activityInformation, err + } + + return activityInformation, nil +} + +func (a *activityInformationUseCase) CreateActivityInformation( + c context.Context, + activityId string, + bucketName string, + fileName string, + fileType string, + designProgress string, + fileInformation string) (domain.ActivityInformation, error) { + latastActivityInformation := domain.ActivityInformation{} + + err := a.rep.Create(c, activityId, bucketName, fileName, fileType, designProgress, fileInformation) + row, err := a.rep.FindLatestRecord(c) + err = row.Scan( + &latastActivityInformation.ID, + &latastActivityInformation.ActivityId, + &latastActivityInformation.BucketName, + &latastActivityInformation.FileName, + &latastActivityInformation.FileType, + &latastActivityInformation.DesignProgress, + &latastActivityInformation.FileInformation, + &latastActivityInformation.CreatedAt, + &latastActivityInformation.UpdatedAt, + ) + + if err != nil { + return latastActivityInformation, err + } + return latastActivityInformation, nil +} + +func (a *activityInformationUseCase) UpdateActivityInformation( + c context.Context, + id string, + activityId string, + bucketName string, + fileName string, + fileType string, + designProgress string, + fileInformation string) (domain.ActivityInformation, error) { + updatedActivityInformation := domain.ActivityInformation{} + err := a.rep.Update(c, id, activityId, bucketName, fileName, fileType, designProgress, fileInformation) + row, err := a.rep.Find(c, id) + err = row.Scan( + &updatedActivityInformation.ID, + &updatedActivityInformation.ActivityId, + &updatedActivityInformation.BucketName, + &updatedActivityInformation.FileName, + &updatedActivityInformation.FileType, + &updatedActivityInformation.DesignProgress, + &updatedActivityInformation.FileInformation, + &updatedActivityInformation.CreatedAt, + &updatedActivityInformation.UpdatedAt, + + ) + if err != nil { + return updatedActivityInformation, err + } + return updatedActivityInformation, nil +} + +func (a *activityInformationUseCase) DestroyActivityInformation(c context.Context, id string) error { + err := a.rep.Destroy(c, id) + return err +} + diff --git a/api/internals/usecase/activity_usecase.go b/api/internals/usecase/activity_usecase.go index 05243d731..df0c2b040 100644 --- a/api/internals/usecase/activity_usecase.go +++ b/api/internals/usecase/activity_usecase.go @@ -166,6 +166,9 @@ func (a *activityUseCase) GetActivityDetail(c context.Context) ([]domain.Activit var activities []domain.ActivityDetail styleDetail := domain.StyleDetail{} var styleDetails []domain.StyleDetail + activityInformation := domain.ActivityInformation{} + var activityInformations []domain.ActivityInformation + // クエリー実行 rows, err := a.rep.FindDetail(c) if err != nil { @@ -204,7 +207,29 @@ func (a *activityUseCase) GetActivityDetail(c context.Context) ([]domain.Activit if err != nil { return nil, errors.Wrapf(err, "cannot connect SQL") } - rows, err := a.rep.FindSponsorStyle(c,strconv.Itoa(int(activity.Activity.ID))) + + rows, err := a.rep.FindActivityInformation(c, strconv.Itoa(int(activity.Activity.ID))) + for rows.Next(){ + err := rows.Scan( + &activityInformation.ID, + &activityInformation.ActivityId, + &activityInformation.BucketName, + &activityInformation.FileName, + &activityInformation.FileType, + &activityInformation.DesignProgress, + &activityInformation.FileInformation, + &activityInformation.CreatedAt, + &activityInformation.UpdatedAt, + ) + if err != nil { + return nil, err + } + activityInformations = append(activityInformations, activityInformation) + } + activity.ActivityInformation = activityInformations + activityInformations = nil + + rows, err = a.rep.FindSponsorStyle(c, strconv.Itoa(int(activity.Activity.ID))) for rows.Next(){ err := rows.Scan( &styleDetail.ActivityStyle.ID, @@ -237,6 +262,9 @@ func (a *activityUseCase) GetActivityDetailsByPeriod(c context.Context, year str var activities []domain.ActivityDetail styleDetail := domain.StyleDetail{} var styleDetails []domain.StyleDetail + activityInformation := domain.ActivityInformation{} + var activityInformations []domain.ActivityInformation + // クエリー実行 rows, err := a.rep.AllDetailsByPeriod(c, year) if err != nil { @@ -275,7 +303,29 @@ func (a *activityUseCase) GetActivityDetailsByPeriod(c context.Context, year str if err != nil { return nil, errors.Wrapf(err, "cannot connect SQL") } - rows, err := a.rep.FindSponsorStyle(c,strconv.Itoa(int(activity.Activity.ID))) + + rows, err := a.rep.FindActivityInformation(c, strconv.Itoa(int(activity.Activity.ID))) + for rows.Next(){ + err := rows.Scan( + &activityInformation.ID, + &activityInformation.ActivityId, + &activityInformation.BucketName, + &activityInformation.FileName, + &activityInformation.FileType, + &activityInformation.DesignProgress, + &activityInformation.FileInformation, + &activityInformation.CreatedAt, + &activityInformation.UpdatedAt, + ) + if err != nil { + return nil, err + } + activityInformations = append(activityInformations, activityInformation) + } + activity.ActivityInformation = activityInformations + activityInformations = nil + + rows, err = a.rep.FindSponsorStyle(c,strconv.Itoa(int(activity.Activity.ID))) for rows.Next(){ err := rows.Scan( &styleDetail.ActivityStyle.ID, diff --git a/api/internals/usecase/expense_usecase.go b/api/internals/usecase/expense_usecase.go index cedb75c87..bbfabdeb8 100644 --- a/api/internals/usecase/expense_usecase.go +++ b/api/internals/usecase/expense_usecase.go @@ -23,6 +23,7 @@ type ExpenseUseCase interface { GetExpenseDetails(context.Context) ([]domain.ExpenseDetails, error) GetExpenseDetailByID(context.Context, string) (domain.ExpenseDetails, error) GetExpenseDetailsByPeriod(context.Context, string) ([]domain.ExpenseDetailsByperiod, error) + GetExpensesByPeriod(context.Context, string) ([]domain.Expense, error) } func NewExpenseUseCase(rep rep.ExpenseRepository) ExpenseUseCase { @@ -350,3 +351,30 @@ func (e *expenseUseCase) GetExpenseDetailsByPeriod(c context.Context, year strin } return expenseDetails, nil } + +func (e *expenseUseCase) GetExpensesByPeriod(c context.Context, year string) ([]domain.Expense, error) { + ExpenseByperiod := domain.Expense{} + var expenseByperiods []domain.Expense + rows, err := e.rep.OnlyExpensesByPeriod(c, year) + if err != nil { + return nil, err + } + for rows.Next() { + err := rows.Scan( + &ExpenseByperiod.ID, + &ExpenseByperiod.Name, + &ExpenseByperiod.TotalPrice, + &ExpenseByperiod.YearID, + &ExpenseByperiod.CreatedAt, + &ExpenseByperiod.UpdatedAt, + ) + if err != nil { + return nil, err + } + expenseByperiods = append(expenseByperiods, ExpenseByperiod) + } + if err := rows.Err(); err != nil { + return nil, err + } + return expenseByperiods, nil +} diff --git a/api/router/router.go b/api/router/router.go index b00227c0e..9a999df93 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -7,6 +7,7 @@ import ( type router struct { activityController controller.ActivityController + activityInformationController controller.ActivityInformationController activityStyleController controller.ActivityStyleController budgetController controller.BudgetController bureauController controller.BureauController @@ -32,6 +33,7 @@ type Router interface { func NewRouter( activityController controller.ActivityController, + activityInformationController controller.ActivityInformationController, activitystyleController controller.ActivityStyleController, budgetController controller.BudgetController, bureauController controller.BureauController, @@ -52,6 +54,7 @@ func NewRouter( ) Router { return router{ activityController, + activityInformationController, activitystyleController, budgetController, bureauController, @@ -85,6 +88,13 @@ func (r router) ProvideRouter(e *echo.Echo) { e.GET("/activities/details", r.activityController.IndexActivityDetail) e.GET("/activities/details/:year",r.activityController.IndexActivityDetailsByPeriod) + // activityInformationsのRoute + e.GET("/activity_informations", r.activityInformationController.IndexActivityInformation) + e.GET("/activity_informations/:id", r.activityInformationController.ShowActivityInformation) + e.POST("/activity_informations", r.activityInformationController.CreateActivityInformation) + e.PUT("/activity_informations/:id", r.activityInformationController.UpdateActivityInformation) + e.DELETE("/activity_informations/:id", r.activityInformationController.DestroyActivityInformation) + // activityStyleのRoute e.GET("/activity_styles", r.activityStyleController.IndexActivityStyle) e.GET("/activity_styles/:id", r.activityStyleController.ShowActivityStyle) @@ -126,6 +136,7 @@ func (r router) ProvideRouter(e *echo.Echo) { e.GET("/expenses/details/:year", r.expenseController.IndexExpenseDetailsByPeriod) e.GET("/expenses/:id", r.expenseController.ShowExpense) e.GET("/expenses/:id/details", r.expenseController.ShowExpenseDetail) + e.GET("/expenses/fiscalyear/:year", r.expenseController.IndexExpenseByPeriod) e.POST("/expenses", r.expenseController.CreateExpense) e.PUT("/expenses/:id", r.expenseController.UpdateExpense) e.DELETE("/expenses/:id", r.expenseController.DestroyExpense) @@ -188,7 +199,7 @@ func (r router) ProvideRouter(e *echo.Echo) { e.POST("/sponsors", r.sponsorController.CreateSponsor) e.PUT("/sponsors/:id", r.sponsorController.UpdateSponsor) e.DELETE("/sponsors/:id", r.sponsorController.DestroySponsor) - e.GET("/sponsors/:year", r.sponsorController.IndexSponsorByPeriod) + e.GET("/sponsors/periods/:year", r.sponsorController.IndexSponsorByPeriod) // sponsorstylesのRoute e.GET("/sponsorstyles", r.sponsorStyleController.IndexSponsorStyle) diff --git a/docker-compose.yml b/docker-compose.yml index a74a94277..de984d7d2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,4 @@ -version: '3' +version: "3" services: db: image: mysql:8.0 @@ -11,10 +11,13 @@ services: MYSQL_USER: finansu MYSQL_PASSWORD: password MYSQL_ROOT_PASSWORD: root - TZ: 'Asia/Tokyo' + TZ: "Asia/Tokyo" ports: - "3306:3306" restart: always + networks: + app_net: + ipv4_address: 192.168.176.2 view: build: ./view @@ -26,6 +29,9 @@ services: - "3000:3000" stdin_open: true tty: true + networks: + app_net: + ipv4_address: 192.168.176.3 api: build: @@ -43,4 +49,29 @@ services: depends_on: db: condition: service_started + networks: + app_net: + ipv4_address: 192.168.176.4 + minio: + image: minio/minio:latest + ports: + - "9000:9000" + - "9001:9001" + volumes: + - ./tmp/minio/data:/data + command: "server /data --console-address :9001" + environment: + MINIO_ROOT_USER: user + MINIO_ROOT_PASSWORD: password + networks: + app_net: + ipv4_address: 192.168.176.5 + +networks: + app_net: + driver: bridge + ipam: + driver: default + config: + - subnet: 192.168.176.0/24 diff --git a/mysql/db/activity_informations.sql b/mysql/db/activity_informations.sql new file mode 100644 index 000000000..63d4c21ed --- /dev/null +++ b/mysql/db/activity_informations.sql @@ -0,0 +1,14 @@ +use finansu_db; + +CREATE TABLE activity_informations ( + id int(10) unsigned not null auto_increment, + activity_id int(10), + bucket_name varchar(255), + file_name varchar(255), + file_type varchar(255), + design_progress int(10), + file_information varchar(255), + created_at datetime not null default current_timestamp, + updated_at datetime not null default current_timestamp on update current_timestamp, + PRIMARY KEY (id) +); diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index f9a707bea..000000000 --- a/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "FinanSu", - "lockfileVersion": 2, - "requires": true, - "packages": {} -} diff --git a/view/Dockerfile b/view/Dockerfile index 790b52e59..ab6791fa2 100644 --- a/view/Dockerfile +++ b/view/Dockerfile @@ -5,3 +5,7 @@ WORKDIR /app/next-project COPY ./ /app ENV API_URL='http://localhost:1323' +ENV NEXT_PUBLIC_ENDPOINT='192.168.176.1' +ENV NEXT_PUBLIC_PORT=9000 +ENV NEXT_PUBLIC_BUCKET_NAME='finansu' +ENV NEXT_PUBLIC_MINIO_ENDPONT='http://localhost:9000' diff --git a/view/next-project/package-lock.json b/view/next-project/package-lock.json index 0d9377177..a72c22a1b 100644 --- a/view/next-project/package-lock.json +++ b/view/next-project/package-lock.json @@ -12,11 +12,17 @@ "@emotion/styled": "^11.6.0", "@fontsource/noto-sans-jp": "^4.5.2", "@pdf-lib/fontkit": "^1.1.1", + "@react-pdf/renderer": "^3.4.0", + "@types/formidable": "^3.4.5", "@types/react-select": "^5.0.1", "clsx": "^1.2.1", "date-fns": "^2.30.0", + "file-saver": "^2.0.5", + "formidable": "^3.5.1", "framer-motion": "^5.3.0", + "fs": "^0.0.1-security", "lorem-ipsum": "^2.0.4", + "minio": "^7.1.3", "next": "^13.0.5", "node-fetch": "^3.1.0", "pdf-lib": "^1.17.1", @@ -24,6 +30,7 @@ "react-dom": "^18.0.0", "react-hook-form": "^7.31.1", "react-icons": "^4.3.1", + "react-pdf": "^7.7.1", "react-router-dom": "^6.0.2", "react-select": "^5.7.3", "recoil": "^0.7.6", @@ -31,6 +38,7 @@ "tailwindcss": "^3.1.6" }, "devDependencies": { + "@types/file-saver": "^2.0.7", "@types/node": "^16.11.6", "@types/react": "^18.0.25", "@typescript-eslint/eslint-plugin": "^5.44.0", @@ -1645,6 +1653,46 @@ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "optional": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/@next/env": { "version": "13.4.2", "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.2.tgz", @@ -1879,6 +1927,167 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@react-pdf/fns": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@react-pdf/fns/-/fns-2.2.1.tgz", + "integrity": "sha512-s78aDg0vDYaijU5lLOCsUD+qinQbfOvcNeaoX9AiE7+kZzzCo6B/nX+l48cmt9OosJmvZvE9DWR9cLhrhOi2pA==", + "dependencies": { + "@babel/runtime": "^7.20.13" + } + }, + "node_modules/@react-pdf/font": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@react-pdf/font/-/font-2.4.4.tgz", + "integrity": "sha512-yjK5eSY+LcbxS0m+sOYln8GdgIbUgti4xjwf14kx8OSsOMJQJyHFALHMh2cLcKJR9yZeqVDo1FwCsY6gw1yCkg==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@react-pdf/types": "^2.4.1", + "cross-fetch": "^3.1.5", + "fontkit": "^2.0.2", + "is-url": "^1.2.4" + } + }, + "node_modules/@react-pdf/image": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@react-pdf/image/-/image-2.3.5.tgz", + "integrity": "sha512-YK8oeD4cYTbX2KwdsY5DEDpvsKQoGbf3kwlxAQwYm8wrEol8V/5oCl8H8ZqdZIYQhx2XPp63cocQfMCZGwf+4w==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@react-pdf/png-js": "^2.3.1", + "cross-fetch": "^3.1.5", + "jay-peg": "^1.0.1" + } + }, + "node_modules/@react-pdf/layout": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/@react-pdf/layout/-/layout-3.11.3.tgz", + "integrity": "sha512-SwfIWmZl3yZDgb4Qa9ebjAZTd/FyI5E2curSfra6SuAkrsEF037cmVfxCTgYCkPwpVMv/omOENPI+WjhOKPofA==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@react-pdf/fns": "2.2.1", + "@react-pdf/image": "^2.3.5", + "@react-pdf/pdfkit": "^3.1.7", + "@react-pdf/primitives": "^3.1.1", + "@react-pdf/stylesheet": "^4.2.4", + "@react-pdf/textkit": "^4.4.1", + "@react-pdf/types": "^2.4.1", + "cross-fetch": "^3.1.5", + "emoji-regex": "^10.3.0", + "queue": "^6.0.1", + "yoga-layout": "^2.0.1" + } + }, + "node_modules/@react-pdf/layout/node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" + }, + "node_modules/@react-pdf/pdfkit": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@react-pdf/pdfkit/-/pdfkit-3.1.7.tgz", + "integrity": "sha512-iXMmATqW5Aycpzm8nNsZOHV/DX2lpd8l5VkaTy1HjzHgQ3MHoV45BHwRph53soEqoPo7rUfpjuSi7X3hngPWGA==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@react-pdf/png-js": "^2.3.1", + "browserify-zlib": "^0.2.0", + "crypto-js": "^4.2.0", + "fontkit": "^2.0.2", + "jay-peg": "^1.0.1", + "vite-compatible-readable-stream": "^3.6.1" + } + }, + "node_modules/@react-pdf/png-js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@react-pdf/png-js/-/png-js-2.3.1.tgz", + "integrity": "sha512-pEZ18I4t1vAUS4lmhvXPmXYP4PHeblpWP/pAlMMRkEyP7tdAeHUN7taQl9sf9OPq7YITMY3lWpYpJU6t4CZgZg==", + "dependencies": { + "browserify-zlib": "^0.2.0" + } + }, + "node_modules/@react-pdf/primitives": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@react-pdf/primitives/-/primitives-3.1.1.tgz", + "integrity": "sha512-miwjxLwTnO3IjoqkTVeTI+9CdyDggwekmSLhVCw+a/7FoQc+gF3J2dSKwsHvAcVFM0gvU8mzCeTofgw0zPDq0w==" + }, + "node_modules/@react-pdf/render": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@react-pdf/render/-/render-3.4.3.tgz", + "integrity": "sha512-9LL059vfwrK1gA0uIA4utpQ/pUH9EW/yia4bb7pCoARs8IlupY5UP265jgax15ua0p+MdUwShZzQ9rilu7kGsw==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@react-pdf/fns": "2.2.1", + "@react-pdf/primitives": "^3.1.1", + "@react-pdf/textkit": "^4.4.1", + "@react-pdf/types": "^2.4.1", + "abs-svg-path": "^0.1.1", + "color-string": "^1.9.1", + "normalize-svg-path": "^1.1.0", + "parse-svg-path": "^0.1.2", + "svg-arc-to-cubic-bezier": "^3.2.0" + } + }, + "node_modules/@react-pdf/renderer": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-pdf/renderer/-/renderer-3.4.0.tgz", + "integrity": "sha512-8i/B8xJZ4AwINM/RRBnawBXfNACaehQT/bM19TOTUjHoddYaRKM1g1+qOZx58yfxfr5TFRs4fORxEPU1mGmR1A==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@react-pdf/font": "^2.4.4", + "@react-pdf/layout": "^3.11.3", + "@react-pdf/pdfkit": "^3.1.7", + "@react-pdf/primitives": "^3.1.1", + "@react-pdf/render": "^3.4.3", + "@react-pdf/types": "^2.4.1", + "events": "^3.3.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "queue": "^6.0.1", + "scheduler": "^0.17.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-pdf/renderer/node_modules/scheduler": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz", + "integrity": "sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/@react-pdf/stylesheet": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@react-pdf/stylesheet/-/stylesheet-4.2.4.tgz", + "integrity": "sha512-CgRfDzeMtnV0GL7zSn381NubmgwqKhFKcK1YrWX3azl/KWVh52jjFd3HWi6dvcETNT862mjWz5MnExe4WOBJXA==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@react-pdf/fns": "2.2.1", + "@react-pdf/types": "^2.4.1", + "color-string": "^1.9.1", + "hsl-to-hex": "^1.0.0", + "media-engine": "^1.0.3", + "postcss-value-parser": "^4.1.0" + } + }, + "node_modules/@react-pdf/textkit": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@react-pdf/textkit/-/textkit-4.4.1.tgz", + "integrity": "sha512-Jl9wdTqIvJ5pX+vAGz0EOhP7ut5Two9H6CzTKo/YYPeD79cM2yTXF3JzTERBC28y7LR0Waq9D2LHQjI+b/EYUQ==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@react-pdf/fns": "2.2.1", + "bidi-js": "^1.0.2", + "hyphen": "^1.6.4", + "unicode-properties": "^1.4.1" + } + }, + "node_modules/@react-pdf/types": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@react-pdf/types/-/types-2.4.1.tgz", + "integrity": "sha512-w8pk7svhjVj5f7d7kjEGXSk26ffCqRSQcgWR4DwcFltNpSM18ZJmzmM6WrNeeP437y48LlykLnmGDA3oATakgw==" + }, "node_modules/@remix-run/router": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.1.tgz", @@ -1901,6 +2110,20 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/file-saver": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.7.tgz", + "integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==", + "dev": true + }, + "node_modules/@types/formidable": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-3.4.5.tgz", + "integrity": "sha512-s7YPsNVfnsng5L8sKnG/Gbb2tiwwJTY1conOkJzTMRvJAlLFW1nEua+ADsJQu8N1c0oTHx9+d5nqg10WuT9gHQ==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -1929,8 +2152,7 @@ "node_modules/@types/node": { "version": "16.18.30", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.30.tgz", - "integrity": "sha512-Kmp/wBZk19Dn7uRiol8kF8agnf8m0+TU9qIwyfPmXglVxMlmiIz0VQSMw5oFgwhmD2aKTlfBIO5FtsVj3y7hKQ==", - "dev": true + "integrity": "sha512-Kmp/wBZk19Dn7uRiol8kF8agnf8m0+TU9qIwyfPmXglVxMlmiIz0VQSMw5oFgwhmD2aKTlfBIO5FtsVj3y7hKQ==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -2241,6 +2463,23 @@ "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-0.2.2.tgz", "integrity": "sha512-0j2gZq8HiZ51z4zNnSkF1iSkqlwRDvdH+son3wHdoz+7IUdMN/5Exd4TxMJ+gq2Of1DiXReYLL9qqh2PdQ4wgA==" }, + "node_modules/@zxing/text-encoding": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", + "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", + "optional": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true + }, + "node_modules/abs-svg-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz", + "integrity": "sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==" + }, "node_modules/acorn": { "version": "8.8.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", @@ -2262,6 +2501,18 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -2282,7 +2533,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -2319,6 +2570,25 @@ "node": ">= 8" } }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "optional": true + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -2440,12 +2710,22 @@ "get-intrinsic": "^1.1.3" } }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, "node_modules/ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, "node_modules/autoprefixer": { "version": "10.4.14", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", @@ -2483,7 +2763,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -2528,6 +2807,33 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, "node_modules/big-integer": { "version": "1.6.51", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", @@ -2545,6 +2851,14 @@ "node": ">=8" } }, + "node_modules/block-stream2": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz", + "integrity": "sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==", + "dependencies": { + "readable-stream": "^3.4.0" + } + }, "node_modules/bplist-parser": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", @@ -2577,6 +2891,27 @@ "node": ">=8" } }, + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "dependencies": { + "base64-js": "^1.1.2" + } + }, + "node_modules/browser-or-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-2.1.1.tgz", + "integrity": "sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==" + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dependencies": { + "pako": "~1.0.5" + } + }, "node_modules/browserslist": { "version": "4.21.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", @@ -2605,6 +2940,14 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, "node_modules/bundle-name": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", @@ -2635,7 +2978,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -2679,6 +3021,21 @@ } ] }, + "node_modules/canvas": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", + "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -2732,11 +3089,28 @@ "node": ">= 6" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "optional": true, + "engines": { + "node": ">=10" + } + }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/clsx": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", @@ -2760,8 +3134,25 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "optional": true, + "bin": { + "color-support": "bin.js" + } }, "node_modules/color2k": { "version": "2.0.2", @@ -2786,6 +3177,12 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true + }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -2814,6 +3211,33 @@ "node": ">=10" } }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -2828,6 +3252,11 @@ "node": ">= 8" } }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, "node_modules/css-box-model": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", @@ -2890,7 +3319,7 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, + "devOptional": true, "dependencies": { "ms": "2.1.2" }, @@ -2903,6 +3332,26 @@ } } }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "optional": true, + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/deep-equal": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", @@ -3000,11 +3449,48 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==" + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -3723,6 +4209,14 @@ "node": ">=0.10.0" } }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/execa": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", @@ -3749,13 +4243,12 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -3790,6 +4283,27 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-xml-parser": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.6.tgz", + "integrity": "sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -3832,6 +4346,11 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3843,6 +4362,14 @@ "node": ">=8" } }, + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", @@ -3894,11 +4421,35 @@ "node": ">=10" } }, + "node_modules/fontkit": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.2.tgz", + "integrity": "sha512-jc4k5Yr8iov8QfS6u8w2CnHWVmbOGtdBtOXMze5Y+QD966Rx6PEVWXSEGwXlsDlKtu1G12cJjcsybnqhSk/+LA==", + "dependencies": { + "@swc/helpers": "^0.4.2", + "brotli": "^1.3.2", + "clone": "^2.1.2", + "dfa": "^1.2.0", + "fast-deep-equal": "^3.1.3", + "restructure": "^3.0.0", + "tiny-inflate": "^1.0.3", + "unicode-properties": "^1.4.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/fontkit/node_modules/@swc/helpers": { + "version": "0.4.36", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.36.tgz", + "integrity": "sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q==", + "dependencies": { + "legacy-swc-helpers": "npm:@swc/helpers@=0.4.14", + "tslib": "^2.4.0" + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, "dependencies": { "is-callable": "^1.1.3" } @@ -3914,6 +4465,19 @@ "node": ">=12.20.0" } }, + "node_modules/formidable": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", + "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, "node_modules/fraction.js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", @@ -3994,21 +4558,50 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "node_modules/fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "optional": true, - "os": [ - "darwin" - ], - "engines": { + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, @@ -4044,11 +4637,30 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/get-intrinsic": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -4107,7 +4719,7 @@ "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, + "devOptional": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4188,7 +4800,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -4270,7 +4881,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -4282,7 +4892,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -4293,6 +4902,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "engines": { + "node": ">=8" + } + }, "node_modules/hey-listen": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", @@ -4306,6 +4929,32 @@ "react-is": "^16.7.0" } }, + "node_modules/hsl-to-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-to-hex/-/hsl-to-hex-1.0.0.tgz", + "integrity": "sha512-K6GVpucS5wFf44X0h2bLVRDsycgJmf9FF2elg+CrqD8GcFU8c6vYhgXn8NjUkFCwj+xDFb70qgLbTUm6sxwPmA==", + "dependencies": { + "hsl-to-rgb-for-reals": "^1.1.0" + } + }, + "node_modules/hsl-to-rgb-for-reals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/hsl-to-rgb-for-reals/-/hsl-to-rgb-for-reals-1.1.1.tgz", + "integrity": "sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg==" + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/human-signals": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", @@ -4315,6 +4964,11 @@ "node": ">=14.18.0" } }, + "node_modules/hyphen": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/hyphen/-/hyphen-1.10.4.tgz", + "integrity": "sha512-SejXzIpv9gOVdDWXd4suM1fdF1k2dxZGvuTdkOVLoazYfK7O4DykIQbdrvuyG+EaTNlXAGhMndtKrhykgbt0gg==" + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -4384,11 +5038,18 @@ "loose-envify": "^1.0.0" } }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "engines": { + "node": ">= 10" + } + }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -4462,7 +5123,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -4519,6 +5179,29 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -4684,7 +5367,6 @@ "version": "1.1.10", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -4699,6 +5381,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, "node_modules/is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", @@ -4772,10 +5459,18 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/jay-peg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/jay-peg/-/jay-peg-1.0.1.tgz", + "integrity": "sha512-zBfjkGbuuNXk8JW+rEePpPEbRRjupS8q+5yPak7kjy3e2GvvNwsLle9okEFvfGyZA6HvtSSiYrVd1/jgnYebaQ==", + "dependencies": { + "restructure": "^3.0.0" + } + }, "node_modules/jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", "bin": { "jiti": "bin/jiti.js" } @@ -4824,6 +5519,11 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/json-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-stream/-/json-stream-1.0.0.tgz", + "integrity": "sha512-H/ZGY0nIAg3QcOwE1QN/rK/Fa7gJn7Ii5obwp6zyPO4xiPNwpIMjqy2gwjBEGqzkF/vSWEIBQCBuN19hYiL6Qg==" + }, "node_modules/json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", @@ -4864,6 +5564,15 @@ "language-subtag-registry": "~0.3.2" } }, + "node_modules/legacy-swc-helpers": { + "name": "@swc/helpers", + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -4905,6 +5614,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4946,7 +5660,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, + "devOptional": true, "dependencies": { "yallist": "^4.0.0" }, @@ -4954,11 +5668,72 @@ "node": ">=10" } }, + "node_modules/make-cancellable-promise": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/make-cancellable-promise/-/make-cancellable-promise-1.3.2.tgz", + "integrity": "sha512-GCXh3bq/WuMbS+Ky4JBPW1hYTOU+znU+Q5m9Pu+pI8EoUqIHk9+tviOKC6/qhHh8C4/As3tzJ69IF32kdz85ww==", + "funding": { + "url": "https://github.com/wojtekmaj/make-cancellable-promise?sponsor=1" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "optional": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "optional": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-event-props": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/make-event-props/-/make-event-props-1.6.2.tgz", + "integrity": "sha512-iDwf7mA03WPiR8QxvcVHmVWEPfMY1RZXerDVNCRYW7dUr2ppH3J58Rwb39/WG39yTZdRSxr3x+2v22tvI0VEvA==", + "funding": { + "url": "https://github.com/wojtekmaj/make-event-props?sponsor=1" + } + }, + "node_modules/media-engine": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/media-engine/-/media-engine-1.0.3.tgz", + "integrity": "sha512-aa5tG6sDoK+k70B9iEX1NeyfT8ObCKhNDs6lJVpwF6r8vhUfuKMslIcirq6HIUYuuUYLefcEQOn9bSBOvawtwg==" + }, "node_modules/memoize-one": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" }, + "node_modules/merge-refs": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/merge-refs/-/merge-refs-1.2.2.tgz", + "integrity": "sha512-RwcT7GsQR3KbuLw1rRuodq4Nt547BKEBkliZ0qqsrpyNne9bGTFtsFIsIpx82huWhcl3kOlOlH4H0xkPk/DqVw==", + "funding": { + "url": "https://github.com/wojtekmaj/merge-refs?sponsor=1" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -4985,6 +5760,25 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-fn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", @@ -4997,6 +5791,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "optional": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -5017,11 +5823,81 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minio": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minio/-/minio-7.1.3.tgz", + "integrity": "sha512-xPrLjWkTT5E7H7VnzOjF//xBp9I40jYB4aWhb2xTFopXXfw+Wo82DDWngdUju7Doy3Wk7R8C4LAgwhLHHnf0wA==", + "dependencies": { + "async": "^3.2.4", + "block-stream2": "^2.1.0", + "browser-or-node": "^2.1.1", + "buffer-crc32": "^0.2.13", + "fast-xml-parser": "^4.2.2", + "ipaddr.js": "^2.0.1", + "json-stream": "^1.0.0", + "lodash": "^4.17.21", + "mime-types": "^2.1.35", + "query-string": "^7.1.3", + "through2": "^4.0.2", + "web-encoding": "^1.1.5", + "xml": "^1.0.1", + "xml2js": "^0.5.0" + }, + "engines": { + "node": "^16 || ^18 || >=20" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "devOptional": true }, "node_modules/mz": { "version": "2.7.0", @@ -5033,6 +5909,12 @@ "thenify-all": "^1.0.0" } }, + "node_modules/nan": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", + "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==", + "optional": true + }, "node_modules/nanoid": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", @@ -5179,6 +6061,21 @@ "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", "dev": true }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -5196,6 +6093,14 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-svg-path": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz", + "integrity": "sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==", + "dependencies": { + "svg-arc-to-cubic-bezier": "^3.0.0" + } + }, "node_modules/npm-run-path": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", @@ -5223,6 +6128,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "optional": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -5473,6 +6390,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-svg-path": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz", + "integrity": "sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==" + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -5512,6 +6434,15 @@ "node": ">=8" } }, + "node_modules/path2d-polyfill": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path2d-polyfill/-/path2d-polyfill-2.0.1.tgz", + "integrity": "sha512-ad/3bsalbbWhmBo0D6FZ4RNMwsLsPpL6gnvhuSaU5Vm7b06Kr5ubSltQQ0T7YKsiJQO+g22zJ4dJKNTXIyOXtA==", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/pdf-lib": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/pdf-lib/-/pdf-lib-1.17.1.tgz", @@ -5528,6 +6459,18 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, + "node_modules/pdfjs-dist": { + "version": "3.11.174", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-3.11.174.tgz", + "integrity": "sha512-TdTZPf1trZ8/UFu5Cx/GXB7GZM30LT+wWUNfsi6Bq8ePLnb+woNKtDymI2mxZYBpMbonNFqKmiz684DIfnd8dA==", + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "canvas": "^2.11.2", + "path2d-polyfill": "^2.0.1" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -5730,6 +6673,31 @@ "node": ">=6" } }, + "node_modules/query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "dependencies": { + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dependencies": { + "inherits": "~2.0.3" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -5847,6 +6815,43 @@ "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/react-pdf": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/react-pdf/-/react-pdf-7.7.1.tgz", + "integrity": "sha512-cbbf/PuRtGcPPw+HLhMI1f6NSka8OJgg+j/yPWTe95Owf0fK6gmVY7OXpTxMeh92O3T3K3EzfE0ML0eXPGwR5g==", + "dependencies": { + "clsx": "^2.0.0", + "dequal": "^2.0.3", + "make-cancellable-promise": "^1.3.1", + "make-event-props": "^1.6.0", + "merge-refs": "^1.2.1", + "pdfjs-dist": "3.11.174", + "prop-types": "^15.6.2", + "tiny-invariant": "^1.0.0", + "warning": "^4.0.0" + }, + "funding": { + "url": "https://github.com/wojtekmaj/react-pdf?sponsor=1" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-pdf/node_modules/clsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "engines": { + "node": ">=6" + } + }, "node_modules/react-remove-scroll": { "version": "2.5.6", "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.6.tgz", @@ -5999,6 +7004,19 @@ "pify": "^2.3.0" } }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -6059,6 +7077,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.2", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", @@ -6083,6 +7109,11 @@ "node": ">=4" } }, + "node_modules/restructure": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.1.tgz", + "integrity": "sha512-6neDpI/yE9eogQo22qmWwKIA9wFPRyYjQleDEh6zaNAf2ZPqLJYUvNBJBWEWNoBlCeQMQkvIOe2YI/K2GOag+g==" + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -6096,7 +7127,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, + "devOptional": true, "dependencies": { "glob": "^7.1.3" }, @@ -6233,6 +7264,25 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -6247,6 +7297,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" + }, "node_modules/scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -6259,7 +7314,7 @@ "version": "7.5.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, + "devOptional": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -6270,6 +7325,12 @@ "node": ">=10" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "optional": true + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6309,7 +7370,51 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "devOptional": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "optional": true, + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "node_modules/slash": { "version": "3.0.0", @@ -6336,6 +7441,14 @@ "node": ">=0.10.0" } }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "engines": { + "node": ">=6" + } + }, "node_modules/stop-iteration-iterator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", @@ -6356,6 +7469,42 @@ "node": ">=10.0.0" } }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "optional": true + }, "node_modules/string.prototype.matchall": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", @@ -6424,7 +7573,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6465,6 +7614,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, "node_modules/style-value-types": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/style-value-types/-/style-value-types-5.0.0.tgz", @@ -6572,6 +7726,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg-arc-to-cubic-bezier": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz", + "integrity": "sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==" + }, "node_modules/synckit": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", @@ -6589,19 +7748,19 @@ } }, "node_modules/tailwindcss": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", - "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.5.3", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.12", + "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.18.2", + "jiti": "^1.19.1", "lilconfig": "^2.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", @@ -6613,7 +7772,6 @@ "postcss-load-config": "^4.0.1", "postcss-nested": "^6.0.1", "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0", "resolve": "^1.22.2", "sucrase": "^3.32.0" }, @@ -6670,6 +7828,23 @@ "node": ">=6" } }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "optional": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -6695,6 +7870,19 @@ "node": ">=0.8" } }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" + }, "node_modules/tiny-invariant": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", @@ -6736,6 +7924,11 @@ "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", @@ -6824,6 +8017,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "dependencies": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unicode-trie/node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" + }, "node_modules/untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", @@ -6926,11 +8142,55 @@ } } }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "node_modules/vite-compatible-readable-stream": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/vite-compatible-readable-stream/-/vite-compatible-readable-stream-3.6.1.tgz", + "integrity": "sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/web-encoding": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", + "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", + "dependencies": { + "util": "^0.12.3" + }, + "optionalDependencies": { + "@zxing/text-encoding": "0.9.0" + } + }, "node_modules/web-streams-polyfill": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", @@ -6939,6 +8199,20 @@ "node": ">= 8" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -6989,7 +8263,6 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -7005,6 +8278,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -7019,11 +8301,36 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "node_modules/xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==" + }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "devOptional": true }, "node_modules/yaml": { "version": "1.10.2", @@ -7045,6 +8352,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoga-layout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-2.0.1.tgz", + "integrity": "sha512-tT/oChyDXelLo2A+UVnlW9GU7CsvFMaEnd9kVFsaiCQonFAXd3xrHhkLYu+suwwosrAEQ746xBU+HvYtm1Zs2Q==" + }, "node_modules/zod": { "version": "3.21.4", "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", @@ -8287,6 +9599,34 @@ } } }, + "@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "optional": true, + "requires": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "dependencies": { + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "optional": true, + "requires": { + "whatwg-url": "^5.0.0" + } + } + } + }, "@next/env": { "version": "13.4.2", "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.2.tgz", @@ -8421,6 +9761,168 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.7.tgz", "integrity": "sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==" }, + "@react-pdf/fns": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@react-pdf/fns/-/fns-2.2.1.tgz", + "integrity": "sha512-s78aDg0vDYaijU5lLOCsUD+qinQbfOvcNeaoX9AiE7+kZzzCo6B/nX+l48cmt9OosJmvZvE9DWR9cLhrhOi2pA==", + "requires": { + "@babel/runtime": "^7.20.13" + } + }, + "@react-pdf/font": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@react-pdf/font/-/font-2.4.4.tgz", + "integrity": "sha512-yjK5eSY+LcbxS0m+sOYln8GdgIbUgti4xjwf14kx8OSsOMJQJyHFALHMh2cLcKJR9yZeqVDo1FwCsY6gw1yCkg==", + "requires": { + "@babel/runtime": "^7.20.13", + "@react-pdf/types": "^2.4.1", + "cross-fetch": "^3.1.5", + "fontkit": "^2.0.2", + "is-url": "^1.2.4" + } + }, + "@react-pdf/image": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@react-pdf/image/-/image-2.3.5.tgz", + "integrity": "sha512-YK8oeD4cYTbX2KwdsY5DEDpvsKQoGbf3kwlxAQwYm8wrEol8V/5oCl8H8ZqdZIYQhx2XPp63cocQfMCZGwf+4w==", + "requires": { + "@babel/runtime": "^7.20.13", + "@react-pdf/png-js": "^2.3.1", + "cross-fetch": "^3.1.5", + "jay-peg": "^1.0.1" + } + }, + "@react-pdf/layout": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/@react-pdf/layout/-/layout-3.11.3.tgz", + "integrity": "sha512-SwfIWmZl3yZDgb4Qa9ebjAZTd/FyI5E2curSfra6SuAkrsEF037cmVfxCTgYCkPwpVMv/omOENPI+WjhOKPofA==", + "requires": { + "@babel/runtime": "^7.20.13", + "@react-pdf/fns": "2.2.1", + "@react-pdf/image": "^2.3.5", + "@react-pdf/pdfkit": "^3.1.7", + "@react-pdf/primitives": "^3.1.1", + "@react-pdf/stylesheet": "^4.2.4", + "@react-pdf/textkit": "^4.4.1", + "@react-pdf/types": "^2.4.1", + "cross-fetch": "^3.1.5", + "emoji-regex": "^10.3.0", + "queue": "^6.0.1", + "yoga-layout": "^2.0.1" + }, + "dependencies": { + "emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" + } + } + }, + "@react-pdf/pdfkit": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@react-pdf/pdfkit/-/pdfkit-3.1.7.tgz", + "integrity": "sha512-iXMmATqW5Aycpzm8nNsZOHV/DX2lpd8l5VkaTy1HjzHgQ3MHoV45BHwRph53soEqoPo7rUfpjuSi7X3hngPWGA==", + "requires": { + "@babel/runtime": "^7.20.13", + "@react-pdf/png-js": "^2.3.1", + "browserify-zlib": "^0.2.0", + "crypto-js": "^4.2.0", + "fontkit": "^2.0.2", + "jay-peg": "^1.0.1", + "vite-compatible-readable-stream": "^3.6.1" + } + }, + "@react-pdf/png-js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@react-pdf/png-js/-/png-js-2.3.1.tgz", + "integrity": "sha512-pEZ18I4t1vAUS4lmhvXPmXYP4PHeblpWP/pAlMMRkEyP7tdAeHUN7taQl9sf9OPq7YITMY3lWpYpJU6t4CZgZg==", + "requires": { + "browserify-zlib": "^0.2.0" + } + }, + "@react-pdf/primitives": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@react-pdf/primitives/-/primitives-3.1.1.tgz", + "integrity": "sha512-miwjxLwTnO3IjoqkTVeTI+9CdyDggwekmSLhVCw+a/7FoQc+gF3J2dSKwsHvAcVFM0gvU8mzCeTofgw0zPDq0w==" + }, + "@react-pdf/render": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@react-pdf/render/-/render-3.4.3.tgz", + "integrity": "sha512-9LL059vfwrK1gA0uIA4utpQ/pUH9EW/yia4bb7pCoARs8IlupY5UP265jgax15ua0p+MdUwShZzQ9rilu7kGsw==", + "requires": { + "@babel/runtime": "^7.20.13", + "@react-pdf/fns": "2.2.1", + "@react-pdf/primitives": "^3.1.1", + "@react-pdf/textkit": "^4.4.1", + "@react-pdf/types": "^2.4.1", + "abs-svg-path": "^0.1.1", + "color-string": "^1.9.1", + "normalize-svg-path": "^1.1.0", + "parse-svg-path": "^0.1.2", + "svg-arc-to-cubic-bezier": "^3.2.0" + } + }, + "@react-pdf/renderer": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-pdf/renderer/-/renderer-3.4.0.tgz", + "integrity": "sha512-8i/B8xJZ4AwINM/RRBnawBXfNACaehQT/bM19TOTUjHoddYaRKM1g1+qOZx58yfxfr5TFRs4fORxEPU1mGmR1A==", + "requires": { + "@babel/runtime": "^7.20.13", + "@react-pdf/font": "^2.4.4", + "@react-pdf/layout": "^3.11.3", + "@react-pdf/pdfkit": "^3.1.7", + "@react-pdf/primitives": "^3.1.1", + "@react-pdf/render": "^3.4.3", + "@react-pdf/types": "^2.4.1", + "events": "^3.3.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "queue": "^6.0.1", + "scheduler": "^0.17.0" + }, + "dependencies": { + "scheduler": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz", + "integrity": "sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + } + } + }, + "@react-pdf/stylesheet": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@react-pdf/stylesheet/-/stylesheet-4.2.4.tgz", + "integrity": "sha512-CgRfDzeMtnV0GL7zSn381NubmgwqKhFKcK1YrWX3azl/KWVh52jjFd3HWi6dvcETNT862mjWz5MnExe4WOBJXA==", + "requires": { + "@babel/runtime": "^7.20.13", + "@react-pdf/fns": "2.2.1", + "@react-pdf/types": "^2.4.1", + "color-string": "^1.9.1", + "hsl-to-hex": "^1.0.0", + "media-engine": "^1.0.3", + "postcss-value-parser": "^4.1.0" + } + }, + "@react-pdf/textkit": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@react-pdf/textkit/-/textkit-4.4.1.tgz", + "integrity": "sha512-Jl9wdTqIvJ5pX+vAGz0EOhP7ut5Two9H6CzTKo/YYPeD79cM2yTXF3JzTERBC28y7LR0Waq9D2LHQjI+b/EYUQ==", + "requires": { + "@babel/runtime": "^7.20.13", + "@react-pdf/fns": "2.2.1", + "bidi-js": "^1.0.2", + "hyphen": "^1.6.4", + "unicode-properties": "^1.4.1" + } + }, + "@react-pdf/types": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@react-pdf/types/-/types-2.4.1.tgz", + "integrity": "sha512-w8pk7svhjVj5f7d7kjEGXSk26ffCqRSQcgWR4DwcFltNpSM18ZJmzmM6WrNeeP437y48LlykLnmGDA3oATakgw==" + }, "@remix-run/router": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.1.tgz", @@ -8440,6 +9942,20 @@ "tslib": "^2.4.0" } }, + "@types/file-saver": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.7.tgz", + "integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==", + "dev": true + }, + "@types/formidable": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-3.4.5.tgz", + "integrity": "sha512-s7YPsNVfnsng5L8sKnG/Gbb2tiwwJTY1conOkJzTMRvJAlLFW1nEua+ADsJQu8N1c0oTHx9+d5nqg10WuT9gHQ==", + "requires": { + "@types/node": "*" + } + }, "@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -8468,8 +9984,7 @@ "@types/node": { "version": "16.18.30", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.30.tgz", - "integrity": "sha512-Kmp/wBZk19Dn7uRiol8kF8agnf8m0+TU9qIwyfPmXglVxMlmiIz0VQSMw5oFgwhmD2aKTlfBIO5FtsVj3y7hKQ==", - "dev": true + "integrity": "sha512-Kmp/wBZk19Dn7uRiol8kF8agnf8m0+TU9qIwyfPmXglVxMlmiIz0VQSMw5oFgwhmD2aKTlfBIO5FtsVj3y7hKQ==" }, "@types/parse-json": { "version": "4.0.0", @@ -8678,6 +10193,23 @@ "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-0.2.2.tgz", "integrity": "sha512-0j2gZq8HiZ51z4zNnSkF1iSkqlwRDvdH+son3wHdoz+7IUdMN/5Exd4TxMJ+gq2Of1DiXReYLL9qqh2PdQ4wgA==" }, + "@zxing/text-encoding": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", + "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", + "optional": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true + }, + "abs-svg-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz", + "integrity": "sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==" + }, "acorn": { "version": "8.8.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", @@ -8691,6 +10223,15 @@ "dev": true, "requires": {} }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "optional": true, + "requires": { + "debug": "4" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -8707,7 +10248,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "devOptional": true }, "ansi-styles": { "version": "4.3.0", @@ -8732,6 +10273,22 @@ "picomatch": "^2.0.4" } }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "optional": true + }, + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, "arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -8826,12 +10383,22 @@ "get-intrinsic": "^1.1.3" } }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true }, + "async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, "autoprefixer": { "version": "10.4.14", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", @@ -8849,8 +10416,7 @@ "available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" }, "axe-core": { "version": "4.7.0", @@ -8882,6 +10448,19 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "requires": { + "require-from-string": "^2.0.2" + } + }, "big-integer": { "version": "1.6.51", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", @@ -8893,6 +10472,14 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, + "block-stream2": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz", + "integrity": "sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==", + "requires": { + "readable-stream": "^3.4.0" + } + }, "bplist-parser": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", @@ -8919,6 +10506,27 @@ "fill-range": "^7.0.1" } }, + "brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "requires": { + "base64-js": "^1.1.2" + } + }, + "browser-or-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-2.1.1.tgz", + "integrity": "sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==" + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "~1.0.5" + } + }, "browserslist": { "version": "4.21.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", @@ -8931,6 +10539,11 @@ "update-browserslist-db": "^1.0.10" } }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + }, "bundle-name": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", @@ -8952,7 +10565,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -8973,6 +10585,17 @@ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001487.tgz", "integrity": "sha512-83564Z3yWGqXsh2vaH/mhXfEM0wX+NlBCm1jYHOb97TrTWJEmPTccZgeLTPBUUb0PNVo+oomb7wkimZBIERClA==" }, + "canvas": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", + "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", + "optional": true, + "requires": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -9008,11 +10631,22 @@ } } }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "optional": true + }, "client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" + }, "clsx": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", @@ -9030,8 +10664,22 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "optional": true }, "color2k": { "version": "2.0.2", @@ -9053,6 +10701,12 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true + }, "convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -9078,6 +10732,24 @@ "yaml": "^1.10.0" } }, + "cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "requires": { + "node-fetch": "^2.6.12" + }, + "dependencies": { + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + } + } + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -9089,6 +10761,11 @@ "which": "^2.0.1" } }, + "crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, "css-box-model": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", @@ -9135,11 +10812,25 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, + "devOptional": true, "requires": { "ms": "2.1.2" } }, + "decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" + }, + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "optional": true, + "requires": { + "mimic-response": "^2.0.0" + } + }, "deep-equal": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", @@ -9210,11 +10901,42 @@ "object-keys": "^1.1.1" } }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true + }, + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" + }, + "detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "optional": true + }, "detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" }, + "dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==" + }, "didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -9765,6 +11487,11 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, "execa": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", @@ -9785,13 +11512,12 @@ "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -9822,6 +11548,14 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fast-xml-parser": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.6.tgz", + "integrity": "sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==", + "requires": { + "strnum": "^1.0.5" + } + }, "fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -9848,6 +11582,11 @@ "flat-cache": "^3.0.4" } }, + "file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -9856,6 +11595,11 @@ "to-regex-range": "^5.0.1" } }, + "filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==" + }, "find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", @@ -9895,11 +11639,37 @@ "tslib": "^2.0.3" } }, + "fontkit": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.2.tgz", + "integrity": "sha512-jc4k5Yr8iov8QfS6u8w2CnHWVmbOGtdBtOXMze5Y+QD966Rx6PEVWXSEGwXlsDlKtu1G12cJjcsybnqhSk/+LA==", + "requires": { + "@swc/helpers": "^0.4.2", + "brotli": "^1.3.2", + "clone": "^2.1.2", + "dfa": "^1.2.0", + "fast-deep-equal": "^3.1.3", + "restructure": "^3.0.0", + "tiny-inflate": "^1.0.3", + "unicode-properties": "^1.4.0", + "unicode-trie": "^2.0.0" + }, + "dependencies": { + "@swc/helpers": { + "version": "0.4.36", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.36.tgz", + "integrity": "sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q==", + "requires": { + "legacy-swc-helpers": "npm:@swc/helpers@=0.4.14", + "tslib": "^2.4.0" + } + } + } + }, "for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, "requires": { "is-callable": "^1.1.3" } @@ -9912,6 +11682,16 @@ "fetch-blob": "^3.1.2" } }, + "formidable": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", + "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", + "requires": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0" + } + }, "fraction.js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", @@ -9973,6 +11753,31 @@ } } }, + "fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -10007,11 +11812,27 @@ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "optional": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, "get-intrinsic": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -10049,7 +11870,7 @@ "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, + "devOptional": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -10103,7 +11924,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, "requires": { "get-intrinsic": "^1.1.3" } @@ -10163,18 +11983,27 @@ "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, "requires": { "has-symbols": "^1.0.2" } }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true + }, + "hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" + }, "hey-listen": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", @@ -10188,12 +12017,40 @@ "react-is": "^16.7.0" } }, + "hsl-to-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-to-hex/-/hsl-to-hex-1.0.0.tgz", + "integrity": "sha512-K6GVpucS5wFf44X0h2bLVRDsycgJmf9FF2elg+CrqD8GcFU8c6vYhgXn8NjUkFCwj+xDFb70qgLbTUm6sxwPmA==", + "requires": { + "hsl-to-rgb-for-reals": "^1.1.0" + } + }, + "hsl-to-rgb-for-reals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/hsl-to-rgb-for-reals/-/hsl-to-rgb-for-reals-1.1.1.tgz", + "integrity": "sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg==" + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "optional": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, "human-signals": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "dev": true }, + "hyphen": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/hyphen/-/hyphen-1.10.4.tgz", + "integrity": "sha512-SejXzIpv9gOVdDWXd4suM1fdF1k2dxZGvuTdkOVLoazYfK7O4DykIQbdrvuyG+EaTNlXAGhMndtKrhykgbt0gg==" + }, "ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -10248,11 +12105,15 @@ "loose-envify": "^1.0.0" } }, + "ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==" + }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -10304,8 +12165,7 @@ "is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" }, "is-core-module": { "version": "2.12.0", @@ -10335,6 +12195,20 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "optional": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -10437,7 +12311,6 @@ "version": "1.1.10", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -10446,6 +12319,11 @@ "has-tostringtag": "^1.0.0" } }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, "is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", @@ -10500,10 +12378,18 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "jay-peg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/jay-peg/-/jay-peg-1.0.1.tgz", + "integrity": "sha512-zBfjkGbuuNXk8JW+rEePpPEbRRjupS8q+5yPak7kjy3e2GvvNwsLle9okEFvfGyZA6HvtSSiYrVd1/jgnYebaQ==", + "requires": { + "restructure": "^3.0.0" + } + }, "jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==" + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==" }, "js-sdsl": { "version": "4.4.0", @@ -10542,6 +12428,11 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "json-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-stream/-/json-stream-1.0.0.tgz", + "integrity": "sha512-H/ZGY0nIAg3QcOwE1QN/rK/Fa7gJn7Ii5obwp6zyPO4xiPNwpIMjqy2gwjBEGqzkF/vSWEIBQCBuN19hYiL6Qg==" + }, "json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", @@ -10576,6 +12467,14 @@ "language-subtag-registry": "~0.3.2" } }, + "legacy-swc-helpers": { + "version": "npm:@swc/helpers@0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "requires": { + "tslib": "^2.4.0" + } + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -10605,6 +12504,11 @@ "p-locate": "^5.0.0" } }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -10636,16 +12540,54 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, + "devOptional": true, "requires": { "yallist": "^4.0.0" } }, + "make-cancellable-promise": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/make-cancellable-promise/-/make-cancellable-promise-1.3.2.tgz", + "integrity": "sha512-GCXh3bq/WuMbS+Ky4JBPW1hYTOU+znU+Q5m9Pu+pI8EoUqIHk9+tviOKC6/qhHh8C4/As3tzJ69IF32kdz85ww==" + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "optional": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "optional": true + } + } + }, + "make-event-props": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/make-event-props/-/make-event-props-1.6.2.tgz", + "integrity": "sha512-iDwf7mA03WPiR8QxvcVHmVWEPfMY1RZXerDVNCRYW7dUr2ppH3J58Rwb39/WG39yTZdRSxr3x+2v22tvI0VEvA==" + }, + "media-engine": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/media-engine/-/media-engine-1.0.3.tgz", + "integrity": "sha512-aa5tG6sDoK+k70B9iEX1NeyfT8ObCKhNDs6lJVpwF6r8vhUfuKMslIcirq6HIUYuuUYLefcEQOn9bSBOvawtwg==" + }, "memoize-one": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" }, + "merge-refs": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/merge-refs/-/merge-refs-1.2.2.tgz", + "integrity": "sha512-RwcT7GsQR3KbuLw1rRuodq4Nt547BKEBkliZ0qqsrpyNne9bGTFtsFIsIpx82huWhcl3kOlOlH4H0xkPk/DqVw==", + "requires": {} + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -10666,12 +12608,31 @@ "picomatch": "^2.3.1" } }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, "mimic-fn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "optional": true + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -10686,11 +12647,65 @@ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, + "minio": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minio/-/minio-7.1.3.tgz", + "integrity": "sha512-xPrLjWkTT5E7H7VnzOjF//xBp9I40jYB4aWhb2xTFopXXfw+Wo82DDWngdUju7Doy3Wk7R8C4LAgwhLHHnf0wA==", + "requires": { + "async": "^3.2.4", + "block-stream2": "^2.1.0", + "browser-or-node": "^2.1.1", + "buffer-crc32": "^0.2.13", + "fast-xml-parser": "^4.2.2", + "ipaddr.js": "^2.0.1", + "json-stream": "^1.0.0", + "lodash": "^4.17.21", + "mime-types": "^2.1.35", + "query-string": "^7.1.3", + "through2": "^4.0.2", + "web-encoding": "^1.1.5", + "xml": "^1.0.1", + "xml2js": "^0.5.0" + } + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "optional": true + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "optional": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "devOptional": true }, "mz": { "version": "2.7.0", @@ -10702,6 +12717,12 @@ "thenify-all": "^1.0.0" } }, + "nan": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", + "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==", + "optional": true + }, "nanoid": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", @@ -10775,6 +12796,15 @@ "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", "dev": true }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, + "requires": { + "abbrev": "1" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -10786,6 +12816,14 @@ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true }, + "normalize-svg-path": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz", + "integrity": "sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==", + "requires": { + "svg-arc-to-cubic-bezier": "^3.0.0" + } + }, "npm-run-path": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", @@ -10803,6 +12841,18 @@ } } }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "optional": true, + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -10975,6 +13025,11 @@ "lines-and-columns": "^1.1.6" } }, + "parse-svg-path": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz", + "integrity": "sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==" + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -11002,6 +13057,12 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, + "path2d-polyfill": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path2d-polyfill/-/path2d-polyfill-2.0.1.tgz", + "integrity": "sha512-ad/3bsalbbWhmBo0D6FZ4RNMwsLsPpL6gnvhuSaU5Vm7b06Kr5ubSltQQ0T7YKsiJQO+g22zJ4dJKNTXIyOXtA==", + "optional": true + }, "pdf-lib": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/pdf-lib/-/pdf-lib-1.17.1.tgz", @@ -11020,6 +13081,15 @@ } } }, + "pdfjs-dist": { + "version": "3.11.174", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-3.11.174.tgz", + "integrity": "sha512-TdTZPf1trZ8/UFu5Cx/GXB7GZM30LT+wWUNfsi6Bq8ePLnb+woNKtDymI2mxZYBpMbonNFqKmiz684DIfnd8dA==", + "requires": { + "canvas": "^2.11.2", + "path2d-polyfill": "^2.0.1" + } + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -11146,6 +13216,25 @@ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true }, + "query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "requires": { + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, + "queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "requires": { + "inherits": "~2.0.3" + } + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -11216,6 +13305,29 @@ "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-1.1.0.tgz", "integrity": "sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==" }, + "react-pdf": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/react-pdf/-/react-pdf-7.7.1.tgz", + "integrity": "sha512-cbbf/PuRtGcPPw+HLhMI1f6NSka8OJgg+j/yPWTe95Owf0fK6gmVY7OXpTxMeh92O3T3K3EzfE0ML0eXPGwR5g==", + "requires": { + "clsx": "^2.0.0", + "dequal": "^2.0.3", + "make-cancellable-promise": "^1.3.1", + "make-event-props": "^1.6.0", + "merge-refs": "^1.2.1", + "pdfjs-dist": "3.11.174", + "prop-types": "^15.6.2", + "tiny-invariant": "^1.0.0", + "warning": "^4.0.0" + }, + "dependencies": { + "clsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==" + } + } + }, "react-remove-scroll": { "version": "2.5.6", "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.6.tgz", @@ -11307,6 +13419,16 @@ "pify": "^2.3.0" } }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -11345,6 +13467,11 @@ "functions-have-names": "^1.2.3" } }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, "resolve": { "version": "1.22.2", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", @@ -11360,6 +13487,11 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, + "restructure": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.1.tgz", + "integrity": "sha512-6neDpI/yE9eogQo22qmWwKIA9wFPRyYjQleDEh6zaNAf2ZPqLJYUvNBJBWEWNoBlCeQMQkvIOe2YI/K2GOag+g==" + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -11369,7 +13501,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, + "devOptional": true, "requires": { "glob": "^7.1.3" } @@ -11452,6 +13584,11 @@ "queue-microtask": "^1.2.2" } }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, "safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -11463,6 +13600,11 @@ "is-regex": "^1.1.4" } }, + "sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" + }, "scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -11475,11 +13617,17 @@ "version": "7.5.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, + "devOptional": true, "requires": { "lru-cache": "^6.0.0" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "optional": true + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -11510,7 +13658,39 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "devOptional": true + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "optional": true + }, + "simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "optional": true, + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } }, "slash": { "version": "3.0.0", @@ -11528,6 +13708,11 @@ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" }, + "split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" + }, "stop-iteration-iterator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", @@ -11542,6 +13727,38 @@ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" }, + "strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "optional": true + } + } + }, "string.prototype.matchall": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", @@ -11595,7 +13812,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "devOptional": true, "requires": { "ansi-regex": "^5.0.1" } @@ -11618,6 +13835,11 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, "style-value-types": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/style-value-types/-/style-value-types-5.0.0.tgz", @@ -11688,6 +13910,11 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "svg-arc-to-cubic-bezier": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz", + "integrity": "sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==" + }, "synckit": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", @@ -11699,19 +13926,19 @@ } }, "tailwindcss": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", - "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", "requires": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.5.3", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.12", + "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.18.2", + "jiti": "^1.19.1", "lilconfig": "^2.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", @@ -11723,7 +13950,6 @@ "postcss-load-config": "^4.0.1", "postcss-nested": "^6.0.1", "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0", "resolve": "^1.22.2", "sucrase": "^3.32.0" }, @@ -11750,6 +13976,20 @@ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, + "tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "optional": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -11772,6 +14012,19 @@ "thenify": ">= 3.1.0 < 4" } }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "requires": { + "readable-stream": "3" + } + }, + "tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" + }, "tiny-invariant": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", @@ -11801,6 +14054,11 @@ "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", @@ -11867,6 +14125,31 @@ "which-boxed-primitive": "^1.0.2" } }, + "unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "requires": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "requires": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + }, + "dependencies": { + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" + } + } + }, "untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", @@ -11915,16 +14198,69 @@ "tslib": "^2.0.0" } }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "vite-compatible-readable-stream": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/vite-compatible-readable-stream/-/vite-compatible-readable-stream-3.6.1.tgz", + "integrity": "sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "web-encoding": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", + "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", + "requires": { + "@zxing/text-encoding": "0.9.0", + "util": "^0.12.3" + } + }, "web-streams-polyfill": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -11963,7 +14299,6 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -11973,6 +14308,15 @@ "is-typed-array": "^1.1.10" } }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -11984,11 +14328,30 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==" + }, + "xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "devOptional": true }, "yaml": { "version": "1.10.2", @@ -12001,6 +14364,11 @@ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true }, + "yoga-layout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-2.0.1.tgz", + "integrity": "sha512-tT/oChyDXelLo2A+UVnlW9GU7CsvFMaEnd9kVFsaiCQonFAXd3xrHhkLYu+suwwosrAEQ746xBU+HvYtm1Zs2Q==" + }, "zod": { "version": "3.21.4", "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", diff --git a/view/next-project/package.json b/view/next-project/package.json index a913c6dcc..e7fa112de 100644 --- a/view/next-project/package.json +++ b/view/next-project/package.json @@ -18,11 +18,17 @@ "@emotion/styled": "^11.6.0", "@fontsource/noto-sans-jp": "^4.5.2", "@pdf-lib/fontkit": "^1.1.1", + "@types/formidable": "^3.4.5", + "@react-pdf/renderer": "^3.4.0", "@types/react-select": "^5.0.1", "clsx": "^1.2.1", "date-fns": "^2.30.0", + "file-saver": "^2.0.5", + "formidable": "^3.5.1", "framer-motion": "^5.3.0", + "fs": "^0.0.1-security", "lorem-ipsum": "^2.0.4", + "minio": "^7.1.3", "next": "^13.0.5", "node-fetch": "^3.1.0", "pdf-lib": "^1.17.1", @@ -30,6 +36,7 @@ "react-dom": "^18.0.0", "react-hook-form": "^7.31.1", "react-icons": "^4.3.1", + "react-pdf": "^7.7.1", "react-router-dom": "^6.0.2", "react-select": "^5.7.3", "recoil": "^0.7.6", @@ -37,6 +44,7 @@ "tailwindcss": "^3.1.6" }, "devDependencies": { + "@types/file-saver": "^2.0.7", "@types/node": "^16.11.6", "@types/react": "^18.0.25", "@typescript-eslint/eslint-plugin": "^5.44.0", diff --git a/view/next-project/src/components/budgets/DetailModal.tsx b/view/next-project/src/components/budgets/DetailModal.tsx index 0ce488bfb..041ae5cc6 100644 --- a/view/next-project/src/components/budgets/DetailModal.tsx +++ b/view/next-project/src/components/budgets/DetailModal.tsx @@ -1,11 +1,11 @@ -import React, { FC, useMemo } from 'react'; +import React, { FC } from 'react'; import { RiCloseCircleLine } from 'react-icons/ri'; import { Modal } from '@components/common'; import { ExpenseView } from '@type/common'; interface ModalProps { setIsOpen: (isOpen: boolean) => void; - expenseView: ExpenseView; + expenseView: ExpenseView | null; } const DetailModal: FC = (props) => { @@ -13,21 +13,25 @@ const DetailModal: FC = (props) => { props.setIsOpen(false); }; - const discountTotal = useMemo(() => { - return props.expenseView.purchaseDetails - ? props.expenseView.purchaseDetails.reduce((acc, cur) => { + const expenseView = props.expenseView; + + if (!expenseView) { + onClose(); + return <>; + } + + const discountTotal = + expenseView && expenseView.purchaseDetails + ? expenseView.purchaseDetails.reduce((acc, cur) => { return acc + cur.purchaseReport.discount; }, 0) : 0; - }, [props.expenseView.purchaseDetails]); - const additionTotal = useMemo(() => { - return props.expenseView.purchaseDetails - ? props.expenseView.purchaseDetails.reduce((acc, cur) => { - return acc + cur.purchaseReport.addition; - }, 0) - : 0; - }, [props.expenseView.purchaseDetails]); + const additionTotal = expenseView.purchaseDetails + ? expenseView.purchaseDetails.reduce((acc, cur) => { + return acc + cur.purchaseReport.addition; + }, 0) + : 0; return ( @@ -42,11 +46,11 @@ const DetailModal: FC = (props) => {

支出元

-

{props.expenseView.expense.name}

+

{expenseView.expense.name}

合計金額

-

{props.expenseView.expense.totalPrice}

+

{expenseView.expense.totalPrice}

割引合計

@@ -73,8 +77,8 @@ const DetailModal: FC = (props) => { - {props.expenseView.purchaseDetails ? ( - props.expenseView.purchaseDetails.map((purchaseDetail) => + {expenseView.purchaseDetails ? ( + expenseView.purchaseDetails.map((purchaseDetail) => purchaseDetail.purchaseItems.map((purchaseItem) => ( diff --git a/view/next-project/src/components/budgets/ExpenditureAddModal.tsx b/view/next-project/src/components/budgets/ExpenditureAddModal.tsx new file mode 100644 index 000000000..61905be6f --- /dev/null +++ b/view/next-project/src/components/budgets/ExpenditureAddModal.tsx @@ -0,0 +1,80 @@ +import { useRouter } from 'next/router'; +import * as React from 'react'; +import { Dispatch, SetStateAction, useMemo, useState } from 'react'; +import { FC } from 'react'; +import { RiCloseCircleLine } from 'react-icons/ri'; +import { postExpenses } from '@api/budget'; +import { PrimaryButton, Input, Modal, Select } from '@components/common'; +import { Expense, Year } from '@type/common'; + +interface ModalProps { + setShowModal: Dispatch>; + years: Year[]; +} + +const ExpenseAddModal: FC = (props) => { + const closeModal = () => { + props.setShowModal(false); + }; + + const [formData, setFormData] = useState({ + yearID: props.years ? Number(props.years[props.years.length - 1].id) : 1, + name: '', + totalPrice: 0, + }); + + const isEnabled = useMemo(() => { + return formData.name !== '' ? false : true; + }, [formData]); + + const router = useRouter(); + + const handler = + (input: string) => + (e: React.ChangeEvent | React.ChangeEvent) => { + setFormData({ ...formData, [input]: e.target.value }); + }; + + const registExpenses = async (data: Expense) => { + const registExpensesUrl = process.env.CSR_API_URI + '/expenses'; + await postExpenses(registExpensesUrl, data); + }; + + return ( + +
+ +
+
支出元の登録
+
+

年度

+
+ +
+

支出元

+
+ +
+
+
+ { + registExpenses(formData); + router.reload(); + }} + disabled={isEnabled} + > + 登録する + +
+
+ ); +}; + +export default ExpenseAddModal; diff --git a/view/next-project/src/components/budgets/OpenExpenditureAddModalButton.tsx b/view/next-project/src/components/budgets/OpenExpenditureAddModalButton.tsx new file mode 100644 index 000000000..af9ea9174 --- /dev/null +++ b/view/next-project/src/components/budgets/OpenExpenditureAddModalButton.tsx @@ -0,0 +1,29 @@ +import React, { useState } from 'react'; + +import ExpenditureAddModal from './ExpenditureAddModal'; +import { AddButton } from '@components/common'; +import { Year } from '@type/common'; + +interface Props { + children?: React.ReactNode; + years: Year[]; +} + +export const OpenExpenseAddModalButton = (props: Props) => { + const [showModal, setShowModal] = useState(false); + + return ( + <> + { + setShowModal(true); + }} + > + {props.children} + + {showModal && } + + ); +}; + +export default OpenExpenseAddModalButton; diff --git a/view/next-project/src/components/common/Select/Select.tsx b/view/next-project/src/components/common/Select/Select.tsx index f292cf490..f3c8992db 100644 --- a/view/next-project/src/components/common/Select/Select.tsx +++ b/view/next-project/src/components/common/Select/Select.tsx @@ -7,6 +7,7 @@ interface Props { className?: string; placeholder?: string; value?: string | number; + defaultValue?: string | number; onChange?: (e: React.ChangeEvent) => void; children?: React.ReactNode; } @@ -21,6 +22,7 @@ function Select(props: Props): JSX.Element { placeholder={props.placeholder} className={clsx(s.select, className)} value={props.value} + defaultValue={props.defaultValue} onChange={props.onChange} > {props.children} diff --git a/view/next-project/src/components/fund_information/AddModal.tsx b/view/next-project/src/components/fund_information/AddModal.tsx index b295659a6..0759bea3c 100644 --- a/view/next-project/src/components/fund_information/AddModal.tsx +++ b/view/next-project/src/components/fund_information/AddModal.tsx @@ -1,5 +1,5 @@ import { useRouter } from 'next/router'; -import React, { Dispatch, FC, SetStateAction, useState, useMemo } from 'react'; +import React, { Dispatch, FC, SetStateAction, useState, useEffect } from 'react'; import { useRecoilState } from 'recoil'; import { Modal, CloseButton, Input, Select, PrimaryButton } from '../common'; @@ -14,6 +14,7 @@ interface ModalProps { teachers: Teacher[]; departments: Department[]; users: User[]; + currentUser?: User; } const OpenAddModal: FC = (props) => { @@ -28,9 +29,12 @@ const OpenAddModal: FC = (props) => { const dd = String(today.getDate()).padStart(2, '0'); const ymd = `${yyyy}-${mm}-${dd}`; + const [formUser, setFormUser] = useState(props.currentUser); + const loginUserBureau = BUREAUS.find((bureau) => bureau.id === props.currentUser?.bureauID); + const [formData, setFormData] = useState({ - userID: user.id, - teacherID: props.teachers[0].id || 1, + userID: formUser?.id || 0, + teacherID: loginUserBureau?.id || 1, price: 0, remark: '', isFirstCheck: false, @@ -39,17 +43,28 @@ const OpenAddModal: FC = (props) => { }); // 担当者を局でフィルタを適用 - const [bureauId, setBureauId] = useState(1); - const filteredUsers = useMemo(() => { - const res = props.users - .filter((user) => { - return user.bureauID === bureauId; - }) - .filter((user, index, self) => { - return self.findIndex((u) => u.name === user.name) === index; - }); - if (res.length !== 0) setFormData({ ...formData, userID: res[0].id }); - return res; + const [bureauId, setBureauId] = useState(loginUserBureau?.id || 1); + const defaultfilteredUsers = props.users + .filter((user) => { + return user.bureauID === bureauId; + }) + .filter((user, index, self) => { + return self.findIndex((u) => u.name === user.name) === index; + }); + const [filteredUsers, setFilteredUsers] = useState(defaultfilteredUsers); + + useEffect(() => { + if (formUser?.bureauID !== bureauId) { + const filteredUsers = props.users + .filter((user) => { + return user.bureauID === bureauId; + }) + .filter((user, index, self) => { + return self.findIndex((u) => u.name === user.name) === index; + }); + setFilteredUsers(filteredUsers); + if (filteredUsers.length !== 0) setFormData({ ...formData, userID: filteredUsers[0].id }); + } }, [bureauId]); const handler = @@ -104,7 +119,10 @@ const OpenAddModal: FC = (props) => {

担当者の局

- setBureauId(Number(e.target.value))} + > {BUREAUS.map((bureaus) => (

担当者

- {filteredUsers.map((user) => (

購入物品の修正

{/* 購入物品があればステッパで表示、なければないと表示 */} - {formDataList.length > 0 && ( + {formDataList && formDataList.length > 0 ? ( {!isDone && <>{content(formDataList[activeStep - 1])}} + ) : ( +

+ 購入物品が存在しません。項目を削除した上で、再登録してください。 +

)} {isDone ? (
@@ -200,7 +204,7 @@ export default function EditModal(props: ModalProps) {
) : (
- {formDataList.length > 0 && ( + {formDataList && formDataList.length > 0 && ( <> {activeStep > 1 && ( 戻る diff --git a/view/next-project/src/components/purchaseorders/OpenAddModalButton.tsx b/view/next-project/src/components/purchaseorders/OpenAddModalButton.tsx index 3b072c8a1..b0685a6fe 100644 --- a/view/next-project/src/components/purchaseorders/OpenAddModalButton.tsx +++ b/view/next-project/src/components/purchaseorders/OpenAddModalButton.tsx @@ -2,16 +2,17 @@ import React, { useState } from 'react'; import PurchaseItemNumModal from './PurchaseItemNumModal'; import { AddButton } from '@components/common'; -import { Expense } from '@type/common'; +import { Expense, YearPeriod } from '@type/common'; interface Props { children?: React.ReactNode; expenses: Expense[]; + expenseByPeriods: Expense[]; + yearPeriods: YearPeriod[]; } export default function OpenModalButton(props: Props) { const [isOpen, setIsOpen] = useState(false); - return ( <> {props.children} - {isOpen && } + {isOpen && ( + + )} ); } diff --git a/view/next-project/src/components/purchaseorders/PurchaseItemNumModal.tsx b/view/next-project/src/components/purchaseorders/PurchaseItemNumModal.tsx index 46cec8951..121e66739 100644 --- a/view/next-project/src/components/purchaseorders/PurchaseItemNumModal.tsx +++ b/view/next-project/src/components/purchaseorders/PurchaseItemNumModal.tsx @@ -1,15 +1,17 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { useRecoilState } from 'recoil'; import { userAtom } from '@/store/atoms'; -import { post } from '@api/purchaseOrder'; +import { get } from '@api/api_methods'; import { CloseButton, Input, Modal, PrimaryButton, Select } from '@components/common'; import AddModal from '@components/purchaseorders/PurchaseOrderAddModal'; -import { PurchaseItem, PurchaseOrder, Expense } from '@type/common'; +import { PurchaseItem, PurchaseOrder, Expense, YearPeriod } from '@type/common'; export interface PurchaseItemNumModalProps { setIsOpen: React.Dispatch>; expenses: Expense[]; + expenseByPeriods: Expense[]; + yearPeriods: YearPeriod[]; } export default function PurchaseItemNumModal(props: PurchaseItemNumModalProps) { @@ -59,6 +61,23 @@ export default function PurchaseItemNumModal(props: PurchaseItemNumModalProps) { return initFormDataList; }); + const [expenseByPeriods, setExpenseByPeriods] = useState(props.expenseByPeriods); + + const date = new Date(); + const [selectedYear, setSelectedYear] = useState(date.getFullYear()); + const yearPeriods: YearPeriod[] = props.yearPeriods; + + useEffect(() => { + const getExpenseByPeriodsUrl = process.env.CSR_API_URI + '/expenses/fiscalyear/' + selectedYear; + const getExpenseByPeriods = async (url: string) => { + const expenseByPeriodsRes: Expense[] = await get(url); + setExpenseByPeriods(expenseByPeriodsRes); + expenseByPeriodsRes && + setFormData({ ...formData, expenseID: expenseByPeriodsRes[0].id || 1 }); + }; + getExpenseByPeriods(getExpenseByPeriodsUrl); + }, [selectedYear]); + // 購入申請用のhandler const formDataHandler = (input: string) => @@ -73,9 +92,6 @@ export default function PurchaseItemNumModal(props: PurchaseItemNumModalProps) { // 購入申請の登録と登録した購入申請のIDを使って購入物品を更新 const submit = async (data: PurchaseOrder) => { - const addPurchaseOrderUrl = process.env.CSR_API_URI + '/purchaseorders'; - const postRes: PurchaseOrder = await post(addPurchaseOrderUrl, data); - const purchaseOrderId = postRes.id; const initialPurchaseItemList = []; for (let i = 0; i < Number(purchaseItemNum.value); i++) { const initialPurchaseItem: PurchaseItem = { @@ -85,7 +101,7 @@ export default function PurchaseItemNumModal(props: PurchaseItemNumModalProps) { quantity: 0, detail: '', url: '', - purchaseOrderID: purchaseOrderId ? purchaseOrderId : 0, + purchaseOrderID: 0, financeCheck: false, createdAt: '', updatedAt: '', @@ -114,6 +130,22 @@ export default function PurchaseItemNumModal(props: PurchaseItemNumModalProps) { className='w-full' />
+
年度
+
+ +

購入したい局・団体

購入物品数

@@ -145,6 +179,7 @@ export default function PurchaseItemNumModal(props: PurchaseItemNumModalProps) {
{ submit(formData); onOpen(); @@ -162,6 +197,7 @@ export default function PurchaseItemNumModal(props: PurchaseItemNumModalProps) { onClose={onClose} setFormDataList={setFormDataList} formDataList={formDataList} + purchaseOrder={formData} /> )} diff --git a/view/next-project/src/components/purchaseorders/PurchaseOrderAddModal.tsx b/view/next-project/src/components/purchaseorders/PurchaseOrderAddModal.tsx index 3752c209b..fcda8252b 100644 --- a/view/next-project/src/components/purchaseorders/PurchaseOrderAddModal.tsx +++ b/view/next-project/src/components/purchaseorders/PurchaseOrderAddModal.tsx @@ -4,8 +4,8 @@ import React, { useState } from 'react'; import { RiExternalLinkLine, RiFileCopyLine } from 'react-icons/ri'; import { RiArrowDropRightLine } from 'react-icons/ri'; -import { del } from '@api/api_methods'; import { post } from '@api/purchaseItem'; +import { post as postOrder } from '@api/purchaseOrder'; import { PrimaryButton, OutlinePrimaryButton, @@ -15,7 +15,7 @@ import { Stepper, Tooltip, } from '@components/common'; -import { PurchaseItem } from '@type/common'; +import { PurchaseItem, PurchaseOrder } from '@type/common'; interface ModalProps { purchaseItemNum: PurchaseItemNum; @@ -24,6 +24,7 @@ interface ModalProps { onClose: () => void; setFormDataList: (formDataList: PurchaseItem[]) => void; formDataList: PurchaseItem[]; + purchaseOrder: PurchaseOrder; } interface PurchaseItemNum { @@ -46,12 +47,6 @@ export default function AddModal(props: ModalProps) { const [isDone, setIsDone] = useState(false); const router = useRouter(); - const deletePurchaseOrder = async () => { - const deletePurchaseOrderUrl = - process.env.CSR_API_URI + '/purchaseorders/' + props.formDataList[0].purchaseOrderID; - await del(deletePurchaseOrderUrl); - }; - const handler = (stepNumber: number, input: string) => (e: React.ChangeEvent | React.ChangeEvent) => { @@ -62,15 +57,24 @@ export default function AddModal(props: ModalProps) { ); }; - const addPurchaseItem = async (data: PurchaseItem[]) => { + const submitOrderAndItems = async ( + purchaseOrder: PurchaseOrder, + purchaseItems: PurchaseItem[], + ) => { + const addPurchaseOrderUrl = process.env.CSR_API_URI + '/purchaseorders'; + const postRes: PurchaseOrder = await postOrder(addPurchaseOrderUrl, purchaseOrder); + const purchaseOrderId = postRes.id || 0; + const purchaseItemsAddOrderInfo = purchaseItems.map((item) => { + return { ...item, purchaseOrderID: purchaseOrderId }; + }); const addPurchaseItemUrl = process.env.CSR_API_URI + '/purchaseitems'; - data.map(async (item) => { + purchaseItemsAddOrderInfo.map(async (item) => { await post(addPurchaseItemUrl, item); }); }; - const submit = async (formDataList: PurchaseItem[]) => { - addPurchaseItem(formDataList); + const submit = async (purchaseOrder: PurchaseOrder, formDataList: PurchaseItem[]) => { + submitOrderAndItems(purchaseOrder, formDataList); props.onClose(); props.numModalOnClose(); router.reload(); @@ -81,44 +85,54 @@ export default function AddModal(props: ModalProps) { <>
-
+
物品名
- +
-
+
単価
- +
-
+
個数
- +
-
+
詳細
- +
-
+
URL
- +
@@ -236,7 +250,6 @@ export default function AddModal(props: ModalProps) {
{ - deletePurchaseOrder(); props.onClose(); props.numModalOnClose(); }} @@ -276,7 +289,7 @@ export default function AddModal(props: ModalProps) { { - submit(props.formDataList); + submit(props.purchaseOrder, props.formDataList); }} > 登録 diff --git a/view/next-project/src/components/purchasereports/PurchaseOrderListModal.tsx b/view/next-project/src/components/purchasereports/PurchaseOrderListModal.tsx index 404084688..3f87f5520 100644 --- a/view/next-project/src/components/purchasereports/PurchaseOrderListModal.tsx +++ b/view/next-project/src/components/purchasereports/PurchaseOrderListModal.tsx @@ -4,9 +4,16 @@ import { useEffect, useState } from 'react'; import PurchaseReportAddModal from './PurchaseReportAddModal'; import { get } from '@api/api_methods'; -import { CloseButton, Modal, OutlinePrimaryButton, PrimaryButton, Radio } from '@components/common'; +import { + CloseButton, + Modal, + OutlinePrimaryButton, + PrimaryButton, + Radio, + Select, +} from '@components/common'; import { useUI } from '@components/ui/context'; -import { PurchaseOrder, User, PurchaseItem, Expense } from '@type/common'; +import { PurchaseOrder, User, PurchaseItem, Expense, YearPeriod } from '@type/common'; interface PurchaseOrderView { purchaseOrder: PurchaseOrder; @@ -29,9 +36,24 @@ export default function PurchaseItemNumModal() { const [purchaseOrderId, setPurchaseOrderId] = useState(); const [purchaseItemNum, setPurchaseItemNum] = useState(0); + const date = new Date(); + const [selectedYear, setSelectedYear] = useState(date.getFullYear()); + const [yearPeriods, setYearPeriods] = useState([]); + useEffect(() => { + const getPurchaseReportsUrl = process.env.CSR_API_URI + '/years/periods'; + const getPeriods = async () => { + const res = await get(getPurchaseReportsUrl); + const year = res ? res[res.length - 1].year : date.getFullYear(); + setSelectedYear(year); + setYearPeriods(res); + }; + getPeriods(); + }, []); + useEffect(() => { if (router.isReady) { - const getPurchaseOrderViewUrl = process.env.CSR_API_URI + '/purchaseorders/details'; + const getPurchaseOrderViewUrl = + process.env.CSR_API_URI + '/purchaseorders/details/' + String(selectedYear); const getExpensesUrl = process.env.CSR_API_URI + '/expenses'; const getPurchaseOrderView = async (url: string) => { @@ -45,7 +67,7 @@ export default function PurchaseItemNumModal() { getPurchaseOrderView(getPurchaseOrderViewUrl); getExpenses(getExpensesUrl); } - }, [router]); + }, [router, selectedYear]); // 日付のフォーマットを変更 const formatDate = (date: string | undefined) => { @@ -76,8 +98,8 @@ export default function PurchaseItemNumModal() { }; return ( - -
+ +
@@ -85,10 +107,31 @@ export default function PurchaseItemNumModal() {
購入申請
-
+
+
+
+

年度

+
+
+ +
+
+
+
-
+
void; isOnlyReported: boolean; + purchaseOrder?: PurchaseOrder; } export default function PurchaseReportAddModal(props: ModalProps) { @@ -73,28 +75,11 @@ export default function PurchaseReportAddModal(props: ModalProps) { financeCheck: false, remark: '', buyer: '', - purchaseOrderID: props.purchaseOrderId, + purchaseOrderID: props.purchaseOrderId || 0, }); + // 購入物品のリスト - const [formDataList, setFormDataList] = useState(() => { - const initFormDataList = []; - for (let i = 0; i < props.purchaseItemNum; i++) { - const initFormData: PurchaseItem = { - id: i + 1, - item: '', - price: 0, - quantity: 0, - detail: '', - url: '', - purchaseOrderID: props.purchaseOrderId, - financeCheck: false, - createdAt: '', - updatedAt: '', - }; - initFormDataList.push(initFormData); - } - return initFormDataList; - }); + const [formDataList, setFormDataList] = useState([]); const [purchaseReportId, setPurchaseReportId] = useState(1); // purchase_orderに紐づくpurchase_itemsを取得 @@ -113,7 +98,7 @@ export default function PurchaseReportAddModal(props: ModalProps) { quantity: purchaseOrderViewRes.purchaseItem[i].quantity, detail: purchaseOrderViewRes.purchaseItem[i].detail, url: purchaseOrderViewRes.purchaseItem[i].url, - purchaseOrderID: props.purchaseOrderId, + purchaseOrderID: props.purchaseOrderId || 0, financeCheck: purchaseOrderViewRes.purchaseItem[i].financeCheck, createdAt: purchaseOrderViewRes.purchaseItem[i].createdAt, updatedAt: purchaseOrderViewRes.purchaseItem[i].updatedAt, @@ -124,9 +109,30 @@ export default function PurchaseReportAddModal(props: ModalProps) { } }, [props.purchaseOrderId, setFormDataList]); + // 購入申請から登録の際に実行 + const createNonePurchaseItems = () => { + const initFormDataList = []; + for (let i = 0; i < props.purchaseItemNum; i++) { + const initFormData: PurchaseItem = { + id: i + 1, + item: '', + price: 0, + quantity: 0, + detail: '', + url: '', + purchaseOrderID: 0, + financeCheck: false, + createdAt: '', + updatedAt: '', + }; + initFormDataList.push(initFormData); + } + setFormDataList(initFormDataList); + }; useEffect(() => { if (router.isReady) { - getPurchaseItems(); + // 購入申請を新しく作成したかどうかで判断 + props.purchaseOrder ? createNonePurchaseItems() : getPurchaseItems(); } }, [router, getPurchaseItems]); @@ -175,8 +181,26 @@ export default function PurchaseReportAddModal(props: ModalProps) { purchaseOrderID: Number(purchaseOrderID), ...rest, }; - const postRes = await post(purchaseReportUrl, submitData); - setPurchaseReportId(postRes.id); + if (props.purchaseOrder) { + //購入申請と物品を登録してから報告の登録 + const purchaseOrderUrl = process.env.CSR_API_URI + '/purchaseorders'; + const postRes = await postOrder(purchaseOrderUrl, props.purchaseOrder); + formDataList.map(async (item) => { + const itemData = { ...item, purchaseOrderID: postRes.id || 0 }; + const updatePurchaseItemUrl = process.env.CSR_API_URI + '/purchaseitems'; + await postItem(updatePurchaseItemUrl, itemData); + }); + const submitFormData: PurchaseReport = { + ...submitData, + purchaseOrderID: postRes.id || Number(purchaseOrderID), + }; + const postReportRes = await post(purchaseReportUrl, submitFormData); + setPurchaseReportId(postReportRes.id); + } else { + //報告の登録 + const postReportRes = await post(purchaseReportUrl, submitData); + setPurchaseReportId(postReportRes.id); + } }; // 購入物品を更新 @@ -187,12 +211,6 @@ export default function PurchaseReportAddModal(props: ModalProps) { }); }; - const deletePurchaseOrder = async () => { - const deletePurchaseOrderUrl = - process.env.CSR_API_URI + '/purchaseorders/' + props.purchaseOrderId; - await del(deletePurchaseOrderUrl); - }; - // 購入物品の情報 const content = (data: PurchaseItem) => ( <> @@ -201,8 +219,8 @@ export default function PurchaseReportAddModal(props: ModalProps) {
@@ -211,8 +229,8 @@ export default function PurchaseReportAddModal(props: ModalProps) { @@ -221,8 +239,8 @@ export default function PurchaseReportAddModal(props: ModalProps) { @@ -230,8 +248,8 @@ export default function PurchaseReportAddModal(props: ModalProps) {
@@ -239,8 +257,8 @@ export default function PurchaseReportAddModal(props: ModalProps) {
@@ -255,7 +273,6 @@ export default function PurchaseReportAddModal(props: ModalProps) {
{ - if (props.isOnlyReported) deletePurchaseOrder(); props.setIsOpen(false); }} /> @@ -336,7 +353,7 @@ export default function PurchaseReportAddModal(props: ModalProps) { } isFinanceCheckHandler(formDataList[activeStep - 1].id, true); }} - disabled={formDataList[activeStep - 1].item.trim() === ''} + disabled={formDataList[activeStep - 1]?.item.trim() === ''} >
{activeStep === steps.length diff --git a/view/next-project/src/components/purchasereports/PurchaseReportConfirmModal.tsx b/view/next-project/src/components/purchasereports/PurchaseReportConfirmModal.tsx index 1d6d75804..dfb5f02d2 100644 --- a/view/next-project/src/components/purchasereports/PurchaseReportConfirmModal.tsx +++ b/view/next-project/src/components/purchasereports/PurchaseReportConfirmModal.tsx @@ -1,6 +1,6 @@ import clsx from 'clsx'; import { useRouter } from 'next/router'; -import React, { useState, useEffect, useCallback } from 'react'; +import React, { useState } from 'react'; import { RiExternalLinkLine, RiFileCopyLine } from 'react-icons/ri'; import { Modal, PrimaryButton, CloseButton, Tooltip } from '@components/common'; @@ -25,32 +25,17 @@ export default function PurchaseItemNumModal(props: ModalProps) { props.setIsOpen(false); }; - // 購入報告した物品 - const [reportedPurchaseItems, setReportedPurchaseItems] = useState([]); - // 購入報告しない物品 - const [notReportedPurchaseItems, setNotReportedPurchaseItems] = useState([]); - const tableColumns = ['物品名', '単価', '個数', '備考', 'URL']; - // 購入報告する物品と報告しない物品を仕分け - const judgeItems = useCallback(() => { - props.formDataList.map((formData: PurchaseItem) => { - if (formData.financeCheck) { - setReportedPurchaseItems((reportedPurchaseItem) => [...reportedPurchaseItem, formData]); - } else { - setNotReportedPurchaseItems((notReportedPurchaseItem) => [ - ...notReportedPurchaseItem, - formData, - ]); - } - }); - }, [props.formDataList, setReportedPurchaseItems, setNotReportedPurchaseItems]); + // 購入報告した物品 + const reportedPurchaseItems = props.formDataList.filter((formData) => { + return formData.financeCheck; + }); - useEffect(() => { - if (router.isReady) { - judgeItems(); - } - }, [router, judgeItems]); + // 購入報告しない物品 + const notReportedPurchaseItems = props.formDataList.filter((formData) => { + return !formData.financeCheck; + }); const PurchaseItemTable = (purchaseItems: PurchaseItem[]) => { return ( diff --git a/view/next-project/src/components/purchasereports/PurchaseReportItemNumModal.tsx b/view/next-project/src/components/purchasereports/PurchaseReportItemNumModal.tsx index a4e68dfe8..f06743da4 100644 --- a/view/next-project/src/components/purchasereports/PurchaseReportItemNumModal.tsx +++ b/view/next-project/src/components/purchasereports/PurchaseReportItemNumModal.tsx @@ -2,8 +2,6 @@ import React, { useState, useEffect } from 'react'; import { useRecoilState } from 'recoil'; import { userAtom } from '@/store/atoms'; -import * as purchaseItemAPI from '@api/purchaseItem'; -import { post } from '@api/purchaseOrder'; import { CloseButton, Modal, @@ -14,22 +12,38 @@ import { } from '@components/common'; import PurchaseReportAddModal from '@components/purchasereports/PurchaseReportAddModal'; import { useUI } from '@components/ui/context'; -import { PurchaseItem, PurchaseOrder, Expense } from '@type/common'; +import { PurchaseOrder, Expense, YearPeriod } from '@type/common'; import { get } from '@utils/api/api_methods'; export default function PurchaseReportItemNumModal() { + const date = new Date(); + const [selectedYear, setSelectedYear] = useState(date.getFullYear()); + const [yearPeriods, setYearPeriods] = useState([]); + useEffect(() => { + const getPurchaseReportsUrl = process.env.CSR_API_URI + '/years/periods'; + const getPeriods = async () => { + const res = await get(getPurchaseReportsUrl); + const year = res ? res[res.length - 1].year : date.getFullYear(); + setSelectedYear(year); + setYearPeriods(res); + }; + getPeriods(); + }, []); + const [user] = useRecoilState(userAtom); const [expenses, setExpenses] = useState([]); - const [expenseID, setExpenseID] = useState(1); + const [expenseID, setExpenseID] = useState(0); useEffect(() => { - const getExpensesUrl = process.env.CSR_API_URI + '/expenses'; + const getExpenseByPeriodsUrl = + process.env.CSR_API_URI + '/expenses/fiscalyear/' + String(selectedYear); const getExpenses = async () => { - const res = await get(getExpensesUrl); + const res = await get(getExpenseByPeriodsUrl); setExpenses(res); + setExpenseID(res ? res[0].id : null); }; getExpenses(); - }, []); + }, [selectedYear]); const { setModalView, openModal, closeModal } = useUI(); @@ -47,73 +61,34 @@ export default function PurchaseReportItemNumModal() { value: 1, }); // 購入申請ID - const [purchaseOrderId, setPurchaseOrderId] = useState(1); // 購入物品数用のhandler const purchaseItemNumHandler = (input: string) => (e: React.ChangeEvent) => { setPurchaseItemNum({ ...purchaseItemNum, [input]: e.target.value }); }; - // 購入報告は購入申請に紐づいているので、購入申請を追加 - const addPurchaseOrder = async () => { - //年・月・日を取得する - const now = new Date(); - const year = now.getFullYear(); - const month = now.getMonth() + 1; - const day = now.getDate(); - let monthStr = ''; - let dayStr = ''; - if (month < 10) { - monthStr = '0' + String(month); - } else { - monthStr = String(month); - } - if (day < 10) { - dayStr = '0' + String(day); - } else { - dayStr = String(day); - } + const now = new Date(); + const year = now.getFullYear(); + const month = now.getMonth() + 1; + const day = now.getDate(); + let monthStr = ''; + let dayStr = ''; + if (month < 10) { + monthStr = '0' + String(month); + } else { + monthStr = String(month); + } + if (day < 10) { + dayStr = '0' + String(day); + } else { + dayStr = String(day); + } - const data: PurchaseOrder = { - deadline: String(year) + '-' + monthStr + '-' + dayStr, - userID: user.id, - financeCheck: false, - expenseID: expenseID, - }; - const addPurchaseOrderUrl = process.env.CSR_API_URI + '/purchaseorders'; - const postRes = await post(addPurchaseOrderUrl, data); - const purchaseOrderID = postRes.id; - setPurchaseOrderId(purchaseOrderID); - - // 購入物品数のpurchaseItemのリストを作成 - const updatePurchaseItemList = []; - for (let i = 0; i < Number(purchaseItemNum.value); i++) { - const initialPurchaseItem: PurchaseItem = { - id: i + 1, - item: '', - price: 0, - quantity: 0, - detail: '', - url: '', - purchaseOrderID: purchaseOrderID, - financeCheck: false, - createdAt: '', - updatedAt: '', - }; - updatePurchaseItemList.push(initialPurchaseItem); - } - // 購入報告モーダルではすでにある購入物品を更新する処理なので、先に購入物品を登録しておく - addPurchaseItem(updatePurchaseItemList); - }; - - // 購入報告の追加モーダルではPutをするので、ここではPostして購入物品を追加 - const addPurchaseItem = async (data: PurchaseItem[]) => { - data.map(async (item) => { - const updatePurchaseItemUrl = process.env.CSR_API_URI + '/purchaseitems'; - await purchaseItemAPI.post(updatePurchaseItemUrl, item); - }); - // 購入報告の追加モーダルを開く - onOpen(); + const purchaseOrder: PurchaseOrder = { + deadline: String(year) + '-' + monthStr + '-' + dayStr, + userID: user.id, + financeCheck: false, + expenseID: expenseID || 0, }; return ( @@ -137,22 +112,43 @@ export default function PurchaseReportItemNumModal() {
-
-

購入した局・団体

-
+
+
+

年度

+
+
+
+

購入した局・団体

+
+
+ +
@@ -166,8 +162,9 @@ export default function PurchaseReportItemNumModal() { { - addPurchaseOrder(); + onOpen(); }} + disabled={!expenses} > 報告へ進む @@ -175,11 +172,11 @@ export default function PurchaseReportItemNumModal() { {isOpen && ( )} diff --git a/view/next-project/src/components/sponsoractivities/AddPdfDetailModal.tsx b/view/next-project/src/components/sponsoractivities/AddPdfDetailModal.tsx new file mode 100644 index 000000000..a3d8f9a01 --- /dev/null +++ b/view/next-project/src/components/sponsoractivities/AddPdfDetailModal.tsx @@ -0,0 +1,107 @@ +import React, { useState } from 'react'; + +import { createSponsoractivitiesPDF } from '@/utils/createSponsoractivitiesReceiptPDF'; +import { PreviewPDF } from '@/utils/createSponsoractivitiesReceiptPDF'; +import { CloseButton, Input, Modal, PrimaryButton } from '@components/common'; +import { SponsorActivityView } from '@type/common'; + +interface ModalProps { + setIsOpen: (isOpen: boolean) => void; + sponsorActivitiesViewItem: SponsorActivityView; + children?: React.ReactNode; +} + +interface FormDateFormat { + receivedAt: string; +} + +export default function AddPdfDetailModal(props: ModalProps) { + const today = new Date(); + const yyyy = String(today.getFullYear()); + const mm = String(today.getMonth() + 1).padStart(2, '0'); + const dd = String(today.getDate()).padStart(2, '0'); + const weekdays = ['日', '月', '火', '水', '木', '金', '土']; + const toReiwaYear = (year: number) => { + const reiwaStartYear = 2019; + const reiwaYear = year - reiwaStartYear + 1; + return reiwaYear === 1 ? '元' : `${reiwaYear}`; + }; + const getWeekday = (date: Date) => { + return weekdays[date.getDay()]; + }; + const ymd = `${yyyy}-${mm}-${dd}`; + + const formatDate = (date: string) => { + const [year, month, day] = date.split('-').map(Number); + const dateObj = new Date(year, month - 1, day); + const reiwaYear = toReiwaYear(year); + const weekday = getWeekday(dateObj); + return `令和${reiwaYear}年${month}月${day}日(${weekday})`; + }; + + const [formData, setFormData] = useState({ receivedAt: ymd }); + const [remarks, setRemarks] = useState(''); + + const handler = + (input: string) => + (e: React.ChangeEvent | React.ChangeEvent) => { + setFormData({ ...formData, [input]: e.target.value }); + }; + + const handleRemarksChange = (e: React.ChangeEvent) => { + setRemarks(e.target.value); + }; + + return ( + +
+
+ { + props.setIsOpen(false); + }} + /> +
+

+ 振込締め切り日・備考の入力 +

+
+ + +
+
+ { + createSponsoractivitiesPDF( + props.sponsorActivitiesViewItem, + formatDate(formData.receivedAt), + remarks, + ); + props.setIsOpen(false); + }} + > + ダウンロード + +
+
+
+ +
+
+ ); +} diff --git a/view/next-project/src/components/sponsoractivities/DetailModal.tsx b/view/next-project/src/components/sponsoractivities/DetailModal.tsx index 1737a9d98..f357c78a6 100644 --- a/view/next-project/src/components/sponsoractivities/DetailModal.tsx +++ b/view/next-project/src/components/sponsoractivities/DetailModal.tsx @@ -1,9 +1,9 @@ -import { clsx } from 'clsx'; -import React, { FC } from 'react'; +import { useRouter } from 'next/router'; +import React, { FC, useState } from 'react'; import { RiCloseCircleLine } from 'react-icons/ri'; - +import DetailPage1 from './DetailPage1'; +import DetailPage2 from './DetailPage2'; import { Modal } from '@components/common'; -import { DESIGNERS } from '@constants/designers'; import { SponsorActivityView } from '@type/common'; interface ModalProps { @@ -16,210 +16,40 @@ interface ModalProps { } const DetailModal: FC = (props) => { + const [isChange, setIsChange] = useState(false); + const [sponsorActivitiesView, setSponsorActivitiesView] = useState( + props.sponsorActivitiesViewItem, + ); + + const router = useRouter(); const onClose = () => { props.setIsOpen(false); + isChange && router.reload(); }; - - const formatDate = (date: string) => { - const datetime = date.replace('T', ' '); - const datetime2 = datetime.substring(0, datetime.length - 10); - return datetime2; - }; + const [pageNum, setPageNum] = useState(1); return ( - -
-
- -
-
-

- 協賛活動の詳細 -

-
-
-

作成日

-

- {formatDate(props.sponsorActivitiesViewItem.sponsorActivity.createdAt || '')} -

-
-
-

回収状況

-

- {props.sponsorActivitiesViewItem.sponsorActivity.isDone ? '回収済み' : '未回収'} -

-
-
-

担当者名

-

{props.sponsorActivitiesViewItem.user.name}

-
-
-
-
-

オプション

-

- {props.sponsorActivitiesViewItem.sponsorActivity.feature} -

-
-
-

交通費

-

- {props.sponsorActivitiesViewItem.sponsorActivity.expense}円 -

-
-
-

デザイン

-

- {DESIGNERS[props.sponsorActivitiesViewItem.sponsorActivity.design]} -

-
+ +
+
-

広告データurl

-
- - - - - - - - -
-
-
- {props.sponsorActivitiesViewItem.sponsorActivity.url === '' &&

なし

} - {props.sponsorActivitiesViewItem.sponsorActivity.url !== '' && ( - - {props.sponsorActivitiesViewItem.sponsorActivity.url} - - )} -
-
-
-

備考

- - - - - - - - - -
-
-

- {props.sponsorActivitiesViewItem.sponsorActivity.remark === '' &&

なし
} - {props.sponsorActivitiesViewItem.sponsorActivity.remark} -

-
-
-

協賛企業

- - - - - - - - - - - - - - - - - - - -
-
企業名
-
-
電話番号
-
-
メール
-
-
住所
-
-
代表者名
-
-
- {props.sponsorActivitiesViewItem.sponsor.name} -
-
-
- {props.sponsorActivitiesViewItem.sponsor.tel} -
-
-
- {props.sponsorActivitiesViewItem.sponsor.email} -
-
-
- {props.sponsorActivitiesViewItem.sponsor.address} -
-
-
- {props.sponsorActivitiesViewItem.sponsor.representative} -
-
-

協賛スタイル

- - - - - - - - - - {props.sponsorActivitiesViewItem.styleDetail ? ( - props.sponsorActivitiesViewItem.styleDetail.map((styleDetail, index) => ( - - - - - - )) - ) : ( - - - - )} - -
-
協賛内容
-
-
オプション
-
-
値段
-
-
{styleDetail.sponsorStyle.style}
-
-
{styleDetail.sponsorStyle.feature}
-
-
{styleDetail.sponsorStyle.price} 円
-
-
- 協賛スタイルを登録してください -
-
+ {pageNum === 1 && ( + + )} + {pageNum === 2 && ( + + )} ); }; diff --git a/view/next-project/src/components/sponsoractivities/DetailPage1.tsx b/view/next-project/src/components/sponsoractivities/DetailPage1.tsx new file mode 100644 index 000000000..97cce2f4d --- /dev/null +++ b/view/next-project/src/components/sponsoractivities/DetailPage1.tsx @@ -0,0 +1,190 @@ +import { clsx } from 'clsx'; +import React, { FC } from 'react'; + +import { FaChevronCircleRight } from 'react-icons/fa'; +import OpenAddPdfDetailModalButton from './OpenAddPdfDetailModalButton'; +import OpenPaymentDayModalButton from './OpenPaymentDayModalButton'; +import { DESIGNERS } from '@constants/designers'; +import { SponsorActivityView } from '@type/common'; + +interface ModalProps { + setPageNum: (isOpen: number) => void; + children?: React.ReactNode; + id: React.ReactNode; + sponsorActivitiesViewItem: SponsorActivityView; + setIsOpen: (isOpen: boolean) => void; +} + +const DetailPage1: FC = (props) => { + const toPage2 = () => { + props.setPageNum(2); + }; + + const formatDate = (date: string) => { + const datetime = date.replace('T', ' '); + const datetime2 = datetime.substring(0, datetime.length - 10); + return datetime2; + }; + + return ( + <> +

+ 協賛活動の詳細 +

+
+
+

作成日

+

+ {formatDate(props.sponsorActivitiesViewItem.sponsorActivity.createdAt || '')} +

+
+
+

回収状況

+

+ {props.sponsorActivitiesViewItem.sponsorActivity.isDone ? '回収済み' : '未回収'} +

+
+
+

担当者名

+

{props.sponsorActivitiesViewItem.user.name}

+
+
+
+
+

オプション

+

+ {props.sponsorActivitiesViewItem.sponsorActivity.feature} +

+
+
+

交通費

+

+ {props.sponsorActivitiesViewItem.sponsorActivity.expense}円 +

+
+
+

デザイン

+

+ {DESIGNERS[props.sponsorActivitiesViewItem.sponsorActivity.design]} +

+
+
+

広告データurl

+ + + + + + + + + +
+
+
+ {props.sponsorActivitiesViewItem.sponsorActivity.url === '' &&

なし

} + {props.sponsorActivitiesViewItem.sponsorActivity.url !== '' && ( + + {props.sponsorActivitiesViewItem.sponsorActivity.url} + + )} +
+
+
+

備考

+ + + + + + + + + +
+
+

+ {props.sponsorActivitiesViewItem.sponsorActivity.remark === '' &&

なし
} + {props.sponsorActivitiesViewItem.sponsorActivity.remark} +

+
+
+

協賛企業

+ + + + + + + + + + + + + + + + + + + +
+
企業名
+
+
電話番号
+
+
メール
+
+
住所
+
+
代表者名
+
+
+ {props.sponsorActivitiesViewItem.sponsor.name} +
+
+
+ {props.sponsorActivitiesViewItem.sponsor.tel} +
+
+
+ {props.sponsorActivitiesViewItem.sponsor.email} +
+
+
+ {props.sponsorActivitiesViewItem.sponsor.address} +
+
+
+ {props.sponsorActivitiesViewItem.sponsor.representative} +
+
+
+ + +
+
+ +
+ + ); +}; + +export default DetailPage1; diff --git a/view/next-project/src/components/sponsoractivities/DetailPage2.tsx b/view/next-project/src/components/sponsoractivities/DetailPage2.tsx new file mode 100644 index 000000000..86738d779 --- /dev/null +++ b/view/next-project/src/components/sponsoractivities/DetailPage2.tsx @@ -0,0 +1,380 @@ +import { clsx } from 'clsx'; +import { saveAs } from 'file-saver'; +import React, { FC, useEffect, useState } from 'react'; + +import { FaChevronCircleLeft, FaCheckCircle } from 'react-icons/fa'; +import { FiPlusSquare } from 'react-icons/fi'; +import { RiCloseCircleLine } from 'react-icons/ri'; +import { + DeleteButton, + EditButton, + Input, + OutlinePrimaryButton, + PrimaryButton, + Select, +} from '../common'; +import UplaodFileModal from './UploadFileModal'; +import { post, del, put } from '@/utils/api/api_methods'; +import { DESIGN_PROGRESSES } from '@constants/designProgresses'; +import { SponsorActivityView, SponsorActivityInformation } from '@type/common'; + +interface ModalProps { + setPageNum: (isOpen: number) => void; + children?: React.ReactNode; + id: React.ReactNode; + sponsorActivitiesViewItem: SponsorActivityView; + setIsChange: (isChange: boolean) => void; + setSponsorActivitiesView: (sponsorActivitiesView: SponsorActivityView) => void; +} + +const DetailPage2: FC = (props) => { + const toPage1 = () => { + props.setPageNum(1); + }; + const [isOpen, setIsOpen] = useState(false); + const [editActivityInformationId, setEditActivityInformationId] = useState(0); + const [activityInformationData, setActivityInformationData] = useState(''); + + const [sponsorActivityInformations, setSponsorActivityInformations] = useState< + SponsorActivityInformation[] + >(props.sponsorActivitiesViewItem.sponsorActivityInformations || []); + const [isEditInformations, setIsEditInformations] = useState( + sponsorActivityInformations.map(() => { + return false; + }), + ); + + useEffect(() => { + const newSponsorActivitiesView = { + ...props.sponsorActivitiesViewItem, + sponsorActivityInformations: sponsorActivityInformations, + }; + props.setSponsorActivitiesView(newSponsorActivitiesView); + }, [sponsorActivityInformations]); + + const designProgresses = + sponsorActivityInformations && + sponsorActivityInformations.map((activityInformation) => { + const designProgress = DESIGN_PROGRESSES.filter( + (design) => design.id === activityInformation.designProgress, + ); + return designProgress[0]; + }); + + const fileURLs = + sponsorActivityInformations && + sponsorActivityInformations.map((activityInformation) => { + const bucketName = activityInformation.bucketName; + const fileName = activityInformation.fileName; + return `${process.env.NEXT_PUBLIC_MINIO_ENDPONT}/${bucketName}/${fileName}`; + }); + + const download = async (url: string, fileName: string) => { + const response = await fetch(url); + const blob = await response.blob(); + saveAs(blob, fileName); + }; + + const handleDelete = async (id: number, activityInformation: SponsorActivityInformation) => { + const deleteSponsorActivityInformationUrl = + process.env.CSR_API_URI + '/activity_informations/' + String(id); + const newSponsorActivityInformations = sponsorActivityInformations.filter( + (sponsorActivityInformation) => sponsorActivityInformation.id !== id, + ); + if (activityInformation.fileName === '') { + const res = await del(deleteSponsorActivityInformationUrl); + } else { + const confirm = window.confirm('本当に削除してよろしいですか?'); + if (confirm) { + const res = await del(deleteSponsorActivityInformationUrl); + } else { + window.alert('キャンセルしました'); + return; + } + } + setSponsorActivityInformations(newSponsorActivityInformations); + props.setIsChange(true); + }; + + const createInfomation = async () => { + const sponsorActivitiesUrl = process.env.CSR_API_URI + '/activity_informations'; + const nullData = { + activityID: props.sponsorActivitiesViewItem.sponsorActivity.id || 0, + bucketName: '', + fileName: '', + fileType: '', + designProgress: 1, + fileInformation: '', + }; + const res = await post(sponsorActivitiesUrl, nullData); + const newSponsorActivityInformations = [...sponsorActivityInformations, res]; + setSponsorActivityInformations(newSponsorActivityInformations); + setIsEditInformations([...isEditInformations, false]); + props.setIsChange(true); + }; + + const handleUpdateProgress = async ( + e: React.ChangeEvent, + activityInformation: SponsorActivityInformation, + ) => { + const sponsorActivitiesUrl = + process.env.CSR_API_URI + '/activity_informations/' + activityInformation.id; + const updateActivityInformation = { + ...activityInformation, + designProgress: Number(e.target.value), + }; + const res = await put(sponsorActivitiesUrl, updateActivityInformation); + const newSponsorActivityInformations = sponsorActivityInformations.map( + (sponsorActivityInformation) => { + if (sponsorActivityInformation.id === activityInformation.id) { + return updateActivityInformation; + } + return sponsorActivityInformation; + }, + ); + setSponsorActivityInformations(newSponsorActivityInformations); + props.setIsChange(true); + }; + + const handleUpdateInformation = async (activityInformation: SponsorActivityInformation) => { + const sponsorActivitiesUrl = + process.env.CSR_API_URI + '/activity_informations/' + activityInformation.id; + const updateActivityInformation = { + ...activityInformation, + fileInformation: activityInformationData, + }; + const res = await put(sponsorActivitiesUrl, updateActivityInformation); + const newSponsorActivityInformations = sponsorActivityInformations.map( + (sponsorActivityInformation) => { + if (sponsorActivityInformation.id === activityInformation.id) { + return updateActivityInformation; + } + return sponsorActivityInformation; + }, + ); + setSponsorActivityInformations(newSponsorActivityInformations); + props.setIsChange(true); + setIsEditInformations( + isEditInformations.map(() => { + return false; + }), + ); + }; + + return ( + <> +

協賛スタイル

+ + + + + + + + + + {props.sponsorActivitiesViewItem.styleDetail ? ( + props.sponsorActivitiesViewItem.styleDetail.map((styleDetail, index) => ( + + + + + + )) + ) : ( + + + + )} + +
+
協賛内容
+
+
オプション
+
+
値段
+
+
{styleDetail.sponsorStyle.style}
+
+
{styleDetail.sponsorStyle.feature}
+
+
{styleDetail.sponsorStyle.price} 円
+
+
+ 協賛スタイルを登録してください +
+
+

広告デザイン

+
+ {sponsorActivityInformations && + sponsorActivityInformations.map((activityInformation, index) => ( + <> +
+
+ +
+
+
+
+
+
+

広告状況

+ +
+
+
+
+

情報

+ {isEditInformations[index] ? ( + <> + { + setActivityInformationData(e.target.value); + }} + /> + { + setIsEditInformations( + isEditInformations.map(() => { + return false; + }), + ); + }} + /> + { + handleUpdateInformation(activityInformation); + }} + /> + + ) : activityInformation.fileInformation.trim() === '' ? ( +

   

+ ) : ( +

+ {activityInformation.fileInformation} +

+ )} + {!isEditInformations[index] && ( + { + const newIsEditInformations = isEditInformations.map( + (isEditInformation, editIndex) => { + return index === editIndex; + }, + ); + setActivityInformationData(activityInformation.fileInformation || ''); + setIsEditInformations(newIsEditInformations); + }} + /> + )} +
+
+
+
+ {activityInformation?.fileType === 'application/pdf' && + activityInformation?.fileName && ( + + )} + {activityInformation.fileType !== 'application/pdf' && + activityInformation.fileName && ( + Picture of the author + )} +
+
+ {activityInformation.fileName !== '' && ( +
+ { + setEditActivityInformationId(index); + setIsOpen(true); + }} + > + 変更 + + + fileURLs && download(fileURLs[index], activityInformation.fileName || '') + } + > + ダウンロード + +
+ )} + {activityInformation.fileName === '' && ( +
+ { + setEditActivityInformationId(index); + setIsOpen(true); + }} + > + 広告登録 + +
+ )} +
+ + ))} +
+ +
+
+
+ +
+ {isOpen && ( + + )} + + ); +}; + +export default DetailPage2; diff --git a/view/next-project/src/components/sponsoractivities/EditModal.tsx b/view/next-project/src/components/sponsoractivities/EditModal.tsx index d94700e61..683f033dd 100644 --- a/view/next-project/src/components/sponsoractivities/EditModal.tsx +++ b/view/next-project/src/components/sponsoractivities/EditModal.tsx @@ -1,7 +1,7 @@ import { useRouter } from 'next/router'; import React, { useState, useEffect, useMemo } from 'react'; -import { put, post, del } from '@/utils/api/api_methods'; +import { get, put, post, del } from '@/utils/api/api_methods'; import { PrimaryButton, @@ -15,7 +15,14 @@ import { import { MultiSelect } from '@components/common'; import { BUREAUS } from '@constants/bureaus'; import { DESIGNER_VALUES } from '@constants/designers'; -import { SponsorActivity, Sponsor, SponsorStyle, User, ActivityStyle } from '@type/common'; +import { + SponsorActivity, + Sponsor, + SponsorStyle, + User, + ActivityStyle, + YearPeriod, +} from '@type/common'; interface ModalProps { sponsorActivityId: number | string; @@ -25,22 +32,24 @@ interface ModalProps { users: User[]; sponsorStyleDetails: ActivityStyle[] | null; activityStyles: ActivityStyle[]; + year: string; + yearPeriods: YearPeriod[]; setIsOpen: (isOpen: boolean) => void; } const REMARK_COUPON = `<クーポン> [詳細 : ○○]\n`; const REMARK_PAMPHLET = `<パンフレット掲載内容> [企業名 : x],[住所 : x],[HP : x],[ロゴ : x],[営業時間 : x],[電話番号 : x],[キャッチコピー : x],[地図 : x],[その他 : ]\n`; -const REMARK_POSTER = `<ポスター掲載内容> パンフレット広告拡大\n`; export default function EditModal(props: ModalProps) { - const { users, sponsors, sponsorStyles, sponsorStyleDetails, activityStyles } = props; + const { users, sponsorStyles, sponsorStyleDetails, activityStyles, yearPeriods } = props; const router = useRouter(); // 協賛企業のリスト - const [formData, setFormData] = useState({ - ...props.sponsorActivity, - expense: Number((props.sponsorActivity.expense / 11).toFixed(1)), - }); + const [formData, setFormData] = useState(props.sponsorActivity); + const [selectedYear, setSelectedYear] = useState(props.year); + const [sponsors, setSponsors] = useState(props.sponsors || []); + + const default_user = users.find((user) => user.id === formData.userID); const initStyleIds = sponsorStyleDetails ? sponsorStyleDetails.map((sponsorStyleDetail) => sponsorStyleDetail.sponsorStyleID) @@ -56,6 +65,16 @@ export default function EditModal(props: ModalProps) { } }, [selectedStyleIds]); + const getSponsors = async () => { + const getSponsorsUrlByYear = process.env.CSR_API_URI + '/sponsors/periods/' + selectedYear; + const getSponsorsByYears = await get(getSponsorsUrlByYear); + setSponsors(getSponsorsByYears); + }; + + useEffect(() => { + getSponsors(); + }, [selectedYear]); + const styleOotions = useMemo(() => { const options = sponsorStyles.map((style) => { return { @@ -67,12 +86,7 @@ export default function EditModal(props: ModalProps) { }, [sponsorStyles]); const setDesign = (e: React.ChangeEvent) => { - const remarkOption = - formData.feature === 'ポスター' - ? REMARK_POSTER - : formData.feature === 'クーポン' - ? REMARK_COUPON - : ''; + const remarkOption = formData.feature === 'クーポン' ? REMARK_COUPON : ''; const newRemarkDesign = e.target.value === '1' ? REMARK_PAMPHLET : ''; setFormData({ ...formData, @@ -82,12 +96,7 @@ export default function EditModal(props: ModalProps) { }; const setFeature = (e: React.ChangeEvent) => { - const newRemarkFeature = - e.target.value === 'ポスター' - ? REMARK_POSTER - : e.target.value === 'クーポン' - ? REMARK_COUPON - : ''; + const newRemarkFeature = e.target.value === 'クーポン' ? REMARK_COUPON : ''; const remarkDesign = formData.design === 1 ? REMARK_PAMPHLET : ''; setFormData({ ...formData, feature: e.target.value, remark: newRemarkFeature + remarkDesign }); }; @@ -131,7 +140,7 @@ export default function EditModal(props: ModalProps) { const { expense, userID, sponsorID, ...rest } = data; const submitData: SponsorActivity = { - expense: Math.round(expense * 11), + expense: Number(expense), userID: Number(userID), sponsorID: Number(sponsorID), ...rest, @@ -178,21 +187,42 @@ export default function EditModal(props: ModalProps) { .filter((user, index, self) => { return self.findIndex((u) => u.name === user.name) === index; }); - if (res.length !== 0) setFormData({ ...formData, userID: res[0].id }); + + if (res.length !== 0 && default_user?.bureauID !== bureauId) { + setFormData({ ...formData, userID: res[0].id }); + } return res; }, [bureauId]); // 協賛企業の情報 const content = (data: SponsorActivity) => ( -
+
+

年度

+
+ +

企業名

- + {sponsors && + sponsors.map((sponsor) => ( + + ))} + {!sponsors && }

協賛スタイル

@@ -221,9 +251,9 @@ export default function EditModal(props: ModalProps) {

担当者名

- {filteredUsers.map((user) => ( - ))} @@ -251,18 +281,11 @@ export default function EditModal(props: ModalProps) { -
-

広告データurl

-
- -

デザイン作成

{DESIGNER_VALUES.map((designer) => ( @@ -279,7 +302,7 @@ export default function EditModal(props: ModalProps) {
))}
-

移動距離(km)

+

交通費

-

交通費

-
-

{Math.round(data.expense * 11)}円

-

備考