@primer/components 0.0.0-20219522251 → 0.0.0-20219611824

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 (40) hide show
  1. package/CHANGELOG.md +3 -11
  2. package/lib/ActionList/List.d.ts +1 -1
  3. package/lib/Token/IssueLabelToken.d.ts +14 -0
  4. package/lib/Token/IssueLabelToken.js +138 -0
  5. package/lib/Token/ProfileToken.d.ts +7 -0
  6. package/lib/Token/ProfileToken.js +50 -0
  7. package/lib/Token/Token.d.ts +15 -0
  8. package/lib/Token/Token.js +90 -0
  9. package/lib/Token/TokenBase.d.ts +17 -0
  10. package/lib/Token/TokenBase.js +108 -0
  11. package/lib/Token/_RemoveTokenButton.d.ts +12 -0
  12. package/lib/Token/_RemoveTokenButton.js +75 -0
  13. package/lib/Token/_TokenTextContainer.d.ts +3 -0
  14. package/lib/Token/_TokenTextContainer.js +34 -0
  15. package/lib/Token/index.d.ts +3 -0
  16. package/lib/Token/index.js +31 -0
  17. package/lib/index.d.ts +1 -0
  18. package/lib/index.js +20 -0
  19. package/lib-esm/ActionList/List.d.ts +1 -1
  20. package/lib-esm/Token/IssueLabelToken.d.ts +14 -0
  21. package/lib-esm/Token/IssueLabelToken.js +118 -0
  22. package/lib-esm/Token/ProfileToken.d.ts +7 -0
  23. package/lib-esm/Token/ProfileToken.js +30 -0
  24. package/lib-esm/Token/Token.d.ts +15 -0
  25. package/lib-esm/Token/Token.js +69 -0
  26. package/lib-esm/Token/TokenBase.d.ts +17 -0
  27. package/lib-esm/Token/TokenBase.js +87 -0
  28. package/lib-esm/Token/_RemoveTokenButton.d.ts +12 -0
  29. package/lib-esm/Token/_RemoveTokenButton.js +59 -0
  30. package/lib-esm/Token/_TokenTextContainer.d.ts +3 -0
  31. package/lib-esm/Token/_TokenTextContainer.js +21 -0
  32. package/lib-esm/Token/index.d.ts +3 -0
  33. package/lib-esm/Token/index.js +3 -0
  34. package/lib-esm/index.d.ts +1 -0
  35. package/lib-esm/index.js +1 -0
  36. package/package.json +3 -1
  37. package/dist/browser.esm.js +0 -2142
  38. package/dist/browser.esm.js.map +0 -1
  39. package/dist/browser.umd.js +0 -2142
  40. package/dist/browser.umd.js.map +0 -1
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _styledComponents = _interopRequireWildcard(require("styled-components"));
9
+
10
+ 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); }
11
+
12
+ 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; }
13
+
14
+ const TokenTextContainer = (0, _styledComponents.default)('span').withConfig({
15
+ displayName: "_TokenTextContainer__TokenTextContainer",
16
+ componentId: "sc-4t2bev-0"
17
+ })(["flex-grow:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1;", ""], props => {
18
+ if (props.as === 'a') {
19
+ return (0, _styledComponents.css)(["color:currentColor;text-decoration:none;"]);
20
+ }
21
+
22
+ if (props.as === 'button') {
23
+ // reset button styles, make the cursor a pointer, and add line-height
24
+ return (0, _styledComponents.css)(["background:transparent;border:none;color:inherit;font:inherit;margin:0;overflow:visible;padding:0;width:auto;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none;cursor:pointer;line-height:1;"]);
25
+ } // position psuedo-element above text content
26
+ // so it gets the click
27
+
28
+
29
+ if (props.as !== 'span') {
30
+ return (0, _styledComponents.css)(["&:after{content:'';position:absolute;left:0;top:0;right:0;bottom:0;}"]);
31
+ }
32
+ });
33
+ var _default = TokenTextContainer;
34
+ exports.default = _default;
@@ -0,0 +1,3 @@
1
+ export { default } from './Token';
2
+ export { default as IssueLabelToken } from './IssueLabelToken';
3
+ export { default as ProfileToken } from './ProfileToken';
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "default", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _Token.default;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "IssueLabelToken", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _IssueLabelToken.default;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "ProfileToken", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _ProfileToken.default;
22
+ }
23
+ });
24
+
25
+ var _Token = _interopRequireDefault(require("./Token"));
26
+
27
+ var _IssueLabelToken = _interopRequireDefault(require("./IssueLabelToken"));
28
+
29
+ var _ProfileToken = _interopRequireDefault(require("./ProfileToken"));
30
+
31
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
package/lib/index.d.ts CHANGED
@@ -102,6 +102,7 @@ export { default as Text } from './Text';
102
102
  export type { TextProps } from './Text';
103
103
  export { default as Timeline } from './Timeline';
104
104
  export type { TimelineProps, TimelineBadgeProps, TimelineBodyProps, TimelineBreakProps, TimelineItemsProps } from './Timeline';
105
+ export { default as Token, IssueLabelToken, ProfileToken } from './Token';
105
106
  export { default as Tooltip } from './Tooltip';
106
107
  export type { TooltipProps } from './Tooltip';
107
108
  export { default as Truncate } from './Truncate';
package/lib/index.js CHANGED
@@ -441,6 +441,24 @@ Object.defineProperty(exports, "Timeline", {
441
441
  return _Timeline.default;
442
442
  }
443
443
  });
444
+ Object.defineProperty(exports, "Token", {
445
+ enumerable: true,
446
+ get: function () {
447
+ return _Token.default;
448
+ }
449
+ });
450
+ Object.defineProperty(exports, "IssueLabelToken", {
451
+ enumerable: true,
452
+ get: function () {
453
+ return _Token.IssueLabelToken;
454
+ }
455
+ });
456
+ Object.defineProperty(exports, "ProfileToken", {
457
+ enumerable: true,
458
+ get: function () {
459
+ return _Token.ProfileToken;
460
+ }
461
+ });
444
462
  Object.defineProperty(exports, "Tooltip", {
445
463
  enumerable: true,
446
464
  get: function () {
@@ -586,6 +604,8 @@ var _Text = _interopRequireDefault(require("./Text"));
586
604
 
587
605
  var _Timeline = _interopRequireDefault(require("./Timeline"));
588
606
 
607
+ var _Token = _interopRequireWildcard(require("./Token"));
608
+
589
609
  var _Tooltip = _interopRequireDefault(require("./Tooltip"));
590
610
 
591
611
  var _Truncate = _interopRequireDefault(require("./Truncate"));
@@ -3,7 +3,7 @@ import type { AriaRole } from '../utils/types';
3
3
  import { Group, GroupProps } from './Group';
4
4
  import { ItemProps } from './Item';
5
5
  declare type RenderItemFn = (props: ItemProps) => React.ReactElement;
6
- export declare type ItemInput = (ItemProps & Omit<React.ComponentPropsWithoutRef<'div'>, keyof ItemProps>) | ((Partial<ItemProps> & {
6
+ export declare type ItemInput = ItemProps | ((Partial<ItemProps> & {
7
7
  renderItem: RenderItemFn;
8
8
  }) & {
9
9
  key?: Key;
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import { TokenBaseProps } from './TokenBase';
3
+ export interface IssueLabelTokenProps 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 IssueLabelToken: React.ForwardRefExoticComponent<Pick<IssueLabelTokenProps, "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" | "size" | "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" | "onRemove" | "isSelected" | "hideRemoveButton" | "fillColor"> & React.RefAttributes<HTMLElement>>;
14
+ export default IssueLabelToken;
@@ -0,0 +1,118 @@
1
+ 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); }
2
+
3
+ import React, { forwardRef, useMemo } from 'react';
4
+ import TokenBase, { isTokenInteractive } from './TokenBase';
5
+ import RemoveTokenButton from './_RemoveTokenButton';
6
+ import { parseToHsla, parseToRgba } from 'color2k';
7
+ import { useTheme } from '../ThemeProvider';
8
+ import TokenTextContainer from './_TokenTextContainer';
9
+ const tokenBorderWidthPx = 1;
10
+ const lightModeStyles = {
11
+ '--lightness-threshold': '0.453',
12
+ '--border-threshold': '0.96',
13
+ '--border-alpha': 'max(0, min(calc((var(--perceived-lightness) - var(--border-threshold)) * 100), 1))',
14
+ background: 'rgb(var(--label-r), var(--label-g), var(--label-b))',
15
+ color: 'hsl(0, 0%, calc(var(--lightness-switch) * 100%))',
16
+ borderWidth: tokenBorderWidthPx,
17
+ borderStyle: 'solid',
18
+ borderColor: 'hsla(var(--label-h),calc(var(--label-s) * 1%),calc((var(--label-l) - 25) * 1%),var(--border-alpha))'
19
+ };
20
+ const darkModeStyles = {
21
+ '--lightness-threshold': '0.6',
22
+ '--background-alpha': '0.18',
23
+ '--border-alpha': '0.3',
24
+ '--lighten-by': 'calc(((var(--lightness-threshold) - var(--perceived-lightness)) * 100) * var(--lightness-switch))',
25
+ borderWidth: tokenBorderWidthPx,
26
+ borderStyle: 'solid',
27
+ background: 'rgba(var(--label-r), var(--label-g), var(--label-b), var(--background-alpha))',
28
+ color: 'hsl(var(--label-h), calc(var(--label-s) * 1%), calc((var(--label-l) + var(--lighten-by)) * 1%))',
29
+ borderColor: 'hsla(var(--label-h), calc(var(--label-s) * 1%),calc((var(--label-l) + var(--lighten-by)) * 1%),var(--border-alpha))'
30
+ };
31
+ const IssueLabelToken = /*#__PURE__*/forwardRef((props, forwardedRef) => {
32
+ const {
33
+ as,
34
+ fillColor = '#999',
35
+ onRemove,
36
+ id,
37
+ isSelected,
38
+ ref,
39
+ text,
40
+ size,
41
+ hideRemoveButton,
42
+ href,
43
+ onClick,
44
+ ...rest
45
+ } = props;
46
+ const interactiveTokenProps = {
47
+ as,
48
+ href,
49
+ onClick
50
+ };
51
+ const {
52
+ colorScheme
53
+ } = useTheme();
54
+ const hasMultipleActionTargets = isTokenInteractive(props) && Boolean(onRemove) && !hideRemoveButton;
55
+
56
+ const onRemoveClick = e => {
57
+ e.stopPropagation();
58
+ onRemove && onRemove();
59
+ };
60
+
61
+ const labelStyles = useMemo(() => {
62
+ const [r, g, b, _rgbA] = parseToRgba(fillColor);
63
+ const [h, s, l, _hslA] = parseToHsla(fillColor); // label hack taken from https://github.com/github/github/blob/master/app/assets/stylesheets/hacks/hx_primer-labels.scss#L43-L108
64
+ // this logic should eventually live in primer/components. Also worthy of note is that the dotcom hack code will be moving to primer/css soon.
65
+
66
+ return {
67
+ ['--label-r']: String(r),
68
+ ['--label-g']: String(g),
69
+ ['--label-b']: String(b),
70
+ ['--label-h']: String(Math.round(h)),
71
+ ['--label-s']: String(Math.round(s * 100)),
72
+ ['--label-l']: String(Math.round(l * 100)),
73
+ ['--perceived-lightness']: 'calc(((var(--label-r) * 0.2126) + (var(--label-g) * 0.7152) + (var(--label-b) * 0.0722)) / 255)',
74
+ ['--lightness-switch']: 'max(0, min(calc((var(--perceived-lightness) - var(--lightness-threshold)) * -1000), 1))',
75
+ paddingRight: hideRemoveButton || !onRemove ? undefined : 0,
76
+ position: 'relative',
77
+ ...(colorScheme === 'light' ? lightModeStyles : darkModeStyles),
78
+ ...(isSelected ? {
79
+ ':after': {
80
+ content: '""',
81
+ position: 'absolute',
82
+ zIndex: 1,
83
+ top: `-${tokenBorderWidthPx * 2}px`,
84
+ right: `-${tokenBorderWidthPx * 2}px`,
85
+ bottom: `-${tokenBorderWidthPx * 2}px`,
86
+ left: `-${tokenBorderWidthPx * 2}px`,
87
+ display: 'block',
88
+ pointerEvents: 'none',
89
+ boxShadow: `0 0 0 ${tokenBorderWidthPx * 2}px ${colorScheme === 'light' ? 'rgb(var(--label-r), var(--label-g), var(--label-b))' : 'hsl(var(--label-h), calc(var(--label-s) * 1%), calc((var(--label-l) + var(--lighten-by)) * 1%))'}`,
90
+ borderRadius: '999px'
91
+ }
92
+ } : {})
93
+ };
94
+ }, [colorScheme, fillColor]);
95
+ return /*#__PURE__*/React.createElement(TokenBase, _extends({
96
+ onRemove: onRemove,
97
+ id: id === null || id === void 0 ? void 0 : id.toString(),
98
+ isSelected: isSelected,
99
+ ref: forwardedRef,
100
+ text: text,
101
+ size: size,
102
+ sx: labelStyles
103
+ }, !hasMultipleActionTargets ? interactiveTokenProps : {}, rest), /*#__PURE__*/React.createElement(TokenTextContainer, hasMultipleActionTargets ? interactiveTokenProps : {}, text), !hideRemoveButton && onRemove ? /*#__PURE__*/React.createElement(RemoveTokenButton, {
104
+ borderOffset: tokenBorderWidthPx,
105
+ onClick: onRemoveClick,
106
+ size: size,
107
+ "aria-hidden": hasMultipleActionTargets ? 'true' : 'false',
108
+ isParentInteractive: isTokenInteractive(props),
109
+ sx: hasMultipleActionTargets ? {
110
+ position: 'relative',
111
+ zIndex: '1'
112
+ } : {}
113
+ }) : null);
114
+ });
115
+ IssueLabelToken.defaultProps = {
116
+ fillColor: '#999'
117
+ };
118
+ export default IssueLabelToken;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { TokenBaseProps } from './TokenBase';
3
+ export interface ProfileTokenProps extends TokenBaseProps {
4
+ avatarSrc: string;
5
+ }
6
+ declare const ProfileToken: React.ForwardRefExoticComponent<Pick<ProfileTokenProps, "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" | "size" | "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" | "onRemove" | "isSelected" | "avatarSrc"> & React.RefAttributes<HTMLElement>>;
7
+ export default ProfileToken;
@@ -0,0 +1,30 @@
1
+ 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); }
2
+
3
+ import React, { forwardRef } from 'react';
4
+ import { get } from '../constants';
5
+ import primitives from '@primer/primitives';
6
+ import { defaultTokenSize, tokenSizes } from './TokenBase';
7
+ import Token from './Token';
8
+ import { Avatar } from '..';
9
+ const ProfileToken = /*#__PURE__*/forwardRef(({
10
+ avatarSrc,
11
+ id,
12
+ ref,
13
+ size,
14
+ ...rest
15
+ }, forwardedRef) => {
16
+ console.log('ProfileToken rest', rest);
17
+ return /*#__PURE__*/React.createElement(Token, _extends({
18
+ leadingVisual: () => /*#__PURE__*/React.createElement(Avatar, {
19
+ src: avatarSrc,
20
+ size: parseInt(tokenSizes[size || defaultTokenSize], 10) - parseInt(primitives.spacing.normal.spacer[1], 10) * 2
21
+ }),
22
+ size: size,
23
+ id: id === null || id === void 0 ? void 0 : id.toString(),
24
+ ref: forwardedRef,
25
+ sx: {
26
+ paddingLeft: get('space.1')
27
+ }
28
+ }, rest));
29
+ });
30
+ export default ProfileToken;
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { SxProp } from '../sx';
3
+ import { TokenBaseProps } from './TokenBase';
4
+ export interface TokenProps extends TokenBaseProps {
5
+ /**
6
+ * A function that renders a component before the token text
7
+ */
8
+ leadingVisual?: React.ComponentType<any>;
9
+ /**
10
+ * Whether the remove button should be rendered in the token
11
+ */
12
+ hideRemoveButton?: boolean;
13
+ }
14
+ declare const Token: React.ForwardRefExoticComponent<Pick<TokenProps & SxProp, "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" | "size" | "wrap" | "open" | "sx" | "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" | "leadingVisual" | "onRemove" | "isSelected" | "hideRemoveButton"> & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement | HTMLSpanElement>>;
15
+ export default Token;
@@ -0,0 +1,69 @@
1
+ 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); }
2
+
3
+ import React, { forwardRef } from 'react';
4
+ import styled, { css } from 'styled-components';
5
+ import { get } from '../constants';
6
+ import { sx } from '../sx';
7
+ import TokenBase, { isTokenInteractive } from './TokenBase';
8
+ import RemoveTokenButton from './_RemoveTokenButton';
9
+ import TokenTextContainer from './_TokenTextContainer';
10
+ const tokenBorderWidthPx = 1;
11
+ const DefaultTokenStyled = styled(TokenBase).withConfig({
12
+ displayName: "Token__DefaultTokenStyled",
13
+ componentId: "sc-1dg52pw-0"
14
+ })(["background-color:", ";border-color:", ";border-style:solid;border-width:", "px;color:", ";max-width:100%;padding-right:", ";position:relative;", " ", ""], get('colors.neutral.subtle'), props => props.isSelected ? get('colors.fg.default') : get('colors.border.subtle'), tokenBorderWidthPx, props => props.isSelected ? get('colors.fg.default') : get('colors.fg.muted'), props => !props.hideRemoveButton ? 0 : undefined, sx, props => {
15
+ if (props.isTokenInteractive) {
16
+ return css(["&:hover{background-color:", ";box-shadow:", ";color:", ";}"], get('colors.neutral.muted'), get('colors.shadow.medium'), get('colors.fg.default'));
17
+ }
18
+ });
19
+ const LeadingVisualContainer = styled('span').withConfig({
20
+ displayName: "Token__LeadingVisualContainer",
21
+ componentId: "sc-1dg52pw-1"
22
+ })(["flex-shrink:0;line-height:0;"]);
23
+ const Token = /*#__PURE__*/forwardRef((props, forwardedRef) => {
24
+ const {
25
+ as,
26
+ onRemove,
27
+ id,
28
+ leadingVisual: LeadingVisual,
29
+ ref,
30
+ text,
31
+ size,
32
+ hideRemoveButton,
33
+ href,
34
+ onClick,
35
+ ...rest
36
+ } = props;
37
+ const hasMultipleActionTargets = isTokenInteractive(props) && Boolean(onRemove) && !hideRemoveButton;
38
+
39
+ const onRemoveClick = e => {
40
+ e.stopPropagation();
41
+ onRemove && onRemove();
42
+ };
43
+
44
+ const interactiveTokenProps = {
45
+ as,
46
+ href,
47
+ onClick
48
+ };
49
+ return /*#__PURE__*/React.createElement(DefaultTokenStyled, _extends({
50
+ onRemove: onRemove,
51
+ hideRemoveButton: hideRemoveButton || !onRemove,
52
+ id: id === null || id === void 0 ? void 0 : id.toString(),
53
+ text: text,
54
+ ref: forwardedRef,
55
+ size: size,
56
+ isTokenInteractive: isTokenInteractive(props)
57
+ }, !hasMultipleActionTargets ? interactiveTokenProps : {}, rest), LeadingVisual ? /*#__PURE__*/React.createElement(LeadingVisualContainer, null, /*#__PURE__*/React.createElement(LeadingVisual, null)) : null, /*#__PURE__*/React.createElement(TokenTextContainer, hasMultipleActionTargets ? interactiveTokenProps : {}, text), !hideRemoveButton && onRemove ? /*#__PURE__*/React.createElement(RemoveTokenButton, {
58
+ borderOffset: tokenBorderWidthPx,
59
+ onClick: onRemoveClick,
60
+ size: size,
61
+ isParentInteractive: isTokenInteractive(props),
62
+ "aria-hidden": hasMultipleActionTargets ? 'true' : 'false',
63
+ sx: hasMultipleActionTargets ? {
64
+ position: 'relative',
65
+ zIndex: '1'
66
+ } : {}
67
+ }) : null);
68
+ });
69
+ export default Token;
@@ -0,0 +1,17 @@
1
+ /// <reference types="react" />
2
+ import { SxProp } from '../sx';
3
+ export declare type TokenSizeKeys = 'small' | 'medium' | 'large' | 'xlarge';
4
+ export declare const tokenSizes: Record<TokenSizeKeys, string>;
5
+ export declare const defaultTokenSize: TokenSizeKeys;
6
+ export interface TokenBaseProps extends Omit<React.HTMLProps<HTMLSpanElement | HTMLButtonElement | HTMLAnchorElement>, 'size' | 'id'> {
7
+ as?: 'button' | 'a' | 'span';
8
+ onRemove?: () => void;
9
+ isSelected?: boolean;
10
+ tabIndex?: number;
11
+ text: string;
12
+ id?: number | string;
13
+ size?: TokenSizeKeys;
14
+ }
15
+ export declare const isTokenInteractive: ({ as, onClick, onFocus, tabIndex }: TokenBaseProps) => boolean;
16
+ declare const TokenBase: import("styled-components").StyledComponent<"span", any, TokenBaseProps & SxProp, never>;
17
+ export default TokenBase;
@@ -0,0 +1,87 @@
1
+ import styled from 'styled-components';
2
+ import { variant } from 'styled-system';
3
+ import { get } from '../constants';
4
+ import sx from '../sx';
5
+ export const tokenSizes = {
6
+ small: '16px',
7
+ medium: '20px',
8
+ large: '24px',
9
+ xlarge: '32px'
10
+ };
11
+ export const defaultTokenSize = 'medium';
12
+ export const isTokenInteractive = ({
13
+ as = 'span',
14
+ onClick,
15
+ onFocus,
16
+ tabIndex = -1
17
+ }) => Boolean(onFocus || onClick || tabIndex > -1 || ['a', 'button'].includes(as));
18
+ const variants = variant({
19
+ prop: 'size',
20
+ variants: {
21
+ small: {
22
+ fontSize: 0,
23
+ gap: 1,
24
+ height: tokenSizes.small,
25
+ // without setting lineHeight to match height, the "x" appears vertically mis-aligned
26
+ lineHeight: tokenSizes.small,
27
+ paddingLeft: 1,
28
+ paddingRight: 1,
29
+ // need to explicitly set padding top and bottom to "0" to override default `<button>` element styles
30
+ // without setting these, the "x" appears vertically mis-aligned
31
+ paddingTop: 0,
32
+ paddingBottom: 0
33
+ },
34
+ medium: {
35
+ fontSize: 0,
36
+ gap: 1,
37
+ height: tokenSizes.medium,
38
+ lineHeight: tokenSizes.medium,
39
+ paddingLeft: 2,
40
+ paddingRight: 2,
41
+ paddingTop: 0,
42
+ paddingBottom: 0
43
+ },
44
+ large: {
45
+ fontSize: 0,
46
+ gap: 2,
47
+ height: tokenSizes.large,
48
+ lineHeight: tokenSizes.large,
49
+ paddingLeft: 2,
50
+ paddingRight: 2,
51
+ paddingTop: 0,
52
+ paddingBottom: 0
53
+ },
54
+ xlarge: {
55
+ fontSize: 1,
56
+ gap: 2,
57
+ height: tokenSizes.xlarge,
58
+ lineHeight: tokenSizes.xlarge,
59
+ paddingLeft: 3,
60
+ paddingRight: 3,
61
+ paddingTop: 0,
62
+ paddingBottom: 0
63
+ }
64
+ }
65
+ });
66
+ const TokenBase = styled.span.attrs(({
67
+ text,
68
+ onRemove,
69
+ onKeyDown
70
+ }) => ({
71
+ onKeyDown: event => {
72
+ onKeyDown && onKeyDown(event);
73
+
74
+ if ((event.key === 'Backspace' || event.key === 'Delete') && onRemove) {
75
+ onRemove();
76
+ }
77
+ },
78
+ 'aria-label': onRemove ? `${text}, press backspace or delete to remove` : undefined
79
+ })).withConfig({
80
+ displayName: "TokenBase",
81
+ componentId: "opajvp-0"
82
+ })(["align-items:center;border-radius:999px;cursor:", ";display:inline-flex;font-weight:", ";text-decoration:none;white-space:nowrap;", " ", ""], props => isTokenInteractive(props) ? 'pointer' : 'auto', get('fontWeights.bold'), variants, sx);
83
+ TokenBase.defaultProps = {
84
+ as: 'span',
85
+ size: defaultTokenSize
86
+ };
87
+ export default TokenBase;
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ import { SxProp } from '../sx';
3
+ import { ComponentProps } from '../utils/types';
4
+ import { TokenSizeKeys } from './TokenBase';
5
+ interface TokenButtonProps {
6
+ borderOffset?: number;
7
+ size?: TokenSizeKeys;
8
+ isParentInteractive?: boolean;
9
+ }
10
+ declare const StyledTokenButton: import("styled-components").StyledComponent<"span", any, TokenButtonProps & SxProp, never>;
11
+ declare const RemoveTokenButton: React.FC<ComponentProps<typeof StyledTokenButton>>;
12
+ export default RemoveTokenButton;
@@ -0,0 +1,59 @@
1
+ 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); }
2
+
3
+ import { XIcon } from '@primer/octicons-react';
4
+ import styled from 'styled-components';
5
+ import { variant } from 'styled-system';
6
+ import { get } from '../constants';
7
+ import sx from '../sx';
8
+ import { tokenSizes, defaultTokenSize } from './TokenBase';
9
+ const variants = variant({
10
+ prop: 'size',
11
+ variants: {
12
+ small: {
13
+ height: tokenSizes.small,
14
+ width: tokenSizes.small
15
+ },
16
+ medium: {
17
+ height: tokenSizes.medium,
18
+ width: tokenSizes.medium
19
+ },
20
+ large: {
21
+ height: tokenSizes.large,
22
+ width: tokenSizes.large
23
+ },
24
+ xlarge: {
25
+ height: tokenSizes.xlarge,
26
+ width: tokenSizes.xlarge
27
+ }
28
+ }
29
+ });
30
+
31
+ const getTokenButtonIconSize = variant => parseInt(tokenSizes[variant || defaultTokenSize], 10) * 0.75;
32
+
33
+ const StyledTokenButton = styled.span.withConfig({
34
+ displayName: "_RemoveTokenButton__StyledTokenButton",
35
+ componentId: "sc-14lvcw1-0"
36
+ })(["background-color:transparent;font-family:inherit;color:currentColor;cursor:pointer;display:inline-flex;justify-content:center;align-items:center;user-select:none;appearance:none;text-decoration:none;padding:0;transform:", ";align-self:baseline;border:0;border-radius:999px;&:hover,&:focus{background-color:", ";}&:active{background-color:", ";}", " ", ""], props => `translate(${props.borderOffset}px, -${props.borderOffset}px)`, get('colors.fade.fg10'), get('colors.fade.fg15'), variants, sx);
37
+
38
+ const RemoveTokenButton = ({
39
+ 'aria-label': ariaLabel,
40
+ isParentInteractive,
41
+ size,
42
+ children,
43
+ ...rest
44
+ }) => {
45
+ return /*#__PURE__*/React.createElement(StyledTokenButton, _extends({
46
+ as: isParentInteractive ? 'span' : 'button',
47
+ tabIndex: isParentInteractive ? -1 : undefined,
48
+ "aria-label": !isParentInteractive ? 'Remove token' : undefined,
49
+ size: size
50
+ }, rest), /*#__PURE__*/React.createElement(XIcon, {
51
+ size: getTokenButtonIconSize(size)
52
+ }));
53
+ };
54
+
55
+ RemoveTokenButton.displayName = "RemoveTokenButton";
56
+ RemoveTokenButton.defaultProps = {
57
+ size: defaultTokenSize
58
+ };
59
+ export default RemoveTokenButton;
@@ -0,0 +1,3 @@
1
+ import { TokenBaseProps } from './TokenBase';
2
+ declare const TokenTextContainer: import("styled-components").StyledComponent<"span", any, Partial<TokenBaseProps>, never>;
3
+ export default TokenTextContainer;
@@ -0,0 +1,21 @@
1
+ import styled, { css } from 'styled-components';
2
+ const TokenTextContainer = styled('span').withConfig({
3
+ displayName: "_TokenTextContainer__TokenTextContainer",
4
+ componentId: "sc-4t2bev-0"
5
+ })(["flex-grow:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1;", ""], props => {
6
+ if (props.as === 'a') {
7
+ return css(["color:currentColor;text-decoration:none;"]);
8
+ }
9
+
10
+ if (props.as === 'button') {
11
+ // reset button styles, make the cursor a pointer, and add line-height
12
+ return css(["background:transparent;border:none;color:inherit;font:inherit;margin:0;overflow:visible;padding:0;width:auto;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none;cursor:pointer;line-height:1;"]);
13
+ } // position psuedo-element above text content
14
+ // so it gets the click
15
+
16
+
17
+ if (props.as !== 'span') {
18
+ return css(["&:after{content:'';position:absolute;left:0;top:0;right:0;bottom:0;}"]);
19
+ }
20
+ });
21
+ export default TokenTextContainer;