@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/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
@@ -1,3 +1,4 @@
1
1
  export * from "./Button";
2
2
  export * from "./Dialog";
3
3
  export * from "./Popover";
4
+ export * from "./Modal";
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.indexOf(n) >= 0) continue;
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$2 = ["children", "className"];
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$2);
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$1 = ["title", "children"];
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$1);
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGM,SAAUA,MAAMA,CAAAC,IAAA,EAI+B;AAAA,EAAA,IAHnDC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IACRC,SAAS,GAAAF,IAAA,CAATE,SAAS;AACNC,IAAAA,KAAK,GAAAC,6BAAA,CAAAJ,IAAA,EAAAK,WAAA,CAAA,CAAA;AAER,EAAA,IAAMC,GAAG,GAAGC,YAAM,CAAC,IAAI,CAAC,CAAA;AACxB,EAAA,IAAAC,UAAA,GAAwBC,mBAAS,CAACN,KAAK,EAAEG,GAAG,CAAC;IAArCI,WAAW,GAAAF,UAAA,CAAXE,WAAW,CAAA;AACnB,EAAA,oBAAOC,yBAAA,CAAAC,aAAA,CAAAC,QAAAA,EAAAA,QAAA,KAAYH,WAAW,EAAA;AAAER,IAAAA,SAAS,EAAEA,SAAU;AAACD,IAAAA,QAAQ,EAAEA,QAAAA;AAAS,GAAA,EAAG,CAAA;AAC9E;;;ACEaa,IAAAA,oBAAoB,GAAkB,GAAE;AAC/C,SAAUC,MAAMA,CAAAf,IAAA,EAA2C;AAAA,EAAA,IAAxCgB,KAAK,GAAAhB,IAAA,CAALgB,KAAK;IAAEf,QAAQ,GAAAD,IAAA,CAARC,QAAQ;AAAKE,IAAAA,KAAK,GAAAC,6BAAA,CAAAJ,IAAA,EAAAK,WAAA,CAAA,CAAA;AAChD,EAAA,IAAIC,GAAG,GAAGC,YAAM,CAAC,IAAI,CAAC,CAAA;AACtB,EAAA,IAAAU,qBAAA,GAAAJ,QAAA,CACKC,EAAAA,EAAAA,oBAAoB,EACpBX,KAAK,CAAA;IAFFD,SAAS,GAAAe,qBAAA,CAATf,SAAS;IAAEgB,UAAU,GAAAD,qBAAA,CAAVC,UAAU,CAAA;AAI7B,EAAA,IAAAC,UAAA,GAAkCC,mBAAS,CAACjB,KAAK,EAAEG,GAAG,CAAC;IAAjDe,WAAW,GAAAF,UAAA,CAAXE,WAAW;IAAEC,UAAU,GAAAH,UAAA,CAAVG,UAAU,CAAA;AAE7B,EAAA,oBACEX,yBAAA,CAAAC,aAAA,CAAAC,KAAAA,EAAAA,QAAA,KAASQ,WAAW,EAAA;AAAEf,IAAAA,GAAG,EAAEA,GAAI;AAACJ,IAAAA,SAAS,EAAEA,SAAAA;GACxCc,CAAAA,EAAAA,KAAK,iBACJL,yBAAA,CAAAC,aAAA,CAAAC,IAAAA,EAAAA,QAAA,KAAQS,UAAU,EAAA;AAAEpB,IAAAA,SAAS,EAAEgB,UAAAA;AAAW,GAAA,CAAA,EACvCF,KACC,CACL,EACAf,QACE,CAAC,CAAA;AAEV;;;ACbO,IAAMsB,qBAAqB,GAAG;AACnCC,EAAAA,aAAa,EAAE,eAAe;AAC9BC,EAAAA,YAAY,EAAE,UAAA;EACf;AAEe,SAAAC,OAAOA,CAAA1B,IAAA,EAMR;AAAA,EAAA,IALbC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IACR0B,KAAK,GAAA3B,IAAA,CAAL2B,KAAK;IACLC,WAAW,GAAA5B,IAAA,CAAX4B,WAAW;IACXC,eAAe,GAAA7B,IAAA,CAAf6B,eAAe;AACZ1B,IAAAA,KAAK,GAAAC,6BAAA,CAAAJ,IAAA,EAAAK,WAAA,CAAA,CAAA;AAER,EAAA,IAAIyB,UAAU,GAAGvB,YAAM,CAAC,IAAI,CAAC,CAAA;AAC7B,EAAA,IAAAwB,qBAAA,GAAAlB,QAAA,CACKU,EAAAA,EAAAA,qBAAqB,EACrBpB,KAAK,CAAA;IAFFsB,YAAY,GAAAM,qBAAA,CAAZN,YAAY;IAAED,aAAa,GAAAO,qBAAA,CAAbP,aAAa,CAAA;AAInC,EAAA,IAAAQ,WAAA,GAAkDC,oBAAU,CAAApB,QAAA,KAErDV,KAAK,EAAA;AACR2B,MAAAA,UAAU,EAAVA,UAAAA;AAAU,KAAA,CAAA,EAEZH,KAAK,CACN;IANKO,YAAY,GAAAF,WAAA,CAAZE,YAAY;IAAEC,aAAa,GAAAH,WAAA,CAAbG,aAAa;IAAEC,UAAU,GAAAJ,WAAA,CAAVI,UAAU,CAAA;AAQ7C,EAAA,oBACEzB,yBAAA,CAAAC,aAAA,CAACyB,iBAAO,EAAA;AAACR,IAAAA,eAAe,EAAEA,eAAAA;AAAgB,GAAA,eACxClB,yBAAA,CAAAC,aAAA,CAAAC,KAAAA,EAAAA,QAAA,KAASsB,aAAa,EAAA;AAAEjC,IAAAA,SAAS,EAAEsB,aAAAA;GACnC,CAAA,CAAA,eAAAb,yBAAA,CAAAC,aAAA,CAAAC,KAAAA,EAAAA,QAAA,KACMqB,YAAY,EAAA;AAChB5B,IAAAA,GAAG,EAAEwB,UAAW;AAChB5B,IAAAA,SAAS,EAAEuB,YAAa;IACxBa,KAAK,EAAEJ,YAAY,CAACI,KAAAA;GAEnBV,CAAAA,EAAAA,WAAW,IAAXA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,WAAW,CAAGQ,UAAU,CAAC,eAC1BzB,yBAAA,CAAAC,aAAA,CAAC2B,uBAAa,EAAA;IAACC,SAAS,EAAEb,KAAK,CAACc,KAAAA;GAChC,CAAA,EAACxC,QAAQ,eACTU,yBAAA,CAAAC,aAAA,CAAC2B,uBAAa,EAAA;IAACC,SAAS,EAAEb,KAAK,CAACc,KAAAA;GAClC,CAAK,CACE,CAAC,CAAA;AAEd;;;;;;ACvCO,IAAMC,yBAAyB,GAAuB;AAC3DlB,EAAAA,aAAa,EACX,mGAAmG;AACrGmB,EAAAA,cAAc,EACZ,gFAAgF;AAClFzC,EAAAA,SAAS,EACP,kFAAA;EACH;SAqBe0C,KAAKA,CAAA5C,IAAA,EAOR;AAAA,EAAA,IANX2B,KAAK,GAAA3B,IAAA,CAAL2B,KAAK;IACL1B,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IACR4C,aAAa,GAAA7C,IAAA,CAAb6C,aAAa;IACbC,yBAAyB,GAAA9C,IAAA,CAAzB8C,yBAAyB;IACzBC,4BAA4B,GAAA/C,IAAA,CAA5B+C,4BAA4B;AACzB5C,IAAAA,KAAK,GAAAC,6BAAA,CAAAJ,IAAA,EAAAK,SAAA,CAAA,CAAA;AAER,EAAA,IAAIC,GAAG,GAAGK,yBAAK,CAACJ,MAAM,CAAC,IAAI,CAAC,CAAA;EAC5B,IAAAyC,gBAAA,GAAoCC,yBAAe,CACjD;AAAEJ,MAAAA,aAAa,EAAbA,aAAa;AAAEC,MAAAA,yBAAyB,EAAzBA,yBAAyB;AAAEC,MAAAA,4BAA4B,EAA5BA,4BAAAA;AAA8B,KAAA,EAC1EpB,KAAK,EACLrB,GAAG,CACJ;IAJK4C,UAAU,GAAAF,gBAAA,CAAVE,UAAU;IAAEf,aAAa,GAAAa,gBAAA,CAAbb,aAAa,CAAA;AAM/B,EAAA,IAAAgB,qBAAA,GAAAtC,QAAA,CACK6B,EAAAA,EAAAA,yBAAyB,EACzBvC,KAAK,CAAA;IAFFqB,aAAa,GAAA2B,qBAAA,CAAb3B,aAAa;IAAEmB,cAAc,GAAAQ,qBAAA,CAAdR,cAAc,CAAA;EAKrC,oBACEhC,yBAAA,CAAAC,aAAA,CAACyB,iBAAO,qBACN1B,yBAAA,CAAAC,aAAA,CAAA,KAAA,EAAAC,QAAA,CAAA;AAAKX,IAAAA,SAAS,EAAEsB,aAAAA;GAAmBW,EAAAA,aAAa,gBAC9CxB,yBAAA,CAAAC,aAAA,CAAAC,KAAAA,EAAAA,QAAA,KAASqC,UAAU,EAAA;AAAE5C,IAAAA,GAAG,EAAEA,GAAI;AAACJ,IAAAA,SAAS,EAAEyC,cAAAA;GACvC1C,CAAAA,EAAAA,QACE,CACF,CACE,CAAC,CAAA;AAEd,CAAA;AAEM,SAAUmD,YAAYA,CAAAC,KAAA,EAIF;AAAA,EAAA,IAHxBC,OAAO,GAAAD,KAAA,CAAPC,OAAO;IACPrD,QAAQ,GAAAoD,KAAA,CAARpD,QAAQ;AACLE,IAAAA,KAAK,GAAAC,6BAAA,CAAAiD,KAAA,EAAAE,UAAA,CAAA,CAAA;EAER,IAAI5B,KAAK,GAAG6B,mCAAsB,CAAA3C,QAAA,CAAMV,EAAAA,EAAAA,KAAK,CAAE,CAAC,CAAA;EAChD,IAAAsD,kBAAA,GAAqCC,2BAAiB,CACpD;AAAEC,MAAAA,IAAI,EAAE,QAAA;KAAU,EAClBhC,KAAK,CACN;IAHKiC,YAAY,GAAAH,kBAAA,CAAZG,YAAY;IAAEC,YAAY,GAAAJ,kBAAA,CAAZI,YAAY,CAAA;AAKhC,EAAA,IAAQC,OAAO,GAA2BF,YAAY,CAA9CE,OAAO;AAAKC,IAAAA,iBAAiB,GAAA3D,6BAAA,CAAKwD,YAAY,EAAAI,UAAA,CAAA,CAAA;AACtD,EAAA,oBACErD,yBAAA,CAAAC,aAAA,CAAAD,yBAAA,CAAAsD,QAAA,EAAA,IAAA,EACGtD,yBAAK,CAACuD,YAAY,CAACZ,OAAO,EAAAzC,QAAA,KAAOkD,iBAAiB,EAAA;AAAEI,IAAAA,OAAO,EAAEL,OAAAA;AAAO,GAAA,CAAE,CAAC,EACvEnC,KAAK,CAACyC,MAAM,iBACXzD,yBAAA,CAAAC,aAAA,CAACgC,KAAK,EAAA/B,QAAA,CAAA;AAACc,IAAAA,KAAK,EAAEA,KAAAA;GAAWxB,EAAAA,KAAK,CAC3BQ,EAAAA,yBAAK,CAACuD,YAAY,CAACjE,QAAQ,EAAE4D,YAAY,CACrC,CAEX,CAAG,CAAA;AAEP,CAAA;AAEM,SAAUQ,WAAWA,CAAAC,KAAA,EAOR;AAAA,EAAA,IANjBrE,QAAQ,GAAAqE,KAAA,CAARrE,QAAQ,CAAA;IACRsE,MAAM,GAAAD,KAAA,CAANC,MAAM,CAAA;IAAAC,iBAAA,GAAAF,KAAA,CACNG,WAAW,CAAA;AAAXA,IAAAA,WAAW,GAAAD,iBAAA,KAAG,KAAA,CAAA,GAAA,KAAK,GAAAA,iBAAA,CAAA;IAAAE,mBAAA,GAAAJ,KAAA,CACnBzB,aAAa,CAAA;AAAbA,IAAAA,aAAa,GAAA6B,mBAAA,KAAG,KAAA,CAAA,GAAA,IAAI,GAAAA,mBAAA,CAAA;IAEjBvE,KAAK,GAAAC,6BAAA,CAAAkE,KAAA,EAAAK,UAAA,EAAA;AAER,EAAA,IAAAC,sBAAA,GAAA/D,QAAA,CACK6B,EAAAA,EAAAA,yBAAyB,EACzBvC,KAAK,CAAA;IAFFD,SAAS,GAAA0E,sBAAA,CAAT1E,SAAS,CAAA;AAKjB,EAAA,oBACES,yBAAA,CAAAC,aAAA,CAACwC,YAAY,EAAAvC,QAAA,CAAA;AACX4D,IAAAA,WAAW,EAAEA,WAAY;AACzB5B,IAAAA,aAAa,EAAEA,aAAAA;GACX1C,EAAAA,KAAK,gBAETQ,yBAAA,CAAAC,aAAA,CAACG,MAAM,EAAAF,QAAA,CAAA;AAACX,IAAAA,SAAS,EAAEA,SAAAA;AAAU,GAAA,EAAKC,KAAK,CACpCF,EAAAA,QAAQ,EACRsE,MACK,CACI,CAAC,CAAA;AAEnB;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astroapps/aria-base",
3
- "version": "1.1.0",
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
- "dependencies": {
16
+ "peerDependencies": {
17
17
  "react": "^18.2.0",
18
- "react-dom": "^18.2.0",
19
- "react-stately": "^3.31.0",
20
- "react-aria": "^3.33.0",
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.2.2",
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
@@ -1,3 +1,4 @@
1
1
  export * from "./Button";
2
2
  export * from "./Dialog";
3
3
  export * from "./Popover";
4
+ export * from "./Modal";