@teambit/lanes 1.0.1099 → 1.0.1101
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/lanes.graphql.js +20 -2
- package/dist/lanes.graphql.js.map +1 -1
- package/dist/lanes.main.runtime.d.ts +73 -4
- package/dist/lanes.main.runtime.js +292 -74
- package/dist/lanes.main.runtime.js.map +1 -1
- package/dist/lanes.ui.runtime.d.ts +43 -4
- package/dist/lanes.ui.runtime.js +67 -6
- package/dist/lanes.ui.runtime.js.map +1 -1
- package/dist/{preview-1785260578779.js → preview-1785278532531.js} +2 -2
- package/lanes.ui.runtime.tsx +70 -4
- package/package.json +49 -48
|
@@ -8,6 +8,7 @@ import type { ScopeUI } from '@teambit/scope';
|
|
|
8
8
|
import type { WorkspaceUI } from '@teambit/workspace';
|
|
9
9
|
import type { ComponentUI } from '@teambit/component';
|
|
10
10
|
import { ComponentID } from '@teambit/component';
|
|
11
|
+
import type { TabItem } from '@teambit/component.ui.component-compare.models.component-compare-props';
|
|
11
12
|
import type { MenuWidget, MenuWidgetSlot } from '@teambit/ui-foundation.ui.menu';
|
|
12
13
|
import type { LaneOverviewLine, LaneOverviewLineSlot } from '@teambit/lanes.ui.lane-overview';
|
|
13
14
|
import type { LanesNavPlugin, LanesOrderedNavigationSlot } from '@teambit/lanes.ui.menus.lanes-overview-menu';
|
|
@@ -18,6 +19,21 @@ import type { ComponentCompareUI } from '@teambit/component-compare';
|
|
|
18
19
|
import type { CommandBarUI } from '@teambit/command-bar';
|
|
19
20
|
export type LaneCompareProps = Partial<DefaultLaneCompareProps>;
|
|
20
21
|
export type LaneProviderIgnoreSlot = SlotRegistry<IgnoreDerivingFromUrl>;
|
|
22
|
+
/**
|
|
23
|
+
* Stable, module-scope tabs list. Previously this array (and the `React.createElement(...)` for each
|
|
24
|
+
* tab's element) was constructed inside `getLaneCompare`, which means every render produced a new
|
|
25
|
+
* array and new tab-element references. Those flowed into `<LaneCompare tabs={...}>` → `resolvedTabs`
|
|
26
|
+
* (useMemo keyed on input ref) → new value → new `allTabs` prop on every `InlineComponentCompare`,
|
|
27
|
+
* defeating React.memo and forcing all 10 component panels (and their nested tabs) to re-render on
|
|
28
|
+
* every parent re-render — including every `setViewMode` click. Hoisting the array to module scope
|
|
29
|
+
* gives a single stable reference that survives any number of parent renders.
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* Slot signature for `LanesUI.registerCompareTab`. Kept for back-compat — the canonical inline
|
|
33
|
+
* compare-tab list is now owned by `ComponentCompareUI` (so single-component compare and
|
|
34
|
+
* lane-compare share one source). Tabs registered here are merged on top of that list.
|
|
35
|
+
*/
|
|
36
|
+
export type LaneCompareTabSlot = SlotRegistry<TabItem | TabItem[]>;
|
|
21
37
|
export declare function useComponentFilters(): {
|
|
22
38
|
loading: boolean;
|
|
23
39
|
log?: undefined;
|
|
@@ -40,16 +56,28 @@ export declare class LanesUI {
|
|
|
40
56
|
*/
|
|
41
57
|
private overviewSlot;
|
|
42
58
|
private laneProviderIgnoreSlot;
|
|
59
|
+
/**
|
|
60
|
+
* compare-tab slot. Aspects register their inline-compare tab via `registerCompareTab(...)`;
|
|
61
|
+
* the registered tabs are merged with the local fallback list, deduped by `id`, and sorted
|
|
62
|
+
* by `order` before being passed to `<LaneCompare>`.
|
|
63
|
+
*/
|
|
64
|
+
private compareTabSlot;
|
|
43
65
|
private workspace?;
|
|
44
66
|
private scope?;
|
|
45
67
|
static dependencies: import("@teambit/harmony").Aspect[];
|
|
46
68
|
static runtime: import("@teambit/harmony").RuntimeDefinition;
|
|
47
|
-
static slots: (((registerFn: () => string) => SlotRegistry<LaneOverviewLineSlot>) | ((registerFn: () => string) => SlotRegistry<LaneProviderIgnoreSlot>) | ((registerFn: () => string) => SlotRegistry<NavigationSlot>) | ((registerFn: () => string) => SlotRegistry<RouteProps>))[];
|
|
69
|
+
static slots: (((registerFn: () => string) => SlotRegistry<LaneOverviewLineSlot>) | ((registerFn: () => string) => SlotRegistry<LaneProviderIgnoreSlot>) | ((registerFn: () => string) => SlotRegistry<NavigationSlot>) | ((registerFn: () => string) => SlotRegistry<RouteProps>) | ((registerFn: () => string) => SlotRegistry<TabItem[] | TabItem>))[];
|
|
48
70
|
constructor(componentUI: ComponentUI, componentCompareUI: ComponentCompareUI, routeSlot: RouteSlot, navSlot: LanesOrderedNavigationSlot, menuWidgetSlot: MenuWidgetSlot,
|
|
49
71
|
/**
|
|
50
72
|
* overview line slot to add new lines beneath the overview section
|
|
51
73
|
*/
|
|
52
|
-
overviewSlot: LaneOverviewLineSlot, laneProviderIgnoreSlot: LaneProviderIgnoreSlot,
|
|
74
|
+
overviewSlot: LaneOverviewLineSlot, laneProviderIgnoreSlot: LaneProviderIgnoreSlot,
|
|
75
|
+
/**
|
|
76
|
+
* compare-tab slot. Aspects register their inline-compare tab via `registerCompareTab(...)`;
|
|
77
|
+
* the registered tabs are merged with the local fallback list, deduped by `id`, and sorted
|
|
78
|
+
* by `order` before being passed to `<LaneCompare>`.
|
|
79
|
+
*/
|
|
80
|
+
compareTabSlot: LaneCompareTabSlot, workspace?: WorkspaceUI | undefined, scope?: ScopeUI | undefined);
|
|
53
81
|
private readonly lanesHost;
|
|
54
82
|
private readonly hostAspect?;
|
|
55
83
|
private readonly host;
|
|
@@ -89,6 +117,16 @@ export declare class LanesUI {
|
|
|
89
117
|
*/
|
|
90
118
|
registerOverviewLine(...lines: LaneOverviewLine[]): this;
|
|
91
119
|
registerNavigation(routes: LanesNavPlugin[]): void;
|
|
120
|
+
/**
|
|
121
|
+
* Register an inline compare tab. Aspects own their compare-tab entry and call this in their
|
|
122
|
+
* own UI provider (e.g. the docs aspect registers `inline-docs` so it can pass its real
|
|
123
|
+
* `titleBadges` / `overviewOptions` slots). Tabs are merged with the lanes-side fallback list,
|
|
124
|
+
* deduped by `id`, and sorted by `order` at render time.
|
|
125
|
+
*/
|
|
126
|
+
registerCompareTab(tab: TabItem | TabItem[]): this;
|
|
127
|
+
private _resolvedCompareTabs?;
|
|
128
|
+
private _resolvedCompareTabsKey?;
|
|
129
|
+
private resolveCompareTabs;
|
|
92
130
|
getLaneCompare: (props: LaneCompareProps) => React.JSX.Element | null;
|
|
93
131
|
static provider([uiUi, componentUI, workspaceUi, scopeUi, componentCompareUI, commandBarUI]: [
|
|
94
132
|
UiUI,
|
|
@@ -97,12 +135,13 @@ export declare class LanesUI {
|
|
|
97
135
|
ScopeUI,
|
|
98
136
|
ComponentCompareUI,
|
|
99
137
|
CommandBarUI
|
|
100
|
-
], _: any, [routeSlot, overviewSlot, navSlot, menuWidgetSlot, laneProviderIgnoreSlot]: [
|
|
138
|
+
], _: any, [routeSlot, overviewSlot, navSlot, menuWidgetSlot, laneProviderIgnoreSlot, compareTabSlot]: [
|
|
101
139
|
RouteSlot,
|
|
102
140
|
LaneOverviewLineSlot,
|
|
103
141
|
LanesOrderedNavigationSlot,
|
|
104
142
|
MenuWidgetSlot,
|
|
105
|
-
LaneProviderIgnoreSlot
|
|
143
|
+
LaneProviderIgnoreSlot,
|
|
144
|
+
LaneCompareTabSlot
|
|
106
145
|
], harmony: Harmony): Promise<LanesUI>;
|
|
107
146
|
}
|
|
108
147
|
export default LanesUI;
|
package/dist/lanes.ui.runtime.js
CHANGED
|
@@ -70,6 +70,13 @@ function _component() {
|
|
|
70
70
|
};
|
|
71
71
|
return data;
|
|
72
72
|
}
|
|
73
|
+
function _lodash() {
|
|
74
|
+
const data = require("lodash");
|
|
75
|
+
_lodash = function () {
|
|
76
|
+
return data;
|
|
77
|
+
};
|
|
78
|
+
return data;
|
|
79
|
+
}
|
|
73
80
|
function _lanesUi() {
|
|
74
81
|
const data = require("@teambit/lanes.ui.lane-overview");
|
|
75
82
|
_lanesUi = function () {
|
|
@@ -174,6 +181,21 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
|
|
|
174
181
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
175
182
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
176
183
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
184
|
+
/**
|
|
185
|
+
* Stable, module-scope tabs list. Previously this array (and the `React.createElement(...)` for each
|
|
186
|
+
* tab's element) was constructed inside `getLaneCompare`, which means every render produced a new
|
|
187
|
+
* array and new tab-element references. Those flowed into `<LaneCompare tabs={...}>` → `resolvedTabs`
|
|
188
|
+
* (useMemo keyed on input ref) → new value → new `allTabs` prop on every `InlineComponentCompare`,
|
|
189
|
+
* defeating React.memo and forcing all 10 component panels (and their nested tabs) to re-render on
|
|
190
|
+
* every parent re-render — including every `setViewMode` click. Hoisting the array to module scope
|
|
191
|
+
* gives a single stable reference that survives any number of parent renders.
|
|
192
|
+
*/
|
|
193
|
+
/**
|
|
194
|
+
* Slot signature for `LanesUI.registerCompareTab`. Kept for back-compat — the canonical inline
|
|
195
|
+
* compare-tab list is now owned by `ComponentCompareUI` (so single-component compare and
|
|
196
|
+
* lane-compare share one source). Tabs registered here are merged on top of that list.
|
|
197
|
+
*/
|
|
198
|
+
|
|
177
199
|
function useComponentFilters() {
|
|
178
200
|
const idFromLocation = (0, _component().useIdFromLocation)(undefined, true);
|
|
179
201
|
const {
|
|
@@ -221,7 +243,13 @@ class LanesUI {
|
|
|
221
243
|
/**
|
|
222
244
|
* overview line slot to add new lines beneath the overview section
|
|
223
245
|
*/
|
|
224
|
-
overviewSlot, laneProviderIgnoreSlot,
|
|
246
|
+
overviewSlot, laneProviderIgnoreSlot,
|
|
247
|
+
/**
|
|
248
|
+
* compare-tab slot. Aspects register their inline-compare tab via `registerCompareTab(...)`;
|
|
249
|
+
* the registered tabs are merged with the local fallback list, deduped by `id`, and sorted
|
|
250
|
+
* by `order` before being passed to `<LaneCompare>`.
|
|
251
|
+
*/
|
|
252
|
+
compareTabSlot, workspace, scope) {
|
|
225
253
|
this.componentUI = componentUI;
|
|
226
254
|
this.componentCompareUI = componentCompareUI;
|
|
227
255
|
this.routeSlot = routeSlot;
|
|
@@ -229,6 +257,7 @@ class LanesUI {
|
|
|
229
257
|
this.menuWidgetSlot = menuWidgetSlot;
|
|
230
258
|
this.overviewSlot = overviewSlot;
|
|
231
259
|
this.laneProviderIgnoreSlot = laneProviderIgnoreSlot;
|
|
260
|
+
this.compareTabSlot = compareTabSlot;
|
|
232
261
|
this.workspace = workspace;
|
|
233
262
|
this.scope = scope;
|
|
234
263
|
_defineProperty(this, "lanesHost", void 0);
|
|
@@ -242,14 +271,20 @@ class LanesUI {
|
|
|
242
271
|
ignoreDerivingFromUrl: ignoreFns
|
|
243
272
|
}, children);
|
|
244
273
|
});
|
|
274
|
+
// memoize the resolved tab list — same identity across renders unless a new registration lands.
|
|
275
|
+
// The base list is owned by component-compare (so the single-component compare page and
|
|
276
|
+
// lane-compare share one source). We additionally merge in anything registered on this aspect's
|
|
277
|
+
// legacy `compareTabSlot` for back-compat.
|
|
278
|
+
_defineProperty(this, "_resolvedCompareTabs", void 0);
|
|
279
|
+
_defineProperty(this, "_resolvedCompareTabsKey", void 0);
|
|
245
280
|
_defineProperty(this, "getLaneCompare", props => {
|
|
246
|
-
const tabs = this.componentCompareUI.tabs;
|
|
247
281
|
if (!props.base || !props.compare) return null;
|
|
248
282
|
return /*#__PURE__*/_react().default.createElement(_lanesUiCompare().LaneCompare, _extends({}, props, {
|
|
249
283
|
base: props.base,
|
|
250
284
|
compare: props.compare,
|
|
251
285
|
host: props.host || this.host,
|
|
252
|
-
tabs: props.tabs ||
|
|
286
|
+
tabs: props.tabs || this.resolveCompareTabs(),
|
|
287
|
+
apiDiffInsights: props.apiDiffInsights || this.componentCompareUI.getApiDiffInsights()
|
|
253
288
|
}));
|
|
254
289
|
});
|
|
255
290
|
this.hostAspect = workspace || scope;
|
|
@@ -440,7 +475,33 @@ class LanesUI {
|
|
|
440
475
|
registerNavigation(routes) {
|
|
441
476
|
this.navSlot.register(routes);
|
|
442
477
|
}
|
|
443
|
-
|
|
478
|
+
|
|
479
|
+
/**
|
|
480
|
+
* Register an inline compare tab. Aspects own their compare-tab entry and call this in their
|
|
481
|
+
* own UI provider (e.g. the docs aspect registers `inline-docs` so it can pass its real
|
|
482
|
+
* `titleBadges` / `overviewOptions` slots). Tabs are merged with the lanes-side fallback list,
|
|
483
|
+
* deduped by `id`, and sorted by `order` at render time.
|
|
484
|
+
*/
|
|
485
|
+
registerCompareTab(tab) {
|
|
486
|
+
this.compareTabSlot.register(tab);
|
|
487
|
+
return this;
|
|
488
|
+
}
|
|
489
|
+
resolveCompareTabs() {
|
|
490
|
+
const fromComponentCompare = this.componentCompareUI.resolveCompareTabs();
|
|
491
|
+
const slotEntries = this.compareTabSlot.toArray();
|
|
492
|
+
const localRegistered = (0, _lodash().flatten)(slotEntries.map(([, value]) => value).filter(Boolean));
|
|
493
|
+
const cacheKey = `${fromComponentCompare.map(t => `${t.id}:${t.order ?? 0}`).join(',')}|${localRegistered.map(t => `${t.id}:${t.order ?? 0}`).join(',')}`;
|
|
494
|
+
if (this._resolvedCompareTabs && this._resolvedCompareTabsKey === cacheKey) {
|
|
495
|
+
return this._resolvedCompareTabs;
|
|
496
|
+
}
|
|
497
|
+
const localIds = new Set(localRegistered.map(t => t.id));
|
|
498
|
+
// local registrations take precedence over the component-compare list.
|
|
499
|
+
const merged = [...localRegistered, ...fromComponentCompare.filter(t => !localIds.has(t.id))].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
|
|
500
|
+
this._resolvedCompareTabs = merged;
|
|
501
|
+
this._resolvedCompareTabsKey = cacheKey;
|
|
502
|
+
return merged;
|
|
503
|
+
}
|
|
504
|
+
static async provider([uiUi, componentUI, workspaceUi, scopeUi, componentCompareUI, commandBarUI], _, [routeSlot, overviewSlot, navSlot, menuWidgetSlot, laneProviderIgnoreSlot, compareTabSlot], harmony) {
|
|
444
505
|
const {
|
|
445
506
|
config
|
|
446
507
|
} = harmony;
|
|
@@ -453,7 +514,7 @@ class LanesUI {
|
|
|
453
514
|
if (host === _scope().ScopeAspect.id) {
|
|
454
515
|
scope = scopeUi;
|
|
455
516
|
}
|
|
456
|
-
const lanesUi = new LanesUI(componentUI, componentCompareUI, routeSlot, navSlot, menuWidgetSlot, overviewSlot, laneProviderIgnoreSlot, workspace, scope);
|
|
517
|
+
const lanesUi = new LanesUI(componentUI, componentCompareUI, routeSlot, navSlot, menuWidgetSlot, overviewSlot, laneProviderIgnoreSlot, compareTabSlot, workspace, scope);
|
|
457
518
|
if (uiUi) uiUi.registerRenderHooks({
|
|
458
519
|
reactContext: lanesUi.renderContext
|
|
459
520
|
});
|
|
@@ -485,7 +546,7 @@ class LanesUI {
|
|
|
485
546
|
exports.LanesUI = LanesUI;
|
|
486
547
|
_defineProperty(LanesUI, "dependencies", [_ui().UIAspect, _component().ComponentAspect, _workspace().WorkspaceAspect, _scope().ScopeAspect, _componentCompare().ComponentCompareAspect, _commandBar().CommandBarAspect]);
|
|
487
548
|
_defineProperty(LanesUI, "runtime", _ui().UIRuntime);
|
|
488
|
-
_defineProperty(LanesUI, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType()]);
|
|
549
|
+
_defineProperty(LanesUI, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType()]);
|
|
489
550
|
var _default = exports.default = LanesUI;
|
|
490
551
|
_lanes().LanesAspect.addRuntime(LanesUI);
|
|
491
552
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","data","_interopRequireWildcard","require","_reactRouterDom","_harmony","_lanesUiCompare","_ui","_designUiPages","_scope","_workspace","_component","_lanesUi","_lanesUiMenus","_uiFoundationUiReactRouter","_lanesUiMenus2","_lanesUiModels","_lanesHooks","_lanesUiNavigation","_lanesHooks2","_componentCompare","_lanesUiCompare2","_scopeUi","_commandBar","_lanes","_lanesUiModule","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","useComponentFilters","idFromLocation","useIdFromLocation","undefined","lanesModel","loading","useLanes","laneFromUrl","useViewedLaneFromUrl","laneComponentId","isDefault","resolveComponentFromUrl","log","head","version","useLaneComponentIdFromUrl","query","useQuery","componentVersion","compIdFromLocation","ComponentID","tryFromString","lanesComp","changeVersion","useComponentId","toString","LanesUI","constructor","componentUI","componentCompareUI","routeSlot","navSlot","menuWidgetSlot","overviewSlot","laneProviderIgnoreSlot","workspace","scope","children","ignoreFns","values","createElement","LanesProvider","ignoreDerivingFromUrl","props","tabs","base","compare","LaneCompare","host","hostAspect","lanesHost","WorkspaceAspect","id","ScopeAspect","registerHostAspectRoutes","registerRoutes","getLaneRoutes","registerMenuRoutes","getMenuRoutes","path","LanesModel","lanesPrefix","Fragment","Route","lanePath","index","element","getLaneOverview","getLaneComponent","getLanesComparePage","NotFoundPage","overrideComputeLaneUrl","fn","prefix","getLaneComponentUrl","getLaneIdFromPathname","getLaneUrl","getComponentUI","componentId","getLaneComponentMenu","getMenu","LaneOverview","LaneComparePage","getLaneCompare","groupByScope","getLanesOverviewMenu","LanesOverviewMenu","navigationSlot","widgetSlot","registerMenuWidget","menuItems","register","registerLaneProviderIgnoreSlot","ignoreFn","registerLanesRoutes","registerNavigation","href","exact","order","hide","viewedLane","lanes","getLanesSwitcher","mainIcon","useContext","ScopeContext","ScopeIcon","size","scopeImage","icon","bgColor","backgroundIconColor","className","styles","mainLaneIcon","LanesSwitcher","LaneSwitcher","getLanesProvider","getUseLanes","registerLanesDropdown","registerSidebarLink","component","Gallery","weight","registerRoute","route","registerOverviewLine","lines","routes","provider","uiUi","workspaceUi","scopeUi","commandBarUI","_","harmony","config","lanesUi","registerRenderHooks","reactContext","renderContext","currentLane","UseLaneMenu","actionName","actionIcon","viewedLaneId","currentLaneId","CommandBarButton","exports","UIAspect","ComponentAspect","ComponentCompareAspect","CommandBarAspect","UIRuntime","Slot","withType","_default","LanesAspect","addRuntime"],"sources":["lanes.ui.runtime.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport React, { useContext } from 'react';\nimport type { RouteProps } from 'react-router-dom';\nimport { Route } from 'react-router-dom';\nimport type { Harmony, SlotRegistry } from '@teambit/harmony';\nimport { Slot } from '@teambit/harmony';\nimport { LaneCompare, type LaneCompareProps as DefaultLaneCompareProps } from '@teambit/lanes.ui.compare.lane-compare';\nimport type { UiUI } from '@teambit/ui';\nimport { UIRuntime, UIAspect } from '@teambit/ui';\nimport type { NavigationSlot, RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { NotFoundPage } from '@teambit/design.ui.pages.not-found';\nimport type { ScopeUI } from '@teambit/scope';\nimport { ScopeAspect, ScopeContext } from '@teambit/scope';\nimport type { WorkspaceUI } from '@teambit/workspace';\nimport { WorkspaceAspect } from '@teambit/workspace';\nimport type { ComponentUI } from '@teambit/component';\nimport { ComponentAspect, useIdFromLocation, ComponentID } from '@teambit/component';\nimport type { MenuWidget, MenuWidgetSlot } from '@teambit/ui-foundation.ui.menu';\nimport type { LaneOverviewLine, LaneOverviewLineSlot } from '@teambit/lanes.ui.lane-overview';\nimport { LaneOverview } from '@teambit/lanes.ui.lane-overview';\nimport type { LanesNavPlugin, LanesOrderedNavigationSlot } from '@teambit/lanes.ui.menus.lanes-overview-menu';\nimport { LanesOverviewMenu } from '@teambit/lanes.ui.menus.lanes-overview-menu';\nimport { useQuery } from '@teambit/ui-foundation.ui.react-router.use-query';\nimport { UseLaneMenu } from '@teambit/lanes.ui.menus.use-lanes-menu';\nimport type { LanesHost } from '@teambit/lanes.ui.models.lanes-model';\nimport { LanesModel } from '@teambit/lanes.ui.models.lanes-model';\nimport type { IgnoreDerivingFromUrl, UseLanes } from '@teambit/lanes.hooks.use-lanes';\nimport { LanesProvider, useLanes } from '@teambit/lanes.hooks.use-lanes';\nimport { LaneSwitcher } from '@teambit/lanes.ui.navigation.lane-switcher';\nimport { useViewedLaneFromUrl } from '@teambit/lanes.hooks.use-viewed-lane-from-url';\nimport type { ComponentCompareUI } from '@teambit/component-compare';\nimport { ComponentCompareAspect } from '@teambit/component-compare';\nimport { LaneComparePage } from '@teambit/lanes.ui.compare.lane-compare-page';\nimport { ScopeIcon } from '@teambit/scope.ui.scope-icon';\nimport type { CommandBarUI } from '@teambit/command-bar';\nimport { CommandBarAspect } from '@teambit/command-bar';\n\nimport { LanesAspect } from './lanes.aspect';\nimport styles from './lanes.ui.module.scss';\n\nexport type LaneCompareProps = Partial<DefaultLaneCompareProps>;\nexport type LaneProviderIgnoreSlot = SlotRegistry<IgnoreDerivingFromUrl>;\nexport function useComponentFilters() {\n const idFromLocation = useIdFromLocation(undefined, true);\n const { lanesModel, loading } = useLanes();\n const laneFromUrl = useViewedLaneFromUrl();\n const laneComponentId =\n idFromLocation && !laneFromUrl?.isDefault()\n ? (lanesModel?.resolveComponentFromUrl(idFromLocation, laneFromUrl) ?? null)\n : null;\n\n if (laneComponentId === null || loading) {\n return {\n loading: true,\n };\n }\n\n return {\n loading: false,\n log: {\n head: laneComponentId.version,\n },\n };\n}\n\nexport function useLaneComponentIdFromUrl(): ComponentID | undefined | null {\n const idFromLocation = useIdFromLocation(undefined, true);\n const { lanesModel, loading } = useLanes();\n const laneFromUrl = useViewedLaneFromUrl();\n const query = useQuery();\n const componentVersion = query.get('version');\n\n if (!idFromLocation) return null;\n\n const compIdFromLocation = ComponentID.tryFromString(\n `${idFromLocation}${componentVersion ? `@${componentVersion}` : ''}`\n );\n\n if (compIdFromLocation) return compIdFromLocation;\n if (loading) return undefined;\n\n const lanesComp = (lanesModel?.resolveComponentFromUrl(idFromLocation, laneFromUrl) as any | undefined) ?? null;\n\n if (componentVersion) {\n return lanesComp?.changeVersion(componentVersion);\n }\n\n return lanesComp;\n}\n\nexport function useComponentId() {\n return useLaneComponentIdFromUrl()?.toString();\n}\n\nexport class LanesUI {\n static dependencies = [\n UIAspect,\n ComponentAspect,\n WorkspaceAspect,\n ScopeAspect,\n ComponentCompareAspect,\n CommandBarAspect,\n ];\n\n static runtime = UIRuntime;\n static slots = [\n Slot.withType<RouteProps>(),\n Slot.withType<LaneOverviewLineSlot>(),\n Slot.withType<NavigationSlot>(),\n Slot.withType<MenuWidgetSlot>(),\n Slot.withType<LaneProviderIgnoreSlot>(),\n ];\n\n constructor(\n private componentUI: ComponentUI,\n private componentCompareUI: ComponentCompareUI,\n private routeSlot: RouteSlot,\n private navSlot: LanesOrderedNavigationSlot,\n private menuWidgetSlot: MenuWidgetSlot,\n /**\n * overview line slot to add new lines beneath the overview section\n */\n private overviewSlot: LaneOverviewLineSlot,\n private laneProviderIgnoreSlot: LaneProviderIgnoreSlot,\n private workspace?: WorkspaceUI,\n private scope?: ScopeUI\n ) {\n this.hostAspect = workspace || scope;\n this.lanesHost = workspace ? 'workspace' : 'scope';\n this.host = workspace ? WorkspaceAspect.id : ScopeAspect.id;\n }\n\n private readonly lanesHost: LanesHost;\n private readonly hostAspect?: WorkspaceUI | ScopeUI;\n private readonly host: string;\n\n private registerHostAspectRoutes() {\n if (!this.hostAspect) return;\n this.hostAspect.registerRoutes(this.getLaneRoutes());\n this.hostAspect.registerMenuRoutes(this.getMenuRoutes());\n }\n\n getLaneRoutes() {\n return [\n {\n path: LanesModel.lanesPrefix,\n children: (\n <>\n <Route path={LanesModel.lanePath}>\n <Route index element={this.getLaneOverview()} />\n <Route path=\"~component/*\" element={this.getLaneComponent()} />\n <Route path=\"~compare/*\" element={this.getLanesComparePage()} />\n <Route path=\"*\" element={<NotFoundPage />} />\n </Route>\n <Route path=\"*\" element={<NotFoundPage />} />\n </>\n ),\n },\n ];\n }\n\n overrideComputeLaneUrl(\n fn: () => {\n prefix: string;\n path: string;\n getLaneIdFromPathname: typeof LanesModel.getLaneIdFromPathname;\n getLaneUrl: typeof LanesModel.getLaneUrl;\n getLaneComponentUrl: typeof LanesModel.getLaneComponentUrl;\n }\n ) {\n const { prefix, path, getLaneComponentUrl, getLaneIdFromPathname, getLaneUrl } = fn();\n LanesModel.lanesPrefix = prefix;\n LanesModel.lanePath = path;\n LanesModel.getLaneComponentUrl = getLaneComponentUrl;\n LanesModel.getLaneUrl = getLaneUrl;\n LanesModel.getLaneIdFromPathname = getLaneIdFromPathname;\n }\n\n getLaneComponent() {\n return this.componentUI.getComponentUI(this.host, {\n componentId: useComponentId,\n useComponentFilters,\n });\n }\n\n getLaneComponentMenu() {\n return this.componentUI.getMenu(this.host, {\n componentId: useComponentId,\n useComponentFilters,\n });\n }\n\n getLaneOverview() {\n return (\n <LaneOverview\n routeSlot={this.routeSlot}\n overviewSlot={this.overviewSlot}\n host={this.lanesHost}\n useLanes={useLanes}\n />\n );\n }\n\n getLanesComparePage() {\n return <LaneComparePage getLaneCompare={this.getLaneCompare} groupByScope={this.lanesHost === 'workspace'} />;\n }\n\n getMenuRoutes() {\n return [\n {\n path: LanesModel.lanesPrefix,\n children: (\n <Route path={`${LanesModel.lanePath}/*`}>\n <Route path={'*'} element={this.getLanesOverviewMenu()} />\n <Route path=\"~component/*\" element={this.getLaneComponentMenu()} />\n </Route>\n ),\n },\n ];\n }\n\n getLanesOverviewMenu() {\n return <LanesOverviewMenu navigationSlot={this.navSlot} widgetSlot={this.menuWidgetSlot} />;\n }\n\n registerMenuWidget(...menuItems: MenuWidget[]) {\n this.menuWidgetSlot.register(menuItems);\n return this;\n }\n\n registerLaneProviderIgnoreSlot(ignoreFn: IgnoreDerivingFromUrl) {\n this.laneProviderIgnoreSlot.register(ignoreFn);\n return this;\n }\n\n private registerLanesRoutes() {\n this.registerNavigation([\n // {\n // props: {\n // href: '.',\n // exact: true,\n // children: 'README',\n // },\n // order: 1,\n // hide: () => {\n // const { lanesModel } = useLanes();\n // return !lanesModel?.viewedLane?.readmeComponent;\n // },\n // },\n {\n props: {\n href: '.',\n exact: true,\n children: 'Overview',\n },\n order: 1,\n },\n {\n props: {\n href: '~compare',\n children: 'Compare',\n },\n order: 2,\n hide: () => {\n const { lanesModel } = useLanes();\n return !lanesModel?.viewedLane || lanesModel?.lanes.length < 2;\n },\n },\n ]);\n }\n\n private registerRoutes() {\n this.registerHostAspectRoutes();\n this.registerLanesRoutes();\n }\n\n getLanesSwitcher() {\n const mainIcon = () => {\n const scope = useContext(ScopeContext);\n return (\n <ScopeIcon\n size={24}\n scopeImage={scope.icon}\n bgColor={scope.backgroundIconColor}\n className={styles.mainLaneIcon}\n />\n );\n };\n\n const LanesSwitcher = (\n <LaneSwitcher\n groupByScope={this.lanesHost === 'workspace'}\n mainIcon={this.lanesHost === 'scope' ? mainIcon : undefined}\n // @ts-ignore @todo - fix this\n useLanes={useLanes}\n />\n );\n\n return LanesSwitcher;\n }\n\n getLanesProvider() {\n return LanesProvider;\n }\n\n getUseLanes(): UseLanes {\n return useLanes;\n }\n\n private registerLanesDropdown() {\n const LanesSwitcher = this.getLanesSwitcher();\n\n this.hostAspect?.registerSidebarLink({\n component: function Gallery() {\n return LanesSwitcher;\n },\n weight: 1000,\n });\n }\n\n private renderContext = ({ children }: { children: ReactNode }) => {\n const ignoreFns = this.laneProviderIgnoreSlot.values();\n\n return <LanesProvider ignoreDerivingFromUrl={ignoreFns}>{children}</LanesProvider>;\n };\n\n registerRoute(route: RouteProps) {\n this.routeSlot.register(route);\n return this;\n }\n\n /**\n * register a new line beneath the lane overview section.\n */\n registerOverviewLine(...lines: LaneOverviewLine[]) {\n this.overviewSlot.register(lines);\n return this;\n }\n\n registerNavigation(routes: LanesNavPlugin[]) {\n this.navSlot.register(routes);\n }\n\n getLaneCompare = (props: LaneCompareProps) => {\n const tabs = this.componentCompareUI.tabs;\n\n if (!props.base || !props.compare) return null;\n\n return (\n <LaneCompare\n {...props}\n base={props.base}\n compare={props.compare}\n host={props.host || this.host}\n tabs={props.tabs || tabs}\n />\n );\n };\n\n static async provider(\n [uiUi, componentUI, workspaceUi, scopeUi, componentCompareUI, commandBarUI]: [\n UiUI,\n ComponentUI,\n WorkspaceUI,\n ScopeUI,\n ComponentCompareUI,\n CommandBarUI,\n ],\n _,\n [routeSlot, overviewSlot, navSlot, menuWidgetSlot, laneProviderIgnoreSlot]: [\n RouteSlot,\n LaneOverviewLineSlot,\n LanesOrderedNavigationSlot,\n MenuWidgetSlot,\n LaneProviderIgnoreSlot,\n ],\n harmony: Harmony\n ) {\n const { config } = harmony;\n const host = String(config.get('teambit.harmony/bit'));\n let workspace: WorkspaceUI | undefined;\n let scope: ScopeUI | undefined;\n if (host === WorkspaceAspect.id) {\n workspace = workspaceUi;\n }\n if (host === ScopeAspect.id) {\n scope = scopeUi;\n }\n const lanesUi = new LanesUI(\n componentUI,\n componentCompareUI,\n routeSlot,\n navSlot,\n menuWidgetSlot,\n overviewSlot,\n laneProviderIgnoreSlot,\n workspace,\n scope\n );\n if (uiUi) uiUi.registerRenderHooks({ reactContext: lanesUi.renderContext });\n lanesUi.registerRoutes();\n lanesUi.registerMenuWidget(() => {\n const { lanesModel } = useLanes();\n if (!lanesModel?.viewedLane) return null;\n const { viewedLane, currentLane } = lanesModel;\n return (\n <UseLaneMenu\n actionName={'Import'}\n actionIcon={'terminal'}\n host={lanesUi.lanesHost}\n viewedLaneId={viewedLane.id}\n currentLaneId={currentLane?.id}\n />\n );\n });\n lanesUi.registerLanesDropdown();\n if (workspace) {\n lanesUi.registerMenuWidget(commandBarUI.CommandBarButton);\n }\n return lanesUi;\n }\n}\n\nexport default LanesUI;\n\nLanesAspect.addRuntime(LanesUI);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","data","_interopRequireWildcard","require","_reactRouterDom","_harmony","_lanesUiCompare","_ui","_designUiPages","_scope","_workspace","_component","_lodash","_lanesUi","_lanesUiMenus","_uiFoundationUiReactRouter","_lanesUiMenus2","_lanesUiModels","_lanesHooks","_lanesUiNavigation","_lanesHooks2","_componentCompare","_lanesUiCompare2","_scopeUi","_commandBar","_lanes","_lanesUiModule","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","useComponentFilters","idFromLocation","useIdFromLocation","undefined","lanesModel","loading","useLanes","laneFromUrl","useViewedLaneFromUrl","laneComponentId","isDefault","resolveComponentFromUrl","log","head","version","useLaneComponentIdFromUrl","query","useQuery","componentVersion","compIdFromLocation","ComponentID","tryFromString","lanesComp","changeVersion","useComponentId","toString","LanesUI","constructor","componentUI","componentCompareUI","routeSlot","navSlot","menuWidgetSlot","overviewSlot","laneProviderIgnoreSlot","compareTabSlot","workspace","scope","children","ignoreFns","values","createElement","LanesProvider","ignoreDerivingFromUrl","props","base","compare","LaneCompare","host","tabs","resolveCompareTabs","apiDiffInsights","getApiDiffInsights","hostAspect","lanesHost","WorkspaceAspect","id","ScopeAspect","registerHostAspectRoutes","registerRoutes","getLaneRoutes","registerMenuRoutes","getMenuRoutes","path","LanesModel","lanesPrefix","Fragment","Route","lanePath","index","element","getLaneOverview","getLaneComponent","getLanesComparePage","NotFoundPage","overrideComputeLaneUrl","fn","prefix","getLaneComponentUrl","getLaneIdFromPathname","getLaneUrl","getComponentUI","componentId","getLaneComponentMenu","getMenu","LaneOverview","LaneComparePage","getLaneCompare","groupByScope","getLanesOverviewMenu","LanesOverviewMenu","navigationSlot","widgetSlot","registerMenuWidget","menuItems","register","registerLaneProviderIgnoreSlot","ignoreFn","registerLanesRoutes","registerNavigation","href","exact","order","hide","viewedLane","lanes","getLanesSwitcher","mainIcon","useContext","ScopeContext","ScopeIcon","size","scopeImage","icon","bgColor","backgroundIconColor","className","styles","mainLaneIcon","LanesSwitcher","LaneSwitcher","getLanesProvider","getUseLanes","registerLanesDropdown","registerSidebarLink","component","Gallery","weight","registerRoute","route","registerOverviewLine","lines","routes","registerCompareTab","tab","fromComponentCompare","slotEntries","toArray","localRegistered","flatten","map","filter","Boolean","cacheKey","join","_resolvedCompareTabs","_resolvedCompareTabsKey","localIds","Set","merged","sort","a","b","provider","uiUi","workspaceUi","scopeUi","commandBarUI","_","harmony","config","lanesUi","registerRenderHooks","reactContext","renderContext","currentLane","UseLaneMenu","actionName","actionIcon","viewedLaneId","currentLaneId","CommandBarButton","exports","UIAspect","ComponentAspect","ComponentCompareAspect","CommandBarAspect","UIRuntime","Slot","withType","_default","LanesAspect","addRuntime"],"sources":["lanes.ui.runtime.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport React, { useContext } from 'react';\nimport type { RouteProps } from 'react-router-dom';\nimport { Route } from 'react-router-dom';\nimport type { Harmony, SlotRegistry } from '@teambit/harmony';\nimport { Slot } from '@teambit/harmony';\nimport { LaneCompare, type LaneCompareProps as DefaultLaneCompareProps } from '@teambit/lanes.ui.compare.lane-compare';\nimport type { UiUI } from '@teambit/ui';\nimport { UIRuntime, UIAspect } from '@teambit/ui';\nimport type { NavigationSlot, RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { NotFoundPage } from '@teambit/design.ui.pages.not-found';\nimport type { ScopeUI } from '@teambit/scope';\nimport { ScopeAspect, ScopeContext } from '@teambit/scope';\nimport type { WorkspaceUI } from '@teambit/workspace';\nimport { WorkspaceAspect } from '@teambit/workspace';\nimport type { ComponentUI } from '@teambit/component';\nimport { ComponentAspect, useIdFromLocation, ComponentID } from '@teambit/component';\nimport type { TabItem } from '@teambit/component.ui.component-compare.models.component-compare-props';\nimport { flatten } from 'lodash';\nimport type { MenuWidget, MenuWidgetSlot } from '@teambit/ui-foundation.ui.menu';\nimport type { LaneOverviewLine, LaneOverviewLineSlot } from '@teambit/lanes.ui.lane-overview';\nimport { LaneOverview } from '@teambit/lanes.ui.lane-overview';\nimport type { LanesNavPlugin, LanesOrderedNavigationSlot } from '@teambit/lanes.ui.menus.lanes-overview-menu';\nimport { LanesOverviewMenu } from '@teambit/lanes.ui.menus.lanes-overview-menu';\nimport { useQuery } from '@teambit/ui-foundation.ui.react-router.use-query';\nimport { UseLaneMenu } from '@teambit/lanes.ui.menus.use-lanes-menu';\nimport type { LanesHost } from '@teambit/lanes.ui.models.lanes-model';\nimport { LanesModel } from '@teambit/lanes.ui.models.lanes-model';\nimport type { IgnoreDerivingFromUrl, UseLanes } from '@teambit/lanes.hooks.use-lanes';\nimport { LanesProvider, useLanes } from '@teambit/lanes.hooks.use-lanes';\nimport { LaneSwitcher } from '@teambit/lanes.ui.navigation.lane-switcher';\nimport { useViewedLaneFromUrl } from '@teambit/lanes.hooks.use-viewed-lane-from-url';\nimport type { ComponentCompareUI } from '@teambit/component-compare';\nimport { ComponentCompareAspect } from '@teambit/component-compare';\nimport { LaneComparePage } from '@teambit/lanes.ui.compare.lane-compare-page';\nimport { ScopeIcon } from '@teambit/scope.ui.scope-icon';\nimport type { CommandBarUI } from '@teambit/command-bar';\nimport { CommandBarAspect } from '@teambit/command-bar';\n\nimport { LanesAspect } from './lanes.aspect';\nimport styles from './lanes.ui.module.scss';\n\nexport type LaneCompareProps = Partial<DefaultLaneCompareProps>;\nexport type LaneProviderIgnoreSlot = SlotRegistry<IgnoreDerivingFromUrl>;\n\n/**\n * Stable, module-scope tabs list. Previously this array (and the `React.createElement(...)` for each\n * tab's element) was constructed inside `getLaneCompare`, which means every render produced a new\n * array and new tab-element references. Those flowed into `<LaneCompare tabs={...}>` → `resolvedTabs`\n * (useMemo keyed on input ref) → new value → new `allTabs` prop on every `InlineComponentCompare`,\n * defeating React.memo and forcing all 10 component panels (and their nested tabs) to re-render on\n * every parent re-render — including every `setViewMode` click. Hoisting the array to module scope\n * gives a single stable reference that survives any number of parent renders.\n */\n/**\n * Slot signature for `LanesUI.registerCompareTab`. Kept for back-compat — the canonical inline\n * compare-tab list is now owned by `ComponentCompareUI` (so single-component compare and\n * lane-compare share one source). Tabs registered here are merged on top of that list.\n */\nexport type LaneCompareTabSlot = SlotRegistry<TabItem | TabItem[]>;\n\nexport function useComponentFilters() {\n const idFromLocation = useIdFromLocation(undefined, true);\n const { lanesModel, loading } = useLanes();\n const laneFromUrl = useViewedLaneFromUrl();\n const laneComponentId =\n idFromLocation && !laneFromUrl?.isDefault()\n ? (lanesModel?.resolveComponentFromUrl(idFromLocation, laneFromUrl) ?? null)\n : null;\n\n if (laneComponentId === null || loading) {\n return {\n loading: true,\n };\n }\n\n return {\n loading: false,\n log: {\n head: laneComponentId.version,\n },\n };\n}\n\nexport function useLaneComponentIdFromUrl(): ComponentID | undefined | null {\n const idFromLocation = useIdFromLocation(undefined, true);\n const { lanesModel, loading } = useLanes();\n const laneFromUrl = useViewedLaneFromUrl();\n const query = useQuery();\n const componentVersion = query.get('version');\n\n if (!idFromLocation) return null;\n\n const compIdFromLocation = ComponentID.tryFromString(\n `${idFromLocation}${componentVersion ? `@${componentVersion}` : ''}`\n );\n\n if (compIdFromLocation) return compIdFromLocation;\n if (loading) return undefined;\n\n const lanesComp = (lanesModel?.resolveComponentFromUrl(idFromLocation, laneFromUrl) as any | undefined) ?? null;\n\n if (componentVersion) {\n return lanesComp?.changeVersion(componentVersion);\n }\n\n return lanesComp;\n}\n\nexport function useComponentId() {\n return useLaneComponentIdFromUrl()?.toString();\n}\n\nexport class LanesUI {\n static dependencies = [\n UIAspect,\n ComponentAspect,\n WorkspaceAspect,\n ScopeAspect,\n ComponentCompareAspect,\n CommandBarAspect,\n ];\n\n static runtime = UIRuntime;\n static slots = [\n Slot.withType<RouteProps>(),\n Slot.withType<LaneOverviewLineSlot>(),\n Slot.withType<NavigationSlot>(),\n Slot.withType<MenuWidgetSlot>(),\n Slot.withType<LaneProviderIgnoreSlot>(),\n Slot.withType<TabItem | TabItem[]>(),\n ];\n\n constructor(\n private componentUI: ComponentUI,\n private componentCompareUI: ComponentCompareUI,\n private routeSlot: RouteSlot,\n private navSlot: LanesOrderedNavigationSlot,\n private menuWidgetSlot: MenuWidgetSlot,\n /**\n * overview line slot to add new lines beneath the overview section\n */\n private overviewSlot: LaneOverviewLineSlot,\n private laneProviderIgnoreSlot: LaneProviderIgnoreSlot,\n /**\n * compare-tab slot. Aspects register their inline-compare tab via `registerCompareTab(...)`;\n * the registered tabs are merged with the local fallback list, deduped by `id`, and sorted\n * by `order` before being passed to `<LaneCompare>`.\n */\n private compareTabSlot: LaneCompareTabSlot,\n private workspace?: WorkspaceUI,\n private scope?: ScopeUI\n ) {\n this.hostAspect = workspace || scope;\n this.lanesHost = workspace ? 'workspace' : 'scope';\n this.host = workspace ? WorkspaceAspect.id : ScopeAspect.id;\n }\n\n private readonly lanesHost: LanesHost;\n private readonly hostAspect?: WorkspaceUI | ScopeUI;\n private readonly host: string;\n\n private registerHostAspectRoutes() {\n if (!this.hostAspect) return;\n this.hostAspect.registerRoutes(this.getLaneRoutes());\n this.hostAspect.registerMenuRoutes(this.getMenuRoutes());\n }\n\n getLaneRoutes() {\n return [\n {\n path: LanesModel.lanesPrefix,\n children: (\n <>\n <Route path={LanesModel.lanePath}>\n <Route index element={this.getLaneOverview()} />\n <Route path=\"~component/*\" element={this.getLaneComponent()} />\n <Route path=\"~compare/*\" element={this.getLanesComparePage()} />\n <Route path=\"*\" element={<NotFoundPage />} />\n </Route>\n <Route path=\"*\" element={<NotFoundPage />} />\n </>\n ),\n },\n ];\n }\n\n overrideComputeLaneUrl(\n fn: () => {\n prefix: string;\n path: string;\n getLaneIdFromPathname: typeof LanesModel.getLaneIdFromPathname;\n getLaneUrl: typeof LanesModel.getLaneUrl;\n getLaneComponentUrl: typeof LanesModel.getLaneComponentUrl;\n }\n ) {\n const { prefix, path, getLaneComponentUrl, getLaneIdFromPathname, getLaneUrl } = fn();\n LanesModel.lanesPrefix = prefix;\n LanesModel.lanePath = path;\n LanesModel.getLaneComponentUrl = getLaneComponentUrl;\n LanesModel.getLaneUrl = getLaneUrl;\n LanesModel.getLaneIdFromPathname = getLaneIdFromPathname;\n }\n\n getLaneComponent() {\n return this.componentUI.getComponentUI(this.host, {\n componentId: useComponentId,\n useComponentFilters,\n });\n }\n\n getLaneComponentMenu() {\n return this.componentUI.getMenu(this.host, {\n componentId: useComponentId,\n useComponentFilters,\n });\n }\n\n getLaneOverview() {\n return (\n <LaneOverview\n routeSlot={this.routeSlot}\n overviewSlot={this.overviewSlot}\n host={this.lanesHost}\n useLanes={useLanes}\n />\n );\n }\n\n getLanesComparePage() {\n return <LaneComparePage getLaneCompare={this.getLaneCompare} groupByScope={this.lanesHost === 'workspace'} />;\n }\n\n getMenuRoutes() {\n return [\n {\n path: LanesModel.lanesPrefix,\n children: (\n <Route path={`${LanesModel.lanePath}/*`}>\n <Route path={'*'} element={this.getLanesOverviewMenu()} />\n <Route path=\"~component/*\" element={this.getLaneComponentMenu()} />\n </Route>\n ),\n },\n ];\n }\n\n getLanesOverviewMenu() {\n return <LanesOverviewMenu navigationSlot={this.navSlot} widgetSlot={this.menuWidgetSlot} />;\n }\n\n registerMenuWidget(...menuItems: MenuWidget[]) {\n this.menuWidgetSlot.register(menuItems);\n return this;\n }\n\n registerLaneProviderIgnoreSlot(ignoreFn: IgnoreDerivingFromUrl) {\n this.laneProviderIgnoreSlot.register(ignoreFn);\n return this;\n }\n\n private registerLanesRoutes() {\n this.registerNavigation([\n // {\n // props: {\n // href: '.',\n // exact: true,\n // children: 'README',\n // },\n // order: 1,\n // hide: () => {\n // const { lanesModel } = useLanes();\n // return !lanesModel?.viewedLane?.readmeComponent;\n // },\n // },\n {\n props: {\n href: '.',\n exact: true,\n children: 'Overview',\n },\n order: 1,\n },\n {\n props: {\n href: '~compare',\n children: 'Compare',\n },\n order: 2,\n hide: () => {\n const { lanesModel } = useLanes();\n return !lanesModel?.viewedLane || lanesModel?.lanes.length < 2;\n },\n },\n ]);\n }\n\n private registerRoutes() {\n this.registerHostAspectRoutes();\n this.registerLanesRoutes();\n }\n\n getLanesSwitcher() {\n const mainIcon = () => {\n const scope = useContext(ScopeContext);\n return (\n <ScopeIcon\n size={24}\n scopeImage={scope.icon}\n bgColor={scope.backgroundIconColor}\n className={styles.mainLaneIcon}\n />\n );\n };\n\n const LanesSwitcher = (\n <LaneSwitcher\n groupByScope={this.lanesHost === 'workspace'}\n mainIcon={this.lanesHost === 'scope' ? mainIcon : undefined}\n // @ts-ignore @todo - fix this\n useLanes={useLanes}\n />\n );\n\n return LanesSwitcher;\n }\n\n getLanesProvider() {\n return LanesProvider;\n }\n\n getUseLanes(): UseLanes {\n return useLanes;\n }\n\n private registerLanesDropdown() {\n const LanesSwitcher = this.getLanesSwitcher();\n\n this.hostAspect?.registerSidebarLink({\n component: function Gallery() {\n return LanesSwitcher;\n },\n weight: 1000,\n });\n }\n\n private renderContext = ({ children }: { children: ReactNode }) => {\n const ignoreFns = this.laneProviderIgnoreSlot.values();\n\n return <LanesProvider ignoreDerivingFromUrl={ignoreFns}>{children}</LanesProvider>;\n };\n\n registerRoute(route: RouteProps) {\n this.routeSlot.register(route);\n return this;\n }\n\n /**\n * register a new line beneath the lane overview section.\n */\n registerOverviewLine(...lines: LaneOverviewLine[]) {\n this.overviewSlot.register(lines);\n return this;\n }\n\n registerNavigation(routes: LanesNavPlugin[]) {\n this.navSlot.register(routes);\n }\n\n /**\n * Register an inline compare tab. Aspects own their compare-tab entry and call this in their\n * own UI provider (e.g. the docs aspect registers `inline-docs` so it can pass its real\n * `titleBadges` / `overviewOptions` slots). Tabs are merged with the lanes-side fallback list,\n * deduped by `id`, and sorted by `order` at render time.\n */\n registerCompareTab(tab: TabItem | TabItem[]) {\n this.compareTabSlot.register(tab);\n return this;\n }\n\n // memoize the resolved tab list — same identity across renders unless a new registration lands.\n // The base list is owned by component-compare (so the single-component compare page and\n // lane-compare share one source). We additionally merge in anything registered on this aspect's\n // legacy `compareTabSlot` for back-compat.\n private _resolvedCompareTabs?: TabItem[];\n private _resolvedCompareTabsKey?: string;\n private resolveCompareTabs(): TabItem[] {\n const fromComponentCompare = this.componentCompareUI.resolveCompareTabs();\n const slotEntries = this.compareTabSlot.toArray();\n const localRegistered = flatten(\n slotEntries.map(([, value]) => value).filter(Boolean) as Array<TabItem | TabItem[]>\n );\n const cacheKey = `${fromComponentCompare.map((t) => `${t.id}:${t.order ?? 0}`).join(',')}|${localRegistered\n .map((t) => `${t.id}:${t.order ?? 0}`)\n .join(',')}`;\n if (this._resolvedCompareTabs && this._resolvedCompareTabsKey === cacheKey) {\n return this._resolvedCompareTabs;\n }\n const localIds = new Set(localRegistered.map((t) => t.id));\n // local registrations take precedence over the component-compare list.\n const merged = [...localRegistered, ...fromComponentCompare.filter((t) => !localIds.has(t.id))].sort(\n (a, b) => (a.order ?? 0) - (b.order ?? 0)\n );\n this._resolvedCompareTabs = merged;\n this._resolvedCompareTabsKey = cacheKey;\n return merged;\n }\n\n getLaneCompare = (props: LaneCompareProps) => {\n if (!props.base || !props.compare) return null;\n\n return (\n <LaneCompare\n {...props}\n base={props.base}\n compare={props.compare}\n host={props.host || this.host}\n tabs={props.tabs || this.resolveCompareTabs()}\n apiDiffInsights={props.apiDiffInsights || this.componentCompareUI.getApiDiffInsights()}\n />\n );\n };\n\n static async provider(\n [uiUi, componentUI, workspaceUi, scopeUi, componentCompareUI, commandBarUI]: [\n UiUI,\n ComponentUI,\n WorkspaceUI,\n ScopeUI,\n ComponentCompareUI,\n CommandBarUI,\n ],\n _,\n [routeSlot, overviewSlot, navSlot, menuWidgetSlot, laneProviderIgnoreSlot, compareTabSlot]: [\n RouteSlot,\n LaneOverviewLineSlot,\n LanesOrderedNavigationSlot,\n MenuWidgetSlot,\n LaneProviderIgnoreSlot,\n LaneCompareTabSlot,\n ],\n harmony: Harmony\n ) {\n const { config } = harmony;\n const host = String(config.get('teambit.harmony/bit'));\n let workspace: WorkspaceUI | undefined;\n let scope: ScopeUI | undefined;\n if (host === WorkspaceAspect.id) {\n workspace = workspaceUi;\n }\n if (host === ScopeAspect.id) {\n scope = scopeUi;\n }\n const lanesUi = new LanesUI(\n componentUI,\n componentCompareUI,\n routeSlot,\n navSlot,\n menuWidgetSlot,\n overviewSlot,\n laneProviderIgnoreSlot,\n compareTabSlot,\n workspace,\n scope\n );\n if (uiUi) uiUi.registerRenderHooks({ reactContext: lanesUi.renderContext });\n lanesUi.registerRoutes();\n lanesUi.registerMenuWidget(() => {\n const { lanesModel } = useLanes();\n if (!lanesModel?.viewedLane) return null;\n const { viewedLane, currentLane } = lanesModel;\n return (\n <UseLaneMenu\n actionName={'Import'}\n actionIcon={'terminal'}\n host={lanesUi.lanesHost}\n viewedLaneId={viewedLane.id}\n currentLaneId={currentLane?.id}\n />\n );\n });\n lanesUi.registerLanesDropdown();\n if (workspace) {\n lanesUi.registerMenuWidget(commandBarUI.CommandBarButton);\n }\n return lanesUi;\n }\n}\n\nexport default LanesUI;\n\nLanesAspect.addRuntime(LanesUI);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.lanes_lanes@1.0.
|
|
2
|
-
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.lanes_lanes@1.0.
|
|
1
|
+
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.lanes_lanes@1.0.1101/dist/lanes.composition.js';
|
|
2
|
+
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.lanes_lanes@1.0.1101/dist/lanes.docs.mdx';
|
|
3
3
|
|
|
4
4
|
export const compositions = [compositions_0];
|
|
5
5
|
export const overview = [overview_0];
|
package/lanes.ui.runtime.tsx
CHANGED
|
@@ -15,6 +15,8 @@ import type { WorkspaceUI } from '@teambit/workspace';
|
|
|
15
15
|
import { WorkspaceAspect } from '@teambit/workspace';
|
|
16
16
|
import type { ComponentUI } from '@teambit/component';
|
|
17
17
|
import { ComponentAspect, useIdFromLocation, ComponentID } from '@teambit/component';
|
|
18
|
+
import type { TabItem } from '@teambit/component.ui.component-compare.models.component-compare-props';
|
|
19
|
+
import { flatten } from 'lodash';
|
|
18
20
|
import type { MenuWidget, MenuWidgetSlot } from '@teambit/ui-foundation.ui.menu';
|
|
19
21
|
import type { LaneOverviewLine, LaneOverviewLineSlot } from '@teambit/lanes.ui.lane-overview';
|
|
20
22
|
import { LaneOverview } from '@teambit/lanes.ui.lane-overview';
|
|
@@ -40,6 +42,23 @@ import styles from './lanes.ui.module.scss';
|
|
|
40
42
|
|
|
41
43
|
export type LaneCompareProps = Partial<DefaultLaneCompareProps>;
|
|
42
44
|
export type LaneProviderIgnoreSlot = SlotRegistry<IgnoreDerivingFromUrl>;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Stable, module-scope tabs list. Previously this array (and the `React.createElement(...)` for each
|
|
48
|
+
* tab's element) was constructed inside `getLaneCompare`, which means every render produced a new
|
|
49
|
+
* array and new tab-element references. Those flowed into `<LaneCompare tabs={...}>` → `resolvedTabs`
|
|
50
|
+
* (useMemo keyed on input ref) → new value → new `allTabs` prop on every `InlineComponentCompare`,
|
|
51
|
+
* defeating React.memo and forcing all 10 component panels (and their nested tabs) to re-render on
|
|
52
|
+
* every parent re-render — including every `setViewMode` click. Hoisting the array to module scope
|
|
53
|
+
* gives a single stable reference that survives any number of parent renders.
|
|
54
|
+
*/
|
|
55
|
+
/**
|
|
56
|
+
* Slot signature for `LanesUI.registerCompareTab`. Kept for back-compat — the canonical inline
|
|
57
|
+
* compare-tab list is now owned by `ComponentCompareUI` (so single-component compare and
|
|
58
|
+
* lane-compare share one source). Tabs registered here are merged on top of that list.
|
|
59
|
+
*/
|
|
60
|
+
export type LaneCompareTabSlot = SlotRegistry<TabItem | TabItem[]>;
|
|
61
|
+
|
|
43
62
|
export function useComponentFilters() {
|
|
44
63
|
const idFromLocation = useIdFromLocation(undefined, true);
|
|
45
64
|
const { lanesModel, loading } = useLanes();
|
|
@@ -109,6 +128,7 @@ export class LanesUI {
|
|
|
109
128
|
Slot.withType<NavigationSlot>(),
|
|
110
129
|
Slot.withType<MenuWidgetSlot>(),
|
|
111
130
|
Slot.withType<LaneProviderIgnoreSlot>(),
|
|
131
|
+
Slot.withType<TabItem | TabItem[]>(),
|
|
112
132
|
];
|
|
113
133
|
|
|
114
134
|
constructor(
|
|
@@ -122,6 +142,12 @@ export class LanesUI {
|
|
|
122
142
|
*/
|
|
123
143
|
private overviewSlot: LaneOverviewLineSlot,
|
|
124
144
|
private laneProviderIgnoreSlot: LaneProviderIgnoreSlot,
|
|
145
|
+
/**
|
|
146
|
+
* compare-tab slot. Aspects register their inline-compare tab via `registerCompareTab(...)`;
|
|
147
|
+
* the registered tabs are merged with the local fallback list, deduped by `id`, and sorted
|
|
148
|
+
* by `order` before being passed to `<LaneCompare>`.
|
|
149
|
+
*/
|
|
150
|
+
private compareTabSlot: LaneCompareTabSlot,
|
|
125
151
|
private workspace?: WorkspaceUI,
|
|
126
152
|
private scope?: ScopeUI
|
|
127
153
|
) {
|
|
@@ -341,9 +367,46 @@ export class LanesUI {
|
|
|
341
367
|
this.navSlot.register(routes);
|
|
342
368
|
}
|
|
343
369
|
|
|
344
|
-
|
|
345
|
-
|
|
370
|
+
/**
|
|
371
|
+
* Register an inline compare tab. Aspects own their compare-tab entry and call this in their
|
|
372
|
+
* own UI provider (e.g. the docs aspect registers `inline-docs` so it can pass its real
|
|
373
|
+
* `titleBadges` / `overviewOptions` slots). Tabs are merged with the lanes-side fallback list,
|
|
374
|
+
* deduped by `id`, and sorted by `order` at render time.
|
|
375
|
+
*/
|
|
376
|
+
registerCompareTab(tab: TabItem | TabItem[]) {
|
|
377
|
+
this.compareTabSlot.register(tab);
|
|
378
|
+
return this;
|
|
379
|
+
}
|
|
346
380
|
|
|
381
|
+
// memoize the resolved tab list — same identity across renders unless a new registration lands.
|
|
382
|
+
// The base list is owned by component-compare (so the single-component compare page and
|
|
383
|
+
// lane-compare share one source). We additionally merge in anything registered on this aspect's
|
|
384
|
+
// legacy `compareTabSlot` for back-compat.
|
|
385
|
+
private _resolvedCompareTabs?: TabItem[];
|
|
386
|
+
private _resolvedCompareTabsKey?: string;
|
|
387
|
+
private resolveCompareTabs(): TabItem[] {
|
|
388
|
+
const fromComponentCompare = this.componentCompareUI.resolveCompareTabs();
|
|
389
|
+
const slotEntries = this.compareTabSlot.toArray();
|
|
390
|
+
const localRegistered = flatten(
|
|
391
|
+
slotEntries.map(([, value]) => value).filter(Boolean) as Array<TabItem | TabItem[]>
|
|
392
|
+
);
|
|
393
|
+
const cacheKey = `${fromComponentCompare.map((t) => `${t.id}:${t.order ?? 0}`).join(',')}|${localRegistered
|
|
394
|
+
.map((t) => `${t.id}:${t.order ?? 0}`)
|
|
395
|
+
.join(',')}`;
|
|
396
|
+
if (this._resolvedCompareTabs && this._resolvedCompareTabsKey === cacheKey) {
|
|
397
|
+
return this._resolvedCompareTabs;
|
|
398
|
+
}
|
|
399
|
+
const localIds = new Set(localRegistered.map((t) => t.id));
|
|
400
|
+
// local registrations take precedence over the component-compare list.
|
|
401
|
+
const merged = [...localRegistered, ...fromComponentCompare.filter((t) => !localIds.has(t.id))].sort(
|
|
402
|
+
(a, b) => (a.order ?? 0) - (b.order ?? 0)
|
|
403
|
+
);
|
|
404
|
+
this._resolvedCompareTabs = merged;
|
|
405
|
+
this._resolvedCompareTabsKey = cacheKey;
|
|
406
|
+
return merged;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
getLaneCompare = (props: LaneCompareProps) => {
|
|
347
410
|
if (!props.base || !props.compare) return null;
|
|
348
411
|
|
|
349
412
|
return (
|
|
@@ -352,7 +415,8 @@ export class LanesUI {
|
|
|
352
415
|
base={props.base}
|
|
353
416
|
compare={props.compare}
|
|
354
417
|
host={props.host || this.host}
|
|
355
|
-
tabs={props.tabs ||
|
|
418
|
+
tabs={props.tabs || this.resolveCompareTabs()}
|
|
419
|
+
apiDiffInsights={props.apiDiffInsights || this.componentCompareUI.getApiDiffInsights()}
|
|
356
420
|
/>
|
|
357
421
|
);
|
|
358
422
|
};
|
|
@@ -367,12 +431,13 @@ export class LanesUI {
|
|
|
367
431
|
CommandBarUI,
|
|
368
432
|
],
|
|
369
433
|
_,
|
|
370
|
-
[routeSlot, overviewSlot, navSlot, menuWidgetSlot, laneProviderIgnoreSlot]: [
|
|
434
|
+
[routeSlot, overviewSlot, navSlot, menuWidgetSlot, laneProviderIgnoreSlot, compareTabSlot]: [
|
|
371
435
|
RouteSlot,
|
|
372
436
|
LaneOverviewLineSlot,
|
|
373
437
|
LanesOrderedNavigationSlot,
|
|
374
438
|
MenuWidgetSlot,
|
|
375
439
|
LaneProviderIgnoreSlot,
|
|
440
|
+
LaneCompareTabSlot,
|
|
376
441
|
],
|
|
377
442
|
harmony: Harmony
|
|
378
443
|
) {
|
|
@@ -394,6 +459,7 @@ export class LanesUI {
|
|
|
394
459
|
menuWidgetSlot,
|
|
395
460
|
overviewSlot,
|
|
396
461
|
laneProviderIgnoreSlot,
|
|
462
|
+
compareTabSlot,
|
|
397
463
|
workspace,
|
|
398
464
|
scope
|
|
399
465
|
);
|