@floegence/floe-webapp-core 0.86.24 → 0.86.27

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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Floegence, Inc.
3
+ Copyright (c) 2026 Floegence Inc
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -2,6 +2,10 @@ import { type JSX } from 'solid-js';
2
2
  export interface TabItem {
3
3
  id: string;
4
4
  label: string;
5
+ /** DOM identity for references such as TabPanel.labelledBy. */
6
+ domId?: string;
7
+ /** DOM identity of the host-owned panel controlled by this tab. */
8
+ panelId?: string;
5
9
  icon?: JSX.Element;
6
10
  closable?: boolean;
7
11
  disabled?: boolean;
@@ -1,20 +1,20 @@
1
- import { createComponent as v, spread as de, mergeProps as ce, insert as f, effect as x, className as y, setStyleProperty as ne, memo as se, use as ae, setAttribute as k, template as w, delegateEvents as Ne } from "solid-js/web";
2
- import { splitProps as ue, Show as B, createSignal as L, untrack as le, createEffect as X, For as Le, onCleanup as ie } from "solid-js";
1
+ import { createComponent as v, spread as ue, mergeProps as fe, insert as f, effect as y, className as k, setStyleProperty as ae, memo as le, use as ie, setAttribute as p, template as w, delegateEvents as Re } from "solid-js/web";
2
+ import { splitProps as ve, Show as B, createSignal as L, untrack as de, createEffect as X, For as Te, onCleanup as ce } from "solid-js";
3
3
  import { cn as g } from "../../utils/cn.js";
4
- import { deferAfterPaint as M } from "../../utils/defer.js";
5
- import { createUIFirstSelection as Re } from "../../utils/uiFirstSelection.js";
6
- import { useViewActivation as Te } from "../../context/ViewActivationContext.js";
7
- import { X as ze, Plus as Ee, ChevronRight as He } from "../icons/index.js";
8
- var Pe = /* @__PURE__ */ w('<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">'), _e = /* @__PURE__ */ w('<button type=button aria-label="Scroll left">'), De = /* @__PURE__ */ w("<div>"), Me = /* @__PURE__ */ w('<button type=button aria-label="Add new tab">'), Oe = /* @__PURE__ */ w('<button type=button aria-label="Scroll right">'), We = /* @__PURE__ */ w("<div><div role=tablist data-floe-surface=inset data-floe-surface-part=tab-rail aria-orientation=horizontal>"), Fe = /* @__PURE__ */ w("<span class=flex-shrink-0>"), je = /* @__PURE__ */ w("<button type=button>"), Ge = /* @__PURE__ */ w('<div role=tab data-floe-surface-part=tab><span class="truncate max-w-32">'), Ue = /* @__PURE__ */ w("<div role=tabpanel>");
4
+ import { deferAfterPaint as _ } from "../../utils/defer.js";
5
+ import { createUIFirstSelection as ze } from "../../utils/uiFirstSelection.js";
6
+ import { useViewActivation as Ee } from "../../context/ViewActivationContext.js";
7
+ import { X as He, Plus as Pe, ChevronRight as De } from "../icons/index.js";
8
+ var Me = /* @__PURE__ */ w('<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">'), _e = /* @__PURE__ */ w('<button type=button aria-label="Scroll left">'), Oe = /* @__PURE__ */ w("<div>"), We = /* @__PURE__ */ w('<button type=button aria-label="Add new tab">'), Fe = /* @__PURE__ */ w('<button type=button aria-label="Scroll right">'), je = /* @__PURE__ */ w("<div><div role=tablist data-floe-surface=inset data-floe-surface-part=tab-rail aria-orientation=horizontal>"), Ge = /* @__PURE__ */ w("<span class=flex-shrink-0>"), Ue = /* @__PURE__ */ w("<button type=button>"), Xe = /* @__PURE__ */ w('<div role=tab data-floe-surface-part=tab><span class="truncate max-w-32">'), Ve = /* @__PURE__ */ w("<div role=tabpanel>");
9
9
  const V = {
10
10
  x: 0,
11
11
  width: 0,
12
12
  visible: !1
13
13
  };
14
- function Xe(i, e, h) {
15
- const d = i.filter((p) => !p.disabled);
14
+ function qe(i, e, h) {
15
+ const d = i.filter((x) => !x.disabled);
16
16
  if (!d.length) return null;
17
- const C = d.findIndex((p) => p.id === e);
17
+ const C = d.findIndex((x) => x.id === e);
18
18
  if (C < 0) return null;
19
19
  let b = null;
20
20
  switch (h) {
@@ -37,10 +37,10 @@ function Xe(i, e, h) {
37
37
  }
38
38
  return d[b]?.id ?? null;
39
39
  }
40
- function Ve(i) {
40
+ function Ke(i) {
41
41
  return i === 1 || i === 2 || i === 3 || i === 4 ? i : 2;
42
42
  }
43
- function qe(i) {
43
+ function Ye(i) {
44
44
  switch (i) {
45
45
  case 1:
46
46
  return {
@@ -64,7 +64,7 @@ function qe(i) {
64
64
  };
65
65
  }
66
66
  }
67
- function Ke(i) {
67
+ function Je(i) {
68
68
  switch (i) {
69
69
  case "border":
70
70
  return {
@@ -83,11 +83,11 @@ function Ke(i) {
83
83
  };
84
84
  }
85
85
  }
86
- const Ye = (i) => (() => {
87
- var e = Pe();
88
- return x(() => k(e, "class", i.class)), e;
86
+ const Qe = (i) => (() => {
87
+ var e = Me();
88
+ return y(() => p(e, "class", i.class)), e;
89
89
  })();
90
- function Je(i) {
90
+ function Ze(i) {
91
91
  const {
92
92
  container: e,
93
93
  tab: h
@@ -98,19 +98,19 @@ function Je(i) {
98
98
  width: C,
99
99
  visible: C > 0
100
100
  };
101
- const b = e.getBoundingClientRect(), p = h.getBoundingClientRect(), R = e.offsetWidth || e.clientWidth, I = b.width > 0 && R > 0 ? b.width / R : 1, T = Number.isFinite(I) && I > 0 ? I : 1, z = p.width / T;
101
+ const b = e.getBoundingClientRect(), x = h.getBoundingClientRect(), R = e.offsetWidth || e.clientWidth, I = b.width > 0 && R > 0 ? b.width / R : 1, T = Number.isFinite(I) && I > 0 ? I : 1, z = x.width / T;
102
102
  return {
103
- x: (p.left - b.left + e.scrollLeft) / T,
103
+ x: (x.left - b.left + e.scrollLeft) / T,
104
104
  width: z,
105
105
  visible: z > 0
106
106
  };
107
107
  }
108
- function at(i) {
109
- const [e, h] = ue(i, ["items", "activeId", "defaultActiveId", "onChange", "onActiveIdChange", "onClose", "onAdd", "showAdd", "closable", "size", "features", "slotClassNames", "ariaLabel", "class"]), d = () => e.features?.indicator?.mode ?? "activeBorder", C = () => Ve(e.features?.indicator?.thicknessPx), b = () => e.features?.indicator?.colorToken ?? "primary", p = () => e.features?.indicator?.animated ?? !0, R = () => e.features?.containerBorder ?? !0, I = () => e.features?.scrollButtons ?? "auto", T = () => e.features?.closeButton?.dangerHover ?? !0, z = () => e.features?.closeButton?.enabledByDefault ?? e.closable ?? !1, fe = () => e.features?.addButton?.enabled ?? e.showAdd ?? !1, q = () => qe(C()), O = () => Ke(b());
108
+ function it(i) {
109
+ const [e, h] = ve(i, ["items", "activeId", "defaultActiveId", "onChange", "onActiveIdChange", "onClose", "onAdd", "showAdd", "closable", "size", "features", "slotClassNames", "ariaLabel", "class"]), d = () => e.features?.indicator?.mode ?? "activeBorder", C = () => Ke(e.features?.indicator?.thicknessPx), b = () => e.features?.indicator?.colorToken ?? "primary", x = () => e.features?.indicator?.animated ?? !0, R = () => e.features?.containerBorder ?? !0, I = () => e.features?.scrollButtons ?? "auto", T = () => e.features?.closeButton?.dangerHover ?? !0, z = () => e.features?.closeButton?.enabledByDefault ?? e.closable ?? !1, he = () => e.features?.addButton?.enabled ?? e.showAdd ?? !1, q = () => Ye(C()), O = () => Je(b());
110
110
  let u;
111
111
  const K = (() => {
112
112
  try {
113
- return Te();
113
+ return Ee();
114
114
  } catch {
115
115
  return null;
116
116
  }
@@ -118,54 +118,54 @@ function at(i) {
118
118
  let W = !1;
119
119
  const [E, F] = L(V), H = /* @__PURE__ */ new Map();
120
120
  let j = !1;
121
- const P = () => d() === "slider", Y = (n) => {
121
+ const P = () => d() === "slider", Y = (s) => {
122
122
  if (!u || !P()) return !1;
123
- const o = H.get(n);
123
+ const o = H.get(s);
124
124
  if (!o) return !1;
125
- const a = Je({
125
+ const a = Ze({
126
126
  container: u,
127
127
  tab: o
128
128
  });
129
129
  return F(a), a.visible;
130
- }, ve = () => {
130
+ }, be = () => {
131
131
  if (!P()) {
132
132
  F(V);
133
133
  return;
134
134
  }
135
135
  Y(G()) || F(V);
136
- }, _ = () => {
137
- j || (j = !0, M(() => {
138
- j = !1, le(() => {
139
- S() && ve();
136
+ }, D = () => {
137
+ j || (j = !0, _(() => {
138
+ j = !1, de(() => {
139
+ S() && be();
140
140
  });
141
141
  }));
142
- }, J = () => e.activeId !== void 0, he = () => e.onChange ?? e.onActiveIdChange, [be, ge] = L(le(() => e.defaultActiveId ?? e.items[0]?.id ?? "")), Q = Re({
143
- committed: () => J() ? e.activeId : be(),
144
- commit: (n) => {
145
- J() || ge(n), he()?.(n);
142
+ }, J = () => e.activeId !== void 0, ge = () => e.onChange ?? e.onActiveIdChange, [me, we] = L(de(() => e.defaultActiveId ?? e.items[0]?.id ?? "")), Q = ze({
143
+ committed: () => J() ? e.activeId : me(),
144
+ commit: (s) => {
145
+ J() || we(s), ge()?.(s);
146
146
  }
147
147
  }), G = Q.visual;
148
148
  X(() => {
149
- S() && (d(), G(), _());
149
+ S() && (d(), G(), D());
150
150
  });
151
- const [Z, me] = L(!1), [ee, we] = L(!1), [Ce, pe] = L(!1), te = () => I() === "auto" && Ce(), xe = () => {
151
+ const [Z, Ce] = L(!1), [ee, pe] = L(!1), [xe, ye] = L(!1), te = () => I() === "auto" && xe(), ke = () => {
152
152
  if (!u) return;
153
153
  const {
154
- scrollLeft: n,
154
+ scrollLeft: s,
155
155
  scrollWidth: o,
156
156
  clientWidth: a
157
157
  } = u, t = o > a;
158
- pe(t), me(n > 0), we(n + a < o - 1);
159
- }, D = () => {
160
- W || (W = !0, M(() => {
161
- W = !1, S() && xe();
158
+ ye(t), Ce(s > 0), pe(s + a < o - 1);
159
+ }, M = () => {
160
+ W || (W = !0, _(() => {
161
+ W = !1, S() && ke();
162
162
  }));
163
- }, ye = () => {
163
+ }, Be = () => {
164
164
  u && u.scrollBy({
165
165
  left: -150,
166
166
  behavior: "smooth"
167
167
  });
168
- }, ke = () => {
168
+ }, Ie = () => {
169
169
  u && u.scrollBy({
170
170
  left: 150,
171
171
  behavior: "smooth"
@@ -173,23 +173,23 @@ function at(i) {
173
173
  };
174
174
  X(() => {
175
175
  if (!u || !S()) return;
176
- D(), _();
177
- const n = () => D();
178
- u.addEventListener("scroll", n);
176
+ M(), D();
177
+ const s = () => M();
178
+ u.addEventListener("scroll", s);
179
179
  const o = () => {
180
- D(), _();
180
+ M(), D();
181
181
  };
182
182
  let a;
183
- typeof ResizeObserver < "u" ? (a = new ResizeObserver(o), a.observe(u)) : typeof window < "u" && window.addEventListener("resize", o), ie(() => {
184
- u?.removeEventListener("scroll", n), a?.disconnect(), typeof window < "u" && window.removeEventListener("resize", o);
183
+ typeof ResizeObserver < "u" ? (a = new ResizeObserver(o), a.observe(u)) : typeof window < "u" && window.addEventListener("resize", o), ce(() => {
184
+ u?.removeEventListener("scroll", s), a?.disconnect(), typeof window < "u" && window.removeEventListener("resize", o);
185
185
  });
186
186
  }), X(() => {
187
- S() && (e.items.length, D(), _());
187
+ S() && (e.items.length, M(), D());
188
188
  });
189
- const U = (n, o) => {
190
- o || (Q.request(n), P() && Y(n));
191
- }, Be = (n) => {
192
- const o = e.items.find((t) => t.id === n);
189
+ const U = (s, o) => {
190
+ o || (Q.request(s), P() && Y(s));
191
+ }, Se = (s) => {
192
+ const o = e.items.find((t) => t.id === s);
193
193
  if (!o) return;
194
194
  U(o.id, o.disabled);
195
195
  const a = H.get(o.id);
@@ -199,42 +199,42 @@ function at(i) {
199
199
  block: "nearest",
200
200
  inline: "nearest"
201
201
  });
202
- }, Ie = (n, o) => {
203
- const a = Xe(e.items, o.id, n.key);
204
- a && (n.preventDefault(), Be(a));
205
- }, Se = (n, o) => {
206
- n.stopPropagation();
202
+ }, Ae = (s, o) => {
203
+ const a = qe(e.items, o.id, s.key);
204
+ a && (s.preventDefault(), Se(a));
205
+ }, $e = (s, o) => {
206
+ s.stopPropagation();
207
207
  const a = e.onClose;
208
208
  if (!a) return;
209
209
  const t = o;
210
- M(() => a(t));
211
- }, Ae = {
210
+ _(() => a(t));
211
+ }, Ne = {
212
212
  sm: "h-7 px-2 text-[11px]",
213
213
  md: "h-8 px-3 text-xs"
214
- }, $e = (n, o) => {
214
+ }, Le = (s, o) => {
215
215
  const a = "inline-flex items-center gap-1.5 font-medium transition-colors duration-120 whitespace-nowrap", t = o ? "cursor-not-allowed opacity-50" : "cursor-pointer", r = (() => {
216
216
  const c = d();
217
217
  return c === "none" || c === "slider" && E().visible ? "border-transparent" : O().tabBorderClass;
218
218
  })();
219
- return g(a, t, Ae[e.size ?? "md"], "rounded-t", q().tabBorderClass, n ? g(r, "text-foreground bg-background", e.slotClassNames?.tabActive) : g("border-transparent text-muted-foreground hover:text-foreground hover:bg-muted/50", e.slotClassNames?.tabInactive), o && "hover:bg-transparent hover:text-muted-foreground hover:border-transparent", e.slotClassNames?.tab);
219
+ return g(a, t, Ne[e.size ?? "md"], "rounded-t", q().tabBorderClass, s ? g(r, "text-foreground bg-background", e.slotClassNames?.tabActive) : g("border-transparent text-muted-foreground hover:text-foreground hover:bg-muted/50", e.slotClassNames?.tabInactive), o && "hover:bg-transparent hover:text-muted-foreground hover:border-transparent", e.slotClassNames?.tab);
220
220
  };
221
221
  return (() => {
222
- var n = We(), o = n.firstChild;
223
- de(n, ce({
222
+ var s = je(), o = s.firstChild;
223
+ ue(s, fe({
224
224
  get class() {
225
225
  return g("relative flex items-center gap-0.5", R() && "border-b border-border", e.slotClassNames?.root, e.class);
226
226
  }
227
- }, h), !1, !0), f(n, v(B, {
227
+ }, h), !1, !0), f(s, v(B, {
228
228
  get when() {
229
229
  return te();
230
230
  },
231
231
  get children() {
232
232
  var t = _e();
233
- return t.$$click = ye, f(t, v(Ye, {
233
+ return t.$$click = Be, f(t, v(Qe, {
234
234
  class: "w-4 h-4"
235
- })), x((r) => {
235
+ })), y((r) => {
236
236
  var c = !Z(), l = g("flex-shrink-0 flex items-center justify-center", "w-6 h-6 rounded cursor-pointer", "transition-[color,background-color,opacity] duration-120", Z() ? "text-muted-foreground hover:text-foreground hover:bg-muted/80 opacity-100" : "opacity-0 pointer-events-none", e.slotClassNames?.scrollButton);
237
- return c !== r.e && (t.disabled = r.e = c), l !== r.t && y(t, r.t = l), r;
237
+ return c !== r.e && (t.disabled = r.e = c), l !== r.t && k(t, r.t = l), r;
238
238
  }, {
239
239
  e: void 0,
240
240
  t: void 0
@@ -242,105 +242,107 @@ function at(i) {
242
242
  }
243
243
  }), o);
244
244
  var a = u;
245
- return typeof a == "function" ? ae(a, o) : u = o, f(o, v(B, {
245
+ return typeof a == "function" ? ie(a, o) : u = o, f(o, v(B, {
246
246
  get when() {
247
- return se(() => !!P())() && E().visible;
247
+ return le(() => !!P())() && E().visible;
248
248
  },
249
249
  get children() {
250
- var t = De();
251
- return x((r) => {
252
- var c = g("pointer-events-none absolute bottom-0 left-0 z-10", q().sliderHeightClass, O().sliderBgClass, p() ? "transition-[transform,width] duration-200 ease-out motion-reduce:transition-none" : "transition-none", "will-change-transform", e.slotClassNames?.indicator), l = `translate3d(${E().x}px, 0, 0)`, A = `${E().width}px`;
253
- return c !== r.e && y(t, r.e = c), l !== r.t && ne(t, "transform", r.t = l), A !== r.a && ne(t, "width", r.a = A), r;
250
+ var t = Oe();
251
+ return y((r) => {
252
+ var c = g("pointer-events-none absolute bottom-0 left-0 z-10", q().sliderHeightClass, O().sliderBgClass, x() ? "transition-[transform,width] duration-200 ease-out motion-reduce:transition-none" : "transition-none", "will-change-transform", e.slotClassNames?.indicator), l = `translate3d(${E().x}px, 0, 0)`, A = `${E().width}px`;
253
+ return c !== r.e && k(t, r.e = c), l !== r.t && ae(t, "transform", r.t = l), A !== r.a && ae(t, "width", r.a = A), r;
254
254
  }, {
255
255
  e: void 0,
256
256
  t: void 0,
257
257
  a: void 0
258
258
  }), t;
259
259
  }
260
- }), null), f(o, v(Le, {
260
+ }), null), f(o, v(Te, {
261
261
  get each() {
262
262
  return e.items;
263
263
  },
264
264
  children: (t) => {
265
265
  const r = () => t.id === G(), c = () => t.closable ?? z();
266
266
  return (() => {
267
- var l = Ge(), A = l.firstChild;
268
- return l.$$keydown = (s) => {
269
- if (s.key === "Enter" || s.key === " ") {
270
- s.preventDefault(), U(t.id, t.disabled);
267
+ var l = Xe(), A = l.firstChild;
268
+ return l.$$keydown = (n) => {
269
+ if (n.key === "Enter" || n.key === " ") {
270
+ n.preventDefault(), U(t.id, t.disabled);
271
271
  return;
272
272
  }
273
- Ie(s, t);
274
- }, l.$$click = () => U(t.id, t.disabled), ae((s) => {
275
- H.set(t.id, s), ie(() => H.delete(t.id));
273
+ Ae(n, t);
274
+ }, l.$$click = () => U(t.id, t.disabled), ie((n) => {
275
+ H.set(t.id, n), ce(() => H.delete(t.id));
276
276
  }, l), f(l, v(B, {
277
277
  get when() {
278
278
  return t.icon;
279
279
  },
280
280
  get children() {
281
- var s = Fe();
282
- return f(s, () => t.icon), s;
281
+ var n = Ge();
282
+ return f(n, () => t.icon), n;
283
283
  }
284
284
  }), A), f(A, () => t.label), f(l, v(B, {
285
285
  get when() {
286
- return se(() => !!c())() && !t.disabled;
286
+ return le(() => !!c())() && !t.disabled;
287
287
  },
288
288
  get children() {
289
- var s = je();
290
- return s.$$click = (m) => Se(m, t.id), f(s, v(ze, {
289
+ var n = Ue();
290
+ return n.$$click = (m) => $e(m, t.id), f(n, v(He, {
291
291
  class: "w-3 h-3"
292
- })), x((m) => {
292
+ })), y((m) => {
293
293
  var $ = g("flex-shrink-0 flex items-center justify-center", "w-5 h-5 rounded cursor-pointer", "bg-transparent text-muted-foreground", T() ? "hover:bg-error hover:text-error-foreground" : "hover:bg-muted/80 hover:text-foreground", "transition-colors duration-120", "ml-1.5", e.slotClassNames?.closeButton), N = `Close ${t.label}`;
294
- return $ !== m.e && y(s, m.e = $), N !== m.t && k(s, "aria-label", m.t = N), m;
294
+ return $ !== m.e && k(n, m.e = $), N !== m.t && p(n, "aria-label", m.t = N), m;
295
295
  }, {
296
296
  e: void 0,
297
297
  t: void 0
298
- }), s;
298
+ }), n;
299
299
  }
300
- }), null), x((s) => {
301
- var m = $e(r(), t.disabled), $ = r() ? "raised" : "flat", N = r(), re = t.disabled, oe = t.disabled ? -1 : r() ? 0 : -1;
302
- return m !== s.e && y(l, s.e = m), $ !== s.t && k(l, "data-floe-surface", s.t = $), N !== s.a && k(l, "aria-selected", s.a = N), re !== s.o && k(l, "aria-disabled", s.o = re), oe !== s.i && k(l, "tabindex", s.i = oe), s;
300
+ }), null), y((n) => {
301
+ var m = Le(r(), t.disabled), $ = t.domId, N = t.panelId, re = r() ? "raised" : "flat", oe = r(), ne = t.disabled, se = t.disabled ? -1 : r() ? 0 : -1;
302
+ return m !== n.e && k(l, n.e = m), $ !== n.t && p(l, "id", n.t = $), N !== n.a && p(l, "aria-controls", n.a = N), re !== n.o && p(l, "data-floe-surface", n.o = re), oe !== n.i && p(l, "aria-selected", n.i = oe), ne !== n.n && p(l, "aria-disabled", n.n = ne), se !== n.s && p(l, "tabindex", n.s = se), n;
303
303
  }, {
304
304
  e: void 0,
305
305
  t: void 0,
306
306
  a: void 0,
307
307
  o: void 0,
308
- i: void 0
308
+ i: void 0,
309
+ n: void 0,
310
+ s: void 0
309
311
  }), l;
310
312
  })();
311
313
  }
312
- }), null), f(n, v(B, {
314
+ }), null), f(s, v(B, {
313
315
  get when() {
314
- return fe();
316
+ return he();
315
317
  },
316
318
  get children() {
317
- var t = Me();
319
+ var t = We();
318
320
  return t.$$click = () => {
319
321
  const r = e.onAdd;
320
- r && M(() => r());
321
- }, f(t, v(Ee, {
322
+ r && _(() => r());
323
+ }, f(t, v(Pe, {
322
324
  get class() {
323
325
  return e.size === "sm" ? "w-3.5 h-3.5" : "w-4 h-4";
324
326
  }
325
- })), x(() => y(t, g("flex-shrink-0 flex items-center justify-center", "rounded hover:bg-muted/80 cursor-pointer", "text-muted-foreground hover:text-foreground", "transition-colors duration-120", e.size === "sm" ? "w-6 h-6" : "w-7 h-7", e.slotClassNames?.addButton))), t;
327
+ })), y(() => k(t, g("flex-shrink-0 flex items-center justify-center", "rounded hover:bg-muted/80 cursor-pointer", "text-muted-foreground hover:text-foreground", "transition-colors duration-120", e.size === "sm" ? "w-6 h-6" : "w-7 h-7", e.slotClassNames?.addButton))), t;
326
328
  }
327
- }), null), f(n, v(B, {
329
+ }), null), f(s, v(B, {
328
330
  get when() {
329
331
  return te();
330
332
  },
331
333
  get children() {
332
- var t = Oe();
333
- return t.$$click = ke, f(t, v(He, {
334
+ var t = Fe();
335
+ return t.$$click = Ie, f(t, v(De, {
334
336
  class: "w-4 h-4"
335
- })), x((r) => {
337
+ })), y((r) => {
336
338
  var c = !ee(), l = g("flex-shrink-0 flex items-center justify-center", "w-6 h-6 rounded cursor-pointer", "transition-[color,background-color,opacity] duration-120", ee() ? "text-muted-foreground hover:text-foreground hover:bg-muted/80 opacity-100" : "opacity-0 pointer-events-none", e.slotClassNames?.scrollButton);
337
- return c !== r.e && (t.disabled = r.e = c), l !== r.t && y(t, r.t = l), r;
339
+ return c !== r.e && (t.disabled = r.e = c), l !== r.t && k(t, r.t = l), r;
338
340
  }, {
339
341
  e: void 0,
340
342
  t: void 0
341
343
  }), t;
342
344
  }
343
- }), null), x((t) => {
345
+ }), null), y((t) => {
344
346
  var r = g(
345
347
  "relative flex-1 flex items-end gap-0.5 overflow-x-auto",
346
348
  "scrollbar-none",
@@ -348,22 +350,22 @@ function at(i) {
348
350
  "[&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]",
349
351
  e.slotClassNames?.scrollContainer
350
352
  ), c = e.ariaLabel;
351
- return r !== t.e && y(o, t.e = r), c !== t.t && k(o, "aria-label", t.t = c), t;
353
+ return r !== t.e && k(o, t.e = r), c !== t.t && p(o, "aria-label", t.t = c), t;
352
354
  }, {
353
355
  e: void 0,
354
356
  t: void 0
355
- }), n;
357
+ }), s;
356
358
  })();
357
359
  }
358
- function lt(i) {
359
- const [e, h] = ue(i, ["active", "keepMounted", "labelledBy", "class", "children"]);
360
+ function dt(i) {
361
+ const [e, h] = ve(i, ["active", "keepMounted", "labelledBy", "class", "children"]);
360
362
  return v(B, {
361
363
  get when() {
362
364
  return e.keepMounted || e.active;
363
365
  },
364
366
  get children() {
365
- var d = Ue();
366
- return de(d, ce({
367
+ var d = Ve();
368
+ return ue(d, fe({
367
369
  get "aria-labelledby"() {
368
370
  return e.labelledBy;
369
371
  },
@@ -380,9 +382,9 @@ function lt(i) {
380
382
  }
381
383
  });
382
384
  }
383
- Ne(["click", "keydown"]);
385
+ Re(["click", "keydown"]);
384
386
  export {
385
- lt as TabPanel,
386
- at as Tabs,
387
- Xe as resolveTabNavigationTargetId
387
+ dt as TabPanel,
388
+ it as Tabs,
389
+ qe as resolveTabNavigationTargetId
388
390
  };
@@ -12,6 +12,8 @@ export interface WorkbenchFilterBarProps {
12
12
  modeIcons?: WorkbenchDockModeIcons;
13
13
  /** Changes built-in Dock clicks without affecting drag-to-create behavior. */
14
14
  activationMode?: WorkbenchDockItemActivationMode;
15
+ /** Orders work-mode widgets and tools by id; unlisted entries retain their relative order at the end. */
16
+ componentOrder?: readonly (WorkbenchWidgetType | WorkbenchDockToolId)[];
15
17
  /** Solo a single dock component in the supplied mode scope; soloing it again shows the full scope. */
16
18
  onSoloFilter: (id: string, scope: readonly string[]) => void;
17
19
  onSelectMode?: (mode: WorkbenchInteractionMode) => void;
@@ -56,6 +58,8 @@ export type WorkbenchDockAction = Readonly<{
56
58
  class?: string;
57
59
  }>;
58
60
  active?: boolean;
61
+ /** Places the action before or after components, always before host items in that group. */
62
+ dockPlacement?: WorkbenchDockItemPlacement;
59
63
  onActivate: (trigger: HTMLButtonElement) => void;
60
64
  }>;
61
65
  export type WorkbenchHostDockItem = Readonly<{