@kanso-labs/kanso-ui 0.4.6 → 0.5.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.
Files changed (77) hide show
  1. package/dist/assets/stylex.css +50 -0
  2. package/dist/components/card/index.d.ts +19 -7
  3. package/dist/components/card/index.js +35 -14
  4. package/dist/components/card/index.js.map +1 -1
  5. package/dist/components/index.d.ts +3 -1
  6. package/dist/components/list-detail/index.d.ts +41 -0
  7. package/dist/components/list-detail/index.js +42 -0
  8. package/dist/components/list-detail/index.js.map +1 -0
  9. package/dist/components/supporting-pane/index.d.ts +29 -0
  10. package/dist/components/supporting-pane/index.js +94 -0
  11. package/dist/components/supporting-pane/index.js.map +1 -0
  12. package/dist/index.d.ts +3 -1
  13. package/dist/index.js +3 -1
  14. package/package.json +7 -5
  15. package/dist/cjs/assets/stylex.css +0 -1655
  16. package/dist/cjs/components/avatar/index.cjs +0 -89
  17. package/dist/cjs/components/avatar/index.cjs.map +0 -1
  18. package/dist/cjs/components/avatar/index.d.cts +0 -29
  19. package/dist/cjs/components/badge/index.cjs +0 -93
  20. package/dist/cjs/components/badge/index.cjs.map +0 -1
  21. package/dist/cjs/components/badge/index.d.cts +0 -27
  22. package/dist/cjs/components/button/index.cjs +0 -101
  23. package/dist/cjs/components/button/index.cjs.map +0 -1
  24. package/dist/cjs/components/button/index.d.cts +0 -22
  25. package/dist/cjs/components/card/index.cjs +0 -84
  26. package/dist/cjs/components/card/index.cjs.map +0 -1
  27. package/dist/cjs/components/card/index.d.cts +0 -29
  28. package/dist/cjs/components/chip/index.cjs +0 -53
  29. package/dist/cjs/components/chip/index.cjs.map +0 -1
  30. package/dist/cjs/components/chip/index.d.cts +0 -13
  31. package/dist/cjs/components/code/index.cjs +0 -51
  32. package/dist/cjs/components/code/index.cjs.map +0 -1
  33. package/dist/cjs/components/code/index.d.cts +0 -11
  34. package/dist/cjs/components/copy-field/index.cjs +0 -59
  35. package/dist/cjs/components/copy-field/index.cjs.map +0 -1
  36. package/dist/cjs/components/copy-field/index.d.cts +0 -36
  37. package/dist/cjs/components/currency/index.cjs +0 -56
  38. package/dist/cjs/components/currency/index.cjs.map +0 -1
  39. package/dist/cjs/components/currency/index.d.cts +0 -36
  40. package/dist/cjs/components/icon-button/index.cjs +0 -80
  41. package/dist/cjs/components/icon-button/index.cjs.map +0 -1
  42. package/dist/cjs/components/icon-button/index.d.cts +0 -32
  43. package/dist/cjs/components/index.d.cts +0 -18
  44. package/dist/cjs/components/keycap/index.cjs +0 -52
  45. package/dist/cjs/components/keycap/index.cjs.map +0 -1
  46. package/dist/cjs/components/keycap/index.d.cts +0 -12
  47. package/dist/cjs/components/link/index.cjs +0 -61
  48. package/dist/cjs/components/link/index.cjs.map +0 -1
  49. package/dist/cjs/components/link/index.d.cts +0 -30
  50. package/dist/cjs/components/list-item/index.cjs +0 -42
  51. package/dist/cjs/components/list-item/index.cjs.map +0 -1
  52. package/dist/cjs/components/list-item/index.d.cts +0 -22
  53. package/dist/cjs/components/separator/index.cjs +0 -34
  54. package/dist/cjs/components/separator/index.cjs.map +0 -1
  55. package/dist/cjs/components/separator/index.d.cts +0 -14
  56. package/dist/cjs/components/sheet/index.cjs +0 -266
  57. package/dist/cjs/components/sheet/index.cjs.map +0 -1
  58. package/dist/cjs/components/sheet/index.d.cts +0 -73
  59. package/dist/cjs/components/tabs/index.cjs +0 -77
  60. package/dist/cjs/components/tabs/index.cjs.map +0 -1
  61. package/dist/cjs/components/tabs/index.d.cts +0 -24
  62. package/dist/cjs/components/text/index.cjs +0 -173
  63. package/dist/cjs/components/text/index.cjs.map +0 -1
  64. package/dist/cjs/components/text/index.d.cts +0 -19
  65. package/dist/cjs/components/text-field/index.cjs +0 -53
  66. package/dist/cjs/components/text-field/index.cjs.map +0 -1
  67. package/dist/cjs/components/text-field/index.d.cts +0 -30
  68. package/dist/cjs/hooks/useRipple.cjs +0 -391
  69. package/dist/cjs/hooks/useRipple.cjs.map +0 -1
  70. package/dist/cjs/index.cjs +0 -35
  71. package/dist/cjs/index.d.cts +0 -19
  72. package/dist/cjs/node_modules/@stylexjs/stylex/lib/es/stylex.cjs +0 -121
  73. package/dist/cjs/node_modules/@stylexjs/stylex/lib/es/stylex.cjs.map +0 -1
  74. package/dist/cjs/styles/ripple.cjs +0 -33
  75. package/dist/cjs/styles/ripple.cjs.map +0 -1
  76. package/dist/cjs/tokens/values.cjs +0 -36
  77. package/dist/cjs/tokens/values.cjs.map +0 -1
@@ -1,391 +0,0 @@
1
- const require_stylex = require("../node_modules/@stylexjs/stylex/lib/es/stylex.cjs");
2
- const require_ripple = require("../styles/ripple.cjs");
3
- const require_values = require("../tokens/values.cjs");
4
- let react_jsx_runtime = require("react/jsx-runtime");
5
- let react_compiler_runtime = require("react/compiler-runtime");
6
- let react = require("react");
7
- //#region src/hooks/useRipple.tsx
8
- /** How far the ripple grows past the host's corners. `spacing.sm`. */
9
- const PADDING = require_values.spacingPx.sm;
10
- const INITIAL_ORIGIN_SCALE = .2;
11
- const SOFT_EDGE_MINIMUM_SIZE = 75;
12
- const SOFT_EDGE_CONTAINER_RATIO = .35;
13
- const surfaceProps = require_stylex.props(require_ripple.rippleStyles.surface);
14
- /**
15
- * On touch: `Inactive -> TouchDelay -> WaitingForClick -> Inactive`, or
16
- * `Inactive -> TouchDelay -> Holding -> WaitingForClick -> Inactive` for a
17
- * held press.
18
- *
19
- * On mouse or pen: `Inactive -> WaitingForClick -> Inactive`.
20
- */
21
- const RippleState = {
22
- /** A touch has been confirmed as a press (held past the touch delay). */
23
- Holding: 2,
24
- /** No press in progress. Touch down moves to TouchDelay; mouse/pen down moves to WaitingForClick. */
25
- Inactive: 0,
26
- /** Touch down received; waiting to see if it's a tap or a scroll/swipe. */
27
- TouchDelay: 1,
28
- /** The press has finished growing; waiting for the click that ends it. */
29
- WaitingForClick: 3
30
- };
31
- function isTouch(event) {
32
- return event.pointerType === "touch";
33
- }
34
- /**
35
- * Renders a press ripple that grows from the pointer's position, or from
36
- * the element's center for a keyboard or other non-pointer activation.
37
- *
38
- * Growth runs via the Web Animations API on a single reused element (no
39
- * per-click DOM nodes to clean up), over a fixed duration independent of how
40
- * long the element is held — a real press-and-hold keeps the ripple
41
- * growing until release, while a quick tap is still held visible for a
42
- * minimum duration so it plays a complete animation rather than a flicker.
43
- *
44
- * Merges its own handlers with `externalHandlers` (e.g. a component's own
45
- * consumer-supplied props — ripple's own run first, then the external
46
- * ones) and returns `handlers` to spread onto the interactive element and
47
- * `surface`, the node to render as a child. The host element must
48
- * establish a positioning context (`position: relative` or similar) so
49
- * `surface`, which fills it via `inset: 0`, clips to its bounds and
50
- * inherits its shape.
51
- *
52
- * Pass `enabled: false` to opt out — no ripple listeners are attached and
53
- * no surface is rendered, leaving `externalHandlers` and a component's own
54
- * hover/press state layer (if any) untouched.
55
- *
56
- * `handlers` and `surface` are hand-memoized (not left to build-tool
57
- * optimization) so a consumer rendering many instances — a list of icon
58
- * buttons, say — can memoize around them too, and so stability doesn't
59
- * depend on any particular compiler being configured.
60
- */
61
- function useRipple(t0, t1) {
62
- const $ = (0, react_compiler_runtime.c)(43);
63
- const enabled = t0 === void 0 ? true : t0;
64
- let t2;
65
- if ($[0] !== t1) {
66
- t2 = t1 === void 0 ? {} : t1;
67
- $[0] = t1;
68
- $[1] = t2;
69
- } else t2 = $[1];
70
- const externalHandlers = t2;
71
- const [pressed, setPressed] = (0, react.useState)(false);
72
- const rippleRef = (0, react.useRef)(null);
73
- const state = (0, react.useRef)(RippleState.Inactive);
74
- const growAnimation = (0, react.useRef)(void 0);
75
- const rippleStartEvent = (0, react.useRef)(void 0);
76
- const initialSize = (0, react.useRef)(0);
77
- const rippleScale = (0, react.useRef)("1");
78
- let t3;
79
- if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
80
- t3 = (event) => {
81
- if (!event.isPrimary) return false;
82
- const startEvent = rippleStartEvent.current;
83
- if (startEvent && startEvent.pointerId !== event.pointerId) return false;
84
- return isTouch(event) || event.buttons === 1;
85
- };
86
- $[2] = t3;
87
- } else t3 = $[2];
88
- const shouldReactToEvent = t3;
89
- let t4;
90
- if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
91
- t4 = (rect) => {
92
- const { height, width } = rect;
93
- const maxDimension = Math.max(height, width);
94
- const softEdgeSize = Math.max(SOFT_EDGE_CONTAINER_RATIO * maxDimension, SOFT_EDGE_MINIMUM_SIZE);
95
- const size = Math.floor(maxDimension * INITIAL_ORIGIN_SCALE);
96
- const maxRadius = Math.hypot(width, height) + PADDING;
97
- initialSize.current = size;
98
- rippleScale.current = `${(maxRadius + softEdgeSize) / size}`;
99
- return `${size}px`;
100
- };
101
- $[3] = t4;
102
- } else t4 = $[3];
103
- const determineRippleSize = t4;
104
- let t5;
105
- if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
106
- t5 = (rect_0, positionEvent) => {
107
- const { height: height_0, left, top, width: width_0 } = rect_0;
108
- const size_0 = initialSize.current;
109
- const endPoint = {
110
- x: (width_0 - size_0) / 2,
111
- y: (height_0 - size_0) / 2
112
- };
113
- const origin = positionEvent ? {
114
- x: positionEvent.clientX - left,
115
- y: positionEvent.clientY - top
116
- } : {
117
- x: width_0 / 2,
118
- y: height_0 / 2
119
- };
120
- return {
121
- endPoint,
122
- startPoint: {
123
- x: origin.x - size_0 / 2,
124
- y: origin.y - size_0 / 2
125
- }
126
- };
127
- };
128
- $[4] = t5;
129
- } else t5 = $[4];
130
- const getTranslationCoordinates = t5;
131
- let t6;
132
- if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
133
- t6 = (target, positionEvent_0) => {
134
- const ripple = rippleRef.current;
135
- if (!ripple) return;
136
- setPressed(true);
137
- growAnimation.current?.cancel();
138
- const rect_1 = target.getBoundingClientRect();
139
- const size_1 = determineRippleSize(rect_1);
140
- const { endPoint: endPoint_0, startPoint: startPoint_0 } = getTranslationCoordinates(rect_1, positionEvent_0);
141
- ripple.style.width = size_1;
142
- ripple.style.height = size_1;
143
- growAnimation.current = ripple.animate({ transform: [`translate(${startPoint_0.x}px, ${startPoint_0.y}px) scale(1)`, `translate(${endPoint_0.x}px, ${endPoint_0.y}px) scale(${rippleScale.current})`] }, {
144
- duration: require_values.motionDurationMs.long1,
145
- easing: require_values.motionEasing.standard,
146
- fill: "forwards"
147
- });
148
- };
149
- $[5] = t6;
150
- } else t6 = $[5];
151
- const startPressAnimation = t6;
152
- let t7;
153
- if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
154
- t7 = async () => {
155
- rippleStartEvent.current = void 0;
156
- state.current = RippleState.Inactive;
157
- const animation = growAnimation.current;
158
- const elapsed = typeof animation?.currentTime === "number" ? animation.currentTime : Infinity;
159
- if (elapsed >= require_values.motionDurationMs.medium1) {
160
- setPressed(false);
161
- return;
162
- }
163
- await new Promise((resolve) => {
164
- setTimeout(resolve, require_values.motionDurationMs.medium1 - elapsed);
165
- });
166
- if (growAnimation.current !== animation) return;
167
- setPressed(false);
168
- };
169
- $[6] = t7;
170
- } else t7 = $[6];
171
- const endPressAnimation = t7;
172
- let t8;
173
- if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
174
- t8 = () => state.current;
175
- $[7] = t8;
176
- } else t8 = $[7];
177
- const getState = t8;
178
- let t9;
179
- if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
180
- t9 = async (event_0) => {
181
- if (!shouldReactToEvent(event_0)) return;
182
- rippleStartEvent.current = event_0;
183
- const target_0 = event_0.currentTarget;
184
- if (!isTouch(event_0)) {
185
- state.current = RippleState.WaitingForClick;
186
- startPressAnimation(target_0, event_0);
187
- return;
188
- }
189
- state.current = RippleState.TouchDelay;
190
- await new Promise(_temp);
191
- if (getState() !== RippleState.TouchDelay) return;
192
- state.current = RippleState.Holding;
193
- startPressAnimation(target_0, event_0);
194
- };
195
- $[8] = t9;
196
- } else t9 = $[8];
197
- const handlePointerDownAsync = t9;
198
- let t10;
199
- if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
200
- t10 = (event_1) => {
201
- handlePointerDownAsync(event_1);
202
- };
203
- $[9] = t10;
204
- } else t10 = $[9];
205
- const handlePointerDown = t10;
206
- let t11;
207
- if ($[10] === Symbol.for("react.memo_cache_sentinel")) {
208
- t11 = (event_2) => {
209
- if (!shouldReactToEvent(event_2)) return;
210
- if (state.current === RippleState.Holding) {
211
- state.current = RippleState.WaitingForClick;
212
- return;
213
- }
214
- if (state.current === RippleState.TouchDelay) {
215
- state.current = RippleState.WaitingForClick;
216
- startPressAnimation(event_2.currentTarget, rippleStartEvent.current);
217
- }
218
- };
219
- $[10] = t11;
220
- } else t11 = $[10];
221
- const handlePointerUp = t11;
222
- let t12;
223
- if ($[11] === Symbol.for("react.memo_cache_sentinel")) {
224
- t12 = (event_3) => {
225
- if (isTouch(event_3) || !shouldReactToEvent(event_3)) return;
226
- if (state.current !== RippleState.Inactive) endPressAnimation();
227
- };
228
- $[11] = t12;
229
- } else t12 = $[11];
230
- const handlePointerLeave = t12;
231
- let t13;
232
- if ($[12] === Symbol.for("react.memo_cache_sentinel")) {
233
- t13 = (event_4) => {
234
- if (!shouldReactToEvent(event_4)) return;
235
- endPressAnimation();
236
- };
237
- $[12] = t13;
238
- } else t13 = $[12];
239
- const handlePointerCancel = t13;
240
- let t14;
241
- if ($[13] === Symbol.for("react.memo_cache_sentinel")) {
242
- t14 = (event_5) => {
243
- if (state.current === RippleState.WaitingForClick) {
244
- endPressAnimation();
245
- return;
246
- }
247
- if (state.current === RippleState.Inactive) {
248
- startPressAnimation(event_5.currentTarget);
249
- endPressAnimation();
250
- }
251
- };
252
- $[13] = t14;
253
- } else t14 = $[13];
254
- const handleClick = t14;
255
- let t15;
256
- if ($[14] === Symbol.for("react.memo_cache_sentinel")) {
257
- t15 = () => {
258
- endPressAnimation();
259
- };
260
- $[14] = t15;
261
- } else t15 = $[14];
262
- const handleContextMenu = t15;
263
- const { onClick: onClickProp, onContextMenu: onContextMenuProp, onPointerCancel: onPointerCancelProp, onPointerDown: onPointerDownProp, onPointerLeave: onPointerLeaveProp, onPointerUp: onPointerUpProp } = externalHandlers;
264
- let t16;
265
- if ($[15] !== onClickProp) {
266
- t16 = (event_6) => {
267
- handleClick(event_6);
268
- onClickProp?.(event_6);
269
- };
270
- $[15] = onClickProp;
271
- $[16] = t16;
272
- } else t16 = $[16];
273
- const onClick = t16;
274
- let t17;
275
- if ($[17] !== onContextMenuProp) {
276
- t17 = (event_7) => {
277
- handleContextMenu();
278
- onContextMenuProp?.(event_7);
279
- };
280
- $[17] = onContextMenuProp;
281
- $[18] = t17;
282
- } else t17 = $[18];
283
- const onContextMenu = t17;
284
- let t18;
285
- if ($[19] !== onPointerCancelProp) {
286
- t18 = (event_8) => {
287
- handlePointerCancel(event_8);
288
- onPointerCancelProp?.(event_8);
289
- };
290
- $[19] = onPointerCancelProp;
291
- $[20] = t18;
292
- } else t18 = $[20];
293
- const onPointerCancel = t18;
294
- let t19;
295
- if ($[21] !== onPointerDownProp) {
296
- t19 = (event_9) => {
297
- handlePointerDown(event_9);
298
- onPointerDownProp?.(event_9);
299
- };
300
- $[21] = onPointerDownProp;
301
- $[22] = t19;
302
- } else t19 = $[22];
303
- const onPointerDown = t19;
304
- let t20;
305
- if ($[23] !== onPointerLeaveProp) {
306
- t20 = (event_10) => {
307
- handlePointerLeave(event_10);
308
- onPointerLeaveProp?.(event_10);
309
- };
310
- $[23] = onPointerLeaveProp;
311
- $[24] = t20;
312
- } else t20 = $[24];
313
- const onPointerLeave = t20;
314
- let t21;
315
- if ($[25] !== onPointerUpProp) {
316
- t21 = (event_11) => {
317
- handlePointerUp(event_11);
318
- onPointerUpProp?.(event_11);
319
- };
320
- $[25] = onPointerUpProp;
321
- $[26] = t21;
322
- } else t21 = $[26];
323
- const onPointerUp = t21;
324
- let t22;
325
- if ($[27] !== onClick || $[28] !== onContextMenu || $[29] !== onPointerCancel || $[30] !== onPointerDown || $[31] !== onPointerLeave || $[32] !== onPointerUp) {
326
- t22 = {
327
- onClick,
328
- onContextMenu,
329
- onPointerCancel,
330
- onPointerDown,
331
- onPointerLeave,
332
- onPointerUp
333
- };
334
- $[27] = onClick;
335
- $[28] = onContextMenu;
336
- $[29] = onPointerCancel;
337
- $[30] = onPointerDown;
338
- $[31] = onPointerLeave;
339
- $[32] = onPointerUp;
340
- $[33] = t22;
341
- } else t22 = $[33];
342
- const handlers = t22;
343
- let t23;
344
- if ($[34] !== pressed) {
345
- t23 = require_stylex.props(require_ripple.rippleStyles.press, pressed && require_ripple.rippleStyles.pressed);
346
- $[34] = pressed;
347
- $[35] = t23;
348
- } else t23 = $[35];
349
- let t24;
350
- if ($[36] !== t23) {
351
- t24 = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
352
- "aria-hidden": "true",
353
- ...surfaceProps,
354
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
355
- ref: rippleRef,
356
- ...t23
357
- })
358
- });
359
- $[36] = t23;
360
- $[37] = t24;
361
- } else t24 = $[37];
362
- const surface = t24;
363
- let t25;
364
- if ($[38] !== handlers || $[39] !== surface) {
365
- t25 = {
366
- handlers,
367
- surface
368
- };
369
- $[38] = handlers;
370
- $[39] = surface;
371
- $[40] = t25;
372
- } else t25 = $[40];
373
- const enabledResult = t25;
374
- let t26;
375
- if ($[41] !== externalHandlers) {
376
- t26 = {
377
- handlers: externalHandlers,
378
- surface: null
379
- };
380
- $[41] = externalHandlers;
381
- $[42] = t26;
382
- } else t26 = $[42];
383
- return enabled ? enabledResult : t26;
384
- }
385
- function _temp(resolve_0) {
386
- setTimeout(resolve_0, require_values.motionDurationMs.short2);
387
- }
388
- //#endregion
389
- exports.useRipple = useRipple;
390
-
391
- //# sourceMappingURL=useRipple.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useRipple.cjs","names":["rect","width","size","height","positionEvent","startPoint","endPoint","event","target","rippleRef","resolve"],"sources":["../../../src/hooks/useRipple.tsx"],"sourcesContent":["import type { MouseEvent, MouseEventHandler, PointerEvent, PointerEventHandler, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\nimport { useCallback, useMemo, useRef, useState } from 'react';\nimport { rippleStyles } from '../styles/ripple';\nimport { motionDurationMs, motionEasing, spacingPx } from '../tokens/values';\n\n// Every timing this file drives is a motion token, spent at the point of use\n// below. They come from tokens/values rather than the StyleX theme because\n// element.animate() and setTimeout both reject a token's var() form, and the\n// same is true of the one geometry token: `PADDING` is added to a radius, and\n// a var() would concatenate rather than add. See src/styles/ripple.ts for the\n// opacity half of the mechanism, whose three timings are deliberately not\n// tokens.\n\n/** How far the ripple grows past the host's corners. `spacing.sm`. */\nconst PADDING = spacingPx.sm;\n\n// The rest are ratios and a pixel floor that no token group covers — spacing\n// is layout rhythm, and nothing in the set holds bare geometric ratios.\nconst INITIAL_ORIGIN_SCALE = 0.2;\nconst SOFT_EDGE_MINIMUM_SIZE = 75;\nconst SOFT_EDGE_CONTAINER_RATIO = 0.35;\n\n// Static input, so this is computed once for every consumer of the module\n// rather than once per component instance.\nconst surfaceProps = stylex.props(rippleStyles.surface);\n\n/**\n * On touch: `Inactive -> TouchDelay -> WaitingForClick -> Inactive`, or\n * `Inactive -> TouchDelay -> Holding -> WaitingForClick -> Inactive` for a\n * held press.\n *\n * On mouse or pen: `Inactive -> WaitingForClick -> Inactive`.\n */\nconst RippleState = {\n /** A touch has been confirmed as a press (held past the touch delay). */\n Holding: 2,\n /** No press in progress. Touch down moves to TouchDelay; mouse/pen down moves to WaitingForClick. */\n Inactive: 0,\n /** Touch down received; waiting to see if it's a tap or a scroll/swipe. */\n TouchDelay: 1,\n /** The press has finished growing; waiting for the click that ends it. */\n WaitingForClick: 3\n} as const;\ninterface RippleEventHandlers<HostElement extends HTMLElement> {\n onClick?: MouseEventHandler<HostElement>;\n onContextMenu?: MouseEventHandler<HostElement>;\n onPointerCancel?: PointerEventHandler<HostElement>;\n onPointerDown?: PointerEventHandler<HostElement>;\n onPointerLeave?: PointerEventHandler<HostElement>;\n onPointerUp?: PointerEventHandler<HostElement>;\n}\ntype RippleState = (typeof RippleState)[keyof typeof RippleState];\nfunction isTouch(event: PointerEvent) {\n return event.pointerType === 'touch';\n}\n\n/**\n * Renders a press ripple that grows from the pointer's position, or from\n * the element's center for a keyboard or other non-pointer activation.\n *\n * Growth runs via the Web Animations API on a single reused element (no\n * per-click DOM nodes to clean up), over a fixed duration independent of how\n * long the element is held — a real press-and-hold keeps the ripple\n * growing until release, while a quick tap is still held visible for a\n * minimum duration so it plays a complete animation rather than a flicker.\n *\n * Merges its own handlers with `externalHandlers` (e.g. a component's own\n * consumer-supplied props — ripple's own run first, then the external\n * ones) and returns `handlers` to spread onto the interactive element and\n * `surface`, the node to render as a child. The host element must\n * establish a positioning context (`position: relative` or similar) so\n * `surface`, which fills it via `inset: 0`, clips to its bounds and\n * inherits its shape.\n *\n * Pass `enabled: false` to opt out — no ripple listeners are attached and\n * no surface is rendered, leaving `externalHandlers` and a component's own\n * hover/press state layer (if any) untouched.\n *\n * `handlers` and `surface` are hand-memoized (not left to build-tool\n * optimization) so a consumer rendering many instances — a list of icon\n * buttons, say — can memoize around them too, and so stability doesn't\n * depend on any particular compiler being configured.\n */\nfunction useRipple<HostElement extends HTMLElement = HTMLElement>(enabled = true, externalHandlers: RippleEventHandlers<HostElement> = {}): {\n handlers: RippleEventHandlers<HostElement>;\n surface: ReactNode;\n} {\n const [pressed, setPressed] = useState(false);\n const rippleRef = useRef<HTMLSpanElement>(null);\n const state = useRef<RippleState>(RippleState.Inactive);\n const growAnimation = useRef<Animation | undefined>(undefined);\n const rippleStartEvent = useRef<PointerEvent<HostElement> | undefined>(undefined);\n const initialSize = useRef(0);\n const rippleScale = useRef('1');\n const shouldReactToEvent = useCallback((event: PointerEvent<HostElement>) => {\n if (!event.isPrimary) {\n return false;\n }\n const startEvent = rippleStartEvent.current;\n if (startEvent && startEvent.pointerId !== event.pointerId) {\n return false;\n }\n return isTouch(event) || event.buttons === 1;\n }, []);\n const determineRippleSize = useCallback((rect: DOMRect) => {\n const {\n height,\n width\n } = rect;\n const maxDimension = Math.max(height, width);\n const softEdgeSize = Math.max(SOFT_EDGE_CONTAINER_RATIO * maxDimension, SOFT_EDGE_MINIMUM_SIZE);\n const size = Math.floor(maxDimension * INITIAL_ORIGIN_SCALE);\n const hypotenuse = Math.hypot(width, height);\n const maxRadius = hypotenuse + PADDING;\n initialSize.current = size;\n rippleScale.current = `${(maxRadius + softEdgeSize) / size}`;\n return `${size}px`;\n }, []);\n const getTranslationCoordinates = useCallback((rect: DOMRect, positionEvent?: PointerEvent<HostElement>) => {\n const {\n height,\n left,\n top,\n width\n } = rect;\n const size = initialSize.current;\n const endPoint = {\n x: (width - size) / 2,\n y: (height - size) / 2\n };\n const origin = positionEvent ? {\n x: positionEvent.clientX - left,\n y: positionEvent.clientY - top\n } : {\n x: width / 2,\n y: height / 2\n };\n const startPoint = {\n x: origin.x - size / 2,\n y: origin.y - size / 2\n };\n return {\n endPoint,\n startPoint\n };\n }, []);\n const startPressAnimation = useCallback((target: HostElement, positionEvent?: PointerEvent<HostElement>) => {\n const ripple = rippleRef.current;\n if (!ripple) {\n return;\n }\n setPressed(true);\n growAnimation.current?.cancel();\n\n // Read once and share: the two helpers below both only need the\n // target's rect, and a second `getBoundingClientRect()` call back to\n // back with the first would be a redundant layout read.\n const rect = target.getBoundingClientRect();\n const size = determineRippleSize(rect);\n const {\n endPoint,\n startPoint\n } = getTranslationCoordinates(rect, positionEvent);\n ripple.style.width = size;\n ripple.style.height = size;\n growAnimation.current = ripple.animate({\n transform: [`translate(${startPoint.x}px, ${startPoint.y}px) scale(1)`, `translate(${endPoint.x}px, ${endPoint.y}px) scale(${rippleScale.current})`]\n }, {\n // Growth runs over a fixed duration regardless of how long the\n // press is held, so the token is spent here rather than named as a\n // constant — element.animate() is one of the two places a StyleX\n // token could not have gone.\n duration: motionDurationMs.long1,\n easing: motionEasing.standard,\n fill: 'forwards'\n });\n }, [determineRippleSize, getTranslationCoordinates]);\n const endPressAnimation = useCallback(async () => {\n rippleStartEvent.current = undefined;\n state.current = RippleState.Inactive;\n const animation = growAnimation.current;\n const elapsed = typeof animation?.currentTime === 'number' ? animation.currentTime : Infinity;\n\n // The floor on how briefly a ripple may be visible, so a quick tap reads\n // as a deliberate ripple rather than a flicker.\n if (elapsed >= motionDurationMs.medium1) {\n setPressed(false);\n return;\n }\n await new Promise(resolve => {\n setTimeout(resolve, motionDurationMs.medium1 - elapsed);\n });\n if (growAnimation.current !== animation) {\n // A newer press started; let it own the pressed state instead.\n return;\n }\n setPressed(false);\n }, []);\n\n // Reads through a function so a stale narrowing of `state.current` from\n // before the `await` below isn't (incorrectly) carried across it — the\n // ref can change via a different handler while this one is suspended.\n const getState = useCallback(() => state.current, []);\n const handlePointerDownAsync = useCallback(async (event: PointerEvent<HostElement>) => {\n if (!shouldReactToEvent(event)) {\n return;\n }\n rippleStartEvent.current = event;\n const target = event.currentTarget;\n if (!isTouch(event)) {\n state.current = RippleState.WaitingForClick;\n startPressAnimation(target, event);\n return;\n }\n\n // Delay so a scroll/swipe starting on the element doesn't flash a\n // ripple — only a held (or quickly released) touch counts as a press.\n state.current = RippleState.TouchDelay;\n await new Promise(resolve => {\n setTimeout(resolve, motionDurationMs.short2);\n });\n if (getState() !== RippleState.TouchDelay) {\n return;\n }\n state.current = RippleState.Holding;\n startPressAnimation(target, event);\n }, [getState, shouldReactToEvent, startPressAnimation]);\n const handlePointerDown = useCallback((event: PointerEvent<HostElement>) => {\n void handlePointerDownAsync(event);\n }, [handlePointerDownAsync]);\n const handlePointerUp = useCallback((event: PointerEvent<HostElement>) => {\n if (!shouldReactToEvent(event)) {\n return;\n }\n if (state.current === RippleState.Holding) {\n state.current = RippleState.WaitingForClick;\n return;\n }\n if (state.current === RippleState.TouchDelay) {\n // Released before the delay elapsed: treat as a completed tap.\n state.current = RippleState.WaitingForClick;\n startPressAnimation(event.currentTarget, rippleStartEvent.current);\n }\n }, [shouldReactToEvent, startPressAnimation]);\n const handlePointerLeave = useCallback((event: PointerEvent<HostElement>) => {\n if (isTouch(event) || !shouldReactToEvent(event)) {\n return;\n }\n if (state.current !== RippleState.Inactive) {\n void endPressAnimation();\n }\n }, [endPressAnimation, shouldReactToEvent]);\n const handlePointerCancel = useCallback((event: PointerEvent<HostElement>) => {\n if (!shouldReactToEvent(event)) {\n return;\n }\n void endPressAnimation();\n }, [endPressAnimation, shouldReactToEvent]);\n const handleClick = useCallback((event: MouseEvent<HostElement>) => {\n if (state.current === RippleState.WaitingForClick) {\n void endPressAnimation();\n return;\n }\n if (state.current === RippleState.Inactive) {\n // No pointerdown preceded this click — keyboard activation, a\n // programmatic `.click()`, or assistive-tech-synthesized activation.\n // Play a complete, centered press immediately.\n startPressAnimation(event.currentTarget);\n void endPressAnimation();\n }\n }, [endPressAnimation, startPressAnimation]);\n const handleContextMenu = useCallback(() => {\n void endPressAnimation();\n }, [endPressAnimation]);\n const {\n onClick: onClickProp,\n onContextMenu: onContextMenuProp,\n onPointerCancel: onPointerCancelProp,\n onPointerDown: onPointerDownProp,\n onPointerLeave: onPointerLeaveProp,\n onPointerUp: onPointerUpProp\n } = externalHandlers;\n const onClick = useCallback((event: MouseEvent<HostElement>) => {\n handleClick(event);\n onClickProp?.(event);\n }, [handleClick, onClickProp]);\n const onContextMenu = useCallback((event: MouseEvent<HostElement>) => {\n handleContextMenu();\n onContextMenuProp?.(event);\n }, [handleContextMenu, onContextMenuProp]);\n const onPointerCancel = useCallback((event: PointerEvent<HostElement>) => {\n handlePointerCancel(event);\n onPointerCancelProp?.(event);\n }, [handlePointerCancel, onPointerCancelProp]);\n const onPointerDown = useCallback((event: PointerEvent<HostElement>) => {\n handlePointerDown(event);\n onPointerDownProp?.(event);\n }, [handlePointerDown, onPointerDownProp]);\n const onPointerLeave = useCallback((event: PointerEvent<HostElement>) => {\n handlePointerLeave(event);\n onPointerLeaveProp?.(event);\n }, [handlePointerLeave, onPointerLeaveProp]);\n const onPointerUp = useCallback((event: PointerEvent<HostElement>) => {\n handlePointerUp(event);\n onPointerUpProp?.(event);\n }, [handlePointerUp, onPointerUpProp]);\n const handlers = useMemo(() => ({\n onClick,\n onContextMenu,\n onPointerCancel,\n onPointerDown,\n onPointerLeave,\n onPointerUp\n }), [onClick, onContextMenu, onPointerCancel, onPointerDown, onPointerLeave, onPointerUp]);\n const surface = useMemo(() => <span aria-hidden=\"true\" {...surfaceProps}>\n <span ref={rippleRef} {...stylex.props(rippleStyles.press, pressed && rippleStyles.pressed)} />\n </span>, [pressed]);\n\n // Two separate memos rather than one branching on `enabled`, so that\n // whichever branch is actually active stays keyed only on its own\n // inputs — the enabled result doesn't get a new identity every time\n // `externalHandlers` does (a component typically passes a fresh object\n // literal each render), and vice versa.\n const enabledResult = useMemo(() => ({\n handlers,\n surface\n }), [handlers, surface]);\n const disabledResult = useMemo(() => ({\n handlers: externalHandlers,\n surface: null\n }), [externalHandlers]);\n return enabled ? enabledResult : disabledResult;\n}\nexport { useRipple };"],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_index = require("./components/avatar/index.cjs");
3
- const require_index$1 = require("./components/badge/index.cjs");
4
- const require_index$2 = require("./components/button/index.cjs");
5
- const require_index$3 = require("./components/card/index.cjs");
6
- const require_index$4 = require("./components/chip/index.cjs");
7
- const require_index$5 = require("./components/code/index.cjs");
8
- const require_index$6 = require("./components/copy-field/index.cjs");
9
- const require_index$7 = require("./components/currency/index.cjs");
10
- const require_index$8 = require("./components/icon-button/index.cjs");
11
- const require_index$9 = require("./components/keycap/index.cjs");
12
- const require_index$10 = require("./components/link/index.cjs");
13
- const require_index$11 = require("./components/list-item/index.cjs");
14
- const require_index$12 = require("./components/separator/index.cjs");
15
- const require_index$13 = require("./components/sheet/index.cjs");
16
- const require_index$14 = require("./components/tabs/index.cjs");
17
- const require_index$15 = require("./components/text/index.cjs");
18
- const require_index$16 = require("./components/text-field/index.cjs");
19
- exports.Avatar = require_index.default;
20
- exports.Badge = require_index$1.default;
21
- exports.Button = require_index$2.default;
22
- exports.Card = require_index$3.default;
23
- exports.Chip = require_index$4.default;
24
- exports.Code = require_index$5.default;
25
- exports.CopyField = require_index$6.default;
26
- exports.Currency = require_index$7.default;
27
- exports.IconButton = require_index$8.default;
28
- exports.Keycap = require_index$9.default;
29
- exports.Link = require_index$10.default;
30
- exports.ListItem = require_index$11.default;
31
- exports.Separator = require_index$12.default;
32
- exports.Sheet = require_index$13.default;
33
- exports.Tabs = require_index$14.default;
34
- exports.Text = require_index$15.default;
35
- exports.TextField = require_index$16.default;
@@ -1,19 +0,0 @@
1
- import Avatar, { AvatarProps } from "./components/avatar/index.cjs";
2
- import Badge, { BadgeProps } from "./components/badge/index.cjs";
3
- import Button, { ButtonProps } from "./components/button/index.cjs";
4
- import Card, { CardProps } from "./components/card/index.cjs";
5
- import Chip, { ChipProps } from "./components/chip/index.cjs";
6
- import Code, { CodeProps } from "./components/code/index.cjs";
7
- import CopyField, { CopyFieldProps } from "./components/copy-field/index.cjs";
8
- import Currency, { CurrencyProps } from "./components/currency/index.cjs";
9
- import IconButton, { IconButtonProps } from "./components/icon-button/index.cjs";
10
- import Keycap, { KeycapProps } from "./components/keycap/index.cjs";
11
- import Link, { LinkProps } from "./components/link/index.cjs";
12
- import ListItem, { ListItemProps } from "./components/list-item/index.cjs";
13
- import Separator, { SeparatorProps } from "./components/separator/index.cjs";
14
- import Sheet, { SheetProps } from "./components/sheet/index.cjs";
15
- import Tabs, { TabsProps } from "./components/tabs/index.cjs";
16
- import Text, { TextProps } from "./components/text/index.cjs";
17
- import TextField, { TextFieldProps } from "./components/text-field/index.cjs";
18
- import "./components/index.cjs";
19
- export { Avatar, type AvatarProps, Badge, type BadgeProps, Button, type ButtonProps, Card, type CardProps, Chip, type ChipProps, Code, type CodeProps, CopyField, type CopyFieldProps, Currency, type CurrencyProps, IconButton, type IconButtonProps, Keycap, type KeycapProps, Link, type LinkProps, ListItem, type ListItemProps, Separator, type SeparatorProps, Sheet, type SheetProps, Tabs, type TabsProps, Text, TextField, type TextFieldProps, type TextProps };
@@ -1,121 +0,0 @@
1
- //#region node_modules/@stylexjs/stylex/lib/es/stylex.mjs
2
- var styleq = {};
3
- var hasRequiredStyleq;
4
- function requireStyleq() {
5
- if (hasRequiredStyleq) return styleq;
6
- hasRequiredStyleq = 1;
7
- Object.defineProperty(styleq, "__esModule", { value: true });
8
- styleq.styleq = void 0;
9
- var cache = /* @__PURE__ */ new WeakMap();
10
- var compiledKey = "$$css";
11
- function createStyleq(options) {
12
- var disableCache;
13
- var disableMix;
14
- var transform;
15
- if (options != null) {
16
- disableCache = options.disableCache === true;
17
- disableMix = options.disableMix === true;
18
- transform = options.transform;
19
- }
20
- return function styleq() {
21
- var definedProperties = [];
22
- var className = "";
23
- var inlineStyle = null;
24
- var debugString = "";
25
- var nextCache = disableCache ? null : cache;
26
- var styles = new Array(arguments.length);
27
- for (var i = 0; i < arguments.length; i++) styles[i] = arguments[i];
28
- while (styles.length > 0) {
29
- var possibleStyle = styles.pop();
30
- if (possibleStyle == null || possibleStyle === false) continue;
31
- if (Array.isArray(possibleStyle)) {
32
- for (var _i = 0; _i < possibleStyle.length; _i++) styles.push(possibleStyle[_i]);
33
- continue;
34
- }
35
- var style = transform != null ? transform(possibleStyle) : possibleStyle;
36
- if (style.$$css != null) {
37
- var classNameChunk = "";
38
- if (nextCache != null && nextCache.has(style)) {
39
- var cacheEntry = nextCache.get(style);
40
- if (cacheEntry != null) {
41
- classNameChunk = cacheEntry[0];
42
- debugString = cacheEntry[2];
43
- definedProperties.push.apply(definedProperties, cacheEntry[1]);
44
- nextCache = cacheEntry[3];
45
- }
46
- } else {
47
- var definedPropertiesChunk = [];
48
- for (var prop in style) {
49
- var value = style[prop];
50
- if (prop === compiledKey) {
51
- var compiledKeyValue = style[prop];
52
- if (compiledKeyValue !== true) debugString = debugString ? compiledKeyValue + "; " + debugString : compiledKeyValue;
53
- continue;
54
- }
55
- if (typeof value === "string" || value === null) {
56
- if (!definedProperties.includes(prop)) {
57
- definedProperties.push(prop);
58
- if (nextCache != null) definedPropertiesChunk.push(prop);
59
- if (typeof value === "string") classNameChunk += classNameChunk ? " " + value : value;
60
- }
61
- } else console.error("styleq: ".concat(prop, " typeof ").concat(String(value), " is not \"string\" or \"null\"."));
62
- }
63
- if (nextCache != null) {
64
- var weakMap = /* @__PURE__ */ new WeakMap();
65
- nextCache.set(style, [
66
- classNameChunk,
67
- definedPropertiesChunk,
68
- debugString,
69
- weakMap
70
- ]);
71
- nextCache = weakMap;
72
- }
73
- }
74
- if (classNameChunk) className = className ? classNameChunk + " " + className : classNameChunk;
75
- } else if (disableMix) {
76
- if (inlineStyle == null) inlineStyle = {};
77
- inlineStyle = Object.assign({}, style, inlineStyle);
78
- } else {
79
- var subStyle = null;
80
- for (var _prop in style) {
81
- var _value = style[_prop];
82
- if (_value !== void 0) {
83
- if (!definedProperties.includes(_prop)) {
84
- if (_value != null) {
85
- if (inlineStyle == null) inlineStyle = {};
86
- if (subStyle == null) subStyle = {};
87
- subStyle[_prop] = _value;
88
- }
89
- definedProperties.push(_prop);
90
- nextCache = null;
91
- }
92
- }
93
- }
94
- if (subStyle != null) inlineStyle = Object.assign(subStyle, inlineStyle);
95
- }
96
- }
97
- return [
98
- className,
99
- inlineStyle,
100
- debugString
101
- ];
102
- };
103
- }
104
- var styleq$1 = styleq.styleq = createStyleq();
105
- styleq$1.factory = createStyleq;
106
- return styleq;
107
- }
108
- var styleqExports = /*@__PURE__*/ requireStyleq();
109
- function props(...styles) {
110
- const [className, style, dataStyleSrc] = styleqExports.styleq(styles);
111
- const result = {};
112
- if (className != null && className !== "") result.className = className;
113
- if (style != null && Object.keys(style).length > 0) result.style = style;
114
- if (dataStyleSrc != null && dataStyleSrc !== "") result["data-style-src"] = dataStyleSrc;
115
- return result;
116
- }
117
- Object.freeze({});
118
- //#endregion
119
- exports.props = props;
120
-
121
- //# sourceMappingURL=stylex.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stylex.cjs","names":[],"sources":["../../../../../../../node_modules/@stylexjs/stylex/lib/es/stylex.mjs"],"sourcesContent":["var styleq = {};\n\nvar hasRequiredStyleq;\n\nfunction requireStyleq () {\n\tif (hasRequiredStyleq) return styleq;\n\thasRequiredStyleq = 1;\n\n\tObject.defineProperty(styleq, \"__esModule\", {\n\t value: true\n\t});\n\tstyleq.styleq = void 0;\n\tvar cache = new WeakMap();\n\tvar compiledKey = '$$css';\n\tfunction createStyleq(options) {\n\t var disableCache;\n\t var disableMix;\n\t var transform;\n\t if (options != null) {\n\t disableCache = options.disableCache === true;\n\t disableMix = options.disableMix === true;\n\t transform = options.transform;\n\t }\n\t return function styleq() {\n\t var definedProperties = [];\n\t var className = '';\n\t var inlineStyle = null;\n\t var debugString = '';\n\t var nextCache = disableCache ? null : cache;\n\t var styles = new Array(arguments.length);\n\t for (var i = 0; i < arguments.length; i++) {\n\t styles[i] = arguments[i];\n\t }\n\t while (styles.length > 0) {\n\t var possibleStyle = styles.pop();\n\t if (possibleStyle == null || possibleStyle === false) {\n\t continue;\n\t }\n\t if (Array.isArray(possibleStyle)) {\n\t for (var _i = 0; _i < possibleStyle.length; _i++) {\n\t styles.push(possibleStyle[_i]);\n\t }\n\t continue;\n\t }\n\t var style = transform != null ? transform(possibleStyle) : possibleStyle;\n\t if (style.$$css != null) {\n\t var classNameChunk = '';\n\t if (nextCache != null && nextCache.has(style)) {\n\t var cacheEntry = nextCache.get(style);\n\t if (cacheEntry != null) {\n\t classNameChunk = cacheEntry[0];\n\t debugString = cacheEntry[2];\n\t definedProperties.push.apply(definedProperties, cacheEntry[1]);\n\t nextCache = cacheEntry[3];\n\t }\n\t } else {\n\t var definedPropertiesChunk = [];\n\t for (var prop in style) {\n\t var value = style[prop];\n\t if (prop === compiledKey) {\n\t var compiledKeyValue = style[prop];\n\t if (compiledKeyValue !== true) {\n\t debugString = debugString ? compiledKeyValue + '; ' + debugString : compiledKeyValue;\n\t }\n\t continue;\n\t }\n\t if (typeof value === 'string' || value === null) {\n\t if (!definedProperties.includes(prop)) {\n\t definedProperties.push(prop);\n\t if (nextCache != null) {\n\t definedPropertiesChunk.push(prop);\n\t }\n\t if (typeof value === 'string') {\n\t classNameChunk += classNameChunk ? ' ' + value : value;\n\t }\n\t }\n\t } else {\n\t console.error(\"styleq: \".concat(prop, \" typeof \").concat(String(value), \" is not \\\"string\\\" or \\\"null\\\".\"));\n\t }\n\t }\n\t if (nextCache != null) {\n\t var weakMap = new WeakMap();\n\t nextCache.set(style, [classNameChunk, definedPropertiesChunk, debugString, weakMap]);\n\t nextCache = weakMap;\n\t }\n\t }\n\t if (classNameChunk) {\n\t className = className ? classNameChunk + ' ' + className : classNameChunk;\n\t }\n\t } else {\n\t if (disableMix) {\n\t if (inlineStyle == null) {\n\t inlineStyle = {};\n\t }\n\t inlineStyle = Object.assign({}, style, inlineStyle);\n\t } else {\n\t var subStyle = null;\n\t for (var _prop in style) {\n\t var _value = style[_prop];\n\t if (_value !== undefined) {\n\t if (!definedProperties.includes(_prop)) {\n\t if (_value != null) {\n\t if (inlineStyle == null) {\n\t inlineStyle = {};\n\t }\n\t if (subStyle == null) {\n\t subStyle = {};\n\t }\n\t subStyle[_prop] = _value;\n\t }\n\t definedProperties.push(_prop);\n\t nextCache = null;\n\t }\n\t }\n\t }\n\t if (subStyle != null) {\n\t inlineStyle = Object.assign(subStyle, inlineStyle);\n\t }\n\t }\n\t }\n\t }\n\t var styleProps = [className, inlineStyle, debugString];\n\t return styleProps;\n\t };\n\t}\n\tvar styleq$1 = styleq.styleq = createStyleq();\n\tstyleq$1.factory = createStyleq;\n\treturn styleq;\n}\n\nvar styleqExports = /*@__PURE__*/ requireStyleq();\n\nconst errorForFn = name => new Error(`Unexpected 'stylex.${name}' call at runtime. Styles must be compiled by '@stylexjs/babel-plugin'.`);\nconst errorForType = key => errorForFn(`types.${key}`);\nconst create = function stylexCreate(_styles) {\n throw errorForFn('create');\n};\nconst createTheme = (_baseTokens, _overrides) => {\n throw errorForFn('createTheme');\n};\nconst defineConsts = function stylexDefineConsts(_styles) {\n throw errorForFn('defineConsts');\n};\nconst defineVars = function stylexDefineVars(_styles) {\n throw errorForFn('defineVars');\n};\nconst unstable_conditional = function stylexConditional(_value) {\n throw errorForFn('unstable_conditional');\n};\nconst unstable_defineVarsNested = function stylexDefineVarsNested(_styles) {\n throw errorForFn('unstable_defineVarsNested');\n};\nconst unstable_defineConstsNested = function stylexDefineConstsNested(_styles) {\n throw errorForFn('unstable_defineConstsNested');\n};\nconst unstable_createThemeNested = (_baseTokens, _overrides) => {\n throw errorForFn('unstable_createThemeNested');\n};\nconst defineMarker = () => {\n throw errorForFn('defineMarker');\n};\nconst firstThatWorks = (..._styles) => {\n throw errorForFn('firstThatWorks');\n};\nconst keyframes = _keyframes => {\n throw errorForFn('keyframes');\n};\nconst positionTry = _positionTry => {\n throw errorForFn('positionTry');\n};\nfunction props(...styles) {\n const [className, style, dataStyleSrc] = styleqExports.styleq(styles);\n const result = {};\n if (className != null && className !== '') {\n result.className = className;\n }\n if (style != null && Object.keys(style).length > 0) {\n result.style = style;\n }\n if (dataStyleSrc != null && dataStyleSrc !== '') {\n result['data-style-src'] = dataStyleSrc;\n }\n return result;\n}\nconst toKebabCase = str => str.replace(/([A-Z])/g, '-$1').toLowerCase();\nfunction attrs(...styles) {\n const {\n className,\n style,\n 'data-style-src': dataStyleSrc\n } = props.apply(this, styles);\n const result = {};\n if (className != null) {\n result.class = className;\n }\n if (style != null) {\n result.style = Object.entries(style).map(([key, value]) => `${toKebabCase(key)}:${value}`).join(';');\n }\n if (dataStyleSrc != null) {\n result['data-style-src'] = dataStyleSrc;\n }\n return result;\n}\nconst viewTransitionClass = _viewTransitionClass => {\n throw errorForFn('viewTransitionClass');\n};\nconst defaultMarker = () => {\n throw errorForFn('defaultMarker');\n};\nconst when = {\n ancestor: _p => {\n throw errorForFn('when.ancestor');\n },\n descendant: _p => {\n throw errorForFn('when.descendant');\n },\n siblingBefore: _p => {\n throw errorForFn('when.siblingBefore');\n },\n siblingAfter: _p => {\n throw errorForFn('when.siblingAfter');\n },\n anySibling: _p => {\n throw errorForFn('when.anySibling');\n }\n};\nconst env = Object.freeze({});\nconst types = {\n angle: _v => {\n throw errorForType('angle');\n },\n color: _v => {\n throw errorForType('color');\n },\n url: _v => {\n throw errorForType('url');\n },\n image: _v => {\n throw errorForType('image');\n },\n integer: _v => {\n throw errorForType('integer');\n },\n lengthPercentage: _v => {\n throw errorForType('lengthPercentage');\n },\n length: _v => {\n throw errorForType('length');\n },\n percentage: _v => {\n throw errorForType('percentage');\n },\n number: _v => {\n throw errorForType('number');\n },\n resolution: _v => {\n throw errorForType('resolution');\n },\n time: _v => {\n throw errorForType('time');\n },\n transformFunction: _v => {\n throw errorForType('transformFunction');\n },\n transformList: _v => {\n throw errorForType('transformList');\n }\n};\nconst legacyMerge = /*@__PURE__*/ function () {\n function _legacyMerge(...styles) {\n const [className] = styleqExports.styleq(styles);\n return className;\n }\n _legacyMerge.create = create;\n _legacyMerge.createTheme = createTheme;\n _legacyMerge.defineConsts = defineConsts;\n _legacyMerge.defineMarker = defineMarker;\n _legacyMerge.defineVars = defineVars;\n _legacyMerge.defaultMarker = defaultMarker;\n _legacyMerge.firstThatWorks = firstThatWorks;\n _legacyMerge.keyframes = keyframes;\n _legacyMerge.positionTry = positionTry;\n _legacyMerge.props = props;\n _legacyMerge.attrs = attrs;\n _legacyMerge.types = types;\n _legacyMerge.when = when;\n _legacyMerge.viewTransitionClass = viewTransitionClass;\n _legacyMerge.env = env;\n _legacyMerge.unstable_conditional = unstable_conditional;\n _legacyMerge.unstable_defineVarsNested = unstable_defineVarsNested;\n _legacyMerge.unstable_defineConstsNested = unstable_defineConstsNested;\n _legacyMerge.unstable_createThemeNested = unstable_createThemeNested;\n return _legacyMerge;\n}();\n\nexport { attrs, create, createTheme, defaultMarker, defineConsts, defineMarker, defineVars, env, firstThatWorks, keyframes, legacyMerge, positionTry, props, types, unstable_conditional, unstable_createThemeNested, unstable_defineConstsNested, unstable_defineVarsNested, viewTransitionClass, when };\n"],"x_google_ignoreList":[0],"mappings":"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"}