Merge remote-tracking branch 'myori/main' into feat/collaboration2

This commit is contained in:
hjlarry
2026-01-17 12:24:37 +08:00
23 changed files with 416 additions and 306 deletions

View File

@ -67,15 +67,17 @@ const CardView: FC<ICardViewProps> = ({ appId, isInPanel, className }) => {
<div className="text-xs text-text-secondary">
{t('overview.disableTooltip.triggerMode', { ns: 'appOverview', feature: featureName })}
</div>
<div
className="cursor-pointer text-xs font-medium text-text-accent hover:underline"
<a
href={triggerDocUrl}
target="_blank"
rel="noopener noreferrer"
className="block cursor-pointer text-xs font-medium text-text-accent hover:underline"
onClick={(event) => {
event.stopPropagation()
window.open(triggerDocUrl, '_blank')
}}
>
{t('overview.appInfo.enableTooltip.learnMore', { ns: 'appOverview' })}
</div>
</a>
</div>
), [t, triggerDocUrl])

View File

@ -20,6 +20,7 @@ const SearchInput: FC<SearchInputProps> = ({
white,
}) => {
const { t } = useTranslation()
const inputRef = useRef<HTMLInputElement>(null)
const [focus, setFocus] = useState<boolean>(false)
const isComposing = useRef<boolean>(false)
const [compositionValue, setCompositionValue] = useState<string>('')
@ -36,6 +37,7 @@ const SearchInput: FC<SearchInputProps> = ({
<RiSearchLine className="h-4 w-4 text-components-input-text-placeholder" aria-hidden="true" />
</div>
<input
ref={inputRef}
type="text"
name="query"
className={cn(
@ -65,14 +67,17 @@ const SearchInput: FC<SearchInputProps> = ({
autoComplete="off"
/>
{value && (
<div
className="group/clear flex h-4 w-4 shrink-0 cursor-pointer items-center justify-center"
<button
type="button"
aria-label={t('operation.clear', { ns: 'common' })}
className="group/clear flex h-4 w-4 shrink-0 cursor-pointer items-center justify-center border-none bg-transparent p-0"
onClick={() => {
onChange('')
inputRef.current?.focus()
}}
>
<RiCloseCircleFill className="h-4 w-4 text-text-quaternary group-hover/clear:text-text-tertiary" />
</div>
</button>
)}
</div>
)

View File

@ -442,6 +442,10 @@ const Completed: FC<ICompletedProps> = ({
setFullScreen(!fullScreen)
}, [fullScreen])
const toggleCollapsed = useCallback(() => {
setIsCollapsed(prev => !prev)
}, [])
const viewNewlyAddedChunk = useCallback(async () => {
const totalPages = segmentListData?.total_pages || 0
const total = segmentListData?.total || 0
@ -578,15 +582,16 @@ const Completed: FC<ICompletedProps> = ({
return selectedStatus ? 1 : 0
}, [selectedStatus])
const contextValue = useMemo<SegmentListContextValue>(() => ({
isCollapsed,
fullScreen,
toggleFullScreen,
currSegment,
currChildChunk,
}), [isCollapsed, fullScreen, toggleFullScreen, currSegment, currChildChunk])
return (
<SegmentListContext.Provider value={{
isCollapsed,
fullScreen,
toggleFullScreen,
currSegment,
currChildChunk,
}}
>
<SegmentListContext.Provider value={contextValue}>
{/* Menu Bar */}
{!isFullDocMode && (
<div className={s.docSearchWrapper}>
@ -618,7 +623,7 @@ const Completed: FC<ICompletedProps> = ({
onClear={() => handleInputChange('')}
/>
<Divider type="vertical" className="mx-3 h-3.5" />
<DisplayToggle isCollapsed={isCollapsed} toggleCollapsed={() => setIsCollapsed(!isCollapsed)} />
<DisplayToggle isCollapsed={isCollapsed} toggleCollapsed={toggleCollapsed} />
</div>
)}
{/* Segment list */}

View File

@ -1,4 +1,5 @@
import type { FC } from 'react'
import type { SegmentListContextValue } from '..'
import * as React from 'react'
import { Markdown } from '@/app/components/base/markdown'
import { cn } from '@/utils/classnames'
@ -14,13 +15,15 @@ type ChunkContentProps = {
className?: string
}
const selectIsCollapsed = (s: SegmentListContextValue) => s.isCollapsed
const ChunkContent: FC<ChunkContentProps> = ({
detail,
isFullDocMode,
className,
}) => {
const { answer, content, sign_content } = detail
const isCollapsed = useSegmentListContext(s => s.isCollapsed)
const isCollapsed = useSegmentListContext(selectIsCollapsed)
if (answer) {
return (

View File

@ -5,6 +5,7 @@ import type { NodeOutPutVar, Variable } from '@/app/components/workflow/types'
import { useBoolean } from 'ahooks'
import * as React from 'react'
import { useEffect, useRef, useState } from 'react'
import { createPortal } from 'react-dom'
import { useTranslation } from 'react-i18next'
import VarReferenceVars from '@/app/components/workflow/nodes/_base/components/variable/var-reference-vars'
import { cn } from '@/utils/classnames'
@ -147,7 +148,7 @@ const CodeEditor: FC<Props> = ({
onMount={onEditorMounted}
placeholder={t('common.jinjaEditorPlaceholder', { ns: 'workflow' })!}
/>
{isShowVarPicker && (
{isShowVarPicker && createPortal(
<div
ref={popupRef}
className="w-[228px] space-y-1 rounded-lg border border-components-panel-border bg-components-panel-bg p-1 shadow-lg"
@ -164,7 +165,8 @@ const CodeEditor: FC<Props> = ({
onChange={handleSelectVar}
isSupportFileVar={false}
/>
</div>
</div>,
document.body,
)}
</div>
)

View File

@ -26,7 +26,8 @@ export default antfu(
'react-hooks/preserve-manual-memoization': 'warn',
'react-hooks/purity': 'warn',
'react-hooks/refs': 'warn',
'react-hooks/set-state-in-effect': 'warn',
// prefer react-hooks-extra/no-direct-set-state-in-use-effect
'react-hooks/set-state-in-effect': 'off',
'react-hooks/set-state-in-render': 'warn',
'react-hooks/static-components': 'warn',
'react-hooks/unsupported-syntax': 'warn',
@ -53,6 +54,14 @@ export default antfu(
},
},
},
{
files: ['**/*.ts', '**/*.tsx'],
settings: {
'react-x': {
additionalStateHooks: '/^use\\w*State(?:s)?|useAtom$/u',
},
},
},
// downgrade some rules from error to warn for gradual adoption
// we should fix these in following pull requests
{

View File

@ -155,9 +155,9 @@
"zustand": "^5.0.9"
},
"devDependencies": {
"@antfu/eslint-config": "^6.7.3",
"@antfu/eslint-config": "^7.0.1",
"@chromatic-com/storybook": "^4.1.1",
"@eslint-react/eslint-plugin": "^2.3.13",
"@eslint-react/eslint-plugin": "^2.7.0",
"@mdx-js/loader": "^3.1.1",
"@mdx-js/react": "^3.1.1",
"@next/bundle-analyzer": "15.5.9",
@ -192,7 +192,7 @@
"@types/semver": "^7.7.1",
"@types/sortablejs": "^1.15.8",
"@types/uuid": "^10.0.0",
"@typescript-eslint/parser": "^8.50.0",
"@typescript-eslint/parser": "^8.53.0",
"@typescript/native-preview": "^7.0.0-dev",
"@vitejs/plugin-react": "^5.1.2",
"@vitest/coverage-v8": "4.0.16",
@ -204,7 +204,7 @@
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.4.26",
"eslint-plugin-sonarjs": "^3.0.5",
"eslint-plugin-storybook": "^10.1.10",
"eslint-plugin-storybook": "^10.1.11",
"eslint-plugin-tailwindcss": "^3.18.2",
"husky": "^9.1.7",
"jsdom": "^27.3.0",
@ -227,7 +227,6 @@
},
"pnpm": {
"overrides": {
"@eslint/plugin-kit@<0.3.4": "0.3.4",
"@monaco-editor/loader": "1.5.0",
"@nolyfill/safe-buffer": "npm:safe-buffer@^5.2.1",
"array-includes": "npm:@nolyfill/array-includes@^1",
@ -278,7 +277,6 @@
]
},
"resolutions": {
"@eslint/plugin-kit": "~0.3",
"@types/react": "~19.2.7",
"@types/react-dom": "~19.2.3",
"brace-expansion": "~2.0",

200
web/pnpm-lock.yaml generated
View File

@ -5,7 +5,6 @@ settings:
excludeLinksFromLockfile: false
overrides:
'@eslint/plugin-kit': ~0.3
'@types/react': ~19.2.7
'@types/react-dom': ~19.2.3
brace-expansion: ~2.0
@ -13,7 +12,6 @@ overrides:
pbkdf2: ~3.1.3
prismjs: ~1.30
string-width: ~4.2.3
'@eslint/plugin-kit@<0.3.4': 0.3.4
'@monaco-editor/loader': 1.5.0
'@nolyfill/safe-buffer': npm:safe-buffer@^5.2.1
array-includes: npm:@nolyfill/array-includes@^1
@ -368,13 +366,13 @@ importers:
version: 5.0.10(@types/react@19.2.8)(immer@11.1.3)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3))
devDependencies:
'@antfu/eslint-config':
specifier: ^6.7.3
version: 6.7.3(@eslint-react/eslint-plugin@2.7.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(@next/eslint-plugin-next@15.5.9)(@vue/compiler-sfc@3.5.17)(eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@1.21.7)))(eslint-plugin-react-refresh@0.4.26(eslint@9.39.2(jiti@1.21.7)))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)(vitest@4.0.17(@types/node@18.15.0)(happy-dom@20.0.8)(jiti@1.21.7)(jsdom@27.4.0(canvas@3.2.0))(sass@1.93.2)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))
specifier: ^7.0.1
version: 7.0.1(@eslint-react/eslint-plugin@2.7.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(@next/eslint-plugin-next@15.5.9)(@vue/compiler-sfc@3.5.17)(eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@1.21.7)))(eslint-plugin-react-refresh@0.4.26(eslint@9.39.2(jiti@1.21.7)))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)(vitest@4.0.17(@types/node@18.15.0)(happy-dom@20.0.8)(jiti@1.21.7)(jsdom@27.4.0(canvas@3.2.0))(sass@1.93.2)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))
'@chromatic-com/storybook':
specifier: ^4.1.1
version: 4.1.1(storybook@9.1.17(@testing-library/dom@10.4.1)(vite@7.3.1(@types/node@18.15.0)(jiti@1.21.7)(sass@1.93.2)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2)))
'@eslint-react/eslint-plugin':
specifier: ^2.3.13
specifier: ^2.7.0
version: 2.7.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)
'@mdx-js/loader':
specifier: ^3.1.1
@ -479,7 +477,7 @@ importers:
specifier: ^10.0.0
version: 10.0.0
'@typescript-eslint/parser':
specifier: ^8.50.0
specifier: ^8.53.0
version: 8.53.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)
'@typescript/native-preview':
specifier: ^7.0.0-dev
@ -515,7 +513,7 @@ importers:
specifier: ^3.0.5
version: 3.0.5(eslint@9.39.2(jiti@1.21.7))
eslint-plugin-storybook:
specifier: ^10.1.10
specifier: ^10.1.11
version: 10.1.11(eslint@9.39.2(jiti@1.21.7))(storybook@9.1.17(@testing-library/dom@10.4.1)(vite@7.3.1(@types/node@18.15.0)(jiti@1.21.7)(sass@1.93.2)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2)))(typescript@5.9.3)
eslint-plugin-tailwindcss:
specifier: ^3.18.2
@ -655,8 +653,8 @@ packages:
'@amplitude/targeting@0.2.0':
resolution: {integrity: sha512-/50ywTrC4hfcfJVBbh5DFbqMPPfaIOivZeb5Gb+OGM03QrA+lsUqdvtnKLNuWtceD4H6QQ2KFzPJ5aAJLyzVDA==}
'@antfu/eslint-config@6.7.3':
resolution: {integrity: sha512-0tYYzY59uLnxWgbP9xpuxpvodTcWDacj439kTAJZB3sn7O0BnPfVxTnRvleGYaKCEALBZkzdC/wCho9FD7ICLw==}
'@antfu/eslint-config@7.0.1':
resolution: {integrity: sha512-QbCDrLPo2Bpn9/W5PnpGvUuD/EIKhiCmLBuIj9ylxeMvl47XSkXy3MZyinqUVsBJzk196B7BcJQByDZRr5TbZQ==}
hasBin: true
peerDependencies:
'@eslint-react/eslint-plugin': ^2.0.1
@ -1482,6 +1480,10 @@ packages:
resolution: {integrity: sha512-rQkU5u8hNAq2NVRzHnIUUvR6arbO0b6AOlvpTNS48CkiKSn/xtNfOzBK23JE4SiW89DgvU7GtxLVgV4Vn2HBAw==}
engines: {node: '>=20.11.0'}
'@es-joy/jsdoccomment@0.79.0':
resolution: {integrity: sha512-q/Nc241VsVRC5b1dgbsOI0fnWfrb1S9sdceFewpDHto4+4r2o6SSCpcY+Z+EdLdMPN6Nsj/PjlPcKag6WbU6XQ==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@es-joy/resolve.exports@1.2.0':
resolution: {integrity: sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==}
engines: {node: '>=10'}
@ -1642,8 +1644,8 @@ packages:
cpu: [x64]
os: [win32]
'@eslint-community/eslint-plugin-eslint-comments@4.5.0':
resolution: {integrity: sha512-MAhuTKlr4y/CE3WYX26raZjy+I/kS2PLKSzvfmDCGrBLTFHOYwqROZdr4XwPgXwX3K9rjzMr4pSmUWGnzsUyMg==}
'@eslint-community/eslint-plugin-eslint-comments@4.6.0':
resolution: {integrity: sha512-2EX2bBQq1ez++xz2o9tEeEQkyvfieWgUFMH4rtJJri2q0Azvhja3hZGXsjPXs31R4fQkZDtWzNDDK2zQn5UE5g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
@ -1724,10 +1726,6 @@ packages:
resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/core@0.15.2':
resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/core@0.16.0':
resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@ -1736,6 +1734,10 @@ packages:
resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/core@1.0.1':
resolution: {integrity: sha512-r18fEAj9uCk+VjzGt2thsbOmychS+4kxI14spVNibUO2vqKX7obOG+ymZljAwuPZl+S3clPGwCwTDtrdqTiY6Q==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@eslint/eslintrc@3.3.1':
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@ -1752,10 +1754,14 @@ packages:
resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/plugin-kit@0.3.5':
resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==}
'@eslint/plugin-kit@0.4.1':
resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/plugin-kit@0.5.1':
resolution: {integrity: sha512-hZ2uC1jbf6JMSsF2ZklhRQqf6GLpYyux6DlzegnW/aFlpu6qJj5GO7ub7WOETCrEl6pl6DAX7RgTgj/fyG+6BQ==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@exodus/bytes@1.8.0':
resolution: {integrity: sha512-8JPn18Bcp8Uo1T82gR8lh2guEOa5KKU/IEKvvdp0sgmi7coPBWf1Doi1EXsGZb2ehc8ym/StJCjffYV+ne7sXQ==}
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
@ -5165,8 +5171,8 @@ packages:
peerDependencies:
eslint: '*'
eslint-plugin-antfu@3.1.1:
resolution: {integrity: sha512-7Q+NhwLfHJFvopI2HBZbSxWXngTwBLKxW1AGXLr2lEGxcEIK/AsDs8pn8fvIizl5aZjBbVbVK5ujmMpBe4Tvdg==}
eslint-plugin-antfu@3.1.3:
resolution: {integrity: sha512-Az1QuqQJ/c2efWCxVxF249u3D4AcAu1Y3VCGAlJm+x4cgnn1ybUAnCT5DWVcogeaWduQKeVw07YFydVTOF4xDw==}
peerDependencies:
eslint: '*'
@ -5181,19 +5187,15 @@ packages:
peerDependencies:
eslint: '>=8'
eslint-plugin-import-lite@0.4.0:
resolution: {integrity: sha512-My0ReAg8WbHXYECIHVJkWB8UxrinZn3m72yonOYH6MFj40ZN1vHYQj16iq2Fd8Wrt/vRZJwDX2xm/BzDk1FzTg==}
eslint-plugin-import-lite@0.5.0:
resolution: {integrity: sha512-7uBvxuQj+VlYmZSYSHcm33QgmZnvMLP2nQiWaLtjhJ5x1zKcskOqjolL+dJC13XY+ktQqBgidAnnQMELfRaXQg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: '>=9.0.0'
typescript: '>=4.5'
peerDependenciesMeta:
typescript:
optional: true
eslint-plugin-jsdoc@61.7.1:
resolution: {integrity: sha512-36DpldF95MlTX//n3/naULFVt8d1cV4jmSkx7ZKrE9ikkKHAgMLesuWp1SmwpVwAs5ndIM6abKd6PeOYZUgdWg==}
engines: {node: '>=20.11.0'}
eslint-plugin-jsdoc@62.0.0:
resolution: {integrity: sha512-sNdIGLAvjFK3pB0SYFW74iXODZ4ifF8Ax13Wgq8jKepKnrCFzGo7+jRZfLf70h81SD7lPYnTE7MR2nhYSvaLTA==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
@ -5203,8 +5205,8 @@ packages:
peerDependencies:
eslint: '>=6.0.0'
eslint-plugin-n@17.23.1:
resolution: {integrity: sha512-68PealUpYoHOBh332JLLD9Sj7OQUDkFpmcfqt8R9sySfFSeuGJjMTJQvCRRB96zO3A/PELRLkPrzsHmzEFQQ5A==}
eslint-plugin-n@17.23.2:
resolution: {integrity: sha512-RhWBeb7YVPmNa2eggvJooiuehdL76/bbfj/OJewyoGT80qn5PXdz8zMOTO6YHOsI7byPt7+Ighh/i/4a5/v7hw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: '>=8.23.0'
@ -5213,9 +5215,9 @@ packages:
resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==}
engines: {node: '>=5.0.0'}
eslint-plugin-perfectionist@4.15.1:
resolution: {integrity: sha512-MHF0cBoOG0XyBf7G0EAFCuJJu4I18wy0zAoT1OHfx2o6EOx1EFTIzr2HGeuZa1kDcusoX0xJ9V7oZmaeFd773Q==}
engines: {node: ^18.0.0 || >=20.0.0}
eslint-plugin-perfectionist@5.3.1:
resolution: {integrity: sha512-v8kAP8TarQYqDC4kxr343ZNi++/oOlBnmWovsUZpbJ7A/pq1VHGlgsf/fDh4CdEvEstzkrc8NLvoVKtfpsC4oA==}
engines: {node: ^20.0.0 || >=22.0.0}
peerDependencies:
eslint: '>=8.45.0'
@ -5293,11 +5295,11 @@ packages:
peerDependencies:
tailwindcss: ^3.4.0
eslint-plugin-toml@0.12.0:
resolution: {integrity: sha512-+/wVObA9DVhwZB1nG83D2OAQRrcQZXy+drqUnFJKymqnmbnbfg/UPmEMCKrJNcEboUGxUjYrJlgy+/Y930mURQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
eslint-plugin-toml@1.0.0:
resolution: {integrity: sha512-ACotflJMZ9CKCZlc0nznBxRNbiOYcBqWmXUSoKsGf6cyDV7EN1kGoD/WKnMo/lEsIF0WnzaYXcOU1HBOoyxRrg==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
peerDependencies:
eslint: '>=6.0.0'
eslint: '>=9.38.0'
eslint-plugin-unicorn@62.0.0:
resolution: {integrity: sha512-HIlIkGLkvf29YEiS/ImuDZQbP12gWyx5i3C6XrRxMvVdqMroCI9qoVYCoIl17ChN+U89pn9sVwLxhIWj5nEc7g==}
@ -5681,6 +5683,10 @@ packages:
resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==}
engines: {node: '>=18'}
globals@17.0.0:
resolution: {integrity: sha512-gv5BeD2EssA793rlFWVPMMCqefTlpusw6/2TbAVMy0FzcG8wKJn4O+NqJ4+XWmmwrayJgw5TzrmWjFgmz1XPqw==}
engines: {node: '>=18'}
globrex@0.1.2:
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
@ -8056,9 +8062,9 @@ packages:
toggle-selection@1.0.6:
resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
toml-eslint-parser@0.10.1:
resolution: {integrity: sha512-9mjy3frhioGIVGcwamlVlUyJ9x+WHw/TXiz9R4YOlmsIuBN43r9Dp8HZ35SF9EKjHrn3BUZj04CF+YqZ2oJ+7w==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
toml-eslint-parser@1.0.3:
resolution: {integrity: sha512-A5F0cM6+mDleacLIEUkmfpkBbnHJFV1d2rprHU2MXNk7mlxHq2zGojA+SRvQD1RoMo9gqjZPWEaKG4v1BQ48lw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
totalist@3.0.1:
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
@ -8898,11 +8904,11 @@ snapshots:
idb: 8.0.0
tslib: 2.8.1
'@antfu/eslint-config@6.7.3(@eslint-react/eslint-plugin@2.7.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(@next/eslint-plugin-next@15.5.9)(@vue/compiler-sfc@3.5.17)(eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@1.21.7)))(eslint-plugin-react-refresh@0.4.26(eslint@9.39.2(jiti@1.21.7)))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)(vitest@4.0.17(@types/node@18.15.0)(happy-dom@20.0.8)(jiti@1.21.7)(jsdom@27.4.0(canvas@3.2.0))(sass@1.93.2)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))':
'@antfu/eslint-config@7.0.1(@eslint-react/eslint-plugin@2.7.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(@next/eslint-plugin-next@15.5.9)(@vue/compiler-sfc@3.5.17)(eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@1.21.7)))(eslint-plugin-react-refresh@0.4.26(eslint@9.39.2(jiti@1.21.7)))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)(vitest@4.0.17(@types/node@18.15.0)(happy-dom@20.0.8)(jiti@1.21.7)(jsdom@27.4.0(canvas@3.2.0))(sass@1.93.2)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@antfu/install-pkg': 1.1.0
'@clack/prompts': 0.11.0
'@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.39.2(jiti@1.21.7))
'@eslint-community/eslint-plugin-eslint-comments': 4.6.0(eslint@9.39.2(jiti@1.21.7))
'@eslint/markdown': 7.5.1
'@stylistic/eslint-plugin': 5.7.0(eslint@9.39.2(jiti@1.21.7))
'@typescript-eslint/eslint-plugin': 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)
@ -8914,27 +8920,27 @@ snapshots:
eslint-config-flat-gitignore: 2.1.0(eslint@9.39.2(jiti@1.21.7))
eslint-flat-config-utils: 2.1.4
eslint-merge-processors: 2.0.0(eslint@9.39.2(jiti@1.21.7))
eslint-plugin-antfu: 3.1.1(eslint@9.39.2(jiti@1.21.7))
eslint-plugin-antfu: 3.1.3(eslint@9.39.2(jiti@1.21.7))
eslint-plugin-command: 3.4.0(eslint@9.39.2(jiti@1.21.7))
eslint-plugin-import-lite: 0.4.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)
eslint-plugin-jsdoc: 61.7.1(eslint@9.39.2(jiti@1.21.7))
eslint-plugin-import-lite: 0.5.0(eslint@9.39.2(jiti@1.21.7))
eslint-plugin-jsdoc: 62.0.0(eslint@9.39.2(jiti@1.21.7))
eslint-plugin-jsonc: 2.21.0(eslint@9.39.2(jiti@1.21.7))
eslint-plugin-n: 17.23.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)
eslint-plugin-n: 17.23.2(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)
eslint-plugin-no-only-tests: 3.3.0
eslint-plugin-perfectionist: 4.15.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)
eslint-plugin-perfectionist: 5.3.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)
eslint-plugin-pnpm: 1.4.3(eslint@9.39.2(jiti@1.21.7))
eslint-plugin-regexp: 2.10.0(eslint@9.39.2(jiti@1.21.7))
eslint-plugin-toml: 0.12.0(eslint@9.39.2(jiti@1.21.7))
eslint-plugin-toml: 1.0.0(eslint@9.39.2(jiti@1.21.7))
eslint-plugin-unicorn: 62.0.0(eslint@9.39.2(jiti@1.21.7))
eslint-plugin-unused-imports: 4.3.0(@typescript-eslint/eslint-plugin@8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7))
eslint-plugin-vue: 10.7.0(@stylistic/eslint-plugin@5.7.0(eslint@9.39.2(jiti@1.21.7)))(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@1.21.7)))
eslint-plugin-yml: 1.19.1(eslint@9.39.2(jiti@1.21.7))
eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.39.2(jiti@1.21.7))
globals: 16.5.0
globals: 17.0.0
jsonc-eslint-parser: 2.4.2
local-pkg: 1.1.2
parse-gitignore: 2.0.0
toml-eslint-parser: 0.10.1
toml-eslint-parser: 1.0.3
vue-eslint-parser: 10.2.0(eslint@9.39.2(jiti@1.21.7))
yaml-eslint-parser: 1.3.2
optionalDependencies:
@ -9987,7 +9993,15 @@ snapshots:
'@types/estree': 1.0.8
'@typescript-eslint/types': 8.53.0
comment-parser: 1.4.1
esquery: 1.6.0
esquery: 1.7.0
jsdoc-type-pratt-parser: 7.0.0
'@es-joy/jsdoccomment@0.79.0':
dependencies:
'@types/estree': 1.0.8
'@typescript-eslint/types': 8.53.0
comment-parser: 1.4.1
esquery: 1.7.0
jsdoc-type-pratt-parser: 7.0.0
'@es-joy/resolve.exports@1.2.0': {}
@ -10070,11 +10084,11 @@ snapshots:
'@esbuild/win32-x64@0.27.2':
optional: true
'@eslint-community/eslint-plugin-eslint-comments@4.5.0(eslint@9.39.2(jiti@1.21.7))':
'@eslint-community/eslint-plugin-eslint-comments@4.6.0(eslint@9.39.2(jiti@1.21.7))':
dependencies:
escape-string-regexp: 4.0.0
eslint: 9.39.2(jiti@1.21.7)
ignore: 5.3.2
ignore: 7.0.5
'@eslint-community/eslint-utils@4.9.0(eslint@9.39.2(jiti@1.21.7))':
dependencies:
@ -10181,10 +10195,6 @@ snapshots:
dependencies:
'@eslint/core': 0.17.0
'@eslint/core@0.15.2':
dependencies:
'@types/json-schema': 7.0.15
'@eslint/core@0.16.0':
dependencies:
'@types/json-schema': 7.0.15
@ -10193,6 +10203,10 @@ snapshots:
dependencies:
'@types/json-schema': 7.0.15
'@eslint/core@1.0.1':
dependencies:
'@types/json-schema': 7.0.15
'@eslint/eslintrc@3.3.1':
dependencies:
ajv: 6.12.6
@ -10212,7 +10226,7 @@ snapshots:
'@eslint/markdown@7.5.1':
dependencies:
'@eslint/core': 0.17.0
'@eslint/plugin-kit': 0.3.5
'@eslint/plugin-kit': 0.4.1
github-slugger: 2.0.0
mdast-util-from-markdown: 2.0.2
mdast-util-frontmatter: 2.0.1
@ -10225,9 +10239,14 @@ snapshots:
'@eslint/object-schema@2.1.7': {}
'@eslint/plugin-kit@0.3.5':
'@eslint/plugin-kit@0.4.1':
dependencies:
'@eslint/core': 0.15.2
'@eslint/core': 0.17.0
levn: 0.4.1
'@eslint/plugin-kit@0.5.1':
dependencies:
'@eslint/core': 1.0.1
levn: 0.4.1
'@exodus/bytes@1.8.0': {}
@ -13896,14 +13915,14 @@ snapshots:
eslint-json-compat-utils@0.2.1(eslint@9.39.2(jiti@1.21.7))(jsonc-eslint-parser@2.4.2):
dependencies:
eslint: 9.39.2(jiti@1.21.7)
esquery: 1.6.0
esquery: 1.7.0
jsonc-eslint-parser: 2.4.2
eslint-merge-processors@2.0.0(eslint@9.39.2(jiti@1.21.7)):
dependencies:
eslint: 9.39.2(jiti@1.21.7)
eslint-plugin-antfu@3.1.1(eslint@9.39.2(jiti@1.21.7)):
eslint-plugin-antfu@3.1.3(eslint@9.39.2(jiti@1.21.7)):
dependencies:
eslint: 9.39.2(jiti@1.21.7)
@ -13914,20 +13933,18 @@ snapshots:
eslint-plugin-es-x@7.8.0(eslint@9.39.2(jiti@1.21.7)):
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@1.21.7))
'@eslint-community/regexpp': 4.12.1
'@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@1.21.7))
'@eslint-community/regexpp': 4.12.2
eslint: 9.39.2(jiti@1.21.7)
eslint-compat-utils: 0.5.1(eslint@9.39.2(jiti@1.21.7))
eslint-plugin-import-lite@0.4.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3):
eslint-plugin-import-lite@0.5.0(eslint@9.39.2(jiti@1.21.7)):
dependencies:
eslint: 9.39.2(jiti@1.21.7)
optionalDependencies:
typescript: 5.9.3
eslint-plugin-jsdoc@61.7.1(eslint@9.39.2(jiti@1.21.7)):
eslint-plugin-jsdoc@62.0.0(eslint@9.39.2(jiti@1.21.7)):
dependencies:
'@es-joy/jsdoccomment': 0.78.0
'@es-joy/jsdoccomment': 0.79.0
'@es-joy/resolve.exports': 1.2.0
are-docs-informative: 0.0.2
comment-parser: 1.4.1
@ -13947,7 +13964,7 @@ snapshots:
eslint-plugin-jsonc@2.21.0(eslint@9.39.2(jiti@1.21.7)):
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@1.21.7))
'@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@1.21.7))
diff-sequences: 27.5.1
eslint: 9.39.2(jiti@1.21.7)
eslint-compat-utils: 0.6.5(eslint@9.39.2(jiti@1.21.7))
@ -13960,9 +13977,9 @@ snapshots:
transitivePeerDependencies:
- '@eslint/json'
eslint-plugin-n@17.23.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3):
eslint-plugin-n@17.23.2(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3):
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@1.21.7))
'@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@1.21.7))
enhanced-resolve: 5.18.3
eslint: 9.39.2(jiti@1.21.7)
eslint-plugin-es-x: 7.8.0(eslint@9.39.2(jiti@1.21.7))
@ -13977,10 +13994,9 @@ snapshots:
eslint-plugin-no-only-tests@3.3.0: {}
eslint-plugin-perfectionist@4.15.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3):
eslint-plugin-perfectionist@5.3.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3):
dependencies:
'@typescript-eslint/types': 8.46.1
'@typescript-eslint/utils': 8.46.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)
'@typescript-eslint/utils': 8.53.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)
eslint: 9.39.2(jiti@1.21.7)
natural-orderby: 5.0.0
transitivePeerDependencies:
@ -14108,8 +14124,8 @@ snapshots:
eslint-plugin-regexp@2.10.0(eslint@9.39.2(jiti@1.21.7)):
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@1.21.7))
'@eslint-community/regexpp': 4.12.1
'@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@1.21.7))
'@eslint-community/regexpp': 4.12.2
comment-parser: 1.4.1
eslint: 9.39.2(jiti@1.21.7)
jsdoc-type-pratt-parser: 4.8.0
@ -14133,7 +14149,7 @@ snapshots:
eslint-plugin-storybook@10.1.11(eslint@9.39.2(jiti@1.21.7))(storybook@9.1.17(@testing-library/dom@10.4.1)(vite@7.3.1(@types/node@18.15.0)(jiti@1.21.7)(sass@1.93.2)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2)))(typescript@5.9.3):
dependencies:
'@typescript-eslint/utils': 8.46.1(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)
'@typescript-eslint/utils': 8.53.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)
eslint: 9.39.2(jiti@1.21.7)
storybook: 9.1.17(@testing-library/dom@10.4.1)(vite@7.3.1(@types/node@18.15.0)(jiti@1.21.7)(sass@1.93.2)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))
transitivePeerDependencies:
@ -14146,27 +14162,27 @@ snapshots:
postcss: 8.5.6
tailwindcss: 3.4.18(tsx@4.21.0)(yaml@2.8.2)
eslint-plugin-toml@0.12.0(eslint@9.39.2(jiti@1.21.7)):
eslint-plugin-toml@1.0.0(eslint@9.39.2(jiti@1.21.7)):
dependencies:
'@eslint/core': 1.0.1
'@eslint/plugin-kit': 0.5.1
debug: 4.4.3
eslint: 9.39.2(jiti@1.21.7)
eslint-compat-utils: 0.6.5(eslint@9.39.2(jiti@1.21.7))
lodash: 4.17.21
toml-eslint-parser: 0.10.1
toml-eslint-parser: 1.0.3
transitivePeerDependencies:
- supports-color
eslint-plugin-unicorn@62.0.0(eslint@9.39.2(jiti@1.21.7)):
dependencies:
'@babel/helper-validator-identifier': 7.28.5
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@1.21.7))
'@eslint/plugin-kit': 0.3.5
'@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@1.21.7))
'@eslint/plugin-kit': 0.4.1
change-case: 5.4.4
ci-info: 4.3.1
clean-regexp: 1.0.0
core-js-compat: 3.46.0
eslint: 9.39.2(jiti@1.21.7)
esquery: 1.6.0
esquery: 1.7.0
find-up-simple: 1.0.1
globals: 16.5.0
indent-string: 5.0.0
@ -14186,7 +14202,7 @@ snapshots:
eslint-plugin-vue@10.7.0(@stylistic/eslint-plugin@5.7.0(eslint@9.39.2(jiti@1.21.7)))(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@1.21.7))):
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@1.21.7))
'@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@1.21.7))
eslint: 9.39.2(jiti@1.21.7)
natural-compare: 1.4.0
nth-check: 2.1.1
@ -14240,7 +14256,7 @@ snapshots:
'@eslint/core': 0.17.0
'@eslint/eslintrc': 3.3.1
'@eslint/js': 9.39.2
'@eslint/plugin-kit': 0.3.5
'@eslint/plugin-kit': 0.4.1
'@humanfs/node': 0.16.7
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.3
@ -14597,6 +14613,8 @@ snapshots:
globals@16.5.0: {}
globals@17.0.0: {}
globrex@0.1.2: {}
goober@2.1.18(csstype@3.2.3):
@ -17554,9 +17572,9 @@ snapshots:
toggle-selection@1.0.6: {}
toml-eslint-parser@0.10.1:
toml-eslint-parser@1.0.3:
dependencies:
eslint-visitor-keys: 3.4.3
eslint-visitor-keys: 5.0.0
totalist@3.0.1: {}
@ -17933,7 +17951,7 @@ snapshots:
eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1
espree: 10.4.0
esquery: 1.6.0
esquery: 1.7.0
semver: 7.7.3
transitivePeerDependencies:
- supports-color
@ -18096,7 +18114,7 @@ snapshots:
yaml-eslint-parser@1.3.2:
dependencies:
eslint-visitor-keys: 3.4.3
yaml: 2.8.1
yaml: 2.8.2
yaml@1.10.2: {}

View File

@ -24,8 +24,12 @@ export type FetchOptionType = Omit<RequestInit, 'body'> & {
}
const afterResponse204: AfterResponseHook = async (_request, _options, response) => {
if (response.status === 204)
return Response.json({ result: 'success' })
if (response.status === 204) {
return new Response(JSON.stringify({ result: 'success' }), {
status: 200,
headers: { 'Content-Type': ContentType.json },
})
}
}
export type ResponseError = {