@opentabs-dev/browser-extension 0.0.38 → 0.0.39
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.
- package/dist/side-panel/App.d.ts.map +1 -1
- package/dist/side-panel/App.js +84 -8
- package/dist/side-panel/App.js.map +1 -1
- package/dist/side-panel/bridge.d.ts +34 -2
- package/dist/side-panel/bridge.d.ts.map +1 -1
- package/dist/side-panel/bridge.js +13 -1
- package/dist/side-panel/bridge.js.map +1 -1
- package/dist/side-panel/components/EmptyStates.js +1 -1
- package/dist/side-panel/components/EmptyStates.js.map +1 -1
- package/dist/side-panel/components/NpmPluginCard.d.ts +14 -0
- package/dist/side-panel/components/NpmPluginCard.d.ts.map +1 -0
- package/dist/side-panel/components/NpmPluginCard.js +19 -0
- package/dist/side-panel/components/NpmPluginCard.js.map +1 -0
- package/dist/side-panel/components/PluginCard.d.ts +5 -1
- package/dist/side-panel/components/PluginCard.d.ts.map +1 -1
- package/dist/side-panel/components/PluginCard.js +3 -2
- package/dist/side-panel/components/PluginCard.js.map +1 -1
- package/dist/side-panel/components/PluginList.d.ts +4 -1
- package/dist/side-panel/components/PluginList.d.ts.map +1 -1
- package/dist/side-panel/components/PluginList.js +2 -2
- package/dist/side-panel/components/PluginList.js.map +1 -1
- package/dist/side-panel/components/PluginMenu.d.ts +16 -0
- package/dist/side-panel/components/PluginMenu.d.ts.map +1 -0
- package/dist/side-panel/components/PluginMenu.js +31 -0
- package/dist/side-panel/components/PluginMenu.js.map +1 -0
- package/dist/side-panel/components/SearchResults.d.ts +24 -0
- package/dist/side-panel/components/SearchResults.d.ts.map +1 -0
- package/dist/side-panel/components/SearchResults.js +28 -0
- package/dist/side-panel/components/SearchResults.js.map +1 -0
- package/dist/side-panel/components/retro/Menu.d.ts +1 -0
- package/dist/side-panel/components/retro/Menu.d.ts.map +1 -1
- package/dist/side-panel/components/retro/Menu.js +3 -0
- package/dist/side-panel/components/retro/Menu.js.map +1 -1
- package/dist/side-panel/side-panel.js +522 -249
- package/dist/side-panel/styles.css +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { FailedPluginState, PluginSearchResult, PluginState } from '../bridge';
|
|
2
|
+
import type { Dispatch, SetStateAction } from 'react';
|
|
3
|
+
interface SearchResultsProps {
|
|
4
|
+
plugins: PluginState[];
|
|
5
|
+
failedPlugins: FailedPluginState[];
|
|
6
|
+
activeTools: Set<string>;
|
|
7
|
+
setPlugins: Dispatch<SetStateAction<PluginState[]>>;
|
|
8
|
+
toolFilter: string;
|
|
9
|
+
npmResults: PluginSearchResult[];
|
|
10
|
+
npmSearching: boolean;
|
|
11
|
+
installingPlugins: Set<string>;
|
|
12
|
+
onInstall: (name: string) => void;
|
|
13
|
+
installErrors: Map<string, string>;
|
|
14
|
+
onUpdate?: (pluginName: string) => void;
|
|
15
|
+
onRemove?: (pluginName: string) => void;
|
|
16
|
+
removingPlugins?: Set<string>;
|
|
17
|
+
}
|
|
18
|
+
declare const SearchResults: {
|
|
19
|
+
({ plugins, activeTools, setPlugins, toolFilter, npmResults, npmSearching, installingPlugins, onInstall, installErrors, onUpdate, onRemove, removingPlugins, }: SearchResultsProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
displayName: string;
|
|
21
|
+
};
|
|
22
|
+
export { SearchResults };
|
|
23
|
+
export type { SearchResultsProps };
|
|
24
|
+
//# sourceMappingURL=SearchResults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchResults.d.ts","sourceRoot":"","sources":["../../../src/side-panel/components/SearchResults.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAa,cAAc,EAAE,MAAM,OAAO,CAAC;AAEjE,UAAU,kBAAkB;IAC1B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC/B;AAcD,QAAA,MAAM,aAAa;oKAahB,kBAAkB;;CA6DpB,CAAC;AAIF,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { NpmPluginCard } from './NpmPluginCard';
|
|
3
|
+
import { PluginList } from './PluginList';
|
|
4
|
+
import { Loader } from './retro/Loader';
|
|
5
|
+
import { matchesPlugin } from '../bridge';
|
|
6
|
+
/**
|
|
7
|
+
* Extracts a normalized short name from an npm package name for deduplication.
|
|
8
|
+
* "@opentabs-dev/opentabs-plugin-slack" → "slack"
|
|
9
|
+
* "opentabs-plugin-datadog" → "datadog"
|
|
10
|
+
* "slack" → "slack"
|
|
11
|
+
*/
|
|
12
|
+
const extractShortName = (name) => (name.split('/').pop() ?? name).replace(/^opentabs-plugin-/, '');
|
|
13
|
+
const SectionHeader = ({ children }) => (_jsx("div", { className: "font-head text-muted-foreground mb-1.5 text-[10px] tracking-widest uppercase", children: children }));
|
|
14
|
+
const SearchResults = ({ plugins, activeTools, setPlugins, toolFilter, npmResults, npmSearching, installingPlugins, onInstall, installErrors, onUpdate, onRemove, removingPlugins, }) => {
|
|
15
|
+
const filterLower = toolFilter.toLowerCase();
|
|
16
|
+
// Filter installed plugins using matchesPlugin (name + displayName + tools)
|
|
17
|
+
const installedMatches = filterLower ? plugins.filter(p => matchesPlugin(p, filterLower)) : plugins;
|
|
18
|
+
// Filter out npm results whose short name matches an already-installed plugin's short name
|
|
19
|
+
const installedShortNames = new Set(plugins.map(p => extractShortName(p.name)));
|
|
20
|
+
const availableResults = npmResults.filter(r => !installedShortNames.has(extractShortName(r.name)));
|
|
21
|
+
const hasInstalledResults = installedMatches.length > 0;
|
|
22
|
+
const showNoResults = toolFilter && !hasInstalledResults && !npmSearching && availableResults.length === 0;
|
|
23
|
+
return (_jsxs("div", { className: "space-y-4", children: [hasInstalledResults && (_jsxs("div", { children: [_jsx(SectionHeader, { children: "Installed" }), _jsx(PluginList, { plugins: installedMatches, failedPlugins: [], activeTools: activeTools, setPlugins: setPlugins, toolFilter: "", onUpdate: onUpdate, onRemove: onRemove, removingPlugins: removingPlugins })] })), toolFilter &&
|
|
24
|
+
(npmSearching ? (_jsx("div", { className: "flex justify-center py-4", children: _jsx(Loader, { size: "sm" }) })) : (availableResults.length > 0 && (_jsxs("div", { children: [_jsx(SectionHeader, { children: "Available" }), _jsx("div", { className: "space-y-2", children: availableResults.map(result => (_jsx(NpmPluginCard, { plugin: result, installing: installingPlugins.has(result.name), error: installErrors.get(result.name) ?? null, onInstall: () => onInstall(result.name) }, result.name))) })] })))), showNoResults && _jsx("div", { className: "text-muted-foreground py-8 text-center text-sm", children: "No results" })] }));
|
|
25
|
+
};
|
|
26
|
+
SearchResults.displayName = 'SearchResults';
|
|
27
|
+
export { SearchResults };
|
|
28
|
+
//# sourceMappingURL=SearchResults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchResults.js","sourceRoot":"","sources":["../../../src/side-panel/components/SearchResults.tsx"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ declare const MenuObject: React.FC<DropdownMenuPrimitive.DropdownMenuProps> & {
|
|
|
4
4
|
Trigger: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
5
5
|
Content: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
6
6
|
Item: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
7
|
+
Separator: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
7
8
|
};
|
|
8
9
|
export { MenuObject as Menu };
|
|
9
10
|
//# sourceMappingURL=Menu.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../../src/side-panel/components/retro/Menu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,qBAAqB,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../../src/side-panel/components/retro/Menu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,qBAAqB,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA4C/B,QAAA,MAAM,UAAU;;;;;CAKd,CAAC;AAEH,OAAO,EAAE,UAAU,IAAI,IAAI,EAAE,CAAC"}
|
|
@@ -8,10 +8,13 @@ const MenuContent = React.forwardRef(({ className, sideOffset = 4, ...props }, r
|
|
|
8
8
|
MenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
|
|
9
9
|
const MenuItem = React.forwardRef(({ className, ...props }, ref) => (_jsx(DropdownMenuPrimitive.Item, { ref: ref, className: cn('hover:bg-accent data-[highlighted]:bg-accent cursor-pointer px-3 py-2 font-sans text-xs outline-none', className), ...props })));
|
|
10
10
|
MenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
|
|
11
|
+
const MenuSeparator = React.forwardRef(({ className, ...props }, ref) => (_jsx(DropdownMenuPrimitive.Separator, { ref: ref, className: cn('bg-border -mx-1 my-1 h-px', className), ...props })));
|
|
12
|
+
MenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
|
|
11
13
|
const MenuObject = Object.assign(Menu, {
|
|
12
14
|
Trigger: MenuTrigger,
|
|
13
15
|
Content: MenuContent,
|
|
14
16
|
Item: MenuItem,
|
|
17
|
+
Separator: MenuSeparator,
|
|
15
18
|
});
|
|
16
19
|
export { MenuObject as Menu };
|
|
17
20
|
//# sourceMappingURL=Menu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../../../src/side-panel/components/retro/Menu.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,KAAK,qBAAqB,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC;AAExC,MAAM,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC;AAElD,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAGlC,CAAC,EAAE,SAAS,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClD,KAAC,qBAAqB,CAAC,MAAM,cAC3B,KAAC,qBAAqB,CAAC,OAAO,IAC5B,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,EAAE,CAAC,4DAA4D,EAAE,SAAS,CAAC,KAClF,KAAK,GACT,GAC2B,CAChC,CAAC,CAAC;AACH,WAAW,CAAC,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC;AAEpE,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAG/B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,KAAC,qBAAqB,CAAC,IAAI,IACzB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,sGAAsG,EACtG,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC,CAAC;AACH,QAAQ,CAAC,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC;AAE9D,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,WAAW;IACpB,IAAI,EAAE,QAAQ;
|
|
1
|
+
{"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../../../src/side-panel/components/retro/Menu.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,KAAK,qBAAqB,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC;AAExC,MAAM,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC;AAElD,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAGlC,CAAC,EAAE,SAAS,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClD,KAAC,qBAAqB,CAAC,MAAM,cAC3B,KAAC,qBAAqB,CAAC,OAAO,IAC5B,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,EAAE,CAAC,4DAA4D,EAAE,SAAS,CAAC,KAClF,KAAK,GACT,GAC2B,CAChC,CAAC,CAAC;AACH,WAAW,CAAC,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC;AAEpE,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAG/B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,KAAC,qBAAqB,CAAC,IAAI,IACzB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,sGAAsG,EACtG,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC,CAAC;AACH,QAAQ,CAAC,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC;AAE9D,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAGpC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,KAAC,qBAAqB,CAAC,SAAS,IAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,2BAA2B,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAChH,CAAC,CAAC;AACH,aAAa,CAAC,WAAW,GAAG,qBAAqB,CAAC,SAAS,CAAC,WAAW,CAAC;AAExE,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,WAAW;IACpB,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,aAAa;CACzB,CAAC,CAAC;AAEH,OAAO,EAAE,UAAU,IAAI,IAAI,EAAE,CAAC"}
|