@trackunit/react-components 0.1.289 → 0.1.291

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/index.cjs.js CHANGED
@@ -12,6 +12,7 @@ var IconSpriteOutline = require('@trackunit/ui-icons/icons-sprite-outline.svg');
12
12
  var IconSpriteSolid = require('@trackunit/ui-icons/icons-sprite-solid.svg');
13
13
  var stringTs = require('string-ts');
14
14
  var cssClassVarianceUtilities = require('@trackunit/css-class-variance-utilities');
15
+ var reactSlot = require('@radix-ui/react-slot');
15
16
  var reactUse = require('react-use');
16
17
  var reactDayPicker = require('react-day-picker');
17
18
  var tailwindMerge = require('tailwind-merge');
@@ -714,13 +715,18 @@ const cvaIconButton = cssClassVarianceUtilities.cvaMerge([], {
714
715
  * @returns {JSX.Element} Button component
715
716
  */
716
717
  const Button = React__namespace.forwardRef((_a, ref) => {
717
- var { onClick, children, loading, disabled, className, fullWidth = false, prefix, suffix, variant = "primary", type = "button", size = "medium", square = false, dataTestId, title, role, tabIndex, renderAs = "button", circular } = _a, rest = __rest(_a, ["onClick", "children", "loading", "disabled", "className", "fullWidth", "prefix", "suffix", "variant", "type", "size", "square", "dataTestId", "title", "role", "tabIndex", "renderAs", "circular"]);
718
- return React__namespace.createElement(renderAs, Object.assign({ ref,
718
+ var { onClick, children, loading, disabled, className, fullWidth = false, prefix, suffix, variant = "primary", type = "button", size = "medium", square = false, dataTestId, title, role, tabIndex, asChild = false, circular } = _a, rest = __rest(_a, ["onClick", "children", "loading", "disabled", "className", "fullWidth", "prefix", "suffix", "variant", "type", "size", "square", "dataTestId", "title", "role", "tabIndex", "asChild", "circular"]);
719
+ const Comp = asChild ? reactSlot.Slot : "button";
720
+ const sharedCompProps = Object.assign({ ref,
719
721
  title,
720
- type,
721
722
  role,
722
723
  onClick,
723
- tabIndex, disabled: disabled || loading, className: cvaButton({ rounded: circular, disabled, size, square, variant, loading, fullWidth, className }), "aria-label": title, "data-testid": dataTestId }, rest), jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [loading ? (jsxRuntime.jsx(Spinner, { centering: "vertically", className: cvaButtonSpinner({ variant }), containerClassName: cvaButtonSpinnerContainer(), size: "small" })) : null, prefix && !loading ? jsxRuntime.jsx("div", { className: cvaButtonPrefixSuffix({ size: size }), children: prefix }) : null, children, suffix && !loading ? jsxRuntime.jsx("div", { className: cvaButtonPrefixSuffix({ size: size }), children: suffix }) : null] }));
724
+ tabIndex, className: cvaButton({ rounded: circular, disabled, size, square, variant, loading, fullWidth, className }), "aria-label": title, "aria-disabled": disabled || loading, "data-testid": dataTestId }, rest);
725
+ const buttonSpecificProps = {
726
+ disabled: disabled || loading,
727
+ type,
728
+ };
729
+ return (jsxRuntime.jsxs(Comp, Object.assign({}, sharedCompProps, (asChild ? {} : buttonSpecificProps), { children: [loading ? (jsxRuntime.jsx(Spinner, { centering: "vertically", className: cvaButtonSpinner({ variant }), containerClassName: cvaButtonSpinnerContainer(), size: "small" })) : null, prefix && !loading ? jsxRuntime.jsx("div", { className: cvaButtonPrefixSuffix({ size: size }), children: prefix }) : null, jsxRuntime.jsx(reactSlot.Slottable, { children: children }), suffix && !loading ? jsxRuntime.jsx("div", { className: cvaButtonPrefixSuffix({ size: size }), children: suffix }) : null] })));
724
730
  });
725
731
  Button.displayName = "Button";
726
732
 
@@ -1275,7 +1281,7 @@ const SkeletonLines = React.memo(({ margin = "10px 0", lines = 1, height, width
1275
1281
  return height;
1276
1282
  };
1277
1283
  for (let i = 0; i < lines; i++) {
1278
- skeletonLines.push(jsxRuntime.jsx("div", { className: cvaSkeletonLine({ className }), "data-testid": dataTestId !== null && dataTestId !== void 0 ? dataTestId : "skeleton-lines", "data-type": "loading-skeleton-line", style: { height: getHeight(i), width: getWidth(i), margin: lines > 1 ? margin : "" }, children: lines > 1 && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "\u00A0" }) }, i));
1284
+ skeletonLines.push(jsxRuntime.jsx("div", { className: cvaSkeletonLine({ className }), "data-testid": dataTestId ? `${dataTestId}-${i}` : `skeleton-lines-${i}`, "data-type": "loading-skeleton-line", style: { height: getHeight(i), width: getWidth(i), margin: lines > 1 ? margin : "" }, children: lines > 1 && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "\u00A0" }) }, i));
1279
1285
  }
1280
1286
  // eslint-disable-next-line react/jsx-no-useless-fragment
1281
1287
  return jsxRuntime.jsx(jsxRuntime.Fragment, { children: skeletonLines });
@@ -3351,7 +3357,7 @@ const PageHeader = ({ className, dataTestId, action, showLoading, description, l
3351
3357
  return (jsxRuntime.jsxs("div", { className: cvaPageHeaderContainer({
3352
3358
  className,
3353
3359
  withBorder: !tabsList,
3354
- }), "data-testid": dataTestId, children: [jsxRuntime.jsxs("div", { className: cvaPageHeader(), children: [jsxRuntime.jsxs("div", { className: cvaPageHeaderHeadingAccessoriesContainer(), "data-testid": dataTestId ? `${dataTestId}-heading-container` : undefined, children: [jsxRuntime.jsxs("div", { className: cvaPageHeaderHeadingContainer(), children: [backTo ? (jsxRuntime.jsx(IconButton, { icon: jsxRuntime.jsx(Icon, { name: "ArrowLeft" }), renderAs: reactRouter.Link, size: "small", to: backTo, variant: "ghost-neutral" })) : undefined, jsxRuntime.jsx("h1", { className: cvaPageHeaderHeading(), "data-testid": dataTestId ? `${dataTestId}-heading` : undefined, children: title }), description && !showLoading ? (jsxRuntime.jsxs("div", { className: cvaPageHeaderDescriptionAndLinkContainer(), children: [jsxRuntime.jsx(Tooltip, { dataTestId: dataTestId ? `${dataTestId}-tooltip` : undefined, iconProps: { name: "QuestionMarkCircle" }, label: description, placement: "bottom" }), link ? (jsxRuntime.jsxs(reactRouter.Link, { className: cvaPageHeaderLink(), "data-testid": "tooltip-link", params: prev => prev, target: "_blank", to: link, children: [linkText, jsxRuntime.jsx(Icon, { name: "ArrowTopRightOnSquare", size: "small" })] })) : undefined] })) : undefined] }), tag && !showLoading ? (jsxRuntime.jsx(Tag, { color: tagColor, dataTestId: dataTestId ? `${dataTestId}-tag` : undefined, children: tag })) : undefined, showLoading ? (jsxRuntime.jsx(Spinner, { centering: "vertically", dataTestId: dataTestId ? `${dataTestId}-spinner` : undefined })) : null, action] }), children ? jsxRuntime.jsx("div", { className: cvaPageHeaderChildContainer(), children: children }) : null] }), tabsList] }));
3360
+ }), "data-testid": dataTestId, children: [jsxRuntime.jsxs("div", { className: cvaPageHeader(), children: [jsxRuntime.jsxs("div", { className: cvaPageHeaderHeadingAccessoriesContainer(), "data-testid": dataTestId ? `${dataTestId}-heading-container` : undefined, children: [jsxRuntime.jsxs("div", { className: cvaPageHeaderHeadingContainer(), children: [backTo ? (jsxRuntime.jsx(Button, { asChild: true, prefix: jsxRuntime.jsx(Icon, { name: "ArrowLeft", size: "small" }), size: "small", variant: "ghost-neutral", children: jsxRuntime.jsx(reactRouter.Link, { to: backTo }) })) : undefined, jsxRuntime.jsx("h1", { className: cvaPageHeaderHeading(), "data-testid": dataTestId ? `${dataTestId}-heading` : undefined, children: title }), description && !showLoading ? (jsxRuntime.jsxs("div", { className: cvaPageHeaderDescriptionAndLinkContainer(), children: [jsxRuntime.jsx(Tooltip, { dataTestId: dataTestId ? `${dataTestId}-tooltip` : undefined, iconProps: { name: "QuestionMarkCircle" }, label: description, placement: "bottom" }), link ? (jsxRuntime.jsxs(reactRouter.Link, { className: cvaPageHeaderLink(), "data-testid": "tooltip-link", params: prev => prev, target: "_blank", to: link, children: [linkText, jsxRuntime.jsx(Icon, { name: "ArrowTopRightOnSquare", size: "small" })] })) : undefined] })) : undefined] }), tag && !showLoading ? (jsxRuntime.jsx(Tag, { color: tagColor, dataTestId: dataTestId ? `${dataTestId}-tag` : undefined, children: tag })) : undefined, showLoading ? (jsxRuntime.jsx(Spinner, { centering: "vertically", dataTestId: dataTestId ? `${dataTestId}-spinner` : undefined })) : null, action] }), children ? jsxRuntime.jsx("div", { className: cvaPageHeaderChildContainer(), children: children }) : null] }), tabsList] }));
3355
3361
  };
3356
3362
 
3357
3363
  const cvaPagination = cssClassVarianceUtilities.cvaMerge(["flex", "items-center", "gap-1"]);
package/index.esm.js CHANGED
@@ -9,6 +9,7 @@ import IconSpriteOutline from '@trackunit/ui-icons/icons-sprite-outline.svg';
9
9
  import IconSpriteSolid from '@trackunit/ui-icons/icons-sprite-solid.svg';
10
10
  import { snakeCase } from 'string-ts';
11
11
  import { cvaMerge } from '@trackunit/css-class-variance-utilities';
12
+ import { Slottable, Slot } from '@radix-ui/react-slot';
12
13
  import { useMeasure, useCopyToClipboard, usePrevious } from 'react-use';
13
14
  import { DayPicker as DayPicker$1 } from 'react-day-picker';
14
15
  import { twMerge } from 'tailwind-merge';
@@ -683,13 +684,18 @@ const cvaIconButton = cvaMerge([], {
683
684
  * @returns {JSX.Element} Button component
684
685
  */
685
686
  const Button = React.forwardRef((_a, ref) => {
686
- var { onClick, children, loading, disabled, className, fullWidth = false, prefix, suffix, variant = "primary", type = "button", size = "medium", square = false, dataTestId, title, role, tabIndex, renderAs = "button", circular } = _a, rest = __rest(_a, ["onClick", "children", "loading", "disabled", "className", "fullWidth", "prefix", "suffix", "variant", "type", "size", "square", "dataTestId", "title", "role", "tabIndex", "renderAs", "circular"]);
687
- return React.createElement(renderAs, Object.assign({ ref,
687
+ var { onClick, children, loading, disabled, className, fullWidth = false, prefix, suffix, variant = "primary", type = "button", size = "medium", square = false, dataTestId, title, role, tabIndex, asChild = false, circular } = _a, rest = __rest(_a, ["onClick", "children", "loading", "disabled", "className", "fullWidth", "prefix", "suffix", "variant", "type", "size", "square", "dataTestId", "title", "role", "tabIndex", "asChild", "circular"]);
688
+ const Comp = asChild ? Slot : "button";
689
+ const sharedCompProps = Object.assign({ ref,
688
690
  title,
689
- type,
690
691
  role,
691
692
  onClick,
692
- tabIndex, disabled: disabled || loading, className: cvaButton({ rounded: circular, disabled, size, square, variant, loading, fullWidth, className }), "aria-label": title, "data-testid": dataTestId }, rest), jsxs(Fragment, { children: [loading ? (jsx(Spinner, { centering: "vertically", className: cvaButtonSpinner({ variant }), containerClassName: cvaButtonSpinnerContainer(), size: "small" })) : null, prefix && !loading ? jsx("div", { className: cvaButtonPrefixSuffix({ size: size }), children: prefix }) : null, children, suffix && !loading ? jsx("div", { className: cvaButtonPrefixSuffix({ size: size }), children: suffix }) : null] }));
693
+ tabIndex, className: cvaButton({ rounded: circular, disabled, size, square, variant, loading, fullWidth, className }), "aria-label": title, "aria-disabled": disabled || loading, "data-testid": dataTestId }, rest);
694
+ const buttonSpecificProps = {
695
+ disabled: disabled || loading,
696
+ type,
697
+ };
698
+ return (jsxs(Comp, Object.assign({}, sharedCompProps, (asChild ? {} : buttonSpecificProps), { children: [loading ? (jsx(Spinner, { centering: "vertically", className: cvaButtonSpinner({ variant }), containerClassName: cvaButtonSpinnerContainer(), size: "small" })) : null, prefix && !loading ? jsx("div", { className: cvaButtonPrefixSuffix({ size: size }), children: prefix }) : null, jsx(Slottable, { children: children }), suffix && !loading ? jsx("div", { className: cvaButtonPrefixSuffix({ size: size }), children: suffix }) : null] })));
693
699
  });
694
700
  Button.displayName = "Button";
695
701
 
@@ -1244,7 +1250,7 @@ const SkeletonLines = memo(({ margin = "10px 0", lines = 1, height, width = "100
1244
1250
  return height;
1245
1251
  };
1246
1252
  for (let i = 0; i < lines; i++) {
1247
- skeletonLines.push(jsx("div", { className: cvaSkeletonLine({ className }), "data-testid": dataTestId !== null && dataTestId !== void 0 ? dataTestId : "skeleton-lines", "data-type": "loading-skeleton-line", style: { height: getHeight(i), width: getWidth(i), margin: lines > 1 ? margin : "" }, children: lines > 1 && jsx(Fragment, { children: "\u00A0" }) }, i));
1253
+ skeletonLines.push(jsx("div", { className: cvaSkeletonLine({ className }), "data-testid": dataTestId ? `${dataTestId}-${i}` : `skeleton-lines-${i}`, "data-type": "loading-skeleton-line", style: { height: getHeight(i), width: getWidth(i), margin: lines > 1 ? margin : "" }, children: lines > 1 && jsx(Fragment, { children: "\u00A0" }) }, i));
1248
1254
  }
1249
1255
  // eslint-disable-next-line react/jsx-no-useless-fragment
1250
1256
  return jsx(Fragment, { children: skeletonLines });
@@ -3320,7 +3326,7 @@ const PageHeader = ({ className, dataTestId, action, showLoading, description, l
3320
3326
  return (jsxs("div", { className: cvaPageHeaderContainer({
3321
3327
  className,
3322
3328
  withBorder: !tabsList,
3323
- }), "data-testid": dataTestId, children: [jsxs("div", { className: cvaPageHeader(), children: [jsxs("div", { className: cvaPageHeaderHeadingAccessoriesContainer(), "data-testid": dataTestId ? `${dataTestId}-heading-container` : undefined, children: [jsxs("div", { className: cvaPageHeaderHeadingContainer(), children: [backTo ? (jsx(IconButton, { icon: jsx(Icon, { name: "ArrowLeft" }), renderAs: Link, size: "small", to: backTo, variant: "ghost-neutral" })) : undefined, jsx("h1", { className: cvaPageHeaderHeading(), "data-testid": dataTestId ? `${dataTestId}-heading` : undefined, children: title }), description && !showLoading ? (jsxs("div", { className: cvaPageHeaderDescriptionAndLinkContainer(), children: [jsx(Tooltip, { dataTestId: dataTestId ? `${dataTestId}-tooltip` : undefined, iconProps: { name: "QuestionMarkCircle" }, label: description, placement: "bottom" }), link ? (jsxs(Link, { className: cvaPageHeaderLink(), "data-testid": "tooltip-link", params: prev => prev, target: "_blank", to: link, children: [linkText, jsx(Icon, { name: "ArrowTopRightOnSquare", size: "small" })] })) : undefined] })) : undefined] }), tag && !showLoading ? (jsx(Tag, { color: tagColor, dataTestId: dataTestId ? `${dataTestId}-tag` : undefined, children: tag })) : undefined, showLoading ? (jsx(Spinner, { centering: "vertically", dataTestId: dataTestId ? `${dataTestId}-spinner` : undefined })) : null, action] }), children ? jsx("div", { className: cvaPageHeaderChildContainer(), children: children }) : null] }), tabsList] }));
3329
+ }), "data-testid": dataTestId, children: [jsxs("div", { className: cvaPageHeader(), children: [jsxs("div", { className: cvaPageHeaderHeadingAccessoriesContainer(), "data-testid": dataTestId ? `${dataTestId}-heading-container` : undefined, children: [jsxs("div", { className: cvaPageHeaderHeadingContainer(), children: [backTo ? (jsx(Button, { asChild: true, prefix: jsx(Icon, { name: "ArrowLeft", size: "small" }), size: "small", variant: "ghost-neutral", children: jsx(Link, { to: backTo }) })) : undefined, jsx("h1", { className: cvaPageHeaderHeading(), "data-testid": dataTestId ? `${dataTestId}-heading` : undefined, children: title }), description && !showLoading ? (jsxs("div", { className: cvaPageHeaderDescriptionAndLinkContainer(), children: [jsx(Tooltip, { dataTestId: dataTestId ? `${dataTestId}-tooltip` : undefined, iconProps: { name: "QuestionMarkCircle" }, label: description, placement: "bottom" }), link ? (jsxs(Link, { className: cvaPageHeaderLink(), "data-testid": "tooltip-link", params: prev => prev, target: "_blank", to: link, children: [linkText, jsx(Icon, { name: "ArrowTopRightOnSquare", size: "small" })] })) : undefined] })) : undefined] }), tag && !showLoading ? (jsx(Tag, { color: tagColor, dataTestId: dataTestId ? `${dataTestId}-tag` : undefined, children: tag })) : undefined, showLoading ? (jsx(Spinner, { centering: "vertically", dataTestId: dataTestId ? `${dataTestId}-spinner` : undefined })) : null, action] }), children ? jsx("div", { className: cvaPageHeaderChildContainer(), children: children }) : null] }), tabsList] }));
3324
3330
  };
3325
3331
 
3326
3332
  const cvaPagination = cvaMerge(["flex", "items-center", "gap-1"]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackunit/react-components",
3
- "version": "0.1.289",
3
+ "version": "0.1.291",
4
4
  "repository": "https://github.com/Trackunit/manager",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "engines": {
@@ -8,6 +8,7 @@
8
8
  },
9
9
  "dependencies": {
10
10
  "@trackunit/ui-design-tokens": "*",
11
+ "@radix-ui/react-slot": "^1.0.2",
11
12
  "react": "^18.2.0",
12
13
  "@trackunit/css-class-variance-utilities": "*",
13
14
  "react-use": "^17.4.0",
@@ -23,9 +23,9 @@ export interface ButtonProps extends ButtonCommonProps {
23
23
  */
24
24
  type?: ButtonType;
25
25
  /**
26
- * The element type the button will be rendered as.
26
+ * If true the button will render as the child element, and not be a button element
27
27
  */
28
- renderAs?: keyof JSX.IntrinsicElements | React.ComponentType<any>;
28
+ asChild?: boolean;
29
29
  /**
30
30
  * The Id of the form to submit, for button type submit
31
31
  */
@@ -36,10 +36,6 @@ export interface ButtonCommonProps extends CommonProps {
36
36
  * The size of the button.
37
37
  */
38
38
  size?: Size;
39
- /**
40
- * The link to be used for the button.
41
- */
42
- to?: string;
43
39
  /**
44
40
  * The id of the button.
45
41
  */