@medalsocial/meda 2.8.0 → 3.0.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 (174) hide show
  1. package/README.md +105 -2
  2. package/dist/auth/auth-message.d.ts +3 -3
  3. package/dist/auth/auth-provider-button.d.ts +1 -1
  4. package/dist/auth/auth-provider-list.d.ts +1 -1
  5. package/dist/auth/better-auth.d.ts +3 -3
  6. package/dist/brand/medal-social-mark.d.ts +1 -1
  7. package/dist/calendar/calendar-toolbar.d.ts +1 -1
  8. package/dist/calendar/calendar.d.ts +1 -1
  9. package/dist/calendar/day-view.d.ts +1 -1
  10. package/dist/calendar/internal/day-cell.d.ts +1 -1
  11. package/dist/calendar/internal/event-pill.d.ts +1 -1
  12. package/dist/calendar/internal/time-slot.d.ts +1 -1
  13. package/dist/calendar/month-view.d.ts +1 -1
  14. package/dist/calendar/week-view.d.ts +1 -1
  15. package/dist/chat/latency-badge.d.ts +1 -1
  16. package/dist/chat/latency-breakdown.d.ts +1 -1
  17. package/dist/chat/tool-call-block.d.ts +1 -1
  18. package/dist/chat/transcript-stream.d.ts +1 -1
  19. package/dist/chat/turn-card.d.ts +1 -1
  20. package/dist/components/ui/checkbox.d.ts +1 -1
  21. package/dist/components/ui/collapsible.d.ts +3 -3
  22. package/dist/components/ui/command.d.ts +9 -9
  23. package/dist/components/ui/dialog.d.ts +10 -10
  24. package/dist/components/ui/drawer.d.ts +10 -10
  25. package/dist/components/ui/dropdown-menu.d.ts +15 -15
  26. package/dist/components/ui/tooltip.d.ts +4 -4
  27. package/dist/email-builder/block-palette.d.ts +1 -1
  28. package/dist/email-builder/block-renderer.d.ts +1 -1
  29. package/dist/email-builder/block-renderers/button.d.ts +1 -1
  30. package/dist/email-builder/block-renderers/columns.d.ts +1 -1
  31. package/dist/email-builder/block-renderers/divider.d.ts +1 -1
  32. package/dist/email-builder/block-renderers/footer.d.ts +1 -1
  33. package/dist/email-builder/block-renderers/heading.d.ts +1 -1
  34. package/dist/email-builder/block-renderers/image.d.ts +1 -1
  35. package/dist/email-builder/block-renderers/social.d.ts +1 -1
  36. package/dist/email-builder/block-renderers/spacer.d.ts +1 -1
  37. package/dist/email-builder/block-renderers/text.d.ts +1 -1
  38. package/dist/email-builder/builder-canvas.d.ts +1 -1
  39. package/dist/email-builder/builder-header.d.ts +1 -1
  40. package/dist/email-builder/builder-left-tabs.d.ts +1 -1
  41. package/dist/email-builder/email-builder.d.ts +1 -1
  42. package/dist/email-builder/envelope-card.d.ts +1 -1
  43. package/dist/email-builder/floating-bar.d.ts +1 -1
  44. package/dist/email-builder/internal/dnd-wrapper.d.ts +1 -1
  45. package/dist/email-builder/mobile-drawers.d.ts +1 -1
  46. package/dist/email-builder/mobile-tab-bar.d.ts +1 -1
  47. package/dist/email-builder/property-editors/_shared.d.ts +8 -8
  48. package/dist/email-builder/property-editors/button-editor.d.ts +1 -1
  49. package/dist/email-builder/property-editors/columns-editor.d.ts +1 -1
  50. package/dist/email-builder/property-editors/divider-editor.d.ts +1 -1
  51. package/dist/email-builder/property-editors/footer-editor.d.ts +1 -1
  52. package/dist/email-builder/property-editors/heading-editor.d.ts +1 -1
  53. package/dist/email-builder/property-editors/image-editor.d.ts +1 -1
  54. package/dist/email-builder/property-editors/social-editor.d.ts +1 -1
  55. package/dist/email-builder/property-editors/spacer-editor.d.ts +1 -1
  56. package/dist/email-builder/property-editors/text-editor.d.ts +1 -1
  57. package/dist/email-builder/property-inspector.d.ts +1 -1
  58. package/dist/email-builder/view-controls.d.ts +1 -1
  59. package/dist/kanban/kanban-board.d.ts +1 -1
  60. package/dist/kanban/kanban-card-wrapper.d.ts +1 -1
  61. package/dist/kanban/kanban-column.d.ts +1 -1
  62. package/dist/list/list-row.d.ts +2 -2
  63. package/dist/marketing/marketing-announcement-bar.d.ts +1 -1
  64. package/dist/marketing/marketing-bento-card.d.ts +1 -1
  65. package/dist/marketing/marketing-bento-grid.d.ts +1 -1
  66. package/dist/marketing/marketing-callout.d.ts +1 -1
  67. package/dist/marketing/marketing-contact.d.ts +1 -1
  68. package/dist/marketing/marketing-cta-list.d.ts +1 -1
  69. package/dist/marketing/marketing-cta.d.ts +1 -1
  70. package/dist/marketing/marketing-faq.d.ts +1 -1
  71. package/dist/marketing/marketing-footer.d.ts +1 -1
  72. package/dist/marketing/marketing-header-logo.d.ts +1 -1
  73. package/dist/marketing/marketing-header.d.ts +1 -1
  74. package/dist/marketing/marketing-hero.d.ts +1 -1
  75. package/dist/marketing/marketing-lead-magnet.d.ts +1 -1
  76. package/dist/marketing/marketing-mega-menu.d.ts +1 -1
  77. package/dist/marketing/marketing-nav-item.d.ts +1 -1
  78. package/dist/marketing/marketing-numbered-features.d.ts +1 -1
  79. package/dist/marketing/marketing-shell.d.ts +1 -1
  80. package/dist/marketing/marketing-trust-bar.d.ts +1 -1
  81. package/dist/panel/inspector-field.d.ts +1 -1
  82. package/dist/panel/inspector-json.d.ts +1 -1
  83. package/dist/panel/inspector.d.ts +1 -1
  84. package/dist/post-preview/internal/avatar.d.ts +1 -1
  85. package/dist/post-preview/platforms/bluesky.d.ts +1 -1
  86. package/dist/post-preview/platforms/discord.d.ts +1 -1
  87. package/dist/post-preview/platforms/facebook.d.ts +1 -1
  88. package/dist/post-preview/platforms/generic.d.ts +1 -1
  89. package/dist/post-preview/platforms/google-business.d.ts +1 -1
  90. package/dist/post-preview/platforms/instagram.d.ts +1 -1
  91. package/dist/post-preview/platforms/linkedin.d.ts +1 -1
  92. package/dist/post-preview/platforms/telegram.d.ts +1 -1
  93. package/dist/post-preview/platforms/threads.d.ts +1 -1
  94. package/dist/post-preview/platforms/tiktok.d.ts +1 -1
  95. package/dist/post-preview/platforms/twitter.d.ts +1 -1
  96. package/dist/post-preview/platforms/youtube.d.ts +1 -1
  97. package/dist/primitives/avatar.d.ts +24 -0
  98. package/dist/primitives/avatar.js +44 -0
  99. package/dist/primitives/button.d.ts +21 -0
  100. package/dist/primitives/button.js +51 -0
  101. package/dist/primitives/card.d.ts +4 -4
  102. package/dist/primitives/empty-state.d.ts +1 -1
  103. package/dist/primitives/filter-rail.d.ts +2 -2
  104. package/dist/primitives/index.d.ts +8 -0
  105. package/dist/primitives/index.js +4 -0
  106. package/dist/primitives/input.d.ts +10 -0
  107. package/dist/primitives/input.js +9 -0
  108. package/dist/primitives/markdown-view.d.ts +1 -1
  109. package/dist/primitives/skeleton.d.ts +1 -1
  110. package/dist/primitives/status-pill.d.ts +1 -1
  111. package/dist/primitives/toggle-group.d.ts +46 -0
  112. package/dist/primitives/toggle-group.js +148 -0
  113. package/dist/shell/app-shell-auth.d.ts +1 -1
  114. package/dist/shell/app-shell-chat.d.ts +1 -1
  115. package/dist/shell/app-shell-workspace.d.ts +1 -1
  116. package/dist/shell/app-shell.d.ts +2 -2
  117. package/dist/shell/command-palette.d.ts +1 -1
  118. package/dist/shell/context-rail.d.ts +1 -1
  119. package/dist/shell/drag-mode-banner.d.ts +1 -1
  120. package/dist/shell/extras/shell-desktop-panel-dock.d.ts +1 -1
  121. package/dist/shell/extras/shell-scrollable-content.d.ts +1 -1
  122. package/dist/shell/extras/shell-tab-bar.d.ts +1 -1
  123. package/dist/shell/extras/workbench-layout.d.ts +1 -1
  124. package/dist/shell/icon-rail.d.ts +2 -2
  125. package/dist/shell/internal/mobile-bottom-nav.d.ts +1 -1
  126. package/dist/shell/internal/mobile-dock.d.ts +1 -1
  127. package/dist/shell/internal/mobile-dock.js +2 -2
  128. package/dist/shell/internal/mobile-drawers.d.ts +1 -1
  129. package/dist/shell/internal/mobile-header.d.ts +1 -1
  130. package/dist/shell/internal/mobile-workspace-sheet.d.ts +1 -1
  131. package/dist/shell/panel-views-provider.d.ts +1 -1
  132. package/dist/shell/rail-drop-slot.d.ts +1 -1
  133. package/dist/shell/rail-drop-zones.d.ts +1 -1
  134. package/dist/shell/resizable-shell.d.ts +3 -3
  135. package/dist/shell/right-panel.d.ts +1 -1
  136. package/dist/shell/shell-header.d.ts +4 -4
  137. package/dist/shell/shell-main.d.ts +1 -1
  138. package/dist/shell/shell-provider.d.ts +1 -1
  139. package/dist/shell/theme-next-themes.d.ts +1 -1
  140. package/dist/shell/theme.d.ts +2 -2
  141. package/dist/shell/use-shell-viewport.js +3 -1
  142. package/dist/styles/base.css +40 -0
  143. package/dist/styles/bridge.css +159 -0
  144. package/dist/styles/calendar.css +8 -0
  145. package/dist/styles/primitives.css +10 -0
  146. package/dist/styles/theme.css +12 -162
  147. package/dist/styles/vendor/xyflow.css +626 -0
  148. package/dist/styles/workflow-builder.css +17 -0
  149. package/dist/timeline/date-switcher.d.ts +1 -1
  150. package/dist/timeline/event-card.d.ts +1 -1
  151. package/dist/timeline/lane-timeline.d.ts +1 -1
  152. package/dist/timeline/lane.d.ts +1 -1
  153. package/dist/timeline/live-indicator.d.ts +1 -1
  154. package/dist/timeline/scrub-bar.d.ts +1 -1
  155. package/dist/timeline/time-axis.d.ts +1 -1
  156. package/dist/timeline/timeline-rail.d.ts +1 -1
  157. package/dist/timeline/timeline-tape.d.ts +1 -1
  158. package/dist/voice/voice-level.d.ts +2 -1
  159. package/dist/voice/voice-orb-scene.d.ts +2 -1
  160. package/dist/voice/voice-status-pill.d.ts +1 -1
  161. package/dist/workflow-builder/edges/default-edge.d.ts +1 -1
  162. package/dist/workflow-builder/nodes/action-node.d.ts +1 -1
  163. package/dist/workflow-builder/nodes/base-node.d.ts +1 -1
  164. package/dist/workflow-builder/nodes/condition-node.d.ts +1 -1
  165. package/dist/workflow-builder/nodes/delay-node.d.ts +1 -1
  166. package/dist/workflow-builder/nodes/end-node.d.ts +1 -1
  167. package/dist/workflow-builder/nodes/trigger-node.d.ts +1 -1
  168. package/dist/workflow-builder/workflow-builder.d.ts +1 -1
  169. package/dist/workflow-builder/workflow-canvas.d.ts +1 -1
  170. package/dist/workflow-builder/workflow-card-compact.d.ts +1 -1
  171. package/dist/workflow-builder/workflow-card.d.ts +1 -1
  172. package/dist/workflow-builder/workflow-header.d.ts +1 -1
  173. package/dist/workflow-builder/workflow-toolbox.d.ts +1 -1
  174. package/package.json +76 -46
@@ -6,5 +6,5 @@ interface MobileDrawerProps {
6
6
  children: ReactNode;
7
7
  }
8
8
  /** Generic bottom-sheet drawer used for the mobile palette/inspector. */
9
- export declare function MobileDrawer({ open, onOpenChange, title, children }: MobileDrawerProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function MobileDrawer({ open, onOpenChange, title, children }: MobileDrawerProps): import("react").JSX.Element;
10
10
  export {};
@@ -6,5 +6,5 @@ interface MobileTabBarProps {
6
6
  onOpenSettings: () => void;
7
7
  }
8
8
  /** Bottom-of-screen tab bar visible on mobile. */
9
- export declare function MobileTabBar({ labels, onOpenBlocks, onOpenInspector, onOpenSettings, }: MobileTabBarProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function MobileTabBar({ labels, onOpenBlocks, onOpenInspector, onOpenSettings, }: MobileTabBarProps): import("react").JSX.Element;
10
10
  export {};
@@ -9,21 +9,21 @@ export declare function Field({ label, htmlFor, children, }: {
9
9
  label: string;
10
10
  htmlFor?: string;
11
11
  children: ReactNode;
12
- }): import("react/jsx-runtime").JSX.Element;
12
+ }): import("react").JSX.Element;
13
13
  export declare function TextInput({ id, value, onChange, placeholder, 'aria-label': ariaLabel, }: {
14
14
  id?: string;
15
15
  value: string;
16
16
  onChange: (next: string) => void;
17
17
  placeholder?: string;
18
18
  'aria-label'?: string;
19
- }): import("react/jsx-runtime").JSX.Element;
19
+ }): import("react").JSX.Element;
20
20
  export declare function TextAreaInput({ id, value, onChange, rows, 'aria-label': ariaLabel, }: {
21
21
  id?: string;
22
22
  value: string;
23
23
  onChange: (next: string) => void;
24
24
  rows?: number;
25
25
  'aria-label'?: string;
26
- }): import("react/jsx-runtime").JSX.Element;
26
+ }): import("react").JSX.Element;
27
27
  export declare function NumberInput({ id, value, onChange, min, max, step, 'aria-label': ariaLabel, }: {
28
28
  id?: string;
29
29
  value: number;
@@ -32,12 +32,12 @@ export declare function NumberInput({ id, value, onChange, min, max, step, 'aria
32
32
  max?: number;
33
33
  step?: number;
34
34
  'aria-label'?: string;
35
- }): import("react/jsx-runtime").JSX.Element;
35
+ }): import("react").JSX.Element;
36
36
  export declare function ColorInput({ id, value, onChange, }: {
37
37
  id?: string;
38
38
  value: string;
39
39
  onChange: (next: string) => void;
40
- }): import("react/jsx-runtime").JSX.Element;
40
+ }): import("react").JSX.Element;
41
41
  export declare function SelectInput<T extends string>({ id, value, options, onChange, 'aria-label': ariaLabel, }: {
42
42
  id?: string;
43
43
  value: T;
@@ -47,12 +47,12 @@ export declare function SelectInput<T extends string>({ id, value, options, onCh
47
47
  }[];
48
48
  onChange: (next: T) => void;
49
49
  'aria-label'?: string;
50
- }): import("react/jsx-runtime").JSX.Element;
50
+ }): import("react").JSX.Element;
51
51
  export declare function AlignmentToggle({ value, onChange, }: {
52
52
  value: Alignment;
53
53
  onChange: (next: Alignment) => void;
54
- }): import("react/jsx-runtime").JSX.Element;
54
+ }): import("react").JSX.Element;
55
55
  export declare function SpacingEditor({ value, onChange, }: {
56
56
  value: SpacingValue;
57
57
  onChange: (next: SpacingValue) => void;
58
- }): import("react/jsx-runtime").JSX.Element;
58
+ }): import("react").JSX.Element;
@@ -3,5 +3,5 @@ interface Props {
3
3
  value: ButtonBlockProps;
4
4
  onChange: (patch: Partial<ButtonBlockProps>) => void;
5
5
  }
6
- export declare function ButtonPropertyEditor({ value, onChange }: Props): import("react/jsx-runtime").JSX.Element;
6
+ export declare function ButtonPropertyEditor({ value, onChange }: Props): import("react").JSX.Element;
7
7
  export {};
@@ -3,5 +3,5 @@ interface Props {
3
3
  value: ColumnsBlockProps;
4
4
  onChange: (patch: Partial<ColumnsBlockProps>) => void;
5
5
  }
6
- export declare function ColumnsPropertyEditor({ value, onChange }: Props): import("react/jsx-runtime").JSX.Element;
6
+ export declare function ColumnsPropertyEditor({ value, onChange }: Props): import("react").JSX.Element;
7
7
  export {};
@@ -3,5 +3,5 @@ interface Props {
3
3
  value: DividerBlockProps;
4
4
  onChange: (patch: Partial<DividerBlockProps>) => void;
5
5
  }
6
- export declare function DividerPropertyEditor({ value, onChange }: Props): import("react/jsx-runtime").JSX.Element;
6
+ export declare function DividerPropertyEditor({ value, onChange }: Props): import("react").JSX.Element;
7
7
  export {};
@@ -3,5 +3,5 @@ interface Props {
3
3
  value: FooterBlockProps;
4
4
  onChange: (patch: Partial<FooterBlockProps>) => void;
5
5
  }
6
- export declare function FooterPropertyEditor({ value, onChange }: Props): import("react/jsx-runtime").JSX.Element;
6
+ export declare function FooterPropertyEditor({ value, onChange }: Props): import("react").JSX.Element;
7
7
  export {};
@@ -3,5 +3,5 @@ interface Props {
3
3
  value: HeadingBlockProps;
4
4
  onChange: (patch: Partial<HeadingBlockProps>) => void;
5
5
  }
6
- export declare function HeadingPropertyEditor({ value, onChange }: Props): import("react/jsx-runtime").JSX.Element;
6
+ export declare function HeadingPropertyEditor({ value, onChange }: Props): import("react").JSX.Element;
7
7
  export {};
@@ -4,5 +4,5 @@ interface Props {
4
4
  onChange: (patch: Partial<ImageBlockProps>) => void;
5
5
  renderMediaPicker?: EmailBuilderProps['renderMediaPicker'];
6
6
  }
7
- export declare function ImagePropertyEditor({ value, onChange, renderMediaPicker }: Props): import("react/jsx-runtime").JSX.Element;
7
+ export declare function ImagePropertyEditor({ value, onChange, renderMediaPicker }: Props): import("react").JSX.Element;
8
8
  export {};
@@ -3,5 +3,5 @@ interface Props {
3
3
  value: SocialBlockProps;
4
4
  onChange: (patch: Partial<SocialBlockProps>) => void;
5
5
  }
6
- export declare function SocialPropertyEditor({ value, onChange }: Props): import("react/jsx-runtime").JSX.Element;
6
+ export declare function SocialPropertyEditor({ value, onChange }: Props): import("react").JSX.Element;
7
7
  export {};
@@ -3,5 +3,5 @@ interface Props {
3
3
  value: SpacerBlockProps;
4
4
  onChange: (patch: Partial<SpacerBlockProps>) => void;
5
5
  }
6
- export declare function SpacerPropertyEditor({ value, onChange }: Props): import("react/jsx-runtime").JSX.Element;
6
+ export declare function SpacerPropertyEditor({ value, onChange }: Props): import("react").JSX.Element;
7
7
  export {};
@@ -9,5 +9,5 @@ interface Props {
9
9
  onChange: (next: string) => void;
10
10
  }) => ReactNode;
11
11
  }
12
- export declare function TextPropertyEditor({ value, onChange, renderEditor }: Props): import("react/jsx-runtime").JSX.Element;
12
+ export declare function TextPropertyEditor({ value, onChange, renderEditor }: Props): import("react").JSX.Element;
13
13
  export {};
@@ -7,5 +7,5 @@ interface PropertyInspectorProps {
7
7
  renderMediaPicker?: EmailBuilderProps['renderMediaPicker'];
8
8
  renderTextEditor?: EmailBuilderProps['renderTextEditor'];
9
9
  }
10
- export declare function PropertyInspector({ block, onChange, emptyContent, renderMediaPicker, renderTextEditor, }: PropertyInspectorProps): import("react/jsx-runtime").JSX.Element;
10
+ export declare function PropertyInspector({ block, onChange, emptyContent, renderMediaPicker, renderTextEditor, }: PropertyInspectorProps): import("react").JSX.Element;
11
11
  export {};
@@ -6,5 +6,5 @@ interface ViewControlsProps {
6
6
  mobileLabel: string;
7
7
  }
8
8
  /** Toggle between desktop and mobile preview modes. */
9
- export declare function ViewControls({ device, onDeviceChange, desktopLabel, mobileLabel, }: ViewControlsProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function ViewControls({ device, onDeviceChange, desktopLabel, mobileLabel, }: ViewControlsProps): import("react").JSX.Element;
10
10
  export {};
@@ -5,4 +5,4 @@ import { type KanbanBoardProps, type KanbanItem } from './types.js';
5
5
  * A reusable drag-and-drop kanban board that can be used across
6
6
  * different features (Deals, Ideas, etc.)
7
7
  */
8
- export declare function KanbanBoard<TItem extends KanbanItem, TStatus extends string = string>(props: KanbanBoardProps<TItem, TStatus>): import("react/jsx-runtime").JSX.Element;
8
+ export declare function KanbanBoard<TItem extends KanbanItem, TStatus extends string = string>(props: KanbanBoardProps<TItem, TStatus>): import("react").JSX.Element;
@@ -12,5 +12,5 @@ interface KanbanCardWrapperProps {
12
12
  *
13
13
  * Wraps card content to make it draggable within the kanban board.
14
14
  */
15
- export declare function KanbanCardWrapper({ id, isDragging, children }: KanbanCardWrapperProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare function KanbanCardWrapper({ id, isDragging, children }: KanbanCardWrapperProps): import("react").JSX.Element;
16
16
  export {};
@@ -15,5 +15,5 @@ interface KanbanColumnProps<TItem extends KanbanItem> {
15
15
  *
16
16
  * A single column in the kanban board that can receive dropped items.
17
17
  */
18
- export declare function KanbanColumn<TItem extends KanbanItem>({ column, count, isOver, onAddItem, onHideColumn, labels, children, }: KanbanColumnProps<TItem>): import("react/jsx-runtime").JSX.Element;
18
+ export declare function KanbanColumn<TItem extends KanbanItem>({ column, count, isOver, onAddItem, onHideColumn, labels, children, }: KanbanColumnProps<TItem>): import("react").JSX.Element;
19
19
  export {};
@@ -33,7 +33,7 @@ export interface ListRowProps {
33
33
  * A Linear-style list row with checkbox, hover states, and click handling.
34
34
  * Compact ~40-48px height for dense, scannable lists.
35
35
  */
36
- export declare function ListRow({ selected, selectionActive, onSelect, onClick, onMouseEnter, onMouseLeave, onFocus, onBlur, focused, children, className, }: ListRowProps): import("react/jsx-runtime").JSX.Element;
36
+ export declare function ListRow({ selected, selectionActive, onSelect, onClick, onMouseEnter, onMouseLeave, onFocus, onBlur, focused, children, className, }: ListRowProps): import("react").JSX.Element;
37
37
  /**
38
38
  * Cell wrapper for consistent column sizing
39
39
  */
@@ -49,4 +49,4 @@ export interface ListCellProps {
49
49
  /** Additional class names */
50
50
  className?: string;
51
51
  }
52
- export declare function ListCell({ width, shrink, align, children, className, }: ListCellProps): import("react/jsx-runtime").JSX.Element;
52
+ export declare function ListCell({ width, shrink, align, children, className, }: ListCellProps): import("react").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import type { MarketingAnnouncementBarProps } from './types.js';
2
- export declare function MarketingAnnouncementBar({ href, icon, children, className, }: MarketingAnnouncementBarProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function MarketingAnnouncementBar({ href, icon, children, className, }: MarketingAnnouncementBarProps): import("react").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import type { MarketingBentoCardProps } from './types.js';
2
- export declare function MarketingBentoCard({ colSpan, rowSpan, variant, icon, title, description, children, href, className, }: MarketingBentoCardProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function MarketingBentoCard({ colSpan, rowSpan, variant, icon, title, description, children, href, className, }: MarketingBentoCardProps): import("react").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import type { MarketingBentoGridProps } from './types.js';
2
- export declare function MarketingBentoGrid({ cols, children, className }: MarketingBentoGridProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function MarketingBentoGrid({ cols, children, className }: MarketingBentoGridProps): import("react").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import type { MarketingCalloutProps } from './types.js';
2
- export declare function MarketingCallout({ eyebrow, title, description, children, ctas, variant, align, className, }: MarketingCalloutProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function MarketingCallout({ eyebrow, title, description, children, ctas, variant, align, className, }: MarketingCalloutProps): import("react").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import type { MarketingContactProps } from './types.js';
2
- export declare function MarketingContact({ intro, form, office, contactPerson, compact, className, }: MarketingContactProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function MarketingContact({ intro, form, office, contactPerson, compact, className, }: MarketingContactProps): import("react").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import type { MarketingCtaListProps } from './types.js';
2
- export declare function MarketingCtaList({ ctas, align, className }: MarketingCtaListProps): import("react/jsx-runtime").JSX.Element | null;
2
+ export declare function MarketingCtaList({ ctas, align, className }: MarketingCtaListProps): import("react").JSX.Element | null;
@@ -1,2 +1,2 @@
1
1
  import type { MarketingCTAProps } from './types.js';
2
- export declare function MarketingCTA({ eyebrow, title, subtitle, ctas, className }: MarketingCTAProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function MarketingCTA({ eyebrow, title, subtitle, ctas, className }: MarketingCTAProps): import("react").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import type { MarketingFAQProps } from './types.js';
2
- export declare function MarketingFAQ({ eyebrow, title, items, defaultOpenId, className, }: MarketingFAQProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function MarketingFAQ({ eyebrow, title, items, defaultOpenId, className, }: MarketingFAQProps): import("react").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import type { MarketingFooterProps } from './types.js';
2
- export declare function MarketingFooter({ brand, tagline, columns, bottomSlot, className, }: MarketingFooterProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function MarketingFooter({ brand, tagline, columns, bottomSlot, className, }: MarketingFooterProps): import("react").JSX.Element;
@@ -7,4 +7,4 @@ export interface MarketingHeaderLogoProps {
7
7
  label?: string;
8
8
  className?: string;
9
9
  }
10
- export declare function MarketingHeaderLogo({ mark, word, href, label, className, }: MarketingHeaderLogoProps): import("react/jsx-runtime").JSX.Element;
10
+ export declare function MarketingHeaderLogo({ mark, word, href, label, className, }: MarketingHeaderLogoProps): import("react").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import type { MarketingHeaderProps } from './types.js';
2
- export declare function MarketingHeader({ logo, navItems, user, signInHref, signUpHref, appHref, rightSlot, toggles, renderLoggedOut, renderLoggedIn, className, }: MarketingHeaderProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function MarketingHeader({ logo, navItems, user, signInHref, signUpHref, appHref, rightSlot, toggles, renderLoggedOut, renderLoggedIn, className, }: MarketingHeaderProps): import("react").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import type { MarketingHeroProps } from './types.js';
2
- export declare function MarketingHero({ eyebrow, headline, subtitle, ctas, meta, productMockup, className, }: MarketingHeroProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function MarketingHero({ eyebrow, headline, subtitle, ctas, meta, productMockup, className, }: MarketingHeroProps): import("react").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import type { MarketingLeadMagnetProps } from './types.js';
2
- export declare function MarketingLeadMagnet({ title, description, benefits, image, buttonText, formTitle, form, variant, open, defaultOpen, onOpenChange, className, }: MarketingLeadMagnetProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function MarketingLeadMagnet({ title, description, benefits, image, buttonText, formTitle, form, variant, open, defaultOpen, onOpenChange, className, }: MarketingLeadMagnetProps): import("react").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import type { MarketingMegaMenuProps } from './types.js';
2
- export declare function MarketingMegaMenu({ triggerId, open, onOpenChange, features, children, className, }: MarketingMegaMenuProps): import("react/jsx-runtime").JSX.Element | null;
2
+ export declare function MarketingMegaMenu({ triggerId, open, onOpenChange, features, children, className, }: MarketingMegaMenuProps): import("react").JSX.Element | null;
@@ -3,4 +3,4 @@ export declare function MarketingNavItem({ id, label, className, open, onToggle,
3
3
  className?: string;
4
4
  open?: boolean;
5
5
  onToggle?: () => void;
6
- }): import("react/jsx-runtime").JSX.Element;
6
+ }): import("react").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import type { MarketingNumberedFeaturesProps } from './types.js';
2
- export declare function MarketingNumberedFeatures({ eyebrow, title, features, className, }: MarketingNumberedFeaturesProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function MarketingNumberedFeatures({ eyebrow, title, features, className, }: MarketingNumberedFeaturesProps): import("react").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import type { MarketingShellProps } from './types.js';
2
- export declare function MarketingShell({ header, footer, children, className }: MarketingShellProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function MarketingShell({ header, footer, children, className }: MarketingShellProps): import("react").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import type { MarketingTrustBarProps } from './types.js';
2
- export declare function MarketingTrustBar({ eyebrow, title, stats, className }: MarketingTrustBarProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function MarketingTrustBar({ eyebrow, title, stats, className }: MarketingTrustBarProps): import("react").JSX.Element;
@@ -6,4 +6,4 @@ export interface InspectorFieldProps {
6
6
  hint?: ReactNode;
7
7
  className?: string;
8
8
  }
9
- export declare function InspectorField({ label, value, hint, className }: InspectorFieldProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function InspectorField({ label, value, hint, className }: InspectorFieldProps): import("react").JSX.Element;
@@ -4,4 +4,4 @@ export interface InspectorJSONProps {
4
4
  indent?: number;
5
5
  className?: string;
6
6
  }
7
- export declare function InspectorJSON({ data, indent, className }: InspectorJSONProps): import("react/jsx-runtime").JSX.Element;
7
+ export declare function InspectorJSON({ data, indent, className }: InspectorJSONProps): import("react").JSX.Element;
@@ -4,4 +4,4 @@ export interface InspectorProps {
4
4
  defaultTab?: string;
5
5
  className?: string;
6
6
  }
7
- export declare function Inspector({ tabs, defaultTab, className }: InspectorProps): import("react/jsx-runtime").JSX.Element;
7
+ export declare function Inspector({ tabs, defaultTab, className }: InspectorProps): import("react").JSX.Element;
@@ -9,4 +9,4 @@ export interface AvatarProps {
9
9
  * from the public surface so we don't lock consumers in. Consumers
10
10
  * who want a richer Avatar primitive should pull one from elsewhere.
11
11
  */
12
- export declare function Avatar({ src, displayName, className }: AvatarProps): import("react/jsx-runtime").JSX.Element;
12
+ export declare function Avatar({ src, displayName, className }: AvatarProps): import("react").JSX.Element;
@@ -12,4 +12,4 @@ export interface BlueSkyPreviewProps extends PostPreviewBaseProps {
12
12
  * BlueSky feed-card preview. Auto-formats the username with `.bsky.social`
13
13
  * if no domain is present.
14
14
  */
15
- export declare function BlueSkyPreview({ displayName, username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, }: BlueSkyPreviewProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare function BlueSkyPreview({ displayName, username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, }: BlueSkyPreviewProps): import("react").JSX.Element;
@@ -41,4 +41,4 @@ export interface DiscordPreviewProps extends PostPreviewBaseProps {
41
41
  * Discord channel message preview. Renders the user message followed by
42
42
  * any embeds (unless `suppressEmbeds` is true).
43
43
  */
44
- export declare function DiscordPreview({ displayName, username: _username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, embeds, suppressEmbeds, }: DiscordPreviewProps): import("react/jsx-runtime").JSX.Element;
44
+ export declare function DiscordPreview({ displayName, username: _username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, embeds, suppressEmbeds, }: DiscordPreviewProps): import("react").JSX.Element;
@@ -20,4 +20,4 @@ export interface FacebookPreviewProps extends PostPreviewBaseProps {
20
20
  * Facebook feed-card preview. Renders displayName, avatar, content, optional
21
21
  * media grid, and the standard Like/Comment/Share footer.
22
22
  */
23
- export declare function FacebookPreview({ displayName, username: _username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, }: FacebookPreviewProps): import("react/jsx-runtime").JSX.Element;
23
+ export declare function FacebookPreview({ displayName, username: _username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, }: FacebookPreviewProps): import("react").JSX.Element;
@@ -19,4 +19,4 @@ export interface GenericPreviewProps extends PostPreviewBaseProps {
19
19
  * component. Layout is intentionally neutral so it composes well inside
20
20
  * `PlatformChrome` if a consumer wants to add device framing.
21
21
  */
22
- export declare function GenericPreview({ platform, displayName, username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, }: GenericPreviewProps): import("react/jsx-runtime").JSX.Element;
22
+ export declare function GenericPreview({ platform, displayName, username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, }: GenericPreviewProps): import("react").JSX.Element;
@@ -15,4 +15,4 @@ export interface GoogleBusinessPreviewProps extends PostPreviewBaseProps {
15
15
  * Google Business Profile update-post preview. Renders the business name,
16
16
  * timestamp, content, optional media, and a Learn-more CTA button.
17
17
  */
18
- export declare function GoogleBusinessPreview({ displayName, username: _username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, }: GoogleBusinessPreviewProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare function GoogleBusinessPreview({ displayName, username: _username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, }: GoogleBusinessPreviewProps): import("react").JSX.Element;
@@ -28,4 +28,4 @@ export interface InstagramPreviewProps extends PostPreviewBaseProps {
28
28
  * Instagram preview supporting Feed / Carousel / Reel / Story layouts.
29
29
  * Auto-detects `carousel` when more than one media URL is present.
30
30
  */
31
- export declare function InstagramPreview({ displayName, username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, instagramPostType, }: InstagramPreviewProps): import("react/jsx-runtime").JSX.Element;
31
+ export declare function InstagramPreview({ displayName, username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, instagramPostType, }: InstagramPreviewProps): import("react").JSX.Element;
@@ -49,4 +49,4 @@ export interface LinkedInPreviewProps extends PostPreviewBaseProps {
49
49
  * content with optional `@mention` highlight spans, media grid, and the
50
50
  * standard Like/Comment/Repost/Send footer.
51
51
  */
52
- export declare function LinkedInPreview({ displayName, username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, mentions, onMentionsChange, renderMentionPicker, }: LinkedInPreviewProps): import("react/jsx-runtime").JSX.Element;
52
+ export declare function LinkedInPreview({ displayName, username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, mentions, onMentionsChange, renderMentionPicker, }: LinkedInPreviewProps): import("react").JSX.Element;
@@ -43,4 +43,4 @@ export interface TelegramPreviewProps extends PostPreviewBaseProps {
43
43
  * Telegram channel post preview. Renders a chat bubble with optional
44
44
  * poll, pinned indicator, and inline keyboard.
45
45
  */
46
- export declare function TelegramPreview({ displayName, username: _username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, poll, pinMessage, replyMarkup, }: TelegramPreviewProps): import("react/jsx-runtime").JSX.Element;
46
+ export declare function TelegramPreview({ displayName, username: _username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, poll, pinMessage, replyMarkup, }: TelegramPreviewProps): import("react").JSX.Element;
@@ -16,4 +16,4 @@ export interface ThreadsPreviewProps extends PostPreviewBaseProps {
16
16
  * Threads feed-card preview. Honors a parent `.dark` class for the dark
17
17
  * variant the platform itself uses.
18
18
  */
19
- export declare function ThreadsPreview({ displayName, username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, }: ThreadsPreviewProps): import("react/jsx-runtime").JSX.Element;
19
+ export declare function ThreadsPreview({ displayName, username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, }: ThreadsPreviewProps): import("react").JSX.Element;
@@ -15,4 +15,4 @@ export interface TikTokPreviewProps extends PostPreviewBaseProps {
15
15
  * TikTok video-overlay preview. Always renders against a dark background to
16
16
  * match the platform's video-first UI.
17
17
  */
18
- export declare function TikTokPreview({ displayName, username, avatarUrl, content, editable, onContentChange, className, labels, }: TikTokPreviewProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare function TikTokPreview({ displayName, username, avatarUrl, content, editable, onContentChange, className, labels, }: TikTokPreviewProps): import("react").JSX.Element;
@@ -37,4 +37,4 @@ export interface TwitterPreviewProps extends PostPreviewBaseProps {
37
37
  * Twitter / X feed-card preview. Supports light, dim, and lights-out
38
38
  * themes plus an optional `@mention` picker render slot.
39
39
  */
40
- export declare function TwitterPreview({ displayName, username, avatarUrl, content, mediaUrls, characterLimit, editable, onContentChange, className, labels, theme, renderMentionPicker, }: TwitterPreviewProps): import("react/jsx-runtime").JSX.Element;
40
+ export declare function TwitterPreview({ displayName, username, avatarUrl, content, mediaUrls, characterLimit, editable, onContentChange, className, labels, theme, renderMentionPicker, }: TwitterPreviewProps): import("react").JSX.Element;
@@ -14,4 +14,4 @@ export interface YouTubePreviewProps extends PostPreviewBaseProps {
14
14
  /**
15
15
  * YouTube community-post preview. Honors `.dark` for the dark variant.
16
16
  */
17
- export declare function YouTubePreview({ displayName, username: _username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, }: YouTubePreviewProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function YouTubePreview({ displayName, username: _username, avatarUrl, content, mediaUrls, editable, onContentChange, className, labels, }: YouTubePreviewProps): import("react").JSX.Element;
@@ -0,0 +1,24 @@
1
+ import { type ComponentProps } from 'react';
2
+ export type AvatarSize = 'sm' | 'md' | 'lg';
3
+ export interface AvatarProps extends Omit<ComponentProps<'span'>, 'children'> {
4
+ /** Person or entity name. Drives the accessible name and the initials. */
5
+ name: string;
6
+ /** Image URL. Falls back to initials when missing or when it fails to load. */
7
+ src?: string | null;
8
+ /** Override the computed initials (e.g. a single brand letter). */
9
+ initials?: string;
10
+ size?: AvatarSize;
11
+ }
12
+ /**
13
+ * Up to two initials from a name, letters only: the first letter of the first
14
+ * and of the last word. Digits, punctuation and emoji are ignored, so
15
+ * "Ali (Medal) 2" gives "AM" and " " gives "". Any script is supported via
16
+ * Unicode letter classes ("Åse Øien" -> "ÅØ").
17
+ */
18
+ export declare function getInitials(name: string): string;
19
+ /**
20
+ * Image avatar with an initials fallback. The wrapper carries `role="img"` +
21
+ * `aria-label={name}`, so the name is announced once whether the photo or the
22
+ * initials are showing.
23
+ */
24
+ export declare function Avatar({ name, src, initials, size, className, ...props }: AvatarProps): import("react").JSX.Element;
@@ -0,0 +1,44 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useCallback, useState } from 'react';
4
+ import { cn } from '../lib/utils.js';
5
+ const SIZE_CLASSES = {
6
+ sm: 'size-8 text-xs',
7
+ md: 'size-10 text-sm',
8
+ lg: 'size-12 text-base',
9
+ };
10
+ /**
11
+ * Up to two initials from a name, letters only: the first letter of the first
12
+ * and of the last word. Digits, punctuation and emoji are ignored, so
13
+ * "Ali (Medal) 2" gives "AM" and " " gives "". Any script is supported via
14
+ * Unicode letter classes ("Åse Øien" -> "ÅØ").
15
+ */
16
+ export function getInitials(name) {
17
+ const words = name
18
+ .split(/\s+/)
19
+ .map((word) => word.replace(/[^\p{L}]/gu, ''))
20
+ .filter(Boolean);
21
+ if (words.length === 0)
22
+ return '';
23
+ const first = words[0] ?? '';
24
+ const last = words.length > 1 ? (words[words.length - 1] ?? '') : '';
25
+ return (Array.from(first)[0] ?? '').concat(Array.from(last)[0] ?? '').toLocaleUpperCase();
26
+ }
27
+ /**
28
+ * Image avatar with an initials fallback. The wrapper carries `role="img"` +
29
+ * `aria-label={name}`, so the name is announced once whether the photo or the
30
+ * initials are showing.
31
+ */
32
+ export function Avatar({ name, src, initials, size = 'md', className, ...props }) {
33
+ // Keyed by URL, so a new `src` automatically gets a fresh chance.
34
+ const [failedSrc, setFailedSrc] = useState(null);
35
+ const showImage = Boolean(src) && failedSrc !== src;
36
+ const text = initials ?? getInitials(name);
37
+ // An SSR-rendered <img> can fail before React hydrates and attaches
38
+ // onError; catch that case by inspecting the element once it mounts.
39
+ const imageRef = useCallback((image) => {
40
+ if (image?.complete && image.naturalWidth === 0 && src)
41
+ setFailedSrc(src);
42
+ }, [src]);
43
+ return (_jsx("span", { role: "img", "aria-label": name, "data-slot": "avatar", "data-size": size, "data-state": showImage ? 'image' : 'fallback', className: cn('relative inline-flex shrink-0 select-none items-center justify-center overflow-hidden rounded-full bg-muted font-medium text-muted-foreground', SIZE_CLASSES[size], className), ...props, children: showImage ? (_jsx("img", { ref: imageRef, src: src ?? undefined, alt: "", decoding: "async", loading: "lazy", onError: () => setFailedSrc(src ?? null), className: "size-full object-cover" })) : (_jsx("span", { "aria-hidden": "true", "data-slot": "avatar-fallback", children: text })) }));
44
+ }
@@ -0,0 +1,21 @@
1
+ import type { ButtonHTMLAttributes, ComponentProps, ReactNode } from 'react';
2
+ import { type RenderElement } from '../lib/render-element.js';
3
+ export type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'outline';
4
+ export type ButtonSize = 'sm' | 'md' | 'lg';
5
+ export interface ButtonProps extends ComponentProps<'button'> {
6
+ variant?: ButtonVariant;
7
+ size?: ButtonSize;
8
+ /**
9
+ * Shows a spinner, sets `aria-busy`, and swallows clicks while keeping the
10
+ * button focusable (so focus is not lost mid-submit) and its width stable.
11
+ */
12
+ loading?: boolean;
13
+ /** Screen-reader text announced while `loading`. Defaults to "Loading". */
14
+ loadingLabel?: string;
15
+ /**
16
+ * Render as another element (e.g. a router `<Link>` or `<a>`), merging
17
+ * meda's props and classes onto it — same pattern as `AuthProviderButton`.
18
+ */
19
+ render?: RenderElement<ButtonHTMLAttributes<HTMLElement>>;
20
+ }
21
+ export declare function Button({ variant, size, loading, loadingLabel, render, type, disabled, className, children, onClick, ...props }: ButtonProps): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | import("react").JSX.Element | null | undefined;
@@ -0,0 +1,51 @@
1
+ 'use client';
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { LoaderCircle } from 'lucide-react';
4
+ import { renderElement } from '../lib/render-element.js';
5
+ import { cn } from '../lib/utils.js';
6
+ // Semantic tokens only, so a consumer's own `--primary` / `--secondary` /
7
+ // `--accent` re-theme the button without touching meda.
8
+ const VARIANT_CLASSES = {
9
+ primary: 'bg-primary text-primary-foreground hover:bg-primary/90',
10
+ secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
11
+ ghost: 'text-foreground hover:bg-accent hover:text-accent-foreground',
12
+ outline: 'border border-border bg-background text-foreground hover:bg-accent hover:text-accent-foreground',
13
+ };
14
+ const SIZE_CLASSES = {
15
+ sm: 'h-8 gap-1.5 px-3 text-xs [&_svg]:size-3.5',
16
+ md: 'h-10 gap-2 px-4 text-sm [&_svg]:size-4',
17
+ lg: 'h-11 gap-2 px-5 text-base [&_svg]:size-4',
18
+ };
19
+ export function Button({ variant = 'primary', size = 'md', loading = false, loadingLabel = 'Loading', render, type = 'button', disabled, className, children, onClick, ...props }) {
20
+ // A rendered link can't be natively disabled, so swallow its clicks too.
21
+ const inert = loading || (render !== undefined && Boolean(disabled));
22
+ const handleClick = (event) => {
23
+ if (inert) {
24
+ event.preventDefault();
25
+ return;
26
+ }
27
+ onClick?.(event);
28
+ };
29
+ const content = (_jsxs(_Fragment, { children: [loading ? (_jsxs(_Fragment, { children: [_jsx(LoaderCircle, { "data-slot": "button-spinner", "aria-hidden": "true", className: "animate-spin motion-reduce:animate-none" }), _jsx("span", { className: "sr-only", children: loadingLabel })] })) : null, children] }));
30
+ const buttonProps = {
31
+ ...props,
32
+ 'data-slot': 'button',
33
+ 'data-variant': variant,
34
+ 'data-size': size,
35
+ 'data-loading': loading || undefined,
36
+ 'aria-busy': loading || undefined,
37
+ 'aria-disabled': loading || undefined,
38
+ className: cn('relative inline-flex shrink-0 select-none items-center justify-center whitespace-nowrap rounded-md font-medium transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 data-loading:cursor-progress [&_svg]:pointer-events-none [&_svg]:shrink-0', VARIANT_CLASSES[variant], SIZE_CLASSES[size], className),
39
+ onClick: handleClick,
40
+ children: content,
41
+ };
42
+ if (render) {
43
+ // Non-button hosts (links) have no `disabled`; expose it via ARIA instead.
44
+ return renderElement(render, {
45
+ ...buttonProps,
46
+ 'aria-disabled': inert || undefined,
47
+ 'data-disabled': disabled || undefined,
48
+ });
49
+ }
50
+ return _jsx("button", { type: type, disabled: disabled, ...buttonProps });
51
+ }
@@ -3,10 +3,10 @@ export type CardProps = ComponentPropsWithoutRef<'div'>;
3
3
  export type CardHeaderProps = ComponentPropsWithoutRef<'div'>;
4
4
  export type CardBodyProps = ComponentPropsWithoutRef<'div'>;
5
5
  export type CardFooterProps = ComponentPropsWithoutRef<'div'>;
6
- declare function CardRoot({ children, className, ...props }: CardProps): import("react/jsx-runtime").JSX.Element;
7
- declare function CardHeader({ children, className, ...props }: CardHeaderProps): import("react/jsx-runtime").JSX.Element;
8
- declare function CardBody({ children, className, ...props }: CardBodyProps): import("react/jsx-runtime").JSX.Element;
9
- declare function CardFooter({ children, className, ...props }: CardFooterProps): import("react/jsx-runtime").JSX.Element;
6
+ declare function CardRoot({ children, className, ...props }: CardProps): import("react").JSX.Element;
7
+ declare function CardHeader({ children, className, ...props }: CardHeaderProps): import("react").JSX.Element;
8
+ declare function CardBody({ children, className, ...props }: CardBodyProps): import("react").JSX.Element;
9
+ declare function CardFooter({ children, className, ...props }: CardFooterProps): import("react").JSX.Element;
10
10
  export declare const Card: typeof CardRoot & {
11
11
  Header: typeof CardHeader;
12
12
  Body: typeof CardBody;
@@ -8,4 +8,4 @@ export interface EmptyStateProps extends Omit<ComponentPropsWithoutRef<'div'>, '
8
8
  action?: ReactNode;
9
9
  variant?: EmptyStateVariant;
10
10
  }
11
- export declare function EmptyState({ icon, title, description, action, variant, className, ...props }: EmptyStateProps): import("react/jsx-runtime").JSX.Element;
11
+ export declare function EmptyState({ icon, title, description, action, variant, className, ...props }: EmptyStateProps): import("react").JSX.Element;