@primer/components 0.0.0-202183020732 → 0.0.0-2021830223623

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/dist/browser.esm.js +771 -716
  3. package/dist/browser.esm.js.map +1 -1
  4. package/dist/browser.umd.js +410 -355
  5. package/dist/browser.umd.js.map +1 -1
  6. package/lib/ActionList/Item.d.ts +16 -4
  7. package/lib/ActionList/Item.js +9 -6
  8. package/lib/ActionList/List.d.ts +11 -7
  9. package/lib/ActionList/List.js +2 -2
  10. package/lib/ActionList/index.d.ts +1 -2
  11. package/lib/Dialog/ConfirmationDialog.js +3 -3
  12. package/lib/Dialog/Dialog.d.ts +5 -0
  13. package/lib/Dialog/Dialog.js +16 -4
  14. package/lib/Token/Token.d.ts +14 -0
  15. package/lib/Token/Token.js +76 -0
  16. package/lib/Token/TokenBase.d.ts +16 -0
  17. package/lib/Token/TokenBase.js +90 -0
  18. package/lib/Token/TokenLabel.d.ts +14 -0
  19. package/lib/Token/TokenLabel.js +141 -0
  20. package/lib/Token/TokenProfile.d.ts +7 -0
  21. package/lib/Token/TokenProfile.js +50 -0
  22. package/lib/Token/_RemoveTokenButton.d.ts +3 -0
  23. package/lib/Token/_RemoveTokenButton.js +44 -0
  24. package/lib/Token/_tokenButtonUtils.d.ts +10 -0
  25. package/lib/Token/_tokenButtonUtils.js +42 -0
  26. package/lib/Token/index.d.ts +3 -0
  27. package/lib/Token/index.js +31 -0
  28. package/lib/index.d.ts +1 -0
  29. package/lib/index.js +20 -0
  30. package/lib-esm/ActionList/Item.d.ts +16 -4
  31. package/lib-esm/ActionList/Item.js +8 -5
  32. package/lib-esm/ActionList/List.d.ts +11 -7
  33. package/lib-esm/ActionList/List.js +2 -2
  34. package/lib-esm/ActionList/index.d.ts +1 -2
  35. package/lib-esm/Dialog/ConfirmationDialog.js +3 -3
  36. package/lib-esm/Dialog/Dialog.d.ts +5 -0
  37. package/lib-esm/Dialog/Dialog.js +17 -5
  38. package/lib-esm/Token/Token.d.ts +14 -0
  39. package/lib-esm/Token/Token.js +57 -0
  40. package/lib-esm/Token/TokenBase.d.ts +16 -0
  41. package/lib-esm/Token/TokenBase.js +70 -0
  42. package/lib-esm/Token/TokenLabel.d.ts +14 -0
  43. package/lib-esm/Token/TokenLabel.js +121 -0
  44. package/lib-esm/Token/TokenProfile.d.ts +7 -0
  45. package/lib-esm/Token/TokenProfile.js +29 -0
  46. package/lib-esm/Token/_RemoveTokenButton.d.ts +3 -0
  47. package/lib-esm/Token/_RemoveTokenButton.js +29 -0
  48. package/lib-esm/Token/_tokenButtonUtils.d.ts +10 -0
  49. package/lib-esm/Token/_tokenButtonUtils.js +26 -0
  50. package/lib-esm/Token/index.d.ts +3 -0
  51. package/lib-esm/Token/index.js +3 -0
  52. package/lib-esm/index.d.ts +1 -0
  53. package/lib-esm/index.js +1 -0
  54. package/package.json +8 -5
@@ -2,10 +2,12 @@ import { IconProps } from '@primer/octicons-react';
2
2
  import React from 'react';
3
3
  import { SxProp } from '../sx';
4
4
  import { ItemInput } from './List';
5
+ import { ForwardRefComponent as PolymorphicForwardRefComponent } from '@radix-ui/react-polymorphic';
6
+ import { AriaRole } from '../utils/types';
5
7
  /**
6
8
  * Contract for props passed to the `Item` component.
7
9
  */
8
- export interface ItemProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'id'>, SxProp {
10
+ export interface ItemProps extends SxProp {
9
11
  /**
10
12
  * Primary text which names an `Item`.
11
13
  */
@@ -68,6 +70,18 @@ export interface ItemProps extends Omit<React.ComponentPropsWithoutRef<'div'>, '
68
70
  * An id associated with this item. Should be unique between items
69
71
  */
70
72
  id?: number | string;
73
+ /**
74
+ * Node to be included inside the item before the text.
75
+ */
76
+ children?: React.ReactNode;
77
+ /**
78
+ * The ARIA role describing the function of `List` component. `option` is a common value.
79
+ */
80
+ role?: AriaRole;
81
+ /**
82
+ * An item to pass back in the `onAction` callback, meant as
83
+ */
84
+ item?: ItemInput;
71
85
  }
72
86
  export declare const TextContainer: import("styled-components").StyledComponent<"span", any, {
73
87
  dangerouslySetInnerHtml?: React.DOMAttributes<HTMLDivElement>['dangerouslySetInnerHTML'];
@@ -75,6 +89,4 @@ export declare const TextContainer: import("styled-components").StyledComponent<
75
89
  /**
76
90
  * An actionable or selectable `Item` with an optional icon and description.
77
91
  */
78
- export declare function Item(itemProps: Partial<ItemProps> & {
79
- item?: ItemInput;
80
- }): JSX.Element;
92
+ export declare const Item: PolymorphicForwardRefComponent<"div", ItemProps>;
@@ -3,8 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.Item = Item;
7
- exports.TextContainer = void 0;
6
+ exports.Item = exports.TextContainer = void 0;
8
7
 
9
8
  var _octiconsReact = require("@primer/octicons-react");
10
9
 
@@ -111,7 +110,7 @@ const MainContent = _styledComponents.default.div.withConfig({
111
110
  const StyledItem = _styledComponents.default.div.withConfig({
112
111
  displayName: "Item__StyledItem",
113
112
  componentId: "jqpvy8-2"
114
- })(["padding:6px ", ";display:flex;border-radius:", ";color:", ";transition:background 33.333ms linear;@media (hover:hover) and (pointer:fine){:hover{background:var(--item-hover-bg-override,", ");cursor:", ";}}:not(:first-of-type):not(", " + &):not(", " + &){margin-top:", ";", "::before{content:' ';display:block;position:absolute;width:100%;top:-7px;border:0 solid ", ";border-top-width:", ";}}&:hover ", "::before,:hover + * ", "::before{border-color:var(--item-hover-divider-border-color-override,transparent) !important;}&:focus ", "::before,:focus + * ", "::before,&[", "] ", "::before,[", "] + & ", "::before{border-color:transparent !important;}&[", "='", "']{background:", ";}&[", "='", "']{background:", ";}&:focus{background:", ";outline:none;}&:active{background:", ";}", ""], (0, _constants.get)('space.2'), (0, _constants.get)('radii.2'), ({
113
+ })(["padding:6px ", ";display:flex;border-radius:", ";color:", ";transition:background 33.333ms linear;text-decoration:none;@media (hover:hover) and (pointer:fine){:hover{background:var(--item-hover-bg-override,", ");cursor:", ";}}:not(:first-of-type):not(", " + &):not(", " + &){margin-top:", ";", "::before{content:' ';display:block;position:absolute;width:100%;top:-7px;border:0 solid ", ";border-top-width:", ";}}&:hover ", "::before,:hover + * ", "::before{border-color:var(--item-hover-divider-border-color-override,transparent) !important;}&:focus ", "::before,:focus + * ", "::before,&[", "] ", "::before,[", "] + & ", "::before{border-color:transparent !important;}&[", "='", "']{background:", ";}&[", "='", "']{background:", ";}&:focus{background:", ";outline:none;}&:active{background:", ";}", ""], (0, _constants.get)('space.2'), (0, _constants.get)('radii.2'), ({
115
114
  variant,
116
115
  item
117
116
  }) => getItemVariant(variant, item === null || item === void 0 ? void 0 : item.disabled).color, ({
@@ -178,8 +177,9 @@ const MultiSelectInput = _styledComponents.default.input.withConfig({
178
177
  */
179
178
 
180
179
 
181
- function Item(itemProps) {
180
+ const Item = /*#__PURE__*/_react.default.forwardRef((itemProps, ref) => {
182
181
  const {
182
+ as: Component,
183
183
  text,
184
184
  description,
185
185
  descriptionVariant = 'inline',
@@ -235,6 +235,8 @@ function Item(itemProps) {
235
235
  theme
236
236
  } = (0, _ThemeProvider.useTheme)();
237
237
  return /*#__PURE__*/_react.default.createElement(StyledItem, _extends({
238
+ ref: ref,
239
+ as: Component,
238
240
  tabIndex: disabled ? undefined : -1,
239
241
  variant: variant,
240
242
  showDivider: showDivider,
@@ -280,6 +282,7 @@ function Item(itemProps) {
280
282
  variant: variant,
281
283
  disabled: disabled
282
284
  }, trailingText, TrailingIcon && /*#__PURE__*/_react.default.createElement(TrailingIcon, null)) : null));
283
- }
285
+ });
284
286
 
285
- Item.displayName = "Item";
287
+ exports.Item = Item;
288
+ Item.displayName = 'ActionList.Item';
@@ -1,9 +1,12 @@
1
- import React from 'react';
1
+ import React, { Key } from 'react';
2
2
  import type { AriaRole } from '../utils/types';
3
3
  import { Group, GroupProps } from './Group';
4
- import { Item, ItemProps } from './Item';
5
- export declare type ItemInput = ItemProps | (Partial<ItemProps> & {
6
- renderItem: typeof Item;
4
+ import { ItemProps } from './Item';
5
+ declare type RenderItemFn = (props: ItemProps) => React.ReactElement;
6
+ export declare type ItemInput = ItemProps | ((Partial<ItemProps> & {
7
+ renderItem: RenderItemFn;
8
+ }) & {
9
+ key?: Key;
7
10
  });
8
11
  /**
9
12
  * Contract for props passed to the `List` component.
@@ -26,7 +29,7 @@ export interface ListPropsBase {
26
29
  * without a `Group`-level or `Item`-level custom `Item` renderer will be
27
30
  * rendered using this function component.
28
31
  */
29
- renderItem?: typeof Item;
32
+ renderItem?: RenderItemFn;
30
33
  /**
31
34
  * A `List`-level custom `Group` renderer. Every `Group` within this `List`
32
35
  * without a `Group`-level custom `Item` renderer will be rendered using
@@ -58,7 +61,7 @@ export interface GroupedListProps extends ListPropsBase {
58
61
  * and `Group`-level custom `Item` or `Group` renderers.
59
62
  */
60
63
  groupMetadata: ((Omit<GroupProps, 'items'> | Omit<Partial<GroupProps> & {
61
- renderItem?: typeof Item;
64
+ renderItem?: RenderItemFn;
62
65
  renderGroup?: typeof Group;
63
66
  }, 'items'>) & {
64
67
  groupId: string;
@@ -68,7 +71,7 @@ export interface GroupedListProps extends ListPropsBase {
68
71
  * and `Item`-level custom `Item` renderers.
69
72
  */
70
73
  items: ((ItemProps | (Partial<ItemProps> & {
71
- renderItem: typeof Item;
74
+ renderItem: RenderItemFn;
72
75
  })) & {
73
76
  groupId: string;
74
77
  })[];
@@ -81,3 +84,4 @@ export declare type ListProps = ListPropsBase | GroupedListProps;
81
84
  * Lists `Item`s, either grouped or ungrouped, with a `Divider` between each `Group`.
82
85
  */
83
86
  export declare const List: React.ForwardRefExoticComponent<ListProps & React.RefAttributes<HTMLDivElement>>;
87
+ export {};
@@ -106,11 +106,11 @@ const List = /*#__PURE__*/_react.default.forwardRef((props, forwardedRef) => {
106
106
 
107
107
 
108
108
  const renderItem = (itemProps, item, itemIndex) => {
109
- var _ref2, _itemProps$key, _itemProps$id;
109
+ var _ref2, _ref3, _itemProps$id;
110
110
 
111
111
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
112
112
  const ItemComponent = 'renderItem' in itemProps && itemProps.renderItem || props.renderItem || _Item.Item;
113
- const key = (_ref2 = (_itemProps$key = itemProps.key) !== null && _itemProps$key !== void 0 ? _itemProps$key : (_itemProps$id = itemProps.id) === null || _itemProps$id === void 0 ? void 0 : _itemProps$id.toString()) !== null && _ref2 !== void 0 ? _ref2 : itemIndex.toString();
113
+ const key = (_ref2 = (_ref3 = 'key' in itemProps ? itemProps.key : undefined) !== null && _ref3 !== void 0 ? _ref3 : (_itemProps$id = itemProps.id) === null || _itemProps$id === void 0 ? void 0 : _itemProps$id.toString()) !== null && _ref2 !== void 0 ? _ref2 : itemIndex.toString();
114
114
  return /*#__PURE__*/_react.default.createElement(ItemComponent, _extends({
115
115
  showDivider: props.showItemDividers,
116
116
  selectionVariant: props.selectionVariant
@@ -1,6 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  import { Group } from './Group';
3
- import { Item } from './Item';
4
3
  import { Divider } from './Divider';
5
4
  export type { ListProps as ActionListProps } from './List';
6
5
  export type { GroupProps } from './Group';
@@ -12,7 +11,7 @@ export declare const ActionList: import("react").ForwardRefExoticComponent<impor
12
11
  /** Collects related `Items` in an `ActionList`. */
13
12
  Group: typeof Group;
14
13
  /** An actionable or selectable `Item` with an optional icon and description. */
15
- Item: typeof Item;
14
+ Item: import("@radix-ui/react-polymorphic").ForwardRefComponent<"div", import("./Item").ItemProps>;
16
15
  /** Visually separates `Item`s or `Group`s in an `ActionList`. */
17
16
  Divider: typeof Divider;
18
17
  };
@@ -117,13 +117,13 @@ const ConfirmationDialog = props => {
117
117
  }, [onClose]);
118
118
  const cancelButton = {
119
119
  content: cancelButtonContent,
120
- onClick: onCancelButtonClick,
121
- autoFocus: true
120
+ onClick: onCancelButtonClick
122
121
  };
123
122
  const confirmButton = {
124
123
  content: confirmButtonContent,
125
124
  buttonType: confirmButtonType,
126
- onClick: onConfirmButtonClick
125
+ onClick: onConfirmButtonClick,
126
+ autoFocus: true
127
127
  };
128
128
  const footerButtons = [cancelButton, confirmButton];
129
129
  return /*#__PURE__*/_react.default.createElement(_Dialog.Dialog, {
@@ -19,6 +19,11 @@ export declare type DialogButtonProps = ButtonProps & {
19
19
  * focus this button automatically when the dialog appears.
20
20
  */
21
21
  autoFocus?: boolean;
22
+ /**
23
+ * A reference to the rendered Button’s DOM node, used together with
24
+ * `autoFocus` for `focusTrap`’s `initialFocus`.
25
+ */
26
+ ref?: React.RefObject<HTMLButtonElement>;
22
27
  };
23
28
  /**
24
29
  * Props to customize the rendering of the Dialog.
@@ -141,10 +141,19 @@ const _Dialog = /*#__PURE__*/_react.default.forwardRef((props, forwardedRef) =>
141
141
  onClose,
142
142
  role = 'dialog',
143
143
  width = 'xlarge',
144
- height = 'auto'
144
+ height = 'auto',
145
+ footerButtons = []
145
146
  } = props;
146
147
  const dialogLabelId = (0, _ssr.useSSRSafeId)();
147
148
  const dialogDescriptionId = (0, _ssr.useSSRSafeId)();
149
+ const autoFocusedFooterButtonRef = (0, _react.useRef)(null);
150
+
151
+ for (const footerButton of footerButtons) {
152
+ if (footerButton.autoFocus) {
153
+ footerButton.ref = autoFocusedFooterButtonRef;
154
+ }
155
+ }
156
+
148
157
  const defaultedProps = { ...props,
149
158
  title,
150
159
  subtitle,
@@ -157,7 +166,8 @@ const _Dialog = /*#__PURE__*/_react.default.forwardRef((props, forwardedRef) =>
157
166
  const backdropRef = (0, _react.useRef)(null);
158
167
  (0, _useFocusTrap.useFocusTrap)({
159
168
  containerRef: dialogRef,
160
- restoreFocusOnCleanUp: true
169
+ restoreFocusOnCleanUp: true,
170
+ initialFocusRef: autoFocusedFooterButtonRef
161
171
  });
162
172
  (0, _hooks.useOnEscapePress)(event => {
163
173
  onClose('escape');
@@ -212,7 +222,9 @@ const buttonTypes = {
212
222
  const Buttons = ({
213
223
  buttons
214
224
  }) => {
215
- const autoFocusRef = (0, _react.useRef)(null);
225
+ var _buttons$find;
226
+
227
+ const autoFocusRef = (0, _hooks.useProvidedRefOrCreate)((_buttons$find = buttons.find(button => button.autoFocus)) === null || _buttons$find === void 0 ? void 0 : _buttons$find.ref);
216
228
  let autoFocusCount = 0;
217
229
  const [hasRendered, setHasRendered] = (0, _react.useState)(0);
218
230
  (0, _react.useEffect)(() => {
@@ -224,7 +236,7 @@ const Buttons = ({
224
236
  } else {
225
237
  setHasRendered(hasRendered + 1);
226
238
  }
227
- }, [hasRendered]);
239
+ }, [autoFocusRef, hasRendered]);
228
240
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, buttons.map((dialogButtonProps, index) => {
229
241
  const {
230
242
  content,
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import { TokenBaseProps } from './TokenBase';
3
+ export interface TokenProps extends TokenBaseProps {
4
+ /**
5
+ * A function that renders a component before the token text
6
+ */
7
+ leadingVisual?: React.FunctionComponent<any>;
8
+ /**
9
+ * Whether the remove button should be rendered in the token
10
+ */
11
+ hideRemoveButton?: boolean;
12
+ }
13
+ declare const Token: React.ForwardRefExoticComponent<Pick<TokenProps, "sizes" | "color" | "content" | "height" | "translate" | "width" | "hidden" | "children" | "value" | "cite" | "data" | "form" | "label" | "slot" | "span" | "style" | "summary" | "title" | "pattern" | "text" | "list" | "default" | "type" | "name" | "key" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "id" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "start" | "step" | "wrap" | "open" | "max" | "media" | "method" | "min" | "target" | "crossOrigin" | "href" | "classID" | "useMap" | "wmode" | "download" | "hrefLang" | "rel" | "alt" | "coords" | "shape" | "autoPlay" | "controls" | "loop" | "mediaGroup" | "muted" | "playsInline" | "preload" | "src" | "autoFocus" | "disabled" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "dateTime" | "acceptCharset" | "action" | "autoComplete" | "encType" | "noValidate" | "manifest" | "allowFullScreen" | "allowTransparency" | "frameBorder" | "marginHeight" | "marginWidth" | "sandbox" | "scrolling" | "seamless" | "srcDoc" | "srcSet" | "async" | "accept" | "capture" | "checked" | "maxLength" | "minLength" | "multiple" | "readOnly" | "required" | "challenge" | "keyType" | "keyParams" | "htmlFor" | "as" | "integrity" | "charSet" | "httpEquiv" | "high" | "low" | "optimum" | "reversed" | "selected" | "defer" | "nonce" | "scoped" | "cellPadding" | "cellSpacing" | "colSpan" | "headers" | "rowSpan" | "scope" | "cols" | "rows" | "kind" | "srcLang" | "poster" | "variant" | "leadingVisual" | "handleRemove" | "isSelected" | "hideRemoveButton"> & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement | HTMLSpanElement>>;
14
+ export default Token;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+
12
+ var _constants = require("../constants");
13
+
14
+ var _TokenBase = _interopRequireWildcard(require("./TokenBase"));
15
+
16
+ var _RemoveTokenButton = _interopRequireDefault(require("./_RemoveTokenButton"));
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
+
22
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+
24
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
25
+
26
+ const tokenBorderWidthPx = 1;
27
+ const DefaultTokenStyled = (0, _styledComponents.default)(_TokenBase.default).withConfig({
28
+ displayName: "Token__DefaultTokenStyled",
29
+ componentId: "sc-1dg52pw-0"
30
+ })(["background-color:", ";border-color:", ";border-style:solid;border-width:1px;color:", ";max-width:100%;padding-right:", ";&:hover{background-color:", ";box-shadow:", ";color:", ";}"], (0, _constants.get)('colors.neutral.subtle'), props => props.isSelected ? (0, _constants.get)('colors.fg.default') : (0, _constants.get)('colors.border.subtle'), props => props.isSelected ? (0, _constants.get)('colors.fg.default') : (0, _constants.get)('colors.fg.muted'), props => !props.hideRemoveButton ? 0 : undefined, props => (0, _TokenBase.isTokenInteractive)(props) ? (0, _constants.get)('colors.neutral.muted') : undefined, props => (0, _TokenBase.isTokenInteractive)(props) ? (0, _constants.get)('colors.shadow.medium') : undefined, props => (0, _TokenBase.isTokenInteractive)(props) ? (0, _constants.get)('colors.fg.default') : undefined);
31
+ const TokenTextContainer = (0, _styledComponents.default)('span').withConfig({
32
+ displayName: "Token__TokenTextContainer",
33
+ componentId: "sc-1dg52pw-1"
34
+ })(["flex-grow:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;"]);
35
+ const LeadingVisualContainer = (0, _styledComponents.default)('span').withConfig({
36
+ displayName: "Token__LeadingVisualContainer",
37
+ componentId: "sc-1dg52pw-2"
38
+ })(["flex-shrink:0;line-height:0;"]);
39
+ const Token = /*#__PURE__*/(0, _react.forwardRef)((props, forwardedRef) => {
40
+ const {
41
+ as,
42
+ handleRemove,
43
+ id,
44
+ leadingVisual: LeadingVisual,
45
+ ref,
46
+ text,
47
+ variant,
48
+ hideRemoveButton,
49
+ ...rest
50
+ } = props;
51
+ const hasMultipleActionTargets = (0, _TokenBase.isTokenInteractive)(props) && Boolean(handleRemove) && !hideRemoveButton;
52
+
53
+ const handleRemoveClick = e => {
54
+ e.stopPropagation();
55
+ handleRemove && handleRemove();
56
+ };
57
+
58
+ return /*#__PURE__*/_react.default.createElement(DefaultTokenStyled, _extends({
59
+ as: as,
60
+ handleRemove: handleRemove,
61
+ hideRemoveButton: hideRemoveButton || !handleRemove,
62
+ id: id === null || id === void 0 ? void 0 : id.toString(),
63
+ text: text,
64
+ ref: forwardedRef,
65
+ variant: variant
66
+ }, rest), LeadingVisual ? /*#__PURE__*/_react.default.createElement(LeadingVisualContainer, null, /*#__PURE__*/_react.default.createElement(LeadingVisual, null)) : null, /*#__PURE__*/_react.default.createElement(TokenTextContainer, null, text), !hideRemoveButton && handleRemove ? /*#__PURE__*/_react.default.createElement(_RemoveTokenButton.default, {
67
+ borderOffset: tokenBorderWidthPx,
68
+ parentTokenTag: as || 'span',
69
+ onClick: handleRemoveClick,
70
+ variant: variant,
71
+ parentTokenIsInteractive: (0, _TokenBase.isTokenInteractive)(props),
72
+ "aria-hidden": hasMultipleActionTargets ? "true" : "false"
73
+ }) : null);
74
+ });
75
+ var _default = Token;
76
+ exports.default = _default;
@@ -0,0 +1,16 @@
1
+ /// <reference types="react" />
2
+ export declare type TokenSizeKeys = 'sm' | 'md' | 'lg' | 'xl';
3
+ export declare const tokenSizes: Record<TokenSizeKeys, number>;
4
+ export declare const defaultTokenSize = "md";
5
+ export interface TokenBaseProps extends Omit<React.HTMLProps<HTMLSpanElement | HTMLButtonElement | HTMLAnchorElement>, 'size' | 'id'> {
6
+ as?: 'button' | 'a' | 'span';
7
+ handleRemove?: () => void;
8
+ isSelected?: boolean;
9
+ tabIndex?: number;
10
+ text: string;
11
+ id?: number | string;
12
+ variant?: TokenSizeKeys;
13
+ }
14
+ export declare const isTokenInteractive: ({ as, onClick, onFocus, tabIndex }: TokenBaseProps) => boolean;
15
+ declare const TokenBase: import("styled-components").StyledComponent<"span", any, TokenBaseProps, never>;
16
+ export default TokenBase;
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.isTokenInteractive = exports.defaultTokenSize = exports.tokenSizes = void 0;
7
+
8
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
9
+
10
+ var _styledSystem = require("styled-system");
11
+
12
+ var _constants = require("../constants");
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ const tokenSizes = {
17
+ sm: 16,
18
+ md: 20,
19
+ lg: 24,
20
+ xl: 32
21
+ };
22
+ exports.tokenSizes = tokenSizes;
23
+ const defaultTokenSize = 'md';
24
+ exports.defaultTokenSize = defaultTokenSize;
25
+
26
+ const isTokenInteractive = ({
27
+ as = 'span',
28
+ onClick,
29
+ onFocus,
30
+ tabIndex = -1
31
+ }) => Boolean(onFocus || onClick || tabIndex > -1 || ['a', 'button'].includes(as));
32
+
33
+ exports.isTokenInteractive = isTokenInteractive;
34
+ const variants = (0, _styledSystem.variant)({
35
+ variants: {
36
+ sm: {
37
+ fontSize: 0,
38
+ gap: 1,
39
+ height: `${tokenSizes.sm}px`,
40
+ paddingLeft: 1,
41
+ paddingRight: 1
42
+ },
43
+ md: {
44
+ fontSize: 0,
45
+ gap: 1,
46
+ height: `${tokenSizes.md}px`,
47
+ paddingLeft: 2,
48
+ paddingRight: 2
49
+ },
50
+ lg: {
51
+ fontSize: 0,
52
+ gap: 2,
53
+ height: `${tokenSizes.lg}px`,
54
+ paddingLeft: 2,
55
+ paddingRight: 2
56
+ },
57
+ xl: {
58
+ fontSize: 1,
59
+ gap: 2,
60
+ height: `${tokenSizes.xl}px`,
61
+ paddingLeft: 3,
62
+ paddingRight: 3
63
+ }
64
+ }
65
+ });
66
+
67
+ const TokenBase = _styledComponents.default.span.attrs(({
68
+ text,
69
+ handleRemove,
70
+ onKeyUp
71
+ }) => ({
72
+ onKeyUp: e => {
73
+ onKeyUp && onKeyUp(e);
74
+
75
+ if ((e.key === 'Backspace' || e.key === 'Delete') && handleRemove) {
76
+ handleRemove();
77
+ }
78
+ },
79
+ 'aria-label': handleRemove ? `${text}, press backspace or delete to remove` : undefined
80
+ })).withConfig({
81
+ displayName: "TokenBase",
82
+ componentId: "opajvp-0"
83
+ })(["align-items:center;border-radius:999px;cursor:", ";display:inline-flex;font-weight:", ";text-decoration:none;white-space:nowrap;", ""], props => isTokenInteractive(props) ? 'pointer' : 'auto', (0, _constants.get)('fontWeights.bold'), variants);
84
+
85
+ TokenBase.defaultProps = {
86
+ as: 'span',
87
+ variant: defaultTokenSize
88
+ };
89
+ var _default = TokenBase;
90
+ exports.default = _default;
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import { TokenBaseProps } from './TokenBase';
3
+ export interface TokenLabelProps extends TokenBaseProps {
4
+ /**
5
+ * The color that corresponds to the label
6
+ */
7
+ fillColor?: string;
8
+ /**
9
+ * Whether the remove button should be rendered in the token
10
+ */
11
+ hideRemoveButton?: boolean;
12
+ }
13
+ declare const TokenLabel: React.ForwardRefExoticComponent<Pick<TokenLabelProps, "sizes" | "color" | "content" | "height" | "translate" | "width" | "hidden" | "children" | "value" | "cite" | "data" | "form" | "label" | "slot" | "span" | "style" | "summary" | "title" | "pattern" | "text" | "list" | "default" | "type" | "name" | "key" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "id" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "start" | "step" | "wrap" | "open" | "max" | "media" | "method" | "min" | "target" | "crossOrigin" | "href" | "classID" | "useMap" | "wmode" | "download" | "hrefLang" | "rel" | "alt" | "coords" | "shape" | "autoPlay" | "controls" | "loop" | "mediaGroup" | "muted" | "playsInline" | "preload" | "src" | "autoFocus" | "disabled" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "dateTime" | "acceptCharset" | "action" | "autoComplete" | "encType" | "noValidate" | "manifest" | "allowFullScreen" | "allowTransparency" | "frameBorder" | "marginHeight" | "marginWidth" | "sandbox" | "scrolling" | "seamless" | "srcDoc" | "srcSet" | "async" | "accept" | "capture" | "checked" | "maxLength" | "minLength" | "multiple" | "readOnly" | "required" | "challenge" | "keyType" | "keyParams" | "htmlFor" | "as" | "integrity" | "charSet" | "httpEquiv" | "high" | "low" | "optimum" | "reversed" | "selected" | "defer" | "nonce" | "scoped" | "cellPadding" | "cellSpacing" | "colSpan" | "headers" | "rowSpan" | "scope" | "cols" | "rows" | "kind" | "srcLang" | "poster" | "variant" | "handleRemove" | "isSelected" | "hideRemoveButton" | "fillColor"> & React.RefAttributes<HTMLElement>>;
14
+ export default TokenLabel;
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _styledComponents = _interopRequireWildcard(require("styled-components"));
11
+
12
+ var _TokenBase = _interopRequireWildcard(require("./TokenBase"));
13
+
14
+ var _RemoveTokenButton = _interopRequireDefault(require("./_RemoveTokenButton"));
15
+
16
+ var _tinycolor = _interopRequireDefault(require("tinycolor2"));
17
+
18
+ var _ThemeProvider = require("../ThemeProvider");
19
+
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+
24
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
+
26
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
27
+
28
+ const colorModeConfigs = {
29
+ dark: {
30
+ bgOpacity: 0.18,
31
+ borderThreshold: 0,
32
+ borderOpacity: 0.3,
33
+ lightnessThreshold: 0.6
34
+ },
35
+ light: {
36
+ bgOpacity: 1,
37
+ borderThreshold: 0.96,
38
+ borderOpacity: 1,
39
+ lightnessThreshold: 0.453
40
+ }
41
+ };
42
+ const tokenBorderWidthPx = 1;
43
+ const StyledTokenLabel = (0, _styledComponents.default)(_TokenBase.default).withConfig({
44
+ displayName: "TokenLabel__StyledTokenLabel",
45
+ componentId: "sc-1bdmgzv-0"
46
+ })(["background-color:", ";border-width:", "px;border-style:solid;border-color:", ";color:", ";padding-right:", ";position:relative;", ""], props => props.bgColor, tokenBorderWidthPx, props => props.borderColor, props => props.textColor, props => !props.hideRemoveButton ? 0 : undefined, props => {
47
+ if (props.isSelected) {
48
+ return (0, _styledComponents.css)(["&:after{content:'';position:absolute;z-index:1;top:-2px;right:-2px;bottom:-2px;left:-2px;display:block;pointer-events:none;box-shadow:0 0 0 2px ", ";border-radius:999px;}"], props.bgColor);
49
+ }
50
+ });
51
+ const TokenTextContainer = (0, _styledComponents.default)('span').withConfig({
52
+ displayName: "TokenLabel__TokenTextContainer",
53
+ componentId: "sc-1bdmgzv-1"
54
+ })(["flex-grow:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;"]);
55
+ const TokenLabel = /*#__PURE__*/(0, _react.forwardRef)((props, forwardedRef) => {
56
+ const {
57
+ as,
58
+ fillColor,
59
+ handleRemove,
60
+ id,
61
+ isSelected,
62
+ ref,
63
+ text,
64
+ variant,
65
+ hideRemoveButton,
66
+ ...rest
67
+ } = props;
68
+ const {
69
+ colorScheme
70
+ } = (0, _ThemeProvider.useTheme)();
71
+ const {
72
+ bgOpacity,
73
+ borderOpacity,
74
+ borderThreshold,
75
+ lightnessThreshold
76
+ } = colorModeConfigs[colorScheme || 'light'];
77
+ let bgColor = fillColor;
78
+ let borderColor = fillColor;
79
+ let textColor = '#FFF';
80
+ const perceivedLightness = (0, _tinycolor.default)(fillColor).getLuminance();
81
+ const isFillColorLight = perceivedLightness >= lightnessThreshold;
82
+
83
+ if (colorScheme === 'dark') {
84
+ const lightenBy = (perceivedLightness - lightnessThreshold) * 100 * (isFillColorLight ? 1 : 0);
85
+ bgColor = isSelected ? (0, _tinycolor.default)(fillColor).setAlpha(bgOpacity * 1.2).toRgbString() : (0, _tinycolor.default)(fillColor).setAlpha(bgOpacity).toRgbString();
86
+ textColor = isSelected ? (0, _tinycolor.default)(fillColor).lighten(lightenBy + 10).toString() : (0, _tinycolor.default)(fillColor).lighten(lightenBy).toString();
87
+ borderColor = isSelected ? (0, _tinycolor.default)(fillColor).lighten(lightenBy + 5).toRgbString() : (0, _tinycolor.default)(fillColor).lighten(lightenBy).setAlpha(borderOpacity).toRgbString();
88
+ } else {
89
+ const isFillColorDark = perceivedLightness < 0.1;
90
+ borderColor = perceivedLightness >= borderThreshold ? (0, _tinycolor.default)(fillColor).darken(25).toString() : 'transparent';
91
+
92
+ if (isFillColorLight) {
93
+ textColor = '#000';
94
+ }
95
+
96
+ if (isSelected) {
97
+ bgColor = isFillColorDark ? (0, _tinycolor.default)(fillColor).lighten(10).toString() // TODO: darken more than 10 if the fillColor is really bright and doesn't darken well
98
+ // Examples of colors that don't darken well:
99
+ // - #a2eeef
100
+ // - #ffd78e
101
+ // - #a4f287
102
+ : (0, _tinycolor.default)(fillColor).darken(10).toString();
103
+ }
104
+ }
105
+
106
+ const hasMultipleActionTargets = (0, _TokenBase.isTokenInteractive)(props) && Boolean(handleRemove) && !hideRemoveButton;
107
+
108
+ const handleRemoveClick = e => {
109
+ e.stopPropagation();
110
+ handleRemove && handleRemove();
111
+ };
112
+
113
+ return /*#__PURE__*/_react.default.createElement(StyledTokenLabel // specific to labels
114
+ , _extends({
115
+ fillColor: fillColor,
116
+ bgColor: bgColor,
117
+ borderColor: borderColor,
118
+ textColor: textColor // common token props
119
+ ,
120
+ as: as,
121
+ hideRemoveButton: hideRemoveButton || !handleRemove,
122
+ handleRemove: handleRemove,
123
+ id: id === null || id === void 0 ? void 0 : id.toString(),
124
+ isSelected: isSelected,
125
+ ref: forwardedRef,
126
+ text: text,
127
+ variant: variant
128
+ }, rest), /*#__PURE__*/_react.default.createElement(TokenTextContainer, null, text), !hideRemoveButton && handleRemove ? /*#__PURE__*/_react.default.createElement(_RemoveTokenButton.default, {
129
+ borderOffset: tokenBorderWidthPx,
130
+ parentTokenTag: as || 'span',
131
+ tabIndex: -1,
132
+ onClick: handleRemoveClick,
133
+ variant: variant,
134
+ "aria-hidden": hasMultipleActionTargets ? "true" : "false"
135
+ }) : null);
136
+ });
137
+ TokenLabel.defaultProps = {
138
+ fillColor: '#999'
139
+ };
140
+ var _default = TokenLabel;
141
+ exports.default = _default;