@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
@@ -3,75 +3,72 @@ import type { TimelineEvent } from "./timeline.d.ts";
3
3
  /**
4
4
  * Hook event definitions
5
5
  */
6
- export interface HookEvents {
7
- /**
8
- * Extension point for custom events
9
- */
6
+ interface HookEvents {
10
7
  [key: string]: (...args: any[]) => void;
11
8
  /**
12
- * App error occurred
13
- * @param error Error object
14
- * @param appId Optional app ID where error occurred
9
+ * App error occurred.
10
+ * @param error Error object.
11
+ * @param appId Optional app ID where error occurred.
15
12
  */
16
13
  "app:error": (error: Error, appId?: string) => void;
17
14
  /**
18
- * DevTools closed
15
+ * DevTools closed.
19
16
  */
20
17
  "devtools:close": () => void;
21
18
  /**
22
- * DevTools initialized
19
+ * DevTools initialized.
23
20
  */
24
21
  "devtools:init": () => void;
25
22
  /**
26
- * DevTools opened
27
- * @param appId ID of the opened app
23
+ * DevTools opened.
24
+ * @param appId ID of the opened app.
28
25
  */
29
26
  "devtools:open": (appId: string) => void;
30
27
  /**
31
- * Timeline event added
32
- * @param event Timeline event
28
+ * Timeline event added.
29
+ * @param event Timeline event.
33
30
  */
34
31
  "timeline:event": (event: TimelineEvent) => void;
35
32
  }
36
33
  /**
37
- * Dev toolbar hook interface
34
+ * Dev toolbar hook interface.
38
35
  * Exposed as window.__DEV_TOOLBAR_HOOK__
39
36
  */
40
- export interface DevToolbarHook {
37
+ interface DevToolbarHook {
41
38
  /**
42
- * Add a timeline event
43
- * @param groupId Timeline group ID
44
- * @param event Timeline event
39
+ * Adds a timeline event.
40
+ * @param groupId Timeline group ID.
41
+ * @param event Timeline event.
45
42
  */
46
43
  addTimelineEvent: (groupId: string, event: TimelineEvent) => void;
47
44
  /**
48
- * Emit an event
49
- * @param event Event name
50
- * @param args Event arguments
45
+ * Emits an event.
46
+ * @param event Event name.
47
+ * @param args Event arguments.
51
48
  */
52
49
  emit: <T extends keyof HookEvents>(event: T, ...args: Parameters<HookEvents[T]>) => void;
53
50
  /**
54
- * Unsubscribe from an event
55
- * @param event Event name
56
- * @param handler Optional specific handler to remove
51
+ * Unsubscribes from an event.
52
+ * @param event Event name.
53
+ * @param handler Optional specific handler to remove.
57
54
  */
58
55
  off: <T extends keyof HookEvents>(event: T, handler?: HookEvents[T]) => void;
59
56
  /**
60
- * Subscribe to an event
61
- * @param event Event name
62
- * @param handler Event handler
63
- * @returns Unsubscribe function
57
+ * Subscribes to an event.
58
+ * @param event Event name.
59
+ * @param handler Event handler.
60
+ * @returns Unsubscribe function.
64
61
  */
65
62
  on: <T extends keyof HookEvents>(event: T, handler: HookEvents[T]) => () => void;
66
63
  /**
67
- * Subscribe to an event once
68
- * @param event Event name
69
- * @param handler Event handler
64
+ * Subscribes to an event once.
65
+ * @param event Event name.
66
+ * @param handler Event handler.
70
67
  */
71
68
  once: <T extends keyof HookEvents>(event: T, handler: HookEvents[T]) => void;
72
69
  /**
73
- * Register a custom app
74
- * @param app App definition
70
+ * Registers a custom app.
71
+ * @param app App definition.
75
72
  */
76
73
  registerApp: (app: DevToolbarApp) => void;
77
74
  }
@@ -81,8 +78,9 @@ export interface DevToolbarHook {
81
78
  declare global {
82
79
  interface Window {
83
80
  /**
84
- * Dev toolbar hook for library integrations
81
+ * Dev toolbar hook for library integrations.
85
82
  */
86
83
  __DEV_TOOLBAR_HOOK__?: DevToolbarHook;
87
84
  }
88
85
  }
86
+ export type { DevToolbarHook, HookEvents };
@@ -33,11 +33,11 @@ export interface MessageChannel<TEvents extends Record<string, (...args: any[])
33
33
  */
34
34
  export type ChannelFactory<TEvents extends Record<string, (...args: any[]) => void>> = () => MessageChannel<TEvents>;
35
35
  /**
36
- * Message channel context
36
+ * Factory result providing a method to instantiate named message channels.
37
37
  */
38
38
  export interface MessageChannelContext<TEvents extends Record<string, (...args: any[]) => void>> {
39
39
  /**
40
- * Create a new channel instance
40
+ * Creates and returns a new channel instance.
41
41
  */
42
42
  createChannel: () => MessageChannel<TEvents>;
43
43
  }
@@ -1,4 +1,5 @@
1
1
  import type { ViteDevServer } from "vite";
2
+ import type { StaticAsset } from "../rpc/functions/assets.d.ts";
2
3
  import type { SerializableModuleNode } from "../rpc/functions/module-graph.d.ts";
3
4
  import type { TailwindConfigResult } from "../rpc/functions/tailwind-config.d.ts";
4
5
  /**
@@ -14,6 +15,10 @@ export interface ServerFunctions {
14
15
  * Get module dependency graph
15
16
  */
16
17
  getModuleGraph: () => Promise<SerializableModuleNode[]>;
18
+ /**
19
+ * Get all static assets from the public directory
20
+ */
21
+ getStaticAssets: () => Promise<StaticAsset[]>;
17
22
  /**
18
23
  * Get full Tailwind CSS theme (default + user overrides)
19
24
  */
@@ -27,8 +32,9 @@ export interface ServerFunctions {
27
32
  * @param file File path
28
33
  * @param line Line number (1-based)
29
34
  * @param column Column number (1-based)
35
+ * @param editor Editor override (e.g. "code", "webstorm") — empty string means auto-detect
30
36
  */
31
- openInEditor: (file: string, line?: number, column?: number) => Promise<void>;
37
+ openInEditor: (file: string, line?: number, column?: number, editor?: string) => Promise<void>;
32
38
  /**
33
39
  * Read file contents
34
40
  * @param path File path
@@ -40,20 +46,17 @@ export interface ServerFunctions {
40
46
  * These can be called from the server
41
47
  */
42
48
  export interface ClientFunctions {
43
- /**
44
- * Extension point for custom client functions
45
- */
46
49
  [key: string]: (...args: any[]) => void;
47
50
  /**
48
51
  * Notify client of config change
49
52
  * @param config New Vite config
50
53
  */
51
- onConfigChange: (config: Record<string, any>) => void;
54
+ onConfigChange: (config: Record<string, unknown>) => void;
52
55
  /**
53
56
  * Notify client of HMR update
54
57
  * @param payload HMR payload
55
58
  */
56
- onHMRUpdate: (payload: any) => void;
59
+ onHMRUpdate: (payload: unknown) => void;
57
60
  /**
58
61
  * Notify client of module update
59
62
  * @param module Updated module node
@@ -94,7 +97,8 @@ export interface ClientRPCContext {
94
97
  /**
95
98
  * Register a client function
96
99
  * @param name Function name
97
- * @param fn Function implementation
100
+ * @param function_ Function implementation
98
101
  */
99
102
  registerFunction: <K extends keyof ClientFunctions>(name: K, function_: ClientFunctions[K]) => void;
100
103
  }
104
+ export { type StaticAsset } from "../rpc/functions/assets.d.ts";
@@ -1,9 +1,9 @@
1
1
  /**
2
- * Timeline event level
2
+ * Severity levels for timeline events.
3
3
  */
4
4
  export type TimelineEventLevel = "info" | "warning" | "error";
5
5
  /**
6
- * Timeline event
6
+ * A single captured event displayed in the timeline panel.
7
7
  */
8
8
  export interface TimelineEvent {
9
9
  /**
@@ -36,7 +36,7 @@ export interface TimelineEvent {
36
36
  title: string;
37
37
  }
38
38
  /**
39
- * Timeline group
39
+ * A named group that holds related timeline events.
40
40
  */
41
41
  export interface TimelineGroup {
42
42
  /**
@@ -34,7 +34,7 @@ export interface FrameState {
34
34
  top: number;
35
35
  }
36
36
  /**
37
- * Toolbar settings
37
+ * Configuration options controlling the toolbar's initial appearance.
38
38
  */
39
39
  export interface ToolbarSettings {
40
40
  /**
@@ -1,4 +1,3 @@
1
- /** @jsxImportSource preact */
2
1
  import type { ComponentChildren, JSX } from "preact";
3
2
  type AlertVariant = "default" | "destructive" | "info" | "success" | "warning";
4
3
  interface AlertProps extends JSX.HTMLAttributes<HTMLDivElement> {
@@ -1,4 +1,3 @@
1
- /** @jsxImportSource preact */
2
1
  import type { ComponentChildren, JSX } from "preact";
3
2
  type BadgeVariant = "default" | "destructive" | "info" | "outline" | "secondary" | "success" | "warning";
4
3
  interface BadgeProps extends JSX.HTMLAttributes<HTMLDivElement> {
@@ -1,4 +1,3 @@
1
- /** @jsxImportSource preact */
2
1
  import type { ComponentChildren, JSX } from "preact";
3
2
  type ButtonSize = "default" | "icon" | "lg" | "sm";
4
3
  type ButtonVariant = "default" | "destructive" | "ghost" | "link" | "outline" | "secondary";
@@ -1,4 +1,3 @@
1
- /** @jsxImportSource preact */
2
1
  import type { ComponentChildren, JSX } from "preact";
3
2
  interface CardProps extends JSX.HTMLAttributes<HTMLDivElement> {
4
3
  children?: ComponentChildren;
@@ -1,4 +1,3 @@
1
- /** @jsxImportSource preact */
2
1
  import type { ComponentChildren } from "preact";
3
2
  interface IconProps {
4
3
  class?: string;
@@ -12,10 +11,9 @@ interface IconProps {
12
11
  /**
13
12
  * Renders a lucide-static icon using CSS mask-image.
14
13
  * Color is driven by the parent element's `color` property (currentColor).
15
- *
16
- * Usage:
17
- * import xIcon from "lucide-static/icons/x.d.ts";
18
- * &lt;Icon src={xIcon} size={13} />
14
+ * @example
15
+ * import xIcon from "lucide-static/icons/x.d.ts";
16
+ * &lt;Icon src={xIcon} size={13} />
19
17
  */
20
18
  declare const Icon: ({ class: className, size, src }: IconProps) => ComponentChildren;
21
19
  export default Icon;
@@ -1,4 +1,3 @@
1
- /** @jsxImportSource preact */
2
1
  import type { JSX } from "preact";
3
2
  import type { ForwardRefExoticComponent, RefAttributes } from "preact/compat";
4
3
  interface InputProps extends JSX.InputHTMLAttributes<HTMLInputElement> {
@@ -1,4 +1,3 @@
1
- /** @jsxImportSource preact */
2
1
  import type { ComponentChildren, JSX } from "preact";
3
2
  interface LabelProps extends JSX.LabelHTMLAttributes<HTMLLabelElement> {
4
3
  children?: ComponentChildren;
@@ -22,6 +22,6 @@ interface PopoverCloseProps extends JSX.ButtonHTMLAttributes<HTMLButtonElement>
22
22
  }
23
23
  declare const Popover: ({ children, defaultOpen, onOpenChange, open }: PopoverProps) => JSX.Element;
24
24
  declare const PopoverTrigger: ({ children, class: className, ...rest }: PopoverTriggerProps) => JSX.Element;
25
- declare const PopoverContent: ({ align, children, class: className, side, sideOffset, ...rest }: PopoverContentProps) => JSX.Element | null;
25
+ declare const PopoverContent: ({ align, children, class: className, side, sideOffset, ...rest }: PopoverContentProps) => JSX.Element | undefined;
26
26
  declare const PopoverClose: ({ children, class: className, ...rest }: PopoverCloseProps) => JSX.Element;
27
27
  export { Popover, PopoverClose, PopoverContent, PopoverTrigger };
@@ -1,4 +1,3 @@
1
- /** @jsxImportSource preact */
2
1
  import type { JSX } from "preact";
3
2
  interface ProgressProps extends JSX.HTMLAttributes<HTMLDivElement> {
4
3
  class?: string;
@@ -1,4 +1,3 @@
1
- /** @jsxImportSource preact */
2
1
  import type { JSX } from "preact";
3
2
  interface SeparatorProps extends JSX.HTMLAttributes<HTMLDivElement> {
4
3
  class?: string;
@@ -1,4 +1,3 @@
1
- /** @jsxImportSource preact */
2
1
  import type { JSX } from "preact";
3
2
  interface SkeletonProps extends JSX.HTMLAttributes<HTMLDivElement> {
4
3
  class?: string;
@@ -1,4 +1,3 @@
1
- /** @jsxImportSource preact */
2
1
  import type { JSX } from "preact";
3
2
  interface SwitchProps extends Omit<JSX.ButtonHTMLAttributes<HTMLButtonElement>, "onChange"> {
4
3
  checked?: boolean;
@@ -1,4 +1,3 @@
1
- /** @jsxImportSource preact */
2
1
  import type { ComponentChildren, JSX } from "preact";
3
2
  interface TabsProps extends JSX.HTMLAttributes<HTMLDivElement> {
4
3
  children?: ComponentChildren;
@@ -25,5 +24,5 @@ interface TabsContentProps extends JSX.HTMLAttributes<HTMLDivElement> {
25
24
  declare const Tabs: ({ children, class: className, defaultValue, onValueChange, value, ...rest }: TabsProps) => JSX.Element;
26
25
  declare const TabsList: ({ children, class: className, ...rest }: TabsListProps) => JSX.Element;
27
26
  declare const TabsTrigger: ({ children, class: className, disabled, value, ...rest }: TabsTriggerProps) => JSX.Element;
28
- declare const TabsContent: ({ children, class: className, value, ...rest }: TabsContentProps) => JSX.Element | null;
27
+ declare const TabsContent: ({ children, class: className, value, ...rest }: TabsContentProps) => JSX.Element | undefined;
29
28
  export { Tabs, TabsContent, TabsList, TabsTrigger };
@@ -1,4 +1,3 @@
1
- /** @jsxImportSource preact */
2
1
  import type { JSX } from "preact";
3
2
  import type { ForwardRefExoticComponent, RefAttributes } from "preact/compat";
4
3
  interface TextareaProps extends JSX.TextareaHTMLAttributes<HTMLTextAreaElement> {
@@ -15,5 +15,5 @@ interface TooltipContentProps extends JSX.HTMLAttributes<HTMLDivElement> {
15
15
  }
16
16
  declare const Tooltip: ({ children, delayDuration: _delayDuration }: TooltipProps) => JSX.Element;
17
17
  declare const TooltipTrigger: ({ children, class: className, ...rest }: TooltipTriggerProps) => JSX.Element;
18
- declare const TooltipContent: ({ children, class: className, side, sideOffset, ...rest }: TooltipContentProps) => JSX.Element | null;
18
+ declare const TooltipContent: ({ children, class: className, side, sideOffset, ...rest }: TooltipContentProps) => JSX.Element | undefined;
19
19
  export { Tooltip, TooltipContent, TooltipTrigger };
@@ -1,4 +1,3 @@
1
- export { default as cn } from "../utils/cn.d.ts";
2
1
  export { Alert, AlertDescription, AlertTitle } from "./components/alert.d.ts";
3
2
  export { default as Badge } from "./components/badge.d.ts";
4
3
  export { default as Button } from "./components/button.d.ts";
package/dist/ui/index.js CHANGED
@@ -1 +1 @@
1
- import{default as e}from"../packem_shared/cn-DWLJYh3h.js";import{Alert as a,AlertDescription as f,AlertTitle as p}from"../packem_shared/Alert-H-x1JuZ0.js";import{default as s}from"../packem_shared/Badge-C30mDKKG.js";import{default as x}from"../packem_shared/Button-DODNCTPZ.js";import{Card as n,CardContent as i,CardDescription as u,CardFooter as T,CardHeader as C,CardTitle as g}from"../packem_shared/Card-DdI7Wn3t.js";import{default as b}from"../packem_shared/Icon-DWFLZkwW.js";import{default as v}from"../packem_shared/Input-GfbOwAkK.js";import{default as S}from"../packem_shared/Label-Bzi47aUf.js";import{Popover as D,PopoverClose as I,PopoverContent as L,PopoverTrigger as h}from"../packem_shared/Popover-o3Vkvndp.js";import{default as w}from"../packem_shared/Progress-vGfFpxRn.js";import{default as H}from"../packem_shared/Separator-DQGeJPQg.js";import{default as q}from"../packem_shared/Skeleton-BYXau6jM.js";import{default as z}from"../packem_shared/Switch-BeC78S_T.js";import{Tabs as G,TabsContent as J,TabsList as K,TabsTrigger as M}from"../packem_shared/Tabs-BBc4S-2T.js";import{default as O}from"../packem_shared/Textarea-DvbSX13V.js";import{Tooltip as R,TooltipContent as U,TooltipTrigger as V}from"../packem_shared/Tooltip-BwK-2I9P.js";import{clsx as X}from"clsx";export{a as Alert,f as AlertDescription,p as AlertTitle,s as Badge,x as Button,n as Card,i as CardContent,u as CardDescription,T as CardFooter,C as CardHeader,g as CardTitle,b as Icon,v as Input,S as Label,D as Popover,I as PopoverClose,L as PopoverContent,h as PopoverTrigger,w as Progress,H as Separator,q as Skeleton,z as Switch,G as Tabs,J as TabsContent,K as TabsList,M as TabsTrigger,O as Textarea,R as Tooltip,U as TooltipContent,V as TooltipTrigger,X as clsx,e as cn};
1
+ import{Alert as e,AlertDescription as t,AlertTitle as a}from"../packem_shared/Alert-D2CvX4fw.js";import{default as f}from"../packem_shared/Badge-BEgU04nl.js";import{default as s}from"../packem_shared/Button-Bkx66Co7.js";import{Card as x,CardContent as m,CardDescription as i,CardFooter as n,CardHeader as T,CardTitle as u}from"../packem_shared/Card-CJa4vHVc.js";import{default as g}from"../packem_shared/Icon-B6UHkC0o.js";import{default as c}from"../packem_shared/Input-Cs6aduTi.js";import{default as v}from"../packem_shared/Label-CgCFOMDc.js";import{Popover as S,PopoverClose as B,PopoverContent as D,PopoverTrigger as I}from"../packem_shared/Popover-DzH5lAc9.js";import{default as h}from"../packem_shared/Progress-DN6zn-0l.js";import{default as w}from"../packem_shared/Separator-D38mKeZv.js";import{default as H}from"../packem_shared/Skeleton-Dv-tcA1P.js";import{default as q}from"../packem_shared/Switch-C3NTpeoR.js";import{Tabs as z,TabsContent as E,TabsList as G,TabsTrigger as J}from"../packem_shared/Tabs-SuFWbB6d.js";import{default as M}from"../packem_shared/Textarea-Yfg3dLZi.js";import{Tooltip as O,TooltipContent as Q,TooltipTrigger as R}from"../packem_shared/Tooltip-BHmzUaxu.js";import{clsx as V}from"../packem_shared/clsx-wGlvpUfw.js";export{e as Alert,t as AlertDescription,a as AlertTitle,f as Badge,s as Button,x as Card,m as CardContent,i as CardDescription,n as CardFooter,T as CardHeader,u as CardTitle,g as Icon,c as Input,v as Label,S as Popover,B as PopoverClose,D as PopoverContent,I as PopoverTrigger,h as Progress,w as Separator,H as Skeleton,q as Switch,z as Tabs,E as TabsContent,G as TabsList,J as TabsTrigger,M as Textarea,O as Tooltip,Q as TooltipContent,R as TooltipTrigger,V as clsx};
@@ -1,6 +1,5 @@
1
1
  import generate from "@babel/generator";
2
2
  declare const gen: typeof generate;
3
- /** The attribute name injected into each JSX opening element. */
4
3
  export declare const SOURCE_ATTR = "data-vdt-source";
5
4
  export interface InjectSourceIgnore {
6
5
  /** Component names or patterns to skip. */
@@ -2,4 +2,5 @@
2
2
  * Returns true if `value` matches any of the given patterns.
3
3
  * Strings are treated as glob patterns; RegExps are tested directly.
4
4
  */
5
- export declare const matcher: (patterns: (RegExp | string)[], value: string) => boolean;
5
+ declare const matcher: (patterns: (RegExp | string)[], value: string) => boolean;
6
+ export default matcher;
@@ -10,15 +10,19 @@ export interface DevToolbarOptions {
10
10
  * useful for projects that do not use html file as an entry
11
11
  *
12
12
  * WARNING: only set this if you know exactly what it does.
13
- * @default ''
13
+ * @default Empty string (disabled).
14
14
  */
15
15
  appendTo?: string | RegExp;
16
16
  /**
17
- * Built-in apps to enable
17
+ * Built-in apps to enable. All apps are disabled by default — only
18
+ * `viteConfig`, `settings`, and the "more" drawer are shown out of the box.
19
+ * Explicitly set an app to `true` to enable it.
20
+ * @example { inspector: true, seo: true }
18
21
  */
19
22
  apps?: {
20
23
  [key: string]: boolean | undefined;
21
24
  a11y?: boolean;
25
+ assets?: boolean;
22
26
  inspector?: boolean;
23
27
  moduleGraph?: boolean;
24
28
  performance?: boolean;
@@ -79,9 +83,9 @@ export interface DevToolbarOptions {
79
83
  * Settings app (stored in localStorage).
80
84
  */
81
85
  keybindings?: {
82
- /** Close active app / panel. @default "Escape" */
86
+ /** Close active app / panel. \@default "Escape" */
83
87
  close?: string;
84
- /** Toggle the DevTools panel open/closed. @default "Alt+Shift+D" */
88
+ /** Toggle the DevTools panel open/closed. \@default "Alt+Shift+D" */
85
89
  toggle?: string;
86
90
  };
87
91
  /**
@@ -108,7 +112,7 @@ export interface DevToolbarOptions {
108
112
  */
109
113
  reduceMotion?: boolean;
110
114
  /**
111
- * Strip all @visulima/dev-toolbar imports and virtual modules when building
115
+ * Strip all \@visulima/dev-toolbar imports and virtual modules when building
112
116
  * for production (i.e. when `command !== 'serve'` or `mode === 'production'`).
113
117
  * This guarantees the toolbar never ends up in a production bundle even if the
114
118
  * user accidentally imports our package in application code.
@@ -139,6 +143,6 @@ export interface DevToolbarOptions {
139
143
  width?: number;
140
144
  }
141
145
  /**
142
- * Dev toolbar Vite plugin
146
+ * Returns the Vite plugin array for the dev toolbar.
143
147
  */
144
148
  export declare const devToolbar: (options?: DevToolbarOptions) => Plugin[];
@@ -1,2 +1,2 @@
1
- var j=Object.defineProperty;var c=(e,o)=>j(e,"name",{value:o,configurable:!0});import{createRequire as w}from"node:module";import{normalizePath as F}from"vite";import{createServerRPCContext as C}from"./packem_shared/createServerRPCContext-CRd6VAWp.js";const T=w(import.meta.url),a=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,v=c(e=>{if(typeof a<"u"&&a.versions&&a.versions.node){const[o,u]=a.versions.node.split(".").map(Number);if(o>22||o===22&&u>=3||o===20&&u>=16)return a.getBuiltinModule(e)}return T(e)},"__cjs_getBuiltinModule"),$=v("node:fs"),P=v("node:path"),{fileURLToPath:x}=v("node:url");var O=Object.defineProperty,f=c((e,o)=>O(e,"name",{value:o,configurable:!0}),"s");const I=f(()=>F(P.dirname(x(import.meta.url))),"getDevToolbarPath"),R=f(e=>e.replace(/\?.*$/,""),"removeUrlQuery"),g="?__visulima-dev-toolbar-resource",m="virtual:visulima-dev-toolbar-options",h=`\0${m}`,l="virtual:visulima-dev-toolbar-path:",y="\0__visulima-dev-toolbar-empty",M=f((e={})=>{const o=I(),u=e.removeDevtoolsOnBuild??!0,_=e.injectSource?.enabled??!0;let d;return[{apply:"serve",configResolved(t){d=t},configureServer(t){C(t,e.serverFunctions,{editor:e.editor}),t.ws.on("connection",()=>{t.ws.send({event:"dev-toolbar:init",type:"custom"})})},enforce:"pre",async load(t){if(t===h)return`export default ${JSON.stringify({apps:{a11y:e.apps?.a11y??!0,inspector:e.apps?.inspector??!0,moduleGraph:e.apps?.moduleGraph??!0,performance:e.apps?.performance??!0,seo:e.apps?.seo??!0,settings:e.apps?.settings??!0,tailwind:e.apps?.tailwind??!0,timeline:e.apps?.timeline??!0,viteConfig:e.apps?.viteConfig??!0},base:d.base,closeOnOutsideClick:e.closeOnOutsideClick??!0,defaultVisible:e.defaultVisible??!0,height:e.height??60,keybindings:e.keybindings??{},minimizePanelInactive:e.minimizePanelInactive??5e3,placement:e.placement??"bottom-center",position:e.position??"bottom",reduceMotion:e.reduceMotion??!1,requireUrlFlag:e.requireUrlFlag??!1,urlFlagName:e.urlFlagName??"devtools",width:e.width??80})};`;if(t.endsWith(g)){const r=R(t);return this.addWatchFile(r),await $.promises.readFile(r,"utf8")}},name:"@visulima/dev-toolbar",resolveId(t){if(t===m)return h;if(t.startsWith(l))return`${t.replace(l,`${o}/`)}${g}`},transform(t,r,s){if(s?.ssr)return;const{appendTo:i}=e,n=r.split("?",2)[0];if(i&&n&&(typeof i=="string"&&n.endsWith(i)||i instanceof RegExp&&i.test(n)))return`import '${l}client/overlay.js';
2
- ${t}`},transformIndexHtml(){return e.appendTo?void 0:{html:"",tags:[{attrs:{src:`${d.base||"/"}@id/${l}client/overlay.js`,type:"module"},injectTo:"head-prepend",tag:"script"}]}}},{enforce:"pre",name:"@visulima/dev-toolbar:inject-source",async transform(t,r){if(!_||d.mode!=="development"||r.includes("node_modules")||r.includes("?raw")||/\/dist\/|\/build\//.test(r)||!/\.[jt]sx$/.test(r.split("?")[0]??""))return;const{readFile:s}=await import("node:fs/promises");let i;try{const b=await s(r.split("?")[0]??r,"utf-8");b!==t&&(i=b)}catch{}const{addSourceToJsx:n}=await import("./packem_chunks/inject-source.js"),p=n(t,r,e.injectSource?.ignore,i);if(p)return{code:p.code??t,map:p.map??null}}},{apply(t,{command:r,mode:s}){return u&&(r!=="serve"||s==="production")},load(t){if(t===y)return"export default {};"},name:"@visulima/dev-toolbar:remove-on-build",resolveId(t){if(t===m||t.startsWith(l))return y}}]},"devToolbar");export{M as devToolbar};
1
+ var w=Object.defineProperty;var u=(e,r)=>w(e,"name",{value:r,configurable:!0});import{createRequire as j}from"node:module";import{normalizePath as x}from"vite";import{createServerRPCContext as F}from"./packem_shared/createServerRPCContext-CJXa8ezf.js";const $=j(import.meta.url),n=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,f=u(e=>{if(typeof n<"u"&&n.versions&&n.versions.node){const[r,p]=n.versions.node.split(".").map(Number);if(r>22||r===22&&p>=3||r===20&&p>=16)return n.getBuiltinModule(e)}return $(e)},"__cjs_getBuiltinModule"),T=f("node:fs"),O=f("node:path"),{fileURLToPath:P}=f("node:url");var C=Object.defineProperty,v=u((e,r)=>C(e,"name",{value:r,configurable:!0}),"s");const R=v(()=>x(O.dirname(P(import.meta.url))),"getDevToolbarPath"),I=/\?.+$/,S=/\/dist\/|\/build\//,q=/\.[jt]sx$/,W=v(e=>e.replace(I,""),"removeUrlQuery"),g="?__visulima-dev-toolbar-resource",m="virtual:visulima-dev-toolbar-options",h=`\0${m}`,l="virtual:visulima-dev-toolbar-path:",y="\0__visulima-dev-toolbar-empty",z=v((e={})=>{const r=R(),p=e.removeDevtoolsOnBuild??!0,_=e.injectSource?.enabled??!0;let d;return[{apply:"serve",configResolved(t){d=t},configureServer(t){F(t,e.serverFunctions,{editor:e.editor}),t.ws.on("connection",()=>{t.ws.send({event:"dev-toolbar:init",type:"custom"})})},enforce:"pre",async load(t){if(t===h){const o=(e.customApps??[]).filter(i=>!i.component&&!i.init&&i.view?.type==="iframe").map(i=>({defaultOpen:i.defaultOpen,icon:i.icon,id:i.id,name:i.name,view:i.view}));return`export default ${JSON.stringify({apps:{a11y:e.apps?.a11y??!1,assets:e.apps?.assets??!1,inspector:e.apps?.inspector??!1,moduleGraph:e.apps?.moduleGraph??!1,performance:e.apps?.performance??!1,seo:e.apps?.seo??!1,settings:e.apps?.settings??!0,tailwind:e.apps?.tailwind??!1,timeline:e.apps?.timeline??!1,viteConfig:e.apps?.viteConfig??!0},base:d.base,closeOnOutsideClick:e.closeOnOutsideClick??!0,customApps:o,defaultVisible:e.defaultVisible??!0,editor:e.editor??"",height:e.height??60,keybindings:e.keybindings??{},minimizePanelInactive:e.minimizePanelInactive??5e3,placement:e.placement??"bottom-center",position:e.position??"bottom",reduceMotion:e.reduceMotion??!1,requireUrlFlag:e.requireUrlFlag??!1,urlFlagName:e.urlFlagName??"devtools",width:e.width??80})};`}if(t.endsWith(g)){const o=W(t);return this.addWatchFile(o),await T.promises.readFile(o,"utf8")}},name:"@visulima/dev-toolbar",resolveId(t){if(t===m)return h;if(t.startsWith(l))return`${t.replace(l,`${r}/`)}${g}`},transform(t,o,i){if(i?.ssr)return;const{appendTo:s}=e,a=o.split("?",2)[0];if(s&&a&&(typeof s=="string"&&a.endsWith(s)||s instanceof RegExp&&s.test(a)))return`import '${l}client/overlay.js';
2
+ ${t}`},transformIndexHtml(){return e.appendTo?void 0:{html:"",tags:[{attrs:{src:`${d.base||"/"}@id/${l}client/overlay.js`,type:"module"},injectTo:"head-prepend",tag:"script"}]}}},{enforce:"pre",name:"@visulima/dev-toolbar:inject-source",async transform(t,o){if(!_||d.mode!=="development"||o.includes("node_modules")||o.includes("?raw")||S.test(o)||!q.test(o.split("?")[0]??""))return;const{readFile:i}=await import("node:fs/promises");let s;try{const b=await i(o.split("?")[0]??o,"utf8");b!==t&&(s=b)}catch{}const{addSourceToJsx:a}=await import("./packem_chunks/inject-source.js"),c=a(t,o,e.injectSource?.ignore,s);if(c)return{code:c.code??t,map:c.map??void 0}}},{apply(t,{command:o,mode:i}){return p&&(o!=="serve"||i==="production")},load(t){if(t===y)return"export default {};"},name:"@visulima/dev-toolbar:remove-on-build",resolveId(t){if(t===m||t.startsWith(l))return y}}]},"devToolbar");export{z as devToolbar};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visulima/dev-toolbar",
3
- "version": "1.0.0-alpha.3",
3
+ "version": "1.0.0-alpha.5",
4
4
  "description": "Devtools is a set of tools for building advanced devtools for your application",
5
5
  "keywords": [
6
6
  "visulima",
@@ -49,6 +49,10 @@
49
49
  "types": "./dist/apps/a11y/index.d.ts",
50
50
  "default": "./dist/apps/a11y/index.js"
51
51
  },
52
+ "./apps/assets": {
53
+ "types": "./dist/apps/assets/index.d.ts",
54
+ "default": "./dist/apps/assets/index.js"
55
+ },
52
56
  "./apps/inspector": {
53
57
  "types": "./dist/apps/inspector/index.d.ts",
54
58
  "default": "./dist/apps/inspector/index.js"
@@ -61,10 +65,6 @@
61
65
  "types": "./dist/apps/module-graph/index.d.ts",
62
66
  "default": "./dist/apps/module-graph/index.js"
63
67
  },
64
- "./apps/more": {
65
- "types": "./dist/apps/more/index.d.ts",
66
- "default": "./dist/apps/more/index.js"
67
- },
68
68
  "./apps/performance": {
69
69
  "types": "./dist/apps/performance/index.d.ts",
70
70
  "default": "./dist/apps/performance/index.js"
@@ -104,19 +104,21 @@
104
104
  "@babel/generator": "^7.29.1",
105
105
  "@babel/parser": "^7.29.0",
106
106
  "@babel/traverse": "^7.29.0",
107
- "@babel/types": "^7.29.0",
108
107
  "@floating-ui/dom": "^1.7.6",
109
- "axe-core": "^4.11.1",
110
- "clsx": "^2.1.1",
111
108
  "launch-editor": "^2.13.1",
112
- "preact": "^10.28.4",
113
- "tailwind-merge": "^3.5.0"
109
+ "preact": "^10.28.4"
114
110
  },
115
111
  "peerDependencies": {
116
- "vite": "^6 || ^7"
112
+ "axe-core": "^4",
113
+ "vite": "^6 || ^7 || ^8"
114
+ },
115
+ "peerDependenciesMeta": {
116
+ "axe-core": {
117
+ "optional": true
118
+ }
117
119
  },
118
120
  "engines": {
119
- "node": ">=22.21 <26"
121
+ "node": ">=22.21"
120
122
  },
121
123
  "publishConfig": {
122
124
  "access": "public",
@@ -1,3 +0,0 @@
1
- import type { DevToolbarApp } from "../../types/app.d.ts";
2
- declare const moreApp: DevToolbarApp;
3
- export default moreApp;
@@ -1,19 +0,0 @@
1
- var p=Object.defineProperty;var s=(n,t)=>p(n,"name",{value:t,configurable:!0});import{addHookName as m}from"preact/devtools";import{useState as u,useEffect as f}from"preact/hooks";import g from"../../packem_shared/cn-DWLJYh3h.js";import{jsxs as o,jsx as r}from"preact/jsx-runtime";const h=`<!-- @license lucide-static v0.576.0 - ISC -->
2
- <svg
3
- class="lucide lucide-more-horizontal"
4
- xmlns="http://www.w3.org/2000/svg"
5
- width="24"
6
- height="24"
7
- viewBox="0 0 24 24"
8
- fill="none"
9
- stroke="currentColor"
10
- stroke-width="2"
11
- stroke-linecap="round"
12
- stroke-linejoin="round"
13
- >
14
- <circle cx="12" cy="12" r="1" />
15
- <circle cx="19" cy="12" r="1" />
16
- <circle cx="5" cy="12" r="1" />
17
- </svg>
18
- `;var x=Object.defineProperty,i=s((n,t)=>x(n,"name",{value:t,configurable:!0}),"s");const b=i(n=>{const[t,c]=m(u([]),"apps");f(()=>{const e=globalThis.__VISULIMA_DEVTOOLS__;if(!e)return;const a=(e.getApps()??[]).filter(d=>!["dev-toolbar:a11y","dev-toolbar:module-graph","dev-toolbar:more","dev-toolbar:performance","dev-toolbar:seo","dev-toolbar:settings","dev-toolbar:timeline","dev-toolbar:vite-config"].includes(d.id));c(a)},[]);const l=i(e=>{globalThis.__VISULIMA_DEVTOOLS__?.openApp(e).catch(console.error)},"openApp");return t.length===0?o("div",{class:"p-8 flex flex-col items-center justify-center min-h-48 gap-5 text-center select-none",children:[r("div",{class:"size-14 bg-primary/5 border border-primary/20 flex items-center justify-center",children:r("svg",{"aria-hidden":"true",class:"size-6 text-primary/40",fill:"none",stroke:"currentColor","stroke-width":"1.5",viewBox:"0 0 24 24",children:r("path",{d:"M12 6v6m0 0v6m0-6h6m-6 0H6","stroke-linecap":"round","stroke-linejoin":"round"})})}),o("div",{class:"space-y-1.5",children:[r("p",{class:"text-[0.8125rem] font-medium text-foreground/70",children:"No additional apps registered"}),r("p",{class:"text-[0.725rem] text-muted-foreground",children:"Register a custom app to see it here"}),r("pre",{class:"mt-3 text-[0.65rem] font-mono text-primary/70 bg-primary/5 border border-primary/15 px-3 py-2 text-left",children:`window.__VISULIMA_DEVTOOLS__
19
- .registerApp({ id, name, icon })`})]})]}):o("div",{class:"p-5",children:[o("h2",{class:"text-[0.65rem] font-bold uppercase tracking-[0.1em] text-muted-foreground mb-3 flex items-center gap-1.5",children:[r("span",{"aria-hidden":"true",class:"text-primary/50",children:"//"}),"Additional Apps"]}),r("div",{class:"grid grid-cols-2 gap-2",children:t.map(e=>o("button",{class:g("flex items-center gap-3 p-3","border border-border bg-card hover:bg-foreground/4","text-left cursor-pointer transition-colors duration-150"),onClick:i(()=>l(e.id),"onClick"),title:e.name,type:"button",children:[r("span",{class:"size-5 shrink-0 flex items-center justify-center text-[0.65rem] font-bold uppercase bg-foreground/8 text-foreground/70",children:e.name.slice(0,2)}),r("span",{class:"text-[0.8125rem] font-medium text-foreground truncate",children:e.name})]},e.id))})]})},"MoreApp"),A={component:b,icon:h,id:"dev-toolbar:more",name:"More"};export{A as default};
@@ -1,5 +0,0 @@
1
- /** @jsxImportSource preact */
2
- import type { ComponentChildren } from "preact";
3
- import type { AppComponentProps } from "../../types/app.d.ts";
4
- declare const MoreApp: (_props: AppComponentProps) => ComponentChildren;
5
- export default MoreApp;
@@ -1 +0,0 @@
1
- var c=Object.defineProperty;var n=(e,r)=>c(e,"name",{value:r,configurable:!0});import s from"./cn-DWLJYh3h.js";import{jsx as l}from"preact/jsx-runtime";var d=Object.defineProperty,i=n((e,r)=>d(e,"name",{value:r,configurable:!0}),"n");const o={default:"bg-background text-foreground",destructive:"border-destructive/50 text-destructive",info:"border-info/50 text-info",success:"border-success/50 text-success",warning:"border-warning/50 text-warning"},f=i(({children:e,class:r,variant:t="default",...a})=>l("div",{class:s("relative w-full rounded-none border p-4 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg~*]:pl-7",o[t],r),role:"alert",...a,children:e}),"Alert"),p=i(({children:e,class:r,...t})=>l("h5",{class:s("mb-1 font-medium leading-none tracking-tight",r),...t,children:e}),"AlertTitle"),b=i(({children:e,class:r,...t})=>l("div",{class:s("text-sm [&_p]:leading-relaxed",r),...t,children:e}),"AlertDescription");export{f as Alert,b as AlertDescription,p as AlertTitle};
@@ -1 +0,0 @@
1
- var a=Object.defineProperty;var t=(r,e)=>a(r,"name",{value:e,configurable:!0});import s from"./cn-DWLJYh3h.js";import{jsx as d}from"preact/jsx-runtime";var i=Object.defineProperty,c=t((r,e)=>i(r,"name",{value:e,configurable:!0}),"t");const u={default:"border-transparent bg-primary text-primary-foreground",destructive:"border-transparent bg-destructive text-destructive-foreground",info:"border-transparent bg-info text-info-foreground",outline:"text-foreground",secondary:"border-transparent bg-secondary text-secondary-foreground",success:"border-transparent bg-success text-success-foreground",warning:"border-transparent bg-warning text-warning-foreground"},l=c(({children:r,class:e,variant:n="default",...o})=>d("div",{class:s("inline-flex items-center rounded-none border px-2.5 py-0.5 text-xs font-semibold transition-colors",u[n],e),...o,children:r}),"Badge");export{l as default};
@@ -1 +0,0 @@
1
- var d=Object.defineProperty;var t=(e,r)=>d(e,"name",{value:r,configurable:!0});import s from"./cn-DWLJYh3h.js";import{jsx as a}from"preact/jsx-runtime";var c=Object.defineProperty,g=t((e,r)=>c(e,"name",{value:r,configurable:!0}),"r");const l={default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",ghost:"text-muted-foreground hover:bg-foreground/8 hover:text-foreground",link:"text-primary underline-offset-4 hover:underline",outline:"border border-input bg-background text-foreground hover:bg-foreground/8",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80"},f={default:"h-9 px-4 py-2",icon:"h-9 w-9",lg:"h-10 px-8",sm:"h-8 px-3 text-xs"},m=g(({children:e,class:r,size:o="default",type:n="button",variant:i="default",...u})=>a("button",{class:s("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-none text-sm font-medium cursor-pointer transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",l[i],f[o],r),type:n,...u,children:e}),"Button");export{m as default};
@@ -1 +0,0 @@
1
- var i=Object.defineProperty;var l=(e,r)=>i(e,"name",{value:r,configurable:!0});import d from"./cn-DWLJYh3h.js";import{jsx as s}from"preact/jsx-runtime";var n=Object.defineProperty,c=l((e,r)=>n(e,"name",{value:r,configurable:!0}),"t");const C=c(({children:e,class:r,...a})=>s("div",{class:d("bg-card text-card-foreground rounded-none border shadow",r),...a,children:e}),"Card"),p=c(({children:e,class:r,...a})=>s("div",{class:d("flex flex-col space-y-1.5 p-6",r),...a,children:e}),"CardHeader"),m=c(({children:e,class:r,...a})=>s("h3",{class:d("font-semibold leading-none tracking-tight",r),...a,children:e}),"CardTitle"),f=c(({children:e,class:r,...a})=>s("div",{class:d("text-sm text-muted-foreground",r),...a,children:e}),"CardDescription"),v=c(({children:e,class:r,...a})=>s("div",{class:d("p-6 pt-0",r),...a,children:e}),"CardContent"),x=c(({children:e,class:r,...a})=>s("div",{class:d("flex items-center p-6 pt-0",r),...a,children:e}),"CardFooter");export{C as Card,v as CardContent,f as CardDescription,x as CardFooter,p as CardHeader,m as CardTitle};
@@ -1 +0,0 @@
1
- var i=Object.defineProperty;var t=(a,e)=>i(a,"name",{value:e,configurable:!0});import o from"./cn-DWLJYh3h.js";import{jsx as s}from"preact/jsx-runtime";var n=Object.defineProperty,c=t((a,e)=>n(a,"name",{value:e,configurable:!0}),"r");const p=c(({class:a,size:e=13,src:r})=>s("span",{class:o("inline-block shrink-0",a),style:{backgroundColor:"currentColor",height:e,maskImage:`url(${r})`,maskRepeat:"no-repeat",maskSize:"contain",WebkitMaskImage:`url(${r})`,WebkitMaskRepeat:"no-repeat",WebkitMaskSize:"contain",width:e}}),"Icon");export{p as default};
@@ -1 +0,0 @@
1
- import{forwardRef as s}from"preact/compat";import i from"./cn-DWLJYh3h.js";import{jsx as n}from"preact/jsx-runtime";const l=s(({class:o,type:e="text",...r},t)=>n("input",{class:i("flex h-9 w-full rounded-none border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",o),ref:t,type:e,...r}));l.displayName="Input";export{l as default};
@@ -1 +0,0 @@
1
- var o=Object.defineProperty;var r=(e,a)=>o(e,"name",{value:a,configurable:!0});import t from"./cn-DWLJYh3h.js";import{jsx as n}from"preact/jsx-runtime";var d=Object.defineProperty,i=r((e,a)=>d(e,"name",{value:a,configurable:!0}),"l");const p=i(({children:e,class:a,...l})=>n("label",{class:t("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",a),...l,children:e}),"Label");export{p as default};
@@ -1 +0,0 @@
1
- var R=Object.defineProperty;var P=(e,n)=>R(e,"name",{value:n,configurable:!0});import{addHookName as v}from"preact/devtools";import{computePosition as k,offset as E,flip as $,shift as L}from"@floating-ui/dom";import{createContext as T}from"preact";import{useState as b,useRef as y,useEffect as C,useContext as j}from"preact/hooks";import g from"./cn-DWLJYh3h.js";import{jsx as f}from"preact/jsx-runtime";var z=Object.defineProperty,o=P((e,n)=>z(e,"name",{value:n,configurable:!0}),"t");const O=T(null),h=o(()=>{const e=j(O);if(!e)throw new Error("Popover subcomponent must be used within <Popover>");return e},"usePopoverContext"),X=o(({children:e,defaultOpen:n,onOpenChange:i,open:r})=>{const s=r!==void 0,[a,t]=v(b(n??!1),"internalOpen"),p=s?r:a,c=v(y(null),"triggerRef"),l=o(u=>{s||t(u),i?.(u)},"setOpen");return f(O.Provider,{value:{open:p,setOpen:l,triggerRef:c},children:f("span",{style:{display:"contents"},children:e})})},"Popover"),q=o(({children:e,class:n,...i})=>{const{open:r,setOpen:s,triggerRef:a}=h(),t=o(p=>{a.current=p},"handleRef");return f("button",{"aria-expanded":r,class:g("",n),onClick:o(()=>{i.disabled||s(!r)},"onClick"),ref:t,type:"button",...i,children:e})},"PopoverTrigger"),A=o(({align:e="center",children:n,class:i,side:r="bottom",sideOffset:s=4,...a})=>{const{open:t,setOpen:p,triggerRef:c}=h(),l=v(y(null),"contentRef"),[u,w]=v(b({x:0,y:0}),"position");return C(()=>{if(!t||!c.current||!l.current)return;const m=e==="center"?r:`${r}-${e}`;k(c.current,l.current,{middleware:[E(s),$(),L({padding:4})],placement:m}).then(d=>{w({x:d.x,y:d.y})}).catch(()=>{})},[t,r,s,e,c]),C(()=>{if(!t)return;const m=o(d=>{if(l.current&&!l.current.contains(d.target)){const x=c.current;if(x&&x.contains(d.target))return;p(!1)}},"handleMouseDown");return document.addEventListener("mousedown",m),()=>{document.removeEventListener("mousedown",m)}},[t,p,c]),t?f("div",{class:g("z-50 w-72 rounded-none border bg-popover p-4 text-popover-foreground shadow-md outline-none animate-in fade-in-0 zoom-in-95",i),ref:l,role:"dialog",style:{left:`${u.x}px`,position:"fixed",top:`${u.y}px`},...a,children:n}):null},"PopoverContent"),F=o(({children:e,class:n,...i})=>{const{setOpen:r}=h();return f("button",{class:g("",n),onClick:o(()=>r(!1),"onClick"),type:"button",...i,children:e})},"PopoverClose");export{X as Popover,F as PopoverClose,A as PopoverContent,q as PopoverTrigger};
@@ -1 +0,0 @@
1
- var o=Object.defineProperty;var e=(a,r)=>o(a,"name",{value:r,configurable:!0});import s from"./cn-DWLJYh3h.js";import{jsx as l}from"preact/jsx-runtime";var t=Object.defineProperty,n=e((a,r)=>t(a,"name",{value:r,configurable:!0}),"s");const v=n(({class:a,value:r,...i})=>l("div",{"aria-valuemax":100,"aria-valuemin":0,"aria-valuenow":r??0,class:s("relative h-2 w-full overflow-hidden rounded-none bg-primary/20",a),role:"progressbar",...i,children:l("div",{class:"h-full w-full flex-1 bg-primary transition-all",style:{transform:`translateX(-${100-(r??0)}%)`}})}),"Progress");export{v as default};
@@ -1 +0,0 @@
1
- var i=Object.defineProperty;var a=(r,o)=>i(r,"name",{value:o,configurable:!0});import l from"./cn-DWLJYh3h.js";import{jsx as s}from"preact/jsx-runtime";var p=Object.defineProperty,u=a((r,o)=>p(r,"name",{value:o,configurable:!0}),"a");const d=u(({class:r,decorative:o=!0,orientation:e="horizontal",...t})=>{const n=o?{role:"none"}:{"aria-orientation":e,role:"separator"};return s("div",{class:l("shrink-0 bg-border",e==="horizontal"?"h-[1px] w-full":"h-full w-[1px]",r),...n,...t})},"Separator");export{d as default};
@@ -1 +0,0 @@
1
- var o=Object.defineProperty;var a=(e,r)=>o(e,"name",{value:r,configurable:!0});import t from"./cn-DWLJYh3h.js";import{jsx as n}from"preact/jsx-runtime";var s=Object.defineProperty,m=a((e,r)=>s(e,"name",{value:r,configurable:!0}),"r");const u=m(({class:e,...r})=>n("div",{class:t("animate-pulse rounded-none bg-primary/10",e),...r}),"Skeleton");export{u as default};
@@ -1 +0,0 @@
1
- var m=Object.defineProperty;var a=(e,r)=>m(e,"name",{value:r,configurable:!0});import{addHookName as g}from"preact/devtools";import{useState as v}from"preact/hooks";import s from"./cn-DWLJYh3h.js";import{jsx as c}from"preact/jsx-runtime";var C=Object.defineProperty,d=a((e,r)=>C(e,"name",{value:r,configurable:!0}),"o");const H=d(({checked:e,class:r,defaultChecked:l,disabled:o,id:u,onCheckedChange:b,...f})=>{const t=e!==void 0,[h,k]=g(v(l??!1),"internalChecked"),n=t?e:h,p=d(()=>{if(o)return;const i=!n;t||k(i),b?.(i)},"handleClick");return c("button",{"aria-checked":n,class:s("inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-none border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",n?"bg-primary":"bg-input",r),"data-state":n?"checked":"unchecked",disabled:o,id:u,onClick:p,role:"switch",type:"button",...f,children:c("span",{class:s("pointer-events-none block h-4 w-4 rounded-none bg-background shadow-lg ring-0 transition-transform",n?"translate-x-4":"translate-x-0"),"data-state":n?"checked":"unchecked"})})},"Switch");export{H as default};