@flytedan/flytebot-design-system 0.64.0 → 0.66.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flytedan/flytebot-design-system",
3
- "version": "0.64.0",
3
+ "version": "0.66.0",
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",
@@ -1994,6 +1994,44 @@
1994
1994
  .fd-stat-delta-neutral {
1995
1995
  color: var(--text-muted);
1996
1996
  }
1997
+ /* MP-311: a pressable tile (StatTile with `onPress`) is a real <button> that filters a list.
1998
+ * Reset the button chrome so it reads as the same tile, then give it hover, press, focus,
1999
+ * pressed and disabled states that only touch border, fill and shadow, never size, so nothing
2000
+ * reflows. `:focus-visible` is restated after `:hover`/`:active` for the reason .fd-card-interactive
2001
+ * gives above (a hovered, focused tile must still show its ring). A pressed tile uses the brand
2002
+ * tokens .fd-tag[aria-pressed] uses, so light, dark and high contrast all resolve. */
2003
+ .fd-stat-pressable {
2004
+ display: block;
2005
+ width: 100%;
2006
+ text-align: left;
2007
+ color: inherit;
2008
+ font: inherit;
2009
+ cursor: pointer;
2010
+ transition:
2011
+ background var(--dur-base) var(--ease),
2012
+ border-color var(--dur-base) var(--ease),
2013
+ box-shadow var(--dur-base) var(--ease);
2014
+ }
2015
+ .fd-stat-pressable:hover {
2016
+ box-shadow: var(--e-2);
2017
+ border-color: var(--border-strong);
2018
+ }
2019
+ .fd-stat-pressable:active {
2020
+ box-shadow: var(--e-1);
2021
+ border-color: var(--border-strong);
2022
+ }
2023
+ .fd-stat-pressable[aria-pressed="true"] {
2024
+ background: var(--surface-brand);
2025
+ border-color: var(--border-brand);
2026
+ }
2027
+ .fd-stat-pressable:focus-visible {
2028
+ box-shadow: var(--focus-ring);
2029
+ }
2030
+ .fd-stat-pressable:disabled {
2031
+ cursor: not-allowed;
2032
+ opacity: 0.6;
2033
+ box-shadow: none;
2034
+ }
1997
2035
 
1998
2036
  /* ============ Meter / progress ============ */
1999
2037
  .fd-meterbar {
@@ -3844,6 +3882,32 @@
3844
3882
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 175px), 1fr));
3845
3883
  gap: 16px;
3846
3884
  }
3885
+ /* MP-310 — StatGrid (src/components/data/StatGrid.tsx): a stat tile set that wraps only into even
3886
+ rows. `fd-grid-stats` above is `auto-fit` and stays as it is; this is the opt-in for a set that
3887
+ must never strand one tile on a line (four tiles at a width that fits three). The root is the
3888
+ size container and the tiles sit in a grid inside it (a grid cannot query its own width), so the
3889
+ count follows the box the set is placed in, not the viewport. Each step is the narrowest
3890
+ container that holds that many tiles at the same 175px floor `fd-grid-stats` uses and one 16px
3891
+ gap between: two tiles need 366px, four need 748px. A set of four stops at 2 between those two
3892
+ widths rather than going to 3. */
3893
+ .fd-stat-grid {
3894
+ container-type: inline-size;
3895
+ }
3896
+ .fd-stat-grid-tiles {
3897
+ display: grid;
3898
+ grid-template-columns: minmax(0, 1fr);
3899
+ gap: 16px;
3900
+ }
3901
+ @container (width >= 366px) {
3902
+ .fd-stat-grid-tiles {
3903
+ grid-template-columns: repeat(2, minmax(0, 1fr));
3904
+ }
3905
+ }
3906
+ @container (width >= 748px) {
3907
+ .fd-stat-grid-tiles[data-columns="4"] {
3908
+ grid-template-columns: repeat(4, minmax(0, 1fr));
3909
+ }
3910
+ }
3847
3911
  /* MP-271 — CardGrid (src/components/layout/CardGrid.tsx). `auto-fill` rather than
3848
3912
  `fd-grid-stats`'s own `auto-fit` above on purpose: a dashboard of Cards should keep a
3849
3913
  consistent card width as the count changes, not stretch a lone card to fill the whole row