@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.
- package/CHANGELOG.md +7 -1
- package/dist/browser.esm.js +771 -716
- package/dist/browser.esm.js.map +1 -1
- package/dist/browser.umd.js +410 -355
- package/dist/browser.umd.js.map +1 -1
- package/lib/ActionList/Item.d.ts +16 -4
- package/lib/ActionList/Item.js +9 -6
- package/lib/ActionList/List.d.ts +11 -7
- package/lib/ActionList/List.js +2 -2
- package/lib/ActionList/index.d.ts +1 -2
- package/lib/Dialog/ConfirmationDialog.js +3 -3
- package/lib/Dialog/Dialog.d.ts +5 -0
- package/lib/Dialog/Dialog.js +16 -4
- package/lib/Token/Token.d.ts +14 -0
- package/lib/Token/Token.js +76 -0
- package/lib/Token/TokenBase.d.ts +16 -0
- package/lib/Token/TokenBase.js +90 -0
- package/lib/Token/TokenLabel.d.ts +14 -0
- package/lib/Token/TokenLabel.js +141 -0
- package/lib/Token/TokenProfile.d.ts +7 -0
- package/lib/Token/TokenProfile.js +50 -0
- package/lib/Token/_RemoveTokenButton.d.ts +3 -0
- package/lib/Token/_RemoveTokenButton.js +44 -0
- package/lib/Token/_tokenButtonUtils.d.ts +10 -0
- package/lib/Token/_tokenButtonUtils.js +42 -0
- package/lib/Token/index.d.ts +3 -0
- package/lib/Token/index.js +31 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +20 -0
- package/lib-esm/ActionList/Item.d.ts +16 -4
- package/lib-esm/ActionList/Item.js +8 -5
- package/lib-esm/ActionList/List.d.ts +11 -7
- package/lib-esm/ActionList/List.js +2 -2
- package/lib-esm/ActionList/index.d.ts +1 -2
- package/lib-esm/Dialog/ConfirmationDialog.js +3 -3
- package/lib-esm/Dialog/Dialog.d.ts +5 -0
- package/lib-esm/Dialog/Dialog.js +17 -5
- package/lib-esm/Token/Token.d.ts +14 -0
- package/lib-esm/Token/Token.js +57 -0
- package/lib-esm/Token/TokenBase.d.ts +16 -0
- package/lib-esm/Token/TokenBase.js +70 -0
- package/lib-esm/Token/TokenLabel.d.ts +14 -0
- package/lib-esm/Token/TokenLabel.js +121 -0
- package/lib-esm/Token/TokenProfile.d.ts +7 -0
- package/lib-esm/Token/TokenProfile.js +29 -0
- package/lib-esm/Token/_RemoveTokenButton.d.ts +3 -0
- package/lib-esm/Token/_RemoveTokenButton.js +29 -0
- package/lib-esm/Token/_tokenButtonUtils.d.ts +10 -0
- package/lib-esm/Token/_tokenButtonUtils.js +26 -0
- package/lib-esm/Token/index.d.ts +3 -0
- package/lib-esm/Token/index.js +3 -0
- package/lib-esm/index.d.ts +1 -0
- package/lib-esm/index.js +1 -0
- package/package.json +8 -5
package/lib/ActionList/Item.d.ts
CHANGED
@@ -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
|
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
|
79
|
-
item?: ItemInput;
|
80
|
-
}): JSX.Element;
|
92
|
+
export declare const Item: PolymorphicForwardRefComponent<"div", ItemProps>;
|
package/lib/ActionList/Item.js
CHANGED
@@ -3,8 +3,7 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.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
|
-
|
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
|
287
|
+
exports.Item = Item;
|
288
|
+
Item.displayName = 'ActionList.Item';
|
package/lib/ActionList/List.d.ts
CHANGED
@@ -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 {
|
5
|
-
|
6
|
-
|
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?:
|
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?:
|
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:
|
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 {};
|
package/lib/ActionList/List.js
CHANGED
@@ -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,
|
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 = (
|
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:
|
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, {
|
package/lib/Dialog/Dialog.d.ts
CHANGED
@@ -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.
|
package/lib/Dialog/Dialog.js
CHANGED
@@ -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
|
-
|
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;
|