@visulima/dev-toolbar 1.0.0-alpha.3 → 1.0.0-alpha.5

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 (143) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/LICENSE.md +109 -2
  3. package/dist/apps/a11y/a11y-app.d.ts +0 -1
  4. package/dist/apps/a11y/a11y-store.d.ts +12 -16
  5. package/dist/apps/a11y/a11y-tooltip.d.ts +0 -1
  6. package/dist/apps/a11y/index.js +3 -3
  7. package/dist/apps/assets/assets-app.d.ts +4 -0
  8. package/dist/apps/assets/index.d.ts +3 -0
  9. package/dist/apps/assets/index.js +16 -0
  10. package/dist/apps/inspector/index.js +2 -2
  11. package/dist/apps/inspector/inspector-app.d.ts +4 -2
  12. package/dist/apps/module-graph/index.js +2 -2
  13. package/dist/apps/module-graph/module-graph-app.d.ts +0 -1
  14. package/dist/apps/performance/index.js +2 -2
  15. package/dist/apps/performance/performance-app.d.ts +0 -1
  16. package/dist/apps/performance/performance-tooltip.d.ts +0 -1
  17. package/dist/apps/seo/index.js +2 -2
  18. package/dist/apps/seo/seo-app.d.ts +0 -1
  19. package/dist/apps/settings/index.js +2 -2
  20. package/dist/apps/tailwind/index.js +6 -6
  21. package/dist/apps/tailwind/tailwind-app.d.ts +0 -1
  22. package/dist/apps/timeline/index.js +2 -2
  23. package/dist/apps/timeline/timeline-app.d.ts +0 -1
  24. package/dist/apps/vite-config/index.js +2 -2
  25. package/dist/apps/vite-config/vite-config-app.d.ts +0 -1
  26. package/dist/client/overlay.js +1 -1
  27. package/dist/hooks/create-hook.d.ts +7 -5
  28. package/dist/hooks/events.d.ts +4 -2
  29. package/dist/hooks/global-hook.d.ts +6 -6
  30. package/dist/index.d.ts +2 -1
  31. package/dist/index.js +1 -1
  32. package/dist/packem_chunks/inject-source.js +9 -1
  33. package/dist/packem_shared/Alert-D2CvX4fw.js +1 -0
  34. package/dist/packem_shared/Badge-BEgU04nl.js +1 -0
  35. package/dist/packem_shared/Button-Bkx66Co7.js +1 -0
  36. package/dist/packem_shared/Card-CJa4vHVc.js +1 -0
  37. package/dist/packem_shared/Icon-B6UHkC0o.js +1 -0
  38. package/dist/packem_shared/Input-Cs6aduTi.js +1 -0
  39. package/dist/packem_shared/Label-CgCFOMDc.js +1 -0
  40. package/dist/packem_shared/Popover-DzH5lAc9.js +1 -0
  41. package/dist/packem_shared/Progress-DN6zn-0l.js +1 -0
  42. package/dist/packem_shared/Separator-D38mKeZv.js +1 -0
  43. package/dist/packem_shared/Skeleton-Dv-tcA1P.js +1 -0
  44. package/dist/packem_shared/Switch-C3NTpeoR.js +1 -0
  45. package/dist/packem_shared/Tabs-SuFWbB6d.js +1 -0
  46. package/dist/packem_shared/Textarea-Yfg3dLZi.js +1 -0
  47. package/dist/packem_shared/Tooltip-BHmzUaxu.js +1 -0
  48. package/dist/packem_shared/clsx-wGlvpUfw.js +1 -0
  49. package/dist/packem_shared/createClientRPCContext-DgRxrllw.js +1 -0
  50. package/dist/packem_shared/createDevToolbarHook-4bZZiHPI.js +1 -0
  51. package/dist/packem_shared/createServerRPCContext-CJXa8ezf.js +1 -0
  52. package/dist/packem_shared/getTimelineStore-B1cfjWV8.js +1 -0
  53. package/dist/packem_shared/{setupGlobalHook-CFuxsCyl.js → setupGlobalHook-CCf9Logv.js} +1 -1
  54. package/dist/packem_shared/sharedToolbarStylesheet-JFwZE8kq.js +2 -0
  55. package/dist/packem_shared/store-DaUtLjf3.js +1 -0
  56. package/dist/packem_shared/use-frame-state-CxrlPUM5.js +1 -0
  57. package/dist/packem_shared/use-theme-zpm4zmqP.js +1 -0
  58. package/dist/performance/monitor.d.ts +27 -26
  59. package/dist/rpc/client.d.ts +6 -4
  60. package/dist/rpc/functions/assets.d.ts +16 -0
  61. package/dist/rpc/functions/open-in-editor.d.ts +7 -5
  62. package/dist/rpc/functions/tailwind-config.d.ts +7 -4
  63. package/dist/rpc/functions/vite-config.d.ts +80 -4
  64. package/dist/rpc/server.d.ts +9 -6
  65. package/dist/timeline/capture.d.ts +3 -1
  66. package/dist/timeline/index.d.ts +2 -1
  67. package/dist/timeline/store.d.ts +12 -22
  68. package/dist/toolbar/app-manager.d.ts +45 -43
  69. package/dist/toolbar/components/app-button.d.ts +0 -1
  70. package/dist/toolbar/components/app-canvas.d.ts +1 -1
  71. package/dist/toolbar/components/first-visit-hint.d.ts +0 -1
  72. package/dist/toolbar/components/toolbar-bar.d.ts +2 -7
  73. package/dist/toolbar/components/toolbar-container.d.ts +2 -8
  74. package/dist/toolbar/components/vite-overlay-button.d.ts +2 -2
  75. package/dist/toolbar/context/toolbar-context.d.ts +20 -19
  76. package/dist/toolbar/global-api.d.ts +3 -3
  77. package/dist/toolbar/helpers.d.ts +5 -3
  78. package/dist/toolbar/hooks/use-apps.d.ts +5 -3
  79. package/dist/toolbar/hooks/use-frame-state.d.ts +26 -10
  80. package/dist/toolbar/hooks/use-panel-visible.d.ts +9 -7
  81. package/dist/toolbar/hooks/use-position.d.ts +7 -5
  82. package/dist/toolbar/hooks/use-theme.d.ts +6 -4
  83. package/dist/toolbar/hooks/use-toolbar.d.ts +4 -2
  84. package/dist/toolbar/index.d.ts +8 -15
  85. package/dist/toolbar/index.js +3 -3
  86. package/dist/toolbar/settings.d.ts +7 -7
  87. package/dist/toolbar/stylesheet.d.ts +3 -1
  88. package/dist/toolbar/utils/index.d.ts +3 -3
  89. package/dist/types/global-api.d.ts +22 -33
  90. package/dist/types/hooks.d.ts +32 -34
  91. package/dist/types/messaging.d.ts +2 -2
  92. package/dist/types/rpc.d.ts +11 -7
  93. package/dist/types/timeline.d.ts +3 -3
  94. package/dist/types/toolbar.d.ts +1 -1
  95. package/dist/ui/components/alert.d.ts +0 -1
  96. package/dist/ui/components/badge.d.ts +0 -1
  97. package/dist/ui/components/button.d.ts +0 -1
  98. package/dist/ui/components/card.d.ts +0 -1
  99. package/dist/ui/components/icon.d.ts +3 -5
  100. package/dist/ui/components/input.d.ts +0 -1
  101. package/dist/ui/components/label.d.ts +0 -1
  102. package/dist/ui/components/popover.d.ts +1 -1
  103. package/dist/ui/components/progress.d.ts +0 -1
  104. package/dist/ui/components/separator.d.ts +0 -1
  105. package/dist/ui/components/skeleton.d.ts +0 -1
  106. package/dist/ui/components/switch.d.ts +0 -1
  107. package/dist/ui/components/tabs.d.ts +1 -2
  108. package/dist/ui/components/textarea.d.ts +0 -1
  109. package/dist/ui/components/tooltip.d.ts +1 -1
  110. package/dist/ui/index.d.ts +0 -1
  111. package/dist/ui/index.js +1 -1
  112. package/dist/vite/inject-source.d.ts +0 -1
  113. package/dist/vite/matcher.d.ts +2 -1
  114. package/dist/vite-plugin.d.ts +10 -6
  115. package/dist/vite-plugin.js +2 -2
  116. package/package.json +14 -12
  117. package/dist/apps/more/index.d.ts +0 -3
  118. package/dist/apps/more/index.js +0 -19
  119. package/dist/apps/more/more-app.d.ts +0 -5
  120. package/dist/packem_shared/Alert-H-x1JuZ0.js +0 -1
  121. package/dist/packem_shared/Badge-C30mDKKG.js +0 -1
  122. package/dist/packem_shared/Button-DODNCTPZ.js +0 -1
  123. package/dist/packem_shared/Card-DdI7Wn3t.js +0 -1
  124. package/dist/packem_shared/Icon-DWFLZkwW.js +0 -1
  125. package/dist/packem_shared/Input-GfbOwAkK.js +0 -1
  126. package/dist/packem_shared/Label-Bzi47aUf.js +0 -1
  127. package/dist/packem_shared/Popover-o3Vkvndp.js +0 -1
  128. package/dist/packem_shared/Progress-vGfFpxRn.js +0 -1
  129. package/dist/packem_shared/Separator-DQGeJPQg.js +0 -1
  130. package/dist/packem_shared/Skeleton-BYXau6jM.js +0 -1
  131. package/dist/packem_shared/Switch-BeC78S_T.js +0 -1
  132. package/dist/packem_shared/Tabs-BBc4S-2T.js +0 -1
  133. package/dist/packem_shared/Textarea-DvbSX13V.js +0 -1
  134. package/dist/packem_shared/TimelineStore-BgBrirKd.js +0 -1
  135. package/dist/packem_shared/Tooltip-BwK-2I9P.js +0 -1
  136. package/dist/packem_shared/cn-DWLJYh3h.js +0 -1
  137. package/dist/packem_shared/createClientRPCContext-DzKQpKTk.js +0 -1
  138. package/dist/packem_shared/createDevToolbarHook-DGNxqk8N.js +0 -1
  139. package/dist/packem_shared/createServerRPCContext-CRd6VAWp.js +0 -1
  140. package/dist/packem_shared/sharedToolbarStylesheet-DHHoFz2-.js +0 -2
  141. package/dist/packem_shared/store-BxE0w51s.js +0 -1
  142. package/dist/packem_shared/use-theme-CX1gG6Sv.js +0 -1
  143. package/dist/utils/cn.d.ts +0 -8
@@ -1,12 +1,15 @@
1
1
  import type { ViteDevServer } from "vite";
2
2
  import type { ServerFunctions, ServerRPCContext } from "../types/rpc.d.ts";
3
3
  /**
4
- * Creates server-side RPC context
5
- * @param server Vite dev server instance
6
- * @param customFunctions Custom server functions to register
7
- * @param options Additional options (e.g. which editor to launch)
8
- * @returns Server RPC context
4
+ * Creates server-side RPC context.
5
+ * @param server Vite dev server instance.
6
+ * @param customFunctions Custom server functions to register.
7
+ * @param options Additional options (e.g. which editor to launch).
8
+ * @param options.editor Editor to use for "open in editor" functionality.
9
+ * @returns Server RPC context.
9
10
  */
10
- export declare const createServerRPCContext: (server: ViteDevServer, customFunctions?: Partial<ServerFunctions>, options?: {
11
+ declare const createServerRPCContext: (server: ViteDevServer, customFunctions?: Partial<ServerFunctions>, options?: {
11
12
  editor?: string;
12
13
  }) => ServerRPCContext;
14
+ export { createServerRPCContext };
15
+ export default createServerRPCContext;
@@ -3,4 +3,6 @@
3
3
  * Intercepts HMR events, fetch requests, and JS errors and feeds them
4
4
  * into the timeline store so the Timeline app can display them.
5
5
  */
6
- export declare const startTimelineCapture: () => void;
6
+ declare const startTimelineCapture: () => void;
7
+ export { startTimelineCapture };
8
+ export default startTimelineCapture;
@@ -4,4 +4,5 @@
4
4
  export type { TimelineEvent, TimelineEventLevel, TimelineGroup } from "../types/timeline.d.ts";
5
5
  export { DEFAULT_TIMELINE_GROUPS } from "../types/timeline.d.ts";
6
6
  export { startTimelineCapture } from "./capture.d.ts";
7
- export { getTimelineStore, TimelineStore } from "./store.d.ts";
7
+ export type { TimelineStore } from "./store.d.ts";
8
+ export { getTimelineStore } from "./store.d.ts";
@@ -1,52 +1,42 @@
1
1
  import type { TimelineEvent, TimelineGroup } from "../types/timeline.d.ts";
2
2
  /**
3
- * Timeline store for managing events
3
+ * Timeline store for managing timeline events.
4
4
  */
5
- export declare class TimelineStore {
5
+ declare class TimelineStore {
6
6
  private groups;
7
7
  private maxEvents;
8
8
  constructor(maxEvents?: number);
9
9
  /**
10
- * Add an event to a group
11
- * @param groupId Group ID
12
- * @param event Timeline event
10
+ * Adds an event to a group.
13
11
  */
14
12
  addEvent(groupId: string, event: TimelineEvent): void;
15
13
  /**
16
- * Get all groups
17
- * @returns Array of timeline groups
14
+ * Gets all timeline groups.
18
15
  */
19
16
  getGroups(): TimelineGroup[];
20
17
  /**
21
- * Get events for a specific group
22
- * @param groupId Group ID
23
- * @returns Array of events or empty array
18
+ * Gets events for a specific group.
24
19
  */
25
20
  getGroupEvents(groupId: string): TimelineEvent[];
26
21
  /**
27
- * Get all events across all groups
28
- * @returns Array of all events
22
+ * Gets all events across all groups.
29
23
  */
30
24
  getAllEvents(): TimelineEvent[];
31
25
  /**
32
- * Clear events for a group
33
- * @param groupId Group ID
26
+ * Clears events for a specific group.
34
27
  */
35
28
  clearGroup(groupId: string): void;
36
29
  /**
37
- * Clear all events
30
+ * Clears all events from all groups.
38
31
  */
39
32
  clearAll(): void;
40
33
  /**
41
- * Get events within a time range
42
- * @param startTime Start timestamp
43
- * @param endTime End timestamp
44
- * @returns Array of events in range
34
+ * Gets events within a time range.
45
35
  */
46
36
  getEventsInRange(startTime: number, endTime: number): TimelineEvent[];
47
37
  }
48
38
  /**
49
- * Get or create timeline store instance
50
- * @returns Timeline store instance
39
+ * Gets or creates the timeline store singleton instance.
51
40
  */
52
- export declare const getTimelineStore: () => TimelineStore;
41
+ declare const getTimelineStore: () => TimelineStore;
42
+ export { getTimelineStore, TimelineStore };
@@ -1,102 +1,104 @@
1
1
  import type { DevToolbarApp, DevToolbarAppState } from "../types/app.d.ts";
2
2
  /**
3
- * App manager for handling app lifecycle
3
+ * Manages the lifecycle of all registered dev-toolbar apps.
4
4
  */
5
- export declare class AppManager {
5
+ declare class AppManager {
6
6
  private apps;
7
7
  private activeAppId;
8
8
  private initializedApps;
9
9
  private appCanvases;
10
10
  /**
11
- * Register an app
12
- * @param app App definition
13
- * @param builtIn Whether this is a built-in app
11
+ * Registers an app with the toolbar.
12
+ * @param app App definition.
13
+ * @param builtIn Whether this is a built-in app.
14
14
  */
15
15
  registerApp(app: DevToolbarApp, builtIn?: boolean): void;
16
16
  /**
17
- * Unregister an app
18
- * @param appId App ID
17
+ * Unregisters an app and calls its destroy hook if initialized.
18
+ * @param appId App ID to unregister.
19
19
  */
20
20
  unregisterApp(appId: string): Promise<void>;
21
21
  /**
22
- * Get an app by ID
23
- * @param appId App ID
24
- * @returns App state or undefined
22
+ * Returns the app state for a given ID.
23
+ * @param appId App ID to look up.
24
+ * @returns App state or undefined.
25
25
  */
26
26
  getApp(appId: string): DevToolbarAppState | undefined;
27
27
  /**
28
- * Get all apps
29
- * @returns Array of app states
28
+ * Returns all registered app states.
30
29
  */
31
30
  getAllApps(): DevToolbarAppState[];
32
31
  /**
33
- * Get active app
34
- * @returns Active app state or undefined
32
+ * Returns the currently active app state, or undefined if none is active.
35
33
  */
36
34
  getActiveApp(): DevToolbarAppState | undefined;
37
35
  /**
38
- * Toggle app active state
39
- * @param appId App ID
40
- * @returns Whether toggle was successful
36
+ * Toggles the active state of an app.
37
+ * @param appId App ID to toggle.
38
+ * @returns Whether the toggle was successful.
41
39
  */
42
40
  toggleApp(appId: string): Promise<boolean>;
43
41
  /**
44
- * Directly set active state for an action button without invoking callbacks.
42
+ * Directly sets the active state of an action button without invoking callbacks.
45
43
  * Use this to deactivate a button from outside the toolbar (e.g. after async work).
46
- * @param appId App ID
47
- * @param active New active state
44
+ * @param appId The unique identifier of the app whose active state to change.
45
+ * @param active New active state.
48
46
  */
49
47
  setAppActive(appId: string, active: boolean): void;
50
48
  /**
51
- * Check if an app has been initialized
52
- * @returns True when the app's init() has already been called
49
+ * Returns whether an app has already had its init() called.
50
+ * @param appId App ID to check.
53
51
  */
54
52
  isAppInitialized(appId: string): boolean;
55
53
  /**
56
- * Mark an app as initialized
57
- * @returns void
54
+ * Marks an app as having been initialized.
55
+ * @param appId App ID to mark.
58
56
  */
59
57
  markAppInitialized(appId: string): void;
60
58
  /**
61
- * Open an app
62
- * @param appId App ID
63
- * @returns Whether open was successful
59
+ * Opens an app and initializes it if necessary.
60
+ * @param appId App ID to open.
61
+ * @returns Whether the open was successful.
64
62
  */
65
63
  openApp(appId: string): Promise<boolean>;
66
64
  /**
67
- * Close an app
68
- * @param appId App ID
69
- * @returns Whether close was successful
65
+ * Closes an active app.
66
+ * @param appId App ID to close.
67
+ * @returns Whether the close was successful.
70
68
  */
71
69
  closeApp(appId: string): Promise<boolean>;
72
70
  /**
73
- * Set app notification
74
- * @param appId App ID
75
- * @param state Notification state
76
- * @param level Notification level
71
+ * Sets a notification for an app.
72
+ * @param appId The unique identifier of the app to notify.
73
+ * @param state Whether the notification is currently visible.
74
+ * @param level The severity level of the notification badge.
77
75
  */
78
76
  setNotification(appId: string, state: boolean, level?: "info" | "warning" | "error"): void;
79
77
  /**
80
- * Clear app notification
81
- * @param appId App ID
78
+ * Clears the notification for an app.
79
+ * @param appId The unique identifier of the app whose notification to clear.
82
80
  */
83
81
  clearNotification(appId: string): void;
84
82
  /**
85
- * Get app canvas element
86
- * @param appId App ID
87
- * @returns Canvas element with shadow root or null
83
+ * Returns the canvas element and shadow root for an app.
84
+ * @param appId The unique identifier of the app whose canvas to retrieve.
85
+ * @returns Canvas element with shadow root or undefined.
88
86
  */
89
87
  getAppCanvas(appId: string): {
90
88
  element: HTMLElement;
91
89
  shadowRoot: ShadowRoot;
92
- } | null;
90
+ } | undefined;
93
91
  /**
94
- * Set app canvas element (called by toolbar component)
95
- * @param appId App ID
96
- * @param canvas Canvas with shadow root
92
+ * Stores the canvas element and shadow root for an app.
93
+ * @param appId The unique identifier of the app whose canvas to store.
94
+ * @param canvas The canvas object containing the host element and its shadow root.
95
+ * @param canvas.element The host HTMLElement that wraps the app's shadow DOM.
96
+ * @param canvas.shadowRoot The ShadowRoot attached to the canvas element.
97
97
  */
98
98
  setAppCanvas(appId: string, canvas: {
99
99
  element: HTMLElement;
100
100
  shadowRoot: ShadowRoot;
101
101
  }): void;
102
102
  }
103
+ export { AppManager };
104
+ export default AppManager;
@@ -1,4 +1,3 @@
1
- /** @jsxImportSource preact */
2
1
  import type { ComponentChildren } from "preact";
3
2
  import type { DevToolbarAppState } from "../../types/index.d.ts";
4
3
  interface AppButtonProps {
@@ -1,7 +1,7 @@
1
1
  import type { ComponentChildren } from "preact";
2
2
  import type { DevToolbarAppState } from "../../types/index.d.ts";
3
3
  interface DevPanelProps {
4
- activeAppId: string | null;
4
+ activeAppId: string | undefined;
5
5
  apps: DevToolbarAppState[];
6
6
  onClose: () => void;
7
7
  onToggleApp: (appId: string) => Promise<void>;
@@ -1,4 +1,3 @@
1
- /** @jsxImportSource preact */
2
1
  import type { ComponentChildren } from "preact";
3
2
  interface FirstVisitHintProps {
4
3
  onDismiss: () => void;
@@ -1,14 +1,9 @@
1
+ /** @jsxImportSource preact */
1
2
  import type { ComponentChildren } from "preact";
2
- interface ToolbarBarProps {
3
- /**
4
- * Number of custom apps to show before "more" button
5
- */
6
- customAppsToShow?: number;
7
- }
8
3
  /**
9
4
  * Toolbar bar — row of app buttons inside the pill.
10
5
  * Left/right placement rotates the whole pill 90deg via CSS,
11
6
  * so this always stays flex-row internally.
12
7
  */
13
- declare const ToolbarBar: ({ customAppsToShow }: ToolbarBarProps) => ComponentChildren;
8
+ declare const ToolbarBar: () => ComponentChildren;
14
9
  export default ToolbarBar;
@@ -1,19 +1,14 @@
1
- /** @jsxImportSource preact */
2
1
  import type { ComponentChildren } from "preact";
3
2
  import type { DevToolbarAppState } from "../../types/index.d.ts";
4
3
  interface ToolbarContainerProps {
5
4
  /**
6
5
  * Active app ID
7
6
  */
8
- activeAppId: string | null;
7
+ activeAppId: string | undefined;
9
8
  /**
10
9
  * Initial apps
11
10
  */
12
11
  apps: DevToolbarAppState[];
13
- /**
14
- * Number of custom apps to show
15
- */
16
- customAppsToShow?: number;
17
12
  /**
18
13
  * Callback when notification should be cleared
19
14
  */
@@ -43,7 +38,6 @@ interface ToolbarContainerProps {
43
38
  * @param props Component props
44
39
  * @param props.activeAppId ID of the currently open app, or null if no app is open
45
40
  * @param props.apps Initial array of registered app states
46
- * @param props.customAppsToShow Maximum number of custom apps to show in the pill (default: 3)
47
41
  * @param props.onClearNotification Called when an app's notification badge should be cleared
48
42
  * @param props.onRegisterApp Called when a new app is dynamically registered
49
43
  * @param props.onSetNotification Called when an app requests a notification badge update
@@ -51,5 +45,5 @@ interface ToolbarContainerProps {
51
45
  * @param props.onUnregisterApp Called when an app is dynamically unregistered
52
46
  * @returns Rendered toolbar component tree
53
47
  */
54
- declare const ToolbarContainer: ({ activeAppId, apps, customAppsToShow, onClearNotification, onRegisterApp, onSetNotification, onToggleApp, onUnregisterApp, }: ToolbarContainerProps) => ComponentChildren;
48
+ declare const ToolbarContainer: ({ activeAppId, apps, onClearNotification, onRegisterApp, onSetNotification, onToggleApp, onUnregisterApp, }: ToolbarContainerProps) => ComponentChildren;
55
49
  export default ToolbarContainer;
@@ -1,10 +1,10 @@
1
1
  import type { ComponentChildren } from "preact";
2
2
  /**
3
- * Shows a red error button in the toolbar when @visulima/vite-overlay errors exist.
3
+ * Shows a red error button in the toolbar when `@visulima/vite-overlay` errors exist.
4
4
  * Clicking toggles the vite-overlay panel visibility.
5
5
  *
6
6
  * Only rendered when:
7
- * - @visulima/vite-overlay is installed and active (window.ErrorOverlay is defined)
7
+ * - `@visulima/vite-overlay` is installed and active (window.ErrorOverlay is defined)
8
8
  * - At least one error is present in the history
9
9
  *
10
10
  * Renders with its own left separator so it stays visually grouped on the
@@ -1,3 +1,4 @@
1
+ /** @jsxImportSource preact */
1
2
  import { createContext } from "preact";
2
3
  import type { DevToolbarAppState, ToolbarPlacement } from "../../types/index.d.ts";
3
4
  /**
@@ -14,29 +15,29 @@ export interface PinnedTooltip {
14
15
  initialY: number;
15
16
  }
16
17
  /**
17
- * Toolbar context state
18
+ * Shared state and actions exposed by the ToolbarContext.
18
19
  */
19
20
  export interface ToolbarContextState {
20
21
  /**
21
22
  * Currently active app ID
22
23
  */
23
- activeAppId: string | null;
24
+ activeAppId: string | undefined;
24
25
  /**
25
26
  * All registered apps
26
27
  */
27
28
  apps: DevToolbarAppState[];
28
29
  /**
29
- * Clear app notification
30
+ * Clears the notification badge for an app.
30
31
  */
31
32
  clearNotification: (appId: string) => void;
32
33
  /**
33
34
  * Currently hovered app (has a tooltip component)
34
35
  */
35
- hoveredApp: DevToolbarAppState | null;
36
+ hoveredApp: DevToolbarAppState | undefined;
36
37
  /**
37
38
  * Viewport rect of the hovered app button (for tooltip positioning)
38
39
  */
39
- hoveredAppRect: DOMRect | null;
40
+ hoveredAppRect: DOMRect | undefined;
40
41
  /**
41
42
  * Whether toolbar is being dragged
42
43
  */
@@ -59,48 +60,48 @@ export interface ToolbarContextState {
59
60
  */
60
61
  placement: ToolbarPlacement;
61
62
  /**
62
- * Register an app
63
+ * Registers an app with the toolbar.
63
64
  */
64
65
  registerApp: (app: DevToolbarAppState) => void;
65
66
  /**
66
- * Set dragging state
67
+ * Sets the dragging state.
67
68
  */
68
69
  setDragging: (dragging: boolean) => void;
69
70
  /**
70
- * Set/clear the hovered app. Pass null to start the leave debounce.
71
+ * Sets or clears the hovered app. Pass undefined to start the leave debounce.
71
72
  */
72
- setHoveredApp: (app: DevToolbarAppState | null, rect?: DOMRect | null) => void;
73
+ setHoveredApp: (app: DevToolbarAppState | undefined, rect?: DOMRect | undefined) => void;
73
74
  /**
74
- * Set app notification
75
+ * Sets a notification for an app.
75
76
  */
76
77
  setNotification: (appId: string, state: boolean, level?: "info" | "warning" | "error") => void;
77
78
  /**
78
- * Set toolbar placement
79
+ * Sets the toolbar placement.
79
80
  */
80
81
  setPlacement: (placement: ToolbarPlacement) => void;
81
82
  /**
82
- * Set toolbar visibility
83
+ * Sets toolbar visibility.
83
84
  */
84
85
  setVisible: (visible: boolean) => void;
85
86
  /**
86
- * Toggle an app
87
+ * Toggles an app's active state.
87
88
  */
88
89
  toggleApp: (appId: string) => Promise<void>;
89
90
  /**
90
- * Remove a pinned tooltip by its instance id.
91
+ * Removes a pinned tooltip by its instance id.
91
92
  */
92
93
  unpinTooltip: (id: string) => void;
93
94
  /**
94
- * Unregister an app
95
+ * Unregisters an app.
95
96
  */
96
97
  unregisterApp: (appId: string) => void;
97
98
  }
98
99
  /**
99
- * Toolbar context
100
+ * Preact context object that exposes the toolbar's shared state to all child components.
100
101
  */
101
- export declare const ToolbarContext: ReturnType<typeof createContext<ToolbarContextState | null>>;
102
+ export declare const ToolbarContext: ReturnType<typeof createContext<ToolbarContextState | undefined>>;
102
103
  /**
103
- * Hook to access toolbar context
104
- * @throws Error if used outside ToolbarContext provider
104
+ * Accesses the toolbar context, throwing if used outside a provider.
105
+ * @throws Error if used outside ToolbarContext provider.
105
106
  */
106
107
  export declare const useToolbarContext: () => ToolbarContextState;
@@ -1,7 +1,7 @@
1
1
  import type { VisulimaDevTools } from "../types/global-api.d.ts";
2
2
  import type { DevToolbarApp } from "../types/index.d.ts";
3
3
  /**
4
- * Global DevTools API implementation.
4
+ * Creates the global DevTools API implementation.
5
5
  */
6
6
  export declare const createGlobalAPI: (appManager: {
7
7
  clearNotification: (id: string) => void;
@@ -18,7 +18,7 @@ export declare const createGlobalAPI: (appManager: {
18
18
  toggle: () => void;
19
19
  }) => VisulimaDevTools;
20
20
  /**
21
- * Setup global API on window object
22
- * @param api API instance
21
+ * Mounts the global API on the window object so it can be accessed from outside the toolbar.
22
+ * @param api API instance to expose globally.
23
23
  */
24
24
  export declare const setupGlobalAPI: (api: VisulimaDevTools) => void;
@@ -1,6 +1,8 @@
1
1
  import type { ServerHelpers } from "../types/app.d.ts";
2
2
  /**
3
- * Create server helpers for apps
4
- * @returns Server helpers instance
3
+ * Creates server helpers that proxy RPC calls for use within app init().
4
+ * @returns Server helpers instance.
5
5
  */
6
- export declare const createServerHelpers: () => ServerHelpers;
6
+ declare const createServerHelpers: () => ServerHelpers;
7
+ export { createServerHelpers };
8
+ export default createServerHelpers;
@@ -1,9 +1,9 @@
1
1
  import type { DevToolbarAppState } from "../../types/index.d.ts";
2
2
  /**
3
- * Hook for app management - exposes context app methods directly
3
+ * Exposes app management methods from the toolbar context.
4
4
  */
5
- export declare const useApps: () => {
6
- activeAppId: string | null;
5
+ declare const useApps: () => {
6
+ activeAppId: string | undefined;
7
7
  apps: DevToolbarAppState[];
8
8
  clearNotification: (appId: string) => void;
9
9
  registerApp: (app: DevToolbarAppState) => void;
@@ -11,3 +11,5 @@ export declare const useApps: () => {
11
11
  toggleApp: (appId: string) => Promise<void>;
12
12
  unregisterApp: (appId: string) => void;
13
13
  };
14
+ export { useApps };
15
+ export default useApps;
@@ -1,21 +1,25 @@
1
1
  /**
2
2
  * Keyboard shortcut bindings
3
3
  */
4
- export interface KeyBindings {
4
+ interface KeyBindings {
5
5
  /** Close active app / panel */
6
6
  close: string;
7
7
  /** Toggle toolbar panel open/closed */
8
8
  toggle: string;
9
9
  }
10
- export declare const DEFAULT_KEYBINDINGS: KeyBindings;
10
+ declare const DEFAULT_KEYBINDINGS: KeyBindings;
11
11
  /**
12
- * Frame state interface
12
+ * Persistent state for the devtools panel frame.
13
13
  */
14
- export interface DevToolsFrameState {
14
+ interface DevToolsFrameState {
15
15
  /**
16
16
  * Close panel on outside click
17
17
  */
18
18
  closeOnOutsideClick: boolean;
19
+ /**
20
+ * Preferred editor for "Open in editor" (empty string = auto-detect)
21
+ */
22
+ editor: string;
19
23
  /**
20
24
  * Panel height as viewport height percentage
21
25
  */
@@ -74,21 +78,33 @@ export interface DevToolsFrameState {
74
78
  width: number;
75
79
  }
76
80
  /**
77
- * Return type for useFrameState hook
81
+ * Default frame state - matches Vue DevTools exactly
82
+ */
83
+ declare const DEFAULT_STATE: DevToolsFrameState;
84
+ /**
85
+ * Return type for the useFrameState hook.
78
86
  */
79
- export interface UseFrameStateReturn {
87
+ interface UseFrameStateReturn {
80
88
  /**
81
- * Current frame state
89
+ * Current frame state.
82
90
  */
83
91
  state: DevToolsFrameState;
84
92
  /**
85
- * Update state with partial values
93
+ * Updates state with partial values.
86
94
  */
87
95
  updateState: (value: Partial<DevToolsFrameState>) => void;
88
96
  }
89
97
  /**
90
- * Hook for frame state management.
98
+ * Manages the shared devtools frame state.
91
99
  * All callers share the same module-level state so position, open, and other
92
100
  * fields stay in sync regardless of how many times the hook is called.
93
101
  */
94
- export declare const useFrameState: () => UseFrameStateReturn;
102
+ declare const useFrameState: () => UseFrameStateReturn;
103
+ /**
104
+ * Returns the currently selected editor preference (empty string = auto-detect).
105
+ * Reads from the singleton shared state, so always reflects the latest value
106
+ * without re-reading localStorage.
107
+ */
108
+ declare const getEditorPreference: () => string | undefined;
109
+ export type { DevToolsFrameState, KeyBindings, UseFrameStateReturn };
110
+ export { DEFAULT_KEYBINDINGS, DEFAULT_STATE, getEditorPreference, useFrameState };
@@ -1,21 +1,23 @@
1
1
  /**
2
- * Return type for usePanelVisible hook
2
+ * Return type for the usePanelVisible hook.
3
3
  */
4
- export interface UsePanelVisibleReturn {
4
+ interface UsePanelVisibleReturn {
5
5
  /**
6
- * Close panel
6
+ * Closes the panel.
7
7
  */
8
8
  closePanel: () => void;
9
9
  /**
10
- * Whether panel is visible
10
+ * Whether the panel is currently visible.
11
11
  */
12
12
  panelVisible: boolean;
13
13
  /**
14
- * Toggle panel visibility
14
+ * Toggles panel visibility, optionally forcing a specific state.
15
15
  */
16
16
  togglePanelVisible: (_?: unknown, newState?: boolean) => void;
17
17
  }
18
18
  /**
19
- * Hook for panel visibility management - converted from Vue DevTools usePanelVisible
19
+ * Manages panel visibility with keyboard shortcut support.
20
20
  */
21
- export declare const usePanelVisible: () => UsePanelVisibleReturn;
21
+ declare const usePanelVisible: () => UsePanelVisibleReturn;
22
+ export type { UsePanelVisibleReturn };
23
+ export { usePanelVisible };
@@ -1,8 +1,8 @@
1
1
  import type { RefObject } from "preact";
2
2
  /**
3
- * Return type for usePosition hook
3
+ * Return type for usePosition hook.
4
4
  */
5
- export interface UsePositionReturn {
5
+ interface UsePositionReturn {
6
6
  anchorStyle: {
7
7
  left: string;
8
8
  top: string;
@@ -12,11 +12,13 @@ export interface UsePositionReturn {
12
12
  isDragging: boolean;
13
13
  isHidden: boolean;
14
14
  isVertical: boolean;
15
- onPointerDown: (e: PointerEvent) => void;
15
+ onPointerDown: (event: PointerEvent) => void;
16
16
  panelStyle: Record<string, string>;
17
17
  }
18
18
  /**
19
- * Hook for position management - converted from Vue DevTools usePosition
19
+ * Manages the draggable toolbar position, converted from Vue DevTools usePosition.
20
20
  * @see https://github.com/vuejs/devtools/blob/main/packages/overlay/src/composables/position.ts
21
21
  */
22
- export declare const usePosition: (panelElement: RefObject<HTMLElement>) => UsePositionReturn;
22
+ declare const usePosition: (panelElement: RefObject<HTMLElement>) => UsePositionReturn;
23
+ export type { UsePositionReturn };
24
+ export { usePosition };
@@ -1,13 +1,15 @@
1
- export type Theme = "light" | "dark" | "system";
2
- export interface UseThemeReturn {
1
+ type Theme = "light" | "dark" | "system";
2
+ interface UseThemeReturn {
3
3
  resolvedTheme: "light" | "dark";
4
4
  setTheme: (newTheme: Theme) => void;
5
5
  theme: Theme;
6
6
  toggleTheme: () => void;
7
7
  }
8
8
  /**
9
- * Hook for managing theme (light/dark mode).
9
+ * Manages the shared light/dark/system theme preference.
10
10
  * All callers share the same module-level state so theme changes propagate
11
11
  * to every component (ToolbarContainer, SettingsApp, etc.) immediately.
12
12
  */
13
- export declare const useTheme: () => UseThemeReturn;
13
+ declare const useTheme: () => UseThemeReturn;
14
+ export type { Theme, UseThemeReturn };
15
+ export { useTheme };