@flytedan/flytebot-design-system 0.51.5 → 0.52.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.51.5",
3
+ "version": "0.52.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",
@@ -3066,11 +3066,13 @@
3066
3066
  display: none;
3067
3067
  }
3068
3068
  /* The Filter button, and Clear all right after it. Beside each other while the main column has
3069
- room for both and a chip; below 30rem (the two, a gap and one chip at its max) Clear all stacks
3070
- under the button, still in this column and never on a row of the chips' own. The column is
3071
- exactly as wide as what is in it either way, so the chips always start one gap from it. The
3072
- switch is a container query on the main column, not a wrapping flex row: a wrapped row takes
3073
- its cap as its width and leaves a hole beside the button. */
3069
+ room for both and a chip; when the actions beside the main column leave it under 30rem (the two,
3070
+ a gap and one chip at its max) Clear all stacks under the button, still in this column and
3071
+ never on a row of the chips' own. The column is exactly as wide as what is in it either way, so
3072
+ the chips always start one gap from it. The switch is a container query on the main column, not
3073
+ a wrapping flex row: a wrapped row takes its cap as its width and leaves a hole beside the
3074
+ button. A bar under 30rem wide is the phone layout below, which puts Clear all beside the
3075
+ button again. */
3074
3076
  .fd-filterbar-main {
3075
3077
  container-type: inline-size;
3076
3078
  }
@@ -3080,7 +3082,7 @@
3080
3082
  align-items: center;
3081
3083
  gap: var(--s-sm) var(--s-md);
3082
3084
  }
3083
- @container (max-width: 30rem) {
3085
+ @container (width < 30rem) {
3084
3086
  .fd-filterbar-trigger {
3085
3087
  flex-direction: column;
3086
3088
  align-items: flex-start;
@@ -3127,11 +3129,16 @@
3127
3129
  .fd-filterbar-trigger {
3128
3130
  flex-direction: row;
3129
3131
  flex-wrap: wrap;
3132
+ align-items: center;
3130
3133
  }
3131
3134
  .fd-filterbar-chips {
3132
3135
  flex: none;
3133
3136
  min-height: 0;
3134
3137
  }
3138
+ /* No chips, no row: an empty chips area would still add a row gap under the button. */
3139
+ .fd-filterbar-chips:empty {
3140
+ display: none;
3141
+ }
3135
3142
  }
3136
3143
  /* MP-282: seen live at 375px — a chip whose value is long (a full campaign name) painted
3137
3144
  637px wide inside a 297px-wide bar instead of respecting it, because .fd-tag is `flex:
@@ -7996,3 +8003,146 @@ button.fd-erow-metric:focus-visible {
7996
8003
  display: none;
7997
8004
  }
7998
8005
  }
8006
+
8007
+ /* ============ SessionScreen (MP-288) ============
8008
+ The one full-viewport screen every flytedesk ID app shows while its session is not
8009
+ usable (signing in, recovering an expired session, signing out, reconnecting, or a
8010
+ failure with a Try again). Permanently dark backdrop, like the sign-in page it replaces; the
8011
+ card follows the active theme, and the wordmark is forced to its white variant (see
8012
+ SessionScreen.tsx) so it reads against the backdrop in either.
8013
+
8014
+ `--fd-session-screen-min-height` is the one sizing hook: unset, the screen fills the
8015
+ viewport; a docs preview (or any framed embed) sets it on an ancestor to a fixed height.
8016
+ dvh is applied only where supported — a var() holding an unsupported unit is invalid at
8017
+ computed-value time and would drop the declaration instead of falling back. */
8018
+ .fd-session-screen {
8019
+ position: relative;
8020
+ display: grid;
8021
+ place-items: center;
8022
+ min-height: var(--fd-session-screen-min-height, 100vh);
8023
+ padding: var(--s-24) var(--s-16);
8024
+ box-sizing: border-box;
8025
+ overflow: hidden;
8026
+ background:
8027
+ radial-gradient(circle at 15% 15%, var(--blue-700) 0%, transparent 45%),
8028
+ radial-gradient(circle at 85% 85%, var(--blue-600) 0%, transparent 40%),
8029
+ linear-gradient(160deg, var(--navy) 0%, var(--blue-950) 55%, var(--blue-900) 100%);
8030
+ }
8031
+ @supports (min-height: 100dvh) {
8032
+ .fd-session-screen {
8033
+ min-height: var(--fd-session-screen-min-height, 100dvh);
8034
+ }
8035
+ }
8036
+ .fd-session-screen::before {
8037
+ content: "";
8038
+ position: absolute;
8039
+ inset: 0;
8040
+ background-image:
8041
+ linear-gradient(rgba(255, 255, 255, 0.05) 1px, transparent 1px),
8042
+ linear-gradient(90deg, rgba(255, 255, 255, 0.05) 1px, transparent 1px);
8043
+ background-size: 48px 48px;
8044
+ mask-image: radial-gradient(circle at 50% 40%, black, transparent 70%);
8045
+ pointer-events: none;
8046
+ }
8047
+ .fd-session-screen-inner {
8048
+ position: relative;
8049
+ width: 100%;
8050
+ max-width: 408px;
8051
+ min-width: 0;
8052
+ display: flex;
8053
+ flex-direction: column;
8054
+ align-items: center;
8055
+ }
8056
+ .fd-session-screen-mark {
8057
+ margin-bottom: var(--s-32);
8058
+ }
8059
+ .fd-session-screen-frame {
8060
+ width: 100%;
8061
+ min-width: 0;
8062
+ border-radius: var(--r-2xl);
8063
+ overflow: hidden;
8064
+ box-shadow: 0 24px 64px -12px rgba(2, 8, 20, 0.55), 0 2px 8px rgba(2, 8, 20, 0.3);
8065
+ }
8066
+ .fd-session-screen-stripe {
8067
+ height: 4px;
8068
+ background: linear-gradient(90deg, var(--blue-400), var(--blue-600), var(--navy));
8069
+ }
8070
+ .fd-session-screen-body {
8071
+ display: flex;
8072
+ flex-direction: column;
8073
+ align-items: center;
8074
+ padding: var(--s-8) 0;
8075
+ text-align: center;
8076
+ min-width: 0;
8077
+ }
8078
+ .fd-session-screen-body > * {
8079
+ min-width: 0;
8080
+ max-width: 100%;
8081
+ }
8082
+ .fd-session-screen-title {
8083
+ margin: 0;
8084
+ color: var(--text);
8085
+ overflow-wrap: anywhere;
8086
+ }
8087
+ /* Focus lands here programmatically (see SessionScreen.tsx); it is not a control, so it
8088
+ draws no ring of its own. */
8089
+ .fd-session-screen .fd-session-screen-title:focus-visible {
8090
+ box-shadow: none;
8091
+ }
8092
+ /* The status region stays mounted (empty) on a failure so a retry is announced into an
8093
+ existing live region; only a region with content takes space, so the body needs no
8094
+ flex gap that an empty region would double. */
8095
+ .fd-session-screen-status {
8096
+ display: flex;
8097
+ flex-direction: column;
8098
+ align-items: center;
8099
+ gap: var(--s-12);
8100
+ }
8101
+ .fd-session-screen-status:not(:empty) {
8102
+ margin-top: var(--s-20);
8103
+ }
8104
+ .fd-session-screen-spinner {
8105
+ color: var(--brand);
8106
+ }
8107
+ .fd-session-screen-message {
8108
+ margin: 0;
8109
+ min-height: 1.5em;
8110
+ color: var(--text-2);
8111
+ }
8112
+ .fd-session-screen-failure {
8113
+ display: flex;
8114
+ flex-direction: column;
8115
+ gap: var(--s-16);
8116
+ margin-top: var(--s-20);
8117
+ width: 100%;
8118
+ text-align: left;
8119
+ overflow-wrap: anywhere;
8120
+ }
8121
+ /* Phone: a smaller wordmark and a tighter gutter so the card never crowds the edge. */
8122
+ @media (max-width: 479px) {
8123
+ .fd-session-screen {
8124
+ padding: var(--s-16) var(--s-12);
8125
+ }
8126
+ .fd-session-screen-mark {
8127
+ margin-bottom: var(--s-24);
8128
+ }
8129
+ .fd-session-screen .fd-brand-mark img {
8130
+ height: 26px;
8131
+ }
8132
+ }
8133
+ /* Tablet and up: more air around the card. */
8134
+ @media (min-width: 768px) {
8135
+ .fd-session-screen {
8136
+ padding: var(--s-48) var(--s-24);
8137
+ }
8138
+ .fd-session-screen-inner {
8139
+ max-width: 440px;
8140
+ }
8141
+ }
8142
+ /* Reduced motion: the rotating ring becomes a slow pulse (same as the other indeterminate
8143
+ indicators above); [data-motion="reduce"] already stops every animation outright. */
8144
+ @media (prefers-reduced-motion: reduce) {
8145
+ .fd-spinner.fd-session-screen-spinner {
8146
+ animation: fd-pulse 1.6s ease-in-out infinite;
8147
+ }
8148
+ }