@floegence/floe-webapp-core 0.86.62 → 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.
- package/dist/app/FloeRegistryContributions.js +0 -3
- package/dist/components/icons/ActivityRailIcons.d.ts +30 -0
- package/dist/components/icons/ActivityRailIcons.js +68 -0
- package/dist/components/icons/index.d.ts +1 -0
- package/dist/components/layout/ActivityBar.js +55 -54
- package/dist/components/layout/DisplayModeSwitcher.d.ts +10 -0
- package/dist/components/layout/DisplayModeSwitcher.js +102 -33
- package/dist/components/layout/Shell.d.ts +0 -6
- package/dist/components/layout/Shell.js +212 -258
- package/dist/components/layout/ThemeToggle.d.ts +19 -0
- package/dist/components/layout/ThemeToggle.js +39 -0
- package/dist/components/layout/index.d.ts +1 -1
- package/dist/components/ui/Button.js +22 -14
- package/dist/components/ui/Tabs.js +172 -159
- package/dist/context/ComponentRegistry.d.ts +0 -8
- package/dist/context/ComponentRegistry.js +61 -67
- package/dist/context/FloeConfigContext.d.ts +0 -6
- package/dist/context/FloeConfigContext.js +9 -15
- package/dist/context/index.d.ts +1 -1
- package/dist/display-mode.css +2 -45
- package/dist/full.js +681 -673
- package/dist/icons.js +112 -102
- package/dist/layout.js +33 -35
- package/dist/styles.css +1 -1
- package/dist/surface.css +53 -1
- package/package.json +1 -1
- package/dist/components/layout/BottomBar.d.ts +0 -29
- package/dist/components/layout/BottomBar.js +0 -70
package/dist/surface.css
CHANGED
|
@@ -121,7 +121,12 @@
|
|
|
121
121
|
.floe-floating-presence,
|
|
122
122
|
[data-floe-surface-part='switch-thumb'],
|
|
123
123
|
[data-floe-surface-part='radio-dot'],
|
|
124
|
-
[data-floe-surface-part='progress-fill']
|
|
124
|
+
[data-floe-surface-part='progress-fill'],
|
|
125
|
+
/* The travelling pill's transition is a motion timeline, not a palette
|
|
126
|
+
* fade. This rule sits after the segment-pill rule and shares its
|
|
127
|
+
* specificity, so without this exemption it would win and freeze the
|
|
128
|
+
* pill's transform. */
|
|
129
|
+
[data-floe-surface-part='segment-pill']
|
|
125
130
|
)
|
|
126
131
|
) {
|
|
127
132
|
transition-property: color, background-color, border-color, opacity;
|
|
@@ -171,6 +176,45 @@
|
|
|
171
176
|
transition: none;
|
|
172
177
|
}
|
|
173
178
|
|
|
179
|
+
/* A tab strip that continues past its box fades toward that edge. The fade is
|
|
180
|
+
* part of the rail, not a decoration on the tabs, so it follows the scroll
|
|
181
|
+
* state instead of any one item's position. */
|
|
182
|
+
[data-floe-surface-part='tab-rail'] {
|
|
183
|
+
--floe-rail-fade: 20px;
|
|
184
|
+
mask-image: none;
|
|
185
|
+
}
|
|
186
|
+
[data-floe-surface-part='tab-rail'][data-floe-overflow-start][data-floe-overflow-end] {
|
|
187
|
+
mask-image: linear-gradient(
|
|
188
|
+
to right,
|
|
189
|
+
transparent 0,
|
|
190
|
+
#000 var(--floe-rail-fade),
|
|
191
|
+
#000 calc(100% - var(--floe-rail-fade)),
|
|
192
|
+
transparent 100%
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
[data-floe-surface-part='tab-rail'][data-floe-overflow-start]:not([data-floe-overflow-end]) {
|
|
196
|
+
mask-image: linear-gradient(to right, transparent 0, #000 var(--floe-rail-fade));
|
|
197
|
+
}
|
|
198
|
+
[data-floe-surface-part='tab-rail'][data-floe-overflow-end]:not([data-floe-overflow-start]) {
|
|
199
|
+
mask-image: linear-gradient(to right, #000 calc(100% - var(--floe-rail-fade)), transparent 100%);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/* A travelling pill is the selection, not a second copy of it: the faces under
|
|
203
|
+
* it stay flat so the only thing that moves is the material. It keeps the
|
|
204
|
+
* language's one motion family, and a reduced-motion request lands it in place
|
|
205
|
+
* without the sweep. */
|
|
206
|
+
[data-floe-surface-part='segment-pill'] {
|
|
207
|
+
transition:
|
|
208
|
+
transform var(--floe-duration-base) var(--floe-ease-out),
|
|
209
|
+
width var(--floe-duration-base) var(--floe-ease-out);
|
|
210
|
+
will-change: transform, width;
|
|
211
|
+
}
|
|
212
|
+
@media (prefers-reduced-motion: reduce) {
|
|
213
|
+
[data-floe-surface-part='segment-pill'] {
|
|
214
|
+
transition: none;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
174
218
|
/* A compound input has one decorative boundary, including host compositions
|
|
175
219
|
* that contain an Input component. Dense nested actions stay flat. */
|
|
176
220
|
[data-floe-input-surface] [data-floe-surface],
|
|
@@ -334,6 +378,14 @@
|
|
|
334
378
|
border-color: var(--floe-line);
|
|
335
379
|
--floe-surface-decoration: var(--floe-elevation-raised);
|
|
336
380
|
}
|
|
381
|
+
/* The travelling pill is a selected tab at rest: same fill, same hairline,
|
|
382
|
+
* same first elevation step. It carries them by itself because it has no
|
|
383
|
+
* per-option state to inherit from. */
|
|
384
|
+
& [data-floe-surface-part='segment-pill'] {
|
|
385
|
+
background-color: var(--card);
|
|
386
|
+
border: 1px solid var(--floe-line);
|
|
387
|
+
--floe-surface-decoration: var(--floe-elevation-raised);
|
|
388
|
+
}
|
|
337
389
|
& [data-floe-surface-part='segment'][aria-checked='false'] {
|
|
338
390
|
background-color: transparent;
|
|
339
391
|
}
|
package/package.json
CHANGED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { type JSX } from 'solid-js';
|
|
2
|
-
export interface BottomBarProps {
|
|
3
|
-
children?: JSX.Element;
|
|
4
|
-
class?: string;
|
|
5
|
-
/** Height class, defaults to 'h-5' (20px). Use Tailwind height classes like 'h-7' (28px). */
|
|
6
|
-
height?: string;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Status bar at the bottom of the application
|
|
10
|
-
*/
|
|
11
|
-
export declare function BottomBar(props: BottomBarProps): JSX.Element;
|
|
12
|
-
/**
|
|
13
|
-
* Bottom bar item
|
|
14
|
-
*/
|
|
15
|
-
export interface BottomBarItemProps {
|
|
16
|
-
children: JSX.Element;
|
|
17
|
-
icon?: JSX.Element;
|
|
18
|
-
onClick?: () => void;
|
|
19
|
-
class?: string;
|
|
20
|
-
}
|
|
21
|
-
export declare function BottomBarItem(props: BottomBarItemProps): JSX.Element;
|
|
22
|
-
/**
|
|
23
|
-
* Status indicator dot
|
|
24
|
-
*/
|
|
25
|
-
export interface StatusIndicatorProps {
|
|
26
|
-
status: 'connected' | 'disconnected' | 'connecting' | 'error';
|
|
27
|
-
label?: string;
|
|
28
|
-
}
|
|
29
|
-
export declare function StatusIndicator(props: StatusIndicatorProps): JSX.Element;
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { insert as n, effect as c, className as i, createComponent as a, template as s, delegateEvents as m } from "solid-js/web";
|
|
2
|
-
import { Show as u } from "solid-js";
|
|
3
|
-
import { cn as f } from "../../utils/cn.js";
|
|
4
|
-
import { useResolvedFloeConfig as b } from "../../context/FloeConfigContext.js";
|
|
5
|
-
var h = /* @__PURE__ */ s("<footer data-floe-shell-slot=bottom-bar style=background-color:var(--activity-bar);border-top-color:var(--bottom-bar-border)>"), g = /* @__PURE__ */ s('<span class="w-2.5 h-2.5">'), v = /* @__PURE__ */ s("<button type=button>"), d = /* @__PURE__ */ s("<span>");
|
|
6
|
-
function C(t) {
|
|
7
|
-
return (() => {
|
|
8
|
-
var r = h();
|
|
9
|
-
return n(r, () => t.children), c(() => i(r, f(t.height ?? "h-5", "shrink-0 flex items-center justify-between px-1.5", "bg-background border-t border-[var(--floe-line)]", "text-caption text-[var(--floe-ink-soft)] font-mono", t.class))), r;
|
|
10
|
-
})();
|
|
11
|
-
}
|
|
12
|
-
function $(t) {
|
|
13
|
-
const r = () => f("flex items-center gap-1 px-1 py-0.5 rounded-sm", t.onClick && "hover:bg-[var(--floe-state-hover)] cursor-pointer", "transition-colors duration-[var(--floe-duration-instant)]", t.class);
|
|
14
|
-
return a(u, {
|
|
15
|
-
get when() {
|
|
16
|
-
return t.onClick;
|
|
17
|
-
},
|
|
18
|
-
get fallback() {
|
|
19
|
-
return (() => {
|
|
20
|
-
var e = d();
|
|
21
|
-
return n(e, a(u, {
|
|
22
|
-
get when() {
|
|
23
|
-
return t.icon;
|
|
24
|
-
},
|
|
25
|
-
get children() {
|
|
26
|
-
var o = g();
|
|
27
|
-
return n(o, () => t.icon), o;
|
|
28
|
-
}
|
|
29
|
-
}), null), n(e, () => t.children, null), c(() => i(e, r())), e;
|
|
30
|
-
})();
|
|
31
|
-
},
|
|
32
|
-
get children() {
|
|
33
|
-
var e = v();
|
|
34
|
-
return e.$$click = () => t.onClick?.(), n(e, a(u, {
|
|
35
|
-
get when() {
|
|
36
|
-
return t.icon;
|
|
37
|
-
},
|
|
38
|
-
get children() {
|
|
39
|
-
var o = g();
|
|
40
|
-
return n(o, () => t.icon), o;
|
|
41
|
-
}
|
|
42
|
-
}), null), n(e, () => t.children, null), c(() => i(e, r())), e;
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
function y(t) {
|
|
47
|
-
const r = b(), e = {
|
|
48
|
-
connected: "bg-success",
|
|
49
|
-
disconnected: "bg-[var(--floe-ink-ghost)]",
|
|
50
|
-
connecting: "bg-warning animate-pulse",
|
|
51
|
-
error: "bg-error"
|
|
52
|
-
}, o = () => r.config.strings.statusIndicator;
|
|
53
|
-
return a($, {
|
|
54
|
-
get children() {
|
|
55
|
-
return [(() => {
|
|
56
|
-
var l = d();
|
|
57
|
-
return c(() => i(l, f("w-1.5 h-1.5 rounded-full", e[t.status]))), l;
|
|
58
|
-
})(), (() => {
|
|
59
|
-
var l = d();
|
|
60
|
-
return n(l, () => t.label ?? o()[t.status]), l;
|
|
61
|
-
})()];
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
m(["click"]);
|
|
66
|
-
export {
|
|
67
|
-
C as BottomBar,
|
|
68
|
-
$ as BottomBarItem,
|
|
69
|
-
y as StatusIndicator
|
|
70
|
-
};
|