@radui/ui 0.4.0 → 0.6.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 +2 -0
- package/dist/components/Accordion.d.ts +19 -33
- package/dist/components/Accordion.js +1 -1
- package/dist/components/AlertDialog.d.ts +7 -3
- package/dist/components/AlertDialog.js +1 -1
- package/dist/components/AspectRatio.d.ts +2 -2
- package/dist/components/AspectRatio.js +1 -1
- package/dist/components/Avatar.js +1 -1
- package/dist/components/AvatarGroup.js +1 -1
- package/dist/components/{AvatarPrimitiveFallback-KiY3slgV.js → AvatarPrimitiveFallback-B1u295x6.js} +1 -1
- package/dist/components/Badge.js +1 -1
- package/dist/components/BlockQuote.js +1 -1
- package/dist/components/Breadcrumb.d.ts +70 -0
- package/dist/components/Breadcrumb.js +1 -0
- package/dist/components/Button.js +1 -1
- package/dist/components/Callout.js +1 -1
- package/dist/components/Card.js +1 -1
- package/dist/components/Checkbox.js +1 -1
- package/dist/components/CheckboxCards.js +1 -1
- package/dist/components/CheckboxGroup.js +1 -1
- package/dist/components/{CheckboxGroupPrimitive-DgfnzMT9.js → CheckboxGroupPrimitive-BWGRST9p.js} +1 -1
- package/dist/components/Code.js +1 -1
- package/dist/components/Collapsible.js +1 -1
- package/dist/components/Combobox.d.ts +3 -1
- package/dist/components/Combobox.js +1 -1
- package/dist/components/ComboboxPrimitive-C2sksm48.js +1 -0
- package/dist/components/Command.d.ts +113 -0
- package/dist/components/Command.js +1 -0
- package/dist/components/ContextMenu.d.ts +14 -10
- package/dist/components/ContextMenu.js +1 -1
- package/dist/components/DataList.d.ts +7 -2
- package/dist/components/DataList.js +1 -1
- package/dist/components/Dialog.d.ts +6 -3
- package/dist/components/Dialog.js +1 -1
- package/dist/components/Disclosure.d.ts +2 -0
- package/dist/components/Disclosure.js +1 -1
- package/dist/components/Drawer.d.ts +231 -0
- package/dist/components/Drawer.js +1 -0
- package/dist/components/DropdownMenu.d.ts +10 -6
- package/dist/components/DropdownMenu.js +1 -1
- package/dist/components/Em.js +1 -1
- package/dist/components/Fieldset.d.ts +43 -0
- package/dist/components/Fieldset.js +1 -0
- package/dist/components/Heading.js +1 -1
- package/dist/components/HoverCard.d.ts +10 -2
- package/dist/components/HoverCard.js +1 -1
- package/dist/components/Kbd.js +1 -1
- package/dist/components/Link.js +1 -1
- package/dist/components/LiveRegion.d.ts +73 -0
- package/dist/components/LiveRegion.js +1 -0
- package/dist/components/MenuPrimitive-COEgTo6S.js +1 -0
- package/dist/components/Menubar.d.ts +10 -6
- package/dist/components/Menubar.js +1 -1
- package/dist/components/Minimap.js +1 -1
- package/dist/components/NavigationMenu.d.ts +3 -0
- package/dist/components/NavigationMenu.js +1 -1
- package/dist/components/NumberField.d.ts +2 -0
- package/dist/components/NumberField.js +1 -1
- package/dist/components/Popover.d.ts +68 -0
- package/dist/components/Popover.js +1 -0
- package/dist/components/Progress.js +1 -1
- package/dist/components/Quote.d.ts +2 -0
- package/dist/components/Quote.js +1 -1
- package/dist/components/Radio.js +1 -1
- package/dist/components/RadioCards.js +1 -1
- package/dist/components/RadioGroup.js +1 -1
- package/dist/components/{RadioGroupPrimitive-tlWBfWJ8.js → RadioGroupPrimitive-BWUU-0Qh.js} +1 -1
- package/dist/components/ScrollArea.d.ts +15 -3
- package/dist/components/ScrollArea.js +1 -1
- package/dist/components/Select.d.ts +3 -1
- package/dist/components/Select.js +1 -1
- package/dist/components/Separator.js +1 -1
- package/dist/components/Skeleton.js +1 -1
- package/dist/components/Slider.js +1 -1
- package/dist/components/Spinner.js +1 -1
- package/dist/components/Splitter.js +1 -1
- package/dist/components/Steps.js +1 -1
- package/dist/components/Strong.js +1 -1
- package/dist/components/Switch.js +1 -1
- package/dist/components/TabNav.js +1 -1
- package/dist/components/Table.d.ts +65 -19
- package/dist/components/Table.js +1 -1
- package/dist/components/Tabs.d.ts +2 -0
- package/dist/components/Tabs.js +1 -1
- package/dist/components/Text.js +1 -1
- package/dist/components/TextArea.js +1 -1
- package/dist/components/TextField.d.ts +41 -0
- package/dist/components/TextField.js +1 -0
- package/dist/components/Theme.d.ts +2 -0
- package/dist/components/Theme.js +1 -1
- package/dist/components/Toast.d.ts +322 -0
- package/dist/components/Toast.js +1 -0
- package/dist/components/Toggle.js +1 -1
- package/dist/components/ToggleGroup.js +1 -1
- package/dist/components/Toolbar.js +1 -1
- package/dist/components/Tooltip.d.ts +3 -0
- package/dist/components/Tooltip.js +1 -1
- package/dist/components/Tree.d.ts +1 -0
- package/dist/components/Tree.js +1 -1
- package/dist/components/VisuallyHidden.js +1 -1
- package/dist/components/documentOverlayOpen-coyGmcyL.js +1 -0
- package/dist/components/floating-ui.react-Byzse64h.js +5 -0
- package/dist/components/index-C09ZQH_q.js +1 -0
- package/dist/components/index-CD_nZA9X.js +1 -0
- package/dist/components/{index-BOy86lYu.js → index-CfC8-kd8.js} +1 -1
- package/dist/components/index-Db-tduwt.js +1 -0
- package/dist/components/index-UODM4mVT.js +1 -0
- package/dist/components/index-XF8itt-H.js +1 -0
- package/dist/components/index-YhJvxumL.js +1 -0
- package/dist/components/index-eAZUMNef.js +1 -0
- package/dist/components/index-m8Mhi26u.js +1 -0
- package/dist/components/keyboard-BKF7hXqL.js +1 -0
- package/dist/components/mergeProps-0RucjqeH.js +1 -0
- package/dist/components/useComponentClass-QwNivz0h.js +1 -0
- package/dist/themes/baremetal.css +1 -0
- package/dist/themes/default.css +1 -1
- package/dist/themes/tailwind-presets/default.css +396 -0
- package/package.json +76 -23
- package/dist/components/ComboboxPrimitive-D5wWLl2_.js +0 -1
- package/dist/components/MenuPrimitive-BvxwQFGM.js +0 -1
- package/dist/components/floating-ui.react-gB901AP2.js +0 -5
- package/dist/components/index-3dZuI04X.js +0 -1
- package/dist/components/index-6If6D2Zi.js +0 -1
- package/dist/components/index-98jQ1vTr.js +0 -1
- package/dist/components/index-BQ2Hbb_x.js +0 -1
- package/dist/components/index-BZVbVgqN.js +0 -1
- package/dist/components/index-BoRAvltW.js +0 -1
- package/dist/components/index-DTYJVF-V.js +0 -1
- package/dist/components/index-TYaYKM2M.js +0 -1
- package/dist/themes/tailwind-presets/default.js +0 -1
|
@@ -1,39 +1,85 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React$1, { CSSProperties } from 'react';
|
|
2
2
|
|
|
3
|
-
type
|
|
3
|
+
type ColumnWidths = Record<number, number>;
|
|
4
|
+
type TableResizeHandleVisibility = 'hover' | 'always';
|
|
5
|
+
interface TableContextValue {
|
|
6
|
+
rootClass: string;
|
|
7
|
+
resizable: boolean;
|
|
8
|
+
resizeHandleVisibility: TableResizeHandleVisibility;
|
|
9
|
+
columnCount: number;
|
|
10
|
+
registerColumnIndex: (columnIndex: number) => void;
|
|
11
|
+
columnWidths: ColumnWidths;
|
|
12
|
+
getColumnStyle: (columnIndex: number) => CSSProperties | undefined;
|
|
13
|
+
startColumnResize: (columnIndex: number, headerElement: HTMLElement, event: React.MouseEvent | React.TouchEvent) => void;
|
|
14
|
+
handleColumnResizeKeyDown: (columnIndex: number, headerElement: HTMLElement, event: React.KeyboardEvent) => void;
|
|
15
|
+
isResizing: boolean;
|
|
16
|
+
activeColumnIndex: number | null;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
type TableRootProps = React$1.ComponentPropsWithoutRef<'div'> & {
|
|
4
20
|
customRootClass?: string;
|
|
21
|
+
resizable?: boolean;
|
|
22
|
+
defaultColumnWidths?: number[] | ColumnWidths;
|
|
23
|
+
columnWidths?: number[] | ColumnWidths;
|
|
24
|
+
onColumnWidthsChange?: (widths: ColumnWidths) => void;
|
|
25
|
+
minColumnWidth?: number;
|
|
26
|
+
resizeHandleVisibility?: TableResizeHandleVisibility;
|
|
5
27
|
};
|
|
6
|
-
|
|
28
|
+
|
|
29
|
+
declare const useTable: () => TableContextValue;
|
|
30
|
+
declare const TableRoot: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
|
|
7
31
|
customRootClass?: string;
|
|
8
|
-
|
|
32
|
+
resizable?: boolean;
|
|
33
|
+
defaultColumnWidths?: number[] | ColumnWidths;
|
|
34
|
+
columnWidths?: number[] | ColumnWidths;
|
|
35
|
+
onColumnWidthsChange?: (widths: ColumnWidths) => void;
|
|
36
|
+
minColumnWidth?: number;
|
|
37
|
+
resizeHandleVisibility?: TableResizeHandleVisibility;
|
|
38
|
+
} & React$1.RefAttributes<HTMLDivElement>>;
|
|
9
39
|
|
|
10
|
-
type TableHeadProps = React.ComponentPropsWithoutRef<'thead'>;
|
|
11
|
-
declare const TableHead: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>, "ref"> & React.RefAttributes<HTMLTableSectionElement>>;
|
|
40
|
+
type TableHeadProps = React$1.ComponentPropsWithoutRef<'thead'>;
|
|
41
|
+
declare const TableHead: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>, "ref"> & React$1.RefAttributes<HTMLTableSectionElement>>;
|
|
12
42
|
|
|
13
|
-
type TableBodyProps = React.ComponentPropsWithoutRef<'tbody'>;
|
|
14
|
-
declare const TableBody: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>, "ref"> & React.RefAttributes<HTMLTableSectionElement>>;
|
|
43
|
+
type TableBodyProps = React$1.ComponentPropsWithoutRef<'tbody'>;
|
|
44
|
+
declare const TableBody: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>, "ref"> & React$1.RefAttributes<HTMLTableSectionElement>>;
|
|
15
45
|
|
|
16
|
-
type TableRowProps = React.ComponentPropsWithoutRef<'tr'>;
|
|
17
|
-
declare const TableRow: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement>, "ref"> & React.RefAttributes<HTMLTableRowElement>>;
|
|
46
|
+
type TableRowProps = React$1.ComponentPropsWithoutRef<'tr'>;
|
|
47
|
+
declare const TableRow: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement>, "ref"> & React$1.RefAttributes<HTMLTableRowElement>>;
|
|
18
48
|
|
|
19
|
-
type TableColumnCellHeaderProps = React.ComponentPropsWithoutRef<'th'
|
|
20
|
-
|
|
49
|
+
type TableColumnCellHeaderProps = React$1.ComponentPropsWithoutRef<'th'> & {
|
|
50
|
+
columnIndex?: number;
|
|
51
|
+
};
|
|
52
|
+
declare const TableColumnCellHeader: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.ThHTMLAttributes<HTMLTableHeaderCellElement>, HTMLTableHeaderCellElement>, "ref"> & {
|
|
53
|
+
columnIndex?: number;
|
|
54
|
+
} & React$1.RefAttributes<HTMLTableHeaderCellElement>>;
|
|
21
55
|
|
|
22
|
-
type
|
|
23
|
-
|
|
56
|
+
type TableColumnResizeHandleProps = React$1.ComponentPropsWithoutRef<'div'> & {
|
|
57
|
+
'aria-label'?: string;
|
|
58
|
+
};
|
|
59
|
+
declare const TableColumnResizeHandle: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
|
|
60
|
+
'aria-label'?: string;
|
|
61
|
+
} & React$1.RefAttributes<HTMLDivElement>>;
|
|
62
|
+
|
|
63
|
+
type TableCellProps = React$1.ComponentPropsWithoutRef<'td'> & {
|
|
64
|
+
columnIndex?: number;
|
|
65
|
+
};
|
|
66
|
+
declare const TableCell: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.TdHTMLAttributes<HTMLTableDataCellElement>, HTMLTableDataCellElement>, "ref"> & {
|
|
67
|
+
columnIndex?: number;
|
|
68
|
+
} & React$1.RefAttributes<HTMLTableDataCellElement>>;
|
|
24
69
|
|
|
25
|
-
type TableProps = React.HTMLAttributes<HTMLTableElement> & {
|
|
26
|
-
children?: React.ReactNode;
|
|
70
|
+
type TableProps = React$1.HTMLAttributes<HTMLTableElement> & {
|
|
71
|
+
children?: React$1.ReactNode;
|
|
27
72
|
};
|
|
28
|
-
interface TableComponent extends React.ForwardRefExoticComponent<TableProps & React.RefAttributes<HTMLTableElement>> {
|
|
73
|
+
interface TableComponent extends React$1.ForwardRefExoticComponent<TableProps & React$1.RefAttributes<HTMLTableElement>> {
|
|
29
74
|
Root: typeof TableRoot;
|
|
30
75
|
Body: typeof TableBody;
|
|
31
76
|
Head: typeof TableHead;
|
|
32
77
|
Row: typeof TableRow;
|
|
33
78
|
Cell: typeof TableCell;
|
|
34
79
|
ColumnCellHeader: typeof TableColumnCellHeader;
|
|
80
|
+
ColumnResizeHandle: typeof TableColumnResizeHandle;
|
|
35
81
|
}
|
|
36
82
|
declare const Table: TableComponent;
|
|
37
83
|
|
|
38
|
-
export { Table as default };
|
|
39
|
-
export type { TableBodyProps, TableCellProps, TableColumnCellHeaderProps, TableHeadProps, TableProps, TableRootProps, TableRowProps };
|
|
84
|
+
export { Table as default, useTable };
|
|
85
|
+
export type { TableBodyProps, TableCellProps, TableColumnCellHeaderProps, TableColumnResizeHandleProps, TableHeadProps, TableProps, TableResizeHandleVisibility, TableRootProps, TableRowProps };
|
package/dist/components/Table.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use client';import e from"react";import{jsx as
|
|
1
|
+
'use client';import e,{createContext as n,useRef as t,useState as r,useCallback as o,useEffect as l,useLayoutEffect as a,useMemo as s}from"react";import{jsx as i,jsxs as c}from"react/jsx-runtime";import{c as u}from"./clsx-BaVHROc5.js";import{u as d}from"./useComponentClass-QwNivz0h.js";import{K as m}from"./keyboard-BKF7hXqL.js";import"./ThemeContext-Sm-iNANd.js";const h=n(null),f="Table",v=()=>{const n=e.useContext(h);if(!n)throw new Error("Table components must be used within a Table.Root");return n};function b(e){return e?Array.isArray(e)?Object.fromEntries(e.map(((e,n)=>[n,e]))):e:{}}const y=e.forwardRef((({children:e,className:n="",customRootClass:v="",resizable:y=!1,defaultColumnWidths:C,columnWidths:p,onColumnWidthsChange:R,minColumnWidth:z=48,resizeHandleVisibility:w="hover",...E},N)=>{const x=d(v,f),T=t(null),[g,H]=r((()=>b(C))),[L,M]=r(0),[I,j]=r(!1),[W,A]=r(null),D=t({}),O=t(0),X=t(!1),k=t(null),K=o((()=>{const e=k.current;e&&(document.removeEventListener("mousemove",e.handleMove),document.removeEventListener("mouseup",e.handleEnd),document.removeEventListener("touchmove",e.handleMove),document.removeEventListener("touchend",e.handleEnd),document.removeEventListener("touchcancel",e.handleEnd),k.current=null)}),[]);l((()=>()=>{K()}),[K]);const S=void 0!==p,P=S?b(p):g;D.current=P,O.current=L;const V=o((e=>{S||H(e),R?.(e)}),[S,R]),$=o((e=>{M((n=>Math.max(n,e+1)))}),[]),B=o((e=>{if(!y)return;const n=P[e];return void 0!==n?{width:n}:void 0}),[P,y]);a((()=>{if(!y||S||!T.current||0===L||X.current)return;const e=T.current.offsetWidth;if(e<=0)return;const n=Object.keys(D.current).length>0?function(e,n,t){const r=Array.from({length:n},((n,t)=>e[t]??0)),o=r.reduce(((e,n)=>e+n),0);if(o<=0||t<=0)return e;const l=t/o;return Object.fromEntries(r.map(((e,n)=>[n,Math.max(1,Math.round(e*l))])))}(D.current,L,e):function(e,n){const t=Math.max(1,Math.floor(n/e));return Object.fromEntries(Array.from({length:e},((e,n)=>[n,t])))}(L,e);X.current=!0,V(n)}),[L,S,y,V]);const _=o(((e,n)=>{let t=e;for(let e=0;e<Math.abs(n);e+=1)if(t=n<0?t.previousElementSibling:t.nextElementSibling,!t)return null;return t}),[]),F=o(((e,n)=>D.current[e]??n?.offsetWidth??z),[z]),G=o(((e,n,t,r)=>{const o=e+1;if(o>=O.current)return;const l=r-z,a=t-z,s=Math.max(-a,Math.min(l,n)),i=t+s,c=r-s;V({...D.current,[e]:i,[o]:c})}),[z,V]),q=o(((e,n,t)=>{if(!y||e>=O.current-1)return;t.preventDefault();const r="clientX"in t?t.clientX:t.touches[0].clientX,o=_(n,1),l=F(e,n),a=F(e+1,o);j(!0),A(e),K();const s=n=>{const t="clientX"in n?n.clientX:n.touches[0].clientX;G(e,t-r,l,a)},i=()=>{j(!1),A(null),K()};k.current={handleMove:s,handleEnd:i},document.addEventListener("mousemove",s),document.addEventListener("mouseup",i),document.addEventListener("touchmove",s),document.addEventListener("touchend",i),document.addEventListener("touchcancel",i)}),[G,K,F,_,y]),J=o(((e,n,t)=>{if(!y||e>=O.current-1)return;const r=t.shiftKey?20:5;let o=0;if(t.key===m.ARROW_LEFT?o=-r:t.key===m.ARROW_RIGHT&&(o=r),0===o)return;t.preventDefault();const l=_(n,1);G(e,o,F(e,n),F(e+1,l))}),[G,F,_,y]),Q=s((()=>({rootClass:x,resizable:y,resizeHandleVisibility:w,columnCount:L,registerColumnIndex:$,columnWidths:P,getColumnStyle:B,startColumnResize:q,handleColumnResizeKeyDown:J,isResizing:I,activeColumnIndex:W})),[W,L,P,B,J,I,$,w,y,x,q]);return i(h.Provider,{value:Q,children:i("div",{ref:N,className:u(x&&`${x}-wrapper`,n),"data-resizable":y?"":void 0,"data-resizing":y&&I?"":void 0,"data-resize-handle-visibility":y?w:void 0,...E,children:c("table",{ref:T,className:u(x),"data-resizable":y?"":void 0,style:y?{tableLayout:"fixed",width:"100%"}:void 0,children:[y&&L>0&&i("colgroup",{children:Array.from({length:L},((e,n)=>i("col",{style:B(n)},n)))}),e]})})})}));y.displayName=f;const C=e.forwardRef((({children:e,className:n="header",...t},r)=>i("thead",{ref:r,className:u(n),...t,children:e})));C.displayName="TableHead";const p=e.forwardRef((({children:e,className:n="",...t},r)=>i("tbody",{ref:r,className:u(n),...t,children:e})));p.displayName="TableBody";const R=e.forwardRef((({children:e,className:n="row",...t},r)=>i("tr",{ref:r,className:u(n),...t,children:e})));R.displayName="TableRow";const z=n(null),w=e.forwardRef((({children:n,className:t="cell-header",columnIndex:r,style:o,...l},a)=>{const{resizable:s,registerColumnIndex:c}=v(),d=s&&void 0!==r;e.useLayoutEffect((()=>{void 0!==r&&c(r)}),[r,c]);const m=i("th",{ref:a,className:u(t,d&&"resizable"),style:o,...l,children:n});return void 0===r?m:i(z.Provider,{value:{columnIndex:r},children:m})}));w.displayName="TableColumnCellHeader";const E=e.forwardRef((({className:n,"aria-label":t,...r},o)=>{const{rootClass:l,resizable:a,resizeHandleVisibility:s,columnCount:c,startColumnResize:d,handleColumnResizeKeyDown:m,isResizing:h,activeColumnIndex:f}=v(),{columnIndex:b}=(()=>{const n=e.useContext(z);if(!n)throw new Error("Table.ColumnResizeHandle must be used within a Table.ColumnCellHeader with columnIndex");return n})(),y=e.useRef(null),C=h&&f===b,p=c>0&&b>=c-1,R=e.useCallback((e=>{y.current=e?.closest("th")??null,"function"==typeof o?o(e):o&&(o.current=e)}),[o]);return!a||p?null:i("div",{...r,ref:R,"data-slot":"table-column-resize-handle","data-resize-handle-visibility":s,"data-state":C?"active":void 0,className:u(l&&`${l}-column-resize-handle`,{active:C},n),role:"separator","aria-orientation":"vertical","aria-label":t||`Resize column ${b+1}`,tabIndex:0,onMouseDown:e=>{y.current&&d(b,y.current,e)},onTouchStart:e=>{y.current&&d(b,y.current,e)},onKeyDown:e=>{y.current&&m(b,y.current,e)}})}));E.displayName="TableColumnResizeHandle";const N=e.forwardRef((({children:e,className:n="cell",columnIndex:t,style:r,...o},l)=>{const{resizable:a}=v();return i("td",{ref:l,className:u(n,a&&void 0!==t&&"resizable"),style:r,...o,children:e})}));N.displayName="TableCell";const x=e.forwardRef((function(e,n){return console.warn("Direct usage of Table is not supported. Please use Table.Root, Table.Head, etc. instead."),null}));x.displayName="Table",x.Root=y,x.Body=p,x.Head=C,x.Row=R,x.Cell=N,x.ColumnCellHeader=w,x.ColumnResizeHandle=E;export{x as default,v as useTable};
|
|
@@ -37,6 +37,7 @@ type TabRootProps = React.ComponentPropsWithoutRef<'div'> & {
|
|
|
37
37
|
onValueChange?: (value: string) => void;
|
|
38
38
|
orientation?: 'horizontal' | 'vertical';
|
|
39
39
|
dir?: 'ltr' | 'rtl';
|
|
40
|
+
loop?: boolean;
|
|
40
41
|
activationMode?: 'automatic' | 'manual';
|
|
41
42
|
asChild?: boolean;
|
|
42
43
|
};
|
|
@@ -48,6 +49,7 @@ declare const TabRoot: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLPr
|
|
|
48
49
|
onValueChange?: (value: string) => void;
|
|
49
50
|
orientation?: "horizontal" | "vertical";
|
|
50
51
|
dir?: "ltr" | "rtl";
|
|
52
|
+
loop?: boolean;
|
|
51
53
|
activationMode?: "automatic" | "manual";
|
|
52
54
|
asChild?: boolean;
|
|
53
55
|
} & React.RefAttributes<HTMLDivElement>>;
|
package/dist/components/Tabs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use client';import a,{createContext as t,useContext as
|
|
1
|
+
'use client';import a,{createContext as t,useContext as o,useRef as e,useCallback as r,useEffect as i}from"react";import{jsx as s}from"react/jsx-runtime";import{c as n}from"./clsx-BaVHROc5.js";import{R as l}from"./index-m8Mhi26u.js";import{P as d}from"./index-XF8itt-H.js";import{u as c}from"./useComponentClass-QwNivz0h.js";import{u}from"./index-wRElCyvx.js";import"./index-CfC8-kd8.js";import"./keyboard-BKF7hXqL.js";import"./mergeRefs-B8eZ_q-T.js";import"./mergeProps-0RucjqeH.js";import"./ThemeContext-Sm-iNANd.js";const m=t(null),b=a.forwardRef((({className:a="",children:t,asChild:e=!1,...r},i)=>{const c=o(m);if(!c)throw new Error("TabList must be used within a TabRoot");const{rootClass:u,orientation:b}=c;return s(l.Group,{children:s(d.div,{ref:i,role:"tablist","aria-orientation":b,"aria-label":"todo",className:n(u&&`${u}-list`,a),"data-slot":"tabs-list",asChild:e,...r,children:t})})}));b.displayName="TabList";const h=a.forwardRef((({value:a,children:t,className:i="",disabled:c,asChild:u=!1,...b},h)=>{const f=o(m);if(!f)throw new Error("TabTrigger must be used within a TabRoot");const{tabValue:p,handleTabChange:C,rootClass:T,orientation:v,activationMode:g}=f,w=e(null),R=r((a=>{w.current=a,"function"==typeof h?h(a):h&&(h.current=a)}),[h]),N=a===p,j={};return j["data-state"]=N?"active":"inactive",j["data-orientation"]=v||"horizontal",c&&(j["data-disabled"]=""),s(l.Item,{onFocus:()=>{return a&&!c&&(t=a,void(c||(w.current&&w.current?.focus(),"automatic"===g&&C(t))));var t},children:s(d.button,{ref:R,onClick:t=>{c||a&&C(a)},className:n(T&&`${T}-trigger`,N?"active":"",c?"disabled":"",i),role:"tab","aria-selected":N,"aria-disabled":c,disabled:c,"data-slot":"tabs-trigger",asChild:u,...j,...b,children:t})})}));h.displayName="TabTrigger";const f="TabContent",p=a.forwardRef((({className:a="",value:t,children:e,customRootClass:r,asChild:i=!1,forceMount:l=!1,...u},b)=>{const h=c(r,f),p=o(m);if(!p)throw new Error("TabContent must be used within a TabRoot");const{tabValue:C,orientation:T}=p,v=C===t;if(!(l||v))return null;const g={};return g["data-state"]=v?"active":"inactive",g["data-orientation"]=T||"horizontal",s(d.div,{ref:b,className:n(h,a),role:"tabpanel","aria-hidden":!v,"data-slot":"tabs-content",asChild:i,...g,...u,children:e})}));p.displayName=f;const C="Tabs",T=a.forwardRef((({children:a,defaultValue:t="",onValueChange:o=()=>{},customRootClass:e="",value:r,className:b,color:h,orientation:f="horizontal",dir:p="ltr",loop:T=!0,activationMode:v="automatic",asChild:g=!1,...w},R)=>{const N=c(e,C),[j,x]=u(r,t||"",o),y=a=>{x(a)};i((()=>{void 0===r&&t&&y(t)}),[t,r]);const V={rootClass:N,tabValue:j,handleTabChange:y,orientation:f,activationMode:v},L={};return L["data-orientation"]=f,s(m.Provider,{value:V,children:s(l.Root,{orientation:f,loop:T,dir:p,asChild:!0,children:s(d.div,{ref:R,className:n(N,b),"data-color":h,"data-slot":"tabs-root",asChild:g,...L,...w,children:a})})})}));T.displayName=C;const v=a.forwardRef(((a,t)=>(console.warn("Direct usage of Tabs is not supported. Please use Tabs.Root, Tabs.List, etc. instead."),null)));v.displayName="Tabs",v.List=b,v.Content=p,v.Root=T,v.Trigger=h;export{v as default};
|
package/dist/components/Text.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use client';import s,{forwardRef as e}from"react";import{
|
|
1
|
+
'use client';import s,{forwardRef as e}from"react";import{u as a}from"./useComponentClass-QwNivz0h.js";import{c as t}from"./clsx-BaVHROc5.js";import"./ThemeContext-Sm-iNANd.js";const o="Text",m=["div","span","p","label"],r=e((({children:e,customRootClass:r="",className:l="",as:c="p",...p},n)=>{const i=a(r,o);return m.includes(c)||(c="p"),s.createElement(c,{ref:n,className:t(i,l),...p},e)}));r.displayName=o;export{r as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
'use client';import{jsx as e,jsxs as a}from"react/jsx-runtime";import r from"react";import{c as s}from"./clsx-BaVHROc5.js";import{
|
|
1
|
+
'use client';import{jsx as e,jsxs as a}from"react/jsx-runtime";import r from"react";import{c as s}from"./clsx-BaVHROc5.js";import{u as o}from"./useComponentClass-QwNivz0h.js";import{c as t,a as l,b as i}from"./index-eAZUMNef.js";import"./ThemeContext-Sm-iNANd.js";const d="TextArea",c=r.forwardRef((({children:a,customRootClass:r="",className:c="",variant:m="",size:n="",resize:p="both",color:f="",radius:u="",...h},x)=>{const N=o(r,d),R=t("textarea",{variant:m,size:n,resize:p,radius:u}),y=i(f),C=l(R,y);return e("div",{ref:x,className:s(N,c),...h,...C,children:a})}));c.displayName=d;const m=r.forwardRef((({children:a,placeholder:r="",...s},o)=>e("textarea",{ref:o,placeholder:r,defaultValue:"string"==typeof a?a:void 0,...s})));m.displayName="TextAreaInput";const n=r.forwardRef((({customRootClass:r="",placeholder:o="",className:t="",disabled:l=!1,readonly:i=!1,children:d,...n},p)=>a(c,{ref:p,customRootClass:r,className:s(t),...n,children:[e(m,{placeholder:o,disabled:l,readOnly:i,children:d}),d]})));n.displayName="TextArea",n.Input=m,n.Root=c;export{n as default};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
type TextFieldRootProps = React.ComponentPropsWithoutRef<'div'> & {
|
|
4
|
+
className?: string;
|
|
5
|
+
customRootClass?: string;
|
|
6
|
+
};
|
|
7
|
+
declare const TextFieldRoot: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
|
|
8
|
+
className?: string;
|
|
9
|
+
customRootClass?: string;
|
|
10
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
11
|
+
|
|
12
|
+
type TextFieldInputProps = React.ComponentPropsWithoutRef<'input'>;
|
|
13
|
+
declare const TextFieldInput: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
14
|
+
|
|
15
|
+
type TextFieldSlotProps = React.ComponentPropsWithoutRef<'div'> & {
|
|
16
|
+
side?: 'start' | 'end';
|
|
17
|
+
};
|
|
18
|
+
declare const TextFieldSlot: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
|
|
19
|
+
side?: "start" | "end";
|
|
20
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
21
|
+
|
|
22
|
+
type TextFieldResetProps = React.ComponentPropsWithoutRef<'button'>;
|
|
23
|
+
declare const TextFieldReset: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
24
|
+
|
|
25
|
+
type TextFieldProps = React.ComponentPropsWithoutRef<'input'> & {
|
|
26
|
+
className?: string;
|
|
27
|
+
customRootClass?: string;
|
|
28
|
+
inputClassName?: string;
|
|
29
|
+
startSlot?: React.ReactNode;
|
|
30
|
+
endSlot?: React.ReactNode;
|
|
31
|
+
};
|
|
32
|
+
type TextFieldComponent = React.ForwardRefExoticComponent<TextFieldProps & React.RefAttributes<HTMLInputElement>> & {
|
|
33
|
+
Root: typeof TextFieldRoot;
|
|
34
|
+
Input: typeof TextFieldInput;
|
|
35
|
+
Slot: typeof TextFieldSlot;
|
|
36
|
+
Reset: typeof TextFieldReset;
|
|
37
|
+
};
|
|
38
|
+
declare const TextField: TextFieldComponent;
|
|
39
|
+
|
|
40
|
+
export { TextField as default };
|
|
41
|
+
export type { TextFieldInputProps, TextFieldProps, TextFieldResetProps, TextFieldRootProps, TextFieldSlotProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use client';import{jsx as e,jsxs as t}from"react/jsx-runtime";import s from"react";import{c as a}from"./clsx-BaVHROc5.js";import{u as l}from"./useComponentClass-QwNivz0h.js";import{c as n}from"./mergeProps-0RucjqeH.js";import"./ThemeContext-Sm-iNANd.js";const r=s.createContext({rootClass:"",inputRef:{current:null},clearInput:()=>{},hasValue:!1,setHasValue:()=>!1}),o="TextField",u=s.forwardRef((({className:t="",customRootClass:n="",children:u,...c},i)=>{const d=l(n,o),p=s.useRef(null),[f,m]=s.useState(!1),h=s.useCallback((()=>{const e=p.current;if(!e)return;const t=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"value")?.set;t?.call(e,""),e.dispatchEvent(new Event("input",{bubbles:!0})),m(!1),e.focus()}),[]);return e(r.Provider,{value:{rootClass:d,inputRef:p,clearInput:h,hasValue:f,setHasValue:m},children:e("div",{ref:i,className:a(d,t),"data-slot":"text-field-root",...c,children:u})})}));u.displayName=o;const c=s.forwardRef((({className:t="",type:l="text",onChange:o,onInput:u,value:c,defaultValue:i,...d},p)=>{const{rootClass:f,inputRef:m,setHasValue:h}=s.useContext(r);s.useEffect((()=>{void 0===c?void 0!==i&&h(String(i).length>0):h(String(c).length>0)}),[i,h,c]);return e("input",{ref:n(p,m),type:l,className:a(f&&`${f}-input`,t),"data-slot":"text-field-input",value:c,defaultValue:i,onInput:e=>{h(e.currentTarget.value.length>0),u?.(e)},onChange:e=>{h(e.currentTarget.value.length>0),o?.(e)},...d})}));c.displayName="TextFieldInput";const i=s.forwardRef((({children:t,className:l="",side:n,...o},u)=>{const{rootClass:c,inputRef:i}=s.useContext(r);return e("div",{ref:u,role:"presentation",className:a(c&&`${c}-slot`,l),"data-slot":"text-field-slot","data-text-field-slot":n,...o,onMouseDown:e=>{o.onMouseDown?.(e),e.defaultPrevented||(e.preventDefault(),i.current?.focus())},children:t})}));i.displayName="TextFieldSlot";const d=s.forwardRef((({className:t="",type:l="button",onClick:n,children:o,...u},c)=>{const{rootClass:i,clearInput:d,inputRef:p,hasValue:f}=s.useContext(r);return f?e("button",{ref:c,type:l,className:a(i&&`${i}-reset`,t),"data-slot":"text-field-reset",onClick:e=>{n?.(e),e.defaultPrevented||p.current?.disabled||p.current?.readOnly||d()},...u,children:o}):null}));d.displayName="TextFieldReset";const p=s.forwardRef((({className:s="",customRootClass:l="",inputClassName:n="",startSlot:r,endSlot:o,type:d="text",...p},f)=>t(u,{customRootClass:l,className:a(s),children:[r?e(i,{side:"start",children:r}):null,e(c,{ref:f,type:d,className:a(n),...p}),o?e(i,{side:"end",children:o}):null]})));p.displayName="TextField",p.Root=u,p.Input=c,p.Slot=i,p.Reset=d;export{p as default};
|
|
@@ -5,12 +5,14 @@ type ThemeProps = ComponentPropsWithoutRef<'div'> & {
|
|
|
5
5
|
accentColor?: string;
|
|
6
6
|
radius?: string;
|
|
7
7
|
scaling?: string;
|
|
8
|
+
classNamespace?: string;
|
|
8
9
|
};
|
|
9
10
|
declare const Theme: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
|
|
10
11
|
appearance?: "light" | "dark" | "system";
|
|
11
12
|
accentColor?: string;
|
|
12
13
|
radius?: string;
|
|
13
14
|
scaling?: string;
|
|
15
|
+
classNamespace?: string;
|
|
14
16
|
} & React.RefAttributes<HTMLDivElement>>;
|
|
15
17
|
|
|
16
18
|
export { Theme as default };
|
package/dist/components/Theme.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use client';import{jsx as e,jsxs as
|
|
1
|
+
'use client';import{jsx as e,jsxs as a}from"react/jsx-runtime";import{forwardRef as r,useRef as t,useState as n,useEffect as c,useCallback as i}from"react";import{T as o}from"./ThemeContext-Sm-iNANd.js";const s=r((function({appearance:r="system",id:s="rad-ui-theme-container",accentColor:d="",radius:m="",scaling:l="",classNamespace:u,children:h,...p},f){const v=t(null),g=t(null),[y,k]=n(r),[x,N]=n(d),[R,T]=n(m),[j,w]=n(l),C=t(f);c((()=>{C.current=f}),[f]);const E=i((e=>{v.current=e,((e,a)=>{"function"!=typeof e?e&&(e.current=a):e(a)})(C.current,e)}),[]);return c((()=>{const e=window.matchMedia("(prefers-color-scheme: dark)"),a=e=>{"system"===r&&k(e.matches?"dark":"light")};return"system"===r?(k(e.matches?"dark":"light"),e.addEventListener("change",a)):k(r),()=>e.removeEventListener("change",a)}),[r]),c((()=>{d&&N(d)}),[d]),c((()=>{m&&T(m)}),[m]),c((()=>{l&&w(l)}),[l]),e(o.Provider,{value:{containerRef:v,portalRootRef:g,classNamespace:u},children:a("div",{ref:E,id:s,"data-rad-ui-theme":y,"data-rad-ui-accent-color":x,"data-rad-ui-radius":R,"data-rad-ui-scaling":j,...p,children:[h,e("div",{ref:g,"data-rad-ui-portal-root":""})]})})}));s.displayName="Theme";export{s as default};
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
import React$1 from 'react';
|
|
2
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Viewport corner — headless string for `data-position` (theme defines valid values).
|
|
6
|
+
* Common: `bottom-right`, `bottom-left`, `bottom-center`, `top-right`, `top-left`, `top-center`.
|
|
7
|
+
*/
|
|
8
|
+
type ToastPosition = string;
|
|
9
|
+
interface ToastData {
|
|
10
|
+
id: string;
|
|
11
|
+
title?: React.ReactNode;
|
|
12
|
+
description?: React.ReactNode;
|
|
13
|
+
/** Headless semantic / styling hook — forwarded as `data-variant` when set. */
|
|
14
|
+
variant?: string;
|
|
15
|
+
/** Headless — forwarded as `data-type` when set (e.g. `loading`). */
|
|
16
|
+
type?: string;
|
|
17
|
+
/** Auto-dismiss delay (ms). Base UI name: prefer `timeout`; we normalize both. */
|
|
18
|
+
duration?: number;
|
|
19
|
+
timeout?: number;
|
|
20
|
+
persistent?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Live-region urgency — headless string; we treat `high` as `aria-live="assertive"`, otherwise `polite`.
|
|
23
|
+
*/
|
|
24
|
+
priority?: string;
|
|
25
|
+
onDismiss?: () => void;
|
|
26
|
+
/** Base UI name — called when the toast begins closing. */
|
|
27
|
+
onClose?: () => void;
|
|
28
|
+
/** Base UI — after removal from the list (post-exit). */
|
|
29
|
+
onRemove?: () => void;
|
|
30
|
+
/**
|
|
31
|
+
* Incremented when `add({ id })` upserts an existing toast (pulse / replay).
|
|
32
|
+
*/
|
|
33
|
+
updateKey?: number;
|
|
34
|
+
/** Base UI — toast was dropped because the stack limit was exceeded. */
|
|
35
|
+
limited?: boolean;
|
|
36
|
+
/** Base UI — props spread onto the action button (`Toast.Action`). */
|
|
37
|
+
actionProps?: React.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
38
|
+
children?: React.ReactNode;
|
|
39
|
+
};
|
|
40
|
+
/** Base UI — custom payload for render logic. */
|
|
41
|
+
data?: unknown;
|
|
42
|
+
/** Headless custom render function (Sonner-like). Receives render props. */
|
|
43
|
+
render?: (props: {
|
|
44
|
+
id: string;
|
|
45
|
+
toast: ToastData;
|
|
46
|
+
onDismiss: () => void;
|
|
47
|
+
}) => React.ReactNode;
|
|
48
|
+
/** Optional icon node. */
|
|
49
|
+
icon?: React.ReactNode;
|
|
50
|
+
/** Optional className for the toast item/content (headless). */
|
|
51
|
+
className?: string;
|
|
52
|
+
/** Optional inline styles. */
|
|
53
|
+
style?: React.CSSProperties;
|
|
54
|
+
/** Unstyled mode hint (headless - styling left to consumer). */
|
|
55
|
+
unstyled?: boolean;
|
|
56
|
+
}
|
|
57
|
+
/** Options for `toast()` / `manager.add()` — optional stable `id` for upsert. */
|
|
58
|
+
type CreateToastInput = Omit<ToastData, 'id' | 'updateKey' | 'limited'> & {
|
|
59
|
+
id?: string;
|
|
60
|
+
};
|
|
61
|
+
/** Base UI `update()` / per-state `promise` payloads. */
|
|
62
|
+
type ToastManagerUpdateOptions<TData = unknown> = Omit<ToastData, 'id' | 'updateKey' | 'limited'> & {
|
|
63
|
+
data?: TData;
|
|
64
|
+
};
|
|
65
|
+
/** Imperative API — `ToastState` singleton or `createToastManager()`. */
|
|
66
|
+
interface IToastManager {
|
|
67
|
+
defaultTimeout: number;
|
|
68
|
+
subscribe: (fn: (toast: ToastData) => void) => () => void;
|
|
69
|
+
subscribeDismiss: (fn: (id: string) => void) => () => void;
|
|
70
|
+
subscribeUpdate: (fn: (id: string, partial: Partial<ToastData>) => void) => () => void;
|
|
71
|
+
create: (data: CreateToastInput) => string;
|
|
72
|
+
update: (id: string, partial: ToastManagerUpdateOptions) => void;
|
|
73
|
+
dismiss: (id: string) => void;
|
|
74
|
+
dismissAll: () => void;
|
|
75
|
+
close: (id?: string) => void;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Toast manager — Base UI–aligned imperative API (`add`, `close`, `update`, `promise`).
|
|
80
|
+
* Use `ToastState` singleton or `createToastManager()` per `<Toast.Provider toastManager={…}>`.
|
|
81
|
+
*/
|
|
82
|
+
|
|
83
|
+
type Subscriber = (toast: ToastData) => void;
|
|
84
|
+
type DismissSubscriber = (id: string) => void;
|
|
85
|
+
type UpdateSubscriber = (id: string, partial: Partial<ToastData>) => void;
|
|
86
|
+
declare class ToastManager implements IToastManager {
|
|
87
|
+
defaultTimeout: number;
|
|
88
|
+
private subscribers;
|
|
89
|
+
private dismissSubscribers;
|
|
90
|
+
private updateSubscribers;
|
|
91
|
+
subscribe(fn: Subscriber): () => void;
|
|
92
|
+
subscribeDismiss(fn: DismissSubscriber): () => void;
|
|
93
|
+
subscribeUpdate(fn: UpdateSubscriber): () => void;
|
|
94
|
+
/** `id` optional — omit for auto id; reuse `id` to upsert (provider bumps `updateKey`). */
|
|
95
|
+
create(data: CreateToastInput): string;
|
|
96
|
+
update(id: string, partial: ToastManagerUpdateOptions): void;
|
|
97
|
+
dismiss(id: string): void;
|
|
98
|
+
dismissAll(): void;
|
|
99
|
+
/** Base UI — `close(id?)` dismisses one or all. */
|
|
100
|
+
close(id?: string): void;
|
|
101
|
+
}
|
|
102
|
+
declare const ToastState: ToastManager;
|
|
103
|
+
declare function createToastManager(options?: {
|
|
104
|
+
timeout?: number;
|
|
105
|
+
}): ToastManager;
|
|
106
|
+
type ToastOptions$1 = Omit<ToastData, 'id' | 'variant' | 'updateKey' | 'limited'>;
|
|
107
|
+
/** Per-state options for `promise()` (string shortcut or full toast fields). */
|
|
108
|
+
type ToastPromiseState = string | Omit<CreateToastInput, 'id' | 'updateKey'>;
|
|
109
|
+
type ToastPromiseMessages<T> = {
|
|
110
|
+
loading: ToastPromiseState;
|
|
111
|
+
success: ToastPromiseState | ((data: T) => ToastPromiseState);
|
|
112
|
+
error: ToastPromiseState | ((err: unknown) => ToastPromiseState);
|
|
113
|
+
/** Optional Sonner-style description fields */
|
|
114
|
+
description?: ToastPromiseState | ((data: T) => ToastPromiseState);
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Track a promise with a persistent loading toast, then success or error.
|
|
118
|
+
* Pass `manager` to target a non-default provider instance.
|
|
119
|
+
*/
|
|
120
|
+
declare function promiseToast<T>(promiseLike: Promise<T>, messages: ToastPromiseMessages<T>, options?: ToastOptions$1, manager?: IToastManager): Promise<T>;
|
|
121
|
+
declare function createToast(options: CreateToastInput): string;
|
|
122
|
+
declare function createToast(title: string, options?: CreateToastInput): string;
|
|
123
|
+
declare const toast: typeof createToast & {
|
|
124
|
+
success: (titleOrOptions: string | CreateToastInput, options?: CreateToastInput) => string;
|
|
125
|
+
error: (titleOrOptions: string | CreateToastInput, options?: CreateToastInput) => string;
|
|
126
|
+
warning: (titleOrOptions: string | CreateToastInput, options?: CreateToastInput) => string;
|
|
127
|
+
info: (titleOrOptions: string | CreateToastInput, options?: CreateToastInput) => string;
|
|
128
|
+
loading: (titleOrOptions: string | CreateToastInput, options?: CreateToastInput) => string;
|
|
129
|
+
dismiss: (id?: string) => void;
|
|
130
|
+
dismissAll: () => void;
|
|
131
|
+
close: (id?: string) => void;
|
|
132
|
+
promise: typeof promiseToast;
|
|
133
|
+
message: typeof createToast;
|
|
134
|
+
custom: (renderFn: (id: string) => React.ReactNode, options?: Omit<CreateToastInput, "render">) => string;
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
type ToastProviderProps = {
|
|
138
|
+
children: React$1.ReactNode;
|
|
139
|
+
customRootClass?: string;
|
|
140
|
+
position?: ToastPosition;
|
|
141
|
+
expand?: boolean;
|
|
142
|
+
gap?: number;
|
|
143
|
+
/** @deprecated Prefer Base UI name `limit`. */
|
|
144
|
+
maxToasts?: number;
|
|
145
|
+
/** Base UI — max visible stack size (default `3`). */
|
|
146
|
+
limit?: number;
|
|
147
|
+
/** Base UI — default auto-dismiss ms (default `5000`). */
|
|
148
|
+
timeout?: number;
|
|
149
|
+
/** Sonner alias */
|
|
150
|
+
duration?: number;
|
|
151
|
+
/** Base UI — isolate queue / use outside React tree (pair with `createToastManager()`). */
|
|
152
|
+
toastManager?: ToastManager;
|
|
153
|
+
/** Optional className passthrough for viewport region if needed (headless) */
|
|
154
|
+
className?: string;
|
|
155
|
+
/** Optional inline styles for the default viewport. */
|
|
156
|
+
style?: React$1.CSSProperties;
|
|
157
|
+
/** Sonner-like props (headless passthroughs where applicable) */
|
|
158
|
+
richColors?: boolean;
|
|
159
|
+
closeButton?: boolean;
|
|
160
|
+
offset?: number | string;
|
|
161
|
+
mobileOffset?: number | string | {
|
|
162
|
+
top?: number | string;
|
|
163
|
+
bottom?: number | string;
|
|
164
|
+
left?: number | string;
|
|
165
|
+
right?: number | string;
|
|
166
|
+
};
|
|
167
|
+
theme?: 'light' | 'dark' | 'system';
|
|
168
|
+
dir?: 'ltr' | 'rtl' | 'auto';
|
|
169
|
+
swipeDirections?: string[];
|
|
170
|
+
visibleToasts?: number;
|
|
171
|
+
toastOptions?: Record<string, any>;
|
|
172
|
+
/** Sonner prop aliases/completeness */
|
|
173
|
+
invert?: boolean;
|
|
174
|
+
pauseWhenPageIsHidden?: boolean;
|
|
175
|
+
icons?: Record<string, React$1.ReactNode>;
|
|
176
|
+
loadingIcon?: React$1.ReactNode;
|
|
177
|
+
rtl?: boolean;
|
|
178
|
+
hotkey?: string[];
|
|
179
|
+
containerAriaLabel?: string;
|
|
180
|
+
dragThreshold?: number;
|
|
181
|
+
};
|
|
182
|
+
declare const ToastProvider: React$1.FC<ToastProviderProps>;
|
|
183
|
+
|
|
184
|
+
type ToastPortalProps = {
|
|
185
|
+
children: React$1.ReactNode;
|
|
186
|
+
/** Override the portal container. Defaults to the Theme portal root, then document.body. */
|
|
187
|
+
container?: HTMLElement | null;
|
|
188
|
+
};
|
|
189
|
+
declare const ToastPortal: React$1.FC<ToastPortalProps>;
|
|
190
|
+
|
|
191
|
+
type ToastViewportProps = {
|
|
192
|
+
children: React$1.ReactNode;
|
|
193
|
+
className?: string;
|
|
194
|
+
style?: React$1.CSSProperties;
|
|
195
|
+
};
|
|
196
|
+
declare const ToastViewport: React$1.FC<ToastViewportProps>;
|
|
197
|
+
|
|
198
|
+
type ToastRootProps = {
|
|
199
|
+
toast: ToastData;
|
|
200
|
+
className?: string;
|
|
201
|
+
children: React$1.ReactNode;
|
|
202
|
+
};
|
|
203
|
+
declare const ToastRoot: React$1.FC<ToastRootProps>;
|
|
204
|
+
|
|
205
|
+
type ToastContentProps = React$1.HTMLAttributes<HTMLDivElement>;
|
|
206
|
+
declare const ToastContent: React$1.ForwardRefExoticComponent<ToastContentProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
207
|
+
|
|
208
|
+
type ToastTitleProps = React$1.HTMLAttributes<HTMLHeadingElement>;
|
|
209
|
+
/** Base UI renders a heading — use `h2` for landmark semantics. */
|
|
210
|
+
declare const ToastTitle: React$1.ForwardRefExoticComponent<ToastTitleProps & React$1.RefAttributes<HTMLHeadingElement>>;
|
|
211
|
+
|
|
212
|
+
type ToastDescriptionProps = React$1.HTMLAttributes<HTMLParagraphElement>;
|
|
213
|
+
declare const ToastDescription: React$1.ForwardRefExoticComponent<ToastDescriptionProps & React$1.RefAttributes<HTMLParagraphElement>>;
|
|
214
|
+
|
|
215
|
+
type ToastCloseProps = React$1.ButtonHTMLAttributes<HTMLButtonElement>;
|
|
216
|
+
declare const ToastClose: React$1.ForwardRefExoticComponent<ToastCloseProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
217
|
+
|
|
218
|
+
type ToastActionProps = React$1.ButtonHTMLAttributes<HTMLButtonElement>;
|
|
219
|
+
/**
|
|
220
|
+
* Base UI–style action button — merges `toast.actionProps` then your props.
|
|
221
|
+
*/
|
|
222
|
+
declare const ToastAction: React$1.ForwardRefExoticComponent<ToastActionProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
223
|
+
|
|
224
|
+
type ToastOptions = Omit<ToastData, 'id' | 'variant' | 'updateKey' | 'limited'>;
|
|
225
|
+
/** Mirrors [Base UI `useToastManager`](https://base-ui.com/react/components/toast#useToastManager). */
|
|
226
|
+
interface ToastManagerReturn {
|
|
227
|
+
toasts: ToastData[];
|
|
228
|
+
add: (data: CreateToastInput) => string;
|
|
229
|
+
/** Base UI */
|
|
230
|
+
close: (toastId?: string) => void;
|
|
231
|
+
/** Base UI */
|
|
232
|
+
update: <TData = unknown>(toastId: string, options: ToastManagerUpdateOptions<TData>) => void;
|
|
233
|
+
promise: <T>(p: Promise<T>, messages: ToastPromiseMessages<T>, options?: ToastOptions) => Promise<T>;
|
|
234
|
+
/** @deprecated Use `close(id)`. */
|
|
235
|
+
dismiss: (id?: string) => void;
|
|
236
|
+
/** @deprecated Use `close()` with no args. */
|
|
237
|
+
dismissAll: () => void;
|
|
238
|
+
/** Sonner-like helpers */
|
|
239
|
+
success?: (data: CreateToastInput | string, options?: CreateToastInput) => string;
|
|
240
|
+
error?: (data: CreateToastInput | string, options?: CreateToastInput) => string;
|
|
241
|
+
warning?: (data: CreateToastInput | string, options?: CreateToastInput) => string;
|
|
242
|
+
info?: (data: CreateToastInput | string, options?: CreateToastInput) => string;
|
|
243
|
+
loading?: (data: CreateToastInput | string, options?: CreateToastInput) => string;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Must be called inside a `<Toast.Provider>`.
|
|
247
|
+
* Returns the live toast list and the same imperative API as Base UI’s manager.
|
|
248
|
+
*/
|
|
249
|
+
declare function useToastManager(): ToastManagerReturn;
|
|
250
|
+
|
|
251
|
+
type ToasterProps = Omit<ToastProviderProps, 'children'> & {
|
|
252
|
+
children?: React$1.ReactNode;
|
|
253
|
+
className?: string;
|
|
254
|
+
style?: React$1.CSSProperties;
|
|
255
|
+
containerClassName?: string;
|
|
256
|
+
containerStyle?: React$1.CSSProperties;
|
|
257
|
+
};
|
|
258
|
+
/**
|
|
259
|
+
* Sonner-compatible Toaster wrapper.
|
|
260
|
+
* Renders a default viewport and portal. Can be used as a drop-in replacement.
|
|
261
|
+
*/
|
|
262
|
+
declare function Toaster({ children, className, style, containerClassName, containerStyle, ...providerProps }: ToasterProps): react_jsx_runtime.JSX.Element;
|
|
263
|
+
declare namespace Toaster {
|
|
264
|
+
var displayName: string;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Toast — headless, composable notification system.
|
|
269
|
+
*
|
|
270
|
+
* ## Anatomy
|
|
271
|
+
* ```tsx
|
|
272
|
+
* <Toast.Provider> // wrap your app — owns state & stacking engine
|
|
273
|
+
* <Toast.Portal> // portals into the theme root
|
|
274
|
+
* <Toast.Viewport> // the <ol>, handles hover expand
|
|
275
|
+
* {toasts.map(t => (
|
|
276
|
+
* <Toast.Root key={t.id} toast={t}> // <li>, owns timer & swipe
|
|
277
|
+
* <Toast.Content> // card wrapper, clips height
|
|
278
|
+
* <Toast.Title>{t.title}</Toast.Title>
|
|
279
|
+
* <Toast.Description>{t.description}</Toast.Description>
|
|
280
|
+
* // optional — merges toast.actionProps
|
|
281
|
+
* <Toast.Action />
|
|
282
|
+
* <Toast.Close />
|
|
283
|
+
* </Toast.Content>
|
|
284
|
+
* </Toast.Root>
|
|
285
|
+
* ))}
|
|
286
|
+
* </Toast.Viewport>
|
|
287
|
+
* </Toast.Portal>
|
|
288
|
+
* </Toast.Provider>
|
|
289
|
+
* ```
|
|
290
|
+
*
|
|
291
|
+
* ## Adding toasts (Base UI–aligned)
|
|
292
|
+
* ```tsx
|
|
293
|
+
* const manager = Toast.useToastManager();
|
|
294
|
+
* manager.add({ title: 'Saved!', variant: 'success', timeout: 4000 });
|
|
295
|
+
* manager.close(id); // one toast
|
|
296
|
+
* manager.close(); // all
|
|
297
|
+
* manager.update(id, { title: 'Updated' });
|
|
298
|
+
* manager.promise(fetch('/api'), { loading: '…', success: (d) => 'Done', error: (e) => 'Failed' });
|
|
299
|
+
* manager.add({ id: 'save-status', title: 'Draft saved' }); // same id → upsert + `updateKey` / pulse
|
|
300
|
+
* ```
|
|
301
|
+
*
|
|
302
|
+
* Optional isolated queue: `const tm = createToastManager({ timeout: 5000 });` then
|
|
303
|
+
* `<Toast.Provider toastManager={tm} limit={3}>`.
|
|
304
|
+
*/
|
|
305
|
+
|
|
306
|
+
interface ToastNamespace {
|
|
307
|
+
Provider: typeof ToastProvider;
|
|
308
|
+
Portal: typeof ToastPortal;
|
|
309
|
+
Viewport: typeof ToastViewport;
|
|
310
|
+
Root: typeof ToastRoot;
|
|
311
|
+
Content: typeof ToastContent;
|
|
312
|
+
Title: typeof ToastTitle;
|
|
313
|
+
Description: typeof ToastDescription;
|
|
314
|
+
Action: typeof ToastAction;
|
|
315
|
+
Close: typeof ToastClose;
|
|
316
|
+
useToastManager: typeof useToastManager;
|
|
317
|
+
Toaster: typeof Toaster;
|
|
318
|
+
}
|
|
319
|
+
declare const Toast: ToastNamespace;
|
|
320
|
+
|
|
321
|
+
export { ToastManager, ToastState, Toaster, createToastManager, Toast as default, promiseToast, toast, useToastManager };
|
|
322
|
+
export type { CreateToastInput, IToastManager, ToastActionProps, ToastCloseProps, ToastContentProps, ToastData, ToastDescriptionProps, ToastManagerReturn, ToastManagerUpdateOptions, ToastPortalProps, ToastPosition, ToastPromiseMessages, ToastPromiseState, ToastProviderProps, ToastRootProps, ToastTitleProps, ToastViewportProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use client';import{jsx as e,Fragment as t,jsxs as s}from"react/jsx-runtime";import i,{createContext as o,useMemo as r,useEffect as n,useState as a,useCallback as d,useContext as c,useRef as l}from"react";import{u}from"./useComponentClass-QwNivz0h.js";import{createPortal as m}from"react-dom";import{T as p}from"./ThemeContext-Sm-iNANd.js";import{c as f}from"./clsx-BaVHROc5.js";const h=o({rootClass:"",position:"bottom-right",expand:!1,gap:14,maxToasts:3,defaultToastTimeout:4e3,toastManager:void 0,isHovered:!1,setIsHovered:()=>{},heights:new Map,updateHeight:()=>{},unlinkStackHeight:()=>{},removeToast:()=>{},toasts:[],visibleToasts:[],viewportClassName:void 0,viewportStyle:void 0,containerAriaLabel:"Notifications",offset:void 0,mobileOffset:void 0,theme:void 0,dir:void 0,richColors:!1,invert:!1,pauseWhenPageIsHidden:!0,closeButton:!1,icons:void 0,loadingIcon:void 0,swipeDirections:void 0,dragThreshold:void 0}),v=o(null);let b=0;class g{constructor(){this.defaultTimeout=4e3,this.subscribers=new Set,this.dismissSubscribers=new Set,this.updateSubscribers=new Set}subscribe(e){return this.subscribers.add(e),()=>this.subscribers.delete(e)}subscribeDismiss(e){return this.dismissSubscribers.add(e),()=>this.dismissSubscribers.delete(e)}subscribeUpdate(e){return this.updateSubscribers.add(e),()=>this.updateSubscribers.delete(e)}create(e){const{id:t,timeout:s,duration:i,...o}=e,r=t??`toast-${++b}-${Math.random().toString(36).slice(2,7)}`,n={...o,id:r,duration:i??s??this.defaultTimeout};return this.subscribers.forEach((e=>e(n))),r}update(e,t){const s=function(e){const{timeout:t,...s}=e;return void 0!==t?{...s,duration:t,timeout:t}:s}(t);this.updateSubscribers.forEach((t=>t(e,s)))}dismiss(e){this.dismissSubscribers.forEach((t=>t(e)))}dismissAll(){this.dismissSubscribers.forEach((e=>e("__all__")))}close(e){void 0===e?this.dismissAll():this.dismiss(e)}}const y=new g;function w(e){const t=new g;return void 0!==e?.timeout&&(t.defaultTimeout=e.timeout),t}function T(e){return"string"==typeof e?{title:e}:e}function x(e,t,s,i=y){const o=T(t.loading),r=i.create({persistent:!0,variant:"default",...s,...o});return e.then((e=>{i.dismiss(r);const o=function(e,t){return T("function"==typeof e?e(t):e)}(t.success,e);i.create({variant:"success",...s,...o})})).catch((e=>{i.dismiss(r);const o=function(e,t){return T("function"==typeof e?e(t):e)}(t.error,e);i.create({variant:"error",...s,...o})})),e}function N(e,t){return"string"==typeof e?y.create({title:e,...t}):y.create(e)}function C(e){return(t,s)=>"string"==typeof t?y.create({title:t,variant:e,...s}):y.create({variant:e,...t})}const A=Object.assign(N,{success:C("success"),error:C("error"),warning:C("warning"),info:C("info"),loading:C("loading"),dismiss:e=>void 0===e?y.dismissAll():y.dismiss(e),dismissAll:()=>y.dismissAll(),close:e=>y.close(e),promise:x,message:N,custom:(e,t)=>y.create({...t,render:({id:t})=>e(t)})}),M=({children:t,customRootClass:s="",position:i="bottom-right",expand:o=!1,gap:c=14,maxToasts:l,limit:m,timeout:p,duration:f,toastManager:v,className:b,style:g,richColors:w,closeButton:T,offset:x,mobileOffset:N,theme:C,dir:A,swipeDirections:M,visibleToasts:S,toastOptions:H,invert:P,pauseWhenPageIsHidden:D=!0,icons:$,loadingIcon:I,rtl:k,hotkey:R,containerAriaLabel:_,dragThreshold:j})=>{const E=m??l??S??3,K=r((()=>v??y),[v]),B=p??f??4e3;n((()=>{K.defaultTimeout=B}),[K,B]);const L=u(s,"Toast"),[O,F]=a([]),[W,U]=a(!1),[q,z]=a(new Map);n((()=>{const e=K.subscribe((e=>{F((t=>{const s={...H,...e},i=t.findIndex((t=>t.id===e.id));if(-1!==i){const e=t[i],o=[...t];return o[i]={...s,updateKey:(e.updateKey??0)+1},o}return[{...s,updateKey:0},...t].slice(0,2*E)}))})),t=K.subscribeDismiss((e=>{"__all__"===e&&F([])})),s=K.subscribeUpdate(((e,t)=>{F((s=>s.map((s=>s.id===e?{...s,...t}:s))))}));return()=>{e(),t(),s()}}),[K,E,H]);const V=d((e=>{F((t=>{const s=t.find((t=>t.id===e));return s?.onRemove?.(),t.filter((t=>t.id!==e))})),z((t=>{const s=new Map(t);return s.delete(e),s}))}),[]),Y=d(((e,t)=>{z((s=>{if(s.get(e)===t)return s;const i=new Map(s);return i.set(e,t),i}))}),[]),G=d((e=>{z((t=>{if(!t.has(e))return t;const s=new Map(t);return s.delete(e),s}))}),[]),J=O.slice(0,E);return e(h.Provider,{value:{rootClass:L,position:i,expand:o,gap:c,maxToasts:E,defaultToastTimeout:B,toastManager:K,isHovered:W,setIsHovered:U,heights:q,updateHeight:Y,unlinkStackHeight:G,removeToast:V,toasts:O,visibleToasts:J,viewportClassName:b,viewportStyle:g,containerAriaLabel:_??"Notifications",offset:x,mobileOffset:N,theme:C,dir:k?"rtl":A,richColors:w??!1,invert:P??!1,pauseWhenPageIsHidden:D,closeButton:T??!1,icons:$,loadingIcon:I,swipeDirections:M,dragThreshold:j},children:t})};M.displayName="ToastProvider";const S=({children:e,container:t})=>{const s=c(p),[i,o]=a(!1);if(n((()=>{o(!0)}),[]),!i)return null;const r=t??s?.portalRootRef.current??document.body;return m(e,r)};function H(e){if(void 0!==e)return"number"==typeof e?`${e}px`:e}S.displayName="ToastPortal";const P=({children:t,className:s,style:i})=>{const{rootClass:o,position:r,expand:n,isHovered:a,setIsHovered:d,heights:u,gap:m,visibleToasts:p,viewportClassName:v,viewportStyle:b,containerAriaLabel:g,offset:y,mobileOffset:w,theme:T,dir:x,richColors:N,invert:C}=c(h),A=l(null),M=n||a,S=u.get(p[0]?.id)??0,P=p[1]?u.get(p[1].id)??0:0,D=S>0?S:P,$=M?p.reduce(((e,t)=>e+(u.get(t.id)??0)),0)+Math.max(0,p.length-1)*m:D+m*Math.max(0,p.length-1);return e("ol",{ref:A,role:"region","aria-label":g,tabIndex:-1,"data-position":r,"data-expanded":M?"":void 0,"data-theme":T,"data-rich-colors":N?"":void 0,"data-invert":C?"":void 0,dir:x,className:f(o&&`${o}-viewport`,v,s),style:{...b,"--viewport-height":`${$}px`,"--toast-frontmost-height":`${D}px`,"--toast-offset":H(y),"--toast-mobile-offset":H("object"==typeof w?void 0:w),"--toast-mobile-offset-top":H("object"==typeof w?w.top:void 0),"--toast-mobile-offset-bottom":H("object"==typeof w?w.bottom:void 0),"--toast-mobile-offset-left":H("object"==typeof w?w.left:void 0),"--toast-mobile-offset-right":H("object"==typeof w?w.right:void 0),...i},onMouseEnter:()=>d(!0),onMouseLeave:()=>d(!1),onFocusCapture:()=>d(!0),onBlurCapture:e=>{A.current?.contains(e.relatedTarget)||d(!1)},children:t})};P.displayName="ToastViewport";const D=({toast:t,className:s,children:i})=>{const{rootClass:o,position:r,expand:u,isHovered:m,heights:p,gap:b,toasts:g,visibleToasts:y,updateHeight:w,unlinkStackHeight:T,removeToast:x,defaultToastTimeout:N,toastManager:C,pauseWhenPageIsHidden:A,swipeDirections:M,dragThreshold:S}=c(h),H=l(null),P=l(null),D=t.duration??t.timeout??N,$=l(D),I=l(null),[k,R]=a(!1),[_,j]=a(!0),[E,K]=a(!1),[B,L]=a(!1),O=l(-1),F=l(-1),W=l(!1),U=l({y:0,time:0}),q=l(0),z=r.startsWith("top"),V=u||m,Y=y.findIndex((e=>e.id===t.id)),G=0===Y,J=!G&&!V,Q=g.length>0&&t.id===g[g.length-1]?.id,X=p.get(t.id)??0,Z=p.get(y[0]?.id)??0,ee=y[1]?p.get(y[1].id)??0:0,te=Z>0?Z:ee>0?ee:X;let se=0;for(let e=0;e<Y;e++)se+=(p.get(y[e]?.id)??0)+b;n((()=>{if(E)return;if(!H.current)return;const e=H.current,s=()=>{const s=e.offsetHeight;s>0&&w(t.id,s)};s();const i=new ResizeObserver(s);return i.observe(e),()=>i.disconnect()}),[t.id,w,E]),n((()=>{const e=requestAnimationFrame((()=>{R(!0);const e=setTimeout((()=>j(!1)),420);return()=>clearTimeout(e)}));return()=>cancelAnimationFrame(e)}),[]),n((()=>{const e=O.current,t=F.current,s=y.length,i=-1!==e&&Y>e&&-1!==Y&&!E,o=t>s&&-1!==Y&&!E&&Y===e,r=t>s&&-1!==Y&&!E&&-1!==e&&e>Y;if(O.current=Y,F.current=s,i||o||r){L(!0);const e=requestAnimationFrame((()=>L(!1)));return()=>cancelAnimationFrame(e)}}),[Y,E,y.length]);const[ie,oe]=a((()=>"undefined"!=typeof document&&document.hidden));n((()=>{const e=()=>oe(document.hidden);return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)}),[]);const re=d((()=>{if(!E){if(-1===Y)return t.onClose?.(),t.onDismiss?.(),T(t.id),void x(t.id);T(t.id),K(!0),t.onClose?.(),t.onDismiss?.()}}),[Y,E,t,T,x]),ne=l(re);n((()=>{ne.current=re}),[re]),n((()=>{if(!C)return;return C.subscribeDismiss((e=>{"__all__"!==e&&e===t.id&&ne.current()}))}),[t.id,C]);const ae=d((()=>{P.current&&(clearTimeout(P.current),P.current=null),null!==I.current&&($.current-=Date.now()-I.current,I.current=null)}),[]),de=d((()=>{t.persistent||$.current<=0||(I.current=Date.now(),P.current=setTimeout((()=>ne.current()),$.current))}),[t.persistent]);n((()=>{$.current=t.duration??t.timeout??N,ae()}),[t.updateKey,t.duration,t.timeout,N,ae]),n((()=>((!A||!ie)&&(Q||V)&&!E?de():ae(),ae)),[V,ie,Q,E,A,de,ae,t.updateKey]),n((()=>{if(!E)return;const e=window.setTimeout((()=>x(t.id)),200);return()=>clearTimeout(e)}),[E,x,t.id]);const ce=d((e=>{W.current=!0,U.current={y:e.clientY,time:Date.now()},H.current?.setPointerCapture(e.pointerId),ae()}),[ae]),le=d((e=>{if(!W.current||!H.current)return;const t=e.clientY-U.current.y,s=t*(z?-1:1)<0?.2*t:t;q.current=s,H.current.style.setProperty("--swipe-y",`${s}px`),H.current.setAttribute("data-swiping","")}),[z]),ue=d((e=>{if(!W.current||!H.current)return;W.current=!1,H.current.removeAttribute("data-swiping");const t=q.current,s=Date.now()-U.current.time,i=Math.abs(t)/s,o=z?-1:1,r=z?"up":"down",n=!M?.length||M.includes(r),a=S??40;n&&t*o>0&&(Math.abs(t)>=a||i>.11)?re():(q.current=0,H.current.style.setProperty("--swipe-y","0px"),de())}),[S,z,re,de,M]);if(-1===Y&&!E)return null;const me=t.updateKey&&t.updateKey>0?t.updateKey%2==0?"even":"odd":void 0,pe=V?1:Math.max(.82,1-.05*Y);let fe;if(E)fe=0;else if(V)fe=z?se:-se;else{fe=(z?1:-1)*(14*Y+(1-pe)*(te>0?te:X))}const he={"--swipe-y":"0px","--toast-swipe-movement-x":"0px","--toast-swipe-movement-y":"var(--swipe-y, 0px)","--toast-height":`${X}px`,"--scale":pe,"--y":`${fe}px`,"--toast-lift":z?1:-1,"--front-height":`${Z>0?Z:ee>0?ee:X}px`,"--toast-index":Y,"--toast-offset-y":`${z?se:-se}px`,zIndex:10-Y};return e(v.Provider,{value:{toast:t,index:Y,isExpanded:V,isFront:G,isBehind:J,dismiss:re},children:e("li",{ref:H,role:"status","aria-live":"high"===t.priority?"assertive":"polite","aria-atomic":"true","data-variant":t.variant??void 0,"data-type":t.type??void 0,"data-limited":t.limited?"":void 0,"data-mounted":k?"":void 0,"data-entering":_&&G?"":void 0,"data-restack-skip":B?"":void 0,"data-leaving":E?"":void 0,"data-expanded":V?"":void 0,"data-front":G?"":void 0,"data-behind":J?"":void 0,"data-pulse":me,"data-update-key":t.updateKey??0,"data-toast-id":t.id,className:f(o&&`${o}-item`,t.className,s),style:{...he,...t.style},onPointerDown:ce,onPointerMove:le,onPointerUp:ue,children:t.render?t.render({id:t.id,toast:t,onDismiss:re}):i})})};D.displayName="ToastRoot";const $=i.forwardRef((({className:t,children:s,...i},o)=>{const{rootClass:r}=c(h),n=c(v);return e("div",{ref:o,className:f(r&&`${r}-content`,t),"data-behind":n?.isBehind?"":void 0,"data-expanded":n?.isExpanded?"":void 0,...i,children:s})}));$.displayName="ToastContent";const I=i.forwardRef((({className:t,children:s,...i},o)=>{const{rootClass:r}=c(h);return e("h2",{ref:o,className:f(r&&`${r}-title`,t),...i,children:s})}));I.displayName="ToastTitle";const k=i.forwardRef((({className:t,children:s,...i},o)=>{const{rootClass:r}=c(h);return e("p",{ref:o,className:f(r&&`${r}-description`,t),...i,children:s})}));k.displayName="ToastDescription";const R=i.forwardRef((({className:t,children:s,onClick:i,...o},r)=>{const{rootClass:n}=c(h),a=c(v);return e("button",{ref:r,type:"button","aria-label":"Close notification",className:f(n&&`${n}-close`,t),onClick:e=>{i?.(e),a?.dismiss()},...o,children:s??"×"})}));R.displayName="ToastClose";const _=i.forwardRef((({className:t,children:s,type:i="button",...o},r)=>{const{rootClass:n}=c(h),a=c(v),d=a?.toast.actionProps;return e("button",{ref:r,type:i,className:f(n&&`${n}-action`,t),...d,...o,children:s??d?.children})}));function j(){const e=c(h),t=e.toastManager??y,s=e=>(s,i)=>"string"==typeof s?t.create({title:s,variant:e,...i}):t.create({variant:e,...s});return{toasts:[...e.toasts].reverse(),add:(e,s)=>"string"==typeof e?t.create({title:e,...s}):t.create(e),close:e=>t.close(e),update:(e,s)=>t.update(e,s),promise:(e,s,i)=>x(e,s,i,t),dismiss:e=>void 0===e?t.dismissAll():t.dismiss(e),dismissAll:()=>t.dismissAll(),success:s("success"),error:s("error"),warning:s("warning"),info:s("info"),loading:s("loading")}}function E(){const{toasts:o}=j(),{closeButton:r,icons:n,loadingIcon:a}=i.useContext(h);return e(t,{children:o.map((t=>e(D,{toast:t,children:s($,{children:[t.icon??("loading"===t.type?a:void 0)??n?.[t.variant??t.type??""],e(I,{children:t.title}),t.description&&e(k,{children:t.description}),t.actionProps&&e(_,{}),r&&e(R,{})]})},t.id)))})}function K({children:t,className:s,style:i,containerClassName:o,containerStyle:r,...n}){return e(M,{...n,children:e(S,{children:e("div",{className:o,style:r,children:e(P,{className:s,style:i,children:t??e(E,{})})})})})}_.displayName="ToastAction",K.displayName="Toaster";const B={Provider:M,Portal:S,Viewport:P,Root:D,Content:$,Title:I,Description:k,Action:_,Close:R,useToastManager:j,Toaster:K};export{g as ToastManager,y as ToastState,K as Toaster,w as createToastManager,B as default,x as promiseToast,A as toast,j as useToastManager};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
'use client';import{jsx as s}from"react/jsx-runtime";import{forwardRef as e}from"react";import{c as
|
|
1
|
+
'use client';import{jsx as s}from"react/jsx-runtime";import{forwardRef as e}from"react";import{c as o}from"./clsx-BaVHROc5.js";import{u as r}from"./useComponentClass-QwNivz0h.js";import{u as a}from"./index-wRElCyvx.js";import{T as t}from"./index-C09ZQH_q.js";import"./ThemeContext-Sm-iNANd.js";import"./index-CfC8-kd8.js";import"./index-XF8itt-H.js";import"./mergeProps-0RucjqeH.js";import"./index-CXzybYmm.js";import"./keyboard-BKF7hXqL.js";const d="Toggle",i=e((({defaultPressed:e=!1,customRootClass:i="",children:m,className:n="",color:p="",pressed:l,onPressedChange:c,asChild:j=!1,...f},x)=>{const[u,C]=a(l,e,c),h=r(i,d),g={};return p&&(g["data-color"]=p),s(t,{ref:x,className:o(h,n),pressed:u,onPressedChange:C,"data-state":u?"on":"off","data-disabled":f.disabled?"":void 0,asChild:j,...f,...g,children:m})}));i.displayName=d;export{i as default};
|