@teambit/scope 0.0.683 → 0.0.686

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.
@@ -0,0 +1,8 @@
1
+ import { ComponentsDrawer, ComponentFiltersSlot, DrawerWidgetSlot } from '@teambit/component.ui.component-drawer';
2
+ import { SidebarSlot } from './scope.ui.runtime';
3
+ export declare type ScopeDrawerProps = {
4
+ treeWidgets: SidebarSlot;
5
+ filtersSlot: ComponentFiltersSlot;
6
+ drawerWidgetSlot: DrawerWidgetSlot;
7
+ };
8
+ export declare const scopeDrawer: ({ treeWidgets, filtersSlot, drawerWidgetSlot }: ScopeDrawerProps) => ComponentsDrawer;
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.scopeDrawer = void 0;
9
+
10
+ function _extends2() {
11
+ const data = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
12
+
13
+ _extends2 = function () {
14
+ return data;
15
+ };
16
+
17
+ return data;
18
+ }
19
+
20
+ function _react() {
21
+ const data = _interopRequireWildcard(require("react"));
22
+
23
+ _react = function () {
24
+ return data;
25
+ };
26
+
27
+ return data;
28
+ }
29
+
30
+ function _componentUi() {
31
+ const data = require("@teambit/component.ui.component-drawer");
32
+
33
+ _componentUi = function () {
34
+ return data;
35
+ };
36
+
37
+ return data;
38
+ }
39
+
40
+ function _scopeUiHooks() {
41
+ const data = require("@teambit/scope.ui.hooks.scope-context");
42
+
43
+ _scopeUiHooks = function () {
44
+ return data;
45
+ };
46
+
47
+ return data;
48
+ }
49
+
50
+ function _uiFoundationUi() {
51
+ const data = require("@teambit/ui-foundation.ui.side-bar");
52
+
53
+ _uiFoundationUi = function () {
54
+ return data;
55
+ };
56
+
57
+ return data;
58
+ }
59
+
60
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
61
+
62
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
63
+
64
+ const scopeDrawer = ({
65
+ treeWidgets,
66
+ filtersSlot,
67
+ drawerWidgetSlot
68
+ }) => {
69
+ const customScopeTreeNodeRenderer = treeNodeSlot => function TreeNode(props) {
70
+ const children = props.node.children;
71
+ if (!children) return /*#__PURE__*/_react().default.createElement(_uiFoundationUi().ComponentView, (0, _extends2().default)({}, props, {
72
+ treeNodeSlot: treeNodeSlot
73
+ })); // skip over scope node and render only children
74
+
75
+ if (props.node.payload instanceof _uiFoundationUi().ScopePayload) {
76
+ return /*#__PURE__*/_react().default.createElement(_react().default.Fragment, null, children.map(childNode => /*#__PURE__*/_react().default.createElement(TreeNode, (0, _extends2().default)({
77
+ key: childNode.id
78
+ }, props, {
79
+ node: childNode
80
+ }))));
81
+ }
82
+
83
+ return /*#__PURE__*/_react().default.createElement(_uiFoundationUi().NamespaceTreeNode, props);
84
+ };
85
+
86
+ return new (_componentUi().ComponentsDrawer)({
87
+ order: 0,
88
+ id: 'scope-components-drawer',
89
+ name: 'COMPONENTS',
90
+ plugins: {
91
+ tree: {
92
+ widgets: treeWidgets,
93
+ customRenderer: customScopeTreeNodeRenderer
94
+ },
95
+ filters: filtersSlot,
96
+ drawerWidgets: drawerWidgetSlot
97
+ },
98
+ emptyMessage: 'Scope is empty',
99
+ useComponents: () => {
100
+ const scope = (0, _react().useContext)(_scopeUiHooks().ScopeContext);
101
+ return {
102
+ loading: !scope,
103
+ components: scope.components || []
104
+ };
105
+ }
106
+ });
107
+ };
108
+
109
+ exports.scopeDrawer = scopeDrawer;
110
+
111
+ //# sourceMappingURL=scope.ui.drawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["scope.ui.drawer.tsx"],"names":["scopeDrawer","treeWidgets","filtersSlot","drawerWidgetSlot","customScopeTreeNodeRenderer","treeNodeSlot","TreeNode","props","children","node","payload","ScopePayload","map","childNode","id","ComponentsDrawer","order","name","plugins","tree","widgets","customRenderer","filters","drawerWidgets","emptyMessage","useComponents","scope","ScopeContext","loading","components"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;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;;;;;;AAUO,MAAMA,WAAW,GAAG,CAAC;AAAEC,EAAAA,WAAF;AAAeC,EAAAA,WAAf;AAA4BC,EAAAA;AAA5B,CAAD,KAAsE;AAC/F,QAAMC,2BAA2B,GAAIC,YAAD,IAClC,SAASC,QAAT,CAAkBC,KAAlB,EAAqD;AACnD,UAAMC,QAAQ,GAAGD,KAAK,CAACE,IAAN,CAAWD,QAA5B;AAEA,QAAI,CAACA,QAAL,EAAe,oBAAO,+BAAC,+BAAD,+BAAmBD,KAAnB;AAA0B,MAAA,YAAY,EAAEF;AAAxC,OAAP,CAHoC,CAKnD;;AACA,QAAIE,KAAK,CAACE,IAAN,CAAWC,OAAX,YAA8BC,8BAAlC,EAAgD;AAC9C,0BACE,gEACGH,QAAQ,CAACI,GAAT,CAAcC,SAAD,iBACZ,+BAAC,QAAD;AAAU,QAAA,GAAG,EAAEA,SAAS,CAACC;AAAzB,SAAiCP,KAAjC;AAAwC,QAAA,IAAI,EAAEM;AAA9C,SADD,CADH,CADF;AAOD;;AAED,wBAAO,+BAAC,mCAAD,EAAuBN,KAAvB,CAAP;AACD,GAlBH;;AAoBA,SAAO,KAAIQ,+BAAJ,EAAqB;AAC1BC,IAAAA,KAAK,EAAE,CADmB;AAE1BF,IAAAA,EAAE,EAAE,yBAFsB;AAG1BG,IAAAA,IAAI,EAAE,YAHoB;AAI1BC,IAAAA,OAAO,EAAE;AACPC,MAAAA,IAAI,EAAE;AACJC,QAAAA,OAAO,EAAEnB,WADL;AAEJoB,QAAAA,cAAc,EAAEjB;AAFZ,OADC;AAKPkB,MAAAA,OAAO,EAAEpB,WALF;AAMPqB,MAAAA,aAAa,EAAEpB;AANR,KAJiB;AAY1BqB,IAAAA,YAAY,EAAE,gBAZY;AAa1BC,IAAAA,aAAa,EAAE,MAAM;AACnB,YAAMC,KAAK,GAAG,yBAAWC,4BAAX,CAAd;AACA,aAAO;AACLC,QAAAA,OAAO,EAAE,CAACF,KADL;AAELG,QAAAA,UAAU,EAAEH,KAAK,CAACG,UAAN,IAAoB;AAF3B,OAAP;AAID;AAnByB,GAArB,CAAP;AAqBD,CA1CM","sourcesContent":["import React, { useContext } from 'react';\nimport { ComponentsDrawer, ComponentFiltersSlot, DrawerWidgetSlot } from '@teambit/component.ui.component-drawer';\nimport { ScopeContext } from '@teambit/scope.ui.hooks.scope-context';\nimport { ComponentView, NamespaceTreeNode, PayloadType, ScopePayload } from '@teambit/ui-foundation.ui.side-bar';\nimport { TreeNodeProps } from '@teambit/design.ui.tree';\nimport { SidebarSlot } from './scope.ui.runtime';\n\nexport type ScopeDrawerProps = {\n treeWidgets: SidebarSlot;\n filtersSlot: ComponentFiltersSlot;\n drawerWidgetSlot: DrawerWidgetSlot;\n};\n\nexport const scopeDrawer = ({ treeWidgets, filtersSlot, drawerWidgetSlot }: ScopeDrawerProps) => {\n const customScopeTreeNodeRenderer = (treeNodeSlot) =>\n function TreeNode(props: TreeNodeProps<PayloadType>) {\n const children = props.node.children;\n\n if (!children) return <ComponentView {...props} treeNodeSlot={treeNodeSlot} />;\n\n // skip over scope node and render only children\n if (props.node.payload instanceof ScopePayload) {\n return (\n <>\n {children.map((childNode) => (\n <TreeNode key={childNode.id} {...props} node={childNode}></TreeNode>\n ))}\n </>\n );\n }\n\n return <NamespaceTreeNode {...props} />;\n };\n\n return new ComponentsDrawer({\n order: 0,\n id: 'scope-components-drawer',\n name: 'COMPONENTS',\n plugins: {\n tree: {\n widgets: treeWidgets,\n customRenderer: customScopeTreeNodeRenderer,\n },\n filters: filtersSlot,\n drawerWidgets: drawerWidgetSlot,\n },\n emptyMessage: 'Scope is empty',\n useComponents: () => {\n const scope = useContext(ScopeContext);\n return {\n loading: !scope,\n components: scope.components || [],\n };\n },\n });\n};\n"]}
@@ -12,6 +12,8 @@ import { MenuWidget, MenuWidgetSlot } from '@teambit/ui-foundation.ui.menu';
12
12
  import { CommandBarUI, ComponentSearcher } from '@teambit/command-bar';
13
13
  import { ScopeModel } from '@teambit/scope.models.scope-model';
14
14
  import { DrawerType } from '@teambit/ui-foundation.ui.tree.drawer';
15
+ import { DrawerWidgetSlot, ComponentFiltersSlot } from '@teambit/component.ui.component-drawer';
16
+ import { ComponentFilters } from '@teambit/component.ui.component-filters';
15
17
  export declare type ScopeBadge = ComponentType;
16
18
  export declare type ScopeBadgeSlot = SlotRegistry<ScopeBadge[]>;
17
19
  export declare type ContextSlot = SlotRegistry<ScopeContextType[]>;
@@ -65,6 +67,8 @@ export declare class ScopeUI {
65
67
  * add a new context to ui
66
68
  */
67
69
  private contextSlot;
70
+ private drawerWidgetSlot;
71
+ private drawerComponentsFiltersSlot;
68
72
  constructor(
69
73
  /**
70
74
  * route slot.
@@ -97,7 +101,7 @@ export declare class ScopeUI {
97
101
  /**
98
102
  * add a new context to ui
99
103
  */
100
- contextSlot: ContextSlot);
104
+ contextSlot: ContextSlot, drawerWidgetSlot: DrawerWidgetSlot, drawerComponentsFiltersSlot: ComponentFiltersSlot);
101
105
  private setSidebarToggle;
102
106
  /**
103
107
  * register a new badge into the scope overview.
@@ -151,6 +155,11 @@ export declare class ScopeUI {
151
155
  */
152
156
  registerSidebarLink: (...links: SidebarItem[]) => void;
153
157
  registerDrawers: (...drawer: DrawerType[]) => this;
158
+ /**
159
+ * register component filters
160
+ */
161
+ registerDrawerComponentFilters: (filters: ComponentFilters) => void;
162
+ registerDrawerWidgets: (widgets: ReactNode[]) => void;
154
163
  uiRoot(): UIRoot;
155
164
  /** registers available components */
156
165
  setComponents: (components: ComponentModel[]) => void;
@@ -159,14 +168,14 @@ export declare class ScopeUI {
159
168
  static runtime: import("@teambit/harmony").RuntimeDefinition;
160
169
  static slots: (((registerFn: () => string) => SlotRegistry<ComponentTreeNode>) | ((registerFn: () => string) => SlotRegistry<RouteProps<string, {
161
170
  [x: string]: string | undefined;
162
- }>>) | ((registerFn: () => string) => SlotRegistry<MenuItemSlot>) | ((registerFn: () => string) => SlotRegistry<SidebarItemSlot>) | ((registerFn: () => string) => SlotRegistry<ScopeBadge>) | ((registerFn: () => string) => SlotRegistry<MenuWidget[]>) | ((registerFn: () => string) => SlotRegistry<CornerSlot>) | ((registerFn: () => string) => SlotRegistry<ContextSlot>))[];
171
+ }>>) | ((registerFn: () => string) => SlotRegistry<DrawerWidgetSlot>) | ((registerFn: () => string) => SlotRegistry<ScopeBadge>) | ((registerFn: () => string) => SlotRegistry<MenuWidget[]>) | ((registerFn: () => string) => SlotRegistry<CornerSlot>))[];
163
172
  static provider([ui, componentUi, sidebar, commandBarUI, reactRouterUI]: [
164
173
  UiUI,
165
174
  ComponentUI,
166
175
  SidebarUI,
167
176
  CommandBarUI,
168
177
  ReactRouterUI
169
- ], config: any, [routeSlot, menuSlot, sidebarSlot, scopeBadgeSlot, menuWidgetSlot, menuItemSlot, sidebarItemSlot, cornerSlot, overviewSlot, contextSlot,]: [
178
+ ], config: any, [routeSlot, menuSlot, sidebarSlot, scopeBadgeSlot, menuWidgetSlot, menuItemSlot, sidebarItemSlot, cornerSlot, overviewSlot, contextSlot, drawerWidgetSlot, componentFiltersSlot,]: [
170
179
  RouteSlot,
171
180
  RouteSlot,
172
181
  SidebarSlot,
@@ -176,7 +185,9 @@ export declare class ScopeUI {
176
185
  SidebarItemSlot,
177
186
  CornerSlot,
178
187
  OverviewLineSlot,
179
- ContextSlot
188
+ ContextSlot,
189
+ DrawerWidgetSlot,
190
+ ComponentFiltersSlot
180
191
  ]): Promise<ScopeUI>;
181
192
  }
182
193
  export default ScopeUI;
@@ -111,6 +111,26 @@ function _commandBar() {
111
111
  return data;
112
112
  }
113
113
 
114
+ function _componentUi() {
115
+ const data = require("@teambit/component.ui.component-drawer");
116
+
117
+ _componentUi = function () {
118
+ return data;
119
+ };
120
+
121
+ return data;
122
+ }
123
+
124
+ function _componentUi2() {
125
+ const data = require("@teambit/component.ui.component-filters");
126
+
127
+ _componentUi2 = function () {
128
+ return data;
129
+ };
130
+
131
+ return data;
132
+ }
133
+
114
134
  function _menu() {
115
135
  const data = require("./ui/menu");
116
136
 
@@ -141,10 +161,10 @@ function _scope2() {
141
161
  return data;
142
162
  }
143
163
 
144
- function _componentsDrawer() {
145
- const data = require("./ui/components-drawer");
164
+ function _scopeUi() {
165
+ const data = require("./scope.ui.drawer");
146
166
 
147
- _componentsDrawer = function () {
167
+ _scopeUi = function () {
148
168
  return data;
149
169
  };
150
170
 
@@ -188,7 +208,7 @@ class ScopeUI {
188
208
  /**
189
209
  * add a new context to ui
190
210
  */
191
- contextSlot) {
211
+ contextSlot, drawerWidgetSlot, drawerComponentsFiltersSlot) {
192
212
  this.routeSlot = routeSlot;
193
213
  this.componentUi = componentUi;
194
214
  this.menuSlot = menuSlot;
@@ -203,6 +223,8 @@ class ScopeUI {
203
223
  this.cornerSlot = cornerSlot;
204
224
  this.overviewSlot = overviewSlot;
205
225
  this.contextSlot = contextSlot;
226
+ this.drawerWidgetSlot = drawerWidgetSlot;
227
+ this.drawerComponentsFiltersSlot = drawerComponentsFiltersSlot;
206
228
  (0, _defineProperty2().default)(this, "setSidebarToggle", () => {});
207
229
  (0, _defineProperty2().default)(this, "registerMenuRoutes", routes => {
208
230
  this.menuSlot.register(routes);
@@ -222,6 +244,12 @@ class ScopeUI {
222
244
  this.sidebar.registerDrawer(...drawer);
223
245
  return this;
224
246
  });
247
+ (0, _defineProperty2().default)(this, "registerDrawerComponentFilters", filters => {
248
+ this.drawerComponentsFiltersSlot.register(filters);
249
+ });
250
+ (0, _defineProperty2().default)(this, "registerDrawerWidgets", widgets => {
251
+ this.drawerWidgetSlot.register(widgets);
252
+ });
225
253
  (0, _defineProperty2().default)(this, "setComponents", components => {
226
254
  this.componentSearcher.update(components);
227
255
  });
@@ -346,7 +374,11 @@ class ScopeUI {
346
374
 
347
375
  uiRoot() {
348
376
  this.commandBarUI.addSearcher(this.componentSearcher);
349
- this.sidebar.registerDrawer(new (_componentsDrawer().ComponentsDrawer)(this.sidebarSlot));
377
+ this.sidebar.registerDrawer((0, _scopeUi().scopeDrawer)({
378
+ treeWidgets: this.sidebarSlot,
379
+ filtersSlot: this.drawerComponentsFiltersSlot,
380
+ drawerWidgetSlot: this.drawerWidgetSlot
381
+ }));
350
382
  const [setKeyBindHandler] = this.commandBarUI.addCommand({
351
383
  id: 'sidebar.toggle',
352
384
  // TODO - extract to a component!
@@ -377,9 +409,15 @@ class ScopeUI {
377
409
  /** registers available components */
378
410
 
379
411
 
380
- static async provider([ui, componentUi, sidebar, commandBarUI, reactRouterUI], config, [routeSlot, menuSlot, sidebarSlot, scopeBadgeSlot, menuWidgetSlot, menuItemSlot, sidebarItemSlot, cornerSlot, overviewSlot, contextSlot]) {
412
+ static async provider([ui, componentUi, sidebar, commandBarUI, reactRouterUI], config, [routeSlot, menuSlot, sidebarSlot, scopeBadgeSlot, menuWidgetSlot, menuItemSlot, sidebarItemSlot, cornerSlot, overviewSlot, contextSlot, drawerWidgetSlot, componentFiltersSlot]) {
381
413
  const componentSearcher = new (_commandBar().ComponentSearcher)(reactRouterUI.navigateTo);
382
- const scopeUi = new ScopeUI(routeSlot, componentUi, menuSlot, sidebar, sidebarSlot, commandBarUI, componentSearcher, scopeBadgeSlot, menuWidgetSlot, sidebarItemSlot, menuItemSlot, cornerSlot, overviewSlot, contextSlot);
414
+ const scopeUi = new ScopeUI(routeSlot, componentUi, menuSlot, sidebar, sidebarSlot, commandBarUI, componentSearcher, scopeBadgeSlot, menuWidgetSlot, sidebarItemSlot, menuItemSlot, cornerSlot, overviewSlot, contextSlot, drawerWidgetSlot, componentFiltersSlot);
415
+ scopeUi.registerDrawerComponentFilters([_componentUi2().DeprecateFilter, _componentUi2().EnvsFilter]);
416
+ scopeUi.registerDrawerWidgets([/*#__PURE__*/_react().default.createElement(_componentUi().FilterWidget, {
417
+ key: 'workspace-filter-widget'
418
+ }), /*#__PURE__*/_react().default.createElement(_componentUi().TreeToggleWidget, {
419
+ key: 'workspace-tree-toggle-widget'
420
+ })]);
383
421
  ui.registerRoot(scopeUi.uiRoot.bind(scopeUi));
384
422
  scopeUi.registerMenuItem(scopeUi.menuItems);
385
423
  scopeUi.registerMenuWidget(() => /*#__PURE__*/_react().default.createElement(_menu().ScopeUseBox, null));
@@ -397,7 +435,7 @@ class ScopeUI {
397
435
  exports.ScopeUI = ScopeUI;
398
436
  (0, _defineProperty2().default)(ScopeUI, "dependencies", [_ui().UIAspect, _component().ComponentAspect, _sidebar().SidebarAspect, _commandBar().default, _reactRouter().default]);
399
437
  (0, _defineProperty2().default)(ScopeUI, "runtime", _ui().UIRuntime);
400
- (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()]);
438
+ (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(), _harmony().Slot.withType(), _harmony().Slot.withType()]);
401
439
  var _default = ScopeUI;
402
440
  exports.default = _default;
403
441
 
@@ -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","contextSlot","routes","register","menuItems","componentTreeNodes","map","componentTreeNode","links","drawer","registerDrawer","components","update","category","title","keyChar","handler","run","registerBadge","badges","registerOverviewLine","lines","registerRoutes","registerExplicitRoutes","registerMenuRoutes","path","routePath","children","getMenu","ScopeAspect","id","exact","getComponentUI","registerMenuWidget","registerCorner","corner","replaceOverview","replaceDescription","replaceMetadataSection","registerMetadataItem","replaceComponentGrid","registerMetadata","addContext","context","getContext","contexts","values","uiRoot","addSearcher","ComponentsDrawer","setKeyBindHandler","addCommand","displayName","keybinding","setSidebarToggle","provider","ui","reactRouterUI","config","ComponentSearcher","navigateTo","scopeUi","registerRoot","bind","registerMenuItem","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 { DrawerType } from '@teambit/ui-foundation.ui.tree.drawer';\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 registerRoutes(routes: RouteProps[]) {\n this.routeSlot.register(routes);\n return this;\n }\n\n registerMenuRoutes = (routes: RouteProps[]) => {\n this.menuSlot.register(routes);\n return this;\n };\n\n private registerExplicitRoutes() {\n this.registerMenuRoutes([\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 this.registerRoutes([\n {\n path: this.componentUi.routePath,\n children: this.componentUi.getComponentUI(ScopeAspect.id),\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 registerDrawers = (...drawer: DrawerType[]) => {\n this.sidebar.registerDrawer(...drawer);\n return this;\n };\n\n uiRoot(): UIRoot {\n this.commandBarUI.addSearcher(this.componentSearcher);\n this.sidebar.registerDrawer(new ComponentsDrawer(this.sidebarSlot));\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 ui.registerRoot(scopeUi.uiRoot.bind(scopeUi));\n scopeUi.registerMenuItem(scopeUi.menuItems);\n scopeUi.registerMenuWidget(() => <ScopeUseBox />);\n scopeUi.registerSidebarLink(() => (\n <MenuLinkItem exact href=\"/\" icon=\"comps\">\n Gallery\n </MenuLinkItem>\n ));\n scopeUi.registerExplicitRoutes();\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","drawerWidgetSlot","drawerComponentsFiltersSlot","routes","register","menuItems","componentTreeNodes","map","componentTreeNode","links","drawer","registerDrawer","filters","widgets","components","update","category","title","keyChar","handler","run","registerBadge","badges","registerOverviewLine","lines","registerRoutes","registerExplicitRoutes","registerMenuRoutes","path","routePath","children","getMenu","ScopeAspect","id","exact","getComponentUI","registerMenuWidget","registerCorner","corner","replaceOverview","replaceDescription","replaceMetadataSection","registerMetadataItem","replaceComponentGrid","registerMetadata","addContext","context","getContext","contexts","values","uiRoot","addSearcher","treeWidgets","filtersSlot","setKeyBindHandler","addCommand","displayName","keybinding","setSidebarToggle","provider","ui","reactRouterUI","config","componentFiltersSlot","ComponentSearcher","navigateTo","scopeUi","registerDrawerComponentFilters","DeprecateFilter","EnvsFilter","registerDrawerWidgets","registerRoot","bind","registerMenuItem","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 { DrawerType } from '@teambit/ui-foundation.ui.tree.drawer';\nimport {\n DrawerWidgetSlot,\n FilterWidget,\n TreeToggleWidget,\n ComponentFiltersSlot,\n} from '@teambit/component.ui.component-drawer';\nimport { ComponentFilters, DeprecateFilter, EnvsFilter } from '@teambit/component.ui.component-filters';\n\nimport { ScopeMenu, ScopeUseBox } from './ui/menu';\nimport { ScopeAspect } from './scope.aspect';\nimport { Scope } from './ui/scope';\nimport { scopeDrawer } from './scope.ui.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 private drawerWidgetSlot: DrawerWidgetSlot,\n private drawerComponentsFiltersSlot: ComponentFiltersSlot\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 registerRoutes(routes: RouteProps[]) {\n this.routeSlot.register(routes);\n return this;\n }\n\n registerMenuRoutes = (routes: RouteProps[]) => {\n this.menuSlot.register(routes);\n return this;\n };\n\n private registerExplicitRoutes() {\n this.registerMenuRoutes([\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 this.registerRoutes([\n {\n path: this.componentUi.routePath,\n children: this.componentUi.getComponentUI(ScopeAspect.id),\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 registerDrawers = (...drawer: DrawerType[]) => {\n this.sidebar.registerDrawer(...drawer);\n return this;\n };\n\n /**\n * register component filters\n */\n registerDrawerComponentFilters = (filters: ComponentFilters) => {\n this.drawerComponentsFiltersSlot.register(filters);\n };\n\n registerDrawerWidgets = (widgets: ReactNode[]) => {\n this.drawerWidgetSlot.register(widgets);\n };\n\n uiRoot(): UIRoot {\n this.commandBarUI.addSearcher(this.componentSearcher);\n this.sidebar.registerDrawer(\n scopeDrawer({\n treeWidgets: this.sidebarSlot,\n filtersSlot: this.drawerComponentsFiltersSlot,\n drawerWidgetSlot: this.drawerWidgetSlot,\n })\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 Slot.withType<DrawerWidgetSlot>(),\n Slot.withType<ComponentFiltersSlot>(),\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 drawerWidgetSlot,\n componentFiltersSlot,\n ]: [\n RouteSlot,\n RouteSlot,\n SidebarSlot,\n ScopeBadgeSlot,\n MenuWidgetSlot,\n MenuItemSlot,\n SidebarItemSlot,\n CornerSlot,\n OverviewLineSlot,\n ContextSlot,\n DrawerWidgetSlot,\n ComponentFiltersSlot\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 drawerWidgetSlot,\n componentFiltersSlot\n );\n scopeUi.registerDrawerComponentFilters([DeprecateFilter, EnvsFilter]);\n scopeUi.registerDrawerWidgets([\n <FilterWidget key={'workspace-filter-widget'} />,\n <TreeToggleWidget key={'workspace-tree-toggle-widget'} />,\n ]);\n ui.registerRoot(scopeUi.uiRoot.bind(scopeUi));\n scopeUi.registerMenuItem(scopeUi.menuItems);\n scopeUi.registerMenuWidget(() => <ScopeUseBox />);\n scopeUi.registerSidebarLink(() => (\n <MenuLinkItem exact href=\"/\" icon=\"comps\">\n Gallery\n </MenuLinkItem>\n ));\n scopeUi.registerExplicitRoutes();\n\n return scopeUi;\n }\n}\n\nexport default ScopeUI;\n\nScopeAspect.addRuntime(ScopeUI);\n"]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/scope",
3
- "version": "0.0.683",
3
+ "version": "0.0.686",
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.683"
9
+ "version": "0.0.686"
10
10
  },
11
11
  "dependencies": {
12
12
  "semver": "7.3.4",
@@ -24,51 +24,50 @@
24
24
  "@teambit/base-ui.surfaces.split-pane.hover-splitter": "1.0.0",
25
25
  "@teambit/base-ui.surfaces.split-pane.split-pane": "1.0.0",
26
26
  "@teambit/base-ui.utils.composer": "1.0.0",
27
- "@teambit/base-ui.graph.tree.recursive-tree": "1.0.0",
28
- "@teambit/design.ui.input.toggle": "1.0.12",
29
- "@teambit/scope.models.scope-model": "0.0.111",
30
- "@teambit/scope.ui.hooks.scope-context": "0.0.111",
31
- "@teambit/component": "0.0.683",
32
- "@teambit/logger": "0.0.549",
33
- "@teambit/aspect-loader": "0.0.683",
34
- "@teambit/builder": "0.0.683",
35
- "@teambit/cli": "0.0.457",
36
- "@teambit/compiler": "0.0.683",
37
- "@teambit/config": "0.0.470",
38
- "@teambit/envs": "0.0.683",
39
- "@teambit/express": "0.0.553",
40
- "@teambit/graphql": "0.0.683",
27
+ "@teambit/scope.models.scope-model": "0.0.114",
28
+ "@teambit/scope.ui.hooks.scope-context": "0.0.114",
29
+ "@teambit/component": "0.0.686",
30
+ "@teambit/logger": "0.0.552",
31
+ "@teambit/aspect-loader": "0.0.686",
32
+ "@teambit/builder": "0.0.686",
33
+ "@teambit/cli": "0.0.460",
34
+ "@teambit/compiler": "0.0.686",
35
+ "@teambit/config": "0.0.473",
36
+ "@teambit/envs": "0.0.686",
37
+ "@teambit/express": "0.0.556",
38
+ "@teambit/graphql": "0.0.686",
41
39
  "@teambit/harmony.modules.requireable-component": "0.0.484",
42
- "@teambit/isolator": "0.0.683",
40
+ "@teambit/isolator": "0.0.686",
43
41
  "@teambit/legacy-bit-id": "0.0.399",
44
- "@teambit/ui": "0.0.683",
42
+ "@teambit/ui": "0.0.686",
45
43
  "@teambit/workspace.modules.match-pattern": "0.0.489",
46
- "@teambit/command-bar": "0.0.683",
47
- "@teambit/component-tree": "0.0.471",
44
+ "@teambit/component.ui.component-drawer": "0.0.1",
45
+ "@teambit/design.ui.tree": "0.0.5",
46
+ "@teambit/ui-foundation.ui.side-bar": "0.0.520",
47
+ "@teambit/command-bar": "0.0.686",
48
+ "@teambit/component-tree": "0.0.474",
49
+ "@teambit/component.ui.component-filters": "0.0.1",
48
50
  "@teambit/design.ui.surfaces.menu.link-item": "0.0.379",
49
- "@teambit/react-router": "0.0.683",
50
- "@teambit/sidebar": "0.0.683",
51
+ "@teambit/react-router": "0.0.686",
52
+ "@teambit/sidebar": "0.0.686",
51
53
  "@teambit/ui-foundation.ui.main-dropdown": "0.0.486",
52
54
  "@teambit/ui-foundation.ui.menu": "0.0.486",
53
55
  "@teambit/ui-foundation.ui.react-router.slot-router": "0.0.488",
54
- "@teambit/ui-foundation.ui.tree.drawer": "0.0.496",
56
+ "@teambit/ui-foundation.ui.tree.drawer": "0.0.497",
55
57
  "@teambit/bit-error": "0.0.394",
56
58
  "@teambit/ui-foundation.ui.constants.z-indexes": "0.0.487",
57
- "@teambit/scope.ui.hooks.use-scope": "0.0.114",
58
- "@teambit/ui-foundation.ui.buttons.collapser": "0.0.193",
59
+ "@teambit/scope.ui.hooks.use-scope": "0.0.117",
60
+ "@teambit/ui-foundation.ui.buttons.collapser": "0.0.194",
59
61
  "@teambit/ui-foundation.ui.corner": "0.0.494",
60
62
  "@teambit/ui-foundation.ui.full-loader": "0.0.486",
61
63
  "@teambit/ui-foundation.ui.hooks.use-is-mobile": "0.0.179",
62
64
  "@teambit/ui-foundation.ui.top-bar": "0.0.489",
63
- "@teambit/design.ui.styles.ellipsis": "0.0.347",
64
- "@teambit/design.ui.styles.muted-italic": "0.0.35",
65
- "@teambit/ui-foundation.ui.side-bar": "0.0.517",
66
- "@teambit/ui-foundation.ui.use-box.dropdown": "0.0.113",
67
- "@teambit/ui-foundation.ui.use-box.scope-menu": "0.0.113",
65
+ "@teambit/ui-foundation.ui.use-box.dropdown": "0.0.114",
66
+ "@teambit/ui-foundation.ui.use-box.scope-menu": "0.0.114",
68
67
  "@teambit/explorer.ui.gallery.component-card": "0.0.494",
69
68
  "@teambit/explorer.ui.gallery.component-grid": "0.0.486",
70
69
  "@teambit/preview.ui.preview-placeholder": "0.0.487",
71
- "@teambit/scope.ui.empty-scope": "0.0.491",
70
+ "@teambit/scope.ui.empty-scope": "0.0.492",
72
71
  "@teambit/scope.ui.scope-details": "0.0.496"
73
72
  },
74
73
  "devDependencies": {
@@ -87,7 +86,7 @@
87
86
  "@teambit/scope.content.scope-overview": "1.95.0"
88
87
  },
89
88
  "peerDependencies": {
90
- "@teambit/legacy": "1.0.236",
89
+ "@teambit/legacy": "1.0.239",
91
90
  "react-dom": "^16.8.0 || ^17.0.0",
92
91
  "react": "^16.8.0 || ^17.0.0"
93
92
  },
@@ -115,7 +114,7 @@
115
114
  "react": "-"
116
115
  },
117
116
  "peerDependencies": {
118
- "@teambit/legacy": "1.0.236",
117
+ "@teambit/legacy": "1.0.239",
119
118
  "react-dom": "^16.8.0 || ^17.0.0",
120
119
  "react": "^16.8.0 || ^17.0.0"
121
120
  }
@@ -1,2 +1,2 @@
1
- export const compositions = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.scope_scope@0.0.683/dist/scope.composition.js')]
2
- export const overview = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.scope_scope@0.0.683/dist/scope.docs.mdx')]
1
+ export const compositions = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.scope_scope@0.0.686/dist/scope.composition.js')]
2
+ export const overview = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.scope_scope@0.0.686/dist/scope.docs.mdx')]
@@ -0,0 +1,56 @@
1
+ import React, { useContext } from 'react';
2
+ import { ComponentsDrawer, ComponentFiltersSlot, DrawerWidgetSlot } from '@teambit/component.ui.component-drawer';
3
+ import { ScopeContext } from '@teambit/scope.ui.hooks.scope-context';
4
+ import { ComponentView, NamespaceTreeNode, PayloadType, ScopePayload } from '@teambit/ui-foundation.ui.side-bar';
5
+ import { TreeNodeProps } from '@teambit/design.ui.tree';
6
+ import { SidebarSlot } from './scope.ui.runtime';
7
+
8
+ export type ScopeDrawerProps = {
9
+ treeWidgets: SidebarSlot;
10
+ filtersSlot: ComponentFiltersSlot;
11
+ drawerWidgetSlot: DrawerWidgetSlot;
12
+ };
13
+
14
+ export const scopeDrawer = ({ treeWidgets, filtersSlot, drawerWidgetSlot }: ScopeDrawerProps) => {
15
+ const customScopeTreeNodeRenderer = (treeNodeSlot) =>
16
+ function TreeNode(props: TreeNodeProps<PayloadType>) {
17
+ const children = props.node.children;
18
+
19
+ if (!children) return <ComponentView {...props} treeNodeSlot={treeNodeSlot} />;
20
+
21
+ // skip over scope node and render only children
22
+ if (props.node.payload instanceof ScopePayload) {
23
+ return (
24
+ <>
25
+ {children.map((childNode) => (
26
+ <TreeNode key={childNode.id} {...props} node={childNode}></TreeNode>
27
+ ))}
28
+ </>
29
+ );
30
+ }
31
+
32
+ return <NamespaceTreeNode {...props} />;
33
+ };
34
+
35
+ return new ComponentsDrawer({
36
+ order: 0,
37
+ id: 'scope-components-drawer',
38
+ name: 'COMPONENTS',
39
+ plugins: {
40
+ tree: {
41
+ widgets: treeWidgets,
42
+ customRenderer: customScopeTreeNodeRenderer,
43
+ },
44
+ filters: filtersSlot,
45
+ drawerWidgets: drawerWidgetSlot,
46
+ },
47
+ emptyMessage: 'Scope is empty',
48
+ useComponents: () => {
49
+ const scope = useContext(ScopeContext);
50
+ return {
51
+ loading: !scope,
52
+ components: scope.components || [],
53
+ };
54
+ },
55
+ });
56
+ };
@@ -15,10 +15,18 @@ import { MenuLinkItem } from '@teambit/design.ui.surfaces.menu.link-item';
15
15
  import CommandBarAspect, { CommandBarUI, ComponentSearcher, CommandHandler } from '@teambit/command-bar';
16
16
  import { ScopeModel } from '@teambit/scope.models.scope-model';
17
17
  import { DrawerType } from '@teambit/ui-foundation.ui.tree.drawer';
18
+ import {
19
+ DrawerWidgetSlot,
20
+ FilterWidget,
21
+ TreeToggleWidget,
22
+ ComponentFiltersSlot,
23
+ } from '@teambit/component.ui.component-drawer';
24
+ import { ComponentFilters, DeprecateFilter, EnvsFilter } from '@teambit/component.ui.component-filters';
25
+
18
26
  import { ScopeMenu, ScopeUseBox } from './ui/menu';
19
27
  import { ScopeAspect } from './scope.aspect';
20
28
  import { Scope } from './ui/scope';
21
- import { ComponentsDrawer } from './ui/components-drawer';
29
+ import { scopeDrawer } from './scope.ui.drawer';
22
30
 
23
31
  export type ScopeBadge = ComponentType;
24
32
 
@@ -93,7 +101,9 @@ export class ScopeUI {
93
101
  /**
94
102
  * add a new context to ui
95
103
  */
96
- private contextSlot: ContextSlot
104
+ private contextSlot: ContextSlot,
105
+ private drawerWidgetSlot: DrawerWidgetSlot,
106
+ private drawerComponentsFiltersSlot: ComponentFiltersSlot
97
107
  ) {}
98
108
 
99
109
  private setSidebarToggle: (updated: CommandHandler) => void = () => {};
@@ -219,9 +229,26 @@ export class ScopeUI {
219
229
  return this;
220
230
  };
221
231
 
232
+ /**
233
+ * register component filters
234
+ */
235
+ registerDrawerComponentFilters = (filters: ComponentFilters) => {
236
+ this.drawerComponentsFiltersSlot.register(filters);
237
+ };
238
+
239
+ registerDrawerWidgets = (widgets: ReactNode[]) => {
240
+ this.drawerWidgetSlot.register(widgets);
241
+ };
242
+
222
243
  uiRoot(): UIRoot {
223
244
  this.commandBarUI.addSearcher(this.componentSearcher);
224
- this.sidebar.registerDrawer(new ComponentsDrawer(this.sidebarSlot));
245
+ this.sidebar.registerDrawer(
246
+ scopeDrawer({
247
+ treeWidgets: this.sidebarSlot,
248
+ filtersSlot: this.drawerComponentsFiltersSlot,
249
+ drawerWidgetSlot: this.drawerWidgetSlot,
250
+ })
251
+ );
225
252
  const [setKeyBindHandler] = this.commandBarUI.addCommand({
226
253
  id: 'sidebar.toggle', // TODO - extract to a component!
227
254
  handler: () => {},
@@ -286,6 +313,8 @@ export class ScopeUI {
286
313
  Slot.withType<OverviewLineSlot>(),
287
314
  Slot.withType<SidebarItemSlot>(),
288
315
  Slot.withType<ContextSlot>(),
316
+ Slot.withType<DrawerWidgetSlot>(),
317
+ Slot.withType<ComponentFiltersSlot>(),
289
318
  ];
290
319
 
291
320
  static async provider(
@@ -308,6 +337,8 @@ export class ScopeUI {
308
337
  cornerSlot,
309
338
  overviewSlot,
310
339
  contextSlot,
340
+ drawerWidgetSlot,
341
+ componentFiltersSlot,
311
342
  ]: [
312
343
  RouteSlot,
313
344
  RouteSlot,
@@ -318,7 +349,9 @@ export class ScopeUI {
318
349
  SidebarItemSlot,
319
350
  CornerSlot,
320
351
  OverviewLineSlot,
321
- ContextSlot
352
+ ContextSlot,
353
+ DrawerWidgetSlot,
354
+ ComponentFiltersSlot
322
355
  ]
323
356
  ) {
324
357
  const componentSearcher = new ComponentSearcher(reactRouterUI.navigateTo);
@@ -336,8 +369,15 @@ export class ScopeUI {
336
369
  menuItemSlot,
337
370
  cornerSlot,
338
371
  overviewSlot,
339
- contextSlot
372
+ contextSlot,
373
+ drawerWidgetSlot,
374
+ componentFiltersSlot
340
375
  );
376
+ scopeUi.registerDrawerComponentFilters([DeprecateFilter, EnvsFilter]);
377
+ scopeUi.registerDrawerWidgets([
378
+ <FilterWidget key={'workspace-filter-widget'} />,
379
+ <TreeToggleWidget key={'workspace-tree-toggle-widget'} />,
380
+ ]);
341
381
  ui.registerRoot(scopeUi.uiRoot.bind(scopeUi));
342
382
  scopeUi.registerMenuItem(scopeUi.menuItems);
343
383
  scopeUi.registerMenuWidget(() => <ScopeUseBox />);
@@ -1,51 +0,0 @@
1
- .emptyScope {
2
- padding: 8px 8px 0 28px;
3
- display: block;
4
- }
5
-
6
- .widgetIcon {
7
- padding: 4px;
8
- border-radius: 8px;
9
- align-items: center;
10
- display: flex;
11
- &:hover,
12
- &.open {
13
- background-color: var(--bit-border-color-lightest, #ededed);
14
- }
15
- img {
16
- width: 16px;
17
- }
18
- &:active img,
19
- &.open img {
20
- filter: invert(38%) sepia(33%) saturate(7140%) hue-rotate(234deg) brightness(96%) contrast(87%);
21
- }
22
- }
23
-
24
- .filterWidgetIcon {
25
- margin-right: 8px;
26
- }
27
-
28
- .deprecateFilter {
29
- display: flex;
30
- flex-direction: row;
31
- font-size: 14px;
32
- justify-content: space-between;
33
- padding: 8px;
34
- margin: 4px 8px;
35
-
36
- > div {
37
- line-height: 16px;
38
- display: flex;
39
- }
40
-
41
- .filterIcon {
42
- img {
43
- width: 16px;
44
- }
45
-
46
- .filterIconLabel {
47
- margin: 0px 8px;
48
- font-size: 14px;
49
- }
50
- }
51
- }
@@ -1,15 +0,0 @@
1
- /// <reference types="react" />
2
- import { ComponentTreeSlot } from '@teambit/component-tree';
3
- import type { DrawerType } from '@teambit/ui-foundation.ui.tree.drawer';
4
- export declare class ComponentsDrawer implements DrawerType {
5
- private treeNodeSlot;
6
- constructor(treeNodeSlot: ComponentTreeSlot);
7
- id: string;
8
- name: string;
9
- widgets: JSX.Element[];
10
- Filters: JSX.Element[];
11
- Context: ({ children }: {
12
- children: any;
13
- }) => JSX.Element;
14
- render: () => JSX.Element;
15
- }
@@ -1,275 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("core-js/modules/es.array.iterator.js");
6
-
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- exports.ComponentsDrawer = void 0;
11
-
12
- function _extends2() {
13
- const data = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
14
-
15
- _extends2 = function () {
16
- return data;
17
- };
18
-
19
- return data;
20
- }
21
-
22
- function _defineProperty2() {
23
- const data = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
24
-
25
- _defineProperty2 = function () {
26
- return data;
27
- };
28
-
29
- return data;
30
- }
31
-
32
- function _react() {
33
- const data = _interopRequireWildcard(require("react"));
34
-
35
- _react = function () {
36
- return data;
37
- };
38
-
39
- return data;
40
- }
41
-
42
- function _classnames() {
43
- const data = _interopRequireDefault(require("classnames"));
44
-
45
- _classnames = function () {
46
- return data;
47
- };
48
-
49
- return data;
50
- }
51
-
52
- function _uiFoundationUi() {
53
- const data = require("@teambit/ui-foundation.ui.side-bar");
54
-
55
- _uiFoundationUi = function () {
56
- return data;
57
- };
58
-
59
- return data;
60
- }
61
-
62
- function _uiFoundationUi2() {
63
- const data = require("@teambit/ui-foundation.ui.full-loader");
64
-
65
- _uiFoundationUi2 = function () {
66
- return data;
67
- };
68
-
69
- return data;
70
- }
71
-
72
- function _designUiStyles() {
73
- const data = require("@teambit/design.ui.styles.muted-italic");
74
-
75
- _designUiStyles = function () {
76
- return data;
77
- };
78
-
79
- return data;
80
- }
81
-
82
- function _designUiStyles2() {
83
- const data = require("@teambit/design.ui.styles.ellipsis");
84
-
85
- _designUiStyles2 = function () {
86
- return data;
87
- };
88
-
89
- return data;
90
- }
91
-
92
- function _designUiInput() {
93
- const data = require("@teambit/design.ui.input.toggle");
94
-
95
- _designUiInput = function () {
96
- return data;
97
- };
98
-
99
- return data;
100
- }
101
-
102
- function _scopeUiHooks() {
103
- const data = require("@teambit/scope.ui.hooks.use-scope");
104
-
105
- _scopeUiHooks = function () {
106
- return data;
107
- };
108
-
109
- return data;
110
- }
111
-
112
- function _componentsDrawerModule() {
113
- const data = _interopRequireDefault(require("./components-drawer.module.scss"));
114
-
115
- _componentsDrawerModule = function () {
116
- return data;
117
- };
118
-
119
- return data;
120
- }
121
-
122
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
123
-
124
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
125
-
126
- const ScopeTreeContext = /*#__PURE__*/(0, _react().createContext)({
127
- collapsed: true,
128
- setCollapsed: () => {},
129
- activeFilters: [],
130
- setActiveFilter: () => {},
131
- filterOpen: false,
132
- setFilterOpen: () => {}
133
- });
134
-
135
- class ComponentsDrawer {
136
- constructor(treeNodeSlot) {
137
- this.treeNodeSlot = treeNodeSlot;
138
- (0, _defineProperty2().default)(this, "id", 'components-drawer');
139
- (0, _defineProperty2().default)(this, "name", 'COMPONENTS');
140
- (0, _defineProperty2().default)(this, "widgets", [/*#__PURE__*/_react().default.createElement(FilterWidget, {
141
- key: 'filter-widget'
142
- }), /*#__PURE__*/_react().default.createElement(TreeToggleWidget, {
143
- key: 'tree-toggle-widget'
144
- })]);
145
- (0, _defineProperty2().default)(this, "Filters", [/*#__PURE__*/_react().default.createElement(DeprecateFilter, {
146
- key: 'deprecate-filter'
147
- })]);
148
- (0, _defineProperty2().default)(this, "Context", ({
149
- children
150
- }) => {
151
- const [collapsed, setCollapsed] = (0, _react().useState)(true);
152
- const [activeFilters, setActiveFilters] = (0, _react().useState)([]);
153
- const [filterOpen, setFilterOpen] = (0, _react().useState)(false);
154
-
155
- const handleActiveFilterToggle = filterId => {
156
- const isFilterActive = activeFilters.includes(filterId);
157
-
158
- if (isFilterActive) {
159
- setActiveFilters(list => list.filter(id => id !== filterId));
160
- return;
161
- }
162
-
163
- setActiveFilters(list => list.concat(filterId));
164
- };
165
-
166
- return /*#__PURE__*/_react().default.createElement(ScopeTreeContext.Provider, {
167
- value: {
168
- collapsed,
169
- setCollapsed,
170
- activeFilters,
171
- setActiveFilter: handleActiveFilterToggle,
172
- filterOpen,
173
- setFilterOpen
174
- }
175
- }, children);
176
- });
177
- (0, _defineProperty2().default)(this, "render", () => {
178
- const {
179
- scope
180
- } = (0, _scopeUiHooks().useScopeQuery)();
181
- const {
182
- collapsed,
183
- activeFilters
184
- } = (0, _react().useContext)(ScopeTreeContext);
185
- const {
186
- treeNodeSlot
187
- } = this;
188
- const showDeprecatedComponents = activeFilters.find(activeFilter => activeFilter === 'deprecate');
189
- const TreeNodeRenderer = (0, _react().useCallback)(function TreeNode(props) {
190
- const children = props.node.children;
191
- if (!children) return /*#__PURE__*/_react().default.createElement(_uiFoundationUi().ComponentView, (0, _extends2().default)({}, props, {
192
- treeNodeSlot: treeNodeSlot
193
- })); // skip over scope node and render only children
194
-
195
- if (props.node.payload instanceof _uiFoundationUi().ScopePayload) {
196
- return /*#__PURE__*/_react().default.createElement(_react().default.Fragment, null, children.map(childNode => /*#__PURE__*/_react().default.createElement(TreeNodeRenderer, (0, _extends2().default)({
197
- key: childNode.id
198
- }, props, {
199
- node: childNode
200
- }))));
201
- }
202
-
203
- return /*#__PURE__*/_react().default.createElement(_uiFoundationUi().NamespaceTreeNode, props);
204
- }, [treeNodeSlot]);
205
- if (!scope) return /*#__PURE__*/_react().default.createElement(_uiFoundationUi2().FullLoader, null);
206
- const components = showDeprecatedComponents ? scope.components : scope.components.filter(component => {
207
- var _component$deprecatio;
208
-
209
- return !((_component$deprecatio = component.deprecation) !== null && _component$deprecatio !== void 0 && _component$deprecatio.isDeprecate);
210
- });
211
- if (components.length === 0) return /*#__PURE__*/_react().default.createElement("span", {
212
- className: (0, _classnames().default)(_designUiStyles().mutedItalic, _designUiStyles2().ellipsis, _componentsDrawerModule().default.emptyScope)
213
- }, "Scope is empty");
214
- return /*#__PURE__*/_react().default.createElement(_uiFoundationUi().ComponentTree, {
215
- components: components,
216
- isCollapsed: collapsed,
217
- TreeNode: TreeNodeRenderer
218
- });
219
- });
220
- }
221
-
222
- }
223
-
224
- exports.ComponentsDrawer = ComponentsDrawer;
225
-
226
- function TreeToggleWidget() {
227
- const {
228
- collapsed,
229
- setCollapsed
230
- } = (0, _react().useContext)(ScopeTreeContext);
231
- const icon = collapsed ? 'https://static.bit.dev/bit-icons/expand.svg' : 'https://static.bit.dev/bit-icons/collapse.svg';
232
- return /*#__PURE__*/_react().default.createElement("div", {
233
- className: _componentsDrawerModule().default.widgetIcon
234
- }, /*#__PURE__*/_react().default.createElement("img", {
235
- src: icon,
236
- onClick: () => setCollapsed(!collapsed)
237
- }));
238
- }
239
-
240
- function FilterWidget() {
241
- const {
242
- filterOpen,
243
- setFilterOpen
244
- } = (0, _react().useContext)(ScopeTreeContext);
245
- return /*#__PURE__*/_react().default.createElement("div", {
246
- className: (0, _classnames().default)(_componentsDrawerModule().default.widgetIcon, _componentsDrawerModule().default.filterWidgetIcon, filterOpen && _componentsDrawerModule().default.open)
247
- }, /*#__PURE__*/_react().default.createElement("img", {
248
- src: "https://static.bit.dev/bit-icons/filter.svg",
249
- onClick: () => setFilterOpen(!filterOpen)
250
- }));
251
- }
252
-
253
- function DeprecateFilter() {
254
- const {
255
- activeFilters,
256
- setActiveFilter,
257
- filterOpen
258
- } = (0, _react().useContext)(ScopeTreeContext);
259
- const isActive = activeFilters.includes('deprecate');
260
- if (!filterOpen) return null;
261
- return /*#__PURE__*/_react().default.createElement("div", {
262
- className: (0, _classnames().default)(_componentsDrawerModule().default.deprecateFilter, isActive && _componentsDrawerModule().default.active)
263
- }, /*#__PURE__*/_react().default.createElement("div", {
264
- className: _componentsDrawerModule().default.filterIcon
265
- }, /*#__PURE__*/_react().default.createElement("img", {
266
- src: "https://static.bit.dev/bit-icons/deprecated.svg"
267
- }), /*#__PURE__*/_react().default.createElement("span", {
268
- className: _componentsDrawerModule().default.filterIconLabel
269
- }, "Deprecated")), /*#__PURE__*/_react().default.createElement("div", null, /*#__PURE__*/_react().default.createElement(_designUiInput().Toggle, {
270
- checked: isActive,
271
- onInputChanged: () => setActiveFilter('deprecate')
272
- })));
273
- }
274
-
275
- //# sourceMappingURL=components.drawer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["components.drawer.tsx"],"names":["ScopeTreeContext","collapsed","setCollapsed","activeFilters","setActiveFilter","filterOpen","setFilterOpen","ComponentsDrawer","constructor","treeNodeSlot","children","setActiveFilters","handleActiveFilterToggle","filterId","isFilterActive","includes","list","filter","id","concat","scope","showDeprecatedComponents","find","activeFilter","TreeNodeRenderer","TreeNode","props","node","payload","ScopePayload","map","childNode","components","component","deprecation","isDeprecate","length","mutedItalic","ellipsis","styles","emptyScope","TreeToggleWidget","icon","widgetIcon","FilterWidget","filterWidgetIcon","open","DeprecateFilter","isActive","deprecateFilter","active","filterIcon","filterIconLabel"],"mappings":"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","sourcesContent":["import React, { useCallback, useState, useContext, createContext } from 'react';\nimport classNames from 'classnames';\nimport {\n ComponentTree,\n ComponentView,\n NamespaceTreeNode,\n PayloadType,\n ScopePayload,\n} from '@teambit/ui-foundation.ui.side-bar';\nimport { TreeNodeProps } from '@teambit/base-ui.graph.tree.recursive-tree';\nimport { FullLoader } from '@teambit/ui-foundation.ui.full-loader';\nimport { ComponentTreeSlot } from '@teambit/component-tree';\nimport type { DrawerType } from '@teambit/ui-foundation.ui.tree.drawer';\nimport { mutedItalic } from '@teambit/design.ui.styles.muted-italic';\nimport { ellipsis } from '@teambit/design.ui.styles.ellipsis';\nimport { Toggle } from '@teambit/design.ui.input.toggle';\nimport { useScopeQuery } from '@teambit/scope.ui.hooks.use-scope';\nimport styles from './components-drawer.module.scss';\n\ntype ScopeTreeContextType = {\n collapsed: boolean;\n setCollapsed: (x: boolean) => void;\n filterOpen: boolean;\n setFilterOpen: (open: boolean) => void;\n activeFilters: string[];\n setActiveFilter: (filterId: string) => void;\n};\n\nconst ScopeTreeContext = createContext<ScopeTreeContextType>({\n collapsed: true,\n setCollapsed: () => {},\n activeFilters: [],\n setActiveFilter: () => {},\n filterOpen: false,\n setFilterOpen: () => {},\n});\n\nexport class ComponentsDrawer implements DrawerType {\n constructor(private treeNodeSlot: ComponentTreeSlot) {}\n\n id = 'components-drawer';\n\n name = 'COMPONENTS';\n\n widgets = [<FilterWidget key={'filter-widget'} />, <TreeToggleWidget key={'tree-toggle-widget'} />];\n Filters = [<DeprecateFilter key={'deprecate-filter'} />];\n\n Context = ({ children }) => {\n const [collapsed, setCollapsed] = useState(true);\n const [activeFilters, setActiveFilters] = useState<string[]>([]);\n const [filterOpen, setFilterOpen] = useState<boolean>(false);\n\n const handleActiveFilterToggle = (filterId: string) => {\n const isFilterActive = activeFilters.includes(filterId);\n if (isFilterActive) {\n setActiveFilters((list) => list.filter((id) => id !== filterId));\n return;\n }\n setActiveFilters((list) => list.concat(filterId));\n };\n return (\n <ScopeTreeContext.Provider\n value={{\n collapsed,\n setCollapsed,\n activeFilters,\n setActiveFilter: handleActiveFilterToggle,\n filterOpen,\n setFilterOpen,\n }}\n >\n {children}\n </ScopeTreeContext.Provider>\n );\n };\n\n render = () => {\n const { scope } = useScopeQuery();\n const { collapsed, activeFilters } = useContext(ScopeTreeContext);\n const { treeNodeSlot } = this;\n const showDeprecatedComponents = activeFilters.find((activeFilter) => activeFilter === 'deprecate');\n\n const TreeNodeRenderer = useCallback(\n function TreeNode(props: TreeNodeProps<PayloadType>) {\n const children = props.node.children;\n\n if (!children) return <ComponentView {...props} treeNodeSlot={treeNodeSlot} />;\n\n // skip over scope node and render only children\n if (props.node.payload instanceof ScopePayload) {\n return (\n <>\n {children.map((childNode) => (\n <TreeNodeRenderer key={childNode.id} {...props} node={childNode}></TreeNodeRenderer>\n ))}\n </>\n );\n }\n\n return <NamespaceTreeNode {...props} />;\n },\n [treeNodeSlot]\n );\n\n if (!scope) return <FullLoader />;\n\n const components = showDeprecatedComponents\n ? scope.components\n : scope.components.filter((component) => !component.deprecation?.isDeprecate);\n\n if (components.length === 0)\n return <span className={classNames(mutedItalic, ellipsis, styles.emptyScope)}>Scope is empty</span>;\n\n return <ComponentTree components={components} isCollapsed={collapsed} TreeNode={TreeNodeRenderer} />;\n };\n}\n\nfunction TreeToggleWidget() {\n const { collapsed, setCollapsed } = useContext(ScopeTreeContext);\n const icon = collapsed\n ? 'https://static.bit.dev/bit-icons/expand.svg'\n : 'https://static.bit.dev/bit-icons/collapse.svg';\n return (\n <div className={styles.widgetIcon}>\n <img src={icon} onClick={() => setCollapsed(!collapsed)} />\n </div>\n );\n}\n\nfunction FilterWidget() {\n const { filterOpen, setFilterOpen } = useContext(ScopeTreeContext);\n return (\n <div className={classNames(styles.widgetIcon, styles.filterWidgetIcon, filterOpen && styles.open)}>\n <img src=\"https://static.bit.dev/bit-icons/filter.svg\" onClick={() => setFilterOpen(!filterOpen)} />\n </div>\n );\n}\n\nfunction DeprecateFilter() {\n const { activeFilters, setActiveFilter, filterOpen } = useContext(ScopeTreeContext);\n const isActive = activeFilters.includes('deprecate');\n\n if (!filterOpen) return null;\n\n return (\n <div className={classNames(styles.deprecateFilter, isActive && styles.active)}>\n <div className={styles.filterIcon}>\n <img src=\"https://static.bit.dev/bit-icons/deprecated.svg\" />\n <span className={styles.filterIconLabel}>Deprecated</span>\n </div>\n <div>\n <Toggle checked={isActive} onInputChanged={() => setActiveFilter('deprecate')} />\n </div>\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- export { ComponentsDrawer } from './components.drawer';
@@ -1,23 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "ComponentsDrawer", {
7
- enumerable: true,
8
- get: function () {
9
- return _components().ComponentsDrawer;
10
- }
11
- });
12
-
13
- function _components() {
14
- const data = require("./components.drawer");
15
-
16
- _components = function () {
17
- return data;
18
- };
19
-
20
- return data;
21
- }
22
-
23
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA","sourcesContent":["export { ComponentsDrawer } from './components.drawer';\n"]}
@@ -1,51 +0,0 @@
1
- .emptyScope {
2
- padding: 8px 8px 0 28px;
3
- display: block;
4
- }
5
-
6
- .widgetIcon {
7
- padding: 4px;
8
- border-radius: 8px;
9
- align-items: center;
10
- display: flex;
11
- &:hover,
12
- &.open {
13
- background-color: var(--bit-border-color-lightest, #ededed);
14
- }
15
- img {
16
- width: 16px;
17
- }
18
- &:active img,
19
- &.open img {
20
- filter: invert(38%) sepia(33%) saturate(7140%) hue-rotate(234deg) brightness(96%) contrast(87%);
21
- }
22
- }
23
-
24
- .filterWidgetIcon {
25
- margin-right: 8px;
26
- }
27
-
28
- .deprecateFilter {
29
- display: flex;
30
- flex-direction: row;
31
- font-size: 14px;
32
- justify-content: space-between;
33
- padding: 8px;
34
- margin: 4px 8px;
35
-
36
- > div {
37
- line-height: 16px;
38
- display: flex;
39
- }
40
-
41
- .filterIcon {
42
- img {
43
- width: 16px;
44
- }
45
-
46
- .filterIconLabel {
47
- margin: 0px 8px;
48
- font-size: 14px;
49
- }
50
- }
51
- }
@@ -1,156 +0,0 @@
1
- import React, { useCallback, useState, useContext, createContext } from 'react';
2
- import classNames from 'classnames';
3
- import {
4
- ComponentTree,
5
- ComponentView,
6
- NamespaceTreeNode,
7
- PayloadType,
8
- ScopePayload,
9
- } from '@teambit/ui-foundation.ui.side-bar';
10
- import { TreeNodeProps } from '@teambit/base-ui.graph.tree.recursive-tree';
11
- import { FullLoader } from '@teambit/ui-foundation.ui.full-loader';
12
- import { ComponentTreeSlot } from '@teambit/component-tree';
13
- import type { DrawerType } from '@teambit/ui-foundation.ui.tree.drawer';
14
- import { mutedItalic } from '@teambit/design.ui.styles.muted-italic';
15
- import { ellipsis } from '@teambit/design.ui.styles.ellipsis';
16
- import { Toggle } from '@teambit/design.ui.input.toggle';
17
- import { useScopeQuery } from '@teambit/scope.ui.hooks.use-scope';
18
- import styles from './components-drawer.module.scss';
19
-
20
- type ScopeTreeContextType = {
21
- collapsed: boolean;
22
- setCollapsed: (x: boolean) => void;
23
- filterOpen: boolean;
24
- setFilterOpen: (open: boolean) => void;
25
- activeFilters: string[];
26
- setActiveFilter: (filterId: string) => void;
27
- };
28
-
29
- const ScopeTreeContext = createContext<ScopeTreeContextType>({
30
- collapsed: true,
31
- setCollapsed: () => {},
32
- activeFilters: [],
33
- setActiveFilter: () => {},
34
- filterOpen: false,
35
- setFilterOpen: () => {},
36
- });
37
-
38
- export class ComponentsDrawer implements DrawerType {
39
- constructor(private treeNodeSlot: ComponentTreeSlot) {}
40
-
41
- id = 'components-drawer';
42
-
43
- name = 'COMPONENTS';
44
-
45
- widgets = [<FilterWidget key={'filter-widget'} />, <TreeToggleWidget key={'tree-toggle-widget'} />];
46
- Filters = [<DeprecateFilter key={'deprecate-filter'} />];
47
-
48
- Context = ({ children }) => {
49
- const [collapsed, setCollapsed] = useState(true);
50
- const [activeFilters, setActiveFilters] = useState<string[]>([]);
51
- const [filterOpen, setFilterOpen] = useState<boolean>(false);
52
-
53
- const handleActiveFilterToggle = (filterId: string) => {
54
- const isFilterActive = activeFilters.includes(filterId);
55
- if (isFilterActive) {
56
- setActiveFilters((list) => list.filter((id) => id !== filterId));
57
- return;
58
- }
59
- setActiveFilters((list) => list.concat(filterId));
60
- };
61
- return (
62
- <ScopeTreeContext.Provider
63
- value={{
64
- collapsed,
65
- setCollapsed,
66
- activeFilters,
67
- setActiveFilter: handleActiveFilterToggle,
68
- filterOpen,
69
- setFilterOpen,
70
- }}
71
- >
72
- {children}
73
- </ScopeTreeContext.Provider>
74
- );
75
- };
76
-
77
- render = () => {
78
- const { scope } = useScopeQuery();
79
- const { collapsed, activeFilters } = useContext(ScopeTreeContext);
80
- const { treeNodeSlot } = this;
81
- const showDeprecatedComponents = activeFilters.find((activeFilter) => activeFilter === 'deprecate');
82
-
83
- const TreeNodeRenderer = useCallback(
84
- function TreeNode(props: TreeNodeProps<PayloadType>) {
85
- const children = props.node.children;
86
-
87
- if (!children) return <ComponentView {...props} treeNodeSlot={treeNodeSlot} />;
88
-
89
- // skip over scope node and render only children
90
- if (props.node.payload instanceof ScopePayload) {
91
- return (
92
- <>
93
- {children.map((childNode) => (
94
- <TreeNodeRenderer key={childNode.id} {...props} node={childNode}></TreeNodeRenderer>
95
- ))}
96
- </>
97
- );
98
- }
99
-
100
- return <NamespaceTreeNode {...props} />;
101
- },
102
- [treeNodeSlot]
103
- );
104
-
105
- if (!scope) return <FullLoader />;
106
-
107
- const components = showDeprecatedComponents
108
- ? scope.components
109
- : scope.components.filter((component) => !component.deprecation?.isDeprecate);
110
-
111
- if (components.length === 0)
112
- return <span className={classNames(mutedItalic, ellipsis, styles.emptyScope)}>Scope is empty</span>;
113
-
114
- return <ComponentTree components={components} isCollapsed={collapsed} TreeNode={TreeNodeRenderer} />;
115
- };
116
- }
117
-
118
- function TreeToggleWidget() {
119
- const { collapsed, setCollapsed } = useContext(ScopeTreeContext);
120
- const icon = collapsed
121
- ? 'https://static.bit.dev/bit-icons/expand.svg'
122
- : 'https://static.bit.dev/bit-icons/collapse.svg';
123
- return (
124
- <div className={styles.widgetIcon}>
125
- <img src={icon} onClick={() => setCollapsed(!collapsed)} />
126
- </div>
127
- );
128
- }
129
-
130
- function FilterWidget() {
131
- const { filterOpen, setFilterOpen } = useContext(ScopeTreeContext);
132
- return (
133
- <div className={classNames(styles.widgetIcon, styles.filterWidgetIcon, filterOpen && styles.open)}>
134
- <img src="https://static.bit.dev/bit-icons/filter.svg" onClick={() => setFilterOpen(!filterOpen)} />
135
- </div>
136
- );
137
- }
138
-
139
- function DeprecateFilter() {
140
- const { activeFilters, setActiveFilter, filterOpen } = useContext(ScopeTreeContext);
141
- const isActive = activeFilters.includes('deprecate');
142
-
143
- if (!filterOpen) return null;
144
-
145
- return (
146
- <div className={classNames(styles.deprecateFilter, isActive && styles.active)}>
147
- <div className={styles.filterIcon}>
148
- <img src="https://static.bit.dev/bit-icons/deprecated.svg" />
149
- <span className={styles.filterIconLabel}>Deprecated</span>
150
- </div>
151
- <div>
152
- <Toggle checked={isActive} onInputChanged={() => setActiveFilter('deprecate')} />
153
- </div>
154
- </div>
155
- );
156
- }
@@ -1 +0,0 @@
1
- export { ComponentsDrawer } from './components.drawer';