se-design 1.0.1 → 1.0.21
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/components/Checkbox/index.d.ts +1 -0
- package/dist/index21.js +67 -36
- package/dist/index21.js.map +1 -1
- package/dist/index27.js +7 -6
- package/dist/index27.js.map +1 -1
- package/package.json +1 -1
package/dist/index21.js
CHANGED
|
@@ -1,46 +1,77 @@
|
|
|
1
|
-
import
|
|
1
|
+
import s, { useState as C, useEffect as N } from "react";
|
|
2
2
|
/* empty css */
|
|
3
|
+
function b() {
|
|
4
|
+
return b = Object.assign ? Object.assign.bind() : function(i) {
|
|
5
|
+
for (var a = 1; a < arguments.length; a++) {
|
|
6
|
+
var c = arguments[a];
|
|
7
|
+
for (var e in c) ({}).hasOwnProperty.call(c, e) && (i[e] = c[e]);
|
|
8
|
+
}
|
|
9
|
+
return i;
|
|
10
|
+
}, b.apply(null, arguments);
|
|
11
|
+
}
|
|
3
12
|
const I = ({
|
|
4
|
-
className:
|
|
5
|
-
automationId:
|
|
6
|
-
defaultChecked:
|
|
7
|
-
disabled:
|
|
8
|
-
onChange:
|
|
9
|
-
checkMarkType:
|
|
10
|
-
label:
|
|
11
|
-
disabledLabel:
|
|
12
|
-
containerAutomationId:
|
|
13
|
+
className: i = "",
|
|
14
|
+
automationId: a = "",
|
|
15
|
+
defaultChecked: c = !1,
|
|
16
|
+
disabled: e = !1,
|
|
17
|
+
onChange: m,
|
|
18
|
+
checkMarkType: o = "",
|
|
19
|
+
label: k = "",
|
|
20
|
+
disabledLabel: h = "",
|
|
21
|
+
containerAutomationId: g = "",
|
|
22
|
+
ariaLabel: f = "Checkbox"
|
|
13
23
|
}) => {
|
|
14
|
-
const [
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}, [
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
},
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
const [n, l] = C(c);
|
|
25
|
+
N(() => {
|
|
26
|
+
l(c);
|
|
27
|
+
}, [c]);
|
|
28
|
+
const p = (t) => {
|
|
29
|
+
e || (l((r) => !r), m?.(!n, t));
|
|
30
|
+
}, E = (t) => {
|
|
31
|
+
if (!e && (t.key === "Enter" || t.key === " ")) {
|
|
32
|
+
t.preventDefault(), t.stopPropagation();
|
|
33
|
+
const r = !n;
|
|
34
|
+
l(r);
|
|
35
|
+
const u = t.currentTarget.closest("label")?.querySelector("input");
|
|
36
|
+
u && m?.(r, {
|
|
37
|
+
target: u,
|
|
38
|
+
currentTarget: u
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}, v = () => {
|
|
42
|
+
const t = "focus-visible:outline outline-2 outline-[var(--color-blue-400)] outline-offset-2 rounded";
|
|
43
|
+
return e ? n && o === "tick" ? "disabled-tick" : n && o === "minus-checkbox" ? "disabled-minus-checkbox" : n && !o ? "disabled-tick" : "disabled-default" : o === "minus-checkbox" && n ? `minus-checkbox ${t}` : n ? `checked ${t}` : `unchecked ${t}`;
|
|
44
|
+
}, y = () => e ? "checkbox-label-disabled" : "checkbox-label", d = () => e && h ? h : k, x = crypto.randomUUID();
|
|
45
|
+
return /* @__PURE__ */ s.createElement("div", {
|
|
25
46
|
className: "se-design-checkbox-ctn"
|
|
26
|
-
}, /* @__PURE__ */
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
47
|
+
}, /* @__PURE__ */ s.createElement("label", b({
|
|
48
|
+
role: "checkbox",
|
|
49
|
+
htmlFor: x,
|
|
50
|
+
className: `se-design-checkbox ${i} ${v()}`,
|
|
51
|
+
"data-automation-id": g || "checkbox-container",
|
|
52
|
+
tabIndex: e ? -1 : 0,
|
|
53
|
+
"aria-checked": n,
|
|
54
|
+
"aria-disabled": e
|
|
55
|
+
}, f ? {
|
|
56
|
+
"aria-label": f
|
|
57
|
+
} : {
|
|
58
|
+
"aria-labelledby": `${a}-label`
|
|
59
|
+
}, {
|
|
60
|
+
onKeyDown: E
|
|
61
|
+
}), /* @__PURE__ */ s.createElement("input", {
|
|
62
|
+
id: x,
|
|
33
63
|
type: "checkbox",
|
|
34
|
-
checked:
|
|
35
|
-
onChange:
|
|
36
|
-
disabled:
|
|
37
|
-
|
|
64
|
+
checked: n,
|
|
65
|
+
onChange: p,
|
|
66
|
+
disabled: e,
|
|
67
|
+
"aria-hidden": "true"
|
|
68
|
+
}), /* @__PURE__ */ s.createElement("span", {
|
|
38
69
|
className: "checkbox-item",
|
|
39
|
-
"data-automation-id":
|
|
40
|
-
}), /* @__PURE__ */
|
|
41
|
-
className:
|
|
70
|
+
"data-automation-id": a
|
|
71
|
+
}), d()?.length > 0 && /* @__PURE__ */ s.createElement("span", {
|
|
72
|
+
className: y(),
|
|
42
73
|
"data-automation-id": "checkbox-label"
|
|
43
|
-
},
|
|
74
|
+
}, d())));
|
|
44
75
|
};
|
|
45
76
|
export {
|
|
46
77
|
I as Checkbox
|
package/dist/index21.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index21.js","sources":["../src/components/Checkbox/index.tsx"],"sourcesContent":["import React, { FC, useState, useEffect } from 'react';\nimport './style.scss';\n\nexport interface CheckboxProps {\n className?: string;\n automationId?: string;\n defaultChecked?: boolean;\n onChange?: (checked: boolean, e: React.ChangeEvent<HTMLInputElement>) => void;\n disabled?: boolean;\n checkMarkType?: 'tick' | 'minus-checkbox' | '';\n label?: string;\n disabledLabel?: string;\n containerAutomationId?: string;\n}\n\nexport const Checkbox: FC<CheckboxProps> = ({\n className = '',\n automationId = '',\n defaultChecked = false,\n disabled = false,\n onChange,\n checkMarkType = '',\n label = '',\n disabledLabel = '',\n containerAutomationId = ''\n}) => {\n const [isChecked, setIsChecked] = useState(defaultChecked);\n\n useEffect(() => {\n setIsChecked(defaultChecked);\n }, [defaultChecked]);\n\n const handleClick = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n setIsChecked((prev) => (checkMarkType === 'minus-checkbox' ? !prev : !prev));\n onChange?.(!isChecked, e);\n };\n\n const getCheckBoxClassName = () => {\n const focusClass = 'focus-visible:outline outline-2 outline-[var(--color-blue-400)] outline-offset-2 rounded';\n\n // Handle disabled states with proper checked status\n if (disabled) {\n if (isChecked && checkMarkType === 'tick') return 'disabled-tick';\n if (isChecked && checkMarkType === 'minus-checkbox') return 'disabled-minus-checkbox';\n if (isChecked && !checkMarkType) return 'disabled-tick'; // Default to tick for checked disabled\n return 'disabled-default'; // Unchecked disabled\n }\n\n // Handle enabled states\n if (checkMarkType === 'minus-checkbox' && isChecked) return `minus-checkbox ${focusClass}`;\n return isChecked ? `checked ${focusClass}` : `unchecked ${focusClass}`;\n };\n\n const getLabelClassName = () => {\n return disabled ? 'checkbox-label-disabled' : 'checkbox-label';\n };\n\n const getLabelText = () => {\n if (disabled && disabledLabel) {\n return disabledLabel;\n }\n return label;\n };\n const uniqueId = crypto.randomUUID();\n\n return (\n <div className=\"se-design-checkbox-ctn\">\n <label\n htmlFor={uniqueId}\n className={`se-design-checkbox ${className} ${getCheckBoxClassName()}`}\n data-automation-id={containerAutomationId || 'checkbox-container'}\n tabIndex={disabled ? -1 : 0}\n >\n <input\n id={uniqueId}\n type=\"checkbox\"\n checked={isChecked}\n onChange={handleClick}\n disabled={disabled}\n />\n <span className=\"checkbox-item\" data-automation-id={automationId}></span>\n <span className={getLabelClassName()} data-automation-id=\"checkbox-label\">{getLabelText()}</span
|
|
1
|
+
{"version":3,"file":"index21.js","sources":["../src/components/Checkbox/index.tsx"],"sourcesContent":["import React, { FC, useState, useEffect } from 'react';\nimport './style.scss';\n\nexport interface CheckboxProps {\n className?: string;\n automationId?: string;\n defaultChecked?: boolean;\n onChange?: (checked: boolean, e: React.ChangeEvent<HTMLInputElement>) => void;\n disabled?: boolean;\n checkMarkType?: 'tick' | 'minus-checkbox' | '';\n label?: string;\n disabledLabel?: string;\n containerAutomationId?: string;\n ariaLabel?: string;\n}\n\nexport const Checkbox: FC<CheckboxProps> = ({\n className = '',\n automationId = '',\n defaultChecked = false,\n disabled = false,\n onChange,\n checkMarkType = '',\n label = '',\n disabledLabel = '',\n containerAutomationId = '',\n ariaLabel = 'Checkbox'\n}) => {\n const [isChecked, setIsChecked] = useState(defaultChecked);\n\n useEffect(() => {\n setIsChecked(defaultChecked);\n }, [defaultChecked]);\n\n const handleClick = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n setIsChecked((prev) => (checkMarkType === 'minus-checkbox' ? !prev : !prev));\n onChange?.(!isChecked, e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLLabelElement | HTMLSpanElement>) => {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n const newChecked = !isChecked;\n setIsChecked(newChecked);\n \n // Create a proper synthetic event for the onChange callback\n const inputElement = e.currentTarget.closest('label')?.querySelector('input');\n if (inputElement) {\n const syntheticEvent = {\n target: inputElement,\n currentTarget: inputElement,\n } as React.ChangeEvent<HTMLInputElement>;\n onChange?.(newChecked, syntheticEvent);\n }\n }\n };\n\n const getCheckBoxClassName = () => {\n const focusClass = 'focus-visible:outline outline-2 outline-[var(--color-blue-400)] outline-offset-2 rounded';\n\n // Handle disabled states with proper checked status\n if (disabled) {\n if (isChecked && checkMarkType === 'tick') return 'disabled-tick';\n if (isChecked && checkMarkType === 'minus-checkbox') return 'disabled-minus-checkbox';\n if (isChecked && !checkMarkType) return 'disabled-tick'; // Default to tick for checked disabled\n return 'disabled-default'; // Unchecked disabled\n }\n\n // Handle enabled states\n if (checkMarkType === 'minus-checkbox' && isChecked) return `minus-checkbox ${focusClass}`;\n return isChecked ? `checked ${focusClass}` : `unchecked ${focusClass}`;\n };\n\n const getLabelClassName = () => {\n return disabled ? 'checkbox-label-disabled' : 'checkbox-label';\n };\n\n const getLabelText = () => {\n if (disabled && disabledLabel) {\n return disabledLabel;\n }\n return label;\n };\n const uniqueId = crypto.randomUUID();\n\n return (\n <div className=\"se-design-checkbox-ctn\">\n <label\n role=\"checkbox\"\n htmlFor={uniqueId}\n className={`se-design-checkbox ${className} ${getCheckBoxClassName()}`}\n data-automation-id={containerAutomationId || 'checkbox-container'}\n tabIndex={disabled ? -1 : 0}\n aria-checked={isChecked}\n aria-disabled={disabled}\n {...(ariaLabel ? { 'aria-label': ariaLabel } : { 'aria-labelledby': `${automationId}-label` })}\n onKeyDown={handleKeyDown}\n >\n <input\n id={uniqueId}\n type=\"checkbox\"\n checked={isChecked}\n onChange={handleClick}\n disabled={disabled}\n aria-hidden=\"true\"\n />\n <span className=\"checkbox-item\" data-automation-id={automationId}></span>\n {getLabelText()?.length > 0 && <span className={getLabelClassName()} data-automation-id=\"checkbox-label\">{getLabelText()}</span>}\n </label>\n </div>\n );\n};\n"],"names":["Checkbox","className","automationId","defaultChecked","disabled","onChange","checkMarkType","label","disabledLabel","containerAutomationId","ariaLabel","isChecked","setIsChecked","useState","useEffect","handleClick","e","prev","handleKeyDown","key","preventDefault","stopPropagation","newChecked","inputElement","currentTarget","closest","querySelector","target","getCheckBoxClassName","focusClass","getLabelClassName","getLabelText","uniqueId","crypto","randomUUID","React","createElement","_extends","role","htmlFor","tabIndex","onKeyDown","id","type","checked","length"],"mappings":";;;;;;;;;;;AAgBO,MAAMA,IAA8BA,CAAC;AAAA,EAC1CC,WAAAA,IAAY;AAAA,EACZC,cAAAA,IAAe;AAAA,EACfC,gBAAAA,IAAiB;AAAA,EACjBC,UAAAA,IAAW;AAAA,EACXC,UAAAA;AAAAA,EACAC,eAAAA,IAAgB;AAAA,EAChBC,OAAAA,IAAQ;AAAA,EACRC,eAAAA,IAAgB;AAAA,EAChBC,uBAAAA,IAAwB;AAAA,EACxBC,WAAAA,IAAY;AACd,MAAM;AACJ,QAAM,CAACC,GAAWC,CAAY,IAAIC,EAASV,CAAc;AAEzDW,EAAAA,EAAU,MAAM;AACdF,IAAAA,EAAaT,CAAc;AAAA,EAC7B,GAAG,CAACA,CAAc,CAAC;AAEnB,QAAMY,IAAcA,CAACC,MAA2C;AAC9D,IAAIZ,MACJQ,EAAcK,OAA+C,CAACA,CAAa,GAC3EZ,IAAW,CAACM,GAAWK,CAAC;AAAA,EAC1B,GAEME,IAAgBA,CAACF,MAA+D;AACpF,QAAIZ,CAAAA,MACAY,EAAEG,QAAQ,WAAWH,EAAEG,QAAQ,MAAK;AACtCH,MAAAA,EAAEI,eAAAA,GACFJ,EAAEK,gBAAAA;AACF,YAAMC,IAAa,CAACX;AACpBC,MAAAA,EAAaU,CAAU;AAGvB,YAAMC,IAAeP,EAAEQ,cAAcC,QAAQ,OAAO,GAAGC,cAAc,OAAO;AAC5E,MAAIH,KAKFlB,IAAWiB,GAJY;AAAA,QACrBK,QAAQJ;AAAAA,QACRC,eAAeD;AAAAA,MAAAA,CAEoB;AAAA,IAEzC;AAAA,EACF,GAEMK,IAAuBA,MAAM;AACjC,UAAMC,IAAa;AAGnB,WAAIzB,IACEO,KAAaL,MAAkB,SAAe,kBAC9CK,KAAaL,MAAkB,mBAAyB,4BACxDK,KAAa,CAACL,IAAsB,kBACjC,qBAILA,MAAkB,oBAAoBK,IAAkB,kBAAkBkB,CAAU,KACjFlB,IAAY,WAAWkB,CAAU,KAAK,aAAaA,CAAU;AAAA,EACtE,GAEMC,IAAoBA,MACjB1B,IAAW,4BAA4B,kBAG1C2B,IAAeA,MACf3B,KAAYI,IACPA,IAEFD,GAEHyB,IAAWC,OAAOC,WAAAA;AAExB,SACEC,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IAAKnC,WAAU;AAAA,EAAA,GACbkC,gBAAAA,EAAAC,cAAA,SAAAC,EAAA;AAAA,IACEC,MAAK;AAAA,IACLC,SAASP;AAAAA,IACT/B,WAAW,sBAAsBA,CAAS,IAAI2B,GAAsB;AAAA,IACpE,sBAAoBnB,KAAyB;AAAA,IAC7C+B,UAAUpC,IAAW,KAAK;AAAA,IAC1B,gBAAcO;AAAAA,IACd,iBAAeP;AAAAA,EAAAA,GACVM,IAAY;AAAA,IAAE,cAAcA;AAAAA,EAAAA,IAAc;AAAA,IAAE,mBAAmB,GAAGR,CAAY;AAAA,EAAA,GAAU;AAAA,IAC7FuC,WAAWvB;AAAAA,EAAAA,CAAc,GAEzBiB,gBAAAA,EAAAC,cAAA,SAAA;AAAA,IACEM,IAAIV;AAAAA,IACJW,MAAK;AAAA,IACLC,SAASjC;AAAAA,IACTN,UAAUU;AAAAA,IACVX,UAAAA;AAAAA,IACA,eAAY;AAAA,EAAA,CACb,GACD+B,gBAAAA,EAAAC,cAAA,QAAA;AAAA,IAAMnC,WAAU;AAAA,IAAgB,sBAAoBC;AAAAA,EAAAA,CAAoB,GACvE6B,EAAAA,GAAgBc,SAAS,KAAKV,gBAAAA,EAAAC,cAAA,QAAA;AAAA,IAAMnC,WAAW6B,EAAAA;AAAAA,IAAqB,sBAAmB;AAAA,EAAA,GAAkBC,EAAAA,CAAqB,CAC1H,CACJ;AAET;"}
|
package/dist/index27.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import t, { useState as T, useEffect as h } from "react";
|
|
2
|
-
import { Icon as
|
|
2
|
+
import { Icon as v } from "./index5.js";
|
|
3
3
|
import { Popover as N } from "./index17.js";
|
|
4
4
|
import { MenuList as k } from "./index16.js";
|
|
5
5
|
/* empty css */
|
|
@@ -31,11 +31,11 @@ const F = ({
|
|
|
31
31
|
className: "se-design-tabs flex items-center relative border rounded-md border-[var(--color-gray-200)] w-fit",
|
|
32
32
|
"data-automation-id": "tabs-container"
|
|
33
33
|
}, E.map((e) => {
|
|
34
|
-
const o = n === e.id,
|
|
34
|
+
const o = n === e.id, u = e.disabled;
|
|
35
35
|
return /* @__PURE__ */ t.createElement("div", {
|
|
36
36
|
key: e.label,
|
|
37
|
-
onClick: () => !
|
|
38
|
-
className: `text-base px-3 py-0.5 border-l first:border-l-0 first:rounded-l-[0.3rem] last:rounded-r-[0.3rem] border-[var(--color-gray-200)] ${
|
|
37
|
+
onClick: () => !u && d(e),
|
|
38
|
+
className: `text-base px-3 py-0.5 border-l first:border-l-0 first:rounded-l-[0.3rem] last:rounded-r-[0.3rem] border-[var(--color-gray-200)] ${u ? "text-[var(--color-gray-400)] cursor-not-allowed" : o ? "text-[var(--color-blue-500)] bg-[var(--color-blue-100)] font-medium hover:cursor-pointer" : "text-[var(--color-gray-700)] font-normal hover:text-[var(--color-gray-900)] cursor-pointer"}`,
|
|
39
39
|
"data-automation-id": `tab-item-${e.automationId || e.id || ""}`
|
|
40
40
|
}, e.label);
|
|
41
41
|
}), l.length > 0 && /* @__PURE__ */ t.createElement(N, {
|
|
@@ -49,10 +49,10 @@ const F = ({
|
|
|
49
49
|
className: `overflow-tabs-src-element border-l px-3 py-0.5 font-medium hover:cursor-pointer ${e ? "bg-[var(--color-blue-100)]" : ""}`
|
|
50
50
|
}, m?.label ? /* @__PURE__ */ t.createElement(t.Fragment, null, /* @__PURE__ */ t.createElement("span", {
|
|
51
51
|
className: "text-[var(--color-blue-500)]"
|
|
52
|
-
}, m?.label), /* @__PURE__ */ t.createElement(
|
|
52
|
+
}, m?.label), /* @__PURE__ */ t.createElement(v, {
|
|
53
53
|
name: "chevron",
|
|
54
54
|
rotation: e ? "180" : "0"
|
|
55
|
-
})) : /* @__PURE__ */ t.createElement(
|
|
55
|
+
})) : /* @__PURE__ */ t.createElement(v, {
|
|
56
56
|
name: "kebab-menu"
|
|
57
57
|
})),
|
|
58
58
|
renderPopoverContents: ({
|
|
@@ -60,6 +60,7 @@ const F = ({
|
|
|
60
60
|
}) => /* @__PURE__ */ t.createElement(k, {
|
|
61
61
|
items: l.map((o) => ({
|
|
62
62
|
label: o?.label,
|
|
63
|
+
automationId: o?.automationId || o?.id,
|
|
63
64
|
onClick: () => {
|
|
64
65
|
d(o), e();
|
|
65
66
|
}
|
package/dist/index27.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index27.js","sources":["../src/components/Tabs/index.tsx"],"sourcesContent":["import React, { FC, ReactNode, useState, useEffect } from 'react';\nimport { Icon } from '../Icon';\nimport { Popover } from '../Popover';\nimport { MenuList } from '../MenuList';\n\nimport './style.scss';\n\ninterface TabProps {\n label: string;\n id: string;\n disabled?: boolean;\n renderTabContent?: (tab: TabProps) => ReactNode;\n automationId?: string;\n}\ninterface TabsProps {\n defaultActiveTab?: string;\n tabs: TabProps[];\n onTabChange?: (tabId: string) => void;\n primaryTabCount?: number; // prop for controlling primary tabs\n singleTabAsHeading?: boolean; // prop for rendering single tab as heading\n automationId?: string;\n}\n\nexport const Tabs: FC<TabsProps> = ({\n defaultActiveTab,\n tabs,\n onTabChange,\n primaryTabCount = 0,\n singleTabAsHeading = false,\n}) => {\n const defaultTabId = defaultActiveTab || (tabs[0] ? tabs[0].id : '');\n const [activeTab, setActiveTab] = useState(defaultTabId);\n\n const visibleTabCount = primaryTabCount ? primaryTabCount : tabs?.length;\n const visibleTabs = tabs.slice(0, visibleTabCount);\n const overflowTabs = tabs.slice(visibleTabCount);\n const activeOverflowTab = overflowTabs.find((tab) => tab.id === activeTab);\n\n // Check if we should render as heading (single tab and singleTabAsHeading is true)\n const shouldRenderAsHeading = singleTabAsHeading && tabs.length === 1;\n\n useEffect(() => {\n setActiveTab(defaultActiveTab || '');\n }, [defaultActiveTab]);\n\n const handleTabClick = (tab: TabProps) => {\n setActiveTab(tab?.id);\n onTabChange?.(tab?.id);\n };\n\n const isTabActive = (tab: TabProps, activeTab: string) => {\n return tab.id === activeTab;\n };\n\n // If single tab and should render as heading, render just the heading\n if (shouldRenderAsHeading) {\n const singleTab = tabs[0];\n return (\n <>\n <div className=\"se-design-tabs-heading text-xl font-semibold text-[var(--color-gray-900)] mb-4\">\n {singleTab.label}\n </div>\n <div className=\"se-design-tabs-content\">\n <div className=\"tab-content block\">\n {singleTab?.renderTabContent && singleTab?.renderTabContent(singleTab)}\n </div>\n </div>\n </>\n );\n }\n\n return (\n <>\n <div className=\"se-design-tabs flex items-center relative border rounded-md border-[var(--color-gray-200)] w-fit\" data-automation-id=\"tabs-container\">\n {visibleTabs.map((tab) => {\n const isActive = activeTab === tab.id;\n const isDisabled = tab.disabled;\n return (\n <div\n key={tab.label}\n onClick={() => !isDisabled && handleTabClick(tab)}\n className={`text-base px-3 py-0.5 border-l first:border-l-0 first:rounded-l-[0.3rem] last:rounded-r-[0.3rem] border-[var(--color-gray-200)] ${\n isDisabled\n ? 'text-[var(--color-gray-400)] cursor-not-allowed'\n : isActive\n ? 'text-[var(--color-blue-500)] bg-[var(--color-blue-100)] font-medium hover:cursor-pointer'\n : 'text-[var(--color-gray-700)] font-normal hover:text-[var(--color-gray-900)] cursor-pointer'\n }`}\n data-automation-id={`tab-item-${tab.automationId || tab.id || ''}`}\n >\n {tab.label}\n </div>\n );\n })}\n\n {overflowTabs.length > 0 && (\n <Popover\n className=\"se-design-overflow-tabs\"\n position=\"bottom-left\"\n automationId=\"tabs-kebab-menu\"\n noBorder\n renderPopoverSrcElement={({ displayPopover }) => {\n return (\n <div\n className={`overflow-tabs-src-element border-l px-3 py-0.5 font-medium hover:cursor-pointer ${\n displayPopover ? 'bg-[var(--color-blue-100)]' : ''\n }`}\n >\n {activeOverflowTab?.label ? (\n <>\n <span className=\"text-[var(--color-blue-500)]\">{activeOverflowTab?.label}</span>\n <Icon name=\"chevron\" rotation={displayPopover ? '180' : '0'} />\n </>\n ) : (\n <Icon name=\"kebab-menu\" />\n )}\n </div>\n );\n }}\n renderPopoverContents={({ closePopoverCb }) => (\n <MenuList\n items={overflowTabs.map((tab) => ({\n label: tab?.label,\n onClick: () => {\n handleTabClick(tab);\n closePopoverCb();\n }\n }))}\n />\n )}\n />\n )}\n </div>\n\n <div className=\"se-design-tabs-content\">\n {tabs.map((tab) => (\n <div key={tab.id} className={`tab-content ${isTabActive(tab, activeTab) ? 'block' : 'hidden'}`}>\n {isTabActive(tab, activeTab) && tab?.renderTabContent && tab?.renderTabContent(tab)}\n </div>\n ))}\n </div>\n </>\n );\n};\n"],"names":["Tabs","defaultActiveTab","tabs","onTabChange","primaryTabCount","singleTabAsHeading","defaultTabId","id","activeTab","setActiveTab","useState","visibleTabCount","length","visibleTabs","slice","overflowTabs","activeOverflowTab","find","tab","shouldRenderAsHeading","useEffect","handleTabClick","isTabActive","singleTab","createElement","React","Fragment","className","label","renderTabContent","map","isActive","isDisabled","disabled","key","onClick","automationId","Popover","position","noBorder","renderPopoverSrcElement","displayPopover","Icon","name","rotation","renderPopoverContents","closePopoverCb","MenuList","items"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index27.js","sources":["../src/components/Tabs/index.tsx"],"sourcesContent":["import React, { FC, ReactNode, useState, useEffect } from 'react';\nimport { Icon } from '../Icon';\nimport { Popover } from '../Popover';\nimport { MenuList } from '../MenuList';\n\nimport './style.scss';\n\ninterface TabProps {\n label: string;\n id: string;\n disabled?: boolean;\n renderTabContent?: (tab: TabProps) => ReactNode;\n automationId?: string;\n}\ninterface TabsProps {\n defaultActiveTab?: string;\n tabs: TabProps[];\n onTabChange?: (tabId: string) => void;\n primaryTabCount?: number; // prop for controlling primary tabs\n singleTabAsHeading?: boolean; // prop for rendering single tab as heading\n automationId?: string;\n}\n\nexport const Tabs: FC<TabsProps> = ({\n defaultActiveTab,\n tabs,\n onTabChange,\n primaryTabCount = 0,\n singleTabAsHeading = false,\n}) => {\n const defaultTabId = defaultActiveTab || (tabs[0] ? tabs[0].id : '');\n const [activeTab, setActiveTab] = useState(defaultTabId);\n\n const visibleTabCount = primaryTabCount ? primaryTabCount : tabs?.length;\n const visibleTabs = tabs.slice(0, visibleTabCount);\n const overflowTabs = tabs.slice(visibleTabCount);\n const activeOverflowTab = overflowTabs.find((tab) => tab.id === activeTab);\n\n // Check if we should render as heading (single tab and singleTabAsHeading is true)\n const shouldRenderAsHeading = singleTabAsHeading && tabs.length === 1;\n\n useEffect(() => {\n setActiveTab(defaultActiveTab || '');\n }, [defaultActiveTab]);\n\n const handleTabClick = (tab: TabProps) => {\n setActiveTab(tab?.id);\n onTabChange?.(tab?.id);\n };\n\n const isTabActive = (tab: TabProps, activeTab: string) => {\n return tab.id === activeTab;\n };\n\n // If single tab and should render as heading, render just the heading\n if (shouldRenderAsHeading) {\n const singleTab = tabs[0];\n return (\n <>\n <div className=\"se-design-tabs-heading text-xl font-semibold text-[var(--color-gray-900)] mb-4\">\n {singleTab.label}\n </div>\n <div className=\"se-design-tabs-content\">\n <div className=\"tab-content block\">\n {singleTab?.renderTabContent && singleTab?.renderTabContent(singleTab)}\n </div>\n </div>\n </>\n );\n }\n\n return (\n <>\n <div className=\"se-design-tabs flex items-center relative border rounded-md border-[var(--color-gray-200)] w-fit\" data-automation-id=\"tabs-container\">\n {visibleTabs.map((tab) => {\n const isActive = activeTab === tab.id;\n const isDisabled = tab.disabled;\n return (\n <div\n key={tab.label}\n onClick={() => !isDisabled && handleTabClick(tab)}\n className={`text-base px-3 py-0.5 border-l first:border-l-0 first:rounded-l-[0.3rem] last:rounded-r-[0.3rem] border-[var(--color-gray-200)] ${\n isDisabled\n ? 'text-[var(--color-gray-400)] cursor-not-allowed'\n : isActive\n ? 'text-[var(--color-blue-500)] bg-[var(--color-blue-100)] font-medium hover:cursor-pointer'\n : 'text-[var(--color-gray-700)] font-normal hover:text-[var(--color-gray-900)] cursor-pointer'\n }`}\n data-automation-id={`tab-item-${tab.automationId || tab.id || ''}`}\n >\n {tab.label}\n </div>\n );\n })}\n\n {overflowTabs.length > 0 && (\n <Popover\n className=\"se-design-overflow-tabs\"\n position=\"bottom-left\"\n automationId=\"tabs-kebab-menu\"\n noBorder\n renderPopoverSrcElement={({ displayPopover }) => {\n return (\n <div\n className={`overflow-tabs-src-element border-l px-3 py-0.5 font-medium hover:cursor-pointer ${\n displayPopover ? 'bg-[var(--color-blue-100)]' : ''\n }`}\n >\n {activeOverflowTab?.label ? (\n <>\n <span className=\"text-[var(--color-blue-500)]\">{activeOverflowTab?.label}</span>\n <Icon name=\"chevron\" rotation={displayPopover ? '180' : '0'} />\n </>\n ) : (\n <Icon name=\"kebab-menu\" />\n )}\n </div>\n );\n }}\n renderPopoverContents={({ closePopoverCb }) => (\n <MenuList\n items={overflowTabs.map((tab) => ({\n label: tab?.label,\n automationId: tab?.automationId || tab?.id,\n onClick: () => {\n handleTabClick(tab);\n closePopoverCb();\n }\n }))}\n />\n )}\n />\n )}\n </div>\n\n <div className=\"se-design-tabs-content\">\n {tabs.map((tab) => (\n <div key={tab.id} className={`tab-content ${isTabActive(tab, activeTab) ? 'block' : 'hidden'}`}>\n {isTabActive(tab, activeTab) && tab?.renderTabContent && tab?.renderTabContent(tab)}\n </div>\n ))}\n </div>\n </>\n );\n};\n"],"names":["Tabs","defaultActiveTab","tabs","onTabChange","primaryTabCount","singleTabAsHeading","defaultTabId","id","activeTab","setActiveTab","useState","visibleTabCount","length","visibleTabs","slice","overflowTabs","activeOverflowTab","find","tab","shouldRenderAsHeading","useEffect","handleTabClick","isTabActive","singleTab","createElement","React","Fragment","className","label","renderTabContent","map","isActive","isDisabled","disabled","key","onClick","automationId","Popover","position","noBorder","renderPopoverSrcElement","displayPopover","Icon","name","rotation","renderPopoverContents","closePopoverCb","MenuList","items"],"mappings":"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"}
|