@floegence/floe-webapp-core 0.86.60 → 0.86.63

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 (122) hide show
  1. package/dist/app/FloeRegistryContributions.js +0 -3
  2. package/dist/components/chat/blocks/BlockRenderer.js +1 -1
  3. package/dist/components/chat/blocks/CodeDiffBlock.js +56 -56
  4. package/dist/components/chat/blocks/ImageBlock.js +1 -1
  5. package/dist/components/chat/blocks/ToolCallBlock.js +57 -57
  6. package/dist/components/chat/status/ConnectionStatus.js +10 -10
  7. package/dist/components/deck/DeckCell.js +25 -25
  8. package/dist/components/deck/DeckContextMenu.js +20 -20
  9. package/dist/components/deck/DeckGrid.js +1 -1
  10. package/dist/components/deck/DeckTopBar.js +42 -42
  11. package/dist/components/deck/DropZonePreview.js +6 -6
  12. package/dist/components/deck/LayoutSelector.js +53 -53
  13. package/dist/components/deck/WidgetFrame.js +28 -28
  14. package/dist/components/deck/WidgetPalette.js +31 -31
  15. package/dist/components/deck/WidgetTypeSwitcher.js +31 -31
  16. package/dist/components/file-browser/Breadcrumb.js +27 -27
  17. package/dist/components/file-browser/DirectoryTree.js +15 -15
  18. package/dist/components/file-browser/DragPreview.js +58 -58
  19. package/dist/components/file-browser/FileBrowser.js +17 -17
  20. package/dist/components/file-browser/FileBrowserStatusBar.js +18 -18
  21. package/dist/components/file-browser/FileBrowserToolbar.js +27 -27
  22. package/dist/components/file-browser/FileContextMenu.js +47 -47
  23. package/dist/components/file-browser/FileGridView.js +53 -51
  24. package/dist/components/file-browser/FileItemDecorations.js +30 -27
  25. package/dist/components/file-browser/FileListView.js +114 -114
  26. package/dist/components/icons/ActivityRailIcons.d.ts +30 -0
  27. package/dist/components/icons/ActivityRailIcons.js +68 -0
  28. package/dist/components/icons/index.d.ts +1 -0
  29. package/dist/components/icons/index.js +1357 -1357
  30. package/dist/components/launchpad/Launchpad.js +14 -14
  31. package/dist/components/launchpad/LaunchpadGrid.js +7 -7
  32. package/dist/components/launchpad/LaunchpadItem.js +11 -11
  33. package/dist/components/launchpad/LaunchpadPagination.js +16 -16
  34. package/dist/components/launchpad/LaunchpadSearch.js +9 -9
  35. package/dist/components/layout/ActivityBar.js +61 -63
  36. package/dist/components/layout/DisplayModeSwitcher.d.ts +10 -0
  37. package/dist/components/layout/DisplayModeSwitcher.js +102 -33
  38. package/dist/components/layout/MobileNavigationPanel.js +36 -36
  39. package/dist/components/layout/MobileTabBar.js +39 -39
  40. package/dist/components/layout/Panel.js +16 -16
  41. package/dist/components/layout/ResizeHandle.js +19 -19
  42. package/dist/components/layout/Shell.d.ts +0 -6
  43. package/dist/components/layout/Shell.js +208 -254
  44. package/dist/components/layout/Sidebar.js +37 -36
  45. package/dist/components/layout/SidebarPane.js +19 -19
  46. package/dist/components/layout/ThemeToggle.d.ts +19 -0
  47. package/dist/components/layout/ThemeToggle.js +39 -0
  48. package/dist/components/layout/TopBar.js +16 -16
  49. package/dist/components/layout/TopBarIconButton.js +15 -15
  50. package/dist/components/layout/index.d.ts +1 -1
  51. package/dist/components/loading/LoadingOverlay.js +9 -9
  52. package/dist/components/loading/Skeleton.js +11 -11
  53. package/dist/components/ui/Button.js +44 -36
  54. package/dist/components/ui/Card.d.ts +11 -62
  55. package/dist/components/ui/Card.js +64 -237
  56. package/dist/components/ui/Checkbox.js +79 -79
  57. package/dist/components/ui/CommandPalette.js +56 -55
  58. package/dist/components/ui/Dialog.js +91 -93
  59. package/dist/components/ui/DirectoryInput.js +22 -22
  60. package/dist/components/ui/DirectoryPicker.js +8 -8
  61. package/dist/components/ui/Dropdown.js +89 -87
  62. package/dist/components/ui/FeedbackIndicator.js +57 -57
  63. package/dist/components/ui/FileOpenPicker.js +37 -37
  64. package/dist/components/ui/FileSavePicker.js +41 -41
  65. package/dist/components/ui/FloatingWindow.js +213 -205
  66. package/dist/components/ui/Form.js +76 -76
  67. package/dist/components/ui/HighlightBlock.js +14 -14
  68. package/dist/components/ui/Input.js +106 -109
  69. package/dist/components/ui/Pagination.js +86 -86
  70. package/dist/components/ui/Popover.d.ts +33 -0
  71. package/dist/components/ui/Popover.js +133 -0
  72. package/dist/components/ui/ProcessingIndicator.js +344 -345
  73. package/dist/components/ui/Progress.js +94 -97
  74. package/dist/components/ui/QuoteBlock.js +25 -25
  75. package/dist/components/ui/Radio.js +91 -91
  76. package/dist/components/ui/SegmentedControl.js +24 -24
  77. package/dist/components/ui/Stepper.js +68 -60
  78. package/dist/components/ui/Switch.js +25 -25
  79. package/dist/components/ui/Tabs.js +188 -163
  80. package/dist/components/ui/Tag.js +12 -9
  81. package/dist/components/ui/Tooltip.js +30 -30
  82. package/dist/components/ui/floatingPresence.d.ts +7 -0
  83. package/dist/components/ui/floatingPresence.js +80 -39
  84. package/dist/components/ui/index.d.ts +2 -1
  85. package/dist/components/ui/picker/DirectoryFavorites.js +27 -27
  86. package/dist/components/ui/picker/PickerBase.js +107 -107
  87. package/dist/context/ComponentRegistry.d.ts +0 -8
  88. package/dist/context/ComponentRegistry.js +61 -67
  89. package/dist/context/FloeConfigContext.d.ts +0 -6
  90. package/dist/context/FloeConfigContext.js +9 -15
  91. package/dist/context/NotificationContext.js +4 -4
  92. package/dist/context/ThemeContext.js +71 -70
  93. package/dist/context/index.d.ts +1 -1
  94. package/dist/display-mode.css +2 -45
  95. package/dist/floe.css +205 -43
  96. package/dist/full.js +701 -695
  97. package/dist/icons.js +112 -102
  98. package/dist/language.css +320 -0
  99. package/dist/layout.js +33 -35
  100. package/dist/primitives.css +23 -17
  101. package/dist/standalone.css +1 -0
  102. package/dist/styles/themes/classicSemanticTokens.d.ts +122 -122
  103. package/dist/styles/themes/classicSemanticTokens.js +140 -138
  104. package/dist/styles/themes/index.d.ts +3 -1
  105. package/dist/styles/themes/index.js +10 -10
  106. package/dist/styles/themes/presets.d.ts +2 -2
  107. package/dist/styles/themes/presets.js +34 -34
  108. package/dist/styles/tokens.d.ts +152 -68
  109. package/dist/styles/tokens.js +87 -49
  110. package/dist/styles.css +1 -1
  111. package/dist/surface.css +214 -117
  112. package/dist/themes/dark.css +64 -64
  113. package/dist/themes/light.css +64 -64
  114. package/dist/ui.css +171 -255
  115. package/dist/ui.js +176 -178
  116. package/dist/utils/hotInteraction.d.ts +7 -0
  117. package/dist/utils/hotInteraction.js +12 -12
  118. package/dist/widgets/TerminalWidget.js +28 -28
  119. package/dist/workbench-composition.css +15 -15
  120. package/package.json +1 -1
  121. package/dist/components/layout/BottomBar.d.ts +0 -29
  122. package/dist/components/layout/BottomBar.js +0 -70
@@ -1,44 +1,44 @@
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, onCleanup as ce } from "solid-js";
3
- import { cn as g } from "../../utils/cn.js";
4
- import { deferAfterPaint as _ } from "../../utils/defer.js";
5
- import { KeyedFor as Te } from "./KeyedFor.js";
6
- import { createUIFirstSelection as ze } from "../../utils/uiFirstSelection.js";
1
+ import { createComponent as v, spread as ue, mergeProps as fe, insert as f, effect as x, className as B, setStyleProperty as le, memo as ae, use as ie, setAttribute as m, template as C, delegateEvents as ze } from "solid-js/web";
2
+ import { splitProps as ve, Show as I, createSignal as L, untrack as de, createEffect as K, onCleanup as ce } from "solid-js";
3
+ import { cn as h } from "../../utils/cn.js";
4
+ import { deferAfterPaint as O } from "../../utils/defer.js";
5
+ import { KeyedFor as Re } from "./KeyedFor.js";
6
+ import { createUIFirstSelection as Te } from "../../utils/uiFirstSelection.js";
7
7
  import { useViewActivation as Ee } from "../../context/ViewActivationContext.js";
8
8
  import { X as He, Plus as Pe, ChevronRight as De } from "../icons/index.js";
9
- 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">'), Ke = /* @__PURE__ */ w("<div role=tabpanel>");
10
- const K = {
9
+ var Me = /* @__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 V = {
11
11
  x: 0,
12
12
  width: 0,
13
13
  visible: !1
14
14
  };
15
- function Ve(i, e, h) {
16
- const d = i.filter((x) => !x.disabled);
15
+ function Ke(i, t, b) {
16
+ const d = i.filter((k) => !k.disabled);
17
17
  if (!d.length) return null;
18
- const C = d.findIndex((x) => x.id === e);
19
- if (C < 0) return null;
20
- let b = null;
21
- switch (h) {
18
+ const p = d.findIndex((k) => k.id === t);
19
+ if (p < 0) return null;
20
+ let g = null;
21
+ switch (b) {
22
22
  case "ArrowRight":
23
23
  case "ArrowDown":
24
- b = (C + 1) % d.length;
24
+ g = (p + 1) % d.length;
25
25
  break;
26
26
  case "ArrowLeft":
27
27
  case "ArrowUp":
28
- b = (C - 1 + d.length) % d.length;
28
+ g = (p - 1 + d.length) % d.length;
29
29
  break;
30
30
  case "Home":
31
- b = 0;
31
+ g = 0;
32
32
  break;
33
33
  case "End":
34
- b = d.length - 1;
34
+ g = d.length - 1;
35
35
  break;
36
36
  default:
37
37
  return null;
38
38
  }
39
- return d[b]?.id ?? null;
39
+ return d[g]?.id ?? null;
40
40
  }
41
- function qe(i) {
41
+ function Ve(i) {
42
42
  return i === 1 || i === 2 || i === 3 || i === 4 ? i : 2;
43
43
  }
44
44
  function Ye(i) {
@@ -69,97 +69,97 @@ function Je(i) {
69
69
  switch (i) {
70
70
  case "border":
71
71
  return {
72
- tabBorderClass: "border-border",
73
- sliderBgClass: "bg-border"
72
+ tabBorderClass: "border-[var(--floe-line)]",
73
+ sliderBgClass: "bg-[var(--floe-line)]"
74
74
  };
75
75
  case "muted-foreground":
76
76
  return {
77
77
  tabBorderClass: "border-muted-foreground",
78
- sliderBgClass: "bg-muted-foreground"
78
+ sliderBgClass: "bg-[var(--floe-ink-ghost)]"
79
79
  };
80
80
  default:
81
81
  return {
82
- tabBorderClass: "border-primary",
83
- sliderBgClass: "bg-primary"
82
+ tabBorderClass: "border-[var(--floe-accent-ink)]",
83
+ sliderBgClass: "bg-[var(--floe-accent-ink)]"
84
84
  };
85
85
  }
86
86
  }
87
87
  const Qe = (i) => (() => {
88
- var e = Me();
89
- return y(() => p(e, "class", i.class)), e;
88
+ var t = Me();
89
+ return x(() => m(t, "class", i.class)), t;
90
90
  })();
91
91
  function Ze(i) {
92
92
  const {
93
- container: e,
94
- tab: h
95
- } = i, d = h.offsetParent, C = h.offsetWidth;
96
- if (d === e && Number.isFinite(h.offsetLeft) && Number.isFinite(C))
93
+ container: t,
94
+ tab: b
95
+ } = i, d = b.offsetParent, p = b.offsetWidth;
96
+ if (d === t && Number.isFinite(b.offsetLeft) && Number.isFinite(p))
97
97
  return {
98
- x: h.offsetLeft,
99
- width: C,
100
- visible: C > 0
98
+ x: b.offsetLeft,
99
+ width: p,
100
+ visible: p > 0
101
101
  };
102
- 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
+ const g = t.getBoundingClientRect(), k = b.getBoundingClientRect(), z = t.offsetWidth || t.clientWidth, S = g.width > 0 && z > 0 ? g.width / z : 1, R = Number.isFinite(S) && S > 0 ? S : 1, T = k.width / R;
103
103
  return {
104
- x: (x.left - b.left + e.scrollLeft) / T,
105
- width: z,
106
- visible: z > 0
104
+ x: (k.left - g.left + t.scrollLeft) / R,
105
+ width: T,
106
+ visible: T > 0
107
107
  };
108
108
  }
109
109
  function dt(i) {
110
- 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 = () => qe(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, V = () => Ye(C()), O = () => Je(b());
110
+ const [t, b] = ve(i, ["items", "activeId", "defaultActiveId", "onChange", "onActiveIdChange", "onClose", "onAdd", "showAdd", "closable", "size", "features", "slotClassNames", "ariaLabel", "class"]), d = () => t.features?.indicator?.mode ?? "activeBorder", p = () => Ve(t.features?.indicator?.thicknessPx), g = () => t.features?.indicator?.colorToken ?? "primary", k = () => t.features?.indicator?.animated ?? !0, z = () => t.features?.containerBorder ?? !0, S = () => t.features?.scrollButtons ?? "auto", R = () => t.features?.closeButton?.dangerHover ?? !0, T = () => t.features?.closeButton?.enabledByDefault ?? t.closable ?? !1, he = () => t.features?.addButton?.enabled ?? t.showAdd ?? !1, Y = () => Ye(p()), W = () => Je(g());
111
111
  let u;
112
- const q = (() => {
112
+ const J = (() => {
113
113
  try {
114
114
  return Ee();
115
115
  } catch {
116
116
  return null;
117
117
  }
118
- })(), S = () => q ? q.active() : !0;
119
- let W = !1;
120
- const [E, F] = L(K), H = /* @__PURE__ */ new Map();
118
+ })(), A = () => J ? J.active() : !0;
119
+ let F = !1;
120
+ const [E, _] = L(V), H = /* @__PURE__ */ new Map();
121
121
  let j = !1;
122
- const P = () => d() === "slider", Y = (s) => {
122
+ const P = () => d() === "slider", Q = (s) => {
123
123
  if (!u || !P()) return !1;
124
- const o = H.get(s);
125
- if (!o) return !1;
124
+ const r = H.get(s);
125
+ if (!r) return !1;
126
126
  const a = Ze({
127
127
  container: u,
128
- tab: o
128
+ tab: r
129
129
  });
130
- return F(a), a.visible;
130
+ return _(a), a.visible;
131
131
  }, be = () => {
132
132
  if (!P()) {
133
- F(K);
133
+ _(V);
134
134
  return;
135
135
  }
136
- Y(G()) || F(K);
136
+ Q(q()) || _(V);
137
137
  }, D = () => {
138
- j || (j = !0, _(() => {
138
+ j || (j = !0, O(() => {
139
139
  j = !1, de(() => {
140
- S() && be();
140
+ A() && be();
141
141
  });
142
142
  }));
143
- }, J = () => e.activeId !== void 0, ge = () => e.onChange ?? e.onActiveIdChange, [me, we] = L(de(() => e.defaultActiveId ?? e.items[0]?.id ?? "")), Q = ze({
144
- committed: () => J() ? e.activeId : me(),
143
+ }, Z = () => t.activeId !== void 0, ge = () => t.onChange ?? t.onActiveIdChange, [me, we] = L(de(() => t.defaultActiveId ?? t.items[0]?.id ?? "")), ee = Te({
144
+ committed: () => Z() ? t.activeId : me(),
145
145
  commit: (s) => {
146
- J() || we(s), ge()?.(s);
146
+ Z() || we(s), ge()?.(s);
147
147
  }
148
- }), G = Q.visual;
149
- X(() => {
150
- S() && (d(), G(), D());
148
+ }), q = ee.visual;
149
+ K(() => {
150
+ A() && (d(), q(), D());
151
151
  });
152
- const [Z, Ce] = L(!1), [ee, pe] = L(!1), [xe, ye] = L(!1), te = () => I() === "auto" && xe(), ke = () => {
152
+ const [G, Ce] = L(!1), [U, pe] = L(!1), [ke, ye] = L(!1), te = () => S() === "auto" && ke(), xe = () => {
153
153
  if (!u) return;
154
154
  const {
155
155
  scrollLeft: s,
156
- scrollWidth: o,
156
+ scrollWidth: r,
157
157
  clientWidth: a
158
- } = u, t = o > a;
159
- ye(t), Ce(s > 0), pe(s + a < o - 1);
158
+ } = u, e = r > a;
159
+ ye(e), Ce(s > 0), pe(s + a < r - 1);
160
160
  }, M = () => {
161
- W || (W = !0, _(() => {
162
- W = !1, S() && ke();
161
+ F || (F = !0, O(() => {
162
+ F = !1, A() && xe();
163
163
  }));
164
164
  }, Be = () => {
165
165
  u && u.scrollBy({
@@ -172,136 +172,159 @@ function dt(i) {
172
172
  behavior: "smooth"
173
173
  });
174
174
  };
175
- X(() => {
176
- if (!u || !S()) return;
175
+ K(() => {
176
+ if (!u || !A()) return;
177
177
  M(), D();
178
178
  const s = () => M();
179
179
  u.addEventListener("scroll", s);
180
- const o = () => {
180
+ const r = () => {
181
181
  M(), D();
182
182
  };
183
183
  let a;
184
- typeof ResizeObserver < "u" ? (a = new ResizeObserver(o), a.observe(u)) : typeof window < "u" && window.addEventListener("resize", o), ce(() => {
185
- u?.removeEventListener("scroll", s), a?.disconnect(), typeof window < "u" && window.removeEventListener("resize", o);
184
+ typeof ResizeObserver < "u" ? (a = new ResizeObserver(r), a.observe(u)) : typeof window < "u" && window.addEventListener("resize", r), ce(() => {
185
+ u?.removeEventListener("scroll", s), a?.disconnect(), typeof window < "u" && window.removeEventListener("resize", r);
186
186
  });
187
- }), X(() => {
188
- S() && (e.items.length, M(), D());
187
+ }), K(() => {
188
+ A() && (t.items.length, M(), D());
189
189
  });
190
- const U = (s, o) => {
191
- o || (Q.request(s), P() && Y(s));
190
+ const X = (s, r) => {
191
+ r || (ee.request(s), P() && Q(s));
192
192
  }, Se = (s) => {
193
- const o = e.items.find((t) => t.id === s);
194
- if (!o) return;
195
- U(o.id, o.disabled);
196
- const a = H.get(o.id);
193
+ const r = t.items.find((e) => e.id === s);
194
+ if (!r) return;
195
+ X(r.id, r.disabled);
196
+ const a = H.get(r.id);
197
197
  a?.focus({
198
198
  preventScroll: !0
199
199
  }), a?.scrollIntoView({
200
200
  block: "nearest",
201
201
  inline: "nearest"
202
202
  });
203
- }, Ae = (s, o) => {
204
- const a = Ve(e.items, o.id, s.key);
203
+ }, Ae = (s, r) => {
204
+ const a = Ke(t.items, r.id, s.key);
205
205
  a && (s.preventDefault(), Se(a));
206
- }, $e = (s, o) => {
206
+ }, Ne = (s, r) => {
207
207
  s.stopPropagation();
208
- const a = e.onClose;
208
+ const a = t.onClose;
209
209
  if (!a) return;
210
- const t = o;
211
- _(() => a(t));
212
- }, Ne = {
213
- sm: "h-7 px-2 text-[11px]",
214
- md: "h-8 px-3 text-xs"
215
- }, Le = (s, o) => {
216
- 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 = (() => {
210
+ const e = r;
211
+ O(() => a(e));
212
+ }, $e = {
213
+ sm: "h-[var(--floe-control-height-sm)] px-[var(--floe-control-padding-sm)]",
214
+ md: "h-[var(--floe-control-height-md)] px-[var(--floe-control-padding-md)]"
215
+ }, Le = (s, r) => {
216
+ const a = h("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
217
  const c = d();
218
- return c === "none" || c === "slider" && E().visible ? "border-transparent" : O().tabBorderClass;
218
+ return c === "none" || c === "slider" && E().visible ? "border-transparent" : W().tabBorderClass;
219
219
  })();
220
- return g(a, t, Ne[e.size ?? "md"], "rounded-t", V().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
+ return h(
221
+ a,
222
+ e,
223
+ $e[t.size ?? "md"],
224
+ "rounded-control",
225
+ Y().tabBorderClass,
226
+ /* The selected face is painted by the surface layer (`data-floe-surface`
227
+ * plus `aria-selected`), which keeps the fill, hairline and first
228
+ * elevation step identical to every other selected control. */
229
+ s ? h(o, "text-foreground", t.slotClassNames?.tabActive) : h("border-transparent text-[var(--floe-ink-soft)]", t.slotClassNames?.tabInactive),
230
+ r && "opacity-50",
231
+ t.slotClassNames?.tab
232
+ );
221
233
  };
222
234
  return (() => {
223
- var s = je(), o = s.firstChild;
235
+ var s = je(), r = s.firstChild;
224
236
  ue(s, fe({
225
237
  get class() {
226
- return g("relative flex items-center gap-0.5", R() && "border-b border-border", e.slotClassNames?.root, e.class);
238
+ return h(
239
+ /* One strip, one baseline: the rail, the scroll buttons and the add
240
+ * button all take their height from the row, so nothing floats above
241
+ * the rule. The rail's fill is carried onto those trailing controls,
242
+ * otherwise the band stops short and leaves a notch beside the last
243
+ * control. */
244
+ "relative flex items-stretch",
245
+ t.size === "sm" ? "min-h-[var(--floe-control-height-sm)]" : "min-h-[var(--floe-control-height-md)]",
246
+ z() && "border-b border-[var(--floe-line)]",
247
+ t.slotClassNames?.root,
248
+ t.class
249
+ );
227
250
  }
228
- }, h), !1, !0), f(s, v(B, {
251
+ }, b), !1, !0), f(s, v(I, {
229
252
  get when() {
230
253
  return te();
231
254
  },
232
255
  get children() {
233
- var t = _e();
234
- return t.$$click = Be, f(t, v(Qe, {
256
+ var e = Oe();
257
+ return e.$$click = Be, f(e, v(Qe, {
235
258
  class: "w-4 h-4"
236
- })), y((r) => {
237
- 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);
238
- return c !== r.e && (t.disabled = r.e = c), l !== r.t && k(t, r.t = l), r;
259
+ })), x((o) => {
260
+ var c = !G(), l = h("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);
261
+ return c !== o.e && (e.disabled = o.e = c), l !== o.t && B(e, o.t = l), o;
239
262
  }, {
240
263
  e: void 0,
241
264
  t: void 0
242
- }), t;
265
+ }), e;
243
266
  }
244
- }), o);
267
+ }), r);
245
268
  var a = u;
246
- return typeof a == "function" ? ie(a, o) : u = o, f(o, v(B, {
269
+ return typeof a == "function" ? ie(a, r) : u = r, f(r, v(I, {
247
270
  get when() {
248
- return le(() => !!P())() && E().visible;
271
+ return ae(() => !!P())() && E().visible;
249
272
  },
250
273
  get children() {
251
- var t = Oe();
252
- return y((r) => {
253
- var c = g("pointer-events-none absolute bottom-0 left-0 z-10", V().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`;
254
- 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;
274
+ var e = We();
275
+ return x((o) => {
276
+ var c = h("pointer-events-none absolute bottom-0 left-0 z-10", Y().sliderHeightClass, W().sliderBgClass, k() ? "transition-[transform,width] duration-[var(--floe-duration-base)] ease-out motion-reduce:transition-none" : "transition-none", "will-change-transform", t.slotClassNames?.indicator), l = `translate3d(${E().x}px, 0, 0)`, y = `${E().width}px`;
277
+ return c !== o.e && B(e, o.e = c), l !== o.t && le(e, "transform", o.t = l), y !== o.a && le(e, "width", o.a = y), o;
255
278
  }, {
256
279
  e: void 0,
257
280
  t: void 0,
258
281
  a: void 0
259
- }), t;
282
+ }), e;
260
283
  }
261
- }), null), f(o, v(Te, {
284
+ }), null), f(r, v(Re, {
262
285
  get each() {
263
- return e.items;
286
+ return t.items;
264
287
  },
265
- by: (t) => t.id,
266
- children: (t) => {
267
- const r = () => t().id === G(), c = () => t().closable ?? z();
288
+ by: (e) => e.id,
289
+ children: (e) => {
290
+ const o = () => e().id === q(), c = () => e().closable ?? T();
268
291
  return (() => {
269
- var l = Xe(), A = l.firstChild;
292
+ var l = Ue(), y = l.firstChild;
270
293
  return l.$$keydown = (n) => {
271
294
  if (n.key === "Enter" || n.key === " ") {
272
- n.preventDefault(), U(t().id, t().disabled);
295
+ n.preventDefault(), X(e().id, e().disabled);
273
296
  return;
274
297
  }
275
- Ae(n, t());
276
- }, l.$$click = () => U(t().id, t().disabled), ie((n) => {
277
- H.set(t().id, n), ce(() => H.delete(t().id));
278
- }, l), f(l, v(B, {
298
+ Ae(n, e());
299
+ }, l.$$click = () => X(e().id, e().disabled), ie((n) => {
300
+ H.set(e().id, n), ce(() => H.delete(e().id));
301
+ }, l), f(l, v(I, {
279
302
  get when() {
280
- return t().icon;
303
+ return e().icon;
281
304
  },
282
305
  get children() {
283
- var n = Ge();
284
- return f(n, () => t().icon), n;
306
+ var n = qe();
307
+ return f(n, () => e().icon), n;
285
308
  }
286
- }), A), f(A, () => t().label), f(l, v(B, {
309
+ }), y), f(y, () => e().label), f(l, v(I, {
287
310
  get when() {
288
- return le(() => !!c())() && !t().disabled;
311
+ return ae(() => !!c())() && !e().disabled;
289
312
  },
290
313
  get children() {
291
- var n = Ue();
292
- return n.$$click = (m) => $e(m, t().id), f(n, v(He, {
314
+ var n = Ge();
315
+ return n.$$click = (w) => Ne(w, e().id), f(n, v(He, {
293
316
  class: "w-3 h-3"
294
- })), y((m) => {
295
- 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}`;
296
- return $ !== m.e && k(n, m.e = $), N !== m.t && p(n, "aria-label", m.t = N), m;
317
+ })), x((w) => {
318
+ var N = h("flex-shrink-0 flex items-center justify-center", "w-5 h-5 rounded-control cursor-pointer", "bg-transparent text-[var(--floe-ink-quiet)]", R() ? "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 && B(n, w.e = N), $ !== w.t && m(n, "aria-label", w.t = $), w;
297
320
  }, {
298
321
  e: void 0,
299
322
  t: void 0
300
323
  }), n;
301
324
  }
302
- }), null), y((n) => {
303
- 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;
304
- 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;
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, se = e().disabled ? -1 : o() ? 0 : -1;
327
+ return w !== n.e && B(l, n.e = w), N !== n.t && m(l, "id", n.t = N), $ !== n.a && m(l, "aria-controls", n.a = $), re !== n.o && m(l, "data-floe-surface", n.o = re), oe !== n.i && m(l, "aria-selected", n.i = oe), ne !== n.n && m(l, "aria-disabled", n.n = ne), se !== n.s && m(l, "tabindex", n.s = se), n;
305
328
  }, {
306
329
  e: void 0,
307
330
  t: void 0,
@@ -313,80 +336,82 @@ function dt(i) {
313
336
  }), l;
314
337
  })();
315
338
  }
316
- }), null), f(s, v(B, {
339
+ }), null), f(s, v(I, {
317
340
  get when() {
318
341
  return he();
319
342
  },
320
343
  get children() {
321
- var t = We();
322
- return t.$$click = () => {
323
- const r = e.onAdd;
324
- r && _(() => r());
325
- }, f(t, v(Pe, {
344
+ var e = Fe();
345
+ return e.$$click = () => {
346
+ const o = t.onAdd;
347
+ o && O(() => o());
348
+ }, f(e, v(Pe, {
326
349
  get class() {
327
- return e.size === "sm" ? "w-3.5 h-3.5" : "w-4 h-4";
350
+ return t.size === "sm" ? "w-3.5 h-3.5" : "w-4 h-4";
328
351
  }
329
- })), 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;
352
+ })), x(() => B(e, h("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;
330
353
  }
331
- }), null), f(s, v(B, {
354
+ }), null), f(s, v(I, {
332
355
  get when() {
333
356
  return te();
334
357
  },
335
358
  get children() {
336
- var t = Fe();
337
- return t.$$click = Ie, f(t, v(De, {
359
+ var e = _e();
360
+ return e.$$click = Ie, f(e, v(De, {
338
361
  class: "w-4 h-4"
339
- })), y((r) => {
340
- 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);
341
- return c !== r.e && (t.disabled = r.e = c), l !== r.t && k(t, r.t = l), r;
362
+ })), x((o) => {
363
+ var c = !U(), l = h("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)]", U() ? "text-[var(--floe-ink-quiet)] hover:bg-[var(--floe-state-hover)] opacity-100" : "opacity-0 pointer-events-none", t.slotClassNames?.scrollButton);
364
+ return c !== o.e && (e.disabled = o.e = c), l !== o.t && B(e, o.t = l), o;
342
365
  }, {
343
366
  e: void 0,
344
367
  t: void 0
345
- }), t;
368
+ }), e;
346
369
  }
347
- }), null), y((t) => {
348
- var r = g(
370
+ }), null), x((e) => {
371
+ var o = h(
349
372
  "relative flex-1 flex items-end gap-0.5 overflow-x-auto",
350
373
  "scrollbar-none",
351
374
  // Hide scrollbar for all browsers
352
375
  "[&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]",
353
- e.slotClassNames?.scrollContainer
354
- ), c = e.ariaLabel;
355
- return r !== t.e && k(o, t.e = r), c !== t.t && p(o, "aria-label", t.t = c), t;
376
+ t.slotClassNames?.scrollContainer
377
+ ), c = G() ? "" : void 0, l = U() ? "" : void 0, y = t.ariaLabel;
378
+ return o !== e.e && B(r, e.e = o), c !== e.t && m(r, "data-floe-overflow-start", e.t = c), l !== e.a && m(r, "data-floe-overflow-end", e.a = l), y !== e.o && m(r, "aria-label", e.o = y), e;
356
379
  }, {
357
380
  e: void 0,
358
- t: void 0
381
+ t: void 0,
382
+ a: void 0,
383
+ o: void 0
359
384
  }), s;
360
385
  })();
361
386
  }
362
387
  function ct(i) {
363
- const [e, h] = ve(i, ["active", "keepMounted", "labelledBy", "class", "children"]);
364
- return v(B, {
388
+ const [t, b] = ve(i, ["active", "keepMounted", "labelledBy", "class", "children"]);
389
+ return v(I, {
365
390
  get when() {
366
- return e.keepMounted || e.active;
391
+ return t.keepMounted || t.active;
367
392
  },
368
393
  get children() {
369
- var d = Ke();
394
+ var d = Xe();
370
395
  return ue(d, fe({
371
396
  get "aria-labelledby"() {
372
- return e.labelledBy;
397
+ return t.labelledBy;
373
398
  },
374
399
  get "aria-hidden"() {
375
- return !e.active && e.keepMounted ? "true" : void 0;
400
+ return !t.active && t.keepMounted ? "true" : void 0;
376
401
  },
377
402
  get tabIndex() {
378
- return e.active ? 0 : -1;
403
+ return t.active ? 0 : -1;
379
404
  },
380
405
  get class() {
381
- return g(!e.active && e.keepMounted && "hidden", e.class);
406
+ return h(!t.active && t.keepMounted && "hidden", t.class);
382
407
  }
383
- }, h), !1, !0), f(d, () => e.children), d;
408
+ }, b), !1, !0), f(d, () => t.children), d;
384
409
  }
385
410
  });
386
411
  }
387
- Re(["click", "keydown"]);
412
+ ze(["click", "keydown"]);
388
413
  export {
389
414
  ct as TabPanel,
390
415
  dt as Tabs,
391
- Ve as resolveTabNavigationTargetId
416
+ Ke as resolveTabNavigationTargetId
392
417
  };
@@ -1,24 +1,27 @@
1
- import { spread as i, mergeProps as u, insert as a, memo as n, createComponent as p, Dynamic as f, template as l } from "solid-js/web";
2
- import { splitProps as m } from "solid-js";
3
- import { cn as d } from "../../utils/cn.js";
4
- var _ = /* @__PURE__ */ l("<span data-floe-surface-part=badge>"), g = /* @__PURE__ */ l("<span class=floe-tag__dot aria-hidden=true>"), $ = /* @__PURE__ */ l("<span class=floe-tag__label>");
1
+ import { spread as i, mergeProps as u, insert as a, memo as n, createComponent as f, Dynamic as p, template as l } from "solid-js/web";
2
+ import { splitProps as d } from "solid-js";
3
+ import { cn as m } from "../../utils/cn.js";
4
+ var g = /* @__PURE__ */ l("<span data-floe-surface-part=badge>"), _ = /* @__PURE__ */ l("<span class=floe-tag__dot aria-hidden=true>"), $ = /* @__PURE__ */ l("<span class=floe-tag__label>");
5
5
  function z(s) {
6
- const [e, c] = m(s, ["variant", "size", "tone", "icon", "dot", "class", "children"]);
6
+ const [e, c] = d(s, ["variant", "size", "tone", "icon", "dot", "class", "children"]);
7
7
  return (() => {
8
- var t = _();
8
+ var t = g();
9
9
  return i(t, u({
10
10
  get "data-floe-surface"() {
11
11
  return e.tone === "soft" ? "inset" : "raised";
12
12
  },
13
+ get "data-floe-tone"() {
14
+ return e.tone ?? "solid";
15
+ },
13
16
  get class() {
14
- return d("floe-tag", `floe-tag--${e.variant ?? "neutral"}`, `floe-tag--${e.size ?? "md"}`, `floe-tag--${e.tone ?? "solid"}`, e.class);
17
+ return m("floe-tag", `floe-tag--${e.variant ?? "neutral"}`, `floe-tag--${e.size ?? "md"}`, `floe-tag--${e.tone ?? "solid"}`, e.class);
15
18
  }
16
19
  }, c), !1, !0), a(t, (() => {
17
20
  var r = n(() => !!e.dot);
18
- return () => r() && g();
21
+ return () => r() && _();
19
22
  })(), null), a(t, (() => {
20
23
  var r = n(() => !!e.icon);
21
- return () => r() && p(f, {
24
+ return () => r() && f(p, {
22
25
  get component() {
23
26
  return e.icon;
24
27
  },