@flytedan/flytebot-design-system 0.49.0 → 0.49.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flytedan/flytebot-design-system",
3
- "version": "0.49.0",
3
+ "version": "0.49.2",
4
4
  "description": "flytedesk Design System — shared component library, tokens, and business-logic kits for flytedesk apps.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
@@ -1163,6 +1163,10 @@
1163
1163
  place-items: center;
1164
1164
  width: 18px;
1165
1165
  height: 18px;
1166
+ /* MP-282: fixed at 18×18 on purpose (a real hit target) — never one of the flex items a
1167
+ squeezed .fd-tag shrinks to make room for a long label (see .fd-filterbar .fd-tag-label
1168
+ below), so it stays visible and clickable at any chip width. */
1169
+ flex: none;
1166
1170
  border-radius: var(--r-full);
1167
1171
  background: var(--border);
1168
1172
  color: var(--text-2);
@@ -1610,7 +1614,7 @@
1610
1614
  .fd-soon-cone-mark i {
1611
1615
  font-size: 11px;
1612
1616
  }
1613
- /* z-index is set inline by ComingSoon.tsx via useOverlayLayer (see Popover.tsx). */
1617
+ /* z-index is set inline by ComingSoon.tsx via useLayerZIndex (kits/layerStack.tsx). */
1614
1618
  .fd-soon-hovercard {
1615
1619
  transform: none;
1616
1620
  box-shadow: 0 18px 48px rgba(11, 13, 17, 0.26);
@@ -2482,7 +2486,7 @@
2482
2486
  }
2483
2487
 
2484
2488
  /* ============ Overlays ============ */
2485
- /* z-index is set inline by Modal.tsx/Drawer.tsx via useOverlayLayer (see Popover.tsx). */
2489
+ /* z-index is set inline by Modal.tsx/Drawer.tsx via useLayerZIndex (kits/layerStack.tsx). */
2486
2490
  .fd-scrim {
2487
2491
  position: fixed;
2488
2492
  inset: 0;
@@ -2617,7 +2621,7 @@
2617
2621
  border-top: 1px solid var(--border);
2618
2622
  background: var(--surface-2);
2619
2623
  }
2620
- /* z-index is set inline by Drawer.tsx (and its scrim's) via useOverlayLayer (see Popover.tsx). */
2624
+ /* z-index is set inline by Drawer.tsx (and its scrim's) via useLayerZIndex (kits/layerStack.tsx). */
2621
2625
  .fd-drawer {
2622
2626
  position: fixed;
2623
2627
  top: 0;
@@ -2642,7 +2646,7 @@
2642
2646
  /* Portaled to document.body and placed by Tooltip.tsx (fixed, anchored geometry), so no
2643
2647
  overflow: hidden ancestor of the trigger can clip it. Short labels stay on one line
2644
2648
  (max-content); a sentence wraps at a readable measure instead of running off-screen.
2645
- z-index is set inline by Tooltip.tsx via useOverlayLayer (see Popover.tsx). */
2649
+ z-index is set inline by Tooltip.tsx via useLayerZIndex (kits/layerStack.tsx). */
2646
2650
  .fd-tooltip {
2647
2651
  position: fixed;
2648
2652
  width: max-content;
@@ -2782,7 +2786,7 @@
2782
2786
  position: relative;
2783
2787
  }
2784
2788
  .fd-pop {
2785
- /* z-index is set inline by Popover.tsx via useOverlayLayer (see Popover.tsx). */
2789
+ /* z-index is set inline by Popover.tsx via useLayerZIndex (kits/layerStack.tsx). */
2786
2790
  position: absolute;
2787
2791
  top: calc(100% + 6px);
2788
2792
  left: 0;
@@ -2979,6 +2983,59 @@
2979
2983
  matter (found opening three fields' chips on a 375px viewport). */
2980
2984
  max-width: 100%;
2981
2985
  }
2986
+ /* MP-282: seen live at 375px — a chip whose value is long (a full campaign name) painted
2987
+ 637px wide inside a 297px-wide bar instead of respecting it, because .fd-tag is `flex:
2988
+ none; white-space: nowrap; max-width: none` with nothing to clamp it, and the ONLY thing
2989
+ that then hid the overflow was the page's own ancestor .fd-card `overflow: hidden` —
2990
+ which silently clipped the chip's × remove control right along with the label.
2991
+ Scoped to FilterBar's own chips, not `.fd-tag`/`.fd-tag-label` themselves: "never wider
2992
+ than this row" is FilterBar's rule, not Tag's. Tag is also used by RoadmapTimeline (a
2993
+ milestone label) and ApiSpecBrowser (an HTTP method, a module name, a screen path) —
2994
+ short, already-bounded-by-their-own-layout content where this bug was never observed and
2995
+ a forced max-width + ellipsis would only truncate text that fits today for no reason.
2996
+
2997
+ A `max-width: 100%` on `.fd-tag` ALONE does nothing here — tried first, and it left the
2998
+ chip at its full 633px (proven by this card's own failing-first browser test): the actual
2999
+ flex item .fd-filterbar-chip wraps `.fd-tag` in for select/multiSelect/range/date's chip
3000
+ (the extra <span> FilterBar.tsx keeps around so React preserves one stable DOM node across
3001
+ the editing/non-editing transition — see FilterBar.tsx's own comment on it) has `width:
3002
+ auto` (shrink-to-fit) with a default `min-width: auto`, which for non-wrapping text (`.fd-
3003
+ tag`'s inherited `white-space: nowrap`) equals the label's full intrinsic width — so the
3004
+ flex algorithm's shrink never actually engages, `.fd-filterbar-chip` sizes itself to fit
3005
+ the (unclamped) content, and a percentage `max-width` on the button THEN resolves against
3006
+ that same content-derived size: a circular dependency (CSS2.1 §10.2's "if the containing
3007
+ block's width depends on this element's width... the resulting layout is undefined"),
3008
+ which real browsers resolve by ignoring the percentage rather than clamping anything.
3009
+ `min-width: 0` on the actual flex item is what breaks the cycle: it lets the shrink
3010
+ algorithm bring `.fd-filterbar-chip` down to whatever room is actually left in the row —
3011
+ a value the flex layout itself computes from `.fd-filterbar`'s own (non-circular, genuinely
3012
+ definite once its own ancestor has a real width) size — and ONLY once that ancestor box has
3013
+ a real, non-content-derived width does `.fd-tag`'s `max-width: 100%` below have anything
3014
+ sound to resolve against. */
3015
+ .fd-filterbar-chip {
3016
+ min-width: 0;
3017
+ }
3018
+ .fd-filterbar .fd-tag {
3019
+ max-width: 100%;
3020
+ min-width: 0;
3021
+ }
3022
+ /* Tag.tsx always wraps its children in this span (see Tag.tsx's own MP-282 comment) so
3023
+ there is something block-level (flex items are blockified, .fd-tag is inline-flex) to
3024
+ hang `text-overflow: ellipsis` off. Unscoped, this rule would do nothing: no width is
3025
+ ever constrained on a bare .fd-tag-label outside FilterBar, so there is nothing for
3026
+ `white-space: nowrap` (inherited from .fd-tag either way) to need to ellipsise — a Tag
3027
+ used anywhere else keeps exactly its current look. `min-width: 0` is the same override
3028
+ as above, needed a second time because this label is itself a flex item of .fd-tag. The
3029
+ full text stays as this span's actual text content regardless of the visual ellipsis —
3030
+ that's what keeps the button's accessible name (computed from content, not from what's
3031
+ painted) the whole value; Tag's `title` prop (FilterBar passes the same full value)
3032
+ covers the hover-tooltip half of that same requirement. */
3033
+ .fd-filterbar .fd-tag-label {
3034
+ overflow: hidden;
3035
+ text-overflow: ellipsis;
3036
+ white-space: nowrap;
3037
+ min-width: 0;
3038
+ }
2982
3039
  /* The text field's own inline "chip that is also an input" — its editing state reuses
2983
3040
  .fd-tag's box but swaps in the selected/brand treatment .fd-tag[aria-pressed] already
2984
3041
  defines elsewhere, and the raw <input> inside is stripped of its own chrome so it reads
@@ -7176,7 +7233,7 @@ button.fd-erow-metric:focus-visible {
7176
7233
  border: 1.5px solid var(--surface);
7177
7234
  animation: fd-badge-pop 260ms var(--ease) both;
7178
7235
  }
7179
- /* z-index is set inline by ModeSwitch.tsx via useOverlayLayer (see Popover.tsx). */
7236
+ /* z-index is set inline by ModeSwitch.tsx via useInlinePanel, from useLayerZIndex (kits/layerStack.tsx). */
7180
7237
  .fd-mode-pop {
7181
7238
  position: absolute;
7182
7239
  top: calc(100% + 8px);