@dimaan/ui 0.0.21 → 0.0.22

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.d.ts CHANGED
@@ -594,107 +594,6 @@ interface DatePickerProps {
594
594
  */
595
595
  declare const DatePicker: react.ForwardRefExoticComponent<DatePickerProps & react.RefAttributes<HTMLButtonElement>>;
596
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
597
  interface DetailPageNotFoundState {
699
598
  icon?: ReactNode;
700
599
  title?: ReactNode;
@@ -703,6 +602,8 @@ interface DetailPageNotFoundState {
703
602
  action?: ReactNode | null;
704
603
  }
705
604
  interface DetailPageLabels {
605
+ /** Back button label. Direction-aware default: `"Back"` / `"رجوع"`. */
606
+ back?: string;
706
607
  notFoundTitle?: string;
707
608
  notFoundDescription?: string;
708
609
  }
@@ -711,8 +612,6 @@ interface DetailPageProps {
711
612
  title: ReactNode;
712
613
  /** Optional secondary text under the title (e.g. status pill, joined date). */
713
614
  description?: ReactNode;
714
- /** Optional back-button config — forwarded straight to `PageHeader.back`. */
715
- back?: PageHeaderBackProps;
716
615
  /** Header action slot — Edit / Archive / Delete buttons. */
717
616
  actions?: ReactNode;
718
617
  /** Page-header bottom border separator. Defaults to `true` for detail pages. */
@@ -753,6 +652,10 @@ interface DetailPageProps {
753
652
  * Pairs with `<ListPage>` (read flow) and `<FormPage>` (write flow) as the
754
653
  * third Phase-4 template. RHF-agnostic — no form integration.
755
654
  *
655
+ * A back button is always rendered in the top-left of the header; clicking it
656
+ * calls `navigate(-1)`. The label is direction-aware (EN / AR) via
657
+ * `useDirection()` and can be overridden through `labels.back`.
658
+ *
756
659
  * @example View user
757
660
  * ```tsx
758
661
  * const { data: user, isLoading } = useUser(id);
@@ -761,7 +664,6 @@ interface DetailPageProps {
761
664
  * <DetailPage
762
665
  * title={user ? `${user.name}` : 'Loading…'}
763
666
  * description={user?.role}
764
- * back={{ to: '/users' }}
765
667
  * actions={
766
668
  * <>
767
669
  * <Button variant="outline" onClick={onArchive}>Archive</Button>
@@ -793,7 +695,7 @@ interface DetailPageProps {
793
695
  * </DetailPage>
794
696
  * ```
795
697
  */
796
- declare function DetailPage({ title, description, back, actions, bordered, isLoading, loadingRowCount, notFound, notFoundState, labels: labelsProp, children, className, bodyClassName, }: DetailPageProps): react_jsx_runtime.JSX.Element;
698
+ declare function DetailPage({ title, description, actions, bordered, isLoading, loadingRowCount, notFound, notFoundState, labels: labelsProp, children, className, bodyClassName, }: DetailPageProps): react_jsx_runtime.JSX.Element;
797
699
 
798
700
  /** Outermost wrapper of `DetailPage` — vertical flex column with consistent spacing. */
799
701
  declare const detailPageBaseClass = "flex w-full flex-col gap-6";
@@ -1343,101 +1245,6 @@ interface LanguageSwitcherProps<TCode extends string = string> extends Omit<Fiel
1343
1245
  }
1344
1246
  declare function LanguageSwitcher<TCode extends string = string>({ languages, value, onChange, ariaLabel, className, ...props }: LanguageSwitcherProps<TCode>): react_jsx_runtime.JSX.Element;
1345
1247
 
1346
- type SelectVariant = 'default' | 'filled' | 'ghost';
1347
- type SelectSize = 'sm' | 'md' | 'lg';
1348
- declare const selectVariantClass: Record<SelectVariant, string>;
1349
- /**
1350
- * `pe-*` is wider than `ps-*` to leave room for the chevron icon. Logical
1351
- * properties keep RTL working free.
1352
- */
1353
- declare const selectSizeClass: Record<SelectSize, string>;
1354
- declare const selectBaseClass = "group/select relative inline-flex w-full items-center text-foreground outline-none transition-[background-color,border-color,box-shadow] focus:ring-2 focus:ring-ring/40 focus:ring-offset-1 focus:ring-offset-background aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:ring-destructive/40 disabled:pointer-events-none disabled:opacity-50 cursor-pointer data-[placeholder]:text-muted-foreground";
1355
-
1356
- interface SelectOption {
1357
- value: string;
1358
- label: string;
1359
- disabled?: boolean;
1360
- }
1361
- interface SelectGroup {
1362
- label: string;
1363
- options: SelectOption[];
1364
- }
1365
- /**
1366
- * `options` accepts either a flat list of options OR a list of groups.
1367
- * Use `children` for full Radix composition (Select.Item, Select.Separator…).
1368
- */
1369
- type SelectOptions = SelectOption[] | SelectGroup[];
1370
- interface SelectProps {
1371
- variant?: SelectVariant;
1372
- /** Visual size. Named `selectSize` to mirror Input's `inputSize`. */
1373
- selectSize?: SelectSize;
1374
- /** Declarative options (flat or grouped). When `children` is provided it wins. */
1375
- options?: SelectOptions;
1376
- /** Placeholder shown when no value is selected. */
1377
- placeholder?: string;
1378
- /** Controlled value. */
1379
- value?: string;
1380
- /** Initial value for uncontrolled usage. */
1381
- defaultValue?: string;
1382
- /** Radix-style change handler — receives the new value directly. */
1383
- onValueChange?: (value: string) => void;
1384
- /**
1385
- * Synthetic-event handler for compatibility with `react-hook-form`'s
1386
- * `field.onChange` and other consumers that expect a `ChangeEvent`-shaped
1387
- * object. Both this and `onValueChange` fire on selection.
1388
- */
1389
- onChange?: (event: ChangeEvent<HTMLSelectElement>) => void;
1390
- /** Called when focus leaves the trigger. */
1391
- onBlur?: () => void;
1392
- /** Form name (for native form submission). */
1393
- name?: string;
1394
- /** Disables the trigger. */
1395
- disabled?: boolean;
1396
- /** Marks the underlying form input as required. */
1397
- required?: boolean;
1398
- /** Override id (otherwise auto-generated via useId). */
1399
- id?: string;
1400
- /** Class applied to the trigger button. */
1401
- className?: string;
1402
- 'aria-invalid'?: boolean | 'true' | 'false';
1403
- 'aria-describedby'?: string;
1404
- 'aria-label'?: string;
1405
- /** Radix children — used for advanced composition (Select.Group, etc.). */
1406
- children?: ReactNode;
1407
- }
1408
- /**
1409
- * Dropdown select built on `@radix-ui/react-select`. Renders only the trigger
1410
- * button + Radix popup — wrap it in `<Field label="…">` to add a label, helper
1411
- * text, error, and aria wiring.
1412
- *
1413
- * @example Inside a Field (RHF + Zod)
1414
- * ```tsx
1415
- * <Field name="country" label="Country" required>
1416
- * <Select options={COUNTRIES} placeholder="Pick one" />
1417
- * </Field>
1418
- * ```
1419
- *
1420
- * @example Bare in a filter bar (no label)
1421
- * ```tsx
1422
- * <Select
1423
- * value={status}
1424
- * onValueChange={setStatus}
1425
- * options={STATUS_OPTIONS}
1426
- * placeholder="Status"
1427
- * aria-label="Status filter"
1428
- * />
1429
- * ```
1430
- *
1431
- * @example Grouped options
1432
- * ```tsx
1433
- * <Select options={[
1434
- * { label: 'GCC', options: [{ value: 'sa', label: 'Saudi Arabia' }] },
1435
- * { label: 'Levant', options: [{ value: 'jo', label: 'Jordan' }] },
1436
- * ]} />
1437
- * ```
1438
- */
1439
- declare const Select: react.ForwardRefExoticComponent<SelectProps & react.RefAttributes<HTMLButtonElement>>;
1440
-
1441
1248
  type TableSize = 'sm' | 'md' | 'lg';
1442
1249
  interface TableSizeClasses {
1443
1250
  /** Applied to <tr> when needed (currently empty — present for symmetry). */
@@ -1588,21 +1395,152 @@ interface TableProps<T> {
1588
1395
  */
1589
1396
  declare function Table<T>(props: TableProps<T>): react_jsx_runtime.JSX.Element;
1590
1397
 
1398
+ type SelectVariant = 'default' | 'filled' | 'ghost';
1399
+ type SelectSize = 'sm' | 'md' | 'lg';
1400
+ declare const selectVariantClass: Record<SelectVariant, string>;
1401
+ /**
1402
+ * `pe-*` is wider than `ps-*` to leave room for the chevron icon. Logical
1403
+ * properties keep RTL working free.
1404
+ */
1405
+ declare const selectSizeClass: Record<SelectSize, string>;
1406
+ declare const selectBaseClass = "group/select relative inline-flex w-full items-center text-foreground outline-none transition-[background-color,border-color,box-shadow] focus:ring-2 focus:ring-ring/40 focus:ring-offset-1 focus:ring-offset-background aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:ring-destructive/40 disabled:pointer-events-none disabled:opacity-50 cursor-pointer data-[placeholder]:text-muted-foreground";
1407
+
1408
+ interface SelectOption {
1409
+ value: string;
1410
+ label: string;
1411
+ disabled?: boolean;
1412
+ }
1413
+ interface SelectGroup {
1414
+ label: string;
1415
+ options: SelectOption[];
1416
+ }
1591
1417
  /**
1592
- * One filter dropdown definition for `<ListPage>`. Server owns the actual
1593
- * filtering — the consumer keeps `filterValues` in state and ListPage just
1594
- * renders the Select + reports changes.
1418
+ * `options` accepts either a flat list of options OR a list of groups.
1419
+ * Use `children` for full Radix composition (Select.Item, Select.Separator…).
1595
1420
  */
1596
- interface ListPageFilter {
1597
- /** Unique key — used in the `filterValues` record and as aria-label fallback. */
1421
+ type SelectOptions = SelectOption[] | SelectGroup[];
1422
+ interface SelectProps {
1423
+ variant?: SelectVariant;
1424
+ /** Visual size. Named `selectSize` to mirror Input's `inputSize`. */
1425
+ selectSize?: SelectSize;
1426
+ /** Declarative options (flat or grouped). When `children` is provided it wins. */
1427
+ options?: SelectOptions;
1428
+ /** Placeholder shown when no value is selected. */
1429
+ placeholder?: string;
1430
+ /** Controlled value. */
1431
+ value?: string;
1432
+ /** Initial value for uncontrolled usage. */
1433
+ defaultValue?: string;
1434
+ /** Radix-style change handler — receives the new value directly. */
1435
+ onValueChange?: (value: string) => void;
1436
+ /**
1437
+ * Synthetic-event handler for compatibility with `react-hook-form`'s
1438
+ * `field.onChange` and other consumers that expect a `ChangeEvent`-shaped
1439
+ * object. Both this and `onValueChange` fire on selection.
1440
+ */
1441
+ onChange?: (event: ChangeEvent<HTMLSelectElement>) => void;
1442
+ /** Called when focus leaves the trigger. */
1443
+ onBlur?: () => void;
1444
+ /** Form name (for native form submission). */
1445
+ name?: string;
1446
+ /** Disables the trigger. */
1447
+ disabled?: boolean;
1448
+ /** Marks the underlying form input as required. */
1449
+ required?: boolean;
1450
+ /** Override id (otherwise auto-generated via useId). */
1451
+ id?: string;
1452
+ /** Class applied to the trigger button. */
1453
+ className?: string;
1454
+ 'aria-invalid'?: boolean | 'true' | 'false';
1455
+ 'aria-describedby'?: string;
1456
+ 'aria-label'?: string;
1457
+ /** Radix children — used for advanced composition (Select.Group, etc.). */
1458
+ children?: ReactNode;
1459
+ }
1460
+ /**
1461
+ * Dropdown select built on `@radix-ui/react-select`. Renders only the trigger
1462
+ * button + Radix popup — wrap it in `<Field label="…">` to add a label, helper
1463
+ * text, error, and aria wiring.
1464
+ *
1465
+ * @example Inside a Field (RHF + Zod)
1466
+ * ```tsx
1467
+ * <Field name="country" label="Country" required>
1468
+ * <Select options={COUNTRIES} placeholder="Pick one" />
1469
+ * </Field>
1470
+ * ```
1471
+ *
1472
+ * @example Bare in a filter bar (no label)
1473
+ * ```tsx
1474
+ * <Select
1475
+ * value={status}
1476
+ * onValueChange={setStatus}
1477
+ * options={STATUS_OPTIONS}
1478
+ * placeholder="Status"
1479
+ * aria-label="Status filter"
1480
+ * />
1481
+ * ```
1482
+ *
1483
+ * @example Grouped options
1484
+ * ```tsx
1485
+ * <Select options={[
1486
+ * { label: 'GCC', options: [{ value: 'sa', label: 'Saudi Arabia' }] },
1487
+ * { label: 'Levant', options: [{ value: 'jo', label: 'Jordan' }] },
1488
+ * ]} />
1489
+ * ```
1490
+ */
1491
+ declare const Select: react.ForwardRefExoticComponent<SelectProps & react.RefAttributes<HTMLButtonElement>>;
1492
+
1493
+ /** How many columns a filter spans in the responsive filter grid. */
1494
+ type ListPageFilterWidth = 'narrow' | 'default' | 'wide';
1495
+ interface ListPageFilterBase {
1496
+ /** Unique key — used in the `filterValues` record and as the aria-label fallback. */
1598
1497
  key: string;
1599
- /** Display label. Falls back to `key` for the Select's aria-label. */
1498
+ /** Display label. Drives the control's accessible name; falls back to `key`. */
1600
1499
  label?: ReactNode;
1601
- /** Options to choose from. The first option's value is treated as "no filter / show all". */
1500
+ /**
1501
+ * Column span in the responsive filter grid. `'wide'` spans two columns on
1502
+ * `sm+` (good for a search box); `'narrow'` / `'default'` span one. Controls
1503
+ * always fill their cell, so this only affects how many columns they take.
1504
+ */
1505
+ width?: ListPageFilterWidth;
1506
+ }
1507
+ /** Dropdown filter — the first option's value is treated as "show all / no filter". */
1508
+ interface ListPageSelectFilter extends ListPageFilterBase {
1509
+ type: 'select';
1510
+ options: SelectOption[];
1511
+ }
1512
+ /**
1513
+ * Free-text filter — rendered as a search input (with a leading search icon).
1514
+ * Use it for the page's global text query as well as per-field text filters.
1515
+ * Empty / whitespace-only string means "no filter".
1516
+ */
1517
+ interface ListPageTextFilter extends ListPageFilterBase {
1518
+ type: 'text';
1519
+ placeholder?: string;
1520
+ }
1521
+ /** Date filter — rendered as a `DatePicker`. ISO `YYYY-MM-DD`; empty means "no filter". */
1522
+ interface ListPageDateFilter extends ListPageFilterBase {
1523
+ type: 'date';
1524
+ placeholder?: string;
1525
+ }
1526
+ /**
1527
+ * Multi-select filter — rendered as a `MultiSelect`. The value is the selected
1528
+ * option values joined by commas (e.g. `"admin,editor"`); empty = no filter.
1529
+ * Consumers `.split(',')` to build the server query.
1530
+ */
1531
+ interface ListPageMultiSelectFilter extends ListPageFilterBase {
1532
+ type: 'multiselect';
1602
1533
  options: SelectOption[];
1603
- /** Width of the Select. Defaults to `'default'` (~11rem). */
1604
- width?: 'narrow' | 'default' | 'wide';
1534
+ placeholder?: string;
1605
1535
  }
1536
+ /**
1537
+ * One filter definition for `<ListPage>`, discriminated by `type`. The consumer
1538
+ * declares the control kind explicitly (`select` / `text` / `date`); the server
1539
+ * still owns the actual filtering — every filter reads and writes a single
1540
+ * string in the `filterValues` record.
1541
+ */
1542
+ type ListPageFilter = ListPageSelectFilter | ListPageTextFilter | ListPageDateFilter | ListPageMultiSelectFilter;
1543
+
1606
1544
  interface ListPageEmptyState {
1607
1545
  icon?: ReactNode;
1608
1546
  title?: ReactNode;
@@ -1616,10 +1554,6 @@ interface ListPageEmptyState {
1616
1554
  * `nextPage`) flow through to the inner Table without re-declaration.
1617
1555
  */
1618
1556
  interface ListPageLabels extends TableLabels {
1619
- /** Search input placeholder. */
1620
- searchPlaceholder?: string;
1621
- /** Search input aria-label. Falls back to the placeholder. */
1622
- searchAriaLabel?: string;
1623
1557
  /** "Reset filters" button label. */
1624
1558
  reset?: string;
1625
1559
  /** "No results matching filters" title. */
@@ -1650,21 +1584,15 @@ interface ListPageProps<T> {
1650
1584
  isLoading?: boolean;
1651
1585
  /** Number of skeleton rows rendered while loading. Defaults to the table page size. */
1652
1586
  loadingRowCount?: number;
1653
- /** Current search query — the consumer's state. */
1654
- searchValue?: string;
1655
- /**
1656
- * Fires on every keystroke. Providing this **renders the search input**.
1657
- * Wire it to your data layer (and reset pagination to page 0 on change).
1658
- */
1659
- onSearchChange?: (value: string) => void;
1660
1587
  /**
1661
- * Filter definitions. Renders one `<Select>` per entry. Pair with
1662
- * `filterValues` + `onFilterChange` to drive them.
1588
+ * Typed filter definitions (`select` / `text` / `date`). Renders the matching
1589
+ * control per entry via `ListPageFilterBar`. A `text` filter doubles as the
1590
+ * page's search box. Pair with `filterValues` + `onFilterChange` to drive them.
1663
1591
  */
1664
1592
  filters?: ListPageFilter[];
1665
- /** Current filter selections, keyed by `filter.key`. */
1593
+ /** Current filter selections, keyed by `filter.key` (date values are ISO `YYYY-MM-DD`). */
1666
1594
  filterValues?: Record<string, string>;
1667
- /** Fires when any filter Select changes. */
1595
+ /** Fires when any filter control changes. */
1668
1596
  onFilterChange?: (key: string, value: string) => void;
1669
1597
  enableRowSelection?: boolean;
1670
1598
  bulkActions?: (selected: T[]) => ReactNode;
@@ -1690,29 +1618,29 @@ interface ListPageProps<T> {
1690
1618
  className?: string;
1691
1619
  }
1692
1620
  /**
1693
- * Declarative server-driven list-page template — composes `PageHeader + search
1694
- * input + filter selects + Table + EmptyState` into a single component.
1621
+ * Declarative server-driven list-page template — composes `PageHeader + filter
1622
+ * bar + Table + EmptyState` into a single component.
1695
1623
  *
1696
1624
  * **All data-shaping is server-side.** ListPage does not filter / search /
1697
1625
  * paginate `data` locally; it renders whatever the consumer's data layer
1698
- * returned for the current `searchValue` + `filterValues` + `pagination`
1699
- * query. ListPage's job is the UI: render the controls, report user input
1700
- * back through callbacks, and pick the right empty state.
1626
+ * returned for the current `filterValues` + `pagination` query. ListPage's job
1627
+ * is the UI: render the controls, report user input back through callbacks, and
1628
+ * pick the right empty state. Search is just a `text` filter — there is no
1629
+ * separate search prop.
1701
1630
  *
1702
1631
  * **Three rendering branches in the table area:**
1703
1632
  * - `isLoading` → Table with skeleton rows.
1704
- * - `data` empty AND nothing being searched / filtered → `noDataState` (first-run).
1705
- * - search / filters active but `data` empty → `emptyState` (no results) with a Reset button.
1633
+ * - `data` empty AND no filter active → `noDataState` (first-run).
1634
+ * - a filter active but `data` empty → `emptyState` (no results) with a Reset button.
1706
1635
  *
1707
1636
  * @example Server-driven list with TanStack Query
1708
1637
  * ```tsx
1709
- * const [search, setSearch] = useState('');
1710
- * const [filters, setFilters] = useState({ status: 'all' });
1638
+ * const [filters, setFilters] = useState({ q: '', status: 'all', createdFrom: '' });
1711
1639
  * const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 });
1712
1640
  *
1713
1641
  * const { data, isLoading } = useQuery({
1714
- * queryKey: ['users', search, filters, pagination],
1715
- * queryFn: () => fetchUsers({ search, ...filters, ...pagination }),
1642
+ * queryKey: ['users', filters, pagination],
1643
+ * queryFn: () => fetchUsers({ ...filters, ...pagination }),
1716
1644
  * });
1717
1645
  *
1718
1646
  * return (
@@ -1724,14 +1652,10 @@ interface ListPageProps<T> {
1724
1652
  * isLoading={isLoading}
1725
1653
  * columns={USER_COLUMNS}
1726
1654
  *
1727
- * searchValue={search}
1728
- * onSearchChange={(v) => {
1729
- * setSearch(v);
1730
- * setPagination((p) => ({ ...p, pageIndex: 0 }));
1731
- * }}
1732
- *
1733
1655
  * filters={[
1734
- * { key: 'status', label: 'Status', options: STATUS_OPTIONS },
1656
+ * { type: 'text', key: 'q', placeholder: 'Search…', width: 'wide' },
1657
+ * { type: 'select', key: 'status', label: 'Status', options: STATUS_OPTIONS },
1658
+ * { type: 'date', key: 'createdFrom', label: 'Created after' },
1735
1659
  * ]}
1736
1660
  * filterValues={filters}
1737
1661
  * onFilterChange={(key, value) => {
@@ -1745,7 +1669,206 @@ interface ListPageProps<T> {
1745
1669
  * );
1746
1670
  * ```
1747
1671
  */
1748
- declare function ListPage<T>({ title, description, bordered, actions, data, columns, getRowId, isLoading, loadingRowCount, searchValue, onSearchChange, filters, filterValues, onFilterChange, enableRowSelection, bulkActions, pagination, onPaginationChange, totalCount, pageSizeOptions, emptyState, noDataState, labels: labelsProp, className, }: ListPageProps<T>): react_jsx_runtime.JSX.Element;
1672
+ declare function ListPage<T>({ title, description, bordered, actions, data, columns, getRowId, isLoading, loadingRowCount, filters, filterValues, onFilterChange, enableRowSelection, bulkActions, pagination, onPaginationChange, totalCount, pageSizeOptions, emptyState, noDataState, labels: labelsProp, className, }: ListPageProps<T>): react_jsx_runtime.JSX.Element;
1673
+
1674
+ interface MultiSelectLabels {
1675
+ /** Search input placeholder. Direction-aware default: `"Search…"` / `"بحث…"`. */
1676
+ search?: string;
1677
+ /** Empty-state text when the search matches nothing. Default: `"No results"` / `"لا نتائج"`. */
1678
+ empty?: string;
1679
+ }
1680
+ interface MultiSelectProps {
1681
+ variant?: SelectVariant;
1682
+ /** Visual size. Named `selectSize` to mirror `Select`. */
1683
+ selectSize?: SelectSize;
1684
+ /** Options to choose from. */
1685
+ options: SelectOption[];
1686
+ /** Placeholder shown when nothing is selected. */
1687
+ placeholder?: string;
1688
+ /** Controlled value (array of selected option values). */
1689
+ value?: string[];
1690
+ /** Initial value for uncontrolled usage. */
1691
+ defaultValue?: string[];
1692
+ /** Radix-style change handler — receives the new array directly. */
1693
+ onValueChange?: (value: string[]) => void;
1694
+ /** Compatibility handler (e.g. react-hook-form's `field.onChange`). Receives the array. */
1695
+ onChange?: (value: string[]) => void;
1696
+ /** Called when focus leaves the trigger. */
1697
+ onBlur?: () => void;
1698
+ /** Show the in-dropdown search input. Defaults to `true`. */
1699
+ searchable?: boolean;
1700
+ /** Collapse chips beyond this count into a `+N` badge. Default: show all (wrap). */
1701
+ maxTagCount?: number;
1702
+ /** Localized copy for search / empty-state. */
1703
+ labels?: MultiSelectLabels;
1704
+ /** Form name — renders a hidden input with the comma-joined value. */
1705
+ name?: string;
1706
+ /** Disables the trigger. */
1707
+ disabled?: boolean;
1708
+ /** Marks the field as required (for form validation). */
1709
+ required?: boolean;
1710
+ /** Override id (otherwise auto-generated via useId). */
1711
+ id?: string;
1712
+ /** Class applied to the trigger. */
1713
+ className?: string;
1714
+ /** Class applied to the popover content. */
1715
+ contentClassName?: string;
1716
+ 'aria-invalid'?: boolean | 'true' | 'false';
1717
+ 'aria-describedby'?: string;
1718
+ 'aria-label'?: string;
1719
+ }
1720
+ /**
1721
+ * Multi-select control built on `@radix-ui/react-popover` (Radix Select is
1722
+ * single-select only). Selected values render as removable chips in the
1723
+ * trigger; the popup lists checkbox options with an optional search filter.
1724
+ * **RHF-friendly**: works inside `<Field>` — it coerces a non-array `value`
1725
+ * (e.g. `''`) to `[]` and emits the new array through `onChange`.
1726
+ *
1727
+ * @example Inside a Field (RHF + Zod)
1728
+ * ```tsx
1729
+ * <Field name="roles" label="Roles" required>
1730
+ * <MultiSelect options={ROLE_OPTIONS} placeholder="Pick roles" />
1731
+ * </Field>
1732
+ * ```
1733
+ *
1734
+ * @example Bare / controlled
1735
+ * ```tsx
1736
+ * <MultiSelect
1737
+ * options={ROLE_OPTIONS}
1738
+ * value={roles}
1739
+ * onValueChange={setRoles}
1740
+ * placeholder="Roles"
1741
+ * aria-label="Roles filter"
1742
+ * />
1743
+ * ```
1744
+ */
1745
+ declare const MultiSelect: react.ForwardRefExoticComponent<MultiSelectProps & react.RefAttributes<HTMLDivElement>>;
1746
+
1747
+ /**
1748
+ * MultiSelect reuses the Select trigger look (`selectBaseClass` + variant) and
1749
+ * a Select-like popup. These constants cover only what's MultiSelect-specific:
1750
+ * the (auto-height) trigger, the chip row, the search row, and the option list.
1751
+ * Re-exported from `src/index.ts` so consumers can compose the same styling.
1752
+ */
1753
+ /** Trigger height is `auto` (chips may wrap to multiple rows) unlike Select's fixed height. */
1754
+ declare const multiSelectTriggerSizeClass: Record<'sm' | 'md' | 'lg', string>;
1755
+ /** Wraps the chips / placeholder inside the trigger. */
1756
+ declare const multiSelectValueRowClass = "flex min-w-0 flex-1 flex-wrap items-center gap-1";
1757
+ /** A single selected-value chip (Badge-styled) with its remove button. */
1758
+ declare const multiSelectChipClass = "max-w-full gap-1 pe-1";
1759
+ /** The chip's "×" remove control. */
1760
+ declare const multiSelectChipRemoveClass = "inline-flex size-3.5 shrink-0 items-center justify-center rounded-sm hover:bg-foreground/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40";
1761
+ /** Popup content (the open dropdown panel) — width tracks the trigger. */
1762
+ declare const multiSelectContentClass = "z-50 w-(--radix-popover-trigger-width) overflow-hidden rounded-md border border-border bg-popover 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";
1763
+ /** Search row pinned to the top of the popup. */
1764
+ declare const multiSelectSearchRowClass = "border-b border-border p-1";
1765
+ /** Scrollable option list. */
1766
+ declare const multiSelectListClass = "max-h-60 overflow-y-auto overflow-x-hidden p-1";
1767
+ /** A single option row (Checkbox + label). */
1768
+ declare const multiSelectOptionClass = "flex w-full cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none hover:bg-accent hover:text-accent-foreground has-[:focus-visible]:bg-accent has-[:disabled]:pointer-events-none has-[:disabled]:opacity-50";
1769
+ /** Empty-state row shown when the search matches nothing. */
1770
+ declare const multiSelectEmptyClass = "px-2 py-6 text-center text-sm text-muted-foreground";
1771
+
1772
+ type PageHeaderHeadingLevel = 'h1' | 'h2' | 'h3' | 'h4';
1773
+ /** Props passed to the routing-library `render` slot of the back button. */
1774
+ interface PageHeaderBackRenderProps {
1775
+ to?: LinkProps['to'];
1776
+ className?: string;
1777
+ children: ReactNode;
1778
+ onClick?: () => void;
1779
+ }
1780
+ interface PageHeaderBackProps {
1781
+ /** Visible label next to the arrow. Defaults to `"Back"`. */
1782
+ label?: ReactNode;
1783
+ /** Target to — renders a React Router `<Link>`. */
1784
+ to?: LinkProps['to'];
1785
+ /** Click handler — renders a `<button>` (or wraps the `render` element). */
1786
+ onClick?: () => void;
1787
+ /** Routing-library render prop (e.g. wrap a different link component). Wins over `to`. */
1788
+ render?: (props: PageHeaderBackRenderProps) => ReactElement;
1789
+ }
1790
+ interface PageHeaderProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
1791
+ /** Page title (required). */
1792
+ title: ReactNode;
1793
+ /** Optional secondary text under the title. */
1794
+ description?: ReactNode;
1795
+ /** Slot above the title for breadcrumbs (e.g. `<Breadcrumbs items={…} />` or your own JSX). */
1796
+ breadcrumbs?: ReactNode;
1797
+ /** Optional back button rendered above the title row. */
1798
+ back?: PageHeaderBackProps;
1799
+ /** Slot on the trailing side of the title row — buttons, dropdowns, etc. */
1800
+ actions?: ReactNode;
1801
+ /** Heading level for the title element. Defaults to `'h1'`. */
1802
+ as?: PageHeaderHeadingLevel;
1803
+ /** Add a bottom border separator. Default: `false`. */
1804
+ bordered?: boolean;
1805
+ }
1806
+ /**
1807
+ * Top-of-page header — title, optional description, breadcrumbs, back button,
1808
+ * and actions slot. The first thing a user sees on any list / detail / form
1809
+ * page in a dashboard.
1810
+ *
1811
+ * Designed to drop directly into `<DashboardContent>` (or any padded page
1812
+ * container). Has no outer padding of its own — the surrounding layout owns
1813
+ * spacing.
1814
+ *
1815
+ * @example List page header with primary action
1816
+ * ```tsx
1817
+ * <PageHeader
1818
+ * title="Users"
1819
+ * description="Manage your team members and their roles."
1820
+ * actions={<Button onClick={openCreate}>Add user</Button>}
1821
+ * bordered
1822
+ * />
1823
+ * ```
1824
+ *
1825
+ * @example Detail page header with back button
1826
+ * ```tsx
1827
+ * <PageHeader
1828
+ * title={user.name}
1829
+ * description={user.email}
1830
+ * back={{
1831
+ * label: 'Users',
1832
+ * to: '/users',
1833
+ * }}
1834
+ * actions={
1835
+ * <>
1836
+ * <Button variant="outline">Edit</Button>
1837
+ * <Button variant="destructive">Delete</Button>
1838
+ * </>
1839
+ * }
1840
+ * />
1841
+ * ```
1842
+ *
1843
+ * @example With breadcrumbs slot
1844
+ * ```tsx
1845
+ * <PageHeader
1846
+ * breadcrumbs={
1847
+ * <nav aria-label="Breadcrumb">
1848
+ * <ol className="flex items-center gap-1">
1849
+ * <li><Link to="/">Home</Link></li>
1850
+ * <li>/</li>
1851
+ * <li>Users</li>
1852
+ * </ol>
1853
+ * </nav>
1854
+ * }
1855
+ * title="Users"
1856
+ * />
1857
+ * ```
1858
+ */
1859
+ declare const PageHeader: react.ForwardRefExoticComponent<PageHeaderProps & react.RefAttributes<HTMLElement>>;
1860
+
1861
+ declare const pageHeaderBaseClass = "flex w-full flex-col gap-3";
1862
+ /** Adds a bottom border separator below the header. */
1863
+ declare const pageHeaderBorderedClass = "border-b border-border pb-4";
1864
+ declare const pageHeaderTitleRowClass = "flex flex-wrap items-start justify-between gap-3 sm:gap-4";
1865
+ declare const pageHeaderTitleBlockClass = "min-w-0 flex-1 space-y-1";
1866
+ declare const pageHeaderTitleClass = "text-2xl font-semibold tracking-tight text-foreground";
1867
+ declare const pageHeaderDescriptionClass = "text-sm text-muted-foreground";
1868
+ declare const pageHeaderActionsClass = "flex shrink-0 flex-wrap items-center gap-2";
1869
+ 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";
1870
+ declare const pageHeaderBackIconClass = "size-4 shrink-0 rtl:rotate-180";
1871
+ declare const pageHeaderBreadcrumbsClass = "text-xs text-muted-foreground";
1749
1872
 
1750
1873
  type RadioGroupSize = 'sm' | 'md' | 'lg';
1751
1874
  /** Outer circle (radio button itself) — sized + bordered. */
@@ -2138,4 +2261,4 @@ declare function useDirection(): Direction;
2138
2261
 
2139
2262
  declare function cn(...inputs: ClassValue[]): string;
2140
2263
 
2141
- 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 FormPageLabels, 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, Switch, type SwitchProps, type SwitchSize, Table, type TableLabels, 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 };
2264
+ 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 FormPageLabels, 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 ListPageDateFilter, type ListPageEmptyState, type ListPageFilter, type ListPageFilterWidth, type ListPageLabels, type ListPageMultiSelectFilter, type ListPageProps, type ListPageSelectFilter, type ListPageTextFilter, MultiSelect, type MultiSelectLabels, type MultiSelectProps, 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, Switch, type SwitchProps, type SwitchSize, Table, type TableLabels, 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, multiSelectChipClass, multiSelectChipRemoveClass, multiSelectContentClass, multiSelectEmptyClass, multiSelectListClass, multiSelectOptionClass, multiSelectSearchRowClass, multiSelectTriggerSizeClass, multiSelectValueRowClass, 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 };