@ingamigo/ui 1.2.2 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/index.d.ts +354 -13
  2. package/dist/index.js +911 -8
  3. package/dist/index.js.map +1 -1
  4. package/package.json +4 -2
  5. package/dist/components/button/button.d.ts +0 -8
  6. package/dist/components/button/button.d.ts.map +0 -1
  7. package/dist/components/button/button.js +0 -7
  8. package/dist/components/button/button.js.map +0 -1
  9. package/dist/components/button/button.styles.d.ts +0 -8
  10. package/dist/components/button/button.styles.d.ts.map +0 -1
  11. package/dist/components/button/button.styles.js +0 -117
  12. package/dist/components/button/button.styles.js.map +0 -1
  13. package/dist/components/input/input.d.ts +0 -7
  14. package/dist/components/input/input.d.ts.map +0 -1
  15. package/dist/components/input/input.js +0 -7
  16. package/dist/components/input/input.js.map +0 -1
  17. package/dist/components/input/input.styles.d.ts +0 -9
  18. package/dist/components/input/input.styles.d.ts.map +0 -1
  19. package/dist/components/input/input.styles.js +0 -83
  20. package/dist/components/input/input.styles.js.map +0 -1
  21. package/dist/components/logo/logo.d.ts +0 -9
  22. package/dist/components/logo/logo.d.ts.map +0 -1
  23. package/dist/components/logo/logo.js +0 -77
  24. package/dist/components/logo/logo.js.map +0 -1
  25. package/dist/components/logo/logo.styles.d.ts +0 -56
  26. package/dist/components/logo/logo.styles.d.ts.map +0 -1
  27. package/dist/components/logo/logo.styles.js +0 -127
  28. package/dist/components/logo/logo.styles.js.map +0 -1
  29. package/dist/components/segmented-control/segmented-control.d.ts +0 -16
  30. package/dist/components/segmented-control/segmented-control.d.ts.map +0 -1
  31. package/dist/components/segmented-control/segmented-control.js +0 -50
  32. package/dist/components/segmented-control/segmented-control.js.map +0 -1
  33. package/dist/components/segmented-control/segmented-control.stories .d.ts +0 -25
  34. package/dist/components/segmented-control/segmented-control.stories .d.ts.map +0 -1
  35. package/dist/components/segmented-control/segmented-control.stories .js +0 -91
  36. package/dist/components/segmented-control/segmented-control.stories .js.map +0 -1
  37. package/dist/components/segmented-control/segmented-control.styles.d.ts +0 -11
  38. package/dist/components/segmented-control/segmented-control.styles.d.ts.map +0 -1
  39. package/dist/components/segmented-control/segmented-control.styles.js +0 -83
  40. package/dist/components/segmented-control/segmented-control.styles.js.map +0 -1
  41. package/dist/components/typography/typography.d.ts +0 -9
  42. package/dist/components/typography/typography.d.ts.map +0 -1
  43. package/dist/components/typography/typography.js +0 -17
  44. package/dist/components/typography/typography.js.map +0 -1
  45. package/dist/components/typography/typography.styles.d.ts +0 -5
  46. package/dist/components/typography/typography.styles.d.ts.map +0 -1
  47. package/dist/components/typography/typography.styles.js +0 -63
  48. package/dist/components/typography/typography.styles.js.map +0 -1
  49. package/dist/index.d.ts.map +0 -1
  50. package/dist/theme/ThemeProvider.d.ts +0 -6
  51. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  52. package/dist/theme/ThemeProvider.js +0 -8
  53. package/dist/theme/ThemeProvider.js.map +0 -1
  54. package/dist/theme/index.d.ts +0 -4
  55. package/dist/theme/index.d.ts.map +0 -1
  56. package/dist/theme/index.js +0 -3
  57. package/dist/theme/index.js.map +0 -1
  58. package/dist/theme/theme.d.ts +0 -458
  59. package/dist/theme/theme.d.ts.map +0 -1
  60. package/dist/theme/theme.js +0 -210
  61. package/dist/theme/theme.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,9 +1,912 @@
1
- "use client";
2
- export { ThemeProvider } from "./theme";
3
- export { theme } from "./theme";
4
- export { default as Button } from "./components/button/button";
5
- export { default as Input } from "./components/input/input";
6
- export { default as Typography } from "./components/typography/typography";
7
- export { default as SegmentedControl } from "./components/segmented-control/segmented-control";
8
- export { default as Logo } from "./components/logo/logo";
1
+ "use client";import { ThemeProvider as ThemeProvider$1 } from '@emotion/react';
2
+ import { jsx, jsxs } from 'react/jsx-runtime';
3
+ import styled5 from '@emotion/styled';
4
+ import { useRef, useState, useEffect } from 'react';
5
+
6
+ // src/theme/theme.ts
7
+ var primitives = {
8
+ colors: {
9
+ white: "#ffffff",
10
+ black: "#000000",
11
+ neutral: {
12
+ 50: "#f5f5f5",
13
+ 100: "#e9e9ea",
14
+ 200: "#d5d5d7",
15
+ 300: "#b9b9bd",
16
+ 400: "#97979d",
17
+ 500: "#7b7b82",
18
+ 600: "#5f6066",
19
+ 700: "#45464b",
20
+ 800: "#2e3035",
21
+ 900: "#1d1e20",
22
+ 950: "#141414"
23
+ },
24
+ brand: {
25
+ 400: "#63c69d",
26
+ 500: "#4db288",
27
+ 600: "#3d9873"
28
+ },
29
+ success: "#4db288",
30
+ warning: "#e7b94c",
31
+ danger: "#cc5c6f"
32
+ },
33
+ spacing: {
34
+ 1: "4px",
35
+ 2: "8px",
36
+ 3: "12px",
37
+ 4: "16px",
38
+ 5: "20px",
39
+ 6: "24px",
40
+ 7: "28px",
41
+ 8: "32px",
42
+ 10: "40px",
43
+ 12: "48px",
44
+ 16: "64px",
45
+ 20: "80px"
46
+ },
47
+ radius: {
48
+ none: "0px",
49
+ xs: "8px",
50
+ sm: "12px",
51
+ md: "16px",
52
+ lg: "20px",
53
+ xl: "24px",
54
+ "2xl": "28px",
55
+ full: "9999px"
56
+ },
57
+ typography: {
58
+ fontFamily: `
59
+ Inter,
60
+ system-ui,
61
+ -apple-system,
62
+ BlinkMacSystemFont,
63
+ "Segoe UI",
64
+ Roboto,
65
+ Helvetica,
66
+ Arial,
67
+ sans-serif
68
+ `,
69
+ fontSize: {
70
+ xs: "12px",
71
+ sm: "14px",
72
+ md: "16px",
73
+ lg: "18px",
74
+ xl: "20px",
75
+ "2xl": "24px",
76
+ "3xl": "32px",
77
+ "4xl": "36px",
78
+ "5xl": "40px"
79
+ },
80
+ fontWeight: {
81
+ regular: 400,
82
+ medium: 500,
83
+ semibold: 600,
84
+ bold: 700
85
+ },
86
+ lineHeight: {
87
+ tight: 1.15,
88
+ normal: 1.4,
89
+ relaxed: 1.6
90
+ }
91
+ },
92
+ shadows: {
93
+ sm: "0 2px 8px rgb(0 0 0 / 18%)",
94
+ md: "0 6px 16px rgb(0 0 0 / 24%)",
95
+ lg: "0 12px 32px rgb(0 0 0 / 30%)",
96
+ xl: "0 20px 48px rgb(0 0 0 / 36%)"
97
+ },
98
+ motion: {
99
+ duration: {
100
+ fast: "150ms",
101
+ normal: "200ms",
102
+ slow: "300ms"
103
+ },
104
+ ease: {
105
+ standard: "ease"
106
+ }
107
+ }
108
+ };
109
+ var lightSemantic = {
110
+ background: {
111
+ primary: primitives.colors.neutral[50],
112
+ secondary: primitives.colors.white
113
+ },
114
+ surface: {
115
+ primary: primitives.colors.white,
116
+ secondary: primitives.colors.neutral[50],
117
+ tertiary: primitives.colors.neutral[100]
118
+ },
119
+ text: {
120
+ primary: primitives.colors.neutral[950],
121
+ secondary: primitives.colors.neutral[600],
122
+ tertiary: primitives.colors.neutral[500],
123
+ disabled: primitives.colors.neutral[400],
124
+ inverse: primitives.colors.white
125
+ },
126
+ border: {
127
+ default: primitives.colors.neutral[200],
128
+ strong: primitives.colors.neutral[300],
129
+ focus: primitives.colors.brand[500]
130
+ },
131
+ action: {
132
+ primary: primitives.colors.brand[500],
133
+ primaryHover: primitives.colors.brand[600]
134
+ },
135
+ status: {
136
+ success: primitives.colors.success,
137
+ warning: primitives.colors.warning,
138
+ danger: primitives.colors.danger
139
+ },
140
+ semanticTypography: {
141
+ fontSize: {
142
+ body: primitives.typography.fontSize.md,
143
+ bodySm: primitives.typography.fontSize.sm,
144
+ bodyLg: primitives.typography.fontSize.lg,
145
+ label: primitives.typography.fontSize.sm,
146
+ heading1: primitives.typography.fontSize["4xl"],
147
+ heading2: primitives.typography.fontSize["3xl"],
148
+ heading3: primitives.typography.fontSize["2xl"]
149
+ },
150
+ fontWeight: {
151
+ heading: primitives.typography.fontWeight.bold,
152
+ body: primitives.typography.fontWeight.regular,
153
+ label: primitives.typography.fontWeight.medium
154
+ }
155
+ },
156
+ radiusSemantic: {
157
+ control: primitives.radius.md,
158
+ card: primitives.radius.xl,
159
+ container: primitives.radius.xl
160
+ },
161
+ elevation: {
162
+ surface: primitives.shadows.sm,
163
+ floating: primitives.shadows.md,
164
+ overlay: primitives.shadows.lg
165
+ },
166
+ motionSemantic: {
167
+ interaction: primitives.motion.duration.normal,
168
+ transition: primitives.motion.ease.standard
169
+ }
170
+ };
171
+ ({
172
+ background: {
173
+ primary: primitives.colors.neutral[950],
174
+ secondary: primitives.colors.neutral[900]
175
+ },
176
+ surface: {
177
+ primary: primitives.colors.neutral[900],
178
+ secondary: primitives.colors.neutral[800],
179
+ tertiary: primitives.colors.neutral[700]
180
+ },
181
+ text: {
182
+ primary: primitives.colors.white,
183
+ secondary: primitives.colors.neutral[300],
184
+ tertiary: primitives.colors.neutral[400],
185
+ disabled: primitives.colors.neutral[500],
186
+ inverse: primitives.colors.neutral[950]
187
+ },
188
+ border: {
189
+ default: primitives.colors.neutral[800],
190
+ strong: primitives.colors.neutral[700],
191
+ focus: primitives.colors.brand[400]
192
+ },
193
+ action: {
194
+ primary: primitives.colors.brand[500],
195
+ primaryHover: primitives.colors.brand[600]
196
+ },
197
+ status: {
198
+ success: primitives.colors.success,
199
+ warning: primitives.colors.warning,
200
+ danger: primitives.colors.danger
201
+ }});
202
+ var lightTheme = {
203
+ ...primitives,
204
+ ...lightSemantic
205
+ };
206
+ var theme = lightTheme;
207
+ function ThemeProvider({
208
+ children
209
+ }) {
210
+ return /* @__PURE__ */ jsx(ThemeProvider$1, { theme, children });
211
+ }
212
+ var StyledButton = styled5.button`
213
+ display: inline-flex;
214
+ align-items: center;
215
+ justify-content: center;
216
+ gap: ${({ theme: theme2 }) => theme2.spacing[2]};
217
+
218
+ border: 1px solid transparent;
219
+ border-radius: ${({ theme: theme2 }) => theme2.radiusSemantic.control};
220
+
221
+ font-family: ${({ theme: theme2 }) => theme2.typography.fontFamily};
222
+ font-weight: ${({ theme: theme2 }) => theme2.semanticTypography.fontWeight.label};
223
+
224
+ line-height: 1;
225
+ white-space: nowrap;
226
+
227
+ cursor: pointer;
228
+ user-select: none;
229
+
230
+ transition:
231
+ background-color ${({ theme: theme2 }) => theme2.motionSemantic.interaction}
232
+ ${({ theme: theme2 }) => theme2.motionSemantic.transition},
233
+ color ${({ theme: theme2 }) => theme2.motionSemantic.interaction}
234
+ ${({ theme: theme2 }) => theme2.motionSemantic.transition},
235
+ border-color ${({ theme: theme2 }) => theme2.motionSemantic.interaction}
236
+ ${({ theme: theme2 }) => theme2.motionSemantic.transition},
237
+ box-shadow ${({ theme: theme2 }) => theme2.motionSemantic.interaction}
238
+ ${({ theme: theme2 }) => theme2.motionSemantic.transition};
239
+
240
+ ${({ theme: theme2, size }) => {
241
+ switch (size) {
242
+ case "small":
243
+ return `
244
+ min-height: 32px;
245
+ padding: 0 ${theme2.spacing[3]};
246
+ font-size: ${theme2.semanticTypography.fontSize.bodySm};
247
+ `;
248
+ case "large":
249
+ return `
250
+ min-height: 44px;
251
+ padding: 0 ${theme2.spacing[5]};
252
+ font-size: ${theme2.semanticTypography.fontSize.bodyLg};
253
+ `;
254
+ case "icon":
255
+ return `
256
+ min-width: 36px;
257
+ min-height: 36px;
258
+ padding: ${theme2.spacing[2]};
259
+ aspect-ratio: 1 / 1;
260
+ `;
261
+ case "medium":
262
+ default:
263
+ return `
264
+ min-height: 36px;
265
+ padding: 0 ${theme2.spacing[4]};
266
+ font-size: ${theme2.semanticTypography.fontSize.body};
267
+ `;
268
+ }
269
+ }}
270
+
271
+ ${({ theme: theme2, variant }) => {
272
+ switch (variant) {
273
+ case "primary":
274
+ return `
275
+ background: ${theme2.action.primary};
276
+ color: ${theme2.text.inverse};
277
+ border-color: ${theme2.action.primary};
278
+
279
+ &:hover:not(:disabled) {
280
+ background: ${theme2.action.primaryHover};
281
+ border-color: ${theme2.action.primaryHover};
282
+ }
283
+ `;
284
+ case "secondary":
285
+ return `
286
+ background: ${theme2.surface.secondary};
287
+ color: ${theme2.text.primary};
288
+ border-color: ${theme2.border.default};
289
+
290
+ &:hover:not(:disabled) {
291
+ background: ${theme2.surface.tertiary};
292
+ border-color: ${theme2.border.strong};
293
+ }
294
+ `;
295
+ case "ghost":
296
+ return `
297
+ background: transparent;
298
+ color: ${theme2.text.secondary};
299
+ border-color: transparent;
300
+
301
+ &:hover:not(:disabled) {
302
+ background: ${theme2.surface.tertiary};
303
+ color: ${theme2.text.primary};
304
+ }
305
+
306
+ &:active:not(:disabled) {
307
+ background: ${theme2.surface.tertiary};
308
+ }
309
+ `;
310
+ }
311
+ }}
312
+
313
+ &:focus-visible {
314
+ outline: 2px solid ${({ theme: theme2 }) => theme2.border.focus};
315
+ outline-offset: 2px;
316
+ }
317
+
318
+ &:disabled {
319
+ cursor: not-allowed;
320
+ opacity: 0.5;
321
+ }
322
+
323
+ &[aria-busy="true"] {
324
+ cursor: wait;
325
+ }
326
+ `;
327
+ var Button = ({
328
+ variant = "primary",
329
+ size = "medium",
330
+ children,
331
+ ...props
332
+ }) => {
333
+ return /* @__PURE__ */ jsx(
334
+ StyledButton,
335
+ {
336
+ variant,
337
+ size,
338
+ ...props,
339
+ children
340
+ }
341
+ );
342
+ };
343
+ var button_default = Button;
344
+ var StyledInput = styled5.input`
345
+ display: block;
346
+ width: 100%;
347
+
348
+ border: 1px solid ${({ theme: theme2 }) => theme2.border.default};
349
+ border-radius: ${({ theme: theme2 }) => theme2.radius.md};
350
+
351
+ background: ${({ theme: theme2 }) => theme2.surface.primary};
352
+ color: ${({ theme: theme2 }) => theme2.text.primary};
353
+
354
+ font-family:
355
+ Inter,
356
+ system-ui,
357
+ -apple-system,
358
+ BlinkMacSystemFont,
359
+ "Segoe UI",
360
+ Roboto,
361
+ Helvetica,
362
+ Arial,
363
+ sans-serif;
364
+ font-weight: ${({ theme: theme2 }) => theme2.typography.fontWeight.regular};
365
+ line-height: 1;
366
+
367
+ outline: none;
368
+
369
+ transition:
370
+ background-color ${({ theme: theme2 }) => theme2.motion.duration.normal}
371
+ ${({ theme: theme2 }) => theme2.motion.ease.standard},
372
+ border-color ${({ theme: theme2 }) => theme2.motion.duration.normal}
373
+ ${({ theme: theme2 }) => theme2.motion.ease.standard},
374
+ box-shadow ${({ theme: theme2 }) => theme2.motion.duration.normal}
375
+ ${({ theme: theme2 }) => theme2.motion.ease.standard},
376
+ color ${({ theme: theme2 }) => theme2.motion.duration.normal}
377
+ ${({ theme: theme2 }) => theme2.motion.ease.standard};
378
+
379
+ &::placeholder {
380
+ color: ${({ theme: theme2 }) => theme2.text.tertiary};
381
+ }
382
+
383
+ &:hover:not(:disabled) {
384
+ border-color: ${({ theme: theme2 }) => theme2.border.strong};
385
+ }
386
+
387
+ &:focus {
388
+ border-color: ${({ theme: theme2 }) => theme2.border.focus};
389
+
390
+ box-shadow: 0 0 0 3px
391
+ color-mix(
392
+ in srgb,
393
+ ${({ theme: theme2 }) => theme2.border.focus} 18%,
394
+ transparent
395
+ );
396
+ }
397
+
398
+ &:disabled {
399
+ cursor: not-allowed;
400
+ opacity: 0.5;
401
+ background: ${({ theme: theme2 }) => theme2.surface.secondary};
402
+ }
403
+
404
+ ${({ theme: theme2, inputSize }) => inputSize === "small" && `
405
+ min-height: 32px;
406
+ padding: 0 ${theme2.spacing[3]};
407
+ font-size: ${theme2.typography.fontSize.sm};
408
+ `}
409
+
410
+ ${({ theme: theme2, inputSize }) => inputSize === "medium" && `
411
+ min-height: 40px;
412
+ padding: 0 ${theme2.spacing[4]};
413
+ font-size: ${theme2.typography.fontSize.md};
414
+ `}
415
+
416
+ ${({ theme: theme2, inputSize }) => inputSize === "large" && `
417
+ min-height: 48px;
418
+ padding: 0 ${theme2.spacing[4]};
419
+ font-size: ${theme2.typography.fontSize.lg};
420
+ `}
421
+ `;
422
+ var Input = ({
423
+ inputSize = "medium",
424
+ ...props
425
+ }) => {
426
+ return /* @__PURE__ */ jsx(
427
+ StyledInput,
428
+ {
429
+ inputSize,
430
+ ...props
431
+ }
432
+ );
433
+ };
434
+ var input_default = Input;
435
+ var StyledTypography = styled5.span`
436
+ margin: 0;
437
+
438
+ font-family:
439
+ Inter,
440
+ system-ui,
441
+ -apple-system,
442
+ BlinkMacSystemFont,
443
+ "Segoe UI",
444
+ Roboto,
445
+ Helvetica,
446
+ Arial,
447
+ sans-serif;
448
+
449
+ color: ${({ theme: theme2 }) => theme2.text.primary};
450
+
451
+ &[data-variant="heading-1"] {
452
+ font-size: ${({ theme: theme2 }) => theme2.typography.fontSize["4xl"]};
453
+ font-weight: ${({ theme: theme2 }) => theme2.typography.fontWeight.bold};
454
+ line-height: 1.15;
455
+ letter-spacing: -0.02em;
456
+ }
457
+
458
+ &[data-variant="heading-2"] {
459
+ font-size: ${({ theme: theme2 }) => theme2.typography.fontSize["3xl"]};
460
+ font-weight: ${({ theme: theme2 }) => theme2.typography.fontWeight.bold};
461
+ line-height: 1.15;
462
+ letter-spacing: -0.02em;
463
+ }
464
+
465
+ &[data-variant="heading-3"] {
466
+ font-size: ${({ theme: theme2 }) => theme2.typography.fontSize["2xl"]};
467
+ font-weight: ${({ theme: theme2 }) => theme2.typography.fontWeight.bold};
468
+ line-height: 1.15;
469
+ letter-spacing: -0.015em;
470
+ }
471
+
472
+ &[data-variant="body-lg"] {
473
+ font-size: ${({ theme: theme2 }) => theme2.typography.fontSize.lg};
474
+ font-weight: ${({ theme: theme2 }) => theme2.typography.fontWeight.regular};
475
+ line-height: 1.4;
476
+ }
477
+
478
+ &[data-variant="body"] {
479
+ font-size: ${({ theme: theme2 }) => theme2.typography.fontSize.md};
480
+ font-weight: ${({ theme: theme2 }) => theme2.typography.fontWeight.regular};
481
+ line-height: 1.4;
482
+ }
483
+
484
+ &[data-variant="body-sm"] {
485
+ font-size: ${({ theme: theme2 }) => theme2.typography.fontSize.sm};
486
+ font-weight: ${({ theme: theme2 }) => theme2.typography.fontWeight.regular};
487
+ line-height: 1.4;
488
+ }
489
+
490
+ &[data-variant="label"] {
491
+ font-size: ${({ theme: theme2 }) => theme2.typography.fontSize.sm};
492
+ font-weight: ${({ theme: theme2 }) => theme2.typography.fontWeight.medium};
493
+ line-height: 1.4;
494
+ }
495
+ `;
496
+ var variantElements = {
497
+ "heading-1": "h1",
498
+ "heading-2": "h2",
499
+ "heading-3": "h3",
500
+ "body-lg": "p",
501
+ body: "p",
502
+ "body-sm": "p",
503
+ label: "span"
504
+ };
505
+ var Typography = ({
506
+ variant = "body",
507
+ children,
508
+ ...props
509
+ }) => {
510
+ const Component = variantElements[variant];
511
+ return /* @__PURE__ */ jsx(
512
+ StyledTypography,
513
+ {
514
+ as: Component,
515
+ "data-variant": variant,
516
+ ...props,
517
+ children
518
+ }
519
+ );
520
+ };
521
+ var typography_default = Typography;
522
+ var StyledSegmentedControl = styled5.div`
523
+ display: inline-flex;
524
+ align-items: center;
525
+ gap: 2px;
526
+
527
+ padding: ${({ theme: theme2 }) => theme2.spacing[1]};
528
+
529
+ background: ${({ theme: theme2 }) => theme2.surface.secondary};
530
+ border: 1px solid ${({ theme: theme2 }) => theme2.border.default};
531
+ border-radius: ${({ theme: theme2 }) => theme2.radius.full};
532
+ `;
533
+ var StyledSegment = styled5.button`
534
+ display: inline-flex;
535
+ align-items: center;
536
+ justify-content: center;
537
+
538
+ border: 0;
539
+ border-radius: ${({ theme: theme2 }) => theme2.radius.full};
540
+
541
+ background: transparent;
542
+ color: ${({ theme: theme2 }) => theme2.text.secondary};
543
+
544
+ font-family: ${({ theme: theme2 }) => theme2.typography.fontFamily};
545
+ font-weight: ${({ theme: theme2 }) => theme2.semanticTypography.fontWeight.label};
546
+ line-height: 1;
547
+
548
+ cursor: pointer;
549
+ user-select: none;
550
+
551
+ transition:
552
+ background-color ${({ theme: theme2 }) => theme2.motionSemantic.interaction}
553
+ ${({ theme: theme2 }) => theme2.motionSemantic.transition},
554
+ color ${({ theme: theme2 }) => theme2.motionSemantic.interaction}
555
+ ${({ theme: theme2 }) => theme2.motionSemantic.transition},
556
+ box-shadow ${({ theme: theme2 }) => theme2.motionSemantic.interaction}
557
+ ${({ theme: theme2 }) => theme2.motionSemantic.transition};
558
+
559
+ ${({ theme: theme2, size }) => {
560
+ switch (size) {
561
+ case "small":
562
+ return `
563
+ min-height: 32px;
564
+ padding: 0 ${theme2.spacing[3]};
565
+ font-size: ${theme2.semanticTypography.fontSize.bodySm};
566
+ `;
567
+ case "large":
568
+ return `
569
+ min-height: 44px;
570
+ padding: 0 ${theme2.spacing[5]};
571
+ font-size: ${theme2.semanticTypography.fontSize.bodyLg};
572
+ `;
573
+ case "medium":
574
+ default:
575
+ return `
576
+ min-height: 36px;
577
+ padding: 0 ${theme2.spacing[4]};
578
+ font-size: ${theme2.semanticTypography.fontSize.body};
579
+ `;
580
+ }
581
+ }}
582
+
583
+ &:hover:not(:disabled) {
584
+ color: ${({ theme: theme2 }) => theme2.text.primary};
585
+ }
586
+
587
+ &:focus-visible {
588
+ outline: 2px solid ${({ theme: theme2 }) => theme2.border.focus};
589
+ outline-offset: 2px;
590
+ }
591
+
592
+ &:disabled {
593
+ cursor: not-allowed;
594
+ opacity: 0.5;
595
+ }
596
+
597
+ &[aria-checked="true"] {
598
+ background: ${({ theme: theme2 }) => theme2.surface.primary};
599
+ color: ${({ theme: theme2 }) => theme2.text.primary};
600
+ box-shadow: ${({ theme: theme2 }) => theme2.elevation.surface};
601
+ }
602
+ `;
603
+ var SegmentedControl = ({
604
+ options,
605
+ value,
606
+ onChange,
607
+ size = "medium",
608
+ disabled = false
609
+ }) => {
610
+ const refs = useRef([]);
611
+ const enabledOptions = options.filter(
612
+ (option) => !option.disabled
613
+ );
614
+ const handleKeyDown = (event, currentIndex) => {
615
+ if (disabled || currentIndex === -1) {
616
+ return;
617
+ }
618
+ let nextIndex;
619
+ switch (event.key) {
620
+ case "ArrowRight":
621
+ case "ArrowDown":
622
+ nextIndex = (currentIndex + 1) % enabledOptions.length;
623
+ break;
624
+ case "ArrowLeft":
625
+ case "ArrowUp":
626
+ nextIndex = (currentIndex - 1 + enabledOptions.length) % enabledOptions.length;
627
+ break;
628
+ case "Home":
629
+ nextIndex = 0;
630
+ break;
631
+ case "End":
632
+ nextIndex = enabledOptions.length - 1;
633
+ break;
634
+ default:
635
+ return;
636
+ }
637
+ event.preventDefault();
638
+ const nextOption = enabledOptions[nextIndex];
639
+ const originalIndex = options.findIndex(
640
+ (option) => option.value === nextOption.value
641
+ );
642
+ refs.current[originalIndex]?.focus();
643
+ onChange(nextOption.value);
644
+ };
645
+ return /* @__PURE__ */ jsx(
646
+ StyledSegmentedControl,
647
+ {
648
+ role: "radiogroup",
649
+ "aria-disabled": disabled,
650
+ children: options.map((option, index) => {
651
+ const checked = option.value === value;
652
+ const optionDisabled = disabled || option.disabled;
653
+ const enabledIndex = enabledOptions.findIndex(
654
+ (item) => item.value === option.value
655
+ );
656
+ return /* @__PURE__ */ jsx(
657
+ StyledSegment,
658
+ {
659
+ ref: (element) => {
660
+ refs.current[index] = element;
661
+ },
662
+ size,
663
+ type: "button",
664
+ role: "radio",
665
+ "aria-checked": checked,
666
+ tabIndex: checked && !optionDisabled ? 0 : -1,
667
+ disabled: optionDisabled,
668
+ onClick: () => onChange(option.value),
669
+ onKeyDown: (event) => {
670
+ handleKeyDown(event, enabledIndex);
671
+ },
672
+ children: option.label
673
+ },
674
+ option.value
675
+ );
676
+ })
677
+ }
678
+ );
679
+ };
680
+ var segmented_control_default = SegmentedControl;
681
+ var sizeHeight = (size) => {
682
+ switch (size) {
683
+ case "small":
684
+ return 24;
685
+ case "large":
686
+ return 48;
687
+ case "medium":
688
+ default:
689
+ return 32;
690
+ }
691
+ };
692
+ var StyledLogoContainer = styled5("div", {
693
+ shouldForwardProp: (prop) => prop !== "size"
694
+ })`
695
+ display: inline-flex;
696
+ align-items: center;
697
+ font-family: ${({ theme: theme2 }) => theme2.typography.fontFamily};
698
+ user-select: none;
699
+ `;
700
+ var StyledSvgIcon = styled5.svg`
701
+ flex-shrink: 0;
702
+
703
+ margin-right: ${({ theme: theme2 }) => theme2.spacing[3]};
704
+
705
+ .green-part {
706
+ fill: #00ff22;
707
+ }
708
+ .blue-part {
709
+ fill: #006fff;
710
+ }
711
+
712
+ ${({ size }) => {
713
+ switch (size) {
714
+ case "small":
715
+ return { width: "24px", height: "24px" };
716
+ case "large":
717
+ return { width: "56px", height: "56px" };
718
+ case "medium":
719
+ default:
720
+ return { width: "40px", height: "40px" };
721
+ }
722
+ }}
723
+ `;
724
+ var StyledBrandText = styled5.span`
725
+ color: ${({ theme: theme2 }) => theme2.text.primary};
726
+ font-weight: ${({ theme: theme2 }) => theme2.semanticTypography.fontWeight.label};
727
+ letter-spacing: -0.5px;
728
+ line-height: 1;
729
+
730
+ ${({ theme: theme2, size }) => {
731
+ switch (size) {
732
+ case "small":
733
+ return { fontSize: theme2.semanticTypography.fontSize.bodyLg };
734
+ case "large":
735
+ return { fontSize: theme2.semanticTypography.fontSize.heading1 };
736
+ case "medium":
737
+ default:
738
+ return { fontSize: theme2.semanticTypography.fontSize.heading3 };
739
+ }
740
+ }}
741
+ `;
742
+ var StyledBrandAccent = styled5.span`
743
+ font-weight: 700;
744
+ `;
745
+ var StyledPrefixWrapper = styled5.div`
746
+ display: flex;
747
+ align-items: center;
748
+ `;
749
+ var StyledDivider = styled5.span`
750
+ font-weight: 300;
751
+ line-height: 2;
752
+ margin: 0 ${({ theme: theme2 }) => theme2.spacing[3]};
753
+
754
+ ${({ theme: theme2, size }) => {
755
+ switch (size) {
756
+ case "small":
757
+ return { fontSize: theme2.semanticTypography.fontSize.bodyLg };
758
+ case "large":
759
+ return { fontSize: theme2.semanticTypography.fontSize.heading1 };
760
+ case "medium":
761
+ default:
762
+ return { fontSize: theme2.semanticTypography.fontSize.heading3 };
763
+ }
764
+ }}
765
+ `;
766
+ var StyledDrumContainer = styled5.div`
767
+ overflow: hidden;
768
+ position: relative;
769
+ display: flex;
770
+ height: ${({ size }) => sizeHeight(size)}px;
771
+ `;
772
+ var StyledDrumTrack = styled5("div", {
773
+ shouldForwardProp: (prop) => prop !== "size" && prop !== "offset" && prop !== "isScrolling" && prop !== "duration"
774
+ })`
775
+ display: flex;
776
+ flex-direction: column;
777
+ will-change: transform;
778
+ transform: translateY(${({ size, offset }) => -offset * sizeHeight(size)}px);
779
+ transition: ${({ isScrolling, duration }) => isScrolling ? `transform ${duration}ms cubic-bezier(0.16, 1, 0.3, 1)` : "none"};
780
+ `;
781
+ var StyledPrefixText = styled5.span`
782
+ display: block;
783
+ white-space: nowrap;
784
+ color: ${({ theme: theme2 }) => theme2.text.primary};
785
+ font-weight: 200;
786
+ height: ${({ size }) => sizeHeight(size)}px;
787
+ line-height: ${({ size }) => sizeHeight(size)}px;
788
+
789
+ ${({ theme: theme2, size }) => {
790
+ switch (size) {
791
+ case "small":
792
+ return { fontSize: theme2.semanticTypography.fontSize.bodyLg };
793
+ case "large":
794
+ return { fontSize: theme2.semanticTypography.fontSize.heading1 };
795
+ case "medium":
796
+ default:
797
+ return { fontSize: theme2.semanticTypography.fontSize.heading1 };
798
+ }
799
+ }}
800
+ `;
801
+ var ALL_SERVICES = ["\u0423\u0441\u043B\u0443\u0433\u0438", "\u041E\u0431\u043B\u0430\u043A\u043E", "VPN", "\u0418\u043D\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0430", "\u0410\u043D\u0430\u043B\u0438\u0442\u0438\u043A\u0430"];
802
+ var DRUM_ROUNDS = 2;
803
+ var DRUM_DURATION = 1800;
804
+ var shuffle = (source) => {
805
+ const copy = [...source];
806
+ for (let i = copy.length - 1; i > 0; i -= 1) {
807
+ const j = Math.floor(Math.random() * (i + 1));
808
+ [copy[i], copy[j]] = [copy[j], copy[i]];
809
+ }
810
+ return copy;
811
+ };
812
+ var buildDrumList = (target) => {
813
+ const pool = ALL_SERVICES.filter((item) => item !== target);
814
+ if (pool.length === 0) return [target];
815
+ const list = [];
816
+ let previous = null;
817
+ for (let round = 0; round < DRUM_ROUNDS; round += 1) {
818
+ const batch = shuffle(pool);
819
+ if (previous !== null && batch[0] === previous) {
820
+ [batch[0], batch[batch.length - 1]] = [batch[batch.length - 1], batch[0]];
821
+ }
822
+ list.push(...batch);
823
+ previous = batch[batch.length - 1];
824
+ }
825
+ list.push(target);
826
+ return list;
827
+ };
828
+ var Logo = ({
829
+ service = "",
830
+ animate = false,
831
+ size = "medium",
832
+ ...props
833
+ }) => {
834
+ const [prevService, setPrevService] = useState(service);
835
+ const [prevAnimate, setPrevAnimate] = useState(animate);
836
+ const [items, setItems] = useState(() => service ? [service] : []);
837
+ const [offset, setOffset] = useState(0);
838
+ const [isScrolling, setIsScrolling] = useState(false);
839
+ const [triggerAnimation, setTriggerAnimation] = useState(false);
840
+ if (service !== prevService || animate !== prevAnimate) {
841
+ setPrevService(service);
842
+ setPrevAnimate(animate);
843
+ if (!animate || !service) {
844
+ setItems(service ? [service] : []);
845
+ setOffset(0);
846
+ setIsScrolling(false);
847
+ setTriggerAnimation(false);
848
+ } else {
849
+ const list = buildDrumList(service);
850
+ setItems(list);
851
+ setOffset(0);
852
+ setIsScrolling(false);
853
+ setTriggerAnimation(true);
854
+ }
855
+ }
856
+ useEffect(() => {
857
+ if (!triggerAnimation) {
858
+ return;
859
+ }
860
+ let raf1 = 0;
861
+ let raf2 = 0;
862
+ raf1 = requestAnimationFrame(() => {
863
+ raf2 = requestAnimationFrame(() => {
864
+ setIsScrolling(true);
865
+ setOffset(items.length - 1);
866
+ setTriggerAnimation(false);
867
+ });
868
+ });
869
+ return () => {
870
+ cancelAnimationFrame(raf1);
871
+ cancelAnimationFrame(raf2);
872
+ };
873
+ }, [triggerAnimation, items.length]);
874
+ return /* @__PURE__ */ jsxs(StyledLogoContainer, { size, ...props, children: [
875
+ /* @__PURE__ */ jsxs(
876
+ StyledSvgIcon,
877
+ {
878
+ size,
879
+ viewBox: "0 0 480 481",
880
+ fill: "none",
881
+ xmlns: "http://www.w3.org/2000/svg",
882
+ children: [
883
+ /* @__PURE__ */ jsx("path", { className: "green-part", d: "M10.5688 180.779C10.5688 148.829 36.4688 122.929 68.418 122.929V122.929C84.3926 122.929 97.3426 135.879 97.3426 151.854V480.593H60.5689C32.9546 480.593 10.5688 458.207 10.5688 430.593V180.779Z" }),
884
+ /* @__PURE__ */ jsx("path", { className: "green-part", d: "M55.1756 211.45C34.6709 186.556 38.229 149.753 63.1229 129.248V129.248C71.0889 122.687 82.8658 123.825 89.4273 131.791L287.986 372.853L267.082 390.072C245.767 407.629 214.256 404.582 196.699 383.267L55.1756 211.45Z" }),
885
+ /* @__PURE__ */ jsx("circle", { className: "green-part", cx: "53.9553", cy: "53.9553", r: "53.9553" }),
886
+ /* @__PURE__ */ jsx("path", { className: "blue-part", d: "M469.323 180.779C469.323 148.829 443.423 122.929 411.474 122.929V122.929C395.499 122.929 382.549 135.879 382.549 151.854V480.593H419.323C446.937 480.593 469.323 458.207 469.323 430.593V180.779Z" }),
887
+ /* @__PURE__ */ jsx("path", { className: "blue-part", d: "M429.17 206.041C447.214 184.134 444.083 151.748 422.177 133.703V133.703C411.223 124.681 395.03 126.247 386.008 137.2L209.097 351.981C195.564 368.411 197.912 392.701 214.342 406.234V406.234C230.772 419.767 255.062 417.418 268.595 400.988L429.17 206.041Z" }),
888
+ /* @__PURE__ */ jsx("circle", { className: "blue-part", cx: "53.9553", cy: "53.9553", r: "53.9553", transform: "matrix(-1 0 0 1 479.891 0)" })
889
+ ]
890
+ }
891
+ ),
892
+ /* @__PURE__ */ jsx(StyledBrandText, { size, children: /* @__PURE__ */ jsx(StyledBrandAccent, { children: "ingAmigo" }) }),
893
+ items.length > 0 && /* @__PURE__ */ jsxs(StyledPrefixWrapper, { children: [
894
+ /* @__PURE__ */ jsx(StyledDivider, { size, children: "|" }),
895
+ /* @__PURE__ */ jsx(StyledDrumContainer, { size, children: /* @__PURE__ */ jsx(
896
+ StyledDrumTrack,
897
+ {
898
+ size,
899
+ offset,
900
+ isScrolling,
901
+ duration: DRUM_DURATION,
902
+ children: items.map((item, index) => /* @__PURE__ */ jsx(StyledPrefixText, { size, children: item }, `${item}-${index}`))
903
+ }
904
+ ) })
905
+ ] })
906
+ ] });
907
+ };
908
+ var logo_default = Logo;
909
+
910
+ export { button_default as Button, input_default as Input, logo_default as Logo, segmented_control_default as SegmentedControl, ThemeProvider, typography_default as Typography, theme };
911
+ //# sourceMappingURL=index.js.map
9
912
  //# sourceMappingURL=index.js.map