@scripso-homepad/ui 0.4.8 → 0.4.10

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 (39) hide show
  1. package/dist/{chunk-DAOLVE64.js → chunk-YSDLHEJ7.js} +204 -14
  2. package/dist/chunk-YSDLHEJ7.js.map +1 -0
  3. package/dist/index.cjs +130 -87
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.d.cts +2 -0
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.js +176 -323
  8. package/dist/index.js.map +1 -1
  9. package/dist/web/index.cjs +882 -30
  10. package/dist/web/index.cjs.map +1 -1
  11. package/dist/web/index.css +161 -0
  12. package/dist/web/index.css.map +1 -1
  13. package/dist/web/index.d.cts +90 -3
  14. package/dist/web/index.d.ts +90 -3
  15. package/dist/web/index.js +645 -19
  16. package/dist/web/index.js.map +1 -1
  17. package/package.json +9 -3
  18. package/src/components/Button.tsx +10 -3
  19. package/src/components/DatePicker.tsx +37 -3
  20. package/src/components/Select.tsx +1 -1
  21. package/src/web/components/ConfirmModal.stories.tsx +55 -0
  22. package/src/web/components/ConfirmModal.tsx +116 -0
  23. package/src/web/components/Drawer.stories.tsx +234 -0
  24. package/src/web/components/Drawer.tsx +169 -0
  25. package/src/web/components/HistoryTimeline.tsx +46 -0
  26. package/src/web/components/Modal.stories.tsx +130 -0
  27. package/src/web/components/Modal.tsx +162 -0
  28. package/src/web/components/TableActionButton.tsx +9 -4
  29. package/src/web/components/Toaster.stories.tsx +106 -0
  30. package/src/web/components/Toaster.tsx +92 -0
  31. package/src/web/components/ToasterProvider.tsx +6 -0
  32. package/src/web/components/drawer-scroll.css +41 -0
  33. package/src/web/components/sonner-toast.css +141 -0
  34. package/src/web/icons/TimelineCheckIcon.tsx +24 -0
  35. package/src/web/icons/ToastIcons.tsx +119 -0
  36. package/src/web/index.ts +26 -0
  37. package/src/web/mutation-toast.ts +33 -0
  38. package/src/web/toast.ts +1 -0
  39. package/dist/chunk-DAOLVE64.js.map +0 -1
@@ -8,6 +8,8 @@ var jsxRuntime = require('react/jsx-runtime');
8
8
  var clsx = require('clsx');
9
9
  var tailwindMerge = require('tailwind-merge');
10
10
  var reactRouterDom = require('react-router-dom');
11
+ var sonner = require('sonner');
12
+ require('sonner/dist/styles.css');
11
13
 
12
14
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
15
 
@@ -5381,7 +5383,7 @@ var require_react_dom_production_min = __commonJS({
5381
5383
  if (5 === d || 6 === d) a = a.stateNode, b ? c.insertBefore(a, b) : c.appendChild(a);
5382
5384
  else if (4 !== d && (a = a.child, null !== a)) for (Wj(a, b, c), a = a.sibling; null !== a; ) Wj(a, b, c), a = a.sibling;
5383
5385
  }
5384
- var X2 = null;
5386
+ var X3 = null;
5385
5387
  var Xj = false;
5386
5388
  function Yj(a, b, c) {
5387
5389
  for (c = c.child; null !== c; ) Zj(a, b, c), c = c.sibling;
@@ -5395,23 +5397,23 @@ var require_react_dom_production_min = __commonJS({
5395
5397
  case 5:
5396
5398
  U || Lj(c, b);
5397
5399
  case 6:
5398
- var d = X2, e = Xj;
5399
- X2 = null;
5400
+ var d = X3, e = Xj;
5401
+ X3 = null;
5400
5402
  Yj(a, b, c);
5401
- X2 = d;
5403
+ X3 = d;
5402
5404
  Xj = e;
5403
- null !== X2 && (Xj ? (a = X2, c = c.stateNode, 8 === a.nodeType ? a.parentNode.removeChild(c) : a.removeChild(c)) : X2.removeChild(c.stateNode));
5405
+ null !== X3 && (Xj ? (a = X3, c = c.stateNode, 8 === a.nodeType ? a.parentNode.removeChild(c) : a.removeChild(c)) : X3.removeChild(c.stateNode));
5404
5406
  break;
5405
5407
  case 18:
5406
- null !== X2 && (Xj ? (a = X2, c = c.stateNode, 8 === a.nodeType ? Kf(a.parentNode, c) : 1 === a.nodeType && Kf(a, c), bd(a)) : Kf(X2, c.stateNode));
5408
+ null !== X3 && (Xj ? (a = X3, c = c.stateNode, 8 === a.nodeType ? Kf(a.parentNode, c) : 1 === a.nodeType && Kf(a, c), bd(a)) : Kf(X3, c.stateNode));
5407
5409
  break;
5408
5410
  case 4:
5409
- d = X2;
5411
+ d = X3;
5410
5412
  e = Xj;
5411
- X2 = c.stateNode.containerInfo;
5413
+ X3 = c.stateNode.containerInfo;
5412
5414
  Xj = true;
5413
5415
  Yj(a, b, c);
5414
- X2 = d;
5416
+ X3 = d;
5415
5417
  Xj = e;
5416
5418
  break;
5417
5419
  case 0:
@@ -5468,23 +5470,23 @@ var require_react_dom_production_min = __commonJS({
5468
5470
  a: for (; null !== h; ) {
5469
5471
  switch (h.tag) {
5470
5472
  case 5:
5471
- X2 = h.stateNode;
5473
+ X3 = h.stateNode;
5472
5474
  Xj = false;
5473
5475
  break a;
5474
5476
  case 3:
5475
- X2 = h.stateNode.containerInfo;
5477
+ X3 = h.stateNode.containerInfo;
5476
5478
  Xj = true;
5477
5479
  break a;
5478
5480
  case 4:
5479
- X2 = h.stateNode.containerInfo;
5481
+ X3 = h.stateNode.containerInfo;
5480
5482
  Xj = true;
5481
5483
  break a;
5482
5484
  }
5483
5485
  h = h.return;
5484
5486
  }
5485
- if (null === X2) throw Error(p(160));
5487
+ if (null === X3) throw Error(p(160));
5486
5488
  Zj(f, g, e);
5487
- X2 = null;
5489
+ X3 = null;
5488
5490
  Xj = false;
5489
5491
  var k = e.alternate;
5490
5492
  null !== k && (k.return = null);
@@ -9459,15 +9461,15 @@ var require_react_dom_development = __commonJS({
9459
9461
  };
9460
9462
  }
9461
9463
  var warnValidStyle$1 = warnValidStyle;
9462
- function createDangerousStringForStyles(styles3) {
9464
+ function createDangerousStringForStyles(styles4) {
9463
9465
  {
9464
9466
  var serialized = "";
9465
9467
  var delimiter = "";
9466
- for (var styleName in styles3) {
9467
- if (!styles3.hasOwnProperty(styleName)) {
9468
+ for (var styleName in styles4) {
9469
+ if (!styles4.hasOwnProperty(styleName)) {
9468
9470
  continue;
9469
9471
  }
9470
- var styleValue = styles3[styleName];
9472
+ var styleValue = styles4[styleName];
9471
9473
  if (styleValue != null) {
9472
9474
  var isCustomProperty = styleName.indexOf("--") === 0;
9473
9475
  serialized += delimiter + (isCustomProperty ? styleName : hyphenateStyleName(styleName)) + ":";
@@ -9478,19 +9480,19 @@ var require_react_dom_development = __commonJS({
9478
9480
  return serialized || null;
9479
9481
  }
9480
9482
  }
9481
- function setValueForStyles(node, styles3) {
9483
+ function setValueForStyles(node, styles4) {
9482
9484
  var style2 = node.style;
9483
- for (var styleName in styles3) {
9484
- if (!styles3.hasOwnProperty(styleName)) {
9485
+ for (var styleName in styles4) {
9486
+ if (!styles4.hasOwnProperty(styleName)) {
9485
9487
  continue;
9486
9488
  }
9487
9489
  var isCustomProperty = styleName.indexOf("--") === 0;
9488
9490
  {
9489
9491
  if (!isCustomProperty) {
9490
- warnValidStyle$1(styleName, styles3[styleName]);
9492
+ warnValidStyle$1(styleName, styles4[styleName]);
9491
9493
  }
9492
9494
  }
9493
- var styleValue = dangerousStyleValue(styleName, styles3[styleName], isCustomProperty);
9495
+ var styleValue = dangerousStyleValue(styleName, styles4[styleName], isCustomProperty);
9494
9496
  if (styleName === "float") {
9495
9497
  styleName = "cssFloat";
9496
9498
  }
@@ -9504,9 +9506,9 @@ var require_react_dom_development = __commonJS({
9504
9506
  function isValueEmpty(value) {
9505
9507
  return value == null || typeof value === "boolean" || value === "";
9506
9508
  }
9507
- function expandShorthandMap(styles3) {
9509
+ function expandShorthandMap(styles4) {
9508
9510
  var expanded = {};
9509
- for (var key in styles3) {
9511
+ for (var key in styles4) {
9510
9512
  var longhands = shorthandToLonghand[key] || [key];
9511
9513
  for (var i = 0; i < longhands.length; i++) {
9512
9514
  expanded[longhands[i]] = key;
@@ -28568,6 +28570,7 @@ function EyeOffIcon({
28568
28570
 
28569
28571
  // src/theme/tokens.ts
28570
28572
  var stormGray = {
28573
+ "0": "#fbfcfc",
28571
28574
  "0.5": "#eceef0",
28572
28575
  "1.5": "#c7cdd1",
28573
28576
  "2": "#b5bcc1",
@@ -28579,15 +28582,21 @@ var navy = {
28579
28582
  var rubyRed = {
28580
28583
  "0.5": "#f7dddf",
28581
28584
  "5": "#ae0011"};
28585
+ var emeraldGreen = {
28586
+ "5": "#279d54"};
28582
28587
  var brand = {
28583
28588
  slateBlue: "#182e3c",
28584
28589
  navy: navy["5"],
28585
- rubyRed: rubyRed["5"]};
28590
+ rubyRed: rubyRed["5"],
28591
+ emeraldGreen: emeraldGreen["5"]
28592
+ };
28586
28593
  var colors = {
28587
28594
  // Brand colors
28588
28595
  slateBlue: brand.slateBlue,
28589
28596
  /** Primary brand navy — Figma Navy 5 */
28590
28597
  navy: brand.navy,
28598
+ // Storm Gray — Figma scale + brand swatch
28599
+ stormGray0: stormGray["0"],
28591
28600
  stormGray50: stormGray["0.5"],
28592
28601
  stormGray150: stormGray["1.5"],
28593
28602
  stormGray200: stormGray["2"],
@@ -28598,6 +28607,8 @@ var colors = {
28598
28607
  inputError: brand.rubyRed,
28599
28608
  inputOutlineFocus: navy["0.5"],
28600
28609
  inputOutlineError: rubyRed["0.5"],
28610
+ /** @deprecated Use `emeraldGreen` */
28611
+ green: brand.emeraldGreen,
28601
28612
  transparent: "transparent"
28602
28613
  };
28603
28614
  var radii = {
@@ -28608,7 +28619,8 @@ var fontSize = {
28608
28619
  sm: 12,
28609
28620
  md: 14};
28610
28621
  var fontWeight = {
28611
- medium: "500"};
28622
+ medium: "500",
28623
+ semibold: "600"};
28612
28624
  var fonts = {
28613
28625
  sans: "Noto Sans Armenian"
28614
28626
  };
@@ -28619,6 +28631,22 @@ var labelTypography = {
28619
28631
  lineHeight: fontSize.sm,
28620
28632
  letterSpacing: 0
28621
28633
  };
28634
+ var buttonTypography = {
28635
+ lg: {
28636
+ fontFamily: fonts.sans,
28637
+ fontSize: 14,
28638
+ fontWeight: fontWeight.semibold,
28639
+ lineHeight: 19,
28640
+ letterSpacing: 0
28641
+ },
28642
+ sm: {
28643
+ fontFamily: fonts.sans,
28644
+ fontSize: 12,
28645
+ fontWeight: fontWeight.semibold,
28646
+ lineHeight: 16,
28647
+ letterSpacing: 0
28648
+ }
28649
+ };
28622
28650
 
28623
28651
  // src/theme/input.ts
28624
28652
  var INPUT_HEIGHT = 52;
@@ -30321,10 +30349,10 @@ function TableActionsCell({ className, children, ...props }) {
30321
30349
 
30322
30350
  // src/web/components/TableActionsMenu.tsx
30323
30351
  var import_react_dom = __toESM(require_react_dom());
30324
- var actionButtonClassName = "inline-flex cursor-pointer items-center gap-1 rounded-lg border border-storm-gray-50 bg-white px-3 py-2 font-sans text-xs font-medium leading-none text-storm-gray-900 transition-colors hover:bg-storm-gray-0";
30352
+ var inlineActionClassName = "inline-flex cursor-pointer items-center gap-1 rounded-lg border border-storm-gray-50 bg-white px-3 py-2 font-sans text-xs font-medium leading-none text-storm-gray-900 transition-colors hover:bg-storm-gray-0";
30325
30353
  var variantClasses = {
30326
- approve: actionButtonClassName,
30327
- reject: actionButtonClassName,
30354
+ approve: inlineActionClassName,
30355
+ reject: inlineActionClassName,
30328
30356
  menu: "inline-flex size-7 cursor-pointer items-center justify-center rounded-lg text-storm-gray-500 transition-colors hover:bg-storm-gray-0 hover:text-storm-gray-900"
30329
30357
  };
30330
30358
  var inlineActionIconClassName = "inline-flex size-4 shrink-0 items-center justify-center [&_svg]:size-4";
@@ -30340,6 +30368,7 @@ var TableActionButton = react.forwardRef(
30340
30368
  ...props
30341
30369
  }, ref) {
30342
30370
  const isInlineAction = variant === "approve" || variant === "reject";
30371
+ const hasLabel = Boolean(children);
30343
30372
  return /* @__PURE__ */ jsxRuntime.jsxs(
30344
30373
  "button",
30345
30374
  {
@@ -30350,6 +30379,7 @@ var TableActionButton = react.forwardRef(
30350
30379
  "aria-label": ariaLabel,
30351
30380
  className: cn(
30352
30381
  variantClasses[variant],
30382
+ isInlineAction && !hasLabel && "px-2",
30353
30383
  disabled && "cursor-not-allowed opacity-50",
30354
30384
  className
30355
30385
  ),
@@ -30738,6 +30768,817 @@ function TableIconText({ icon, children, className }) {
30738
30768
  }
30739
30769
  );
30740
30770
  }
30771
+
30772
+ // src/icons/arrowUpRightPath.ts
30773
+ var ARROW_UP_RIGHT_PATH = "M14.1667 14.1668V5.8335H5.83333M14.1667 5.8335L5.83333 14.1668";
30774
+ function ArrowUpRightIcon({
30775
+ size = 20,
30776
+ color = "#082640",
30777
+ strokeWidth = 2
30778
+ }) {
30779
+ return /* @__PURE__ */ jsxRuntime.jsx(Svg__default.default, { width: size, height: size, viewBox: "0 0 20 20", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx(
30780
+ Svg.Path,
30781
+ {
30782
+ d: ARROW_UP_RIGHT_PATH,
30783
+ stroke: color,
30784
+ strokeWidth,
30785
+ strokeLinecap: "round",
30786
+ strokeLinejoin: "round"
30787
+ }
30788
+ ) });
30789
+ }
30790
+ var variantConfig = {
30791
+ white: {
30792
+ backgroundColor: colors.white,
30793
+ textColor: colors.slateBlue,
30794
+ iconBadgeBackgroundColor: colors.stormGray150,
30795
+ iconColor: colors.navy
30796
+ },
30797
+ primary: {
30798
+ backgroundColor: colors.navy,
30799
+ textColor: colors.stormGray0,
30800
+ iconBadgeBackgroundColor: colors.white,
30801
+ iconColor: colors.navy
30802
+ },
30803
+ green: {
30804
+ backgroundColor: colors.green,
30805
+ textColor: colors.stormGray0,
30806
+ iconBadgeBackgroundColor: colors.white,
30807
+ iconColor: colors.green
30808
+ },
30809
+ gray: {
30810
+ backgroundColor: colors.stormGray50,
30811
+ textColor: colors.slateBlue,
30812
+ iconBadgeBackgroundColor: colors.stormGray150,
30813
+ iconColor: colors.navy
30814
+ }
30815
+ };
30816
+ var sizeConfig = {
30817
+ lg: {
30818
+ borderRadius: 16,
30819
+ paddingTop: 8,
30820
+ paddingRight: 8,
30821
+ paddingBottom: 8,
30822
+ paddingLeft: 24,
30823
+ paddingHorizontalCentered: 24,
30824
+ text: buttonTypography.lg,
30825
+ iconContainerSize: 36,
30826
+ iconContainerRadius: 12,
30827
+ iconContainerPadding: 8,
30828
+ iconSize: 20
30829
+ },
30830
+ sm: {
30831
+ borderRadius: 12,
30832
+ paddingTop: 8,
30833
+ paddingRight: 8,
30834
+ paddingBottom: 8,
30835
+ paddingLeft: 16,
30836
+ paddingHorizontalCentered: 16,
30837
+ text: buttonTypography.sm,
30838
+ iconContainerSize: 32,
30839
+ iconContainerRadius: 8,
30840
+ iconContainerPadding: 8,
30841
+ iconSize: 16
30842
+ }
30843
+ };
30844
+ function Button({
30845
+ title,
30846
+ children,
30847
+ onPress,
30848
+ disabled = false,
30849
+ variant = "primary",
30850
+ size = "lg",
30851
+ showIcon = false,
30852
+ icon,
30853
+ style,
30854
+ textStyle,
30855
+ className,
30856
+ textClassName
30857
+ }) {
30858
+ const containerRef = react.useRef(null);
30859
+ const textRef = react.useRef(null);
30860
+ const preset = variantConfig[variant];
30861
+ const metrics = sizeConfig[size];
30862
+ const label = typeof children !== "undefined" ? children : title;
30863
+ const hasCustomChildren = typeof children !== "undefined";
30864
+ const customIcon = icon != null && typeof icon !== "boolean" ? icon : void 0;
30865
+ const hasIcon = showIcon || icon === true || customIcon != null;
30866
+ const resolvedContainerClassName = [
30867
+ reactNative.Platform.OS === "web" ? "max-md:px-4!" : "",
30868
+ className
30869
+ ].filter(Boolean).join(" ");
30870
+ useApplyWebClassName(containerRef, resolvedContainerClassName || void 0);
30871
+ useApplyWebClassName(textRef, textClassName);
30872
+ const iconNode = customIcon ?? /* @__PURE__ */ jsxRuntime.jsx(ArrowUpRightIcon, { size: metrics.iconSize, color: preset.iconColor });
30873
+ const containerStyle = [
30874
+ styles3.base,
30875
+ {
30876
+ borderRadius: metrics.borderRadius,
30877
+ backgroundColor: preset.backgroundColor,
30878
+ paddingTop: metrics.paddingTop,
30879
+ paddingBottom: metrics.paddingBottom,
30880
+ paddingLeft: hasIcon ? metrics.paddingLeft : metrics.paddingHorizontalCentered,
30881
+ paddingRight: hasIcon ? metrics.paddingRight : metrics.paddingHorizontalCentered
30882
+ },
30883
+ hasIcon ? styles3.withIcon : styles3.centered,
30884
+ disabled && styles3.disabled,
30885
+ style
30886
+ ];
30887
+ const labelStyle = [
30888
+ styles3.label,
30889
+ metrics.text,
30890
+ { color: preset.textColor },
30891
+ reactNative.Platform.OS === "android" ? styles3.labelAndroid : null,
30892
+ !hasIcon && styles3.labelCentered,
30893
+ hasIcon && styles3.labelWithIcon,
30894
+ textStyle
30895
+ ];
30896
+ return /* @__PURE__ */ jsxRuntime.jsxs(
30897
+ reactNative.TouchableOpacity,
30898
+ {
30899
+ ref: containerRef,
30900
+ style: containerStyle,
30901
+ onPress,
30902
+ disabled,
30903
+ activeOpacity: 0.7,
30904
+ accessibilityRole: "button",
30905
+ accessibilityState: { disabled },
30906
+ children: [
30907
+ hasCustomChildren ? children : /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { ref: textRef, style: labelStyle, children: label }),
30908
+ hasIcon ? /* @__PURE__ */ jsxRuntime.jsx(
30909
+ reactNative.View,
30910
+ {
30911
+ style: [
30912
+ styles3.iconContainer,
30913
+ {
30914
+ width: metrics.iconContainerSize,
30915
+ height: metrics.iconContainerSize,
30916
+ borderRadius: metrics.iconContainerRadius,
30917
+ padding: metrics.iconContainerPadding,
30918
+ backgroundColor: preset.iconBadgeBackgroundColor
30919
+ }
30920
+ ],
30921
+ children: iconNode
30922
+ }
30923
+ ) : null
30924
+ ]
30925
+ }
30926
+ );
30927
+ }
30928
+ var styles3 = reactNative.StyleSheet.create({
30929
+ base: {
30930
+ flexDirection: "row",
30931
+ alignItems: "center",
30932
+ borderWidth: 0
30933
+ },
30934
+ centered: {
30935
+ justifyContent: "center"
30936
+ },
30937
+ withIcon: {
30938
+ justifyContent: "space-between"
30939
+ },
30940
+ disabled: {
30941
+ opacity: 0.6
30942
+ },
30943
+ label: {},
30944
+ labelAndroid: {
30945
+ includeFontPadding: false
30946
+ },
30947
+ labelCentered: {
30948
+ textAlign: "center"
30949
+ },
30950
+ labelWithIcon: {
30951
+ flex: 1,
30952
+ flexShrink: 1,
30953
+ marginRight: 8
30954
+ },
30955
+ iconContainer: {
30956
+ alignItems: "center",
30957
+ justifyContent: "center",
30958
+ flexShrink: 0
30959
+ }
30960
+ });
30961
+ var footerAlignClasses = {
30962
+ left: "justify-start",
30963
+ center: "justify-center",
30964
+ right: "justify-end"
30965
+ };
30966
+ function Modal({
30967
+ open,
30968
+ title,
30969
+ subtitle,
30970
+ icon,
30971
+ iconContainerClassName,
30972
+ children,
30973
+ cancelText,
30974
+ confirmText,
30975
+ onCancel,
30976
+ onConfirm,
30977
+ footerAlign = "right",
30978
+ footerLayout = "inline",
30979
+ cancelDisabled = false,
30980
+ confirmDisabled = false,
30981
+ closeOnBackdrop = true,
30982
+ containerClassName,
30983
+ contentClassName,
30984
+ buttonClassName
30985
+ }) {
30986
+ react.useEffect(() => {
30987
+ if (!open) {
30988
+ return;
30989
+ }
30990
+ const handleKeyDown = (event) => {
30991
+ if (event.key === "Escape") {
30992
+ onCancel();
30993
+ }
30994
+ };
30995
+ window.addEventListener("keydown", handleKeyDown);
30996
+ return () => {
30997
+ window.removeEventListener("keydown", handleKeyDown);
30998
+ };
30999
+ }, [open, onCancel]);
31000
+ if (!open) {
31001
+ return null;
31002
+ }
31003
+ const sharedButtonClassName = cn(
31004
+ "btn h-13 justify-center!",
31005
+ footerLayout === "split" && "min-w-0 flex-1 basis-0",
31006
+ footerLayout !== "split" && buttonClassName
31007
+ );
31008
+ return /* @__PURE__ */ jsxRuntime.jsx(
31009
+ "div",
31010
+ {
31011
+ className: "fixed inset-0 z-50 flex items-center justify-center p-4 backdrop-blur-[12px] bg-storm-gray-850/40",
31012
+ onClick: closeOnBackdrop ? onCancel : void 0,
31013
+ role: "presentation",
31014
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
31015
+ "div",
31016
+ {
31017
+ role: "dialog",
31018
+ "aria-modal": "true",
31019
+ "aria-labelledby": "homepad-modal-title",
31020
+ ...subtitle ? { "aria-describedby": "homepad-modal-subtitle" } : {},
31021
+ className: cn(
31022
+ "flex w-full max-w-2xl flex-col gap-6 rounded-2xl bg-white p-4 opacity-100 md:p-6",
31023
+ containerClassName
31024
+ ),
31025
+ onClick: (event) => {
31026
+ event.stopPropagation();
31027
+ },
31028
+ children: [
31029
+ /* @__PURE__ */ jsxRuntime.jsxs("header", { className: cn("flex", icon ? "items-center gap-2.5" : void 0), children: [
31030
+ icon ? /* @__PURE__ */ jsxRuntime.jsx(
31031
+ "div",
31032
+ {
31033
+ className: cn(
31034
+ "flex size-11 shrink-0 items-center justify-center rounded-lg bg-storm-gray-50 p-3 opacity-100",
31035
+ iconContainerClassName
31036
+ ),
31037
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex size-5 shrink-0 items-center justify-center [&>*]:size-5 [&_svg]:size-5", children: icon })
31038
+ }
31039
+ ) : null,
31040
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-col gap-2", children: [
31041
+ /* @__PURE__ */ jsxRuntime.jsx(
31042
+ "h2",
31043
+ {
31044
+ id: "homepad-modal-title",
31045
+ className: "font-sans text-lg font-bold leading-6 tracking-normal text-black",
31046
+ children: title
31047
+ }
31048
+ ),
31049
+ subtitle ? /* @__PURE__ */ jsxRuntime.jsx(
31050
+ "p",
31051
+ {
31052
+ id: "homepad-modal-subtitle",
31053
+ className: "font-sans text-xs font-normal leading-4 tracking-normal text-storm-gray-400",
31054
+ children: subtitle
31055
+ }
31056
+ ) : null
31057
+ ] })
31058
+ ] }),
31059
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("min-w-0", contentClassName), children }),
31060
+ /* @__PURE__ */ jsxRuntime.jsxs(
31061
+ "footer",
31062
+ {
31063
+ className: cn(
31064
+ "flex shrink-0 gap-4",
31065
+ footerLayout === "split" ? "w-full" : footerAlignClasses[footerAlign]
31066
+ ),
31067
+ children: [
31068
+ /* @__PURE__ */ jsxRuntime.jsx(
31069
+ Button,
31070
+ {
31071
+ title: cancelText,
31072
+ onPress: onCancel,
31073
+ variant: "gray",
31074
+ disabled: cancelDisabled,
31075
+ className: sharedButtonClassName,
31076
+ textClassName: "text-center!"
31077
+ }
31078
+ ),
31079
+ /* @__PURE__ */ jsxRuntime.jsx(
31080
+ Button,
31081
+ {
31082
+ title: confirmText,
31083
+ onPress: onConfirm,
31084
+ variant: "primary",
31085
+ disabled: confirmDisabled,
31086
+ className: sharedButtonClassName,
31087
+ textClassName: "text-center!"
31088
+ }
31089
+ )
31090
+ ]
31091
+ }
31092
+ )
31093
+ ]
31094
+ }
31095
+ )
31096
+ }
31097
+ );
31098
+ }
31099
+ var DRAWER_TRANSITION_MS = 300;
31100
+ function Drawer({
31101
+ open,
31102
+ title,
31103
+ subtitle,
31104
+ children,
31105
+ footer,
31106
+ onClose,
31107
+ closeAriaLabel = "Close",
31108
+ widthClassName = "w-full md:w-[464px]",
31109
+ className,
31110
+ headerClassName,
31111
+ contentClassName,
31112
+ footerClassName
31113
+ }) {
31114
+ const [isPresent, setIsPresent] = react.useState(open);
31115
+ const [isAnimatedIn, setIsAnimatedIn] = react.useState(false);
31116
+ react.useEffect(() => {
31117
+ if (open) {
31118
+ setIsPresent(true);
31119
+ const frame = window.requestAnimationFrame(() => {
31120
+ window.requestAnimationFrame(() => {
31121
+ setIsAnimatedIn(true);
31122
+ });
31123
+ });
31124
+ return () => {
31125
+ window.cancelAnimationFrame(frame);
31126
+ };
31127
+ }
31128
+ setIsAnimatedIn(false);
31129
+ const timeout = window.setTimeout(() => {
31130
+ setIsPresent(false);
31131
+ }, DRAWER_TRANSITION_MS);
31132
+ return () => {
31133
+ window.clearTimeout(timeout);
31134
+ };
31135
+ }, [open]);
31136
+ react.useEffect(() => {
31137
+ if (!isPresent) {
31138
+ return;
31139
+ }
31140
+ const previousOverflow = document.body.style.overflow;
31141
+ document.body.style.overflow = "hidden";
31142
+ const handleKeyDown = (event) => {
31143
+ if (event.key === "Escape") {
31144
+ onClose();
31145
+ }
31146
+ };
31147
+ window.addEventListener("keydown", handleKeyDown);
31148
+ return () => {
31149
+ document.body.style.overflow = previousOverflow;
31150
+ window.removeEventListener("keydown", handleKeyDown);
31151
+ };
31152
+ }, [isPresent, onClose]);
31153
+ if (!isPresent) {
31154
+ return null;
31155
+ }
31156
+ return /* @__PURE__ */ jsxRuntime.jsxs(
31157
+ "div",
31158
+ {
31159
+ className: "fixed inset-0 z-50 flex justify-end p-2 max-md:p-0",
31160
+ role: "presentation",
31161
+ children: [
31162
+ /* @__PURE__ */ jsxRuntime.jsx(
31163
+ "button",
31164
+ {
31165
+ type: "button",
31166
+ "aria-label": closeAriaLabel,
31167
+ className: cn(
31168
+ "absolute inset-0 bg-storm-gray-850/40 backdrop-blur-[12px] transition-opacity duration-300 ease-in-out",
31169
+ isAnimatedIn ? "opacity-100" : "opacity-0"
31170
+ ),
31171
+ onClick: onClose
31172
+ }
31173
+ ),
31174
+ /* @__PURE__ */ jsxRuntime.jsxs(
31175
+ "aside",
31176
+ {
31177
+ role: "dialog",
31178
+ "aria-modal": "true",
31179
+ "aria-labelledby": "homepad-drawer-title",
31180
+ ...subtitle ? { "aria-describedby": "homepad-drawer-subtitle" } : {},
31181
+ className: cn(
31182
+ "relative z-10 flex h-[calc(100dvh-16px)] min-h-0 flex-col overflow-hidden rounded-[16px] bg-white shadow-2xl transition-transform duration-300 ease-in-out will-change-transform max-md:h-dvh max-md:rounded-none",
31183
+ isAnimatedIn ? "translate-x-0" : "translate-x-full",
31184
+ widthClassName,
31185
+ className
31186
+ ),
31187
+ children: [
31188
+ /* @__PURE__ */ jsxRuntime.jsxs(
31189
+ "header",
31190
+ {
31191
+ className: cn(
31192
+ "flex h-[87px] shrink-0 items-start justify-between border-b border-storm-gray-50 pt-6 pr-6 pb-4 pl-6",
31193
+ headerClassName
31194
+ ),
31195
+ children: [
31196
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex flex-col gap-1", children: [
31197
+ /* @__PURE__ */ jsxRuntime.jsx(
31198
+ "h2",
31199
+ {
31200
+ id: "homepad-drawer-title",
31201
+ className: "font-sans text-[18px] font-bold leading-6 tracking-normal text-black",
31202
+ children: title
31203
+ }
31204
+ ),
31205
+ subtitle ? /* @__PURE__ */ jsxRuntime.jsx(
31206
+ "p",
31207
+ {
31208
+ id: "homepad-drawer-subtitle",
31209
+ className: "font-sans text-sm font-normal leading-[19px] tracking-normal text-storm-gray-400",
31210
+ children: subtitle
31211
+ }
31212
+ ) : null
31213
+ ] }),
31214
+ /* @__PURE__ */ jsxRuntime.jsx(
31215
+ "button",
31216
+ {
31217
+ type: "button",
31218
+ "aria-label": closeAriaLabel,
31219
+ className: "flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-lg text-storm-gray-400 transition-colors hover:bg-storm-gray-50 hover:text-storm-gray-600",
31220
+ onClick: onClose,
31221
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-5", strokeWidth: 1.75 })
31222
+ }
31223
+ )
31224
+ ]
31225
+ }
31226
+ ),
31227
+ /* @__PURE__ */ jsxRuntime.jsx(
31228
+ "div",
31229
+ {
31230
+ className: cn(
31231
+ "drawer-scroll-area min-h-0 flex-1 overflow-y-auto px-6 pt-6 pb-0",
31232
+ contentClassName
31233
+ ),
31234
+ children
31235
+ }
31236
+ ),
31237
+ footer ? /* @__PURE__ */ jsxRuntime.jsx("footer", { className: cn("shrink-0 px-6 py-5", footerClassName), children: footer }) : null
31238
+ ]
31239
+ }
31240
+ )
31241
+ ]
31242
+ }
31243
+ );
31244
+ }
31245
+ function TimelineCheckIcon({ className, ...props }) {
31246
+ return /* @__PURE__ */ jsxRuntime.jsx(
31247
+ "svg",
31248
+ {
31249
+ width: "16",
31250
+ height: "16",
31251
+ viewBox: "0 0 16 16",
31252
+ fill: "none",
31253
+ xmlns: "http://www.w3.org/2000/svg",
31254
+ className,
31255
+ "aria-hidden": true,
31256
+ ...props,
31257
+ children: /* @__PURE__ */ jsxRuntime.jsx(
31258
+ "path",
31259
+ {
31260
+ d: "M13.3346 4L6.0013 11.3333L2.66797 8",
31261
+ stroke: "#279D54",
31262
+ strokeWidth: "1.5",
31263
+ strokeLinecap: "round",
31264
+ strokeLinejoin: "round"
31265
+ }
31266
+ )
31267
+ }
31268
+ );
31269
+ }
31270
+ function HistoryTimeline({ events }) {
31271
+ return /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "m-0 flex list-none flex-col gap-1 p-0", children: events.map((event, index) => {
31272
+ const isLast = index === events.length - 1;
31273
+ return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start gap-3", children: [
31274
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-8 shrink-0 flex-col items-center", children: [
31275
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex size-8 shrink-0 items-center justify-center rounded-[28px] border border-storm-gray-50 bg-white", children: /* @__PURE__ */ jsxRuntime.jsx(TimelineCheckIcon, { className: "size-4 shrink-0" }) }),
31276
+ !isLast ? /* @__PURE__ */ jsxRuntime.jsx(
31277
+ "div",
31278
+ {
31279
+ "aria-hidden": true,
31280
+ className: "mt-1 h-[31px] w-px shrink-0 border-l border-dashed border-storm-gray-100"
31281
+ }
31282
+ ) : null
31283
+ ] }),
31284
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-2 pt-1.5", children: [
31285
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-sans text-sm font-medium leading-[19px] tracking-normal text-slate-blue", children: event.title }),
31286
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-sans text-xs font-normal leading-4 tracking-normal text-storm-gray-300", children: event.timestamp })
31287
+ ] })
31288
+ ] }, event.id);
31289
+ }) });
31290
+ }
31291
+ function ToastCloseIcon(props) {
31292
+ return /* @__PURE__ */ jsxRuntime.jsx(
31293
+ "svg",
31294
+ {
31295
+ width: "20",
31296
+ height: "20",
31297
+ viewBox: "0 0 20 20",
31298
+ fill: "none",
31299
+ xmlns: "http://www.w3.org/2000/svg",
31300
+ "aria-hidden": true,
31301
+ ...props,
31302
+ children: /* @__PURE__ */ jsxRuntime.jsx(
31303
+ "path",
31304
+ {
31305
+ d: "M15 5L5 15M5 5L15 15",
31306
+ stroke: "#B5BCC1",
31307
+ strokeWidth: "2",
31308
+ strokeLinecap: "round",
31309
+ strokeLinejoin: "round"
31310
+ }
31311
+ )
31312
+ }
31313
+ );
31314
+ }
31315
+ function ToastSuccessIcon(props) {
31316
+ return /* @__PURE__ */ jsxRuntime.jsx(
31317
+ "svg",
31318
+ {
31319
+ width: "24",
31320
+ height: "24",
31321
+ viewBox: "0 0 24 24",
31322
+ fill: "none",
31323
+ xmlns: "http://www.w3.org/2000/svg",
31324
+ "aria-hidden": true,
31325
+ ...props,
31326
+ children: /* @__PURE__ */ jsxRuntime.jsx(
31327
+ "path",
31328
+ {
31329
+ d: "M20 6L9 17L4 12",
31330
+ stroke: "#279D54",
31331
+ strokeWidth: "2",
31332
+ strokeLinecap: "round",
31333
+ strokeLinejoin: "round"
31334
+ }
31335
+ )
31336
+ }
31337
+ );
31338
+ }
31339
+ function ToastErrorIcon(props) {
31340
+ return /* @__PURE__ */ jsxRuntime.jsx(
31341
+ "svg",
31342
+ {
31343
+ width: "24",
31344
+ height: "24",
31345
+ viewBox: "0 0 24 24",
31346
+ fill: "none",
31347
+ xmlns: "http://www.w3.org/2000/svg",
31348
+ "aria-hidden": true,
31349
+ ...props,
31350
+ children: /* @__PURE__ */ jsxRuntime.jsx(
31351
+ "path",
31352
+ {
31353
+ d: "M18 6L6 18M6 6L18 18",
31354
+ stroke: "#AE0011",
31355
+ strokeWidth: "2",
31356
+ strokeLinecap: "round",
31357
+ strokeLinejoin: "round"
31358
+ }
31359
+ )
31360
+ }
31361
+ );
31362
+ }
31363
+ function ToastWarningIcon(props) {
31364
+ return /* @__PURE__ */ jsxRuntime.jsx(
31365
+ "svg",
31366
+ {
31367
+ width: "24",
31368
+ height: "24",
31369
+ viewBox: "0 0 24 24",
31370
+ fill: "none",
31371
+ xmlns: "http://www.w3.org/2000/svg",
31372
+ "aria-hidden": true,
31373
+ ...props,
31374
+ children: /* @__PURE__ */ jsxRuntime.jsx(
31375
+ "path",
31376
+ {
31377
+ d: "M12.0001 9.00022V13.0002M12.0001 17.0002H12.0101M21.7301 18.0002L13.7301 4.00022C13.5556 3.69243 13.3027 3.43641 12.997 3.25829C12.6913 3.08017 12.3438 2.98633 11.9901 2.98633C11.6363 2.98633 11.2888 3.08017 10.9831 3.25829C10.6774 3.43641 10.4245 3.69243 10.2501 4.00022L2.25005 18.0002C2.07373 18.3056 1.98128 18.6521 1.98206 19.0047C1.98284 19.3573 2.07683 19.7035 2.2545 20.008C2.43217 20.3126 2.6872 20.5648 2.99375 20.7391C3.30029 20.9133 3.64746 21.0034 4.00005 21.0002H20.0001C20.351 20.9999 20.6956 20.9072 20.9993 20.7315C21.3031 20.5558 21.5553 20.3033 21.7306 19.9993C21.9059 19.6954 21.9981 19.3506 21.998 18.9997C21.9979 18.6488 21.9055 18.3041 21.7301 18.0002Z",
31378
+ stroke: "#F2A800",
31379
+ strokeWidth: "2",
31380
+ strokeLinecap: "round",
31381
+ strokeLinejoin: "round"
31382
+ }
31383
+ )
31384
+ }
31385
+ );
31386
+ }
31387
+ function ToastInfoIcon(props) {
31388
+ return /* @__PURE__ */ jsxRuntime.jsx(
31389
+ "svg",
31390
+ {
31391
+ width: "24",
31392
+ height: "24",
31393
+ viewBox: "0 0 24 24",
31394
+ fill: "none",
31395
+ xmlns: "http://www.w3.org/2000/svg",
31396
+ "aria-hidden": true,
31397
+ ...props,
31398
+ children: /* @__PURE__ */ jsxRuntime.jsx(
31399
+ "path",
31400
+ {
31401
+ d: "M12 16V12M12 8H12.01M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z",
31402
+ stroke: "#0F52C7",
31403
+ strokeWidth: "2",
31404
+ strokeLinecap: "round",
31405
+ strokeLinejoin: "round"
31406
+ }
31407
+ )
31408
+ }
31409
+ );
31410
+ }
31411
+ function ToastIconBadge({
31412
+ tone,
31413
+ children
31414
+ }) {
31415
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `homepad-toast__icon-badge homepad-toast__icon-badge--${tone}`, children });
31416
+ }
31417
+ var homepadToastIcons = {
31418
+ success: /* @__PURE__ */ jsxRuntime.jsx(ToastIconBadge, { tone: "success", children: /* @__PURE__ */ jsxRuntime.jsx(ToastSuccessIcon, {}) }),
31419
+ error: /* @__PURE__ */ jsxRuntime.jsx(ToastIconBadge, { tone: "error", children: /* @__PURE__ */ jsxRuntime.jsx(ToastErrorIcon, {}) }),
31420
+ warning: /* @__PURE__ */ jsxRuntime.jsx(ToastIconBadge, { tone: "warning", children: /* @__PURE__ */ jsxRuntime.jsx(ToastWarningIcon, {}) }),
31421
+ info: /* @__PURE__ */ jsxRuntime.jsx(ToastIconBadge, { tone: "info", children: /* @__PURE__ */ jsxRuntime.jsx(ToastInfoIcon, {}) }),
31422
+ close: /* @__PURE__ */ jsxRuntime.jsx(ToastCloseIcon, {})
31423
+ };
31424
+ function Toaster({
31425
+ className,
31426
+ position = "bottom-right",
31427
+ theme = "light",
31428
+ closeButton = true,
31429
+ gap = 12,
31430
+ offset = 20,
31431
+ toastOptions,
31432
+ icons,
31433
+ ...props
31434
+ }) {
31435
+ return /* @__PURE__ */ jsxRuntime.jsx(
31436
+ sonner.Toaster,
31437
+ {
31438
+ className: ["homepad-toaster", className].filter(Boolean).join(" "),
31439
+ theme,
31440
+ position,
31441
+ closeButton,
31442
+ gap,
31443
+ offset,
31444
+ mobileOffset: 8,
31445
+ icons: { ...homepadToastIcons, ...icons },
31446
+ toastOptions: {
31447
+ duration: 4e3,
31448
+ classNames: {
31449
+ toast: "homepad-toast",
31450
+ title: "homepad-toast__title",
31451
+ description: "homepad-toast__description",
31452
+ content: "homepad-toast__content",
31453
+ icon: "homepad-toast__icon",
31454
+ closeButton: "homepad-toast__close",
31455
+ ...toastOptions?.classNames
31456
+ },
31457
+ ...toastOptions
31458
+ },
31459
+ ...props
31460
+ }
31461
+ );
31462
+ }
31463
+ function ToasterProvider() {
31464
+ return /* @__PURE__ */ jsxRuntime.jsx(Toaster, {});
31465
+ }
31466
+
31467
+ // src/web/mutation-toast.ts
31468
+ async function runMutationWithToast(action, messages, options) {
31469
+ try {
31470
+ await action();
31471
+ sonner.toast.success(messages.success);
31472
+ return { success: true };
31473
+ } catch (error) {
31474
+ const errorMessage = options?.getErrorMessage?.(error) ?? messages.error;
31475
+ sonner.toast.error(errorMessage);
31476
+ return { success: false, errorMessage };
31477
+ }
31478
+ }
31479
+ function ConfirmModal({
31480
+ open,
31481
+ title,
31482
+ description,
31483
+ cancelText,
31484
+ confirmText,
31485
+ onCancel,
31486
+ onConfirm,
31487
+ cancelDisabled = false,
31488
+ confirmDisabled = false,
31489
+ closeOnBackdrop = true,
31490
+ containerClassName,
31491
+ buttonClassName
31492
+ }) {
31493
+ react.useEffect(() => {
31494
+ if (!open) {
31495
+ return;
31496
+ }
31497
+ const handleKeyDown = (event) => {
31498
+ if (event.key === "Escape") {
31499
+ onCancel();
31500
+ }
31501
+ };
31502
+ window.addEventListener("keydown", handleKeyDown);
31503
+ return () => {
31504
+ window.removeEventListener("keydown", handleKeyDown);
31505
+ };
31506
+ }, [open, onCancel]);
31507
+ if (!open) {
31508
+ return null;
31509
+ }
31510
+ const sharedButtonClassName = cn("btn h-10 min-w-0 flex-1 justify-center!", buttonClassName);
31511
+ return /* @__PURE__ */ jsxRuntime.jsx(
31512
+ "div",
31513
+ {
31514
+ className: "fixed inset-0 z-50 flex items-center justify-center p-4 backdrop-blur-md bg-storm-gray-850/40",
31515
+ onClick: closeOnBackdrop ? onCancel : void 0,
31516
+ role: "presentation",
31517
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
31518
+ "div",
31519
+ {
31520
+ role: "dialog",
31521
+ "aria-modal": "true",
31522
+ "aria-labelledby": "homepad-confirm-modal-title",
31523
+ "aria-describedby": "homepad-confirm-modal-description",
31524
+ className: cn(
31525
+ "flex w-full max-w-md flex-col gap-8 rounded-2xl bg-white p-4 opacity-100 md:p-6",
31526
+ containerClassName
31527
+ ),
31528
+ onClick: (event) => {
31529
+ event.stopPropagation();
31530
+ },
31531
+ children: [
31532
+ /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "flex flex-col gap-3 text-center", children: [
31533
+ /* @__PURE__ */ jsxRuntime.jsx(
31534
+ "h2",
31535
+ {
31536
+ id: "homepad-confirm-modal-title",
31537
+ className: "font-sans text-xl font-bold leading-6.75 tracking-normal text-black",
31538
+ children: title
31539
+ }
31540
+ ),
31541
+ /* @__PURE__ */ jsxRuntime.jsx(
31542
+ "div",
31543
+ {
31544
+ id: "homepad-confirm-modal-description",
31545
+ className: "text-center font-sans text-sm font-normal leading-4.75 tracking-normal text-storm-gray-400",
31546
+ children: description
31547
+ }
31548
+ )
31549
+ ] }),
31550
+ /* @__PURE__ */ jsxRuntime.jsxs("footer", { className: "flex w-full gap-4", children: [
31551
+ /* @__PURE__ */ jsxRuntime.jsx(
31552
+ Button,
31553
+ {
31554
+ title: cancelText,
31555
+ onPress: onCancel,
31556
+ variant: "gray",
31557
+ size: "sm",
31558
+ disabled: cancelDisabled,
31559
+ className: sharedButtonClassName,
31560
+ textClassName: "text-center!"
31561
+ }
31562
+ ),
31563
+ /* @__PURE__ */ jsxRuntime.jsx(
31564
+ Button,
31565
+ {
31566
+ title: confirmText,
31567
+ onPress: onConfirm,
31568
+ variant: "primary",
31569
+ size: "sm",
31570
+ disabled: confirmDisabled,
31571
+ className: sharedButtonClassName,
31572
+ textClassName: "text-center!"
31573
+ }
31574
+ )
31575
+ ] })
31576
+ ]
31577
+ }
31578
+ )
31579
+ }
31580
+ );
31581
+ }
30741
31582
  /*! Bundled license information:
30742
31583
 
30743
31584
  scheduler/cjs/scheduler.production.min.js:
@@ -30798,14 +31639,22 @@ react-dom/cjs/react-dom.development.js:
30798
31639
  *)
30799
31640
  */
30800
31641
 
31642
+ Object.defineProperty(exports, "toast", {
31643
+ enumerable: true,
31644
+ get: function () { return sonner.toast; }
31645
+ });
30801
31646
  exports.AppHeader = AppHeader;
30802
31647
  exports.Badge = Badge;
30803
31648
  exports.BellIcon = BellIcon;
30804
31649
  exports.BuildingIcon = BuildingIcon;
30805
31650
  exports.BuildingSelect = BuildingSelect;
31651
+ exports.ConfirmModal = ConfirmModal;
30806
31652
  exports.DEFAULT_TABLE_BODY_MIN_HEIGHT = DEFAULT_TABLE_BODY_MIN_HEIGHT;
30807
31653
  exports.DashboardLayout = DashboardLayout;
30808
31654
  exports.DataTable = DataTable;
31655
+ exports.Drawer = Drawer;
31656
+ exports.HistoryTimeline = HistoryTimeline;
31657
+ exports.Modal = Modal;
30809
31658
  exports.Pagination = Pagination;
30810
31659
  exports.Sidebar = Sidebar;
30811
31660
  exports.SidebarMobileHeader = SidebarMobileHeader;
@@ -30835,10 +31684,13 @@ exports.TableRowStatusActions = TableRowStatusActions;
30835
31684
  exports.TableScrollArea = TableScrollArea;
30836
31685
  exports.TableSortIcon = TableSortIcon;
30837
31686
  exports.TableStatusActionsCell = TableStatusActionsCell;
31687
+ exports.Toaster = Toaster;
31688
+ exports.ToasterProvider = ToasterProvider;
30838
31689
  exports.cn = cn;
30839
31690
  exports.getPaginationRange = getPaginationRange;
30840
31691
  exports.getTotalPages = getTotalPages;
30841
31692
  exports.getVisiblePageNumbers = getVisiblePageNumbers;
31693
+ exports.runMutationWithToast = runMutationWithToast;
30842
31694
  exports.tableRowDisabledCellClassName = tableRowDisabledCellClassName;
30843
31695
  exports.useMediaQuery = useMediaQuery;
30844
31696
  exports.useOnClickOutside = useOnClickOutside;