@aircall/ds 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -0
- package/dist/globals.css +1 -1
- package/dist/index.d.ts +28 -28
- package/dist/index.js +1 -1
- package/package.json +12 -2
- package/skills/aircall-ds/migrate-icons/SKILL.md +346 -0
- package/skills/aircall-ds/migrate-tractor/SKILL.md +314 -0
- package/skills/aircall-ds/migrate-tractor/accordion/SKILL.md +276 -0
- package/skills/aircall-ds/migrate-tractor/alert/SKILL.md +225 -0
- package/skills/aircall-ds/migrate-tractor/avatar/SKILL.md +272 -0
- package/skills/aircall-ds/migrate-tractor/badge/SKILL.md +274 -0
- package/skills/aircall-ds/migrate-tractor/button/SKILL.md +277 -0
- package/skills/aircall-ds/migrate-tractor/card/SKILL.md +278 -0
- package/skills/aircall-ds/migrate-tractor/combobox/SKILL.md +346 -0
- package/skills/aircall-ds/migrate-tractor/data-table/SKILL.md +333 -0
- package/skills/aircall-ds/migrate-tractor/dialog/SKILL.md +206 -0
- package/skills/aircall-ds/migrate-tractor/divider/SKILL.md +226 -0
- package/skills/aircall-ds/migrate-tractor/dropdown-menu/SKILL.md +266 -0
- package/skills/aircall-ds/migrate-tractor/dropzone/SKILL.md +338 -0
- package/skills/aircall-ds/migrate-tractor/form-and-field/SKILL.md +325 -0
- package/skills/aircall-ds/migrate-tractor/gauge/SKILL.md +248 -0
- package/skills/aircall-ds/migrate-tractor/input/SKILL.md +261 -0
- package/skills/aircall-ds/migrate-tractor/item/SKILL.md +298 -0
- package/skills/aircall-ds/migrate-tractor/link/SKILL.md +263 -0
- package/skills/aircall-ds/migrate-tractor/popover/SKILL.md +214 -0
- package/skills/aircall-ds/migrate-tractor/select/SKILL.md +245 -0
- package/skills/aircall-ds/migrate-tractor/sheet-vs-drawer/SKILL.md +272 -0
- package/skills/aircall-ds/migrate-tractor/skeleton/SKILL.md +190 -0
- package/skills/aircall-ds/migrate-tractor/styling/SKILL.md +421 -0
- package/skills/aircall-ds/migrate-tractor/tabs/SKILL.md +250 -0
- package/skills/aircall-ds/migrate-tractor/toast/SKILL.md +322 -0
- package/skills/aircall-ds/migrate-tractor/tooltip/SKILL.md +204 -0
- package/skills/aircall-ds/migrate-tractor/tree/SKILL.md +346 -0
- package/skills/aircall-ds/setup/SKILL.md +347 -0
package/dist/index.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ import * as _base_ui_react0 from "@base-ui/react";
|
|
|
18
18
|
import { Combobox as Combobox$1 } from "@base-ui/react";
|
|
19
19
|
import { Command as Command$1 } from "cmdk";
|
|
20
20
|
import { Dialog as Dialog$1 } from "@base-ui/react/dialog";
|
|
21
|
-
import { ColumnDef, OnChangeFn, Row, RowSelectionState, SortingState } from "@tanstack/react-table";
|
|
21
|
+
import { ColumnDef, ColumnDef as ColumnDef$1, OnChangeFn, OnChangeFn as OnChangeFn$1, Row, RowSelectionState, RowSelectionState as RowSelectionState$1, SortingState, SortingState as SortingState$1 } from "@tanstack/react-table";
|
|
22
22
|
import { ItemInstance } from "@headless-tree/core";
|
|
23
23
|
import { Drawer as DrawerPrimitive } from "@base-ui/react/drawer";
|
|
24
24
|
import { Radio } from "@base-ui/react/radio";
|
|
@@ -38,7 +38,7 @@ import { Switch as Switch$1 } from "@base-ui/react/switch";
|
|
|
38
38
|
import { Tabs as Tabs$1 } from "@base-ui/react/tabs";
|
|
39
39
|
import { Toggle as Toggle$1 } from "@base-ui/react/toggle";
|
|
40
40
|
import { ToggleGroup as ToggleGroup$1 } from "@base-ui/react/toggle-group";
|
|
41
|
-
import * as
|
|
41
|
+
import * as class_variance_authority_types2 from "class-variance-authority/types";
|
|
42
42
|
import { CountryCode } from "@aircall/numbers";
|
|
43
43
|
|
|
44
44
|
//#region src/components/accordion.d.ts
|
|
@@ -68,7 +68,7 @@ declare const buttonVariants: (props?: ({
|
|
|
68
68
|
variant?: "link" | "default" | "outline" | "secondary" | "ghost" | "destructive" | null | undefined;
|
|
69
69
|
size?: "default" | "sm" | "lg" | "icon" | "icon-sm" | "icon-lg" | null | undefined;
|
|
70
70
|
block?: boolean | null | undefined;
|
|
71
|
-
} &
|
|
71
|
+
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
72
72
|
declare const Button: React.ForwardRefExoticComponent<Omit<ButtonProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
73
73
|
interface ButtonProps extends Button$1.Props, VariantProps<typeof buttonVariants> {
|
|
74
74
|
children?: React.ReactNode;
|
|
@@ -189,8 +189,8 @@ declare namespace AlertDialogCancel {
|
|
|
189
189
|
//#endregion
|
|
190
190
|
//#region src/components/alert.d.ts
|
|
191
191
|
declare const alertVariants: (props?: ({
|
|
192
|
-
variant?: "default" | "
|
|
193
|
-
} &
|
|
192
|
+
variant?: "default" | "info" | "success" | "warning" | "error" | null | undefined;
|
|
193
|
+
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
194
194
|
declare const Alert: React.ForwardRefExoticComponent<Omit<AlertProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
195
195
|
interface AlertProps extends React.ComponentProps<'div'>, VariantProps<typeof alertVariants> {}
|
|
196
196
|
declare namespace Alert {
|
|
@@ -249,7 +249,7 @@ declare namespace AvatarGroupCount {
|
|
|
249
249
|
//#region src/components/counter-badge.d.ts
|
|
250
250
|
declare const counterBadgeVariants: (props?: ({
|
|
251
251
|
variant?: "default" | "secondary" | "ghost" | null | undefined;
|
|
252
|
-
} &
|
|
252
|
+
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
253
253
|
declare const CounterBadge: React.ForwardRefExoticComponent<Omit<CounterBadgeProps, "ref"> & React.RefAttributes<HTMLSpanElement>>;
|
|
254
254
|
type CounterBadgeProps = useRender.ComponentProps<'span'> & VariantProps<typeof counterBadgeVariants>;
|
|
255
255
|
declare namespace CounterBadge {
|
|
@@ -261,7 +261,7 @@ declare const badgeVariants: (props?: ({
|
|
|
261
261
|
size?: "default" | "lg" | null | undefined;
|
|
262
262
|
color?: "blue" | "green" | "pink" | "purple" | "red" | "yellow" | "charcoal" | null | undefined;
|
|
263
263
|
tone?: "dark" | "light" | "medium-dark" | "medium-light" | null | undefined;
|
|
264
|
-
} &
|
|
264
|
+
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
265
265
|
type BadgeVariants = VariantProps<typeof badgeVariants>;
|
|
266
266
|
type BadgeColor = NonNullable<BadgeVariants['color']>;
|
|
267
267
|
type BadgeTone = NonNullable<BadgeVariants['tone']>;
|
|
@@ -293,7 +293,7 @@ declare namespace BadgeGroup {
|
|
|
293
293
|
}
|
|
294
294
|
declare const badgeGroupCountVariants: (props?: ({
|
|
295
295
|
size?: "default" | "lg" | null | undefined;
|
|
296
|
-
} &
|
|
296
|
+
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
297
297
|
declare const BadgeGroupCount: React.ForwardRefExoticComponent<Omit<BadgeGroupCount.Props, "ref"> & React.RefAttributes<HTMLSpanElement>>;
|
|
298
298
|
declare namespace BadgeGroupCount {
|
|
299
299
|
type Props = Omit<React.ComponentProps<typeof CounterBadge>, 'variant'> & VariantProps<typeof badgeGroupCountVariants>;
|
|
@@ -301,9 +301,9 @@ declare namespace BadgeGroupCount {
|
|
|
301
301
|
//#endregion
|
|
302
302
|
//#region src/components/banner.d.ts
|
|
303
303
|
declare const bannerVariants: (props?: ({
|
|
304
|
-
variant?: "default" | "
|
|
304
|
+
variant?: "default" | "info" | "success" | "warning" | "error" | null | undefined;
|
|
305
305
|
borderDirection?: "bottom" | "top" | null | undefined;
|
|
306
|
-
} &
|
|
306
|
+
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
307
307
|
declare const Banner: React.ForwardRefExoticComponent<Omit<BannerProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
308
308
|
interface BannerProps extends React.ComponentProps<'div'>, VariantProps<typeof bannerVariants> {}
|
|
309
309
|
declare namespace Banner {
|
|
@@ -384,7 +384,7 @@ declare namespace Separator {
|
|
|
384
384
|
//#region src/components/button-group.d.ts
|
|
385
385
|
declare const buttonGroupVariants: (props?: ({
|
|
386
386
|
orientation?: "horizontal" | "vertical" | null | undefined;
|
|
387
|
-
} &
|
|
387
|
+
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
388
388
|
declare const ButtonGroup: React.ForwardRefExoticComponent<Omit<ButtonGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
389
389
|
interface ButtonGroupProps extends React.ComponentProps<'div'>, VariantProps<typeof buttonGroupVariants> {}
|
|
390
390
|
declare namespace ButtonGroup {
|
|
@@ -797,7 +797,7 @@ interface DataTableProps<TData> {
|
|
|
797
797
|
* summary row — the table auto-shows a `<tfoot>` when any column has one, with
|
|
798
798
|
* footer cells aligned under their columns.
|
|
799
799
|
*/
|
|
800
|
-
columns: ColumnDef<TData, unknown>[];
|
|
800
|
+
columns: ColumnDef$1<TData, unknown>[];
|
|
801
801
|
/** Data array to render. With server-side sorting/pagination, this is the already-prepared page. */
|
|
802
802
|
data: TData[];
|
|
803
803
|
/** Stable row id resolver. Required for selection to persist across data changes. */
|
|
@@ -821,9 +821,9 @@ interface DataTableProps<TData> {
|
|
|
821
821
|
*/
|
|
822
822
|
emptyState?: React.ReactNode;
|
|
823
823
|
/** Controlled sorting state. Pass alongside `onSortingChange` to enable sortable headers. */
|
|
824
|
-
sorting?: SortingState;
|
|
824
|
+
sorting?: SortingState$1;
|
|
825
825
|
/** Called when the user toggles a sortable header. */
|
|
826
|
-
onSortingChange?: OnChangeFn<SortingState>;
|
|
826
|
+
onSortingChange?: OnChangeFn$1<SortingState$1>;
|
|
827
827
|
/**
|
|
828
828
|
* Enables interactive column resizing. Each resizable header gets a drag
|
|
829
829
|
* handle on its right edge; column widths come from each column's `size`
|
|
@@ -834,9 +834,9 @@ interface DataTableProps<TData> {
|
|
|
834
834
|
/** Enables row selection. When truthy, a checkbox column is auto-prepended. */
|
|
835
835
|
enableRowSelection?: boolean | ((row: Row<TData>) => boolean);
|
|
836
836
|
/** Controlled selection state. */
|
|
837
|
-
rowSelection?: RowSelectionState;
|
|
837
|
+
rowSelection?: RowSelectionState$1;
|
|
838
838
|
/** Called when selection changes. */
|
|
839
|
-
onRowSelectionChange?: OnChangeFn<RowSelectionState>;
|
|
839
|
+
onRowSelectionChange?: OnChangeFn$1<RowSelectionState$1>;
|
|
840
840
|
/** Bar rendered floating at the bottom while there is at least one selected row. */
|
|
841
841
|
actionBar?: React.ReactNode;
|
|
842
842
|
/** Called when the user scrolls near the bottom; use to fetch the next page. */
|
|
@@ -1176,7 +1176,7 @@ declare namespace EmptyHeader {
|
|
|
1176
1176
|
}
|
|
1177
1177
|
declare const emptyMediaVariants: (props?: ({
|
|
1178
1178
|
variant?: "default" | "icon" | null | undefined;
|
|
1179
|
-
} &
|
|
1179
|
+
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
1180
1180
|
declare const EmptyMedia: React.ForwardRefExoticComponent<Omit<EmptyMediaProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
1181
1181
|
interface EmptyMediaProps extends React.ComponentProps<'div'>, VariantProps<typeof emptyMediaVariants> {}
|
|
1182
1182
|
declare namespace EmptyMedia {
|
|
@@ -1370,7 +1370,7 @@ declare namespace EmojiPickerContent {
|
|
|
1370
1370
|
declare const fabVariants: (props?: ({
|
|
1371
1371
|
variant?: "default" | "outline" | null | undefined;
|
|
1372
1372
|
size?: "lg" | "icon-lg" | null | undefined;
|
|
1373
|
-
} &
|
|
1373
|
+
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
1374
1374
|
declare const FAB: React.ForwardRefExoticComponent<Omit<FABProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
1375
1375
|
interface FABProps extends Button$1.Props, VariantProps<typeof fabVariants> {}
|
|
1376
1376
|
declare namespace FAB {
|
|
@@ -1404,7 +1404,7 @@ declare namespace FieldGroup {
|
|
|
1404
1404
|
}
|
|
1405
1405
|
declare const fieldVariants: (props?: ({
|
|
1406
1406
|
orientation?: "horizontal" | "vertical" | "responsive" | null | undefined;
|
|
1407
|
-
} &
|
|
1407
|
+
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
1408
1408
|
declare const Field: React.ForwardRefExoticComponent<Omit<FieldProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
1409
1409
|
interface FieldProps extends React.ComponentProps<'div'>, VariantProps<typeof fieldVariants> {}
|
|
1410
1410
|
declare namespace Field {
|
|
@@ -1463,7 +1463,7 @@ declare namespace Gauge {
|
|
|
1463
1463
|
//#region src/components/input.d.ts
|
|
1464
1464
|
declare const inputVariants: (props?: ({
|
|
1465
1465
|
block?: boolean | null | undefined;
|
|
1466
|
-
} &
|
|
1466
|
+
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
1467
1467
|
declare const Input: React.ForwardRefExoticComponent<Omit<InputProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
1468
1468
|
interface InputProps extends React.ComponentProps<'input'>, VariantProps<typeof inputVariants> {}
|
|
1469
1469
|
declare namespace Input {
|
|
@@ -1478,7 +1478,7 @@ declare namespace InputGroup {
|
|
|
1478
1478
|
}
|
|
1479
1479
|
declare const inputGroupAddonVariants: (props?: ({
|
|
1480
1480
|
align?: "block-end" | "block-start" | "inline-end" | "inline-start" | null | undefined;
|
|
1481
|
-
} &
|
|
1481
|
+
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
1482
1482
|
declare const InputGroupAddon: React.ForwardRefExoticComponent<Omit<InputGroupAddonProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
1483
1483
|
interface InputGroupAddonProps extends React.ComponentProps<'div'>, VariantProps<typeof inputGroupAddonVariants> {}
|
|
1484
1484
|
declare namespace InputGroupAddon {
|
|
@@ -1577,7 +1577,7 @@ declare namespace ItemSeparator {
|
|
|
1577
1577
|
declare const itemVariants: (props?: ({
|
|
1578
1578
|
variant?: "default" | "outline" | "muted" | null | undefined;
|
|
1579
1579
|
size?: "default" | "sm" | "xs" | null | undefined;
|
|
1580
|
-
} &
|
|
1580
|
+
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
1581
1581
|
declare const Item: React.ForwardRefExoticComponent<Omit<ItemProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
1582
1582
|
interface ItemProps extends useRender.ComponentProps<'div'>, VariantProps<typeof itemVariants> {}
|
|
1583
1583
|
declare namespace Item {
|
|
@@ -1585,7 +1585,7 @@ declare namespace Item {
|
|
|
1585
1585
|
}
|
|
1586
1586
|
declare const itemMediaVariants: (props?: ({
|
|
1587
1587
|
variant?: "image" | "default" | "icon" | null | undefined;
|
|
1588
|
-
} &
|
|
1588
|
+
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
1589
1589
|
declare const ItemMedia: React.ForwardRefExoticComponent<Omit<ItemMediaProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
1590
1590
|
interface ItemMediaProps extends React.ComponentProps<'div'>, VariantProps<typeof itemMediaVariants> {}
|
|
1591
1591
|
declare namespace ItemMedia {
|
|
@@ -1747,7 +1747,7 @@ declare namespace ScrollBar {
|
|
|
1747
1747
|
//#region src/components/select.d.ts
|
|
1748
1748
|
declare const selectTriggerVariants: (props?: ({
|
|
1749
1749
|
size?: "default" | "sm" | null | undefined;
|
|
1750
|
-
} &
|
|
1750
|
+
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
1751
1751
|
declare const Select: typeof Select$1.Root;
|
|
1752
1752
|
declare const SelectGroup: React.ForwardRefExoticComponent<Omit<SelectGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
1753
1753
|
interface SelectGroupProps extends Select$1.Group.Props {}
|
|
@@ -1972,7 +1972,7 @@ declare namespace SidebarMenuItem {
|
|
|
1972
1972
|
declare const sidebarMenuButtonVariants: (props?: ({
|
|
1973
1973
|
variant?: "default" | "outline" | null | undefined;
|
|
1974
1974
|
size?: "default" | "sm" | "lg" | null | undefined;
|
|
1975
|
-
} &
|
|
1975
|
+
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
1976
1976
|
declare const SidebarMenuButton: React.ForwardRefExoticComponent<Omit<SidebarMenuButtonProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
1977
1977
|
type SidebarMenuButtonProps = useRender.ComponentProps<'button'> & React.ComponentProps<'button'> & VariantProps<typeof sidebarMenuButtonVariants> & {
|
|
1978
1978
|
isActive?: boolean;
|
|
@@ -2044,7 +2044,7 @@ declare namespace Toaster {
|
|
|
2044
2044
|
//#region src/components/spinner.d.ts
|
|
2045
2045
|
declare const spinnerVariants: (props?: ({
|
|
2046
2046
|
size?: "default" | "sm" | "lg" | "xl" | null | undefined;
|
|
2047
|
-
} &
|
|
2047
|
+
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
2048
2048
|
declare const Spinner: React.ForwardRefExoticComponent<Omit<SpinnerProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
2049
2049
|
interface SpinnerProps extends React.ComponentProps<'svg'>, VariantProps<typeof spinnerVariants> {}
|
|
2050
2050
|
declare namespace Spinner {
|
|
@@ -2188,7 +2188,7 @@ declare namespace ThemeProvider {
|
|
|
2188
2188
|
declare const toggleVariants: (props?: ({
|
|
2189
2189
|
variant?: "default" | "outline" | null | undefined;
|
|
2190
2190
|
size?: "default" | "sm" | "lg" | null | undefined;
|
|
2191
|
-
} &
|
|
2191
|
+
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
2192
2192
|
declare const Toggle: React.ForwardRefExoticComponent<Omit<ToggleProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
2193
2193
|
interface ToggleProps extends Toggle$1.Props, VariantProps<typeof toggleVariants> {}
|
|
2194
2194
|
declare namespace Toggle {
|
|
@@ -2397,4 +2397,4 @@ declare function useAudioGauge(options?: UseAudioGaugeOptions): UseAudioGaugeRes
|
|
|
2397
2397
|
//#region src/lib/utils.d.ts
|
|
2398
2398
|
declare function cn(...inputs: ClassValue[]): string;
|
|
2399
2399
|
//#endregion
|
|
2400
|
-
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActionBar, ActionBarButton, ActionBarContext, type ActionBarContextValue, ActionBarHeight, Alert, AlertAction, AlertAction as BannerAction, AlertDescription, AlertDescription as BannerDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AlertTitle as BannerTitle, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, BadgeGroup, BadgeGroupCount, Banner, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, Checkbox, Chip, ChipRemove, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, type ComboboxClear, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, CounterBadge, CountryFlag, DataTable, type DataTableLoadingState, DataTree, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerBackdrop, DrawerBar, DrawerClose, DrawerContent, DrawerCreateHandle, DrawerDescription, DrawerFooter, DrawerHeader, DrawerMenu, DrawerMenuCheckboxItem, DrawerMenuGroup, DrawerMenuGroupLabel, DrawerMenuItem, DrawerMenuRadioGroup, DrawerMenuRadioItem, DrawerMenuSeparator, DrawerMenuTrigger, DrawerPanel, DrawerPopup, DrawerPortal, DrawerPrimitive, DrawerSwipeArea, DrawerTitle, DrawerTrigger, DrawerViewport, DropdownMenu, DropdownMenuAddon, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Dropzone, DropzoneActions, DropzoneContent, DropzoneDescription, type DropzoneErrorCode, DropzoneIcon, DropzoneTitle, DropzoneTrigger, type DsI18nKey, DsI18nProvider, type DsLocale, EmojiPicker, EmojiPickerCategories, type EmojiPickerCategory, EmojiPickerContent, EmojiPickerTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, FAB, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, type FileError, type FileRejection, Filter, FilterClearAllButton, FilterGroup, Gauge, type I18nLanguageSource, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Label, List, ListCol, ListRow, type NotificationHandle, type NotificationOptions, type NotificationPriority, type NotificationQueueControls, NotificationQueueProvider, type NotificationRenderProps, NotificationSlot, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, RadioGroup, RadioGroupItem, SUPPORTED_LANGUAGES, ScrollArea, ScrollAreaPrimitive, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, type SheetOverlay, type SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Spinner, type StepDefinition, Stepper, StepperContent, StepperCounter, StepperPanel, StepperProgress, Switch, Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeProvider, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, Tree, TreeDragLine, TreeItem, TreeItemLabel, UseAudioGaugeOptions, UseAudioGaugeResult, alertVariants, bannerVariants, buttonGroupVariants, buttonVariants, cn, counterBadgeVariants, detectInitialLanguage, fabVariants, registerI18nNamespace, selectTriggerVariants, spinnerVariants, syncDsLanguage, toast, toggleVariants, useAudioGauge, useComboboxAnchor, useDsTranslation, useNotification, useNotificationQueue, useSidebar, useStepper, useTheme };
|
|
2400
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActionBar, ActionBarButton, ActionBarContext, type ActionBarContextValue, ActionBarHeight, Alert, AlertAction, AlertAction as BannerAction, AlertDescription, AlertDescription as BannerDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AlertTitle as BannerTitle, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, BadgeGroup, BadgeGroupCount, Banner, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, Checkbox, Chip, ChipRemove, Collapsible, CollapsibleContent, CollapsibleTrigger, type ColumnDef, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, type ComboboxClear, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, CounterBadge, CountryFlag, DataTable, type DataTableLoadingState, DataTree, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerBackdrop, DrawerBar, DrawerClose, DrawerContent, DrawerCreateHandle, DrawerDescription, DrawerFooter, DrawerHeader, DrawerMenu, DrawerMenuCheckboxItem, DrawerMenuGroup, DrawerMenuGroupLabel, DrawerMenuItem, DrawerMenuRadioGroup, DrawerMenuRadioItem, DrawerMenuSeparator, DrawerMenuTrigger, DrawerPanel, DrawerPopup, DrawerPortal, DrawerPrimitive, DrawerSwipeArea, DrawerTitle, DrawerTrigger, DrawerViewport, DropdownMenu, DropdownMenuAddon, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Dropzone, DropzoneActions, DropzoneContent, DropzoneDescription, type DropzoneErrorCode, DropzoneIcon, DropzoneTitle, DropzoneTrigger, type DsI18nKey, DsI18nProvider, type DsLocale, EmojiPicker, EmojiPickerCategories, type EmojiPickerCategory, EmojiPickerContent, EmojiPickerTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, FAB, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, type FileError, type FileRejection, Filter, FilterClearAllButton, FilterGroup, Gauge, type I18nLanguageSource, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Label, List, ListCol, ListRow, type NotificationHandle, type NotificationOptions, type NotificationPriority, type NotificationQueueControls, NotificationQueueProvider, type NotificationRenderProps, NotificationSlot, type OnChangeFn, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, RadioGroup, RadioGroupItem, type RowSelectionState, SUPPORTED_LANGUAGES, ScrollArea, ScrollAreaPrimitive, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, type SheetOverlay, type SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, type SortingState, Spinner, type StepDefinition, Stepper, StepperContent, StepperCounter, StepperPanel, StepperProgress, Switch, Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeProvider, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, Tree, TreeDragLine, TreeItem, TreeItemLabel, UseAudioGaugeOptions, UseAudioGaugeResult, alertVariants, bannerVariants, buttonGroupVariants, buttonVariants, cn, counterBadgeVariants, detectInitialLanguage, fabVariants, registerI18nNamespace, selectTriggerVariants, spinnerVariants, syncDsLanguage, toast, toggleVariants, useAudioGauge, useComboboxAnchor, useDsTranslation, useNotification, useNotificationQueue, useSidebar, useStepper, useTheme };
|
package/dist/index.js
CHANGED
|
@@ -2431,7 +2431,7 @@ const Table = React.forwardRef((componentProps, forwardRef) => {
|
|
|
2431
2431
|
children: /* @__PURE__ */ jsx("table", {
|
|
2432
2432
|
ref: forwardRef,
|
|
2433
2433
|
"data-slot": "table",
|
|
2434
|
-
className: cn("w-full caption-bottom text-sm [&_tbody_tr:last-child]:border-b-0", className),
|
|
2434
|
+
className: cn("w-full caption-bottom text-sm text-foreground [&_tbody_tr:last-child]:border-b-0", className),
|
|
2435
2435
|
...props
|
|
2436
2436
|
})
|
|
2437
2437
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aircall/ds",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": false,
|
|
6
6
|
"sideEffects": [
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
"src/fonts",
|
|
18
18
|
"README.md",
|
|
19
19
|
"AGENTS.consumer.md",
|
|
20
|
-
"package.json"
|
|
20
|
+
"package.json",
|
|
21
|
+
"skills"
|
|
21
22
|
],
|
|
22
23
|
"exports": {
|
|
23
24
|
".": {
|
|
@@ -81,6 +82,7 @@
|
|
|
81
82
|
"@storybook/react-vite": "10.3.3",
|
|
82
83
|
"@tailwindcss/cli": "4.1.18",
|
|
83
84
|
"@tailwindcss/postcss": "4.1.18",
|
|
85
|
+
"@tanstack/intent": "0.1.1",
|
|
84
86
|
"@tanstack/react-table": "8.20.6",
|
|
85
87
|
"@turbo/gen": "2.4.2",
|
|
86
88
|
"@types/node": "24",
|
|
@@ -105,6 +107,14 @@
|
|
|
105
107
|
"vitest": "4.0.17",
|
|
106
108
|
"@aircall/hooks": "0.5.1"
|
|
107
109
|
},
|
|
110
|
+
"keywords": [
|
|
111
|
+
"tanstack-intent"
|
|
112
|
+
],
|
|
113
|
+
"repository": {
|
|
114
|
+
"type": "git",
|
|
115
|
+
"url": "git+https://gitlab.com/aircall/shared/hydra.git",
|
|
116
|
+
"directory": "packages/ds"
|
|
117
|
+
},
|
|
108
118
|
"scripts": {
|
|
109
119
|
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist",
|
|
110
120
|
"build:js": "tsdown --config ./tsdown.config.ts",
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aircall-ds/migrate-icons
|
|
3
|
+
description: >
|
|
4
|
+
Migrate icons from @aircall/icons to @aircall/react-icons — the old→new name map,
|
|
5
|
+
color/size → Tailwind, custom & brand icons. Works standalone (an icons-only swap)
|
|
6
|
+
or inside a Tractor migration (also drops Tractor's <Icon> wrapper). Load when a file
|
|
7
|
+
imports any named icon from @aircall/icons, or Icon from @aircall/tractor.
|
|
8
|
+
type: sub-skill
|
|
9
|
+
library: aircall-ds
|
|
10
|
+
library_version: "0.13.0"
|
|
11
|
+
requires:
|
|
12
|
+
- aircall-ds/setup
|
|
13
|
+
sources:
|
|
14
|
+
- "aircall/hydra:docs/migration-guides/tractor-to-ds/06-react-icons.md"
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
Migrate icons from `@aircall/icons` to `@aircall/react-icons`. This is **independent of
|
|
18
|
+
the Tractor migration** — run it on its own for an icons-only swap, or as part of
|
|
19
|
+
`aircall-ds/migrate-tractor`. The name / color / size mappings below apply whether an
|
|
20
|
+
icon is rendered directly (`<SomeIcon />`) or through Tractor's `<Icon component={…} />`
|
|
21
|
+
wrapper; when it was wrapped in Tractor's `<Icon>`, also remove that wrapper (see §1 and §7).
|
|
22
|
+
|
|
23
|
+
> **Upgrade `@aircall/react-icons` to `>= 0.4.0` as part of this migration.** `@aircall/ds`
|
|
24
|
+
> itself imports flags (`CountryFlag` → `FlagUs`, …) from it; an older version (≤ 0.3.0)
|
|
25
|
+
> breaks the ds bundle at build time, not just your own icon imports. `pnpm add @aircall/react-icons@latest`.
|
|
26
|
+
|
|
27
|
+
## 1. What changes
|
|
28
|
+
|
|
29
|
+
| Tractor part | @aircall/react-icons part |
|
|
30
|
+
| --- | --- |
|
|
31
|
+
| `import { Icon } from '@aircall/tractor'` | _(removed — no wrapper needed)_ |
|
|
32
|
+
| `import { SomeIcon } from '@aircall/icons'` | `import { NewName } from '@aircall/react-icons'` |
|
|
33
|
+
| `<Icon component={SomeIcon} size={N} color="primary.500" />` | `<NewName className="size-N text-primary" />` |
|
|
34
|
+
| `color="…"` (Tractor token) | `text-*` Tailwind class (see color table) |
|
|
35
|
+
| `size={N}` (number) | `size-N` Tailwind class (`size-4`=16px, `size-5`=20px, `size-6`=24px) |
|
|
36
|
+
|
|
37
|
+
`@aircall/react-icons` re-exports all lucide icons plus a set of Aircall custom icons. Never import from `lucide-react` directly.
|
|
38
|
+
|
|
39
|
+
## 2. Color mapping
|
|
40
|
+
|
|
41
|
+
| Tractor `color` value | Tailwind class |
|
|
42
|
+
| --- | --- |
|
|
43
|
+
| `primary.500` | `text-primary` |
|
|
44
|
+
| `critical.500` | `text-destructive` |
|
|
45
|
+
| `success.500` | `text-success` |
|
|
46
|
+
| `warning.500` | `text-warning` |
|
|
47
|
+
| `informative.500` | `text-info` |
|
|
48
|
+
| `text.base` | `text-foreground` |
|
|
49
|
+
| `text.secondary` | `text-muted-foreground` |
|
|
50
|
+
|
|
51
|
+
## 3. Size mapping
|
|
52
|
+
|
|
53
|
+
| Tractor `size` | Tailwind class | px |
|
|
54
|
+
| --- | --- | --- |
|
|
55
|
+
| `16` | `size-4` | 16px |
|
|
56
|
+
| `20` | `size-5` | 20px |
|
|
57
|
+
| `24` | `size-6` | 24px |
|
|
58
|
+
|
|
59
|
+
## 4. Icon name mapping (selected)
|
|
60
|
+
|
|
61
|
+
This is a representative sample. For the full table consult the icon name tables in the migration guide.
|
|
62
|
+
|
|
63
|
+
### Phone & Calls
|
|
64
|
+
|
|
65
|
+
| Old (`@aircall/icons`) | New (`@aircall/react-icons`) | Source |
|
|
66
|
+
| --- | --- | --- |
|
|
67
|
+
| `CallFilled`, `CallOutlined`, `CallCircleFilled` | `Phone` | lucide |
|
|
68
|
+
| `HangUpFilled` | `PhoneDecline` | custom |
|
|
69
|
+
| `HangUpOutlined` | `PhoneOff` | lucide |
|
|
70
|
+
| `MissedInboundFilled` | `PhoneMissed` | lucide |
|
|
71
|
+
| `TransferFilled`, `TransferredOutlined` | `Forward` | lucide |
|
|
72
|
+
| `VoicemailOutlined` | `Voicemail` | lucide |
|
|
73
|
+
| `VoicemailDrop` | `VoicemailDrop` | custom |
|
|
74
|
+
| `RingingFilled`, `CircledPhoneCallingFilled` | `PhoneCall` | lucide |
|
|
75
|
+
| `KeypadFilled`, `KeypadOutlined` | `Keypad` | custom |
|
|
76
|
+
| `ConferenceFilled`, `ConferenceOutlined` | `Conference` | custom |
|
|
77
|
+
|
|
78
|
+
### Actions
|
|
79
|
+
|
|
80
|
+
| Old (`@aircall/icons`) | New (`@aircall/react-icons`) | Source |
|
|
81
|
+
| --- | --- | --- |
|
|
82
|
+
| `CloseOutlined`, `CloseCircleFilled` | `X` | lucide |
|
|
83
|
+
| `CheckOutlined`, `TickOutlined` | `Check` | lucide |
|
|
84
|
+
| `SearchOutlined` | `Search` | lucide |
|
|
85
|
+
| `EditFilled`, `EditOutlined` | `Pencil` | lucide |
|
|
86
|
+
| `TrashFilled`, `TrashOutlined` | `Trash2` | lucide |
|
|
87
|
+
| `CopyFilled`, `CopyOutlined` | `Copy` | lucide |
|
|
88
|
+
| `FilterOutlined`, `FilterFilled` | `ListFilter` | lucide |
|
|
89
|
+
| `AddCircleFilled`, `PlusCircleFilled` | `Plus` | lucide |
|
|
90
|
+
|
|
91
|
+
### Arrows & Navigation
|
|
92
|
+
|
|
93
|
+
| Old (`@aircall/icons`) | New (`@aircall/react-icons`) | Source |
|
|
94
|
+
| --- | --- | --- |
|
|
95
|
+
| `ChevronDownOutlined`, `ArrowDownFilled` | `ChevronDown` | lucide |
|
|
96
|
+
| `ChevronLeftOutlined` | `ChevronLeft` | lucide |
|
|
97
|
+
| `ChevronRightOutlined`, `ArrowRightFilled` | `ChevronRight` | lucide |
|
|
98
|
+
| `ChevronUpOutlined`, `ArrowUpFilled` | `ChevronUp` | lucide |
|
|
99
|
+
| `SendFilled`, `SendOutlined` | `Send` | lucide |
|
|
100
|
+
| `RefreshOutlined` | `RefreshCw` | lucide |
|
|
101
|
+
|
|
102
|
+
### Audio & Video
|
|
103
|
+
|
|
104
|
+
| Old (`@aircall/icons`) | New (`@aircall/react-icons`) | Source |
|
|
105
|
+
| --- | --- | --- |
|
|
106
|
+
| `PlayFilled`, `PlayOutlined` | `Play` | lucide |
|
|
107
|
+
| `PauseFilled`, `PauseOutlined`, `HoldFilled` | `Pause` | lucide |
|
|
108
|
+
| `MicOnFilled`, `MicOnOutlined` | `Mic` | lucide |
|
|
109
|
+
| `MicOffFilled`, `MicOffOutlined` | `MicOff` | lucide |
|
|
110
|
+
| `SoundHighFilled`, `SoundHighOutlined` | `Volume2` | lucide |
|
|
111
|
+
| `HeadsetFilled`, `HeadsetOutlined` | `Headset` | lucide |
|
|
112
|
+
| `ReplayFilled`, `ReplayOutlined` | `Replay` | custom |
|
|
113
|
+
|
|
114
|
+
### Users & Contacts
|
|
115
|
+
|
|
116
|
+
| Old (`@aircall/icons`) | New (`@aircall/react-icons`) | Source |
|
|
117
|
+
| --- | --- | --- |
|
|
118
|
+
| `UserFilled`, `UserOutlined` | `UserRound` | lucide |
|
|
119
|
+
| `PeopleFilled`, `PeopleOutlined` | `UsersRound` | lucide |
|
|
120
|
+
| `ContactsFilled`, `ContactsOutlined` | `ContactRound` | lucide |
|
|
121
|
+
| `AssignedFilled`, `AssignedOutlined` | `Assigned` | custom |
|
|
122
|
+
| `CompanyFilled`, `CompanyOutlined` | `Building` | lucide |
|
|
123
|
+
|
|
124
|
+
### Feedback & Status
|
|
125
|
+
|
|
126
|
+
| Old (`@aircall/icons`) | New (`@aircall/react-icons`) | Source |
|
|
127
|
+
| --- | --- | --- |
|
|
128
|
+
| `InformationFilled`, `InformationOutlined` | `Info` | lucide |
|
|
129
|
+
| `WarningFilled`, `WarningOutlined` | `AlertTriangle` | lucide |
|
|
130
|
+
| `NotificationOnFilled`, `NotificationOnOutlined` | `Bell` | lucide |
|
|
131
|
+
| `StarOutlined` | `Star` | lucide |
|
|
132
|
+
| `StarFilled` | `StarFilled` | custom |
|
|
133
|
+
|
|
134
|
+
### Messages & SMS
|
|
135
|
+
|
|
136
|
+
| Old (`@aircall/icons`) | New (`@aircall/react-icons`) | Source |
|
|
137
|
+
| --- | --- | --- |
|
|
138
|
+
| `MessageFilled`, `SmsInboundFilled` | `MessageSquare` | lucide |
|
|
139
|
+
| `EmailFilled`, `MailOutlined` | `Mail` | lucide |
|
|
140
|
+
| `InboxFilled`, `InboxOutlined` | `Inbox` | lucide |
|
|
141
|
+
| `ChatFilled`, `ChatOutlined` | `MessagesSquare` | lucide |
|
|
142
|
+
|
|
143
|
+
### System & Settings
|
|
144
|
+
|
|
145
|
+
| Old (`@aircall/icons`) | New (`@aircall/react-icons`) | Source |
|
|
146
|
+
| --- | --- | --- |
|
|
147
|
+
| `SettingsFilled`, `SettingsOutlined` | `Settings` | lucide |
|
|
148
|
+
| `MenuVerticalFilled`, `MenuVerticalOutlined` | `MoreVertical` | lucide |
|
|
149
|
+
| `MenuHorizontalFilled`, `MenuHorizontalOutlined` | `MoreHorizontal` | lucide |
|
|
150
|
+
| `SpinnerOutlined` | `Loader2` | lucide |
|
|
151
|
+
|
|
152
|
+
### Analytics & AI
|
|
153
|
+
|
|
154
|
+
| Old (`@aircall/icons`) | New (`@aircall/react-icons`) | Source |
|
|
155
|
+
| --- | --- | --- |
|
|
156
|
+
| `SparklesFilled`, `LivePromptFilled`, `MagicFilled` | `AiAssist` | custom |
|
|
157
|
+
| `AIAgent`, `VirtualAgentFilled` | `AiAgents` | custom |
|
|
158
|
+
| `MonitoringFilled`, `AnalyticsFilled` | `BarChartBig` | lucide |
|
|
159
|
+
| `ActivityFilled`, `BoltFilled` | `Zap` | lucide |
|
|
160
|
+
|
|
161
|
+
## 5. Icons with no equivalent
|
|
162
|
+
|
|
163
|
+
A small number of old icons have no direct mapping. Handle them as noted:
|
|
164
|
+
|
|
165
|
+
| Old icon | Action |
|
|
166
|
+
| --- | --- |
|
|
167
|
+
| `PlayPauseFilled`, `PlayPauseOutlined` | Use `Play` or `Pause` contextually — no combined equivalent |
|
|
168
|
+
| `Speed100XFilled`, `Speed125XFilled`, `Speed150XFilled`, `Speed200XFilled` | Render as text or a custom badge — no icon equivalent |
|
|
169
|
+
| `AIMessageFilled` | No equivalent — treat as custom SVG until a replacement ships |
|
|
170
|
+
| `OnboardingFilled` | Use `Flag` or `Rocket` as a placeholder; confirm with design |
|
|
171
|
+
|
|
172
|
+
## 6. Brand / platform icons (not in @aircall/react-icons)
|
|
173
|
+
|
|
174
|
+
Keep these as separate inline SVGs or local wrappers — they are not in `@aircall/react-icons`:
|
|
175
|
+
|
|
176
|
+
- **Aircall brand**: `AircallIcon`, `AircallLogo`, `AircallLogoFull`, logo-mark variants
|
|
177
|
+
- **OS / platform**: `AppleFilled`, `AndroidFilled`, `WindowsFilled`, `MacFilled`
|
|
178
|
+
- **Browsers**: `ChromeFilled`, `EdgeFilled`, `FirefoxFilled`
|
|
179
|
+
- **Messaging**: `WhatsappFilled`, `WhatsappOutlined` — use the existing `WhatsAppIcon.tsx` in `packages/aw-ui`
|
|
180
|
+
- **Text badges**: `BetaOutlined` — keep as a custom SVG or badge component
|
|
181
|
+
|
|
182
|
+
## 7. Before / After examples
|
|
183
|
+
|
|
184
|
+
### 7a. Basic icon with color and size
|
|
185
|
+
|
|
186
|
+
**Before (Tractor + @aircall/icons):**
|
|
187
|
+
```tsx
|
|
188
|
+
import { Icon } from '@aircall/tractor';
|
|
189
|
+
import { CallFilled } from '@aircall/icons';
|
|
190
|
+
|
|
191
|
+
<Icon component={CallFilled} size={24} color="primary.500" />
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**After (@aircall/react-icons + Tailwind):**
|
|
195
|
+
```tsx
|
|
196
|
+
import { Phone } from '@aircall/react-icons';
|
|
197
|
+
|
|
198
|
+
<Phone className="size-6 text-primary" />
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### 7b. Icon inside a button (critical color)
|
|
202
|
+
|
|
203
|
+
**Before (Tractor + @aircall/icons):**
|
|
204
|
+
```tsx
|
|
205
|
+
import { Icon } from '@aircall/tractor';
|
|
206
|
+
import { TrashFilled } from '@aircall/icons';
|
|
207
|
+
import { Button } from '@aircall/tractor';
|
|
208
|
+
|
|
209
|
+
<Button variant="danger" size="small">
|
|
210
|
+
<Icon component={TrashFilled} size={16} color="critical.500" />
|
|
211
|
+
Delete
|
|
212
|
+
</Button>
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**After (@aircall/ds + @aircall/react-icons):**
|
|
216
|
+
```tsx
|
|
217
|
+
import { Trash2 } from '@aircall/react-icons';
|
|
218
|
+
import { Button } from '@aircall/ds';
|
|
219
|
+
|
|
220
|
+
<Button variant="destructive" size="lg">
|
|
221
|
+
<Trash2 />
|
|
222
|
+
Delete
|
|
223
|
+
</Button>
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
> When an icon sits inside a DS `Button`, omit the `size-*` class — the Button's `[&_svg]:size-4` rule sizes it automatically.
|
|
227
|
+
|
|
228
|
+
### 7c. Icon with muted color (secondary text)
|
|
229
|
+
|
|
230
|
+
**Before (Tractor + @aircall/icons):**
|
|
231
|
+
```tsx
|
|
232
|
+
import { Icon } from '@aircall/tractor';
|
|
233
|
+
import { ClockFilled } from '@aircall/icons';
|
|
234
|
+
|
|
235
|
+
<Icon component={ClockFilled} size={20} color="text.secondary" />
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**After (@aircall/react-icons + Tailwind):**
|
|
239
|
+
```tsx
|
|
240
|
+
import { Clock } from '@aircall/react-icons';
|
|
241
|
+
|
|
242
|
+
<Clock className="size-5 text-muted-foreground" />
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### 7d. Custom Aircall icon
|
|
246
|
+
|
|
247
|
+
**Before (Tractor + @aircall/icons):**
|
|
248
|
+
```tsx
|
|
249
|
+
import { Icon } from '@aircall/tractor';
|
|
250
|
+
import { VoicemailDrop } from '@aircall/icons';
|
|
251
|
+
|
|
252
|
+
<Icon component={VoicemailDrop} size={24} />
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
**After (@aircall/react-icons):**
|
|
256
|
+
```tsx
|
|
257
|
+
import { VoicemailDrop } from '@aircall/react-icons';
|
|
258
|
+
|
|
259
|
+
<VoicemailDrop className="size-6" />
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
> Aircall custom icons are also re-exported from `@aircall/react-icons`. The import source changes but the component name stays the same for custom icons that survived into the new package.
|
|
263
|
+
|
|
264
|
+
## 8. Common mistakes
|
|
265
|
+
|
|
266
|
+
### Mistake 1: Keeping the Tractor `<Icon>` wrapper
|
|
267
|
+
|
|
268
|
+
```tsx
|
|
269
|
+
// WRONG — @aircall/ds has no Icon component; wrapper is unused
|
|
270
|
+
import { Icon } from '@aircall/tractor';
|
|
271
|
+
import { Phone } from '@aircall/react-icons';
|
|
272
|
+
|
|
273
|
+
<Icon component={Phone} size={24} color="primary.500" />
|
|
274
|
+
|
|
275
|
+
// CORRECT — use the icon component directly with Tailwind classes
|
|
276
|
+
import { Phone } from '@aircall/react-icons';
|
|
277
|
+
|
|
278
|
+
<Phone className="size-6 text-primary" />
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
**Mechanism:** `@aircall/react-icons` exports standard SVG React components. The Tractor `Icon` wrapper was a thin adapter that forwarded `size` and `color` as `width`/`height`/`fill` attributes. Without it, those props are simply ignored — or worse, they pass unknown attributes to the SVG element.
|
|
282
|
+
|
|
283
|
+
Source: `@aircall/react-icons` re-exports lucide + Aircall icons as plain SVG components with no wrapper.
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
### Mistake 2: Using the old `@aircall/icons` name unchanged
|
|
288
|
+
|
|
289
|
+
```tsx
|
|
290
|
+
// WRONG — old name does not exist in @aircall/react-icons; TS compile error
|
|
291
|
+
import { CallFilled } from '@aircall/react-icons';
|
|
292
|
+
|
|
293
|
+
// CORRECT — lucide consolidates filled/outlined variants; use the new name
|
|
294
|
+
import { Phone } from '@aircall/react-icons';
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
**Mechanism:** `@aircall/react-icons` intentionally consolidates `*Filled`/`*Outlined` variants into a single icon name (e.g. `CallFilled` + `CallOutlined` → `Phone`). The visual distinction (filled vs stroke) is gone by design — lucide icons are all stroke-outlined. Importing the old name compiles to `undefined` and renders nothing.
|
|
298
|
+
|
|
299
|
+
Source: `@aircall/react-icons` re-exports lucide + Aircall icons; custom icons live in `packages/react-icons/src/generated/custom`.
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
### Mistake 3: Using a `color` or `size` number prop instead of Tailwind classes
|
|
304
|
+
|
|
305
|
+
```tsx
|
|
306
|
+
// WRONG — color and size number are Tractor Icon props, not valid SVG props
|
|
307
|
+
import { Mic } from '@aircall/react-icons';
|
|
308
|
+
|
|
309
|
+
<Mic size={24} color="primary.500" />
|
|
310
|
+
|
|
311
|
+
// CORRECT — use Tailwind utility classes
|
|
312
|
+
import { Mic } from '@aircall/react-icons';
|
|
313
|
+
|
|
314
|
+
<Mic className="size-6 text-primary" />
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
**Mechanism:** lucide-react icons accept a `size` prop and a `color` prop via the lucide component API — but `@aircall/react-icons` wraps them in a way that Tailwind classes are the intended styling mechanism. Using Tractor color tokens like `"primary.500"` as a CSS value produces an invalid color string that browsers ignore silently, and the icon renders in the inherited color instead of the intended one.
|
|
318
|
+
|
|
319
|
+
Source: `@aircall/react-icons` re-exports lucide + Aircall icons; Tailwind design tokens (`text-primary`, `text-destructive`, etc.) are the authoritative color system in `@aircall/ds`.
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
### Mistake 4: Importing icons directly from `lucide-react`
|
|
324
|
+
|
|
325
|
+
```tsx
|
|
326
|
+
// WRONG — bypasses the Aircall icon layer; icon swaps or overrides won't apply
|
|
327
|
+
import { Phone } from 'lucide-react';
|
|
328
|
+
|
|
329
|
+
// CORRECT — always route through @aircall/react-icons
|
|
330
|
+
import { Phone } from '@aircall/react-icons';
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
**Mechanism:** `@aircall/react-icons` is the single source of truth for all icons — it re-exports lucide icons and adds Aircall custom icons. Importing from `lucide-react` directly means any future override, version pin, or custom replacement in `@aircall/react-icons` won't be picked up. It also breaks tree-shaking assumptions and makes it harder to audit icon usage across the codebase.
|
|
334
|
+
|
|
335
|
+
Source: `@aircall/react-icons` re-exports lucide + Aircall icons as the canonical icon surface for Aircall apps.
|
|
336
|
+
|
|
337
|
+
## 9. Migration checklist
|
|
338
|
+
|
|
339
|
+
- [ ] Swap `@aircall/icons` → `@aircall/react-icons` in `package.json`
|
|
340
|
+
- [ ] Remove `import { Icon } from '@aircall/tractor'` — no wrapper needed
|
|
341
|
+
- [ ] Rename icons per the tables above (many `*Filled`/`*Outlined` pairs merge into one name)
|
|
342
|
+
- [ ] Replace `color="…"` with `className="text-*"` using the color table
|
|
343
|
+
- [ ] Replace `size={N}` with `className="size-N"` (or omit when inside a DS `Button`)
|
|
344
|
+
- [ ] Run `pnpm tsc --noEmit` — missing exports surface as TS compile errors
|
|
345
|
+
- [ ] Keep brand/platform icons (Aircall logo, OS, browser, WhatsApp) as separate assets
|
|
346
|
+
- [ ] For icons marked "validate usage", confirm the new shape is visually correct in context
|