@dimaan/ui 0.0.14 → 0.0.17
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/dist/index.cjs +675 -258
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +606 -103
- package/dist/index.d.ts +606 -103
- package/dist/index.js +632 -262
- package/dist/index.js.map +1 -1
- package/package.json +5 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,164 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as react from 'react';
|
|
3
|
-
import { HTMLAttributes, ReactNode, ButtonHTMLAttributes, ReactElement, InputHTMLAttributes, ChangeEvent,
|
|
3
|
+
import { ComponentPropsWithoutRef, HTMLAttributes, ReactNode, ButtonHTMLAttributes, ReactElement, InputHTMLAttributes, ChangeEvent, FormEventHandler, FieldsetHTMLAttributes, Ref, TextareaHTMLAttributes } from 'react';
|
|
4
|
+
import * as RadixAlertDialog from '@radix-ui/react-alert-dialog';
|
|
4
5
|
import { LinkProps } from 'react-router-dom';
|
|
5
6
|
import { Locale } from 'react-day-picker';
|
|
7
|
+
import * as RadixDialog from '@radix-ui/react-dialog';
|
|
6
8
|
import * as RadixDropdown from '@radix-ui/react-dropdown-menu';
|
|
7
9
|
import { FieldValues, FieldPath, Control } from 'react-hook-form';
|
|
8
10
|
import * as RadixRadioGroup from '@radix-ui/react-radio-group';
|
|
11
|
+
import { ToasterProps as ToasterProps$1 } from 'sonner';
|
|
12
|
+
export { ExternalToast as ToastOptions, ToastT, toast } from 'sonner';
|
|
13
|
+
import * as RadixTooltip from '@radix-ui/react-tooltip';
|
|
9
14
|
import { ClassValue } from 'clsx';
|
|
10
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Destructive-confirm dialog built on `@radix-ui/react-alert-dialog`. Same
|
|
18
|
+
* visual surface as `Dialog`, but with stricter dismissal UX:
|
|
19
|
+
*
|
|
20
|
+
* - **Click-outside does NOT close** — users must press Cancel or Action.
|
|
21
|
+
* This is the canonical "are you sure?" pattern.
|
|
22
|
+
* - **No default × close button** — both exits are explicit through the
|
|
23
|
+
* footer buttons.
|
|
24
|
+
* - **Description is required** for accessibility — Radix throws a console
|
|
25
|
+
* warning if `AlertDialogDescription` is missing.
|
|
26
|
+
*
|
|
27
|
+
* Use for destructive confirmations (delete, archive, revoke). For neutral
|
|
28
|
+
* forms / modals use `Dialog` instead.
|
|
29
|
+
*
|
|
30
|
+
* @example Delete confirmation
|
|
31
|
+
* ```tsx
|
|
32
|
+
* <AlertDialog>
|
|
33
|
+
* <AlertDialogTrigger asChild>
|
|
34
|
+
* <Button variant="destructive">
|
|
35
|
+
* <Trash2 />
|
|
36
|
+
* Delete user
|
|
37
|
+
* </Button>
|
|
38
|
+
* </AlertDialogTrigger>
|
|
39
|
+
* <AlertDialogContent>
|
|
40
|
+
* <AlertDialogHeader>
|
|
41
|
+
* <AlertDialogTitle>Delete this user?</AlertDialogTitle>
|
|
42
|
+
* <AlertDialogDescription>
|
|
43
|
+
* This will permanently remove the account. This action cannot be undone.
|
|
44
|
+
* </AlertDialogDescription>
|
|
45
|
+
* </AlertDialogHeader>
|
|
46
|
+
* <AlertDialogFooter>
|
|
47
|
+
* <AlertDialogCancel asChild>
|
|
48
|
+
* <Button variant="outline">Cancel</Button>
|
|
49
|
+
* </AlertDialogCancel>
|
|
50
|
+
* <AlertDialogAction asChild>
|
|
51
|
+
* <Button variant="destructive" onClick={handleDelete}>Delete</Button>
|
|
52
|
+
* </AlertDialogAction>
|
|
53
|
+
* </AlertDialogFooter>
|
|
54
|
+
* </AlertDialogContent>
|
|
55
|
+
* </AlertDialog>
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
declare const AlertDialog: react.FC<RadixAlertDialog.AlertDialogProps>;
|
|
59
|
+
declare const AlertDialogTrigger: react.ForwardRefExoticComponent<RadixAlertDialog.AlertDialogTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
60
|
+
declare const AlertDialogPortal: react.FC<RadixAlertDialog.AlertDialogPortalProps>;
|
|
61
|
+
/**
|
|
62
|
+
* Confirm button. Wraps any element via `asChild` — pair with our `<Button>` for
|
|
63
|
+
* full styling. Closes the dialog when clicked.
|
|
64
|
+
*/
|
|
65
|
+
declare const AlertDialogAction: react.ForwardRefExoticComponent<RadixAlertDialog.AlertDialogActionProps & react.RefAttributes<HTMLButtonElement>>;
|
|
66
|
+
/**
|
|
67
|
+
* Cancel button. Wraps any element via `asChild` — pair with our `<Button>` for
|
|
68
|
+
* full styling. Closes the dialog when clicked. Also the default focus target
|
|
69
|
+
* when the dialog opens.
|
|
70
|
+
*/
|
|
71
|
+
declare const AlertDialogCancel: react.ForwardRefExoticComponent<RadixAlertDialog.AlertDialogCancelProps & react.RefAttributes<HTMLButtonElement>>;
|
|
72
|
+
interface AlertDialogOverlayProps extends ComponentPropsWithoutRef<typeof RadixAlertDialog.Overlay> {
|
|
73
|
+
}
|
|
74
|
+
declare const AlertDialogOverlay: react.ForwardRefExoticComponent<AlertDialogOverlayProps & react.RefAttributes<HTMLDivElement>>;
|
|
75
|
+
interface AlertDialogContentProps extends ComponentPropsWithoutRef<typeof RadixAlertDialog.Content> {
|
|
76
|
+
}
|
|
77
|
+
declare const AlertDialogContent: react.ForwardRefExoticComponent<AlertDialogContentProps & react.RefAttributes<HTMLDivElement>>;
|
|
78
|
+
interface AlertDialogHeaderProps extends HTMLAttributes<HTMLDivElement> {
|
|
79
|
+
children: ReactNode;
|
|
80
|
+
}
|
|
81
|
+
declare function AlertDialogHeader({ className, ...props }: AlertDialogHeaderProps): react_jsx_runtime.JSX.Element;
|
|
82
|
+
interface AlertDialogFooterProps extends HTMLAttributes<HTMLDivElement> {
|
|
83
|
+
children: ReactNode;
|
|
84
|
+
}
|
|
85
|
+
declare function AlertDialogFooter({ className, ...props }: AlertDialogFooterProps): react_jsx_runtime.JSX.Element;
|
|
86
|
+
interface AlertDialogTitleProps extends ComponentPropsWithoutRef<typeof RadixAlertDialog.Title> {
|
|
87
|
+
}
|
|
88
|
+
declare const AlertDialogTitle: react.ForwardRefExoticComponent<AlertDialogTitleProps & react.RefAttributes<HTMLHeadingElement>>;
|
|
89
|
+
type AlertDialogDescriptionProps = ComponentPropsWithoutRef<typeof RadixAlertDialog.Description>;
|
|
90
|
+
declare const AlertDialogDescription: react.ForwardRefExoticComponent<Omit<RadixAlertDialog.AlertDialogDescriptionProps & react.RefAttributes<HTMLParagraphElement>, "ref"> & react.RefAttributes<HTMLParagraphElement>>;
|
|
91
|
+
|
|
92
|
+
interface ConfirmOptions {
|
|
93
|
+
/** Question / strong statement at the top of the dialog. */
|
|
94
|
+
title: ReactNode;
|
|
95
|
+
/** Optional secondary line — explain consequences. Strongly recommended. */
|
|
96
|
+
description?: ReactNode;
|
|
97
|
+
/** Confirm button label. Falls back to provider's `labels.confirm` then `'Confirm'`. */
|
|
98
|
+
confirmLabel?: ReactNode;
|
|
99
|
+
/** Cancel button label. Falls back to provider's `labels.cancel` then `'Cancel'`. */
|
|
100
|
+
cancelLabel?: ReactNode;
|
|
101
|
+
/** Render the confirm button with the destructive variant. Use for delete/revoke. */
|
|
102
|
+
destructive?: boolean;
|
|
103
|
+
}
|
|
104
|
+
interface ConfirmDialogLabels {
|
|
105
|
+
confirm?: ReactNode;
|
|
106
|
+
cancel?: ReactNode;
|
|
107
|
+
}
|
|
108
|
+
interface ConfirmDialogProviderProps {
|
|
109
|
+
/**
|
|
110
|
+
* Global default labels — typically wired to the consumer's i18n strings so
|
|
111
|
+
* every `confirm(...)` call doesn't have to pass `cancelLabel` / `confirmLabel`.
|
|
112
|
+
*/
|
|
113
|
+
labels?: ConfirmDialogLabels;
|
|
114
|
+
children: ReactNode;
|
|
115
|
+
}
|
|
116
|
+
type ConfirmFn = (options: ConfirmOptions) => Promise<boolean>;
|
|
117
|
+
/**
|
|
118
|
+
* App-level provider for the imperative confirm dialog. Mount **once** at the
|
|
119
|
+
* app root (next to `<Toaster />`); every descendant can then call
|
|
120
|
+
* `useConfirm()` and trigger a destructive-confirm dialog in a single line.
|
|
121
|
+
*
|
|
122
|
+
* @example Mount at the app root
|
|
123
|
+
* ```tsx
|
|
124
|
+
* <AppShell brand={…} nav={…}>
|
|
125
|
+
* <ConfirmDialogProvider labels={{ confirm: t.confirm, cancel: t.cancel }}>
|
|
126
|
+
* <Routes>…</Routes>
|
|
127
|
+
* </ConfirmDialogProvider>
|
|
128
|
+
* <Toaster />
|
|
129
|
+
* </AppShell>
|
|
130
|
+
* ```
|
|
131
|
+
*
|
|
132
|
+
* @example One-line confirm from anywhere
|
|
133
|
+
* ```tsx
|
|
134
|
+
* function UserRow({ user }: { user: User }) {
|
|
135
|
+
* const confirm = useConfirm();
|
|
136
|
+
*
|
|
137
|
+
* async function handleDelete() {
|
|
138
|
+
* const ok = await confirm({
|
|
139
|
+
* title: 'Delete this user?',
|
|
140
|
+
* description: 'This action cannot be undone.',
|
|
141
|
+
* confirmLabel: 'Delete',
|
|
142
|
+
* destructive: true,
|
|
143
|
+
* });
|
|
144
|
+
* if (!ok) return;
|
|
145
|
+
* deleteUser(user.id);
|
|
146
|
+
* toast.success('User deleted');
|
|
147
|
+
* }
|
|
148
|
+
*
|
|
149
|
+
* return <Button variant="destructive" onClick={handleDelete}>Delete</Button>;
|
|
150
|
+
* }
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
declare function ConfirmDialogProvider({ labels, children }: ConfirmDialogProviderProps): react_jsx_runtime.JSX.Element;
|
|
154
|
+
/**
|
|
155
|
+
* Hook returning a `confirm(options)` function. Resolves `true` when the user
|
|
156
|
+
* presses the confirm button, `false` for cancel / Escape / overlay dismiss.
|
|
157
|
+
*
|
|
158
|
+
* Must be called from inside a `<ConfirmDialogProvider>`.
|
|
159
|
+
*/
|
|
160
|
+
declare function useConfirm(): ConfirmFn;
|
|
161
|
+
|
|
11
162
|
interface DashboardLayoutContextValue {
|
|
12
163
|
collapsed: boolean;
|
|
13
164
|
setCollapsed: (next: boolean) => void;
|
|
@@ -443,6 +594,307 @@ interface DatePickerProps {
|
|
|
443
594
|
*/
|
|
444
595
|
declare const DatePicker: react.ForwardRefExoticComponent<DatePickerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
445
596
|
|
|
597
|
+
type PageHeaderHeadingLevel = 'h1' | 'h2' | 'h3' | 'h4';
|
|
598
|
+
/** Props passed to the routing-library `render` slot of the back button. */
|
|
599
|
+
interface PageHeaderBackRenderProps {
|
|
600
|
+
to?: LinkProps['to'];
|
|
601
|
+
className?: string;
|
|
602
|
+
children: ReactNode;
|
|
603
|
+
onClick?: () => void;
|
|
604
|
+
}
|
|
605
|
+
interface PageHeaderBackProps {
|
|
606
|
+
/** Visible label next to the arrow. Defaults to `"Back"`. */
|
|
607
|
+
label?: ReactNode;
|
|
608
|
+
/** Target to — renders a React Router `<Link>`. */
|
|
609
|
+
to?: LinkProps['to'];
|
|
610
|
+
/** Click handler — renders a `<button>` (or wraps the `render` element). */
|
|
611
|
+
onClick?: () => void;
|
|
612
|
+
/** Routing-library render prop (e.g. wrap a different link component). Wins over `to`. */
|
|
613
|
+
render?: (props: PageHeaderBackRenderProps) => ReactElement;
|
|
614
|
+
}
|
|
615
|
+
interface PageHeaderProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
616
|
+
/** Page title (required). */
|
|
617
|
+
title: ReactNode;
|
|
618
|
+
/** Optional secondary text under the title. */
|
|
619
|
+
description?: ReactNode;
|
|
620
|
+
/** Slot above the title for breadcrumbs (e.g. `<Breadcrumbs items={…} />` or your own JSX). */
|
|
621
|
+
breadcrumbs?: ReactNode;
|
|
622
|
+
/** Optional back button rendered above the title row. */
|
|
623
|
+
back?: PageHeaderBackProps;
|
|
624
|
+
/** Slot on the trailing side of the title row — buttons, dropdowns, etc. */
|
|
625
|
+
actions?: ReactNode;
|
|
626
|
+
/** Heading level for the title element. Defaults to `'h1'`. */
|
|
627
|
+
as?: PageHeaderHeadingLevel;
|
|
628
|
+
/** Add a bottom border separator. Default: `false`. */
|
|
629
|
+
bordered?: boolean;
|
|
630
|
+
}
|
|
631
|
+
/**
|
|
632
|
+
* Top-of-page header — title, optional description, breadcrumbs, back button,
|
|
633
|
+
* and actions slot. The first thing a user sees on any list / detail / form
|
|
634
|
+
* page in a dashboard.
|
|
635
|
+
*
|
|
636
|
+
* Designed to drop directly into `<DashboardContent>` (or any padded page
|
|
637
|
+
* container). Has no outer padding of its own — the surrounding layout owns
|
|
638
|
+
* spacing.
|
|
639
|
+
*
|
|
640
|
+
* @example List page header with primary action
|
|
641
|
+
* ```tsx
|
|
642
|
+
* <PageHeader
|
|
643
|
+
* title="Users"
|
|
644
|
+
* description="Manage your team members and their roles."
|
|
645
|
+
* actions={<Button onClick={openCreate}>Add user</Button>}
|
|
646
|
+
* bordered
|
|
647
|
+
* />
|
|
648
|
+
* ```
|
|
649
|
+
*
|
|
650
|
+
* @example Detail page header with back button
|
|
651
|
+
* ```tsx
|
|
652
|
+
* <PageHeader
|
|
653
|
+
* title={user.name}
|
|
654
|
+
* description={user.email}
|
|
655
|
+
* back={{
|
|
656
|
+
* label: 'Users',
|
|
657
|
+
* to: '/users',
|
|
658
|
+
* }}
|
|
659
|
+
* actions={
|
|
660
|
+
* <>
|
|
661
|
+
* <Button variant="outline">Edit</Button>
|
|
662
|
+
* <Button variant="destructive">Delete</Button>
|
|
663
|
+
* </>
|
|
664
|
+
* }
|
|
665
|
+
* />
|
|
666
|
+
* ```
|
|
667
|
+
*
|
|
668
|
+
* @example With breadcrumbs slot
|
|
669
|
+
* ```tsx
|
|
670
|
+
* <PageHeader
|
|
671
|
+
* breadcrumbs={
|
|
672
|
+
* <nav aria-label="Breadcrumb">
|
|
673
|
+
* <ol className="flex items-center gap-1">
|
|
674
|
+
* <li><Link to="/">Home</Link></li>
|
|
675
|
+
* <li>/</li>
|
|
676
|
+
* <li>Users</li>
|
|
677
|
+
* </ol>
|
|
678
|
+
* </nav>
|
|
679
|
+
* }
|
|
680
|
+
* title="Users"
|
|
681
|
+
* />
|
|
682
|
+
* ```
|
|
683
|
+
*/
|
|
684
|
+
declare const PageHeader: react.ForwardRefExoticComponent<PageHeaderProps & react.RefAttributes<HTMLElement>>;
|
|
685
|
+
|
|
686
|
+
declare const pageHeaderBaseClass = "flex w-full flex-col gap-3";
|
|
687
|
+
/** Adds a bottom border separator below the header. */
|
|
688
|
+
declare const pageHeaderBorderedClass = "border-b border-border pb-4";
|
|
689
|
+
declare const pageHeaderTitleRowClass = "flex flex-wrap items-start justify-between gap-3 sm:gap-4";
|
|
690
|
+
declare const pageHeaderTitleBlockClass = "min-w-0 flex-1 space-y-1";
|
|
691
|
+
declare const pageHeaderTitleClass = "text-2xl font-semibold tracking-tight text-foreground";
|
|
692
|
+
declare const pageHeaderDescriptionClass = "text-sm text-muted-foreground";
|
|
693
|
+
declare const pageHeaderActionsClass = "flex shrink-0 flex-wrap items-center gap-2";
|
|
694
|
+
declare const pageHeaderBackClass = "inline-flex items-center gap-1.5 self-start text-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 focus-visible:ring-offset-2 focus-visible:ring-offset-background rounded-md";
|
|
695
|
+
declare const pageHeaderBackIconClass = "size-4 shrink-0 rtl:rotate-180";
|
|
696
|
+
declare const pageHeaderBreadcrumbsClass = "text-xs text-muted-foreground";
|
|
697
|
+
|
|
698
|
+
interface DetailPageNotFoundState {
|
|
699
|
+
icon?: ReactNode;
|
|
700
|
+
title?: ReactNode;
|
|
701
|
+
description?: ReactNode;
|
|
702
|
+
/** Override the action slot. Pass `null` to hide it (no default action). */
|
|
703
|
+
action?: ReactNode | null;
|
|
704
|
+
}
|
|
705
|
+
interface DetailPageLabels {
|
|
706
|
+
notFoundTitle?: string;
|
|
707
|
+
notFoundDescription?: string;
|
|
708
|
+
}
|
|
709
|
+
interface DetailPageProps {
|
|
710
|
+
/** Page title (required). Typically the resource name (e.g. "User · Layla Hassan"). */
|
|
711
|
+
title: ReactNode;
|
|
712
|
+
/** Optional secondary text under the title (e.g. status pill, joined date). */
|
|
713
|
+
description?: ReactNode;
|
|
714
|
+
/** Optional back-button config — forwarded straight to `PageHeader.back`. */
|
|
715
|
+
back?: PageHeaderBackProps;
|
|
716
|
+
/** Header action slot — Edit / Archive / Delete buttons. */
|
|
717
|
+
actions?: ReactNode;
|
|
718
|
+
/** Page-header bottom border separator. Defaults to `true` for detail pages. */
|
|
719
|
+
bordered?: boolean;
|
|
720
|
+
/**
|
|
721
|
+
* Show skeleton placeholders in the body while the record is being fetched.
|
|
722
|
+
* Wins over `notFound` so users don't see a flicker of "not found" before
|
|
723
|
+
* the data resolves.
|
|
724
|
+
*/
|
|
725
|
+
isLoading?: boolean;
|
|
726
|
+
/** Number of skeleton rows shown while loading. Defaults to `6`. */
|
|
727
|
+
loadingRowCount?: number;
|
|
728
|
+
/**
|
|
729
|
+
* Render the "not found" empty state instead of `children`. Use when the
|
|
730
|
+
* query resolved successfully but the requested record does not exist
|
|
731
|
+
* (404-style). Ignored while `isLoading` is true.
|
|
732
|
+
*/
|
|
733
|
+
notFound?: boolean;
|
|
734
|
+
/** Customize the not-found surface. Defaults to a `FileQuestion` icon + label-driven copy. */
|
|
735
|
+
notFoundState?: DetailPageNotFoundState;
|
|
736
|
+
/** Localized copy for the default not-found prompt. */
|
|
737
|
+
labels?: DetailPageLabels;
|
|
738
|
+
/** Body content — typically a stack of `<section>` cards / DescriptionList rows. */
|
|
739
|
+
children: ReactNode;
|
|
740
|
+
/** Class applied to the outer wrapper. */
|
|
741
|
+
className?: string;
|
|
742
|
+
/** Class applied to the body container. */
|
|
743
|
+
bodyClassName?: string;
|
|
744
|
+
}
|
|
745
|
+
/**
|
|
746
|
+
* Declarative detail-page template — composes `PageHeader` + a body that
|
|
747
|
+
* renders one of three branches:
|
|
748
|
+
*
|
|
749
|
+
* 1. **`isLoading`** → skeleton rows (wins over everything else).
|
|
750
|
+
* 2. **`notFound`** → `<EmptyState>` with a `FileQuestion` icon.
|
|
751
|
+
* 3. otherwise → `children` (consumer composes their own sections / cards).
|
|
752
|
+
*
|
|
753
|
+
* Pairs with `<ListPage>` (read flow) and `<FormPage>` (write flow) as the
|
|
754
|
+
* third Phase-4 template. RHF-agnostic — no form integration.
|
|
755
|
+
*
|
|
756
|
+
* @example View user
|
|
757
|
+
* ```tsx
|
|
758
|
+
* const { data: user, isLoading } = useUser(id);
|
|
759
|
+
*
|
|
760
|
+
* return (
|
|
761
|
+
* <DetailPage
|
|
762
|
+
* title={user ? `${user.name}` : 'Loading…'}
|
|
763
|
+
* description={user?.role}
|
|
764
|
+
* back={{ to: '/users' }}
|
|
765
|
+
* actions={
|
|
766
|
+
* <>
|
|
767
|
+
* <Button variant="outline" onClick={onArchive}>Archive</Button>
|
|
768
|
+
* <Button onClick={onEdit}>Edit</Button>
|
|
769
|
+
* </>
|
|
770
|
+
* }
|
|
771
|
+
* isLoading={isLoading}
|
|
772
|
+
* notFound={!isLoading && !user}
|
|
773
|
+
* >
|
|
774
|
+
* {user && (
|
|
775
|
+
* <section className="grid gap-4 md:grid-cols-2">…</section>
|
|
776
|
+
* )}
|
|
777
|
+
* </DetailPage>
|
|
778
|
+
* );
|
|
779
|
+
* ```
|
|
780
|
+
*
|
|
781
|
+
* @example Custom not-found
|
|
782
|
+
* ```tsx
|
|
783
|
+
* <DetailPage
|
|
784
|
+
* title="Order"
|
|
785
|
+
* notFound={!order}
|
|
786
|
+
* notFoundState={{
|
|
787
|
+
* title: 'Order does not exist',
|
|
788
|
+
* description: 'It may have been cancelled.',
|
|
789
|
+
* action: <Button onClick={() => navigate('/orders')}>Back to orders</Button>,
|
|
790
|
+
* }}
|
|
791
|
+
* >
|
|
792
|
+
* …
|
|
793
|
+
* </DetailPage>
|
|
794
|
+
* ```
|
|
795
|
+
*/
|
|
796
|
+
declare function DetailPage({ title, description, back, actions, bordered, isLoading, loadingRowCount, notFound, notFoundState, labels: labelsProp, children, className, bodyClassName, }: DetailPageProps): react_jsx_runtime.JSX.Element;
|
|
797
|
+
|
|
798
|
+
/** Outermost wrapper of `DetailPage` — vertical flex column with consistent spacing. */
|
|
799
|
+
declare const detailPageBaseClass = "flex w-full flex-col gap-6";
|
|
800
|
+
/** Body region that wraps either children, the skeleton, or the not-found state. */
|
|
801
|
+
declare const detailPageBodyClass = "flex flex-col gap-6";
|
|
802
|
+
/**
|
|
803
|
+
* Single skeleton row rendered while `isLoading` is true. Tuned to a
|
|
804
|
+
* description-list cell — short width range, comfortable height.
|
|
805
|
+
*/
|
|
806
|
+
declare const detailPageSkeletonRowClass = "h-5 w-full animate-pulse rounded-md bg-muted";
|
|
807
|
+
/** Container around the not-found `<EmptyState>` — matches the ListPage empty surface. */
|
|
808
|
+
declare const detailPageEmptyClass = "rounded-md border border-border bg-card";
|
|
809
|
+
|
|
810
|
+
/**
|
|
811
|
+
* Modal dialog built on `@radix-ui/react-dialog`. Compound API — same shape as
|
|
812
|
+
* `DropdownMenu`. Use for edit/create in-modal flows, confirmations, and any
|
|
813
|
+
* blocking interaction. For destructive confirms specifically, the
|
|
814
|
+
* `AlertDialog` (Phase 2) layer will sit on top of this primitive later.
|
|
815
|
+
*
|
|
816
|
+
* @example Edit-in-modal
|
|
817
|
+
* ```tsx
|
|
818
|
+
* <Dialog>
|
|
819
|
+
* <DialogTrigger asChild>
|
|
820
|
+
* <Button variant="outline">Edit user</Button>
|
|
821
|
+
* </DialogTrigger>
|
|
822
|
+
* <DialogContent>
|
|
823
|
+
* <DialogHeader>
|
|
824
|
+
* <DialogTitle>Edit user</DialogTitle>
|
|
825
|
+
* <DialogDescription>Update the user's profile.</DialogDescription>
|
|
826
|
+
* </DialogHeader>
|
|
827
|
+
* <form onSubmit={handleSubmit}>
|
|
828
|
+
* <Field name="name" label="Name"><Input /></Field>
|
|
829
|
+
* </form>
|
|
830
|
+
* <DialogFooter>
|
|
831
|
+
* <DialogClose asChild>
|
|
832
|
+
* <Button variant="outline">Cancel</Button>
|
|
833
|
+
* </DialogClose>
|
|
834
|
+
* <Button type="submit">Save</Button>
|
|
835
|
+
* </DialogFooter>
|
|
836
|
+
* </DialogContent>
|
|
837
|
+
* </Dialog>
|
|
838
|
+
* ```
|
|
839
|
+
*
|
|
840
|
+
* @example Controlled state
|
|
841
|
+
* ```tsx
|
|
842
|
+
* const [open, setOpen] = useState(false);
|
|
843
|
+
*
|
|
844
|
+
* <Dialog open={open} onOpenChange={setOpen}>
|
|
845
|
+
* <DialogContent>…</DialogContent>
|
|
846
|
+
* </Dialog>
|
|
847
|
+
* ```
|
|
848
|
+
*/
|
|
849
|
+
declare const Dialog: react.FC<RadixDialog.DialogProps>;
|
|
850
|
+
declare const DialogTrigger: react.ForwardRefExoticComponent<RadixDialog.DialogTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
851
|
+
declare const DialogPortal: react.FC<RadixDialog.DialogPortalProps>;
|
|
852
|
+
/** Use inside `DialogFooter` to wire a custom Cancel/Close button. */
|
|
853
|
+
declare const DialogClose: react.ForwardRefExoticComponent<RadixDialog.DialogCloseProps & react.RefAttributes<HTMLButtonElement>>;
|
|
854
|
+
interface DialogOverlayProps extends ComponentPropsWithoutRef<typeof RadixDialog.Overlay> {
|
|
855
|
+
}
|
|
856
|
+
declare const DialogOverlay: react.ForwardRefExoticComponent<DialogOverlayProps & react.RefAttributes<HTMLDivElement>>;
|
|
857
|
+
interface DialogContentProps extends ComponentPropsWithoutRef<typeof RadixDialog.Content> {
|
|
858
|
+
/** Render the default × close button at the top-end of the panel. Default `true`. */
|
|
859
|
+
showCloseButton?: boolean;
|
|
860
|
+
/** Accessible label for the default close button. Default `'Close'`. */
|
|
861
|
+
closeLabel?: string;
|
|
862
|
+
}
|
|
863
|
+
declare const DialogContent: react.ForwardRefExoticComponent<DialogContentProps & react.RefAttributes<HTMLDivElement>>;
|
|
864
|
+
interface DialogHeaderProps extends HTMLAttributes<HTMLDivElement> {
|
|
865
|
+
children: ReactNode;
|
|
866
|
+
}
|
|
867
|
+
declare function DialogHeader({ className, ...props }: DialogHeaderProps): react_jsx_runtime.JSX.Element;
|
|
868
|
+
interface DialogFooterProps extends HTMLAttributes<HTMLDivElement> {
|
|
869
|
+
children: ReactNode;
|
|
870
|
+
}
|
|
871
|
+
declare function DialogFooter({ className, ...props }: DialogFooterProps): react_jsx_runtime.JSX.Element;
|
|
872
|
+
interface DialogTitleProps extends ComponentPropsWithoutRef<typeof RadixDialog.Title> {
|
|
873
|
+
}
|
|
874
|
+
declare const DialogTitle: react.ForwardRefExoticComponent<DialogTitleProps & react.RefAttributes<HTMLHeadingElement>>;
|
|
875
|
+
interface DialogDescriptionProps extends ComponentPropsWithoutRef<typeof RadixDialog.Description> {
|
|
876
|
+
}
|
|
877
|
+
declare const DialogDescription: react.ForwardRefExoticComponent<DialogDescriptionProps & react.RefAttributes<HTMLParagraphElement>>;
|
|
878
|
+
|
|
879
|
+
/** Backdrop overlay rendered behind the dialog content. Fades in/out. */
|
|
880
|
+
declare const dialogOverlayClass = "fixed inset-0 z-50 bg-foreground/40 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0";
|
|
881
|
+
/**
|
|
882
|
+
* Centered content panel. Caps width at `lg` by default — consumers wanting a
|
|
883
|
+
* wider/narrower dialog override via `className`. Zoom + fade animation matches
|
|
884
|
+
* the rest of the kit's overlays (Select, DropdownMenu).
|
|
885
|
+
*/
|
|
886
|
+
declare const dialogContentClass = "fixed start-1/2 top-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 rounded-lg border border-border bg-background p-6 text-foreground shadow-lg outline-none rtl:translate-x-1/2 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95";
|
|
887
|
+
/** Title + description grouping above the body. */
|
|
888
|
+
declare const dialogHeaderClass = "flex flex-col gap-1.5 text-start";
|
|
889
|
+
/** Dialog title — rendered as the heading and used for aria-labelledby. */
|
|
890
|
+
declare const dialogTitleClass = "text-lg font-semibold text-foreground";
|
|
891
|
+
/** Secondary text linked to the dialog via aria-describedby. */
|
|
892
|
+
declare const dialogDescriptionClass = "text-sm text-muted-foreground";
|
|
893
|
+
/** Action row at the bottom. Reverses on small screens so primary stays on top. */
|
|
894
|
+
declare const dialogFooterClass = "flex flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-end";
|
|
895
|
+
/** Small × button rendered at the top-end of the content panel. */
|
|
896
|
+
declare const dialogCloseButtonClass = "absolute end-4 top-4 inline-flex size-7 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:pointer-events-none";
|
|
897
|
+
|
|
446
898
|
type DropdownMenuItemVariant = 'default' | 'destructive';
|
|
447
899
|
declare const dropdownMenuContentClass = "z-50 min-w-32 overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95";
|
|
448
900
|
declare const dropdownMenuItemBaseClass = "relative flex w-full cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0";
|
|
@@ -675,107 +1127,6 @@ type FieldProps<TValues extends FieldValues = FieldValues, TName extends FieldPa
|
|
|
675
1127
|
*/
|
|
676
1128
|
declare function Field<TValues extends FieldValues = FieldValues, TName extends FieldPath<TValues> = FieldPath<TValues>>(props: FieldProps<TValues, TName>): ReactElement;
|
|
677
1129
|
|
|
678
|
-
type PageHeaderHeadingLevel = 'h1' | 'h2' | 'h3' | 'h4';
|
|
679
|
-
/** Props passed to the routing-library `render` slot of the back button. */
|
|
680
|
-
interface PageHeaderBackRenderProps {
|
|
681
|
-
to?: LinkProps['to'];
|
|
682
|
-
className?: string;
|
|
683
|
-
children: ReactNode;
|
|
684
|
-
onClick?: () => void;
|
|
685
|
-
}
|
|
686
|
-
interface PageHeaderBackProps {
|
|
687
|
-
/** Visible label next to the arrow. Defaults to `"Back"`. */
|
|
688
|
-
label?: ReactNode;
|
|
689
|
-
/** Target to — renders a React Router `<Link>`. */
|
|
690
|
-
to?: LinkProps['to'];
|
|
691
|
-
/** Click handler — renders a `<button>` (or wraps the `render` element). */
|
|
692
|
-
onClick?: () => void;
|
|
693
|
-
/** Routing-library render prop (e.g. wrap a different link component). Wins over `to`. */
|
|
694
|
-
render?: (props: PageHeaderBackRenderProps) => ReactElement;
|
|
695
|
-
}
|
|
696
|
-
interface PageHeaderProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
697
|
-
/** Page title (required). */
|
|
698
|
-
title: ReactNode;
|
|
699
|
-
/** Optional secondary text under the title. */
|
|
700
|
-
description?: ReactNode;
|
|
701
|
-
/** Slot above the title for breadcrumbs (e.g. `<Breadcrumbs items={…} />` or your own JSX). */
|
|
702
|
-
breadcrumbs?: ReactNode;
|
|
703
|
-
/** Optional back button rendered above the title row. */
|
|
704
|
-
back?: PageHeaderBackProps;
|
|
705
|
-
/** Slot on the trailing side of the title row — buttons, dropdowns, etc. */
|
|
706
|
-
actions?: ReactNode;
|
|
707
|
-
/** Heading level for the title element. Defaults to `'h1'`. */
|
|
708
|
-
as?: PageHeaderHeadingLevel;
|
|
709
|
-
/** Add a bottom border separator. Default: `false`. */
|
|
710
|
-
bordered?: boolean;
|
|
711
|
-
}
|
|
712
|
-
/**
|
|
713
|
-
* Top-of-page header — title, optional description, breadcrumbs, back button,
|
|
714
|
-
* and actions slot. The first thing a user sees on any list / detail / form
|
|
715
|
-
* page in a dashboard.
|
|
716
|
-
*
|
|
717
|
-
* Designed to drop directly into `<DashboardContent>` (or any padded page
|
|
718
|
-
* container). Has no outer padding of its own — the surrounding layout owns
|
|
719
|
-
* spacing.
|
|
720
|
-
*
|
|
721
|
-
* @example List page header with primary action
|
|
722
|
-
* ```tsx
|
|
723
|
-
* <PageHeader
|
|
724
|
-
* title="Users"
|
|
725
|
-
* description="Manage your team members and their roles."
|
|
726
|
-
* actions={<Button onClick={openCreate}>Add user</Button>}
|
|
727
|
-
* bordered
|
|
728
|
-
* />
|
|
729
|
-
* ```
|
|
730
|
-
*
|
|
731
|
-
* @example Detail page header with back button
|
|
732
|
-
* ```tsx
|
|
733
|
-
* <PageHeader
|
|
734
|
-
* title={user.name}
|
|
735
|
-
* description={user.email}
|
|
736
|
-
* back={{
|
|
737
|
-
* label: 'Users',
|
|
738
|
-
* to: '/users',
|
|
739
|
-
* }}
|
|
740
|
-
* actions={
|
|
741
|
-
* <>
|
|
742
|
-
* <Button variant="outline">Edit</Button>
|
|
743
|
-
* <Button variant="destructive">Delete</Button>
|
|
744
|
-
* </>
|
|
745
|
-
* }
|
|
746
|
-
* />
|
|
747
|
-
* ```
|
|
748
|
-
*
|
|
749
|
-
* @example With breadcrumbs slot
|
|
750
|
-
* ```tsx
|
|
751
|
-
* <PageHeader
|
|
752
|
-
* breadcrumbs={
|
|
753
|
-
* <nav aria-label="Breadcrumb">
|
|
754
|
-
* <ol className="flex items-center gap-1">
|
|
755
|
-
* <li><Link to="/">Home</Link></li>
|
|
756
|
-
* <li>/</li>
|
|
757
|
-
* <li>Users</li>
|
|
758
|
-
* </ol>
|
|
759
|
-
* </nav>
|
|
760
|
-
* }
|
|
761
|
-
* title="Users"
|
|
762
|
-
* />
|
|
763
|
-
* ```
|
|
764
|
-
*/
|
|
765
|
-
declare const PageHeader: react.ForwardRefExoticComponent<PageHeaderProps & react.RefAttributes<HTMLElement>>;
|
|
766
|
-
|
|
767
|
-
declare const pageHeaderBaseClass = "flex w-full flex-col gap-3";
|
|
768
|
-
/** Adds a bottom border separator below the header. */
|
|
769
|
-
declare const pageHeaderBorderedClass = "border-b border-border pb-4";
|
|
770
|
-
declare const pageHeaderTitleRowClass = "flex flex-wrap items-start justify-between gap-3 sm:gap-4";
|
|
771
|
-
declare const pageHeaderTitleBlockClass = "min-w-0 flex-1 space-y-1";
|
|
772
|
-
declare const pageHeaderTitleClass = "text-2xl font-semibold tracking-tight text-foreground";
|
|
773
|
-
declare const pageHeaderDescriptionClass = "text-sm text-muted-foreground";
|
|
774
|
-
declare const pageHeaderActionsClass = "flex shrink-0 flex-wrap items-center gap-2";
|
|
775
|
-
declare const pageHeaderBackClass = "inline-flex items-center gap-1.5 self-start text-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 focus-visible:ring-offset-2 focus-visible:ring-offset-background rounded-md";
|
|
776
|
-
declare const pageHeaderBackIconClass = "size-4 shrink-0 rtl:rotate-180";
|
|
777
|
-
declare const pageHeaderBreadcrumbsClass = "text-xs text-muted-foreground";
|
|
778
|
-
|
|
779
1130
|
interface FormPageProps {
|
|
780
1131
|
/** Page title (required). Rendered as an `<h1>` by `PageHeader`. */
|
|
781
1132
|
title: ReactNode;
|
|
@@ -1549,9 +1900,161 @@ interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>
|
|
|
1549
1900
|
*/
|
|
1550
1901
|
declare const Textarea: react.ForwardRefExoticComponent<TextareaProps & react.RefAttributes<HTMLTextAreaElement>>;
|
|
1551
1902
|
|
|
1903
|
+
interface ToasterProps extends ToasterProps$1 {
|
|
1904
|
+
}
|
|
1905
|
+
/**
|
|
1906
|
+
* Toast host. Render **once** at the app root (typically inside or next to
|
|
1907
|
+
* `<AppShell>`) — every subsequent call to `toast(...)` from anywhere in the
|
|
1908
|
+
* tree pops a notification through this single host. Built on
|
|
1909
|
+
* [`sonner`](https://sonner.emilkowal.ski).
|
|
1910
|
+
*
|
|
1911
|
+
* Defaults tuned for dashboards:
|
|
1912
|
+
* - `position` flips with `<html dir>`: bottom-right in LTR, bottom-left in RTL.
|
|
1913
|
+
* - `richColors` enabled so success / error / warning / info pick up the kit's
|
|
1914
|
+
* feedback tokens automatically.
|
|
1915
|
+
* - `closeButton` enabled so users can dismiss without waiting for the timer.
|
|
1916
|
+
* - `duration` 4 s (sonner default). Override per-call via `toast(msg, { duration })`.
|
|
1917
|
+
*
|
|
1918
|
+
* Override any of the above via props — the wrapper is a thin pass-through.
|
|
1919
|
+
*
|
|
1920
|
+
* @example Mount at the app root
|
|
1921
|
+
* ```tsx
|
|
1922
|
+
* import { AppShell, Toaster, toast } from '@dimaan/ui';
|
|
1923
|
+
*
|
|
1924
|
+
* function App() {
|
|
1925
|
+
* return (
|
|
1926
|
+
* <AppShell brand={…} nav={…}>
|
|
1927
|
+
* <Routes>…</Routes>
|
|
1928
|
+
* <Toaster />
|
|
1929
|
+
* </AppShell>
|
|
1930
|
+
* );
|
|
1931
|
+
* }
|
|
1932
|
+
* ```
|
|
1933
|
+
*
|
|
1934
|
+
* @example Fire toasts from anywhere
|
|
1935
|
+
* ```tsx
|
|
1936
|
+
* import { toast } from '@dimaan/ui';
|
|
1937
|
+
*
|
|
1938
|
+
* toast.success('Saved');
|
|
1939
|
+
* toast.error('Failed to save', { description: 'Try again.' });
|
|
1940
|
+
* toast.promise(saveUser(), {
|
|
1941
|
+
* loading: 'Saving…',
|
|
1942
|
+
* success: 'Saved',
|
|
1943
|
+
* error: 'Failed to save',
|
|
1944
|
+
* });
|
|
1945
|
+
* ```
|
|
1946
|
+
*/
|
|
1947
|
+
declare function Toaster(props: ToasterProps): react_jsx_runtime.JSX.Element;
|
|
1948
|
+
|
|
1949
|
+
/**
|
|
1950
|
+
* Tailwind class names mapped onto sonner's `toastOptions.classNames` slots.
|
|
1951
|
+
* Every entry uses our design tokens so toasts pick up the kit's theme
|
|
1952
|
+
* automatically.
|
|
1953
|
+
*/
|
|
1954
|
+
declare const toastClassNames: {
|
|
1955
|
+
toast: string;
|
|
1956
|
+
title: string;
|
|
1957
|
+
description: string;
|
|
1958
|
+
actionButton: string;
|
|
1959
|
+
cancelButton: string;
|
|
1960
|
+
closeButton: string;
|
|
1961
|
+
icon: string;
|
|
1962
|
+
content: string;
|
|
1963
|
+
success: string;
|
|
1964
|
+
error: string;
|
|
1965
|
+
warning: string;
|
|
1966
|
+
info: string;
|
|
1967
|
+
};
|
|
1968
|
+
|
|
1969
|
+
interface TooltipProviderProps extends ComponentPropsWithoutRef<typeof RadixTooltip.Provider> {
|
|
1970
|
+
}
|
|
1971
|
+
/**
|
|
1972
|
+
* App-level provider that coordinates show / hide delays across every
|
|
1973
|
+
* `<Tooltip>` in the tree. Mount **once** at the app root — typically next to
|
|
1974
|
+
* `<Toaster />` and `<ConfirmDialogProvider>`. Without it, individual
|
|
1975
|
+
* `<Tooltip>` calls fall back to Radix's per-instance defaults.
|
|
1976
|
+
*
|
|
1977
|
+
* Defaults tuned for dashboards:
|
|
1978
|
+
* - `delayDuration` 200 ms — fast enough to feel snappy on icon buttons but
|
|
1979
|
+
* slow enough to avoid the "rapid-cursor flash" effect when sweeping past.
|
|
1980
|
+
* - `skipDelayDuration` 300 ms — once one tooltip has shown, neighbouring
|
|
1981
|
+
* tooltips open instantly until the user pauses for ≥300 ms.
|
|
1982
|
+
*
|
|
1983
|
+
* @example Mount once
|
|
1984
|
+
* ```tsx
|
|
1985
|
+
* <AppShell brand={…} nav={…}>
|
|
1986
|
+
* <TooltipProvider>
|
|
1987
|
+
* <Routes>…</Routes>
|
|
1988
|
+
* </TooltipProvider>
|
|
1989
|
+
* <Toaster />
|
|
1990
|
+
* </AppShell>
|
|
1991
|
+
* ```
|
|
1992
|
+
*/
|
|
1993
|
+
declare function TooltipProvider({ delayDuration, skipDelayDuration, ...props }: TooltipProviderProps): react_jsx_runtime.JSX.Element;
|
|
1994
|
+
interface TooltipProps {
|
|
1995
|
+
/** Tooltip text or rich content. When falsy the tooltip is skipped entirely. */
|
|
1996
|
+
content: ReactNode;
|
|
1997
|
+
/** The trigger element (button / icon button / link). Rendered via `asChild`. */
|
|
1998
|
+
children: ReactElement;
|
|
1999
|
+
/** Side relative to the trigger. RTL flips automatically via the global DirectionProvider. */
|
|
2000
|
+
side?: 'top' | 'bottom' | 'left' | 'right';
|
|
2001
|
+
/** Alignment along the side axis. */
|
|
2002
|
+
align?: 'start' | 'center' | 'end';
|
|
2003
|
+
/** Override the provider-level show delay (ms). */
|
|
2004
|
+
delayDuration?: number;
|
|
2005
|
+
/** Opt-out — render the children but never show a tooltip. */
|
|
2006
|
+
disabled?: boolean;
|
|
2007
|
+
/** Controlled open state. */
|
|
2008
|
+
open?: boolean;
|
|
2009
|
+
/** Uncontrolled initial open state. */
|
|
2010
|
+
defaultOpen?: boolean;
|
|
2011
|
+
/** Fired when the open state changes. */
|
|
2012
|
+
onOpenChange?: (open: boolean) => void;
|
|
2013
|
+
/** Class applied to the content panel. */
|
|
2014
|
+
className?: string;
|
|
2015
|
+
/** Offset in pixels between the trigger and the panel. Defaults to `6`. */
|
|
2016
|
+
sideOffset?: number;
|
|
2017
|
+
}
|
|
2018
|
+
/**
|
|
2019
|
+
* Single-line wrapper that adds a hover / focus tooltip to its child. For the
|
|
2020
|
+
* 80% case (icon buttons, truncated labels, "what does this mean?" affordances)
|
|
2021
|
+
* — drop in a `<Tooltip>` and forget it.
|
|
2022
|
+
*
|
|
2023
|
+
* Hover, focus, long-press (touch), and keyboard navigation all open it; mouse
|
|
2024
|
+
* leave, blur, Escape, and the matching trigger event close it. The child must
|
|
2025
|
+
* be a single React element that forwards refs / props (any of our kit's
|
|
2026
|
+
* components do).
|
|
2027
|
+
*
|
|
2028
|
+
* @example Icon button
|
|
2029
|
+
* ```tsx
|
|
2030
|
+
* <Tooltip content="Edit user">
|
|
2031
|
+
* <Button variant="ghost" size="icon" aria-label="Edit user">
|
|
2032
|
+
* <Pencil />
|
|
2033
|
+
* </Button>
|
|
2034
|
+
* </Tooltip>
|
|
2035
|
+
* ```
|
|
2036
|
+
*
|
|
2037
|
+
* @example Skip the tooltip dynamically
|
|
2038
|
+
* ```tsx
|
|
2039
|
+
* <Tooltip content="Cannot delete a system user" disabled={!user.isSystem}>
|
|
2040
|
+
* <Button onClick={onDelete}>Delete</Button>
|
|
2041
|
+
* </Tooltip>
|
|
2042
|
+
* ```
|
|
2043
|
+
*/
|
|
2044
|
+
declare function Tooltip({ content, children, side, align, delayDuration, disabled, open, defaultOpen, onOpenChange, className, sideOffset, }: TooltipProps): react_jsx_runtime.JSX.Element;
|
|
2045
|
+
|
|
2046
|
+
/**
|
|
2047
|
+
* Tooltip content panel. Small dark-ish surface with a subtle shadow and
|
|
2048
|
+
* the same zoom/fade animation as the rest of the kit's overlays
|
|
2049
|
+
* (Select, DropdownMenu, Dialog).
|
|
2050
|
+
*/
|
|
2051
|
+
declare const tooltipContentClass = "z-50 max-w-xs rounded-md bg-foreground px-2.5 py-1.5 text-xs font-medium text-background shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95";
|
|
2052
|
+
/** Optional arrow that matches the panel surface. */
|
|
2053
|
+
declare const tooltipArrowClass = "fill-foreground";
|
|
2054
|
+
|
|
1552
2055
|
type Direction = 'ltr' | 'rtl';
|
|
1553
2056
|
declare function useDirection(): Direction;
|
|
1554
2057
|
|
|
1555
2058
|
declare function cn(...inputs: ClassValue[]): string;
|
|
1556
2059
|
|
|
1557
|
-
export { AppShell, type AppShellBrand, type AppShellNavGroup, type AppShellNavItem, type AppShellProps, Avatar, type AvatarProps, Badge, type BadgeProps, type BadgeSize, type BadgeVariant, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Checkbox, type CheckboxProps, type CheckboxSize, type Column, type ColumnAlign, DashboardContent, type DashboardContentProps, DashboardHeader, type DashboardHeaderProps, DashboardLayout, type DashboardLayoutContextValue, type DashboardLayoutProps, DashboardMain, type DashboardMainProps, DatePicker, type DatePickerProps, type DatePickerSize, type DatePickerVariant, type Direction, DropdownMenu, DropdownMenuContent, type DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuItem, type DropdownMenuItemProps, type DropdownMenuItemVariant, DropdownMenuLabel, type DropdownMenuLabelProps, DropdownMenuPortal, DropdownMenuSeparator, type DropdownMenuSeparatorProps, DropdownMenuShortcut, type DropdownMenuShortcutProps, DropdownMenuTrigger, EmptyState, type EmptyStateProps, type EmptyStateSize, Field, type FieldOrientation, type FieldProps, type FieldRHFProps, FormPage, type FormPageProps, HeaderActions, type HeaderActionsProps, HeaderCollapseTrigger, type HeaderCollapseTriggerProps, HeaderMobileTrigger, type HeaderMobileTriggerProps, HeaderSearch, type HeaderSearchProps, HeaderTitle, type HeaderTitleProps, Input, type InputProps, type InputSize, type InputVariant, type LanguageOption, LanguageSwitcher, type LanguageSwitcherProps, ListPage, type ListPageEmptyState, type ListPageFilter, type ListPageLabels, type ListPageProps, PageHeader, type PageHeaderBackProps, type PageHeaderBackRenderProps, type PageHeaderHeadingLevel, type PageHeaderProps, type PaginationState, RadioGroup, RadioGroupItem, type RadioGroupOption, type RadioGroupOrientation, type RadioGroupProps, type RadioGroupSize, type RowSelectionState, Select, type SelectOption, type SelectProps, type SelectSize, type SelectVariant, Sidebar, SidebarFooter, type SidebarFooterProps, SidebarGroup, type SidebarGroupProps, SidebarHeader, type SidebarHeaderProps, SidebarNav, SidebarNavGroup, type SidebarNavGroupProps, SidebarNavItem, type SidebarNavItemProps, type SidebarNavItemRenderProps, type SidebarNavProps, type SidebarProps, type SortDirection, type SortState, type SortableValue, Switch, type SwitchProps, type SwitchSize, Table, type TableProps, type TableSize, type TableSizeClasses, Textarea, type TextareaProps, type TextareaResize, type TextareaSize, type TextareaVariant, badgeBaseClass, badgeDotSizeClass, badgeSizeClass, badgeVariantClass, buttonBaseClass, buttonSizeClass, buttonVariantClass, cn, datePickerCalendarClass, datePickerCaptionClass, datePickerContentClass, datePickerDayBaseClass, datePickerDayWrapperClass, datePickerDisabledClass, datePickerMonthClass, datePickerMonthGridClass, datePickerMonthsClass, datePickerNavButtonClass, datePickerNavClass, datePickerOutsideClass, datePickerPlaceholderClass, datePickerSelectedClass, datePickerTodayClass, datePickerTriggerBaseClass, datePickerTriggerSizeClass, datePickerTriggerVariantClass, datePickerValueClass, datePickerWeekClass, datePickerWeekdayClass, datePickerWeekdaysClass, dropdownMenuContentClass, dropdownMenuItemBaseClass, dropdownMenuItemInsetClass, dropdownMenuItemVariantClass, dropdownMenuLabelClass, dropdownMenuSeparatorClass, dropdownMenuShortcutClass, emptyStateActionsSpacingClass, emptyStateBaseClass, emptyStateContainerSizeClass, emptyStateDescriptionSizeClass, emptyStateIconWrapperBaseClass, emptyStateIconWrapperSizeClass, emptyStateTitleSizeClass, formPageActionsBarClass, formPageBaseClass, formPageBodyClass, formPageSkeletonRowClass, inputBaseClass, inputSizeClass, inputVariantClass, pageHeaderActionsClass, pageHeaderBackClass, pageHeaderBackIconClass, pageHeaderBaseClass, pageHeaderBorderedClass, pageHeaderBreadcrumbsClass, pageHeaderDescriptionClass, pageHeaderTitleBlockClass, pageHeaderTitleClass, pageHeaderTitleRowClass, radioGroupBaseClass, radioGroupOrientationClass, radioIndicatorBaseClass, radioIndicatorDotClass, radioIndicatorSizeClass, radioItemBaseClass, radioItemSizeClass, radioLabelSizeClass, radioOptionRowClass, selectBaseClass, selectSizeClass, selectVariantClass, switchThumbBaseClass, switchThumbClass, switchTrackBaseClass, switchTrackClass, alignClass as tableAlignClass, tableBaseClass, selectedRowClass as tableSelectedRowClass, tableSizeClass, sortIconClass as tableSortIconClass, textareaBaseClass, textareaResizeClass, textareaSizeClass, textareaVariantClass, useDashboardLayout, useDirection };
|
|
2060
|
+
export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, type AlertDialogContentProps, AlertDialogDescription, type AlertDialogDescriptionProps, AlertDialogFooter, type AlertDialogFooterProps, AlertDialogHeader, type AlertDialogHeaderProps, AlertDialogOverlay, type AlertDialogOverlayProps, AlertDialogPortal, AlertDialogTitle, type AlertDialogTitleProps, AlertDialogTrigger, AppShell, type AppShellBrand, type AppShellNavGroup, type AppShellNavItem, type AppShellProps, Avatar, type AvatarProps, Badge, type BadgeProps, type BadgeSize, type BadgeVariant, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Checkbox, type CheckboxProps, type CheckboxSize, type Column, type ColumnAlign, type ConfirmDialogLabels, ConfirmDialogProvider, type ConfirmDialogProviderProps, type ConfirmOptions, DashboardContent, type DashboardContentProps, DashboardHeader, type DashboardHeaderProps, DashboardLayout, type DashboardLayoutContextValue, type DashboardLayoutProps, DashboardMain, type DashboardMainProps, DatePicker, type DatePickerProps, type DatePickerSize, type DatePickerVariant, DetailPage, type DetailPageLabels, type DetailPageNotFoundState, type DetailPageProps, Dialog, DialogClose, DialogContent, type DialogContentProps, DialogDescription, type DialogDescriptionProps, DialogFooter, type DialogFooterProps, DialogHeader, type DialogHeaderProps, DialogOverlay, type DialogOverlayProps, DialogPortal, DialogTitle, type DialogTitleProps, DialogTrigger, type Direction, DropdownMenu, DropdownMenuContent, type DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuItem, type DropdownMenuItemProps, type DropdownMenuItemVariant, DropdownMenuLabel, type DropdownMenuLabelProps, DropdownMenuPortal, DropdownMenuSeparator, type DropdownMenuSeparatorProps, DropdownMenuShortcut, type DropdownMenuShortcutProps, DropdownMenuTrigger, EmptyState, type EmptyStateProps, type EmptyStateSize, Field, type FieldOrientation, type FieldProps, type FieldRHFProps, FormPage, type FormPageProps, HeaderActions, type HeaderActionsProps, HeaderCollapseTrigger, type HeaderCollapseTriggerProps, HeaderMobileTrigger, type HeaderMobileTriggerProps, HeaderSearch, type HeaderSearchProps, HeaderTitle, type HeaderTitleProps, Input, type InputProps, type InputSize, type InputVariant, type LanguageOption, LanguageSwitcher, type LanguageSwitcherProps, ListPage, type ListPageEmptyState, type ListPageFilter, type ListPageLabels, type ListPageProps, PageHeader, type PageHeaderBackProps, type PageHeaderBackRenderProps, type PageHeaderHeadingLevel, type PageHeaderProps, type PaginationState, RadioGroup, RadioGroupItem, type RadioGroupOption, type RadioGroupOrientation, type RadioGroupProps, type RadioGroupSize, type RowSelectionState, Select, type SelectOption, type SelectProps, type SelectSize, type SelectVariant, Sidebar, SidebarFooter, type SidebarFooterProps, SidebarGroup, type SidebarGroupProps, SidebarHeader, type SidebarHeaderProps, SidebarNav, SidebarNavGroup, type SidebarNavGroupProps, SidebarNavItem, type SidebarNavItemProps, type SidebarNavItemRenderProps, type SidebarNavProps, type SidebarProps, type SortDirection, type SortState, type SortableValue, Switch, type SwitchProps, type SwitchSize, Table, type TableProps, type TableSize, type TableSizeClasses, Textarea, type TextareaProps, type TextareaResize, type TextareaSize, type TextareaVariant, Toaster, type ToasterProps, Tooltip, type TooltipProps, TooltipProvider, type TooltipProviderProps, badgeBaseClass, badgeDotSizeClass, badgeSizeClass, badgeVariantClass, buttonBaseClass, buttonSizeClass, buttonVariantClass, cn, datePickerCalendarClass, datePickerCaptionClass, datePickerContentClass, datePickerDayBaseClass, datePickerDayWrapperClass, datePickerDisabledClass, datePickerMonthClass, datePickerMonthGridClass, datePickerMonthsClass, datePickerNavButtonClass, datePickerNavClass, datePickerOutsideClass, datePickerPlaceholderClass, datePickerSelectedClass, datePickerTodayClass, datePickerTriggerBaseClass, datePickerTriggerSizeClass, datePickerTriggerVariantClass, datePickerValueClass, datePickerWeekClass, datePickerWeekdayClass, datePickerWeekdaysClass, detailPageBaseClass, detailPageBodyClass, detailPageEmptyClass, detailPageSkeletonRowClass, dialogCloseButtonClass, dialogContentClass, dialogDescriptionClass, dialogFooterClass, dialogHeaderClass, dialogOverlayClass, dialogTitleClass, dropdownMenuContentClass, dropdownMenuItemBaseClass, dropdownMenuItemInsetClass, dropdownMenuItemVariantClass, dropdownMenuLabelClass, dropdownMenuSeparatorClass, dropdownMenuShortcutClass, emptyStateActionsSpacingClass, emptyStateBaseClass, emptyStateContainerSizeClass, emptyStateDescriptionSizeClass, emptyStateIconWrapperBaseClass, emptyStateIconWrapperSizeClass, emptyStateTitleSizeClass, formPageActionsBarClass, formPageBaseClass, formPageBodyClass, formPageSkeletonRowClass, inputBaseClass, inputSizeClass, inputVariantClass, pageHeaderActionsClass, pageHeaderBackClass, pageHeaderBackIconClass, pageHeaderBaseClass, pageHeaderBorderedClass, pageHeaderBreadcrumbsClass, pageHeaderDescriptionClass, pageHeaderTitleBlockClass, pageHeaderTitleClass, pageHeaderTitleRowClass, radioGroupBaseClass, radioGroupOrientationClass, radioIndicatorBaseClass, radioIndicatorDotClass, radioIndicatorSizeClass, radioItemBaseClass, radioItemSizeClass, radioLabelSizeClass, radioOptionRowClass, selectBaseClass, selectSizeClass, selectVariantClass, switchThumbBaseClass, switchThumbClass, switchTrackBaseClass, switchTrackClass, alignClass as tableAlignClass, tableBaseClass, selectedRowClass as tableSelectedRowClass, tableSizeClass, sortIconClass as tableSortIconClass, textareaBaseClass, textareaResizeClass, textareaSizeClass, textareaVariantClass, toastClassNames, tooltipArrowClass, tooltipContentClass, useConfirm, useDashboardLayout, useDirection };
|