@teambit/command-bar 0.0.720 → 0.0.723

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.
@@ -1,7 +1,6 @@
1
1
  import React, { useState } from 'react';
2
2
  import flatten from 'lodash.flatten';
3
3
  import Mousetrap from 'mousetrap';
4
-
5
4
  import { Slot, SlotRegistry } from '@teambit/harmony';
6
5
  import UIAspect, { UIRuntime, UiUI } from '@teambit/ui';
7
6
  import { PubsubAspect, PubsubUI } from '@teambit/pubsub';
@@ -105,7 +104,7 @@ export class CommandBarUI {
105
104
  private search = (term: string, limit: number = RESULT_LIMIT) => {
106
105
  const searchers = flatten(this.searcherSlot.values());
107
106
 
108
- const searcher = searchers.find((x) => x.test(term));
107
+ const searcher = searchers.find((x) => x && x.test(term));
109
108
  return searcher?.search(term, limit) || [];
110
109
  };
111
110
 
@@ -135,7 +134,7 @@ export class CommandBarUI {
135
134
  /**
136
135
  * generate the ui for command bar
137
136
  */
138
- private CommandBar = () => {
137
+ CommandBar = () => {
139
138
  const [visible, setVisibility] = useState(false);
140
139
  this.setVisibility = setVisibility;
141
140
 
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { SlotRegistry } from '@teambit/harmony';
2
3
  import { UiUI } from '@teambit/ui';
3
4
  import { PubsubUI } from '@teambit/pubsub';
@@ -47,7 +48,7 @@ export declare class CommandBarUI {
47
48
  /**
48
49
  * generate the ui for command bar
49
50
  */
50
- private CommandBar;
51
+ CommandBar: () => JSX.Element;
51
52
  constructor(searcherSlot: SearcherSlot, commandSlot: CommandSlot);
52
53
  static dependencies: import("@teambit/harmony").Aspect[];
53
54
  static slots: (((registerFn: () => string) => SlotRegistry<SearchProvider>) | ((registerFn: () => string) => SlotRegistry<CommandEntry[]>))[];
@@ -289,7 +289,7 @@ class CommandBarUI {
289
289
  });
290
290
  (0, _defineProperty2().default)(this, "search", (term, limit = RESULT_LIMIT) => {
291
291
  const searchers = (0, _lodash().default)(this.searcherSlot.values());
292
- const searcher = searchers.find(x => x.test(term));
292
+ const searcher = searchers.find(x => x && x.test(term));
293
293
  return (searcher === null || searcher === void 0 ? void 0 : searcher.search(term, limit)) || [];
294
294
  });
295
295
  (0, _defineProperty2().default)(this, "setVisibility", void 0);
@@ -1 +1 @@
1
- {"version":3,"sources":["command-bar.ui.runtime.tsx"],"names":["RESULT_LIMIT","CommandBarUI","addSearcher","commandSearcher","searcherSlot","register","addCommand","originalCommands","forEach","id","commandId","getCommand","undefined","DuplicateCommandError","commands","map","x","displayName","action","keybinding","commandSlot","command","addKeybinding","updateCommandsSearcher","updaters","next","run","commandEntry","relevantCommands","values","find","filter","pop","flat","update","key","mousetrap","bind","constructor","isBrowser","Mousetrap","MousetrapStub","CommandSearcher","setVisibility","trigger","term","limit","searchers","searcher","test","search","visible","styles","commanderUi","provider","uiUi","pubsubUI","config","commandSlots","commandBar","commandBarCommands","open","openCommandBarKeybinding","sub","CommandBarAspect","e","keyboardEvent","KeyboardEvent","type","data","document","dispatchEvent","registerHudItem","UIAspect","PubsubAspect","ReactRouterAspect","Slot","withType","UIRuntime","addRuntime"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport flatten from 'lodash.flatten';\nimport Mousetrap from 'mousetrap';\n\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport UIAspect, { UIRuntime, UiUI } from '@teambit/ui';\nimport { PubsubAspect, PubsubUI } from '@teambit/pubsub';\nimport { ReactRouterAspect } from '@teambit/react-router';\nimport { isBrowser } from '@teambit/ui-foundation.ui.is-browser';\nimport { CommandBar } from '@teambit/explorer.ui.command-bar';\nimport { CommandBarAspect } from './command-bar.aspect';\nimport { commandBarCommands } from './command-bar.commands';\nimport { CommandSearcher, SearchProvider } from './searchers';\nimport { Keybinding, CommandHandler, CommandId } from './types';\nimport { DuplicateCommandError } from './duplicate-command-error';\nimport { KeyEvent } from './model/key-event';\nimport { MousetrapStub } from './mousetrap-stub';\nimport { openCommandBarKeybinding } from './keybinding';\n\nimport styles from './command-bar.module.scss';\n\nconst RESULT_LIMIT = 5;\ntype SearcherSlot = SlotRegistry<SearchProvider[]>;\ntype CommandSlot = SlotRegistry<CommandEntry[]>;\n\nexport type CommandEntry = {\n id: CommandId;\n action: CommandHandler;\n keybinding?: Keybinding;\n displayName: string;\n};\n\n/** Quick launch actions. Use the `addSearcher` slot to extend the available actions */\nexport class CommandBarUI {\n private mousetrap = isBrowser ? new Mousetrap() : new MousetrapStub();\n private commandSearcher = new CommandSearcher([]);\n\n /** Opens the command bar */\n open = () => {\n this.setVisibility?.(true);\n return false; // aka prevent default\n };\n\n /** Closes the command bar */\n close = () => {\n this.setVisibility?.(false);\n };\n\n /** Add and autocomplete provider. To support keyboard navigation, each result should have a props `active: boolean`, and `exectue: () => any` */\n addSearcher(...commandSearcher: SearchProvider[]) {\n this.searcherSlot.register(commandSearcher);\n return this;\n }\n\n /**\n * registers a command\n */\n addCommand(...originalCommands: CommandEntry[]) {\n originalCommands.forEach(({ id: commandId }) => {\n if (this.getCommand(commandId) !== undefined) throw new DuplicateCommandError(commandId);\n });\n\n // commands could mutate later on, clone to ensure immutability 👌\n const commands = originalCommands.map((x) => ({\n id: x.id,\n displayName: x.displayName,\n action: x.action,\n keybinding: x.keybinding,\n }));\n\n this.commandSlot.register(commands);\n\n commands.forEach((command) => {\n if (command.keybinding) {\n this.addKeybinding(command.keybinding, command.id);\n }\n });\n\n this.updateCommandsSearcher();\n\n const updaters = commands.map((command) => (next: CommandHandler) => {\n command.action = next;\n });\n return updaters;\n }\n\n /**\n * executes command by name, if exists.\n * @param commandId\n */\n run(commandId: CommandId) {\n const commandEntry = this.getCommand(commandId);\n if (!commandEntry) return undefined;\n\n return commandEntry.action();\n }\n\n /**\n * executes a keyboard shortcut manually\n */\n trigger = (key: string) => {\n this.mousetrap.trigger(key);\n };\n\n private search = (term: string, limit: number = RESULT_LIMIT) => {\n const searchers = flatten(this.searcherSlot.values());\n\n const searcher = searchers.find((x) => x.test(term));\n return searcher?.search(term, limit) || [];\n };\n\n private getCommand(id: CommandId) {\n const relevantCommands = this.commandSlot\n .values()\n .map((commands) => commands.find((command) => command.id === id))\n .filter((x) => !!x);\n\n return relevantCommands.pop();\n }\n\n private updateCommandsSearcher() {\n const commands = this.commandSlot.values().flat();\n this.commandSearcher.update(commands);\n }\n\n private addKeybinding(key: Keybinding, command: CommandId) {\n this.mousetrap.bind(key, this.run.bind(this, command));\n }\n\n /**\n * Opens and closes the command bar UI.\n */\n private setVisibility?: (visible: boolean) => void;\n\n /**\n * generate the ui for command bar\n */\n private CommandBar = () => {\n const [visible, setVisibility] = useState(false);\n this.setVisibility = setVisibility;\n\n return (\n <CommandBar\n key=\"CommandBarUI\"\n className={styles.commanderUi}\n searcher={this.search}\n placeholder=\"Search anything or type > to only search commands\"\n visible={visible}\n onVisibilityChange={setVisibility}\n />\n );\n };\n\n constructor(private searcherSlot: SearcherSlot, private commandSlot: CommandSlot) {}\n\n static dependencies = [UIAspect, PubsubAspect, ReactRouterAspect];\n static slots = [Slot.withType<SearchProvider>(), Slot.withType<CommandEntry[]>()];\n static runtime = UIRuntime;\n static async provider(\n [uiUi, pubsubUI]: [UiUI | undefined, PubsubUI | undefined],\n config,\n [searcherSlot, commandSlots]: [SearcherSlot, CommandSlot]\n ) {\n const commandBar = new CommandBarUI(searcherSlot, commandSlots);\n\n commandBar.addSearcher(commandBar.commandSearcher);\n commandBar.addCommand({\n id: commandBarCommands.open,\n action: commandBar.open,\n displayName: 'Open command bar',\n keybinding: openCommandBarKeybinding,\n });\n\n if (pubsubUI) {\n pubsubUI.sub(CommandBarAspect.id, (e: KeyEvent) => {\n const keyboardEvent = new KeyboardEvent(e.type, e.data);\n document.dispatchEvent(keyboardEvent);\n });\n }\n\n if (uiUi) {\n uiUi.registerHudItem(<commandBar.CommandBar />);\n }\n\n return commandBar;\n }\n}\n\nCommandBarAspect.addRuntime(CommandBarUI);\n"]}
1
+ {"version":3,"sources":["command-bar.ui.runtime.tsx"],"names":["RESULT_LIMIT","CommandBarUI","addSearcher","commandSearcher","searcherSlot","register","addCommand","originalCommands","forEach","id","commandId","getCommand","undefined","DuplicateCommandError","commands","map","x","displayName","action","keybinding","commandSlot","command","addKeybinding","updateCommandsSearcher","updaters","next","run","commandEntry","relevantCommands","values","find","filter","pop","flat","update","key","mousetrap","bind","constructor","isBrowser","Mousetrap","MousetrapStub","CommandSearcher","setVisibility","trigger","term","limit","searchers","searcher","test","search","visible","styles","commanderUi","provider","uiUi","pubsubUI","config","commandSlots","commandBar","commandBarCommands","open","openCommandBarKeybinding","sub","CommandBarAspect","e","keyboardEvent","KeyboardEvent","type","data","document","dispatchEvent","registerHudItem","UIAspect","PubsubAspect","ReactRouterAspect","Slot","withType","UIRuntime","addRuntime"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport flatten from 'lodash.flatten';\nimport Mousetrap from 'mousetrap';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport UIAspect, { UIRuntime, UiUI } from '@teambit/ui';\nimport { PubsubAspect, PubsubUI } from '@teambit/pubsub';\nimport { ReactRouterAspect } from '@teambit/react-router';\nimport { isBrowser } from '@teambit/ui-foundation.ui.is-browser';\nimport { CommandBar } from '@teambit/explorer.ui.command-bar';\nimport { CommandBarAspect } from './command-bar.aspect';\nimport { commandBarCommands } from './command-bar.commands';\nimport { CommandSearcher, SearchProvider } from './searchers';\nimport { Keybinding, CommandHandler, CommandId } from './types';\nimport { DuplicateCommandError } from './duplicate-command-error';\nimport { KeyEvent } from './model/key-event';\nimport { MousetrapStub } from './mousetrap-stub';\nimport { openCommandBarKeybinding } from './keybinding';\n\nimport styles from './command-bar.module.scss';\n\nconst RESULT_LIMIT = 5;\ntype SearcherSlot = SlotRegistry<SearchProvider[]>;\ntype CommandSlot = SlotRegistry<CommandEntry[]>;\n\nexport type CommandEntry = {\n id: CommandId;\n action: CommandHandler;\n keybinding?: Keybinding;\n displayName: string;\n};\n\n/** Quick launch actions. Use the `addSearcher` slot to extend the available actions */\nexport class CommandBarUI {\n private mousetrap = isBrowser ? new Mousetrap() : new MousetrapStub();\n private commandSearcher = new CommandSearcher([]);\n\n /** Opens the command bar */\n open = () => {\n this.setVisibility?.(true);\n return false; // aka prevent default\n };\n\n /** Closes the command bar */\n close = () => {\n this.setVisibility?.(false);\n };\n\n /** Add and autocomplete provider. To support keyboard navigation, each result should have a props `active: boolean`, and `exectue: () => any` */\n addSearcher(...commandSearcher: SearchProvider[]) {\n this.searcherSlot.register(commandSearcher);\n return this;\n }\n\n /**\n * registers a command\n */\n addCommand(...originalCommands: CommandEntry[]) {\n originalCommands.forEach(({ id: commandId }) => {\n if (this.getCommand(commandId) !== undefined) throw new DuplicateCommandError(commandId);\n });\n\n // commands could mutate later on, clone to ensure immutability 👌\n const commands = originalCommands.map((x) => ({\n id: x.id,\n displayName: x.displayName,\n action: x.action,\n keybinding: x.keybinding,\n }));\n\n this.commandSlot.register(commands);\n\n commands.forEach((command) => {\n if (command.keybinding) {\n this.addKeybinding(command.keybinding, command.id);\n }\n });\n\n this.updateCommandsSearcher();\n\n const updaters = commands.map((command) => (next: CommandHandler) => {\n command.action = next;\n });\n return updaters;\n }\n\n /**\n * executes command by name, if exists.\n * @param commandId\n */\n run(commandId: CommandId) {\n const commandEntry = this.getCommand(commandId);\n if (!commandEntry) return undefined;\n\n return commandEntry.action();\n }\n\n /**\n * executes a keyboard shortcut manually\n */\n trigger = (key: string) => {\n this.mousetrap.trigger(key);\n };\n\n private search = (term: string, limit: number = RESULT_LIMIT) => {\n const searchers = flatten(this.searcherSlot.values());\n\n const searcher = searchers.find((x) => x && x.test(term));\n return searcher?.search(term, limit) || [];\n };\n\n private getCommand(id: CommandId) {\n const relevantCommands = this.commandSlot\n .values()\n .map((commands) => commands.find((command) => command.id === id))\n .filter((x) => !!x);\n\n return relevantCommands.pop();\n }\n\n private updateCommandsSearcher() {\n const commands = this.commandSlot.values().flat();\n this.commandSearcher.update(commands);\n }\n\n private addKeybinding(key: Keybinding, command: CommandId) {\n this.mousetrap.bind(key, this.run.bind(this, command));\n }\n\n /**\n * Opens and closes the command bar UI.\n */\n private setVisibility?: (visible: boolean) => void;\n\n /**\n * generate the ui for command bar\n */\n CommandBar = () => {\n const [visible, setVisibility] = useState(false);\n this.setVisibility = setVisibility;\n\n return (\n <CommandBar\n key=\"CommandBarUI\"\n className={styles.commanderUi}\n searcher={this.search}\n placeholder=\"Search anything or type > to only search commands\"\n visible={visible}\n onVisibilityChange={setVisibility}\n />\n );\n };\n\n constructor(private searcherSlot: SearcherSlot, private commandSlot: CommandSlot) {}\n\n static dependencies = [UIAspect, PubsubAspect, ReactRouterAspect];\n static slots = [Slot.withType<SearchProvider>(), Slot.withType<CommandEntry[]>()];\n static runtime = UIRuntime;\n static async provider(\n [uiUi, pubsubUI]: [UiUI | undefined, PubsubUI | undefined],\n config,\n [searcherSlot, commandSlots]: [SearcherSlot, CommandSlot]\n ) {\n const commandBar = new CommandBarUI(searcherSlot, commandSlots);\n\n commandBar.addSearcher(commandBar.commandSearcher);\n commandBar.addCommand({\n id: commandBarCommands.open,\n action: commandBar.open,\n displayName: 'Open command bar',\n keybinding: openCommandBarKeybinding,\n });\n\n if (pubsubUI) {\n pubsubUI.sub(CommandBarAspect.id, (e: KeyEvent) => {\n const keyboardEvent = new KeyboardEvent(e.type, e.data);\n document.dispatchEvent(keyboardEvent);\n });\n }\n\n if (uiUi) {\n uiUi.registerHudItem(<commandBar.CommandBar />);\n }\n\n return commandBar;\n }\n}\n\nCommandBarAspect.addRuntime(CommandBarUI);\n"]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/command-bar",
3
- "version": "0.0.720",
3
+ "version": "0.0.723",
4
4
  "homepage": "https://bit.dev/teambit/explorer/command-bar",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.explorer",
8
8
  "name": "command-bar",
9
- "version": "0.0.720"
9
+ "version": "0.0.723"
10
10
  },
11
11
  "dependencies": {
12
12
  "lodash.flatten": "4.4.0",
@@ -18,11 +18,11 @@
18
18
  "@teambit/harmony": "0.3.3",
19
19
  "@teambit/explorer.ui.command-bar": "1.0.2",
20
20
  "@teambit/base-ui.text.muted-text": "1.0.1",
21
- "@teambit/preview": "0.0.720",
22
- "@teambit/pubsub": "0.0.720",
23
- "@teambit/react-router": "0.0.720",
21
+ "@teambit/preview": "0.0.723",
22
+ "@teambit/pubsub": "0.0.723",
23
+ "@teambit/react-router": "0.0.723",
24
24
  "@teambit/ui-foundation.ui.is-browser": "0.0.486",
25
- "@teambit/ui": "0.0.720",
25
+ "@teambit/ui": "0.0.723",
26
26
  "@teambit/bit-error": "0.0.394",
27
27
  "@teambit/design.ui.styles.ellipsis": "0.0.347",
28
28
  "@teambit/ui-foundation.ui.keycap": "0.0.486"
@@ -39,7 +39,7 @@
39
39
  "@types/node": "12.20.4"
40
40
  },
41
41
  "peerDependencies": {
42
- "@teambit/legacy": "1.0.259",
42
+ "@teambit/legacy": "1.0.261",
43
43
  "react-dom": "^16.8.0 || ^17.0.0",
44
44
  "react": "^16.8.0 || ^17.0.0"
45
45
  },
@@ -67,7 +67,7 @@
67
67
  "react": "-"
68
68
  },
69
69
  "peerDependencies": {
70
- "@teambit/legacy": "1.0.259",
70
+ "@teambit/legacy": "1.0.261",
71
71
  "react-dom": "^16.8.0 || ^17.0.0",
72
72
  "react": "^16.8.0 || ^17.0.0"
73
73
  }
@@ -1,2 +1,2 @@
1
- export const compositions = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.explorer_command-bar@0.0.720/dist/command-bar.composition.js')]
2
- export const overview = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.explorer_command-bar@0.0.720/dist/command-bar.docs.mdx')]
1
+ export const compositions = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.explorer_command-bar@0.0.723/dist/command-bar.composition.js')]
2
+ export const overview = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.explorer_command-bar@0.0.723/dist/command-bar.docs.mdx')]