@12min/ds 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.web.js CHANGED
@@ -20,88 +20,552 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // index.web.ts
21
21
  var index_web_exports = {};
22
22
  __export(index_web_exports, {
23
+ ActionItem: () => ActionItem,
24
+ Alert: () => Alert,
25
+ Button: () => Button,
26
+ Checkbox: () => Checkbox,
27
+ Chip: () => Chip,
28
+ Input: () => Input,
29
+ ProgressBar: () => ProgressBar,
30
+ RadioGroup: () => RadioGroup,
31
+ RadioItem: () => RadioItem,
32
+ RatingScale: () => RatingScale,
33
+ Stepper: () => Stepper,
23
34
  colors: () => colors,
24
35
  darkTheme: () => darkTheme,
25
- lightTheme: () => lightTheme
36
+ lightTheme: () => lightTheme,
37
+ typography: () => typography
26
38
  });
27
39
  module.exports = __toCommonJS(index_web_exports);
28
40
 
29
41
  // src/tokens/colors.ts
30
42
  var colors = {
31
- brand: {
32
- primary: "#FF6B35",
33
- secondary: "#1A1A2E"
43
+ marianBlue: {
44
+ 50: "#FAFBFF",
45
+ 100: "#F1F4FE",
46
+ 200: "#E1E7FF",
47
+ 300: "#C3CCF7",
48
+ 400: "#94A5F2",
49
+ 500: "#697DD6",
50
+ 600: "#475CBB",
51
+ 700: "#31428B",
52
+ 800: "#25326A",
53
+ 900: "#131937"
34
54
  },
35
- neutral: {
36
- 0: "#FFFFFF",
37
- 50: "#FAFAFA",
38
- 100: "#F5F5F5",
39
- 200: "#E5E5E5",
40
- 300: "#D4D4D4",
41
- 400: "#A3A3A3",
42
- 500: "#737373",
43
- 600: "#525252",
44
- 700: "#404040",
45
- 800: "#262626",
46
- 900: "#121212"
55
+ midnight: {
56
+ 50: "#707070",
57
+ 100: "#5C5C5C",
58
+ 200: "#525252",
59
+ 300: "#474747",
60
+ 400: "#3D3D3D",
61
+ 500: "#333333",
62
+ 600: "#1E1E1E",
63
+ 700: "#161616",
64
+ 800: "#141414",
65
+ 900: "#0A0A0A"
47
66
  },
48
- success: {
49
- light: "#4ADE80",
50
- default: "#22C55E",
51
- dark: "#16A34A"
67
+ gray: {
68
+ 50: "#B1B5BE",
69
+ 100: "#A6ABB5",
70
+ 200: "#9BA0AB",
71
+ 300: "#9095A2",
72
+ 400: "#858B99",
73
+ 500: "#7A8190",
74
+ 600: "#6F7685",
75
+ 700: "#5E6471",
76
+ 800: "#5D636F",
77
+ 900: "#545964"
52
78
  },
53
- error: {
54
- light: "#F87171",
55
- default: "#EF4444",
56
- dark: "#DC2626"
79
+ mustard: {
80
+ 50: "#FFF2D6",
81
+ 100: "#FFECC2",
82
+ 200: "#FFE5AD",
83
+ 300: "#FFDF99",
84
+ 400: "#FFD885",
85
+ 500: "#FFD270",
86
+ 600: "#FFCB5C",
87
+ 700: "#FFC140",
88
+ 800: "#FFBE33",
89
+ 900: "#FFB81F"
57
90
  },
58
- warning: {
59
- light: "#FCD34D",
60
- default: "#F59E0B",
61
- dark: "#D97706"
91
+ ketchup: {
92
+ 50: "#FFD6D6",
93
+ 100: "#FFC2C2",
94
+ 200: "#FFADAD",
95
+ 300: "#FF9999",
96
+ 400: "#FF8585",
97
+ 500: "#FF7070",
98
+ 600: "#FF5C5C",
99
+ 700: "#FF4040",
100
+ 800: "#FF3333",
101
+ 900: "#FF1F1F"
62
102
  },
63
- info: {
64
- light: "#60A5FA",
65
- default: "#3B82F6",
66
- dark: "#2563EB"
67
- }
103
+ mint: {
104
+ 50: "#A7F1B7",
105
+ 100: "#96EEA9",
106
+ 200: "#84EB9A",
107
+ 300: "#73E88C",
108
+ 400: "#61E57E",
109
+ 500: "#50E26F",
110
+ 600: "#3EE061",
111
+ 700: "#24DC4C",
112
+ 800: "#22D348",
113
+ 900: "#1FC142"
114
+ },
115
+ white: "#FFFFFF",
116
+ successBg: "#E5FBE9"
117
+ };
118
+
119
+ // src/tokens/typography.ts
120
+ var typography = {
121
+ display: { fontSize: 32, fontWeight: "700", lineHeight: 1.2, fontFamily: "Poppins" },
122
+ h1: { fontSize: 24, fontWeight: "700", lineHeight: 1.3, fontFamily: "Poppins" },
123
+ h2: { fontSize: 20, fontWeight: "600", lineHeight: 1.3, fontFamily: "Poppins" },
124
+ h3: { fontSize: 18, fontWeight: "600", lineHeight: 1.4, fontFamily: "Poppins" },
125
+ bodyLarge: { fontSize: 16, fontWeight: "400", lineHeight: 1.5, fontFamily: "Inter" },
126
+ bodyDefault: { fontSize: 14, fontWeight: "400", lineHeight: 1.5, fontFamily: "Inter" },
127
+ bodySmall: { fontSize: 12, fontWeight: "400", lineHeight: 1.5, fontFamily: "Inter" },
128
+ labelLarge: { fontSize: 16, fontWeight: "500", lineHeight: 1.5, fontFamily: "Inter" },
129
+ labelDefault: { fontSize: 14, fontWeight: "500", lineHeight: 1.5, fontFamily: "Inter" },
130
+ labelSmall: { fontSize: 12, fontWeight: "500", lineHeight: 1.5, fontFamily: "Inter" },
131
+ caption: { fontSize: 12, fontWeight: "500", lineHeight: 1.5, fontFamily: "Inter" },
132
+ overline: { fontSize: 10, fontWeight: "600", lineHeight: 1, fontFamily: "Inter" },
133
+ buttonLarge: { fontSize: 16, fontWeight: "600", lineHeight: 1.5, fontFamily: "Inter" },
134
+ buttonDefault: { fontSize: 14, fontWeight: "600", lineHeight: 1.5, fontFamily: "Inter" }
68
135
  };
69
136
 
70
137
  // src/themes/lightTheme.ts
71
138
  var lightTheme = {
72
- background: colors.neutral[0],
73
- surface: colors.neutral[100],
74
- border: colors.neutral[200],
75
- onBackground: colors.neutral[900],
76
- onSurface: colors.neutral[800],
77
- muted: colors.neutral[500],
78
- primary: colors.brand.primary,
79
- secondary: colors.brand.secondary,
80
- success: colors.success.default,
81
- error: colors.error.default,
82
- warning: colors.warning.default,
83
- info: colors.info.default
139
+ background: colors.marianBlue[50],
140
+ surface: colors.marianBlue[100],
141
+ border: colors.marianBlue[200],
142
+ onBackground: colors.midnight[900],
143
+ onSurface: colors.midnight[700],
144
+ muted: colors.gray[500],
145
+ primary: colors.marianBlue[600],
146
+ secondary: colors.midnight[900],
147
+ success: colors.mint[800],
148
+ error: colors.ketchup[600],
149
+ warning: colors.mustard[500],
150
+ info: colors.marianBlue[500],
151
+ surfaceDisabled: colors.gray[50],
152
+ successBg: colors.successBg,
153
+ textSecondary: colors.gray[700],
154
+ textTertiary: colors.gray[500],
155
+ textInverse: colors.white,
156
+ borderStrong: colors.marianBlue[600],
157
+ borderSubtle: colors.marianBlue[200],
158
+ interactivePressed: colors.marianBlue[800]
84
159
  };
85
160
 
86
161
  // src/themes/darkTheme.ts
87
162
  var darkTheme = {
88
- background: colors.neutral[900],
89
- surface: colors.neutral[800],
90
- border: colors.neutral[700],
91
- onBackground: colors.neutral[0],
92
- onSurface: colors.neutral[100],
93
- muted: colors.neutral[400],
94
- primary: colors.brand.primary,
95
- secondary: colors.brand.secondary,
96
- success: colors.success.light,
97
- error: colors.error.light,
98
- warning: colors.warning.light,
99
- info: colors.info.light
163
+ background: colors.midnight[900],
164
+ surface: colors.midnight[700],
165
+ border: colors.midnight[500],
166
+ onBackground: colors.marianBlue[50],
167
+ onSurface: colors.gray[50],
168
+ muted: colors.gray[600],
169
+ primary: colors.marianBlue[400],
170
+ secondary: colors.marianBlue[50],
171
+ success: colors.mint[400],
172
+ error: colors.ketchup[400],
173
+ warning: colors.mustard[400],
174
+ info: colors.marianBlue[300],
175
+ surfaceDisabled: colors.midnight[600],
176
+ successBg: colors.midnight[800],
177
+ textSecondary: colors.gray[400],
178
+ textTertiary: colors.gray[500],
179
+ textInverse: colors.midnight[900],
180
+ borderStrong: colors.marianBlue[400],
181
+ borderSubtle: colors.midnight[600],
182
+ interactivePressed: colors.marianBlue[300]
100
183
  };
184
+
185
+ // src/components/Button/Button.web.tsx
186
+ var import_class_variance_authority = require("class-variance-authority");
187
+
188
+ // src/utils/cn.ts
189
+ var import_clsx = require("clsx");
190
+ var import_tailwind_merge = require("tailwind-merge");
191
+ function cn(...inputs) {
192
+ return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
193
+ }
194
+
195
+ // src/components/Button/Button.web.tsx
196
+ var import_jsx_runtime = require("react/jsx-runtime");
197
+ var button = (0, import_class_variance_authority.cva)(
198
+ "inline-flex items-center justify-center font-semibold rounded-full transition-opacity disabled:cursor-not-allowed",
199
+ {
200
+ variants: {
201
+ variant: {
202
+ primary: "bg-marian-blue-700 text-white disabled:bg-gray-50 disabled:opacity-50 dark:bg-marian-blue-400 dark:text-midnight-900 dark:disabled:bg-midnight-600",
203
+ secondary: "bg-marian-blue-200 text-marian-blue-900 disabled:opacity-50 dark:bg-midnight-700 dark:text-marian-blue-200",
204
+ ghost: "bg-transparent text-marian-blue-700 disabled:opacity-50 dark:text-marian-blue-300"
205
+ },
206
+ size: {
207
+ sm: "h-9 px-3.5 text-sm",
208
+ md: "h-12 px-4 text-base",
209
+ lg: "h-14 px-6 text-lg"
210
+ }
211
+ },
212
+ defaultVariants: {
213
+ variant: "primary",
214
+ size: "md"
215
+ }
216
+ }
217
+ );
218
+ function Button({ variant, size, disabled, children, onClick, type = "button", className }) {
219
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
220
+ "button",
221
+ {
222
+ type,
223
+ disabled,
224
+ onClick,
225
+ className: cn(button({ variant, size }), className),
226
+ children
227
+ }
228
+ );
229
+ }
230
+
231
+ // src/components/Chip/Chip.web.tsx
232
+ var import_jsx_runtime2 = require("react/jsx-runtime");
233
+ function Chip({ children, checked = false, onClick, className }) {
234
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
235
+ "button",
236
+ {
237
+ type: "button",
238
+ onClick,
239
+ className: cn(
240
+ "inline-flex items-center justify-center h-12 px-4 rounded-full text-sm transition-colors",
241
+ checked ? "bg-marian-blue-600 text-white font-semibold dark:bg-marian-blue-500 dark:text-white" : "bg-marian-blue-100 text-marian-blue-900 font-medium dark:bg-midnight-700 dark:text-marian-blue-100",
242
+ className
243
+ ),
244
+ children
245
+ }
246
+ );
247
+ }
248
+
249
+ // src/components/Alert/Alert.web.tsx
250
+ var import_jsx_runtime3 = require("react/jsx-runtime");
251
+ function Alert({ variant = "info", title, description, className }) {
252
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
253
+ "div",
254
+ {
255
+ className: cn(
256
+ "w-full p-5 rounded-tl-[32px] rounded-tr-[32px] rounded-br-[32px] border border-marian-blue-200 dark:border-midnight-600",
257
+ variant === "success" ? "bg-success-bg dark:bg-midnight-800" : "bg-marian-blue-50 dark:bg-midnight-700",
258
+ className
259
+ ),
260
+ children: [
261
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
262
+ "p",
263
+ {
264
+ className: "[font-family:'Poppins',sans-serif] font-semibold text-base leading-snug text-marian-blue-900 dark:text-marian-blue-100",
265
+ children: title
266
+ }
267
+ ),
268
+ description && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "mt-3 font-medium text-sm leading-normal text-gray-700 dark:text-gray-400", children: description })
269
+ ]
270
+ }
271
+ );
272
+ }
273
+
274
+ // src/components/ProgressBar/ProgressBar.web.tsx
275
+ var import_jsx_runtime4 = require("react/jsx-runtime");
276
+ function ProgressBar({ value, className }) {
277
+ const pct = Math.min(100, Math.max(0, value));
278
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
279
+ "div",
280
+ {
281
+ role: "progressbar",
282
+ "aria-valuenow": pct,
283
+ "aria-valuemin": 0,
284
+ "aria-valuemax": 100,
285
+ className: cn(
286
+ "relative h-2 w-full rounded-full bg-marian-blue-200 overflow-hidden dark:bg-midnight-600",
287
+ className
288
+ ),
289
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
290
+ "div",
291
+ {
292
+ className: "absolute inset-y-0 left-0 bg-marian-blue-700 rounded-[24px] transition-[width] dark:bg-marian-blue-400",
293
+ style: { width: `${pct}%` }
294
+ }
295
+ )
296
+ }
297
+ );
298
+ }
299
+
300
+ // src/components/Input/Input.web.tsx
301
+ var import_jsx_runtime5 = require("react/jsx-runtime");
302
+ function Input({ value, placeholder = "exemplo@email.com", state = "default", leadingIcon, onChange, className }) {
303
+ const isDisabled = state === "disabled";
304
+ const isError = state === "error";
305
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
306
+ "div",
307
+ {
308
+ className: cn(
309
+ "flex items-center gap-2 h-12 px-3 rounded-xl border text-sm font-medium",
310
+ "focus-within:border-2 focus-within:border-marian-blue-600 dark:focus-within:border-marian-blue-400",
311
+ isDisabled ? "bg-marian-blue-50 border-gray-200 text-gray-200 cursor-not-allowed dark:bg-midnight-800 dark:border-midnight-500 dark:text-gray-600" : isError ? "bg-marian-blue-100 border-ketchup-600 text-ketchup-700 dark:bg-midnight-700 dark:border-ketchup-400 dark:text-ketchup-400" : "bg-marian-blue-100 border-marian-blue-200 text-gray-500 dark:bg-midnight-700 dark:border-midnight-600 dark:text-gray-500",
312
+ className
313
+ ),
314
+ children: [
315
+ leadingIcon && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "shrink-0 text-current", children: leadingIcon }),
316
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
317
+ "input",
318
+ {
319
+ type: "text",
320
+ value,
321
+ placeholder,
322
+ disabled: isDisabled,
323
+ onChange,
324
+ className: "flex-1 bg-transparent outline-none placeholder:text-current text-current min-w-0 focus:text-marian-blue-900 dark:focus:text-marian-blue-100"
325
+ }
326
+ )
327
+ ]
328
+ }
329
+ );
330
+ }
331
+
332
+ // src/components/Checkbox/Checkbox.web.tsx
333
+ var import_jsx_runtime6 = require("react/jsx-runtime");
334
+ function CheckIcon() {
335
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("svg", { width: "12", height: "10", viewBox: "0 0 12 10", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("path", { d: "M1 5L4.5 8.5L11 1.5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) });
336
+ }
337
+ function Checkbox({ checked = false, onChange, disabled = false, className }) {
338
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
339
+ "label",
340
+ {
341
+ className: cn(
342
+ "relative size-5 rounded-md flex items-center justify-center transition-colors",
343
+ disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer",
344
+ checked ? "bg-marian-blue-800 text-white dark:bg-marian-blue-400 dark:text-midnight-900" : "border border-marian-blue-600 bg-transparent dark:border-marian-blue-400",
345
+ className
346
+ ),
347
+ children: [
348
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
349
+ "input",
350
+ {
351
+ type: "checkbox",
352
+ checked,
353
+ disabled,
354
+ onChange: () => onChange?.(!checked),
355
+ className: "sr-only"
356
+ }
357
+ ),
358
+ checked && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(CheckIcon, {})
359
+ ]
360
+ }
361
+ );
362
+ }
363
+
364
+ // src/components/RadioItem/RadioItem.web.tsx
365
+ var import_jsx_runtime7 = require("react/jsx-runtime");
366
+ function RadioIndicator({ selected }) {
367
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
368
+ "div",
369
+ {
370
+ className: cn(
371
+ "size-5 rounded-full border flex items-center justify-center shrink-0",
372
+ selected ? "border-marian-blue-100" : "border-marian-blue-800 dark:border-marian-blue-300"
373
+ ),
374
+ children: selected && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("svg", { width: "10", height: "8", viewBox: "0 0 10 8", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("path", { d: "M1 4L3.5 6.5L9 1", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) })
375
+ }
376
+ );
377
+ }
378
+ function RadioItem({ label, description, selected = false, icon, onClick, className }) {
379
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
380
+ "button",
381
+ {
382
+ type: "button",
383
+ role: "radio",
384
+ "aria-checked": selected,
385
+ onClick,
386
+ className: cn(
387
+ "flex items-center justify-between h-12 px-4 rounded-2xl transition-colors text-left",
388
+ selected ? "bg-marian-blue-600 text-white dark:bg-marian-blue-500" : "bg-marian-blue-100 text-marian-blue-900 dark:bg-midnight-700 dark:text-marian-blue-100",
389
+ className
390
+ ),
391
+ children: [
392
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex items-center gap-3", children: [
393
+ icon && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "shrink-0 size-5", children: icon }),
394
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
395
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
396
+ "span",
397
+ {
398
+ className: cn(
399
+ "text-sm leading-normal",
400
+ selected ? "font-bold" : "font-medium"
401
+ ),
402
+ children: label
403
+ }
404
+ ),
405
+ description && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
406
+ "span",
407
+ {
408
+ className: cn(
409
+ "text-xs leading-normal tracking-[0.024px]",
410
+ selected ? "text-current opacity-80" : "text-gray-700 dark:text-gray-500"
411
+ ),
412
+ children: description
413
+ }
414
+ )
415
+ ] })
416
+ ] }),
417
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(RadioIndicator, { selected })
418
+ ]
419
+ }
420
+ );
421
+ }
422
+
423
+ // src/components/RadioGroup/RadioGroup.web.tsx
424
+ var import_jsx_runtime8 = require("react/jsx-runtime");
425
+ function RadioGroup({ children, label, className }) {
426
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
427
+ "div",
428
+ {
429
+ role: "radiogroup",
430
+ "aria-label": label,
431
+ className: cn("flex flex-col gap-2", className),
432
+ children
433
+ }
434
+ );
435
+ }
436
+
437
+ // src/components/ActionItem/ActionItem.web.tsx
438
+ var import_jsx_runtime9 = require("react/jsx-runtime");
439
+ function ChevronRight() {
440
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("svg", { width: "8", height: "14", viewBox: "0 0 8 14", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { d: "M1 1L7 7L1 13", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
441
+ }
442
+ function ActionItem({ label, description, selected = false, icon, onClick, className }) {
443
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
444
+ "button",
445
+ {
446
+ type: "button",
447
+ onClick,
448
+ className: cn(
449
+ "flex items-center gap-5 h-14 px-4 rounded-2xl transition-colors text-left text-marian-blue-900 dark:text-marian-blue-100",
450
+ selected ? "bg-marian-blue-200 border-2 border-marian-blue-600 dark:bg-midnight-600 dark:border-marian-blue-400" : "bg-marian-blue-100 dark:bg-midnight-700",
451
+ className
452
+ ),
453
+ children: [
454
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-1 items-center gap-4 min-w-0", children: [
455
+ icon && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "shrink-0", children: icon }),
456
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-col gap-1 flex-1 min-w-0", children: [
457
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "text-sm font-medium leading-normal whitespace-nowrap", children: label }),
458
+ description && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "text-xs font-normal text-gray-700 dark:text-gray-400 leading-normal tracking-[0.024px]", children: description })
459
+ ] })
460
+ ] }),
461
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(ChevronRight, {}) })
462
+ ]
463
+ }
464
+ );
465
+ }
466
+
467
+ // src/components/Stepper/Stepper.web.tsx
468
+ var import_jsx_runtime10 = require("react/jsx-runtime");
469
+ function Dot({ state }) {
470
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
471
+ "div",
472
+ {
473
+ className: cn(
474
+ "shrink-0 size-1 rounded-full",
475
+ state === "completed" ? "bg-marian-blue-600 dark:bg-marian-blue-400" : "bg-marian-blue-200 dark:bg-midnight-600"
476
+ )
477
+ }
478
+ );
479
+ }
480
+ function Track({ state }) {
481
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "w-full h-1 rounded-lg overflow-hidden bg-marian-blue-200 dark:bg-midnight-600", children: [
482
+ state === "completed" && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "h-full w-full bg-marian-blue-600 rounded-lg dark:bg-marian-blue-400" }),
483
+ state === "active" && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "h-full w-[calc(100%-12px)] bg-marian-blue-900 rounded-lg dark:bg-marian-blue-100" })
484
+ ] });
485
+ }
486
+ function Stepper({ steps, currentStep, className }) {
487
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: cn("flex items-end gap-1 w-full", className), children: steps.map((step, i) => {
488
+ const state = i < currentStep ? "completed" : i === currentStep ? "active" : "upcoming";
489
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex flex-col gap-1 flex-1 min-w-0", children: [
490
+ state === "active" && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-[10px] font-semibold text-marian-blue-900 dark:text-marian-blue-100 leading-none tracking-[0.8px] uppercase truncate", children: step.label }),
491
+ (state === "completed" || state === "upcoming") && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "h-[10px]" }),
492
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Track, { state })
493
+ ] }, step.label);
494
+ }).reduce((acc, el, i) => {
495
+ if (i === 0) return [el];
496
+ const prevState = i - 1 < currentStep ? "completed" : i - 1 === currentStep ? "active" : "upcoming";
497
+ return [...acc, /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Dot, { state: prevState }, `dot-${i}`), el];
498
+ }, []) });
499
+ }
500
+
501
+ // src/components/RatingScale/RatingScale.styles.ts
502
+ var DEFAULT_OPTIONS = [
503
+ { emoji: "\u{1F61E}", label: "Nada\na ver" },
504
+ { emoji: "\u{1F641}", label: "Pouco\na ver" },
505
+ { emoji: "\u{1F610}", label: "Mais ou\nmenos" },
506
+ { emoji: "\u{1F642}", label: "Tem\na ver" },
507
+ { emoji: "\u{1F60A}", label: "Totalmente\neu" }
508
+ ];
509
+
510
+ // src/components/RatingScale/RatingScale.web.tsx
511
+ var import_jsx_runtime11 = require("react/jsx-runtime");
512
+ function RatingScale({ value = null, onChange, options = DEFAULT_OPTIONS, className }) {
513
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: cn("flex items-start justify-between", className), children: options.map((option, index) => {
514
+ const itemValue = index + 1;
515
+ const selected = value === itemValue;
516
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
517
+ "button",
518
+ {
519
+ type: "button",
520
+ onClick: () => onChange?.(itemValue),
521
+ className: "flex w-[60px] flex-col items-center gap-2",
522
+ "aria-pressed": selected,
523
+ children: [
524
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
525
+ "div",
526
+ {
527
+ className: cn(
528
+ "flex size-[60px] items-center justify-center overflow-hidden rounded-full p-[8px] transition-colors",
529
+ selected ? "bg-marian-blue-600" : "border border-marian-blue-200 bg-marian-blue-50 dark:border-midnight-500 dark:bg-midnight-700"
530
+ ),
531
+ children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "select-none text-[38px] leading-none", children: option.emoji })
532
+ }
533
+ ),
534
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex w-full flex-col items-center gap-[11px]", children: [
535
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
536
+ "span",
537
+ {
538
+ className: cn(
539
+ "w-full whitespace-pre-line text-center text-[12px] leading-[1.3] tracking-[0.06px]",
540
+ selected ? "font-bold text-marian-blue-600" : "font-medium text-marian-blue-900 dark:text-marian-blue-100"
541
+ ),
542
+ children: option.label
543
+ }
544
+ ),
545
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "text-[10px] font-semibold leading-none tracking-[0.8px] text-gray-500", children: itemValue })
546
+ ] })
547
+ ]
548
+ },
549
+ itemValue
550
+ );
551
+ }) });
552
+ }
101
553
  // Annotate the CommonJS export names for ESM import in node:
102
554
  0 && (module.exports = {
555
+ ActionItem,
556
+ Alert,
557
+ Button,
558
+ Checkbox,
559
+ Chip,
560
+ Input,
561
+ ProgressBar,
562
+ RadioGroup,
563
+ RadioItem,
564
+ RatingScale,
565
+ Stepper,
103
566
  colors,
104
567
  darkTheme,
105
- lightTheme
568
+ lightTheme,
569
+ typography
106
570
  });
107
571
  //# sourceMappingURL=index.web.js.map