@launchdarkly/toolbar 0.10.1 → 0.11.0-beta.1
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/README.md +48 -132
- package/dist/index.d.ts +3 -0
- package/dist/js/index.js +1730 -994
- package/dist/plugins/FlagOverridePlugin.d.ts +57 -0
- package/dist/plugins/index.d.ts +2 -0
- package/dist/tests/DevServerProvider.test.d.ts +1 -0
- package/dist/tests/ExpandedToolbarContent.test.d.ts +1 -0
- package/dist/tests/FlagSdkOverrideProvider.test.d.ts +1 -0
- package/dist/types/devServer.d.ts +2 -2
- package/dist/types/plugin.d.ts +31 -0
- package/dist/ui/Toolbar/Header/Header.d.ts +2 -0
- package/dist/ui/Toolbar/Header/components/ActionButtons.d.ts +1 -0
- package/dist/ui/Toolbar/LaunchDarklyToolbar.d.ts +8 -2
- package/dist/ui/Toolbar/TabContent/FlagDevServerTabContent.d.ts +1 -0
- package/dist/ui/Toolbar/TabContent/FlagSdkOverrideTabContent.d.ts +6 -0
- package/dist/ui/Toolbar/TabContent/SettingsTabContent.d.ts +6 -1
- package/dist/ui/Toolbar/components/ExpandedToolbarContent.d.ts +4 -1
- package/dist/ui/Toolbar/components/LocalFlagControls.css.d.ts +4 -0
- package/dist/ui/Toolbar/components/LocalFlagControls.d.ts +20 -0
- package/dist/ui/Toolbar/components/TabContentRenderer.d.ts +4 -1
- package/dist/ui/Toolbar/constants/index.d.ts +1 -1
- package/dist/ui/Toolbar/constants/virtualization.d.ts +4 -0
- package/dist/ui/Toolbar/context/{LaunchDarklyToolbarProvider.d.ts → DevServerProvider.d.ts} +6 -6
- package/dist/ui/Toolbar/context/FlagSdkOverrideProvider.d.ts +19 -0
- package/dist/ui/Toolbar/context/index.d.ts +3 -0
- package/dist/ui/Toolbar/types/toolbar.d.ts +7 -1
- package/package.json +5 -3
- package/dist/ui/Toolbar/TabContent/FlagTabContent.d.ts +0 -1
- package/dist/ui/Toolbar/constants/config.d.ts +0 -3
- /package/dist/ui/Toolbar/TabContent/{FlagTabContent.css.d.ts → FlagDevServerTabContent.css.d.ts} +0 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { LDClient, LDPlugin, LDDebugOverride, LDPluginMetadata } from 'launchdarkly-js-client-sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration options for the FlagOverridePlugin
|
|
4
|
+
*/
|
|
5
|
+
export type FlagOverridePluginConfig = {
|
|
6
|
+
/** Namespace for localStorage keys. Defaults to 'ld-flag-override' */
|
|
7
|
+
storageNamespace?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare class FlagOverridePlugin implements LDPlugin {
|
|
10
|
+
private debugOverride?;
|
|
11
|
+
private config;
|
|
12
|
+
private ldClient;
|
|
13
|
+
constructor(config?: FlagOverridePluginConfig);
|
|
14
|
+
/**
|
|
15
|
+
* Returns plugin metadata
|
|
16
|
+
*/
|
|
17
|
+
getMetadata(): LDPluginMetadata;
|
|
18
|
+
/**
|
|
19
|
+
* Called when the plugin is registered with the LaunchDarkly client
|
|
20
|
+
*/
|
|
21
|
+
register(ldClient: LDClient): void;
|
|
22
|
+
/**
|
|
23
|
+
* Called when the debug interface is available
|
|
24
|
+
* Loads any existing overrides from localStorage
|
|
25
|
+
*/
|
|
26
|
+
registerDebug(debugOverride: LDDebugOverride): void;
|
|
27
|
+
private loadExistingOverrides;
|
|
28
|
+
/**
|
|
29
|
+
* Sets an override value for a feature flag and persists it to localStorage
|
|
30
|
+
* @param flagKey - The key of the flag to override
|
|
31
|
+
* @param value - The value to set for the flag
|
|
32
|
+
*/
|
|
33
|
+
setOverride(flagKey: string, value: unknown): void;
|
|
34
|
+
/**
|
|
35
|
+
* Removes an override for a specific feature flag
|
|
36
|
+
* @param flagKey - The key of the flag to remove the override for
|
|
37
|
+
*/
|
|
38
|
+
removeOverride(flagKey: string): void;
|
|
39
|
+
/**
|
|
40
|
+
* Clears all feature flag overrides from both memory and localStorage
|
|
41
|
+
*/
|
|
42
|
+
clearAllOverrides(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Returns all currently active feature flag overrides
|
|
45
|
+
* @returns Record of flag keys to their override values
|
|
46
|
+
*/
|
|
47
|
+
getAllOverrides(): Record<string, unknown>;
|
|
48
|
+
/**
|
|
49
|
+
* Returns the LaunchDarkly client instance
|
|
50
|
+
* @returns The LaunchDarkly client
|
|
51
|
+
*/
|
|
52
|
+
getClient(): LDClient | null;
|
|
53
|
+
private getStorage;
|
|
54
|
+
private persistOverride;
|
|
55
|
+
private removePersistedOverride;
|
|
56
|
+
private clearPersistedOverrides;
|
|
57
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -12,11 +12,11 @@ export interface EnhancedFlag {
|
|
|
12
12
|
enabled: boolean;
|
|
13
13
|
}
|
|
14
14
|
export interface LdToolbarConfig {
|
|
15
|
-
devServerUrl
|
|
15
|
+
devServerUrl?: string;
|
|
16
16
|
pollIntervalInMs: number;
|
|
17
17
|
projectKey?: string;
|
|
18
18
|
showEnvironmentInfo?: boolean;
|
|
19
|
-
|
|
19
|
+
onDebugOverride?: (flagKey: string, value: any, isOverride: boolean) => void;
|
|
20
20
|
onError?: (error: string) => void;
|
|
21
21
|
}
|
|
22
22
|
export interface ToolbarState {
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { LDClient, LDDebugOverride, LDFlagSet, LDFlagValue, LDPlugin } from 'launchdarkly-js-client-sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Interface for flag override plugins that can be used with the LaunchDarkly Toolbar
|
|
4
|
+
*/
|
|
5
|
+
export interface IFlagOverridePlugin extends LDPlugin, LDDebugOverride {
|
|
6
|
+
/**
|
|
7
|
+
* Sets an override value for a feature flag
|
|
8
|
+
* @param flagKey - The key of the flag to override
|
|
9
|
+
* @param value - The value to set for the flag
|
|
10
|
+
*/
|
|
11
|
+
setOverride(flagKey: string, value: LDFlagValue): void;
|
|
12
|
+
/**
|
|
13
|
+
* Removes an override for a specific feature flag
|
|
14
|
+
* @param flagKey - The key of the flag to remove the override for
|
|
15
|
+
*/
|
|
16
|
+
removeOverride(flagKey: string): void;
|
|
17
|
+
/**
|
|
18
|
+
* Clears all feature flag overrides
|
|
19
|
+
*/
|
|
20
|
+
clearAllOverrides(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Returns all currently active feature flag overrides
|
|
23
|
+
* @returns Record of flag keys to their override values
|
|
24
|
+
*/
|
|
25
|
+
getAllOverrides(): LDFlagSet;
|
|
26
|
+
/**
|
|
27
|
+
* Returns the LaunchDarkly client instance
|
|
28
|
+
* @returns The LaunchDarkly client with allFlags method
|
|
29
|
+
*/
|
|
30
|
+
getClient(): LDClient | null;
|
|
31
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Dispatch, SetStateAction } from 'react';
|
|
2
|
+
import { ToolbarMode } from '../types/toolbar';
|
|
2
3
|
export interface HeaderProps {
|
|
3
4
|
searchTerm: string;
|
|
4
5
|
onSearch: (searchTerm: string) => void;
|
|
@@ -6,5 +7,6 @@ export interface HeaderProps {
|
|
|
6
7
|
searchIsExpanded: boolean;
|
|
7
8
|
setSearchIsExpanded: Dispatch<SetStateAction<boolean>>;
|
|
8
9
|
label: string;
|
|
10
|
+
mode: ToolbarMode;
|
|
9
11
|
}
|
|
10
12
|
export declare function Header(props: HeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import { ToolbarPosition } from './types/toolbar';
|
|
2
|
-
|
|
1
|
+
import { ToolbarMode, ToolbarPosition } from './types/toolbar';
|
|
2
|
+
import type { IFlagOverridePlugin } from '../../types/plugin';
|
|
3
|
+
export interface LdToolbarProps {
|
|
4
|
+
flagOverridePlugin?: IFlagOverridePlugin;
|
|
5
|
+
mode: ToolbarMode;
|
|
6
|
+
}
|
|
7
|
+
export declare function LdToolbar(props: LdToolbarProps): import("react/jsx-runtime").JSX.Element;
|
|
3
8
|
export interface LaunchDarklyToolbarProps {
|
|
4
9
|
devServerUrl?: string;
|
|
5
10
|
projectKey?: string;
|
|
11
|
+
flagOverridePlugin?: IFlagOverridePlugin;
|
|
6
12
|
pollIntervalInMs?: number;
|
|
7
13
|
position?: ToolbarPosition;
|
|
8
14
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function FlagDevServerTabContent(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IFlagOverridePlugin } from '../../../types/plugin';
|
|
2
|
+
interface FlagSdkOverrideTabContentProps {
|
|
3
|
+
flagOverridePlugin?: IFlagOverridePlugin;
|
|
4
|
+
}
|
|
5
|
+
export declare function FlagSdkOverrideTabContent(props: FlagSdkOverrideTabContentProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
@@ -1 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { type ToolbarMode } from '../types/toolbar';
|
|
2
|
+
interface SettingsTabContentProps {
|
|
3
|
+
mode: ToolbarMode;
|
|
4
|
+
}
|
|
5
|
+
export declare function SettingsTabContent(props: SettingsTabContentProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Dispatch, SetStateAction } from 'react';
|
|
2
|
-
import { ActiveTabId } from '../types';
|
|
2
|
+
import { ActiveTabId, ToolbarMode } from '../types';
|
|
3
|
+
import type { IFlagOverridePlugin } from '../../../types/plugin';
|
|
3
4
|
interface ExpandedToolbarContentProps {
|
|
4
5
|
isExpanded: boolean;
|
|
5
6
|
activeTab: ActiveTabId;
|
|
@@ -10,6 +11,8 @@ interface ExpandedToolbarContentProps {
|
|
|
10
11
|
onClose: () => void;
|
|
11
12
|
onTabChange: (tabId: string) => void;
|
|
12
13
|
setSearchIsExpanded: Dispatch<SetStateAction<boolean>>;
|
|
14
|
+
flagOverridePlugin?: IFlagOverridePlugin;
|
|
15
|
+
mode: ToolbarMode;
|
|
13
16
|
}
|
|
14
17
|
export declare function ExpandedToolbarContent(props: ExpandedToolbarContentProps): import("react/jsx-runtime").JSX.Element;
|
|
15
18
|
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { LocalFlag } from '../context';
|
|
2
|
+
interface LocalBooleanFlagControlProps {
|
|
3
|
+
flag: LocalFlag;
|
|
4
|
+
onOverride: (value: boolean) => void;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function LocalBooleanFlagControl(props: LocalBooleanFlagControlProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
interface LocalStringNumberFlagControlProps {
|
|
9
|
+
flag: LocalFlag;
|
|
10
|
+
onOverride: (value: string | number) => void;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function LocalStringNumberFlagControl(props: LocalStringNumberFlagControlProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
interface LocalObjectFlagControlProps {
|
|
15
|
+
flag: LocalFlag;
|
|
16
|
+
onOverride: (value: any) => void;
|
|
17
|
+
disabled?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function LocalObjectFlagControl(props: LocalObjectFlagControlProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export {};
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { TabId } from '../types';
|
|
1
|
+
import { TabId, ToolbarMode } from '../types';
|
|
2
|
+
import type { IFlagOverridePlugin } from '../../../types/plugin';
|
|
2
3
|
interface TabContentRendererProps {
|
|
3
4
|
activeTab: TabId;
|
|
4
5
|
slideDirection: number;
|
|
6
|
+
flagOverridePlugin?: IFlagOverridePlugin;
|
|
7
|
+
mode: ToolbarMode;
|
|
5
8
|
}
|
|
6
9
|
export declare function TabContentRenderer(props: TabContentRendererProps): import("react/jsx-runtime").JSX.Element | null;
|
|
7
10
|
export {};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { EASING, ANIMATION_CONFIG, DIMENSIONS, SHADOWS } from './animations';
|
|
2
|
-
export {
|
|
2
|
+
export { VIRTUALIZATION } from './virtualization';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type { FC, ReactNode } from 'react';
|
|
2
2
|
import { LdToolbarConfig, ToolbarState } from '../../../types/devServer';
|
|
3
3
|
import { ToolbarPosition } from '../types/toolbar';
|
|
4
|
-
interface
|
|
4
|
+
interface DevServerContextValue {
|
|
5
5
|
state: ToolbarState & {
|
|
6
6
|
availableProjects: string[];
|
|
7
7
|
currentProjectKey: string | null;
|
|
@@ -14,11 +14,11 @@ interface LaunchDarklyToolbarContextValue {
|
|
|
14
14
|
switchProject: (projectKey: string) => Promise<void>;
|
|
15
15
|
handlePositionChange: (position: ToolbarPosition) => void;
|
|
16
16
|
}
|
|
17
|
-
export declare const
|
|
18
|
-
export interface
|
|
19
|
-
children:
|
|
17
|
+
export declare const useDevServerContext: () => DevServerContextValue;
|
|
18
|
+
export interface DevServerProviderProps {
|
|
19
|
+
children: ReactNode;
|
|
20
20
|
config: LdToolbarConfig;
|
|
21
21
|
initialPosition?: ToolbarPosition;
|
|
22
22
|
}
|
|
23
|
-
export declare const
|
|
23
|
+
export declare const DevServerProvider: FC<DevServerProviderProps>;
|
|
24
24
|
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { IFlagOverridePlugin } from '../../../types/plugin';
|
|
2
|
+
interface LocalFlag {
|
|
3
|
+
key: string;
|
|
4
|
+
name: string;
|
|
5
|
+
currentValue: any;
|
|
6
|
+
isOverridden: boolean;
|
|
7
|
+
type: 'boolean' | 'string' | 'number' | 'object';
|
|
8
|
+
}
|
|
9
|
+
interface FlagSdkOverrideContextType {
|
|
10
|
+
flags: Record<string, LocalFlag>;
|
|
11
|
+
isLoading: boolean;
|
|
12
|
+
}
|
|
13
|
+
interface FlagSdkOverrideProviderProps {
|
|
14
|
+
children: React.ReactNode;
|
|
15
|
+
flagOverridePlugin: IFlagOverridePlugin;
|
|
16
|
+
}
|
|
17
|
+
export declare function FlagSdkOverrideProvider({ children, flagOverridePlugin }: FlagSdkOverrideProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export declare function useFlagSdkOverrideContext(): FlagSdkOverrideContextType;
|
|
19
|
+
export type { LocalFlag, FlagSdkOverrideContextType };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { DevServerProvider, useDevServerContext } from './DevServerProvider';
|
|
2
|
+
export { SearchProvider, useSearchContext } from './SearchProvider';
|
|
3
|
+
export { FlagSdkOverrideProvider, useFlagSdkOverrideContext, type LocalFlag, type FlagSdkOverrideContextType, } from './FlagSdkOverrideProvider';
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
export type TabId = '
|
|
1
|
+
export type TabId = 'flag-sdk' | 'flag-dev-server' | 'settings';
|
|
2
2
|
export type ActiveTabId = TabId | undefined;
|
|
3
3
|
export declare const TAB_ORDER: readonly TabId[];
|
|
4
|
+
export type ToolbarMode = 'dev-server' | 'sdk';
|
|
5
|
+
export declare const DEV_SERVER_TABS: readonly TabId[];
|
|
6
|
+
export declare const SDK_MODE_TABS: readonly TabId[];
|
|
7
|
+
export declare function getToolbarMode(devServerUrl?: string): ToolbarMode;
|
|
8
|
+
export declare function getTabsForMode(mode: ToolbarMode, hasFlagOverridePlugin: boolean): readonly TabId[];
|
|
9
|
+
export declare function getDefaultActiveTab(mode: ToolbarMode): TabId;
|
|
4
10
|
export interface FeatureFlag {
|
|
5
11
|
id: string;
|
|
6
12
|
name: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@launchdarkly/toolbar",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0-beta.1",
|
|
4
4
|
"description": "A React component that provides a developer-friendly toolbar for interacting with LaunchDarkly during development",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"launchdarkly",
|
|
@@ -80,6 +80,7 @@
|
|
|
80
80
|
"@vanilla-extract/vite-plugin": "^5.1.1",
|
|
81
81
|
"http-server": "^14.1.1",
|
|
82
82
|
"jsdom": "^26.1.0",
|
|
83
|
+
"launchdarkly-js-client-sdk": "^3.9.0",
|
|
83
84
|
"oxlint": "^1.0.0",
|
|
84
85
|
"prettier": "^3.5.3",
|
|
85
86
|
"react": "^19.1.1",
|
|
@@ -91,8 +92,9 @@
|
|
|
91
92
|
"webpack": "5.101.3"
|
|
92
93
|
},
|
|
93
94
|
"peerDependencies": {
|
|
94
|
-
"
|
|
95
|
-
"react
|
|
95
|
+
"launchdarkly-js-client-sdk": "^3.9.0",
|
|
96
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
97
|
+
"react-dom": "^18.0.0 || ^19.0.0"
|
|
96
98
|
},
|
|
97
99
|
"private": false,
|
|
98
100
|
"publishConfig": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function FlagTabContent(): import("react/jsx-runtime").JSX.Element;
|
/package/dist/ui/Toolbar/TabContent/{FlagTabContent.css.d.ts → FlagDevServerTabContent.css.d.ts}
RENAMED
|
File without changes
|