@leonardaustin/ui 0.1.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 (189) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +44 -0
  3. package/dist/components/app-shell/AppShell.d.ts +38 -0
  4. package/dist/components/app-shell/AppShell.d.ts.map +1 -0
  5. package/dist/components/app-shell/AuthLayout.d.ts +7 -0
  6. package/dist/components/app-shell/AuthLayout.d.ts.map +1 -0
  7. package/dist/components/app-shell/BackLink.d.ts +10 -0
  8. package/dist/components/app-shell/BackLink.d.ts.map +1 -0
  9. package/dist/components/app-shell/BottomNav.d.ts +10 -0
  10. package/dist/components/app-shell/BottomNav.d.ts.map +1 -0
  11. package/dist/components/app-shell/Breadcrumbs.d.ts +9 -0
  12. package/dist/components/app-shell/Breadcrumbs.d.ts.map +1 -0
  13. package/dist/components/app-shell/CommandPalette.d.ts +19 -0
  14. package/dist/components/app-shell/CommandPalette.d.ts.map +1 -0
  15. package/dist/components/app-shell/MobileDrawer.d.ts +13 -0
  16. package/dist/components/app-shell/MobileDrawer.d.ts.map +1 -0
  17. package/dist/components/app-shell/Sidebar.d.ts +20 -0
  18. package/dist/components/app-shell/Sidebar.d.ts.map +1 -0
  19. package/dist/components/app-shell/TopBar.d.ts +15 -0
  20. package/dist/components/app-shell/TopBar.d.ts.map +1 -0
  21. package/dist/components/app-shell/commandPaletteEvents.d.ts +12 -0
  22. package/dist/components/app-shell/commandPaletteEvents.d.ts.map +1 -0
  23. package/dist/components/app-shell/navigation.d.ts +7 -0
  24. package/dist/components/app-shell/navigation.d.ts.map +1 -0
  25. package/dist/components/app-shell/types.d.ts +33 -0
  26. package/dist/components/app-shell/types.d.ts.map +1 -0
  27. package/dist/components/charts/AreaChart.d.ts +10 -0
  28. package/dist/components/charts/AreaChart.d.ts.map +1 -0
  29. package/dist/components/charts/BarChart.d.ts +10 -0
  30. package/dist/components/charts/BarChart.d.ts.map +1 -0
  31. package/dist/components/charts/DonutChart.d.ts +12 -0
  32. package/dist/components/charts/DonutChart.d.ts.map +1 -0
  33. package/dist/components/charts/RadarChart.d.ts +13 -0
  34. package/dist/components/charts/RadarChart.d.ts.map +1 -0
  35. package/dist/components/charts/RadialBarChart.d.ts +13 -0
  36. package/dist/components/charts/RadialBarChart.d.ts.map +1 -0
  37. package/dist/components/charts/SparkLine.d.ts +7 -0
  38. package/dist/components/charts/SparkLine.d.ts.map +1 -0
  39. package/dist/components/charts/VerticalBarChart.d.ts +11 -0
  40. package/dist/components/charts/VerticalBarChart.d.ts.map +1 -0
  41. package/dist/components/tables/ColumnPicker.d.ts +33 -0
  42. package/dist/components/tables/ColumnPicker.d.ts.map +1 -0
  43. package/dist/components/tables/Pagination.d.ts +8 -0
  44. package/dist/components/tables/Pagination.d.ts.map +1 -0
  45. package/dist/components/tables/ResourceTable.d.ts +56 -0
  46. package/dist/components/tables/ResourceTable.d.ts.map +1 -0
  47. package/dist/components/tables/sortRows.d.ts +13 -0
  48. package/dist/components/tables/sortRows.d.ts.map +1 -0
  49. package/dist/components/ui/Alert.d.ts +11 -0
  50. package/dist/components/ui/Alert.d.ts.map +1 -0
  51. package/dist/components/ui/AuthCard.d.ts +11 -0
  52. package/dist/components/ui/AuthCard.d.ts.map +1 -0
  53. package/dist/components/ui/AuthorByline.d.ts +57 -0
  54. package/dist/components/ui/AuthorByline.d.ts.map +1 -0
  55. package/dist/components/ui/Avatar.d.ts +8 -0
  56. package/dist/components/ui/Avatar.d.ts.map +1 -0
  57. package/dist/components/ui/Badge.d.ts +10 -0
  58. package/dist/components/ui/Badge.d.ts.map +1 -0
  59. package/dist/components/ui/Button.d.ts +63 -0
  60. package/dist/components/ui/Button.d.ts.map +1 -0
  61. package/dist/components/ui/CalendarGrid.d.ts +23 -0
  62. package/dist/components/ui/CalendarGrid.d.ts.map +1 -0
  63. package/dist/components/ui/Card.d.ts +9 -0
  64. package/dist/components/ui/Card.d.ts.map +1 -0
  65. package/dist/components/ui/Checkbox.d.ts +10 -0
  66. package/dist/components/ui/Checkbox.d.ts.map +1 -0
  67. package/dist/components/ui/Combobox.d.ts +15 -0
  68. package/dist/components/ui/Combobox.d.ts.map +1 -0
  69. package/dist/components/ui/DangerZone.d.ts +40 -0
  70. package/dist/components/ui/DangerZone.d.ts.map +1 -0
  71. package/dist/components/ui/DatePicker.d.ts +11 -0
  72. package/dist/components/ui/DatePicker.d.ts.map +1 -0
  73. package/dist/components/ui/DateRangePicker.d.ts +13 -0
  74. package/dist/components/ui/DateRangePicker.d.ts.map +1 -0
  75. package/dist/components/ui/DateTimePicker.d.ts +9 -0
  76. package/dist/components/ui/DateTimePicker.d.ts.map +1 -0
  77. package/dist/components/ui/DetailPanel.d.ts +19 -0
  78. package/dist/components/ui/DetailPanel.d.ts.map +1 -0
  79. package/dist/components/ui/Dialog.d.ts +28 -0
  80. package/dist/components/ui/Dialog.d.ts.map +1 -0
  81. package/dist/components/ui/DialogActions.d.ts +52 -0
  82. package/dist/components/ui/DialogActions.d.ts.map +1 -0
  83. package/dist/components/ui/DividerLabel.d.ts +7 -0
  84. package/dist/components/ui/DividerLabel.d.ts.map +1 -0
  85. package/dist/components/ui/DropdownMenu.d.ts +27 -0
  86. package/dist/components/ui/DropdownMenu.d.ts.map +1 -0
  87. package/dist/components/ui/EmptyState.d.ts +11 -0
  88. package/dist/components/ui/EmptyState.d.ts.map +1 -0
  89. package/dist/components/ui/ErrorBoundary.d.ts +16 -0
  90. package/dist/components/ui/ErrorBoundary.d.ts.map +1 -0
  91. package/dist/components/ui/FilterButton.d.ts +47 -0
  92. package/dist/components/ui/FilterButton.d.ts.map +1 -0
  93. package/dist/components/ui/FilterDropdown.d.ts +50 -0
  94. package/dist/components/ui/FilterDropdown.d.ts.map +1 -0
  95. package/dist/components/ui/Kbd.d.ts +7 -0
  96. package/dist/components/ui/Kbd.d.ts.map +1 -0
  97. package/dist/components/ui/LoadingSpinner.d.ts +7 -0
  98. package/dist/components/ui/LoadingSpinner.d.ts.map +1 -0
  99. package/dist/components/ui/MetadataGrid.d.ts +45 -0
  100. package/dist/components/ui/MetadataGrid.d.ts.map +1 -0
  101. package/dist/components/ui/MetricCard.d.ts +12 -0
  102. package/dist/components/ui/MetricCard.d.ts.map +1 -0
  103. package/dist/components/ui/OAuthButton.d.ts +8 -0
  104. package/dist/components/ui/OAuthButton.d.ts.map +1 -0
  105. package/dist/components/ui/PageHeader.d.ts +44 -0
  106. package/dist/components/ui/PageHeader.d.ts.map +1 -0
  107. package/dist/components/ui/PageSection.d.ts +13 -0
  108. package/dist/components/ui/PageSection.d.ts.map +1 -0
  109. package/dist/components/ui/PaginationBar.d.ts +58 -0
  110. package/dist/components/ui/PaginationBar.d.ts.map +1 -0
  111. package/dist/components/ui/PasswordInput.d.ts +8 -0
  112. package/dist/components/ui/PasswordInput.d.ts.map +1 -0
  113. package/dist/components/ui/ProfileHeader.d.ts +54 -0
  114. package/dist/components/ui/ProfileHeader.d.ts.map +1 -0
  115. package/dist/components/ui/ProseContent.d.ts +7 -0
  116. package/dist/components/ui/ProseContent.d.ts.map +1 -0
  117. package/dist/components/ui/RadioPill.d.ts +14 -0
  118. package/dist/components/ui/RadioPill.d.ts.map +1 -0
  119. package/dist/components/ui/SearchInput.d.ts +8 -0
  120. package/dist/components/ui/SearchInput.d.ts.map +1 -0
  121. package/dist/components/ui/SectionHeader.d.ts +35 -0
  122. package/dist/components/ui/SectionHeader.d.ts.map +1 -0
  123. package/dist/components/ui/Select.d.ts +12 -0
  124. package/dist/components/ui/Select.d.ts.map +1 -0
  125. package/dist/components/ui/SelectDropdown.d.ts +16 -0
  126. package/dist/components/ui/SelectDropdown.d.ts.map +1 -0
  127. package/dist/components/ui/SettingRow.d.ts +42 -0
  128. package/dist/components/ui/SettingRow.d.ts.map +1 -0
  129. package/dist/components/ui/SideSheet.d.ts +14 -0
  130. package/dist/components/ui/SideSheet.d.ts.map +1 -0
  131. package/dist/components/ui/Slider.d.ts +14 -0
  132. package/dist/components/ui/Slider.d.ts.map +1 -0
  133. package/dist/components/ui/SplitPaneLayout.d.ts +73 -0
  134. package/dist/components/ui/SplitPaneLayout.d.ts.map +1 -0
  135. package/dist/components/ui/StatusDot.d.ts +9 -0
  136. package/dist/components/ui/StatusDot.d.ts.map +1 -0
  137. package/dist/components/ui/StepProgress.d.ts +11 -0
  138. package/dist/components/ui/StepProgress.d.ts.map +1 -0
  139. package/dist/components/ui/Tabs.d.ts +18 -0
  140. package/dist/components/ui/Tabs.d.ts.map +1 -0
  141. package/dist/components/ui/TextInput.d.ts +13 -0
  142. package/dist/components/ui/TextInput.d.ts.map +1 -0
  143. package/dist/components/ui/Textarea.d.ts +9 -0
  144. package/dist/components/ui/Textarea.d.ts.map +1 -0
  145. package/dist/components/ui/ThemePreview.d.ts +14 -0
  146. package/dist/components/ui/ThemePreview.d.ts.map +1 -0
  147. package/dist/components/ui/Timeline.d.ts +39 -0
  148. package/dist/components/ui/Timeline.d.ts.map +1 -0
  149. package/dist/components/ui/Toast.d.ts +21 -0
  150. package/dist/components/ui/Toast.d.ts.map +1 -0
  151. package/dist/components/ui/Toggle.d.ts +9 -0
  152. package/dist/components/ui/Toggle.d.ts.map +1 -0
  153. package/dist/components/ui/Toolbar.d.ts +11 -0
  154. package/dist/components/ui/Toolbar.d.ts.map +1 -0
  155. package/dist/components/ui/Tooltip.d.ts +10 -0
  156. package/dist/components/ui/Tooltip.d.ts.map +1 -0
  157. package/dist/components/ui/UploadDropzone.d.ts +13 -0
  158. package/dist/components/ui/UploadDropzone.d.ts.map +1 -0
  159. package/dist/config/theme.d.ts +43 -0
  160. package/dist/config/theme.d.ts.map +1 -0
  161. package/dist/hooks/useApplyTheme.d.ts +7 -0
  162. package/dist/hooks/useApplyTheme.d.ts.map +1 -0
  163. package/dist/hooks/useDismiss.d.ts +8 -0
  164. package/dist/hooks/useDismiss.d.ts.map +1 -0
  165. package/dist/hooks/useDropUp.d.ts +7 -0
  166. package/dist/hooks/useDropUp.d.ts.map +1 -0
  167. package/dist/hooks/useFocusTrap.d.ts +7 -0
  168. package/dist/hooks/useFocusTrap.d.ts.map +1 -0
  169. package/dist/hooks/useSettings.d.ts +8 -0
  170. package/dist/hooks/useSettings.d.ts.map +1 -0
  171. package/dist/hooks/useTheme.d.ts +6 -0
  172. package/dist/hooks/useTheme.d.ts.map +1 -0
  173. package/dist/index.d.ts +91 -0
  174. package/dist/index.d.ts.map +1 -0
  175. package/dist/index.js +4622 -0
  176. package/dist/lib/cn.d.ts +3 -0
  177. package/dist/lib/cn.d.ts.map +1 -0
  178. package/dist/lib/formatDate.d.ts +28 -0
  179. package/dist/lib/formatDate.d.ts.map +1 -0
  180. package/dist/providers/SettingsContext.d.ts +60 -0
  181. package/dist/providers/SettingsContext.d.ts.map +1 -0
  182. package/dist/providers/SettingsProvider.d.ts +7 -0
  183. package/dist/providers/SettingsProvider.d.ts.map +1 -0
  184. package/dist/providers/ThemeContext.d.ts +8 -0
  185. package/dist/providers/ThemeContext.d.ts.map +1 -0
  186. package/dist/providers/ThemeProvider.d.ts +5 -0
  187. package/dist/providers/ThemeProvider.d.ts.map +1 -0
  188. package/dist/styles.css +923 -0
  189. package/package.json +63 -0
@@ -0,0 +1,57 @@
1
+ /**
2
+ * AuthorByline — avatar + author name + metadata (date, read time, etc.).
3
+ *
4
+ * A compact author attribution row used in blog posts and content pages.
5
+ * Displays the author's avatar alongside their name and an optional
6
+ * secondary line of metadata (typically a date and read time).
7
+ *
8
+ * Two sizes are available:
9
+ * - `"sm"` (default) — 10px text, used in blog cards and compact contexts
10
+ * - `"md"` — 12px name / 10px meta, used in article pages and content sections
11
+ *
12
+ * @example Blog card (compact)
13
+ * ```tsx
14
+ * <AuthorByline
15
+ * name="Alex Chen"
16
+ * meta="Apr 5, 2026 · 4 min read"
17
+ * />
18
+ * ```
19
+ *
20
+ * @example Article page (larger)
21
+ * ```tsx
22
+ * <AuthorByline
23
+ * size="md"
24
+ * name="Alex Chen"
25
+ * meta="Apr 5, 2026 · 4 min read"
26
+ * nameAppend={
27
+ * <span className="text-text-tertiary font-normal"> · Staff Engineer</span>
28
+ * }
29
+ * />
30
+ * ```
31
+ */
32
+ import type { ReactNode } from "react";
33
+ interface AuthorBylineProps {
34
+ /** Author display name. */
35
+ name: string;
36
+ /**
37
+ * Secondary metadata string displayed below the name.
38
+ * Typically "Apr 5, 2026 · 4 min read".
39
+ */
40
+ meta?: string;
41
+ /**
42
+ * Optional content appended after the name on the same line.
43
+ * Useful for displaying a role or badge inline with the name.
44
+ */
45
+ nameAppend?: ReactNode;
46
+ /**
47
+ * Text size variant.
48
+ * - "sm" (default): text-2xs for both name and meta — used in cards
49
+ * - "md": text-xs name / text-2xs meta — used in article and content pages
50
+ */
51
+ size?: "sm" | "md";
52
+ /** Additional utility classes for the root container. */
53
+ className?: string;
54
+ }
55
+ export declare function AuthorByline({ name, meta, nameAppend, size, className, }: AuthorBylineProps): import("react/jsx-runtime").JSX.Element;
56
+ export {};
57
+ //# sourceMappingURL=AuthorByline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthorByline.d.ts","sourceRoot":"","sources":["../../../src/components/ui/AuthorByline.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,UAAU,iBAAiB;IACzB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;OAIG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,IAAW,EACX,SAAS,GACV,EAAE,iBAAiB,2CAoBnB"}
@@ -0,0 +1,8 @@
1
+ export interface AvatarProps {
2
+ name: string;
3
+ src?: string;
4
+ size?: "xs" | "sm" | "md" | "lg";
5
+ className?: string;
6
+ }
7
+ export declare function Avatar({ name, src, size, className }: AvatarProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=Avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Avatar.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0BD,wBAAgB,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAW,EAAE,SAAS,EAAE,EAAE,WAAW,2CAsBxE"}
@@ -0,0 +1,10 @@
1
+ export type BadgeColor = "green" | "yellow" | "red" | "blue" | "purple" | "gray";
2
+ interface BadgeProps {
3
+ color?: BadgeColor;
4
+ dot?: boolean;
5
+ children: React.ReactNode;
6
+ className?: string;
7
+ }
8
+ export declare function Badge({ color, dot, children, className, }: BadgeProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=Badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Badge.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAClB,OAAO,GACP,QAAQ,GACR,KAAK,GACL,MAAM,GACN,QAAQ,GACR,MAAM,CAAC;AAEX,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAoBD,wBAAgB,KAAK,CAAC,EACpB,KAAc,EACd,GAAG,EACH,QAAQ,EACR,SAAS,GACV,EAAE,UAAU,2CAiBZ"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Button — the primary interactive element across the template.
3
+ *
4
+ * Supports five visual variants, three sizes, loading states, and
5
+ * responsive icon+label patterns via the `icon` prop.
6
+ *
7
+ * ## Responsive icon+label pattern
8
+ *
9
+ * Many toolbar buttons show an icon on all screens but only reveal the
10
+ * text label on larger breakpoints. Instead of manually wrapping children
11
+ * in `<span className="hidden sm:inline">`, use the `icon` prop:
12
+ *
13
+ * ```tsx
14
+ * // Icon always visible, label hidden below `sm` (640px)
15
+ * <Button icon={Trash2} hideLabel>Delete</Button>
16
+ *
17
+ * // Icon always visible, label hidden below `lg` (1024px)
18
+ * <Button icon={MailOpen} hideLabel="lg">Read</Button>
19
+ *
20
+ * // Icon always visible, label always visible (no hiding)
21
+ * <Button icon={Plus}>New Item</Button>
22
+ * ```
23
+ *
24
+ * This replaces the old pattern of:
25
+ * ```tsx
26
+ * <Button>
27
+ * <Trash2 className="h-3.5 w-3.5" />
28
+ * <span className="hidden sm:inline">Delete</span>
29
+ * </Button>
30
+ * ```
31
+ *
32
+ * When `hideLabel` is set and the label is hidden, the button's horizontal
33
+ * padding automatically shrinks on small screens so it doesn't look
34
+ * unbalanced as an icon-only button.
35
+ */
36
+ import { type ButtonHTMLAttributes, type ElementType, type ReactNode } from "react";
37
+ type Variant = "primary" | "secondary" | "danger" | "ghost" | "icon";
38
+ type Size = "sm" | "md" | "lg";
39
+ export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
40
+ variant?: Variant;
41
+ size?: Size;
42
+ loading?: boolean;
43
+ /**
44
+ * Optional Lucide icon component rendered before children.
45
+ * Pass the component itself (e.g. `Trash2`), not JSX.
46
+ * The icon is always visible regardless of `hideLabel`.
47
+ */
48
+ icon?: ElementType;
49
+ /**
50
+ * When set, hides the label text below the given breakpoint.
51
+ * - `true` or `"sm"` — label hidden below 640px (most common)
52
+ * - `"md"` — label hidden below 768px
53
+ * - `"lg"` — label hidden below 1024px
54
+ *
55
+ * Only meaningful when both `icon` and `children` are provided.
56
+ * On small screens the button renders as icon-only with tighter padding.
57
+ */
58
+ hideLabel?: boolean | "sm" | "md" | "lg";
59
+ children?: ReactNode;
60
+ }
61
+ export declare const Button: import("react").ForwardRefExoticComponent<ButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
62
+ export {};
63
+ //# sourceMappingURL=Button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Button.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAMf,KAAK,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AACrE,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/B,MAAM,WAAW,WAAY,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AA8CD,eAAO,MAAM,MAAM,2GAyDlB,CAAC"}
@@ -0,0 +1,23 @@
1
+ interface CalendarGridProps {
2
+ /** Currently displayed month (year, month). */
3
+ year: number;
4
+ month: number;
5
+ /** The single selected date (for single pickers). */
6
+ selected?: Date | null;
7
+ /** Start of a selected range. */
8
+ rangeStart?: Date | null;
9
+ /** End of a selected range. */
10
+ rangeEnd?: Date | null;
11
+ /** Date currently being hovered during range selection. */
12
+ hoverDate?: Date | null;
13
+ onSelect: (date: Date) => void;
14
+ onMonthChange: (year: number, month: number) => void;
15
+ onHover?: (date: Date | null) => void;
16
+ /** Minimum selectable date. */
17
+ minDate?: Date;
18
+ /** Maximum selectable date. */
19
+ maxDate?: Date;
20
+ }
21
+ export declare function CalendarGrid({ year, month, selected, rangeStart, rangeEnd, hoverDate, onSelect, onMonthChange, onHover, minDate, maxDate, }: CalendarGridProps): import("react/jsx-runtime").JSX.Element;
22
+ export {};
23
+ //# sourceMappingURL=CalendarGrid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CalendarGrid.d.ts","sourceRoot":"","sources":["../../../src/components/ui/CalendarGrid.tsx"],"names":[],"mappings":"AAsBA,UAAU,iBAAiB;IACzB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,iCAAiC;IACjC,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/B,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IACtC,+BAA+B;IAC/B,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,+BAA+B;IAC/B,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AA2BD,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,aAAa,EACb,OAAO,EACP,OAAO,EACP,OAAO,GACR,EAAE,iBAAiB,2CA8KnB"}
@@ -0,0 +1,9 @@
1
+ import type { ReactNode } from "react";
2
+ export interface CardProps {
3
+ children: ReactNode;
4
+ className?: string;
5
+ header?: ReactNode;
6
+ footer?: ReactNode;
7
+ }
8
+ export declare function Card({ children, className, header, footer }: CardProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=Card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,wBAAgB,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,2CAmBtE"}
@@ -0,0 +1,10 @@
1
+ export interface CheckboxProps {
2
+ checked: boolean;
3
+ indeterminate?: boolean;
4
+ onChange: (checked: boolean) => void;
5
+ label?: string;
6
+ disabled?: boolean;
7
+ className?: string;
8
+ }
9
+ export declare function Checkbox({ checked, indeterminate, onChange, label, disabled, className, }: CheckboxProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=Checkbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Checkbox.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,aAAa,EACb,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE,aAAa,2CAgCf"}
@@ -0,0 +1,15 @@
1
+ interface ComboboxOption {
2
+ value: string;
3
+ label: string;
4
+ }
5
+ interface ComboboxProps {
6
+ options: ComboboxOption[];
7
+ value: string;
8
+ onChange: (value: string) => void;
9
+ placeholder?: string;
10
+ label?: string;
11
+ className?: string;
12
+ }
13
+ export declare function Combobox({ options, value, onChange, placeholder, label, className, }: ComboboxProps): import("react/jsx-runtime").JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=Combobox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Combobox.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Combobox.tsx"],"names":[],"mappings":"AAOA,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,KAAK,EACL,QAAQ,EACR,WAAyB,EACzB,KAAK,EACL,SAAS,GACV,EAAE,aAAa,2CA4Jf"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * DangerZone — a red-highlighted section for destructive actions.
3
+ *
4
+ * Used at the bottom of settings pages to visually separate destructive
5
+ * operations (like account deletion) from regular settings. The red heading
6
+ * and top border create a clear visual warning.
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * <DangerZone
11
+ * title="Danger Zone"
12
+ * description="Once you delete your account, there is no going back."
13
+ * >
14
+ * <Button variant="danger" onClick={() => setDeleteOpen(true)}>
15
+ * Delete Account
16
+ * </Button>
17
+ * </DangerZone>
18
+ * ```
19
+ */
20
+ import type { ReactNode } from "react";
21
+ interface DangerZoneProps {
22
+ /**
23
+ * Section heading.
24
+ * Defaults to "Danger Zone" — the universal convention for destructive
25
+ * action sections in settings UIs.
26
+ */
27
+ title?: string;
28
+ /** Warning text displayed below the heading. */
29
+ description?: string;
30
+ /**
31
+ * The destructive action control(s) — typically a danger Button
32
+ * that opens a confirmation dialog.
33
+ */
34
+ children: ReactNode;
35
+ /** Additional utility classes for the root container. */
36
+ className?: string;
37
+ }
38
+ export declare function DangerZone({ title, description, children, className, }: DangerZoneProps): import("react/jsx-runtime").JSX.Element;
39
+ export {};
40
+ //# sourceMappingURL=DangerZone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DangerZone.d.ts","sourceRoot":"","sources":["../../../src/components/ui/DangerZone.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,UAAU,eAAe;IACvB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAqB,EACrB,WAAW,EACX,QAAQ,EACR,SAAS,GACV,EAAE,eAAe,2CAUjB"}
@@ -0,0 +1,11 @@
1
+ interface DatePickerProps {
2
+ label?: string;
3
+ value: Date | null;
4
+ onChange: (date: Date | null) => void;
5
+ placeholder?: string;
6
+ /** Format function for display. Defaults to "MMM D, YYYY". */
7
+ format?: (date: Date) => string;
8
+ }
9
+ export declare function DatePicker({ label, value, onChange, placeholder, format, }: DatePickerProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=DatePicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker.d.ts","sourceRoot":"","sources":["../../../src/components/ui/DatePicker.tsx"],"names":[],"mappings":"AASA,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;CACjC;AAoBD,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,QAAQ,EACR,WAA8B,EAC9B,MAAsB,GACvB,EAAE,eAAe,2CAkFjB"}
@@ -0,0 +1,13 @@
1
+ export interface DateRange {
2
+ start: Date | null;
3
+ end: Date | null;
4
+ }
5
+ interface DateRangePickerProps {
6
+ label?: string;
7
+ value: DateRange;
8
+ onChange: (range: DateRange) => void;
9
+ placeholder?: string;
10
+ }
11
+ export declare function DateRangePicker({ label, value, onChange, placeholder, }: DateRangePickerProps): import("react/jsx-runtime").JSX.Element;
12
+ export {};
13
+ //# sourceMappingURL=DateRangePicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateRangePicker.d.ts","sourceRoot":"","sources":["../../../src/components/ui/DateRangePicker.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC;CAClB;AAED,UAAU,oBAAoB;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA6BD,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,KAAK,EACL,QAAQ,EACR,WAAoC,GACrC,EAAE,oBAAoB,2CAqLtB"}
@@ -0,0 +1,9 @@
1
+ interface DateTimePickerProps {
2
+ label?: string;
3
+ value: Date | null;
4
+ onChange: (date: Date | null) => void;
5
+ placeholder?: string;
6
+ }
7
+ export declare function DateTimePicker({ label, value, onChange, placeholder, }: DateTimePickerProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=DateTimePicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateTimePicker.d.ts","sourceRoot":"","sources":["../../../src/components/ui/DateTimePicker.tsx"],"names":[],"mappings":"AASA,UAAU,mBAAmB;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8CD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,QAAQ,EACR,WAAqC,GACtC,EAAE,mBAAmB,2CA6MrB"}
@@ -0,0 +1,19 @@
1
+ import { type ReactNode } from "react";
2
+ interface DetailPanelProps {
3
+ open: boolean;
4
+ onClose: () => void;
5
+ title: string;
6
+ children: ReactNode;
7
+ className?: string;
8
+ /** Allow horizontal resize via drag handle. Default true. */
9
+ resizable?: boolean;
10
+ /** Default width in px when the panel opens. */
11
+ defaultWidth?: number;
12
+ /** Minimum width in px during resize. */
13
+ minWidth?: number;
14
+ /** Maximum width in px during resize. */
15
+ maxWidth?: number;
16
+ }
17
+ export declare function DetailPanel({ open, onClose, title, children, className, resizable, defaultWidth, minWidth, maxWidth, }: DetailPanelProps): import("react/jsx-runtime").JSX.Element;
18
+ export {};
19
+ //# sourceMappingURL=DetailPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DetailPanel.d.ts","sourceRoot":"","sources":["../../../src/components/ui/DetailPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAMf,UAAU,gBAAgB;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,SAAS,EACT,SAAgB,EAChB,YAA4B,EAC5B,QAAoB,EACpB,QAAoB,GACrB,EAAE,gBAAgB,2CAqFlB"}
@@ -0,0 +1,28 @@
1
+ import { type ReactNode } from "react";
2
+ export interface DialogProps {
3
+ open: boolean;
4
+ onClose: () => void;
5
+ title?: string;
6
+ children: ReactNode;
7
+ /**
8
+ * Optional footer rendered below the children.
9
+ * Typically used with `<DialogActions>` for Cancel + Confirm buttons,
10
+ * but can be any ReactNode.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * <Dialog
15
+ * open={open}
16
+ * onClose={close}
17
+ * title="Confirm"
18
+ * footer={<DialogActions onCancel={close} onConfirm={handle} />}
19
+ * >
20
+ * <p>Are you sure?</p>
21
+ * </Dialog>
22
+ * ```
23
+ */
24
+ footer?: ReactNode;
25
+ className?: string;
26
+ }
27
+ export declare function Dialog({ open, onClose, title, children, footer, className, }: DialogProps): import("react").ReactPortal | null;
28
+ //# sourceMappingURL=Dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAQjE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,GACV,EAAE,WAAW,sCA2Db"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * DialogActions — a right-aligned button footer for dialogs.
3
+ *
4
+ * Provides a consistent Cancel + Confirm button layout used inside
5
+ * `<Dialog>` components. The confirm button supports all `Button` variants
6
+ * so it can be used for destructive confirmations (variant="danger") or
7
+ * standard confirmations (variant="primary").
8
+ *
9
+ * @example Standard confirmation
10
+ * ```tsx
11
+ * <Dialog open={open} onClose={() => setOpen(false)} title="Confirm">
12
+ * <p>Are you sure?</p>
13
+ * <DialogActions
14
+ * onCancel={() => setOpen(false)}
15
+ * onConfirm={handleConfirm}
16
+ * confirmLabel="Confirm"
17
+ * />
18
+ * </Dialog>
19
+ * ```
20
+ *
21
+ * @example Destructive action
22
+ * ```tsx
23
+ * <DialogActions
24
+ * onCancel={() => setOpen(false)}
25
+ * onConfirm={handleDelete}
26
+ * confirmLabel="Delete Account"
27
+ * confirmVariant="danger"
28
+ * />
29
+ * ```
30
+ */
31
+ import { type ButtonProps } from "./Button";
32
+ interface DialogActionsProps {
33
+ /** Called when the Cancel button is clicked. */
34
+ onCancel: () => void;
35
+ /** Called when the Confirm button is clicked. */
36
+ onConfirm: () => void;
37
+ /** Label for the cancel button. Defaults to "Cancel". */
38
+ cancelLabel?: string;
39
+ /** Label for the confirm button. Defaults to "Confirm". */
40
+ confirmLabel?: string;
41
+ /**
42
+ * Visual variant for the confirm button.
43
+ * Use "danger" for destructive actions like deleting an account.
44
+ * Defaults to "primary".
45
+ */
46
+ confirmVariant?: ButtonProps["variant"];
47
+ /** Additional utility classes for the root container. */
48
+ className?: string;
49
+ }
50
+ export declare function DialogActions({ onCancel, onConfirm, cancelLabel, confirmLabel, confirmVariant, className, }: DialogActionsProps): import("react/jsx-runtime").JSX.Element;
51
+ export {};
52
+ //# sourceMappingURL=DialogActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DialogActions.d.ts","sourceRoot":"","sources":["../../../src/components/ui/DialogActions.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAEpD,UAAU,kBAAkB;IAC1B,gDAAgD;IAChD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,iDAAiD;IACjD,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,cAAc,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IACxC,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,EACT,WAAsB,EACtB,YAAwB,EACxB,cAA0B,EAC1B,SAAS,GACV,EAAE,kBAAkB,2CAWpB"}
@@ -0,0 +1,7 @@
1
+ import type { ReactNode } from "react";
2
+ export interface DividerLabelProps {
3
+ children: ReactNode;
4
+ className?: string;
5
+ }
6
+ export declare function DividerLabel({ children, className }: DividerLabelProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=DividerLabel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DividerLabel.d.ts","sourceRoot":"","sources":["../../../src/components/ui/DividerLabel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,iBAAiB,2CAatE"}
@@ -0,0 +1,27 @@
1
+ import { type ReactNode } from "react";
2
+ interface DropdownContentItem {
3
+ label: string;
4
+ icon?: ReactNode;
5
+ shortcut?: string;
6
+ checked?: boolean;
7
+ onClick: () => void;
8
+ danger?: boolean;
9
+ divider?: false;
10
+ }
11
+ interface DropdownDivider {
12
+ divider: true;
13
+ }
14
+ export type DropdownItem = DropdownContentItem | DropdownDivider;
15
+ interface DropdownMenuProps {
16
+ trigger: ReactNode;
17
+ items: DropdownItem[];
18
+ align?: "left" | "right";
19
+ }
20
+ /**
21
+ * Menu whose panel portals to document.body. Position is captured from the
22
+ * trigger rect at open time and not recomputed, so it does not reposition on
23
+ * scroll/resize while open.
24
+ */
25
+ export declare function DropdownMenu({ trigger, items, align, }: DropdownMenuProps): import("react/jsx-runtime").JSX.Element;
26
+ export {};
27
+ //# sourceMappingURL=DropdownMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropdownMenu.d.ts","sourceRoot":"","sources":["../../../src/components/ui/DropdownMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAQf,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,eAAe,CAAC;AAEjE,UAAU,iBAAiB;IACzB,OAAO,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,KAAK,EACL,KAAe,GAChB,EAAE,iBAAiB,2CAsInB"}
@@ -0,0 +1,11 @@
1
+ import type { ReactNode } from "react";
2
+ interface EmptyStateProps {
3
+ icon?: ReactNode;
4
+ title: string;
5
+ description?: string;
6
+ action?: ReactNode;
7
+ className?: string;
8
+ }
9
+ export declare function EmptyState({ icon, title, description, action, className, }: EmptyStateProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=EmptyState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../../../src/components/ui/EmptyState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,UAAU,eAAe;IACvB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,KAAK,EACL,WAAW,EACX,MAAM,EACN,SAAS,GACV,EAAE,eAAe,2CAoBjB"}
@@ -0,0 +1,16 @@
1
+ import { Component, type ErrorInfo, type ReactNode } from "react";
2
+ interface Props {
3
+ children: ReactNode;
4
+ }
5
+ interface State {
6
+ hasError: boolean;
7
+ error: Error | null;
8
+ }
9
+ export declare class ErrorBoundary extends Component<Props, State> {
10
+ state: State;
11
+ static getDerivedStateFromError(error: Error): State;
12
+ componentDidCatch(error: Error, info: ErrorInfo): void;
13
+ render(): string | number | bigint | boolean | import("react/jsx-runtime").JSX.Element | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | null | undefined;
14
+ }
15
+ export {};
16
+ //# sourceMappingURL=ErrorBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../../src/components/ui/ErrorBoundary.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlE,UAAU,KAAK;IACb,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,UAAU,KAAK;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED,qBAAa,aAAc,SAAQ,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACxD,KAAK,EAAE,KAAK,CAAoC;IAEhD,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK;IAIpD,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS;IAQ/C,MAAM;CAwBP"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * FilterButton — a compact toolbar trigger button for dropdown filters.
3
+ *
4
+ * This is visually distinct from `<Button>` — it uses a secondary background
5
+ * with a subtle border, designed to sit in toolbars as the trigger element
6
+ * for `<DropdownMenu>`. The label text hides on small screens, leaving just
7
+ * the icon for a compact mobile experience.
8
+ *
9
+ * @example As a DropdownMenu trigger
10
+ * ```tsx
11
+ * <DropdownMenu
12
+ * trigger={
13
+ * <FilterButton icon={Filter}>
14
+ * Role{roleFilter !== "All" ? `: ${roleFilter}` : ""}
15
+ * </FilterButton>
16
+ * }
17
+ * items={...}
18
+ * />
19
+ * ```
20
+ *
21
+ * @example Fixed width (prevents reflow when label changes)
22
+ * ```tsx
23
+ * <FilterButton icon={LayoutGrid} className="w-[110px]">
24
+ * Cards
25
+ * </FilterButton>
26
+ * ```
27
+ */
28
+ import { type ElementType, type ReactNode } from "react";
29
+ interface FilterButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
30
+ /**
31
+ * A Lucide icon component rendered at 14px (h-3.5 w-3.5).
32
+ * Pass the component itself, not a JSX element.
33
+ */
34
+ icon: ElementType;
35
+ /**
36
+ * Label text — hidden on small screens (`sm:inline`) so the button
37
+ * degrades gracefully to an icon-only state on mobile.
38
+ */
39
+ children?: ReactNode;
40
+ }
41
+ /**
42
+ * Uses `forwardRef` so the button works correctly as a `<DropdownMenu>`
43
+ * trigger, which may need to attach a ref for positioning.
44
+ */
45
+ export declare const FilterButton: import("react").ForwardRefExoticComponent<FilterButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
46
+ export {};
47
+ //# sourceMappingURL=FilterButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterButton.d.ts","sourceRoot":"","sources":["../../../src/components/ui/FilterButton.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAc,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIrE,UAAU,iBAAkB,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;IAC/E;;;OAGG;IACH,IAAI,EAAE,WAAW,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,iHAyBxB,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * FilterDropdown — a convenience wrapper combining FilterButton + DropdownMenu.
3
+ *
4
+ * Since FilterButton is almost always used as the trigger for a DropdownMenu,
5
+ * this component merges both into a single API, reducing ~5 lines per usage.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * <FilterDropdown
10
+ * icon={Filter}
11
+ * items={roleOptions.map((r) => ({
12
+ * label: r,
13
+ * checked: roleFilter === r,
14
+ * onClick: () => setRoleFilter(r),
15
+ * }))}
16
+ * >
17
+ * Role{roleFilter !== "All" ? `: ${roleFilter}` : ""}
18
+ * </FilterDropdown>
19
+ * ```
20
+ *
21
+ * @example With alignment
22
+ * ```tsx
23
+ * <FilterDropdown icon={LayoutGrid} align="right" className="w-[110px]" items={items}>
24
+ * Cards
25
+ * </FilterDropdown>
26
+ * ```
27
+ */
28
+ import type { ComponentProps, ElementType, ReactNode } from "react";
29
+ import { DropdownMenu } from "./DropdownMenu";
30
+ interface FilterDropdownProps {
31
+ /**
32
+ * A Lucide icon component for the trigger button.
33
+ * Passed through to FilterButton.
34
+ */
35
+ icon: ElementType;
36
+ /**
37
+ * Label text for the trigger — hidden on small screens.
38
+ * Passed as children to FilterButton.
39
+ */
40
+ children?: ReactNode;
41
+ /** Dropdown menu items — same format as DropdownMenu `items`. */
42
+ items: ComponentProps<typeof DropdownMenu>["items"];
43
+ /** Dropdown alignment relative to the trigger. Defaults to DropdownMenu's default. */
44
+ align?: ComponentProps<typeof DropdownMenu>["align"];
45
+ /** Additional utility classes for the trigger button. */
46
+ className?: string;
47
+ }
48
+ export declare function FilterDropdown({ icon, children, items, align, className, }: FilterDropdownProps): import("react/jsx-runtime").JSX.Element;
49
+ export {};
50
+ //# sourceMappingURL=FilterDropdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterDropdown.d.ts","sourceRoot":"","sources":["../../../src/components/ui/FilterDropdown.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,UAAU,mBAAmB;IAC3B;;;OAGG;IACH,IAAI,EAAE,WAAW,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,iEAAiE;IACjE,KAAK,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC;IACpD,sFAAsF;IACtF,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC;IACrD,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,KAAK,EACL,SAAS,GACV,EAAE,mBAAmB,2CAYrB"}