@teambit/scope 0.0.611 → 0.0.619

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.
@@ -13,6 +13,7 @@ import { CommandBarUI, ComponentSearcher } from '@teambit/command-bar';
13
13
  import { ScopeModel } from '@teambit/scope.models.scope-model';
14
14
  export declare type ScopeBadge = ComponentType;
15
15
  export declare type ScopeBadgeSlot = SlotRegistry<ScopeBadge[]>;
16
+ export declare type ContextSlot = SlotRegistry<ScopeContextType[]>;
16
17
  export declare type ScopeContextType = ComponentType<{
17
18
  scope: ScopeModel;
18
19
  children: ReactNode;
@@ -59,6 +60,10 @@ export declare class ScopeUI {
59
60
  * overview line slot to add new lines beneath the overview section
60
61
  */
61
62
  private overviewSlot;
63
+ /**
64
+ * add a new context to ui
65
+ */
66
+ private contextSlot;
62
67
  constructor(
63
68
  /**
64
69
  * route slot.
@@ -87,7 +92,11 @@ export declare class ScopeUI {
87
92
  /**
88
93
  * overview line slot to add new lines beneath the overview section
89
94
  */
90
- overviewSlot: OverviewLineSlot);
95
+ overviewSlot: OverviewLineSlot,
96
+ /**
97
+ * add a new context to ui
98
+ */
99
+ contextSlot: ContextSlot);
91
100
  private setSidebarToggle;
92
101
  /**
93
102
  * register a new badge into the scope overview.
@@ -125,13 +134,16 @@ export declare class ScopeUI {
125
134
  * register metadata.
126
135
  */
127
136
  registerMetadata(): void;
128
- private _context;
129
137
  /**
130
138
  * add a new context to the scope.
131
139
  */
132
- addContext(context: ScopeContextType): void;
133
- getContext(): ScopeContextType | undefined;
140
+ addContext(...context: ScopeContextType[]): this;
141
+ private getContext;
134
142
  registerMenuItem: (menuItems: MenuItem[]) => void;
143
+ /**
144
+ * register a sidebar Widget for the scope
145
+ */
146
+ registerSidebarWidget: (componentTreeNodes: ComponentTreeNode[]) => this;
135
147
  /**
136
148
  * register a sidebar link to the section above the drawers
137
149
  */
@@ -144,14 +156,14 @@ export declare class ScopeUI {
144
156
  static runtime: import("@teambit/harmony").RuntimeDefinition;
145
157
  static slots: (((registerFn: () => string) => SlotRegistry<RouteProps<string, {
146
158
  [x: string]: string | undefined;
147
- }>>) | ((registerFn: () => string) => SlotRegistry<ComponentTreeNode>) | ((registerFn: () => string) => SlotRegistry<MenuItemSlot>) | ((registerFn: () => string) => SlotRegistry<SidebarItemSlot>) | ((registerFn: () => string) => SlotRegistry<ScopeBadge>) | ((registerFn: () => string) => SlotRegistry<MenuWidget[]>) | ((registerFn: () => string) => SlotRegistry<CornerSlot>))[];
159
+ }>>) | ((registerFn: () => string) => SlotRegistry<ComponentTreeNode>) | ((registerFn: () => string) => SlotRegistry<MenuItemSlot>) | ((registerFn: () => string) => SlotRegistry<SidebarItemSlot>) | ((registerFn: () => string) => SlotRegistry<ScopeBadge>) | ((registerFn: () => string) => SlotRegistry<MenuWidget[]>) | ((registerFn: () => string) => SlotRegistry<CornerSlot>) | ((registerFn: () => string) => SlotRegistry<ContextSlot>))[];
148
160
  static provider([ui, componentUi, sidebar, commandBarUI, reactRouterUI]: [
149
161
  UiUI,
150
162
  ComponentUI,
151
163
  SidebarUI,
152
164
  CommandBarUI,
153
165
  ReactRouterUI
154
- ], config: any, [routeSlot, menuSlot, sidebarSlot, scopeBadgeSlot, menuWidgetSlot, menuItemSlot, sidebarItemSlot, cornerSlot, overviewSlot,]: [
166
+ ], config: any, [routeSlot, menuSlot, sidebarSlot, scopeBadgeSlot, menuWidgetSlot, menuItemSlot, sidebarItemSlot, cornerSlot, overviewSlot, contextSlot,]: [
155
167
  RouteSlot,
156
168
  RouteSlot,
157
169
  SidebarSlot,
@@ -160,7 +172,8 @@ export declare class ScopeUI {
160
172
  MenuItemSlot,
161
173
  SidebarItemSlot,
162
174
  CornerSlot,
163
- OverviewLineSlot
175
+ OverviewLineSlot,
176
+ ContextSlot
164
177
  ]): Promise<ScopeUI>;
165
178
  }
166
179
  export default ScopeUI;
@@ -21,6 +21,16 @@ function _defineProperty2() {
21
21
  return data;
22
22
  }
23
23
 
24
+ function _lodash() {
25
+ const data = _interopRequireDefault(require("lodash.flatten"));
26
+
27
+ _lodash = function () {
28
+ return data;
29
+ };
30
+
31
+ return data;
32
+ }
33
+
24
34
  function _component() {
25
35
  const data = require("@teambit/component");
26
36
 
@@ -174,7 +184,11 @@ class ScopeUI {
174
184
  /**
175
185
  * overview line slot to add new lines beneath the overview section
176
186
  */
177
- overviewSlot) {
187
+ overviewSlot,
188
+ /**
189
+ * add a new context to ui
190
+ */
191
+ contextSlot) {
178
192
  this.routeSlot = routeSlot;
179
193
  this.componentUi = componentUi;
180
194
  this.menuSlot = menuSlot;
@@ -188,11 +202,15 @@ class ScopeUI {
188
202
  this.menuItemSlot = menuItemSlot;
189
203
  this.cornerSlot = cornerSlot;
190
204
  this.overviewSlot = overviewSlot;
205
+ this.contextSlot = contextSlot;
191
206
  (0, _defineProperty2().default)(this, "setSidebarToggle", () => {});
192
- (0, _defineProperty2().default)(this, "_context", void 0);
193
207
  (0, _defineProperty2().default)(this, "registerMenuItem", menuItems => {
194
208
  this.menuItemSlot.register(menuItems);
195
209
  });
210
+ (0, _defineProperty2().default)(this, "registerSidebarWidget", componentTreeNodes => {
211
+ componentTreeNodes.map(componentTreeNode => this.sidebarSlot.register(componentTreeNode));
212
+ return this;
213
+ });
196
214
  (0, _defineProperty2().default)(this, "registerSidebarLink", (...links) => {
197
215
  this.sidebarItemSlot.register(links);
198
216
  });
@@ -303,17 +321,19 @@ class ScopeUI {
303
321
 
304
322
 
305
323
  registerMetadata() {}
306
-
307
324
  /**
308
325
  * add a new context to the scope.
309
326
  */
310
- addContext(context) {
311
- this._context = () => context;
327
+
328
+
329
+ addContext(...context) {
330
+ this.contextSlot.register(context);
331
+ return this;
312
332
  }
313
333
 
314
334
  getContext() {
315
- if (!this._context) return undefined;
316
- return this._context();
335
+ const contexts = this.contextSlot.values();
336
+ return (0, _lodash().default)(contexts);
317
337
  }
318
338
 
319
339
  uiRoot() {
@@ -349,9 +369,9 @@ class ScopeUI {
349
369
  /** registers available components */
350
370
 
351
371
 
352
- static async provider([ui, componentUi, sidebar, commandBarUI, reactRouterUI], config, [routeSlot, menuSlot, sidebarSlot, scopeBadgeSlot, menuWidgetSlot, menuItemSlot, sidebarItemSlot, cornerSlot, overviewSlot]) {
372
+ static async provider([ui, componentUi, sidebar, commandBarUI, reactRouterUI], config, [routeSlot, menuSlot, sidebarSlot, scopeBadgeSlot, menuWidgetSlot, menuItemSlot, sidebarItemSlot, cornerSlot, overviewSlot, contextSlot]) {
353
373
  const componentSearcher = new (_commandBar().ComponentSearcher)(reactRouterUI.navigateTo);
354
- const scopeUi = new ScopeUI(routeSlot, componentUi, menuSlot, sidebar, sidebarSlot, commandBarUI, componentSearcher, scopeBadgeSlot, menuWidgetSlot, sidebarItemSlot, menuItemSlot, cornerSlot, overviewSlot);
374
+ const scopeUi = new ScopeUI(routeSlot, componentUi, menuSlot, sidebar, sidebarSlot, commandBarUI, componentSearcher, scopeBadgeSlot, menuWidgetSlot, sidebarItemSlot, menuItemSlot, cornerSlot, overviewSlot, contextSlot);
355
375
  scopeUi.registerExplicitRoutes();
356
376
  scopeUi.registerMenuItem(scopeUi.menuItems);
357
377
  scopeUi.registerMenuWidget(() => /*#__PURE__*/_react().default.createElement(_menu().ScopeUseBox, null));
@@ -369,7 +389,7 @@ class ScopeUI {
369
389
  exports.ScopeUI = ScopeUI;
370
390
  (0, _defineProperty2().default)(ScopeUI, "dependencies", [_ui().UIAspect, _component().ComponentAspect, _sidebar().SidebarAspect, _commandBar().default, _reactRouter().default]);
371
391
  (0, _defineProperty2().default)(ScopeUI, "runtime", _ui().UIRuntime);
372
- (0, _defineProperty2().default)(ScopeUI, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType()]);
392
+ (0, _defineProperty2().default)(ScopeUI, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType()]);
373
393
  var _default = ScopeUI;
374
394
  exports.default = _default;
375
395
 
@@ -1 +1 @@
1
- {"version":3,"sources":["scope.ui.runtime.tsx"],"names":["ScopeUI","constructor","routeSlot","componentUi","menuSlot","sidebar","sidebarSlot","commandBarUI","componentSearcher","scopeBadgeSlot","menuWidgetSlot","sidebarItemSlot","menuItemSlot","cornerSlot","overviewSlot","menuItems","register","links","components","update","category","title","keyChar","handler","run","registerBadge","badges","registerOverviewLine","lines","registerRoute","route","registerExplicitRoutes","path","routePath","children","getComponentUI","ScopeAspect","id","getMenu","exact","registerMenuWidget","registerCorner","corner","replaceOverview","replaceDescription","replaceMetadataSection","registerMetadataItem","replaceComponentGrid","registerMetadata","addContext","context","_context","getContext","undefined","uiRoot","registerDrawer","ComponentsDrawer","addSearcher","setKeyBindHandler","addCommand","displayName","keybinding","setSidebarToggle","routes","provider","ui","reactRouterUI","config","ComponentSearcher","navigateTo","scopeUi","registerMenuItem","registerRoot","bind","registerSidebarLink","UIAspect","ComponentAspect","SidebarAspect","CommandBarAspect","ReactRouterAspect","UIRuntime","Slot","withType","addRuntime"],"mappings":"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","sourcesContent":["import type { ComponentUI, ComponentModel } from '@teambit/component';\nimport { ComponentAspect } from '@teambit/component';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport ReactRouterAspect, { ReactRouterUI } from '@teambit/react-router';\nimport { RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { SidebarAspect, SidebarUI, SidebarItem, SidebarItemSlot } from '@teambit/sidebar';\nimport { ComponentTreeNode } from '@teambit/component-tree';\nimport { UIAspect, UIRootUI as UIRoot, UIRuntime, UiUI } from '@teambit/ui';\nimport React, { ComponentType, ReactNode } from 'react';\nimport { MenuItemSlot, MenuItem } from '@teambit/ui-foundation.ui.main-dropdown';\nimport { RouteProps } from 'react-router-dom';\nimport { MenuWidget, MenuWidgetSlot } from '@teambit/ui-foundation.ui.menu';\nimport { MenuLinkItem } from '@teambit/design.ui.surfaces.menu.link-item';\nimport CommandBarAspect, { CommandBarUI, ComponentSearcher, CommandHandler } from '@teambit/command-bar';\nimport { ScopeModel } from '@teambit/scope.models.scope-model';\nimport { ScopeMenu, ScopeUseBox } from './ui/menu';\nimport { ScopeAspect } from './scope.aspect';\nimport { Scope } from './ui/scope';\nimport { ComponentsDrawer } from './ui/components-drawer';\n\nexport type ScopeBadge = ComponentType;\n\nexport type ScopeBadgeSlot = SlotRegistry<ScopeBadge[]>;\n\nexport type ScopeContextType = ComponentType<{ scope: ScopeModel; children: ReactNode }>;\n\nexport type SidebarSlot = SlotRegistry<ComponentTreeNode>;\n\nexport type ScopeOverview = ComponentType;\n\nexport type ScopeOverviewSlot = SlotRegistry<ScopeOverview>;\n\nexport type Corner = ComponentType;\n\nexport type CornerSlot = SlotRegistry<Corner>;\n\nexport type OverviewLine = ComponentType;\n\nexport type OverviewLineSlot = SlotRegistry<OverviewLine[]>;\n\nexport class ScopeUI {\n constructor(\n /**\n * route slot.\n */\n private routeSlot: RouteSlot,\n\n /**\n * component ui extension.\n */\n private componentUi: ComponentUI,\n /**\n * menu slot\n */\n private menuSlot: RouteSlot,\n\n private sidebar: SidebarUI,\n\n private sidebarSlot: SidebarSlot,\n\n private commandBarUI: CommandBarUI,\n\n private componentSearcher: ComponentSearcher,\n\n private scopeBadgeSlot: ScopeBadgeSlot,\n\n private menuWidgetSlot: MenuWidgetSlot,\n\n /**\n * sidebar link slot\n */\n private sidebarItemSlot: SidebarItemSlot,\n\n /**\n * main dropdown item slot\n */\n private menuItemSlot: MenuItemSlot,\n\n /**\n * corner slot\n */\n private cornerSlot: CornerSlot,\n\n /**\n * overview line slot to add new lines beneath the overview section\n */\n private overviewSlot: OverviewLineSlot\n ) {}\n\n private setSidebarToggle: (updated: CommandHandler) => void = () => {};\n\n /**\n * register a new badge into the scope overview.\n */\n registerBadge(...badges: ScopeBadge[]) {\n this.scopeBadgeSlot.register(badges);\n return this;\n }\n\n /**\n * register a new line beneath the scope overview section.\n */\n registerOverviewLine(...lines: OverviewLine[]) {\n this.overviewSlot.register(lines);\n return this;\n }\n\n /**\n * register a route to the scope.\n */\n registerRoute(route: RouteProps) {\n this.routeSlot.register(route);\n return this;\n }\n\n private registerExplicitRoutes() {\n this.routeSlot.register({\n path: this.componentUi.routePath,\n children: this.componentUi.getComponentUI(ScopeAspect.id),\n });\n\n this.menuSlot.register([\n {\n path: this.componentUi.routePath,\n children: this.componentUi.getMenu(ScopeAspect.id),\n },\n {\n exact: true,\n path: '/',\n children: <ScopeMenu widgetSlot={this.menuWidgetSlot} menuItemSlot={this.menuItemSlot} />,\n },\n ]);\n }\n\n registerMenuWidget(...menuItems: MenuWidget[]) {\n this.menuWidgetSlot.register(menuItems);\n }\n\n registerCorner(corner: Corner) {\n this.cornerSlot.register(corner);\n }\n\n /**\n * register a scope overview.\n */\n replaceOverview() {}\n\n /**\n * register description.\n */\n replaceDescription() {}\n\n /**\n * register metadata section.\n */\n replaceMetadataSection() {}\n\n /**\n * register a metadata item.\n */\n registerMetadataItem() {}\n\n replaceComponentGrid() {}\n\n /**\n * register metadata.\n */\n registerMetadata() {}\n\n private _context: () => ScopeContextType;\n\n /**\n * add a new context to the scope.\n */\n addContext(context: ScopeContextType) {\n this._context = () => context;\n }\n\n getContext() {\n if (!this._context) return undefined;\n return this._context();\n }\n\n registerMenuItem = (menuItems: MenuItem[]) => {\n this.menuItemSlot.register(menuItems);\n };\n\n /**\n * register a sidebar link to the section above the drawers\n */\n registerSidebarLink = (...links: SidebarItem[]) => {\n this.sidebarItemSlot.register(links);\n };\n\n uiRoot(): UIRoot {\n this.sidebar.registerDrawer(new ComponentsDrawer(this.sidebarSlot));\n this.commandBarUI.addSearcher(this.componentSearcher);\n\n const [setKeyBindHandler] = this.commandBarUI.addCommand({\n id: 'sidebar.toggle', // TODO - extract to a component!\n handler: () => {},\n displayName: 'Toggle component list',\n keybinding: 'alt+s',\n });\n this.setSidebarToggle = setKeyBindHandler;\n\n return {\n routes: [\n {\n path: '/',\n children: (\n <Scope\n routeSlot={this.routeSlot}\n menuSlot={this.menuSlot}\n sidebar={<this.sidebar.render itemSlot={this.sidebarItemSlot} />}\n scopeUi={this}\n badgeSlot={this.scopeBadgeSlot}\n overviewLineSlot={this.overviewSlot}\n context={this.getContext()}\n onSidebarTogglerChange={this.setSidebarToggle}\n cornerSlot={this.cornerSlot}\n />\n ),\n },\n ],\n };\n }\n\n /** registers available components */\n setComponents = (components: ComponentModel[]) => {\n this.componentSearcher.update(components);\n };\n\n private menuItems: MenuItem[] = [\n {\n category: 'general',\n title: 'Open command bar',\n keyChar: 'mod+k',\n handler: () => this.commandBarUI?.run('command-bar.open'),\n },\n {\n category: 'general',\n title: 'Toggle component list',\n keyChar: 'alt+s',\n handler: () => this.commandBarUI?.run('sidebar.toggle'),\n },\n ];\n\n static dependencies = [UIAspect, ComponentAspect, SidebarAspect, CommandBarAspect, ReactRouterAspect];\n static runtime = UIRuntime;\n static slots = [\n Slot.withType<RouteProps>(),\n Slot.withType<RouteProps>(),\n Slot.withType<ComponentTreeNode>(),\n Slot.withType<ScopeBadge>(),\n Slot.withType<ScopeOverview>(),\n Slot.withType<MenuWidget[]>(),\n Slot.withType<MenuItemSlot>(),\n Slot.withType<CornerSlot>(),\n Slot.withType<OverviewLineSlot>(),\n Slot.withType<SidebarItemSlot>(),\n ];\n\n static async provider(\n [ui, componentUi, sidebar, commandBarUI, reactRouterUI]: [\n UiUI,\n ComponentUI,\n SidebarUI,\n CommandBarUI,\n ReactRouterUI\n ],\n config,\n [\n routeSlot,\n menuSlot,\n sidebarSlot,\n scopeBadgeSlot,\n menuWidgetSlot,\n menuItemSlot,\n sidebarItemSlot,\n cornerSlot,\n overviewSlot,\n ]: [\n RouteSlot,\n RouteSlot,\n SidebarSlot,\n ScopeBadgeSlot,\n MenuWidgetSlot,\n MenuItemSlot,\n SidebarItemSlot,\n CornerSlot,\n OverviewLineSlot\n ]\n ) {\n const componentSearcher = new ComponentSearcher(reactRouterUI.navigateTo);\n const scopeUi = new ScopeUI(\n routeSlot,\n componentUi,\n menuSlot,\n sidebar,\n sidebarSlot,\n commandBarUI,\n componentSearcher,\n scopeBadgeSlot,\n menuWidgetSlot,\n sidebarItemSlot,\n menuItemSlot,\n cornerSlot,\n overviewSlot\n );\n scopeUi.registerExplicitRoutes();\n scopeUi.registerMenuItem(scopeUi.menuItems);\n scopeUi.registerMenuWidget(() => <ScopeUseBox />);\n ui.registerRoot(scopeUi.uiRoot.bind(scopeUi));\n scopeUi.registerSidebarLink(() => (\n <MenuLinkItem exact href=\"/\" icon=\"comps\">\n Gallery\n </MenuLinkItem>\n ));\n\n return scopeUi;\n }\n}\n\nexport default ScopeUI;\n\nScopeAspect.addRuntime(ScopeUI);\n"]}
1
+ {"version":3,"sources":["scope.ui.runtime.tsx"],"names":["ScopeUI","constructor","routeSlot","componentUi","menuSlot","sidebar","sidebarSlot","commandBarUI","componentSearcher","scopeBadgeSlot","menuWidgetSlot","sidebarItemSlot","menuItemSlot","cornerSlot","overviewSlot","contextSlot","menuItems","register","componentTreeNodes","map","componentTreeNode","links","components","update","category","title","keyChar","handler","run","registerBadge","badges","registerOverviewLine","lines","registerRoute","route","registerExplicitRoutes","path","routePath","children","getComponentUI","ScopeAspect","id","getMenu","exact","registerMenuWidget","registerCorner","corner","replaceOverview","replaceDescription","replaceMetadataSection","registerMetadataItem","replaceComponentGrid","registerMetadata","addContext","context","getContext","contexts","values","uiRoot","registerDrawer","ComponentsDrawer","addSearcher","setKeyBindHandler","addCommand","displayName","keybinding","setSidebarToggle","routes","provider","ui","reactRouterUI","config","ComponentSearcher","navigateTo","scopeUi","registerMenuItem","registerRoot","bind","registerSidebarLink","UIAspect","ComponentAspect","SidebarAspect","CommandBarAspect","ReactRouterAspect","UIRuntime","Slot","withType","addRuntime"],"mappings":"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","sourcesContent":["import flatten from 'lodash.flatten';\nimport type { ComponentUI, ComponentModel } from '@teambit/component';\nimport { ComponentAspect } from '@teambit/component';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport ReactRouterAspect, { ReactRouterUI } from '@teambit/react-router';\nimport { RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { SidebarAspect, SidebarUI, SidebarItem, SidebarItemSlot } from '@teambit/sidebar';\nimport { ComponentTreeNode } from '@teambit/component-tree';\nimport { UIAspect, UIRootUI as UIRoot, UIRuntime, UiUI } from '@teambit/ui';\nimport React, { ComponentType, ReactNode } from 'react';\nimport { MenuItemSlot, MenuItem } from '@teambit/ui-foundation.ui.main-dropdown';\nimport { RouteProps } from 'react-router-dom';\nimport { MenuWidget, MenuWidgetSlot } from '@teambit/ui-foundation.ui.menu';\nimport { MenuLinkItem } from '@teambit/design.ui.surfaces.menu.link-item';\nimport CommandBarAspect, { CommandBarUI, ComponentSearcher, CommandHandler } from '@teambit/command-bar';\nimport { ScopeModel } from '@teambit/scope.models.scope-model';\nimport { ScopeMenu, ScopeUseBox } from './ui/menu';\nimport { ScopeAspect } from './scope.aspect';\nimport { Scope } from './ui/scope';\nimport { ComponentsDrawer } from './ui/components-drawer';\n\nexport type ScopeBadge = ComponentType;\n\nexport type ScopeBadgeSlot = SlotRegistry<ScopeBadge[]>;\n\nexport type ContextSlot = SlotRegistry<ScopeContextType[]>;\n\nexport type ScopeContextType = ComponentType<{ scope: ScopeModel; children: ReactNode }>;\n\nexport type SidebarSlot = SlotRegistry<ComponentTreeNode>;\n\nexport type ScopeOverview = ComponentType;\n\nexport type ScopeOverviewSlot = SlotRegistry<ScopeOverview>;\n\nexport type Corner = ComponentType;\n\nexport type CornerSlot = SlotRegistry<Corner>;\n\nexport type OverviewLine = ComponentType;\n\nexport type OverviewLineSlot = SlotRegistry<OverviewLine[]>;\n\nexport class ScopeUI {\n constructor(\n /**\n * route slot.\n */\n private routeSlot: RouteSlot,\n\n /**\n * component ui extension.\n */\n private componentUi: ComponentUI,\n /**\n * menu slot\n */\n private menuSlot: RouteSlot,\n\n private sidebar: SidebarUI,\n\n private sidebarSlot: SidebarSlot,\n\n private commandBarUI: CommandBarUI,\n\n private componentSearcher: ComponentSearcher,\n\n private scopeBadgeSlot: ScopeBadgeSlot,\n\n private menuWidgetSlot: MenuWidgetSlot,\n\n /**\n * sidebar link slot\n */\n private sidebarItemSlot: SidebarItemSlot,\n\n /**\n * main dropdown item slot\n */\n private menuItemSlot: MenuItemSlot,\n\n /**\n * corner slot\n */\n private cornerSlot: CornerSlot,\n\n /**\n * overview line slot to add new lines beneath the overview section\n */\n private overviewSlot: OverviewLineSlot,\n\n /**\n * add a new context to ui\n */\n private contextSlot: ContextSlot\n ) {}\n\n private setSidebarToggle: (updated: CommandHandler) => void = () => {};\n\n /**\n * register a new badge into the scope overview.\n */\n registerBadge(...badges: ScopeBadge[]) {\n this.scopeBadgeSlot.register(badges);\n return this;\n }\n\n /**\n * register a new line beneath the scope overview section.\n */\n registerOverviewLine(...lines: OverviewLine[]) {\n this.overviewSlot.register(lines);\n return this;\n }\n\n /**\n * register a route to the scope.\n */\n registerRoute(route: RouteProps) {\n this.routeSlot.register(route);\n return this;\n }\n\n private registerExplicitRoutes() {\n this.routeSlot.register({\n path: this.componentUi.routePath,\n children: this.componentUi.getComponentUI(ScopeAspect.id),\n });\n\n this.menuSlot.register([\n {\n path: this.componentUi.routePath,\n children: this.componentUi.getMenu(ScopeAspect.id),\n },\n {\n exact: true,\n path: '/',\n children: <ScopeMenu widgetSlot={this.menuWidgetSlot} menuItemSlot={this.menuItemSlot} />,\n },\n ]);\n }\n\n registerMenuWidget(...menuItems: MenuWidget[]) {\n this.menuWidgetSlot.register(menuItems);\n }\n\n registerCorner(corner: Corner) {\n this.cornerSlot.register(corner);\n }\n\n /**\n * register a scope overview.\n */\n replaceOverview() {}\n\n /**\n * register description.\n */\n replaceDescription() {}\n\n /**\n * register metadata section.\n */\n replaceMetadataSection() {}\n\n /**\n * register a metadata item.\n */\n registerMetadataItem() {}\n\n replaceComponentGrid() {}\n\n /**\n * register metadata.\n */\n registerMetadata() {}\n\n /**\n * add a new context to the scope.\n */\n addContext(...context: ScopeContextType[]) {\n this.contextSlot.register(context);\n return this;\n }\n\n private getContext() {\n const contexts = this.contextSlot.values();\n return flatten(contexts);\n }\n\n registerMenuItem = (menuItems: MenuItem[]) => {\n this.menuItemSlot.register(menuItems);\n };\n\n /**\n * register a sidebar Widget for the scope\n */\n registerSidebarWidget = (componentTreeNodes: ComponentTreeNode[]) => {\n componentTreeNodes.map((componentTreeNode) => this.sidebarSlot.register(componentTreeNode));\n return this;\n };\n\n /**\n * register a sidebar link to the section above the drawers\n */\n registerSidebarLink = (...links: SidebarItem[]) => {\n this.sidebarItemSlot.register(links);\n };\n\n uiRoot(): UIRoot {\n this.sidebar.registerDrawer(new ComponentsDrawer(this.sidebarSlot));\n this.commandBarUI.addSearcher(this.componentSearcher);\n\n const [setKeyBindHandler] = this.commandBarUI.addCommand({\n id: 'sidebar.toggle', // TODO - extract to a component!\n handler: () => {},\n displayName: 'Toggle component list',\n keybinding: 'alt+s',\n });\n this.setSidebarToggle = setKeyBindHandler;\n\n return {\n routes: [\n {\n path: '/',\n children: (\n <Scope\n routeSlot={this.routeSlot}\n menuSlot={this.menuSlot}\n sidebar={<this.sidebar.render itemSlot={this.sidebarItemSlot} />}\n scopeUi={this}\n badgeSlot={this.scopeBadgeSlot}\n overviewLineSlot={this.overviewSlot}\n context={this.getContext()}\n onSidebarTogglerChange={this.setSidebarToggle}\n cornerSlot={this.cornerSlot}\n />\n ),\n },\n ],\n };\n }\n\n /** registers available components */\n setComponents = (components: ComponentModel[]) => {\n this.componentSearcher.update(components);\n };\n\n private menuItems: MenuItem[] = [\n {\n category: 'general',\n title: 'Open command bar',\n keyChar: 'mod+k',\n handler: () => this.commandBarUI?.run('command-bar.open'),\n },\n {\n category: 'general',\n title: 'Toggle component list',\n keyChar: 'alt+s',\n handler: () => this.commandBarUI?.run('sidebar.toggle'),\n },\n ];\n\n static dependencies = [UIAspect, ComponentAspect, SidebarAspect, CommandBarAspect, ReactRouterAspect];\n static runtime = UIRuntime;\n static slots = [\n Slot.withType<RouteProps>(),\n Slot.withType<RouteProps>(),\n Slot.withType<ComponentTreeNode>(),\n Slot.withType<ScopeBadge>(),\n Slot.withType<ScopeOverview>(),\n Slot.withType<MenuWidget[]>(),\n Slot.withType<MenuItemSlot>(),\n Slot.withType<CornerSlot>(),\n Slot.withType<OverviewLineSlot>(),\n Slot.withType<SidebarItemSlot>(),\n Slot.withType<ContextSlot>(),\n ];\n\n static async provider(\n [ui, componentUi, sidebar, commandBarUI, reactRouterUI]: [\n UiUI,\n ComponentUI,\n SidebarUI,\n CommandBarUI,\n ReactRouterUI\n ],\n config,\n [\n routeSlot,\n menuSlot,\n sidebarSlot,\n scopeBadgeSlot,\n menuWidgetSlot,\n menuItemSlot,\n sidebarItemSlot,\n cornerSlot,\n overviewSlot,\n contextSlot,\n ]: [\n RouteSlot,\n RouteSlot,\n SidebarSlot,\n ScopeBadgeSlot,\n MenuWidgetSlot,\n MenuItemSlot,\n SidebarItemSlot,\n CornerSlot,\n OverviewLineSlot,\n ContextSlot\n ]\n ) {\n const componentSearcher = new ComponentSearcher(reactRouterUI.navigateTo);\n const scopeUi = new ScopeUI(\n routeSlot,\n componentUi,\n menuSlot,\n sidebar,\n sidebarSlot,\n commandBarUI,\n componentSearcher,\n scopeBadgeSlot,\n menuWidgetSlot,\n sidebarItemSlot,\n menuItemSlot,\n cornerSlot,\n overviewSlot,\n contextSlot\n );\n scopeUi.registerExplicitRoutes();\n scopeUi.registerMenuItem(scopeUi.menuItems);\n scopeUi.registerMenuWidget(() => <ScopeUseBox />);\n ui.registerRoot(scopeUi.uiRoot.bind(scopeUi));\n scopeUi.registerSidebarLink(() => (\n <MenuLinkItem exact href=\"/\" icon=\"comps\">\n Gallery\n </MenuLinkItem>\n ));\n\n return scopeUi;\n }\n}\n\nexport default ScopeUI;\n\nScopeAspect.addRuntime(ScopeUI);\n"]}
@@ -10,7 +10,7 @@ export declare type ScopeProps = {
10
10
  badgeSlot: ScopeBadgeSlot;
11
11
  overviewLineSlot: OverviewLineSlot;
12
12
  cornerSlot: CornerSlot;
13
- context?: ScopeContextType;
13
+ context: ScopeContextType[];
14
14
  onSidebarTogglerChange: (callback: () => void) => void;
15
15
  };
16
16
  /**
package/dist/ui/scope.js CHANGED
@@ -71,6 +71,16 @@ function _uiFoundationUi2() {
71
71
  return data;
72
72
  }
73
73
 
74
+ function _baseUiUtils() {
75
+ const data = require("@teambit/base-ui.utils.composer");
76
+
77
+ _baseUiUtils = function () {
78
+ return data;
79
+ };
80
+
81
+ return data;
82
+ }
83
+
74
84
  function _fullLoader() {
75
85
  const data = require("@teambit/legacy/dist/to-eject/full-loader");
76
86
 
@@ -166,7 +176,7 @@ function Scope({
166
176
  badgeSlot,
167
177
  overviewLineSlot,
168
178
  cornerSlot,
169
- context,
179
+ context = [],
170
180
  onSidebarTogglerChange
171
181
  }) {
172
182
  const {
@@ -182,17 +192,14 @@ function Scope({
182
192
 
183
193
  const CornerOverride = cornerSlot === null || cornerSlot === void 0 ? void 0 : cornerSlot.values()[0];
184
194
  scopeUi.setComponents(scope.components);
185
-
186
- const defaultContext = ({
187
- children
188
- }) => /*#__PURE__*/_react().default.createElement("div", null, children);
189
-
190
- const Context = context || defaultContext;
195
+ const Context = context.map(ctx => [ctx, {
196
+ scope
197
+ }]);
191
198
  onSidebarTogglerChange(handleSidebarToggle);
192
199
  return /*#__PURE__*/_react().default.createElement(_scopeUiHooks().ScopeProvider, {
193
200
  scope: scope
194
- }, /*#__PURE__*/_react().default.createElement(Context, {
195
- scope: scope
201
+ }, /*#__PURE__*/_react().default.createElement(_baseUiUtils().Composer, {
202
+ components: Context
196
203
  }, /*#__PURE__*/_react().default.createElement("div", {
197
204
  className: _scopeModule().default.scope
198
205
  }, /*#__PURE__*/_react().default.createElement(_uiFoundationUi2().TopBar, {
@@ -1 +1 @@
1
- {"version":3,"sources":["scope.tsx"],"names":["Scope","routeSlot","menuSlot","sidebar","scopeUi","badgeSlot","overviewLineSlot","cornerSlot","context","onSidebarTogglerChange","scope","isMobile","isSidebarOpen","handleSidebarToggle","x","sidebarOpenness","Layout","row","right","CornerOverride","values","setComponents","components","defaultContext","children","Context","styles","topbar","name","whiteCorner","main","splitter","e","stopPropagation"],"mappings":"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","sourcesContent":["import 'reset-css';\nimport { SplitPane, Pane, Layout } from '@teambit/base-ui.surfaces.split-pane.split-pane';\nimport { RouteSlot, SlotRouter } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { Corner } from '@teambit/ui-foundation.ui.corner';\nimport { Collapser } from '@teambit/ui-foundation.ui.buttons.collapser';\nimport { HoverSplitter } from '@teambit/base-ui.surfaces.split-pane.hover-splitter';\nimport { TopBar } from '@teambit/ui-foundation.ui.top-bar';\nimport { FullLoader } from '@teambit/legacy/dist/to-eject/full-loader';\nimport React, { useReducer } from 'react';\nimport { Route } from 'react-router-dom';\nimport { useIsMobile } from '@teambit/ui-foundation.ui.hooks.use-is-mobile';\nimport { ScopeProvider } from '@teambit/scope.ui.hooks.scope-context';\nimport { useScopeQuery } from '@teambit/scope.ui.hooks.use-scope';\nimport { ScopeOverview } from './scope-overview';\nimport styles from './scope.module.scss';\nimport ScopeUI, { ScopeBadgeSlot, ScopeContextType, CornerSlot, OverviewLineSlot } from '../scope.ui.runtime';\n\nexport type ScopeProps = {\n routeSlot: RouteSlot;\n menuSlot: RouteSlot;\n sidebar: JSX.Element;\n scopeUi: ScopeUI;\n badgeSlot: ScopeBadgeSlot;\n overviewLineSlot: OverviewLineSlot;\n cornerSlot: CornerSlot;\n context?: ScopeContextType;\n onSidebarTogglerChange: (callback: () => void) => void;\n};\n\n/**\n * root component of the scope\n */\nexport function Scope({\n routeSlot,\n menuSlot,\n sidebar,\n scopeUi,\n badgeSlot,\n overviewLineSlot,\n cornerSlot,\n context,\n onSidebarTogglerChange,\n}: ScopeProps) {\n const { scope } = useScopeQuery();\n const isMobile = useIsMobile();\n const [isSidebarOpen, handleSidebarToggle] = useReducer((x) => !x, !isMobile);\n const sidebarOpenness = isSidebarOpen ? Layout.row : Layout.right;\n if (!scope) {\n return <FullLoader />;\n }\n const CornerOverride = cornerSlot?.values()[0];\n scopeUi.setComponents(scope.components);\n const defaultContext = ({ children }) => <div>{children}</div>;\n const Context = context || defaultContext;\n\n onSidebarTogglerChange(handleSidebarToggle);\n\n return (\n <ScopeProvider scope={scope}>\n <Context scope={scope}>\n <div className={styles.scope}>\n <TopBar\n className={styles.topbar}\n Corner={() => {\n if (CornerOverride) return <CornerOverride />;\n return <Corner name={scope.name} className={styles.whiteCorner} />;\n }}\n menu={menuSlot}\n />\n\n <SplitPane className={styles.main} size={264} layout={sidebarOpenness}>\n <Pane className={styles.sidebar}>{sidebar}</Pane>\n <HoverSplitter className={styles.splitter}>\n <Collapser\n isOpen={isSidebarOpen}\n onMouseDown={(e) => e.stopPropagation()} // avoid split-pane drag\n onClick={handleSidebarToggle}\n tooltipContent={`${isSidebarOpen ? 'Hide' : 'Show'} side panel`}\n />\n </HoverSplitter>\n <Pane>\n <SlotRouter slot={routeSlot} />\n <Route exact path=\"/\">\n <ScopeOverview badgeSlot={badgeSlot} overviewSlot={overviewLineSlot} />\n </Route>\n </Pane>\n </SplitPane>\n </div>\n </Context>\n </ScopeProvider>\n );\n}\n"]}
1
+ {"version":3,"sources":["scope.tsx"],"names":["Scope","routeSlot","menuSlot","sidebar","scopeUi","badgeSlot","overviewLineSlot","cornerSlot","context","onSidebarTogglerChange","scope","isMobile","isSidebarOpen","handleSidebarToggle","x","sidebarOpenness","Layout","row","right","CornerOverride","values","setComponents","components","Context","map","ctx","styles","topbar","name","whiteCorner","main","splitter","e","stopPropagation"],"mappings":";;;;;;;;;;;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;AAeA;AACA;AACA;AACO,SAASA,KAAT,CAAe;AACpBC,EAAAA,SADoB;AAEpBC,EAAAA,QAFoB;AAGpBC,EAAAA,OAHoB;AAIpBC,EAAAA,OAJoB;AAKpBC,EAAAA,SALoB;AAMpBC,EAAAA,gBANoB;AAOpBC,EAAAA,UAPoB;AAQpBC,EAAAA,OAAO,GAAG,EARU;AASpBC,EAAAA;AAToB,CAAf,EAUQ;AACb,QAAM;AAAEC,IAAAA;AAAF,MAAY,qCAAlB;AACA,QAAMC,QAAQ,GAAG,yCAAjB;AACA,QAAM,CAACC,aAAD,EAAgBC,mBAAhB,IAAuC,yBAAYC,CAAD,IAAO,CAACA,CAAnB,EAAsB,CAACH,QAAvB,CAA7C;AACA,QAAMI,eAAe,GAAGH,aAAa,GAAGI,kCAAOC,GAAV,GAAgBD,kCAAOE,KAA5D;;AACA,MAAI,CAACR,KAAL,EAAY;AACV,wBAAO,+BAAC,wBAAD,OAAP;AACD;;AACD,QAAMS,cAAc,GAAGZ,UAAH,aAAGA,UAAH,uBAAGA,UAAU,CAAEa,MAAZ,GAAqB,CAArB,CAAvB;AACAhB,EAAAA,OAAO,CAACiB,aAAR,CAAsBX,KAAK,CAACY,UAA5B;AACA,QAAMC,OAAO,GAAGf,OAAO,CAACgB,GAAR,CAAaC,GAAD,IAAS,CAACA,GAAD,EAAM;AAAEf,IAAAA;AAAF,GAAN,CAArB,CAAhB;AAEAD,EAAAA,sBAAsB,CAACI,mBAAD,CAAtB;AAEA,sBACE,+BAAC,6BAAD;AAAe,IAAA,KAAK,EAAEH;AAAtB,kBACE,+BAAC,uBAAD;AAAU,IAAA,UAAU,EAAEa;AAAtB,kBACE;AAAK,IAAA,SAAS,EAAEG,uBAAOhB;AAAvB,kBACE,+BAAC,yBAAD;AACE,IAAA,SAAS,EAAEgB,uBAAOC,MADpB;AAEE,IAAA,MAAM,EAAE,MAAM;AACZ,UAAIR,cAAJ,EAAoB,oBAAO,+BAAC,cAAD,OAAP;AACpB,0BAAO,+BAAC,wBAAD;AAAQ,QAAA,IAAI,EAAET,KAAK,CAACkB,IAApB;AAA0B,QAAA,SAAS,EAAEF,uBAAOG;AAA5C,QAAP;AACD,KALH;AAME,IAAA,IAAI,EAAE3B;AANR,IADF,eAUE,+BAAC,oCAAD;AAAW,IAAA,SAAS,EAAEwB,uBAAOI,IAA7B;AAAmC,IAAA,IAAI,EAAE,GAAzC;AAA8C,IAAA,MAAM,EAAEf;AAAtD,kBACE,+BAAC,+BAAD;AAAM,IAAA,SAAS,EAAEW,uBAAOvB;AAAxB,KAAkCA,OAAlC,CADF,eAEE,+BAAC,yCAAD;AAAe,IAAA,SAAS,EAAEuB,uBAAOK;AAAjC,kBACE,+BAAC,kCAAD;AACE,IAAA,MAAM,EAAEnB,aADV;AAEE,IAAA,WAAW,EAAGoB,CAAD,IAAOA,CAAC,CAACC,eAAF,EAFtB,CAE2C;AAF3C;AAGE,IAAA,OAAO,EAAEpB,mBAHX;AAIE,IAAA,cAAc,EAAG,GAAED,aAAa,GAAG,MAAH,GAAY,MAAO;AAJrD,IADF,CAFF,eAUE,+BAAC,+BAAD,qBACE,+BAAC,uCAAD;AAAY,IAAA,IAAI,EAAEX;AAAlB,IADF,eAEE,+BAAC,uBAAD;AAAO,IAAA,KAAK,MAAZ;AAAa,IAAA,IAAI,EAAC;AAAlB,kBACE,+BAAC,8BAAD;AAAe,IAAA,SAAS,EAAEI,SAA1B;AAAqC,IAAA,YAAY,EAAEC;AAAnD,IADF,CAFF,CAVF,CAVF,CADF,CADF,CADF;AAkCD","sourcesContent":["import 'reset-css';\nimport { SplitPane, Pane, Layout } from '@teambit/base-ui.surfaces.split-pane.split-pane';\nimport { RouteSlot, SlotRouter } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { Corner } from '@teambit/ui-foundation.ui.corner';\nimport { Collapser } from '@teambit/ui-foundation.ui.buttons.collapser';\nimport { HoverSplitter } from '@teambit/base-ui.surfaces.split-pane.hover-splitter';\nimport { TopBar } from '@teambit/ui-foundation.ui.top-bar';\nimport { Composer, ComponentTuple } from '@teambit/base-ui.utils.composer';\nimport { FullLoader } from '@teambit/legacy/dist/to-eject/full-loader';\nimport React, { useReducer } from 'react';\nimport { Route } from 'react-router-dom';\nimport { useIsMobile } from '@teambit/ui-foundation.ui.hooks.use-is-mobile';\nimport { ScopeProvider } from '@teambit/scope.ui.hooks.scope-context';\nimport { useScopeQuery } from '@teambit/scope.ui.hooks.use-scope';\nimport { ScopeOverview } from './scope-overview';\nimport styles from './scope.module.scss';\nimport ScopeUI, { ScopeBadgeSlot, ScopeContextType, CornerSlot, OverviewLineSlot } from '../scope.ui.runtime';\n\nexport type ScopeProps = {\n routeSlot: RouteSlot;\n menuSlot: RouteSlot;\n sidebar: JSX.Element;\n scopeUi: ScopeUI;\n badgeSlot: ScopeBadgeSlot;\n overviewLineSlot: OverviewLineSlot;\n cornerSlot: CornerSlot;\n context: ScopeContextType[];\n onSidebarTogglerChange: (callback: () => void) => void;\n};\n\n/**\n * root component of the scope\n */\nexport function Scope({\n routeSlot,\n menuSlot,\n sidebar,\n scopeUi,\n badgeSlot,\n overviewLineSlot,\n cornerSlot,\n context = [],\n onSidebarTogglerChange,\n}: ScopeProps) {\n const { scope } = useScopeQuery();\n const isMobile = useIsMobile();\n const [isSidebarOpen, handleSidebarToggle] = useReducer((x) => !x, !isMobile);\n const sidebarOpenness = isSidebarOpen ? Layout.row : Layout.right;\n if (!scope) {\n return <FullLoader />;\n }\n const CornerOverride = cornerSlot?.values()[0];\n scopeUi.setComponents(scope.components);\n const Context = context.map((ctx) => [ctx, { scope }] as ComponentTuple);\n\n onSidebarTogglerChange(handleSidebarToggle);\n\n return (\n <ScopeProvider scope={scope}>\n <Composer components={Context}>\n <div className={styles.scope}>\n <TopBar\n className={styles.topbar}\n Corner={() => {\n if (CornerOverride) return <CornerOverride />;\n return <Corner name={scope.name} className={styles.whiteCorner} />;\n }}\n menu={menuSlot}\n />\n\n <SplitPane className={styles.main} size={264} layout={sidebarOpenness}>\n <Pane className={styles.sidebar}>{sidebar}</Pane>\n <HoverSplitter className={styles.splitter}>\n <Collapser\n isOpen={isSidebarOpen}\n onMouseDown={(e) => e.stopPropagation()} // avoid split-pane drag\n onClick={handleSidebarToggle}\n tooltipContent={`${isSidebarOpen ? 'Hide' : 'Show'} side panel`}\n />\n </HoverSplitter>\n <Pane>\n <SlotRouter slot={routeSlot} />\n <Route exact path=\"/\">\n <ScopeOverview badgeSlot={badgeSlot} overviewSlot={overviewLineSlot} />\n </Route>\n </Pane>\n </SplitPane>\n </div>\n </Composer>\n </ScopeProvider>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/scope",
3
- "version": "0.0.611",
3
+ "version": "0.0.619",
4
4
  "homepage": "https://bit.dev/teambit/scope/scope",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.scope",
8
8
  "name": "scope",
9
- "version": "0.0.611"
9
+ "version": "0.0.619"
10
10
  },
11
11
  "dependencies": {
12
12
  "semver": "7.3.4",
@@ -15,6 +15,7 @@
15
15
  "fs-extra": "10.0.0",
16
16
  "lodash": "4.17.21",
17
17
  "p-map-series": "2.1.0",
18
+ "lodash.flatten": "4.4.0",
18
19
  "react-router-dom": "5.2.0",
19
20
  "reset-css": "5.0.1",
20
21
  "classnames": "2.2.6",
@@ -22,29 +23,30 @@
22
23
  "core-js": "^3.0.0",
23
24
  "@teambit/base-ui.surfaces.split-pane.hover-splitter": "1.0.0",
24
25
  "@teambit/base-ui.surfaces.split-pane.split-pane": "1.0.0",
26
+ "@teambit/base-ui.utils.composer": "1.0.0",
25
27
  "@teambit/base-ui.graph.tree.recursive-tree": "1.0.0",
26
28
  "@teambit/scope.models.scope-model": "0.0.95",
27
29
  "@teambit/scope.ui.hooks.scope-context": "0.0.95",
28
- "@teambit/component": "0.0.611",
29
- "@teambit/logger": "0.0.510",
30
- "@teambit/aspect-loader": "0.0.611",
31
- "@teambit/builder": "0.0.611",
32
- "@teambit/cli": "0.0.421",
33
- "@teambit/compiler": "0.0.611",
34
- "@teambit/config": "0.0.433",
35
- "@teambit/envs": "0.0.611",
36
- "@teambit/express": "0.0.514",
37
- "@teambit/graphql": "0.0.611",
30
+ "@teambit/component": "0.0.619",
31
+ "@teambit/logger": "0.0.516",
32
+ "@teambit/aspect-loader": "0.0.619",
33
+ "@teambit/builder": "0.0.619",
34
+ "@teambit/cli": "0.0.427",
35
+ "@teambit/compiler": "0.0.619",
36
+ "@teambit/config": "0.0.439",
37
+ "@teambit/envs": "0.0.619",
38
+ "@teambit/express": "0.0.520",
39
+ "@teambit/graphql": "0.0.619",
38
40
  "@teambit/harmony.modules.requireable-component": "0.0.483",
39
- "@teambit/isolator": "0.0.611",
41
+ "@teambit/isolator": "0.0.619",
40
42
  "@teambit/legacy-bit-id": "0.0.397",
41
- "@teambit/ui": "0.0.611",
43
+ "@teambit/ui": "0.0.619",
42
44
  "@teambit/workspace.modules.match-pattern": "0.0.487",
43
- "@teambit/command-bar": "0.0.611",
44
- "@teambit/component-tree": "0.0.405",
45
- "@teambit/design.ui.surfaces.menu.link-item": "0.0.375",
46
- "@teambit/react-router": "0.0.611",
47
- "@teambit/sidebar": "0.0.611",
45
+ "@teambit/command-bar": "0.0.619",
46
+ "@teambit/component-tree": "0.0.411",
47
+ "@teambit/design.ui.surfaces.menu.link-item": "0.0.377",
48
+ "@teambit/react-router": "0.0.619",
49
+ "@teambit/sidebar": "0.0.619",
48
50
  "@teambit/ui-foundation.ui.main-dropdown": "0.0.485",
49
51
  "@teambit/ui-foundation.ui.menu": "0.0.485",
50
52
  "@teambit/ui-foundation.ui.react-router.slot-router": "0.0.487",
@@ -72,6 +74,7 @@
72
74
  "@types/semver": "7.3.4",
73
75
  "@types/fs-extra": "9.0.7",
74
76
  "@types/lodash": "4.14.165",
77
+ "@types/lodash.flatten": "4.4.6",
75
78
  "@types/react-router-dom": "5.1.7",
76
79
  "@types/react": "^17.0.8",
77
80
  "@types/classnames": "2.2.11",
@@ -82,7 +85,7 @@
82
85
  "@types/node": "12.20.4"
83
86
  },
84
87
  "peerDependencies": {
85
- "@teambit/legacy": "1.0.203",
88
+ "@teambit/legacy": "1.0.206",
86
89
  "react-dom": "^16.8.0 || ^17.0.0",
87
90
  "react": "^16.8.0 || ^17.0.0"
88
91
  },
@@ -110,7 +113,7 @@
110
113
  "react": "-"
111
114
  },
112
115
  "peerDependencies": {
113
- "@teambit/legacy": "1.0.203",
116
+ "@teambit/legacy": "1.0.206",
114
117
  "react-dom": "^16.8.0 || ^17.0.0",
115
118
  "react": "^16.8.0 || ^17.0.0"
116
119
  }
@@ -1,3 +1,4 @@
1
+ import flatten from 'lodash.flatten';
1
2
  import type { ComponentUI, ComponentModel } from '@teambit/component';
2
3
  import { ComponentAspect } from '@teambit/component';
3
4
  import { Slot, SlotRegistry } from '@teambit/harmony';
@@ -22,6 +23,8 @@ export type ScopeBadge = ComponentType;
22
23
 
23
24
  export type ScopeBadgeSlot = SlotRegistry<ScopeBadge[]>;
24
25
 
26
+ export type ContextSlot = SlotRegistry<ScopeContextType[]>;
27
+
25
28
  export type ScopeContextType = ComponentType<{ scope: ScopeModel; children: ReactNode }>;
26
29
 
27
30
  export type SidebarSlot = SlotRegistry<ComponentTreeNode>;
@@ -84,7 +87,12 @@ export class ScopeUI {
84
87
  /**
85
88
  * overview line slot to add new lines beneath the overview section
86
89
  */
87
- private overviewSlot: OverviewLineSlot
90
+ private overviewSlot: OverviewLineSlot,
91
+
92
+ /**
93
+ * add a new context to ui
94
+ */
95
+ private contextSlot: ContextSlot
88
96
  ) {}
89
97
 
90
98
  private setSidebarToggle: (updated: CommandHandler) => void = () => {};
@@ -167,24 +175,31 @@ export class ScopeUI {
167
175
  */
168
176
  registerMetadata() {}
169
177
 
170
- private _context: () => ScopeContextType;
171
-
172
178
  /**
173
179
  * add a new context to the scope.
174
180
  */
175
- addContext(context: ScopeContextType) {
176
- this._context = () => context;
181
+ addContext(...context: ScopeContextType[]) {
182
+ this.contextSlot.register(context);
183
+ return this;
177
184
  }
178
185
 
179
- getContext() {
180
- if (!this._context) return undefined;
181
- return this._context();
186
+ private getContext() {
187
+ const contexts = this.contextSlot.values();
188
+ return flatten(contexts);
182
189
  }
183
190
 
184
191
  registerMenuItem = (menuItems: MenuItem[]) => {
185
192
  this.menuItemSlot.register(menuItems);
186
193
  };
187
194
 
195
+ /**
196
+ * register a sidebar Widget for the scope
197
+ */
198
+ registerSidebarWidget = (componentTreeNodes: ComponentTreeNode[]) => {
199
+ componentTreeNodes.map((componentTreeNode) => this.sidebarSlot.register(componentTreeNode));
200
+ return this;
201
+ };
202
+
188
203
  /**
189
204
  * register a sidebar link to the section above the drawers
190
205
  */
@@ -259,6 +274,7 @@ export class ScopeUI {
259
274
  Slot.withType<CornerSlot>(),
260
275
  Slot.withType<OverviewLineSlot>(),
261
276
  Slot.withType<SidebarItemSlot>(),
277
+ Slot.withType<ContextSlot>(),
262
278
  ];
263
279
 
264
280
  static async provider(
@@ -280,6 +296,7 @@ export class ScopeUI {
280
296
  sidebarItemSlot,
281
297
  cornerSlot,
282
298
  overviewSlot,
299
+ contextSlot,
283
300
  ]: [
284
301
  RouteSlot,
285
302
  RouteSlot,
@@ -289,7 +306,8 @@ export class ScopeUI {
289
306
  MenuItemSlot,
290
307
  SidebarItemSlot,
291
308
  CornerSlot,
292
- OverviewLineSlot
309
+ OverviewLineSlot,
310
+ ContextSlot
293
311
  ]
294
312
  ) {
295
313
  const componentSearcher = new ComponentSearcher(reactRouterUI.navigateTo);
@@ -306,7 +324,8 @@ export class ScopeUI {
306
324
  sidebarItemSlot,
307
325
  menuItemSlot,
308
326
  cornerSlot,
309
- overviewSlot
327
+ overviewSlot,
328
+ contextSlot
310
329
  );
311
330
  scopeUi.registerExplicitRoutes();
312
331
  scopeUi.registerMenuItem(scopeUi.menuItems);
package/ui/scope.tsx CHANGED
@@ -5,6 +5,7 @@ import { Corner } from '@teambit/ui-foundation.ui.corner';
5
5
  import { Collapser } from '@teambit/ui-foundation.ui.buttons.collapser';
6
6
  import { HoverSplitter } from '@teambit/base-ui.surfaces.split-pane.hover-splitter';
7
7
  import { TopBar } from '@teambit/ui-foundation.ui.top-bar';
8
+ import { Composer, ComponentTuple } from '@teambit/base-ui.utils.composer';
8
9
  import { FullLoader } from '@teambit/legacy/dist/to-eject/full-loader';
9
10
  import React, { useReducer } from 'react';
10
11
  import { Route } from 'react-router-dom';
@@ -23,7 +24,7 @@ export type ScopeProps = {
23
24
  badgeSlot: ScopeBadgeSlot;
24
25
  overviewLineSlot: OverviewLineSlot;
25
26
  cornerSlot: CornerSlot;
26
- context?: ScopeContextType;
27
+ context: ScopeContextType[];
27
28
  onSidebarTogglerChange: (callback: () => void) => void;
28
29
  };
29
30
 
@@ -38,7 +39,7 @@ export function Scope({
38
39
  badgeSlot,
39
40
  overviewLineSlot,
40
41
  cornerSlot,
41
- context,
42
+ context = [],
42
43
  onSidebarTogglerChange,
43
44
  }: ScopeProps) {
44
45
  const { scope } = useScopeQuery();
@@ -50,14 +51,13 @@ export function Scope({
50
51
  }
51
52
  const CornerOverride = cornerSlot?.values()[0];
52
53
  scopeUi.setComponents(scope.components);
53
- const defaultContext = ({ children }) => <div>{children}</div>;
54
- const Context = context || defaultContext;
54
+ const Context = context.map((ctx) => [ctx, { scope }] as ComponentTuple);
55
55
 
56
56
  onSidebarTogglerChange(handleSidebarToggle);
57
57
 
58
58
  return (
59
59
  <ScopeProvider scope={scope}>
60
- <Context scope={scope}>
60
+ <Composer components={Context}>
61
61
  <div className={styles.scope}>
62
62
  <TopBar
63
63
  className={styles.topbar}
@@ -86,7 +86,7 @@ export function Scope({
86
86
  </Pane>
87
87
  </SplitPane>
88
88
  </div>
89
- </Context>
89
+ </Composer>
90
90
  </ScopeProvider>
91
91
  );
92
92
  }