@avenue-ticketing/ui 0.11.0 → 0.12.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -0
- package/dist/badge-types-B67wcd4m.d.ts +22 -0
- package/dist/react/app-store-buttons-outline.d.ts +17 -0
- package/dist/react/app-store-buttons-outline.js +582 -0
- package/dist/react/app-store-buttons-outline.js.map +1 -0
- package/dist/react/app-store-buttons.d.ts +20 -0
- package/dist/react/app-store-buttons.js +817 -0
- package/dist/react/app-store-buttons.js.map +1 -0
- package/dist/react/avatar-label-group.d.ts +14 -0
- package/dist/react/avatar-label-group.js +183 -0
- package/dist/react/avatar-label-group.js.map +1 -0
- package/dist/react/avatar-profile-photo.d.ts +9 -0
- package/dist/react/avatar-profile-photo.js +202 -0
- package/dist/react/avatar-profile-photo.js.map +1 -0
- package/dist/react/avatar.d.ts +66 -40
- package/dist/react/avatar.js +159 -149
- package/dist/react/avatar.js.map +1 -1
- package/dist/react/badge-groups.d.ts +25 -0
- package/dist/react/badge-groups.js +162 -0
- package/dist/react/badge-groups.js.map +1 -0
- package/dist/react/badge.d.ts +123 -59
- package/dist/react/badge.js +314 -86
- package/dist/react/badge.js.map +1 -1
- package/dist/react/button-group.d.ts +43 -0
- package/dist/react/button-group.js +108 -0
- package/dist/react/button-group.js.map +1 -0
- package/dist/react/button-utility.d.ts +47 -0
- package/dist/react/button-utility.js +158 -0
- package/dist/react/button-utility.js.map +1 -0
- package/dist/react/button.d.ts +112 -37
- package/dist/react/button.js +270 -55
- package/dist/react/button.js.map +1 -1
- package/dist/react/checkbox.d.ts +25 -8
- package/dist/react/checkbox.js +115 -110
- package/dist/react/checkbox.js.map +1 -1
- package/dist/react/close-button.d.ts +25 -0
- package/dist/react/close-button.js +54 -0
- package/dist/react/close-button.js.map +1 -0
- package/dist/react/combobox.d.ts +18 -0
- package/dist/react/combobox.js +574 -0
- package/dist/react/combobox.js.map +1 -0
- package/dist/react/dialog.d.ts +15 -15
- package/dist/react/dialog.js +43 -108
- package/dist/react/dialog.js.map +1 -1
- package/dist/react/dropdown-account-breadcrumb.d.ts +5 -0
- package/dist/react/dropdown-account-breadcrumb.js +481 -0
- package/dist/react/dropdown-account-breadcrumb.js.map +1 -0
- package/dist/react/dropdown-account-button.d.ts +5 -0
- package/dist/react/dropdown-account-button.js +938 -0
- package/dist/react/dropdown-account-button.js.map +1 -0
- package/dist/react/dropdown-account-card-md.d.ts +5 -0
- package/dist/react/dropdown-account-card-md.js +714 -0
- package/dist/react/dropdown-account-card-md.js.map +1 -0
- package/dist/react/dropdown-account-card-sm.d.ts +5 -0
- package/dist/react/dropdown-account-card-sm.js +692 -0
- package/dist/react/dropdown-account-card-sm.js.map +1 -0
- package/dist/react/dropdown-account-card-xs.d.ts +5 -0
- package/dist/react/dropdown-account-card-xs.js +672 -0
- package/dist/react/dropdown-account-card-xs.js.map +1 -0
- package/dist/react/dropdown-avatar.d.ts +5 -0
- package/dist/react/dropdown-avatar.js +955 -0
- package/dist/react/dropdown-avatar.js.map +1 -0
- package/dist/react/dropdown-button-advanced.d.ts +5 -0
- package/dist/react/dropdown-button-advanced.js +964 -0
- package/dist/react/dropdown-button-advanced.js.map +1 -0
- package/dist/react/dropdown-button-link.d.ts +5 -0
- package/dist/react/dropdown-button-link.js +666 -0
- package/dist/react/dropdown-button-link.js.map +1 -0
- package/dist/react/dropdown-button-simple.d.ts +5 -0
- package/dist/react/dropdown-button-simple.js +919 -0
- package/dist/react/dropdown-button-simple.js.map +1 -0
- package/dist/react/dropdown-icon-advanced.d.ts +5 -0
- package/dist/react/dropdown-icon-advanced.js +708 -0
- package/dist/react/dropdown-icon-advanced.js.map +1 -0
- package/dist/react/dropdown-icon-simple.d.ts +5 -0
- package/dist/react/dropdown-icon-simple.js +670 -0
- package/dist/react/dropdown-icon-simple.js.map +1 -0
- package/dist/react/dropdown-integration.d.ts +5 -0
- package/dist/react/dropdown-integration.js +1490 -0
- package/dist/react/dropdown-integration.js.map +1 -0
- package/dist/react/dropdown-search-advanced.d.ts +5 -0
- package/dist/react/dropdown-search-advanced.js +1163 -0
- package/dist/react/dropdown-search-advanced.js.map +1 -0
- package/dist/react/dropdown-search-simple.d.ts +5 -0
- package/dist/react/dropdown-search-simple.js +1125 -0
- package/dist/react/dropdown-search-simple.js.map +1 -0
- package/dist/react/dropdown.d.ts +35 -133
- package/dist/react/dropdown.js +536 -1318
- package/dist/react/dropdown.js.map +1 -1
- package/dist/react/file-upload-trigger.d.ts +34 -0
- package/dist/react/file-upload-trigger.js +39 -0
- package/dist/react/file-upload-trigger.js.map +1 -0
- package/dist/react/form.d.ts +10 -0
- package/dist/react/form.js +11 -0
- package/dist/react/form.js.map +1 -0
- package/dist/react/hint-text.d.ts +17 -0
- package/dist/react/hint-text.js +36 -0
- package/dist/react/hint-text.js.map +1 -0
- package/dist/react/hook-form.d.ts +35 -0
- package/dist/react/hook-form.js +50 -0
- package/dist/react/hook-form.js.map +1 -0
- package/dist/react/input-date.d.ts +43 -0
- package/dist/react/input-date.js +306 -0
- package/dist/react/input-date.js.map +1 -0
- package/dist/react/input-file.d.ts +45 -0
- package/dist/react/input-file.js +748 -0
- package/dist/react/input-file.js.map +1 -0
- package/dist/react/input-group.d.ts +37 -0
- package/dist/react/input-group.js +251 -0
- package/dist/react/input-group.js.map +1 -0
- package/dist/react/input-number.d.ts +32 -0
- package/dist/react/input-number.js +553 -0
- package/dist/react/input-number.js.map +1 -0
- package/dist/react/input-payment.d.ts +16 -0
- package/dist/react/input-payment.js +593 -0
- package/dist/react/input-payment.js.map +1 -0
- package/dist/react/input-tags-outer.d.ts +53 -0
- package/dist/react/input-tags-outer.js +607 -0
- package/dist/react/input-tags-outer.js.map +1 -0
- package/dist/react/input-tags.d.ts +53 -0
- package/dist/react/input-tags.js +565 -0
- package/dist/react/input-tags.js.map +1 -0
- package/dist/react/input.d.ts +71 -22
- package/dist/react/input.js +332 -45
- package/dist/react/input.js.map +1 -1
- package/dist/react/label.d.ts +18 -0
- package/dist/react/label.js +112 -0
- package/dist/react/label.js.map +1 -0
- package/dist/react/multi-select.d.ts +90 -0
- package/dist/react/multi-select.js +1237 -0
- package/dist/react/multi-select.js.map +1 -0
- package/dist/react/pin-input.d.ts +59 -0
- package/dist/react/pin-input.js +229 -0
- package/dist/react/pin-input.js.map +1 -0
- package/dist/react/popover.d.ts +14 -71
- package/dist/react/popover.js +171 -540
- package/dist/react/popover.js.map +1 -1
- package/dist/react/progress-circle.d.ts +9 -0
- package/dist/react/progress-circle.js +36 -0
- package/dist/react/progress-circle.js.map +1 -0
- package/dist/react/progress-circles.d.ts +14 -0
- package/dist/react/progress-circles.js +160 -0
- package/dist/react/progress-circles.js.map +1 -0
- package/dist/react/progress-indicators.d.ts +52 -0
- package/dist/react/progress-indicators.js +78 -0
- package/dist/react/progress-indicators.js.map +1 -0
- package/dist/react/radio-buttons.d.ts +35 -0
- package/dist/react/radio-buttons.js +117 -0
- package/dist/react/radio-buttons.js.map +1 -0
- package/dist/react/scroll-header.d.ts +6 -0
- package/dist/react/scroll-header.js +42 -61
- package/dist/react/scroll-header.js.map +1 -1
- package/dist/react/scroll-wheel.d.ts +4 -5
- package/dist/react/scroll-wheel.js +19 -15
- package/dist/react/scroll-wheel.js.map +1 -1
- package/dist/react/select-item.d.ts +14 -0
- package/dist/react/select-item.js +340 -0
- package/dist/react/select-item.js.map +1 -0
- package/dist/react/select-native.d.ts +17 -0
- package/dist/react/select-native.js +203 -0
- package/dist/react/select-native.js.map +1 -0
- package/dist/react/select.d.ts +19 -61
- package/dist/react/select.js +866 -908
- package/dist/react/select.js.map +1 -1
- package/dist/react/sheet.d.ts +19 -19
- package/dist/react/sheet.js +97 -219
- package/dist/react/sheet.js.map +1 -1
- package/dist/react/slider.d.ts +15 -0
- package/dist/react/slider.js +66 -0
- package/dist/react/slider.js.map +1 -0
- package/dist/react/social-button.d.ts +55 -0
- package/dist/react/social-button.js +263 -0
- package/dist/react/social-button.js.map +1 -0
- package/dist/react/social-logos.d.ts +20 -0
- package/dist/react/social-logos.js +131 -0
- package/dist/react/social-logos.js.map +1 -0
- package/dist/react/switch.d.ts +21 -36
- package/dist/react/switch.js +121 -109
- package/dist/react/switch.js.map +1 -1
- package/dist/react/tag-select.d.ts +47 -0
- package/dist/react/tag-select.js +1252 -0
- package/dist/react/tag-select.js.map +1 -0
- package/dist/react/tags.d.ts +30 -0
- package/dist/react/tags.js +228 -0
- package/dist/react/tags.js.map +1 -0
- package/dist/react/textarea.d.ts +40 -4
- package/dist/react/textarea.js +193 -27
- package/dist/react/textarea.js.map +1 -1
- package/dist/react/tooltip.d.ts +30 -43
- package/dist/react/tooltip.js +65 -521
- package/dist/react/tooltip.js.map +1 -1
- package/dist/select-mobile-sheet-CB2ptDTJ.d.ts +12 -0
- package/dist/select-shared-oJEeJxeB.d.ts +68 -0
- package/package.json +28 -21
- package/source.css +2 -13
- package/theme.css +883 -79
- package/dist/react/calendar.d.ts +0 -13
- package/dist/react/calendar.js +0 -4639
- package/dist/react/calendar.js.map +0 -1
- package/dist/react/card.d.ts +0 -11
- package/dist/react/card.js +0 -113
- package/dist/react/card.js.map +0 -1
- package/dist/react/datetime-picker.d.ts +0 -21
- package/dist/react/datetime-picker.js +0 -6142
- package/dist/react/datetime-picker.js.map +0 -1
- package/dist/react/pagination.d.ts +0 -28
- package/dist/react/pagination.js +0 -262
- package/dist/react/pagination.js.map +0 -1
- package/dist/react/table-pagination.d.ts +0 -15
- package/dist/react/table-pagination.js +0 -1247
- package/dist/react/table-pagination.js.map +0 -1
- package/dist/react/table-view/column-menu.d.ts +0 -15
- package/dist/react/table-view/column-menu.js +0 -1049
- package/dist/react/table-view/column-menu.js.map +0 -1
- package/dist/react/table-view/index.d.ts +0 -70
- package/dist/react/table-view/index.js +0 -2284
- package/dist/react/table-view/index.js.map +0 -1
- package/dist/react/table.d.ts +0 -86
- package/dist/react/table.js +0 -414
- package/dist/react/table.js.map +0 -1
- package/dist/react/tabs.d.ts +0 -34
- package/dist/react/tabs.js +0 -423
- package/dist/react/tabs.js.map +0 -1
- package/dist/react/time-picker.d.ts +0 -22
- package/dist/react/time-picker.js +0 -856
- package/dist/react/time-picker.js.map +0 -1
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { createContext, useContext, useId } from 'react';
|
|
2
|
+
import { OTPInput, OTPInputContext } from 'input-otp';
|
|
3
|
+
import { Label as Label$1, Text, TooltipTrigger as TooltipTrigger$1, Tooltip as Tooltip$1, OverlayArrow, Button } from 'react-aria-components';
|
|
4
|
+
import { extendTailwindMerge } from 'tailwind-merge';
|
|
5
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
|
+
import { QuestionIcon } from '@phosphor-icons/react/dist/csr/Question';
|
|
7
|
+
|
|
8
|
+
var twMerge = extendTailwindMerge({
|
|
9
|
+
extend: {
|
|
10
|
+
theme: {
|
|
11
|
+
text: ["display-xs", "display-sm", "display-md", "display-lg", "display-xl", "display-2xl"]
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
var cx = twMerge;
|
|
16
|
+
var HintText = ({ isInvalid, className, size = "md", ...props }) => {
|
|
17
|
+
return /* @__PURE__ */ jsx(
|
|
18
|
+
Text,
|
|
19
|
+
{
|
|
20
|
+
...props,
|
|
21
|
+
slot: isInvalid ? "errorMessage" : "description",
|
|
22
|
+
className: cx(
|
|
23
|
+
"text-sm text-tertiary",
|
|
24
|
+
// Size
|
|
25
|
+
size === "sm" && "text-xs",
|
|
26
|
+
"in-data-[input-size=sm]:text-xs",
|
|
27
|
+
// Invalid state
|
|
28
|
+
isInvalid && "text-error-primary",
|
|
29
|
+
"group-invalid:text-error-primary",
|
|
30
|
+
className
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
};
|
|
35
|
+
HintText.displayName = "HintText";
|
|
36
|
+
var Tooltip = ({
|
|
37
|
+
title,
|
|
38
|
+
description,
|
|
39
|
+
children,
|
|
40
|
+
arrow = false,
|
|
41
|
+
delay = 100,
|
|
42
|
+
closeDelay = 0,
|
|
43
|
+
trigger,
|
|
44
|
+
isDisabled,
|
|
45
|
+
isOpen,
|
|
46
|
+
defaultOpen,
|
|
47
|
+
offset = 6,
|
|
48
|
+
crossOffset,
|
|
49
|
+
placement = "top",
|
|
50
|
+
onOpenChange,
|
|
51
|
+
...tooltipProps
|
|
52
|
+
}) => {
|
|
53
|
+
const isTopOrBottomLeft = ["top left", "top end", "bottom left", "bottom end"].includes(placement);
|
|
54
|
+
const isTopOrBottomRight = ["top right", "top start", "bottom right", "bottom start"].includes(placement);
|
|
55
|
+
const calculatedCrossOffset = isTopOrBottomLeft ? -12 : isTopOrBottomRight ? 12 : 0;
|
|
56
|
+
return /* @__PURE__ */ jsxs(TooltipTrigger$1, { ...{ trigger, delay, closeDelay, isDisabled, isOpen, defaultOpen, onOpenChange }, children: [
|
|
57
|
+
children,
|
|
58
|
+
/* @__PURE__ */ jsx(
|
|
59
|
+
Tooltip$1,
|
|
60
|
+
{
|
|
61
|
+
...tooltipProps,
|
|
62
|
+
offset,
|
|
63
|
+
placement,
|
|
64
|
+
crossOffset: crossOffset ?? calculatedCrossOffset,
|
|
65
|
+
className: ({ isEntering, isExiting }) => cx(isEntering && "ease-out animate-in", isExiting && "ease-in animate-out"),
|
|
66
|
+
children: ({ isEntering, isExiting }) => /* @__PURE__ */ jsxs(
|
|
67
|
+
"div",
|
|
68
|
+
{
|
|
69
|
+
className: cx(
|
|
70
|
+
"z-50 flex max-w-xs origin-(--trigger-anchor-point) flex-col items-start gap-1 rounded-lg bg-primary-solid px-3 shadow-lg will-change-transform",
|
|
71
|
+
description ? "py-3" : "py-2",
|
|
72
|
+
isEntering && "ease-out animate-in fade-in zoom-in-95 in-placement-left:slide-in-from-right-0.5 in-placement-right:slide-in-from-left-0.5 in-placement-top:slide-in-from-bottom-0.5 in-placement-bottom:slide-in-from-top-0.5",
|
|
73
|
+
isExiting && "ease-in animate-out fade-out zoom-out-95 in-placement-left:slide-out-to-right-0.5 in-placement-right:slide-out-to-left-0.5 in-placement-top:slide-out-to-bottom-0.5 in-placement-bottom:slide-out-to-top-0.5"
|
|
74
|
+
),
|
|
75
|
+
children: [
|
|
76
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-semibold text-white", children: title }),
|
|
77
|
+
description && /* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-tooltip-supporting-text", children: description }),
|
|
78
|
+
arrow && /* @__PURE__ */ jsx(OverlayArrow, { children: /* @__PURE__ */ jsx(
|
|
79
|
+
"svg",
|
|
80
|
+
{
|
|
81
|
+
viewBox: "0 0 100 100",
|
|
82
|
+
className: "size-2.5 fill-bg-primary-solid in-placement-left:-rotate-90 in-placement-right:rotate-90 in-placement-top:rotate-0 in-placement-bottom:rotate-180",
|
|
83
|
+
children: /* @__PURE__ */ jsx("path", { d: "M0,0 L35.858,35.858 Q50,50 64.142,35.858 L100,0 Z" })
|
|
84
|
+
}
|
|
85
|
+
) })
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
)
|
|
89
|
+
}
|
|
90
|
+
)
|
|
91
|
+
] });
|
|
92
|
+
};
|
|
93
|
+
var TooltipTrigger = ({ children, className, ...buttonProps }) => {
|
|
94
|
+
return /* @__PURE__ */ jsx(Button, { ...buttonProps, className: (values) => cx("h-max w-max outline-hidden", typeof className === "function" ? className(values) : className), children });
|
|
95
|
+
};
|
|
96
|
+
var Label = ({ isInvalid, isRequired, tooltip, tooltipDescription, className, ...props }) => {
|
|
97
|
+
return /* @__PURE__ */ jsxs(
|
|
98
|
+
Label$1,
|
|
99
|
+
{
|
|
100
|
+
"data-label": "true",
|
|
101
|
+
...props,
|
|
102
|
+
className: cx("flex cursor-default items-center gap-0.5 text-sm font-medium text-secondary", className),
|
|
103
|
+
children: [
|
|
104
|
+
props.children,
|
|
105
|
+
/* @__PURE__ */ jsx(
|
|
106
|
+
"span",
|
|
107
|
+
{
|
|
108
|
+
className: cx(
|
|
109
|
+
"hidden text-brand-tertiary",
|
|
110
|
+
isRequired && "block",
|
|
111
|
+
typeof isRequired === "undefined" && "group-required:block",
|
|
112
|
+
isInvalid && "text-error-primary",
|
|
113
|
+
typeof isInvalid === "undefined" && "group-invalid:text-error-primary"
|
|
114
|
+
),
|
|
115
|
+
children: "*"
|
|
116
|
+
}
|
|
117
|
+
),
|
|
118
|
+
tooltip && /* @__PURE__ */ jsx(Tooltip, { title: tooltip, description: tooltipDescription, placement: "top", children: /* @__PURE__ */ jsx(
|
|
119
|
+
TooltipTrigger,
|
|
120
|
+
{
|
|
121
|
+
isDisabled: false,
|
|
122
|
+
className: "cursor-pointer text-fg-quaternary transition duration-200 hover:text-fg-quaternary_hover focus:text-fg-quaternary_hover",
|
|
123
|
+
children: /* @__PURE__ */ jsx(QuestionIcon, { className: "size-4" })
|
|
124
|
+
}
|
|
125
|
+
) })
|
|
126
|
+
]
|
|
127
|
+
}
|
|
128
|
+
);
|
|
129
|
+
};
|
|
130
|
+
Label.displayName = "Label";
|
|
131
|
+
var focusRingShadow = "border-brand ring-1 ring-inset ring-brand";
|
|
132
|
+
var focusRingErrorShadow = "border-error ring-1 ring-inset ring-error";
|
|
133
|
+
var PinInputContext = createContext({
|
|
134
|
+
size: "sm",
|
|
135
|
+
id: "",
|
|
136
|
+
disabled: false,
|
|
137
|
+
invalid: false
|
|
138
|
+
});
|
|
139
|
+
var usePinInputContext = () => {
|
|
140
|
+
const context = useContext(PinInputContext);
|
|
141
|
+
if (!context) {
|
|
142
|
+
throw new Error("The 'usePinInputContext' hook must be used within a '<PinInput />'");
|
|
143
|
+
}
|
|
144
|
+
return context;
|
|
145
|
+
};
|
|
146
|
+
var Root = ({ className, size = "md", disabled = false, invalid = false, ...props }) => {
|
|
147
|
+
const id = useId();
|
|
148
|
+
return /* @__PURE__ */ jsx(PinInputContext.Provider, { value: { size, disabled, id, invalid }, children: /* @__PURE__ */ jsx("div", { role: "group", className: cx("flex h-max flex-col gap-1.5", className), ...props }) });
|
|
149
|
+
};
|
|
150
|
+
Root.displayName = "Root";
|
|
151
|
+
var styles = {
|
|
152
|
+
xxxs: { group: "gap-1.5 h-9", slot: "size-9 px-3 py-2 text-sm rounded-lg font-medium text-placeholder/50", caret: "text-sm font-medium" },
|
|
153
|
+
xxs: { group: "gap-2 h-10", slot: "size-10 px-3 py-2 text-md rounded-lg font-medium text-placeholder/50", caret: "text-md font-medium" },
|
|
154
|
+
xs: { group: "gap-2 h-11", slot: "size-11 px-3.5 py-2.5 text-md rounded-lg font-medium text-placeholder/50", caret: "text-md font-medium" },
|
|
155
|
+
sm: { group: "gap-2 h-16.5", slot: "size-16 px-2 py-0.5 text-display-lg font-medium", caret: "text-display-lg font-medium" },
|
|
156
|
+
md: { group: "gap-3 h-20.5", slot: "size-20 px-2 py-2.5 text-display-lg font-medium", caret: "text-display-lg font-medium" },
|
|
157
|
+
lg: { group: "gap-3 h-24.5", slot: "size-24 px-2 py-3 text-display-xl font-medium", caret: "text-display-xl font-medium" }
|
|
158
|
+
};
|
|
159
|
+
var Group = ({ inputClassName, containerClassName, width, maxLength = 4, ...props }) => {
|
|
160
|
+
const { id, size, disabled } = usePinInputContext();
|
|
161
|
+
return /* @__PURE__ */ jsx(
|
|
162
|
+
OTPInput,
|
|
163
|
+
{
|
|
164
|
+
...props,
|
|
165
|
+
size: width,
|
|
166
|
+
maxLength,
|
|
167
|
+
disabled,
|
|
168
|
+
id: "pin-input-" + id,
|
|
169
|
+
"aria-label": "Enter your pin",
|
|
170
|
+
"aria-labelledby": "pin-input-label-" + id,
|
|
171
|
+
"aria-describedby": "pin-input-description-" + id,
|
|
172
|
+
containerClassName: cx("flex flex-row", styles[size].group, containerClassName),
|
|
173
|
+
className: cx("disabled:cursor-not-allowed", inputClassName)
|
|
174
|
+
}
|
|
175
|
+
);
|
|
176
|
+
};
|
|
177
|
+
Group.displayName = "Group";
|
|
178
|
+
var Slot = ({ index, className, ...props }) => {
|
|
179
|
+
const { size, disabled, invalid } = usePinInputContext();
|
|
180
|
+
const { slots, isFocused } = useContext(OTPInputContext);
|
|
181
|
+
const slot = slots[index];
|
|
182
|
+
return /* @__PURE__ */ jsx(
|
|
183
|
+
"div",
|
|
184
|
+
{
|
|
185
|
+
...props,
|
|
186
|
+
"aria-invalid": invalid,
|
|
187
|
+
"aria-label": "Enter digit " + (index + 1) + " of " + slots.length,
|
|
188
|
+
className: cx(
|
|
189
|
+
"relative flex items-center justify-center rounded-xl border border-solid border-primary bg-primary text-center text-placeholder/40 shadow-xs transition-[border-color,box-shadow,background-color] duration-100 ease-linear",
|
|
190
|
+
styles[size].slot,
|
|
191
|
+
invalid && !isFocused && "border-error_subtle text-error-primary",
|
|
192
|
+
isFocused && slot?.isActive && !invalid && focusRingShadow,
|
|
193
|
+
slot?.char && "border-brand text-brand-tertiary_alt",
|
|
194
|
+
disabled && "opacity-50",
|
|
195
|
+
invalid && isFocused && slot?.isActive && focusRingErrorShadow,
|
|
196
|
+
className
|
|
197
|
+
),
|
|
198
|
+
children: slot?.char ? slot.char : slot?.hasFakeCaret ? /* @__PURE__ */ jsx(FakeCaret, { size }) : 0
|
|
199
|
+
}
|
|
200
|
+
);
|
|
201
|
+
};
|
|
202
|
+
Slot.displayName = "Slot";
|
|
203
|
+
var FakeCaret = ({ size = "md" }) => {
|
|
204
|
+
return /* @__PURE__ */ jsx("div", { className: cx("pointer-events-none h-[1em] w-0.5 animate-caret-blink bg-fg-brand-primary", styles[size].caret) });
|
|
205
|
+
};
|
|
206
|
+
var Separator = (props) => {
|
|
207
|
+
return /* @__PURE__ */ jsx("div", { role: "separator", ...props, className: cx("text-center text-display-xl font-medium text-utility-neutral-300", props.className), children: "-" });
|
|
208
|
+
};
|
|
209
|
+
Separator.displayName = "Separator";
|
|
210
|
+
var Label2 = (props) => {
|
|
211
|
+
const { id } = usePinInputContext();
|
|
212
|
+
return /* @__PURE__ */ jsx(Label, { ...props, htmlFor: "pin-input-" + id, id: "pin-input-label-" + id });
|
|
213
|
+
};
|
|
214
|
+
Label2.displayName = "Label";
|
|
215
|
+
var Description = (props) => {
|
|
216
|
+
const { id, size } = usePinInputContext();
|
|
217
|
+
return /* @__PURE__ */ jsx(HintText, { ...props, id: "pin-input-description-" + id, role: "description", className: cx(size === "xxxs" && "text-xs") });
|
|
218
|
+
};
|
|
219
|
+
Description.displayName = "Description";
|
|
220
|
+
var PinInput = Root;
|
|
221
|
+
PinInput.Slot = Slot;
|
|
222
|
+
PinInput.Label = Label2;
|
|
223
|
+
PinInput.Group = Group;
|
|
224
|
+
PinInput.Separator = Separator;
|
|
225
|
+
PinInput.Description = Description;
|
|
226
|
+
|
|
227
|
+
export { PinInput, usePinInputContext };
|
|
228
|
+
//# sourceMappingURL=pin-input.js.map
|
|
229
|
+
//# sourceMappingURL=pin-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../utils/cx.ts","../../../../components/base/input/hint-text.tsx","../../../../components/base/tooltip/tooltip.tsx","../../../../components/base/input/label.tsx","../../../../components/base/input/pin-input.tsx"],"names":["AriaText","AriaTooltipTrigger","jsx","AriaTooltip","AriaOverlayArrow","AriaButton","jsxs","AriaLabel","HelpCircle","Label"],"mappings":"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","file":"pin-input.js","sourcesContent":["import { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n extend: {\n theme: {\n text: [\"display-xs\", \"display-sm\", \"display-md\", \"display-lg\", \"display-xl\", \"display-2xl\"],\n },\n },\n});\n\n/**\n * This function is a wrapper around the twMerge function.\n * It is used to merge the classes inside style objects.\n */\nexport const cx = twMerge;\n\n/**\n * This function does nothing besides helping us to be able to\n * sort the classes inside style objects which is not supported\n * by the Tailwind IntelliSense by default.\n */\nexport function sortCx<T extends Record<string, string | number | Record<string, string | number | Record<string, string | number>>>>(classes: T): T {\n return classes;\n}\n","\"use client\";\n\nimport type { ReactNode, Ref } from \"react\";\nimport type { TextProps as AriaTextProps } from \"react-aria-components\";\nimport { Text as AriaText } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\ninterface HintTextProps extends AriaTextProps {\n /** Indicates that the hint text is an error message. */\n isInvalid?: boolean;\n ref?: Ref<HTMLElement>;\n size?: \"sm\" | \"md\";\n children: ReactNode;\n}\n\nexport const HintText = ({ isInvalid, className, size = \"md\", ...props }: HintTextProps) => {\n return (\n <AriaText\n {...props}\n slot={isInvalid ? \"errorMessage\" : \"description\"}\n className={cx(\n \"text-sm text-tertiary\",\n\n // Size\n size === \"sm\" && \"text-xs\",\n \"in-data-[input-size=sm]:text-xs\",\n\n // Invalid state\n isInvalid && \"text-error-primary\",\n \"group-invalid:text-error-primary\",\n\n className,\n )}\n />\n );\n};\n\nHintText.displayName = \"HintText\";\n","\"use client\";\n\n/** Figma: Tooltip (1052:485) */\n\nimport type { ReactNode } from \"react\";\nimport type {\n ButtonProps as AriaButtonProps,\n TooltipProps as AriaTooltipProps,\n TooltipTriggerComponentProps as AriaTooltipTriggerComponentProps,\n} from \"react-aria-components\";\nimport { Button as AriaButton, OverlayArrow as AriaOverlayArrow, Tooltip as AriaTooltip, TooltipTrigger as AriaTooltipTrigger } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\ninterface TooltipProps extends AriaTooltipTriggerComponentProps, Omit<AriaTooltipProps, \"children\"> {\n /**\n * The title of the tooltip.\n */\n title: ReactNode;\n /**\n * The description of the tooltip.\n */\n description?: ReactNode;\n /**\n * Whether to show the arrow on the tooltip.\n *\n * @default false\n */\n arrow?: boolean;\n /**\n * Delay in milliseconds before the tooltip is shown on first hover.\n *\n * @default 100\n */\n delay?: number;\n}\n\nexport const Tooltip = ({\n title,\n description,\n children,\n arrow = false,\n delay = 100,\n closeDelay = 0,\n trigger,\n isDisabled,\n isOpen,\n defaultOpen,\n offset = 6,\n crossOffset,\n placement = \"top\",\n onOpenChange,\n ...tooltipProps\n}: TooltipProps) => {\n const isTopOrBottomLeft = [\"top left\", \"top end\", \"bottom left\", \"bottom end\"].includes(placement);\n const isTopOrBottomRight = [\"top right\", \"top start\", \"bottom right\", \"bottom start\"].includes(placement);\n // Set negative cross offset for left and right placement to visually balance the tooltip.\n const calculatedCrossOffset = isTopOrBottomLeft ? -12 : isTopOrBottomRight ? 12 : 0;\n\n return (\n <AriaTooltipTrigger {...{ trigger, delay, closeDelay, isDisabled, isOpen, defaultOpen, onOpenChange }}>\n {children}\n\n <AriaTooltip\n {...tooltipProps}\n offset={offset}\n placement={placement}\n crossOffset={crossOffset ?? calculatedCrossOffset}\n className={({ isEntering, isExiting }) => cx(isEntering && \"ease-out animate-in\", isExiting && \"ease-in animate-out\")}\n >\n {({ isEntering, isExiting }) => (\n <div\n className={cx(\n \"z-50 flex max-w-xs origin-(--trigger-anchor-point) flex-col items-start gap-1 rounded-lg bg-primary-solid px-3 shadow-lg will-change-transform\",\n description ? \"py-3\" : \"py-2\",\n\n isEntering &&\n \"ease-out animate-in fade-in zoom-in-95 in-placement-left:slide-in-from-right-0.5 in-placement-right:slide-in-from-left-0.5 in-placement-top:slide-in-from-bottom-0.5 in-placement-bottom:slide-in-from-top-0.5\",\n isExiting &&\n \"ease-in animate-out fade-out zoom-out-95 in-placement-left:slide-out-to-right-0.5 in-placement-right:slide-out-to-left-0.5 in-placement-top:slide-out-to-bottom-0.5 in-placement-bottom:slide-out-to-top-0.5\",\n )}\n >\n <span className=\"text-xs font-semibold text-white\">{title}</span>\n\n {description && <span className=\"text-xs font-medium text-tooltip-supporting-text\">{description}</span>}\n\n {arrow && (\n <AriaOverlayArrow>\n <svg\n viewBox=\"0 0 100 100\"\n className=\"size-2.5 fill-bg-primary-solid in-placement-left:-rotate-90 in-placement-right:rotate-90 in-placement-top:rotate-0 in-placement-bottom:rotate-180\"\n >\n <path d=\"M0,0 L35.858,35.858 Q50,50 64.142,35.858 L100,0 Z\" />\n </svg>\n </AriaOverlayArrow>\n )}\n </div>\n )}\n </AriaTooltip>\n </AriaTooltipTrigger>\n );\n};\n\ninterface TooltipTriggerProps extends AriaButtonProps {}\n\nexport const TooltipTrigger = ({ children, className, ...buttonProps }: TooltipTriggerProps) => {\n return (\n <AriaButton {...buttonProps} className={(values) => cx(\"h-max w-max outline-hidden\", typeof className === \"function\" ? className(values) : className)}>\n {children}\n </AriaButton>\n );\n};\n","\"use client\";\n\nimport type { ReactNode, Ref } from \"react\";\nimport { QuestionIcon as HelpCircle } from \"@phosphor-icons/react/dist/csr/Question\";\nimport type { LabelProps as AriaLabelProps } from \"react-aria-components\";\nimport { Label as AriaLabel } from \"react-aria-components\";\nimport { Tooltip, TooltipTrigger } from \"@/components/base/tooltip/tooltip\";\nimport { cx } from \"@/utils/cx\";\n\ninterface LabelProps extends AriaLabelProps {\n children: ReactNode;\n isInvalid?: boolean;\n isRequired?: boolean;\n tooltip?: string;\n tooltipDescription?: string;\n ref?: Ref<HTMLLabelElement>;\n}\n\nexport const Label = ({ isInvalid, isRequired, tooltip, tooltipDescription, className, ...props }: LabelProps) => {\n return (\n <AriaLabel\n // Used for conditionally hiding/showing the label element via CSS:\n // <Input label=\"Visible only on mobile\" className=\"lg:**:data-label:hidden\" />\n // or\n // <Input label=\"Visible only on mobile\" className=\"lg:label:hidden\" />\n data-label=\"true\"\n {...props}\n className={cx(\"flex cursor-default items-center gap-0.5 text-sm font-medium text-secondary\", className)}\n >\n {props.children}\n\n <span\n className={cx(\n \"hidden text-brand-tertiary\",\n isRequired && \"block\",\n typeof isRequired === \"undefined\" && \"group-required:block\",\n\n isInvalid && \"text-error-primary\",\n typeof isInvalid === \"undefined\" && \"group-invalid:text-error-primary\",\n )}\n >\n *\n </span>\n\n {tooltip && (\n <Tooltip title={tooltip} description={tooltipDescription} placement=\"top\">\n <TooltipTrigger\n // `TooltipTrigger` inherits the disabled state from the parent form field\n // but we don't that. We want the tooltip be enabled even if the parent\n // field is disabled.\n isDisabled={false}\n className=\"cursor-pointer text-fg-quaternary transition duration-200 hover:text-fg-quaternary_hover focus:text-fg-quaternary_hover\"\n >\n <HelpCircle className=\"size-4\" />\n </TooltipTrigger>\n </Tooltip>\n )}\n </AriaLabel>\n );\n};\n\nLabel.displayName = \"Label\";\n","\"use client\";\n\nimport type { ComponentPropsWithRef } from \"react\";\nimport { createContext, useContext, useId } from \"react\";\nimport { OTPInput, OTPInputContext } from \"input-otp\";\nimport { HintText } from \"@/components/base/input/hint-text\";\nimport { Label as LabelBase } from \"@/components/base/input/label\";\nimport { cx } from \"@/utils/cx\";\n\n/** Figma: Pin input — active slot: border-error/brand + inset ring (85:1269). */\nconst focusRingShadow = \"border-brand ring-1 ring-inset ring-brand\";\nconst focusRingErrorShadow = \"border-error ring-1 ring-inset ring-error\";\n\ntype PinInputSize = \"xxxs\" | \"xxs\" | \"xs\" | \"sm\" | \"md\" | \"lg\";\n\ntype PinInputContextType = {\n size: PinInputSize;\n disabled: boolean;\n id: string;\n invalid: boolean;\n};\n\nconst PinInputContext = createContext<PinInputContextType>({\n size: \"sm\",\n id: \"\",\n disabled: false,\n invalid: false,\n});\n\nexport const usePinInputContext = () => {\n const context = useContext(PinInputContext);\n\n if (!context) {\n throw new Error(\"The 'usePinInputContext' hook must be used within a '<PinInput />'\");\n }\n\n return context;\n};\n\ninterface RootProps extends ComponentPropsWithRef<\"div\"> {\n size?: PinInputSize;\n disabled?: boolean;\n invalid?: boolean;\n}\n\nconst Root = ({ className, size = \"md\", disabled = false, invalid = false, ...props }: RootProps) => {\n const id = useId();\n\n return (\n <PinInputContext.Provider value={{ size, disabled, id, invalid }}>\n <div role=\"group\" className={cx(\"flex h-max flex-col gap-1.5\", className)} {...props} />\n </PinInputContext.Provider>\n );\n};\nRoot.displayName = \"Root\";\n\nconst styles = {\n xxxs: { group: \"gap-1.5 h-9\", slot: \"size-9 px-3 py-2 text-sm rounded-lg font-medium text-placeholder/50\", caret: \"text-sm font-medium\" },\n xxs: { group: \"gap-2 h-10\", slot: \"size-10 px-3 py-2 text-md rounded-lg font-medium text-placeholder/50\", caret: \"text-md font-medium\" },\n xs: { group: \"gap-2 h-11\", slot: \"size-11 px-3.5 py-2.5 text-md rounded-lg font-medium text-placeholder/50\", caret: \"text-md font-medium\" },\n sm: { group: \"gap-2 h-16.5\", slot: \"size-16 px-2 py-0.5 text-display-lg font-medium\", caret: \"text-display-lg font-medium\" },\n md: { group: \"gap-3 h-20.5\", slot: \"size-20 px-2 py-2.5 text-display-lg font-medium\", caret: \"text-display-lg font-medium\" },\n lg: { group: \"gap-3 h-24.5\", slot: \"size-24 px-2 py-3 text-display-xl font-medium\", caret: \"text-display-xl font-medium\" },\n};\n\ntype GroupProps = ComponentPropsWithRef<typeof OTPInput> & {\n width?: number;\n inputClassName?: string;\n};\n\nconst Group = ({ inputClassName, containerClassName, width, maxLength = 4, ...props }: GroupProps) => {\n const { id, size, disabled } = usePinInputContext();\n\n return (\n <OTPInput\n {...props}\n size={width}\n maxLength={maxLength}\n disabled={disabled}\n id={\"pin-input-\" + id}\n aria-label=\"Enter your pin\"\n aria-labelledby={\"pin-input-label-\" + id}\n aria-describedby={\"pin-input-description-\" + id}\n containerClassName={cx(\"flex flex-row\", styles[size].group, containerClassName)}\n className={cx(\"disabled:cursor-not-allowed\", inputClassName)}\n />\n );\n};\nGroup.displayName = \"Group\";\n\nconst Slot = ({ index, className, ...props }: ComponentPropsWithRef<\"div\"> & { index: number }) => {\n const { size, disabled, invalid } = usePinInputContext();\n const { slots, isFocused } = useContext(OTPInputContext);\n\n const slot = slots[index];\n\n return (\n <div\n {...props}\n aria-invalid={invalid}\n aria-label={\"Enter digit \" + (index + 1) + \" of \" + slots.length}\n className={cx(\n \"relative flex items-center justify-center rounded-xl border border-solid border-primary bg-primary text-center text-placeholder/40 shadow-xs transition-[border-color,box-shadow,background-color] duration-100 ease-linear\",\n styles[size].slot,\n invalid && !isFocused && \"border-error_subtle text-error-primary\",\n isFocused && slot?.isActive && !invalid && focusRingShadow,\n slot?.char && \"border-brand text-brand-tertiary_alt\",\n disabled && \"opacity-50\",\n invalid && isFocused && slot?.isActive && focusRingErrorShadow,\n className,\n )}\n >\n {slot?.char ? slot.char : slot?.hasFakeCaret ? <FakeCaret size={size} /> : 0}\n </div>\n );\n};\nSlot.displayName = \"Slot\";\n\nconst FakeCaret = ({ size = \"md\" }: { size?: PinInputSize }) => {\n return <div className={cx(\"pointer-events-none h-[1em] w-0.5 animate-caret-blink bg-fg-brand-primary\", styles[size].caret)} />;\n};\n\nconst Separator = (props: ComponentPropsWithRef<\"div\">) => {\n return (\n <div role=\"separator\" {...props} className={cx(\"text-center text-display-xl font-medium text-utility-neutral-300\", props.className)}>\n -\n </div>\n );\n};\nSeparator.displayName = \"Separator\";\n\nconst Label = (props: ComponentPropsWithRef<typeof LabelBase>) => {\n const { id } = usePinInputContext();\n\n return <LabelBase {...props} htmlFor={\"pin-input-\" + id} id={\"pin-input-label-\" + id} />;\n};\nLabel.displayName = \"Label\";\n\nconst Description = (props: ComponentPropsWithRef<typeof HintText>) => {\n const { id, size } = usePinInputContext();\n\n return <HintText {...props} id={\"pin-input-description-\" + id} role=\"description\" className={cx(size === \"xxxs\" && \"text-xs\")} />;\n};\nDescription.displayName = \"Description\";\n\nconst PinInput = Root as typeof Root & {\n Slot: typeof Slot;\n Label: typeof Label;\n Group: typeof Group;\n Separator: typeof Separator;\n Description: typeof Description;\n};\nPinInput.Slot = Slot;\nPinInput.Label = Label;\nPinInput.Group = Group;\nPinInput.Separator = Separator;\nPinInput.Description = Description;\n\nexport { PinInput };\n"]}
|
package/dist/react/popover.d.ts
CHANGED
|
@@ -1,76 +1,19 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { RefAttributes } from 'react';
|
|
3
|
+
import { PopoverProps as PopoverProps$1 } from 'react-aria-components';
|
|
4
|
+
import { S as SelectMobileOptions } from '../select-mobile-sheet-CB2ptDTJ.js';
|
|
2
5
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}>;
|
|
8
|
-
declare const PopoverTrigger: React__default.FC<{
|
|
9
|
-
children: React__default.ReactNode;
|
|
10
|
-
asChild?: boolean;
|
|
11
|
-
}>;
|
|
12
|
-
declare const PopoverClose: React__default.FC<{
|
|
13
|
-
children: React__default.ReactNode;
|
|
14
|
-
asChild?: boolean;
|
|
15
|
-
}>;
|
|
16
|
-
/**
|
|
17
|
-
* Narrow-viewport (≤1024px) bottom-sheet options for {@link PopoverContent}.
|
|
18
|
-
* `className` merges onto the sheet panel root (after base sheet styles).
|
|
19
|
-
*/
|
|
20
|
-
interface PopoverMobileSheetOptions {
|
|
21
|
-
/** When `true`, use a bottom sheet on narrow viewports. Default `false`. */
|
|
22
|
-
sheet?: boolean;
|
|
23
|
-
title?: string;
|
|
24
|
-
className?: string;
|
|
25
|
-
contentClassName?: string;
|
|
26
|
-
}
|
|
27
|
-
interface PopoverMobileCloseProps extends React__default.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Dismiss control for the mobile bottom-sheet popover. Styling matches
|
|
31
|
-
* {@link DialogCloseButton} (circular hit target, X icon).
|
|
32
|
-
*/
|
|
33
|
-
declare const PopoverMobileClose: React__default.ForwardRefExoticComponent<PopoverMobileCloseProps & React__default.RefAttributes<HTMLButtonElement>>;
|
|
34
|
-
type Side = "top" | "right" | "bottom" | "left";
|
|
35
|
-
type Align = "start" | "center" | "end";
|
|
36
|
-
interface PopoverContentProps extends React__default.HTMLAttributes<HTMLDivElement> {
|
|
37
|
-
/** Which side of the trigger to render on */
|
|
38
|
-
side?: Side;
|
|
39
|
-
/** Alignment along the cross-axis */
|
|
40
|
-
align?: Align;
|
|
41
|
-
/** Gap between trigger and popover in px */
|
|
42
|
-
offset?: number;
|
|
43
|
-
/** Show a small arrow pointing to the trigger */
|
|
44
|
-
showArrow?: boolean;
|
|
45
|
-
/** Close when clicking outside */
|
|
46
|
-
closeOnClickOutside?: boolean;
|
|
47
|
-
/** Close when Escape key is pressed */
|
|
48
|
-
closeOnEscape?: boolean;
|
|
49
|
-
/** Animation duration in ms */
|
|
50
|
-
duration?: number;
|
|
51
|
-
/** Minimum distance from the viewport edge in px */
|
|
52
|
-
viewportPadding?: number;
|
|
53
|
-
/** Portal container – defaults to document.body */
|
|
54
|
-
container?: HTMLElement | null;
|
|
55
|
-
/** Width of the popover. 'trigger' matches the trigger width. */
|
|
56
|
-
width?: "auto" | "trigger" | number;
|
|
57
|
-
/**
|
|
58
|
-
* Narrow-viewport (≤1024px) bottom sheet — same options as dropdown
|
|
59
|
-
* `mobileOptions`, except `sheet` defaults to `false`.
|
|
60
|
-
*/
|
|
61
|
-
mobileOptions?: PopoverMobileSheetOptions;
|
|
6
|
+
interface PopoverProps extends PopoverProps$1, RefAttributes<HTMLElement> {
|
|
7
|
+
size: "sm" | "md" | "lg";
|
|
8
|
+
/** Narrow-viewport (≤1024px) bottom-sheet options. */
|
|
9
|
+
mobileOptions?: SelectMobileOptions;
|
|
62
10
|
/**
|
|
63
|
-
*
|
|
64
|
-
*
|
|
11
|
+
* When `true`, the popover shell does not scroll and has no max-height;
|
|
12
|
+
* inner content manages its own regions (e.g. multi-select search + list + footer).
|
|
13
|
+
* @default false
|
|
65
14
|
*/
|
|
66
|
-
|
|
67
|
-
/** Mobile sheet only; defaults to 120px (same as dropdown / dialog full sheet). */
|
|
68
|
-
slideEntranceOffsetPx?: number;
|
|
15
|
+
compoundContent?: boolean;
|
|
69
16
|
}
|
|
70
|
-
declare const
|
|
71
|
-
declare const PopoverHeader: React__default.FC<React__default.HTMLAttributes<HTMLDivElement>>;
|
|
72
|
-
declare const PopoverFooter: React__default.FC<React__default.HTMLAttributes<HTMLDivElement>>;
|
|
73
|
-
declare const PopoverTitle: React__default.FC<React__default.HTMLAttributes<HTMLHeadingElement>>;
|
|
74
|
-
declare const PopoverDescription: React__default.FC<React__default.HTMLAttributes<HTMLParagraphElement>>;
|
|
17
|
+
declare const Popover: ({ mobileOptions, children, size, className, style, compoundContent, ...props }: PopoverProps) => react.JSX.Element;
|
|
75
18
|
|
|
76
|
-
export { Popover
|
|
19
|
+
export { Popover };
|