se-design 1.0.88-dev → 1.0.90-dev.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.
- package/dist/assets/icons/cloud-check.svg +4 -0
- package/dist/assets/style.css +1 -1
- package/dist/components/Icon/index.d.ts +5 -0
- package/dist/components/InputWithTags/index.d.ts +4 -1
- package/dist/components/SidebarOverlay/index.d.ts +0 -41
- package/dist/components/Tabs/index.d.ts +1 -0
- package/dist/components/Tooltip/index.d.ts +5 -1
- package/dist/index112.js +1 -1
- package/dist/index112.js.map +1 -1
- package/dist/index113.js +2 -2
- package/dist/index113.js.map +1 -1
- package/dist/index114.js +1 -1
- package/dist/index114.js.map +1 -1
- package/dist/index115.js +2 -2
- package/dist/index115.js.map +1 -1
- package/dist/index116.js +1 -1
- package/dist/index116.js.map +1 -1
- package/dist/index117.js +1 -1
- package/dist/index117.js.map +1 -1
- package/dist/index118.js +2 -2
- package/dist/index118.js.map +1 -1
- package/dist/index119.js +1 -1
- package/dist/index119.js.map +1 -1
- package/dist/index120.js +2 -2
- package/dist/index120.js.map +1 -1
- package/dist/index121.js +1 -1
- package/dist/index121.js.map +1 -1
- package/dist/index122.js +1 -1
- package/dist/index122.js.map +1 -1
- package/dist/index123.js +1 -1
- package/dist/index123.js.map +1 -1
- package/dist/index124.js +1 -1
- package/dist/index124.js.map +1 -1
- package/dist/index125.js +2 -2
- package/dist/index125.js.map +1 -1
- package/dist/index126.js +1 -1
- package/dist/index126.js.map +1 -1
- package/dist/index127.js +2 -2
- package/dist/index127.js.map +1 -1
- package/dist/index128.js +2 -2
- package/dist/index128.js.map +1 -1
- package/dist/index129.js +1 -1
- package/dist/index129.js.map +1 -1
- package/dist/index130.js +2 -2
- package/dist/index130.js.map +1 -1
- package/dist/index131.js +2 -2
- package/dist/index131.js.map +1 -1
- package/dist/index132.js +1 -1
- package/dist/index132.js.map +1 -1
- package/dist/index133.js +1 -1
- package/dist/index133.js.map +1 -1
- package/dist/index134.js +1 -1
- package/dist/index134.js.map +1 -1
- package/dist/index135.js +2 -2
- package/dist/index135.js.map +1 -1
- package/dist/index136.js +2 -2
- package/dist/index136.js.map +1 -1
- package/dist/index137.js +2 -2
- package/dist/index137.js.map +1 -1
- package/dist/index138.js +1 -1
- package/dist/index138.js.map +1 -1
- package/dist/index139.js +1 -1
- package/dist/index139.js.map +1 -1
- package/dist/index140.js +1 -1
- package/dist/index140.js.map +1 -1
- package/dist/index141.js +1 -1
- package/dist/index141.js.map +1 -1
- package/dist/index142.js +1 -1
- package/dist/index142.js.map +1 -1
- package/dist/index143.js +1 -1
- package/dist/index143.js.map +1 -1
- package/dist/index144.js +1 -1
- package/dist/index144.js.map +1 -1
- package/dist/index145.js +1 -1
- package/dist/index145.js.map +1 -1
- package/dist/index146.js +2 -2
- package/dist/index146.js.map +1 -1
- package/dist/index147.js +2 -2
- package/dist/index147.js.map +1 -1
- package/dist/index148.js +1 -1
- package/dist/index148.js.map +1 -1
- package/dist/index149.js +1 -1
- package/dist/index149.js.map +1 -1
- package/dist/index150.js +1 -1
- package/dist/index150.js.map +1 -1
- package/dist/index151.js +1 -1
- package/dist/index151.js.map +1 -1
- package/dist/index152.js +1 -1
- package/dist/index152.js.map +1 -1
- package/dist/index153.js +1 -1
- package/dist/index153.js.map +1 -1
- package/dist/index154.js +1 -1
- package/dist/index154.js.map +1 -1
- package/dist/index155.js +2 -2
- package/dist/index155.js.map +1 -1
- package/dist/index156.js +1 -1
- package/dist/index156.js.map +1 -1
- package/dist/index157.js +2 -2
- package/dist/index157.js.map +1 -1
- package/dist/index158.js +2 -2
- package/dist/index158.js.map +1 -1
- package/dist/index159.js +2 -2
- package/dist/index159.js.map +1 -1
- package/dist/index16.js +111 -107
- package/dist/index16.js.map +1 -1
- package/dist/index160.js +2 -2
- package/dist/index160.js.map +1 -1
- package/dist/index161.js +1 -1
- package/dist/index161.js.map +1 -1
- package/dist/index162.js +1 -1
- package/dist/index162.js.map +1 -1
- package/dist/index163.js +1 -1
- package/dist/index163.js.map +1 -1
- package/dist/index164.js +1 -1
- package/dist/index164.js.map +1 -1
- package/dist/index165.js +1 -1
- package/dist/index165.js.map +1 -1
- package/dist/index166.js +1 -1
- package/dist/index166.js.map +1 -1
- package/dist/index167.js +1 -1
- package/dist/index167.js.map +1 -1
- package/dist/index168.js +1 -1
- package/dist/index168.js.map +1 -1
- package/dist/index169.js +1 -1
- package/dist/index169.js.map +1 -1
- package/dist/index170.js +1 -1
- package/dist/index170.js.map +1 -1
- package/dist/index171.js +1 -1
- package/dist/index171.js.map +1 -1
- package/dist/index172.js +1 -1
- package/dist/index172.js.map +1 -1
- package/dist/index173.js +1 -1
- package/dist/index173.js.map +1 -1
- package/dist/index174.js +1 -1
- package/dist/index174.js.map +1 -1
- package/dist/index175.js +1 -1
- package/dist/index175.js.map +1 -1
- package/dist/index176.js +1 -1
- package/dist/index176.js.map +1 -1
- package/dist/index177.js +1 -1
- package/dist/index177.js.map +1 -1
- package/dist/index178.js +1 -1
- package/dist/index178.js.map +1 -1
- package/dist/index179.js +1 -1
- package/dist/index179.js.map +1 -1
- package/dist/index180.js +1 -1
- package/dist/index180.js.map +1 -1
- package/dist/index181.js +1 -1
- package/dist/index181.js.map +1 -1
- package/dist/index182.js +1 -1
- package/dist/index182.js.map +1 -1
- package/dist/index183.js +1 -1
- package/dist/index183.js.map +1 -1
- package/dist/index184.js +1 -1
- package/dist/index184.js.map +1 -1
- package/dist/index185.js +2 -2
- package/dist/index185.js.map +1 -1
- package/dist/index186.js +2 -2
- package/dist/index186.js.map +1 -1
- package/dist/index187.js +1 -1
- package/dist/index187.js.map +1 -1
- package/dist/index188.js +1 -1
- package/dist/index188.js.map +1 -1
- package/dist/index189.js +2 -2
- package/dist/index189.js.map +1 -1
- package/dist/index190.js +2 -2
- package/dist/index190.js.map +1 -1
- package/dist/index191.js +1 -1
- package/dist/index191.js.map +1 -1
- package/dist/index192.js +1 -1
- package/dist/index192.js.map +1 -1
- package/dist/index193.js +1 -1
- package/dist/index193.js.map +1 -1
- package/dist/index194.js +1 -1
- package/dist/index194.js.map +1 -1
- package/dist/index195.js +1 -1
- package/dist/index195.js.map +1 -1
- package/dist/index196.js +1 -1
- package/dist/index196.js.map +1 -1
- package/dist/index197.js +1 -1
- package/dist/index197.js.map +1 -1
- package/dist/index198.js +1 -1
- package/dist/index198.js.map +1 -1
- package/dist/index199.js +1 -1
- package/dist/index199.js.map +1 -1
- package/dist/index200.js +2 -2
- package/dist/index200.js.map +1 -1
- package/dist/index201.js +2 -2
- package/dist/index201.js.map +1 -1
- package/dist/index202.js +2 -2
- package/dist/index202.js.map +1 -1
- package/dist/index203.js +2 -149
- package/dist/index203.js.map +1 -1
- package/dist/index204.js +149 -9
- package/dist/index204.js.map +1 -1
- package/dist/index205.js +8 -5
- package/dist/index205.js.map +1 -1
- package/dist/index206.js +5 -4
- package/dist/index206.js.map +1 -1
- package/dist/index207.js +1 -1
- package/dist/index223.js +8 -0
- package/dist/index223.js.map +1 -0
- package/dist/{index224.js → index225.js} +1 -1
- package/dist/{index224.js.map → index225.js.map} +1 -1
- package/dist/index23.js +16 -16
- package/dist/index23.js.map +1 -1
- package/dist/{index232.js → index233.js} +1 -1
- package/dist/{index232.js.map → index233.js.map} +1 -1
- package/dist/{index235.js → index236.js} +1 -1
- package/dist/{index235.js.map → index236.js.map} +1 -1
- package/dist/index245.js +169 -3
- package/dist/index245.js.map +1 -1
- package/dist/index246.js +7 -0
- package/dist/index246.js.map +1 -0
- package/dist/index248.js +18 -9
- package/dist/index248.js.map +1 -1
- package/dist/index249.js +9 -9
- package/dist/index249.js.map +1 -1
- package/dist/index25.js +2 -1
- package/dist/index25.js.map +1 -1
- package/dist/index250.js +9 -4
- package/dist/index250.js.map +1 -1
- package/dist/index251.js +5 -170
- package/dist/index251.js.map +1 -1
- package/dist/index252.js +170 -11
- package/dist/index252.js.map +1 -1
- package/dist/index253.js +11 -6
- package/dist/index253.js.map +1 -1
- package/dist/index254.js +5 -5
- package/dist/index254.js.map +1 -1
- package/dist/index255.js +5 -37
- package/dist/index255.js.map +1 -1
- package/dist/index256.js +38 -2
- package/dist/index256.js.map +1 -1
- package/dist/index257.js +2 -8
- package/dist/index257.js.map +1 -1
- package/dist/index258.js +7 -326
- package/dist/index258.js.map +1 -1
- package/dist/index259.js +324 -47
- package/dist/index259.js.map +1 -1
- package/dist/index260.js +50 -2
- package/dist/index260.js.map +1 -1
- package/dist/index261.js +2 -76
- package/dist/index261.js.map +1 -1
- package/dist/index262.js +65 -82
- package/dist/index262.js.map +1 -1
- package/dist/index263.js +89 -48
- package/dist/index263.js.map +1 -1
- package/dist/index264.js +51 -7
- package/dist/index264.js.map +1 -1
- package/dist/index265.js +7 -4
- package/dist/index265.js.map +1 -1
- package/dist/index266.js +4 -51
- package/dist/index266.js.map +1 -1
- package/dist/index267.js +52 -2
- package/dist/index267.js.map +1 -1
- package/dist/index268.js +2 -2
- package/dist/index269.js +5 -0
- package/dist/index269.js.map +1 -0
- package/dist/index28.js +88 -149
- package/dist/index28.js.map +1 -1
- package/dist/index29.js +72 -71
- package/dist/index29.js.map +1 -1
- package/dist/index30.js +1 -1
- package/dist/index33.js +1 -1
- package/dist/index35.js +1 -1
- package/dist/index36.js +1 -1
- package/dist/index37.js +61 -37
- package/dist/index37.js.map +1 -1
- package/dist/index38.js +163 -162
- package/dist/index38.js.map +1 -1
- package/dist/index39.js +55 -51
- package/dist/index39.js.map +1 -1
- package/dist/index4.js +66 -61
- package/dist/index4.js.map +1 -1
- package/dist/index40.js +1 -1
- package/dist/index45.js +39 -38
- package/dist/index45.js.map +1 -1
- package/dist/index46.js +52 -51
- package/dist/index46.js.map +1 -1
- package/dist/index49.js +1 -1
- package/dist/index51.js +1 -1
- package/dist/index52.js +1 -1
- package/dist/index53.js +1 -1
- package/dist/index57.js +1 -1
- package/dist/index6.js +305 -299
- package/dist/index6.js.map +1 -1
- package/dist/index61.js +1 -1
- package/dist/index63.js +1 -1
- package/dist/index65.js +1 -1
- package/dist/index7.js +1 -1
- package/dist/index79.js +1 -1
- package/dist/index81.js +9 -7
- package/dist/index81.js.map +1 -1
- package/dist/index9.js +20 -20
- package/dist/index9.js.map +1 -1
- package/package.json +1 -1
- package/dist/index244.js +0 -173
- package/dist/index244.js.map +0 -1
- package/dist/index247.js +0 -22
- package/dist/index247.js.map +0 -1
package/dist/index29.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Icon as
|
|
3
|
-
import { Popover as
|
|
4
|
-
import { MenuList as
|
|
5
|
-
import { useStableId as
|
|
1
|
+
import t, { useState as L, useMemo as z, useRef as O, useEffect as H } from "react";
|
|
2
|
+
import { Icon as A } from "./index6.js";
|
|
3
|
+
import { Popover as U } from "./index19.js";
|
|
4
|
+
import { MenuList as V } from "./index18.js";
|
|
5
|
+
import { useStableId as q } from "./index206.js";
|
|
6
6
|
import "./index72.js";
|
|
7
|
-
import { useTabsA11y as
|
|
7
|
+
import { useTabsA11y as G, getPanelId as J } from "./index73.js";
|
|
8
8
|
/* empty css */
|
|
9
9
|
function d() {
|
|
10
10
|
return d = Object.assign ? Object.assign.bind() : function(i) {
|
|
@@ -15,86 +15,87 @@ function d() {
|
|
|
15
15
|
return i;
|
|
16
16
|
}, d.apply(null, arguments);
|
|
17
17
|
}
|
|
18
|
-
const
|
|
18
|
+
const oe = ({
|
|
19
19
|
defaultActiveTab: i,
|
|
20
20
|
tabs: o,
|
|
21
21
|
onTabChange: m,
|
|
22
22
|
primaryTabCount: u,
|
|
23
23
|
headingLevel: g,
|
|
24
|
-
id:
|
|
25
|
-
ariaLabel:
|
|
26
|
-
ariaLabelledBy:
|
|
27
|
-
panelId: p
|
|
24
|
+
id: F,
|
|
25
|
+
ariaLabel: M = "Tabs",
|
|
26
|
+
ariaLabelledBy: K,
|
|
27
|
+
panelId: p,
|
|
28
|
+
appearance: h = "solid"
|
|
28
29
|
}) => {
|
|
29
|
-
const
|
|
30
|
-
const e = f.filter((s) => !s.disabled),
|
|
31
|
-
return
|
|
30
|
+
const R = i || (o[0] ? o[0].id : ""), S = h === "outline" ? "se-design-tab-item-active font-medium hover:cursor-pointer" : "se-design-tab-item-active text-[var(--color-white)] bg-[var(--color-blue-500)] font-medium hover:cursor-pointer", [b, w] = L(R), [T, y] = L(!1), E = u ?? o?.length, f = o.slice(0, E), c = o.slice(E), l = c.find((e) => e.id === b), k = o.some((e) => e.renderTabContent), x = q(F, "tabs"), _ = z(() => {
|
|
31
|
+
const e = f.filter((s) => !s.disabled), r = c.filter((s) => !s.disabled), n = e.map((s) => s.id);
|
|
32
|
+
return r.length > 0 ? [...n, "overflow"] : n;
|
|
32
33
|
}, [f, c]), {
|
|
33
|
-
getTabProps:
|
|
34
|
-
getPanelProps:
|
|
35
|
-
getTabListProps:
|
|
36
|
-
handleKeyDown:
|
|
37
|
-
setFocusedTabId:
|
|
38
|
-
} =
|
|
39
|
-
itemIds:
|
|
34
|
+
getTabProps: I,
|
|
35
|
+
getPanelProps: j,
|
|
36
|
+
getTabListProps: B,
|
|
37
|
+
handleKeyDown: C,
|
|
38
|
+
setFocusedTabId: N
|
|
39
|
+
} = G({
|
|
40
|
+
itemIds: _,
|
|
40
41
|
activeItem: b,
|
|
41
42
|
orientation: "horizontal",
|
|
42
|
-
idBase:
|
|
43
|
-
includePanelLinks:
|
|
43
|
+
idBase: x,
|
|
44
|
+
includePanelLinks: k || !!p,
|
|
44
45
|
externalPanelId: p
|
|
45
|
-
}),
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
}), P = O(null), v = O(!1);
|
|
47
|
+
H(() => {
|
|
48
|
+
w(i || "");
|
|
48
49
|
}, [i]);
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
},
|
|
50
|
+
const D = (e) => {
|
|
51
|
+
w(e?.id), m?.(e?.id);
|
|
52
|
+
}, $ = (e, r) => e.id === r;
|
|
52
53
|
if (g && o.length === 1) {
|
|
53
54
|
const e = o[0];
|
|
54
|
-
return /* @__PURE__ */
|
|
55
|
+
return /* @__PURE__ */ t.createElement(t.Fragment, null, /* @__PURE__ */ t.createElement(g, {
|
|
55
56
|
className: "se-design-tabs se-design-tabs-heading"
|
|
56
|
-
}, e.label), /* @__PURE__ */
|
|
57
|
+
}, e.label), /* @__PURE__ */ t.createElement("div", {
|
|
57
58
|
className: "se-design-tabs-content"
|
|
58
|
-
}, /* @__PURE__ */
|
|
59
|
+
}, /* @__PURE__ */ t.createElement("div", {
|
|
59
60
|
className: "tab-content block"
|
|
60
61
|
}, e?.renderTabContent && e?.renderTabContent(e))));
|
|
61
62
|
}
|
|
62
|
-
return /* @__PURE__ */
|
|
63
|
-
className:
|
|
63
|
+
return /* @__PURE__ */ t.createElement(t.Fragment, null, /* @__PURE__ */ t.createElement("div", d({
|
|
64
|
+
className: `se-design-tabs flex items-stretch relative border rounded-md border-[var(--color-gray-400)] w-fit ${h === "outline" ? "se-design-tabs--outline" : ""}`,
|
|
64
65
|
"data-automation-id": "tabs-container"
|
|
65
|
-
},
|
|
66
|
-
ariaLabel:
|
|
67
|
-
ariaLabelledBy:
|
|
66
|
+
}, B({
|
|
67
|
+
ariaLabel: M,
|
|
68
|
+
ariaLabelledBy: K
|
|
68
69
|
})), f.map((e) => {
|
|
69
|
-
const
|
|
70
|
-
return /* @__PURE__ */
|
|
70
|
+
const r = b === e.id, n = !!e.disabled, s = I(e.id);
|
|
71
|
+
return /* @__PURE__ */ t.createElement("button", d({
|
|
71
72
|
type: "button",
|
|
72
73
|
key: e.id
|
|
73
74
|
}, s, {
|
|
74
75
|
disabled: n,
|
|
75
76
|
"aria-label": e.ariaLabel,
|
|
76
|
-
onFocus: () => !n &&
|
|
77
|
-
onKeyDown:
|
|
78
|
-
onClick: () =>
|
|
79
|
-
className: `se-design-tab-item flex items-center text-base px-3 py-0.5 min-w-0 border-l first:border-l-0 first:rounded-l-[0.3rem] last:rounded-r-[0.3rem] border-[var(--color-gray-400)] ${n ? "" : "focus-outline"} ${n ? "text-[var(--color-gray-400)] cursor-not-allowed" :
|
|
77
|
+
onFocus: () => !n && N(e.id),
|
|
78
|
+
onKeyDown: C,
|
|
79
|
+
onClick: () => D(e),
|
|
80
|
+
className: `se-design-tab-item flex items-center text-base px-3 py-0.5 min-w-0 border-l first:border-l-0 first:rounded-l-[0.3rem] last:rounded-r-[0.3rem] border-[var(--color-gray-400)] ${n ? "" : "focus-outline"} ${n ? "text-[var(--color-gray-400)] cursor-not-allowed" : r ? S : "text-[var(--color-gray-700)] font-normal hover:bg-[var(--color-gray-50)] hover:text-[var(--color-gray-900)] cursor-pointer transition-all duration-200 ease-in-out"}`,
|
|
80
81
|
"data-automation-id": `tab-item-${e.automationId || e.id || ""}`
|
|
81
82
|
}), e.label);
|
|
82
|
-
}), c.length > 0 && /* @__PURE__ */
|
|
83
|
+
}), c.length > 0 && /* @__PURE__ */ t.createElement(U, {
|
|
83
84
|
className: "se-design-overflow-tabs",
|
|
84
85
|
position: "bottom-left",
|
|
85
86
|
noBorder: !0,
|
|
86
87
|
disableClickToggle: !0,
|
|
87
88
|
onPopoverToggle: (e) => {
|
|
88
|
-
e || (v.current &&
|
|
89
|
+
e || (v.current && P.current?.focus(), v.current = !1);
|
|
89
90
|
},
|
|
90
91
|
renderPopoverSrcElement: ({
|
|
91
92
|
displayPopover: e,
|
|
92
|
-
togglePopover:
|
|
93
|
+
togglePopover: r
|
|
93
94
|
}) => {
|
|
94
|
-
const n =
|
|
95
|
-
return /* @__PURE__ */
|
|
95
|
+
const n = I("overflow"), s = l ? J(l.id, x) : void 0;
|
|
96
|
+
return /* @__PURE__ */ t.createElement("div", d({}, n, {
|
|
96
97
|
ref: (a) => {
|
|
97
|
-
|
|
98
|
+
P.current = a, n.ref(a);
|
|
98
99
|
},
|
|
99
100
|
"aria-selected": !!l,
|
|
100
101
|
"aria-label": l?.label ? void 0 : `More tabs (${c.length})`,
|
|
@@ -102,52 +103,52 @@ const re = ({
|
|
|
102
103
|
"aria-haspopup": "true",
|
|
103
104
|
"aria-expanded": e,
|
|
104
105
|
onClick: () => {
|
|
105
|
-
v.current = !1,
|
|
106
|
+
v.current = !1, r(!0);
|
|
106
107
|
},
|
|
107
|
-
onFocus: () =>
|
|
108
|
+
onFocus: () => N("overflow"),
|
|
108
109
|
"data-automation-id": "tabs-kebab-menu",
|
|
109
110
|
onKeyDown: (a) => {
|
|
110
|
-
a.key === "Enter" || a.key === " " || a.key === "ArrowDown" ? (a.preventDefault(), v.current = !0,
|
|
111
|
+
a.key === "Enter" || a.key === " " || a.key === "ArrowDown" ? (a.preventDefault(), v.current = !0, r(!0)) : a.key === "ArrowUp" ? (a.preventDefault(), v.current = !0, r("last")) : C(a);
|
|
111
112
|
},
|
|
112
113
|
className: `overflow-tabs-src-element focus-outline border-l px-3 py-0.5 rounded-r-md font-medium hover:cursor-pointer transition-all duration-200 ease-in-out ${e ? "bg-[var(--color-blue-100)]" : ""} ${l?.label ? "bg-[var(--color-blue-500)]" : "hover:bg-[var(--color-gray-50)]"}`,
|
|
113
114
|
onMouseEnter: () => y(!0),
|
|
114
115
|
onMouseLeave: () => y(!1)
|
|
115
|
-
}), l?.label ? /* @__PURE__ */
|
|
116
|
+
}), l?.label ? /* @__PURE__ */ t.createElement("span", {
|
|
116
117
|
className: "pointer-events-none flex items-center gap-1"
|
|
117
|
-
}, /* @__PURE__ */
|
|
118
|
+
}, /* @__PURE__ */ t.createElement("span", {
|
|
118
119
|
className: "text-[var(--color-white)]"
|
|
119
|
-
}, l?.label), /* @__PURE__ */
|
|
120
|
+
}, l?.label), /* @__PURE__ */ t.createElement(A, {
|
|
120
121
|
name: "chevron",
|
|
121
122
|
rotation: e ? "180" : "0",
|
|
122
|
-
stroke:
|
|
123
|
-
})) : /* @__PURE__ */
|
|
123
|
+
stroke: T ? "var(--color-gray-100)" : "var(--color-white)"
|
|
124
|
+
})) : /* @__PURE__ */ t.createElement("span", {
|
|
124
125
|
className: "pointer-events-none"
|
|
125
|
-
}, /* @__PURE__ */
|
|
126
|
+
}, /* @__PURE__ */ t.createElement(A, {
|
|
126
127
|
name: "kebab-menu",
|
|
127
|
-
fill:
|
|
128
|
+
fill: T ? "var(--color-gray-900)" : "var(--color-gray-700)"
|
|
128
129
|
})));
|
|
129
130
|
},
|
|
130
131
|
renderPopoverContents: ({
|
|
131
132
|
closePopoverCb: e
|
|
132
|
-
}) => /* @__PURE__ */
|
|
133
|
-
items: c.map((
|
|
134
|
-
id:
|
|
135
|
-
label:
|
|
136
|
-
automationId:
|
|
133
|
+
}) => /* @__PURE__ */ t.createElement(V, {
|
|
134
|
+
items: c.map((r) => ({
|
|
135
|
+
id: r?.id,
|
|
136
|
+
label: r?.label,
|
|
137
|
+
automationId: r?.automationId || r?.id,
|
|
137
138
|
onClick: () => {
|
|
138
|
-
|
|
139
|
+
D(r), e();
|
|
139
140
|
}
|
|
140
141
|
}))
|
|
141
142
|
})
|
|
142
|
-
})),
|
|
143
|
+
})), k && /* @__PURE__ */ t.createElement("div", {
|
|
143
144
|
className: "se-design-tabs-content"
|
|
144
|
-
}, o.map((e) => /* @__PURE__ */
|
|
145
|
+
}, o.map((e) => /* @__PURE__ */ t.createElement("div", d({
|
|
145
146
|
key: e.id
|
|
146
|
-
},
|
|
147
|
-
className: `tab-content ${
|
|
148
|
-
}),
|
|
147
|
+
}, j(e.id), {
|
|
148
|
+
className: `tab-content ${$(e, b) ? "block" : "hidden"}`
|
|
149
|
+
}), $(e, b) && e.renderTabContent?.(e)))));
|
|
149
150
|
};
|
|
150
151
|
export {
|
|
151
|
-
|
|
152
|
+
oe as Tabs
|
|
152
153
|
};
|
|
153
154
|
//# sourceMappingURL=index29.js.map
|
package/dist/index29.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index29.js","sources":["../src/components/Tabs/index.tsx"],"sourcesContent":["import React, { FC, ReactNode, useState, useEffect, useMemo, useRef } from 'react';\nimport { Icon } from '../Icon';\nimport { Popover } from '../Popover';\nimport { MenuList } from '../MenuList';\nimport { useStableId } from '../../utils/useStableId';\nimport { useTabsA11y, getPanelId } from '../../utils/a11y';\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 ariaLabel?: string;\n}\ninterface TabsProps {\n defaultActiveTab?: string;\n tabs: TabProps[];\n onTabChange?: (tabId: string) => void;\n primaryTabCount?: number; // prop for controlling primary tabs\n headingLevel?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'span'; // heading tag to render single tab as a heading element when only one tab is present\n automationId?: string;\n id?: string; // custom ID for baseId (passed to useStableId)\n ariaLabel?: string; // Accessible name when no visible label exists\n ariaLabelledBy?: string; // ID of element that labels this tablist (preferred over ariaLabel)\n panelId?: string; // When consumer manages a single external panel, pass its id here\n}\n\nexport const Tabs: FC<TabsProps> = ({\n defaultActiveTab,\n tabs,\n onTabChange,\n primaryTabCount,\n headingLevel: HeadingTag,\n id,\n ariaLabel = 'Tabs',\n ariaLabelledBy,\n panelId\n}) => {\n const defaultTabId = defaultActiveTab || (tabs[0] ? tabs[0].id : '');\n const [activeTab, setActiveTab] = useState(defaultTabId);\n const [isIconTabHover, setIsIconTabHover] = useState(false);\n\n const visibleTabCount = 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 // Only render internal panels if at least one tab provides content via renderTabContent\n const hasPanelContent = tabs.some(t => t.renderTabContent);\n\n // A11y setup\n const baseId = useStableId(id, 'tabs');\n const itemIds = useMemo(() => {\n const enabledVisibleTabs = visibleTabs.filter(t => !t.disabled);\n const enabledOverflowTabs = overflowTabs.filter(t => !t.disabled);\n const visibleIds = enabledVisibleTabs.map(t => t.id);\n return enabledOverflowTabs.length > 0 ? [...visibleIds, 'overflow'] : visibleIds;\n }, [visibleTabs, overflowTabs]);\n\n const { getTabProps, getPanelProps, getTabListProps, handleKeyDown, setFocusedTabId } = useTabsA11y({\n itemIds,\n activeItem: activeTab,\n orientation: 'horizontal',\n idBase: baseId,\n includePanelLinks: hasPanelContent || !!panelId,\n externalPanelId: panelId\n });\n\n // Ref for the overflow button div — needed to return focus after menu closes\n const overflowDivRef = useRef<HTMLDivElement>(null);\n // Track whether the overflow popover was opened via keyboard — only return focus\n // programmatically in that case (mouse-opened popovers should not trigger :focus-visible on close)\n const wasKeyboardOpenedRef = useRef(false);\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 (HeadingTag && tabs.length === 1) {\n const singleTab = tabs[0];\n return (\n <>\n <HeadingTag className=\"se-design-tabs se-design-tabs-heading\">\n {singleTab.label}\n </HeadingTag>\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\n className=\"se-design-tabs flex items-stretch relative border rounded-md border-[var(--color-gray-400)] w-fit\"\n data-automation-id=\"tabs-container\"\n {...getTabListProps({ ariaLabel, ariaLabelledBy })}\n >\n {visibleTabs.map((tab) => {\n const isActive = activeTab === tab.id;\n const isDisabled = !!tab.disabled;\n const tabProps = getTabProps(tab.id);\n return (\n <button\n type=\"button\"\n key={tab.id}\n {...tabProps}\n disabled={isDisabled}\n aria-label={tab.ariaLabel}\n onFocus={() => !isDisabled && setFocusedTabId(tab.id)}\n onKeyDown={handleKeyDown}\n onClick={() => handleTabClick(tab)}\n className={`se-design-tab-item flex items-center text-base px-3 py-0.5 min-w-0 border-l first:border-l-0 first:rounded-l-[0.3rem] last:rounded-r-[0.3rem] border-[var(--color-gray-400)] ${!isDisabled ? 'focus-outline' : ''} ${\n isDisabled\n ? 'text-[var(--color-gray-400)] cursor-not-allowed'\n : isActive\n ? 'se-design-tab-item-active text-[var(--color-white)] bg-[var(--color-blue-500)] font-medium hover:cursor-pointer'\n : 'text-[var(--color-gray-700)] font-normal hover:bg-[var(--color-gray-50)] hover:text-[var(--color-gray-900)] cursor-pointer transition-all duration-200 ease-in-out'\n }`}\n data-automation-id={`tab-item-${tab.automationId || tab.id || ''}`}\n >\n {tab.label}\n </button>\n );\n })}\n\n {overflowTabs.length > 0 && (\n <Popover\n className=\"se-design-overflow-tabs\"\n position=\"bottom-left\"\n noBorder\n disableClickToggle={true}\n onPopoverToggle={(isOpen) => {\n if (!isOpen) {\n if (wasKeyboardOpenedRef.current) overflowDivRef.current?.focus();\n wasKeyboardOpenedRef.current = false;\n }\n }}\n renderPopoverSrcElement={({ displayPopover, togglePopover }) => {\n const overflowTabProps = getTabProps('overflow');\n const overflowAriaControls = activeOverflowTab\n ? getPanelId(activeOverflowTab.id, baseId)\n : undefined;\n\n return (\n <div\n {...overflowTabProps}\n ref={(el) => { overflowDivRef.current = el; overflowTabProps.ref(el); }}\n aria-selected={!!activeOverflowTab}\n aria-label={activeOverflowTab?.label ? undefined : `More tabs (${overflowTabs.length})`}\n aria-controls={overflowAriaControls}\n aria-haspopup=\"true\"\n aria-expanded={displayPopover}\n onClick={() => { wasKeyboardOpenedRef.current = false; togglePopover(true); }}\n onFocus={() => setFocusedTabId('overflow')}\n data-automation-id=\"tabs-kebab-menu\"\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {\n e.preventDefault();\n wasKeyboardOpenedRef.current = true;\n togglePopover(true);\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n wasKeyboardOpenedRef.current = true;\n togglePopover('last');\n } else {\n handleKeyDown(e);\n }\n }}\n className={`overflow-tabs-src-element focus-outline border-l px-3 py-0.5 rounded-r-md font-medium hover:cursor-pointer transition-all duration-200 ease-in-out ${\n displayPopover ? 'bg-[var(--color-blue-100)]' : ''\n } ${activeOverflowTab?.label ? 'bg-[var(--color-blue-500)]' : 'hover:bg-[var(--color-gray-50)]'}`}\n onMouseEnter={() => setIsIconTabHover(true)}\n onMouseLeave={() => setIsIconTabHover(false)}\n >\n {activeOverflowTab?.label ? (\n <span className=\"pointer-events-none flex items-center gap-1\">\n <span className=\"text-[var(--color-white)]\">{activeOverflowTab?.label}</span>\n <Icon\n name=\"chevron\"\n rotation={displayPopover ? '180' : '0'}\n stroke={isIconTabHover ? 'var(--color-gray-100)' : 'var(--color-white)'}\n />\n </span>\n ) : (\n <span className=\"pointer-events-none\">\n <Icon name=\"kebab-menu\" fill={isIconTabHover ? 'var(--color-gray-900)' : 'var(--color-gray-700)'} />\n </span>\n )}\n </div>\n );\n }}\n renderPopoverContents={({ closePopoverCb }) => (\n <MenuList\n items={overflowTabs.map((tab) => ({\n id: tab?.id,\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 {hasPanelContent && (\n <div className=\"se-design-tabs-content\">\n {tabs.map((tab) => (\n <div\n key={tab.id}\n {...getPanelProps(tab.id)}\n className={`tab-content ${isTabActive(tab, activeTab) ? 'block' : 'hidden'}`}\n >\n {isTabActive(tab, activeTab) && tab.renderTabContent?.(tab)}\n </div>\n ))}\n </div>\n )}\n </>\n );\n};\n"],"names":["Tabs","defaultActiveTab","tabs","onTabChange","primaryTabCount","headingLevel","HeadingTag","id","ariaLabel","ariaLabelledBy","panelId","defaultTabId","activeTab","setActiveTab","useState","isIconTabHover","setIsIconTabHover","visibleTabCount","length","visibleTabs","slice","overflowTabs","activeOverflowTab","find","tab","hasPanelContent","some","t","renderTabContent","baseId","useStableId","itemIds","useMemo","enabledVisibleTabs","filter","disabled","enabledOverflowTabs","visibleIds","map","getTabProps","getPanelProps","getTabListProps","handleKeyDown","setFocusedTabId","useTabsA11y","activeItem","orientation","idBase","includePanelLinks","externalPanelId","overflowDivRef","useRef","wasKeyboardOpenedRef","useEffect","handleTabClick","isTabActive","singleTab","createElement","React","Fragment","className","label","_extends","isActive","isDisabled","tabProps","type","key","onFocus","onKeyDown","onClick","automationId","Popover","position","noBorder","disableClickToggle","onPopoverToggle","isOpen","current","focus","renderPopoverSrcElement","displayPopover","togglePopover","overflowTabProps","overflowAriaControls","getPanelId","undefined","ref","el","e","preventDefault","onMouseEnter","onMouseLeave","Icon","name","rotation","stroke","fill","renderPopoverContents","closePopoverCb","MenuList","items"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index29.js","sources":["../src/components/Tabs/index.tsx"],"sourcesContent":["import React, { FC, ReactNode, useState, useEffect, useMemo, useRef } from 'react';\nimport { Icon } from '../Icon';\nimport { Popover } from '../Popover';\nimport { MenuList } from '../MenuList';\nimport { useStableId } from '../../utils/useStableId';\nimport { useTabsA11y, getPanelId } from '../../utils/a11y';\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 ariaLabel?: string;\n}\ninterface TabsProps {\n defaultActiveTab?: string;\n tabs: TabProps[];\n onTabChange?: (tabId: string) => void;\n primaryTabCount?: number; // prop for controlling primary tabs\n headingLevel?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'span'; // heading tag to render single tab as a heading element when only one tab is present\n automationId?: string;\n id?: string; // custom ID for baseId (passed to useStableId)\n ariaLabel?: string; // Accessible name when no visible label exists\n ariaLabelledBy?: string; // ID of element that labels this tablist (preferred over ariaLabel)\n panelId?: string; // When consumer manages a single external panel, pass its id here\n // Active-tab treatment: 'solid' (default) fills with brand blue; 'outline' keeps it white with a blue ring + label.\n appearance?: 'solid' | 'outline';\n}\n\nexport const Tabs: FC<TabsProps> = ({\n defaultActiveTab,\n tabs,\n onTabChange,\n primaryTabCount,\n headingLevel: HeadingTag,\n id,\n ariaLabel = 'Tabs',\n ariaLabelledBy,\n panelId,\n appearance = 'solid'\n}) => {\n const defaultTabId = defaultActiveTab || (tabs[0] ? tabs[0].id : '');\n // 'outline' active styling comes from .se-design-tabs--outline in style.scss, so the active button omits the solid fill/text utilities.\n const activeTabClassName =\n appearance === 'outline'\n ? 'se-design-tab-item-active font-medium hover:cursor-pointer'\n : 'se-design-tab-item-active text-[var(--color-white)] bg-[var(--color-blue-500)] font-medium hover:cursor-pointer';\n const [activeTab, setActiveTab] = useState(defaultTabId);\n const [isIconTabHover, setIsIconTabHover] = useState(false);\n\n const visibleTabCount = 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 // Only render internal panels if at least one tab provides content via renderTabContent\n const hasPanelContent = tabs.some(t => t.renderTabContent);\n\n // A11y setup\n const baseId = useStableId(id, 'tabs');\n const itemIds = useMemo(() => {\n const enabledVisibleTabs = visibleTabs.filter(t => !t.disabled);\n const enabledOverflowTabs = overflowTabs.filter(t => !t.disabled);\n const visibleIds = enabledVisibleTabs.map(t => t.id);\n return enabledOverflowTabs.length > 0 ? [...visibleIds, 'overflow'] : visibleIds;\n }, [visibleTabs, overflowTabs]);\n\n const { getTabProps, getPanelProps, getTabListProps, handleKeyDown, setFocusedTabId } = useTabsA11y({\n itemIds,\n activeItem: activeTab,\n orientation: 'horizontal',\n idBase: baseId,\n includePanelLinks: hasPanelContent || !!panelId,\n externalPanelId: panelId\n });\n\n // Ref for the overflow button div — needed to return focus after menu closes\n const overflowDivRef = useRef<HTMLDivElement>(null);\n // Track whether the overflow popover was opened via keyboard — only return focus\n // programmatically in that case (mouse-opened popovers should not trigger :focus-visible on close)\n const wasKeyboardOpenedRef = useRef(false);\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 (HeadingTag && tabs.length === 1) {\n const singleTab = tabs[0];\n return (\n <>\n <HeadingTag className=\"se-design-tabs se-design-tabs-heading\">\n {singleTab.label}\n </HeadingTag>\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\n className={`se-design-tabs flex items-stretch relative border rounded-md border-[var(--color-gray-400)] w-fit ${\n appearance === 'outline' ? 'se-design-tabs--outline' : ''\n }`}\n data-automation-id=\"tabs-container\"\n {...getTabListProps({ ariaLabel, ariaLabelledBy })}\n >\n {visibleTabs.map((tab) => {\n const isActive = activeTab === tab.id;\n const isDisabled = !!tab.disabled;\n const tabProps = getTabProps(tab.id);\n return (\n <button\n type=\"button\"\n key={tab.id}\n {...tabProps}\n disabled={isDisabled}\n aria-label={tab.ariaLabel}\n onFocus={() => !isDisabled && setFocusedTabId(tab.id)}\n onKeyDown={handleKeyDown}\n onClick={() => handleTabClick(tab)}\n className={`se-design-tab-item flex items-center text-base px-3 py-0.5 min-w-0 border-l first:border-l-0 first:rounded-l-[0.3rem] last:rounded-r-[0.3rem] border-[var(--color-gray-400)] ${!isDisabled ? 'focus-outline' : ''} ${\n isDisabled\n ? 'text-[var(--color-gray-400)] cursor-not-allowed'\n : isActive\n ? activeTabClassName\n : 'text-[var(--color-gray-700)] font-normal hover:bg-[var(--color-gray-50)] hover:text-[var(--color-gray-900)] cursor-pointer transition-all duration-200 ease-in-out'\n }`}\n data-automation-id={`tab-item-${tab.automationId || tab.id || ''}`}\n >\n {tab.label}\n </button>\n );\n })}\n\n {overflowTabs.length > 0 && (\n <Popover\n className=\"se-design-overflow-tabs\"\n position=\"bottom-left\"\n noBorder\n disableClickToggle={true}\n onPopoverToggle={(isOpen) => {\n if (!isOpen) {\n if (wasKeyboardOpenedRef.current) overflowDivRef.current?.focus();\n wasKeyboardOpenedRef.current = false;\n }\n }}\n renderPopoverSrcElement={({ displayPopover, togglePopover }) => {\n const overflowTabProps = getTabProps('overflow');\n const overflowAriaControls = activeOverflowTab\n ? getPanelId(activeOverflowTab.id, baseId)\n : undefined;\n\n return (\n <div\n {...overflowTabProps}\n ref={(el) => { overflowDivRef.current = el; overflowTabProps.ref(el); }}\n aria-selected={!!activeOverflowTab}\n aria-label={activeOverflowTab?.label ? undefined : `More tabs (${overflowTabs.length})`}\n aria-controls={overflowAriaControls}\n aria-haspopup=\"true\"\n aria-expanded={displayPopover}\n onClick={() => { wasKeyboardOpenedRef.current = false; togglePopover(true); }}\n onFocus={() => setFocusedTabId('overflow')}\n data-automation-id=\"tabs-kebab-menu\"\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {\n e.preventDefault();\n wasKeyboardOpenedRef.current = true;\n togglePopover(true);\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n wasKeyboardOpenedRef.current = true;\n togglePopover('last');\n } else {\n handleKeyDown(e);\n }\n }}\n className={`overflow-tabs-src-element focus-outline border-l px-3 py-0.5 rounded-r-md font-medium hover:cursor-pointer transition-all duration-200 ease-in-out ${\n displayPopover ? 'bg-[var(--color-blue-100)]' : ''\n } ${activeOverflowTab?.label ? 'bg-[var(--color-blue-500)]' : 'hover:bg-[var(--color-gray-50)]'}`}\n onMouseEnter={() => setIsIconTabHover(true)}\n onMouseLeave={() => setIsIconTabHover(false)}\n >\n {activeOverflowTab?.label ? (\n <span className=\"pointer-events-none flex items-center gap-1\">\n <span className=\"text-[var(--color-white)]\">{activeOverflowTab?.label}</span>\n <Icon\n name=\"chevron\"\n rotation={displayPopover ? '180' : '0'}\n stroke={isIconTabHover ? 'var(--color-gray-100)' : 'var(--color-white)'}\n />\n </span>\n ) : (\n <span className=\"pointer-events-none\">\n <Icon name=\"kebab-menu\" fill={isIconTabHover ? 'var(--color-gray-900)' : 'var(--color-gray-700)'} />\n </span>\n )}\n </div>\n );\n }}\n renderPopoverContents={({ closePopoverCb }) => (\n <MenuList\n items={overflowTabs.map((tab) => ({\n id: tab?.id,\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 {hasPanelContent && (\n <div className=\"se-design-tabs-content\">\n {tabs.map((tab) => (\n <div\n key={tab.id}\n {...getPanelProps(tab.id)}\n className={`tab-content ${isTabActive(tab, activeTab) ? 'block' : 'hidden'}`}\n >\n {isTabActive(tab, activeTab) && tab.renderTabContent?.(tab)}\n </div>\n ))}\n </div>\n )}\n </>\n );\n};\n"],"names":["Tabs","defaultActiveTab","tabs","onTabChange","primaryTabCount","headingLevel","HeadingTag","id","ariaLabel","ariaLabelledBy","panelId","appearance","defaultTabId","activeTabClassName","activeTab","setActiveTab","useState","isIconTabHover","setIsIconTabHover","visibleTabCount","length","visibleTabs","slice","overflowTabs","activeOverflowTab","find","tab","hasPanelContent","some","t","renderTabContent","baseId","useStableId","itemIds","useMemo","enabledVisibleTabs","filter","disabled","enabledOverflowTabs","visibleIds","map","getTabProps","getPanelProps","getTabListProps","handleKeyDown","setFocusedTabId","useTabsA11y","activeItem","orientation","idBase","includePanelLinks","externalPanelId","overflowDivRef","useRef","wasKeyboardOpenedRef","useEffect","handleTabClick","isTabActive","singleTab","createElement","React","Fragment","className","label","_extends","isActive","isDisabled","tabProps","type","key","onFocus","onKeyDown","onClick","automationId","Popover","position","noBorder","disableClickToggle","onPopoverToggle","isOpen","current","focus","renderPopoverSrcElement","displayPopover","togglePopover","overflowTabProps","overflowAriaControls","getPanelId","undefined","ref","el","e","preventDefault","onMouseEnter","onMouseLeave","Icon","name","rotation","stroke","fill","renderPopoverContents","closePopoverCb","MenuList","items"],"mappings":"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"}
|
package/dist/index30.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import e, { forwardRef as K } from "react";
|
|
2
2
|
import { Icon as M } from "./index6.js";
|
|
3
3
|
import { Button as d } from "./index4.js";
|
|
4
|
-
import { useStableId as B } from "./
|
|
4
|
+
import { useStableId as B } from "./index206.js";
|
|
5
5
|
import { getRegionAttributes as Q } from "./index66.js";
|
|
6
6
|
import { useAccessiblePress as U } from "./index67.js";
|
|
7
7
|
import "./index72.js";
|
package/dist/index33.js
CHANGED
package/dist/index35.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import e, { useState as h, useEffect as E } from "react";
|
|
2
2
|
import { Icon as N } from "./index6.js";
|
|
3
|
-
import { useStableId as $ } from "./
|
|
3
|
+
import { useStableId as $ } from "./index206.js";
|
|
4
4
|
import { getRegionAttributes as I } from "./index66.js";
|
|
5
5
|
import { useAccessiblePress as _ } from "./index67.js";
|
|
6
6
|
import "./index72.js";
|
package/dist/index36.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import e, { useState as k, useEffect as w } from "react";
|
|
2
2
|
import { Icon as x } from "./index6.js";
|
|
3
|
-
import { useStableId as F } from "./
|
|
3
|
+
import { useStableId as F } from "./index206.js";
|
|
4
4
|
import { getA11yNameAttributes as P } from "./index81.js";
|
|
5
5
|
import { getRegionAttributes as V } from "./index66.js";
|
|
6
6
|
import { useAccessiblePress as q } from "./index67.js";
|
package/dist/index37.js
CHANGED
|
@@ -1,58 +1,82 @@
|
|
|
1
|
-
import a, { useState as
|
|
1
|
+
import a, { useState as w, useRef as $ } from "react";
|
|
2
2
|
/* empty css */
|
|
3
|
-
import { Icon as
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
3
|
+
import { Icon as A } from "./index6.js";
|
|
4
|
+
import { getA11yNameAttributes as B } from "./index81.js";
|
|
5
|
+
import "./index72.js";
|
|
6
|
+
import { useStableId as D } from "./index206.js";
|
|
7
|
+
function c() {
|
|
8
|
+
return c = Object.assign ? Object.assign.bind() : function(r) {
|
|
9
|
+
for (var n = 1; n < arguments.length; n++) {
|
|
10
|
+
var i = arguments[n];
|
|
11
|
+
for (var s in i) ({}).hasOwnProperty.call(i, s) && (r[s] = i[s]);
|
|
12
|
+
}
|
|
13
|
+
return r;
|
|
14
|
+
}, c.apply(null, arguments);
|
|
15
|
+
}
|
|
16
|
+
function V({
|
|
17
|
+
value: r,
|
|
18
|
+
onChange: n,
|
|
19
|
+
placeholder: i,
|
|
20
|
+
className: s,
|
|
21
|
+
error: m,
|
|
22
|
+
errorMessage: y,
|
|
23
|
+
label: u,
|
|
24
|
+
ariaLabel: b,
|
|
25
|
+
ariaLabelledBy: E,
|
|
26
|
+
automationId: N = "",
|
|
27
|
+
commitOnBlur: I = !1
|
|
13
28
|
}) {
|
|
14
|
-
const [
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
29
|
+
const [o, p] = w([...r]), [l, g] = w(""), d = $(null), f = D(void 0, "input-with-tags-label"), k = B({
|
|
30
|
+
ariaLabel: b,
|
|
31
|
+
ariaLabelledBy: E,
|
|
32
|
+
internalLabelId: u ? f : void 0
|
|
33
|
+
}), h = (t) => {
|
|
34
|
+
const e = o.filter((O, _) => _ !== t);
|
|
35
|
+
p(e), n?.(e);
|
|
36
|
+
}, v = () => {
|
|
37
|
+
const t = l.trim();
|
|
38
|
+
if (!t) return;
|
|
39
|
+
const e = [...o, t];
|
|
40
|
+
p(e), g(""), n?.(e);
|
|
41
|
+
}, T = (t) => {
|
|
42
|
+
t.key === "Enter" && l.trim() ? (t.preventDefault(), v()) : t.key === "Backspace" && l === "" && o.length > 0 && h(o.length - 1);
|
|
43
|
+
}, R = () => {
|
|
44
|
+
I && v();
|
|
23
45
|
};
|
|
24
46
|
return /* @__PURE__ */ a.createElement("div", {
|
|
25
47
|
className: "input-with-tags-main-container",
|
|
26
|
-
"data-automation-id":
|
|
27
|
-
},
|
|
48
|
+
"data-automation-id": N
|
|
49
|
+
}, u && /* @__PURE__ */ a.createElement("div", {
|
|
50
|
+
id: f,
|
|
28
51
|
className: "label-container"
|
|
29
|
-
},
|
|
30
|
-
className: `input-with-tags-container ${
|
|
31
|
-
onClick: () =>
|
|
32
|
-
},
|
|
52
|
+
}, u), /* @__PURE__ */ a.createElement("div", {
|
|
53
|
+
className: `input-with-tags-container ${m ? "input-with-tags-error" : ""} ${s}`,
|
|
54
|
+
onClick: () => d.current?.focus()
|
|
55
|
+
}, o.map((t, e) => /* @__PURE__ */ a.createElement("span", {
|
|
33
56
|
key: e,
|
|
34
57
|
className: "tag-in-inputwithtags",
|
|
35
58
|
"data-automation-id": `input-tag-${e}`
|
|
36
|
-
}, t, /* @__PURE__ */ a.createElement(
|
|
59
|
+
}, t, /* @__PURE__ */ a.createElement(A, {
|
|
37
60
|
name: "close",
|
|
38
61
|
className: "close-icon-in-inputwithtags",
|
|
39
62
|
ariaLabel: `Remove tag ${t}`,
|
|
40
|
-
onClick: () =>
|
|
63
|
+
onClick: () => h(e),
|
|
41
64
|
shouldStopPropagation: !0
|
|
42
|
-
}))), /* @__PURE__ */ a.createElement("input", {
|
|
65
|
+
}))), /* @__PURE__ */ a.createElement("input", c({
|
|
43
66
|
className: "input-with-tags-input",
|
|
44
|
-
ref:
|
|
67
|
+
ref: d,
|
|
45
68
|
type: "text",
|
|
46
|
-
value:
|
|
47
|
-
onChange: (t) =>
|
|
48
|
-
onKeyDown:
|
|
49
|
-
|
|
69
|
+
value: l,
|
|
70
|
+
onChange: (t) => g(t.target.value),
|
|
71
|
+
onKeyDown: T,
|
|
72
|
+
onBlur: R,
|
|
73
|
+
placeholder: i,
|
|
50
74
|
"data-automation-id": "input-with-tags-input-field"
|
|
51
|
-
})),
|
|
75
|
+
}, k))), m && /* @__PURE__ */ a.createElement("div", {
|
|
52
76
|
className: "error-message"
|
|
53
|
-
},
|
|
77
|
+
}, y));
|
|
54
78
|
}
|
|
55
79
|
export {
|
|
56
|
-
|
|
80
|
+
V as InputWithTags
|
|
57
81
|
};
|
|
58
82
|
//# sourceMappingURL=index37.js.map
|
package/dist/index37.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index37.js","sources":["../src/components/InputWithTags/index.tsx"],"sourcesContent":["import React, { useState, KeyboardEvent, useRef } from \"react\";\nimport './styles.scss';\nimport { Icon } from '../Icon';\n\nexport interface InputWithTagsProps {\n value: string[];\n onChange?: (tags: string[]) => void;\n placeholder?: string;\n className?: string;\n error?: boolean;\n errorMessage?: string;\n label?: string;\n automationId?: string;\n}\n\nexport function InputWithTags({
|
|
1
|
+
{"version":3,"file":"index37.js","sources":["../src/components/InputWithTags/index.tsx"],"sourcesContent":["import React, { useState, KeyboardEvent, useRef } from \"react\";\nimport './styles.scss';\nimport { Icon } from '../Icon';\nimport { getA11yNameAttributes } from '../../utils/a11y';\nimport { useStableId } from '../../utils/useStableId';\n\nexport interface InputWithTagsProps {\n value: string[];\n onChange?: (tags: string[]) => void;\n placeholder?: string;\n className?: string;\n error?: boolean;\n errorMessage?: string;\n label?: string;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n automationId?: string;\n commitOnBlur?: boolean;\n}\n\nexport function InputWithTags({\n value,\n onChange,\n placeholder,\n className,\n error,\n errorMessage,\n label,\n ariaLabel,\n ariaLabelledBy,\n automationId = '',\n commitOnBlur = false\n}: InputWithTagsProps) {\n const [tags, setTags] = useState<string[]>([...value]);\n const [inputValue, setInputValue] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n const labelId = useStableId(undefined, 'input-with-tags-label');\n const inputA11yProps = getA11yNameAttributes({\n ariaLabel,\n ariaLabelledBy,\n internalLabelId: label ? labelId : undefined\n });\n\n const removeTag = (indexToRemove: number) => {\n const newTags = tags.filter((_, i) => i !== indexToRemove);\n setTags(newTags);\n onChange?.(newTags);\n };\n\n const commitInput = () => {\n const trimmed = inputValue.trim();\n if (!trimmed) return;\n const newTags = [...tags, trimmed];\n setTags(newTags);\n setInputValue(\"\");\n onChange?.(newTags);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' && inputValue.trim()) {\n e.preventDefault();\n commitInput();\n } else if (e.key === 'Backspace' && inputValue === \"\" && tags.length > 0) {\n removeTag(tags.length - 1);\n }\n };\n\n // When enabled, commit a half-typed tag when focus leaves the input so users\n // don't lose the value by tabbing/clicking away without pressing Enter.\n const handleBlur = () => {\n if (commitOnBlur) commitInput();\n };\n\n return (\n <div className=\"input-with-tags-main-container\" data-automation-id={automationId}>\n {label && <div id={labelId} className=\"label-container\">{label}</div>}\n <div \n className={`input-with-tags-container ${error ? 'input-with-tags-error' : ''} ${className}`} \n onClick={() => inputRef.current?.focus()}\n >\n {tags.map((tag, index) => (\n <span key={index} className=\"tag-in-inputwithtags\" data-automation-id={`input-tag-${index}`}>\n {tag} \n <Icon\n name=\"close\"\n className=\"close-icon-in-inputwithtags\"\n ariaLabel={`Remove tag ${tag}`}\n onClick={() => removeTag(index)}\n shouldStopPropagation\n />\n </span>\n ))}\n <input\n className=\"input-with-tags-input\"\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n placeholder={placeholder}\n data-automation-id=\"input-with-tags-input-field\"\n {...inputA11yProps}\n />\n </div>\n {error && <div className=\"error-message\">{errorMessage}</div>}\n </div>\n );\n}"],"names":["InputWithTags","value","onChange","placeholder","className","error","errorMessage","label","ariaLabel","ariaLabelledBy","automationId","commitOnBlur","tags","setTags","useState","inputValue","setInputValue","inputRef","useRef","labelId","useStableId","undefined","inputA11yProps","getA11yNameAttributes","internalLabelId","removeTag","indexToRemove","newTags","filter","_","i","commitInput","trimmed","trim","handleKeyDown","e","key","preventDefault","length","handleBlur","React","createElement","id","onClick","current","focus","map","tag","index","Icon","name","shouldStopPropagation","_extends","ref","type","target","onKeyDown","onBlur"],"mappings":"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"}
|