playbook_ui_docs 15.7.0 → 15.8.0.pre.rc.0

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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -1
  3. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +2 -1
  4. data/app/pb_kits/playbook/pb_form/docs/_form_with_required_indicator.html.erb +14 -0
  5. data/app/pb_kits/playbook/pb_form/docs/_form_with_required_indicator.md +3 -0
  6. data/app/pb_kits/playbook/pb_form/docs/example.yml +1 -0
  7. data/app/pb_kits/playbook/pb_popover/docs/_popover_append_to.html.erb +2 -2
  8. data/app/pb_kits/playbook/pb_popover/docs/_popover_append_to.jsx +3 -2
  9. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_emoji_mask.html.erb +7 -0
  10. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_emoji_mask.jsx +24 -0
  11. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_emoji_mask.md +2 -0
  12. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_required_indicator.html.erb +6 -0
  13. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_required_indicator.jsx +25 -0
  14. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_required_indicator.md +3 -0
  15. data/app/pb_kits/playbook/pb_text_input/docs/example.yml +5 -0
  16. data/app/pb_kits/playbook/pb_text_input/docs/index.js +2 -0
  17. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_emoji_mask.html.erb +5 -0
  18. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_emoji_mask.jsx +24 -0
  19. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_emoji_mask.md +1 -0
  20. data/app/pb_kits/playbook/pb_textarea/docs/example.yml +2 -0
  21. data/app/pb_kits/playbook/pb_textarea/docs/index.js +1 -0
  22. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_24_hour.html.erb +2 -0
  23. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_24_hour.jsx +16 -0
  24. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_24_hour.md +1 -0
  25. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default.html.erb +1 -0
  26. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default.jsx +13 -0
  27. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default.md +1 -0
  28. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default_time.html.erb +4 -0
  29. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default_time.jsx +29 -0
  30. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default_time.md +1 -0
  31. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_disabled.html.erb +13 -0
  32. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_disabled.jsx +23 -0
  33. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_error.html.erb +5 -0
  34. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_error.jsx +15 -0
  35. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_input_options.html.erb +14 -0
  36. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_label.html.erb +2 -0
  37. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_label.jsx +15 -0
  38. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_min_max_time.html.erb +42 -0
  39. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_min_max_time.jsx +52 -0
  40. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_min_max_time.md +1 -0
  41. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_on_handler.jsx +45 -0
  42. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_on_handler.md +1 -0
  43. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_timezone.html.erb +3 -0
  44. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_timezone.jsx +21 -0
  45. data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_timezone.md +1 -0
  46. data/app/pb_kits/playbook/pb_time_picker/docs/example.yml +24 -0
  47. data/app/pb_kits/playbook/pb_time_picker/docs/index.js +9 -0
  48. metadata +39 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 785d6561b9499279ffa5a3f2aab38571a743962d2de8f66b12b6d9beaecc60c4
4
- data.tar.gz: 6875304ffd91afc147369b6de418c7ed668ae28b974bc6ac2adef136f71401ae
3
+ metadata.gz: a1da1d6d1ef24651b4b2d68d7d6fb4d24418a93237ede041deab2386aad9590e
4
+ data.tar.gz: 8bc4c34d0ed65dc094b8cf3e187a99af9a0f947df3eafd56973a9b2781a8486a
5
5
  SHA512:
6
- metadata.gz: ff2ccd9f01c25491c8fb94b20cde950c1fdbbcb45d80f2ff56886d355182d1d5a43478683e9a549fd643d4af35d6bacbb08c8e1b3834d3d0961b52278fbe67b6
7
- data.tar.gz: f3085b98700a563fa2a73152fa9b484e4ef85297dddc7aeea46fab8c8b0d598cb1a2a888c4138e44d041ea9c6b4ca034788708753217a27259d228cf2505d5b3
6
+ metadata.gz: b518dbb81c1684003780e9e096dccbc0bc428511d31e0a8a74dc2847a33ab84cc8283a84ae76731bfe34a622e7da2e03fe081fa421c966320734399a4ea9d902
7
+ data.tar.gz: 685a9397116fbd96752f7294021be526cbcea9c12cb174f5a9579797bd28e50a08b0ce90b4947550318b2d64d153867274ad367adcdbb9154666d02fa3248d8b
@@ -116,7 +116,7 @@
116
116
  <%= form.star_rating_field :example_star_rating, props: { variant: "interactive", label: true } %>
117
117
  <%= form.time_zone_select_field :example_time_zone_select, ActiveSupport::TimeZone.us_zones, { default: "Eastern Time (US & Canada)" }, props: { label: true } %>
118
118
  <%= form.multi_level_select :example_multi_level_select, props: { id: "multi-level-select-form-default", tree_data: treeData, margin_bottom: "sm", label: "Example Multi Level Select field" } %>
119
-
119
+ <%= form.time_picker :example_time_picker, props: { label: true } %>
120
120
  <%= form.actions do |action| %>
121
121
  <%= action.submit %>
122
122
  <%= action.button props: { type: "reset", text: "Cancel", variant: "secondary" } %>
@@ -117,7 +117,8 @@
117
117
  <%= form.star_rating_field :example_star_rating_validation, props: { variant: "interactive", label: true, required: true } %>
118
118
  <%= form.time_zone_select_field :example_time_zone_select, ActiveSupport::TimeZone.us_zones, { default: "Eastern Time (US & Canada)" }, props: { label: true, blank_selection: "Select a Time Zone...", required: true } %>
119
119
  <%= form.multi_level_select :example_multi_level_select, props: { id: "multi-level-select-form", tree_data: treeData, margin_bottom: "sm", required: true, label: "Example Multi Level Select field" } %>
120
-
120
+ <%= form.time_picker :example_time_picker_validation, props: { label: true, required: true, validation_message: "Please select a time." } %>
121
+
121
122
  <%= form.actions do |action| %>
122
123
  <%= action.submit %>
123
124
  <%= action.button props: { type: "reset", text: "Cancel", variant: "secondary" } %>
@@ -0,0 +1,14 @@
1
+ <%= pb_form_with(scope: :example, url: "", method: :get, validate: true) do |form| %>
2
+ <%= form.text_field :example_text_field, props: { label: true, required: true, required_indicator: true } %>
3
+ <%= form.text_field :example_text_field_2, props: { label: "Text Field Custom Label", required: true, required_indicator: true } %>
4
+ <%= form.email_field :example_email_field, props: { label: true, required: true, required_indicator: true } %>
5
+ <%= form.number_field :example_number_field, props: { label: true, required: true, required_indicator: true } %>
6
+ <%= form.search_field :example_search_field, props: { label: true, required: true, required_indicator: true } %>
7
+ <%= form.password_field :example_password_field, props: { label: true, required: true, required_indicator: true } %>
8
+ <%= form.url_field :example_url_field, props: { label: true, required: true, required_indicator: true } %>
9
+
10
+ <%= form.actions do |action| %>
11
+ <%= action.submit %>
12
+ <%= action.button props: { type: "reset", text: "Cancel", variant: "secondary" } %>
13
+ <% end %>
14
+ <% end %>
@@ -0,0 +1,3 @@
1
+ The `required_indicator` prop adds a red asterisk (*) to the input label, visually marking the field as required. This works with both `label: true` for auto-generated labels and `label: "Custom Text"` for custom labels.
2
+
3
+ While it's typically used alongside the `required` prop for HTML5 validation, you can use `required_indicator` independently if you're handling validation differently (e.g., client-side or backend validation).
@@ -4,3 +4,4 @@ examples:
4
4
  - form_form_with: Default
5
5
  - form_form_with_validate: Default + Validation
6
6
  - form_form_with_loading: Default + Loading
7
+ - form_with_required_indicator: With Optional Required Indicator
@@ -39,8 +39,8 @@
39
39
  tooltip_id: "append-to-tooltip-2",
40
40
  offset: true,
41
41
  position: "top",
42
- append_to: ".kit-show-wrapper",
42
+ append_to: ".pb--page--sideNav",
43
43
  }) do %>
44
- I'm a popover. I have been appended to the .kit-show-wrapper.
44
+ I'm a popover. I have been appended to the .pb--page--sideNav.
45
45
  <% end %>
46
46
  <% end %>
@@ -54,14 +54,15 @@ const PopoverAppendTo = (props) => {
54
54
  <Body text="Click info for more details" />
55
55
  &nbsp;
56
56
  <PbReactPopover
57
- appendTo=".kit-show-wrapper"
57
+ appendTo=".pb--page--sideNav"
58
58
  offset
59
59
  placement="top"
60
60
  reference={selectorPopoverReference}
61
61
  show={showSelectorPopover}
62
+ zIndex={10}
62
63
  {...props}
63
64
  >
64
- {'I\'m a popover. I have been appended to the .kit-show-wrapper.'}
65
+ {'I\'m a popover. I have been appended to the .pb--page--sideNav.'}
65
66
  </PbReactPopover>
66
67
  </Flex>
67
68
  </>
@@ -0,0 +1,7 @@
1
+ <%= pb_rails("text_input", props: {
2
+ emoji_mask: true,
3
+ label: "Emoji Mask",
4
+ placeholder: "Try typing or pasting emojis...",
5
+ }) %>
6
+
7
+
@@ -0,0 +1,24 @@
1
+ import React, { useState } from 'react'
2
+
3
+ import TextInput from '../../pb_text_input/_text_input'
4
+
5
+ const TextInputEmojiMask = (props) => {
6
+ const [basicValue, setBasicValue] = useState('')
7
+
8
+ return (
9
+ <div>
10
+ <TextInput
11
+ emojiMask
12
+ label="Emoji Mask"
13
+ onChange={({ target }) => setBasicValue(target.value)}
14
+ placeholder="Try typing or pasting emojis..."
15
+ value={basicValue}
16
+ {...props}
17
+ />
18
+ </div>
19
+ )
20
+ }
21
+
22
+ export default TextInputEmojiMask
23
+
24
+
@@ -0,0 +1,2 @@
1
+ Use the `emojiMask` / `emoji_mask` prop to prevent users from entering emoji characters (🐸 🐈 🏄‍♂️) in typed or pasted content. It allows accented characters and other non-ASCII letters (é, ü, 文).
2
+
@@ -0,0 +1,6 @@
1
+ <%= pb_rails("text_input", props: {
2
+ label: "First Name",
3
+ placeholder: "Enter first name",
4
+ id: "text_input_required_indicator",
5
+ required_indicator: true,
6
+ }) %>
@@ -0,0 +1,25 @@
1
+ import React, { useState } from 'react'
2
+
3
+ import TextInput from '../../pb_text_input/_text_input'
4
+
5
+ const TextInputDefault = (props) => {
6
+ const [firstName, setFirstName] = useState('')
7
+ const handleOnChangeFirstName = ({ target }) => {
8
+ setFirstName(target.value)
9
+ }
10
+
11
+ return (
12
+ <TextInput
13
+ id="text_input_required_indicator"
14
+ label="First Name"
15
+ name="firstName"
16
+ onChange={handleOnChangeFirstName}
17
+ placeholder="Enter first name"
18
+ requiredIndicator
19
+ value={firstName}
20
+ {...props}
21
+ />
22
+ )
23
+ }
24
+
25
+ export default TextInputDefault
@@ -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.
@@ -10,6 +10,9 @@ examples:
10
10
  - text_input_options: Input Options
11
11
  - text_input_mask: Mask
12
12
  - text_input_autocomplete: Autocomplete
13
+ - text_input_required_indicator: Required Indicator
14
+ - text_input_emoji_mask: Emoji Mask
15
+
13
16
 
14
17
  react:
15
18
  - text_input_default: Default
@@ -22,6 +25,8 @@ examples:
22
25
  - text_input_mask: Mask
23
26
  - text_input_sanitize: Sanitized Masked Input
24
27
  - text_input_autocomplete: Autocomplete
28
+ - text_input_required_indicator: Required Indicator
29
+ - text_input_emoji_mask: Emoji Mask
25
30
 
26
31
 
27
32
  swift:
@@ -8,3 +8,5 @@ export { default as TextInputNoLabel } from './_text_input_no_label.jsx'
8
8
  export { default as TextInputMask } from './_text_input_mask.jsx'
9
9
  export { default as TextInputSanitize } from './_text_input_sanitize.jsx'
10
10
  export { default as TextInputAutocomplete } from './_text_input_autocomplete.jsx'
11
+ export { default as TextInputRequiredIndicator } from './_text_input_required_indicator.jsx'
12
+ export { default as TextInputEmojiMask } from './_text_input_emoji_mask.jsx'
@@ -0,0 +1,5 @@
1
+ <%= pb_rails("textarea", props: {
2
+ emoji_mask: true,
3
+ label: "Emoji Mask",
4
+ placeholder: "Try typing or pasting emojis...",
5
+ }) %>
@@ -0,0 +1,24 @@
1
+ import React, { useState } from 'react'
2
+
3
+ import Textarea from '../../pb_textarea/_textarea'
4
+
5
+ const TextareaEmojiMask = (props) => {
6
+ const [basicValue, setBasicValue] = useState('')
7
+
8
+ return (
9
+ <div>
10
+ <Textarea
11
+ emojiMask
12
+ label="Emoji Mask"
13
+ onChange={({ target }) => setBasicValue(target.value)}
14
+ placeholder="Try typing or pasting emojis..."
15
+ value={basicValue}
16
+ {...props}
17
+ />
18
+ </div>
19
+ )
20
+ }
21
+
22
+ export default TextareaEmojiMask
23
+
24
+
@@ -0,0 +1 @@
1
+ Use the `emojiMask` / `emoji_mask` prop to prevent users from entering emoji characters (🐸 🐈 🏄‍♂️) in typed or pasted content. It allows accented characters and other non-ASCII letters (é, ü, 文).
@@ -7,6 +7,7 @@ examples:
7
7
  - textarea_error: Textarea w/ Error
8
8
  - textarea_character_counter: Character Counter
9
9
  - textarea_inline: Inline
10
+ - textarea_emoji_mask: Emoji Mask
10
11
 
11
12
  react:
12
13
  - textarea_default: Default
@@ -15,6 +16,7 @@ examples:
15
16
  - textarea_error: Textarea w/ Error
16
17
  - textarea_character_counter: Character Counter
17
18
  - textarea_inline: Inline
19
+ - textarea_emoji_mask: Emoji Mask
18
20
 
19
21
  swift:
20
22
  - textarea_default_swift: Default
@@ -4,3 +4,4 @@ export { default as TextareaCustom } from './_textarea_custom.jsx'
4
4
  export { default as TextareaError } from './_textarea_error.jsx'
5
5
  export { default as TextareaCharacterCounter } from './_textarea_character_counter.jsx'
6
6
  export { default as TextareaInline } from './_textarea_inline.jsx'
7
+ export { default as TextareaEmojiMask } from './_textarea_emoji_mask.jsx'
@@ -0,0 +1,2 @@
1
+ <%= pb_rails("time_picker", props: { id: "time-picker-24-hour", label: "24-Hour Format", time_format: "24hour" }) %>
2
+
@@ -0,0 +1,16 @@
1
+ import React from 'react'
2
+ import TimePicker from '../../pb_time_picker/_time_picker'
3
+
4
+ const TimePicker24Hour = (props) => (
5
+ <div>
6
+ <TimePicker
7
+ id="time-picker-24-hour"
8
+ label="24-Hour Format"
9
+ timeFormat="24hour"
10
+ {...props}
11
+ />
12
+ </div>
13
+ )
14
+
15
+ export default TimePicker24Hour
16
+
@@ -0,0 +1 @@
1
+ Set `time_format` / `timeFormat` to 24hour to display the time selection dropdown in a 24-hour format.
@@ -0,0 +1 @@
1
+ <%= pb_rails("time_picker", props: { id: "time-picker-default" }) %>
@@ -0,0 +1,13 @@
1
+ import React from 'react'
2
+ import TimePicker from '../../pb_time_picker/_time_picker'
3
+
4
+ const TimePickerDefault = (props) => (
5
+ <div>
6
+ <TimePicker
7
+ id="time-picker-default"
8
+ {...props}
9
+ />
10
+ </div>
11
+ )
12
+
13
+ export default TimePickerDefault
@@ -0,0 +1 @@
1
+ Use the Time Picker for time-only selection. For date and time selection, use the [DatePicker with Time Selection Enabled](https://playbook.powerapp.cloud/kits/date_picker/react#time-selection) instead.
@@ -0,0 +1,4 @@
1
+ <%= pb_rails("time_picker", props: { id: "time-picker-default-time-12hr", default_time: "2:30 PM", label: "12-Hour Format (2:30 PM)" }) %>
2
+ <%= pb_rails("time_picker", props: { id: "time-picker-default-time-24hr", default_time: "14:30", label: "24-Hour Format (14:30)" }) %>
3
+ <%= pb_rails("time_picker", props: { id: "time-picker-default-time-24hr-format", default_time: "14:30", label: "24-Hour Format with timeFormat (14:30)", time_format: "24hour" }) %>
4
+
@@ -0,0 +1,29 @@
1
+ import React from 'react'
2
+ import TimePicker from '../../pb_time_picker/_time_picker'
3
+
4
+ const TimePickerDefaultTime = (props) => (
5
+ <div>
6
+ <TimePicker
7
+ defaultTime="2:30 PM"
8
+ id="time-picker-default-time-12hr"
9
+ label="12-Hour Format (2:30 PM)"
10
+ {...props}
11
+ />
12
+ <TimePicker
13
+ defaultTime="14:30"
14
+ id="time-picker-default-time-24hr"
15
+ label="24-Hour Format (14:30)"
16
+ {...props}
17
+ />
18
+ <TimePicker
19
+ defaultTime="14:30"
20
+ id="time-picker-default-time-24hr-format"
21
+ label="24-Hour Format with timeFormat (14:30)"
22
+ timeFormat="24hour"
23
+ {...props}
24
+ />
25
+ </div>
26
+ )
27
+
28
+ export default TimePickerDefaultTime
29
+
@@ -0,0 +1 @@
1
+ The `default_time` / `defaultTime` prop sets a default time value and accepts both 12-hour and 24-hour formats.
@@ -0,0 +1,13 @@
1
+ <%= pb_rails("time_picker", props: {
2
+ disabled: true,
3
+ id: "time-picker-disabled",
4
+ label: "Disabled Time Picker"
5
+ }) %>
6
+
7
+ <%= pb_rails("time_picker", props: {
8
+ default_time: "14:30",
9
+ disabled: true,
10
+ id: "time-picker-disabled-with-value",
11
+ label: "Disabled with Default Time"
12
+ }) %>
13
+
@@ -0,0 +1,23 @@
1
+ import React from 'react'
2
+ import TimePicker from '../../pb_time_picker/_time_picker'
3
+
4
+ const TimePickerDisabled = (props) => (
5
+ <div>
6
+ <TimePicker
7
+ disabled
8
+ id="time-picker-disabled"
9
+ label="Disabled Time Picker"
10
+ {...props}
11
+ />
12
+ <TimePicker
13
+ defaultTime="14:30"
14
+ disabled
15
+ id="time-picker-disabled-with-value"
16
+ label="Disabled with Default Time"
17
+ {...props}
18
+ />
19
+ </div>
20
+ )
21
+
22
+ export default TimePickerDisabled
23
+
@@ -0,0 +1,5 @@
1
+ <%= pb_rails("time_picker", props: {
2
+ error: "Please select a valid time",
3
+ id: "time-picker-error"
4
+ }) %>
5
+
@@ -0,0 +1,15 @@
1
+ import React from 'react'
2
+ import TimePicker from '../../pb_time_picker/_time_picker'
3
+
4
+ const TimePickerError = (props) => (
5
+ <div>
6
+ <TimePicker
7
+ error="Please select a valid time"
8
+ id="time-picker-error"
9
+ {...props}
10
+ />
11
+ </div>
12
+ )
13
+
14
+ export default TimePickerError
15
+
@@ -0,0 +1,14 @@
1
+ <%= pb_rails("time_picker", props: {
2
+ id: "time-picker-input-options",
3
+ label: "Appointment Time",
4
+ input_options: {
5
+ aria: {
6
+ describedby: "appointment-help-text",
7
+ label: "Select your preferred appointment time"
8
+ },
9
+ data: {
10
+ testid: "appointment-time-input"
11
+ },
12
+ placeholder: "Choose a time"
13
+ }
14
+ }) %>
@@ -0,0 +1,2 @@
1
+ <%= pb_rails("time_picker", props: { id: "time-picker-label", label: "Select Time" }) %>
2
+
@@ -0,0 +1,15 @@
1
+ import React from 'react'
2
+ import TimePicker from '../_time_picker'
3
+
4
+ const TimePickerLabel = (props) => (
5
+ <div>
6
+ <TimePicker
7
+ id="time-picker-label"
8
+ label="Select Time"
9
+ {...props}
10
+ />
11
+ </div>
12
+ )
13
+
14
+ export default TimePickerLabel
15
+
@@ -0,0 +1,42 @@
1
+ <%= pb_rails("time_picker", props: {
2
+ id: "time-picker-min-only",
3
+ label: "Minimum Time Only",
4
+ min_time: "09:00",
5
+ }) %>
6
+
7
+ <%= pb_rails("time_picker", props: {
8
+ id: "time-picker-max-only",
9
+ label: "Maximum Time Only",
10
+ max_time: "17:00",
11
+ time_format: "24hour",
12
+ }) %>
13
+
14
+ <%= pb_rails("time_picker", props: {
15
+ id: "time-picker-min-max-12hr",
16
+ label: "Min & Max Time Range (12-hour)",
17
+ min_time: "09:00",
18
+ max_time: "17:00",
19
+ }) %>
20
+
21
+ <%= pb_rails("time_picker", props: {
22
+ id: "time-picker-min-max-24hr",
23
+ label: "Min & Max Time Range (24-hour)",
24
+ min_time: "09:00",
25
+ max_time: "17:00",
26
+ time_format: "24hour",
27
+ }) %>
28
+
29
+ <%= pb_rails("time_picker", props: {
30
+ id: "time-picker-pm-only",
31
+ label: "PM Only Range (AM disabled)",
32
+ min_time: "13:00",
33
+ max_time: "17:00",
34
+ }) %>
35
+
36
+ <%= pb_rails("time_picker", props: {
37
+ id: "time-picker-am-only",
38
+ label: "AM Only Range (PM disabled)",
39
+ min_time: "06:00",
40
+ max_time: "11:30"
41
+ }) %>
42
+
@@ -0,0 +1,52 @@
1
+ import React from 'react'
2
+ import TimePicker from '../../pb_time_picker/_time_picker'
3
+
4
+ const TimePickerMinMaxTime = (props) => (
5
+ <div>
6
+ <TimePicker
7
+ id="time-picker-min-only"
8
+ label="Minimum Time Only"
9
+ minTime="09:00"
10
+ {...props}
11
+ />
12
+ <TimePicker
13
+ id="time-picker-max-only"
14
+ label="Maximum Time Only"
15
+ maxTime="17:00"
16
+ timeFormat="24hour"
17
+ {...props}
18
+ />
19
+ <TimePicker
20
+ id="time-picker-min-max-12hr"
21
+ label="Min & Max Time Range (12-hour)"
22
+ maxTime="17:00"
23
+ minTime="09:00"
24
+ {...props}
25
+ />
26
+ <TimePicker
27
+ id="time-picker-min-max-24hr"
28
+ label="Min & Max Time Range (24-hour)"
29
+ maxTime="17:00"
30
+ minTime="09:00"
31
+ timeFormat="24hour"
32
+ {...props}
33
+ />
34
+ <TimePicker
35
+ id="time-picker-pm-only"
36
+ label="PM Only Range (AM disabled)"
37
+ maxTime="17:00"
38
+ minTime="13:00"
39
+ {...props}
40
+ />
41
+ <TimePicker
42
+ id="time-picker-am-only"
43
+ label="AM Only Range (PM disabled)"
44
+ maxTime="11:30"
45
+ minTime="06:00"
46
+ {...props}
47
+ />
48
+ </div>
49
+ )
50
+
51
+ export default TimePickerMinMaxTime
52
+
@@ -0,0 +1 @@
1
+ Use the `min_time` / `minTime` and `max_time` / `maxTime` props to restrict the selectable time range. This example demonstrates minimum-only, maximum-only, and combined ranges in both 12-hour and 24-hour formats.
@@ -0,0 +1,45 @@
1
+ import React, { useState } from 'react'
2
+ import TimePicker from '../../pb_time_picker/_time_picker'
3
+ import Body from '../../pb_body/_body'
4
+
5
+ const TimePickerOnHandler = (props) => {
6
+ const [selectedTime, setSelectedTime] = useState('')
7
+ const [closedTime, setClosedTime] = useState('')
8
+
9
+ const handleTimeChange = (time) => {
10
+ setSelectedTime(time)
11
+ }
12
+
13
+ const handleTimeClose = (time) => {
14
+ setClosedTime(time)
15
+ }
16
+
17
+ return (
18
+ <div>
19
+ {(selectedTime || closedTime) && (
20
+ <div style={{ marginBottom: '16px' }}>
21
+ {selectedTime && (
22
+ <Body
23
+ text={`onChange: ${selectedTime}`}
24
+ />
25
+ )}
26
+ {closedTime && (
27
+ <Body
28
+ marginTop={selectedTime ? "xs" : "none"}
29
+ text={`onClose: ${closedTime}`}
30
+ />
31
+ )}
32
+ </div>
33
+ )}
34
+ <TimePicker
35
+ id="time-picker-on-handler"
36
+ onChange={handleTimeChange}
37
+ onClose={handleTimeClose}
38
+ {...props}
39
+ />
40
+ </div>
41
+ )
42
+ }
43
+
44
+ export default TimePickerOnHandler
45
+
@@ -0,0 +1 @@
1
+ Demonstrates the `onChange` and `onClose` event handlers for the Time Picker.
@@ -0,0 +1,3 @@
1
+ <%= pb_rails("time_picker", props: { id: "time-picker-timezone", show_timezone: true }) %>
2
+ <%= pb_rails("time_picker", props: { id: "time-picker-timezone-24hour", show_timezone: true, time_format: "24hour" }) %>
3
+
@@ -0,0 +1,21 @@
1
+ import React from 'react'
2
+ import TimePicker from '../../pb_time_picker/_time_picker'
3
+
4
+ const TimePickerTimezone = (props) => (
5
+ <div>
6
+ <TimePicker
7
+ id="time-picker-timezone"
8
+ showTimezone
9
+ {...props}
10
+ />
11
+ <TimePicker
12
+ id="time-picker-timezone-24hour"
13
+ showTimezone
14
+ timeFormat="24hour"
15
+ {...props}
16
+ />
17
+ </div>
18
+ )
19
+
20
+ export default TimePickerTimezone
21
+
@@ -0,0 +1 @@
1
+ Enable timezone display by passing `show_timezone` / `showTimezone`.
@@ -0,0 +1,24 @@
1
+ examples:
2
+
3
+ rails:
4
+ - time_picker_default: Default
5
+ - time_picker_24_hour: 24-Hour Format
6
+ - time_picker_default_time: Default Time
7
+ - time_picker_label: Custom Label
8
+ - time_picker_timezone: With Timezone
9
+ - time_picker_min_max_time: Min & Max Time
10
+ - time_picker_error: Error
11
+ - time_picker_disabled: Disabled
12
+ - time_picker_input_options: Input Options
13
+
14
+
15
+ react:
16
+ - time_picker_default: Default
17
+ - time_picker_24_hour: 24-Hour Format
18
+ - time_picker_default_time: Default Time
19
+ - time_picker_label: Custom Label
20
+ - time_picker_timezone: With Timezone
21
+ - time_picker_min_max_time: Min & Max Time
22
+ - time_picker_error: Error
23
+ - time_picker_disabled: Disabled
24
+ - time_picker_on_handler: onChange & onClose Handlers
@@ -0,0 +1,9 @@
1
+ export { default as TimePickerDefault } from './_time_picker_default.jsx'
2
+ export { default as TimePickerDefaultTime } from './_time_picker_default_time.jsx'
3
+ export { default as TimePicker24Hour } from './_time_picker_24_hour.jsx'
4
+ export { default as TimePickerLabel } from './_time_picker_label.jsx'
5
+ export { default as TimePickerTimezone } from './_time_picker_timezone.jsx'
6
+ export { default as TimePickerOnHandler } from './_time_picker_on_handler.jsx'
7
+ export { default as TimePickerMinMaxTime } from './_time_picker_min_max_time.jsx'
8
+ export { default as TimePickerError } from './_time_picker_error.jsx'
9
+ export { default as TimePickerDisabled } from './_time_picker_disabled.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: 15.7.0
4
+ version: 15.8.0.pre.rc.0
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-19 00:00:00.000000000 Z
12
+ date: 2026-01-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: playbook_ui
@@ -1123,6 +1123,8 @@ files:
1123
1123
  - app/pb_kits/playbook/pb_form/docs/_form_form_with_loading.md
1124
1124
  - app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb
1125
1125
  - app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.md
1126
+ - app/pb_kits/playbook/pb_form/docs/_form_with_required_indicator.html.erb
1127
+ - app/pb_kits/playbook/pb_form/docs/_form_with_required_indicator.md
1126
1128
  - app/pb_kits/playbook/pb_form/docs/example.yml
1127
1129
  - app/pb_kits/playbook/pb_form_group/docs/_form_group_button.html.erb
1128
1130
  - app/pb_kits/playbook/pb_form_group/docs/_form_group_button.jsx
@@ -2378,6 +2380,9 @@ files:
2378
2380
  - app/pb_kits/playbook/pb_text_input/docs/_text_input_disabled.html.erb
2379
2381
  - app/pb_kits/playbook/pb_text_input/docs/_text_input_disabled.jsx
2380
2382
  - app/pb_kits/playbook/pb_text_input/docs/_text_input_disabled_swift.md
2383
+ - app/pb_kits/playbook/pb_text_input/docs/_text_input_emoji_mask.html.erb
2384
+ - app/pb_kits/playbook/pb_text_input/docs/_text_input_emoji_mask.jsx
2385
+ - app/pb_kits/playbook/pb_text_input/docs/_text_input_emoji_mask.md
2381
2386
  - app/pb_kits/playbook/pb_text_input/docs/_text_input_error.html.erb
2382
2387
  - app/pb_kits/playbook/pb_text_input/docs/_text_input_error.jsx
2383
2388
  - app/pb_kits/playbook/pb_text_input/docs/_text_input_error.md
@@ -2391,6 +2396,9 @@ files:
2391
2396
  - app/pb_kits/playbook/pb_text_input/docs/_text_input_no_label.jsx
2392
2397
  - app/pb_kits/playbook/pb_text_input/docs/_text_input_options.html.erb
2393
2398
  - app/pb_kits/playbook/pb_text_input/docs/_text_input_props_swift.md
2399
+ - app/pb_kits/playbook/pb_text_input/docs/_text_input_required_indicator.html.erb
2400
+ - app/pb_kits/playbook/pb_text_input/docs/_text_input_required_indicator.jsx
2401
+ - app/pb_kits/playbook/pb_text_input/docs/_text_input_required_indicator.md
2394
2402
  - app/pb_kits/playbook/pb_text_input/docs/_text_input_sanitize.jsx
2395
2403
  - app/pb_kits/playbook/pb_text_input/docs/_text_input_sanitize.md
2396
2404
  - app/pb_kits/playbook/pb_text_input/docs/example.yml
@@ -2404,6 +2412,9 @@ files:
2404
2412
  - app/pb_kits/playbook/pb_textarea/docs/_textarea_default.html.erb
2405
2413
  - app/pb_kits/playbook/pb_textarea/docs/_textarea_default.jsx
2406
2414
  - app/pb_kits/playbook/pb_textarea/docs/_textarea_default_swift.md
2415
+ - app/pb_kits/playbook/pb_textarea/docs/_textarea_emoji_mask.html.erb
2416
+ - app/pb_kits/playbook/pb_textarea/docs/_textarea_emoji_mask.jsx
2417
+ - app/pb_kits/playbook/pb_textarea/docs/_textarea_emoji_mask.md
2407
2418
  - app/pb_kits/playbook/pb_textarea/docs/_textarea_error.html.erb
2408
2419
  - app/pb_kits/playbook/pb_textarea/docs/_textarea_error.jsx
2409
2420
  - app/pb_kits/playbook/pb_textarea/docs/_textarea_error.md
@@ -2434,6 +2445,32 @@ files:
2434
2445
  - app/pb_kits/playbook/pb_time/docs/_time_unstyled.md
2435
2446
  - app/pb_kits/playbook/pb_time/docs/example.yml
2436
2447
  - app/pb_kits/playbook/pb_time/docs/index.js
2448
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_24_hour.html.erb
2449
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_24_hour.jsx
2450
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_24_hour.md
2451
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default.html.erb
2452
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default.jsx
2453
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default.md
2454
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default_time.html.erb
2455
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default_time.jsx
2456
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default_time.md
2457
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_disabled.html.erb
2458
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_disabled.jsx
2459
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_error.html.erb
2460
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_error.jsx
2461
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_input_options.html.erb
2462
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_label.html.erb
2463
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_label.jsx
2464
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_min_max_time.html.erb
2465
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_min_max_time.jsx
2466
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_min_max_time.md
2467
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_on_handler.jsx
2468
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_on_handler.md
2469
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_timezone.html.erb
2470
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_timezone.jsx
2471
+ - app/pb_kits/playbook/pb_time_picker/docs/_time_picker_timezone.md
2472
+ - app/pb_kits/playbook/pb_time_picker/docs/example.yml
2473
+ - app/pb_kits/playbook/pb_time_picker/docs/index.js
2437
2474
  - app/pb_kits/playbook/pb_time_range_inline/docs/_time_range_inline_default.html.erb
2438
2475
  - app/pb_kits/playbook/pb_time_range_inline/docs/_time_range_inline_default.jsx
2439
2476
  - app/pb_kits/playbook/pb_time_range_inline/docs/example.yml