Skip to content
Open
Show file tree
Hide file tree
Changes from 109 commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
d26b29a
docs(spec): design for lane-compare redesign port from new-changes
luvkapur May 13, 2026
6e4c3c4
docs(plan): implementation plan for lane-compare redesign port
luvkapur May 13, 2026
581eabd
feat(component-compare): add DiffModeProvider/useDiffMode primitive
luvkapur May 13, 2026
4b2ba39
feat(component-compare): add FileRegistry context primitive
luvkapur May 13, 2026
f6e67f8
feat(component-compare): add CompareToolbar primitive
luvkapur May 13, 2026
34d84fb
feat(component-compare): add CompareSidebar primitive
luvkapur May 13, 2026
9eee926
feat(code): add inline-diff-viewer (non-monaco diff renderer)
luvkapur May 13, 2026
530ae61
feat(dependencies): add deps-diff-table component
luvkapur May 13, 2026
4c1cc80
feat(code): add inline-code-compare tab component
luvkapur May 13, 2026
c3c36f8
feat(review): add inline-tests-compare tab component
luvkapur May 13, 2026
1f70327
feat(review): add inline-config-compare tab component
luvkapur May 13, 2026
d28ac01
feat(preview): add inline-preview-compare tab component
luvkapur May 13, 2026
41e38bd
feat(review): add inline-deps-compare tab component
luvkapur May 13, 2026
161ef69
feat(component-compare): add InlineComponentCompare + ComponentCompar…
luvkapur May 13, 2026
93ed30b
chore(deps): add use-list-components and create-component-model
luvkapur May 13, 2026
9178b03
feat(api-diff-view): add full-pane API diff component
luvkapur May 13, 2026
80d55fb
feat(lane-compare): port new design, strip drawer, rewire to workspac…
luvkapur May 13, 2026
6703a3a
feat(lane-compare-page): port new design
luvkapur May 13, 2026
6181b19
feat(lanes): wire lane-compare to non-monaco inline tab components
luvkapur May 13, 2026
56ae005
fix(lane-compare): align with workspace LaneModel/useLaneComponents s…
luvkapur May 13, 2026
b2b29ef
fix(component-compare): rewire InlineComponentCompare to workspace sc…
luvkapur May 14, 2026
db14d94
docs(spec): lane-overview to workspace-overview parity design
luvkapur May 14, 2026
d9679f8
docs(plan): lane-overview to workspace-overview parity implementation…
luvkapur May 14, 2026
03cb01c
feat(components-overview): extract shared overview from workspace-ove…
luvkapur May 14, 2026
3bd3786
refactor(workspace-overview): consume shared components-overview comp…
luvkapur May 14, 2026
40499f0
refactor(lane-overview): consume shared components-overview component
luvkapur May 14, 2026
f4cfa07
docs(spec): lane-overview sticky inlined header design
luvkapur May 14, 2026
e1eda71
docs(plan): lane-overview sticky inlined header implementation plan
luvkapur May 14, 2026
e526cad
feat(components-overview): make header + filter bar one sticky region
luvkapur May 14, 2026
245a957
feat(lane-overview): slim inline lane header replacing LaneDetails
luvkapur May 14, 2026
b64274e
fix(lane-overview): stop applying stale .container padding to sticky …
luvkapur May 14, 2026
0ac42b0
fix(lane-overview): add top padding to lane header for breathing room…
luvkapur May 14, 2026
a54626c
fix(ui,react): alias @teambit/lanes.entities.lane-diff to dedupe vers…
luvkapur May 14, 2026
0fa2e67
docs: add lane-compare bulk-fetch design spec
luvkapur May 14, 2026
e4bb1bb
docs: refine lane-compare bulk-fetch spec after implementation discovery
luvkapur May 14, 2026
ad31925
docs: add lane-compare bulk-fetch implementation plan
luvkapur May 14, 2026
57fe746
feat(component-compare): add paginated compare-pairs helper
luvkapur May 14, 2026
52cefcd
feat(component-compare): add compareComponents bulk method
luvkapur May 14, 2026
a75199e
refactor(component-compare): pass error object to logger.warn in comp…
luvkapur May 14, 2026
64d3635
feat(component-compare): add compareComponents bulk GraphQL field
luvkapur May 14, 2026
ef40e18
docs(component-compare): note nullable elements on compareComponents …
luvkapur May 14, 2026
b57f08e
feat(graphql): add opt-in per-operation request batching
luvkapur May 14, 2026
379461c
feat(component): forward optional apollo context through useComponent
luvkapur May 14, 2026
a6bacc6
feat(component-compare): add CompareDataProvider bulk-fetch context
luvkapur May 14, 2026
0e2c13b
fix(component-compare): guarantee paging termination and stabilize pa…
luvkapur May 14, 2026
2986d64
refactor(component-compare): feed inline compare from bulk context
luvkapur May 14, 2026
5bddb12
docs(component-compare): clarify compositions and null/loading handli…
luvkapur May 14, 2026
9674c77
feat(lane-compare): fetch component compare data in bulk
luvkapur May 14, 2026
221902b
chore: compile lane-compare bulk-fetch aspects
luvkapur May 14, 2026
c2baf11
fix(component-compare): don't show deleted-in-lane components as perp…
luvkapur May 14, 2026
164241b
fix(graphql): always accept batched requests on the server, not only …
luvkapur May 14, 2026
3047de2
lane compare re design
luvkapur May 15, 2026
0a95d98
Merge remote-tracking branch 'origin/master' into changes-redesign
luvkapur May 15, 2026
76feaad
redesign
luvkapur May 15, 2026
521a1f4
clean up
luvkapur May 15, 2026
0869618
refinements
luvkapur May 28, 2026
3dc6983
perf(lane-compare): instant view switching; fix compare console errors
luvkapur May 29, 2026
5d17b25
Merge origin/master into changes-redesign
luvkapur May 29, 2026
0a306c4
fix(ci): recreate preview.ui.preview-compare as a workspace component
luvkapur May 29, 2026
3eeb1b7
fix(docs): drop unused LanesAspect dep to break the workspace cycle
luvkapur May 29, 2026
3411dbb
fix(lanes): key diffStatus memo on main heads so it invalidates when …
luvkapur May 29, 2026
793daac
fix(compare): clear eslint errors blocking the build pipeline
luvkapur May 30, 2026
bc45660
fix(lane-compare-page): consistent-return in collapser effect
luvkapur May 30, 2026
3d0c52f
wip
luvkapur Jun 11, 2026
5f01309
Merge remote-tracking branch 'origin/master' into changes-redesign
luvkapur Jun 11, 2026
df69fac
fix(lint): remove unreachable code flagged by oxlint 1.68
luvkapur Jun 11, 2026
b364a3d
chore: gitignore superpowers brainstorm artifacts
luvkapur Jun 11, 2026
589d048
feat(api-diff): availability-aware diff, unified compare UI, insight …
luvkapur Jun 11, 2026
c923b38
fix(api-diff): address review findings from two-lens review
luvkapur Jun 11, 2026
22dcc34
refactor(compare): reuse @teambit/cache; share inline-diff helpers
luvkapur Jun 15, 2026
055805d
Merge remote-tracking branch 'origin/master' into changes-redesign
luvkapur Jun 26, 2026
f4d5783
fix comparing to main + speed up
luvkapur Jun 26, 2026
5f3c077
api diff - clean up
luvkapur Jun 29, 2026
91407f8
improve workspace perf
luvkapur Jun 30, 2026
af29df4
stabilize diff viewer
luvkapur Jul 2, 2026
73b515a
fix comparing with local changes on workspace
luvkapur Jul 2, 2026
8ededec
finalize
luvkapur Jul 2, 2026
2983859
sync lock file
luvkapur Jul 2, 2026
da4abf2
Merge branch 'master' into changes-redesign
luvkapur Jul 2, 2026
c7e8dc7
add type shims for shiki lib
luvkapur Jul 3, 2026
ced8446
fix env for diff viewer
luvkapur Jul 3, 2026
876817c
address qodo review: live-compare cache, bulk paging loading, CLI for…
luvkapur Jul 3, 2026
55ad879
address qodo re-review: nullable main head, wrap vs virtualization, g…
luvkapur Jul 3, 2026
aa82d28
lane diff-status: order-insensitive dependency/config comparison
luvkapur Jul 3, 2026
99e01cf
compare sidebar: clear stale file/aspect entries when a component bec…
luvkapur Jul 3, 2026
53d3519
diff-viewer: bound intra-line LCS to avoid quadratic stalls on huge l…
luvkapur Jul 3, 2026
65987c0
compare: resolve unfetched-pair stall and stale lane-diff derivations
luvkapur Jul 3, 2026
2ce034f
lane diff: import main base when its object is missing locally, not j…
luvkapur Jul 3, 2026
5a28100
lane compare: re-init compare state on pair-set change, not just count
luvkapur Jul 3, 2026
505fa72
compare: fix paging-termination race across pairs changes; files diff…
luvkapur Jul 3, 2026
421501a
compare: stop base-selector navigating to bogus href; cancel diff-vie…
luvkapur Jul 3, 2026
489f00f
compare/api-diff providers: terminate paging on null host; harden api…
luvkapur Jul 3, 2026
7602a04
lane diff: import main base when the head isn't resolvable yet, not o…
luvkapur Jul 3, 2026
a9a3327
lane compare: honor the host prop for bulk compare + api-diff instead…
luvkapur Jul 3, 2026
2fdbfd5
compare/api-diff providers: don't merge stale fetchMore pages after p…
luvkapur Jul 3, 2026
975bc88
lane compare: hide components with no actual code changes from the Co…
luvkapur Jul 3, 2026
4eb7b4d
compare: fix stale compositions map on lane switch + clear sidebar on…
luvkapur Jul 3, 2026
644fb9d
clean up
luvkapur Jul 6, 2026
7cdf449
clean up
luvkapur Jul 6, 2026
e987902
clean up
luvkapur Jul 6, 2026
1845e9d
sync with main
luvkapur Jul 6, 2026
1cb283d
clean up
luvkapur Jul 6, 2026
136e5fe
clean up
luvkapur Jul 6, 2026
d9fa440
qodo - feedback fixes
luvkapur Jul 6, 2026
a8ab799
Merge branch 'master' into changes-redesign
luvkapur Jul 6, 2026
a932480
Merge branch 'master' into changes-redesign
luvkapur Jul 7, 2026
1234e2a
env fix
luvkapur Jul 7, 2026
56b4a56
fixes
luvkapur Jul 7, 2026
7b46de6
qodo fixes
luvkapur Jul 7, 2026
d87a9d5
Merge remote-tracking branch 'origin/master' into changes-redesign
luvkapur Jul 7, 2026
85133fb
fix(lanes): import common snap on-demand for deferred lane-diff chang…
luvkapur Jul 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
157 changes: 157 additions & 0 deletions .bitmap
Original file line number Diff line number Diff line change
Expand Up @@ -1710,6 +1710,14 @@
"mainFile": "index.ts",
"rootDir": "scopes/ui-foundation/ui"
},
"ui/api-diff-view": {
"name": "ui/api-diff-view",
"scope": "",
"version": "",
"defaultScope": "teambit.semantics",
"mainFile": "index.ts",
"rootDir": "components/ui/api-diff-view"
},
"ui/aspect-box": {
"name": "ui/aspect-box",
"scope": "teambit.harmony",
Expand Down Expand Up @@ -1759,6 +1767,41 @@
"mainFile": "index.ts",
"rootDir": "components/ui/code-view"
},
"ui/compare/lane-compare": {
"name": "ui/compare/lane-compare",
"scope": "teambit.lanes",
"version": "0.0.206",
"mainFile": "index.ts",
"rootDir": "components/ui/compare/lane-compare",
"config": {
"teambit.dependencies/dependency-resolver": {
"policy": {
"dependencies": {
"@teambit/legacy": "-"
},
"devDependencies": {
"@types/mocha": "9.1.0",
"@teambit/legacy": "-"
},
"peerDependencies": {}
}
}
}
},
"ui/compare/lane-compare-hooks/use-lane-diff-status": {
"name": "ui/compare/lane-compare-hooks/use-lane-diff-status",
"scope": "teambit.lanes",
"version": "0.0.144",
"mainFile": "index.ts",
"rootDir": "components/ui/compare/lane-compare-hooks/use-lane-diff-status"
},
"ui/compare/lane-compare-page": {
"name": "ui/compare/lane-compare-page",
"scope": "teambit.lanes",
"version": "0.0.174",
"mainFile": "index.ts",
"rootDir": "components/ui/compare/lane-compare-page"
},
"ui/component-compare/changelog": {
"name": "ui/component-compare/changelog",
"scope": "teambit.component",
Expand Down Expand Up @@ -1836,13 +1879,28 @@
"mainFile": "index.ts",
"rootDir": "components/ui/component-filters/show-main-filter"
},
"ui/component-meta": {
"name": "ui/component-meta",
"scope": "teambit.component",
"version": "0.0.368",
"mainFile": "index.ts",
"rootDir": "components/ui/component-meta"
},
"ui/component-preview": {
"name": "ui/component-preview",
"scope": "teambit.preview",
"version": "1.0.36",
"mainFile": "index.ts",
"rootDir": "scopes/preview/ui/component-preview"
},
"ui/components-overview": {
"name": "ui/components-overview",
"scope": "",
"version": "",
"defaultScope": "teambit.explorer",
"mainFile": "index.ts",
"rootDir": "components/ui/components-overview"
},
"ui/composition-compare": {
"name": "ui/composition-compare",
"scope": "teambit.compositions",
Expand Down Expand Up @@ -1871,6 +1929,28 @@
"mainFile": "index.ts",
"rootDir": "scopes/cloud/ui/current-user"
},
"ui/deps-diff-table": {
"name": "ui/deps-diff-table",
"scope": "",
"version": "",
"defaultScope": "teambit.dependencies",
"mainFile": "index.ts",
"rootDir": "components/ui/deps-diff-table"
},
"ui/diff-viewer": {
"name": "ui/diff-viewer",
"scope": "",
"version": "",
"defaultScope": "teambit.code",
"mainFile": "index.ts",
"rootDir": "components/ui/diff-viewer",
"config": {
"teambit.react/react-env@1.3.5": {},
"teambit.envs/envs": {
"env": "teambit.react/react-env"
}
}
},
"ui/docs-app": {
"name": "ui/docs-app",
"scope": "teambit.react",
Expand Down Expand Up @@ -1934,13 +2014,82 @@
"mainFile": "index.ts",
"rootDir": "components/ui/hooks/scope-context"
},
"ui/hooks/use-bulk-paged-query": {
"name": "ui/hooks/use-bulk-paged-query",
"scope": "",
"version": "",
"defaultScope": "teambit.ui-foundation",
"mainFile": "index.ts",
"rootDir": "components/ui/hooks/use-bulk-paged-query",
"config": {
"teambit.react/react-env@1.3.5": {},
"teambit.envs/envs": {
"env": "teambit.react/react-env"
}
}
},
"ui/hooks/use-core-aspects": {
"name": "ui/hooks/use-core-aspects",
"scope": "teambit.harmony",
"version": "0.0.6",
"mainFile": "index.ts",
"rootDir": "components/ui/hooks/use-core-aspects"
},
"ui/hooks/use-data-query": {
"name": "ui/hooks/use-data-query",
"scope": "teambit.ui-foundation",
"version": "0.0.506",
"mainFile": "index.ts",
"rootDir": "components/ui/hooks/use-data-query"
},
"ui/inline-code-compare": {
"name": "ui/inline-code-compare",
"scope": "",
"version": "",
"defaultScope": "teambit.code",
"mainFile": "index.ts",
"rootDir": "components/ui/inline-code-compare"
},
"ui/inline-config-compare": {
"name": "ui/inline-config-compare",
"scope": "",
"version": "",
"defaultScope": "teambit.review",
"mainFile": "index.ts",
"rootDir": "components/ui/inline-config-compare"
},
"ui/inline-deps-compare": {
"name": "ui/inline-deps-compare",
"scope": "",
"version": "",
"defaultScope": "teambit.review",
"mainFile": "index.ts",
"rootDir": "components/ui/inline-deps-compare"
},
"ui/inline-diff-viewer": {
"name": "ui/inline-diff-viewer",
"scope": "",
"version": "",
"defaultScope": "teambit.code",
"mainFile": "index.ts",
"rootDir": "components/ui/inline-diff-viewer"
},
"ui/inline-preview-compare": {
"name": "ui/inline-preview-compare",
"scope": "",
"version": "",
"defaultScope": "teambit.preview",
"mainFile": "index.ts",
"rootDir": "components/ui/inline-preview-compare"
},
"ui/inline-tests-compare": {
"name": "ui/inline-tests-compare",
"scope": "",
"version": "",
"defaultScope": "teambit.review",
"mainFile": "index.ts",
"rootDir": "components/ui/inline-tests-compare"
},
"ui/inputs/lane-selector": {
"name": "ui/inputs/lane-selector",
"scope": "teambit.lanes",
Expand Down Expand Up @@ -1997,6 +2146,14 @@
"mainFile": "index.ts",
"rootDir": "components/ui/preserve-workspace-mode"
},
"ui/preview-compare": {
"name": "ui/preview-compare",
"scope": "",
"version": "",
"defaultScope": "teambit.preview",
"mainFile": "index.ts",
"rootDir": "components/ui/preview-compare"
},
"ui/preview-placeholder": {
"name": "ui/preview-placeholder",
"scope": "teambit.preview",
Expand Down
33 changes: 33 additions & 0 deletions components/entities/semantic-schema-diff/api-diff-change.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,27 @@ export enum APIDiffStatus {
MODIFIED = 'MODIFIED',
}

/**
* why a schema could not be obtained for one side of the diff.
* NOT_BUILT — the version was built before API extraction existed (no schema.json artifact).
* NO_EXTRACTOR — the component's env does not provide a schema extractor.
* DISABLED — schema extraction is disabled by config.
* FAILED — extraction or artifact retrieval threw.
*/
export type SchemaUnavailableReason = 'NOT_BUILT' | 'NO_EXTRACTOR' | 'DISABLED' | 'FAILED';

export type SchemaAvailability = {
available: boolean;
reason?: SchemaUnavailableReason;
};

/**
* whether the diff was actually computed, or skipped because schema data is
* missing for one or both sides. when not COMPUTED, change lists are empty —
* a missing schema must never be diffed as if it were an empty API.
*/
export type APIDiffComputeStatus = 'COMPUTED' | 'BASE_UNAVAILABLE' | 'COMPARE_UNAVAILABLE' | 'UNAVAILABLE';

export type APIDiffChange = {
status: APIDiffStatus;
visibility: 'public' | 'internal';
Expand All @@ -26,11 +47,23 @@ export type APIDiffChange = {
};

export type APIDiffResult = {
status: APIDiffComputeStatus;
base: SchemaAvailability;
compare: SchemaAvailability;
hasChanges: boolean;
/** consumer-facing impact — derived from public changes only */
impact: ImpactLevel;
/** severity of internal (non-exported) changes — never affects `impact` */
internalImpact: ImpactLevel;
publicChanges: APIDiffChange[];
internalChanges: APIDiffChange[];
changes: APIDiffChange[];
/**
* exports the extractor couldn't resolve on one or both sides (an `UnImplementedSchema` placeholder).
* these are NOT diffed as add/remove/modify — extraction gaps, surfaced separately as "couldn't
* analyze" so a real change list stays meaningful.
*/
unresolvedExports: string[];
added: number;
removed: number;
modified: number;
Expand Down
Loading