@avenue-ticketing/ui 0.12.0-beta.1 → 0.12.0-beta.3

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 (82) hide show
  1. package/dist/react/badge-groups.js +2 -2
  2. package/dist/react/badge-groups.js.map +1 -1
  3. package/dist/react/badge.js +49 -18
  4. package/dist/react/badge.js.map +1 -1
  5. package/dist/react/button.js +2 -2
  6. package/dist/react/button.js.map +1 -1
  7. package/dist/react/checkbox.js +10 -7
  8. package/dist/react/checkbox.js.map +1 -1
  9. package/dist/react/combobox.d.ts +3 -2
  10. package/dist/react/combobox.js +284 -32
  11. package/dist/react/combobox.js.map +1 -1
  12. package/dist/react/dropdown-account-breadcrumb.js +176 -14
  13. package/dist/react/dropdown-account-breadcrumb.js.map +1 -1
  14. package/dist/react/dropdown-account-button.js +190 -25
  15. package/dist/react/dropdown-account-button.js.map +1 -1
  16. package/dist/react/dropdown-account-card-md.js +189 -24
  17. package/dist/react/dropdown-account-card-md.js.map +1 -1
  18. package/dist/react/dropdown-account-card-sm.js +189 -24
  19. package/dist/react/dropdown-account-card-sm.js.map +1 -1
  20. package/dist/react/dropdown-account-card-xs.js +189 -24
  21. package/dist/react/dropdown-account-card-xs.js.map +1 -1
  22. package/dist/react/dropdown-avatar.js +190 -25
  23. package/dist/react/dropdown-avatar.js.map +1 -1
  24. package/dist/react/dropdown-button-advanced.js +190 -25
  25. package/dist/react/dropdown-button-advanced.js.map +1 -1
  26. package/dist/react/dropdown-button-link.js +189 -24
  27. package/dist/react/dropdown-button-link.js.map +1 -1
  28. package/dist/react/dropdown-button-simple.js +190 -25
  29. package/dist/react/dropdown-button-simple.js.map +1 -1
  30. package/dist/react/dropdown-icon-advanced.js +189 -24
  31. package/dist/react/dropdown-icon-advanced.js.map +1 -1
  32. package/dist/react/dropdown-icon-simple.js +189 -24
  33. package/dist/react/dropdown-icon-simple.js.map +1 -1
  34. package/dist/react/dropdown-integration.js +190 -25
  35. package/dist/react/dropdown-integration.js.map +1 -1
  36. package/dist/react/dropdown-search-advanced.js +191 -26
  37. package/dist/react/dropdown-search-advanced.js.map +1 -1
  38. package/dist/react/dropdown-search-simple.js +191 -26
  39. package/dist/react/dropdown-search-simple.js.map +1 -1
  40. package/dist/react/dropdown.d.ts +4 -1
  41. package/dist/react/dropdown.js +189 -24
  42. package/dist/react/dropdown.js.map +1 -1
  43. package/dist/react/input-date.js.map +1 -1
  44. package/dist/react/input-file.js +3 -3
  45. package/dist/react/input-file.js.map +1 -1
  46. package/dist/react/input-group.js.map +1 -1
  47. package/dist/react/input-number.js +2 -2
  48. package/dist/react/input-number.js.map +1 -1
  49. package/dist/react/input-payment.js +1 -1
  50. package/dist/react/input-payment.js.map +1 -1
  51. package/dist/react/input-tags-outer.js +9 -9
  52. package/dist/react/input-tags-outer.js.map +1 -1
  53. package/dist/react/input-tags.js +8 -8
  54. package/dist/react/input-tags.js.map +1 -1
  55. package/dist/react/input.js +1 -1
  56. package/dist/react/input.js.map +1 -1
  57. package/dist/react/multi-select.d.ts +3 -2
  58. package/dist/react/multi-select.js +230 -29
  59. package/dist/react/multi-select.js.map +1 -1
  60. package/dist/react/popover.d.ts +10 -1
  61. package/dist/react/popover.js +195 -18
  62. package/dist/react/popover.js.map +1 -1
  63. package/dist/react/radio-buttons.js +2 -1
  64. package/dist/react/radio-buttons.js.map +1 -1
  65. package/dist/react/select-item.d.ts +2 -1
  66. package/dist/react/select-item.js +11 -7
  67. package/dist/react/select-item.js.map +1 -1
  68. package/dist/react/select.d.ts +4 -3
  69. package/dist/react/select.js +298 -42
  70. package/dist/react/select.js.map +1 -1
  71. package/dist/react/switch.js +1 -1
  72. package/dist/react/switch.js.map +1 -1
  73. package/dist/react/tag-select.d.ts +5 -2
  74. package/dist/react/tag-select.js +215 -25
  75. package/dist/react/tag-select.js.map +1 -1
  76. package/dist/react/tags.js +8 -8
  77. package/dist/react/tags.js.map +1 -1
  78. package/dist/react/textarea.js.map +1 -1
  79. package/dist/select-mobile-sheet-CB2ptDTJ.d.ts +12 -0
  80. package/dist/{select-shared-B3Y5SMXU.d.ts → select-shared-oJEeJxeB.d.ts} +6 -0
  81. package/package.json +1 -1
  82. package/theme.css +3 -1
@@ -1,13 +1,90 @@
1
- import { MenuTrigger, MenuSection, SubmenuTrigger, Button, Popover, Menu, MenuItem, Separator } from 'react-aria-components';
2
- import { createContext, useCallback, useState, useRef, useLayoutEffect } from 'react';
1
+ import { MenuTrigger, MenuSection, SubmenuTrigger, Button, OverlayTriggerStateContext, Popover, Menu, MenuItem, Separator } from 'react-aria-components';
2
+ import { createContext, useMemo, useContext, useEffect, useCallback, useState, useLayoutEffect, useRef } from 'react';
3
+ import { createPortal } from 'react-dom';
3
4
  import { CheckIcon } from '@phosphor-icons/react/dist/csr/Check';
4
5
  import { CaretRightIcon } from '@phosphor-icons/react/dist/csr/CaretRight';
5
6
  import { DotsThreeVerticalIcon } from '@phosphor-icons/react/dist/csr/DotsThreeVertical';
7
+ import { XIcon } from '@phosphor-icons/react/dist/csr/X';
6
8
  import { extendTailwindMerge } from 'tailwind-merge';
7
9
  import { UserIcon } from '@phosphor-icons/react/dist/csr/User';
8
10
  import '@phosphor-icons/react/dist/csr/Plus';
9
- import { jsxs, jsx } from 'react/jsx-runtime';
11
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
10
12
 
13
+ var MOBILE_SHEET_MOTION_MS = 175;
14
+ var MOBILE_SHEET_ENTRY_EASING = "cubic-bezier(0.85, 0, 0.15, 1)";
15
+ var MOBILE_SHEET_EXIT_EASING = "cubic-bezier(0.85, 0, 1, 0.15)";
16
+ var MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_PX = 120;
17
+ function resolveSelectMobileOptions(mobileOptions) {
18
+ return {
19
+ sheet: mobileOptions?.sheet ?? true,
20
+ title: mobileOptions?.title,
21
+ sheetClassName: mobileOptions?.className,
22
+ contentClassName: mobileOptions?.contentClassName
23
+ };
24
+ }
25
+ function useMobileSheetAnimation(open, enabled, slideEntrance = true, slideOffsetPx = MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_PX) {
26
+ const [shouldRender, setShouldRender] = useState(open);
27
+ const [isAnimating, setIsAnimating] = useState(false);
28
+ useLayoutEffect(() => {
29
+ if (!enabled) {
30
+ setShouldRender(open);
31
+ return;
32
+ }
33
+ if (open) {
34
+ setShouldRender(true);
35
+ }
36
+ }, [open, enabled]);
37
+ useEffect(() => {
38
+ if (!enabled || open) return;
39
+ const timer = setTimeout(() => setShouldRender(false), MOBILE_SHEET_MOTION_MS);
40
+ return () => clearTimeout(timer);
41
+ }, [open, enabled]);
42
+ useLayoutEffect(() => {
43
+ if (!enabled || open || !shouldRender) return;
44
+ setIsAnimating(false);
45
+ }, [enabled, open, shouldRender]);
46
+ useEffect(() => {
47
+ if (!enabled || !shouldRender || !open) return;
48
+ let raf2 = 0;
49
+ const raf1 = requestAnimationFrame(() => {
50
+ raf2 = requestAnimationFrame(() => setIsAnimating(true));
51
+ });
52
+ return () => {
53
+ cancelAnimationFrame(raf1);
54
+ if (raf2) cancelAnimationFrame(raf2);
55
+ };
56
+ }, [shouldRender, open, enabled]);
57
+ const motionEasing = open ? MOBILE_SHEET_ENTRY_EASING : MOBILE_SHEET_EXIT_EASING;
58
+ const hiddenTransform = slideEntrance ? `translateY(${slideOffsetPx}px)` : "translateY(100%)";
59
+ const panelStyle = enabled ? {
60
+ transform: isAnimating ? "translateY(0)" : hiddenTransform,
61
+ opacity: isAnimating ? 1 : 0,
62
+ transitionProperty: "transform, opacity",
63
+ transitionDuration: `${MOBILE_SHEET_MOTION_MS}ms`,
64
+ transitionTimingFunction: motionEasing
65
+ } : void 0;
66
+ const backdropStyle = enabled ? {
67
+ opacity: isAnimating ? 1 : 0,
68
+ transitionProperty: "opacity",
69
+ transitionDuration: `${MOBILE_SHEET_MOTION_MS}ms`,
70
+ transitionTimingFunction: motionEasing
71
+ } : void 0;
72
+ return { shouldRender, isAnimating, panelStyle, backdropStyle };
73
+ }
74
+ var MOBILE_SHEET_MAX_PX = 1024;
75
+ function useIsMobile(breakpoint = MOBILE_SHEET_MAX_PX + 1) {
76
+ const [isMobile, setIsMobile] = useState(() => {
77
+ if (typeof window === "undefined") return false;
78
+ return window.matchMedia(`(max-width: ${breakpoint - 1}px)`).matches;
79
+ });
80
+ useEffect(() => {
81
+ const mq = window.matchMedia(`(max-width: ${breakpoint - 1}px)`);
82
+ const handler = (e) => setIsMobile(e.matches);
83
+ mq.addEventListener("change", handler);
84
+ return () => mq.removeEventListener("change", handler);
85
+ }, [breakpoint]);
86
+ return isMobile;
87
+ }
11
88
  var twMerge = extendTailwindMerge({
12
89
  extend: {
13
90
  theme: {
@@ -168,7 +245,7 @@ var Avatar = ({
168
245
  };
169
246
  var CHECKBOX_TICK_DELAY_MS = 60;
170
247
  var CHECKBOX_TICK_DRAW_MS = 100;
171
- function CheckboxAnimatedCheckMark({ className }) {
248
+ function CheckboxAnimatedCheckMark({ pixelSize, className }) {
172
249
  const pathRef = useRef(null);
173
250
  useLayoutEffect(() => {
174
251
  const path = pathRef.current;
@@ -189,7 +266,7 @@ function CheckboxAnimatedCheckMark({ className }) {
189
266
  });
190
267
  return () => anim.cancel();
191
268
  }, []);
192
- return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", viewBox: "0 0 14 14", fill: "none", className: cx("block shrink-0", className), children: /* @__PURE__ */ jsx(
269
+ return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", width: pixelSize, height: pixelSize, viewBox: "0 0 14 14", fill: "none", className: cx("block", className), children: /* @__PURE__ */ jsx(
193
270
  "path",
194
271
  {
195
272
  ref: pathRef,
@@ -204,14 +281,15 @@ function CheckboxAnimatedCheckMark({ className }) {
204
281
  var focusRingShadow = "outline-none [box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]";
205
282
  var CheckboxBase = ({ className, isSelected, isDisabled, isIndeterminate, size = "sm", isFocusVisible = false }) => {
206
283
  const isChecked = isSelected || isIndeterminate;
207
- const iconClassName = size === "sm" ? "size-2.5" : "size-3.5";
284
+ const iconPixelSize = size === "sm" ? 10 : 14;
208
285
  return /* @__PURE__ */ jsxs(
209
286
  "div",
210
287
  {
211
288
  className: cx(
212
- "relative flex shrink-0 cursor-pointer appearance-none items-center justify-center border border-solid border-primary",
289
+ "relative flex shrink-0 cursor-pointer appearance-none items-center justify-center overflow-clip border border-solid border-primary",
213
290
  size === "sm" ? "size-4 rounded-xs" : "size-5 rounded-sm",
214
291
  isChecked ? "border-transparent bg-brand-solid" : "bg-primary",
292
+ !isChecked && !isDisabled && "group-hover:bg-primary_hover",
215
293
  isDisabled && "cursor-not-allowed opacity-50",
216
294
  isDisabled && !isChecked && "bg-tertiary",
217
295
  isFocusVisible && !isDisabled && focusRingShadow,
@@ -222,13 +300,15 @@ var CheckboxBase = ({ className, isSelected, isDisabled, isIndeterminate, size =
222
300
  "svg",
223
301
  {
224
302
  "aria-hidden": "true",
303
+ width: iconPixelSize,
304
+ height: iconPixelSize,
225
305
  viewBox: "0 0 14 14",
226
306
  fill: "none",
227
- className: cx("pointer-events-none block shrink-0 text-fg-white", iconClassName),
307
+ className: "pointer-events-none block text-fg-white",
228
308
  children: /* @__PURE__ */ jsx("path", { d: "M2.91675 7H11.0834", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })
229
309
  }
230
310
  ),
231
- isSelected && !isIndeterminate && /* @__PURE__ */ jsx(CheckboxAnimatedCheckMark, { className: cx("pointer-events-none text-fg-white", iconClassName) })
311
+ isSelected && !isIndeterminate && /* @__PURE__ */ jsx(CheckboxAnimatedCheckMark, { pixelSize: iconPixelSize, className: "pointer-events-none text-fg-white" })
232
312
  ]
233
313
  }
234
314
  );
@@ -273,6 +353,7 @@ var RadioButtonBase = ({ className, isFocusVisible, isSelected, isDisabled, size
273
353
  "relative flex shrink-0 cursor-pointer appearance-none items-center justify-center overflow-clip rounded-full border border-solid border-primary bg-primary",
274
354
  size === "sm" ? "size-4" : "size-5",
275
355
  isSelected && "border-transparent bg-brand-solid",
356
+ !isSelected && !isDisabled && "group-hover:bg-primary_hover",
276
357
  isDisabled && "cursor-not-allowed opacity-50",
277
358
  isDisabled && !isSelected && "bg-tertiary",
278
359
  isFocusVisible && !isDisabled && focusRingShadow2,
@@ -314,7 +395,7 @@ var ToggleBase = ({ className, isHovered, isDisabled, isFocusVisible, isSelected
314
395
  const classes = slim ? styles2.slim[size] : styles2.default[size];
315
396
  const offTrackBackground = (() => {
316
397
  if (isDisabled) return "bg-tertiary";
317
- if (isHovered) return slim ? "bg-tertiary" : "bg-brand-primary";
398
+ if (isHovered) return "bg-toggle-track_hover";
318
399
  return "bg-quaternary";
319
400
  })();
320
401
  return /* @__PURE__ */ jsx(
@@ -410,11 +491,11 @@ var DropdownItem = ({ label, children, addon, icon: Icon, avatarUrl, unstyled, s
410
491
  children: [
411
492
  state.selectionMode !== "none" && !avatarUrl && !Icon && /* @__PURE__ */ jsx(SelectionIndicator, { ...state, className: "mr-2" }),
412
493
  avatarUrl && /* @__PURE__ */ jsx("div", { className: "mr-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx(Avatar, { "aria-hidden": "true", size: "xs", src: avatarUrl, alt: label, className: "size-5" }) }),
413
- Icon && /* @__PURE__ */ jsx(Icon, { "aria-hidden": "true", className: "mr-2 size-4 shrink-0 stroke-[2.25px] text-fg-quaternary" }),
494
+ Icon && /* @__PURE__ */ jsx(Icon, { "aria-hidden": "true", className: "mr-2 size-4 shrink-0 stroke-[2.25px] text-fg-secondary" }),
414
495
  /* @__PURE__ */ jsx("span", { className: cx("grow truncate text-sm font-semibold text-secondary", state.isFocused && "text-secondary_hover"), children: label || (typeof children === "function" ? children(state) : children) }),
415
496
  addon && /* @__PURE__ */ jsx("span", { className: "ml-1 shrink-0 pr-1 text-xs font-medium text-quaternary", children: addon }),
416
497
  state.selectionMode !== "none" && (avatarUrl || Icon) && /* @__PURE__ */ jsx(SelectionIndicator, { ...state, className: "ml-1" }),
417
- state.hasSubmenu && /* @__PURE__ */ jsx(CaretRightIcon, { "aria-hidden": "true", className: "ml-auto size-4 shrink-0 stroke-[2.25px] text-fg-quaternary" })
498
+ state.hasSubmenu && /* @__PURE__ */ jsx(CaretRightIcon, { "aria-hidden": "true", className: "ml-auto size-4 shrink-0 stroke-[2.25px] text-fg-secondary" })
418
499
  ]
419
500
  }
420
501
  )
@@ -430,21 +511,105 @@ var DropdownMenu = (props) => {
430
511
  }
431
512
  );
432
513
  };
433
- var DropdownPopover = (props) => {
434
- return /* @__PURE__ */ jsx(
435
- Popover,
514
+ var DropdownSheetDepthContext = createContext(0);
515
+ function DropdownSheetCloseButton({ onClose }) {
516
+ return /* @__PURE__ */ jsxs(
517
+ "button",
436
518
  {
437
- placement: "bottom right",
438
- ...props,
439
- className: (state) => cx(
440
- "w-62 origin-(--trigger-anchor-point) overflow-auto rounded-lg bg-primary shadow-lg ring-1 ring-secondary_alt will-change-transform",
441
- 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",
442
- 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",
443
- typeof props.className === "function" ? props.className(state) : props.className
444
- ),
445
- children: props.children
519
+ type: "button",
520
+ onClick: (e) => {
521
+ e.stopPropagation();
522
+ onClose();
523
+ },
524
+ className: "flex size-12 shrink-0 cursor-pointer items-center justify-center rounded-full text-fg-primary transition duration-100 ease-linear hover:bg-primary_hover active:scale-[0.96] focus-visible:outline-none focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]",
525
+ children: [
526
+ /* @__PURE__ */ jsx(XIcon, { className: "size-5", "aria-hidden": "true" }),
527
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
528
+ ]
446
529
  }
447
530
  );
531
+ }
532
+ function DropdownSheetChrome({ title, onClose, children }) {
533
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
534
+ /* @__PURE__ */ jsxs("div", { className: cx("flex w-full shrink-0 items-center py-2 pl-4 pr-2", title ? "justify-between gap-3" : "justify-end"), children: [
535
+ title ? /* @__PURE__ */ jsx("p", { className: "min-w-0 flex-1 truncate text-base font-semibold text-primary", children: title }) : null,
536
+ /* @__PURE__ */ jsx(DropdownSheetCloseButton, { onClose })
537
+ ] }),
538
+ /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-y-auto pb-[max(2.5rem,calc(env(safe-area-inset-bottom)+2rem))]", children })
539
+ ] });
540
+ }
541
+ var DropdownPopover = ({ mobileOptions, children, className, style, ...props }) => {
542
+ const isMobile = useIsMobile();
543
+ const resolvedMobile = useMemo(() => resolveSelectMobileOptions(mobileOptions), [mobileOptions]);
544
+ const useMobileSheet = isMobile && resolvedMobile.sheet;
545
+ const overlayState = useContext(OverlayTriggerStateContext);
546
+ const open = overlayState?.isOpen ?? false;
547
+ const parentDepth = useContext(DropdownSheetDepthContext);
548
+ const depth = parentDepth + 1;
549
+ const { shouldRender, panelStyle, backdropStyle } = useMobileSheetAnimation(open, useMobileSheet);
550
+ useEffect(() => {
551
+ if (!useMobileSheet || !open) return;
552
+ const prev = document.body.style.overflow;
553
+ document.body.style.overflow = "hidden";
554
+ return () => {
555
+ document.body.style.overflow = prev;
556
+ };
557
+ }, [useMobileSheet, open]);
558
+ if (!useMobileSheet) {
559
+ return /* @__PURE__ */ jsx(
560
+ Popover,
561
+ {
562
+ placement: "bottom right",
563
+ ...props,
564
+ style,
565
+ className: (state) => cx(
566
+ "w-62 origin-(--trigger-anchor-point) overflow-auto rounded-lg bg-primary shadow-lg ring-1 ring-secondary_alt will-change-transform",
567
+ 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",
568
+ 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",
569
+ typeof className === "function" ? className(state) : className
570
+ ),
571
+ children
572
+ }
573
+ );
574
+ }
575
+ const close = () => overlayState?.close();
576
+ const showMobileSheet = shouldRender;
577
+ const isMobileSheetExiting = showMobileSheet && !open;
578
+ const scrimZIndex = 50 + (depth - 1) * 10;
579
+ const sheetZIndex = scrimZIndex + 1;
580
+ const mobileScrim = shouldRender && typeof document !== "undefined" ? createPortal(
581
+ /* @__PURE__ */ jsx(
582
+ "div",
583
+ {
584
+ className: "fixed inset-0 bg-overlay/70",
585
+ style: { ...backdropStyle, zIndex: scrimZIndex },
586
+ onClick: close,
587
+ "aria-hidden": "true"
588
+ }
589
+ ),
590
+ document.body
591
+ ) : null;
592
+ return /* @__PURE__ */ jsxs(DropdownSheetDepthContext.Provider, { value: depth, children: [
593
+ mobileScrim,
594
+ /* @__PURE__ */ jsx(
595
+ Popover,
596
+ {
597
+ placement: "bottom",
598
+ containerPadding: 0,
599
+ offset: 0,
600
+ ...props,
601
+ isExiting: isMobileSheetExiting,
602
+ "data-dropdown-mobile-sheet": true,
603
+ style: { ...panelStyle, zIndex: sheetZIndex, ...style },
604
+ className: (state) => cx(
605
+ "fixed! inset-x-0! bottom-0! top-auto! right-0! left-0! flex max-h-[min(90dvh,calc(100dvh-env(safe-area-inset-bottom,0px)))] w-full! max-w-none! flex-col overflow-hidden rounded-t-2xl rounded-b-none border-x-0 border-t border-secondary bg-primary shadow-xl outline-hidden",
606
+ resolvedMobile.sheetClassName,
607
+ typeof className === "function" ? className(state) : className
608
+ ),
609
+ children: /* @__PURE__ */ jsx(DropdownSheetChrome, { title: resolvedMobile.title, onClose: close, children: typeof children === "function" ? null : children })
610
+ }
611
+ )
612
+ ] });
448
613
  };
449
614
  var DropdownSeparator = (props) => {
450
615
  return /* @__PURE__ */ jsx(Separator, { ...props, className: cx("my-1 h-px w-full bg-border-secondary", props.className) });