@yahoo/uds 1.3.4 → 1.4.1
Sign up to get free protection for your applications and to get access to all the features.
- package/cli/bin/uds-darwin-arm64-baseline +0 -0
- package/cli/bin/uds-linux-x64-baseline +0 -0
- package/cli/preload.ts +1 -0
- package/cli/utils/auth.test.ts +85 -3
- package/cli/utils/auth.ts +109 -33
- package/dist/{chunk-WASU57GH.cjs → chunk-E6AO57LK.cjs} +1 -1
- package/dist/chunk-VADOXPF5.js +3 -0
- package/dist/client/index.cjs +1 -1
- package/dist/client/index.js +3 -3
- package/dist/experimental/index.cjs +1 -1
- package/dist/experimental/index.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +2 -2
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/tailwind/purger.cjs +1 -1
- package/dist/tailwind/purger.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-6GVKLLYU.js +0 -3
Binary file
|
Binary file
|
package/cli/preload.ts
CHANGED
@@ -51,6 +51,7 @@ mock.module('googleapis', () => ({
|
|
51
51
|
OAuth2: mock(() => {}).mockImplementation(() => ({
|
52
52
|
getToken: () => Promise.resolve({ tokens: 'test' }),
|
53
53
|
setCredentials: mock(() => {}),
|
54
|
+
generateAuthUrl: mock(() => 'https://accounts.google.com/o/oauth2/v2/auth'),
|
54
55
|
})),
|
55
56
|
},
|
56
57
|
oauth2: () => ({
|
package/cli/utils/auth.test.ts
CHANGED
@@ -6,11 +6,15 @@ import http from 'http';
|
|
6
6
|
import httpMocks from 'node-mocks-http';
|
7
7
|
|
8
8
|
import {
|
9
|
+
configuratorUrlOrigin,
|
9
10
|
getAuthenticatedUser,
|
11
|
+
getAuthorizeUrl,
|
10
12
|
isYahooEmployee,
|
11
13
|
login,
|
14
|
+
type LoginProvider,
|
12
15
|
logout,
|
13
|
-
|
16
|
+
onGETHandler,
|
17
|
+
onPostHandler,
|
14
18
|
type User,
|
15
19
|
} from './auth';
|
16
20
|
|
@@ -29,6 +33,22 @@ describe('auth', () => {
|
|
29
33
|
});
|
30
34
|
});
|
31
35
|
|
36
|
+
describe('getAuthorizeUrl', () => {
|
37
|
+
it('uses configurator by default', () => {
|
38
|
+
expect(getAuthorizeUrl()).toEqual(
|
39
|
+
`${configuratorUrlOrigin}/login?continue=http://localhost:3000/oauth2callback`,
|
40
|
+
);
|
41
|
+
});
|
42
|
+
|
43
|
+
it('generates the google auth url for other providers', () => {
|
44
|
+
(['google', 'firebase'] as LoginProvider[]).forEach((provider) => {
|
45
|
+
expect(getAuthorizeUrl(provider)).toStartWith(
|
46
|
+
`https://accounts.google.com/o/oauth2/v2/auth`,
|
47
|
+
);
|
48
|
+
});
|
49
|
+
});
|
50
|
+
});
|
51
|
+
|
32
52
|
describe('getAuthenticatedUser', () => {
|
33
53
|
it('does not return a user on first use', async () => {
|
34
54
|
expect(await getAuthenticatedUser(__dirname)).toBeUndefined();
|
@@ -72,7 +92,7 @@ describe('auth', () => {
|
|
72
92
|
|
73
93
|
const request = httpMocks.createRequest({ method: 'GET', url: '/oauth2callback' });
|
74
94
|
const response = httpMocks.createResponse();
|
75
|
-
await
|
95
|
+
await onGETHandler.bind(mockServer)(request, response, resolve, reject);
|
76
96
|
expect(response._getData()).toInclude('no code parameter');
|
77
97
|
});
|
78
98
|
|
@@ -82,13 +102,75 @@ describe('auth', () => {
|
|
82
102
|
|
83
103
|
const request = httpMocks.createRequest({ method: 'GET', url: '/oauth2callback?code=123' });
|
84
104
|
const response = httpMocks.createResponse();
|
85
|
-
await
|
105
|
+
await onGETHandler.bind(mockServer)(request, response, resolve, reject);
|
86
106
|
expect(response._getData()).toInclude('Authentication successful! Please close this window.');
|
87
107
|
expect(resolve).toHaveBeenCalledWith(mockUser);
|
88
108
|
expect(reject).not.toHaveBeenCalled();
|
89
109
|
});
|
90
110
|
});
|
91
111
|
|
112
|
+
describe('onPostHandler', () => {
|
113
|
+
const mockServer = Object.assign(Object.create(http.Server.prototype), {
|
114
|
+
listen: mock(),
|
115
|
+
on: mock(),
|
116
|
+
close: mock(),
|
117
|
+
});
|
118
|
+
|
119
|
+
it('ignores non-POST requests', () => {
|
120
|
+
const req = httpMocks.createRequest({ method: 'GET' });
|
121
|
+
const resp = httpMocks.createResponse();
|
122
|
+
onPostHandler.bind(mockServer)(req, resp, mock(), mock());
|
123
|
+
expect(resp._getStatusCode()).toBe(405);
|
124
|
+
expect(resp._getData()).toInclude('Method Not Allowed');
|
125
|
+
});
|
126
|
+
|
127
|
+
it('rejects requests from 3rd party origins', () => {
|
128
|
+
const req = httpMocks.createRequest({
|
129
|
+
method: 'POST',
|
130
|
+
headers: { origin: 'https://bad.com' },
|
131
|
+
});
|
132
|
+
const resp = httpMocks.createResponse();
|
133
|
+
const reject = mock();
|
134
|
+
onPostHandler.bind(mockServer)(req, resp, mock(), reject);
|
135
|
+
expect(reject).toHaveBeenCalledWith('Request origin not allowed.');
|
136
|
+
});
|
137
|
+
|
138
|
+
it('sets CORS headers', () => {
|
139
|
+
const req = httpMocks.createRequest({
|
140
|
+
method: 'POST',
|
141
|
+
headers: { origin: configuratorUrlOrigin },
|
142
|
+
// body: JSON.stringify({ email: ''}),
|
143
|
+
});
|
144
|
+
const resp = httpMocks.createResponse();
|
145
|
+
const resolve = mock();
|
146
|
+
const reject = mock();
|
147
|
+
onPostHandler.bind(mockServer)(req, resp, resolve, reject);
|
148
|
+
expect(resp.getHeaders()).toEqual({
|
149
|
+
'access-control-allow-origin': configuratorUrlOrigin,
|
150
|
+
'access-control-allow-methods': 'OPTIONS, GET, POST',
|
151
|
+
});
|
152
|
+
});
|
153
|
+
|
154
|
+
it('sends a user obj', async () => {
|
155
|
+
const mockUser = { email: 'foo@yahooinc.com', displayName: 'Foo' };
|
156
|
+
|
157
|
+
const req = httpMocks.createRequest({
|
158
|
+
method: 'POST',
|
159
|
+
headers: { origin: configuratorUrlOrigin },
|
160
|
+
});
|
161
|
+
const resp = httpMocks.createResponse({
|
162
|
+
eventEmitter: (await import('events')).EventEmitter,
|
163
|
+
});
|
164
|
+
const resolve = mock();
|
165
|
+
const reject = mock();
|
166
|
+
onPostHandler.bind(mockServer)(req, resp, resolve, reject);
|
167
|
+
req.send(mockUser);
|
168
|
+
expect(resp._getData()).toInclude('Authentication successful! Please close this window.');
|
169
|
+
expect(reject).not.toHaveBeenCalled();
|
170
|
+
expect(resolve).toHaveBeenCalledWith(mockUser);
|
171
|
+
});
|
172
|
+
});
|
173
|
+
|
92
174
|
describe('logout', () => {
|
93
175
|
it('removes the user cache', async () => {
|
94
176
|
await writeCache(filepath, { email: 'user@yahooinc.com', name: 'User' });
|
package/cli/utils/auth.ts
CHANGED
@@ -17,15 +17,23 @@ import open from 'open';
|
|
17
17
|
|
18
18
|
import clientSecrets from './client_secrets.json';
|
19
19
|
|
20
|
+
type User = oauth2_v2.Schema$Userinfo | FirebaseUser;
|
21
|
+
type LoginProvider = 'google' | 'firebase' | 'configurator';
|
22
|
+
|
23
|
+
const LOGIN_PROVIDER: LoginProvider =
|
24
|
+
(process.env.LOGIN_PROVIDER as LoginProvider) ?? 'configurator';
|
25
|
+
|
20
26
|
const REDIRECT_URL = clientSecrets.web.redirect_uris[0];
|
21
|
-
const { port: PORT, origin:
|
27
|
+
const { port: PORT, origin: SERVER_ORIGIN } = new URL(REDIRECT_URL);
|
28
|
+
|
29
|
+
const configuratorUrlOrigin =
|
30
|
+
process.env.NODE_ENV === 'production' ? 'https://config.uds.build' : 'http://localhost:4001';
|
22
31
|
|
23
32
|
const CACHE_FILEPATH = '.uds/user.json';
|
24
33
|
const DEFAULT_CLI_PATH = path.resolve(import.meta.dir, '..');
|
25
34
|
const CACHED_USER_FILE = path.resolve(DEFAULT_CLI_PATH, CACHE_FILEPATH);
|
26
35
|
|
27
36
|
const isEmulator = process.env.EMULATOR || process.env.NEXT_PUBLIC_EMULATOR;
|
28
|
-
const loginProvider = process.env.LOGIN_PROVIDER ?? 'firebase';
|
29
37
|
|
30
38
|
// TODO: consolidate with the firebase config and setup in database/firebase.ts
|
31
39
|
const firebaseConfig = !isEmulator
|
@@ -50,13 +58,72 @@ const oauth2Client = new google.auth.OAuth2(
|
|
50
58
|
REDIRECT_URL,
|
51
59
|
);
|
52
60
|
|
53
|
-
type User = oauth2_v2.Schema$Userinfo | FirebaseUser;
|
54
|
-
|
55
61
|
function isYahooEmployee(user?: User) {
|
56
62
|
return user?.email?.endsWith('@yahooinc.com');
|
57
63
|
}
|
58
64
|
|
59
|
-
|
65
|
+
function getAuthorizeUrl(loginProvider = LOGIN_PROVIDER) {
|
66
|
+
if (loginProvider === 'configurator') {
|
67
|
+
return `${configuratorUrlOrigin}/login?continue=${REDIRECT_URL}`;
|
68
|
+
}
|
69
|
+
|
70
|
+
return oauth2Client.generateAuthUrl({
|
71
|
+
access_type: 'offline',
|
72
|
+
scope: [
|
73
|
+
'https://www.googleapis.com/auth/userinfo.profile',
|
74
|
+
'https://www.googleapis.com/auth/userinfo.email',
|
75
|
+
].join(' '),
|
76
|
+
hd: 'yahooinc.com',
|
77
|
+
include_granted_scopes: true,
|
78
|
+
});
|
79
|
+
}
|
80
|
+
|
81
|
+
function onPostHandler(
|
82
|
+
this: http.Server,
|
83
|
+
req: http.IncomingMessage,
|
84
|
+
res: http.ServerResponse,
|
85
|
+
resolve: (user: User) => void,
|
86
|
+
reject: (reason?: unknown) => void,
|
87
|
+
) {
|
88
|
+
if (req.method !== 'POST') {
|
89
|
+
res.writeHead(405, { Allow: 'POST' }); // Set the 405 status and Allow header
|
90
|
+
res.end('Method Not Allowed');
|
91
|
+
reject('Method Not Allowed');
|
92
|
+
return;
|
93
|
+
}
|
94
|
+
|
95
|
+
if (req.headers.origin !== configuratorUrlOrigin) {
|
96
|
+
reject(`Request origin not allowed.`);
|
97
|
+
return;
|
98
|
+
}
|
99
|
+
|
100
|
+
res.setHeader('Access-Control-Allow-Origin', configuratorUrlOrigin);
|
101
|
+
res.setHeader('Access-Control-Allow-Methods', 'OPTIONS, GET, POST');
|
102
|
+
|
103
|
+
let data = '';
|
104
|
+
|
105
|
+
req.on('data', (chunk) => {
|
106
|
+
data += chunk.toString();
|
107
|
+
});
|
108
|
+
|
109
|
+
req.on('error', (err: NodeJS.ErrnoException) => {
|
110
|
+
reject(err);
|
111
|
+
});
|
112
|
+
|
113
|
+
req.on('end', () => {
|
114
|
+
try {
|
115
|
+
const user: FirebaseUser = JSON.parse(data);
|
116
|
+
res.end('Authentication successful! Please close this window.');
|
117
|
+
resolve(user);
|
118
|
+
} catch (err) {
|
119
|
+
reject(err);
|
120
|
+
} finally {
|
121
|
+
this.close();
|
122
|
+
}
|
123
|
+
});
|
124
|
+
}
|
125
|
+
|
126
|
+
async function onGETHandler(
|
60
127
|
this: http.Server,
|
61
128
|
req: http.IncomingMessage,
|
62
129
|
res: http.ServerResponse,
|
@@ -64,7 +131,7 @@ async function onRequestHandler(
|
|
64
131
|
reject: (reason?: unknown) => void,
|
65
132
|
) {
|
66
133
|
try {
|
67
|
-
const code = new URL(req.url || '',
|
134
|
+
const code = new URL(req.url || '', SERVER_ORIGIN).searchParams.get('code');
|
68
135
|
if (!code) {
|
69
136
|
res.end('There was no code parameter on the url.');
|
70
137
|
this.close();
|
@@ -72,7 +139,6 @@ async function onRequestHandler(
|
|
72
139
|
}
|
73
140
|
|
74
141
|
res.end('Authentication successful! Please close this window.');
|
75
|
-
|
76
142
|
this.close();
|
77
143
|
|
78
144
|
const { tokens } = await oauth2Client.getToken(code);
|
@@ -80,7 +146,7 @@ async function onRequestHandler(
|
|
80
146
|
|
81
147
|
let user: User;
|
82
148
|
|
83
|
-
if (
|
149
|
+
if (LOGIN_PROVIDER === 'firebase') {
|
84
150
|
// Build Firebase credential using the Google ID token.
|
85
151
|
const credential = GoogleAuthProvider.credential(tokens.id_token);
|
86
152
|
user = (await signInWithCredential(auth, credential)).user;
|
@@ -102,34 +168,39 @@ async function onRequestHandler(
|
|
102
168
|
*/
|
103
169
|
async function authenticateUser(): Promise<User> {
|
104
170
|
return new Promise((resolve, reject) => {
|
105
|
-
const authorizeUrl = oauth2Client.generateAuthUrl({
|
106
|
-
access_type: 'offline',
|
107
|
-
scope: [
|
108
|
-
'https://www.googleapis.com/auth/userinfo.profile',
|
109
|
-
'https://www.googleapis.com/auth/userinfo.email',
|
110
|
-
].join(' '),
|
111
|
-
hd: 'yahooinc.com',
|
112
|
-
include_granted_scopes: true,
|
113
|
-
});
|
114
|
-
|
115
171
|
// TODO: If port (3000) is already in use, this will fail.
|
116
172
|
// Setup https://www.npmjs.com/package/find-free-ports, but that won't
|
117
173
|
// play well with the pre-configured redirect_uris in the Google Cloud Console.
|
118
|
-
const server = http
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
})
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
}
|
174
|
+
const server = http.createServer();
|
175
|
+
|
176
|
+
server.listen(PORT, async () => {
|
177
|
+
const authorizeUrl = getAuthorizeUrl();
|
178
|
+
|
179
|
+
print(`Please visit the following URL if it didn't open automatically:\n${authorizeUrl}`);
|
180
|
+
|
181
|
+
const childProcess = await open(authorizeUrl, { wait: false });
|
182
|
+
childProcess.unref();
|
183
|
+
|
184
|
+
process.on('SIGINT', () => {
|
185
|
+
server.close();
|
186
|
+
reject('Received SIGINT.');
|
132
187
|
});
|
188
|
+
});
|
189
|
+
|
190
|
+
server.on('error', (err: NodeJS.ErrnoException) => {
|
191
|
+
if (err.code && err.code.includes('EADDRINUSE')) {
|
192
|
+
print(
|
193
|
+
red(`🚨 Port ${PORT} already in use. Cannot start local server to handle OAuth flow.`),
|
194
|
+
);
|
195
|
+
server.close();
|
196
|
+
}
|
197
|
+
});
|
198
|
+
|
199
|
+
if (LOGIN_PROVIDER === 'configurator') {
|
200
|
+
server.on('request', (req, res) => onPostHandler.call(server, req, res, resolve, reject));
|
201
|
+
} else {
|
202
|
+
server.on('request', (req, res) => onGETHandler.call(server, req, res, resolve, reject));
|
203
|
+
}
|
133
204
|
});
|
134
205
|
}
|
135
206
|
|
@@ -157,6 +228,7 @@ async function login() {
|
|
157
228
|
await Bun.write(CACHED_USER_FILE, JSON.stringify(user, null, 2));
|
158
229
|
} catch (err) {
|
159
230
|
console.error('Error:', err);
|
231
|
+
throw err;
|
160
232
|
}
|
161
233
|
}
|
162
234
|
|
@@ -193,10 +265,14 @@ async function getAuthenticatedUser(cliPath = DEFAULT_CLI_PATH): Promise<User |
|
|
193
265
|
|
194
266
|
export {
|
195
267
|
authenticateUser,
|
268
|
+
configuratorUrlOrigin,
|
196
269
|
getAuthenticatedUser,
|
270
|
+
getAuthorizeUrl,
|
197
271
|
isYahooEmployee,
|
198
272
|
login,
|
273
|
+
type LoginProvider,
|
199
274
|
logout,
|
200
|
-
|
275
|
+
onGETHandler,
|
276
|
+
onPostHandler,
|
201
277
|
type User,
|
202
278
|
};
|
@@ -1 +1 @@
|
|
1
|
-
"use strict";var e=require("./chunk-WLOEKYUI.cjs"),r=require("./chunk-LNFRMD6G.cjs"),t=require("@yahoo/uds/fixtures"),n=require("clsx"),s=require("imurmurhash"),o=require("tailwind-merge"),l=require("react"),i=require("react/jsx-runtime");function a(e){return e&&e.__esModule?e:{default:e}}var c=a(n),u=a(s),d="undefined"!=typeof process,f={useGetStylesCache:!!d&&"true"===process.env.NEXT_PUBLIC_UDS_FEATURE_USE_STYLE_CACHE,useCLIAuth:!!d&&"true"===process.env.UDS_FEATURE_ENABLE_CLI_AUTH},h=()=>f;function p(e){return"boolean"==typeof e?`${e}`:0===e?"0":e}function m(e){const r=Object.create(null),t=Object.keys(e);for(let n=0,s=t.length;n<s;n++){const s=t[n];void 0!==e[s]&&(r[s]=e[s])}return r}var x=o.extendTailwindMerge({extend:{theme:{borderColor:t.lineColors,borderWidth:t.borderWidths,borderRadius:t.borderRadii}},override:{classGroups:{"text-color":[{text:[...t.foregroundColors,...t.spectrumColors]}],"bg-color":[{bg:t.backgroundColors}],"font-family":[{font:["icons",...t.textVariants]}],leading:[{leading:t.textVariants}]},conflictingClassGroups:{}}}),g=(...e)=>{const r=c.default(e);return x(r)},y=e=>r=>{if(!e?.variants)return g(e?.base,r?.className);const{variants:t,defaultVariants:n}=e,s=Object.keys(t).map((e=>{const s=r?.[e],o=n?.[e],l=p(s)||p(o);return t[e][l]})),o={...n,...r&&m(r)},l=e?.compoundVariants?.reduce(((e,{className:r,...t})=>Object.entries(t).every((([e,r])=>o[e]===r))?g(e,r):e),"");return g(e?.base,s,l,r?.className)},v=y({variants:r.variants}),C=new Map,b=e=>{const{useGetStylesCache:r}=h();if(r){const r=function(e){const r=Object.create(null),t=Object.keys(e).sort();for(let n=0,s=t.length;n<s;n++){const s=t[n];r[s]=e[s]}return r}(m(e)),t=(new u.default).hash(JSON.stringify(r)).result();if(C.has(t))return C.get(t);const n=v(r);return C.set(t,n),n}return v(e)},E=l.forwardRef((function({name:r,size:t="md",variant:n="outline",color:s="primary",className:o,...l},a){const c=b({color:s,className:o}),u=e.normalIconSizes[t];return i.jsx("svg",{ref:a,xmlns:"http://www.w3.org/2000/svg",width:u,height:u,viewBox:`0 0 ${u} ${u}`,"aria-hidden":"true",focusable:"false",className:c,...l,children:i.jsx(r,{size:t,variant:n})})}));function j(...e){return r=>e.forEach((e=>function(e,r){"function"==typeof e?e(r):null!=e&&(e.current=r)}(e,r)))}exports.Icon=E,exports.createSlot=function(){const e=l.forwardRef(((e,t)=>{const{children:s,...o}=e,a=l.Children.toArray(s),c=a.find(n);if(c){const e=c.props.children,n=a.map((r=>r===c?l.Children.count(e)>1?l.Children.only(null):l.isValidElement(e)?e.props.children:null:r));return i.jsx(r,{...o,ref:t,children:l.isValidElement(e)?l.cloneElement(e,void 0,n):null})}return i.jsx(r,{...o,ref:t,children:s})}));e.displayName="Slot";const r=l.forwardRef(((e,r)=>{const{children:t,...n}=e;return l.isValidElement(t)?l.cloneElement(t,{...s(n,t.props),ref:r?j(r,t.ref):t.ref}):l.Children.count(t)>1?l.Children.only(null):null}));r.displayName="SlotClone";const t=({children:e})=>e;function n(e){return l.isValidElement(e)&&e.type===t}function s(e,r){const t={...r};for(const n in r){const s=e[n],o=r[n];/^on[A-Z]/.test(n)?s&&o?t[n]=(...e)=>{o(...e),s(...e)}:s&&(t[n]=s):"style"===n&&(t[n]={...s,...o})}return{...e,...t}}return e},exports.cva=y,exports.cx=g,exports.getFeatureFlags=h,exports.getStyles=b,exports.updateFeatureFlags=e=>f={...f,...e};
|
1
|
+
"use strict";var e=require("./chunk-WLOEKYUI.cjs"),r=require("./chunk-LNFRMD6G.cjs"),t=require("@yahoo/uds/fixtures"),n=require("clsx"),s=require("imurmurhash"),o=require("tailwind-merge"),l=require("react"),i=require("react/jsx-runtime");function a(e){return e&&e.__esModule?e:{default:e}}var c=a(n),u=a(s),d="undefined"!=typeof process,f={useGetStylesCache:!!d&&"true"===process.env.NEXT_PUBLIC_UDS_FEATURE_USE_STYLE_CACHE,useCLIAuth:!!d&&"true"===process.env.UDS_FEATURE_ENABLE_CLI_AUTH},h=()=>f;function p(e){return"boolean"==typeof e?`${e}`:0===e?"0":e}function m(e){const r=Object.create(null),t=Object.keys(e);for(let n=0,s=t.length;n<s;n++){const s=t[n];void 0!==e[s]&&(r[s]=e[s])}return r}var x=o.extendTailwindMerge({extend:{theme:{borderColor:t.lineColors,borderWidth:t.borderWidths,borderRadius:t.borderRadii}},override:{classGroups:{"text-color":[{text:[...t.foregroundColors,...t.spectrumColors]}],"bg-color":[{bg:t.backgroundColors}],"font-family":[{font:["icons",...t.textVariants]}],leading:[{leading:t.textVariants}]},conflictingClassGroups:{}}}),g=(...e)=>{const r=c.default(e);return x(r)},y=e=>r=>{if(!e?.variants)return g(e?.base,r?.className);const{variants:t,defaultVariants:n}=e,s=Object.keys(t).map((e=>{const s=r?.[e],o=n?.[e],l=p(s)||p(o);return t[e][l]})),o={...n,...r&&m(r)},l=e?.compoundVariants?.reduce(((e,{className:r,...t})=>Object.entries(t).every((([e,r])=>o[e]===r))?g(e,r):e),"");return g(e?.base,s,l,r?.className)},v=y({variants:r.variants}),C=new Map,b=e=>{const{useGetStylesCache:r}=h();if(r){const r=function(e){const r=Object.create(null),t=Object.keys(e).sort();for(let n=0,s=t.length;n<s;n++){const s=t[n];r[s]=e[s]}return r}(m(e)),t=(new u.default).hash(JSON.stringify(r)).result();if(C.has(t))return C.get(t);const n=v(r);return C.set(t,n),n}return v(e)},E=l.forwardRef((function({name:r,size:t="md",variant:n="outline",color:s="primary",className:o,...l},a){const c=b({color:s,flex:"none",className:o}),u=e.normalIconSizes[t];return i.jsx("svg",{ref:a,xmlns:"http://www.w3.org/2000/svg",width:u,height:u,viewBox:`0 0 ${u} ${u}`,"aria-hidden":"true",focusable:"false",className:c,...l,children:i.jsx(r,{size:t,variant:n})})}));function j(...e){return r=>e.forEach((e=>function(e,r){"function"==typeof e?e(r):null!=e&&(e.current=r)}(e,r)))}exports.Icon=E,exports.createSlot=function(){const e=l.forwardRef(((e,t)=>{const{children:s,...o}=e,a=l.Children.toArray(s),c=a.find(n);if(c){const e=c.props.children,n=a.map((r=>r===c?l.Children.count(e)>1?l.Children.only(null):l.isValidElement(e)?e.props.children:null:r));return i.jsx(r,{...o,ref:t,children:l.isValidElement(e)?l.cloneElement(e,void 0,n):null})}return i.jsx(r,{...o,ref:t,children:s})}));e.displayName="Slot";const r=l.forwardRef(((e,r)=>{const{children:t,...n}=e;return l.isValidElement(t)?l.cloneElement(t,{...s(n,t.props),ref:r?j(r,t.ref):t.ref}):l.Children.count(t)>1?l.Children.only(null):null}));r.displayName="SlotClone";const t=({children:e})=>e;function n(e){return l.isValidElement(e)&&e.type===t}function s(e,r){const t={...r};for(const n in r){const s=e[n],o=r[n];/^on[A-Z]/.test(n)?s&&o?t[n]=(...e)=>{o(...e),s(...e)}:s&&(t[n]=s):"style"===n&&(t[n]={...s,...o})}return{...e,...t}}return e},exports.cva=y,exports.cx=g,exports.getFeatureFlags=h,exports.getStyles=b,exports.updateFeatureFlags=e=>f={...f,...e};
|
@@ -0,0 +1,3 @@
|
|
1
|
+
import{normalIconSizes as e}from"./chunk-YRYDHL65.js";import{variants as r}from"./chunk-RGE634O5.js";import{lineColors as t,borderWidths as n,borderRadii as o,foregroundColors as s,spectrumColors as c,backgroundColors as i,textVariants as l}from"@yahoo/uds/fixtures";import a from"clsx";import u from"imurmurhash";import{extendTailwindMerge as f}from"tailwind-merge";import{forwardRef as m,Children as d,isValidElement as p,cloneElement as h}from"react";import{jsx as y}from"react/jsx-runtime";
|
2
|
+
/*! © 2024 Yahoo, Inc. UDS v0.0.0-development */
|
3
|
+
var v="undefined"!=typeof process,b={useGetStylesCache:!!v&&"true"===process.env.NEXT_PUBLIC_UDS_FEATURE_USE_STYLE_CACHE,useCLIAuth:!!v&&"true"===process.env.UDS_FEATURE_ENABLE_CLI_AUTH},g=e=>b={...b,...e},E=()=>b;function N(e){return"boolean"==typeof e?`${e}`:0===e?"0":e}function x(e){const r=Object.create(null),t=Object.keys(e);for(let n=0,o=t.length;n<o;n++){const o=t[n];void 0!==e[o]&&(r[o]=e[o])}return r}var C=f({extend:{theme:{borderColor:t,borderWidth:n,borderRadius:o}},override:{classGroups:{"text-color":[{text:[...s,...c]}],"bg-color":[{bg:i}],"font-family":[{font:["icons",...l]}],leading:[{leading:l}]},conflictingClassGroups:{}}}),_=(...e)=>{const r=a(e);return C(r)},j=e=>r=>{if(!e?.variants)return _(e?.base,r?.className);const{variants:t,defaultVariants:n}=e,o=Object.keys(t).map((e=>{const o=r?.[e],s=n?.[e],c=N(o)||N(s);return t[e][c]})),s={...n,...r&&x(r)},c=e?.compoundVariants?.reduce(((e,{className:r,...t})=>Object.entries(t).every((([e,r])=>s[e]===r))?_(e,r):e),"");return _(e?.base,o,c,r?.className)},w=j({variants:r}),S=new Map,A=e=>{const{useGetStylesCache:r}=E();if(r){const r=function(e){const r=Object.create(null),t=Object.keys(e).sort();for(let n=0,o=t.length;n<o;n++){const o=t[n];r[o]=e[o]}return r}(x(e)),t=(new u).hash(JSON.stringify(r)).result();if(S.has(t))return S.get(t);const n=w(r);return S.set(t,n),n}return w(e)},O=m((function({name:r,size:t="md",variant:n="outline",color:o="primary",className:s,...c},i){const l=A({color:o,flex:"none",className:s}),a=e[t];return y("svg",{ref:i,xmlns:"http://www.w3.org/2000/svg",width:a,height:a,viewBox:`0 0 ${a} ${a}`,"aria-hidden":"true",focusable:"false",className:l,...c,children:y(r,{size:t,variant:n})})}));function U(...e){return r=>e.forEach((e=>function(e,r){"function"==typeof e?e(r):null!=e&&(e.current=r)}(e,r)))}function L(){const e=m(((e,t)=>{const{children:o,...s}=e,c=d.toArray(o),i=c.find(n);if(i){const e=i.props.children,n=c.map((r=>r===i?d.count(e)>1?d.only(null):p(e)?e.props.children:null:r));return y(r,{...s,ref:t,children:p(e)?h(e,void 0,n):null})}return y(r,{...s,ref:t,children:o})}));e.displayName="Slot";const r=m(((e,r)=>{const{children:t,...n}=e;return p(t)?h(t,{...o(n,t.props),ref:r?U(r,t.ref):t.ref}):d.count(t)>1?d.only(null):null}));r.displayName="SlotClone";const t=({children:e})=>e;function n(e){return p(e)&&e.type===t}function o(e,r){const t={...r};for(const n in r){const o=e[n],s=r[n];/^on[A-Z]/.test(n)?o&&s?t[n]=(...e)=>{s(...e),o(...e)}:o&&(t[n]=o):"style"===n&&(t[n]={...o,...s})}return{...e,...t}}return e}export{O as Icon,L as createSlot,j as cva,_ as cx,E as getFeatureFlags,A as getStyles,g as updateFeatureFlags};
|
package/dist/client/index.cjs
CHANGED
@@ -1,4 +1,4 @@
|
|
1
1
|
"use client";
|
2
|
-
"use strict";var e=require("../chunk-
|
2
|
+
"use strict";var e=require("../chunk-E6AO57LK.cjs"),t=require("../chunk-PECN66KD.cjs"),n=require("../chunk-WLOEKYUI.cjs"),a=require("../chunk-J6D4HCFT.cjs"),i=require("@yahoo/uds/fixtures"),o=require("react/jsx-runtime"),s=require("framer-motion"),r=require("react"),c={scale:.7,opacity:0},l={scale:[.7,.7,1],opacity:[0,0,1],transition:{times:[0,.5,1]}},u={icon:l,hide:c,loading:c},d={loading:l,hide:c,icon:c},m=`var(${a.BUTTON_CSS_VAR_MAP.columnGap})`,h=`var(${a.BUTTON_CSS_VAR_MAP.iconSize})`,p={rest:{scale:`var(${a.BUTTON_CSS_VAR_MAP.effects.scale.rest})`},hover:{scale:`var(${a.BUTTON_CSS_VAR_MAP.effects.scale.hover})`},pressed:{scale:`var(${a.BUTTON_CSS_VAR_MAP.effects.scale.pressed})`},withoutIcon:{columnGap:"0px"},withIcon:{columnGap:m}},g={withoutIcon:{marginLeft:0},withIcon:{marginLeft:`calc(${m} * -1)`}},f={hide:{width:"0px",opacity:0,display:"none"},loading:{width:h,display:"flex",opacity:1},icon:{width:h,display:"flex",opacity:1}},x=({size:e,variant:t})=>{if("outline"===t)switch(e){case"sm":return o.jsx(o.Fragment,{children:o.jsx("path",{fill:"currentColor",d:"M7.9 2.7a5.2 5.2 0 1 0 5.2 5.2h1.6a6.8 6.8 0 1 1-6.8-6.8.8.8 0 1 1 0 1.6"})});case"md":return o.jsx(o.Fragment,{children:o.jsx("path",{fill:"currentColor",d:"M12 4a8 8 0 1 0 8 8h2c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2a1 1 0 1 1 0 2"})});case"lg":return o.jsx(o.Fragment,{children:o.jsx("path",{fill:"currentColor",d:"M16.15 4.3C9.605 4.3 4.3 9.605 4.3 16.15S9.605 28 16.15 28 28 22.695 28 16.15h2.3c0 7.815-6.335 14.15-14.15 14.15S2 23.965 2 16.15 8.335 2 16.15 2a1.15 1.15 0 0 1 0 2.3"})})}if("fill"===t)switch(e){case"sm":return o.jsx(o.Fragment,{children:o.jsx("path",{fill:"currentColor",d:"M8 2.9A5.1 5.1 0 1 0 13.1 8h1.8A6.9 6.9 0 1 1 8 1.1a.9.9 0 1 1 0 1.8"})});case"md":return o.jsx(o.Fragment,{children:o.jsx("path",{fill:"currentColor",d:"M12.15 4.3A7.85 7.85 0 1 0 20 12.15h2.3c0 5.606-4.544 10.15-10.15 10.15S2 17.756 2 12.15 6.544 2 12.15 2a1.15 1.15 0 0 1 0 2.3"})});case"lg":return o.jsx(o.Fragment,{children:o.jsx("path",{fill:"currentColor",d:"M16.35 4.7C9.916 4.7 4.7 9.916 4.7 16.35S9.916 28 16.35 28 28 22.784 28 16.35h2.7c0 7.925-6.425 14.35-14.35 14.35S2 24.275 2 16.35 8.425 2 16.35 2a1.35 1.35 0 1 1 0 2.7"})})}return o.jsx(o.Fragment,{})},v=()=>import("../motionFeatures-THWWLQYC.cjs").then((({domAnimation:e})=>e));function j({reducedMotion:e="user",children:a,layoutVariant:i="subtle",layoutSpeed:c="3",colorVariant:l="smooth",colorSpeed:u="3"}){const d=n.motion[i][c],m=n.motion[l][u],[h,p]=r.useState(d),[g,f]=r.useState(m),x={variant:l,speed:u},j=t.getMotionVar({...x,control:"stiffness"}),b=t.getMotionVar({...x,control:"damping"}),S={variant:i,speed:c},y=t.getMotionVar({...S,control:"stiffness"}),M=t.getMotionVar({...S,control:"damping"});r.useEffect((()=>{const e=getComputedStyle(document.documentElement),t={damping:Number(e.getPropertyValue(M)),stiffness:Number(e.getPropertyValue(y))},n={damping:Number(e.getPropertyValue(b)),stiffness:Number(e.getPropertyValue(j))};p(t),f(n)}),[b,j,M,y]);const I=r.useMemo((()=>({type:"spring",mass:1,...h,layout:h,opacity:g,color:g,borderColor:g,backgroundColor:g})),[g,h]);return o.jsx(s.LazyMotion,{features:v,strict:!0,children:o.jsx(s.MotionConfig,{transition:I,reducedMotion:e,children:a})})}var b=e.createSlot(),S=s.m.create(b,{forwardMotionProps:!0}),y=r.forwardRef((function({palette:t,variant:n,size:a,startIcon:c,endIcon:l,iconVariant:m,loading:h,disableEffects:v,children:b,asChild:y,className:M,...I},C){const w=r.useRef(null);r.useImperativeHandle(C,(()=>w.current));const N=l?"icon":"hide",V=(({startIcon:e,endIcon:t,loading:n})=>e||t||n?"withIcon":"withoutIcon")({startIcon:c,endIcon:l,loading:h}),A=(({loading:e,startIcon:t})=>e?"loading":t?"icon":"hide")({loading:h,startIcon:c}),z={button:e.getStyles({buttonSize:a,buttonVariant:n,buttonPalette:t,className:e.cx("uds-button","uds-ring","uds-hit-target",h&&"uds-button-loading",v&&"uds-button-without-effects","withIcon"===V&&"uds-button-with-gap",M)}),iconContainer:"uds-button-icon-container flex overflow-hidden",loading:"uds-button-icon start-content animate-spin",start:"uds-button-icon start-content",end:"uds-button-icon end-content",spacer:"uds-button-spacer"},P=s.useReducedMotion()?"smooth":"subtle",T=r.useMemo((()=>o.jsx(s.m.span,{className:z.iconContainer,initial:!1,variants:f,animate:A,children:o.jsxs(s.AnimatePresence,{initial:!1,mode:"popLayout",children:[h&&o.jsx(s.m.span,{variants:d,initial:"hide",animate:"loading",exit:"hide",children:o.jsx(e.Icon,{size:i.buttonIconSvgSize,name:x,variant:m,color:"current",className:z.loading})},"loading"),c&&!h&&o.jsx(s.m.span,{variants:u,initial:"hide",animate:"icon",exit:"hide",children:o.jsx(e.Icon,{size:i.buttonIconSvgSize,name:c,variant:m,color:"current",className:z.start})},c.name)]})})),[z.iconContainer,z.loading,z.start,A,h,m,c]),_=r.useMemo((()=>o.jsx(s.m.span,{className:z.iconContainer,initial:!1,variants:f,animate:N,children:o.jsx(s.AnimatePresence,{initial:!1,mode:"popLayout",children:l&&o.jsx(s.m.span,{variants:u,initial:"hide",animate:"icon",exit:"hide",children:o.jsx(e.Icon,{size:i.buttonIconSvgSize,name:l,variant:m,color:"current",className:z.start})},l.name)})})),[z.iconContainer,z.start,l,N,m]),R=r.useMemo((()=>v?{...p,rest:{},hover:{},pressed:{}}:p),[v]);return y&&r.isValidElement(b)?o.jsx(j,{layoutSpeed:"3",layoutVariant:P,children:o.jsx(S,{className:z.button,initial:["hide",V],animate:V,variants:R,whileHover:"hover",whileTap:"pressed",...I,children:r.cloneElement(b,b.props,o.jsxs(o.Fragment,{children:[T,b.props.children,_,o.jsx(s.m.span,{className:z.spacer,variants:g,initial:!1,animate:V})]}))})}):o.jsx(j,{layoutSpeed:"3",layoutVariant:P,children:o.jsxs(s.m.button,{ref:w,className:z.button,initial:["hide",V],animate:V,variants:R,whileHover:"hover",whileTap:"pressed",...I,children:[T,b,_,o.jsx(s.m.span,{className:z.spacer,variants:g,initial:!1,animate:V})]})})})),M=r.forwardRef((function({palette:t,variant:n,size:a,iconVariant:c,loading:l,disableEffects:m,name:h,className:g,...f},v){const b=r.useRef(null);r.useImperativeHandle(v,(()=>b.current));const S=r.useMemo((()=>({button:e.getStyles({buttonVariant:n,buttonPalette:t,iconButtonSize:a,className:e.cx("uds-icon-button","uds-button","uds-ring","uds-hit-target",l&&"uds-button-loading",m&&"uds-button-without-effects",g)}),loading:"uds-button-icon start-content animate-spin",icon:"uds-button-icon start-content"})),[t,n,g,m,a,l]),y=s.useReducedMotion(),M=r.useMemo((()=>y?"smooth":"subtle"),[y]),I=r.useMemo((()=>m?{...p,rest:{},hover:{},pressed:{}}:p),[m]);return o.jsx(j,{layoutSpeed:"3",layoutVariant:M,reducedMotion:m?"always":"user",children:o.jsx(s.m.button,{ref:b,className:S.button,initial:"icon",variants:I,whileHover:"hover",whileTap:"pressed",...f,children:o.jsxs(s.AnimatePresence,{initial:!1,mode:"popLayout",children:[l&&o.jsx(s.m.span,{variants:d,initial:"loading",animate:"loading",exit:"hide",children:o.jsx(e.Icon,{size:i.buttonIconSvgSize,name:x,variant:c,color:"current",className:S.loading})},"loading"),h&&!l&&o.jsx(s.m.span,{variants:u,initial:"icon",animate:"icon",exit:"hide",children:o.jsx(e.Icon,{size:i.buttonIconSvgSize,name:h,variant:c,color:"current",className:S.icon})},h.name)]})})})}));
|
3
3
|
/*! © 2024 Yahoo, Inc. UDS v0.0.0-development */
|
4
4
|
exports.Button=y,exports.IconButton=M,exports.SpringMotionConfig=j;
|
package/dist/client/index.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
"use client";
|
2
|
-
import{createSlot as t,getStyles as n,cx as a,Icon as e}from"../chunk-
|
2
|
+
import{createSlot as t,getStyles as n,cx as a,Icon as e}from"../chunk-VADOXPF5.js";import{getMotionVar as i}from"../chunk-PSTMMXTR.js";import{motion as o}from"../chunk-YRYDHL65.js";import{BUTTON_CSS_VAR_MAP as r}from"../chunk-33B23P5G.js";import{buttonIconSvgSize as s}from"@yahoo/uds/fixtures";import{jsx as c,jsxs as l,Fragment as d}from"react/jsx-runtime";import{m as u,useReducedMotion as h,AnimatePresence as m,LazyMotion as p,MotionConfig as f}from"framer-motion";import{forwardRef as g,useRef as v,useImperativeHandle as b,useMemo as y,isValidElement as w,cloneElement as N,useState as C,useEffect as S}from"react";
|
3
3
|
/*! © 2024 Yahoo, Inc. UDS v0.0.0-development */
|
4
|
-
var I={scale:.7,opacity:0},V={scale:[.7,.7,1],opacity:[0,0,1],transition:{times:[0,.5,1]}},x={icon:V,hide:I,loading:I},M={loading:V,hide:I,icon:I},z=`var(${r.columnGap})`,P=`var(${r.iconSize})`,
|
4
|
+
var I={scale:.7,opacity:0},V={scale:[.7,.7,1],opacity:[0,0,1],transition:{times:[0,.5,1]}},x={icon:V,hide:I,loading:I},M={loading:V,hide:I,icon:I},z=`var(${r.columnGap})`,P=`var(${r.iconSize})`,j={rest:{scale:`var(${r.effects.scale.rest})`},hover:{scale:`var(${r.effects.scale.hover})`},pressed:{scale:`var(${r.effects.scale.pressed})`},withoutIcon:{columnGap:"0px"},withIcon:{columnGap:z}},L={withoutIcon:{marginLeft:0},withIcon:{marginLeft:`calc(${z} * -1)`}},$={hide:{width:"0px",opacity:0,display:"none"},loading:{width:P,display:"flex",opacity:1},icon:{width:P,display:"flex",opacity:1}},k=({size:t,variant:n})=>{if("outline"===n)switch(t){case"sm":return c(d,{children:c("path",{fill:"currentColor",d:"M7.9 2.7a5.2 5.2 0 1 0 5.2 5.2h1.6a6.8 6.8 0 1 1-6.8-6.8.8.8 0 1 1 0 1.6"})});case"md":return c(d,{children:c("path",{fill:"currentColor",d:"M12 4a8 8 0 1 0 8 8h2c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2a1 1 0 1 1 0 2"})});case"lg":return c(d,{children:c("path",{fill:"currentColor",d:"M16.15 4.3C9.605 4.3 4.3 9.605 4.3 16.15S9.605 28 16.15 28 28 22.695 28 16.15h2.3c0 7.815-6.335 14.15-14.15 14.15S2 23.965 2 16.15 8.335 2 16.15 2a1.15 1.15 0 0 1 0 2.3"})})}if("fill"===n)switch(t){case"sm":return c(d,{children:c("path",{fill:"currentColor",d:"M8 2.9A5.1 5.1 0 1 0 13.1 8h1.8A6.9 6.9 0 1 1 8 1.1a.9.9 0 1 1 0 1.8"})});case"md":return c(d,{children:c("path",{fill:"currentColor",d:"M12.15 4.3A7.85 7.85 0 1 0 20 12.15h2.3c0 5.606-4.544 10.15-10.15 10.15S2 17.756 2 12.15 6.544 2 12.15 2a1.15 1.15 0 0 1 0 2.3"})});case"lg":return c(d,{children:c("path",{fill:"currentColor",d:"M16.35 4.7C9.916 4.7 4.7 9.916 4.7 16.35S9.916 28 16.35 28 28 22.784 28 16.35h2.7c0 7.925-6.425 14.35-14.35 14.35S2 24.275 2 16.35 8.425 2 16.35 2a1.35 1.35 0 1 1 0 2.7"})})}return c(d,{})},A=()=>import("../motionFeatures-B5UV2GY2.js").then((({domAnimation:t})=>t));function G({reducedMotion:t="user",children:n,layoutVariant:a="subtle",layoutSpeed:e="3",colorVariant:r="smooth",colorSpeed:s="3"}){const l=o[a][e],d=o[r][s],[u,h]=C(l),[m,g]=C(d),v={variant:r,speed:s},b=i({...v,control:"stiffness"}),w=i({...v,control:"damping"}),N={variant:a,speed:e},I=i({...N,control:"stiffness"}),V=i({...N,control:"damping"});S((()=>{const t=getComputedStyle(document.documentElement),n={damping:Number(t.getPropertyValue(V)),stiffness:Number(t.getPropertyValue(I))},a={damping:Number(t.getPropertyValue(w)),stiffness:Number(t.getPropertyValue(b))};h(n),g(a)}),[w,b,V,I]);const x=y((()=>({type:"spring",mass:1,...u,layout:u,opacity:m,color:m,borderColor:m,backgroundColor:m})),[m,u]);return c(p,{features:A,strict:!0,children:c(f,{transition:x,reducedMotion:t,children:n})})}var T=t(),H=u.create(T,{forwardMotionProps:!0}),B=g((function({palette:t,variant:i,size:o,startIcon:r,endIcon:p,iconVariant:f,loading:g,disableEffects:C,children:S,asChild:I,className:V,...z},P){const A=v(null);b(P,(()=>A.current));const T=p?"icon":"hide",B=(({startIcon:t,endIcon:n,loading:a})=>t||n||a?"withIcon":"withoutIcon")({startIcon:r,endIcon:p,loading:g}),E=(({loading:t,startIcon:n})=>t?"loading":n?"icon":"hide")({loading:g,startIcon:r}),Y={button:n({buttonSize:o,buttonVariant:i,buttonPalette:t,className:a("uds-button","uds-ring","uds-hit-target",g&&"uds-button-loading",C&&"uds-button-without-effects","withIcon"===B&&"uds-button-with-gap",V)}),iconContainer:"uds-button-icon-container flex overflow-hidden",loading:"uds-button-icon start-content animate-spin",start:"uds-button-icon start-content",end:"uds-button-icon end-content",spacer:"uds-button-spacer"},D=h()?"smooth":"subtle",F=y((()=>c(u.span,{className:Y.iconContainer,initial:!1,variants:$,animate:E,children:l(m,{initial:!1,mode:"popLayout",children:[g&&c(u.span,{variants:M,initial:"hide",animate:"loading",exit:"hide",children:c(e,{size:s,name:k,variant:f,color:"current",className:Y.loading})},"loading"),r&&!g&&c(u.span,{variants:x,initial:"hide",animate:"icon",exit:"hide",children:c(e,{size:s,name:r,variant:f,color:"current",className:Y.start})},r.name)]})})),[Y.iconContainer,Y.loading,Y.start,E,g,f,r]),R=y((()=>c(u.span,{className:Y.iconContainer,initial:!1,variants:$,animate:T,children:c(m,{initial:!1,mode:"popLayout",children:p&&c(u.span,{variants:x,initial:"hide",animate:"icon",exit:"hide",children:c(e,{size:s,name:p,variant:f,color:"current",className:Y.start})},p.name)})})),[Y.iconContainer,Y.start,p,T,f]),X=y((()=>C?{...j,rest:{},hover:{},pressed:{}}:j),[C]);return I&&w(S)?c(G,{layoutSpeed:"3",layoutVariant:D,children:c(H,{className:Y.button,initial:["hide",B],animate:B,variants:X,whileHover:"hover",whileTap:"pressed",...z,children:N(S,S.props,l(d,{children:[F,S.props.children,R,c(u.span,{className:Y.spacer,variants:L,initial:!1,animate:B})]}))})}):c(G,{layoutSpeed:"3",layoutVariant:D,children:l(u.button,{ref:A,className:Y.button,initial:["hide",B],animate:B,variants:X,whileHover:"hover",whileTap:"pressed",...z,children:[F,S,R,c(u.span,{className:Y.spacer,variants:L,initial:!1,animate:B})]})})})),E=g((function({palette:t,variant:i,size:o,iconVariant:r,loading:d,disableEffects:p,name:f,className:g,...w},N){const C=v(null);b(N,(()=>C.current));const S=y((()=>({button:n({buttonVariant:i,buttonPalette:t,iconButtonSize:o,className:a("uds-icon-button","uds-button","uds-ring","uds-hit-target",d&&"uds-button-loading",p&&"uds-button-without-effects",g)}),loading:"uds-button-icon start-content animate-spin",icon:"uds-button-icon start-content"})),[t,i,g,p,o,d]),I=h(),V=y((()=>I?"smooth":"subtle"),[I]),z=y((()=>p?{...j,rest:{},hover:{},pressed:{}}:j),[p]);return c(G,{layoutSpeed:"3",layoutVariant:V,reducedMotion:p?"always":"user",children:c(u.button,{ref:C,className:S.button,initial:"icon",variants:z,whileHover:"hover",whileTap:"pressed",...w,children:l(m,{initial:!1,mode:"popLayout",children:[d&&c(u.span,{variants:M,initial:"loading",animate:"loading",exit:"hide",children:c(e,{size:s,name:k,variant:r,color:"current",className:S.loading})},"loading"),f&&!d&&c(u.span,{variants:x,initial:"icon",animate:"icon",exit:"hide",children:c(e,{size:s,name:f,variant:r,color:"current",className:S.icon})},f.name)]})})})}));
|
5
5
|
/*! © 2024 Yahoo, Inc. UDS v0.0.0-development */
|
6
|
-
export{
|
6
|
+
export{B as Button,E as IconButton,G as SpringMotionConfig};
|