@oneplatformdev/ui 0.1.99-beta.1 → 0.1.99-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/.storybook/Wrappers.js +30 -0
  2. package/.storybook/Wrappers.js.map +1 -0
  3. package/Button/Button.d.ts +64 -0
  4. package/Button/Button.d.ts.map +1 -1
  5. package/Button/Button.js +53 -56
  6. package/Button/Button.js.map +1 -1
  7. package/Button/Button.s.d.ts +83 -0
  8. package/Button/Button.s.d.ts.map +1 -0
  9. package/Button/Button.s.js +163 -0
  10. package/Button/Button.s.js.map +1 -0
  11. package/Button/Button.stories.js +218 -73
  12. package/Button/Button.stories.js.map +1 -1
  13. package/Button/Button.types.d.ts +29 -6
  14. package/Button/Button.types.d.ts.map +1 -1
  15. package/Button/buttonVariants.d.ts +4 -12
  16. package/Button/buttonVariants.d.ts.map +1 -1
  17. package/Button/buttonVariants.js +6 -7
  18. package/Button/buttonVariants.js.map +1 -1
  19. package/ButtonIcon/ButtonIcon.d.ts +45 -0
  20. package/ButtonIcon/ButtonIcon.d.ts.map +1 -1
  21. package/ButtonIcon/ButtonIcon.js +20 -19
  22. package/ButtonIcon/ButtonIcon.js.map +1 -1
  23. package/ButtonIcon/ButtonIcon.stories.js +40 -35
  24. package/ButtonIcon/ButtonIcon.stories.js.map +1 -1
  25. package/ButtonIcon/ButtonIcon.types.d.ts +5 -8
  26. package/ButtonIcon/ButtonIcon.types.d.ts.map +1 -1
  27. package/ButtonIcon/buttonIconVariants.d.ts +3 -1
  28. package/ButtonIcon/buttonIconVariants.d.ts.map +1 -1
  29. package/ButtonIcon/buttonIconVariants.js +1 -1
  30. package/ButtonIcon/buttonIconVariants.js.map +1 -1
  31. package/CHANGELOG.md +28 -0
  32. package/Input/Input.d.ts.map +1 -1
  33. package/Input/Input.js +51 -38
  34. package/Input/Input.js.map +1 -1
  35. package/Input/Input.types.d.ts +1 -0
  36. package/Input/Input.types.d.ts.map +1 -1
  37. package/LoadedIcon/LoadedIcon.d.ts +1 -1
  38. package/LoadedIcon/LoadedIcon.d.ts.map +1 -1
  39. package/LoadedIcon/LoadedIcon.js +15 -13
  40. package/LoadedIcon/LoadedIcon.js.map +1 -1
  41. package/package.json +4 -4
@@ -0,0 +1,30 @@
1
+ import { jsx as p } from "react/jsx-runtime";
2
+ const r = (e) => /* @__PURE__ */ p(
3
+ "div",
4
+ {
5
+ style: {
6
+ padding: "0px 20px",
7
+ display: "flex",
8
+ gap: "32px",
9
+ alignItems: "flex-start"
10
+ },
11
+ children: /* @__PURE__ */ p(
12
+ "div",
13
+ {
14
+ style: {
15
+ position: "relative",
16
+ border: "2px dashed rgba(139, 92, 246, 0.7)",
17
+ borderRadius: "24px",
18
+ padding: "24px 32px",
19
+ display: "flex",
20
+ gap: "32px"
21
+ },
22
+ children: e.children
23
+ }
24
+ )
25
+ }
26
+ );
27
+ export {
28
+ r as DashedWrapper
29
+ };
30
+ //# sourceMappingURL=Wrappers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Wrappers.js","sources":["../../.storybook/Wrappers.tsx"],"sourcesContent":["import { PropsWithChildren } from \"react\";\n\nexport const MoreWrapper = (props: PropsWithChildren) => (\n <div\n style={{\n position: 'relative',\n padding: '24px 32px',\n display: 'flex',\n gap: '32px',\n }}\n >\n {props.children}\n </div>\n)\n\nexport const DashedWrapper = (props: PropsWithChildren) => {\n return (\n <div\n style={{\n padding: '0px 20px',\n display: 'flex',\n gap: '32px',\n alignItems: 'flex-start',\n }}\n >\n <div\n style={{\n position: 'relative',\n border: '2px dashed rgba(139, 92, 246, 0.7)',\n borderRadius: '24px',\n padding: '24px 32px',\n display: 'flex',\n gap: '32px',\n }}\n >\n {props.children}\n </div>\n </div>\n )\n}\n"],"names":["DashedWrapper","props","jsx"],"mappings":";AAeO,MAAMA,IAAgB,CAACC,MAE1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAO;AAAA,MACL,SAAS;AAAA,MACT,SAAS;AAAA,MACT,KAAK;AAAA,MACL,YAAY;AAAA,IAAA;AAAA,IAGd,UAAA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,SAAS;AAAA,UACT,SAAS;AAAA,UACT,KAAK;AAAA,QAAA;AAAA,QAGN,UAAAD,EAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EACT;AAAA;"}
@@ -1,5 +1,69 @@
1
1
  import { ButtonProps } from './Button.types';
2
2
  import * as React from "react";
3
+ /**
4
+ * Universal Button component used for triggering actions and UI interactions.
5
+ * Supports variants, sizes, colors, start/end icon adornments, custom slot content,
6
+ * tooltip integration, loading state, and polymorphic rendering via `asChild`.
7
+ *
8
+ * @public
9
+ * @see [Documentation](#) // TODO: add link to docs
10
+ *
11
+ * @example
12
+ * > Import:
13
+ * ```tsx
14
+ * import { Button } from '@oneplatformdev/ui/Button';
15
+ * ```
16
+ * > Basic usage:
17
+ * ```tsx
18
+ * <Button>Click me</Button>
19
+ * ```
20
+ * > Variant and size:
21
+ * ```tsx
22
+ * <Button variant="outline" size="lg">Large Button</Button>
23
+ * ```
24
+ * > With icons:
25
+ * ```tsx
26
+ * <Button startAdornment={<PlusIcon />}>Create</Button>
27
+ * <Button endAdornment={<ArrowRightIcon />}>Next</Button>
28
+ * ```
29
+ * > Icon style button:
30
+ * ```tsx
31
+ * <Button size="icon">
32
+ * <PlusIcon />
33
+ * </Button>
34
+ * ```
35
+ * > Polymorphic rendering (`asChild`):
36
+ * ```tsx
37
+ * <Button asChild>
38
+ * <a href="/dashboard">Go to Dashboard</a>
39
+ * </Button>
40
+ * ```
41
+ * > Tooltip via `message` or native `title`:
42
+ * ```tsx
43
+ * <Button title="Tooltip text">Hover me</Button>
44
+ * <Button message="Tooltip content">Hover me</Button>
45
+ * ```
46
+ * > Loading state:
47
+ * ```tsx
48
+ * <Button loading>Processing...</Button>
49
+ * ```
50
+ * > Disabled:
51
+ * ```tsx
52
+ * <Button disabled>Disabled</Button>
53
+ * ```
54
+ * > With custom variant props (CVA powered):
55
+ * ```tsx
56
+ * <Button variant="primary" color="blue" size="md">
57
+ * Save
58
+ * </Button>
59
+ * ```
60
+ *
61
+ * @remarks
62
+ * - Designed for texted usage. If you need icon-only, use `ButtonIcon`.
63
+ * - Works with any SVG React component or element, e.g. lucide-react, heroicons, custom icons.
64
+ *
65
+ * @see {@link ButtonIcon} for icon-only buttons
66
+ */
3
67
  export declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
4
68
  export default Button;
5
69
  //# sourceMappingURL=Button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/Button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AA4ClD,eAAO,MAAM,MAAM,uFAuElB,CAAA;AAGD,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/Button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAsDxE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AAEH,eAAO,MAAM,MAAM,uFAuElB,CAAA;AAED,eAAe,MAAM,CAAC"}
package/Button/Button.js CHANGED
@@ -1,77 +1,74 @@
1
- import { jsx as r, jsxs as z, Fragment as k } from "react/jsx-runtime";
2
- import * as x from "react";
3
- import { Slot as N } from "@radix-ui/react-slot";
4
- import { cn as j } from "@oneplatformdev/utils";
5
- import { buttonVariants as A } from "./buttonVariants.js";
1
+ import { jsxs as x, Fragment as E, jsx as a } from "react/jsx-runtime";
2
+ import * as N from "react";
3
+ import { isValidElement as V, createElement as j } from "react";
4
+ import { Slot as C } from "@radix-ui/react-slot";
5
+ import { cn as I } from "@oneplatformdev/utils";
6
+ import { buttonVariants as R } from "./buttonVariants.js";
6
7
  import "@radix-ui/react-tooltip";
7
- import { Tooltip as C } from "../Tooltip/Tooltip.js";
8
+ import { Tooltip as F } from "../Tooltip/Tooltip.js";
8
9
  import { LoadedIcon as f } from "../LoadedIcon/LoadedIcon.js";
9
- const I = (a) => {
10
- const { variant: o, size: e, color: i } = a, t = { color: i, variant: o, size: e };
11
- if (e === "icon" && console.warn('Button size "icon" is not supported. Please use ButtonIcon component for icon-only buttons.'), o === "default")
12
- return console.warn('Button variant "default" is deprecated. Please use "variant=contained color=primary" instead.'), t.variant = "contained", t.color = "primary", t;
13
- if (o === "outline")
14
- return console.warn('Button variant "outline" is deprecated. Please use "variant=outlined color=primary" instead.'), t.variant = "outlined", t.color = "primary", t;
15
- if (o === "secondary")
16
- return console.warn('Button variant "secondary" is deprecated. Please use "variant=contained color=secondary" instead.'), t.variant = "contained", t.color = "secondary", t;
17
- if (o === "destructive")
18
- return console.warn('Button variant "destructive" is deprecated. Please use "variant=contained color=error" instead.'), t.variant = "contained", t.color = "error", t;
19
- if (o === "link")
20
- throw console.warn('Button variant "link" is not implemented yet. Please contact the development team for more information.'), new Error('Button variant "link" is not implemented yet. Please contact the development team for more information.');
21
- return t;
22
- }, R = x.forwardRef(
23
- (a, o) => {
10
+ const L = (t) => {
11
+ const { variant: n, size: r, color: i } = t, e = { color: i, variant: n, size: r };
12
+ if (n === "default")
13
+ return console.warn('Button variant "default" is deprecated. Please use "variant=contained color=primary" instead.'), e.variant = "contained", e.color = "primary", e;
14
+ if (r === "icon")
15
+ return console.warn('Button size "icon" is deprecated. Please use "<ButtonIcon/>" component instead.'), e.variant = "contained", e.color = "secondary", e;
16
+ if (n === "transparent")
17
+ throw console.warn('Button variant "transparent" is removed. Please use "variant=none" instead.'), new Error('Button variant "transparent" is removed. Please use "variant=none" instead.');
18
+ return n === "outline" ? (console.warn('Button variant "outline" is deprecated. Please use "variant=outlined color=primary" instead.'), e.variant = "outlined", e.color = "primary", e) : n === "secondary" ? (console.warn('Button variant "secondary" is deprecated. Please use "variant=contained color=secondary" instead.'), e.variant = "contained", e.color = "secondary", e) : (n === "destructive" && (console.warn('Button variant "destructive" is deprecated. Please use "variant=contained color=error" instead.'), e.variant = "contained", e.color = "error"), e);
19
+ }, y = (t) => t ? V(t) ? t : j(t) : null, S = N.forwardRef(
20
+ (t, n) => {
24
21
  const {
25
- disabled: e,
22
+ disabled: r,
26
23
  className: i,
27
- variant: t,
28
- color: v,
29
- size: y,
30
- asChild: c = !1,
31
- title: h = "",
32
- tooltip: B,
33
- tooltipProps: l = {},
34
- message: w,
35
- loading: n = !1,
36
- children: d,
24
+ variant: e,
25
+ color: B,
26
+ size: s,
27
+ asChild: l = !1,
28
+ title: w = "",
29
+ tooltip: P,
30
+ tooltipProps: d = {},
31
+ message: h,
32
+ loading: o = !1,
33
+ children: u,
37
34
  startAdornment: m,
38
35
  endAdornment: p,
39
- ...P
40
- } = a, b = c ? N : "button", s = w || B || h, g = c ? d : /* @__PURE__ */ z(k, { children: [
41
- !!m && /* @__PURE__ */ r(f, { loading: n, children: m }),
42
- d,
43
- !!p && /* @__PURE__ */ r(f, { loading: n, children: p })
44
- ] }), u = /* @__PURE__ */ r(
36
+ ...g
37
+ } = t, b = l ? C : "button", c = h || P || w, z = l ? u : /* @__PURE__ */ x(E, { children: [
38
+ !!m && /* @__PURE__ */ a(f, { loading: o, size: s, children: y(m) }),
39
+ u,
40
+ !!p && /* @__PURE__ */ a(f, { loading: o, size: s, children: y(p) })
41
+ ] }), v = /* @__PURE__ */ a(
45
42
  b,
46
43
  {
47
44
  type: "button",
48
- ref: o,
49
- disabled: e,
50
- className: j(
51
- A({
52
- ...I({ variant: t, size: y, color: v }),
45
+ ref: n,
46
+ disabled: r,
47
+ className: I(
48
+ R({
49
+ ...L({ variant: e, size: s, color: B }),
53
50
  className: i
54
51
  }),
55
- n && "pointer-events-none opacity-80"
52
+ o && "pointer-events-none opacity-80 user-select-none"
56
53
  ),
57
- ...P,
58
- children: g
54
+ ...g,
55
+ children: z
59
56
  }
60
57
  );
61
- return s ? /* @__PURE__ */ r(
62
- C,
58
+ return c ? /* @__PURE__ */ a(
59
+ F,
63
60
  {
64
- ...l || {},
65
- open: l.open ?? (e || n || !s) ? !1 : void 0,
66
- message: s,
67
- children: u
61
+ ...d || {},
62
+ open: d.open ?? (r || o || !c) ? !1 : void 0,
63
+ message: c,
64
+ children: v
68
65
  }
69
- ) : u;
66
+ ) : v;
70
67
  }
71
68
  );
72
- R.displayName = "Button";
69
+ S.displayName = "Button";
73
70
  export {
74
- R as Button,
75
- R as default
71
+ S as Button,
72
+ S as default
76
73
  };
77
74
  //# sourceMappingURL=Button.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Button.js","sources":["../../src/Button/Button.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\n\nimport { cn } from \"@oneplatformdev/utils\"\nimport { ButtonCVAProps, buttonVariants } from './buttonVariants';\nimport { type ButtonProps } from './Button.types';\n\nimport { Tooltip } from '../Tooltip';\nimport { LoadedIcon } from \"../LoadedIcon\";\n\nconst normalizedVariantProperties = (props: ButtonCVAProps): ButtonCVAProps => {\n const { variant, size, color } = props;\n const vls = { color, variant, size }\n if (size === 'icon') {\n console.warn('Button size \"icon\" is not supported. Please use ButtonIcon component for icon-only buttons.')\n // throw new Error('Button size \"icon\" is not supported. Please use ButtonIcon component for icon-only buttons.')\n }\n if (variant === 'default') {\n console.warn('Button variant \"default\" is deprecated. Please use \"variant=contained color=primary\" instead.')\n vls.variant = 'contained'\n vls.color = 'primary'\n return vls\n }\n if (variant === 'outline') {\n console.warn('Button variant \"outline\" is deprecated. Please use \"variant=outlined color=primary\" instead.')\n vls.variant = 'outlined'\n vls.color = 'primary'\n return vls\n }\n if (variant === 'secondary') {\n console.warn('Button variant \"secondary\" is deprecated. Please use \"variant=contained color=secondary\" instead.')\n vls.variant = 'contained'\n vls.color = 'secondary'\n return vls\n }\n if (variant === 'destructive') {\n console.warn('Button variant \"destructive\" is deprecated. Please use \"variant=contained color=error\" instead.')\n vls.variant = 'contained'\n vls.color = 'error'\n return vls\n }\n if (variant === 'link') {\n console.warn('Button variant \"link\" is not implemented yet. Please contact the development team for more information.')\n throw new Error('Button variant \"link\" is not implemented yet. Please contact the development team for more information.')\n }\n return vls;\n}\n\n// TODO: create ButtonIcon component | update button | add start/end icon\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (props, ref) => {\n const {\n disabled,\n className,\n variant,\n color,\n size,\n asChild = false,\n title = '',\n tooltip,\n tooltipProps = {},\n message,\n loading = false,\n children,\n startAdornment,\n endAdornment,\n ...rest\n } = props;\n const Comp = asChild ? Slot : \"button\"\n const msg = message || tooltip || title;\n\n const content = asChild\n ? children\n : (\n <>\n {!!startAdornment && (\n <LoadedIcon loading={loading}>\n {startAdornment}\n </LoadedIcon>\n )}\n\n {children}\n\n {!!endAdornment && (\n <LoadedIcon loading={loading}>\n {endAdornment}\n </LoadedIcon>\n )}\n </>\n )\n\n const cmp = (\n <Comp\n type='button'\n ref={ref}\n disabled={disabled}\n className={cn(\n buttonVariants({\n ...normalizedVariantProperties({ variant, size, color }),\n className\n }),\n loading && 'pointer-events-none opacity-80',\n )}\n {...rest}\n >\n {content}\n </Comp>\n )\n\n if (!msg) return cmp\n return (\n <Tooltip\n {...(tooltipProps || {})}\n open={tooltipProps.open ?? (disabled || loading || !msg) ? false : undefined}\n message={msg}\n >\n {cmp}\n </Tooltip>\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport default Button;\n"],"names":["normalizedVariantProperties","props","variant","size","color","vls","Button","React","ref","disabled","className","asChild","title","tooltip","tooltipProps","message","loading","children","startAdornment","endAdornment","rest","Comp","Slot","msg","content","jsxs","Fragment","jsx","LoadedIcon","cmp","cn","buttonVariants","Tooltip"],"mappings":";;;;;;;;AAUA,MAAMA,IAA8B,CAACC,MAA0C;AAC7E,QAAM,EAAE,SAAAC,GAAS,MAAAC,GAAM,OAAAC,EAAA,IAAUH,GAC3BI,IAAM,EAAE,OAAAD,GAAO,SAAAF,GAAS,MAAAC,EAAA;AAK9B,MAJIA,MAAS,UACX,QAAQ,KAAK,6FAA6F,GAGxGD,MAAY;AACd,mBAAQ,KAAK,+FAA+F,GAC5GG,EAAI,UAAU,aACdA,EAAI,QAAQ,WACLA;AAET,MAAIH,MAAY;AACd,mBAAQ,KAAK,8FAA8F,GAC3GG,EAAI,UAAU,YACdA,EAAI,QAAQ,WACLA;AAET,MAAIH,MAAY;AACd,mBAAQ,KAAK,mGAAmG,GAChHG,EAAI,UAAU,aACdA,EAAI,QAAQ,aACLA;AAET,MAAIH,MAAY;AACd,mBAAQ,KAAK,iGAAiG,GAC9GG,EAAI,UAAU,aACdA,EAAI,QAAQ,SACLA;AAET,MAAIH,MAAY;AACd,kBAAQ,KAAK,yGAAyG,GAChH,IAAI,MAAM,yGAAyG;AAE3H,SAAOG;AACT,GAGaC,IAASC,EAAM;AAAA,EAC1B,CAACN,GAAOO,MAAQ;AACd,UAAM;AAAA,MACJ,UAAAC;AAAA,MACA,WAAAC;AAAA,MACA,SAAAR;AAAA,MACA,OAAAE;AAAA,MACA,MAAAD;AAAA,MACA,SAAAQ,IAAU;AAAA,MACV,OAAAC,IAAQ;AAAA,MACR,SAAAC;AAAA,MACA,cAAAC,IAAe,CAAA;AAAA,MACf,SAAAC;AAAA,MACA,SAAAC,IAAU;AAAA,MACV,UAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,cAAAC;AAAA,MACA,GAAGC;AAAA,IAAA,IACDnB,GACEoB,IAAOV,IAAUW,IAAO,UACxBC,IAAMR,KAAWF,KAAWD,GAE5BY,IAAUb,IACZM,IAEA,gBAAAQ,EAAAC,GAAA,EACG,UAAA;AAAA,MAAA,CAAC,CAACR,KACD,gBAAAS,EAACC,GAAA,EAAW,SAAAZ,GACT,UAAAE,GACH;AAAA,MAGDD;AAAA,MAEA,CAAC,CAACE,KACD,gBAAAQ,EAACC,GAAA,EAAW,SAAAZ,GACT,UAAAG,EAAA,CACH;AAAA,IAAA,GAEJ,GAGEU,IACJ,gBAAAF;AAAA,MAACN;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,KAAAb;AAAA,QACA,UAAAC;AAAA,QACA,WAAWqB;AAAA,UACTC,EAAe;AAAA,YACb,GAAG/B,EAA4B,EAAE,SAAAE,GAAS,MAAAC,GAAM,OAAAC,GAAO;AAAA,YACvD,WAAAM;AAAA,UAAA,CACD;AAAA,UACDM,KAAW;AAAA,QAAA;AAAA,QAEZ,GAAGI;AAAA,QAEH,UAAAI;AAAA,MAAA;AAAA,IAAA;AAIL,WAAKD,IAEH,gBAAAI;AAAA,MAACK;AAAA,MAAA;AAAA,QACE,GAAIlB,KAAgB,CAAA;AAAA,QACrB,MAAMA,EAAa,SAASL,KAAYO,KAAW,CAACO,KAAO,KAAQ;AAAA,QACnE,SAASA;AAAA,QAER,UAAAM;AAAA,MAAA;AAAA,IAAA,IAPYA;AAAA,EAUnB;AACF;AACAvB,EAAO,cAAc;"}
1
+ {"version":3,"file":"Button.js","sources":["../../src/Button/Button.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\n\nimport { cn } from \"@oneplatformdev/utils\"\nimport { ButtonCVAProps, buttonVariants } from './buttonVariants';\nimport { ButtonAdornmentProps, type ButtonProps } from './Button.types';\n\nimport { Tooltip } from '../Tooltip';\nimport { LoadedIcon } from \"../LoadedIcon\";\nimport { createElement, isValidElement } from \"react\";\n\nconst normalizedVariantProperties = (props: ButtonCVAProps): ButtonCVAProps => {\n const { variant, size, color } = props;\n const vls = { color, variant, size }\n if (variant === 'default') {\n console.warn('Button variant \"default\" is deprecated. Please use \"variant=contained color=primary\" instead.')\n vls.variant = 'contained'\n vls.color = 'primary'\n return vls\n }\n if ((size as string) === 'icon') {\n console.warn('Button size \"icon\" is deprecated. Please use \"<ButtonIcon/>\" component instead.')\n vls.variant = 'contained'\n vls.color = 'secondary'\n return vls\n // throw new Error('Button variant \"transparent\" is removed. Please use \"variant=none\" instead.')\n }\n if ((variant as string) === 'transparent') {\n console.warn('Button variant \"transparent\" is removed. Please use \"variant=none\" instead.')\n throw new Error('Button variant \"transparent\" is removed. Please use \"variant=none\" instead.')\n }\n if (variant === 'outline') {\n console.warn('Button variant \"outline\" is deprecated. Please use \"variant=outlined color=primary\" instead.')\n vls.variant = 'outlined'\n vls.color = 'primary'\n return vls\n }\n if (variant === 'secondary') {\n console.warn('Button variant \"secondary\" is deprecated. Please use \"variant=contained color=secondary\" instead.')\n vls.variant = 'contained'\n vls.color = 'secondary'\n return vls\n }\n if (variant === 'destructive') {\n console.warn('Button variant \"destructive\" is deprecated. Please use \"variant=contained color=error\" instead.')\n vls.variant = 'contained'\n vls.color = 'error'\n return vls\n }\n return vls;\n}\n\n\nconst renderAdornment = (Adornment?: ButtonAdornmentProps) => {\n if (!Adornment) return null;\n if (isValidElement(Adornment)) return Adornment;\n return createElement(Adornment);\n};\n\n/**\n * Universal Button component used for triggering actions and UI interactions.\n * Supports variants, sizes, colors, start/end icon adornments, custom slot content,\n * tooltip integration, loading state, and polymorphic rendering via `asChild`.\n *\n * @public\n * @see [Documentation](#) // TODO: add link to docs\n *\n * @example\n * > Import:\n * ```tsx\n * import { Button } from '@oneplatformdev/ui/Button';\n * ```\n * > Basic usage:\n * ```tsx\n * <Button>Click me</Button>\n * ```\n * > Variant and size:\n * ```tsx\n * <Button variant=\"outline\" size=\"lg\">Large Button</Button>\n * ```\n * > With icons:\n * ```tsx\n * <Button startAdornment={<PlusIcon />}>Create</Button>\n * <Button endAdornment={<ArrowRightIcon />}>Next</Button>\n * ```\n * > Icon style button:\n * ```tsx\n * <Button size=\"icon\">\n * <PlusIcon />\n * </Button>\n * ```\n * > Polymorphic rendering (`asChild`):\n * ```tsx\n * <Button asChild>\n * <a href=\"/dashboard\">Go to Dashboard</a>\n * </Button>\n * ```\n * > Tooltip via `message` or native `title`:\n * ```tsx\n * <Button title=\"Tooltip text\">Hover me</Button>\n * <Button message=\"Tooltip content\">Hover me</Button>\n * ```\n * > Loading state:\n * ```tsx\n * <Button loading>Processing...</Button>\n * ```\n * > Disabled:\n * ```tsx\n * <Button disabled>Disabled</Button>\n * ```\n * > With custom variant props (CVA powered):\n * ```tsx\n * <Button variant=\"primary\" color=\"blue\" size=\"md\">\n * Save\n * </Button>\n * ```\n *\n * @remarks\n * - Designed for texted usage. If you need icon-only, use `ButtonIcon`.\n * - Works with any SVG React component or element, e.g. lucide-react, heroicons, custom icons.\n *\n * @see {@link ButtonIcon} for icon-only buttons\n */\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (props, ref) => {\n const {\n disabled,\n className,\n variant,\n color,\n size,\n asChild = false,\n title = '',\n tooltip,\n tooltipProps = {},\n message,\n loading = false,\n children,\n startAdornment,\n endAdornment,\n ...rest\n } = props;\n const Comp = asChild ? Slot : \"button\"\n const msg = message || tooltip || title;\n\n const content = asChild\n ? children\n : (\n <>\n {!!startAdornment && (\n <LoadedIcon loading={loading} size={size}>\n {renderAdornment(startAdornment)}\n </LoadedIcon>\n )}\n\n {children}\n\n {!!endAdornment && (\n <LoadedIcon loading={loading} size={size}>\n {renderAdornment(endAdornment)}\n </LoadedIcon>\n )}\n </>\n )\n\n const cmp = (\n <Comp\n type='button'\n ref={ref}\n disabled={disabled}\n className={cn(\n buttonVariants({\n ...normalizedVariantProperties({ variant, size, color }),\n className\n }),\n loading && 'pointer-events-none opacity-80 user-select-none',\n )}\n {...rest}\n >\n {content}\n </Comp>\n )\n\n if (!msg) return cmp\n return (\n <Tooltip\n {...(tooltipProps || {})}\n open={tooltipProps.open ?? (disabled || loading || !msg) ? false : undefined}\n message={msg}\n >\n {cmp}\n </Tooltip>\n )\n }\n)\nButton.displayName = \"Button\"\nexport default Button;\n"],"names":["normalizedVariantProperties","props","variant","size","color","vls","renderAdornment","Adornment","isValidElement","createElement","Button","React","ref","disabled","className","asChild","title","tooltip","tooltipProps","message","loading","children","startAdornment","endAdornment","rest","Comp","Slot","msg","content","jsxs","Fragment","jsx","LoadedIcon","cmp","cn","buttonVariants","Tooltip"],"mappings":";;;;;;;;;AAWA,MAAMA,IAA8B,CAACC,MAA0C;AAC7E,QAAM,EAAE,SAAAC,GAAS,MAAAC,GAAM,OAAAC,EAAA,IAAUH,GAC3BI,IAAM,EAAE,OAAAD,GAAO,SAAAF,GAAS,MAAAC,EAAA;AAC9B,MAAID,MAAY;AACd,mBAAQ,KAAK,+FAA+F,GAC5GG,EAAI,UAAU,aACdA,EAAI,QAAQ,WACLA;AAET,MAAKF,MAAoB;AACvB,mBAAQ,KAAK,iFAAiF,GAC9FE,EAAI,UAAU,aACdA,EAAI,QAAQ,aACLA;AAGT,MAAKH,MAAuB;AAC1B,kBAAQ,KAAK,6EAA6E,GACpF,IAAI,MAAM,6EAA6E;AAE/F,SAAIA,MAAY,aACd,QAAQ,KAAK,8FAA8F,GAC3GG,EAAI,UAAU,YACdA,EAAI,QAAQ,WACLA,KAELH,MAAY,eACd,QAAQ,KAAK,mGAAmG,GAChHG,EAAI,UAAU,aACdA,EAAI,QAAQ,aACLA,MAELH,MAAY,kBACd,QAAQ,KAAK,iGAAiG,GAC9GG,EAAI,UAAU,aACdA,EAAI,QAAQ,UACLA;AAGX,GAGMC,IAAkB,CAACC,MAClBA,IACDC,EAAeD,CAAS,IAAUA,IAC/BE,EAAcF,CAAS,IAFP,MAsEZG,IAASC,EAAM;AAAA,EAC1B,CAACV,GAAOW,MAAQ;AACd,UAAM;AAAA,MACJ,UAAAC;AAAA,MACA,WAAAC;AAAA,MACA,SAAAZ;AAAA,MACA,OAAAE;AAAA,MACA,MAAAD;AAAA,MACA,SAAAY,IAAU;AAAA,MACV,OAAAC,IAAQ;AAAA,MACR,SAAAC;AAAA,MACA,cAAAC,IAAe,CAAA;AAAA,MACf,SAAAC;AAAA,MACA,SAAAC,IAAU;AAAA,MACV,UAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,cAAAC;AAAA,MACA,GAAGC;AAAA,IAAA,IACDvB,GACEwB,IAAOV,IAAUW,IAAO,UACxBC,IAAMR,KAAWF,KAAWD,GAE5BY,IAAUb,IACZM,IAEA,gBAAAQ,EAAAC,GAAA,EACG,UAAA;AAAA,MAAA,CAAC,CAACR,KACD,gBAAAS,EAACC,GAAA,EAAW,SAAAZ,GAAkB,MAAAjB,GAC3B,UAAAG,EAAgBgB,CAAc,GACjC;AAAA,MAGDD;AAAA,MAEA,CAAC,CAACE,KACD,gBAAAQ,EAACC,KAAW,SAAAZ,GAAkB,MAAAjB,GAC3B,UAAAG,EAAgBiB,CAAY,EAAA,CAC/B;AAAA,IAAA,GAEJ,GAGEU,IACJ,gBAAAF;AAAA,MAACN;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,KAAAb;AAAA,QACA,UAAAC;AAAA,QACA,WAAWqB;AAAA,UACTC,EAAe;AAAA,YACb,GAAGnC,EAA4B,EAAE,SAAAE,GAAS,MAAAC,GAAM,OAAAC,GAAO;AAAA,YACvD,WAAAU;AAAA,UAAA,CACD;AAAA,UACDM,KAAW;AAAA,QAAA;AAAA,QAEZ,GAAGI;AAAA,QAEH,UAAAI;AAAA,MAAA;AAAA,IAAA;AAIL,WAAKD,IAEH,gBAAAI;AAAA,MAACK;AAAA,MAAA;AAAA,QACE,GAAIlB,KAAgB,CAAA;AAAA,QACrB,MAAMA,EAAa,SAASL,KAAYO,KAAW,CAACO,KAAO,KAAQ;AAAA,QACnE,SAASA;AAAA,QAER,UAAAM;AAAA,MAAA;AAAA,IAAA,IAPYA;AAAA,EAUnB;AACF;AACAvB,EAAO,cAAc;"}
@@ -0,0 +1,83 @@
1
+ import { StoryObj } from '@storybook/react';
2
+ import { ButtonProps } from './Button.types';
3
+ declare const meta: {
4
+ title: string;
5
+ component: import('react').ForwardRefExoticComponent<ButtonProps & import('react').RefAttributes<HTMLButtonElement>>;
6
+ render: (props: ButtonProps) => import("react/jsx-runtime").JSX.Element;
7
+ args: {
8
+ tooltip: undefined;
9
+ asChild: false;
10
+ variant: "none" | "default" | "destructive" | "outline" | "secondary" | "contained" | "outlined" | "ghost" | null | undefined;
11
+ color: "secondary" | "primary" | "error" | null | undefined;
12
+ size: "xs" | "sm" | "md" | "lg" | null | undefined;
13
+ disabled: false;
14
+ };
15
+ argTypes: {
16
+ tooltip: {
17
+ control: false;
18
+ };
19
+ asChild: {
20
+ control: false;
21
+ };
22
+ variant: {
23
+ options: ("none" | "default" | "destructive" | "outline" | "secondary" | "contained" | "outlined" | "ghost" | null | undefined)[];
24
+ control: {
25
+ type: "inline-radio";
26
+ };
27
+ };
28
+ color: {
29
+ options: ("secondary" | "primary" | "error" | null | undefined)[];
30
+ control: {
31
+ type: "inline-radio";
32
+ };
33
+ };
34
+ size: {
35
+ options: ("xs" | "sm" | "md" | "lg" | null | undefined)[];
36
+ control: {
37
+ type: "inline-radio";
38
+ };
39
+ };
40
+ title: {
41
+ name: string;
42
+ description: string;
43
+ control: {
44
+ type: "text";
45
+ };
46
+ };
47
+ message: {
48
+ name: string;
49
+ description: string;
50
+ control: {
51
+ type: "object";
52
+ };
53
+ };
54
+ slotProps: {
55
+ name: string;
56
+ description: string;
57
+ control: {
58
+ type: "object";
59
+ };
60
+ };
61
+ };
62
+ tags: string[];
63
+ parameters: {
64
+ docs: {
65
+ description: {
66
+ component: string;
67
+ };
68
+ };
69
+ pseudo: {
70
+ hover: string;
71
+ focus: string;
72
+ active: string;
73
+ disabled: string;
74
+ };
75
+ };
76
+ };
77
+ export default meta;
78
+ type Story = StoryObj<typeof meta>;
79
+ export declare const Default: Story;
80
+ export declare const Primary: Story;
81
+ export declare const Secondary: Story;
82
+ export declare const Error: Story;
83
+ //# sourceMappingURL=Button.s.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.s.d.ts","sourceRoot":"","sources":["../../src/Button/Button.s.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AA2DlD,QAAA,MAAM,IAAI;;;oBAvDe,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwGL,CAAC;AAChC,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAQnC,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAoBrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAoBvB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAoBnB,CAAC"}
@@ -0,0 +1,163 @@
1
+ import { jsx as e, jsxs as n } from "react/jsx-runtime";
2
+ import { Button as i } from "./Button.js";
3
+ import { PlusIcon as s } from "lucide-react";
4
+ const g = (o) => /* @__PURE__ */ e(i, { ...o }), a = (o) => /* @__PURE__ */ e(
5
+ "div",
6
+ {
7
+ style: {
8
+ padding: "0px 20px",
9
+ display: "flex",
10
+ gap: "32px",
11
+ alignItems: "flex-start"
12
+ },
13
+ children: /* @__PURE__ */ e(
14
+ "div",
15
+ {
16
+ style: {
17
+ position: "relative",
18
+ border: "2px dashed rgba(139, 92, 246, 0.7)",
19
+ borderRadius: "24px",
20
+ padding: "24px 32px",
21
+ display: "flex",
22
+ gap: "32px"
23
+ },
24
+ children: o.children
25
+ }
26
+ )
27
+ }
28
+ ), t = (o) => /* @__PURE__ */ e(
29
+ "div",
30
+ {
31
+ style: {
32
+ position: "relative",
33
+ display: "flex",
34
+ flexDirection: "column",
35
+ gap: "16px"
36
+ },
37
+ children: ["default", "hover", "focus", "active", "disabled"].map((r) => /* @__PURE__ */ e(
38
+ i,
39
+ {
40
+ id: r,
41
+ ...o,
42
+ disabled: r === "disabled" || o.disabled,
43
+ children: o.children ?? r
44
+ },
45
+ r
46
+ ))
47
+ }
48
+ ), d = ["none", "contained", "outlined", "ghost"], c = ["primary", "secondary", "error"], p = ["xs", "sm", "md", "lg"], m = {
49
+ title: "Button",
50
+ component: i,
51
+ render: g,
52
+ args: {
53
+ tooltip: void 0,
54
+ asChild: !1,
55
+ //
56
+ variant: d[0],
57
+ color: c[0],
58
+ size: p[0],
59
+ disabled: !1
60
+ },
61
+ argTypes: {
62
+ tooltip: { control: !1 },
63
+ asChild: { control: !1 },
64
+ variant: { options: d, control: { type: "inline-radio" } },
65
+ color: { options: c, control: { type: "inline-radio" } },
66
+ size: { options: p, control: { type: "inline-radio" } },
67
+ title: {
68
+ name: "title",
69
+ description: "Button tooltip title from HTMLAttributes<HTMLButtonElement> [string only]",
70
+ control: { type: "text" }
71
+ },
72
+ message: {
73
+ name: "message",
74
+ description: "Button tooltip message from ButtonProps [ReactNode]",
75
+ control: { type: "object" }
76
+ },
77
+ slotProps: {
78
+ name: "slotProps",
79
+ description: "Button slotProps from ButtonProps [object]",
80
+ control: { type: "object" }
81
+ }
82
+ },
83
+ tags: ["autodocs"],
84
+ parameters: {
85
+ docs: {
86
+ description: {
87
+ component: "Universal button component with variants, icons and tooltip support."
88
+ }
89
+ },
90
+ pseudo: {
91
+ hover: "#hover",
92
+ focus: "#focus",
93
+ active: "#active",
94
+ disabled: "#disabled"
95
+ }
96
+ }
97
+ }, l = {
98
+ ...m.args,
99
+ startAdornment: /* @__PURE__ */ e(s, {}),
100
+ endAdornment: /* @__PURE__ */ e(s, {}),
101
+ children: "children"
102
+ }, u = {
103
+ args: {
104
+ ...m.args,
105
+ children: "__children__"
106
+ }
107
+ }, y = {
108
+ args: {
109
+ ...l,
110
+ color: "primary",
111
+ size: "lg",
112
+ children: "Створити"
113
+ },
114
+ argTypes: {
115
+ variant: { control: !1 },
116
+ color: { control: !1 }
117
+ },
118
+ render: (o) => /* @__PURE__ */ e("div", { className: "flex", children: /* @__PURE__ */ n(a, { children: [
119
+ /* @__PURE__ */ e(t, { ...o, variant: "contained" }),
120
+ /* @__PURE__ */ e(t, { ...o, variant: "outlined" }),
121
+ /* @__PURE__ */ e(t, { ...o, variant: "ghost" })
122
+ ] }) })
123
+ }, x = {
124
+ args: {
125
+ ...l,
126
+ color: "secondary",
127
+ size: "lg",
128
+ children: "Створити"
129
+ },
130
+ argTypes: {
131
+ variant: { control: !1 },
132
+ color: { control: !1 }
133
+ },
134
+ render: (o) => /* @__PURE__ */ e("div", { className: "flex", children: /* @__PURE__ */ n(a, { children: [
135
+ /* @__PURE__ */ e(t, { ...o, variant: "contained" }),
136
+ /* @__PURE__ */ e(t, { ...o, variant: "outlined" }),
137
+ /* @__PURE__ */ e(t, { ...o, variant: "ghost" })
138
+ ] }) })
139
+ }, b = {
140
+ args: {
141
+ ...l,
142
+ color: "error",
143
+ size: "lg",
144
+ children: "Створити"
145
+ },
146
+ argTypes: {
147
+ variant: { control: !1 },
148
+ color: { control: !1 }
149
+ },
150
+ render: (o) => /* @__PURE__ */ e("div", { className: "flex", children: /* @__PURE__ */ n(a, { children: [
151
+ /* @__PURE__ */ e(t, { ...o, variant: "contained" }),
152
+ /* @__PURE__ */ e(t, { ...o, variant: "outlined" }),
153
+ /* @__PURE__ */ e(t, { ...o, variant: "ghost" })
154
+ ] }) })
155
+ };
156
+ export {
157
+ u as Default,
158
+ b as Error,
159
+ y as Primary,
160
+ x as Secondary,
161
+ m as default
162
+ };
163
+ //# sourceMappingURL=Button.s.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.s.js","sources":["../../src/Button/Button.s.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react';\n\nimport { Button } from './Button';\nimport type { ButtonProps } from './Button.types';\nimport { PropsWithChildren } from 'react';\nimport { PlusIcon } from 'lucide-react'\n\nconst Template = (props: ButtonProps) => <Button {...props}/>;\n\nconst DashedWrapper = (props: PropsWithChildren) => {\n return (\n <div\n style={{\n padding: '0px 20px',\n display: 'flex',\n gap: '32px',\n alignItems: 'flex-start',\n }}\n >\n <div\n style={{\n position: 'relative',\n border: '2px dashed rgba(139, 92, 246, 0.7)',\n borderRadius: '24px',\n padding: '24px 32px',\n display: 'flex',\n gap: '32px',\n }}\n >\n {props.children}\n </div>\n </div>\n )\n}\n\nconst States = (props: ButtonProps) => (\n <div\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n }}\n >\n {[ 'default', 'hover', 'focus', 'active', 'disabled' ]\n .map((state) => (\n <Button\n key={state}\n id={state}\n {...props}\n disabled={state === 'disabled' || props.disabled}\n >\n {props.children ?? state}\n </Button>\n ))}\n </div>\n);\n\nconst variants: ButtonProps['variant'][] = [ 'none', 'contained', 'outlined', 'ghost' ]\nconst colors: ButtonProps['color'][] = [ 'primary', 'secondary', 'error' ]\nconst sizes: ButtonProps['size'][] = [ 'xs', 'sm', 'md', 'lg' ]\n\nconst meta = {\n title: 'Button',\n component: Button,\n render: Template,\n args: {\n tooltip: undefined,\n asChild: false,\n //\n variant: variants[0],\n color: colors[0],\n size: sizes[0],\n disabled: false,\n },\n argTypes: {\n tooltip: { control: false },\n asChild: { control: false },\n variant: { options: variants, control: { type: 'inline-radio' } },\n color: { options: colors, control: { type: 'inline-radio' } },\n size: { options: sizes, control: { type: 'inline-radio' } },\n title: {\n name: 'title',\n description: \"Button tooltip title from HTMLAttributes<HTMLButtonElement> [string only]\",\n control: { type: 'text' },\n },\n message: {\n name: 'message',\n description: 'Button tooltip message from ButtonProps [ReactNode]',\n control: { type: \"object\" },\n },\n slotProps: {\n name: 'slotProps',\n description: 'Button slotProps from ButtonProps [object]',\n control: { type: \"object\" },\n },\n },\n tags: ['autodocs'],\n parameters: {\n docs: {\n description: {\n component: 'Universal button component with variants, icons and tooltip support.',\n },\n },\n pseudo: {\n hover: '#hover',\n focus: '#focus',\n active: '#active',\n disabled: '#disabled',\n },\n }\n} satisfies Meta<typeof Button>;\nexport default meta;\n\ntype Story = StoryObj<typeof meta>;\nconst args: Story['args'] = {\n ...meta.args,\n startAdornment: <PlusIcon/>,\n endAdornment: <PlusIcon/>,\n children: 'children',\n}\n\nexport const Default: Story = {\n args: {\n ...meta.args,\n children: '__children__',\n }\n};\n\nexport const Primary: Story = {\n args: {\n ...args,\n color: 'primary',\n size: 'lg',\n children: 'Створити',\n },\n argTypes: {\n variant: { control: false },\n color: { control: false },\n },\n render: (props) => (\n <div className='flex'>\n <DashedWrapper>\n <States {...props} variant='contained'/>\n <States {...props} variant='outlined'/>\n <States {...props} variant='ghost'/>\n </DashedWrapper>\n </div>\n ),\n};\n\nexport const Secondary: Story = {\n args: {\n ...args,\n color: 'secondary',\n size: 'lg',\n children: 'Створити',\n },\n argTypes: {\n variant: { control: false },\n color: { control: false },\n },\n render: (props) => (\n <div className='flex'>\n <DashedWrapper>\n <States {...props} variant='contained'/>\n <States {...props} variant='outlined'/>\n <States {...props} variant='ghost'/>\n </DashedWrapper>\n </div>\n ),\n};\n\nexport const Error: Story = {\n args: {\n ...args,\n color: 'error',\n size: 'lg',\n children: 'Створити',\n },\n argTypes: {\n variant: { control: false },\n color: { control: false },\n },\n render: (props) => (\n <div className='flex'>\n <DashedWrapper>\n <States {...props} variant='contained'/>\n <States {...props} variant='outlined'/>\n <States {...props} variant='ghost'/>\n </DashedWrapper>\n </div>\n ),\n};\n\n"],"names":["Template","props","jsx","Button","DashedWrapper","States","state","variants","colors","sizes","meta","args","PlusIcon","Default","Primary","Secondary","Error"],"mappings":"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"}