@purpurds/button 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/LICENSE.txt +45 -0
- package/dist/button.cjs.js +10 -0
- package/dist/button.cjs.js.map +1 -0
- package/dist/button.d.ts +23 -0
- package/dist/button.d.ts.map +1 -0
- package/dist/button.es.js +229 -0
- package/dist/button.es.js.map +1 -0
- package/dist/button.system.js +10 -0
- package/dist/button.system.js.map +1 -0
- package/dist/styles.css +1 -0
- package/package.json +63 -0
- package/readme.mdx +56 -0
- package/src/button.module.scss +125 -0
- package/src/button.stories.tsx +109 -0
- package/src/button.test.tsx +45 -0
- package/src/button.tsx +92 -0
- package/src/global.d.ts +4 -0
package/dist/LICENSE.txt
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
Name: @purpurds/action
|
|
2
|
+
Version: 2.8.0
|
|
3
|
+
License: AGPL-3.0-only
|
|
4
|
+
Private: false
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Name: @purpurds/spinner
|
|
9
|
+
Version: 2.8.0
|
|
10
|
+
License: AGPL-3.0-only
|
|
11
|
+
Private: false
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
Name: classnames
|
|
16
|
+
Version: 2.5.1
|
|
17
|
+
License: MIT
|
|
18
|
+
Private: false
|
|
19
|
+
Description: A simple utility for conditionally joining classNames together
|
|
20
|
+
Repository: git+https://github.com/JedWatson/classnames.git
|
|
21
|
+
Author: Jed Watson
|
|
22
|
+
License Copyright:
|
|
23
|
+
===
|
|
24
|
+
|
|
25
|
+
The MIT License (MIT)
|
|
26
|
+
|
|
27
|
+
Copyright (c) 2018 Jed Watson
|
|
28
|
+
|
|
29
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
30
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
31
|
+
in the Software without restriction, including without limitation the rights
|
|
32
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
33
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
34
|
+
furnished to do so, subject to the following conditions:
|
|
35
|
+
|
|
36
|
+
The above copyright notice and this permission notice shall be included in all
|
|
37
|
+
copies or substantial portions of the Software.
|
|
38
|
+
|
|
39
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
40
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
41
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
42
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
43
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
44
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
45
|
+
SOFTWARE.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _=require("react/jsx-runtime"),h=require("react"),V={PRIMARY:"primary",PRIMARY_NEGATIVE:"primary-negative",SECONDARY:"secondary",SECONDARY_NEGATIVE:"secondary-negative",EXPRESSIVE:"expressive",EXPRESSIVE_NEGATIVE:"expressive-negative"},g={SM:"sm",MD:"md",LG:"lg"};function j(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var m={exports:{}};/*!
|
|
2
|
+
Copyright (c) 2018 Jed Watson.
|
|
3
|
+
Licensed under the MIT License (MIT), see
|
|
4
|
+
http://jedwatson.github.io/classnames
|
|
5
|
+
*/(function(e){(function(){var s={}.hasOwnProperty;function u(){for(var t="",r=0;r<arguments.length;r++){var n=arguments[r];n&&(t=i(t,p(n)))}return t}function p(t){if(typeof t=="string"||typeof t=="number")return t;if(typeof t!="object")return"";if(Array.isArray(t))return u.apply(null,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes("[native code]"))return t.toString();var r="";for(var n in t)s.call(t,n)&&t[n]&&(r=i(r,n));return r}function i(t,r){return r?t?t+" "+r:t+r:t}e.exports?(u.default=u,e.exports=u):window.classNames=u})()})(m);var P=m.exports;const y=j(P),O="_rotate_7s2g1_1",D="_dash_7s2g1_1",l={"purpur-spinner":"_purpur-spinner_7s2g1_1",rotate:O,"purpur-spinner--xxs":"_purpur-spinner--xxs_7s2g1_4","purpur-spinner--xs":"_purpur-spinner--xs_7s2g1_8","purpur-spinner--sm":"_purpur-spinner--sm_7s2g1_12","purpur-spinner--md":"_purpur-spinner--md_7s2g1_16","purpur-spinner--lg":"_purpur-spinner--lg_7s2g1_20","purpur-spinner__circle":"_purpur-spinner__circle_7s2g1_24",dash:D,"purpur-spinner__circle--disabled":"_purpur-spinner__circle--disabled_7s2g1_33","purpur-spinner__circle--negative":"_purpur-spinner__circle--negative_7s2g1_36","purpur-spinner__circle--negative-disabled":"_purpur-spinner__circle--negative-disabled_7s2g1_39"},d="purpur-spinner",M={PRIMARY:"primary",DISABLED:"disabled",NEGATIVE:"negative",NEGATIVE_DISABLED:"negative-disabled"},$={XXS:"xxs",XS:"xs",SM:"sm",MD:"md",LG:"lg"},w=({["data-testid"]:e,size:s=$.SM,variant:u=M.PRIMARY,...p})=>_.jsx("div",{className:y([l[d],l[`${d}--${s}`]]),"data-testid":e,...p,children:_.jsx("svg",{viewBox:"0 0 50 50",children:_.jsx("circle",{className:y(l[`${d}__circle`],l[`${d}__circle--${u}`]),cx:"25",cy:"25",r:"20"})})});function G(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var x={exports:{}};/*!
|
|
6
|
+
Copyright (c) 2018 Jed Watson.
|
|
7
|
+
Licensed under the MIT License (MIT), see
|
|
8
|
+
http://jedwatson.github.io/classnames
|
|
9
|
+
*/(function(e){(function(){var s={}.hasOwnProperty;function u(){for(var t="",r=0;r<arguments.length;r++){var n=arguments[r];n&&(t=i(t,p(n)))}return t}function p(t){if(typeof t=="string"||typeof t=="number")return t;if(typeof t!="object")return"";if(Array.isArray(t))return u.apply(null,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes("[native code]"))return t.toString();var r="";for(var n in t)s.call(t,n)&&t[n]&&(r=i(r,n));return r}function i(t,r){return r?t?t+" "+r:t+r:t}e.exports?(u.default=u,e.exports=u):window.classNames=u})()})(x);var B=x.exports;const Y=G(B),a={"purpur-button":"_purpur-button_1fna2_1","purpur-button--sm":"_purpur-button--sm_1fna2_33","purpur-button--icon-only":"_purpur-button--icon-only_1fna2_36","purpur-button--md":"_purpur-button--md_1fna2_39","purpur-button--lg":"_purpur-button--lg_1fna2_45","purpur-button--full-width":"_purpur-button--full-width_1fna2_51","purpur-button--primary":"_purpur-button--primary_1fna2_54","purpur-button--disabled":"_purpur-button--disabled_1fna2_58","purpur-button--primary-negative":"_purpur-button--primary-negative_1fna2_64","purpur-button--secondary":"_purpur-button--secondary_1fna2_76","purpur-button--secondary-negative":"_purpur-button--secondary-negative_1fna2_87","purpur-button--expressive":"_purpur-button--expressive_1fna2_98","purpur-button--expressive-negative":"_purpur-button--expressive-negative_1fna2_108","purpur-button--negative":"_purpur-button--negative_1fna2_120","purpur-button--destructive":"_purpur-button--destructive_1fna2_127","purpur-button--destructive-negative":"_purpur-button--destructive-negative_1fna2_137","purpur-button--tertiary-purple":"_purpur-button--tertiary-purple_1fna2_147","purpur-button--tertiary-purple-negative":"_purpur-button--tertiary-purple-negative_1fna2_160","purpur-button--text-negative":"_purpur-button--text-negative_1fna2_175","purpur-button--text":"_purpur-button--text_1fna2_175"},E={...V,DESTRUCTIVE:"destructive",DESTRUCTIVE_NEGATIVE:"destructive-negative",TERTIARY_PURPLE:"tertiary-purple",TERTIARY_PURPLE_NEGATVIE:"tertiary-purple-negative",TEXT:"text",TEXT_NEGATIVE:"text-negative"},C=Object.values(E),o="purpur-button",L=({children:e,className:s,["data-testid"]:u,disabled:p=!1,fullWidth:i=!1,iconOnly:t,loading:r=!1,onClick:n,size:f=g.MD,variant:c,type:T="button",...b},A)=>{if(t&&c==="destructive")return null;const R=Y([a[o],a[`${o}--${c}`],a[`${o}--${f}`]],{[a[`${o}--icon-only`]]:t,[a[`${o}--negative`]]:c.endsWith("negative"),[a[`${o}--full-width`]]:i,[a[`${o}--disabled`]]:p||r},s),I=v=>{p||r?v.preventDefault():n&&n(v)},N=()=>c.endsWith("negative")?"negative-disabled":"disabled";return _.jsxs("button",{className:R,"data-testid":u,type:T,ref:A,"aria-disabled":b["aria-disabled"]||p||r,onClick:I,...b,children:[r&&_.jsx(w,{size:f===g.LG?"xs":"xxs",variant:N()})," ",e]})},S=h.forwardRef(L);S.displayName="Button";exports.BUTTON_VARIANT=E;exports.Button=S;exports.buttonVariants=C;
|
|
10
|
+
//# sourceMappingURL=button.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.cjs.js","sources":["../../../libraries/action/dist/action.es.js","../../spinner/dist/spinner.es.js","../../../common/temp/node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.js","../src/button.tsx"],"sourcesContent":["const e = {\n PRIMARY: \"primary\",\n PRIMARY_NEGATIVE: \"primary-negative\",\n SECONDARY: \"secondary\",\n SECONDARY_NEGATIVE: \"secondary-negative\",\n EXPRESSIVE: \"expressive\",\n EXPRESSIVE_NEGATIVE: \"expressive-negative\"\n}, E = Object.values(e), s = {\n SM: \"sm\",\n MD: \"md\",\n LG: \"lg\"\n}, a = Object.values(s);\nexport {\n s as SIZE,\n e as VARIANT,\n a as sizes,\n E as variants\n};\n//# sourceMappingURL=action.es.js.map\n","import { jsx as c } from \"react/jsx-runtime\";\nfunction g(s) {\n return s && s.__esModule && Object.prototype.hasOwnProperty.call(s, \"default\") ? s.default : s;\n}\nvar l = { exports: {} };\n/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n(function(s) {\n (function() {\n var u = {}.hasOwnProperty;\n function n() {\n for (var r = \"\", e = 0; e < arguments.length; e++) {\n var t = arguments[e];\n t && (r = a(r, _(t)));\n }\n return r;\n }\n function _(r) {\n if (typeof r == \"string\" || typeof r == \"number\")\n return r;\n if (typeof r != \"object\")\n return \"\";\n if (Array.isArray(r))\n return n.apply(null, r);\n if (r.toString !== Object.prototype.toString && !r.toString.toString().includes(\"[native code]\"))\n return r.toString();\n var e = \"\";\n for (var t in r)\n u.call(r, t) && r[t] && (e = a(e, t));\n return e;\n }\n function a(r, e) {\n return e ? r ? r + \" \" + e : r + e : r;\n }\n s.exports ? (n.default = n, s.exports = n) : window.classNames = n;\n })();\n})(l);\nvar m = l.exports;\nconst o = /* @__PURE__ */ g(m), v = \"_rotate_7s2g1_1\", S = \"_dash_7s2g1_1\", p = {\n \"purpur-spinner\": \"_purpur-spinner_7s2g1_1\",\n rotate: v,\n \"purpur-spinner--xxs\": \"_purpur-spinner--xxs_7s2g1_4\",\n \"purpur-spinner--xs\": \"_purpur-spinner--xs_7s2g1_8\",\n \"purpur-spinner--sm\": \"_purpur-spinner--sm_7s2g1_12\",\n \"purpur-spinner--md\": \"_purpur-spinner--md_7s2g1_16\",\n \"purpur-spinner--lg\": \"_purpur-spinner--lg_7s2g1_20\",\n \"purpur-spinner__circle\": \"_purpur-spinner__circle_7s2g1_24\",\n dash: S,\n \"purpur-spinner__circle--disabled\": \"_purpur-spinner__circle--disabled_7s2g1_33\",\n \"purpur-spinner__circle--negative\": \"_purpur-spinner__circle--negative_7s2g1_36\",\n \"purpur-spinner__circle--negative-disabled\": \"_purpur-spinner__circle--negative-disabled_7s2g1_39\"\n}, i = \"purpur-spinner\", d = {\n PRIMARY: \"primary\",\n DISABLED: \"disabled\",\n NEGATIVE: \"negative\",\n NEGATIVE_DISABLED: \"negative-disabled\"\n}, b = Object.values(d), f = {\n XXS: \"xxs\",\n XS: \"xs\",\n SM: \"sm\",\n MD: \"md\",\n LG: \"lg\"\n}, N = Object.values(f), y = ({\n [\"data-testid\"]: s,\n size: u = f.SM,\n variant: n = d.PRIMARY,\n ..._\n}) => /* @__PURE__ */ c(\n \"div\",\n {\n className: o([p[i], p[`${i}--${u}`]]),\n \"data-testid\": s,\n ..._,\n children: /* @__PURE__ */ c(\"svg\", { viewBox: \"0 0 50 50\", children: /* @__PURE__ */ c(\n \"circle\",\n {\n className: o(\n p[`${i}__circle`],\n p[`${i}__circle--${n}`]\n ),\n cx: \"25\",\n cy: \"25\",\n r: \"20\"\n }\n ) })\n }\n);\nexport {\n f as SPINNER_SIZE,\n d as SPINNER_VARIANT,\n y as Spinner,\n N as spinnerSizes,\n b as spinnerVariants\n};\n//# sourceMappingURL=spinner.es.js.map\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import React, { ButtonHTMLAttributes, ForwardedRef, forwardRef, MouseEvent } from \"react\";\nimport { ActionProps, SIZE as BUTTON_SIZE, VARIANT } from \"@purpurds/action\";\nimport { Spinner } from \"@purpurds/spinner\";\nimport c from \"classnames\";\n\nimport styles from \"./button.module.scss\";\n\nexport const BUTTON_VARIANT = {\n ...VARIANT,\n DESTRUCTIVE: \"destructive\",\n DESTRUCTIVE_NEGATIVE: \"destructive-negative\",\n TERTIARY_PURPLE: \"tertiary-purple\",\n TERTIARY_PURPLE_NEGATVIE: \"tertiary-purple-negative\",\n TEXT: \"text\",\n TEXT_NEGATIVE: \"text-negative\",\n} as const;\n\nexport const buttonVariants = Object.values(BUTTON_VARIANT);\nexport type ButtonVariant = (typeof BUTTON_VARIANT)[keyof typeof BUTTON_VARIANT];\n\nconst rootClassName = \"purpur-button\";\n\nexport type ButtonProps = ActionProps<ButtonVariant> &\n ButtonHTMLAttributes<HTMLButtonElement> & { loading?: boolean };\n\nconst ButtonComponent = (\n {\n children,\n className,\n [\"data-testid\"]: dataTestid,\n disabled = false,\n fullWidth = false,\n iconOnly,\n loading = false,\n onClick,\n size = BUTTON_SIZE.MD,\n variant,\n type = \"button\",\n ...props\n }: ButtonProps,\n ref: ForwardedRef<HTMLButtonElement>\n) => {\n if (iconOnly && variant === \"destructive\") {\n return null;\n }\n\n const classes = c(\n [\n styles[rootClassName],\n styles[`${rootClassName}--${variant}`],\n styles[`${rootClassName}--${size}`],\n ],\n {\n [styles[`${rootClassName}--icon-only`]]: iconOnly,\n [styles[`${rootClassName}--negative`]]: variant.endsWith(\"negative\"),\n [styles[`${rootClassName}--full-width`]]: fullWidth,\n [styles[`${rootClassName}--disabled`]]: disabled || loading,\n },\n className\n );\n\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n if (disabled || loading) {\n e.preventDefault();\n } else if (onClick) {\n onClick(e);\n }\n };\n\n const getSpinnerVariant = () => (variant.endsWith(\"negative\") ? \"negative-disabled\" : \"disabled\");\n\n return (\n <button\n className={classes}\n data-testid={dataTestid}\n // eslint-disable-next-line react/button-has-type\n type={type}\n ref={ref}\n aria-disabled={props[\"aria-disabled\"] || disabled || loading}\n onClick={handleClick}\n {...props}\n >\n {loading && (\n <Spinner size={size === BUTTON_SIZE.LG ? \"xs\" : \"xxs\"} variant={getSpinnerVariant()} />\n )}{\" \"}\n {children}\n </button>\n );\n};\n\nexport const Button = forwardRef(ButtonComponent);\nButton.displayName = \"Button\";\n"],"names":["e","s","g","l","u","n","r","t","a","_","m","o","v","S","p","i","d","f","y","c","hasOwn","classNames","classes","arg","appendClass","parseValue","key","value","newClass","module","BUTTON_VARIANT","VARIANT","buttonVariants","rootClassName","ButtonComponent","children","className","dataTestid","disabled","fullWidth","iconOnly","loading","onClick","size","BUTTON_SIZE","variant","type","props","ref","styles","handleClick","getSpinnerVariant","jsxs","jsx","Spinner","Button","forwardRef"],"mappings":"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","x_google_ignoreList":[2]}
|
package/dist/button.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React, { ButtonHTMLAttributes } from "react";
|
|
2
|
+
import { ActionProps } from "@purpurds/action";
|
|
3
|
+
export declare const BUTTON_VARIANT: {
|
|
4
|
+
readonly DESTRUCTIVE: "destructive";
|
|
5
|
+
readonly DESTRUCTIVE_NEGATIVE: "destructive-negative";
|
|
6
|
+
readonly TERTIARY_PURPLE: "tertiary-purple";
|
|
7
|
+
readonly TERTIARY_PURPLE_NEGATVIE: "tertiary-purple-negative";
|
|
8
|
+
readonly TEXT: "text";
|
|
9
|
+
readonly TEXT_NEGATIVE: "text-negative";
|
|
10
|
+
readonly PRIMARY: "primary";
|
|
11
|
+
readonly PRIMARY_NEGATIVE: "primary-negative";
|
|
12
|
+
readonly SECONDARY: "secondary";
|
|
13
|
+
readonly SECONDARY_NEGATIVE: "secondary-negative";
|
|
14
|
+
readonly EXPRESSIVE: "expressive";
|
|
15
|
+
readonly EXPRESSIVE_NEGATIVE: "expressive-negative";
|
|
16
|
+
};
|
|
17
|
+
export declare const buttonVariants: ("destructive" | "destructive-negative" | "tertiary-purple" | "tertiary-purple-negative" | "text" | "text-negative" | "primary" | "primary-negative" | "secondary" | "secondary-negative" | "expressive" | "expressive-negative")[];
|
|
18
|
+
export type ButtonVariant = (typeof BUTTON_VARIANT)[keyof typeof BUTTON_VARIANT];
|
|
19
|
+
export type ButtonProps = ActionProps<ButtonVariant> & ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
20
|
+
loading?: boolean;
|
|
21
|
+
};
|
|
22
|
+
export declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
23
|
+
//# sourceMappingURL=button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../src/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,oBAAoB,EAAwC,MAAM,OAAO,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAgC,MAAM,kBAAkB,CAAC;AAM7E,eAAO,MAAM,cAAc;;;;;;;;;;;;;CAQjB,CAAC;AAEX,eAAO,MAAM,cAAc,qOAAgC,CAAC;AAC5D,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAIjF,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,aAAa,CAAC,GAClD,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAmElE,eAAO,MAAM,MAAM,uFAA8B,CAAC"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { jsx as f, jsxs as I } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as N } from "react";
|
|
3
|
+
const h = {
|
|
4
|
+
PRIMARY: "primary",
|
|
5
|
+
PRIMARY_NEGATIVE: "primary-negative",
|
|
6
|
+
SECONDARY: "secondary",
|
|
7
|
+
SECONDARY_NEGATIVE: "secondary-negative",
|
|
8
|
+
EXPRESSIVE: "expressive",
|
|
9
|
+
EXPRESSIVE_NEGATIVE: "expressive-negative"
|
|
10
|
+
}, g = {
|
|
11
|
+
SM: "sm",
|
|
12
|
+
MD: "md",
|
|
13
|
+
LG: "lg"
|
|
14
|
+
};
|
|
15
|
+
function V(e) {
|
|
16
|
+
return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e;
|
|
17
|
+
}
|
|
18
|
+
var m = { exports: {} };
|
|
19
|
+
/*!
|
|
20
|
+
Copyright (c) 2018 Jed Watson.
|
|
21
|
+
Licensed under the MIT License (MIT), see
|
|
22
|
+
http://jedwatson.github.io/classnames
|
|
23
|
+
*/
|
|
24
|
+
(function(e) {
|
|
25
|
+
(function() {
|
|
26
|
+
var s = {}.hasOwnProperty;
|
|
27
|
+
function u() {
|
|
28
|
+
for (var t = "", r = 0; r < arguments.length; r++) {
|
|
29
|
+
var n = arguments[r];
|
|
30
|
+
n && (t = i(t, p(n)));
|
|
31
|
+
}
|
|
32
|
+
return t;
|
|
33
|
+
}
|
|
34
|
+
function p(t) {
|
|
35
|
+
if (typeof t == "string" || typeof t == "number")
|
|
36
|
+
return t;
|
|
37
|
+
if (typeof t != "object")
|
|
38
|
+
return "";
|
|
39
|
+
if (Array.isArray(t))
|
|
40
|
+
return u.apply(null, t);
|
|
41
|
+
if (t.toString !== Object.prototype.toString && !t.toString.toString().includes("[native code]"))
|
|
42
|
+
return t.toString();
|
|
43
|
+
var r = "";
|
|
44
|
+
for (var n in t)
|
|
45
|
+
s.call(t, n) && t[n] && (r = i(r, n));
|
|
46
|
+
return r;
|
|
47
|
+
}
|
|
48
|
+
function i(t, r) {
|
|
49
|
+
return r ? t ? t + " " + r : t + r : t;
|
|
50
|
+
}
|
|
51
|
+
e.exports ? (u.default = u, e.exports = u) : window.classNames = u;
|
|
52
|
+
})();
|
|
53
|
+
})(m);
|
|
54
|
+
var P = m.exports;
|
|
55
|
+
const y = /* @__PURE__ */ V(P), D = "_rotate_7s2g1_1", $ = "_dash_7s2g1_1", c = {
|
|
56
|
+
"purpur-spinner": "_purpur-spinner_7s2g1_1",
|
|
57
|
+
rotate: D,
|
|
58
|
+
"purpur-spinner--xxs": "_purpur-spinner--xxs_7s2g1_4",
|
|
59
|
+
"purpur-spinner--xs": "_purpur-spinner--xs_7s2g1_8",
|
|
60
|
+
"purpur-spinner--sm": "_purpur-spinner--sm_7s2g1_12",
|
|
61
|
+
"purpur-spinner--md": "_purpur-spinner--md_7s2g1_16",
|
|
62
|
+
"purpur-spinner--lg": "_purpur-spinner--lg_7s2g1_20",
|
|
63
|
+
"purpur-spinner__circle": "_purpur-spinner__circle_7s2g1_24",
|
|
64
|
+
dash: $,
|
|
65
|
+
"purpur-spinner__circle--disabled": "_purpur-spinner__circle--disabled_7s2g1_33",
|
|
66
|
+
"purpur-spinner__circle--negative": "_purpur-spinner__circle--negative_7s2g1_36",
|
|
67
|
+
"purpur-spinner__circle--negative-disabled": "_purpur-spinner__circle--negative-disabled_7s2g1_39"
|
|
68
|
+
}, l = "purpur-spinner", w = {
|
|
69
|
+
PRIMARY: "primary",
|
|
70
|
+
DISABLED: "disabled",
|
|
71
|
+
NEGATIVE: "negative",
|
|
72
|
+
NEGATIVE_DISABLED: "negative-disabled"
|
|
73
|
+
}, M = {
|
|
74
|
+
XXS: "xxs",
|
|
75
|
+
XS: "xs",
|
|
76
|
+
SM: "sm",
|
|
77
|
+
MD: "md",
|
|
78
|
+
LG: "lg"
|
|
79
|
+
}, O = ({
|
|
80
|
+
["data-testid"]: e,
|
|
81
|
+
size: s = M.SM,
|
|
82
|
+
variant: u = w.PRIMARY,
|
|
83
|
+
...p
|
|
84
|
+
}) => /* @__PURE__ */ f(
|
|
85
|
+
"div",
|
|
86
|
+
{
|
|
87
|
+
className: y([c[l], c[`${l}--${s}`]]),
|
|
88
|
+
"data-testid": e,
|
|
89
|
+
...p,
|
|
90
|
+
children: /* @__PURE__ */ f("svg", { viewBox: "0 0 50 50", children: /* @__PURE__ */ f(
|
|
91
|
+
"circle",
|
|
92
|
+
{
|
|
93
|
+
className: y(
|
|
94
|
+
c[`${l}__circle`],
|
|
95
|
+
c[`${l}__circle--${u}`]
|
|
96
|
+
),
|
|
97
|
+
cx: "25",
|
|
98
|
+
cy: "25",
|
|
99
|
+
r: "20"
|
|
100
|
+
}
|
|
101
|
+
) })
|
|
102
|
+
}
|
|
103
|
+
);
|
|
104
|
+
function G(e) {
|
|
105
|
+
return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e;
|
|
106
|
+
}
|
|
107
|
+
var E = { exports: {} };
|
|
108
|
+
/*!
|
|
109
|
+
Copyright (c) 2018 Jed Watson.
|
|
110
|
+
Licensed under the MIT License (MIT), see
|
|
111
|
+
http://jedwatson.github.io/classnames
|
|
112
|
+
*/
|
|
113
|
+
(function(e) {
|
|
114
|
+
(function() {
|
|
115
|
+
var s = {}.hasOwnProperty;
|
|
116
|
+
function u() {
|
|
117
|
+
for (var t = "", r = 0; r < arguments.length; r++) {
|
|
118
|
+
var n = arguments[r];
|
|
119
|
+
n && (t = i(t, p(n)));
|
|
120
|
+
}
|
|
121
|
+
return t;
|
|
122
|
+
}
|
|
123
|
+
function p(t) {
|
|
124
|
+
if (typeof t == "string" || typeof t == "number")
|
|
125
|
+
return t;
|
|
126
|
+
if (typeof t != "object")
|
|
127
|
+
return "";
|
|
128
|
+
if (Array.isArray(t))
|
|
129
|
+
return u.apply(null, t);
|
|
130
|
+
if (t.toString !== Object.prototype.toString && !t.toString.toString().includes("[native code]"))
|
|
131
|
+
return t.toString();
|
|
132
|
+
var r = "";
|
|
133
|
+
for (var n in t)
|
|
134
|
+
s.call(t, n) && t[n] && (r = i(r, n));
|
|
135
|
+
return r;
|
|
136
|
+
}
|
|
137
|
+
function i(t, r) {
|
|
138
|
+
return r ? t ? t + " " + r : t + r : t;
|
|
139
|
+
}
|
|
140
|
+
e.exports ? (u.default = u, e.exports = u) : window.classNames = u;
|
|
141
|
+
})();
|
|
142
|
+
})(E);
|
|
143
|
+
var j = E.exports;
|
|
144
|
+
const Y = /* @__PURE__ */ G(j), a = {
|
|
145
|
+
"purpur-button": "_purpur-button_1fna2_1",
|
|
146
|
+
"purpur-button--sm": "_purpur-button--sm_1fna2_33",
|
|
147
|
+
"purpur-button--icon-only": "_purpur-button--icon-only_1fna2_36",
|
|
148
|
+
"purpur-button--md": "_purpur-button--md_1fna2_39",
|
|
149
|
+
"purpur-button--lg": "_purpur-button--lg_1fna2_45",
|
|
150
|
+
"purpur-button--full-width": "_purpur-button--full-width_1fna2_51",
|
|
151
|
+
"purpur-button--primary": "_purpur-button--primary_1fna2_54",
|
|
152
|
+
"purpur-button--disabled": "_purpur-button--disabled_1fna2_58",
|
|
153
|
+
"purpur-button--primary-negative": "_purpur-button--primary-negative_1fna2_64",
|
|
154
|
+
"purpur-button--secondary": "_purpur-button--secondary_1fna2_76",
|
|
155
|
+
"purpur-button--secondary-negative": "_purpur-button--secondary-negative_1fna2_87",
|
|
156
|
+
"purpur-button--expressive": "_purpur-button--expressive_1fna2_98",
|
|
157
|
+
"purpur-button--expressive-negative": "_purpur-button--expressive-negative_1fna2_108",
|
|
158
|
+
"purpur-button--negative": "_purpur-button--negative_1fna2_120",
|
|
159
|
+
"purpur-button--destructive": "_purpur-button--destructive_1fna2_127",
|
|
160
|
+
"purpur-button--destructive-negative": "_purpur-button--destructive-negative_1fna2_137",
|
|
161
|
+
"purpur-button--tertiary-purple": "_purpur-button--tertiary-purple_1fna2_147",
|
|
162
|
+
"purpur-button--tertiary-purple-negative": "_purpur-button--tertiary-purple-negative_1fna2_160",
|
|
163
|
+
"purpur-button--text-negative": "_purpur-button--text-negative_1fna2_175",
|
|
164
|
+
"purpur-button--text": "_purpur-button--text_1fna2_175"
|
|
165
|
+
}, B = {
|
|
166
|
+
...h,
|
|
167
|
+
DESTRUCTIVE: "destructive",
|
|
168
|
+
DESTRUCTIVE_NEGATIVE: "destructive-negative",
|
|
169
|
+
TERTIARY_PURPLE: "tertiary-purple",
|
|
170
|
+
TERTIARY_PURPLE_NEGATVIE: "tertiary-purple-negative",
|
|
171
|
+
TEXT: "text",
|
|
172
|
+
TEXT_NEGATIVE: "text-negative"
|
|
173
|
+
}, W = Object.values(B), o = "purpur-button", C = ({
|
|
174
|
+
children: e,
|
|
175
|
+
className: s,
|
|
176
|
+
["data-testid"]: u,
|
|
177
|
+
disabled: p = !1,
|
|
178
|
+
fullWidth: i = !1,
|
|
179
|
+
iconOnly: t,
|
|
180
|
+
loading: r = !1,
|
|
181
|
+
onClick: n,
|
|
182
|
+
size: d = g.MD,
|
|
183
|
+
variant: _,
|
|
184
|
+
type: x = "button",
|
|
185
|
+
...b
|
|
186
|
+
}, S) => {
|
|
187
|
+
if (t && _ === "destructive")
|
|
188
|
+
return null;
|
|
189
|
+
const A = Y(
|
|
190
|
+
[
|
|
191
|
+
a[o],
|
|
192
|
+
a[`${o}--${_}`],
|
|
193
|
+
a[`${o}--${d}`]
|
|
194
|
+
],
|
|
195
|
+
{
|
|
196
|
+
[a[`${o}--icon-only`]]: t,
|
|
197
|
+
[a[`${o}--negative`]]: _.endsWith("negative"),
|
|
198
|
+
[a[`${o}--full-width`]]: i,
|
|
199
|
+
[a[`${o}--disabled`]]: p || r
|
|
200
|
+
},
|
|
201
|
+
s
|
|
202
|
+
), T = (v) => {
|
|
203
|
+
p || r ? v.preventDefault() : n && n(v);
|
|
204
|
+
}, R = () => _.endsWith("negative") ? "negative-disabled" : "disabled";
|
|
205
|
+
return /* @__PURE__ */ I(
|
|
206
|
+
"button",
|
|
207
|
+
{
|
|
208
|
+
className: A,
|
|
209
|
+
"data-testid": u,
|
|
210
|
+
type: x,
|
|
211
|
+
ref: S,
|
|
212
|
+
"aria-disabled": b["aria-disabled"] || p || r,
|
|
213
|
+
onClick: T,
|
|
214
|
+
...b,
|
|
215
|
+
children: [
|
|
216
|
+
r && /* @__PURE__ */ f(O, { size: d === g.LG ? "xs" : "xxs", variant: R() }),
|
|
217
|
+
" ",
|
|
218
|
+
e
|
|
219
|
+
]
|
|
220
|
+
}
|
|
221
|
+
);
|
|
222
|
+
}, L = N(C);
|
|
223
|
+
L.displayName = "Button";
|
|
224
|
+
export {
|
|
225
|
+
B as BUTTON_VARIANT,
|
|
226
|
+
L as Button,
|
|
227
|
+
W as buttonVariants
|
|
228
|
+
};
|
|
229
|
+
//# sourceMappingURL=button.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.es.js","sources":["../../../libraries/action/dist/action.es.js","../../spinner/dist/spinner.es.js","../../../common/temp/node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.js","../src/button.tsx"],"sourcesContent":["const e = {\n PRIMARY: \"primary\",\n PRIMARY_NEGATIVE: \"primary-negative\",\n SECONDARY: \"secondary\",\n SECONDARY_NEGATIVE: \"secondary-negative\",\n EXPRESSIVE: \"expressive\",\n EXPRESSIVE_NEGATIVE: \"expressive-negative\"\n}, E = Object.values(e), s = {\n SM: \"sm\",\n MD: \"md\",\n LG: \"lg\"\n}, a = Object.values(s);\nexport {\n s as SIZE,\n e as VARIANT,\n a as sizes,\n E as variants\n};\n//# sourceMappingURL=action.es.js.map\n","import { jsx as c } from \"react/jsx-runtime\";\nfunction g(s) {\n return s && s.__esModule && Object.prototype.hasOwnProperty.call(s, \"default\") ? s.default : s;\n}\nvar l = { exports: {} };\n/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n(function(s) {\n (function() {\n var u = {}.hasOwnProperty;\n function n() {\n for (var r = \"\", e = 0; e < arguments.length; e++) {\n var t = arguments[e];\n t && (r = a(r, _(t)));\n }\n return r;\n }\n function _(r) {\n if (typeof r == \"string\" || typeof r == \"number\")\n return r;\n if (typeof r != \"object\")\n return \"\";\n if (Array.isArray(r))\n return n.apply(null, r);\n if (r.toString !== Object.prototype.toString && !r.toString.toString().includes(\"[native code]\"))\n return r.toString();\n var e = \"\";\n for (var t in r)\n u.call(r, t) && r[t] && (e = a(e, t));\n return e;\n }\n function a(r, e) {\n return e ? r ? r + \" \" + e : r + e : r;\n }\n s.exports ? (n.default = n, s.exports = n) : window.classNames = n;\n })();\n})(l);\nvar m = l.exports;\nconst o = /* @__PURE__ */ g(m), v = \"_rotate_7s2g1_1\", S = \"_dash_7s2g1_1\", p = {\n \"purpur-spinner\": \"_purpur-spinner_7s2g1_1\",\n rotate: v,\n \"purpur-spinner--xxs\": \"_purpur-spinner--xxs_7s2g1_4\",\n \"purpur-spinner--xs\": \"_purpur-spinner--xs_7s2g1_8\",\n \"purpur-spinner--sm\": \"_purpur-spinner--sm_7s2g1_12\",\n \"purpur-spinner--md\": \"_purpur-spinner--md_7s2g1_16\",\n \"purpur-spinner--lg\": \"_purpur-spinner--lg_7s2g1_20\",\n \"purpur-spinner__circle\": \"_purpur-spinner__circle_7s2g1_24\",\n dash: S,\n \"purpur-spinner__circle--disabled\": \"_purpur-spinner__circle--disabled_7s2g1_33\",\n \"purpur-spinner__circle--negative\": \"_purpur-spinner__circle--negative_7s2g1_36\",\n \"purpur-spinner__circle--negative-disabled\": \"_purpur-spinner__circle--negative-disabled_7s2g1_39\"\n}, i = \"purpur-spinner\", d = {\n PRIMARY: \"primary\",\n DISABLED: \"disabled\",\n NEGATIVE: \"negative\",\n NEGATIVE_DISABLED: \"negative-disabled\"\n}, b = Object.values(d), f = {\n XXS: \"xxs\",\n XS: \"xs\",\n SM: \"sm\",\n MD: \"md\",\n LG: \"lg\"\n}, N = Object.values(f), y = ({\n [\"data-testid\"]: s,\n size: u = f.SM,\n variant: n = d.PRIMARY,\n ..._\n}) => /* @__PURE__ */ c(\n \"div\",\n {\n className: o([p[i], p[`${i}--${u}`]]),\n \"data-testid\": s,\n ..._,\n children: /* @__PURE__ */ c(\"svg\", { viewBox: \"0 0 50 50\", children: /* @__PURE__ */ c(\n \"circle\",\n {\n className: o(\n p[`${i}__circle`],\n p[`${i}__circle--${n}`]\n ),\n cx: \"25\",\n cy: \"25\",\n r: \"20\"\n }\n ) })\n }\n);\nexport {\n f as SPINNER_SIZE,\n d as SPINNER_VARIANT,\n y as Spinner,\n N as spinnerSizes,\n b as spinnerVariants\n};\n//# sourceMappingURL=spinner.es.js.map\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import React, { ButtonHTMLAttributes, ForwardedRef, forwardRef, MouseEvent } from \"react\";\nimport { ActionProps, SIZE as BUTTON_SIZE, VARIANT } from \"@purpurds/action\";\nimport { Spinner } from \"@purpurds/spinner\";\nimport c from \"classnames\";\n\nimport styles from \"./button.module.scss\";\n\nexport const BUTTON_VARIANT = {\n ...VARIANT,\n DESTRUCTIVE: \"destructive\",\n DESTRUCTIVE_NEGATIVE: \"destructive-negative\",\n TERTIARY_PURPLE: \"tertiary-purple\",\n TERTIARY_PURPLE_NEGATVIE: \"tertiary-purple-negative\",\n TEXT: \"text\",\n TEXT_NEGATIVE: \"text-negative\",\n} as const;\n\nexport const buttonVariants = Object.values(BUTTON_VARIANT);\nexport type ButtonVariant = (typeof BUTTON_VARIANT)[keyof typeof BUTTON_VARIANT];\n\nconst rootClassName = \"purpur-button\";\n\nexport type ButtonProps = ActionProps<ButtonVariant> &\n ButtonHTMLAttributes<HTMLButtonElement> & { loading?: boolean };\n\nconst ButtonComponent = (\n {\n children,\n className,\n [\"data-testid\"]: dataTestid,\n disabled = false,\n fullWidth = false,\n iconOnly,\n loading = false,\n onClick,\n size = BUTTON_SIZE.MD,\n variant,\n type = \"button\",\n ...props\n }: ButtonProps,\n ref: ForwardedRef<HTMLButtonElement>\n) => {\n if (iconOnly && variant === \"destructive\") {\n return null;\n }\n\n const classes = c(\n [\n styles[rootClassName],\n styles[`${rootClassName}--${variant}`],\n styles[`${rootClassName}--${size}`],\n ],\n {\n [styles[`${rootClassName}--icon-only`]]: iconOnly,\n [styles[`${rootClassName}--negative`]]: variant.endsWith(\"negative\"),\n [styles[`${rootClassName}--full-width`]]: fullWidth,\n [styles[`${rootClassName}--disabled`]]: disabled || loading,\n },\n className\n );\n\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n if (disabled || loading) {\n e.preventDefault();\n } else if (onClick) {\n onClick(e);\n }\n };\n\n const getSpinnerVariant = () => (variant.endsWith(\"negative\") ? \"negative-disabled\" : \"disabled\");\n\n return (\n <button\n className={classes}\n data-testid={dataTestid}\n // eslint-disable-next-line react/button-has-type\n type={type}\n ref={ref}\n aria-disabled={props[\"aria-disabled\"] || disabled || loading}\n onClick={handleClick}\n {...props}\n >\n {loading && (\n <Spinner size={size === BUTTON_SIZE.LG ? \"xs\" : \"xxs\"} variant={getSpinnerVariant()} />\n )}{\" \"}\n {children}\n </button>\n );\n};\n\nexport const Button = forwardRef(ButtonComponent);\nButton.displayName = \"Button\";\n"],"names":["e","s","g","l","u","n","r","t","a","_","m","o","v","S","p","i","d","f","y","c","hasOwn","classNames","classes","arg","appendClass","parseValue","key","value","newClass","module","BUTTON_VARIANT","VARIANT","buttonVariants","rootClassName","ButtonComponent","children","className","dataTestid","disabled","fullWidth","iconOnly","loading","onClick","size","BUTTON_SIZE","variant","type","props","ref","styles","handleClick","getSpinnerVariant","jsxs","jsx","Spinner","Button","forwardRef"],"mappings":";;AAAK,MAACA,IAAI;AAAA,EACR,SAAS;AAAA,EACT,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,oBAAoB;AAAA,EACpB,YAAY;AAAA,EACZ,qBAAqB;AACvB,GAAyBC,IAAI;AAAA,EAC3B,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;ACVA,SAASC,EAAED,GAAG;AACZ,SAAOA,KAAKA,EAAE,cAAc,OAAO,UAAU,eAAe,KAAKA,GAAG,SAAS,IAAIA,EAAE,UAAUA;AAC/F;AACA,IAAIE,IAAI,EAAE,SAAS,CAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAAA,CAKC,SAASF,GAAG;AACX,GAAC,WAAW;AACV,QAAIG,IAAI,CAAE,EAAC;AACX,aAASC,IAAI;AACX,eAASC,IAAI,IAAIN,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AACjD,YAAIO,IAAI,UAAUP,CAAC;AACnB,QAAAO,MAAMD,IAAIE,EAAEF,GAAGG,EAAEF,CAAC,CAAC;AAAA,MACpB;AACD,aAAOD;AAAA,IACR;AACD,aAASG,EAAEH,GAAG;AACZ,UAAI,OAAOA,KAAK,YAAY,OAAOA,KAAK;AACtC,eAAOA;AACT,UAAI,OAAOA,KAAK;AACd,eAAO;AACT,UAAI,MAAM,QAAQA,CAAC;AACjB,eAAOD,EAAE,MAAM,MAAMC,CAAC;AACxB,UAAIA,EAAE,aAAa,OAAO,UAAU,YAAY,CAACA,EAAE,SAAS,WAAW,SAAS,eAAe;AAC7F,eAAOA,EAAE;AACX,UAAIN,IAAI;AACR,eAASO,KAAKD;AACZ,QAAAF,EAAE,KAAKE,GAAGC,CAAC,KAAKD,EAAEC,CAAC,MAAMP,IAAIQ,EAAER,GAAGO,CAAC;AACrC,aAAOP;AAAA,IACR;AACD,aAASQ,EAAEF,GAAGN,GAAG;AACf,aAAOA,IAAIM,IAAIA,IAAI,MAAMN,IAAIM,IAAIN,IAAIM;AAAA,IACtC;AACD,IAAAL,EAAE,WAAWI,EAAE,UAAUA,GAAGJ,EAAE,UAAUI,KAAK,OAAO,aAAaA;AAAA,EACrE;AACA,GAAGF,CAAC;AACJ,IAAIO,IAAIP,EAAE;AACL,MAACQ,IAAoB,gBAAAT,EAAEQ,CAAC,GAAGE,IAAI,mBAAmBC,IAAI,iBAAiBC,IAAI;AAAA,EAC9E,kBAAkB;AAAA,EAClB,QAAQF;AAAA,EACR,uBAAuB;AAAA,EACvB,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,0BAA0B;AAAA,EAC1B,MAAMC;AAAA,EACN,oCAAoC;AAAA,EACpC,oCAAoC;AAAA,EACpC,6CAA6C;AAC/C,GAAGE,IAAI,kBAAkBC,IAAI;AAAA,EAC3B,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,mBAAmB;AACrB,GAAyBC,IAAI;AAAA,EAC3B,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAAyBC,IAAI,CAAC;AAAA,EAC5B,CAAC,gBAAgBjB;AAAA,EACjB,MAAMG,IAAIa,EAAE;AAAA,EACZ,SAASZ,IAAIW,EAAE;AAAA,EACf,GAAGP;AACL,MAAsBU,gBAAAA;AAAAA,EACpB;AAAA,EACA;AAAA,IACE,WAAWR,EAAE,CAACG,EAAEC,CAAC,GAAGD,EAAE,GAAGC,CAAC,KAAKX,CAAC,EAAE,CAAC,CAAC;AAAA,IACpC,eAAeH;AAAA,IACf,GAAGQ;AAAA,IACH,UAA0BU,gBAAAA,EAAE,OAAO,EAAE,SAAS,aAAa,UAA0BA,gBAAAA;AAAAA,MACnF;AAAA,MACA;AAAA,QACE,WAAWR;AAAA,UACTG,EAAE,GAAGC,CAAC,UAAU;AAAA,UAChBD,EAAE,GAAGC,CAAC,aAAaV,CAAC,EAAE;AAAA,QACvB;AAAA,QACD,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,GAAG;AAAA,MACJ;AAAA,IACP,GAAO;AAAA,EACJ;AACH;;;;;;;;;;;AClFA,GAAC,WAAY;AAGZ,QAAIe,IAAS,CAAE,EAAC;AAEhB,aAASC,IAAc;AAGtB,eAFIC,IAAU,IAELP,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AAC1C,YAAIQ,IAAM,UAAUR,CAAC;AACrB,QAAIQ,MACHD,IAAUE,EAAYF,GAASG,EAAWF,CAAG,CAAC;AAAA,MAE/C;AAED,aAAOD;AAAA,IACP;AAED,aAASG,EAAYF,GAAK;AACzB,UAAI,OAAOA,KAAQ,YAAY,OAAOA,KAAQ;AAC7C,eAAOA;AAGR,UAAI,OAAOA,KAAQ;AAClB,eAAO;AAGR,UAAI,MAAM,QAAQA,CAAG;AACpB,eAAOF,EAAW,MAAM,MAAME,CAAG;AAGlC,UAAIA,EAAI,aAAa,OAAO,UAAU,YAAY,CAACA,EAAI,SAAS,SAAQ,EAAG,SAAS,eAAe;AAClG,eAAOA,EAAI;AAGZ,UAAID,IAAU;AAEd,eAASI,KAAOH;AACf,QAAIH,EAAO,KAAKG,GAAKG,CAAG,KAAKH,EAAIG,CAAG,MACnCJ,IAAUE,EAAYF,GAASI,CAAG;AAIpC,aAAOJ;AAAA,IACP;AAED,aAASE,EAAaG,GAAOC,GAAU;AACtC,aAAKA,IAIDD,IACIA,IAAQ,MAAMC,IAGfD,IAAQC,IAPPD;AAAA,IAQR;AAED,IAAqCE,EAAO,WAC3CR,EAAW,UAAUA,GACrBQ,EAAA,UAAiBR,KAOjB,OAAO,aAAaA;AAAA,EAEtB;;;;;;;;;;;;;;;;;;;;;;;;GCrEaS,IAAiB;AAAA,EAC5B,GAAGC;AAAAA,EACH,aAAa;AAAA,EACb,sBAAsB;AAAA,EACtB,iBAAiB;AAAA,EACjB,0BAA0B;AAAA,EAC1B,MAAM;AAAA,EACN,eAAe;AACjB,GAEaC,IAAiB,OAAO,OAAOF,CAAc,GAGpDG,IAAgB,iBAKhBC,IAAkB,CACtB;AAAA,EACE,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,CAAC,gBAAgBC;AAAA,EACjB,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,UAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,SAAAC;AAAA,EACA,MAAAC,IAAOC,EAAY;AAAA,EACnB,SAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,GAAGC;AACL,GACAC,MACG;AACC,MAAAR,KAAYK,MAAY;AACnB,WAAA;AAGT,QAAMvB,IAAUH;AAAA,IACd;AAAA,MACE8B,EAAOhB,CAAa;AAAA,MACpBgB,EAAO,GAAGhB,CAAa,KAAKY,CAAO,EAAE;AAAA,MACrCI,EAAO,GAAGhB,CAAa,KAAKU,CAAI,EAAE;AAAA,IACpC;AAAA,IACA;AAAA,MACE,CAACM,EAAO,GAAGhB,CAAa,aAAa,CAAC,GAAGO;AAAA,MACzC,CAACS,EAAO,GAAGhB,CAAa,YAAY,CAAC,GAAGY,EAAQ,SAAS,UAAU;AAAA,MACnE,CAACI,EAAO,GAAGhB,CAAa,cAAc,CAAC,GAAGM;AAAA,MAC1C,CAACU,EAAO,GAAGhB,CAAa,YAAY,CAAC,GAAGK,KAAYG;AAAA,IACtD;AAAA,IACAL;AAAA,EAAA,GAGIc,IAAc,CAAClD,MAAqC;AACxD,IAAIsC,KAAYG,IACdzC,EAAE,eAAe,IACR0C,KACTA,EAAQ1C,CAAC;AAAA,EACX,GAGImD,IAAoB,MAAON,EAAQ,SAAS,UAAU,IAAI,sBAAsB;AAGpF,SAAA,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW9B;AAAA,MACX,eAAae;AAAA,MAEb,MAAAS;AAAA,MACA,KAAAE;AAAA,MACA,iBAAeD,EAAM,eAAe,KAAKT,KAAYG;AAAA,MACrD,SAASS;AAAA,MACR,GAAGH;AAAA,MAEH,UAAA;AAAA,QACCN,KAAA,gBAAAY,EAACC,GAAQ,EAAA,MAAMX,MAASC,EAAY,KAAK,OAAO,OAAO,SAASO,EAAqB,EAAA,CAAA;AAAA,QACpF;AAAA,QACFhB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP,GAEaoB,IAASC,EAAWtB,CAAe;AAChDqB,EAAO,cAAc;","x_google_ignoreList":[2]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
System.register(["react","react/jsx-runtime"],function(b,X){"use strict";var g,v,c;return{setters:[_=>{g=_.forwardRef,v=_.default},_=>{c=_.jsx}],execute:function(){const _={PRIMARY:"primary",PRIMARY_NEGATIVE:"primary-negative",SECONDARY:"secondary",SECONDARY_NEGATIVE:"secondary-negative",EXPRESSIVE:"expressive",EXPRESSIVE_NEGATIVE:"expressive-negative"},y={SM:"sm",MD:"md",LG:"lg"};function R(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var m={exports:{}};/*!
|
|
2
|
+
Copyright (c) 2018 Jed Watson.
|
|
3
|
+
Licensed under the MIT License (MIT), see
|
|
4
|
+
http://jedwatson.github.io/classnames
|
|
5
|
+
*/(function(e){(function(){var a={}.hasOwnProperty;function u(){for(var t="",r=0;r<arguments.length;r++){var n=arguments[r];n&&(t=o(t,p(n)))}return t}function p(t){if(typeof t=="string"||typeof t=="number")return t;if(typeof t!="object")return"";if(Array.isArray(t))return u.apply(null,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes("[native code]"))return t.toString();var r="";for(var n in t)a.call(t,n)&&t[n]&&(r=o(r,n));return r}function o(t,r){return r?t?t+" "+r:t+r:t}e.exports?(u.default=u,e.exports=u):window.classNames=u})()})(m);var I=m.exports;const E=R(I),N="_rotate_7s2g1_1",V="_dash_7s2g1_1",l={"purpur-spinner":"_purpur-spinner_7s2g1_1",rotate:N,"purpur-spinner--xxs":"_purpur-spinner--xxs_7s2g1_4","purpur-spinner--xs":"_purpur-spinner--xs_7s2g1_8","purpur-spinner--sm":"_purpur-spinner--sm_7s2g1_12","purpur-spinner--md":"_purpur-spinner--md_7s2g1_16","purpur-spinner--lg":"_purpur-spinner--lg_7s2g1_20","purpur-spinner__circle":"_purpur-spinner__circle_7s2g1_24",dash:V,"purpur-spinner__circle--disabled":"_purpur-spinner__circle--disabled_7s2g1_33","purpur-spinner__circle--negative":"_purpur-spinner__circle--negative_7s2g1_36","purpur-spinner__circle--negative-disabled":"_purpur-spinner__circle--negative-disabled_7s2g1_39"},f="purpur-spinner",h={PRIMARY:"primary",DISABLED:"disabled",NEGATIVE:"negative",NEGATIVE_DISABLED:"negative-disabled"},P={XXS:"xxs",XS:"xs",SM:"sm",MD:"md",LG:"lg"},w=({["data-testid"]:e,size:a=P.SM,variant:u=h.PRIMARY,...p})=>c("div",{className:E([l[f],l[`${f}--${a}`]]),"data-testid":e,...p,children:c("svg",{viewBox:"0 0 50 50",children:c("circle",{className:E(l[`${f}__circle`],l[`${f}__circle--${u}`]),cx:"25",cy:"25",r:"20"})})});function D(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var x={exports:{}};/*!
|
|
6
|
+
Copyright (c) 2018 Jed Watson.
|
|
7
|
+
Licensed under the MIT License (MIT), see
|
|
8
|
+
http://jedwatson.github.io/classnames
|
|
9
|
+
*/(function(e){(function(){var a={}.hasOwnProperty;function u(){for(var t="",r=0;r<arguments.length;r++){var n=arguments[r];n&&(t=o(t,p(n)))}return t}function p(t){if(typeof t=="string"||typeof t=="number")return t;if(typeof t!="object")return"";if(Array.isArray(t))return u.apply(null,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes("[native code]"))return t.toString();var r="";for(var n in t)a.call(t,n)&&t[n]&&(r=o(r,n));return r}function o(t,r){return r?t?t+" "+r:t+r:t}e.exports?(u.default=u,e.exports=u):window.classNames=u})()})(x);var O=x.exports;const $=D(O),s={"purpur-button":"_purpur-button_1fna2_1","purpur-button--sm":"_purpur-button--sm_1fna2_33","purpur-button--icon-only":"_purpur-button--icon-only_1fna2_36","purpur-button--md":"_purpur-button--md_1fna2_39","purpur-button--lg":"_purpur-button--lg_1fna2_45","purpur-button--full-width":"_purpur-button--full-width_1fna2_51","purpur-button--primary":"_purpur-button--primary_1fna2_54","purpur-button--disabled":"_purpur-button--disabled_1fna2_58","purpur-button--primary-negative":"_purpur-button--primary-negative_1fna2_64","purpur-button--secondary":"_purpur-button--secondary_1fna2_76","purpur-button--secondary-negative":"_purpur-button--secondary-negative_1fna2_87","purpur-button--expressive":"_purpur-button--expressive_1fna2_98","purpur-button--expressive-negative":"_purpur-button--expressive-negative_1fna2_108","purpur-button--negative":"_purpur-button--negative_1fna2_120","purpur-button--destructive":"_purpur-button--destructive_1fna2_127","purpur-button--destructive-negative":"_purpur-button--destructive-negative_1fna2_137","purpur-button--tertiary-purple":"_purpur-button--tertiary-purple_1fna2_147","purpur-button--tertiary-purple-negative":"_purpur-button--tertiary-purple-negative_1fna2_160","purpur-button--text-negative":"_purpur-button--text-negative_1fna2_175","purpur-button--text":"_purpur-button--text_1fna2_175"},M=b("BUTTON_VARIANT",{..._,DESTRUCTIVE:"destructive",DESTRUCTIVE_NEGATIVE:"destructive-negative",TERTIARY_PURPLE:"tertiary-purple",TERTIARY_PURPLE_NEGATVIE:"tertiary-purple-negative",TEXT:"text",TEXT_NEGATIVE:"text-negative"}),U=b("buttonVariants",Object.values(M)),i="purpur-button",j=b("Button",g(({children:e,className:a,["data-testid"]:u,disabled:p=!1,fullWidth:o=!1,iconOnly:t,loading:r=!1,onClick:n,size:S=y.MD,variant:d,type:G="button",...A},B)=>{if(t&&d==="destructive")return null;const C=$([s[i],s[`${i}--${d}`],s[`${i}--${S}`]],{[s[`${i}--icon-only`]]:t,[s[`${i}--negative`]]:d.endsWith("negative"),[s[`${i}--full-width`]]:o,[s[`${i}--disabled`]]:p||r},a),Y=T=>{p||r?T.preventDefault():n&&n(T)},L=()=>d.endsWith("negative")?"negative-disabled":"disabled";return v.createElement("button",{className:C,"data-testid":u,type:G,ref:B,"aria-disabled":A["aria-disabled"]||p||r,onClick:Y,...A},r&&v.createElement(w,{size:S===y.LG?"xs":"xxs",variant:L()})," ",e)}));j.displayName="Button"}}});
|
|
10
|
+
//# sourceMappingURL=button.system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.system.js","sources":["../../../libraries/action/dist/action.es.js","../../spinner/dist/spinner.es.js","../../../common/temp/node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.js","../src/button.tsx"],"sourcesContent":["const e = {\n PRIMARY: \"primary\",\n PRIMARY_NEGATIVE: \"primary-negative\",\n SECONDARY: \"secondary\",\n SECONDARY_NEGATIVE: \"secondary-negative\",\n EXPRESSIVE: \"expressive\",\n EXPRESSIVE_NEGATIVE: \"expressive-negative\"\n}, E = Object.values(e), s = {\n SM: \"sm\",\n MD: \"md\",\n LG: \"lg\"\n}, a = Object.values(s);\nexport {\n s as SIZE,\n e as VARIANT,\n a as sizes,\n E as variants\n};\n//# sourceMappingURL=action.es.js.map\n","import { jsx as c } from \"react/jsx-runtime\";\nfunction g(s) {\n return s && s.__esModule && Object.prototype.hasOwnProperty.call(s, \"default\") ? s.default : s;\n}\nvar l = { exports: {} };\n/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n(function(s) {\n (function() {\n var u = {}.hasOwnProperty;\n function n() {\n for (var r = \"\", e = 0; e < arguments.length; e++) {\n var t = arguments[e];\n t && (r = a(r, _(t)));\n }\n return r;\n }\n function _(r) {\n if (typeof r == \"string\" || typeof r == \"number\")\n return r;\n if (typeof r != \"object\")\n return \"\";\n if (Array.isArray(r))\n return n.apply(null, r);\n if (r.toString !== Object.prototype.toString && !r.toString.toString().includes(\"[native code]\"))\n return r.toString();\n var e = \"\";\n for (var t in r)\n u.call(r, t) && r[t] && (e = a(e, t));\n return e;\n }\n function a(r, e) {\n return e ? r ? r + \" \" + e : r + e : r;\n }\n s.exports ? (n.default = n, s.exports = n) : window.classNames = n;\n })();\n})(l);\nvar m = l.exports;\nconst o = /* @__PURE__ */ g(m), v = \"_rotate_7s2g1_1\", S = \"_dash_7s2g1_1\", p = {\n \"purpur-spinner\": \"_purpur-spinner_7s2g1_1\",\n rotate: v,\n \"purpur-spinner--xxs\": \"_purpur-spinner--xxs_7s2g1_4\",\n \"purpur-spinner--xs\": \"_purpur-spinner--xs_7s2g1_8\",\n \"purpur-spinner--sm\": \"_purpur-spinner--sm_7s2g1_12\",\n \"purpur-spinner--md\": \"_purpur-spinner--md_7s2g1_16\",\n \"purpur-spinner--lg\": \"_purpur-spinner--lg_7s2g1_20\",\n \"purpur-spinner__circle\": \"_purpur-spinner__circle_7s2g1_24\",\n dash: S,\n \"purpur-spinner__circle--disabled\": \"_purpur-spinner__circle--disabled_7s2g1_33\",\n \"purpur-spinner__circle--negative\": \"_purpur-spinner__circle--negative_7s2g1_36\",\n \"purpur-spinner__circle--negative-disabled\": \"_purpur-spinner__circle--negative-disabled_7s2g1_39\"\n}, i = \"purpur-spinner\", d = {\n PRIMARY: \"primary\",\n DISABLED: \"disabled\",\n NEGATIVE: \"negative\",\n NEGATIVE_DISABLED: \"negative-disabled\"\n}, b = Object.values(d), f = {\n XXS: \"xxs\",\n XS: \"xs\",\n SM: \"sm\",\n MD: \"md\",\n LG: \"lg\"\n}, N = Object.values(f), y = ({\n [\"data-testid\"]: s,\n size: u = f.SM,\n variant: n = d.PRIMARY,\n ..._\n}) => /* @__PURE__ */ c(\n \"div\",\n {\n className: o([p[i], p[`${i}--${u}`]]),\n \"data-testid\": s,\n ..._,\n children: /* @__PURE__ */ c(\"svg\", { viewBox: \"0 0 50 50\", children: /* @__PURE__ */ c(\n \"circle\",\n {\n className: o(\n p[`${i}__circle`],\n p[`${i}__circle--${n}`]\n ),\n cx: \"25\",\n cy: \"25\",\n r: \"20\"\n }\n ) })\n }\n);\nexport {\n f as SPINNER_SIZE,\n d as SPINNER_VARIANT,\n y as Spinner,\n N as spinnerSizes,\n b as spinnerVariants\n};\n//# sourceMappingURL=spinner.es.js.map\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import React, { ButtonHTMLAttributes, ForwardedRef, forwardRef, MouseEvent } from \"react\";\nimport { ActionProps, SIZE as BUTTON_SIZE, VARIANT } from \"@purpurds/action\";\nimport { Spinner } from \"@purpurds/spinner\";\nimport c from \"classnames\";\n\nimport styles from \"./button.module.scss\";\n\nexport const BUTTON_VARIANT = {\n ...VARIANT,\n DESTRUCTIVE: \"destructive\",\n DESTRUCTIVE_NEGATIVE: \"destructive-negative\",\n TERTIARY_PURPLE: \"tertiary-purple\",\n TERTIARY_PURPLE_NEGATVIE: \"tertiary-purple-negative\",\n TEXT: \"text\",\n TEXT_NEGATIVE: \"text-negative\",\n} as const;\n\nexport const buttonVariants = Object.values(BUTTON_VARIANT);\nexport type ButtonVariant = (typeof BUTTON_VARIANT)[keyof typeof BUTTON_VARIANT];\n\nconst rootClassName = \"purpur-button\";\n\nexport type ButtonProps = ActionProps<ButtonVariant> &\n ButtonHTMLAttributes<HTMLButtonElement> & { loading?: boolean };\n\nconst ButtonComponent = (\n {\n children,\n className,\n [\"data-testid\"]: dataTestid,\n disabled = false,\n fullWidth = false,\n iconOnly,\n loading = false,\n onClick,\n size = BUTTON_SIZE.MD,\n variant,\n type = \"button\",\n ...props\n }: ButtonProps,\n ref: ForwardedRef<HTMLButtonElement>\n) => {\n if (iconOnly && variant === \"destructive\") {\n return null;\n }\n\n const classes = c(\n [\n styles[rootClassName],\n styles[`${rootClassName}--${variant}`],\n styles[`${rootClassName}--${size}`],\n ],\n {\n [styles[`${rootClassName}--icon-only`]]: iconOnly,\n [styles[`${rootClassName}--negative`]]: variant.endsWith(\"negative\"),\n [styles[`${rootClassName}--full-width`]]: fullWidth,\n [styles[`${rootClassName}--disabled`]]: disabled || loading,\n },\n className\n );\n\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n if (disabled || loading) {\n e.preventDefault();\n } else if (onClick) {\n onClick(e);\n }\n };\n\n const getSpinnerVariant = () => (variant.endsWith(\"negative\") ? \"negative-disabled\" : \"disabled\");\n\n return (\n <button\n className={classes}\n data-testid={dataTestid}\n // eslint-disable-next-line react/button-has-type\n type={type}\n ref={ref}\n aria-disabled={props[\"aria-disabled\"] || disabled || loading}\n onClick={handleClick}\n {...props}\n >\n {loading && (\n <Spinner size={size === BUTTON_SIZE.LG ? \"xs\" : \"xxs\"} variant={getSpinnerVariant()} />\n )}{\" \"}\n {children}\n </button>\n );\n};\n\nexport const Button = forwardRef(ButtonComponent);\nButton.displayName = \"Button\";\n"],"names":["e","s","g","l","u","n","r","t","a","_","m","o","v","S","p","i","d","f","y","c","hasOwn","classNames","classes","arg","appendClass","parseValue","key","value","newClass","module","BUTTON_VARIANT","exports","VARIANT","buttonVariants","rootClassName","Button","forwardRef","children","className","dataTestid","disabled","fullWidth","iconOnly","loading","onClick","size","BUTTON_SIZE","variant","type","props","ref","styles","handleClick","getSpinnerVariant","React","Spinner"],"mappings":"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","x_google_ignoreList":[2]}
|
package/dist/styles.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._purpur-button_1fna2_1{align-items:center;border-radius:var(--purpur-border-radius-full);border-width:0;cursor:pointer;display:inline-flex;font-size:var(--purpur-typography-scale-100);font-family:var(--purpur-typography-family-default),Helvetica,Arial,"Lucida Grande",sans-serif;font-weight:var(--purpur-typography-weight-medium);gap:var(--purpur-spacing-100);justify-content:center;line-height:var(--purpur-spacing-300);outline:0;position:relative;text-decoration:none;transition:all var(--purpur-motion-duration-100) ease;width:auto}._purpur-button_1fna2_1:focus:before{border-radius:var(--purpur-border-radius-full);box-shadow:0 0 0 var(--purpur-border-width-sm) var(--purpur-color-border-interactive-focus);content:"";display:block;inset:calc(var(--purpur-spacing-25) * -1);position:absolute}._purpur-button_1fna2_1:focus:not(:focus-visible):before{box-shadow:none}._purpur-button_1fna2_1 svg{display:block}._purpur-button--sm_1fna2_33{padding:var(--purpur-spacing-100) var(--purpur-spacing-250)}._purpur-button--sm_1fna2_33._purpur-button--icon-only_1fna2_36{padding:var(--purpur-spacing-100)}._purpur-button--md_1fna2_39{padding:var(--purpur-spacing-150) var(--purpur-spacing-300)}._purpur-button--md_1fna2_39._purpur-button--icon-only_1fna2_36{padding:var(--purpur-spacing-150)}._purpur-button--lg_1fna2_45{padding:var(--purpur-spacing-200) var(--purpur-spacing-400)}._purpur-button--lg_1fna2_45._purpur-button--icon-only_1fna2_36{padding:var(--purpur-spacing-200)}._purpur-button--full-width_1fna2_51{width:100%}._purpur-button--primary_1fna2_54{background-color:var(--purpur-color-background-interactive-primary);color:var(--purpur-color-text-interactive-on-primary)}._purpur-button--primary_1fna2_54:hover:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-primary-hover)}._purpur-button--primary_1fna2_54:active:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-primary-active)}._purpur-button--primary-negative_1fna2_64{background-color:var(--purpur-color-background-interactive-primary-negative);color:var(--purpur-color-text-interactive-on-primary-negative)}._purpur-button--primary-negative_1fna2_64:hover:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-primary-negative-hover);border-color:var(--purpur-color-background-interactive-primary-negative-hover)}._purpur-button--primary-negative_1fna2_64:active:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-primary-negative-active);border-color:var(--purpur-color-background-interactive-primary-negative-active)}._purpur-button--secondary_1fna2_76{background-color:var(--purpur-color-background-interactive-transparent);box-shadow:inset 0 0 0 var(--purpur-border-width-xs) var(--purpur-color-border-interactive-primary);color:var(--purpur-color-text-interactive-primary)}._purpur-button--secondary_1fna2_76:hover:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-transparent-hover)}._purpur-button--secondary_1fna2_76:active:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-transparent-active)}._purpur-button--secondary-negative_1fna2_87{background-color:var(--purpur-color-background-interactive-transparent);box-shadow:inset 0 0 0 var(--purpur-border-width-xs) var(--purpur-color-border-interactive-primary-negative);color:var(--purpur-color-text-interactive-primary-negative)}._purpur-button--secondary-negative_1fna2_87:hover:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-transparent-negative-hover)}._purpur-button--secondary-negative_1fna2_87:active:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-transparent-negative-active)}._purpur-button--expressive_1fna2_98{background-color:var(--purpur-color-background-interactive-expressive);color:var(--purpur-color-text-interactive-on-expressive)}._purpur-button--expressive_1fna2_98:hover:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-expressive-hover)}._purpur-button--expressive_1fna2_98:active:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-expressive-active)}._purpur-button--expressive-negative_1fna2_108{background-color:var(--purpur-color-background-interactive-expressive-negative);color:var(--purpur-color-text-interactive-on-expressive-negative)}._purpur-button--expressive-negative_1fna2_108:hover:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-expressive-negative-hover);color:var(--purpur-color-text-interactive-on-expressive-negative-hover)}._purpur-button--expressive-negative_1fna2_108:active:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-expressive-negative-active);color:var(--purpur-color-text-interactive-on-expressive-negative-active)}._purpur-button--negative_1fna2_120._purpur-button--disabled_1fna2_58{background-color:var(--purpur-color-background-interactive-disabled-negative);color:var(--purpur-color-text-weak-negative)}._purpur-button--secondary_1fna2_76._purpur-button--disabled_1fna2_58,._purpur-button--secondary-negative_1fna2_87._purpur-button--disabled_1fna2_58{box-shadow:none}._purpur-button--destructive_1fna2_127{background-color:var(--purpur-color-background-interactive-destructive);color:var(--purpur-color-text-interactive-on-destructive)}._purpur-button--destructive_1fna2_127:hover:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-destructive-hover)}._purpur-button--destructive_1fna2_127:active:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-destructive-active)}._purpur-button--destructive-negative_1fna2_137{background-color:var(--purpur-color-background-interactive-destructive);color:var(--purpur-color-text-interactive-on-destructive)}._purpur-button--destructive-negative_1fna2_137:hover:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-destructive-hover)}._purpur-button--destructive-negative_1fna2_137:active:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-destructive-active)}._purpur-button--tertiary-purple_1fna2_147{background-color:var(--purpur-color-background-interactive-transparent);color:var(--purpur-color-text-interactive-primary)}._purpur-button--tertiary-purple_1fna2_147._purpur-button--disabled_1fna2_58{background-color:var(--purpur-color-background-interactive-transparent)}._purpur-button--tertiary-purple_1fna2_147:hover:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-transparent-hover)}._purpur-button--tertiary-purple_1fna2_147:active:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-transparent-active)}._purpur-button--tertiary-purple-negative_1fna2_160{background-color:var(--purpur-color-background-interactive-transparent);color:var(--purpur-color-text-interactive-primary-negative)}._purpur-button--tertiary-purple-negative_1fna2_160._purpur-button--disabled_1fna2_58{background-color:var(--purpur-color-background-interactive-transparent)}._purpur-button--tertiary-purple-negative_1fna2_160:hover:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-transparent-negative-hover);color:var(--purpur-color-text-interactive-primary-negative-hover)}._purpur-button--tertiary-purple-negative_1fna2_160:active:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-transparent-negative-active);color:var(--purpur-color-text-interactive-primary-negative-active)}._purpur-button--text-negative_1fna2_175{border-radius:0;padding-left:0;padding-right:0;background-color:var(--purpur-color-background-interactive-transparent);color:var(--purpur-color-text-interactive-primary-negative)}._purpur-button--text-negative_1fna2_175:focus-visible:before{border-radius:0}._purpur-button--text-negative_1fna2_175._purpur-button--disabled_1fna2_58{background-color:var(--purpur-color-background-interactive-transparent)}._purpur-button--text-negative_1fna2_175:hover:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-transparent-negative-hover);color:var(--purpur-color-text-interactive-primary-negative-hover)}._purpur-button--text-negative_1fna2_175:active:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-transparent-negative-active);color:var(--purpur-color-text-interactive-primary-negative-active)}._purpur-button--text_1fna2_175{border-radius:0;padding-left:0;padding-right:0;background-color:var(--purpur-color-background-interactive-transparent);color:var(--purpur-color-text-interactive-primary)}._purpur-button--text_1fna2_175:focus-visible:before{border-radius:0}._purpur-button--text_1fna2_175._purpur-button--disabled_1fna2_58{background-color:var(--purpur-color-background-interactive-transparent);color:var(--purpur-color-text-weak)}._purpur-button--text_1fna2_175:hover:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-transparent-hover)}._purpur-button--text_1fna2_175:active:not(._purpur-button--disabled_1fna2_58){background-color:var(--purpur-color-background-interactive-transparent-active)}._purpur-button--disabled_1fna2_58{background-color:var(--purpur-color-background-interactive-disabled);color:var(--purpur-color-text-weak);cursor:not-allowed}
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@purpurds/button",
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"license": "AGPL-3.0-only",
|
|
5
|
+
"main": "./dist/button.cjs.js",
|
|
6
|
+
"types": "./dist/button.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"require": "./dist/button.cjs.js",
|
|
10
|
+
"systemjs": "./dist/button.system.js",
|
|
11
|
+
"types": "./dist/button.d.ts",
|
|
12
|
+
"default": "./dist/button.es.js"
|
|
13
|
+
},
|
|
14
|
+
"./styles": "./dist/styles.css"
|
|
15
|
+
},
|
|
16
|
+
"source": "src/button.tsx",
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"classnames": "~2.5.0",
|
|
19
|
+
"@purpurds/action": "3.0.0",
|
|
20
|
+
"@purpurds/icon": "3.0.0",
|
|
21
|
+
"@purpurds/tokens": "3.0.0",
|
|
22
|
+
"@purpurds/spinner": "3.0.0"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@rushstack/eslint-patch": "~1.7.0",
|
|
26
|
+
"@storybook/blocks": "~7.6.0",
|
|
27
|
+
"@storybook/react": "~7.6.0",
|
|
28
|
+
"@telia/base-rig": "~8.2.0",
|
|
29
|
+
"@telia/react-rig": "~3.2.0",
|
|
30
|
+
"@testing-library/dom": "~9.3.3",
|
|
31
|
+
"@testing-library/jest-dom": "~6.3.0",
|
|
32
|
+
"@testing-library/react": "~14.1.2",
|
|
33
|
+
"@types/node": "18",
|
|
34
|
+
"@types/react-dom": "~18.2.17",
|
|
35
|
+
"@types/react": "~18.2.42",
|
|
36
|
+
"eslint-plugin-testing-library": "~6.2.0",
|
|
37
|
+
"eslint": "~8.56.0",
|
|
38
|
+
"jsdom": "~22.1.0",
|
|
39
|
+
"lint-staged": "~10.5.3",
|
|
40
|
+
"prettier": "~2.8.8",
|
|
41
|
+
"react-dom": "~18.2.0",
|
|
42
|
+
"react": "~18.2.0",
|
|
43
|
+
"typescript": "~5.2.2",
|
|
44
|
+
"vite": "~5.0.6",
|
|
45
|
+
"vitest": "~1.2.0",
|
|
46
|
+
"@purpurds/component-rig": "1.0.0",
|
|
47
|
+
"@purpurds/icon": "3.0.0"
|
|
48
|
+
},
|
|
49
|
+
"scripts": {
|
|
50
|
+
"build:dev": "vite",
|
|
51
|
+
"build:watch": "vite build --watch",
|
|
52
|
+
"build": "rm -rf dist && vite build && vite build --mode systemjs",
|
|
53
|
+
"ci:build": "rushx build",
|
|
54
|
+
"coverage": "vitest run --coverage",
|
|
55
|
+
"lint:fix": "eslint . --fix",
|
|
56
|
+
"lint": "lint-staged --no-stash 2>&1",
|
|
57
|
+
"sbdev": "rush sbdev",
|
|
58
|
+
"test:unit": "vitest run --passWithNoTests",
|
|
59
|
+
"test:watch": "vitest --watch",
|
|
60
|
+
"test": "rushx test:unit",
|
|
61
|
+
"typecheck": "tsc -p ./tsconfig.json"
|
|
62
|
+
}
|
|
63
|
+
}
|
package/readme.mdx
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Meta, Stories, ArgTypes, Primary, Subtitle } from "@storybook/blocks";
|
|
2
|
+
|
|
3
|
+
import * as ButtonStories from "./src/button.stories";
|
|
4
|
+
import packageInfo from "./package.json";
|
|
5
|
+
|
|
6
|
+
<Meta name="Docs" title="Components/Button" of={ButtonStories} />
|
|
7
|
+
|
|
8
|
+
# Button
|
|
9
|
+
|
|
10
|
+
<Subtitle>Version {packageInfo.version}</Subtitle>
|
|
11
|
+
|
|
12
|
+
### Showcase
|
|
13
|
+
|
|
14
|
+
<Primary />
|
|
15
|
+
|
|
16
|
+
### Properties
|
|
17
|
+
|
|
18
|
+
<ArgTypes />
|
|
19
|
+
|
|
20
|
+
### Installation
|
|
21
|
+
|
|
22
|
+
#### Via NPM
|
|
23
|
+
|
|
24
|
+
Add the dependency to your consumer app like `"@purpurds/button": "x.y.z"`
|
|
25
|
+
|
|
26
|
+
#### From outside the monorepo (build-time)
|
|
27
|
+
|
|
28
|
+
To install this package, you need to setup access to the artifactory. [Click here to go to the guide on how to do that](https://github.com/telia-company/jfrog-documentation/blob/main/doc/JFrog/JFrog_Onboarding.md#getting-access-to-artifactory-and-other-jfrog-applications).
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
In MyApp.tsx
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import "@purpurds/tokens/index.css";
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
and
|
|
39
|
+
|
|
40
|
+
```tsx
|
|
41
|
+
import "@purpurds/button/styles";
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
In MyComponent.tsx
|
|
45
|
+
|
|
46
|
+
```tsx
|
|
47
|
+
import { Button } from "@purpurds/button";
|
|
48
|
+
|
|
49
|
+
export const MyComponent = () => {
|
|
50
|
+
return (
|
|
51
|
+
<div>
|
|
52
|
+
<Button {...someProps}>Some content</Button>
|
|
53
|
+
</div>
|
|
54
|
+
);
|
|
55
|
+
};
|
|
56
|
+
```
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
@import "@purpurds/action/src/action.scss";
|
|
2
|
+
|
|
3
|
+
$root: ".purpur-button";
|
|
4
|
+
|
|
5
|
+
@mixin purple-negative {
|
|
6
|
+
background-color: var(--purpur-color-background-interactive-transparent);
|
|
7
|
+
color: var(--purpur-color-text-interactive-primary-negative);
|
|
8
|
+
|
|
9
|
+
&#{$root}--disabled {
|
|
10
|
+
background-color: var(--purpur-color-background-interactive-transparent);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
&:hover:not(#{$root}--disabled) {
|
|
14
|
+
background-color: var(--purpur-color-background-interactive-transparent-negative-hover);
|
|
15
|
+
color: var(--purpur-color-text-interactive-primary-negative-hover);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
&:active:not(#{$root}--disabled) {
|
|
19
|
+
background-color: var(--purpur-color-background-interactive-transparent-negative-active);
|
|
20
|
+
color: var(--purpur-color-text-interactive-primary-negative-active);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@mixin red {
|
|
25
|
+
background-color: var(--purpur-color-background-interactive-destructive);
|
|
26
|
+
color: var(--purpur-color-text-interactive-on-destructive);
|
|
27
|
+
|
|
28
|
+
&:hover:not(#{$root}--disabled) {
|
|
29
|
+
background-color: var(--purpur-color-background-interactive-destructive-hover);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
&:active:not(#{$root}--disabled) {
|
|
33
|
+
background-color: var(--purpur-color-background-interactive-destructive-active);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@mixin square {
|
|
38
|
+
border-radius: 0;
|
|
39
|
+
padding-left: 0;
|
|
40
|
+
padding-right: 0;
|
|
41
|
+
|
|
42
|
+
&:focus-visible {
|
|
43
|
+
&::before {
|
|
44
|
+
border-radius: 0;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
#{$root} {
|
|
50
|
+
@include action();
|
|
51
|
+
|
|
52
|
+
&--negative {
|
|
53
|
+
&#{$root}--disabled {
|
|
54
|
+
background-color: var(--purpur-color-background-interactive-disabled-negative);
|
|
55
|
+
color: var(--purpur-color-text-weak-negative);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
&--secondary,
|
|
60
|
+
&--secondary-negative {
|
|
61
|
+
&#{$root}--disabled {
|
|
62
|
+
box-shadow: none;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
&--destructive {
|
|
67
|
+
@include red();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
&--destructive-negative {
|
|
71
|
+
@include red();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
&--tertiary-purple {
|
|
75
|
+
background-color: var(--purpur-color-background-interactive-transparent);
|
|
76
|
+
color: var(--purpur-color-text-interactive-primary);
|
|
77
|
+
|
|
78
|
+
&#{$root}--disabled {
|
|
79
|
+
background-color: var(--purpur-color-background-interactive-transparent);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
&:hover:not(#{$root}--disabled) {
|
|
83
|
+
background-color: var(--purpur-color-background-interactive-transparent-hover);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
&:active:not(#{$root}--disabled) {
|
|
87
|
+
background-color: var(--purpur-color-background-interactive-transparent-active);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
&--tertiary-purple-negative {
|
|
92
|
+
@include purple-negative();
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
&--text-negative {
|
|
96
|
+
@include square();
|
|
97
|
+
@include purple-negative();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
&--text {
|
|
101
|
+
@include square();
|
|
102
|
+
|
|
103
|
+
background-color: var(--purpur-color-background-interactive-transparent);
|
|
104
|
+
color: var(--purpur-color-text-interactive-primary);
|
|
105
|
+
|
|
106
|
+
&#{$root}--disabled {
|
|
107
|
+
background-color: var(--purpur-color-background-interactive-transparent);
|
|
108
|
+
color: var(--purpur-color-text-weak);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
&:hover:not(#{$root}--disabled) {
|
|
112
|
+
background-color: var(--purpur-color-background-interactive-transparent-hover);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
&:active:not(#{$root}--disabled) {
|
|
116
|
+
background-color: var(--purpur-color-background-interactive-transparent-active);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
&--disabled {
|
|
121
|
+
background-color: var(--purpur-color-background-interactive-disabled);
|
|
122
|
+
color: var(--purpur-color-text-weak);
|
|
123
|
+
cursor: not-allowed;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { sizes } from "@purpurds/action";
|
|
3
|
+
import { Icon, plus } from "@purpurds/icon";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
|
|
6
|
+
import "@purpurds/icon/styles";
|
|
7
|
+
import "@purpurds/spinner/styles";
|
|
8
|
+
import { Button, ButtonVariant, buttonVariants } from "./button";
|
|
9
|
+
|
|
10
|
+
const meta: Meta<typeof Button> = {
|
|
11
|
+
title: "Inputs/Button",
|
|
12
|
+
component: Button,
|
|
13
|
+
parameters: {
|
|
14
|
+
design: [
|
|
15
|
+
{
|
|
16
|
+
name: "Button",
|
|
17
|
+
type: "figma",
|
|
18
|
+
url: "https://www.figma.com/file/XEaIIFskrrxIBHMZDkIuIg/Purpur-DS---Component-Library?type=design&node-id=0%3A1&mode=design&t=XdU5MnI58cJ1D1e5-1",
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
argTypes: {
|
|
23
|
+
disabled: { control: { type: "boolean" } },
|
|
24
|
+
fullWidth: { control: { type: "boolean" } },
|
|
25
|
+
size: {
|
|
26
|
+
options: sizes,
|
|
27
|
+
control: { type: "select" },
|
|
28
|
+
},
|
|
29
|
+
variant: {
|
|
30
|
+
options: buttonVariants,
|
|
31
|
+
control: { type: "select" },
|
|
32
|
+
},
|
|
33
|
+
["data-testid"]: { control: { type: "text" } },
|
|
34
|
+
className: { control: { type: "text" } },
|
|
35
|
+
children: { control: { type: "text" } },
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
export default meta;
|
|
39
|
+
|
|
40
|
+
type Story = StoryObj<typeof Button>;
|
|
41
|
+
|
|
42
|
+
const adaptiveBackground = (variant: ButtonVariant) => ({
|
|
43
|
+
margin: "calc(var(--purpur-spacing-250) * -1)",
|
|
44
|
+
padding: "var(--purpur-spacing-250)",
|
|
45
|
+
background: variant?.includes("negative") ? "var(--purpur-color-purple-900)" : "transparent",
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
export const Showcase: Story = {
|
|
49
|
+
args: {
|
|
50
|
+
children: "Button label",
|
|
51
|
+
disabled: false,
|
|
52
|
+
fullWidth: false,
|
|
53
|
+
variant: "primary",
|
|
54
|
+
},
|
|
55
|
+
render: ({ children, ...args }) => (
|
|
56
|
+
<div style={adaptiveBackground(args.variant)}>
|
|
57
|
+
<Button {...args}>{children}</Button>
|
|
58
|
+
</div>
|
|
59
|
+
),
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export const ButtonWithLeftIcon: Story = {
|
|
63
|
+
name: "Button with left icon",
|
|
64
|
+
args: {
|
|
65
|
+
children: "Button label",
|
|
66
|
+
variant: "primary",
|
|
67
|
+
},
|
|
68
|
+
render: ({ children, ...args }) => (
|
|
69
|
+
<div style={adaptiveBackground(args.variant)}>
|
|
70
|
+
<Button {...args}>
|
|
71
|
+
<Icon svg={plus} size="xs" /> {children}
|
|
72
|
+
</Button>
|
|
73
|
+
</div>
|
|
74
|
+
),
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export const ButtonWithRightIcon: Story = {
|
|
78
|
+
name: "Button with right icon",
|
|
79
|
+
args: {
|
|
80
|
+
children: "Button label",
|
|
81
|
+
variant: "primary",
|
|
82
|
+
},
|
|
83
|
+
render: ({ children, ...args }) => (
|
|
84
|
+
<div style={adaptiveBackground(args.variant)}>
|
|
85
|
+
<Button {...args}>
|
|
86
|
+
{children} <Icon svg={plus} size="xs" />
|
|
87
|
+
</Button>
|
|
88
|
+
</div>
|
|
89
|
+
),
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export const ButtonWithOnlyIcon: Story = {
|
|
93
|
+
name: "Button with only icon",
|
|
94
|
+
parameters: {
|
|
95
|
+
controls: { exclude: ["children"] },
|
|
96
|
+
},
|
|
97
|
+
args: {
|
|
98
|
+
variant: "primary",
|
|
99
|
+
iconOnly: true,
|
|
100
|
+
["aria-label"]: "Button label",
|
|
101
|
+
},
|
|
102
|
+
render: ({ ...args }) => (
|
|
103
|
+
<div style={adaptiveBackground(args.variant)}>
|
|
104
|
+
<Button {...args}>
|
|
105
|
+
<Icon svg={plus} size="xs" />
|
|
106
|
+
</Button>
|
|
107
|
+
</div>
|
|
108
|
+
),
|
|
109
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import * as matchers from "@testing-library/jest-dom/matchers";
|
|
3
|
+
import { cleanup, fireEvent, render, screen } from "@testing-library/react";
|
|
4
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
5
|
+
|
|
6
|
+
import { Button } from "./button";
|
|
7
|
+
|
|
8
|
+
expect.extend(matchers);
|
|
9
|
+
|
|
10
|
+
describe("Button", () => {
|
|
11
|
+
afterEach(() => {
|
|
12
|
+
cleanup();
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it("should render", () => {
|
|
16
|
+
render(
|
|
17
|
+
<Button variant="primary" data-testid="button">
|
|
18
|
+
Some text content
|
|
19
|
+
</Button>
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
expect(screen.getByTestId("button")).toHaveTextContent("Some text content");
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it("should use correct class for primary variant", () => {
|
|
26
|
+
render(
|
|
27
|
+
<Button variant="primary" data-testid="button">
|
|
28
|
+
Some text content
|
|
29
|
+
</Button>
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
expect(screen.getByTestId("button").classList.contains("purpur-button--primary")).toBeTruthy();
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it("should handle click", () => {
|
|
36
|
+
const handleClick = vi.fn();
|
|
37
|
+
render(
|
|
38
|
+
<Button variant="secondary" onClick={handleClick}>
|
|
39
|
+
Click Me
|
|
40
|
+
</Button>
|
|
41
|
+
);
|
|
42
|
+
fireEvent.click(screen.getByText(/click me/i));
|
|
43
|
+
expect(handleClick).toHaveBeenCalledTimes(1);
|
|
44
|
+
});
|
|
45
|
+
});
|
package/src/button.tsx
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import React, { ButtonHTMLAttributes, ForwardedRef, forwardRef, MouseEvent } from "react";
|
|
2
|
+
import { ActionProps, SIZE as BUTTON_SIZE, VARIANT } from "@purpurds/action";
|
|
3
|
+
import { Spinner } from "@purpurds/spinner";
|
|
4
|
+
import c from "classnames";
|
|
5
|
+
|
|
6
|
+
import styles from "./button.module.scss";
|
|
7
|
+
|
|
8
|
+
export const BUTTON_VARIANT = {
|
|
9
|
+
...VARIANT,
|
|
10
|
+
DESTRUCTIVE: "destructive",
|
|
11
|
+
DESTRUCTIVE_NEGATIVE: "destructive-negative",
|
|
12
|
+
TERTIARY_PURPLE: "tertiary-purple",
|
|
13
|
+
TERTIARY_PURPLE_NEGATVIE: "tertiary-purple-negative",
|
|
14
|
+
TEXT: "text",
|
|
15
|
+
TEXT_NEGATIVE: "text-negative",
|
|
16
|
+
} as const;
|
|
17
|
+
|
|
18
|
+
export const buttonVariants = Object.values(BUTTON_VARIANT);
|
|
19
|
+
export type ButtonVariant = (typeof BUTTON_VARIANT)[keyof typeof BUTTON_VARIANT];
|
|
20
|
+
|
|
21
|
+
const rootClassName = "purpur-button";
|
|
22
|
+
|
|
23
|
+
export type ButtonProps = ActionProps<ButtonVariant> &
|
|
24
|
+
ButtonHTMLAttributes<HTMLButtonElement> & { loading?: boolean };
|
|
25
|
+
|
|
26
|
+
const ButtonComponent = (
|
|
27
|
+
{
|
|
28
|
+
children,
|
|
29
|
+
className,
|
|
30
|
+
["data-testid"]: dataTestid,
|
|
31
|
+
disabled = false,
|
|
32
|
+
fullWidth = false,
|
|
33
|
+
iconOnly,
|
|
34
|
+
loading = false,
|
|
35
|
+
onClick,
|
|
36
|
+
size = BUTTON_SIZE.MD,
|
|
37
|
+
variant,
|
|
38
|
+
type = "button",
|
|
39
|
+
...props
|
|
40
|
+
}: ButtonProps,
|
|
41
|
+
ref: ForwardedRef<HTMLButtonElement>
|
|
42
|
+
) => {
|
|
43
|
+
if (iconOnly && variant === "destructive") {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const classes = c(
|
|
48
|
+
[
|
|
49
|
+
styles[rootClassName],
|
|
50
|
+
styles[`${rootClassName}--${variant}`],
|
|
51
|
+
styles[`${rootClassName}--${size}`],
|
|
52
|
+
],
|
|
53
|
+
{
|
|
54
|
+
[styles[`${rootClassName}--icon-only`]]: iconOnly,
|
|
55
|
+
[styles[`${rootClassName}--negative`]]: variant.endsWith("negative"),
|
|
56
|
+
[styles[`${rootClassName}--full-width`]]: fullWidth,
|
|
57
|
+
[styles[`${rootClassName}--disabled`]]: disabled || loading,
|
|
58
|
+
},
|
|
59
|
+
className
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
const handleClick = (e: MouseEvent<HTMLButtonElement>) => {
|
|
63
|
+
if (disabled || loading) {
|
|
64
|
+
e.preventDefault();
|
|
65
|
+
} else if (onClick) {
|
|
66
|
+
onClick(e);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const getSpinnerVariant = () => (variant.endsWith("negative") ? "negative-disabled" : "disabled");
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
<button
|
|
74
|
+
className={classes}
|
|
75
|
+
data-testid={dataTestid}
|
|
76
|
+
// eslint-disable-next-line react/button-has-type
|
|
77
|
+
type={type}
|
|
78
|
+
ref={ref}
|
|
79
|
+
aria-disabled={props["aria-disabled"] || disabled || loading}
|
|
80
|
+
onClick={handleClick}
|
|
81
|
+
{...props}
|
|
82
|
+
>
|
|
83
|
+
{loading && (
|
|
84
|
+
<Spinner size={size === BUTTON_SIZE.LG ? "xs" : "xxs"} variant={getSpinnerVariant()} />
|
|
85
|
+
)}{" "}
|
|
86
|
+
{children}
|
|
87
|
+
</button>
|
|
88
|
+
);
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export const Button = forwardRef(ButtonComponent);
|
|
92
|
+
Button.displayName = "Button";
|
package/src/global.d.ts
ADDED