@uniformdev/design-system 20.73.1-alpha.13 → 20.74.2-alpha.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.
package/dist/esm/index.js CHANGED
@@ -3034,13 +3034,13 @@ var ToastEntry = ({ toast: entry }) => {
3034
3034
  const duration = (_a = entry.timeout) != null ? _a : defaultTimeoutMs;
3035
3035
  const showCountdown = duration > 0 && entry.type !== "loading" && (data == null ? void 0 : data.kind) !== "progress";
3036
3036
  if ((data == null ? void 0 : data.kind) === "progress") {
3037
- return /* @__PURE__ */ jsxs6(BaseToast.Root, { toast: entry, css: toastRootStyles, children: [
3037
+ return /* @__PURE__ */ jsxs6(BaseToast.Root, { toast: entry, css: toastRootStyles, "data-testid": "toast", children: [
3038
3038
  /* @__PURE__ */ jsx14("div", { css: toastBodyStyles, "data-testid": "toast-body", children: /* @__PURE__ */ jsx14(BaseToast.Description, { css: toastDescriptionStyles, children: data.label }) }),
3039
3039
  /* @__PURE__ */ jsx14(Progress.Root, { value: Math.max(0, Math.min(1, data.progress)) * 100, css: toastProgressRootStyles, children: /* @__PURE__ */ jsx14(Progress.Track, { css: toastProgressTrackStyles, children: /* @__PURE__ */ jsx14(Progress.Indicator, { css: toastProgressIndicatorStyles }) }) })
3040
3040
  ] });
3041
3041
  }
3042
3042
  if ((data == null ? void 0 : data.kind) === "undoable") {
3043
- return /* @__PURE__ */ jsxs6(BaseToast.Root, { toast: entry, css: toastRootStyles, children: [
3043
+ return /* @__PURE__ */ jsxs6(BaseToast.Root, { toast: entry, css: toastRootStyles, "data-testid": "toast", children: [
3044
3044
  /* @__PURE__ */ jsx14(ToastTypeIcon, { type: entry.type }),
3045
3045
  /* @__PURE__ */ jsxs6("div", { css: toastBodyStyles, "data-testid": "toast-body", children: [
3046
3046
  /* @__PURE__ */ jsx14(BaseToast.Description, { css: toastDescriptionStyles, children: data.description }),
@@ -3049,6 +3049,7 @@ var ToastEntry = ({ toast: entry }) => {
3049
3049
  {
3050
3050
  type: "button",
3051
3051
  css: toastUndoButtonStyles,
3052
+ "data-testid": "toast-undo-button",
3052
3053
  onClick: () => {
3053
3054
  data.onUndo();
3054
3055
  toastManager.close(entry.id);
@@ -3057,14 +3058,14 @@ var ToastEntry = ({ toast: entry }) => {
3057
3058
  }
3058
3059
  )
3059
3060
  ] }),
3060
- /* @__PURE__ */ jsx14(BaseToast.Close, { css: toastCloseButtonStyles, "aria-label": "Close", children: /* @__PURE__ */ jsx14(Icon, { icon: CgClose, size: "1rem", iconColor: "currentColor" }) }),
3061
+ /* @__PURE__ */ jsx14(BaseToast.Close, { css: toastCloseButtonStyles, "aria-label": "Close", "data-testid": "toast-close-button", children: /* @__PURE__ */ jsx14(Icon, { icon: CgClose, size: "1rem", iconColor: "currentColor" }) }),
3061
3062
  showCountdown ? /* @__PURE__ */ jsx14(ToastCountdownBar, { duration }) : null
3062
3063
  ] });
3063
3064
  }
3064
- return /* @__PURE__ */ jsxs6(BaseToast.Root, { toast: entry, css: toastRootStyles, children: [
3065
+ return /* @__PURE__ */ jsxs6(BaseToast.Root, { toast: entry, css: toastRootStyles, "data-testid": "toast", children: [
3065
3066
  /* @__PURE__ */ jsx14(ToastTypeIcon, { type: entry.type }),
3066
3067
  /* @__PURE__ */ jsx14("div", { css: toastBodyStyles, "data-testid": "toast-body", children: /* @__PURE__ */ jsx14(BaseToast.Description, { css: toastDescriptionStyles, children: entry.description }) }),
3067
- /* @__PURE__ */ jsx14(BaseToast.Close, { css: toastCloseButtonStyles, "aria-label": "Close", children: /* @__PURE__ */ jsx14(Icon, { icon: CgClose, size: "1rem", iconColor: "currentColor" }) }),
3068
+ /* @__PURE__ */ jsx14(BaseToast.Close, { css: toastCloseButtonStyles, "aria-label": "Close", "data-testid": "toast-close-button", children: /* @__PURE__ */ jsx14(Icon, { icon: CgClose, size: "1rem", iconColor: "currentColor" }) }),
3068
3069
  showCountdown ? /* @__PURE__ */ jsx14(ToastCountdownBar, { duration }) : null
3069
3070
  ] });
3070
3071
  };
@@ -5729,11 +5730,6 @@ function fieldsetContainer(invert) {
5729
5730
  border: 1px solid var(--gray-300);
5730
5731
 
5731
5732
  padding: var(--spacing-base);
5732
-
5733
- // auto apply margins to child elements
5734
- > *:not(legend) {
5735
- margin-top: var(--spacing-base);
5736
- }
5737
5733
  `;
5738
5734
  return invert ? [
5739
5735
  css33`
@@ -5757,16 +5753,24 @@ var fieldsetLegend = css33`
5757
5753
  margin-bottom: var(--spacing-base);
5758
5754
  float: left; // allows the legend to be inside the fieldset and not sat on the border line
5759
5755
  `;
5756
+ var fieldsetAction = css33`
5757
+ float: right;
5758
+ margin-bottom: var(--spacing-base);
5759
+ margin-left: var(--spacing-sm);
5760
+ `;
5760
5761
  var fieldsetBody = css33`
5761
- clear: left;
5762
+ // Clears both so an actionButton floated right cannot spill into the fields.
5763
+ clear: both;
5764
+ margin-top: var(--spacing-base);
5762
5765
  `;
5763
5766
 
5764
5767
  // src/components/Input/Fieldset.tsx
5765
5768
  import { jsx as jsx37, jsxs as jsxs24 } from "@emotion/react/jsx-runtime";
5766
5769
  var Fieldset = React10.forwardRef(
5767
- ({ legend, disabled: disabled2, children, invert, ...props }, ref) => {
5770
+ ({ legend, disabled: disabled2, children, invert, actionButton, ...props }, ref) => {
5768
5771
  return /* @__PURE__ */ jsxs24("fieldset", { css: fieldsetContainer(Boolean(invert)), ref, disabled: disabled2, ...props, children: [
5769
5772
  legend,
5773
+ actionButton ? /* @__PURE__ */ jsx37("div", { css: fieldsetAction, children: actionButton }) : null,
5770
5774
  /* @__PURE__ */ jsx37("div", { css: fieldsetBody, children })
5771
5775
  ] });
5772
5776
  }
@@ -7701,18 +7705,38 @@ var Link = React13.forwardRef(
7701
7705
  );
7702
7706
  Link.displayName = "Link";
7703
7707
  var LinkWithRef = React13.forwardRef(
7704
- ({ linkManagerComponent: LinkManager, href, as, onClick, linkColor = "default", children, text, ...props }, ref) => /* @__PURE__ */ jsx55(
7705
- LinkManager,
7706
- {
7707
- ...props,
7708
- as,
7709
- href,
7710
- ref,
7711
- css: [link, textColor[linkColor]],
7712
- onClick,
7713
- children: text != null ? text : children
7714
- }
7715
- )
7708
+ ({
7709
+ linkManagerComponent: LinkManager,
7710
+ href,
7711
+ as,
7712
+ onClick,
7713
+ external,
7714
+ linkColor = "default",
7715
+ children,
7716
+ text,
7717
+ ...props
7718
+ }, ref) => {
7719
+ const externalAttrs = external ? {
7720
+ target: "_blank",
7721
+ rel: "noreferrer noopener"
7722
+ } : {};
7723
+ return /* @__PURE__ */ jsxs37(
7724
+ LinkManager,
7725
+ {
7726
+ ...props,
7727
+ ...externalAttrs,
7728
+ as,
7729
+ href,
7730
+ ref,
7731
+ css: [link, textColor[linkColor]],
7732
+ onClick,
7733
+ children: [
7734
+ text != null ? text : children,
7735
+ external ? /* @__PURE__ */ jsx55(Icon, { icon: CgExternal, iconColor: "currentColor", size: 20 }) : null
7736
+ ]
7737
+ }
7738
+ );
7739
+ }
7716
7740
  );
7717
7741
  LinkWithRef.displayName = "LinkWithRef";
7718
7742
 
@@ -11045,9 +11069,11 @@ var IntegrationModalHeader = ({ icon, name, menu, children }) => {
11045
11069
 
11046
11070
  // src/components/JsonEditor/JsonEditor.tsx
11047
11071
  import MonacoEditor from "@monaco-editor/react";
11072
+ import * as React19 from "react";
11048
11073
  import { jsx as jsx94 } from "@emotion/react/jsx-runtime";
11049
11074
  var minEditorHeightPx = 150;
11050
11075
  var JsonEditor = ({ defaultValue, onChange, jsonSchema, height, readOnly }) => {
11076
+ const modelPath = `${React19.useId()}.json`;
11051
11077
  let effectiveHeight = height;
11052
11078
  if (typeof height === "number" && height < 0) {
11053
11079
  effectiveHeight = typeof window === "undefined" ? "100%" : window.innerHeight + height;
@@ -11060,6 +11086,7 @@ var JsonEditor = ({ defaultValue, onChange, jsonSchema, height, readOnly }) => {
11060
11086
  {
11061
11087
  height: effectiveHeight,
11062
11088
  className: "uniform-json-editor",
11089
+ path: modelPath,
11063
11090
  defaultLanguage: "json",
11064
11091
  defaultValue,
11065
11092
  options: {
@@ -12930,7 +12957,7 @@ var LoadingIndicator = ({ size = "lg", color = "gray", ...props }) => {
12930
12957
 
12931
12958
  // src/components/Modal/Modal.tsx
12932
12959
  import { CgClose as CgClose6 } from "@react-icons/all-files/cg/CgClose";
12933
- import React19, { useCallback as useCallback11, useEffect as useEffect17, useRef as useRef11, useState as useState21 } from "react";
12960
+ import React20, { useCallback as useCallback11, useEffect as useEffect17, useRef as useRef11, useState as useState21 } from "react";
12934
12961
 
12935
12962
  // src/components/Modal/Modal.styles.ts
12936
12963
  import { css as css83 } from "@emotion/react";
@@ -13025,7 +13052,7 @@ var modalDialogInnerStyles = css83`
13025
13052
  import { jsx as jsx109, jsxs as jsxs75 } from "@emotion/react/jsx-runtime";
13026
13053
  var defaultModalWidth = "75rem";
13027
13054
  var defaultModalHeight = "51rem";
13028
- var Modal = React19.forwardRef(
13055
+ var Modal = React20.forwardRef(
13029
13056
  ({
13030
13057
  header: header2,
13031
13058
  children,
@@ -14033,7 +14060,7 @@ var ObjectListSubText2 = ({ children, ...props }) => {
14033
14060
  };
14034
14061
 
14035
14062
  // src/components/Pagination/Pagination.tsx
14036
- import * as React20 from "react";
14063
+ import * as React21 from "react";
14037
14064
  import Paginate from "react-paginate";
14038
14065
 
14039
14066
  // src/components/Pagination/Pagination.styles.ts
@@ -14169,7 +14196,7 @@ function Pagination({
14169
14196
  total,
14170
14197
  onPageChange
14171
14198
  }) {
14172
- const containerRef = React20.useRef(null);
14199
+ const containerRef = React21.useRef(null);
14173
14200
  const pageCount = limit >= 1 ? Math.ceil(total / limit) : 0;
14174
14201
  const currentPage = limit >= 1 ? Math.ceil(offset / limit) : 0;
14175
14202
  const { marginPagesDisplayed, pageRangeDisplayed } = usePaginationDisplayRange(containerRef, pageCount);
@@ -14286,7 +14313,7 @@ var LabelLeadingIcon = ({
14286
14313
  };
14287
14314
 
14288
14315
  // src/components/ParameterInputs/ParameterActionButton.tsx
14289
- import React21 from "react";
14316
+ import React22 from "react";
14290
14317
 
14291
14318
  // src/components/ParameterInputs/styles/ParameterActionButton.styles.ts
14292
14319
  import { css as css94 } from "@emotion/react";
@@ -14390,7 +14417,7 @@ var ParameterActionButton = ({
14390
14417
  children
14391
14418
  }
14392
14419
  );
14393
- if (tooltip && (typeof tooltip === "string" || React21.isValidElement(tooltip))) {
14420
+ if (tooltip && (typeof tooltip === "string" || React22.isValidElement(tooltip))) {
14394
14421
  return /* @__PURE__ */ jsx125(Tooltip, { title: tooltip, ...tooltipProps, children: buttonElement });
14395
14422
  }
14396
14423
  return buttonElement;
@@ -20266,7 +20293,7 @@ function StackedModalProvider({ children, totalSteps, initialStep }) {
20266
20293
  }
20267
20294
 
20268
20295
  // src/components/StackedModal/StackedModal.tsx
20269
- import React25 from "react";
20296
+ import React26 from "react";
20270
20297
 
20271
20298
  // src/components/StackedModal/styles/StackedModal.styles.ts
20272
20299
  import { css as css115, keyframes as keyframes7 } from "@emotion/react";
@@ -20448,18 +20475,18 @@ function StackedModalStep({ children, buttonGroup }) {
20448
20475
  // src/components/StackedModal/StackedModal.tsx
20449
20476
  import { jsx as jsx158 } from "@emotion/react/jsx-runtime";
20450
20477
  function filterSteps(children) {
20451
- return React25.Children.toArray(children).filter(
20452
- (child) => React25.isValidElement(child) && child.type === StackedModalStep
20478
+ return React26.Children.toArray(children).filter(
20479
+ (child) => React26.isValidElement(child) && child.type === StackedModalStep
20453
20480
  );
20454
20481
  }
20455
- var StackedModal = React25.forwardRef(
20482
+ var StackedModal = React26.forwardRef(
20456
20483
  ({ children, initialStep = 0, ...rest }, ref) => {
20457
20484
  const steps = filterSteps(children);
20458
20485
  return /* @__PURE__ */ jsx158(StackedModalProvider, { totalSteps: steps.length, initialStep, children: /* @__PURE__ */ jsx158(StackedModalInner, { ref, steps, ...rest }) });
20459
20486
  }
20460
20487
  );
20461
20488
  StackedModal.displayName = "StackedModal";
20462
- var StackedModalInner = React25.forwardRef(
20489
+ var StackedModalInner = React26.forwardRef(
20463
20490
  ({ steps, onRequestClose, modalSize = "lg", width, height, "data-testid": dataTestId }, ref) => {
20464
20491
  return /* @__PURE__ */ jsx158("div", { css: stackedModalRootStyles, children: /* @__PURE__ */ jsx158(
20465
20492
  Modal,
@@ -20763,39 +20790,39 @@ var ResponsiveTableContainer = ({ children }) => {
20763
20790
  };
20764
20791
 
20765
20792
  // src/components/Table/Table.tsx
20766
- import * as React26 from "react";
20793
+ import * as React27 from "react";
20767
20794
  import { jsx as jsx162 } from "@emotion/react/jsx-runtime";
20768
- var Table = React26.forwardRef(
20795
+ var Table = React27.forwardRef(
20769
20796
  ({ children, cellPadding, ...otherProps }, ref) => {
20770
20797
  return /* @__PURE__ */ jsx162("table", { ref, css: table({ cellPadding }), ...otherProps, children });
20771
20798
  }
20772
20799
  );
20773
- var TableHead = React26.forwardRef(
20800
+ var TableHead = React27.forwardRef(
20774
20801
  ({ children, ...otherProps }, ref) => {
20775
20802
  return /* @__PURE__ */ jsx162("thead", { ref, css: tableHead, ...otherProps, children });
20776
20803
  }
20777
20804
  );
20778
- var TableBody = React26.forwardRef(
20805
+ var TableBody = React27.forwardRef(
20779
20806
  ({ children, ...otherProps }, ref) => {
20780
20807
  return /* @__PURE__ */ jsx162("tbody", { ref, ...otherProps, children });
20781
20808
  }
20782
20809
  );
20783
- var TableFoot = React26.forwardRef(
20810
+ var TableFoot = React27.forwardRef(
20784
20811
  ({ children, ...otherProps }, ref) => {
20785
20812
  return /* @__PURE__ */ jsx162("tfoot", { ref, ...otherProps, children });
20786
20813
  }
20787
20814
  );
20788
- var TableRow = React26.forwardRef(
20815
+ var TableRow = React27.forwardRef(
20789
20816
  ({ children, ...otherProps }, ref) => {
20790
20817
  return /* @__PURE__ */ jsx162("tr", { ref, css: tableRow, ...otherProps, children });
20791
20818
  }
20792
20819
  );
20793
- var TableCellHead = React26.forwardRef(
20820
+ var TableCellHead = React27.forwardRef(
20794
20821
  ({ children, ...otherProps }, ref) => {
20795
20822
  return /* @__PURE__ */ jsx162("th", { ref, css: tableCellHead, ...otherProps, children });
20796
20823
  }
20797
20824
  );
20798
- var TableCellData = React26.forwardRef(
20825
+ var TableCellData = React27.forwardRef(
20799
20826
  ({ children, ...otherProps }, ref) => {
20800
20827
  return /* @__PURE__ */ jsx162("td", { ref, ...otherProps, children });
20801
20828
  }
package/dist/index.d.mts CHANGED
@@ -2252,6 +2252,11 @@ type FieldsetProps = React$1.HTMLAttributes<HTMLFieldSetElement> & {
2252
2252
  legend: React$1.ReactElement;
2253
2253
  /** sets the disabled value and sets child inputs disabled */
2254
2254
  disabled?: boolean;
2255
+ /**
2256
+ * Optional control rendered on the legend's row, aligned to the right edge. Use it for an action that
2257
+ * applies to the group as a whole (remove, reset). Give it an accessible name: it sits inside the
2258
+ * fieldset, so it is also disabled along with the fields when `disabled` is set.
2259
+ */
2255
2260
  actionButton?: React$1.ReactElement;
2256
2261
  children: React$1.ReactNode;
2257
2262
  /** Inverts the background to white for use on forms that already have a gray background */
@@ -2263,6 +2268,11 @@ declare const Fieldset: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes
2263
2268
  legend: React$1.ReactElement;
2264
2269
  /** sets the disabled value and sets child inputs disabled */
2265
2270
  disabled?: boolean;
2271
+ /**
2272
+ * Optional control rendered on the legend's row, aligned to the right edge. Use it for an action that
2273
+ * applies to the group as a whole (remove, reset). Give it an accessible name: it sits inside the
2274
+ * fieldset, so it is also disabled along with the fields when `disabled` is set.
2275
+ */
2266
2276
  actionButton?: React$1.ReactElement;
2267
2277
  children: React$1.ReactNode;
2268
2278
  /** Inverts the background to white for use on forms that already have a gray background */
package/dist/index.d.ts CHANGED
@@ -2252,6 +2252,11 @@ type FieldsetProps = React$1.HTMLAttributes<HTMLFieldSetElement> & {
2252
2252
  legend: React$1.ReactElement;
2253
2253
  /** sets the disabled value and sets child inputs disabled */
2254
2254
  disabled?: boolean;
2255
+ /**
2256
+ * Optional control rendered on the legend's row, aligned to the right edge. Use it for an action that
2257
+ * applies to the group as a whole (remove, reset). Give it an accessible name: it sits inside the
2258
+ * fieldset, so it is also disabled along with the fields when `disabled` is set.
2259
+ */
2255
2260
  actionButton?: React$1.ReactElement;
2256
2261
  children: React$1.ReactNode;
2257
2262
  /** Inverts the background to white for use on forms that already have a gray background */
@@ -2263,6 +2268,11 @@ declare const Fieldset: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes
2263
2268
  legend: React$1.ReactElement;
2264
2269
  /** sets the disabled value and sets child inputs disabled */
2265
2270
  disabled?: boolean;
2271
+ /**
2272
+ * Optional control rendered on the legend's row, aligned to the right edge. Use it for an action that
2273
+ * applies to the group as a whole (remove, reset). Give it an accessible name: it sits inside the
2274
+ * fieldset, so it is also disabled along with the fields when `disabled` is set.
2275
+ */
2266
2276
  actionButton?: React$1.ReactElement;
2267
2277
  children: React$1.ReactNode;
2268
2278
  /** Inverts the background to white for use on forms that already have a gray background */
package/dist/index.js CHANGED
@@ -4795,13 +4795,13 @@ var ToastEntry = ({ toast: entry }) => {
4795
4795
  const duration = (_a = entry.timeout) != null ? _a : defaultTimeoutMs;
4796
4796
  const showCountdown = duration > 0 && entry.type !== "loading" && (data == null ? void 0 : data.kind) !== "progress";
4797
4797
  if ((data == null ? void 0 : data.kind) === "progress") {
4798
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_toast.Toast.Root, { toast: entry, css: toastRootStyles, children: [
4798
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_toast.Toast.Root, { toast: entry, css: toastRootStyles, "data-testid": "toast", children: [
4799
4799
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { css: toastBodyStyles, "data-testid": "toast-body", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_toast.Toast.Description, { css: toastDescriptionStyles, children: data.label }) }),
4800
4800
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_progress.Progress.Root, { value: Math.max(0, Math.min(1, data.progress)) * 100, css: toastProgressRootStyles, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_progress.Progress.Track, { css: toastProgressTrackStyles, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_progress.Progress.Indicator, { css: toastProgressIndicatorStyles }) }) })
4801
4801
  ] });
4802
4802
  }
4803
4803
  if ((data == null ? void 0 : data.kind) === "undoable") {
4804
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_toast.Toast.Root, { toast: entry, css: toastRootStyles, children: [
4804
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_toast.Toast.Root, { toast: entry, css: toastRootStyles, "data-testid": "toast", children: [
4805
4805
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ToastTypeIcon, { type: entry.type }),
4806
4806
  /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { css: toastBodyStyles, "data-testid": "toast-body", children: [
4807
4807
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_toast.Toast.Description, { css: toastDescriptionStyles, children: data.description }),
@@ -4810,6 +4810,7 @@ var ToastEntry = ({ toast: entry }) => {
4810
4810
  {
4811
4811
  type: "button",
4812
4812
  css: toastUndoButtonStyles,
4813
+ "data-testid": "toast-undo-button",
4813
4814
  onClick: () => {
4814
4815
  data.onUndo();
4815
4816
  toastManager.close(entry.id);
@@ -4818,14 +4819,14 @@ var ToastEntry = ({ toast: entry }) => {
4818
4819
  }
4819
4820
  )
4820
4821
  ] }),
4821
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_toast.Toast.Close, { css: toastCloseButtonStyles, "aria-label": "Close", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon, { icon: import_CgClose2.CgClose, size: "1rem", iconColor: "currentColor" }) }),
4822
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_toast.Toast.Close, { css: toastCloseButtonStyles, "aria-label": "Close", "data-testid": "toast-close-button", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon, { icon: import_CgClose2.CgClose, size: "1rem", iconColor: "currentColor" }) }),
4822
4823
  showCountdown ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ToastCountdownBar, { duration }) : null
4823
4824
  ] });
4824
4825
  }
4825
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_toast.Toast.Root, { toast: entry, css: toastRootStyles, children: [
4826
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_toast.Toast.Root, { toast: entry, css: toastRootStyles, "data-testid": "toast", children: [
4826
4827
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ToastTypeIcon, { type: entry.type }),
4827
4828
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { css: toastBodyStyles, "data-testid": "toast-body", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_toast.Toast.Description, { css: toastDescriptionStyles, children: entry.description }) }),
4828
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_toast.Toast.Close, { css: toastCloseButtonStyles, "aria-label": "Close", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon, { icon: import_CgClose2.CgClose, size: "1rem", iconColor: "currentColor" }) }),
4829
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_toast.Toast.Close, { css: toastCloseButtonStyles, "aria-label": "Close", "data-testid": "toast-close-button", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon, { icon: import_CgClose2.CgClose, size: "1rem", iconColor: "currentColor" }) }),
4829
4830
  showCountdown ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ToastCountdownBar, { duration }) : null
4830
4831
  ] });
4831
4832
  };
@@ -7558,11 +7559,6 @@ function fieldsetContainer(invert) {
7558
7559
  border: 1px solid var(--gray-300);
7559
7560
 
7560
7561
  padding: var(--spacing-base);
7561
-
7562
- // auto apply margins to child elements
7563
- > *:not(legend) {
7564
- margin-top: var(--spacing-base);
7565
- }
7566
7562
  `;
7567
7563
  return invert ? [
7568
7564
  import_react48.css`
@@ -7586,16 +7582,24 @@ var fieldsetLegend = import_react48.css`
7586
7582
  margin-bottom: var(--spacing-base);
7587
7583
  float: left; // allows the legend to be inside the fieldset and not sat on the border line
7588
7584
  `;
7585
+ var fieldsetAction = import_react48.css`
7586
+ float: right;
7587
+ margin-bottom: var(--spacing-base);
7588
+ margin-left: var(--spacing-sm);
7589
+ `;
7589
7590
  var fieldsetBody = import_react48.css`
7590
- clear: left;
7591
+ // Clears both so an actionButton floated right cannot spill into the fields.
7592
+ clear: both;
7593
+ margin-top: var(--spacing-base);
7591
7594
  `;
7592
7595
 
7593
7596
  // src/components/Input/Fieldset.tsx
7594
7597
  var import_jsx_runtime37 = require("@emotion/react/jsx-runtime");
7595
7598
  var Fieldset = React10.forwardRef(
7596
- ({ legend, disabled: disabled2, children, invert, ...props }, ref) => {
7599
+ ({ legend, disabled: disabled2, children, invert, actionButton, ...props }, ref) => {
7597
7600
  return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("fieldset", { css: fieldsetContainer(Boolean(invert)), ref, disabled: disabled2, ...props, children: [
7598
7601
  legend,
7602
+ actionButton ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { css: fieldsetAction, children: actionButton }) : null,
7599
7603
  /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { css: fieldsetBody, children })
7600
7604
  ] });
7601
7605
  }
@@ -9546,18 +9550,38 @@ var Link = React13.forwardRef(
9546
9550
  );
9547
9551
  Link.displayName = "Link";
9548
9552
  var LinkWithRef = React13.forwardRef(
9549
- ({ linkManagerComponent: LinkManager, href, as, onClick, linkColor = "default", children, text, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
9550
- LinkManager,
9551
- {
9552
- ...props,
9553
- as,
9554
- href,
9555
- ref,
9556
- css: [link, textColor[linkColor]],
9557
- onClick,
9558
- children: text != null ? text : children
9559
- }
9560
- )
9553
+ ({
9554
+ linkManagerComponent: LinkManager,
9555
+ href,
9556
+ as,
9557
+ onClick,
9558
+ external,
9559
+ linkColor = "default",
9560
+ children,
9561
+ text,
9562
+ ...props
9563
+ }, ref) => {
9564
+ const externalAttrs = external ? {
9565
+ target: "_blank",
9566
+ rel: "noreferrer noopener"
9567
+ } : {};
9568
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
9569
+ LinkManager,
9570
+ {
9571
+ ...props,
9572
+ ...externalAttrs,
9573
+ as,
9574
+ href,
9575
+ ref,
9576
+ css: [link, textColor[linkColor]],
9577
+ onClick,
9578
+ children: [
9579
+ text != null ? text : children,
9580
+ external ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Icon, { icon: import_CgExternal2.CgExternal, iconColor: "currentColor", size: 20 }) : null
9581
+ ]
9582
+ }
9583
+ );
9584
+ }
9561
9585
  );
9562
9586
  LinkWithRef.displayName = "LinkWithRef";
9563
9587
 
@@ -12995,9 +13019,11 @@ var IntegrationModalHeader = ({ icon, name, menu, children }) => {
12995
13019
  // src/components/JsonEditor/JsonEditor.tsx
12996
13020
  init_emotion_jsx_shim();
12997
13021
  var import_react112 = __toESM(require("@monaco-editor/react"));
13022
+ var React19 = __toESM(require("react"));
12998
13023
  var import_jsx_runtime94 = require("@emotion/react/jsx-runtime");
12999
13024
  var minEditorHeightPx = 150;
13000
13025
  var JsonEditor = ({ defaultValue, onChange, jsonSchema, height, readOnly }) => {
13026
+ const modelPath = `${React19.useId()}.json`;
13001
13027
  let effectiveHeight = height;
13002
13028
  if (typeof height === "number" && height < 0) {
13003
13029
  effectiveHeight = typeof window === "undefined" ? "100%" : window.innerHeight + height;
@@ -13010,6 +13036,7 @@ var JsonEditor = ({ defaultValue, onChange, jsonSchema, height, readOnly }) => {
13010
13036
  {
13011
13037
  height: effectiveHeight,
13012
13038
  className: "uniform-json-editor",
13039
+ path: modelPath,
13013
13040
  defaultLanguage: "json",
13014
13041
  defaultValue,
13015
13042
  options: {
@@ -16027,7 +16054,7 @@ var ObjectListSubText2 = ({ children, ...props }) => {
16027
16054
 
16028
16055
  // src/components/Pagination/Pagination.tsx
16029
16056
  init_emotion_jsx_shim();
16030
- var React20 = __toESM(require("react"));
16057
+ var React21 = __toESM(require("react"));
16031
16058
  var import_react_paginate = __toESM(require("react-paginate"));
16032
16059
 
16033
16060
  // src/components/Pagination/Pagination.styles.ts
@@ -16165,7 +16192,7 @@ function Pagination({
16165
16192
  total,
16166
16193
  onPageChange
16167
16194
  }) {
16168
- const containerRef = React20.useRef(null);
16195
+ const containerRef = React21.useRef(null);
16169
16196
  const pageCount = limit >= 1 ? Math.ceil(total / limit) : 0;
16170
16197
  const currentPage = limit >= 1 ? Math.ceil(offset / limit) : 0;
16171
16198
  const { marginPagesDisplayed, pageRangeDisplayed } = usePaginationDisplayRange(containerRef, pageCount);
@@ -22766,39 +22793,39 @@ var ResponsiveTableContainer = ({ children }) => {
22766
22793
 
22767
22794
  // src/components/Table/Table.tsx
22768
22795
  init_emotion_jsx_shim();
22769
- var React26 = __toESM(require("react"));
22796
+ var React27 = __toESM(require("react"));
22770
22797
  var import_jsx_runtime162 = require("@emotion/react/jsx-runtime");
22771
- var Table = React26.forwardRef(
22798
+ var Table = React27.forwardRef(
22772
22799
  ({ children, cellPadding, ...otherProps }, ref) => {
22773
22800
  return /* @__PURE__ */ (0, import_jsx_runtime162.jsx)("table", { ref, css: table({ cellPadding }), ...otherProps, children });
22774
22801
  }
22775
22802
  );
22776
- var TableHead = React26.forwardRef(
22803
+ var TableHead = React27.forwardRef(
22777
22804
  ({ children, ...otherProps }, ref) => {
22778
22805
  return /* @__PURE__ */ (0, import_jsx_runtime162.jsx)("thead", { ref, css: tableHead, ...otherProps, children });
22779
22806
  }
22780
22807
  );
22781
- var TableBody = React26.forwardRef(
22808
+ var TableBody = React27.forwardRef(
22782
22809
  ({ children, ...otherProps }, ref) => {
22783
22810
  return /* @__PURE__ */ (0, import_jsx_runtime162.jsx)("tbody", { ref, ...otherProps, children });
22784
22811
  }
22785
22812
  );
22786
- var TableFoot = React26.forwardRef(
22813
+ var TableFoot = React27.forwardRef(
22787
22814
  ({ children, ...otherProps }, ref) => {
22788
22815
  return /* @__PURE__ */ (0, import_jsx_runtime162.jsx)("tfoot", { ref, ...otherProps, children });
22789
22816
  }
22790
22817
  );
22791
- var TableRow = React26.forwardRef(
22818
+ var TableRow = React27.forwardRef(
22792
22819
  ({ children, ...otherProps }, ref) => {
22793
22820
  return /* @__PURE__ */ (0, import_jsx_runtime162.jsx)("tr", { ref, css: tableRow, ...otherProps, children });
22794
22821
  }
22795
22822
  );
22796
- var TableCellHead = React26.forwardRef(
22823
+ var TableCellHead = React27.forwardRef(
22797
22824
  ({ children, ...otherProps }, ref) => {
22798
22825
  return /* @__PURE__ */ (0, import_jsx_runtime162.jsx)("th", { ref, css: tableCellHead, ...otherProps, children });
22799
22826
  }
22800
22827
  );
22801
- var TableCellData = React26.forwardRef(
22828
+ var TableCellData = React27.forwardRef(
22802
22829
  ({ children, ...otherProps }, ref) => {
22803
22830
  return /* @__PURE__ */ (0, import_jsx_runtime162.jsx)("td", { ref, ...otherProps, children });
22804
22831
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniformdev/design-system",
3
- "version": "20.73.1-alpha.13+1ef8c4abf6",
3
+ "version": "20.74.2-alpha.26+464c3f6dc2",
4
4
  "description": "Uniform design system components",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "exports": {
@@ -34,8 +34,8 @@
34
34
  "@storybook/react-vite": "10.4.6",
35
35
  "@types/react": "19.2.17",
36
36
  "@types/react-dom": "19.2.3",
37
- "@uniformdev/canvas": "^20.73.1-alpha.13+1ef8c4abf6",
38
- "@uniformdev/richtext": "^20.73.1-alpha.13+1ef8c4abf6",
37
+ "@uniformdev/canvas": "^20.74.2-alpha.26+464c3f6dc2",
38
+ "@uniformdev/richtext": "^20.74.2-alpha.26+464c3f6dc2",
39
39
  "autoprefixer": "10.5.0",
40
40
  "hygen": "6.2.11",
41
41
  "jsdom": "29.1.1",
@@ -82,5 +82,5 @@
82
82
  "publishConfig": {
83
83
  "access": "public"
84
84
  },
85
- "gitHead": "1ef8c4abf6483807fd16f7fdb684411f9a303e93"
85
+ "gitHead": "464c3f6dc27746f5e89e2f61542ed2c458c35cc5"
86
86
  }