@flytedan/flytebot-design-system 0.7.1 → 0.8.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.7.1",
3
+ "version": "0.8.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",
@@ -3738,27 +3738,188 @@
3738
3738
  border-color: var(--danger-border);
3739
3739
  }
3740
3740
 
3741
- /* uniform staging strip one row, scrolls sideways */
3742
- .fd-filestrip {
3743
- display: flex;
3744
- gap: 8px;
3745
- align-items: center;
3746
- overflow-x: auto;
3747
- overflow-y: hidden;
3748
- padding: 1px 1px 3px;
3741
+ /* ============ Custom scrollbar (utility) ============ */
3742
+ /* .fd-scrollbar — the one on-brand thin scrollbar treatment, applicable to any
3743
+ scrollable container (vertical or horizontal). Named distinctly from the
3744
+ unrelated, pre-existing .fd-scroll (the app SHELL's own main scrollable
3745
+ region, styles/components.css's "Misc layout helpers" section — flex:1 +
3746
+ padding, nothing to do with scrollbar appearance) to avoid colliding with
3747
+ it. Originally a one-off on .fd-filestrip; generalized so every scrollable
3748
+ list/panel in the kit (e.g. VirtualList) renders the same custom thumb
3749
+ instead of the browser default. Firefox via scrollbar-width/scrollbar-color,
3750
+ everything else via the ::-webkit-scrollbar pseudo-elements; both read the
3751
+ same border tokens so light/dark theming (see tokens.css's
3752
+ [data-theme="dark"] overrides of --border-strong) is automatic. */
3753
+ .fd-scrollbar {
3749
3754
  scrollbar-width: thin;
3750
3755
  scrollbar-color: var(--border-strong) transparent;
3751
3756
  }
3752
- .fd-filestrip::-webkit-scrollbar {
3757
+ .fd-scrollbar::-webkit-scrollbar {
3758
+ width: 6px;
3753
3759
  height: 6px;
3754
3760
  }
3755
- .fd-filestrip::-webkit-scrollbar-thumb {
3761
+ .fd-scrollbar::-webkit-scrollbar-thumb {
3756
3762
  background: var(--border-strong);
3757
3763
  border-radius: 99px;
3758
3764
  }
3759
- .fd-filestrip::-webkit-scrollbar-track {
3765
+ .fd-scrollbar::-webkit-scrollbar-thumb:hover {
3766
+ background: var(--text-muted);
3767
+ }
3768
+ .fd-scrollbar::-webkit-scrollbar-track {
3760
3769
  background: transparent;
3761
3770
  }
3771
+
3772
+ /* ============ Data list (VirtualList / TransferList / EntityRow) ============ */
3773
+ /* Each mounted row is absolutely positioned (top:0 + transform:translateY(index *
3774
+ itemHeight)) inside VirtualList's totalHeight track, so when an item's index
3775
+ changes — a resort, or rows closing a gap after one above them is removed —
3776
+ React reuses the same DOM node (keyed by the caller's keyOf) and it slides to
3777
+ its new slot instead of snapping. transform, not top, for the animated property:
3778
+ compositor-only, no layout thrash even with ~50 rows mounted at once. */
3779
+ .fd-vlist-row {
3780
+ position: absolute;
3781
+ top: 0;
3782
+ left: 0;
3783
+ right: 0;
3784
+ transition: transform var(--dur-base) var(--ease);
3785
+ }
3786
+ .fd-vlist-row-content {
3787
+ height: 100%;
3788
+ }
3789
+ /* A freshly-added row (e.g. the destination side right after a move) gets a brief
3790
+ fade/scale-in instead of popping in instantly. Scale/opacity only — never
3791
+ `transform: translateY(...)` here, which would fight the row's own positioning
3792
+ transform above; this lives on the row's CONTENT wrapper, one level in. */
3793
+ .fd-vlist-row-enter {
3794
+ animation: fd-vlist-row-in var(--dur-base) var(--ease) both;
3795
+ }
3796
+ @keyframes fd-vlist-row-in {
3797
+ from {
3798
+ opacity: 0;
3799
+ transform: scale(0.96);
3800
+ }
3801
+ to {
3802
+ opacity: 1;
3803
+ transform: scale(1);
3804
+ }
3805
+ }
3806
+ @media (prefers-reduced-motion: reduce) {
3807
+ .fd-vlist-row {
3808
+ transition: none;
3809
+ }
3810
+ .fd-vlist-row-enter {
3811
+ animation: none;
3812
+ }
3813
+ }
3814
+ /* The "whole result set is being replaced" overlay (VirtualList's `refreshing`
3815
+ prop) — a scrim over the full panel with a small centered spinner+label card,
3816
+ while the PREVIOUS rows stay mounted and visible underneath. .fd-vlist-wrap is
3817
+ the non-scrolling positioning root (a sibling of the scrolling .fd-vlist itself)
3818
+ so the scrim always covers the full visible panel regardless of scroll offset. */
3819
+ .fd-vlist-wrap {
3820
+ position: relative;
3821
+ }
3822
+ .fd-vlist-refresh-scrim {
3823
+ position: absolute;
3824
+ inset: 0;
3825
+ display: grid;
3826
+ place-items: center;
3827
+ background: var(--scrim);
3828
+ border-radius: var(--r-md);
3829
+ z-index: 5;
3830
+ }
3831
+ .fd-vlist-refresh-card {
3832
+ display: flex;
3833
+ align-items: center;
3834
+ gap: 8px;
3835
+ padding: 10px 16px;
3836
+ background: var(--surface);
3837
+ border: 1px solid var(--border);
3838
+ border-radius: var(--r-md);
3839
+ box-shadow: var(--e-2);
3840
+ color: var(--text);
3841
+ }
3842
+
3843
+ /* EntityRow — a real card per row (not flat text): distinct surface from the
3844
+ list's own background, hairline border, soft rest elevation, a stronger hover
3845
+ elevation as the drag affordance. Same border/radius/shadow vocabulary Card
3846
+ itself uses (--r-md here rather than Card's --r-lg — a compact list row reads
3847
+ better with the tighter radius; --e-1/--e-2 are the same elevation tokens). */
3848
+ .fd-erow {
3849
+ background: var(--surface-2);
3850
+ border: 1px solid var(--border);
3851
+ border-radius: var(--r-md);
3852
+ box-shadow: var(--e-1);
3853
+ transition:
3854
+ box-shadow var(--dur-fast) var(--ease),
3855
+ border-color var(--dur-fast) var(--ease),
3856
+ transform var(--dur-fast) var(--ease);
3857
+ }
3858
+ .fd-erow:hover {
3859
+ border-color: var(--border-strong);
3860
+ box-shadow: var(--e-2);
3861
+ }
3862
+ .fd-erow[draggable="true"]:active {
3863
+ cursor: grabbing;
3864
+ }
3865
+ /* The dragged card itself, mid-drag (see TransferList's pointer-based custom drag
3866
+ — native HTML5 drag images are a static snapshot, not a live element, so a
3867
+ persistent tilt-and-follow needs real pointer tracking instead). */
3868
+ .fd-erow-dragging {
3869
+ box-shadow: var(--e-2);
3870
+ border-color: var(--border-strong);
3871
+ }
3872
+ /* The gray placeholder left in a dragged row's original slot — reads as an
3873
+ obviously-empty slot, not a still-there-but-faded real row. */
3874
+ .fd-erow-placeholder {
3875
+ height: 100%;
3876
+ border-radius: var(--r-md);
3877
+ background: var(--surface-2);
3878
+ border: 1px dashed var(--border-strong);
3879
+ opacity: 0.6;
3880
+ }
3881
+
3882
+ /* TransferList's full-panel drop overlay — extends the existing subtle
3883
+ dragOverSide border-color change into real visual weight: a dashed blue
3884
+ border and a translucent brand scrim across the WHOLE target side, with
3885
+ a centered card (not bare text) telling the user what dropping here does —
3886
+ the same "small card floating over the list" language the refresh overlay
3887
+ already uses, so the two read as one consistent pattern. */
3888
+ .fd-tlist-drop-overlay {
3889
+ position: absolute;
3890
+ inset: 6px;
3891
+ display: grid;
3892
+ place-items: center;
3893
+ border: 2px dashed var(--brand);
3894
+ border-radius: var(--r-md);
3895
+ background: var(--surface-brand);
3896
+ opacity: 0.92;
3897
+ z-index: 6;
3898
+ pointer-events: none;
3899
+ text-align: center;
3900
+ padding: 16px;
3901
+ }
3902
+ .fd-tlist-drop-card {
3903
+ display: flex;
3904
+ align-items: center;
3905
+ gap: 8px;
3906
+ padding: 10px 16px;
3907
+ background: var(--surface);
3908
+ border: 1px solid var(--border-brand);
3909
+ border-radius: var(--r-md);
3910
+ box-shadow: var(--e-2);
3911
+ color: var(--brand);
3912
+ }
3913
+
3914
+ /* uniform staging strip — one row, scrolls sideways */
3915
+ .fd-filestrip {
3916
+ display: flex;
3917
+ gap: 8px;
3918
+ align-items: center;
3919
+ overflow-x: auto;
3920
+ overflow-y: hidden;
3921
+ padding: 1px 1px 3px;
3922
+ }
3762
3923
  .fd-cell {
3763
3924
  position: relative;
3764
3925
  flex: none;