@fairmint/ui 0.2.24 → 0.2.26

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.
@@ -19333,6 +19333,36 @@ const NumberInput = factory((_props, ref) => {
19333
19333
  );
19334
19334
  setTimeout(() => adjustCursor(inputRef.current?.value.length), 0);
19335
19335
  };
19336
+ const handlePaste = (event) => {
19337
+ const pastedText = event.clipboardData.getData("text");
19338
+ const _decimalSeparator = others.decimalSeparator || ".";
19339
+ const separatorsToReplace = (allowedDecimalSeparators || [".", ","]).filter(
19340
+ (s) => s !== _decimalSeparator
19341
+ );
19342
+ if (separatorsToReplace.some((s) => pastedText.includes(s))) {
19343
+ event.preventDefault();
19344
+ let modifiedText = pastedText;
19345
+ separatorsToReplace.forEach((s) => {
19346
+ modifiedText = modifiedText.split(s).join(_decimalSeparator);
19347
+ });
19348
+ const input = inputRef.current;
19349
+ if (input) {
19350
+ const start = input.selectionStart ?? 0;
19351
+ const end = input.selectionEnd ?? 0;
19352
+ const currentValue = input.value;
19353
+ const newValue = currentValue.substring(0, start) + modifiedText + currentValue.substring(end);
19354
+ const nativeInputValueSetter = Object.getOwnPropertyDescriptor(
19355
+ window.HTMLInputElement.prototype,
19356
+ "value"
19357
+ )?.set;
19358
+ nativeInputValueSetter?.call(input, newValue);
19359
+ input.dispatchEvent(new Event("change", { bubbles: true }));
19360
+ const cursorPos = start + modifiedText.length;
19361
+ setTimeout(() => adjustCursor(cursorPos), 0);
19362
+ }
19363
+ }
19364
+ others.onPaste?.(event);
19365
+ };
19336
19366
  const handleKeyDown = (event) => {
19337
19367
  onKeyDown?.(event);
19338
19368
  if (readOnly || !withKeyboardEvents) {
@@ -19457,6 +19487,7 @@ const NumberInput = factory((_props, ref) => {
19457
19487
  unstyled,
19458
19488
  __staticSelector: "NumberInput",
19459
19489
  decimalScale: allowDecimal ? decimalScale : 0,
19490
+ onPaste: handlePaste,
19460
19491
  onKeyDown: handleKeyDown,
19461
19492
  onKeyDownCapture: handleKeyDownCapture,
19462
19493
  rightSectionPointerEvents: rightSectionPointerEvents ?? (disabled ? "none" : void 0),
@@ -19946,6 +19977,7 @@ const PasswordInput$1 = factory((_props, ref) => {
19946
19977
  classNames: resolvedClassNames,
19947
19978
  styles: resolvedStyles,
19948
19979
  __staticSelector: "PasswordInput",
19980
+ __stylesApiProps: props,
19949
19981
  unstyled,
19950
19982
  withAsterisk,
19951
19983
  inputWrapperOrder,
@@ -19971,6 +20003,7 @@ const PasswordInput$1 = factory((_props, ref) => {
19971
20003
  radius,
19972
20004
  disabled,
19973
20005
  __staticSelector: "PasswordInput",
20006
+ __stylesApiProps: props,
19974
20007
  rightSectionWidth,
19975
20008
  rightSection: rightSection ?? visibilityToggleButton,
19976
20009
  variant,
@@ -20844,7 +20877,9 @@ const Tooltip$1 = factory((_props, ref) => {
20844
20877
  });
20845
20878
  const child = getSingleElementChild(children);
20846
20879
  if (!target && !child) {
20847
- return null;
20880
+ throw new Error(
20881
+ "[@mantine/core] Tooltip component children should be an element or a component that accepts ref, fragments, strings, numbers and other primitive values are not supported"
20882
+ );
20848
20883
  }
20849
20884
  if (target) {
20850
20885
  const transition2 = getTransitionProps(transitionProps, { duration: 100, transition: "fade" });
@@ -38282,6 +38317,42 @@ function CompanyBanner({
38282
38317
  detailEl
38283
38318
  ] });
38284
38319
  }
38320
+ const DefaultLockIcon = () => /* @__PURE__ */ jsxRuntime.jsxs(
38321
+ "svg",
38322
+ {
38323
+ width: "12",
38324
+ height: "12",
38325
+ viewBox: "0 0 24 24",
38326
+ fill: "none",
38327
+ stroke: "currentColor",
38328
+ strokeWidth: "2",
38329
+ strokeLinecap: "round",
38330
+ strokeLinejoin: "round",
38331
+ "aria-hidden": "true",
38332
+ children: [
38333
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }),
38334
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })
38335
+ ]
38336
+ }
38337
+ );
38338
+ function ConfidentialityBanner({ children, icon }) {
38339
+ const iconNode = icon === void 0 ? /* @__PURE__ */ jsxRuntime.jsx(DefaultLockIcon, {}) : icon;
38340
+ return /* @__PURE__ */ jsxRuntime.jsx(
38341
+ Box,
38342
+ {
38343
+ py: 8,
38344
+ px: "md",
38345
+ style: {
38346
+ background: `linear-gradient(90deg, ${brandColors.indigo}14 0%, ${brandColors.purple}14 100%)`,
38347
+ borderBottom: `1px solid ${neutralColors[200]}`
38348
+ },
38349
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Group, { justify: "center", gap: 6, wrap: "nowrap", children: [
38350
+ iconNode !== null && /* @__PURE__ */ jsxRuntime.jsx(Box, { c: neutralColors[600], style: { display: "inline-flex" }, children: iconNode }),
38351
+ /* @__PURE__ */ jsxRuntime.jsx(Text, { size: "xs", c: neutralColors[700], fw: 500, ta: "center", children })
38352
+ ] })
38353
+ }
38354
+ );
38355
+ }
38285
38356
  function ConfirmDialog({
38286
38357
  title,
38287
38358
  message,
@@ -38447,6 +38518,40 @@ function Currency({ value, precise = false, currency, style, ...rest }) {
38447
38518
  }
38448
38519
  return /* @__PURE__ */ jsxRuntime.jsx(Text, { component: "span", style: [TABULAR_NUMS, style], ...rest, children: formatted });
38449
38520
  }
38521
+ function DataRow({ label, value, accent = false }) {
38522
+ return /* @__PURE__ */ jsxRuntime.jsxs(Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "nowrap", children: [
38523
+ /* @__PURE__ */ jsxRuntime.jsx(Text, { size: "sm", c: neutralColors[600], style: { flexShrink: 0 }, children: label }),
38524
+ value === null ? /* @__PURE__ */ jsxRuntime.jsx(RedactedValue, {}) : typeof value === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
38525
+ Text,
38526
+ {
38527
+ size: "sm",
38528
+ fw: accent ? 700 : 500,
38529
+ c: accent ? `${colors.success}.8` : neutralColors[900],
38530
+ ta: "right",
38531
+ style: { minWidth: 0 },
38532
+ children: value
38533
+ }
38534
+ ) : value
38535
+ ] });
38536
+ }
38537
+ function StackedValue({ values: values2 }) {
38538
+ return /* @__PURE__ */ jsxRuntime.jsx(Stack, { gap: 2, align: "flex-end", children: values2.map((v) => /* @__PURE__ */ jsxRuntime.jsx(Text, { size: "sm", fw: 500, c: neutralColors[800], ta: "right", children: v }, v)) });
38539
+ }
38540
+ function RedactedValue({ width = 80 } = {}) {
38541
+ return /* @__PURE__ */ jsxRuntime.jsx(
38542
+ Box,
38543
+ {
38544
+ role: "img",
38545
+ "aria-label": "Redacted — sign in to view",
38546
+ style: {
38547
+ height: 14,
38548
+ width,
38549
+ borderRadius: 4,
38550
+ background: `repeating-linear-gradient(135deg, ${neutralColors[200]} 0 4px, ${neutralColors[100]} 4px 8px)`
38551
+ }
38552
+ }
38553
+ );
38554
+ }
38450
38555
  function EmptyState({
38451
38556
  icon,
38452
38557
  title,
@@ -38732,7 +38837,10 @@ function ErrorPage({
38732
38837
  }
38733
38838
  );
38734
38839
  }
38735
- const DefaultChevronIcon = () => /* @__PURE__ */ jsxRuntime.jsx(
38840
+ function Eyebrow({ children, size: size2 = "xs", c = neutralColors[500], ...rest }) {
38841
+ return /* @__PURE__ */ jsxRuntime.jsx(Text, { size: size2, fw: 700, tt: "uppercase", c, style: { letterSpacing: "0.08em" }, ...rest, children });
38842
+ }
38843
+ const DefaultChevronIcon$1 = () => /* @__PURE__ */ jsxRuntime.jsx(
38736
38844
  "svg",
38737
38845
  {
38738
38846
  width: "14",
@@ -38797,7 +38905,7 @@ function ListRow({
38797
38905
  }
38798
38906
  )
38799
38907
  ] })),
38800
- displayChevron && (chevronIcon ?? /* @__PURE__ */ jsxRuntime.jsx(Box, { c: fairmintVars.colorTextTertiary, style: { flexShrink: 0 }, children: /* @__PURE__ */ jsxRuntime.jsx(DefaultChevronIcon, {}) }))
38908
+ displayChevron && (chevronIcon ?? /* @__PURE__ */ jsxRuntime.jsx(Box, { c: fairmintVars.colorTextTertiary, style: { flexShrink: 0 }, children: /* @__PURE__ */ jsxRuntime.jsx(DefaultChevronIcon$1, {}) }))
38801
38909
  ] })
38802
38910
  ] });
38803
38911
  const animationStyle = animate ? {
@@ -40086,6 +40194,80 @@ function PhotoCropModal({
40086
40194
  ] })
40087
40195
  ] }) });
40088
40196
  }
40197
+ function RadioCard({
40198
+ selected,
40199
+ title,
40200
+ description,
40201
+ badge,
40202
+ leading,
40203
+ onSelect
40204
+ }) {
40205
+ return /* @__PURE__ */ jsxRuntime.jsx(
40206
+ UnstyledButton,
40207
+ {
40208
+ onClick: onSelect,
40209
+ role: "radio",
40210
+ "aria-checked": selected,
40211
+ style: {
40212
+ display: "block",
40213
+ width: "100%",
40214
+ padding: 16,
40215
+ borderRadius: 12,
40216
+ border: `1.5px solid ${selected ? brandColors.indigo : neutralColors[200]}`,
40217
+ background: selected ? `${brandColors.indigo}08` : "white",
40218
+ transition: "all 120ms ease",
40219
+ textAlign: "left"
40220
+ },
40221
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Box, { style: { display: "flex", gap: 12, alignItems: "flex-start" }, children: [
40222
+ leading && /* @__PURE__ */ jsxRuntime.jsx(Box, { style: { flexShrink: 0 }, children: leading }),
40223
+ /* @__PURE__ */ jsxRuntime.jsxs(Stack, { gap: 2, style: { minWidth: 0, flex: 1 }, children: [
40224
+ /* @__PURE__ */ jsxRuntime.jsxs(
40225
+ Box,
40226
+ {
40227
+ style: {
40228
+ display: "flex",
40229
+ justifyContent: "space-between",
40230
+ alignItems: "baseline",
40231
+ gap: 8
40232
+ },
40233
+ children: [
40234
+ /* @__PURE__ */ jsxRuntime.jsx(Text, { fw: 600, size: "sm", c: neutralColors[900], children: title }),
40235
+ badge
40236
+ ]
40237
+ }
40238
+ ),
40239
+ description && /* @__PURE__ */ jsxRuntime.jsx(Text, { size: "xs", c: neutralColors[600], lh: 1.5, children: description })
40240
+ ] }),
40241
+ /* @__PURE__ */ jsxRuntime.jsx(
40242
+ Box,
40243
+ {
40244
+ style: {
40245
+ width: 18,
40246
+ height: 18,
40247
+ borderRadius: "50%",
40248
+ border: `2px solid ${selected ? brandColors.indigo : neutralColors[300]}`,
40249
+ background: selected ? brandColors.indigo : "transparent",
40250
+ position: "relative",
40251
+ flexShrink: 0,
40252
+ marginTop: 2
40253
+ },
40254
+ children: selected && /* @__PURE__ */ jsxRuntime.jsx(
40255
+ Box,
40256
+ {
40257
+ style: {
40258
+ position: "absolute",
40259
+ inset: 4,
40260
+ borderRadius: "50%",
40261
+ background: "white"
40262
+ }
40263
+ }
40264
+ )
40265
+ }
40266
+ )
40267
+ ] })
40268
+ }
40269
+ );
40270
+ }
40089
40271
  function SearchInput({
40090
40272
  value,
40091
40273
  onChange,
@@ -40205,6 +40387,68 @@ function StatusBadge({ status, colorMap, label, ...rest }) {
40205
40387
  const displayLabel = label ?? status.charAt(0).toUpperCase() + status.slice(1);
40206
40388
  return /* @__PURE__ */ jsxRuntime.jsx(Badge, { color, variant: "light", ...rest, children: displayLabel });
40207
40389
  }
40390
+ const DefaultCheckIcon = () => /* @__PURE__ */ jsxRuntime.jsxs(
40391
+ "svg",
40392
+ {
40393
+ width: "18",
40394
+ height: "18",
40395
+ viewBox: "0 0 24 24",
40396
+ fill: "none",
40397
+ stroke: "currentColor",
40398
+ strokeWidth: "2",
40399
+ strokeLinecap: "round",
40400
+ strokeLinejoin: "round",
40401
+ "aria-hidden": "true",
40402
+ children: [
40403
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
40404
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m9 12 2 2 4-4" })
40405
+ ]
40406
+ }
40407
+ );
40408
+ function StepCard({
40409
+ index: index2,
40410
+ title,
40411
+ description,
40412
+ done = false,
40413
+ doneIcon,
40414
+ children
40415
+ }) {
40416
+ return /* @__PURE__ */ jsxRuntime.jsx(
40417
+ Paper,
40418
+ {
40419
+ radius: "lg",
40420
+ p: { base: "md", sm: "xl" },
40421
+ style: {
40422
+ background: "white",
40423
+ border: `1px solid ${neutralColors[200]}`
40424
+ },
40425
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Stack, { gap: "md", children: [
40426
+ /* @__PURE__ */ jsxRuntime.jsxs(Group, { gap: "md", align: "flex-start", wrap: "nowrap", children: [
40427
+ /* @__PURE__ */ jsxRuntime.jsx(
40428
+ ThemeIcon,
40429
+ {
40430
+ size: 32,
40431
+ radius: "xl",
40432
+ variant: done ? "filled" : "light",
40433
+ color: done ? "indigo" : "gray",
40434
+ style: {
40435
+ flexShrink: 0,
40436
+ background: done ? brandColors.indigo : neutralColors[100],
40437
+ color: done ? "white" : neutralColors[600]
40438
+ },
40439
+ children: done ? doneIcon ?? /* @__PURE__ */ jsxRuntime.jsx(DefaultCheckIcon, {}) : /* @__PURE__ */ jsxRuntime.jsx(Text, { fw: 700, fz: 14, children: index2 })
40440
+ }
40441
+ ),
40442
+ /* @__PURE__ */ jsxRuntime.jsxs(Box, { style: { minWidth: 0, flex: 1 }, children: [
40443
+ /* @__PURE__ */ jsxRuntime.jsx(Text, { fw: 700, fz: { base: 17, sm: 19 }, c: neutralColors[900], lh: 1.3, children: title }),
40444
+ description && /* @__PURE__ */ jsxRuntime.jsx(Text, { size: "sm", c: neutralColors[600], lh: 1.5, mt: 4, children: description })
40445
+ ] })
40446
+ ] }),
40447
+ /* @__PURE__ */ jsxRuntime.jsx(Box, { pl: { base: 0, sm: 48 }, children })
40448
+ ] })
40449
+ }
40450
+ );
40451
+ }
40208
40452
  function LoadingSpinner({ size: size2 = 32 }) {
40209
40453
  const iconProps = {
40210
40454
  xmlns: "http://www.w3.org/2000/svg",
@@ -40334,26 +40578,88 @@ function UserMenu({
40334
40578
  ] }, item.id)) })
40335
40579
  ] });
40336
40580
  }
40581
+ const DefaultDocumentIcon = () => /* @__PURE__ */ jsxRuntime.jsxs(
40582
+ "svg",
40583
+ {
40584
+ width: "18",
40585
+ height: "18",
40586
+ viewBox: "0 0 24 24",
40587
+ fill: "none",
40588
+ stroke: "currentColor",
40589
+ strokeWidth: "2",
40590
+ strokeLinecap: "round",
40591
+ strokeLinejoin: "round",
40592
+ "aria-hidden": "true",
40593
+ children: [
40594
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }),
40595
+ /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "14 2 14 8 20 8" }),
40596
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "16", y1: "13", x2: "8", y2: "13" }),
40597
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "16", y1: "17", x2: "8", y2: "17" }),
40598
+ /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "10 9 9 9 8 9" })
40599
+ ]
40600
+ }
40601
+ );
40602
+ const DefaultChevronIcon = () => /* @__PURE__ */ jsxRuntime.jsx(
40603
+ "svg",
40604
+ {
40605
+ width: "14",
40606
+ height: "14",
40607
+ viewBox: "0 0 24 24",
40608
+ fill: "none",
40609
+ stroke: "currentColor",
40610
+ strokeWidth: "2",
40611
+ strokeLinecap: "round",
40612
+ strokeLinejoin: "round",
40613
+ "aria-hidden": "true",
40614
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m9 18 6-6-6-6" })
40615
+ }
40616
+ );
40337
40617
  function DocumentRow({
40338
40618
  name,
40619
+ caption,
40339
40620
  type,
40340
40621
  date: date2,
40622
+ icon,
40341
40623
  rightSection,
40342
40624
  onClick,
40343
- animationDelay
40625
+ showChevron = false,
40626
+ animationDelay,
40627
+ ariaLabel
40344
40628
  }) {
40345
- const subtitle = [type, date2 ? formatDate(date2) : void 0].filter(Boolean).join(" · ");
40629
+ const isClickable = Boolean(onClick);
40630
+ const animate = animationDelay !== void 0;
40631
+ const resolvedCaption = caption ?? (type || date2 ? [type, date2 ? formatDate(date2) : void 0].filter(Boolean).join(" · ") : void 0);
40632
+ const leadingNode = icon ?? /* @__PURE__ */ jsxRuntime.jsx(ThemeIcon, { size: 36, radius: "md", variant: "light", color: colors.primary, children: /* @__PURE__ */ jsxRuntime.jsx(DefaultDocumentIcon, {}) });
40633
+ const content = /* @__PURE__ */ jsxRuntime.jsxs(Group, { gap: "md", wrap: "nowrap", align: "center", children: [
40634
+ /* @__PURE__ */ jsxRuntime.jsx(Box, { style: { flexShrink: 0 }, children: leadingNode }),
40635
+ /* @__PURE__ */ jsxRuntime.jsxs(Stack, { gap: 2, style: { minWidth: 0, flex: 1 }, children: [
40636
+ /* @__PURE__ */ jsxRuntime.jsx(Text, { fw: 500, size: "sm", lineClamp: 1, children: name }),
40637
+ resolvedCaption !== void 0 && resolvedCaption !== null && resolvedCaption !== "" ? typeof resolvedCaption === "string" ? /* @__PURE__ */ jsxRuntime.jsx(Text, { size: "xs", c: fairmintVars.colorTextSecondary, lineClamp: 1, children: resolvedCaption }) : resolvedCaption : null
40638
+ ] }),
40639
+ /* @__PURE__ */ jsxRuntime.jsxs(Group, { gap: "xs", wrap: "nowrap", style: { flexShrink: 0 }, children: [
40640
+ rightSection,
40641
+ showChevron && /* @__PURE__ */ jsxRuntime.jsx(Box, { c: fairmintVars.colorTextTertiary, style: { display: "inline-flex" }, children: /* @__PURE__ */ jsxRuntime.jsx(DefaultChevronIcon, {}) })
40642
+ ] })
40643
+ ] });
40644
+ const animationStyle = animate ? {
40645
+ opacity: 0,
40646
+ animation: "rowSlideIn 0.35s cubic-bezier(0.22, 1, 0.36, 1) forwards",
40647
+ animationDelay: `${animationDelay}s`
40648
+ } : void 0;
40649
+ if (!isClickable) {
40650
+ return /* @__PURE__ */ jsxRuntime.jsx(Box, { py: "sm", px: "md", style: animationStyle, children: content });
40651
+ }
40346
40652
  return /* @__PURE__ */ jsxRuntime.jsx(
40347
- ListRow,
40653
+ UnstyledButton,
40348
40654
  {
40349
- title: name,
40350
- subtitle: subtitle || void 0,
40351
- avatarName: name,
40352
- avatarColor: colors.neutral,
40353
- rightSection,
40354
40655
  onClick,
40355
- animationDelay,
40356
- showChevron: Boolean(onClick)
40656
+ className: "fairmint-list-row",
40657
+ w: "100%",
40658
+ py: "sm",
40659
+ px: "md",
40660
+ style: animationStyle,
40661
+ "aria-label": ariaLabel ?? name,
40662
+ children: content
40357
40663
  }
40358
40664
  );
40359
40665
  }
@@ -41149,9 +41455,11 @@ exports.ClickableCard = ClickableCard;
41149
41455
  exports.Collapse = Collapse;
41150
41456
  exports.ColorDot = ColorDot;
41151
41457
  exports.CompanyBanner = CompanyBanner;
41458
+ exports.ConfidentialityBanner = ConfidentialityBanner;
41152
41459
  exports.ConfirmDialog = ConfirmDialog;
41153
41460
  exports.Container = Container;
41154
41461
  exports.Currency = Currency;
41462
+ exports.DataRow = DataRow;
41155
41463
  exports.DataTable = DataTable;
41156
41464
  exports.DateDisplay = DateDisplay;
41157
41465
  exports.DetailDrawer = DetailDrawer;
@@ -41166,6 +41474,7 @@ exports.EquityGrantCard = EquityGrantCard;
41166
41474
  exports.ErrorFallback = ErrorFallback;
41167
41475
  exports.ErrorPage = ErrorPage;
41168
41476
  exports.EthereumAddressField = EthereumAddressField;
41477
+ exports.Eyebrow = Eyebrow;
41169
41478
  exports.FairmintLogo = FairmintLogo;
41170
41479
  exports.FairmintProvider = FairmintProvider;
41171
41480
  exports.Flex = Flex;
@@ -41195,6 +41504,8 @@ exports.PhoneField = PhoneField;
41195
41504
  exports.PhotoCropModal = PhotoCropModal;
41196
41505
  exports.PinInput = PinInput;
41197
41506
  exports.Progress = Progress;
41507
+ exports.RadioCard = RadioCard;
41508
+ exports.RedactedValue = RedactedValue;
41198
41509
  exports.ScrollArea = ScrollArea;
41199
41510
  exports.SearchInput = SearchInput;
41200
41511
  exports.SegmentedControl = SegmentedControl;
@@ -41204,8 +41515,10 @@ exports.SimpleGrid = SimpleGrid;
41204
41515
  exports.Skeleton = Skeleton;
41205
41516
  exports.Space = Space;
41206
41517
  exports.Stack = Stack;
41518
+ exports.StackedValue = StackedValue;
41207
41519
  exports.StatCard = StatCard;
41208
41520
  exports.StatusBadge = StatusBadge;
41521
+ exports.StepCard = StepCard;
41209
41522
  exports.Switch = Switch;
41210
41523
  exports.TABLET_BREAKPOINT = TABLET_BREAKPOINT;
41211
41524
  exports.Table = Table;