@astroapps/aria-base 1.1.0 → 1.2.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/.rush/temp/operation/build/state.json +1 -1
- package/.rush/temp/shrinkwrap-deps.json +311 -331
- package/lib/Modal.d.ts +25 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +82 -7
- package/lib/index.js.map +1 -1
- package/package.json +9 -6
- package/src/Modal.tsx +130 -0
- package/src/index.ts +1 -0
package/lib/Modal.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { AriaModalOverlayProps } from "react-aria";
|
|
3
|
+
import { OverlayTriggerProps, OverlayTriggerState } from "react-stately";
|
|
4
|
+
import { DialogProps, DialogClasses } from "./Dialog";
|
|
5
|
+
export interface ModalClasses {
|
|
6
|
+
underlayClass?: string;
|
|
7
|
+
containerClass?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ModalDialogClasses extends DialogClasses, ModalClasses {
|
|
10
|
+
}
|
|
11
|
+
export declare const DefaultModalDialogClasses: ModalDialogClasses;
|
|
12
|
+
export interface ModalProps extends AriaModalOverlayProps, ModalClasses {
|
|
13
|
+
state: OverlayTriggerState;
|
|
14
|
+
children: React.ReactElement;
|
|
15
|
+
}
|
|
16
|
+
export interface ModalDialogTriggerProps extends OverlayTriggerProps, AriaModalOverlayProps {
|
|
17
|
+
trigger: React.ReactElement;
|
|
18
|
+
children: React.ReactElement;
|
|
19
|
+
}
|
|
20
|
+
export interface ModalDialogProps extends ModalDialogTriggerProps, Omit<DialogProps, "children">, ModalDialogClasses {
|
|
21
|
+
footer?: React.ReactNode;
|
|
22
|
+
}
|
|
23
|
+
export declare function Modal({ state, children, isDismissable, isKeyboardDismissDisabled, shouldCloseOnInteractOutside, ...props }: ModalProps): React.JSX.Element;
|
|
24
|
+
export declare function ModalTrigger({ trigger, children, ...props }: ModalDialogTriggerProps): React.JSX.Element;
|
|
25
|
+
export declare function ModalDialog({ children, footer, defaultOpen, isDismissable, titleClass, ...props }: ModalDialogProps): React.JSX.Element;
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
var reactAria = require('react-aria');
|
|
2
2
|
var React = require('react');
|
|
3
|
+
var reactStately = require('react-stately');
|
|
3
4
|
|
|
4
5
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
5
6
|
|
|
@@ -18,17 +19,17 @@ function _objectWithoutPropertiesLoose(r, e) {
|
|
|
18
19
|
if (null == r) return {};
|
|
19
20
|
var t = {};
|
|
20
21
|
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
|
|
21
|
-
if (e.
|
|
22
|
+
if (e.includes(n)) continue;
|
|
22
23
|
t[n] = r[n];
|
|
23
24
|
}
|
|
24
25
|
return t;
|
|
25
26
|
}
|
|
26
27
|
|
|
27
|
-
var _excluded$
|
|
28
|
+
var _excluded$3 = ["children", "className"];
|
|
28
29
|
function Button(_ref) {
|
|
29
30
|
var children = _ref.children,
|
|
30
31
|
className = _ref.className,
|
|
31
|
-
props = _objectWithoutPropertiesLoose(_ref, _excluded$
|
|
32
|
+
props = _objectWithoutPropertiesLoose(_ref, _excluded$3);
|
|
32
33
|
var ref = React.useRef(null);
|
|
33
34
|
var _useButton = reactAria.useButton(props, ref),
|
|
34
35
|
buttonProps = _useButton.buttonProps;
|
|
@@ -38,12 +39,12 @@ function Button(_ref) {
|
|
|
38
39
|
}));
|
|
39
40
|
}
|
|
40
41
|
|
|
41
|
-
var _excluded$
|
|
42
|
+
var _excluded$2 = ["title", "children"];
|
|
42
43
|
var DefaultDialogClasses = {};
|
|
43
44
|
function Dialog(_ref) {
|
|
44
45
|
var title = _ref.title,
|
|
45
46
|
children = _ref.children,
|
|
46
|
-
props = _objectWithoutPropertiesLoose(_ref, _excluded$
|
|
47
|
+
props = _objectWithoutPropertiesLoose(_ref, _excluded$2);
|
|
47
48
|
var ref = React.useRef(null);
|
|
48
49
|
var _DefaultDialogClasses = _extends({}, DefaultDialogClasses, props),
|
|
49
50
|
className = _DefaultDialogClasses.className,
|
|
@@ -59,7 +60,7 @@ function Dialog(_ref) {
|
|
|
59
60
|
}), title), children);
|
|
60
61
|
}
|
|
61
62
|
|
|
62
|
-
var _excluded = ["children", "state", "renderArrow", "portalContainer"];
|
|
63
|
+
var _excluded$1 = ["children", "state", "renderArrow", "portalContainer"];
|
|
63
64
|
var DefaultPopoverClasses = {
|
|
64
65
|
underlayClass: "fixed inset-0",
|
|
65
66
|
popoverClass: "bg-white"
|
|
@@ -69,7 +70,7 @@ function Popover(_ref) {
|
|
|
69
70
|
state = _ref.state,
|
|
70
71
|
renderArrow = _ref.renderArrow,
|
|
71
72
|
portalContainer = _ref.portalContainer,
|
|
72
|
-
props = _objectWithoutPropertiesLoose(_ref, _excluded);
|
|
73
|
+
props = _objectWithoutPropertiesLoose(_ref, _excluded$1);
|
|
73
74
|
var popoverRef = React.useRef(null);
|
|
74
75
|
var _DefaultPopoverClasse = _extends({}, DefaultPopoverClasses, props),
|
|
75
76
|
popoverClass = _DefaultPopoverClasse.popoverClass,
|
|
@@ -95,9 +96,83 @@ function Popover(_ref) {
|
|
|
95
96
|
})));
|
|
96
97
|
}
|
|
97
98
|
|
|
99
|
+
var _excluded = ["state", "children", "isDismissable", "isKeyboardDismissDisabled", "shouldCloseOnInteractOutside"],
|
|
100
|
+
_excluded2 = ["trigger", "children"],
|
|
101
|
+
_excluded3 = ["onPress"],
|
|
102
|
+
_excluded4 = ["children", "footer", "defaultOpen", "isDismissable", "titleClass"];
|
|
103
|
+
var DefaultModalDialogClasses = {
|
|
104
|
+
underlayClass: "fixed z-[100] inset-0 bg-black bg-opacity-50 flex items-center justify-center backdrop-blur-[2px]",
|
|
105
|
+
containerClass: "relative m-4 p-4 w-3/5 min-w-[400px] max-w-[80%] rounded-lg bg-white shadow-sm",
|
|
106
|
+
className: "w-full h-full min-h-[100px] flex flex-col gap-2 focus-visible:outline-none gap-2"
|
|
107
|
+
};
|
|
108
|
+
function Modal(_ref) {
|
|
109
|
+
var state = _ref.state,
|
|
110
|
+
children = _ref.children,
|
|
111
|
+
isDismissable = _ref.isDismissable,
|
|
112
|
+
isKeyboardDismissDisabled = _ref.isKeyboardDismissDisabled,
|
|
113
|
+
shouldCloseOnInteractOutside = _ref.shouldCloseOnInteractOutside,
|
|
114
|
+
props = _objectWithoutPropertiesLoose(_ref, _excluded);
|
|
115
|
+
var ref = React__default["default"].useRef(null);
|
|
116
|
+
var _useModalOverlay = reactAria.useModalOverlay({
|
|
117
|
+
isDismissable: isDismissable,
|
|
118
|
+
isKeyboardDismissDisabled: isKeyboardDismissDisabled,
|
|
119
|
+
shouldCloseOnInteractOutside: shouldCloseOnInteractOutside
|
|
120
|
+
}, state, ref),
|
|
121
|
+
modalProps = _useModalOverlay.modalProps,
|
|
122
|
+
underlayProps = _useModalOverlay.underlayProps;
|
|
123
|
+
var _DefaultModalDialogCl = _extends({}, DefaultModalDialogClasses, props),
|
|
124
|
+
underlayClass = _DefaultModalDialogCl.underlayClass,
|
|
125
|
+
containerClass = _DefaultModalDialogCl.containerClass;
|
|
126
|
+
return /*#__PURE__*/React__default["default"].createElement(reactAria.Overlay, null, /*#__PURE__*/React__default["default"].createElement("div", _extends({
|
|
127
|
+
className: underlayClass
|
|
128
|
+
}, underlayProps), /*#__PURE__*/React__default["default"].createElement("div", _extends({}, modalProps, {
|
|
129
|
+
ref: ref,
|
|
130
|
+
className: containerClass
|
|
131
|
+
}), children)));
|
|
132
|
+
}
|
|
133
|
+
function ModalTrigger(_ref2) {
|
|
134
|
+
var trigger = _ref2.trigger,
|
|
135
|
+
children = _ref2.children,
|
|
136
|
+
props = _objectWithoutPropertiesLoose(_ref2, _excluded2);
|
|
137
|
+
var state = reactStately.useOverlayTriggerState(_extends({}, props));
|
|
138
|
+
var _useOverlayTrigger = reactAria.useOverlayTrigger({
|
|
139
|
+
type: "dialog"
|
|
140
|
+
}, state),
|
|
141
|
+
triggerProps = _useOverlayTrigger.triggerProps,
|
|
142
|
+
overlayProps = _useOverlayTrigger.overlayProps;
|
|
143
|
+
var onPress = triggerProps.onPress,
|
|
144
|
+
otherTriggerProps = _objectWithoutPropertiesLoose(triggerProps, _excluded3);
|
|
145
|
+
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].cloneElement(trigger, _extends({}, otherTriggerProps, {
|
|
146
|
+
onClick: onPress
|
|
147
|
+
})), state.isOpen && /*#__PURE__*/React__default["default"].createElement(Modal, _extends({
|
|
148
|
+
state: state
|
|
149
|
+
}, props), React__default["default"].cloneElement(children, overlayProps)));
|
|
150
|
+
}
|
|
151
|
+
function ModalDialog(_ref3) {
|
|
152
|
+
var children = _ref3.children,
|
|
153
|
+
footer = _ref3.footer,
|
|
154
|
+
_ref3$defaultOpen = _ref3.defaultOpen,
|
|
155
|
+
defaultOpen = _ref3$defaultOpen === void 0 ? false : _ref3$defaultOpen,
|
|
156
|
+
_ref3$isDismissable = _ref3.isDismissable,
|
|
157
|
+
isDismissable = _ref3$isDismissable === void 0 ? true : _ref3$isDismissable,
|
|
158
|
+
props = _objectWithoutPropertiesLoose(_ref3, _excluded4);
|
|
159
|
+
var _DefaultModalDialogCl2 = _extends({}, DefaultModalDialogClasses, props),
|
|
160
|
+
className = _DefaultModalDialogCl2.className;
|
|
161
|
+
return /*#__PURE__*/React__default["default"].createElement(ModalTrigger, _extends({
|
|
162
|
+
defaultOpen: defaultOpen,
|
|
163
|
+
isDismissable: isDismissable
|
|
164
|
+
}, props), /*#__PURE__*/React__default["default"].createElement(Dialog, _extends({
|
|
165
|
+
className: className
|
|
166
|
+
}, props), children, footer));
|
|
167
|
+
}
|
|
168
|
+
|
|
98
169
|
exports.Button = Button;
|
|
99
170
|
exports.DefaultDialogClasses = DefaultDialogClasses;
|
|
171
|
+
exports.DefaultModalDialogClasses = DefaultModalDialogClasses;
|
|
100
172
|
exports.DefaultPopoverClasses = DefaultPopoverClasses;
|
|
101
173
|
exports.Dialog = Dialog;
|
|
174
|
+
exports.Modal = Modal;
|
|
175
|
+
exports.ModalDialog = ModalDialog;
|
|
176
|
+
exports.ModalTrigger = ModalTrigger;
|
|
102
177
|
exports.Popover = Popover;
|
|
103
178
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/Button.tsx","../src/Dialog.tsx","../src/Popover.tsx"],"sourcesContent":["import { AriaButtonProps, useButton } from \"react-aria\";\nimport React, { useRef } from \"react\";\n\nexport function Button({\n children,\n className,\n ...props\n}: AriaButtonProps<\"button\"> & { className?: string }) {\n const ref = useRef(null);\n const { buttonProps } = useButton(props, ref);\n return <button {...buttonProps} className={className} children={children} />;\n}\n","import type { AriaDialogProps } from \"react-aria\";\nimport { useDialog } from \"react-aria\";\nimport React, { useRef } from \"react\";\n\nexport interface DialogClasses {\n className?: string;\n titleClass?: string;\n}\nexport interface DialogProps extends AriaDialogProps, DialogClasses {\n title?: React.ReactNode;\n children: React.ReactNode;\n}\n\nexport const DefaultDialogClasses: DialogClasses = {};\nexport function Dialog({ title, children, ...props }: DialogProps) {\n let ref = useRef(null);\n const { className, titleClass } = {\n ...DefaultDialogClasses,\n ...props,\n };\n let { dialogProps, titleProps } = useDialog(props, ref);\n\n return (\n <div {...dialogProps} ref={ref} className={className}>\n {title && (\n <h3 {...titleProps} className={titleClass}>\n {title}\n </h3>\n )}\n {children}\n </div>\n );\n}\n","import type { AriaPopoverProps } from \"react-aria\";\nimport { DismissButton, Overlay, usePopover } from \"react-aria\";\nimport type { OverlayTriggerState } from \"react-stately\";\nimport React, { ReactNode, useRef } from \"react\";\nimport { DOMAttributes } from \"@react-types/shared\";\n\nexport interface PopoverClasses {\n underlayClass?: string;\n popoverClass?: string;\n}\nexport interface PopoverProps\n extends Omit<AriaPopoverProps, \"popoverRef\">,\n PopoverClasses {\n children: React.ReactNode;\n state: OverlayTriggerState;\n portalContainer?: Element;\n renderArrow?: (props: DOMAttributes) => ReactNode;\n}\n\nexport const DefaultPopoverClasses = {\n underlayClass: \"fixed inset-0\",\n popoverClass: \"bg-white\",\n};\n\nexport function Popover({\n children,\n state,\n renderArrow,\n portalContainer,\n ...props\n}: PopoverProps) {\n let popoverRef = useRef(null);\n const { popoverClass, underlayClass } = {\n ...DefaultPopoverClasses,\n ...props,\n };\n let { popoverProps, underlayProps, arrowProps } = usePopover(\n {\n ...props,\n popoverRef,\n },\n state,\n );\n\n return (\n <Overlay portalContainer={portalContainer}>\n <div {...underlayProps} className={underlayClass} />\n <div\n {...popoverProps}\n ref={popoverRef}\n className={popoverClass}\n style={popoverProps.style}\n >\n {renderArrow?.(arrowProps)}\n <DismissButton onDismiss={state.close} />\n {children}\n <DismissButton onDismiss={state.close} />\n </div>\n </Overlay>\n );\n}\n"],"names":["Button","_ref","children","className","props","_objectWithoutPropertiesLoose","_excluded","ref","useRef","_useButton","useButton","buttonProps","React","createElement","_extends","DefaultDialogClasses","Dialog","title","_DefaultDialogClasses","titleClass","_useDialog","useDialog","dialogProps","titleProps","DefaultPopoverClasses","underlayClass","popoverClass","Popover","state","renderArrow","portalContainer","popoverRef","_DefaultPopoverClasse","_usePopover","usePopover","popoverProps","underlayProps","arrowProps","Overlay","style","DismissButton","onDismiss","close"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/Button.tsx","../src/Dialog.tsx","../src/Popover.tsx","../src/Modal.tsx"],"sourcesContent":["import { AriaButtonProps, useButton } from \"react-aria\";\nimport React, { useRef } from \"react\";\n\nexport function Button({\n children,\n className,\n ...props\n}: AriaButtonProps<\"button\"> & { className?: string }) {\n const ref = useRef(null);\n const { buttonProps } = useButton(props, ref);\n return <button {...buttonProps} className={className} children={children} />;\n}\n","import type { AriaDialogProps } from \"react-aria\";\nimport { useDialog } from \"react-aria\";\nimport React, { useRef } from \"react\";\n\nexport interface DialogClasses {\n className?: string;\n titleClass?: string;\n}\nexport interface DialogProps extends AriaDialogProps, DialogClasses {\n title?: React.ReactNode;\n children: React.ReactNode;\n}\n\nexport const DefaultDialogClasses: DialogClasses = {};\nexport function Dialog({ title, children, ...props }: DialogProps) {\n let ref = useRef(null);\n const { className, titleClass } = {\n ...DefaultDialogClasses,\n ...props,\n };\n let { dialogProps, titleProps } = useDialog(props, ref);\n\n return (\n <div {...dialogProps} ref={ref} className={className}>\n {title && (\n <h3 {...titleProps} className={titleClass}>\n {title}\n </h3>\n )}\n {children}\n </div>\n );\n}\n","import type { AriaPopoverProps } from \"react-aria\";\nimport { DismissButton, Overlay, usePopover } from \"react-aria\";\nimport type { OverlayTriggerState } from \"react-stately\";\nimport React, { ReactNode, useRef } from \"react\";\nimport { DOMAttributes } from \"@react-types/shared\";\n\nexport interface PopoverClasses {\n underlayClass?: string;\n popoverClass?: string;\n}\nexport interface PopoverProps\n extends Omit<AriaPopoverProps, \"popoverRef\">,\n PopoverClasses {\n children: React.ReactNode;\n state: OverlayTriggerState;\n portalContainer?: Element;\n renderArrow?: (props: DOMAttributes) => ReactNode;\n}\n\nexport const DefaultPopoverClasses = {\n underlayClass: \"fixed inset-0\",\n popoverClass: \"bg-white\",\n};\n\nexport function Popover({\n children,\n state,\n renderArrow,\n portalContainer,\n ...props\n}: PopoverProps) {\n let popoverRef = useRef(null);\n const { popoverClass, underlayClass } = {\n ...DefaultPopoverClasses,\n ...props,\n };\n let { popoverProps, underlayProps, arrowProps } = usePopover(\n {\n ...props,\n popoverRef,\n },\n state,\n );\n\n return (\n <Overlay portalContainer={portalContainer}>\n <div {...underlayProps} className={underlayClass} />\n <div\n {...popoverProps}\n ref={popoverRef}\n className={popoverClass}\n style={popoverProps.style}\n >\n {renderArrow?.(arrowProps)}\n <DismissButton onDismiss={state.close} />\n {children}\n <DismissButton onDismiss={state.close} />\n </div>\n </Overlay>\n );\n}\n","import React from \"react\";\nimport {\n AriaModalOverlayProps,\n Overlay,\n useModalOverlay,\n useOverlayTrigger,\n} from \"react-aria\";\nimport {\n OverlayTriggerProps,\n OverlayTriggerState,\n useOverlayTriggerState,\n} from \"react-stately\";\nimport { Dialog, DialogProps, DialogClasses } from \"./Dialog\";\n\nexport interface ModalClasses {\n underlayClass?: string;\n containerClass?: string;\n}\n\nexport interface ModalDialogClasses extends DialogClasses, ModalClasses {}\n\nexport const DefaultModalDialogClasses: ModalDialogClasses = {\n underlayClass:\n \"fixed z-[100] inset-0 bg-black bg-opacity-50 flex items-center justify-center backdrop-blur-[2px]\",\n containerClass:\n \"relative m-4 p-4 w-3/5 min-w-[400px] max-w-[80%] rounded-lg bg-white shadow-sm\",\n className:\n \"w-full h-full min-h-[100px] flex flex-col gap-2 focus-visible:outline-none gap-2\",\n};\n\nexport interface ModalProps extends AriaModalOverlayProps, ModalClasses {\n state: OverlayTriggerState;\n children: React.ReactElement;\n}\n\nexport interface ModalDialogTriggerProps\n extends OverlayTriggerProps,\n AriaModalOverlayProps {\n trigger: React.ReactElement;\n children: React.ReactElement;\n}\n\nexport interface ModalDialogProps\n extends ModalDialogTriggerProps,\n Omit<DialogProps, \"children\">,\n ModalDialogClasses {\n footer?: React.ReactNode;\n}\n\nexport function Modal({\n state,\n children,\n isDismissable,\n isKeyboardDismissDisabled,\n shouldCloseOnInteractOutside,\n ...props\n}: ModalProps) {\n let ref = React.useRef(null);\n let { modalProps, underlayProps } = useModalOverlay(\n { isDismissable, isKeyboardDismissDisabled, shouldCloseOnInteractOutside },\n state,\n ref,\n );\n\n const { underlayClass, containerClass } = {\n ...DefaultModalDialogClasses,\n ...props,\n };\n\n return (\n <Overlay>\n <div className={underlayClass} {...underlayProps}>\n <div {...modalProps} ref={ref} className={containerClass}>\n {children}\n </div>\n </div>\n </Overlay>\n );\n}\n\nexport function ModalTrigger({\n trigger,\n children,\n ...props\n}: ModalDialogTriggerProps) {\n let state = useOverlayTriggerState({ ...props });\n let { triggerProps, overlayProps } = useOverlayTrigger(\n { type: \"dialog\" },\n state,\n );\n\n const { onPress, ...otherTriggerProps } = triggerProps;\n return (\n <>\n {React.cloneElement(trigger, { ...otherTriggerProps, onClick: onPress })}\n {state.isOpen && (\n <Modal state={state} {...props}>\n {React.cloneElement(children, overlayProps)}\n </Modal>\n )}\n </>\n );\n}\n\nexport function ModalDialog({\n children,\n footer,\n defaultOpen = false,\n isDismissable = true,\n titleClass = \"text-2xl font-bold\",\n ...props\n}: ModalDialogProps) {\n const { className } = {\n ...DefaultModalDialogClasses,\n ...props,\n };\n\n return (\n <ModalTrigger\n defaultOpen={defaultOpen}\n isDismissable={isDismissable}\n {...props}\n >\n <Dialog className={className} {...props}>\n {children}\n {footer}\n </Dialog>\n </ModalTrigger>\n );\n}\n"],"names":["Button","_ref","children","className","props","_objectWithoutPropertiesLoose","_excluded","ref","useRef","_useButton","useButton","buttonProps","React","createElement","_extends","DefaultDialogClasses","Dialog","title","_DefaultDialogClasses","titleClass","_useDialog","useDialog","dialogProps","titleProps","DefaultPopoverClasses","underlayClass","popoverClass","Popover","state","renderArrow","portalContainer","popoverRef","_DefaultPopoverClasse","_usePopover","usePopover","popoverProps","underlayProps","arrowProps","Overlay","style","DismissButton","onDismiss","close","DefaultModalDialogClasses","containerClass","Modal","isDismissable","isKeyboardDismissDisabled","shouldCloseOnInteractOutside","_useModalOverlay","useModalOverlay","modalProps","_DefaultModalDialogCl","ModalTrigger","_ref2","trigger","_excluded2","useOverlayTriggerState","_useOverlayTrigger","useOverlayTrigger","type","triggerProps","overlayProps","onPress","otherTriggerProps","_excluded3","Fragment","cloneElement","onClick","isOpen","ModalDialog","_ref3","footer","_ref3$defaultOpen","defaultOpen","_ref3$isDismissable","_excluded4","_DefaultModalDialogCl2"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@astroapps/aria-base",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -13,16 +13,19 @@
|
|
|
13
13
|
"publishConfig": {
|
|
14
14
|
"access": "public"
|
|
15
15
|
},
|
|
16
|
-
"
|
|
16
|
+
"peerDependencies": {
|
|
17
17
|
"react": "^18.2.0",
|
|
18
|
-
"react-dom": "^18.
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
"react-dom": "^18.0.0"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"react-stately": "^3.34.0",
|
|
22
|
+
"react-aria": "^3.36.0",
|
|
21
23
|
"clsx": "^2"
|
|
22
24
|
},
|
|
23
25
|
"devDependencies": {
|
|
26
|
+
"react": "^18.2.0",
|
|
24
27
|
"microbundle": "^0.15.1",
|
|
25
|
-
"typescript": "5.
|
|
28
|
+
"typescript": "^5.6.2",
|
|
26
29
|
"@types/react": "^18.2.37",
|
|
27
30
|
"prettier": "^3.0.3",
|
|
28
31
|
"rimraf": "^5.0.7",
|
package/src/Modal.tsx
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import {
|
|
3
|
+
AriaModalOverlayProps,
|
|
4
|
+
Overlay,
|
|
5
|
+
useModalOverlay,
|
|
6
|
+
useOverlayTrigger,
|
|
7
|
+
} from "react-aria";
|
|
8
|
+
import {
|
|
9
|
+
OverlayTriggerProps,
|
|
10
|
+
OverlayTriggerState,
|
|
11
|
+
useOverlayTriggerState,
|
|
12
|
+
} from "react-stately";
|
|
13
|
+
import { Dialog, DialogProps, DialogClasses } from "./Dialog";
|
|
14
|
+
|
|
15
|
+
export interface ModalClasses {
|
|
16
|
+
underlayClass?: string;
|
|
17
|
+
containerClass?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface ModalDialogClasses extends DialogClasses, ModalClasses {}
|
|
21
|
+
|
|
22
|
+
export const DefaultModalDialogClasses: ModalDialogClasses = {
|
|
23
|
+
underlayClass:
|
|
24
|
+
"fixed z-[100] inset-0 bg-black bg-opacity-50 flex items-center justify-center backdrop-blur-[2px]",
|
|
25
|
+
containerClass:
|
|
26
|
+
"relative m-4 p-4 w-3/5 min-w-[400px] max-w-[80%] rounded-lg bg-white shadow-sm",
|
|
27
|
+
className:
|
|
28
|
+
"w-full h-full min-h-[100px] flex flex-col gap-2 focus-visible:outline-none gap-2",
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export interface ModalProps extends AriaModalOverlayProps, ModalClasses {
|
|
32
|
+
state: OverlayTriggerState;
|
|
33
|
+
children: React.ReactElement;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface ModalDialogTriggerProps
|
|
37
|
+
extends OverlayTriggerProps,
|
|
38
|
+
AriaModalOverlayProps {
|
|
39
|
+
trigger: React.ReactElement;
|
|
40
|
+
children: React.ReactElement;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface ModalDialogProps
|
|
44
|
+
extends ModalDialogTriggerProps,
|
|
45
|
+
Omit<DialogProps, "children">,
|
|
46
|
+
ModalDialogClasses {
|
|
47
|
+
footer?: React.ReactNode;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function Modal({
|
|
51
|
+
state,
|
|
52
|
+
children,
|
|
53
|
+
isDismissable,
|
|
54
|
+
isKeyboardDismissDisabled,
|
|
55
|
+
shouldCloseOnInteractOutside,
|
|
56
|
+
...props
|
|
57
|
+
}: ModalProps) {
|
|
58
|
+
let ref = React.useRef(null);
|
|
59
|
+
let { modalProps, underlayProps } = useModalOverlay(
|
|
60
|
+
{ isDismissable, isKeyboardDismissDisabled, shouldCloseOnInteractOutside },
|
|
61
|
+
state,
|
|
62
|
+
ref,
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
const { underlayClass, containerClass } = {
|
|
66
|
+
...DefaultModalDialogClasses,
|
|
67
|
+
...props,
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
return (
|
|
71
|
+
<Overlay>
|
|
72
|
+
<div className={underlayClass} {...underlayProps}>
|
|
73
|
+
<div {...modalProps} ref={ref} className={containerClass}>
|
|
74
|
+
{children}
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
</Overlay>
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export function ModalTrigger({
|
|
82
|
+
trigger,
|
|
83
|
+
children,
|
|
84
|
+
...props
|
|
85
|
+
}: ModalDialogTriggerProps) {
|
|
86
|
+
let state = useOverlayTriggerState({ ...props });
|
|
87
|
+
let { triggerProps, overlayProps } = useOverlayTrigger(
|
|
88
|
+
{ type: "dialog" },
|
|
89
|
+
state,
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
const { onPress, ...otherTriggerProps } = triggerProps;
|
|
93
|
+
return (
|
|
94
|
+
<>
|
|
95
|
+
{React.cloneElement(trigger, { ...otherTriggerProps, onClick: onPress })}
|
|
96
|
+
{state.isOpen && (
|
|
97
|
+
<Modal state={state} {...props}>
|
|
98
|
+
{React.cloneElement(children, overlayProps)}
|
|
99
|
+
</Modal>
|
|
100
|
+
)}
|
|
101
|
+
</>
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export function ModalDialog({
|
|
106
|
+
children,
|
|
107
|
+
footer,
|
|
108
|
+
defaultOpen = false,
|
|
109
|
+
isDismissable = true,
|
|
110
|
+
titleClass = "text-2xl font-bold",
|
|
111
|
+
...props
|
|
112
|
+
}: ModalDialogProps) {
|
|
113
|
+
const { className } = {
|
|
114
|
+
...DefaultModalDialogClasses,
|
|
115
|
+
...props,
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
return (
|
|
119
|
+
<ModalTrigger
|
|
120
|
+
defaultOpen={defaultOpen}
|
|
121
|
+
isDismissable={isDismissable}
|
|
122
|
+
{...props}
|
|
123
|
+
>
|
|
124
|
+
<Dialog className={className} {...props}>
|
|
125
|
+
{children}
|
|
126
|
+
{footer}
|
|
127
|
+
</Dialog>
|
|
128
|
+
</ModalTrigger>
|
|
129
|
+
);
|
|
130
|
+
}
|
package/src/index.ts
CHANGED