@primer/components 0.0.0-202196173426 → 0.0.0-202196184858
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 +4 -14
- package/lib/ActionList/List.d.ts +1 -2
- package/lib/SelectMenu/SelectMenu.d.ts +10 -10
- package/lib/TextInput.d.ts +1 -2
- package/lib/Token/IssueLabelToken.d.ts +14 -0
- package/lib/Token/IssueLabelToken.js +144 -0
- package/lib/Token/ProfileToken.d.ts +7 -0
- package/lib/Token/ProfileToken.js +53 -0
- package/lib/Token/Token.d.ts +15 -0
- package/lib/Token/Token.js +94 -0
- package/lib/Token/TokenBase.d.ts +17 -0
- package/lib/Token/TokenBase.js +108 -0
- package/lib/Token/_RemoveTokenButton.d.ts +12 -0
- package/lib/Token/_RemoveTokenButton.js +77 -0
- package/lib/Token/_TokenTextContainer.d.ts +3 -0
- package/lib/Token/_TokenTextContainer.js +34 -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/utils/{types/AriaRole.d.ts → types.d.ts} +13 -0
- package/lib/utils/{types/AriaRole.js → types.js} +0 -0
- package/lib-esm/ActionList/List.d.ts +1 -2
- package/lib-esm/SelectMenu/SelectMenu.d.ts +10 -10
- package/lib-esm/TextInput.d.ts +1 -2
- package/lib-esm/Token/IssueLabelToken.d.ts +14 -0
- package/lib-esm/Token/IssueLabelToken.js +124 -0
- package/lib-esm/Token/ProfileToken.d.ts +7 -0
- package/lib-esm/Token/ProfileToken.js +33 -0
- package/lib-esm/Token/Token.d.ts +15 -0
- package/lib-esm/Token/Token.js +73 -0
- package/lib-esm/Token/TokenBase.d.ts +17 -0
- package/lib-esm/Token/TokenBase.js +87 -0
- package/lib-esm/Token/_RemoveTokenButton.d.ts +12 -0
- package/lib-esm/Token/_RemoveTokenButton.js +60 -0
- package/lib-esm/Token/_TokenTextContainer.d.ts +3 -0
- package/lib-esm/Token/_TokenTextContainer.js +21 -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/lib-esm/utils/{types/AriaRole.d.ts → types.d.ts} +13 -0
- package/lib-esm/utils/{types/AriaRole.js → types.js} +0 -0
- package/package.json +2 -1
- package/dist/browser.esm.js +0 -2142
- package/dist/browser.esm.js.map +0 -1
- package/dist/browser.umd.js +0 -2142
- package/dist/browser.umd.js.map +0 -1
- package/lib/utils/types/ComponentProps.d.ts +0 -9
- package/lib/utils/types/ComponentProps.js +0 -1
- package/lib/utils/types/Flatten.d.ts +0 -4
- package/lib/utils/types/Flatten.js +0 -1
- package/lib/utils/types/Merge.d.ts +0 -19
- package/lib/utils/types/Merge.js +0 -1
- package/lib/utils/types/index.d.ts +0 -4
- package/lib/utils/types/index.js +0 -57
- package/lib-esm/utils/types/ComponentProps.d.ts +0 -9
- package/lib-esm/utils/types/ComponentProps.js +0 -1
- package/lib-esm/utils/types/Flatten.d.ts +0 -4
- package/lib-esm/utils/types/Flatten.js +0 -1
- package/lib-esm/utils/types/Merge.d.ts +0 -19
- package/lib-esm/utils/types/Merge.js +0 -1
- package/lib-esm/utils/types/index.d.ts +0 -4
- package/lib-esm/utils/types/index.js +0 -4
@@ -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
|
+
import React from '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,60 @@
|
|
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 from 'react';
|
4
|
+
import { XIcon } from '@primer/octicons-react';
|
5
|
+
import styled from 'styled-components';
|
6
|
+
import { variant } from 'styled-system';
|
7
|
+
import { get } from '../constants';
|
8
|
+
import sx from '../sx';
|
9
|
+
import { tokenSizes, defaultTokenSize } from './TokenBase';
|
10
|
+
const variants = variant({
|
11
|
+
prop: 'size',
|
12
|
+
variants: {
|
13
|
+
small: {
|
14
|
+
height: tokenSizes.small,
|
15
|
+
width: tokenSizes.small
|
16
|
+
},
|
17
|
+
medium: {
|
18
|
+
height: tokenSizes.medium,
|
19
|
+
width: tokenSizes.medium
|
20
|
+
},
|
21
|
+
large: {
|
22
|
+
height: tokenSizes.large,
|
23
|
+
width: tokenSizes.large
|
24
|
+
},
|
25
|
+
xlarge: {
|
26
|
+
height: tokenSizes.xlarge,
|
27
|
+
width: tokenSizes.xlarge
|
28
|
+
}
|
29
|
+
}
|
30
|
+
});
|
31
|
+
|
32
|
+
const getTokenButtonIconSize = size => parseInt(tokenSizes[size || defaultTokenSize], 10) * 0.75;
|
33
|
+
|
34
|
+
const StyledTokenButton = styled.span.withConfig({
|
35
|
+
displayName: "_RemoveTokenButton__StyledTokenButton",
|
36
|
+
componentId: "sc-14lvcw1-0"
|
37
|
+
})(["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);
|
38
|
+
|
39
|
+
const RemoveTokenButton = ({
|
40
|
+
'aria-label': ariaLabel,
|
41
|
+
isParentInteractive,
|
42
|
+
size,
|
43
|
+
...rest
|
44
|
+
}) => {
|
45
|
+
delete rest.children;
|
46
|
+
return /*#__PURE__*/React.createElement(StyledTokenButton, _extends({
|
47
|
+
as: isParentInteractive ? 'span' : 'button',
|
48
|
+
tabIndex: isParentInteractive ? -1 : undefined,
|
49
|
+
"aria-label": !isParentInteractive ? 'Remove token' : ariaLabel,
|
50
|
+
size: size
|
51
|
+
}, rest), /*#__PURE__*/React.createElement(XIcon, {
|
52
|
+
size: getTokenButtonIconSize(size)
|
53
|
+
}));
|
54
|
+
};
|
55
|
+
|
56
|
+
RemoveTokenButton.displayName = "RemoveTokenButton";
|
57
|
+
RemoveTokenButton.defaultProps = {
|
58
|
+
size: defaultTokenSize
|
59
|
+
};
|
60
|
+
export default RemoveTokenButton;
|
@@ -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;", ""], 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;
|
package/lib-esm/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-esm/index.js
CHANGED
@@ -63,6 +63,7 @@ export { default as TabNav } from './TabNav';
|
|
63
63
|
export { default as TextInput } from './TextInput';
|
64
64
|
export { default as Text } from './Text';
|
65
65
|
export { default as Timeline } from './Timeline';
|
66
|
+
export { default as Token, IssueLabelToken, ProfileToken } from './Token';
|
66
67
|
export { default as Tooltip } from './Tooltip';
|
67
68
|
export { default as Truncate } from './Truncate';
|
68
69
|
export { default as UnderlineNav } from './UnderlineNav';
|
@@ -1 +1,14 @@
|
|
1
|
+
/// <reference types="react" />
|
2
|
+
/**
|
3
|
+
* Extract a component's props
|
4
|
+
*
|
5
|
+
* Source: https://react-typescript-cheatsheet.netlify.app/docs/advanced/patterns_by_usecase#wrappingmirroring-a-component
|
6
|
+
*
|
7
|
+
* @example ComponentProps<typeof MyComponent>
|
8
|
+
*/
|
9
|
+
export declare type ComponentProps<T> = T extends React.ComponentType<infer Props> ? Props extends object ? Props : never : never;
|
10
|
+
/**
|
11
|
+
* Contruct a type describing the items in `T`, if `T` is an array.
|
12
|
+
*/
|
13
|
+
export declare type Flatten<T extends unknown> = T extends (infer U)[] ? U : never;
|
1
14
|
export declare type AriaRole = 'alert' | 'alertdialog' | 'application' | 'article' | 'banner' | 'button' | 'cell' | 'checkbox' | 'columnheader' | 'combobox' | 'complementary' | 'contentinfo' | 'definition' | 'dialog' | 'directory' | 'document' | 'feed' | 'figure' | 'form' | 'grid' | 'gridcell' | 'group' | 'heading' | 'img' | 'link' | 'list' | 'listbox' | 'listitem' | 'log' | 'main' | 'marquee' | 'math' | 'menu' | 'menubar' | 'menuitem' | 'menuitemcheckbox ' | 'menuitemradio' | 'navigation' | 'none' | 'note' | 'option' | 'presentation' | 'progressbar' | 'radio' | 'radiogroup' | 'region' | 'row' | 'rowgroup' | 'rowheader' | 'scrollbar' | 'search' | 'searchbox' | 'separator' | 'slider' | 'spinbutton' | 'status' | 'switch' | 'tab' | 'table' | 'tablist' | 'tabpanel' | 'term' | 'textbox' | 'timer' | 'toolbar' | 'tooltip' | 'tree' | 'treegrid' | 'treeitem';
|
File without changes
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@primer/components",
|
3
|
-
"version": "0.0.0-
|
3
|
+
"version": "0.0.0-202196184858",
|
4
4
|
"description": "Primer react components",
|
5
5
|
"main": "lib/index.js",
|
6
6
|
"module": "lib-esm/index.js",
|
@@ -56,6 +56,7 @@
|
|
56
56
|
"@types/styled-system__css": "5.0.16",
|
57
57
|
"@types/styled-system__theme-get": "5.0.1",
|
58
58
|
"classnames": "2.3.1",
|
59
|
+
"color2k": "1.2.4",
|
59
60
|
"deepmerge": "4.2.2",
|
60
61
|
"focus-visible": "5.2.0",
|
61
62
|
"styled-system": "5.1.5"
|