@flytedan/flytebot-design-system 0.59.0 → 0.60.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.59.0",
3
+ "version": "0.60.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",
@@ -950,6 +950,53 @@
950
950
  font-weight: var(--w-medium);
951
951
  }
952
952
 
953
+ /* ============ FactList ============ */
954
+ /* The columns follow the list's own width (a container query), so a narrow card on a wide screen
955
+ is one column too: 1 below 480px, then 2, 3 and 4 from 480, 720 and 960. */
956
+ .fd-facts {
957
+ container-type: inline-size;
958
+ width: 100%;
959
+ }
960
+ .fd-facts-grid {
961
+ display: grid;
962
+ grid-template-columns: minmax(0, 1fr);
963
+ gap: 14px 24px;
964
+ margin: 0;
965
+ }
966
+ @container (min-width: 480px) {
967
+ .fd-facts-grid {
968
+ grid-template-columns: repeat(2, minmax(0, 1fr));
969
+ }
970
+ }
971
+ @container (min-width: 720px) {
972
+ .fd-facts-grid {
973
+ grid-template-columns: repeat(3, minmax(0, 1fr));
974
+ }
975
+ }
976
+ @container (min-width: 960px) {
977
+ .fd-facts-grid {
978
+ grid-template-columns: repeat(4, minmax(0, 1fr));
979
+ }
980
+ }
981
+ .fd-fact {
982
+ display: flex;
983
+ flex-direction: column;
984
+ gap: 3px;
985
+ min-width: 0;
986
+ }
987
+ .fd-fact-label {
988
+ font-size: var(--body-sm-size);
989
+ color: var(--text-2);
990
+ font-weight: var(--w-medium);
991
+ }
992
+ .fd-fact-value {
993
+ margin: 0;
994
+ font-size: var(--body-size);
995
+ color: var(--text);
996
+ font-weight: var(--w-medium);
997
+ overflow-wrap: anywhere;
998
+ }
999
+
953
1000
  /* ============ Collapsible ============ */
954
1001
  .fd-coll {
955
1002
  border: 1px solid var(--border);
@@ -2084,6 +2131,9 @@
2084
2131
  .fd-table tbody tr:hover {
2085
2132
  background: var(--surface-brand);
2086
2133
  }
2134
+ .fd-table tbody tr[data-clickable] {
2135
+ cursor: pointer;
2136
+ }
2087
2137
  .fd-table tbody tr[aria-selected="true"] {
2088
2138
  background: var(--surface-brand);
2089
2139
  box-shadow: inset 2px 0 0 var(--brand);
@@ -2094,6 +2144,116 @@
2094
2144
  .fd-table tbody tr:last-child td {
2095
2145
  border-bottom: 0;
2096
2146
  }
2147
+ /* Stacked mode (DataTable at 640px wide or less): the rows are compact cards in the same surface as the table.
2148
+ A card is a title line (primary columns; the first one ellipsizes, the rest keep their size, so a
2149
+ status stays beside a long name) and a muted meta line of labelled secondary values, two lines at most. */
2150
+ .fd-table-wrap-stacked {
2151
+ overflow: visible;
2152
+ }
2153
+ .fd-dt-sort {
2154
+ display: flex;
2155
+ flex-wrap: wrap;
2156
+ align-items: center;
2157
+ gap: 6px;
2158
+ padding: 8px 12px;
2159
+ background: var(--surface-2);
2160
+ border-bottom: 1px solid var(--border);
2161
+ border-radius: var(--r-lg) var(--r-lg) 0 0;
2162
+ }
2163
+ .fd-dt-sort::before {
2164
+ content: "Sort";
2165
+ margin-right: 4px;
2166
+ font-size: var(--overline-size);
2167
+ letter-spacing: var(--overline-track);
2168
+ text-transform: uppercase;
2169
+ font-weight: var(--w-bold);
2170
+ color: var(--text-muted);
2171
+ }
2172
+ .fd-dt-sort button {
2173
+ display: inline-flex;
2174
+ align-items: center;
2175
+ gap: 5px;
2176
+ height: 28px;
2177
+ padding: 0 10px;
2178
+ border: 1px solid var(--border);
2179
+ border-radius: var(--r-full);
2180
+ background: var(--surface);
2181
+ color: var(--text-2);
2182
+ font: inherit;
2183
+ font-size: var(--label-size);
2184
+ font-weight: var(--w-semibold);
2185
+ cursor: pointer;
2186
+ }
2187
+ .fd-dt-sort button[aria-pressed="true"] {
2188
+ border-color: var(--brand);
2189
+ color: var(--text);
2190
+ }
2191
+ .fd-dt-sort .fd-caret {
2192
+ color: var(--brand);
2193
+ font-size: 9px;
2194
+ }
2195
+ .fd-dt-card {
2196
+ display: flex;
2197
+ flex-direction: column;
2198
+ gap: 3px;
2199
+ min-width: 0;
2200
+ padding: 12px 14px;
2201
+ border-bottom: 1px solid var(--border);
2202
+ transition:
2203
+ background var(--dur-fast) var(--ease),
2204
+ box-shadow var(--dur-fast) var(--ease);
2205
+ }
2206
+ .fd-dt-card:last-child {
2207
+ border-bottom: 0;
2208
+ }
2209
+ .fd-dt-card[data-clickable] {
2210
+ cursor: pointer;
2211
+ }
2212
+ .fd-dt-card[data-clickable]:hover,
2213
+ .fd-dt-card[data-selected="true"] {
2214
+ background: var(--surface-brand);
2215
+ }
2216
+ .fd-dt-card[data-selected="true"] {
2217
+ box-shadow: inset 2px 0 0 var(--brand);
2218
+ }
2219
+ .fd-dt-card-title {
2220
+ display: flex;
2221
+ align-items: baseline;
2222
+ justify-content: space-between;
2223
+ gap: 10px;
2224
+ min-width: 0;
2225
+ font-size: var(--body-size);
2226
+ font-weight: var(--w-semibold);
2227
+ color: var(--text);
2228
+ }
2229
+ .fd-dt-card-title > span {
2230
+ flex: none;
2231
+ }
2232
+ .fd-dt-card-title > span:first-child {
2233
+ flex: 1 1 auto;
2234
+ min-width: 0;
2235
+ overflow: hidden;
2236
+ text-overflow: ellipsis;
2237
+ white-space: nowrap;
2238
+ }
2239
+ .fd-dt-card-meta {
2240
+ display: -webkit-box;
2241
+ -webkit-box-orient: vertical;
2242
+ -webkit-line-clamp: 2;
2243
+ overflow: hidden;
2244
+ font-size: var(--body-sm-size);
2245
+ color: var(--text-2);
2246
+ }
2247
+ .fd-dt-card-meta > span + span::before {
2248
+ content: "·";
2249
+ margin: 0 6px;
2250
+ }
2251
+ .fd-dt-card-label {
2252
+ color: var(--text-muted);
2253
+ }
2254
+ .fd-dt-card .is-num {
2255
+ font-variant-numeric: tabular-nums lining-nums;
2256
+ }
2097
2257
  .fd-table-trunc {
2098
2258
  display: block;
2099
2259
  max-width: 100%;
@@ -2104,12 +2264,27 @@
2104
2264
 
2105
2265
  /* ============ Tabs ============ */
2106
2266
  .fd-tabs {
2267
+ --fd-tabs-fade-start: 0px;
2268
+ --fd-tabs-fade-end: 0px;
2107
2269
  display: flex;
2108
2270
  gap: 4px;
2109
2271
  border-bottom: 1px solid var(--border);
2110
2272
  overflow-x: auto;
2111
2273
  scrollbar-width: none;
2112
2274
  }
2275
+ /* Tabs that do not fit scroll sideways; the edge that has more fades out (Tabs sets the data
2276
+ attributes from the scroll position). The fade is a mask, so it is the same in either theme. */
2277
+ .fd-tabs[data-more-start="true"] {
2278
+ --fd-tabs-fade-start: 32px;
2279
+ }
2280
+ .fd-tabs[data-more-end="true"] {
2281
+ --fd-tabs-fade-end: 32px;
2282
+ }
2283
+ .fd-tabs[data-more-start="true"],
2284
+ .fd-tabs[data-more-end="true"] {
2285
+ -webkit-mask-image: linear-gradient(to right, transparent, #000 var(--fd-tabs-fade-start), #000 calc(100% - var(--fd-tabs-fade-end)), transparent);
2286
+ mask-image: linear-gradient(to right, transparent, #000 var(--fd-tabs-fade-start), #000 calc(100% - var(--fd-tabs-fade-end)), transparent);
2287
+ }
2113
2288
  .fd-tabs::-webkit-scrollbar {
2114
2289
  display: none;
2115
2290
  }