@floegence/floe-webapp-core 0.52.10 → 0.52.12

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.
@@ -1,25 +1,25 @@
1
- function C(e) {
1
+ function L(e) {
2
2
  if (e.ownerDocument) return e.ownerDocument;
3
3
  if (e.captureEl?.ownerDocument) return e.captureEl.ownerDocument;
4
4
  const n = e.pointerEvent.target;
5
5
  return n && typeof n == "object" && "ownerDocument" in n && n.ownerDocument instanceof Document ? n.ownerDocument : document;
6
6
  }
7
- function c(e, n) {
7
+ function o(e, n) {
8
8
  return typeof e.buttons == "number" ? e.buttons : n;
9
9
  }
10
- function L(e, n) {
10
+ function h(e, n) {
11
11
  return !e || e.pointerId === n;
12
12
  }
13
13
  function b(e) {
14
- const n = C(e), l = n.defaultView ?? window, a = e.buttonMask ?? 1, h = c(e.pointerEvent, a), t = {
14
+ const n = L(e), l = n.defaultView ?? window, a = e.buttonMask ?? 1, P = o(e.pointerEvent, a), t = {
15
15
  pointerId: e.pointerEvent.pointerId,
16
16
  latestClientX: e.pointerEvent.clientX,
17
17
  latestClientY: e.pointerEvent.clientY,
18
- latestButtons: h,
18
+ latestButtons: P,
19
19
  active: !0,
20
20
  captureActive: !1
21
- }, o = (r) => {
22
- !t.active || r.pointerId !== t.pointerId || (t.latestClientX = r.clientX, t.latestClientY = r.clientY, t.latestButtons = c(r, t.latestButtons));
21
+ }, c = (r) => {
22
+ !t.active || r.pointerId !== t.pointerId || (t.latestClientX = r.clientX, t.latestClientY = r.clientY, t.latestButtons = o(r, t.latestButtons));
23
23
  }, s = () => {
24
24
  if (t.active && !(!e.captureEl || typeof e.captureEl.setPointerCapture != "function"))
25
25
  try {
@@ -37,12 +37,12 @@ function b(e) {
37
37
  } finally {
38
38
  t.captureActive = !1;
39
39
  }
40
- }, P = () => {
40
+ }, C = () => {
41
41
  n.removeEventListener("pointermove", p, !0), n.removeEventListener("pointerup", d, !0), n.removeEventListener("pointercancel", f, !0), n.removeEventListener("visibilitychange", E), l.removeEventListener("blur", v), e.captureEl?.removeEventListener("lostpointercapture", m);
42
42
  }, i = (r = {}) => {
43
43
  if (!t.active) return;
44
44
  const u = r.event;
45
- L(u, t.pointerId) && (u && o(u), t.active = !1, P(), w(), e.onEnd({
45
+ h(u, t.pointerId) && (u && c(u), t.active = !1, C(), w(), e.onEnd({
46
46
  reason: r.reason ?? "manual_stop",
47
47
  commit: r.commit ?? !1,
48
48
  snapshot: t,
@@ -51,21 +51,29 @@ function b(e) {
51
51
  };
52
52
  function p(r) {
53
53
  if (!(!t.active || r.pointerId !== t.pointerId)) {
54
- if (o(r), a > 0 && (c(r, t.latestButtons) & a) !== a) {
55
- i({ reason: "buttons_released", commit: !0, event: r });
54
+ if (a > 0 && (o(r, t.latestButtons) & a) !== a) {
55
+ t.latestButtons = o(r, 0), i({
56
+ reason: "buttons_released",
57
+ commit: !0,
58
+ ...e.interruptionPosition === "last-held" ? {} : { event: r }
59
+ });
56
60
  return;
57
61
  }
58
- e.onMove?.(r, t);
62
+ c(r), e.onMove?.(r, t);
59
63
  }
60
64
  }
61
65
  function d(r) {
62
66
  i({ reason: "pointer_up", commit: !0, event: r });
63
67
  }
64
68
  function f(r) {
65
- i({ reason: "pointer_cancel", commit: !1, event: r });
69
+ h(r, t.pointerId) && i({
70
+ reason: "pointer_cancel",
71
+ commit: !1,
72
+ ...e.interruptionPosition === "last-held" ? {} : { event: r }
73
+ });
66
74
  }
67
75
  function m() {
68
- i({ reason: "lost_pointer_capture", commit: !0 });
76
+ t.captureActive = !1, !e.continueOnCaptureLoss && i({ reason: "lost_pointer_capture", commit: !0 });
69
77
  }
70
78
  function v() {
71
79
  i({ reason: "window_blur", commit: !0 });
@@ -75,7 +83,7 @@ function b(e) {
75
83
  }
76
84
  return n.addEventListener("pointermove", p, !0), n.addEventListener("pointerup", d, !0), n.addEventListener("pointercancel", f, !0), n.addEventListener("visibilitychange", E), l.addEventListener("blur", v), e.captureEl?.addEventListener("lostpointercapture", m), e.capturePointer !== !1 && s(), {
77
85
  snapshot: () => t,
78
- updatePointer: o,
86
+ updatePointer: c,
79
87
  capturePointer: s,
80
88
  stop: i
81
89
  };
@@ -36,4 +36,4 @@ export declare function resolveSurfaceFloatingPanelInset(value: unknown): number
36
36
  export declare function resolveSurfaceFloatingPanelSnapThreshold(value: unknown): number;
37
37
  export declare function resolveSurfaceFloatingPanelBounds(geometry: SurfaceFloatingPanelGeometry, inset?: number): SurfaceFloatingPanelBounds;
38
38
  export declare function resolveSurfaceFloatingPanelPosition(bounds: SurfaceFloatingPanelBounds, placement: SurfaceFloatingPanelPosition): SurfaceFloatingPanelPosition;
39
- export declare function resolveSurfaceFloatingPanelSnap(position: SurfaceFloatingPanelPosition, bounds: SurfaceFloatingPanelBounds, threshold?: number): SurfaceFloatingPanelSnap | null;
39
+ export declare function resolveSurfaceFloatingPanelSnap(position: SurfaceFloatingPanelPosition, bounds: SurfaceFloatingPanelBounds, threshold?: number, direction?: SurfaceFloatingPanelPosition): SurfaceFloatingPanelSnap | null;
@@ -1,78 +1,78 @@
1
1
  const u = 8;
2
- function h(t, n) {
3
- const e = Number(t);
4
- return Number.isFinite(e) && e >= 0 ? e : n;
2
+ function m(t, n) {
3
+ const a = Number(t);
4
+ return Number.isFinite(a) && a >= 0 ? a : n;
5
5
  }
6
- function M(t, n = {}) {
7
- const e = Math.max(0, t.width), o = Math.max(0, t.height), i = Math.min(h(n.left, 0), e), a = Math.min(h(n.top, 0), o), c = Math.min(h(n.right, 0), Math.max(0, e - i)), r = Math.min(h(n.bottom, 0), Math.max(0, o - a));
6
+ function F(t, n = {}) {
7
+ const a = Math.max(0, t.width), e = Math.max(0, t.height), o = Math.min(m(n.left, 0), a), x = Math.min(m(n.top, 0), e), c = Math.min(m(n.right, 0), Math.max(0, a - o)), i = Math.min(m(n.bottom, 0), Math.max(0, e - x));
8
8
  return {
9
9
  ...t,
10
- left: t.left + i,
11
- top: t.top + a,
12
- width: Math.max(0, e - i - c),
13
- height: Math.max(0, o - a - r)
10
+ left: t.left + o,
11
+ top: t.top + x,
12
+ width: Math.max(0, a - o - c),
13
+ height: Math.max(0, e - x - i)
14
14
  };
15
15
  }
16
- function s(t) {
17
- return h(t, 8);
18
- }
19
16
  function f(t) {
17
+ return m(t, 8);
18
+ }
19
+ function M(t) {
20
20
  const n = Number(t);
21
21
  return Number.isFinite(n) && n >= 0 ? n : 1 / 0;
22
22
  }
23
- function l(t, n, e, o) {
24
- const i = Math.max(0, Number.isFinite(n) ? n : 0), a = Math.max(0, Number.isFinite(e) ? e : 0), c = Math.min(o, i / 2), r = t + c, m = Math.max(r, t + i - a - c);
25
- return { min: r, max: m, room: Math.max(0, m - r) };
23
+ function l(t, n, a, e) {
24
+ const o = Math.max(0, Number.isFinite(n) ? n : 0), x = Math.max(0, Number.isFinite(a) ? a : 0), c = Math.min(e, o / 2), i = t + c, h = Math.max(i, t + o - x - c);
25
+ return { min: i, max: h, room: Math.max(0, h - i) };
26
26
  }
27
- function F(t, n = 8) {
28
- const e = s(n);
27
+ function N(t, n = 8) {
28
+ const a = f(n);
29
29
  return {
30
- x: l(t.left, t.width, t.panelWidth, e),
31
- y: l(t.top, t.height, t.panelHeight, e)
30
+ x: l(t.left, t.width, t.panelWidth, a),
31
+ y: l(t.top, t.height, t.panelHeight, a)
32
32
  };
33
33
  }
34
- function N(t, n) {
34
+ function y(t, n) {
35
35
  return {
36
36
  x: t.x.min + n.x * t.x.room,
37
37
  y: t.y.min + n.y * t.y.room
38
38
  };
39
39
  }
40
- function x(t, n) {
40
+ function r(t, n) {
41
41
  return Math.max(n.min, Math.min(n.max, t));
42
42
  }
43
- function S(t, n, e = 1 / 0) {
44
- const o = f(e), i = [
43
+ function S(t, n, a = 1 / 0, e = { x: 0, y: 0 }) {
44
+ const o = M(a), x = [
45
45
  {
46
46
  edge: "left",
47
47
  distance: Math.max(0, t.x - n.x.min),
48
- position: { x: n.x.min, y: x(t.y, n.y) }
48
+ position: { x: n.x.min, y: r(t.y, n.y) }
49
49
  },
50
50
  {
51
51
  edge: "right",
52
52
  distance: Math.max(0, n.x.max - t.x),
53
- position: { x: n.x.max, y: x(t.y, n.y) }
53
+ position: { x: n.x.max, y: r(t.y, n.y) }
54
54
  },
55
55
  {
56
56
  edge: "top",
57
57
  distance: Math.max(0, t.y - n.y.min),
58
- position: { x: x(t.x, n.x), y: n.y.min }
58
+ position: { x: r(t.x, n.x), y: n.y.min }
59
59
  },
60
60
  {
61
61
  edge: "bottom",
62
62
  distance: Math.max(0, n.y.max - t.y),
63
- position: { x: x(t.x, n.x), y: n.y.max }
63
+ position: { x: r(t.x, n.x), y: n.y.max }
64
64
  }
65
- ];
66
- i.sort((c, r) => c.distance - r.distance);
67
- const a = i[0];
68
- return !a || a.distance > o ? null : { edge: a.edge, position: a.position };
65
+ ], c = { left: -e.x, right: e.x, top: -e.y, bottom: e.y };
66
+ x.sort((h, s) => Math.abs(h.distance - s.distance) < 0.01 ? c[s.edge] - c[h.edge] : h.distance - s.distance);
67
+ const i = x[0];
68
+ return !i || i.distance > o ? null : { edge: i.edge, position: i.position };
69
69
  }
70
70
  export {
71
71
  u as DEFAULT_SURFACE_FLOATING_PANEL_INSET,
72
- M as insetSurfaceFloatingPanelGeometry,
73
- F as resolveSurfaceFloatingPanelBounds,
74
- s as resolveSurfaceFloatingPanelInset,
75
- N as resolveSurfaceFloatingPanelPosition,
72
+ F as insetSurfaceFloatingPanelGeometry,
73
+ N as resolveSurfaceFloatingPanelBounds,
74
+ f as resolveSurfaceFloatingPanelInset,
75
+ y as resolveSurfaceFloatingPanelPosition,
76
76
  S as resolveSurfaceFloatingPanelSnap,
77
- f as resolveSurfaceFloatingPanelSnapThreshold
77
+ M as resolveSurfaceFloatingPanelSnapThreshold
78
78
  };
@@ -73,7 +73,7 @@ export interface FloeLayoutConfig {
73
73
  export interface FloeThemeConfig {
74
74
  storageKey: string;
75
75
  defaultTheme: ThemeType;
76
- /** Surface material, independent of color palettes. Defaults to standard. */
76
+ /** Surface material, independent of color palettes. Defaults to soft-neumorphic. */
77
77
  defaultSurfaceStyle?: FloeSurfaceStyle;
78
78
  /** Defaults to `${storageKey}-surface-style`; uses the configured persistence service. */
79
79
  surfaceStyleStorageKey?: string;
@@ -45,7 +45,7 @@ const m = {
45
45
  theme: {
46
46
  storageKey: "theme",
47
47
  defaultTheme: "system",
48
- defaultSurfaceStyle: "standard"
48
+ defaultSurfaceStyle: "soft-neumorphic"
49
49
  },
50
50
  accessibility: {
51
51
  mainContentId: "floe-main-content",
package/dist/floe.css CHANGED
@@ -23,6 +23,18 @@
23
23
  --radius: 0.375rem;
24
24
  --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
25
25
  --font-mono: 'JetBrains Mono', 'Fira Code', 'SF Mono', Menlo, Monaco, Consolas, monospace;
26
+ --floe-type-caption: 0.6875rem;
27
+ --floe-type-control: 0.8125rem;
28
+ --floe-type-body: 0.875rem;
29
+ --floe-type-heading: 1rem;
30
+ --floe-space-1: 0.25rem;
31
+ --floe-space-2: 0.5rem;
32
+ --floe-space-3: 0.75rem;
33
+ --floe-space-4: 1rem;
34
+ --floe-space-6: 1.5rem;
35
+ --floe-radius-control: 0.375rem;
36
+ --floe-radius-group: 0.5rem;
37
+ --floe-radius-floating: 0.625rem;
26
38
  }
27
39
 
28
40
  /*
@@ -360,7 +372,7 @@
360
372
  [data-floe-floating-window-surface='true'].floe-floating-window-motion {
361
373
  /* Floating windows use an opaque Mica-like stack in every surface mode.
362
374
  * Keeping this on the component boundary makes the default (standard)
363
- * path match the opt-in material without changing other controls. */
375
+ * path match the selected material without changing other controls. */
364
376
  background-color: var(--card);
365
377
  border-color: color-mix(in srgb, var(--border) 78%, var(--background) 22%);
366
378
  border-radius: 10px;
@@ -47,6 +47,18 @@ export declare const floeSharedCssVariables: {
47
47
  readonly '--radius': "0.375rem";
48
48
  readonly '--font-sans': "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif";
49
49
  readonly '--font-mono': "'JetBrains Mono', 'Fira Code', 'SF Mono', Menlo, Monaco, Consolas, monospace";
50
+ readonly '--floe-type-caption': "0.6875rem";
51
+ readonly '--floe-type-control': "0.8125rem";
52
+ readonly '--floe-type-body': "0.875rem";
53
+ readonly '--floe-type-heading': "1rem";
54
+ readonly '--floe-space-1': "0.25rem";
55
+ readonly '--floe-space-2': "0.5rem";
56
+ readonly '--floe-space-3': "0.75rem";
57
+ readonly '--floe-space-4': "1rem";
58
+ readonly '--floe-space-6': "1.5rem";
59
+ readonly '--floe-radius-control': "0.375rem";
60
+ readonly '--floe-radius-group': "0.5rem";
61
+ readonly '--floe-radius-floating': "0.625rem";
50
62
  };
51
63
  export declare const floeColorTokenCategories: readonly [{
52
64
  readonly name: "Base Colors";
@@ -642,15 +654,15 @@ export declare function getFloeColorTokenValue(variable: FloeCssVariableName, th
642
654
  export declare const floeSurfaceTokens: readonly [{
643
655
  readonly variable: "--floe-surface-shadow-raised";
644
656
  readonly role: "raised";
645
- readonly fallback: "0 2px 5px -2px var(--floe-surface-shade), inset 0 1px 1px var(--floe-surface-highlight)";
657
+ readonly fallback: "0 1px 3px -2px var(--floe-surface-shade), inset 0 1px 1px var(--floe-surface-highlight)";
646
658
  }, {
647
659
  readonly variable: "--floe-surface-shadow-inset";
648
660
  readonly role: "inset";
649
- readonly fallback: "inset 0 1px 2px var(--floe-surface-shade), inset 0 -1px 1px var(--floe-surface-highlight)";
661
+ readonly fallback: "inset 0 1px 1px var(--floe-surface-shade), inset 0 -1px 1px var(--floe-surface-highlight)";
650
662
  }, {
651
663
  readonly variable: "--floe-surface-shadow-floating";
652
664
  readonly role: "floating";
653
- readonly fallback: "0 8px 20px -6px var(--floe-surface-shade), inset 0 1px 1px var(--floe-surface-highlight)";
665
+ readonly fallback: "0 8px 18px -8px var(--floe-surface-shade), inset 0 1px 1px var(--floe-surface-highlight)";
654
666
  }, {
655
667
  readonly variable: "--floe-surface-shadow-interacting";
656
668
  readonly role: "interacting";
@@ -1245,19 +1257,31 @@ export declare const floeDesignTokens: {
1245
1257
  readonly '--radius': "0.375rem";
1246
1258
  readonly '--font-sans': "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif";
1247
1259
  readonly '--font-mono': "'JetBrains Mono', 'Fira Code', 'SF Mono', Menlo, Monaco, Consolas, monospace";
1260
+ readonly '--floe-type-caption': "0.6875rem";
1261
+ readonly '--floe-type-control': "0.8125rem";
1262
+ readonly '--floe-type-body': "0.875rem";
1263
+ readonly '--floe-type-heading': "1rem";
1264
+ readonly '--floe-space-1': "0.25rem";
1265
+ readonly '--floe-space-2': "0.5rem";
1266
+ readonly '--floe-space-3': "0.75rem";
1267
+ readonly '--floe-space-4': "1rem";
1268
+ readonly '--floe-space-6': "1.5rem";
1269
+ readonly '--floe-radius-control': "0.375rem";
1270
+ readonly '--floe-radius-group': "0.5rem";
1271
+ readonly '--floe-radius-floating': "0.625rem";
1248
1272
  };
1249
1273
  readonly surface: readonly [{
1250
1274
  readonly variable: "--floe-surface-shadow-raised";
1251
1275
  readonly role: "raised";
1252
- readonly fallback: "0 2px 5px -2px var(--floe-surface-shade), inset 0 1px 1px var(--floe-surface-highlight)";
1276
+ readonly fallback: "0 1px 3px -2px var(--floe-surface-shade), inset 0 1px 1px var(--floe-surface-highlight)";
1253
1277
  }, {
1254
1278
  readonly variable: "--floe-surface-shadow-inset";
1255
1279
  readonly role: "inset";
1256
- readonly fallback: "inset 0 1px 2px var(--floe-surface-shade), inset 0 -1px 1px var(--floe-surface-highlight)";
1280
+ readonly fallback: "inset 0 1px 1px var(--floe-surface-shade), inset 0 -1px 1px var(--floe-surface-highlight)";
1257
1281
  }, {
1258
1282
  readonly variable: "--floe-surface-shadow-floating";
1259
1283
  readonly role: "floating";
1260
- readonly fallback: "0 8px 20px -6px var(--floe-surface-shade), inset 0 1px 1px var(--floe-surface-highlight)";
1284
+ readonly fallback: "0 8px 18px -8px var(--floe-surface-shade), inset 0 1px 1px var(--floe-surface-highlight)";
1261
1285
  }, {
1262
1286
  readonly variable: "--floe-surface-shadow-interacting";
1263
1287
  readonly role: "interacting";
@@ -1,7 +1,19 @@
1
1
  const r = {
2
2
  "--radius": "0.375rem",
3
3
  "--font-sans": "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif",
4
- "--font-mono": "'JetBrains Mono', 'Fira Code', 'SF Mono', Menlo, Monaco, Consolas, monospace"
4
+ "--font-mono": "'JetBrains Mono', 'Fira Code', 'SF Mono', Menlo, Monaco, Consolas, monospace",
5
+ "--floe-type-caption": "0.6875rem",
6
+ "--floe-type-control": "0.8125rem",
7
+ "--floe-type-body": "0.875rem",
8
+ "--floe-type-heading": "1rem",
9
+ "--floe-space-1": "0.25rem",
10
+ "--floe-space-2": "0.5rem",
11
+ "--floe-space-3": "0.75rem",
12
+ "--floe-space-4": "1rem",
13
+ "--floe-space-6": "1.5rem",
14
+ "--floe-radius-control": "0.375rem",
15
+ "--floe-radius-group": "0.5rem",
16
+ "--floe-radius-floating": "0.625rem"
5
17
  }, l = [
6
18
  {
7
19
  name: "Base Colors",
@@ -632,9 +644,9 @@ function g(a, e) {
632
644
  return u[e][a];
633
645
  }
634
646
  const h = [
635
- { variable: "--floe-surface-shadow-raised", role: "raised", fallback: "0 2px 5px -2px var(--floe-surface-shade), inset 0 1px 1px var(--floe-surface-highlight)" },
636
- { variable: "--floe-surface-shadow-inset", role: "inset", fallback: "inset 0 1px 2px var(--floe-surface-shade), inset 0 -1px 1px var(--floe-surface-highlight)" },
637
- { variable: "--floe-surface-shadow-floating", role: "floating", fallback: "0 8px 20px -6px var(--floe-surface-shade), inset 0 1px 1px var(--floe-surface-highlight)" },
647
+ { variable: "--floe-surface-shadow-raised", role: "raised", fallback: "0 1px 3px -2px var(--floe-surface-shade), inset 0 1px 1px var(--floe-surface-highlight)" },
648
+ { variable: "--floe-surface-shadow-inset", role: "inset", fallback: "inset 0 1px 1px var(--floe-surface-shade), inset 0 -1px 1px var(--floe-surface-highlight)" },
649
+ { variable: "--floe-surface-shadow-floating", role: "floating", fallback: "0 8px 18px -8px var(--floe-surface-shade), inset 0 1px 1px var(--floe-surface-highlight)" },
638
650
  { variable: "--floe-surface-shadow-interacting", role: "interacting", fallback: "0 1px 2px var(--floe-surface-shade)" }
639
651
  ], m = {
640
652
  colors: l,