playbook_ui 16.6.0.pre.alpha.revert5955revert5912PLAY2834mobilepagrails15822 → 16.6.0.pre.alpha.websitechagnespostcreate16068

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_grouped_headers_composition.jsx +15 -1
  3. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_infinite_scroll.jsx +2 -2
  4. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_inline_row_loading.jsx +2 -2
  5. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pinned_rows.jsx +2 -2
  6. data/app/pb_kits/playbook/pb_advanced_table/docs/advanced_table_mock_data_inline_loading_empty_children.json +41 -0
  7. data/app/pb_kits/playbook/pb_bread_crumbs/docs/_bread_crumbs_default.jsx +5 -5
  8. data/app/pb_kits/playbook/pb_button/_button.scss +26 -24
  9. data/app/pb_kits/playbook/pb_button/button.rb +3 -1
  10. data/app/pb_kits/playbook/pb_date_picker/date_picker.test.js +30 -0
  11. data/app/pb_kits/playbook/pb_dialog/index.js +6 -1
  12. data/app/pb_kits/playbook/pb_draggable/index.js +6 -1
  13. data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +51 -2
  14. data/app/pb_kits/playbook/pb_kit/dateTime.ts +4 -22
  15. data/app/pb_kits/playbook/pb_pagination/docs/_pagination_external_control.jsx +22 -1
  16. data/app/pb_kits/playbook/pb_pagination/docs/_pagination_page_change.jsx +22 -2
  17. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_templates.jsx +76 -1
  18. data/app/pb_kits/playbook/pb_select/docs/_select_error.jsx +1 -1
  19. data/app/pb_kits/playbook/pb_select/docs/_select_inline.jsx +1 -1
  20. data/app/pb_kits/playbook/pb_select/docs/_select_inline_compact.jsx +1 -1
  21. data/app/pb_kits/playbook/pb_select/docs/_select_inline_show_arrow.jsx +1 -1
  22. data/app/pb_kits/playbook/pb_select/docs/_select_multiple.html.erb +3 -3
  23. data/app/pb_kits/playbook/pb_select/docs/_select_multiple.jsx +5 -5
  24. data/app/pb_kits/playbook/pb_select/docs/_select_react_hook.jsx +5 -5
  25. data/app/pb_kits/playbook/pb_select/docs/_select_required_indicator.jsx +1 -1
  26. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_react_hook.jsx +2 -2
  27. data/dist/chunks/{_pb_line_graph-EzcacMw_.js → _pb_line_graph-D7f-RfJJ.js} +1 -1
  28. data/dist/chunks/{_typeahead-BYUXg9ZT.js → _typeahead-DO5eU-VL.js} +1 -1
  29. data/dist/chunks/{globalProps-6Hsm3bJX.js → globalProps-BwwZkfTI.js} +1 -1
  30. data/dist/chunks/{lib-o4u12zAw.js → lib-Ch18RlJa.js} +1 -1
  31. data/dist/chunks/vendor.js +1 -1
  32. data/dist/playbook-rails-react-bindings.js +1 -1
  33. data/dist/playbook-rails.js +1 -1
  34. data/dist/playbook.css +1 -1
  35. data/lib/playbook/version.rb +1 -1
  36. metadata +7 -11
  37. data/app/pb_kits/playbook/pb_advanced_table/docs/_mock_data_inline_loading.js +0 -200
  38. data/app/pb_kits/playbook/pb_advanced_table/docs/_mock_data_inline_loading_empty_children.js +0 -42
  39. data/app/pb_kits/playbook/pb_advanced_table/docs/advanced_table_grouped_headers_composition_mock_data.json +0 -98
  40. data/app/pb_kits/playbook/pb_pagination/docs/data.js +0 -23
  41. data/app/pb_kits/playbook/pb_rich_text_editor/docs/templates.js +0 -75
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 790d11292ff2cdb06a14c2d450cc31c9dab1ef08d5d9508a752cf39cb1cde712
4
- data.tar.gz: 42e8d5741eb5245ee477f9e948920f9466e809363270962f6bf7c64c50bb6d54
3
+ metadata.gz: 5d0aa68c0eefef724872184457def4c975ebe23f75a9c5a0814af17a9018c513
4
+ data.tar.gz: e7155ab7308b74c16e63657ab879200f2bf74abb959542ba90c943b94ffef9f2
5
5
  SHA512:
6
- metadata.gz: 9d3df0e7679a6dbcb0750e996f6df1826fdb08616a46bb969148630e734c3776891beb1d2fbdaf33c9f5bfd02c0755598dbb0b366e3473486dc3d2e2fc0946a0
7
- data.tar.gz: 6e26937f4ad61063caaede20f6a15d49e0ecf54b21882c4c56aa352709d2ea17359e2644ac288031ca889b31550da45fd6db1f4d27d29e8f9cf0d2a8d2aca7b0
6
+ metadata.gz: 10ed586b474c9eeab3ab235b116b58914c28b50d1b2e1de4719ff000bb4042bf5b73a3d13401df05ce7ecac81705a3e79de9529ef2c718d63332be9668de7c10
7
+ data.tar.gz: 03ff1c9c07228db1a6349530a73ec8e605f548e0c80107aa0d4dbe0e416a908ed17cb6e44771e67d4b32bb68fcef04fca426f9fa7260abe8688d6c03703e299c
@@ -9,7 +9,21 @@ import ListItem from "../../pb_list/_list_item"
9
9
  import PbReactPopover from "../../pb_popover/_popover"
10
10
  import SectionSeparator from "../../pb_section_separator/_section_separator"
11
11
  import StarRating from "../../pb_star_rating/_star_rating"
12
- import COMPOSITION_MOCK_DATA from "./advanced_table_grouped_headers_composition_mock_data.json"
12
+
13
+ const COMPOSITION_MOCK_DATA = [
14
+ { id: "1", year: "2015", newEnrollments: "12", scheduledMeetings: "40", attendanceRate: "62%", classCompletionRate: "28%" },
15
+ { id: "2", year: "2016", newEnrollments: "88", scheduledMeetings: "12", attendanceRate: "71%", classCompletionRate: "55%" },
16
+ { id: "3", year: "2017", newEnrollments: "34", scheduledMeetings: "67", attendanceRate: "58%", classCompletionRate: "41%" },
17
+ { id: "4", year: "2018", newEnrollments: "05", scheduledMeetings: "91", attendanceRate: "44%", classCompletionRate: "73%" },
18
+ { id: "5", year: "2019", newEnrollments: "61", scheduledMeetings: "19", attendanceRate: "83%", classCompletionRate: "36%" },
19
+ { id: "6", year: "2020", newEnrollments: "19", scheduledMeetings: "54", attendanceRate: "67%", classCompletionRate: "62%" },
20
+ { id: "7", year: "2021", newEnrollments: "73", scheduledMeetings: "08", attendanceRate: "52%", classCompletionRate: "49%" },
21
+ { id: "8", year: "2022", newEnrollments: "50", scheduledMeetings: "50", attendanceRate: "75%", classCompletionRate: "45%" },
22
+ { id: "9", year: "2023", newEnrollments: "95", scheduledMeetings: "03", attendanceRate: "69%", classCompletionRate: "81%" },
23
+ { id: "10", year: "2024", newEnrollments: "27", scheduledMeetings: "76", attendanceRate: "91%", classCompletionRate: "22%" },
24
+ { id: "11", year: "2025", newEnrollments: "41", scheduledMeetings: "33", attendanceRate: "48%", classCompletionRate: "94%" },
25
+ { id: "12", year: "2026", newEnrollments: "66", scheduledMeetings: "66", attendanceRate: "55%", classCompletionRate: "58%" },
26
+ ]
13
27
 
14
28
  const LEAF_COUNT = "newEnrollments"
15
29
  const LEAF_SCHEDULED = "scheduledMeetings"
@@ -1,6 +1,6 @@
1
1
  import React from "react"
2
2
  import AdvancedTable from '../_advanced_table'
3
- import MOCK_DATA from "./advanced_table_mock_data_infinite_scroll.json"
3
+ import INFINITE_SCROLL_MOCK_DATA from "./advanced_table_mock_data_infinite_scroll.json"
4
4
 
5
5
  const AdvancedTableInfiniteScroll = (props) => {
6
6
  const columnDefinitions = [
@@ -39,7 +39,7 @@ const AdvancedTableInfiniteScroll = (props) => {
39
39
  <div>
40
40
  <AdvancedTable
41
41
  columnDefinitions={columnDefinitions}
42
- tableData={MOCK_DATA}
42
+ tableData={INFINITE_SCROLL_MOCK_DATA}
43
43
  virtualizedRows
44
44
  {...props}
45
45
  />
@@ -1,8 +1,8 @@
1
1
  import React from "react"
2
2
  import AdvancedTable from '../../pb_advanced_table/_advanced_table'
3
3
  import Caption from '../../pb_caption/_caption'
4
- import { MOCK_DATA_INLINE_LOADING } from "./_mock_data_inline_loading"
5
- import { MOCK_DATA_INLINE_LOADING_EMPTY_CHILDREN } from "./_mock_data_inline_loading_empty_children"
4
+ import MOCK_DATA_INLINE_LOADING from "./advanced_table_mock_data_inline_loading.json"
5
+ import MOCK_DATA_INLINE_LOADING_EMPTY_CHILDREN from "./advanced_table_mock_data_inline_loading_empty_children.json"
6
6
 
7
7
  const AdvancedTableInlineRowLoading = (props) => {
8
8
  const columnDefinitions = [
@@ -1,6 +1,6 @@
1
1
  import React, { useState } from "react"
2
2
  import AdvancedTable from '../_advanced_table'
3
- import MOCK_DATA from "./advanced_table_mock_data_with_id.json"
3
+ import MOCK_DATA_WITH_ID from "./advanced_table_mock_data_with_id.json"
4
4
 
5
5
  const AdvancedTableRowPinning = (props) => {
6
6
  const columnDefinitions = [
@@ -43,7 +43,7 @@ const AdvancedTableRowPinning = (props) => {
43
43
  columnDefinitions={columnDefinitions}
44
44
  maxHeight="xs"
45
45
  pinnedRows={{value: pinnedRows, onChange: setPinnedRows}}
46
- tableData={MOCK_DATA}
46
+ tableData={MOCK_DATA_WITH_ID}
47
47
  tableProps={{sticky: true}}
48
48
  {...props}
49
49
  >
@@ -0,0 +1,41 @@
1
+ [
2
+ {
3
+ "year": "2021",
4
+ "quarter": null,
5
+ "month": null,
6
+ "day": null,
7
+ "newEnrollments": "20",
8
+ "scheduledMeetings": "10",
9
+ "attendanceRate": "51%",
10
+ "completedClasses": "3",
11
+ "classCompletionRate": "33%",
12
+ "graduatedStudents": "19",
13
+ "children": []
14
+ },
15
+ {
16
+ "year": "2022",
17
+ "quarter": null,
18
+ "month": null,
19
+ "day": null,
20
+ "newEnrollments": "25",
21
+ "scheduledMeetings": "17",
22
+ "attendanceRate": "75%",
23
+ "completedClasses": "5",
24
+ "classCompletionRate": "45%",
25
+ "graduatedStudents": "32",
26
+ "children": []
27
+ },
28
+ {
29
+ "year": "2023",
30
+ "quarter": null,
31
+ "month": null,
32
+ "day": null,
33
+ "newEnrollments": "10",
34
+ "scheduledMeetings": "15",
35
+ "attendanceRate": "65%",
36
+ "completedClasses": "4",
37
+ "classCompletionRate": "49%",
38
+ "graduatedStudents": "29",
39
+ "children": []
40
+ }
41
+ ]
@@ -4,7 +4,7 @@ import Icon from "../../pb_icon/_icon"
4
4
  import Title from "../../pb_title/_title"
5
5
  import BreadCrumbItem from '../_bread_crumb_item'
6
6
 
7
- const Link = (props) => <BreadCrumbItem {...props} />
7
+ const LinkSection = (props) => <BreadCrumbItem {...props} />
8
8
  const BreadCrumbsDefault = (props) => {
9
9
  return (
10
10
  <BreadCrumbs
@@ -35,7 +35,7 @@ const BreadCrumbsDefault = (props) => {
35
35
  size="1x"
36
36
  {...props}
37
37
  />
38
- <Link
38
+ <LinkSection
39
39
  {...props}
40
40
  href="/users"
41
41
  >
@@ -46,20 +46,20 @@ const BreadCrumbsDefault = (props) => {
46
46
  text="Users"
47
47
  {...props}
48
48
  />
49
- </Link>
49
+ </LinkSection>
50
50
  <Icon
51
51
  icon="user"
52
52
  size="1x"
53
53
  {...props}
54
54
  />
55
- <Link {...props}>
55
+ <LinkSection {...props}>
56
56
  <Title
57
57
  size="4"
58
58
  tag="span"
59
59
  text="User"
60
60
  {...props}
61
61
  />
62
- </Link>
62
+ </LinkSection>
63
63
  </BreadCrumbs>
64
64
  )
65
65
  }
@@ -11,6 +11,13 @@ $pb_button_sizes: (
11
11
  "lg": ($font_large - 2px),
12
12
  );
13
13
 
14
+ // Icon-only: fixed square hit targets (not derived from font padding).
15
+ $pb_button_icon_only_dimensions: (
16
+ "sm": 35px,
17
+ "md": 40px,
18
+ "lg": 45px,
19
+ );
20
+
14
21
  // Base button class
15
22
  .pb_button_kit {
16
23
  @include pb_button;
@@ -113,32 +120,27 @@ $pb_button_sizes: (
113
120
  }
114
121
  }
115
122
 
116
- // Icon-only button (icon prop set, no text) - square with equal padding
117
- // Rails: uses .pb_button_icon_only class
118
- // React: when pb_button_content is empty (no text). Do not match when content has
119
- // text + icon (e.g. "Exit Fullscreen" + FA icon) which can include empty spans.
123
+ // Icon-only button (icon prop set, no text) — fixed squares; icon scales via font-size from size prop.
124
+ // Rails: .pb_button_icon_only; React: class or :has(...) when label is empty.
125
+ // Rails uses a truly empty .pb_button_content; React wraps text in a child span (may be empty).
120
126
  &.pb_button_icon_only,
121
- &:has(.pb_button_content:empty) {
127
+ &:has(.pb_button_content:empty),
128
+ &:has(.pb_button_content > span:empty) {
122
129
  aspect-ratio: 1;
123
- min-width: auto;
124
- width: auto;
125
- height: auto;
126
- padding: $pb_button_v_padding !important;
127
- min-height: ($pb_button_v_padding * 2) + $font_small;
128
-
129
- &.pb_button_size_sm {
130
- padding: $font_smaller !important;
131
- min-height: ($font_smaller * 2) + $font_smaller;
132
- }
133
-
134
- &.pb_button_size_md {
135
- padding: $font_small !important;
136
- min-height: ($font_small * 2) + $font_small;
137
- }
138
-
139
- &.pb_button_size_lg {
140
- padding: ($font_large - 2px) !important;
141
- min-height: (($font_large - 2px) * 2) + ($font_large - 2px);
130
+ box-sizing: border-box;
131
+ $pb_button_icon_only_default: map-get($pb_button_icon_only_dimensions, "md");
132
+ width: $pb_button_icon_only_default;
133
+ min-width: $pb_button_icon_only_default;
134
+ height: $pb_button_icon_only_default;
135
+ min-height: $pb_button_icon_only_default;
136
+ padding: 0 !important;
137
+ @each $name, $dim in $pb_button_icon_only_dimensions {
138
+ &.pb_button_size_#{$name} {
139
+ width: $dim;
140
+ min-width: $dim;
141
+ height: $dim;
142
+ min-height: $dim;
143
+ }
142
144
  }
143
145
 
144
146
  // Remove margins from icons
@@ -73,8 +73,10 @@ module Playbook
73
73
  emoji_regex.match?(icon)
74
74
  end
75
75
 
76
+ # Icon-only = icon with no label. Label may come from `text` or from a block (e.g. CopyButton);
77
+ # block content must not be treated as icon-only when `text` is unset.
76
78
  def icon_only?
77
- icon.present? && text.blank? && variant != "reaction"
79
+ icon.present? && text.blank? && children.blank? && variant != "reaction"
78
80
  end
79
81
 
80
82
  def classname
@@ -310,4 +310,34 @@ describe('DatePicker Kit', () => {
310
310
  expect(label).toBeInTheDocument()
311
311
  expect(kit).not.toHaveTextContent("*")
312
312
  })
313
+
314
+ test('Last month quickpick includes the correct last day of previous month', async () => {
315
+ const testId = 'datepicker-last-month'
316
+ render(
317
+ <DatePicker
318
+ allowInput
319
+ data={{ testid: testId }}
320
+ mode="range"
321
+ pickerId="date-picker-last-month"
322
+ placeholder="mm/dd/yyyy to mm/dd/yyyy"
323
+ selectionType="quickpick"
324
+ />
325
+ )
326
+
327
+ const kit = screen.getByTestId(testId)
328
+ const input = within(kit).getByPlaceholderText('mm/dd/yyyy to mm/dd/yyyy')
329
+
330
+ fireEvent(input, new MouseEvent('click', { bubbles: true, cancelable: true }))
331
+
332
+ const lastMonth = within(kit).getByText('Last month')
333
+ fireEvent(lastMonth, new MouseEvent('click', { bubbles: true, cancelable: true }))
334
+
335
+ await waitFor(() => {
336
+ expect(input).toHaveValue(
337
+ DateTime.getPreviousMonthStartDate(new Date()).formatDate() +
338
+ " to " +
339
+ DateTime.getPreviousMonthEndDate(new Date()).formatDate()
340
+ )
341
+ })
342
+ })
313
343
  })
@@ -16,7 +16,12 @@ export default class PbDialog extends PbEnhancedElement {
16
16
  this.domContentLoadedHandler = () => this.setupDialog()
17
17
  this.turboFrameLoadHandler = () => this.setupDialog()
18
18
 
19
- window.addEventListener("DOMContentLoaded", this.domContentLoadedHandler)
19
+ // If DOM is already loaded, setup immediately; otherwise wait for DOMContentLoaded
20
+ if (document.readyState === "loading") {
21
+ window.addEventListener("DOMContentLoaded", this.domContentLoadedHandler)
22
+ } else {
23
+ this.setupDialog()
24
+ }
20
25
  window.addEventListener("turbo:frame-load", this.turboFrameLoadHandler)
21
26
 
22
27
  // Code for custom_event_type setup (can take multiple events in a string separated by commas)
@@ -22,7 +22,12 @@ export default class PbDraggable extends PbEnhancedElement {
22
22
  this.dragZoneType = "";
23
23
  this.dragZoneColor = "";
24
24
 
25
- document.addEventListener("DOMContentLoaded", () => this.bindEventListeners());
25
+ // If DOM is already loaded, bind immediately; otherwise wait for DOMContentLoaded
26
+ if (document.readyState === "loading") {
27
+ document.addEventListener("DOMContentLoaded", () => this.bindEventListeners());
28
+ } else {
29
+ this.bindEventListeners();
30
+ }
26
31
  }
27
32
 
28
33
  setState(newState) {
@@ -1,8 +1,8 @@
1
1
  import React, { useState } from "react"
2
- import { render, screen, fireEvent } from "../utilities/test-utils"
2
+ import { render, screen, fireEvent, waitFor } from "../utilities/test-utils"
3
3
 
4
4
  import { Dropdown, Icon, IconCircle } from 'playbook-ui'
5
-
5
+ import DateTime from "../pb_kit/dateTime.ts"
6
6
 
7
7
  const testId = 'dropdown'
8
8
 
@@ -778,3 +778,52 @@ test("requiredIndicator prop renders asterisk when true", () => {
778
778
  expect(label).toBeInTheDocument();
779
779
  expect(kit).toHaveTextContent("*");
780
780
  });
781
+
782
+ describe("quickpick Last Month range when current month is shorter than the previous month", () => {
783
+ const quickpickTestId = "dropdown-quickpick-last-month-march"
784
+
785
+ const formatDate = (date) => {
786
+ const month = (date.getMonth() + 1).toString().padStart(2, "0")
787
+ const day = date.getDate().toString().padStart(2, "0")
788
+ const year = date.getFullYear()
789
+ return `${month}/${day}/${year}`
790
+ }
791
+
792
+ beforeEach(() => {
793
+ jest.setSystemTime(new Date(2026, 3, 15, 12, 0, 0))
794
+ })
795
+
796
+ afterEach(() => {
797
+ jest.setSystemTime()
798
+ })
799
+
800
+ test("selecting Last Month matches DateTime previous-month range (full March when today is in April)", async () => {
801
+ const onSelect = jest.fn()
802
+ const now = new Date()
803
+
804
+ render(
805
+ <Dropdown
806
+ data={{ testid: quickpickTestId }}
807
+ onSelect={onSelect}
808
+ variant="quickpick"
809
+ />
810
+ )
811
+
812
+ const kit = screen.getByTestId(quickpickTestId)
813
+ const lastMonthOption = Array.from(kit.querySelectorAll(".pb_dropdown_option_list")).find(
814
+ (el) => el.textContent === "Last Month"
815
+ )
816
+
817
+ expect(lastMonthOption).toBeTruthy()
818
+ fireEvent.click(lastMonthOption)
819
+
820
+ await waitFor(() => {
821
+ expect(onSelect).toHaveBeenCalled()
822
+ })
823
+
824
+ const [startDate, endDate] = onSelect.mock.calls[0][0].value
825
+
826
+ expect(formatDate(startDate)).toBe(formatDate(DateTime.getPreviousMonthStartDate(now)))
827
+ expect(formatDate(endDate)).toBe(formatDate(DateTime.getPreviousMonthEndDate(now)))
828
+ })
829
+ })
@@ -281,17 +281,8 @@ export const getPreviousMonthStartDate = (newDate: Date | string): Date => {
281
281
  }
282
282
 
283
283
  export const getPreviousMonthEndDate = (newDate: Date | string): Date => {
284
- const lastDayOfMonth = getMonthEndDate(newDate)
285
- const lastDayOfPreviousMonth = new Date(
286
- lastDayOfMonth.getFullYear(),
287
- lastDayOfMonth.getMonth() - 1,
288
- lastDayOfMonth.getDate(),
289
- lastDayOfMonth.getHours(),
290
- lastDayOfMonth.getMinutes(),
291
- lastDayOfMonth.getSeconds()
292
- )
293
-
294
- return lastDayOfPreviousMonth
284
+ const date = formatDate(newDate)
285
+ return new Date(date.getFullYear(), date.getMonth(), 0, 23, 59, 59)
295
286
  }
296
287
 
297
288
  // Quarters
@@ -325,17 +316,8 @@ export const getPreviousQuarterStartDate = (newDate: Date | string): Date => {
325
316
  }
326
317
 
327
318
  export const getPreviousQuarterEndDate = (newDate: Date | string): Date => {
328
- const endOfQuarter = getQuarterEndDate(newDate)
329
- const lastDayOfPreviousQuarter = new Date(
330
- endOfQuarter.getFullYear(),
331
- endOfQuarter.getMonth() - 3,
332
- endOfQuarter.getDate(),
333
- endOfQuarter.getHours(),
334
- endOfQuarter.getMinutes(),
335
- endOfQuarter.getSeconds()
336
- )
337
-
338
- return lastDayOfPreviousQuarter
319
+ const startOfQuarter = getQuarterStartDate(newDate)
320
+ return new Date(startOfQuarter.getFullYear(), startOfQuarter.getMonth(), 0, 23, 59, 59)
339
321
  }
340
322
 
341
323
  // Years
@@ -4,7 +4,28 @@ import Pagination from '../../pb_pagination/_pagination'
4
4
  import Select from '../../pb_select/_select'
5
5
  import Table from '../../pb_table/_table'
6
6
 
7
- import { data } from "./data";
7
+ const data = [
8
+ ["Value 1", "Value 2", "Value 3", "Value 4", "Value 5"],
9
+ ["Value 6", "Value 7", "Value 8", "Value 9", "Value 10"],
10
+ ["Value 11", "Value 12", "Value 13", "Value 14", "Value 15"],
11
+ ["Value 16", "Value 17", "Value 18", "Value 19", "Value 20"],
12
+ ["Value 21", "Value 22", "Value 23", "Value 24", "Value 25"],
13
+ ["Value 26", "Value 27", "Value 28", "Value 29", "Value 30"],
14
+ ["Value 31", "Value 32", "Value 33", "Value 34", "Value 35"],
15
+ ["Value 36", "Value 37", "Value 38", "Value 39", "Value 40"],
16
+ ["Value 41", "Value 42", "Value 43", "Value 44", "Value 45"],
17
+ ["Value 46", "Value 47", "Value 48", "Value 49", "Value 50"],
18
+ ["Value 51", "Value 52", "Value 53", "Value 54", "Value 55"],
19
+ ["Value 56", "Value 57", "Value 58", "Value 59", "Value 60"],
20
+ ["Value 61", "Value 62", "Value 63", "Value 64", "Value 65"],
21
+ ["Value 66", "Value 67", "Value 68", "Value 69", "Value 70"],
22
+ ["Value 71", "Value 72", "Value 73", "Value 74", "Value 75"],
23
+ ["Value 76", "Value 77", "Value 78", "Value 79", "Value 80"],
24
+ ["Value 81", "Value 82", "Value 83", "Value 84", "Value 85"],
25
+ ["Value 86", "Value 87", "Value 88", "Value 89", "Value 90"],
26
+ ["Value 91", "Value 92", "Value 93", "Value 94", "Value 95"],
27
+ ["Value 96", "Value 97", "Value 98", "Value 99", "Value 100"],
28
+ ];
8
29
 
9
30
  const PaginationExternalControl = (props) => {
10
31
  const [totalItems, setTotalItems] = useState(20);
@@ -2,8 +2,28 @@ import React, { useState } from "react";
2
2
  import Table from '../../pb_table/_table'
3
3
  import Pagination from '../../pb_pagination/_pagination'
4
4
 
5
-
6
- import { data } from "./data";
5
+ const data = [
6
+ ["Value 1", "Value 2", "Value 3", "Value 4", "Value 5"],
7
+ ["Value 6", "Value 7", "Value 8", "Value 9", "Value 10"],
8
+ ["Value 11", "Value 12", "Value 13", "Value 14", "Value 15"],
9
+ ["Value 16", "Value 17", "Value 18", "Value 19", "Value 20"],
10
+ ["Value 21", "Value 22", "Value 23", "Value 24", "Value 25"],
11
+ ["Value 26", "Value 27", "Value 28", "Value 29", "Value 30"],
12
+ ["Value 31", "Value 32", "Value 33", "Value 34", "Value 35"],
13
+ ["Value 36", "Value 37", "Value 38", "Value 39", "Value 40"],
14
+ ["Value 41", "Value 42", "Value 43", "Value 44", "Value 45"],
15
+ ["Value 46", "Value 47", "Value 48", "Value 49", "Value 50"],
16
+ ["Value 51", "Value 52", "Value 53", "Value 54", "Value 55"],
17
+ ["Value 56", "Value 57", "Value 58", "Value 59", "Value 60"],
18
+ ["Value 61", "Value 62", "Value 63", "Value 64", "Value 65"],
19
+ ["Value 66", "Value 67", "Value 68", "Value 69", "Value 70"],
20
+ ["Value 71", "Value 72", "Value 73", "Value 74", "Value 75"],
21
+ ["Value 76", "Value 77", "Value 78", "Value 79", "Value 80"],
22
+ ["Value 81", "Value 82", "Value 83", "Value 84", "Value 85"],
23
+ ["Value 86", "Value 87", "Value 88", "Value 89", "Value 90"],
24
+ ["Value 91", "Value 92", "Value 93", "Value 94", "Value 95"],
25
+ ["Value 96", "Value 97", "Value 98", "Value 99", "Value 100"],
26
+ ];
7
27
 
8
28
  const PaginationPageChange = (props) => {
9
29
 
@@ -5,7 +5,82 @@ import StarterKit from "@tiptap/starter-kit"
5
5
  import Link from '@tiptap/extension-link'
6
6
 
7
7
  import Select from '../../pb_select/_select'
8
- import { changelog, release } from './templates.js'
8
+
9
+ const release = `
10
+ <div>
11
+ <div>
12
+ <strong>Story Background</strong>
13
+ </div>
14
+ <div>
15
+ Follow the{" "}
16
+ <a href='https://github.com/powerhome/playbook/wiki/Release-Team-Guide'>
17
+ release process
18
+ </a>{" "}
19
+ to create a new version, create a gem, and package. Create a Ninja testing
20
+ plan, then update Nitro with the new version.
21
+ </div>
22
+ <div>
23
+ <br />
24
+ </div>
25
+ <div>
26
+ <strong>Timeline / Due Date</strong>
27
+ </div>
28
+ <div>
29
+ <em>Release End of business Thursday</em>
30
+ </div>
31
+ <div>
32
+ <em>Testing on Nitro End of business Friday</em>
33
+ </div>
34
+ <div>
35
+ <br />
36
+ </div>
37
+ <div>
38
+ <strong>Definition of done</strong>
39
+ </div>
40
+ <ol>
41
+ <li>Merge all PR’s</li>
42
+ <li>Update the final CHANGELOG</li>
43
+ <li>Version up and generate NPM, and RubyGem</li>
44
+ <li>Create next version branch and milestone</li>
45
+ <li>Update default branch and branch protection rules&nbsp;</li>
46
+ <li>Notify Everyone of new version</li>
47
+ <li>
48
+ Generate testing plan and pages to test for Ninjas (update runway
49
+ ticket)
50
+ </li>
51
+ <li>Update version on Nitro and get on Demo</li>
52
+ <li>Send Ninjas demo and runway ticket for testing</li>
53
+ <li>Ninja Approved + PR Approved</li>
54
+ </ol>
55
+ <div>
56
+ <br />
57
+ </div>
58
+ <div>
59
+ <strong>Stakeholders / Sign-off</strong>
60
+ </div>
61
+ <ul>
62
+ <li>Code Owners</li>
63
+ </ul>
64
+ <div>
65
+ <br />
66
+ <strong>Cadence</strong>
67
+ <br />
68
+ Jason, Jon, Stephen, Jasper, Brendan, Cole
69
+ </div>
70
+ </div>
71
+ `
72
+
73
+ const changelog = `
74
+ <div>
75
+ <strong>Changelog:<br></strong>
76
+ [INSERT LINK]<br><br>
77
+ You can test the normal spots of Playbook rails and react on
78
+ dev docs plus the following:
79
+ </div>
80
+ <div>
81
+ <br>
82
+ </div>
83
+ `
9
84
 
10
85
  const RichTextEditorAdvancedTemplates = (props) => {
11
86
 
@@ -28,7 +28,7 @@ const SelectError = (props) => {
28
28
  <Select
29
29
  error={error}
30
30
  label="Favorite Food"
31
- name="food"
31
+ name="food-error"
32
32
  options={options}
33
33
  value="2"
34
34
  {...props}
@@ -23,7 +23,7 @@ const SelectInline = (props) => {
23
23
  <Select
24
24
  inline
25
25
  label="Favorite Food"
26
- name="food"
26
+ name="food-inline"
27
27
  options={options}
28
28
  {...props}
29
29
  />
@@ -24,7 +24,7 @@ const SelectInlineCompact = (props) => {
24
24
  compact
25
25
  inline
26
26
  label="Favorite Food"
27
- name="food"
27
+ name="food-inline-compact"
28
28
  options={options}
29
29
  {...props}
30
30
  />
@@ -23,7 +23,7 @@ const SelectInlineShowArrow = (props) => {
23
23
  <Select
24
24
  inline
25
25
  label="Favorite Food"
26
- name="food"
26
+ name="food-inline-show-arrow"
27
27
  options={options}
28
28
  showArrow
29
29
  {...props}
@@ -22,15 +22,15 @@
22
22
  value_text: "BBQ",
23
23
  },
24
24
  {
25
- value: "4",
25
+ value: "5",
26
26
  value_text: "Sushi",
27
27
  },
28
28
  {
29
- value: "4",
29
+ value: "6",
30
30
  value_text: "Chinese",
31
31
  },
32
32
  {
33
- value: "4",
33
+ value: "7",
34
34
  value_text: "Hot Dogs",
35
35
  },
36
36
  ]