@primereact/headless 11.0.0-rc.4 → 11.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -20
- package/dialog/index.mjs +1 -1
- package/dialog/useDialog.d.ts +12 -12
- package/divider/useDivider.d.ts +1 -1
- package/drawer/useDrawer.d.ts +3 -3
- package/package.json +6 -6
- package/popover/index.mjs +1 -1
- package/sidebar/index.mjs +1 -1
- package/sidebar/useSidebar.d.ts +55 -1
- package/timeline/useTimeline.d.ts +4 -4
- package/toast/useToast.d.ts +1 -1
package/README.md
CHANGED
|
@@ -1,35 +1,41 @@
|
|
|
1
|
-
|
|
1
|
+
[](https://primereact.dev)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
# @primereact/headless
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Behavior-only React hooks. State, keyboard navigation, focus management, selection logic, overlay positioning and ARIA wiring for the full PrimeReact component set, with no markup and no CSS attached.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
```bash
|
|
8
|
+
npm install @primereact/headless
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
Each hook lives in its own subpath and returns prop getters that are spread onto plain elements. Every getter carries `data-scope` and `data-part` markers for CSS to target, plus whatever event handlers, ARIA attributes and state flags the component needs.
|
|
8
14
|
|
|
9
15
|
```tsx
|
|
16
|
+
'use client';
|
|
10
17
|
import { useButton } from '@primereact/headless/button';
|
|
11
18
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
<span {...labelProps} />
|
|
22
|
-
</button>
|
|
23
|
-
);
|
|
19
|
+
export function MyButton({ children, ...props }) {
|
|
20
|
+
const { rootProps } = useButton(props);
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<button {...rootProps} className="rounded-md bg-neutral-900 px-4 py-2 text-sm font-medium text-white">
|
|
24
|
+
{children}
|
|
25
|
+
</button>
|
|
26
|
+
);
|
|
27
|
+
}
|
|
24
28
|
```
|
|
25
29
|
|
|
26
|
-
|
|
30
|
+
Larger components return one getter per element, along with the state and handlers behind them. `useSelect`, for example, exposes `triggerProps`, `popupProps`, `listProps` and `indicatorProps` next to `rootProps`.
|
|
27
31
|
|
|
28
|
-
|
|
32
|
+
The application is wrapped once with `PrimeReactProvider` from `@primereact/core`. No theme or preset is needed.
|
|
29
33
|
|
|
30
|
-
|
|
34
|
+
## Documentation
|
|
31
35
|
|
|
32
|
-
|
|
36
|
+
- [Installation](https://primereact.dev/docs/headless/guides/installation)
|
|
37
|
+
- [Hooks](https://primereact.dev/docs/headless/components/autocomplete)
|
|
38
|
+
- [MCP server](https://www.npmjs.com/package/@primereact/mcp)
|
|
33
39
|
|
|
34
40
|
## License
|
|
35
41
|
|
package/dialog/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{withHeadless as xe}from"@primereact/core/headless";import{useFocusTrap as ke}from"@primereact/headless/focustrap";import{useControlledState as Ce}from"@primereact/hooks/use-controlled-state";import{$dt as F}from"@primeuix/styled";import{blockBodyScroll as
|
|
1
|
+
import{withHeadless as xe}from"@primereact/core/headless";import{useFocusTrap as ke}from"@primereact/headless/focustrap";import{useControlledState as Ce}from"@primereact/hooks/use-controlled-state";import{useEscapeListener as Te}from"@primereact/hooks/use-escape-listener";import{$dt as F}from"@primeuix/styled";import{blockBodyScroll as Me,focus as he,toElement as d,unblockBodyScroll as ve}from"@primeuix/utils/dom";import{ZIndex as E}from"@primeuix/utils/zindex";import*as t from"react";var V={open:void 0,defaultOpen:void 0,draggable:!1,modal:!0,dismissable:!0,closeOnEscape:!0,blockScroll:!0,keepInViewport:!0,minX:0,minY:0,trapped:!0,baseZIndex:0,autoZIndex:!0,appendTo:"body",position:"center",fullScreen:!1,scrollBehavior:"inside",onOpenChange:void 0,onExitComplete:void 0};var Ye=xe({name:"useDialog",defaultProps:V,setup:({props:e,id:s,$primereact:v})=>{let[o,P]=Ce({value:e.open,defaultValue:e.defaultOpen??!1,onChange:e.onOpenChange}),[f,y]=t.useState(e.fullScreen??!1),[H,N]=t.useState(null),[m,_]=t.useState(null),[i,W]=t.useState(null),u=t.useRef(null),x=t.useRef(null),k=t.useRef(null),L=t.useRef(null),w=t.useRef(null),S=t.useRef(null),R=t.useRef(null),C=t.useRef(null),D=ke({trapped:!!e.trapped&&!!H,autoFocus:!0});t.useEffect(()=>{y(e.fullScreen??!1)},[e.fullScreen]);let z=t.useCallback(n=>{let a=d(n)??null;a!==u.current&&(u.current=a,D.containerRef.current=a,N(a))},[]),I=t.useCallback(n=>{let a=d(n)??null;a!==x.current&&(x.current=a,_(a))},[]),B=t.useCallback(n=>{let a=d(n)??null;a!==k.current&&(k.current=a,W(a))},[]),j=t.useCallback(n=>{let a=d(n)??null;a!==w.current&&(w.current=a)},[]),q=t.useCallback(n=>{let a=d(n)??null;a!==S.current&&(S.current=a)},[]),G=t.useCallback(n=>{L.current=d(n)??null},[]);function X(){P([!o,{originalEvent:void 0,value:!o}])}function J(){P([!0,{originalEvent:void 0,value:!0}])}function p(){P([!1,{originalEvent:void 0,value:!1}])}function Y(){y(n=>!n)}let K=t.useCallback(()=>{},[]),Q=t.useCallback(()=>{e.onExitComplete?.()},[e.onExitComplete]);t.useEffect(()=>{if(o)R.current=document.activeElement;else if(R.current){let n=R.current,a=n.isConnected&&n!==document.body?n:L.current;a&&he(a,{preventScroll:!0}),R.current=null}},[o]),Te({id:s,open:o,closeOnEscape:e.closeOnEscape,onEscape:()=>p()});let $=t.useCallback(n=>{C.current=n.target},[]),ee=t.useCallback(()=>{e.dismissable&&k.current===C.current&&p(),C.current=null},[e.dismissable]),T=t.useRef(null),te=t.useCallback(n=>{T.current=n.target},[]),ne=t.useCallback(()=>{e.dismissable&&x.current===T.current&&p(),T.current=null},[e.dismissable]),r=t.useRef({dragging:!1,startX:0,startY:0,dx:0,dy:0}),ae=t.useCallback(n=>{if(!e.draggable||f||e.scrollBehavior==="outside")return;let a=n.target;if(a.closest('[data-part="close"]')||a.closest('[data-part="maximizable"]'))return;let l=u.current;l&&(r.current.dragging=!0,r.current.startX=n.clientX-r.current.dx,r.current.startY=n.clientY-r.current.dy,l.setPointerCapture(n.pointerId),l.setAttribute("data-dragging",""),l.style.setProperty("user-select","none"))},[e.draggable,f]),oe=t.useCallback(n=>{if(!r.current.dragging)return;let a=u.current;if(!a)return;let l=n.clientX-r.current.startX,g=n.clientY-r.current.startY;if(e.keepInViewport){let c=a.getBoundingClientRect(),O=window.innerWidth,Z=window.innerHeight,M=r.current.dx,h=r.current.dy,U=c.left+(l-M),A=c.top+(g-h);U<(e.minX??0)&&(l=M-(c.left-(e.minX??0))),A<(e.minY??0)&&(g=h-(c.top-(e.minY??0))),U+c.width>O&&(l=M+(O-c.left-c.width)),A+c.height>Z&&(g=h+(Z-c.top-c.height))}r.current.dx=l,r.current.dy=g,a.style.setProperty("--px-drag-x",l+"px"),a.style.setProperty("--px-drag-y",g+"px")},[e.keepInViewport,e.minX,e.minY]),re=t.useCallback(()=>{r.current.dragging&&(r.current.dragging=!1,u.current?.removeAttribute("data-dragging"),u.current?.style.removeProperty("user-select"))},[]);t.useEffect(()=>{o||(r.current={dragging:!1,startX:0,startY:0,dx:0,dy:0})},[o]),t.useEffect(()=>{if(!(!o||!e.blockScroll))return Me({variableName:F("scrollbar.width").name}),()=>{ve({variableName:F("scrollbar.width").name})}},[o,e.blockScroll]),t.useEffect(()=>{if(m){if(e.autoZIndex){let n=(e.baseZIndex??0)+(v.config?.zIndex?.modal??1100);i&&E.set("modal",i,n),E.set("modal",m,n)}return()=>{e.autoZIndex&&(i&&E.clear(i),E.clear(m))}}},[m,i,e.autoZIndex,e.baseZIndex,v.config?.zIndex?.modal]);let b=f?{"data-maximized":""}:{},le={id:s,"data-scope":"dialog","data-part":"root",...o?{"data-open":""}:{"data-closed":""},...b},ce=e.modal!==!1?{"data-modal":""}:{},se={"data-scope":"dialog","data-part":"positioner","data-position":e.position,"data-scroll-behavior":e.scrollBehavior,...o?{"data-open":""}:{"data-closed":""},...b,...ce,onPointerDown:te,onPointerUp:ne,ref:I},ie={type:"button","data-scope":"dialog","data-part":"trigger","aria-haspopup":"dialog","aria-expanded":o,"aria-controls":s,...o?{"data-popup-open":""}:{},onClick:X,ref:G},ue={"data-scope":"dialog","data-part":"portal"},de={"data-scope":"dialog","data-part":"backdrop",...o?{"data-open":""}:{"data-closed":""},onPointerDown:$,onPointerUp:ee,ref:B},fe={id:s,role:"dialog","aria-labelledby":s+"_header",tabIndex:-1,"data-scope":"dialog","data-part":"popup","data-position":e.position,...o?{"data-open":""}:{"data-closed":""},...b,...e.draggable?{"data-draggable":""}:{},onPointerMove:oe,onPointerUp:re,ref:z},me={"data-scope":"dialog","data-part":"header",id:s+"_header",...e.draggable?{style:{cursor:"move"}}:{},onPointerDown:ae},pe={"data-scope":"dialog","data-part":"header-actions"},ge={"data-scope":"dialog","data-part":"title"},Re={"data-scope":"dialog","data-part":"maximizable",...f?{"data-maximized":""}:{"data-minimized":""},ref:q,onClick:Y},be={"data-scope":"dialog","data-part":"close",ref:j,onClick:p},Ee={"data-scope":"dialog","data-part":"content",...b},Pe={"data-scope":"dialog","data-part":"footer"};return{state:{open:o,maximized:f,trapped:!!e.trapped,popupElement:H,positionerElement:m,backdropElement:i},focusTrap:D,setPopupRef:z,setPositionerRef:I,setBackdropRef:B,rootProps:le,positionerProps:se,triggerProps:ie,portalProps:ue,backdropProps:de,popupProps:fe,headerProps:me,headerActionsProps:pe,titleProps:ge,maximizableProps:Re,closeProps:be,contentProps:Ee,footerProps:Pe,toggle:X,open:J,close:p,toggleMaximized:Y,onOpenComplete:K,onCloseComplete:Q}}});export{V as defaultProps,Ye as useDialog};
|
package/dialog/useDialog.d.ts
CHANGED
|
@@ -62,7 +62,7 @@ export declare const useDialog: (inProps?: unknown) => import("@primereact/types
|
|
|
62
62
|
'data-open': "";
|
|
63
63
|
'data-scope': string;
|
|
64
64
|
'data-part': string;
|
|
65
|
-
'data-position': "center" | "top" | "left" | "
|
|
65
|
+
'data-position': "center" | "top" | "left" | "bottom" | "right" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
|
|
66
66
|
'data-scroll-behavior': "inside" | "outside" | undefined;
|
|
67
67
|
} | {
|
|
68
68
|
onPointerDown: (event: React.PointerEvent) => void;
|
|
@@ -73,7 +73,7 @@ export declare const useDialog: (inProps?: unknown) => import("@primereact/types
|
|
|
73
73
|
'data-open': "";
|
|
74
74
|
'data-scope': string;
|
|
75
75
|
'data-part': string;
|
|
76
|
-
'data-position': "center" | "top" | "left" | "
|
|
76
|
+
'data-position': "center" | "top" | "left" | "bottom" | "right" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
|
|
77
77
|
'data-scroll-behavior': "inside" | "outside" | undefined;
|
|
78
78
|
} | {
|
|
79
79
|
onPointerDown: (event: React.PointerEvent) => void;
|
|
@@ -84,7 +84,7 @@ export declare const useDialog: (inProps?: unknown) => import("@primereact/types
|
|
|
84
84
|
'data-open': "";
|
|
85
85
|
'data-scope': string;
|
|
86
86
|
'data-part': string;
|
|
87
|
-
'data-position': "center" | "top" | "left" | "
|
|
87
|
+
'data-position': "center" | "top" | "left" | "bottom" | "right" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
|
|
88
88
|
'data-scroll-behavior': "inside" | "outside" | undefined;
|
|
89
89
|
} | {
|
|
90
90
|
onPointerDown: (event: React.PointerEvent) => void;
|
|
@@ -95,7 +95,7 @@ export declare const useDialog: (inProps?: unknown) => import("@primereact/types
|
|
|
95
95
|
'data-open': "";
|
|
96
96
|
'data-scope': string;
|
|
97
97
|
'data-part': string;
|
|
98
|
-
'data-position': "center" | "top" | "left" | "
|
|
98
|
+
'data-position': "center" | "top" | "left" | "bottom" | "right" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
|
|
99
99
|
'data-scroll-behavior': "inside" | "outside" | undefined;
|
|
100
100
|
} | {
|
|
101
101
|
onPointerDown: (event: React.PointerEvent) => void;
|
|
@@ -106,7 +106,7 @@ export declare const useDialog: (inProps?: unknown) => import("@primereact/types
|
|
|
106
106
|
'data-closed': "";
|
|
107
107
|
'data-scope': string;
|
|
108
108
|
'data-part': string;
|
|
109
|
-
'data-position': "center" | "top" | "left" | "
|
|
109
|
+
'data-position': "center" | "top" | "left" | "bottom" | "right" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
|
|
110
110
|
'data-scroll-behavior': "inside" | "outside" | undefined;
|
|
111
111
|
} | {
|
|
112
112
|
onPointerDown: (event: React.PointerEvent) => void;
|
|
@@ -117,7 +117,7 @@ export declare const useDialog: (inProps?: unknown) => import("@primereact/types
|
|
|
117
117
|
'data-closed': "";
|
|
118
118
|
'data-scope': string;
|
|
119
119
|
'data-part': string;
|
|
120
|
-
'data-position': "center" | "top" | "left" | "
|
|
120
|
+
'data-position': "center" | "top" | "left" | "bottom" | "right" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
|
|
121
121
|
'data-scroll-behavior': "inside" | "outside" | undefined;
|
|
122
122
|
} | {
|
|
123
123
|
onPointerDown: (event: React.PointerEvent) => void;
|
|
@@ -128,7 +128,7 @@ export declare const useDialog: (inProps?: unknown) => import("@primereact/types
|
|
|
128
128
|
'data-closed': "";
|
|
129
129
|
'data-scope': string;
|
|
130
130
|
'data-part': string;
|
|
131
|
-
'data-position': "center" | "top" | "left" | "
|
|
131
|
+
'data-position': "center" | "top" | "left" | "bottom" | "right" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
|
|
132
132
|
'data-scroll-behavior': "inside" | "outside" | undefined;
|
|
133
133
|
} | {
|
|
134
134
|
onPointerDown: (event: React.PointerEvent) => void;
|
|
@@ -139,7 +139,7 @@ export declare const useDialog: (inProps?: unknown) => import("@primereact/types
|
|
|
139
139
|
'data-closed': "";
|
|
140
140
|
'data-scope': string;
|
|
141
141
|
'data-part': string;
|
|
142
|
-
'data-position': "center" | "top" | "left" | "
|
|
142
|
+
'data-position': "center" | "top" | "left" | "bottom" | "right" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
|
|
143
143
|
'data-scroll-behavior': "inside" | "outside" | undefined;
|
|
144
144
|
};
|
|
145
145
|
triggerProps: {
|
|
@@ -185,7 +185,7 @@ export declare const useDialog: (inProps?: unknown) => import("@primereact/types
|
|
|
185
185
|
tabIndex: -1;
|
|
186
186
|
'data-scope': string;
|
|
187
187
|
'data-part': string;
|
|
188
|
-
'data-position': "center" | "top" | "left" | "
|
|
188
|
+
'data-position': "center" | "top" | "left" | "bottom" | "right" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
|
|
189
189
|
} | {
|
|
190
190
|
onPointerMove: (event: React.PointerEvent) => void;
|
|
191
191
|
onPointerUp: () => void;
|
|
@@ -199,7 +199,7 @@ export declare const useDialog: (inProps?: unknown) => import("@primereact/types
|
|
|
199
199
|
tabIndex: -1;
|
|
200
200
|
'data-scope': string;
|
|
201
201
|
'data-part': string;
|
|
202
|
-
'data-position': "center" | "top" | "left" | "
|
|
202
|
+
'data-position': "center" | "top" | "left" | "bottom" | "right" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
|
|
203
203
|
} | {
|
|
204
204
|
onPointerMove: (event: React.PointerEvent) => void;
|
|
205
205
|
onPointerUp: () => void;
|
|
@@ -213,7 +213,7 @@ export declare const useDialog: (inProps?: unknown) => import("@primereact/types
|
|
|
213
213
|
tabIndex: -1;
|
|
214
214
|
'data-scope': string;
|
|
215
215
|
'data-part': string;
|
|
216
|
-
'data-position': "center" | "top" | "left" | "
|
|
216
|
+
'data-position': "center" | "top" | "left" | "bottom" | "right" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
|
|
217
217
|
} | {
|
|
218
218
|
onPointerMove: (event: React.PointerEvent) => void;
|
|
219
219
|
onPointerUp: () => void;
|
|
@@ -227,7 +227,7 @@ export declare const useDialog: (inProps?: unknown) => import("@primereact/types
|
|
|
227
227
|
tabIndex: -1;
|
|
228
228
|
'data-scope': string;
|
|
229
229
|
'data-part': string;
|
|
230
|
-
'data-position': "center" | "top" | "left" | "
|
|
230
|
+
'data-position': "center" | "top" | "left" | "bottom" | "right" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
|
|
231
231
|
};
|
|
232
232
|
headerProps: {
|
|
233
233
|
onPointerDown: (event: React.PointerEvent) => void;
|
package/divider/useDivider.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export declare const useDivider: (inProps?: unknown) => import("@primereact/type
|
|
|
5
5
|
role: "separator";
|
|
6
6
|
'aria-orientation': "horizontal" | "vertical" | undefined;
|
|
7
7
|
'data-orientation': "horizontal" | "vertical" | undefined;
|
|
8
|
-
'data-align': "center" | "top" | "left" | "
|
|
8
|
+
'data-align': "center" | "top" | "left" | "bottom" | "right" | undefined;
|
|
9
9
|
};
|
|
10
10
|
contentProps: {
|
|
11
11
|
'data-scope': string;
|
package/drawer/useDrawer.d.ts
CHANGED
|
@@ -32,13 +32,13 @@ export declare const useDrawer: (inProps?: unknown) => import("@primereact/types
|
|
|
32
32
|
onClick: () => void;
|
|
33
33
|
};
|
|
34
34
|
rootProps: {
|
|
35
|
-
'data-position': "top" | "left" | "
|
|
35
|
+
'data-position': "top" | "left" | "bottom" | "right" | "full" | undefined;
|
|
36
36
|
'data-open': "";
|
|
37
37
|
id: string | undefined;
|
|
38
38
|
'data-scope': string;
|
|
39
39
|
'data-part': string;
|
|
40
40
|
} | {
|
|
41
|
-
'data-position': "top" | "left" | "
|
|
41
|
+
'data-position': "top" | "left" | "bottom" | "right" | "full" | undefined;
|
|
42
42
|
'data-closed': "";
|
|
43
43
|
id: string | undefined;
|
|
44
44
|
'data-scope': string;
|
|
@@ -74,7 +74,7 @@ export declare const useDrawer: (inProps?: unknown) => import("@primereact/types
|
|
|
74
74
|
tabIndex: -1;
|
|
75
75
|
'data-scope': string;
|
|
76
76
|
'data-part': string;
|
|
77
|
-
'data-position': "top" | "left" | "
|
|
77
|
+
'data-position': "top" | "left" | "bottom" | "right" | "full" | undefined;
|
|
78
78
|
};
|
|
79
79
|
close: () => void;
|
|
80
80
|
onOpenStateChange: () => void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@primereact/headless",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.1.0",
|
|
4
4
|
"author": "PrimeTek Informatics",
|
|
5
5
|
"description": "Headless components for PrimeReact.",
|
|
6
6
|
"homepage": "https://primereact.dev",
|
|
@@ -28,11 +28,11 @@
|
|
|
28
28
|
"access": "public"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@primeui/license-manager": "^1.0.0
|
|
32
|
-
"@primeuix/styled": "^1.0.0
|
|
33
|
-
"@primeuix/utils": "^0.8.0
|
|
34
|
-
"@primereact/core": "11.
|
|
35
|
-
"@primereact/hooks": "11.
|
|
31
|
+
"@primeui/license-manager": "^1.0.0",
|
|
32
|
+
"@primeuix/styled": "^1.0.0",
|
|
33
|
+
"@primeuix/utils": "^0.8.0",
|
|
34
|
+
"@primereact/core": "11.1.0",
|
|
35
|
+
"@primereact/hooks": "11.1.0"
|
|
36
36
|
},
|
|
37
37
|
"repository": {},
|
|
38
38
|
"type": "module"
|
package/popover/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{withHeadless as
|
|
1
|
+
import{withHeadless as X}from"@primereact/core/headless";import{OVERLAY_OWNER_ATTR as Z,OVERLAY_OWNER_KEY as ee,OverlayEventBus as F,setOverlayOwner as S}from"@primereact/core/utils";import{useFocusTrap as te}from"@primereact/headless/focustrap";import{useControlledState as ne}from"@primereact/hooks/use-controlled-state";import{useEscapeListener as re}from"@primereact/hooks/use-escape-listener";import{useEventListener as oe}from"@primereact/hooks/use-event-listener";import{focus as L,getFirstFocusableElement as le,toElement as f}from"@primeuix/utils/dom";import*as n from"react";var N={anchor:void 0,defaultOpen:void 0,open:void 0,trapped:!1,autoFocus:!0,closeOnEscape:!0,onOpenChange:void 0,onExitComplete:void 0};var Re=X({name:"usePopover",defaultProps:N,setup:({props:r,id:x})=>{let[o,A,O]=ne({value:r.open,defaultValue:r.defaultOpen,onChange:r.onOpenChange}),[D,h]=n.useState(!!o),[d,p]=n.useState(r.anchor??null),[_,V]=n.useState(null),[m,Y]=n.useState(null),[U,W]=n.useState(null),B={open:o,rendered:D,trapped:!!r.trapped,anchorElement:d,positionerElement:_,popupElement:m,arrowElement:U},l=n.useRef(null),u=n.useRef(null),a=n.useRef(null),E=n.useRef(null),M=n.useRef(null),k=te({trapped:!!r.trapped&&!!m,autoFocus:!1}),H=n.useCallback(e=>{let t=f(e)??null;!t||t===l.current||(l.current=t,p(t||u.current))},[]),I=n.useCallback(e=>{let t=f(e)??null;if(t!==u.current){if(u.current=t,!t){l.current&&!l.current.isConnected&&(l.current=null,p(null));return}l.current||(l.current=t,p(t))}},[]),P=n.useCallback(e=>{let t=f(e)??null;t!==a.current&&(a.current=t,V(t))},[]),b=n.useCallback(e=>{let t=f(e)??null;t!==E.current&&(E.current=t,k.containerRef.current=t,Y(t))},[]),g=n.useCallback(e=>{let t=f(e)??null;t!==M.current&&(M.current=t,W(t))},[]),R=n.useRef(!1);function i(e,t){A([e,{originalEvent:t,value:e}])}let v=e=>{if(!e)return!1;if(a.current?.contains(e)||l.current?.contains(e)||u.current?.contains(e))return!0;let t=e.nodeType===1?e:e.parentElement;for(;t;){let c=t.closest(`[${Z}]`)?.[ee];if(!c?.isConnected)return!1;if(a.current?.contains(c)||l.current?.contains(c)||u.current?.contains(c))return!0;t=c}return!1},C=e=>{if(R.current)return;let t=e.relatedTarget;!t||v(t)||i(!1,e)},K=e=>{i(!o,e.nativeEvent)},$=e=>{i(!1,e.nativeEvent)},j=n.useCallback(()=>{if(r.autoFocus===!1)return;let e=E.current;if(!e)return;let t=document.activeElement,s=l.current||u.current;if(t&&s?.contains(t)&&s!==t)return;R.current=!0;let c=le(e);c?L(c,{preventScroll:!0}):L(e,{preventScroll:!0}),R.current=!1},[r.autoFocus]),q=n.useCallback(()=>{r.onExitComplete?.()},[r.onExitComplete]),T=n.useRef(!1),[w,y]=oe({type:"pointerdown",listener:e=>{let t=e.target;if(!t||!document.documentElement.contains(t)||e.button===2)return;let s=T.current;T.current=!1,!s&&o&&a.current&&!v(t)&&i(!1,e)}});n.useEffect(()=>{if(!o)return;let e=t=>{let s=t?.target??null;v(s)&&(T.current=!0)};return F.on("overlay-click",e),()=>{F.off("overlay-click",e)}},[o]),re({id:x,open:o,closeOnEscape:r.closeOnEscape,onEscape:e=>{i(!1,e),L(l.current||u.current,{preventScroll:!0})}}),n.useEffect(()=>{r.anchor!==void 0&&(l.current=r.anchor,p(r.anchor))},[r.anchor]),n.useEffect(()=>{o&&h(!0)},[o]),n.useEffect(()=>{let e=m;if(e)return S(e,d),()=>{S(e,null)}},[m,d]),n.useEffect(()=>{o?w():y()},[o,w,y]),n.useEffect(()=>{let e=a.current;if(!(!o||!e||r.trapped||O))return e.addEventListener("focusout",C),()=>{e.removeEventListener("focusout",C)}},[o,r.trapped,O,C]);let z={"data-scope":"popover","data-part":"trigger",ref:H,onClick:K,...o?{"data-positioner-open":""}:{}},G={"data-scope":"popover","data-part":"positioner",ref:P},J={"data-scope":"popover","data-part":"arrow",ref:g},Q={"data-scope":"popover","data-part":"popup",ref:b,tabIndex:-1,...o?{"data-open":""}:{}};return{state:B,focusTrap:k,setArrowRef:g,setAnchorRef:H,setAnchorFallbackRef:I,setPopupRef:b,setPositionerRef:P,triggerProps:z,popupProps:Q,closeProps:{"data-scope":"popover","data-part":"close",type:"button",onClick:$},positionerProps:G,arrowProps:J,setOpen:i,setRendered:h,onOpenComplete:j,onCloseComplete:q}}});export{N as defaultProps,Re as usePopover};
|
package/sidebar/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{withHeadless as
|
|
1
|
+
import{withHeadless as J}from"@primereact/core/headless";import{$t as Q}from"@primereact/core/locale";import{useFocusTrap as X}from"@primereact/headless/focustrap";import{useControlledState as Z}from"@primereact/hooks/use-controlled-state";import{$dt as S}from"@primeuix/styled";import{blockBodyScroll as ee,focus as te,unblockBodyScroll as ae}from"@primeuix/utils";import*as u from"react";var R={layout:void 0,id:void 0,side:"left",variant:"sidebar",collapsible:"icon",overlay:!1,open:void 0,defaultOpen:!0,onOpenChange:void 0,openOnHover:!1,hoverOpenDelay:50,hoverCloseDelay:100,closeOnEscape:!0,dismissable:!0,hideOnOutsideClick:!0,width:"16rem",iconWidth:"3rem"};var O="[data-menu-item]",ne=e=>e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true",k=e=>e.hasAttribute("data-content-open")||e.hasAttribute("data-content-closed"),C=e=>e.hasAttribute("data-content-open"),oe=(e,a)=>{let n=e;for(;n&&n!==a;){if(n.getAttribute("aria-hidden")==="true")return!1;let{display:t,visibility:r}=getComputedStyle(n);if(t==="none"||r==="hidden")return!1;n=n.parentElement}return!0},E=(e,a)=>{let n=0,t=e.parentElement;for(;t&&a.contains(t);)t.tagName==="UL"&&n++,t=t.parentElement;return n},re=e=>Array.from(e.querySelectorAll(O)).filter(a=>!ne(a)&&oe(a,e)),se=(e,a)=>{te(a,{preventScroll:!0}),le(a,e)},le=(e,a)=>{let n=e.parentElement;for(;n&&n!==a;){let t=getComputedStyle(n);if(/(auto|scroll|overlay)/.test(t.overflowY)&&n.scrollHeight>n.clientHeight){let i=e.getBoundingClientRect(),d=n.getBoundingClientRect();i.top<d.top?n.scrollTop-=d.top-i.top:i.bottom>d.bottom&&(n.scrollTop+=i.bottom-d.bottom);return}n=n.parentElement}},ie=e=>{let a=e.currentTarget,n=e.target;if(!a||!n?.closest)return;let t=n.closest(O);if(!t||!a.contains(t)||t.hasAttribute("aria-haspopup"))return;let r=re(a),i=r.indexOf(t);if(i===-1)return;let d=b=>{!b||b===t||(e.preventDefault(),se(a,b))};switch(e.code){case"ArrowDown":d(r[i+1]);break;case"ArrowUp":d(r[i-1]);break;case"Home":d(r[0]);break;case"End":d(r[r.length-1]);break;case"ArrowRight":{if(!k(t))break;if(!C(t))e.preventDefault(),t.click();else{let b=r[i+1];b&&E(b,a)>E(t,a)&&d(b)}break}case"ArrowLeft":{if(k(t)&&C(t)){e.preventDefault(),t.click();break}let b=E(t,a)-1;for(let p=i-1;b>=1&&p>=0;p--)if(E(r[p],a)===b){d(r[p]);break}break}default:break}},Se=J({name:"useSidebar",defaultProps:R,setup({props:e}){let[a,n]=Z({value:e.open,defaultValue:e.defaultOpen??!0,onChange:e.onOpenChange}),t=a?"expanded":"collapsed",r=!!e.overlay&&!!a,i=u.useRef(null),d=X({trapped:r,autoFocus:!1}),b=u.useCallback(s=>{i.current=s,d.containerRef.current=s},[]),p={open:!!a,displayState:t},g=s=>{e.collapsible!=="none"&&n([!a,{originalEvent:s,value:!a}])},M=s=>{n([!0,{originalEvent:s,value:!0}])},y=s=>{e.collapsible!=="none"&&n([!1,{originalEvent:s,value:!1}])},o=u.useRef(null),c=()=>{o.current&&(clearTimeout(o.current),o.current=null)},l=u.useCallback(s=>{e.openOnHover&&(c(),o.current=setTimeout(()=>M(s),e.hoverOpenDelay??50))},[e.openOnHover,e.hoverOpenDelay]),v=u.useCallback(s=>{e.openOnHover&&(c(),o.current=setTimeout(()=>y(s),e.hoverCloseDelay??100))},[e.openOnHover,e.hoverCloseDelay]);u.useEffect(()=>c,[]),u.useEffect(()=>{if(r)return ee({variableName:S("scrollbar.width").name}),()=>ae({variableName:S("scrollbar.width").name})},[r]);let h=s=>{r&&s.code==="Escape"&&e.closeOnEscape!==!1&&y(s),ie(s)},m=e.layout?.setSidebar;u.useEffect(()=>{if(!(!m||!e.id))return()=>m(e.id,null)},[m,e.id]),u.useEffect(()=>{!m||!e.id||m(e.id,{toggle:g,collapse:y,open:!!a,state:a?"expanded":"collapsed",overlay:!!e.overlay,hideOnOutsideClick:e.hideOnOutsideClick!==!1})},[m,e.id,a,e.overlay,e.hideOnOutsideClick]);let P=Q("aria.toggleSidebar"),L={ref:b,...e.id?{id:e.id}:void 0,"data-scope":"sidebar","data-part":"root","data-state":t,"data-collapsible":t==="collapsed"?e.collapsible:"","data-collapsible-mode":e.collapsible,"data-variant":e.variant,"data-side":e.side,...e.overlay?{"data-overlay":""}:void 0,...e.overlay?{role:"dialog","aria-modal":!!a||void 0}:void 0,onKeyDown:h,...e.openOnHover?{onPointerEnter:l,onPointerLeave:v}:void 0,style:{"--px-sidebar-width":e.width,"--px-sidebar-width-icon":e.iconWidth}},w={"data-scope":"sidebar","data-part":"spacer","data-state":t,"data-collapsible":t==="collapsed"?e.collapsible:"","data-variant":e.variant,"data-side":e.side,...e.overlay?{"data-overlay":""}:void 0},x={"data-scope":"sidebar","data-part":"aside","data-state":t,"data-collapsible":t==="collapsed"?e.collapsible:"","data-variant":e.variant,"data-side":e.side,...e.overlay?{"data-overlay":""}:void 0},I={"data-scope":"sidebar","data-part":"panel","data-state":t,"data-collapsible":t==="collapsed"?e.collapsible:"","data-variant":e.variant,"data-side":e.side,...e.overlay?{"data-overlay":""}:void 0},D={"data-scope":"sidebar","data-part":"content","data-state":t,"data-collapsible":t==="collapsed"?e.collapsible:"","data-variant":e.variant,"data-side":e.side,...e.overlay?{"data-overlay":""}:void 0},A={"data-scope":"sidebar","data-part":"header","data-state":t,"data-collapsible":t==="collapsed"?e.collapsible:"","data-variant":e.variant,"data-side":e.side,...e.overlay?{"data-overlay":""}:void 0},U={"data-scope":"sidebar","data-part":"footer","data-state":t,"data-collapsible":t==="collapsed"?e.collapsible:"","data-variant":e.variant,"data-side":e.side,...e.overlay?{"data-overlay":""}:void 0},B={"data-scope":"sidebar","data-part":"trigger","data-state":t,"data-collapsible":t==="collapsed"?e.collapsible:"","data-variant":e.variant,"data-side":e.side,"aria-expanded":!!a,...e.id?{"aria-controls":e.id}:void 0,onClick:g,...e.overlay?{"data-overlay":""}:void 0},K={"data-scope":"sidebar","data-part":"rail","aria-label":P,onClick:g,title:P,"data-state":t,"data-collapsible":t==="collapsed"?e.collapsible:"","data-variant":e.variant,"data-side":e.side,...e.overlay?{"data-overlay":""}:void 0},N={"data-scope":"sidebar","data-part":"main","data-state":t,"data-collapsible":t==="collapsed"?e.collapsible:"","data-variant":e.variant,"data-side":e.side,...e.overlay?{"data-overlay":""}:void 0},z={"data-scope":"sidebar","data-part":"backdrop",...e.dismissable?{onClick:y}:{}},F={"data-scope":"sidebar","data-part":"menu"},V={"data-scope":"sidebar","data-part":"menu-item"},W=u.useCallback(s=>({"data-scope":"sidebar","data-part":"menu-button","data-menu-item":"",...s?{"data-active":!0}:{}}),[]),_=u.useCallback(s=>({"data-scope":"sidebar","data-part":"menu-action",...s?{"data-show-on-hover":""}:{}}),[]),$={"data-scope":"sidebar","data-part":"menu-badge"},q={"data-scope":"sidebar","data-part":"menu-sub"},Y={"data-scope":"sidebar","data-part":"menu-sub-item"},j=u.useCallback((s,G)=>({"data-scope":"sidebar","data-part":"menu-sub-button","data-menu-item":"","data-size":G,...s?{"data-active":!0}:{}}),[]);return{state:p,focusTrap:d,isModal:r,toggle:g,expand:M,collapse:y,rootProps:L,spacerProps:w,asideProps:x,panelProps:I,contentProps:D,headerProps:A,footerProps:U,triggerProps:B,railProps:K,mainProps:N,backdropProps:z,menuProps:F,menuItemProps:V,getMenuButtonProps:W,getMenuActionProps:_,menuBadgeProps:$,menuSubProps:q,menuSubItemProps:Y,getMenuSubButtonProps:j,groupProps:{"data-scope":"sidebar","data-part":"group"},groupLabelProps:{"data-scope":"sidebar","data-part":"group-label"},groupContentProps:{"data-scope":"sidebar","data-part":"group-content"},groupActionProps:{"data-scope":"sidebar","data-part":"group-action"},variant:e.variant,collapsible:e.collapsible,side:e.side,overlay:e.overlay,openOnHover:e.openOnHover}}});import{withHeadless as de}from"@primereact/core/headless";import*as f from"react";var H={};var Te=de({name:"useSidebarLayout",defaultProps:H,setup(){let[e,a]=f.useState(()=>new Map),n=f.useCallback((o,c)=>{a(l=>{if(c===null){if(!l.has(o))return l;let m=new Map(l);return m.delete(o),m}let v=l.get(o);if(v&&v.open===c.open&&v.state===c.state&&v.overlay===c.overlay&&v.hideOnOutsideClick===c.hideOnOutsideClick)return l;let h=new Map(l);return h.set(o,c),h})},[]),t=f.useCallback((o,c)=>{if(o){e.get(o)?.toggle(c);return}e.size===1&&e.values().next().value?.toggle(c)},[e]),r=f.useCallback((o,c)=>{if(o){let l=e.get(o);l?.open&&l.toggle(c);return}e.forEach(l=>{l.open&&l.toggle(c)})},[e]),i=f.useMemo(()=>{for(let o of e.values())if(o.open)return!0;return!1},[e]),d=f.useMemo(()=>{for(let o of e.values())if(o.open&&o.overlay&&o.hideOnOutsideClick)return!0;return!1},[e]),b=f.useMemo(()=>{for(let o of e.values())if(o.open&&o.overlay)return!0;return!1},[e]),g={...d?{onClick:o=>{o.target?.closest('[data-scope="sidebar"][data-part="trigger"]')||e.forEach(l=>{l.open&&l.overlay&&l.hideOnOutsideClick&&l.collapse(o)})}}:void 0,...b?{inert:!0,"aria-hidden":!0}:void 0};return{state:{open:i},setSidebar:n,toggle:t,collapse:r,backdropProps:{"data-scope":"sidebar","data-part":"backdrop",onClick:()=>r(),"data-state":i?"open":"closed"},backdropMotionProps:{visible:i},mainProps:g}}});import{withHeadless as ce}from"@primereact/core/headless";import{useCollapsible as ue}from"@primereact/headless/collapsible";var T={collapsible:!1,open:void 0,defaultOpen:!0,disabled:!1,onOpenChange:void 0};var Ae=ce({name:"useSidebarMenuItem",defaultProps:T,setup({props:e}){let a=!!e.collapsible,n=ue({open:a?e.open:void 0,defaultOpen:a?e.defaultOpen??!0:!0,onOpenChange:a?e.onOpenChange:void 0,disabled:e.disabled}),t={isCollapsible:a,open:n.state.open},r=a?n.triggerProps:{},i=a?n.contentProps:{},d=a?{...n.rootProps,"data-collapsible":!0}:{};return{state:t,toggle:n.toggle,triggerProps:r,contentProps:i,rootProps:d}}});export{H as defaultLayoutProps,T as defaultMenuItemProps,R as defaultProps,Se as useSidebar,Te as useSidebarLayout,Ae as useSidebarMenuItem};
|
package/sidebar/useSidebar.d.ts
CHANGED
|
@@ -29,7 +29,7 @@ export declare const useSidebar: (inProps?: unknown) => import("@primereact/type
|
|
|
29
29
|
style: React.CSSProperties;
|
|
30
30
|
onPointerEnter?: ((event?: React.SyntheticEvent) => void) | undefined;
|
|
31
31
|
onPointerLeave?: ((event?: React.SyntheticEvent) => void) | undefined;
|
|
32
|
-
onKeyDown: (event: React.KeyboardEvent) => void;
|
|
32
|
+
onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;
|
|
33
33
|
role?: "dialog" | undefined;
|
|
34
34
|
'aria-modal'?: true | undefined;
|
|
35
35
|
'data-overlay'?: "" | undefined;
|
|
@@ -135,6 +135,60 @@ export declare const useSidebar: (inProps?: unknown) => import("@primereact/type
|
|
|
135
135
|
'data-scope': string;
|
|
136
136
|
'data-part': string;
|
|
137
137
|
};
|
|
138
|
+
menuProps: {
|
|
139
|
+
'data-scope': string;
|
|
140
|
+
'data-part': string;
|
|
141
|
+
};
|
|
142
|
+
menuItemProps: {
|
|
143
|
+
'data-scope': string;
|
|
144
|
+
'data-part': string;
|
|
145
|
+
};
|
|
146
|
+
getMenuButtonProps: (isActive?: boolean) => {
|
|
147
|
+
'data-active'?: boolean | undefined;
|
|
148
|
+
'data-scope': string;
|
|
149
|
+
'data-part': string;
|
|
150
|
+
'data-menu-item': string;
|
|
151
|
+
};
|
|
152
|
+
getMenuActionProps: (showOnHover?: boolean) => {
|
|
153
|
+
'data-show-on-hover'?: string | undefined;
|
|
154
|
+
'data-scope': string;
|
|
155
|
+
'data-part': string;
|
|
156
|
+
};
|
|
157
|
+
menuBadgeProps: {
|
|
158
|
+
'data-scope': string;
|
|
159
|
+
'data-part': string;
|
|
160
|
+
};
|
|
161
|
+
menuSubProps: {
|
|
162
|
+
'data-scope': string;
|
|
163
|
+
'data-part': string;
|
|
164
|
+
};
|
|
165
|
+
menuSubItemProps: {
|
|
166
|
+
'data-scope': string;
|
|
167
|
+
'data-part': string;
|
|
168
|
+
};
|
|
169
|
+
getMenuSubButtonProps: (isActive?: boolean, size?: string) => {
|
|
170
|
+
'data-active'?: boolean | undefined;
|
|
171
|
+
'data-scope': string;
|
|
172
|
+
'data-part': string;
|
|
173
|
+
'data-menu-item': string;
|
|
174
|
+
'data-size': string | undefined;
|
|
175
|
+
};
|
|
176
|
+
groupProps: {
|
|
177
|
+
'data-scope': string;
|
|
178
|
+
'data-part': string;
|
|
179
|
+
};
|
|
180
|
+
groupLabelProps: {
|
|
181
|
+
'data-scope': string;
|
|
182
|
+
'data-part': string;
|
|
183
|
+
};
|
|
184
|
+
groupContentProps: {
|
|
185
|
+
'data-scope': string;
|
|
186
|
+
'data-part': string;
|
|
187
|
+
};
|
|
188
|
+
groupActionProps: {
|
|
189
|
+
'data-scope': string;
|
|
190
|
+
'data-part': string;
|
|
191
|
+
};
|
|
138
192
|
variant: "inset" | "sidebar" | "floating" | undefined;
|
|
139
193
|
collapsible: "icon" | "none" | "offcanvas" | undefined;
|
|
140
194
|
side: "left" | "right" | undefined;
|
|
@@ -2,13 +2,13 @@ export declare const useTimeline: (inProps?: unknown) => import("@primereact/typ
|
|
|
2
2
|
rootProps: {
|
|
3
3
|
'data-scope': "timeline";
|
|
4
4
|
'data-part': "root";
|
|
5
|
-
'data-align': "top" | "
|
|
5
|
+
'data-align': "top" | "left" | "bottom" | "alternate" | "right" | undefined;
|
|
6
6
|
'data-orientation': "horizontal" | "vertical" | undefined;
|
|
7
7
|
};
|
|
8
8
|
eventProps: {
|
|
9
9
|
'data-scope': "timeline";
|
|
10
10
|
'data-part': "event";
|
|
11
|
-
'data-align': "top" | "
|
|
11
|
+
'data-align': "top" | "left" | "bottom" | "alternate" | "right" | undefined;
|
|
12
12
|
'data-orientation': "horizontal" | "vertical" | undefined;
|
|
13
13
|
};
|
|
14
14
|
separatorProps: {
|
|
@@ -29,13 +29,13 @@ export declare const useTimeline: (inProps?: unknown) => import("@primereact/typ
|
|
|
29
29
|
contentProps: {
|
|
30
30
|
'data-scope': "timeline";
|
|
31
31
|
'data-part': "content";
|
|
32
|
-
'data-align': "top" | "
|
|
32
|
+
'data-align': "top" | "left" | "bottom" | "alternate" | "right" | undefined;
|
|
33
33
|
'data-orientation': "horizontal" | "vertical" | undefined;
|
|
34
34
|
};
|
|
35
35
|
oppositeProps: {
|
|
36
36
|
'data-scope': "timeline";
|
|
37
37
|
'data-part': "opposite";
|
|
38
|
-
'data-align': "top" | "
|
|
38
|
+
'data-align': "top" | "left" | "bottom" | "alternate" | "right" | undefined;
|
|
39
39
|
'data-orientation': "horizontal" | "vertical" | undefined;
|
|
40
40
|
};
|
|
41
41
|
}>;
|
package/toast/useToast.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export declare const useToast: (inProps?: unknown) => import("@primereact/types/
|
|
|
10
10
|
swiping: boolean;
|
|
11
11
|
swipeOut: boolean;
|
|
12
12
|
swipeOutDirection: "left" | "right" | "up" | "down" | null;
|
|
13
|
-
swipeDirection: "
|
|
13
|
+
swipeDirection: "y" | "x" | null;
|
|
14
14
|
initialHeight: number;
|
|
15
15
|
isSwiped: boolean;
|
|
16
16
|
offsetBeforeRemove: number;
|