@nationaldesignstudio/react 0.2.0 → 0.5.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 (97) hide show
  1. package/dist/component-registry.md +1310 -127
  2. package/dist/components/atoms/background/background.d.ts +13 -27
  3. package/dist/components/atoms/button/button.d.ts +64 -72
  4. package/dist/components/atoms/button/button.figma.d.ts +1 -0
  5. package/dist/components/atoms/button/icon-button.d.ts +62 -110
  6. package/dist/components/atoms/input/input-group.d.ts +278 -0
  7. package/dist/components/atoms/input/input.d.ts +121 -0
  8. package/dist/components/atoms/popover/popover.d.ts +195 -0
  9. package/dist/components/atoms/select/select.d.ts +131 -0
  10. package/dist/components/atoms/tooltip/tooltip.d.ts +161 -0
  11. package/dist/components/organisms/card/card.d.ts +3 -3
  12. package/dist/components/sections/hero/hero.d.ts +2 -2
  13. package/dist/components/sections/prose/prose.d.ts +3 -3
  14. package/dist/components/sections/river/river.d.ts +1 -1
  15. package/dist/components/sections/tout/tout.d.ts +4 -4
  16. package/dist/components/shared/floating-arrow.d.ts +34 -0
  17. package/dist/index.d.ts +12 -0
  18. package/dist/index.js +13935 -7622
  19. package/dist/index.js.map +1 -1
  20. package/dist/lib/form-control.d.ts +106 -0
  21. package/dist/tokens.css +4725 -19065
  22. package/package.json +2 -1
  23. package/src/components/atoms/accordion/accordion.stories.tsx +1 -1
  24. package/src/components/atoms/accordion/accordion.tsx +2 -2
  25. package/src/components/atoms/background/background.tsx +71 -109
  26. package/src/components/atoms/button/button.figma.tsx +37 -0
  27. package/src/components/atoms/button/button.stories.tsx +253 -115
  28. package/src/components/atoms/button/button.test.tsx +289 -5
  29. package/src/components/atoms/button/button.tsx +40 -101
  30. package/src/components/atoms/button/button.visual.test.tsx +28 -32
  31. package/src/components/atoms/button/icon-button.stories.tsx +44 -101
  32. package/src/components/atoms/button/icon-button.test.tsx +26 -94
  33. package/src/components/atoms/button/icon-button.tsx +81 -224
  34. package/src/components/atoms/input/index.ts +17 -0
  35. package/src/components/atoms/input/input-group.stories.tsx +646 -0
  36. package/src/components/atoms/input/input-group.test.tsx +362 -0
  37. package/src/components/atoms/input/input-group.tsx +409 -0
  38. package/src/components/atoms/input/input.stories.tsx +228 -0
  39. package/src/components/atoms/input/input.test.tsx +167 -0
  40. package/src/components/atoms/input/input.tsx +104 -0
  41. package/src/components/atoms/pager-control/pager-control.stories.tsx +6 -8
  42. package/src/components/atoms/pager-control/pager-control.tsx +12 -12
  43. package/src/components/atoms/popover/index.ts +30 -0
  44. package/src/components/atoms/popover/popover.stories.tsx +531 -0
  45. package/src/components/atoms/popover/popover.test.tsx +486 -0
  46. package/src/components/atoms/popover/popover.tsx +488 -0
  47. package/src/components/atoms/select/index.ts +18 -0
  48. package/src/components/atoms/select/select.stories.tsx +455 -0
  49. package/src/components/atoms/select/select.tsx +324 -0
  50. package/src/components/atoms/tooltip/index.ts +24 -0
  51. package/src/components/atoms/tooltip/tooltip.stories.tsx +348 -0
  52. package/src/components/atoms/tooltip/tooltip.test.tsx +363 -0
  53. package/src/components/atoms/tooltip/tooltip.tsx +347 -0
  54. package/src/components/dev-tools/dev-toolbar/dev-toolbar.stories.tsx +8 -17
  55. package/src/components/dev-tools/dev-toolbar/dev-toolbar.tsx +3 -3
  56. package/src/components/foundation/typography/typography.stories.tsx +401 -0
  57. package/src/components/organisms/card/card.stories.tsx +19 -19
  58. package/src/components/organisms/card/card.test.tsx +1 -1
  59. package/src/components/organisms/card/card.tsx +3 -3
  60. package/src/components/organisms/card/card.visual.test.tsx +11 -11
  61. package/src/components/organisms/navbar/navbar.tsx +2 -2
  62. package/src/components/organisms/navbar/navbar.visual.test.tsx +2 -2
  63. package/src/components/organisms/us-gov-banner/us-gov-banner.tsx +2 -2
  64. package/src/components/sections/banner/banner.stories.tsx +1 -5
  65. package/src/components/sections/banner/banner.test.tsx +2 -2
  66. package/src/components/sections/banner/banner.tsx +6 -6
  67. package/src/components/sections/card-grid/card-grid.tsx +5 -5
  68. package/src/components/sections/faq-section/faq-section.tsx +2 -2
  69. package/src/components/sections/hero/hero.stories.tsx +7 -7
  70. package/src/components/sections/hero/hero.test.tsx +5 -5
  71. package/src/components/sections/hero/hero.tsx +10 -11
  72. package/src/components/sections/prose/prose.test.tsx +2 -2
  73. package/src/components/sections/prose/prose.tsx +6 -7
  74. package/src/components/sections/river/river.stories.tsx +8 -8
  75. package/src/components/sections/river/river.test.tsx +4 -4
  76. package/src/components/sections/river/river.tsx +8 -16
  77. package/src/components/sections/tout/tout.stories.tsx +7 -31
  78. package/src/components/sections/tout/tout.test.tsx +1 -1
  79. package/src/components/sections/tout/tout.tsx +11 -11
  80. package/src/components/sections/two-column-section/two-column-section.tsx +7 -9
  81. package/src/components/shared/floating-arrow.tsx +78 -0
  82. package/src/components/shared/index.ts +5 -0
  83. package/src/index.ts +98 -0
  84. package/src/lib/form-control.ts +71 -0
  85. package/src/stories/grid-system.stories.tsx +309 -0
  86. package/src/stories/{Introduction.mdx → introduction.mdx} +29 -15
  87. package/src/stories/{ThemeProvider.stories.tsx → theme-provider.stories.tsx} +8 -22
  88. package/src/stories/{TokenShowcase.stories.tsx → token-showcase.stories.tsx} +1 -20
  89. package/src/stories/token-showcase.tsx +777 -0
  90. package/src/styles.css +3 -0
  91. package/src/tests/token-resolution.test.tsx +298 -0
  92. package/src/theme/hooks.ts +1 -1
  93. package/src/theme/index.ts +1 -1
  94. package/src/theme/theme-provider.test.tsx +270 -0
  95. package/src/theme/{ThemeProvider.tsx → theme-provider.tsx} +18 -2
  96. package/src/stories/GridSystem.stories.tsx +0 -84
  97. package/src/stories/TokenShowcase.tsx +0 -1429
@@ -0,0 +1,278 @@
1
+ import { VariantProps } from 'tailwind-variants';
2
+ import { ButtonProps } from '../button';
3
+ import type * as React from "react";
4
+ declare const inputGroupVariants: import('tailwind-variants').TVReturnType<{
5
+ size: {
6
+ sm: string;
7
+ default: string;
8
+ lg: string;
9
+ };
10
+ }, undefined, string[], import('tailwind-variants/dist/config.js').TVConfig<{
11
+ size: {
12
+ sm: string;
13
+ default: string;
14
+ lg: string;
15
+ };
16
+ }, {
17
+ size: {
18
+ sm: string;
19
+ default: string;
20
+ lg: string;
21
+ };
22
+ }>, {
23
+ size: {
24
+ sm: string;
25
+ default: string;
26
+ lg: string;
27
+ };
28
+ }, undefined, import('tailwind-variants').TVReturnType<{
29
+ size: {
30
+ sm: string;
31
+ default: string;
32
+ lg: string;
33
+ };
34
+ }, undefined, string[], import('tailwind-variants/dist/config.js').TVConfig<{
35
+ size: {
36
+ sm: string;
37
+ default: string;
38
+ lg: string;
39
+ };
40
+ }, {
41
+ size: {
42
+ sm: string;
43
+ default: string;
44
+ lg: string;
45
+ };
46
+ }>, unknown, unknown, undefined>>;
47
+ declare const inputGroupAddonVariants: import('tailwind-variants').TVReturnType<{
48
+ align: {
49
+ "inline-start": string[];
50
+ "inline-end": string[];
51
+ "block-start": string[];
52
+ "block-end": string[];
53
+ };
54
+ }, undefined, string[], import('tailwind-variants/dist/config.js').TVConfig<{
55
+ align: {
56
+ "inline-start": string[];
57
+ "inline-end": string[];
58
+ "block-start": string[];
59
+ "block-end": string[];
60
+ };
61
+ }, {
62
+ align: {
63
+ "inline-start": string[];
64
+ "inline-end": string[];
65
+ "block-start": string[];
66
+ "block-end": string[];
67
+ };
68
+ }>, {
69
+ align: {
70
+ "inline-start": string[];
71
+ "inline-end": string[];
72
+ "block-start": string[];
73
+ "block-end": string[];
74
+ };
75
+ }, undefined, import('tailwind-variants').TVReturnType<{
76
+ align: {
77
+ "inline-start": string[];
78
+ "inline-end": string[];
79
+ "block-start": string[];
80
+ "block-end": string[];
81
+ };
82
+ }, undefined, string[], import('tailwind-variants/dist/config.js').TVConfig<{
83
+ align: {
84
+ "inline-start": string[];
85
+ "inline-end": string[];
86
+ "block-start": string[];
87
+ "block-end": string[];
88
+ };
89
+ }, {
90
+ align: {
91
+ "inline-start": string[];
92
+ "inline-end": string[];
93
+ "block-start": string[];
94
+ "block-end": string[];
95
+ };
96
+ }>, unknown, unknown, undefined>>;
97
+ export interface InputGroupProps extends React.FieldsetHTMLAttributes<HTMLFieldSetElement>, VariantProps<typeof inputGroupVariants> {
98
+ }
99
+ /**
100
+ * InputGroup component for combining inputs with addons, buttons, and text.
101
+ *
102
+ * A container that groups an input with prefix/suffix addons, icons, or buttons.
103
+ * Supports inline (left/right) and block (top/bottom) addon positioning.
104
+ *
105
+ * Uses semantic UI tokens for theming support.
106
+ *
107
+ * @example
108
+ * ```tsx
109
+ * // With prefix icon
110
+ * <InputGroup>
111
+ * <InputGroupAddon>
112
+ * <SearchIcon />
113
+ * </InputGroupAddon>
114
+ * <InputGroupInput placeholder="Search..." />
115
+ * </InputGroup>
116
+ *
117
+ * // With suffix button
118
+ * <InputGroup>
119
+ * <InputGroupInput placeholder="Enter email" />
120
+ * <InputGroupAddon align="inline-end">
121
+ * <InputGroupButton>Subscribe</InputGroupButton>
122
+ * </InputGroupAddon>
123
+ * </InputGroup>
124
+ *
125
+ * // With text prefix
126
+ * <InputGroup>
127
+ * <InputGroupAddon>
128
+ * <InputGroupText>https://</InputGroupText>
129
+ * </InputGroupAddon>
130
+ * <InputGroupInput placeholder="example.com" />
131
+ * </InputGroup>
132
+ * ```
133
+ */
134
+ declare function InputGroup({ className, size, disabled, ...props }: InputGroupProps): import("react/jsx-runtime").JSX.Element;
135
+ export interface InputGroupAddonProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof inputGroupAddonVariants> {
136
+ }
137
+ /**
138
+ * InputGroupAddon component for positioning addons within an InputGroup.
139
+ *
140
+ * Can contain icons, text, or buttons. Clicking the addon focuses the input.
141
+ *
142
+ * @example
143
+ * ```tsx
144
+ * // Inline start (default - left side)
145
+ * <InputGroupAddon>
146
+ * <SearchIcon />
147
+ * </InputGroupAddon>
148
+ *
149
+ * // Inline end (right side)
150
+ * <InputGroupAddon align="inline-end">
151
+ * <InputGroupButton>Submit</InputGroupButton>
152
+ * </InputGroupAddon>
153
+ *
154
+ * // Block positions (top/bottom)
155
+ * <InputGroupAddon align="block-start">
156
+ * <label>Email Address</label>
157
+ * </InputGroupAddon>
158
+ * ```
159
+ */
160
+ declare function InputGroupAddon({ className, align, onClick, onKeyDown, ...props }: InputGroupAddonProps): import("react/jsx-runtime").JSX.Element;
161
+ declare const inputGroupButtonVariants: import('tailwind-variants').TVReturnType<{
162
+ size: {
163
+ xs: string;
164
+ sm: string;
165
+ "icon-xs": string;
166
+ "icon-sm": string;
167
+ };
168
+ }, undefined, string[], import('tailwind-variants/dist/config.js').TVConfig<{
169
+ size: {
170
+ xs: string;
171
+ sm: string;
172
+ "icon-xs": string;
173
+ "icon-sm": string;
174
+ };
175
+ }, {
176
+ size: {
177
+ xs: string;
178
+ sm: string;
179
+ "icon-xs": string;
180
+ "icon-sm": string;
181
+ };
182
+ }>, {
183
+ size: {
184
+ xs: string;
185
+ sm: string;
186
+ "icon-xs": string;
187
+ "icon-sm": string;
188
+ };
189
+ }, undefined, import('tailwind-variants').TVReturnType<{
190
+ size: {
191
+ xs: string;
192
+ sm: string;
193
+ "icon-xs": string;
194
+ "icon-sm": string;
195
+ };
196
+ }, undefined, string[], import('tailwind-variants/dist/config.js').TVConfig<{
197
+ size: {
198
+ xs: string;
199
+ sm: string;
200
+ "icon-xs": string;
201
+ "icon-sm": string;
202
+ };
203
+ }, {
204
+ size: {
205
+ xs: string;
206
+ sm: string;
207
+ "icon-xs": string;
208
+ "icon-sm": string;
209
+ };
210
+ }>, unknown, unknown, undefined>>;
211
+ export interface InputGroupButtonProps extends Omit<ButtonProps, "size">, VariantProps<typeof inputGroupButtonVariants> {
212
+ }
213
+ /**
214
+ * InputGroupButton component for inline buttons within an InputGroup.
215
+ *
216
+ * A small button variant designed to fit inside input groups.
217
+ *
218
+ * @example
219
+ * ```tsx
220
+ * <InputGroupAddon align="inline-end">
221
+ * <InputGroupButton>Submit</InputGroupButton>
222
+ * </InputGroupAddon>
223
+ *
224
+ * // Icon button
225
+ * <InputGroupAddon align="inline-end">
226
+ * <InputGroupButton size="icon-xs">
227
+ * <ClearIcon />
228
+ * </InputGroupButton>
229
+ * </InputGroupAddon>
230
+ * ```
231
+ */
232
+ declare function InputGroupButton({ className, type, variant, size, ...props }: InputGroupButtonProps): import("react/jsx-runtime").JSX.Element;
233
+ export interface InputGroupTextProps extends React.HTMLAttributes<HTMLSpanElement> {
234
+ }
235
+ /**
236
+ * InputGroupText component for static text within an InputGroup.
237
+ *
238
+ * Use for prefixes like "https://" or suffixes like ".com"
239
+ *
240
+ * @example
241
+ * ```tsx
242
+ * <InputGroupAddon>
243
+ * <InputGroupText>https://</InputGroupText>
244
+ * </InputGroupAddon>
245
+ * ```
246
+ */
247
+ declare function InputGroupText({ className, ...props }: InputGroupTextProps): import("react/jsx-runtime").JSX.Element;
248
+ export interface InputGroupInputProps extends React.InputHTMLAttributes<HTMLInputElement> {
249
+ }
250
+ /**
251
+ * InputGroupInput component - the input element within an InputGroup.
252
+ *
253
+ * Styled to integrate seamlessly with the InputGroup container.
254
+ *
255
+ * @example
256
+ * ```tsx
257
+ * <InputGroup>
258
+ * <InputGroupInput placeholder="Enter text..." />
259
+ * </InputGroup>
260
+ * ```
261
+ */
262
+ declare function InputGroupInput({ className, ...props }: InputGroupInputProps): import("react/jsx-runtime").JSX.Element;
263
+ export interface InputGroupTextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {
264
+ }
265
+ /**
266
+ * InputGroupTextarea component - a textarea element within an InputGroup.
267
+ *
268
+ * Styled to integrate seamlessly with the InputGroup container.
269
+ *
270
+ * @example
271
+ * ```tsx
272
+ * <InputGroup>
273
+ * <InputGroupTextarea placeholder="Enter long text..." rows={4} />
274
+ * </InputGroup>
275
+ * ```
276
+ */
277
+ declare function InputGroupTextarea({ className, ...props }: InputGroupTextareaProps): import("react/jsx-runtime").JSX.Element;
278
+ export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea, inputGroupVariants, inputGroupAddonVariants, };
@@ -0,0 +1,121 @@
1
+ import { VariantProps } from 'tailwind-variants';
2
+ import * as React from "react";
3
+ /**
4
+ * Input variants for styling based on Figma BaseKit / Interface / Input
5
+ *
6
+ * States (handled via CSS pseudo-classes and props):
7
+ * - Default: White background, subtle border
8
+ * - Hover: Light gray background (via :hover)
9
+ * - Focus: Accent border with focus ring (via :focus-visible)
10
+ * - Error: Error border color (via error prop)
11
+ * - Disabled: Disabled background (via :disabled)
12
+ *
13
+ * Sizes:
14
+ * - sm: Smaller height and padding (36px)
15
+ * - default: Standard height (48px)
16
+ * - lg: Larger height and padding (56px)
17
+ */
18
+ declare const inputVariants: import('tailwind-variants').TVReturnType<{
19
+ size: {
20
+ readonly sm: "h-spatial-ui-input-height-small px-spatial-ui-input-padding-x-small py-spatial-ui-input-padding-y-small typography-body-sm-md";
21
+ readonly default: "h-spatial-ui-input-height-medium px-spatial-ui-input-padding-x-medium py-spatial-ui-input-padding-y-medium typography-body-md-md";
22
+ readonly lg: "h-spatial-ui-input-height-large px-spatial-ui-input-padding-x-large py-spatial-ui-input-padding-y-large typography-body-md-lg";
23
+ };
24
+ error: {
25
+ true: string;
26
+ false: "";
27
+ };
28
+ }, undefined, string[], import('tailwind-variants/dist/config.js').TVConfig<{
29
+ size: {
30
+ readonly sm: "h-spatial-ui-input-height-small px-spatial-ui-input-padding-x-small py-spatial-ui-input-padding-y-small typography-body-sm-md";
31
+ readonly default: "h-spatial-ui-input-height-medium px-spatial-ui-input-padding-x-medium py-spatial-ui-input-padding-y-medium typography-body-md-md";
32
+ readonly lg: "h-spatial-ui-input-height-large px-spatial-ui-input-padding-x-large py-spatial-ui-input-padding-y-large typography-body-md-lg";
33
+ };
34
+ error: {
35
+ true: string;
36
+ false: "";
37
+ };
38
+ }, {
39
+ size: {
40
+ readonly sm: "h-spatial-ui-input-height-small px-spatial-ui-input-padding-x-small py-spatial-ui-input-padding-y-small typography-body-sm-md";
41
+ readonly default: "h-spatial-ui-input-height-medium px-spatial-ui-input-padding-x-medium py-spatial-ui-input-padding-y-medium typography-body-md-md";
42
+ readonly lg: "h-spatial-ui-input-height-large px-spatial-ui-input-padding-x-large py-spatial-ui-input-padding-y-large typography-body-md-lg";
43
+ };
44
+ error: {
45
+ true: string;
46
+ false: "";
47
+ };
48
+ }>, {
49
+ size: {
50
+ readonly sm: "h-spatial-ui-input-height-small px-spatial-ui-input-padding-x-small py-spatial-ui-input-padding-y-small typography-body-sm-md";
51
+ readonly default: "h-spatial-ui-input-height-medium px-spatial-ui-input-padding-x-medium py-spatial-ui-input-padding-y-medium typography-body-md-md";
52
+ readonly lg: "h-spatial-ui-input-height-large px-spatial-ui-input-padding-x-large py-spatial-ui-input-padding-y-large typography-body-md-lg";
53
+ };
54
+ error: {
55
+ true: string;
56
+ false: "";
57
+ };
58
+ }, undefined, import('tailwind-variants').TVReturnType<{
59
+ size: {
60
+ readonly sm: "h-spatial-ui-input-height-small px-spatial-ui-input-padding-x-small py-spatial-ui-input-padding-y-small typography-body-sm-md";
61
+ readonly default: "h-spatial-ui-input-height-medium px-spatial-ui-input-padding-x-medium py-spatial-ui-input-padding-y-medium typography-body-md-md";
62
+ readonly lg: "h-spatial-ui-input-height-large px-spatial-ui-input-padding-x-large py-spatial-ui-input-padding-y-large typography-body-md-lg";
63
+ };
64
+ error: {
65
+ true: string;
66
+ false: "";
67
+ };
68
+ }, undefined, string[], import('tailwind-variants/dist/config.js').TVConfig<{
69
+ size: {
70
+ readonly sm: "h-spatial-ui-input-height-small px-spatial-ui-input-padding-x-small py-spatial-ui-input-padding-y-small typography-body-sm-md";
71
+ readonly default: "h-spatial-ui-input-height-medium px-spatial-ui-input-padding-x-medium py-spatial-ui-input-padding-y-medium typography-body-md-md";
72
+ readonly lg: "h-spatial-ui-input-height-large px-spatial-ui-input-padding-x-large py-spatial-ui-input-padding-y-large typography-body-md-lg";
73
+ };
74
+ error: {
75
+ true: string;
76
+ false: "";
77
+ };
78
+ }, {
79
+ size: {
80
+ readonly sm: "h-spatial-ui-input-height-small px-spatial-ui-input-padding-x-small py-spatial-ui-input-padding-y-small typography-body-sm-md";
81
+ readonly default: "h-spatial-ui-input-height-medium px-spatial-ui-input-padding-x-medium py-spatial-ui-input-padding-y-medium typography-body-md-md";
82
+ readonly lg: "h-spatial-ui-input-height-large px-spatial-ui-input-padding-x-large py-spatial-ui-input-padding-y-large typography-body-md-lg";
83
+ };
84
+ error: {
85
+ true: string;
86
+ false: "";
87
+ };
88
+ }>, unknown, unknown, undefined>>;
89
+ export interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size">, VariantProps<typeof inputVariants> {
90
+ /**
91
+ * Whether the input is in an error state
92
+ */
93
+ error?: boolean;
94
+ }
95
+ /**
96
+ * Input component based on Figma BaseKit / Interface / Input
97
+ *
98
+ * A styled text input with support for various states:
99
+ * - Default, hover, focus, error, and disabled states
100
+ * - Three size variants: sm, default, lg
101
+ *
102
+ * Uses semantic UI tokens for theming support.
103
+ *
104
+ * @example
105
+ * ```tsx
106
+ * // Basic usage
107
+ * <Input placeholder="Enter your email" />
108
+ *
109
+ * // With error state
110
+ * <Input error placeholder="Invalid input" />
111
+ *
112
+ * // Different sizes
113
+ * <Input size="sm" placeholder="Small" />
114
+ * <Input size="lg" placeholder="Large" />
115
+ *
116
+ * // Disabled
117
+ * <Input disabled placeholder="Disabled input" />
118
+ * ```
119
+ */
120
+ declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
121
+ export { Input, inputVariants };
@@ -0,0 +1,195 @@
1
+ import { Popover as BasePopover } from '@base-ui-components/react/popover';
2
+ import { VariantProps } from 'tailwind-variants';
3
+ import * as React from "react";
4
+ /**
5
+ * Popover popup variants
6
+ *
7
+ * Uses semantic overlay tokens for themeable styling:
8
+ * - color.overlay.background - Light background
9
+ * - color.overlay.border - Subtle border
10
+ * - color.overlay.text - Primary text
11
+ * - surface.overlay.radius - Rounded corners
12
+ * - spatial.component.overlay.padding/gap - Consistent spacing
13
+ */
14
+ declare const popoverPopupVariants: import('tailwind-variants').TVReturnType<{
15
+ variant: {
16
+ default: string;
17
+ };
18
+ }, undefined, string[], import('tailwind-variants/dist/config.js').TVConfig<{
19
+ variant: {
20
+ default: string;
21
+ };
22
+ }, {
23
+ variant: {
24
+ default: string;
25
+ };
26
+ }>, {
27
+ variant: {
28
+ default: string;
29
+ };
30
+ }, undefined, import('tailwind-variants').TVReturnType<{
31
+ variant: {
32
+ default: string;
33
+ };
34
+ }, undefined, string[], import('tailwind-variants/dist/config.js').TVConfig<{
35
+ variant: {
36
+ default: string;
37
+ };
38
+ }, {
39
+ variant: {
40
+ default: string;
41
+ };
42
+ }>, unknown, unknown, undefined>>;
43
+ /**
44
+ * Popover arrow variants - uses shared floating arrow variants
45
+ */
46
+ declare const popoverArrowVariants: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], import('tailwind-variants/dist/config.js').TVConfig<unknown, {} | {}>, {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], import('tailwind-variants/dist/config.js').TVConfig<unknown, {} | {}>, unknown, unknown, undefined>>;
47
+ export interface PopoverRootProps extends BasePopover.Root.Props {
48
+ children: React.ReactNode;
49
+ }
50
+ /**
51
+ * Popover Root
52
+ *
53
+ * Groups all popover parts. Does not render an element.
54
+ */
55
+ declare const PopoverRoot: ({ children, ...props }: PopoverRootProps) => import("react/jsx-runtime").JSX.Element;
56
+ export interface PopoverTriggerProps extends React.ComponentProps<typeof BasePopover.Trigger> {
57
+ className?: string;
58
+ }
59
+ /**
60
+ * Popover Trigger
61
+ *
62
+ * The element that triggers the popover on click.
63
+ * Renders as the child element with popover behavior attached.
64
+ * When children is a single React element, uses `render` prop to avoid wrapper element.
65
+ */
66
+ declare const PopoverTrigger: React.ForwardRefExoticComponent<Omit<PopoverTriggerProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
67
+ export interface PopoverPortalProps extends BasePopover.Portal.Props {
68
+ children: React.ReactNode;
69
+ }
70
+ /**
71
+ * Popover Portal
72
+ *
73
+ * Renders the popover popup in a portal outside the DOM hierarchy.
74
+ */
75
+ declare const PopoverPortal: ({ children, ...props }: PopoverPortalProps) => import("react/jsx-runtime").JSX.Element;
76
+ export interface PopoverBackdropProps extends Omit<React.ComponentProps<typeof BasePopover.Backdrop>, "className"> {
77
+ className?: string;
78
+ }
79
+ /**
80
+ * Popover Backdrop
81
+ *
82
+ * Optional backdrop element that can be used to close the popover on click.
83
+ */
84
+ declare const PopoverBackdrop: React.ForwardRefExoticComponent<Omit<PopoverBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
85
+ export interface PopoverPositionerProps extends Omit<React.ComponentProps<typeof BasePopover.Positioner>, "className"> {
86
+ className?: string;
87
+ }
88
+ /**
89
+ * Popover Positioner
90
+ *
91
+ * Positions the popover popup relative to the trigger.
92
+ */
93
+ declare const PopoverPositioner: React.ForwardRefExoticComponent<Omit<PopoverPositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
94
+ export interface PopoverPopupProps extends Omit<React.ComponentProps<typeof BasePopover.Popup>, "className">, VariantProps<typeof popoverPopupVariants> {
95
+ className?: string;
96
+ }
97
+ /**
98
+ * Popover Popup
99
+ *
100
+ * The popover content container with styled appearance.
101
+ */
102
+ declare const PopoverPopup: React.ForwardRefExoticComponent<Omit<PopoverPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
103
+ export interface PopoverArrowProps extends Omit<React.ComponentProps<typeof BasePopover.Arrow>, "className"> {
104
+ className?: string;
105
+ }
106
+ /**
107
+ * Popover Arrow
108
+ *
109
+ * Visual pointer element for the popover.
110
+ * Uses shared FloatingArrowSvg with overlay color tokens for fill and border.
111
+ */
112
+ declare const PopoverArrow: React.ForwardRefExoticComponent<Omit<PopoverArrowProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
113
+ export interface PopoverTitleProps extends Omit<React.ComponentProps<typeof BasePopover.Title>, "className"> {
114
+ className?: string;
115
+ }
116
+ /**
117
+ * Popover Title
118
+ *
119
+ * Title element for the popover content.
120
+ */
121
+ declare const PopoverTitle: React.ForwardRefExoticComponent<Omit<PopoverTitleProps, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
122
+ export interface PopoverDescriptionProps extends Omit<React.ComponentProps<typeof BasePopover.Description>, "className"> {
123
+ className?: string;
124
+ }
125
+ /**
126
+ * Popover Description
127
+ *
128
+ * Description element for the popover content.
129
+ */
130
+ declare const PopoverDescription: React.ForwardRefExoticComponent<Omit<PopoverDescriptionProps, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
131
+ export interface PopoverCloseProps extends Omit<React.ComponentProps<typeof BasePopover.Close>, "className"> {
132
+ className?: string;
133
+ }
134
+ /**
135
+ * Popover Close
136
+ *
137
+ * Close button for the popover.
138
+ */
139
+ declare const PopoverClose: React.ForwardRefExoticComponent<Omit<PopoverCloseProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
140
+ export interface PopoverProps {
141
+ /** The content to show in the popover */
142
+ children: React.ReactNode;
143
+ /** The element that triggers the popover */
144
+ trigger: React.ReactNode;
145
+ /** Title for the popover (optional) */
146
+ title?: React.ReactNode;
147
+ /** Side of the trigger to show the popover */
148
+ side?: "top" | "bottom" | "left" | "right";
149
+ /** Offset from the trigger */
150
+ sideOffset?: number;
151
+ /** Alignment along the side */
152
+ align?: "start" | "center" | "end";
153
+ /** Whether to show an arrow */
154
+ showArrow?: boolean;
155
+ /** Whether to show a close button */
156
+ showClose?: boolean;
157
+ /** Controlled open state */
158
+ open?: boolean;
159
+ /** Default open state */
160
+ defaultOpen?: boolean;
161
+ /** Callback when open state changes */
162
+ onOpenChange?: (open: boolean) => void;
163
+ /** Additional className for the popup */
164
+ className?: string;
165
+ }
166
+ /**
167
+ * Popover
168
+ *
169
+ * A simple, pre-composed popover component for common use cases.
170
+ * For more complex needs, use the compound components directly.
171
+ *
172
+ * @example
173
+ * ```tsx
174
+ * <Popover
175
+ * trigger={<Button>Click me</Button>}
176
+ * title="Popover Title"
177
+ * >
178
+ * <p>This is the popover content.</p>
179
+ * </Popover>
180
+ * ```
181
+ */
182
+ declare const Popover: ({ children, trigger, title, side, sideOffset, align, showArrow, showClose, open, defaultOpen, onOpenChange, className, }: PopoverProps) => import("react/jsx-runtime").JSX.Element;
183
+ export declare const PopoverParts: (({ children, ...props }: PopoverRootProps) => import("react/jsx-runtime").JSX.Element) & {
184
+ Root: ({ children, ...props }: PopoverRootProps) => import("react/jsx-runtime").JSX.Element;
185
+ Trigger: React.ForwardRefExoticComponent<Omit<PopoverTriggerProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
186
+ Portal: ({ children, ...props }: PopoverPortalProps) => import("react/jsx-runtime").JSX.Element;
187
+ Backdrop: React.ForwardRefExoticComponent<Omit<PopoverBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
188
+ Positioner: React.ForwardRefExoticComponent<Omit<PopoverPositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
189
+ Popup: React.ForwardRefExoticComponent<Omit<PopoverPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
190
+ Arrow: React.ForwardRefExoticComponent<Omit<PopoverArrowProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
191
+ Title: React.ForwardRefExoticComponent<Omit<PopoverTitleProps, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
192
+ Description: React.ForwardRefExoticComponent<Omit<PopoverDescriptionProps, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
193
+ Close: React.ForwardRefExoticComponent<Omit<PopoverCloseProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
194
+ };
195
+ export { Popover, PopoverRoot, PopoverTrigger, PopoverPortal, PopoverBackdrop, PopoverPositioner, PopoverPopup, PopoverArrow, PopoverTitle, PopoverDescription, PopoverClose, popoverPopupVariants, popoverArrowVariants, };