@kb-labs/quality-entry 2.105.0 → 2.107.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/widgets/117.js +2 -3
- package/dist/widgets/165.js +1 -2
- package/dist/widgets/326.js +1 -2
- package/dist/widgets/370.js +1 -2
- package/dist/widgets/405.js +1 -2
- package/dist/widgets/46.js +1 -2
- package/dist/widgets/50.js +1 -2
- package/dist/widgets/546.js +1 -2
- package/dist/widgets/62.js +1 -2
- package/dist/widgets/648.js +1 -2
- package/dist/widgets/669.js +1 -2
- package/dist/widgets/707.js +1 -2
- package/dist/widgets/775.js +1 -2
- package/dist/widgets/78.js +1 -2
- package/dist/widgets/875.js +25 -0
- package/dist/widgets/945.js +1 -2
- package/dist/widgets/968.js +1 -2
- package/dist/widgets/__federation_expose_QualityOverview.js +1 -2
- package/dist/widgets/mf-manifest.json +22 -22
- package/dist/widgets/mf-stats.json +26 -26
- package/dist/widgets/remoteEntry.js +2 -3
- package/package.json +6 -6
- package/dist/widgets/117.js.map +0 -1
- package/dist/widgets/165.js.map +0 -1
- package/dist/widgets/326.js.map +0 -1
- package/dist/widgets/370.js.map +0 -1
- package/dist/widgets/405.js.map +0 -1
- package/dist/widgets/46.js.map +0 -1
- package/dist/widgets/50.js.map +0 -1
- package/dist/widgets/546.js.map +0 -1
- package/dist/widgets/62.js.map +0 -1
- package/dist/widgets/648.js.map +0 -1
- package/dist/widgets/669.js.map +0 -1
- package/dist/widgets/707.js.map +0 -1
- package/dist/widgets/733.js +0 -35
- package/dist/widgets/733.js.map +0 -1
- package/dist/widgets/775.js.map +0 -1
- package/dist/widgets/78.js.map +0 -1
- package/dist/widgets/945.js.map +0 -1
- package/dist/widgets/968.js.map +0 -1
- package/dist/widgets/__federation_expose_QualityOverview.js.map +0 -1
- package/dist/widgets/remoteEntry.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"__federation_expose_QualityOverview.js","sources":["webpack://@kb-labs/quality-entry/../../../node_modules/.pnpm/react@19.2.5/node_modules/react/cjs/react-jsx-runtime.production.js","webpack://@kb-labs/quality-entry/../../../node_modules/.pnpm/react@19.2.5/node_modules/react/jsx-runtime.js","webpack://@kb-labs/quality-entry/./src/studio/components/OverviewTab.tsx","webpack://@kb-labs/quality-entry/./src/studio/components/ArchitectureTab.tsx","webpack://@kb-labs/quality-entry/./src/studio/components/DebtTab.tsx","webpack://@kb-labs/quality-entry/./src/studio/components/HistoryTab.tsx","webpack://@kb-labs/quality-entry/./src/studio/components/BuildOrderTab.tsx","webpack://@kb-labs/quality-entry/./src/studio/pages/QualityOverview.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import * as React from 'react';\nimport {\n useData,\n UIRow,\n UICol,\n UICard,\n UIStatistic,\n UIProgress,\n UITag,\n UIAlert,\n UISkeleton,\n UISpace,\n UIIcon,\n} from '@kb-labs/sdk/studio';\nimport type { StatsResponse, HealthV2Response, HistoryResponse, DimensionScores } from '@kb-labs/quality-contracts';\n\nfunction gradeColor(grade?: string): string {\n switch (grade) {\n case 'A': return 'green';\n case 'B': return 'blue';\n case 'C': return 'orange';\n case 'D': return 'red';\n case 'F': return 'volcano';\n default: return 'default';\n }\n}\n\nfunction scoreStatus(score?: number): 'success' | 'exception' | 'normal' {\n if (!score) return 'normal';\n if (score >= 80) return 'success';\n if (score < 60) return 'exception';\n return 'normal';\n}\n\nfunction deltaLabel(value: number, invert = false): React.ReactNode {\n if (value === 0) return null;\n const positive = invert ? value < 0 : value > 0;\n const color = positive ? '#52c41a' : '#ff4d4f';\n const arrow = value > 0 ? '▲' : '▼';\n return <span style={{ color, fontSize: 12, marginLeft: 4 }}>{arrow} {Math.abs(value)}</span>;\n}\n\nconst DIMENSIONS: Array<{ key: keyof DimensionScores; label: string; icon: string }> = [\n { key: 'architecture', label: 'Architecture', icon: 'ApartmentOutlined' },\n { key: 'typescript', label: 'TypeScript', icon: 'CodeOutlined' },\n { key: 'deadCode', label: 'Dead Code', icon: 'DeleteOutlined' },\n { key: 'depHygiene', label: 'Dep Hygiene', icon: 'NodeIndexOutlined' },\n { key: 'testCoverage', label: 'Test Coverage', icon: 'CheckCircleOutlined' },\n];\n\nexport function OverviewTab() {\n const { data: statsData, isLoading: statsLoading } = useData<StatsResponse>('/v1/plugins/quality/stats');\n const { data: healthData, isLoading: healthLoading } = useData<HealthV2Response>('/v1/plugins/quality/health');\n const { data: historyData, isLoading: historyLoading } = useData<HistoryResponse>('/v1/plugins/quality/history');\n\n if (statsLoading || healthLoading || historyLoading) {\n return <UISkeleton active lines={8} style={{ padding: '24px 0' }} />;\n }\n\n const delta = historyData?.delta;\n const dimensions: DimensionScores | undefined = historyData?.latest?.dimensions ?? healthData?.dimensions;\n\n return (\n <div>\n {/* Health Score */}\n <UICard title=\"Health Score\" style={{ marginBottom: 24 }}>\n <UIRow gutter={32} align=\"middle\">\n <UICol span={8} style={{ textAlign: 'center' }}>\n <UIProgress\n type=\"circle\"\n percent={healthData?.score ?? 0}\n size={160}\n status={scoreStatus(healthData?.score)}\n />\n <div style={{ marginTop: 12 }}>\n <UITag color={gradeColor(healthData?.grade)} style={{ fontSize: 16, padding: '4px 12px' }}>\n Grade {healthData?.grade ?? '—'}\n </UITag>\n {delta && (\n <div style={{ marginTop: 8, color: '#8c8c8c', fontSize: 13 }}>\n {deltaLabel(delta.score)} vs previous snapshot\n </div>\n )}\n </div>\n </UICol>\n\n <UICol span={16}>\n <UIRow gutter={[16, 16]}>\n {DIMENSIONS.map(({ key, label, icon }) => {\n const dim = dimensions ? dimensions[key] : undefined;\n return (\n <UICol span={12} key={key}>\n <UICard size=\"small\" style={{ borderRadius: 8 }}>\n <UISpace>\n <UIIcon name={icon} />\n <span style={{ fontWeight: 500 }}>{label}</span>\n <UITag color={gradeColor(dim?.grade)}>{dim?.grade ?? '—'}</UITag>\n </UISpace>\n <UIProgress\n percent={dim?.score ?? 0}\n size=\"small\"\n showInfo={false}\n strokeColor={\n (dim?.score ?? 0) >= 80 ? '#52c41a' :\n (dim?.score ?? 0) >= 60 ? '#faad14' : '#ff4d4f'\n }\n style={{ marginTop: 8 }}\n />\n <div style={{ fontSize: 12, color: '#8c8c8c', marginTop: 4 }}>\n {dim?.score ?? 0}/100\n </div>\n </UICard>\n </UICol>\n );\n })}\n </UIRow>\n </UICol>\n </UIRow>\n </UICard>\n\n {/* Delta summary */}\n {delta && (\n <UIAlert\n variant=\"info\"\n showIcon\n icon={<UIIcon name=\"LineChartOutlined\" />}\n message=\"Changes since last snapshot\"\n description={\n <UIRow gutter={16} style={{ marginTop: 8 }}>\n {[\n { label: 'Layering violations', value: -delta.layeringViolations, invert: true },\n { label: 'Any count', value: -delta.anyCount, invert: true },\n { label: 'Unused files', value: -delta.unusedFiles, invert: true },\n { label: 'Unused deps', value: -delta.unusedDeps, invert: true },\n { label: 'Avg instability', value: -delta.avgInstability, invert: true },\n ].map(({ label, value, invert }) => (\n <UICol key={label}>\n <span style={{ color: '#8c8c8c' }}>{label}: </span>\n {deltaLabel(value, invert)}\n {value === 0 && <span style={{ color: '#8c8c8c' }}>—</span>}\n </UICol>\n ))}\n </UIRow>\n }\n style={{ marginBottom: 24 }}\n />\n )}\n\n {/* Quick Stats */}\n <UIRow gutter={16}>\n <UICol span={8}>\n <UICard>\n <UIStatistic title=\"Packages\" value={statsData?.packages ?? 0} prefix={<UIIcon name=\"DatabaseOutlined\" />} />\n </UICard>\n </UICol>\n <UICol span={8}>\n <UICard>\n <UIStatistic title=\"Lines of Code\" value={statsData?.loc ?? 0} prefix={<UIIcon name=\"CodeOutlined\" />} />\n </UICard>\n </UICol>\n <UICol span={8}>\n <UICard>\n <UIStatistic title=\"Total Size\" value={statsData?.size ?? 'N/A'} prefix={<UIIcon name=\"FileTextOutlined\" />} />\n </UICard>\n </UICol>\n </UIRow>\n </div>\n );\n}\n","import * as React from 'react';\nimport {\n useData,\n UIRow,\n UICol,\n UICard,\n UITable,\n UITag,\n UIAlert,\n UISkeleton,\n UISpace,\n UIIcon,\n UIStatistic,\n} from '@kb-labs/sdk/studio';\nimport type { UITableColumn } from '@kb-labs/sdk/studio';\nimport type { LayeringResponse, CouplingResponse } from '@kb-labs/quality-contracts';\nimport type { LayeringViolation, PackageCoupling } from '@kb-labs/quality-contracts';\n\nfunction instabilityColor(instability: number): string {\n if (instability >= 0.8) return '#ff4d4f';\n if (instability >= 0.6) return '#faad14';\n if (instability >= 0.4) return '#1677ff';\n return '#52c41a';\n}\n\nfunction instabilityTag(instability: number): React.ReactNode {\n return (\n <UITag color={instabilityColor(instability)}>\n {instability.toFixed(2)}\n </UITag>\n );\n}\n\nconst couplingColumns: UITableColumn<PackageCoupling>[] = [\n {\n title: 'Package',\n dataIndex: 'name',\n key: 'name',\n render: (name: string) => <code style={{ fontSize: 12 }}>{name}</code>,\n ellipsis: true,\n },\n {\n title: 'Ca (afferent)',\n dataIndex: 'afferent',\n key: 'afferent',\n width: 110,\n sorter: (a, b) => a.afferent - b.afferent,\n },\n {\n title: 'Ce (efferent)',\n dataIndex: 'efferent',\n key: 'efferent',\n width: 110,\n sorter: (a, b) => a.efferent - b.efferent,\n },\n {\n title: 'Instability',\n dataIndex: 'instability',\n key: 'instability',\n width: 110,\n defaultSortOrder: 'descend',\n sorter: (a, b) => a.instability - b.instability,\n render: (v: number) => instabilityTag(v),\n },\n];\n\nconst violationColumns: UITableColumn<LayeringViolation>[] = [\n {\n title: 'File',\n dataIndex: 'file',\n key: 'file',\n ellipsis: true,\n render: (f: string) => <code style={{ fontSize: 11 }}>{f.replace(/^.*\\/src\\//, 'src/')}</code>,\n },\n {\n title: 'From',\n key: 'from',\n width: 180,\n render: (_, r) => (\n <UISpace size={4}>\n <UITag>{r.fromPackage}</UITag>\n <span style={{ color: '#8c8c8c', fontSize: 11 }}>L{r.fromLayer}</span>\n </UISpace>\n ),\n },\n {\n title: 'To',\n key: 'to',\n width: 180,\n render: (_, r) => (\n <UISpace size={4}>\n <UITag color=\"red\">{r.toPackage}</UITag>\n <span style={{ color: '#8c8c8c', fontSize: 11 }}>L{r.toLayer}</span>\n </UISpace>\n ),\n },\n {\n title: 'Import',\n dataIndex: 'importSpecifier',\n key: 'importSpecifier',\n ellipsis: true,\n render: (s: string) => <code style={{ fontSize: 11 }}>{s}</code>,\n },\n];\n\nexport function ArchitectureTab() {\n const { data: couplingData, isLoading: couplingLoading } = useData<CouplingResponse>('/v1/plugins/quality/coupling');\n const { data: layersData, isLoading: layersLoading } = useData<LayeringResponse>('/v1/plugins/quality/layers');\n\n if (couplingLoading || layersLoading) {\n return <UISkeleton active lines={10} style={{ padding: '24px 0' }} />;\n }\n\n const hasViolations = (layersData?.totalViolations ?? 0) > 0;\n\n return (\n <div>\n {/* Summary row */}\n <UIRow gutter={16} style={{ marginBottom: 24 }}>\n <UICol span={8}>\n <UICard>\n <UIStatistic\n title=\"Layering Violations\"\n value={layersData?.totalViolations ?? 0}\n valueStyle={{ color: hasViolations ? '#ff4d4f' : '#52c41a' }}\n prefix={<UIIcon name={hasViolations ? 'WarningOutlined' : 'CheckCircleOutlined'} />}\n />\n </UICard>\n </UICol>\n <UICol span={8}>\n <UICard>\n <UIStatistic\n title=\"Avg Instability\"\n value={(couplingData?.avgInstability ?? 0).toFixed(2)}\n prefix={<UIIcon name=\"NodeIndexOutlined\" />}\n />\n </UICard>\n </UICol>\n <UICol span={8}>\n <UICard>\n <UIStatistic\n title=\"Affected Packages\"\n value={layersData?.affectedPackages?.length ?? 0}\n prefix={<UIIcon name=\"ApartmentOutlined\" />}\n />\n </UICard>\n </UICol>\n </UIRow>\n\n {/* Layering violations */}\n {hasViolations && (\n <UIAlert\n variant=\"error\"\n showIcon\n icon={<UIIcon name=\"WarningOutlined\" />}\n message={`${layersData!.totalViolations} layering violation${layersData!.totalViolations > 1 ? 's' : ''} detected`}\n description=\"Lower-layer packages are importing from higher-layer packages, breaking the dependency rules.\"\n style={{ marginBottom: 16 }}\n />\n )}\n\n <UICard title=\"Layering Violations\" style={{ marginBottom: 24 }}>\n {!hasViolations ? (\n <UIAlert\n variant=\"success\"\n showIcon\n icon={<UIIcon name=\"CheckCircleOutlined\" />}\n message=\"No layering violations — architecture is clean\"\n />\n ) : (\n <UITable<LayeringViolation>\n dataSource={layersData?.violations ?? []}\n columns={violationColumns}\n rowKey={(r) => `${r.file}:${r.importSpecifier}`}\n size=\"small\"\n pagination={{ pageSize: 20 }}\n />\n )}\n </UICard>\n\n {/* Coupling metrics */}\n <UICard title=\"Package Coupling (Ca/Ce/Instability)\">\n <UITable<PackageCoupling>\n dataSource={couplingData?.packages ?? []}\n columns={couplingColumns}\n rowKey=\"name\"\n size=\"small\"\n pagination={{ pageSize: 30 }}\n />\n </UICard>\n </div>\n );\n}\n","import * as React from 'react';\nimport {\n useData,\n UIRow,\n UICol,\n UICard,\n UITable,\n UITag,\n UIAlert,\n UISkeleton,\n UISpace,\n UIIcon,\n UIStatistic,\n} from '@kb-labs/sdk/studio';\nimport type { UITableColumn } from '@kb-labs/sdk/studio';\nimport type { DeadCodeResponse, HealthV2Response } from '@kb-labs/quality-contracts';\n\ninterface UnusedExportRow { key: string; file: string; symbol: string }\ninterface UnusedDepRow { key: string; package: string; workspace: string }\n\nconst unusedFileColumns: UITableColumn<{ key: string; file: string }>[] = [\n { title: 'File', dataIndex: 'file', key: 'file', ellipsis: true,\n render: (f: string) => <code style={{ fontSize: 12 }}>{f}</code> },\n];\n\nconst unusedExportColumns: UITableColumn<UnusedExportRow>[] = [\n { title: 'File', dataIndex: 'file', key: 'file', ellipsis: true,\n render: (f: string) => <code style={{ fontSize: 12 }}>{f}</code> },\n { title: 'Symbol', dataIndex: 'symbol', key: 'symbol', width: 200,\n render: (s: string) => <UITag><code>{s}</code></UITag> },\n];\n\nconst unusedDepColumns: UITableColumn<UnusedDepRow>[] = [\n { title: 'Package', dataIndex: 'package', key: 'package',\n render: (p: string) => <code style={{ fontSize: 12 }}>{p}</code> },\n { title: 'Workspace', dataIndex: 'workspace', key: 'workspace', width: 220,\n render: (w: string) => <UITag>{w}</UITag> },\n];\n\nfunction gradeColor(g: string) {\n return ({ A: 'green', B: 'blue', C: 'orange', D: 'red', F: 'volcano' } as Record<string, string>)[g] ?? 'default';\n}\n\nexport function DebtTab() {\n const { data: deadData, isLoading: deadLoading } = useData<DeadCodeResponse>('/v1/plugins/quality/dead-code');\n const { data: healthData, isLoading: healthLoading } = useData<HealthV2Response>('/v1/plugins/quality/health');\n\n if (deadLoading || healthLoading) {\n return <UISkeleton active lines={8} style={{ padding: '24px 0' }} />;\n }\n\n const tsDetails = healthData?.dimensions?.typescript?.details ?? [];\n const tsScore = healthData?.dimensions?.typescript?.score ?? 100;\n const tsGrade = healthData?.dimensions?.typescript?.grade ?? 'A';\n\n const unusedFileRows = (deadData?.unusedFiles ?? []).map((f) => ({ key: f, file: f }));\n const unusedExportRows: UnusedExportRow[] = (deadData?.unusedExports ?? []).map((e) => ({\n key: `${e.file}:${e.symbol}`, file: e.file, symbol: e.symbol,\n }));\n const unusedDepRows: UnusedDepRow[] = (deadData?.unusedDependencies ?? []).map((d) => ({\n key: `${d.workspace}:${d.package}`, package: d.package, workspace: d.workspace,\n }));\n const unlistedDepRows: UnusedDepRow[] = (deadData?.unlistedDependencies ?? []).map((d) => ({\n key: `${d.workspace}:${d.package}`, package: d.package, workspace: d.workspace,\n }));\n\n return (\n <div>\n <UIRow gutter={16} style={{ marginBottom: 24 }}>\n <UICol span={6}>\n <UICard>\n <UIStatistic title=\"TypeScript Score\" value={`${tsScore}/100`}\n prefix={<UITag color={gradeColor(tsGrade)}>{tsGrade}</UITag>} />\n </UICard>\n </UICol>\n <UICol span={6}>\n <UICard>\n <UIStatistic title=\"Unused Files\" value={unusedFileRows.length}\n valueStyle={{ color: unusedFileRows.length > 0 ? '#ff4d4f' : '#52c41a' }}\n prefix={<UIIcon name=\"FileUnknownOutlined\" />} />\n </UICard>\n </UICol>\n <UICol span={6}>\n <UICard>\n <UIStatistic title=\"Unused Exports\" value={unusedExportRows.length}\n valueStyle={{ color: unusedExportRows.length > 0 ? '#faad14' : '#52c41a' }}\n prefix={<UIIcon name=\"ExportOutlined\" />} />\n </UICard>\n </UICol>\n <UICol span={6}>\n <UICard>\n <UIStatistic title=\"Dep Issues\"\n value={unusedDepRows.length + unlistedDepRows.length}\n valueStyle={{ color: (unusedDepRows.length + unlistedDepRows.length) > 0 ? '#faad14' : '#52c41a' }}\n prefix={<UIIcon name=\"NodeIndexOutlined\" />} />\n </UICard>\n </UICol>\n </UIRow>\n\n {tsDetails.length > 0 && (\n <UICard title=\"TypeScript Health\" style={{ marginBottom: 24 }}>\n {tsDetails.map((detail, i) => (\n <UIAlert key={i} variant={tsScore < 60 ? 'error' : tsScore < 80 ? 'warning' : 'info'}\n showIcon message={detail} style={{ marginBottom: 8 }} />\n ))}\n </UICard>\n )}\n\n {unusedFileRows.length > 0 && (\n <UICard title={<UISpace><UIIcon name=\"FileUnknownOutlined\" /><span>Unused Files</span>\n <UITag color=\"red\">{unusedFileRows.length}</UITag></UISpace>} style={{ marginBottom: 16 }}>\n <UITable dataSource={unusedFileRows} columns={unusedFileColumns} size=\"small\" pagination={{ pageSize: 20 }} />\n </UICard>\n )}\n\n {unusedExportRows.length > 0 && (\n <UICard title={<UISpace><UIIcon name=\"ExportOutlined\" /><span>Unused Exports</span>\n <UITag color=\"orange\">{unusedExportRows.length}</UITag></UISpace>} style={{ marginBottom: 16 }}>\n <UITable<UnusedExportRow> dataSource={unusedExportRows} columns={unusedExportColumns}\n size=\"small\" pagination={{ pageSize: 20 }} />\n </UICard>\n )}\n\n {unusedDepRows.length > 0 && (\n <UICard title={<UISpace><UIIcon name=\"NodeCollapseOutlined\" /><span>Unused Dependencies</span>\n <UITag color=\"orange\">{unusedDepRows.length}</UITag></UISpace>} style={{ marginBottom: 16 }}>\n <UITable<UnusedDepRow> dataSource={unusedDepRows} columns={unusedDepColumns}\n size=\"small\" pagination={{ pageSize: 20 }} />\n </UICard>\n )}\n\n {unlistedDepRows.length > 0 && (\n <UICard title={<UISpace><UIIcon name=\"WarningOutlined\" /><span>Unlisted Dependencies</span>\n <UITag color=\"red\">{unlistedDepRows.length}</UITag></UISpace>}>\n <UITable<UnusedDepRow> dataSource={unlistedDepRows} columns={unusedDepColumns}\n size=\"small\" pagination={{ pageSize: 20 }} />\n </UICard>\n )}\n\n {unusedFileRows.length === 0 && unusedExportRows.length === 0 &&\n unusedDepRows.length === 0 && unlistedDepRows.length === 0 && (\n <UIAlert variant=\"success\" showIcon icon={<UIIcon name=\"CheckCircleOutlined\" />}\n message=\"No dead code detected — codebase is clean\" />\n )}\n </div>\n );\n}\n","import * as React from 'react';\nimport {\n useData,\n useMutateData,\n UICard,\n UITable,\n UITag,\n UIAlert,\n UISkeleton,\n UISpace,\n UIIcon,\n UIButton,\n useNotification,\n} from '@kb-labs/sdk/studio';\nimport type { UITableColumn } from '@kb-labs/sdk/studio';\nimport type { HistoryResponse, QualitySnapshot } from '@kb-labs/quality-contracts';\n\nfunction gradeColor(grade?: string): string {\n return ({ A: 'green', B: 'blue', C: 'orange', D: 'red', F: 'volcano' } as Record<string, string>)[grade ?? ''] ?? 'default';\n}\n\nfunction deltaCell(value: number, lowerIsBetter = true): React.ReactNode {\n if (value === 0) return <span style={{ color: '#8c8c8c' }}>—</span>;\n const good = lowerIsBetter ? value < 0 : value > 0;\n const color = good ? '#52c41a' : '#ff4d4f';\n const arrow = value > 0 ? '▲' : '▼';\n return <span style={{ color }}>{arrow} {Math.abs(value)}</span>;\n}\n\nconst columns: UITableColumn<QualitySnapshot>[] = [\n { title: 'Date', dataIndex: 'timestamp', key: 'timestamp', width: 170,\n render: (ts: string) => new Date(ts).toLocaleString() },\n { title: 'Score', dataIndex: 'score', key: 'score', width: 80,\n sorter: (a, b) => a.score - b.score },\n { title: 'Grade', dataIndex: 'grade', key: 'grade', width: 70,\n render: (g: string) => <UITag color={gradeColor(g)}>{g}</UITag> },\n { title: 'Architecture', key: 'arch', width: 110,\n render: (_, r) => (\n <UISpace size={4}>\n <UITag color={gradeColor(r.dimensions.architecture.grade)} style={{ fontSize: 11 }}>\n {r.dimensions.architecture.grade}\n </UITag>\n <span style={{ fontSize: 11, color: '#8c8c8c' }}>{r.dimensions.architecture.score}</span>\n </UISpace>\n ) },\n { title: 'TypeScript', key: 'ts', width: 110,\n render: (_, r) => (\n <UISpace size={4}>\n <UITag color={gradeColor(r.dimensions.typescript.grade)} style={{ fontSize: 11 }}>\n {r.dimensions.typescript.grade}\n </UITag>\n <span style={{ fontSize: 11, color: '#8c8c8c' }}>{r.dimensions.typescript.score}</span>\n </UISpace>\n ) },\n { title: 'Dead Code', key: 'dc', width: 110,\n render: (_, r) => (\n <UISpace size={4}>\n <UITag color={gradeColor(r.dimensions.deadCode.grade)} style={{ fontSize: 11 }}>\n {r.dimensions.deadCode.grade}\n </UITag>\n <span style={{ fontSize: 11, color: '#8c8c8c' }}>{r.dimensions.deadCode.score}</span>\n </UISpace>\n ) },\n { title: 'Violations', key: 'violations', width: 95,\n render: (_, r) => (\n <span style={{ color: r.counters.layeringViolations > 0 ? '#ff4d4f' : '#52c41a' }}>\n {r.counters.layeringViolations}\n </span>\n ) },\n { title: 'Any', key: 'any', width: 70, render: (_, r) => r.counters.anyCount },\n { title: 'Unused', key: 'unused', width: 80, render: (_, r) => r.counters.unusedFiles },\n { title: 'Branch', key: 'branch', width: 120, ellipsis: true,\n render: (_, r) => <code style={{ fontSize: 11 }}>{r.git.branch || '—'}</code> },\n { title: 'Commit', key: 'commit', width: 90,\n render: (_, r) => <code style={{ fontSize: 11 }}>{r.git.commit ? r.git.commit.slice(0, 7) : '—'}</code> },\n];\n\nexport function HistoryTab() {\n const { data, isLoading, refetch } = useData<HistoryResponse>('/v1/plugins/quality/history');\n const saveSnapshot = useMutateData<Record<string, never>, QualitySnapshot>('/v1/plugins/quality/snapshot');\n const notify = useNotification();\n\n function handleSnapshot() {\n saveSnapshot.mutate({}, {\n onSuccess: () => {\n notify.success('Snapshot saved');\n void refetch();\n },\n onError: (err: unknown) => {\n notify.error(`Failed: ${err instanceof Error ? err.message : String(err)}`);\n },\n });\n }\n\n if (isLoading) {\n return <UISkeleton active lines={8} style={{ padding: '24px 0' }} />;\n }\n\n const snapshots = data?.snapshots ?? [];\n const delta = data?.delta;\n const hasAnyDelta = delta && Object.values(delta).some(v => v !== 0);\n\n return (\n <div>\n {delta && (\n <UICard title=\"Changes since last snapshot\" style={{ marginBottom: 24 }}>\n {!hasAnyDelta ? (\n <span style={{ color: '#8c8c8c', fontSize: 13 }}>No changes since last snapshot</span>\n ) : (\n <div style={{ display: 'flex', gap: 32, flexWrap: 'wrap' }}>\n <div><span style={{ color: '#8c8c8c' }}>Score </span>{deltaCell(delta.score, false)}</div>\n <div><span style={{ color: '#8c8c8c' }}>Violations </span>{deltaCell(delta.layeringViolations)}</div>\n <div><span style={{ color: '#8c8c8c' }}>Any count </span>{deltaCell(delta.anyCount)}</div>\n <div><span style={{ color: '#8c8c8c' }}>Ts-ignore </span>{deltaCell(delta.tsIgnoreCount)}</div>\n <div><span style={{ color: '#8c8c8c' }}>Unused files </span>{deltaCell(delta.unusedFiles)}</div>\n <div><span style={{ color: '#8c8c8c' }}>Unused deps </span>{deltaCell(delta.unusedDeps)}</div>\n <div><span style={{ color: '#8c8c8c' }}>Avg instability </span>{deltaCell(parseFloat(delta.avgInstability.toFixed(2)))}</div>\n </div>\n )}\n </UICard>\n )}\n\n <UICard\n title={`Snapshot History (${snapshots.length})`}\n extra={\n <UIButton size=\"small\" icon={<UIIcon name=\"CameraOutlined\" />}\n loading={saveSnapshot.isLoading} onClick={handleSnapshot}>\n Save Snapshot\n </UIButton>\n }\n >\n {snapshots.length === 0 ? (\n <UIAlert variant=\"info\" showIcon icon={<UIIcon name=\"InfoCircleOutlined\" />}\n message=\"No snapshots yet\"\n description='Run \"kb quality snapshot\" or click \"Save Snapshot\" to start tracking trends.' />\n ) : (\n <UITable<QualitySnapshot>\n dataSource={snapshots.slice().reverse()}\n columns={columns}\n rowKey=\"id\"\n size=\"small\"\n pagination={{ pageSize: 20 }}\n scroll={{ x: 1200 }}\n />\n )}\n </UICard>\n </div>\n );\n}\n","/**\n * Build Order tab - shows parallel build layers and sequential order\n */\n\nimport * as React from 'react';\nimport { useData, UICard, UITable, UITag, UISkeleton, UIAlert, UISelect, UISpace } from '@kb-labs/sdk/studio';\nimport type { UITableColumn } from '@kb-labs/sdk/studio';\nimport type { BuildOrderResponse, CyclesResponse } from '@kb-labs/quality-contracts';\n\nexport function BuildOrderTab() {\n const [selectedPackage, setSelectedPackage] = React.useState<string | undefined>();\n\n const buildOrderUrl = selectedPackage\n ? `/v1/plugins/quality/build-order?package=${encodeURIComponent(selectedPackage)}`\n : '/v1/plugins/quality/build-order';\n\n const { data, isLoading, isError } = useData<BuildOrderResponse>(buildOrderUrl);\n const { data: cyclesData } = useData<CyclesResponse>('/v1/plugins/quality/cycles');\n\n if (isLoading) {\n return <UISkeleton active lines={6} style={{ padding: '24px 0' }} />;\n }\n\n if (isError) {\n return <UIAlert message=\"Failed to load build order\" variant=\"error\" showIcon />;\n }\n\n const layersColumns: UITableColumn<{ layer: number; packages: string[]; key: number }>[] = [\n {\n title: 'Layer',\n dataIndex: 'layer',\n key: 'layer',\n width: 100,\n render: (layer: number) => <UITag color=\"blue\">Layer {layer}</UITag>,\n },\n {\n title: 'Packages (can build in parallel)',\n dataIndex: 'packages',\n key: 'packages',\n render: (packages: string[]) => (\n <UISpace wrap>\n {packages.map((pkg) => (\n <UITag key={pkg}>{pkg}</UITag>\n ))}\n </UISpace>\n ),\n },\n ];\n\n const layersData = data?.layers.map((layer, idx) => ({\n layer: idx + 1,\n packages: layer,\n key: idx,\n }));\n\n return (\n <div>\n {/* Circular Dependencies Warning */}\n {data?.hasCircular && (\n <UIAlert\n message=\"Circular Dependencies Detected!\"\n description={`Found ${data.circular.length} circular dependency cycles. Build order may not be correct.`}\n variant=\"error\"\n showIcon\n style={{ marginBottom: 24 }}\n />\n )}\n\n {/* Package Filter */}\n <UICard title=\"Filter\" style={{ marginBottom: 24 }}>\n <UISelect\n style={{ width: 400 }}\n placeholder=\"Select package to see its build dependencies\"\n value={selectedPackage}\n onChange={(val) => setSelectedPackage(val as string | undefined)}\n allowClear\n showSearch\n options={data?.sorted.map((pkg) => ({\n label: pkg,\n value: pkg,\n })) ?? []}\n />\n </UICard>\n\n {/* Build Layers */}\n <UICard\n title={`Build Layers (${data?.layerCount ?? 0} layers, ${data?.packageCount ?? 0} packages)`}\n style={{ marginBottom: 24 }}\n >\n <UITable\n dataSource={layersData ?? []}\n columns={layersColumns}\n pagination={false}\n expandable={{\n expandedRowRender: (record) => (\n <div style={{ padding: '8px 0' }}>\n <strong>Packages in this layer:</strong>\n <div style={{ marginTop: 8 }}>\n {record.packages.map((pkg) => (\n <UITag key={pkg} style={{ marginBottom: 4 }}>\n {pkg}\n </UITag>\n ))}\n </div>\n </div>\n ),\n }}\n />\n </UICard>\n\n {/* Circular Dependencies */}\n {data?.hasCircular && (\n <UICard title={`Circular Dependencies (${data.circular.length})`}>\n {data.circular.map((cycle, idx) => (\n <UIAlert\n key={idx}\n message={`Cycle ${idx + 1}`}\n description={cycle.join(' → ')}\n variant=\"warning\"\n showIcon\n style={{ marginBottom: 12 }}\n />\n ))}\n </UICard>\n )}\n </div>\n );\n}\n","import * as React from 'react';\nimport { UIPage, UIPageHeader, UITabs } from '@kb-labs/sdk/studio';\nimport { OverviewTab } from '../components/OverviewTab';\nimport { ArchitectureTab } from '../components/ArchitectureTab';\nimport { DebtTab } from '../components/DebtTab';\nimport { HistoryTab } from '../components/HistoryTab';\nimport { BuildOrderTab } from '../components/BuildOrderTab';\n\nexport default function QualityOverview() {\n const tabs = (\n <UITabs\n syncUrl=\"search\"\n items={[\n { key: 'overview', label: 'Overview', children: <OverviewTab /> },\n { key: 'architecture', label: 'Architecture', children: <ArchitectureTab /> },\n { key: 'debt', label: 'Debt', children: <DebtTab /> },\n { key: 'history', label: 'History', children: <HistoryTab /> },\n { key: 'build-order', label: 'Build Order', children: <BuildOrderTab /> },\n ]}\n />\n );\n\n return (\n <UIPage>\n <UIPageHeader\n title=\"Quality\"\n description=\"Code health, architecture analysis, and trend tracking\"\n tabs={tabs}\n />\n </UIPage>\n );\n}\n"],"names":["Symbol","gradeColor","grade","deltaLabel","value","invert","color","positive","Math","DIMENSIONS","OverviewTab","score","_historyData_latest","_useData","statsData","statsLoading","_useData1","healthData","healthLoading","_useData2","historyData","historyLoading","UISkeleton","delta","dimensions","UICard","UIRow","UICol","UIProgress","UITag","key","label","icon","dim","undefined","UISpace","UIIcon","UIAlert","UIStatistic","couplingColumns","render","name","sorter","a","b","v","instability","violationColumns","f","_","r","s","ArchitectureTab","_layersData_affectedPackages","couplingData","couplingLoading","layersData","layersLoading","hasViolations","UITable","rowKey","unusedFileColumns","unusedExportColumns","unusedDepColumns","p","w","DebtTab","_g","_healthData_dimensions_typescript","_healthData_dimensions_typescript1","_healthData_dimensions_typescript2","deadData","deadLoading","tsDetails","tsScore","tsGrade","unusedFileRows","unusedExportRows","e","unusedDepRows","d","unlistedDepRows","detail","i","deltaCell","lowerIsBetter","good","columns","ts","Date","g","HistoryTab","data","isLoading","refetch","saveSnapshot","useMutateData","notify","useNotification","snapshots","hasAnyDelta","Object","parseFloat","UIButton","onSuccess","onError","err","_instanceof","Error","String","BuildOrderTab","_React_useState","selectedPackage","setSelectedPackage","buildOrderUrl","encodeURIComponent","isError","layersColumns","layer","packages","pkg","idx","UISelect","onChange","val","expandedRowRender","record","cycle","QualityOverview","tabs","UITabs","UIPage","UIPageHeader"],"mappings":"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"}
|