@proteos/ui 0.31.0

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 (226) hide show
  1. package/LICENSE +105 -0
  2. package/dist/chunk-IKAX76MB.js +113 -0
  3. package/dist/chunk-IKAX76MB.js.map +1 -0
  4. package/dist/chunk-MWAXK66H.cjs +119 -0
  5. package/dist/chunk-MWAXK66H.cjs.map +1 -0
  6. package/dist/index.cjs +6246 -0
  7. package/dist/index.cjs.map +1 -0
  8. package/dist/index.d.cts +2126 -0
  9. package/dist/index.d.ts +2126 -0
  10. package/dist/index.js +6069 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/pdf-view-3ZMMS6ML.cjs +95 -0
  13. package/dist/pdf-view-3ZMMS6ML.cjs.map +1 -0
  14. package/dist/pdf-view-BV5ZD6OC.js +93 -0
  15. package/dist/pdf-view-BV5ZD6OC.js.map +1 -0
  16. package/package.json +96 -0
  17. package/src/components/attachment-chip/attachment-chip.tsx +129 -0
  18. package/src/components/attachment-chip/index.ts +2 -0
  19. package/src/components/attribute-type-icon/attribute-type-icon.stories.tsx +70 -0
  20. package/src/components/attribute-type-icon/attribute-type-icon.tsx +125 -0
  21. package/src/components/attribute-type-icon/index.ts +8 -0
  22. package/src/components/avatar/avatar.stories.tsx +42 -0
  23. package/src/components/avatar/avatar.tsx +48 -0
  24. package/src/components/avatar/index.ts +2 -0
  25. package/src/components/avatar-group/avatar-group.test.tsx +38 -0
  26. package/src/components/avatar-group/avatar-group.tsx +60 -0
  27. package/src/components/avatar-group/index.ts +2 -0
  28. package/src/components/badge/badge.stories.tsx +62 -0
  29. package/src/components/badge/badge.test.tsx +36 -0
  30. package/src/components/badge/badge.tsx +54 -0
  31. package/src/components/badge/index.ts +2 -0
  32. package/src/components/badge-multi-select/badge-multi-select.stories.tsx +177 -0
  33. package/src/components/badge-multi-select/badge-multi-select.test.tsx +155 -0
  34. package/src/components/badge-multi-select/badge-multi-select.tsx +272 -0
  35. package/src/components/badge-multi-select/index.ts +2 -0
  36. package/src/components/breadcrumbs/breadcrumbs.stories.tsx +43 -0
  37. package/src/components/breadcrumbs/breadcrumbs.tsx +86 -0
  38. package/src/components/breadcrumbs/index.ts +2 -0
  39. package/src/components/button/button.stories.tsx +290 -0
  40. package/src/components/button/button.test.tsx +59 -0
  41. package/src/components/button/button.tsx +86 -0
  42. package/src/components/button/index.ts +2 -0
  43. package/src/components/card/card.stories.tsx +351 -0
  44. package/src/components/card/card.test.tsx +141 -0
  45. package/src/components/card/card.tsx +173 -0
  46. package/src/components/card/index.ts +13 -0
  47. package/src/components/checkbox/checkbox-group.tsx +52 -0
  48. package/src/components/checkbox/checkbox.stories.tsx +48 -0
  49. package/src/components/checkbox/checkbox.test.tsx +50 -0
  50. package/src/components/checkbox/checkbox.tsx +71 -0
  51. package/src/components/checkbox/index.ts +4 -0
  52. package/src/components/combobox/combobox.stories.tsx +97 -0
  53. package/src/components/combobox/combobox.test.tsx +123 -0
  54. package/src/components/combobox/combobox.tsx +239 -0
  55. package/src/components/combobox/index.ts +2 -0
  56. package/src/components/command/command-hint.tsx +46 -0
  57. package/src/components/command/command.stories.tsx +88 -0
  58. package/src/components/command/command.test.tsx +102 -0
  59. package/src/components/command/command.tsx +76 -0
  60. package/src/components/command/index.ts +16 -0
  61. package/src/components/currency-input/currency-input.tsx +192 -0
  62. package/src/components/currency-input/index.ts +6 -0
  63. package/src/components/data-table/cells.stories.tsx +120 -0
  64. package/src/components/data-table/cells.tsx +165 -0
  65. package/src/components/data-table/data-table.stories.tsx +371 -0
  66. package/src/components/data-table/data-table.tsx +556 -0
  67. package/src/components/data-table/index.ts +22 -0
  68. package/src/components/data-table/make-actions-column.ts +30 -0
  69. package/src/components/data-table/states/data-table-empty.tsx +40 -0
  70. package/src/components/data-table/states/data-table-error.tsx +30 -0
  71. package/src/components/data-table/states/data-table-skeleton.tsx +42 -0
  72. package/src/components/data-table/use-infinite-scroll-sentinel.ts +51 -0
  73. package/src/components/date-picker/calendar-internals.tsx +138 -0
  74. package/src/components/date-picker/date-picker.stories.tsx +78 -0
  75. package/src/components/date-picker/date-picker.test.tsx +71 -0
  76. package/src/components/date-picker/date-picker.tsx +140 -0
  77. package/src/components/date-picker/index.ts +2 -0
  78. package/src/components/date-time-picker/date-time-picker.stories.tsx +96 -0
  79. package/src/components/date-time-picker/date-time-picker.test.tsx +87 -0
  80. package/src/components/date-time-picker/date-time-picker.tsx +203 -0
  81. package/src/components/date-time-picker/index.ts +2 -0
  82. package/src/components/empty-state/empty-state.tsx +63 -0
  83. package/src/components/empty-state/index.ts +2 -0
  84. package/src/components/error-animation/error-animation.stories.tsx +50 -0
  85. package/src/components/error-animation/error-animation.test.tsx +22 -0
  86. package/src/components/error-animation/error-animation.tsx +26 -0
  87. package/src/components/error-animation/index.ts +2 -0
  88. package/src/components/field/field.tsx +142 -0
  89. package/src/components/field/index.ts +8 -0
  90. package/src/components/file-field/file-field.tsx +285 -0
  91. package/src/components/file-field/index.ts +2 -0
  92. package/src/components/file-viewer/fallback-card.tsx +68 -0
  93. package/src/components/file-viewer/file-viewer.stories.tsx +67 -0
  94. package/src/components/file-viewer/file-viewer.test.tsx +81 -0
  95. package/src/components/file-viewer/file-viewer.tsx +116 -0
  96. package/src/components/file-viewer/image-view.tsx +38 -0
  97. package/src/components/file-viewer/index.ts +7 -0
  98. package/src/components/file-viewer/pdf-view.tsx +122 -0
  99. package/src/components/file-viewer/video-view.tsx +16 -0
  100. package/src/components/image-attachment/image-attachment.stories.tsx +39 -0
  101. package/src/components/image-attachment/image-attachment.test.tsx +54 -0
  102. package/src/components/image-attachment/image-attachment.tsx +77 -0
  103. package/src/components/image-attachment/index.ts +3 -0
  104. package/src/components/image-attachment/is-previewable-image-name.ts +14 -0
  105. package/src/components/image-lightbox/image-lightbox.stories.tsx +38 -0
  106. package/src/components/image-lightbox/image-lightbox.test.tsx +72 -0
  107. package/src/components/image-lightbox/image-lightbox.tsx +92 -0
  108. package/src/components/image-lightbox/index.ts +2 -0
  109. package/src/components/input/index.ts +2 -0
  110. package/src/components/input/input.stories.tsx +71 -0
  111. package/src/components/input/input.test.tsx +36 -0
  112. package/src/components/input/input.tsx +76 -0
  113. package/src/components/kbd/index.ts +2 -0
  114. package/src/components/kbd/kbd.stories.tsx +34 -0
  115. package/src/components/kbd/kbd.tsx +27 -0
  116. package/src/components/menu/index.ts +2 -0
  117. package/src/components/menu/menu.tsx +121 -0
  118. package/src/components/modal/index.ts +10 -0
  119. package/src/components/modal/modal.stories.tsx +153 -0
  120. package/src/components/modal/modal.test.tsx +93 -0
  121. package/src/components/modal/modal.tsx +149 -0
  122. package/src/components/multi-select/index.ts +2 -0
  123. package/src/components/multi-select/multi-select.stories.tsx +211 -0
  124. package/src/components/multi-select/multi-select.test.tsx +151 -0
  125. package/src/components/multi-select/multi-select.tsx +339 -0
  126. package/src/components/nav/index.ts +7 -0
  127. package/src/components/nav/nav.stories.tsx +139 -0
  128. package/src/components/nav/nav.tsx +246 -0
  129. package/src/components/popover/index.ts +8 -0
  130. package/src/components/popover/popover.stories.tsx +92 -0
  131. package/src/components/popover/popover.tsx +135 -0
  132. package/src/components/progress-bar/index.ts +2 -0
  133. package/src/components/progress-bar/progress-bar.stories.tsx +75 -0
  134. package/src/components/progress-bar/progress-bar.test.tsx +29 -0
  135. package/src/components/progress-bar/progress-bar.tsx +57 -0
  136. package/src/components/radio-group/index.ts +2 -0
  137. package/src/components/radio-group/radio-group.stories.tsx +113 -0
  138. package/src/components/radio-group/radio-group.test.tsx +87 -0
  139. package/src/components/radio-group/radio-group.tsx +104 -0
  140. package/src/components/record-filter/attribute-picker.tsx +74 -0
  141. package/src/components/record-filter/chip-value.tsx +171 -0
  142. package/src/components/record-filter/filter-row.tsx +262 -0
  143. package/src/components/record-filter/filter-value-input.tsx +351 -0
  144. package/src/components/record-filter/group-add-controls.tsx +77 -0
  145. package/src/components/record-filter/group-body.tsx +173 -0
  146. package/src/components/record-filter/group-mutations.test.ts +104 -0
  147. package/src/components/record-filter/group-mutations.ts +116 -0
  148. package/src/components/record-filter/index.ts +58 -0
  149. package/src/components/record-filter/nested-group.tsx +138 -0
  150. package/src/components/record-filter/operator-picker.tsx +62 -0
  151. package/src/components/record-filter/operators.test.ts +105 -0
  152. package/src/components/record-filter/operators.ts +97 -0
  153. package/src/components/record-filter/record-filter-builder-panel.tsx +236 -0
  154. package/src/components/record-filter/record-filter-button.tsx +126 -0
  155. package/src/components/record-filter/record-filter-chips.tsx +527 -0
  156. package/src/components/record-filter/record-filter-editor.tsx +91 -0
  157. package/src/components/record-filter/record-filter.stories.tsx +196 -0
  158. package/src/components/record-filter/record-filter.test.tsx +437 -0
  159. package/src/components/record-filter/show-details-store.ts +72 -0
  160. package/src/components/record-filter/types.ts +150 -0
  161. package/src/components/segmented-control/index.ts +6 -0
  162. package/src/components/segmented-control/segmented-control.stories.tsx +67 -0
  163. package/src/components/segmented-control/segmented-control.test.tsx +47 -0
  164. package/src/components/segmented-control/segmented-control.tsx +105 -0
  165. package/src/components/select/index.ts +2 -0
  166. package/src/components/select/select.stories.tsx +76 -0
  167. package/src/components/select/select.test.tsx +56 -0
  168. package/src/components/select/select.tsx +159 -0
  169. package/src/components/separator/index.ts +2 -0
  170. package/src/components/separator/separator.stories.tsx +73 -0
  171. package/src/components/separator/separator.test.tsx +29 -0
  172. package/src/components/separator/separator.tsx +51 -0
  173. package/src/components/skeleton/index.ts +2 -0
  174. package/src/components/skeleton/skeleton.stories.tsx +68 -0
  175. package/src/components/skeleton/skeleton.test.tsx +38 -0
  176. package/src/components/skeleton/skeleton.tsx +43 -0
  177. package/src/components/success-animation/index.ts +2 -0
  178. package/src/components/success-animation/success-animation.stories.tsx +50 -0
  179. package/src/components/success-animation/success-animation.test.tsx +22 -0
  180. package/src/components/success-animation/success-animation.tsx +26 -0
  181. package/src/components/switch/index.ts +2 -0
  182. package/src/components/switch/switch.stories.tsx +60 -0
  183. package/src/components/switch/switch.test.tsx +50 -0
  184. package/src/components/switch/switch.tsx +49 -0
  185. package/src/components/table/index.ts +25 -0
  186. package/src/components/table/table.stories.tsx +306 -0
  187. package/src/components/table/table.test.tsx +115 -0
  188. package/src/components/table/table.tsx +543 -0
  189. package/src/components/tabs/index.ts +8 -0
  190. package/src/components/tabs/tabs.tsx +141 -0
  191. package/src/components/tag-input/index.ts +2 -0
  192. package/src/components/tag-input/tag-input.stories.tsx +73 -0
  193. package/src/components/tag-input/tag-input.test.tsx +80 -0
  194. package/src/components/tag-input/tag-input.tsx +193 -0
  195. package/src/components/textarea/index.ts +2 -0
  196. package/src/components/textarea/textarea.stories.tsx +75 -0
  197. package/src/components/textarea/textarea.test.tsx +41 -0
  198. package/src/components/textarea/textarea.tsx +86 -0
  199. package/src/components/time-field/index.ts +2 -0
  200. package/src/components/time-field/time-field.stories.tsx +76 -0
  201. package/src/components/time-field/time-field.test.tsx +51 -0
  202. package/src/components/time-field/time-field.tsx +98 -0
  203. package/src/components/tooltip/index.ts +2 -0
  204. package/src/components/tooltip/tooltip.stories.tsx +176 -0
  205. package/src/components/tooltip/tooltip.test.tsx +52 -0
  206. package/src/components/tooltip/tooltip.tsx +56 -0
  207. package/src/index.ts +47 -0
  208. package/src/lib/cn.ts +6 -0
  209. package/src/lib/commands/discovery-store.test.tsx +76 -0
  210. package/src/lib/commands/discovery-store.ts +110 -0
  211. package/src/lib/commands/index.ts +9 -0
  212. package/src/lib/commands/match-event.test.ts +99 -0
  213. package/src/lib/commands/match-event.ts +31 -0
  214. package/src/lib/commands/parse-combo.test.ts +65 -0
  215. package/src/lib/commands/parse-combo.ts +48 -0
  216. package/src/lib/commands/platform.ts +27 -0
  217. package/src/lib/commands/protected-combos.test.ts +18 -0
  218. package/src/lib/commands/protected-combos.ts +38 -0
  219. package/src/lib/commands/registry.test.ts +97 -0
  220. package/src/lib/commands/registry.ts +59 -0
  221. package/src/lib/commands/use-command.test.tsx +91 -0
  222. package/src/lib/commands/use-command.ts +32 -0
  223. package/src/lib/commands/use-escape-key.test.tsx +97 -0
  224. package/src/lib/commands/use-escape-key.ts +62 -0
  225. package/src/styles.css +321 -0
  226. package/src/test/setup.ts +9 -0
@@ -0,0 +1,2126 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as tailwind_variants from 'tailwind-variants';
3
+ import { VariantProps } from 'tailwind-variants';
4
+ import { LucideIcon, LucideProps } from 'lucide-react';
5
+ import * as react from 'react';
6
+ import { HTMLAttributes, ReactNode, AnchorHTMLAttributes, Ref, MouseEvent, KeyboardEvent as KeyboardEvent$1, RefObject, Key as Key$1 } from 'react';
7
+ import * as react_aria_components from 'react-aria-components';
8
+ import { Key, BreadcrumbsProps as BreadcrumbsProps$1, ButtonProps as ButtonProps$1, CheckboxProps as CheckboxProps$1, CheckboxGroupProps as CheckboxGroupProps$1, ComboBoxProps, DateValue, DatePickerProps as DatePickerProps$1, TextFieldProps, InputProps as InputProps$1, MenuProps as MenuProps$1, MenuItemProps as MenuItemProps$1, PopoverProps, MenuTrigger as MenuTrigger$1, DialogTriggerProps, ModalOverlayProps, DialogProps, HeadingProps, DisclosureProps, ProgressBarProps as ProgressBarProps$1, RadioProps as RadioProps$1, RadioGroupProps as RadioGroupProps$1, SelectProps as SelectProps$1, SeparatorProps as SeparatorProps$1, SwitchProps as SwitchProps$1, TabsProps, TabListProps, TabProps, TabPanelProps, TextAreaProps, TimeValue, TimeFieldProps as TimeFieldProps$1, TooltipProps as TooltipProps$1, TooltipTriggerComponentProps } from 'react-aria-components';
9
+ import { ColumnDef, SortingState, OnChangeFn, Row } from '@tanstack/react-table';
10
+ import { ClassValue } from 'clsx';
11
+
12
+ declare const attachmentChipStyles: tailwind_variants.TVReturnType<{
13
+ status: {
14
+ uploading: string;
15
+ ready: string;
16
+ error: string;
17
+ };
18
+ isInteractive: {
19
+ true: string;
20
+ false: string;
21
+ };
22
+ }, undefined, string[], {
23
+ status: {
24
+ uploading: string;
25
+ ready: string;
26
+ error: string;
27
+ };
28
+ isInteractive: {
29
+ true: string;
30
+ false: string;
31
+ };
32
+ }, undefined, tailwind_variants.TVReturnType<{
33
+ status: {
34
+ uploading: string;
35
+ ready: string;
36
+ error: string;
37
+ };
38
+ isInteractive: {
39
+ true: string;
40
+ false: string;
41
+ };
42
+ }, undefined, string[], unknown, unknown, undefined>>;
43
+ type AttachmentChipVariants = VariantProps<typeof attachmentChipStyles>;
44
+ interface AttachmentChipProps {
45
+ /** File name shown (truncated). */
46
+ name: string;
47
+ /** Size in bytes — rendered when known and the chip is in the `ready` state. */
48
+ sizeInBytes?: number;
49
+ /** MIME type — picks the leading file-type icon. */
50
+ contentType?: string;
51
+ /** Upload lifecycle: spinner while `uploading`, danger styling on `error`. */
52
+ status?: 'uploading' | 'ready' | 'error';
53
+ /** Tooltip text and the meta line shown in the `error` state (the failure reason). */
54
+ errorMessage?: string;
55
+ /** When set, an (x) button is shown that calls this. */
56
+ onRemove?: () => void;
57
+ /** When set, the chip body is pressable (e.g. to download an agent file). */
58
+ onPress?: () => void;
59
+ className?: string;
60
+ }
61
+ declare function AttachmentChip({ name, sizeInBytes, contentType, status, errorMessage, onRemove, onPress, className, }: AttachmentChipProps): react_jsx_runtime.JSX.Element;
62
+
63
+ /**
64
+ * Attribute-type values the design system knows how to render. Exported as a
65
+ * value (an enum-like const object) so consumers can both reference a single
66
+ * member by name (`AttributeType.String`) and iterate the full set
67
+ * (`Object.values(AttributeType)`) without re-declaring the list. The
68
+ * matching type — derived from this same object — keeps the union and the
69
+ * runtime list in lockstep: adding a member here surfaces it in every
70
+ * consumer (icon mapping, type picker, designer config) automatically.
71
+ */
72
+ declare const AttributeType: {
73
+ readonly String: "string";
74
+ readonly Number: "number";
75
+ readonly Integer: "integer";
76
+ readonly Datetime: "datetime";
77
+ readonly Enum: "enum";
78
+ readonly Boolean: "boolean";
79
+ readonly Array: "array";
80
+ readonly Object: "object";
81
+ readonly Relation: "relation";
82
+ readonly User: "user";
83
+ readonly Currency: "currency";
84
+ readonly KnowledgeText: "knowledge-text";
85
+ readonly File: "file";
86
+ };
87
+ type AttributeType = (typeof AttributeType)[keyof typeof AttributeType];
88
+ /** Iteration order for type pickers, dropdowns, etc. */
89
+ declare const ATTRIBUTE_TYPES: ReadonlyArray<AttributeType>;
90
+ declare const ATTRIBUTE_TYPE_ICONS: Record<AttributeType, LucideIcon>;
91
+ declare function useAttributeTypeIcon(type: AttributeType): LucideIcon;
92
+ type AttributeTypeIconProps = Omit<LucideProps, 'ref'> & {
93
+ type: AttributeType;
94
+ };
95
+ declare function AttributeTypeIcon({ type, className, strokeWidth, ...props }: AttributeTypeIconProps): react_jsx_runtime.JSX.Element;
96
+
97
+ declare const avatarStyles: tailwind_variants.TVReturnType<{
98
+ size: {
99
+ sm: string;
100
+ md: string;
101
+ lg: string;
102
+ };
103
+ tone: {
104
+ paper: string;
105
+ indigo: string;
106
+ moss: string;
107
+ terra: string;
108
+ slate: string;
109
+ };
110
+ }, undefined, string[], {
111
+ size: {
112
+ sm: string;
113
+ md: string;
114
+ lg: string;
115
+ };
116
+ tone: {
117
+ paper: string;
118
+ indigo: string;
119
+ moss: string;
120
+ terra: string;
121
+ slate: string;
122
+ };
123
+ }, undefined, tailwind_variants.TVReturnType<{
124
+ size: {
125
+ sm: string;
126
+ md: string;
127
+ lg: string;
128
+ };
129
+ tone: {
130
+ paper: string;
131
+ indigo: string;
132
+ moss: string;
133
+ terra: string;
134
+ slate: string;
135
+ };
136
+ }, undefined, string[], unknown, unknown, undefined>>;
137
+ type AvatarVariants = VariantProps<typeof avatarStyles>;
138
+ type AvatarProps = HTMLAttributes<HTMLSpanElement> & AvatarVariants & {
139
+ /** 1–2 character initials. Ignored if `children` is provided. */
140
+ initials?: string;
141
+ };
142
+ declare function Avatar({ size, tone, initials, className, children, ...props }: AvatarProps): react_jsx_runtime.JSX.Element;
143
+
144
+ declare const avatarGroupStyles: tailwind_variants.TVReturnType<{
145
+ size: {
146
+ sm: string;
147
+ md: string;
148
+ lg: string;
149
+ };
150
+ }, undefined, "flex items-center", {
151
+ size: {
152
+ sm: string;
153
+ md: string;
154
+ lg: string;
155
+ };
156
+ }, undefined, tailwind_variants.TVReturnType<{
157
+ size: {
158
+ sm: string;
159
+ md: string;
160
+ lg: string;
161
+ };
162
+ }, undefined, "flex items-center", unknown, unknown, undefined>>;
163
+ type AvatarGroupVariants = VariantProps<typeof avatarGroupStyles>;
164
+ /** One person in the stack — initials plus an optional tone. */
165
+ interface AvatarGroupItem {
166
+ initials: string;
167
+ tone?: AvatarVariants['tone'];
168
+ /** Stable key (e.g. the participant's external id); falls back to the index. */
169
+ key?: string;
170
+ }
171
+ type AvatarGroupProps = Omit<HTMLAttributes<HTMLSpanElement>, 'children'> & AvatarGroupVariants & {
172
+ avatars: AvatarGroupItem[];
173
+ /** Max avatars shown before the rest collapse into a +N chip. Default 3. */
174
+ max?: number;
175
+ };
176
+ declare function AvatarGroup({ avatars, max, size, className, ...props }: AvatarGroupProps): react_jsx_runtime.JSX.Element;
177
+
178
+ declare const badgeStyles: tailwind_variants.TVReturnType<{
179
+ variant: {
180
+ default: string;
181
+ neutral: string;
182
+ active: string[];
183
+ success: string[];
184
+ warning: string[];
185
+ danger: string[];
186
+ };
187
+ }, undefined, string[], {
188
+ variant: {
189
+ default: string;
190
+ neutral: string;
191
+ active: string[];
192
+ success: string[];
193
+ warning: string[];
194
+ danger: string[];
195
+ };
196
+ }, undefined, tailwind_variants.TVReturnType<{
197
+ variant: {
198
+ default: string;
199
+ neutral: string;
200
+ active: string[];
201
+ success: string[];
202
+ warning: string[];
203
+ danger: string[];
204
+ };
205
+ }, undefined, string[], unknown, unknown, undefined>>;
206
+ type BadgeVariants = VariantProps<typeof badgeStyles>;
207
+ type BadgeProps = HTMLAttributes<HTMLSpanElement> & BadgeVariants;
208
+ declare function Badge({ variant, className, ...props }: BadgeProps): react_jsx_runtime.JSX.Element;
209
+
210
+ declare const fieldControlStyles: tailwind_variants.TVReturnType<{
211
+ size: {
212
+ sm: {
213
+ content: string;
214
+ };
215
+ md: {
216
+ content: string;
217
+ };
218
+ };
219
+ invalid: {
220
+ true: {
221
+ box: string;
222
+ };
223
+ false: {
224
+ box: string;
225
+ };
226
+ };
227
+ appearance: {
228
+ field: {};
229
+ cell: {
230
+ box: string;
231
+ content: string;
232
+ };
233
+ };
234
+ }, {
235
+ box: string[];
236
+ content: string;
237
+ }, undefined, {
238
+ size: {
239
+ sm: {
240
+ content: string;
241
+ };
242
+ md: {
243
+ content: string;
244
+ };
245
+ };
246
+ invalid: {
247
+ true: {
248
+ box: string;
249
+ };
250
+ false: {
251
+ box: string;
252
+ };
253
+ };
254
+ appearance: {
255
+ field: {};
256
+ cell: {
257
+ box: string;
258
+ content: string;
259
+ };
260
+ };
261
+ }, {
262
+ box: string[];
263
+ content: string;
264
+ }, tailwind_variants.TVReturnType<{
265
+ size: {
266
+ sm: {
267
+ content: string;
268
+ };
269
+ md: {
270
+ content: string;
271
+ };
272
+ };
273
+ invalid: {
274
+ true: {
275
+ box: string;
276
+ };
277
+ false: {
278
+ box: string;
279
+ };
280
+ };
281
+ appearance: {
282
+ field: {};
283
+ cell: {
284
+ box: string;
285
+ content: string;
286
+ };
287
+ };
288
+ }, {
289
+ box: string[];
290
+ content: string;
291
+ }, undefined, unknown, unknown, undefined>>;
292
+ type FieldControlVariants = VariantProps<typeof fieldControlStyles>;
293
+ type FieldSize = NonNullable<FieldControlVariants['size']>;
294
+ type FieldAppearance = NonNullable<FieldControlVariants['appearance']>;
295
+ declare const fieldLabelStyles = "font-mono text-[11px] uppercase tracking-[0.08em] text-ink-4";
296
+ declare const fieldHintStyles = "font-mono text-[11px] text-ink-4";
297
+ declare const fieldErrorStyles = "font-mono text-[11px] text-danger";
298
+ declare function FieldCaret(): react_jsx_runtime.JSX.Element;
299
+
300
+ type BadgeMultiSelectOption<T extends Key = Key> = {
301
+ id: T;
302
+ /** Text shown inside the badge. Used as the accessible name too. */
303
+ label: string;
304
+ /** Badge color register. Defaults to `default`. */
305
+ variant?: BadgeVariants['variant'];
306
+ isDisabled?: boolean;
307
+ };
308
+ type BadgeMultiSelectProps<T extends Key = Key> = {
309
+ label?: ReactNode;
310
+ description?: ReactNode;
311
+ errorMessage?: ReactNode;
312
+ placeholder?: string;
313
+ options: ReadonlyArray<BadgeMultiSelectOption<T>>;
314
+ /** Controlled selection. Pass a `Set<T>` or any `Iterable<T>`. */
315
+ selectedKeys: Iterable<T>;
316
+ onSelectionChange: (keys: Set<T>) => void;
317
+ isDisabled?: boolean;
318
+ isInvalid?: boolean;
319
+ /** Hide already-selected options from the dropdown. Removal then only
320
+ * happens via the chip × in the trigger. Default `false` (selected
321
+ * options stay visible and can be toggled from the listbox). */
322
+ hideSelectedOptions?: boolean;
323
+ /** Field size. Defaults to `md`. */
324
+ size?: FieldSize;
325
+ /** Chrome variant. Defaults to `field`. `cell` flattens the box. */
326
+ appearance?: FieldAppearance;
327
+ /** Focus the trigger on mount. Mirrors RAC's `autoFocus` prop on native
328
+ * inputs; useful for keyboard chains where the trigger should take focus
329
+ * when its surrounding context becomes ready. */
330
+ autoFocus?: boolean;
331
+ className?: string;
332
+ };
333
+ declare function BadgeMultiSelect<T extends Key>({ label, description, errorMessage, placeholder, options, selectedKeys, onSelectionChange, isDisabled, isInvalid, hideSelectedOptions, size, appearance, autoFocus, className, }: BadgeMultiSelectProps<T>): react_jsx_runtime.JSX.Element;
334
+
335
+ type BreadcrumbItem = {
336
+ /** Stable key for the row. */
337
+ id: string | number;
338
+ /** Display label. */
339
+ label: ReactNode;
340
+ /** Optional href. Omit (or leave the last item without one) to render the
341
+ * current page as plain text. */
342
+ href?: string;
343
+ };
344
+ type BreadcrumbsProps = Omit<BreadcrumbsProps$1<never>, 'children' | 'items'> & {
345
+ items: ReadonlyArray<BreadcrumbItem>;
346
+ /** Glyph between crumbs. Default `/`. */
347
+ separator?: ReactNode;
348
+ };
349
+ declare function Breadcrumbs({ items, separator, className, ...props }: BreadcrumbsProps): react_jsx_runtime.JSX.Element;
350
+
351
+ declare const buttonStyles: tailwind_variants.TVReturnType<{
352
+ variant: {
353
+ primary: string[];
354
+ accent: string[];
355
+ secondary: string[];
356
+ ghost: string[];
357
+ subtle: string[];
358
+ link: string[];
359
+ };
360
+ size: {
361
+ sm: string;
362
+ md: string;
363
+ lg: string;
364
+ 'icon-sm': string;
365
+ 'icon-md': string;
366
+ 'icon-lg': string;
367
+ };
368
+ shape: {
369
+ rounded: string;
370
+ pill: string;
371
+ };
372
+ }, undefined, string[], {
373
+ variant: {
374
+ primary: string[];
375
+ accent: string[];
376
+ secondary: string[];
377
+ ghost: string[];
378
+ subtle: string[];
379
+ link: string[];
380
+ };
381
+ size: {
382
+ sm: string;
383
+ md: string;
384
+ lg: string;
385
+ 'icon-sm': string;
386
+ 'icon-md': string;
387
+ 'icon-lg': string;
388
+ };
389
+ shape: {
390
+ rounded: string;
391
+ pill: string;
392
+ };
393
+ }, undefined, tailwind_variants.TVReturnType<{
394
+ variant: {
395
+ primary: string[];
396
+ accent: string[];
397
+ secondary: string[];
398
+ ghost: string[];
399
+ subtle: string[];
400
+ link: string[];
401
+ };
402
+ size: {
403
+ sm: string;
404
+ md: string;
405
+ lg: string;
406
+ 'icon-sm': string;
407
+ 'icon-md': string;
408
+ 'icon-lg': string;
409
+ };
410
+ shape: {
411
+ rounded: string;
412
+ pill: string;
413
+ };
414
+ }, undefined, string[], unknown, unknown, undefined>>;
415
+ type ButtonVariants = VariantProps<typeof buttonStyles>;
416
+ type ButtonProps = ButtonProps$1 & ButtonVariants;
417
+ declare function Button({ variant, size, shape, className, ...props }: ButtonProps): react_jsx_runtime.JSX.Element;
418
+
419
+ declare const cardStyles: tailwind_variants.TVReturnType<{
420
+ variant: {
421
+ default: string;
422
+ accent: string[];
423
+ outline: string;
424
+ raised: string;
425
+ };
426
+ }, undefined, string[], {
427
+ variant: {
428
+ default: string;
429
+ accent: string[];
430
+ outline: string;
431
+ raised: string;
432
+ };
433
+ }, undefined, tailwind_variants.TVReturnType<{
434
+ variant: {
435
+ default: string;
436
+ accent: string[];
437
+ outline: string;
438
+ raised: string;
439
+ };
440
+ }, undefined, string[], unknown, unknown, undefined>>;
441
+ type CardVariants = VariantProps<typeof cardStyles>;
442
+ type CardProps = HTMLAttributes<HTMLDivElement> & CardVariants;
443
+ declare function Card({ variant, className, ...props }: CardProps): react_jsx_runtime.JSX.Element;
444
+ type PressableCardProps = ButtonProps$1 & CardVariants;
445
+ declare function PressableCard({ variant, className, ...props }: PressableCardProps): react_jsx_runtime.JSX.Element;
446
+ /**
447
+ * Flush, full-bleed strip at the top of a Card.
448
+ * Sand-tinted surface, uppercase mono, anchors a record identifier / status.
449
+ * The strip bleeds to the card edges because the Card has no padding.
450
+ */
451
+ declare function CardHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
452
+ /**
453
+ * Padded content block. This is where inline slots (CardEyebrow, CardTitle,
454
+ * CardBody) must live — they do not carry their own padding. Repeatable for
455
+ * multi-section layouts; separate sections with a `<hr class="border-rule"/>`.
456
+ */
457
+ declare function CardContent({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
458
+ /**
459
+ * Footer anchored to the bottom of the card via `mt-auto`. Place a
460
+ * `<Separator />` above it when you want the dashed divider.
461
+ * Mono meta-sized text. Typically holds counts + a trailing arrow / action.
462
+ */
463
+ declare function CardFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
464
+ declare function CardEyebrow({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
465
+ declare function CardTitle({ className, ...props }: HTMLAttributes<HTMLHeadingElement>): react_jsx_runtime.JSX.Element;
466
+ declare function CardFeatureTitle({ className, ...props }: HTMLAttributes<HTMLHeadingElement>): react_jsx_runtime.JSX.Element;
467
+ declare function CardBody({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
468
+
469
+ type CheckboxProps = Omit<CheckboxProps$1, 'children'> & {
470
+ children?: ReactNode;
471
+ };
472
+ declare function Checkbox({ children, className, ...props }: CheckboxProps): react_jsx_runtime.JSX.Element;
473
+
474
+ type CheckboxGroupProps = Omit<CheckboxGroupProps$1, 'children'> & {
475
+ label?: ReactNode;
476
+ description?: ReactNode;
477
+ errorMessage?: ReactNode;
478
+ /** `<Checkbox value="…">` elements. Function-as-children is not supported at the group level. */
479
+ children: ReactNode;
480
+ };
481
+ declare function CheckboxGroup({ label, description, errorMessage, children, className, ...props }: CheckboxGroupProps): react_jsx_runtime.JSX.Element;
482
+
483
+ type ComboboxOption<T extends Key = Key> = {
484
+ id: T;
485
+ label: string;
486
+ description?: ReactNode;
487
+ isDisabled?: boolean;
488
+ /**
489
+ * Per-row action UI rendered at the trailing edge of the option. Hidden
490
+ * by default; revealed when the row is hovered or keyboard-focused. The
491
+ * slot intercepts `pointerdown` / `click` propagation so interactions
492
+ * inside it don't trigger option selection — put a real `<button>` /
493
+ * `<Link>` here and it Just Works.
494
+ */
495
+ trailing?: ReactNode;
496
+ };
497
+ type ComboboxProps<T extends Key = Key> = Omit<ComboBoxProps<never>, 'children' | 'items' | 'defaultItems'> & {
498
+ label?: ReactNode;
499
+ description?: ReactNode;
500
+ errorMessage?: ReactNode;
501
+ placeholder?: string;
502
+ options: ReadonlyArray<ComboboxOption<T>>;
503
+ /** Field size. Defaults to `md`. */
504
+ size?: FieldSize;
505
+ /** Chrome variant. Defaults to `field`. `cell` flattens the box. */
506
+ appearance?: FieldAppearance;
507
+ /** Visual override for the trigger input wrapper only. */
508
+ inputWrapperClassName?: string;
509
+ /** Visual override for the inner `<input>` (size, padding, font). */
510
+ inputClassName?: string;
511
+ /** Empty-state message shown in the popover when no options match. */
512
+ emptyMessage?: ReactNode;
513
+ };
514
+ declare function Combobox<T extends Key>({ label, description, errorMessage, placeholder, options, size, appearance, inputWrapperClassName, inputClassName, emptyMessage, className, allowsEmptyCollection, ...props }: ComboboxProps<T>): react_jsx_runtime.JSX.Element;
515
+
516
+ type CommandProps = {
517
+ combo: string;
518
+ /** CSS selector for the click target. Defaults to the wrapper's first
519
+ * element child — fine when that child IS the interactive control. */
520
+ target?: string;
521
+ /** Layout overrides for the wrapper. `relative` is always applied. */
522
+ className?: string;
523
+ children: ReactNode;
524
+ };
525
+ declare function Command({ combo, target, className, children }: CommandProps): react_jsx_runtime.JSX.Element;
526
+
527
+ type CommandHintTone = 'subtle' | 'prominent';
528
+ type CommandHintProps = {
529
+ combo: string;
530
+ tone?: CommandHintTone;
531
+ className?: string;
532
+ };
533
+ declare function CommandHint({ combo, tone, className }: CommandHintProps): react_jsx_runtime.JSX.Element;
534
+
535
+ type KeyCombo = {
536
+ /** Normalized form for registry keying. Always `mod+<key>`. */
537
+ raw: string;
538
+ /** Key part, lowercased. Letters use `event.code` (`KeyS`); others match `event.key`. */
539
+ key: string;
540
+ /** True when `key` is a single A–Z letter — match against `event.code` so the
541
+ * binding stays on the physical key regardless of keyboard layout. */
542
+ isLetter: boolean;
543
+ };
544
+ declare function parseCombo(input: string): KeyCombo;
545
+
546
+ declare const PROTECTED_COMBOS: ReadonlySet<string>;
547
+
548
+ declare function isEditableTarget(target: EventTarget | null): boolean;
549
+
550
+ type UseCommandOptions = {
551
+ /** Defaults to `true`. Set to `false` to temporarily disable without unmounting. */
552
+ enabled?: boolean;
553
+ };
554
+ declare function useCommand(combo: string, handler: (event: KeyboardEvent) => void, options?: UseCommandOptions): void;
555
+
556
+ type UseEscapeKeyOptions = {
557
+ /** Defaults to `true`. Set to `false` to temporarily disable without unmounting. */
558
+ enabled?: boolean;
559
+ };
560
+ declare function useEscapeKey(handler: (event: KeyboardEvent) => void, options?: UseEscapeKeyOptions): void;
561
+
562
+ declare function useDiscoveryActive(): boolean;
563
+
564
+ interface CurrencyInputValue {
565
+ amount: string;
566
+ currency_code: string;
567
+ }
568
+ interface CurrencyInputOption {
569
+ code: string;
570
+ /** The currency's symbol (e.g. "$", "€"); falls back to the code. */
571
+ symbol?: string;
572
+ }
573
+ interface CurrencyInputProps {
574
+ value: CurrencyInputValue | null;
575
+ onChange: (next: CurrencyInputValue | null) => void;
576
+ currencyOptions: ReadonlyArray<CurrencyInputOption>;
577
+ /** Locale for the amount's grouping + decimal separators. Defaults to runtime. */
578
+ locale?: string;
579
+ isReadOnly?: boolean;
580
+ isInvalid?: boolean;
581
+ errorMessage?: ReactNode;
582
+ size?: FieldSize;
583
+ appearance?: FieldAppearance;
584
+ placeholder?: string;
585
+ autoFocus?: boolean;
586
+ 'aria-label'?: string;
587
+ onBlur?: () => void;
588
+ className?: string;
589
+ }
590
+ declare function CurrencyInput({ value, onChange, currencyOptions, locale, isReadOnly, isInvalid, errorMessage, size, appearance, placeholder, autoFocus, 'aria-label': ariaLabel, onBlur, className, }: CurrencyInputProps): react_jsx_runtime.JSX.Element;
591
+
592
+ type DateCellProps = {
593
+ value: string | number | Date | null | undefined;
594
+ locale?: string;
595
+ options?: Intl.DateTimeFormatOptions;
596
+ fallback?: ReactNode;
597
+ className?: string;
598
+ };
599
+ declare function DateCell({ value, locale, options, fallback, className, }: DateCellProps): react_jsx_runtime.JSX.Element;
600
+ type DateTimeCellProps = DateCellProps;
601
+ declare function DateTimeCell({ value, locale, options, fallback, className, }: DateTimeCellProps): react_jsx_runtime.JSX.Element;
602
+ type BooleanCellProps = {
603
+ value: boolean | null | undefined;
604
+ className?: string;
605
+ };
606
+ declare function BooleanCell({ value, className }: BooleanCellProps): react_jsx_runtime.JSX.Element;
607
+ type TruncateCellProps = {
608
+ value: ReactNode;
609
+ title?: string;
610
+ className?: string;
611
+ };
612
+ /**
613
+ * The parent TableCell already clips with `overflow-hidden text-ellipsis`,
614
+ * so this just adds a `title` attribute for the native tooltip when the
615
+ * value is a string.
616
+ */
617
+ declare function TruncateCell({ value, title, className }: TruncateCellProps): react_jsx_runtime.JSX.Element;
618
+ type LinkCellProps = AnchorHTMLAttributes<HTMLAnchorElement> & {
619
+ children: ReactNode;
620
+ };
621
+ /**
622
+ * An anchor that stops click propagation so a row-click handler on the
623
+ * parent <TableRow> doesn't fire alongside the link navigation.
624
+ */
625
+ declare function LinkCell({ children, onClick, className, ...props }: LinkCellProps): react_jsx_runtime.JSX.Element;
626
+
627
+ declare const tableStyles: tailwind_variants.TVReturnType<{
628
+ variant: {
629
+ panel: string[];
630
+ bare: string;
631
+ };
632
+ }, undefined, string[], {
633
+ variant: {
634
+ panel: string[];
635
+ bare: string;
636
+ };
637
+ }, undefined, tailwind_variants.TVReturnType<{
638
+ variant: {
639
+ panel: string[];
640
+ bare: string;
641
+ };
642
+ }, undefined, string[], unknown, unknown, undefined>>;
643
+ type TableVariants = VariantProps<typeof tableStyles>;
644
+ type TableProps = HTMLAttributes<HTMLDivElement> & TableVariants & {
645
+ 'aria-label'?: string;
646
+ };
647
+ declare function Table({ variant, className, ...props }: TableProps): react_jsx_runtime.JSX.Element;
648
+ type TableHeaderProps = HTMLAttributes<HTMLDivElement> & {
649
+ sticky?: boolean;
650
+ };
651
+ declare function TableHeader({ sticky, className, ...props }: TableHeaderProps): react_jsx_runtime.JSX.Element;
652
+ declare const tableHeaderCellStyles: tailwind_variants.TVReturnType<{
653
+ align: {
654
+ left: string;
655
+ right: string;
656
+ center: string;
657
+ };
658
+ interactive: {
659
+ true: string[];
660
+ false: string;
661
+ };
662
+ active: {
663
+ true: string;
664
+ false: string;
665
+ };
666
+ sticky: {
667
+ left: string;
668
+ right: string;
669
+ false: string;
670
+ };
671
+ }, undefined, string[], {
672
+ align: {
673
+ left: string;
674
+ right: string;
675
+ center: string;
676
+ };
677
+ interactive: {
678
+ true: string[];
679
+ false: string;
680
+ };
681
+ active: {
682
+ true: string;
683
+ false: string;
684
+ };
685
+ sticky: {
686
+ left: string;
687
+ right: string;
688
+ false: string;
689
+ };
690
+ }, undefined, tailwind_variants.TVReturnType<{
691
+ align: {
692
+ left: string;
693
+ right: string;
694
+ center: string;
695
+ };
696
+ interactive: {
697
+ true: string[];
698
+ false: string;
699
+ };
700
+ active: {
701
+ true: string;
702
+ false: string;
703
+ };
704
+ sticky: {
705
+ left: string;
706
+ right: string;
707
+ false: string;
708
+ };
709
+ }, undefined, string[], unknown, unknown, undefined>>;
710
+ type SortDirection = 'asc' | 'desc' | null;
711
+ /** Discriminator stored on every column drag payload. */
712
+ declare const COLUMN_DRAG_KIND: "proteos:table:column";
713
+ type ColumnDragData = {
714
+ kind: typeof COLUMN_DRAG_KIND;
715
+ columnId: string;
716
+ };
717
+ declare function isColumnDragData(data: Record<string | symbol, unknown>): data is ColumnDragData & Record<string | symbol, unknown>;
718
+ type TableHeaderCellProps = Omit<HTMLAttributes<HTMLDivElement>, 'onClick'> & {
719
+ width?: number | string;
720
+ align?: 'left' | 'right' | 'center';
721
+ /** Pin the cell to the left or right edge during horizontal scroll. */
722
+ sticky?: 'left' | 'right' | false;
723
+ /**
724
+ * When non-null, renders a sort affordance and treats clicks on the cell
725
+ * body as a sort toggle. `null` (the default) is "not sortable".
726
+ */
727
+ sortDirection?: SortDirection;
728
+ onSortToggle?: () => void;
729
+ /**
730
+ * Make the header draggable for column reorder. Requires `columnId`.
731
+ * The cell registers pragmatic-dnd `draggable` + `dropTargetForElements`
732
+ * with left/right edge detection; the actual reorder runs in a global
733
+ * `monitorForElements` (e.g. inside DataTable) by reading the published
734
+ * `ColumnDragData`.
735
+ */
736
+ draggable?: boolean;
737
+ columnId?: string;
738
+ /**
739
+ * When provided, renders a trailing `×` button. Click events
740
+ * `stopPropagation` so removal never starts a drag or toggles sort.
741
+ */
742
+ onRemove?: () => void;
743
+ /** Aria label fragment used in the remove button label and any drag a11y. */
744
+ ariaLabel?: string;
745
+ };
746
+ declare function TableHeaderCell({ width, align, className, style, children, sortDirection, onSortToggle, draggable: isDraggable, columnId, onRemove, ariaLabel, sticky, ...rest }: TableHeaderCellProps): react_jsx_runtime.JSX.Element;
747
+ /**
748
+ * Trailing flexible spacer so the header row fills the full row width when
749
+ * the sum of column widths is less than the viewport. Matches the design's
750
+ * `pt-th--spacer`.
751
+ */
752
+ declare function TableHeaderSpacer({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
753
+ type TableBodyProps = HTMLAttributes<HTMLDivElement> & {
754
+ ref?: Ref<HTMLDivElement>;
755
+ };
756
+ declare function TableBody({ className, ref, ...props }: TableBodyProps): react_jsx_runtime.JSX.Element;
757
+ declare function TableScroller({ className, ref, ...props }: TableBodyProps): react_jsx_runtime.JSX.Element;
758
+ type TableRowProps = HTMLAttributes<HTMLDivElement> & {
759
+ alt?: boolean;
760
+ interactive?: boolean;
761
+ /**
762
+ * Position the row absolutely (used by virtualizers that translate rows
763
+ * into place via inline `style.transform`).
764
+ */
765
+ absolute?: boolean;
766
+ onRowClick?: (e: MouseEvent<HTMLDivElement>) => void;
767
+ };
768
+ declare function TableRow({ alt, interactive, absolute, className, onRowClick, onClick, ...props }: TableRowProps): react_jsx_runtime.JSX.Element;
769
+ declare const tableCellStyles: tailwind_variants.TVReturnType<{
770
+ align: {
771
+ left: string;
772
+ right: string;
773
+ center: string;
774
+ };
775
+ mono: {
776
+ true: string;
777
+ false: string;
778
+ };
779
+ ink: {
780
+ true: string;
781
+ false: string;
782
+ };
783
+ sticky: {
784
+ left: string;
785
+ right: string;
786
+ false: string;
787
+ };
788
+ }, undefined, string[], {
789
+ align: {
790
+ left: string;
791
+ right: string;
792
+ center: string;
793
+ };
794
+ mono: {
795
+ true: string;
796
+ false: string;
797
+ };
798
+ ink: {
799
+ true: string;
800
+ false: string;
801
+ };
802
+ sticky: {
803
+ left: string;
804
+ right: string;
805
+ false: string;
806
+ };
807
+ }, undefined, tailwind_variants.TVReturnType<{
808
+ align: {
809
+ left: string;
810
+ right: string;
811
+ center: string;
812
+ };
813
+ mono: {
814
+ true: string;
815
+ false: string;
816
+ };
817
+ ink: {
818
+ true: string;
819
+ false: string;
820
+ };
821
+ sticky: {
822
+ left: string;
823
+ right: string;
824
+ false: string;
825
+ };
826
+ }, undefined, string[], unknown, unknown, undefined>>;
827
+ type TableCellProps = HTMLAttributes<HTMLDivElement> & {
828
+ width?: number | string;
829
+ align?: 'left' | 'right' | 'center';
830
+ mono?: boolean;
831
+ ink?: boolean;
832
+ /** Pin the cell to the left or right edge during horizontal scroll. */
833
+ sticky?: 'left' | 'right' | false;
834
+ };
835
+ declare function TableCell({ width, align, mono, ink, sticky, className, style, ...props }: TableCellProps): react_jsx_runtime.JSX.Element;
836
+
837
+ type InfinitePage<TRow> = {
838
+ data: TRow[];
839
+ meta?: {
840
+ items_total?: number;
841
+ };
842
+ };
843
+ type InfiniteQueryLike<TRow> = {
844
+ data?: {
845
+ pages: InfinitePage<TRow>[];
846
+ } | undefined;
847
+ isLoading: boolean;
848
+ isFetchingNextPage: boolean;
849
+ hasNextPage: boolean | undefined;
850
+ error: Error | null;
851
+ fetchNextPage: () => void;
852
+ refetch?: () => void;
853
+ };
854
+ type DataTableProps<TRow> = {
855
+ query: InfiniteQueryLike<TRow>;
856
+ columns: ColumnDef<TRow>[];
857
+ sorting?: SortingState;
858
+ onSortingChange?: OnChangeFn<SortingState>;
859
+ rowHeight?: number;
860
+ overscan?: number;
861
+ /**
862
+ * Called when a row is clicked. Provides both the original data row and
863
+ * the underlying event so consumers can inspect modifier keys.
864
+ */
865
+ onRowClick?: (row: TRow, event: MouseEvent<HTMLDivElement> | KeyboardEvent$1<HTMLDivElement>) => void;
866
+ zebra?: boolean;
867
+ emptyState?: ReactNode;
868
+ errorState?: ReactNode;
869
+ loadingState?: ReactNode;
870
+ /**
871
+ * Optional accessor used as the React key for each row. Defaults to a
872
+ * row's `id` field (if present), then `slug`, then index.
873
+ */
874
+ getRowId?: (row: TRow, index: number) => string;
875
+ className?: string;
876
+ ariaLabel?: string;
877
+ /**
878
+ * Enable horizontal drag-and-drop reordering of columns. When on, a grip
879
+ * handle and `monitorForElements` are wired up; on a successful reorder
880
+ * `onReorderColumn` fires with the moved column's id and its new index.
881
+ * Each `ColumnDef` must carry a stable `id` for events to be routable.
882
+ */
883
+ enableColumnReordering?: boolean;
884
+ /**
885
+ * Enable an `×` remove affordance on each column header. The handler is
886
+ * called with the column's id; the parent decides what removal means
887
+ * (e.g. filter the displayed `columns` array).
888
+ */
889
+ enableColumnRemoval?: boolean;
890
+ onReorderColumn?: (params: {
891
+ id: string;
892
+ toIndex: number;
893
+ }) => void;
894
+ onRemoveColumn?: (id: string) => void;
895
+ /**
896
+ * Visual chrome around the table. `panel` (default) wraps the table in a
897
+ * bordered, rounded, soft-shadowed card. `bare` strips that chrome so the
898
+ * table can sit flush with its container — used when the surrounding
899
+ * surface already supplies borders (e.g. the Query Builder's results pane).
900
+ */
901
+ variant?: TableVariants['variant'];
902
+ /**
903
+ * Optional per-row wrapper. When provided, the row's cell content is
904
+ * passed through this function, which may render context providers (e.g.
905
+ * a row-scoped TanStack Form for inline editing) around the cells. The
906
+ * default is identity — cells render directly inside the `<TableRow>`.
907
+ */
908
+ rowWrapper?: (row: Row<TRow>, cells: ReactNode) => ReactNode;
909
+ /**
910
+ * Extra rows rendered alongside the server data. Used for inline-editable
911
+ * draft rows that are not yet persisted. `start` rows render above the
912
+ * server data, `end` rows below. They participate in the same column
913
+ * model, virtualization, and `rowWrapper` as server rows.
914
+ */
915
+ extraRows?: {
916
+ start?: TRow[];
917
+ end?: TRow[];
918
+ };
919
+ /**
920
+ * Slot rendered ABOVE the body (above the virtualized region). Used for
921
+ * controls like an Add row button at slot='start'. Stays put when the
922
+ * body scrolls (sits inside the header sticky region or just below it).
923
+ */
924
+ bodyBefore?: ReactNode;
925
+ /**
926
+ * Slot rendered BELOW the body. Used for controls like an Add row button
927
+ * at slot='end'. Sits inside the scrollable area below the rows.
928
+ */
929
+ bodyAfter?: ReactNode;
930
+ /**
931
+ * Draw vertical gridlines between body cells. The header always has them;
932
+ * the body opts in (e.g. inline-edit mode wants the full Excel-style grid).
933
+ * Default false — read-only tables stay borderless in the body.
934
+ */
935
+ columnBorders?: boolean;
936
+ };
937
+ declare function DataTable<TRow>({ query, columns, sorting, onSortingChange, rowHeight, overscan, onRowClick, zebra, emptyState, errorState, loadingState, getRowId, className, ariaLabel, enableColumnReordering, enableColumnRemoval, onReorderColumn, onRemoveColumn, variant, rowWrapper, extraRows, bodyBefore, bodyAfter, columnBorders, }: DataTableProps<TRow>): react_jsx_runtime.JSX.Element;
938
+
939
+ type ActionsColumnOptions<TData> = {
940
+ id?: string;
941
+ header?: string;
942
+ width?: number;
943
+ cell: (row: TData) => ReactNode;
944
+ };
945
+ /**
946
+ * Convenience builder for a non-sortable, right-aligned actions column.
947
+ * Carries `meta.align: 'right'` so DataTable renders the header/cell
948
+ * end-aligned even though the column has no value to sort by.
949
+ */
950
+ declare function makeActionsColumn<TData>({ id, header, width, cell, }: ActionsColumnOptions<TData>): ColumnDef<TData>;
951
+
952
+ type DataTableEmptyProps = {
953
+ title?: string;
954
+ message?: string;
955
+ icon?: ReactNode;
956
+ action?: ReactNode;
957
+ className?: string;
958
+ };
959
+ /**
960
+ * Empty state shown when the query returns zero rows.
961
+ * Mirrors the design's `pt-empty` block.
962
+ */
963
+ declare function DataTableEmpty({ title, message, icon, action, className, }: DataTableEmptyProps): react_jsx_runtime.JSX.Element;
964
+
965
+ type DataTableErrorProps = {
966
+ error: Error;
967
+ onRetry?: () => void;
968
+ className?: string;
969
+ };
970
+ declare function DataTableError({ error, onRetry, className }: DataTableErrorProps): react_jsx_runtime.JSX.Element;
971
+
972
+ type DataTableSkeletonProps = {
973
+ rows?: number;
974
+ columnWidths?: ReadonlyArray<number | string>;
975
+ rowHeight?: number;
976
+ };
977
+ /**
978
+ * Skeleton placeholder shown while the first page is loading.
979
+ * Renders inside the same TableBody scroller, so the layout doesn't jump
980
+ * when real rows replace it.
981
+ */
982
+ declare function DataTableSkeleton({ rows, columnWidths, rowHeight, }: DataTableSkeletonProps): react_jsx_runtime.JSX.Element;
983
+
984
+ type UseInfiniteScrollSentinelOptions = {
985
+ onIntersect: () => void;
986
+ /**
987
+ * IntersectionObserver `rootMargin`. Default `200px` so the next page
988
+ * starts fetching before the user scrolls all the way to the bottom.
989
+ */
990
+ rootMargin?: string;
991
+ /**
992
+ * Optional scroll-container ref (passed as the observer's `root`). When
993
+ * omitted, the observer uses the viewport.
994
+ */
995
+ root?: Element | null;
996
+ enabled?: boolean;
997
+ };
998
+ /**
999
+ * Mounts a sentinel element ref. When the element scrolls into view (with
1000
+ * the given rootMargin), `onIntersect` fires once per visible streak.
1001
+ * Used by DataTable to drive `query.fetchNextPage()`.
1002
+ */
1003
+ declare function useInfiniteScrollSentinel<T extends Element = HTMLDivElement>({ onIntersect, rootMargin, root, enabled, }: UseInfiniteScrollSentinelOptions): RefObject<T | null>;
1004
+
1005
+ type DatePickerProps<T extends DateValue> = DatePickerProps$1<T> & {
1006
+ label?: ReactNode;
1007
+ description?: ReactNode;
1008
+ errorMessage?: ReactNode;
1009
+ /** Field size. Defaults to `md`. */
1010
+ size?: FieldSize;
1011
+ /** Chrome variant. Defaults to `field`. `cell` flattens the box. */
1012
+ appearance?: FieldAppearance;
1013
+ };
1014
+ declare function DatePicker<T extends DateValue>({ label, description, errorMessage, size, appearance, className, ...props }: DatePickerProps<T>): react_jsx_runtime.JSX.Element;
1015
+
1016
+ type DateTimePickerProps<T extends DateValue> = DatePickerProps$1<T> & {
1017
+ label?: ReactNode;
1018
+ description?: ReactNode;
1019
+ errorMessage?: ReactNode;
1020
+ /** Field size. Defaults to `md`. */
1021
+ size?: FieldSize;
1022
+ /** Chrome variant. Defaults to `field`. `cell` flattens the box. */
1023
+ appearance?: FieldAppearance;
1024
+ };
1025
+ declare function DateTimePicker<T extends DateValue>({ label, description, errorMessage, size, appearance, className, granularity, hideTimeZone, shouldCloseOnSelect, ...props }: DateTimePickerProps<T>): react_jsx_runtime.JSX.Element;
1026
+
1027
+ declare const emptyStateStyles: tailwind_variants.TVReturnType<{
1028
+ size: {
1029
+ sm: {
1030
+ root: string;
1031
+ art: string;
1032
+ };
1033
+ md: {
1034
+ root: string;
1035
+ art: string;
1036
+ };
1037
+ };
1038
+ }, {
1039
+ root: string;
1040
+ art: string;
1041
+ title: string;
1042
+ description: string;
1043
+ actions: string;
1044
+ }, undefined, {
1045
+ size: {
1046
+ sm: {
1047
+ root: string;
1048
+ art: string;
1049
+ };
1050
+ md: {
1051
+ root: string;
1052
+ art: string;
1053
+ };
1054
+ };
1055
+ }, {
1056
+ root: string;
1057
+ art: string;
1058
+ title: string;
1059
+ description: string;
1060
+ actions: string;
1061
+ }, tailwind_variants.TVReturnType<{
1062
+ size: {
1063
+ sm: {
1064
+ root: string;
1065
+ art: string;
1066
+ };
1067
+ md: {
1068
+ root: string;
1069
+ art: string;
1070
+ };
1071
+ };
1072
+ }, {
1073
+ root: string;
1074
+ art: string;
1075
+ title: string;
1076
+ description: string;
1077
+ actions: string;
1078
+ }, undefined, unknown, unknown, undefined>>;
1079
+ type EmptyStateVariants = VariantProps<typeof emptyStateStyles>;
1080
+ interface EmptyStateProps extends EmptyStateVariants {
1081
+ icon?: ReactNode;
1082
+ title: ReactNode;
1083
+ description?: ReactNode;
1084
+ action?: ReactNode;
1085
+ className?: string;
1086
+ }
1087
+ declare function EmptyState({ icon, title, description, action, size, className, }: EmptyStateProps): react_jsx_runtime.JSX.Element;
1088
+
1089
+ type ErrorAnimationProps = {
1090
+ className?: string;
1091
+ };
1092
+ declare function ErrorAnimation({ className }: ErrorAnimationProps): react_jsx_runtime.JSX.Element;
1093
+
1094
+ interface FileFieldValue {
1095
+ /** Filename shown as the label. */
1096
+ name: string;
1097
+ /** Size in bytes — rendered when known (resolved from storage on read). */
1098
+ sizeInBytes?: number;
1099
+ /** MIME type — picks the file-type icon when known. */
1100
+ contentType?: string;
1101
+ }
1102
+ interface FileFieldProps {
1103
+ /** The attached file, or null/undefined when empty. */
1104
+ value?: FileFieldValue | null;
1105
+ /** True while an upload is in flight — shows a spinner, blocks re-pick. */
1106
+ isUploading?: boolean;
1107
+ /** Read-only: no picker, no delete — download still works. */
1108
+ isReadOnly?: boolean;
1109
+ /** Restrict the native picker (e.g. `['image/*', '.pdf']`). */
1110
+ acceptedFileTypes?: string[];
1111
+ /** Called with the picked/dropped File. */
1112
+ onSelectFile?: (file: File) => void;
1113
+ /** Called when the filled card is clicked. */
1114
+ onDownload?: () => void;
1115
+ /** Called after the user confirms removal in the (x) popover. */
1116
+ onDelete?: () => void;
1117
+ /** Inline validation message (edit surface). */
1118
+ errorMessage?: string;
1119
+ /** True iff the field is touched and currently invalid. */
1120
+ isInvalid?: boolean;
1121
+ className?: string;
1122
+ }
1123
+ /** Maps a MIME type to a file-type glyph. Falls back to a generic file. */
1124
+ declare function iconForContentType(contentType?: string): LucideIcon;
1125
+ /** Human-readable byte size (1 KB = 1024 B). */
1126
+ declare function formatFileSize(bytes: number | undefined): string;
1127
+ declare function FileField({ value, isUploading, isReadOnly, acceptedFileTypes, onSelectFile, onDownload, onDelete, errorMessage, isInvalid, className, }: FileFieldProps): react_jsx_runtime.JSX.Element;
1128
+
1129
+ declare const fileViewerFallbackCardStyles: tailwind_variants.TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, tailwind_variants.TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
1130
+ type FileViewerFallbackCardVariants = VariantProps<typeof fileViewerFallbackCardStyles>;
1131
+ interface FileViewerFallbackCardProps {
1132
+ name: string;
1133
+ contentType?: string;
1134
+ sizeInBytes?: number;
1135
+ /** Why the preview is unavailable (e.g. "Too large to preview"). */
1136
+ note?: string;
1137
+ /** Load failure — rendered in the danger tone, wins over `note`. */
1138
+ errorMessage?: string;
1139
+ onDownload?: () => void;
1140
+ className?: string;
1141
+ }
1142
+ declare function FileViewerFallbackCard({ name, contentType, sizeInBytes, note, errorMessage, onDownload, className, }: FileViewerFallbackCardProps): react_jsx_runtime.JSX.Element;
1143
+
1144
+ declare const fileViewerStyles: tailwind_variants.TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, tailwind_variants.TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
1145
+ type FileViewerVariants = VariantProps<typeof fileViewerStyles>;
1146
+ /** Which renderer a content type maps to (`none` → fallback card). */
1147
+ type FileViewerKind = 'image' | 'video' | 'pdf' | 'none';
1148
+ /**
1149
+ * Maps a MIME type to the viewer that can render it inline. Consumers use
1150
+ * this to decide whether fetching the bytes is worthwhile at all.
1151
+ */
1152
+ declare function viewerKindForContentType(contentType?: string): FileViewerKind;
1153
+ interface FileViewerProps {
1154
+ /** Filename — labels, alt text and the fallback card. */
1155
+ name: string;
1156
+ /** MIME type; unknown/unpreviewable types render the fallback card. */
1157
+ contentType?: string;
1158
+ /** Blob object URL of the file bytes. While undefined (and previewable), the skeleton renders. */
1159
+ src?: string;
1160
+ /** Size in bytes — shown on the fallback card when known. */
1161
+ sizeInBytes?: number;
1162
+ /** Viewer height in px for previewable files (the fallback card keeps its natural height). */
1163
+ heightPx?: number;
1164
+ /** Error loading the file — renders the fallback card with the message. */
1165
+ errorMessage?: string;
1166
+ /** File too large for inline preview — renders the fallback card. */
1167
+ isOversized?: boolean;
1168
+ /** When set, download actions render (card button, lightbox, PDF toolbar). */
1169
+ onDownload?: () => void;
1170
+ className?: string;
1171
+ }
1172
+ declare function FileViewer({ name, contentType, src, sizeInBytes, heightPx, errorMessage, isOversized, onDownload, className, }: FileViewerProps): react_jsx_runtime.JSX.Element;
1173
+
1174
+ declare const imageAttachmentStyles: tailwind_variants.TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, tailwind_variants.TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
1175
+ type ImageAttachmentVariants = VariantProps<typeof imageAttachmentStyles>;
1176
+ interface ImageAttachmentProps {
1177
+ /** File name — the alt text and the accessible button name. */
1178
+ name: string;
1179
+ /** Resolved image URL. While undefined, the skeleton placeholder renders. */
1180
+ src?: string;
1181
+ /** Fired when the browser fails to load `src` (e.g. not actually an image). */
1182
+ onLoadError?: () => void;
1183
+ /** Fired on thumbnail press (consumer opens the lightbox). */
1184
+ onPress?: () => void;
1185
+ className?: string;
1186
+ }
1187
+ declare function ImageAttachment({ name, src, onLoadError, onPress, className, }: ImageAttachmentProps): react_jsx_runtime.JSX.Element;
1188
+
1189
+ /**
1190
+ * True when a filename's extension is one the browser renders natively in
1191
+ * `<img>`. A heuristic for contexts where only a name is known (e.g. a
1192
+ * FileRef carries no MIME type) — a wrong guess should degrade gracefully via
1193
+ * the consumer's img-error fallback. SVG is deliberately included: scripts do
1194
+ * not execute in an `<img>` context.
1195
+ */
1196
+ declare function isPreviewableImageName(name: string): boolean;
1197
+
1198
+ declare const imageLightboxStyles: tailwind_variants.TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, tailwind_variants.TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
1199
+ type ImageLightboxVariants = VariantProps<typeof imageLightboxStyles>;
1200
+ interface ImageLightboxProps {
1201
+ isOpen: boolean;
1202
+ onOpenChange: (isOpen: boolean) => void;
1203
+ /** Full-size image URL; nothing renders in the frame while undefined. */
1204
+ src?: string;
1205
+ /** File name — the dialog's accessible name, alt text, and caption. */
1206
+ name: string;
1207
+ /** When set, a download action renders in the caption bar. */
1208
+ onDownload?: () => void;
1209
+ }
1210
+ declare function ImageLightbox({ isOpen, onOpenChange, src, name, onDownload }: ImageLightboxProps): react_jsx_runtime.JSX.Element;
1211
+
1212
+ type InputProps = TextFieldProps & {
1213
+ label?: ReactNode;
1214
+ description?: ReactNode;
1215
+ errorMessage?: ReactNode;
1216
+ placeholder?: string;
1217
+ /** Field size. Defaults to `md`. Use `sm` for compact rows (filter builder, toolbars). */
1218
+ size?: FieldSize;
1219
+ /** Chrome variant. Defaults to `field`. `cell` flattens the box for
1220
+ * spreadsheet-style inline editing (2px radius, no halo / resting shadow). */
1221
+ appearance?: FieldAppearance;
1222
+ /** Extra props forwarded to the underlying <input>. */
1223
+ inputProps?: Omit<InputProps$1, 'className'>;
1224
+ /** Visual override for the input control only. */
1225
+ inputClassName?: string;
1226
+ };
1227
+ declare function Input({ label, description, errorMessage, placeholder, size, appearance, inputProps, inputClassName, className, ...props }: InputProps): react_jsx_runtime.JSX.Element;
1228
+
1229
+ type KbdProps = HTMLAttributes<HTMLElement>;
1230
+ declare function Kbd({ className, children, ...props }: KbdProps): react_jsx_runtime.JSX.Element;
1231
+
1232
+ /** Stateful root (RAC). Wraps the trigger element + the MenuPopover. */
1233
+ declare const MenuTrigger: typeof MenuTrigger$1;
1234
+ /**
1235
+ * Submenu wrapper (RAC). Wraps a parent MenuItem and the nested MenuPopover so
1236
+ * the flyout opens on hover/right-arrow. Use `placement="end top"` on the nested
1237
+ * MenuPopover so it cascades to the side, Windows-style.
1238
+ */
1239
+ declare const SubmenuTrigger: (props: react_aria_components.SubmenuTriggerProps & React.RefAttributes<HTMLDivElement>) => react.ReactElement<unknown, string | React.JSXElementConstructor<any>> | null;
1240
+ type MenuPopoverProps = PopoverProps;
1241
+ /** The floating panel. Defaults to opening below-start; pass `placement="end top"` for a submenu flyout. */
1242
+ declare function MenuPopover({ className, offset, placement, ...props }: MenuPopoverProps): react_jsx_runtime.JSX.Element;
1243
+ type MenuProps<T extends object> = MenuProps$1<T>;
1244
+ /** The menu list. Holds MenuItem / SubmenuTrigger children. */
1245
+ declare function Menu<T extends object>({ className, ...props }: MenuProps<T>): react_jsx_runtime.JSX.Element;
1246
+ type MenuItemProps = Omit<MenuItemProps$1, 'children'> & {
1247
+ /** Leading icon slot. */
1248
+ icon?: ReactNode;
1249
+ /** Renders a trailing chevron marking this row as a submenu parent. */
1250
+ hasSubmenu?: boolean;
1251
+ children?: ReactNode;
1252
+ };
1253
+ /** A single menu row. Pass `onAction` to handle selection; `isDisabled` to dim it. */
1254
+ declare function MenuItem({ icon, hasSubmenu, children, className, ...props }: MenuItemProps): react_jsx_runtime.JSX.Element;
1255
+
1256
+ /** Stateful root. Pass `isOpen` + `onOpenChange` for controlled usage. */
1257
+ declare function Modal(props: DialogTriggerProps): react_jsx_runtime.JSX.Element;
1258
+ type ModalContentProps = ModalOverlayProps & {
1259
+ /** Disable backdrop click to close. Default: backdrop closes. */
1260
+ isDismissable?: boolean;
1261
+ /** Children of the Dialog element. Supports render-prop form `({ close }) => …`. */
1262
+ children: DialogProps['children'];
1263
+ /** Visual override for the panel wrapper (affects width, padding, etc.). */
1264
+ modalClassName?: string;
1265
+ };
1266
+ /**
1267
+ * Portaled overlay + floating panel + dialog role. Backdrop darkens the page
1268
+ * with a warm ink tint; panel uses vellum bg + rule border + the float shadow.
1269
+ */
1270
+ declare function ModalContent({ children, className, modalClassName, isDismissable, ...props }: ModalContentProps): react_jsx_runtime.JSX.Element;
1271
+ /** Padded top block. Contains `<ModalTitle>` and optionally `<ModalDescription>`. */
1272
+ declare function ModalHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
1273
+ /** The modal's accessible name. Uses RAC `<Heading slot="title">` so the
1274
+ * Dialog's `aria-labelledby` points here automatically. */
1275
+ declare function ModalTitle({ className, ...props }: Omit<HeadingProps, 'slot'>): react_jsx_runtime.JSX.Element;
1276
+ /** Supporting copy under the title. */
1277
+ declare function ModalDescription({ className, ...props }: HTMLAttributes<HTMLParagraphElement>): react_jsx_runtime.JSX.Element;
1278
+ /** Padded main content block — put forms, text, lists, etc. here. */
1279
+ declare function ModalBody({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
1280
+ /** Action row at the bottom. Right-aligned. Place a `<Separator />` above
1281
+ * it when you want the dashed divider between body and footer. */
1282
+ declare function ModalFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
1283
+
1284
+ type MultiSelectOption<T extends Key = Key> = {
1285
+ id: T;
1286
+ /** Plain-text label — used as the option's accessible name and fallback
1287
+ * when `content` isn't provided. */
1288
+ label: string;
1289
+ /** Optional rich render. Applied to BOTH the listbox row and the selected
1290
+ * chip (wrapped by the chip's × button). Falls back to `label`. */
1291
+ content?: ReactNode;
1292
+ isDisabled?: boolean;
1293
+ };
1294
+ type MultiSelectProps<T extends Key = Key> = {
1295
+ label?: ReactNode;
1296
+ description?: ReactNode;
1297
+ errorMessage?: ReactNode;
1298
+ placeholder?: string;
1299
+ options: ReadonlyArray<MultiSelectOption<T>>;
1300
+ /** Controlled selection. Pass a `Set<T>` or any `Iterable<T>`. */
1301
+ selectedKeys: Iterable<T>;
1302
+ onSelectionChange: (keys: Set<T>) => void;
1303
+ isDisabled?: boolean;
1304
+ isInvalid?: boolean;
1305
+ /** Hide already-selected options from the dropdown. Removal then only
1306
+ * happens via the chip × in the trigger. Default `false` (selected
1307
+ * options stay visible and can be toggled off from the listbox). */
1308
+ hideSelectedOptions?: boolean;
1309
+ /** Render a search input at the top of the popover that filters options
1310
+ * by label (case-insensitive substring). Default `false`. */
1311
+ isSearchable?: boolean;
1312
+ /** Fires as the search text changes — lets consumers drive a server-side
1313
+ * directory search alongside the local filter. */
1314
+ onSearchChange?: (needle: string) => void;
1315
+ /** Field size. Defaults to `md`. */
1316
+ size?: FieldSize;
1317
+ /** Chrome variant. Defaults to `field`. `cell` flattens the box. */
1318
+ appearance?: FieldAppearance;
1319
+ className?: string;
1320
+ };
1321
+ declare function MultiSelect<T extends Key>({ label, description, errorMessage, placeholder, options, selectedKeys, onSelectionChange, isDisabled, isInvalid, hideSelectedOptions, isSearchable, onSearchChange, size, appearance, className, }: MultiSelectProps<T>): react_jsx_runtime.JSX.Element;
1322
+
1323
+ type NavSectionProps = {
1324
+ /** Uppercase mono label rendered above the items. */
1325
+ label?: ReactNode;
1326
+ /** Counter rendered at the right of the label (e.g. `5`). */
1327
+ count?: ReactNode;
1328
+ /** Trailing slot at the right of the heading row, e.g. an action button. */
1329
+ action?: ReactNode;
1330
+ className?: string;
1331
+ children?: ReactNode;
1332
+ /** Stable test/automation id, forwarded to the section root. */
1333
+ 'data-testid'?: string;
1334
+ };
1335
+ /** Visually-grouped block of nav entries. Use one per logical section
1336
+ * ("Workspace", "Operations", "Finance"). */
1337
+ declare function NavSection({ label, count, action, className, children, 'data-testid': dataTestid, }: NavSectionProps): react_jsx_runtime.JSX.Element;
1338
+ declare const navItemStyles: tailwind_variants.TVReturnType<{
1339
+ isActive: {
1340
+ true: string[];
1341
+ false: string;
1342
+ };
1343
+ isNested: {
1344
+ true: string;
1345
+ false: string;
1346
+ };
1347
+ }, undefined, string[], {
1348
+ isActive: {
1349
+ true: string[];
1350
+ false: string;
1351
+ };
1352
+ isNested: {
1353
+ true: string;
1354
+ false: string;
1355
+ };
1356
+ }, undefined, tailwind_variants.TVReturnType<{
1357
+ isActive: {
1358
+ true: string[];
1359
+ false: string;
1360
+ };
1361
+ isNested: {
1362
+ true: string;
1363
+ false: string;
1364
+ };
1365
+ }, undefined, string[], unknown, unknown, undefined>>;
1366
+ type NavItemVariants = VariantProps<typeof navItemStyles>;
1367
+ type NavItemProps = Omit<ButtonProps$1, 'children'> & {
1368
+ /** Leading icon. Pass an SVG element; it's wrapped in a 16px box. */
1369
+ icon?: ReactNode;
1370
+ /** Trailing slot — typically a count or status dot. */
1371
+ badge?: ReactNode;
1372
+ /** Mark the item as the current page. */
1373
+ isActive?: boolean;
1374
+ children?: ReactNode;
1375
+ };
1376
+ /** Leaf nav entry. RAC Button under the hood — full keyboard, focus-visible
1377
+ * ring, and disabled state included. For routing, apply `navItemStyles({...})`
1378
+ * to a RAC `<Link>` instead. */
1379
+ declare function NavItem({ icon, badge, isActive, className, children, ...props }: NavItemProps): react_jsx_runtime.JSX.Element;
1380
+ type NavGroupProps = Omit<DisclosureProps, 'children'> & {
1381
+ /** Leading icon for the group head. */
1382
+ icon?: ReactNode;
1383
+ /** Group label rendered next to the icon. */
1384
+ label: ReactNode;
1385
+ /** Children get auto-styled as nested NavItems via context. */
1386
+ children: ReactNode;
1387
+ className?: string;
1388
+ };
1389
+ /** Collapsible parent. RAC Disclosure handles aria-expanded / aria-controls
1390
+ * and keyboard activation. Children render inside an indented panel with a
1391
+ * vertical guide rule and pick up nested styling automatically. */
1392
+ declare function NavGroup({ icon, label, children, className, ...props }: NavGroupProps): react_jsx_runtime.JSX.Element;
1393
+
1394
+ declare function Popover(props: DialogTriggerProps): react_jsx_runtime.JSX.Element;
1395
+ type PopoverContentProps = Omit<PopoverProps, 'children'> & {
1396
+ /** Dialog children. Supports the render-prop form `({ close }) => …`. */
1397
+ children: DialogProps['children'];
1398
+ /** Visual override for the floating panel. */
1399
+ panelClassName?: string;
1400
+ /** When in controlled mode, the element the popover should anchor to. */
1401
+ triggerRef?: RefObject<Element | null>;
1402
+ };
1403
+ declare function PopoverContent({ children, className, panelClassName, offset, placement, ...props }: PopoverContentProps): react_jsx_runtime.JSX.Element;
1404
+ declare function PopoverPanelHeader({ className, children, }: {
1405
+ className?: string;
1406
+ children?: ReactNode;
1407
+ }): react_jsx_runtime.JSX.Element;
1408
+ declare function PopoverPanelBody({ className, children, }: {
1409
+ className?: string;
1410
+ children?: ReactNode;
1411
+ }): react_jsx_runtime.JSX.Element;
1412
+ declare function PopoverPanelFooter({ className, children, }: {
1413
+ className?: string;
1414
+ children?: ReactNode;
1415
+ }): react_jsx_runtime.JSX.Element;
1416
+
1417
+ declare const progressBarStyles: tailwind_variants.TVReturnType<{
1418
+ size: {
1419
+ sm: {
1420
+ track: string;
1421
+ };
1422
+ md: {
1423
+ track: string;
1424
+ };
1425
+ };
1426
+ }, {
1427
+ track: string;
1428
+ fill: string;
1429
+ }, undefined, {
1430
+ size: {
1431
+ sm: {
1432
+ track: string;
1433
+ };
1434
+ md: {
1435
+ track: string;
1436
+ };
1437
+ };
1438
+ }, {
1439
+ track: string;
1440
+ fill: string;
1441
+ }, tailwind_variants.TVReturnType<{
1442
+ size: {
1443
+ sm: {
1444
+ track: string;
1445
+ };
1446
+ md: {
1447
+ track: string;
1448
+ };
1449
+ };
1450
+ }, {
1451
+ track: string;
1452
+ fill: string;
1453
+ }, undefined, unknown, unknown, undefined>>;
1454
+ type ProgressBarVariants = VariantProps<typeof progressBarStyles>;
1455
+ type ProgressBarProps = Omit<ProgressBarProps$1, 'children' | 'className'> & ProgressBarVariants & {
1456
+ className?: string;
1457
+ };
1458
+ declare function ProgressBar({ size, className, ...props }: ProgressBarProps): react_jsx_runtime.JSX.Element;
1459
+
1460
+ type RadioGroupProps = Omit<RadioGroupProps$1, 'children'> & {
1461
+ label?: ReactNode;
1462
+ description?: ReactNode;
1463
+ errorMessage?: ReactNode;
1464
+ /** `<Radio>` elements. Function-as-children is not supported at the group level. */
1465
+ children: ReactNode;
1466
+ };
1467
+ declare function RadioGroup({ label, description, errorMessage, orientation, children, className, ...props }: RadioGroupProps): react_jsx_runtime.JSX.Element;
1468
+ type RadioProps = Omit<RadioProps$1, 'children'> & {
1469
+ children?: ReactNode;
1470
+ };
1471
+ declare function Radio({ children, className, ...props }: RadioProps): react_jsx_runtime.JSX.Element;
1472
+
1473
+ type FilterFieldType = Exclude<AttributeType, 'object'>;
1474
+ type FilterFieldOption = {
1475
+ value: string;
1476
+ label: string;
1477
+ /** Badge color register, used when this option is rendered as a pill. */
1478
+ variant?: BadgeVariants['variant'];
1479
+ };
1480
+ type FilterField = {
1481
+ /** Dot-path to the attribute, e.g. `'owner.email'`. Stable identifier. */
1482
+ path: string;
1483
+ /** Full nested label, e.g. `'Owner / Email'`. Used in pickers. */
1484
+ label: string;
1485
+ /** Leaf label only, e.g. `'Email'`. Used in chips. */
1486
+ shortLabel: string;
1487
+ /** Parent label for breadcrumb in chips, e.g. `'Owner'`. Omitted for top-level. */
1488
+ parentLabel?: string;
1489
+ type: FilterFieldType;
1490
+ /** Required when `type === 'enum'`; ignored otherwise. */
1491
+ options?: ReadonlyArray<FilterFieldOption>;
1492
+ /** Hint for `<Input type=…>`. Defaults derived from `type`. */
1493
+ inputType?: 'text' | 'number' | 'date' | 'datetime' | 'email';
1494
+ /**
1495
+ * Relationship metadata for fields that traverse a foreign key into a
1496
+ * related entity. Consumers that auto-emit JOINs (e.g. the report
1497
+ * builder) read this to determine how to join the related table; the
1498
+ * core record-filter UI just renders these like any other field.
1499
+ *
1500
+ * Path convention: `<attribute>.<relatedFieldPath>`, e.g.
1501
+ * `'createdBy.firstName'` or `'accountId.address.city'`. The local FK
1502
+ * attribute name is the prefix (not the related entity slug) so multiple
1503
+ * relationships to the same target stay distinguishable.
1504
+ */
1505
+ relation?: FilterFieldRelation;
1506
+ /**
1507
+ * LUM-34: pointer to the page-layout control that drives editor + chip
1508
+ * rendering. When set, the consumer's `renderValueInput` dispatches via
1509
+ * the control registry (`registry[controlSlug].Filter`) instead of the
1510
+ * lib's built-in type-switch. The lib treats this as opaque metadata —
1511
+ * it never touches the registry itself.
1512
+ */
1513
+ controlSlug?: string;
1514
+ /**
1515
+ * LUM-34: the raw SDK `Attribute` for this field, threaded through to
1516
+ * the descriptor's `Filter` / `Display` components which need full
1517
+ * type+meta context (enum values, relation target, etc.). Typed
1518
+ * `unknown` because the lib has no `@proteos/sdk` dependency;
1519
+ * consumers cast back to `Attribute` in their renderer.
1520
+ */
1521
+ attribute?: unknown;
1522
+ /**
1523
+ * LUM-34: per-field operator allowlist. When set, the operator picker
1524
+ * uses this list verbatim instead of the per-type default in
1525
+ * `operatorsForType(type)`. Lets the registry's per-control overrides
1526
+ * (e.g. `password` → `[]`) flow through to the picker without coupling
1527
+ * the lib to the registry.
1528
+ */
1529
+ filterOperators?: ReadonlyArray<ComparisonOperator>;
1530
+ };
1531
+ type FilterFieldRelation = {
1532
+ /** Local FK attribute on this entity, e.g. `'accountId'`. Used as JOIN alias. */
1533
+ attribute: string;
1534
+ /** Slug of the related entity table, e.g. `'account'`. */
1535
+ relatedEntitySlug: string;
1536
+ /** Attribute on the related entity to join against, typically `'id'`. */
1537
+ relatedAttribute: string;
1538
+ /** Dot-path of the field on the related entity, e.g. `'name'` or `'address.city'`. */
1539
+ relatedFieldPath: string;
1540
+ };
1541
+ type ComparisonOperator = 'eq' | 'gt' | 'lt' | 'gte' | 'lte' | 'ne' | 'in' | 'not_in' | 'contains' | 'starts_with' | 'ends_with' | 'empty' | 'not_empty';
1542
+ type LogicalOperator = 'and' | 'or';
1543
+ type FilterValue = string | string[] | boolean | null;
1544
+ type FilterElement = {
1545
+ field: string;
1546
+ operator: ComparisonOperator;
1547
+ /**
1548
+ * In-memory value shape. Richer than the SDK's `string`-only `value`
1549
+ * because the UI needs structured arrays for `in`/`not_in` and booleans
1550
+ * for boolean filters. App-level serializers collapse this back to the
1551
+ * SDK's wire format (pipe-joined strings, etc.) at the boundary.
1552
+ */
1553
+ value: FilterValue;
1554
+ };
1555
+ type FilterGroup = {
1556
+ logicalOperator: LogicalOperator;
1557
+ elements?: FilterElement[];
1558
+ groups?: FilterGroup[];
1559
+ };
1560
+ type OperatorArity = 0 | 1 | 'n';
1561
+ type OperatorDescriptor = {
1562
+ id: ComparisonOperator;
1563
+ /** Human label shown in the operator picker. */
1564
+ label: string;
1565
+ /** Number of values the operator takes. */
1566
+ arity: OperatorArity;
1567
+ /** Field types this operator applies to. */
1568
+ types: ReadonlyArray<FilterFieldType>;
1569
+ };
1570
+
1571
+ type AttributePickerProps = {
1572
+ fields: ReadonlyArray<FilterField>;
1573
+ /** Currently picked field path. Empty string means "no field picked yet". */
1574
+ value: string;
1575
+ onChange: (picked: FilterField) => void;
1576
+ autoFocus?: boolean;
1577
+ isDisabled?: boolean;
1578
+ /** Field size. Defaults to `sm` since this picker only ships inside the
1579
+ * filter row; `md` is exposed for future stand-alone uses. */
1580
+ size?: FieldSize;
1581
+ /** Visual override for the field wrapper. */
1582
+ className?: string;
1583
+ };
1584
+ declare function AttributePicker({ fields, value, onChange, autoFocus, isDisabled, size, className, }: AttributePickerProps): react_jsx_runtime.JSX.Element;
1585
+
1586
+ /**
1587
+ * Per-value-item renderer. Called once per value (twice for arity 'n'
1588
+ * with two items, etc.) AFTER arity orchestration. Return `undefined`
1589
+ * to fall through to the lib default for that item.
1590
+ */
1591
+ type ChipValueItemRenderer = (props: {
1592
+ field: FilterField;
1593
+ operator: ComparisonOperator;
1594
+ value: string;
1595
+ }) => ReactNode | undefined;
1596
+ declare function RenderChipItemProvider({ renderer, children, }: {
1597
+ renderer: ChipValueItemRenderer | undefined;
1598
+ children: ReactNode;
1599
+ }): react_jsx_runtime.JSX.Element;
1600
+ declare function useRenderChipItem(): ChipValueItemRenderer | undefined;
1601
+ type ChipValueProps = {
1602
+ field: FilterField;
1603
+ operator: ComparisonOperator;
1604
+ value: FilterValue;
1605
+ /** Override per-value-item rendering (LUM-34: registry dispatch). */
1606
+ renderItem?: ChipValueItemRenderer;
1607
+ };
1608
+ declare function ChipValue({ field, operator, value, renderItem }: ChipValueProps): react_jsx_runtime.JSX.Element | null;
1609
+ declare function formatValue(field: FilterField, operator: ComparisonOperator, value: FilterValue): string;
1610
+
1611
+ type FilterRowProps = {
1612
+ index: number;
1613
+ joiner: LogicalOperator;
1614
+ /** Resolved field metadata. `undefined` means the row's field is unset. */
1615
+ field?: FilterField;
1616
+ element: FilterElement;
1617
+ fields: ReadonlyArray<FilterField>;
1618
+ /** Auto-focus the AttributePicker on mount (e.g. for newly added rows). */
1619
+ autoFocus?: boolean;
1620
+ /** Auto-focus the OperatorPicker on mount. Used right after a pending
1621
+ * row's field is picked: the row remounts (its `key` changes), and we
1622
+ * want focus to advance from the AttributePicker to the operator. */
1623
+ autoFocusOperator?: boolean;
1624
+ /** Fires once after a mount that consumed `autoFocusOperator`, so the
1625
+ * parent can clear its tracking index. */
1626
+ onAutoFocusOperatorConsumed?: () => void;
1627
+ /** Auto-focus the value cell on mount. Forwarded into FilterValueInput,
1628
+ * whose key-based remount on operator change makes this re-fire reliably
1629
+ * across leaf types. */
1630
+ autoFocusValue?: boolean;
1631
+ /** Fires once after a mount that consumed `autoFocusValue`. */
1632
+ onAutoFocusValueConsumed?: () => void;
1633
+ /** Fires when the user submits the row from a plain text/number value
1634
+ * Input (Enter). Used by the builder panel to chain "commit + add new
1635
+ * pending row". The chip mini-editor passes its own form-submit handler
1636
+ * here if it wants the same behaviour. */
1637
+ onSubmit?: () => void;
1638
+ onChangeField: (next: FilterField) => void;
1639
+ onChangeOperator: (next: ComparisonOperator) => void;
1640
+ onChangeValue: (next: FilterValue) => void;
1641
+ onRemove: () => void;
1642
+ /** Optional "wrap in group" affordance — when present, a hover-only icon
1643
+ * appears next to the remove button. Used by the recursive popover panel
1644
+ * when `isComplexEnabled` is on. */
1645
+ onWrap?: () => void;
1646
+ };
1647
+ declare function FilterRow({ index, joiner, field, element, fields, autoFocus, autoFocusOperator, onAutoFocusOperatorConsumed, autoFocusValue, onAutoFocusValueConsumed, onSubmit, onChangeField, onChangeOperator, onChangeValue, onRemove, onWrap, }: FilterRowProps): react_jsx_runtime.JSX.Element;
1648
+ declare function rebaseRowOnFieldChange(element: FilterElement, next: FilterField): FilterElement;
1649
+ declare function rebaseRowOnOperatorChange(element: FilterElement, field: FilterField, nextOperator: ComparisonOperator): FilterElement;
1650
+
1651
+ declare function addLeaf(group: FilterGroup, field: FilterField): FilterGroup;
1652
+ declare function addPendingLeaf(group: FilterGroup): FilterGroup;
1653
+ declare function addSubgroup(group: FilterGroup, joiner?: LogicalOperator): FilterGroup;
1654
+ declare function removeLeaf(group: FilterGroup, index: number): FilterGroup;
1655
+ declare function removeSubgroup(group: FilterGroup, index: number): FilterGroup;
1656
+ declare function updateLeaf(group: FilterGroup, index: number, patch: Partial<FilterElement> | FilterElement): FilterGroup;
1657
+ declare function replaceLeaf(group: FilterGroup, index: number, next: FilterElement): FilterGroup;
1658
+ declare function updateSubgroup(group: FilterGroup, index: number, next: FilterGroup): FilterGroup;
1659
+ declare function wrapLeafInGroup(group: FilterGroup, index: number): FilterGroup;
1660
+ declare function setJoiner(group: FilterGroup, joiner: LogicalOperator): FilterGroup;
1661
+ declare function countLeaves(group: FilterGroup): number;
1662
+
1663
+ /**
1664
+ * Render-prop signature for overriding the default value editor. Called
1665
+ * with everything `FilterValueInput` knows about the leaf. Return a
1666
+ * `ReactNode` to take over rendering, or `undefined` to fall through to
1667
+ * the built-in branches (the common pattern: override one specific
1668
+ * `field.type`, return `undefined` for the rest).
1669
+ *
1670
+ * Used to plug in product-specific editors the lib can't know about —
1671
+ * e.g. a related-record picker that hits the SDK for typeahead.
1672
+ */
1673
+ type FilterValueInputRenderer = (props: {
1674
+ field: FilterField;
1675
+ operator: ComparisonOperator;
1676
+ value: FilterValue;
1677
+ onChange: (next: FilterValue) => void;
1678
+ autoFocus?: boolean;
1679
+ isDisabled?: boolean;
1680
+ }) => ReactNode | undefined;
1681
+ declare function RenderValueInputProvider({ renderer, children, }: {
1682
+ renderer: FilterValueInputRenderer | undefined;
1683
+ children: ReactNode;
1684
+ }): react_jsx_runtime.JSX.Element;
1685
+ declare function useRenderValueInput(): FilterValueInputRenderer | undefined;
1686
+ type FilterValueInputProps = {
1687
+ field: FilterField;
1688
+ operator: ComparisonOperator;
1689
+ value: FilterValue;
1690
+ onChange: (next: FilterValue) => void;
1691
+ isDisabled?: boolean;
1692
+ /** When true, focus the routed leaf on mount. The wrapping `<div>` is
1693
+ * keyed on `${field.path}-${operator}`, so an operator change remounts
1694
+ * the leaf and re-fires its `autoFocus` reliably across all six leaf
1695
+ * branches. Committed values come from props so they survive remount;
1696
+ * mid-typed drafts (TagInput buffer, DatePicker partial segment,
1697
+ * Combobox search) are reset — acceptable since the user took the
1698
+ * deliberate operator-change action. */
1699
+ autoFocus?: boolean;
1700
+ className?: string;
1701
+ };
1702
+ declare function FilterValueInput({ field, operator, value, onChange, isDisabled, autoFocus, className, }: FilterValueInputProps): react_jsx_runtime.JSX.Element | null;
1703
+
1704
+ type OperatorPickerProps = {
1705
+ fieldType: FilterFieldType;
1706
+ value: ComparisonOperator;
1707
+ onChange: (next: ComparisonOperator) => void;
1708
+ isDisabled?: boolean;
1709
+ /** Auto-focus the trigger on mount. Used by the chip mini-editor so focus
1710
+ * lands on the operator (the field is already chosen, the operator is the
1711
+ * natural next thing to tweak). */
1712
+ autoFocus?: boolean;
1713
+ /** Field size. Defaults to `sm` to match the filter row. */
1714
+ size?: FieldSize;
1715
+ /** Visual override for the trigger wrapper (sizing). */
1716
+ className?: string;
1717
+ /** Per-field allowlist override (LUM-34). When provided, picks operators
1718
+ * from this list instead of `operatorsForType(fieldType)`. */
1719
+ operators?: ReadonlyArray<ComparisonOperator>;
1720
+ };
1721
+ declare function OperatorPicker({ fieldType, value, onChange, isDisabled, autoFocus, size, className, operators, }: OperatorPickerProps): react_jsx_runtime.JSX.Element;
1722
+
1723
+ declare const OPERATORS: ReadonlyArray<OperatorDescriptor>;
1724
+ declare function operatorsForType(type: FilterFieldType): ReadonlyArray<OperatorDescriptor>;
1725
+ declare function operatorById(id: ComparisonOperator): OperatorDescriptor | undefined;
1726
+ declare function arityOf(operator: ComparisonOperator): OperatorArity;
1727
+ declare function defaultValueFor(type: FilterFieldType, arity: OperatorArity): FilterValue;
1728
+
1729
+ type RecordFilterBuilderPanelProps = {
1730
+ /** Display label shown in the header when fewer than 2 rows exist. */
1731
+ entityLabel?: string;
1732
+ fields: ReadonlyArray<FilterField>;
1733
+ filter: FilterGroup;
1734
+ onChange: (next: FilterGroup) => void;
1735
+ onClose: () => void;
1736
+ /** Optional "Save as view" affordance. Hidden when not provided. */
1737
+ onSaveView?: () => void;
1738
+ /** Optional "Expand inline" affordance — surface chips outside the popover. */
1739
+ onExpand?: () => void;
1740
+ showFieldIcons?: boolean;
1741
+ showJoinerToggle?: boolean;
1742
+ /** Opt-in to nested-group affordances: "+ Add group" button, "Wrap in
1743
+ * group" hover icon on leaves, and rendering of any sub-groups in the
1744
+ * filter tree. Defaults to `false` for back-compat. */
1745
+ isComplexEnabled?: boolean;
1746
+ /** Optional override for the value editor. Forwarded to RecordFilterEditor. */
1747
+ renderValueInput?: FilterValueInputRenderer;
1748
+ };
1749
+ declare function RecordFilterBuilderPanel({ entityLabel, fields, filter, onChange, onClose, onSaveView, onExpand, showFieldIcons, showJoinerToggle, isComplexEnabled, renderValueInput, }: RecordFilterBuilderPanelProps): react_jsx_runtime.JSX.Element;
1750
+
1751
+ type RecordFilterEditorProps = {
1752
+ fields: ReadonlyArray<FilterField>;
1753
+ filter: FilterGroup;
1754
+ onChange: (next: FilterGroup) => void;
1755
+ /** Show "+ Add group", "Wrap in group", and render nested sub-groups. */
1756
+ isComplexEnabled?: boolean;
1757
+ showFieldIcons?: boolean;
1758
+ showJoinerToggle?: boolean;
1759
+ /** Drop in a pending row on mount when the filter is empty so the user
1760
+ * lands on an auto-focused AttributePicker. Defaults to `true`. */
1761
+ seedPendingRow?: boolean;
1762
+ /**
1763
+ * Optional override for the value editor. Lets product code plug in
1764
+ * editors the lib can't know about (e.g. a record picker that hits the
1765
+ * SDK). Return `undefined` from the renderer to fall through to the
1766
+ * built-in branches per `(field.type, operator)` combination.
1767
+ */
1768
+ renderValueInput?: FilterValueInputRenderer;
1769
+ };
1770
+ declare function RecordFilterEditor({ fields, filter, onChange, isComplexEnabled, showFieldIcons, showJoinerToggle, seedPendingRow, renderValueInput, }: RecordFilterEditorProps): react_jsx_runtime.JSX.Element;
1771
+
1772
+ type RecordFilterButtonProps = {
1773
+ /** Display label shown in the builder header. */
1774
+ entityLabel?: string;
1775
+ fields: ReadonlyArray<FilterField>;
1776
+ filter: FilterGroup;
1777
+ onChange: (next: FilterGroup) => void;
1778
+ showFieldIcons?: boolean;
1779
+ showJoinerToggle?: boolean;
1780
+ /** Optional save-as-view affordance forwarded to the builder. */
1781
+ onSaveView?: () => void;
1782
+ /** localStorage key shared with `RecordFilterChips`. */
1783
+ storageKey?: string;
1784
+ /** Opt-in to nested-group affordances inside the builder popover. Defaults
1785
+ * to `false` for back-compat. Forwarded to `RecordFilterBuilderPanel`. */
1786
+ isComplexEnabled?: boolean;
1787
+ /** Optional override for the value editor. Forwarded to the builder panel. */
1788
+ renderValueInput?: FilterValueInputRenderer;
1789
+ };
1790
+ declare function RecordFilterButton({ entityLabel, fields, filter, onChange, showFieldIcons, showJoinerToggle, onSaveView, storageKey, isComplexEnabled, renderValueInput, }: RecordFilterButtonProps): react_jsx_runtime.JSX.Element | null;
1791
+
1792
+ type RecordFilterChipsProps = {
1793
+ fields: ReadonlyArray<FilterField>;
1794
+ filter: FilterGroup;
1795
+ onChange: (next: FilterGroup) => void;
1796
+ showFieldIcons?: boolean;
1797
+ showJoinerToggle?: boolean;
1798
+ /** localStorage key used to share the collapsed/expanded state with the
1799
+ * RecordFilterButton. Pass the same value to both components. */
1800
+ storageKey?: string;
1801
+ /** Optional override for the value editor inside the chip's mini-editor. */
1802
+ renderValueInput?: FilterValueInputRenderer;
1803
+ /** Optional override for per-value-item rendering inside chip pills.
1804
+ * Called once per value (or once per item for arity 'n'); returning
1805
+ * `undefined` falls through to the lib default. LUM-34 wires this to
1806
+ * the page-layout control registry's Display. */
1807
+ renderChipItem?: ChipValueItemRenderer;
1808
+ };
1809
+ declare function RecordFilterChips({ fields, filter, onChange, showFieldIcons, showJoinerToggle, storageKey, renderValueInput, renderChipItem, }: RecordFilterChipsProps): react_jsx_runtime.JSX.Element | null;
1810
+
1811
+ declare function useShowDetails(storageKey?: string): readonly [boolean, () => void, (next: boolean) => void];
1812
+
1813
+ declare const segmentedControlStyles: tailwind_variants.TVReturnType<{
1814
+ size: {
1815
+ sm: {
1816
+ segment: string;
1817
+ };
1818
+ md: {
1819
+ segment: string;
1820
+ };
1821
+ };
1822
+ tone: {
1823
+ default: {
1824
+ segment: string;
1825
+ };
1826
+ };
1827
+ }, {
1828
+ group: string;
1829
+ segment: string[];
1830
+ }, undefined, {
1831
+ size: {
1832
+ sm: {
1833
+ segment: string;
1834
+ };
1835
+ md: {
1836
+ segment: string;
1837
+ };
1838
+ };
1839
+ tone: {
1840
+ default: {
1841
+ segment: string;
1842
+ };
1843
+ };
1844
+ }, {
1845
+ group: string;
1846
+ segment: string[];
1847
+ }, tailwind_variants.TVReturnType<{
1848
+ size: {
1849
+ sm: {
1850
+ segment: string;
1851
+ };
1852
+ md: {
1853
+ segment: string;
1854
+ };
1855
+ };
1856
+ tone: {
1857
+ default: {
1858
+ segment: string;
1859
+ };
1860
+ };
1861
+ }, {
1862
+ group: string;
1863
+ segment: string[];
1864
+ }, undefined, unknown, unknown, undefined>>;
1865
+ type SegmentedControlVariants = VariantProps<typeof segmentedControlStyles>;
1866
+ type SegmentedControlOption<T extends Key$1 = Key$1> = {
1867
+ id: T;
1868
+ label: ReactNode;
1869
+ isDisabled?: boolean;
1870
+ };
1871
+ type SegmentedControlProps<T extends Key$1 = Key$1> = Omit<RadioGroupProps$1, 'children' | 'value' | 'onChange'> & {
1872
+ options: ReadonlyArray<SegmentedControlOption<T>>;
1873
+ value: T;
1874
+ onChange: (value: T) => void;
1875
+ size?: SegmentedControlVariants['size'];
1876
+ /** Focus the selected segment on mount. RAC's RadioGroup doesn't surface
1877
+ * `autoFocus` itself — it's a per-Radio prop — so we apply it to the
1878
+ * Radio whose value matches `value`. */
1879
+ autoFocus?: boolean;
1880
+ /** Visual override for the group wrapper. */
1881
+ className?: string;
1882
+ };
1883
+ declare function SegmentedControl<T extends Key$1>({ options, value, onChange, size, autoFocus, className, orientation, ...props }: SegmentedControlProps<T>): react_jsx_runtime.JSX.Element;
1884
+
1885
+ type SelectOption<T extends Key = Key> = {
1886
+ id: T;
1887
+ label: ReactNode;
1888
+ /** Plain-text stand-in for typeahead/accessibility when `label` is a
1889
+ * ReactNode. Optional for string labels (RAC derives the text itself). */
1890
+ textValue?: string;
1891
+ description?: ReactNode;
1892
+ isDisabled?: boolean;
1893
+ };
1894
+ type SelectProps<T extends Key = Key> = Omit<SelectProps$1<never>, 'children'> & {
1895
+ label?: ReactNode;
1896
+ description?: ReactNode;
1897
+ errorMessage?: ReactNode;
1898
+ placeholder?: string;
1899
+ options: ReadonlyArray<SelectOption<T>>;
1900
+ /** Optional custom renderer for a ListBoxItem. */
1901
+ renderItem?: (option: SelectOption<T>) => ReactNode;
1902
+ /** Field size. Defaults to `md`. */
1903
+ size?: FieldSize;
1904
+ /** Chrome variant. Defaults to `field`. `cell` flattens the trigger box. */
1905
+ appearance?: FieldAppearance;
1906
+ /** Visual override for the trigger only. */
1907
+ triggerClassName?: string;
1908
+ /** Visual override for the popover — e.g. `min-w-[var(--trigger-width)]
1909
+ * w-max` to size to content when the trigger is intrinsic-width. Defaults
1910
+ * to matching the trigger width exactly. */
1911
+ popoverClassName?: string;
1912
+ };
1913
+ declare function Select<T extends Key>({ label, description, errorMessage, placeholder, options, renderItem, size, appearance, triggerClassName, popoverClassName, className, ...props }: SelectProps<T>): react_jsx_runtime.JSX.Element;
1914
+
1915
+ declare const separatorStyles: tailwind_variants.TVReturnType<{
1916
+ orientation: {
1917
+ horizontal: string;
1918
+ vertical: string;
1919
+ };
1920
+ variant: {
1921
+ dashed: string;
1922
+ solid: string;
1923
+ };
1924
+ }, undefined, "m-0 border-0 border-rule", {
1925
+ orientation: {
1926
+ horizontal: string;
1927
+ vertical: string;
1928
+ };
1929
+ variant: {
1930
+ dashed: string;
1931
+ solid: string;
1932
+ };
1933
+ }, undefined, tailwind_variants.TVReturnType<{
1934
+ orientation: {
1935
+ horizontal: string;
1936
+ vertical: string;
1937
+ };
1938
+ variant: {
1939
+ dashed: string;
1940
+ solid: string;
1941
+ };
1942
+ }, undefined, "m-0 border-0 border-rule", unknown, unknown, undefined>>;
1943
+ type SeparatorVariants = VariantProps<typeof separatorStyles>;
1944
+ type SeparatorProps = SeparatorProps$1 & {
1945
+ variant?: SeparatorVariants['variant'];
1946
+ };
1947
+ declare function Separator({ className, orientation, variant, ...props }: SeparatorProps): react_jsx_runtime.JSX.Element;
1948
+
1949
+ declare const skeletonStyles: tailwind_variants.TVReturnType<{
1950
+ shape: {
1951
+ rect: string;
1952
+ circle: string;
1953
+ text: string;
1954
+ };
1955
+ }, undefined, string[], {
1956
+ shape: {
1957
+ rect: string;
1958
+ circle: string;
1959
+ text: string;
1960
+ };
1961
+ }, undefined, tailwind_variants.TVReturnType<{
1962
+ shape: {
1963
+ rect: string;
1964
+ circle: string;
1965
+ text: string;
1966
+ };
1967
+ }, undefined, string[], unknown, unknown, undefined>>;
1968
+ type SkeletonVariants = VariantProps<typeof skeletonStyles>;
1969
+ type SkeletonProps = HTMLAttributes<HTMLDivElement> & SkeletonVariants;
1970
+ declare function Skeleton({ shape, className, ...props }: SkeletonProps): react_jsx_runtime.JSX.Element;
1971
+
1972
+ type SuccessAnimationProps = {
1973
+ className?: string;
1974
+ };
1975
+ declare function SuccessAnimation({ className }: SuccessAnimationProps): react_jsx_runtime.JSX.Element;
1976
+
1977
+ type SwitchProps = Omit<SwitchProps$1, 'children'> & {
1978
+ children?: ReactNode;
1979
+ /** Render the label before the track instead of after it. */
1980
+ labelPlacement?: 'start' | 'end';
1981
+ };
1982
+ declare function Switch({ children, labelPlacement, className, ...props }: SwitchProps): react_jsx_runtime.JSX.Element;
1983
+
1984
+ declare const tabsStyles: tailwind_variants.TVReturnType<{
1985
+ size: {
1986
+ sm: {
1987
+ list: string;
1988
+ trigger: string;
1989
+ };
1990
+ md: {
1991
+ list: string;
1992
+ trigger: string;
1993
+ };
1994
+ };
1995
+ }, {
1996
+ root: string;
1997
+ list: string;
1998
+ trigger: string[];
1999
+ panel: string;
2000
+ }, undefined, {
2001
+ size: {
2002
+ sm: {
2003
+ list: string;
2004
+ trigger: string;
2005
+ };
2006
+ md: {
2007
+ list: string;
2008
+ trigger: string;
2009
+ };
2010
+ };
2011
+ }, {
2012
+ root: string;
2013
+ list: string;
2014
+ trigger: string[];
2015
+ panel: string;
2016
+ }, tailwind_variants.TVReturnType<{
2017
+ size: {
2018
+ sm: {
2019
+ list: string;
2020
+ trigger: string;
2021
+ };
2022
+ md: {
2023
+ list: string;
2024
+ trigger: string;
2025
+ };
2026
+ };
2027
+ }, {
2028
+ root: string;
2029
+ list: string;
2030
+ trigger: string[];
2031
+ panel: string;
2032
+ }, undefined, unknown, unknown, undefined>>;
2033
+ type TabsVariants = VariantProps<typeof tabsStyles>;
2034
+ type TabsRootProps = Omit<TabsProps, 'children'> & TabsVariants & {
2035
+ children?: ReactNode;
2036
+ };
2037
+ declare function Root({ size, className, children, ...props }: TabsRootProps): react_jsx_runtime.JSX.Element;
2038
+ type TabsListProps = Omit<TabListProps<object>, 'children'> & TabsVariants & {
2039
+ children?: ReactNode;
2040
+ };
2041
+ declare function List({ size, className, children, ...props }: TabsListProps): react_jsx_runtime.JSX.Element;
2042
+ type TabsTriggerProps = Omit<TabProps, 'children'> & TabsVariants & {
2043
+ children?: ReactNode;
2044
+ };
2045
+ declare function Trigger({ size, className, children, ...props }: TabsTriggerProps): react_jsx_runtime.JSX.Element;
2046
+ type TabsPanelProps = Omit<TabPanelProps, 'children'> & {
2047
+ children?: ReactNode;
2048
+ };
2049
+ declare function Panel({ className, children, ...props }: TabsPanelProps): react_jsx_runtime.JSX.Element;
2050
+ declare const Tabs: typeof Root & {
2051
+ Root: typeof Root;
2052
+ List: typeof List;
2053
+ Trigger: typeof Trigger;
2054
+ Panel: typeof Panel;
2055
+ };
2056
+
2057
+ type TagInputProps = {
2058
+ label?: ReactNode;
2059
+ description?: ReactNode;
2060
+ errorMessage?: ReactNode;
2061
+ /** Placeholder shown in the trailing input when there are no tags. */
2062
+ placeholder?: string;
2063
+ /** Underlying `<input>` type. Use `'number'` to constrain numeric tags. */
2064
+ inputType?: 'text' | 'number';
2065
+ value: string[];
2066
+ onChange: (next: string[]) => void;
2067
+ isDisabled?: boolean;
2068
+ isInvalid?: boolean;
2069
+ /** Field size. Defaults to `md`. */
2070
+ size?: FieldSize;
2071
+ /** Chrome variant. Defaults to `field`. `cell` flattens the box. */
2072
+ appearance?: FieldAppearance;
2073
+ /** Focus the trailing input on mount. Used by the filter-row chain so
2074
+ * picking an operator with arity 'n' (and a non-enum field) lands focus
2075
+ * directly on the tag-entry input. */
2076
+ autoFocus?: boolean;
2077
+ /** Visual override for the field wrapper. */
2078
+ className?: string;
2079
+ };
2080
+ declare function TagInput({ label, description, errorMessage, placeholder, inputType, value, onChange, isDisabled, isInvalid, size, appearance, autoFocus, className, }: TagInputProps): react_jsx_runtime.JSX.Element;
2081
+
2082
+ type TextareaProps = TextFieldProps & {
2083
+ label?: ReactNode;
2084
+ description?: ReactNode;
2085
+ errorMessage?: ReactNode;
2086
+ placeholder?: string;
2087
+ /** Visible rows. Height can still grow via vertical resize (consumer). */
2088
+ rows?: number;
2089
+ /** Field size. Defaults to `md`. */
2090
+ size?: FieldSize;
2091
+ /** Chrome variant. Defaults to `field`. `cell` flattens the box. */
2092
+ appearance?: FieldAppearance;
2093
+ /** Extra props forwarded to the underlying <textarea>. */
2094
+ textareaProps?: Omit<TextAreaProps, 'className'>;
2095
+ /** Visual override for the textarea control only. */
2096
+ textareaClassName?: string;
2097
+ };
2098
+ declare function Textarea({ label, description, errorMessage, placeholder, rows, size, appearance, textareaProps, textareaClassName, className, ...props }: TextareaProps): react_jsx_runtime.JSX.Element;
2099
+
2100
+ type TimeFieldProps<T extends TimeValue> = TimeFieldProps$1<T> & {
2101
+ label?: ReactNode;
2102
+ description?: ReactNode;
2103
+ errorMessage?: ReactNode;
2104
+ /** Field size. Defaults to `md`. */
2105
+ size?: FieldSize;
2106
+ /** Chrome variant. Defaults to `field`. `cell` flattens the box. */
2107
+ appearance?: FieldAppearance;
2108
+ };
2109
+ declare function TimeField<T extends TimeValue = TimeValue>({ label, description, errorMessage, size, appearance, className, ...props }: TimeFieldProps<T>): react_jsx_runtime.JSX.Element;
2110
+
2111
+ /** Stateful root. RAC handles hover delay + focus visibility.
2112
+ *
2113
+ * - `delay` — ms of hover before the tooltip opens. Keyboard focus opens
2114
+ * instantly regardless. Default **500** (RAC's own default is 1500 which
2115
+ * feels sluggish for a dense app). Set `0` for instant tooltips.
2116
+ * - `closeDelay` — ms after the pointer leaves before the tooltip hides.
2117
+ * Default **0** (close immediately). Raise it if adjacent targets share
2118
+ * tooltips and you want them to chain without re-waiting.
2119
+ */
2120
+ declare function TooltipTrigger({ delay, closeDelay, ...props }: TooltipTriggerComponentProps): react_jsx_runtime.JSX.Element;
2121
+ type TooltipProps = TooltipProps$1;
2122
+ declare function Tooltip({ className, offset, ...props }: TooltipProps): react_jsx_runtime.JSX.Element;
2123
+
2124
+ declare function cn(...inputs: ClassValue[]): string;
2125
+
2126
+ export { ATTRIBUTE_TYPES, ATTRIBUTE_TYPE_ICONS, type ActionsColumnOptions, AttachmentChip, type AttachmentChipProps, type AttachmentChipVariants, AttributePicker, type AttributePickerProps, AttributeType, AttributeTypeIcon, type AttributeTypeIconProps, Avatar, AvatarGroup, type AvatarGroupItem, type AvatarGroupProps, type AvatarGroupVariants, type AvatarProps, type AvatarVariants, Badge, BadgeMultiSelect, type BadgeMultiSelectOption, type BadgeMultiSelectProps, type BadgeProps, type BadgeVariants, BooleanCell, type BooleanCellProps, type BreadcrumbItem, Breadcrumbs, type BreadcrumbsProps, Button, type ButtonProps, type ButtonVariants, COLUMN_DRAG_KIND, Card, CardBody, CardContent, CardEyebrow, CardFeatureTitle, CardFooter, CardHeader, type CardProps, CardTitle, type CardVariants, Checkbox, CheckboxGroup, type CheckboxGroupProps, type CheckboxProps, ChipValue, type ChipValueItemRenderer, type ChipValueProps, type ColumnDragData, Combobox, type ComboboxOption, type ComboboxProps, Command, CommandHint, type CommandHintProps, type CommandHintTone, type CommandProps, type ComparisonOperator, CurrencyInput, type CurrencyInputOption, type CurrencyInputProps, type CurrencyInputValue, DataTable, DataTableEmpty, type DataTableEmptyProps, DataTableError, type DataTableErrorProps, type DataTableProps, DataTableSkeleton, type DataTableSkeletonProps, DateCell, type DateCellProps, DatePicker, type DatePickerProps, DateTimeCell, type DateTimeCellProps, DateTimePicker, type DateTimePickerProps, EmptyState, type EmptyStateProps, type EmptyStateVariants, ErrorAnimation, type ErrorAnimationProps, type FieldAppearance, FieldCaret, type FieldControlVariants, type FieldSize, FileField, type FileFieldProps, type FileFieldValue, FileViewer, FileViewerFallbackCard, type FileViewerFallbackCardProps, type FileViewerFallbackCardVariants, type FileViewerKind, type FileViewerProps, type FileViewerVariants, type FilterElement, type FilterField, type FilterFieldOption, type FilterFieldRelation, type FilterFieldType, type FilterGroup, FilterRow, type FilterRowProps, type FilterValue, FilterValueInput, type FilterValueInputProps, type FilterValueInputRenderer, ImageAttachment, type ImageAttachmentProps, type ImageAttachmentVariants, ImageLightbox, type ImageLightboxProps, type ImageLightboxVariants, type InfiniteQueryLike, Input, type InputProps, Kbd, type KbdProps, type KeyCombo, LinkCell, type LinkCellProps, type LogicalOperator, Menu, MenuItem, type MenuItemProps, MenuPopover, type MenuPopoverProps, type MenuProps, MenuTrigger, Modal, ModalBody, ModalContent, type ModalContentProps, ModalDescription, ModalFooter, ModalHeader, ModalTitle, MultiSelect, type MultiSelectOption, type MultiSelectProps, NavGroup, type NavGroupProps, NavItem, type NavItemProps, type NavItemVariants, NavSection, type NavSectionProps, OPERATORS, type OperatorArity, type OperatorDescriptor, OperatorPicker, type OperatorPickerProps, PROTECTED_COMBOS, Popover, PopoverContent, type PopoverContentProps, PopoverPanelBody, PopoverPanelFooter, PopoverPanelHeader, PressableCard, type PressableCardProps, ProgressBar, type ProgressBarProps, type ProgressBarVariants, Radio, RadioGroup, type RadioGroupProps, type RadioProps, RecordFilterBuilderPanel, type RecordFilterBuilderPanelProps, RecordFilterButton, type RecordFilterButtonProps, RecordFilterChips, type RecordFilterChipsProps, RecordFilterEditor, type RecordFilterEditorProps, RenderChipItemProvider, RenderValueInputProvider, SegmentedControl, type SegmentedControlOption, type SegmentedControlProps, type SegmentedControlVariants, Select, type SelectOption, type SelectProps, Separator, type SeparatorProps, Skeleton, type SkeletonProps, type SkeletonVariants, type SortDirection, SubmenuTrigger, SuccessAnimation, type SuccessAnimationProps, Switch, type SwitchProps, Table, TableBody, type TableBodyProps, TableCell, type TableCellProps, TableHeader, TableHeaderCell, type TableHeaderCellProps, type TableHeaderProps, TableHeaderSpacer, type TableProps, TableRow, type TableRowProps, TableScroller, type TableVariants, Tabs, type TabsListProps, type TabsPanelProps, type TabsRootProps, type TabsTriggerProps, type TabsVariants, TagInput, type TagInputProps, Textarea, type TextareaProps, TimeField, type TimeFieldProps, Tooltip, type TooltipProps, TooltipTrigger, TruncateCell, type TruncateCellProps, type UseCommandOptions, type UseEscapeKeyOptions, type UseInfiniteScrollSentinelOptions, addLeaf as addFilterLeaf, addPendingLeaf, addSubgroup, arityOf, attachmentChipStyles, avatarGroupStyles, avatarStyles, badgeStyles, buttonStyles, cardStyles, cn, countLeaves, defaultValueFor, emptyStateStyles, fieldControlStyles, fieldErrorStyles, fieldHintStyles, fieldLabelStyles, fileViewerFallbackCardStyles, fileViewerStyles, formatFileSize, formatValue, iconForContentType, imageAttachmentStyles, imageLightboxStyles, isColumnDragData, isEditableTarget, isPreviewableImageName, makeActionsColumn, navItemStyles, operatorById, operatorsForType, parseCombo, progressBarStyles, rebaseRowOnFieldChange, rebaseRowOnOperatorChange, removeLeaf, removeSubgroup, replaceLeaf, segmentedControlStyles, setJoiner, skeletonStyles, tableCellStyles, tableHeaderCellStyles, tabsStyles, updateLeaf, updateSubgroup, useAttributeTypeIcon, useCommand, useDiscoveryActive, useEscapeKey, useInfiniteScrollSentinel, useRenderChipItem, useRenderValueInput, useShowDetails, viewerKindForContentType, wrapLeafInGroup };