@avenue-ticketing/ui 0.11.0 → 0.12.0-beta.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.
Files changed (225) hide show
  1. package/README.md +47 -0
  2. package/dist/badge-types-B67wcd4m.d.ts +22 -0
  3. package/dist/react/app-store-buttons-outline.d.ts +17 -0
  4. package/dist/react/app-store-buttons-outline.js +582 -0
  5. package/dist/react/app-store-buttons-outline.js.map +1 -0
  6. package/dist/react/app-store-buttons.d.ts +20 -0
  7. package/dist/react/app-store-buttons.js +817 -0
  8. package/dist/react/app-store-buttons.js.map +1 -0
  9. package/dist/react/avatar-label-group.d.ts +14 -0
  10. package/dist/react/avatar-label-group.js +183 -0
  11. package/dist/react/avatar-label-group.js.map +1 -0
  12. package/dist/react/avatar-profile-photo.d.ts +9 -0
  13. package/dist/react/avatar-profile-photo.js +202 -0
  14. package/dist/react/avatar-profile-photo.js.map +1 -0
  15. package/dist/react/avatar.d.ts +66 -40
  16. package/dist/react/avatar.js +159 -149
  17. package/dist/react/avatar.js.map +1 -1
  18. package/dist/react/badge-groups.d.ts +25 -0
  19. package/dist/react/badge-groups.js +162 -0
  20. package/dist/react/badge-groups.js.map +1 -0
  21. package/dist/react/badge.d.ts +123 -59
  22. package/dist/react/badge.js +314 -86
  23. package/dist/react/badge.js.map +1 -1
  24. package/dist/react/button-group.d.ts +43 -0
  25. package/dist/react/button-group.js +108 -0
  26. package/dist/react/button-group.js.map +1 -0
  27. package/dist/react/button-utility.d.ts +47 -0
  28. package/dist/react/button-utility.js +158 -0
  29. package/dist/react/button-utility.js.map +1 -0
  30. package/dist/react/button.d.ts +112 -37
  31. package/dist/react/button.js +270 -55
  32. package/dist/react/button.js.map +1 -1
  33. package/dist/react/checkbox.d.ts +25 -8
  34. package/dist/react/checkbox.js +112 -110
  35. package/dist/react/checkbox.js.map +1 -1
  36. package/dist/react/close-button.d.ts +25 -0
  37. package/dist/react/close-button.js +54 -0
  38. package/dist/react/close-button.js.map +1 -0
  39. package/dist/react/combobox.d.ts +17 -0
  40. package/dist/react/combobox.js +322 -0
  41. package/dist/react/combobox.js.map +1 -0
  42. package/dist/react/dialog.d.ts +15 -15
  43. package/dist/react/dialog.js +43 -108
  44. package/dist/react/dialog.js.map +1 -1
  45. package/dist/react/dropdown-account-breadcrumb.d.ts +5 -0
  46. package/dist/react/dropdown-account-breadcrumb.js +319 -0
  47. package/dist/react/dropdown-account-breadcrumb.js.map +1 -0
  48. package/dist/react/dropdown-account-button.d.ts +5 -0
  49. package/dist/react/dropdown-account-button.js +773 -0
  50. package/dist/react/dropdown-account-button.js.map +1 -0
  51. package/dist/react/dropdown-account-card-md.d.ts +5 -0
  52. package/dist/react/dropdown-account-card-md.js +549 -0
  53. package/dist/react/dropdown-account-card-md.js.map +1 -0
  54. package/dist/react/dropdown-account-card-sm.d.ts +5 -0
  55. package/dist/react/dropdown-account-card-sm.js +527 -0
  56. package/dist/react/dropdown-account-card-sm.js.map +1 -0
  57. package/dist/react/dropdown-account-card-xs.d.ts +5 -0
  58. package/dist/react/dropdown-account-card-xs.js +507 -0
  59. package/dist/react/dropdown-account-card-xs.js.map +1 -0
  60. package/dist/react/dropdown-avatar.d.ts +5 -0
  61. package/dist/react/dropdown-avatar.js +790 -0
  62. package/dist/react/dropdown-avatar.js.map +1 -0
  63. package/dist/react/dropdown-button-advanced.d.ts +5 -0
  64. package/dist/react/dropdown-button-advanced.js +799 -0
  65. package/dist/react/dropdown-button-advanced.js.map +1 -0
  66. package/dist/react/dropdown-button-link.d.ts +5 -0
  67. package/dist/react/dropdown-button-link.js +501 -0
  68. package/dist/react/dropdown-button-link.js.map +1 -0
  69. package/dist/react/dropdown-button-simple.d.ts +5 -0
  70. package/dist/react/dropdown-button-simple.js +754 -0
  71. package/dist/react/dropdown-button-simple.js.map +1 -0
  72. package/dist/react/dropdown-icon-advanced.d.ts +5 -0
  73. package/dist/react/dropdown-icon-advanced.js +543 -0
  74. package/dist/react/dropdown-icon-advanced.js.map +1 -0
  75. package/dist/react/dropdown-icon-simple.d.ts +5 -0
  76. package/dist/react/dropdown-icon-simple.js +505 -0
  77. package/dist/react/dropdown-icon-simple.js.map +1 -0
  78. package/dist/react/dropdown-integration.d.ts +5 -0
  79. package/dist/react/dropdown-integration.js +1325 -0
  80. package/dist/react/dropdown-integration.js.map +1 -0
  81. package/dist/react/dropdown-search-advanced.d.ts +5 -0
  82. package/dist/react/dropdown-search-advanced.js +998 -0
  83. package/dist/react/dropdown-search-advanced.js.map +1 -0
  84. package/dist/react/dropdown-search-simple.d.ts +5 -0
  85. package/dist/react/dropdown-search-simple.js +960 -0
  86. package/dist/react/dropdown-search-simple.js.map +1 -0
  87. package/dist/react/dropdown.d.ts +32 -133
  88. package/dist/react/dropdown.js +404 -1351
  89. package/dist/react/dropdown.js.map +1 -1
  90. package/dist/react/file-upload-trigger.d.ts +34 -0
  91. package/dist/react/file-upload-trigger.js +39 -0
  92. package/dist/react/file-upload-trigger.js.map +1 -0
  93. package/dist/react/form.d.ts +10 -0
  94. package/dist/react/form.js +11 -0
  95. package/dist/react/form.js.map +1 -0
  96. package/dist/react/hint-text.d.ts +17 -0
  97. package/dist/react/hint-text.js +36 -0
  98. package/dist/react/hint-text.js.map +1 -0
  99. package/dist/react/hook-form.d.ts +35 -0
  100. package/dist/react/hook-form.js +50 -0
  101. package/dist/react/hook-form.js.map +1 -0
  102. package/dist/react/input-date.d.ts +43 -0
  103. package/dist/react/input-date.js +306 -0
  104. package/dist/react/input-date.js.map +1 -0
  105. package/dist/react/input-file.d.ts +45 -0
  106. package/dist/react/input-file.js +748 -0
  107. package/dist/react/input-file.js.map +1 -0
  108. package/dist/react/input-group.d.ts +37 -0
  109. package/dist/react/input-group.js +251 -0
  110. package/dist/react/input-group.js.map +1 -0
  111. package/dist/react/input-number.d.ts +32 -0
  112. package/dist/react/input-number.js +553 -0
  113. package/dist/react/input-number.js.map +1 -0
  114. package/dist/react/input-payment.d.ts +16 -0
  115. package/dist/react/input-payment.js +593 -0
  116. package/dist/react/input-payment.js.map +1 -0
  117. package/dist/react/input-tags-outer.d.ts +53 -0
  118. package/dist/react/input-tags-outer.js +607 -0
  119. package/dist/react/input-tags-outer.js.map +1 -0
  120. package/dist/react/input-tags.d.ts +53 -0
  121. package/dist/react/input-tags.js +565 -0
  122. package/dist/react/input-tags.js.map +1 -0
  123. package/dist/react/input.d.ts +71 -22
  124. package/dist/react/input.js +332 -45
  125. package/dist/react/input.js.map +1 -1
  126. package/dist/react/label.d.ts +18 -0
  127. package/dist/react/label.js +112 -0
  128. package/dist/react/label.js.map +1 -0
  129. package/dist/react/multi-select.d.ts +89 -0
  130. package/dist/react/multi-select.js +1036 -0
  131. package/dist/react/multi-select.js.map +1 -0
  132. package/dist/react/pin-input.d.ts +59 -0
  133. package/dist/react/pin-input.js +229 -0
  134. package/dist/react/pin-input.js.map +1 -0
  135. package/dist/react/popover.d.ts +7 -73
  136. package/dist/react/popover.js +23 -569
  137. package/dist/react/popover.js.map +1 -1
  138. package/dist/react/progress-circle.d.ts +9 -0
  139. package/dist/react/progress-circle.js +36 -0
  140. package/dist/react/progress-circle.js.map +1 -0
  141. package/dist/react/progress-circles.d.ts +14 -0
  142. package/dist/react/progress-circles.js +160 -0
  143. package/dist/react/progress-circles.js.map +1 -0
  144. package/dist/react/progress-indicators.d.ts +52 -0
  145. package/dist/react/progress-indicators.js +78 -0
  146. package/dist/react/progress-indicators.js.map +1 -0
  147. package/dist/react/radio-buttons.d.ts +35 -0
  148. package/dist/react/radio-buttons.js +116 -0
  149. package/dist/react/radio-buttons.js.map +1 -0
  150. package/dist/react/scroll-header.d.ts +6 -0
  151. package/dist/react/scroll-header.js +42 -61
  152. package/dist/react/scroll-header.js.map +1 -1
  153. package/dist/react/scroll-wheel.d.ts +4 -5
  154. package/dist/react/scroll-wheel.js +19 -15
  155. package/dist/react/scroll-wheel.js.map +1 -1
  156. package/dist/react/select-item.d.ts +13 -0
  157. package/dist/react/select-item.js +336 -0
  158. package/dist/react/select-item.js.map +1 -0
  159. package/dist/react/select-native.d.ts +17 -0
  160. package/dist/react/select-native.js +203 -0
  161. package/dist/react/select-native.js.map +1 -0
  162. package/dist/react/select.d.ts +18 -61
  163. package/dist/react/select.js +625 -923
  164. package/dist/react/select.js.map +1 -1
  165. package/dist/react/sheet.d.ts +19 -19
  166. package/dist/react/sheet.js +97 -219
  167. package/dist/react/sheet.js.map +1 -1
  168. package/dist/react/slider.d.ts +15 -0
  169. package/dist/react/slider.js +66 -0
  170. package/dist/react/slider.js.map +1 -0
  171. package/dist/react/social-button.d.ts +55 -0
  172. package/dist/react/social-button.js +263 -0
  173. package/dist/react/social-button.js.map +1 -0
  174. package/dist/react/social-logos.d.ts +20 -0
  175. package/dist/react/social-logos.js +131 -0
  176. package/dist/react/social-logos.js.map +1 -0
  177. package/dist/react/switch.d.ts +21 -36
  178. package/dist/react/switch.js +121 -109
  179. package/dist/react/switch.js.map +1 -1
  180. package/dist/react/tag-select.d.ts +44 -0
  181. package/dist/react/tag-select.js +1062 -0
  182. package/dist/react/tag-select.js.map +1 -0
  183. package/dist/react/tags.d.ts +30 -0
  184. package/dist/react/tags.js +228 -0
  185. package/dist/react/tags.js.map +1 -0
  186. package/dist/react/textarea.d.ts +40 -4
  187. package/dist/react/textarea.js +193 -27
  188. package/dist/react/textarea.js.map +1 -1
  189. package/dist/react/tooltip.d.ts +30 -43
  190. package/dist/react/tooltip.js +65 -521
  191. package/dist/react/tooltip.js.map +1 -1
  192. package/dist/select-shared-B3Y5SMXU.d.ts +62 -0
  193. package/package.json +28 -21
  194. package/source.css +2 -13
  195. package/theme.css +883 -79
  196. package/dist/react/calendar.d.ts +0 -13
  197. package/dist/react/calendar.js +0 -4639
  198. package/dist/react/calendar.js.map +0 -1
  199. package/dist/react/card.d.ts +0 -11
  200. package/dist/react/card.js +0 -113
  201. package/dist/react/card.js.map +0 -1
  202. package/dist/react/datetime-picker.d.ts +0 -21
  203. package/dist/react/datetime-picker.js +0 -6142
  204. package/dist/react/datetime-picker.js.map +0 -1
  205. package/dist/react/pagination.d.ts +0 -28
  206. package/dist/react/pagination.js +0 -262
  207. package/dist/react/pagination.js.map +0 -1
  208. package/dist/react/table-pagination.d.ts +0 -15
  209. package/dist/react/table-pagination.js +0 -1247
  210. package/dist/react/table-pagination.js.map +0 -1
  211. package/dist/react/table-view/column-menu.d.ts +0 -15
  212. package/dist/react/table-view/column-menu.js +0 -1049
  213. package/dist/react/table-view/column-menu.js.map +0 -1
  214. package/dist/react/table-view/index.d.ts +0 -70
  215. package/dist/react/table-view/index.js +0 -2284
  216. package/dist/react/table-view/index.js.map +0 -1
  217. package/dist/react/table.d.ts +0 -86
  218. package/dist/react/table.js +0 -414
  219. package/dist/react/table.js.map +0 -1
  220. package/dist/react/tabs.d.ts +0 -34
  221. package/dist/react/tabs.js +0 -423
  222. package/dist/react/tabs.js.map +0 -1
  223. package/dist/react/time-picker.d.ts +0 -22
  224. package/dist/react/time-picker.js +0 -856
  225. package/dist/react/time-picker.js.map +0 -1
@@ -1,582 +1,36 @@
1
- import React, { useState, useRef, useCallback, useMemo, useEffect, useLayoutEffect } from 'react';
2
- import { createPortal } from 'react-dom';
3
- import { X } from 'lucide-react';
4
- import { clsx } from 'clsx';
5
- import { twMerge } from 'tailwind-merge';
6
- import { jsxs, jsx } from 'react/jsx-runtime';
1
+ import { Popover as Popover$1 } from 'react-aria-components';
2
+ import { extendTailwindMerge } from 'tailwind-merge';
3
+ import { jsx } from 'react/jsx-runtime';
7
4
 
8
- function cn(...inputs) {
9
- return twMerge(clsx(inputs));
10
- }
11
- var POPOVER_MOBILE_SHEET_MAX_PX = 1024;
12
- var POPOVER_MOBILE_SHEET_MOTION_MS = 175;
13
- var POPOVER_MOBILE_SHEET_ENTRY_EASING = "cubic-bezier(0.85, 0, 0.15, 1)";
14
- var POPOVER_MOBILE_SHEET_EXIT_EASING = "cubic-bezier(0.85, 0, 1, 0.15)";
15
- var POPOVER_MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_DEFAULT_PX = 120;
16
- var POPOVER_FLIP_MIN_SPACE_PX = 100;
17
- function preventPopoverWheelChain(panel, e) {
18
- let el = e.target;
19
- while (el && panel.contains(el)) {
20
- const oy = getComputedStyle(el).overflowY;
21
- if ((oy === "auto" || oy === "scroll") && el.scrollHeight > el.clientHeight) {
22
- const atTop = el.scrollTop <= 0;
23
- const atBottom = el.scrollTop + el.clientHeight >= el.scrollHeight;
24
- if (e.deltaY < 0 && !atTop || e.deltaY > 0 && !atBottom) return;
25
- break;
5
+ var twMerge = extendTailwindMerge({
6
+ extend: {
7
+ theme: {
8
+ text: ["display-xs", "display-sm", "display-md", "display-lg", "display-xl", "display-2xl"]
26
9
  }
27
- el = el.parentElement;
28
- }
29
- e.preventDefault();
30
- }
31
- function usePopoverIsMobile(breakpoint = 1025) {
32
- const [isMobile, setIsMobile] = useState(false);
33
- useEffect(() => {
34
- const mq = window.matchMedia(`(max-width: ${breakpoint - 1}px)`);
35
- setIsMobile(mq.matches);
36
- const handler = (e) => setIsMobile(e.matches);
37
- mq.addEventListener("change", handler);
38
- return () => mq.removeEventListener("change", handler);
39
- }, [breakpoint]);
40
- return isMobile;
41
- }
42
- var PopoverContext = React.createContext(
43
- void 0
44
- );
45
- function usePopover() {
46
- const context = React.useContext(PopoverContext);
47
- if (!context) {
48
- throw new Error("Popover components must be used within a <Popover />");
49
- }
50
- return context;
51
- }
52
- var Popover = ({ children, open: controlledOpen, onOpenChange }) => {
53
- const [internalOpen, setInternalOpen] = useState(false);
54
- const isControlled = controlledOpen !== void 0;
55
- const open = isControlled ? controlledOpen : internalOpen;
56
- const triggerRef = useRef(null);
57
- const setOpen = useCallback(
58
- (value) => {
59
- if (!isControlled) setInternalOpen(value);
60
- onOpenChange?.(value);
61
- },
62
- [isControlled, onOpenChange]
63
- );
64
- return /* @__PURE__ */ jsx(PopoverContext.Provider, { value: { open, setOpen, triggerRef }, children });
65
- };
66
- var PopoverTrigger = ({ children, asChild }) => {
67
- const { open, setOpen, triggerRef } = usePopover();
68
- const handleClick = (e) => {
69
- e.stopPropagation();
70
- setOpen(!open);
71
- };
72
- if (asChild && React.isValidElement(children)) {
73
- const child = children;
74
- return React.cloneElement(child, {
75
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
76
- ref: (el) => {
77
- triggerRef.current = el;
78
- },
79
- onClick: (e) => {
80
- child.props.onClick?.(e);
81
- handleClick(e);
82
- }
83
- });
84
10
  }
11
+ });
12
+ var cx = twMerge;
13
+ var Popover = (props) => {
85
14
  return /* @__PURE__ */ jsx(
86
- "button",
15
+ Popover$1,
87
16
  {
88
- type: "button",
89
- ref: (el) => {
90
- triggerRef.current = el;
91
- },
92
- onClick: handleClick,
93
- children
94
- }
95
- );
96
- };
97
- var PopoverClose = ({ children, asChild }) => {
98
- const { setOpen } = usePopover();
99
- const handleClick = () => setOpen(false);
100
- if (asChild && React.isValidElement(children)) {
101
- const child = children;
102
- return React.cloneElement(child, {
103
- onClick: (e) => {
104
- child.props.onClick?.(e);
105
- handleClick();
106
- }
107
- });
108
- }
109
- return /* @__PURE__ */ jsx("button", { type: "button", onClick: handleClick, children });
110
- };
111
- function resolvePopoverMobileSheet(mobileOptions) {
112
- return {
113
- sheet: mobileOptions?.sheet ?? false,
114
- title: mobileOptions?.title,
115
- sheetExtraClassName: mobileOptions?.className,
116
- contentClassName: mobileOptions?.contentClassName
117
- };
118
- }
119
- var PopoverMobileClose = React.forwardRef(({ className, type = "button", ...props }, ref) => {
120
- return /* @__PURE__ */ jsxs(
121
- "button",
122
- {
123
- ref,
124
- type,
125
- className: cn(
126
- "z-100 flex size-12 shrink-0 cursor-pointer items-center justify-center rounded-full transition-all hover:bg-secondary-background active:scale-[0.96]",
127
- className
128
- ),
17
+ placement: "bottom",
18
+ containerPadding: 0,
19
+ offset: 4,
129
20
  ...props,
130
- children: [
131
- /* @__PURE__ */ jsx(X, { className: "size-5.5" }),
132
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
133
- ]
134
- }
135
- );
136
- });
137
- PopoverMobileClose.displayName = "PopoverMobileClose";
138
- function PopoverMobileBottomSheetPortal({
139
- open,
140
- isAnimating,
141
- slideEntrance,
142
- slideOffsetPx,
143
- sheetTitle,
144
- sheetExtraClassName,
145
- contentClassName,
146
- onRequestClose,
147
- menuRef,
148
- dismissOnBackdropPress = true,
149
- children,
150
- className,
151
- style,
152
- ...panelProps
153
- }) {
154
- const sheetMotion = open ? POPOVER_MOBILE_SHEET_ENTRY_EASING : POPOVER_MOBILE_SHEET_EXIT_EASING;
155
- const sheetHiddenTransform = slideEntrance ? `translateY(${slideOffsetPx}px)` : "translateY(100%)";
156
- return createPortal(
157
- /* @__PURE__ */ jsxs("div", { className: "fixed inset-0 z-50 flex items-end justify-center p-0", children: [
158
- /* @__PURE__ */ jsx(
159
- "div",
160
- {
161
- className: cn(
162
- "fixed inset-0 bg-black/40 dark:bg-primary/4",
163
- isAnimating ? "opacity-100" : "opacity-0"
164
- ),
165
- style: {
166
- transitionProperty: "opacity",
167
- transitionDuration: `${POPOVER_MOBILE_SHEET_MOTION_MS}ms`,
168
- transitionTimingFunction: sheetMotion
169
- },
170
- onClick: dismissOnBackdropPress ? onRequestClose : void 0,
171
- "aria-hidden": true
172
- }
173
- ),
174
- /* @__PURE__ */ jsxs(
175
- "div",
176
- {
177
- ...panelProps,
178
- ref: menuRef,
179
- className: cn(
180
- // Panel chrome + padding rhythm matches `DropdownMobileBottomSheetPortal`.
181
- "bg-background border-primary/10 relative z-10 flex w-full max-h-[min(90dvh,calc(100dvh-env(safe-area-inset-bottom,0px)))] flex-col overflow-hidden shadow-2xl outline-none",
182
- "rounded-t-2xl rounded-b-none border-x-0 border-b-0 border-t",
183
- sheetExtraClassName,
184
- className
185
- ),
186
- style: {
187
- transform: isAnimating ? "translateY(0)" : sheetHiddenTransform,
188
- opacity: isAnimating ? 1 : 0,
189
- transitionProperty: "transform, opacity",
190
- transitionDuration: `${POPOVER_MOBILE_SHEET_MOTION_MS}ms`,
191
- transitionTimingFunction: sheetMotion,
192
- ...style
193
- },
194
- children: [
195
- /* @__PURE__ */ jsxs(
196
- "div",
197
- {
198
- className: cn(
199
- "flex w-full shrink-0 items-center py-2 pl-4 pr-2",
200
- sheetTitle ? "justify-between gap-3" : "justify-end"
201
- ),
202
- children: [
203
- sheetTitle ? /* @__PURE__ */ jsx("p", { className: "text-foreground min-w-0 flex-1 truncate text-base font-semibold", children: sheetTitle }) : null,
204
- /* @__PURE__ */ jsx(
205
- PopoverMobileClose,
206
- {
207
- onClick: (e) => {
208
- e.stopPropagation();
209
- onRequestClose();
210
- }
211
- }
212
- )
213
- ]
214
- }
215
- ),
216
- /* @__PURE__ */ jsx(
217
- "div",
218
- {
219
- className: cn(
220
- "min-h-0 flex-1 overflow-y-auto px-4 pt-3",
221
- contentClassName,
222
- "pb-[calc(5rem+env(safe-area-inset-bottom,0px))]"
223
- ),
224
- children
225
- }
226
- )
227
- ]
228
- }
21
+ className: (state) => cx(
22
+ "w-(--trigger-width) origin-(--trigger-anchor-point) overflow-x-hidden overflow-y-auto rounded-lg bg-primary py-1 shadow-lg ring-1 ring-secondary_alt outline-hidden will-change-transform",
23
+ state.isEntering && "duration-150 ease-out animate-in fade-in placement-right:slide-in-from-left-0.5 placement-top:slide-in-from-bottom-0.5 placement-bottom:slide-in-from-top-0.5",
24
+ state.isExiting && "duration-100 ease-in animate-out fade-out placement-right:slide-out-to-left-0.5 placement-top:slide-out-to-bottom-0.5 placement-bottom:slide-out-to-top-0.5",
25
+ props.size === "sm" && "max-h-56!",
26
+ props.size === "md" && "max-h-64!",
27
+ props.size === "lg" && "max-h-80!",
28
+ typeof props.className === "function" ? props.className(state) : props.className
229
29
  )
230
- ] }),
231
- document.body
232
- );
233
- }
234
- function computePosition(trigger, popover, side, align, offset, viewportPadding) {
235
- const triggerRect = trigger.getBoundingClientRect();
236
- const pw = popover.offsetWidth;
237
- const ph = popover.offsetHeight;
238
- const contentHeight = popover.scrollHeight;
239
- const vw = window.innerWidth;
240
- const vh = window.innerHeight;
241
- const pad = viewportPadding;
242
- let top = 0;
243
- let left = 0;
244
- let effectiveSide = side;
245
- let maxHeight;
246
- const placeVertical = (s, height) => {
247
- if (s === "bottom") top = triggerRect.bottom + offset;
248
- else top = triggerRect.top - height - offset;
249
- if (align === "start") left = triggerRect.left;
250
- else if (align === "end") left = triggerRect.right - pw;
251
- else left = triggerRect.left + triggerRect.width / 2 - pw / 2;
252
- };
253
- const place = (s, height = contentHeight) => {
254
- switch (s) {
255
- case "bottom":
256
- case "top":
257
- placeVertical(s, height);
258
- break;
259
- case "right":
260
- left = triggerRect.right + offset;
261
- top = align === "start" ? triggerRect.top : align === "end" ? triggerRect.bottom - ph : triggerRect.top + triggerRect.height / 2 - ph / 2;
262
- break;
263
- case "left":
264
- left = triggerRect.left - pw - offset;
265
- top = align === "start" ? triggerRect.top : align === "end" ? triggerRect.bottom - ph : triggerRect.top + triggerRect.height / 2 - ph / 2;
266
- break;
267
30
  }
268
- };
269
- place(side);
270
- const spaceBelow = Math.max(0, vh - pad - triggerRect.bottom - offset);
271
- const spaceAbove = Math.max(0, triggerRect.top - offset - pad);
272
- if (side === "bottom" || side === "top") {
273
- const primarySpace = side === "bottom" ? spaceBelow : spaceAbove;
274
- const alternateSpace = side === "bottom" ? spaceAbove : spaceBelow;
275
- const alternateSide = side === "bottom" ? "top" : "bottom";
276
- if (contentHeight > primarySpace) {
277
- maxHeight = Math.min(contentHeight, primarySpace);
278
- place(side, maxHeight);
279
- }
280
- if (contentHeight > primarySpace && primarySpace < POPOVER_FLIP_MIN_SPACE_PX && alternateSpace > primarySpace) {
281
- effectiveSide = alternateSide;
282
- maxHeight = Math.min(contentHeight, alternateSpace);
283
- place(alternateSide, maxHeight);
284
- }
285
- } else if (side === "right" && left + pw > vw - pad) {
286
- const flippedLeft = triggerRect.left - pw - offset;
287
- if (flippedLeft >= pad) {
288
- effectiveSide = "left";
289
- left = flippedLeft;
290
- }
291
- } else if (side === "left" && left < pad) {
292
- const flippedLeft = triggerRect.right + offset;
293
- if (flippedLeft + pw <= vw - pad) {
294
- effectiveSide = "right";
295
- left = flippedLeft;
296
- }
297
- }
298
- return { top, left, side: effectiveSide, maxHeight };
299
- }
300
- var ARROW_SIZE = 6;
301
- var PopoverContent = ({
302
- children,
303
- side = "bottom",
304
- align = "center",
305
- offset = 10,
306
- showArrow = false,
307
- closeOnClickOutside = true,
308
- closeOnEscape = true,
309
- duration = 80,
310
- viewportPadding = 8,
311
- container,
312
- width = "auto",
313
- mobileOptions,
314
- slideEntrance = true,
315
- slideEntranceOffsetPx: slideEntranceOffsetPxProp,
316
- className,
317
- style,
318
- ...props
319
- }) => {
320
- const { open, setOpen, triggerRef } = usePopover();
321
- const isMobile = usePopoverIsMobile(POPOVER_MOBILE_SHEET_MAX_PX + 1);
322
- const resolvedMobile = useMemo(
323
- () => resolvePopoverMobileSheet(mobileOptions),
324
- [mobileOptions]
325
- );
326
- const sheetMode = isMobile && resolvedMobile.sheet;
327
- const slideOffsetPx = useMemo(
328
- () => slideEntranceOffsetPxProp ?? POPOVER_MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_DEFAULT_PX,
329
- [slideEntranceOffsetPxProp]
330
- );
331
- const closeDuration = sheetMode ? POPOVER_MOBILE_SHEET_MOTION_MS : duration;
332
- const [shouldRender, setShouldRender] = useState(false);
333
- const [isAnimating, setIsAnimating] = useState(false);
334
- const [position, setPosition] = useState({
335
- top: -9999,
336
- left: -9999,
337
- side
338
- });
339
- const [triggerWidth, setTriggerWidth] = useState(0);
340
- const popoverRef = useRef(null);
341
- const closePopover = useCallback(() => setOpen(false), [setOpen]);
342
- useEffect(() => {
343
- if (open) {
344
- setShouldRender(true);
345
- } else {
346
- setIsAnimating(false);
347
- const timer = setTimeout(() => setShouldRender(false), closeDuration);
348
- return () => clearTimeout(timer);
349
- }
350
- }, [open, closeDuration]);
351
- useEffect(() => {
352
- if (!shouldRender || !open) return;
353
- let raf2 = 0;
354
- const raf1 = requestAnimationFrame(() => {
355
- raf2 = requestAnimationFrame(() => setIsAnimating(true));
356
- });
357
- return () => {
358
- cancelAnimationFrame(raf1);
359
- if (raf2) cancelAnimationFrame(raf2);
360
- };
361
- }, [shouldRender, open]);
362
- useLayoutEffect(() => {
363
- if (!shouldRender || !open || sheetMode || !triggerRef.current || !popoverRef.current)
364
- return;
365
- const update = () => {
366
- if (!triggerRef.current || !popoverRef.current) return;
367
- setTriggerWidth(triggerRef.current.getBoundingClientRect().width);
368
- const pos = computePosition(
369
- triggerRef.current,
370
- popoverRef.current,
371
- side,
372
- align,
373
- offset,
374
- viewportPadding
375
- );
376
- setPosition(pos);
377
- };
378
- update();
379
- window.addEventListener("resize", update);
380
- window.addEventListener("scroll", update, true);
381
- return () => {
382
- window.removeEventListener("resize", update);
383
- window.removeEventListener("scroll", update, true);
384
- };
385
- }, [shouldRender, open, sheetMode, side, align, offset, viewportPadding]);
386
- useEffect(() => {
387
- if (!shouldRender || !open || sheetMode || position.maxHeight == null) return;
388
- const panel = popoverRef.current;
389
- if (!panel) return;
390
- const onWheel = (e) => preventPopoverWheelChain(panel, e);
391
- panel.addEventListener("wheel", onWheel, { passive: false });
392
- return () => panel.removeEventListener("wheel", onWheel);
393
- }, [shouldRender, open, sheetMode, position.maxHeight]);
394
- useEffect(() => {
395
- if (open && sheetMode) {
396
- document.body.style.overflow = "hidden";
397
- }
398
- return () => {
399
- document.body.style.overflow = "";
400
- };
401
- }, [open, sheetMode]);
402
- useEffect(() => {
403
- if (!open || !closeOnClickOutside || sheetMode) return;
404
- const handler = (e) => {
405
- const target = e.target;
406
- if (popoverRef.current?.contains(target) || triggerRef.current?.contains(target))
407
- return;
408
- setOpen(false);
409
- };
410
- document.addEventListener("mousedown", handler);
411
- return () => document.removeEventListener("mousedown", handler);
412
- }, [open, closeOnClickOutside, sheetMode, setOpen, triggerRef]);
413
- useEffect(() => {
414
- if (!open || !closeOnEscape) return;
415
- const handler = (e) => {
416
- if (e.key === "Escape") setOpen(false);
417
- };
418
- window.addEventListener("keydown", handler);
419
- return () => window.removeEventListener("keydown", handler);
420
- }, [open, closeOnEscape, setOpen]);
421
- if (!shouldRender) return null;
422
- if (sheetMode && typeof document !== "undefined") {
423
- return /* @__PURE__ */ jsx(
424
- PopoverMobileBottomSheetPortal,
425
- {
426
- ...props,
427
- open,
428
- isAnimating,
429
- slideEntrance,
430
- slideOffsetPx,
431
- sheetTitle: resolvedMobile.title,
432
- sheetExtraClassName: resolvedMobile.sheetExtraClassName,
433
- contentClassName: cn(resolvedMobile.contentClassName, className),
434
- onRequestClose: closePopover,
435
- dismissOnBackdropPress: closeOnClickOutside,
436
- menuRef: popoverRef,
437
- role: "dialog",
438
- "aria-modal": "true",
439
- tabIndex: -1,
440
- className: void 0,
441
- style,
442
- "data-slot": "popover-content",
443
- children
444
- }
445
- );
446
- }
447
- const transformOrigin = {
448
- bottom: "top center",
449
- top: "bottom center",
450
- left: "right center",
451
- right: "left center"
452
- };
453
- const hiddenTransform = {
454
- bottom: "translateY(-6px) scale(0.97)",
455
- top: "translateY(6px) scale(0.97)",
456
- left: "translateX(6px) scale(0.97)",
457
- right: "translateX(-6px) scale(0.97)"
458
- };
459
- const resolvedWidth = width === "trigger" ? triggerWidth : width === "auto" ? void 0 : width;
460
- const arrowStyles = () => {
461
- const base = {
462
- position: "absolute",
463
- width: 0,
464
- height: 0,
465
- pointerEvents: "none"
466
- };
467
- switch (position.side) {
468
- case "bottom":
469
- return {
470
- ...base,
471
- top: -ARROW_SIZE,
472
- left: "50%",
473
- transform: "translateX(-50%)",
474
- borderLeft: `${ARROW_SIZE}px solid transparent`,
475
- borderRight: `${ARROW_SIZE}px solid transparent`,
476
- borderBottom: `${ARROW_SIZE}px solid var(--border)`
477
- };
478
- case "top":
479
- return {
480
- ...base,
481
- bottom: -ARROW_SIZE,
482
- left: "50%",
483
- transform: "translateX(-50%)",
484
- borderLeft: `${ARROW_SIZE}px solid transparent`,
485
- borderRight: `${ARROW_SIZE}px solid transparent`,
486
- borderTop: `${ARROW_SIZE}px solid var(--border)`
487
- };
488
- case "right":
489
- return {
490
- ...base,
491
- left: -ARROW_SIZE,
492
- top: "50%",
493
- transform: "translateY(-50%)",
494
- borderTop: `${ARROW_SIZE}px solid transparent`,
495
- borderBottom: `${ARROW_SIZE}px solid transparent`,
496
- borderRight: `${ARROW_SIZE}px solid var(--border)`
497
- };
498
- case "left":
499
- return {
500
- ...base,
501
- right: -ARROW_SIZE,
502
- top: "50%",
503
- transform: "translateY(-50%)",
504
- borderTop: `${ARROW_SIZE}px solid transparent`,
505
- borderBottom: `${ARROW_SIZE}px solid transparent`,
506
- borderLeft: `${ARROW_SIZE}px solid var(--border)`
507
- };
508
- }
509
- };
510
- const resolvedContainer = container !== void 0 ? container : typeof document !== "undefined" ? document.body : null;
511
- if (!resolvedContainer) return null;
512
- return createPortal(
513
- /* @__PURE__ */ jsxs(
514
- "div",
515
- {
516
- ...props,
517
- ref: popoverRef,
518
- className: cn(
519
- "bg-background border-primary/10 fixed z-50 rounded-xl border shadow-xl outline-none",
520
- className,
521
- position.maxHeight != null ? "overflow-y-auto overscroll-contain" : "overflow-hidden"
522
- ),
523
- "data-slot": "popover-content",
524
- style: {
525
- position: "fixed",
526
- top: position.top,
527
- left: position.left,
528
- width: resolvedWidth,
529
- maxHeight: position.maxHeight,
530
- transformOrigin: transformOrigin[position.side],
531
- transform: isAnimating ? "none" : hiddenTransform[position.side],
532
- opacity: isAnimating ? 1 : 0,
533
- transition: `opacity ${duration}ms ease, transform ${duration}ms ease`,
534
- ...style
535
- },
536
- children: [
537
- showArrow && /* @__PURE__ */ jsx("div", { style: arrowStyles() }),
538
- children
539
- ]
540
- }
541
- ),
542
- resolvedContainer
543
31
  );
544
32
  };
545
- var PopoverHeader = ({
546
- className,
547
- ...props
548
- }) => /* @__PURE__ */ jsx(
549
- "div",
550
- {
551
- className: cn(
552
- "border-primary/10 flex flex-col space-y-1 border-b px-4 py-3",
553
- className
554
- ),
555
- ...props
556
- }
557
- );
558
- var PopoverFooter = ({
559
- className,
560
- ...props
561
- }) => /* @__PURE__ */ jsx(
562
- "div",
563
- {
564
- className: cn(
565
- "border-primary/10 flex flex-row justify-end gap-2 border-t px-4 py-3",
566
- className
567
- ),
568
- ...props
569
- }
570
- );
571
- var PopoverTitle = ({ className, ...props }) => /* @__PURE__ */ jsx(
572
- "h4",
573
- {
574
- className: cn("text-primary text-sm leading-none font-semibold", className),
575
- ...props
576
- }
577
- );
578
- var PopoverDescription = ({ className, ...props }) => /* @__PURE__ */ jsx("p", { className: cn("text-muted-foreground text-xs", className), ...props });
579
33
 
580
- export { Popover, PopoverClose, PopoverContent, PopoverDescription, PopoverFooter, PopoverHeader, PopoverMobileClose, PopoverTitle, PopoverTrigger };
34
+ export { Popover };
581
35
  //# sourceMappingURL=popover.js.map
582
36
  //# sourceMappingURL=popover.js.map