@launchdarkly/toolbar 2.3.0-beta.1 → 2.3.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.
Files changed (147) hide show
  1. package/README.md +255 -19
  2. package/cdn/toolbar.min.js +660 -15
  3. package/cdn/toolbar.min.js.LICENSE.txt +14 -0
  4. package/dist/angular/launchdarkly-toolbar.service.d.ts +104 -0
  5. package/dist/angular.cjs +439 -0
  6. package/dist/angular.cjs.map +1 -0
  7. package/dist/angular.d.ts +51 -0
  8. package/dist/core/index.d.ts +0 -1
  9. package/dist/core/services/DevServerClient.d.ts +9 -3
  10. package/dist/core/services/FlagStateManager.d.ts +2 -0
  11. package/dist/core/styles/constants.d.ts +24 -0
  12. package/dist/core/styles/index.d.ts +2 -0
  13. package/dist/core/styles/shadowDomStyles.d.ts +41 -0
  14. package/dist/core/tests/mocks/providers.d.ts +132 -0
  15. package/dist/core/ui/Buttons/IconButton.d.ts +2 -1
  16. package/dist/core/ui/JsonEditor/JsonEditor.d.ts +2 -1
  17. package/dist/core/ui/Toolbar/LaunchDarklyToolbar.d.ts +2 -8
  18. package/dist/core/ui/Toolbar/components/AuthenticationModal/AuthenticationModal.d.ts +1 -1
  19. package/dist/core/ui/Toolbar/components/CircleLogo.d.ts +1 -2
  20. package/dist/core/ui/Toolbar/components/{FlagKeyWithCopy.css.d.ts → CopyableText.css.d.ts} +1 -1
  21. package/dist/core/ui/Toolbar/components/CopyableText.d.ts +18 -0
  22. package/dist/core/ui/Toolbar/components/FilterOptions/FilterOptions.css.d.ts +1 -0
  23. package/dist/core/ui/Toolbar/components/FilterOptions/FilterOptions.d.ts +1 -0
  24. package/dist/core/ui/Toolbar/components/FilterOptions/ShareUrlButton.css.d.ts +2 -0
  25. package/dist/core/ui/Toolbar/components/FilterOptions/ShareUrlButton.d.ts +7 -0
  26. package/dist/core/ui/Toolbar/components/IFrameErrorScreen/IFrameErrorScreen.css.d.ts +7 -0
  27. package/dist/core/ui/Toolbar/components/IFrameErrorScreen/IFrameErrorScreen.d.ts +5 -0
  28. package/dist/core/ui/Toolbar/components/IFrameErrorScreen/index.d.ts +1 -0
  29. package/dist/core/ui/Toolbar/components/LoadingScreen/LoadingScreen.css.d.ts +7 -0
  30. package/dist/core/ui/Toolbar/components/LoadingScreen/LoadingScreen.d.ts +5 -0
  31. package/dist/core/ui/Toolbar/components/LoadingScreen/index.d.ts +1 -0
  32. package/dist/core/ui/Toolbar/components/ShareStatePopover/ShareStatePopover.css.d.ts +10 -0
  33. package/dist/core/ui/Toolbar/components/ShareStatePopover/ShareStatePopover.d.ts +15 -0
  34. package/dist/core/ui/Toolbar/components/ShareStatePopover/index.d.ts +2 -0
  35. package/dist/core/ui/Toolbar/components/icons/ShareIcon.d.ts +5 -0
  36. package/dist/core/ui/Toolbar/components/icons/index.d.ts +2 -0
  37. package/dist/core/ui/Toolbar/components/index.d.ts +1 -2
  38. package/dist/core/ui/Toolbar/components/new/AnalyticsConsentToast/AnalyticsConsentToast.d.ts +5 -0
  39. package/dist/core/ui/Toolbar/components/new/AnalyticsConsentToast/AnalyticsConsentToast.module.css.d.ts +13 -0
  40. package/dist/core/ui/Toolbar/components/new/AnalyticsConsentToast/index.d.ts +1 -0
  41. package/dist/core/ui/Toolbar/components/new/ContentActions.module.css.d.ts +4 -0
  42. package/dist/core/ui/Toolbar/components/new/Contexts/AddContextForm.d.ts +6 -0
  43. package/dist/core/ui/Toolbar/components/new/Contexts/AddContextForm.module.css.d.ts +14 -0
  44. package/dist/core/ui/Toolbar/components/new/Contexts/ContextItem.d.ts +9 -0
  45. package/dist/core/ui/Toolbar/components/new/Contexts/ContextItem.module.css.d.ts +19 -0
  46. package/dist/core/ui/Toolbar/components/new/Contexts/ContextList.d.ts +1 -0
  47. package/dist/core/ui/Toolbar/components/new/Contexts/ContextList.module.css.d.ts +8 -0
  48. package/dist/core/ui/Toolbar/components/new/Contexts/ContextListContent.d.ts +1 -0
  49. package/dist/core/ui/Toolbar/components/new/Contexts/index.d.ts +4 -0
  50. package/dist/core/ui/Toolbar/components/new/ExpandedToolbarContent.d.ts +4 -3
  51. package/dist/core/ui/Toolbar/components/new/FeatureFlags/FlagControls.d.ts +5 -5
  52. package/dist/core/ui/Toolbar/components/new/FeatureFlags/FlagItem.d.ts +2 -1
  53. package/dist/core/ui/Toolbar/components/new/FeatureFlags/FlagListContent.d.ts +1 -1
  54. package/dist/core/ui/Toolbar/components/new/FilterOverlay/FilterOverlay.module.css.d.ts +1 -0
  55. package/dist/core/ui/Toolbar/components/new/Settings/Privacy/PrivacySettings.d.ts +1 -0
  56. package/dist/core/ui/Toolbar/components/new/Settings/SettingsContent.module.css.d.ts +2 -0
  57. package/dist/core/ui/Toolbar/components/new/Settings/ShareButton.d.ts +5 -0
  58. package/dist/core/ui/Toolbar/components/new/Settings/ShareButton.module.css.d.ts +1 -0
  59. package/dist/core/ui/Toolbar/components/new/Settings/index.d.ts +1 -1
  60. package/dist/core/ui/Toolbar/components/new/Tooltip.d.ts +3 -1
  61. package/dist/core/ui/Toolbar/components/new/context/TabSearchProvider.d.ts +7 -5
  62. package/dist/core/ui/Toolbar/components/new/types.d.ts +2 -2
  63. package/dist/core/ui/Toolbar/constants/animations.d.ts +14 -0
  64. package/dist/core/ui/Toolbar/context/DevServerProvider.d.ts +2 -0
  65. package/dist/core/ui/Toolbar/context/api/AuthProvider.d.ts +1 -0
  66. package/dist/core/ui/Toolbar/context/api/ContextsProvider.d.ts +19 -0
  67. package/dist/core/ui/Toolbar/context/api/FlagsProvider.d.ts +1 -0
  68. package/dist/core/ui/Toolbar/context/api/IFrameProvider.d.ts +2 -0
  69. package/dist/core/ui/Toolbar/context/api/index.d.ts +1 -0
  70. package/dist/core/ui/Toolbar/context/state/ToolbarStateProvider.d.ts +6 -0
  71. package/dist/core/ui/Toolbar/context/telemetry/AnalyticsPreferencesProvider.d.ts +14 -0
  72. package/dist/core/ui/Toolbar/context/telemetry/InternalClientProvider.d.ts +11 -1
  73. package/dist/core/ui/Toolbar/context/telemetry/TelemetryBundleProvider.d.ts +2 -0
  74. package/dist/core/ui/Toolbar/context/telemetry/index.d.ts +1 -0
  75. package/dist/core/ui/Toolbar/hooks/index.d.ts +2 -0
  76. package/dist/core/ui/Toolbar/hooks/useLocalStorage.d.ts +10 -0
  77. package/dist/core/ui/Toolbar/hooks/useReducedMotion.d.ts +5 -0
  78. package/dist/core/ui/Toolbar/hooks/useToolbarAnimations.d.ts +1 -1
  79. package/dist/core/ui/Toolbar/types/ldApi.d.ts +1 -0
  80. package/dist/core/ui/Toolbar/types/toolbar.d.ts +1 -1
  81. package/dist/core/ui/Toolbar/utils/context.d.ts +33 -0
  82. package/dist/core/ui/Toolbar/utils/localStorage.d.ts +21 -2
  83. package/dist/core/utils/analytics.d.ts +48 -2
  84. package/dist/core/utils/feedback.d.ts +18 -0
  85. package/dist/core/utils/urlOverrides.d.ts +105 -0
  86. package/dist/flags/toolbarFlags.d.ts +3 -2
  87. package/dist/index.cjs +8 -4
  88. package/dist/index.cjs.map +1 -1
  89. package/dist/js/374.js +446 -0
  90. package/dist/js/374.js.map +1 -0
  91. package/dist/js/816.js +56 -0
  92. package/dist/js/816.js.map +1 -0
  93. package/dist/js/96.js +38 -0
  94. package/dist/js/96.js.map +1 -0
  95. package/dist/js/angular.js +353 -0
  96. package/dist/js/angular.js.map +1 -0
  97. package/dist/js/index.js +3 -527
  98. package/dist/js/index.js.map +1 -1
  99. package/dist/js/plugins.js +1 -0
  100. package/dist/js/react.js +2 -0
  101. package/dist/js/types-entry.js +0 -0
  102. package/dist/js/vue.js +34 -0
  103. package/dist/js/vue.js.map +1 -0
  104. package/dist/plugins.cjs +483 -0
  105. package/dist/plugins.cjs.map +1 -0
  106. package/dist/plugins.d.ts +21 -0
  107. package/dist/react/useLaunchDarklyToolbar.d.ts +1 -1
  108. package/dist/react.cjs +127 -0
  109. package/dist/react.cjs.map +1 -0
  110. package/dist/react.d.ts +25 -0
  111. package/dist/types-entry.cjs +20 -0
  112. package/dist/types-entry.cjs.map +1 -0
  113. package/dist/types-entry.d.ts +12 -0
  114. package/dist/vue/useLaunchDarklyToolbar.d.ts +20 -0
  115. package/dist/vue.cjs +122 -0
  116. package/dist/vue.cjs.map +1 -0
  117. package/dist/vue.d.ts +24 -0
  118. package/package.json +145 -48
  119. package/dist/core/ui/Toolbar/components/FlagKeyWithCopy.d.ts +0 -6
  120. package/dist/core/ui/Toolbar/components/legacy/ActionButtonsContainer.css.d.ts +0 -4
  121. package/dist/core/ui/Toolbar/components/legacy/ActionButtonsContainer.d.ts +0 -6
  122. package/dist/core/ui/Toolbar/components/legacy/ExpandedToolbarContentLegacy.d.ts +0 -25
  123. package/dist/core/ui/Toolbar/components/legacy/FlagControls.css.d.ts +0 -12
  124. package/dist/core/ui/Toolbar/components/legacy/FlagControls.d.ts +0 -20
  125. package/dist/core/ui/Toolbar/components/legacy/Header/Header.css.d.ts +0 -20
  126. package/dist/core/ui/Toolbar/components/legacy/Header/Header.d.ts +0 -13
  127. package/dist/core/ui/Toolbar/components/legacy/Header/components/ActionButtons.d.ts +0 -12
  128. package/dist/core/ui/Toolbar/components/legacy/Header/components/EnvironmentLabel.d.ts +0 -5
  129. package/dist/core/ui/Toolbar/components/legacy/Header/components/LogoSection.d.ts +0 -6
  130. package/dist/core/ui/Toolbar/components/legacy/Header/components/SearchSection.d.ts +0 -8
  131. package/dist/core/ui/Toolbar/components/legacy/Header/components/index.d.ts +0 -4
  132. package/dist/core/ui/Toolbar/components/legacy/LocalFlagControls.css.d.ts +0 -5
  133. package/dist/core/ui/Toolbar/components/legacy/LocalFlagControls.d.ts +0 -25
  134. package/dist/core/ui/Toolbar/components/legacy/LocalObjectFlagControlListItem.css.d.ts +0 -4
  135. package/dist/core/ui/Toolbar/components/legacy/LocalObjectFlagControlListItem.d.ts +0 -13
  136. package/dist/core/ui/Toolbar/components/legacy/TabContent/EventsTabContent.css.d.ts +0 -24
  137. package/dist/core/ui/Toolbar/components/legacy/TabContent/EventsTabContent.d.ts +0 -7
  138. package/dist/core/ui/Toolbar/components/legacy/TabContent/FlagDevServerTabContent.css.d.ts +0 -10
  139. package/dist/core/ui/Toolbar/components/legacy/TabContent/FlagDevServerTabContent.d.ts +0 -5
  140. package/dist/core/ui/Toolbar/components/legacy/TabContent/FlagSdkOverrideTabContent.d.ts +0 -7
  141. package/dist/core/ui/Toolbar/components/legacy/TabContent/SettingsTab.css.d.ts +0 -13
  142. package/dist/core/ui/Toolbar/components/legacy/TabContent/SettingsTabContent.d.ts +0 -10
  143. package/dist/core/ui/Toolbar/components/legacy/TabContentRenderer.css.d.ts +0 -1
  144. package/dist/core/ui/Toolbar/components/legacy/TabContentRenderer.d.ts +0 -16
  145. package/dist/core/ui/Toolbar/components/legacy/index.d.ts +0 -1
  146. package/dist/core/ui/Toolbar/components/new/Settings/SettingsContent.d.ts +0 -1
  147. /package/dist/{react → core}/lazyLoadToolbar.d.ts +0 -0
package/dist/react.cjs ADDED
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ lazyLoadToolbar: ()=>lazyLoadToolbar,
28
+ useLaunchDarklyToolbar: ()=>useLaunchDarklyToolbar
29
+ });
30
+ const external_react_namespaceObject = require("react");
31
+ function getWindow() {
32
+ return window;
33
+ }
34
+ async function lazyLoadToolbar(signal, url) {
35
+ const existing = getWindow().LaunchDarklyToolbar;
36
+ if (existing) return Promise.resolve(existing);
37
+ await lazyLoad(signal, url);
38
+ const toolbarModule = getWindow().LaunchDarklyToolbar;
39
+ if (!toolbarModule) throw new Error(`Unable to detect LaunchDarklyToolbar global from ${url}`);
40
+ return toolbarModule;
41
+ }
42
+ async function lazyLoad(signal, url) {
43
+ const existingScript = document.querySelector(`script[src="${url}"]`);
44
+ if (existingScript) {
45
+ if ('true' === existingScript.dataset.loaded) return Promise.resolve();
46
+ return new Promise((resolve, reject)=>{
47
+ existingScript.addEventListener('load', ()=>{
48
+ if (!signal.aborted) {
49
+ existingScript.dataset.loaded = 'true';
50
+ resolve();
51
+ }
52
+ });
53
+ existingScript.addEventListener('error', (error)=>{
54
+ if (!signal.aborted) reject(error);
55
+ });
56
+ });
57
+ }
58
+ const script = document.createElement("script");
59
+ script.src = url;
60
+ script.crossOrigin = 'anonymous';
61
+ script.referrerPolicy = 'origin';
62
+ const waitForLoad = new Promise((resolve, reject)=>{
63
+ script.addEventListener('load', ()=>{
64
+ if (!signal.aborted) {
65
+ script.dataset.loaded = 'true';
66
+ resolve();
67
+ }
68
+ });
69
+ script.addEventListener('error', (error)=>{
70
+ if (!signal.aborted) reject(error);
71
+ });
72
+ });
73
+ document.body.appendChild(script);
74
+ try {
75
+ await waitForLoad;
76
+ } catch (error) {
77
+ console.log(error);
78
+ throw new Error(`Could not load LaunchDarkly developer toolbar bundle from ${url}`);
79
+ }
80
+ }
81
+ var package_namespaceObject = {
82
+ rE: "2.3.1"
83
+ };
84
+ function useLaunchDarklyToolbar(args) {
85
+ const { toolbarBundleUrl, enabled, ...initConfig } = args;
86
+ const configRef = (0, external_react_namespaceObject.useRef)(null);
87
+ const url = toolbarBundleUrl ?? versionToCdn(package_namespaceObject.rE);
88
+ (0, external_react_namespaceObject.useEffect)(()=>{
89
+ if (false === enabled) return;
90
+ if (null === configRef.current) configRef.current = initConfig;
91
+ }, [
92
+ enabled,
93
+ initConfig
94
+ ]);
95
+ (0, external_react_namespaceObject.useEffect)(()=>{
96
+ if (false === enabled || null === configRef.current) return;
97
+ const controller = new AbortController();
98
+ let cleanup = ()=>{};
99
+ lazyLoadToolbar(controller.signal, url).then((importedToolbar)=>{
100
+ if (null === configRef.current) return;
101
+ cleanup = importedToolbar.init(configRef.current);
102
+ }).catch((error)=>{
103
+ console.error('[LaunchDarkly Toolbar] Failed to initialize:', error);
104
+ });
105
+ return ()=>{
106
+ controller.abort();
107
+ cleanup();
108
+ };
109
+ }, [
110
+ enabled,
111
+ url
112
+ ]);
113
+ }
114
+ function versionToCdn(version = 'latest') {
115
+ return `https://unpkg.com/@launchdarkly/toolbar@${version}/cdn/toolbar.min.js`;
116
+ }
117
+ exports.lazyLoadToolbar = __webpack_exports__.lazyLoadToolbar;
118
+ exports.useLaunchDarklyToolbar = __webpack_exports__.useLaunchDarklyToolbar;
119
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
120
+ "lazyLoadToolbar",
121
+ "useLaunchDarklyToolbar"
122
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
123
+ Object.defineProperty(exports, '__esModule', {
124
+ value: true
125
+ });
126
+
127
+ //# sourceMappingURL=react.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.cjs","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../src/core/lazyLoadToolbar.ts","../src/react/useLaunchDarklyToolbar.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { LaunchDarklyToolbar } from '../index';\n\ninterface WindowWithMaybeToolbar extends Window {\n LaunchDarklyToolbar?: LaunchDarklyToolbar;\n}\n\nfunction getWindow(): WindowWithMaybeToolbar {\n return window;\n}\n\nexport default async function lazyLoadToolbar(signal: AbortSignal, url: string): Promise<LaunchDarklyToolbar> {\n const existing = getWindow().LaunchDarklyToolbar;\n\n if (existing) {\n return Promise.resolve(existing);\n }\n\n await lazyLoad(signal, url);\n\n const toolbarModule = getWindow().LaunchDarklyToolbar;\n if (!toolbarModule) {\n throw new Error(`Unable to detect LaunchDarklyToolbar global from ${url}`);\n }\n\n return toolbarModule;\n}\n\nasync function lazyLoad(signal: AbortSignal, url: string): Promise<void> {\n // Check if a script with this URL already exists\n const existingScript = document.querySelector(`script[src=\"${url}\"]`) as HTMLScriptElement | null;\n\n if (existingScript) {\n // If script already exists and is loaded, return immediately\n if (existingScript.dataset.loaded === 'true') {\n return Promise.resolve();\n }\n\n // If script exists but is still loading, wait for it to complete\n return new Promise<void>((resolve, reject) => {\n existingScript.addEventListener('load', () => {\n if (!signal.aborted) {\n existingScript.dataset.loaded = 'true';\n resolve();\n }\n });\n existingScript.addEventListener('error', (error) => {\n if (!signal.aborted) {\n reject(error);\n }\n });\n });\n }\n\n // Create new script element\n const script = document.createElement('script');\n script.src = url;\n script.crossOrigin = 'anonymous';\n script.referrerPolicy = 'origin';\n\n const waitForLoad = new Promise<void>((resolve, reject) => {\n script.addEventListener('load', () => {\n if (!signal.aborted) {\n script.dataset.loaded = 'true';\n resolve();\n }\n });\n script.addEventListener('error', (error) => {\n if (!signal.aborted) {\n reject(error);\n }\n });\n });\n\n document.body.appendChild(script);\n\n try {\n await waitForLoad;\n } catch (error) {\n console.log(error);\n throw new Error(`Could not load LaunchDarkly developer toolbar bundle from ${url}`);\n }\n}\n","import { useEffect, useRef } from 'react';\n\nimport lazyLoadToolbar from '../core/lazyLoadToolbar';\nimport type { InitializationConfig } from '../types';\nimport packageJson from '../../package.json';\n\ninterface UseLaunchDarklyToolbarConfig extends InitializationConfig {\n /**\n * URL to load the toolbar bundle from.\n * Use this when developing the toolbar itself locally.\n *\n * Example: `'http://localhost:5764/toolbar.min.js'`\n *\n * Default: CDN URL based on package version\n */\n toolbarBundleUrl?: string;\n\n /**\n * Whether the toolbar should be loaded and displayed.\n *\n * Default: `true`\n */\n enabled?: boolean;\n}\n\nexport default function useLaunchDarklyToolbar(args: UseLaunchDarklyToolbarConfig) {\n const { toolbarBundleUrl, enabled, ...initConfig } = args;\n const configRef = useRef<InitializationConfig | null>(null);\n const url = toolbarBundleUrl ?? versionToCdn(packageJson.version);\n\n useEffect(() => {\n if (enabled === false) {\n return;\n }\n\n if (configRef.current === null) {\n configRef.current = initConfig;\n }\n }, [enabled, initConfig]);\n\n useEffect(() => {\n if (enabled === false || configRef.current === null) {\n return;\n }\n\n const controller = new AbortController();\n\n let cleanup: () => void = () => {};\n lazyLoadToolbar(controller.signal, url)\n .then((importedToolbar) => {\n if (configRef.current === null) {\n return;\n }\n\n cleanup = importedToolbar.init(configRef.current);\n })\n .catch((error) => {\n console.error('[LaunchDarkly Toolbar] Failed to initialize:', error);\n });\n\n return () => {\n controller.abort();\n cleanup();\n };\n }, [enabled, url]);\n}\n\nfunction versionToCdn(version = 'latest'): string {\n return `https://unpkg.com/@launchdarkly/toolbar@${version}/cdn/toolbar.min.js`;\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","getWindow","window","lazyLoadToolbar","signal","url","existing","Promise","lazyLoad","toolbarModule","Error","existingScript","document","resolve","reject","error","script","waitForLoad","console","useLaunchDarklyToolbar","args","toolbarBundleUrl","enabled","initConfig","configRef","useRef","versionToCdn","packageJson","useEffect","controller","AbortController","cleanup","importedToolbar","version"],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * React-specific exports for the LaunchDarkly Toolbar
3
+ *
4
+ * This entry point provides React hooks and utilities for integrating
5
+ * the toolbar with React applications.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import { useLaunchDarklyToolbar } from '@launchdarkly/toolbar/react';
10
+ * import { FlagOverridePlugin } from '@launchdarkly/toolbar/plugins';
11
+ *
12
+ * // Create plugins outside the component (only once)
13
+ * const flagOverridePlugin = new FlagOverridePlugin();
14
+ *
15
+ * function App() {
16
+ * useLaunchDarklyToolbar({
17
+ * flagOverridePlugin,
18
+ * });
19
+ *
20
+ * return <YourApp />;
21
+ * }
22
+ * ```
23
+ */
24
+ export { default as useLaunchDarklyToolbar } from './react/useLaunchDarklyToolbar';
25
+ export { default as lazyLoadToolbar } from './core/lazyLoadToolbar';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.r = (exports1)=>{
5
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
6
+ value: 'Module'
7
+ });
8
+ Object.defineProperty(exports1, '__esModule', {
9
+ value: true
10
+ });
11
+ };
12
+ })();
13
+ var __webpack_exports__ = {};
14
+ __webpack_require__.r(__webpack_exports__);
15
+ for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
16
+ Object.defineProperty(exports, '__esModule', {
17
+ value: true
18
+ });
19
+
20
+ //# sourceMappingURL=types-entry.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-entry.cjs","sources":["webpack/runtime/make_namespace_object"],"sourcesContent":["// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};"],"names":["__webpack_require__","Symbol","Object"],"mappings":";;;IACAA,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,MAAlB,OAAOC,UAA0BA,OAAO,WAAW,EACrDC,OAAO,cAAc,CAAC,UAASD,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEC,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Type-only exports for the LaunchDarkly Toolbar
3
+ *
4
+ * This entry point provides TypeScript types without any runtime code,
5
+ * useful for type-only imports in your application.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import type { InitializationConfig, ToolbarConfig } from '@launchdarkly/toolbar/types';
10
+ * ```
11
+ */
12
+ export type * from './types';
@@ -0,0 +1,20 @@
1
+ import type { InitializationConfig } from '../types';
2
+ interface UseLaunchDarklyToolbarConfig extends InitializationConfig {
3
+ /**
4
+ * URL to load the toolbar bundle from.
5
+ * Use this when developing the toolbar itself locally.
6
+ *
7
+ * Example: `'http://localhost:5764/toolbar.min.js'`
8
+ *
9
+ * Default: CDN URL based on package version
10
+ */
11
+ toolbarBundleUrl?: string;
12
+ /**
13
+ * Whether the toolbar should be loaded and displayed.
14
+ *
15
+ * Default: `true`
16
+ */
17
+ enabled?: boolean;
18
+ }
19
+ export default function useLaunchDarklyToolbar(args: UseLaunchDarklyToolbarConfig): void;
20
+ export {};
package/dist/vue.cjs ADDED
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ lazyLoadToolbar: ()=>lazyLoadToolbar,
28
+ useLaunchDarklyToolbar: ()=>useLaunchDarklyToolbar
29
+ });
30
+ const external_vue_namespaceObject = require("vue");
31
+ function getWindow() {
32
+ return window;
33
+ }
34
+ async function lazyLoadToolbar(signal, url) {
35
+ const existing = getWindow().LaunchDarklyToolbar;
36
+ if (existing) return Promise.resolve(existing);
37
+ await lazyLoad(signal, url);
38
+ const toolbarModule = getWindow().LaunchDarklyToolbar;
39
+ if (!toolbarModule) throw new Error(`Unable to detect LaunchDarklyToolbar global from ${url}`);
40
+ return toolbarModule;
41
+ }
42
+ async function lazyLoad(signal, url) {
43
+ const existingScript = document.querySelector(`script[src="${url}"]`);
44
+ if (existingScript) {
45
+ if ('true' === existingScript.dataset.loaded) return Promise.resolve();
46
+ return new Promise((resolve, reject)=>{
47
+ existingScript.addEventListener('load', ()=>{
48
+ if (!signal.aborted) {
49
+ existingScript.dataset.loaded = 'true';
50
+ resolve();
51
+ }
52
+ });
53
+ existingScript.addEventListener('error', (error)=>{
54
+ if (!signal.aborted) reject(error);
55
+ });
56
+ });
57
+ }
58
+ const script = document.createElement("script");
59
+ script.src = url;
60
+ script.crossOrigin = 'anonymous';
61
+ script.referrerPolicy = 'origin';
62
+ const waitForLoad = new Promise((resolve, reject)=>{
63
+ script.addEventListener('load', ()=>{
64
+ if (!signal.aborted) {
65
+ script.dataset.loaded = 'true';
66
+ resolve();
67
+ }
68
+ });
69
+ script.addEventListener('error', (error)=>{
70
+ if (!signal.aborted) reject(error);
71
+ });
72
+ });
73
+ document.body.appendChild(script);
74
+ try {
75
+ await waitForLoad;
76
+ } catch (error) {
77
+ console.log(error);
78
+ throw new Error(`Could not load LaunchDarkly developer toolbar bundle from ${url}`);
79
+ }
80
+ }
81
+ var package_namespaceObject = {
82
+ rE: "2.3.1"
83
+ };
84
+ function useLaunchDarklyToolbar(args) {
85
+ const { toolbarBundleUrl, enabled, ...initConfig } = args;
86
+ const configRef = (0, external_vue_namespaceObject.ref)(null);
87
+ const cleanupRef = (0, external_vue_namespaceObject.ref)(null);
88
+ const controllerRef = (0, external_vue_namespaceObject.ref)(null);
89
+ const url = toolbarBundleUrl ?? versionToCdn(package_namespaceObject.rE);
90
+ (0, external_vue_namespaceObject.onMounted)(()=>{
91
+ if (false === enabled) return;
92
+ if (null === configRef.value || null == initConfig) configRef.value = initConfig;
93
+ const controller = new AbortController();
94
+ controllerRef.value = controller;
95
+ let cleanup = ()=>{};
96
+ lazyLoadToolbar(controller.signal, url).then((importedToolbar)=>{
97
+ if (null === configRef.value) return;
98
+ cleanup = importedToolbar.init(configRef.value);
99
+ cleanupRef.value = cleanup;
100
+ }).catch((error)=>{
101
+ console.error('[LaunchDarkly Toolbar] Failed to initialize:', error);
102
+ });
103
+ });
104
+ (0, external_vue_namespaceObject.onUnmounted)(()=>{
105
+ if (controllerRef.value) controllerRef.value.abort();
106
+ if (cleanupRef.value) cleanupRef.value();
107
+ });
108
+ }
109
+ function versionToCdn(version = 'latest') {
110
+ return `https://unpkg.com/@launchdarkly/toolbar@${version}/cdn/toolbar.min.js`;
111
+ }
112
+ exports.lazyLoadToolbar = __webpack_exports__.lazyLoadToolbar;
113
+ exports.useLaunchDarklyToolbar = __webpack_exports__.useLaunchDarklyToolbar;
114
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
115
+ "lazyLoadToolbar",
116
+ "useLaunchDarklyToolbar"
117
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
118
+ Object.defineProperty(exports, '__esModule', {
119
+ value: true
120
+ });
121
+
122
+ //# sourceMappingURL=vue.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue.cjs","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../src/core/lazyLoadToolbar.ts","../src/vue/useLaunchDarklyToolbar.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { LaunchDarklyToolbar } from '../index';\n\ninterface WindowWithMaybeToolbar extends Window {\n LaunchDarklyToolbar?: LaunchDarklyToolbar;\n}\n\nfunction getWindow(): WindowWithMaybeToolbar {\n return window;\n}\n\nexport default async function lazyLoadToolbar(signal: AbortSignal, url: string): Promise<LaunchDarklyToolbar> {\n const existing = getWindow().LaunchDarklyToolbar;\n\n if (existing) {\n return Promise.resolve(existing);\n }\n\n await lazyLoad(signal, url);\n\n const toolbarModule = getWindow().LaunchDarklyToolbar;\n if (!toolbarModule) {\n throw new Error(`Unable to detect LaunchDarklyToolbar global from ${url}`);\n }\n\n return toolbarModule;\n}\n\nasync function lazyLoad(signal: AbortSignal, url: string): Promise<void> {\n // Check if a script with this URL already exists\n const existingScript = document.querySelector(`script[src=\"${url}\"]`) as HTMLScriptElement | null;\n\n if (existingScript) {\n // If script already exists and is loaded, return immediately\n if (existingScript.dataset.loaded === 'true') {\n return Promise.resolve();\n }\n\n // If script exists but is still loading, wait for it to complete\n return new Promise<void>((resolve, reject) => {\n existingScript.addEventListener('load', () => {\n if (!signal.aborted) {\n existingScript.dataset.loaded = 'true';\n resolve();\n }\n });\n existingScript.addEventListener('error', (error) => {\n if (!signal.aborted) {\n reject(error);\n }\n });\n });\n }\n\n // Create new script element\n const script = document.createElement('script');\n script.src = url;\n script.crossOrigin = 'anonymous';\n script.referrerPolicy = 'origin';\n\n const waitForLoad = new Promise<void>((resolve, reject) => {\n script.addEventListener('load', () => {\n if (!signal.aborted) {\n script.dataset.loaded = 'true';\n resolve();\n }\n });\n script.addEventListener('error', (error) => {\n if (!signal.aborted) {\n reject(error);\n }\n });\n });\n\n document.body.appendChild(script);\n\n try {\n await waitForLoad;\n } catch (error) {\n console.log(error);\n throw new Error(`Could not load LaunchDarkly developer toolbar bundle from ${url}`);\n }\n}\n","import { onMounted, onUnmounted, ref } from 'vue';\n\nimport lazyLoadToolbar from '../core/lazyLoadToolbar';\nimport type { InitializationConfig } from '../types';\nimport packageJson from '../../package.json';\n\ninterface UseLaunchDarklyToolbarConfig extends InitializationConfig {\n /**\n * URL to load the toolbar bundle from.\n * Use this when developing the toolbar itself locally.\n *\n * Example: `'http://localhost:5764/toolbar.min.js'`\n *\n * Default: CDN URL based on package version\n */\n toolbarBundleUrl?: string;\n\n /**\n * Whether the toolbar should be loaded and displayed.\n *\n * Default: `true`\n */\n enabled?: boolean;\n}\n\nexport default function useLaunchDarklyToolbar(args: UseLaunchDarklyToolbarConfig) {\n const { toolbarBundleUrl, enabled, ...initConfig } = args;\n const configRef = ref<InitializationConfig | null>(null);\n const cleanupRef = ref<(() => void) | null>(null);\n const controllerRef = ref<AbortController | null>(null);\n const url = toolbarBundleUrl ?? versionToCdn(packageJson.version);\n\n onMounted(() => {\n if (enabled === false) {\n return;\n }\n\n if (configRef.value === null || initConfig == null) {\n configRef.value = initConfig;\n }\n\n const controller = new AbortController();\n controllerRef.value = controller;\n\n let cleanup: () => void = () => {};\n lazyLoadToolbar(controller.signal, url)\n .then((importedToolbar) => {\n if (configRef.value === null) {\n return;\n }\n\n cleanup = importedToolbar.init(configRef.value);\n cleanupRef.value = cleanup;\n })\n .catch((error) => {\n console.error('[LaunchDarkly Toolbar] Failed to initialize:', error);\n });\n });\n\n onUnmounted(() => {\n if (controllerRef.value) {\n controllerRef.value.abort();\n }\n if (cleanupRef.value) {\n cleanupRef.value();\n }\n });\n}\n\nfunction versionToCdn(version = 'latest'): string {\n return `https://unpkg.com/@launchdarkly/toolbar@${version}/cdn/toolbar.min.js`;\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","getWindow","window","lazyLoadToolbar","signal","url","existing","Promise","lazyLoad","toolbarModule","Error","existingScript","document","resolve","reject","error","script","waitForLoad","console","useLaunchDarklyToolbar","args","toolbarBundleUrl","enabled","initConfig","configRef","ref","cleanupRef","controllerRef","versionToCdn","packageJson","onMounted","controller","AbortController","cleanup","importedToolbar","onUnmounted","version"],"mappings":"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"}
package/dist/vue.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Vue-specific exports for the LaunchDarkly Toolbar
3
+ *
4
+ * This entry point provides Vue composables and utilities for integrating
5
+ * the toolbar with Vue 3 applications.
6
+ *
7
+ * @example
8
+ * ```vue
9
+ * <script setup lang="ts">
10
+ * import { useLaunchDarklyToolbar } from '@launchdarkly/toolbar/vue';
11
+ * import { FlagOverridePlugin } from '@launchdarkly/toolbar/plugins';
12
+ *
13
+ * // Create plugins outside the component (only once)
14
+ * const flagOverridePlugin = new FlagOverridePlugin();
15
+ *
16
+ * useLaunchDarklyToolbar({
17
+ * flagOverridePlugin,
18
+ * enabled: true,
19
+ * });
20
+ * </script>
21
+ * ```
22
+ */
23
+ export { default as useLaunchDarklyToolbar } from './vue/useLaunchDarklyToolbar';
24
+ export { default as lazyLoadToolbar } from './core/lazyLoadToolbar';
package/package.json CHANGED
@@ -1,13 +1,15 @@
1
1
  {
2
2
  "private": false,
3
3
  "name": "@launchdarkly/toolbar",
4
- "version": "2.3.0-beta.1",
4
+ "version": "2.3.1",
5
5
  "description": "A framework-agnostic developer toolbar for interacting with LaunchDarkly during development",
6
6
  "keywords": [
7
7
  "launchdarkly",
8
8
  "feature-flags",
9
9
  "toolbar",
10
10
  "react",
11
+ "vue",
12
+ "angular",
11
13
  "development",
12
14
  "typescript",
13
15
  "javascript",
@@ -28,6 +30,25 @@
28
30
  "module": "./dist/js/index.js",
29
31
  "types": "./dist/index.d.ts",
30
32
  "typings": "./dist/index.d.ts",
33
+ "typesVersions": {
34
+ "*": {
35
+ "plugins": [
36
+ "./dist/plugins.d.ts"
37
+ ],
38
+ "react": [
39
+ "./dist/react.d.ts"
40
+ ],
41
+ "vue": [
42
+ "./dist/vue.d.ts"
43
+ ],
44
+ "angular": [
45
+ "./dist/angular.d.ts"
46
+ ],
47
+ "types": [
48
+ "./dist/types-entry.d.ts"
49
+ ]
50
+ }
51
+ },
31
52
  "sideEffects": false,
32
53
  "files": [
33
54
  "dist",
@@ -45,73 +66,149 @@
45
66
  "types": "./dist/index.d.ts",
46
67
  "default": "./dist/index.cjs"
47
68
  }
69
+ },
70
+ "./plugins": {
71
+ "import": {
72
+ "types": "./dist/plugins.d.ts",
73
+ "default": "./dist/js/plugins.js"
74
+ },
75
+ "require": {
76
+ "types": "./dist/plugins.d.ts",
77
+ "default": "./dist/plugins.cjs"
78
+ }
79
+ },
80
+ "./react": {
81
+ "import": {
82
+ "types": "./dist/react.d.ts",
83
+ "default": "./dist/js/react.js"
84
+ },
85
+ "require": {
86
+ "types": "./dist/react.d.ts",
87
+ "default": "./dist/react.cjs"
88
+ }
89
+ },
90
+ "./vue": {
91
+ "import": {
92
+ "types": "./dist/vue.d.ts",
93
+ "default": "./dist/js/vue.js"
94
+ },
95
+ "require": {
96
+ "types": "./dist/vue.d.ts",
97
+ "default": "./dist/vue.cjs"
98
+ }
99
+ },
100
+ "./angular": {
101
+ "import": {
102
+ "types": "./dist/angular.d.ts",
103
+ "default": "./dist/js/angular.js"
104
+ },
105
+ "require": {
106
+ "types": "./dist/angular.d.ts",
107
+ "default": "./dist/angular.cjs"
108
+ }
109
+ },
110
+ "./types": {
111
+ "import": {
112
+ "types": "./dist/types-entry.d.ts",
113
+ "default": "./dist/js/types-entry.js"
114
+ },
115
+ "require": {
116
+ "types": "./dist/types-entry.d.ts",
117
+ "default": "./dist/types-entry.cjs"
118
+ }
48
119
  }
49
120
  },
121
+ "scripts": {
122
+ "build": "pnpm run build:lib && pnpm run build:cdn",
123
+ "build:lib": "rslib build",
124
+ "build:cdn": "rslib build --config rslib.config.cdn.ts",
125
+ "dev": "rslib build --watch",
126
+ "dev:cdn": "rslib build --config rslib.config.cdn.ts --watch",
127
+ "test": "vitest run",
128
+ "lint": "oxlint",
129
+ "storybook": "storybook dev -p 6006",
130
+ "build:storybook": "storybook build"
131
+ },
50
132
  "devDependencies": {
51
- "@codemirror/commands": "^6.10.0",
133
+ "@angular/common": "^21.1.5",
134
+ "@angular/core": "^21.2.4",
135
+ "@codemirror/commands": "^6.10.1",
52
136
  "@codemirror/lang-json": "^6.0.2",
53
- "@codemirror/language": "^6.11.3",
54
- "@codemirror/lint": "^6.9.2",
55
- "@codemirror/state": "^6.5.2",
56
- "@codemirror/view": "^6.38.8",
57
- "@launchpad-ui/components": "^0.17.7",
137
+ "@codemirror/language": "^6.12.1",
138
+ "@codemirror/lint": "^6.9.3",
139
+ "@codemirror/state": "^6.5.4",
140
+ "@codemirror/view": "^6.39.11",
141
+ "@launchdarkly/observability": "^1.0.0",
142
+ "@launchdarkly/session-replay": "^1.0.2",
143
+ "@launchpad-ui/components": "^0.17.12",
58
144
  "@launchpad-ui/tokens": "^0.15.1",
59
- "@lezer/highlight": "^1.2.3",
60
- "@react-aria/focus": "^3.21.2",
145
+ "@lezer/highlight": "1.2.1",
146
+ "@react-aria/focus": "^3.21.3",
61
147
  "@react-stately/flags": "^3.1.2",
62
- "@rsbuild/core": "^1.6.9",
63
- "@rsbuild/plugin-react": "^1.4.2",
64
- "@rslib/core": "^0.18.3",
65
- "@storybook/addon-docs": "^10.1.5",
148
+ "@rsbuild/core": "^1.7.3",
149
+ "@rsbuild/plugin-react": "^1.4.5",
150
+ "@rslib/core": "^0.19.3",
151
+ "@storybook/addon-docs": "^10.2.10",
66
152
  "@storybook/addon-essentials": "^9.0.0-alpha.12",
67
153
  "@storybook/addon-interactions": "^9.0.0-alpha.10",
68
- "@storybook/addon-links": "^10.0.8",
69
- "@storybook/addon-onboarding": "^10.1.5",
154
+ "@storybook/addon-links": "^10.2.1",
155
+ "@storybook/addon-onboarding": "^10.2.11",
70
156
  "@storybook/blocks": "^9.0.0-alpha.17",
71
- "@storybook/react": "^10.0.8",
72
- "@storybook/react-vite": "^10.1.4",
157
+ "@storybook/react": "^10.2.4",
158
+ "@storybook/react-vite": "^10.2.10",
73
159
  "@storybook/test": "^9.0.0-alpha.2",
74
- "@tanstack/react-virtual": "^3.13.12",
160
+ "@tanstack/react-virtual": "^3.13.18",
75
161
  "@testing-library/jest-dom": "^6.9.1",
76
- "@testing-library/react": "^16.3.0",
77
- "@types/node": "^24.10.1",
78
- "@types/react": "19.2.6",
162
+ "@testing-library/react": "^16.3.2",
163
+ "@types/node": "^25.3.0",
164
+ "@types/react": "19.2.14",
79
165
  "@types/react-dom": "19.2.3",
80
- "@vanilla-extract/css": "^1.17.5",
81
- "@vanilla-extract/vite-plugin": "^5.1.3",
82
- "@vanilla-extract/webpack-plugin": "^2.3.24",
83
- "@vitest/coverage-v8": "4.0.15",
84
- "css-loader": "^7.1.2",
85
- "jsdom": "^27.2.0",
166
+ "@vanilla-extract/css": "^1.18.0",
167
+ "@vanilla-extract/vite-plugin": "^5.1.4",
168
+ "@vanilla-extract/webpack-plugin": "^2.3.25",
169
+ "@vitest/coverage-v8": "4.0.18",
170
+ "css-loader": "^7.1.3",
171
+ "jsdom": "^27.4.0",
86
172
  "launchdarkly-js-client-sdk": "^3.9.0",
87
- "motion": "^12.23.25",
88
- "oxlint": "^1.32.0",
89
- "react": "^19.2.1",
90
- "react-dom": "^19.2.1",
91
- "storybook": "^10.1.4",
92
- "storybook-addon-rslib": "^3.1.0",
93
- "storybook-react-rsbuild": "^3.1.0",
173
+ "motion": "^12.29.2",
174
+ "oxlint": "^1.41.0",
175
+ "react": "^19.2.4",
176
+ "react-dom": "^19.2.4",
177
+ "rxjs": "^7.8.2",
178
+ "storybook": "^10.2.19",
179
+ "storybook-addon-rslib": "^3.2.2",
180
+ "storybook-react-rsbuild": "^3.2.2",
94
181
  "typescript": "^5.9.3",
95
- "vitest": "^4.0.15"
182
+ "vitest": "^4.0.18",
183
+ "vue": "^3.5.30"
96
184
  },
97
185
  "peerDependencies": {
186
+ "@angular/common": ">=14.0.0 <22.0.0",
187
+ "@angular/core": ">=14.0.0 <22.0.0",
98
188
  "launchdarkly-js-client-sdk": ">=3.9.0 <4.0.0",
99
189
  "react": "^18.0.0 || ^19.0.0",
100
- "react-dom": "^18.0.0 || ^19.0.0"
190
+ "react-dom": "^18.0.0 || ^19.0.0",
191
+ "vue": "^2.7.0 || ^3.0.0"
192
+ },
193
+ "peerDependenciesMeta": {
194
+ "react": {
195
+ "optional": true
196
+ },
197
+ "react-dom": {
198
+ "optional": true
199
+ },
200
+ "vue": {
201
+ "optional": true
202
+ },
203
+ "@angular/core": {
204
+ "optional": true
205
+ },
206
+ "@angular/common": {
207
+ "optional": true
208
+ }
101
209
  },
102
210
  "publishConfig": {
103
211
  "access": "public",
104
212
  "provenance": true
105
- },
106
- "scripts": {
107
- "build": "pnpm run build:lib && pnpm run build:cdn",
108
- "build:lib": "rslib build",
109
- "build:cdn": "rslib build --config rslib.config.cdn.ts",
110
- "dev": "rslib build --watch",
111
- "dev:cdn": "rslib build --config rslib.config.cdn.ts --watch",
112
- "test": "vitest run",
113
- "lint": "oxlint",
114
- "storybook": "storybook dev -p 6006",
115
- "build:storybook": "storybook build"
116
213
  }
117
- }
214
+ }
@@ -1,6 +0,0 @@
1
- interface FlagKeyWithCopyProps {
2
- flagKey: string;
3
- className?: string;
4
- }
5
- export declare function FlagKeyWithCopy({ flagKey, className }: FlagKeyWithCopyProps): import("react/jsx-runtime").JSX.Element;
6
- export {};
@@ -1,4 +0,0 @@
1
- export declare const container: string;
2
- export declare const actionButton: string;
3
- export declare const toggleButton: string;
4
- export declare const active: string;
@@ -1,6 +0,0 @@
1
- import React from 'react';
2
- interface ActionButtonsContainerProps {
3
- children: React.ReactNode;
4
- }
5
- export declare const ActionButtonsContainer: React.FC<ActionButtonsContainerProps>;
6
- export {};