@yahoo/uds 2.2.0 → 2.3.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/cli/PropsToClass.mock.tsx +14 -0
- package/cli/bin/uds-darwin-arm64-baseline +0 -0
- package/cli/bin/uds-linux-arm64 +0 -0
- package/cli/bin/uds-linux-x64-baseline +0 -0
- package/cli/cli.ts +1 -2
- package/cli/utils/auth.ts +39 -202
- package/dist/Text-CwmyqrBk.d.cts +243 -0
- package/dist/Text-CwmyqrBk.d.ts +243 -0
- package/dist/client/index.cjs +2 -2
- package/dist/client/index.d.cts +46 -6
- package/dist/client/index.d.ts +46 -6
- package/dist/client/index.js +3 -3
- package/dist/experimental/client/index.cjs +3 -0
- package/dist/experimental/client/index.d.cts +146 -0
- package/dist/experimental/client/index.d.ts +146 -0
- package/dist/experimental/client/index.js +3 -0
- package/dist/experimental/index.cjs +2 -2
- package/dist/experimental/index.d.cts +5 -387
- package/dist/experimental/index.d.ts +5 -387
- package/dist/experimental/index.js +1 -2
- package/dist/fixtures.cjs +1 -1
- package/dist/fixtures.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +4 -42
- package/dist/index.d.ts +4 -42
- package/dist/index.js +1 -1
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/tailwind/plugin.cjs +2 -2
- package/dist/tailwind/plugin.d.cts +1 -1
- package/dist/tailwind/plugin.d.ts +1 -1
- package/dist/tailwind/plugin.js +2 -2
- package/dist/tailwind/purger.cjs +1 -1
- package/dist/tailwind/purger.js +1 -1
- package/dist/tailwind/utils.d.cts +1 -1
- package/dist/tailwind/utils.d.ts +1 -1
- package/dist/tokens/index.d.cts +2 -2
- package/dist/tokens/index.d.ts +2 -2
- package/dist/tokens/parseTokens.d.cts +1 -1
- package/dist/tokens/parseTokens.d.ts +1 -1
- package/dist/{types-Pyccco5Q.d.cts → types-DsMvZpWN.d.cts} +1 -1
- package/dist/{types-Pyccco5Q.d.ts → types-DsMvZpWN.d.ts} +1 -1
- package/package.json +13 -6
- package/cli/README.md +0 -208
- package/cli/utils/client_secrets.json +0 -23
- package/cli/utils/client_secrets.json.enc +0 -0
- package/cli/utils/secrets.ts +0 -40
@@ -0,0 +1,14 @@
|
|
1
|
+
import { Button, cx, HStack, Text } from '@yahoo/uds';
|
2
|
+
const textClassName = cx('text-primary');
|
3
|
+
const otherProps = { height: 'fit' };
|
4
|
+
|
5
|
+
export const PageA = () => {
|
6
|
+
return (
|
7
|
+
<HStack className="w-full max-h-screen">
|
8
|
+
<Button className="min-w-full">Click me</Button>
|
9
|
+
{/* 🙏 TODO: Add w-10/12 to your className attribute */}
|
10
|
+
<Text className={textClassName}>Some text</Text>
|
11
|
+
<Text {...otherProps}>Some text</Text>
|
12
|
+
</HStack>
|
13
|
+
);
|
14
|
+
}
|
Binary file
|
package/cli/bin/uds-linux-arm64
CHANGED
Binary file
|
Binary file
|
package/cli/cli.ts
CHANGED
package/cli/utils/auth.ts
CHANGED
@@ -1,179 +1,47 @@
|
|
1
|
+
import child_process from 'node:child_process';
|
1
2
|
import { unlink } from 'node:fs/promises';
|
2
3
|
import path from 'node:path';
|
4
|
+
import util from 'node:util';
|
3
5
|
|
4
|
-
import { print, red } from 'bluebun';
|
6
|
+
import { ask, print, red } from 'bluebun';
|
5
7
|
import Bun from 'bun';
|
6
|
-
import { getApps, initializeApp } from 'firebase/app';
|
7
|
-
import {
|
8
|
-
connectAuthEmulator,
|
9
|
-
getAuth,
|
10
|
-
GoogleAuthProvider,
|
11
|
-
signInWithCredential,
|
12
|
-
} from 'firebase/auth';
|
13
|
-
import { google, oauth2_v2 } from 'googleapis';
|
14
|
-
import http from 'http';
|
15
|
-
import open from 'open';
|
16
8
|
import { type FirebaseUser } from 'root/database/firebase';
|
17
9
|
import { v5 as uuidv5 } from 'uuid';
|
18
10
|
|
19
|
-
|
11
|
+
const exec = util.promisify(child_process.exec);
|
20
12
|
|
21
|
-
type User =
|
22
|
-
type LoginProvider = 'google' | 'firebase' | 'configurator';
|
23
|
-
|
24
|
-
const LOGIN_PROVIDER: LoginProvider =
|
25
|
-
(process.env.LOGIN_PROVIDER as LoginProvider) ?? 'configurator';
|
26
|
-
|
27
|
-
const REDIRECT_URL = clientSecrets.web.redirect_uris[0];
|
28
|
-
const { port: PORT, origin: SERVER_ORIGIN } = new URL(REDIRECT_URL);
|
29
|
-
|
30
|
-
const configuratorUrlOrigin =
|
31
|
-
process.env.NODE_ENV === 'development' ? 'http://localhost:4001' : 'https://config.uds.build';
|
13
|
+
type User = Partial<FirebaseUser>;
|
32
14
|
|
33
15
|
const CACHE_FILEPATH = '.uds/user.json';
|
34
16
|
const DEFAULT_CLI_PATH = path.resolve(import.meta.dir, '..');
|
35
17
|
const CACHED_USER_FILE = path.resolve(DEFAULT_CLI_PATH, CACHE_FILEPATH);
|
36
18
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
const
|
41
|
-
? clientSecrets.firebaseConfig
|
42
|
-
: {
|
43
|
-
projectId: 'uds-poc',
|
44
|
-
apiKey: 'DUMMY_API_KEY',
|
45
|
-
authDomain: 'uds-poc.firebaseapp.com',
|
46
|
-
};
|
47
|
-
|
48
|
-
const firebaseApp = getApps().length === 0 ? initializeApp(firebaseConfig) : getApps()[0];
|
49
|
-
const auth = getAuth(firebaseApp);
|
50
|
-
|
51
|
-
if (isEmulator) {
|
52
|
-
connectAuthEmulator(auth, 'http://127.0.0.1:9099');
|
53
|
-
}
|
54
|
-
|
55
|
-
// Credentials can be found in https://console.cloud.google.com/apis/credentials/oauthclient/700524957090-6uju02gp6i0rlm3p17nt1v6vbrretfka.apps.googleusercontent.com?project=uds-poc.
|
56
|
-
const oauth2Client = new google.auth.OAuth2(
|
57
|
-
clientSecrets.web.client_id,
|
58
|
-
clientSecrets.web.client_secret,
|
59
|
-
REDIRECT_URL,
|
60
|
-
);
|
61
|
-
|
62
|
-
function isYahooEmployee(user?: User) {
|
63
|
-
return user?.email?.endsWith('@yahooinc.com');
|
64
|
-
}
|
65
|
-
|
66
|
-
function getAuthorizeUrl(loginProvider = LOGIN_PROVIDER) {
|
67
|
-
if (loginProvider === 'configurator') {
|
68
|
-
return `${configuratorUrlOrigin}/login?continue=${REDIRECT_URL}`;
|
69
|
-
}
|
70
|
-
|
71
|
-
return oauth2Client.generateAuthUrl({
|
72
|
-
access_type: 'offline',
|
73
|
-
scope: [
|
74
|
-
'https://www.googleapis.com/auth/userinfo.profile',
|
75
|
-
'https://www.googleapis.com/auth/userinfo.email',
|
76
|
-
].join(' '),
|
77
|
-
hd: 'yahooinc.com',
|
78
|
-
include_granted_scopes: true,
|
79
|
-
});
|
80
|
-
}
|
81
|
-
|
82
|
-
function onPostHandler(
|
83
|
-
this: http.Server,
|
84
|
-
req: http.IncomingMessage,
|
85
|
-
res: http.ServerResponse,
|
86
|
-
resolve: (user: User) => void,
|
87
|
-
reject: (reason?: unknown) => void,
|
88
|
-
) {
|
89
|
-
const corsHeaders = {
|
90
|
-
'Access-Control-Allow-Origin': configuratorUrlOrigin,
|
91
|
-
'Access-Control-Allow-Methods': 'OPTIONS, POST',
|
92
|
-
'Access-Control-Allow-Headers': '*',
|
93
|
-
'Access-Control-Request-Method': '*',
|
94
|
-
};
|
95
|
-
|
96
|
-
for (const [header, value] of Object.entries(corsHeaders)) {
|
97
|
-
res.setHeader(header, value);
|
98
|
-
}
|
99
|
-
|
100
|
-
if (req.headers.origin !== configuratorUrlOrigin) {
|
101
|
-
res.writeHead(405).end(`Request origin not allowed.`);
|
102
|
-
reject(`Request origin not allowed.`);
|
103
|
-
return;
|
104
|
-
}
|
105
|
-
|
106
|
-
if (req.method === 'OPTIONS') {
|
107
|
-
res.writeHead(204).end();
|
108
|
-
return;
|
109
|
-
}
|
110
|
-
|
111
|
-
if (req.method !== 'POST') {
|
112
|
-
// Set the 405 status and Allow header
|
113
|
-
res.writeHead(405, { Allow: 'POST' }).end('Method Not Allowed');
|
114
|
-
reject('Method Not Allowed');
|
115
|
-
return;
|
116
|
-
}
|
117
|
-
|
118
|
-
let data = '';
|
119
|
-
|
120
|
-
req.on('data', (chunk) => {
|
121
|
-
data += chunk.toString();
|
122
|
-
});
|
123
|
-
|
124
|
-
req.on('error', (err: NodeJS.ErrnoException) => {
|
125
|
-
reject(err);
|
126
|
-
});
|
19
|
+
async function getGitEmail(scope: 'local' | 'global' | 'system' = 'global') {
|
20
|
+
let email;
|
21
|
+
try {
|
22
|
+
const { stdout, stderr } = await exec(`git config --${scope} user.email`);
|
127
23
|
|
128
|
-
|
129
|
-
|
130
|
-
const user: FirebaseUser = JSON.parse(data);
|
131
|
-
res.end('Authentication successful! Please close this window.');
|
132
|
-
resolve(user);
|
133
|
-
} catch (err) {
|
134
|
-
reject(err);
|
135
|
-
} finally {
|
136
|
-
this.close();
|
24
|
+
if (stderr) {
|
25
|
+
throw new Error(`Git config error: ${stderr}`);
|
137
26
|
}
|
138
|
-
|
139
|
-
}
|
140
|
-
|
141
|
-
async function onGETHandler(
|
142
|
-
this: http.Server,
|
143
|
-
req: http.IncomingMessage,
|
144
|
-
res: http.ServerResponse,
|
145
|
-
resolve: (user: User) => void,
|
146
|
-
reject: (reason?: unknown) => void,
|
147
|
-
) {
|
148
|
-
try {
|
149
|
-
const code = new URL(req.url || '', SERVER_ORIGIN).searchParams.get('code');
|
150
|
-
if (!code) {
|
151
|
-
res.end('There was no code parameter on the url.');
|
152
|
-
this.close();
|
153
|
-
return;
|
27
|
+
email = stdout.trim();
|
28
|
+
if (!isYahooEmployee({ email })) {
|
29
|
+
throw new Error(`Git config email is not a @yahooinc.com email address.`);
|
154
30
|
}
|
31
|
+
} catch {
|
32
|
+
email = await ask('Please enter your @yahooinc.com email address:', {
|
33
|
+
validation: (answer) => {
|
34
|
+
const warning = red(`🚨 Email was not a @yahooinc.com address.`);
|
35
|
+
return isYahooEmployee({ email: answer }) || warning;
|
36
|
+
},
|
37
|
+
});
|
38
|
+
}
|
155
39
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
const { tokens } = await oauth2Client.getToken(code);
|
160
|
-
oauth2Client.setCredentials(tokens);
|
161
|
-
|
162
|
-
let user: User;
|
163
|
-
|
164
|
-
if (LOGIN_PROVIDER === 'firebase') {
|
165
|
-
// Build Firebase credential using the Google ID token.
|
166
|
-
const credential = GoogleAuthProvider.credential(tokens.id_token);
|
167
|
-
user = (await signInWithCredential(auth, credential)).user;
|
168
|
-
} else {
|
169
|
-
const oauth2 = google.oauth2({ version: 'v2', auth: oauth2Client });
|
170
|
-
user = (await oauth2.userinfo.get()).data;
|
171
|
-
}
|
40
|
+
return email ?? buildCIUser().email; // fallback to CI user if don't have an email for some reason.
|
41
|
+
}
|
172
42
|
|
173
|
-
|
174
|
-
|
175
|
-
reject(err);
|
176
|
-
}
|
43
|
+
function isYahooEmployee(user?: User) {
|
44
|
+
return Boolean(user?.email?.endsWith('@yahooinc.com'));
|
177
45
|
}
|
178
46
|
|
179
47
|
/**
|
@@ -182,41 +50,14 @@ async function onGETHandler(
|
|
182
50
|
* @returns
|
183
51
|
*/
|
184
52
|
async function authenticateUser(): Promise<User> {
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
server.listen(PORT, async () => {
|
192
|
-
const authorizeUrl = getAuthorizeUrl();
|
193
|
-
|
194
|
-
print(`Please visit the following URL if it didn't open automatically:\n${authorizeUrl}`);
|
195
|
-
|
196
|
-
const childProcess = await open(authorizeUrl, { wait: false });
|
197
|
-
childProcess.unref();
|
198
|
-
|
199
|
-
process.on('SIGINT', () => {
|
200
|
-
server.close();
|
201
|
-
reject('Received SIGINT.');
|
202
|
-
});
|
203
|
-
});
|
204
|
-
|
205
|
-
server.on('error', (err: NodeJS.ErrnoException) => {
|
206
|
-
if (err.code && err.code.includes('EADDRINUSE')) {
|
207
|
-
print(
|
208
|
-
red(`🚨 Port ${PORT} already in use. Cannot start local server to handle OAuth flow.`),
|
209
|
-
);
|
210
|
-
server.close();
|
211
|
-
}
|
212
|
-
});
|
53
|
+
// Fetch firebase user data from the configurator.
|
54
|
+
const email = await getGitEmail('local');
|
55
|
+
const resp = await Bun.fetch(`https://config.uds.build/api/cli-analytics?email=${email}`);
|
56
|
+
if (resp.status !== 200) {
|
57
|
+
throw new Error(`Failed to fetch firebase user data from endpoint. Status ${resp.status}`);
|
58
|
+
}
|
213
59
|
|
214
|
-
|
215
|
-
server.on('request', (req, res) => onPostHandler.call(server, req, res, resolve, reject));
|
216
|
-
} else {
|
217
|
-
server.on('request', (req, res) => onGETHandler.call(server, req, res, resolve, reject));
|
218
|
-
}
|
219
|
-
});
|
60
|
+
return (await resp.json()) as User;
|
220
61
|
}
|
221
62
|
|
222
63
|
async function logout(cachePath?: string) {
|
@@ -242,8 +83,7 @@ async function login() {
|
|
242
83
|
user = await authenticateUser();
|
243
84
|
await Bun.write(CACHED_USER_FILE, JSON.stringify(user, null, 2));
|
244
85
|
} catch (err) {
|
245
|
-
console.error(
|
246
|
-
throw err;
|
86
|
+
console.error((err as NodeJS.ErrnoException).message);
|
247
87
|
}
|
248
88
|
}
|
249
89
|
|
@@ -251,16 +91,16 @@ async function login() {
|
|
251
91
|
}
|
252
92
|
|
253
93
|
/**
|
254
|
-
* Builds a
|
94
|
+
* Builds a firebase user object for a Continuous Integration (CI) user.
|
255
95
|
*
|
256
96
|
* This function generates a CI user with an email based on the UDS_TEAM_SLUG
|
257
97
|
* environment variable. If the UDS_TEAM_SLUG is not defined, it defaults to 'unknown'.
|
258
98
|
* The generated user has a predefined first name, display name, and an empty avatar.
|
259
99
|
* The analytics context includes the team and a role set to 'other'.
|
260
100
|
*
|
261
|
-
* @returns {
|
101
|
+
* @returns {user} The generated CI user object.
|
262
102
|
*/
|
263
|
-
function buildCIUser():
|
103
|
+
function buildCIUser(): User {
|
264
104
|
const team = process.env.UDS_TEAM_SLUG;
|
265
105
|
|
266
106
|
if (!team) {
|
@@ -325,14 +165,11 @@ async function getAuthenticatedUser(cliPath = DEFAULT_CLI_PATH): Promise<User |
|
|
325
165
|
export {
|
326
166
|
authenticateUser,
|
327
167
|
buildCIUser,
|
328
|
-
|
168
|
+
exec,
|
329
169
|
getAuthenticatedUser,
|
330
|
-
|
170
|
+
getGitEmail,
|
331
171
|
isYahooEmployee,
|
332
172
|
login,
|
333
|
-
type LoginProvider,
|
334
173
|
logout,
|
335
|
-
onGETHandler,
|
336
|
-
onPostHandler,
|
337
174
|
type User,
|
338
175
|
};
|
@@ -0,0 +1,243 @@
|
|
1
|
+
import { PropsWithChildren, Ref } from 'react';
|
2
|
+
import { SvgIcon, IconSize, IconVariant } from '@yahoo/uds-icons/types';
|
3
|
+
|
4
|
+
declare const alwaysPalette: {
|
5
|
+
white: string;
|
6
|
+
black: string;
|
7
|
+
transparent: string;
|
8
|
+
current: string;
|
9
|
+
};
|
10
|
+
|
11
|
+
type CorePaletteAlias = 'brand' | 'accent' | 'alert' | 'positive' | 'warning';
|
12
|
+
type BackgroundPaletteAlias = 'primary' | 'secondary';
|
13
|
+
type ForegroundPaletteAlias = 'primary' | 'secondary' | 'tertiary' | 'muted' | 'on-color';
|
14
|
+
type LinePaletteAlias = 'primary' | 'secondary' | 'tertiary' | 'muted';
|
15
|
+
type AlwaysPalette = typeof alwaysPalette;
|
16
|
+
type AlwaysPaletteAlias = keyof AlwaysPalette;
|
17
|
+
type ForegroundColor = CorePaletteAlias | ForegroundPaletteAlias | AlwaysPaletteAlias;
|
18
|
+
type LineColor = CorePaletteAlias | LinePaletteAlias | AlwaysPaletteAlias;
|
19
|
+
type BackgroundColor = CorePaletteAlias | BackgroundPaletteAlias | AlwaysPaletteAlias;
|
20
|
+
type TextVariant = 'display1' | 'display2' | 'display3' | 'title1' | 'title2' | 'title3' | 'title4' | 'headline1' | 'body1' | 'label1' | 'label2' | 'caption1' | 'caption2' | 'legal1';
|
21
|
+
type FontAlias = 'sans' | 'sans-alt' | 'serif' | 'serif-alt' | 'mono';
|
22
|
+
type FontWeightDescriptive = 'thin' | 'extralight' | 'light' | 'regular' | 'medium' | 'semibold' | 'bold' | 'extrabold' | 'black';
|
23
|
+
type TextTransform = 'none' | 'uppercase' | 'lowercase' | 'capitalize';
|
24
|
+
type TShirtSize = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
|
25
|
+
type TShirtSizeCommon = Extract<TShirtSize, 'sm' | 'md' | 'lg'>;
|
26
|
+
type AvatarSize = TShirtSizeCommon;
|
27
|
+
type SpacingAlias = '0' | 'px' | '0.5' | '1' | '1.5' | '2' | '2.5' | '3' | '3.5' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | '14' | '16' | '20' | '24' | '28' | '32' | '36' | '40' | '44' | '48' | '52' | '56' | '60' | '64' | '72' | '80' | '96';
|
28
|
+
type BorderRadius = TShirtSize;
|
29
|
+
type BorderWidth = 'none' | 'thin' | 'medium' | 'thick';
|
30
|
+
type Flex = '1' | 'auto' | 'initial' | 'none';
|
31
|
+
type FlexGrow = '0' | '1' | '2' | '3';
|
32
|
+
type FlexShrink = '0' | '1';
|
33
|
+
type FlexAlignContent = 'flex-start' | 'flex-end' | 'center' | 'stretch' | 'space-between' | 'space-around';
|
34
|
+
type FlexAlignItems = 'flex-start' | 'flex-end' | 'center' | 'stretch' | 'baseline';
|
35
|
+
type FlexAlignSelf = 'auto' | 'flex-start' | 'flex-end' | 'center' | 'stretch' | 'baseline';
|
36
|
+
type FlexDirection = 'row' | 'column' | 'row-reverse' | 'column-reverse';
|
37
|
+
type FlexWrap = 'wrap' | 'nowrap' | 'wrap-reverse';
|
38
|
+
type FlexJustifyContent = 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly';
|
39
|
+
type FlexBasis = 'min-content';
|
40
|
+
type Display = 'block' | 'inline-block' | 'inline' | 'flex' | 'inline-flex' | 'table' | 'inline-table' | 'table-caption' | 'table-cell' | 'table-column' | 'table-column-group' | 'table-footer-group' | 'table-header-group' | 'table-row-group' | 'table-row' | 'flow-root' | 'grid' | 'contents';
|
41
|
+
type Overflow = 'auto' | 'hidden' | 'clip' | 'visible' | 'scroll';
|
42
|
+
type Position = 'static' | 'fixed' | 'absolute' | 'relative' | 'sticky';
|
43
|
+
type ImageStyleProps = {
|
44
|
+
/**
|
45
|
+
* Determines how the image should be resized to fit its container.
|
46
|
+
*/
|
47
|
+
contentFit?: 'cover' | 'contain' | 'fill' | 'none' | 'scale-down';
|
48
|
+
};
|
49
|
+
interface BorderStyleProps {
|
50
|
+
/** Add a border radius to all corners of the box. */
|
51
|
+
borderRadius?: BorderRadius;
|
52
|
+
/** Add a border radius to top left corner of the box. */
|
53
|
+
borderTopStartRadius?: BorderRadius;
|
54
|
+
/** Add a border radius to top right corner of the box. */
|
55
|
+
borderTopEndRadius?: BorderRadius;
|
56
|
+
/** Add a border radius to bottom left corner of the box. */
|
57
|
+
borderBottomStartRadius?: BorderRadius;
|
58
|
+
/** Add a border radius to bottom right corner of the box. */
|
59
|
+
borderBottomEndRadius?: BorderRadius;
|
60
|
+
/** Adds a custom border color from the palette */
|
61
|
+
borderColor?: LineColor;
|
62
|
+
/** Start border color */
|
63
|
+
borderStartColor?: LineColor;
|
64
|
+
/** End border color */
|
65
|
+
borderEndColor?: LineColor;
|
66
|
+
/** Top border color */
|
67
|
+
borderTopColor?: LineColor;
|
68
|
+
/** Bottom border color */
|
69
|
+
borderBottomColor?: LineColor;
|
70
|
+
/** Shorthand property to the width of an element's border. */
|
71
|
+
borderWidth?: BorderWidth;
|
72
|
+
/** Sets the width of the top and bottom border of an element. */
|
73
|
+
borderVerticalWidth?: BorderWidth;
|
74
|
+
/** Sets the width of the start (left) and end (right) border of an element. */
|
75
|
+
borderHorizontalWidth?: BorderWidth;
|
76
|
+
/** Sets the width of the start (left) border of an element. */
|
77
|
+
borderStartWidth?: BorderWidth;
|
78
|
+
/** Sets the width of the end (right) border of an element. */
|
79
|
+
borderEndWidth?: BorderWidth;
|
80
|
+
/** Sets the width of the top border of an element. */
|
81
|
+
borderTopWidth?: BorderWidth;
|
82
|
+
/** Sets the width of the bottom border of an element. */
|
83
|
+
borderBottomWidth?: BorderWidth;
|
84
|
+
}
|
85
|
+
interface LayoutStyleProps {
|
86
|
+
/** Sets whether an element is treated as a block or inline box and the layout used for its children, such as flow layout, grid or flex. */
|
87
|
+
display?: Display;
|
88
|
+
/** Shorthand property which sets the desired behavior when content does not fit in the parent element box (overflows) in the horizontal and/or vertical direction. */
|
89
|
+
overflow?: Overflow;
|
90
|
+
/** Sets what shows when content overflows a block-level element's left and right edges. This may be nothing, a scroll bar, or the overflow content. This property may also be set by using the overflow shorthand property. */
|
91
|
+
overflowX?: Overflow;
|
92
|
+
/** sets what shows when content overflows a block-level element's top and bottom edges. This may be nothing, a scroll bar, or the overflow content. This property may also be set by using the overflow shorthand property. */
|
93
|
+
overflowY?: Overflow;
|
94
|
+
/** Sets how an element is positioned in a document. The top, right, bottom, and left properties determine the final location of positioned elements. */
|
95
|
+
position?: Position;
|
96
|
+
}
|
97
|
+
interface SpacingStyleProps {
|
98
|
+
/** Apply inner spacing on all sides. */
|
99
|
+
spacing?: SpacingAlias;
|
100
|
+
/** Apply inner spacing on the leading and trailing sides. */
|
101
|
+
spacingHorizontal?: SpacingAlias;
|
102
|
+
/** Apply inner spacing on the top and bottom sides. */
|
103
|
+
spacingVertical?: SpacingAlias;
|
104
|
+
/** Apply inner spacing on the bottom side. */
|
105
|
+
spacingBottom?: SpacingAlias;
|
106
|
+
/** Apply inner spacing on the trailing side. */
|
107
|
+
spacingEnd?: SpacingAlias;
|
108
|
+
/** Apply inner spacing on the leading side. */
|
109
|
+
spacingStart?: SpacingAlias;
|
110
|
+
/** Apply inner spacing on the top side. */
|
111
|
+
spacingTop?: SpacingAlias;
|
112
|
+
/** Apply negative outer spacing on all sides. */
|
113
|
+
offset?: SpacingAlias;
|
114
|
+
/** Apply negative outer spacing on the top and bottom sides. */
|
115
|
+
offsetVertical?: SpacingAlias;
|
116
|
+
/** Apply negative outer spacing on the leading and trailing sides. */
|
117
|
+
offsetHorizontal?: SpacingAlias;
|
118
|
+
/** Apply negative outer spacing on the bottom side. */
|
119
|
+
offsetBottom?: SpacingAlias;
|
120
|
+
/** Apply negative outer spacing on the trailing side. */
|
121
|
+
offsetEnd?: SpacingAlias;
|
122
|
+
/** Apply negative outer spacing on the leading side. */
|
123
|
+
offsetStart?: SpacingAlias;
|
124
|
+
/** Apply negative outer spacing on the top side. */
|
125
|
+
offsetTop?: SpacingAlias;
|
126
|
+
/** Control the horizontal gutters between grid and flexbox items. */
|
127
|
+
columnGap?: SpacingAlias;
|
128
|
+
/** Control the vertical gutters between grid and flexbox items. */
|
129
|
+
rowGap?: SpacingAlias;
|
130
|
+
}
|
131
|
+
interface FlexStyleProps {
|
132
|
+
/** Sets the distribution of space between and around content items along a flexbox's cross-axis or a grid's block axis. */
|
133
|
+
alignContent?: FlexAlignContent;
|
134
|
+
/** Sets the align-self value on all direct children as a group. In Flexbox, it controls the alignment of items on the Cross Axis. In Grid Layout, it controls the alignment of items on the Block Axis within their grid area. */
|
135
|
+
alignItems?: FlexAlignItems;
|
136
|
+
/** Overrides a grid or flex item's align-items value. In Grid, it aligns the item inside the grid area. In Flexbox, it aligns the item on the cross axis. */
|
137
|
+
alignSelf?: FlexAlignSelf;
|
138
|
+
/** Sets how a flex item will grow or shrink to fit the space available in its flex container. */
|
139
|
+
flex?: Flex;
|
140
|
+
/** Sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed). */
|
141
|
+
flexDirection?: FlexDirection;
|
142
|
+
/** Sets the flex grow factor, which specifies how much of the flex container's remaining space should be assigned to the flex item's main size. */
|
143
|
+
flexGrow?: FlexGrow;
|
144
|
+
/** Sets the flex shrink factor of a flex item. If the size of all flex items is larger than the flex container, items shrink to fit according to flex-shrink. */
|
145
|
+
flexShrink?: FlexShrink;
|
146
|
+
/** Sets whether flex items are forced onto one line or can wrap onto multiple lines. If wrapping is allowed, it sets the direction that lines are stacked. */
|
147
|
+
flexWrap?: FlexWrap;
|
148
|
+
/** Defines how the browser distributes space between and around content items along the main-axis of a flex container, and the inline axis of a grid container. */
|
149
|
+
justifyContent?: FlexJustifyContent;
|
150
|
+
/** Sets the initial main size of a flex item. It sets the size of the content box unless otherwise set with box-sizing. https://developer.mozilla.org/en-US/docs/Web/CSS/flex-basis */
|
151
|
+
flexBasis?: FlexBasis;
|
152
|
+
}
|
153
|
+
interface TextStyleProps {
|
154
|
+
/** Color of a Text or Icon element */
|
155
|
+
color?: ForegroundColor;
|
156
|
+
/** Color of placeholder text */
|
157
|
+
placeholderColor?: ForegroundColor;
|
158
|
+
/** Font family for the text */
|
159
|
+
fontFamily?: TextVariant | FontAlias;
|
160
|
+
/** Font size of the text */
|
161
|
+
fontSize?: TextVariant;
|
162
|
+
/** Font weight of the text */
|
163
|
+
fontWeight?: TextVariant | FontWeightDescriptive;
|
164
|
+
/** Line height of the text */
|
165
|
+
lineHeight?: TextVariant;
|
166
|
+
/** Text alignment of the text */
|
167
|
+
textAlign?: 'center' | 'justify' | 'start' | 'end';
|
168
|
+
/** Sets the text transform for the text */
|
169
|
+
textTransform?: TextVariant | TextTransform;
|
170
|
+
}
|
171
|
+
interface BackgroundStyleProps {
|
172
|
+
/** Sets the background color. */
|
173
|
+
backgroundColor?: BackgroundColor;
|
174
|
+
}
|
175
|
+
interface UniversalBoxProps extends PropsWithChildren, BackgroundStyleProps, BorderStyleProps, FlexStyleProps, LayoutStyleProps, SpacingStyleProps {
|
176
|
+
/**
|
177
|
+
* When asChild is set to true, the component's child will be cloned and passed
|
178
|
+
* the props and behavior required to make it functional.
|
179
|
+
*/
|
180
|
+
asChild?: boolean;
|
181
|
+
}
|
182
|
+
interface UniversalStackProps extends Omit<UniversalBoxProps, 'flexDirection'> {
|
183
|
+
gap?: SpacingAlias;
|
184
|
+
}
|
185
|
+
interface UniversalTextProps extends PropsWithChildren, TextStyleProps, UniversalBoxProps {
|
186
|
+
/** Style of text. */
|
187
|
+
variant?: TextVariant;
|
188
|
+
/** Color of the text. */
|
189
|
+
color?: ForegroundColor;
|
190
|
+
}
|
191
|
+
interface UniversalIconProps {
|
192
|
+
/** Icon to render from the icons package. */
|
193
|
+
name: SvgIcon;
|
194
|
+
/** Size of the icon. */
|
195
|
+
size?: IconSize;
|
196
|
+
/** Variant for icon. Either fill or outline. */
|
197
|
+
variant?: IconVariant;
|
198
|
+
/** Color of the icon. */
|
199
|
+
color?: ForegroundColor;
|
200
|
+
}
|
201
|
+
interface UniversalImageProps extends Omit<UniversalBoxProps, 'width' | 'height'>, ImageStyleProps {
|
202
|
+
/** The source URL of the image. */
|
203
|
+
src: string;
|
204
|
+
/** Provides fallback (alternate) text to display when the image specified by the Image element is not loaded. */
|
205
|
+
alt?: string;
|
206
|
+
/** Width of the image in px. */
|
207
|
+
width?: number;
|
208
|
+
/** Height of the image in pixel. */
|
209
|
+
height?: number;
|
210
|
+
}
|
211
|
+
interface UniversalAvatarProps extends UniversalImageProps {
|
212
|
+
/** The size of the Avatar. */
|
213
|
+
size?: AvatarSize;
|
214
|
+
/** The shape of the Avatar. */
|
215
|
+
shape?: BorderRadius;
|
216
|
+
}
|
217
|
+
interface UniversalTextInputProps {
|
218
|
+
disabled?: boolean;
|
219
|
+
required?: boolean;
|
220
|
+
backgroundColor?: BackgroundColor;
|
221
|
+
borderColor?: LineColor;
|
222
|
+
borderWidth?: BorderWidth;
|
223
|
+
borderRadius?: BorderRadius;
|
224
|
+
color?: ForegroundColor;
|
225
|
+
fontSize?: TextVariant;
|
226
|
+
placeholderColor?: ForegroundColor;
|
227
|
+
spacingVertical?: SpacingAlias;
|
228
|
+
spacingHorizontal?: SpacingAlias;
|
229
|
+
}
|
230
|
+
|
231
|
+
type DivProps = React.HTMLAttributes<HTMLDivElement>;
|
232
|
+
interface BoxProps extends UniversalBoxProps, DivProps {
|
233
|
+
}
|
234
|
+
|
235
|
+
type TextElementTagName = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'p' | 'strong' | 'span' | 'label' | 'li';
|
236
|
+
type TextProps<TagName extends TextElementTagName = TextElementTagName> = {
|
237
|
+
/** Ref passed to the inner container. */
|
238
|
+
ref?: Ref<HTMLElement>;
|
239
|
+
/** Changes the HTML tag used to render text. Uses the most appropriate semantic tag based on the text style variant. */
|
240
|
+
as?: TagName;
|
241
|
+
} & JSX.IntrinsicElements[TagName] & UniversalTextProps;
|
242
|
+
|
243
|
+
export type { BoxProps as B, DivProps as D, Overflow as O, TextProps as T, UniversalAvatarProps as U, UniversalTextProps as a, UniversalIconProps as b, UniversalStackProps as c, UniversalTextInputProps as d };
|