@usefidel/design-system 0.16.0 → 0.18.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/dist/fidel.manifest.json +2 -2
- package/dist/icons.cjs +33 -1
- package/dist/icons.d.cts +11 -1
- package/dist/icons.d.ts +11 -1
- package/dist/icons.js +31 -2
- package/dist/index.cjs +427 -187
- package/dist/index.css +477 -0
- package/dist/index.d.cts +147 -3
- package/dist/index.d.ts +147 -3
- package/dist/index.js +425 -187
- package/package.json +1 -1
package/dist/index.css
CHANGED
|
@@ -1519,6 +1519,15 @@
|
|
|
1519
1519
|
.fds-dot--danger {
|
|
1520
1520
|
background: var(--color-destructive, #eb2d2d);
|
|
1521
1521
|
}
|
|
1522
|
+
.fds-tag__icon {
|
|
1523
|
+
display: inline-flex;
|
|
1524
|
+
flex-shrink: 0;
|
|
1525
|
+
color: var(--color-text-secondary, #525252);
|
|
1526
|
+
}
|
|
1527
|
+
.fds-tag__icon > svg {
|
|
1528
|
+
width: 14px;
|
|
1529
|
+
height: 14px;
|
|
1530
|
+
}
|
|
1522
1531
|
|
|
1523
1532
|
/* src/components/MultiSelect/multi-select.css */
|
|
1524
1533
|
.fds-multiselect {
|
|
@@ -1915,6 +1924,103 @@
|
|
|
1915
1924
|
filter: drop-shadow(0 8px 8px rgba(0, 0, 0, 0.13));
|
|
1916
1925
|
}
|
|
1917
1926
|
|
|
1927
|
+
/* src/components/Callout/callout.css */
|
|
1928
|
+
.fds-callout {
|
|
1929
|
+
box-sizing: border-box;
|
|
1930
|
+
display: flex;
|
|
1931
|
+
align-items: center;
|
|
1932
|
+
gap: 14px;
|
|
1933
|
+
padding: 14px 16px;
|
|
1934
|
+
border: 1px solid var(--fds-callout-border);
|
|
1935
|
+
border-radius: var(--radius-lg, 12px);
|
|
1936
|
+
background: var(--fds-callout-bg);
|
|
1937
|
+
font-family: var(--font-body, "Rethink Sans", system-ui, sans-serif);
|
|
1938
|
+
color: var(--color-text, #171717);
|
|
1939
|
+
}
|
|
1940
|
+
.fds-callout__icon {
|
|
1941
|
+
display: inline-flex;
|
|
1942
|
+
align-items: center;
|
|
1943
|
+
justify-content: center;
|
|
1944
|
+
flex-shrink: 0;
|
|
1945
|
+
align-self: flex-start;
|
|
1946
|
+
width: 32px;
|
|
1947
|
+
height: 32px;
|
|
1948
|
+
border-radius: var(--radius-md, 8px);
|
|
1949
|
+
background: var(--color-bg, #ffffff);
|
|
1950
|
+
color: var(--fds-callout-icon);
|
|
1951
|
+
}
|
|
1952
|
+
.fds-callout__icon > svg {
|
|
1953
|
+
width: 16px;
|
|
1954
|
+
height: 16px;
|
|
1955
|
+
}
|
|
1956
|
+
.fds-callout__body {
|
|
1957
|
+
flex: 1;
|
|
1958
|
+
min-width: 0;
|
|
1959
|
+
}
|
|
1960
|
+
.fds-callout__title {
|
|
1961
|
+
display: flex;
|
|
1962
|
+
flex-wrap: wrap;
|
|
1963
|
+
align-items: center;
|
|
1964
|
+
gap: 4px 8px;
|
|
1965
|
+
margin: 0;
|
|
1966
|
+
font-size: var(--font-size-text-sm, 14px);
|
|
1967
|
+
line-height: 20px;
|
|
1968
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
1969
|
+
}
|
|
1970
|
+
.fds-callout__aside {
|
|
1971
|
+
display: inline-flex;
|
|
1972
|
+
}
|
|
1973
|
+
.fds-callout__text {
|
|
1974
|
+
margin-top: 2px;
|
|
1975
|
+
font-size: 13px;
|
|
1976
|
+
line-height: 20px;
|
|
1977
|
+
color: var(--color-text-secondary, #525252);
|
|
1978
|
+
}
|
|
1979
|
+
.fds-callout__action {
|
|
1980
|
+
display: flex;
|
|
1981
|
+
flex-shrink: 0;
|
|
1982
|
+
gap: 8px;
|
|
1983
|
+
}
|
|
1984
|
+
@media (max-width: 480px) {
|
|
1985
|
+
.fds-callout {
|
|
1986
|
+
flex-wrap: wrap;
|
|
1987
|
+
}
|
|
1988
|
+
.fds-callout__action {
|
|
1989
|
+
flex-basis: 100%;
|
|
1990
|
+
padding-left: 46px;
|
|
1991
|
+
}
|
|
1992
|
+
}
|
|
1993
|
+
.fds-callout--neutral {
|
|
1994
|
+
--fds-callout-bg: var(--color-surface-subtle, #fafafa);
|
|
1995
|
+
--fds-callout-border: var(--color-border, #e5e5e5);
|
|
1996
|
+
--fds-callout-icon: var(--color-text-secondary, #525252);
|
|
1997
|
+
}
|
|
1998
|
+
.fds-callout--accent {
|
|
1999
|
+
--fds-callout-bg: var(--color-accent-subtle, #fff7ed);
|
|
2000
|
+
--fds-callout-border: var(--color-accent-muted, #fdba74);
|
|
2001
|
+
--fds-callout-icon: var(--color-accent, #ea580c);
|
|
2002
|
+
}
|
|
2003
|
+
.fds-callout--info {
|
|
2004
|
+
--fds-callout-bg: var(--color-info-surface, #eff6ff);
|
|
2005
|
+
--fds-callout-border: var(--color-info, #93c5fd);
|
|
2006
|
+
--fds-callout-icon: var(--color-info-strong, #2563eb);
|
|
2007
|
+
}
|
|
2008
|
+
.fds-callout--success {
|
|
2009
|
+
--fds-callout-bg: var(--color-success-bg, #f0fdf4);
|
|
2010
|
+
--fds-callout-border: var(--color-success, #86efac);
|
|
2011
|
+
--fds-callout-icon: var(--color-success-text, #15803d);
|
|
2012
|
+
}
|
|
2013
|
+
.fds-callout--warning {
|
|
2014
|
+
--fds-callout-bg: var(--color-warning-bg, #fffbeb);
|
|
2015
|
+
--fds-callout-border: var(--color-warning-border, #fcd34d);
|
|
2016
|
+
--fds-callout-icon: var(--color-warning-text, #92400e);
|
|
2017
|
+
}
|
|
2018
|
+
.fds-callout--danger {
|
|
2019
|
+
--fds-callout-bg: var(--color-error-bg, #fef2f2);
|
|
2020
|
+
--fds-callout-border: var(--color-error-border, #fecaca);
|
|
2021
|
+
--fds-callout-icon: var(--color-destructive, #eb2d2d);
|
|
2022
|
+
}
|
|
2023
|
+
|
|
1918
2024
|
/* src/components/Skeleton/skeleton.css */
|
|
1919
2025
|
.fds-skeleton {
|
|
1920
2026
|
display: block;
|
|
@@ -1952,3 +2058,374 @@
|
|
|
1952
2058
|
animation: none;
|
|
1953
2059
|
}
|
|
1954
2060
|
}
|
|
2061
|
+
|
|
2062
|
+
/* src/components/Card/card.css */
|
|
2063
|
+
.fds-card {
|
|
2064
|
+
box-sizing: border-box;
|
|
2065
|
+
border-radius: var(--radius-2xl, 16px);
|
|
2066
|
+
color: var(--color-text, #171717);
|
|
2067
|
+
}
|
|
2068
|
+
.fds-card--subtle {
|
|
2069
|
+
background: var(--color-surface-subtle, #fafafa);
|
|
2070
|
+
border: 1px solid var(--color-border-light, #f5f5f5);
|
|
2071
|
+
}
|
|
2072
|
+
.fds-card--default {
|
|
2073
|
+
background: var(--color-bg, #ffffff);
|
|
2074
|
+
border: 1px solid var(--color-border, #e5e5e5);
|
|
2075
|
+
border-radius: var(--radius-xl, 12px);
|
|
2076
|
+
}
|
|
2077
|
+
.fds-card--plain {
|
|
2078
|
+
background: var(--color-bg, #ffffff);
|
|
2079
|
+
border: 1px solid transparent;
|
|
2080
|
+
border-radius: var(--radius-xl, 12px);
|
|
2081
|
+
}
|
|
2082
|
+
.fds-card--pad-none {
|
|
2083
|
+
padding: 0;
|
|
2084
|
+
}
|
|
2085
|
+
.fds-card--pad-md {
|
|
2086
|
+
padding: var(--spacing-6, 24px);
|
|
2087
|
+
}
|
|
2088
|
+
.fds-card--pad-lg {
|
|
2089
|
+
padding: var(--spacing-10, 40px) var(--spacing-12, 48px);
|
|
2090
|
+
}
|
|
2091
|
+
@media (max-width: 600px) {
|
|
2092
|
+
.fds-card--pad-lg {
|
|
2093
|
+
padding: var(--spacing-6, 24px);
|
|
2094
|
+
}
|
|
2095
|
+
}
|
|
2096
|
+
|
|
2097
|
+
/* src/components/Stat/stat.css */
|
|
2098
|
+
.fds-stat {
|
|
2099
|
+
display: flex;
|
|
2100
|
+
flex-direction: column;
|
|
2101
|
+
gap: var(--spacing-1, 4px);
|
|
2102
|
+
font-family: var(--font-body, "Rethink Sans", system-ui, sans-serif);
|
|
2103
|
+
}
|
|
2104
|
+
.fds-stat__label {
|
|
2105
|
+
margin: 0;
|
|
2106
|
+
font-size: var(--font-size-text-sm, 14px);
|
|
2107
|
+
line-height: 20px;
|
|
2108
|
+
font-weight: var(--font-weight-medium, 500);
|
|
2109
|
+
color: var(--color-text-secondary, #525252);
|
|
2110
|
+
}
|
|
2111
|
+
.fds-stat__value {
|
|
2112
|
+
margin: 0;
|
|
2113
|
+
font-size: var(--font-size-display-md, 36px);
|
|
2114
|
+
line-height: 44px;
|
|
2115
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
2116
|
+
letter-spacing: -0.02em;
|
|
2117
|
+
color: var(--color-text, #171717);
|
|
2118
|
+
font-variant-numeric: tabular-nums;
|
|
2119
|
+
}
|
|
2120
|
+
.fds-stat__detail {
|
|
2121
|
+
display: flex;
|
|
2122
|
+
flex-wrap: wrap;
|
|
2123
|
+
gap: var(--spacing-2, 8px);
|
|
2124
|
+
margin-top: var(--spacing-3, 12px);
|
|
2125
|
+
}
|
|
2126
|
+
|
|
2127
|
+
/* src/components/Checkbox/checkbox.css */
|
|
2128
|
+
.fds-checkbox {
|
|
2129
|
+
display: inline-flex;
|
|
2130
|
+
position: relative;
|
|
2131
|
+
}
|
|
2132
|
+
.fds-checkbox__input {
|
|
2133
|
+
position: absolute;
|
|
2134
|
+
inset: 0;
|
|
2135
|
+
width: 100%;
|
|
2136
|
+
height: 100%;
|
|
2137
|
+
margin: 0;
|
|
2138
|
+
opacity: 0;
|
|
2139
|
+
cursor: pointer;
|
|
2140
|
+
z-index: 1;
|
|
2141
|
+
}
|
|
2142
|
+
.fds-checkbox__input:disabled {
|
|
2143
|
+
cursor: not-allowed;
|
|
2144
|
+
}
|
|
2145
|
+
.fds-checkbox__control {
|
|
2146
|
+
display: inline-flex;
|
|
2147
|
+
align-items: flex-start;
|
|
2148
|
+
gap: var(--spacing-2, 8px);
|
|
2149
|
+
cursor: pointer;
|
|
2150
|
+
}
|
|
2151
|
+
.fds-checkbox__box {
|
|
2152
|
+
box-sizing: border-box;
|
|
2153
|
+
display: inline-grid;
|
|
2154
|
+
place-items: center;
|
|
2155
|
+
flex-shrink: 0;
|
|
2156
|
+
width: 16px;
|
|
2157
|
+
height: 16px;
|
|
2158
|
+
margin-top: 3px;
|
|
2159
|
+
border: 1px solid var(--color-border-strong, #d4d4d4);
|
|
2160
|
+
border-radius: var(--radius-sm, 4px);
|
|
2161
|
+
background: var(--color-bg, #ffffff);
|
|
2162
|
+
color: var(--color-bg, #ffffff);
|
|
2163
|
+
transition: background-color var(--duration-quick, 150ms) ease, border-color var(--duration-quick, 150ms) ease;
|
|
2164
|
+
}
|
|
2165
|
+
.fds-checkbox__control:not(:has(.fds-checkbox__text)) .fds-checkbox__box {
|
|
2166
|
+
margin-top: 0;
|
|
2167
|
+
}
|
|
2168
|
+
.fds-checkbox__tick,
|
|
2169
|
+
.fds-checkbox__dash {
|
|
2170
|
+
grid-area: 1 / 1;
|
|
2171
|
+
width: 10px;
|
|
2172
|
+
height: 10px;
|
|
2173
|
+
visibility: hidden;
|
|
2174
|
+
}
|
|
2175
|
+
.fds-checkbox__input:checked ~ .fds-checkbox__control .fds-checkbox__box,
|
|
2176
|
+
.fds-checkbox__input:indeterminate ~ .fds-checkbox__control .fds-checkbox__box {
|
|
2177
|
+
background: var(--color-text, #171717);
|
|
2178
|
+
border-color: var(--color-text, #171717);
|
|
2179
|
+
}
|
|
2180
|
+
.fds-checkbox__input:checked:not(:indeterminate) ~ .fds-checkbox__control .fds-checkbox__tick {
|
|
2181
|
+
visibility: visible;
|
|
2182
|
+
}
|
|
2183
|
+
.fds-checkbox__input:indeterminate ~ .fds-checkbox__control .fds-checkbox__dash {
|
|
2184
|
+
visibility: visible;
|
|
2185
|
+
}
|
|
2186
|
+
.fds-checkbox__input:hover:not(:disabled):not(:checked) ~ .fds-checkbox__control .fds-checkbox__box {
|
|
2187
|
+
border-color: var(--color-text-secondary, #525252);
|
|
2188
|
+
}
|
|
2189
|
+
.fds-checkbox__input:focus-visible ~ .fds-checkbox__control .fds-checkbox__box {
|
|
2190
|
+
outline: 2px solid var(--color-focus, #ea580c);
|
|
2191
|
+
outline-offset: 2px;
|
|
2192
|
+
}
|
|
2193
|
+
.fds-checkbox[data-disabled] .fds-checkbox__box {
|
|
2194
|
+
opacity: 0.5;
|
|
2195
|
+
}
|
|
2196
|
+
.fds-checkbox[data-disabled] .fds-checkbox__label,
|
|
2197
|
+
.fds-checkbox[data-disabled] .fds-checkbox__description {
|
|
2198
|
+
color: var(--color-text-muted, #a3a3a3);
|
|
2199
|
+
}
|
|
2200
|
+
.fds-checkbox__text {
|
|
2201
|
+
display: inline-flex;
|
|
2202
|
+
flex-direction: column;
|
|
2203
|
+
gap: 2px;
|
|
2204
|
+
}
|
|
2205
|
+
.fds-checkbox__label {
|
|
2206
|
+
font-family: var(--font-body, "Rethink Sans", system-ui, sans-serif);
|
|
2207
|
+
font-size: var(--font-size-text-sm, 14px);
|
|
2208
|
+
line-height: 22px;
|
|
2209
|
+
font-weight: var(--font-weight-medium, 500);
|
|
2210
|
+
color: var(--color-text, #171717);
|
|
2211
|
+
}
|
|
2212
|
+
.fds-checkbox__description {
|
|
2213
|
+
font-family: var(--font-body, "Rethink Sans", system-ui, sans-serif);
|
|
2214
|
+
font-size: var(--font-size-text-sm, 14px);
|
|
2215
|
+
line-height: 22px;
|
|
2216
|
+
color: var(--color-text-secondary, #525252);
|
|
2217
|
+
}
|
|
2218
|
+
@media (prefers-reduced-motion: reduce) {
|
|
2219
|
+
.fds-checkbox__box {
|
|
2220
|
+
transition: none;
|
|
2221
|
+
}
|
|
2222
|
+
}
|
|
2223
|
+
|
|
2224
|
+
/* src/components/Radio/radio.css */
|
|
2225
|
+
.fds-radio {
|
|
2226
|
+
display: inline-flex;
|
|
2227
|
+
position: relative;
|
|
2228
|
+
}
|
|
2229
|
+
.fds-radio__input {
|
|
2230
|
+
position: absolute;
|
|
2231
|
+
inset: 0;
|
|
2232
|
+
width: 100%;
|
|
2233
|
+
height: 100%;
|
|
2234
|
+
margin: 0;
|
|
2235
|
+
opacity: 0;
|
|
2236
|
+
cursor: pointer;
|
|
2237
|
+
z-index: 1;
|
|
2238
|
+
}
|
|
2239
|
+
.fds-radio__input:disabled {
|
|
2240
|
+
cursor: not-allowed;
|
|
2241
|
+
}
|
|
2242
|
+
.fds-radio__control {
|
|
2243
|
+
display: inline-flex;
|
|
2244
|
+
align-items: flex-start;
|
|
2245
|
+
gap: var(--spacing-2, 8px);
|
|
2246
|
+
cursor: pointer;
|
|
2247
|
+
}
|
|
2248
|
+
.fds-radio__circle {
|
|
2249
|
+
box-sizing: border-box;
|
|
2250
|
+
flex-shrink: 0;
|
|
2251
|
+
width: 16px;
|
|
2252
|
+
height: 16px;
|
|
2253
|
+
margin-top: 3px;
|
|
2254
|
+
border: 1px solid var(--color-border-strong, #d4d4d4);
|
|
2255
|
+
border-radius: var(--radius-full, 9999px);
|
|
2256
|
+
background: var(--color-bg, #ffffff);
|
|
2257
|
+
transition: border-color var(--duration-quick, 150ms) ease, border-width var(--duration-quick, 150ms) ease;
|
|
2258
|
+
}
|
|
2259
|
+
.fds-radio__control:not(:has(.fds-radio__text)) .fds-radio__circle {
|
|
2260
|
+
margin-top: 0;
|
|
2261
|
+
}
|
|
2262
|
+
.fds-radio__input:checked ~ .fds-radio__control .fds-radio__circle {
|
|
2263
|
+
border: 5px solid var(--color-text, #171717);
|
|
2264
|
+
}
|
|
2265
|
+
.fds-radio__input:hover:not(:disabled):not(:checked) ~ .fds-radio__control .fds-radio__circle {
|
|
2266
|
+
border-color: var(--color-text-secondary, #525252);
|
|
2267
|
+
}
|
|
2268
|
+
.fds-radio__input:focus-visible ~ .fds-radio__control .fds-radio__circle {
|
|
2269
|
+
outline: 2px solid var(--color-focus, #ea580c);
|
|
2270
|
+
outline-offset: 2px;
|
|
2271
|
+
}
|
|
2272
|
+
.fds-radio[data-disabled] .fds-radio__circle {
|
|
2273
|
+
opacity: 0.5;
|
|
2274
|
+
}
|
|
2275
|
+
.fds-radio[data-disabled] .fds-radio__label,
|
|
2276
|
+
.fds-radio[data-disabled] .fds-radio__description {
|
|
2277
|
+
color: var(--color-text-muted, #a3a3a3);
|
|
2278
|
+
}
|
|
2279
|
+
.fds-radio__text {
|
|
2280
|
+
display: inline-flex;
|
|
2281
|
+
flex-direction: column;
|
|
2282
|
+
gap: 2px;
|
|
2283
|
+
}
|
|
2284
|
+
.fds-radio__label {
|
|
2285
|
+
font-family: var(--font-body, "Rethink Sans", system-ui, sans-serif);
|
|
2286
|
+
font-size: var(--font-size-text-sm, 14px);
|
|
2287
|
+
line-height: 22px;
|
|
2288
|
+
font-weight: var(--font-weight-medium, 500);
|
|
2289
|
+
color: var(--color-text, #171717);
|
|
2290
|
+
}
|
|
2291
|
+
.fds-radio__description {
|
|
2292
|
+
font-family: var(--font-body, "Rethink Sans", system-ui, sans-serif);
|
|
2293
|
+
font-size: var(--font-size-text-sm, 14px);
|
|
2294
|
+
line-height: 22px;
|
|
2295
|
+
color: var(--color-text-secondary, #525252);
|
|
2296
|
+
}
|
|
2297
|
+
@media (prefers-reduced-motion: reduce) {
|
|
2298
|
+
.fds-radio__circle {
|
|
2299
|
+
transition: none;
|
|
2300
|
+
}
|
|
2301
|
+
}
|
|
2302
|
+
|
|
2303
|
+
/* src/components/Accordion/accordion.css */
|
|
2304
|
+
.fds-accordion {
|
|
2305
|
+
box-sizing: border-box;
|
|
2306
|
+
background: var(--color-bg, #ffffff);
|
|
2307
|
+
border: 1px solid var(--color-border, #e5e5e5);
|
|
2308
|
+
border-radius: var(--radius-xl, 12px);
|
|
2309
|
+
font-family: var(--font-body, "Rethink Sans", system-ui, sans-serif);
|
|
2310
|
+
color: var(--color-text, #171717);
|
|
2311
|
+
}
|
|
2312
|
+
.fds-accordion + .fds-accordion {
|
|
2313
|
+
margin-top: var(--spacing-3, 12px);
|
|
2314
|
+
}
|
|
2315
|
+
.fds-accordion__header {
|
|
2316
|
+
display: flex;
|
|
2317
|
+
align-items: center;
|
|
2318
|
+
gap: var(--spacing-3, 12px);
|
|
2319
|
+
padding: 0 var(--spacing-4, 16px) 0 0;
|
|
2320
|
+
}
|
|
2321
|
+
.fds-accordion__trigger {
|
|
2322
|
+
flex: 1 1 auto;
|
|
2323
|
+
min-width: 0;
|
|
2324
|
+
display: flex;
|
|
2325
|
+
align-items: center;
|
|
2326
|
+
gap: var(--spacing-3, 12px);
|
|
2327
|
+
padding: var(--spacing-4, 16px);
|
|
2328
|
+
margin: 0;
|
|
2329
|
+
border: 0;
|
|
2330
|
+
background: none;
|
|
2331
|
+
font: inherit;
|
|
2332
|
+
color: inherit;
|
|
2333
|
+
text-align: left;
|
|
2334
|
+
cursor: pointer;
|
|
2335
|
+
border-radius: var(--radius-xl, 12px);
|
|
2336
|
+
}
|
|
2337
|
+
.fds-accordion__trigger:focus-visible {
|
|
2338
|
+
outline: 2px solid var(--color-focus, #ea580c);
|
|
2339
|
+
outline-offset: -2px;
|
|
2340
|
+
}
|
|
2341
|
+
.fds-accordion__actions {
|
|
2342
|
+
display: flex;
|
|
2343
|
+
align-items: center;
|
|
2344
|
+
gap: var(--spacing-2, 8px);
|
|
2345
|
+
flex-shrink: 0;
|
|
2346
|
+
}
|
|
2347
|
+
.fds-accordion__chevron {
|
|
2348
|
+
display: inline-flex;
|
|
2349
|
+
flex-shrink: 0;
|
|
2350
|
+
color: var(--color-text-secondary, #525252);
|
|
2351
|
+
cursor: pointer;
|
|
2352
|
+
transition: transform var(--duration-quick, 150ms) ease;
|
|
2353
|
+
}
|
|
2354
|
+
.fds-accordion[data-open] .fds-accordion__chevron {
|
|
2355
|
+
transform: rotate(180deg);
|
|
2356
|
+
}
|
|
2357
|
+
.fds-accordion__body {
|
|
2358
|
+
padding: 0 var(--spacing-4, 16px) var(--spacing-4, 16px);
|
|
2359
|
+
}
|
|
2360
|
+
@media (prefers-reduced-motion: reduce) {
|
|
2361
|
+
.fds-accordion__chevron {
|
|
2362
|
+
transition: none;
|
|
2363
|
+
}
|
|
2364
|
+
}
|
|
2365
|
+
|
|
2366
|
+
/* src/components/StepList/step-list.css */
|
|
2367
|
+
.fds-steps {
|
|
2368
|
+
list-style: none;
|
|
2369
|
+
margin: 0;
|
|
2370
|
+
padding: 0;
|
|
2371
|
+
display: flex;
|
|
2372
|
+
flex-direction: column;
|
|
2373
|
+
gap: var(--spacing-3, 12px);
|
|
2374
|
+
font-family: var(--font-body, "Rethink Sans", system-ui, sans-serif);
|
|
2375
|
+
}
|
|
2376
|
+
.fds-steps__step {
|
|
2377
|
+
box-sizing: border-box;
|
|
2378
|
+
display: flex;
|
|
2379
|
+
align-items: center;
|
|
2380
|
+
gap: var(--spacing-3, 12px);
|
|
2381
|
+
min-height: 54px;
|
|
2382
|
+
padding: var(--spacing-3, 12px) var(--spacing-4, 16px);
|
|
2383
|
+
border: 1px solid var(--color-border, #e5e5e5);
|
|
2384
|
+
border-radius: var(--radius-lg, 8px);
|
|
2385
|
+
background: var(--color-surface-subtle, #fafafa);
|
|
2386
|
+
font-size: var(--font-size-text-sm, 14px);
|
|
2387
|
+
line-height: 20px;
|
|
2388
|
+
color: var(--color-text-muted, #a3a3a3);
|
|
2389
|
+
}
|
|
2390
|
+
.fds-steps__icon {
|
|
2391
|
+
display: inline-flex;
|
|
2392
|
+
flex-shrink: 0;
|
|
2393
|
+
}
|
|
2394
|
+
.fds-steps__step--done {
|
|
2395
|
+
background: var(--color-text, #171717);
|
|
2396
|
+
border-color: var(--color-text, #171717);
|
|
2397
|
+
color: var(--color-bg, #ffffff);
|
|
2398
|
+
font-weight: var(--font-weight-medium, 500);
|
|
2399
|
+
}
|
|
2400
|
+
.fds-steps__step--active {
|
|
2401
|
+
background: var(--color-surface, #f5f5f5);
|
|
2402
|
+
color: var(--color-text, #171717);
|
|
2403
|
+
font-weight: var(--font-weight-medium, 500);
|
|
2404
|
+
}
|
|
2405
|
+
.fds-steps__step--failed {
|
|
2406
|
+
background: var(--color-error-bg, #fef2f2);
|
|
2407
|
+
border-color: var(--color-error-border, #fecaca);
|
|
2408
|
+
color: var(--color-error-text, #991b1b);
|
|
2409
|
+
font-weight: var(--font-weight-medium, 500);
|
|
2410
|
+
}
|
|
2411
|
+
.fds-steps__spinner {
|
|
2412
|
+
animation: fds-steps-spin 1.2s linear infinite;
|
|
2413
|
+
}
|
|
2414
|
+
@keyframes fds-steps-spin {
|
|
2415
|
+
to {
|
|
2416
|
+
transform: rotate(360deg);
|
|
2417
|
+
}
|
|
2418
|
+
}
|
|
2419
|
+
.fds-steps__sr {
|
|
2420
|
+
position: absolute;
|
|
2421
|
+
width: 1px;
|
|
2422
|
+
height: 1px;
|
|
2423
|
+
overflow: hidden;
|
|
2424
|
+
clip: rect(0 0 0 0);
|
|
2425
|
+
white-space: nowrap;
|
|
2426
|
+
}
|
|
2427
|
+
@media (prefers-reduced-motion: reduce) {
|
|
2428
|
+
.fds-steps__spinner {
|
|
2429
|
+
animation: none;
|
|
2430
|
+
}
|
|
2431
|
+
}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { ButtonHTMLAttributes, ReactNode, HTMLAttributes, InputHTMLAttributes } from 'react';
|
|
2
|
+
import { ButtonHTMLAttributes, ReactNode, AnchorHTMLAttributes, HTMLAttributes, InputHTMLAttributes } from 'react';
|
|
3
3
|
|
|
4
4
|
type ButtonVariant = 'primary' | 'outlined' | 'text' | 'neutral' | 'link'
|
|
5
5
|
/** High-contrast near-black, for a page's main create action ("New comparison"). */
|
|
@@ -26,6 +26,25 @@ interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
|
26
26
|
*/
|
|
27
27
|
declare function Button({ variant, size, leftIcon, rightIcon, type, className, children, ...rest }: ButtonProps): react.JSX.Element;
|
|
28
28
|
|
|
29
|
+
interface ButtonLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
|
|
30
|
+
/** Where the link goes. */
|
|
31
|
+
href: string;
|
|
32
|
+
/** Visual style. @default 'primary' */
|
|
33
|
+
variant?: ButtonVariant;
|
|
34
|
+
/** Size step. @default 'medium' */
|
|
35
|
+
size?: ButtonSize;
|
|
36
|
+
/** Optional leading icon (rendered in a 20px slot). */
|
|
37
|
+
leftIcon?: ReactNode;
|
|
38
|
+
/** Optional trailing icon (rendered in a 20px slot). */
|
|
39
|
+
rightIcon?: ReactNode;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* A link that looks like a Button. Use it when the action navigates (to a
|
|
43
|
+
* page or another site) rather than doing something on this page, so the
|
|
44
|
+
* browser keeps link behaviour: open in a new tab, copy link, status bar URL.
|
|
45
|
+
*/
|
|
46
|
+
declare function ButtonLink({ variant, size, leftIcon, rightIcon, className, children, ...rest }: ButtonLinkProps): react.JSX.Element;
|
|
47
|
+
|
|
29
48
|
interface MismatchProperty {
|
|
30
49
|
/** Property label, e.g. "color", "font-size". */
|
|
31
50
|
label: string;
|
|
@@ -443,6 +462,8 @@ declare function Badge({ tone, icon, className, children, ...rest }: BadgeProps)
|
|
|
443
462
|
interface TagProps extends HTMLAttributes<HTMLSpanElement> {
|
|
444
463
|
/** Colour of the leading dot. Leave out for no dot. */
|
|
445
464
|
dot?: Tone;
|
|
465
|
+
/** Leading icon, drawn at 14px, e.g. a repository or branch mark. */
|
|
466
|
+
icon?: ReactNode;
|
|
446
467
|
children: ReactNode;
|
|
447
468
|
}
|
|
448
469
|
/**
|
|
@@ -450,7 +471,7 @@ interface TagProps extends HTMLAttributes<HTMLSpanElement> {
|
|
|
450
471
|
* optional coloured dot. Measured from Figma "✅Project" comparison-type chip
|
|
451
472
|
* (node 231:59808).
|
|
452
473
|
*/
|
|
453
|
-
declare function Tag({ dot, className, children, ...rest }: TagProps): react.JSX.Element;
|
|
474
|
+
declare function Tag({ dot, icon, className, children, ...rest }: TagProps): react.JSX.Element;
|
|
454
475
|
|
|
455
476
|
interface MultiSelectOption {
|
|
456
477
|
value: string;
|
|
@@ -536,6 +557,28 @@ declare function StackedCardsIllustration({ className }: {
|
|
|
536
557
|
className?: string;
|
|
537
558
|
}): react.JSX.Element;
|
|
538
559
|
|
|
560
|
+
/** Colour role. `accent` is the brand tint, for a prompt to act (an upgrade, a next step). */
|
|
561
|
+
type CalloutTone = Tone | 'accent';
|
|
562
|
+
interface CalloutProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
563
|
+
/** Colour role. @default 'neutral' */
|
|
564
|
+
tone?: CalloutTone;
|
|
565
|
+
/** Leading icon, drawn at 16px in a 32px tile. */
|
|
566
|
+
icon?: ReactNode;
|
|
567
|
+
/** One-line heading. */
|
|
568
|
+
title: ReactNode;
|
|
569
|
+
/** Shown after the title, e.g. a Badge. */
|
|
570
|
+
titleAside?: ReactNode;
|
|
571
|
+
/** Supporting text under the title. */
|
|
572
|
+
children?: ReactNode;
|
|
573
|
+
/** Trailing action(s), e.g. a ButtonLink. Moves under the text on phones. */
|
|
574
|
+
action?: ReactNode;
|
|
575
|
+
}
|
|
576
|
+
/**
|
|
577
|
+
* Fidel design-system Callout: a tinted row that tells the reader something
|
|
578
|
+
* about the page they are on and, optionally, what to do about it.
|
|
579
|
+
*/
|
|
580
|
+
declare function Callout({ tone, icon, title, titleAside, children, action, className, ...rest }: CalloutProps): react.JSX.Element;
|
|
581
|
+
|
|
539
582
|
type SkeletonShape = 'rect' | 'text' | 'circle';
|
|
540
583
|
interface SkeletonProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
|
|
541
584
|
/** rect: a block. text: line(s) at text height. circle: an avatar or icon. @default 'rect' */
|
|
@@ -562,4 +605,105 @@ interface SkeletonGroupProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
562
605
|
/** Wraps a skeleton layout and announces it once as loading (role="status"). */
|
|
563
606
|
declare function SkeletonGroup({ label, className, children, ...rest }: SkeletonGroupProps): react.JSX.Element;
|
|
564
607
|
|
|
565
|
-
|
|
608
|
+
/** Surface colour. `subtle` is the grey panel, `default` white with a border, `plain` white without one. */
|
|
609
|
+
type CardTone = 'subtle' | 'default' | 'plain';
|
|
610
|
+
type CardPadding = 'none' | 'md' | 'lg';
|
|
611
|
+
interface CardProps extends HTMLAttributes<HTMLDivElement> {
|
|
612
|
+
/** @default 'default' */
|
|
613
|
+
tone?: CardTone;
|
|
614
|
+
/** Inner spacing: 24px (`md`) or 40px (`lg`, 24px on phones). @default 'md' */
|
|
615
|
+
padding?: CardPadding;
|
|
616
|
+
children?: ReactNode;
|
|
617
|
+
}
|
|
618
|
+
/**
|
|
619
|
+
* Fidel design-system Card: a rounded surface that groups related content.
|
|
620
|
+
* It has no layout of its own; put anything inside. Measured from Figma
|
|
621
|
+
* "Integrations" frames (nodes 231:66631, 231:67267, 231:67335).
|
|
622
|
+
*/
|
|
623
|
+
declare function Card({ tone, padding, className, children, ...rest }: CardProps): react.JSX.Element;
|
|
624
|
+
|
|
625
|
+
interface StatProps extends HTMLAttributes<HTMLDivElement> {
|
|
626
|
+
/** What the number counts, e.g. "Tokens found". */
|
|
627
|
+
label: ReactNode;
|
|
628
|
+
/** The figure itself. */
|
|
629
|
+
value: ReactNode;
|
|
630
|
+
/** Detail under the figure, e.g. a row of Tags. */
|
|
631
|
+
children?: ReactNode;
|
|
632
|
+
}
|
|
633
|
+
/**
|
|
634
|
+
* Fidel design-system Stat: a caption, a large figure and optional detail.
|
|
635
|
+
* Has no surface; wrap it in a Card. Measured from Figma "Design System
|
|
636
|
+
* connected" (node 231:67335).
|
|
637
|
+
*/
|
|
638
|
+
declare function Stat({ label, value, children, className, ...rest }: StatProps): react.JSX.Element;
|
|
639
|
+
|
|
640
|
+
interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {
|
|
641
|
+
/** Text beside the box. Without one, pass `aria-label`. */
|
|
642
|
+
label?: ReactNode;
|
|
643
|
+
/** Secondary line under the label. */
|
|
644
|
+
description?: ReactNode;
|
|
645
|
+
/** Shows a dash for "some of these"; screen readers announce it as mixed. */
|
|
646
|
+
indeterminate?: boolean;
|
|
647
|
+
}
|
|
648
|
+
/**
|
|
649
|
+
* Fidel design-system Checkbox. Renders a native checkbox, visually hidden
|
|
650
|
+
* over a drawn box, so checked/indeterminate/disabled/focus come from the
|
|
651
|
+
* input itself and every standard input attribute passes through. Built like
|
|
652
|
+
* Toggle; checked is ink-filled to match the Integrations frames.
|
|
653
|
+
*/
|
|
654
|
+
declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<HTMLInputElement>>;
|
|
655
|
+
|
|
656
|
+
interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {
|
|
657
|
+
/** Text beside the circle. Without one, pass `aria-label`. */
|
|
658
|
+
label?: ReactNode;
|
|
659
|
+
/** Secondary line under the label. */
|
|
660
|
+
description?: ReactNode;
|
|
661
|
+
}
|
|
662
|
+
/**
|
|
663
|
+
* Fidel design-system Radio: one choice of several. Give every Radio in a
|
|
664
|
+
* set the same `name`, and wrap the set in a `role="radiogroup"` element (or
|
|
665
|
+
* a fieldset) with a label. Built like Checkbox: a native input over a drawn
|
|
666
|
+
* circle, ink-filled when chosen.
|
|
667
|
+
*/
|
|
668
|
+
declare const Radio: react.ForwardRefExoticComponent<RadioProps & react.RefAttributes<HTMLInputElement>>;
|
|
669
|
+
|
|
670
|
+
interface AccordionProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
671
|
+
/** Header content, always visible. Clicking it opens and closes the body. */
|
|
672
|
+
summary: ReactNode;
|
|
673
|
+
/**
|
|
674
|
+
* Controls in the header that do their own thing, e.g. a Retry button.
|
|
675
|
+
* Kept outside the toggle so they stay separate keyboard stops.
|
|
676
|
+
*/
|
|
677
|
+
actions?: ReactNode;
|
|
678
|
+
/** Controlled open state. */
|
|
679
|
+
open?: boolean;
|
|
680
|
+
/** Initial open state when uncontrolled. @default false */
|
|
681
|
+
defaultOpen?: boolean;
|
|
682
|
+
onOpenChange?: (open: boolean) => void;
|
|
683
|
+
/** Body, shown while open. */
|
|
684
|
+
children?: ReactNode;
|
|
685
|
+
}
|
|
686
|
+
/**
|
|
687
|
+
* Fidel design-system Accordion: one row that expands to show more. Stack
|
|
688
|
+
* several for a list. The header is a button with `aria-expanded`; the
|
|
689
|
+
* chevron on the right points down when closed and up when open.
|
|
690
|
+
*/
|
|
691
|
+
declare function Accordion({ summary, actions, open: openProp, defaultOpen, onOpenChange, children, className, ...rest }: AccordionProps): react.JSX.Element;
|
|
692
|
+
|
|
693
|
+
type StepStatus = 'done' | 'active' | 'pending' | 'failed';
|
|
694
|
+
interface Step {
|
|
695
|
+
id: string;
|
|
696
|
+
label: ReactNode;
|
|
697
|
+
status: StepStatus;
|
|
698
|
+
}
|
|
699
|
+
interface StepListProps extends Omit<HTMLAttributes<HTMLOListElement>, 'children'> {
|
|
700
|
+
steps: Step[];
|
|
701
|
+
}
|
|
702
|
+
/**
|
|
703
|
+
* Fidel design-system StepList: an ordered list of steps, each done, in
|
|
704
|
+
* progress, not started or failed. The in-progress step is marked
|
|
705
|
+
* `aria-current="step"`. Measured from Figma "Scanning" (node 231:67267).
|
|
706
|
+
*/
|
|
707
|
+
declare function StepList({ steps, className, ...rest }: StepListProps): react.JSX.Element;
|
|
708
|
+
|
|
709
|
+
export { Accordion, type AccordionProps, AppNav, type AppNavProps, Avatar, type AvatarProps, type AvatarSize, Badge, type BadgeProps, type Breakpoint, Button, ButtonLink, type ButtonLinkProps, type ButtonProps, type ButtonSize, type ButtonVariant, Callout, type CalloutProps, type CalloutTone, Card, type CardPadding, type CardProps, type CardTone, Checkbox, type CheckboxProps, type DiffElement, type DiffPropertyLine, DiffPropertyList, type DiffPropertyListProps, DiffSection, type DiffSectionProps, EmptyState, type EmptyStateProps, MismatchCard, type MismatchCardProps, type MismatchProperty, Modal, type ModalProps, type ModalSize, type ModalTone, MultiSelect, type MultiSelectOption, type MultiSelectProps, Pagination, type PaginationProps, Radio, type RadioProps, SearchInput, type SearchInputProps, SectionHeader, type SectionHeaderProps, SegmentedControl, type SegmentedControlProps, type SegmentedOption, Select, type SelectOption, type SelectProps, SettingsSection, type SettingsSectionProps, Skeleton, SkeletonGroup, type SkeletonGroupProps, type SkeletonProps, type SkeletonShape, Split, type SplitProps, StackedCardsIllustration, Stat, type StatProps, type Step, StepList, type StepListProps, type StepStatus, TabNav, type TabNavProps, Tag, type TagProps, Toggle, type ToggleProps, type ToggleSize, type Tone, breakpoints };
|