@lindle/linoardo 1.0.30 → 1.0.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-LIEBZOLG.js → chunk-NJU7XT54.js} +57 -43
- package/dist/chunk-NJU7XT54.js.map +1 -0
- package/dist/{chunk-DDQ7ICWD.js → chunk-ZTP2JSQ6.js} +12 -9
- package/dist/{chunk-DDQ7ICWD.js.map → chunk-ZTP2JSQ6.js.map} +1 -1
- package/dist/dialog.cjs +55 -41
- package/dist/dialog.cjs.map +1 -1
- package/dist/dialog.d.cts +3 -0
- package/dist/dialog.d.ts +3 -0
- package/dist/dialog.js +1 -1
- package/dist/index.cjs +65 -48
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/menu.cjs +10 -7
- package/dist/menu.cjs.map +1 -1
- package/dist/menu.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-LIEBZOLG.js.map +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { createPortal } from 'react-dom';
|
|
2
3
|
import { twMerge } from 'tailwind-merge';
|
|
3
4
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
4
5
|
|
|
@@ -23,9 +24,12 @@ var Dialog = React.forwardRef((props, forwardedRef) => {
|
|
|
23
24
|
fullscreen = false,
|
|
24
25
|
maxWidth = "32rem",
|
|
25
26
|
width,
|
|
27
|
+
onClose,
|
|
26
28
|
containerClassName,
|
|
27
29
|
overlayClassName,
|
|
28
30
|
overlayProps,
|
|
31
|
+
portal = true,
|
|
32
|
+
portalContainer,
|
|
29
33
|
className,
|
|
30
34
|
style,
|
|
31
35
|
role: roleProp = "dialog",
|
|
@@ -36,6 +40,7 @@ var Dialog = React.forwardRef((props, forwardedRef) => {
|
|
|
36
40
|
} = props;
|
|
37
41
|
const state = open ? "open" : "closed";
|
|
38
42
|
const shouldRenderDialog = keepMounted || open;
|
|
43
|
+
const resolvedPortalContainer = portalContainer ?? (typeof document !== "undefined" ? document.body : null);
|
|
39
44
|
const resolvedStyle = { ...style };
|
|
40
45
|
if (fullscreen) {
|
|
41
46
|
if (resolvedStyle.maxWidth === void 0) {
|
|
@@ -59,63 +64,72 @@ var Dialog = React.forwardRef((props, forwardedRef) => {
|
|
|
59
64
|
}
|
|
60
65
|
}
|
|
61
66
|
const ariaModal = ariaModalProp ?? (roleProp === "dialog" || roleProp === "alertdialog" ? true : void 0);
|
|
62
|
-
const {
|
|
67
|
+
const {
|
|
68
|
+
className: overlayExtraClassName,
|
|
69
|
+
onClick: overlayOnClick,
|
|
70
|
+
...restOverlayProps
|
|
71
|
+
} = overlayProps ?? {};
|
|
63
72
|
const overlayNode = shouldRenderDialog && scrim ? /* @__PURE__ */ jsx(
|
|
64
73
|
"div",
|
|
65
74
|
{
|
|
66
75
|
...restOverlayProps,
|
|
67
76
|
className: twMerge(overlayBaseClasses, overlayClassName, overlayExtraClassName),
|
|
77
|
+
onClick: (event) => {
|
|
78
|
+
overlayOnClick?.(event);
|
|
79
|
+
if (!event.defaultPrevented) {
|
|
80
|
+
onClose?.();
|
|
81
|
+
}
|
|
82
|
+
},
|
|
68
83
|
"data-state": state,
|
|
69
84
|
"aria-hidden": true
|
|
70
85
|
}
|
|
71
86
|
) : null;
|
|
87
|
+
const dialogNode = shouldRenderDialog ? /* @__PURE__ */ jsxs(
|
|
88
|
+
"div",
|
|
89
|
+
{
|
|
90
|
+
className: twMerge(containerBaseClasses, containerClassName),
|
|
91
|
+
"data-state": state,
|
|
92
|
+
"aria-hidden": !open,
|
|
93
|
+
children: [
|
|
94
|
+
overlayNode,
|
|
95
|
+
/* @__PURE__ */ jsx(
|
|
96
|
+
"div",
|
|
97
|
+
{
|
|
98
|
+
className: twMerge(panelWrapperClasses, fullscreen ? "h-full items-stretch" : "mx-auto"),
|
|
99
|
+
"data-state": state,
|
|
100
|
+
children: /* @__PURE__ */ jsx(
|
|
101
|
+
"div",
|
|
102
|
+
{
|
|
103
|
+
...rest,
|
|
104
|
+
ref: forwardedRef,
|
|
105
|
+
id,
|
|
106
|
+
role: roleProp,
|
|
107
|
+
tabIndex,
|
|
108
|
+
"aria-modal": ariaModal,
|
|
109
|
+
className: twMerge(
|
|
110
|
+
panelBaseClasses,
|
|
111
|
+
fullscreen ? "h-full w-full max-w-none rounded-none" : void 0,
|
|
112
|
+
className
|
|
113
|
+
),
|
|
114
|
+
style: resolvedStyle,
|
|
115
|
+
"data-state": state,
|
|
116
|
+
children
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
}
|
|
120
|
+
)
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
) : null;
|
|
124
|
+
const outputNode = portal && resolvedPortalContainer && dialogNode ? createPortal(dialogNode, resolvedPortalContainer) : dialogNode;
|
|
72
125
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
73
126
|
activator ? /* @__PURE__ */ jsx("div", { className: "inline-flex", children: activator }) : null,
|
|
74
|
-
|
|
75
|
-
"div",
|
|
76
|
-
{
|
|
77
|
-
className: twMerge(containerBaseClasses, containerClassName),
|
|
78
|
-
"data-state": state,
|
|
79
|
-
"aria-hidden": !open,
|
|
80
|
-
children: [
|
|
81
|
-
overlayNode,
|
|
82
|
-
/* @__PURE__ */ jsx(
|
|
83
|
-
"div",
|
|
84
|
-
{
|
|
85
|
-
className: twMerge(
|
|
86
|
-
panelWrapperClasses,
|
|
87
|
-
fullscreen ? "h-full items-stretch" : "mx-auto"
|
|
88
|
-
),
|
|
89
|
-
"data-state": state,
|
|
90
|
-
children: /* @__PURE__ */ jsx(
|
|
91
|
-
"div",
|
|
92
|
-
{
|
|
93
|
-
...rest,
|
|
94
|
-
ref: forwardedRef,
|
|
95
|
-
id,
|
|
96
|
-
role: roleProp,
|
|
97
|
-
tabIndex,
|
|
98
|
-
"aria-modal": ariaModal,
|
|
99
|
-
className: twMerge(
|
|
100
|
-
panelBaseClasses,
|
|
101
|
-
fullscreen ? "h-full w-full max-w-none rounded-none" : void 0,
|
|
102
|
-
className
|
|
103
|
-
),
|
|
104
|
-
style: resolvedStyle,
|
|
105
|
-
"data-state": state,
|
|
106
|
-
children
|
|
107
|
-
}
|
|
108
|
-
)
|
|
109
|
-
}
|
|
110
|
-
)
|
|
111
|
-
]
|
|
112
|
-
}
|
|
113
|
-
) : null
|
|
127
|
+
outputNode
|
|
114
128
|
] });
|
|
115
129
|
});
|
|
116
130
|
Dialog.displayName = "Dialog";
|
|
117
131
|
var Dialog_default = Dialog;
|
|
118
132
|
|
|
119
133
|
export { Dialog_default };
|
|
120
|
-
//# sourceMappingURL=chunk-
|
|
121
|
-
//# sourceMappingURL=chunk-
|
|
134
|
+
//# sourceMappingURL=chunk-NJU7XT54.js.map
|
|
135
|
+
//# sourceMappingURL=chunk-NJU7XT54.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Containment/Dialog/index.tsx"],"names":[],"mappings":";;;;;;AAIA,IAAM,oBAAA,GACJ,0GAAA;AACF,IAAM,kBAAA,GACJ,iJAAA;AACF,IAAM,mBAAA,GACJ,0OAAA;AACF,IAAM,gBAAA,GACJ,4NAAA;AAEF,IAAM,gBAAA,GAAmB,CAAC,KAAA,KAA4B;AACpD,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA,GAAO,KAAA;AACpD,CAAA;AAqBA,IAAM,MAAA,GAAe,KAAA,CAAA,UAAA,CAAwC,CAAC,KAAA,EAAO,YAAA,KAAiB;AACpF,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA,GAAO,KAAA;AAAA,IACP,WAAA,GAAc,KAAA;AAAA,IACd,KAAA,GAAQ,IAAA;AAAA,IACR,UAAA,GAAa,KAAA;AAAA,IACb,QAAA,GAAW,OAAA;AAAA,IACX,KAAA;AAAA,IACA,OAAA;AAAA,IACA,kBAAA;AAAA,IACA,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,MAAA,GAAS,IAAA;AAAA,IACT,eAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAM,QAAA,GAAW,QAAA;AAAA,IACjB,QAAA,GAAW,EAAA;AAAA,IACX,EAAA;AAAA,IACA,CAAC,YAAY,GAAG,aAAA;AAAA,IAChB,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,KAAA,GAAQ,OAAO,MAAA,GAAS,QAAA;AAC9B,EAAA,MAAM,qBAAqB,WAAA,IAAe,IAAA;AAC1C,EAAA,MAAM,0BACJ,eAAA,KAAoB,OAAO,QAAA,KAAa,WAAA,GAAc,SAAS,IAAA,GAAO,IAAA,CAAA;AAExE,EAAA,MAAM,aAAA,GAAqC,EAAE,GAAG,KAAA,EAAM;AACtD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,IAAI,aAAA,CAAc,aAAa,MAAA,EAAW;AACxC,MAAA,aAAA,CAAc,QAAA,GAAW,MAAA;AAAA,IAC3B;AACA,IAAA,IAAI,aAAA,CAAc,UAAU,MAAA,EAAW;AACrC,MAAA,aAAA,CAAc,KAAA,GAAQ,MAAA;AAAA,IACxB;AACA,IAAA,IAAI,aAAA,CAAc,WAAW,MAAA,EAAW;AACtC,MAAA,aAAA,CAAc,MAAA,GAAS,MAAA;AAAA,IACzB;AACA,IAAA,IAAI,aAAA,CAAc,cAAc,MAAA,EAAW;AACzC,MAAA,aAAA,CAAc,SAAA,GAAY,MAAA;AAAA,IAC5B;AAAA,EACF,CAAA,MAAO;AACL,IAAA,IAAI,aAAA,CAAc,aAAa,MAAA,EAAW;AACxC,MAAA,aAAA,CAAc,QAAA,GAAW,iBAAiB,QAAQ,CAAA;AAAA,IACpD;AACA,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,aAAA,CAAc,KAAA,KAAU,MAAA,EAAW;AAC5D,MAAA,aAAA,CAAc,KAAA,GAAQ,iBAAiB,KAAK,CAAA;AAAA,IAC9C;AAAA,EACF;AAEA,EAAA,MAAM,YACJ,aAAA,KAAkB,QAAA,KAAa,QAAA,IAAY,QAAA,KAAa,gBAAgB,IAAA,GAAO,MAAA,CAAA;AAEjF,EAAA,MAAM;AAAA,IACJ,SAAA,EAAW,qBAAA;AAAA,IACX,OAAA,EAAS,cAAA;AAAA,IACT,GAAG;AAAA,GACL,GAAI,gBAAgB,EAAC;AAErB,EAAA,MAAM,WAAA,GACJ,sBAAsB,KAAA,mBACpB,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,gBAAA;AAAA,MACJ,SAAA,EAAW,OAAA,CAAQ,kBAAA,EAAoB,gBAAA,EAAkB,qBAAqB,CAAA;AAAA,MAC9E,SAAS,CAAA,KAAA,KAAS;AAChB,QAAA,cAAA,GAAiB,KAAK,CAAA;AACtB,QAAA,IAAI,CAAC,MAAM,gBAAA,EAAkB;AAC3B,UAAA,OAAA,IAAU;AAAA,QACZ;AAAA,MACF,CAAA;AAAA,MACA,YAAA,EAAY,KAAA;AAAA,MACZ,aAAA,EAAW;AAAA;AAAA,GACb,GACE,IAAA;AAEN,EAAA,MAAM,aAAa,kBAAA,mBACjB,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA,CAAQ,oBAAA,EAAsB,kBAAkB,CAAA;AAAA,MAC3D,YAAA,EAAY,KAAA;AAAA,MACZ,eAAa,CAAC,IAAA;AAAA,MAEb,QAAA,EAAA;AAAA,QAAA,WAAA;AAAA,wBACD,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,OAAA,CAAQ,mBAAA,EAAqB,UAAA,GAAa,yBAAyB,SAAS,CAAA;AAAA,YACvF,YAAA,EAAY,KAAA;AAAA,YAEZ,QAAA,kBAAA,GAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACE,GAAG,IAAA;AAAA,gBACJ,GAAA,EAAK,YAAA;AAAA,gBACL,EAAA;AAAA,gBACA,IAAA,EAAM,QAAA;AAAA,gBACN,QAAA;AAAA,gBACA,YAAA,EAAY,SAAA;AAAA,gBACZ,SAAA,EAAW,OAAA;AAAA,kBACT,gBAAA;AAAA,kBACA,aAAa,uCAAA,GAA0C,MAAA;AAAA,kBACvD;AAAA,iBACF;AAAA,gBACA,KAAA,EAAO,aAAA;AAAA,gBACP,YAAA,EAAY,KAAA;AAAA,gBAEX;AAAA;AAAA;AACH;AAAA;AACF;AAAA;AAAA,GACF,GACE,IAAA;AAEJ,EAAA,MAAM,aACJ,MAAA,IAAU,uBAAA,IAA2B,aACjC,YAAA,CAAa,UAAA,EAAY,uBAAuB,CAAA,GAChD,UAAA;AAEN,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,SAAA,mBAAY,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,qBAAU,CAAA,GAAS,IAAA;AAAA,IAC7D;AAAA,GAAA,EACH,CAAA;AAEJ,CAAC,CAAA;AAED,MAAA,CAAO,WAAA,GAAc,QAAA;AAErB,IAAO,cAAA,GAAQ","file":"chunk-NJU7XT54.js","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { twMerge } from 'tailwind-merge';\n\nconst containerBaseClasses =\n 'fixed inset-0 z-[70] flex items-center justify-center p-4 sm:p-8 data-[state=closed]:pointer-events-none';\nconst overlayBaseClasses =\n 'absolute inset-0 bg-gray-900/55 backdrop-blur-[2px] transition-opacity duration-200 data-[state=closed]:opacity-0 data-[state=open]:opacity-100';\nconst panelWrapperClasses =\n 'relative z-10 flex w-full max-h-[95vh] justify-center transition-transform transition-opacity duration-200 data-[state=closed]:translate-y-4 data-[state=closed]:opacity-0 data-[state=open]:translate-y-0 data-[state=open]:opacity-100';\nconst panelBaseClasses =\n 'pointer-events-auto w-full max-h-[90vh] overflow-auto rounded-2xl bg-white p-6 text-gray-900 shadow-2xl shadow-black/20 ring-1 ring-black/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40';\n\nconst resolveSizeValue = (value?: string | number) => {\n if (value === undefined) {\n return undefined;\n }\n return typeof value === 'number' ? `${value}px` : value;\n};\n\nexport interface DialogProps extends React.HTMLAttributes<HTMLDivElement> {\n activator?: React.ReactNode;\n open?: boolean;\n keepMounted?: boolean;\n scrim?: boolean;\n fullscreen?: boolean;\n maxWidth?: string | number;\n width?: string | number;\n onClose?: () => void;\n containerClassName?: string;\n overlayClassName?: string;\n overlayProps?: React.HTMLAttributes<HTMLDivElement>;\n portal?: boolean;\n portalContainer?: Element | null;\n}\n\n/**\n * Layered dialog container supporting scrim, fullscreen mode and controlled open state.\n */\nconst Dialog = React.forwardRef<HTMLDivElement, DialogProps>((props, forwardedRef) => {\n const {\n activator,\n children,\n open = false,\n keepMounted = false,\n scrim = true,\n fullscreen = false,\n maxWidth = '32rem',\n width,\n onClose,\n containerClassName,\n overlayClassName,\n overlayProps,\n portal = true,\n portalContainer,\n className,\n style,\n role: roleProp = 'dialog',\n tabIndex = -1,\n id,\n ['aria-modal']: ariaModalProp,\n ...rest\n } = props;\n\n const state = open ? 'open' : 'closed';\n const shouldRenderDialog = keepMounted || open;\n const resolvedPortalContainer =\n portalContainer ?? (typeof document !== 'undefined' ? document.body : null);\n\n const resolvedStyle: React.CSSProperties = { ...style };\n if (fullscreen) {\n if (resolvedStyle.maxWidth === undefined) {\n resolvedStyle.maxWidth = 'none';\n }\n if (resolvedStyle.width === undefined) {\n resolvedStyle.width = '100%';\n }\n if (resolvedStyle.height === undefined) {\n resolvedStyle.height = '100%';\n }\n if (resolvedStyle.maxHeight === undefined) {\n resolvedStyle.maxHeight = '100%';\n }\n } else {\n if (resolvedStyle.maxWidth === undefined) {\n resolvedStyle.maxWidth = resolveSizeValue(maxWidth);\n }\n if (width !== undefined && resolvedStyle.width === undefined) {\n resolvedStyle.width = resolveSizeValue(width);\n }\n }\n\n const ariaModal =\n ariaModalProp ?? (roleProp === 'dialog' || roleProp === 'alertdialog' ? true : undefined);\n\n const {\n className: overlayExtraClassName,\n onClick: overlayOnClick,\n ...restOverlayProps\n } = overlayProps ?? {};\n\n const overlayNode =\n shouldRenderDialog && scrim ? (\n <div\n {...restOverlayProps}\n className={twMerge(overlayBaseClasses, overlayClassName, overlayExtraClassName)}\n onClick={event => {\n overlayOnClick?.(event);\n if (!event.defaultPrevented) {\n onClose?.();\n }\n }}\n data-state={state}\n aria-hidden\n />\n ) : null;\n\n const dialogNode = shouldRenderDialog ? (\n <div\n className={twMerge(containerBaseClasses, containerClassName)}\n data-state={state}\n aria-hidden={!open}\n >\n {overlayNode}\n <div\n className={twMerge(panelWrapperClasses, fullscreen ? 'h-full items-stretch' : 'mx-auto')}\n data-state={state}\n >\n <div\n {...rest}\n ref={forwardedRef}\n id={id}\n role={roleProp}\n tabIndex={tabIndex}\n aria-modal={ariaModal}\n className={twMerge(\n panelBaseClasses,\n fullscreen ? 'h-full w-full max-w-none rounded-none' : undefined,\n className\n )}\n style={resolvedStyle}\n data-state={state}\n >\n {children}\n </div>\n </div>\n </div>\n ) : null;\n\n const outputNode =\n portal && resolvedPortalContainer && dialogNode\n ? createPortal(dialogNode, resolvedPortalContainer)\n : dialogNode;\n\n return (\n <>\n {activator ? <div className='inline-flex'>{activator}</div> : null}\n {outputNode}\n </>\n );\n});\n\nDialog.displayName = 'Dialog';\n\nexport default Dialog;\n"]}
|
|
@@ -35,20 +35,23 @@ var Menu = React.forwardRef((props, ref) => {
|
|
|
35
35
|
...rest
|
|
36
36
|
} = props;
|
|
37
37
|
const hasContent = children !== void 0 && children !== null;
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
const
|
|
38
|
+
const isControlled = open !== void 0;
|
|
39
|
+
const isOpen = open === true;
|
|
40
|
+
const allowHoverTrigger = openOnHover && !isControlled;
|
|
41
|
+
const allowFocusTrigger = openOnFocus && !isControlled;
|
|
42
|
+
const shouldRenderContent = hasContent && (keepMounted || isOpen || allowHoverTrigger || allowFocusTrigger);
|
|
43
|
+
const shouldRenderOverlay = scrim && hasContent && (isOpen || allowHoverTrigger || allowFocusTrigger);
|
|
41
44
|
const verticalPlacement = placement.startsWith("top") ? "top" : "bottom";
|
|
42
45
|
const visibilityClasses = twMerge(
|
|
43
46
|
"pointer-events-none opacity-0 scale-95",
|
|
44
47
|
isOpen ? "pointer-events-auto opacity-100 scale-100" : void 0,
|
|
45
|
-
|
|
46
|
-
|
|
48
|
+
allowHoverTrigger ? "group-hover/menu:pointer-events-auto group-hover/menu:opacity-100 group-hover/menu:scale-100" : void 0,
|
|
49
|
+
allowFocusTrigger ? "group-focus-within/menu:pointer-events-auto group-focus-within/menu:opacity-100 group-focus-within/menu:scale-100" : void 0
|
|
47
50
|
);
|
|
48
51
|
const overlayVisibilityClasses = twMerge(
|
|
49
52
|
"pointer-events-none opacity-0 transition-opacity duration-150",
|
|
50
|
-
|
|
51
|
-
|
|
53
|
+
allowHoverTrigger ? "group-hover/menu:opacity-100" : void 0,
|
|
54
|
+
allowFocusTrigger ? "group-focus-within/menu:opacity-100" : void 0,
|
|
52
55
|
isOpen ? "pointer-events-auto opacity-100" : void 0
|
|
53
56
|
);
|
|
54
57
|
const {
|
|
@@ -103,5 +106,5 @@ Menu.displayName = "Menu";
|
|
|
103
106
|
var Menu_default = Menu;
|
|
104
107
|
|
|
105
108
|
export { Menu_default };
|
|
106
|
-
//# sourceMappingURL=chunk-
|
|
107
|
-
//# sourceMappingURL=chunk-
|
|
109
|
+
//# sourceMappingURL=chunk-ZTP2JSQ6.js.map
|
|
110
|
+
//# sourceMappingURL=chunk-ZTP2JSQ6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Containment/Menu/index.tsx"],"names":[],"mappings":";;;;;AA0BA,IAAM,gBAAA,GAAkD;AAAA,EACtD,cAAA,EAAgB,iCAAA;AAAA,EAChB,MAAA,EAAQ,+CAAA;AAAA,EACR,YAAA,EAAc,mCAAA;AAAA,EACd,WAAA,EAAa,uCAAA;AAAA,EACb,GAAA,EAAK,qDAAA;AAAA,EACL,SAAA,EAAW;AACb,CAAA;AAEA,IAAM,aAAA,GAAkD;AAAA,EACtD,GAAA,EAAK,MAAA;AAAA,EACL,MAAA,EAAQ;AACV,CAAA;AAEA,IAAM,eAAA,GACJ,gTAAA;AAEF,IAAM,kBAAA,GAAqB,uDAAA;AAK3B,IAAM,IAAA,GAAa,KAAA,CAAA,UAAA,CAAsC,CAAC,KAAA,EAAO,GAAA,KAAQ;AACvE,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA,GAAY,cAAA;AAAA,IACZ,IAAA;AAAA,IACA,WAAA,GAAc,IAAA;AAAA,IACd,WAAA,GAAc,IAAA;AAAA,IACd,mBAAA,GAAsB,KAAA;AAAA,IACtB,WAAA,GAAc,KAAA;AAAA,IACd,KAAA,GAAQ,KAAA;AAAA,IACR,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,gBAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,UAAA,GAAa,QAAA,KAAa,MAAA,IAAa,QAAA,KAAa,IAAA;AAC1D,EAAA,MAAM,MAAA,
|
|
1
|
+
{"version":3,"sources":["../src/Containment/Menu/index.tsx"],"names":[],"mappings":"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","file":"chunk-ZTP2JSQ6.js","sourcesContent":["import * as React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nexport type MenuPlacement =\n | 'bottom-start'\n | 'bottom'\n | 'bottom-end'\n | 'top-start'\n | 'top'\n | 'top-end';\n\nexport interface MenuProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n activator: React.ReactNode;\n children: React.ReactNode;\n placement?: MenuPlacement;\n open?: boolean;\n openOnHover?: boolean;\n openOnFocus?: boolean;\n matchActivatorWidth?: boolean;\n keepMounted?: boolean;\n scrim?: boolean;\n contentClassName?: string;\n contentProps?: React.HTMLAttributes<HTMLDivElement>;\n overlayClassName?: string;\n}\n\nconst placementClasses: Record<MenuPlacement, string> = {\n 'bottom-start': 'left-0 top-full origin-top-left',\n bottom: 'left-1/2 top-full -translate-x-1/2 origin-top',\n 'bottom-end': 'right-0 top-full origin-top-right',\n 'top-start': 'left-0 bottom-full origin-bottom-left',\n top: 'left-1/2 bottom-full -translate-x-1/2 origin-bottom',\n 'top-end': 'right-0 bottom-full origin-bottom-right'\n};\n\nconst offsetClasses: Record<'top' | 'bottom', string> = {\n top: 'mb-2',\n bottom: 'mt-2'\n};\n\nconst menuBaseClasses =\n 'absolute z-50 min-w-[10rem] rounded-xl border border-gray-200/80 bg-white/95 p-2 text-sm text-gray-700 shadow-lg shadow-gray-900/10 ring-1 ring-black/5 backdrop-blur-md transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 focus-visible:ring-offset-2';\n\nconst overlayBaseClasses = 'fixed inset-0 z-40 bg-gray-900/30 backdrop-blur-[1px]';\n\n/**\n * Contextual menu that opens relative to an activator with optional hover/focus behavior and scrim.\n */\nconst Menu = React.forwardRef<HTMLDivElement, MenuProps>((props, ref) => {\n const {\n activator,\n children,\n placement = 'bottom-start',\n open,\n openOnHover = true,\n openOnFocus = true,\n matchActivatorWidth = false,\n keepMounted = false,\n scrim = false,\n contentClassName,\n contentProps,\n overlayClassName,\n className,\n ...rest\n } = props;\n\n const hasContent = children !== undefined && children !== null;\n const isControlled = open !== undefined;\n const isOpen = open === true;\n const allowHoverTrigger = openOnHover && !isControlled;\n const allowFocusTrigger = openOnFocus && !isControlled;\n const shouldRenderContent =\n hasContent && (keepMounted || isOpen || allowHoverTrigger || allowFocusTrigger);\n const shouldRenderOverlay =\n scrim && hasContent && (isOpen || allowHoverTrigger || allowFocusTrigger);\n const verticalPlacement = placement.startsWith('top') ? 'top' : 'bottom';\n\n const visibilityClasses = twMerge(\n 'pointer-events-none opacity-0 scale-95',\n isOpen ? 'pointer-events-auto opacity-100 scale-100' : undefined,\n allowHoverTrigger\n ? 'group-hover/menu:pointer-events-auto group-hover/menu:opacity-100 group-hover/menu:scale-100'\n : undefined,\n allowFocusTrigger\n ? 'group-focus-within/menu:pointer-events-auto group-focus-within/menu:opacity-100 group-focus-within/menu:scale-100'\n : undefined\n );\n\n const overlayVisibilityClasses = twMerge(\n 'pointer-events-none opacity-0 transition-opacity duration-150',\n allowHoverTrigger ? 'group-hover/menu:opacity-100' : undefined,\n allowFocusTrigger ? 'group-focus-within/menu:opacity-100' : undefined,\n isOpen ? 'pointer-events-auto opacity-100' : undefined\n );\n\n const {\n className: contentExtraClassName,\n style: contentStyle,\n role: contentRole,\n tabIndex: contentTabIndex,\n ...restContentProps\n } = contentProps ?? {};\n\n const overlayNode = shouldRenderOverlay ? (\n <div\n className={twMerge(overlayBaseClasses, overlayVisibilityClasses, overlayClassName)}\n aria-hidden\n />\n ) : null;\n\n return (\n <div\n {...rest}\n ref={ref}\n className={twMerge('relative inline-flex min-w-0 group/menu', className)}\n data-open={isOpen || undefined}\n >\n {overlayNode}\n <div className='inline-flex w-full min-w-0'>{activator}</div>\n {shouldRenderContent ? (\n <div\n {...restContentProps}\n className={twMerge(\n menuBaseClasses,\n placementClasses[placement],\n offsetClasses[verticalPlacement],\n matchActivatorWidth ? 'min-w-full' : undefined,\n visibilityClasses,\n contentClassName,\n contentExtraClassName\n )}\n data-state={isOpen ? 'open' : 'closed'}\n role={contentRole ?? 'menu'}\n tabIndex={contentTabIndex ?? -1}\n style={contentStyle}\n >\n {children}\n </div>\n ) : null}\n </div>\n );\n});\n\nMenu.displayName = 'Menu';\n\nexport default Menu;\n"]}
|
package/dist/dialog.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
|
+
var reactDom = require('react-dom');
|
|
4
5
|
var tailwindMerge = require('tailwind-merge');
|
|
5
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
7
|
|
|
@@ -45,9 +46,12 @@ var Dialog = React__namespace.forwardRef((props, forwardedRef) => {
|
|
|
45
46
|
fullscreen = false,
|
|
46
47
|
maxWidth = "32rem",
|
|
47
48
|
width,
|
|
49
|
+
onClose,
|
|
48
50
|
containerClassName,
|
|
49
51
|
overlayClassName,
|
|
50
52
|
overlayProps,
|
|
53
|
+
portal = true,
|
|
54
|
+
portalContainer,
|
|
51
55
|
className,
|
|
52
56
|
style,
|
|
53
57
|
role: roleProp = "dialog",
|
|
@@ -58,6 +62,7 @@ var Dialog = React__namespace.forwardRef((props, forwardedRef) => {
|
|
|
58
62
|
} = props;
|
|
59
63
|
const state = open ? "open" : "closed";
|
|
60
64
|
const shouldRenderDialog = keepMounted || open;
|
|
65
|
+
const resolvedPortalContainer = portalContainer ?? (typeof document !== "undefined" ? document.body : null);
|
|
61
66
|
const resolvedStyle = { ...style };
|
|
62
67
|
if (fullscreen) {
|
|
63
68
|
if (resolvedStyle.maxWidth === void 0) {
|
|
@@ -81,58 +86,67 @@ var Dialog = React__namespace.forwardRef((props, forwardedRef) => {
|
|
|
81
86
|
}
|
|
82
87
|
}
|
|
83
88
|
const ariaModal = ariaModalProp ?? (roleProp === "dialog" || roleProp === "alertdialog" ? true : void 0);
|
|
84
|
-
const {
|
|
89
|
+
const {
|
|
90
|
+
className: overlayExtraClassName,
|
|
91
|
+
onClick: overlayOnClick,
|
|
92
|
+
...restOverlayProps
|
|
93
|
+
} = overlayProps ?? {};
|
|
85
94
|
const overlayNode = shouldRenderDialog && scrim ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
86
95
|
"div",
|
|
87
96
|
{
|
|
88
97
|
...restOverlayProps,
|
|
89
98
|
className: tailwindMerge.twMerge(overlayBaseClasses, overlayClassName, overlayExtraClassName),
|
|
99
|
+
onClick: (event) => {
|
|
100
|
+
overlayOnClick?.(event);
|
|
101
|
+
if (!event.defaultPrevented) {
|
|
102
|
+
onClose?.();
|
|
103
|
+
}
|
|
104
|
+
},
|
|
90
105
|
"data-state": state,
|
|
91
106
|
"aria-hidden": true
|
|
92
107
|
}
|
|
93
108
|
) : null;
|
|
109
|
+
const dialogNode = shouldRenderDialog ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
110
|
+
"div",
|
|
111
|
+
{
|
|
112
|
+
className: tailwindMerge.twMerge(containerBaseClasses, containerClassName),
|
|
113
|
+
"data-state": state,
|
|
114
|
+
"aria-hidden": !open,
|
|
115
|
+
children: [
|
|
116
|
+
overlayNode,
|
|
117
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
118
|
+
"div",
|
|
119
|
+
{
|
|
120
|
+
className: tailwindMerge.twMerge(panelWrapperClasses, fullscreen ? "h-full items-stretch" : "mx-auto"),
|
|
121
|
+
"data-state": state,
|
|
122
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
123
|
+
"div",
|
|
124
|
+
{
|
|
125
|
+
...rest,
|
|
126
|
+
ref: forwardedRef,
|
|
127
|
+
id,
|
|
128
|
+
role: roleProp,
|
|
129
|
+
tabIndex,
|
|
130
|
+
"aria-modal": ariaModal,
|
|
131
|
+
className: tailwindMerge.twMerge(
|
|
132
|
+
panelBaseClasses,
|
|
133
|
+
fullscreen ? "h-full w-full max-w-none rounded-none" : void 0,
|
|
134
|
+
className
|
|
135
|
+
),
|
|
136
|
+
style: resolvedStyle,
|
|
137
|
+
"data-state": state,
|
|
138
|
+
children
|
|
139
|
+
}
|
|
140
|
+
)
|
|
141
|
+
}
|
|
142
|
+
)
|
|
143
|
+
]
|
|
144
|
+
}
|
|
145
|
+
) : null;
|
|
146
|
+
const outputNode = portal && resolvedPortalContainer && dialogNode ? reactDom.createPortal(dialogNode, resolvedPortalContainer) : dialogNode;
|
|
94
147
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
95
148
|
activator ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "inline-flex", children: activator }) : null,
|
|
96
|
-
|
|
97
|
-
"div",
|
|
98
|
-
{
|
|
99
|
-
className: tailwindMerge.twMerge(containerBaseClasses, containerClassName),
|
|
100
|
-
"data-state": state,
|
|
101
|
-
"aria-hidden": !open,
|
|
102
|
-
children: [
|
|
103
|
-
overlayNode,
|
|
104
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
105
|
-
"div",
|
|
106
|
-
{
|
|
107
|
-
className: tailwindMerge.twMerge(
|
|
108
|
-
panelWrapperClasses,
|
|
109
|
-
fullscreen ? "h-full items-stretch" : "mx-auto"
|
|
110
|
-
),
|
|
111
|
-
"data-state": state,
|
|
112
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
113
|
-
"div",
|
|
114
|
-
{
|
|
115
|
-
...rest,
|
|
116
|
-
ref: forwardedRef,
|
|
117
|
-
id,
|
|
118
|
-
role: roleProp,
|
|
119
|
-
tabIndex,
|
|
120
|
-
"aria-modal": ariaModal,
|
|
121
|
-
className: tailwindMerge.twMerge(
|
|
122
|
-
panelBaseClasses,
|
|
123
|
-
fullscreen ? "h-full w-full max-w-none rounded-none" : void 0,
|
|
124
|
-
className
|
|
125
|
-
),
|
|
126
|
-
style: resolvedStyle,
|
|
127
|
-
"data-state": state,
|
|
128
|
-
children
|
|
129
|
-
}
|
|
130
|
-
)
|
|
131
|
-
}
|
|
132
|
-
)
|
|
133
|
-
]
|
|
134
|
-
}
|
|
135
|
-
) : null
|
|
149
|
+
outputNode
|
|
136
150
|
] });
|
|
137
151
|
});
|
|
138
152
|
Dialog.displayName = "Dialog";
|
package/dist/dialog.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Containment/Dialog/index.tsx"],"names":["React","jsx","twMerge","jsxs","Fragment"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/Containment/Dialog/index.tsx"],"names":["React","jsx","twMerge","jsxs","createPortal","Fragment"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAM,oBAAA,GACJ,0GAAA;AACF,IAAM,kBAAA,GACJ,iJAAA;AACF,IAAM,mBAAA,GACJ,0OAAA;AACF,IAAM,gBAAA,GACJ,4NAAA;AAEF,IAAM,gBAAA,GAAmB,CAAC,KAAA,KAA4B;AACpD,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA,GAAO,KAAA;AACpD,CAAA;AAqBA,IAAM,MAAA,GAAeA,gBAAA,CAAA,UAAA,CAAwC,CAAC,KAAA,EAAO,YAAA,KAAiB;AACpF,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA,GAAO,KAAA;AAAA,IACP,WAAA,GAAc,KAAA;AAAA,IACd,KAAA,GAAQ,IAAA;AAAA,IACR,UAAA,GAAa,KAAA;AAAA,IACb,QAAA,GAAW,OAAA;AAAA,IACX,KAAA;AAAA,IACA,OAAA;AAAA,IACA,kBAAA;AAAA,IACA,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,MAAA,GAAS,IAAA;AAAA,IACT,eAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAM,QAAA,GAAW,QAAA;AAAA,IACjB,QAAA,GAAW,EAAA;AAAA,IACX,EAAA;AAAA,IACA,CAAC,YAAY,GAAG,aAAA;AAAA,IAChB,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,KAAA,GAAQ,OAAO,MAAA,GAAS,QAAA;AAC9B,EAAA,MAAM,qBAAqB,WAAA,IAAe,IAAA;AAC1C,EAAA,MAAM,0BACJ,eAAA,KAAoB,OAAO,QAAA,KAAa,WAAA,GAAc,SAAS,IAAA,GAAO,IAAA,CAAA;AAExE,EAAA,MAAM,aAAA,GAAqC,EAAE,GAAG,KAAA,EAAM;AACtD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,IAAI,aAAA,CAAc,aAAa,MAAA,EAAW;AACxC,MAAA,aAAA,CAAc,QAAA,GAAW,MAAA;AAAA,IAC3B;AACA,IAAA,IAAI,aAAA,CAAc,UAAU,MAAA,EAAW;AACrC,MAAA,aAAA,CAAc,KAAA,GAAQ,MAAA;AAAA,IACxB;AACA,IAAA,IAAI,aAAA,CAAc,WAAW,MAAA,EAAW;AACtC,MAAA,aAAA,CAAc,MAAA,GAAS,MAAA;AAAA,IACzB;AACA,IAAA,IAAI,aAAA,CAAc,cAAc,MAAA,EAAW;AACzC,MAAA,aAAA,CAAc,SAAA,GAAY,MAAA;AAAA,IAC5B;AAAA,EACF,CAAA,MAAO;AACL,IAAA,IAAI,aAAA,CAAc,aAAa,MAAA,EAAW;AACxC,MAAA,aAAA,CAAc,QAAA,GAAW,iBAAiB,QAAQ,CAAA;AAAA,IACpD;AACA,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,aAAA,CAAc,KAAA,KAAU,MAAA,EAAW;AAC5D,MAAA,aAAA,CAAc,KAAA,GAAQ,iBAAiB,KAAK,CAAA;AAAA,IAC9C;AAAA,EACF;AAEA,EAAA,MAAM,YACJ,aAAA,KAAkB,QAAA,KAAa,QAAA,IAAY,QAAA,KAAa,gBAAgB,IAAA,GAAO,MAAA,CAAA;AAEjF,EAAA,MAAM;AAAA,IACJ,SAAA,EAAW,qBAAA;AAAA,IACX,OAAA,EAAS,cAAA;AAAA,IACT,GAAG;AAAA,GACL,GAAI,gBAAgB,EAAC;AAErB,EAAA,MAAM,WAAA,GACJ,sBAAsB,KAAA,mBACpBC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,gBAAA;AAAA,MACJ,SAAA,EAAWC,qBAAA,CAAQ,kBAAA,EAAoB,gBAAA,EAAkB,qBAAqB,CAAA;AAAA,MAC9E,SAAS,CAAA,KAAA,KAAS;AAChB,QAAA,cAAA,GAAiB,KAAK,CAAA;AACtB,QAAA,IAAI,CAAC,MAAM,gBAAA,EAAkB;AAC3B,UAAA,OAAA,IAAU;AAAA,QACZ;AAAA,MACF,CAAA;AAAA,MACA,YAAA,EAAY,KAAA;AAAA,MACZ,aAAA,EAAW;AAAA;AAAA,GACb,GACE,IAAA;AAEN,EAAA,MAAM,aAAa,kBAAA,mBACjBC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWD,qBAAA,CAAQ,oBAAA,EAAsB,kBAAkB,CAAA;AAAA,MAC3D,YAAA,EAAY,KAAA;AAAA,MACZ,eAAa,CAAC,IAAA;AAAA,MAEb,QAAA,EAAA;AAAA,QAAA,WAAA;AAAA,wBACDD,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWC,qBAAA,CAAQ,mBAAA,EAAqB,UAAA,GAAa,yBAAyB,SAAS,CAAA;AAAA,YACvF,YAAA,EAAY,KAAA;AAAA,YAEZ,QAAA,kBAAAD,cAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACE,GAAG,IAAA;AAAA,gBACJ,GAAA,EAAK,YAAA;AAAA,gBACL,EAAA;AAAA,gBACA,IAAA,EAAM,QAAA;AAAA,gBACN,QAAA;AAAA,gBACA,YAAA,EAAY,SAAA;AAAA,gBACZ,SAAA,EAAWC,qBAAA;AAAA,kBACT,gBAAA;AAAA,kBACA,aAAa,uCAAA,GAA0C,MAAA;AAAA,kBACvD;AAAA,iBACF;AAAA,gBACA,KAAA,EAAO,aAAA;AAAA,gBACP,YAAA,EAAY,KAAA;AAAA,gBAEX;AAAA;AAAA;AACH;AAAA;AACF;AAAA;AAAA,GACF,GACE,IAAA;AAEJ,EAAA,MAAM,aACJ,MAAA,IAAU,uBAAA,IAA2B,aACjCE,qBAAA,CAAa,UAAA,EAAY,uBAAuB,CAAA,GAChD,UAAA;AAEN,EAAA,uBACED,eAAA,CAAAE,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,SAAA,mBAAYJ,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,qBAAU,CAAA,GAAS,IAAA;AAAA,IAC7D;AAAA,GAAA,EACH,CAAA;AAEJ,CAAC,CAAA;AAED,MAAA,CAAO,WAAA,GAAc,QAAA;AAErB,IAAO,cAAA,GAAQ","file":"dialog.cjs","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { twMerge } from 'tailwind-merge';\n\nconst containerBaseClasses =\n 'fixed inset-0 z-[70] flex items-center justify-center p-4 sm:p-8 data-[state=closed]:pointer-events-none';\nconst overlayBaseClasses =\n 'absolute inset-0 bg-gray-900/55 backdrop-blur-[2px] transition-opacity duration-200 data-[state=closed]:opacity-0 data-[state=open]:opacity-100';\nconst panelWrapperClasses =\n 'relative z-10 flex w-full max-h-[95vh] justify-center transition-transform transition-opacity duration-200 data-[state=closed]:translate-y-4 data-[state=closed]:opacity-0 data-[state=open]:translate-y-0 data-[state=open]:opacity-100';\nconst panelBaseClasses =\n 'pointer-events-auto w-full max-h-[90vh] overflow-auto rounded-2xl bg-white p-6 text-gray-900 shadow-2xl shadow-black/20 ring-1 ring-black/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40';\n\nconst resolveSizeValue = (value?: string | number) => {\n if (value === undefined) {\n return undefined;\n }\n return typeof value === 'number' ? `${value}px` : value;\n};\n\nexport interface DialogProps extends React.HTMLAttributes<HTMLDivElement> {\n activator?: React.ReactNode;\n open?: boolean;\n keepMounted?: boolean;\n scrim?: boolean;\n fullscreen?: boolean;\n maxWidth?: string | number;\n width?: string | number;\n onClose?: () => void;\n containerClassName?: string;\n overlayClassName?: string;\n overlayProps?: React.HTMLAttributes<HTMLDivElement>;\n portal?: boolean;\n portalContainer?: Element | null;\n}\n\n/**\n * Layered dialog container supporting scrim, fullscreen mode and controlled open state.\n */\nconst Dialog = React.forwardRef<HTMLDivElement, DialogProps>((props, forwardedRef) => {\n const {\n activator,\n children,\n open = false,\n keepMounted = false,\n scrim = true,\n fullscreen = false,\n maxWidth = '32rem',\n width,\n onClose,\n containerClassName,\n overlayClassName,\n overlayProps,\n portal = true,\n portalContainer,\n className,\n style,\n role: roleProp = 'dialog',\n tabIndex = -1,\n id,\n ['aria-modal']: ariaModalProp,\n ...rest\n } = props;\n\n const state = open ? 'open' : 'closed';\n const shouldRenderDialog = keepMounted || open;\n const resolvedPortalContainer =\n portalContainer ?? (typeof document !== 'undefined' ? document.body : null);\n\n const resolvedStyle: React.CSSProperties = { ...style };\n if (fullscreen) {\n if (resolvedStyle.maxWidth === undefined) {\n resolvedStyle.maxWidth = 'none';\n }\n if (resolvedStyle.width === undefined) {\n resolvedStyle.width = '100%';\n }\n if (resolvedStyle.height === undefined) {\n resolvedStyle.height = '100%';\n }\n if (resolvedStyle.maxHeight === undefined) {\n resolvedStyle.maxHeight = '100%';\n }\n } else {\n if (resolvedStyle.maxWidth === undefined) {\n resolvedStyle.maxWidth = resolveSizeValue(maxWidth);\n }\n if (width !== undefined && resolvedStyle.width === undefined) {\n resolvedStyle.width = resolveSizeValue(width);\n }\n }\n\n const ariaModal =\n ariaModalProp ?? (roleProp === 'dialog' || roleProp === 'alertdialog' ? true : undefined);\n\n const {\n className: overlayExtraClassName,\n onClick: overlayOnClick,\n ...restOverlayProps\n } = overlayProps ?? {};\n\n const overlayNode =\n shouldRenderDialog && scrim ? (\n <div\n {...restOverlayProps}\n className={twMerge(overlayBaseClasses, overlayClassName, overlayExtraClassName)}\n onClick={event => {\n overlayOnClick?.(event);\n if (!event.defaultPrevented) {\n onClose?.();\n }\n }}\n data-state={state}\n aria-hidden\n />\n ) : null;\n\n const dialogNode = shouldRenderDialog ? (\n <div\n className={twMerge(containerBaseClasses, containerClassName)}\n data-state={state}\n aria-hidden={!open}\n >\n {overlayNode}\n <div\n className={twMerge(panelWrapperClasses, fullscreen ? 'h-full items-stretch' : 'mx-auto')}\n data-state={state}\n >\n <div\n {...rest}\n ref={forwardedRef}\n id={id}\n role={roleProp}\n tabIndex={tabIndex}\n aria-modal={ariaModal}\n className={twMerge(\n panelBaseClasses,\n fullscreen ? 'h-full w-full max-w-none rounded-none' : undefined,\n className\n )}\n style={resolvedStyle}\n data-state={state}\n >\n {children}\n </div>\n </div>\n </div>\n ) : null;\n\n const outputNode =\n portal && resolvedPortalContainer && dialogNode\n ? createPortal(dialogNode, resolvedPortalContainer)\n : dialogNode;\n\n return (\n <>\n {activator ? <div className='inline-flex'>{activator}</div> : null}\n {outputNode}\n </>\n );\n});\n\nDialog.displayName = 'Dialog';\n\nexport default Dialog;\n"]}
|
package/dist/dialog.d.cts
CHANGED
|
@@ -8,9 +8,12 @@ interface DialogProps extends react.HTMLAttributes<HTMLDivElement> {
|
|
|
8
8
|
fullscreen?: boolean;
|
|
9
9
|
maxWidth?: string | number;
|
|
10
10
|
width?: string | number;
|
|
11
|
+
onClose?: () => void;
|
|
11
12
|
containerClassName?: string;
|
|
12
13
|
overlayClassName?: string;
|
|
13
14
|
overlayProps?: react.HTMLAttributes<HTMLDivElement>;
|
|
15
|
+
portal?: boolean;
|
|
16
|
+
portalContainer?: Element | null;
|
|
14
17
|
}
|
|
15
18
|
/**
|
|
16
19
|
* Layered dialog container supporting scrim, fullscreen mode and controlled open state.
|
package/dist/dialog.d.ts
CHANGED
|
@@ -8,9 +8,12 @@ interface DialogProps extends react.HTMLAttributes<HTMLDivElement> {
|
|
|
8
8
|
fullscreen?: boolean;
|
|
9
9
|
maxWidth?: string | number;
|
|
10
10
|
width?: string | number;
|
|
11
|
+
onClose?: () => void;
|
|
11
12
|
containerClassName?: string;
|
|
12
13
|
overlayClassName?: string;
|
|
13
14
|
overlayProps?: react.HTMLAttributes<HTMLDivElement>;
|
|
15
|
+
portal?: boolean;
|
|
16
|
+
portalContainer?: Element | null;
|
|
14
17
|
}
|
|
15
18
|
/**
|
|
16
19
|
* Layered dialog container supporting scrim, fullscreen mode and controlled open state.
|
package/dist/dialog.js
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
var React4 = require('react');
|
|
4
4
|
var tailwindMerge = require('tailwind-merge');
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var reactDom = require('react-dom');
|
|
6
7
|
var react = require('@tiptap/react');
|
|
7
8
|
var StarterKit = require('@tiptap/starter-kit');
|
|
8
9
|
var marked = require('marked');
|
|
@@ -905,20 +906,23 @@ var Menu = React4__namespace.forwardRef((props, ref) => {
|
|
|
905
906
|
...rest
|
|
906
907
|
} = props;
|
|
907
908
|
const hasContent = children !== void 0 && children !== null;
|
|
908
|
-
const
|
|
909
|
-
const
|
|
910
|
-
const
|
|
909
|
+
const isControlled = open !== void 0;
|
|
910
|
+
const isOpen = open === true;
|
|
911
|
+
const allowHoverTrigger = openOnHover && !isControlled;
|
|
912
|
+
const allowFocusTrigger = openOnFocus && !isControlled;
|
|
913
|
+
const shouldRenderContent = hasContent && (keepMounted || isOpen || allowHoverTrigger || allowFocusTrigger);
|
|
914
|
+
const shouldRenderOverlay = scrim && hasContent && (isOpen || allowHoverTrigger || allowFocusTrigger);
|
|
911
915
|
const verticalPlacement = placement.startsWith("top") ? "top" : "bottom";
|
|
912
916
|
const visibilityClasses = tailwindMerge.twMerge(
|
|
913
917
|
"pointer-events-none opacity-0 scale-95",
|
|
914
918
|
isOpen ? "pointer-events-auto opacity-100 scale-100" : void 0,
|
|
915
|
-
|
|
916
|
-
|
|
919
|
+
allowHoverTrigger ? "group-hover/menu:pointer-events-auto group-hover/menu:opacity-100 group-hover/menu:scale-100" : void 0,
|
|
920
|
+
allowFocusTrigger ? "group-focus-within/menu:pointer-events-auto group-focus-within/menu:opacity-100 group-focus-within/menu:scale-100" : void 0
|
|
917
921
|
);
|
|
918
922
|
const overlayVisibilityClasses = tailwindMerge.twMerge(
|
|
919
923
|
"pointer-events-none opacity-0 transition-opacity duration-150",
|
|
920
|
-
|
|
921
|
-
|
|
924
|
+
allowHoverTrigger ? "group-hover/menu:opacity-100" : void 0,
|
|
925
|
+
allowFocusTrigger ? "group-focus-within/menu:opacity-100" : void 0,
|
|
922
926
|
isOpen ? "pointer-events-auto opacity-100" : void 0
|
|
923
927
|
);
|
|
924
928
|
const {
|
|
@@ -1352,9 +1356,12 @@ var Dialog = React4__namespace.forwardRef((props, forwardedRef) => {
|
|
|
1352
1356
|
fullscreen = false,
|
|
1353
1357
|
maxWidth = "32rem",
|
|
1354
1358
|
width,
|
|
1359
|
+
onClose,
|
|
1355
1360
|
containerClassName,
|
|
1356
1361
|
overlayClassName,
|
|
1357
1362
|
overlayProps,
|
|
1363
|
+
portal = true,
|
|
1364
|
+
portalContainer,
|
|
1358
1365
|
className,
|
|
1359
1366
|
style,
|
|
1360
1367
|
role: roleProp = "dialog",
|
|
@@ -1365,6 +1372,7 @@ var Dialog = React4__namespace.forwardRef((props, forwardedRef) => {
|
|
|
1365
1372
|
} = props;
|
|
1366
1373
|
const state = open ? "open" : "closed";
|
|
1367
1374
|
const shouldRenderDialog = keepMounted || open;
|
|
1375
|
+
const resolvedPortalContainer = portalContainer ?? (typeof document !== "undefined" ? document.body : null);
|
|
1368
1376
|
const resolvedStyle = { ...style };
|
|
1369
1377
|
if (fullscreen) {
|
|
1370
1378
|
if (resolvedStyle.maxWidth === void 0) {
|
|
@@ -1388,58 +1396,67 @@ var Dialog = React4__namespace.forwardRef((props, forwardedRef) => {
|
|
|
1388
1396
|
}
|
|
1389
1397
|
}
|
|
1390
1398
|
const ariaModal = ariaModalProp ?? (roleProp === "dialog" || roleProp === "alertdialog" ? true : void 0);
|
|
1391
|
-
const {
|
|
1399
|
+
const {
|
|
1400
|
+
className: overlayExtraClassName,
|
|
1401
|
+
onClick: overlayOnClick,
|
|
1402
|
+
...restOverlayProps
|
|
1403
|
+
} = overlayProps ?? {};
|
|
1392
1404
|
const overlayNode = shouldRenderDialog && scrim ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1393
1405
|
"div",
|
|
1394
1406
|
{
|
|
1395
1407
|
...restOverlayProps,
|
|
1396
1408
|
className: tailwindMerge.twMerge(overlayBaseClasses2, overlayClassName, overlayExtraClassName),
|
|
1409
|
+
onClick: (event) => {
|
|
1410
|
+
overlayOnClick?.(event);
|
|
1411
|
+
if (!event.defaultPrevented) {
|
|
1412
|
+
onClose?.();
|
|
1413
|
+
}
|
|
1414
|
+
},
|
|
1397
1415
|
"data-state": state,
|
|
1398
1416
|
"aria-hidden": true
|
|
1399
1417
|
}
|
|
1400
1418
|
) : null;
|
|
1419
|
+
const dialogNode = shouldRenderDialog ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1420
|
+
"div",
|
|
1421
|
+
{
|
|
1422
|
+
className: tailwindMerge.twMerge(containerBaseClasses, containerClassName),
|
|
1423
|
+
"data-state": state,
|
|
1424
|
+
"aria-hidden": !open,
|
|
1425
|
+
children: [
|
|
1426
|
+
overlayNode,
|
|
1427
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1428
|
+
"div",
|
|
1429
|
+
{
|
|
1430
|
+
className: tailwindMerge.twMerge(panelWrapperClasses, fullscreen ? "h-full items-stretch" : "mx-auto"),
|
|
1431
|
+
"data-state": state,
|
|
1432
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1433
|
+
"div",
|
|
1434
|
+
{
|
|
1435
|
+
...rest,
|
|
1436
|
+
ref: forwardedRef,
|
|
1437
|
+
id,
|
|
1438
|
+
role: roleProp,
|
|
1439
|
+
tabIndex,
|
|
1440
|
+
"aria-modal": ariaModal,
|
|
1441
|
+
className: tailwindMerge.twMerge(
|
|
1442
|
+
panelBaseClasses,
|
|
1443
|
+
fullscreen ? "h-full w-full max-w-none rounded-none" : void 0,
|
|
1444
|
+
className
|
|
1445
|
+
),
|
|
1446
|
+
style: resolvedStyle,
|
|
1447
|
+
"data-state": state,
|
|
1448
|
+
children
|
|
1449
|
+
}
|
|
1450
|
+
)
|
|
1451
|
+
}
|
|
1452
|
+
)
|
|
1453
|
+
]
|
|
1454
|
+
}
|
|
1455
|
+
) : null;
|
|
1456
|
+
const outputNode = portal && resolvedPortalContainer && dialogNode ? reactDom.createPortal(dialogNode, resolvedPortalContainer) : dialogNode;
|
|
1401
1457
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1402
1458
|
activator ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "inline-flex", children: activator }) : null,
|
|
1403
|
-
|
|
1404
|
-
"div",
|
|
1405
|
-
{
|
|
1406
|
-
className: tailwindMerge.twMerge(containerBaseClasses, containerClassName),
|
|
1407
|
-
"data-state": state,
|
|
1408
|
-
"aria-hidden": !open,
|
|
1409
|
-
children: [
|
|
1410
|
-
overlayNode,
|
|
1411
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1412
|
-
"div",
|
|
1413
|
-
{
|
|
1414
|
-
className: tailwindMerge.twMerge(
|
|
1415
|
-
panelWrapperClasses,
|
|
1416
|
-
fullscreen ? "h-full items-stretch" : "mx-auto"
|
|
1417
|
-
),
|
|
1418
|
-
"data-state": state,
|
|
1419
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1420
|
-
"div",
|
|
1421
|
-
{
|
|
1422
|
-
...rest,
|
|
1423
|
-
ref: forwardedRef,
|
|
1424
|
-
id,
|
|
1425
|
-
role: roleProp,
|
|
1426
|
-
tabIndex,
|
|
1427
|
-
"aria-modal": ariaModal,
|
|
1428
|
-
className: tailwindMerge.twMerge(
|
|
1429
|
-
panelBaseClasses,
|
|
1430
|
-
fullscreen ? "h-full w-full max-w-none rounded-none" : void 0,
|
|
1431
|
-
className
|
|
1432
|
-
),
|
|
1433
|
-
style: resolvedStyle,
|
|
1434
|
-
"data-state": state,
|
|
1435
|
-
children
|
|
1436
|
-
}
|
|
1437
|
-
)
|
|
1438
|
-
}
|
|
1439
|
-
)
|
|
1440
|
-
]
|
|
1441
|
-
}
|
|
1442
|
-
) : null
|
|
1459
|
+
outputNode
|
|
1443
1460
|
] });
|
|
1444
1461
|
});
|
|
1445
1462
|
Dialog.displayName = "Dialog";
|