@astroapps/aria-base 1.4.0 → 1.5.1

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/index.js CHANGED
@@ -1,6 +1,9 @@
1
- var reactAria = require('react-aria');
1
+ var reactAriaComponents = require('react-aria-components');
2
2
  var React = require('react');
3
+ var reactAria = require('react-aria');
4
+ var tailwindVariants = require('tailwind-variants');
3
5
  var reactStately = require('react-stately');
6
+ var tailwindMerge = require('tailwind-merge');
4
7
 
5
8
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
6
9
 
@@ -25,26 +28,24 @@ function _objectWithoutPropertiesLoose(r, e) {
25
28
  return t;
26
29
  }
27
30
 
28
- var _excluded$3 = ["children", "className"];
31
+ var _excluded$4 = ["children", "className"];
29
32
  function Button(_ref) {
30
33
  var children = _ref.children,
31
34
  className = _ref.className,
32
- props = _objectWithoutPropertiesLoose(_ref, _excluded$3);
33
- var ref = React.useRef(null);
34
- var _useButton = reactAria.useButton(props, ref),
35
- buttonProps = _useButton.buttonProps;
36
- return /*#__PURE__*/React__default["default"].createElement("button", _extends({}, buttonProps, {
37
- className: className,
38
- children: children
35
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$4);
36
+ return /*#__PURE__*/React__default["default"].createElement(reactAriaComponents.Button, _extends({}, props, {
37
+ className: className
38
+ }), reactAriaComponents.composeRenderProps(children, function (children, _ref2) {
39
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, children);
39
40
  }));
40
41
  }
41
42
 
42
- var _excluded$2 = ["title", "children"];
43
+ var _excluded$3 = ["title", "children"];
43
44
  var DefaultDialogClasses = {};
44
45
  function Dialog(_ref) {
45
46
  var title = _ref.title,
46
47
  children = _ref.children,
47
- props = _objectWithoutPropertiesLoose(_ref, _excluded$2);
48
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$3);
48
49
  var ref = React.useRef(null);
49
50
  var _DefaultDialogClasses = _extends({}, DefaultDialogClasses, props),
50
51
  className = _DefaultDialogClasses.className,
@@ -60,41 +61,47 @@ function Dialog(_ref) {
60
61
  }), title), children);
61
62
  }
62
63
 
63
- var _excluded$1 = ["children", "state", "renderArrow", "portalContainer"];
64
+ var _excluded$2 = ["children", "showArrow", "className"];
65
+ var styles$1 = tailwindVariants.tv({
66
+ base: "font-sans bg-white forced-colors:bg-[Canvas] shadow-2xl rounded-xl bg-clip-padding border border-black/10 text-neutral-700 outline-0",
67
+ variants: {
68
+ isEntering: {
69
+ "true": "animate-in fade-in placement-bottom:slide-in-from-top-1 placement-top:slide-in-from-bottom-1 placement-left:slide-in-from-right-1 placement-right:slide-in-from-left-1 ease-out duration-200"
70
+ },
71
+ isExiting: {
72
+ "true": "animate-out fade-out placement-bottom:slide-out-to-top-1 placement-top:slide-out-to-bottom-1 placement-left:slide-out-to-right-1 placement-right:slide-out-to-left-1 ease-in duration-150"
73
+ }
74
+ }
75
+ });
76
+ function Popover(_ref) {
77
+ var children = _ref.children,
78
+ showArrow = _ref.showArrow,
79
+ className = _ref.className,
80
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$2);
81
+ var offset = showArrow ? 12 : 8;
82
+ return /*#__PURE__*/React__default["default"].createElement(reactAriaComponents.Popover, _extends({
83
+ offset: offset
84
+ }, props, {
85
+ className: reactAriaComponents.composeRenderProps(className, function (className, renderProps) {
86
+ return styles$1(_extends({}, renderProps, {
87
+ className: className
88
+ }));
89
+ })
90
+ }), showArrow && /*#__PURE__*/React__default["default"].createElement(reactAriaComponents.OverlayArrow, {
91
+ className: "group"
92
+ }, /*#__PURE__*/React__default["default"].createElement("svg", {
93
+ width: 12,
94
+ height: 12,
95
+ viewBox: "0 0 12 12",
96
+ className: "block fill-white forced-colors:fill-[Canvas] stroke-1 stroke-black/10 forced-colors:stroke-[ButtonBorder] group-placement-bottom:rotate-180 group-placement-left:-rotate-90 group-placement-right:rotate-90"
97
+ }, /*#__PURE__*/React__default["default"].createElement("path", {
98
+ d: "M0 0 L6 6 L12 0"
99
+ }))), children);
100
+ }
64
101
  var DefaultPopoverClasses = {
65
102
  underlayClass: "fixed inset-0",
66
103
  popoverClass: "bg-white"
67
104
  };
68
- function Popover(_ref) {
69
- var children = _ref.children,
70
- state = _ref.state,
71
- renderArrow = _ref.renderArrow,
72
- portalContainer = _ref.portalContainer,
73
- props = _objectWithoutPropertiesLoose(_ref, _excluded$1);
74
- var popoverRef = React.useRef(null);
75
- var _DefaultPopoverClasse = _extends({}, DefaultPopoverClasses, props),
76
- popoverClass = _DefaultPopoverClasse.popoverClass,
77
- underlayClass = _DefaultPopoverClasse.underlayClass;
78
- var _usePopover = reactAria.usePopover(_extends({}, props, {
79
- popoverRef: popoverRef
80
- }), state),
81
- popoverProps = _usePopover.popoverProps,
82
- underlayProps = _usePopover.underlayProps,
83
- arrowProps = _usePopover.arrowProps;
84
- return /*#__PURE__*/React__default["default"].createElement(reactAria.Overlay, {
85
- portalContainer: portalContainer
86
- }, /*#__PURE__*/React__default["default"].createElement("div", _extends({}, underlayProps, {
87
- className: underlayClass
88
- })), /*#__PURE__*/React__default["default"].createElement("div", _extends({}, popoverProps, {
89
- ref: popoverRef,
90
- className: popoverClass,
91
- style: popoverProps.style
92
- }), renderArrow == null ? void 0 : renderArrow(arrowProps), /*#__PURE__*/React__default["default"].createElement(reactAria.DismissButton, {
93
- onDismiss: state.close
94
- }), children, /*#__PURE__*/React__default["default"].createElement(reactAria.DismissButton, {
95
- onDismiss: state.close
96
- })));
97
- }
98
105
  function createOverlayState(ref) {
99
106
  return {
100
107
  isOpen: ref.value,
@@ -113,7 +120,7 @@ function createOverlayState(ref) {
113
120
  };
114
121
  }
115
122
 
116
- var _excluded = ["state", "children", "isDismissable", "isKeyboardDismissDisabled", "shouldCloseOnInteractOutside", "portalContainer"],
123
+ var _excluded$1 = ["state", "children", "isDismissable", "isKeyboardDismissDisabled", "shouldCloseOnInteractOutside", "portalContainer"],
117
124
  _excluded2 = ["trigger", "children"],
118
125
  _excluded3 = ["onPress"],
119
126
  _excluded4 = ["children", "footer", "defaultOpen", "isDismissable", "titleClass"];
@@ -128,7 +135,7 @@ function Modal(_ref) {
128
135
  isKeyboardDismissDisabled = _ref.isKeyboardDismissDisabled,
129
136
  shouldCloseOnInteractOutside = _ref.shouldCloseOnInteractOutside,
130
137
  portalContainer = _ref.portalContainer,
131
- props = _objectWithoutPropertiesLoose(_ref, _excluded);
138
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$1);
132
139
  var ref = React__default["default"].useRef(null);
133
140
  var _useModalOverlay = reactAria.useModalOverlay({
134
141
  isDismissable: isDismissable,
@@ -185,14 +192,196 @@ function ModalDialog(_ref3) {
185
192
  }, props), children, footer));
186
193
  }
187
194
 
195
+ var focusRing = tailwindVariants.tv({
196
+ base: "outline outline-secondary-600 forced-colors:outline-[Highlight] outline-offset-2",
197
+ variants: {
198
+ isFocusVisible: {
199
+ "false": "outline-0",
200
+ "true": "outline-2"
201
+ }
202
+ }
203
+ });
204
+ function composeTailwindRenderProps(className, tw) {
205
+ return reactAriaComponents.composeRenderProps(className, function (className) {
206
+ return tailwindMerge.twMerge(tw, className);
207
+ });
208
+ }
209
+
210
+ function Label(props) {
211
+ return /*#__PURE__*/React__default["default"].createElement(reactAriaComponents.Label, _extends({}, props, {
212
+ className: tailwindMerge.twMerge("font-sans text-sm text-neutral-600 font-medium cursor-default w-fit", props.className)
213
+ }));
214
+ }
215
+ function Description(props) {
216
+ return /*#__PURE__*/React__default["default"].createElement(reactAriaComponents.Text, _extends({}, props, {
217
+ slot: "description",
218
+ className: tailwindMerge.twMerge("text-sm text-neutral-600", props.className)
219
+ }));
220
+ }
221
+ function FieldError(props) {
222
+ return /*#__PURE__*/React__default["default"].createElement(reactAriaComponents.FieldError, _extends({}, props, {
223
+ className: composeTailwindRenderProps(props.className, "text-sm text-red-600 forced-colors:text-[Mark]")
224
+ }));
225
+ }
226
+ var fieldBorderStyles = tailwindVariants.tv({
227
+ base: "transition",
228
+ variants: {
229
+ isFocusWithin: {
230
+ "false": "border-neutral-300 hover:border-neutral-400 forced-colors:border-[ButtonBorder]",
231
+ "true": "border-neutral-600 forced-colors:border-[Highlight]"
232
+ },
233
+ isInvalid: {
234
+ "true": "border-red-600 forced-colors:border-[Mark]"
235
+ },
236
+ isDisabled: {
237
+ "true": "border-neutral-200 forced-colors:border-[GrayText]"
238
+ }
239
+ }
240
+ });
241
+ var fieldGroupStyles = tailwindVariants.tv({
242
+ extend: focusRing,
243
+ base: "group flex items-center h-9 box-border bg-white forced-colors:bg-[Field] border rounded-lg overflow-hidden transition",
244
+ variants: fieldBorderStyles.variants
245
+ });
246
+ function FieldGroup(props) {
247
+ return /*#__PURE__*/React__default["default"].createElement(reactAriaComponents.Group, _extends({}, props, {
248
+ className: reactAriaComponents.composeRenderProps(props.className, function (className, renderProps) {
249
+ return fieldGroupStyles(_extends({}, renderProps, {
250
+ className: className
251
+ }));
252
+ })
253
+ }));
254
+ }
255
+ function Input(props) {
256
+ return /*#__PURE__*/React__default["default"].createElement(reactAriaComponents.Input, _extends({}, props, {
257
+ className: composeTailwindRenderProps(props.className, "px-3 py-0 min-h-9 flex-1 min-w-0 border-0 outline outline-0 bg-white font-sans text-sm text-neutral-800 placeholder:text-neutral-600 disabled:text-neutral-200 disabled:placeholder:text-neutral-200 [-webkit-tap-highlight-color:transparent]")
258
+ }));
259
+ }
260
+
261
+ tailwindVariants.tv({
262
+ extend: focusRing,
263
+ base: "group relative flex items-center gap-8 cursor-default select-none py-1.5 px-2.5 rounded-md will-change-transform text-sm forced-color-adjust-none",
264
+ variants: {
265
+ isSelected: {
266
+ "false": "text-neutral-700 hover:bg-neutral-100 pressed:bg-neutral-100 -outline-offset-2",
267
+ "true": "bg-secondary-600 text-white forced-colors:bg-[Highlight] forced-colors:text-[HighlightText] [&:has(+[data-selected])]:rounded-b-none [&+[data-selected]]:rounded-t-none -outline-offset-4 outline-white forced-colors:outline-[HighlightText]"
268
+ },
269
+ isDisabled: {
270
+ "true": "text-neutral-300 forced-colors:text-[GrayText]"
271
+ }
272
+ }
273
+ });
274
+ var dropdownItemStyles = tailwindVariants.tv({
275
+ base: "group flex items-center gap-4 cursor-default select-none py-2 pl-3 pr-3 selected:pr-1 rounded-lg outline outline-0 text-sm forced-color-adjust-none no-underline [&[href]]:cursor-pointer [-webkit-tap-highlight-color:transparent]",
276
+ variants: {
277
+ isDisabled: {
278
+ "false": "text-neutral-900",
279
+ "true": "text-neutral-300 forced-colors:text-[GrayText]"
280
+ },
281
+ isPressed: {
282
+ "true": "bg-neutral-100"
283
+ },
284
+ isFocused: {
285
+ "true": "bg-secondary-600 text-white forced-colors:bg-[Highlight] forced-colors:text-[HighlightText]"
286
+ }
287
+ },
288
+ compoundVariants: [{
289
+ isFocused: false,
290
+ isOpen: true,
291
+ className: "bg-neutral-100"
292
+ }]
293
+ });
294
+ function DropdownItem(props) {
295
+ var textValue = props.textValue || (typeof props.children === "string" ? props.children : undefined);
296
+ return /*#__PURE__*/React__default["default"].createElement(reactAriaComponents.ListBoxItem, _extends({}, props, {
297
+ textValue: textValue,
298
+ className: dropdownItemStyles
299
+ }), reactAriaComponents.composeRenderProps(props.children, function (children, _ref2) {
300
+ var isSelected = _ref2.isSelected;
301
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("span", {
302
+ className: "flex items-center flex-1 gap-2 font-normal truncate group-selected:font-semibold"
303
+ }, children), /*#__PURE__*/React__default["default"].createElement("span", {
304
+ className: "flex items-center w-5"
305
+ }, isSelected && /*#__PURE__*/React__default["default"].createElement("i", {
306
+ className: "w-4 h-4 fa fa-check"
307
+ })));
308
+ }));
309
+ }
310
+ function DropdownSection(props) {
311
+ return /*#__PURE__*/React__default["default"].createElement(reactAriaComponents.ListBoxSection, {
312
+ className: "first:-mt-[5px] after:content-[''] after:block after:h-[5px] last:after:hidden"
313
+ }, /*#__PURE__*/React__default["default"].createElement(reactAriaComponents.Header, {
314
+ className: "text-sm font-semibold text-neutral-500 px-4 py-1 truncate sticky -top-[5px] -mt-px -mx-1 z-10 bg-neutral-100/60 backdrop-blur-md supports-[-moz-appearance:none]:bg-neutral-100 border-y border-y-neutral-200 [&+*]:mt-1"
315
+ }, props.title), /*#__PURE__*/React__default["default"].createElement(reactAriaComponents.Collection, {
316
+ items: props.items
317
+ }, props.children));
318
+ }
319
+
320
+ var _excluded = ["label", "description", "errorMessage", "children", "items"];
321
+ var styles = tailwindVariants.tv({
322
+ extend: focusRing,
323
+ base: "flex items-center text-start gap-4 w-full font-sans border border-black/10 cursor-default rounded-lg pl-3 pr-2 h-9 min-w-[72px] transition bg-neutral-50 [-webkit-tap-highlight-color:transparent]",
324
+ variants: {
325
+ isDisabled: {
326
+ "false": "text-neutral-800 hover:bg-neutral-100 pressed:bg-neutral-200 group-invalid:outline group-invalid:outline-red-600 forced-colors:group-invalid:outline-[Mark]",
327
+ "true": "border-transparent text-neutral-200 forced-colors:text-[GrayText] bg-neutral-100"
328
+ }
329
+ }
330
+ });
331
+ function Select(_ref) {
332
+ var label = _ref.label,
333
+ description = _ref.description,
334
+ errorMessage = _ref.errorMessage,
335
+ children = _ref.children,
336
+ items = _ref.items,
337
+ props = _objectWithoutPropertiesLoose(_ref, _excluded);
338
+ return /*#__PURE__*/React__default["default"].createElement(reactAriaComponents.Select, _extends({}, props, {
339
+ className: composeTailwindRenderProps(props.className, "group flex flex-col gap-1 relative font-sans")
340
+ }), label && /*#__PURE__*/React__default["default"].createElement(Label, null, label), /*#__PURE__*/React__default["default"].createElement(reactAriaComponents.Button, {
341
+ className: styles
342
+ }, /*#__PURE__*/React__default["default"].createElement(reactAriaComponents.SelectValue, {
343
+ className: "flex-1 text-sm text-nowrap"
344
+ }, function (_ref2) {
345
+ var selectedText = _ref2.selectedText,
346
+ defaultChildren = _ref2.defaultChildren;
347
+ return selectedText || defaultChildren;
348
+ }), /*#__PURE__*/React__default["default"].createElement("i", {
349
+ "aria-hidden": true,
350
+ className: "w-4 h-4 fa fa-chevron-down text-neutral-600 forced-colors:text-[ButtonText] group-disabled:text-neutral-200 forced-colors:group-disabled:text-[GrayText]"
351
+ })), description && /*#__PURE__*/React__default["default"].createElement(Description, null, description), /*#__PURE__*/React__default["default"].createElement(FieldError, null, errorMessage), /*#__PURE__*/React__default["default"].createElement(Popover, {
352
+ className: "min-w-(--trigger-width)"
353
+ }, /*#__PURE__*/React__default["default"].createElement(reactAriaComponents.ListBox, {
354
+ items: items,
355
+ className: "outline-hidden box-border p-1 max-h-[inherit] overflow-auto [clip-path:inset(0_0_0_0_round_.75rem)]"
356
+ }, children)));
357
+ }
358
+ function SelectItem(props) {
359
+ return /*#__PURE__*/React__default["default"].createElement(DropdownItem, props);
360
+ }
361
+ function SelectSection(props) {
362
+ return /*#__PURE__*/React__default["default"].createElement(DropdownSection, props);
363
+ }
364
+
188
365
  exports.Button = Button;
189
366
  exports.DefaultDialogClasses = DefaultDialogClasses;
190
367
  exports.DefaultModalDialogClasses = DefaultModalDialogClasses;
191
368
  exports.DefaultPopoverClasses = DefaultPopoverClasses;
369
+ exports.Description = Description;
192
370
  exports.Dialog = Dialog;
371
+ exports.FieldError = FieldError;
372
+ exports.FieldGroup = FieldGroup;
373
+ exports.Input = Input;
374
+ exports.Label = Label;
193
375
  exports.Modal = Modal;
194
376
  exports.ModalDialog = ModalDialog;
195
377
  exports.ModalTrigger = ModalTrigger;
196
378
  exports.Popover = Popover;
379
+ exports.Select = Select;
380
+ exports.SelectItem = SelectItem;
381
+ exports.SelectSection = SelectSection;
382
+ exports.composeTailwindRenderProps = composeTailwindRenderProps;
197
383
  exports.createOverlayState = createOverlayState;
384
+ exports.fieldBorderStyles = fieldBorderStyles;
385
+ exports.fieldGroupStyles = fieldGroupStyles;
386
+ exports.focusRing = focusRing;
198
387
  //# 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","../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\nexport function createOverlayState(ref: {\n value: boolean;\n}): OverlayTriggerState {\n return {\n isOpen: ref.value,\n setOpen: (o) => (ref.value = o),\n open: () => (ref.value = true),\n close: () => (ref.value = false),\n toggle: () => (ref.value = !ref.value),\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};\n\nexport interface ModalProps extends AriaModalOverlayProps, ModalClasses {\n state: OverlayTriggerState;\n children: React.ReactElement;\n portalContainer?: Element;\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 portalContainer,\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 portalContainer={portalContainer}>\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 // TODO: react-19\n {React.cloneElement(trigger, {\n ...otherTriggerProps,\n onClick: onPress,\n } as any)}\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","createOverlayState","isOpen","value","setOpen","o","open","toggle","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","ModalDialog","_ref3","footer","_ref3$defaultOpen","defaultOpen","_ref3$isDismissable","_excluded4","_DefaultModalDialogCl2"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/Button.tsx","../src/Dialog.tsx","../src/Popover.tsx","../src/Modal.tsx","../src/utils.ts","../src/Field.tsx","../src/ListBox.tsx","../src/Select.tsx"],"sourcesContent":["import {\n composeRenderProps,\n Button as RACButton,\n ButtonProps as RACButtonProps,\n} from \"react-aria-components\";\nimport React from \"react\";\n\nexport function Button({\n children,\n className,\n ...props\n}: RACButtonProps & { className?: string }) {\n return (\n <RACButton {...props} className={className}>\n {composeRenderProps(children, (children, { isPending }) => (\n <>{children}</>\n ))}\n </RACButton>\n );\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 {\n OverlayArrow,\n Popover as AriaPopover,\n PopoverProps as AriaPopoverProps,\n composeRenderProps,\n} from \"react-aria-components\";\nimport React from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { OverlayTriggerState } from \"react-stately\";\n\nexport interface PopoverProps extends Omit<AriaPopoverProps, \"children\"> {\n showArrow?: boolean;\n children: React.ReactNode;\n}\n\nconst styles = tv({\n base: \"font-sans bg-white forced-colors:bg-[Canvas] shadow-2xl rounded-xl bg-clip-padding border border-black/10 text-neutral-700 outline-0\",\n variants: {\n isEntering: {\n true: \"animate-in fade-in placement-bottom:slide-in-from-top-1 placement-top:slide-in-from-bottom-1 placement-left:slide-in-from-right-1 placement-right:slide-in-from-left-1 ease-out duration-200\",\n },\n isExiting: {\n true: \"animate-out fade-out placement-bottom:slide-out-to-top-1 placement-top:slide-out-to-bottom-1 placement-left:slide-out-to-right-1 placement-right:slide-out-to-left-1 ease-in duration-150\",\n },\n },\n});\n\nexport function Popover({\n children,\n showArrow,\n className,\n ...props\n}: PopoverProps) {\n let offset = showArrow ? 12 : 8;\n return (\n <AriaPopover\n offset={offset}\n {...props}\n className={composeRenderProps(className, (className, renderProps) =>\n styles({ ...renderProps, className }),\n )}\n >\n {showArrow && (\n <OverlayArrow className=\"group\">\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 12 12\"\n className=\"block fill-white forced-colors:fill-[Canvas] stroke-1 stroke-black/10 forced-colors:stroke-[ButtonBorder] group-placement-bottom:rotate-180 group-placement-left:-rotate-90 group-placement-right:rotate-90\"\n >\n <path d=\"M0 0 L6 6 L12 0\" />\n </svg>\n </OverlayArrow>\n )}\n {children}\n </AriaPopover>\n );\n}\n\nexport interface PopoverClasses {\n underlayClass?: string;\n popoverClass?: string;\n}\n\nexport const DefaultPopoverClasses = {\n underlayClass: \"fixed inset-0\",\n popoverClass: \"bg-white\",\n};\n\nexport function createOverlayState(ref: {\n value: boolean;\n}): OverlayTriggerState {\n return {\n isOpen: ref.value,\n setOpen: (o) => (ref.value = o),\n open: () => (ref.value = true),\n close: () => (ref.value = false),\n toggle: () => (ref.value = !ref.value),\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};\n\nexport interface ModalProps extends AriaModalOverlayProps, ModalClasses {\n state: OverlayTriggerState;\n children: React.ReactElement;\n portalContainer?: Element;\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 portalContainer,\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 portalContainer={portalContainer}>\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 // TODO: react-19\n {React.cloneElement(trigger, {\n ...otherTriggerProps,\n onClick: onPress,\n } as any)}\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","import { composeRenderProps } from \"react-aria-components\";\nimport { twMerge } from \"tailwind-merge\";\nimport { tv } from \"tailwind-variants\";\n\nexport const focusRing = tv({\n base: \"outline outline-secondary-600 forced-colors:outline-[Highlight] outline-offset-2\",\n variants: {\n isFocusVisible: {\n false: \"outline-0\",\n true: \"outline-2\",\n },\n },\n});\n\nexport function composeTailwindRenderProps<T>(\n className: string | ((v: T) => string) | undefined,\n tw: string,\n): string | ((v: T) => string) {\n return composeRenderProps(className, (className) => twMerge(tw, className));\n}\n","import React from \"react\";\nimport {\n FieldErrorProps,\n Group,\n GroupProps,\n InputProps,\n LabelProps,\n FieldError as RACFieldError,\n Input as RACInput,\n Label as RACLabel,\n Text,\n TextProps,\n composeRenderProps,\n} from \"react-aria-components\";\nimport { twMerge } from \"tailwind-merge\";\nimport { tv } from \"tailwind-variants\";\nimport { composeTailwindRenderProps, focusRing } from \"./utils\";\n\nexport function Label(props: LabelProps) {\n return (\n <RACLabel\n {...props}\n className={twMerge(\n \"font-sans text-sm text-neutral-600 font-medium cursor-default w-fit\",\n props.className,\n )}\n />\n );\n}\n\nexport function Description(props: TextProps) {\n return (\n <Text\n {...props}\n slot=\"description\"\n className={twMerge(\"text-sm text-neutral-600\", props.className)}\n />\n );\n}\n\nexport function FieldError(props: FieldErrorProps) {\n return (\n <RACFieldError\n {...props}\n className={composeTailwindRenderProps(\n props.className,\n \"text-sm text-red-600 forced-colors:text-[Mark]\",\n )}\n />\n );\n}\n\nexport const fieldBorderStyles = tv({\n base: \"transition\",\n variants: {\n isFocusWithin: {\n false:\n \"border-neutral-300 hover:border-neutral-400 forced-colors:border-[ButtonBorder]\",\n true: \"border-neutral-600 forced-colors:border-[Highlight]\",\n },\n isInvalid: {\n true: \"border-red-600 forced-colors:border-[Mark]\",\n },\n isDisabled: {\n true: \"border-neutral-200 forced-colors:border-[GrayText]\",\n },\n },\n});\n\nexport const fieldGroupStyles = tv({\n extend: focusRing,\n base: \"group flex items-center h-9 box-border bg-white forced-colors:bg-[Field] border rounded-lg overflow-hidden transition\",\n variants: fieldBorderStyles.variants,\n});\n\nexport function FieldGroup(props: GroupProps) {\n return (\n <Group\n {...props}\n className={composeRenderProps(props.className, (className, renderProps) =>\n fieldGroupStyles({ ...renderProps, className }),\n )}\n />\n );\n}\n\nexport function Input(props: InputProps) {\n return (\n <RACInput\n {...props}\n className={composeTailwindRenderProps(\n props.className,\n \"px-3 py-0 min-h-9 flex-1 min-w-0 border-0 outline outline-0 bg-white font-sans text-sm text-neutral-800 placeholder:text-neutral-600 disabled:text-neutral-200 disabled:placeholder:text-neutral-200 [-webkit-tap-highlight-color:transparent]\",\n )}\n />\n );\n}\n","import React from \"react\";\nimport {\n ListBox as AriaListBox,\n ListBoxItem as AriaListBoxItem,\n ListBoxProps as AriaListBoxProps,\n Collection,\n Header,\n ListBoxItemProps,\n ListBoxSection,\n SectionProps,\n composeRenderProps,\n} from \"react-aria-components\";\nimport { tv } from \"tailwind-variants\";\nimport { composeTailwindRenderProps, focusRing } from \"./utils\";\n\ninterface ListBoxProps<T>\n extends Omit<AriaListBoxProps<T>, \"layout\" | \"orientation\"> {}\n\nexport function ListBox<T extends object>({\n children,\n ...props\n}: ListBoxProps<T>) {\n return (\n <AriaListBox\n {...props}\n className={composeTailwindRenderProps(\n props.className,\n \"outline-0 p-1 w-[200px] bg-white border border-neutral-300 rounded-lg font-sans\",\n )}\n >\n {children}\n </AriaListBox>\n );\n}\n\nexport const itemStyles = tv({\n extend: focusRing,\n base: \"group relative flex items-center gap-8 cursor-default select-none py-1.5 px-2.5 rounded-md will-change-transform text-sm forced-color-adjust-none\",\n variants: {\n isSelected: {\n false:\n \"text-neutral-700 hover:bg-neutral-100 pressed:bg-neutral-100 -outline-offset-2\",\n true: \"bg-secondary-600 text-white forced-colors:bg-[Highlight] forced-colors:text-[HighlightText] [&:has(+[data-selected])]:rounded-b-none [&+[data-selected]]:rounded-t-none -outline-offset-4 outline-white forced-colors:outline-[HighlightText]\",\n },\n isDisabled: {\n true: \"text-neutral-300 forced-colors:text-[GrayText]\",\n },\n },\n});\n\nexport function ListBoxItem(props: ListBoxItemProps) {\n let textValue =\n props.textValue ||\n (typeof props.children === \"string\" ? props.children : undefined);\n return (\n <AriaListBoxItem {...props} textValue={textValue} className={itemStyles}>\n {composeRenderProps(props.children, (children) => (\n <>\n {children}\n <div className=\"absolute left-4 right-4 bottom-0 h-px bg-white/20 forced-colors:bg-[HighlightText] hidden [.group[data-selected]:has(+[data-selected])_&]:block\" />\n </>\n ))}\n </AriaListBoxItem>\n );\n}\n\nexport const dropdownItemStyles = tv({\n base: \"group flex items-center gap-4 cursor-default select-none py-2 pl-3 pr-3 selected:pr-1 rounded-lg outline outline-0 text-sm forced-color-adjust-none no-underline [&[href]]:cursor-pointer [-webkit-tap-highlight-color:transparent]\",\n variants: {\n isDisabled: {\n false: \"text-neutral-900\",\n true: \"text-neutral-300 forced-colors:text-[GrayText]\",\n },\n isPressed: {\n true: \"bg-neutral-100\",\n },\n isFocused: {\n true: \"bg-secondary-600 text-white forced-colors:bg-[Highlight] forced-colors:text-[HighlightText]\",\n },\n },\n compoundVariants: [\n {\n isFocused: false,\n isOpen: true,\n className: \"bg-neutral-100\",\n },\n ],\n});\n\nexport function DropdownItem(props: ListBoxItemProps) {\n let textValue =\n props.textValue ||\n (typeof props.children === \"string\" ? props.children : undefined);\n return (\n <AriaListBoxItem\n {...props}\n textValue={textValue}\n className={dropdownItemStyles}\n >\n {composeRenderProps(props.children, (children, { isSelected }) => (\n <>\n <span className=\"flex items-center flex-1 gap-2 font-normal truncate group-selected:font-semibold\">\n {children}\n </span>\n <span className=\"flex items-center w-5\">\n {isSelected && <i className=\"w-4 h-4 fa fa-check\" />}\n </span>\n </>\n ))}\n </AriaListBoxItem>\n );\n}\n\nexport interface DropdownSectionProps<T> extends SectionProps<T> {\n title?: string;\n items?: any;\n}\n\nexport function DropdownSection<T extends object>(\n props: DropdownSectionProps<T>,\n) {\n return (\n <ListBoxSection className=\"first:-mt-[5px] after:content-[''] after:block after:h-[5px] last:after:hidden\">\n <Header className=\"text-sm font-semibold text-neutral-500 px-4 py-1 truncate sticky -top-[5px] -mt-px -mx-1 z-10 bg-neutral-100/60 backdrop-blur-md supports-[-moz-appearance:none]:bg-neutral-100 border-y border-y-neutral-200 [&+*]:mt-1\">\n {props.title}\n </Header>\n <Collection items={props.items}>{props.children}</Collection>\n </ListBoxSection>\n );\n}\n","import React from \"react\";\nimport {\n Select as AriaSelect,\n SelectProps as AriaSelectProps,\n Button,\n ListBox,\n ListBoxItemProps,\n SelectValue,\n ValidationResult,\n} from \"react-aria-components\";\nimport { tv } from \"tailwind-variants\";\nimport { Description, FieldError, Label } from \"./Field\";\nimport { DropdownItem, DropdownSection, DropdownSectionProps } from \"./ListBox\";\nimport { Popover } from \"./Popover\";\nimport { composeTailwindRenderProps, focusRing } from \"./utils\";\n\nconst styles = tv({\n extend: focusRing,\n base: \"flex items-center text-start gap-4 w-full font-sans border border-black/10 cursor-default rounded-lg pl-3 pr-2 h-9 min-w-[72px] transition bg-neutral-50 [-webkit-tap-highlight-color:transparent]\",\n variants: {\n isDisabled: {\n false:\n \"text-neutral-800 hover:bg-neutral-100 pressed:bg-neutral-200 group-invalid:outline group-invalid:outline-red-600 forced-colors:group-invalid:outline-[Mark]\",\n true: \"border-transparent text-neutral-200 forced-colors:text-[GrayText] bg-neutral-100\",\n },\n },\n});\n\nexport interface SelectProps<T extends object>\n extends Omit<AriaSelectProps<T>, \"children\"> {\n label?: string;\n description?: string;\n errorMessage?: string | ((validation: ValidationResult) => string);\n items?: Iterable<T>;\n children: React.ReactNode | ((item: T) => React.ReactNode);\n}\n\nexport function Select<T extends object>({\n label,\n description,\n errorMessage,\n children,\n items,\n ...props\n}: SelectProps<T>) {\n return (\n <AriaSelect\n {...props}\n className={composeTailwindRenderProps(\n props.className,\n \"group flex flex-col gap-1 relative font-sans\",\n )}\n >\n {label && <Label>{label}</Label>}\n <Button className={styles}>\n <SelectValue className=\"flex-1 text-sm text-nowrap\">\n {({ selectedText, defaultChildren }) =>\n selectedText || defaultChildren\n }\n </SelectValue>\n <i\n aria-hidden\n className={\n \"w-4 h-4 fa fa-chevron-down text-neutral-600 forced-colors:text-[ButtonText] group-disabled:text-neutral-200 forced-colors:group-disabled:text-[GrayText]\"\n }\n />\n </Button>\n {description && <Description>{description}</Description>}\n <FieldError>{errorMessage}</FieldError>\n <Popover className=\"min-w-(--trigger-width)\">\n <ListBox\n items={items}\n className=\"outline-hidden box-border p-1 max-h-[inherit] overflow-auto [clip-path:inset(0_0_0_0_round_.75rem)]\"\n >\n {children}\n </ListBox>\n </Popover>\n </AriaSelect>\n );\n}\n\nexport function SelectItem(props: ListBoxItemProps) {\n return <DropdownItem {...props} />;\n}\n\nexport function SelectSection<T extends object>(\n props: DropdownSectionProps<T>,\n) {\n return <DropdownSection {...props} />;\n}\n"],"names":["Button","_ref","children","className","props","_objectWithoutPropertiesLoose","_excluded","React","createElement","RACButton","_extends","composeRenderProps","_ref2","Fragment","DefaultDialogClasses","Dialog","title","ref","useRef","_DefaultDialogClasses","titleClass","_useDialog","useDialog","dialogProps","titleProps","styles","tv","base","variants","isEntering","isExiting","Popover","showArrow","offset","AriaPopover","renderProps","OverlayArrow","width","height","viewBox","d","DefaultPopoverClasses","underlayClass","popoverClass","createOverlayState","isOpen","value","setOpen","o","open","close","toggle","DefaultModalDialogClasses","containerClass","Modal","state","isDismissable","isKeyboardDismissDisabled","shouldCloseOnInteractOutside","portalContainer","_useModalOverlay","useModalOverlay","modalProps","underlayProps","_DefaultModalDialogCl","Overlay","ModalTrigger","trigger","_excluded2","useOverlayTriggerState","_useOverlayTrigger","useOverlayTrigger","type","triggerProps","overlayProps","onPress","otherTriggerProps","_excluded3","cloneElement","onClick","ModalDialog","_ref3","footer","_ref3$defaultOpen","defaultOpen","_ref3$isDismissable","_excluded4","_DefaultModalDialogCl2","focusRing","isFocusVisible","composeTailwindRenderProps","tw","twMerge","Label","RACLabel","Description","Text","slot","FieldError","RACFieldError","fieldBorderStyles","isFocusWithin","isInvalid","isDisabled","fieldGroupStyles","extend","FieldGroup","Group","Input","RACInput","isSelected","dropdownItemStyles","isPressed","isFocused","compoundVariants","DropdownItem","textValue","undefined","AriaListBoxItem","DropdownSection","ListBoxSection","Header","Collection","items","Select","label","description","errorMessage","AriaSelect","SelectValue","selectedText","defaultChildren","ListBox","SelectItem","SelectSection"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOM,SAAUA,MAAMA,CAAAC,IAAA,EAIoB;AAAA,EAAA,IAHxCC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IACRC,SAAS,GAAAF,IAAA,CAATE,SAAS;AACNC,IAAAA,KAAK,GAAAC,6BAAA,CAAAJ,IAAA,EAAAK,WAAA,CAAA,CAAA;EAER,oBACEC,yBAAA,CAAAC,aAAA,CAACC,0BAAS,EAAAC,QAAA,KAAKN,KAAK,EAAA;AAAED,IAAAA,SAAS,EAAEA,SAAAA;AAAU,GAAA,CAAA,EACxCQ,sCAAkB,CAACT,QAAQ,EAAE,UAACA,QAAQ,EAAAU,KAAA,EAAA;IAAa,oBAClDL,yBAAA,CAAAC,aAAA,CAAAD,yBAAA,CAAAM,QAAA,EAAGX,IAAAA,EAAAA,QAAS,CAAG,CAAA;AAAA,GAChB,CACQ,CAAC,CAAA;AAEhB;;;ACNaY,IAAAA,oBAAoB,GAAkB,GAAE;AAC/C,SAAUC,MAAMA,CAAAd,IAAA,EAA2C;AAAA,EAAA,IAAxCe,KAAK,GAAAf,IAAA,CAALe,KAAK;IAAEd,QAAQ,GAAAD,IAAA,CAARC,QAAQ;AAAKE,IAAAA,KAAK,GAAAC,6BAAA,CAAAJ,IAAA,EAAAK,WAAA,CAAA,CAAA;AAChD,EAAA,IAAIW,GAAG,GAAGC,YAAM,CAAC,IAAI,CAAC,CAAA;AACtB,EAAA,IAAAC,qBAAA,GAAAT,QAAA,CACKI,EAAAA,EAAAA,oBAAoB,EACpBV,KAAK,CAAA;IAFFD,SAAS,GAAAgB,qBAAA,CAAThB,SAAS;IAAEiB,UAAU,GAAAD,qBAAA,CAAVC,UAAU,CAAA;AAI7B,EAAA,IAAAC,UAAA,GAAkCC,mBAAS,CAAClB,KAAK,EAAEa,GAAG,CAAC;IAAjDM,WAAW,GAAAF,UAAA,CAAXE,WAAW;IAAEC,UAAU,GAAAH,UAAA,CAAVG,UAAU,CAAA;AAE7B,EAAA,oBACEjB,yBAAA,CAAAC,aAAA,CAAAE,KAAAA,EAAAA,QAAA,KAASa,WAAW,EAAA;AAAEN,IAAAA,GAAG,EAAEA,GAAI;AAACd,IAAAA,SAAS,EAAEA,SAAAA;GACxCa,CAAAA,EAAAA,KAAK,iBACJT,yBAAA,CAAAC,aAAA,CAAAE,IAAAA,EAAAA,QAAA,KAAQc,UAAU,EAAA;AAAErB,IAAAA,SAAS,EAAEiB,UAAAA;AAAW,GAAA,CAAA,EACvCJ,KACC,CACL,EACAd,QACE,CAAC,CAAA;AAEV;;;ACjBA,IAAMuB,QAAM,GAAGC,mBAAE,CAAC;AAChBC,EAAAA,IAAI,EAAE,sIAAsI;AAC5IC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,UAAU,EAAE;MACV,MAAM,EAAA,8LAAA;KACP;AACDC,IAAAA,SAAS,EAAE;MACT,MAAM,EAAA,2LAAA;AACP,KAAA;AACF,GAAA;AACF,CAAA,CAAC,CAAA;AAEc,SAAAC,OAAOA,CAAA9B,IAAA,EAKR;AAAA,EAAA,IAJbC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IACR8B,SAAS,GAAA/B,IAAA,CAAT+B,SAAS;IACT7B,SAAS,GAAAF,IAAA,CAATE,SAAS;AACNC,IAAAA,KAAK,GAAAC,6BAAA,CAAAJ,IAAA,EAAAK,WAAA,CAAA,CAAA;AAER,EAAA,IAAI2B,MAAM,GAAGD,SAAS,GAAG,EAAE,GAAG,CAAC,CAAA;AAC/B,EAAA,oBACEzB,yBAAA,CAAAC,aAAA,CAAC0B,2BAAW,EAAAxB,QAAA,CAAA;AACVuB,IAAAA,MAAM,EAAEA,MAAAA;AAAO,GAAA,EACX7B,KAAK,EAAA;IACTD,SAAS,EAAEQ,sCAAkB,CAACR,SAAS,EAAE,UAACA,SAAS,EAAEgC,WAAW,EAAA;AAAA,MAAA,OAC9DV,QAAM,CAAAf,QAAA,CAAA,EAAA,EAAMyB,WAAW,EAAA;AAAEhC,QAAAA,SAAS,EAATA,SAAAA;AAAS,OAAA,CAAE,CAAC,CAAA;AAAA,KAAA,CAAA;AACrC,GAAA,CAAA,EAED6B,SAAS,iBACRzB,yBAAA,CAAAC,aAAA,CAAC4B,gCAAY,EAAA;AAACjC,IAAAA,SAAS,EAAC,OAAA;GACtBI,eAAAA,yBAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AACE6B,IAAAA,KAAK,EAAE,EAAG;AACVC,IAAAA,MAAM,EAAE,EAAG;AACXC,IAAAA,OAAO,EAAC,WAAW;AACnBpC,IAAAA,SAAS,EAAC,6MAAA;GAEVI,eAAAA,yBAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMgC,IAAAA,CAAC,EAAC,iBAAA;AAAiB,GAC3B,CAAK,CACO,CACf,EACAtC,QACU,CAAC,CAAA;AAElB,CAAA;AAOO,IAAMuC,qBAAqB,GAAG;AACnCC,EAAAA,aAAa,EAAE,eAAe;AAC9BC,EAAAA,YAAY,EAAE,UAAA;EACf;AAEK,SAAUC,kBAAkBA,CAAC3B,GAElC,EAAA;EACC,OAAO;IACL4B,MAAM,EAAE5B,GAAG,CAAC6B,KAAK;AACjBC,IAAAA,OAAO,EAAE,SAATA,OAAOA,CAAGC,CAAC,EAAA;AAAA,MAAA,OAAM/B,GAAG,CAAC6B,KAAK,GAAGE,CAAC,CAAA;KAAC;IAC/BC,IAAI,EAAE,SAANA,IAAIA,GAAA;AAAA,MAAA,OAAShC,GAAG,CAAC6B,KAAK,GAAG,IAAI,CAAA;KAAC;IAC9BI,KAAK,EAAE,SAAPA,KAAKA,GAAA;AAAA,MAAA,OAASjC,GAAG,CAAC6B,KAAK,GAAG,KAAK,CAAA;KAAC;IAChCK,MAAM,EAAE,SAARA,MAAMA,GAAA;AAAA,MAAA,OAASlC,GAAG,CAAC6B,KAAK,GAAG,CAAC7B,GAAG,CAAC6B,KAAK,CAAA;AAAA,KAAA;GACtC,CAAA;AACH;;;;;;AC1DO,IAAMM,yBAAyB,GAAuB;AAC3DV,EAAAA,aAAa,EACX,mGAAmG;AACrGW,EAAAA,cAAc,EACZ,gFAAA;EACH;SAsBeC,KAAKA,CAAArD,IAAA,EAQR;AAAA,EAAA,IAPXsD,KAAK,GAAAtD,IAAA,CAALsD,KAAK;IACLrD,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IACRsD,aAAa,GAAAvD,IAAA,CAAbuD,aAAa;IACbC,yBAAyB,GAAAxD,IAAA,CAAzBwD,yBAAyB;IACzBC,4BAA4B,GAAAzD,IAAA,CAA5ByD,4BAA4B;IAC5BC,eAAe,GAAA1D,IAAA,CAAf0D,eAAe;AACZvD,IAAAA,KAAK,GAAAC,6BAAA,CAAAJ,IAAA,EAAAK,WAAA,CAAA,CAAA;AAER,EAAA,IAAIW,GAAG,GAAGV,yBAAK,CAACW,MAAM,CAAC,IAAI,CAAC,CAAA;EAC5B,IAAA0C,gBAAA,GAAoCC,yBAAe,CACjD;AAAEL,MAAAA,aAAa,EAAbA,aAAa;AAAEC,MAAAA,yBAAyB,EAAzBA,yBAAyB;AAAEC,MAAAA,4BAA4B,EAA5BA,4BAAAA;AAA8B,KAAA,EAC1EH,KAAK,EACLtC,GAAG,CACJ;IAJK6C,UAAU,GAAAF,gBAAA,CAAVE,UAAU;IAAEC,aAAa,GAAAH,gBAAA,CAAbG,aAAa,CAAA;AAM/B,EAAA,IAAAC,qBAAA,GAAAtD,QAAA,CACK0C,EAAAA,EAAAA,yBAAyB,EACzBhD,KAAK,CAAA;IAFFsC,aAAa,GAAAsB,qBAAA,CAAbtB,aAAa;IAAEW,cAAc,GAAAW,qBAAA,CAAdX,cAAc,CAAA;AAKrC,EAAA,oBACE9C,yBAAA,CAAAC,aAAA,CAACyD,iBAAO,EAAA;AAACN,IAAAA,eAAe,EAAEA,eAAAA;AAAgB,GAAA,eACxCpD,yBAAA,CAAAC,aAAA,CAAA,KAAA,EAAAE,QAAA,CAAA;AAAKP,IAAAA,SAAS,EAAEuC,aAAAA;GAAmBqB,EAAAA,aAAa,gBAC9CxD,yBAAA,CAAAC,aAAA,CAAAE,KAAAA,EAAAA,QAAA,KAASoD,UAAU,EAAA;AAAE7C,IAAAA,GAAG,EAAEA,GAAI;AAACd,IAAAA,SAAS,EAAEkD,cAAAA;GACvCnD,CAAAA,EAAAA,QACE,CACF,CACE,CAAC,CAAA;AAEd,CAAA;AAEM,SAAUgE,YAAYA,CAAAtD,KAAA,EAIF;AAAA,EAAA,IAHxBuD,OAAO,GAAAvD,KAAA,CAAPuD,OAAO;IACPjE,QAAQ,GAAAU,KAAA,CAARV,QAAQ;AACLE,IAAAA,KAAK,GAAAC,6BAAA,CAAAO,KAAA,EAAAwD,UAAA,CAAA,CAAA;EAER,IAAIb,KAAK,GAAGc,mCAAsB,CAAA3D,QAAA,CAAMN,EAAAA,EAAAA,KAAK,CAAE,CAAC,CAAA;EAChD,IAAAkE,kBAAA,GAAqCC,2BAAiB,CACpD;AAAEC,MAAAA,IAAI,EAAE,QAAA;KAAU,EAClBjB,KAAK,CACN;IAHKkB,YAAY,GAAAH,kBAAA,CAAZG,YAAY;IAAEC,YAAY,GAAAJ,kBAAA,CAAZI,YAAY,CAAA;AAKhC,EAAA,IAAQC,OAAO,GAA2BF,YAAY,CAA9CE,OAAO;AAAKC,IAAAA,iBAAiB,GAAAvE,6BAAA,CAAKoE,YAAY,EAAAI,UAAA,CAAA,CAAA;AACtD,EAAA,oBACEtE,yBAAA,CAAAC,aAAA,CAAAD,yBAAA,CAAAM,QAAA,EAEE,IAAA,EAAA,mBAAA,EAACN,yBAAK,CAACuE,YAAY,CAACX,OAAO,EAAAzD,QAAA,KACtBkE,iBAAiB,EAAA;AACpBG,IAAAA,OAAO,EAAEJ,OAAAA;AAAO,GAAA,CACV,CAAC,EACRpB,KAAK,CAACV,MAAM,iBACXtC,yBAAA,CAAAC,aAAA,CAAC8C,KAAK,EAAA5C,QAAA,CAAA;AAAC6C,IAAAA,KAAK,EAAEA,KAAAA;GAAWnD,EAAAA,KAAK,CAC3BG,EAAAA,yBAAK,CAACuE,YAAY,CAAC5E,QAAQ,EAAEwE,YAAY,CACrC,CAEX,CAAG,CAAA;AAEP,CAAA;AAEM,SAAUM,WAAWA,CAAAC,KAAA,EAOR;AAAA,EAAA,IANjB/E,QAAQ,GAAA+E,KAAA,CAAR/E,QAAQ,CAAA;IACRgF,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;IAEjBjF,KAAK,GAAAC,6BAAA,CAAA4E,KAAA,EAAAK,UAAA,EAAA;AAER,EAAA,IAAAC,sBAAA,GAAA7E,QAAA,CACK0C,EAAAA,EAAAA,yBAAyB,EACzBhD,KAAK,CAAA;IAFFD,SAAS,GAAAoF,sBAAA,CAATpF,SAAS,CAAA;AAKjB,EAAA,oBACEI,yBAAA,CAAAC,aAAA,CAAC0D,YAAY,EAAAxD,QAAA,CAAA;AACX0E,IAAAA,WAAW,EAAEA,WAAY;AACzB5B,IAAAA,aAAa,EAAEA,aAAAA;GACXpD,EAAAA,KAAK,gBAETG,yBAAA,CAAAC,aAAA,CAACO,MAAM,EAAAL,QAAA,CAAA;AAACP,IAAAA,SAAS,EAAEA,SAAAA;AAAU,GAAA,EAAKC,KAAK,CACpCF,EAAAA,QAAQ,EACRgF,MACK,CACI,CAAC,CAAA;AAEnB;;ACjIaM,IAAAA,SAAS,GAAG9D,mBAAE,CAAC;AAC1BC,EAAAA,IAAI,EAAE,kFAAkF;AACxFC,EAAAA,QAAQ,EAAE;AACR6D,IAAAA,cAAc,EAAE;AACd,MAAA,OAAA,EAAO,WAAW;MAClB,MAAM,EAAA,WAAA;AACP,KAAA;AACF,GAAA;AACF,CAAA,EAAC;AAEc,SAAAC,0BAA0BA,CACxCvF,SAAkD,EAClDwF,EAAU,EAAA;AAEV,EAAA,OAAOhF,sCAAkB,CAACR,SAAS,EAAE,UAACA,SAAS,EAAA;AAAA,IAAA,OAAKyF,qBAAO,CAACD,EAAE,EAAExF,SAAS,CAAC,CAAA;GAAC,CAAA,CAAA;AAC7E;;ACDM,SAAU0F,KAAKA,CAACzF,KAAiB,EAAA;EACrC,oBACEG,yBAAA,CAAAC,aAAA,CAACsF,yBAAQ,EAAApF,QAAA,KACHN,KAAK,EAAA;AACTD,IAAAA,SAAS,EAAEyF,qBAAO,CAChB,qEAAqE,EACrExF,KAAK,CAACD,SAAS,CAAA;AACf,GAAA,CACF,CAAA,CAAA;AAEN,CAAA;AAEM,SAAU4F,WAAWA,CAAC3F,KAAgB,EAAA;EAC1C,oBACEG,yBAAA,CAAAC,aAAA,CAACwF,wBAAI,EAAAtF,QAAA,KACCN,KAAK,EAAA;AACT6F,IAAAA,IAAI,EAAC,aAAa;AAClB9F,IAAAA,SAAS,EAAEyF,qBAAO,CAAC,0BAA0B,EAAExF,KAAK,CAACD,SAAS,CAAA;AAAE,GAAA,CAChE,CAAA,CAAA;AAEN,CAAA;AAEM,SAAU+F,UAAUA,CAAC9F,KAAsB,EAAA;EAC/C,oBACEG,yBAAA,CAAAC,aAAA,CAAC2F,8BAAa,EAAAzF,QAAA,KACRN,KAAK,EAAA;AACTD,IAAAA,SAAS,EAAEuF,0BAA0B,CACnCtF,KAAK,CAACD,SAAS,EACf,gDAAgD,CAAA;AAChD,GAAA,CACF,CAAA,CAAA;AAEN,CAAA;AAEaiG,IAAAA,iBAAiB,GAAG1E,mBAAE,CAAC;AAClCC,EAAAA,IAAI,EAAE,YAAY;AAClBC,EAAAA,QAAQ,EAAE;AACRyE,IAAAA,aAAa,EAAE;AACb,MAAA,OAAA,EACE,iFAAiF;MACnF,MAAM,EAAA,qDAAA;KACP;AACDC,IAAAA,SAAS,EAAE;MACT,MAAM,EAAA,4CAAA;KACP;AACDC,IAAAA,UAAU,EAAE;MACV,MAAM,EAAA,oDAAA;AACP,KAAA;AACF,GAAA;AACF,CAAA,EAAC;AAEWC,IAAAA,gBAAgB,GAAG9E,mBAAE,CAAC;AACjC+E,EAAAA,MAAM,EAAEjB,SAAS;AACjB7D,EAAAA,IAAI,EAAE,uHAAuH;EAC7HC,QAAQ,EAAEwE,iBAAiB,CAACxE,QAAAA;AAC7B,CAAA,EAAC;AAEI,SAAU8E,UAAUA,CAACtG,KAAiB,EAAA;EAC1C,oBACEG,yBAAA,CAAAC,aAAA,CAACmG,yBAAK,EAAAjG,QAAA,KACAN,KAAK,EAAA;IACTD,SAAS,EAAEQ,sCAAkB,CAACP,KAAK,CAACD,SAAS,EAAE,UAACA,SAAS,EAAEgC,WAAW,EAAA;AAAA,MAAA,OACpEqE,gBAAgB,CAAA9F,QAAA,CAAA,EAAA,EAAMyB,WAAW,EAAA;AAAEhC,QAAAA,SAAS,EAATA,SAAAA;AAAS,OAAA,CAAE,CAAC,CAAA;AAAA,KAAA,CAAA;AAC/C,GAAA,CAAA,CACF,CAAA;AAEN,CAAA;AAEM,SAAUyG,KAAKA,CAACxG,KAAiB,EAAA;EACrC,oBACEG,yBAAA,CAAAC,aAAA,CAACqG,yBAAQ,EAAAnG,QAAA,KACHN,KAAK,EAAA;AACTD,IAAAA,SAAS,EAAEuF,0BAA0B,CACnCtF,KAAK,CAACD,SAAS,EACf,gPAAgP,CAAA;AAChP,GAAA,CACF,CAAA,CAAA;AAEN;;AC7D0BuB,mBAAE,CAAC;AAC3B+E,EAAAA,MAAM,EAAEjB,SAAS;AACjB7D,EAAAA,IAAI,EAAE,mJAAmJ;AACzJC,EAAAA,QAAQ,EAAE;AACRkF,IAAAA,UAAU,EAAE;AACV,MAAA,OAAA,EACE,gFAAgF;MAClF,MAAM,EAAA,+OAAA;KACP;AACDP,IAAAA,UAAU,EAAE;MACV,MAAM,EAAA,gDAAA;AACP,KAAA;AACF,GAAA;AACF,CAAA,EAAC;AAkBK,IAAMQ,kBAAkB,GAAGrF,mBAAE,CAAC;AACnCC,EAAAA,IAAI,EAAE,qOAAqO;AAC3OC,EAAAA,QAAQ,EAAE;AACR2E,IAAAA,UAAU,EAAE;AACV,MAAA,OAAA,EAAO,kBAAkB;MACzB,MAAM,EAAA,gDAAA;KACP;AACDS,IAAAA,SAAS,EAAE;MACT,MAAM,EAAA,gBAAA;KACP;AACDC,IAAAA,SAAS,EAAE;MACT,MAAM,EAAA,6FAAA;AACP,KAAA;GACF;AACDC,EAAAA,gBAAgB,EAAE,CAChB;AACED,IAAAA,SAAS,EAAE,KAAK;AAChBpE,IAAAA,MAAM,EAAE,IAAI;AACZ1C,IAAAA,SAAS,EAAE,gBAAA;GACZ,CAAA;AAEJ,CAAA,CAAC,CAAA;AAEI,SAAUgH,YAAYA,CAAC/G,KAAuB,EAAA;AAClD,EAAA,IAAIgH,SAAS,GACXhH,KAAK,CAACgH,SAAS,KACd,OAAOhH,KAAK,CAACF,QAAQ,KAAK,QAAQ,GAAGE,KAAK,CAACF,QAAQ,GAAGmH,SAAS,CAAC,CAAA;EACnE,oBACE9G,yBAAA,CAAAC,aAAA,CAAC8G,+BAAe,EAAA5G,QAAA,KACVN,KAAK,EAAA;AACTgH,IAAAA,SAAS,EAAEA,SAAU;AACrBjH,IAAAA,SAAS,EAAE4G,kBAAAA;GAEVpG,CAAAA,EAAAA,sCAAkB,CAACP,KAAK,CAACF,QAAQ,EAAE,UAACA,QAAQ,EAAAU,KAAA,EAAA;AAAA,IAAA,IAAIkG,UAAU,GAAAlG,KAAA,CAAVkG,UAAU,CAAA;IAAA,oBACzDvG,yBAAA,CAAAC,aAAA,CAAAD,yBAAA,CAAAM,QAAA,EAAA,IAAA,eACEN,yBAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAML,MAAAA,SAAS,EAAC,kFAAA;AAAkF,KAAA,EAC/FD,QACG,CACN,eAAAK,yBAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAML,MAAAA,SAAS,EAAC,uBAAA;AAAuB,KAAA,EACpC2G,UAAU,iBAAIvG,yBAAA,CAAAC,aAAA,CAAA,GAAA,EAAA;AAAGL,MAAAA,SAAS,EAAC,qBAAA;KAAqB,CAC7C,CACL,CAAA,CAAA;AAAA,GACJ,CACc,CAAC,CAAA;AAEtB,CAAA;AAOM,SAAUoH,eAAeA,CAC7BnH,KAA8B,EAAA;AAE9B,EAAA,oBACEG,yBAAA,CAAAC,aAAA,CAACgH,kCAAc,EAAA;AAACrH,IAAAA,SAAS,EAAC,gFAAA;AAAgF,GAAA,eACxGI,yBAAA,CAAAC,aAAA,CAACiH,0BAAM,EAAA;AAACtH,IAAAA,SAAS,EAAC,0NAAA;GACfC,EAAAA,KAAK,CAACY,KACD,CACR,eAAAT,yBAAA,CAAAC,aAAA,CAACkH,8BAAU,EAAA;IAACC,KAAK,EAAEvH,KAAK,CAACuH,KAAAA;AAAM,GAAA,EAAEvH,KAAK,CAACF,QAAqB,CAC9C,CAAC,CAAA;AAErB;;;ACjHA,IAAMuB,MAAM,GAAGC,mBAAE,CAAC;AAChB+E,EAAAA,MAAM,EAAEjB,SAAS;AACjB7D,EAAAA,IAAI,EAAE,oMAAoM;AAC1MC,EAAAA,QAAQ,EAAE;AACR2E,IAAAA,UAAU,EAAE;AACV,MAAA,OAAA,EACE,6JAA6J;MAC/J,MAAM,EAAA,kFAAA;AACP,KAAA;AACF,GAAA;AACF,CAAA,CAAC,CAAA;SAWcqB,MAAMA,CAAA3H,IAAA,EAOL;AAAA,EAAA,IANf4H,KAAK,GAAA5H,IAAA,CAAL4H,KAAK;IACLC,WAAW,GAAA7H,IAAA,CAAX6H,WAAW;IACXC,YAAY,GAAA9H,IAAA,CAAZ8H,YAAY;IACZ7H,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IACRyH,KAAK,GAAA1H,IAAA,CAAL0H,KAAK;AACFvH,IAAAA,KAAK,GAAAC,6BAAA,CAAAJ,IAAA,EAAAK,SAAA,CAAA,CAAA;EAER,oBACEC,yBAAA,CAAAC,aAAA,CAACwH,0BAAU,EAAAtH,QAAA,KACLN,KAAK,EAAA;AACTD,IAAAA,SAAS,EAAEuF,0BAA0B,CACnCtF,KAAK,CAACD,SAAS,EACf,8CAA8C,CAAA;AAC9C,GAAA,CAAA,EAED0H,KAAK,iBAAItH,yBAAA,CAAAC,aAAA,CAACqF,KAAK,EAAEgC,IAAAA,EAAAA,KAAa,CAAC,eAChCtH,yBAAA,CAAAC,aAAA,CAACR,0BAAM,EAAA;AAACG,IAAAA,SAAS,EAAEsB,MAAAA;AAAO,GAAA,eACxBlB,yBAAA,CAAAC,aAAA,CAACyH,+BAAW,EAAA;AAAC9H,IAAAA,SAAS,EAAC,4BAAA;AAA4B,GAAA,EAChD,UAAAS,KAAA,EAAA;AAAA,IAAA,IAAGsH,YAAY,GAAAtH,KAAA,CAAZsH,YAAY;MAAEC,eAAe,GAAAvH,KAAA,CAAfuH,eAAe,CAAA;IAAA,OAC/BD,YAAY,IAAIC,eAClB,CAAA;AAAA,GACW,CACb,eAAA5H,yBAAA,CAAAC,aAAA,CAAA,GAAA,EAAA;IACE,aAAW,EAAA,IAAA;AACXL,IAAAA,SAAS,EACP,0JAAA;GAGN,CAAQ,CACR,EAAC2H,WAAW,iBAAIvH,yBAAA,CAAAC,aAAA,CAACuF,WAAW,EAAA,IAAA,EAAE+B,WAAyB,CAAC,eACxDvH,yBAAA,CAAAC,aAAA,CAAC0F,UAAU,EAAE6B,IAAAA,EAAAA,YAAyB,CACtC,eAAAxH,yBAAA,CAAAC,aAAA,CAACuB,OAAO,EAAA;AAAC5B,IAAAA,SAAS,EAAC,yBAAA;AAAyB,GAAA,eAC1CI,yBAAA,CAAAC,aAAA,CAAC4H,2BAAO,EAAA;AACNT,IAAAA,KAAK,EAAEA,KAAM;AACbxH,IAAAA,SAAS,EAAC,qGAAA;GAETD,EAAAA,QACM,CACF,CACC,CAAC,CAAA;AAEjB,CAAA;AAEM,SAAUmI,UAAUA,CAACjI,KAAuB,EAAA;AAChD,EAAA,oBAAOG,yBAAA,CAAAC,aAAA,CAAC2G,YAAY,EAAK/G,MAAS,CAAA;AACpC,CAAA;AAEM,SAAUkI,aAAaA,CAC3BlI,KAA8B,EAAA;AAE9B,EAAA,oBAAOG,yBAAA,CAAAC,aAAA,CAAC+G,eAAe,EAAKnH,MAAS,CAAA;AACvC;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/lib/utils.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ export declare const focusRing: import("tailwind-variants").TVReturnType<{
2
+ isFocusVisible: {
3
+ false: string;
4
+ true: string;
5
+ };
6
+ }, undefined, "outline outline-secondary-600 forced-colors:outline-[Highlight] outline-offset-2", {
7
+ isFocusVisible: {
8
+ false: string;
9
+ true: string;
10
+ };
11
+ }, undefined, import("tailwind-variants").TVReturnType<{
12
+ isFocusVisible: {
13
+ false: string;
14
+ true: string;
15
+ };
16
+ }, undefined, "outline outline-secondary-600 forced-colors:outline-[Highlight] outline-offset-2", unknown, unknown, undefined>>;
17
+ export declare function composeTailwindRenderProps<T>(className: string | ((v: T) => string) | undefined, tw: string): string | ((v: T) => string);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astroapps/aria-base",
3
- "version": "1.4.0",
3
+ "version": "1.5.1",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -20,7 +20,10 @@
20
20
  "dependencies": {
21
21
  "react-stately": "^3.40.0",
22
22
  "react-aria": "^3.42.0",
23
- "clsx": "^2"
23
+ "react-aria-components": "^1.8.0",
24
+ "clsx": "^2",
25
+ "tailwind-variants": "^3.2.2",
26
+ "tailwind-merge": "^3.4.0"
24
27
  },
25
28
  "devDependencies": {
26
29
  "react": "^18.2.0 || ^19",
package/src/Button.tsx CHANGED
@@ -1,12 +1,20 @@
1
- import { AriaButtonProps, useButton } from "react-aria";
2
- import React, { useRef } from "react";
1
+ import {
2
+ composeRenderProps,
3
+ Button as RACButton,
4
+ ButtonProps as RACButtonProps,
5
+ } from "react-aria-components";
6
+ import React from "react";
3
7
 
4
8
  export function Button({
5
9
  children,
6
10
  className,
7
11
  ...props
8
- }: AriaButtonProps<"button"> & { className?: string }) {
9
- const ref = useRef(null);
10
- const { buttonProps } = useButton(props, ref);
11
- return <button {...buttonProps} className={className} children={children} />;
12
+ }: RACButtonProps & { className?: string }) {
13
+ return (
14
+ <RACButton {...props} className={className}>
15
+ {composeRenderProps(children, (children, { isPending }) => (
16
+ <>{children}</>
17
+ ))}
18
+ </RACButton>
19
+ );
12
20
  }
package/src/Field.tsx ADDED
@@ -0,0 +1,97 @@
1
+ import React from "react";
2
+ import {
3
+ FieldErrorProps,
4
+ Group,
5
+ GroupProps,
6
+ InputProps,
7
+ LabelProps,
8
+ FieldError as RACFieldError,
9
+ Input as RACInput,
10
+ Label as RACLabel,
11
+ Text,
12
+ TextProps,
13
+ composeRenderProps,
14
+ } from "react-aria-components";
15
+ import { twMerge } from "tailwind-merge";
16
+ import { tv } from "tailwind-variants";
17
+ import { composeTailwindRenderProps, focusRing } from "./utils";
18
+
19
+ export function Label(props: LabelProps) {
20
+ return (
21
+ <RACLabel
22
+ {...props}
23
+ className={twMerge(
24
+ "font-sans text-sm text-neutral-600 font-medium cursor-default w-fit",
25
+ props.className,
26
+ )}
27
+ />
28
+ );
29
+ }
30
+
31
+ export function Description(props: TextProps) {
32
+ return (
33
+ <Text
34
+ {...props}
35
+ slot="description"
36
+ className={twMerge("text-sm text-neutral-600", props.className)}
37
+ />
38
+ );
39
+ }
40
+
41
+ export function FieldError(props: FieldErrorProps) {
42
+ return (
43
+ <RACFieldError
44
+ {...props}
45
+ className={composeTailwindRenderProps(
46
+ props.className,
47
+ "text-sm text-red-600 forced-colors:text-[Mark]",
48
+ )}
49
+ />
50
+ );
51
+ }
52
+
53
+ export const fieldBorderStyles = tv({
54
+ base: "transition",
55
+ variants: {
56
+ isFocusWithin: {
57
+ false:
58
+ "border-neutral-300 hover:border-neutral-400 forced-colors:border-[ButtonBorder]",
59
+ true: "border-neutral-600 forced-colors:border-[Highlight]",
60
+ },
61
+ isInvalid: {
62
+ true: "border-red-600 forced-colors:border-[Mark]",
63
+ },
64
+ isDisabled: {
65
+ true: "border-neutral-200 forced-colors:border-[GrayText]",
66
+ },
67
+ },
68
+ });
69
+
70
+ export const fieldGroupStyles = tv({
71
+ extend: focusRing,
72
+ base: "group flex items-center h-9 box-border bg-white forced-colors:bg-[Field] border rounded-lg overflow-hidden transition",
73
+ variants: fieldBorderStyles.variants,
74
+ });
75
+
76
+ export function FieldGroup(props: GroupProps) {
77
+ return (
78
+ <Group
79
+ {...props}
80
+ className={composeRenderProps(props.className, (className, renderProps) =>
81
+ fieldGroupStyles({ ...renderProps, className }),
82
+ )}
83
+ />
84
+ );
85
+ }
86
+
87
+ export function Input(props: InputProps) {
88
+ return (
89
+ <RACInput
90
+ {...props}
91
+ className={composeTailwindRenderProps(
92
+ props.className,
93
+ "px-3 py-0 min-h-9 flex-1 min-w-0 border-0 outline outline-0 bg-white font-sans text-sm text-neutral-800 placeholder:text-neutral-600 disabled:text-neutral-200 disabled:placeholder:text-neutral-200 [-webkit-tap-highlight-color:transparent]",
94
+ )}
95
+ />
96
+ );
97
+ }