mirror of
https://github.com/langgenius/dify.git
synced 2025-12-19 17:27:16 -05:00
feat: add Knip configuration for dead code detection and remove unused icon components (#26758)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: crazywoola <100913391+crazywoola@users.noreply.github.com>
This commit is contained in:
@@ -1,13 +0,0 @@
|
||||
export { default as Chunk } from './Chunk'
|
||||
export { default as Collapse } from './Collapse'
|
||||
export { default as Divider } from './Divider'
|
||||
export { default as File } from './File'
|
||||
export { default as GeneralType } from './GeneralType'
|
||||
export { default as LayoutRight2LineMod } from './LayoutRight2LineMod'
|
||||
export { default as OptionCardEffectBlueLight } from './OptionCardEffectBlueLight'
|
||||
export { default as OptionCardEffectBlue } from './OptionCardEffectBlue'
|
||||
export { default as OptionCardEffectOrange } from './OptionCardEffectOrange'
|
||||
export { default as OptionCardEffectPurple } from './OptionCardEffectPurple'
|
||||
export { default as ParentChildType } from './ParentChildType'
|
||||
export { default as SelectionMod } from './SelectionMod'
|
||||
export { default as Watercrawl } from './Watercrawl'
|
||||
@@ -1,5 +0,0 @@
|
||||
.wrapper {
|
||||
display: inline-flex;
|
||||
background: url(~@/app/components/base/icons/assets/image/llm/baichuan-text-cn.png) center center no-repeat;
|
||||
background-size: contain;
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import cn from '@/utils/classnames'
|
||||
import s from './BaichuanTextCn.module.css'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
className,
|
||||
...restProps
|
||||
}: React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement> & {
|
||||
ref?: React.RefObject<HTMLSpanElement>;
|
||||
},
|
||||
) => <span className={cn(s.wrapper, className)} {...restProps} ref={ref} />
|
||||
|
||||
Icon.displayName = 'BaichuanTextCn'
|
||||
|
||||
export default Icon
|
||||
@@ -1,5 +0,0 @@
|
||||
.wrapper {
|
||||
display: inline-flex;
|
||||
background: url(~@/app/components/base/icons/assets/image/llm/minimax.png) center center no-repeat;
|
||||
background-size: contain;
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import cn from '@/utils/classnames'
|
||||
import s from './Minimax.module.css'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
className,
|
||||
...restProps
|
||||
}: React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement> & {
|
||||
ref?: React.RefObject<HTMLSpanElement>;
|
||||
},
|
||||
) => <span className={cn(s.wrapper, className)} {...restProps} ref={ref} />
|
||||
|
||||
Icon.displayName = 'Minimax'
|
||||
|
||||
export default Icon
|
||||
@@ -1,5 +0,0 @@
|
||||
.wrapper {
|
||||
display: inline-flex;
|
||||
background: url(~@/app/components/base/icons/assets/image/llm/minimax-text.png) center center no-repeat;
|
||||
background-size: contain;
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import cn from '@/utils/classnames'
|
||||
import s from './MinimaxText.module.css'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
className,
|
||||
...restProps
|
||||
}: React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement> & {
|
||||
ref?: React.RefObject<HTMLSpanElement>;
|
||||
},
|
||||
) => <span className={cn(s.wrapper, className)} {...restProps} ref={ref} />
|
||||
|
||||
Icon.displayName = 'MinimaxText'
|
||||
|
||||
export default Icon
|
||||
@@ -1,5 +0,0 @@
|
||||
.wrapper {
|
||||
display: inline-flex;
|
||||
background: url(~@/app/components/base/icons/assets/image/llm/tongyi.png) center center no-repeat;
|
||||
background-size: contain;
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import cn from '@/utils/classnames'
|
||||
import s from './Tongyi.module.css'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
className,
|
||||
...restProps
|
||||
}: React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement> & {
|
||||
ref?: React.RefObject<HTMLSpanElement>;
|
||||
},
|
||||
) => <span className={cn(s.wrapper, className)} {...restProps} ref={ref} />
|
||||
|
||||
Icon.displayName = 'Tongyi'
|
||||
|
||||
export default Icon
|
||||
@@ -1,5 +0,0 @@
|
||||
.wrapper {
|
||||
display: inline-flex;
|
||||
background: url(~@/app/components/base/icons/assets/image/llm/tongyi-text.png) center center no-repeat;
|
||||
background-size: contain;
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import cn from '@/utils/classnames'
|
||||
import s from './TongyiText.module.css'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
className,
|
||||
...restProps
|
||||
}: React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement> & {
|
||||
ref?: React.RefObject<HTMLSpanElement>;
|
||||
},
|
||||
) => <span className={cn(s.wrapper, className)} {...restProps} ref={ref} />
|
||||
|
||||
Icon.displayName = 'TongyiText'
|
||||
|
||||
export default Icon
|
||||
@@ -1,5 +0,0 @@
|
||||
.wrapper {
|
||||
display: inline-flex;
|
||||
background: url(~@/app/components/base/icons/assets/image/llm/tongyi-text-cn.png) center center no-repeat;
|
||||
background-size: contain;
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import cn from '@/utils/classnames'
|
||||
import s from './TongyiTextCn.module.css'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
className,
|
||||
...restProps
|
||||
}: React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement> & {
|
||||
ref?: React.RefObject<HTMLSpanElement>;
|
||||
},
|
||||
) => <span className={cn(s.wrapper, className)} {...restProps} ref={ref} />
|
||||
|
||||
Icon.displayName = 'TongyiTextCn'
|
||||
|
||||
export default Icon
|
||||
@@ -1,5 +0,0 @@
|
||||
.wrapper {
|
||||
display: inline-flex;
|
||||
background: url(~@/app/components/base/icons/assets/image/llm/wxyy.png) center center no-repeat;
|
||||
background-size: contain;
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import cn from '@/utils/classnames'
|
||||
import s from './Wxyy.module.css'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
className,
|
||||
...restProps
|
||||
}: React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement> & {
|
||||
ref?: React.RefObject<HTMLSpanElement>;
|
||||
},
|
||||
) => <span className={cn(s.wrapper, className)} {...restProps} ref={ref} />
|
||||
|
||||
Icon.displayName = 'Wxyy'
|
||||
|
||||
export default Icon
|
||||
@@ -1,5 +0,0 @@
|
||||
.wrapper {
|
||||
display: inline-flex;
|
||||
background: url(~@/app/components/base/icons/assets/image/llm/wxyy-text.png) center center no-repeat;
|
||||
background-size: contain;
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import cn from '@/utils/classnames'
|
||||
import s from './WxyyText.module.css'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
className,
|
||||
...restProps
|
||||
}: React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement> & {
|
||||
ref?: React.RefObject<HTMLSpanElement>;
|
||||
},
|
||||
) => <span className={cn(s.wrapper, className)} {...restProps} ref={ref} />
|
||||
|
||||
Icon.displayName = 'WxyyText'
|
||||
|
||||
export default Icon
|
||||
@@ -1,5 +0,0 @@
|
||||
.wrapper {
|
||||
display: inline-flex;
|
||||
background: url(~@/app/components/base/icons/assets/image/llm/wxyy-text-cn.png) center center no-repeat;
|
||||
background-size: contain;
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import cn from '@/utils/classnames'
|
||||
import s from './WxyyTextCn.module.css'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
className,
|
||||
...restProps
|
||||
}: React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement> & {
|
||||
ref?: React.RefObject<HTMLSpanElement>;
|
||||
},
|
||||
) => <span className={cn(s.wrapper, className)} {...restProps} ref={ref} />
|
||||
|
||||
Icon.displayName = 'WxyyTextCn'
|
||||
|
||||
export default Icon
|
||||
@@ -1,9 +0,0 @@
|
||||
export { default as BaichuanTextCn } from './BaichuanTextCn'
|
||||
export { default as MinimaxText } from './MinimaxText'
|
||||
export { default as Minimax } from './Minimax'
|
||||
export { default as TongyiTextCn } from './TongyiTextCn'
|
||||
export { default as TongyiText } from './TongyiText'
|
||||
export { default as Tongyi } from './Tongyi'
|
||||
export { default as WxyyTextCn } from './WxyyTextCn'
|
||||
export { default as WxyyText } from './WxyyText'
|
||||
export { default as Wxyy } from './Wxyy'
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './Checked.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.RefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'Checked'
|
||||
|
||||
export default Icon
|
||||
@@ -1 +0,0 @@
|
||||
export { default as Checked } from './Checked'
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './Google.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.RefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'Google'
|
||||
|
||||
export default Icon
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './WebReader.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.RefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'WebReader'
|
||||
|
||||
export default Icon
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './Wikipedia.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.RefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'Wikipedia'
|
||||
|
||||
export default Icon
|
||||
@@ -1,7 +0,0 @@
|
||||
export { default as Google } from './Google'
|
||||
export { default as PartnerDark } from './PartnerDark'
|
||||
export { default as PartnerLight } from './PartnerLight'
|
||||
export { default as VerifiedDark } from './VerifiedDark'
|
||||
export { default as VerifiedLight } from './VerifiedLight'
|
||||
export { default as WebReader } from './WebReader'
|
||||
export { default as Wikipedia } from './Wikipedia'
|
||||
@@ -18,3 +18,4 @@ const Icon = (
|
||||
Icon.displayName = 'DataSet'
|
||||
|
||||
export default Icon
|
||||
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './Loading.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.RefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'Loading'
|
||||
|
||||
export default Icon
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './Search.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.RefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'Search'
|
||||
|
||||
export default Icon
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './ThoughtList.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.RefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'ThoughtList'
|
||||
|
||||
export default Icon
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './WebReader.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.RefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'WebReader'
|
||||
|
||||
export default Icon
|
||||
@@ -1,5 +1,2 @@
|
||||
export { default as DataSet } from './DataSet'
|
||||
export { default as Loading } from './Loading'
|
||||
export { default as Search } from './Search'
|
||||
export { default as ThoughtList } from './ThoughtList'
|
||||
export { default as WebReader } from './WebReader'
|
||||
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './AlignLeft01.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.RefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'AlignLeft01'
|
||||
|
||||
export default Icon
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './AlignRight01.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.RefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'AlignRight01'
|
||||
|
||||
export default Icon
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './Grid01.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.RefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'Grid01'
|
||||
|
||||
export default Icon
|
||||
@@ -1,4 +1 @@
|
||||
export { default as AlignLeft01 } from './AlignLeft01'
|
||||
export { default as AlignRight01 } from './AlignRight01'
|
||||
export { default as Grid01 } from './Grid01'
|
||||
export { default as LayoutGrid02 } from './LayoutGrid02'
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './Route.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.RefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'Route'
|
||||
|
||||
export default Icon
|
||||
@@ -1 +0,0 @@
|
||||
export { default as Route } from './Route'
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './User01.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.RefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'User01'
|
||||
|
||||
export default Icon
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './Users01.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.RefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'Users01'
|
||||
|
||||
export default Icon
|
||||
@@ -1,2 +0,0 @@
|
||||
export { default as User01 } from './User01'
|
||||
export { default as Users01 } from './Users01'
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './Stars02.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.RefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'Stars02'
|
||||
|
||||
export default Icon
|
||||
@@ -1 +0,0 @@
|
||||
export { default as Stars02 } from './Stars02'
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './ChevronDown.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.RefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'ChevronDown'
|
||||
|
||||
export default Icon
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './HighPriority.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.RefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'HighPriority'
|
||||
|
||||
export default Icon
|
||||
@@ -1,2 +0,0 @@
|
||||
export { default as ChevronDown } from './ChevronDown'
|
||||
export { default as HighPriority } from './HighPriority'
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './Grid01.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.RefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'Grid01'
|
||||
|
||||
export default Icon
|
||||
@@ -1 +0,0 @@
|
||||
export { default as Grid01 } from './Grid01'
|
||||
288
web/knip.config.ts
Normal file
288
web/knip.config.ts
Normal file
@@ -0,0 +1,288 @@
|
||||
import type { KnipConfig } from 'knip'
|
||||
|
||||
/**
|
||||
* Knip Configuration for Dead Code Detection
|
||||
*
|
||||
* This configuration helps identify unused files, exports, and dependencies
|
||||
* in the Dify web application (Next.js 15 + TypeScript + React 19).
|
||||
*
|
||||
* ⚠️ SAFETY FIRST: This configuration is designed to be conservative and
|
||||
* avoid false positives that could lead to deleting actively used code.
|
||||
*
|
||||
* @see https://knip.dev/reference/configuration
|
||||
*/
|
||||
const config: KnipConfig = {
|
||||
// ============================================================================
|
||||
// Next.js Framework Configuration
|
||||
// ============================================================================
|
||||
// Configure entry points specific to Next.js application structure.
|
||||
// These files are automatically treated as entry points by the framework.
|
||||
next: {
|
||||
entry: [
|
||||
// Next.js App Router pages (must exist for routing)
|
||||
'app/**/page.tsx',
|
||||
'app/**/layout.tsx',
|
||||
'app/**/loading.tsx',
|
||||
'app/**/error.tsx',
|
||||
'app/**/not-found.tsx',
|
||||
'app/**/template.tsx',
|
||||
'app/**/default.tsx',
|
||||
|
||||
// Middleware (runs before every route)
|
||||
'middleware.ts',
|
||||
|
||||
// Configuration files
|
||||
'next.config.js',
|
||||
'tailwind.config.js',
|
||||
'tailwind-common-config.ts',
|
||||
'postcss.config.js',
|
||||
|
||||
// Testing configuration
|
||||
'jest.config.ts',
|
||||
'jest.setup.ts',
|
||||
|
||||
// Linting configuration
|
||||
'eslint.config.mjs',
|
||||
],
|
||||
},
|
||||
|
||||
// ============================================================================
|
||||
// Global Entry Points
|
||||
// ============================================================================
|
||||
// Files that serve as entry points for the application.
|
||||
// The '!' suffix means these patterns take precedence and are always included.
|
||||
entry: [
|
||||
// Next.js App Router patterns (high priority)
|
||||
'app/**/page.tsx!',
|
||||
'app/**/layout.tsx!',
|
||||
'app/**/loading.tsx!',
|
||||
'app/**/error.tsx!',
|
||||
'app/**/not-found.tsx!',
|
||||
'app/**/template.tsx!',
|
||||
'app/**/default.tsx!',
|
||||
|
||||
// Core configuration files
|
||||
'middleware.ts!',
|
||||
'next.config.js!',
|
||||
'tailwind.config.js!',
|
||||
'tailwind-common-config.ts!',
|
||||
'postcss.config.js!',
|
||||
|
||||
// Testing setup
|
||||
'jest.config.ts!',
|
||||
'jest.setup.ts!',
|
||||
|
||||
// Linting setup
|
||||
'eslint.config.mjs!',
|
||||
|
||||
// ========================================================================
|
||||
// 🔒 CRITICAL: Global Initializers and Providers
|
||||
// ========================================================================
|
||||
// These files are imported by root layout.tsx and provide global functionality.
|
||||
// Even if not directly imported elsewhere, they are essential for app initialization.
|
||||
|
||||
// Browser initialization (runs on client startup)
|
||||
'app/components/browser-initializer.tsx!',
|
||||
'app/components/sentry-initializer.tsx!',
|
||||
'app/components/swr-initializer.tsx!',
|
||||
|
||||
// i18n initialization (server and client)
|
||||
'app/components/i18n.tsx!',
|
||||
'app/components/i18n-server.tsx!',
|
||||
|
||||
// Route prefix handling (used in root layout)
|
||||
'app/routePrefixHandle.tsx!',
|
||||
|
||||
// ========================================================================
|
||||
// 🔒 CRITICAL: Context Providers
|
||||
// ========================================================================
|
||||
// Context providers might be used via React Context API and imported dynamically.
|
||||
// Protecting all context files to prevent breaking the provider chain.
|
||||
'context/**/*.ts?(x)!',
|
||||
|
||||
// Component-level contexts (also used via React.useContext)
|
||||
'app/components/**/*.context.ts?(x)!',
|
||||
|
||||
// ========================================================================
|
||||
// 🔒 CRITICAL: State Management Stores
|
||||
// ========================================================================
|
||||
// Zustand stores might be imported dynamically or via hooks.
|
||||
// These are often imported at module level, so they should be protected.
|
||||
'app/components/**/*.store.ts?(x)!',
|
||||
'context/**/*.store.ts?(x)!',
|
||||
|
||||
// ========================================================================
|
||||
// 🔒 CRITICAL: Provider Components
|
||||
// ========================================================================
|
||||
// Provider components wrap the app and provide global state/functionality
|
||||
'app/components/**/*.provider.ts?(x)!',
|
||||
'context/**/*.provider.ts?(x)!',
|
||||
|
||||
// ========================================================================
|
||||
// Development tools
|
||||
// ========================================================================
|
||||
// Storybook configuration
|
||||
'.storybook/**/*',
|
||||
],
|
||||
|
||||
// ============================================================================
|
||||
// Project Files to Analyze
|
||||
// ============================================================================
|
||||
// Glob patterns for files that should be analyzed for unused code.
|
||||
// Excludes test files to avoid false positives.
|
||||
project: [
|
||||
'**/*.{js,jsx,ts,tsx,mjs,cjs}',
|
||||
],
|
||||
|
||||
// ============================================================================
|
||||
// Ignored Files and Directories
|
||||
// ============================================================================
|
||||
// Files and directories that should be completely excluded from analysis.
|
||||
// These typically contain:
|
||||
// - Test files
|
||||
// - Internationalization files (loaded dynamically)
|
||||
// - Static assets
|
||||
// - Build outputs
|
||||
// - External libraries
|
||||
ignore: [
|
||||
// Test files and directories
|
||||
'**/__tests__/**',
|
||||
'**/*.spec.{ts,tsx}',
|
||||
'**/*.test.{ts,tsx}',
|
||||
|
||||
// ========================================================================
|
||||
// 🔒 CRITICAL: i18n Files (Dynamically Loaded)
|
||||
// ========================================================================
|
||||
// Internationalization files are loaded dynamically at runtime via i18next.
|
||||
// Pattern: import(`@/i18n/${locale}/messages`)
|
||||
// These will NEVER show up in static analysis but are essential!
|
||||
'i18n/**',
|
||||
|
||||
// ========================================================================
|
||||
// 🔒 CRITICAL: Static Assets
|
||||
// ========================================================================
|
||||
// Static assets are referenced by URL in the browser, not via imports.
|
||||
// Examples: /logo.png, /icons/*, /embed.js
|
||||
'public/**',
|
||||
|
||||
// Build outputs and caches
|
||||
'node_modules/**',
|
||||
'.next/**',
|
||||
'coverage/**',
|
||||
|
||||
// Development tools
|
||||
'**/*.stories.{ts,tsx}',
|
||||
|
||||
// ========================================================================
|
||||
// 🔒 Utility scripts (not part of application runtime)
|
||||
// ========================================================================
|
||||
// These scripts are run manually (e.g., pnpm gen-icons, pnpm check-i18n)
|
||||
// and are not imported by the application code.
|
||||
'scripts/**',
|
||||
'bin/**',
|
||||
'i18n-config/**',
|
||||
|
||||
// Icon generation script (generates components, not used in runtime)
|
||||
'app/components/base/icons/script.mjs',
|
||||
],
|
||||
|
||||
// ============================================================================
|
||||
// Ignored Dependencies
|
||||
// ============================================================================
|
||||
// Dependencies that are used but not directly imported in code.
|
||||
// These are typically:
|
||||
// - Build tools
|
||||
// - Plugins loaded by configuration files
|
||||
// - CLI tools
|
||||
ignoreDependencies: [
|
||||
// ========================================================================
|
||||
// Next.js plugins (loaded by next.config.js)
|
||||
// ========================================================================
|
||||
'next-pwa',
|
||||
'@next/bundle-analyzer',
|
||||
'@next/mdx',
|
||||
|
||||
// ========================================================================
|
||||
// Build tools (used by webpack/next.js build process)
|
||||
// ========================================================================
|
||||
'code-inspector-plugin',
|
||||
|
||||
// ========================================================================
|
||||
// Development and translation tools (used by scripts)
|
||||
// ========================================================================
|
||||
'bing-translate-api',
|
||||
'uglify-js',
|
||||
'magicast',
|
||||
],
|
||||
|
||||
// ============================================================================
|
||||
// Export Analysis Configuration
|
||||
// ============================================================================
|
||||
// Configure how exports are analyzed
|
||||
|
||||
// Ignore exports that are only used within the same file
|
||||
// (e.g., helper functions used internally in the same module)
|
||||
ignoreExportsUsedInFile: true,
|
||||
|
||||
// ⚠️ SAFETY: Include exports from entry files in the analysis
|
||||
// This helps find unused public APIs, but be careful with:
|
||||
// - Context exports (useContext hooks)
|
||||
// - Store exports (useStore hooks)
|
||||
// - Type exports (might be used in other files)
|
||||
includeEntryExports: true,
|
||||
|
||||
// ============================================================================
|
||||
// Ignored Binaries
|
||||
// ============================================================================
|
||||
// Binary executables that are used but not listed in package.json
|
||||
ignoreBinaries: [
|
||||
'only-allow', // Used in preinstall script to enforce pnpm usage
|
||||
],
|
||||
|
||||
// ============================================================================
|
||||
// Reporting Rules
|
||||
// ============================================================================
|
||||
// Configure what types of issues to report and at what severity level
|
||||
rules: {
|
||||
// ========================================================================
|
||||
// Unused files are ERRORS
|
||||
// ========================================================================
|
||||
// These should definitely be removed or used.
|
||||
// However, always manually verify before deleting!
|
||||
files: 'error',
|
||||
|
||||
// ========================================================================
|
||||
// Unused dependencies are WARNINGS
|
||||
// ========================================================================
|
||||
// Dependencies might be:
|
||||
// - Used in production builds but not in dev
|
||||
// - Peer dependencies
|
||||
// - Used by other tools
|
||||
dependencies: 'warn',
|
||||
devDependencies: 'warn',
|
||||
|
||||
// ========================================================================
|
||||
// Unlisted imports are ERRORS
|
||||
// ========================================================================
|
||||
// Missing from package.json - will break in production!
|
||||
unlisted: 'error',
|
||||
|
||||
// ========================================================================
|
||||
// Unused exports are WARNINGS (not errors!)
|
||||
// ========================================================================
|
||||
// Exports might be:
|
||||
// - Part of public API for future use
|
||||
// - Used by external tools
|
||||
// - Exported for type inference
|
||||
// ⚠️ ALWAYS manually verify before removing exports!
|
||||
exports: 'warn',
|
||||
|
||||
// Unused types are warnings (might be part of type definitions)
|
||||
types: 'warn',
|
||||
|
||||
// Duplicate exports are warnings (could cause confusion but not breaking)
|
||||
duplicates: 'warn',
|
||||
},
|
||||
}
|
||||
|
||||
export default config
|
||||
Reference in New Issue
Block a user