@purpurds/link 5.2.0 → 5.4.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/link.cjs.js CHANGED
@@ -1,6 +1,6 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _=require("react/jsx-runtime");function k(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var c={exports:{}};/*!
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react/jsx-runtime");function b(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}var v={exports:{}};/*!
2
2
  Copyright (c) 2018 Jed Watson.
3
3
  Licensed under the MIT License (MIT), see
4
4
  http://jedwatson.github.io/classnames
5
- */(function(e){(function(){var u={}.hasOwnProperty;function i(){for(var t="",n=0;n<arguments.length;n++){var r=arguments[n];r&&(t=p(t,a.call(this,r)))}return t}function a(t){if(typeof t=="string"||typeof t=="number")return this&&this[t]||t;if(typeof t!="object")return"";if(Array.isArray(t))return i.apply(this,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes("[native code]"))return t.toString();var n="";for(var r in t)u.call(t,r)&&t[r]&&(n=p(n,this&&this[r]||r));return n}function p(t,n){return n?t?t+" "+n:t+n:t}e.exports?(i.default=i,e.exports=i):window.classNames=i})()})(c);var v=c.exports;const g=k(v),b={"purpur-link":"_purpur-link_5epw4_1","purpur-link--text":"_purpur-link--text_5epw4_15","purpur-link--standalone":"_purpur-link--standalone_5epw4_15","purpur-link--navigation":"_purpur-link--navigation_5epw4_15","purpur-link--disable-visited":"_purpur-link--disable-visited_5epw4_25","purpur-link--text-negative":"_purpur-link--text-negative_5epw4_28","purpur-link--standalone-negative":"_purpur-link--standalone-negative_5epw4_28","purpur-link--navigation-negative":"_purpur-link--navigation-negative_5epw4_28","purpur-link--ensure-target-area":"_purpur-link--ensure-target-area_5epw4_67","purpur-link--silent":"_purpur-link--silent_5epw4_73"},w=g.bind(b),s="purpur-link",d={TEXT:"text",STANDALONE:"standalone",NAVIGATION:"navigation"},N=Object.values(d),x=({["data-testid"]:e,children:u,className:i,disableVisited:a,ensureTargetArea:p,href:t,negative:n=!1,silent:r,target:f,variant:l,...o})=>_.jsx("span",{className:w([i,s,`${s}--${n?`${l}-negative`:l}`,{[`${s}--silent`]:r,[`${s}--negative`]:n,[`${s}--disable-visited`]:a??r,[`${s}--ensure-target-area`]:p}]),"data-testid":e,...o,children:t?_.jsx("a",{href:t,target:f,...o,children:u}):u});exports.LINK_VARIANT=d;exports.Link=x;exports.linkVariants=N;
5
+ */(function(r){(function(){var u={}.hasOwnProperty;function i(){for(var t="",n=0;n<arguments.length;n++){var e=arguments[n];e&&(t=a(t,o.call(this,e)))}return t}function o(t){if(typeof t=="string"||typeof t=="number")return this&&this[t]||t;if(typeof t!="object")return"";if(Array.isArray(t))return i.apply(this,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes("[native code]"))return t.toString();var n="";for(var e in t)u.call(t,e)&&t[e]&&(n=a(n,this&&this[e]||e));return n}function a(t,n){return n?t?t+" "+n:t+n:t}r.exports?(i.default=i,r.exports=i):window.classNames=i})()})(v);var k=v.exports;const y=b(k),g={"purpur-link":"_purpur-link_vyo3b_1","purpur-link--text":"_purpur-link--text_vyo3b_15","purpur-link--standalone":"_purpur-link--standalone_vyo3b_15","purpur-link--navigation":"_purpur-link--navigation_vyo3b_15","purpur-link--disable-visited":"_purpur-link--disable-visited_vyo3b_26","purpur-link--text-negative":"_purpur-link--text-negative_vyo3b_29","purpur-link--standalone-negative":"_purpur-link--standalone-negative_vyo3b_29","purpur-link--navigation-negative":"_purpur-link--navigation-negative_vyo3b_29","purpur-link--ensure-target-area":"_purpur-link--ensure-target-area_vyo3b_68","purpur-link--silent":"_purpur-link--silent_vyo3b_74"},N=y.bind(g),s="purpur-link",d={TEXT:"text",STANDALONE:"standalone",NAVIGATION:"navigation"},x=Object.values(d),A=({["data-testid"]:r,children:u,className:i,disableVisited:o,ensureTargetArea:a,href:t,negative:n=!1,rel:e,silent:p,target:f,variant:l,..._})=>c.jsx("span",{className:N([i,s,`${s}--${n?`${l}-negative`:l}`,{[`${s}--silent`]:p,[`${s}--negative`]:n,[`${s}--disable-visited`]:o??p,[`${s}--ensure-target-area`]:a}]),"data-testid":r,..._,children:t?c.jsx("a",{href:t,target:f,rel:e,..._,children:u}):u});exports.LINK_VARIANT=d;exports.Link=A;exports.linkVariants=x;
6
6
  //# sourceMappingURL=link.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"link.cjs.js","sources":["../../../common/temp/node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/bind.js","../src/link.tsx"],"sourcesContent":["/*!\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.call(this, 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 this && this[arg] || 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(this, 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, this && this[key] || 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, { ReactNode } from \"react\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./link.module.scss\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-link\";\n\nexport const LINK_VARIANT = {\n TEXT: \"text\",\n STANDALONE: \"standalone\",\n NAVIGATION: \"navigation\",\n} as const;\n\nexport const linkVariants = Object.values(LINK_VARIANT);\nexport type LinkVariant = (typeof LINK_VARIANT)[keyof typeof LINK_VARIANT];\n\nexport type LinkProps = {\n children: ReactNode;\n className?: string;\n [\"data-testid\"]?: string;\n /** Disables visited styling */\n disableVisited?: boolean;\n /**\n * This sets a minimum size on the targetable area of the link. Please note\n * it also changes display value to flex, meaning its container will behave\n * like a block element. You can wrap this component in a flex container\n * for additional layout control.\n */\n ensureTargetArea?: boolean;\n /**\n * This will wrap children in a <a/> tag and set the href accordingly\n */\n href?: string;\n negative?: boolean;\n /**\n * A silent link is intended to wrap an element\n * to make it a link but not add any styling\n * except for the pointer cursor and focus style.\n */\n silent?: boolean;\n /**\n * if target and href is specified, target will be added to the <a/> tag\n */\n target?: React.HTMLAttributeAnchorTarget;\n /**\n * Determines if link is displayed on its own line\n * (standalone) or within the current text content\n * (text).\n */\n variant: LinkVariant;\n};\n\nexport const Link = ({\n [\"data-testid\"]: dataTestid,\n children,\n className,\n disableVisited,\n ensureTargetArea,\n href,\n negative = false,\n silent,\n target,\n variant,\n ...props\n}: LinkProps) => (\n <span\n className={cx([\n className,\n rootClassName,\n `${rootClassName}--${negative ? `${variant}-negative` : variant}`,\n {\n [`${rootClassName}--silent`]: silent,\n [`${rootClassName}--negative`]: negative,\n [`${rootClassName}--disable-visited`]: disableVisited ?? silent,\n [`${rootClassName}--ensure-target-area`]: ensureTargetArea,\n },\n ])}\n data-testid={dataTestid}\n {...props}\n >\n {href ? (\n <a href={href} target={target} {...props}>\n {children}\n </a>\n ) : (\n children\n )}\n </span>\n);\n"],"names":["hasOwn","classNames","classes","i","arg","appendClass","parseValue","key","value","newClass","module","cx","c","styles","rootClassName","LINK_VARIANT","linkVariants","Link","dataTestid","children","className","disableVisited","ensureTargetArea","href","negative","silent","target","variant","props","jsx"],"mappings":";;;;gBAOC,UAAY,CAGZ,IAAIA,EAAS,CAAE,EAAC,eAEhB,SAASC,GAAc,CAGtB,QAFIC,EAAU,GAELC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAC1C,IAAIC,EAAM,UAAUD,CAAC,EACjBC,IACHF,EAAUG,EAAYH,EAASI,EAAW,KAAK,KAAMF,CAAG,CAAC,EAE1D,CAED,OAAOF,CACP,CAED,SAASI,EAAYF,EAAK,CACzB,GAAI,OAAOA,GAAQ,UAAY,OAAOA,GAAQ,SAC7C,OAAO,MAAQ,KAAKA,CAAG,GAAKA,EAG7B,GAAI,OAAOA,GAAQ,SAClB,MAAO,GAGR,GAAI,MAAM,QAAQA,CAAG,EACpB,OAAOH,EAAW,MAAM,KAAMG,CAAG,EAGlC,GAAIA,EAAI,WAAa,OAAO,UAAU,UAAY,CAACA,EAAI,SAAS,SAAQ,EAAG,SAAS,eAAe,EAClG,OAAOA,EAAI,WAGZ,IAAIF,EAAU,GAEd,QAASK,KAAOH,EACXJ,EAAO,KAAKI,EAAKG,CAAG,GAAKH,EAAIG,CAAG,IACnCL,EAAUG,EAAYH,EAAS,MAAQ,KAAKK,CAAG,GAAKA,CAAG,GAIzD,OAAOL,CACP,CAED,SAASG,EAAaG,EAAOC,EAAU,CACtC,OAAKA,EAIDD,EACIA,EAAQ,IAAMC,EAGfD,EAAQC,EAPPD,CAQR,CAEoCE,EAAO,SAC3CT,EAAW,QAAUA,EACrBS,EAAA,QAAiBT,GAOjB,OAAO,WAAaA,CAEtB,8qBCvEMU,EAAKC,EAAE,KAAKC,CAAM,EAClBC,EAAgB,cAETC,EAAe,CAC1B,KAAM,OACN,WAAY,aACZ,WAAY,YACd,EAEaC,EAAe,OAAO,OAAOD,CAAY,EAuCzCE,EAAO,CAAC,CACnB,CAAC,eAAgBC,EACjB,SAAAC,EACA,UAAAC,EACA,eAAAC,EACA,iBAAAC,EACA,KAAAC,EACA,SAAAC,EAAW,GACX,OAAAC,EACA,OAAAC,EACA,QAAAC,EACA,GAAGC,CACL,IACEC,EAAA,IAAC,OAAA,CACC,UAAWlB,EAAG,CACZS,EACAN,EACA,GAAGA,CAAa,KAAKU,EAAW,GAAGG,CAAO,YAAcA,CAAO,GAC/D,CACE,CAAC,GAAGb,CAAa,UAAU,EAAGW,EAC9B,CAAC,GAAGX,CAAa,YAAY,EAAGU,EAChC,CAAC,GAAGV,CAAa,mBAAmB,EAAGO,GAAkBI,EACzD,CAAC,GAAGX,CAAa,sBAAsB,EAAGQ,CAC5C,CAAA,CACD,EACD,cAAaJ,EACZ,GAAGU,EAEH,SAAAL,QACE,IAAE,CAAA,KAAAA,EAAY,OAAAG,EAAiB,GAAGE,EAChC,SAAAT,CACH,CAAA,EAEAA,CAAA,CAEJ","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"link.cjs.js","sources":["../../../common/temp/node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/bind.js","../src/link.tsx"],"sourcesContent":["/*!\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.call(this, 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 this && this[arg] || 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(this, 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, this && this[key] || 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, { ReactNode } from \"react\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./link.module.scss\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-link\";\n\nexport const LINK_VARIANT = {\n TEXT: \"text\",\n STANDALONE: \"standalone\",\n NAVIGATION: \"navigation\",\n} as const;\n\nexport const linkVariants = Object.values(LINK_VARIANT);\nexport type LinkVariant = (typeof LINK_VARIANT)[keyof typeof LINK_VARIANT];\n\nexport type LinkProps = {\n children: ReactNode;\n className?: string;\n [\"data-testid\"]?: string;\n /** Disables visited styling */\n disableVisited?: boolean;\n /**\n * This sets a minimum size on the targetable area of the link. Please note\n * it also changes display value to flex, meaning its container will behave\n * like a block element. You can wrap this component in a flex container\n * for additional layout control.\n */\n ensureTargetArea?: boolean;\n /**\n * This will wrap children in an `<a/>` tag and set the `href` accordingly.\n */\n href?: string;\n negative?: boolean;\n /**\n * If both `rel` and `href` are specified, the `rel` attribute will be added to the `<a/>` tag.\n * The `rel` attribute specifies the relationship between the current document and the linked document.\n * Common values include \"noopener\", \"noreferrer\", \"nofollow\", and \"external\".\n */\n rel?: React.ComponentProps<\"a\">[\"rel\"];\n /**\n * A silent link is intended to wrap an element\n * to make it a link but not add any styling\n * except for the pointer cursor and focus style.\n */\n silent?: boolean;\n /**\n * If both `target` and `href` are specified, the `target` attribute will be added to the `<a/>` tag\n */\n target?: React.HTMLAttributeAnchorTarget;\n /**\n * Determines if link is displayed on its own line\n * (`\"standalone\"`) or within the current text content\n * (`\"text\"`).\n */\n variant: LinkVariant;\n};\n\nexport const Link = ({\n [\"data-testid\"]: dataTestid,\n children,\n className,\n disableVisited,\n ensureTargetArea,\n href,\n negative = false,\n rel,\n silent,\n target,\n variant,\n ...props\n}: LinkProps) => (\n <span\n className={cx([\n className,\n rootClassName,\n `${rootClassName}--${negative ? `${variant}-negative` : variant}`,\n {\n [`${rootClassName}--silent`]: silent,\n [`${rootClassName}--negative`]: negative,\n [`${rootClassName}--disable-visited`]: disableVisited ?? silent,\n [`${rootClassName}--ensure-target-area`]: ensureTargetArea,\n },\n ])}\n data-testid={dataTestid}\n {...props}\n >\n {href ? (\n <a href={href} target={target} rel={rel} {...props}>\n {children}\n </a>\n ) : (\n children\n )}\n </span>\n);\n"],"names":["hasOwn","classNames","classes","i","arg","appendClass","parseValue","key","value","newClass","module","cx","c","styles","rootClassName","LINK_VARIANT","linkVariants","Link","dataTestid","children","className","disableVisited","ensureTargetArea","href","negative","rel","silent","target","variant","props","jsx"],"mappings":";;;;gBAOC,UAAY,CAGZ,IAAIA,EAAS,CAAE,EAAC,eAEhB,SAASC,GAAc,CAGtB,QAFIC,EAAU,GAELC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAC1C,IAAIC,EAAM,UAAUD,CAAC,EACjBC,IACHF,EAAUG,EAAYH,EAASI,EAAW,KAAK,KAAMF,CAAG,CAAC,EAE1D,CAED,OAAOF,CACP,CAED,SAASI,EAAYF,EAAK,CACzB,GAAI,OAAOA,GAAQ,UAAY,OAAOA,GAAQ,SAC7C,OAAO,MAAQ,KAAKA,CAAG,GAAKA,EAG7B,GAAI,OAAOA,GAAQ,SAClB,MAAO,GAGR,GAAI,MAAM,QAAQA,CAAG,EACpB,OAAOH,EAAW,MAAM,KAAMG,CAAG,EAGlC,GAAIA,EAAI,WAAa,OAAO,UAAU,UAAY,CAACA,EAAI,SAAS,SAAQ,EAAG,SAAS,eAAe,EAClG,OAAOA,EAAI,WAGZ,IAAIF,EAAU,GAEd,QAASK,KAAOH,EACXJ,EAAO,KAAKI,EAAKG,CAAG,GAAKH,EAAIG,CAAG,IACnCL,EAAUG,EAAYH,EAAS,MAAQ,KAAKK,CAAG,GAAKA,CAAG,GAIzD,OAAOL,CACP,CAED,SAASG,EAAaG,EAAOC,EAAU,CACtC,OAAKA,EAIDD,EACIA,EAAQ,IAAMC,EAGfD,EAAQC,EAPPD,CAQR,CAEoCE,EAAO,SAC3CT,EAAW,QAAUA,EACrBS,EAAA,QAAiBT,GAOjB,OAAO,WAAaA,CAEtB,8qBCvEMU,EAAKC,EAAE,KAAKC,CAAM,EAClBC,EAAgB,cAETC,EAAe,CAC1B,KAAM,OACN,WAAY,aACZ,WAAY,YACd,EAEaC,EAAe,OAAO,OAAOD,CAAY,EA6CzCE,EAAO,CAAC,CACnB,CAAC,eAAgBC,EACjB,SAAAC,EACA,UAAAC,EACA,eAAAC,EACA,iBAAAC,EACA,KAAAC,EACA,SAAAC,EAAW,GACX,IAAAC,EACA,OAAAC,EACA,OAAAC,EACA,QAAAC,EACA,GAAGC,CACL,IACEC,EAAA,IAAC,OAAA,CACC,UAAWnB,EAAG,CACZS,EACAN,EACA,GAAGA,CAAa,KAAKU,EAAW,GAAGI,CAAO,YAAcA,CAAO,GAC/D,CACE,CAAC,GAAGd,CAAa,UAAU,EAAGY,EAC9B,CAAC,GAAGZ,CAAa,YAAY,EAAGU,EAChC,CAAC,GAAGV,CAAa,mBAAmB,EAAGO,GAAkBK,EACzD,CAAC,GAAGZ,CAAa,sBAAsB,EAAGQ,CAC5C,CAAA,CACD,EACD,cAAaJ,EACZ,GAAGW,EAEH,SAAAN,QACE,IAAE,CAAA,KAAAA,EAAY,OAAAI,EAAgB,IAAAF,EAAW,GAAGI,EAC1C,SAAAV,CAAA,CACH,EAEAA,CAAA,CAEJ","x_google_ignoreList":[0]}
package/dist/link.d.ts CHANGED
@@ -21,10 +21,16 @@ export type LinkProps = {
21
21
  */
22
22
  ensureTargetArea?: boolean;
23
23
  /**
24
- * This will wrap children in a <a/> tag and set the href accordingly
24
+ * This will wrap children in an `<a/>` tag and set the `href` accordingly.
25
25
  */
26
26
  href?: string;
27
27
  negative?: boolean;
28
+ /**
29
+ * If both `rel` and `href` are specified, the `rel` attribute will be added to the `<a/>` tag.
30
+ * The `rel` attribute specifies the relationship between the current document and the linked document.
31
+ * Common values include "noopener", "noreferrer", "nofollow", and "external".
32
+ */
33
+ rel?: React.ComponentProps<"a">["rel"];
28
34
  /**
29
35
  * A silent link is intended to wrap an element
30
36
  * to make it a link but not add any styling
@@ -32,15 +38,15 @@ export type LinkProps = {
32
38
  */
33
39
  silent?: boolean;
34
40
  /**
35
- * if target and href is specified, target will be added to the <a/> tag
41
+ * If both `target` and `href` are specified, the `target` attribute will be added to the `<a/>` tag
36
42
  */
37
43
  target?: React.HTMLAttributeAnchorTarget;
38
44
  /**
39
45
  * Determines if link is displayed on its own line
40
- * (standalone) or within the current text content
41
- * (text).
46
+ * (`"standalone"`) or within the current text content
47
+ * (`"text"`).
42
48
  */
43
49
  variant: LinkVariant;
44
50
  };
45
- export declare const Link: ({ ["data-testid"]: dataTestid, children, className, disableVisited, ensureTargetArea, href, negative, silent, target, variant, ...props }: LinkProps) => React.JSX.Element;
51
+ export declare const Link: ({ ["data-testid"]: dataTestid, children, className, disableVisited, ensureTargetArea, href, negative, rel, silent, target, variant, ...props }: LinkProps) => React.JSX.Element;
46
52
  //# sourceMappingURL=link.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../src/link.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQzC,eAAO,MAAM,YAAY;;;;CAIf,CAAC;AAEX,eAAO,MAAM,YAAY,0CAA8B,CAAC;AACxD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAE3E,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC;IACzB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,yBAAyB,CAAC;IACzC;;;;OAIG;IACH,OAAO,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,IAAI,8IAYd,SAAS,sBAwBX,CAAC"}
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../src/link.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQzC,eAAO,MAAM,YAAY;;;;CAIf,CAAC;AAEX,eAAO,MAAM,YAAY,0CAA8B,CAAC;AACxD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAE3E,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC;IACzB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,GAAG,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACvC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,yBAAyB,CAAC;IACzC;;;;OAIG;IACH,OAAO,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,IAAI,mJAad,SAAS,sBAwBX,CAAC"}
package/dist/link.es.js CHANGED
@@ -1,6 +1,6 @@
1
- import { jsx as _ } from "react/jsx-runtime";
2
- function f(e) {
3
- return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e;
1
+ import { jsx as v } from "react/jsx-runtime";
2
+ function f(r) {
3
+ return r && r.__esModule && Object.prototype.hasOwnProperty.call(r, "default") ? r.default : r;
4
4
  }
5
5
  var c = { exports: {} };
6
6
  /*!
@@ -8,17 +8,17 @@ var c = { exports: {} };
8
8
  Licensed under the MIT License (MIT), see
9
9
  http://jedwatson.github.io/classnames
10
10
  */
11
- (function(e) {
11
+ (function(r) {
12
12
  (function() {
13
- var s = {}.hasOwnProperty;
13
+ var u = {}.hasOwnProperty;
14
14
  function i() {
15
15
  for (var t = "", n = 0; n < arguments.length; n++) {
16
- var r = arguments[n];
17
- r && (t = u(t, a.call(this, r)));
16
+ var e = arguments[n];
17
+ e && (t = a(t, o.call(this, e)));
18
18
  }
19
19
  return t;
20
20
  }
21
- function a(t) {
21
+ function o(t) {
22
22
  if (typeof t == "string" || typeof t == "number")
23
23
  return this && this[t] || t;
24
24
  if (typeof t != "object")
@@ -28,66 +28,67 @@ var c = { exports: {} };
28
28
  if (t.toString !== Object.prototype.toString && !t.toString.toString().includes("[native code]"))
29
29
  return t.toString();
30
30
  var n = "";
31
- for (var r in t)
32
- s.call(t, r) && t[r] && (n = u(n, this && this[r] || r));
31
+ for (var e in t)
32
+ u.call(t, e) && t[e] && (n = a(n, this && this[e] || e));
33
33
  return n;
34
34
  }
35
- function u(t, n) {
35
+ function a(t, n) {
36
36
  return n ? t ? t + " " + n : t + n : t;
37
37
  }
38
- e.exports ? (i.default = i, e.exports = i) : window.classNames = i;
38
+ r.exports ? (i.default = i, r.exports = i) : window.classNames = i;
39
39
  })();
40
40
  })(c);
41
- var v = c.exports;
42
- const k = /* @__PURE__ */ f(v), w = {
43
- "purpur-link": "_purpur-link_5epw4_1",
44
- "purpur-link--text": "_purpur-link--text_5epw4_15",
45
- "purpur-link--standalone": "_purpur-link--standalone_5epw4_15",
46
- "purpur-link--navigation": "_purpur-link--navigation_5epw4_15",
47
- "purpur-link--disable-visited": "_purpur-link--disable-visited_5epw4_25",
48
- "purpur-link--text-negative": "_purpur-link--text-negative_5epw4_28",
49
- "purpur-link--standalone-negative": "_purpur-link--standalone-negative_5epw4_28",
50
- "purpur-link--navigation-negative": "_purpur-link--navigation-negative_5epw4_28",
51
- "purpur-link--ensure-target-area": "_purpur-link--ensure-target-area_5epw4_67",
52
- "purpur-link--silent": "_purpur-link--silent_5epw4_73"
53
- }, g = k.bind(w), p = "purpur-link", b = {
41
+ var b = c.exports;
42
+ const k = /* @__PURE__ */ f(b), y = {
43
+ "purpur-link": "_purpur-link_vyo3b_1",
44
+ "purpur-link--text": "_purpur-link--text_vyo3b_15",
45
+ "purpur-link--standalone": "_purpur-link--standalone_vyo3b_15",
46
+ "purpur-link--navigation": "_purpur-link--navigation_vyo3b_15",
47
+ "purpur-link--disable-visited": "_purpur-link--disable-visited_vyo3b_26",
48
+ "purpur-link--text-negative": "_purpur-link--text-negative_vyo3b_29",
49
+ "purpur-link--standalone-negative": "_purpur-link--standalone-negative_vyo3b_29",
50
+ "purpur-link--navigation-negative": "_purpur-link--navigation-negative_vyo3b_29",
51
+ "purpur-link--ensure-target-area": "_purpur-link--ensure-target-area_vyo3b_68",
52
+ "purpur-link--silent": "_purpur-link--silent_vyo3b_74"
53
+ }, g = k.bind(y), s = "purpur-link", x = {
54
54
  TEXT: "text",
55
55
  STANDALONE: "standalone",
56
56
  NAVIGATION: "navigation"
57
- }, N = Object.values(b), h = ({
58
- ["data-testid"]: e,
59
- children: s,
57
+ }, h = Object.values(x), m = ({
58
+ ["data-testid"]: r,
59
+ children: u,
60
60
  className: i,
61
- disableVisited: a,
62
- ensureTargetArea: u,
61
+ disableVisited: o,
62
+ ensureTargetArea: a,
63
63
  href: t,
64
64
  negative: n = !1,
65
- silent: r,
65
+ rel: e,
66
+ silent: p,
66
67
  target: d,
67
- variant: o,
68
- ...l
69
- }) => /* @__PURE__ */ _(
68
+ variant: l,
69
+ ..._
70
+ }) => /* @__PURE__ */ v(
70
71
  "span",
71
72
  {
72
73
  className: g([
73
74
  i,
74
- p,
75
- `${p}--${n ? `${o}-negative` : o}`,
75
+ s,
76
+ `${s}--${n ? `${l}-negative` : l}`,
76
77
  {
77
- [`${p}--silent`]: r,
78
- [`${p}--negative`]: n,
79
- [`${p}--disable-visited`]: a ?? r,
80
- [`${p}--ensure-target-area`]: u
78
+ [`${s}--silent`]: p,
79
+ [`${s}--negative`]: n,
80
+ [`${s}--disable-visited`]: o ?? p,
81
+ [`${s}--ensure-target-area`]: a
81
82
  }
82
83
  ]),
83
- "data-testid": e,
84
- ...l,
85
- children: t ? /* @__PURE__ */ _("a", { href: t, target: d, ...l, children: s }) : s
84
+ "data-testid": r,
85
+ ..._,
86
+ children: t ? /* @__PURE__ */ v("a", { href: t, target: d, rel: e, ..._, children: u }) : u
86
87
  }
87
88
  );
88
89
  export {
89
- b as LINK_VARIANT,
90
- h as Link,
91
- N as linkVariants
90
+ x as LINK_VARIANT,
91
+ m as Link,
92
+ h as linkVariants
92
93
  };
93
94
  //# sourceMappingURL=link.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"link.es.js","sources":["../../../common/temp/node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/bind.js","../src/link.tsx"],"sourcesContent":["/*!\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.call(this, 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 this && this[arg] || 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(this, 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, this && this[key] || 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, { ReactNode } from \"react\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./link.module.scss\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-link\";\n\nexport const LINK_VARIANT = {\n TEXT: \"text\",\n STANDALONE: \"standalone\",\n NAVIGATION: \"navigation\",\n} as const;\n\nexport const linkVariants = Object.values(LINK_VARIANT);\nexport type LinkVariant = (typeof LINK_VARIANT)[keyof typeof LINK_VARIANT];\n\nexport type LinkProps = {\n children: ReactNode;\n className?: string;\n [\"data-testid\"]?: string;\n /** Disables visited styling */\n disableVisited?: boolean;\n /**\n * This sets a minimum size on the targetable area of the link. Please note\n * it also changes display value to flex, meaning its container will behave\n * like a block element. You can wrap this component in a flex container\n * for additional layout control.\n */\n ensureTargetArea?: boolean;\n /**\n * This will wrap children in a <a/> tag and set the href accordingly\n */\n href?: string;\n negative?: boolean;\n /**\n * A silent link is intended to wrap an element\n * to make it a link but not add any styling\n * except for the pointer cursor and focus style.\n */\n silent?: boolean;\n /**\n * if target and href is specified, target will be added to the <a/> tag\n */\n target?: React.HTMLAttributeAnchorTarget;\n /**\n * Determines if link is displayed on its own line\n * (standalone) or within the current text content\n * (text).\n */\n variant: LinkVariant;\n};\n\nexport const Link = ({\n [\"data-testid\"]: dataTestid,\n children,\n className,\n disableVisited,\n ensureTargetArea,\n href,\n negative = false,\n silent,\n target,\n variant,\n ...props\n}: LinkProps) => (\n <span\n className={cx([\n className,\n rootClassName,\n `${rootClassName}--${negative ? `${variant}-negative` : variant}`,\n {\n [`${rootClassName}--silent`]: silent,\n [`${rootClassName}--negative`]: negative,\n [`${rootClassName}--disable-visited`]: disableVisited ?? silent,\n [`${rootClassName}--ensure-target-area`]: ensureTargetArea,\n },\n ])}\n data-testid={dataTestid}\n {...props}\n >\n {href ? (\n <a href={href} target={target} {...props}>\n {children}\n </a>\n ) : (\n children\n )}\n </span>\n);\n"],"names":["hasOwn","classNames","classes","i","arg","appendClass","parseValue","key","value","newClass","module","cx","c","styles","rootClassName","LINK_VARIANT","linkVariants","Link","dataTestid","children","className","disableVisited","ensureTargetArea","href","negative","silent","target","variant","props","jsx"],"mappings":";;;;;;;;;;;AAOA,GAAC,WAAY;AAGZ,QAAIA,IAAS,CAAE,EAAC;AAEhB,aAASC,IAAc;AAGtB,eAFIC,IAAU,IAELC,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AAC1C,YAAIC,IAAM,UAAUD,CAAC;AACrB,QAAIC,MACHF,IAAUG,EAAYH,GAASI,EAAW,KAAK,MAAMF,CAAG,CAAC;AAAA,MAE1D;AAED,aAAOF;AAAA,IACP;AAED,aAASI,EAAYF,GAAK;AACzB,UAAI,OAAOA,KAAQ,YAAY,OAAOA,KAAQ;AAC7C,eAAO,QAAQ,KAAKA,CAAG,KAAKA;AAG7B,UAAI,OAAOA,KAAQ;AAClB,eAAO;AAGR,UAAI,MAAM,QAAQA,CAAG;AACpB,eAAOH,EAAW,MAAM,MAAMG,CAAG;AAGlC,UAAIA,EAAI,aAAa,OAAO,UAAU,YAAY,CAACA,EAAI,SAAS,SAAQ,EAAG,SAAS,eAAe;AAClG,eAAOA,EAAI;AAGZ,UAAIF,IAAU;AAEd,eAASK,KAAOH;AACf,QAAIJ,EAAO,KAAKI,GAAKG,CAAG,KAAKH,EAAIG,CAAG,MACnCL,IAAUG,EAAYH,GAAS,QAAQ,KAAKK,CAAG,KAAKA,CAAG;AAIzD,aAAOL;AAAA,IACP;AAED,aAASG,EAAaG,GAAOC,GAAU;AACtC,aAAKA,IAIDD,IACIA,IAAQ,MAAMC,IAGfD,IAAQC,IAPPD;AAAA,IAQR;AAED,IAAqCE,EAAO,WAC3CT,EAAW,UAAUA,GACrBS,EAAA,UAAiBT,KAOjB,OAAO,aAAaA;AAAA,EAEtB;;;;;;;;;;;;;;GCvEMU,IAAKC,EAAE,KAAKC,CAAM,GAClBC,IAAgB,eAETC,IAAe;AAAA,EAC1B,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,YAAY;AACd,GAEaC,IAAe,OAAO,OAAOD,CAAY,GAuCzCE,IAAO,CAAC;AAAA,EACnB,CAAC,gBAAgBC;AAAA,EACjB,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,GAAGC;AACL,MACE,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWlB,EAAG;AAAA,MACZS;AAAA,MACAN;AAAA,MACA,GAAGA,CAAa,KAAKU,IAAW,GAAGG,CAAO,cAAcA,CAAO;AAAA,MAC/D;AAAA,QACE,CAAC,GAAGb,CAAa,UAAU,GAAGW;AAAA,QAC9B,CAAC,GAAGX,CAAa,YAAY,GAAGU;AAAA,QAChC,CAAC,GAAGV,CAAa,mBAAmB,GAAGO,KAAkBI;AAAA,QACzD,CAAC,GAAGX,CAAa,sBAAsB,GAAGQ;AAAA,MAC5C;AAAA,IAAA,CACD;AAAA,IACD,eAAaJ;AAAA,IACZ,GAAGU;AAAA,IAEH,UAAAL,sBACE,KAAE,EAAA,MAAAA,GAAY,QAAAG,GAAiB,GAAGE,GAChC,UAAAT,EACH,CAAA,IAEAA;AAAA,EAAA;AAEJ;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"link.es.js","sources":["../../../common/temp/node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/bind.js","../src/link.tsx"],"sourcesContent":["/*!\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.call(this, 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 this && this[arg] || 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(this, 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, this && this[key] || 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, { ReactNode } from \"react\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./link.module.scss\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-link\";\n\nexport const LINK_VARIANT = {\n TEXT: \"text\",\n STANDALONE: \"standalone\",\n NAVIGATION: \"navigation\",\n} as const;\n\nexport const linkVariants = Object.values(LINK_VARIANT);\nexport type LinkVariant = (typeof LINK_VARIANT)[keyof typeof LINK_VARIANT];\n\nexport type LinkProps = {\n children: ReactNode;\n className?: string;\n [\"data-testid\"]?: string;\n /** Disables visited styling */\n disableVisited?: boolean;\n /**\n * This sets a minimum size on the targetable area of the link. Please note\n * it also changes display value to flex, meaning its container will behave\n * like a block element. You can wrap this component in a flex container\n * for additional layout control.\n */\n ensureTargetArea?: boolean;\n /**\n * This will wrap children in an `<a/>` tag and set the `href` accordingly.\n */\n href?: string;\n negative?: boolean;\n /**\n * If both `rel` and `href` are specified, the `rel` attribute will be added to the `<a/>` tag.\n * The `rel` attribute specifies the relationship between the current document and the linked document.\n * Common values include \"noopener\", \"noreferrer\", \"nofollow\", and \"external\".\n */\n rel?: React.ComponentProps<\"a\">[\"rel\"];\n /**\n * A silent link is intended to wrap an element\n * to make it a link but not add any styling\n * except for the pointer cursor and focus style.\n */\n silent?: boolean;\n /**\n * If both `target` and `href` are specified, the `target` attribute will be added to the `<a/>` tag\n */\n target?: React.HTMLAttributeAnchorTarget;\n /**\n * Determines if link is displayed on its own line\n * (`\"standalone\"`) or within the current text content\n * (`\"text\"`).\n */\n variant: LinkVariant;\n};\n\nexport const Link = ({\n [\"data-testid\"]: dataTestid,\n children,\n className,\n disableVisited,\n ensureTargetArea,\n href,\n negative = false,\n rel,\n silent,\n target,\n variant,\n ...props\n}: LinkProps) => (\n <span\n className={cx([\n className,\n rootClassName,\n `${rootClassName}--${negative ? `${variant}-negative` : variant}`,\n {\n [`${rootClassName}--silent`]: silent,\n [`${rootClassName}--negative`]: negative,\n [`${rootClassName}--disable-visited`]: disableVisited ?? silent,\n [`${rootClassName}--ensure-target-area`]: ensureTargetArea,\n },\n ])}\n data-testid={dataTestid}\n {...props}\n >\n {href ? (\n <a href={href} target={target} rel={rel} {...props}>\n {children}\n </a>\n ) : (\n children\n )}\n </span>\n);\n"],"names":["hasOwn","classNames","classes","i","arg","appendClass","parseValue","key","value","newClass","module","cx","c","styles","rootClassName","LINK_VARIANT","linkVariants","Link","dataTestid","children","className","disableVisited","ensureTargetArea","href","negative","rel","silent","target","variant","props","jsx"],"mappings":";;;;;;;;;;;AAOA,GAAC,WAAY;AAGZ,QAAIA,IAAS,CAAE,EAAC;AAEhB,aAASC,IAAc;AAGtB,eAFIC,IAAU,IAELC,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AAC1C,YAAIC,IAAM,UAAUD,CAAC;AACrB,QAAIC,MACHF,IAAUG,EAAYH,GAASI,EAAW,KAAK,MAAMF,CAAG,CAAC;AAAA,MAE1D;AAED,aAAOF;AAAA,IACP;AAED,aAASI,EAAYF,GAAK;AACzB,UAAI,OAAOA,KAAQ,YAAY,OAAOA,KAAQ;AAC7C,eAAO,QAAQ,KAAKA,CAAG,KAAKA;AAG7B,UAAI,OAAOA,KAAQ;AAClB,eAAO;AAGR,UAAI,MAAM,QAAQA,CAAG;AACpB,eAAOH,EAAW,MAAM,MAAMG,CAAG;AAGlC,UAAIA,EAAI,aAAa,OAAO,UAAU,YAAY,CAACA,EAAI,SAAS,SAAQ,EAAG,SAAS,eAAe;AAClG,eAAOA,EAAI;AAGZ,UAAIF,IAAU;AAEd,eAASK,KAAOH;AACf,QAAIJ,EAAO,KAAKI,GAAKG,CAAG,KAAKH,EAAIG,CAAG,MACnCL,IAAUG,EAAYH,GAAS,QAAQ,KAAKK,CAAG,KAAKA,CAAG;AAIzD,aAAOL;AAAA,IACP;AAED,aAASG,EAAaG,GAAOC,GAAU;AACtC,aAAKA,IAIDD,IACIA,IAAQ,MAAMC,IAGfD,IAAQC,IAPPD;AAAA,IAQR;AAED,IAAqCE,EAAO,WAC3CT,EAAW,UAAUA,GACrBS,EAAA,UAAiBT,KAOjB,OAAO,aAAaA;AAAA,EAEtB;;;;;;;;;;;;;;GCvEMU,IAAKC,EAAE,KAAKC,CAAM,GAClBC,IAAgB,eAETC,IAAe;AAAA,EAC1B,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,YAAY;AACd,GAEaC,IAAe,OAAO,OAAOD,CAAY,GA6CzCE,IAAO,CAAC;AAAA,EACnB,CAAC,gBAAgBC;AAAA,EACjB,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,KAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,GAAGC;AACL,MACE,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWnB,EAAG;AAAA,MACZS;AAAA,MACAN;AAAA,MACA,GAAGA,CAAa,KAAKU,IAAW,GAAGI,CAAO,cAAcA,CAAO;AAAA,MAC/D;AAAA,QACE,CAAC,GAAGd,CAAa,UAAU,GAAGY;AAAA,QAC9B,CAAC,GAAGZ,CAAa,YAAY,GAAGU;AAAA,QAChC,CAAC,GAAGV,CAAa,mBAAmB,GAAGO,KAAkBK;AAAA,QACzD,CAAC,GAAGZ,CAAa,sBAAsB,GAAGQ;AAAA,MAC5C;AAAA,IAAA,CACD;AAAA,IACD,eAAaJ;AAAA,IACZ,GAAGW;AAAA,IAEH,UAAAN,sBACE,KAAE,EAAA,MAAAA,GAAY,QAAAI,GAAgB,KAAAF,GAAW,GAAGI,GAC1C,UAAAV,EAAA,CACH,IAEAA;AAAA,EAAA;AAEJ;","x_google_ignoreList":[0]}
package/dist/styles.css CHANGED
@@ -1 +1 @@
1
- ._purpur-link_5epw4_1 a{align-items:center;cursor:pointer;display:inline-flex;gap:var(--purpur-spacing-50);text-decoration:underline}._purpur-link_5epw4_1 a:focus,._purpur-link_5epw4_1 a:active{outline:solid var(--purpur-border-width-sm) var(--purpur-color-border-interactive-focus);outline-offset:var(--purpur-spacing-25)}._purpur-link_5epw4_1 a:focus:not(:focus-visible){outline:0}._purpur-link--text_5epw4_15 a,._purpur-link--standalone_5epw4_15 a,._purpur-link--navigation_5epw4_15 a{color:var(--purpur-color-text-interactive-primary)}._purpur-link--text_5epw4_15 a:hover,._purpur-link--standalone_5epw4_15 a:hover,._purpur-link--navigation_5epw4_15 a:hover{color:var(--purpur-color-text-interactive-primary-active);background-color:var(--purpur-color-background-interactive-transparent-hover)}._purpur-link--text_5epw4_15 a:active,._purpur-link--standalone_5epw4_15 a:active,._purpur-link--navigation_5epw4_15 a:active{background-color:var(--purpur-color-background-interactive-transparent-active)}._purpur-link--text_5epw4_15 a:visited:not(._purpur-link--disable-visited_5epw4_25>a),._purpur-link--standalone_5epw4_15 a:visited:not(._purpur-link--disable-visited_5epw4_25>a),._purpur-link--navigation_5epw4_15 a:visited:not(._purpur-link--disable-visited_5epw4_25>a){color:var(--purpur-color-text-interactive-primary-active)}._purpur-link--text-negative_5epw4_28 a,._purpur-link--standalone-negative_5epw4_28 a,._purpur-link--navigation-negative_5epw4_28 a{color:var(--purpur-color-text-interactive-primary-negative)}._purpur-link--text-negative_5epw4_28 a:hover,._purpur-link--standalone-negative_5epw4_28 a:hover,._purpur-link--navigation-negative_5epw4_28 a:hover{background-color:var(--purpur-color-background-interactive-transparent-negative-hover);color:var(--purpur-color-text-interactive-primary-negative)}._purpur-link--text-negative_5epw4_28 a:active,._purpur-link--standalone-negative_5epw4_28 a:active,._purpur-link--navigation-negative_5epw4_28 a:active{background-color:var(--purpur-color-background-interactive-transparent-negative-active);color:var(--purpur-color-text-interactive-primary-negative-active)}._purpur-link--text-negative_5epw4_28 a:visited:not(._purpur-link--disable-visited_5epw4_25>a),._purpur-link--standalone-negative_5epw4_28 a:visited:not(._purpur-link--disable-visited_5epw4_25>a),._purpur-link--navigation-negative_5epw4_28 a:visited:not(._purpur-link--disable-visited_5epw4_25>a){color:var(--purpur-color-text-interactive-primary-negative-active)}._purpur-link--standalone_5epw4_15,._purpur-link--standalone-negative_5epw4_28{display:inline-block}._purpur-link--standalone_5epw4_15 a,._purpur-link--standalone-negative_5epw4_28 a{font-family:var(--purpur-typography-family-default);font-weight:var(--purpur-typography-weight-normal);font-size:var(--purpur-typography-scale-100);line-height:var(--purpur-typography-line-height-loose);padding:var(--purpur-spacing-100) 0}._purpur-link--navigation_5epw4_15 a,._purpur-link--navigation-negative_5epw4_28 a{font-family:var(--purpur-typography-family-default);font-weight:var(--purpur-typography-weight-normal);font-size:var(--purpur-typography-scale-100);line-height:var(--purpur-typography-line-height-loose);align-items:center;background-color:var(--purpur-color-functional-transparent);display:flex;font-weight:var(--purpur-typography-weight-medium);text-decoration:none}._purpur-link--navigation_5epw4_15 a:active,._purpur-link--navigation_5epw4_15 a:hover,._purpur-link--navigation-negative_5epw4_28 a:active,._purpur-link--navigation-negative_5epw4_28 a:hover{background-color:var(--purpur-color-functional-transparent);text-decoration:underline}._purpur-link--ensure-target-area_5epw4_67,._purpur-link--ensure-target-area_5epw4_67 a{align-items:center;display:flex;min-height:var(--purpur-spacing-600);min-width:var(--purpur-spacing-600)}._purpur-link--silent_5epw4_73 a{background-color:inherit;color:inherit;height:100%;text-decoration:none}._purpur-link--silent_5epw4_73 a:hover,._purpur-link--silent_5epw4_73 a:focus,._purpur-link--silent_5epw4_73 a:active{background-color:inherit;color:inherit}._purpur-link--silent_5epw4_73 a:focus{outline:0}._purpur-link--silent_5epw4_73:is(._purpur-link--disable-visited_5epw4_25) a:visited{color:inherit}
1
+ ._purpur-link_vyo3b_1 a{align-items:center;cursor:pointer;display:inline-flex;gap:var(--purpur-spacing-50);text-decoration:underline}._purpur-link_vyo3b_1 a:focus,._purpur-link_vyo3b_1 a:active{outline:solid var(--purpur-border-width-sm) var(--purpur-color-border-interactive-focus);outline-offset:var(--purpur-spacing-25)}._purpur-link_vyo3b_1 a:focus:not(:focus-visible){outline:0}._purpur-link--text_vyo3b_15 a,._purpur-link--standalone_vyo3b_15 a,._purpur-link--navigation_vyo3b_15 a{color:var(--purpur-color-text-interactive-primary)}._purpur-link--text_vyo3b_15 a:hover,._purpur-link--standalone_vyo3b_15 a:hover,._purpur-link--navigation_vyo3b_15 a:hover{color:var(--purpur-color-text-interactive-primary-hover);background-color:var(--purpur-color-background-interactive-transparent-hover)}._purpur-link--text_vyo3b_15 a:active,._purpur-link--standalone_vyo3b_15 a:active,._purpur-link--navigation_vyo3b_15 a:active{color:var(--purpur-color-text-interactive-primary-active);background-color:var(--purpur-color-background-interactive-transparent-active)}._purpur-link--text_vyo3b_15 a:visited:not(._purpur-link--disable-visited_vyo3b_26>a),._purpur-link--standalone_vyo3b_15 a:visited:not(._purpur-link--disable-visited_vyo3b_26>a),._purpur-link--navigation_vyo3b_15 a:visited:not(._purpur-link--disable-visited_vyo3b_26>a){color:var(--purpur-color-text-interactive-primary-active)}._purpur-link--text-negative_vyo3b_29 a,._purpur-link--standalone-negative_vyo3b_29 a,._purpur-link--navigation-negative_vyo3b_29 a{color:var(--purpur-color-text-interactive-primary-negative)}._purpur-link--text-negative_vyo3b_29 a:hover,._purpur-link--standalone-negative_vyo3b_29 a:hover,._purpur-link--navigation-negative_vyo3b_29 a:hover{background-color:var(--purpur-color-background-interactive-transparent-negative-hover);color:var(--purpur-color-text-interactive-primary-negative-hover)}._purpur-link--text-negative_vyo3b_29 a:active,._purpur-link--standalone-negative_vyo3b_29 a:active,._purpur-link--navigation-negative_vyo3b_29 a:active{background-color:var(--purpur-color-background-interactive-transparent-negative-active);color:var(--purpur-color-text-interactive-primary-negative-active)}._purpur-link--text-negative_vyo3b_29 a:visited:not(._purpur-link--disable-visited_vyo3b_26>a),._purpur-link--standalone-negative_vyo3b_29 a:visited:not(._purpur-link--disable-visited_vyo3b_26>a),._purpur-link--navigation-negative_vyo3b_29 a:visited:not(._purpur-link--disable-visited_vyo3b_26>a){color:var(--purpur-color-text-interactive-primary-negative-active)}._purpur-link--standalone_vyo3b_15,._purpur-link--standalone-negative_vyo3b_29{display:inline-block}._purpur-link--standalone_vyo3b_15 a,._purpur-link--standalone-negative_vyo3b_29 a{font-family:var(--purpur-typography-family-default);font-weight:var(--purpur-typography-weight-normal);font-size:var(--purpur-typography-scale-100);line-height:var(--purpur-typography-line-height-loose);padding:var(--purpur-spacing-100) 0}._purpur-link--navigation_vyo3b_15 a,._purpur-link--navigation-negative_vyo3b_29 a{font-family:var(--purpur-typography-family-default);font-weight:var(--purpur-typography-weight-normal);font-size:var(--purpur-typography-scale-100);line-height:var(--purpur-typography-line-height-loose);align-items:center;background-color:var(--purpur-color-functional-transparent);display:flex;font-weight:var(--purpur-typography-weight-medium);text-decoration:none}._purpur-link--navigation_vyo3b_15 a:active,._purpur-link--navigation_vyo3b_15 a:hover,._purpur-link--navigation-negative_vyo3b_29 a:active,._purpur-link--navigation-negative_vyo3b_29 a:hover{background-color:var(--purpur-color-functional-transparent);text-decoration:underline}._purpur-link--ensure-target-area_vyo3b_68,._purpur-link--ensure-target-area_vyo3b_68 a{align-items:center;display:flex;min-height:var(--purpur-spacing-600);min-width:var(--purpur-spacing-600)}._purpur-link--silent_vyo3b_74 a{background-color:inherit;color:inherit;height:100%;text-decoration:none}._purpur-link--silent_vyo3b_74 a:hover,._purpur-link--silent_vyo3b_74 a:focus,._purpur-link--silent_vyo3b_74 a:active{background-color:inherit;color:inherit}._purpur-link--silent_vyo3b_74 a:focus{outline:0}._purpur-link--silent_vyo3b_74:is(._purpur-link--disable-visited_vyo3b_26) a:visited{color:inherit}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purpurds/link",
3
- "version": "5.2.0",
3
+ "version": "5.4.0",
4
4
  "license": "AGPL-3.0-only",
5
5
  "main": "./dist/link.cjs.js",
6
6
  "types": "./dist/link.d.ts",
@@ -15,8 +15,8 @@
15
15
  "source": "src/link.tsx",
16
16
  "dependencies": {
17
17
  "classnames": "~2.5.0",
18
- "@purpurds/paragraph": "5.2.0",
19
- "@purpurds/tokens": "5.2.0"
18
+ "@purpurds/tokens": "5.4.0",
19
+ "@purpurds/paragraph": "5.4.0"
20
20
  },
21
21
  "devDependencies": {
22
22
  "@rushstack/eslint-patch": "~1.10.0",
@@ -27,7 +27,7 @@
27
27
  "@testing-library/dom": "~9.3.3",
28
28
  "@testing-library/jest-dom": "~6.4.0",
29
29
  "@testing-library/react": "~14.3.0",
30
- "@types/node": "18",
30
+ "@types/node": "20.12.12",
31
31
  "@types/react-dom": "~18.3.0",
32
32
  "@types/react": "~18.3.0",
33
33
  "eslint-plugin-testing-library": "~6.2.0",
@@ -40,8 +40,8 @@
40
40
  "typescript": "~5.4.2",
41
41
  "vite": "~5.2.2",
42
42
  "vitest": "~1.5.0",
43
- "@purpurds/icon": "5.2.0",
44
- "@purpurds/component-rig": "1.0.0"
43
+ "@purpurds/component-rig": "1.0.0",
44
+ "@purpurds/icon": "5.4.0"
45
45
  },
46
46
  "scripts": {
47
47
  "build:dev": "vite",
@@ -1,7 +1,7 @@
1
1
  @import "@purpurds/paragraph/src/paragraph.mixins.scss";
2
2
 
3
3
  .purpur-link {
4
- $block: &;
4
+ $root: &;
5
5
 
6
6
  a {
7
7
  align-items: center;
@@ -28,15 +28,16 @@
28
28
  color: var(--purpur-color-text-interactive-primary);
29
29
 
30
30
  &:hover {
31
- color: var(--purpur-color-text-interactive-primary-active);
31
+ color: var(--purpur-color-text-interactive-primary-hover);
32
32
  background-color: var(--purpur-color-background-interactive-transparent-hover);
33
33
  }
34
34
 
35
35
  &:active {
36
+ color: var(--purpur-color-text-interactive-primary-active);
36
37
  background-color: var(--purpur-color-background-interactive-transparent-active);
37
38
  }
38
39
 
39
- &:visited:not(#{$block}--disable-visited > a) {
40
+ &:visited:not(#{$root}--disable-visited > a) {
40
41
  color: var(--purpur-color-text-interactive-primary-active);
41
42
  }
42
43
  }
@@ -50,7 +51,7 @@
50
51
 
51
52
  &:hover {
52
53
  background-color: var(--purpur-color-background-interactive-transparent-negative-hover);
53
- color: var(--purpur-color-text-interactive-primary-negative);
54
+ color: var(--purpur-color-text-interactive-primary-negative-hover);
54
55
  }
55
56
 
56
57
  &:active {
@@ -58,7 +59,7 @@
58
59
  color: var(--purpur-color-text-interactive-primary-negative-active);
59
60
  }
60
61
 
61
- &:visited:not(#{$block}--disable-visited > a) {
62
+ &:visited:not(#{$root}--disable-visited > a) {
62
63
  color: var(--purpur-color-text-interactive-primary-negative-active);
63
64
  }
64
65
  }
@@ -119,7 +120,7 @@
119
120
  outline: 0;
120
121
  }
121
122
 
122
- &:is(#{$block}--disable-visited) {
123
+ &:is(#{$root}--disable-visited) {
123
124
  a {
124
125
  &:visited {
125
126
  color: inherit;
@@ -127,4 +128,4 @@
127
128
  }
128
129
  }
129
130
  }
130
- }
131
+ }
@@ -24,7 +24,12 @@ const meta: Meta<typeof Link> = {
24
24
  },
25
25
  target: { control: { type: "text" } },
26
26
  },
27
- args: { negative: false },
27
+ args: {
28
+ negative: false,
29
+ href: "https://www.telia.se",
30
+ variant: linkVariants[0],
31
+ children: "Hello Link!",
32
+ },
28
33
  decorators: [
29
34
  (Story, context) => {
30
35
  const {
@@ -51,77 +56,25 @@ export default meta;
51
56
  type Story = StoryObj<typeof Link>;
52
57
 
53
58
  export const Showcase: Story = {
54
- args: {
55
- variant: linkVariants[0],
56
- children: "Hello Link!",
57
- },
58
- render: ({ children, variant, negative, ...args }) => (
59
- <div
60
- style={{
61
- backgroundColor: negative
62
- ? "var(--purpur-color-background-tone-on-tone-primary)"
63
- : undefined,
64
- padding: "var(--purpur-spacing-200)",
65
- }}
66
- >
67
- <Link variant={variant} negative={negative} {...args}>
68
- <a href="https://www.telia.se" target="_blank" rel="noreferrer">
69
- {children}
70
- </a>
71
- </Link>
72
- </div>
73
- ),
59
+ render: ({ children, ...args }) => <Link {...args}>{children}</Link>,
74
60
  };
75
61
 
76
62
  export const WithLeftIcon: Story = {
77
63
  name: "Link with left icon",
78
- args: {
79
- variant: linkVariants[0],
80
- children: "Hello Link!",
81
- },
82
- render: ({ children, variant, ...args }) => (
83
- <Link variant={variant} {...args}>
84
- <a href="https://www.telia.se" target="_blank" rel="noreferrer">
85
- <Icon svg={bloodPressure} size="xs" />
86
- {children}
87
- </a>
64
+ render: ({ children, ...args }) => (
65
+ <Link {...args}>
66
+ <Icon svg={bloodPressure} size="xs" />
67
+ {children}
88
68
  </Link>
89
69
  ),
90
70
  };
91
71
 
92
72
  export const WithRightIcon: Story = {
93
73
  name: "Link with right icon",
94
- args: {
95
- variant: linkVariants[0],
96
- children: "Hello Link!",
97
- },
98
- render: ({ children, variant, negative, ...args }) => (
99
- <div
100
- style={{
101
- backgroundColor: negative
102
- ? "var(--purpur-color-background-tone-on-tone-primary)"
103
- : undefined,
104
- }}
105
- >
106
- <Link variant={variant} negative={negative} {...args}>
107
- <a href="https://www.telia.se" target="_blank" rel="noreferrer">
108
- {children}
109
- <Icon svg={endUser} size="xs" />
110
- </a>
111
- </Link>
112
- </div>
113
- ),
114
- };
115
-
116
- export const WithoutAnchorAsChild: Story = {
117
- name: "Link without anchor tag as child",
118
- args: {
119
- variant: linkVariants[0],
120
- children: "Hello Link!",
121
- },
122
- render: ({ children, variant, ...args }) => (
123
- <Link variant={variant} href="https://www.telia.se" target="_blank" {...args}>
74
+ render: ({ children, ...args }) => (
75
+ <Link {...args}>
124
76
  {children}
77
+ <Icon svg={endUser} size="xs" />
125
78
  </Link>
126
79
  ),
127
80
  };
package/src/link.tsx CHANGED
@@ -29,10 +29,16 @@ export type LinkProps = {
29
29
  */
30
30
  ensureTargetArea?: boolean;
31
31
  /**
32
- * This will wrap children in a <a/> tag and set the href accordingly
32
+ * This will wrap children in an `<a/>` tag and set the `href` accordingly.
33
33
  */
34
34
  href?: string;
35
35
  negative?: boolean;
36
+ /**
37
+ * If both `rel` and `href` are specified, the `rel` attribute will be added to the `<a/>` tag.
38
+ * The `rel` attribute specifies the relationship between the current document and the linked document.
39
+ * Common values include "noopener", "noreferrer", "nofollow", and "external".
40
+ */
41
+ rel?: React.ComponentProps<"a">["rel"];
36
42
  /**
37
43
  * A silent link is intended to wrap an element
38
44
  * to make it a link but not add any styling
@@ -40,13 +46,13 @@ export type LinkProps = {
40
46
  */
41
47
  silent?: boolean;
42
48
  /**
43
- * if target and href is specified, target will be added to the <a/> tag
49
+ * If both `target` and `href` are specified, the `target` attribute will be added to the `<a/>` tag
44
50
  */
45
51
  target?: React.HTMLAttributeAnchorTarget;
46
52
  /**
47
53
  * Determines if link is displayed on its own line
48
- * (standalone) or within the current text content
49
- * (text).
54
+ * (`"standalone"`) or within the current text content
55
+ * (`"text"`).
50
56
  */
51
57
  variant: LinkVariant;
52
58
  };
@@ -59,6 +65,7 @@ export const Link = ({
59
65
  ensureTargetArea,
60
66
  href,
61
67
  negative = false,
68
+ rel,
62
69
  silent,
63
70
  target,
64
71
  variant,
@@ -80,7 +87,7 @@ export const Link = ({
80
87
  {...props}
81
88
  >
82
89
  {href ? (
83
- <a href={href} target={target} {...props}>
90
+ <a href={href} target={target} rel={rel} {...props}>
84
91
  {children}
85
92
  </a>
86
93
  ) : (