@shapesos/clay 0.6.0 → 0.7.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/button.cjs +604 -0
- package/dist/button.cjs.map +1 -0
- package/dist/button.d.cts +53 -0
- package/dist/button.d.ts +53 -0
- package/dist/button.js +17 -0
- package/dist/button.js.map +1 -0
- package/dist/chunk-FFABDVB3.js +149 -0
- package/dist/chunk-FFABDVB3.js.map +1 -0
- package/dist/index.cjs +139 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +10 -0
- package/package.json +6 -1
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ComponentType, SVGProps } from 'react';
|
|
3
|
+
|
|
4
|
+
/** Available visual style variants for the Button component. */
|
|
5
|
+
declare const BUTTON_VARIANT: {
|
|
6
|
+
readonly SOLID: "solid";
|
|
7
|
+
readonly OUTLINE: "outline";
|
|
8
|
+
readonly GHOST: "ghost";
|
|
9
|
+
};
|
|
10
|
+
/** Available size presets for the Button component. */
|
|
11
|
+
declare const BUTTON_SIZE: {
|
|
12
|
+
readonly XS: "xs";
|
|
13
|
+
readonly S: "s";
|
|
14
|
+
readonly M: "m";
|
|
15
|
+
};
|
|
16
|
+
/** Available icon positions relative to the label text. */
|
|
17
|
+
declare const ICON_POSITION: {
|
|
18
|
+
readonly LEADING: "leading";
|
|
19
|
+
readonly TRAILING: "trailing";
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/** Visual style of the button. */
|
|
23
|
+
type ButtonVariant = (typeof BUTTON_VARIANT)[keyof typeof BUTTON_VARIANT];
|
|
24
|
+
/** Size preset for the button. */
|
|
25
|
+
type ButtonSize = (typeof BUTTON_SIZE)[keyof typeof BUTTON_SIZE];
|
|
26
|
+
/** Position of the optional icon relative to the label text. */
|
|
27
|
+
type IconPosition = (typeof ICON_POSITION)[keyof typeof ICON_POSITION];
|
|
28
|
+
/** Props for the Button component. */
|
|
29
|
+
interface ButtonProps {
|
|
30
|
+
/** The text label displayed inside the button. */
|
|
31
|
+
children: React.ReactNode;
|
|
32
|
+
/** Visual style variant. @default "solid" */
|
|
33
|
+
variant?: ButtonVariant;
|
|
34
|
+
/** Size preset controlling padding, border radius, and icon gap. @default "m" */
|
|
35
|
+
size?: ButtonSize;
|
|
36
|
+
/** Optional icon component (Tabler icon or any SVG component). Rendered at 16px. */
|
|
37
|
+
icon?: ComponentType<SVGProps<SVGSVGElement>>;
|
|
38
|
+
/** Position of the icon relative to the label. @default "leading" */
|
|
39
|
+
iconPosition?: IconPosition;
|
|
40
|
+
/** Whether the button is disabled. @default false */
|
|
41
|
+
disabled?: boolean;
|
|
42
|
+
/** Click handler. */
|
|
43
|
+
onClick?: React.MouseEventHandler<HTMLButtonElement>;
|
|
44
|
+
/** Additional CSS class names. */
|
|
45
|
+
className?: string;
|
|
46
|
+
/** Accessible label override (uses children text by default). */
|
|
47
|
+
"aria-label"?: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** A versatile button component with multiple variants and sizes. */
|
|
51
|
+
declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
|
|
52
|
+
|
|
53
|
+
export { BUTTON_SIZE, BUTTON_VARIANT, Button, type ButtonProps, type ButtonSize, type ButtonVariant, ICON_POSITION, type IconPosition };
|
package/dist/button.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ComponentType, SVGProps } from 'react';
|
|
3
|
+
|
|
4
|
+
/** Available visual style variants for the Button component. */
|
|
5
|
+
declare const BUTTON_VARIANT: {
|
|
6
|
+
readonly SOLID: "solid";
|
|
7
|
+
readonly OUTLINE: "outline";
|
|
8
|
+
readonly GHOST: "ghost";
|
|
9
|
+
};
|
|
10
|
+
/** Available size presets for the Button component. */
|
|
11
|
+
declare const BUTTON_SIZE: {
|
|
12
|
+
readonly XS: "xs";
|
|
13
|
+
readonly S: "s";
|
|
14
|
+
readonly M: "m";
|
|
15
|
+
};
|
|
16
|
+
/** Available icon positions relative to the label text. */
|
|
17
|
+
declare const ICON_POSITION: {
|
|
18
|
+
readonly LEADING: "leading";
|
|
19
|
+
readonly TRAILING: "trailing";
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/** Visual style of the button. */
|
|
23
|
+
type ButtonVariant = (typeof BUTTON_VARIANT)[keyof typeof BUTTON_VARIANT];
|
|
24
|
+
/** Size preset for the button. */
|
|
25
|
+
type ButtonSize = (typeof BUTTON_SIZE)[keyof typeof BUTTON_SIZE];
|
|
26
|
+
/** Position of the optional icon relative to the label text. */
|
|
27
|
+
type IconPosition = (typeof ICON_POSITION)[keyof typeof ICON_POSITION];
|
|
28
|
+
/** Props for the Button component. */
|
|
29
|
+
interface ButtonProps {
|
|
30
|
+
/** The text label displayed inside the button. */
|
|
31
|
+
children: React.ReactNode;
|
|
32
|
+
/** Visual style variant. @default "solid" */
|
|
33
|
+
variant?: ButtonVariant;
|
|
34
|
+
/** Size preset controlling padding, border radius, and icon gap. @default "m" */
|
|
35
|
+
size?: ButtonSize;
|
|
36
|
+
/** Optional icon component (Tabler icon or any SVG component). Rendered at 16px. */
|
|
37
|
+
icon?: ComponentType<SVGProps<SVGSVGElement>>;
|
|
38
|
+
/** Position of the icon relative to the label. @default "leading" */
|
|
39
|
+
iconPosition?: IconPosition;
|
|
40
|
+
/** Whether the button is disabled. @default false */
|
|
41
|
+
disabled?: boolean;
|
|
42
|
+
/** Click handler. */
|
|
43
|
+
onClick?: React.MouseEventHandler<HTMLButtonElement>;
|
|
44
|
+
/** Additional CSS class names. */
|
|
45
|
+
className?: string;
|
|
46
|
+
/** Accessible label override (uses children text by default). */
|
|
47
|
+
"aria-label"?: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** A versatile button component with multiple variants and sizes. */
|
|
51
|
+
declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
|
|
52
|
+
|
|
53
|
+
export { BUTTON_SIZE, BUTTON_VARIANT, Button, type ButtonProps, type ButtonSize, type ButtonVariant, ICON_POSITION, type IconPosition };
|
package/dist/button.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BUTTON_SIZE,
|
|
3
|
+
BUTTON_VARIANT,
|
|
4
|
+
Button,
|
|
5
|
+
ICON_POSITION
|
|
6
|
+
} from "./chunk-FFABDVB3.js";
|
|
7
|
+
import "./chunk-SV24ONND.js";
|
|
8
|
+
import "./chunk-OLJIJYB5.js";
|
|
9
|
+
import "./chunk-JF3P66JF.js";
|
|
10
|
+
import "./chunk-5WRI5ZAA.js";
|
|
11
|
+
export {
|
|
12
|
+
BUTTON_SIZE,
|
|
13
|
+
BUTTON_VARIANT,
|
|
14
|
+
Button,
|
|
15
|
+
ICON_POSITION
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import {
|
|
2
|
+
typographyMixin,
|
|
3
|
+
typographyTypes
|
|
4
|
+
} from "./chunk-SV24ONND.js";
|
|
5
|
+
import {
|
|
6
|
+
Icon
|
|
7
|
+
} from "./chunk-OLJIJYB5.js";
|
|
8
|
+
import {
|
|
9
|
+
colors
|
|
10
|
+
} from "./chunk-JF3P66JF.js";
|
|
11
|
+
|
|
12
|
+
// src/components/button/button.tsx
|
|
13
|
+
import { forwardRef } from "react";
|
|
14
|
+
|
|
15
|
+
// src/components/button/button-styles.ts
|
|
16
|
+
import styled, { css } from "styled-components";
|
|
17
|
+
var sizeStyles = {
|
|
18
|
+
xs: css`
|
|
19
|
+
padding: 6px 10px;
|
|
20
|
+
border-radius: 8px;
|
|
21
|
+
gap: 4px;
|
|
22
|
+
`,
|
|
23
|
+
s: css`
|
|
24
|
+
padding: 8px 12px;
|
|
25
|
+
border-radius: 10px;
|
|
26
|
+
gap: 6px;
|
|
27
|
+
`,
|
|
28
|
+
m: css`
|
|
29
|
+
padding: 10px 14px;
|
|
30
|
+
border-radius: 10px;
|
|
31
|
+
gap: 6px;
|
|
32
|
+
`
|
|
33
|
+
};
|
|
34
|
+
var variantStyles = {
|
|
35
|
+
solid: css`
|
|
36
|
+
background: ${colors["brown-100"]};
|
|
37
|
+
color: ${colors.white};
|
|
38
|
+
border: none;
|
|
39
|
+
|
|
40
|
+
&:hover:not(:disabled) {
|
|
41
|
+
background: ${colors["brown-90"]};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
&:disabled {
|
|
45
|
+
background: ${colors["brown-20"]};
|
|
46
|
+
color: ${colors["brown-50"]};
|
|
47
|
+
}
|
|
48
|
+
`,
|
|
49
|
+
outline: css`
|
|
50
|
+
background: ${colors.white};
|
|
51
|
+
color: ${colors["brown-100"]};
|
|
52
|
+
border: 1px solid ${colors["brown-40"]};
|
|
53
|
+
|
|
54
|
+
&:hover:not(:disabled) {
|
|
55
|
+
background: ${colors["brown-20"]};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
&:disabled {
|
|
59
|
+
border-color: ${colors["brown-20"]};
|
|
60
|
+
color: ${colors["brown-50"]};
|
|
61
|
+
}
|
|
62
|
+
`,
|
|
63
|
+
ghost: css`
|
|
64
|
+
background: transparent;
|
|
65
|
+
color: ${colors["brown-100"]};
|
|
66
|
+
border: none;
|
|
67
|
+
|
|
68
|
+
&:hover:not(:disabled) {
|
|
69
|
+
background: ${colors["brown-20"]};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
&:disabled {
|
|
73
|
+
color: ${colors["brown-50"]};
|
|
74
|
+
}
|
|
75
|
+
`
|
|
76
|
+
};
|
|
77
|
+
var StyledButton = styled.button`
|
|
78
|
+
display: inline-flex;
|
|
79
|
+
align-items: center;
|
|
80
|
+
justify-content: center;
|
|
81
|
+
cursor: pointer;
|
|
82
|
+
${typographyMixin(typographyTypes.GEIST_BODY_XS_MEDIUM)};
|
|
83
|
+
transition: background-color 150ms ease, border-color 150ms ease, color 150ms ease;
|
|
84
|
+
|
|
85
|
+
&:disabled {
|
|
86
|
+
cursor: not-allowed;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
${({ $size }) => sizeStyles[$size]}
|
|
90
|
+
${({ $variant }) => variantStyles[$variant]}
|
|
91
|
+
`;
|
|
92
|
+
|
|
93
|
+
// src/components/button/constants.ts
|
|
94
|
+
var BUTTON_VARIANT = {
|
|
95
|
+
SOLID: "solid",
|
|
96
|
+
OUTLINE: "outline",
|
|
97
|
+
GHOST: "ghost"
|
|
98
|
+
};
|
|
99
|
+
var BUTTON_SIZE = {
|
|
100
|
+
XS: "xs",
|
|
101
|
+
S: "s",
|
|
102
|
+
M: "m"
|
|
103
|
+
};
|
|
104
|
+
var ICON_POSITION = {
|
|
105
|
+
LEADING: "leading",
|
|
106
|
+
TRAILING: "trailing"
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
// src/components/button/button.tsx
|
|
110
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
111
|
+
var Button = forwardRef(function Button2({
|
|
112
|
+
children,
|
|
113
|
+
variant = BUTTON_VARIANT.SOLID,
|
|
114
|
+
size = BUTTON_SIZE.M,
|
|
115
|
+
icon,
|
|
116
|
+
iconPosition = ICON_POSITION.LEADING,
|
|
117
|
+
disabled = false,
|
|
118
|
+
onClick,
|
|
119
|
+
className,
|
|
120
|
+
"aria-label": ariaLabel
|
|
121
|
+
}, ref) {
|
|
122
|
+
const iconElement = icon ? /* @__PURE__ */ jsx(Icon, { icon, size: 16 }) : null;
|
|
123
|
+
return /* @__PURE__ */ jsxs(
|
|
124
|
+
StyledButton,
|
|
125
|
+
{
|
|
126
|
+
ref,
|
|
127
|
+
type: "button",
|
|
128
|
+
$variant: variant,
|
|
129
|
+
$size: size,
|
|
130
|
+
disabled,
|
|
131
|
+
onClick: disabled ? void 0 : onClick,
|
|
132
|
+
className,
|
|
133
|
+
"aria-label": ariaLabel,
|
|
134
|
+
children: [
|
|
135
|
+
iconPosition === ICON_POSITION.LEADING && iconElement,
|
|
136
|
+
/* @__PURE__ */ jsx("span", { children }),
|
|
137
|
+
iconPosition === ICON_POSITION.TRAILING && iconElement
|
|
138
|
+
]
|
|
139
|
+
}
|
|
140
|
+
);
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
export {
|
|
144
|
+
BUTTON_VARIANT,
|
|
145
|
+
BUTTON_SIZE,
|
|
146
|
+
ICON_POSITION,
|
|
147
|
+
Button
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=chunk-FFABDVB3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/button/button.tsx","../src/components/button/button-styles.ts","../src/components/button/constants.ts"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { Icon } from \"../icon/icon\";\nimport { StyledButton } from \"./button-styles\";\nimport { BUTTON_SIZE, BUTTON_VARIANT, ICON_POSITION } from \"./constants\";\nimport type { ButtonProps } from \"./types\";\n\n/** A versatile button component with multiple variants and sizes. */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n children,\n variant = BUTTON_VARIANT.SOLID,\n size = BUTTON_SIZE.M,\n icon,\n iconPosition = ICON_POSITION.LEADING,\n disabled = false,\n onClick,\n className,\n \"aria-label\": ariaLabel,\n },\n ref\n) {\n const iconElement = icon ? <Icon icon={icon} size={16} /> : null;\n\n return (\n <StyledButton\n ref={ref}\n type=\"button\"\n $variant={variant}\n $size={size}\n disabled={disabled}\n onClick={disabled ? undefined : onClick}\n className={className}\n aria-label={ariaLabel}\n >\n {iconPosition === ICON_POSITION.LEADING && iconElement}\n <span>{children}</span>\n {iconPosition === ICON_POSITION.TRAILING && iconElement}\n </StyledButton>\n );\n});\n","import styled, { css } from \"styled-components\";\nimport { colors } from \"../../tokens/colors\";\nimport { typographyMixin, typographyTypes } from \"../../tokens/typography\";\nimport type { ButtonSize, ButtonVariant } from \"./types\";\n\nconst sizeStyles: Record<ButtonSize, ReturnType<typeof css>> = {\n xs: css`\n padding: 6px 10px;\n border-radius: 8px;\n gap: 4px;\n `,\n s: css`\n padding: 8px 12px;\n border-radius: 10px;\n gap: 6px;\n `,\n m: css`\n padding: 10px 14px;\n border-radius: 10px;\n gap: 6px;\n `,\n};\n\nconst variantStyles: Record<ButtonVariant, ReturnType<typeof css>> = {\n solid: css`\n background: ${colors[\"brown-100\"]};\n color: ${colors.white};\n border: none;\n\n &:hover:not(:disabled) {\n background: ${colors[\"brown-90\"]};\n }\n\n &:disabled {\n background: ${colors[\"brown-20\"]};\n color: ${colors[\"brown-50\"]};\n }\n `,\n outline: css`\n background: ${colors.white};\n color: ${colors[\"brown-100\"]};\n border: 1px solid ${colors[\"brown-40\"]};\n\n &:hover:not(:disabled) {\n background: ${colors[\"brown-20\"]};\n }\n\n &:disabled {\n border-color: ${colors[\"brown-20\"]};\n color: ${colors[\"brown-50\"]};\n }\n `,\n ghost: css`\n background: transparent;\n color: ${colors[\"brown-100\"]};\n border: none;\n\n &:hover:not(:disabled) {\n background: ${colors[\"brown-20\"]};\n }\n\n &:disabled {\n color: ${colors[\"brown-50\"]};\n }\n `,\n};\n\n/** Styled button element with variant and size transient props. */\nexport const StyledButton = styled.button<{ $variant: ButtonVariant; $size: ButtonSize }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n ${typographyMixin(typographyTypes.GEIST_BODY_XS_MEDIUM)};\n transition: background-color 150ms ease, border-color 150ms ease, color 150ms ease;\n\n &:disabled {\n cursor: not-allowed;\n }\n\n ${({ $size }) => sizeStyles[$size]}\n ${({ $variant }) => variantStyles[$variant]}\n`;\n","/** Available visual style variants for the Button component. */\nexport const BUTTON_VARIANT = {\n SOLID: \"solid\",\n OUTLINE: \"outline\",\n GHOST: \"ghost\",\n} as const;\n\n/** Available size presets for the Button component. */\nexport const BUTTON_SIZE = {\n XS: \"xs\",\n S: \"s\",\n M: \"m\",\n} as const;\n\n/** Available icon positions relative to the label text. */\nexport const ICON_POSITION = {\n LEADING: \"leading\",\n TRAILING: \"trailing\",\n} as const;\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,kBAAkB;;;ACA3B,OAAO,UAAU,WAAW;AAK5B,IAAM,aAAyD;AAAA,EAC7D,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,EAKJ,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA,EAKH,GAAG;AAAA;AAAA;AAAA;AAAA;AAKL;AAEA,IAAM,gBAA+D;AAAA,EACnE,OAAO;AAAA,kBACS,OAAO,WAAW,CAAC;AAAA,aACxB,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA,oBAIL,OAAO,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA,oBAIlB,OAAO,UAAU,CAAC;AAAA,eACvB,OAAO,UAAU,CAAC;AAAA;AAAA;AAAA,EAG/B,SAAS;AAAA,kBACO,OAAO,KAAK;AAAA,aACjB,OAAO,WAAW,CAAC;AAAA,wBACR,OAAO,UAAU,CAAC;AAAA;AAAA;AAAA,oBAGtB,OAAO,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA,sBAIhB,OAAO,UAAU,CAAC;AAAA,eACzB,OAAO,UAAU,CAAC;AAAA;AAAA;AAAA,EAG/B,OAAO;AAAA;AAAA,aAEI,OAAO,WAAW,CAAC;AAAA;AAAA;AAAA;AAAA,oBAIZ,OAAO,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA,eAIvB,OAAO,UAAU,CAAC;AAAA;AAAA;AAGjC;AAGO,IAAM,eAAe,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAK/B,gBAAgB,gBAAgB,oBAAoB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOrD,CAAC,EAAE,MAAM,MAAM,WAAW,KAAK,CAAC;AAAA,IAChC,CAAC,EAAE,SAAS,MAAM,cAAc,QAAQ,CAAC;AAAA;;;AChFtC,IAAM,iBAAiB;AAAA,EAC5B,OAAO;AAAA,EACP,SAAS;AAAA,EACT,OAAO;AACT;AAGO,IAAM,cAAc;AAAA,EACzB,IAAI;AAAA,EACJ,GAAG;AAAA,EACH,GAAG;AACL;AAGO,IAAM,gBAAgB;AAAA,EAC3B,SAAS;AAAA,EACT,UAAU;AACZ;;;AFG6B,cAGzB,YAHyB;AAdtB,IAAM,SAAS,WAA2C,SAASA,QACxE;AAAA,EACE;AAAA,EACA,UAAU,eAAe;AAAA,EACzB,OAAO,YAAY;AAAA,EACnB;AAAA,EACA,eAAe,cAAc;AAAA,EAC7B,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,cAAc;AAChB,GACA,KACA;AACA,QAAM,cAAc,OAAO,oBAAC,QAAK,MAAY,MAAM,IAAI,IAAK;AAE5D,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,MAAK;AAAA,MACL,UAAU;AAAA,MACV,OAAO;AAAA,MACP;AAAA,MACA,SAAS,WAAW,SAAY;AAAA,MAChC;AAAA,MACA,cAAY;AAAA,MAEX;AAAA,yBAAiB,cAAc,WAAW;AAAA,QAC3C,oBAAC,UAAM,UAAS;AAAA,QACf,iBAAiB,cAAc,YAAY;AAAA;AAAA;AAAA,EAC9C;AAEJ,CAAC;","names":["Button"]}
|
package/dist/index.cjs
CHANGED
|
@@ -16342,8 +16342,12 @@ var require_lottie = __commonJS({
|
|
|
16342
16342
|
// src/index.ts
|
|
16343
16343
|
var src_exports = {};
|
|
16344
16344
|
__export(src_exports, {
|
|
16345
|
+
BUTTON_SIZE: () => BUTTON_SIZE,
|
|
16346
|
+
BUTTON_VARIANT: () => BUTTON_VARIANT,
|
|
16347
|
+
Button: () => Button2,
|
|
16345
16348
|
ChatContext: () => ChatContext,
|
|
16346
16349
|
ChatMessage: () => ChatMessage,
|
|
16350
|
+
ICON_POSITION: () => ICON_POSITION,
|
|
16347
16351
|
Icon: () => Icon,
|
|
16348
16352
|
IconButton: () => IconButton,
|
|
16349
16353
|
IconCtrl: () => IconCtrl,
|
|
@@ -17581,10 +17585,145 @@ var TextArea = (0, import_react8.forwardRef)(function TextArea2({ value: value2,
|
|
|
17581
17585
|
}
|
|
17582
17586
|
);
|
|
17583
17587
|
});
|
|
17588
|
+
|
|
17589
|
+
// src/components/button/button.tsx
|
|
17590
|
+
var import_react9 = require("react");
|
|
17591
|
+
|
|
17592
|
+
// src/components/button/button-styles.ts
|
|
17593
|
+
var import_styled_components9 = __toESM(require("styled-components"), 1);
|
|
17594
|
+
var sizeStyles = {
|
|
17595
|
+
xs: import_styled_components9.css`
|
|
17596
|
+
padding: 6px 10px;
|
|
17597
|
+
border-radius: 8px;
|
|
17598
|
+
gap: 4px;
|
|
17599
|
+
`,
|
|
17600
|
+
s: import_styled_components9.css`
|
|
17601
|
+
padding: 8px 12px;
|
|
17602
|
+
border-radius: 10px;
|
|
17603
|
+
gap: 6px;
|
|
17604
|
+
`,
|
|
17605
|
+
m: import_styled_components9.css`
|
|
17606
|
+
padding: 10px 14px;
|
|
17607
|
+
border-radius: 10px;
|
|
17608
|
+
gap: 6px;
|
|
17609
|
+
`
|
|
17610
|
+
};
|
|
17611
|
+
var variantStyles2 = {
|
|
17612
|
+
solid: import_styled_components9.css`
|
|
17613
|
+
background: ${colors["brown-100"]};
|
|
17614
|
+
color: ${colors.white};
|
|
17615
|
+
border: none;
|
|
17616
|
+
|
|
17617
|
+
&:hover:not(:disabled) {
|
|
17618
|
+
background: ${colors["brown-90"]};
|
|
17619
|
+
}
|
|
17620
|
+
|
|
17621
|
+
&:disabled {
|
|
17622
|
+
background: ${colors["brown-20"]};
|
|
17623
|
+
color: ${colors["brown-50"]};
|
|
17624
|
+
}
|
|
17625
|
+
`,
|
|
17626
|
+
outline: import_styled_components9.css`
|
|
17627
|
+
background: ${colors.white};
|
|
17628
|
+
color: ${colors["brown-100"]};
|
|
17629
|
+
border: 1px solid ${colors["brown-40"]};
|
|
17630
|
+
|
|
17631
|
+
&:hover:not(:disabled) {
|
|
17632
|
+
background: ${colors["brown-20"]};
|
|
17633
|
+
}
|
|
17634
|
+
|
|
17635
|
+
&:disabled {
|
|
17636
|
+
border-color: ${colors["brown-20"]};
|
|
17637
|
+
color: ${colors["brown-50"]};
|
|
17638
|
+
}
|
|
17639
|
+
`,
|
|
17640
|
+
ghost: import_styled_components9.css`
|
|
17641
|
+
background: transparent;
|
|
17642
|
+
color: ${colors["brown-100"]};
|
|
17643
|
+
border: none;
|
|
17644
|
+
|
|
17645
|
+
&:hover:not(:disabled) {
|
|
17646
|
+
background: ${colors["brown-20"]};
|
|
17647
|
+
}
|
|
17648
|
+
|
|
17649
|
+
&:disabled {
|
|
17650
|
+
color: ${colors["brown-50"]};
|
|
17651
|
+
}
|
|
17652
|
+
`
|
|
17653
|
+
};
|
|
17654
|
+
var StyledButton = import_styled_components9.default.button`
|
|
17655
|
+
display: inline-flex;
|
|
17656
|
+
align-items: center;
|
|
17657
|
+
justify-content: center;
|
|
17658
|
+
cursor: pointer;
|
|
17659
|
+
${typographyMixin(typographyTypes.GEIST_BODY_XS_MEDIUM)};
|
|
17660
|
+
transition: background-color 150ms ease, border-color 150ms ease, color 150ms ease;
|
|
17661
|
+
|
|
17662
|
+
&:disabled {
|
|
17663
|
+
cursor: not-allowed;
|
|
17664
|
+
}
|
|
17665
|
+
|
|
17666
|
+
${({ $size }) => sizeStyles[$size]}
|
|
17667
|
+
${({ $variant }) => variantStyles2[$variant]}
|
|
17668
|
+
`;
|
|
17669
|
+
|
|
17670
|
+
// src/components/button/constants.ts
|
|
17671
|
+
var BUTTON_VARIANT = {
|
|
17672
|
+
SOLID: "solid",
|
|
17673
|
+
OUTLINE: "outline",
|
|
17674
|
+
GHOST: "ghost"
|
|
17675
|
+
};
|
|
17676
|
+
var BUTTON_SIZE = {
|
|
17677
|
+
XS: "xs",
|
|
17678
|
+
S: "s",
|
|
17679
|
+
M: "m"
|
|
17680
|
+
};
|
|
17681
|
+
var ICON_POSITION = {
|
|
17682
|
+
LEADING: "leading",
|
|
17683
|
+
TRAILING: "trailing"
|
|
17684
|
+
};
|
|
17685
|
+
|
|
17686
|
+
// src/components/button/button.tsx
|
|
17687
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
17688
|
+
var Button2 = (0, import_react9.forwardRef)(function Button3({
|
|
17689
|
+
children,
|
|
17690
|
+
variant = BUTTON_VARIANT.SOLID,
|
|
17691
|
+
size = BUTTON_SIZE.M,
|
|
17692
|
+
icon,
|
|
17693
|
+
iconPosition = ICON_POSITION.LEADING,
|
|
17694
|
+
disabled = false,
|
|
17695
|
+
onClick,
|
|
17696
|
+
className,
|
|
17697
|
+
"aria-label": ariaLabel
|
|
17698
|
+
}, ref) {
|
|
17699
|
+
const iconElement = icon ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Icon, { icon, size: 16 }) : null;
|
|
17700
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
17701
|
+
StyledButton,
|
|
17702
|
+
{
|
|
17703
|
+
ref,
|
|
17704
|
+
type: "button",
|
|
17705
|
+
$variant: variant,
|
|
17706
|
+
$size: size,
|
|
17707
|
+
disabled,
|
|
17708
|
+
onClick: disabled ? void 0 : onClick,
|
|
17709
|
+
className,
|
|
17710
|
+
"aria-label": ariaLabel,
|
|
17711
|
+
children: [
|
|
17712
|
+
iconPosition === ICON_POSITION.LEADING && iconElement,
|
|
17713
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children }),
|
|
17714
|
+
iconPosition === ICON_POSITION.TRAILING && iconElement
|
|
17715
|
+
]
|
|
17716
|
+
}
|
|
17717
|
+
);
|
|
17718
|
+
});
|
|
17584
17719
|
// Annotate the CommonJS export names for ESM import in node:
|
|
17585
17720
|
0 && (module.exports = {
|
|
17721
|
+
BUTTON_SIZE,
|
|
17722
|
+
BUTTON_VARIANT,
|
|
17723
|
+
Button,
|
|
17586
17724
|
ChatContext,
|
|
17587
17725
|
ChatMessage,
|
|
17726
|
+
ICON_POSITION,
|
|
17588
17727
|
Icon,
|
|
17589
17728
|
IconButton,
|
|
17590
17729
|
IconCtrl,
|