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.
Files changed (301) hide show
  1. package/dist/assets/icons/cloud-check.svg +4 -0
  2. package/dist/assets/style.css +1 -1
  3. package/dist/components/Icon/index.d.ts +5 -0
  4. package/dist/components/InputWithTags/index.d.ts +4 -1
  5. package/dist/components/SidebarOverlay/index.d.ts +0 -41
  6. package/dist/components/Tabs/index.d.ts +1 -0
  7. package/dist/components/Tooltip/index.d.ts +5 -1
  8. package/dist/index112.js +1 -1
  9. package/dist/index112.js.map +1 -1
  10. package/dist/index113.js +2 -2
  11. package/dist/index113.js.map +1 -1
  12. package/dist/index114.js +1 -1
  13. package/dist/index114.js.map +1 -1
  14. package/dist/index115.js +2 -2
  15. package/dist/index115.js.map +1 -1
  16. package/dist/index116.js +1 -1
  17. package/dist/index116.js.map +1 -1
  18. package/dist/index117.js +1 -1
  19. package/dist/index117.js.map +1 -1
  20. package/dist/index118.js +2 -2
  21. package/dist/index118.js.map +1 -1
  22. package/dist/index119.js +1 -1
  23. package/dist/index119.js.map +1 -1
  24. package/dist/index120.js +2 -2
  25. package/dist/index120.js.map +1 -1
  26. package/dist/index121.js +1 -1
  27. package/dist/index121.js.map +1 -1
  28. package/dist/index122.js +1 -1
  29. package/dist/index122.js.map +1 -1
  30. package/dist/index123.js +1 -1
  31. package/dist/index123.js.map +1 -1
  32. package/dist/index124.js +1 -1
  33. package/dist/index124.js.map +1 -1
  34. package/dist/index125.js +2 -2
  35. package/dist/index125.js.map +1 -1
  36. package/dist/index126.js +1 -1
  37. package/dist/index126.js.map +1 -1
  38. package/dist/index127.js +2 -2
  39. package/dist/index127.js.map +1 -1
  40. package/dist/index128.js +2 -2
  41. package/dist/index128.js.map +1 -1
  42. package/dist/index129.js +1 -1
  43. package/dist/index129.js.map +1 -1
  44. package/dist/index130.js +2 -2
  45. package/dist/index130.js.map +1 -1
  46. package/dist/index131.js +2 -2
  47. package/dist/index131.js.map +1 -1
  48. package/dist/index132.js +1 -1
  49. package/dist/index132.js.map +1 -1
  50. package/dist/index133.js +1 -1
  51. package/dist/index133.js.map +1 -1
  52. package/dist/index134.js +1 -1
  53. package/dist/index134.js.map +1 -1
  54. package/dist/index135.js +2 -2
  55. package/dist/index135.js.map +1 -1
  56. package/dist/index136.js +2 -2
  57. package/dist/index136.js.map +1 -1
  58. package/dist/index137.js +2 -2
  59. package/dist/index137.js.map +1 -1
  60. package/dist/index138.js +1 -1
  61. package/dist/index138.js.map +1 -1
  62. package/dist/index139.js +1 -1
  63. package/dist/index139.js.map +1 -1
  64. package/dist/index140.js +1 -1
  65. package/dist/index140.js.map +1 -1
  66. package/dist/index141.js +1 -1
  67. package/dist/index141.js.map +1 -1
  68. package/dist/index142.js +1 -1
  69. package/dist/index142.js.map +1 -1
  70. package/dist/index143.js +1 -1
  71. package/dist/index143.js.map +1 -1
  72. package/dist/index144.js +1 -1
  73. package/dist/index144.js.map +1 -1
  74. package/dist/index145.js +1 -1
  75. package/dist/index145.js.map +1 -1
  76. package/dist/index146.js +2 -2
  77. package/dist/index146.js.map +1 -1
  78. package/dist/index147.js +2 -2
  79. package/dist/index147.js.map +1 -1
  80. package/dist/index148.js +1 -1
  81. package/dist/index148.js.map +1 -1
  82. package/dist/index149.js +1 -1
  83. package/dist/index149.js.map +1 -1
  84. package/dist/index150.js +1 -1
  85. package/dist/index150.js.map +1 -1
  86. package/dist/index151.js +1 -1
  87. package/dist/index151.js.map +1 -1
  88. package/dist/index152.js +1 -1
  89. package/dist/index152.js.map +1 -1
  90. package/dist/index153.js +1 -1
  91. package/dist/index153.js.map +1 -1
  92. package/dist/index154.js +1 -1
  93. package/dist/index154.js.map +1 -1
  94. package/dist/index155.js +2 -2
  95. package/dist/index155.js.map +1 -1
  96. package/dist/index156.js +1 -1
  97. package/dist/index156.js.map +1 -1
  98. package/dist/index157.js +2 -2
  99. package/dist/index157.js.map +1 -1
  100. package/dist/index158.js +2 -2
  101. package/dist/index158.js.map +1 -1
  102. package/dist/index159.js +2 -2
  103. package/dist/index159.js.map +1 -1
  104. package/dist/index16.js +111 -107
  105. package/dist/index16.js.map +1 -1
  106. package/dist/index160.js +2 -2
  107. package/dist/index160.js.map +1 -1
  108. package/dist/index161.js +1 -1
  109. package/dist/index161.js.map +1 -1
  110. package/dist/index162.js +1 -1
  111. package/dist/index162.js.map +1 -1
  112. package/dist/index163.js +1 -1
  113. package/dist/index163.js.map +1 -1
  114. package/dist/index164.js +1 -1
  115. package/dist/index164.js.map +1 -1
  116. package/dist/index165.js +1 -1
  117. package/dist/index165.js.map +1 -1
  118. package/dist/index166.js +1 -1
  119. package/dist/index166.js.map +1 -1
  120. package/dist/index167.js +1 -1
  121. package/dist/index167.js.map +1 -1
  122. package/dist/index168.js +1 -1
  123. package/dist/index168.js.map +1 -1
  124. package/dist/index169.js +1 -1
  125. package/dist/index169.js.map +1 -1
  126. package/dist/index170.js +1 -1
  127. package/dist/index170.js.map +1 -1
  128. package/dist/index171.js +1 -1
  129. package/dist/index171.js.map +1 -1
  130. package/dist/index172.js +1 -1
  131. package/dist/index172.js.map +1 -1
  132. package/dist/index173.js +1 -1
  133. package/dist/index173.js.map +1 -1
  134. package/dist/index174.js +1 -1
  135. package/dist/index174.js.map +1 -1
  136. package/dist/index175.js +1 -1
  137. package/dist/index175.js.map +1 -1
  138. package/dist/index176.js +1 -1
  139. package/dist/index176.js.map +1 -1
  140. package/dist/index177.js +1 -1
  141. package/dist/index177.js.map +1 -1
  142. package/dist/index178.js +1 -1
  143. package/dist/index178.js.map +1 -1
  144. package/dist/index179.js +1 -1
  145. package/dist/index179.js.map +1 -1
  146. package/dist/index180.js +1 -1
  147. package/dist/index180.js.map +1 -1
  148. package/dist/index181.js +1 -1
  149. package/dist/index181.js.map +1 -1
  150. package/dist/index182.js +1 -1
  151. package/dist/index182.js.map +1 -1
  152. package/dist/index183.js +1 -1
  153. package/dist/index183.js.map +1 -1
  154. package/dist/index184.js +1 -1
  155. package/dist/index184.js.map +1 -1
  156. package/dist/index185.js +2 -2
  157. package/dist/index185.js.map +1 -1
  158. package/dist/index186.js +2 -2
  159. package/dist/index186.js.map +1 -1
  160. package/dist/index187.js +1 -1
  161. package/dist/index187.js.map +1 -1
  162. package/dist/index188.js +1 -1
  163. package/dist/index188.js.map +1 -1
  164. package/dist/index189.js +2 -2
  165. package/dist/index189.js.map +1 -1
  166. package/dist/index190.js +2 -2
  167. package/dist/index190.js.map +1 -1
  168. package/dist/index191.js +1 -1
  169. package/dist/index191.js.map +1 -1
  170. package/dist/index192.js +1 -1
  171. package/dist/index192.js.map +1 -1
  172. package/dist/index193.js +1 -1
  173. package/dist/index193.js.map +1 -1
  174. package/dist/index194.js +1 -1
  175. package/dist/index194.js.map +1 -1
  176. package/dist/index195.js +1 -1
  177. package/dist/index195.js.map +1 -1
  178. package/dist/index196.js +1 -1
  179. package/dist/index196.js.map +1 -1
  180. package/dist/index197.js +1 -1
  181. package/dist/index197.js.map +1 -1
  182. package/dist/index198.js +1 -1
  183. package/dist/index198.js.map +1 -1
  184. package/dist/index199.js +1 -1
  185. package/dist/index199.js.map +1 -1
  186. package/dist/index200.js +2 -2
  187. package/dist/index200.js.map +1 -1
  188. package/dist/index201.js +2 -2
  189. package/dist/index201.js.map +1 -1
  190. package/dist/index202.js +2 -2
  191. package/dist/index202.js.map +1 -1
  192. package/dist/index203.js +2 -149
  193. package/dist/index203.js.map +1 -1
  194. package/dist/index204.js +149 -9
  195. package/dist/index204.js.map +1 -1
  196. package/dist/index205.js +8 -5
  197. package/dist/index205.js.map +1 -1
  198. package/dist/index206.js +5 -4
  199. package/dist/index206.js.map +1 -1
  200. package/dist/index207.js +1 -1
  201. package/dist/index223.js +8 -0
  202. package/dist/index223.js.map +1 -0
  203. package/dist/{index224.js → index225.js} +1 -1
  204. package/dist/{index224.js.map → index225.js.map} +1 -1
  205. package/dist/index23.js +16 -16
  206. package/dist/index23.js.map +1 -1
  207. package/dist/{index232.js → index233.js} +1 -1
  208. package/dist/{index232.js.map → index233.js.map} +1 -1
  209. package/dist/{index235.js → index236.js} +1 -1
  210. package/dist/{index235.js.map → index236.js.map} +1 -1
  211. package/dist/index245.js +169 -3
  212. package/dist/index245.js.map +1 -1
  213. package/dist/index246.js +7 -0
  214. package/dist/index246.js.map +1 -0
  215. package/dist/index248.js +18 -9
  216. package/dist/index248.js.map +1 -1
  217. package/dist/index249.js +9 -9
  218. package/dist/index249.js.map +1 -1
  219. package/dist/index25.js +2 -1
  220. package/dist/index25.js.map +1 -1
  221. package/dist/index250.js +9 -4
  222. package/dist/index250.js.map +1 -1
  223. package/dist/index251.js +5 -170
  224. package/dist/index251.js.map +1 -1
  225. package/dist/index252.js +170 -11
  226. package/dist/index252.js.map +1 -1
  227. package/dist/index253.js +11 -6
  228. package/dist/index253.js.map +1 -1
  229. package/dist/index254.js +5 -5
  230. package/dist/index254.js.map +1 -1
  231. package/dist/index255.js +5 -37
  232. package/dist/index255.js.map +1 -1
  233. package/dist/index256.js +38 -2
  234. package/dist/index256.js.map +1 -1
  235. package/dist/index257.js +2 -8
  236. package/dist/index257.js.map +1 -1
  237. package/dist/index258.js +7 -326
  238. package/dist/index258.js.map +1 -1
  239. package/dist/index259.js +324 -47
  240. package/dist/index259.js.map +1 -1
  241. package/dist/index260.js +50 -2
  242. package/dist/index260.js.map +1 -1
  243. package/dist/index261.js +2 -76
  244. package/dist/index261.js.map +1 -1
  245. package/dist/index262.js +65 -82
  246. package/dist/index262.js.map +1 -1
  247. package/dist/index263.js +89 -48
  248. package/dist/index263.js.map +1 -1
  249. package/dist/index264.js +51 -7
  250. package/dist/index264.js.map +1 -1
  251. package/dist/index265.js +7 -4
  252. package/dist/index265.js.map +1 -1
  253. package/dist/index266.js +4 -51
  254. package/dist/index266.js.map +1 -1
  255. package/dist/index267.js +52 -2
  256. package/dist/index267.js.map +1 -1
  257. package/dist/index268.js +2 -2
  258. package/dist/index269.js +5 -0
  259. package/dist/index269.js.map +1 -0
  260. package/dist/index28.js +88 -149
  261. package/dist/index28.js.map +1 -1
  262. package/dist/index29.js +72 -71
  263. package/dist/index29.js.map +1 -1
  264. package/dist/index30.js +1 -1
  265. package/dist/index33.js +1 -1
  266. package/dist/index35.js +1 -1
  267. package/dist/index36.js +1 -1
  268. package/dist/index37.js +61 -37
  269. package/dist/index37.js.map +1 -1
  270. package/dist/index38.js +163 -162
  271. package/dist/index38.js.map +1 -1
  272. package/dist/index39.js +55 -51
  273. package/dist/index39.js.map +1 -1
  274. package/dist/index4.js +66 -61
  275. package/dist/index4.js.map +1 -1
  276. package/dist/index40.js +1 -1
  277. package/dist/index45.js +39 -38
  278. package/dist/index45.js.map +1 -1
  279. package/dist/index46.js +52 -51
  280. package/dist/index46.js.map +1 -1
  281. package/dist/index49.js +1 -1
  282. package/dist/index51.js +1 -1
  283. package/dist/index52.js +1 -1
  284. package/dist/index53.js +1 -1
  285. package/dist/index57.js +1 -1
  286. package/dist/index6.js +305 -299
  287. package/dist/index6.js.map +1 -1
  288. package/dist/index61.js +1 -1
  289. package/dist/index63.js +1 -1
  290. package/dist/index65.js +1 -1
  291. package/dist/index7.js +1 -1
  292. package/dist/index79.js +1 -1
  293. package/dist/index81.js +9 -7
  294. package/dist/index81.js.map +1 -1
  295. package/dist/index9.js +20 -20
  296. package/dist/index9.js.map +1 -1
  297. package/package.json +1 -1
  298. package/dist/index244.js +0 -173
  299. package/dist/index244.js.map +0 -1
  300. package/dist/index247.js +0 -22
  301. package/dist/index247.js.map +0 -1
package/dist/index29.js CHANGED
@@ -1,10 +1,10 @@
1
- import r, { useState as $, useMemo as j, useRef as L, useEffect as B } from "react";
2
- import { Icon as O } from "./index6.js";
3
- import { Popover as z } from "./index19.js";
4
- import { MenuList as H } from "./index18.js";
5
- import { useStableId as U } from "./index205.js";
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 V, getPanelId as q } from "./index73.js";
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 re = ({
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: A,
25
- ariaLabel: F = "Tabs",
26
- ariaLabelledBy: M,
27
- panelId: p
24
+ id: F,
25
+ ariaLabel: M = "Tabs",
26
+ ariaLabelledBy: K,
27
+ panelId: p,
28
+ appearance: h = "solid"
28
29
  }) => {
29
- const K = i || (o[0] ? o[0].id : ""), [b, h] = $(K), [w, y] = $(!1), T = u ?? o?.length, f = o.slice(0, T), c = o.slice(T), l = c.find((e) => e.id === b), E = o.some((e) => e.renderTabContent), k = U(A, "tabs"), R = j(() => {
30
- const e = f.filter((s) => !s.disabled), t = c.filter((s) => !s.disabled), n = e.map((s) => s.id);
31
- return t.length > 0 ? [...n, "overflow"] : n;
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: x,
34
- getPanelProps: S,
35
- getTabListProps: _,
36
- handleKeyDown: I,
37
- setFocusedTabId: C
38
- } = V({
39
- itemIds: R,
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: k,
43
- includePanelLinks: E || !!p,
43
+ idBase: x,
44
+ includePanelLinks: k || !!p,
44
45
  externalPanelId: p
45
- }), N = L(null), v = L(!1);
46
- B(() => {
47
- h(i || "");
46
+ }), P = O(null), v = O(!1);
47
+ H(() => {
48
+ w(i || "");
48
49
  }, [i]);
49
- const P = (e) => {
50
- h(e?.id), m?.(e?.id);
51
- }, D = (e, t) => e.id === t;
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__ */ r.createElement(r.Fragment, null, /* @__PURE__ */ r.createElement(g, {
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__ */ r.createElement("div", {
57
+ }, e.label), /* @__PURE__ */ t.createElement("div", {
57
58
  className: "se-design-tabs-content"
58
- }, /* @__PURE__ */ r.createElement("div", {
59
+ }, /* @__PURE__ */ t.createElement("div", {
59
60
  className: "tab-content block"
60
61
  }, e?.renderTabContent && e?.renderTabContent(e))));
61
62
  }
62
- return /* @__PURE__ */ r.createElement(r.Fragment, null, /* @__PURE__ */ r.createElement("div", d({
63
- className: "se-design-tabs flex items-stretch relative border rounded-md border-[var(--color-gray-400)] w-fit",
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: F,
67
- ariaLabelledBy: M
66
+ }, B({
67
+ ariaLabel: M,
68
+ ariaLabelledBy: K
68
69
  })), f.map((e) => {
69
- const t = b === e.id, n = !!e.disabled, s = x(e.id);
70
- return /* @__PURE__ */ r.createElement("button", d({
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 && C(e.id),
77
- onKeyDown: I,
78
- onClick: () => P(e),
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" : t ? "se-design-tab-item-active text-[var(--color-white)] bg-[var(--color-blue-500)] font-medium hover:cursor-pointer" : "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"}`,
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__ */ r.createElement(z, {
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 && N.current?.focus(), v.current = !1);
89
+ e || (v.current && P.current?.focus(), v.current = !1);
89
90
  },
90
91
  renderPopoverSrcElement: ({
91
92
  displayPopover: e,
92
- togglePopover: t
93
+ togglePopover: r
93
94
  }) => {
94
- const n = x("overflow"), s = l ? q(l.id, k) : void 0;
95
- return /* @__PURE__ */ r.createElement("div", d({}, n, {
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
- N.current = a, n.ref(a);
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, t(!0);
106
+ v.current = !1, r(!0);
106
107
  },
107
- onFocus: () => C("overflow"),
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, t(!0)) : a.key === "ArrowUp" ? (a.preventDefault(), v.current = !0, t("last")) : I(a);
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__ */ r.createElement("span", {
116
+ }), l?.label ? /* @__PURE__ */ t.createElement("span", {
116
117
  className: "pointer-events-none flex items-center gap-1"
117
- }, /* @__PURE__ */ r.createElement("span", {
118
+ }, /* @__PURE__ */ t.createElement("span", {
118
119
  className: "text-[var(--color-white)]"
119
- }, l?.label), /* @__PURE__ */ r.createElement(O, {
120
+ }, l?.label), /* @__PURE__ */ t.createElement(A, {
120
121
  name: "chevron",
121
122
  rotation: e ? "180" : "0",
122
- stroke: w ? "var(--color-gray-100)" : "var(--color-white)"
123
- })) : /* @__PURE__ */ r.createElement("span", {
123
+ stroke: T ? "var(--color-gray-100)" : "var(--color-white)"
124
+ })) : /* @__PURE__ */ t.createElement("span", {
124
125
  className: "pointer-events-none"
125
- }, /* @__PURE__ */ r.createElement(O, {
126
+ }, /* @__PURE__ */ t.createElement(A, {
126
127
  name: "kebab-menu",
127
- fill: w ? "var(--color-gray-900)" : "var(--color-gray-700)"
128
+ fill: T ? "var(--color-gray-900)" : "var(--color-gray-700)"
128
129
  })));
129
130
  },
130
131
  renderPopoverContents: ({
131
132
  closePopoverCb: e
132
- }) => /* @__PURE__ */ r.createElement(H, {
133
- items: c.map((t) => ({
134
- id: t?.id,
135
- label: t?.label,
136
- automationId: t?.automationId || t?.id,
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
- P(t), e();
139
+ D(r), e();
139
140
  }
140
141
  }))
141
142
  })
142
- })), E && /* @__PURE__ */ r.createElement("div", {
143
+ })), k && /* @__PURE__ */ t.createElement("div", {
143
144
  className: "se-design-tabs-content"
144
- }, o.map((e) => /* @__PURE__ */ r.createElement("div", d({
145
+ }, o.map((e) => /* @__PURE__ */ t.createElement("div", d({
145
146
  key: e.id
146
- }, S(e.id), {
147
- className: `tab-content ${D(e, b) ? "block" : "hidden"}`
148
- }), D(e, b) && e.renderTabContent?.(e)))));
147
+ }, j(e.id), {
148
+ className: `tab-content ${$(e, b) ? "block" : "hidden"}`
149
+ }), $(e, b) && e.renderTabContent?.(e)))));
149
150
  };
150
151
  export {
151
- re as Tabs
152
+ oe as Tabs
152
153
  };
153
154
  //# sourceMappingURL=index29.js.map
@@ -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 "./index205.js";
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
@@ -1,5 +1,5 @@
1
1
  import e, { useRef as y } from "react";
2
- import { useStableId as N } from "./index205.js";
2
+ import { useStableId as N } from "./index206.js";
3
3
  function I(a) {
4
4
  const {
5
5
  label: s,
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 "./index205.js";
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 "./index205.js";
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 p, useRef as N } from "react";
1
+ import a, { useState as w, useRef as $ } from "react";
2
2
  /* empty css */
3
- import { Icon as k } from "./index6.js";
4
- function D({
5
- value: g,
6
- onChange: s,
7
- placeholder: f,
8
- className: d,
9
- error: o,
10
- errorMessage: h,
11
- label: c,
12
- automationId: w = ""
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 [n, l] = p([...g]), [i, r] = p(""), u = N(null), m = (t) => {
15
- const e = n.filter((y, E) => E !== t);
16
- l(e), s?.(e);
17
- }, v = (t) => {
18
- if (t.key === "Enter" && i.trim()) {
19
- t.preventDefault();
20
- const e = [...n, i.trim()];
21
- l(e), r(""), s?.(e);
22
- } else t.key === "Backspace" && i === "" && n.length > 0 && m(n.length - 1);
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": w
27
- }, c && /* @__PURE__ */ a.createElement("div", {
48
+ "data-automation-id": N
49
+ }, u && /* @__PURE__ */ a.createElement("div", {
50
+ id: f,
28
51
  className: "label-container"
29
- }, c), /* @__PURE__ */ a.createElement("div", {
30
- className: `input-with-tags-container ${o ? "input-with-tags-error" : ""} ${d}`,
31
- onClick: () => u.current?.focus()
32
- }, n.map((t, e) => /* @__PURE__ */ a.createElement("span", {
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(k, {
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: () => m(e),
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: u,
67
+ ref: d,
45
68
  type: "text",
46
- value: i,
47
- onChange: (t) => r(t.target.value),
48
- onKeyDown: v,
49
- placeholder: f,
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
- })), o && /* @__PURE__ */ a.createElement("div", {
75
+ }, k))), m && /* @__PURE__ */ a.createElement("div", {
52
76
  className: "error-message"
53
- }, h));
77
+ }, y));
54
78
  }
55
79
  export {
56
- D as InputWithTags
80
+ V as InputWithTags
57
81
  };
58
82
  //# sourceMappingURL=index37.js.map
@@ -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({ \n value, \n onChange, \n placeholder, \n className, \n error, \n errorMessage, \n label,\n automationId = ''\n}: InputWithTagsProps) {\n const [tags, setTags] = useState<string[]>([...value]);\n const [inputValue, setInputValue] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n\n const removeTag = (indexToRemove: number) => {\n const newTags = tags.filter((_, i) => i !== indexToRemove);\n setTags(newTags);\n onChange?.(newTags);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' && inputValue.trim()) {\n e.preventDefault();\n const newTags = [...tags, inputValue.trim()];\n setTags(newTags);\n setInputValue(\"\");\n onChange?.(newTags);\n } else if (e.key === 'Backspace' && inputValue === \"\" && tags.length > 0) {\n removeTag(tags.length - 1);\n }\n };\n\n return (\n <div className=\"input-with-tags-main-container\" data-automation-id={automationId}>\n {label && <div 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 placeholder={placeholder}\n data-automation-id=\"input-with-tags-input-field\"\n />\n </div>\n {error && <div className=\"error-message\">{errorMessage}</div>}\n </div>\n );\n}"],"names":["React__default","useState","useRef","Icon","InputWithTags","value","onChange","placeholder","className","error","errorMessage","label","automationId","tags","setTags","inputValue","setInputValue","inputRef","removeTag","indexToRemove","newTags","filter","_","i","handleKeyDown","e","key","trim","preventDefault","length","React","createElement","onClick","current","focus","map","tag","index","name","ariaLabel","shouldStopPropagation","ref","type","target","onKeyDown"],"mappings":"AAeO,OAAAA,KAAA,YAAAC,GAAA,UAAAC,SAAA;AAAA,OAAA;AAAA,SAAA,QAAAC,SAAA;AAAA,SAASC,EAAc;AAAA,EAC1BC,OAAAA;AAAAA,EACAC,UAAAA;AAAAA,EACAC,aAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACAC,OAAAA;AAAAA,EACAC,cAAAA;AAAAA,EACAC,OAAAA;AAAAA,EACAC,cAAAA,IAAe;AACC,GAAG;AACnB,QAAM,CAACC,GAAMC,CAAO,IAAIb,EAAmB,CAAC,GAAGI,CAAK,CAAC,GAC/C,CAACU,GAAYC,CAAa,IAAIf,EAAS,EAAE,GACzCgB,IAAWf,EAAyB,IAAI,GAExCgB,IAAYA,CAACC,MAA0B;AACzC,UAAMC,IAAUP,EAAKQ,OAAO,CAACC,GAAGC,MAAMA,MAAMJ,CAAa;AACzDL,IAAAA,EAAQM,CAAO,GACfd,IAAWc,CAAO;AAAA,EACtB,GAEMI,IAAgBA,CAACC,MAAuC;AAC1D,QAAIA,EAAEC,QAAQ,WAAWX,EAAWY,QAAQ;AACxCF,MAAAA,EAAEG,eAAAA;AACF,YAAMR,IAAU,CAAC,GAAGP,GAAME,EAAWY,MAAM;AAC3Cb,MAAAA,EAAQM,CAAO,GACfJ,EAAc,EAAE,GAChBV,IAAWc,CAAO;AAAA,IACtB,MAAA,CAAWK,EAAEC,QAAQ,eAAeX,MAAe,MAAMF,EAAKgB,SAAS,KACnEX,EAAUL,EAAKgB,SAAS,CAAC;AAAA,EAEjC;AAEA,SACIC,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IAAKvB,WAAU;AAAA,IAAiC,sBAAoBI;AAAAA,EAAAA,GAC/DD,KAASmB,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IAAKvB,WAAU;AAAA,EAAA,GAAmBG,CAAW,GACvDmB,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IACIvB,WAAW,6BAA6BC,IAAQ,0BAA0B,EAAE,IAAID,CAAS;AAAA,IACzFwB,SAASA,MAAMf,EAASgB,SAASC,MAAAA;AAAAA,EAAM,GAEtCrB,EAAKsB,IAAI,CAACC,GAAKC,MACZP,gBAAAA,EAAAC,cAAA,QAAA;AAAA,IAAML,KAAKW;AAAAA,IAAO7B,WAAU;AAAA,IAAuB,sBAAoB,aAAa6B,CAAK;AAAA,EAAA,GACpFD,GACDN,gBAAAA,EAAAC,cAAC5B,GAAI;AAAA,IACDmC,MAAK;AAAA,IACL9B,WAAU;AAAA,IACV+B,WAAW,cAAcH,CAAG;AAAA,IAC5BJ,SAASA,MAAMd,EAAUmB,CAAK;AAAA,IAC9BG,uBAAqB;AAAA,EAAA,CACxB,CACC,CACT,GACDV,gBAAAA,EAAAC,cAAA,SAAA;AAAA,IACIvB,WAAU;AAAA,IACViC,KAAKxB;AAAAA,IACLyB,MAAK;AAAA,IACLrC,OAAOU;AAAAA,IACPT,UAAWmB,CAAAA,MAAMT,EAAcS,EAAEkB,OAAOtC,KAAK;AAAA,IAC7CuC,WAAWpB;AAAAA,IACXjB,aAAAA;AAAAA,IACA,sBAAmB;AAAA,EAAA,CACtB,CACA,GACJE,KAASqB,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IAAKvB,WAAU;AAAA,EAAA,GAAiBE,CAAkB,CAC3D;AAEb;"}
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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"}