@teambit/scope 0.0.627 → 0.0.629

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 @@
1
+
@@ -2,3 +2,7 @@
2
2
  padding: 8px 8px 0 28px;
3
3
  display: block;
4
4
  }
5
+
6
+ .collapseIcon {
7
+ width: 16px;
8
+ }
@@ -5,5 +5,9 @@ export declare class ComponentsDrawer implements DrawerType {
5
5
  private treeNodeSlot;
6
6
  constructor(treeNodeSlot: ComponentTreeSlot);
7
7
  name: string;
8
+ widget: JSX.Element;
9
+ Context: ({ children }: {
10
+ children: any;
11
+ }) => JSX.Element;
8
12
  render: () => JSX.Element;
9
13
  }
@@ -2,6 +2,8 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
+ require("core-js/modules/es.array.iterator.js");
6
+
5
7
  Object.defineProperty(exports, "__esModule", {
6
8
  value: true
7
9
  });
@@ -111,14 +113,34 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
111
113
 
112
114
  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; }
113
115
 
116
+ const ScopeTreeContext = /*#__PURE__*/(0, _react().createContext)({
117
+ collapsed: true,
118
+ setCollapsed: () => {}
119
+ });
120
+
114
121
  class ComponentsDrawer {
115
122
  constructor(treeNodeSlot) {
116
123
  this.treeNodeSlot = treeNodeSlot;
117
124
  (0, _defineProperty2().default)(this, "name", 'COMPONENTS');
125
+ (0, _defineProperty2().default)(this, "widget", /*#__PURE__*/_react().default.createElement(Widget, null));
126
+ (0, _defineProperty2().default)(this, "Context", ({
127
+ children
128
+ }) => {
129
+ const [collapsed, setCollapsed] = (0, _react().useState)(true);
130
+ return /*#__PURE__*/_react().default.createElement(ScopeTreeContext.Provider, {
131
+ value: {
132
+ collapsed,
133
+ setCollapsed
134
+ }
135
+ }, children);
136
+ });
118
137
  (0, _defineProperty2().default)(this, "render", () => {
119
138
  const {
120
139
  scope
121
140
  } = (0, _scopeUiHooks().useScopeQuery)();
141
+ const {
142
+ collapsed
143
+ } = (0, _react().useContext)(ScopeTreeContext);
122
144
  const {
123
145
  treeNodeSlot
124
146
  } = this;
@@ -144,6 +166,7 @@ class ComponentsDrawer {
144
166
  }, "Scope is empty");
145
167
  return /*#__PURE__*/_react().default.createElement(_uiFoundationUi().ComponentTree, {
146
168
  components: scope.components,
169
+ isCollapsed: collapsed,
147
170
  TreeNode: TreeNodeRenderer
148
171
  });
149
172
  });
@@ -153,4 +176,17 @@ class ComponentsDrawer {
153
176
 
154
177
  exports.ComponentsDrawer = ComponentsDrawer;
155
178
 
179
+ function Widget() {
180
+ const {
181
+ collapsed,
182
+ setCollapsed
183
+ } = (0, _react().useContext)(ScopeTreeContext);
184
+ const icon = collapsed ? 'https://static.bit.dev/bit-icons/expand.svg' : 'https://static.bit.dev/bit-icons/collapse.svg';
185
+ return /*#__PURE__*/_react().default.createElement("img", {
186
+ src: icon,
187
+ className: _componentsDrawerModule().default.collapseIcon,
188
+ onClick: () => setCollapsed(!collapsed)
189
+ });
190
+ }
191
+
156
192
  //# sourceMappingURL=components.drawer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["components.drawer.tsx"],"names":["ComponentsDrawer","constructor","treeNodeSlot","scope","TreeNodeRenderer","TreeNode","props","children","node","payload","ScopePayload","map","childNode","id","components","length","mutedItalic","ellipsis","styles","emptyScope"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AASA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;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;;;;;;AAEO,MAAMA,gBAAN,CAA6C;AAClDC,EAAAA,WAAW,CAASC,YAAT,EAA0C;AAAA,SAAjCA,YAAiC,GAAjCA,YAAiC;AAAA,kDAE9C,YAF8C;AAAA,oDAI5C,MAAM;AACb,YAAM;AAAEC,QAAAA;AAAF,UAAY,oCAAlB;AACA,YAAM;AAAED,QAAAA;AAAF,UAAmB,IAAzB;AAEA,YAAME,gBAAgB,GAAG,0BACvB,SAASC,QAAT,CAAkBC,KAAlB,EAAqD;AACnD,cAAMC,QAAQ,GAAGD,KAAK,CAACE,IAAN,CAAWD,QAA5B;AAEA,YAAI,CAACA,QAAL,EAAe,oBAAO,+BAAC,+BAAD,+BAAmBD,KAAnB;AAA0B,UAAA,YAAY,EAAEJ;AAAxC,WAAP,CAHoC,CAKnD;;AACA,YAAII,KAAK,CAACE,IAAN,CAAWC,OAAX,YAA8BC,8BAAlC,EAAgD;AAC9C,8BACE,gEACGH,QAAQ,CAACI,GAAT,CAAcC,SAAD,iBACZ,+BAAC,gBAAD;AAAkB,YAAA,GAAG,EAAEA,SAAS,CAACC;AAAjC,aAAyCP,KAAzC;AAAgD,YAAA,IAAI,EAAEM;AAAtD,aADD,CADH,CADF;AAOD;;AAED,4BAAO,+BAAC,mCAAD,EAAuBN,KAAvB,CAAP;AACD,OAlBsB,EAmBvB,CAACJ,YAAD,CAnBuB,CAAzB;AAsBA,UAAI,CAACC,KAAL,EAAY,oBAAO,+BAAC,6BAAD,OAAP;AACZ,UAAIA,KAAK,CAACW,UAAN,CAAiBC,MAAjB,KAA4B,CAAhC,EACE,oBAAO;AAAM,QAAA,SAAS,EAAE,2BAAWC,6BAAX,EAAwBC,2BAAxB,EAAkCC,kCAAOC,UAAzC;AAAjB,0BAAP;AACF,0BAAO,+BAAC,+BAAD;AAAe,QAAA,UAAU,EAAEhB,KAAK,CAACW,UAAjC;AAA6C,QAAA,QAAQ,EAAEV;AAAvD,QAAP;AACD,KAlCoD;AAAE;;AADL","sourcesContent":["import React, { useCallback } 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';\n\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 { useScopeQuery } from '@teambit/scope.ui.hooks.use-scope';\nimport styles from './components-drawer.module.scss';\n\nexport class ComponentsDrawer implements DrawerType {\n constructor(private treeNodeSlot: ComponentTreeSlot) {}\n\n name = 'COMPONENTS';\n\n render = () => {\n const { scope } = useScopeQuery();\n const { treeNodeSlot } = this;\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 if (scope.components.length === 0)\n return <span className={classNames(mutedItalic, ellipsis, styles.emptyScope)}>Scope is empty</span>;\n return <ComponentTree components={scope.components} TreeNode={TreeNodeRenderer} />;\n };\n}\n"]}
1
+ {"version":3,"sources":["components.drawer.tsx"],"names":["ScopeTreeContext","collapsed","setCollapsed","ComponentsDrawer","constructor","treeNodeSlot","children","scope","TreeNodeRenderer","TreeNode","props","node","payload","ScopePayload","map","childNode","id","components","length","mutedItalic","ellipsis","styles","emptyScope","Widget","icon","collapseIcon"],"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';\n\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 { useScopeQuery } from '@teambit/scope.ui.hooks.use-scope';\nimport styles from './components-drawer.module.scss';\n\nconst ScopeTreeContext = createContext<{ collapsed: boolean; setCollapsed: (x: boolean) => void }>({\n collapsed: true,\n setCollapsed: () => {},\n});\n\nexport class ComponentsDrawer implements DrawerType {\n constructor(private treeNodeSlot: ComponentTreeSlot) {}\n\n name = 'COMPONENTS';\n\n widget = (<Widget />);\n\n Context = ({ children }) => {\n const [collapsed, setCollapsed] = useState(true);\n return <ScopeTreeContext.Provider value={{ collapsed, setCollapsed }}>{children}</ScopeTreeContext.Provider>;\n };\n\n render = () => {\n const { scope } = useScopeQuery();\n const { collapsed } = useContext(ScopeTreeContext);\n const { treeNodeSlot } = this;\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 if (scope.components.length === 0)\n return <span className={classNames(mutedItalic, ellipsis, styles.emptyScope)}>Scope is empty</span>;\n return <ComponentTree components={scope.components} isCollapsed={collapsed} TreeNode={TreeNodeRenderer} />;\n };\n}\n\nfunction Widget() {\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 <img src={icon} className={styles.collapseIcon} onClick={() => setCollapsed(!collapsed)} />;\n}\n"]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/scope",
3
- "version": "0.0.627",
3
+ "version": "0.0.629",
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.627"
9
+ "version": "0.0.629"
10
10
  },
11
11
  "dependencies": {
12
12
  "semver": "7.3.4",
@@ -27,32 +27,32 @@
27
27
  "@teambit/base-ui.graph.tree.recursive-tree": "1.0.0",
28
28
  "@teambit/scope.models.scope-model": "0.0.95",
29
29
  "@teambit/scope.ui.hooks.scope-context": "0.0.95",
30
- "@teambit/component": "0.0.627",
31
- "@teambit/logger": "0.0.520",
32
- "@teambit/aspect-loader": "0.0.627",
33
- "@teambit/builder": "0.0.627",
34
- "@teambit/cli": "0.0.431",
35
- "@teambit/compiler": "0.0.627",
36
- "@teambit/config": "0.0.443",
37
- "@teambit/envs": "0.0.627",
38
- "@teambit/express": "0.0.524",
39
- "@teambit/graphql": "0.0.627",
30
+ "@teambit/component": "0.0.629",
31
+ "@teambit/logger": "0.0.522",
32
+ "@teambit/aspect-loader": "0.0.629",
33
+ "@teambit/builder": "0.0.629",
34
+ "@teambit/cli": "0.0.433",
35
+ "@teambit/compiler": "0.0.629",
36
+ "@teambit/config": "0.0.445",
37
+ "@teambit/envs": "0.0.629",
38
+ "@teambit/express": "0.0.526",
39
+ "@teambit/graphql": "0.0.629",
40
40
  "@teambit/harmony.modules.requireable-component": "0.0.483",
41
- "@teambit/isolator": "0.0.627",
41
+ "@teambit/isolator": "0.0.629",
42
42
  "@teambit/legacy-bit-id": "0.0.397",
43
- "@teambit/ui": "0.0.627",
43
+ "@teambit/ui": "0.0.629",
44
44
  "@teambit/workspace.modules.match-pattern": "0.0.487",
45
- "@teambit/command-bar": "0.0.627",
46
- "@teambit/component-tree": "0.0.415",
45
+ "@teambit/command-bar": "0.0.629",
46
+ "@teambit/component-tree": "0.0.417",
47
47
  "@teambit/design.ui.surfaces.menu.link-item": "0.0.377",
48
- "@teambit/react-router": "0.0.627",
49
- "@teambit/sidebar": "0.0.627",
48
+ "@teambit/react-router": "0.0.629",
49
+ "@teambit/sidebar": "0.0.629",
50
50
  "@teambit/ui-foundation.ui.main-dropdown": "0.0.485",
51
51
  "@teambit/ui-foundation.ui.menu": "0.0.485",
52
52
  "@teambit/ui-foundation.ui.react-router.slot-router": "0.0.487",
53
53
  "@teambit/bit-error": "0.0.394",
54
54
  "@teambit/ui-foundation.ui.constants.z-indexes": "0.0.486",
55
- "@teambit/scope.ui.hooks.use-scope": "0.0.96",
55
+ "@teambit/scope.ui.hooks.use-scope": "0.0.98",
56
56
  "@teambit/ui-foundation.ui.buttons.collapser": "0.0.192",
57
57
  "@teambit/ui-foundation.ui.corner": "0.0.493",
58
58
  "@teambit/ui-foundation.ui.hooks.use-is-mobile": "0.0.178",
@@ -60,8 +60,8 @@
60
60
  "@teambit/design.ui.styles.ellipsis": "0.0.347",
61
61
  "@teambit/design.ui.styles.muted-italic": "0.0.35",
62
62
  "@teambit/ui-foundation.ui.full-loader": "0.0.485",
63
- "@teambit/ui-foundation.ui.side-bar": "0.0.492",
64
- "@teambit/ui-foundation.ui.tree.drawer": "0.0.486",
63
+ "@teambit/ui-foundation.ui.side-bar": "0.0.494",
64
+ "@teambit/ui-foundation.ui.tree.drawer": "0.0.488",
65
65
  "@teambit/ui-foundation.ui.use-box.dropdown": "0.0.108",
66
66
  "@teambit/ui-foundation.ui.use-box.scope-menu": "0.0.108",
67
67
  "@teambit/explorer.ui.gallery.component-card": "0.0.492",
@@ -85,7 +85,7 @@
85
85
  "@types/node": "12.20.4"
86
86
  },
87
87
  "peerDependencies": {
88
- "@teambit/legacy": "1.0.208",
88
+ "@teambit/legacy": "1.0.209",
89
89
  "react-dom": "^16.8.0 || ^17.0.0",
90
90
  "react": "^16.8.0 || ^17.0.0"
91
91
  },
@@ -113,7 +113,7 @@
113
113
  "react": "-"
114
114
  },
115
115
  "peerDependencies": {
116
- "@teambit/legacy": "1.0.208",
116
+ "@teambit/legacy": "1.0.209",
117
117
  "react-dom": "^16.8.0 || ^17.0.0",
118
118
  "react": "^16.8.0 || ^17.0.0"
119
119
  }
@@ -2,3 +2,7 @@
2
2
  padding: 8px 8px 0 28px;
3
3
  display: block;
4
4
  }
5
+
6
+ .collapseIcon {
7
+ width: 16px;
8
+ }
@@ -1,4 +1,4 @@
1
- import React, { useCallback } from 'react';
1
+ import React, { useCallback, useState, useContext, createContext } from 'react';
2
2
  import classNames from 'classnames';
3
3
  import {
4
4
  ComponentTree,
@@ -17,13 +17,26 @@ import { ellipsis } from '@teambit/design.ui.styles.ellipsis';
17
17
  import { useScopeQuery } from '@teambit/scope.ui.hooks.use-scope';
18
18
  import styles from './components-drawer.module.scss';
19
19
 
20
+ const ScopeTreeContext = createContext<{ collapsed: boolean; setCollapsed: (x: boolean) => void }>({
21
+ collapsed: true,
22
+ setCollapsed: () => {},
23
+ });
24
+
20
25
  export class ComponentsDrawer implements DrawerType {
21
26
  constructor(private treeNodeSlot: ComponentTreeSlot) {}
22
27
 
23
28
  name = 'COMPONENTS';
24
29
 
30
+ widget = (<Widget />);
31
+
32
+ Context = ({ children }) => {
33
+ const [collapsed, setCollapsed] = useState(true);
34
+ return <ScopeTreeContext.Provider value={{ collapsed, setCollapsed }}>{children}</ScopeTreeContext.Provider>;
35
+ };
36
+
25
37
  render = () => {
26
38
  const { scope } = useScopeQuery();
39
+ const { collapsed } = useContext(ScopeTreeContext);
27
40
  const { treeNodeSlot } = this;
28
41
 
29
42
  const TreeNodeRenderer = useCallback(
@@ -51,6 +64,14 @@ export class ComponentsDrawer implements DrawerType {
51
64
  if (!scope) return <FullLoader />;
52
65
  if (scope.components.length === 0)
53
66
  return <span className={classNames(mutedItalic, ellipsis, styles.emptyScope)}>Scope is empty</span>;
54
- return <ComponentTree components={scope.components} TreeNode={TreeNodeRenderer} />;
67
+ return <ComponentTree components={scope.components} isCollapsed={collapsed} TreeNode={TreeNodeRenderer} />;
55
68
  };
56
69
  }
70
+
71
+ function Widget() {
72
+ const { collapsed, setCollapsed } = useContext(ScopeTreeContext);
73
+ const icon = collapsed
74
+ ? 'https://static.bit.dev/bit-icons/expand.svg'
75
+ : 'https://static.bit.dev/bit-icons/collapse.svg';
76
+ return <img src={icon} className={styles.collapseIcon} onClick={() => setCollapsed(!collapsed)} />;
77
+ }