@teambit/component 0.0.557 → 0.0.561

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
+ ---
2
+ description: Component aspect for Bit components
3
+ labels: ['component', 'bit', 'extension', 'aspect']
4
+ ---
5
+
6
+ import { Component } from '@teambit/component.aspect-docs.component';
7
+
8
+ <Component />
@@ -52,9 +52,10 @@ export interface ComponentFactory {
52
52
  */
53
53
  getSnap(id: ComponentID, snapId: string): Promise<Snap>;
54
54
  /**
55
- * load extension.
55
+ * load aspects.
56
+ * returns the loaded aspect ids including the loaded versions.
56
57
  */
57
- loadAspects: (ids: string[], throwOnError: boolean) => Promise<void>;
58
+ loadAspects: (ids: string[], throwOnError: boolean) => Promise<string[]>;
58
59
  /**
59
60
  * Resolve dirs for aspects
60
61
  */
@@ -13,7 +13,7 @@ export declare function componentSchema(componentExtension: ComponentMain): {
13
13
  path: string;
14
14
  }) => string | undefined;
15
15
  mainFile: (component: Component) => any;
16
- headTag: (component: Component) => import("./tag/tag").TagProps | undefined;
16
+ headTag: (component: Component) => import(".").TagProps | undefined;
17
17
  latest: (component: Component) => string | undefined;
18
18
  tags: (component: any) => any;
19
19
  aspects: (component: Component) => {
@@ -2,7 +2,7 @@ import { CLIMain } from '@teambit/cli';
2
2
  import { ExpressMain, Route } from '@teambit/express';
3
3
  import { GraphqlMain } from '@teambit/graphql';
4
4
  import { SlotRegistry } from '@teambit/harmony';
5
- import { Config } from '@teambit/config';
5
+ import type { ConfigMain } from '@teambit/config';
6
6
  import { ComponentID } from '@teambit/component-id';
7
7
  import { ExtensionDataList } from '@teambit/legacy/dist/consumer/config';
8
8
  import { ComponentFactory } from './component-factory';
@@ -60,5 +60,5 @@ export declare class ComponentMain {
60
60
  static slots: (((registerFn: () => string) => SlotRegistry<Route[]>) | ((registerFn: () => string) => SlotRegistry<ComponentFactory>) | ((registerFn: () => string) => SlotRegistry<ShowFragment[]>))[];
61
61
  static runtime: import("@teambit/harmony").RuntimeDefinition;
62
62
  static dependencies: import("@teambit/harmony").Aspect[];
63
- static provider([graphql, express, cli, configAspect]: [GraphqlMain, ExpressMain, CLIMain, Config], config: any, [hostSlot, showFragmentSlot]: [ComponentHostSlot, ShowFragmentSlot]): Promise<ComponentMain>;
63
+ static provider([graphql, express, cli, configAspect]: [GraphqlMain, ExpressMain, CLIMain, ConfigMain], config: any, [hostSlot, showFragmentSlot]: [ComponentHostSlot, ShowFragmentSlot]): Promise<ComponentMain>;
64
64
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["component.main.runtime.ts"],"names":["ComponentMain","constructor","hostSlot","express","showFragmentSlot","registerHost","host","register","createAspectList","legacyExtensionDataList","scope","AspectList","fromLegacyExtensions","createAspectListFromEntries","entries","registerRoute","routes","routeEntries","map","route","ComponentRoute","setHostPriority","id","get","HostNotFound","_priorHost","getHost","getPriorHost","getRoute","routeName","toString","hosts","values","priorityHost","find","priority","getShowFragments","fragments","isHost","name","registerShowFragments","showFragments","provider","graphql","cli","configAspect","config","componentExtension","workspaceConfig","isLegacy","type","unregister","ShowCmd","NameFragment","MainFileFragment","IDFragment","ScopeFragment","FilesFragment","ExtensionsFragment","Slot","withType","MainRuntime","GraphqlAspect","ExpressAspect","CLIAspect","ConfigAspect","ComponentAspect","addRuntime"],"mappings":"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","sourcesContent":["import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { ExpressAspect, ExpressMain, Route } from '@teambit/express';\nimport { GraphqlAspect, GraphqlMain } from '@teambit/graphql';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport { ConfigAspect, Config } from '@teambit/config';\nimport { ComponentID } from '@teambit/component-id';\nimport { flatten, orderBy } from 'lodash';\nimport { ExtensionDataList } from '@teambit/legacy/dist/consumer/config';\nimport { ComponentFactory } from './component-factory';\nimport { ComponentAspect } from './component.aspect';\nimport { componentSchema } from './component.graphql';\nimport { ComponentRoute } from './component.route';\nimport { AspectList } from './aspect-list';\nimport { HostNotFound } from './exceptions';\nimport { AspectEntry } from './aspect-entry';\nimport {\n ShowCmd,\n ShowFragment,\n NameFragment,\n MainFileFragment,\n IDFragment,\n ScopeFragment,\n FilesFragment,\n ExtensionsFragment,\n} from './show';\n\nexport type ComponentHostSlot = SlotRegistry<ComponentFactory>;\n\nexport type ShowFragmentSlot = SlotRegistry<ShowFragment[]>;\n\nexport class ComponentMain {\n constructor(\n /**\n * slot for component hosts to register.\n */\n private hostSlot: ComponentHostSlot,\n\n /**\n * Express Extension\n */\n private express: ExpressMain,\n\n private showFragmentSlot: ShowFragmentSlot\n ) {}\n\n /**\n * register a new component host.\n */\n registerHost(host: ComponentFactory) {\n this.hostSlot.register(host);\n return this;\n }\n\n createAspectList(legacyExtensionDataList: ExtensionDataList, scope?: string) {\n return AspectList.fromLegacyExtensions(legacyExtensionDataList, scope);\n }\n\n createAspectListFromEntries(entries: AspectEntry[]) {\n return new AspectList(entries);\n }\n\n registerRoute(routes: Route[]) {\n const routeEntries = routes.map((route: Route) => {\n return new ComponentRoute(route, this);\n });\n\n this.express.register(flatten(routeEntries));\n return this;\n }\n\n /**\n * set the prior host.\n */\n setHostPriority(id: string) {\n const host = this.hostSlot.get(id);\n if (!host) {\n throw new HostNotFound(id);\n }\n\n this._priorHost = host;\n return this;\n }\n\n /**\n * get component host by extension ID.\n */\n getHost(id?: string): ComponentFactory {\n if (id) {\n const host = this.hostSlot.get(id);\n if (!host) throw new HostNotFound(id);\n return host;\n }\n\n return this.getPriorHost();\n }\n\n getRoute(id: ComponentID, routeName: string) {\n return `/api/${id.toString()}/~aspect/${routeName}`;\n }\n\n /**\n * get the prior host.\n */\n private getPriorHost() {\n if (this._priorHost) return this._priorHost;\n\n const hosts = this.hostSlot.values();\n const priorityHost = hosts.find((host) => host.priority);\n return priorityHost || hosts[0];\n }\n\n getShowFragments() {\n const fragments = orderBy(flatten(this.showFragmentSlot.values()), ['weight', ['asc']]);\n return fragments;\n }\n\n isHost(name: string) {\n return !!this.hostSlot.get(name);\n }\n\n /**\n * register a show fragment to display further information in the `bit show` command.\n */\n registerShowFragments(showFragments: ShowFragment[]) {\n this.showFragmentSlot.register(showFragments);\n return this;\n }\n\n private _priorHost: ComponentFactory | undefined;\n\n static slots = [Slot.withType<ComponentFactory>(), Slot.withType<Route[]>(), Slot.withType<ShowFragment[]>()];\n\n static runtime = MainRuntime;\n static dependencies = [GraphqlAspect, ExpressAspect, CLIAspect, ConfigAspect];\n\n static async provider(\n [graphql, express, cli, configAspect]: [GraphqlMain, ExpressMain, CLIMain, Config],\n config,\n [hostSlot, showFragmentSlot]: [ComponentHostSlot, ShowFragmentSlot]\n ) {\n const componentExtension = new ComponentMain(hostSlot, express, showFragmentSlot);\n\n if ((configAspect.workspaceConfig && !configAspect.workspaceConfig.isLegacy) || configAspect.type === 'scope') {\n cli.unregister('show');\n cli.register(new ShowCmd(componentExtension));\n }\n\n componentExtension.registerShowFragments([\n new NameFragment(),\n new MainFileFragment(),\n new IDFragment(),\n new ScopeFragment(),\n new FilesFragment(),\n new ExtensionsFragment(),\n ]);\n graphql.register(componentSchema(componentExtension));\n\n return componentExtension;\n }\n}\n\nComponentAspect.addRuntime(ComponentMain);\n"]}
1
+ {"version":3,"sources":["component.main.runtime.ts"],"names":["ComponentMain","constructor","hostSlot","express","showFragmentSlot","registerHost","host","register","createAspectList","legacyExtensionDataList","scope","AspectList","fromLegacyExtensions","createAspectListFromEntries","entries","registerRoute","routes","routeEntries","map","route","ComponentRoute","setHostPriority","id","get","HostNotFound","_priorHost","getHost","getPriorHost","getRoute","routeName","toString","hosts","values","priorityHost","find","priority","getShowFragments","fragments","isHost","name","registerShowFragments","showFragments","provider","graphql","cli","configAspect","config","componentExtension","workspaceConfig","isLegacy","type","unregister","ShowCmd","NameFragment","MainFileFragment","IDFragment","ScopeFragment","FilesFragment","ExtensionsFragment","Slot","withType","MainRuntime","GraphqlAspect","ExpressAspect","CLIAspect","ConfigAspect","ComponentAspect","addRuntime"],"mappings":"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","sourcesContent":["import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { ExpressAspect, ExpressMain, Route } from '@teambit/express';\nimport { GraphqlAspect, GraphqlMain } from '@teambit/graphql';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport { ConfigAspect } from '@teambit/config';\nimport type { ConfigMain } from '@teambit/config';\nimport { ComponentID } from '@teambit/component-id';\nimport { flatten, orderBy } from 'lodash';\nimport { ExtensionDataList } from '@teambit/legacy/dist/consumer/config';\nimport { ComponentFactory } from './component-factory';\nimport { ComponentAspect } from './component.aspect';\nimport { componentSchema } from './component.graphql';\nimport { ComponentRoute } from './component.route';\nimport { AspectList } from './aspect-list';\nimport { HostNotFound } from './exceptions';\nimport { AspectEntry } from './aspect-entry';\nimport {\n ShowCmd,\n ShowFragment,\n NameFragment,\n MainFileFragment,\n IDFragment,\n ScopeFragment,\n FilesFragment,\n ExtensionsFragment,\n} from './show';\n\nexport type ComponentHostSlot = SlotRegistry<ComponentFactory>;\n\nexport type ShowFragmentSlot = SlotRegistry<ShowFragment[]>;\n\nexport class ComponentMain {\n constructor(\n /**\n * slot for component hosts to register.\n */\n private hostSlot: ComponentHostSlot,\n\n /**\n * Express Extension\n */\n private express: ExpressMain,\n\n private showFragmentSlot: ShowFragmentSlot\n ) {}\n\n /**\n * register a new component host.\n */\n registerHost(host: ComponentFactory) {\n this.hostSlot.register(host);\n return this;\n }\n\n createAspectList(legacyExtensionDataList: ExtensionDataList, scope?: string) {\n return AspectList.fromLegacyExtensions(legacyExtensionDataList, scope);\n }\n\n createAspectListFromEntries(entries: AspectEntry[]) {\n return new AspectList(entries);\n }\n\n registerRoute(routes: Route[]) {\n const routeEntries = routes.map((route: Route) => {\n return new ComponentRoute(route, this);\n });\n\n this.express.register(flatten(routeEntries));\n return this;\n }\n\n /**\n * set the prior host.\n */\n setHostPriority(id: string) {\n const host = this.hostSlot.get(id);\n if (!host) {\n throw new HostNotFound(id);\n }\n\n this._priorHost = host;\n return this;\n }\n\n /**\n * get component host by extension ID.\n */\n getHost(id?: string): ComponentFactory {\n if (id) {\n const host = this.hostSlot.get(id);\n if (!host) throw new HostNotFound(id);\n return host;\n }\n\n return this.getPriorHost();\n }\n\n getRoute(id: ComponentID, routeName: string) {\n return `/api/${id.toString()}/~aspect/${routeName}`;\n }\n\n /**\n * get the prior host.\n */\n private getPriorHost() {\n if (this._priorHost) return this._priorHost;\n\n const hosts = this.hostSlot.values();\n const priorityHost = hosts.find((host) => host.priority);\n return priorityHost || hosts[0];\n }\n\n getShowFragments() {\n const fragments = orderBy(flatten(this.showFragmentSlot.values()), ['weight', ['asc']]);\n return fragments;\n }\n\n isHost(name: string) {\n return !!this.hostSlot.get(name);\n }\n\n /**\n * register a show fragment to display further information in the `bit show` command.\n */\n registerShowFragments(showFragments: ShowFragment[]) {\n this.showFragmentSlot.register(showFragments);\n return this;\n }\n\n private _priorHost: ComponentFactory | undefined;\n\n static slots = [Slot.withType<ComponentFactory>(), Slot.withType<Route[]>(), Slot.withType<ShowFragment[]>()];\n\n static runtime = MainRuntime;\n static dependencies = [GraphqlAspect, ExpressAspect, CLIAspect, ConfigAspect];\n\n static async provider(\n [graphql, express, cli, configAspect]: [GraphqlMain, ExpressMain, CLIMain, ConfigMain],\n config,\n [hostSlot, showFragmentSlot]: [ComponentHostSlot, ShowFragmentSlot]\n ) {\n const componentExtension = new ComponentMain(hostSlot, express, showFragmentSlot);\n\n if ((configAspect.workspaceConfig && !configAspect.workspaceConfig.isLegacy) || configAspect.type === 'scope') {\n cli.unregister('show');\n cli.register(new ShowCmd(componentExtension));\n }\n\n componentExtension.registerShowFragments([\n new NameFragment(),\n new MainFileFragment(),\n new IDFragment(),\n new ScopeFragment(),\n new FilesFragment(),\n new ExtensionsFragment(),\n ]);\n graphql.register(componentSchema(componentExtension));\n\n return componentExtension;\n }\n}\n\nComponentAspect.addRuntime(ComponentMain);\n"]}
package/dist/index.d.ts CHANGED
@@ -7,9 +7,9 @@ export type { default as ComponentConfig } from './config';
7
7
  export type { ComponentFactory } from './component-factory';
8
8
  export type { AspectList } from './aspect-list';
9
9
  export { AspectEntry, AspectData } from './aspect-entry';
10
- export { Snap } from './snap/snap';
10
+ export { Snap, SnapProps } from './snap/snap';
11
11
  export type { Author } from './snap/author';
12
- export { Tag } from './tag/tag';
12
+ export { Tag, TagProps } from './tag/tag';
13
13
  export { State } from './state';
14
14
  export type { Hash } from './hash';
15
15
  export { TagMap } from './tag-map';
package/dist/index.js CHANGED
@@ -89,6 +89,12 @@ Object.defineProperty(exports, "Snap", {
89
89
  return _snap().Snap;
90
90
  }
91
91
  });
92
+ Object.defineProperty(exports, "SnapProps", {
93
+ enumerable: true,
94
+ get: function () {
95
+ return _snap().SnapProps;
96
+ }
97
+ });
92
98
  Object.defineProperty(exports, "State", {
93
99
  enumerable: true,
94
100
  get: function () {
@@ -107,6 +113,12 @@ Object.defineProperty(exports, "TagMap", {
107
113
  return _tagMap().TagMap;
108
114
  }
109
115
  });
116
+ Object.defineProperty(exports, "TagProps", {
117
+ enumerable: true,
118
+ get: function () {
119
+ return _tag().TagProps;
120
+ }
121
+ });
110
122
  exports.default = void 0;
111
123
  Object.defineProperty(exports, "useComponentHost", {
112
124
  enumerable: true,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["ComponentAspect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;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;;AAIA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAIA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;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;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAjBA;AACA;AAGA;AACA;AAaA;AACA;eAEeA,4B","sourcesContent":["import { ComponentAspect } from './component.aspect';\n\nexport { useComponentHost } from './host';\nexport { Component, InvalidComponent } from './component';\nexport { ComponentID } from '@teambit/component-id';\nexport { default as ComponentFS } from './component-fs';\nexport type { default as ComponentConfig } from './config';\nexport type { ComponentFactory } from './component-factory';\nexport type { AspectList } from './aspect-list';\nexport { AspectEntry, AspectData } from './aspect-entry';\n// TODO: check why it's not working when using the index in snap dir like this:\n// export { Snap, Author } from './snap';\nexport { Snap } from './snap/snap';\nexport type { Author } from './snap/author';\n// TODO: check why it's not working when using the index in tag dir like this:\n// export { Tag } from './tag';\nexport { Tag } from './tag/tag';\nexport { State } from './state';\nexport type { Hash } from './hash';\nexport { TagMap } from './tag-map';\nexport { ComponentMap } from './component-map';\nexport type { ComponentMain } from './component.main.runtime';\nexport type { ComponentUI } from './component.ui.runtime';\nexport { Section } from './section';\nexport { ComponentContext } from './ui/context/component-context';\nexport { ComponentModel, ComponentModelProps } from './ui/component-model';\nexport type { ShowFragment, ShowRow } from './show';\nexport { default as Config } from './config';\n// export { AspectList } from './aspect-list';\n// export { AspectEntry } from './aspect-entry';\nexport { ComponentAspect };\nexport default ComponentAspect;\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":["ComponentAspect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;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;;AAIA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAIA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;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;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAjBA;AACA;AAGA;AACA;AAaA;AACA;eAEeA,4B","sourcesContent":["import { ComponentAspect } from './component.aspect';\n\nexport { useComponentHost } from './host';\nexport { Component, InvalidComponent } from './component';\nexport { ComponentID } from '@teambit/component-id';\nexport { default as ComponentFS } from './component-fs';\nexport type { default as ComponentConfig } from './config';\nexport type { ComponentFactory } from './component-factory';\nexport type { AspectList } from './aspect-list';\nexport { AspectEntry, AspectData } from './aspect-entry';\n// TODO: check why it's not working when using the index in snap dir like this:\n// export { Snap, Author } from './snap';\nexport { Snap, SnapProps } from './snap/snap';\nexport type { Author } from './snap/author';\n// TODO: check why it's not working when using the index in tag dir like this:\n// export { Tag } from './tag';\nexport { Tag, TagProps } from './tag/tag';\nexport { State } from './state';\nexport type { Hash } from './hash';\nexport { TagMap } from './tag-map';\nexport { ComponentMap } from './component-map';\nexport type { ComponentMain } from './component.main.runtime';\nexport type { ComponentUI } from './component.ui.runtime';\nexport { Section } from './section';\nexport { ComponentContext } from './ui/context/component-context';\nexport { ComponentModel, ComponentModelProps } from './ui/component-model';\nexport type { ShowFragment, ShowRow } from './show';\nexport { default as Config } from './config';\n// export { AspectList } from './aspect-list';\n// export { AspectEntry } from './aspect-entry';\nexport { ComponentAspect };\nexport default ComponentAspect;\n"]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/component",
3
- "version": "0.0.557",
3
+ "version": "0.0.561",
4
4
  "homepage": "https://bit.dev/teambit/component/component",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.component",
8
8
  "name": "component",
9
- "version": "0.0.557"
9
+ "version": "0.0.561"
10
10
  },
11
11
  "dependencies": {
12
12
  "lodash": "4.17.21",
@@ -26,38 +26,38 @@
26
26
  "@teambit/base-ui.routing.nav-link": "1.0.0",
27
27
  "@teambit/documenter.ui.heading": "4.1.1",
28
28
  "@teambit/documenter.ui.separator": "4.1.1",
29
- "@teambit/component-id": "0.0.378",
30
- "@teambit/ui-foundation.ui.menu-widget-icon": "0.0.467",
31
- "@teambit/aspect-loader": "0.0.557",
32
- "@teambit/legacy-bit-id": "0.0.377",
33
- "@teambit/toolbox.string.capitalize": "0.0.462",
34
- "@teambit/cli": "0.0.388",
35
- "@teambit/config": "0.0.399",
36
- "@teambit/express": "0.0.477",
37
- "@teambit/graphql": "0.0.557",
38
- "@teambit/bit-error": "0.0.374",
39
- "@teambit/command-bar": "0.0.557",
40
- "@teambit/preview": "0.0.557",
41
- "@teambit/pubsub": "0.0.557",
42
- "@teambit/ui-foundation.ui.is-browser": "0.0.465",
43
- "@teambit/ui-foundation.ui.main-dropdown": "0.0.465",
44
- "@teambit/ui-foundation.ui.react-router.slot-router": "0.0.467",
45
- "@teambit/ui": "0.0.557",
46
- "@teambit/component-issues": "0.0.23",
47
- "@teambit/ui-foundation.ui.hooks.use-data-query": "0.0.466",
48
- "@teambit/cli-table": "0.0.11",
49
- "@teambit/ui-foundation.ui.react-router.use-query": "0.0.465",
29
+ "@teambit/component-id": "0.0.380",
30
+ "@teambit/ui-foundation.ui.menu-widget-icon": "0.0.469",
31
+ "@teambit/aspect-loader": "0.0.561",
32
+ "@teambit/legacy-bit-id": "0.0.379",
33
+ "@teambit/toolbox.string.capitalize": "0.0.464",
34
+ "@teambit/cli": "0.0.390",
35
+ "@teambit/config": "0.0.401",
36
+ "@teambit/express": "0.0.479",
37
+ "@teambit/graphql": "0.0.561",
38
+ "@teambit/bit-error": "0.0.376",
39
+ "@teambit/command-bar": "0.0.561",
40
+ "@teambit/preview": "0.0.561",
41
+ "@teambit/pubsub": "0.0.561",
42
+ "@teambit/ui-foundation.ui.is-browser": "0.0.467",
43
+ "@teambit/ui-foundation.ui.main-dropdown": "0.0.467",
44
+ "@teambit/ui-foundation.ui.react-router.slot-router": "0.0.469",
45
+ "@teambit/ui": "0.0.561",
46
+ "@teambit/component-issues": "0.0.25",
47
+ "@teambit/ui-foundation.ui.hooks.use-data-query": "0.0.468",
48
+ "@teambit/cli-table": "0.0.13",
49
+ "@teambit/ui-foundation.ui.react-router.use-query": "0.0.467",
50
50
  "@teambit/design.ui.empty-box": "0.0.352",
51
- "@teambit/harmony.ui.aspect-box": "0.0.465",
51
+ "@teambit/harmony.ui.aspect-box": "0.0.467",
52
52
  "@teambit/design.ui.pages.not-found": "0.0.352",
53
53
  "@teambit/design.ui.pages.server-error": "0.0.352",
54
- "@teambit/compositions": "0.0.557",
55
- "@teambit/deprecation": "0.0.557",
56
- "@teambit/envs": "0.0.557",
57
- "@teambit/component.ui.version-dropdown": "0.0.469",
58
- "@teambit/ui-foundation.ui.use-box.dropdown": "0.0.86",
59
- "@teambit/ui-foundation.ui.use-box.menu": "0.0.86",
60
- "@teambit/ui-foundation.ui.react-router.extend-path": "0.0.465"
54
+ "@teambit/compositions": "0.0.561",
55
+ "@teambit/deprecation": "0.0.561",
56
+ "@teambit/envs": "0.0.561",
57
+ "@teambit/component.ui.version-dropdown": "0.0.471",
58
+ "@teambit/ui-foundation.ui.use-box.dropdown": "0.0.88",
59
+ "@teambit/ui-foundation.ui.use-box.menu": "0.0.88",
60
+ "@teambit/ui-foundation.ui.react-router.extend-path": "0.0.467"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@types/lodash": "4.14.165",
@@ -72,11 +72,11 @@
72
72
  "@types/jest": "^26.0.0",
73
73
  "@types/react-dom": "^17.0.5",
74
74
  "@types/node": "12.20.4",
75
- "@teambit/component.aspect-docs.component": "0.0.107"
75
+ "@teambit/component.aspect-docs.component": "0.0.109"
76
76
  },
77
77
  "peerDependencies": {
78
78
  "@apollo/client": "^3.0.0",
79
- "@teambit/legacy": "1.0.174",
79
+ "@teambit/legacy": "1.0.176",
80
80
  "react-dom": "^16.8.0 || ^17.0.0",
81
81
  "react": "^16.8.0 || ^17.0.0"
82
82
  },
@@ -104,7 +104,7 @@
104
104
  "react": "-"
105
105
  },
106
106
  "peerDependencies": {
107
- "@teambit/legacy": "1.0.174",
107
+ "@teambit/legacy": "1.0.176",
108
108
  "react-dom": "^16.8.0 || ^17.0.0",
109
109
  "react": "^16.8.0 || ^17.0.0"
110
110
  }
@@ -113,10 +113,17 @@
113
113
  "files": [
114
114
  "dist",
115
115
  "!dist/tsconfig.tsbuildinfo",
116
- "README.md",
117
- "README.mdx",
118
- "*.js",
119
- "*.json"
116
+ "**/*.md",
117
+ "**/*.mdx",
118
+ "**/*.js",
119
+ "**/*.json",
120
+ "**/*.sass",
121
+ "**/*.scss",
122
+ "**/*.less",
123
+ "**/*.css",
124
+ "**/*.css",
125
+ "**/*.jpeg",
126
+ "**/*.gif"
120
127
  ],
121
128
  "private": false,
122
129
  "engines": {
@@ -0,0 +1,20 @@
1
+ .aspectPage {
2
+ padding: 50px 40px 100px 40px;
3
+ width: 100%;
4
+ overflow-y: scroll;
5
+ box-sizing: border-box;
6
+ > div {
7
+ max-width: 1440px;
8
+ margin: 0 auto;
9
+ }
10
+ }
11
+ .title {
12
+ margin-bottom: 25px;
13
+ font-size: var(--bit-h-xs, 26px);
14
+ }
15
+ .separator {
16
+ margin-bottom: 41px;
17
+ }
18
+ .aspectBox {
19
+ margin-bottom: 32px;
20
+ }
@@ -0,0 +1,7 @@
1
+ $topbarHeight: 64px;
2
+
3
+ .container {
4
+ height: 100%;
5
+ display: flex;
6
+ flex-direction: column;
7
+ }
@@ -0,0 +1,62 @@
1
+ .topBar {
2
+ display: flex;
3
+ justify-content: space-between;
4
+ align-items: center;
5
+ width: 100%;
6
+ height: 100%;
7
+ }
8
+
9
+ .leftSide {
10
+ display: flex;
11
+ align-items: center;
12
+ height: 100%;
13
+ }
14
+
15
+ .navigation {
16
+ display: flex;
17
+ list-style: none;
18
+ height: 100%;
19
+ padding-left: 28px;
20
+ @media screen and (max-width: 768px) {
21
+ padding-left: 6px;
22
+ }
23
+
24
+ > li {
25
+ display: block;
26
+ margin-right: 16px;
27
+ height: 100%;
28
+ }
29
+ }
30
+
31
+ .rightSide {
32
+ display: flex;
33
+ align-items: center;
34
+ height: 100%;
35
+ > * {
36
+ margin-right: 12px;
37
+ &:last-child {
38
+ margin-right: 16px;
39
+ }
40
+ }
41
+ .widgets {
42
+ height: 100%;
43
+ margin-right: 20px;
44
+ display: flex;
45
+ align-items: center;
46
+ > nav {
47
+ > a {
48
+ padding: 0;
49
+ &:last-child {
50
+ margin-right: 0;
51
+ }
52
+ }
53
+ }
54
+ }
55
+ .widget {
56
+ font-size: 17px;
57
+ }
58
+ }
59
+
60
+ .useBox {
61
+ --bit-drawer-margin: 14px;
62
+ }
@@ -0,0 +1,52 @@
1
+ .topBarLink {
2
+ position: relative;
3
+ padding: 0 8px;
4
+
5
+ box-sizing: border-box;
6
+
7
+ display: flex;
8
+ align-items: center;
9
+
10
+ color: inherit;
11
+ text-decoration: none;
12
+
13
+ transition: color 300ms;
14
+ margin: 0 5px;
15
+
16
+ &:hover:not(.active) {
17
+ > div {
18
+ background-color: var(--bit-bg-heavy);
19
+ }
20
+ }
21
+
22
+ &.active {
23
+ color: var(--bit-accent-color, #6c5ce7);
24
+
25
+ &:after {
26
+ background-color: var(--bit-accent-color, #6c5ce7);
27
+ height: 4px;
28
+ }
29
+ }
30
+
31
+ &:after {
32
+ content: '';
33
+ position: absolute;
34
+ bottom: 0;
35
+ left: 0;
36
+ right: 0;
37
+ background-color: transparent;
38
+ height: 0;
39
+ border-top-right-radius: 2px;
40
+ border-top-left-radius: 2px;
41
+ transition: background-color 300ms, height 300ms;
42
+ }
43
+
44
+ > div {
45
+ border-radius: 6px;
46
+ padding: 0 8px;
47
+ height: 30px;
48
+ display: flex;
49
+ align-items: center;
50
+ transition: background-color 300ms ease-in-out;
51
+ }
52
+ }