@flytedan/flytebot-design-system 0.12.14 → 0.13.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.12.14",
3
+ "version": "0.13.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",
@@ -2252,7 +2252,16 @@
2252
2252
  padding: 0 var(--gutter-lg);
2253
2253
  position: relative;
2254
2254
  }
2255
+ /* MP-141: the breadcrumb is the Topbar's only elastic item. Every other direct child
2256
+ (overflowActions, actions — the version badge, the account trigger, any icon button)
2257
+ keeps its content width at any viewport: it never shrinks below what its own content
2258
+ needs. The crumb absorbs whatever space that leaves, growing to fill the row (so no
2259
+ separate spacer element is needed) and shrinking first when the row is tight. */
2260
+ .fd-topbar > *:not(.fd-crumb) {
2261
+ flex-shrink: 0;
2262
+ }
2255
2263
  .fd-crumb {
2264
+ flex: 1 1 auto;
2256
2265
  display: flex;
2257
2266
  align-items: center;
2258
2267
  gap: 9px;
@@ -2266,7 +2275,15 @@
2266
2275
  .fd-crumb a:hover {
2267
2276
  color: var(--text);
2268
2277
  }
2278
+ /* The current crumb already exposes its full text via `truncationTitle` (Topbar.tsx),
2279
+ so it may ellipsize at any width, not only `.is-narrow` — the same rule that used to
2280
+ apply only in the collapsed layout now applies everywhere the row runs out of room. */
2269
2281
  .fd-crumb-current {
2282
+ display: block;
2283
+ min-width: 0;
2284
+ overflow: hidden;
2285
+ text-overflow: ellipsis;
2286
+ white-space: nowrap;
2270
2287
  color: var(--text);
2271
2288
  font-weight: var(--w-semibold);
2272
2289
  }
@@ -2314,23 +2331,12 @@
2314
2331
  }
2315
2332
  /* Narrow Topbar (`is-narrow`, set by Topbar from its own `overflowBreakpoint`, so the
2316
2333
  crumb rules and the overflow menu always switch together): earlier crumbs hide (the
2317
- nav drawer `onMenu` opens still reaches them), and the current crumb truncates with
2318
- an ellipsis instead of spilling its text outside a zero-width box.
2319
- The crumb also grows (`flex: 1 1 auto`) so it, not the row spacer, takes the width
2320
- the collapsed controls free. */
2321
- .fd-topbar.is-narrow .fd-crumb {
2322
- flex: 1 1 auto;
2323
- }
2334
+ nav drawer `onMenu` opens still reaches them). The crumb's grow/shrink and the current
2335
+ crumb's ellipsis are the base `.fd-crumb`/`.fd-crumb-current` rules above — they apply
2336
+ at every width, not only here. */
2324
2337
  .fd-topbar.is-narrow .fd-crumb > *:not(:last-child) {
2325
2338
  display: none;
2326
2339
  }
2327
- .fd-topbar.is-narrow .fd-crumb-current {
2328
- display: block;
2329
- min-width: 0;
2330
- overflow: hidden;
2331
- text-overflow: ellipsis;
2332
- white-space: nowrap;
2333
- }
2334
2340
 
2335
2341
  /* ============ Overlays ============ */
2336
2342
  /* z-index is set inline by Modal.tsx/Drawer.tsx via useOverlayLayer (see Popover.tsx). */
@@ -6808,3 +6814,237 @@ button.fd-erow-metric:focus-visible {
6808
6814
  display: none;
6809
6815
  }
6810
6816
  }
6817
+
6818
+ /* FileBrowser (MP-135): a folder tree pane plus the current folder's contents — folders
6819
+ and files together, create/rename/move by drag or by an equally real keyboard menu.
6820
+ Two regions, one scroll region each (R-8): the head/breadcrumb bar never scrolls, the
6821
+ tree and the main pane each own their own overflow. Side by side while there's room —
6822
+ below a narrow width of the component's OWN box (a container query, same reasoning as
6823
+ `.fd-fv` above) the tree pane disappears entirely: there is nothing to switch to, since
6824
+ the current folder's own subfolders already show up as rows in the main pane. */
6825
+ .fd-fb {
6826
+ container-type: inline-size;
6827
+ display: flex;
6828
+ flex-direction: column;
6829
+ height: 100%;
6830
+ min-height: 0;
6831
+ background: var(--surface);
6832
+ color: var(--text);
6833
+ }
6834
+ .fd-fb-dropzone {
6835
+ display: flex;
6836
+ flex-direction: column;
6837
+ height: 100%;
6838
+ min-height: 0;
6839
+ }
6840
+ .fd-fb-head {
6841
+ display: flex;
6842
+ align-items: center;
6843
+ justify-content: space-between;
6844
+ flex-wrap: wrap;
6845
+ gap: 10px;
6846
+ padding: 12px 16px;
6847
+ border-bottom: 1px solid var(--border);
6848
+ flex: none;
6849
+ }
6850
+ .fd-fb-crumbs {
6851
+ display: flex;
6852
+ align-items: center;
6853
+ flex-wrap: wrap;
6854
+ gap: 2px;
6855
+ min-width: 0;
6856
+ }
6857
+ .fd-fb-crumb {
6858
+ display: flex;
6859
+ align-items: center;
6860
+ border-radius: var(--r-sm);
6861
+ }
6862
+ .fd-fb-crumb.is-drop-target {
6863
+ background: var(--surface-brand);
6864
+ }
6865
+ .fd-fb-crumb:not(:last-child)::after {
6866
+ content: "/";
6867
+ margin: 0 4px;
6868
+ color: var(--text-muted);
6869
+ }
6870
+ .fd-fb-crumb-link {
6871
+ padding: 2px 4px;
6872
+ border-radius: var(--r-sm);
6873
+ background: none;
6874
+ border: 0;
6875
+ color: var(--text-2);
6876
+ cursor: pointer;
6877
+ font: inherit;
6878
+ }
6879
+ .fd-fb-crumb-link:hover {
6880
+ background: var(--surface-2);
6881
+ color: var(--text);
6882
+ }
6883
+ .fd-fb-crumb-current {
6884
+ padding: 2px 4px;
6885
+ font-weight: 600;
6886
+ color: var(--text);
6887
+ }
6888
+ .fd-fb-actions {
6889
+ display: flex;
6890
+ align-items: center;
6891
+ gap: 8px;
6892
+ flex: none;
6893
+ }
6894
+ .fd-fb-body {
6895
+ display: flex;
6896
+ flex: 1 1 auto;
6897
+ min-height: 0;
6898
+ overflow: hidden;
6899
+ }
6900
+ .fd-fb-tree {
6901
+ flex: 0 0 220px;
6902
+ min-width: 0;
6903
+ min-height: 0;
6904
+ overflow: auto;
6905
+ padding: 10px;
6906
+ border-right: 1px solid var(--border);
6907
+ background: var(--surface-2);
6908
+ }
6909
+ .fd-fb-main {
6910
+ flex: 1 1 auto;
6911
+ min-width: 0;
6912
+ min-height: 0;
6913
+ overflow: auto;
6914
+ padding: 10px;
6915
+ position: relative;
6916
+ }
6917
+ .fd-fb-list {
6918
+ display: flex;
6919
+ flex-direction: column;
6920
+ gap: 2px;
6921
+ }
6922
+ .fd-fb-row {
6923
+ display: flex;
6924
+ align-items: center;
6925
+ gap: 4px;
6926
+ border-radius: var(--r-md);
6927
+ }
6928
+ .fd-fb-row.is-drop-target {
6929
+ background: var(--surface-brand);
6930
+ outline: 2px dashed var(--brand);
6931
+ outline-offset: -2px;
6932
+ }
6933
+ .fd-fb-row-main {
6934
+ flex: 1 1 auto;
6935
+ min-width: 0;
6936
+ display: flex;
6937
+ align-items: center;
6938
+ gap: 8px;
6939
+ padding: 6px 8px;
6940
+ background: none;
6941
+ border: 0;
6942
+ text-align: left;
6943
+ cursor: pointer;
6944
+ border-radius: var(--r-md);
6945
+ color: var(--text);
6946
+ font: inherit;
6947
+ }
6948
+ .fd-fb-row-main:hover {
6949
+ background: var(--surface-2);
6950
+ }
6951
+ .fd-fb-tree-row.is-current .fd-fb-row-main,
6952
+ .fd-fb-row.is-current .fd-fb-row-main {
6953
+ background: var(--surface-brand);
6954
+ color: var(--text-on-surface-brand);
6955
+ font-weight: 600;
6956
+ }
6957
+ .fd-fb-row-icon {
6958
+ display: grid;
6959
+ place-items: center;
6960
+ width: 22px;
6961
+ height: 22px;
6962
+ flex: none;
6963
+ color: var(--text-2);
6964
+ font-size: 16px;
6965
+ }
6966
+ .fd-fb-row-text {
6967
+ display: flex;
6968
+ flex-direction: column;
6969
+ min-width: 0;
6970
+ }
6971
+ .fd-fb-row-name {
6972
+ overflow: hidden;
6973
+ text-overflow: ellipsis;
6974
+ white-space: nowrap;
6975
+ font-size: var(--body-sm-size);
6976
+ }
6977
+ .fd-fb-row-meta {
6978
+ font-size: 11.5px;
6979
+ color: var(--text-muted);
6980
+ }
6981
+ .fd-fb-row-actions {
6982
+ display: flex;
6983
+ align-items: center;
6984
+ gap: 2px;
6985
+ flex: none;
6986
+ padding-right: 4px;
6987
+ }
6988
+ .fd-fb-tree-children {
6989
+ padding-left: 14px;
6990
+ }
6991
+ .fd-fb-menu-anchor {
6992
+ position: relative;
6993
+ display: inline-flex;
6994
+ }
6995
+ .fd-fb-menu {
6996
+ position: absolute;
6997
+ top: calc(100% + 4px);
6998
+ right: 0;
6999
+ z-index: 10;
7000
+ width: 220px;
7001
+ max-height: 280px;
7002
+ overflow: auto;
7003
+ background: var(--surface);
7004
+ border: 1px solid var(--border);
7005
+ border-radius: var(--r-lg);
7006
+ box-shadow: 0 16px 44px rgba(11, 13, 17, .18);
7007
+ padding: 6px;
7008
+ display: flex;
7009
+ flex-direction: column;
7010
+ gap: 1px;
7011
+ }
7012
+ .fd-fb-menu-title {
7013
+ padding: 4px 8px 6px;
7014
+ display: block;
7015
+ }
7016
+ .fd-fb-menu-item {
7017
+ display: flex;
7018
+ align-items: center;
7019
+ gap: 8px;
7020
+ padding: 6px 10px;
7021
+ border-radius: var(--r-sm);
7022
+ background: none;
7023
+ border: 0;
7024
+ cursor: pointer;
7025
+ text-align: left;
7026
+ font-size: var(--body-sm-size);
7027
+ color: var(--text);
7028
+ }
7029
+ .fd-fb-menu-item:hover {
7030
+ background: var(--surface-2);
7031
+ }
7032
+ .fd-fb-input {
7033
+ width: 100%;
7034
+ padding: 8px 10px;
7035
+ border: 1px solid var(--border);
7036
+ border-radius: var(--r-md);
7037
+ font: inherit;
7038
+ background: var(--surface);
7039
+ color: var(--text);
7040
+ }
7041
+ /* Below 560px of `.fd-fb`'s OWN width, the tree pane has no room to justify itself: the
7042
+ current folder's subfolders already appear as rows in `.fd-fb-main` (see the component
7043
+ doc comment), so hiding the tree loses zero navigation, only the redundant second copy
7044
+ of the hierarchy. Breadcrumbs plus that folder list is the whole nav surface below this
7045
+ width, exactly as the card spec calls for. */
7046
+ @container (max-width: 560px) {
7047
+ .fd-fb-tree {
7048
+ display: none;
7049
+ }
7050
+ }