@stackone/malachite 2.48.0 → 2.49.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.
@@ -1,11 +1,11 @@
1
- import { jsx as s, jsxs as W } from "react/jsx-runtime";
2
- import { useRef as S, useState as A, useCallback as B } from "react";
3
- import D from "./CustomIcons/DismissIcon.js";
4
- import { FOCUS_RING as L } from "./focusRing.js";
5
- import { activateOnEnterOrSpace as P } from "./keyboardActivation.js";
6
- import q from "./Tooltip.js";
7
- import { getTextColor as E } from "./Typography/textStyles.js";
8
- const G = (e) => {
1
+ import { jsx as n, jsxs as F } from "react/jsx-runtime";
2
+ import { useRef as C, useState as L, useCallback as W } from "react";
3
+ import A from "./CustomIcons/DismissIcon.js";
4
+ import { FOCUS_RING as B } from "./focusRing.js";
5
+ import { activateOnEnterOrSpace as U } from "./keyboardActivation.js";
6
+ import E from "./Tooltip.js";
7
+ import { getTextColor as G } from "./Typography/textStyles.js";
8
+ const P = (e) => {
9
9
  switch (e) {
10
10
  case "xsmall":
11
11
  return "text-[length:var(--malachite-font-size-xsmall)]";
@@ -16,7 +16,7 @@ const G = (e) => {
16
16
  default:
17
17
  return "text-xs";
18
18
  }
19
- }, K = (e) => {
19
+ }, _ = (e) => {
20
20
  switch (e) {
21
21
  case "large":
22
22
  return "w-[88px]";
@@ -29,126 +29,122 @@ const G = (e) => {
29
29
  default:
30
30
  return "w-fit";
31
31
  }
32
- }, U = (e) => e === "compact" ? "px-[6px] py-[1px]" : "px-2 py-1", _ = (e) => ({
32
+ }, q = (e) => e === "compact" ? "px-[6px] py-[1px]" : "px-2 py-1", K = (e) => ({
33
33
  borderRadius: e === "compact" ? "var(--malachite-radius-md)" : "var(--malachite-radius-lg)"
34
- }), H = (e, n, r) => {
35
- const o = `inline-flex items-center justify-center ${U(n)} ${G(r)} font-medium leading-normal tracking-[0.11px]`, i = {
34
+ }), H = (e, o, a) => {
35
+ const l = `inline-flex items-center justify-center ${q(o)} ${P(a)} font-medium leading-normal tracking-[0.11px]`, s = {
36
36
  primary: {
37
- bg: "bg-[var(--malachite-tag-primary-background)]",
38
37
  text: "text-[var(--malachite-tag-primary-foreground)]"
39
38
  },
40
39
  secondary: {
41
- bg: "bg-[var(--malachite-tag-secondary-background)]",
42
40
  text: "text-[var(--malachite-tag-secondary-foreground)]"
43
41
  },
44
42
  default: {
45
- bg: "bg-[var(--malachite-tag-default-background)]",
46
43
  text: "text-[var(--malachite-tag-default-foreground)]"
47
44
  },
48
45
  error: {
49
- bg: "bg-[var(--malachite-tag-error-background)]",
50
46
  text: "text-[var(--malachite-tag-error-foreground)]"
51
47
  },
52
48
  warning: {
53
- bg: "bg-[var(--malachite-tag-warning-background)]",
54
49
  text: "text-[var(--malachite-tag-warning-foreground)]"
55
50
  },
56
51
  success: {
57
- bg: "bg-[var(--malachite-tag-success-background)]",
58
52
  text: "text-[var(--malachite-tag-success-foreground)]"
59
53
  },
60
54
  emphasis: {
61
- bg: "bg-[var(--malachite-tag-emphasis-background)]",
62
55
  text: "text-[var(--malachite-tag-emphasis-foreground)]"
63
56
  },
64
57
  info: {
65
- bg: "bg-[var(--malachite-tag-info-background)]",
66
58
  text: "text-[var(--malachite-tag-info-foreground)]"
67
59
  },
68
60
  assistant: {
69
- bg: "bg-[var(--malachite-tag-assistant-background)]",
70
61
  text: "text-[var(--malachite-tag-assistant-foreground)]"
71
62
  }
72
63
  }[e];
73
- return [o, i.bg, i.text].filter(Boolean).join(" ");
74
- }, J = (e, n, r, o) => {
75
- const a = {
76
- ..._(o)
64
+ return [l, s.text].filter(Boolean).join(" ");
65
+ }, J = "var(--malachite-ctx-tag-ground, transparent)", M = "var(--malachite-ctx-tag-cursor, default)", Q = (e, o, a, l) => {
66
+ const r = `var(--malachite-tag-${e}-background)`, s = {
67
+ ...K(l),
68
+ backgroundColor: J,
69
+ backgroundImage: `linear-gradient(${r}, ${r})`
77
70
  };
78
- return n && (a.border = `2px solid var(--malachite-tag-${e}-border)`), e === "emphasis" ? a.boxShadow = "0px 0px 10px 0px var(--malachite-tag-emphasis-shadow)" : r && (a.boxShadow = `0 10px 15px -3px var(--malachite-tag-${e}-shadow)`), a;
79
- }, M = (e, n) => {
80
- const r = new ResizeObserver(n);
81
- return r.observe(e), r;
82
- }, ae = ({
71
+ return o && (s.border = `2px solid var(--malachite-tag-${e}-border)`), e === "emphasis" ? s.boxShadow = "0px 0px 10px 0px var(--malachite-tag-emphasis-shadow)" : a && (s.boxShadow = `0 10px 15px -3px var(--malachite-tag-${e}-shadow)`), s;
72
+ }, V = (e, o) => {
73
+ const a = new ResizeObserver(o);
74
+ return a.observe(e), a;
75
+ }, se = ({
83
76
  value: e,
84
- fontSize: n,
85
- type: r = "default",
86
- bordered: o = !1,
87
- onClick: a,
88
- shadow: i = !1,
89
- textTransform: u = "uppercase",
90
- width: C,
91
- paddingSize: g = "default",
92
- icon: l,
93
- iconPosition: d = "left",
94
- iconColor: f,
95
- pointerType: R = "default",
96
- onRemove: p,
77
+ fontSize: o,
78
+ type: a = "default",
79
+ bordered: l = !1,
80
+ onClick: r,
81
+ shadow: s = !1,
82
+ textTransform: f = "uppercase",
83
+ width: $,
84
+ paddingSize: d = "default",
85
+ icon: i,
86
+ iconPosition: p = "left",
87
+ iconColor: x,
88
+ pointerType: m,
89
+ onRemove: g,
97
90
  className: N = ""
98
91
  }) => {
99
- const x = f ? { color: E(f) } : void 0, m = S(null), c = S(null), [T, z] = A(!1), h = typeof e == "string" || typeof e == "number", $ = B((t) => {
100
- var y;
101
- if ((y = m.current) == null || y.disconnect(), m.current = null, c.current !== null && (cancelAnimationFrame(c.current), c.current = null), !t || typeof ResizeObserver > "u")
92
+ const h = x ? { color: G(x) } : void 0, u = C(null), c = C(null), [z, O] = L(!1), b = typeof e == "string" || typeof e == "number", j = W((t) => {
93
+ var w;
94
+ if ((w = u.current) == null || w.disconnect(), u.current = null, c.current !== null && (cancelAnimationFrame(c.current), c.current = null), !t || typeof ResizeObserver > "u")
102
95
  return;
103
- const I = () => {
104
- c.current = null, t.clientWidth !== 0 && z((w) => {
105
- const k = t.scrollWidth > t.clientWidth;
106
- return w === k ? w : k;
96
+ const D = () => {
97
+ c.current = null, t.clientWidth !== 0 && O((S) => {
98
+ const R = t.scrollWidth > t.clientWidth;
99
+ return S === R ? S : R;
107
100
  });
108
101
  }, v = () => {
109
- c.current === null && (c.current = requestAnimationFrame(I));
102
+ c.current === null && (c.current = requestAnimationFrame(D));
110
103
  };
111
- v(), m.current = M(t, v);
112
- }, []), j = (t) => {
113
- a && (t.stopPropagation(), t.preventDefault(), a());
114
- }, O = [
115
- K(C),
116
- H(r, g, n),
117
- u === "uppercase" ? "uppercase" : "normal-case",
118
- a ? `cursor-pointer ${L}` : `cursor-${R}`,
119
- h ? "min-w-0 max-w-full" : "",
104
+ v(), u.current = V(t, v);
105
+ }, []), k = (t) => {
106
+ r && (t.stopPropagation(), t.preventDefault(), r());
107
+ }, I = [
108
+ _($),
109
+ H(a, d, o),
110
+ f === "uppercase" ? "uppercase" : "normal-case",
111
+ r ? `cursor-pointer ${B}` : m ? `cursor-${m}` : "",
112
+ b ? "min-w-0 max-w-full" : "",
120
113
  N
121
- ].filter(Boolean).join(" "), F = J(r, o, i, g), b = /* @__PURE__ */ W(
114
+ ].filter(Boolean).join(" "), T = {
115
+ ...Q(a, l, s, d),
116
+ ...!r && !m && { cursor: M }
117
+ }, y = /* @__PURE__ */ F(
122
118
  "span",
123
119
  {
124
- className: O,
125
- onClick: j,
126
- tabIndex: a ? 0 : void 0,
127
- onKeyDown: a ? (t) => P(t, a) : void 0,
128
- style: F,
120
+ className: I,
121
+ onClick: k,
122
+ tabIndex: r ? 0 : void 0,
123
+ onKeyDown: r ? (t) => U(t, r) : void 0,
124
+ style: T,
129
125
  children: [
130
- l && d === "left" && /* @__PURE__ */ s("span", { className: "mr-1 flex items-center", style: x, children: l }),
131
- h ? /* @__PURE__ */ s("span", { className: "flex items-center min-w-0", children: /* @__PURE__ */ s("span", { ref: $, className: "block min-w-0 truncate", children: e }, String(e)) }) : /* @__PURE__ */ s("span", { className: "flex items-center", children: e }),
132
- l && d === "right" && /* @__PURE__ */ s("span", { className: "ml-1 flex items-center", style: x, children: l }),
133
- p && /* @__PURE__ */ s(
126
+ i && p === "left" && /* @__PURE__ */ n("span", { className: "mr-1 flex items-center", style: h, children: i }),
127
+ b ? /* @__PURE__ */ n("span", { className: "flex items-center min-w-0", children: /* @__PURE__ */ n("span", { ref: j, className: "block min-w-0 truncate", children: e }, String(e)) }) : /* @__PURE__ */ n("span", { className: "flex items-center", children: e }),
128
+ i && p === "right" && /* @__PURE__ */ n("span", { className: "ml-1 flex items-center", style: h, children: i }),
129
+ g && /* @__PURE__ */ n(
134
130
  "button",
135
131
  {
136
132
  type: "button",
137
133
  "aria-label": `Remove ${typeof e == "string" ? e : ""}`,
138
134
  onClick: (t) => {
139
- t.stopPropagation(), p(t);
135
+ t.stopPropagation(), g(t);
140
136
  },
141
137
  className: "ml-0.5 flex items-center justify-center shrink-0 border-none bg-transparent text-current cursor-pointer p-0 leading-none opacity-70 hover:opacity-100",
142
- children: /* @__PURE__ */ s(D, { size: 9 })
138
+ children: /* @__PURE__ */ n(A, { size: 9 })
143
139
  }
144
140
  )
145
141
  ]
146
142
  }
147
143
  );
148
- return T ? /* @__PURE__ */ s(q, { text: e, placement: "top", wrapChildren: !1, isShrinkable: !0, triggerAs: "span", children: b }) : b;
144
+ return z ? /* @__PURE__ */ n(E, { text: e, placement: "top", wrapChildren: !1, isShrinkable: !0, triggerAs: "span", children: y }) : y;
149
145
  };
150
146
  export {
151
- ae as Tag,
152
- ae as default
147
+ se as Tag,
148
+ se as default
153
149
  };
154
150
  //# sourceMappingURL=Tag.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tag.js","sources":["../../src/components/Tag.tsx"],"sourcesContent":["import React, { useCallback, useRef, useState } from 'react';\nimport DismissIcon from './CustomIcons/DismissIcon';\nimport { FOCUS_RING } from './focusRing';\nimport { activateOnEnterOrSpace } from './keyboardActivation';\nimport Tooltip from './Tooltip';\nimport type { TextColor } from './Typography/Text';\nimport { getTextColor } from './Typography/textStyles';\n\nexport type TagType =\n | 'primary'\n | 'secondary'\n | 'default'\n | 'error'\n | 'warning'\n | 'success'\n | 'emphasis'\n | 'info'\n /** Marks content a machine produced rather than a person — provenance, not severity. */\n | 'assistant';\n\nexport type WidthSize = 'large' | 'medium' | 'small' | 'xsmall';\n\nexport type PaddingSize = 'default' | 'compact';\n\ntype TagFontSize = 'xsmall' | 'small' | 'medium';\n\ninterface TagProps {\n value: string | number | React.ReactNode;\n /** Defaults to 12px. Use `xsmall` for a secondary badge beside a primary one. */\n fontSize?: TagFontSize;\n type?: TagType;\n bordered?: boolean;\n shadow?: boolean;\n textTransform?: 'none' | 'uppercase';\n width?: WidthSize;\n paddingSize?: PaddingSize;\n icon?: React.ReactNode;\n iconPosition?: 'left' | 'right';\n iconColor?: TextColor;\n pointerType?: 'pointer' | 'default';\n onClick?: () => void;\n onRemove?: (e: React.MouseEvent) => void;\n className?: string;\n}\n\nconst getFontSizeClass = (fontSize?: TagFontSize): string => {\n switch (fontSize) {\n case 'xsmall':\n return 'text-[length:var(--malachite-font-size-xsmall)]';\n case 'small':\n return 'text-[length:var(--malachite-font-size-small)]';\n case 'medium':\n return 'text-[length:var(--malachite-font-size-medium)]';\n default:\n return 'text-xs';\n }\n};\n\nconst getWidthClasses = (width?: WidthSize): string => {\n switch (width) {\n case 'large':\n return 'w-[88px]';\n case 'medium':\n return 'w-[44px]';\n case 'small':\n return 'w-[24px]';\n case 'xsmall':\n return 'w-[20px]';\n default:\n return 'w-fit';\n }\n};\n\nconst getPaddingClasses = (paddingSize?: PaddingSize): string => {\n return paddingSize === 'compact' ? 'px-[6px] py-[1px]' : 'px-2 py-1';\n};\n\nconst getBorderRadiusClasses = (paddingSize?: PaddingSize): React.CSSProperties => {\n return {\n borderRadius:\n paddingSize === 'compact' ? 'var(--malachite-radius-md)' : 'var(--malachite-radius-lg)',\n };\n};\n\nconst getTypeClasses = (\n type: TagType,\n paddingSize?: PaddingSize,\n fontSize?: TagFontSize,\n) => {\n const baseClasses = `inline-flex items-center justify-center ${getPaddingClasses(paddingSize)} ${getFontSizeClass(fontSize)} font-medium leading-normal tracking-[0.11px]`;\n\n const typeStyles = {\n primary: {\n bg: 'bg-[var(--malachite-tag-primary-background)]',\n text: 'text-[var(--malachite-tag-primary-foreground)]',\n },\n secondary: {\n bg: 'bg-[var(--malachite-tag-secondary-background)]',\n text: 'text-[var(--malachite-tag-secondary-foreground)]',\n },\n default: {\n bg: 'bg-[var(--malachite-tag-default-background)]',\n text: 'text-[var(--malachite-tag-default-foreground)]',\n },\n error: {\n bg: 'bg-[var(--malachite-tag-error-background)]',\n text: 'text-[var(--malachite-tag-error-foreground)]',\n },\n warning: {\n bg: 'bg-[var(--malachite-tag-warning-background)]',\n text: 'text-[var(--malachite-tag-warning-foreground)]',\n },\n success: {\n bg: 'bg-[var(--malachite-tag-success-background)]',\n text: 'text-[var(--malachite-tag-success-foreground)]',\n },\n emphasis: {\n bg: 'bg-[var(--malachite-tag-emphasis-background)]',\n text: 'text-[var(--malachite-tag-emphasis-foreground)]',\n },\n info: {\n bg: 'bg-[var(--malachite-tag-info-background)]',\n text: 'text-[var(--malachite-tag-info-foreground)]',\n },\n assistant: {\n bg: 'bg-[var(--malachite-tag-assistant-background)]',\n text: 'text-[var(--malachite-tag-assistant-foreground)]',\n },\n };\n\n const style = typeStyles[type];\n const classes = [baseClasses, style.bg, style.text].filter(Boolean);\n\n return classes.join(' ');\n};\n\nconst getTypeStyles = (\n type: TagType,\n bordered?: boolean,\n shadow?: boolean,\n paddingSize?: PaddingSize,\n): React.CSSProperties => {\n const styles: React.CSSProperties = {\n ...getBorderRadiusClasses(paddingSize),\n };\n\n if (bordered) {\n styles.border = `2px solid var(--malachite-tag-${type}-border)`;\n }\n\n if (type === 'emphasis') {\n styles.boxShadow = '0px 0px 10px 0px var(--malachite-tag-emphasis-shadow)';\n } else if (shadow) {\n styles.boxShadow = `0 10px 15px -3px var(--malachite-tag-${type}-shadow)`;\n }\n\n return styles;\n};\n\nconst observeLabelSize = (el: HTMLSpanElement, onResize: () => void): ResizeObserver => {\n const observer = new ResizeObserver(onResize);\n observer.observe(el);\n return observer;\n};\n\nconst Tag: React.FC<TagProps> = ({\n value,\n fontSize,\n type = 'default',\n bordered = false,\n onClick,\n shadow = false,\n textTransform = 'uppercase',\n width,\n paddingSize = 'default',\n icon,\n iconPosition = 'left',\n iconColor,\n pointerType = 'default',\n onRemove,\n className = '',\n}) => {\n const iconColorStyle = iconColor ? { color: getTextColor(iconColor) } : undefined;\n const observerRef = useRef<ResizeObserver | null>(null);\n const frameRef = useRef<number | null>(null);\n const [isTruncated, setIsTruncated] = useState(false);\n\n // Truncation applies to plain text labels; ReactNode values render untouched.\n const isTextLabel = typeof value === 'string' || typeof value === 'number';\n\n // Memoized so the ref keeps a stable identity. An inline ref callback would be\n // re-invoked (null, then the node) on every render, tearing down and recreating\n // the ResizeObserver each time; this way it only runs on mount/unmount.\n const setLabelRef = useCallback((el: HTMLSpanElement | null) => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n if (frameRef.current !== null) {\n cancelAnimationFrame(frameRef.current);\n frameRef.current = null;\n }\n if (!el || typeof ResizeObserver === 'undefined') {\n return;\n }\n const measure = (): void => {\n frameRef.current = null;\n if (el.clientWidth === 0) {\n return;\n }\n setIsTruncated((prev) => {\n const next = el.scrollWidth > el.clientWidth;\n return prev === next ? prev : next;\n });\n };\n const check = (): void => {\n if (frameRef.current !== null) {\n return;\n }\n frameRef.current = requestAnimationFrame(measure);\n };\n check();\n observerRef.current = observeLabelSize(el, check);\n }, []);\n\n const handleClick = (e: React.MouseEvent) => {\n if (onClick) {\n e.stopPropagation();\n e.preventDefault();\n onClick();\n }\n };\n\n const baseClasses = [\n getWidthClasses(width),\n getTypeClasses(type, paddingSize, fontSize),\n textTransform === 'uppercase' ? 'uppercase' : 'normal-case',\n onClick ? `cursor-pointer ${FOCUS_RING}` : `cursor-${pointerType}`,\n isTextLabel ? 'min-w-0 max-w-full' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const typeStyles = getTypeStyles(type, bordered, shadow, paddingSize);\n\n const tag = (\n <span\n className={baseClasses}\n onClick={handleClick}\n // No `role=\"button\"`: it takes presentational children, so a Tag carrying an\n // `onRemove` close button would hide that button from assistive tech.\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={onClick ? (event) => activateOnEnterOrSpace(event, onClick) : undefined}\n style={typeStyles}\n >\n {icon && iconPosition === 'left' && (\n <span className=\"mr-1 flex items-center\" style={iconColorStyle}>\n {icon}\n </span>\n )}\n {isTextLabel ? (\n <span className=\"flex items-center min-w-0\">\n <span key={String(value)} ref={setLabelRef} className=\"block min-w-0 truncate\">\n {value}\n </span>\n </span>\n ) : (\n <span className=\"flex items-center\">{value}</span>\n )}\n {icon && iconPosition === 'right' && (\n <span className=\"ml-1 flex items-center\" style={iconColorStyle}>\n {icon}\n </span>\n )}\n {onRemove && (\n <button\n type=\"button\"\n aria-label={`Remove ${typeof value === 'string' ? value : ''}`}\n onClick={(e) => {\n e.stopPropagation();\n onRemove(e);\n }}\n className=\"ml-0.5 flex items-center justify-center shrink-0 border-none bg-transparent text-current cursor-pointer p-0 leading-none opacity-70 hover:opacity-100\"\n >\n {/* A bare cross, not `CloseIcon`'s circled one: this sits inside the chip\n it removes, where a second enclosing ring reads as an object of its own\n rather than as part of the label. */}\n <DismissIcon size={9} />\n </button>\n )}\n </span>\n );\n\n if (!isTruncated) {\n return tag;\n }\n\n return (\n <Tooltip text={value} placement=\"top\" wrapChildren={false} isShrinkable triggerAs=\"span\">\n {tag}\n </Tooltip>\n );\n};\n\nexport default Tag;\nexport { Tag };\nexport type { TagProps };\n"],"names":["getFontSizeClass","fontSize","getWidthClasses","width","getPaddingClasses","paddingSize","getBorderRadiusClasses","getTypeClasses","type","baseClasses","style","getTypeStyles","bordered","shadow","styles","observeLabelSize","el","onResize","observer","Tag","value","onClick","textTransform","icon","iconPosition","iconColor","pointerType","onRemove","className","iconColorStyle","getTextColor","observerRef","useRef","frameRef","isTruncated","setIsTruncated","useState","isTextLabel","setLabelRef","useCallback","_a","measure","prev","next","check","handleClick","e","FOCUS_RING","typeStyles","tag","jsxs","event","activateOnEnterOrSpace","jsx","DismissIcon","Tooltip"],"mappings":"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"}
1
+ {"version":3,"file":"Tag.js","sources":["../../src/components/Tag.tsx"],"sourcesContent":["import React, { useCallback, useRef, useState } from 'react';\nimport DismissIcon from './CustomIcons/DismissIcon';\nimport { FOCUS_RING } from './focusRing';\nimport { activateOnEnterOrSpace } from './keyboardActivation';\nimport Tooltip from './Tooltip';\nimport type { TextColor } from './Typography/Text';\nimport { getTextColor } from './Typography/textStyles';\n\nexport type TagType =\n | 'primary'\n | 'secondary'\n | 'default'\n | 'error'\n | 'warning'\n | 'success'\n | 'emphasis'\n | 'info'\n /** Marks content a machine produced rather than a person — provenance, not severity. */\n | 'assistant';\n\nexport type WidthSize = 'large' | 'medium' | 'small' | 'xsmall';\n\nexport type PaddingSize = 'default' | 'compact';\n\ntype TagFontSize = 'xsmall' | 'small' | 'medium';\n\ninterface TagProps {\n value: string | number | React.ReactNode;\n /** Defaults to 12px. Use `xsmall` for a secondary badge beside a primary one. */\n fontSize?: TagFontSize;\n type?: TagType;\n bordered?: boolean;\n shadow?: boolean;\n textTransform?: 'none' | 'uppercase';\n width?: WidthSize;\n paddingSize?: PaddingSize;\n icon?: React.ReactNode;\n iconPosition?: 'left' | 'right';\n iconColor?: TextColor;\n /** The cursor over a tag that is not clickable. Unset, it is whatever an ancestor sets\n * through `--malachite-ctx-tag-cursor` (a `NavItem` row sets its pointer), else the arrow. */\n pointerType?: 'pointer' | 'default';\n onClick?: () => void;\n onRemove?: (e: React.MouseEvent) => void;\n className?: string;\n}\n\nconst getFontSizeClass = (fontSize?: TagFontSize): string => {\n switch (fontSize) {\n case 'xsmall':\n return 'text-[length:var(--malachite-font-size-xsmall)]';\n case 'small':\n return 'text-[length:var(--malachite-font-size-small)]';\n case 'medium':\n return 'text-[length:var(--malachite-font-size-medium)]';\n default:\n return 'text-xs';\n }\n};\n\nconst getWidthClasses = (width?: WidthSize): string => {\n switch (width) {\n case 'large':\n return 'w-[88px]';\n case 'medium':\n return 'w-[44px]';\n case 'small':\n return 'w-[24px]';\n case 'xsmall':\n return 'w-[20px]';\n default:\n return 'w-fit';\n }\n};\n\nconst getPaddingClasses = (paddingSize?: PaddingSize): string => {\n return paddingSize === 'compact' ? 'px-[6px] py-[1px]' : 'px-2 py-1';\n};\n\nconst getBorderRadiusClasses = (paddingSize?: PaddingSize): React.CSSProperties => {\n return {\n borderRadius:\n paddingSize === 'compact' ? 'var(--malachite-radius-md)' : 'var(--malachite-radius-lg)',\n };\n};\n\nconst getTypeClasses = (\n type: TagType,\n paddingSize?: PaddingSize,\n fontSize?: TagFontSize,\n) => {\n const baseClasses = `inline-flex items-center justify-center ${getPaddingClasses(paddingSize)} ${getFontSizeClass(fontSize)} font-medium leading-normal tracking-[0.11px]`;\n\n const typeStyles = {\n primary: {\n text: 'text-[var(--malachite-tag-primary-foreground)]',\n },\n secondary: {\n text: 'text-[var(--malachite-tag-secondary-foreground)]',\n },\n default: {\n text: 'text-[var(--malachite-tag-default-foreground)]',\n },\n error: {\n text: 'text-[var(--malachite-tag-error-foreground)]',\n },\n warning: {\n text: 'text-[var(--malachite-tag-warning-foreground)]',\n },\n success: {\n text: 'text-[var(--malachite-tag-success-foreground)]',\n },\n emphasis: {\n text: 'text-[var(--malachite-tag-emphasis-foreground)]',\n },\n info: {\n text: 'text-[var(--malachite-tag-info-foreground)]',\n },\n assistant: {\n text: 'text-[var(--malachite-tag-assistant-foreground)]',\n },\n };\n\n const style = typeStyles[type];\n const classes = [baseClasses, style.text].filter(Boolean);\n\n return classes.join(' ');\n};\n\n/*\n * Context channels, not theme tokens: no palette value, not settable through `applyTheme`,\n * absent from `getCurrentTheme`. The ground goes under the tint, which is translucent and on\n * its own takes the colour of whatever is behind the tag, a row's hover or current tint included.\n */\nconst GROUND = 'var(--malachite-ctx-tag-ground, transparent)';\nconst IDLE_CURSOR = 'var(--malachite-ctx-tag-cursor, default)';\n\nconst getTypeStyles = (\n type: TagType,\n bordered?: boolean,\n shadow?: boolean,\n paddingSize?: PaddingSize,\n): React.CSSProperties => {\n const tint = `var(--malachite-tag-${type}-background)`;\n const styles: React.CSSProperties = {\n ...getBorderRadiusClasses(paddingSize),\n backgroundColor: GROUND,\n backgroundImage: `linear-gradient(${tint}, ${tint})`,\n };\n\n if (bordered) {\n styles.border = `2px solid var(--malachite-tag-${type}-border)`;\n }\n\n if (type === 'emphasis') {\n styles.boxShadow = '0px 0px 10px 0px var(--malachite-tag-emphasis-shadow)';\n } else if (shadow) {\n styles.boxShadow = `0 10px 15px -3px var(--malachite-tag-${type}-shadow)`;\n }\n\n return styles;\n};\n\nconst observeLabelSize = (el: HTMLSpanElement, onResize: () => void): ResizeObserver => {\n const observer = new ResizeObserver(onResize);\n observer.observe(el);\n return observer;\n};\n\nconst Tag: React.FC<TagProps> = ({\n value,\n fontSize,\n type = 'default',\n bordered = false,\n onClick,\n shadow = false,\n textTransform = 'uppercase',\n width,\n paddingSize = 'default',\n icon,\n iconPosition = 'left',\n iconColor,\n pointerType,\n onRemove,\n className = '',\n}) => {\n const iconColorStyle = iconColor ? { color: getTextColor(iconColor) } : undefined;\n const observerRef = useRef<ResizeObserver | null>(null);\n const frameRef = useRef<number | null>(null);\n const [isTruncated, setIsTruncated] = useState(false);\n\n // Truncation applies to plain text labels; ReactNode values render untouched.\n const isTextLabel = typeof value === 'string' || typeof value === 'number';\n\n // Memoized so the ref keeps a stable identity. An inline ref callback would be\n // re-invoked (null, then the node) on every render, tearing down and recreating\n // the ResizeObserver each time; this way it only runs on mount/unmount.\n const setLabelRef = useCallback((el: HTMLSpanElement | null) => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n if (frameRef.current !== null) {\n cancelAnimationFrame(frameRef.current);\n frameRef.current = null;\n }\n if (!el || typeof ResizeObserver === 'undefined') {\n return;\n }\n const measure = (): void => {\n frameRef.current = null;\n if (el.clientWidth === 0) {\n return;\n }\n setIsTruncated((prev) => {\n const next = el.scrollWidth > el.clientWidth;\n return prev === next ? prev : next;\n });\n };\n const check = (): void => {\n if (frameRef.current !== null) {\n return;\n }\n frameRef.current = requestAnimationFrame(measure);\n };\n check();\n observerRef.current = observeLabelSize(el, check);\n }, []);\n\n const handleClick = (e: React.MouseEvent) => {\n if (onClick) {\n e.stopPropagation();\n e.preventDefault();\n onClick();\n }\n };\n\n const baseClasses = [\n getWidthClasses(width),\n getTypeClasses(type, paddingSize, fontSize),\n textTransform === 'uppercase' ? 'uppercase' : 'normal-case',\n onClick ? `cursor-pointer ${FOCUS_RING}` : pointerType ? `cursor-${pointerType}` : '',\n isTextLabel ? 'min-w-0 max-w-full' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const typeStyles = {\n ...getTypeStyles(type, bordered, shadow, paddingSize),\n ...(!onClick && !pointerType && { cursor: IDLE_CURSOR }),\n };\n\n const tag = (\n <span\n className={baseClasses}\n onClick={handleClick}\n // No `role=\"button\"`: it takes presentational children, so a Tag carrying an\n // `onRemove` close button would hide that button from assistive tech.\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={onClick ? (event) => activateOnEnterOrSpace(event, onClick) : undefined}\n style={typeStyles}\n >\n {icon && iconPosition === 'left' && (\n <span className=\"mr-1 flex items-center\" style={iconColorStyle}>\n {icon}\n </span>\n )}\n {isTextLabel ? (\n <span className=\"flex items-center min-w-0\">\n <span key={String(value)} ref={setLabelRef} className=\"block min-w-0 truncate\">\n {value}\n </span>\n </span>\n ) : (\n <span className=\"flex items-center\">{value}</span>\n )}\n {icon && iconPosition === 'right' && (\n <span className=\"ml-1 flex items-center\" style={iconColorStyle}>\n {icon}\n </span>\n )}\n {onRemove && (\n <button\n type=\"button\"\n aria-label={`Remove ${typeof value === 'string' ? value : ''}`}\n onClick={(e) => {\n e.stopPropagation();\n onRemove(e);\n }}\n className=\"ml-0.5 flex items-center justify-center shrink-0 border-none bg-transparent text-current cursor-pointer p-0 leading-none opacity-70 hover:opacity-100\"\n >\n {/* A bare cross, not `CloseIcon`'s circled one: this sits inside the chip\n it removes, where a second enclosing ring reads as an object of its own\n rather than as part of the label. */}\n <DismissIcon size={9} />\n </button>\n )}\n </span>\n );\n\n if (!isTruncated) {\n return tag;\n }\n\n return (\n <Tooltip text={value} placement=\"top\" wrapChildren={false} isShrinkable triggerAs=\"span\">\n {tag}\n </Tooltip>\n );\n};\n\nexport default Tag;\nexport { Tag };\nexport type { TagProps };\n"],"names":["getFontSizeClass","fontSize","getWidthClasses","width","getPaddingClasses","paddingSize","getBorderRadiusClasses","getTypeClasses","type","baseClasses","style","GROUND","IDLE_CURSOR","getTypeStyles","bordered","shadow","tint","styles","observeLabelSize","el","onResize","observer","Tag","value","onClick","textTransform","icon","iconPosition","iconColor","pointerType","onRemove","className","iconColorStyle","getTextColor","observerRef","useRef","frameRef","isTruncated","setIsTruncated","useState","isTextLabel","setLabelRef","useCallback","_a","measure","prev","next","check","handleClick","e","FOCUS_RING","typeStyles","tag","jsxs","event","activateOnEnterOrSpace","jsx","DismissIcon","Tooltip"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4765,6 +4765,8 @@ export declare interface TagProps {
4765
4765
  icon?: default_2.ReactNode;
4766
4766
  iconPosition?: 'left' | 'right';
4767
4767
  iconColor?: TextColor;
4768
+ /** The cursor over a tag that is not clickable. Unset, it is whatever an ancestor sets
4769
+ * through `--malachite-ctx-tag-cursor` (a `NavItem` row sets its pointer), else the arrow. */
4768
4770
  pointerType?: 'pointer' | 'default';
4769
4771
  onClick?: () => void;
4770
4772
  onRemove?: (e: default_2.MouseEvent) => void;