playbook_ui_docs 16.1.0.pre.alpha.play276813969 → 16.1.0.pre.alpha.play277814027

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 (23) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background_custom.jsx +71 -0
  3. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background_custom.md +4 -0
  4. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +1 -0
  5. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +2 -1
  6. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.md +1 -0
  7. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_label.html.erb +3 -6
  8. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_label.jsx +0 -1
  9. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_label.md +1 -3
  10. data/app/pb_kits/playbook/pb_form/docs/_form_with_required_indicator.html.erb +1 -0
  11. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.html.erb +3 -3
  12. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.jsx +7 -4
  13. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_default.html.erb +3 -3
  14. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_default.jsx +3 -0
  15. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_default.md +1 -0
  16. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_on_handler.jsx +5 -2
  17. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_required_indicator.html.erb +6 -0
  18. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_required_indicator.jsx +16 -0
  19. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_required_indicator.md +3 -0
  20. data/app/pb_kits/playbook/pb_time_picker/docs/example.yml +2 -0
  21. data/app/pb_kits/playbook/pb_time_picker/docs/index.js +1 -0
  22. metadata +9 -3
  23. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.md +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 11d0012d77869d1845690030b1b4cc5fc0c7855c2df99c66ce27b329ba3fa395
4
- data.tar.gz: 960f2773df91b8b89776f90e4de1b2d1cab417ed6ccb3b4f5d94fc69d4c35354
3
+ metadata.gz: 43f7d11b6833e9d85b5d4a595f5217ea6d98de29164345f41e2fbdd768851a82
4
+ data.tar.gz: 5a1d93a5ddb391158a1552eeb5d736d7e305d381624eed5201ee8449e11fa4a5
5
5
  SHA512:
6
- metadata.gz: 779a96546ec7a33099f60c1b57a61b73015a6b26315ec742728e6cf547e503f7daf691d1c33282bdad6b9e3c84c357dd07d06ab752b847a46c8c76ea2f5d02dc
7
- data.tar.gz: 3f76deb202a605fc9b7f8bf882aad34cfea3877886917570105fca81147abb3d42721e20e750e7fd79943272cc5d91bc6021cb66a1fc3300cc634ed5d746b6a0
6
+ metadata.gz: 455ed90c00a6ca16af00f7ad78ce9265cf1d5014c84bc737a37b10189d2cd3b554938d78ba0cceec469c23db3c07a1f94af725369fc65bf773e6dfba49dd728b
7
+ data.tar.gz: 7083d22a67bc730c855ee8fbfa8bb93cded87249da657b57869154d3f9d52bf2fedbc9436906bc0f679a66d4639be4a4444fe6e6dbd68095986ac2f0a4f1fefe
@@ -0,0 +1,71 @@
1
+ import React from "react"
2
+ import AdvancedTable from '../_advanced_table'
3
+ import colors from '../../tokens/exports/_colors.module.scss'
4
+ import MOCK_DATA from "./advanced_table_mock_data.json"
5
+ import Flex from '../../pb_flex/_flex'
6
+ import Title from '../../pb_title/_title'
7
+ import Body from '../../pb_body/_body'
8
+
9
+
10
+ const AdvancedTableColumnStylingBackgroundCustom = (props) => {
11
+ const columnDefinitions = [
12
+ {
13
+ accessor: "year",
14
+ label: "Year",
15
+ cellAccessors: ["quarter", "month", "day"],
16
+ customRenderer: (row, value) => (
17
+ <Flex flexDirection="column">
18
+ <Title size={4}
19
+ text={value}
20
+ />
21
+ <Body text="lorem ipsum" />
22
+ <Body text="lorem ipsum" />
23
+ </Flex>
24
+ ),
25
+ },
26
+ {
27
+ accessor: "newEnrollments",
28
+ label: "New Enrollments",
29
+ columnStyling:{
30
+ cellBackgroundColor: (row) => row.original.newEnrollments > 15 ? colors.success_subtle : colors.error_subtle,
31
+ fontColor: (row) => row.original.newEnrollments > 15 ? colors.success : colors.error,
32
+ },
33
+ },
34
+ {
35
+ accessor: "scheduledMeetings",
36
+ label: "Scheduled Meetings",
37
+ columnStyling:{
38
+ cellBackgroundColor: (row) => row.original.scheduledMeetings >= 15 ? colors.info_subtle : colors.warning_subtle
39
+ },
40
+ },
41
+ {
42
+ accessor: "attendanceRate",
43
+ label: "Attendance Rate",
44
+ columnStyling:{cellBackgroundColor: colors.info, headerBackgroundColor: colors.info, fontColor: colors.white, headerFontColor: colors.white},
45
+ },
46
+ {
47
+ accessor: "completedClasses",
48
+ label: "Completed Classes",
49
+ },
50
+ {
51
+ accessor: "classCompletionRate",
52
+ label: "Class Completion Rate",
53
+ },
54
+ {
55
+ accessor: "graduatedStudents",
56
+ label: "Graduated Students",
57
+ },
58
+ ]
59
+
60
+ return (
61
+ <div>
62
+ <AdvancedTable
63
+ columnDefinitions={columnDefinitions}
64
+ tableData={MOCK_DATA}
65
+ {...props}
66
+ />
67
+ </div>
68
+ )
69
+ }
70
+
71
+ export default AdvancedTableColumnStylingBackgroundCustom
@@ -0,0 +1,4 @@
1
+ `cellBackgroundColor` and `fontColor` can also accept functions for conditional styling based on row data. The function receives the row object and returns a color value.
2
+
3
+ See the code snippet below for more details.
4
+
@@ -78,6 +78,7 @@ examples:
78
78
  - advanced_table_column_styling: Column Styling
79
79
  - advanced_table_column_styling_column_headers: Column Styling with Multiple Headers
80
80
  - advanced_table_column_styling_background: Column Styling Background Color
81
+ - advanced_table_column_styling_background_custom: Column Styling Background Color (Custom)
81
82
  - advanced_table_column_styling_background_multi: Column Styling Background Color with Multiple Headers
82
83
  - advanced_table_padding_control: Padding Control using Column Styling
83
84
  - advanced_table_column_border_color: Column Group Border Color
@@ -47,4 +47,5 @@ export { default as AdvancedTableSortPerColumnForMultiColumn } from './_advanced
47
47
  export { default as AdvancedTablePaddingControl } from './_advanced_table_padding_control.jsx'
48
48
  export { default as AdvancedTablePaddingControlPerRow } from './_advanced_table_padding_control_per_row.jsx'
49
49
  export { default as AdvancedTableColumnStylingBackground } from './_advanced_table_column_styling_background.jsx'
50
- export { default as AdvancedTableColumnStylingBackgroundMulti } from './_advanced_table_column_styling_background_multi.jsx'
50
+ export { default as AdvancedTableColumnStylingBackgroundMulti } from './_advanced_table_column_styling_background_multi.jsx'
51
+ export { default as AdvancedTableColumnStylingBackgroundCustom } from './_advanced_table_column_styling_background_custom.jsx'
@@ -0,0 +1 @@
1
+ `pickerId`/`picker_id` is a **required prop** to instantiate the Date Picker. The presence of `pickerId`/`picker_id` in your Date Picker also associates the label with the input, providing the ability to focus the Date Picker by clicking the label.
@@ -1,13 +1,10 @@
1
- <%
1
+ <%
2
2
  options = [
3
3
  { label: 'United States', value: 'unitedStates', id: 'us' },
4
4
  { label: 'Canada', value: 'canada', id: 'ca' },
5
5
  { label: 'Pakistan', value: 'pakistan', id: 'pk' },
6
6
  ]
7
+
7
8
  %>
8
9
 
9
- <%= pb_rails("dropdown", props: {
10
- id: "select_a_country",
11
- label: "Select a Country",
12
- options: options
13
- }) %>
10
+ <%= pb_rails("dropdown", props: {options: options, label: "Select a Country"}) %>
@@ -25,7 +25,6 @@ const DropdownDefault = (props) => {
25
25
  return (
26
26
  <div>
27
27
  <Dropdown
28
- id="select_a_country"
29
28
  label="Select a Country"
30
29
  options={options}
31
30
  {...props}
@@ -1,3 +1 @@
1
- The top-level Dropdown component optionally accepts any string through a `label` prop to produce a label above your trigger element.
2
-
3
- Add an `id` to wire the label to the trigger so that clicking the label will move focus directly to the input, and open the drop-down.
1
+ The top-level Dropdown component optionally accepts any string through a `label` prop to produce a label above your trigger element.
@@ -9,6 +9,7 @@
9
9
  <%= form.password_field :example_password_field, props: { label: true, required: true, required_indicator: true } %>
10
10
  <%= form.url_field :example_url_field, props: { label: true, required: true, required_indicator: true } %>
11
11
  <%= form.phone_number_field :example_phone_number_field, props: { label: true, required: true, required_indicator: true } %>
12
+ <%= form.time_picker :example_time_picker_required_indicator, props: { label: true, required: true, required_indicator: true } %>
12
13
 
13
14
  <%= form.actions do |action| %>
14
15
  <%= action.submit %>
@@ -65,7 +65,7 @@
65
65
  }] %>
66
66
 
67
67
  <%= pb_rails("multi_level_select", props: {
68
- id: "select_a_department",
69
- label: "Select a Department",
70
- tree_data: treeData
68
+ id: "multi-level-select-label-rails",
69
+ label: "Select a department",
70
+ tree_data: treeData
71
71
  }) %>
@@ -73,11 +73,14 @@ const MultiLevelSelectDefault = (props) => {
73
73
  return (
74
74
  <div>
75
75
  <MultiLevelSelect
76
- id="select_a_department"
76
+ id='multiselect-label'
77
77
  label="Select a Department"
78
78
  onSelect={(selectedNodes) =>
79
- console.log("Selected Items", selectedNodes)
80
- }
79
+ console.log(
80
+ "Selected Items",
81
+ selectedNodes
82
+ )
83
+ }
81
84
  treeData={treeData}
82
85
  {...props}
83
86
  />
@@ -85,4 +88,4 @@ const MultiLevelSelectDefault = (props) => {
85
88
  )
86
89
  };
87
90
 
88
- export default MultiLevelSelectDefault;
91
+ export default MultiLevelSelectDefault;
@@ -1,9 +1,9 @@
1
- <%= pb_rails("textarea", props: { label: "Label", rows: 4}) %>
1
+ <%= pb_rails("textarea", props: { label: "Label", rows: 4, id: "default-example-1" }) %>
2
2
 
3
3
  <br/>
4
4
 
5
- <%= pb_rails("textarea", props: { label: "Label", placeholder: "Placeholder text" }) %>
5
+ <%= pb_rails("textarea", props: { label: "Label", placeholder: "Placeholder text", id: "default-example-2" }) %>
6
6
 
7
7
  <br/>
8
8
 
9
- <%= pb_rails("textarea", props: { label: "Label", name: "comment", value: "Default value text" }) %>
9
+ <%= pb_rails("textarea", props: { label: "Label", name: "comment", value: "Default value text", id: "default-example-3" }) %>
@@ -13,6 +13,7 @@ const TextareaDefault = (props) => {
13
13
  label="Label"
14
14
  rows={4}
15
15
  {...props}
16
+ id="default-example-1"
16
17
  />
17
18
 
18
19
  <br />
@@ -21,6 +22,7 @@ const TextareaDefault = (props) => {
21
22
  label="Label"
22
23
  placeholder="Placeholder text"
23
24
  {...props}
25
+ id="default-example-2"
24
26
  />
25
27
 
26
28
  <br />
@@ -32,6 +34,7 @@ const TextareaDefault = (props) => {
32
34
  placeholder="Placeholder text"
33
35
  value={value}
34
36
  {...props}
37
+ id="default-example-3"
35
38
  />
36
39
 
37
40
  </div>
@@ -0,0 +1 @@
1
+ Add an `id` to your Textarea so that clicking the label will move focus directly to the input.
@@ -1,6 +1,7 @@
1
1
  import React, { useState } from 'react'
2
2
  import TimePicker from '../../pb_time_picker/_time_picker'
3
3
  import Body from '../../pb_body/_body'
4
+ import Flex from '../../pb_flex/_flex'
4
5
 
5
6
  const TimePickerOnHandler = (props) => {
6
7
  const [selectedTime, setSelectedTime] = useState('')
@@ -17,7 +18,9 @@ const TimePickerOnHandler = (props) => {
17
18
  return (
18
19
  <div>
19
20
  {(selectedTime || closedTime) && (
20
- <div style={{ marginBottom: '16px' }}>
21
+ <Flex marginBottom="sm"
22
+ orientation="column"
23
+ >
21
24
  {selectedTime && (
22
25
  <Body
23
26
  text={`onChange: ${selectedTime}`}
@@ -29,7 +32,7 @@ const TimePickerOnHandler = (props) => {
29
32
  text={`onClose: ${closedTime}`}
30
33
  />
31
34
  )}
32
- </div>
35
+ </Flex>
33
36
  )}
34
37
  <TimePicker
35
38
  id="time-picker-on-handler"
@@ -0,0 +1,6 @@
1
+ <%= pb_rails("time_picker", props: {
2
+ id: "time-picker-required-indicator",
3
+ label: "Select Time",
4
+ required_indicator: true,
5
+ }) %>
6
+
@@ -0,0 +1,16 @@
1
+ import React from 'react'
2
+ import TimePicker from '../_time_picker'
3
+
4
+ const TimePickerRequiredIndicator = (props) => (
5
+ <div>
6
+ <TimePicker
7
+ id="time-picker-required-indicator"
8
+ label="Select Time"
9
+ requiredIndicator
10
+ {...props}
11
+ />
12
+ </div>
13
+ )
14
+
15
+ export default TimePickerRequiredIndicator
16
+
@@ -0,0 +1,3 @@
1
+ The `requiredIndicator`/`required_indicator` prop displays a red asterisk (*) next to the label, visually indicating that the field is required. This is purely visual and does not enforce validation.
2
+
3
+ You can use `requiredIndicator`/`required_indicator` with any validation approach: HTML5 validation via the `required` prop, client-side validation, or backend validation. For this reason, it works independently and doesn't need to be paired with the `required` prop.
@@ -9,6 +9,7 @@ examples:
9
9
  - time_picker_min_max_time: Min & Max Time
10
10
  - time_picker_error: Error
11
11
  - time_picker_disabled: Disabled
12
+ - time_picker_required_indicator: Required Indicator
12
13
  - time_picker_input_options: Input Options
13
14
 
14
15
 
@@ -21,4 +22,5 @@ examples:
21
22
  - time_picker_min_max_time: Min & Max Time
22
23
  - time_picker_error: Error
23
24
  - time_picker_disabled: Disabled
25
+ - time_picker_required_indicator: Required Indicator
24
26
  - time_picker_on_handler: onChange & onClose Handlers
@@ -7,3 +7,4 @@ export { default as TimePickerOnHandler } from './_time_picker_on_handler.jsx'
7
7
  export { default as TimePickerMinMaxTime } from './_time_picker_min_max_time.jsx'
8
8
  export { default as TimePickerError } from './_time_picker_error.jsx'
9
9
  export { default as TimePickerDisabled } from './_time_picker_disabled.jsx'
10
+ export { default as TimePickerRequiredIndicator } from './_time_picker_required_indicator.jsx'
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.1.0.pre.alpha.play276813969
4
+ version: 16.1.0.pre.alpha.play277814027
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-01-29 00:00:00.000000000 Z
12
+ date: 2026-01-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: playbook_ui
@@ -64,6 +64,8 @@ files:
64
64
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling.md
65
65
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background.jsx
66
66
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background.md
67
+ - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background_custom.jsx
68
+ - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background_custom.md
67
69
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background_multi.jsx
68
70
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background_multi.md
69
71
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_column_headers.jsx
@@ -576,6 +578,7 @@ files:
576
578
  - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_anti_patterns.html.erb
577
579
  - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.html.erb
578
580
  - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.jsx
581
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.md
579
582
  - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.html.erb
580
583
  - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.jsx
581
584
  - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.md
@@ -1428,7 +1431,6 @@ files:
1428
1431
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_input_display.md
1429
1432
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.html.erb
1430
1433
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.jsx
1431
- - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.md
1432
1434
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_react_hook.jsx
1433
1435
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_react_hook.md
1434
1436
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_reset.html.erb
@@ -2344,6 +2346,7 @@ files:
2344
2346
  - app/pb_kits/playbook/pb_textarea/docs/_textarea_custom.jsx
2345
2347
  - app/pb_kits/playbook/pb_textarea/docs/_textarea_default.html.erb
2346
2348
  - app/pb_kits/playbook/pb_textarea/docs/_textarea_default.jsx
2349
+ - app/pb_kits/playbook/pb_textarea/docs/_textarea_default.md
2347
2350
  - app/pb_kits/playbook/pb_textarea/docs/_textarea_default_swift.md
2348
2351
  - app/pb_kits/playbook/pb_textarea/docs/_textarea_emoji_mask.html.erb
2349
2352
  - app/pb_kits/playbook/pb_textarea/docs/_textarea_emoji_mask.jsx
@@ -2404,6 +2407,9 @@ files:
2404
2407
  - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_min_max_time.md
2405
2408
  - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_on_handler.jsx
2406
2409
  - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_on_handler.md
2410
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_required_indicator.html.erb
2411
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_required_indicator.jsx
2412
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_required_indicator.md
2407
2413
  - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_timezone.html.erb
2408
2414
  - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_timezone.jsx
2409
2415
  - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_timezone.md
@@ -1,3 +0,0 @@
1
- The MultiLevelSelect component optionally accepts a `label` prop to produce a label above the input.
2
-
3
- Add an `id` to wire the label to the input so that clicking the label will move focus directly to the input, and open the drop-down.