@flytedan/flytebot-design-system 0.12.10 → 0.12.11

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.12.10",
3
+ "version": "0.12.11",
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",
@@ -176,13 +176,23 @@
176
176
  background: var(--surface);
177
177
  box-shadow: var(--e-1);
178
178
  }
179
- /* Tone on a quiet (ghost/outline) icon button: the glyph carries it, on hover too. */
180
- .fd-btn-icon.is-ok:not(.fd-btn-icon-solid),
181
- .fd-btn-icon.is-ok:not(.fd-btn-icon-solid):hover {
179
+ /* Tone on a quiet (ghost/outline) icon button: the glyph carries it, on hover too.
180
+ MP-114 follow-up: also excludes .fd-btn-icon-soft, which was never meant to match
181
+ here (it isn't ghost or outline — it has its own real fill, see .fd-btn-icon-soft
182
+ below) but did, at (0,3,0) beating the soft rule's own un-toned (0,1,0)/toned
183
+ (0,2,0) color rules at rest. That stomped --btn-soft-ok-ink/--btn-soft-danger-ink
184
+ (chosen to clear 4.5:1 against the soft fill) with --ok-text/--danger-text (chosen
185
+ to clear 4.5:1 against a plain card instead) — a real fill behind the wrong ink,
186
+ e2e-measured at 2.04:1. The soft rule's own `:hover`/`:active` restatements already
187
+ won their own specificity fight against this same rule's `:hover` (both (0,3,0),
188
+ soft declared later so it wins the tie) — only the REST state, where soft never
189
+ restated color at all, actually lost. */
190
+ .fd-btn-icon.is-ok:not(.fd-btn-icon-solid):not(.fd-btn-icon-soft),
191
+ .fd-btn-icon.is-ok:not(.fd-btn-icon-solid):not(.fd-btn-icon-soft):hover {
182
192
  color: var(--ok-text);
183
193
  }
184
- .fd-btn-icon.is-danger:not(.fd-btn-icon-solid),
185
- .fd-btn-icon.is-danger:not(.fd-btn-icon-solid):hover {
194
+ .fd-btn-icon.is-danger:not(.fd-btn-icon-solid):not(.fd-btn-icon-soft),
195
+ .fd-btn-icon.is-danger:not(.fd-btn-icon-solid):not(.fd-btn-icon-soft):hover {
186
196
  color: var(--danger-text);
187
197
  }
188
198
  /* Solid: a real fill in the tone's colour. The fills and inks are the --btn-solid-*
@@ -4089,15 +4099,20 @@
4089
4099
  itself uses (--r-md here rather than Card's --r-lg — a compact list row reads
4090
4100
  better with the tighter radius; --e-1/--e-2 are the same elevation tokens). */
4091
4101
  .fd-erow {
4092
- /* display/align-items/gap live here, not on the component's inline style (where
4093
- they used to be, MP-114 follow-up) — an inline style always wins over a
4102
+ /* display/align-items/gap/padding live here, not on the component's inline style
4103
+ (where they used to be, MP-114 follow-ups) — an inline style always wins over a
4094
4104
  stylesheet rule, which would make it impossible for the narrow-container rule
4095
- below to ever switch this row from a flex row to a grid. */
4105
+ below to ever switch this row from a flex row to a grid. gap/padding/border-width
4106
+ read the shared --erow-* custom properties (declared once on .fd-tlist above)
4107
+ rather than carrying their own literals, which is also what lets
4108
+ .fd-tlist-footer's indent stay correct by construction instead of by two
4109
+ numbers happening to agree. */
4096
4110
  display: flex;
4097
4111
  align-items: center;
4098
- gap: 10px;
4112
+ gap: var(--erow-gap);
4113
+ padding: 0 var(--erow-pad-x);
4099
4114
  background: var(--surface-2);
4100
- border: 1px solid var(--erow-border);
4115
+ border: var(--erow-border-w) solid var(--erow-border);
4101
4116
  border-radius: var(--r-md);
4102
4117
  box-shadow: var(--e-1);
4103
4118
  transition:
@@ -4306,6 +4321,12 @@ button.fd-erow-metric:focus-visible {
4306
4321
  display: inline-flex;
4307
4322
  align-items: center;
4308
4323
  }
4324
+ /* Size lives here, not on the component's inline style (MP-114 third follow-up,
4325
+ same reasoning as .fd-erow's own padding above): .fd-tlist-footer's indent reads
4326
+ it back as --erow-grip-size. */
4327
+ .fd-erow-grip {
4328
+ font-size: var(--erow-grip-size);
4329
+ }
4309
4330
  .fd-erow[draggable="true"]:active {
4310
4331
  cursor: grabbing;
4311
4332
  }
@@ -4335,12 +4356,68 @@ button.fd-erow-metric:focus-visible {
4335
4356
  screen's. */
4336
4357
  .fd-tlist {
4337
4358
  container-type: inline-size;
4359
+ /* A row's own geometry, declared ONCE here rather than as literals wherever
4360
+ something needs to line up with it (MP-114, third follow-up: the totals
4361
+ footer's indent restated these as bare numbers in two places while the real
4362
+ values lived as inline styles on EntityRow.tsx's row and its drag grip — a
4363
+ change to either drifted the footer's indent silently, which is exactly what
4364
+ the second follow-up's 24px misalignment was). `.fd-erow` and `.fd-erow-grip`
4365
+ read these instead of carrying their own inline padding/font-size, and
4366
+ `.fd-tlist-footer`'s two indents (below) are `calc()` of the same four
4367
+ properties — a row and the totals line can only drift apart now if one of
4368
+ THESE four values changes, and both readers change with it. Declared on
4369
+ `.fd-tlist` (the one ancestor common to both a row and the footer, which are
4370
+ otherwise unrelated siblings under `.fd-tlist-side`) rather than on `.fd-erow`
4371
+ itself, so the footer — which is never a descendant of any `.fd-erow` — can
4372
+ still read them by ordinary custom-property inheritance. */
4373
+ --erow-border-w: 1px;
4374
+ --erow-pad-x: 12px;
4375
+ --erow-grip-size: 14px;
4376
+ --erow-gap: 10px;
4338
4377
  }
4339
4378
  .fd-tlist-panes {
4340
4379
  display: flex;
4341
4380
  gap: 16px;
4342
4381
  align-items: flex-start;
4343
4382
  }
4383
+ /* TransferList's per-side slots. The footer is where a running totals line goes;
4384
+ it sits on the panel, not on a card, and is separated by a rule rather than a
4385
+ gap so it reads as a summary OF the list rather than another row IN it.
4386
+ Declared here, BEFORE the narrow @container block below, deliberately: CSS
4387
+ cascade order for two rules of equal specificity is source order regardless of
4388
+ which one sits inside an at-rule, so a base rule declared AFTER a narrow
4389
+ override for the same property would silently win at every width, override
4390
+ included — this is what actually happened to this rule's own `padding-left`
4391
+ for two follow-ups running (the override was textually correct and had a
4392
+ passing stylesheet-contract test, but the base rule used to be declared further
4393
+ down the file, after the @container block, and always won the tie). */
4394
+ .fd-tlist-header {
4395
+ display: flex;
4396
+ align-items: center;
4397
+ gap: 8px;
4398
+ min-width: 0;
4399
+ }
4400
+ .fd-tlist-footer {
4401
+ display: flex;
4402
+ align-items: center;
4403
+ gap: 10px;
4404
+ min-width: 0;
4405
+ padding-top: 8px;
4406
+ /* Indented to the x a row's own body starts at, so a totals strip in here lands
4407
+ under the columns it totals rather than a card's width to the left of them: the
4408
+ card's border, the row's own padding, the drag grip and its gap — every row in
4409
+ a TransferList is a drag source, so it is the same on all of them. Written as
4410
+ calc() of the shared --erow-* custom properties (.fd-tlist's own comment)
4411
+ rather than as separate literals that merely happened to equal the same
4412
+ numbers EntityRow.tsx's row/grip carried inline — a change to any one of those
4413
+ four properties now moves this indent with it instead of silently drifting out
4414
+ of alignment, which is exactly how this went wrong at the narrow breakpoint
4415
+ (see that rule's own comment). */
4416
+ padding-left: calc(var(--erow-border-w) + var(--erow-pad-x) + var(--erow-grip-size) + var(--erow-gap));
4417
+ border-top: 1px solid var(--border);
4418
+ font-size: var(--overline-size);
4419
+ color: var(--text-2);
4420
+ }
4344
4421
  @container (max-width: 600px) {
4345
4422
  .fd-tlist-panes {
4346
4423
  flex-direction: column;
@@ -4392,7 +4469,10 @@ button.fd-erow-metric:focus-visible {
4392
4469
  grid-template-areas:
4393
4470
  "grip title accessory action"
4394
4471
  "strip strip strip strip";
4395
- gap: 4px 10px;
4472
+ /* Row-gap is a new number (there was no vertical gap to preserve — the old
4473
+ layout never had two grid rows), but the column-gap is the same --erow-gap
4474
+ the wide flex row uses, not a second literal 10px that could drift from it. */
4475
+ gap: 4px var(--erow-gap);
4396
4476
  }
4397
4477
  .fd-erow-body,
4398
4478
  .fd-erow-strip {
@@ -4436,6 +4516,21 @@ button.fd-erow-metric:focus-visible {
4436
4516
  }
4437
4517
  .fd-tlist-footer {
4438
4518
  flex-wrap: wrap;
4519
+ /* The wide-width padding-left (see the base rule's own comment) indents the
4520
+ totals strip to where a row's metric strip used to start: AFTER the card border,
4521
+ the row's own padding, the drag grip and its gap. Down here the row's strip no
4522
+ longer starts there — it's `.fd-erow`'s own full-width second grid row (see
4523
+ `.fd-erow`'s own comment above), which starts at the row's own left padding
4524
+ edge, before the grip rather than after it. audience-builder.spec.ts caught the
4525
+ mismatch this left behind: a row's strip and the totals strip 24px apart at the
4526
+ SAME breakpoint that made the grid switch active in the first place (any
4527
+ TransferList pane under 600px, which an ordinary 1280px desktop window reaches
4528
+ easily — see that rule's own comment). The totals strip needs the SAME new
4529
+ origin: just the card's border and the row's own padding, with the grip/gap
4530
+ terms dropped since they no longer apply to either strip — both terms of the
4531
+ SAME --erow-* properties (.fd-tlist's own comment) the base rule below uses,
4532
+ not separately-guessed numbers, so the two can't drift apart again. */
4533
+ padding-left: calc(var(--erow-border-w) + var(--erow-pad-x));
4439
4534
  }
4440
4535
  }
4441
4536
  .fd-tlist-side {
@@ -4484,32 +4579,6 @@ button.fd-erow-metric:focus-visible {
4484
4579
  box-shadow: var(--e-2);
4485
4580
  color: var(--brand);
4486
4581
  }
4487
- /* TransferList's per-side slots. The footer is where a running totals line goes;
4488
- it sits on the panel, not on a card, and is separated by a rule rather than a
4489
- gap so it reads as a summary OF the list rather than another row IN it. */
4490
- .fd-tlist-header {
4491
- display: flex;
4492
- align-items: center;
4493
- gap: 8px;
4494
- min-width: 0;
4495
- }
4496
- .fd-tlist-footer {
4497
- display: flex;
4498
- align-items: center;
4499
- gap: 10px;
4500
- min-width: 0;
4501
- padding-top: 8px;
4502
- /* Indented to the x a row's own body starts at, so a totals strip in here lands
4503
- under the columns it totals rather than a card's width to the left of them.
4504
- The sum is the card's border and padding-left plus the drag grip and its gap
4505
- — every row in a TransferList is a drag source, so it is the same on all of
4506
- them. Spelled out rather than collapsed to 37px so it stays checkable against
4507
- .fd-erow if that padding ever moves. */
4508
- padding-left: calc(1px + 12px + 14px + 10px);
4509
- border-top: 1px solid var(--border);
4510
- font-size: var(--overline-size);
4511
- color: var(--text-2);
4512
- }
4513
4582
 
4514
4583
  /* --- ScoreMeter — a small categorical 0-100 bar, optionally a trigger ------ */
4515
4584
  .fd-scoremeter {