playbook_ui 15.6.0.pre.alpha.play263913015 → 15.6.0.pre.alpha.play265012865

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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_bar_graph/_bar_graph.tsx +6 -0
  3. data/app/pb_kits/playbook/pb_card/docs/_card_header.md +1 -1
  4. data/app/pb_kits/playbook/pb_card/docs/_card_highlight.md +1 -1
  5. data/app/pb_kits/playbook/pb_collapsible/__snapshots__/collapsible.test.js.snap +2 -2
  6. data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleIcon.tsx +8 -10
  7. data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_icons.jsx +1 -0
  8. data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_state.jsx +3 -0
  9. data/app/pb_kits/playbook/pb_date_picker/date_picker.test.js +0 -24
  10. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +3 -181
  11. data/app/pb_kits/playbook/pb_distribution_bar/docs/_distribution_bar_custom_colors.md +1 -1
  12. data/app/pb_kits/playbook/pb_draggable/context/index.tsx +15 -316
  13. data/app/pb_kits/playbook/pb_draggable/context/types.ts +1 -1
  14. data/app/pb_kits/playbook/pb_filter/Filter/FilterBackground.tsx +3 -3
  15. data/app/pb_kits/playbook/pb_legend/_legend.tsx +7 -1
  16. data/app/pb_kits/playbook/pb_radio/docs/_radio_error.md +1 -1
  17. data/app/pb_kits/playbook/pb_select/_select.tsx +3 -8
  18. data/app/pb_kits/playbook/pb_select/docs/_select_error.md +1 -1
  19. data/app/pb_kits/playbook/pb_select/docs/example.yml +0 -2
  20. data/app/pb_kits/playbook/pb_select/docs/index.js +0 -1
  21. data/app/pb_kits/playbook/pb_select/select.html.erb +2 -2
  22. data/app/pb_kits/playbook/pb_select/select.rb +1 -3
  23. data/app/pb_kits/playbook/pb_select/select.test.js +0 -23
  24. data/app/pb_kits/playbook/pb_table/_table.tsx +33 -187
  25. data/app/pb_kits/playbook/pb_table/docs/example.yml +0 -4
  26. data/app/pb_kits/playbook/pb_table/docs/index.js +0 -2
  27. data/app/pb_kits/playbook/pb_table/table.html.erb +12 -68
  28. data/app/pb_kits/playbook/pb_table/table.rb +3 -22
  29. data/app/pb_kits/playbook/pb_table/table.test.js +0 -143
  30. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_error.md +1 -1
  31. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_error.md +1 -1
  32. data/app/pb_kits/playbook/tokens/_colors.scss +1 -2
  33. data/app/pb_kits/playbook/utilities/DEPRECATION_WARNINGS.md +82 -0
  34. data/app/pb_kits/playbook/utilities/deprecated.ts +65 -0
  35. data/dist/chunks/_typeahead-Mjy3POtc.js +6 -0
  36. data/dist/chunks/lib-CgpqUb6l.js +29 -0
  37. data/dist/chunks/vendor.js +2 -2
  38. data/dist/menu.yml +3 -2
  39. data/dist/playbook-rails-react-bindings.js +1 -1
  40. data/dist/playbook-rails.js +1 -1
  41. data/dist/playbook.css +1 -1
  42. data/lib/playbook/forms/builder/collection_select_field.rb +1 -9
  43. data/lib/playbook/forms/builder/select_field.rb +1 -9
  44. data/lib/playbook/forms/builder/time_zone_select_field.rb +1 -9
  45. data/lib/playbook/version.rb +1 -1
  46. metadata +6 -15
  47. data/app/pb_kits/playbook/pb_select/docs/_select_input_options.html.erb +0 -16
  48. data/app/pb_kits/playbook/pb_select/docs/_select_input_options.jsx +0 -30
  49. data/app/pb_kits/playbook/pb_select/docs/_select_input_options.md +0 -1
  50. data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant.jsx +0 -134
  51. data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant.md +0 -34
  52. data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_rails.html.erb +0 -101
  53. data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_rails.md +0 -33
  54. data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination.jsx +0 -180
  55. data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination.md +0 -3
  56. data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination_rails.html.erb +0 -122
  57. data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination_rails.md +0 -3
  58. data/dist/chunks/_typeahead-CHwm9MTE.js +0 -6
  59. data/dist/chunks/lib-Cugvy62C.js +0 -29
@@ -4,18 +4,10 @@ module Playbook
4
4
  module Forms
5
5
  class Builder
6
6
  def collection_select(name, collection, value_method, text_method, options = {}, html_options = {}, props: {})
7
- props[:input_options] ||= {}
8
- props[:input_options][:id] ||= "#{@object_name}_#{name}"
9
-
10
- props[:label] = @template.label(@object_name, name, for: props[:input_options][:id]) if props[:label] == true
11
-
7
+ props[:label] = @template.label(@object_name, name) if props[:label] == true
12
8
  options[:skip_default_ids] = false unless options.key?(:skip_default_ids)
13
9
  options[:prompt] = props[:blank_selection] || ""
14
10
  html_options[:required] = "required" if props[:required]
15
- html_options[:id] = props[:input_options][:id]
16
- html_options[:class] = props[:input_options][:class] if props[:input_options][:class]
17
- html_options[:data] = (html_options[:data] || {}).merge(props[:input_options][:data] || {})
18
-
19
11
  input = super(name, collection, value_method, text_method, options, html_options)
20
12
 
21
13
  @template.pb_rails("select", props: props) do
@@ -4,18 +4,10 @@ module Playbook
4
4
  module Forms
5
5
  class Builder
6
6
  def select(name, choices = nil, options = {}, html_options = {}, props: {}, &block)
7
- props[:input_options] ||= {}
8
- props[:input_options][:id] ||= "#{@object_name}_#{name}"
9
-
10
- props[:label] = @template.label(@object_name, name, for: props[:input_options][:id]) if props[:label] == true
11
-
7
+ props[:label] = @template.label(@object_name, name) if props[:label] == true
12
8
  options[:skip_default_ids] = false unless options.key?(:skip_default_ids)
13
9
  options[:prompt] = props[:blank_selection] || ""
14
10
  html_options[:required] = "required" if props[:required]
15
- html_options[:id] = props[:input_options][:id]
16
- html_options[:class] = props[:input_options][:class] if props[:input_options][:class]
17
- html_options[:data] = (html_options[:data] || {}).merge(props[:input_options][:data] || {})
18
-
19
11
  input = super(name, choices, options, html_options, &block)
20
12
 
21
13
  @template.pb_rails("select", props: props) do
@@ -4,18 +4,10 @@ module Playbook
4
4
  module Forms
5
5
  class Builder
6
6
  def time_zone_select_field(name, choices = {}, options = {}, html_options = {}, props: {})
7
- props[:input_options] ||= {}
8
- props[:input_options][:id] ||= "#{@object_name}_#{name}"
9
-
10
- props[:label] = @template.label(@object_name, name, for: props[:input_options][:id]) if props[:label] == true
11
-
7
+ props[:label] = @template.label(@object_name, name) if props[:label] == true
12
8
  options[:skip_default_ids] = false unless options.key?(:skip_default_ids)
13
9
  options[:prompt] = props[:blank_selection] || ""
14
10
  html_options[:required] = "required" if props[:required]
15
- html_options[:id] = props[:input_options][:id]
16
- html_options[:class] = props[:input_options][:class] if props[:input_options][:class]
17
- html_options[:data] = (html_options[:data] || {}).merge(props[:input_options][:data] || {})
18
-
19
11
  input = @template.time_zone_select(@object_name, name, choices, options, html_options)
20
12
 
21
13
  @template.pb_rails("select", props: props) do
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Playbook
4
4
  PREVIOUS_VERSION = "15.6.0"
5
- VERSION = "15.6.0.pre.alpha.play263913015"
5
+ VERSION = "15.6.0.pre.alpha.play265012865"
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: playbook_ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 15.6.0.pre.alpha.play263913015
4
+ version: 15.6.0.pre.alpha.play265012865
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: 2025-12-11 00:00:00.000000000 Z
12
+ date: 2025-12-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -2935,9 +2935,6 @@ files:
2935
2935
  - app/pb_kits/playbook/pb_select/docs/_select_inline_compact.jsx
2936
2936
  - app/pb_kits/playbook/pb_select/docs/_select_inline_show_arrow.html.erb
2937
2937
  - app/pb_kits/playbook/pb_select/docs/_select_inline_show_arrow.jsx
2938
- - app/pb_kits/playbook/pb_select/docs/_select_input_options.html.erb
2939
- - app/pb_kits/playbook/pb_select/docs/_select_input_options.jsx
2940
- - app/pb_kits/playbook/pb_select/docs/_select_input_options.md
2941
2938
  - app/pb_kits/playbook/pb_select/docs/_select_multiple.html.erb
2942
2939
  - app/pb_kits/playbook/pb_select/docs/_select_multiple.jsx
2943
2940
  - app/pb_kits/playbook/pb_select/docs/_select_multiple.md
@@ -3245,14 +3242,6 @@ files:
3245
3242
  - app/pb_kits/playbook/pb_table/docs/_table_with_dynamic_collapsible.jsx
3246
3243
  - app/pb_kits/playbook/pb_table/docs/_table_with_dynamic_collapsible_rails.md
3247
3244
  - app/pb_kits/playbook/pb_table/docs/_table_with_dynamic_collapsible_react.md
3248
- - app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant.jsx
3249
- - app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant.md
3250
- - app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_rails.html.erb
3251
- - app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_rails.md
3252
- - app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination.jsx
3253
- - app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination.md
3254
- - app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination_rails.html.erb
3255
- - app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination_rails.md
3256
3245
  - app/pb_kits/playbook/pb_table/docs/_table_with_header_style_borderless.html.erb
3257
3246
  - app/pb_kits/playbook/pb_table/docs/_table_with_header_style_borderless.jsx
3258
3247
  - app/pb_kits/playbook/pb_table/docs/_table_with_header_style_borderless_rails.md
@@ -3810,6 +3799,7 @@ files:
3810
3799
  - app/pb_kits/playbook/tokens/exports/_typography.module.scss
3811
3800
  - app/pb_kits/playbook/tokens/exports/exports.d.ts
3812
3801
  - app/pb_kits/playbook/tokens/index.scss
3802
+ - app/pb_kits/playbook/utilities/DEPRECATION_WARNINGS.md
3813
3803
  - app/pb_kits/playbook/utilities/_background_colors.scss
3814
3804
  - app/pb_kits/playbook/utilities/_border_radius.scss
3815
3805
  - app/pb_kits/playbook/utilities/_colors.scss
@@ -3833,6 +3823,7 @@ files:
3833
3823
  - app/pb_kits/playbook/utilities/_truncate.scss
3834
3824
  - app/pb_kits/playbook/utilities/_vertical_align.scss
3835
3825
  - app/pb_kits/playbook/utilities/_width.scss
3826
+ - app/pb_kits/playbook/utilities/deprecated.ts
3836
3827
  - app/pb_kits/playbook/utilities/flexbox_global_props/_align_content.scss
3837
3828
  - app/pb_kits/playbook/utilities/flexbox_global_props/_align_items.scss
3838
3829
  - app/pb_kits/playbook/utilities/flexbox_global_props/_align_self.scss
@@ -3872,9 +3863,9 @@ files:
3872
3863
  - app/pb_kits/playbook/utilities/test/globalProps/truncate.test.js
3873
3864
  - app/pb_kits/playbook/utilities/text.ts
3874
3865
  - app/pb_kits/playbook/utilities/validEmojiChecker.ts
3875
- - dist/chunks/_typeahead-CHwm9MTE.js
3866
+ - dist/chunks/_typeahead-Mjy3POtc.js
3876
3867
  - dist/chunks/lazysizes-B7xYodB-.js
3877
- - dist/chunks/lib-Cugvy62C.js
3868
+ - dist/chunks/lib-CgpqUb6l.js
3878
3869
  - dist/chunks/vendor.js
3879
3870
  - dist/menu.yml
3880
3871
  - dist/playbook-rails-react-bindings.js
@@ -1,16 +0,0 @@
1
- <%= pb_rails("select", props: {
2
- label: "Favorite Food",
3
- name: "favorite_food",
4
- options: [
5
- { value: "pizza", value_text: "Pizza" },
6
- { value: "tacos", value_text: "Tacos" },
7
- { value: "sushi", value_text: "Sushi" }
8
- ],
9
- input_options: {
10
- 'aria-label': "Select your favorite food",
11
- class: "custom-select-class",
12
- data: { controller: "search", action: "change->search#filter" },
13
- id: "favorite-food-select"
14
- }
15
- }) %>
16
-
@@ -1,30 +0,0 @@
1
- import React from 'react'
2
-
3
- import Select from '../_select'
4
-
5
- const SelectInputOptions = (props) => {
6
- const options = [
7
- { value: 'pizza', text: 'Pizza' },
8
- { value: 'tacos', text: 'Tacos' },
9
- { value: 'sushi', text: 'Sushi' },
10
- ]
11
-
12
- return (
13
- <>
14
- <Select
15
- inputOptions={{
16
- 'aria-label': 'Select your favorite food',
17
- className: 'custom-select-class',
18
- id: 'favorite-food-select',
19
- }}
20
- label="Favorite Food"
21
- name="favorite_food"
22
- options={options}
23
- {...props}
24
- />
25
- </>
26
- )
27
- }
28
-
29
- export default SelectInputOptions
30
-
@@ -1 +0,0 @@
1
- Use the `input_options` / `inputOptions` prop to pass additional attributes directly to the underlying `<select>` element instead of the outer wrapper. This is useful for applying data attributes, custom IDs, or other HTML attributes that need to be on the select element itself.
@@ -1,134 +0,0 @@
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 TableWithFilterVariant = () => {
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
- filterContent={filterContent}
82
- filterProps={{
83
- results: 50,
84
- sortOptions: {
85
- territory_id: "Territory ID",
86
- first_name: "Name",
87
- started_on: "Start Date",
88
- department_name: "Department",
89
- title_name: "Title",
90
- branch_branch_name: "Branch",
91
- },
92
- sortValue: [{ name: 'started_on', dir: 'asc' }],
93
- }}
94
- title="Table Title Here"
95
- variant="withFilter"
96
- >
97
- <Table.Head>
98
- <Table.Row>
99
- <Table.Header>{'Territory ID'}</Table.Header>
100
- <Table.Header>{'Name'}</Table.Header>
101
- <Table.Header>{'Title'}</Table.Header>
102
- <Table.Header>{'Department'}</Table.Header>
103
- <Table.Header>{'Branch'}</Table.Header>
104
- <Table.Header textAlign="right">{'Start Date'}</Table.Header>
105
- </Table.Row>
106
- </Table.Head>
107
- <Table.Body>
108
- {users.map((user) => (
109
- <Table.Row key={user.id}>
110
- <Table.Cell
111
- marginX={{ xs: "sm" }}
112
- numberSpacing="tabular"
113
- >
114
- {user.id}
115
- </Table.Cell>
116
- <Table.Cell marginX={{ xs: "sm" }}>{user.name}</Table.Cell>
117
- <Table.Cell marginX={{ xs: "sm" }}>{user.title}</Table.Cell>
118
- <Table.Cell marginX={{ xs: "sm" }}>{user.department}</Table.Cell>
119
- <Table.Cell marginX={{ xs: "sm" }}>{user.branch}</Table.Cell>
120
- <Table.Cell marginX={{ xs: "sm" }}>
121
- <DateKit
122
- alignment="right"
123
- showCurrentYear
124
- value={user.startDate}
125
- />
126
- </Table.Cell>
127
- </Table.Row>
128
- ))}
129
- </Table.Body>
130
- </Table>
131
- )
132
- }
133
-
134
- export default TableWithFilterVariant
@@ -1,34 +0,0 @@
1
- Set the `variant` prop to `withFilter` to render a Table with a filter. The variant automatically handles:
2
-
3
- - Card wrapper with standard responsive margins
4
- - Optional `title` prop to render title above the card
5
- - Filter component rendering with Design defaults
6
- - SectionSeparator between filter and table
7
- - Flex layout for proper alignment
8
-
9
- #### Required Props
10
-
11
- - `variant="withFilter"`: Enables the filter variant
12
- - `filterContent`: A function that receives `{ closePopover }` and returns the filter's body content (inputs, buttons, etc.). Use this to pass in all input kits, etc needed inside the Filter itself.
13
- - `filterProps`: An object containing Filter-specific props like `results`, `sortOptions`, `sortValue`, etc.
14
-
15
- #### Optional Props
16
-
17
- - `title`: Displays a title above the card
18
- - All standard Table props (`size`, `collapse`, etc.) can be used, but defaults are already set to match Design guidelines
19
- - All standard Filter props can be used, but defaults are already set to match Design guidelines.
20
-
21
- #### Default Filter Props
22
-
23
- The Table kit automatically sets these Filter defaults (which you can override via `filterProps`):
24
-
25
- - `background={false}`
26
- - `maxHeight="50vh"`
27
- - `minWidth="xs"`
28
- - `popoverProps={{ width: "350px" }}`
29
-
30
-
31
- **IMPORTANT NOTE**:
32
- The purpose of this variant is to provide an easy way to set up a Table with a Filter with Design standards applied by default.
33
-
34
- If you are looking for more customization than this embedded variant provides, you may be better served by using the individual kits as demonstrated in our Table Filter Card Building Block [here](https://playbook.powerapp.cloud/building_blocks/table_filter_card/react).
@@ -1,101 +0,0 @@
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
- variant: "with_filter",
61
- title: "Table Title Here",
62
- filter_content: filter_content,
63
- filter_props: {
64
- id: "user-table-filters-1",
65
- results: 9,
66
- sort_menu: [
67
- { item: "Start Date", link: "?q[sorts]=started_on+asc", active: true, direction: "asc" },
68
- { item: "First Name", link: "?q[sorts]=name+asc", active: false },
69
- { item: "Title", link: "?q[sorts]=title+asc", active: false },
70
- { item: "Department", link: "?q[sorts]=department+asc", active: false },
71
- { item: "Branch", link: "?q[sorts]=branch+asc", active: false },
72
- { item: "Territory ID", link: "?q[sorts]=territory_id+asc", active: false },
73
- ],
74
- }
75
- }) do %>
76
- <%= pb_rails("table/table_head") do %>
77
- <%= pb_rails("table/table_row") do %>
78
- <%= pb_rails("table/table_header", props: { text: "Territory ID" }) %>
79
- <%= pb_rails("table/table_header", props: { text: "Name" }) %>
80
- <%= pb_rails("table/table_header", props: { text: "Title" }) %>
81
- <%= pb_rails("table/table_header", props: { text: "Department" }) %>
82
- <%= pb_rails("table/table_header", props: { text: "Branch" }) %>
83
- <%= pb_rails("table/table_header", props: { text: "Start Date", text_align: "right" }) %>
84
- <% end %>
85
- <% end %>
86
-
87
- <%= pb_rails("table/table_body") do %>
88
- <% users.each do |user| %>
89
- <%= pb_rails("table/table_row") do %>
90
- <%= pb_rails("table/table_cell", props: { margin_x: { xs: "sm" }, number_spacing: "tabular" }) { user[:id].to_s } %>
91
- <%= pb_rails("table/table_cell", props: { margin_x: { xs: "sm" } }) { user[:name] } %>
92
- <%= pb_rails("table/table_cell", props: { margin_x: { xs: "sm" } }) { user[:title] } %>
93
- <%= pb_rails("table/table_cell", props: { margin_x: { xs: "sm" } }) { user[:department] } %>
94
- <%= pb_rails("table/table_cell", props: { margin_x: { xs: "sm" } }) { user[:branch] } %>
95
- <%= pb_rails("table/table_cell", props: { margin_x: { xs: "sm" } }) do %>
96
- <%= pb_rails("date", props: {alignment: "right", date: user[:start_date].to_s, show_current_year: true } ) %>
97
- <% end %>
98
- <% end %>
99
- <% end %>
100
- <% end %>
101
- <% end %>
@@ -1,33 +0,0 @@
1
- Set the `variant` prop to `with_filter` to render a Table with a filter. The variant automatically handles:
2
-
3
- - Card wrapper with standard responsive margins
4
- - Optional `title` prop to render title above the card
5
- - Filter component rendering with Design defaults
6
- - SectionSeparator between filter and table
7
- - Flex layout for proper alignment
8
-
9
- #### Required Props
10
-
11
- - `variant: "with_filter"`: Enables the filter variant
12
- - `filter_content`: The filter's body content (inputs, buttons, etc.) built with `pb_rails` string concatenation
13
- - `filter_props`: A hash containing Filter-specific props like `results`, `sort_menu`, etc.
14
-
15
- #### Optional Props
16
-
17
- - `title`: Displays a title above the card
18
- - All standard Table props (`size`, `collapse`, etc.) can be used, but defaults are already set to match Design guidelines
19
-
20
- #### Default Filter Props
21
-
22
- The Table kit automatically sets these Filter defaults (which you can override via `filter_props`):
23
-
24
- - `background: false`
25
- - `max_height: "50vh"`
26
- - `min_width: "xs"`
27
- - `popover_props: { width: "350px" }`
28
-
29
-
30
- **IMPORTANT NOTE**:
31
- The purpose of this variant is to provide an easy way to set up a Table with a Filter with Design standards applied by default.
32
-
33
- If you are looking for more customization than this embedded variant provides, you may be better served by using the individual kits as demonstrating in our Table Filter Card Building Block as seen [here](https://playbook.powerapp.cloud/building_blocks/table_filter_card/rails).