@teambit/command-bar 0.0.1083 → 0.0.1085

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.
@@ -137,7 +137,13 @@ export class CommandBarUI {
137
137
  /**
138
138
  * generate the ui for command bar
139
139
  */
140
- CommandBar = ({ ResultComponent }: { ResultComponent?: ComponentType<ResultsComponentProps> }) => {
140
+ CommandBar = ({
141
+ ResultComponent,
142
+ onEnter,
143
+ }: {
144
+ ResultComponent?: ComponentType<ResultsComponentProps>;
145
+ onEnter?: (value: string) => void;
146
+ }) => {
141
147
  const [visible, setVisibility] = useState(false);
142
148
  this.setVisibility = setVisibility;
143
149
 
@@ -148,6 +154,7 @@ export class CommandBarUI {
148
154
  return (
149
155
  <CommandBar
150
156
  {...results}
157
+ onEnter={onEnter}
151
158
  key="CommandBarUI"
152
159
  className={styles.commanderUi}
153
160
  placeholder="Search anything or type > to only search commands"
@@ -53,8 +53,9 @@ export declare class CommandBarUI {
53
53
  /**
54
54
  * generate the ui for command bar
55
55
  */
56
- CommandBar: ({ ResultComponent }: {
56
+ CommandBar: ({ ResultComponent, onEnter, }: {
57
57
  ResultComponent?: React.ComponentType<ResultsComponentProps<import("@teambit/explorer.ui.command-bar").SearchResult[], any>> | undefined;
58
+ onEnter?: ((value: string) => void) | undefined;
58
59
  }) => JSX.Element;
59
60
  constructor(searcherSlot: SearcherSlot, commandSlot: CommandSlot, config: CommandBarConfig);
60
61
  static dependencies: import("@teambit/harmony").Aspect[];
@@ -238,7 +238,8 @@ class CommandBarUI {
238
238
  });
239
239
  (0, _defineProperty2().default)(this, "setVisibility", void 0);
240
240
  (0, _defineProperty2().default)(this, "CommandBar", ({
241
- ResultComponent
241
+ ResultComponent,
242
+ onEnter
242
243
  }) => {
243
244
  const [visible, setVisibility] = (0, _react().useState)(false);
244
245
  this.setVisibility = setVisibility;
@@ -246,6 +247,7 @@ class CommandBarUI {
246
247
  debounce: this.config.debounce
247
248
  });
248
249
  return /*#__PURE__*/_react().default.createElement(_explorerUi().CommandBar, (0, _extends2().default)({}, results, {
250
+ onEnter: onEnter,
249
251
  key: "CommandBarUI",
250
252
  className: _commandBarModule().default.commanderUi,
251
253
  placeholder: "Search anything or type > to only search commands",
@@ -1 +1 @@
1
- {"version":3,"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","config","isBrowser","Mousetrap","MousetrapStub","CommandSearcher","setVisibility","trigger","term","limit","searchers","flatten","searcher","test","search","items","ResultComponent","visible","useState","results","useSearcher","debounce","styles","commanderUi","provider","uiUi","pubsubUI","commandSlots","commandBar","commandBarCommands","open","openCommandBarKeybinding","sub","CommandBarAspect","e","keyboardEvent","KeyboardEvent","type","data","document","dispatchEvent","registerHudItem","UIAspect","PubsubAspect","ReactRouterAspect","Slot","withType","UIRuntime","addRuntime"],"sources":["command-bar.ui.runtime.tsx"],"sourcesContent":["import React, { useState, ComponentType } 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, useSearcher, ResultsComponentProps } 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';\nimport styles from './command-bar.module.scss';\n\nconst RESULT_LIMIT = 5;\ntype SearcherSlot = SlotRegistry<SearchProvider[]>;\ntype CommandSlot = SlotRegistry<CommandEntry[]>;\n\nexport type CommandBarConfig = {\n debounce?: number;\n};\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) || { items: [] };\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 setVisibility?: (visible: boolean) => void;\n\n /**\n * generate the ui for command bar\n */\n CommandBar = ({ ResultComponent }: { ResultComponent?: ComponentType<ResultsComponentProps> }) => {\n const [visible, setVisibility] = useState(false);\n this.setVisibility = setVisibility;\n\n const results = useSearcher(this.search, {\n debounce: this.config.debounce,\n });\n\n return (\n <CommandBar\n {...results}\n key=\"CommandBarUI\"\n className={styles.commanderUi}\n placeholder=\"Search anything or type > to only search commands\"\n visible={visible}\n ResultsComponent={ResultComponent}\n onVisibilityChange={setVisibility}\n autofocus\n />\n );\n };\n\n constructor(private searcherSlot: SearcherSlot, private commandSlot: CommandSlot, private config: CommandBarConfig) {}\n\n static dependencies = [UIAspect, PubsubAspect, ReactRouterAspect];\n static slots = [Slot.withType<SearchProvider>(), Slot.withType<CommandEntry[]>()];\n static defaultConfig: CommandBarConfig = {\n debounce: undefined,\n };\n\n static runtime = UIRuntime;\n\n static async provider(\n [uiUi, pubsubUI]: [UiUI | undefined, PubsubUI | undefined],\n config: CommandBarConfig,\n [searcherSlot, commandSlots]: [SearcherSlot, CommandSlot]\n ) {\n const commandBar = new CommandBarUI(searcherSlot, commandSlots, config);\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 key=\"commandBar\" />);\n }\n\n return commandBar;\n }\n}\n\nCommandBarAspect.addRuntime(CommandBarUI);\n"],"mappings":"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"}
1
+ {"version":3,"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","config","isBrowser","Mousetrap","MousetrapStub","CommandSearcher","setVisibility","trigger","term","limit","searchers","flatten","searcher","test","search","items","ResultComponent","onEnter","visible","useState","results","useSearcher","debounce","styles","commanderUi","provider","uiUi","pubsubUI","commandSlots","commandBar","commandBarCommands","open","openCommandBarKeybinding","sub","CommandBarAspect","e","keyboardEvent","KeyboardEvent","type","data","document","dispatchEvent","registerHudItem","UIAspect","PubsubAspect","ReactRouterAspect","Slot","withType","UIRuntime","addRuntime"],"sources":["command-bar.ui.runtime.tsx"],"sourcesContent":["import React, { useState, ComponentType } 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, useSearcher, ResultsComponentProps } 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';\nimport styles from './command-bar.module.scss';\n\nconst RESULT_LIMIT = 5;\ntype SearcherSlot = SlotRegistry<SearchProvider[]>;\ntype CommandSlot = SlotRegistry<CommandEntry[]>;\n\nexport type CommandBarConfig = {\n debounce?: number;\n};\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) || { items: [] };\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 setVisibility?: (visible: boolean) => void;\n\n /**\n * generate the ui for command bar\n */\n CommandBar = ({\n ResultComponent,\n onEnter,\n }: {\n ResultComponent?: ComponentType<ResultsComponentProps>;\n onEnter?: (value: string) => void;\n }) => {\n const [visible, setVisibility] = useState(false);\n this.setVisibility = setVisibility;\n\n const results = useSearcher(this.search, {\n debounce: this.config.debounce,\n });\n\n return (\n <CommandBar\n {...results}\n onEnter={onEnter}\n key=\"CommandBarUI\"\n className={styles.commanderUi}\n placeholder=\"Search anything or type > to only search commands\"\n visible={visible}\n ResultsComponent={ResultComponent}\n onVisibilityChange={setVisibility}\n autofocus\n />\n );\n };\n\n constructor(private searcherSlot: SearcherSlot, private commandSlot: CommandSlot, private config: CommandBarConfig) {}\n\n static dependencies = [UIAspect, PubsubAspect, ReactRouterAspect];\n static slots = [Slot.withType<SearchProvider>(), Slot.withType<CommandEntry[]>()];\n static defaultConfig: CommandBarConfig = {\n debounce: undefined,\n };\n\n static runtime = UIRuntime;\n\n static async provider(\n [uiUi, pubsubUI]: [UiUI | undefined, PubsubUI | undefined],\n config: CommandBarConfig,\n [searcherSlot, commandSlots]: [SearcherSlot, CommandSlot]\n ) {\n const commandBar = new CommandBarUI(searcherSlot, commandSlots, config);\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 key=\"commandBar\" />);\n }\n\n return commandBar;\n }\n}\n\nCommandBarAspect.addRuntime(CommandBarUI);\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.explorer_command-bar@0.0.1083/dist/command-bar.composition.js';
2
- import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.explorer_command-bar@0.0.1083/dist/command-bar.docs.mdx';
1
+ import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.explorer_command-bar@0.0.1085/dist/command-bar.composition.js';
2
+ import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.explorer_command-bar@0.0.1085/dist/command-bar.docs.mdx';
3
3
 
4
4
  export const compositions = [compositions_0];
5
5
  export const overview = [overview_0];
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/command-bar",
3
- "version": "0.0.1083",
3
+ "version": "0.0.1085",
4
4
  "homepage": "https://bit.cloud/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.1083"
9
+ "version": "0.0.1085"
10
10
  },
11
11
  "dependencies": {
12
12
  "lodash.flatten": "4.4.0",
@@ -16,14 +16,14 @@
16
16
  "core-js": "^3.0.0",
17
17
  "@babel/runtime": "7.20.0",
18
18
  "@teambit/harmony": "0.4.6",
19
- "@teambit/explorer.ui.command-bar": "2.0.3",
20
19
  "@teambit/base-ui.text.muted-text": "1.0.1",
21
20
  "@teambit/design.ui.styles.ellipsis": "0.0.357",
22
- "@teambit/preview": "0.0.1083",
23
- "@teambit/pubsub": "0.0.1083",
24
- "@teambit/react-router": "0.0.1083",
21
+ "@teambit/preview": "0.0.1085",
22
+ "@teambit/pubsub": "0.0.1085",
23
+ "@teambit/explorer.ui.command-bar": "2.0.4",
24
+ "@teambit/react-router": "0.0.1085",
25
25
  "@teambit/ui-foundation.ui.is-browser": "0.0.495",
26
- "@teambit/ui": "0.0.1083",
26
+ "@teambit/ui": "0.0.1085",
27
27
  "@teambit/bit-error": "0.0.402",
28
28
  "@teambit/ui-foundation.ui.keycap": "0.0.495"
29
29
  },
@@ -39,7 +39,7 @@
39
39
  "@types/testing-library__jest-dom": "5.9.5"
40
40
  },
41
41
  "peerDependencies": {
42
- "@teambit/legacy": "1.0.507",
42
+ "@teambit/legacy": "1.0.510",
43
43
  "react": "^16.8.0 || ^17.0.0",
44
44
  "react-dom": "^16.8.0 || ^17.0.0"
45
45
  },