@justeattakeaway/pie-tag 0.11.1 → 0.13.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.
@@ -16,9 +16,9 @@
16
16
  "kind": "variable",
17
17
  "name": "variants",
18
18
  "type": {
19
- "text": "['neutral-alternative', 'neutral', 'outline', 'ghost', 'blue', 'green', 'yellow', 'red', 'brand', 'brand-03', 'brand-04', 'brand-06']"
19
+ "text": "['neutral-alternative', 'neutral', 'outline', 'ghost', 'information', 'success', 'error', 'brand-02', 'brand-03', 'brand-04', 'brand-05', 'brand-06']"
20
20
  },
21
- "default": "['neutral-alternative', 'neutral', 'outline', 'ghost', 'blue', 'green', 'yellow', 'red', 'brand', 'brand-03', 'brand-04', 'brand-06']"
21
+ "default": "['neutral-alternative', 'neutral', 'outline', 'ghost', 'information', 'success', 'error', 'brand-02', 'brand-03', 'brand-04', 'brand-05', 'brand-06']"
22
22
  },
23
23
  {
24
24
  "kind": "variable",
@@ -28,13 +28,21 @@
28
28
  },
29
29
  "default": "['small', 'large']"
30
30
  },
31
+ {
32
+ "kind": "variable",
33
+ "name": "iconPlacements",
34
+ "type": {
35
+ "text": "['leading', 'trailing']"
36
+ },
37
+ "default": "['leading', 'trailing']"
38
+ },
31
39
  {
32
40
  "kind": "variable",
33
41
  "name": "defaultProps",
34
42
  "type": {
35
43
  "text": "DefaultProps"
36
44
  },
37
- "default": "{\n variant: 'neutral',\n isStrong: false,\n isInteractive: false,\n disabled: false,\n size: 'large',\n}"
45
+ "default": "{\n variant: 'neutral',\n isStrong: false,\n isInteractive: false,\n disabled: false,\n size: 'large',\n iconPlacement: 'leading',\n}"
38
46
  }
39
47
  ],
40
48
  "exports": [
@@ -54,6 +62,14 @@
54
62
  "module": "src/defs.js"
55
63
  }
56
64
  },
65
+ {
66
+ "kind": "js",
67
+ "name": "iconPlacements",
68
+ "declaration": {
69
+ "name": "iconPlacements",
70
+ "module": "src/defs.js"
71
+ }
72
+ },
57
73
  {
58
74
  "kind": "js",
59
75
  "name": "defaultProps",
@@ -113,6 +129,12 @@
113
129
  "privacy": "public",
114
130
  "attribute": "isInteractive"
115
131
  },
132
+ {
133
+ "kind": "field",
134
+ "name": "iconPlacement",
135
+ "privacy": "public",
136
+ "attribute": "iconPlacement"
137
+ },
116
138
  {
117
139
  "kind": "method",
118
140
  "name": "renderIconSlot",
@@ -165,6 +187,10 @@
165
187
  {
166
188
  "name": "isInteractive",
167
189
  "fieldName": "isInteractive"
190
+ },
191
+ {
192
+ "name": "iconPlacement",
193
+ "fieldName": "iconPlacement"
168
194
  }
169
195
  ],
170
196
  "superclass": {
package/dist/index.d.ts CHANGED
@@ -7,21 +7,24 @@ export declare type DefaultProps = ComponentDefaultProps<TagProps>;
7
7
 
8
8
  export declare const defaultProps: DefaultProps;
9
9
 
10
+ export declare const iconPlacements: readonly ["leading", "trailing"];
11
+
10
12
  /**
11
13
  * @tagname pie-tag
12
14
  * @slot icon - The icon slot
13
15
  * @slot - Default slot
14
16
  */
15
17
  export declare class PieTag extends LitElement implements TagProps {
16
- variant: "neutral-alternative" | "neutral" | "outline" | "ghost" | "blue" | "green" | "yellow" | "red" | "brand" | "brand-03" | "brand-04" | "brand-06";
18
+ variant: "neutral-alternative" | "neutral" | "outline" | "ghost" | "information" | "success" | "error" | "brand-02" | "brand-03" | "brand-04" | "brand-05" | "brand-06";
17
19
  size: "small" | "large";
18
20
  isStrong: boolean;
19
21
  disabled: boolean;
20
22
  isInteractive: boolean;
21
- render(): TemplateResult<1>;
23
+ iconPlacement: "leading" | "trailing";
22
24
  private renderIconSlot;
23
25
  private renderTag;
24
26
  private renderButtonTag;
27
+ render(): TemplateResult<1>;
25
28
  static styles: CSSResult;
26
29
  }
27
30
 
@@ -33,7 +36,7 @@ export declare interface TagProps {
33
36
  */
34
37
  variant?: typeof variants[number];
35
38
  /**
36
- * When true, the "green", "yellow", "red", "blue" and "neutral" variants change their styles and become bolder
39
+ * When true, the "information", "success", "error", "brand-05", and "neutral" variants change their styles and become bolder
37
40
  */
38
41
  isStrong?: boolean;
39
42
  /**
@@ -49,8 +52,12 @@ export declare interface TagProps {
49
52
  * What size the tag should be.
50
53
  */
51
54
  size?: typeof sizes[number];
55
+ /**
56
+ * The placement of the icon slot such as leading (default) or trailing. Available only if `isInteractive` is set to true.
57
+ */
58
+ iconPlacement?: typeof iconPlacements[number];
52
59
  }
53
60
 
54
- export declare const variants: readonly ["neutral-alternative", "neutral", "outline", "ghost", "blue", "green", "yellow", "red", "brand", "brand-03", "brand-04", "brand-06"];
61
+ export declare const variants: readonly ["neutral-alternative", "neutral", "outline", "ghost", "information", "success", "error", "brand-02", "brand-03", "brand-04", "brand-05", "brand-06"];
55
62
 
56
63
  export { }
package/dist/index.js CHANGED
@@ -1,87 +1,95 @@
1
- import { LitElement as u, nothing as f, html as v, unsafeCSS as m } from "lit";
2
- import { property as l } from "lit/decorators.js";
3
- import { classMap as b } from "lit/directives/class-map.js";
4
- import { validPropertyValues as h, defineCustomElement as y } from "@justeattakeaway/pie-webc-core";
5
- const w = "*,*:after,*:before{box-sizing:inherit}.c-tag{--tag-bg-color: var(--dt-color-container-strong);--tag-color: var(--dt-color-content-default);--tag-border-radius: var(--dt-radius-rounded-b);--tag-padding-block: 2px;--tag-padding-inline: var(--dt-spacing-b);--tag-font-family: var(--dt-font-body-s-family);--tag-font-weight: var(--dt-font-body-s-weight);--tag-font-size: calc(var(--dt-font-body-s-size) * 1px);--tag-line-height: calc(var(--dt-font-body-s-line-height) * 1px);--tag-cursor: text;--tag-transparent-bg-color: transparent;--icon-display-override: block;--icon-size-override: 16px;display:inline-flex;vertical-align:middle;align-items:center;justify-content:center;gap:var(--dt-spacing-a);padding:var(--tag-padding-block) var(--tag-padding-inline);border-radius:var(--tag-border-radius);background-color:var(--tag-bg-color);color:var(--tag-color);font-family:var(--tag-font-family);font-weight:var(--tag-font-weight);font-size:var(--tag-font-size);line-height:var(--tag-line-height);cursor:var(--tag-cursor)}.c-tag.c-tag--interactive{--tag-cursor: pointer;border:none;-webkit-user-select:none;user-select:none}.c-tag.c-tag--interactive:focus-visible{box-shadow:0 0 0 2px var(--dt-color-focus-inner),0 0 0 4px var(--dt-color-focus-outer);outline:none}.c-tag.c-tag--small{--tag-padding-block: 0;--tag-padding-inline: var(--dt-spacing-a);--tag-border-radius: var(--dt-radius-rounded-a);--tag-font-size: calc(var(--dt-font-caption-size) * 1px);--tag-line-height: calc(var(--dt-font-caption-line-height) * 1px)}.c-tag.c-tag--neutral.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-container-strong-h), var(--dt-color-container-strong-s), calc(var(--dt-color-container-strong-l) + var(--hover-modifier)))}.c-tag.c-tag--neutral.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-container-strong-h), var(--dt-color-container-strong-s), calc(var(--dt-color-container-strong-l) + var(--active-modifier)))}.c-tag.c-tag--neutral.c-tag--strong{--tag-bg-color: var(--dt-color-container-inverse);--tag-color: var(--dt-color-content-inverse)}.c-tag.c-tag--neutral.c-tag--strong.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: var(--dt-color-hover-02);--tag-bg-color: hsl(var(--dt-color-container-inverse-h), var(--dt-color-container-inverse-s), calc(var(--dt-color-container-inverse-l) + var(--hover-modifier)))}.c-tag.c-tag--neutral.c-tag--strong.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: var(--dt-color-active-02);--tag-bg-color: hsl(var(--dt-color-container-inverse-h), var(--dt-color-container-inverse-s), calc(var(--dt-color-container-inverse-l) + var(--active-modifier)))}.c-tag.c-tag--blue{--tag-bg-color: var(--dt-color-support-info-02);--tag-color: var(--dt-color-content-default)}.c-tag.c-tag--blue.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-info-02-h), var(--dt-color-support-info-02-s), calc(var(--dt-color-support-info-02-l) + var(--hover-modifier)))}.c-tag.c-tag--blue.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-info-02-h), var(--dt-color-support-info-02-s), calc(var(--dt-color-support-info-02-l) + var(--active-modifier)))}.c-tag.c-tag--blue.c-tag--strong{--tag-bg-color: var(--dt-color-support-info);--tag-color: var(--dt-color-content-inverse)}.c-tag.c-tag--blue.c-tag--strong.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-info-h), var(--dt-color-support-info-s), calc(var(--dt-color-support-info-l) + var(--hover-modifier)))}.c-tag.c-tag--blue.c-tag--strong.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-info-h), var(--dt-color-support-info-s), calc(var(--dt-color-support-info-l) + var(--active-modifier)))}.c-tag.c-tag--green{--tag-bg-color: var(--dt-color-support-positive-02);--tag-color: var(--dt-color-content-default)}.c-tag.c-tag--green.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-positive-02-h), var(--dt-color-support-positive-02-s), calc(var(--dt-color-support-positive-02-l) + var(--hover-modifier)))}.c-tag.c-tag--green.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-positive-02-h), var(--dt-color-support-positive-02-s), calc(var(--dt-color-support-positive-02-l) + var(--active-modifier)))}.c-tag.c-tag--green.c-tag--strong{--tag-bg-color: var(--dt-color-support-positive);--tag-color: var(--dt-color-content-inverse)}.c-tag.c-tag--green.c-tag--strong.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-positive-h), var(--dt-color-support-positive-s), calc(var(--dt-color-support-positive-l) + var(--hover-modifier)))}.c-tag.c-tag--green.c-tag--strong.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-positive-h), var(--dt-color-support-positive-s), calc(var(--dt-color-support-positive-l) + var(--active-modifier)))}.c-tag.c-tag--yellow{--tag-bg-color: var(--dt-color-support-warning-02);--tag-color: var(--dt-color-content-default)}.c-tag.c-tag--yellow.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-warning-02-h), var(--dt-color-support-warning-02-s), calc(var(--dt-color-support-warning-02-l) + var(--hover-modifier)))}.c-tag.c-tag--yellow.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-warning-02-h), var(--dt-color-support-warning-02-s), calc(var(--dt-color-support-warning-02-l) + var(--active-modifier)))}.c-tag.c-tag--yellow.c-tag--strong{--tag-bg-color: var(--dt-color-support-warning);--tag-color: var(--dt-color-content-dark)}.c-tag.c-tag--yellow.c-tag--strong.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-warning-h), var(--dt-color-support-warning-s), calc(var(--dt-color-support-warning-l) + var(--hover-modifier)))}.c-tag.c-tag--yellow.c-tag--strong.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-warning-h), var(--dt-color-support-warning-s), calc(var(--dt-color-support-warning-l) + var(--active-modifier)))}.c-tag.c-tag--red{--tag-bg-color: var(--dt-color-support-error-02);--tag-color: var(--dt-color-content-default)}.c-tag.c-tag--red.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-error-02-h), var(--dt-color-support-error-02-s), calc(var(--dt-color-support-error-02-l) + var(--hover-modifier)))}.c-tag.c-tag--red.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-error-02-h), var(--dt-color-support-error-02-s), calc(var(--dt-color-support-error-02-l) + var(--active-modifier)))}.c-tag.c-tag--red.c-tag--strong{--tag-bg-color: var(--dt-color-support-error);--tag-color: var(--dt-color-content-light)}.c-tag.c-tag--red.c-tag--strong.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-error-h), var(--dt-color-support-error-s), calc(var(--dt-color-support-error-l) + var(--hover-modifier)))}.c-tag.c-tag--red.c-tag--strong.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-error-h), var(--dt-color-support-error-s), calc(var(--dt-color-support-error-l) + var(--active-modifier)))}.c-tag.c-tag--brand-03{--tag-bg-color: var(--dt-color-support-brand-03);--tag-color: var(--dt-color-content-default)}.c-tag.c-tag--brand-03.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-brand-03-h), var(--dt-color-support-brand-03-s), calc(var(--dt-color-support-brand-03-l) + var(--hover-modifier)))}.c-tag.c-tag--brand-03.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-brand-03-h), var(--dt-color-support-brand-03-s), calc(var(--dt-color-support-brand-03-l) + var(--active-modifier)))}.c-tag.c-tag--brand-04{--tag-bg-color: var(--dt-color-support-brand-04);--tag-color: var(--dt-color-content-default)}.c-tag.c-tag--brand-04.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-brand-04-h), var(--dt-color-support-brand-04-s), calc(var(--dt-color-support-brand-04-l) + var(--hover-modifier)))}.c-tag.c-tag--brand-04.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-brand-04-h), var(--dt-color-support-brand-04-s), calc(var(--dt-color-support-brand-04-l) + var(--active-modifier)))}.c-tag.c-tag--brand-06{--tag-bg-color: var(--dt-color-support-brand-06);--tag-color: var(--dt-color-content-light)}.c-tag.c-tag--brand-06.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: var(--dt-color-hover-02);--tag-bg-color: hsl(var(--dt-color-support-brand-06-h), var(--dt-color-support-brand-06-s), calc(var(--dt-color-support-brand-06-l) + var(--hover-modifier)))}.c-tag.c-tag--brand-06.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: var(--dt-color-active-02);--tag-bg-color: hsl(var(--dt-color-support-brand-06-h), var(--dt-color-support-brand-06-s), calc(var(--dt-color-support-brand-06-l) + var(--active-modifier)))}.c-tag.c-tag--brand{--tag-bg-color: var(--dt-color-support-brand-02);--tag-color: var(--dt-color-content-default)}.c-tag.c-tag--brand.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-brand-02-h), var(--dt-color-support-brand-02-s), calc(var(--dt-color-support-brand-02-l) + var(--hover-modifier)))}.c-tag.c-tag--brand.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-brand-02-h), var(--dt-color-support-brand-02-s), calc(var(--dt-color-support-brand-02-l) + var(--active-modifier)))}.c-tag.c-tag--neutral-alternative{--tag-bg-color: var(--dt-color-container-default);--tag-color: var(--dt-color-content-default)}.c-tag.c-tag--neutral-alternative.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-container-default-h), var(--dt-color-container-default-s), calc(var(--dt-color-container-default-l) + var(--hover-modifier)))}.c-tag.c-tag--neutral-alternative.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-container-default-h), var(--dt-color-container-default-s), calc(var(--dt-color-container-default-l) + var(--active-modifier)))}.c-tag.c-tag--outline{--tag-bg-color: var(--tag-transparent-bg-color);--tag-color: var(--dt-color-content-default);box-shadow:0 0 0 1px var(--dt-color-border-strong)}.c-tag.c-tag--outline.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--hover-modifier: var(--dt-color-hover-01);--tag-bg-color: hsl(var(--dt-color-black-h), var(--dt-color-black-s), var(--dt-color-black-l), var(--hover-modifier))}.c-tag.c-tag--outline.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--active-modifier: var(--dt-color-active-01);--tag-bg-color: hsl(var(--dt-color-black-h), var(--dt-color-black-s), var(--dt-color-black-l), var(--active-modifier))}.c-tag.c-tag--ghost{--tag-bg-color: var(--tag-transparent-bg-color);--tag-color: var(--dt-color-content-default)}.c-tag.c-tag--ghost.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--hover-modifier: var(--dt-color-hover-01);--tag-bg-color: hsl(var(--dt-color-black-h), var(--dt-color-black-s), var(--dt-color-black-l), var(--hover-modifier))}.c-tag.c-tag--ghost.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--active-modifier: var(--dt-color-active-01);--tag-bg-color: hsl(var(--dt-color-black-h), var(--dt-color-black-s), var(--dt-color-black-l), var(--active-modifier))}.c-tag.c-tag--disabled{opacity:.5}.c-tag[disabled]{--tag-cursor: not-allowed}::slotted(svg){display:block;height:var(--icon-size-override);width:var(--icon-size-override)}", k = ["neutral-alternative", "neutral", "outline", "ghost", "blue", "green", "yellow", "red", "brand", "brand-03", "brand-04", "brand-06"], z = ["small", "large"], a = {
1
+ import { LitElement as f, nothing as m, html as v, unsafeCSS as y } from "lit";
2
+ import { property as e } from "lit/decorators.js";
3
+ import { classMap as u } from "lit/directives/class-map.js";
4
+ import { validPropertyValues as g, defineCustomElement as w } from "@justeattakeaway/pie-webc-core";
5
+ const k = "*,*:after,*:before{box-sizing:inherit}.c-tag{--tag-bg-color: var(--dt-color-container-strong);--tag-color: var(--dt-color-content-default);--tag-border-radius: var(--dt-radius-rounded-b);--tag-padding-block: 2px;--tag-padding-inline: var(--dt-spacing-b);--tag-font-family: var(--dt-font-body-s-family);--tag-font-weight: var(--dt-font-body-s-weight);--tag-font-size: calc(var(--dt-font-body-s-size) * 1px);--tag-line-height: calc(var(--dt-font-body-s-line-height) * 1px);--tag-cursor: text;--tag-transparent-bg-color: transparent;--icon-display-override: block;--icon-size-override: 16px;display:inline-flex;flex-direction:row;vertical-align:middle;align-items:center;justify-content:center;gap:var(--dt-spacing-a);padding:var(--tag-padding-block) var(--tag-padding-inline);border-radius:var(--tag-border-radius);background-color:var(--tag-bg-color);color:var(--tag-color);font-family:var(--tag-font-family);font-weight:var(--tag-font-weight);font-size:var(--tag-font-size);line-height:var(--tag-line-height);cursor:var(--tag-cursor)}.c-tag.c-tag--interactive{--tag-cursor: pointer;border:none;-webkit-user-select:none;user-select:none}.c-tag.c-tag--interactive:focus-visible{box-shadow:0 0 0 2px var(--dt-color-focus-inner),0 0 0 4px var(--dt-color-focus-outer);outline:none}.c-tag.c-tag--icon-placement--trailing{flex-direction:row-reverse}.c-tag.c-tag--small{--tag-padding-block: 0;--tag-padding-inline: var(--dt-spacing-a);--tag-border-radius: var(--dt-radius-rounded-a);--tag-font-size: calc(var(--dt-font-caption-size) * 1px);--tag-line-height: calc(var(--dt-font-caption-line-height) * 1px)}.c-tag.c-tag--neutral.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-container-strong-h), var(--dt-color-container-strong-s), calc(var(--dt-color-container-strong-l) + var(--hover-modifier)))}.c-tag.c-tag--neutral.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-container-strong-h), var(--dt-color-container-strong-s), calc(var(--dt-color-container-strong-l) + var(--active-modifier)))}.c-tag.c-tag--neutral.c-tag--strong{--tag-bg-color: var(--dt-color-container-inverse);--tag-color: var(--dt-color-content-inverse)}.c-tag.c-tag--neutral.c-tag--strong.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: var(--dt-color-hover-02);--tag-bg-color: hsl(var(--dt-color-container-inverse-h), var(--dt-color-container-inverse-s), calc(var(--dt-color-container-inverse-l) + var(--hover-modifier)))}.c-tag.c-tag--neutral.c-tag--strong.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: var(--dt-color-active-02);--tag-bg-color: hsl(var(--dt-color-container-inverse-h), var(--dt-color-container-inverse-s), calc(var(--dt-color-container-inverse-l) + var(--active-modifier)))}.c-tag.c-tag--information{--tag-bg-color: var(--dt-color-support-info-02);--tag-color: var(--dt-color-content-default)}.c-tag.c-tag--information.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-info-02-h), var(--dt-color-support-info-02-s), calc(var(--dt-color-support-info-02-l) + var(--hover-modifier)))}.c-tag.c-tag--information.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-info-02-h), var(--dt-color-support-info-02-s), calc(var(--dt-color-support-info-02-l) + var(--active-modifier)))}.c-tag.c-tag--information.c-tag--strong{--tag-bg-color: var(--dt-color-support-info);--tag-color: var(--dt-color-content-inverse)}.c-tag.c-tag--information.c-tag--strong.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-info-h), var(--dt-color-support-info-s), calc(var(--dt-color-support-info-l) + var(--hover-modifier)))}.c-tag.c-tag--information.c-tag--strong.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-info-h), var(--dt-color-support-info-s), calc(var(--dt-color-support-info-l) + var(--active-modifier)))}.c-tag.c-tag--success{--tag-bg-color: var(--dt-color-support-positive-02);--tag-color: var(--dt-color-content-default)}.c-tag.c-tag--success.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-positive-02-h), var(--dt-color-support-positive-02-s), calc(var(--dt-color-support-positive-02-l) + var(--hover-modifier)))}.c-tag.c-tag--success.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-positive-02-h), var(--dt-color-support-positive-02-s), calc(var(--dt-color-support-positive-02-l) + var(--active-modifier)))}.c-tag.c-tag--success.c-tag--strong{--tag-bg-color: var(--dt-color-support-positive);--tag-color: var(--dt-color-content-inverse)}.c-tag.c-tag--success.c-tag--strong.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-positive-h), var(--dt-color-support-positive-s), calc(var(--dt-color-support-positive-l) + var(--hover-modifier)))}.c-tag.c-tag--success.c-tag--strong.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-positive-h), var(--dt-color-support-positive-s), calc(var(--dt-color-support-positive-l) + var(--active-modifier)))}.c-tag.c-tag--error{--tag-bg-color: var(--dt-color-support-error-02);--tag-color: var(--dt-color-content-default)}.c-tag.c-tag--error.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-error-02-h), var(--dt-color-support-error-02-s), calc(var(--dt-color-support-error-02-l) + var(--hover-modifier)))}.c-tag.c-tag--error.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-error-02-h), var(--dt-color-support-error-02-s), calc(var(--dt-color-support-error-02-l) + var(--active-modifier)))}.c-tag.c-tag--error.c-tag--strong{--tag-bg-color: var(--dt-color-support-error);--tag-color: var(--dt-color-content-light)}.c-tag.c-tag--error.c-tag--strong.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-error-h), var(--dt-color-support-error-s), calc(var(--dt-color-support-error-l) + var(--hover-modifier)))}.c-tag.c-tag--error.c-tag--strong.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-error-h), var(--dt-color-support-error-s), calc(var(--dt-color-support-error-l) + var(--active-modifier)))}.c-tag.c-tag--brand-02{--tag-bg-color: var(--dt-color-support-brand-02);--tag-color: var(--dt-color-content-default)}.c-tag.c-tag--brand-02.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-brand-02-h), var(--dt-color-support-brand-02-s), calc(var(--dt-color-support-brand-02-l) + var(--hover-modifier)))}.c-tag.c-tag--brand-02.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-brand-02-h), var(--dt-color-support-brand-02-s), calc(var(--dt-color-support-brand-02-l) + var(--active-modifier)))}.c-tag.c-tag--brand-03{--tag-bg-color: var(--dt-color-support-brand-03);--tag-color: var(--dt-color-content-dark)}.c-tag.c-tag--brand-03.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-brand-03-h), var(--dt-color-support-brand-03-s), calc(var(--dt-color-support-brand-03-l) + var(--hover-modifier)))}.c-tag.c-tag--brand-03.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-brand-03-h), var(--dt-color-support-brand-03-s), calc(var(--dt-color-support-brand-03-l) + var(--active-modifier)))}.c-tag.c-tag--brand-04{--tag-bg-color: var(--dt-color-support-brand-04);--tag-color: var(--dt-color-content-dark)}.c-tag.c-tag--brand-04.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-brand-04-h), var(--dt-color-support-brand-04-s), calc(var(--dt-color-support-brand-04-l) + var(--hover-modifier)))}.c-tag.c-tag--brand-04.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-brand-04-h), var(--dt-color-support-brand-04-s), calc(var(--dt-color-support-brand-04-l) + var(--active-modifier)))}.c-tag.c-tag--brand-05{--tag-bg-color: var(--dt-color-support-warning-02);--tag-color: var(--dt-color-content-default)}.c-tag.c-tag--brand-05.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-warning-02-h), var(--dt-color-support-warning-02-s), calc(var(--dt-color-support-warning-02-l) + var(--hover-modifier)))}.c-tag.c-tag--brand-05.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-warning-02-h), var(--dt-color-support-warning-02-s), calc(var(--dt-color-support-warning-02-l) + var(--active-modifier)))}.c-tag.c-tag--brand-05.c-tag--strong{--tag-bg-color: var(--dt-color-support-warning);--tag-color: var(--dt-color-content-dark)}.c-tag.c-tag--brand-05.c-tag--strong.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-support-warning-h), var(--dt-color-support-warning-s), calc(var(--dt-color-support-warning-l) + var(--hover-modifier)))}.c-tag.c-tag--brand-05.c-tag--strong.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-support-warning-h), var(--dt-color-support-warning-s), calc(var(--dt-color-support-warning-l) + var(--active-modifier)))}.c-tag.c-tag--brand-06{--tag-bg-color: var(--dt-color-support-brand-06);--tag-color: var(--dt-color-content-light)}.c-tag.c-tag--brand-06.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: var(--dt-color-hover-02);--tag-bg-color: hsl(var(--dt-color-support-brand-06-h), var(--dt-color-support-brand-06-s), calc(var(--dt-color-support-brand-06-l) + var(--hover-modifier)))}.c-tag.c-tag--brand-06.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: var(--dt-color-active-02);--tag-bg-color: hsl(var(--dt-color-support-brand-06-h), var(--dt-color-support-brand-06-s), calc(var(--dt-color-support-brand-06-l) + var(--active-modifier)))}.c-tag.c-tag--neutral-alternative{--tag-bg-color: var(--dt-color-container-default);--tag-color: var(--dt-color-content-default)}.c-tag.c-tag--neutral-alternative.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--tag-bg-color: hsl(var(--dt-color-container-default-h), var(--dt-color-container-default-s), calc(var(--dt-color-container-default-l) + var(--hover-modifier)))}.c-tag.c-tag--neutral-alternative.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--tag-bg-color: hsl(var(--dt-color-container-default-h), var(--dt-color-container-default-s), calc(var(--dt-color-container-default-l) + var(--active-modifier)))}.c-tag.c-tag--outline{--tag-bg-color: var(--tag-transparent-bg-color);--tag-color: var(--dt-color-content-default);box-shadow:0 0 0 1px var(--dt-color-border-strong)}.c-tag.c-tag--outline.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--hover-modifier: var(--dt-color-hover-01);--tag-bg-color: hsl(var(--dt-color-black-h), var(--dt-color-black-s), var(--dt-color-black-l), var(--hover-modifier))}.c-tag.c-tag--outline.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--active-modifier: var(--dt-color-active-01);--tag-bg-color: hsl(var(--dt-color-black-h), var(--dt-color-black-s), var(--dt-color-black-l), var(--active-modifier))}.c-tag.c-tag--ghost{--tag-bg-color: var(--tag-transparent-bg-color);--tag-color: var(--dt-color-content-default)}.c-tag.c-tag--ghost.c-tag--interactive:hover:not(.c-tag--disabled){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--hover-modifier: var(--dt-color-hover-01);--tag-bg-color: hsl(var(--dt-color-black-h), var(--dt-color-black-s), var(--dt-color-black-l), var(--hover-modifier))}.c-tag.c-tag--ghost.c-tag--interactive:active:not(.c-tag--disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--active-modifier: var(--dt-color-active-01);--tag-bg-color: hsl(var(--dt-color-black-h), var(--dt-color-black-s), var(--dt-color-black-l), var(--active-modifier))}.c-tag.c-tag--disabled{opacity:.5}.c-tag[disabled]{--tag-cursor: not-allowed}::slotted(svg){display:block;height:var(--icon-size-override);width:var(--icon-size-override)}", x = ["neutral-alternative", "neutral", "outline", "ghost", "information", "success", "error", "brand-02", "brand-03", "brand-04", "brand-05", "brand-06"], z = ["small", "large"], S = ["leading", "trailing"], r = {
6
6
  variant: "neutral",
7
7
  isStrong: !1,
8
8
  isInteractive: !1,
9
9
  disabled: !1,
10
- size: "large"
10
+ size: "large",
11
+ iconPlacement: "leading"
11
12
  };
12
- var x = Object.defineProperty, d = (s, r, c, p) => {
13
- for (var t = void 0, e = s.length - 1, i; e >= 0; e--)
14
- (i = s[e]) && (t = i(r, c, t) || t);
15
- return t && x(r, c, t), t;
13
+ var P = Object.defineProperty, i = (p, o, c, b) => {
14
+ for (var a = void 0, l = p.length - 1, d; l >= 0; l--)
15
+ (d = p[l]) && (a = d(o, c, a) || a);
16
+ return a && P(o, c, a), a;
16
17
  };
17
- const g = "pie-tag", n = class n extends u {
18
+ const n = "pie-tag", s = class s extends f {
18
19
  constructor() {
19
- super(...arguments), this.variant = a.variant, this.size = a.size, this.isStrong = a.isStrong, this.disabled = a.disabled, this.isInteractive = a.isInteractive;
20
- }
21
- render() {
22
- const {
23
- disabled: r,
24
- isInteractive: c,
25
- isStrong: p,
26
- size: t,
27
- variant: e
28
- } = this, i = {
29
- "c-tag": !0,
30
- [`c-tag--${t}`]: !0,
31
- [`c-tag--${e}`]: !0,
32
- "c-tag--disabled": r,
33
- "c-tag--strong": p,
34
- "c-tag--interactive": c
35
- };
36
- return c ? this.renderButtonTag(i) : this.renderTag(i);
20
+ super(...arguments), this.variant = r.variant, this.size = r.size, this.isStrong = r.isStrong, this.disabled = r.disabled, this.isInteractive = r.isInteractive, this.iconPlacement = r.iconPlacement;
37
21
  }
38
22
  renderIconSlot() {
39
- return this.size !== "large" ? f : v`<slot name="icon"></slot>`;
23
+ return this.size !== "large" ? m : v`<slot name="icon"></slot>`;
40
24
  }
41
- renderTag(r) {
25
+ renderTag(o) {
42
26
  return v`
43
27
  <div
44
- class="${b(r)}"
28
+ class="${u(o)}"
45
29
  data-test-id="pie-tag">
46
30
  ${this.renderIconSlot()}
47
31
  <slot></slot>
48
32
  </div>`;
49
33
  }
50
- renderButtonTag(r) {
34
+ renderButtonTag(o) {
51
35
  return v`
52
36
  <button
53
37
  type="button"
54
38
  ?disabled="${this.disabled}"
55
- class="${b(r)}"
39
+ class="${u(o)}"
56
40
  data-test-id="pie-tag">
57
41
  ${this.renderIconSlot()}
58
42
  <slot></slot>
59
43
  </button>`;
60
44
  }
45
+ render() {
46
+ const {
47
+ disabled: o,
48
+ isInteractive: c,
49
+ isStrong: b,
50
+ size: a,
51
+ variant: l,
52
+ iconPlacement: d
53
+ } = this, h = {
54
+ "c-tag": !0,
55
+ [`c-tag--${a}`]: !0,
56
+ [`c-tag--${l}`]: !0,
57
+ "c-tag--disabled": o,
58
+ "c-tag--strong": b,
59
+ "c-tag--interactive": c,
60
+ [`c-tag--icon-placement--${d}`]: c && d
61
+ };
62
+ return c ? this.renderButtonTag(h) : this.renderTag(h);
63
+ }
61
64
  };
62
- n.styles = m(w);
63
- let o = n;
64
- d([
65
- l({ type: String }),
66
- h(g, k, a.variant)
67
- ], o.prototype, "variant");
68
- d([
69
- l({ type: String }),
70
- h(g, z, a.size)
71
- ], o.prototype, "size");
72
- d([
73
- l({ type: Boolean })
74
- ], o.prototype, "isStrong");
75
- d([
76
- l({ type: Boolean })
77
- ], o.prototype, "disabled");
78
- d([
79
- l({ type: Boolean })
80
- ], o.prototype, "isInteractive");
81
- y(g, o);
65
+ s.styles = y(k);
66
+ let t = s;
67
+ i([
68
+ e({ type: String }),
69
+ g(n, x, r.variant)
70
+ ], t.prototype, "variant");
71
+ i([
72
+ e({ type: String }),
73
+ g(n, z, r.size)
74
+ ], t.prototype, "size");
75
+ i([
76
+ e({ type: Boolean })
77
+ ], t.prototype, "isStrong");
78
+ i([
79
+ e({ type: Boolean })
80
+ ], t.prototype, "disabled");
81
+ i([
82
+ e({ type: Boolean })
83
+ ], t.prototype, "isInteractive");
84
+ i([
85
+ e({ type: String }),
86
+ g(n, S, r.iconPlacement)
87
+ ], t.prototype, "iconPlacement");
88
+ w(n, t);
82
89
  export {
83
- o as PieTag,
84
- a as defaultProps,
90
+ t as PieTag,
91
+ r as defaultProps,
92
+ S as iconPlacements,
85
93
  z as sizes,
86
- k as variants
94
+ x as variants
87
95
  };
package/dist/react.d.ts CHANGED
@@ -8,6 +8,8 @@ export declare type DefaultProps = ComponentDefaultProps<TagProps>;
8
8
 
9
9
  export declare const defaultProps: DefaultProps;
10
10
 
11
+ export declare const iconPlacements: readonly ["leading", "trailing"];
12
+
11
13
  export declare const PieTag: React_2.ForwardRefExoticComponent<TagProps & React_2.RefAttributes<PieTag_2> & ReactBaseType>;
12
14
 
13
15
  /**
@@ -16,15 +18,16 @@ export declare const PieTag: React_2.ForwardRefExoticComponent<TagProps & React_
16
18
  * @slot - Default slot
17
19
  */
18
20
  declare class PieTag_2 extends LitElement implements TagProps {
19
- variant: "neutral-alternative" | "neutral" | "outline" | "ghost" | "blue" | "green" | "yellow" | "red" | "brand" | "brand-03" | "brand-04" | "brand-06";
21
+ variant: "neutral-alternative" | "neutral" | "outline" | "ghost" | "information" | "success" | "error" | "brand-02" | "brand-03" | "brand-04" | "brand-05" | "brand-06";
20
22
  size: "small" | "large";
21
23
  isStrong: boolean;
22
24
  disabled: boolean;
23
25
  isInteractive: boolean;
24
- render(): TemplateResult<1>;
26
+ iconPlacement: "leading" | "trailing";
25
27
  private renderIconSlot;
26
28
  private renderTag;
27
29
  private renderButtonTag;
30
+ render(): TemplateResult<1>;
28
31
  static styles: CSSResult;
29
32
  }
30
33
 
@@ -38,7 +41,7 @@ export declare interface TagProps {
38
41
  */
39
42
  variant?: typeof variants[number];
40
43
  /**
41
- * When true, the "green", "yellow", "red", "blue" and "neutral" variants change their styles and become bolder
44
+ * When true, the "information", "success", "error", "brand-05", and "neutral" variants change their styles and become bolder
42
45
  */
43
46
  isStrong?: boolean;
44
47
  /**
@@ -54,8 +57,12 @@ export declare interface TagProps {
54
57
  * What size the tag should be.
55
58
  */
56
59
  size?: typeof sizes[number];
60
+ /**
61
+ * The placement of the icon slot such as leading (default) or trailing. Available only if `isInteractive` is set to true.
62
+ */
63
+ iconPlacement?: typeof iconPlacements[number];
57
64
  }
58
65
 
59
- export declare const variants: readonly ["neutral-alternative", "neutral", "outline", "ghost", "blue", "green", "yellow", "red", "brand", "brand-03", "brand-04", "brand-06"];
66
+ export declare const variants: readonly ["neutral-alternative", "neutral", "outline", "ghost", "information", "success", "error", "brand-02", "brand-03", "brand-04", "brand-05", "brand-06"];
60
67
 
61
68
  export { }
package/dist/react.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as e from "react";
2
2
  import { createComponent as a } from "@lit/react";
3
3
  import { PieTag as t } from "./index.js";
4
- import { defaultProps as g, sizes as n, variants as c } from "./index.js";
4
+ import { defaultProps as p, iconPlacements as c, sizes as g, variants as P } from "./index.js";
5
5
  const o = a({
6
6
  displayName: "PieTag",
7
7
  elementClass: t,
@@ -11,7 +11,8 @@ const o = a({
11
11
  }), s = o;
12
12
  export {
13
13
  s as PieTag,
14
- g as defaultProps,
15
- n as sizes,
16
- c as variants
14
+ p as defaultProps,
15
+ c as iconPlacements,
16
+ g as sizes,
17
+ P as variants
17
18
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@justeattakeaway/pie-tag",
3
3
  "description": "PIE Design System Tag built using Web Components",
4
- "version": "0.11.1",
4
+ "version": "0.13.0",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.js",
@@ -37,8 +37,8 @@
37
37
  "devDependencies": {
38
38
  "@custom-elements-manifest/analyzer": "0.9.0",
39
39
  "@justeattakeaway/pie-components-config": "0.18.0",
40
- "@justeattakeaway/pie-css": "0.13.1",
41
- "@justeattakeaway/pie-icons-webc": "1.1.0",
40
+ "@justeattakeaway/pie-css": "0.14.1",
41
+ "@justeattakeaway/pie-icons-webc": "1.3.0",
42
42
  "@justeattakeaway/pie-wrapper-react": "0.14.2",
43
43
  "cem-plugin-module-file-extensions": "0.0.5"
44
44
  },
package/src/defs.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import { type ComponentDefaultProps } from '@justeattakeaway/pie-webc-core';
2
2
 
3
- export const variants = ['neutral-alternative', 'neutral', 'outline', 'ghost', 'blue', 'green', 'yellow', 'red', 'brand', 'brand-03', 'brand-04', 'brand-06'] as const;
3
+ export const variants = ['neutral-alternative', 'neutral', 'outline', 'ghost', 'information', 'success', 'error', 'brand-02', 'brand-03', 'brand-04', 'brand-05', 'brand-06'] as const;
4
4
  export const sizes = ['small', 'large'] as const;
5
+ export const iconPlacements = ['leading', 'trailing'] as const;
5
6
 
6
7
  export interface TagProps {
7
8
  /**
@@ -10,7 +11,7 @@ export interface TagProps {
10
11
  variant?: typeof variants[number];
11
12
 
12
13
  /**
13
- * When true, the "green", "yellow", "red", "blue" and "neutral" variants change their styles and become bolder
14
+ * When true, the "information", "success", "error", "brand-05", and "neutral" variants change their styles and become bolder
14
15
  */
15
16
  isStrong?: boolean;
16
17
 
@@ -29,6 +30,11 @@ export interface TagProps {
29
30
  * What size the tag should be.
30
31
  */
31
32
  size?: typeof sizes[number];
33
+
34
+ /**
35
+ * The placement of the icon slot such as leading (default) or trailing. Available only if `isInteractive` is set to true.
36
+ */
37
+ iconPlacement?: typeof iconPlacements[number];
32
38
  }
33
39
 
34
40
  export type DefaultProps = ComponentDefaultProps<TagProps>;
@@ -39,4 +45,5 @@ export const defaultProps: DefaultProps = {
39
45
  isInteractive: false,
40
46
  disabled: false,
41
47
  size: 'large',
48
+ iconPlacement: 'leading',
42
49
  };
package/src/index.ts CHANGED
@@ -6,7 +6,11 @@ import { classMap, type ClassInfo } from 'lit/directives/class-map.js';
6
6
  import { validPropertyValues, defineCustomElement } from '@justeattakeaway/pie-webc-core';
7
7
  import styles from './tag.scss?inline';
8
8
  import {
9
- type TagProps, variants, sizes, defaultProps,
9
+ variants,
10
+ sizes,
11
+ defaultProps,
12
+ iconPlacements,
13
+ type TagProps,
10
14
  } from './defs';
11
15
 
12
16
  // Valid values available to consumers
@@ -37,30 +41,9 @@ export class PieTag extends LitElement implements TagProps {
37
41
  @property({ type: Boolean })
38
42
  public isInteractive = defaultProps.isInteractive;
39
43
 
40
- render () {
41
- const {
42
- disabled,
43
- isInteractive,
44
- isStrong,
45
- size,
46
- variant,
47
- } = this;
48
-
49
- const classes = {
50
- 'c-tag': true,
51
- [`c-tag--${size}`]: true,
52
- [`c-tag--${variant}`]: true,
53
- 'c-tag--disabled': disabled,
54
- 'c-tag--strong': isStrong,
55
- 'c-tag--interactive': isInteractive,
56
- };
57
-
58
- if (isInteractive) {
59
- return this.renderButtonTag(classes);
60
- }
61
-
62
- return this.renderTag(classes);
63
- }
44
+ @property({ type: String })
45
+ @validPropertyValues(componentSelector, iconPlacements, defaultProps.iconPlacement)
46
+ public iconPlacement = defaultProps.iconPlacement;
64
47
 
65
48
  private renderIconSlot () {
66
49
  if (this.size !== 'large') return nothing;
@@ -90,6 +73,33 @@ export class PieTag extends LitElement implements TagProps {
90
73
  </button>`;
91
74
  }
92
75
 
76
+ render () {
77
+ const {
78
+ disabled,
79
+ isInteractive,
80
+ isStrong,
81
+ size,
82
+ variant,
83
+ iconPlacement,
84
+ } = this;
85
+
86
+ const classes = {
87
+ 'c-tag': true,
88
+ [`c-tag--${size}`]: true,
89
+ [`c-tag--${variant}`]: true,
90
+ 'c-tag--disabled': disabled,
91
+ 'c-tag--strong': isStrong,
92
+ 'c-tag--interactive': isInteractive,
93
+ [`c-tag--icon-placement--${iconPlacement}`]: isInteractive && iconPlacement,
94
+ };
95
+
96
+ if (isInteractive) {
97
+ return this.renderButtonTag(classes);
98
+ }
99
+
100
+ return this.renderTag(classes);
101
+ }
102
+
93
103
  // Renders a `CSSResult` generated from SCSS by Vite
94
104
  static styles = unsafeCSS(styles);
95
105
  }
package/src/tag.scss CHANGED
@@ -55,6 +55,7 @@
55
55
  --icon-size-override: 16px;
56
56
 
57
57
  display: inline-flex;
58
+ flex-direction: row;
58
59
  vertical-align: middle;
59
60
  align-items: center;
60
61
  justify-content: center;
@@ -80,6 +81,14 @@
80
81
  }
81
82
  }
82
83
 
84
+ &.c-tag--icon-placement--leading {
85
+ // same as default styles
86
+ }
87
+
88
+ &.c-tag--icon-placement--trailing {
89
+ flex-direction: row-reverse;
90
+ }
91
+
83
92
  // Size
84
93
  &.c-tag--small {
85
94
  --tag-padding-block: 0;
@@ -104,7 +113,7 @@
104
113
  }
105
114
  }
106
115
 
107
- &.c-tag--blue {
116
+ &.c-tag--information {
108
117
  --tag-bg-color: var(--dt-color-support-info-02);
109
118
  --tag-color: var(--dt-color-content-default);
110
119
  @include tag-interactive-states('--dt-color-support-info-02');
@@ -116,7 +125,7 @@
116
125
  }
117
126
  }
118
127
 
119
- &.c-tag--green {
128
+ &.c-tag--success {
120
129
  --tag-bg-color: var(--dt-color-support-positive-02);
121
130
  --tag-color: var(--dt-color-content-default);
122
131
  @include tag-interactive-states('--dt-color-support-positive-02');
@@ -128,19 +137,7 @@
128
137
  }
129
138
  }
130
139
 
131
- &.c-tag--yellow {
132
- --tag-bg-color: var(--dt-color-support-warning-02);
133
- --tag-color: var(--dt-color-content-default);
134
- @include tag-interactive-states('--dt-color-support-warning-02');
135
-
136
- &.c-tag--strong {
137
- --tag-bg-color: var(--dt-color-support-warning);
138
- --tag-color: var(--dt-color-content-dark);
139
- @include tag-interactive-states('--dt-color-support-warning');
140
- }
141
- }
142
-
143
- &.c-tag--red {
140
+ &.c-tag--error {
144
141
  --tag-bg-color: var(--dt-color-support-error-02);
145
142
  --tag-color: var(--dt-color-content-default);
146
143
  @include tag-interactive-states('--dt-color-support-error-02');
@@ -152,30 +149,42 @@
152
149
  }
153
150
  }
154
151
 
152
+ &.c-tag--brand-02 {
153
+ --tag-bg-color: var(--dt-color-support-brand-02);
154
+ --tag-color: var(--dt-color-content-default);
155
+ @include tag-interactive-states('--dt-color-support-brand-02');
156
+ }
157
+
155
158
  &.c-tag--brand-03 {
156
159
  --tag-bg-color: var(--dt-color-support-brand-03);
157
- --tag-color: var(--dt-color-content-default);
160
+ --tag-color: var(--dt-color-content-dark);
158
161
  @include tag-interactive-states('--dt-color-support-brand-03');
159
162
  }
160
163
 
161
164
  &.c-tag--brand-04 {
162
165
  --tag-bg-color: var(--dt-color-support-brand-04);
163
- --tag-color: var(--dt-color-content-default);
166
+ --tag-color: var(--dt-color-content-dark);
164
167
  @include tag-interactive-states('--dt-color-support-brand-04');
165
168
  }
166
169
 
170
+ &.c-tag--brand-05 {
171
+ --tag-bg-color: var(--dt-color-support-warning-02);
172
+ --tag-color: var(--dt-color-content-default);
173
+ @include tag-interactive-states('--dt-color-support-warning-02');
174
+
175
+ &.c-tag--strong {
176
+ --tag-bg-color: var(--dt-color-support-warning);
177
+ --tag-color: var(--dt-color-content-dark);
178
+ @include tag-interactive-states('--dt-color-support-warning');
179
+ }
180
+ }
181
+
167
182
  &.c-tag--brand-06 {
168
183
  --tag-bg-color: var(--dt-color-support-brand-06);
169
184
  --tag-color: var(--dt-color-content-light);
170
185
  @include tag-interactive-states('--dt-color-support-brand-06', 'inverse');
171
186
  }
172
187
 
173
- &.c-tag--brand {
174
- --tag-bg-color: var(--dt-color-support-brand-02);
175
- --tag-color: var(--dt-color-content-default);
176
- @include tag-interactive-states('--dt-color-support-brand-02');
177
- }
178
-
179
188
  &.c-tag--neutral-alternative {
180
189
  --tag-bg-color: var(--dt-color-container-default);
181
190
  --tag-color: var(--dt-color-content-default);