azamat-ui-kit 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.
- package/LICENSE +21 -0
- package/README.md +323 -0
- package/dist/cli/index.js +725 -0
- package/dist/components/actions/action-menu.d.ts +26 -0
- package/dist/components/actions/copy-button.d.ts +13 -0
- package/dist/components/actions/index.d.ts +3 -0
- package/dist/components/actions/quick-action-grid.d.ts +27 -0
- package/dist/components/calendar/calendar.d.ts +28 -0
- package/dist/components/calendar/date-picker.d.ts +15 -0
- package/dist/components/calendar/date-range-picker.d.ts +18 -0
- package/dist/components/calendar/date-utils.d.ts +12 -0
- package/dist/components/calendar/index.d.ts +4 -0
- package/dist/components/command/command-palette.d.ts +54 -0
- package/dist/components/command/index.d.ts +1 -0
- package/dist/components/data-table/data-table-actions-column.d.ts +16 -0
- package/dist/components/data-table/data-table-bulk-actions.d.ts +17 -0
- package/dist/components/data-table/data-table-column-visibility-menu.d.ts +14 -0
- package/dist/components/data-table/data-table-pagination.d.ts +21 -0
- package/dist/components/data-table/data-table-row-actions.d.ts +13 -0
- package/dist/components/data-table/data-table-select-column.d.ts +13 -0
- package/dist/components/data-table/data-table-sortable-header.d.ts +11 -0
- package/dist/components/data-table/data-table-toolbar.d.ts +14 -0
- package/dist/components/data-table/data-table-view-presets.d.ts +27 -0
- package/dist/components/data-table/data-table.d.ts +86 -0
- package/dist/components/data-table/index.d.ts +10 -0
- package/dist/components/display/activity-feed.d.ts +25 -0
- package/dist/components/display/avatar.d.ts +26 -0
- package/dist/components/display/data-state.d.ts +16 -0
- package/dist/components/display/description-list.d.ts +31 -0
- package/dist/components/display/index.d.ts +10 -0
- package/dist/components/display/info-card.d.ts +18 -0
- package/dist/components/display/metric-grid.d.ts +22 -0
- package/dist/components/display/progress.d.ts +35 -0
- package/dist/components/display/result.d.ts +18 -0
- package/dist/components/display/status-legend.d.ts +27 -0
- package/dist/components/display/timeline.d.ts +25 -0
- package/dist/components/feedback/empty-state.d.ts +11 -0
- package/dist/components/feedback/index.d.ts +3 -0
- package/dist/components/feedback/loading-state.d.ts +8 -0
- package/dist/components/feedback/status-badge.d.ts +9 -0
- package/dist/components/filters/filter-bar.d.ts +14 -0
- package/dist/components/filters/filter-chips.d.ts +18 -0
- package/dist/components/filters/index.d.ts +2 -0
- package/dist/components/form/form-async-select.d.ts +12 -0
- package/dist/components/form/form-date-input.d.ts +12 -0
- package/dist/components/form/form-date-picker.d.ts +12 -0
- package/dist/components/form/form-date-range-input.d.ts +12 -0
- package/dist/components/form/form-date-range-picker.d.ts +15 -0
- package/dist/components/form/form-field-shell.d.ts +26 -0
- package/dist/components/form/form-input.d.ts +13 -0
- package/dist/components/form/form-number-input.d.ts +12 -0
- package/dist/components/form/form-password-input.d.ts +11 -0
- package/dist/components/form/form-phone-input.d.ts +13 -0
- package/dist/components/form/form-search-input.d.ts +11 -0
- package/dist/components/form/form-select.d.ts +12 -0
- package/dist/components/form/form-switch.d.ts +14 -0
- package/dist/components/form/form-textarea.d.ts +13 -0
- package/dist/components/form/index.d.ts +14 -0
- package/dist/components/inputs/async-select.d.ts +106 -0
- package/dist/components/inputs/clearable-input.d.ts +16 -0
- package/dist/components/inputs/combobox.d.ts +20 -0
- package/dist/components/inputs/date-input.d.ts +9 -0
- package/dist/components/inputs/date-range-input.d.ts +18 -0
- package/dist/components/inputs/index.d.ts +14 -0
- package/dist/components/inputs/masked-input.d.ts +11 -0
- package/dist/components/inputs/money-input.d.ts +13 -0
- package/dist/components/inputs/number-input.d.ts +16 -0
- package/dist/components/inputs/password-input.d.ts +17 -0
- package/dist/components/inputs/phone-input.d.ts +10 -0
- package/dist/components/inputs/quantity-input.d.ts +15 -0
- package/dist/components/inputs/search-input.d.ts +7 -0
- package/dist/components/inputs/simple-select.d.ts +20 -0
- package/dist/components/inputs/tag-input.d.ts +15 -0
- package/dist/components/layout/app-header.d.ts +10 -0
- package/dist/components/layout/app-shell.d.ts +32 -0
- package/dist/components/layout/app-sidebar.d.ts +28 -0
- package/dist/components/layout/breadcrumbs.d.ts +18 -0
- package/dist/components/layout/index.d.ts +8 -0
- package/dist/components/layout/page-container.d.ts +7 -0
- package/dist/components/layout/page-header.d.ts +12 -0
- package/dist/components/layout/sidebar-nav.d.ts +25 -0
- package/dist/components/layout/stat-card.d.ts +18 -0
- package/dist/components/navigation/index.d.ts +3 -0
- package/dist/components/navigation/page-tabs.d.ts +18 -0
- package/dist/components/navigation/pagination.d.ts +21 -0
- package/dist/components/navigation/stepper-tabs.d.ts +19 -0
- package/dist/components/notifications/index.d.ts +1 -0
- package/dist/components/notifications/toast.d.ts +42 -0
- package/dist/components/overlay/confirm-dialog.d.ts +17 -0
- package/dist/components/overlay/dialog-actions.d.ts +14 -0
- package/dist/components/overlay/index.d.ts +4 -0
- package/dist/components/overlay/modal-shell.d.ts +20 -0
- package/dist/components/overlay/sheet-shell.d.ts +34 -0
- package/dist/components/patterns/form-builder-presets.d.ts +23 -0
- package/dist/components/patterns/form-builder.d.ts +95 -0
- package/dist/components/patterns/index.d.ts +4 -0
- package/dist/components/patterns/resource-detail-page.d.ts +39 -0
- package/dist/components/patterns/resource-page.d.ts +34 -0
- package/dist/components/ui/badge.d.ts +7 -0
- package/dist/components/ui/button.d.ts +8 -0
- package/dist/components/ui/card.d.ts +11 -0
- package/dist/components/ui/checkbox.d.ts +13 -0
- package/dist/components/ui/component-preview.d.ts +10 -0
- package/dist/components/ui/dialog.d.ts +17 -0
- package/dist/components/ui/dropdown-menu.d.ts +29 -0
- package/dist/components/ui/input.d.ts +3 -0
- package/dist/components/ui/popover.d.ts +9 -0
- package/dist/components/ui/select.d.ts +15 -0
- package/dist/components/ui/switch.d.ts +12 -0
- package/dist/components/ui/table.d.ts +10 -0
- package/dist/components/ui/tabs.d.ts +6 -0
- package/dist/components/ui/textarea.d.ts +3 -0
- package/dist/components/upload/file-upload.d.ts +61 -0
- package/dist/components/upload/image-upload.d.ts +14 -0
- package/dist/components/upload/index.d.ts +2 -0
- package/dist/components/wizard/index.d.ts +2 -0
- package/dist/components/wizard/stepper.d.ts +16 -0
- package/dist/components/wizard/wizard.d.ts +17 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/use-before-unload-when-dirty.d.ts +2 -0
- package/dist/hooks/use-data-table-view-state.d.ts +20 -0
- package/dist/hooks/use-debounce.d.ts +3 -0
- package/dist/hooks/use-disclosure.d.ts +13 -0
- package/dist/hooks/use-is-mobile.d.ts +3 -0
- package/dist/hooks/use-session-storage-state.d.ts +8 -0
- package/dist/index.cjs +9 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.js +23213 -0
- package/dist/lib/utils.d.ts +2 -0
- package/package.json +118 -0
- package/registry.json +185 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Input } from "@/components/ui/input";
|
|
3
|
+
export type MaskedInputProps = Omit<React.ComponentProps<typeof Input>, "value" | "onChange"> & {
|
|
4
|
+
value?: string;
|
|
5
|
+
onChange?: React.ChangeEventHandler<HTMLInputElement>;
|
|
6
|
+
onValueChange?: (value: string, rawValue: string) => void;
|
|
7
|
+
mask?: (rawValue: string) => string;
|
|
8
|
+
unmask?: (maskedValue: string) => string;
|
|
9
|
+
};
|
|
10
|
+
declare const MaskedInput: React.ForwardRefExoticComponent<Omit<MaskedInputProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
11
|
+
export { MaskedInput };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type MoneyInputProps = Omit<React.ComponentProps<"input">, "value" | "onChange" | "type"> & {
|
|
3
|
+
value?: number | string | null;
|
|
4
|
+
onChange?: React.ChangeEventHandler<HTMLInputElement>;
|
|
5
|
+
onValueChange?: (value: number | null, rawValue: string) => void;
|
|
6
|
+
prefix?: React.ReactNode;
|
|
7
|
+
suffix?: React.ReactNode;
|
|
8
|
+
wrapperClassName?: string;
|
|
9
|
+
inputClassName?: string;
|
|
10
|
+
};
|
|
11
|
+
declare function parseMoneyInput(value: string): number | null;
|
|
12
|
+
declare function MoneyInput({ value, onChange, onValueChange, prefix, suffix, wrapperClassName, inputClassName, className, inputMode, ...props }: MoneyInputProps): React.JSX.Element;
|
|
13
|
+
export { MoneyInput, parseMoneyInput };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Input } from "@/components/ui/input";
|
|
3
|
+
export type NumberInputProps = Omit<React.ComponentProps<typeof Input>, "type" | "value" | "onChange" | "min" | "max" | "step"> & {
|
|
4
|
+
value?: number | string | null;
|
|
5
|
+
onChange?: React.ChangeEventHandler<HTMLInputElement>;
|
|
6
|
+
onValueChange?: (value: string) => void;
|
|
7
|
+
onNumberChange?: (value: number | null) => void;
|
|
8
|
+
min?: number;
|
|
9
|
+
max?: number;
|
|
10
|
+
step?: number;
|
|
11
|
+
allowEmpty?: boolean;
|
|
12
|
+
};
|
|
13
|
+
declare function parseNumberInput(value: string): number | null;
|
|
14
|
+
declare function clampNumber(value: number, min?: number, max?: number): number;
|
|
15
|
+
declare const NumberInput: React.ForwardRefExoticComponent<Omit<NumberInputProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
16
|
+
export { NumberInput, parseNumberInput, clampNumber };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Input } from "@/components/ui/input";
|
|
3
|
+
export type PasswordInputProps = Omit<React.ComponentProps<typeof Input>, "type" | "value" | "onChange"> & {
|
|
4
|
+
value?: string | null;
|
|
5
|
+
onChange?: React.ChangeEventHandler<HTMLInputElement>;
|
|
6
|
+
onValueChange?: (value: string) => void;
|
|
7
|
+
visible?: boolean;
|
|
8
|
+
defaultVisible?: boolean;
|
|
9
|
+
onVisibleChange?: (visible: boolean) => void;
|
|
10
|
+
showToggle?: boolean;
|
|
11
|
+
wrapperClassName?: string;
|
|
12
|
+
inputClassName?: string;
|
|
13
|
+
showLabel?: string;
|
|
14
|
+
hideLabel?: string;
|
|
15
|
+
};
|
|
16
|
+
declare const PasswordInput: React.ForwardRefExoticComponent<Omit<PasswordInputProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
17
|
+
export { PasswordInput };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type MaskedInputProps } from "@/components/inputs/masked-input";
|
|
3
|
+
export type PhoneInputProps = Omit<MaskedInputProps, "mask" | "unmask" | "inputMode"> & {
|
|
4
|
+
countryCode?: string;
|
|
5
|
+
maxDigits?: number;
|
|
6
|
+
};
|
|
7
|
+
declare function onlyDigits(value: string): string;
|
|
8
|
+
declare function formatPhoneDigits(digits: string, countryCode?: string, maxDigits?: number): string;
|
|
9
|
+
declare const PhoneInput: React.ForwardRefExoticComponent<Omit<PhoneInputProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
10
|
+
export { PhoneInput, formatPhoneDigits, onlyDigits };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type QuantityInputProps = Omit<React.ComponentProps<"input">, "value" | "onChange" | "type"> & {
|
|
3
|
+
value?: number | null;
|
|
4
|
+
onChange?: React.ChangeEventHandler<HTMLInputElement>;
|
|
5
|
+
onValueChange?: (value: number | null) => void;
|
|
6
|
+
min?: number;
|
|
7
|
+
max?: number;
|
|
8
|
+
step?: number;
|
|
9
|
+
showControls?: boolean;
|
|
10
|
+
wrapperClassName?: string;
|
|
11
|
+
inputClassName?: string;
|
|
12
|
+
};
|
|
13
|
+
declare function clampQuantity(value: number, min?: number, max?: number): number;
|
|
14
|
+
declare function QuantityInput({ value, onChange, onValueChange, min, max, step, showControls, wrapperClassName, inputClassName, className, inputMode, ...props }: QuantityInputProps): React.JSX.Element;
|
|
15
|
+
export { QuantityInput, clampQuantity };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type ClearableInputProps } from "@/components/inputs/clearable-input";
|
|
3
|
+
export type SearchInputProps = Omit<ClearableInputProps, "leadingIcon" | "type"> & {
|
|
4
|
+
searchIcon?: React.ReactNode;
|
|
5
|
+
};
|
|
6
|
+
declare const SearchInput: React.ForwardRefExoticComponent<Omit<SearchInputProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
7
|
+
export { SearchInput };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Select } from "@/components/ui/select";
|
|
3
|
+
export type SimpleSelectOption = {
|
|
4
|
+
label: React.ReactNode;
|
|
5
|
+
value: string;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
description?: React.ReactNode;
|
|
8
|
+
};
|
|
9
|
+
export type SimpleSelectProps = Omit<React.ComponentProps<typeof Select>, "value" | "onValueChange"> & {
|
|
10
|
+
value?: string;
|
|
11
|
+
onValueChange?: (value: string) => void;
|
|
12
|
+
options: SimpleSelectOption[];
|
|
13
|
+
placeholder?: string;
|
|
14
|
+
size?: "sm" | "default";
|
|
15
|
+
triggerClassName?: string;
|
|
16
|
+
contentClassName?: string;
|
|
17
|
+
itemClassName?: string;
|
|
18
|
+
};
|
|
19
|
+
declare function SimpleSelect({ value, onValueChange, options, placeholder, size, triggerClassName, contentClassName, itemClassName, ...props }: SimpleSelectProps): React.JSX.Element;
|
|
20
|
+
export { SimpleSelect };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type TagInputProps = Omit<React.ComponentProps<"div">, "onChange"> & {
|
|
3
|
+
value?: string[];
|
|
4
|
+
defaultValue?: string[];
|
|
5
|
+
onValueChange?: (value: string[]) => void;
|
|
6
|
+
placeholder?: string;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
readOnly?: boolean;
|
|
9
|
+
maxTags?: number;
|
|
10
|
+
allowDuplicates?: boolean;
|
|
11
|
+
separators?: string[];
|
|
12
|
+
normalizeTag?: (tag: string) => string;
|
|
13
|
+
};
|
|
14
|
+
declare function TagInput({ value, defaultValue, onValueChange, placeholder, disabled, readOnly, maxTags, allowDuplicates, separators, normalizeTag, className, ...props }: TagInputProps): React.JSX.Element;
|
|
15
|
+
export { TagInput };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type AppHeaderProps = React.ComponentProps<"header"> & {
|
|
3
|
+
left?: React.ReactNode;
|
|
4
|
+
center?: React.ReactNode;
|
|
5
|
+
right?: React.ReactNode;
|
|
6
|
+
sticky?: boolean;
|
|
7
|
+
heightClassName?: string;
|
|
8
|
+
};
|
|
9
|
+
declare function AppHeader({ className, left, center, right, sticky, heightClassName, children, ...props }: AppHeaderProps): React.JSX.Element;
|
|
10
|
+
export { AppHeader };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type AppShellSidebarWidth = "sm" | "default" | "lg" | "xl";
|
|
3
|
+
export type AppShellAsideWidth = "sm" | "default" | "lg";
|
|
4
|
+
export type AppShellProps = React.ComponentProps<"div"> & {
|
|
5
|
+
header?: React.ReactNode;
|
|
6
|
+
sidebar?: React.ReactNode;
|
|
7
|
+
aside?: React.ReactNode;
|
|
8
|
+
footer?: React.ReactNode;
|
|
9
|
+
sidebarCollapsed?: boolean;
|
|
10
|
+
defaultSidebarCollapsed?: boolean;
|
|
11
|
+
onSidebarCollapsedChange?: (collapsed: boolean) => void;
|
|
12
|
+
mobileSidebarOpen?: boolean;
|
|
13
|
+
defaultMobileSidebarOpen?: boolean;
|
|
14
|
+
onMobileSidebarOpenChange?: (open: boolean) => void;
|
|
15
|
+
sidebarWidth?: AppShellSidebarWidth;
|
|
16
|
+
asideWidth?: AppShellAsideWidth;
|
|
17
|
+
sidebarMode?: "fixed" | "static";
|
|
18
|
+
mobileSidebar?: React.ReactNode;
|
|
19
|
+
mobileOverlay?: boolean;
|
|
20
|
+
collapseBreakpoint?: "sm" | "md" | "lg" | "xl";
|
|
21
|
+
showMobileMenuButton?: boolean;
|
|
22
|
+
mobileMenuLabel?: string;
|
|
23
|
+
mobileCloseLabel?: string;
|
|
24
|
+
contentClassName?: string;
|
|
25
|
+
mainClassName?: string;
|
|
26
|
+
mainWrapperClassName?: string;
|
|
27
|
+
sidebarClassName?: string;
|
|
28
|
+
mobileSidebarClassName?: string;
|
|
29
|
+
asideClassName?: string;
|
|
30
|
+
};
|
|
31
|
+
declare function AppShell({ className, header, sidebar, aside, footer, sidebarCollapsed, defaultSidebarCollapsed, onSidebarCollapsedChange, mobileSidebarOpen, defaultMobileSidebarOpen, onMobileSidebarOpenChange, sidebarWidth, asideWidth, sidebarMode, mobileSidebar, mobileOverlay, showMobileMenuButton, mobileMenuLabel, mobileCloseLabel, contentClassName, mainClassName, mainWrapperClassName, sidebarClassName, mobileSidebarClassName, asideClassName, children, ...props }: AppShellProps): React.JSX.Element;
|
|
32
|
+
export { AppShell };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type AppSidebarNavItem = {
|
|
3
|
+
key: string;
|
|
4
|
+
label: React.ReactNode;
|
|
5
|
+
icon?: React.ReactNode;
|
|
6
|
+
href?: string;
|
|
7
|
+
active?: boolean;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
badge?: React.ReactNode;
|
|
10
|
+
hidden?: boolean;
|
|
11
|
+
onSelect?: () => void;
|
|
12
|
+
};
|
|
13
|
+
export type AppSidebarProps = React.ComponentProps<"aside"> & {
|
|
14
|
+
header?: React.ReactNode;
|
|
15
|
+
footer?: React.ReactNode;
|
|
16
|
+
items?: AppSidebarNavItem[];
|
|
17
|
+
collapsed?: boolean;
|
|
18
|
+
onItemSelect?: (item: AppSidebarNavItem) => void;
|
|
19
|
+
renderItem?: (item: AppSidebarNavItem, state: {
|
|
20
|
+
collapsed: boolean;
|
|
21
|
+
}) => React.ReactNode;
|
|
22
|
+
renderLink?: (props: React.ComponentProps<"a"> & {
|
|
23
|
+
item: AppSidebarNavItem;
|
|
24
|
+
[key: `data-${string}`]: string | boolean | undefined;
|
|
25
|
+
}) => React.ReactNode;
|
|
26
|
+
};
|
|
27
|
+
declare function AppSidebar({ className, header, footer, items, collapsed, onItemSelect, renderItem, renderLink, children, ...props }: AppSidebarProps): React.JSX.Element;
|
|
28
|
+
export { AppSidebar };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type BreadcrumbItem = {
|
|
3
|
+
key: string;
|
|
4
|
+
label: React.ReactNode;
|
|
5
|
+
href?: string;
|
|
6
|
+
current?: boolean;
|
|
7
|
+
onSelect?: () => void;
|
|
8
|
+
};
|
|
9
|
+
export type BreadcrumbsProps = React.ComponentProps<"nav"> & {
|
|
10
|
+
items: BreadcrumbItem[];
|
|
11
|
+
separator?: React.ReactNode;
|
|
12
|
+
renderLink?: (props: React.ComponentProps<"a"> & {
|
|
13
|
+
item: BreadcrumbItem;
|
|
14
|
+
[key: `data-${string}`]: string | boolean | undefined;
|
|
15
|
+
}) => React.ReactNode;
|
|
16
|
+
};
|
|
17
|
+
declare function Breadcrumbs({ className, items, separator, renderLink, ...props }: BreadcrumbsProps): React.JSX.Element;
|
|
18
|
+
export { Breadcrumbs };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type PageContainerSize = "default" | "sm" | "md" | "lg" | "xl" | "full";
|
|
3
|
+
export type PageContainerProps = React.ComponentProps<"div"> & {
|
|
4
|
+
size?: PageContainerSize;
|
|
5
|
+
};
|
|
6
|
+
declare function PageContainer({ className, size, ...props }: PageContainerProps): React.JSX.Element;
|
|
7
|
+
export { PageContainer };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type PageHeaderProps = React.ComponentProps<"div"> & {
|
|
3
|
+
title?: React.ReactNode;
|
|
4
|
+
description?: React.ReactNode;
|
|
5
|
+
eyebrow?: React.ReactNode;
|
|
6
|
+
breadcrumbs?: React.ReactNode;
|
|
7
|
+
actions?: React.ReactNode;
|
|
8
|
+
meta?: React.ReactNode;
|
|
9
|
+
sticky?: boolean;
|
|
10
|
+
};
|
|
11
|
+
declare function PageHeader({ className, title, description, eyebrow, breadcrumbs, actions, meta, sticky, children, ...props }: PageHeaderProps): React.JSX.Element;
|
|
12
|
+
export { PageHeader };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type SidebarNavItem = {
|
|
3
|
+
key: string;
|
|
4
|
+
label: React.ReactNode;
|
|
5
|
+
icon?: React.ReactNode;
|
|
6
|
+
badge?: React.ReactNode;
|
|
7
|
+
href?: string;
|
|
8
|
+
active?: boolean;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
hidden?: boolean;
|
|
11
|
+
onSelect?: () => void;
|
|
12
|
+
};
|
|
13
|
+
export type SidebarNavProps = React.ComponentProps<"nav"> & {
|
|
14
|
+
items: SidebarNavItem[];
|
|
15
|
+
collapsed?: boolean;
|
|
16
|
+
itemClassName?: string;
|
|
17
|
+
activeItemClassName?: string;
|
|
18
|
+
renderItem?: (item: SidebarNavItem, element: React.ReactNode) => React.ReactNode;
|
|
19
|
+
renderLink?: (props: React.ComponentProps<"a"> & {
|
|
20
|
+
item: SidebarNavItem;
|
|
21
|
+
[key: `data-${string}`]: string | boolean | undefined;
|
|
22
|
+
}) => React.ReactNode;
|
|
23
|
+
};
|
|
24
|
+
declare function SidebarNav({ className, items, collapsed, itemClassName, activeItemClassName, renderItem, renderLink, ...props }: SidebarNavProps): React.JSX.Element;
|
|
25
|
+
export { SidebarNav };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Card } from "@/components/ui/card";
|
|
3
|
+
export type StatCardTrend = {
|
|
4
|
+
value: React.ReactNode;
|
|
5
|
+
tone?: "success" | "warning" | "danger" | "muted" | "default";
|
|
6
|
+
};
|
|
7
|
+
export type StatCardProps = React.ComponentProps<typeof Card> & {
|
|
8
|
+
title?: React.ReactNode;
|
|
9
|
+
value?: React.ReactNode;
|
|
10
|
+
description?: React.ReactNode;
|
|
11
|
+
icon?: React.ReactNode;
|
|
12
|
+
action?: React.ReactNode;
|
|
13
|
+
trend?: StatCardTrend;
|
|
14
|
+
footer?: React.ReactNode;
|
|
15
|
+
contentClassName?: string;
|
|
16
|
+
};
|
|
17
|
+
declare function StatCard({ className, title, value, description, icon, action, trend, footer, contentClassName, ...props }: StatCardProps): React.JSX.Element;
|
|
18
|
+
export { StatCard };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type PageTabItem<TValue extends string = string> = {
|
|
3
|
+
value: TValue;
|
|
4
|
+
label: React.ReactNode;
|
|
5
|
+
icon?: React.ReactNode;
|
|
6
|
+
badge?: React.ReactNode;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
hidden?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export type PageTabsProps<TValue extends string = string> = React.ComponentProps<"div"> & {
|
|
11
|
+
value?: TValue;
|
|
12
|
+
items: PageTabItem<TValue>[];
|
|
13
|
+
onValueChange?: (value: TValue, item: PageTabItem<TValue>) => void;
|
|
14
|
+
variant?: "underline" | "pills" | "cards";
|
|
15
|
+
size?: "sm" | "default";
|
|
16
|
+
};
|
|
17
|
+
declare function PageTabs<TValue extends string = string>({ value, items, onValueChange, variant, size, className, ...props }: PageTabsProps<TValue>): React.JSX.Element;
|
|
18
|
+
export { PageTabs };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type PaginationItem = number | "ellipsis";
|
|
3
|
+
export type PaginationLabels = {
|
|
4
|
+
first?: string;
|
|
5
|
+
previous?: string;
|
|
6
|
+
next?: string;
|
|
7
|
+
last?: string;
|
|
8
|
+
page?: (page: number) => string;
|
|
9
|
+
};
|
|
10
|
+
export type PaginationProps = Omit<React.ComponentProps<"nav">, "onChange"> & {
|
|
11
|
+
page: number;
|
|
12
|
+
pageCount: number;
|
|
13
|
+
onPageChange: (page: number) => void;
|
|
14
|
+
siblingCount?: number;
|
|
15
|
+
showEdges?: boolean;
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
labels?: PaginationLabels;
|
|
18
|
+
};
|
|
19
|
+
declare function getPaginationItems(page: number, pageCount: number, siblingCount?: number): PaginationItem[];
|
|
20
|
+
declare function Pagination({ className, page, pageCount, onPageChange, siblingCount, showEdges, disabled, labels, ...props }: PaginationProps): React.JSX.Element;
|
|
21
|
+
export { Pagination, getPaginationItems };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type StepperTabItem<TValue extends string = string> = {
|
|
3
|
+
value: TValue;
|
|
4
|
+
label: React.ReactNode;
|
|
5
|
+
description?: React.ReactNode;
|
|
6
|
+
icon?: React.ReactNode;
|
|
7
|
+
completed?: boolean;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
hidden?: boolean;
|
|
10
|
+
};
|
|
11
|
+
export type StepperTabsProps<TValue extends string = string> = React.ComponentProps<"div"> & {
|
|
12
|
+
value?: TValue;
|
|
13
|
+
items: StepperTabItem<TValue>[];
|
|
14
|
+
onValueChange?: (value: TValue, item: StepperTabItem<TValue>) => void;
|
|
15
|
+
orientation?: "horizontal" | "vertical";
|
|
16
|
+
compact?: boolean;
|
|
17
|
+
};
|
|
18
|
+
declare function StepperTabs<TValue extends string = string>({ value, items, onValueChange, orientation, compact, className, ...props }: StepperTabsProps<TValue>): React.JSX.Element;
|
|
19
|
+
export { StepperTabs };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./toast";
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type ToastTone = "default" | "success" | "info" | "warning" | "danger" | "loading";
|
|
3
|
+
export type ToastItem = {
|
|
4
|
+
id: string;
|
|
5
|
+
title?: React.ReactNode;
|
|
6
|
+
description?: React.ReactNode;
|
|
7
|
+
tone?: ToastTone;
|
|
8
|
+
action?: React.ReactNode;
|
|
9
|
+
duration?: number;
|
|
10
|
+
dismissible?: boolean;
|
|
11
|
+
};
|
|
12
|
+
export type CreateToastInput = Omit<ToastItem, "id"> & {
|
|
13
|
+
id?: string;
|
|
14
|
+
};
|
|
15
|
+
export type ToastShortcutInput = React.ReactNode | CreateToastInput;
|
|
16
|
+
export type ToastPromiseMessages<TData = unknown> = {
|
|
17
|
+
loading: ToastShortcutInput;
|
|
18
|
+
success: ToastShortcutInput | ((data: TData) => ToastShortcutInput);
|
|
19
|
+
error: ToastShortcutInput | ((error: unknown) => ToastShortcutInput);
|
|
20
|
+
};
|
|
21
|
+
export type ToastContextValue = {
|
|
22
|
+
toasts: ToastItem[];
|
|
23
|
+
addToast: (toast: CreateToastInput) => string;
|
|
24
|
+
updateToast: (id: string, toast: Partial<Omit<ToastItem, "id">>) => void;
|
|
25
|
+
dismissToast: (id: string) => void;
|
|
26
|
+
clearToasts: () => void;
|
|
27
|
+
success: (toast: ToastShortcutInput) => string;
|
|
28
|
+
info: (toast: ToastShortcutInput) => string;
|
|
29
|
+
warning: (toast: ToastShortcutInput) => string;
|
|
30
|
+
error: (toast: ToastShortcutInput) => string;
|
|
31
|
+
loading: (toast: ToastShortcutInput) => string;
|
|
32
|
+
promise: <TData>(promise: Promise<TData>, messages: ToastPromiseMessages<TData>) => Promise<TData>;
|
|
33
|
+
};
|
|
34
|
+
export type ToastProviderProps = React.PropsWithChildren<{
|
|
35
|
+
defaultDuration?: number;
|
|
36
|
+
maxToasts?: number;
|
|
37
|
+
pauseOnHover?: boolean;
|
|
38
|
+
position?: "top-right" | "top-left" | "bottom-right" | "bottom-left" | "top-center" | "bottom-center";
|
|
39
|
+
}>;
|
|
40
|
+
declare function ToastProvider({ children, defaultDuration, maxToasts, pauseOnHover, position, }: ToastProviderProps): React.JSX.Element;
|
|
41
|
+
declare function useToast(): ToastContextValue;
|
|
42
|
+
export { ToastProvider, useToast };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { DialogActionButton } from "@/components/overlay/dialog-actions";
|
|
3
|
+
import { type ModalShellProps } from "@/components/overlay/modal-shell";
|
|
4
|
+
type ConfirmVariant = React.ComponentProps<typeof DialogActionButton>["variant"];
|
|
5
|
+
type ConfirmDialogProps = Omit<ModalShellProps, "footer"> & {
|
|
6
|
+
cancelText?: React.ReactNode;
|
|
7
|
+
confirmText?: React.ReactNode;
|
|
8
|
+
confirmVariant?: ConfirmVariant;
|
|
9
|
+
confirmDisabled?: boolean;
|
|
10
|
+
cancelDisabled?: boolean;
|
|
11
|
+
isLoading?: boolean;
|
|
12
|
+
onCancel?: () => void;
|
|
13
|
+
onConfirm?: () => void;
|
|
14
|
+
};
|
|
15
|
+
declare function ConfirmDialog({ cancelText, confirmText, confirmVariant, confirmDisabled, cancelDisabled, isLoading, onCancel, onConfirm, onOpenChange, ...props }: ConfirmDialogProps): React.JSX.Element;
|
|
16
|
+
export { ConfirmDialog };
|
|
17
|
+
export type { ConfirmDialogProps };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Button } from "@/components/ui/button";
|
|
3
|
+
type DialogActionsAlign = "start" | "center" | "end" | "between";
|
|
4
|
+
export type DialogActionButtonProps = React.ComponentProps<typeof Button> & {
|
|
5
|
+
isLoading?: boolean;
|
|
6
|
+
loadingLabel?: React.ReactNode;
|
|
7
|
+
};
|
|
8
|
+
export type DialogActionsProps = React.ComponentProps<"div"> & {
|
|
9
|
+
align?: DialogActionsAlign;
|
|
10
|
+
stackOnMobile?: boolean;
|
|
11
|
+
};
|
|
12
|
+
declare function DialogActionButton({ children, disabled, isLoading, loadingLabel, className, ...props }: DialogActionButtonProps): React.JSX.Element;
|
|
13
|
+
declare function DialogActions({ className, align, stackOnMobile, ...props }: DialogActionsProps): React.JSX.Element;
|
|
14
|
+
export { DialogActions, DialogActionButton };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
type ModalShellSize = "sm" | "md" | "lg" | "xl" | "full";
|
|
3
|
+
export type ModalShellProps = {
|
|
4
|
+
open?: boolean;
|
|
5
|
+
defaultOpen?: boolean;
|
|
6
|
+
onOpenChange?: (open: boolean) => void;
|
|
7
|
+
trigger?: React.ReactNode;
|
|
8
|
+
title?: React.ReactNode;
|
|
9
|
+
description?: React.ReactNode;
|
|
10
|
+
children?: React.ReactNode;
|
|
11
|
+
footer?: React.ReactNode;
|
|
12
|
+
size?: ModalShellSize;
|
|
13
|
+
showCloseButton?: boolean;
|
|
14
|
+
contentClassName?: string;
|
|
15
|
+
headerClassName?: string;
|
|
16
|
+
bodyClassName?: string;
|
|
17
|
+
};
|
|
18
|
+
declare function ModalShell({ open, defaultOpen, onOpenChange, trigger, title, description, children, footer, size, showCloseButton, contentClassName, headerClassName, bodyClassName, }: ModalShellProps): React.JSX.Element;
|
|
19
|
+
export { ModalShell };
|
|
20
|
+
export type { ModalShellSize };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Dialog as DialogPrimitive } from "@base-ui/react/dialog";
|
|
3
|
+
type SheetSide = "top" | "right" | "bottom" | "left";
|
|
4
|
+
type SheetShellProps = {
|
|
5
|
+
open?: boolean;
|
|
6
|
+
defaultOpen?: boolean;
|
|
7
|
+
onOpenChange?: (open: boolean) => void;
|
|
8
|
+
trigger?: React.ReactNode;
|
|
9
|
+
title?: React.ReactNode;
|
|
10
|
+
description?: React.ReactNode;
|
|
11
|
+
children?: React.ReactNode;
|
|
12
|
+
footer?: React.ReactNode;
|
|
13
|
+
side?: SheetSide;
|
|
14
|
+
showCloseButton?: boolean;
|
|
15
|
+
contentClassName?: string;
|
|
16
|
+
headerClassName?: string;
|
|
17
|
+
bodyClassName?: string;
|
|
18
|
+
};
|
|
19
|
+
declare const Sheet: typeof DialogPrimitive.Root;
|
|
20
|
+
declare function SheetTrigger({ ...props }: DialogPrimitive.Trigger.Props): React.JSX.Element;
|
|
21
|
+
declare function SheetPortal({ ...props }: DialogPrimitive.Portal.Props): React.JSX.Element;
|
|
22
|
+
declare function SheetClose({ ...props }: DialogPrimitive.Close.Props): React.JSX.Element;
|
|
23
|
+
declare function SheetOverlay({ className, ...props }: DialogPrimitive.Backdrop.Props): React.JSX.Element;
|
|
24
|
+
declare function SheetContent({ className, children, side, showCloseButton, ...props }: DialogPrimitive.Popup.Props & {
|
|
25
|
+
side?: SheetSide;
|
|
26
|
+
showCloseButton?: boolean;
|
|
27
|
+
}): React.JSX.Element;
|
|
28
|
+
declare function SheetHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
29
|
+
declare function SheetFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
30
|
+
declare function SheetTitle({ className, ...props }: DialogPrimitive.Title.Props): React.JSX.Element;
|
|
31
|
+
declare function SheetDescription({ className, ...props }: DialogPrimitive.Description.Props): React.JSX.Element;
|
|
32
|
+
declare function SheetShell({ open, defaultOpen, onOpenChange, trigger, title, description, children, footer, side, showCloseButton, contentClassName, headerClassName, bodyClassName, }: SheetShellProps): React.JSX.Element;
|
|
33
|
+
export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetShell, SheetTitle, SheetTrigger, };
|
|
34
|
+
export type { SheetShellProps, SheetSide };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { FieldPath, FieldValues } from "react-hook-form";
|
|
2
|
+
import type { FormBuilderAsyncSelectField, FormBuilderCustomField, FormBuilderDateField, FormBuilderDateRangeField, FormBuilderInputField, FormBuilderNumberField, FormBuilderPhoneField, FormBuilderSection, FormBuilderSelectField, FormBuilderSwitchField, FormBuilderTextareaField } from "./form-builder";
|
|
3
|
+
type FieldBase = {
|
|
4
|
+
id: string;
|
|
5
|
+
hidden?: boolean;
|
|
6
|
+
className?: string;
|
|
7
|
+
colSpan?: 1 | 2 | 3 | 4 | "full";
|
|
8
|
+
};
|
|
9
|
+
type FieldPresetOptions<TProps> = FieldBase & {
|
|
10
|
+
props: TProps;
|
|
11
|
+
};
|
|
12
|
+
declare function inputField<TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>(options: FieldPresetOptions<FormBuilderInputField<TFieldValues, TName>["props"]>): FormBuilderInputField<TFieldValues, TName>;
|
|
13
|
+
declare function textareaField<TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>(options: FieldPresetOptions<FormBuilderTextareaField<TFieldValues, TName>["props"]>): FormBuilderTextareaField<TFieldValues, TName>;
|
|
14
|
+
declare function selectField<TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>(options: FieldPresetOptions<FormBuilderSelectField<TFieldValues, TName>["props"]>): FormBuilderSelectField<TFieldValues, TName>;
|
|
15
|
+
declare function asyncSelectField<TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>(options: FieldPresetOptions<FormBuilderAsyncSelectField<TFieldValues, TName>["props"]>): FormBuilderAsyncSelectField<TFieldValues, TName>;
|
|
16
|
+
declare function switchField<TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>(options: FieldPresetOptions<FormBuilderSwitchField<TFieldValues, TName>["props"]>): FormBuilderSwitchField<TFieldValues, TName>;
|
|
17
|
+
declare function numberField<TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>(options: FieldPresetOptions<FormBuilderNumberField<TFieldValues, TName>["props"]>): FormBuilderNumberField<TFieldValues, TName>;
|
|
18
|
+
declare function phoneField<TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>(options: FieldPresetOptions<FormBuilderPhoneField<TFieldValues, TName>["props"]>): FormBuilderPhoneField<TFieldValues, TName>;
|
|
19
|
+
declare function dateField<TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>(options: FieldPresetOptions<FormBuilderDateField<TFieldValues, TName>["props"]>): FormBuilderDateField<TFieldValues, TName>;
|
|
20
|
+
declare function dateRangeField<TFieldValues extends FieldValues, TFromName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>, TToName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>(options: FieldPresetOptions<FormBuilderDateRangeField<TFieldValues, TFromName, TToName>["props"]>): FormBuilderDateRangeField<TFieldValues, TFromName, TToName>;
|
|
21
|
+
declare function customField<TFieldValues extends FieldValues>(options: FieldBase & Pick<FormBuilderCustomField<TFieldValues>, "render">): FormBuilderCustomField<TFieldValues>;
|
|
22
|
+
declare function formSection<TFieldValues extends FieldValues>(section: FormBuilderSection<TFieldValues>): FormBuilderSection<TFieldValues>;
|
|
23
|
+
export { asyncSelectField, customField, dateField, dateRangeField, formSection, inputField, numberField, phoneField, selectField, switchField, textareaField, };
|