@pieai/swimmer-ui-kit 2.6.1 → 2.7.1

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 CHANGED
@@ -3,6 +3,32 @@
3
3
  All notable changes to `@pieai/swimmer-ui-kit`.
4
4
  Format: [Keep a Changelog](https://keepachangelog.com); versioning: semver.
5
5
 
6
+ ## 2.7.1 — 2026-09-16
7
+
8
+ - Fix help dismissal inside native dialogs when the tip was opened by hover
9
+ while keyboard focus stayed in another control. Escape closes only the tip;
10
+ it no longer also cancels the dialog and interrupts the user's work.
11
+ - Keep Floating UI as the interaction owner. No added global key handler,
12
+ consumer-specific patch or public API change.
13
+
14
+ ## 2.7.0 — 2026-09-16
15
+
16
+ Minor: shared optional help for creator-facing products. Existing controls and
17
+ their defaults remain compatible.
18
+
19
+ - Add `GameHelpTip`: one named, 44px, non-submit help trigger for short text.
20
+ Hover, keyboard focus and tap/click open the same explanation; Escape and
21
+ outside interaction dismiss it. Hovering the explanation keeps it readable.
22
+ - Use the maintained `@floating-ui/react` dependency for positioning, collision
23
+ avoidance and interaction composition instead of building another popup
24
+ engine. Other controls retain their existing native implementations.
25
+ - Keep help inside an enclosing native dialog's top layer. It does not portal
26
+ into the inert page, move focus into noninteractive text, or close the account
27
+ dialog when the user dismisses help.
28
+ - Required errors, action labels and cost confirmation must remain visible;
29
+ this is not a menu, rich interactive popover or a replacement for instructions
30
+ needed to complete an action. Products own the words, not a second help service.
31
+
6
32
  ## 2.6.1 — 2026-09-12
7
33
 
8
34
  Patch: production CSS behavior, not a new material or API.
@@ -158,7 +184,7 @@ every liquid body was missing.
158
184
 
159
185
  - **A cast shadow on the single-body forms.** `LiquidSurface` accepted a
160
186
  `shadow` and no form set one, so every liquid button floated: the flat button
161
- standing next to it carries a solid lip *and* `--game-ui-shadow-button`, and
187
+ standing next to it carries a solid lip _and_ `--game-ui-shadow-button`, and
162
188
  the liquid one carried neither. `press`, `settle`, `drain`, and the new
163
189
  `swell`, `reach`, `ripple` and `set` now carry two layers each — a tight,
164
190
  barely-offset seat that says the body is touching, and a wide low cast that
@@ -461,7 +487,7 @@ removed member never worked makes the removal correct, not non-breaking.
461
487
 
462
488
  - **The budget warnings were dead in every published build.** Both budget
463
489
  fallbacks — the animation engine's and Melt/dissolve's — were gated on
464
- `import.meta.env.DEV`. That flag resolves when *this package* is built, not
490
+ `import.meta.env.DEV`. That flag resolves when _this package_ is built, not
465
491
  when the app importing it is, so it was baked to `false` in the artifact and
466
492
  the guard minified to `if (this.budgetWarningEmitted || !0) return;` — an
467
493
  unconditional early return. The kit degraded to static rendering silently,
@@ -515,7 +541,7 @@ removed member never worked makes the removal correct, not non-breaking.
515
541
  - **The rest of the donor's liquid vocabulary.** `morph.shape` gives the
516
542
  surface a timeline instead of a resize — the mass travels to the new centre,
517
543
  size follows, corners sharpen last. `morph.contentBlur` acts on your content
518
- rather than the silhouette, which is what makes text read as sitting *in* the
544
+ rather than the silhouette, which is what makes text read as sitting _in_ the
519
545
  liquid instead of on it. `effect="bend"` deforms the body with velocity while
520
546
  staying glued to its content, and publishes `--lg-bend-x/y` plus unitless
521
547
  twins so the content can lean with it. `effect="melt"` runs two images into
@@ -650,7 +676,7 @@ removed member never worked makes the removal correct, not non-breaking.
650
676
  ### Fixed
651
677
 
652
678
  - **Every tooltip was invisible on the night theme.** `.game-ui-tooltip
653
- [role='tooltip']` painted `background: var(--game-ui-text)` with
679
+ [role='tooltip']` painted `background: var(--game-ui-text)` with
654
680
  `color: var(--game-ui-text-on-dark)`. On light that is a dark chip over a
655
681
  pale page and reads correctly. On night `--game-ui-text` flips to cream, so
656
682
  the chip became cream-on-cream at **1.15:1**. The light theme looking right
@@ -753,7 +779,7 @@ file a bug, because it reads as a design choice rather than a missing step.
753
779
  The sculpted PNGs were never missing — 350 files travel inside the package, in
754
780
  `dist/assets`. What was missing was any route from there to a path the host
755
781
  actually serves. `CLAY_ASSET_BASE_PATH` names an absolute URL on the
756
- *consumer's* origin, and nothing copied, exported or explained it. The kit's own
782
+ _consumer's_ origin, and nothing copied, exported or explained it. The kit's own
757
783
  Storybook worked throughout, because its assets sit in `public/`.
758
784
 
759
785
  ### Added
package/dist/index.d.ts CHANGED
@@ -1698,6 +1698,20 @@ export declare interface GameFieldProps {
1698
1698
  className?: string;
1699
1699
  }
1700
1700
 
1701
+ /** Optional help, not an action menu or a place to hide required information.
1702
+ * Floating UI owns collision avoidance, hover/focus/click and dismissal. The
1703
+ * native help button never submits its surrounding form. Inside a native modal
1704
+ * the portal stays in that modal's top layer, not in the inert document body.
1705
+ */
1706
+ export declare function GameHelpTip({ label, children }: GameHelpTipProps): ReactNode;
1707
+
1708
+ export declare interface GameHelpTipProps {
1709
+ /** Accessible name of the help button, in the product's language. */
1710
+ label: string;
1711
+ /** Short, noninteractive explanation. Actions and required errors stay visible. */
1712
+ children: string;
1713
+ }
1714
+
1701
1715
  export declare function GameHistoryPanel({ entries, label }: GameHistoryPanelProps): ReactNode;
1702
1716
 
1703
1717
  export declare interface GameHistoryPanelProps {