@buoy-gg/shared-ui 2.1.1 → 2.1.3

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 (92) hide show
  1. package/lib/commonjs/clipboard/clipboard-impl.js +1 -1
  2. package/lib/commonjs/dataViewer/VirtualizedDataExplorer.js +20 -23
  3. package/lib/commonjs/hooks/safe-area-impl.js +1 -1
  4. package/lib/commonjs/index.js +98 -65
  5. package/lib/commonjs/license/DeviceLimitModal.js +479 -0
  6. package/lib/commonjs/license/FeatureGate.js +4 -9
  7. package/lib/commonjs/license/LicenseEntryModal.js +205 -770
  8. package/lib/commonjs/license/index.js +0 -7
  9. package/lib/commonjs/storage/devToolsStorageKeys.js +2 -0
  10. package/lib/commonjs/stores/BaseEventStore.js +257 -0
  11. package/lib/commonjs/stores/index.js +12 -0
  12. package/lib/commonjs/ui/components/PowerToggleButton.js +73 -0
  13. package/lib/commonjs/ui/components/index.js +7 -0
  14. package/lib/commonjs/utils/index.js +27 -1
  15. package/lib/commonjs/utils/subscribable.js +113 -0
  16. package/lib/commonjs/utils/subscriberCountNotifier.js +72 -0
  17. package/lib/module/JsModal.js +1 -1
  18. package/lib/module/clipboard/clipboard-impl.js +1 -1
  19. package/lib/module/dataViewer/VirtualizedDataExplorer.js +20 -23
  20. package/lib/module/hooks/safe-area-impl.js +1 -1
  21. package/lib/module/index.js +9 -2
  22. package/lib/module/license/DeviceLimitModal.js +473 -0
  23. package/lib/module/license/FeatureGate.js +4 -9
  24. package/lib/module/license/LicenseEntryModal.js +209 -773
  25. package/lib/module/license/index.js +0 -1
  26. package/lib/module/storage/devToolsStorageKeys.js +2 -0
  27. package/lib/module/stores/BaseEventStore.js +253 -0
  28. package/lib/module/stores/index.js +7 -0
  29. package/lib/module/ui/components/PowerToggleButton.js +69 -0
  30. package/lib/module/ui/components/index.js +1 -0
  31. package/lib/module/utils/index.js +3 -1
  32. package/lib/module/utils/subscribable.js +108 -0
  33. package/lib/module/utils/subscriberCountNotifier.js +66 -0
  34. package/lib/typescript/commonjs/JsModal.d.ts.map +1 -1
  35. package/lib/typescript/commonjs/clipboard/clipboard-impl.d.ts +1 -1
  36. package/lib/typescript/commonjs/dataViewer/VirtualizedDataExplorer.d.ts.map +1 -1
  37. package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts +1 -1
  38. package/lib/typescript/commonjs/index.d.ts +4 -3
  39. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  40. package/lib/typescript/commonjs/license/DeviceLimitModal.d.ts +23 -0
  41. package/lib/typescript/commonjs/license/DeviceLimitModal.d.ts.map +1 -0
  42. package/lib/typescript/commonjs/license/FeatureGate.d.ts.map +1 -1
  43. package/lib/typescript/commonjs/license/LicenseEntryModal.d.ts +10 -62
  44. package/lib/typescript/commonjs/license/LicenseEntryModal.d.ts.map +1 -1
  45. package/lib/typescript/commonjs/license/index.d.ts +0 -2
  46. package/lib/typescript/commonjs/license/index.d.ts.map +1 -1
  47. package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts +2 -0
  48. package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts.map +1 -1
  49. package/lib/typescript/commonjs/stores/BaseEventStore.d.ts +145 -0
  50. package/lib/typescript/commonjs/stores/BaseEventStore.d.ts.map +1 -0
  51. package/lib/typescript/commonjs/stores/index.d.ts +5 -0
  52. package/lib/typescript/commonjs/stores/index.d.ts.map +1 -0
  53. package/lib/typescript/commonjs/ui/components/PowerToggleButton.d.ts +32 -0
  54. package/lib/typescript/commonjs/ui/components/PowerToggleButton.d.ts.map +1 -0
  55. package/lib/typescript/commonjs/ui/components/index.d.ts +2 -0
  56. package/lib/typescript/commonjs/ui/components/index.d.ts.map +1 -1
  57. package/lib/typescript/commonjs/utils/index.d.ts +2 -0
  58. package/lib/typescript/commonjs/utils/index.d.ts.map +1 -1
  59. package/lib/typescript/commonjs/utils/subscribable.d.ts +78 -0
  60. package/lib/typescript/commonjs/utils/subscribable.d.ts.map +1 -0
  61. package/lib/typescript/commonjs/utils/subscriberCountNotifier.d.ts +47 -0
  62. package/lib/typescript/commonjs/utils/subscriberCountNotifier.d.ts.map +1 -0
  63. package/lib/typescript/module/JsModal.d.ts.map +1 -1
  64. package/lib/typescript/module/clipboard/clipboard-impl.d.ts +1 -1
  65. package/lib/typescript/module/dataViewer/VirtualizedDataExplorer.d.ts.map +1 -1
  66. package/lib/typescript/module/hooks/safe-area-impl.d.ts +1 -1
  67. package/lib/typescript/module/index.d.ts +4 -3
  68. package/lib/typescript/module/index.d.ts.map +1 -1
  69. package/lib/typescript/module/license/DeviceLimitModal.d.ts +23 -0
  70. package/lib/typescript/module/license/DeviceLimitModal.d.ts.map +1 -0
  71. package/lib/typescript/module/license/FeatureGate.d.ts.map +1 -1
  72. package/lib/typescript/module/license/LicenseEntryModal.d.ts +10 -62
  73. package/lib/typescript/module/license/LicenseEntryModal.d.ts.map +1 -1
  74. package/lib/typescript/module/license/index.d.ts +0 -2
  75. package/lib/typescript/module/license/index.d.ts.map +1 -1
  76. package/lib/typescript/module/storage/devToolsStorageKeys.d.ts +2 -0
  77. package/lib/typescript/module/storage/devToolsStorageKeys.d.ts.map +1 -1
  78. package/lib/typescript/module/stores/BaseEventStore.d.ts +145 -0
  79. package/lib/typescript/module/stores/BaseEventStore.d.ts.map +1 -0
  80. package/lib/typescript/module/stores/index.d.ts +5 -0
  81. package/lib/typescript/module/stores/index.d.ts.map +1 -0
  82. package/lib/typescript/module/ui/components/PowerToggleButton.d.ts +32 -0
  83. package/lib/typescript/module/ui/components/PowerToggleButton.d.ts.map +1 -0
  84. package/lib/typescript/module/ui/components/index.d.ts +2 -0
  85. package/lib/typescript/module/ui/components/index.d.ts.map +1 -1
  86. package/lib/typescript/module/utils/index.d.ts +2 -0
  87. package/lib/typescript/module/utils/index.d.ts.map +1 -1
  88. package/lib/typescript/module/utils/subscribable.d.ts +78 -0
  89. package/lib/typescript/module/utils/subscribable.d.ts.map +1 -0
  90. package/lib/typescript/module/utils/subscriberCountNotifier.d.ts +47 -0
  91. package/lib/typescript/module/utils/subscriberCountNotifier.d.ts.map +1 -0
  92. package/package.json +3 -3
@@ -2,7 +2,6 @@
2
2
 
3
3
  export { FeatureGate, UpgradePrompt, useFeatureGate, ProFeatureBanner, UpgradeModal, ProBadge, ProUpgradeModal } from "./FeatureGate.js";
4
4
  export { LicenseEntryModal } from "./LicenseEntryModal.js";
5
- export { ManageDevicesModal } from "./ManageDevicesModal.js";
6
5
  // Centralized lazy loading for license hooks to avoid duplication across packages
7
6
  // This is the SINGLE source of truth - all packages should import from here
8
7
  let _useIsPro = null;
@@ -164,6 +164,8 @@ export const devToolsStorageKeys = {
164
164
  modal: () => `${devToolsStorageKeys.events.root()}_modal`,
165
165
  /** Selected badge/source filters */
166
166
  enabledSources: () => `${devToolsStorageKeys.events.root()}_enabled_sources`,
167
+ /** Whether event capturing is active */
168
+ isCapturing: () => `${devToolsStorageKeys.events.root()}_is_capturing`,
167
169
  /** Copy/export settings */
168
170
  copySettings: () => `${devToolsStorageKeys.events.root()}_copy_settings`
169
171
  }
@@ -0,0 +1,253 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * BaseEventStore - Abstract base class for event aggregation stores
5
+ *
6
+ * Handles dual subscription patterns (array listeners + individual event callbacks)
7
+ * and automatically manages start/stop lifecycle based on subscriber count.
8
+ *
9
+ * Follows TanStack Query's Subscribable pattern with extensions for:
10
+ * - Array subscriptions (get full event list on each update)
11
+ * - Individual event subscriptions (get each event as it occurs)
12
+ * - Auto-start capturing when first subscriber joins
13
+ * - Auto-stop capturing when last subscriber leaves
14
+ * - Subscriber count notifications for debugging UI
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * class StorageEventStore extends BaseEventStore<StorageEvent> {
19
+ * protected storeName = 'storage';
20
+ *
21
+ * protected startCapturing(): void {
22
+ * // Start listening to storage changes
23
+ * }
24
+ *
25
+ * protected stopCapturing(): void {
26
+ * // Stop listening to storage changes
27
+ * }
28
+ *
29
+ * isCapturing(): boolean {
30
+ * return this.unsubscribe !== null;
31
+ * }
32
+ * }
33
+ * ```
34
+ */
35
+
36
+ import { Subscribable } from "../utils/subscribable.js";
37
+ import { notifySubscriberCountChange } from "../utils/subscriberCountNotifier.js";
38
+
39
+ /**
40
+ * Callback type for receiving full events array
41
+ */
42
+
43
+ /**
44
+ * Callback type for receiving individual events
45
+ */
46
+
47
+ /**
48
+ * Configuration options for BaseEventStore
49
+ */
50
+
51
+ /**
52
+ * Abstract base class for event stores.
53
+ *
54
+ * Subclasses must implement:
55
+ * - `startCapturing()` - Begin listening to the underlying event source
56
+ * - `stopCapturing()` - Stop listening to the underlying event source
57
+ * - `isCapturing()` - Check if currently capturing events
58
+ */
59
+ export class BaseEventStore extends Subscribable {
60
+ events = [];
61
+ arrayListeners = new Set();
62
+ constructor(options) {
63
+ super();
64
+ this.maxEvents = options.maxEvents ?? 500;
65
+ this.storeName = options.storeName;
66
+ }
67
+
68
+ // ===========================================================================
69
+ // ABSTRACT METHODS - Must be implemented by subclasses
70
+ // ===========================================================================
71
+
72
+ /**
73
+ * Start capturing events from the underlying source.
74
+ * Called automatically when first subscriber joins.
75
+ */
76
+
77
+ /**
78
+ * Stop capturing events from the underlying source.
79
+ * Called automatically when last subscriber leaves.
80
+ */
81
+
82
+ /**
83
+ * Check if the store is actively capturing events.
84
+ */
85
+
86
+ // ===========================================================================
87
+ // LIFECYCLE HOOKS - Called by Subscribable base class
88
+ // ===========================================================================
89
+
90
+ /**
91
+ * Called when first subscriber joins (via onEvent).
92
+ * Starts capturing if no one was subscribed.
93
+ */
94
+ onSubscribe() {
95
+ if (this.getTotalSubscriberCount() === 1) {
96
+ this.startCapturing();
97
+ }
98
+ notifySubscriberCountChange(this.storeName);
99
+ }
100
+
101
+ /**
102
+ * Called when a subscriber leaves (via onEvent unsubscribe).
103
+ * Stops capturing if no one is subscribed anymore.
104
+ */
105
+ onUnsubscribe() {
106
+ if (this.getTotalSubscriberCount() === 0) {
107
+ this.stopCapturing();
108
+ }
109
+ notifySubscriberCountChange(this.storeName);
110
+ }
111
+
112
+ // ===========================================================================
113
+ // SUBSCRIPTION METHODS
114
+ // ===========================================================================
115
+
116
+ /**
117
+ * Get total count of all subscribers (both individual and array listeners)
118
+ */
119
+ getTotalSubscriberCount() {
120
+ return this.listeners.size + this.arrayListeners.size;
121
+ }
122
+
123
+ /**
124
+ * Subscribe to the full events array.
125
+ * Automatically starts capturing when first subscriber joins.
126
+ *
127
+ * @param listener - Callback that receives the full events array on each update
128
+ * @returns Unsubscribe function
129
+ */
130
+ subscribeToEvents(listener) {
131
+ const wasEmpty = this.getTotalSubscriberCount() === 0;
132
+ this.arrayListeners.add(listener);
133
+
134
+ // Start capturing if this is the first subscriber
135
+ if (wasEmpty) {
136
+ this.startCapturing();
137
+ }
138
+
139
+ // Notify subscriber count change
140
+ notifySubscriberCountChange(this.storeName);
141
+
142
+ // Immediately call with current events
143
+ listener(this.getEvents());
144
+
145
+ // Return unsubscribe function
146
+ return () => {
147
+ this.arrayListeners.delete(listener);
148
+
149
+ // Stop capturing if no one is subscribed anymore
150
+ if (this.getTotalSubscriberCount() === 0) {
151
+ this.stopCapturing();
152
+ }
153
+
154
+ // Notify subscriber count change
155
+ notifySubscriberCountChange(this.storeName);
156
+ };
157
+ }
158
+
159
+ /**
160
+ * Subscribe to individual events as they occur.
161
+ * Automatically starts capturing when first subscriber joins.
162
+ *
163
+ * @param callback - Callback that receives each event as it occurs
164
+ * @returns Unsubscribe function
165
+ */
166
+ onEvent(callback) {
167
+ // Use Subscribable's subscribe method (triggers onSubscribe hook)
168
+ return this.subscribe(callback);
169
+ }
170
+
171
+ // ===========================================================================
172
+ // EVENT MANAGEMENT
173
+ // ===========================================================================
174
+
175
+ /**
176
+ * Add an event to the store.
177
+ * Call this from subclasses when a new event is received.
178
+ *
179
+ * @param event - The event to add
180
+ */
181
+ addEvent(event) {
182
+ // Add to beginning (newest first) and limit to maxEvents
183
+ this.events = [event, ...this.events].slice(0, this.maxEvents);
184
+
185
+ // Notify individual event callbacks (via Subscribable)
186
+ this.notify(event);
187
+
188
+ // Notify array listeners
189
+ this.notifyArrayListeners();
190
+ }
191
+
192
+ /**
193
+ * Notify all array listeners of changes
194
+ */
195
+ notifyArrayListeners() {
196
+ const events = this.getEvents();
197
+ this.arrayListeners.forEach(listener => {
198
+ try {
199
+ listener(events);
200
+ } catch {
201
+ // Ignore listener errors
202
+ }
203
+ });
204
+ }
205
+
206
+ /**
207
+ * Get all events (newest first)
208
+ */
209
+ getEvents() {
210
+ return this.events;
211
+ }
212
+
213
+ /**
214
+ * Get event count
215
+ */
216
+ getEventCount() {
217
+ return this.events.length;
218
+ }
219
+
220
+ /**
221
+ * Clear all events
222
+ */
223
+ clearEvents() {
224
+ this.events = [];
225
+ this.notifyArrayListeners();
226
+ }
227
+
228
+ /**
229
+ * Set maximum number of events to keep
230
+ */
231
+ setMaxEvents(max) {
232
+ this.maxEvents = max;
233
+ if (this.events.length > max) {
234
+ this.events = this.events.slice(0, max);
235
+ this.notifyArrayListeners();
236
+ }
237
+ }
238
+
239
+ // ===========================================================================
240
+ // DEBUGGING
241
+ // ===========================================================================
242
+
243
+ /**
244
+ * Get current subscriber counts for debugging
245
+ */
246
+ getSubscriberCounts() {
247
+ return {
248
+ eventCallbacks: this.listeners.size,
249
+ arrayListeners: this.arrayListeners.size,
250
+ total: this.getTotalSubscriberCount()
251
+ };
252
+ }
253
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Shared store utilities and base classes
5
+ */
6
+
7
+ export { BaseEventStore } from "./BaseEventStore.js";
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * PowerToggleButton Component
5
+ *
6
+ * A reusable power button for toggling capture/recording state across dev tools.
7
+ * Displays green when enabled, red when disabled.
8
+ */
9
+
10
+ import { TouchableOpacity, StyleSheet } from "react-native";
11
+ import { Power } from "../../icons/index.js";
12
+ import { macOSColors } from "../gameUI/constants/macOSDesignSystemColors.js";
13
+ import { jsx as _jsx } from "react/jsx-runtime";
14
+ /**
15
+ * Power toggle button used across dev tools for start/stop functionality.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * <PowerToggleButton
20
+ * isEnabled={isRecording}
21
+ * onToggle={() => setIsRecording(!isRecording)}
22
+ * accessibilityLabel="Toggle network recording"
23
+ * />
24
+ * ```
25
+ */
26
+ export function PowerToggleButton({
27
+ isEnabled,
28
+ onToggle,
29
+ size = "medium",
30
+ accessibilityLabel,
31
+ disabled = false
32
+ }) {
33
+ const buttonSize = size === "small" ? 28 : 32;
34
+ const iconSize = size === "small" ? 12 : 14;
35
+ return /*#__PURE__*/_jsx(TouchableOpacity, {
36
+ onPress: onToggle,
37
+ disabled: disabled,
38
+ accessibilityLabel: accessibilityLabel,
39
+ accessibilityRole: "button",
40
+ style: [styles.button, {
41
+ width: buttonSize,
42
+ height: buttonSize
43
+ }, isEnabled ? styles.enabledButton : styles.disabledButton, disabled && styles.buttonDisabled],
44
+ activeOpacity: 0.7,
45
+ children: /*#__PURE__*/_jsx(Power, {
46
+ size: iconSize,
47
+ color: isEnabled ? macOSColors.semantic.success : macOSColors.semantic.error
48
+ })
49
+ });
50
+ }
51
+ const styles = StyleSheet.create({
52
+ button: {
53
+ borderRadius: 8,
54
+ borderWidth: 1,
55
+ alignItems: "center",
56
+ justifyContent: "center"
57
+ },
58
+ enabledButton: {
59
+ backgroundColor: macOSColors.semantic.successBackground,
60
+ borderColor: macOSColors.semantic.success + "40"
61
+ },
62
+ disabledButton: {
63
+ backgroundColor: macOSColors.semantic.errorBackground,
64
+ borderColor: macOSColors.semantic.error + "40"
65
+ },
66
+ buttonDisabled: {
67
+ opacity: 0.55
68
+ }
69
+ });
@@ -30,5 +30,6 @@ export { DynamicFilterView } from "./DynamicFilterView.js";
30
30
  export { WindowControls } from "./WindowControls.js";
31
31
  export { EventStepperFooter } from "./EventStepperFooter.js";
32
32
  export { ExpandablePopover } from "./ExpandablePopover.js";
33
+ export { PowerToggleButton } from "./PowerToggleButton.js";
33
34
  // EventHistoryViewer components
34
35
  export { EventHistoryViewer, ViewToggleCards, DiffModeTabs, CompareBar, EventPickerModal } from "./EventHistoryViewer/index.js";
@@ -6,4 +6,6 @@ export { persistentStorage, isUsingPersistentStorage, getStorageBackendType } fr
6
6
  export { safeStringify } from "./safeStringify.js";
7
7
  export { getValueType, isPrimitive, isJsonSerializable, isValidJson, getConstructorName, isEmpty, getValueSize } from "./typeHelpers.js";
8
8
  export { parseValue, formatValue, getTypeColor, truncateText, flattenObject, formatPath } from "./valueFormatting.js";
9
- export { loadOptionalModule, getCachedOptionalModule } from "./loadOptionalModule.js";
9
+ export { loadOptionalModule, getCachedOptionalModule } from "./loadOptionalModule.js";
10
+ export { Subscribable } from "./subscribable.js";
11
+ export { subscriberCountNotifier, subscribeToSubscriberCountChanges, notifySubscriberCountChange } from "./subscriberCountNotifier.js";
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Subscribable - Base class for pub/sub pattern with lifecycle hooks
5
+ *
6
+ * Ported from TanStack Query's subscription architecture.
7
+ * Provides a foundation for self-managing listeners that automatically
8
+ * start when the first subscriber joins and stop when the last leaves.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * class NetworkEventStore extends Subscribable<NetworkEventListener> {
13
+ * protected onSubscribe(): void {
14
+ * if (this.listeners.size === 1) {
15
+ * // First subscriber - start listening
16
+ * this.startNetworkListener();
17
+ * }
18
+ * }
19
+ *
20
+ * protected onUnsubscribe(): void {
21
+ * if (this.listeners.size === 0) {
22
+ * // Last subscriber left - stop listening
23
+ * this.stopNetworkListener();
24
+ * }
25
+ * }
26
+ * }
27
+ * ```
28
+ */
29
+
30
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
+
32
+ export class Subscribable {
33
+ listeners = new Set();
34
+ constructor() {
35
+ this.subscribe = this.subscribe.bind(this);
36
+ }
37
+
38
+ /**
39
+ * Subscribe to updates.
40
+ * @param listener - Callback function to receive updates
41
+ * @returns Unsubscribe function
42
+ */
43
+ subscribe(listener) {
44
+ this.listeners.add(listener);
45
+ this.onSubscribe();
46
+ return () => {
47
+ this.listeners.delete(listener);
48
+ this.onUnsubscribe();
49
+ };
50
+ }
51
+
52
+ /**
53
+ * Check if there are any active listeners.
54
+ */
55
+ hasListeners() {
56
+ return this.listeners.size > 0;
57
+ }
58
+
59
+ /**
60
+ * Get the current number of listeners.
61
+ */
62
+ getListenerCount() {
63
+ return this.listeners.size;
64
+ }
65
+
66
+ /**
67
+ * Notify all listeners with given arguments.
68
+ */
69
+ notify(...args) {
70
+ this.listeners.forEach(listener => {
71
+ listener(...args);
72
+ });
73
+ }
74
+
75
+ /**
76
+ * Called when a listener is added.
77
+ * Override to start resources when first subscriber joins.
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * protected onSubscribe(): void {
82
+ * if (this.listeners.size === 1) {
83
+ * this.startCapturing();
84
+ * }
85
+ * }
86
+ * ```
87
+ */
88
+ onSubscribe() {
89
+ // Override in subclasses
90
+ }
91
+
92
+ /**
93
+ * Called when a listener is removed.
94
+ * Override to stop resources when last subscriber leaves.
95
+ *
96
+ * @example
97
+ * ```typescript
98
+ * protected onUnsubscribe(): void {
99
+ * if (this.listeners.size === 0) {
100
+ * this.stopCapturing();
101
+ * }
102
+ * }
103
+ * ```
104
+ */
105
+ onUnsubscribe() {
106
+ // Override in subclasses
107
+ }
108
+ }
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Subscriber Count Notifier
5
+ *
6
+ * Global notification system for subscriber count changes across all event stores.
7
+ * Follows TanStack Query's pattern where stores notify when observers are added/removed,
8
+ * allowing UI to update instantly instead of polling.
9
+ *
10
+ * This is in shared-ui to avoid circular dependencies between packages.
11
+ *
12
+ * Usage in event stores:
13
+ * ```typescript
14
+ * import { notifySubscriberCountChange } from '@buoy-gg/shared-ui';
15
+ *
16
+ * protected onSubscribe(): void {
17
+ * // ... existing logic
18
+ * notifySubscriberCountChange('storage');
19
+ * }
20
+ * ```
21
+ *
22
+ * Usage in UI:
23
+ * ```typescript
24
+ * useEffect(() => {
25
+ * return subscribeToSubscriberCountChanges(() => {
26
+ * // Refresh subscriber counts
27
+ * });
28
+ * }, []);
29
+ * ```
30
+ */
31
+
32
+ class SubscriberCountNotifier {
33
+ listeners = new Set();
34
+
35
+ /**
36
+ * Subscribe to subscriber count changes.
37
+ * Called whenever any event store's subscriber count changes.
38
+ */
39
+ subscribe(listener) {
40
+ this.listeners.add(listener);
41
+ return () => {
42
+ this.listeners.delete(listener);
43
+ };
44
+ }
45
+
46
+ /**
47
+ * Notify all listeners that a store's subscriber count changed.
48
+ * Called by event stores in their onSubscribe/onUnsubscribe hooks.
49
+ */
50
+ notify(sourceId) {
51
+ this.listeners.forEach(listener => {
52
+ try {
53
+ listener(sourceId);
54
+ } catch {
55
+ // Ignore listener errors
56
+ }
57
+ });
58
+ }
59
+ }
60
+
61
+ // Singleton instance
62
+ export const subscriberCountNotifier = new SubscriberCountNotifier();
63
+
64
+ // Convenience exports
65
+ export const subscribeToSubscriberCountChanges = listener => subscriberCountNotifier.subscribe(listener);
66
+ export const notifySubscriberCountChange = sourceId => subscriberCountNotifier.notify(sourceId);
@@ -1 +1 @@
1
- {"version":3,"file":"JsModal.d.ts","sourceRoot":"","sources":["../../../src/JsModal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAUL,SAAS,EAEV,MAAM,OAAO,CAAC;AACf,OAAO,EAML,QAAQ,EAGR,SAAS,EAEV,MAAM,cAAc,CAAC;AA4FtB,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,UAAU,CAAC;AAEnD,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,kBAAkB,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;IAChC,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,uBAAuB,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAErD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,yFAAyF;IACzF,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9C,0EAA0E;IAC1E,sBAAsB,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gIAAgI;IAChI,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AA6hDD,eAAO,MAAM,OAAO,oDAAyB,CAAC"}
1
+ {"version":3,"file":"JsModal.d.ts","sourceRoot":"","sources":["../../../src/JsModal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAUL,SAAS,EAEV,MAAM,OAAO,CAAC;AACf,OAAO,EAML,QAAQ,EAGR,SAAS,EAEV,MAAM,cAAc,CAAC;AA6FtB,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,UAAU,CAAC;AAEnD,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,kBAAkB,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;IAChC,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,uBAAuB,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAErD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,yFAAyF;IACzF,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9C,0EAA0E;IAC1E,sBAAsB,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gIAAgI;IAChI,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AA8hDD,eAAO,MAAM,OAAO,oDAAyB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Auto-generated clipboard implementation
3
3
  * Detected: none
4
- * Generated at: 2026-01-12T04:02:16.197Z
4
+ * Generated at: 2026-02-03T00:33:15.804Z
5
5
  *
6
6
  * DO NOT EDIT - This file is generated by scripts/detect-clipboard.js
7
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualizedDataExplorer.d.ts","sourceRoot":"","sources":["../../../../src/dataViewer/VirtualizedDataExplorer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAOL,EAAE,EAEH,MAAM,OAAO,CAAC;AAu+Bf,UAAU,4BAA4B;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,uBAAuB,EAAE,EAAE,CAAC,4BAA4B,CA6PpE,CAAC"}
1
+ {"version":3,"file":"VirtualizedDataExplorer.d.ts","sourceRoot":"","sources":["../../../../src/dataViewer/VirtualizedDataExplorer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAOL,EAAE,EAEH,MAAM,OAAO,CAAC;AAo+Bf,UAAU,4BAA4B;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,uBAAuB,EAAE,EAAE,CAAC,4BAA4B,CA6PpE,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Auto-generated safe area implementation
3
3
  * Detected: none
4
- * Generated at: 2026-01-12T04:02:16.222Z
4
+ * Generated at: 2026-02-03T00:33:15.829Z
5
5
  *
6
6
  * DO NOT EDIT - This file is generated by scripts/detect-safe-area.js
7
7
  *
@@ -1,5 +1,6 @@
1
1
  export * from "./ui";
2
- export { displayValue, parseDisplayValue, getSafeAreaInsets, persistentStorage, isUsingPersistentStorage, getStorageBackendType, safeStringify, getValueType, isPrimitive, isJsonSerializable, isValidJson, getConstructorName, isEmpty, getValueSize, parseValue, formatValue, getTypeColor, truncateText, flattenObject, formatPath, loadOptionalModule, getCachedOptionalModule, } from "./utils";
2
+ export * from "./stores";
3
+ export { displayValue, parseDisplayValue, getSafeAreaInsets, persistentStorage, isUsingPersistentStorage, getStorageBackendType, safeStringify, getValueType, isPrimitive, isJsonSerializable, isValidJson, getConstructorName, isEmpty, getValueSize, parseValue, formatValue, getTypeColor, truncateText, flattenObject, formatPath, loadOptionalModule, getCachedOptionalModule, Subscribable, type SubscribableListener, subscriberCountNotifier, subscribeToSubscriberCountChanges, notifySubscriberCountChange, } from "./utils";
3
4
  export * from "./utils/formatting";
4
5
  export * from "./utils/time";
5
6
  export { isPlainObject as isPlainObjectUtil } from "./utils/typeHelpers";
@@ -24,6 +25,6 @@ export type { EnvironmentSelectorInlineProps } from "./env/EnvironmentSelectorIn
24
25
  export type { Environment } from "./types/types";
25
26
  export { HintsProvider, useHintsDisabled, useHintsContext } from "./context";
26
27
  export * from "./history";
27
- export { FeatureGate, UpgradePrompt, useFeatureGate, ProFeatureBanner, UpgradeModal, LicenseEntryModal, ManageDevicesModal, ProBadge, ProUpgradeModal, getUseIsPro, getUseLicense } from "./license";
28
- export type { FeatureGateProps, ProFeatureBannerProps, UpgradeModalProps, LicenseEntryModalProps, ManageDevicesModalProps, ProUpgradeModalProps } from "./license";
28
+ export { FeatureGate, UpgradePrompt, useFeatureGate, ProFeatureBanner, UpgradeModal, LicenseEntryModal, ProBadge, ProUpgradeModal, getUseIsPro, getUseLicense } from "./license";
29
+ export type { FeatureGateProps, ProFeatureBannerProps, UpgradeModalProps, LicenseEntryModalProps, ProUpgradeModalProps } from "./license";
29
30
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,MAAM,CAAC;AAGrB,OAAO,EAEL,YAAY,EACZ,iBAAiB,EAEjB,iBAAiB,EAEjB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EAErB,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,YAAY,EAEZ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EAEV,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAGjB,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAE1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,YAAY,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG7E,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACrM,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,MAAM,CAAC;AAGrB,cAAc,UAAU,CAAC;AAGzB,OAAO,EAEL,YAAY,EACZ,iBAAiB,EAEjB,iBAAiB,EAEjB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EAErB,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,YAAY,EAEZ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EAEV,kBAAkB,EAClB,uBAAuB,EAEvB,YAAY,EACZ,KAAK,oBAAoB,EAEzB,uBAAuB,EACvB,iCAAiC,EACjC,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AAGjB,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAE1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,YAAY,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG7E,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACjL,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * DeviceLimitModal - Shown when device limit is exceeded
3
+ *
4
+ * Displays registered devices and allows removing one to free up a slot.
5
+ */
6
+ import React from "react";
7
+ export interface RegisteredDevice {
8
+ id: string;
9
+ name: string;
10
+ platform: string;
11
+ model: string | null;
12
+ registeredAt: Date;
13
+ lastSeenAt: Date;
14
+ isCurrentDevice: boolean;
15
+ }
16
+ export interface DeviceLimitModalProps {
17
+ visible: boolean;
18
+ onClose: () => void;
19
+ onRetry: () => void;
20
+ maxDevices: number;
21
+ }
22
+ export declare const DeviceLimitModal: ({ visible, onClose, onRetry, maxDevices, }: DeviceLimitModalProps) => React.JSX.Element;
23
+ //# sourceMappingURL=DeviceLimitModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeviceLimitModal.d.ts","sourceRoot":"","sources":["../../../../src/license/DeviceLimitModal.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAA2C,MAAM,OAAO,CAAC;AAsBhE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,IAAI,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAgBD,eAAO,MAAM,gBAAgB,GAAI,4CAK9B,qBAAqB,sBAyNvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureGate.d.ts","sourceRoot":"","sources":["../../../../src/license/FeatureGate.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,EAAE,SAAS,EAAyB,MAAM,OAAO,CAAC;AAShE;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,WAAW;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,sBAIrD,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,eAAe,GAAI,oCAI7B,oBAAoB,sBAUtB,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,2CAI3B;IACD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,sBAgEA,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,GAAI,mEAMzB,gBAAgB,sBAiClB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,IAAI;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,CAYA;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,eAAO,MAAM,gBAAgB,GAAI,yCAI9B,qBAAqB,sBA0DvB,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,eAAO,MAAM,YAAY,GAAI,2DAM1B,iBAAiB,6BAkHnB,CAAC"}
1
+ {"version":3,"file":"FeatureGate.d.ts","sourceRoot":"","sources":["../../../../src/license/FeatureGate.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,EAAE,SAAS,EAAyB,MAAM,OAAO,CAAC;AAShE;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,WAAW;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,sBAIrD,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,eAAe,GAAI,oCAI7B,oBAAoB,sBAUtB,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,2CAI3B;IACD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,sBA6DA,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,GAAI,mEAMzB,gBAAgB,sBAiClB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,IAAI;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,CAYA;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,eAAO,MAAM,gBAAgB,GAAI,yCAI9B,qBAAqB,sBAyDvB,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,eAAO,MAAM,YAAY,GAAI,2DAM1B,iBAAiB,6BAiHnB,CAAC"}