@dust-tt/sparkle 0.2.97 → 0.2.98-pr

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.
@@ -1,19 +1,35 @@
1
1
  import React, { ComponentType, MouseEvent } from "react";
2
+ type TabType = {
3
+ label: string;
4
+ id?: string;
5
+ hideLabel?: boolean;
6
+ current: boolean;
7
+ sizing?: "hug" | "expand";
8
+ icon?: ComponentType<{
9
+ className?: string;
10
+ }>;
11
+ hasSeparator?: boolean;
12
+ } & ({
13
+ onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;
14
+ href?: never;
15
+ } | {
16
+ onClick?: never;
17
+ href: string;
18
+ });
2
19
  type TabProps = {
3
20
  variant?: "default" | "stepper";
4
- tabs: Array<{
5
- label: string;
6
- hideLabel?: boolean;
7
- current: boolean;
8
- sizing?: "hug" | "expand";
9
- icon?: ComponentType<{
10
- className?: string;
11
- }>;
12
- href?: string;
13
- hasSeparator?: boolean;
14
- }>;
15
- onTabClick?: (tabName: string, event: MouseEvent<HTMLAnchorElement>) => void;
21
+ tabs: Array<TabType>;
22
+ setCurrentTab?: (tabId: string, e: MouseEvent<HTMLAnchorElement>) => void;
16
23
  className?: string;
17
24
  };
18
- export declare function Tab({ variant, tabs, onTabClick, className, }: TabProps): React.JSX.Element;
25
+ /**
26
+ * Tab component displaying a list of tabs.
27
+ *
28
+ * Tab click action is specified:
29
+ * - either per tab, by providing either an href or an onClick handler in tab
30
+ * data (mutually exclusive);
31
+ * - or globally, by providing a setCurrentTab function.
32
+ * Both per-tab and global actions can be set, the per-tab action taking precedence.
33
+ */
34
+ export declare function Tab({ variant, tabs, setCurrentTab, className, }: TabProps): React.JSX.Element;
19
35
  export {};
package/dist/esm/index.js CHANGED
@@ -32077,12 +32077,21 @@ var tabSizingClasses = {
32077
32077
  hug: "",
32078
32078
  expand: "s-flex-1",
32079
32079
  };
32080
+ /**
32081
+ * Tab component displaying a list of tabs.
32082
+ *
32083
+ * Tab click action is specified:
32084
+ * - either per tab, by providing either an href or an onClick handler in tab
32085
+ * data (mutually exclusive);
32086
+ * - or globally, by providing a setCurrentTab function.
32087
+ * Both per-tab and global actions can be set, the per-tab action taking precedence.
32088
+ */
32080
32089
  function Tab(_a) {
32081
- var _b = _a.variant, variant = _b === void 0 ? "default" : _b, tabs = _a.tabs, onTabClick = _a.onTabClick, _c = _a.className, className = _c === void 0 ? "" : _c;
32090
+ var _b = _a.variant, variant = _b === void 0 ? "default" : _b, tabs = _a.tabs, setCurrentTab = _a.setCurrentTab, _c = _a.className, className = _c === void 0 ? "" : _c;
32082
32091
  var components = React__default.useContext(SparkleContext).components;
32083
32092
  var renderTabs = function () {
32084
32093
  return tabs.map(function (tab, i) {
32085
- var _a, _b, _c, _d;
32094
+ var _a, _b, _c, _d, _e;
32086
32095
  var tabStateClasses = variant === "stepper"
32087
32096
  ? tab.current
32088
32097
  ? tabClasses.stepperSelected
@@ -32104,19 +32113,29 @@ function Tab(_a) {
32104
32113
  var Link = tab.href
32105
32114
  ? components.link
32106
32115
  : noHrefLink;
32107
- var content = (React__default.createElement(Link, { key: tab.label, className: finalTabClasses, "aria-current": tab.current ? "page" : undefined, onClick: function (event) { return onTabClick === null || onTabClick === void 0 ? void 0 : onTabClick(tab.label ? tab.label : "", event); }, href: tab.href || "#" },
32116
+ // precedence on href and onClick (mutually exclusive), then setCurrentTab
32117
+ var setCurrentTabFn = function (e) {
32118
+ if (!tab.id) {
32119
+ throw new Error("Tab id is required to use setCurrentTab");
32120
+ }
32121
+ setCurrentTab === null || setCurrentTab === void 0 ? void 0 : setCurrentTab(tab.id, e);
32122
+ };
32123
+ var onClickAction = tab.href
32124
+ ? undefined
32125
+ : (_a = tab.onClick) !== null && _a !== void 0 ? _a : setCurrentTabFn;
32126
+ var content = (React__default.createElement(Link, { key: tab.label, className: finalTabClasses, "aria-current": tab.current ? "page" : undefined, onClick: onClickAction, href: tab.href || "#" },
32108
32127
  React__default.createElement("div", { className: tab.current
32109
32128
  ? "s-flex s-gap-x-2"
32110
32129
  : "s-flex s-gap-x-2 s-transition s-duration-300 s-ease-out" },
32111
- tab.icon && (React__default.createElement(Icon, { visual: tab.icon, className: finalIconClasses, size: "sm" })), (_a = tab.hideLabel) !== null && _a !== void 0 ? _a : tab.label,
32130
+ tab.icon && (React__default.createElement(Icon, { visual: tab.icon, className: finalIconClasses, size: "sm" })), (_b = tab.hideLabel) !== null && _b !== void 0 ? _b : tab.label,
32112
32131
  variant === "stepper" && i < tabs.length - 1 && (React__default.createElement(Icon, { visual: SvgChevronRight$1, className: "s-mx-2 s-text-element-500", size: "sm" })))));
32113
32132
  return tab.hideLabel ? (tab.label ? (React__default.createElement(React__default.Fragment, { key: "tab-".concat(i) },
32114
- React__default.createElement("div", { className: tabSizingClasses[(_b = tab.sizing) !== null && _b !== void 0 ? _b : "hug"] },
32133
+ React__default.createElement("div", { className: tabSizingClasses[(_c = tab.sizing) !== null && _c !== void 0 ? _c : "hug"] },
32115
32134
  React__default.createElement(Tooltip, { label: tab.label }, content)),
32116
32135
  tab.hasSeparator && (React__default.createElement("div", { className: "s-flex s-h-full s-grow", key: "sep-".concat(i) })))) : (React__default.createElement(React__default.Fragment, { key: "tab-".concat(i) },
32117
- React__default.createElement("div", { className: tabSizingClasses[(_c = tab.sizing) !== null && _c !== void 0 ? _c : "hug"] }, content),
32118
- tab.hasSeparator && (React__default.createElement("div", { className: "s-flex s-h-full s-grow", key: "sep-".concat(i) }))))) : (React__default.createElement(React__default.Fragment, { key: "tab-".concat(i) },
32119
32136
  React__default.createElement("div", { className: tabSizingClasses[(_d = tab.sizing) !== null && _d !== void 0 ? _d : "hug"] }, content),
32137
+ tab.hasSeparator && (React__default.createElement("div", { className: "s-flex s-h-full s-grow", key: "sep-".concat(i) }))))) : (React__default.createElement(React__default.Fragment, { key: "tab-".concat(i) },
32138
+ React__default.createElement("div", { className: tabSizingClasses[(_e = tab.sizing) !== null && _e !== void 0 ? _e : "hug"] }, content),
32120
32139
  tab.hasSeparator && (React__default.createElement("div", { className: "s-flex s-h-full s-grow", key: "sep-".concat(i) }))));
32121
32140
  });
32122
32141
  };