@ostack.tech/ui 0.7.0 → 0.8.0

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 (38) hide show
  1. package/dist/ostack-ui.css +2 -2
  2. package/dist/ostack-ui.css.map +1 -1
  3. package/dist/ostack-ui.js +233 -210
  4. package/dist/ostack-ui.js.map +1 -1
  5. package/dist/types/components/Alert/Alert.d.ts +1 -1
  6. package/dist/types/components/Alert/AlertTitle.d.ts +7 -3
  7. package/dist/types/components/AlertDialog/AlertDialogTitle.d.ts +7 -2
  8. package/dist/types/components/Button/Button.d.ts +8 -3
  9. package/dist/types/components/Calendar/Calendar.d.ts +2 -2
  10. package/dist/types/components/Card/CardTitle.d.ts +8 -11
  11. package/dist/types/components/CloseButton/CloseButton.d.ts +1 -1
  12. package/dist/types/components/DataTable/DataTablePagination.d.ts +2 -2
  13. package/dist/types/components/DataTable/DataTableSelectionTrigger.d.ts +1 -1
  14. package/dist/types/components/Dialog/DialogTitle.d.ts +7 -2
  15. package/dist/types/components/ErrorBoundary/ErrorBoundary.d.ts +1 -1
  16. package/dist/types/components/FeedbackPopover/FeedbackPopover.d.ts +1 -1
  17. package/dist/types/components/FieldGroup/FieldGroupTitle.d.ts +7 -10
  18. package/dist/types/components/Heading/Heading.d.ts +13 -6
  19. package/dist/types/components/IconButton/IconButton.d.ts +9 -4
  20. package/dist/types/components/Label/Label.d.ts +1 -1
  21. package/dist/types/components/Link/Link.d.ts +8 -3
  22. package/dist/types/components/MenuList/MenuListItem.d.ts +6 -4
  23. package/dist/types/components/Select/Select.d.ts +1 -1
  24. package/dist/types/components/Table/TableColumn.d.ts +2 -2
  25. package/dist/types/index.d.ts +1 -0
  26. package/dist/types/providers/AlertDialogProvider/AlertDialogProviderContext.d.ts +2 -2
  27. package/dist/types/utils/polymorphicTypes.d.ts +23 -0
  28. package/package.json +1 -1
  29. package/scss/components/ControlAddon/_ControlAddon.scss +3 -3
  30. package/scss/components/FieldGroup/_FieldGroup-variables.scss +3 -3
  31. package/scss/components/Select/_Select-variables.scss +1 -1
  32. package/scss/components/Select/_Select.scss +1 -1
  33. package/scss/scss/placeholders/popover/_popover.scss +10 -12
  34. package/scss/scss/utils/_breakpoints.scss +4 -5
  35. package/scss/scss/utils/_css-color-functions.scss +10 -6
  36. package/scss/scss/utils/_declare-var.scss +1 -1
  37. package/scss/scss/utils/_maybe-important.scss +1 -1
  38. package/scss/scss/utils/_spacing.scss +10 -5
package/dist/ostack-ui.js CHANGED
@@ -139,20 +139,18 @@ const CardHeader = forwardRef(
139
139
  );
140
140
  }
141
141
  );
142
- const CardTitle = forwardRef(
143
- function CardTitle2({ asChild, level = 2, className, ...otherProps }, forwardedRef) {
144
- const prefix = usePrefix();
145
- const As = asChild ? Slot : `h${level}`;
146
- return /* @__PURE__ */ jsx(
147
- As,
148
- {
149
- className: cx(prefix("card__title"), className),
150
- ...otherProps,
151
- ref: forwardedRef
152
- }
153
- );
154
- }
155
- );
142
+ const CardTitle = forwardRef(function CardTitle2({ as = "div", asChild, className, ...otherProps }, forwardedRef) {
143
+ const prefix = usePrefix();
144
+ const As = asChild ? Slot : as;
145
+ return /* @__PURE__ */ jsx(
146
+ As,
147
+ {
148
+ className: cx(prefix("card__title"), className),
149
+ ...otherProps,
150
+ ref: forwardedRef
151
+ }
152
+ );
153
+ });
156
154
  const DialogBody = forwardRef(function DialogBody2({ className, ...otherProps }, forwardedRef) {
157
155
  const prefix = usePrefix();
158
156
  return /* @__PURE__ */ jsx(
@@ -1408,86 +1406,86 @@ const Tooltip = forwardRef(function Tooltip2({
1408
1406
  });
1409
1407
  const TooltipProvider = Tooltip$1.Provider;
1410
1408
  const VisuallyHidden = VisuallyHidden$1.Root;
1411
- const IconButton = forwardRef(
1412
- function IconButton2({
1413
- asChild,
1414
- variant = "solid",
1415
- color = "neutral",
1416
- size = "md",
1417
- circle,
1418
- icon,
1419
- label,
1420
- active,
1421
- disabled,
1422
- loading,
1423
- loadingLabel,
1424
- showSpinner = loading,
1425
- disableTooltip,
1426
- iconProps,
1427
- spinnerProps,
1428
- tooltipProps,
1429
- type,
1430
- onClick,
1431
- className,
1432
- children,
1433
- ...otherProps
1434
- }, forwardedRef) {
1435
- const prefix = usePrefix();
1436
- const relevantLabel = loading ? loadingLabel || label : label;
1437
- const labelEl = relevantLabel && /* @__PURE__ */ jsx(VisuallyHidden, { children: relevantLabel });
1438
- const iconEl = icon && !showSpinner && /* @__PURE__ */ jsx(Slot, { className: cx(prefix("icon-button__icon"), iconProps?.className), children: isValidElement(icon) ? icon : /* @__PURE__ */ jsx(Icon, { icon, fixedWidth: true, ...iconProps }) });
1439
- const spinnerEl = showSpinner && /* @__PURE__ */ jsx(
1440
- Spinner,
1441
- {
1442
- ...spinnerProps,
1443
- className: cx(prefix("icon-button__spinner"), spinnerProps?.className)
1444
- }
1445
- );
1446
- let content = /* @__PURE__ */ jsxs(Fragment, { children: [
1447
- spinnerEl,
1448
- iconEl,
1449
- labelEl
1450
- ] });
1451
- if (asChild) {
1452
- content = cloneElement(children, void 0, content);
1409
+ const IconButton = forwardRef(function IconButton2({
1410
+ as = "button",
1411
+ asChild,
1412
+ variant = "solid",
1413
+ color = "neutral",
1414
+ size = "md",
1415
+ circle,
1416
+ icon,
1417
+ label,
1418
+ active,
1419
+ disabled,
1420
+ loading,
1421
+ loadingLabel,
1422
+ showSpinner = loading,
1423
+ disableTooltip,
1424
+ iconProps,
1425
+ spinnerProps,
1426
+ tooltipProps,
1427
+ type,
1428
+ onClick,
1429
+ className,
1430
+ children,
1431
+ ...otherProps
1432
+ }, forwardedRef) {
1433
+ const prefix = usePrefix();
1434
+ const relevantLabel = loading ? loadingLabel || label : label;
1435
+ const labelEl = relevantLabel && /* @__PURE__ */ jsx(VisuallyHidden, { children: relevantLabel });
1436
+ const iconEl = icon && !showSpinner && /* @__PURE__ */ jsx(Slot, { className: cx(prefix("icon-button__icon"), iconProps?.className), children: isValidElement(icon) ? icon : /* @__PURE__ */ jsx(Icon, { icon, fixedWidth: true, ...iconProps }) });
1437
+ const spinnerEl = showSpinner && /* @__PURE__ */ jsx(
1438
+ Spinner,
1439
+ {
1440
+ ...spinnerProps,
1441
+ className: cx(prefix("icon-button__spinner"), spinnerProps?.className)
1453
1442
  }
1454
- const handleClick = useCallback(
1455
- (evt) => {
1456
- if (disabled || loading) {
1457
- evt.preventDefault();
1458
- return;
1459
- }
1460
- onClick?.(evt);
1461
- },
1462
- [disabled, loading, onClick]
1463
- );
1464
- const As = asChild ? Slot : "button";
1465
- const button = /* @__PURE__ */ jsx(
1466
- As,
1467
- {
1468
- type: !asChild && !type ? "button" : type,
1469
- className: cx(
1470
- prefix("icon-button"),
1471
- prefix(`icon-button--${variant}`),
1472
- prefix(`icon-button--${size}`),
1473
- circle && prefix("icon-button--circle"),
1474
- className
1475
- ),
1476
- onClick: handleClick,
1477
- "data-accent": color,
1478
- disabled,
1479
- "data-disabled": boolDataAttr(loading || asChild && disabled),
1480
- "aria-disabled": loading || asChild && disabled || void 0,
1481
- "data-active": boolDataAttr(active),
1482
- tabIndex: asChild && disabled ? -1 : void 0,
1483
- ref: forwardedRef,
1484
- ...otherProps,
1485
- children: content
1486
- }
1487
- );
1488
- return relevantLabel && !disableTooltip ? /* @__PURE__ */ jsx(Tooltip, { ...tooltipProps, content: relevantLabel, children: button }) : button;
1443
+ );
1444
+ let content = /* @__PURE__ */ jsxs(Fragment, { children: [
1445
+ spinnerEl,
1446
+ iconEl,
1447
+ labelEl
1448
+ ] });
1449
+ if (asChild) {
1450
+ content = cloneElement(children, void 0, content);
1489
1451
  }
1490
- );
1452
+ const handleClick = useCallback(
1453
+ (evt) => {
1454
+ if (disabled || loading) {
1455
+ evt.preventDefault();
1456
+ return;
1457
+ }
1458
+ onClick?.(evt);
1459
+ },
1460
+ [disabled, loading, onClick]
1461
+ );
1462
+ const isButton = as === "button" && !asChild;
1463
+ const As = asChild ? Slot : as;
1464
+ const button = /* @__PURE__ */ jsx(
1465
+ As,
1466
+ {
1467
+ type: type ?? (isButton ? "button" : void 0),
1468
+ className: cx(
1469
+ prefix("icon-button"),
1470
+ prefix(`icon-button--${variant}`),
1471
+ prefix(`icon-button--${size}`),
1472
+ circle && prefix("icon-button--circle"),
1473
+ className
1474
+ ),
1475
+ onClick: handleClick,
1476
+ "data-accent": color,
1477
+ disabled,
1478
+ "data-disabled": boolDataAttr(loading || !isButton && disabled),
1479
+ "aria-disabled": loading || !isButton && disabled || void 0,
1480
+ "data-active": boolDataAttr(active),
1481
+ tabIndex: !isButton && disabled ? -1 : void 0,
1482
+ ref: forwardedRef,
1483
+ ...otherProps,
1484
+ children: content
1485
+ }
1486
+ );
1487
+ return relevantLabel && !disableTooltip ? /* @__PURE__ */ jsx(Tooltip, { ...tooltipProps, content: relevantLabel, children: button }) : button;
1488
+ });
1491
1489
  const CloseButton = forwardRef(
1492
1490
  function CloseIconButton({ icon, label, disableTooltip = true, className, ...otherProps }, forwardedRef) {
1493
1491
  const prefix = usePrefix();
@@ -1555,14 +1553,20 @@ const DialogHeader = forwardRef(function DialogHeader2({
1555
1553
  }
1556
1554
  );
1557
1555
  });
1558
- const DialogTitle = forwardRef(function DialogTitle2({ className, ...otherProps }, forwardedRef) {
1556
+ const DialogTitle = forwardRef(function DialogTitle2({
1557
+ as = "h2",
1558
+ asChild,
1559
+ className,
1560
+ ...otherProps
1561
+ }, forwardedRef) {
1559
1562
  const prefix = usePrefix();
1560
- return /* @__PURE__ */ jsx(CardTitle, { asChild: true, children: /* @__PURE__ */ jsx(
1561
- Dialog$1.Title,
1563
+ const As = asChild ? Slot : as;
1564
+ return /* @__PURE__ */ jsx(Dialog$1.Title, { asChild: true, children: /* @__PURE__ */ jsx(
1565
+ As,
1562
1566
  {
1563
1567
  className: cx(prefix("dialog__title"), className),
1564
- ref: forwardedRef,
1565
- ...otherProps
1568
+ ...otherProps,
1569
+ ref: forwardedRef
1566
1570
  }
1567
1571
  ) });
1568
1572
  });
@@ -1652,108 +1656,114 @@ const AlertDialogHeader = forwardRef(function AlertDialogHeader2({ className, ..
1652
1656
  }
1653
1657
  );
1654
1658
  });
1655
- const AlertDialogTitle = forwardRef(function AlertDialogTitle2({ className, ...otherProps }, forwardedRef) {
1659
+ const AlertDialogTitle = forwardRef(function AlertDialogTitle2({
1660
+ as = "h2",
1661
+ asChild,
1662
+ className,
1663
+ ...otherProps
1664
+ }, forwardedRef) {
1656
1665
  const prefix = usePrefix();
1657
- return /* @__PURE__ */ jsx(CardTitle, { asChild: true, children: /* @__PURE__ */ jsx(
1658
- AlertDialog$1.Title,
1666
+ const As = asChild ? Slot : as;
1667
+ return /* @__PURE__ */ jsx(AlertDialog$1.Title, { asChild: true, children: /* @__PURE__ */ jsx(
1668
+ As,
1659
1669
  {
1660
1670
  className: cx(prefix("dialog__title"), className),
1661
- ref: forwardedRef,
1662
- ...otherProps
1671
+ ...otherProps,
1672
+ ref: forwardedRef
1663
1673
  }
1664
1674
  ) });
1665
1675
  });
1666
1676
  const AlertDialogTrigger = forwardRef(function AlertDialogTrigger2(props, forwardedRef) {
1667
1677
  return /* @__PURE__ */ jsx(AlertDialog$1.Trigger, { ...props, asChild: true, ref: forwardedRef });
1668
1678
  });
1669
- const Button = forwardRef(
1670
- function Button2({
1671
- asChild,
1672
- variant = "solid",
1673
- color = "neutral",
1674
- size = "md",
1675
- vertical,
1676
- icon = null,
1677
- iconPlacement = "start",
1678
- active,
1679
- disabled,
1680
- loading,
1681
- loadingContent,
1682
- showSpinner = loading,
1683
- iconProps,
1684
- spinnerProps,
1685
- type,
1686
- onClick,
1687
- className,
1688
- children,
1689
- ...otherProps
1690
- }, forwardedRef) {
1691
- const prefix = usePrefix();
1692
- const iconEl = icon && !showSpinner && /* @__PURE__ */ jsx(
1693
- Slot,
1694
- {
1695
- className: cx(
1696
- prefix("button__icon"),
1697
- prefix(`button__icon--${iconPlacement}`),
1698
- iconProps?.className
1699
- ),
1700
- children: isValidElement(icon) ? icon : /* @__PURE__ */ jsx(Icon, { icon, ...iconProps })
1701
- }
1702
- );
1703
- const spinnerEl = showSpinner && /* @__PURE__ */ jsx(
1704
- Spinner,
1705
- {
1706
- ...spinnerProps,
1707
- className: cx(
1708
- prefix("button__spinner"),
1709
- prefix(`button__spinner--${iconPlacement}`),
1710
- spinnerProps?.className
1711
- )
1712
- }
1713
- );
1714
- const content = loading && loadingContent ? asChild ? cloneElement(children, void 0, loadingContent) : loadingContent : children;
1715
- const handleClick = useCallback(
1716
- (evt) => {
1717
- if (disabled || loading) {
1718
- evt.preventDefault();
1719
- return;
1720
- }
1721
- onClick?.(evt);
1722
- },
1723
- [disabled, loading, onClick]
1724
- );
1725
- const As = asChild ? Slot : "button";
1726
- return /* @__PURE__ */ jsxs(
1727
- As,
1728
- {
1729
- type: !asChild && !type ? "button" : type,
1730
- className: cx(
1731
- prefix("button"),
1732
- prefix(`button--${variant}`),
1733
- prefix(`button--${size}`),
1734
- vertical && prefix("button--vertical"),
1735
- className
1736
- ),
1737
- onClick: handleClick,
1738
- "data-accent": color,
1739
- disabled,
1740
- "data-disabled": boolDataAttr(loading || asChild && disabled),
1741
- "aria-disabled": loading || asChild && disabled || void 0,
1742
- "data-active": boolDataAttr(active),
1743
- tabIndex: asChild && disabled ? -1 : void 0,
1744
- ref: forwardedRef,
1745
- ...otherProps,
1746
- children: [
1747
- iconPlacement === "start" && spinnerEl,
1748
- iconPlacement === "start" && iconEl,
1749
- /* @__PURE__ */ jsx(Slottable, { children: content }),
1750
- iconPlacement === "end" && iconEl,
1751
- iconPlacement === "end" && spinnerEl
1752
- ]
1679
+ const Button = forwardRef(function Button2({
1680
+ as = "button",
1681
+ asChild,
1682
+ variant = "solid",
1683
+ color = "neutral",
1684
+ size = "md",
1685
+ vertical,
1686
+ icon = null,
1687
+ iconPlacement = "start",
1688
+ active,
1689
+ disabled,
1690
+ loading,
1691
+ loadingContent,
1692
+ showSpinner = loading,
1693
+ iconProps,
1694
+ spinnerProps,
1695
+ type,
1696
+ onClick,
1697
+ className,
1698
+ children,
1699
+ ...otherProps
1700
+ }, forwardedRef) {
1701
+ const prefix = usePrefix();
1702
+ const iconEl = icon && !showSpinner && /* @__PURE__ */ jsx(
1703
+ Slot,
1704
+ {
1705
+ className: cx(
1706
+ prefix("button__icon"),
1707
+ prefix(`button__icon--${iconPlacement}`),
1708
+ iconProps?.className
1709
+ ),
1710
+ children: isValidElement(icon) ? icon : /* @__PURE__ */ jsx(Icon, { icon, ...iconProps })
1711
+ }
1712
+ );
1713
+ const spinnerEl = showSpinner && /* @__PURE__ */ jsx(
1714
+ Spinner,
1715
+ {
1716
+ ...spinnerProps,
1717
+ className: cx(
1718
+ prefix("button__spinner"),
1719
+ prefix(`button__spinner--${iconPlacement}`),
1720
+ spinnerProps?.className
1721
+ )
1722
+ }
1723
+ );
1724
+ const content = loading && loadingContent ? asChild ? cloneElement(children, void 0, loadingContent) : loadingContent : children;
1725
+ const handleClick = useCallback(
1726
+ (evt) => {
1727
+ if (disabled || loading) {
1728
+ evt.preventDefault();
1729
+ return;
1753
1730
  }
1754
- );
1755
- }
1756
- );
1731
+ onClick?.(evt);
1732
+ },
1733
+ [disabled, loading, onClick]
1734
+ );
1735
+ const isButton = as === "button" && !asChild;
1736
+ const As = asChild ? Slot : as;
1737
+ return /* @__PURE__ */ jsxs(
1738
+ As,
1739
+ {
1740
+ type: type ?? (isButton ? "button" : void 0),
1741
+ className: cx(
1742
+ prefix("button"),
1743
+ prefix(`button--${variant}`),
1744
+ prefix(`button--${size}`),
1745
+ vertical && prefix("button--vertical"),
1746
+ className
1747
+ ),
1748
+ onClick: handleClick,
1749
+ "data-accent": color,
1750
+ disabled,
1751
+ "data-disabled": boolDataAttr(loading || !isButton && disabled),
1752
+ "aria-disabled": loading || !isButton && disabled || void 0,
1753
+ "data-active": boolDataAttr(active),
1754
+ tabIndex: !isButton && disabled ? -1 : void 0,
1755
+ ref: forwardedRef,
1756
+ ...otherProps,
1757
+ children: [
1758
+ iconPlacement === "start" && spinnerEl,
1759
+ iconPlacement === "start" && iconEl,
1760
+ /* @__PURE__ */ jsx(Slottable, { children: content }),
1761
+ iconPlacement === "end" && iconEl,
1762
+ iconPlacement === "end" && spinnerEl
1763
+ ]
1764
+ }
1765
+ );
1766
+ });
1757
1767
  const AlertDialogProviderContext = createContext(void 0);
1758
1768
  function AlertDialogProvider({ children }) {
1759
1769
  const [locale7] = useLocale();
@@ -2529,20 +2539,23 @@ const Alert = forwardRef(function Alert2({
2529
2539
  }
2530
2540
  );
2531
2541
  });
2532
- const AlertTitle = forwardRef(
2533
- function AlertTitle2({ asChild, className, ...otherProps }, forwardedRef) {
2534
- const prefix = usePrefix();
2535
- const As = asChild ? Slot : "div";
2536
- return /* @__PURE__ */ jsx(
2537
- As,
2538
- {
2539
- className: cx(prefix("alert__title"), className),
2540
- ...otherProps,
2541
- ref: forwardedRef
2542
- }
2543
- );
2544
- }
2545
- );
2542
+ const AlertTitle = forwardRef(function AlertTitle2({
2543
+ as = "div",
2544
+ asChild,
2545
+ className,
2546
+ ...otherProps
2547
+ }, forwardedRef) {
2548
+ const prefix = usePrefix();
2549
+ const As = asChild ? Slot : as;
2550
+ return /* @__PURE__ */ jsx(
2551
+ As,
2552
+ {
2553
+ className: cx(prefix("alert__title"), className),
2554
+ ...otherProps,
2555
+ ref: forwardedRef
2556
+ }
2557
+ );
2558
+ });
2546
2559
  const Code = forwardRef(function Code2({ asChild, color = "neutral", className, ...otherProps }, forwardedRef) {
2547
2560
  const prefix = usePrefix();
2548
2561
  const As = asChild ? Slot : "code";
@@ -9676,7 +9689,13 @@ const FieldGroupHeader = forwardRef(function FieldGroupHeader2({
9676
9689
  }
9677
9690
  );
9678
9691
  });
9679
- const FieldGroupTitle = forwardRef(function FieldGroupTitle2({ asChild, level = 2, id, className, ...otherProps }, forwardedRef) {
9692
+ const FieldGroupTitle = forwardRef(function FieldGroupTitle2({
9693
+ as = "div",
9694
+ asChild,
9695
+ id,
9696
+ className,
9697
+ ...otherProps
9698
+ }, forwardedRef) {
9680
9699
  const prefix = usePrefix();
9681
9700
  const generatedId = useId();
9682
9701
  const titleId = id ?? prefix(`field-group-title-${generatedId}`);
@@ -9684,7 +9703,7 @@ const FieldGroupTitle = forwardRef(function FieldGroupTitle2({ asChild, level =
9684
9703
  useEffect(() => {
9685
9704
  setTitleId(titleId);
9686
9705
  }, [setTitleId, titleId]);
9687
- const As = asChild ? Slot : `h${level}`;
9706
+ const As = asChild ? Slot : as;
9688
9707
  return /* @__PURE__ */ jsx(
9689
9708
  As,
9690
9709
  {
@@ -9775,9 +9794,9 @@ const Grid = forwardRef(function Grid2({
9775
9794
  }
9776
9795
  ) });
9777
9796
  });
9778
- const Heading = forwardRef(function Heading2({ asChild, level = 2, className, ...otherProps }, forwardedRef) {
9797
+ const Heading = forwardRef(function Heading2({ as, asChild, level = 2, className, ...otherProps }, forwardedRef) {
9779
9798
  const prefix = usePrefix();
9780
- const As = asChild ? Slot : `h${level}`;
9799
+ const As = asChild ? Slot : as ?? `h${level}`;
9781
9800
  return /* @__PURE__ */ jsx(
9782
9801
  As,
9783
9802
  {
@@ -9818,7 +9837,9 @@ const Keyboard = forwardRef(
9818
9837
  }
9819
9838
  );
9820
9839
  const Link = forwardRef(function Link2({
9840
+ as = "a",
9821
9841
  asChild,
9842
+ type,
9822
9843
  color,
9823
9844
  variant,
9824
9845
  external,
@@ -9832,18 +9853,20 @@ const Link = forwardRef(function Link2({
9832
9853
  const { defaultColor, defaultVariant } = useLinkContext();
9833
9854
  color ??= defaultColor;
9834
9855
  variant ??= defaultVariant;
9835
- const As = asChild ? Slot : "a";
9856
+ const isLink = as === "a" && !asChild;
9857
+ const As = asChild ? Slot : as;
9836
9858
  return /* @__PURE__ */ jsxs(
9837
9859
  As,
9838
9860
  {
9861
+ type: type ?? (as === "button" ? "button" : void 0),
9839
9862
  className: cx(
9840
9863
  prefix("link"),
9841
9864
  variant !== "default" && prefix(`link--${variant}`),
9842
9865
  className
9843
9866
  ),
9844
9867
  "data-accent": color,
9845
- target: external ? "_blank" : void 0,
9846
- rel: external ? "noopener noreferrer" : void 0,
9868
+ target: isLink && external ? "_blank" : void 0,
9869
+ rel: isLink && external ? "noopener noreferrer" : void 0,
9847
9870
  ...otherProps,
9848
9871
  ref: forwardedRef,
9849
9872
  children: [