@floegence/floe-webapp-core 0.88.0 → 0.89.1

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.
@@ -6,6 +6,10 @@ export interface TabItem {
6
6
  domId?: string;
7
7
  /** DOM identity of the host-owned panel controlled by this tab. */
8
8
  panelId?: string;
9
+ /** Full identity shown when the visible label is truncated. */
10
+ title?: string;
11
+ /** Localized accessible close action for this item. */
12
+ closeLabel?: string;
9
13
  icon?: JSX.Element;
10
14
  closable?: boolean;
11
15
  disabled?: boolean;
@@ -83,6 +87,10 @@ export interface TabsProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, 'onC
83
87
  slotClassNames?: TabsSlotClassNames;
84
88
  /** Accessible name for the tablist container. */
85
89
  ariaLabel?: string;
90
+ labels?: {
91
+ scrollLeft: string;
92
+ scrollRight: string;
93
+ };
86
94
  }
87
95
  export declare function resolveTabNavigationTargetId(items: Pick<TabItem, 'id' | 'disabled'>[], currentId: string, key: string): string | null;
88
96
  export declare function Tabs(props: TabsProps): JSX.Element;
@@ -1,47 +1,47 @@
1
- import { createComponent as h, spread as fe, mergeProps as ue, insert as u, effect as x, className as I, setStyleProperty as se, memo as le, use as ie, setAttribute as m, template as C, delegateEvents as Me } from "solid-js/web";
2
- import { splitProps as ve, Show as S, createSignal as L, untrack as ce, createEffect as X, onCleanup as de } from "solid-js";
3
- import { cn as v } from "../../utils/cn.js";
4
- import { deferAfterPaint as O } from "../../utils/defer.js";
5
- import { KeyedFor as ze } from "./KeyedFor.js";
6
- import { createUIFirstSelection as Re } from "../../utils/uiFirstSelection.js";
7
- import { useViewActivation as Te } from "../../context/ViewActivationContext.js";
8
- import { X as Ee, Plus as He, ChevronRight as Pe } from "../icons/index.js";
9
- var De = /* @__PURE__ */ C('<svg xmlns=http://www.w3.org/2000/svg width=24 height=24 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><path d="m15 18-6-6 6-6">'), Oe = /* @__PURE__ */ C('<button type=button data-floe-interactive=icon aria-label="Scroll left">'), We = /* @__PURE__ */ C("<div>"), Fe = /* @__PURE__ */ C('<button type=button data-floe-interactive=icon aria-label="Add new tab">'), _e = /* @__PURE__ */ C('<button type=button data-floe-interactive=icon aria-label="Scroll right">'), je = /* @__PURE__ */ C("<div><div role=tablist data-floe-surface=inset data-floe-surface-part=tab-rail aria-orientation=horizontal>"), qe = /* @__PURE__ */ C("<span class=flex-shrink-0>"), Ge = /* @__PURE__ */ C("<button type=button data-floe-interactive=icon>"), Ue = /* @__PURE__ */ C('<div role=tab data-floe-surface-part=tab data-floe-interactive=item><span class="truncate max-w-32">'), Xe = /* @__PURE__ */ C("<div role=tabpanel>");
10
- const K = {
1
+ import { createComponent as g, spread as be, mergeProps as ge, insert as v, effect as y, className as S, setAttribute as h, setStyleProperty as fe, memo as ue, use as ve, template as p, delegateEvents as $e } from "solid-js/web";
2
+ import { splitProps as me, Show as A, createSignal as R, untrack as Y, createEffect as O, onCleanup as he } from "solid-js";
3
+ import { cn as b } from "../../utils/cn.js";
4
+ import { deferAfterPaint as T } from "../../utils/defer.js";
5
+ import { KeyedFor as He } from "./KeyedFor.js";
6
+ import { createUIFirstSelection as De } from "../../utils/uiFirstSelection.js";
7
+ import { useViewActivation as Pe } from "../../context/ViewActivationContext.js";
8
+ import { X as Fe, Plus as Oe, ChevronRight as We } from "../icons/index.js";
9
+ var qe = /* @__PURE__ */ p('<svg xmlns=http://www.w3.org/2000/svg width=24 height=24 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><path d="m15 18-6-6 6-6">'), _ = /* @__PURE__ */ p("<button type=button data-floe-interactive=icon>"), je = /* @__PURE__ */ p("<div>"), Ge = /* @__PURE__ */ p('<button type=button data-floe-interactive=icon aria-label="Add new tab">'), Ue = /* @__PURE__ */ p("<div><div role=tablist data-floe-surface=inset data-floe-surface-part=tab-rail aria-orientation=horizontal>"), Ve = /* @__PURE__ */ p("<span class=flex-shrink-0>"), Xe = /* @__PURE__ */ p('<div role=tab data-floe-surface-part=tab data-floe-interactive=item><span class="min-w-0 truncate max-w-32">'), Ke = /* @__PURE__ */ p("<div role=tabpanel>");
10
+ const J = {
11
11
  x: 0,
12
12
  width: 0,
13
13
  visible: !1
14
14
  };
15
- function Ke(i, t, b) {
16
- const c = i.filter((p) => !p.disabled);
17
- if (!c.length) return null;
18
- const k = c.findIndex((p) => p.id === t);
15
+ function Ye(i, t, m) {
16
+ const d = i.filter((x) => !x.disabled);
17
+ if (!d.length) return null;
18
+ const k = d.findIndex((x) => x.id === t);
19
19
  if (k < 0) return null;
20
- let g = null;
21
- switch (b) {
20
+ let w = null;
21
+ switch (m) {
22
22
  case "ArrowRight":
23
23
  case "ArrowDown":
24
- g = (k + 1) % c.length;
24
+ w = (k + 1) % d.length;
25
25
  break;
26
26
  case "ArrowLeft":
27
27
  case "ArrowUp":
28
- g = (k - 1 + c.length) % c.length;
28
+ w = (k - 1 + d.length) % d.length;
29
29
  break;
30
30
  case "Home":
31
- g = 0;
31
+ w = 0;
32
32
  break;
33
33
  case "End":
34
- g = c.length - 1;
34
+ w = d.length - 1;
35
35
  break;
36
36
  default:
37
37
  return null;
38
38
  }
39
- return c[g]?.id ?? null;
39
+ return d[w]?.id ?? null;
40
40
  }
41
- function Ve(i) {
41
+ function _e(i) {
42
42
  return i === 1 || i === 2 || i === 3 || i === 4 ? i : 2;
43
43
  }
44
- function Ye(i) {
44
+ function Je(i) {
45
45
  switch (i) {
46
46
  case 1:
47
47
  return {
@@ -65,7 +65,7 @@ function Ye(i) {
65
65
  };
66
66
  }
67
67
  }
68
- function Je(i) {
68
+ function Qe(i) {
69
69
  switch (i) {
70
70
  case "border":
71
71
  return {
@@ -84,158 +84,172 @@ function Je(i) {
84
84
  };
85
85
  }
86
86
  }
87
- const Qe = (i) => (() => {
88
- var t = De();
89
- return x(() => m(t, "class", i.class)), t;
87
+ const Ze = (i) => (() => {
88
+ var t = qe();
89
+ return y(() => h(t, "class", i.class)), t;
90
90
  })();
91
- function Ze(i) {
91
+ function et(i) {
92
92
  const {
93
93
  container: t,
94
- tab: b
95
- } = i, c = b.offsetParent, k = b.offsetWidth;
96
- if (c === t && Number.isFinite(b.offsetLeft) && Number.isFinite(k))
94
+ tab: m
95
+ } = i, d = m.offsetParent, k = m.offsetWidth;
96
+ if (d === t && Number.isFinite(m.offsetLeft) && Number.isFinite(k))
97
97
  return {
98
- x: b.offsetLeft,
98
+ x: m.offsetLeft,
99
99
  width: k,
100
100
  visible: k > 0
101
101
  };
102
- const g = t.getBoundingClientRect(), p = b.getBoundingClientRect(), M = t.offsetWidth || t.clientWidth, A = g.width > 0 && M > 0 ? g.width / M : 1, z = Number.isFinite(A) && A > 0 ? A : 1, R = p.width / z;
102
+ const w = t.getBoundingClientRect(), x = m.getBoundingClientRect(), z = t.offsetWidth || t.clientWidth, L = w.width > 0 && z > 0 ? w.width / z : 1, E = Number.isFinite(L) && L > 0 ? L : 1, $ = x.width / E;
103
103
  return {
104
- x: (p.left - g.left + t.scrollLeft) / z,
105
- width: R,
106
- visible: R > 0
104
+ x: (x.left - w.left + t.scrollLeft) / E,
105
+ width: $,
106
+ visible: $ > 0
107
107
  };
108
108
  }
109
109
  function ct(i) {
110
- const [t, b] = ve(i, ["items", "activeId", "defaultActiveId", "onChange", "onActiveIdChange", "onClose", "onAdd", "showAdd", "closable", "size", "features", "slotClassNames", "ariaLabel", "class"]), c = () => t.features?.indicator?.mode ?? "activeBorder", k = () => Ve(t.features?.indicator?.thicknessPx), g = () => t.features?.indicator?.colorToken ?? "primary", p = () => t.features?.indicator?.animated ?? !0, M = () => t.features?.containerBorder ?? !0, A = () => t.features?.scrollButtons ?? "auto", z = () => t.features?.closeButton?.dangerHover ?? !0, R = () => t.features?.closeButton?.enabledByDefault ?? t.closable ?? !1, he = () => t.features?.addButton?.enabled ?? t.showAdd ?? !1, V = () => Ye(k()), Y = () => Je(g());
110
+ const [t, m] = me(i, ["items", "activeId", "defaultActiveId", "onChange", "onActiveIdChange", "onClose", "onAdd", "showAdd", "closable", "size", "features", "slotClassNames", "ariaLabel", "labels", "class"]), d = () => t.features?.indicator?.mode ?? "activeBorder", k = () => _e(t.features?.indicator?.thicknessPx), w = () => t.features?.indicator?.colorToken ?? "primary", x = () => t.features?.indicator?.animated ?? !0, z = () => t.features?.containerBorder ?? !0, L = () => t.features?.scrollButtons ?? "auto", E = () => t.features?.closeButton?.dangerHover ?? !0, $ = () => t.features?.closeButton?.enabledByDefault ?? t.closable ?? !1, we = () => t.features?.addButton?.enabled ?? t.showAdd ?? !1, Q = () => Je(k()), Z = () => Qe(w());
111
111
  let f;
112
- const J = (() => {
112
+ const ee = (() => {
113
113
  try {
114
- return Te();
114
+ return Pe();
115
115
  } catch {
116
116
  return null;
117
117
  }
118
- })(), B = () => J ? J.active() : !0;
118
+ })(), B = () => ee ? ee.active() : !0;
119
119
  let W = !1;
120
- const [T, F] = L(K), E = /* @__PURE__ */ new Map();
121
- let _ = !1;
122
- const H = () => c() === "slider", Q = (a) => {
123
- if (!f || !H()) return !1;
124
- const r = E.get(a);
125
- if (!r) return !1;
126
- const l = Ze({
120
+ const [H, q] = R(J), I = /* @__PURE__ */ new Map();
121
+ let j = !1;
122
+ const D = () => d() === "slider", te = (o) => {
123
+ if (!f || !D()) return !1;
124
+ const s = I.get(o);
125
+ if (!s) return !1;
126
+ const l = et({
127
127
  container: f,
128
- tab: r
128
+ tab: s
129
129
  });
130
- return F(l), l.visible;
131
- }, be = () => {
132
- if (!H()) {
133
- F(K);
130
+ return q(l), l.visible;
131
+ }, Ce = () => {
132
+ if (!D()) {
133
+ q(J);
134
134
  return;
135
135
  }
136
- Q(j()) || F(K);
136
+ te(U()) || q(J);
137
137
  }, P = () => {
138
- _ || (_ = !0, O(() => {
139
- _ = !1, ce(() => {
140
- B() && be();
138
+ j || (j = !0, T(() => {
139
+ j = !1, Y(() => {
140
+ B() && Ce();
141
141
  });
142
142
  }));
143
- }, Z = () => t.activeId !== void 0, ge = () => t.onChange ?? t.onActiveIdChange, [me, we] = L(ce(() => t.defaultActiveId ?? t.items[0]?.id ?? "")), ee = Re({
144
- committed: () => Z() ? t.activeId : me(),
145
- commit: (a) => {
146
- Z() || we(a), ge()?.(a);
143
+ }, re = () => t.activeId !== void 0, ke = () => t.onChange ?? t.onActiveIdChange, [xe, ye] = R(Y(() => t.defaultActiveId ?? t.items[0]?.id ?? "")), G = () => re() ? t.activeId : xe(), oe = De({
144
+ committed: G,
145
+ commit: (o) => {
146
+ re() || ye(o), ke()?.(o);
147
147
  }
148
- }), j = ee.visual;
149
- X(() => {
150
- B() && (c(), j(), P());
148
+ }), U = oe.visual;
149
+ O(() => {
150
+ B() && (d(), U(), P());
151
151
  });
152
- const [q, Ce] = L(!1), [G, ke] = L(!1), [pe, ye] = L(!1), te = () => A() === "auto" && pe(), xe = () => {
152
+ const [V, pe] = R(!1), [X, Ie] = R(!1), [Se, Ae] = R(!1), ne = () => L() === "auto" && Se(), Be = () => {
153
153
  if (!f) return;
154
154
  const {
155
- scrollLeft: a,
156
- scrollWidth: r,
155
+ scrollLeft: o,
156
+ scrollWidth: s,
157
157
  clientWidth: l
158
- } = f, e = r > l;
159
- ye(e), Ce(a > 0), ke(a + l < r - 1);
160
- }, D = () => {
161
- W || (W = !0, O(() => {
162
- W = !1, B() && xe();
158
+ } = f, e = s > l;
159
+ Ae(e), pe(o > 0), Ie(o + l < s - 1);
160
+ }, F = () => {
161
+ W || (W = !0, T(() => {
162
+ W = !1, B() && Be();
163
163
  }));
164
- }, Ie = () => {
164
+ }, Le = () => {
165
165
  f && f.scrollBy({
166
166
  left: -150,
167
167
  behavior: "smooth"
168
168
  });
169
- }, Se = () => {
169
+ }, Me = () => {
170
170
  f && f.scrollBy({
171
171
  left: 150,
172
172
  behavior: "smooth"
173
173
  });
174
174
  };
175
- X(() => {
175
+ O(() => {
176
176
  if (!f || !B()) return;
177
- D(), P();
178
- const a = () => D();
179
- f.addEventListener("scroll", a);
180
- const r = () => {
181
- D(), P();
177
+ F(), P();
178
+ const o = () => F();
179
+ f.addEventListener("scroll", o);
180
+ const s = () => {
181
+ F(), P();
182
182
  };
183
183
  let l;
184
- typeof ResizeObserver < "u" ? (l = new ResizeObserver(r), l.observe(f)) : typeof window < "u" && window.addEventListener("resize", r), de(() => {
185
- f?.removeEventListener("scroll", a), l?.disconnect(), typeof window < "u" && window.removeEventListener("resize", r);
184
+ typeof ResizeObserver < "u" ? (l = new ResizeObserver(s), l.observe(f)) : typeof window < "u" && window.addEventListener("resize", s), he(() => {
185
+ f?.removeEventListener("scroll", o), l?.disconnect(), typeof window < "u" && window.removeEventListener("resize", s);
186
186
  });
187
- }), X(() => {
188
- B() && (t.items.length, D(), P());
187
+ }), O(() => {
188
+ const o = G();
189
+ T(() => {
190
+ B() && I.get(o)?.scrollIntoView?.({
191
+ block: "nearest",
192
+ inline: "nearest"
193
+ });
194
+ });
195
+ }), O(() => {
196
+ B() && (t.items.length, F(), P());
189
197
  });
190
- const U = (a, r) => {
191
- r || (ee.request(a), H() && Q(a));
192
- }, Ae = (a) => {
193
- const r = t.items.find((e) => e.id === a);
194
- if (!r) return;
195
- U(r.id, r.disabled);
196
- const l = E.get(r.id);
198
+ const K = (o, s) => {
199
+ s || (oe.request(o), D() && te(o));
200
+ }, Ne = (o) => {
201
+ const s = t.items.find((e) => e.id === o);
202
+ if (!s) return;
203
+ K(s.id, s.disabled);
204
+ const l = I.get(s.id);
197
205
  l?.focus({
198
206
  preventScroll: !0
199
207
  }), l?.scrollIntoView({
200
208
  block: "nearest",
201
209
  inline: "nearest"
202
210
  });
203
- }, Be = (a, r) => {
204
- const l = Ke(t.items, r.id, a.key);
205
- l && (a.preventDefault(), Ae(l));
206
- }, Ne = (a, r) => {
207
- a.stopPropagation();
208
- const l = t.onClose;
209
- if (!l) return;
210
- const e = r;
211
- O(() => l(e));
212
- }, $e = {
211
+ }, Re = (o, s) => {
212
+ const l = Ye(t.items, s.id, o.key);
213
+ l && (o.preventDefault(), Ne(l));
214
+ }, se = (o) => {
215
+ const l = !!I.get(o)?.contains(document.activeElement), e = t.items.findIndex((r) => r.id === o);
216
+ if (t.onClose?.(o), l && !t.items.some((r) => r.id === o)) {
217
+ const r = t.items.find((c) => c.id === G()) ?? t.items[Math.min(e, t.items.length - 1)];
218
+ r && I.get(r.id)?.focus({
219
+ preventScroll: !0
220
+ });
221
+ }
222
+ }, Te = (o, s) => {
223
+ if (o.stopPropagation(), !t.onClose) return;
224
+ const e = s;
225
+ T(() => Y(() => se(e)));
226
+ }, ze = {
213
227
  sm: "h-[var(--floe-control-height-sm)] px-[var(--floe-control-padding-sm)]",
214
228
  md: "h-[var(--floe-control-height-md)] px-[var(--floe-control-padding-md)]"
215
- }, Le = (a, r) => {
216
- const l = v("relative inline-flex items-center gap-1.5 whitespace-nowrap", "text-[length:var(--floe-type-control)] leading-[var(--floe-line-control)]"), e = r ? "cursor-not-allowed opacity-50" : "cursor-pointer", o = () => {
217
- const d = c();
218
- return d === "none" || d === "slider" && T().visible ? "" : v("after:pointer-events-none after:absolute after:bottom-0 after:inset-x-2 after:rounded-full after:content-['']", V().tabMarkerClass, Y().tabMarkerClass);
229
+ }, Ee = (o, s) => {
230
+ const l = b("relative inline-flex items-center gap-1.5 whitespace-nowrap", "text-[length:var(--floe-type-control)] leading-[var(--floe-line-control)]"), e = s ? "cursor-not-allowed opacity-50" : "cursor-pointer", r = () => {
231
+ const c = d();
232
+ return c === "none" || c === "slider" && H().visible ? "" : b("after:pointer-events-none after:absolute after:bottom-0 after:inset-x-2 after:rounded-full after:content-['']", Q().tabMarkerClass, Z().tabMarkerClass);
219
233
  };
220
- return v(
234
+ return b(
221
235
  l,
222
236
  e,
223
- $e[t.size ?? "md"],
237
+ ze[t.size ?? "md"],
224
238
  "rounded-control",
225
239
  "border",
226
240
  /* The selected face is painted by the surface layer (`data-floe-surface`
227
241
  * plus `aria-selected`), which keeps the fill, hairline and first
228
242
  * elevation step identical to every other selected control. */
229
- a ? v(o(), "text-foreground", t.slotClassNames?.tabActive) : v("border-transparent text-[var(--floe-ink-soft)]", t.slotClassNames?.tabInactive),
230
- r && "opacity-50",
243
+ o ? b(r(), "text-foreground", t.slotClassNames?.tabActive) : b("border-transparent text-[var(--floe-ink-soft)]", t.slotClassNames?.tabInactive),
244
+ s && "opacity-50",
231
245
  t.slotClassNames?.tab
232
246
  );
233
247
  };
234
248
  return (() => {
235
- var a = je(), r = a.firstChild;
236
- fe(a, ue({
249
+ var o = Ue(), s = o.firstChild;
250
+ be(o, ge({
237
251
  get class() {
238
- return v(
252
+ return b(
239
253
  /* One strip, one baseline: the rail, the scroll buttons and the add
240
254
  * button all take their height from the row, so nothing floats above
241
255
  * the rule. The rail's fill is carried onto those trailing controls,
@@ -243,88 +257,95 @@ function ct(i) {
243
257
  * control. */
244
258
  "relative flex items-stretch",
245
259
  t.size === "sm" ? "min-h-[var(--floe-control-height-sm)]" : "min-h-[var(--floe-control-height-md)]",
246
- M() && "border-b border-[var(--floe-line)]",
260
+ z() && "border-b border-[var(--floe-line)]",
247
261
  t.slotClassNames?.root,
248
262
  t.class
249
263
  );
250
264
  }
251
- }, b), !1, !0), u(a, h(S, {
265
+ }, m), !1, !0), v(o, g(A, {
252
266
  get when() {
253
- return te();
267
+ return ne();
254
268
  },
255
269
  get children() {
256
- var e = Oe();
257
- return e.$$click = Ie, u(e, h(Qe, {
270
+ var e = _();
271
+ return e.$$click = Le, v(e, g(Ze, {
258
272
  class: "w-4 h-4"
259
- })), x((o) => {
260
- var d = !q(), s = v("flex-shrink-0 flex items-center justify-center", "w-6 rounded-control cursor-pointer bg-[var(--floe-well)] border border-[var(--floe-line)]", "transition-opacity duration-[var(--floe-duration-fast)] ease-[var(--floe-ease-out)]", q() ? "text-[var(--floe-ink-quiet)] hover:bg-[var(--floe-state-hover)] opacity-100" : "opacity-0 pointer-events-none", t.slotClassNames?.scrollButton);
261
- return d !== o.e && (e.disabled = o.e = d), s !== o.t && I(e, o.t = s), o;
273
+ })), y((r) => {
274
+ var c = !V(), a = b("flex-shrink-0 flex items-center justify-center", "w-6 rounded-control cursor-pointer bg-[var(--floe-well)] border border-[var(--floe-line)]", "transition-opacity duration-[var(--floe-duration-fast)] ease-[var(--floe-ease-out)]", V() ? "text-[var(--floe-ink-quiet)] hover:bg-[var(--floe-state-hover)] opacity-100" : "opacity-0 pointer-events-none", t.slotClassNames?.scrollButton), u = t.labels?.scrollLeft ?? "Scroll left";
275
+ return c !== r.e && (e.disabled = r.e = c), a !== r.t && S(e, r.t = a), u !== r.a && h(e, "aria-label", r.a = u), r;
262
276
  }, {
263
277
  e: void 0,
264
- t: void 0
278
+ t: void 0,
279
+ a: void 0
265
280
  }), e;
266
281
  }
267
- }), r);
282
+ }), s);
268
283
  var l = f;
269
- return typeof l == "function" ? ie(l, r) : f = r, u(r, h(S, {
284
+ return typeof l == "function" ? ve(l, s) : f = s, v(s, g(A, {
270
285
  get when() {
271
- return le(() => !!H())() && T().visible;
286
+ return ue(() => !!D())() && H().visible;
272
287
  },
273
288
  get children() {
274
- var e = We();
275
- return x((o) => {
276
- var d = v("pointer-events-none absolute bottom-0 left-0 z-10", V().sliderHeightClass, Y().sliderBgClass, p() ? "transition-[transform,width] duration-[var(--floe-duration-base)] ease-out motion-reduce:transition-none" : "transition-none", "will-change-transform", t.slotClassNames?.indicator), s = `translate3d(${T().x}px, 0, 0)`, y = `${T().width}px`;
277
- return d !== o.e && I(e, o.e = d), s !== o.t && se(e, "transform", o.t = s), y !== o.a && se(e, "width", o.a = y), o;
289
+ var e = je();
290
+ return y((r) => {
291
+ var c = b("pointer-events-none absolute bottom-0 left-0 z-10", Q().sliderHeightClass, Z().sliderBgClass, x() ? "transition-[transform,width] duration-[var(--floe-duration-base)] ease-out motion-reduce:transition-none" : "transition-none", "will-change-transform", t.slotClassNames?.indicator), a = `translate3d(${H().x}px, 0, 0)`, u = `${H().width}px`;
292
+ return c !== r.e && S(e, r.e = c), a !== r.t && fe(e, "transform", r.t = a), u !== r.a && fe(e, "width", r.a = u), r;
278
293
  }, {
279
294
  e: void 0,
280
295
  t: void 0,
281
296
  a: void 0
282
297
  }), e;
283
298
  }
284
- }), null), u(r, h(ze, {
299
+ }), null), v(s, g(He, {
285
300
  get each() {
286
301
  return t.items;
287
302
  },
288
303
  by: (e) => e.id,
289
304
  children: (e) => {
290
- const o = () => e().id === j(), d = () => e().closable ?? R();
305
+ const r = () => e().id === U(), c = () => e().closable ?? $();
291
306
  return (() => {
292
- var s = Ue(), y = s.firstChild;
293
- return s.$$keydown = (n) => {
294
- if (n.key === "Enter" || n.key === " ") {
295
- n.preventDefault(), U(e().id, e().disabled);
296
- return;
307
+ var a = Xe(), u = a.firstChild;
308
+ return a.$$keydown = (n) => {
309
+ if (n.target === n.currentTarget) {
310
+ if (n.key === "Delete" && c() && !e().disabled) {
311
+ n.preventDefault(), se(e().id);
312
+ return;
313
+ }
314
+ if (n.key === "Enter" || n.key === " ") {
315
+ n.preventDefault(), K(e().id, e().disabled);
316
+ return;
317
+ }
318
+ Re(n, e());
297
319
  }
298
- Be(n, e());
299
- }, s.$$click = () => U(e().id, e().disabled), ie((n) => {
300
- E.set(e().id, n), de(() => E.delete(e().id));
301
- }, s), u(s, h(S, {
320
+ }, a.$$click = () => K(e().id, e().disabled), ve((n) => {
321
+ I.set(e().id, n), he(() => I.delete(e().id));
322
+ }, a), v(a, g(A, {
302
323
  get when() {
303
324
  return e().icon;
304
325
  },
305
326
  get children() {
306
- var n = qe();
307
- return u(n, () => e().icon), n;
327
+ var n = Ve();
328
+ return v(n, () => e().icon), n;
308
329
  }
309
- }), y), u(y, () => e().label), u(s, h(S, {
330
+ }), u), v(u, () => e().label), v(a, g(A, {
310
331
  get when() {
311
- return le(() => !!d())() && !e().disabled;
332
+ return ue(() => !!c())() && !e().disabled;
312
333
  },
313
334
  get children() {
314
- var n = Ge();
315
- return n.$$click = (w) => Ne(w, e().id), u(n, h(Ee, {
335
+ var n = _();
336
+ return n.$$click = (C) => Te(C, e().id), v(n, g(Fe, {
316
337
  class: "w-3 h-3"
317
- })), x((w) => {
318
- var N = v("flex-shrink-0 flex items-center justify-center", "w-5 h-5 rounded-control cursor-pointer", "bg-transparent text-[var(--floe-ink-quiet)]", z() ? "hover:bg-error hover:text-error-foreground" : "hover:bg-[var(--floe-state-hover)]", "ml-1.5", t.slotClassNames?.closeButton), $ = `Close ${e().label}`;
319
- return N !== w.e && I(n, w.e = N), $ !== w.t && m(n, "aria-label", w.t = $), w;
338
+ })), y((C) => {
339
+ var M = b("flex-shrink-0 flex items-center justify-center", "w-5 h-5 rounded-control cursor-pointer", "bg-transparent text-[var(--floe-ink-quiet)]", E() ? "hover:bg-error hover:text-error-foreground" : "hover:bg-[var(--floe-state-hover)]", "ml-1.5", t.slotClassNames?.closeButton), N = e().closeLabel ?? `Close ${e().label}`;
340
+ return M !== C.e && S(n, C.e = M), N !== C.t && h(n, "aria-label", C.t = N), C;
320
341
  }, {
321
342
  e: void 0,
322
343
  t: void 0
323
344
  }), n;
324
345
  }
325
- }), null), x((n) => {
326
- var w = Le(o(), e().disabled), N = e().domId, $ = e().panelId, re = o() ? "raised" : "flat", oe = o(), ne = e().disabled, ae = e().disabled ? -1 : o() ? 0 : -1;
327
- return w !== n.e && I(s, n.e = w), N !== n.t && m(s, "id", n.t = N), $ !== n.a && m(s, "aria-controls", n.a = $), re !== n.o && m(s, "data-floe-surface", n.o = re), oe !== n.i && m(s, "aria-selected", n.i = oe), ne !== n.n && m(s, "aria-disabled", n.n = ne), ae !== n.s && m(s, "tabindex", n.s = ae), n;
346
+ }), null), y((n) => {
347
+ var C = Ee(r(), e().disabled), M = e().domId, N = e().panelId, ae = e().title, le = r() ? "raised" : "flat", ie = r(), ce = e().disabled, de = e().disabled ? -1 : r() ? 0 : -1;
348
+ return C !== n.e && S(a, n.e = C), M !== n.t && h(a, "id", n.t = M), N !== n.a && h(a, "aria-controls", n.a = N), ae !== n.o && h(a, "title", n.o = ae), le !== n.i && h(a, "data-floe-surface", n.i = le), ie !== n.n && h(a, "aria-selected", n.n = ie), ce !== n.s && h(a, "aria-disabled", n.s = ce), de !== n.h && h(a, "tabindex", n.h = de), n;
328
349
  }, {
329
350
  e: void 0,
330
351
  t: void 0,
@@ -332,67 +353,69 @@ function ct(i) {
332
353
  o: void 0,
333
354
  i: void 0,
334
355
  n: void 0,
335
- s: void 0
336
- }), s;
356
+ s: void 0,
357
+ h: void 0
358
+ }), a;
337
359
  })();
338
360
  }
339
- }), null), u(a, h(S, {
361
+ }), null), v(o, g(A, {
340
362
  get when() {
341
- return he();
363
+ return we();
342
364
  },
343
365
  get children() {
344
- var e = Fe();
366
+ var e = Ge();
345
367
  return e.$$click = () => {
346
- const o = t.onAdd;
347
- o && O(() => o());
348
- }, u(e, h(He, {
368
+ const r = t.onAdd;
369
+ r && T(() => r());
370
+ }, v(e, g(Oe, {
349
371
  get class() {
350
372
  return t.size === "sm" ? "w-3.5 h-3.5" : "w-4 h-4";
351
373
  }
352
- })), x(() => I(e, v("flex-shrink-0 flex items-center justify-center", "rounded-control cursor-pointer bg-[var(--floe-well)] border border-[var(--floe-line)]", "text-[var(--floe-ink-quiet)] hover:bg-[var(--floe-state-hover)] hover:text-foreground", t.size === "sm" ? "w-7" : "w-8", t.slotClassNames?.addButton))), e;
374
+ })), y(() => S(e, b("flex-shrink-0 flex items-center justify-center", "rounded-control cursor-pointer bg-[var(--floe-well)] border border-[var(--floe-line)]", "text-[var(--floe-ink-quiet)] hover:bg-[var(--floe-state-hover)] hover:text-foreground", t.size === "sm" ? "w-7" : "w-8", t.slotClassNames?.addButton))), e;
353
375
  }
354
- }), null), u(a, h(S, {
376
+ }), null), v(o, g(A, {
355
377
  get when() {
356
- return te();
378
+ return ne();
357
379
  },
358
380
  get children() {
359
- var e = _e();
360
- return e.$$click = Se, u(e, h(Pe, {
381
+ var e = _();
382
+ return e.$$click = Me, v(e, g(We, {
361
383
  class: "w-4 h-4"
362
- })), x((o) => {
363
- var d = !G(), s = v("flex-shrink-0 flex items-center justify-center", "w-6 rounded-control cursor-pointer bg-[var(--floe-well)] border border-[var(--floe-line)]", "transition-opacity duration-[var(--floe-duration-fast)] ease-[var(--floe-ease-out)]", G() ? "text-[var(--floe-ink-quiet)] hover:bg-[var(--floe-state-hover)] opacity-100" : "opacity-0 pointer-events-none", t.slotClassNames?.scrollButton);
364
- return d !== o.e && (e.disabled = o.e = d), s !== o.t && I(e, o.t = s), o;
384
+ })), y((r) => {
385
+ var c = !X(), a = b("flex-shrink-0 flex items-center justify-center", "w-6 rounded-control cursor-pointer bg-[var(--floe-well)] border border-[var(--floe-line)]", "transition-opacity duration-[var(--floe-duration-fast)] ease-[var(--floe-ease-out)]", X() ? "text-[var(--floe-ink-quiet)] hover:bg-[var(--floe-state-hover)] opacity-100" : "opacity-0 pointer-events-none", t.slotClassNames?.scrollButton), u = t.labels?.scrollRight ?? "Scroll right";
386
+ return c !== r.e && (e.disabled = r.e = c), a !== r.t && S(e, r.t = a), u !== r.a && h(e, "aria-label", r.a = u), r;
365
387
  }, {
366
388
  e: void 0,
367
- t: void 0
389
+ t: void 0,
390
+ a: void 0
368
391
  }), e;
369
392
  }
370
- }), null), x((e) => {
371
- var o = v(
393
+ }), null), y((e) => {
394
+ var r = b(
372
395
  "relative flex-1 flex items-center gap-0.5 overflow-x-auto",
373
396
  "scrollbar-none",
374
397
  // Hide scrollbar for all browsers
375
398
  "[&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]",
376
399
  t.slotClassNames?.scrollContainer
377
- ), d = q() ? "" : void 0, s = G() ? "" : void 0, y = t.ariaLabel;
378
- return o !== e.e && I(r, e.e = o), d !== e.t && m(r, "data-floe-overflow-start", e.t = d), s !== e.a && m(r, "data-floe-overflow-end", e.a = s), y !== e.o && m(r, "aria-label", e.o = y), e;
400
+ ), c = V() ? "" : void 0, a = X() ? "" : void 0, u = t.ariaLabel;
401
+ return r !== e.e && S(s, e.e = r), c !== e.t && h(s, "data-floe-overflow-start", e.t = c), a !== e.a && h(s, "data-floe-overflow-end", e.a = a), u !== e.o && h(s, "aria-label", e.o = u), e;
379
402
  }, {
380
403
  e: void 0,
381
404
  t: void 0,
382
405
  a: void 0,
383
406
  o: void 0
384
- }), a;
407
+ }), o;
385
408
  })();
386
409
  }
387
410
  function dt(i) {
388
- const [t, b] = ve(i, ["active", "keepMounted", "labelledBy", "class", "children"]);
389
- return h(S, {
411
+ const [t, m] = me(i, ["active", "keepMounted", "labelledBy", "class", "children"]);
412
+ return g(A, {
390
413
  get when() {
391
414
  return t.keepMounted || t.active;
392
415
  },
393
416
  get children() {
394
- var c = Xe();
395
- return fe(c, ue({
417
+ var d = Ke();
418
+ return be(d, ge({
396
419
  get "aria-labelledby"() {
397
420
  return t.labelledBy;
398
421
  },
@@ -403,15 +426,15 @@ function dt(i) {
403
426
  return t.active ? 0 : -1;
404
427
  },
405
428
  get class() {
406
- return v(!t.active && t.keepMounted && "hidden", t.class);
429
+ return b(!t.active && t.keepMounted && "hidden", t.class);
407
430
  }
408
- }, b), !1, !0), u(c, () => t.children), c;
431
+ }, m), !1, !0), v(d, () => t.children), d;
409
432
  }
410
433
  });
411
434
  }
412
- Me(["click", "keydown"]);
435
+ $e(["click", "keydown"]);
413
436
  export {
414
437
  dt as TabPanel,
415
438
  ct as Tabs,
416
- Ke as resolveTabNavigationTargetId
439
+ Ye as resolveTabNavigationTargetId
417
440
  };
@@ -0,0 +1,3 @@
1
+ import { type TabsProps } from './Tabs';
2
+ /** Compact document identity for a window header. Hosts own documents and close policy. */
3
+ export declare function WindowTabs(props: TabsProps): import("solid-js").JSX.Element;