= {
16 | title: 'Docs Utils/StoryHeading',
17 | component: StoryHeading,
18 | }
19 |
20 | export default meta
21 |
--------------------------------------------------------------------------------
/packages/core/src/DocsUtils/StoryHeading/StoryHeading.test.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { render, screen } from '../../__test__/testing-library'
3 | import { StoryHeading } from './StoryHeading'
4 |
5 | describe('StoryHeading component', () => {
6 | it('should render with the correct text and id', () => {
7 | const storyName = 'Introduction'
8 | const storyTitle = 'Getting started'
9 | render()
10 | const heading = screen.getByText(storyName)
11 | expect(heading).toHaveAttribute('id', 'story--getting-started--introduction')
12 | })
13 | })
14 |
--------------------------------------------------------------------------------
/packages/core/src/DocsUtils/StoryHeading/StoryHeading.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Text } from '../../Text/Text'
3 | import { getStoryId } from '../utils'
4 |
5 | /**
6 | * @public
7 | */
8 | export type StoryHeadingProps = {
9 | storyName: string
10 | storyTitle: string
11 | }
12 |
13 | /**
14 | * @public
15 | */
16 | export const StoryHeading = ({ storyName, storyTitle }: StoryHeadingProps) => (
17 |
18 | {storyName}
19 |
20 | )
21 |
--------------------------------------------------------------------------------
/packages/core/src/DocsUtils/StoryStage/StoryStage.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import styled from 'styled-components'
3 | import { Box } from '../../Box/Box'
4 |
5 | const Stage = styled(Box)`
6 | > * {
7 | margin: 16px;
8 | }
9 | `
10 |
11 | /**
12 | * @public
13 | */
14 | export type StoryStageProps = {
15 | children: React.ReactNode
16 | [x: string]: unknown
17 | }
18 |
19 | /**
20 | * @public
21 | */
22 | export const StoryStage = ({ children, ...rest }: StoryStageProps) => {children}
23 |
--------------------------------------------------------------------------------
/packages/core/src/DocsUtils/utils.ts:
--------------------------------------------------------------------------------
1 | import { StoryFn, StoryObj } from '@storybook/react'
2 | import kebabCase from 'lodash/kebabCase'
3 | import reactElementToJSXString from 'react-element-to-jsx-string'
4 |
5 | export const copy = async (value: string) => navigator.clipboard.writeText(value)
6 |
7 | export const getStoryId = (storyName?: string, storyTitle?: string) =>
8 | `story--${kebabCase(storyTitle)}--${kebabCase(storyName)}`
9 |
10 | export const getStoryCode = (story: StoryFn | StoryObj) => {
11 | const code = typeof story === 'function' ? story(story.args, null) : story.render(story.args, null)
12 | return reactElementToJSXString(code, { showDefaultProps: false })
13 | }
14 |
--------------------------------------------------------------------------------
/packages/core/src/Drawer/helpers/getDividerStyle.spec.ts:
--------------------------------------------------------------------------------
1 | import { getDividerStyle } from './getDividerStyle'
2 |
3 | describe('Drawer divider toggle helper unit test', () => {
4 | test('If showDivider, return boxShadow', () => {
5 | const boxShadow = {
6 | 'box-shadow': '10px 10px',
7 | }
8 | const res = getDividerStyle({ showDivider: true, boxShadow })
9 | expect(res).toEqual({ boxShadow })
10 | })
11 |
12 | test('If !showDivider, return {}', () => {
13 | const boxShadow = {
14 | 'box-shadow': '10px 10px',
15 | }
16 | const res = getDividerStyle({ showDivider: false, boxShadow })
17 | expect(res).toEqual({})
18 | })
19 | })
20 |
--------------------------------------------------------------------------------
/packages/core/src/Drawer/helpers/getDividerStyle.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Toggle divider visibility
3 | */
4 | export const getDividerStyle = ({ showDivider, boxShadow }) =>
5 | showDivider
6 | ? {
7 | boxShadow,
8 | }
9 | : {}
10 |
--------------------------------------------------------------------------------
/packages/core/src/Drawer/helpers/getEnterAnimation.spec.ts:
--------------------------------------------------------------------------------
1 | import { getEnterAnimation } from './getEnterAnimation'
2 |
3 | describe('Entrance animation unit test', () => {
4 | test('Hide animation if ebaled', () => {
5 | const res = getEnterAnimation({ disableEnterAnimation: true, isMobile: true, placement: 'top' })
6 | expect(res).toBeFalsy()
7 | })
8 |
9 | test('Return animation if disabled', () => {
10 | const res = getEnterAnimation({ disableEnterAnimation: false, isMobile: true, placement: 'top' })
11 | expect(res).toBeTruthy()
12 | })
13 | })
14 |
--------------------------------------------------------------------------------
/packages/core/src/Drawer/helpers/getEnterAnimation.ts:
--------------------------------------------------------------------------------
1 | import { MotionVariants } from '../../Animate/Animate'
2 |
3 | /**
4 | * Handles enter animation based on drawer placement
5 | */
6 | const enterAnimation = {
7 | top: { ...MotionVariants.slideInTop },
8 | bottom: { ...MotionVariants.slideInBottom },
9 | right: { ...MotionVariants.slideInRight },
10 | left: { ...MotionVariants.slideInLeft },
11 | }
12 |
13 | export const getEnterAnimation = ({ disableEnterAnimation, isMobile, placement }) =>
14 | !disableEnterAnimation && enterAnimation[isMobile ? 'bottom' : placement]
15 |
--------------------------------------------------------------------------------
/packages/core/src/Drawer/helpers/index.ts:
--------------------------------------------------------------------------------
1 | import { getDragToDismissAnimation } from './getDragToDismissAnimation'
2 | import { getDividerStyle } from './getDividerStyle'
3 | import { getEnterAnimation } from './getEnterAnimation'
4 |
5 | export { getDragToDismissAnimation, getDividerStyle, getEnterAnimation }
6 |
--------------------------------------------------------------------------------
/packages/core/src/FloatingActionButton/FloatingActionButton.spec.tsx:
--------------------------------------------------------------------------------
1 | import { Cars } from 'pcln-icons'
2 | import React from 'react'
3 | import { render } from '../__test__/testing-library'
4 | import { FloatingActionButton } from './FloatingActionButton'
5 |
6 | describe('FloatingActionButton', () => {
7 | test('it renders', () => {
8 | const { asFragment } = render()
9 | expect(asFragment()).toMatchSnapshot()
10 | })
11 | })
12 |
--------------------------------------------------------------------------------
/packages/core/src/FloatingActionButton/FloatingActionButton.styled.tsx:
--------------------------------------------------------------------------------
1 | import { themeGet } from '@styled-system/theme-get'
2 | import styled from 'styled-components'
3 | import { Box } from '../Box/Box'
4 | import { Button } from '../Button/Button'
5 |
6 | export const StyledButton = styled(Button)`
7 | &:hover {
8 | box-shadow: ${themeGet('shadows.overlay-lg')};
9 | }
10 | `
11 |
12 | export const NotificationDot = styled(Box)`
13 | border: 1px solid rgba(255, 255, 255, 0.75);
14 | `
15 |
--------------------------------------------------------------------------------
/packages/core/src/FloatingActionButton/constants.ts:
--------------------------------------------------------------------------------
1 | const TOOLTIP_ALIGNMENT = {
2 | right: { right: true },
3 | center: { center: true },
4 | left: { left: true },
5 | }
6 |
7 | export { TOOLTIP_ALIGNMENT }
8 |
--------------------------------------------------------------------------------
/packages/core/src/FloatingActionButtonProvider/FloatingActionButtonProvider.styled.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components'
2 | import { Absolute } from '../Absolute/Absolute'
3 |
4 | const Wrapper = styled(Absolute)`
5 | position: fixed;
6 | ${(props) => (props.positionVariant === 'centerRight' ? 'transform: translateY(-50%);' : '')}
7 | `
8 |
9 | export { Wrapper }
10 |
--------------------------------------------------------------------------------
/packages/core/src/FloatingActionButtonProvider/constants.ts:
--------------------------------------------------------------------------------
1 | const POSITION_STYLES = {
2 | bottomRight: {
3 | right: 16,
4 | bottom: 16,
5 | },
6 | centerRight: {
7 | right: 16,
8 | top: '50%',
9 | },
10 | topRight: {
11 | top: 16,
12 | right: 16,
13 | },
14 | }
15 |
16 | export { POSITION_STYLES }
17 |
--------------------------------------------------------------------------------
/packages/core/src/FloatingActionButtonProvider/helpers.ts:
--------------------------------------------------------------------------------
1 | const getScrollPercentage = () =>
2 | (Math.round(window.scrollY) / (document.documentElement.scrollHeight - window.innerHeight)) * 100
3 |
4 | const delay = async (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))
5 |
6 | const addScrollListener = (handleScroll) => {
7 | window.addEventListener('scroll', handleScroll, { passive: true })
8 | return () => {
9 | window.removeEventListener('scroll', handleScroll)
10 | }
11 | }
12 |
13 | export { getScrollPercentage, delay, addScrollListener }
14 |
--------------------------------------------------------------------------------
/packages/core/src/GenericBanner/GenericBanner.stories.args.ts:
--------------------------------------------------------------------------------
1 | import { borderRadii } from '../storybook/args'
2 |
3 | export const argTypes = {
4 | borderRadius: {
5 | name: 'borderRadius',
6 | type: { name: 'string' },
7 | options: borderRadii,
8 | description: 'borderRadius',
9 | control: {
10 | type: 'select',
11 | },
12 | },
13 | }
14 |
--------------------------------------------------------------------------------
/packages/core/src/Heading/Heading.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Text } from '../Text/Text'
3 |
4 | export const Heading = (props) =>
5 |
6 | Heading.displayName = 'Heading'
7 |
8 | Heading.h1 = (props) =>
9 | Heading.h2 = (props) =>
10 | Heading.h3 = (props) =>
11 | Heading.h4 = (props) =>
12 | Heading.h5 = (props) =>
13 | Heading.h6 = (props) =>
14 |
--------------------------------------------------------------------------------
/packages/core/src/Hug/__snapshots__/Hug.spec.tsx.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`Hug renders text when array of nodes is provided 1`] = `[Function]`;
4 |
5 | exports[`Hug renders text when string is provided 1`] = `[Function]`;
6 |
7 | exports[`Hug renders text, icon, and Child 1`] = `[Function]`;
8 |
--------------------------------------------------------------------------------
/packages/core/src/Icon/Icon.ts:
--------------------------------------------------------------------------------
1 | import { Icon as PclnIcon } from 'pcln-icons'
2 |
3 | export const Icon = PclnIcon
4 | Icon.isIcon = true
5 |
--------------------------------------------------------------------------------
/packages/core/src/Image/Image.Image.ContentAlignmentFormating.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/priceline/design-system/c6947fd254e54bbdf4ffc04645985cfd48c6c8f6/packages/core/src/Image/Image.Image.ContentAlignmentFormating.png
--------------------------------------------------------------------------------
/packages/core/src/Image/Image.Image.Hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/priceline/design-system/c6947fd254e54bbdf4ffc04645985cfd48c6c8f6/packages/core/src/Image/Image.Image.Hero.png
--------------------------------------------------------------------------------
/packages/core/src/Image/Image.Image.Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/priceline/design-system/c6947fd254e54bbdf4ffc04645985cfd48c6c8f6/packages/core/src/Image/Image.Image.Logo.png
--------------------------------------------------------------------------------
/packages/core/src/Image/Image.Image.MaintainingAspectRatio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/priceline/design-system/c6947fd254e54bbdf4ffc04645985cfd48c6c8f6/packages/core/src/Image/Image.Image.MaintainingAspectRatio.png
--------------------------------------------------------------------------------
/packages/core/src/Image/Image.Image.RelatedComponents.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/priceline/design-system/c6947fd254e54bbdf4ffc04645985cfd48c6c8f6/packages/core/src/Image/Image.Image.RelatedComponents.png
--------------------------------------------------------------------------------
/packages/core/src/Image/Image.Image.ResponsiveVariableWidths.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/priceline/design-system/c6947fd254e54bbdf4ffc04645985cfd48c6c8f6/packages/core/src/Image/Image.Image.ResponsiveVariableWidths.png
--------------------------------------------------------------------------------
/packages/core/src/InputGroup/InputGroup.spec.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { render } from '../__test__/testing-library'
3 | import { InputGroup } from './InputGroup'
4 |
5 | describe('InputGroup', () => {
6 | test('renders', () => {
7 | const { asFragment } = render()
8 | expect(asFragment()).toMatchSnapshot()
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/packages/core/src/Label/__snapshots__/Label.spec.tsx.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`Label it renders 1`] = `
4 | .c0 {
5 | display: block;
6 | width: 100%;
7 | margin: 0;
8 | z-index: 1;
9 | color: #4f6f8f;
10 | font-weight: 700;
11 | font-size: 10px;
12 | line-height: 1.4;
13 | -webkit-letter-spacing: 0.2px;
14 | -moz-letter-spacing: 0.2px;
15 | -ms-letter-spacing: 0.2px;
16 | letter-spacing: 0.2px;
17 | }
18 |
19 |
26 | `;
27 |
--------------------------------------------------------------------------------
/packages/core/src/Popover/Popover.styles.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components'
2 | import { getPaletteColor } from '../utils'
3 |
4 | export const FixedCloseButton = styled.div`
5 | position: fixed;
6 | top: 4px;
7 | right: 4px;
8 | `
9 |
10 | export const StyledArrow = styled.div`
11 | fill: ${({ color }) => getPaletteColor(color)};
12 | `
13 |
--------------------------------------------------------------------------------
/packages/core/src/Radio/Radio.spec.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Radio } from './Radio'
3 |
4 | describe('Radio', () => {
5 | test('Selected, rendering', () => {
6 | const json = rendererCreateWithTheme().toJSON()
7 | expect(json).toMatchSnapshot()
8 | })
9 |
10 | test('Not Selected, rendering', () => {
11 | const json = rendererCreateWithTheme().toJSON()
12 | expect(json).toMatchSnapshot()
13 | })
14 |
15 | test('Disabled, rendering', () => {
16 | const json = rendererCreateWithTheme().toJSON()
17 | expect(json).toMatchSnapshot()
18 | })
19 | })
20 |
--------------------------------------------------------------------------------
/packages/core/src/Relative/__snapshots__/Relative.spec.tsx.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`Relative renders with flag and Child 1`] = `[Function]`;
4 |
5 | exports[`Relative renders with top, left and zIndex props 1`] = `
6 | .c0 {
7 | position: relative;
8 | top: 10px;
9 | left: 0px;
10 | z-index: 2;
11 | }
12 |
13 |
16 | `;
17 |
--------------------------------------------------------------------------------
/packages/core/src/SlideBox/Arrow.styled.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components'
2 | import { Absolute } from '../Absolute/Absolute'
3 |
4 | export const AbsoluteTransformLeft = styled(Absolute)`
5 | transform: translateX(-50%);
6 | `
7 |
8 | export const AbsoluteTransformRight = styled(Absolute)`
9 | transform: translateX(50%);
10 | `
11 |
12 | export const ARROW_SIZES = {
13 | sm: {
14 | buttonSize: 40,
15 | iconSize: 32,
16 | },
17 | lg: {
18 | buttonSize: [40, null, null, null, 60],
19 | iconSize: [32, null, null, null, 40],
20 | },
21 | }
22 |
--------------------------------------------------------------------------------
/packages/core/src/SlideBox/SlideBox.styled.ts:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components'
2 | import { Box } from '../Box/Box'
3 | import { Flex } from '../Flex/Flex'
4 |
5 | const SlideWrapper = styled(Box)``
6 |
7 | const ScrollFlex = styled(Flex)`
8 | position: relative;
9 | overflow: auto;
10 | scroll-behavior: smooth;
11 | & > ${SlideWrapper} {
12 | flex-shrink: 0;
13 | }
14 | `
15 |
16 | export { ScrollFlex, SlideWrapper }
17 |
--------------------------------------------------------------------------------
/packages/core/src/SlideBox/SlideBoxWrapper.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Box } from '../Box/Box'
3 | import { Flex } from '../Flex/Flex'
4 | import { Relative } from '../Relative/Relative'
5 | import { type ArrowPosition } from './Arrow'
6 |
7 | export type SlideBoxWrapperProps = {
8 | arrowPosition?: ArrowPosition
9 | children: React.ReactNode
10 | }
11 | export function SlideBoxWrapper({ children, arrowPosition }: SlideBoxWrapperProps): JSX.Element {
12 | return arrowPosition === 'side' ? (
13 |
14 | {children}
15 |
16 | ) : (
17 | {children}
18 | )
19 | }
20 |
--------------------------------------------------------------------------------
/packages/core/src/SlideBox/helpers.ts:
--------------------------------------------------------------------------------
1 | export const getWidth = (visibleSlides) =>
2 | visibleSlides < 1 ? `${(100 / visibleSlides).toFixed(0)}%` : 1 / visibleSlides
3 |
4 | export const getVisibleSlides = (visibleSlides) =>
5 | Array.isArray(visibleSlides)
6 | ? visibleSlides.map((vs) => getWidth(vs))
7 | : [getWidth(1.1), null, null, getWidth(2.1), getWidth(visibleSlides)]
8 |
9 | export const getCustomWidths = (widths, index) => [
10 | getWidth(1.1),
11 | null,
12 | null,
13 | getWidth(2.1),
14 | `${widths[(index + widths.length) % widths.length]}%`,
15 | ]
16 |
--------------------------------------------------------------------------------
/packages/core/src/SrOnly/SrOnly.spec.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { SrOnly } from './SrOnly'
3 |
4 | describe('Absolute', () => {
5 | test('renders with approprite styles to display offscreen', () => {
6 | const json = rendererCreateWithTheme().toJSON()
7 | expect(json).toMatchSnapshot()
8 | })
9 | })
10 |
--------------------------------------------------------------------------------
/packages/core/src/SrOnly/SrOnly.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components'
2 |
3 | export const SrOnly = styled.span`
4 | position: absolute;
5 | overflow: hidden;
6 | clip: rect(0 0 0 0);
7 | height: 1px;
8 | width: 1px;
9 | margin: -1px;
10 | padding: 0;
11 | border: 0;
12 | `
13 |
14 | SrOnly.displayName = 'SrOnly'
15 |
--------------------------------------------------------------------------------
/packages/core/src/SrOnly/__snapshots__/SrOnly.spec.tsx.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`Absolute renders with approprite styles to display offscreen 1`] = `
4 | .c0 {
5 | position: absolute;
6 | overflow: hidden;
7 | -webkit-clip: rect(0 0 0 0);
8 | clip: rect(0 0 0 0);
9 | height: 1px;
10 | width: 1px;
11 | margin: -1px;
12 | padding: 0;
13 | border: 0;
14 | }
15 |
16 |
19 | `;
20 |
--------------------------------------------------------------------------------
/packages/core/src/Stamp/Stamp.stories.args.ts:
--------------------------------------------------------------------------------
1 | import { borderRadii } from '../storybook/args'
2 |
3 | export const argTypes = {
4 | borderRadius: {
5 | name: 'borderRadius',
6 | type: { name: 'string' },
7 | options: borderRadii,
8 | description: 'borderRadius',
9 | control: {
10 | type: 'select',
11 | },
12 | },
13 | }
14 |
--------------------------------------------------------------------------------
/packages/core/src/Text/Text.stories.args.ts:
--------------------------------------------------------------------------------
1 | import { textStyles } from '../storybook/args'
2 |
3 | export const defaultArgs = {}
4 |
5 | export const argTypes = {
6 | textStyle: {
7 | name: 'textStyle',
8 | type: { name: 'string' },
9 | options: textStyles,
10 | description: 'curated text display properties',
11 | control: {
12 | type: 'select',
13 | },
14 | },
15 | }
16 |
--------------------------------------------------------------------------------
/packages/core/src/Toast/Toast.stories.args.ts:
--------------------------------------------------------------------------------
1 | export const defaultArgs = {
2 | children: 'Success Message',
3 | color: 'success',
4 | }
5 |
6 | export const argTypes = {}
7 |
--------------------------------------------------------------------------------
/packages/core/src/ToggleBadge/ToggleBadge.stories.args.ts:
--------------------------------------------------------------------------------
1 | import { borderRadii } from '../storybook/args'
2 |
3 | export const argTypes = {
4 | borderRadius: {
5 | name: 'borderRadius',
6 | type: { name: 'string' },
7 | options: borderRadii,
8 | description: 'borderRadius',
9 | control: {
10 | type: 'select',
11 | },
12 | },
13 | }
14 |
--------------------------------------------------------------------------------
/packages/core/src/Tooltip/Tooltip.stories.args.ts:
--------------------------------------------------------------------------------
1 | import { borderRadii } from '../storybook/args'
2 |
3 | export const argTypes = {
4 | borderRadius: {
5 | name: 'borderRadius',
6 | type: { name: 'string' },
7 | options: borderRadii,
8 | description: 'borderRadius',
9 | control: {
10 | type: 'select',
11 | },
12 | },
13 | }
14 |
--------------------------------------------------------------------------------
/packages/core/src/Truncate/Truncate.spec.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Truncate } from './Truncate'
3 |
4 | describe('Truncate', () => {
5 | test('renders', () => {
6 | const json = rendererCreateWithTheme(renders).toJSON()
7 | expect(json).toMatchSnapshot()
8 | })
9 |
10 | test('generates styles', () => {
11 | const json = rendererCreateWithTheme(generates styles).toJSON()
12 | expect(json).toMatchSnapshot()
13 | expect(json).toHaveStyleRule('overflow', 'hidden')
14 | expect(json).toHaveStyleRule('white-space', 'nowrap')
15 | expect(json).toHaveStyleRule('text-overflow', 'ellipsis')
16 | })
17 | })
18 |
--------------------------------------------------------------------------------
/packages/core/src/Truncate/Truncate.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components'
2 | import { Text } from '../Text/Text'
3 |
4 | /**
5 | * @public
6 | */
7 | export const Truncate = styled(Text)`
8 | overflow: hidden;
9 | white-space: nowrap;
10 | text-overflow: ellipsis;
11 | `
12 |
13 | Truncate.displayName = 'Truncate'
14 |
--------------------------------------------------------------------------------
/packages/core/src/Truncate/__snapshots__/Truncate.spec.tsx.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`Truncate generates styles 1`] = `
4 | .c0 {
5 | overflow: hidden;
6 | white-space: nowrap;
7 | text-overflow: ellipsis;
8 | }
9 |
10 |
13 | generates styles
14 |
15 | `;
16 |
17 | exports[`Truncate renders 1`] = `
18 | .c0 {
19 | overflow: hidden;
20 | white-space: nowrap;
21 | text-overflow: ellipsis;
22 | }
23 |
24 |
27 | renders
28 |
29 | `;
30 |
--------------------------------------------------------------------------------
/packages/core/src/__test__/jest.setup.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { ThemeProvider } from 'styled-components'
3 |
4 | import '@testing-library/jest-dom'
5 | import 'jest-styled-components'
6 | import renderer from 'react-test-renderer'
7 |
8 | import { createTheme } from '../utils/createTheme'
9 |
10 | global.rendererCreateWithTheme = (tree) =>
11 | renderer.create({tree})
12 |
13 | global.requestAnimationFrame =
14 | global.requestAnimationFrame ||
15 | function _raf(cb) {
16 | return setTimeout(cb, 0)
17 | }
18 |
--------------------------------------------------------------------------------
/packages/core/src/__test__/mocks/colors.ts:
--------------------------------------------------------------------------------
1 | export const colors = {
2 | primary: 'primary',
3 | secondary: 'secondary',
4 | text: 'text',
5 | success: 'success',
6 | error: 'error',
7 | warning: 'warning',
8 | alert: 'alert',
9 | caution: 'caution',
10 | notify: 'notify',
11 | pricePrimary: 'pricePrimary',
12 | priceSecondary: 'priceSecondary',
13 | promoPrimary: 'promoPrimary',
14 | promoSecondary: 'promoSecondary',
15 | border: 'border',
16 | background: 'background',
17 | }
18 |
--------------------------------------------------------------------------------
/packages/core/src/__test__/testing-library.tsx:
--------------------------------------------------------------------------------
1 | import { render, type RenderResult } from '@testing-library/react'
2 | import React from 'react'
3 | import { ThemeProvider } from '../ThemeProvider/ThemeProvider'
4 |
5 | const WithThemeProvider = ({ children }) => {children}
6 |
7 | const customRender: (Element, any?) => RenderResult = (ui, options) =>
8 | render(ui, { wrapper: WithThemeProvider, ...options })
9 |
10 | export * from '@testing-library/react'
11 | export { customRender as render }
12 |
13 | export const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))
14 |
--------------------------------------------------------------------------------
/packages/core/src/global.d.ts:
--------------------------------------------------------------------------------
1 | declare var rendererCreateWithTheme
2 |
3 | declare var JSX
4 |
5 | declare module 'testing-library'
6 |
7 | declare module 'pcln-icons'
8 |
9 | declare module '*.png'
10 | declare module '*.jpeg'
11 | declare module '*.jpg'
12 |
--------------------------------------------------------------------------------
/packages/core/src/storybook/utils/ForwardRefsDemo.tsx:
--------------------------------------------------------------------------------
1 | import React, { useRef } from 'react'
2 |
3 | /**
4 | * This is a demo component for Storybook that provides a ref to content using a render prop
5 | */
6 | export default function ForwardRefsDemo({ refChild }) {
7 | const dsRef = useRef(null)
8 |
9 | return <>{refChild(dsRef)}>
10 | }
11 |
--------------------------------------------------------------------------------
/packages/core/src/theme/index.ts:
--------------------------------------------------------------------------------
1 | export * from './theme'
2 |
--------------------------------------------------------------------------------
/packages/core/src/utils/attrs/boxShadowAttrs.spec.ts:
--------------------------------------------------------------------------------
1 | import { createTheme } from '../createTheme'
2 | import { boxShadowAttrs, boxShadowSizeValues } from './boxShadowAttrs'
3 |
4 | const theme = createTheme()
5 |
6 | describe('boxShadowAttrs', () => {
7 | it.each(boxShadowSizeValues)('works with and boxShadowSize=%s', (boxShadowSize) => {
8 | const attrs = boxShadowAttrs({ boxShadowSize, theme })
9 |
10 | expect(attrs).toMatchSnapshot()
11 | })
12 |
13 | it('should handle an array prop', () => {
14 | const attrs = boxShadowAttrs({ boxShadowSize: [...boxShadowSizeValues, '9999px'], theme })
15 |
16 | expect(attrs).toMatchSnapshot()
17 | })
18 | })
19 |
--------------------------------------------------------------------------------
/packages/core/src/utils/attrs/index.ts:
--------------------------------------------------------------------------------
1 | export * from './borderRadiusAttrs'
2 | export * from './boxShadowAttrs'
3 | export * from './textAlignAttrs'
4 | export * from './typographyAttrs'
5 |
--------------------------------------------------------------------------------
/packages/core/src/utils/attrs/textAlignAttrs.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * @deprecated align prop is not supported since v5
3 | * @public
4 | */
5 | export function textAlignAttrs(props) {
6 | const { align, textAlign } = props
7 |
8 | return {
9 | textAlign: textAlign ? textAlign : align,
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/packages/core/src/utils/attrs/typographyAttrs.spec.ts:
--------------------------------------------------------------------------------
1 | import { createTheme } from '../createTheme'
2 | import { textStylesValues, typographyAttrs } from './typographyAttrs'
3 |
4 | const theme = createTheme()
5 |
6 | describe('typographyAttrs', () => {
7 | it.each(textStylesValues)('works with and textStyle=%s', (textStyle) => {
8 | const attrs = typographyAttrs({ textStyle, theme })
9 |
10 | expect(attrs).toMatchSnapshot()
11 | })
12 |
13 | it('should handle an array prop', () => {
14 | const attrs = typographyAttrs({ textStyle: ['title3', null, 'title2', null, 'title1'], theme })
15 |
16 | expect(attrs).toMatchSnapshot()
17 | })
18 | })
19 |
--------------------------------------------------------------------------------
/packages/core/src/utils/createMediaQueries/createMediaQueries.spec.ts:
--------------------------------------------------------------------------------
1 | import { createMediaQueries } from './createMediaQueries'
2 |
3 | describe('createMediaQueries', () => {
4 | test('returns the correct media queries', () => {
5 | const actual = createMediaQueries(['10px', '20px', '30px'])
6 |
7 | expect(actual).toEqual([
8 | '@media screen and (min-width:10px)',
9 | '@media screen and (min-width:20px)',
10 | '@media screen and (min-width:30px)',
11 | ])
12 | })
13 | })
14 |
--------------------------------------------------------------------------------
/packages/core/src/utils/createMediaQueries/createMediaQueries.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Create media queries array based on the passed in breakpoints
3 | *
4 | * @param breakpoints - The passed in breakpoints array
5 | *
6 | * @returns The generated media queries array
7 | *
8 | * @public
9 | */
10 | export const createMediaQueries = (breakpoints) =>
11 | breakpoints.map((n) => `@media screen and (min-width:${n})`)
12 |
--------------------------------------------------------------------------------
/packages/core/src/utils/createMediaQueries/index.ts:
--------------------------------------------------------------------------------
1 | export { createMediaQueries } from './createMediaQueries'
2 |
--------------------------------------------------------------------------------
/packages/core/src/utils/customStyles/index.ts:
--------------------------------------------------------------------------------
1 | export * from './objectFit'
2 | export * from './objectPosition'
3 |
--------------------------------------------------------------------------------
/packages/core/src/utils/customStyles/objectFit.ts:
--------------------------------------------------------------------------------
1 | import { system } from 'styled-system'
2 |
3 | /**
4 | * @public
5 | */
6 | export const objectFitValues = ['contain', 'cover', 'unset'] as const
7 |
8 | /**
9 | * @public
10 | */
11 | export type ObjectFit = (typeof objectFitValues)[number]
12 |
13 | /**
14 | * @public
15 | */
16 | export function objectFit() {
17 | return system({
18 | objectFit: {
19 | property: 'objectFit',
20 | transform: (val) => val ?? 'unset',
21 | },
22 | })
23 | }
24 |
--------------------------------------------------------------------------------
/packages/core/src/utils/index.ts:
--------------------------------------------------------------------------------
1 | export * from './utils'
2 | export * from './attrs'
3 | export * from './customStyles'
4 | export * from './createPalette'
5 |
6 | export { createColorStyles } from './createColorStyles'
7 | export { createTextStyles } from './createTextStyles'
8 | export { createMediaQueries } from './createMediaQueries'
9 |
--------------------------------------------------------------------------------
/packages/core/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./node_modules/@priceline/heft-component-rig/profiles/react/tsconfig-base.json",
3 |
4 | "compilerOptions": {
5 | "target": "ES2022"
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/packages/icons/.eslintignore:
--------------------------------------------------------------------------------
1 | **/.rush/*
2 | **/node_modules/*
3 |
4 | **/coverage/*
5 |
6 | **/dist/*
7 |
8 | components/*
--------------------------------------------------------------------------------
/packages/icons/.eslintrc.js:
--------------------------------------------------------------------------------
1 | require('@rushstack/eslint-patch/modern-module-resolution')
2 | module.exports = {
3 | extends: ['@priceline', '@priceline/eslint-config/jsx-a11y'],
4 | parserOptions: { tsconfigRootDir: __dirname },
5 | }
6 |
--------------------------------------------------------------------------------
/packages/icons/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = { presets: ['@priceline'] }
2 |
--------------------------------------------------------------------------------
/packages/icons/config/rush-project.json:
--------------------------------------------------------------------------------
1 | {
2 | "operationSettings": [
3 | {
4 | "operationName": "build",
5 | "outputFolderNames": ["dist", "components"]
6 | },
7 | {
8 | "operationName": "test:ci"
9 | },
10 | {
11 | "operationName": "lint"
12 | }
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/packages/icons/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | collectCoverageFrom: ['/src/**/*.js', '/plugins/**/*.js', '!**/*.stories.js'],
3 | moduleDirectories: ['node_modules', 'test'],
4 | reporters: ['jest-standard-reporter'],
5 | setupFilesAfterEnv: ['./test/jest.setup.js'],
6 | }
7 |
--------------------------------------------------------------------------------
/packages/icons/svg/WeatherHurricane.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/packages/icons/svg/arrival.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/arrowDown.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/arrowLeft.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/arrowRight.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/arrowUp.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/attention.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/backpack.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/bed.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/bedKing.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/bedSingle.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/beenHere.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/bookmark.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/bookmarkActivated.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/boxChecked.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/boxEmpty.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/boxMinus.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/boxPlus.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/breakfast.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/broom.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/packages/icons/svg/build.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/business.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/calendar.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/cancel.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/svg/carDoor.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/chart.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/chartAlt.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/chat.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/chatBubble.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/check.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/chevronDoubleLeft.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/svg/chevronDoubleRight.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/svg/chevronDown.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/chevronLeft.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/chevronRight.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/chevronUp.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/clock.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/close.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/convenienceStore.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/copy.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/creditCard.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/departure.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/directions.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/document.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/dot.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/packages/icons/svg/download.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/svg/downloadAlt.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/earlyBird.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/edit.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/electric.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/email.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/event.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/eventAvailable.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/exitToApp.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/externalLink.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/packages/icons/svg/filter.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/flights.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/fridge.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/gallery.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/golf.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/graph.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/grid.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/guestScore.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/home.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/house.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/packages/icons/svg/hybrid.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/image.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/imageWide.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/information.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/informationOutline.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/key.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/laptop.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/lateNight.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/layers.svg:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/packages/icons/svg/list.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/localBar.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/logout.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/luggage.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/manual.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/map.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/menu.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/merge.svg:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/packages/icons/svg/minimize.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/minus.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/moreVertical.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/mountain.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/svg/multiAirline.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/svg/museum.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/navigation.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/newRelease.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/notification.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/svg/notifications.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/offlineBolt.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/onDemand.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/park.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/svg/parking.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/pause.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/svg/picture.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/pieChart.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/pin.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/pinAdd.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/pinEdit.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/playArrow.svg:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/packages/icons/svg/plus.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/plusOne.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/power.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/printer.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/pushPin.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/svg/pushPinBorder.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/svg/quilt.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/radioChecked.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/radioEmpty.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/radioMinus.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/radioPlus.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/railway.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/refresh.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/restaurant.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/road.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/svg/roomSize.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/saveAlt.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/search.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/seat.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/security.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/smartphone.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/sort.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/packages/icons/svg/sprayBottle.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/packages/icons/svg/star.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/starHalf.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/store.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/subdirectoryArrowRight.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/svg/success.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/successOutline.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/sunrise.svg:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/packages/icons/svg/swap.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/swapHorizontal.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/sync.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/tableChart.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/trash.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/trendingDown.svg:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/packages/icons/svg/trendingUp.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/tune.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/user.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/userAdd.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/userChecked.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/userCircle.svg:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/packages/icons/svg/verified.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/viewList.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/viewModule.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/warning.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/warningOutline.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/web.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/widgets.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/svg/wifi.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/zoomOut.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/packages/icons/test/jest.setup.js:
--------------------------------------------------------------------------------
1 | import '@testing-library/jest-dom'
2 | import 'jest-styled-components'
3 |
4 | global.requestAnimationFrame =
5 | global.requestAnimationFrame ||
6 | function _raf(cb) {
7 | return setTimeout(cb, 0)
8 | }
9 |
--------------------------------------------------------------------------------
/packages/icons/test/testing-library.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PropTypes from 'prop-types'
3 | import { render } from '@testing-library/react'
4 | import { ThemeProvider } from 'pcln-design-system'
5 |
6 | const WithThemeProvider = ({ children }) => {children}
7 | WithThemeProvider.propTypes = {
8 | children: PropTypes.node,
9 | }
10 |
11 | const customRender = (ui, options) => render(ui, { wrapper: WithThemeProvider, ...options })
12 |
13 | // re-export everything
14 | export * from '@testing-library/react'
15 |
16 | // override render method
17 | export { customRender as render }
18 |
--------------------------------------------------------------------------------
/packages/menu/.eslintignore:
--------------------------------------------------------------------------------
1 | **/.rush/*
2 | **/node_modules/*
3 |
4 | **/coverage/*
5 |
6 | **/dist/*
--------------------------------------------------------------------------------
/packages/menu/.eslintrc.js:
--------------------------------------------------------------------------------
1 | require('@rushstack/eslint-patch/modern-module-resolution')
2 | module.exports = {
3 | extends: ['@priceline', '@priceline/eslint-config/jsx-a11y'],
4 | parserOptions: { tsconfigRootDir: __dirname },
5 | }
6 |
--------------------------------------------------------------------------------
/packages/menu/README.md:
--------------------------------------------------------------------------------
1 | # pcln-menu
2 |
3 | ```sh
4 | npm i pcln-menu
5 | ```
6 |
7 | ```jsx
8 | import { Menu, MenuItem } from 'pcln-menu'
9 |
10 |
15 | ```
16 |
17 |
--------------------------------------------------------------------------------
/packages/menu/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = { presets: ['@priceline'] }
2 |
--------------------------------------------------------------------------------
/packages/menu/config/rush-project.json:
--------------------------------------------------------------------------------
1 | {
2 | "operationSettings": [
3 | {
4 | "operationName": "build",
5 | "outputFolderNames": ["dist"]
6 | },
7 | {
8 | "operationName": "test:ci"
9 | },
10 | {
11 | "operationName": "lint"
12 | }
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/packages/menu/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | collectCoverageFrom: ['/src/**/*.js', '!/src/**/*.stories.*'],
3 | moduleDirectories: ['node_modules', 'test'],
4 | reporters: ['jest-standard-reporter'],
5 | setupFilesAfterEnv: ['./test/jest.setup.js'],
6 | testEnvironment: 'jsdom',
7 | testMatch: ['/src/**/*.spec.js'],
8 | }
9 |
--------------------------------------------------------------------------------
/packages/menu/src/Menu/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './Menu'
2 |
--------------------------------------------------------------------------------
/packages/menu/src/MenuItem/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './MenuItem'
2 |
--------------------------------------------------------------------------------
/packages/menu/src/MenuList/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './MenuList'
2 |
--------------------------------------------------------------------------------
/packages/menu/src/index.js:
--------------------------------------------------------------------------------
1 | export { default as Menu } from './Menu'
2 | export { default as MenuItem } from './MenuItem'
3 |
--------------------------------------------------------------------------------
/packages/menu/test/jest.setup.js:
--------------------------------------------------------------------------------
1 | import '@testing-library/jest-dom'
2 | import 'jest-styled-components'
3 |
4 | global.ResizeObserver = jest.fn().mockImplementation(() => ({
5 | observe: jest.fn(),
6 | unobserve: jest.fn(),
7 | disconnect: jest.fn(),
8 | }))
9 |
--------------------------------------------------------------------------------
/packages/menu/test/testing-library.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PropTypes from 'prop-types'
3 | import { render } from '@testing-library/react'
4 | import { ThemeProvider } from 'pcln-design-system'
5 |
6 | const WithThemeProvider = ({ children }) => {children}
7 | WithThemeProvider.propTypes = {
8 | children: PropTypes.node,
9 | }
10 |
11 | const customRender = (ui, options) => render(ui, { wrapper: WithThemeProvider, ...options })
12 |
13 | // re-export everything
14 | export * from '@testing-library/react'
15 |
16 | // override render method
17 | export { customRender as render }
18 |
--------------------------------------------------------------------------------
/packages/modal/.eslintignore:
--------------------------------------------------------------------------------
1 | **/.rush/*
2 | **/node_modules/*
3 |
4 | **/coverage/*
5 |
6 | **/dist/*
--------------------------------------------------------------------------------
/packages/modal/.eslintrc.js:
--------------------------------------------------------------------------------
1 | require('@rushstack/eslint-patch/modern-module-resolution')
2 | module.exports = {
3 | extends: ['@priceline', '@priceline/eslint-config/jsx-a11y'],
4 | parserOptions: { tsconfigRootDir: __dirname },
5 | }
6 |
--------------------------------------------------------------------------------
/packages/modal/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = { presets: ['@priceline'] }
2 |
--------------------------------------------------------------------------------
/packages/modal/config/rush-project.json:
--------------------------------------------------------------------------------
1 | {
2 | "operationSettings": [
3 | {
4 | "operationName": "build",
5 | "outputFolderNames": ["dist"]
6 | },
7 | {
8 | "operationName": "test:ci"
9 | },
10 | {
11 | "operationName": "lint"
12 | }
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/packages/modal/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | collectCoverageFrom: ['/src/**/*.js', '!/src/**/*.stories.js'],
3 | moduleDirectories: ['node_modules', 'test'],
4 | reporters: ['jest-standard-reporter'],
5 | setupFilesAfterEnv: ['./test/jest.setup.js'],
6 | testEnvironment: 'jsdom',
7 | testMatch: ['/src/**/*.spec.js'],
8 | }
9 |
--------------------------------------------------------------------------------
/packages/modal/src/SmallModalHeader.jsx:
--------------------------------------------------------------------------------
1 | import { Box, deprecatedColorValue } from 'pcln-design-system'
2 | import React from 'react'
3 | import styled from 'styled-components'
4 |
5 | const HeaderBar = styled(Box)`
6 | height: 8px;
7 | `
8 |
9 | const SmallModalHeader = ({ bg = 'green', color = 'secondary.base' }) =>
10 |
11 | SmallModalHeader.displayName = SmallModalHeader
12 |
13 | SmallModalHeader.propTypes = {
14 | bg: deprecatedColorValue(),
15 | color: deprecatedColorValue(),
16 | }
17 |
18 | export default SmallModalHeader
19 |
--------------------------------------------------------------------------------
/packages/modal/src/index.js:
--------------------------------------------------------------------------------
1 | export { default as Modal } from './Modal'
2 | export { default as SmallModalHeader } from './SmallModalHeader'
3 | export { default as ModalHeader } from './ModalHeader'
4 | export { default as ScrollLock } from './ScrollLock'
5 |
--------------------------------------------------------------------------------
/packages/modal/test/jest.setup.js:
--------------------------------------------------------------------------------
1 | import '@testing-library/jest-dom'
2 | import 'jest-styled-components'
3 |
4 | global.requestAnimationFrame =
5 | global.requestAnimationFrame ||
6 | function _raf(cb) {
7 | return setTimeout(cb, 0)
8 | }
9 |
--------------------------------------------------------------------------------
/packages/modal/test/testing-library.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PropTypes from 'prop-types'
3 | import { render } from '@testing-library/react'
4 | import { ThemeProvider } from 'pcln-design-system'
5 |
6 | const WithThemeProvider = ({ children }) => {children}
7 | WithThemeProvider.propTypes = {
8 | children: PropTypes.node,
9 | }
10 |
11 | const customRender = (ui, options) => render(ui, { wrapper: WithThemeProvider, ...options })
12 |
13 | // re-export everything
14 | export * from '@testing-library/react'
15 |
16 | // override render method
17 | export { customRender as render }
18 |
--------------------------------------------------------------------------------
/packages/popover/.eslintignore:
--------------------------------------------------------------------------------
1 | **/.rush/*
2 | **/node_modules/*
3 |
4 | **/coverage/*
5 |
6 | **/dist/*
--------------------------------------------------------------------------------
/packages/popover/.eslintrc.js:
--------------------------------------------------------------------------------
1 | require('@rushstack/eslint-patch/modern-module-resolution')
2 | module.exports = {
3 | extends: ['@priceline', '@priceline/eslint-config/jsx-a11y'],
4 | parserOptions: { tsconfigRootDir: __dirname },
5 | }
6 |
--------------------------------------------------------------------------------
/packages/popover/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = { presets: ['@priceline'] }
2 |
--------------------------------------------------------------------------------
/packages/popover/config/rush-project.json:
--------------------------------------------------------------------------------
1 | {
2 | "operationSettings": [
3 | {
4 | "operationName": "build",
5 | "outputFolderNames": ["dist"]
6 | },
7 | {
8 | "operationName": "test:ci"
9 | },
10 | {
11 | "operationName": "lint"
12 | }
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/packages/popover/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | collectCoverageFrom: ['/src/**/*.js', '!/src/**/*.stories.*'],
3 | moduleDirectories: ['node_modules', 'test'],
4 | reporters: ['jest-standard-reporter'],
5 | setupFilesAfterEnv: ['./test/jest.setup.js'],
6 | testEnvironment: 'jsdom',
7 | testMatch: ['/src/**/*.spec.js'],
8 | }
9 |
--------------------------------------------------------------------------------
/packages/popover/src/Arrow/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './Arrow'
2 |
--------------------------------------------------------------------------------
/packages/popover/src/Overlay/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './Overlay'
2 |
--------------------------------------------------------------------------------
/packages/popover/src/Popover/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './Popover'
2 |
--------------------------------------------------------------------------------
/packages/popover/src/PopoverContent/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './PopoverContent'
2 |
--------------------------------------------------------------------------------
/packages/popover/src/getPopoverStyles/getPopoverStyles.js:
--------------------------------------------------------------------------------
1 | function getPopoverStyles({ arrowX, arrowY, placement = 'top', strategy = 'absolute', x, y }) {
2 | const side = placement.split('-')[0]
3 | const oppositeSide = {
4 | top: 'bottom',
5 | right: 'left',
6 | bottom: 'top',
7 | left: 'right',
8 | }[side]
9 |
10 | return {
11 | arrow: {
12 | top: arrowY ?? '',
13 | left: arrowX ?? '',
14 | right: '',
15 | bottom: '',
16 | [oppositeSide]: '3px',
17 | },
18 | popover: {
19 | position: strategy,
20 | top: y ?? 0,
21 | left: x ?? 0,
22 | },
23 | }
24 | }
25 |
26 | export default getPopoverStyles
27 |
--------------------------------------------------------------------------------
/packages/popover/src/getPopoverStyles/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './getPopoverStyles'
2 |
--------------------------------------------------------------------------------
/packages/popover/src/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './Popover'
2 |
--------------------------------------------------------------------------------
/packages/popover/src/usePopover/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './usePopover'
2 |
--------------------------------------------------------------------------------
/packages/popover/test/jest.setup.js:
--------------------------------------------------------------------------------
1 | import '@testing-library/jest-dom'
2 | import 'jest-styled-components'
3 |
4 | global.requestAnimationFrame =
5 | global.requestAnimationFrame ||
6 | function _raf(cb) {
7 | return setTimeout(cb, 0)
8 | }
9 |
10 | global.ResizeObserver = jest.fn().mockImplementation(() => ({
11 | observe: jest.fn(),
12 | unobserve: jest.fn(),
13 | disconnect: jest.fn(),
14 | }))
15 |
--------------------------------------------------------------------------------
/packages/popover/test/testing-library.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PropTypes from 'prop-types'
3 | import { render } from '@testing-library/react'
4 | import { ThemeProvider } from 'pcln-design-system'
5 |
6 | const WithThemeProvider = ({ children }) => {children}
7 | WithThemeProvider.propTypes = {
8 | children: PropTypes.node,
9 | }
10 |
11 | const customRender = (ui, options) => render(ui, { wrapper: WithThemeProvider, ...options })
12 |
13 | // re-export everything
14 | export * from '@testing-library/react'
15 |
16 | // override render method
17 | export { customRender as render }
18 |
--------------------------------------------------------------------------------
/packages/slider/.eslintignore:
--------------------------------------------------------------------------------
1 | **/.rush/*
2 | **/node_modules/*
3 |
4 | **/coverage/*
5 |
6 | **/dist/*
--------------------------------------------------------------------------------
/packages/slider/.eslintrc.js:
--------------------------------------------------------------------------------
1 | require('@rushstack/eslint-config/patch/modern-module-resolution')
2 |
3 | module.exports = {
4 | extends: ['@priceline/eslint-config/heft'],
5 | parserOptions: { tsconfigRootDir: __dirname },
6 | }
7 |
--------------------------------------------------------------------------------
/packages/slider/src/RangeSlider.tsx:
--------------------------------------------------------------------------------
1 | import propTypes from '@styled-system/prop-types'
2 | import PropTypes from 'prop-types'
3 | import React from 'react'
4 |
5 | import Range from 'rc-slider'
6 | import styleSlider from './styleSlider'
7 |
8 | const _RangeSlider = styleSlider(Range)
9 |
10 | const RangeSlider = (props) => {
11 | return <_RangeSlider {...props} />
12 | }
13 |
14 | RangeSlider.defaultProps = {
15 | allowCross: false,
16 | color: 'primary',
17 | range: true,
18 | }
19 |
20 | RangeSlider.propTypes = {
21 | ...propTypes.space,
22 | color: PropTypes.string,
23 | }
24 |
25 | export default RangeSlider
26 |
--------------------------------------------------------------------------------
/packages/slider/src/Slider.tsx:
--------------------------------------------------------------------------------
1 | import propTypes from '@styled-system/prop-types'
2 | import PropTypes from 'prop-types'
3 | import RcSlider from 'rc-slider'
4 | import styleSlider from './styleSlider'
5 |
6 | const Slider = styleSlider(RcSlider)
7 |
8 | Slider.propTypes = {
9 | ...propTypes.space,
10 | color: PropTypes.string,
11 | }
12 |
13 | Slider.defaultProps = {
14 | color: 'primary',
15 | }
16 |
17 | export default Slider
18 |
--------------------------------------------------------------------------------
/packages/slider/src/__test__/jest.setup.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { ThemeProvider } from 'pcln-design-system'
3 |
4 | import '@testing-library/jest-dom'
5 | import 'jest-styled-components'
6 | import renderer from 'react-test-renderer'
7 |
8 | global.rendererCreateWithTheme = (tree) => renderer.create({tree})
9 |
10 | global.requestAnimationFrame =
11 | global.requestAnimationFrame ||
12 | function _raf(cb) {
13 | return setTimeout(cb, 0)
14 | }
15 |
--------------------------------------------------------------------------------
/packages/slider/src/global.d.ts:
--------------------------------------------------------------------------------
1 | declare var rendererCreateWithTheme
2 |
3 | declare var JSX
4 |
5 | declare module 'testing-library'
6 |
7 | // declare module 'pcln-icons'
8 |
--------------------------------------------------------------------------------
/packages/slider/src/index.ts:
--------------------------------------------------------------------------------
1 | export { default as Slider } from './Slider'
2 | export { default } from './RangeSlider'
3 |
--------------------------------------------------------------------------------
/packages/slider/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./node_modules/@priceline/heft-component-rig/profiles/react/tsconfig-base.json"
3 | }
4 |
--------------------------------------------------------------------------------
/rigs/component/README.md:
--------------------------------------------------------------------------------
1 | # @pcln/heft-component-rig
2 |
--------------------------------------------------------------------------------
/rigs/component/profiles/react/config/rush-project.json:
--------------------------------------------------------------------------------
1 | {
2 | "operationSettings": [
3 | {
4 | "operationName": "_phase:build",
5 | "outputFolderNames": ["dist", "lib", "lib-amd", "lib-commonjs", "lib-es6", "temp", "types"]
6 | },
7 | {
8 | "operationName": "build",
9 | "outputFolderNames": ["dist", "lib", "lib-amd", "lib-commonjs", "lib-es6", "temp", "types"]
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/tools/babel-preset/.eslintignore:
--------------------------------------------------------------------------------
1 | **/.rush/*
2 | **/node_modules/*
3 |
4 | **/coverage/*
5 |
6 | **/dist/*
--------------------------------------------------------------------------------
/tools/babel-preset/.eslintrc.js:
--------------------------------------------------------------------------------
1 | require('@rushstack/eslint-patch/modern-module-resolution')
2 | module.exports = {
3 | extends: ['@priceline', '@priceline/eslint-config/jsx-a11y'],
4 | parserOptions: { tsconfigRootDir: __dirname, requireConfigFile: false },
5 | }
6 |
--------------------------------------------------------------------------------
/tools/babel-preset/config/rush-project.json:
--------------------------------------------------------------------------------
1 | {
2 | "operationSettings": [
3 | {
4 | "operationName": "lint"
5 | }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/tools/babel-preset/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | collectCoverage: true,
3 | collectCoverageFrom: ['bin/**/*.js', 'src/**/*.js'],
4 | coverageThreshold: {
5 | global: {
6 | branches: 100,
7 | functions: 100,
8 | lines: 100,
9 | statements: 100,
10 | },
11 | },
12 | moduleDirectories: ['node_modules', 'test'],
13 | reporters: ['jest-standard-reporter'],
14 | testResultsProcessor: 'jest-bamboo-reporter',
15 | resetMocks: true,
16 | }
17 |
--------------------------------------------------------------------------------
/tools/babel-preset/src/index.spec.js:
--------------------------------------------------------------------------------
1 | const preset = require('./index')
2 |
3 | describe('preset', () => {
4 | it('should export a function that returns the preset config', () => {
5 | expect(preset).toBeInstanceOf(Function)
6 |
7 | expect(Object.keys(preset())).toEqual(['presets', 'plugins', 'env'])
8 | })
9 | })
10 |
--------------------------------------------------------------------------------
/tools/boilerplate/actions/addProjectToRushJson/addProjectToRushJson.js:
--------------------------------------------------------------------------------
1 | function addProjectToRushJson(projectType) {
2 | return {
3 | type: 'modify',
4 | path: '../../rush.json',
5 | pattern: /("projects":\s*\[)/,
6 | template: `$1\n
7 | {
8 | "packageName": "pcln-{{kebabCase componentName}}",
9 | "projectFolder": "${projectType}/{{kebabCase componentName}}",
10 | "reviewCategory": "${projectType}",
11 | "shouldPublish": true
12 | },
13 | `,
14 | }
15 | }
16 |
17 | module.exports = addProjectToRushJson
18 |
--------------------------------------------------------------------------------
/tools/boilerplate/actions/addProjectToRushJson/index.js:
--------------------------------------------------------------------------------
1 | const addProjectToRushJson = require('./addProjectToRushJson.js')
2 | module.exports = addProjectToRushJson
3 |
--------------------------------------------------------------------------------
/tools/boilerplate/plop-templates/core/index.js.hbs:
--------------------------------------------------------------------------------
1 | export { default as {{componentName}} } from './{{componentName}}'
2 |
--------------------------------------------------------------------------------
/tools/boilerplate/plop-templates/core/{{componentName}}.js.hbs:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components'
2 | import PropTypes from 'prop-types'
3 | import {
4 | mapProps,
5 | applyVariations,
6 | getPaletteColor
7 | } from '../utils'
8 |
9 | const {{componentName}} = mapProps(({ align, ...props }) => ({
10 | ...props
11 | }))(styled.{{htmlTag}}`
12 | color: ${getPaletteColor('base')};
13 |
14 | ${applyVariations('{{componentName}}')}
15 | `)
16 |
17 | {{componentName}}.displayName = '{{componentName}}'
18 |
19 | {{componentName}}.propTypes = {
20 | }
21 |
22 | export default {{componentName}}
23 |
--------------------------------------------------------------------------------
/tools/boilerplate/plop-templates/core/{{componentName}}.spec.js.hbs:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { render } from 'testing-library'
3 |
4 | import { {{componentName}} } from '.'
5 |
6 | describe('{{componentName}}', () => {
7 | it('should render correctly', () => {
8 | const { asFragment } = render(<{{componentName}} />)
9 |
10 | expect(asFragment()).toMatchSnapshot()
11 | })
12 | })
13 |
--------------------------------------------------------------------------------
/tools/boilerplate/plop-templates/core/{{componentName}}.stories.js.hbs:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { storiesOf } from '@storybook/react'
3 | import { {{componentName}} } from '.'
4 |
5 | storiesOf('{{componentName}}', module).add('default', () => (
6 | <{{componentName}} color='primary'>
7 | Hello Priceline! Finished creating scaffold for {{componentName}}.
8 | {{componentName}}>
9 | ))
10 |
--------------------------------------------------------------------------------
/tools/boilerplate/plop-templates/package/.eslintignore:
--------------------------------------------------------------------------------
1 | **/.rush/*
2 | **/node_modules/*
3 |
4 | **/coverage/*
5 |
6 | **/dist/*
--------------------------------------------------------------------------------
/tools/boilerplate/plop-templates/package/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | extends: ['@priceline', '@priceline/eslint-config/jsx-a11y'],
3 | parserOptions: { tsconfigRootDir: __dirname },
4 | }
5 |
--------------------------------------------------------------------------------
/tools/boilerplate/plop-templates/package/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | npm-debug.log
4 | lerna-debug.log
5 | .history
6 | .vscode
7 | .idea
8 | .ssh
9 | .DS_Store
10 | */.DS_Store
11 | tmp
12 | log
13 | .settings
14 | id_rsa
15 | id_rsa.pub
16 | known_hosts
17 | id_rs*
18 | *ssh*
19 |
--------------------------------------------------------------------------------
/tools/boilerplate/plop-templates/package/.npmignore:
--------------------------------------------------------------------------------
1 | babel.config.js
2 | src
3 | test
4 | storybook
5 |
--------------------------------------------------------------------------------
/tools/boilerplate/plop-templates/package/README.md.hbs:
--------------------------------------------------------------------------------
1 | # pcln-{{kebabCase componentName}}
2 |
--------------------------------------------------------------------------------
/tools/boilerplate/plop-templates/package/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = { presets: ['@priceline'] }
2 |
--------------------------------------------------------------------------------
/tools/boilerplate/plop-templates/package/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | collectCoverageFrom: ['/src/**/*.js', '!/src/**/*.stories.js'],
3 | moduleDirectories: ['node_modules', 'test'],
4 | reporters: ['jest-standard-reporter'],
5 | setupFilesAfterEnv: ['./test/jest.setup.js'],
6 | testMatch: ['/src/**/*.spec.js'],
7 | }
8 |
--------------------------------------------------------------------------------
/tools/boilerplate/plop-templates/package/src/index.js.hbs:
--------------------------------------------------------------------------------
1 | import {{componentName}} from './{{componentName}}'
2 |
3 | export default {{componentName}}
4 |
--------------------------------------------------------------------------------
/tools/boilerplate/plop-templates/package/src/{{componentName}}.js.hbs:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | import styled from 'styled-components'
4 | import { Box, Text, Heading } from 'pcln-design-system'
5 |
6 | const {{componentName}} = (props) => {
7 | return (
8 | Hello Priceline!
9 | Completed new component scaffold: {{componentName}}
10 | )
11 | }
12 |
13 | export default {{componentName}}
14 |
--------------------------------------------------------------------------------
/tools/boilerplate/plop-templates/package/src/{{componentName}}.spec.js.hbs:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { fireEvent } from '@testing-library/react'
3 |
4 | import {{componentName}} from '.'
5 |
6 | describe('{{componentName}}', () => {
7 | it('should render correctly', () => {
8 | const { asFragment } = renderWithTheme(<{{componentName}} />)
9 |
10 | expect(asFragment()).toMatchSnapshot()
11 | })
12 | })
13 |
--------------------------------------------------------------------------------
/tools/boilerplate/plop-templates/package/src/{{componentName}}.stories.js.hbs:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import {{componentName}} from '.'
3 |
4 | export default {
5 | title: 'pcln-{{kebabCase componentName}}',
6 | component: {{componentName}},
7 | }
8 |
9 | export const Basic = () => <{{componentName}} />
10 |
--------------------------------------------------------------------------------
/tools/boilerplate/plop-templates/package/test/jest.setup.js:
--------------------------------------------------------------------------------
1 | import '@testing-library/jest-dom/extend-expect'
2 | import 'jest-styled-components'
3 |
--------------------------------------------------------------------------------
/tools/boilerplate/plop-templates/package/test/testing-library.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PropTypes from 'prop-types'
3 | import { render } from '@testing-library/react'
4 | import { ThemeProvider } from 'pcln-design-system'
5 |
6 | const WithThemeProvider = ({ children }) => {children}
7 | WithThemeProvider.propTypes = {
8 | children: PropTypes.node,
9 | }
10 |
11 | const customRender = (ui, options) => render(ui, { wrapper: WithThemeProvider, ...options })
12 |
13 | // re-export everything
14 | export * from '@testing-library/react'
15 |
16 | // override render method
17 | export { customRender as render }
18 |
--------------------------------------------------------------------------------
/tools/create-release-notes/.eslintignore:
--------------------------------------------------------------------------------
1 | **/.rush/*
2 | **/node_modules/*
3 |
4 | **/coverage/*
5 |
6 | **/dist/*
--------------------------------------------------------------------------------
/tools/create-release-notes/.eslintrc.js:
--------------------------------------------------------------------------------
1 | require('@rushstack/eslint-patch/modern-module-resolution')
2 | module.exports = {
3 | extends: ['@priceline', '@priceline/eslint-config/jsx-a11y'],
4 | parserOptions: { tsconfigRootDir: __dirname, requireConfigFile: false },
5 | }
6 |
--------------------------------------------------------------------------------
/tools/create-release-notes/config/rush-project.json:
--------------------------------------------------------------------------------
1 | {
2 | "operationSettings": [
3 | {
4 | "operationName": "build",
5 | "outputFolderNames": ["dist"]
6 | },
7 | {
8 | "operationName": "lint"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/tools/create-release-notes/src/index.ts:
--------------------------------------------------------------------------------
1 | import { createReleaseNotes } from './actions/createReleaseNotes'
2 |
3 | export { createReleaseNotes }
4 |
--------------------------------------------------------------------------------
/tools/create-release-notes/src/types/Release.ts:
--------------------------------------------------------------------------------
1 | type changeType = 'major' | 'minor' | 'patch' | 'dependency'
2 |
3 | export interface Change {
4 | comment: string
5 | author: string
6 | commit: string
7 | type: changeType
8 | }
9 |
10 | export interface Release {
11 | packageName: string
12 | version: string
13 | tag: string
14 | date: string
15 | changes: Change[]
16 | }
17 |
--------------------------------------------------------------------------------
/tools/create-release-notes/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "commonjs",
4 | "moduleResolution": "node",
5 | "lib": ["ESNext"],
6 | "declaration": true,
7 | "declarationMap": true,
8 | "declarationDir": "./dist/types",
9 | "allowSyntheticDefaultImports": true,
10 | "esModuleInterop": true,
11 | "skipLibCheck": true,
12 | "sourceMap": false,
13 | "outDir": "./dist"
14 | },
15 | "include": ["src/**/*"],
16 | "exclude": ["node_modules", "**/*.spec.ts", "**/*.spec.js"]
17 | }
18 |
--------------------------------------------------------------------------------
/tools/eslint-config/.eslintignore:
--------------------------------------------------------------------------------
1 | **/.rush/*
2 | **/node_modules/*
3 |
4 | **/coverage/*
5 |
6 | **/dist/*
--------------------------------------------------------------------------------
/tools/eslint-config/.eslintrc.js:
--------------------------------------------------------------------------------
1 | const config = require('.')
2 |
3 | config.parserOptions.requireConfigFile = false
4 |
5 | module.exports = config
6 |
--------------------------------------------------------------------------------
/tools/eslint-config/README.md:
--------------------------------------------------------------------------------
1 | # @priceline/eslint-config
2 |
3 | ESLint shared config
4 |
--------------------------------------------------------------------------------
/tools/eslint-config/config/rush-project.json:
--------------------------------------------------------------------------------
1 | {
2 | "operationSettings": [
3 | {
4 | "operationName": "lint"
5 | }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/tools/eslint-config/shared/extends.js:
--------------------------------------------------------------------------------
1 | module.exports = [
2 | 'eslint:recommended',
3 | 'plugin:react/recommended',
4 | 'plugin:jest/style',
5 | 'plugin:sonarjs/recommended',
6 | 'plugin:import/warnings',
7 | 'prettier',
8 | ]
9 |
--------------------------------------------------------------------------------
/tools/eslint-config/shared/plugins.js:
--------------------------------------------------------------------------------
1 | module.exports = ['progress', 'promise', 'react-hooks', 'sonarjs']
2 |
--------------------------------------------------------------------------------
/tools/project-change-analyzer/.eslintignore:
--------------------------------------------------------------------------------
1 | **/.rush/*
2 | **/node_modules/*
3 |
4 | **/coverage/*
5 |
6 | **/dist/*
--------------------------------------------------------------------------------
/tools/project-change-analyzer/.eslintrc.js:
--------------------------------------------------------------------------------
1 | require('@rushstack/eslint-patch/modern-module-resolution')
2 | module.exports = {
3 | extends: ['@priceline', '@priceline/eslint-config/jsx-a11y'],
4 | parserOptions: { tsconfigRootDir: __dirname, requireConfigFile: false },
5 | }
6 |
--------------------------------------------------------------------------------
/tools/project-change-analyzer/.npmignore:
--------------------------------------------------------------------------------
1 | *
2 |
3 | !/lib-commonjs/**
4 | !/lib-esm/**
5 | !/types/**
6 | !/bin/**
7 |
8 | *.spec.js
9 | telemetry_*.json
--------------------------------------------------------------------------------
/tools/project-change-analyzer/config/rush-project.json:
--------------------------------------------------------------------------------
1 | {
2 | "operationSettings": [
3 | {
4 | "operationName": "build",
5 | "outputFolderNames": ["dist"]
6 | },
7 | {
8 | "operationName": "lint"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/tools/project-change-analyzer/src/getAppReleaseMetadata/index.ts:
--------------------------------------------------------------------------------
1 | export * from './getAppReleaseMetadata'
2 |
--------------------------------------------------------------------------------
/tools/project-change-analyzer/src/getChangedProjects/index.ts:
--------------------------------------------------------------------------------
1 | export * from './getChangedProjects'
2 |
--------------------------------------------------------------------------------
/tools/project-change-analyzer/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './getChangedProjects'
2 |
--------------------------------------------------------------------------------
/tools/project-change-analyzer/src/setActionOutput/index.ts:
--------------------------------------------------------------------------------
1 | export * from './setActionOutput'
2 |
--------------------------------------------------------------------------------
/tools/project-change-analyzer/src/setActionOutput/setActionOutput.ts:
--------------------------------------------------------------------------------
1 | import { setOutput, setFailed, info } from '@actions/core'
2 |
3 | export const setActionOutput = (name: string, payload) => {
4 | try {
5 | setOutput(name, JSON.stringify(payload))
6 |
7 | info('Output set: ' + name + ' ' + JSON.stringify(payload))
8 | } catch (error) {
9 | setFailed(error.message)
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/tools/project-change-analyzer/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "commonjs",
4 | "moduleResolution": "node",
5 | "lib": ["ESNext"],
6 | "declaration": true,
7 | "declarationMap": true,
8 | "declarationDir": "./dist/types",
9 | "allowSyntheticDefaultImports": true,
10 | "esModuleInterop": true,
11 | "skipLibCheck": true,
12 | "sourceMap": false,
13 | "outDir": "./dist",
14 | "downlevelIteration": true
15 | },
16 | "include": ["src/**/*"],
17 | "exclude": ["node_modules", "**/*.spec.ts", "**/*.spec.js"]
18 | }
19 |
--------------------------------------------------------------------------------