playbook_ui 11.6.1.pre.alpha.rubocop.pre.performance1 → 11.7.0.pre.alpha.table1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/data/menu.yml +0 -13
  3. data/app/pb_kits/playbook/index.js +1 -1
  4. data/app/pb_kits/playbook/pb_badge/badge.test.js +80 -0
  5. data/app/pb_kits/playbook/pb_button/_button.tsx +7 -2
  6. data/app/pb_kits/playbook/pb_button/_button_mixins.scss +7 -0
  7. data/app/pb_kits/playbook/pb_button/button.html.erb +11 -0
  8. data/app/pb_kits/playbook/pb_button/button.rb +3 -0
  9. data/app/pb_kits/playbook/pb_button/docs/_button_block_content.html.erb +1 -1
  10. data/app/pb_kits/playbook/pb_button/docs/_button_block_content.jsx +12 -9
  11. data/app/pb_kits/playbook/pb_button/docs/_button_block_content.md +1 -0
  12. data/app/pb_kits/playbook/pb_button/docs/_button_icon_options.html.erb +2 -0
  13. data/app/pb_kits/playbook/pb_button/docs/_button_icon_options.jsx +23 -0
  14. data/app/pb_kits/playbook/pb_button/docs/_button_icon_options.md +1 -0
  15. data/app/pb_kits/playbook/pb_button/docs/example.yml +2 -0
  16. data/app/pb_kits/playbook/pb_button/docs/index.js +1 -0
  17. data/app/pb_kits/playbook/pb_date_picker/{_date_picker.jsx → _date_picker.tsx} +58 -66
  18. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +2 -1
  19. data/app/pb_kits/playbook/pb_date_picker/{date_picker_helper.js → date_picker_helper.ts} +37 -16
  20. data/app/pb_kits/playbook/pb_date_picker/plugins/timeSelect.ts +171 -0
  21. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_flatpickr_styles.scss +0 -3
  22. data/app/pb_kits/playbook/pb_date_range_stacked/{_date_range_stacked.jsx → _date_range_stacked.tsx} +5 -6
  23. data/app/pb_kits/playbook/pb_date_range_stacked/date_range_stacked.test.js +127 -0
  24. data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.tsx +90 -0
  25. data/app/pb_kits/playbook/pb_date_stacked/date_stacked.test.js +151 -0
  26. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_align.jsx +1 -1
  27. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_bold.jsx +1 -1
  28. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_default.jsx +1 -1
  29. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_not_current_year.jsx +1 -1
  30. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_reverse.jsx +1 -1
  31. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_sizes.jsx +1 -1
  32. data/app/pb_kits/playbook/pb_dialog/{_close_icon.jsx → _close_icon.tsx} +1 -3
  33. data/app/pb_kits/playbook/pb_dialog/_dialog.tsx +217 -0
  34. data/app/pb_kits/playbook/pb_dialog/_dialog_context.tsx +3 -0
  35. data/app/pb_kits/playbook/pb_dialog/child_kits/{_dialog_body.jsx → _dialog_body.tsx} +6 -2
  36. data/app/pb_kits/playbook/pb_dialog/child_kits/{_dialog_footer.jsx → _dialog_footer.tsx} +8 -11
  37. data/app/pb_kits/playbook/pb_dialog/child_kits/{_dialog_header.jsx → _dialog_header.tsx} +12 -15
  38. data/app/pb_kits/playbook/pb_filter/Filter/FilterDouble.jsx +2 -0
  39. data/app/pb_kits/playbook/pb_filter/Filter/FilterSingle.jsx +2 -0
  40. data/app/pb_kits/playbook/pb_filter/Filter/FiltersPopover.jsx +2 -2
  41. data/app/pb_kits/playbook/pb_filter/docs/_filter_min_width.html.erb +1 -0
  42. data/app/pb_kits/playbook/pb_filter/docs/_filter_placement.html.erb +34 -0
  43. data/app/pb_kits/playbook/pb_filter/docs/_filter_placement.jsx +66 -0
  44. data/app/pb_kits/playbook/pb_filter/docs/_filter_placement.md +4 -0
  45. data/app/pb_kits/playbook/pb_filter/docs/example.yml +2 -0
  46. data/app/pb_kits/playbook/pb_filter/docs/index.js +1 -0
  47. data/app/pb_kits/playbook/pb_filter/filter.html.erb +2 -2
  48. data/app/pb_kits/playbook/pb_filter/filter.rb +3 -0
  49. data/app/pb_kits/playbook/pb_filter/filter.test.js +76 -0
  50. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_complex.html.erb +32 -0
  51. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_complex.jsx +101 -0
  52. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_complex.md +1 -0
  53. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_sizing.html.erb +2 -1
  54. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_sizing.jsx +2 -0
  55. data/app/pb_kits/playbook/pb_gauge/docs/example.yml +2 -0
  56. data/app/pb_kits/playbook/pb_gauge/docs/index.js +1 -0
  57. data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.tsx +129 -0
  58. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_default.jsx +1 -1
  59. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_emphasis.jsx +2 -2
  60. data/app/pb_kits/playbook/pb_home_address_street/home_adress_street.test.js +60 -0
  61. data/app/pb_kits/playbook/pb_icon_stat_value/{_icon_stat_value.jsx → _icon_stat_value.tsx} +2 -4
  62. data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.test.js +154 -0
  63. data/app/pb_kits/playbook/pb_icon_value/{_icon_value.jsx → _icon_value.tsx} +2 -4
  64. data/app/pb_kits/playbook/pb_icon_value/icon_value.test.js +77 -0
  65. data/app/pb_kits/playbook/pb_label_value/_label_value.tsx +123 -0
  66. data/app/pb_kits/playbook/pb_label_value/label_value.test.js +109 -0
  67. data/app/pb_kits/playbook/pb_layout/layout.test.js +1 -2
  68. data/app/pb_kits/playbook/pb_lightbox/Carousel/Slides.tsx +33 -0
  69. data/app/pb_kits/playbook/pb_lightbox/Carousel/Thumbnails.tsx +1 -3
  70. data/app/pb_kits/playbook/pb_lightbox/Carousel/index.tsx +3 -1
  71. data/app/pb_kits/playbook/pb_lightbox/{_lightbox_header.tsx → Header/_lightbox_header.tsx} +8 -8
  72. data/app/pb_kits/playbook/pb_lightbox/{_lightbox_header_icon.tsx → Header/_lightbox_header_icon.tsx} +2 -2
  73. data/app/pb_kits/playbook/pb_lightbox/_lightbox.tsx +2 -1
  74. data/app/pb_kits/playbook/pb_lightbox/lightbox.scss +8 -60
  75. data/app/pb_kits/playbook/pb_popover/popover.rb +1 -1
  76. data/app/pb_kits/playbook/pb_section_separator/_section_separator.tsx +5 -5
  77. data/app/pb_kits/playbook/pb_table/_table.jsx +5 -3
  78. data/app/pb_kits/playbook/pb_text_input/_text_input.tsx +0 -1
  79. data/app/pb_kits/playbook/pb_title/_title.tsx +1 -1
  80. data/app/pb_kits/playbook/playbook-rails.js +1 -1
  81. data/app/pb_kits/playbook/plugins/pb_chart.js +5 -0
  82. data/app/pb_kits/playbook/tokens/_spacing.scss +2 -0
  83. data/app/pb_kits/playbook/utilities/_spacing.scss +1 -0
  84. data/app/pb_kits/playbook/utilities/text.ts +1 -1
  85. data/lib/playbook/spacing.rb +1 -1
  86. data/lib/playbook/version.rb +2 -2
  87. metadata +37 -19
  88. data/app/pb_kits/playbook/pb_date_picker/plugins/timeSelect.js +0 -137
  89. data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.jsx +0 -103
  90. data/app/pb_kits/playbook/pb_dialog/_dialog.jsx +0 -223
  91. data/app/pb_kits/playbook/pb_dialog/_dialog_context.jsx +0 -3
  92. data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.jsx +0 -127
  93. data/app/pb_kits/playbook/pb_label_value/_label_value.jsx +0 -155
@@ -0,0 +1,171 @@
1
+ type FpTypes = {
2
+ amPM?: { style: { display: string } };
3
+ selectedDates: string | any[];
4
+ setDate: (arg0: any, arg1: boolean) => void;
5
+ input: { id: any };
6
+ timeContainer?: {
7
+ classList: { add: (arg0: string) => void };
8
+ prepend: (arg0: HTMLDivElement) => void;
9
+ append: (arg0: HTMLDivElement) => void;
10
+ };
11
+ minuteElement?: { step: string };
12
+ _initialDate: {
13
+ toLocaleDateString: (
14
+ arg0: string,
15
+ arg1: { day: string; timeZoneName: string }
16
+ ) => string | any[];
17
+ };
18
+ loadedPlugins: string[];
19
+ };
20
+
21
+ export const getTimezoneText = (inputDate: {
22
+ toLocaleDateString: (
23
+ arg0: string,
24
+ arg1: { day: string; timeZoneName: string }
25
+ ) => string | any[];
26
+ }) => {
27
+ const tzAbbr = inputDate
28
+ .toLocaleDateString("en-US", {
29
+ day: "2-digit",
30
+ timeZoneName: "short",
31
+ })
32
+ .slice(4);
33
+ const tzText = inputDate
34
+ .toLocaleDateString("en-US", {
35
+ day: "2-digit",
36
+ timeZoneName: "long",
37
+ })
38
+ .slice(4);
39
+ return `${tzAbbr} (${tzText})`;
40
+ };
41
+
42
+ function timeSelectPlugin(props: { caption: string; showTimezone: boolean }) {
43
+ return function (fp: FpTypes) {
44
+ const generateMeridiemCard = (text: string) => {
45
+ const selectableCard = document.createElement("div");
46
+ selectableCard.className = "pb_selectable_card_kit_enabled";
47
+
48
+ const cardInput = document.createElement("input"),
49
+ cardInputId = `datePicker${text}`;
50
+
51
+ cardInput.id = cardInputId;
52
+ cardInput.name = "datepicker-ampm";
53
+ cardInput.type = "radio";
54
+ cardInput.value = text;
55
+
56
+ const cardLabel = document.createElement("label"),
57
+ cardLabelBuffer = document.createElement("div");
58
+ cardLabel.className = `label-${text.toLowerCase()}`;
59
+ cardLabel.setAttribute("for", cardInputId);
60
+ cardLabelBuffer.className = "buffer";
61
+ cardLabelBuffer.innerHTML = text;
62
+
63
+ cardLabel.append(cardLabelBuffer);
64
+ selectableCard.prepend(cardInput);
65
+ selectableCard.append(cardLabel);
66
+
67
+ return selectableCard;
68
+ };
69
+
70
+ const generateMeridiemToggle = () => {
71
+ fp.amPM.style.display = "none";
72
+ const formGroupKit = document.createElement("div");
73
+ formGroupKit.className = "pb_form_group_kit";
74
+
75
+ const amCard = generateMeridiemCard("AM");
76
+ amCard.addEventListener("click", () => {
77
+ fp.selectedDates[0].setHours(
78
+ (fp.selectedDates[0].getHours() % 12) + 12 * 0
79
+ );
80
+ fp.setDate(fp.selectedDates[0], true);
81
+ });
82
+
83
+ const pmCard = generateMeridiemCard("PM");
84
+ pmCard.addEventListener("click", () => {
85
+ fp.selectedDates[0].setHours(
86
+ (fp.selectedDates[0].getHours() % 12) + 12 * 1
87
+ );
88
+ fp.setDate(fp.selectedDates[0], true);
89
+ });
90
+
91
+ formGroupKit.prepend(amCard);
92
+ formGroupKit.append(pmCard);
93
+
94
+ const meridiemContainer = document.createElement("div");
95
+ meridiemContainer.className = "meridiem";
96
+ meridiemContainer.append(formGroupKit);
97
+ document.querySelector(".pb_time_selection").append(meridiemContainer);
98
+ };
99
+
100
+ const getMeridiem = (dateObj: string | any[]) => {
101
+ return dateObj[0].getHours() < 12 ? "AM" : "PM";
102
+ };
103
+
104
+ const updateMeridiemToggle = (forceClick: boolean) => {
105
+ if (!fp.selectedDates.length) return;
106
+
107
+ const uncheckedClass = "pb_selectable_card_kit_enabled",
108
+ checkedClass = "pb_selectable_card_kit_checked_enabled",
109
+ pickerAM: HTMLElement & { [x: string]: any } =
110
+ document.getElementById("datePickerAM"),
111
+ pickerPM: HTMLElement & { [x: string]: any } =
112
+ document.getElementById("datePickerPM"),
113
+ meridiem = getMeridiem(fp.selectedDates);
114
+
115
+ if (forceClick) {
116
+ pickerAM.checked = false;
117
+ pickerPM.checked = false;
118
+ pickerPM.checked = meridiem === "PM";
119
+ pickerAM.checked = meridiem === "AM";
120
+ }
121
+
122
+ if (meridiem === "PM") {
123
+ pickerPM.parentElement.className = checkedClass;
124
+ pickerAM.parentElement.className = uncheckedClass;
125
+ } else if (meridiem === "AM") {
126
+ pickerAM.parentElement.className = checkedClass;
127
+ pickerPM.parentElement.className = uncheckedClass;
128
+ }
129
+ };
130
+
131
+ return {
132
+ onValueUpdate() {
133
+ updateMeridiemToggle(true);
134
+ },
135
+ onReady() {
136
+ const id = fp.input.id;
137
+
138
+ if (!id || !fp?.timeContainer) return;
139
+
140
+ fp.timeContainer.classList.add("pb_time_selection");
141
+
142
+ // allow single minutes
143
+ fp.minuteElement.step = "1";
144
+
145
+ // add caption text
146
+ if (props.caption) {
147
+ const captionContainer = document.createElement("div");
148
+ captionContainer.className = "pb_caption_kit_md";
149
+ captionContainer.innerHTML = props?.caption;
150
+ fp.timeContainer.prepend(captionContainer);
151
+ }
152
+
153
+ // add meridiem toggle
154
+ generateMeridiemToggle();
155
+ updateMeridiemToggle(true);
156
+
157
+ // add timezone text
158
+ if (props.showTimezone) {
159
+ const subcaptionContainer = document.createElement("div");
160
+ subcaptionContainer.className = "pb_caption_kit_xs";
161
+ subcaptionContainer.innerHTML = getTimezoneText(fp._initialDate);
162
+ fp.timeContainer.append(subcaptionContainer);
163
+ }
164
+
165
+ fp.loadedPlugins.push("timeSelectPlugin");
166
+ },
167
+ };
168
+ };
169
+ }
170
+
171
+ export default timeSelectPlugin;
@@ -659,9 +659,6 @@ span.flatpickr-weekday {
659
659
  -webkit-box-sizing: border-box;
660
660
  box-sizing: border-box;
661
661
  overflow: hidden;
662
- display: -webkit-box;
663
- display: -webkit-flex;
664
- display: -ms-flexbox;
665
662
  }
666
663
  .flatpickr-time:after {
667
664
  content: "";
@@ -1,9 +1,7 @@
1
- /* @flow */
2
-
3
1
  import React from 'react'
4
2
  import classnames from 'classnames'
5
3
 
6
- import { buildCss } from '../utilities/props'
4
+ import { buildCss, buildDataProps } from '../utilities/props'
7
5
  import { globalProps } from '../utilities/globalProps'
8
6
 
9
7
  import Body from '../pb_body/_body'
@@ -13,7 +11,7 @@ import DateYearStacked from '../pb_date_year_stacked/_date_year_stacked'
13
11
  import Icon from '../pb_icon/_icon'
14
12
 
15
13
  type DateRangeStackedProps = {
16
- className?: string | array<string>,
14
+ className?: string | string[],
17
15
  data?: string,
18
16
  dark?: boolean,
19
17
  endDate: string,
@@ -22,15 +20,16 @@ type DateRangeStackedProps = {
22
20
  }
23
21
 
24
22
  const DateRangeStacked = (props: DateRangeStackedProps) => {
25
- const { className, dark = false, endDate, startDate } = props
23
+ const { className, dark = false, endDate, startDate, data={} } = props
26
24
  const css = classnames(
27
25
  buildCss('pb_date_range_stacked'),
28
26
  globalProps(props),
29
27
  className
30
28
  )
29
+ const dataProps = buildDataProps(data)
31
30
 
32
31
  return (
33
- <div className={css}>
32
+ <div {...dataProps} className={css}>
34
33
  <Flex vertical="center">
35
34
  <FlexItem>
36
35
  <DateYearStacked
@@ -0,0 +1,127 @@
1
+ import React from 'react'
2
+ import { render, screen } from '../utilities/test-utils'
3
+
4
+ import DateRangeStacked from './_date_range_stacked'
5
+
6
+ jest.useFakeTimers()
7
+ const testId = "daterangestacked-kit";
8
+
9
+ describe("DateRangeStacked Kit", () => {
10
+ test("renders DateRangeStacked className", () => {
11
+ render(
12
+ <DateRangeStacked
13
+ data={{ testid: testId }}
14
+ endDate={new Date('20 Mar 2020')}
15
+ startDate={new Date('18 Jun 2019')}
16
+ />
17
+ )
18
+
19
+ const kit = screen.getByTestId(testId)
20
+ expect(kit).toHaveClass("pb_date_range_stacked")
21
+ })
22
+
23
+ test("renders DateRangeStacked start date container", () => {
24
+ render(
25
+ <DateRangeStacked
26
+ data={{ testid: testId }}
27
+ endDate={new Date('20 Mar 2020')}
28
+ startDate={new Date('18 Jun 2019')}
29
+ />
30
+ )
31
+
32
+ const kit = screen.getByTestId(testId)
33
+ const text = kit.querySelector('.pb_date_year_stacked_right')
34
+ expect(text).toBeInTheDocument()
35
+ })
36
+
37
+ test("renders DateRangeStacked end date container", () => {
38
+ render(
39
+ <DateRangeStacked
40
+ data={{ testid: testId }}
41
+ endDate={new Date('20 Mar 2020')}
42
+ startDate={new Date('18 Jun 2019')}
43
+ />
44
+ )
45
+
46
+ const kit = screen.getByTestId(testId)
47
+ const text = kit.querySelector('.pb_date_year_stacked_left')
48
+ expect(text).toBeInTheDocument()
49
+ })
50
+
51
+ test("renders arrow icon", () => {
52
+ render(
53
+ <DateRangeStacked
54
+ data={{ testid: testId }}
55
+ endDate={new Date('20 Mar 2020')}
56
+ startDate={new Date('18 Jun 2019')}
57
+ />
58
+ )
59
+
60
+ const kit = screen.getByTestId(testId)
61
+ const arrowicon = kit.querySelector('.pb_icon_kit.fa-fw.pb_date_range_stacked_arrow')
62
+ expect(arrowicon).toBeInTheDocument()
63
+ })
64
+
65
+
66
+ test("renders DateRangeInline start date", () => {
67
+ render(
68
+ <DateRangeStacked
69
+ data={{ testid: testId }}
70
+ endDate={new Date('20 Mar 2020')}
71
+ startDate={new Date('18 Jun 2019')}
72
+ />
73
+
74
+ )
75
+
76
+ const kit = screen.getByTestId(testId)
77
+ const text = kit.querySelector('.pb_date_year_stacked_right>.pb_title_kit_size_4')
78
+ expect(text.textContent).toEqual("18 JUN")
79
+ })
80
+
81
+ test("renders DateRangeInline start date year", () => {
82
+ render(
83
+ <DateRangeStacked
84
+ data={{ testid: testId }}
85
+ endDate={new Date('20 Mar 2020')}
86
+ startDate={new Date('18 Jun 2019')}
87
+ />
88
+
89
+ )
90
+
91
+ const kit = screen.getByTestId(testId)
92
+ const text = kit.querySelector(".pb_date_year_stacked_right>.pb_body_kit_light")
93
+ expect(text.textContent).toEqual("2019")
94
+ })
95
+
96
+ test("renders DateRangeInline end date", () => {
97
+ render(
98
+ <DateRangeStacked
99
+ data={{ testid: testId }}
100
+ endDate={new Date('20 Mar 2020')}
101
+ startDate={new Date('18 Jun 2019')}
102
+ />
103
+
104
+ )
105
+
106
+ const kit = screen.getByTestId(testId)
107
+ const text = kit.querySelector('.pb_date_year_stacked_left>.pb_title_kit_size_4')
108
+ expect(text.textContent).toEqual("20 MAR")
109
+ })
110
+
111
+ test("renders DateRangeInline end date year", () => {
112
+ render(
113
+ <DateRangeStacked
114
+ data={{ testid: testId }}
115
+ endDate={new Date('20 Mar 2020')}
116
+ startDate={new Date('18 Jun 2019')}
117
+ />
118
+
119
+ )
120
+
121
+ const kit = screen.getByTestId(testId)
122
+ const text = kit.querySelector(".pb_date_year_stacked_left>.pb_body_kit_light")
123
+ expect(text.textContent).toEqual("2020")
124
+ })
125
+
126
+
127
+ })
@@ -0,0 +1,90 @@
1
+ import React from "react";
2
+
3
+ import classnames from "classnames";
4
+ import DateTime from "../pb_kit/dateTime";
5
+ import { buildCss, buildDataProps } from "../utilities/props";
6
+ import { globalProps } from "../utilities/globalProps";
7
+
8
+ import Caption from "../pb_caption/_caption";
9
+ import Title from "../pb_title/_title";
10
+
11
+ type DateStackedProps = {
12
+ align?: "left" | "center" | "right";
13
+ bold?: boolean;
14
+ className?: string | string[];
15
+ dark?: boolean;
16
+ data?: string;
17
+ date: string;
18
+ size?: "sm" | "md";
19
+ id?: string;
20
+ reverse?: boolean;
21
+ };
22
+
23
+ const sizes: {sm: 4, md: 3} = {
24
+ sm: 4,
25
+ md: 3,
26
+ };
27
+
28
+ const DateStacked = (props: DateStackedProps) => {
29
+ const {
30
+ align = "left",
31
+ bold = false,
32
+ reverse = false,
33
+ className,
34
+ dark = false,
35
+ date,
36
+ data={},
37
+ size = "sm",
38
+ } = props;
39
+ const classes = classnames(
40
+ buildCss("pb_date_stacked_kit", align, size, {
41
+ dark: dark,
42
+ reverse: reverse,
43
+ }),
44
+ globalProps(props),
45
+ className
46
+ );
47
+
48
+ const currentYear = new Date().getFullYear().toString();
49
+ const dateTimestamp = new DateTime({ value: date });
50
+ const inputYear = dateTimestamp.toYear().toString();
51
+ const dataProps = buildDataProps(data)
52
+
53
+ return (
54
+ <>
55
+ {bold == false ? (
56
+ <div {...dataProps} className={classes}>
57
+ <div className="pb_date_stacked_day_month">
58
+ <Caption text={dateTimestamp.toMonth().toUpperCase()} />
59
+ <Title
60
+ dark={dark}
61
+ size={sizes[size]}
62
+ text={dateTimestamp.toDay()}
63
+ />
64
+ </div>
65
+ {currentYear != inputYear && <Caption size="xs">{inputYear}</Caption>}
66
+ </div>
67
+ ) : (
68
+ <div {...dataProps} className={classes}>
69
+ <div className="pb_date_stacked_day_month">
70
+ <Title
71
+ bold
72
+ dark={dark}
73
+ size="4"
74
+ text={dateTimestamp.toMonth()}
75
+ />
76
+ <Title
77
+ bold
78
+ dark={dark}
79
+ size="4"
80
+ text={dateTimestamp.toDay()}
81
+ />
82
+ {currentYear != inputYear && <Title size="4">{inputYear}</Title>}
83
+ </div>
84
+ </div>
85
+ )}
86
+ </>
87
+ );
88
+ };
89
+
90
+ export default DateStacked;
@@ -0,0 +1,151 @@
1
+ import React from 'react'
2
+ import { render, screen } from '../utilities/test-utils'
3
+
4
+ import DateStacked from './_date_stacked'
5
+
6
+ const TEST_DATE = "01/01/2020 00:00:000 GMT-0500";
7
+ jest.setSystemTime(new Date(TEST_DATE));
8
+ const futureDate = new Date(
9
+ new Date().getFullYear() - 4,
10
+ new Date().getMonth(),
11
+ new Date().getDate(),
12
+ new Date().getHours(),
13
+ new Date().getMinutes()
14
+ );
15
+
16
+ const testId = "datestacked-kit";
17
+
18
+ describe("DateStacked Kit", () => {
19
+ test("renders DateStacked className", () => {
20
+ render(
21
+ <DateStacked
22
+ align="left"
23
+ data={{ testid: testId }}
24
+ date={new Date()}
25
+ size="sm"
26
+ />
27
+ )
28
+
29
+ const kit = screen.getByTestId(testId)
30
+ expect(kit).toHaveClass("pb_date_stacked_kit_left_sm")
31
+ })
32
+
33
+ test("renders top text", () => {
34
+ render(
35
+ <DateStacked
36
+ align="left"
37
+ data={{ testid: testId }}
38
+ date={new Date()}
39
+ size="sm"
40
+ />
41
+ )
42
+
43
+ const kit = screen.getByTestId(testId)
44
+ const text = kit.querySelector(".pb_caption_kit_md")
45
+ expect(text.textContent).toEqual("JAN")
46
+ })
47
+
48
+ test("renders bottom text", () => {
49
+ render(
50
+ <DateStacked
51
+ align="left"
52
+ data={{ testid: testId }}
53
+ date={new Date()}
54
+ size="sm"
55
+ />
56
+ )
57
+
58
+ const kit = screen.getByTestId(testId)
59
+ const text = kit.querySelector(".pb_title_kit_size_4")
60
+ expect(text.textContent).toEqual("1")
61
+ })
62
+
63
+ test("renders correct size", () => {
64
+ render(
65
+ <DateStacked
66
+ align="left"
67
+ data={{ testid: testId }}
68
+ date={new Date()}
69
+ size="md"
70
+ />
71
+ )
72
+
73
+ const kit = screen.getByTestId(testId)
74
+ expect(kit).toHaveClass("pb_date_stacked_kit_left_md")
75
+ })
76
+
77
+ test("renders year when non-current year", () => {
78
+ render(
79
+ <DateStacked
80
+ align="left"
81
+ data={{ testid: testId }}
82
+ date={futureDate}
83
+ size="sm"
84
+ />
85
+ )
86
+
87
+ const kit = screen.getByTestId(testId)
88
+ const text = kit.querySelector(".pb_caption_kit_xs")
89
+ expect(text.textContent).toEqual("2016")
90
+ })
91
+
92
+ test("renders correct className when order reversed", () => {
93
+ render(
94
+ <DateStacked
95
+ align="left"
96
+ data={{ testid: testId }}
97
+ date={futureDate}
98
+ reverse
99
+ size="sm"
100
+ />
101
+ )
102
+ const kit = screen.getByTestId(testId)
103
+ expect(kit).toHaveClass("pb_date_stacked_kit_left_sm_reverse")
104
+ })
105
+
106
+ test("renders bold prop", () => {
107
+ render(
108
+ <DateStacked
109
+ align="left"
110
+ bold
111
+ data={{ testid: testId }}
112
+ date={futureDate}
113
+ size="md"
114
+ />
115
+ )
116
+
117
+ const kit = screen.getByTestId(testId)
118
+ const text = kit.querySelector(".pb_title_kit_size_4")
119
+ expect(text).toBeInTheDocument()
120
+ })
121
+
122
+ test("renders center alignment prop", () => {
123
+ render(
124
+ <DateStacked
125
+ align="center"
126
+ data={{ testid: testId }}
127
+ date={futureDate}
128
+ size="md"
129
+ />
130
+ )
131
+
132
+ const kit = screen.getByTestId(testId)
133
+ expect(kit).toHaveClass("pb_date_stacked_kit_center_md")
134
+ })
135
+
136
+ test("renders right alignment prop", () => {
137
+ render(
138
+ <DateStacked
139
+ align="right"
140
+ data={{ testid: testId }}
141
+ date={futureDate}
142
+ size="md"
143
+ />
144
+ )
145
+
146
+ const kit = screen.getByTestId(testId)
147
+ expect(kit).toHaveClass("pb_date_stacked_kit_right_md")
148
+ })
149
+
150
+
151
+ })
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import DateStacked from '../_date_stacked.jsx'
2
+ import DateStacked from '../_date_stacked'
3
3
 
4
4
  const DateStackedAlign = (props) => {
5
5
  return (
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import DateStacked from '../_date_stacked.jsx'
2
+ import DateStacked from '../_date_stacked'
3
3
 
4
4
  const DateStackedBold = (props) => {
5
5
  return (
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import DateStacked from '../_date_stacked.jsx'
2
+ import DateStacked from '../_date_stacked'
3
3
 
4
4
  const DateStackedDefault = (props) => {
5
5
  return (
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import DateStacked from '../_date_stacked.jsx'
2
+ import DateStacked from '../_date_stacked'
3
3
 
4
4
  const DateStackedNotCurrentYear = (props) => {
5
5
  return (
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import DateStacked from '../_date_stacked.jsx'
2
+ import DateStacked from '../_date_stacked'
3
3
 
4
4
  const DateStackedDefault = (props) => {
5
5
  return (
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import DateStacked from '../_date_stacked.jsx'
2
+ import DateStacked from '../_date_stacked'
3
3
 
4
4
  const DateStackedSizes = (props) => {
5
5
  return (
@@ -1,10 +1,8 @@
1
- /* @flow */
2
-
3
1
  import React from 'react'
4
2
  import Icon from '../pb_icon/_icon'
5
3
 
6
4
  type CloseIconProps = {
7
- onClose: () => mixed,
5
+ onClose: () => any,
8
6
  }
9
7
 
10
8
  export const CloseIcon = (props: CloseIconProps) => {