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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -1
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +2 -1
- data/app/pb_kits/playbook/pb_form/docs/_form_with_required_indicator.html.erb +14 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_with_required_indicator.md +3 -0
- data/app/pb_kits/playbook/pb_form/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_popover/docs/_popover_append_to.html.erb +2 -2
- data/app/pb_kits/playbook/pb_popover/docs/_popover_append_to.jsx +3 -2
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_emoji_mask.html.erb +7 -0
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_emoji_mask.jsx +24 -0
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_emoji_mask.md +2 -0
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_required_indicator.html.erb +6 -0
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_required_indicator.jsx +25 -0
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_required_indicator.md +3 -0
- data/app/pb_kits/playbook/pb_text_input/docs/example.yml +5 -0
- data/app/pb_kits/playbook/pb_text_input/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_emoji_mask.html.erb +5 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_emoji_mask.jsx +24 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_emoji_mask.md +1 -0
- data/app/pb_kits/playbook/pb_textarea/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_textarea/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_24_hour.html.erb +2 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_24_hour.jsx +16 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_24_hour.md +1 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default.html.erb +1 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default.jsx +13 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default.md +1 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default_time.html.erb +4 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default_time.jsx +29 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default_time.md +1 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_disabled.html.erb +13 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_disabled.jsx +23 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_error.html.erb +5 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_error.jsx +15 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_input_options.html.erb +14 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_label.html.erb +2 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_label.jsx +15 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_min_max_time.html.erb +42 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_min_max_time.jsx +52 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_min_max_time.md +1 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_on_handler.jsx +45 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_on_handler.md +1 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_timezone.html.erb +3 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_timezone.jsx +21 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_timezone.md +1 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/example.yml +24 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/index.js +9 -0
- metadata +39 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a1da1d6d1ef24651b4b2d68d7d6fb4d24418a93237ede041deab2386aad9590e
|
|
4
|
+
data.tar.gz: 8bc4c34d0ed65dc094b8cf3e187a99af9a0f947df3eafd56973a9b2781a8486a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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).
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
tooltip_id: "append-to-tooltip-2",
|
|
40
40
|
offset: true,
|
|
41
41
|
position: "top",
|
|
42
|
-
append_to: ".
|
|
42
|
+
append_to: ".pb--page--sideNav",
|
|
43
43
|
}) do %>
|
|
44
|
-
I'm a popover. I have been appended to the .
|
|
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
|
|
|
56
56
|
<PbReactPopover
|
|
57
|
-
appendTo=".
|
|
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 .
|
|
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,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,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,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,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 @@
|
|
|
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,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,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,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.
|
|
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:
|
|
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
|