playbook_ui_docs 16.3.0 → 16.4.0.pre.alpha.PLAY2846reactadvancedtablecalcheaderpinnedrows15356

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 (79) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_cascade_collapse.jsx +50 -0
  3. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_cascade_collapse.md +1 -0
  4. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pinned_rows_rails.html.erb +57 -0
  5. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pinned_rows_rails.md +7 -0
  6. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_parent_only.jsx +175 -0
  7. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_parent_only.md +5 -0
  8. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +3 -0
  9. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +3 -1
  10. data/app/pb_kits/playbook/pb_button/docs/_button_full_width_rails.md +19 -0
  11. data/app/pb_kits/playbook/pb_button/docs/_button_full_width_react.md +23 -0
  12. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_compound_components.html.erb +1 -1
  13. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_compound_components.jsx +6 -3
  14. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_full_height.html.erb +3 -3
  15. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_full_height.jsx +6 -3
  16. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_full_height_placement.html.erb +3 -3
  17. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_full_height_placement.jsx +6 -3
  18. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_closing_options_rails.html.erb +16 -0
  19. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_closing_options_rails.md +1 -0
  20. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_custom_event_type.html.erb +224 -0
  21. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_custom_event_type.md +7 -0
  22. data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +2 -0
  23. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_nav_margin.html.erb +46 -0
  24. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_nav_margin.jsx +42 -0
  25. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_nav_margin_rails.md +1 -0
  26. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_nav_margin_react.md +1 -0
  27. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/example.yml +2 -0
  28. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/index.js +2 -1
  29. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_placeholder.html.erb +109 -0
  30. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_placeholder.jsx +127 -0
  31. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_placeholder.md +1 -0
  32. data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +2 -0
  33. data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +1 -0
  34. data/app/pb_kits/playbook/pb_popover/docs/_popover_placement.jsx +81 -0
  35. data/app/pb_kits/playbook/pb_popover/docs/_popover_placement_react.md +1 -0
  36. data/app/pb_kits/playbook/pb_popover/docs/_popover_position.html.erb +128 -0
  37. data/app/pb_kits/playbook/pb_popover/docs/_popover_position_rails.md +1 -0
  38. data/app/pb_kits/playbook/pb_popover/docs/example.yml +2 -0
  39. data/app/pb_kits/playbook/pb_popover/docs/index.js +2 -1
  40. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_default.jsx +56 -0
  41. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_default.md +1 -0
  42. data/app/pb_kits/playbook/pb_rich_text_editor/docs/example.yml +13 -21
  43. data/app/pb_kits/playbook/pb_rich_text_editor/docs/index.js +0 -10
  44. data/app/pb_kits/playbook/pb_table/docs/_sections.yml +1 -0
  45. data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_external_filter_rails.html.erb +45 -0
  46. data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_external_filter_rails.md +39 -0
  47. data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_rails.md +2 -1
  48. data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_with_card_title_props.jsx +152 -0
  49. data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_with_card_title_props.md +17 -0
  50. data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_with_card_title_props_rails.html.erb +121 -0
  51. data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_with_card_title_props_rails.md +17 -0
  52. data/app/pb_kits/playbook/pb_table/docs/example.yml +3 -0
  53. data/app/pb_kits/playbook/pb_table/docs/index.js +1 -0
  54. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_highlight.jsx +20 -8
  55. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_highlight.md +3 -0
  56. metadata +33 -25
  57. data/app/pb_kits/playbook/pb_button/docs/_button_full_width.md +0 -1
  58. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_attributes.html.erb +0 -5
  59. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_attributes.jsx +0 -15
  60. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_default.html.erb +0 -1
  61. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_focus.html.erb +0 -3
  62. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_focus.jsx +0 -17
  63. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_inline.html.erb +0 -6
  64. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_inline.jsx +0 -16
  65. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_label.jsx +0 -28
  66. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_label.md +0 -1
  67. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_preview.html.erb +0 -35
  68. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_preview.jsx +0 -45
  69. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_required_indicator.html.erb +0 -10
  70. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_required_indicator.jsx +0 -22
  71. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_required_indicator.md +0 -3
  72. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_simple.html.erb +0 -1
  73. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_simple.jsx +0 -13
  74. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_sticky.html.erb +0 -1
  75. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_sticky.jsx +0 -15
  76. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_templates.html.erb +0 -115
  77. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_templates.jsx +0 -42
  78. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_toolbar_bottom.html.erb +0 -4
  79. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_toolbar_bottom.jsx +0 -14
@@ -0,0 +1,152 @@
1
+ import React, { useState } from "react"
2
+ import { Button, Date as DateKit, DatePicker, Dropdown, Select, Table, TextInput, Typeahead, Flex } from "playbook-ui"
3
+
4
+ // Mock Data for Table
5
+ const users = [
6
+ { id: 1, name: "Jennifer", title: "Associate Scrum Master", department: "Business Technology", branch: "Philadelphia", startDate: "2025-01-01" },
7
+ { id: 2, name: "Nick", title: "UX Engineer II", department: "Business Technology", branch: "Philadelphia", startDate: "2025-01-02" },
8
+ { id: 3, name: "Nida", title: "Senior UX Engineer", department: "Business Technology", branch: "Philadelphia", startDate: "2025-01-03" },
9
+ { id: 4, name: "Justin", title: "Director of User Experience Engineering", department: "Business Technology", branch: "Philadelphia", startDate: "2025-01-04" },
10
+ { id: 5, name: "Edward", title: "UX Designer II", department: "Business Technology", branch: "Philadelphia", startDate: "2025-01-05" },
11
+ { id: 6, name: "Elisa", title: "UX Engineer", department: "Business Technology", branch: "Philadelphia", startDate: "2025-01-06" },
12
+ { id: 7, name: "Gary", title: "UX Engineer", department: "Business Technology", branch: "Philadelphia", startDate: "2025-01-07" },
13
+ { id: 8, name: "Barkley", title: "Nitro Quality Ninja", department: "Business Technology", branch: "Philadelphia", startDate: "2025-01-08" },
14
+ { id: 9, name: "Aaron", title: "Associate Nitro Quality Ninja", department: "Business Technology", branch: "Philadelphia", startDate: "2025-01-09" },
15
+ ]
16
+
17
+ const TableWithFilterWithCardTitleProps = () => {
18
+ const [territory, setTerritory] = useState("")
19
+
20
+ // --------Filter content example ------
21
+ const filterContent = ({ closePopover }) => (
22
+ <>
23
+ <TextInput
24
+ label="Territory ID"
25
+ onChange={event => setTerritory(event.target.value)}
26
+ value={territory}
27
+ />
28
+
29
+ <Typeahead
30
+ label="Title"
31
+ options={[
32
+ { key: "senior-ux-engineer", label: "Senior UX Engineer", value: "senior-ux-engineer" },
33
+ { key: "ux-engineer", label: "UX Engineer", value: "ux-engineer" },
34
+ { key: "ux-designer", label: "UX Designer", value: "ux-designer" }
35
+ ]}
36
+ />
37
+
38
+ <Select
39
+ blankSelection="All Departments"
40
+ label="Department"
41
+ options={[
42
+ { value: "Business Technology", label: "Business Technology", key: "business-technology" },
43
+ { value: "Customer Development", label: "Customer Development", key: "customer-development" },
44
+ { value: "Talent Acquisition", label: "Talent Acquisition", key: "talent-acquisition" }
45
+ ]}
46
+ />
47
+
48
+ <Dropdown
49
+ label="Branch"
50
+ options={[
51
+ { key: "Philadelphia", label: "Philadelphia", value: "philadelphia" },
52
+ { key: "New York", label: "New York", value: "new-york" },
53
+ { key: "Austin", label: "Austin", value: "austin" }
54
+ ]}
55
+ />
56
+
57
+ <DatePicker
58
+ label="Start Date"
59
+ paddingY="sm"
60
+ pickerId="startedOn"
61
+ />
62
+ <Flex spacing="between">
63
+ <Button
64
+ onClick={() => {
65
+ alert("No filtering functionality - just a pattern demo!")
66
+ closePopover()
67
+ }}
68
+ text="Filter"
69
+ />
70
+ <Button
71
+ text="Defaults"
72
+ variant="secondary"
73
+ />
74
+ </Flex>
75
+ </>
76
+ )
77
+ // -------End Filter content example ------
78
+
79
+ return (
80
+ <Table
81
+ cardProps={{marginX: {
82
+ xs: "sm",
83
+ sm: "sm",
84
+ md: "xl",
85
+ lg: "xl",
86
+ xl: "xl",
87
+ default: "xl",
88
+ }}}
89
+ filterContent={filterContent}
90
+ filterProps={{
91
+ results: 50,
92
+ sortOptions: {
93
+ territory_id: "Territory ID",
94
+ first_name: "Name",
95
+ started_on: "Start Date",
96
+ department_name: "Department",
97
+ title_name: "Title",
98
+ branch_branch_name: "Branch",
99
+ },
100
+ sortValue: [{ name: 'started_on', dir: 'asc' }],
101
+ }}
102
+ title="Table Title Here"
103
+ titleProps={{
104
+ paddingLeft:{
105
+ xs: "sm",
106
+ sm: "sm",
107
+ md: "xl",
108
+ lg: "xl",
109
+ xl: "xl",
110
+ default: "xl",
111
+ }
112
+ }}
113
+ variant="withFilter"
114
+ >
115
+ <Table.Head>
116
+ <Table.Row>
117
+ <Table.Header>{'Territory ID'}</Table.Header>
118
+ <Table.Header>{'Name'}</Table.Header>
119
+ <Table.Header>{'Title'}</Table.Header>
120
+ <Table.Header>{'Department'}</Table.Header>
121
+ <Table.Header>{'Branch'}</Table.Header>
122
+ <Table.Header textAlign="right">{'Start Date'}</Table.Header>
123
+ </Table.Row>
124
+ </Table.Head>
125
+ <Table.Body>
126
+ {users.map((user) => (
127
+ <Table.Row key={user.id}>
128
+ <Table.Cell
129
+ marginX={{ xs: "sm" }}
130
+ numberSpacing="tabular"
131
+ >
132
+ {user.id}
133
+ </Table.Cell>
134
+ <Table.Cell marginX={{ xs: "sm" }}>{user.name}</Table.Cell>
135
+ <Table.Cell marginX={{ xs: "sm" }}>{user.title}</Table.Cell>
136
+ <Table.Cell marginX={{ xs: "sm" }}>{user.department}</Table.Cell>
137
+ <Table.Cell marginX={{ xs: "sm" }}>{user.branch}</Table.Cell>
138
+ <Table.Cell marginX={{ xs: "sm" }}>
139
+ <DateKit
140
+ alignment="right"
141
+ showCurrentYear
142
+ value={user.startDate}
143
+ />
144
+ </Table.Cell>
145
+ </Table.Row>
146
+ ))}
147
+ </Table.Body>
148
+ </Table>
149
+ )
150
+ }
151
+
152
+ export default TableWithFilterWithCardTitleProps
@@ -0,0 +1,17 @@
1
+ The `withFilter` variant also offers 2 additional optional props:
2
+
3
+ `cardProps`: An object containing Card-specific props.
4
+ `titleProps`: An object containing Title-specific props.
5
+
6
+ #### Default Card Props
7
+
8
+ The Table kit automatically sets these Card defaults (which you can override via `cardProps`):
9
+
10
+ - `padding="none"`
11
+
12
+ #### Default Title Props
13
+
14
+ The Table kit automatically sets these Title defaults (which you can override via `titleProps`):
15
+
16
+ - `size={3}`
17
+ - `paddingY="md"`
@@ -0,0 +1,121 @@
1
+ <% users = [
2
+ { id: 1, name: "Jennifer", title: "Associate Scrum Master", department: "Business Technology", branch: "Philadelphia", start_date: Date.new(2025, 1, 1) },
3
+ { id: 2, name: "Nick", title: "UX Engineer II", department: "Business Technology", branch: "Philadelphia", start_date: Date.new(2025, 1, 2) },
4
+ { id: 3, name: "Nida", title: "Senior UX Engineer", department: "Business Technology", branch: "Philadelphia", start_date: Date.new(2025, 1, 3) },
5
+ { id: 4, name: "Justin", title: "Director of User Experience Engineering", department: "Business Technology", branch: "Philadelphia", start_date: Date.new(2025, 1, 4) },
6
+ { id: 5, name: "Edward", title: "UX Designer II", department: "Business Technology", branch: "Philadelphia", start_date: Date.new(2025, 1, 5) },
7
+ { id: 6, name: "Elisa", title: "UX Engineer", department: "Business Technology", branch: "Philadelphia", start_date: Date.new(2025, 1, 6) },
8
+ { id: 7, name: "Gary", title: "UX Engineer", department: "Business Technology", branch: "Philadelphia", start_date: Date.new(2025, 1, 7) },
9
+ { id: 8, name: "Barkley", title: "Nitro Quality Ninja", department: "Business Technology", branch: "Philadelphia", start_date: Date.new(2025, 1, 8) },
10
+ { id: 9, name: "Aaron", title: "Associate Nitro Quality Ninja", department: "Business Technology", branch: "Philadelphia", start_date: Date.new(2025, 1, 9) },
11
+ ] %>
12
+
13
+ <% filter_content =
14
+ pb_rails("text_input", props: {
15
+ label: "Territory ID",
16
+ placeholder: "Enter Territory ID"
17
+ }) +
18
+ pb_rails("typeahead", props: {
19
+ label: "Title",
20
+ options: [
21
+ { label: "Senior UX Engineer", value: "senior-ux-engineer" },
22
+ { label: "UX Engineer", value: "ux-engineer" },
23
+ { label: "UX Designer", value: "ux-designer" }
24
+ ]
25
+ }) +
26
+ pb_rails("select", props: {
27
+ blank_selection: "All Departments",
28
+ label: "Department",
29
+ options: [
30
+ { value: "Business Technology", text: "Business Technology" },
31
+ { value: "Customer Development", text: "Customer Development" },
32
+ { value: "Talent Acquisition", text: "Talent Acquisition" }
33
+ ]
34
+ }) +
35
+ pb_rails("dropdown", props: {
36
+ label: "Branch",
37
+ options: [
38
+ { label: "Philadelphia", value: "philadelphia" },
39
+ { label: "New York", value: "new-york" },
40
+ { label: "Austin", value: "austin" }
41
+ ]
42
+ }) +
43
+ pb_rails("date_picker", props: {
44
+ label: "Start Date",
45
+ padding_y: "sm",
46
+ picker_id: "startedOn"
47
+ }) +
48
+ pb_rails("flex", props: { spacing: "between" }) do
49
+ pb_rails("button", props: {
50
+ text: "Filter",
51
+ }) +
52
+ pb_rails("button", props: {
53
+ text: "Defaults",
54
+ variant: "secondary"
55
+ })
56
+ end
57
+ %>
58
+
59
+ <%= pb_rails("table", props: {
60
+ card_props: {
61
+ margin_x: {
62
+ xs: "sm",
63
+ sm: "sm",
64
+ md: "xl",
65
+ lg: "xl",
66
+ xl: "xl",
67
+ default: "xl",
68
+ }
69
+ },
70
+ variant: "with_filter",
71
+ title: "Table Title Here",
72
+ title_props: {
73
+ padding_left:{
74
+ xs: "sm",
75
+ sm: "sm",
76
+ md: "xl",
77
+ lg: "xl",
78
+ xl: "xl",
79
+ default: "xl",
80
+ }
81
+ },
82
+ filter_content: filter_content,
83
+ filter_props: {
84
+ id: "user-table-filters-1",
85
+ results: 9,
86
+ sort_menu: [
87
+ { item: "Start Date", link: "?q[sorts]=started_on+asc", active: true, direction: "asc" },
88
+ { item: "First Name", link: "?q[sorts]=name+asc", active: false },
89
+ { item: "Title", link: "?q[sorts]=title+asc", active: false },
90
+ { item: "Department", link: "?q[sorts]=department+asc", active: false },
91
+ { item: "Branch", link: "?q[sorts]=branch+asc", active: false },
92
+ { item: "Territory ID", link: "?q[sorts]=territory_id+asc", active: false },
93
+ ],
94
+ }
95
+ }) do %>
96
+ <%= pb_rails("table/table_head") do %>
97
+ <%= pb_rails("table/table_row") do %>
98
+ <%= pb_rails("table/table_header", props: { text: "Territory ID" }) %>
99
+ <%= pb_rails("table/table_header", props: { text: "Name" }) %>
100
+ <%= pb_rails("table/table_header", props: { text: "Title" }) %>
101
+ <%= pb_rails("table/table_header", props: { text: "Department" }) %>
102
+ <%= pb_rails("table/table_header", props: { text: "Branch" }) %>
103
+ <%= pb_rails("table/table_header", props: { text: "Start Date", text_align: "right" }) %>
104
+ <% end %>
105
+ <% end %>
106
+
107
+ <%= pb_rails("table/table_body") do %>
108
+ <% users.each do |user| %>
109
+ <%= pb_rails("table/table_row") do %>
110
+ <%= pb_rails("table/table_cell", props: { margin_x: { xs: "sm" }, number_spacing: "tabular" }) { user[:id].to_s } %>
111
+ <%= pb_rails("table/table_cell", props: { margin_x: { xs: "sm" } }) { user[:name] } %>
112
+ <%= pb_rails("table/table_cell", props: { margin_x: { xs: "sm" } }) { user[:title] } %>
113
+ <%= pb_rails("table/table_cell", props: { margin_x: { xs: "sm" } }) { user[:department] } %>
114
+ <%= pb_rails("table/table_cell", props: { margin_x: { xs: "sm" } }) { user[:branch] } %>
115
+ <%= pb_rails("table/table_cell", props: { margin_x: { xs: "sm" } }) do %>
116
+ <%= pb_rails("date", props: {alignment: "right", date: user[:start_date].to_s, show_current_year: true } ) %>
117
+ <% end %>
118
+ <% end %>
119
+ <% end %>
120
+ <% end %>
121
+ <% end %>
@@ -0,0 +1,17 @@
1
+ The `with_filter` variant also offers 2 additional optional props:
2
+
3
+ `card_props`: An object containing Card-specific props.
4
+ `title_props`: An object containing Title-specific props.
5
+
6
+ #### Default Card Props
7
+
8
+ The Table kit automatically sets these Card defaults (which you can override via `card_props`):
9
+
10
+ - `padding:"none"`
11
+
12
+ #### Default Title Props
13
+
14
+ The Table kit automatically sets these Title defaults (which you can override via `title_props`):
15
+
16
+ - `size:3`
17
+ - `paddingY:"md"`
@@ -41,7 +41,9 @@ examples:
41
41
  - table_with_header_style_borderless: Header Style Borderless
42
42
  - table_with_header_style_floating: Header Style Floating
43
43
  - table_with_filter_variant_rails: Variant with Filter
44
+ - table_with_filter_variant_external_filter_rails: Variant with Filter (External Filter)
44
45
  - table_with_filter_variant_with_pagination_rails: Variant with Filter and Pagination
46
+ - table_with_filter_with_card_title_props_rails: Variant with Filter (with Card and Title Props)
45
47
 
46
48
  react:
47
49
  - table_sm: Small
@@ -85,3 +87,4 @@ examples:
85
87
  - table_with_header_style_floating: Header Style Floating
86
88
  - table_with_filter_variant: Variant with Filter
87
89
  - table_with_filter_variant_with_pagination: Variant with Filter and Pagination
90
+ - table_with_filter_with_card_title_props: Variant with Filter (with Card and Title Props)
@@ -40,3 +40,4 @@ export { default as TableWithHeaderStyleBorderless } from './_table_with_header_
40
40
  export { default as TableWithHeaderStyleFloating } from './_table_with_header_style_floating.jsx'
41
41
  export { default as TableWithFilterVariant } from './_table_with_filter_variant.jsx'
42
42
  export { default as TableWithFilterVariantWithPagination } from './_table_with_filter_variant_with_pagination.jsx'
43
+ export { default as TableWithFilterWithCardTitleProps } from './_table_with_filter_with_card_title_props.jsx'
@@ -1,4 +1,3 @@
1
- /* eslint-disable react/no-danger */
2
1
  /* eslint-disable react/no-multi-comp */
3
2
 
4
3
  import React, { useState } from 'react'
@@ -38,14 +37,26 @@ const TypeaheadWithHighlight = (props) => {
38
37
  const [selectedUser, setSelectedUser] = useState()
39
38
 
40
39
  const formatOptionLabel = ({name, territory, title}, {inputValue}) => {
40
+ const escapeRegExp = (value = "") => (
41
+ value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
42
+ )
41
43
 
42
- const highlighted = (text) => {
44
+ const highlighted = (text = "") => {
43
45
  if (!inputValue.length) return text
44
- return text.replace(
45
- new RegExp(inputValue, 'gi'),
46
- (highlighted) => `<mark>${highlighted}</mark>`
47
- )
46
+
47
+ const escapedInputValue = escapeRegExp(inputValue)
48
+ const regex = new RegExp(`(${escapedInputValue})`, 'gi')
49
+ const parts = text.split(regex)
50
+
51
+ return parts.map((part, index) => {
52
+ if (part.toLowerCase() === inputValue.toLowerCase()) {
53
+ return <mark key={`${part}-${index}`}>{part}</mark>
54
+ }
55
+
56
+ return <React.Fragment key={`${part}-${index}`}>{part}</React.Fragment>
57
+ })
48
58
  }
59
+
49
60
  return (
50
61
  <Flex>
51
62
  <FlexItem>
@@ -61,11 +72,12 @@ const TypeaheadWithHighlight = (props) => {
61
72
  size={4}
62
73
  {...props}
63
74
  >
64
- <span dangerouslySetInnerHTML={{ __html: highlighted(name) }} /></Title>
75
+ {highlighted(name)}
76
+ </Title>
65
77
  <Body color="light"
66
78
  {...props}
67
79
  >
68
- <span dangerouslySetInnerHTML={{ __html: highlighted(title) }} />{" • "}
80
+ {highlighted(title)}{" • "}
69
81
  {territory}
70
82
  </Body>
71
83
  </FlexItem>
@@ -0,0 +1,3 @@
1
+ Use `formatOptionLabel` to customize each option row and highlight text that matches the current search input. Split each field (for example, `name` and `title`) by the typed value, then render matching parts inside `<mark>` so users can quickly see why a result matched.
2
+
3
+ See the code snippet below for more details.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: playbook_ui_docs
3
3
  version: !ruby/object:Gem::Version
4
- version: 16.3.0
4
+ version: 16.4.0.pre.alpha.PLAY2846reactadvancedtablecalcheaderpinnedrows15356
5
5
  platform: ruby
6
6
  authors:
7
7
  - Power UX
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2026-02-25 00:00:00.000000000 Z
12
+ date: 2026-03-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: playbook_ui
@@ -43,6 +43,8 @@ files:
43
43
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta_sort.md
44
44
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta_subrow_headers.html.erb
45
45
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta_subrow_headers.md
46
+ - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_cascade_collapse.jsx
47
+ - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_cascade_collapse.md
46
48
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_collapsible_trail.jsx
47
49
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_collapsible_trail.md
48
50
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_collapsible_trail_rails.html.erb
@@ -123,6 +125,8 @@ files:
123
125
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pagination_with_props.jsx
124
126
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pagination_with_props.md
125
127
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pinned_rows.jsx
128
+ - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pinned_rows_rails.html.erb
129
+ - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pinned_rows_rails.md
126
130
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pinned_rows_react.md
127
131
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_responsive.html.erb
128
132
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_responsive.jsx
@@ -153,6 +157,8 @@ files:
153
157
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort.md
154
158
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_control.jsx
155
159
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_control.md
160
+ - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_parent_only.jsx
161
+ - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_parent_only.md
156
162
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_per_column.jsx
157
163
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_per_column.md
158
164
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_per_column_for_multi_column.jsx
@@ -303,7 +309,8 @@ files:
303
309
  - app/pb_kits/playbook/pb_button/docs/_button_form.jsx
304
310
  - app/pb_kits/playbook/pb_button/docs/_button_full_width.html.erb
305
311
  - app/pb_kits/playbook/pb_button/docs/_button_full_width.jsx
306
- - app/pb_kits/playbook/pb_button/docs/_button_full_width.md
312
+ - app/pb_kits/playbook/pb_button/docs/_button_full_width_rails.md
313
+ - app/pb_kits/playbook/pb_button/docs/_button_full_width_react.md
307
314
  - app/pb_kits/playbook/pb_button/docs/_button_full_width_swift.md
308
315
  - app/pb_kits/playbook/pb_button/docs/_button_hover.html.erb
309
316
  - app/pb_kits/playbook/pb_button/docs/_button_hover.jsx
@@ -859,6 +866,10 @@ files:
859
866
  - app/pb_kits/playbook/pb_dropdown/docs/_dropdown_clear_selection.md
860
867
  - app/pb_kits/playbook/pb_dropdown/docs/_dropdown_closing_options.jsx
861
868
  - app/pb_kits/playbook/pb_dropdown/docs/_dropdown_closing_options.md
869
+ - app/pb_kits/playbook/pb_dropdown/docs/_dropdown_closing_options_rails.html.erb
870
+ - app/pb_kits/playbook/pb_dropdown/docs/_dropdown_closing_options_rails.md
871
+ - app/pb_kits/playbook/pb_dropdown/docs/_dropdown_custom_event_type.html.erb
872
+ - app/pb_kits/playbook/pb_dropdown/docs/_dropdown_custom_event_type.md
862
873
  - app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default.jsx
863
874
  - app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default.md
864
875
  - app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default_rails.html.erb
@@ -1049,6 +1060,10 @@ files:
1049
1060
  - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_multi_line.jsx
1050
1061
  - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_multi_line.md
1051
1062
  - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_multi_line_swift.md
1063
+ - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_nav_margin.html.erb
1064
+ - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_nav_margin.jsx
1065
+ - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_nav_margin_rails.md
1066
+ - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_nav_margin_react.md
1052
1067
  - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_no_icon.html.erb
1053
1068
  - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_no_icon.jsx
1054
1069
  - app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_no_icon.md
@@ -1447,6 +1462,9 @@ files:
1447
1462
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.html.erb
1448
1463
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.jsx
1449
1464
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.md
1465
+ - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_placeholder.html.erb
1466
+ - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_placeholder.jsx
1467
+ - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_placeholder.md
1450
1468
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_react_hook.jsx
1451
1469
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_react_hook.md
1452
1470
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_react_reset_key.jsx
@@ -1857,6 +1875,10 @@ files:
1857
1875
  - app/pb_kits/playbook/pb_popover/docs/_popover_list.html.erb
1858
1876
  - app/pb_kits/playbook/pb_popover/docs/_popover_list.jsx
1859
1877
  - app/pb_kits/playbook/pb_popover/docs/_popover_list.md
1878
+ - app/pb_kits/playbook/pb_popover/docs/_popover_placement.jsx
1879
+ - app/pb_kits/playbook/pb_popover/docs/_popover_placement_react.md
1880
+ - app/pb_kits/playbook/pb_popover/docs/_popover_position.html.erb
1881
+ - app/pb_kits/playbook/pb_popover/docs/_popover_position_rails.md
1860
1882
  - app/pb_kits/playbook/pb_popover/docs/_popover_scroll_height.html.erb
1861
1883
  - app/pb_kits/playbook/pb_popover/docs/_popover_scroll_height.jsx
1862
1884
  - app/pb_kits/playbook/pb_popover/docs/_popover_z_index.html.erb
@@ -1968,31 +1990,10 @@ files:
1968
1990
  - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_sticky.md
1969
1991
  - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_templates.jsx
1970
1992
  - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_templates.md
1971
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_attributes.html.erb
1972
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_attributes.jsx
1973
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_default.html.erb
1974
1993
  - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_default.jsx
1975
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_focus.html.erb
1976
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_focus.jsx
1977
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_inline.html.erb
1978
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_inline.jsx
1979
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_label.jsx
1980
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_label.md
1994
+ - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_default.md
1981
1995
  - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_more_extensions.jsx
1982
1996
  - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_more_extensions.md
1983
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_preview.html.erb
1984
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_preview.jsx
1985
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_required_indicator.html.erb
1986
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_required_indicator.jsx
1987
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_required_indicator.md
1988
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_simple.html.erb
1989
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_simple.jsx
1990
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_sticky.html.erb
1991
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_sticky.jsx
1992
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_templates.html.erb
1993
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_templates.jsx
1994
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_toolbar_bottom.html.erb
1995
- - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_toolbar_bottom.jsx
1996
1997
  - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_toolbar_disabled.jsx
1997
1998
  - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_toolbar_disabled.md
1998
1999
  - app/pb_kits/playbook/pb_rich_text_editor/docs/example.yml
@@ -2303,12 +2304,18 @@ files:
2303
2304
  - app/pb_kits/playbook/pb_table/docs/_table_with_dynamic_collapsible_react.md
2304
2305
  - app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant.jsx
2305
2306
  - app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant.md
2307
+ - app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_external_filter_rails.html.erb
2308
+ - app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_external_filter_rails.md
2306
2309
  - app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_rails.html.erb
2307
2310
  - app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_rails.md
2308
2311
  - app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination.jsx
2309
2312
  - app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination.md
2310
2313
  - app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination_rails.html.erb
2311
2314
  - app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination_rails.md
2315
+ - app/pb_kits/playbook/pb_table/docs/_table_with_filter_with_card_title_props.jsx
2316
+ - app/pb_kits/playbook/pb_table/docs/_table_with_filter_with_card_title_props.md
2317
+ - app/pb_kits/playbook/pb_table/docs/_table_with_filter_with_card_title_props_rails.html.erb
2318
+ - app/pb_kits/playbook/pb_table/docs/_table_with_filter_with_card_title_props_rails.md
2312
2319
  - app/pb_kits/playbook/pb_table/docs/_table_with_header_style_borderless.html.erb
2313
2320
  - app/pb_kits/playbook/pb_table/docs/_table_with_header_style_borderless.jsx
2314
2321
  - app/pb_kits/playbook/pb_table/docs/_table_with_header_style_borderless_rails.md
@@ -2655,6 +2662,7 @@ files:
2655
2662
  - app/pb_kits/playbook/pb_typeahead/docs/_typeahead_truncated_text.md
2656
2663
  - app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_context.html.erb
2657
2664
  - app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_highlight.jsx
2665
+ - app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_highlight.md
2658
2666
  - app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.html.erb
2659
2667
  - app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.jsx
2660
2668
  - app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.md
@@ -1 +0,0 @@
1
- This button is used many times for mobile or other things like cards and sidebars.
@@ -1,5 +0,0 @@
1
- <%= pb_rails("rich_text_editor", props: {
2
- aria: { label: "rich-textarea" },
3
- data: { key: "value", key2: "value2" },
4
- name: "textarea-label",
5
- }) %>
@@ -1,15 +0,0 @@
1
- import React from 'react'
2
- import RichTextEditor from '../../pb_rich_text_editor/_rich_text_editor'
3
-
4
- const RichTextEditorAttributes = (props) => (
5
- <div>
6
- <RichTextEditor
7
- aria={{ label: 'rich textarea' }}
8
- data={{ key: 'value', key2: 'value2' }}
9
- name="name-attribute"
10
- {...props}
11
- />
12
- </div>
13
- )
14
-
15
- export default RichTextEditorAttributes
@@ -1 +0,0 @@
1
- <%= pb_rails("rich_text_editor", props: {input_options: { id: 'hidden_input_id', name: "hidden_input_name" }, value: "Add your text here. You can format your text, add links, quotes, and bullets."}) %>
@@ -1,3 +0,0 @@
1
- <%= pb_rails("rich_text_editor", props: {focus: true}) %>
2
- <br>
3
- <%= pb_rails("rich_text_editor", props: {focus: true}) %>
@@ -1,17 +0,0 @@
1
- import React from 'react'
2
- import RichTextEditor from '../../pb_rich_text_editor/_rich_text_editor'
3
-
4
- const RichTextEditorFocus = (props) => (
5
- <>
6
- <RichTextEditor
7
- focus
8
- {...props}
9
- />
10
- <br />
11
- <RichTextEditor
12
- focus
13
- {...props}
14
- />
15
- </>
16
- )
17
- export default RichTextEditorFocus
@@ -1,6 +0,0 @@
1
- <%= pb_rails("rich_text_editor", props: {
2
- id: "inline",
3
- inline: true,
4
- toolbar_bottom: true,
5
- value: "Try hovering over this text. Then try modifying it or adding more of your own text."
6
- }) %>
@@ -1,16 +0,0 @@
1
- import React from 'react'
2
- import RichTextEditor from '../../pb_rich_text_editor/_rich_text_editor'
3
-
4
- const RichTextEditorInline = (props) => (
5
- <div>
6
- <RichTextEditor
7
- id="inline"
8
- inline
9
- toolbarBottom
10
- value="Try hovering over this text. Then try modifying it or adding more of your own text."
11
- {...props}
12
- />
13
- </div>
14
- )
15
-
16
- export default RichTextEditorInline