@invergent/ui-sdk 2.19.0 → 2.19.2

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 (112) hide show
  1. package/README.md +11 -2
  2. package/dist/badge.d.cts +1 -1
  3. package/dist/badge.d.ts +1 -1
  4. package/dist/button-group.cjs +80 -0
  5. package/dist/button-group.cjs.map +1 -0
  6. package/dist/button-group.d.cts +17 -0
  7. package/dist/button-group.d.ts +17 -0
  8. package/dist/button-group.js +75 -0
  9. package/dist/button-group.js.map +1 -0
  10. package/dist/button.d.cts +1 -1
  11. package/dist/button.d.ts +1 -1
  12. package/dist/chip.cjs +3 -3
  13. package/dist/chip.cjs.map +1 -1
  14. package/dist/chip.d.cts +2 -4
  15. package/dist/chip.d.ts +2 -4
  16. package/dist/chip.js +3 -3
  17. package/dist/chip.js.map +1 -1
  18. package/dist/{chunk-IVMZANP7.cjs → chunk-ILCP5QXL.cjs} +6 -3
  19. package/dist/chunk-ILCP5QXL.cjs.map +1 -0
  20. package/dist/chunk-NSK344BJ.js +80 -0
  21. package/dist/chunk-NSK344BJ.js.map +1 -0
  22. package/dist/chunk-PH733KDD.js +141 -0
  23. package/dist/chunk-PH733KDD.js.map +1 -0
  24. package/dist/chunk-QEBQ5NUN.cjs +148 -0
  25. package/dist/chunk-QEBQ5NUN.cjs.map +1 -0
  26. package/dist/chunk-UXSDDJXM.cjs +88 -0
  27. package/dist/chunk-UXSDDJXM.cjs.map +1 -0
  28. package/dist/{chunk-CPAFEXKR.js → chunk-WO2SXSNH.js} +6 -3
  29. package/dist/chunk-WO2SXSNH.js.map +1 -0
  30. package/dist/collapsible-header.cjs +14 -3
  31. package/dist/collapsible-header.cjs.map +1 -1
  32. package/dist/collapsible-header.d.cts +4 -1
  33. package/dist/collapsible-header.d.ts +4 -1
  34. package/dist/collapsible-header.js +14 -3
  35. package/dist/collapsible-header.js.map +1 -1
  36. package/dist/command.cjs +177 -0
  37. package/dist/command.cjs.map +1 -0
  38. package/dist/command.d.cts +22 -0
  39. package/dist/command.d.ts +22 -0
  40. package/dist/command.js +167 -0
  41. package/dist/command.js.map +1 -0
  42. package/dist/confirm-dialog.cjs +5 -3
  43. package/dist/confirm-dialog.cjs.map +1 -1
  44. package/dist/confirm-dialog.d.cts +4 -1
  45. package/dist/confirm-dialog.d.ts +4 -1
  46. package/dist/confirm-dialog.js +5 -3
  47. package/dist/confirm-dialog.js.map +1 -1
  48. package/dist/field.cjs +1 -1
  49. package/dist/field.js +1 -1
  50. package/dist/hover-card.cjs +43 -0
  51. package/dist/hover-card.cjs.map +1 -0
  52. package/dist/hover-card.d.cts +9 -0
  53. package/dist/hover-card.d.ts +9 -0
  54. package/dist/hover-card.js +39 -0
  55. package/dist/hover-card.js.map +1 -0
  56. package/dist/input-group.cjs +30 -142
  57. package/dist/input-group.cjs.map +1 -1
  58. package/dist/input-group.js +5 -139
  59. package/dist/input-group.js.map +1 -1
  60. package/dist/item.cjs +196 -0
  61. package/dist/item.cjs.map +1 -0
  62. package/dist/item.d.cts +28 -0
  63. package/dist/item.d.ts +28 -0
  64. package/dist/item.js +185 -0
  65. package/dist/item.js.map +1 -0
  66. package/dist/popover.cjs +31 -82
  67. package/dist/popover.cjs.map +1 -1
  68. package/dist/popover.js +2 -78
  69. package/dist/popover.js.map +1 -1
  70. package/dist/progress-bar.cjs +22 -10
  71. package/dist/progress-bar.cjs.map +1 -1
  72. package/dist/progress-bar.d.cts +2 -1
  73. package/dist/progress-bar.d.ts +2 -1
  74. package/dist/progress-bar.js +22 -10
  75. package/dist/progress-bar.js.map +1 -1
  76. package/dist/rabbit-mark.cjs +30 -0
  77. package/dist/rabbit-mark.cjs.map +1 -0
  78. package/dist/rabbit-mark.d.cts +16 -0
  79. package/dist/rabbit-mark.d.ts +16 -0
  80. package/dist/rabbit-mark.js +26 -0
  81. package/dist/rabbit-mark.js.map +1 -0
  82. package/dist/responsive-panel.cjs +85 -0
  83. package/dist/responsive-panel.cjs.map +1 -0
  84. package/dist/responsive-panel.d.cts +33 -0
  85. package/dist/responsive-panel.d.ts +33 -0
  86. package/dist/responsive-panel.js +83 -0
  87. package/dist/responsive-panel.js.map +1 -0
  88. package/dist/tab-strip.cjs +74 -0
  89. package/dist/tab-strip.cjs.map +1 -0
  90. package/dist/tab-strip.d.cts +22 -0
  91. package/dist/tab-strip.d.ts +22 -0
  92. package/dist/tab-strip.js +71 -0
  93. package/dist/tab-strip.js.map +1 -0
  94. package/dist/tabs.d.cts +1 -1
  95. package/dist/tabs.d.ts +1 -1
  96. package/dist/timeline.cjs +171 -0
  97. package/dist/timeline.cjs.map +1 -0
  98. package/dist/timeline.d.cts +28 -0
  99. package/dist/timeline.d.ts +28 -0
  100. package/dist/timeline.js +162 -0
  101. package/dist/timeline.js.map +1 -0
  102. package/dist/toggle-group.cjs +4 -2
  103. package/dist/toggle-group.cjs.map +1 -1
  104. package/dist/toggle-group.js +3 -1
  105. package/dist/toggle-group.js.map +1 -1
  106. package/dist/toggle.cjs +4 -4
  107. package/dist/toggle.d.cts +1 -1
  108. package/dist/toggle.d.ts +1 -1
  109. package/dist/toggle.js +1 -1
  110. package/package.json +2 -1
  111. package/dist/chunk-CPAFEXKR.js.map +0 -1
  112. package/dist/chunk-IVMZANP7.cjs.map +0 -1
@@ -0,0 +1,177 @@
1
+ 'use strict';
2
+
3
+ var chunkID7MWMJO_cjs = require('./chunk-ID7MWMJO.cjs');
4
+ var chunkQEBQ5NUN_cjs = require('./chunk-QEBQ5NUN.cjs');
5
+ require('./chunk-UOUXW63J.cjs');
6
+ require('./chunk-RVX6SN4U.cjs');
7
+ require('./chunk-VBICNC43.cjs');
8
+ var chunk6YHDDRIM_cjs = require('./chunk-6YHDDRIM.cjs');
9
+ var cmdk = require('cmdk');
10
+ var lucideReact = require('lucide-react');
11
+ var jsxRuntime = require('react/jsx-runtime');
12
+
13
+ function Command({
14
+ className,
15
+ ...props
16
+ }) {
17
+ return /* @__PURE__ */ jsxRuntime.jsx(
18
+ cmdk.Command,
19
+ {
20
+ "data-slot": "command",
21
+ className: chunk6YHDDRIM_cjs.cn(
22
+ "flex size-full flex-col overflow-hidden bg-popover text-popover-foreground",
23
+ className
24
+ ),
25
+ ...props
26
+ }
27
+ );
28
+ }
29
+ function CommandDialog({
30
+ title = "Command Palette",
31
+ description = "Search for a command to run...",
32
+ children,
33
+ className,
34
+ showCloseButton = false,
35
+ ...props
36
+ }) {
37
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkID7MWMJO_cjs.Dialog, { ...props, children: [
38
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkID7MWMJO_cjs.DialogHeader, { className: "sr-only", children: [
39
+ /* @__PURE__ */ jsxRuntime.jsx(chunkID7MWMJO_cjs.DialogTitle, { children: title }),
40
+ /* @__PURE__ */ jsxRuntime.jsx(chunkID7MWMJO_cjs.DialogDescription, { children: description })
41
+ ] }),
42
+ /* @__PURE__ */ jsxRuntime.jsx(
43
+ chunkID7MWMJO_cjs.DialogContent,
44
+ {
45
+ className: chunk6YHDDRIM_cjs.cn("top-1/3 translate-y-0 overflow-hidden p-0", className),
46
+ showCloseButton,
47
+ children
48
+ }
49
+ )
50
+ ] });
51
+ }
52
+ function CommandInput({
53
+ className,
54
+ ...props
55
+ }) {
56
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "command-input-wrapper", className: "p-2", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkQEBQ5NUN_cjs.InputGroup, { className: "px-3", children: [
57
+ /* @__PURE__ */ jsxRuntime.jsx(
58
+ cmdk.Command.Input,
59
+ {
60
+ "data-slot": "command-input",
61
+ className: chunk6YHDDRIM_cjs.cn(
62
+ "w-full bg-transparent px-2 text-[13px] text-foreground outline-hidden placeholder:text-muted-foreground/50 disabled:cursor-not-allowed disabled:opacity-50",
63
+ className
64
+ ),
65
+ ...props
66
+ }
67
+ ),
68
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQEBQ5NUN_cjs.InputGroupAddon, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SearchIcon, { className: "size-3.5 shrink-0 text-muted-foreground" }) })
69
+ ] }) });
70
+ }
71
+ function CommandList({
72
+ className,
73
+ ...props
74
+ }) {
75
+ return /* @__PURE__ */ jsxRuntime.jsx(
76
+ cmdk.Command.List,
77
+ {
78
+ "data-slot": "command-list",
79
+ className: chunk6YHDDRIM_cjs.cn(
80
+ "no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none",
81
+ className
82
+ ),
83
+ ...props
84
+ }
85
+ );
86
+ }
87
+ function CommandEmpty({
88
+ className,
89
+ ...props
90
+ }) {
91
+ return /* @__PURE__ */ jsxRuntime.jsx(
92
+ cmdk.Command.Empty,
93
+ {
94
+ "data-slot": "command-empty",
95
+ className: chunk6YHDDRIM_cjs.cn("py-6 text-center text-[13px] text-muted-foreground", className),
96
+ ...props
97
+ }
98
+ );
99
+ }
100
+ function CommandGroup({
101
+ className,
102
+ ...props
103
+ }) {
104
+ return /* @__PURE__ */ jsxRuntime.jsx(
105
+ cmdk.Command.Group,
106
+ {
107
+ "data-slot": "command-group",
108
+ className: chunk6YHDDRIM_cjs.cn(
109
+ "overflow-hidden p-1 text-foreground **:[[cmdk-group-heading]]:px-3 **:[[cmdk-group-heading]]:pt-2 **:[[cmdk-group-heading]]:pb-1 **:[[cmdk-group-heading]]:text-[11.5px] **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground/80",
110
+ className
111
+ ),
112
+ ...props
113
+ }
114
+ );
115
+ }
116
+ function CommandSeparator({
117
+ className,
118
+ ...props
119
+ }) {
120
+ return /* @__PURE__ */ jsxRuntime.jsx(
121
+ cmdk.Command.Separator,
122
+ {
123
+ "data-slot": "command-separator",
124
+ className: chunk6YHDDRIM_cjs.cn("-mx-1 my-1 h-px bg-foreground/[0.06]", className),
125
+ ...props
126
+ }
127
+ );
128
+ }
129
+ function CommandItem({
130
+ className,
131
+ children,
132
+ ...props
133
+ }) {
134
+ return /* @__PURE__ */ jsxRuntime.jsxs(
135
+ cmdk.Command.Item,
136
+ {
137
+ "data-slot": "command-item",
138
+ className: chunk6YHDDRIM_cjs.cn(
139
+ "group/command-item relative flex cursor-default items-center gap-2 rounded-[6px] px-3 py-[9px] text-[13px] text-muted-foreground outline-hidden select-none pointer-coarse:min-h-11 data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-foreground/[0.06] data-[selected=true]:text-foreground data-[checked=true]:font-medium data-[checked=true]:text-amber-500 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
140
+ className
141
+ ),
142
+ ...props,
143
+ children: [
144
+ children,
145
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckIcon, { className: "ml-auto text-amber-500 opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100" })
146
+ ]
147
+ }
148
+ );
149
+ }
150
+ function CommandShortcut({
151
+ className,
152
+ ...props
153
+ }) {
154
+ return /* @__PURE__ */ jsxRuntime.jsx(
155
+ "span",
156
+ {
157
+ "data-slot": "command-shortcut",
158
+ className: chunk6YHDDRIM_cjs.cn(
159
+ "ml-auto text-[11.5px] text-muted-foreground/70 group-data-[selected=true]/command-item:text-muted-foreground",
160
+ className
161
+ ),
162
+ ...props
163
+ }
164
+ );
165
+ }
166
+
167
+ exports.Command = Command;
168
+ exports.CommandDialog = CommandDialog;
169
+ exports.CommandEmpty = CommandEmpty;
170
+ exports.CommandGroup = CommandGroup;
171
+ exports.CommandInput = CommandInput;
172
+ exports.CommandItem = CommandItem;
173
+ exports.CommandList = CommandList;
174
+ exports.CommandSeparator = CommandSeparator;
175
+ exports.CommandShortcut = CommandShortcut;
176
+ //# sourceMappingURL=command.cjs.map
177
+ //# sourceMappingURL=command.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/command.tsx"],"names":["jsx","CommandPrimitive","cn","jsxs","Dialog","DialogHeader","DialogTitle","DialogDescription","DialogContent","InputGroup","InputGroupAddon","SearchIcon","CheckIcon"],"mappings":"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","file":"command.cjs","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { SearchIcon, CheckIcon } from \"lucide-react\"\n\nimport { cn } from \"./lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\"\nimport { InputGroup, InputGroupAddon } from \"./input-group\"\n\n// A searchable list (cmdk) drawn as the Work console draws its menus:\n// sentence-case 13px rows in muted text that brighten when highlighted, a\n// quiet group label, and amber for what is checked. Rows reach 44px on a\n// phone and keep their compact height with a mouse.\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n \"flex size-full flex-col overflow-hidden bg-popover text-popover-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = false,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn(\"top-1/3 translate-y-0 overflow-hidden p-0\", className)}\n showCloseButton={showCloseButton}\n >\n {children}\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div data-slot=\"command-input-wrapper\" className=\"p-2\">\n <InputGroup className=\"px-3\">\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n \"w-full bg-transparent px-2 text-[13px] text-foreground outline-hidden placeholder:text-muted-foreground/50 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n <InputGroupAddon>\n <SearchIcon className=\"size-3.5 shrink-0 text-muted-foreground\" />\n </InputGroupAddon>\n </InputGroup>\n </div>\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n \"no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className={cn(\"py-6 text-center text-[13px] text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n \"overflow-hidden p-1 text-foreground **:[[cmdk-group-heading]]:px-3 **:[[cmdk-group-heading]]:pt-2 **:[[cmdk-group-heading]]:pb-1 **:[[cmdk-group-heading]]:text-[11.5px] **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground/80\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-foreground/[0.06]\", className)}\n {...props}\n />\n )\n}\n\n// `data-checked` on an item lights its trailing check, as a picked option.\nfunction CommandItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"group/command-item relative flex cursor-default items-center gap-2 rounded-[6px] px-3 py-[9px] text-[13px] text-muted-foreground outline-hidden select-none pointer-coarse:min-h-11 data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-foreground/[0.06] data-[selected=true]:text-foreground data-[checked=true]:font-medium data-[checked=true]:text-amber-500 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <CheckIcon className=\"ml-auto text-amber-500 opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100\" />\n </CommandPrimitive.Item>\n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n \"ml-auto text-[11.5px] text-muted-foreground/70 group-data-[selected=true]/command-item:text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n"]}
@@ -0,0 +1,22 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { Command as Command$1 } from 'cmdk';
4
+ import { Dialog } from './dialog.cjs';
5
+ import 'radix-ui';
6
+
7
+ declare function Command({ className, ...props }: React.ComponentProps<typeof Command$1>): react_jsx_runtime.JSX.Element;
8
+ declare function CommandDialog({ title, description, children, className, showCloseButton, ...props }: React.ComponentProps<typeof Dialog> & {
9
+ title?: string;
10
+ description?: string;
11
+ className?: string;
12
+ showCloseButton?: boolean;
13
+ }): react_jsx_runtime.JSX.Element;
14
+ declare function CommandInput({ className, ...props }: React.ComponentProps<typeof Command$1.Input>): react_jsx_runtime.JSX.Element;
15
+ declare function CommandList({ className, ...props }: React.ComponentProps<typeof Command$1.List>): react_jsx_runtime.JSX.Element;
16
+ declare function CommandEmpty({ className, ...props }: React.ComponentProps<typeof Command$1.Empty>): react_jsx_runtime.JSX.Element;
17
+ declare function CommandGroup({ className, ...props }: React.ComponentProps<typeof Command$1.Group>): react_jsx_runtime.JSX.Element;
18
+ declare function CommandSeparator({ className, ...props }: React.ComponentProps<typeof Command$1.Separator>): react_jsx_runtime.JSX.Element;
19
+ declare function CommandItem({ className, children, ...props }: React.ComponentProps<typeof Command$1.Item>): react_jsx_runtime.JSX.Element;
20
+ declare function CommandShortcut({ className, ...props }: React.ComponentProps<"span">): react_jsx_runtime.JSX.Element;
21
+
22
+ export { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut };
@@ -0,0 +1,22 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { Command as Command$1 } from 'cmdk';
4
+ import { Dialog } from './dialog.js';
5
+ import 'radix-ui';
6
+
7
+ declare function Command({ className, ...props }: React.ComponentProps<typeof Command$1>): react_jsx_runtime.JSX.Element;
8
+ declare function CommandDialog({ title, description, children, className, showCloseButton, ...props }: React.ComponentProps<typeof Dialog> & {
9
+ title?: string;
10
+ description?: string;
11
+ className?: string;
12
+ showCloseButton?: boolean;
13
+ }): react_jsx_runtime.JSX.Element;
14
+ declare function CommandInput({ className, ...props }: React.ComponentProps<typeof Command$1.Input>): react_jsx_runtime.JSX.Element;
15
+ declare function CommandList({ className, ...props }: React.ComponentProps<typeof Command$1.List>): react_jsx_runtime.JSX.Element;
16
+ declare function CommandEmpty({ className, ...props }: React.ComponentProps<typeof Command$1.Empty>): react_jsx_runtime.JSX.Element;
17
+ declare function CommandGroup({ className, ...props }: React.ComponentProps<typeof Command$1.Group>): react_jsx_runtime.JSX.Element;
18
+ declare function CommandSeparator({ className, ...props }: React.ComponentProps<typeof Command$1.Separator>): react_jsx_runtime.JSX.Element;
19
+ declare function CommandItem({ className, children, ...props }: React.ComponentProps<typeof Command$1.Item>): react_jsx_runtime.JSX.Element;
20
+ declare function CommandShortcut({ className, ...props }: React.ComponentProps<"span">): react_jsx_runtime.JSX.Element;
21
+
22
+ export { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut };
@@ -0,0 +1,167 @@
1
+ import { Dialog, DialogHeader, DialogTitle, DialogDescription, DialogContent } from './chunk-T74Z3WTK.js';
2
+ import { InputGroup, InputGroupAddon } from './chunk-PH733KDD.js';
3
+ import './chunk-5CRE35VX.js';
4
+ import './chunk-6JCVTRUK.js';
5
+ import './chunk-A44JJ6NH.js';
6
+ import { cn } from './chunk-LZGII7SX.js';
7
+ import { Command as Command$1 } from 'cmdk';
8
+ import { SearchIcon, CheckIcon } from 'lucide-react';
9
+ import { jsx, jsxs } from 'react/jsx-runtime';
10
+
11
+ function Command({
12
+ className,
13
+ ...props
14
+ }) {
15
+ return /* @__PURE__ */ jsx(
16
+ Command$1,
17
+ {
18
+ "data-slot": "command",
19
+ className: cn(
20
+ "flex size-full flex-col overflow-hidden bg-popover text-popover-foreground",
21
+ className
22
+ ),
23
+ ...props
24
+ }
25
+ );
26
+ }
27
+ function CommandDialog({
28
+ title = "Command Palette",
29
+ description = "Search for a command to run...",
30
+ children,
31
+ className,
32
+ showCloseButton = false,
33
+ ...props
34
+ }) {
35
+ return /* @__PURE__ */ jsxs(Dialog, { ...props, children: [
36
+ /* @__PURE__ */ jsxs(DialogHeader, { className: "sr-only", children: [
37
+ /* @__PURE__ */ jsx(DialogTitle, { children: title }),
38
+ /* @__PURE__ */ jsx(DialogDescription, { children: description })
39
+ ] }),
40
+ /* @__PURE__ */ jsx(
41
+ DialogContent,
42
+ {
43
+ className: cn("top-1/3 translate-y-0 overflow-hidden p-0", className),
44
+ showCloseButton,
45
+ children
46
+ }
47
+ )
48
+ ] });
49
+ }
50
+ function CommandInput({
51
+ className,
52
+ ...props
53
+ }) {
54
+ return /* @__PURE__ */ jsx("div", { "data-slot": "command-input-wrapper", className: "p-2", children: /* @__PURE__ */ jsxs(InputGroup, { className: "px-3", children: [
55
+ /* @__PURE__ */ jsx(
56
+ Command$1.Input,
57
+ {
58
+ "data-slot": "command-input",
59
+ className: cn(
60
+ "w-full bg-transparent px-2 text-[13px] text-foreground outline-hidden placeholder:text-muted-foreground/50 disabled:cursor-not-allowed disabled:opacity-50",
61
+ className
62
+ ),
63
+ ...props
64
+ }
65
+ ),
66
+ /* @__PURE__ */ jsx(InputGroupAddon, { children: /* @__PURE__ */ jsx(SearchIcon, { className: "size-3.5 shrink-0 text-muted-foreground" }) })
67
+ ] }) });
68
+ }
69
+ function CommandList({
70
+ className,
71
+ ...props
72
+ }) {
73
+ return /* @__PURE__ */ jsx(
74
+ Command$1.List,
75
+ {
76
+ "data-slot": "command-list",
77
+ className: cn(
78
+ "no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none",
79
+ className
80
+ ),
81
+ ...props
82
+ }
83
+ );
84
+ }
85
+ function CommandEmpty({
86
+ className,
87
+ ...props
88
+ }) {
89
+ return /* @__PURE__ */ jsx(
90
+ Command$1.Empty,
91
+ {
92
+ "data-slot": "command-empty",
93
+ className: cn("py-6 text-center text-[13px] text-muted-foreground", className),
94
+ ...props
95
+ }
96
+ );
97
+ }
98
+ function CommandGroup({
99
+ className,
100
+ ...props
101
+ }) {
102
+ return /* @__PURE__ */ jsx(
103
+ Command$1.Group,
104
+ {
105
+ "data-slot": "command-group",
106
+ className: cn(
107
+ "overflow-hidden p-1 text-foreground **:[[cmdk-group-heading]]:px-3 **:[[cmdk-group-heading]]:pt-2 **:[[cmdk-group-heading]]:pb-1 **:[[cmdk-group-heading]]:text-[11.5px] **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground/80",
108
+ className
109
+ ),
110
+ ...props
111
+ }
112
+ );
113
+ }
114
+ function CommandSeparator({
115
+ className,
116
+ ...props
117
+ }) {
118
+ return /* @__PURE__ */ jsx(
119
+ Command$1.Separator,
120
+ {
121
+ "data-slot": "command-separator",
122
+ className: cn("-mx-1 my-1 h-px bg-foreground/[0.06]", className),
123
+ ...props
124
+ }
125
+ );
126
+ }
127
+ function CommandItem({
128
+ className,
129
+ children,
130
+ ...props
131
+ }) {
132
+ return /* @__PURE__ */ jsxs(
133
+ Command$1.Item,
134
+ {
135
+ "data-slot": "command-item",
136
+ className: cn(
137
+ "group/command-item relative flex cursor-default items-center gap-2 rounded-[6px] px-3 py-[9px] text-[13px] text-muted-foreground outline-hidden select-none pointer-coarse:min-h-11 data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-foreground/[0.06] data-[selected=true]:text-foreground data-[checked=true]:font-medium data-[checked=true]:text-amber-500 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
138
+ className
139
+ ),
140
+ ...props,
141
+ children: [
142
+ children,
143
+ /* @__PURE__ */ jsx(CheckIcon, { className: "ml-auto text-amber-500 opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100" })
144
+ ]
145
+ }
146
+ );
147
+ }
148
+ function CommandShortcut({
149
+ className,
150
+ ...props
151
+ }) {
152
+ return /* @__PURE__ */ jsx(
153
+ "span",
154
+ {
155
+ "data-slot": "command-shortcut",
156
+ className: cn(
157
+ "ml-auto text-[11.5px] text-muted-foreground/70 group-data-[selected=true]/command-item:text-muted-foreground",
158
+ className
159
+ ),
160
+ ...props
161
+ }
162
+ );
163
+ }
164
+
165
+ export { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut };
166
+ //# sourceMappingURL=command.js.map
167
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/command.tsx"],"names":["CommandPrimitive"],"mappings":"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","file":"command.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { SearchIcon, CheckIcon } from \"lucide-react\"\n\nimport { cn } from \"./lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\"\nimport { InputGroup, InputGroupAddon } from \"./input-group\"\n\n// A searchable list (cmdk) drawn as the Work console draws its menus:\n// sentence-case 13px rows in muted text that brighten when highlighted, a\n// quiet group label, and amber for what is checked. Rows reach 44px on a\n// phone and keep their compact height with a mouse.\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n \"flex size-full flex-col overflow-hidden bg-popover text-popover-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = false,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn(\"top-1/3 translate-y-0 overflow-hidden p-0\", className)}\n showCloseButton={showCloseButton}\n >\n {children}\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div data-slot=\"command-input-wrapper\" className=\"p-2\">\n <InputGroup className=\"px-3\">\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n \"w-full bg-transparent px-2 text-[13px] text-foreground outline-hidden placeholder:text-muted-foreground/50 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n <InputGroupAddon>\n <SearchIcon className=\"size-3.5 shrink-0 text-muted-foreground\" />\n </InputGroupAddon>\n </InputGroup>\n </div>\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n \"no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className={cn(\"py-6 text-center text-[13px] text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n \"overflow-hidden p-1 text-foreground **:[[cmdk-group-heading]]:px-3 **:[[cmdk-group-heading]]:pt-2 **:[[cmdk-group-heading]]:pb-1 **:[[cmdk-group-heading]]:text-[11.5px] **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground/80\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-foreground/[0.06]\", className)}\n {...props}\n />\n )\n}\n\n// `data-checked` on an item lights its trailing check, as a picked option.\nfunction CommandItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"group/command-item relative flex cursor-default items-center gap-2 rounded-[6px] px-3 py-[9px] text-[13px] text-muted-foreground outline-hidden select-none pointer-coarse:min-h-11 data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-foreground/[0.06] data-[selected=true]:text-foreground data-[checked=true]:font-medium data-[checked=true]:text-amber-500 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <CheckIcon className=\"ml-auto text-amber-500 opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100\" />\n </CommandPrimitive.Item>\n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n \"ml-auto text-[11.5px] text-muted-foreground/70 group-data-[selected=true]/command-item:text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n"]}
@@ -15,16 +15,18 @@ function ConfirmDialog({
15
15
  confirmIcon,
16
16
  variant = "destructive",
17
17
  confirmDisabled = false,
18
+ loading: busy = false,
18
19
  onConfirm,
19
20
  onCancel
20
21
  }) {
21
- const [loading, setLoading] = react.useState(false);
22
+ const [pending, setPending] = react.useState(false);
23
+ const loading = busy || pending;
22
24
  const handleConfirm = async () => {
23
- setLoading(true);
25
+ setPending(true);
24
26
  try {
25
27
  await onConfirm();
26
28
  } finally {
27
- setLoading(false);
29
+ setPending(false);
28
30
  }
29
31
  };
30
32
  return /* @__PURE__ */ jsxRuntime.jsx(chunkID7MWMJO_cjs.Dialog, { open, onOpenChange: (o) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/confirm-dialog.tsx"],"names":["useState","jsx","Dialog","jsxs","DialogContent","DialogHeader","DialogTitle","DialogDescription","DialogFooter","Button","Loader2"],"mappings":";;;;;;;;;AA8BO,SAAS,aAAA,CAAc;AAAA,EAC5B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA,GAAe,SAAA;AAAA,EACf,WAAA;AAAA,EACA,OAAA,GAAU,aAAA;AAAA,EACV,eAAA,GAAkB,KAAA;AAAA,EAClB,SAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAE5C,EAAA,MAAM,gBAAgB,YAAY;AAChC,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,EAAU;AAAA,IAClB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEC,cAAA,CAACC,wBAAA,EAAA,EAAO,IAAA,EAAY,YAAA,EAAc,CAAC,CAAA,KAAM;AAAE,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,OAAA,EAAS,QAAA,EAAS;AAAA,EAAG,CAAA,EAEzE,QAAA,kBAAAC,eAAA;AAAA,IAACC,+BAAA;AAAA,IAAA;AAAA,MACC,eAAA,EAAiB,KAAA;AAAA,MACjB,SAAA,EAAU,yCAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAAD,eAAA,CAACE,8BAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAJ,cAAA,CAACK,iCAAa,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,0BACpBL,cAAA,CAACM,uCAAmB,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAClC,CAAA;AAAA,wBACAJ,eAAA,CAACK,8BAAA,EAAA,EAAa,SAAA,EAAU,QAAA,EACtB,QAAA,EAAA;AAAA,0BAAAP,cAAA;AAAA,YAACQ,wBAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,QAAA,EAAU,OAAA;AAAA,cACV,OAAA,EAAS,QAAA;AAAA,cACV,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,0BACAN,eAAA;AAAA,YAACM,wBAAA;AAAA,YAAA;AAAA,cACC,OAAA;AAAA,cACA,UAAU,OAAA,IAAW,eAAA;AAAA,cACrB,OAAA,EAAS,aAAA;AAAA,cAER,QAAA,EAAA;AAAA,gBAAA,OAAA,kCAAWC,mBAAA,EAAA,EAAQ,SAAA,EAAU,qBAAA,EAAsB,IAAA,EAAM,IAAI,CAAA,GAAK,WAAA;AAAA,gBAClE;AAAA;AAAA;AAAA;AACH,SAAA,EACF;AAAA;AAAA;AAAA,GACF,EACF,CAAA;AAEJ","file":"confirm-dialog.cjs","sourcesContent":["// Copyright (c) 2026, Invergent SA, developed by Flavius Burca\n// SPDX-License-Identifier: AGPL-3.0-only\n//\nimport { useState } from \"react\";\nimport { Loader2 } from \"lucide-react\";\nimport { Button } from \"./button\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n} from \"./dialog\";\n\ninterface ConfirmDialogProps {\n open: boolean;\n title: string;\n description: React.ReactNode;\n confirmLabel?: string;\n confirmIcon?: React.ReactNode;\n variant?: \"destructive\" | \"default\";\n /** Disables the confirm button. Use when the action is known\n * to be invalid (e.g. an in-use entity) and the dialog only\n * exists to explain why. */\n confirmDisabled?: boolean;\n onConfirm: () => Promise<void> | void;\n onCancel: () => void;\n}\n\nexport function ConfirmDialog({\n open,\n title,\n description,\n confirmLabel = \"Confirm\",\n confirmIcon,\n variant = \"destructive\",\n confirmDisabled = false,\n onConfirm,\n onCancel,\n}: ConfirmDialogProps) {\n const [loading, setLoading] = useState(false);\n\n const handleConfirm = async () => {\n setLoading(true);\n try {\n await onConfirm();\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={(o) => { if (!o && !loading) onCancel(); }}>\n {/* Work's confirm: compact, no close button — Cancel and Escape do it. */}\n <DialogContent\n showCloseButton={false}\n className=\"gap-3.5 px-6 pt-6 pb-5 sm:max-w-[430px]\"\n >\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogFooter className=\"pt-1.5\">\n <Button\n variant=\"outline\"\n disabled={loading}\n onClick={onCancel}\n >\n Cancel\n </Button>\n <Button\n variant={variant}\n disabled={loading || confirmDisabled}\n onClick={handleConfirm}\n >\n {loading ? <Loader2 className=\"animate-spin mr-1.5\" size={14} /> : confirmIcon}\n {confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/confirm-dialog.tsx"],"names":["useState","jsx","Dialog","jsxs","DialogContent","DialogHeader","DialogTitle","DialogDescription","DialogFooter","Button","Loader2"],"mappings":";;;;;;;;;AAiCO,SAAS,aAAA,CAAc;AAAA,EAC5B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA,GAAe,SAAA;AAAA,EACf,WAAA;AAAA,EACA,OAAA,GAAU,aAAA;AAAA,EACV,eAAA,GAAkB,KAAA;AAAA,EAClB,SAAS,IAAA,GAAO,KAAA;AAAA,EAChB,SAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,UAAU,IAAA,IAAQ,OAAA;AAExB,EAAA,MAAM,gBAAgB,YAAY;AAChC,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,EAAU;AAAA,IAClB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEC,cAAA,CAACC,wBAAA,EAAA,EAAO,IAAA,EAAY,YAAA,EAAc,CAAC,CAAA,KAAM;AAAE,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,OAAA,EAAS,QAAA,EAAS;AAAA,EAAG,CAAA,EAEzE,QAAA,kBAAAC,eAAA;AAAA,IAACC,+BAAA;AAAA,IAAA;AAAA,MACC,eAAA,EAAiB,KAAA;AAAA,MACjB,SAAA,EAAU,yCAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAAD,eAAA,CAACE,8BAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAJ,cAAA,CAACK,iCAAa,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,0BACpBL,cAAA,CAACM,uCAAmB,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAClC,CAAA;AAAA,wBACAJ,eAAA,CAACK,8BAAA,EAAA,EAAa,SAAA,EAAU,QAAA,EACtB,QAAA,EAAA;AAAA,0BAAAP,cAAA;AAAA,YAACQ,wBAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,QAAA,EAAU,OAAA;AAAA,cACV,OAAA,EAAS,QAAA;AAAA,cACV,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,0BACAN,eAAA;AAAA,YAACM,wBAAA;AAAA,YAAA;AAAA,cACC,OAAA;AAAA,cACA,UAAU,OAAA,IAAW,eAAA;AAAA,cACrB,OAAA,EAAS,aAAA;AAAA,cAER,QAAA,EAAA;AAAA,gBAAA,OAAA,kCAAWC,mBAAA,EAAA,EAAQ,SAAA,EAAU,qBAAA,EAAsB,IAAA,EAAM,IAAI,CAAA,GAAK,WAAA;AAAA,gBAClE;AAAA;AAAA;AAAA;AACH,SAAA,EACF;AAAA;AAAA;AAAA,GACF,EACF,CAAA;AAEJ","file":"confirm-dialog.cjs","sourcesContent":["// Copyright (c) 2026, Invergent SA, developed by Flavius Burca\n// SPDX-License-Identifier: AGPL-3.0-only\n//\nimport { useState } from \"react\";\nimport { Loader2 } from \"lucide-react\";\nimport { Button } from \"./button\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n} from \"./dialog\";\n\ninterface ConfirmDialogProps {\n open: boolean;\n title: string;\n description: React.ReactNode;\n confirmLabel?: string;\n confirmIcon?: React.ReactNode;\n variant?: \"destructive\" | \"default\";\n /** Disables the confirm button. Use when the action is known\n * to be invalid (e.g. an in-use entity) and the dialog only\n * exists to explain why. */\n confirmDisabled?: boolean;\n /** Busy from outside: work that outlives the dialog (held in a store a\n * remounted dialog reads) keeps it locked, as its own pending confirm does. */\n loading?: boolean;\n onConfirm: () => Promise<void> | void;\n onCancel: () => void;\n}\n\nexport function ConfirmDialog({\n open,\n title,\n description,\n confirmLabel = \"Confirm\",\n confirmIcon,\n variant = \"destructive\",\n confirmDisabled = false,\n loading: busy = false,\n onConfirm,\n onCancel,\n}: ConfirmDialogProps) {\n const [pending, setPending] = useState(false);\n const loading = busy || pending;\n\n const handleConfirm = async () => {\n setPending(true);\n try {\n await onConfirm();\n } finally {\n setPending(false);\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={(o) => { if (!o && !loading) onCancel(); }}>\n {/* Work's confirm: compact, no close button — Cancel and Escape do it. */}\n <DialogContent\n showCloseButton={false}\n className=\"gap-3.5 px-6 pt-6 pb-5 sm:max-w-[430px]\"\n >\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogFooter className=\"pt-1.5\">\n <Button\n variant=\"outline\"\n disabled={loading}\n onClick={onCancel}\n >\n Cancel\n </Button>\n <Button\n variant={variant}\n disabled={loading || confirmDisabled}\n onClick={handleConfirm}\n >\n {loading ? <Loader2 className=\"animate-spin mr-1.5\" size={14} /> : confirmIcon}\n {confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n"]}
@@ -11,9 +11,12 @@ interface ConfirmDialogProps {
11
11
  * to be invalid (e.g. an in-use entity) and the dialog only
12
12
  * exists to explain why. */
13
13
  confirmDisabled?: boolean;
14
+ /** Busy from outside: work that outlives the dialog (held in a store a
15
+ * remounted dialog reads) keeps it locked, as its own pending confirm does. */
16
+ loading?: boolean;
14
17
  onConfirm: () => Promise<void> | void;
15
18
  onCancel: () => void;
16
19
  }
17
- declare function ConfirmDialog({ open, title, description, confirmLabel, confirmIcon, variant, confirmDisabled, onConfirm, onCancel, }: ConfirmDialogProps): react_jsx_runtime.JSX.Element;
20
+ declare function ConfirmDialog({ open, title, description, confirmLabel, confirmIcon, variant, confirmDisabled, loading: busy, onConfirm, onCancel, }: ConfirmDialogProps): react_jsx_runtime.JSX.Element;
18
21
 
19
22
  export { ConfirmDialog };
@@ -11,9 +11,12 @@ interface ConfirmDialogProps {
11
11
  * to be invalid (e.g. an in-use entity) and the dialog only
12
12
  * exists to explain why. */
13
13
  confirmDisabled?: boolean;
14
+ /** Busy from outside: work that outlives the dialog (held in a store a
15
+ * remounted dialog reads) keeps it locked, as its own pending confirm does. */
16
+ loading?: boolean;
14
17
  onConfirm: () => Promise<void> | void;
15
18
  onCancel: () => void;
16
19
  }
17
- declare function ConfirmDialog({ open, title, description, confirmLabel, confirmIcon, variant, confirmDisabled, onConfirm, onCancel, }: ConfirmDialogProps): react_jsx_runtime.JSX.Element;
20
+ declare function ConfirmDialog({ open, title, description, confirmLabel, confirmIcon, variant, confirmDisabled, loading: busy, onConfirm, onCancel, }: ConfirmDialogProps): react_jsx_runtime.JSX.Element;
18
21
 
19
22
  export { ConfirmDialog };
@@ -13,16 +13,18 @@ function ConfirmDialog({
13
13
  confirmIcon,
14
14
  variant = "destructive",
15
15
  confirmDisabled = false,
16
+ loading: busy = false,
16
17
  onConfirm,
17
18
  onCancel
18
19
  }) {
19
- const [loading, setLoading] = useState(false);
20
+ const [pending, setPending] = useState(false);
21
+ const loading = busy || pending;
20
22
  const handleConfirm = async () => {
21
- setLoading(true);
23
+ setPending(true);
22
24
  try {
23
25
  await onConfirm();
24
26
  } finally {
25
- setLoading(false);
27
+ setPending(false);
26
28
  }
27
29
  };
28
30
  return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange: (o) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/confirm-dialog.tsx"],"names":[],"mappings":";;;;;;;AA8BO,SAAS,aAAA,CAAc;AAAA,EAC5B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA,GAAe,SAAA;AAAA,EACf,WAAA;AAAA,EACA,OAAA,GAAU,aAAA;AAAA,EACV,eAAA,GAAkB,KAAA;AAAA,EAClB,SAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA;AAE5C,EAAA,MAAM,gBAAgB,YAAY;AAChC,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,EAAU;AAAA,IAClB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,GAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAY,YAAA,EAAc,CAAC,CAAA,KAAM;AAAE,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,OAAA,EAAS,QAAA,EAAS;AAAA,EAAG,CAAA,EAEzE,QAAA,kBAAA,IAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,eAAA,EAAiB,KAAA;AAAA,MACjB,SAAA,EAAU,yCAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,eAAa,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,0BACpB,GAAA,CAAC,qBAAmB,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAClC,CAAA;AAAA,wBACA,IAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,QAAA,EACtB,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,QAAA,EAAU,OAAA;AAAA,cACV,OAAA,EAAS,QAAA;AAAA,cACV,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,0BACA,IAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA;AAAA,cACA,UAAU,OAAA,IAAW,eAAA;AAAA,cACrB,OAAA,EAAS,aAAA;AAAA,cAER,QAAA,EAAA;AAAA,gBAAA,OAAA,uBAAW,OAAA,EAAA,EAAQ,SAAA,EAAU,qBAAA,EAAsB,IAAA,EAAM,IAAI,CAAA,GAAK,WAAA;AAAA,gBAClE;AAAA;AAAA;AAAA;AACH,SAAA,EACF;AAAA;AAAA;AAAA,GACF,EACF,CAAA;AAEJ","file":"confirm-dialog.js","sourcesContent":["// Copyright (c) 2026, Invergent SA, developed by Flavius Burca\n// SPDX-License-Identifier: AGPL-3.0-only\n//\nimport { useState } from \"react\";\nimport { Loader2 } from \"lucide-react\";\nimport { Button } from \"./button\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n} from \"./dialog\";\n\ninterface ConfirmDialogProps {\n open: boolean;\n title: string;\n description: React.ReactNode;\n confirmLabel?: string;\n confirmIcon?: React.ReactNode;\n variant?: \"destructive\" | \"default\";\n /** Disables the confirm button. Use when the action is known\n * to be invalid (e.g. an in-use entity) and the dialog only\n * exists to explain why. */\n confirmDisabled?: boolean;\n onConfirm: () => Promise<void> | void;\n onCancel: () => void;\n}\n\nexport function ConfirmDialog({\n open,\n title,\n description,\n confirmLabel = \"Confirm\",\n confirmIcon,\n variant = \"destructive\",\n confirmDisabled = false,\n onConfirm,\n onCancel,\n}: ConfirmDialogProps) {\n const [loading, setLoading] = useState(false);\n\n const handleConfirm = async () => {\n setLoading(true);\n try {\n await onConfirm();\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={(o) => { if (!o && !loading) onCancel(); }}>\n {/* Work's confirm: compact, no close button — Cancel and Escape do it. */}\n <DialogContent\n showCloseButton={false}\n className=\"gap-3.5 px-6 pt-6 pb-5 sm:max-w-[430px]\"\n >\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogFooter className=\"pt-1.5\">\n <Button\n variant=\"outline\"\n disabled={loading}\n onClick={onCancel}\n >\n Cancel\n </Button>\n <Button\n variant={variant}\n disabled={loading || confirmDisabled}\n onClick={handleConfirm}\n >\n {loading ? <Loader2 className=\"animate-spin mr-1.5\" size={14} /> : confirmIcon}\n {confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/confirm-dialog.tsx"],"names":[],"mappings":";;;;;;;AAiCO,SAAS,aAAA,CAAc;AAAA,EAC5B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA,GAAe,SAAA;AAAA,EACf,WAAA;AAAA,EACA,OAAA,GAAU,aAAA;AAAA,EACV,eAAA,GAAkB,KAAA;AAAA,EAClB,SAAS,IAAA,GAAO,KAAA;AAAA,EAChB,SAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,UAAU,IAAA,IAAQ,OAAA;AAExB,EAAA,MAAM,gBAAgB,YAAY;AAChC,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,EAAU;AAAA,IAClB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,GAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAY,YAAA,EAAc,CAAC,CAAA,KAAM;AAAE,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,OAAA,EAAS,QAAA,EAAS;AAAA,EAAG,CAAA,EAEzE,QAAA,kBAAA,IAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,eAAA,EAAiB,KAAA;AAAA,MACjB,SAAA,EAAU,yCAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,eAAa,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,0BACpB,GAAA,CAAC,qBAAmB,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAClC,CAAA;AAAA,wBACA,IAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,QAAA,EACtB,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,QAAA,EAAU,OAAA;AAAA,cACV,OAAA,EAAS,QAAA;AAAA,cACV,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,0BACA,IAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA;AAAA,cACA,UAAU,OAAA,IAAW,eAAA;AAAA,cACrB,OAAA,EAAS,aAAA;AAAA,cAER,QAAA,EAAA;AAAA,gBAAA,OAAA,uBAAW,OAAA,EAAA,EAAQ,SAAA,EAAU,qBAAA,EAAsB,IAAA,EAAM,IAAI,CAAA,GAAK,WAAA;AAAA,gBAClE;AAAA;AAAA;AAAA;AACH,SAAA,EACF;AAAA;AAAA;AAAA,GACF,EACF,CAAA;AAEJ","file":"confirm-dialog.js","sourcesContent":["// Copyright (c) 2026, Invergent SA, developed by Flavius Burca\n// SPDX-License-Identifier: AGPL-3.0-only\n//\nimport { useState } from \"react\";\nimport { Loader2 } from \"lucide-react\";\nimport { Button } from \"./button\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n} from \"./dialog\";\n\ninterface ConfirmDialogProps {\n open: boolean;\n title: string;\n description: React.ReactNode;\n confirmLabel?: string;\n confirmIcon?: React.ReactNode;\n variant?: \"destructive\" | \"default\";\n /** Disables the confirm button. Use when the action is known\n * to be invalid (e.g. an in-use entity) and the dialog only\n * exists to explain why. */\n confirmDisabled?: boolean;\n /** Busy from outside: work that outlives the dialog (held in a store a\n * remounted dialog reads) keeps it locked, as its own pending confirm does. */\n loading?: boolean;\n onConfirm: () => Promise<void> | void;\n onCancel: () => void;\n}\n\nexport function ConfirmDialog({\n open,\n title,\n description,\n confirmLabel = \"Confirm\",\n confirmIcon,\n variant = \"destructive\",\n confirmDisabled = false,\n loading: busy = false,\n onConfirm,\n onCancel,\n}: ConfirmDialogProps) {\n const [pending, setPending] = useState(false);\n const loading = busy || pending;\n\n const handleConfirm = async () => {\n setPending(true);\n try {\n await onConfirm();\n } finally {\n setPending(false);\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={(o) => { if (!o && !loading) onCancel(); }}>\n {/* Work's confirm: compact, no close button — Cancel and Escape do it. */}\n <DialogContent\n showCloseButton={false}\n className=\"gap-3.5 px-6 pt-6 pb-5 sm:max-w-[430px]\"\n >\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogFooter className=\"pt-1.5\">\n <Button\n variant=\"outline\"\n disabled={loading}\n onClick={onCancel}\n >\n Cancel\n </Button>\n <Button\n variant={variant}\n disabled={loading || confirmDisabled}\n onClick={handleConfirm}\n >\n {loading ? <Loader2 className=\"animate-spin mr-1.5\" size={14} /> : confirmIcon}\n {confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n"]}
package/dist/field.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunk6ARYCL4L_cjs = require('./chunk-6ARYCL4L.cjs');
4
3
  var chunkOAVCB3MR_cjs = require('./chunk-OAVCB3MR.cjs');
4
+ var chunk6ARYCL4L_cjs = require('./chunk-6ARYCL4L.cjs');
5
5
  var chunk6YHDDRIM_cjs = require('./chunk-6YHDDRIM.cjs');
6
6
  var react = require('react');
7
7
  var classVarianceAuthority = require('class-variance-authority');
package/dist/field.js CHANGED
@@ -1,5 +1,5 @@
1
- import { Separator } from './chunk-CTIEUG5L.js';
2
1
  import { Label } from './chunk-M677T75H.js';
2
+ import { Separator } from './chunk-CTIEUG5L.js';
3
3
  import { cn } from './chunk-LZGII7SX.js';
4
4
  import { useMemo } from 'react';
5
5
  import { cva } from 'class-variance-authority';
@@ -0,0 +1,43 @@
1
+ 'use strict';
2
+
3
+ var chunk6YHDDRIM_cjs = require('./chunk-6YHDDRIM.cjs');
4
+ var radixUi = require('radix-ui');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+
7
+ function HoverCard({
8
+ ...props
9
+ }) {
10
+ return /* @__PURE__ */ jsxRuntime.jsx(radixUi.HoverCard.Root, { "data-slot": "hover-card", ...props });
11
+ }
12
+ function HoverCardTrigger({
13
+ ...props
14
+ }) {
15
+ return /* @__PURE__ */ jsxRuntime.jsx(radixUi.HoverCard.Trigger, { "data-slot": "hover-card-trigger", ...props });
16
+ }
17
+ function HoverCardContent({
18
+ className,
19
+ align = "center",
20
+ sideOffset = 4,
21
+ ...props
22
+ }) {
23
+ return /* @__PURE__ */ jsxRuntime.jsx(radixUi.HoverCard.Portal, { "data-slot": "hover-card-portal", children: /* @__PURE__ */ jsxRuntime.jsx(
24
+ radixUi.HoverCard.Content,
25
+ {
26
+ "data-slot": "hover-card-content",
27
+ align,
28
+ sideOffset,
29
+ className: chunk6YHDDRIM_cjs.cn(
30
+ // The surface of Work's popovers.
31
+ "z-50 w-72 origin-(--radix-hover-card-content-transform-origin) rounded-[12px] border border-foreground/10 bg-popover p-4 text-sm text-popover-foreground shadow-[0px_10px_24px_0px_rgba(0,0,0,0.12)] outline-hidden duration-100 dark:shadow-[0px_10px_24px_0px_rgba(0,0,0,0.5)] data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
32
+ className
33
+ ),
34
+ ...props
35
+ }
36
+ ) });
37
+ }
38
+
39
+ exports.HoverCard = HoverCard;
40
+ exports.HoverCardContent = HoverCardContent;
41
+ exports.HoverCardTrigger = HoverCardTrigger;
42
+ //# sourceMappingURL=hover-card.cjs.map
43
+ //# sourceMappingURL=hover-card.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hover-card.tsx"],"names":["HoverCardPrimitive","jsx","cn"],"mappings":";;;;;;AAKA,SAAS,SAAA,CAAU;AAAA,EACjB,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,sCAAQA,iBAAA,CAAmB,IAAA,EAAnB,EAAwB,WAAA,EAAU,YAAA,EAAc,GAAG,KAAA,EAAO,CAAA;AACpE;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,sCACGA,iBAAA,CAAmB,OAAA,EAAnB,EAA2B,WAAA,EAAU,oBAAA,EAAsB,GAAG,KAAA,EAAO,CAAA;AAE1E;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,KAAA,GAAQ,QAAA;AAAA,EACR,UAAA,GAAa,CAAA;AAAA,EACb,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,uBACEC,cAAA,CAACD,iBAAA,CAAmB,MAAA,EAAnB,EAA0B,aAAU,mBAAA,EACnC,QAAA,kBAAAC,cAAA;AAAA,IAACD,iBAAA,CAAmB,OAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,KAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAWE,oBAAA;AAAA;AAAA,QAET,mjBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN,EACF,CAAA;AAEJ","file":"hover-card.cjs","sourcesContent":["import * as React from \"react\"\nimport { HoverCard as HoverCardPrimitive } from \"radix-ui\"\n\nimport { cn } from \"./lib/utils\"\n\nfunction HoverCard({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" {...props} />\n}\n\nfunction HoverCardTrigger({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\n return (\n <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />\n )\n}\n\nfunction HoverCardContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\n return (\n <HoverCardPrimitive.Portal data-slot=\"hover-card-portal\">\n <HoverCardPrimitive.Content\n data-slot=\"hover-card-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n // The surface of Work's popovers.\n \"z-50 w-72 origin-(--radix-hover-card-content-transform-origin) rounded-[12px] border border-foreground/10 bg-popover p-4 text-sm text-popover-foreground shadow-[0px_10px_24px_0px_rgba(0,0,0,0.12)] outline-hidden duration-100 dark:shadow-[0px_10px_24px_0px_rgba(0,0,0,0.5)] data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n )\n}\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\n"]}
@@ -0,0 +1,9 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { HoverCard as HoverCard$1 } from 'radix-ui';
4
+
5
+ declare function HoverCard({ ...props }: React.ComponentProps<typeof HoverCard$1.Root>): react_jsx_runtime.JSX.Element;
6
+ declare function HoverCardTrigger({ ...props }: React.ComponentProps<typeof HoverCard$1.Trigger>): react_jsx_runtime.JSX.Element;
7
+ declare function HoverCardContent({ className, align, sideOffset, ...props }: React.ComponentProps<typeof HoverCard$1.Content>): react_jsx_runtime.JSX.Element;
8
+
9
+ export { HoverCard, HoverCardContent, HoverCardTrigger };
@@ -0,0 +1,9 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { HoverCard as HoverCard$1 } from 'radix-ui';
4
+
5
+ declare function HoverCard({ ...props }: React.ComponentProps<typeof HoverCard$1.Root>): react_jsx_runtime.JSX.Element;
6
+ declare function HoverCardTrigger({ ...props }: React.ComponentProps<typeof HoverCard$1.Trigger>): react_jsx_runtime.JSX.Element;
7
+ declare function HoverCardContent({ className, align, sideOffset, ...props }: React.ComponentProps<typeof HoverCard$1.Content>): react_jsx_runtime.JSX.Element;
8
+
9
+ export { HoverCard, HoverCardContent, HoverCardTrigger };