@flytedan/flytebot-design-system 0.1.1 → 0.1.3

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.1.1",
3
+ "version": "0.1.3",
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",
@@ -41,7 +41,8 @@
41
41
  "typecheck": "tsc --noEmit",
42
42
  "lint": "eslint .",
43
43
  "test": "vitest run",
44
- "docs": "vite --config vite.docs.config.ts"
44
+ "docs": "vite --config vite.docs.config.ts",
45
+ "docs:build": "vite build --config vite.docs.config.ts"
45
46
  },
46
47
  "peerDependencies": {
47
48
  "react": "^18.3.1",
@@ -5555,3 +5555,45 @@
5555
5555
  flex: 1;
5556
5556
  min-width: 180px;
5557
5557
  }
5558
+
5559
+ /* ============ foundations/skeleton.css (vendored verbatim) ============
5560
+ Loading is a first-class state in this system.
5561
+ Three tiers, and only three:
5562
+ 1. fd-skel-* — the shell before first data (structure is already correct)
5563
+ 2. fd-stale — data on screen while a refresh is in flight (visible, dimmed, inert)
5564
+ 3. fd-progress — a determinate or indeterminate bar for a known long job
5565
+ Never blank a region that already has data. Never spin over a whole page. */
5566
+ @keyframes fd-sheen{0%{background-position:-160% 0}100%{background-position:260% 0}}
5567
+ @keyframes fd-pulse{0%,100%{opacity:1}50%{opacity:.55}}
5568
+ @keyframes fd-spin{to{transform:rotate(360deg)}}
5569
+ @keyframes fd-bar{0%{transform:translateX(-100%) scaleX(.4)}50%{transform:translateX(20%) scaleX(.7)}100%{transform:translateX(140%) scaleX(.4)}}
5570
+ @keyframes fd-rise{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
5571
+ @keyframes fd-pop{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}
5572
+
5573
+ .fd-skel{position:relative;overflow:hidden;background:var(--skeleton-base);border-radius:var(--r-sm);background-image:linear-gradient(100deg,transparent 20%,var(--skeleton-sheen) 50%,transparent 80%);background-size:220% 100%;background-repeat:no-repeat;animation:fd-sheen var(--skeleton-dur) linear infinite;color:transparent!important;user-select:none;pointer-events:none}
5574
+ .fd-skel-text{height:1em;border-radius:var(--r-xs);margin:.27em 0}
5575
+ .fd-skel-circle{border-radius:var(--r-full)}
5576
+ .fd-skel-block{border-radius:var(--r-md)}
5577
+ .fd-skel-card{border-radius:var(--r-lg)}
5578
+
5579
+ /* data present, refresh in flight — stays readable, refuses input */
5580
+ .fd-stale{opacity:.52;filter:saturate(.7);pointer-events:none;transition:opacity var(--dur-base) var(--ease),filter var(--dur-base) var(--ease)}
5581
+ .fd-stale-region{position:relative}
5582
+ .fd-stale-region::after{content:"";position:absolute;inset:0;border-radius:inherit;background:linear-gradient(100deg,transparent 30%,var(--skeleton-sheen) 50%,transparent 70%);background-size:220% 100%;background-repeat:no-repeat;animation:fd-sheen var(--skeleton-dur) linear infinite;pointer-events:none}
5583
+ .fd-arrived{animation:fd-rise var(--dur-slow) var(--ease-out) both}
5584
+
5585
+ .fd-spinner{display:inline-block;width:16px;height:16px;border-radius:var(--r-full);border:2px solid currentColor;border-right-color:transparent;opacity:.85;animation:fd-spin 620ms linear infinite}
5586
+ .fd-spinner-lg{width:26px;height:26px;border-width:2.5px}
5587
+
5588
+ .fd-progress{position:relative;height:6px;border-radius:var(--r-full);background:var(--surface-3);overflow:hidden}
5589
+ .fd-progress-fill{height:100%;border-radius:inherit;background:var(--grad-primary);transition:width var(--dur-slow) var(--ease)}
5590
+ .fd-progress-indeterminate .fd-progress-fill{width:40%;animation:fd-bar 1200ms var(--ease) infinite}
5591
+
5592
+ /* top-of-app route loader */
5593
+ .fd-topload{position:absolute;inset:0 0 auto;height:2px;background:transparent;overflow:hidden}
5594
+ .fd-topload::after{content:"";position:absolute;inset:0;background:var(--grad-brand-soft);animation:fd-bar 1100ms var(--ease) infinite}
5595
+ @media (prefers-reduced-motion:reduce){
5596
+ .fd-skel,.fd-stale-region::after,.fd-topload::after,.fd-progress-indeterminate .fd-progress-fill{animation:fd-pulse 1.6s ease-in-out infinite}
5597
+ .fd-spinner{animation-duration:1.6s}
5598
+ .fd-arrived{animation:none}
5599
+ }
Binary file
@@ -1,230 +1,46 @@
1
- /* Vendored from the flytedesk Design System's foundations/base.css. */
2
- *,
3
- *::before,
4
- *::after {
5
- box-sizing: border-box;
6
- }
7
- html {
8
- -webkit-text-size-adjust: 100%;
9
- }
10
- body {
11
- margin: 0;
12
- background: var(--page);
13
- color: var(--text);
14
- font-family: var(--font-sans);
15
- font-size: var(--body-size);
16
- line-height: var(--body-lh);
17
- -webkit-font-smoothing: antialiased;
18
- text-rendering: optimizeLegibility;
19
- }
20
- h1,
21
- h2,
22
- h3,
23
- h4,
24
- h5,
25
- h6,
26
- p,
27
- figure,
28
- blockquote {
29
- margin: 0;
30
- }
31
- img,
32
- svg,
33
- video {
34
- display: block;
35
- max-width: 100%;
36
- }
37
- button,
38
- input,
39
- select,
40
- textarea {
41
- font: inherit;
42
- color: inherit;
43
- }
44
- a {
45
- color: var(--link);
46
- text-decoration: none;
47
- transition: color var(--dur-fast) var(--ease);
48
- }
49
- a:hover {
50
- color: var(--link-hover);
51
- text-decoration: underline;
52
- text-underline-offset: 2px;
53
- }
54
- a:focus-visible,
55
- button:focus-visible,
56
- input:focus-visible,
57
- select:focus-visible,
58
- textarea:focus-visible,
59
- [tabindex]:focus-visible {
60
- outline: none;
61
- box-shadow: var(--focus-ring);
62
- }
63
- ::selection {
64
- background: var(--selection-bg);
65
- color: var(--selection-text);
66
- }
67
- hr {
68
- border: 0;
69
- border-top: 1px solid var(--border);
70
- margin: 0;
71
- }
72
-
73
- .fd-h1 {
74
- font-size: var(--h1-size);
75
- line-height: var(--h1-lh);
76
- letter-spacing: var(--h1-track);
77
- font-weight: var(--w-semibold);
78
- }
79
- .fd-h2 {
80
- font-size: var(--h2-size);
81
- line-height: var(--h2-lh);
82
- letter-spacing: var(--h2-track);
83
- font-weight: var(--w-semibold);
84
- }
85
- .fd-h3 {
86
- font-size: var(--h3-size);
87
- line-height: var(--h3-lh);
88
- letter-spacing: var(--h3-track);
89
- font-weight: var(--w-semibold);
90
- }
91
- .fd-h4 {
92
- font-size: var(--h4-size);
93
- line-height: var(--h4-lh);
94
- letter-spacing: var(--h4-track);
95
- font-weight: var(--w-semibold);
96
- }
97
- .fd-body-lg {
98
- font-size: var(--body-lg-size);
99
- line-height: var(--body-lg-lh);
100
- }
101
- .fd-body {
102
- font-size: var(--body-size);
103
- line-height: var(--body-lh);
104
- }
105
- .fd-body-sm {
106
- font-size: var(--body-sm-size);
107
- line-height: var(--body-sm-lh);
108
- }
109
- .fd-label-lg {
110
- font-size: var(--label-lg-size);
111
- line-height: var(--label-lg-lh);
112
- letter-spacing: var(--label-lg-track);
113
- font-weight: var(--w-semibold);
114
- }
115
- .fd-label {
116
- font-size: var(--label-size);
117
- line-height: var(--label-lh);
118
- letter-spacing: var(--label-track);
119
- font-weight: var(--w-semibold);
120
- }
121
- .fd-mono {
122
- font-family: var(--font-mono);
123
- font-size: var(--mono-size);
124
- line-height: var(--mono-lh);
125
- font-weight: var(--w-medium);
126
- }
127
- .fd-tabular {
128
- font-variant-numeric: tabular-nums lining-nums;
129
- }
130
- .fd-muted {
131
- color: var(--text-muted);
132
- }
133
- .fd-secondary {
134
- color: var(--text-2);
135
- }
136
- .fd-sr {
137
- position: absolute;
138
- width: 1px;
139
- height: 1px;
140
- padding: 0;
141
- margin: -1px;
142
- overflow: hidden;
143
- clip-path: inset(50%);
144
- white-space: nowrap;
145
- border: 0;
146
- }
147
-
148
- /* --- range slider ----------------------------------------------------- */
149
- .fd-range {
150
- -webkit-appearance: none;
151
- appearance: none;
152
- width: 100%;
153
- height: var(--s-4);
154
- border-radius: var(--r-full);
155
- background: var(--border);
156
- outline: none;
157
- cursor: pointer;
158
- }
159
- .fd-range::-webkit-slider-runnable-track {
160
- height: var(--s-4);
161
- border-radius: var(--r-full);
162
- background: transparent;
163
- }
164
- .fd-range::-webkit-slider-thumb {
165
- -webkit-appearance: none;
166
- appearance: none;
167
- width: var(--s-16);
168
- height: var(--s-16);
169
- border-radius: var(--r-full);
170
- background: var(--brand);
171
- border: 2px solid var(--surface);
172
- box-shadow: var(--e-1);
173
- cursor: pointer;
174
- margin-top: calc((var(--s-4) - var(--s-16)) / 2);
175
- }
176
- .fd-range::-moz-range-track {
177
- height: var(--s-4);
178
- border-radius: var(--r-full);
179
- background: transparent;
180
- }
181
- .fd-range::-moz-range-thumb {
182
- width: var(--s-16);
183
- height: var(--s-16);
184
- border-radius: var(--r-full);
185
- background: var(--brand);
186
- border: 2px solid var(--surface);
187
- box-shadow: var(--e-1);
188
- cursor: pointer;
189
- }
190
- .fd-range:disabled {
191
- opacity: 0.55;
192
- cursor: not-allowed;
193
- }
194
- .fd-range:disabled::-webkit-slider-thumb,
195
- .fd-range:disabled::-moz-range-thumb {
196
- cursor: not-allowed;
197
- }
198
- .fd-range:focus-visible::-webkit-slider-thumb {
199
- box-shadow: var(--focus-ring);
200
- }
201
- .fd-range:focus-visible::-moz-range-thumb {
202
- box-shadow: var(--focus-ring);
203
- }
1
+ /* Vendored from the flytedesk Design System (Claude Design project
2
+ "flytedesk Design System"), foundations/base.css verbatim.
3
+ Source of truth stays the Design System project — re-sync by hand if it
4
+ changes upstream. */
5
+ *,*::before,*::after{box-sizing:border-box}
6
+ html{-webkit-text-size-adjust:100%}
7
+ body{margin:0;background:var(--page);color:var(--text);font-family:var(--font-sans);font-size:var(--body-size);line-height:var(--body-lh);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
8
+ h1,h2,h3,h4,h5,h6,p,figure,blockquote{margin:0}
9
+ img,svg,video{display:block;max-width:100%}
10
+ button,input,select,textarea{font:inherit;color:inherit}
11
+ a{color:var(--link);text-decoration:none;transition:color var(--dur-fast) var(--ease)}
12
+ a:hover{color:var(--link-hover);text-decoration:underline;text-underline-offset:2px}
13
+ a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:none;box-shadow:var(--focus-ring)}
14
+ ::selection{background:var(--selection-bg);color:var(--selection-text)}
15
+ hr{border:0;border-top:1px solid var(--border);margin:0}
204
16
 
205
- /* Two overlapping <input type="range"> for RangeSlider: each input stays
206
- transparent so the custom track div underneath does the drawing, and only
207
- the thumb itself is clickable so both handles remain independently
208
- reachable near the edges. */
209
- .fd-range-multi {
210
- position: absolute;
211
- top: 0;
212
- left: 0;
213
- width: 100%;
214
- height: var(--s-16);
215
- margin: 0;
216
- background: transparent;
217
- pointer-events: none;
218
- }
219
- .fd-range-multi::-webkit-slider-runnable-track {
220
- background: transparent;
221
- }
222
- .fd-range-multi::-moz-range-track {
223
- background: transparent;
224
- }
225
- .fd-range-multi::-webkit-slider-thumb {
226
- pointer-events: auto;
227
- }
228
- .fd-range-multi::-moz-range-thumb {
229
- pointer-events: auto;
17
+ /* --- type utilities --- */
18
+ .fd-display-1{font-size:var(--display-1-size);line-height:var(--display-1-lh);letter-spacing:var(--display-1-track);font-weight:var(--w-bold);color:var(--display-ink)}
19
+ .fd-display-2{font-size:var(--display-2-size);line-height:var(--display-2-lh);letter-spacing:var(--display-2-track);font-weight:var(--w-bold);color:var(--display-ink)}
20
+ .fd-display-3{font-size:var(--display-3-size);line-height:var(--display-3-lh);letter-spacing:var(--display-3-track);font-weight:var(--w-bold);color:var(--display-ink)}
21
+ .fd-h1{font-size:var(--h1-size);line-height:var(--h1-lh);letter-spacing:var(--h1-track);font-weight:var(--w-semibold)}
22
+ .fd-h2{font-size:var(--h2-size);line-height:var(--h2-lh);letter-spacing:var(--h2-track);font-weight:var(--w-semibold)}
23
+ .fd-h3{font-size:var(--h3-size);line-height:var(--h3-lh);letter-spacing:var(--h3-track);font-weight:var(--w-semibold)}
24
+ .fd-h4{font-size:var(--h4-size);line-height:var(--h4-lh);letter-spacing:var(--h4-track);font-weight:var(--w-semibold)}
25
+ .fd-body-lg{font-size:var(--body-lg-size);line-height:var(--body-lg-lh)}
26
+ .fd-body{font-size:var(--body-size);line-height:var(--body-lh)}
27
+ .fd-body-sm{font-size:var(--body-sm-size);line-height:var(--body-sm-lh)}
28
+ .fd-label-lg{font-size:var(--label-lg-size);line-height:var(--label-lg-lh);letter-spacing:var(--label-lg-track);font-weight:var(--w-semibold)}
29
+ .fd-label{font-size:var(--label-size);line-height:var(--label-lh);letter-spacing:var(--label-track);font-weight:var(--w-semibold)}
30
+ .fd-overline{font-size:var(--overline-size);line-height:var(--overline-lh);letter-spacing:var(--overline-track);font-weight:var(--w-bold);text-transform:uppercase}
31
+ .fd-num-hero{font-size:var(--num-hero-size);line-height:var(--num-hero-lh);letter-spacing:var(--num-hero-track);font-weight:var(--w-bold);font-variant-numeric:tabular-nums lining-nums}
32
+ .fd-num{font-size:var(--num-size);line-height:var(--num-lh);font-weight:var(--w-medium);font-variant-numeric:tabular-nums lining-nums}
33
+ .fd-mono{font-family:var(--font-mono);font-size:var(--mono-size);line-height:var(--mono-lh);font-weight:var(--w-medium)}
34
+ .fd-tabular{font-variant-numeric:tabular-nums lining-nums}
35
+ .fd-muted{color:var(--text-muted)}
36
+ .fd-secondary{color:var(--text-2)}
37
+ .fd-prose{max-width:var(--measure-prose);text-wrap:pretty}
38
+ .fd-lede{max-width:var(--measure-lede);text-wrap:pretty}
39
+ .fd-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
40
+ @media (max-width:768px){
41
+ .fd-display-1{font-size:clamp(38px,10vw,52px)}
42
+ .fd-display-2{font-size:clamp(32px,8vw,40px)}
43
+ .fd-display-3{font-size:30px}
44
+ .fd-h1{font-size:24px}
45
+ .fd-num-hero{font-size:34px}
230
46
  }