Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: Update spectrum tokens #7736

Merged
merged 8 commits into from
Feb 10, 2025
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ let items = [
export const Template: StoryFn<SpectrumSearchAutocompleteProps<object>> = (args) => (
<Grid columns={repeat(4, '1fr')} autoFlow="row" gap="size-200">
{combinations.map(c => {
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what caused this to change? You mentioned mergeProps, but what changed there? Seems like it could be potentially problematic for other usages too?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mergeProps now merges in the opposite direction https://github.com/adobe/react-spectrum/pull/7657/files which just results in the items being added into the object in the opposite order for this particular use case, the values in those keys remains the same

relying on the order of Object.keys isn't something one should do anyways, it just happened that we do it for labels in chromatic

it'd be better to sort them in some way, but we can handle that as a separate pr, I wanted to know if we were actually breaking anything in this PR

if (!key) {
key = 'empty';
}
Expand All @@ -97,7 +97,7 @@ export const Template: StoryFn<SpectrumSearchAutocompleteProps<object>> = (args)
const TemplateSideLabel: StoryFn<SpectrumSearchAutocompleteProps<object>> = (args) => (
<Grid columns={repeat(2, '1fr')} autoFlow="row" gap="size-200" width={800}>
{combinations.filter(combo => !(combo.isReadOnly || combo.isDisabled)).map(c => {
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'empty';
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ function render(props: any = {}) {
return '';
}
return typeof c[k] === 'boolean' ? k.replace(/^data-/, '') : `${k}: ${c[k]}`;
}).filter(Boolean).reverse().join(', ');
}).filter(Boolean).join(', ');
if (!key) {
key = 'default';
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ export function AllStates() {
(merged.isSelectionEnd && !merged.isRangeEnd)
).map(props => (
<div style={{whiteSpace: 'pre-wrap'}}>
{Object.keys(props).join('\n')}
{Object.keys(props).reverse().join('\n')}
<div style={{position: 'relative', width: size, height: size, textAlign: 'center'}}>
<Cell {...props} />
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ export const Default = {
(merged.isRangeStart && merged.isRangeEnd) ||
(merged.isSelectionStart && !merged.isRangeStart) ||
(merged.isSelectionEnd && !merged.isRangeEnd)
).map(props => <div>{Object.keys(props).join(' ')}<div style={{position: 'relative', width: 40, height: 40, textAlign: 'center'}}><Cell {...props} /></div></div>)}
).map(props => <div>{Object.keys(props).reverse().join(' ')}<div style={{position: 'relative', width: 40, height: 40, textAlign: 'center'}}><Cell {...props} /></div></div>)}
</Grid>
)
};
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ export default meta;
const Template: StoryFn<SpectrumColorFieldProps> = (args) => (
<Grid columns={repeat(3, '1fr')} autoFlow="row" gap="size-200">
{combinations.map(c => {
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'empty';
}
Expand All @@ -85,7 +85,7 @@ const Template: StoryFn<SpectrumColorFieldProps> = (args) => (
const TemplateSmall: StoryFn<SpectrumColorFieldProps> = (args) => (
<Grid columns={repeat(2, '1fr')} autoFlow="row" gap="size-200">
{combinations.map(c => {
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'empty';
}
Expand All @@ -97,7 +97,7 @@ const TemplateSmall: StoryFn<SpectrumColorFieldProps> = (args) => (
const NoLabelTemplate: StoryFn<SpectrumColorFieldProps> = (args) => (
<Grid columns={repeat(3, '1fr')} autoFlow="row" gap="size-300">
{combinations.filter(combo => combo.isRequired == null && combo.necessityIndicator == null).map(c => {
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'empty';
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ export default meta;
const Template: StoryFn<SpectrumColorSliderProps> = (args) => (
<Grid columns={repeat(states.length, '1fr')} autoFlow="row" gap="size-300">
{combinations.map(c => {
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'empty';
}
Expand All @@ -74,7 +74,7 @@ const Template: StoryFn<SpectrumColorSliderProps> = (args) => (
const VerticalTemplate: StoryFn<SpectrumColorSliderProps> = (args) => (
<Grid columns={repeat(5, '1fr')} autoFlow="row" gap="size-300">
{combinations.map(c => {
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'empty';
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ let items = [
const Template: StoryFn<SpectrumComboBoxProps<object>> = (args) => (
<Grid columns={repeat(4, '1fr')} autoFlow="row" gap="size-200">
{combinations.map(c => {
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'empty';
}
Expand All @@ -94,7 +94,7 @@ const Template: StoryFn<SpectrumComboBoxProps<object>> = (args) => (
const TemplateSideLabel: StoryFn<SpectrumComboBoxProps<object>> = (args) => (
<Grid columns={repeat(2, '1fr')} autoFlow="row" gap="size-200" width={800}>
{combinations.filter(combo => !(combo.isReadOnly || combo.isDisabled)).map(c => {
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'empty';
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ const renderActions = (
const Template = ({combos, ...args}) => (
<Grid columns={repeat(3, '1fr')} autoFlow="row" gap="size-300">
{combos.map(c => {
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'empty';
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ export default meta;
const Template: StoryFn<SpectrumNumberFieldProps> = (args) => (
<Grid columns={repeat(states.length, '1fr')} autoFlow="row" gap="size-300">
{combinations.map(c => {
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'empty';
}
Expand All @@ -125,7 +125,7 @@ const Template: StoryFn<SpectrumNumberFieldProps> = (args) => (
const TemplateVertical: StoryFn<SpectrumNumberFieldProps> = (args) => (
<Grid autoFlow="row" gap="size-300">
{combinations.map(c => {
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'empty';
}
Expand All @@ -137,7 +137,7 @@ const TemplateVertical: StoryFn<SpectrumNumberFieldProps> = (args) => (
const TemplateSmall: StoryFn<SpectrumNumberFieldProps> = (args) => (
<Grid columns={repeat(4, '1fr')} autoFlow="row" gap="size-200">
{combinations.map(c => {
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'empty';
}
Expand All @@ -149,7 +149,7 @@ const TemplateSmall: StoryFn<SpectrumNumberFieldProps> = (args) => (
const TemplateWithForcedStyles: StoryFn<SpectrumNumberFieldProps> = (args) => (
<Grid columns={repeat(states.length, '1fr')} autoFlow="row" gap="size-300">
{combinationsStyles.map(c => {
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
return <div key={key}><div>{key}</div><NumberField {...args} {...c} /></div>;
})}
</Grid>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ const Template = (args) => {
return (
<div className={style({display: 'grid', gridTemplateColumns: 'repeat(4, minmax(0, 250px))', gridAutoFlow: 'row', justifyItems: 'start', gap: 24, width: '[100vw]'})}>
{combinations.map(c => {
let fullComboName = Object.keys(c).map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let fullComboName = Object.keys(c).reverse().map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'default';
}
Expand Down
4 changes: 2 additions & 2 deletions packages/@react-spectrum/s2/chromatic/Badge.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ const Template = ({combos, ...args}) => {
return (
<div className={style({display: 'grid', gridTemplateColumns: 'repeat(4, minmax(0, 250px))', gridAutoFlow: 'row', alignItems: 'center', justifyItems: 'start', gap: 24, width: '[100vw]'})}>
{combos.map(c => {
let fullComboName = Object.keys(c).map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let fullComboName = Object.keys(c).reverse().map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'default';
}
Expand Down
4 changes: 2 additions & 2 deletions packages/@react-spectrum/s2/chromatic/Breadcrumbs.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ const Template = () => {
return (
<div className={style({display: 'grid', gridTemplateColumns: 'repeat(2, minmax(0, 250px))', gridAutoFlow: 'row', alignItems: 'center', justifyItems: 'start', gap: 24, width: '[100vw]'})}>
{combinations.map(c => {
let fullComboName = Object.keys(c).map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let fullComboName = Object.keys(c).reverse().map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'default';
}
Expand Down
4 changes: 2 additions & 2 deletions packages/@react-spectrum/s2/chromatic/Button.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ const Template = (args) => {
return (
<div className={style({display: 'grid', gridTemplateColumns: 'repeat(4, minmax(0, 250px))', gridAutoFlow: 'row', alignItems: 'center', justifyItems: 'start', gap: 24, width: '[100vw]'})}>
{combinations.map(c => {
let fullComboName = Object.keys(c).map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let fullComboName = Object.keys(c).reverse().map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'default';
}
Expand Down
4 changes: 2 additions & 2 deletions packages/@react-spectrum/s2/chromatic/ButtonGroup.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ const Template = ({combos, containerStyle, ...args}) => {
return (
<div className={containerStyle}>
{combos.map(c => {
let fullComboName = Object.keys(c).map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let fullComboName = Object.keys(c).reverse().map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'default';
}
Expand Down
4 changes: 2 additions & 2 deletions packages/@react-spectrum/s2/chromatic/Checkbox.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ const Template = ({combos, ...args}) => {
return (
<div className={style({display: 'grid', gridTemplateColumns: 'repeat(4, minmax(0, 250px))', gridAutoFlow: 'row', alignItems: 'center', justifyItems: 'start', gap: 24, width: '[100vw]'})}>
{combos.map(c => {
let fullComboName = Object.keys(c).map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let fullComboName = Object.keys(c).reverse().map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'default';
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ const Template = ({combos, containerStyle, ...args}) => {
return (
<div className={containerStyle}>
{combos.map(c => {
let fullComboName = Object.keys(c).map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let fullComboName = Object.keys(c).reverse().map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'default';
}
Expand Down
4 changes: 2 additions & 2 deletions packages/@react-spectrum/s2/chromatic/ColorField.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ const Template = ({combos, ...args}) => {
return (
<div className={style({display: 'grid', gridTemplateColumns: 'repeat(3, minmax(0, 450px))', gridAutoFlow: 'row', justifyItems: 'start', gap: 24, width: '[100vw]'})}>
{combos.map(c => {
let fullComboName = Object.keys(c).map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let fullComboName = Object.keys(c).reverse().map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'default';
}
Expand Down
8 changes: 4 additions & 4 deletions packages/@react-spectrum/s2/chromatic/ColorSlider.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ let combinations = generatePowerset(states, (merged) => merged.label === null &&
const Template = (args) => (
<div className={style({display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gridAutoFlow: 'row', justifyItems: 'start', gap: 24, width: '[100vw]'})}>
{combinations.map(c => {
let fullComboName = Object.keys(c).map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let fullComboName = Object.keys(c).reverse().map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'empty';
}
Expand All @@ -56,8 +56,8 @@ const Template = (args) => (
const VerticalTemplate = (args) => (
<div className={style({display: 'grid', gridTemplateColumns: 'repeat(5, 1fr)', gridAutoFlow: 'row', justifyItems: 'start', gap: 24, width: '[100vw]'})}>
{combinations.map(c => {
let fullComboName = Object.keys(c).map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let fullComboName = Object.keys(c).reverse().map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'empty';
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@
* governing permissions and limitations under the License.
*/

import {ColorSwatch} from '../src/ColorSwatch';
import {ColorSwatchPicker} from '../src/ColorSwatchPicker';
import {Example, ManySwatches} from '../stories/ColorSwatchPicker.stories';
import {Example} from '../stories/ColorSwatchPicker.stories';
import type {Meta} from '@storybook/react';
import {style} from '../style' with {type: 'macro'};

const meta: Meta<typeof ColorSwatchPicker> = {
component: ColorSwatchPicker,
Expand All @@ -24,4 +26,39 @@ const meta: Meta<typeof ColorSwatchPicker> = {

export default meta;

export {Example, ManySwatches};
export {Example};

let colors = [
'#b3e5c2',
'#71fa78',
'#51a358',
'#0346d4',
'#6f975c',
'#d1239a',
'#70f72d',
'#36f556',
'#470a97',
'#1c0aa4',
'#3500c0',
'#dcd549',
'#bfb405',
'#710ac9',
'#342c8f',
'#858af4',
'#133c2b',
'#14dbac',
'#41696c',
'#f28686',
'#58f9a5',
'#ff8553',
'#7cf5c3',
'#bb6b41'
];

export const ManySwatches = (args: any) => (
<ColorSwatchPicker {...args} styles={style({maxWidth: 192})}>
{colors.map((color) => {
return <ColorSwatch key={color} color={color} />;
})}
</ColorSwatchPicker>
);
4 changes: 2 additions & 2 deletions packages/@react-spectrum/s2/chromatic/NumberField.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ const Template = ({...args}) => {
return (
<div className={style({display: 'grid', gridTemplateColumns: 'repeat(4, minmax(0, 250px))', gridAutoFlow: 'row', alignItems: 'center', justifyItems: 'start', gap: 24, width: '[100vw]'})}>
{combinations.map(c => {
let fullComboName = Object.keys(c).map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let fullComboName = Object.keys(c).reverse().map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'default';
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ const Template = (args) => {
return (
<div className={style({display: 'grid', gridTemplateColumns: 'repeat(4, minmax(0, 250px))', gridAutoFlow: 'row', justifyItems: 'start', gap: 24, width: '[100vw]'})}>
{combinations.map(c => {
let fullComboName = Object.keys(c).map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let fullComboName = Object.keys(c).reverse().map(k => `${k}: ${c[k]}`).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'default';
}
Expand Down
2 changes: 1 addition & 1 deletion packages/@react-spectrum/s2/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@
"postpack": "git checkout -- package.json"
},
"devDependencies": {
"@adobe/spectrum-tokens": "^13.0.0-beta.53",
"@adobe/spectrum-tokens": "^13.0.0-beta.56",
"@parcel/macros": "^2.13.0",
"@react-aria/test-utils": "1.0.0-alpha.3",
"@testing-library/dom": "^10.1.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ export default meta;
const Template: StoryFn<SpectrumSearchWithinProps> = (args) => (
<Grid columns={repeat(4, '1fr')} autoFlow="row" gap="size-200">
{combinations.map(c => {
let key = Object.keys(c).map(k => shortName(k)).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k)).join(' ');
if (!key) {
key = 'empty';
}
Expand All @@ -83,7 +83,7 @@ const Template: StoryFn<SpectrumSearchWithinProps> = (args) => (
const TemplateSideLabel: StoryFn<SpectrumSearchWithinProps> = (args) => (
<Grid columns={repeat(2, '1fr')} autoFlow="row" gap="size-200">
{combinations.map(c => {
let key = Object.keys(c).map(k => shortName(k)).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k)).join(' ');
if (!key) {
key = 'empty';
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ let items = [
const Template = ({columns, items, ...args}) => (
<Grid columns={repeat(3, '1fr')} autoFlow="row" gap="size-300">
{combinations.map(c => {
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'empty';
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ let nestedItems = [
const Template = ({combos, columns, items, ...args}) => (
<Grid columns={repeat(3, '1fr')} autoFlow="row" gap="size-300">
{combos.map(c => {
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'empty';
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ export default meta;
const Template = ({combos}) => (
<Grid columns={repeat(3, '1fr')} autoFlow="row" gap="size-300">
{combos.map(c => {
let key = Object.keys(c).map(k => shortName(k, c[k])).join(' ');
let key = Object.keys(c).reverse().map(k => shortName(k, c[k])).join(' ');
if (!key) {
key = 'empty';
}
Expand Down
Loading