Compare commits

..

10 Commits

Author SHA1 Message Date
Elliot DeNolf
558b298bf0 chore(release): payload/2.19.2 [skip ci] 2024-06-06 12:08:04 -04:00
Jacob Fletcher
cd24e2bb3c docs: adds live preview csp troubleshooting tips (#6656) 2024-06-06 11:04:53 -04:00
Jarrod Flesch
ac8c2096af fix: cascade draft arg when querying globals with graphql (#6651) 2024-06-06 10:36:33 -04:00
Patrik
626be15578 fix: filtered out disableListColumn fields reappeared after toggling other fields (#6636)
## Description

There was an issue with fields w/ the `admin.disableListColumn` prop
reappearing in the column selector after toggling other fields in the
column selector.

This PR makes sure fields with `admin.disableListColumn` set to `true`
do not reappear under any circumstance.

- [x] I have read and understand the
[CONTRIBUTING.md](https://github.com/payloadcms/payload/blob/main/CONTRIBUTING.md)
document in this repository.

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)

## Checklist:

- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] Existing test suite passes locally with my changes
2024-06-05 11:17:34 -04:00
Patrik
67c0b0e6e0 fix: resizing animated images (#6621)
Fixes #2181 #6146
2024-06-04 13:56:21 -04:00
Elliot DeNolf
11239103a6 chore(release): bundler-webpack/1.0.7 [skip ci] 2024-06-04 11:14:40 -04:00
Elliot DeNolf
4998ef8c9b chore(release): payload/2.19.1 [skip ci] 2024-06-04 11:13:38 -04:00
Alessio Gravili
e44ce819ce fix: override ajv dependency version to 8.14.0 wherever possible (#6618)
ajv issue: https://github.com/ajv-validator/ajv/issues/2446

This also removes css-minimizer-webpack-plugin which is not used within
bundler-webpack
2024-06-04 10:54:42 -04:00
Elliot DeNolf
b700208b98 chore(release): payload/2.19.0 [skip ci] 2024-06-03 22:49:24 -04:00
Alessio Gravili
4a54aa7776 fix: pin ajv to 8.14.0, as 8.15.0 is broken (#6607) 2024-06-03 20:22:24 -04:00
21 changed files with 372 additions and 110 deletions

View File

@@ -1,3 +1,38 @@
## [2.19.2](https://github.com/payloadcms/payload/compare/v2.19.1...v2.19.2) (2024-06-06)
### Bug Fixes
* cascade draft arg when querying globals with graphql ([#6651](https://github.com/payloadcms/payload/issues/6651)) ([ac8c209](https://github.com/payloadcms/payload/commit/ac8c2096af641a6886e4543ee65c9790e45f080f))
* filtered out `disableListColumn` fields reappeared after toggling other fields ([#6636](https://github.com/payloadcms/payload/issues/6636)) ([626be15](https://github.com/payloadcms/payload/commit/626be155784dda181276bb87617433822a0accf3))
* resizing animated images ([#6621](https://github.com/payloadcms/payload/issues/6621)) ([67c0b0e](https://github.com/payloadcms/payload/commit/67c0b0e6e0b5b190f6a916b59ba02f8c18479e18)), closes [#2181](https://github.com/payloadcms/payload/issues/2181) [#6146](https://github.com/payloadcms/payload/issues/6146)
## [2.19.1](https://github.com/payloadcms/payload/compare/v2.19.0...v2.19.1) (2024-06-04)
### Bug Fixes
* override ajv dependency version to 8.14.0 wherever possible ([#6618](https://github.com/payloadcms/payload/issues/6618)) ([e44ce81](https://github.com/payloadcms/payload/commit/e44ce819cefddeaaf20b2b7ce804e94a9272baf1))
## [2.19.0](https://github.com/payloadcms/payload/compare/v2.18.3...v2.19.0) (2024-06-04)
### Features
* **translations:** update Turkish translations ([#5738](https://github.com/payloadcms/payload/issues/5738)) ([4fddea8](https://github.com/payloadcms/payload/commit/4fddea86ebd5f21705be2310f8b7053d31109189))
### Bug Fixes
* adds new `userEmailAlreadyRegistered` translations ([#6549](https://github.com/payloadcms/payload/issues/6549)) ([56c6700](https://github.com/payloadcms/payload/commit/56c6700cf25570cc217e28dc69459a3b81adbced)), closes [#6535](https://github.com/payloadcms/payload/issues/6535)
* adjusts sizing of remove/add buttons to be same size ([#6527](https://github.com/payloadcms/payload/issues/6527)) ([a352ebc](https://github.com/payloadcms/payload/commit/a352ebc5520bbd0f6a9caef068825976dba05ded)), closes [#6098](https://github.com/payloadcms/payload/issues/6098)
* focalPoint undefined handling ([#6552](https://github.com/payloadcms/payload/issues/6552)) ([fcfc3c5](https://github.com/payloadcms/payload/commit/fcfc3c593f69f63c51f8aa09973fcacbfbe04952))
* pagination on polymorphic relationship field requesting entries with page parameter set to NaN ([#5366](https://github.com/payloadcms/payload/issues/5366)) ([547acfe](https://github.com/payloadcms/payload/commit/547acfe876bdf0df2ce808941f72b690c9dbcae3))
* safely evaluates `field.admin` in WhereBuilder ([#6534](https://github.com/payloadcms/payload/issues/6534)) ([4f9d78d](https://github.com/payloadcms/payload/commit/4f9d78df5e38f3f70852bb6de47cff619f57c648))
* separate sort and search fields when looking up relationship. ([#5964](https://github.com/payloadcms/payload/issues/5964)) ([c009219](https://github.com/payloadcms/payload/commit/c0092191a6ded1098a94d9f48918ab79171e5e32)), closes [#4815](https://github.com/payloadcms/payload/issues/4815) [#5222](https://github.com/payloadcms/payload/issues/5222)
* ui field validation error with `admin.disableListColumn` property ([#6530](https://github.com/payloadcms/payload/issues/6530)) ([eeddece](https://github.com/payloadcms/payload/commit/eeddeceda988d7a4ce8ad31d3036a4ee84aceec3)), closes [#6521](https://github.com/payloadcms/payload/issues/6521)
* **ui:** blocks browser save dialog from opening when hotkey used with no changes ([#6365](https://github.com/payloadcms/payload/issues/6365)) ([8f03cd7](https://github.com/payloadcms/payload/commit/8f03cd7c789eda7613ddced0d45a32afe49b1e01)), closes [#214](https://github.com/payloadcms/payload/issues/214)
## [2.18.3](https://github.com/payloadcms/payload/compare/v2.18.2...v2.18.3) (2024-05-17)

View File

@@ -274,3 +274,11 @@ const { data } = useLivePreview<PageType>({
depth: 1, // Ensure this matches the depth of your initial request
})
```
### Iframe refuses to connect
If your front-end application has set a [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) (CSP) that blocks the Admin Panel from loading your front-end application, the iframe will not be able to load your site. To resolve this, you can whitelist the Admin Panel's domain in your CSP by setting the `frame-ancestors` directive:
```plaintext
frame-ancestors: "self" localhost:* https://your-site.com;
```

View File

@@ -129,6 +129,6 @@
},
"dependencies": {
"@sentry/react": "^7.77.0",
"ajv": "^8.12.0"
"ajv": "8.14.0"
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@payloadcms/bundler-webpack",
"version": "1.0.6",
"version": "1.0.7",
"description": "The officially supported Webpack bundler adapter for Payload",
"repository": {
"type": "git",
@@ -27,7 +27,6 @@
"compression": "1.7.4",
"connect-history-api-fallback": "1.6.0",
"css-loader": "5.2.7",
"css-minimizer-webpack-plugin": "^5.0.0",
"file-loader": "6.2.0",
"find-node-modules": "^2.1.3",
"html-webpack-plugin": "^5.5.0",
@@ -48,7 +47,8 @@
"webpack-bundle-analyzer": "^4.8.0",
"webpack-cli": "^4.10.0",
"webpack-dev-middleware": "6.1.2",
"webpack-hot-middleware": "^2.25.3"
"webpack-hot-middleware": "^2.25.3",
"ajv": "8.14.0"
},
"devDependencies": {
"@payloadcms/eslint-config": "workspace:*",
@@ -62,8 +62,44 @@
"@types/webpack-hot-middleware": "2.25.6",
"payload": "workspace:*"
},
"resolutions": {
"ajv": "8.14.0",
"webpack-dev-middleware/**/ajv": "8.14.0",
"css-minimizer-webpack-plugin/**/ajv": "8.14.0"
},
"peerDependencies": {
"payload": "^2.0.0"
"payload": "^2.0.0",
"ajv": "8.14.0"
},
"overrides": {
"ajv": "8.14.0",
"webpack-dev-middleware": {
"ajv": "8.14.0",
"schema-utils": {
"ajv": "8.14.0"
}
},
"css-minimizer-webpack-plugin": {
"schema-utils": {
"ajv": "8.14.0"
}
}
},
"pnpm": {
"overrides": {
"ajv": "8.14.0",
"webpack-dev-middleware": {
"ajv": "8.14.0",
"schema-utils": {
"ajv": "8.14.0"
}
},
"css-minimizer-webpack-plugin": {
"schema-utils": {
"ajv": "8.14.0"
}
}
}
},
"publishConfig": {
"main": "./dist/index.js",

View File

@@ -1,6 +1,6 @@
{
"name": "payload",
"version": "2.18.3",
"version": "2.19.2",
"description": "Node, React and MongoDB Headless CMS and Application Framework",
"license": "MIT",
"main": "./dist/index.js",
@@ -209,6 +209,29 @@
"vite": "^4.4.9",
"webpack": "^5.78.0"
},
"resolutions": {
"ajv": "8.14.0",
"webpack-dev-middleware/**/ajv": "8.14.0",
"css-minimizer-webpack-plugin/**/ajv": "8.14.0"
},
"overrides": {
"ajv": "8.14.0",
"css-minimizer-webpack-plugin": {
"schema-utils": {
"ajv": "8.14.0"
}
}
},
"pnpm": {
"overrides": {
"ajv": "8.14.0",
"css-minimizer-webpack-plugin": {
"schema-utils": {
"ajv": "8.14.0"
}
}
}
},
"engines": {
"node": ">=14"
},

View File

@@ -1,6 +1,7 @@
import React, { useId } from 'react'
import { useTranslation } from 'react-i18next'
import type { Column } from '../Table/types'
import type { Props } from './types'
import { getTranslation } from '../../../../utilities/getTranslation'
@@ -14,6 +15,12 @@ import './index.scss'
const baseClass = 'column-selector'
const filterColumnFields = (fields: Column[]): Column[] => {
return fields.filter((field) => {
return !field.admin?.disableListColumn
})
}
const ColumnSelector: React.FC<Props> = (props) => {
const { slug } = props
@@ -27,10 +34,12 @@ const ColumnSelector: React.FC<Props> = (props) => {
return null
}
const filteredColumns = filterColumnFields(columns)
return (
<DraggableSortable
className={baseClass}
ids={columns.map((col) => col.accessor)}
ids={filteredColumns.map((col) => col.accessor)}
onDragEnd={({ moveFromIndex, moveToIndex }) => {
moveColumn({
fromIndex: moveFromIndex,
@@ -38,7 +47,7 @@ const ColumnSelector: React.FC<Props> = (props) => {
})
}}
>
{columns.map((col, i) => {
{filteredColumns.map((col, i) => {
const { name, accessor, active, label } = col
if (col.accessor === '_select') return null

View File

@@ -5,6 +5,7 @@ import type { FieldBase } from '../../../../fields/config/types'
export type Column = {
accessor: string
active: boolean
admin?: FieldBase['admin']
components: {
Heading: React.ReactNode
renderCell: (row: any, data: any) => React.ReactNode

View File

@@ -42,10 +42,18 @@ const buildColumns = ({
colIndex += 1
}
const props = cellProps?.[colIndex] || {}
const disableListFilter =
field.admin && 'disableListFilter' in field.admin ? field.admin.disableListFilter : false
return {
name: field.name,
accessor: field.name,
active: isActive,
admin: {
disableListColumn: field.admin?.disableListColumn,
disableListFilter,
},
components: {
Heading: (
<SortColumn

View File

@@ -7,19 +7,8 @@ import './index.scss'
const baseClass = 'condition-value-number'
const NumberField: React.FC<Props> = ({ disabled, onChange, operator, value }) => {
const NumberField: React.FC<Props> = ({ disabled, onChange, value }) => {
const { t } = useTranslation('general')
const isMulti = ['in', 'not_in'].includes(operator)
let valueToRender
if (isMulti && Array.isArray(value)) {
valueToRender = value.map((val) => ({ label: val, value: val }))
} else if (value) {
valueToRender = { label: value, value }
}
return (
<input
className={baseClass}

View File

@@ -1,8 +1,5 @@
import type { Operator } from '../../../../../../types'
export type Props = {
disabled?: boolean
onChange: (e: string) => void
operator: Operator
value: string
}

View File

@@ -8,17 +8,32 @@ import findOne from '../../operations/findOne'
export default function findOneResolver(globalConfig: SanitizedGlobalConfig): Document {
return async function resolver(_, args, context) {
if (args.locale) context.req.locale = args.locale
if (args.fallbackLocale) context.req.fallbackLocale = args.fallbackLocale
let { req } = context
const locale = req.locale
const fallbackLocale = req.fallbackLocale
req = isolateObjectProperty(req, 'locale')
req = isolateObjectProperty(req, 'fallbackLocale')
req.locale = args.locale || locale
req.fallbackLocale = args.fallbackLocale || fallbackLocale
const { slug } = globalConfig
if (!req.query) req.query = {}
const draft: boolean =
args.draft ?? req.query?.draft === 'false'
? false
: req.query?.draft === 'true'
? true
: undefined
if (typeof draft === 'boolean') req.query.draft = String(draft)
context.req = req
const options = {
slug: globalConfig.slug,
depth: 0,
draft: args.draft,
globalConfig,
req: isolateObjectProperty(context.req, 'transactionID'),
slug,
req: isolateObjectProperty(req, 'transactionID'),
}
const result = await findOne(options)

View File

@@ -24,15 +24,21 @@ export type Resolver = (
export default function findVersionByIDResolver(globalConfig: SanitizedGlobalConfig): Resolver {
return async function resolver(_, args, context) {
if (args.locale) context.req.locale = args.locale
if (args.fallbackLocale) context.req.fallbackLocale = args.fallbackLocale
let { req } = context
const locale = req.locale
const fallbackLocale = req.fallbackLocale
req = isolateObjectProperty(req, 'locale')
req = isolateObjectProperty(req, 'fallbackLocale')
req.locale = args.locale || locale
req.fallbackLocale = args.fallbackLocale || fallbackLocale
context.req = req
const options = {
id: args.id,
depth: 0,
draft: args.draft,
globalConfig,
req: isolateObjectProperty<PayloadRequest>(context.req, 'transactionID'),
req: isolateObjectProperty<PayloadRequest>(req, 'transactionID'),
}
const result = await findVersionByID(options)

View File

@@ -26,18 +26,32 @@ export default function updateResolver<TSlug extends keyof GeneratedTypes['globa
globalConfig: SanitizedGlobalConfig,
): Resolver<TSlug> {
return async function resolver(_, args, context) {
if (args.locale) context.req.locale = args.locale
if (args.fallbackLocale) context.req.fallbackLocale = args.fallbackLocale
let { req } = context
const locale = req.locale
const fallbackLocale = req.fallbackLocale
req = isolateObjectProperty<PayloadRequest>(req, 'locale')
req = isolateObjectProperty<PayloadRequest>(req, 'fallbackLocale')
req.locale = args.locale || locale
req.fallbackLocale = args.fallbackLocale || fallbackLocale
if (!req.query) req.query = {}
const { slug } = globalConfig
const draft: boolean =
args.draft ?? req.query?.draft === 'false'
? false
: req.query?.draft === 'true'
? true
: undefined
if (typeof draft === 'boolean') req.query.draft = String(draft)
context.req = req
const options = {
slug: globalConfig.slug,
data: args.data,
depth: 0,
draft: args.draft,
globalConfig,
req: isolateObjectProperty<PayloadRequest>(context.req, 'transactionID'),
slug,
req: isolateObjectProperty<PayloadRequest>(req, 'transactionID'),
}
const result = await update<TSlug>(options)

View File

@@ -1,3 +1,5 @@
import type { SharpOptions } from 'sharp'
import sharp from 'sharp'
export const percentToPixel = (value: string, dimension: number): number => {
@@ -7,8 +9,14 @@ export const percentToPixel = (value: string, dimension: number): number => {
export default async function cropImage({ cropData, dimensions, file }) {
try {
const fileIsAnimated = ['image/avif', 'image/gif', 'image/webp'].includes(file.mimetype)
const { height, width, x, y } = cropData
const sharpOptions: SharpOptions = {}
if (fileIsAnimated) sharpOptions.animated = true
const formattedCropData: sharp.Region = {
height: percentToPixel(height, dimensions.height),
left: percentToPixel(x, dimensions.width),
@@ -16,7 +24,7 @@ export default async function cropImage({ cropData, dimensions, file }) {
width: percentToPixel(width, dimensions.width),
}
const cropped = sharp(file.tempFilePath || file.data).extract(formattedCropData)
const cropped = sharp(file.tempFilePath || file.data, sharpOptions).extract(formattedCropData)
return await cropped.toBuffer({
resolveWithObject: true,

View File

@@ -121,7 +121,7 @@ export const generateFileData = async <T>({
let newData = data
const filesToSave: FileToSave[] = []
const fileData: Partial<FileData> = {}
const fileIsAnimated = file.mimetype === 'image/gif' || file.mimetype === 'image/webp'
const fileIsAnimated = ['image/avif', 'image/gif', 'image/webp'].includes(file.mimetype)
const cropData =
typeof uploadEdits === 'object' && 'crop' in uploadEdits ? uploadEdits.crop : undefined
@@ -135,7 +135,7 @@ export const generateFileData = async <T>({
let mime: string
const fileHasAdjustments =
fileSupportsResize &&
Boolean(resizeOptions || formatOptions || trimOptions || file.tempFilePath)
Boolean(resizeOptions || formatOptions || imageSizes || trimOptions || file.tempFilePath)
const sharpOptions: SharpOptions = {}
@@ -209,6 +209,7 @@ export const generateFileData = async <T>({
let fileForResize = file
if (cropData) {
const metadata = await sharpFile.metadata()
const { data: croppedImage, info } = await cropImage({ cropData, dimensions, file })
filesToSave.push({
@@ -222,7 +223,7 @@ export const generateFileData = async <T>({
size: info.size,
}
fileData.width = info.width
fileData.height = info.height
fileData.height = fileIsAnimated ? info.height / metadata.pages : info.height
fileData.filesize = info.size
if (file.tempFilePath) {

View File

@@ -1,5 +1,5 @@
import type { UploadedFile } from 'express-fileupload'
import type { OutputInfo } from 'sharp'
import type { OutputInfo, Sharp, SharpOptions } from 'sharp'
import { fromBuffer } from 'file-type'
import fs from 'fs'
@@ -217,7 +217,7 @@ const sanitizeResizeConfig = (resizeConfig: ImageSize): ImageSize => {
*
* The image will be resized according to the provided
* resize config. If no image sizes are requested, the resolved data will be empty.
* For every image that dos not need to be resized, an result object with `null`
* For every image that does not need to be resized, a result object with `null`
* parameters will be returned.
*
* @param resizeConfig - the resize config
@@ -252,7 +252,13 @@ export default async function resizeAndTransformImageSizes({
// Nothing to resize here so return as early as possible
if (!imageSizes) return defaultResult
const sharpBase = sharp(file.tempFilePath || file.data).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081
// Determine if the file is animated
const fileIsAnimated = ['image/avif', 'image/gif', 'image/webp'].includes(file.mimetype)
const sharpOptions: SharpOptions = {}
if (fileIsAnimated) sharpOptions.animated = true
const sharpBase: Sharp | undefined = sharp(file.tempFilePath || file.data, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081
const results: ImageSizesResult[] = await Promise.all(
imageSizes.map(async (imageResizeConfig): Promise<ImageSizesResult> => {
@@ -268,6 +274,8 @@ export default async function resizeAndTransformImageSizes({
const imageToResize = sharpBase.clone()
let resized = imageToResize
const metadata = await sharpBase.metadata()
if (incomingFocalPoint && applyPayloadAdjustments(imageResizeConfig, dimensions)) {
const { height: resizeHeight, width: resizeWidth } = imageResizeConfig
const resizeAspectRatio = resizeWidth / resizeHeight
@@ -289,14 +297,18 @@ export default async function resizeAndTransformImageSizes({
const safeOffsetX = Math.min(Math.max(0, leftFocalEdge), maxOffsetX)
const safeResizeHeight = resizeHeight ?? scaledImageInfo.height
const maxOffsetY = scaledImageInfo.height - safeResizeHeight
const maxOffsetY = fileIsAnimated
? resizeHeight - safeResizeHeight
: scaledImageInfo.height - safeResizeHeight
const topFocalEdge = Math.round(
scaledImageInfo.height * (incomingFocalPoint.y / 100) - safeResizeHeight / 2,
)
const safeOffsetY = Math.min(Math.max(0, topFocalEdge), maxOffsetY)
// extract the focal area from the scaled image
resized = scaledImage.extract({
resized = (fileIsAnimated ? imageToResize : scaledImage).extract({
height: safeResizeHeight,
left: safeOffsetX,
top: safeOffsetY,
@@ -350,7 +362,7 @@ export default async function resizeAndTransformImageSizes({
name: imageResizeConfig.name,
filename: imageNameWithDimensions,
filesize: size,
height,
height: fileIsAnimated ? height / metadata.pages : height,
mimeType: mimeInfo?.mime || mimeType,
sizesToSave: [{ buffer: bufferData, path: imagePath }],
width,

View File

@@ -1,7 +1,7 @@
/**
* Creates a proxy for the given object that has its own property
*/
export default function isolateObjectProperty<T>(object: T, key): T {
export default function isolateObjectProperty<T>(object: T, key: keyof T): T {
const delegate = {}
const handler = {
deleteProperty(target, p): boolean {

128
pnpm-lock.yaml generated
View File

@@ -20,8 +20,8 @@ importers:
specifier: ^7.77.0
version: 7.112.2(react@18.2.0)
ajv:
specifier: ^8.12.0
version: 8.12.0
specifier: 8.14.0
version: 8.14.0
react:
specifier: 18.2.0
version: 18.2.0
@@ -270,6 +270,9 @@ importers:
packages/bundler-webpack:
dependencies:
ajv:
specifier: 8.14.0
version: 8.14.0
compression:
specifier: 1.7.4
version: 1.7.4
@@ -279,9 +282,6 @@ importers:
css-loader:
specifier: 5.2.7
version: 5.2.7(webpack@5.91.0)
css-minimizer-webpack-plugin:
specifier: ^5.0.0
version: 5.0.1(webpack@5.91.0)
file-loader:
specifier: 6.2.0
version: 6.2.0(webpack@5.91.0)
@@ -438,52 +438,6 @@ importers:
specifier: ^29.1.0
version: 29.1.2(@babel/core@7.24.4)(jest@29.7.0)(typescript@5.2.2)
packages/db-example:
dependencies:
bson-objectid:
specifier: 2.0.4
version: 2.0.4
deepmerge:
specifier: 4.3.1
version: 4.3.1
get-port:
specifier: 5.1.1
version: 5.1.1
http-status:
specifier: 1.6.2
version: 1.6.2
mongoose:
specifier: 6.12.3
version: 6.12.3
mongoose-aggregate-paginate-v2:
specifier: 1.0.6
version: 1.0.6
mongoose-paginate-v2:
specifier: 1.7.22
version: 1.7.22
prompts:
specifier: 2.4.2
version: 2.4.2
uuid:
specifier: 9.0.0
version: 9.0.0
devDependencies:
'@payloadcms/eslint-config':
specifier: workspace:*
version: link:../eslint-config-payload
'@types/mongoose-aggregate-paginate-v2':
specifier: 1.0.9
version: 1.0.9
mongodb:
specifier: 4.17.1
version: 4.17.1
mongodb-memory-server:
specifier: ^9
version: 9.2.0
payload:
specifier: workspace:*
version: link:../payload
packages/db-mongodb:
dependencies:
bson-objectid:
@@ -5484,6 +5438,7 @@ packages:
/@trysound/sax@0.2.0:
resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
engines: {node: '>=10.13.0'}
dev: true
/@tsconfig/node10@1.0.11:
resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
@@ -6827,7 +6782,7 @@ packages:
- supports-color
dev: true
/ajv-formats@2.1.1(ajv@8.12.0):
/ajv-formats@2.1.1(ajv@8.14.0):
resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
peerDependencies:
ajv: ^8.0.0
@@ -6835,7 +6790,7 @@ packages:
ajv:
optional: true
dependencies:
ajv: 8.12.0
ajv: 8.14.0
/ajv-keywords@3.5.2(ajv@6.12.6):
resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
@@ -6844,12 +6799,12 @@ packages:
dependencies:
ajv: 6.12.6
/ajv-keywords@5.1.0(ajv@8.12.0):
/ajv-keywords@5.1.0(ajv@8.14.0):
resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
peerDependencies:
ajv: ^8.8.2
dependencies:
ajv: 8.12.0
ajv: 8.14.0
fast-deep-equal: 3.1.3
/ajv@6.12.6:
@@ -6860,8 +6815,8 @@ packages:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
/ajv@8.12.0:
resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
/ajv@8.14.0:
resolution: {integrity: sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==}
dependencies:
fast-deep-equal: 3.1.3
json-schema-traverse: 1.0.0
@@ -7624,6 +7579,7 @@ packages:
caniuse-lite: 1.0.30001612
lodash.memoize: 4.1.2
lodash.uniq: 4.5.0
dev: true
/caniuse-lite@1.0.30001612:
resolution: {integrity: sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==}
@@ -7840,6 +7796,7 @@ packages:
/colord@2.9.3:
resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
dev: true
/colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
@@ -7934,8 +7891,8 @@ packages:
resolution: {integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==}
engines: {node: '>=12'}
dependencies:
ajv: 8.12.0
ajv-formats: 2.1.1(ajv@8.12.0)
ajv: 8.14.0
ajv-formats: 2.1.1(ajv@8.14.0)
atomically: 1.7.0
debounce-fn: 4.0.0
dot-prop: 6.0.1
@@ -8420,6 +8377,7 @@ packages:
postcss: ^8.0.9
dependencies:
postcss: 8.4.31
dev: true
/css-has-pseudo@6.0.3(postcss@8.4.31):
resolution: {integrity: sha512-qIsDxK/z0byH/mpNsv5hzQ5NOl8m1FRmOLgZpx4bG5uYHnOlO2XafeMI4mFIgNSViHwoUWcxSJZyyijaAmbs+A==}
@@ -8482,6 +8440,7 @@ packages:
schema-utils: 4.2.0
serialize-javascript: 6.0.2
webpack: 5.91.0(@swc/core@1.3.107)(webpack-cli@4.10.0)
dev: true
/css-prefers-color-scheme@9.0.1(postcss@8.4.31):
resolution: {integrity: sha512-iFit06ochwCKPRiWagbTa1OAWCvWWVdEnIFd8BaRrgO8YrrNh4RAWUQTFcYX5tdFZgFl1DJ3iiULchZyEbnF4g==}
@@ -8509,6 +8468,7 @@ packages:
domhandler: 5.0.3
domutils: 3.1.0
nth-check: 2.1.1
dev: true
/css-tree@2.2.1:
resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
@@ -8516,6 +8476,7 @@ packages:
dependencies:
mdn-data: 2.0.28
source-map-js: 1.2.0
dev: true
/css-tree@2.3.1:
resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
@@ -8523,6 +8484,7 @@ packages:
dependencies:
mdn-data: 2.0.30
source-map-js: 1.2.0
dev: true
/css-what@6.1.0:
resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
@@ -8581,6 +8543,7 @@ packages:
postcss-reduce-transforms: 6.0.2(postcss@8.4.31)
postcss-svgo: 6.0.3(postcss@8.4.31)
postcss-unique-selectors: 6.0.4(postcss@8.4.31)
dev: true
/cssnano-utils@4.0.2(postcss@8.4.31):
resolution: {integrity: sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==}
@@ -8589,6 +8552,7 @@ packages:
postcss: ^8.4.31
dependencies:
postcss: 8.4.31
dev: true
/cssnano@6.1.2(postcss@8.4.31):
resolution: {integrity: sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==}
@@ -8599,12 +8563,14 @@ packages:
cssnano-preset-default: 6.1.2(postcss@8.4.31)
lilconfig: 3.1.1
postcss: 8.4.31
dev: true
/csso@5.0.5:
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
dependencies:
css-tree: 2.2.1
dev: true
/cssom@0.3.8:
resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==}
@@ -9031,6 +8997,7 @@ packages:
domelementtype: 2.3.0
domhandler: 5.0.3
entities: 4.5.0
dev: true
/domelementtype@2.3.0:
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
@@ -9055,6 +9022,7 @@ packages:
engines: {node: '>= 4'}
dependencies:
domelementtype: 2.3.0
dev: true
/domutils@2.8.0:
resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
@@ -9070,6 +9038,7 @@ packages:
dom-serializer: 2.0.0
domelementtype: 2.3.0
domhandler: 5.0.3
dev: true
/dot-case@3.0.4:
resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
@@ -9269,6 +9238,7 @@ packages:
/entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
dev: true
/env-paths@2.2.1:
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
@@ -12915,6 +12885,7 @@ packages:
/lilconfig@3.1.1:
resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==}
engines: {node: '>=14'}
dev: true
/lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
@@ -13058,6 +13029,7 @@ packages:
/lodash.memoize@4.1.2:
resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
dev: true
/lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
@@ -13069,6 +13041,7 @@ packages:
/lodash.uniq@4.5.0:
resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
dev: true
/lodash.uniqby@4.7.0:
resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==}
@@ -13216,9 +13189,11 @@ packages:
/mdn-data@2.0.28:
resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
dev: true
/mdn-data@2.0.30:
resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
dev: true
/media-typer@0.3.0:
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
@@ -14584,6 +14559,7 @@ packages:
postcss: 8.4.31
postcss-selector-parser: 6.0.16
postcss-value-parser: 4.2.0
dev: true
/postcss-clamp@4.1.0(postcss@8.4.31):
resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==}
@@ -14638,6 +14614,7 @@ packages:
colord: 2.9.3
postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: true
/postcss-convert-values@6.1.0(postcss@8.4.31):
resolution: {integrity: sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==}
@@ -14648,6 +14625,7 @@ packages:
browserslist: 4.23.0
postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: true
/postcss-custom-media@10.0.4(postcss@8.4.31):
resolution: {integrity: sha512-Ubs7O3wj2prghaKRa68VHBvuy3KnTQ0zbGwqDYY1mntxJD0QL2AeiAy+AMfl3HBedTCVr2IcFNktwty9YpSskA==}
@@ -14702,6 +14680,7 @@ packages:
postcss: ^8.4.31
dependencies:
postcss: 8.4.31
dev: true
/postcss-discard-duplicates@6.0.3(postcss@8.4.31):
resolution: {integrity: sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==}
@@ -14710,6 +14689,7 @@ packages:
postcss: ^8.4.31
dependencies:
postcss: 8.4.31
dev: true
/postcss-discard-empty@6.0.3(postcss@8.4.31):
resolution: {integrity: sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==}
@@ -14718,6 +14698,7 @@ packages:
postcss: ^8.4.31
dependencies:
postcss: 8.4.31
dev: true
/postcss-discard-overridden@6.0.2(postcss@8.4.31):
resolution: {integrity: sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==}
@@ -14726,6 +14707,7 @@ packages:
postcss: ^8.4.31
dependencies:
postcss: 8.4.31
dev: true
/postcss-double-position-gradients@5.0.6(postcss@8.4.31):
resolution: {integrity: sha512-QJ+089FKMaqDxOhhIHsJrh4IP7h4PIHNC5jZP5PMmnfUScNu8Hji2lskqpFWCvu+5sj+2EJFyzKd13sLEWOZmQ==}
@@ -14832,6 +14814,7 @@ packages:
postcss: 8.4.31
postcss-value-parser: 4.2.0
stylehacks: 6.1.1(postcss@8.4.31)
dev: true
/postcss-merge-rules@6.1.1(postcss@8.4.31):
resolution: {integrity: sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==}
@@ -14844,6 +14827,7 @@ packages:
cssnano-utils: 4.0.2(postcss@8.4.31)
postcss: 8.4.31
postcss-selector-parser: 6.0.16
dev: true
/postcss-minify-font-values@6.1.0(postcss@8.4.31):
resolution: {integrity: sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==}
@@ -14853,6 +14837,7 @@ packages:
dependencies:
postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: true
/postcss-minify-gradients@6.0.3(postcss@8.4.31):
resolution: {integrity: sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==}
@@ -14864,6 +14849,7 @@ packages:
cssnano-utils: 4.0.2(postcss@8.4.31)
postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: true
/postcss-minify-params@6.1.0(postcss@8.4.31):
resolution: {integrity: sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==}
@@ -14875,6 +14861,7 @@ packages:
cssnano-utils: 4.0.2(postcss@8.4.31)
postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: true
/postcss-minify-selectors@6.0.4(postcss@8.4.31):
resolution: {integrity: sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==}
@@ -14884,6 +14871,7 @@ packages:
dependencies:
postcss: 8.4.31
postcss-selector-parser: 6.0.16
dev: true
/postcss-modules-extract-imports@3.1.0(postcss@8.4.31):
resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==}
@@ -14940,6 +14928,7 @@ packages:
postcss: ^8.4.31
dependencies:
postcss: 8.4.31
dev: true
/postcss-normalize-display-values@6.0.2(postcss@8.4.31):
resolution: {integrity: sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==}
@@ -14949,6 +14938,7 @@ packages:
dependencies:
postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: true
/postcss-normalize-positions@6.0.2(postcss@8.4.31):
resolution: {integrity: sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==}
@@ -14958,6 +14948,7 @@ packages:
dependencies:
postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: true
/postcss-normalize-repeat-style@6.0.2(postcss@8.4.31):
resolution: {integrity: sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==}
@@ -14967,6 +14958,7 @@ packages:
dependencies:
postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: true
/postcss-normalize-string@6.0.2(postcss@8.4.31):
resolution: {integrity: sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==}
@@ -14976,6 +14968,7 @@ packages:
dependencies:
postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: true
/postcss-normalize-timing-functions@6.0.2(postcss@8.4.31):
resolution: {integrity: sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==}
@@ -14985,6 +14978,7 @@ packages:
dependencies:
postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: true
/postcss-normalize-unicode@6.1.0(postcss@8.4.31):
resolution: {integrity: sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==}
@@ -14995,6 +14989,7 @@ packages:
browserslist: 4.23.0
postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: true
/postcss-normalize-url@6.0.2(postcss@8.4.31):
resolution: {integrity: sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==}
@@ -15004,6 +14999,7 @@ packages:
dependencies:
postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: true
/postcss-normalize-whitespace@6.0.2(postcss@8.4.31):
resolution: {integrity: sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==}
@@ -15013,6 +15009,7 @@ packages:
dependencies:
postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: true
/postcss-opacity-percentage@2.0.0(postcss@8.4.31):
resolution: {integrity: sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==}
@@ -15031,6 +15028,7 @@ packages:
cssnano-utils: 4.0.2(postcss@8.4.31)
postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: true
/postcss-overflow-shorthand@5.0.1(postcss@8.4.31):
resolution: {integrity: sha512-XzjBYKLd1t6vHsaokMV9URBt2EwC9a7nDhpQpjoPk2HRTSQfokPfyAS/Q7AOrzUu6q+vp/GnrDBGuj/FCaRqrQ==}
@@ -15139,6 +15137,7 @@ packages:
browserslist: 4.23.0
caniuse-api: 3.0.0
postcss: 8.4.31
dev: true
/postcss-reduce-transforms@6.0.2(postcss@8.4.31):
resolution: {integrity: sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==}
@@ -15148,6 +15147,7 @@ packages:
dependencies:
postcss: 8.4.31
postcss-value-parser: 4.2.0
dev: true
/postcss-replace-overflow-wrap@4.0.0(postcss@8.4.31):
resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==}
@@ -15181,6 +15181,7 @@ packages:
postcss: 8.4.31
postcss-value-parser: 4.2.0
svgo: 3.2.0
dev: true
/postcss-unique-selectors@6.0.4(postcss@8.4.31):
resolution: {integrity: sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==}
@@ -15190,6 +15191,7 @@ packages:
dependencies:
postcss: 8.4.31
postcss-selector-parser: 6.0.16
dev: true
/postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
@@ -16293,9 +16295,9 @@ packages:
engines: {node: '>= 12.13.0'}
dependencies:
'@types/json-schema': 7.0.15
ajv: 8.12.0
ajv-formats: 2.1.1(ajv@8.12.0)
ajv-keywords: 5.1.0(ajv@8.12.0)
ajv: 8.14.0
ajv-formats: 2.1.1(ajv@8.14.0)
ajv-keywords: 5.1.0(ajv@8.14.0)
/scmp@2.1.0:
resolution: {integrity: sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q==}
@@ -16992,6 +16994,7 @@ packages:
browserslist: 4.23.0
postcss: 8.4.31
postcss-selector-parser: 6.0.16
dev: true
/stylis@4.2.0:
resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
@@ -17046,6 +17049,7 @@ packages:
css-what: 6.1.0
csso: 5.0.5
picocolors: 1.0.0
dev: true
/swc-loader@0.2.3(@swc/core@1.3.107)(webpack@5.91.0):
resolution: {integrity: sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A==}

View File

@@ -380,6 +380,29 @@ export default buildConfigWithDefaults({
],
},
],
globals: [
{
slug: 'global-1',
access: {
read: openAccess.read,
update: openAccess.update,
},
fields: [
{
type: 'text',
name: 'title',
},
{
name: 'relationship',
type: 'relationship',
relationTo: 'cyclical-relationship',
},
],
versions: {
drafts: true,
},
},
],
graphQL: {
queries: (GraphQL) => {
return {

View File

@@ -984,6 +984,59 @@ describe('collections-graphql', () => {
expect(queriedDoc.media.title).toEqual('example')
})
})
it('should cascade draft arg with globals', async () => {
// publish relationship doc
const newDoc = await payload.create({
collection: 'cyclical-relationship',
draft: false,
data: {
title: 'published relationship',
},
})
// save draft version relationship doc
await payload.update({
collection: 'cyclical-relationship',
id: newDoc.id,
draft: true,
data: {
title: 'draft relationship',
},
})
// update global (published data)
await payload.updateGlobal({
slug: 'global-1',
data: {
title: 'published title',
relationship: newDoc.id,
},
})
// update global (draft data)
await payload.updateGlobal({
slug: 'global-1',
draft: true,
data: {
title: 'draft title',
},
})
const query = `{
Global1(draft: true) {
title
relationship {
title
}
}
}`
const response = (await client.request(query)) as any
const queriedGlobal = response.Global1
expect(queriedGlobal.title).toEqual('draft title')
expect(queriedGlobal.relationship.title).toEqual('draft relationship')
})
})
describe('Error Handler', () => {

View File

@@ -78,6 +78,26 @@ describe('fields', () => {
).toBeHidden()
})
test('should not display admin.disableListColumn true field in list view column selector if toggling other fields', async () => {
await page.goto(url.list)
await page.locator('.list-controls__toggle-columns').click()
await expect(page.locator('.column-selector')).toBeVisible()
// Click another field in column selector
const updatedAtButton = page.locator(`.column-selector .column-selector__column`, {
hasText: exactText('Updated At'),
})
await updatedAtButton.click()
// Check if "Disable List Column Text" is not present in the column options
await expect(
page.locator(`.column-selector .column-selector__column`, {
hasText: exactText('Disable List Column Text'),
}),
).toBeHidden()
})
test('should display field in list view filter selector if admin.disableListColumn is true and admin.disableListFilter is false', async () => {
await page.goto(url.list)
await page.locator('.list-controls__toggle-where').click()