@pieai/swimmer-ui-kit 2.9.0 → 2.11.0
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/CHANGELOG.md +49 -0
- package/dist/index.d.ts +124 -0
- package/dist/index.js +1717 -1438
- package/dist/liquid-presence.css +1 -1
- package/dist/liquid-presence.d.ts +57 -0
- package/dist/liquid-presence.js +803 -214
- package/dist/styles.css +1 -1
- package/donors-individual-lock.json +1 -1
- package/donors-individual.md +2 -2
- package/package.json +3 -3
package/dist/liquid-presence.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.game-ui-liquid-presence{--liquid-presence-from:var(--game-ui-secondary);--liquid-presence-to:var(--game-ui-secondary);vertical-align:middle;pointer-events:none;color:var(--game-ui-secondary);flex:none;line-height:0;display:inline-block;position:relative}.game-ui-liquid-presence>svg{width:100%;height:100%;display:block;overflow:visible}.game-ui-liquid-presence[data-activity=disabled]{opacity:.5}.game-ui-liquid-presence[data-activity=error],.game-ui-liquid-presence[data-activity=unknown]{--liquid-presence-from:var(--game-ui-warning);--liquid-presence-to:var(--game-ui-warning)}.game-ui-liquid-presence-overlay{z-index:95;pointer-events:none;color:var(--game-ui-secondary);position:fixed;inset:0;overflow:visible}.game-ui-liquid-presence-overlay>[hidden]{display:none!important}.game-ui-liquid-presence-flight,.game-ui-liquid-presence-seat{transform-origin:50%;position:absolute;top:0;left:0;overflow:visible}.game-ui-liquid-presence-flight{width:96px;height:72px}.game-ui-liquid-presence-seat{width:112px;height:56px}.game-ui-liquid-presence-label{box-sizing:border-box;border-radius:var(--game-ui-radius-control,12px);background:var(--game-ui-panel-strong);width:max-content;max-width:min(260px,100vw - 32px);color:var(--game-ui-text);box-shadow:var(--game-ui-shadow-button);font:500 13px/1.5 var(--game-ui-font-body);overflow-wrap:anywhere;text-wrap:pretty;padding:9px 14px;position:absolute;top:0;left:0}@media (prefers-reduced-motion:reduce){.game-ui-liquid-presence-flight{display:none}}@media (forced-colors:active){.game-ui-liquid-presence svg g,.game-ui-liquid-presence-overlay svg g,.game-ui-liquid-presence-overlay svg path{filter:none;fill:highlight}.game-ui-liquid-presence-label{color:canvastext;box-shadow:none;background:canvas;border:1px solid canvastext}}
|
|
1
|
+
@layer swimmer-ui{.game-ui-button[data-game-ui-control=liquid-presence]{box-shadow:none;color:inherit;background:0 0;border:0;border-radius:50%;padding:0}.game-ui-button[data-game-ui-control=liquid-presence]:is(:hover,:active){transform:translate(0,0)scale(1)}:root{--game-ui-assistance-z:96;--game-ui-liquid-reveal-bg:#050c0df0;--game-ui-liquid-reveal-solid:#101718;--game-ui-liquid-reveal-text:#f2f7f4;--game-ui-liquid-reveal-muted:#b6c7c0;--game-ui-liquid-reveal-shadow:0 22px 70px #00000038;--game-ui-liquid-reveal-backdrop:#0000003d;--game-ui-liquid-action-face:#fff8ec;--game-ui-liquid-action-ink:#403127;--game-ui-liquid-action-lip:#ae9e87;--game-ui-liquid-action-border:#dccdb9;--game-ui-liquid-field-face:#0000003d;--game-ui-liquid-material-ink:#020a08;--game-ui-liquid-material-muted:#020a08;--game-ui-liquid-material-field:#104a41;--game-ui-liquid-field-ink:#f2f7f4}.game-ui-liquid-reveal .game-ui-button--secondary{background:var(--game-ui-liquid-action-face);color:var(--game-ui-liquid-action-ink);border:1px solid var(--game-ui-liquid-action-border);--game-ui-button-lip-ink:var(--game-ui-liquid-action-lip);--game-ui-shadow-button:inset 0 1px 0 color-mix(in srgb, var(--game-ui-liquid-action-face) 90%, transparent)}.game-ui-liquid-reveal .game-ui-button:disabled{opacity:.55}.game-ui-liquid-reveal .game-ui-button--ghost{color:var(--game-ui-liquid-reveal-muted)}.game-ui-liquid-reveal{isolation:isolate;min-width:0;color:var(--game-ui-liquid-reveal-text);font-family:var(--game-ui-font-body);border-radius:32px;position:relative}.game-ui-liquid-reveal:before{content:"";z-index:-1;background:var(--game-ui-liquid-reveal-bg);backdrop-filter:blur(8px);box-shadow:var(--game-ui-liquid-reveal-shadow);pointer-events:none;border-radius:27px;position:absolute;inset:6px}.game-ui-liquid-reveal-content{z-index:1;min-width:0;padding:12px;position:relative}.game-ui-liquid-reveal[data-reveal-surface=material]{--game-ui-liquid-reveal-text:var(--game-ui-liquid-material-ink);--game-ui-liquid-reveal-muted:var(--game-ui-liquid-material-muted);--game-ui-liquid-field-face:var(--game-ui-liquid-material-field)}.game-ui-liquid-reveal[data-reveal-surface=material]:before{backdrop-filter:none;background:0 0}.game-ui-liquid-reveal[data-reveal-surface=material][data-reveal-motion=preparing] .game-ui-liquid-reveal-content,.game-ui-liquid-reveal[data-reveal-surface=material][data-reveal-motion=preparing] .game-ui-liquid-reveal-ink{opacity:0}.game-ui-liquid-reveal[data-reveal-surface=material]:is([data-reveal-motion=preparing],[data-reveal-motion=drawing]):before{box-shadow:none}.game-ui-liquid-reveal[data-reveal-filter=flat]:before{backdrop-filter:none;background:var(--game-ui-liquid-reveal-solid)}.game-ui-liquid-reveal-ink{pointer-events:none;position:absolute;inset:0;overflow:visible}.game-ui-liquid-reveal[data-reveal-variant=input]{border-radius:36px}.game-ui-liquid-reveal[data-reveal-variant=input]:before{border-radius:30px}@media (forced-colors:active){.game-ui-liquid-reveal{color:canvastext;border:2px solid canvastext}.game-ui-liquid-reveal:before{box-shadow:none;backdrop-filter:none;background:canvas}.game-ui-liquid-reveal[data-reveal-surface=material]{--game-ui-liquid-reveal-text:CanvasText;--game-ui-liquid-reveal-muted:CanvasText;--game-ui-liquid-field-ink:CanvasText;--game-ui-liquid-field-face:Canvas}.game-ui-liquid-reveal[data-reveal-surface=material]:before{background:canvas}.game-ui-liquid-reveal-ink{display:none}}.game-ui-liquid-presence{--liquid-presence-from:var(--game-ui-secondary);--liquid-presence-to:var(--game-ui-secondary);vertical-align:middle;pointer-events:none;color:var(--game-ui-secondary);flex:none;line-height:0;display:inline-block;position:relative}.game-ui-liquid-presence>svg{width:100%;height:100%;display:block;overflow:visible}.game-ui-liquid-presence[data-activity=disabled]{opacity:.5}.game-ui-liquid-presence[data-activity=error],.game-ui-liquid-presence[data-activity=unknown]{--liquid-presence-from:var(--game-ui-warning);--liquid-presence-to:var(--game-ui-warning)}.game-ui-liquid-presence-overlay{z-index:95;pointer-events:none;color:var(--game-ui-secondary);position:fixed;inset:0;overflow:visible}.game-ui-liquid-presence-overlay>[hidden]{display:none!important}.game-ui-liquid-presence-flight,.game-ui-liquid-presence-seat{transform-origin:50%;position:absolute;top:0;left:0;overflow:visible}.game-ui-liquid-presence-flight{width:96px;height:72px}.game-ui-liquid-presence-seat{width:112px;height:56px}.game-ui-liquid-presence-label{box-sizing:border-box;border-radius:var(--game-ui-radius-control,12px);background:var(--game-ui-panel-strong);width:max-content;max-width:min(260px,100vw - 32px);color:var(--game-ui-text);box-shadow:var(--game-ui-shadow-button);font:500 13px/1.5 var(--game-ui-font-body);overflow-wrap:anywhere;text-wrap:pretty;padding:9px 14px;position:absolute;top:0;left:0}.game-ui-liquid-presence-label--guide{overscroll-behavior:contain;pointer-events:auto;text-wrap:wrap;border-radius:16px;width:300px;max-width:calc(100vw - 32px);max-height:min(300px,42dvh);padding:16px;overflow:auto}.game-ui-liquid-presence-label--expanded{flex-direction:column;width:420px;max-height:min(560px,65dvh);display:flex}@media (prefers-reduced-motion:reduce){.game-ui-liquid-presence-flight{display:none}}@media (forced-colors:active){.game-ui-liquid-presence svg g,.game-ui-liquid-presence-overlay svg g,.game-ui-liquid-presence-overlay svg path{filter:none;fill:highlight}.game-ui-liquid-presence-label{color:canvastext;box-shadow:none;background:canvas;border:1px solid canvastext}}.game-ui-liquid-anchor{z-index:var(--game-ui-assistance-z,95);width:max-content}}
|
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
import { JSX } from 'react';
|
|
2
|
+
import { Placement } from '@floating-ui/react';
|
|
3
|
+
import { ReactNode } from 'react';
|
|
4
|
+
import { RefObject } from 'react';
|
|
5
|
+
|
|
6
|
+
/** Positions an outlet beside a host-owned body, never positions the body itself.
|
|
7
|
+
* Reuses Floating UI and the source's native dialog; no second modal manager. */
|
|
8
|
+
export declare function LiquidAnchor({ source, children, placement, onBoundsChange, }: LiquidAnchorProps): JSX.Element | null;
|
|
9
|
+
|
|
10
|
+
export declare interface LiquidAnchorProps {
|
|
11
|
+
source: RefObject<HTMLElement | null>;
|
|
12
|
+
children: ReactNode;
|
|
13
|
+
placement?: Placement;
|
|
14
|
+
/** A layout observation for host scene-label avoidance, never permission. */
|
|
15
|
+
onBoundsChange?(rect: LiquidPresenceRect | null): void;
|
|
16
|
+
}
|
|
2
17
|
|
|
3
18
|
/** A liquid body and its visual gesture. It never creates a model, acquires
|
|
4
19
|
* media, clicks an app control, or interprets animation as a task receipt. */
|
|
@@ -13,6 +28,15 @@ export declare interface LiquidPresenceProps {
|
|
|
13
28
|
target?: LiquidPresenceTarget | null;
|
|
14
29
|
/** True disables travel but never removes the target explanation. */
|
|
15
30
|
reducedMotion?: boolean;
|
|
31
|
+
/** Explicit host opt-in. A quiet living contour, never an audio observation.
|
|
32
|
+
* The ordinary component stays still when omitted. */
|
|
33
|
+
idleMotion?: 'still' | 'breathe';
|
|
34
|
+
/** Material flow only, not task or guidance duration. Clamped to 0.5..1.5. */
|
|
35
|
+
motionSpeed?: number;
|
|
36
|
+
/** Contour/speech detail, clamped to 0.25..1.25. Hit targets never change. */
|
|
37
|
+
motionIntensity?: number;
|
|
38
|
+
/** Small liquid satellites during observed speech; never during idle. */
|
|
39
|
+
splashes?: boolean;
|
|
16
40
|
/** Actual amplitude only. Null/invalid values mean unavailable, not mock audio. */
|
|
17
41
|
levelRef?: {
|
|
18
42
|
readonly current: number | null;
|
|
@@ -20,6 +44,14 @@ export declare interface LiquidPresenceProps {
|
|
|
20
44
|
colorFrom?: string;
|
|
21
45
|
colorTo?: string;
|
|
22
46
|
className?: string;
|
|
47
|
+
/** Human-paced explanation at the destination. The host owns its controls;
|
|
48
|
+
* this stays until explicit dismissal/target loss, not a reading deadline. */
|
|
49
|
+
guideContent?: ReactNode;
|
|
50
|
+
/** Expanded for review/editing content; still bounded to the visible viewport. */
|
|
51
|
+
guideSize?: 'compact' | 'expanded';
|
|
52
|
+
/** Pointing at a button dismisses by default. Editor-attached assistance may
|
|
53
|
+
* opt out so selecting/typing never discards the user's comparison draft. */
|
|
54
|
+
dismissOnTargetClick?: boolean;
|
|
23
55
|
/** Visual dismissal only; never wire this to task cancellation. */
|
|
24
56
|
onDismiss?(reason: 'dismissed' | 'unavailable' | 'expired'): void;
|
|
25
57
|
}
|
|
@@ -41,4 +73,29 @@ export declare interface LiquidPresenceTarget {
|
|
|
41
73
|
contextElement?: Element | null;
|
|
42
74
|
}
|
|
43
75
|
|
|
76
|
+
/** One finite material gesture, not a window, microphone, state machine or
|
|
77
|
+
* another orb. The real HTML stays still and usable while the perimeter draws.
|
|
78
|
+
* Uses the SAME opaque fill, goo/gloss and budget as LiquidPresence. */
|
|
79
|
+
export declare function LiquidReveal({ children, source, revealKey, variant, surface, reducedMotion, idleMotion, colorFrom, colorTo, motionIntensity, motionSpeed, className, }: LiquidRevealProps): JSX.Element;
|
|
80
|
+
|
|
81
|
+
export declare interface LiquidRevealProps {
|
|
82
|
+
children: ReactNode;
|
|
83
|
+
/** Real launcher geometry. Omit for a static inline resource surface. */
|
|
84
|
+
source?: RefObject<HTMLElement | null>;
|
|
85
|
+
/** A new explicitly requested presentation, never a token/stream revision. */
|
|
86
|
+
revealKey?: string;
|
|
87
|
+
variant?: 'content' | 'input';
|
|
88
|
+
/** Same liquid colour through the whole face. Dark retains the earlier style. */
|
|
89
|
+
surface?: 'material' | 'dark';
|
|
90
|
+
reducedMotion?: boolean;
|
|
91
|
+
/** Optional slow perimeter flow. Caller must offer a persistent pause control. */
|
|
92
|
+
idleMotion?: 'still' | 'breathe';
|
|
93
|
+
/** Same palette as the source; appearance only, never provider state. */
|
|
94
|
+
colorFrom?: string;
|
|
95
|
+
colorTo?: string;
|
|
96
|
+
motionIntensity?: number;
|
|
97
|
+
motionSpeed?: number;
|
|
98
|
+
className?: string;
|
|
99
|
+
}
|
|
100
|
+
|
|
44
101
|
export { }
|