@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.
- package/dist/{chunk-DAOLVE64.js → chunk-YSDLHEJ7.js} +204 -14
- package/dist/chunk-YSDLHEJ7.js.map +1 -0
- package/dist/index.cjs +130 -87
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +176 -323
- package/dist/index.js.map +1 -1
- package/dist/web/index.cjs +882 -30
- package/dist/web/index.cjs.map +1 -1
- package/dist/web/index.css +161 -0
- package/dist/web/index.css.map +1 -1
- package/dist/web/index.d.cts +90 -3
- package/dist/web/index.d.ts +90 -3
- package/dist/web/index.js +645 -19
- package/dist/web/index.js.map +1 -1
- package/package.json +9 -3
- package/src/components/Button.tsx +10 -3
- package/src/components/DatePicker.tsx +37 -3
- package/src/components/Select.tsx +1 -1
- package/src/web/components/ConfirmModal.stories.tsx +55 -0
- package/src/web/components/ConfirmModal.tsx +116 -0
- package/src/web/components/Drawer.stories.tsx +234 -0
- package/src/web/components/Drawer.tsx +169 -0
- package/src/web/components/HistoryTimeline.tsx +46 -0
- package/src/web/components/Modal.stories.tsx +130 -0
- package/src/web/components/Modal.tsx +162 -0
- package/src/web/components/TableActionButton.tsx +9 -4
- package/src/web/components/Toaster.stories.tsx +106 -0
- package/src/web/components/Toaster.tsx +92 -0
- package/src/web/components/ToasterProvider.tsx +6 -0
- package/src/web/components/drawer-scroll.css +41 -0
- package/src/web/components/sonner-toast.css +141 -0
- package/src/web/icons/TimelineCheckIcon.tsx +24 -0
- package/src/web/icons/ToastIcons.tsx +119 -0
- package/src/web/index.ts +26 -0
- package/src/web/mutation-toast.ts +33 -0
- package/src/web/toast.ts +1 -0
- package/dist/chunk-DAOLVE64.js.map +0 -1
package/dist/web/index.cjs
CHANGED
|
@@ -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
|
|
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 =
|
|
5399
|
-
|
|
5400
|
+
var d = X3, e = Xj;
|
|
5401
|
+
X3 = null;
|
|
5400
5402
|
Yj(a, b, c);
|
|
5401
|
-
|
|
5403
|
+
X3 = d;
|
|
5402
5404
|
Xj = e;
|
|
5403
|
-
null !==
|
|
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 !==
|
|
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 =
|
|
5411
|
+
d = X3;
|
|
5410
5412
|
e = Xj;
|
|
5411
|
-
|
|
5413
|
+
X3 = c.stateNode.containerInfo;
|
|
5412
5414
|
Xj = true;
|
|
5413
5415
|
Yj(a, b, c);
|
|
5414
|
-
|
|
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
|
-
|
|
5473
|
+
X3 = h.stateNode;
|
|
5472
5474
|
Xj = false;
|
|
5473
5475
|
break a;
|
|
5474
5476
|
case 3:
|
|
5475
|
-
|
|
5477
|
+
X3 = h.stateNode.containerInfo;
|
|
5476
5478
|
Xj = true;
|
|
5477
5479
|
break a;
|
|
5478
5480
|
case 4:
|
|
5479
|
-
|
|
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 ===
|
|
5487
|
+
if (null === X3) throw Error(p(160));
|
|
5486
5488
|
Zj(f, g, e);
|
|
5487
|
-
|
|
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(
|
|
9464
|
+
function createDangerousStringForStyles(styles4) {
|
|
9463
9465
|
{
|
|
9464
9466
|
var serialized = "";
|
|
9465
9467
|
var delimiter = "";
|
|
9466
|
-
for (var styleName in
|
|
9467
|
-
if (!
|
|
9468
|
+
for (var styleName in styles4) {
|
|
9469
|
+
if (!styles4.hasOwnProperty(styleName)) {
|
|
9468
9470
|
continue;
|
|
9469
9471
|
}
|
|
9470
|
-
var styleValue =
|
|
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,
|
|
9483
|
+
function setValueForStyles(node, styles4) {
|
|
9482
9484
|
var style2 = node.style;
|
|
9483
|
-
for (var styleName in
|
|
9484
|
-
if (!
|
|
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,
|
|
9492
|
+
warnValidStyle$1(styleName, styles4[styleName]);
|
|
9491
9493
|
}
|
|
9492
9494
|
}
|
|
9493
|
-
var styleValue = dangerousStyleValue(styleName,
|
|
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(
|
|
9509
|
+
function expandShorthandMap(styles4) {
|
|
9508
9510
|
var expanded = {};
|
|
9509
|
-
for (var key in
|
|
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
|
|
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:
|
|
30327
|
-
reject:
|
|
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;
|