ndcloud-storybook 1.0.1 → 1.2.1

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.cjs CHANGED
@@ -53,6 +53,89 @@ var Spinner = ({
53
53
  }
54
54
  ) });
55
55
  var Spinner_default = Spinner;
56
+
57
+ // src/tokens/colors.ts
58
+ var colors = {
59
+ // Brand colors
60
+ baseColors: {
61
+ // Brand
62
+ primaryGreen: "#7EE896",
63
+ primaryPurple: "#6D65DA",
64
+ // Palette
65
+ darkBlue1: "#12131B",
66
+ darkBlue2: "#2A2B33",
67
+ darkBlue3: "#02061D",
68
+ grey1: "#3C3C44",
69
+ grey2: "#45454F",
70
+ grey3: "#9CA3AF",
71
+ grey4: "#8E8E98",
72
+ grey5: "#4B4B4B",
73
+ grey6: "#353535",
74
+ grey7: "#ECECED",
75
+ white1: "#ffffff"
76
+ },
77
+ // Hover states
78
+ hoverColors: {
79
+ primaryPurple: "#5F56D6"
80
+ },
81
+ // Background colors
82
+ backgrounds: {
83
+ light1: "#F5F6F8",
84
+ light2: "#EFF1F8",
85
+ transparent: "transparent"
86
+ },
87
+ // Accents (errors, warnings, etc.)
88
+ accents: {
89
+ error: "#F2545B",
90
+ danger: "#D25E4A",
91
+ warning: "#ECAC4D"
92
+ },
93
+ // Gradients
94
+ gradients: {
95
+ gradient1: "linear-gradient(90deg, #6D65DA 0.08%, #55A3BD 68.44%)"
96
+ }
97
+ };
98
+
99
+ // src/tokens/typography.ts
100
+ var FONT_WEIGHTS = {
101
+ light: 300,
102
+ regular: 350,
103
+ normal: 400,
104
+ medium: 500,
105
+ bold: 700
106
+ };
107
+ var FONT_SIZES = {
108
+ xxs: 10,
109
+ xs: 12,
110
+ s: 13,
111
+ m: 14,
112
+ base: 16,
113
+ lg: 18,
114
+ xl: 20,
115
+ "2xl": 24
116
+ };
117
+ var typography = {
118
+ fontFamily: {
119
+ primary: '"ABCFavoritExtended", sans-serif'
120
+ },
121
+ fontWeight: FONT_WEIGHTS,
122
+ fontSize: FONT_SIZES,
123
+ lineHeight: {
124
+ tight: 1.2,
125
+ normal: 1.5,
126
+ relaxed: 1.75
127
+ }
128
+ };
129
+ var FONT_SIZE_KEYS = {
130
+ xxs: "xxs",
131
+ xs: "xs",
132
+ s: "s",
133
+ m: "m",
134
+ base: "base",
135
+ lg: "lg",
136
+ xl: "xl",
137
+ "2xl": "2xl"
138
+ };
56
139
  var Variant = /* @__PURE__ */ ((Variant2) => {
57
140
  Variant2["Primary"] = "primary";
58
141
  Variant2["Secondary"] = "secondary";
@@ -61,15 +144,15 @@ var Variant = /* @__PURE__ */ ((Variant2) => {
61
144
  })(Variant || {});
62
145
  var VARIANTS = {
63
146
  primary: {
64
- background: "linear-gradient(90deg, #6D65DA 0.08%, #55A3BD 68.44%)",
65
- color: "#FFF"
147
+ background: colors.gradients.gradient1,
148
+ color: colors.baseColors.white1
66
149
  },
67
150
  secondary: {
68
- background: "#6D65DA",
69
- color: "#FFF"
151
+ background: colors.baseColors.primaryPurple,
152
+ color: colors.baseColors.white1
70
153
  },
71
154
  outline: {
72
- background: "transparent",
155
+ background: colors.backgrounds.transparent,
73
156
  border: "1px solid rgba(70, 70, 74, 0.10)",
74
157
  color: "#0E1116D9"
75
158
  }
@@ -80,8 +163,8 @@ var StyledButton = styled__default.default.button`
80
163
  justify-content: center;
81
164
  padding: 12px 20px;
82
165
  border-radius: 100px;
83
- font-weight: 500;
84
- font-family: "ABCFavoritExtended", sans-serif;
166
+ font-weight: ${typography.fontWeight.medium};
167
+ font-family: ${typography.fontFamily.primary};
85
168
  transition: all 0.2s ease;
86
169
  width: 100%;
87
170
  max-width: 336px;
@@ -97,8 +180,8 @@ var StyledButton = styled__default.default.button`
97
180
  const { background, color, border } = VARIANTS[variant];
98
181
  return react.css`
99
182
  background: ${background};
100
- border: ${selected ? "2px solid #FFF" : border || "none"};
101
- color: ${color || "#FFF"};
183
+ border: ${selected ? `2px solid ${colors.baseColors.white1}` : border || "none"};
184
+ color: ${color || colors.baseColors.white1};
102
185
  opacity: ${disabled ? 0.5 : 1};
103
186
  cursor: ${disabled ? "not-allowed" : "pointer"};
104
187
  pointer-events: ${disabled ? "none" : "auto"};
@@ -132,7 +215,260 @@ var Button = ({
132
215
  );
133
216
  var Button_default = Button;
134
217
 
218
+ // src/utils/colorHelpers.ts
219
+ function getOpacity(hexColor, opacity) {
220
+ const hex = hexColor.trim().replace(/^#/, "");
221
+ if (!/^[\da-fA-F]{6}$/.test(hex)) {
222
+ throw new Error(`Invalid hex color: ${hexColor}`);
223
+ }
224
+ const opacityFraction = Math.round(opacity / 100 * 255);
225
+ const alphaHex = opacityFraction.toString(16).padStart(2, "0");
226
+ return `#${hex}${alphaHex}`;
227
+ }
228
+
229
+ // src/atoms/shared/inputStyles.ts
230
+ var defaultPadding = "9px 17px";
231
+ var focusedPadding = "8px 16px";
232
+ var baseInputStyles = react.css`
233
+ border-radius: 10px;
234
+ border: 1px solid ${colors.baseColors.grey7};
235
+ padding: ${defaultPadding};
236
+ color: ${getOpacity(colors.baseColors.darkBlue3, 80)};
237
+ background-color: ${colors.baseColors.white1};
238
+ font-weight: ${typography.fontWeight.regular};
239
+ cursor: text;
240
+ transition: border-color 0.2s ease;
241
+ box-sizing: border-box;
242
+
243
+ &::placeholder {
244
+ color: ${colors.baseColors.grey3};
245
+ }
246
+
247
+ &:hover:not(:disabled) {
248
+ cursor: text;
249
+ }
250
+
251
+ &:focus {
252
+ outline: none;
253
+ border-width: 2px;
254
+ border-color: ${colors.baseColors.primaryPurple};
255
+ padding: ${focusedPadding};
256
+ }
257
+
258
+ &:disabled {
259
+ background-color: ${colors.baseColors.grey7};
260
+ cursor: not-allowed;
261
+ }
262
+ `;
263
+ var errorStyles = react.css`
264
+ border-width: 2px;
265
+ border-color: ${colors.accents.error};
266
+ padding: ${focusedPadding};
267
+
268
+ &:focus {
269
+ border-width: 2px;
270
+ border-color: ${colors.accents.error};
271
+ padding: ${focusedPadding};
272
+ }
273
+ `;
274
+ var warningStyles = react.css`
275
+ border-width: 2px;
276
+ border-color: ${colors.accents.warning};
277
+ padding: ${focusedPadding};
278
+
279
+ &:focus {
280
+ border-width: 2px;
281
+ border-color: ${colors.accents.warning};
282
+ padding: ${focusedPadding};
283
+ }
284
+ `;
285
+ var Input = ({ className, error, warning, ...rest }) => {
286
+ return /* @__PURE__ */ jsxRuntime.jsx(StyledInput, { className, error, warning, ...rest });
287
+ };
288
+ var Input_default = Input;
289
+ var StyledInput = styled__default.default.input`
290
+ ${baseInputStyles}
291
+
292
+ ${({ error }) => error && errorStyles}
293
+ ${({ warning }) => warning && warningStyles}
294
+ `;
295
+ var Label = ({ className, htmlFor, children, ...rest }) => {
296
+ return /* @__PURE__ */ jsxRuntime.jsx("label", { className, htmlFor, ...rest, children });
297
+ };
298
+ var Label_default = Label;
299
+ var Textarea = ({ className, error, warning, ...rest }) => {
300
+ return /* @__PURE__ */ jsxRuntime.jsx(StyledTextarea, { className, error, warning, ...rest });
301
+ };
302
+ var Textarea_default = Textarea;
303
+ var StyledTextarea = styled__default.default.textarea`
304
+ ${baseInputStyles}
305
+ resize: vertical;
306
+ min-height: 80px;
307
+ font-family: inherit;
308
+
309
+ ${({ error }) => error && errorStyles}
310
+ ${({ warning }) => warning && warningStyles}
311
+ `;
312
+ var Tab = ({
313
+ children,
314
+ selected,
315
+ fontSize = "m",
316
+ className,
317
+ ...rest
318
+ }) => {
319
+ return /* @__PURE__ */ jsxRuntime.jsx(
320
+ StyledTab,
321
+ {
322
+ className,
323
+ selected,
324
+ fontSize,
325
+ ...rest,
326
+ children
327
+ }
328
+ );
329
+ };
330
+ var Tab_default = Tab;
331
+ var StyledTab = styled__default.default.div`
332
+ display: inline-block;
333
+ padding: 8px 16px;
334
+ user-select: none;
335
+ font-size: ${({ fontSize }) => `${typography.fontSize[fontSize]}px`};
336
+ position: relative;
337
+ transition: border-color 0.2s ease;
338
+ cursor: pointer;
339
+
340
+ ${({ selected }) => selected && `
341
+ &::after {
342
+ content: '';
343
+ position: absolute;
344
+ bottom: -1px;
345
+ left: 0;
346
+ right: 0;
347
+ height: 3px;
348
+ background-color: ${colors.baseColors.primaryGreen};
349
+ }
350
+ `}
351
+ `;
352
+ var HelperText = styled__default.default.div`
353
+ margin-top: 4px;
354
+ font-size: ${typography.fontSize.xs}px;
355
+ color: ${({ error, warning }) => {
356
+ if (error) return colors.accents.error;
357
+ if (warning) return colors.accents.warning;
358
+ return colors.baseColors.grey3;
359
+ }};
360
+ `;
361
+ var FormField = ({
362
+ id,
363
+ label,
364
+ helperText,
365
+ error,
366
+ warning,
367
+ onInput,
368
+ onChange,
369
+ className,
370
+ ...inputProps
371
+ }) => {
372
+ const handleChange = (event) => {
373
+ if (onInput) {
374
+ onInput(event.target.value);
375
+ }
376
+ if (onChange) {
377
+ onChange(event);
378
+ }
379
+ };
380
+ const displayText = error || warning || helperText;
381
+ const hasError = !!error;
382
+ const hasWarning = !!warning && !hasError;
383
+ return /* @__PURE__ */ jsxRuntime.jsxs(FormFieldWrapper, { className, children: [
384
+ /* @__PURE__ */ jsxRuntime.jsx(Label_default, { htmlFor: id, children: label }),
385
+ /* @__PURE__ */ jsxRuntime.jsx(
386
+ Input_default,
387
+ {
388
+ id,
389
+ onChange: handleChange,
390
+ error: hasError,
391
+ warning: hasWarning,
392
+ ...inputProps
393
+ }
394
+ ),
395
+ displayText && /* @__PURE__ */ jsxRuntime.jsx(HelperText, { error: hasError, warning: hasWarning, children: displayText })
396
+ ] });
397
+ };
398
+ var FormFieldWrapper = styled__default.default.div`
399
+ display: flex;
400
+ flex-direction: column;
401
+
402
+ label {
403
+ margin-bottom: 8px;
404
+ color: ${colors.baseColors.darkBlue3};
405
+ font-size: ${typography.fontSize.m}px;
406
+ }
407
+ `;
408
+ var FormField_default = FormField;
409
+ var FormFieldTextarea = ({
410
+ id,
411
+ label,
412
+ helperText,
413
+ error,
414
+ warning,
415
+ onInput,
416
+ onChange,
417
+ className,
418
+ ...textareaProps
419
+ }) => {
420
+ const handleChange = (event) => {
421
+ if (onInput) {
422
+ onInput(event.target.value);
423
+ }
424
+ if (onChange) {
425
+ onChange(event);
426
+ }
427
+ };
428
+ const displayText = error || warning || helperText;
429
+ const hasError = !!error;
430
+ const hasWarning = !!warning && !hasError;
431
+ return /* @__PURE__ */ jsxRuntime.jsxs(FormFieldWrapper2, { className, children: [
432
+ /* @__PURE__ */ jsxRuntime.jsx(Label_default, { htmlFor: id, children: label }),
433
+ /* @__PURE__ */ jsxRuntime.jsx(
434
+ Textarea_default,
435
+ {
436
+ id,
437
+ onChange: handleChange,
438
+ error: hasError,
439
+ warning: hasWarning,
440
+ ...textareaProps
441
+ }
442
+ ),
443
+ displayText && /* @__PURE__ */ jsxRuntime.jsx(HelperText, { error: hasError, warning: hasWarning, children: displayText })
444
+ ] });
445
+ };
446
+ var FormFieldWrapper2 = styled__default.default.div`
447
+ display: flex;
448
+ flex-direction: column;
449
+
450
+ label {
451
+ margin-bottom: 8px;
452
+ color: ${colors.baseColors.darkBlue3};
453
+ font-size: ${typography.fontSize.m}px;
454
+ }
455
+ `;
456
+ var FormFieldTextarea_default = FormFieldTextarea;
457
+
135
458
  exports.Button = Button_default;
459
+ exports.FONT_SIZES = FONT_SIZES;
460
+ exports.FONT_SIZE_KEYS = FONT_SIZE_KEYS;
461
+ exports.FONT_WEIGHTS = FONT_WEIGHTS;
462
+ exports.FormField = FormField_default;
463
+ exports.FormFieldTextarea = FormFieldTextarea_default;
464
+ exports.HelperText = HelperText;
465
+ exports.Input = Input_default;
466
+ exports.Label = Label_default;
467
+ exports.Tab = Tab_default;
468
+ exports.Textarea = Textarea_default;
136
469
  exports.Variant = Variant;
470
+ exports.colors = colors;
471
+ exports.getOpacity = getOpacity;
472
+ exports.typography = typography;
137
473
  //# sourceMappingURL=index.cjs.map
138
474
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/atoms/Spinner/Spinner.tsx","../src/atoms/Button/Button.tsx"],"names":["keyframes","styled","jsx","jsxs","Variant","css","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["/** @jsxImportSource @emotion/react */\nimport React from \"react\";\nimport { keyframes } from \"@emotion/react\";\nimport styled from \"@emotion/styled\";\n\ninterface SpinnerProps {\n size?: number;\n speed?: string;\n bgColor?: string;\n fgColor?: string;\n}\n\nconst spin = keyframes`\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n`;\n\nconst Wrapper = styled.div<SpinnerProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n svg {\n width: ${({ size = 20 }) => size}px;\n height: ${({ size = 20 }) => size}px;\n animation: ${spin} ${({ speed = \"0.75s\" }) => speed} linear infinite;\n transform-origin: center;\n }\n`;\n\nconst Spinner: React.FC<SpinnerProps> = ({\n size = 20,\n speed = \"0.75s\",\n bgColor = \"#D1D5DB\",\n fgColor = \"#FFFFFF\",\n}) => (\n <Wrapper size={size} speed={speed}>\n <svg\n viewBox=\"0 0 50 50\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"status\"\n aria-label=\"loading\"\n >\n <circle cx=\"25\" cy=\"25\" r=\"20\" stroke={bgColor} strokeWidth=\"5\" />\n <path\n d=\"M45 25a20 20 0 0 1-20 20\"\n stroke={fgColor}\n strokeWidth=\"5\"\n strokeLinecap=\"round\"\n />\n </svg>\n </Wrapper>\n);\n\nexport default Spinner;\n","/** @jsxImportSource @emotion/react */\nimport { css } from \"@emotion/react\";\nimport styled from \"@emotion/styled\";\nimport React, { ReactNode } from \"react\";\nimport Spinner from \"../Spinner/Spinner\";\n\ntype VariantName = \"primary\" | \"secondary\" | \"outline\";\n\nexport enum Variant {\n Primary = \"primary\",\n Secondary = \"secondary\",\n Outline = \"outline\",\n}\n\ninterface VariantStyle {\n background: string;\n color?: string;\n border?: string;\n}\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n label: string;\n variant?: VariantName;\n disabled?: boolean;\n selected?: boolean;\n icon?: ReactNode;\n loading?: boolean;\n className?: string;\n}\n\nconst VARIANTS: Record<VariantName, VariantStyle> = {\n primary: {\n background: \"linear-gradient(90deg, #6D65DA 0.08%, #55A3BD 68.44%)\",\n color: \"#FFF\",\n },\n secondary: {\n background: \"#6D65DA\",\n color: \"#FFF\",\n },\n outline: {\n background: \"transparent\",\n border: \"1px solid rgba(70, 70, 74, 0.10)\",\n color: \"#0E1116D9\",\n },\n};\n\nconst StyledButton = styled.button<ButtonProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 12px 20px;\n border-radius: 100px;\n font-weight: 500;\n font-family: \"ABCFavoritExtended\", sans-serif;\n transition: all 0.2s ease;\n width: 100%;\n max-width: 336px;\n\n span {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 8px;\n }\n\n ${({ variant = \"primary\", disabled, selected }) => {\n const { background, color, border } = VARIANTS[variant];\n return css`\n background: ${background};\n border: ${selected ? \"2px solid #FFF\" : border || \"none\"};\n color: ${color || \"#FFF\"};\n opacity: ${disabled ? 0.5 : 1};\n cursor: ${disabled ? \"not-allowed\" : \"pointer\"};\n pointer-events: ${disabled ? \"none\" : \"auto\"};\n\n &:focus-visible {\n outline: 2px solid #0070f3;\n outline-offset: 2px;\n }\n `;\n }}\n`;\n\nconst Button: React.FC<ButtonProps> = ({\n label,\n icon,\n loading,\n disabled,\n className,\n ...rest\n}) => (\n <StyledButton\n label={\"\"}\n disabled={disabled || loading}\n className={className}\n {...rest}\n >\n {loading ? (\n <Spinner />\n ) : (\n <>\n {icon && <span>{icon}</span>}\n {label}\n </>\n )}\n </StyledButton>\n);\n\nexport default Button;\n"]}
1
+ {"version":3,"sources":["../src/atoms/Spinner/Spinner.tsx","../src/tokens/colors.ts","../src/tokens/typography.ts","../src/atoms/Button/Button.tsx","../src/utils/colorHelpers.ts","../src/atoms/shared/inputStyles.ts","../src/atoms/Input/Input.tsx","../src/atoms/Label/Label.tsx","../src/atoms/Textarea/Textarea.tsx","../src/atoms/Tab/Tab.tsx","../src/atoms/HelperText/HelperText.tsx","../src/molecules/FormField/FormField.tsx","../src/molecules/FormFieldTextarea/FormFieldTextarea.tsx"],"names":["keyframes","styled","jsx","jsxs","Variant","css","Fragment","FormFieldWrapper"],"mappings":"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","file":"index.cjs","sourcesContent":["/** @jsxImportSource @emotion/react */\nimport React from \"react\";\nimport { keyframes } from \"@emotion/react\";\nimport styled from \"@emotion/styled\";\n\ninterface SpinnerProps {\n size?: number;\n speed?: string;\n bgColor?: string;\n fgColor?: string;\n}\n\nconst spin = keyframes`\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n`;\n\nconst Wrapper = styled.div<SpinnerProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n svg {\n width: ${({ size = 20 }) => size}px;\n height: ${({ size = 20 }) => size}px;\n animation: ${spin} ${({ speed = \"0.75s\" }) => speed} linear infinite;\n transform-origin: center;\n }\n`;\n\nconst Spinner: React.FC<SpinnerProps> = ({\n size = 20,\n speed = \"0.75s\",\n bgColor = \"#D1D5DB\",\n fgColor = \"#FFFFFF\",\n}) => (\n <Wrapper size={size} speed={speed}>\n <svg\n viewBox=\"0 0 50 50\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"status\"\n aria-label=\"loading\"\n >\n <circle cx=\"25\" cy=\"25\" r=\"20\" stroke={bgColor} strokeWidth=\"5\" />\n <path\n d=\"M45 25a20 20 0 0 1-20 20\"\n stroke={fgColor}\n strokeWidth=\"5\"\n strokeLinecap=\"round\"\n />\n </svg>\n </Wrapper>\n);\n\nexport default Spinner;\n","/**\n * Color tokens for the design system\n */\n\nexport const colors = {\n // Brand colors\n baseColors: {\n // Brand\n primaryGreen: \"#7EE896\",\n primaryPurple: \"#6D65DA\",\n\n // Palette\n darkBlue1: \"#12131B\",\n darkBlue2: \"#2A2B33\",\n darkBlue3: \"#02061D\",\n\n grey1: \"#3C3C44\",\n grey2: \"#45454F\",\n grey3: \"#9CA3AF\",\n grey4: \"#8E8E98\",\n grey5: \"#4B4B4B\",\n grey6: \"#353535\",\n grey7: \"#ECECED\",\n\n white1: \"#ffffff\",\n },\n\n // Hover states\n hoverColors: {\n primaryPurple: \"#5F56D6\",\n },\n\n // Background colors\n backgrounds: {\n light1: \"#F5F6F8\",\n light2: \"#EFF1F8\",\n transparent: \"transparent\",\n },\n\n // Accents (errors, warnings, etc.)\n accents: {\n error: \"#F2545B\",\n danger: \"#D25E4A\",\n warning: \"#ECAC4D\",\n },\n\n // Gradients\n gradients: {\n gradient1: \"linear-gradient(90deg, #6D65DA 0.08%, #55A3BD 68.44%)\",\n },\n} as const;\n\nexport type Colors = typeof colors;\n\n","export type Typography = typeof typography;\n\nexport type FontWeight = (typeof FONT_WEIGHTS)[keyof typeof FONT_WEIGHTS];\nexport type FontSize = (typeof FONT_SIZES)[keyof typeof FONT_SIZES];\nexport type FontSizeKey = keyof typeof FONT_SIZES;\nexport type Align = \"left\" | \"center\" | \"right\";\n/**\n * Typography tokens for the design system\n */\n\nexport const FONT_WEIGHTS = {\n light: 300,\n regular: 350,\n normal: 400,\n medium: 500,\n bold: 700,\n} as const;\n\nexport const FONT_SIZES = {\n xxs: 10,\n xs: 12,\n s: 13,\n m: 14,\n base: 16,\n lg: 18,\n xl: 20,\n \"2xl\": 24,\n} as const;\n\nexport const typography = {\n fontFamily: {\n primary: '\"ABCFavoritExtended\", sans-serif',\n },\n\n fontWeight: FONT_WEIGHTS,\n\n fontSize: FONT_SIZES,\n\n lineHeight: {\n tight: 1.2,\n normal: 1.5,\n relaxed: 1.75,\n },\n} as const;\n\nexport const FONT_SIZE_KEYS = {\n xxs: \"xxs\",\n xs: \"xs\",\n s: \"s\",\n m: \"m\",\n base: \"base\",\n lg: \"lg\",\n xl: \"xl\",\n \"2xl\": \"2xl\",\n} as const satisfies Record<string, FontSizeKey>;\n\n","/** @jsxImportSource @emotion/react */\nimport { css } from \"@emotion/react\";\nimport styled from \"@emotion/styled\";\nimport React, { ReactNode } from \"react\";\nimport Spinner from \"../Spinner/Spinner\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\n\nexport type VariantName = \"primary\" | \"secondary\" | \"outline\";\n\nexport enum Variant {\n Primary = \"primary\",\n Secondary = \"secondary\",\n Outline = \"outline\",\n}\n\ninterface VariantStyle {\n background: string;\n color?: string;\n border?: string;\n}\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n label: string;\n variant?: VariantName;\n disabled?: boolean;\n selected?: boolean;\n icon?: ReactNode;\n loading?: boolean;\n className?: string;\n}\n\nconst VARIANTS: Record<VariantName, VariantStyle> = {\n primary: {\n background: colors.gradients.gradient1,\n color: colors.baseColors.white1,\n },\n secondary: {\n background: colors.baseColors.primaryPurple,\n color: colors.baseColors.white1,\n },\n outline: {\n background: colors.backgrounds.transparent,\n border: \"1px solid rgba(70, 70, 74, 0.10)\",\n color: \"#0E1116D9\",\n },\n};\n\nconst StyledButton = styled.button<ButtonProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 12px 20px;\n border-radius: 100px;\n font-weight: ${typography.fontWeight.medium};\n font-family: ${typography.fontFamily.primary};\n transition: all 0.2s ease;\n width: 100%;\n max-width: 336px;\n\n span {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 8px;\n }\n\n ${({ variant = \"primary\", disabled, selected }) => {\n const { background, color, border } = VARIANTS[variant];\n return css`\n background: ${background};\n border: ${selected ? `2px solid ${colors.baseColors.white1}` : border || \"none\"};\n color: ${color || colors.baseColors.white1};\n opacity: ${disabled ? 0.5 : 1};\n cursor: ${disabled ? \"not-allowed\" : \"pointer\"};\n pointer-events: ${disabled ? \"none\" : \"auto\"};\n\n &:focus-visible {\n outline: 2px solid #0070f3;\n outline-offset: 2px;\n }\n `;\n }}\n`;\n\nconst Button: React.FC<ButtonProps> = ({\n label,\n icon,\n loading,\n disabled,\n className,\n ...rest\n}) => (\n <StyledButton\n label={\"\"}\n disabled={disabled || loading}\n className={className}\n {...rest}\n >\n {loading ? (\n <Spinner />\n ) : (\n <>\n {icon && <span>{icon}</span>}\n {label}\n </>\n )}\n </StyledButton>\n);\n\nexport default Button;\n","/**\n * Color utility functions for the design system\n */\n\nexport type TOpacity = number; // 0-100\nexport type TColor = string; // Hex color with alpha channel\n\n/**\n * Converts a hex color to a hex color with alpha channel\n * @param hexColor - Hex color string (e.g., \"#6D65DA\" or \"6D65DA\")\n * @param opacity - Opacity value from 0-100\n * @returns Hex color with alpha channel (e.g., \"#6D65DAB3\" for 70% opacity)\n * @throws Error if hex color is invalid\n */\nexport function getOpacity(hexColor: string, opacity: TOpacity): TColor {\n const hex = hexColor.trim().replace(/^#/, \"\");\n \n if (!/^[\\da-fA-F]{6}$/.test(hex)) {\n throw new Error(`Invalid hex color: ${hexColor}`);\n }\n\n const opacityFraction = Math.round((opacity / 100) * 255);\n const alphaHex = opacityFraction.toString(16).padStart(2, \"0\");\n\n return `#${hex}${alphaHex}`;\n}\n\n","import { css } from \"@emotion/react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\nimport { getOpacity } from \"../../utils/colorHelpers\";\n\nexport const defaultPadding = \"9px 17px\";\nexport const focusedPadding = \"8px 16px\";\n\nexport const baseInputStyles = css`\n border-radius: 10px;\n border: 1px solid ${colors.baseColors.grey7};\n padding: ${defaultPadding};\n color: ${getOpacity(colors.baseColors.darkBlue3, 80)};\n background-color: ${colors.baseColors.white1};\n font-weight: ${typography.fontWeight.regular};\n cursor: text;\n transition: border-color 0.2s ease;\n box-sizing: border-box;\n\n &::placeholder {\n color: ${colors.baseColors.grey3};\n }\n\n &:hover:not(:disabled) {\n cursor: text;\n }\n\n &:focus {\n outline: none;\n border-width: 2px;\n border-color: ${colors.baseColors.primaryPurple};\n padding: ${focusedPadding};\n }\n\n &:disabled {\n background-color: ${colors.baseColors.grey7};\n cursor: not-allowed;\n }\n`;\n\nexport const errorStyles = css`\n border-width: 2px;\n border-color: ${colors.accents.error};\n padding: ${focusedPadding};\n\n &:focus {\n border-width: 2px;\n border-color: ${colors.accents.error};\n padding: ${focusedPadding};\n }\n`;\n\nexport const warningStyles = css`\n border-width: 2px;\n border-color: ${colors.accents.warning};\n padding: ${focusedPadding};\n\n &:focus {\n border-width: 2px;\n border-color: ${colors.accents.warning};\n padding: ${focusedPadding};\n }\n`;\n\n","import styled from \"@emotion/styled\";\nimport React from \"react\";\nimport { baseInputStyles, errorStyles, warningStyles } from \"../shared/inputStyles\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n className?: string;\n error?: boolean;\n warning?: boolean;\n}\n\nconst Input: React.FC<InputProps> = ({ className, error, warning, ...rest }) => {\n return <StyledInput className={className} error={error} warning={warning} {...rest} />;\n};\n\nexport default Input;\n\nconst StyledInput = styled.input<InputProps>`\n ${baseInputStyles}\n\n ${({ error }) => error && errorStyles}\n ${({ warning }) => warning && warningStyles}\n`;","import React from \"react\";\n\nexport interface LabelProps\n extends React.LabelHTMLAttributes<HTMLLabelElement> {\n className?: string;\n htmlFor?: string;\n}\n\nconst Label: React.FC<LabelProps> = ({ className, htmlFor, children, ...rest }) => {\n return (\n <label className={className} htmlFor={htmlFor} {...rest}>\n {children}\n </label>\n );\n};\n\nexport default Label;\n\n","import styled from \"@emotion/styled\";\nimport React from \"react\";\nimport { baseInputStyles, errorStyles, warningStyles } from \"../shared/inputStyles\";\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n className?: string;\n error?: boolean;\n warning?: boolean;\n}\n\nconst Textarea: React.FC<TextareaProps> = ({ className, error, warning, ...rest }) => {\n return <StyledTextarea className={className} error={error} warning={warning} {...rest} />;\n};\n\nexport default Textarea;\n\nconst StyledTextarea = styled.textarea<TextareaProps>`\n ${baseInputStyles}\n resize: vertical;\n min-height: 80px;\n font-family: inherit;\n\n ${({ error }) => error && errorStyles}\n ${({ warning }) => warning && warningStyles}\n`;\n\n","import styled from \"@emotion/styled\";\nimport React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography, type FontSizeKey } from \"../../tokens/typography\";\n\nexport interface TabProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"fontSize\"> {\n children: React.ReactNode;\n selected?: boolean;\n fontSize?: FontSizeKey;\n className?: string;\n}\n\ninterface StyledTabProps {\n selected?: boolean;\n fontSize: FontSizeKey;\n}\n\nconst Tab: React.FC<TabProps> = ({\n children,\n selected,\n fontSize = \"m\",\n className,\n ...rest\n}) => {\n return (\n <StyledTab\n className={className}\n selected={selected}\n fontSize={fontSize}\n {...rest}\n >\n {children}\n </StyledTab>\n );\n};\n\nexport default Tab;\n\nconst StyledTab = styled.div<StyledTabProps>`\n display: inline-block;\n padding: 8px 16px;\n user-select: none;\n font-size: ${({ fontSize }) => `${typography.fontSize[fontSize]}px`};\n position: relative;\n transition: border-color 0.2s ease;\n cursor: pointer;\n\n ${({ selected }) =>\n selected &&\n `\n &::after {\n content: '';\n position: absolute;\n bottom: -1px;\n left: 0;\n right: 0;\n height: 3px;\n background-color: ${colors.baseColors.primaryGreen};\n }\n `}\n`;\n\n","import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\n\nexport interface HelperTextProps {\n error?: boolean;\n warning?: boolean;\n children: React.ReactNode;\n}\n\nexport const HelperText = styled.div<HelperTextProps>`\n margin-top: 4px;\n font-size: ${typography.fontSize.xs}px;\n color: ${({ error, warning }) => {\n if (error) return colors.accents.error;\n if (warning) return colors.accents.warning;\n return colors.baseColors.grey3;\n }};\n`;\n\n","import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport Input, { InputProps } from \"../../atoms/Input\";\nimport Label from \"../../atoms/Label\";\nimport { HelperText } from \"../../atoms/HelperText\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\n\nexport interface FormFieldProps extends Omit<InputProps, \"id\" | \"onInput\" | \"error\" | \"warning\"> {\n id: string;\n label: string;\n helperText?: string;\n error?: string;\n warning?: string;\n onInput?: (value: string) => void;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nconst FormField: React.FC<FormFieldProps> = ({\n id,\n label,\n helperText,\n error,\n warning,\n onInput,\n onChange,\n className,\n ...inputProps\n}) => {\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (onInput) {\n onInput(event.target.value);\n }\n if (onChange) {\n onChange(event);\n }\n };\n\n const displayText = error || warning || helperText;\n const hasError = !!error;\n const hasWarning = !!warning && !hasError;\n\n return (\n <FormFieldWrapper className={className}>\n <Label htmlFor={id}>{label}</Label>\n <Input\n id={id}\n onChange={handleChange}\n error={hasError}\n warning={hasWarning}\n {...inputProps}\n />\n {displayText && (\n <HelperText error={hasError} warning={hasWarning}>\n {displayText}\n </HelperText>\n )}\n </FormFieldWrapper>\n );\n};\n\nconst FormFieldWrapper = styled.div`\n display: flex;\n flex-direction: column;\n \n label {\n margin-bottom: 8px;\n color: ${colors.baseColors.darkBlue3};\n font-size: ${typography.fontSize.m}px;\n }\n`;\n\nexport default FormField;\n\n","import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport Textarea, { TextareaProps } from \"../../atoms/Textarea\";\nimport Label from \"../../atoms/Label\";\nimport { HelperText } from \"../../atoms/HelperText\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\n\nexport interface FormFieldTextareaProps extends Omit<TextareaProps, \"id\" | \"onInput\" | \"error\" | \"warning\"> {\n id: string;\n label: string;\n helperText?: string;\n error?: string;\n warning?: string;\n onInput?: (value: string) => void;\n onChange?: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n}\n\nconst FormFieldTextarea: React.FC<FormFieldTextareaProps> = ({\n id,\n label,\n helperText,\n error,\n warning,\n onInput,\n onChange,\n className,\n ...textareaProps\n}) => {\n const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (onInput) {\n onInput(event.target.value);\n }\n if (onChange) {\n onChange(event);\n }\n };\n\n const displayText = error || warning || helperText;\n const hasError = !!error;\n const hasWarning = !!warning && !hasError;\n\n return (\n <FormFieldWrapper className={className}>\n <Label htmlFor={id}>{label}</Label>\n <Textarea\n id={id}\n onChange={handleChange}\n error={hasError}\n warning={hasWarning}\n {...textareaProps}\n />\n {displayText && (\n <HelperText error={hasError} warning={hasWarning}>\n {displayText}\n </HelperText>\n )}\n </FormFieldWrapper>\n );\n};\n\nconst FormFieldWrapper = styled.div`\n display: flex;\n flex-direction: column;\n \n label {\n margin-bottom: 8px;\n color: ${colors.baseColors.darkBlue3};\n font-size: ${typography.fontSize.m}px;\n }\n`;\n\nexport default FormFieldTextarea;\n\n"]}
package/dist/index.d.cts CHANGED
@@ -1,4 +1,6 @@
1
1
  import React, { ReactNode } from 'react';
2
+ import * as _emotion_styled from '@emotion/styled';
3
+ import * as _emotion_react from '@emotion/react';
2
4
 
3
5
  type VariantName = "primary" | "secondary" | "outline";
4
6
  declare enum Variant {
@@ -17,4 +19,179 @@ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
17
19
  }
18
20
  declare const Button: React.FC<ButtonProps>;
19
21
 
20
- export { Button, type ButtonProps, Variant };
22
+ interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {
23
+ className?: string;
24
+ error?: boolean;
25
+ warning?: boolean;
26
+ }
27
+ declare const Input: React.FC<InputProps>;
28
+
29
+ interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {
30
+ className?: string;
31
+ htmlFor?: string;
32
+ }
33
+ declare const Label: React.FC<LabelProps>;
34
+
35
+ interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {
36
+ className?: string;
37
+ error?: boolean;
38
+ warning?: boolean;
39
+ }
40
+ declare const Textarea: React.FC<TextareaProps>;
41
+
42
+ type Typography = typeof typography;
43
+ type FontWeight = (typeof FONT_WEIGHTS)[keyof typeof FONT_WEIGHTS];
44
+ type FontSize = (typeof FONT_SIZES)[keyof typeof FONT_SIZES];
45
+ type FontSizeKey = keyof typeof FONT_SIZES;
46
+ type Align = "left" | "center" | "right";
47
+ /**
48
+ * Typography tokens for the design system
49
+ */
50
+ declare const FONT_WEIGHTS: {
51
+ readonly light: 300;
52
+ readonly regular: 350;
53
+ readonly normal: 400;
54
+ readonly medium: 500;
55
+ readonly bold: 700;
56
+ };
57
+ declare const FONT_SIZES: {
58
+ readonly xxs: 10;
59
+ readonly xs: 12;
60
+ readonly s: 13;
61
+ readonly m: 14;
62
+ readonly base: 16;
63
+ readonly lg: 18;
64
+ readonly xl: 20;
65
+ readonly "2xl": 24;
66
+ };
67
+ declare const typography: {
68
+ readonly fontFamily: {
69
+ readonly primary: "\"ABCFavoritExtended\", sans-serif";
70
+ };
71
+ readonly fontWeight: {
72
+ readonly light: 300;
73
+ readonly regular: 350;
74
+ readonly normal: 400;
75
+ readonly medium: 500;
76
+ readonly bold: 700;
77
+ };
78
+ readonly fontSize: {
79
+ readonly xxs: 10;
80
+ readonly xs: 12;
81
+ readonly s: 13;
82
+ readonly m: 14;
83
+ readonly base: 16;
84
+ readonly lg: 18;
85
+ readonly xl: 20;
86
+ readonly "2xl": 24;
87
+ };
88
+ readonly lineHeight: {
89
+ readonly tight: 1.2;
90
+ readonly normal: 1.5;
91
+ readonly relaxed: 1.75;
92
+ };
93
+ };
94
+ declare const FONT_SIZE_KEYS: {
95
+ readonly xxs: "xxs";
96
+ readonly xs: "xs";
97
+ readonly s: "s";
98
+ readonly m: "m";
99
+ readonly base: "base";
100
+ readonly lg: "lg";
101
+ readonly xl: "xl";
102
+ readonly "2xl": "2xl";
103
+ };
104
+
105
+ interface TabProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "fontSize"> {
106
+ children: React.ReactNode;
107
+ selected?: boolean;
108
+ fontSize?: FontSizeKey;
109
+ className?: string;
110
+ }
111
+ declare const Tab: React.FC<TabProps>;
112
+
113
+ interface HelperTextProps {
114
+ error?: boolean;
115
+ warning?: boolean;
116
+ children: React.ReactNode;
117
+ }
118
+ declare const HelperText: _emotion_styled.StyledComponent<{
119
+ theme?: _emotion_react.Theme;
120
+ as?: React.ElementType;
121
+ } & HelperTextProps, React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
122
+
123
+ interface FormFieldProps extends Omit<InputProps, "id" | "onInput" | "error" | "warning"> {
124
+ id: string;
125
+ label: string;
126
+ helperText?: string;
127
+ error?: string;
128
+ warning?: string;
129
+ onInput?: (value: string) => void;
130
+ onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
131
+ }
132
+ declare const FormField: React.FC<FormFieldProps>;
133
+
134
+ interface FormFieldTextareaProps extends Omit<TextareaProps, "id" | "onInput" | "error" | "warning"> {
135
+ id: string;
136
+ label: string;
137
+ helperText?: string;
138
+ error?: string;
139
+ warning?: string;
140
+ onInput?: (value: string) => void;
141
+ onChange?: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;
142
+ }
143
+ declare const FormFieldTextarea: React.FC<FormFieldTextareaProps>;
144
+
145
+ /**
146
+ * Color tokens for the design system
147
+ */
148
+ declare const colors: {
149
+ readonly baseColors: {
150
+ readonly primaryGreen: "#7EE896";
151
+ readonly primaryPurple: "#6D65DA";
152
+ readonly darkBlue1: "#12131B";
153
+ readonly darkBlue2: "#2A2B33";
154
+ readonly darkBlue3: "#02061D";
155
+ readonly grey1: "#3C3C44";
156
+ readonly grey2: "#45454F";
157
+ readonly grey3: "#9CA3AF";
158
+ readonly grey4: "#8E8E98";
159
+ readonly grey5: "#4B4B4B";
160
+ readonly grey6: "#353535";
161
+ readonly grey7: "#ECECED";
162
+ readonly white1: "#ffffff";
163
+ };
164
+ readonly hoverColors: {
165
+ readonly primaryPurple: "#5F56D6";
166
+ };
167
+ readonly backgrounds: {
168
+ readonly light1: "#F5F6F8";
169
+ readonly light2: "#EFF1F8";
170
+ readonly transparent: "transparent";
171
+ };
172
+ readonly accents: {
173
+ readonly error: "#F2545B";
174
+ readonly danger: "#D25E4A";
175
+ readonly warning: "#ECAC4D";
176
+ };
177
+ readonly gradients: {
178
+ readonly gradient1: "linear-gradient(90deg, #6D65DA 0.08%, #55A3BD 68.44%)";
179
+ };
180
+ };
181
+ type Colors = typeof colors;
182
+
183
+ /**
184
+ * Color utility functions for the design system
185
+ */
186
+ type TOpacity = number;
187
+ type TColor = string;
188
+ /**
189
+ * Converts a hex color to a hex color with alpha channel
190
+ * @param hexColor - Hex color string (e.g., "#6D65DA" or "6D65DA")
191
+ * @param opacity - Opacity value from 0-100
192
+ * @returns Hex color with alpha channel (e.g., "#6D65DAB3" for 70% opacity)
193
+ * @throws Error if hex color is invalid
194
+ */
195
+ declare function getOpacity(hexColor: string, opacity: TOpacity): TColor;
196
+
197
+ export { type Align, Button, type ButtonProps, type Colors, FONT_SIZES, FONT_SIZE_KEYS, FONT_WEIGHTS, type FontSize, type FontSizeKey, type FontWeight, FormField, type FormFieldProps, FormFieldTextarea, type FormFieldTextareaProps, HelperText, type HelperTextProps, Input, type InputProps, Label, type LabelProps, type TColor, type TOpacity, Tab, type TabProps, Textarea, type TextareaProps, type Typography, Variant, type VariantName, colors, getOpacity, typography };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  import React, { ReactNode } from 'react';
2
+ import * as _emotion_styled from '@emotion/styled';
3
+ import * as _emotion_react from '@emotion/react';
2
4
 
3
5
  type VariantName = "primary" | "secondary" | "outline";
4
6
  declare enum Variant {
@@ -17,4 +19,179 @@ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
17
19
  }
18
20
  declare const Button: React.FC<ButtonProps>;
19
21
 
20
- export { Button, type ButtonProps, Variant };
22
+ interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {
23
+ className?: string;
24
+ error?: boolean;
25
+ warning?: boolean;
26
+ }
27
+ declare const Input: React.FC<InputProps>;
28
+
29
+ interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {
30
+ className?: string;
31
+ htmlFor?: string;
32
+ }
33
+ declare const Label: React.FC<LabelProps>;
34
+
35
+ interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {
36
+ className?: string;
37
+ error?: boolean;
38
+ warning?: boolean;
39
+ }
40
+ declare const Textarea: React.FC<TextareaProps>;
41
+
42
+ type Typography = typeof typography;
43
+ type FontWeight = (typeof FONT_WEIGHTS)[keyof typeof FONT_WEIGHTS];
44
+ type FontSize = (typeof FONT_SIZES)[keyof typeof FONT_SIZES];
45
+ type FontSizeKey = keyof typeof FONT_SIZES;
46
+ type Align = "left" | "center" | "right";
47
+ /**
48
+ * Typography tokens for the design system
49
+ */
50
+ declare const FONT_WEIGHTS: {
51
+ readonly light: 300;
52
+ readonly regular: 350;
53
+ readonly normal: 400;
54
+ readonly medium: 500;
55
+ readonly bold: 700;
56
+ };
57
+ declare const FONT_SIZES: {
58
+ readonly xxs: 10;
59
+ readonly xs: 12;
60
+ readonly s: 13;
61
+ readonly m: 14;
62
+ readonly base: 16;
63
+ readonly lg: 18;
64
+ readonly xl: 20;
65
+ readonly "2xl": 24;
66
+ };
67
+ declare const typography: {
68
+ readonly fontFamily: {
69
+ readonly primary: "\"ABCFavoritExtended\", sans-serif";
70
+ };
71
+ readonly fontWeight: {
72
+ readonly light: 300;
73
+ readonly regular: 350;
74
+ readonly normal: 400;
75
+ readonly medium: 500;
76
+ readonly bold: 700;
77
+ };
78
+ readonly fontSize: {
79
+ readonly xxs: 10;
80
+ readonly xs: 12;
81
+ readonly s: 13;
82
+ readonly m: 14;
83
+ readonly base: 16;
84
+ readonly lg: 18;
85
+ readonly xl: 20;
86
+ readonly "2xl": 24;
87
+ };
88
+ readonly lineHeight: {
89
+ readonly tight: 1.2;
90
+ readonly normal: 1.5;
91
+ readonly relaxed: 1.75;
92
+ };
93
+ };
94
+ declare const FONT_SIZE_KEYS: {
95
+ readonly xxs: "xxs";
96
+ readonly xs: "xs";
97
+ readonly s: "s";
98
+ readonly m: "m";
99
+ readonly base: "base";
100
+ readonly lg: "lg";
101
+ readonly xl: "xl";
102
+ readonly "2xl": "2xl";
103
+ };
104
+
105
+ interface TabProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "fontSize"> {
106
+ children: React.ReactNode;
107
+ selected?: boolean;
108
+ fontSize?: FontSizeKey;
109
+ className?: string;
110
+ }
111
+ declare const Tab: React.FC<TabProps>;
112
+
113
+ interface HelperTextProps {
114
+ error?: boolean;
115
+ warning?: boolean;
116
+ children: React.ReactNode;
117
+ }
118
+ declare const HelperText: _emotion_styled.StyledComponent<{
119
+ theme?: _emotion_react.Theme;
120
+ as?: React.ElementType;
121
+ } & HelperTextProps, React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
122
+
123
+ interface FormFieldProps extends Omit<InputProps, "id" | "onInput" | "error" | "warning"> {
124
+ id: string;
125
+ label: string;
126
+ helperText?: string;
127
+ error?: string;
128
+ warning?: string;
129
+ onInput?: (value: string) => void;
130
+ onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
131
+ }
132
+ declare const FormField: React.FC<FormFieldProps>;
133
+
134
+ interface FormFieldTextareaProps extends Omit<TextareaProps, "id" | "onInput" | "error" | "warning"> {
135
+ id: string;
136
+ label: string;
137
+ helperText?: string;
138
+ error?: string;
139
+ warning?: string;
140
+ onInput?: (value: string) => void;
141
+ onChange?: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;
142
+ }
143
+ declare const FormFieldTextarea: React.FC<FormFieldTextareaProps>;
144
+
145
+ /**
146
+ * Color tokens for the design system
147
+ */
148
+ declare const colors: {
149
+ readonly baseColors: {
150
+ readonly primaryGreen: "#7EE896";
151
+ readonly primaryPurple: "#6D65DA";
152
+ readonly darkBlue1: "#12131B";
153
+ readonly darkBlue2: "#2A2B33";
154
+ readonly darkBlue3: "#02061D";
155
+ readonly grey1: "#3C3C44";
156
+ readonly grey2: "#45454F";
157
+ readonly grey3: "#9CA3AF";
158
+ readonly grey4: "#8E8E98";
159
+ readonly grey5: "#4B4B4B";
160
+ readonly grey6: "#353535";
161
+ readonly grey7: "#ECECED";
162
+ readonly white1: "#ffffff";
163
+ };
164
+ readonly hoverColors: {
165
+ readonly primaryPurple: "#5F56D6";
166
+ };
167
+ readonly backgrounds: {
168
+ readonly light1: "#F5F6F8";
169
+ readonly light2: "#EFF1F8";
170
+ readonly transparent: "transparent";
171
+ };
172
+ readonly accents: {
173
+ readonly error: "#F2545B";
174
+ readonly danger: "#D25E4A";
175
+ readonly warning: "#ECAC4D";
176
+ };
177
+ readonly gradients: {
178
+ readonly gradient1: "linear-gradient(90deg, #6D65DA 0.08%, #55A3BD 68.44%)";
179
+ };
180
+ };
181
+ type Colors = typeof colors;
182
+
183
+ /**
184
+ * Color utility functions for the design system
185
+ */
186
+ type TOpacity = number;
187
+ type TColor = string;
188
+ /**
189
+ * Converts a hex color to a hex color with alpha channel
190
+ * @param hexColor - Hex color string (e.g., "#6D65DA" or "6D65DA")
191
+ * @param opacity - Opacity value from 0-100
192
+ * @returns Hex color with alpha channel (e.g., "#6D65DAB3" for 70% opacity)
193
+ * @throws Error if hex color is invalid
194
+ */
195
+ declare function getOpacity(hexColor: string, opacity: TOpacity): TColor;
196
+
197
+ export { type Align, Button, type ButtonProps, type Colors, FONT_SIZES, FONT_SIZE_KEYS, FONT_WEIGHTS, type FontSize, type FontSizeKey, type FontWeight, FormField, type FormFieldProps, FormFieldTextarea, type FormFieldTextareaProps, HelperText, type HelperTextProps, Input, type InputProps, Label, type LabelProps, type TColor, type TOpacity, Tab, type TabProps, Textarea, type TextareaProps, type Typography, Variant, type VariantName, colors, getOpacity, typography };
package/dist/index.js CHANGED
@@ -47,6 +47,89 @@ var Spinner = ({
47
47
  }
48
48
  ) });
49
49
  var Spinner_default = Spinner;
50
+
51
+ // src/tokens/colors.ts
52
+ var colors = {
53
+ // Brand colors
54
+ baseColors: {
55
+ // Brand
56
+ primaryGreen: "#7EE896",
57
+ primaryPurple: "#6D65DA",
58
+ // Palette
59
+ darkBlue1: "#12131B",
60
+ darkBlue2: "#2A2B33",
61
+ darkBlue3: "#02061D",
62
+ grey1: "#3C3C44",
63
+ grey2: "#45454F",
64
+ grey3: "#9CA3AF",
65
+ grey4: "#8E8E98",
66
+ grey5: "#4B4B4B",
67
+ grey6: "#353535",
68
+ grey7: "#ECECED",
69
+ white1: "#ffffff"
70
+ },
71
+ // Hover states
72
+ hoverColors: {
73
+ primaryPurple: "#5F56D6"
74
+ },
75
+ // Background colors
76
+ backgrounds: {
77
+ light1: "#F5F6F8",
78
+ light2: "#EFF1F8",
79
+ transparent: "transparent"
80
+ },
81
+ // Accents (errors, warnings, etc.)
82
+ accents: {
83
+ error: "#F2545B",
84
+ danger: "#D25E4A",
85
+ warning: "#ECAC4D"
86
+ },
87
+ // Gradients
88
+ gradients: {
89
+ gradient1: "linear-gradient(90deg, #6D65DA 0.08%, #55A3BD 68.44%)"
90
+ }
91
+ };
92
+
93
+ // src/tokens/typography.ts
94
+ var FONT_WEIGHTS = {
95
+ light: 300,
96
+ regular: 350,
97
+ normal: 400,
98
+ medium: 500,
99
+ bold: 700
100
+ };
101
+ var FONT_SIZES = {
102
+ xxs: 10,
103
+ xs: 12,
104
+ s: 13,
105
+ m: 14,
106
+ base: 16,
107
+ lg: 18,
108
+ xl: 20,
109
+ "2xl": 24
110
+ };
111
+ var typography = {
112
+ fontFamily: {
113
+ primary: '"ABCFavoritExtended", sans-serif'
114
+ },
115
+ fontWeight: FONT_WEIGHTS,
116
+ fontSize: FONT_SIZES,
117
+ lineHeight: {
118
+ tight: 1.2,
119
+ normal: 1.5,
120
+ relaxed: 1.75
121
+ }
122
+ };
123
+ var FONT_SIZE_KEYS = {
124
+ xxs: "xxs",
125
+ xs: "xs",
126
+ s: "s",
127
+ m: "m",
128
+ base: "base",
129
+ lg: "lg",
130
+ xl: "xl",
131
+ "2xl": "2xl"
132
+ };
50
133
  var Variant = /* @__PURE__ */ ((Variant2) => {
51
134
  Variant2["Primary"] = "primary";
52
135
  Variant2["Secondary"] = "secondary";
@@ -55,15 +138,15 @@ var Variant = /* @__PURE__ */ ((Variant2) => {
55
138
  })(Variant || {});
56
139
  var VARIANTS = {
57
140
  primary: {
58
- background: "linear-gradient(90deg, #6D65DA 0.08%, #55A3BD 68.44%)",
59
- color: "#FFF"
141
+ background: colors.gradients.gradient1,
142
+ color: colors.baseColors.white1
60
143
  },
61
144
  secondary: {
62
- background: "#6D65DA",
63
- color: "#FFF"
145
+ background: colors.baseColors.primaryPurple,
146
+ color: colors.baseColors.white1
64
147
  },
65
148
  outline: {
66
- background: "transparent",
149
+ background: colors.backgrounds.transparent,
67
150
  border: "1px solid rgba(70, 70, 74, 0.10)",
68
151
  color: "#0E1116D9"
69
152
  }
@@ -74,8 +157,8 @@ var StyledButton = styled.button`
74
157
  justify-content: center;
75
158
  padding: 12px 20px;
76
159
  border-radius: 100px;
77
- font-weight: 500;
78
- font-family: "ABCFavoritExtended", sans-serif;
160
+ font-weight: ${typography.fontWeight.medium};
161
+ font-family: ${typography.fontFamily.primary};
79
162
  transition: all 0.2s ease;
80
163
  width: 100%;
81
164
  max-width: 336px;
@@ -91,8 +174,8 @@ var StyledButton = styled.button`
91
174
  const { background, color, border } = VARIANTS[variant];
92
175
  return css`
93
176
  background: ${background};
94
- border: ${selected ? "2px solid #FFF" : border || "none"};
95
- color: ${color || "#FFF"};
177
+ border: ${selected ? `2px solid ${colors.baseColors.white1}` : border || "none"};
178
+ color: ${color || colors.baseColors.white1};
96
179
  opacity: ${disabled ? 0.5 : 1};
97
180
  cursor: ${disabled ? "not-allowed" : "pointer"};
98
181
  pointer-events: ${disabled ? "none" : "auto"};
@@ -126,6 +209,246 @@ var Button = ({
126
209
  );
127
210
  var Button_default = Button;
128
211
 
129
- export { Button_default as Button, Variant };
212
+ // src/utils/colorHelpers.ts
213
+ function getOpacity(hexColor, opacity) {
214
+ const hex = hexColor.trim().replace(/^#/, "");
215
+ if (!/^[\da-fA-F]{6}$/.test(hex)) {
216
+ throw new Error(`Invalid hex color: ${hexColor}`);
217
+ }
218
+ const opacityFraction = Math.round(opacity / 100 * 255);
219
+ const alphaHex = opacityFraction.toString(16).padStart(2, "0");
220
+ return `#${hex}${alphaHex}`;
221
+ }
222
+
223
+ // src/atoms/shared/inputStyles.ts
224
+ var defaultPadding = "9px 17px";
225
+ var focusedPadding = "8px 16px";
226
+ var baseInputStyles = css`
227
+ border-radius: 10px;
228
+ border: 1px solid ${colors.baseColors.grey7};
229
+ padding: ${defaultPadding};
230
+ color: ${getOpacity(colors.baseColors.darkBlue3, 80)};
231
+ background-color: ${colors.baseColors.white1};
232
+ font-weight: ${typography.fontWeight.regular};
233
+ cursor: text;
234
+ transition: border-color 0.2s ease;
235
+ box-sizing: border-box;
236
+
237
+ &::placeholder {
238
+ color: ${colors.baseColors.grey3};
239
+ }
240
+
241
+ &:hover:not(:disabled) {
242
+ cursor: text;
243
+ }
244
+
245
+ &:focus {
246
+ outline: none;
247
+ border-width: 2px;
248
+ border-color: ${colors.baseColors.primaryPurple};
249
+ padding: ${focusedPadding};
250
+ }
251
+
252
+ &:disabled {
253
+ background-color: ${colors.baseColors.grey7};
254
+ cursor: not-allowed;
255
+ }
256
+ `;
257
+ var errorStyles = css`
258
+ border-width: 2px;
259
+ border-color: ${colors.accents.error};
260
+ padding: ${focusedPadding};
261
+
262
+ &:focus {
263
+ border-width: 2px;
264
+ border-color: ${colors.accents.error};
265
+ padding: ${focusedPadding};
266
+ }
267
+ `;
268
+ var warningStyles = css`
269
+ border-width: 2px;
270
+ border-color: ${colors.accents.warning};
271
+ padding: ${focusedPadding};
272
+
273
+ &:focus {
274
+ border-width: 2px;
275
+ border-color: ${colors.accents.warning};
276
+ padding: ${focusedPadding};
277
+ }
278
+ `;
279
+ var Input = ({ className, error, warning, ...rest }) => {
280
+ return /* @__PURE__ */ jsx(StyledInput, { className, error, warning, ...rest });
281
+ };
282
+ var Input_default = Input;
283
+ var StyledInput = styled.input`
284
+ ${baseInputStyles}
285
+
286
+ ${({ error }) => error && errorStyles}
287
+ ${({ warning }) => warning && warningStyles}
288
+ `;
289
+ var Label = ({ className, htmlFor, children, ...rest }) => {
290
+ return /* @__PURE__ */ jsx("label", { className, htmlFor, ...rest, children });
291
+ };
292
+ var Label_default = Label;
293
+ var Textarea = ({ className, error, warning, ...rest }) => {
294
+ return /* @__PURE__ */ jsx(StyledTextarea, { className, error, warning, ...rest });
295
+ };
296
+ var Textarea_default = Textarea;
297
+ var StyledTextarea = styled.textarea`
298
+ ${baseInputStyles}
299
+ resize: vertical;
300
+ min-height: 80px;
301
+ font-family: inherit;
302
+
303
+ ${({ error }) => error && errorStyles}
304
+ ${({ warning }) => warning && warningStyles}
305
+ `;
306
+ var Tab = ({
307
+ children,
308
+ selected,
309
+ fontSize = "m",
310
+ className,
311
+ ...rest
312
+ }) => {
313
+ return /* @__PURE__ */ jsx(
314
+ StyledTab,
315
+ {
316
+ className,
317
+ selected,
318
+ fontSize,
319
+ ...rest,
320
+ children
321
+ }
322
+ );
323
+ };
324
+ var Tab_default = Tab;
325
+ var StyledTab = styled.div`
326
+ display: inline-block;
327
+ padding: 8px 16px;
328
+ user-select: none;
329
+ font-size: ${({ fontSize }) => `${typography.fontSize[fontSize]}px`};
330
+ position: relative;
331
+ transition: border-color 0.2s ease;
332
+ cursor: pointer;
333
+
334
+ ${({ selected }) => selected && `
335
+ &::after {
336
+ content: '';
337
+ position: absolute;
338
+ bottom: -1px;
339
+ left: 0;
340
+ right: 0;
341
+ height: 3px;
342
+ background-color: ${colors.baseColors.primaryGreen};
343
+ }
344
+ `}
345
+ `;
346
+ var HelperText = styled.div`
347
+ margin-top: 4px;
348
+ font-size: ${typography.fontSize.xs}px;
349
+ color: ${({ error, warning }) => {
350
+ if (error) return colors.accents.error;
351
+ if (warning) return colors.accents.warning;
352
+ return colors.baseColors.grey3;
353
+ }};
354
+ `;
355
+ var FormField = ({
356
+ id,
357
+ label,
358
+ helperText,
359
+ error,
360
+ warning,
361
+ onInput,
362
+ onChange,
363
+ className,
364
+ ...inputProps
365
+ }) => {
366
+ const handleChange = (event) => {
367
+ if (onInput) {
368
+ onInput(event.target.value);
369
+ }
370
+ if (onChange) {
371
+ onChange(event);
372
+ }
373
+ };
374
+ const displayText = error || warning || helperText;
375
+ const hasError = !!error;
376
+ const hasWarning = !!warning && !hasError;
377
+ return /* @__PURE__ */ jsxs(FormFieldWrapper, { className, children: [
378
+ /* @__PURE__ */ jsx(Label_default, { htmlFor: id, children: label }),
379
+ /* @__PURE__ */ jsx(
380
+ Input_default,
381
+ {
382
+ id,
383
+ onChange: handleChange,
384
+ error: hasError,
385
+ warning: hasWarning,
386
+ ...inputProps
387
+ }
388
+ ),
389
+ displayText && /* @__PURE__ */ jsx(HelperText, { error: hasError, warning: hasWarning, children: displayText })
390
+ ] });
391
+ };
392
+ var FormFieldWrapper = styled.div`
393
+ display: flex;
394
+ flex-direction: column;
395
+
396
+ label {
397
+ margin-bottom: 8px;
398
+ color: ${colors.baseColors.darkBlue3};
399
+ font-size: ${typography.fontSize.m}px;
400
+ }
401
+ `;
402
+ var FormField_default = FormField;
403
+ var FormFieldTextarea = ({
404
+ id,
405
+ label,
406
+ helperText,
407
+ error,
408
+ warning,
409
+ onInput,
410
+ onChange,
411
+ className,
412
+ ...textareaProps
413
+ }) => {
414
+ const handleChange = (event) => {
415
+ if (onInput) {
416
+ onInput(event.target.value);
417
+ }
418
+ if (onChange) {
419
+ onChange(event);
420
+ }
421
+ };
422
+ const displayText = error || warning || helperText;
423
+ const hasError = !!error;
424
+ const hasWarning = !!warning && !hasError;
425
+ return /* @__PURE__ */ jsxs(FormFieldWrapper2, { className, children: [
426
+ /* @__PURE__ */ jsx(Label_default, { htmlFor: id, children: label }),
427
+ /* @__PURE__ */ jsx(
428
+ Textarea_default,
429
+ {
430
+ id,
431
+ onChange: handleChange,
432
+ error: hasError,
433
+ warning: hasWarning,
434
+ ...textareaProps
435
+ }
436
+ ),
437
+ displayText && /* @__PURE__ */ jsx(HelperText, { error: hasError, warning: hasWarning, children: displayText })
438
+ ] });
439
+ };
440
+ var FormFieldWrapper2 = styled.div`
441
+ display: flex;
442
+ flex-direction: column;
443
+
444
+ label {
445
+ margin-bottom: 8px;
446
+ color: ${colors.baseColors.darkBlue3};
447
+ font-size: ${typography.fontSize.m}px;
448
+ }
449
+ `;
450
+ var FormFieldTextarea_default = FormFieldTextarea;
451
+
452
+ export { Button_default as Button, FONT_SIZES, FONT_SIZE_KEYS, FONT_WEIGHTS, FormField_default as FormField, FormFieldTextarea_default as FormFieldTextarea, HelperText, Input_default as Input, Label_default as Label, Tab_default as Tab, Textarea_default as Textarea, Variant, colors, getOpacity, typography };
130
453
  //# sourceMappingURL=index.js.map
131
454
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/atoms/Spinner/Spinner.tsx","../src/atoms/Button/Button.tsx"],"names":["Variant","styled","jsx","jsxs"],"mappings":"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","file":"index.js","sourcesContent":["/** @jsxImportSource @emotion/react */\nimport React from \"react\";\nimport { keyframes } from \"@emotion/react\";\nimport styled from \"@emotion/styled\";\n\ninterface SpinnerProps {\n size?: number;\n speed?: string;\n bgColor?: string;\n fgColor?: string;\n}\n\nconst spin = keyframes`\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n`;\n\nconst Wrapper = styled.div<SpinnerProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n svg {\n width: ${({ size = 20 }) => size}px;\n height: ${({ size = 20 }) => size}px;\n animation: ${spin} ${({ speed = \"0.75s\" }) => speed} linear infinite;\n transform-origin: center;\n }\n`;\n\nconst Spinner: React.FC<SpinnerProps> = ({\n size = 20,\n speed = \"0.75s\",\n bgColor = \"#D1D5DB\",\n fgColor = \"#FFFFFF\",\n}) => (\n <Wrapper size={size} speed={speed}>\n <svg\n viewBox=\"0 0 50 50\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"status\"\n aria-label=\"loading\"\n >\n <circle cx=\"25\" cy=\"25\" r=\"20\" stroke={bgColor} strokeWidth=\"5\" />\n <path\n d=\"M45 25a20 20 0 0 1-20 20\"\n stroke={fgColor}\n strokeWidth=\"5\"\n strokeLinecap=\"round\"\n />\n </svg>\n </Wrapper>\n);\n\nexport default Spinner;\n","/** @jsxImportSource @emotion/react */\nimport { css } from \"@emotion/react\";\nimport styled from \"@emotion/styled\";\nimport React, { ReactNode } from \"react\";\nimport Spinner from \"../Spinner/Spinner\";\n\ntype VariantName = \"primary\" | \"secondary\" | \"outline\";\n\nexport enum Variant {\n Primary = \"primary\",\n Secondary = \"secondary\",\n Outline = \"outline\",\n}\n\ninterface VariantStyle {\n background: string;\n color?: string;\n border?: string;\n}\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n label: string;\n variant?: VariantName;\n disabled?: boolean;\n selected?: boolean;\n icon?: ReactNode;\n loading?: boolean;\n className?: string;\n}\n\nconst VARIANTS: Record<VariantName, VariantStyle> = {\n primary: {\n background: \"linear-gradient(90deg, #6D65DA 0.08%, #55A3BD 68.44%)\",\n color: \"#FFF\",\n },\n secondary: {\n background: \"#6D65DA\",\n color: \"#FFF\",\n },\n outline: {\n background: \"transparent\",\n border: \"1px solid rgba(70, 70, 74, 0.10)\",\n color: \"#0E1116D9\",\n },\n};\n\nconst StyledButton = styled.button<ButtonProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 12px 20px;\n border-radius: 100px;\n font-weight: 500;\n font-family: \"ABCFavoritExtended\", sans-serif;\n transition: all 0.2s ease;\n width: 100%;\n max-width: 336px;\n\n span {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 8px;\n }\n\n ${({ variant = \"primary\", disabled, selected }) => {\n const { background, color, border } = VARIANTS[variant];\n return css`\n background: ${background};\n border: ${selected ? \"2px solid #FFF\" : border || \"none\"};\n color: ${color || \"#FFF\"};\n opacity: ${disabled ? 0.5 : 1};\n cursor: ${disabled ? \"not-allowed\" : \"pointer\"};\n pointer-events: ${disabled ? \"none\" : \"auto\"};\n\n &:focus-visible {\n outline: 2px solid #0070f3;\n outline-offset: 2px;\n }\n `;\n }}\n`;\n\nconst Button: React.FC<ButtonProps> = ({\n label,\n icon,\n loading,\n disabled,\n className,\n ...rest\n}) => (\n <StyledButton\n label={\"\"}\n disabled={disabled || loading}\n className={className}\n {...rest}\n >\n {loading ? (\n <Spinner />\n ) : (\n <>\n {icon && <span>{icon}</span>}\n {label}\n </>\n )}\n </StyledButton>\n);\n\nexport default Button;\n"]}
1
+ {"version":3,"sources":["../src/atoms/Spinner/Spinner.tsx","../src/tokens/colors.ts","../src/tokens/typography.ts","../src/atoms/Button/Button.tsx","../src/utils/colorHelpers.ts","../src/atoms/shared/inputStyles.ts","../src/atoms/Input/Input.tsx","../src/atoms/Label/Label.tsx","../src/atoms/Textarea/Textarea.tsx","../src/atoms/Tab/Tab.tsx","../src/atoms/HelperText/HelperText.tsx","../src/molecules/FormField/FormField.tsx","../src/molecules/FormFieldTextarea/FormFieldTextarea.tsx"],"names":["Variant","styled","jsx","jsxs","css","FormFieldWrapper"],"mappings":"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","file":"index.js","sourcesContent":["/** @jsxImportSource @emotion/react */\nimport React from \"react\";\nimport { keyframes } from \"@emotion/react\";\nimport styled from \"@emotion/styled\";\n\ninterface SpinnerProps {\n size?: number;\n speed?: string;\n bgColor?: string;\n fgColor?: string;\n}\n\nconst spin = keyframes`\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n`;\n\nconst Wrapper = styled.div<SpinnerProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n svg {\n width: ${({ size = 20 }) => size}px;\n height: ${({ size = 20 }) => size}px;\n animation: ${spin} ${({ speed = \"0.75s\" }) => speed} linear infinite;\n transform-origin: center;\n }\n`;\n\nconst Spinner: React.FC<SpinnerProps> = ({\n size = 20,\n speed = \"0.75s\",\n bgColor = \"#D1D5DB\",\n fgColor = \"#FFFFFF\",\n}) => (\n <Wrapper size={size} speed={speed}>\n <svg\n viewBox=\"0 0 50 50\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"status\"\n aria-label=\"loading\"\n >\n <circle cx=\"25\" cy=\"25\" r=\"20\" stroke={bgColor} strokeWidth=\"5\" />\n <path\n d=\"M45 25a20 20 0 0 1-20 20\"\n stroke={fgColor}\n strokeWidth=\"5\"\n strokeLinecap=\"round\"\n />\n </svg>\n </Wrapper>\n);\n\nexport default Spinner;\n","/**\n * Color tokens for the design system\n */\n\nexport const colors = {\n // Brand colors\n baseColors: {\n // Brand\n primaryGreen: \"#7EE896\",\n primaryPurple: \"#6D65DA\",\n\n // Palette\n darkBlue1: \"#12131B\",\n darkBlue2: \"#2A2B33\",\n darkBlue3: \"#02061D\",\n\n grey1: \"#3C3C44\",\n grey2: \"#45454F\",\n grey3: \"#9CA3AF\",\n grey4: \"#8E8E98\",\n grey5: \"#4B4B4B\",\n grey6: \"#353535\",\n grey7: \"#ECECED\",\n\n white1: \"#ffffff\",\n },\n\n // Hover states\n hoverColors: {\n primaryPurple: \"#5F56D6\",\n },\n\n // Background colors\n backgrounds: {\n light1: \"#F5F6F8\",\n light2: \"#EFF1F8\",\n transparent: \"transparent\",\n },\n\n // Accents (errors, warnings, etc.)\n accents: {\n error: \"#F2545B\",\n danger: \"#D25E4A\",\n warning: \"#ECAC4D\",\n },\n\n // Gradients\n gradients: {\n gradient1: \"linear-gradient(90deg, #6D65DA 0.08%, #55A3BD 68.44%)\",\n },\n} as const;\n\nexport type Colors = typeof colors;\n\n","export type Typography = typeof typography;\n\nexport type FontWeight = (typeof FONT_WEIGHTS)[keyof typeof FONT_WEIGHTS];\nexport type FontSize = (typeof FONT_SIZES)[keyof typeof FONT_SIZES];\nexport type FontSizeKey = keyof typeof FONT_SIZES;\nexport type Align = \"left\" | \"center\" | \"right\";\n/**\n * Typography tokens for the design system\n */\n\nexport const FONT_WEIGHTS = {\n light: 300,\n regular: 350,\n normal: 400,\n medium: 500,\n bold: 700,\n} as const;\n\nexport const FONT_SIZES = {\n xxs: 10,\n xs: 12,\n s: 13,\n m: 14,\n base: 16,\n lg: 18,\n xl: 20,\n \"2xl\": 24,\n} as const;\n\nexport const typography = {\n fontFamily: {\n primary: '\"ABCFavoritExtended\", sans-serif',\n },\n\n fontWeight: FONT_WEIGHTS,\n\n fontSize: FONT_SIZES,\n\n lineHeight: {\n tight: 1.2,\n normal: 1.5,\n relaxed: 1.75,\n },\n} as const;\n\nexport const FONT_SIZE_KEYS = {\n xxs: \"xxs\",\n xs: \"xs\",\n s: \"s\",\n m: \"m\",\n base: \"base\",\n lg: \"lg\",\n xl: \"xl\",\n \"2xl\": \"2xl\",\n} as const satisfies Record<string, FontSizeKey>;\n\n","/** @jsxImportSource @emotion/react */\nimport { css } from \"@emotion/react\";\nimport styled from \"@emotion/styled\";\nimport React, { ReactNode } from \"react\";\nimport Spinner from \"../Spinner/Spinner\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\n\nexport type VariantName = \"primary\" | \"secondary\" | \"outline\";\n\nexport enum Variant {\n Primary = \"primary\",\n Secondary = \"secondary\",\n Outline = \"outline\",\n}\n\ninterface VariantStyle {\n background: string;\n color?: string;\n border?: string;\n}\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n label: string;\n variant?: VariantName;\n disabled?: boolean;\n selected?: boolean;\n icon?: ReactNode;\n loading?: boolean;\n className?: string;\n}\n\nconst VARIANTS: Record<VariantName, VariantStyle> = {\n primary: {\n background: colors.gradients.gradient1,\n color: colors.baseColors.white1,\n },\n secondary: {\n background: colors.baseColors.primaryPurple,\n color: colors.baseColors.white1,\n },\n outline: {\n background: colors.backgrounds.transparent,\n border: \"1px solid rgba(70, 70, 74, 0.10)\",\n color: \"#0E1116D9\",\n },\n};\n\nconst StyledButton = styled.button<ButtonProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 12px 20px;\n border-radius: 100px;\n font-weight: ${typography.fontWeight.medium};\n font-family: ${typography.fontFamily.primary};\n transition: all 0.2s ease;\n width: 100%;\n max-width: 336px;\n\n span {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 8px;\n }\n\n ${({ variant = \"primary\", disabled, selected }) => {\n const { background, color, border } = VARIANTS[variant];\n return css`\n background: ${background};\n border: ${selected ? `2px solid ${colors.baseColors.white1}` : border || \"none\"};\n color: ${color || colors.baseColors.white1};\n opacity: ${disabled ? 0.5 : 1};\n cursor: ${disabled ? \"not-allowed\" : \"pointer\"};\n pointer-events: ${disabled ? \"none\" : \"auto\"};\n\n &:focus-visible {\n outline: 2px solid #0070f3;\n outline-offset: 2px;\n }\n `;\n }}\n`;\n\nconst Button: React.FC<ButtonProps> = ({\n label,\n icon,\n loading,\n disabled,\n className,\n ...rest\n}) => (\n <StyledButton\n label={\"\"}\n disabled={disabled || loading}\n className={className}\n {...rest}\n >\n {loading ? (\n <Spinner />\n ) : (\n <>\n {icon && <span>{icon}</span>}\n {label}\n </>\n )}\n </StyledButton>\n);\n\nexport default Button;\n","/**\n * Color utility functions for the design system\n */\n\nexport type TOpacity = number; // 0-100\nexport type TColor = string; // Hex color with alpha channel\n\n/**\n * Converts a hex color to a hex color with alpha channel\n * @param hexColor - Hex color string (e.g., \"#6D65DA\" or \"6D65DA\")\n * @param opacity - Opacity value from 0-100\n * @returns Hex color with alpha channel (e.g., \"#6D65DAB3\" for 70% opacity)\n * @throws Error if hex color is invalid\n */\nexport function getOpacity(hexColor: string, opacity: TOpacity): TColor {\n const hex = hexColor.trim().replace(/^#/, \"\");\n \n if (!/^[\\da-fA-F]{6}$/.test(hex)) {\n throw new Error(`Invalid hex color: ${hexColor}`);\n }\n\n const opacityFraction = Math.round((opacity / 100) * 255);\n const alphaHex = opacityFraction.toString(16).padStart(2, \"0\");\n\n return `#${hex}${alphaHex}`;\n}\n\n","import { css } from \"@emotion/react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\nimport { getOpacity } from \"../../utils/colorHelpers\";\n\nexport const defaultPadding = \"9px 17px\";\nexport const focusedPadding = \"8px 16px\";\n\nexport const baseInputStyles = css`\n border-radius: 10px;\n border: 1px solid ${colors.baseColors.grey7};\n padding: ${defaultPadding};\n color: ${getOpacity(colors.baseColors.darkBlue3, 80)};\n background-color: ${colors.baseColors.white1};\n font-weight: ${typography.fontWeight.regular};\n cursor: text;\n transition: border-color 0.2s ease;\n box-sizing: border-box;\n\n &::placeholder {\n color: ${colors.baseColors.grey3};\n }\n\n &:hover:not(:disabled) {\n cursor: text;\n }\n\n &:focus {\n outline: none;\n border-width: 2px;\n border-color: ${colors.baseColors.primaryPurple};\n padding: ${focusedPadding};\n }\n\n &:disabled {\n background-color: ${colors.baseColors.grey7};\n cursor: not-allowed;\n }\n`;\n\nexport const errorStyles = css`\n border-width: 2px;\n border-color: ${colors.accents.error};\n padding: ${focusedPadding};\n\n &:focus {\n border-width: 2px;\n border-color: ${colors.accents.error};\n padding: ${focusedPadding};\n }\n`;\n\nexport const warningStyles = css`\n border-width: 2px;\n border-color: ${colors.accents.warning};\n padding: ${focusedPadding};\n\n &:focus {\n border-width: 2px;\n border-color: ${colors.accents.warning};\n padding: ${focusedPadding};\n }\n`;\n\n","import styled from \"@emotion/styled\";\nimport React from \"react\";\nimport { baseInputStyles, errorStyles, warningStyles } from \"../shared/inputStyles\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n className?: string;\n error?: boolean;\n warning?: boolean;\n}\n\nconst Input: React.FC<InputProps> = ({ className, error, warning, ...rest }) => {\n return <StyledInput className={className} error={error} warning={warning} {...rest} />;\n};\n\nexport default Input;\n\nconst StyledInput = styled.input<InputProps>`\n ${baseInputStyles}\n\n ${({ error }) => error && errorStyles}\n ${({ warning }) => warning && warningStyles}\n`;","import React from \"react\";\n\nexport interface LabelProps\n extends React.LabelHTMLAttributes<HTMLLabelElement> {\n className?: string;\n htmlFor?: string;\n}\n\nconst Label: React.FC<LabelProps> = ({ className, htmlFor, children, ...rest }) => {\n return (\n <label className={className} htmlFor={htmlFor} {...rest}>\n {children}\n </label>\n );\n};\n\nexport default Label;\n\n","import styled from \"@emotion/styled\";\nimport React from \"react\";\nimport { baseInputStyles, errorStyles, warningStyles } from \"../shared/inputStyles\";\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n className?: string;\n error?: boolean;\n warning?: boolean;\n}\n\nconst Textarea: React.FC<TextareaProps> = ({ className, error, warning, ...rest }) => {\n return <StyledTextarea className={className} error={error} warning={warning} {...rest} />;\n};\n\nexport default Textarea;\n\nconst StyledTextarea = styled.textarea<TextareaProps>`\n ${baseInputStyles}\n resize: vertical;\n min-height: 80px;\n font-family: inherit;\n\n ${({ error }) => error && errorStyles}\n ${({ warning }) => warning && warningStyles}\n`;\n\n","import styled from \"@emotion/styled\";\nimport React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography, type FontSizeKey } from \"../../tokens/typography\";\n\nexport interface TabProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"fontSize\"> {\n children: React.ReactNode;\n selected?: boolean;\n fontSize?: FontSizeKey;\n className?: string;\n}\n\ninterface StyledTabProps {\n selected?: boolean;\n fontSize: FontSizeKey;\n}\n\nconst Tab: React.FC<TabProps> = ({\n children,\n selected,\n fontSize = \"m\",\n className,\n ...rest\n}) => {\n return (\n <StyledTab\n className={className}\n selected={selected}\n fontSize={fontSize}\n {...rest}\n >\n {children}\n </StyledTab>\n );\n};\n\nexport default Tab;\n\nconst StyledTab = styled.div<StyledTabProps>`\n display: inline-block;\n padding: 8px 16px;\n user-select: none;\n font-size: ${({ fontSize }) => `${typography.fontSize[fontSize]}px`};\n position: relative;\n transition: border-color 0.2s ease;\n cursor: pointer;\n\n ${({ selected }) =>\n selected &&\n `\n &::after {\n content: '';\n position: absolute;\n bottom: -1px;\n left: 0;\n right: 0;\n height: 3px;\n background-color: ${colors.baseColors.primaryGreen};\n }\n `}\n`;\n\n","import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\n\nexport interface HelperTextProps {\n error?: boolean;\n warning?: boolean;\n children: React.ReactNode;\n}\n\nexport const HelperText = styled.div<HelperTextProps>`\n margin-top: 4px;\n font-size: ${typography.fontSize.xs}px;\n color: ${({ error, warning }) => {\n if (error) return colors.accents.error;\n if (warning) return colors.accents.warning;\n return colors.baseColors.grey3;\n }};\n`;\n\n","import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport Input, { InputProps } from \"../../atoms/Input\";\nimport Label from \"../../atoms/Label\";\nimport { HelperText } from \"../../atoms/HelperText\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\n\nexport interface FormFieldProps extends Omit<InputProps, \"id\" | \"onInput\" | \"error\" | \"warning\"> {\n id: string;\n label: string;\n helperText?: string;\n error?: string;\n warning?: string;\n onInput?: (value: string) => void;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nconst FormField: React.FC<FormFieldProps> = ({\n id,\n label,\n helperText,\n error,\n warning,\n onInput,\n onChange,\n className,\n ...inputProps\n}) => {\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (onInput) {\n onInput(event.target.value);\n }\n if (onChange) {\n onChange(event);\n }\n };\n\n const displayText = error || warning || helperText;\n const hasError = !!error;\n const hasWarning = !!warning && !hasError;\n\n return (\n <FormFieldWrapper className={className}>\n <Label htmlFor={id}>{label}</Label>\n <Input\n id={id}\n onChange={handleChange}\n error={hasError}\n warning={hasWarning}\n {...inputProps}\n />\n {displayText && (\n <HelperText error={hasError} warning={hasWarning}>\n {displayText}\n </HelperText>\n )}\n </FormFieldWrapper>\n );\n};\n\nconst FormFieldWrapper = styled.div`\n display: flex;\n flex-direction: column;\n \n label {\n margin-bottom: 8px;\n color: ${colors.baseColors.darkBlue3};\n font-size: ${typography.fontSize.m}px;\n }\n`;\n\nexport default FormField;\n\n","import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport Textarea, { TextareaProps } from \"../../atoms/Textarea\";\nimport Label from \"../../atoms/Label\";\nimport { HelperText } from \"../../atoms/HelperText\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\n\nexport interface FormFieldTextareaProps extends Omit<TextareaProps, \"id\" | \"onInput\" | \"error\" | \"warning\"> {\n id: string;\n label: string;\n helperText?: string;\n error?: string;\n warning?: string;\n onInput?: (value: string) => void;\n onChange?: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n}\n\nconst FormFieldTextarea: React.FC<FormFieldTextareaProps> = ({\n id,\n label,\n helperText,\n error,\n warning,\n onInput,\n onChange,\n className,\n ...textareaProps\n}) => {\n const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (onInput) {\n onInput(event.target.value);\n }\n if (onChange) {\n onChange(event);\n }\n };\n\n const displayText = error || warning || helperText;\n const hasError = !!error;\n const hasWarning = !!warning && !hasError;\n\n return (\n <FormFieldWrapper className={className}>\n <Label htmlFor={id}>{label}</Label>\n <Textarea\n id={id}\n onChange={handleChange}\n error={hasError}\n warning={hasWarning}\n {...textareaProps}\n />\n {displayText && (\n <HelperText error={hasError} warning={hasWarning}>\n {displayText}\n </HelperText>\n )}\n </FormFieldWrapper>\n );\n};\n\nconst FormFieldWrapper = styled.div`\n display: flex;\n flex-direction: column;\n \n label {\n margin-bottom: 8px;\n color: ${colors.baseColors.darkBlue3};\n font-size: ${typography.fontSize.m}px;\n }\n`;\n\nexport default FormFieldTextarea;\n\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ndcloud-storybook",
3
- "version": "1.0.1",
3
+ "version": "1.2.1",
4
4
  "description": "",
5
5
  "license": "ISC",
6
6
  "type": "module",