playbook_ui 14.13.0.pre.rc.10 → 14.14.0.pre.alpha.PBNTR888selectvaliditymessage6348

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 (168) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +0 -1
  3. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +66 -1
  4. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +9 -5
  5. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +8 -1
  6. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_custom_cell.jsx +75 -0
  7. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.html.erb +1 -1
  8. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.jsx +1 -0
  9. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_rails.md +3 -1
  10. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_react.md +3 -1
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.html.erb +33 -0
  12. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.jsx +55 -0
  13. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header_rails.md +3 -0
  14. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header_react.md +3 -0
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +3 -0
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +3 -1
  17. data/app/pb_kits/playbook/pb_bar_graph/BarGraphStyles.scss +58 -0
  18. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.jsx +64 -0
  19. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.md +1 -0
  20. data/app/pb_kits/playbook/pb_bar_graph/docs/example.yml +1 -0
  21. data/app/pb_kits/playbook/pb_bar_graph/docs/index.js +1 -0
  22. data/app/pb_kits/playbook/pb_checkbox/_checkbox.tsx +17 -8
  23. data/app/pb_kits/playbook/pb_checkbox/checkbox.test.js +16 -0
  24. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_react_hook.jsx +69 -0
  25. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_react_hook.md +1 -0
  26. data/app/pb_kits/playbook/pb_checkbox/docs/example.yml +2 -1
  27. data/app/pb_kits/playbook/pb_checkbox/docs/index.js +1 -0
  28. data/app/pb_kits/playbook/pb_currency/_currency.tsx +46 -31
  29. data/app/pb_kits/playbook/pb_currency/currency.html.erb +15 -8
  30. data/app/pb_kits/playbook/pb_currency/currency.rb +17 -2
  31. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.html.erb +22 -0
  32. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.jsx +34 -0
  33. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display_rails.md +1 -0
  34. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display_react.md +1 -0
  35. data/app/pb_kits/playbook/pb_currency/docs/example.yml +2 -0
  36. data/app/pb_kits/playbook/pb_currency/docs/index.js +2 -1
  37. data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +3 -1
  38. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers_rails.html.erb +99 -0
  39. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers_rails.md +1 -0
  40. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.html.erb +61 -0
  41. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.md +4 -0
  42. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.jsx +90 -0
  43. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.md +5 -0
  44. data/app/pb_kits/playbook/pb_draggable/docs/example.yml +4 -5
  45. data/app/pb_kits/playbook/pb_draggable/docs/index.js +2 -1
  46. data/app/pb_kits/playbook/pb_draggable/draggable_container.html.erb +2 -2
  47. data/app/pb_kits/playbook/pb_draggable/draggable_container.rb +5 -0
  48. data/app/pb_kits/playbook/pb_draggable/draggable_item.html.erb +1 -1
  49. data/app/pb_kits/playbook/pb_draggable/draggable_item.rb +4 -0
  50. data/app/pb_kits/playbook/pb_draggable/index.js +151 -15
  51. data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableContainer.tsx +7 -4
  52. data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableItem.tsx +6 -3
  53. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -0
  54. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +2 -1
  55. data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.tsx +11 -7
  56. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_formatting.html.erb +11 -0
  57. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_formatting.jsx +22 -0
  58. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_formatting_rails.md +1 -0
  59. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_formatting_react.md +1 -0
  60. data/app/pb_kits/playbook/pb_home_address_street/docs/example.yml +2 -0
  61. data/app/pb_kits/playbook/pb_home_address_street/docs/index.js +1 -0
  62. data/app/pb_kits/playbook/pb_home_address_street/home_address_street.rb +13 -2
  63. data/app/pb_kits/playbook/pb_icon/icon.html.erb +2 -6
  64. data/app/pb_kits/playbook/pb_icon_button/_icon_button.tsx +71 -0
  65. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_default.html.erb +1 -2
  66. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_default.jsx +17 -0
  67. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_sizes.html.erb +27 -0
  68. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_sizes.jsx +61 -0
  69. data/app/pb_kits/playbook/pb_icon_button/docs/example.yml +5 -3
  70. data/app/pb_kits/playbook/pb_icon_button/docs/index.js +2 -0
  71. data/app/pb_kits/playbook/pb_icon_button/icon_button.html.erb +1 -1
  72. data/app/pb_kits/playbook/pb_icon_button/icon_button.rb +3 -0
  73. data/app/pb_kits/playbook/pb_icon_button/icon_button.test.jsx +39 -0
  74. data/app/pb_kits/playbook/pb_layout/body.html.erb +1 -5
  75. data/app/pb_kits/playbook/pb_layout/footer.html.erb +1 -5
  76. data/app/pb_kits/playbook/pb_layout/header.html.erb +1 -5
  77. data/app/pb_kits/playbook/pb_layout/item.html.erb +1 -5
  78. data/app/pb_kits/playbook/pb_layout/layout.html.erb +1 -5
  79. data/app/pb_kits/playbook/pb_layout/sidebar.html.erb +1 -5
  80. data/app/pb_kits/playbook/pb_legend/legend.html.erb +1 -6
  81. data/app/pb_kits/playbook/pb_message/message.html.erb +1 -6
  82. data/app/pb_kits/playbook/pb_message/message_mention.html.erb +1 -6
  83. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.html.erb +1 -6
  84. data/app/pb_kits/playbook/pb_nav/item.html.erb +7 -19
  85. data/app/pb_kits/playbook/pb_nav/nav.html.erb +3 -8
  86. data/app/pb_kits/playbook/pb_online_status/online_status.html.erb +1 -6
  87. data/app/pb_kits/playbook/pb_overlay/_overlay.tsx +4 -0
  88. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.jsx +37 -0
  89. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional_react.md +1 -0
  90. data/app/pb_kits/playbook/pb_overlay/docs/example.yml +1 -0
  91. data/app/pb_kits/playbook/pb_overlay/docs/index.js +1 -0
  92. data/app/pb_kits/playbook/pb_overlay/subcomponents/_overlay_token.tsx +48 -10
  93. data/app/pb_kits/playbook/pb_popover/popover.html.erb +1 -6
  94. data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.scss +6 -1
  95. data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.tsx +7 -5
  96. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.html.erb +1 -0
  97. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.jsx +7 -0
  98. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.md +1 -0
  99. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width.html.erb +1 -0
  100. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width.jsx +18 -0
  101. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width_rails.md +1 -0
  102. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width_react.md +1 -0
  103. data/app/pb_kits/playbook/pb_progress_pills/docs/example.yml +2 -0
  104. data/app/pb_kits/playbook/pb_progress_pills/docs/index.js +1 -0
  105. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.html.erb +2 -7
  106. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.rb +6 -0
  107. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.test.js +26 -1
  108. data/app/pb_kits/playbook/pb_progress_simple/progress_simple.html.erb +1 -5
  109. data/app/pb_kits/playbook/pb_progress_step/progress_step.html.erb +1 -5
  110. data/app/pb_kits/playbook/pb_progress_step/progress_step_item.html.erb +3 -7
  111. data/app/pb_kits/playbook/pb_radio/radio.html.erb +6 -11
  112. data/app/pb_kits/playbook/pb_select/index.js +38 -0
  113. data/app/pb_kits/playbook/pb_select/select.rb +8 -0
  114. data/app/pb_kits/playbook/pb_table/docs/_table_with_clickable_rows.html.erb +47 -0
  115. data/app/pb_kits/playbook/pb_table/docs/_table_with_clickable_rows.jsx +88 -0
  116. data/app/pb_kits/playbook/pb_table/docs/_table_with_clickable_rows.md +1 -0
  117. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible.jsx +1 -1
  118. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.html.erb +51 -0
  119. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click_rails.md +2 -0
  120. data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.html.erb +96 -0
  121. data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.jsx +101 -0
  122. data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.md +1 -0
  123. data/app/pb_kits/playbook/pb_table/docs/example.yml +5 -0
  124. data/app/pb_kits/playbook/pb_table/docs/index.js +3 -1
  125. data/app/pb_kits/playbook/pb_table/index.ts +41 -9
  126. data/app/pb_kits/playbook/pb_table/styles/_collapsible.scss +4 -0
  127. data/app/pb_kits/playbook/pb_table/subcomponents/_table_body.tsx +29 -2
  128. data/app/pb_kits/playbook/pb_table/subcomponents/_table_row.tsx +31 -3
  129. data/app/pb_kits/playbook/pb_table/table_body.html.erb +13 -7
  130. data/app/pb_kits/playbook/pb_table/table_body.rb +2 -0
  131. data/app/pb_kits/playbook/pb_table/table_row.html.erb +14 -7
  132. data/app/pb_kits/playbook/pb_table/table_row.rb +14 -1
  133. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_mask.html.erb +15 -1
  134. data/app/pb_kits/playbook/pb_text_input/index.js +60 -82
  135. data/app/pb_kits/playbook/pb_text_input/text_input.rb +5 -2
  136. data/app/pb_kits/playbook/pb_tooltip/index.js +1 -1
  137. data/dist/chunks/{_typeahead-CkemExmL.js → _typeahead-PqkcDf1H.js} +4 -4
  138. data/dist/chunks/_weekday_stacked-BrSrpj7J.js +45 -0
  139. data/dist/chunks/{lib-DjpLC8uO.js → lib-D3us1bGD.js} +2 -2
  140. data/dist/chunks/{pb_form_validation-S56UaHZl.js → pb_form_validation-BpihMSOQ.js} +1 -1
  141. data/dist/chunks/vendor.js +1 -1
  142. data/dist/menu.yml +1 -8
  143. data/dist/playbook-doc.js +1 -1
  144. data/dist/playbook-rails-react-bindings.js +1 -1
  145. data/dist/playbook-rails.js +1 -1
  146. data/dist/playbook.css +1 -1
  147. data/lib/playbook/forms/builder/time_zone_select_field.rb +19 -0
  148. data/lib/playbook/forms/builder.rb +1 -0
  149. data/lib/playbook/version.rb +2 -2
  150. metadata +54 -23
  151. data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.scss +0 -66
  152. data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.tsx +0 -98
  153. data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.html.erb +0 -28
  154. data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.rb +0 -42
  155. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.html.erb +0 -19
  156. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.jsx +0 -26
  157. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.html.erb +0 -10
  158. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.jsx +0 -17
  159. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_on_click.jsx +0 -19
  160. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_onclick.html.erb +0 -16
  161. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.html.erb +0 -35
  162. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.jsx +0 -42
  163. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_tooltip.html.erb +0 -13
  164. data/app/pb_kits/playbook/pb_avatar_action_button/docs/example.yml +0 -15
  165. data/app/pb_kits/playbook/pb_avatar_action_button/docs/index.js +0 -4
  166. data/app/pb_kits/playbook/pb_avatar_action_button/pb_avatar_action_button.test.js +0 -31
  167. data/dist/chunks/_weekday_stacked-CtSzPEH0.js +0 -45
  168. /data/app/pb_kits/playbook/pb_table/docs/{_table_with_collapsible_with_custom_click.md → _table_with_collapsible_with_custom_click_react.md} +0 -0
@@ -0,0 +1,69 @@
1
+ import React, { useState } from "react"
2
+ import { useForm } from "react-hook-form"
3
+ import { Button, Checkbox, Flex, Body } from "playbook-ui"
4
+
5
+ const CheckboxReactHook = () => {
6
+ const { register, handleSubmit } = useForm({
7
+ defaultValues: {
8
+ Small: false,
9
+ Medium: false,
10
+ Large: false,
11
+ },
12
+ })
13
+
14
+ const [submittedData, setSubmittedData] = useState({
15
+ Small: false,
16
+ Medium: false,
17
+ Large: false,
18
+ })
19
+
20
+ const onSubmit = (data) => {
21
+ setSubmittedData(data)
22
+ }
23
+
24
+ return (
25
+ <Flex orientation="row">
26
+ <Flex align="start"
27
+ orientation="column"
28
+ paddingRight="lg"
29
+ >
30
+ <form onSubmit={handleSubmit(onSubmit)}>
31
+ <Checkbox padding="xs"
32
+ text="Small"
33
+ {...register("Small")}
34
+ />
35
+ <br />
36
+ <Checkbox padding="xs"
37
+ text="Medium"
38
+ {...register("Medium")}
39
+ />
40
+ <br />
41
+ <Checkbox padding="xs"
42
+ text="Large"
43
+ {...register("Large")}
44
+ />
45
+ <br />
46
+ <Button htmlType="submit"
47
+ marginTop="sm"
48
+ text="submit"
49
+ />
50
+ </form>
51
+ </Flex>
52
+ <Flex align="start"
53
+ orientation="column"
54
+ >
55
+ <Body padding="xs"
56
+ text={`Small: ${submittedData.Small ? "true" : "false"}`}
57
+ />
58
+ <Body padding="xs"
59
+ text={`Medium: ${submittedData.Medium ? "true" : "false"}`}
60
+ />
61
+ <Body padding="xs"
62
+ text={`Large: ${submittedData.Large ? "true" : "false"}`}
63
+ />
64
+ </Flex>
65
+ </Flex>
66
+ )
67
+ }
68
+
69
+ export default CheckboxReactHook
@@ -0,0 +1 @@
1
+ You can pass react hook props to the checkbox kit.
@@ -11,6 +11,7 @@ examples:
11
11
  react:
12
12
  - checkbox_default: Default
13
13
  - checkbox_checked: Load as checked
14
+ - checkbox_react_hook: React Hook Form
14
15
  - checkbox_custom: Custom Checkbox
15
16
  - checkbox_error: Default w/ Error
16
17
  - checkbox_indeterminate: Indeterminate Checkbox
@@ -21,4 +22,4 @@ examples:
21
22
  - checkbox_error_swift: Default w/ Error
22
23
  - checkbox_indeterminate_swift: Indeterminate Checkbox
23
24
  - checkbox_props_swift: ""
24
-
25
+
@@ -1,5 +1,6 @@
1
1
  export { default as CheckboxDefault } from './_checkbox_default.jsx'
2
2
  export { default as CheckboxCustom } from './_checkbox_custom.jsx'
3
+ export { default as CheckboxReactHook } from './_checkbox_react_hook.jsx'
3
4
  export { default as CheckboxError } from './_checkbox_error.jsx'
4
5
  export { default as CheckboxChecked } from './_checkbox_checked.jsx'
5
6
  export { default as CheckboxIndeterminate } from './_checkbox_indeterminate.jsx'
@@ -21,6 +21,7 @@ type CurrencyProps = {
21
21
  htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
22
22
  id?: string,
23
23
  label?: string,
24
+ nullDisplay?: string,
24
25
  size?: 'sm' | 'md' | 'lg',
25
26
  symbol?: string,
26
27
  variant?: 'default' | 'light' | 'bold',
@@ -49,6 +50,7 @@ const Currency = (props: CurrencyProps): React.ReactElement => {
49
50
  unit,
50
51
  className,
51
52
  label = '',
53
+ nullDisplay = '',
52
54
  size = 'sm',
53
55
  symbol = '$',
54
56
  variant = 'default',
@@ -118,44 +120,57 @@ const Currency = (props: CurrencyProps): React.ReactElement => {
118
120
  id={id}
119
121
  >
120
122
  <Caption dark={dark}>{label}</Caption>
121
-
122
123
  <div className={`pb_currency_wrapper${variantClass || emphasizedClass}`}>
123
124
  {unstyled ? (
124
- <>
125
- <div>{handleNegative}{symbol}</div>
126
- <div>{getAmount}</div>
127
- <div>
128
- {getAbbreviation}
129
- {unit ? unit : getDecimalValue}
130
- </div>
131
- </>
125
+ nullDisplay && !amount ? (
126
+ <div>{nullDisplay}</div>
127
+ ) : (
128
+ <>
129
+ <div>{handleNegative}{symbol}</div>
130
+ <div>{getAmount}</div>
131
+ <div>
132
+ {getAbbreviation}
133
+ {unit ? unit : getDecimalValue}
134
+ </div>
135
+ </>
136
+ )
132
137
  ) : (
133
- <>
134
- <Body
135
- className="dollar_sign"
136
- color="light"
137
- dark={dark}
138
- >
139
- {handleNegative}{symbol}
140
- </Body>
141
-
138
+ nullDisplay && !amount ? (
142
139
  <Title
143
140
  className="pb_currency_value"
144
141
  dark={dark}
145
142
  size={sizes[size]}
146
- >
147
- {getAmount}
148
- </Title>
149
-
150
- <Body
151
- className="unit"
152
- color="light"
153
- dark={dark}
154
- >
155
- {getAbbreviation}
156
- {unit ? unit : getDecimalValue}
157
- </Body>
158
- </>
143
+ >
144
+ {nullDisplay}
145
+ </Title>
146
+ ) : (
147
+ <>
148
+ <Body
149
+ className="dollar_sign"
150
+ color="light"
151
+ dark={dark}
152
+ >
153
+ {handleNegative}{symbol}
154
+ </Body>
155
+
156
+ <Title
157
+ className="pb_currency_value"
158
+ dark={dark}
159
+ size={sizes[size]}
160
+ >
161
+ {getAmount}
162
+ </Title>
163
+
164
+ <Body
165
+ className="unit"
166
+ color="light"
167
+ dark={dark}
168
+ >
169
+ {getAbbreviation}
170
+ {unit ? unit : getDecimalValue}
171
+ </Body>
172
+ </>
173
+ )
159
174
  )}
160
175
  </div>
161
176
  </div>
@@ -1,17 +1,24 @@
1
1
  <%= pb_content_tag do %>
2
2
  <%= pb_rails("caption", props: object.caption_props) %>
3
-
4
3
  <div class=<%= "pb_currency_wrapper#{object.variant_class || object.emphasized_class}" %>>
5
4
  <% if object.unstyled %>
6
- <div><%= object.negative_sign %><%= object.symbol %></div>
7
- <div><%= object.title_props[:text] %></div>
8
- <div><%= object.body_props[:text] %></div>
5
+ <% if object.null_display && object.amount.blank? %>
6
+ <div><%= object.null_display %></div>
7
+ <% else %>
8
+ <div><%= object.negative_sign %><%= object.symbol %></div>
9
+ <div><%= object.title_props[:text] %></div>
10
+ <div><%= object.body_props[:text] %></div>
11
+ <% end %>
9
12
  <% else %>
10
- <%= pb_rails("body", props: object.currency_wrapper_props) do %>
11
- <%= object.negative_sign %><%= object.symbol %>
13
+ <% if object.null_display && object.amount.blank? %>
14
+ <%= pb_rails("title", props: object.title_props) %>
15
+ <% else %>
16
+ <%= pb_rails("body", props: object.currency_wrapper_props) do %>
17
+ <%= object.negative_sign %><%= object.symbol %>
18
+ <% end %>
19
+ <%= pb_rails("title", props: object.title_props) %>
20
+ <%= pb_rails("body", props: object.body_props) %>
12
21
  <% end %>
13
- <%= pb_rails("title", props: object.title_props) %>
14
- <%= pb_rails("body", props: object.body_props) %>
15
22
  <% end %>
16
23
  </div>
17
24
  <% end %>
@@ -46,6 +46,9 @@ module Playbook
46
46
  prop :comma_separator, type: Playbook::Props::Boolean,
47
47
  default: false
48
48
 
49
+ prop :null_display, type: Playbook::Props::String,
50
+ required: false
51
+
49
52
  def classname
50
53
  generate_classname("pb_currency_kit", align, size, dark_class)
51
54
  end
@@ -65,10 +68,20 @@ module Playbook
65
68
  }
66
69
  end
67
70
 
71
+ def title_text
72
+ if null_display
73
+ null_display
74
+ elsif swap_negative
75
+ absolute_amount(abbr_or_format_amount)
76
+ else
77
+ abbr_or_format_amount
78
+ end
79
+ end
80
+
68
81
  def title_props
69
82
  {
70
83
  size: size_value,
71
- text: swap_negative ? absolute_amount(abbr_or_format_amount) : abbr_or_format_amount,
84
+ text: title_text,
72
85
  classname: "pb_currency_value",
73
86
  dark: dark,
74
87
  }
@@ -145,8 +158,10 @@ module Playbook
145
158
  1
146
159
  when "md"
147
160
  3
148
- else
161
+ when "sm"
149
162
  4
163
+ else
164
+ 3
150
165
  end
151
166
  end
152
167
 
@@ -0,0 +1,22 @@
1
+ <%= pb_rails("currency", props: {
2
+ amount: "",
3
+ label: "Nil",
4
+ margin_bottom: "md",
5
+ null_display: "--",
6
+ size: "sm"
7
+ }) %>
8
+
9
+ <%= pb_rails("currency", props: {
10
+ amount: "",
11
+ label: "Nil",
12
+ margin_bottom: "md",
13
+ null_display: "$0.00",
14
+ size: "sm"
15
+ }) %>
16
+
17
+ <%= pb_rails("currency", props: {
18
+ amount: "",
19
+ label: "Nil",
20
+ null_display: " ",
21
+ size: "sm"
22
+ }) %>
@@ -0,0 +1,34 @@
1
+ import React from 'react'
2
+ import { Currency } from 'playbook-ui'
3
+
4
+ const CurrencyNullDisplay = (props) => {
5
+ return (
6
+ <>
7
+ <Currency
8
+ amount=""
9
+ label="Null"
10
+ marginBottom="md"
11
+ nullDisplay="--"
12
+ {...props}
13
+ />
14
+
15
+ <Currency
16
+ amount=""
17
+ label="Null"
18
+ marginBottom="md"
19
+ nullDisplay="$0.00"
20
+ {...props}
21
+ />
22
+
23
+ <Currency
24
+ amount=""
25
+ label="Null"
26
+ marginBottom="md"
27
+ nullDisplay=" "
28
+ {...props}
29
+ />
30
+ </>
31
+ )
32
+ }
33
+
34
+ export default CurrencyNullDisplay
@@ -0,0 +1 @@
1
+ To customize how the `amount` field appears when it is empty, use the `null_display` prop and set it to the desired value you want to display.
@@ -0,0 +1 @@
1
+ To customize how the `amount` field appears when it is empty, use the `nullDisplay` prop and set it to the desired value you want to display.
@@ -10,6 +10,7 @@ examples:
10
10
  - currency_unstyled: Unstyled
11
11
  - currency_comma_separator: Comma Separator
12
12
  - currency_negative: Negative
13
+ - currency_null_display: Null Display
13
14
 
14
15
  react:
15
16
  - currency_variants: Variants
@@ -21,6 +22,7 @@ examples:
21
22
  - currency_unstyled: Unstyled
22
23
  - currency_comma_separator: Comma Separator
23
24
  - currency_negative: Negative
25
+ - currency_null_display: Null Display
24
26
 
25
27
  swift:
26
28
  - currency_size_swift: Size
@@ -6,4 +6,5 @@ export { default as CurrencyAbbreviated } from './_currency_abbreviated.jsx'
6
6
  export { default as CurrencyMatchingDecimals } from './_currency_matching_decimals.jsx'
7
7
  export { default as CurrencyUnstyled } from './_currency_unstyled.jsx'
8
8
  export { default as CurrencyCommaSeparator } from './_currency_comma_separator.jsx'
9
- export { default as CurrencyNegative } from './_currency_negative.jsx'
9
+ export { default as CurrencyNegative } from './_currency_negative.jsx'
10
+ export { default as CurrencyNullDisplay } from './_currency_null_display.jsx'
@@ -29,6 +29,7 @@ type DatePickerProps = {
29
29
  hideLabel?: boolean,
30
30
  htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
31
31
  id?: string,
32
+ initializeOnce?: boolean,
32
33
  inLine?: boolean,
33
34
  inputAria?: { [key: string]: string },
34
35
  inputData?: { [key: string]: string },
@@ -73,6 +74,7 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
73
74
  hideLabel = false,
74
75
  htmlOptions = {},
75
76
  id,
77
+ initializeOnce = false,
76
78
  inLine = false,
77
79
  inputAria = {},
78
80
  inputData = {},
@@ -134,7 +136,7 @@ useEffect(() => {
134
136
  yearRange,
135
137
  required: false,
136
138
  }, scrollContainer)
137
- })
139
+ }, initializeOnce ? [] : undefined)
138
140
  const filteredProps = {...props}
139
141
  if (filteredProps.marginBottom === undefined) {
140
142
  filteredProps.marginBottom = "sm"
@@ -0,0 +1,99 @@
1
+ <% containers = [
2
+ "To Do",
3
+ "In Progress",
4
+ "Done"
5
+ ] %>
6
+
7
+ <% items_data = [
8
+ {
9
+ id: "11",
10
+ container: "To Do",
11
+ title: "Task 1",
12
+ description: "Bug fixes",
13
+ assignee_name: "Terry Miles",
14
+ assignee_img: "https://randomuser.me/api/portraits/men/44.jpg",
15
+ },
16
+ {
17
+ id: "12",
18
+ container: "To Do",
19
+ title: "Task 2",
20
+ description: "Documentation",
21
+ assignee_name: "Sophia Miles",
22
+ assignee_img: "https://randomuser.me/api/portraits/women/8.jpg",
23
+ },
24
+ {
25
+ id: "13",
26
+ container: "In Progress",
27
+ title: "Task 3",
28
+ description: "Add a variant",
29
+ assignee_name: "Alice Jones",
30
+ assignee_img: "https://randomuser.me/api/portraits/women/10.jpg",
31
+ },
32
+ {
33
+ id: "14",
34
+ container: "To Do",
35
+ title: "Task 4",
36
+ description: "Add jest tests",
37
+ assignee_name: "Mike James",
38
+ assignee_img: "https://randomuser.me/api/portraits/men/8.jpg",
39
+ },
40
+ {
41
+ id: "15",
42
+ container: "Done",
43
+ title: "Task 5",
44
+ description: "Alpha testing",
45
+ assignee_name: "James Guy",
46
+ assignee_img: "https://randomuser.me/api/portraits/men/18.jpg",
47
+ },
48
+ {
49
+ id: "16",
50
+ container: "In Progress",
51
+ title: "Task 6",
52
+ description: "Release",
53
+ assignee_name: "Sally Jones",
54
+ assignee_img: "https://randomuser.me/api/portraits/women/28.jpg",
55
+ },
56
+ ] %>
57
+
58
+ <%= pb_rails("draggable", props: { initial_items: items_data }) do %>
59
+ <%= pb_rails("flex", props: { justify_content: "center" }) do %>
60
+ <% containers.each do |container| %>
61
+ <%= pb_rails("draggable/draggable_container", props: {
62
+ container: container,
63
+ width: "xs",
64
+ padding: "sm",
65
+ data: { container: container }
66
+ }) do %>
67
+ <%= pb_rails("caption", props: { text_align: "center" }) do %><%= container %><% end %>
68
+ <%= pb_rails("flex", props: {align_items: "stretch", orientation: "column"}) do %>
69
+ <% items_data.select { |item| item[:container] == container }.each do |item| %>
70
+ <%= pb_rails("draggable/draggable_item", props: {
71
+ container: container,
72
+ drag_id: item[:id]
73
+ }) do %>
74
+ <%= pb_rails("card", props: { margin_bottom: "sm", padding: "sm"}) do %>
75
+ <%= pb_rails("flex", props: { justify: "between" }) do %>
76
+ <%= pb_rails("flex/flex_item") do %>
77
+ <%= pb_rails("flex") do %>
78
+ <%= pb_rails("avatar", props: {
79
+ image_url: item[:assignee_img],
80
+ name: item[:assignee_name],
81
+ size: "xxs"
82
+ }) %>
83
+ <%= pb_rails("title", props: {
84
+ padding_left: "xs",
85
+ size: 4,
86
+ text: item[:title]
87
+ }) %>
88
+ <% end %>
89
+ <% end %>
90
+ <% end %>
91
+ <%= pb_rails("body", props: { padding_top: "xs", text: item[:description] }) %>
92
+ <% end %>
93
+ <% end %>
94
+ <% end %>
95
+ <% end %>
96
+ <% end %>
97
+ <% end %>
98
+ <% end %>
99
+ <% end %>
@@ -0,0 +1 @@
1
+ The Draggable kit can also be used to achieve more complex, multiple container functionality as shown here. This complex usage requires the full subcomponent structure.
@@ -0,0 +1,61 @@
1
+ <% initial_items = [
2
+ {
3
+ id: "1",
4
+ title: "Task 1",
5
+ assignee_name: "Terry Miles",
6
+ assignee_img: "https://randomuser.me/api/portraits/men/44.jpg",
7
+ },
8
+ {
9
+ id: "2",
10
+ title: "Task 2",
11
+ assignee_name: "Sophia Miles",
12
+ assignee_img: "https://randomuser.me/api/portraits/women/8.jpg",
13
+ },
14
+ {
15
+ id: "3",
16
+ title: "Task 3",
17
+ assignee_name: "Alice Jones",
18
+ assignee_img: "https://randomuser.me/api/portraits/women/10.jpg",
19
+ },
20
+ {
21
+ id: "4",
22
+ title: "Task 4",
23
+ assignee_name: "Mike James",
24
+ assignee_img: "https://randomuser.me/api/portraits/men/8.jpg",
25
+ },
26
+ {
27
+ id: "5",
28
+ title: "Task 5",
29
+ assignee_name: "James Guy",
30
+ assignee_img: "https://randomuser.me/api/portraits/men/18.jpg",
31
+ }
32
+ ] %>
33
+
34
+
35
+
36
+ <%= pb_rails("draggable", props: {initial_items: initial_items}) do %>
37
+ <%= pb_rails("table", props: { size: "sm", responsive:"none" }) do %>
38
+ <%= pb_rails("table/table_head") do %>
39
+ <%= pb_rails("table/table_row") do %>
40
+ <%= pb_rails("table/table_header", props: { text: "id"}) %>
41
+ <%= pb_rails("table/table_header", props: { text: "name"}) %>
42
+ <%= pb_rails("table/table_header", props: { text: "task number"}) %>
43
+ <% end %>
44
+ <% end %>
45
+
46
+ <%= pb_rails("table/table_body", props: {draggable_container: true}) do %>
47
+ <% initial_items.each do |item| %>
48
+ <%= pb_rails("table/table_row", props:{drag_id: item[:id], draggable_item: true}) do %>
49
+ <%= pb_rails("table/table_cell", props: { text: item[:id]}) %>
50
+ <%= pb_rails("table/table_cell") do %>
51
+ <%= pb_rails("flex", props:{align:"center"}) do %>
52
+ <%= pb_rails("avatar", props: {size: "xs", image_url: item[:assignee_img]}) %>
53
+ <%= pb_rails("body", props: {text: item[:assignee_name], padding_left:"sm"}) %>
54
+ <% end %>
55
+ <% end %>
56
+ <%= pb_rails("table/table_cell", props: { text: item[:title]}) %>
57
+ <% end %>
58
+ <% end %>
59
+ <% end %>
60
+ <% end %>
61
+ <% end %>
@@ -0,0 +1,4 @@
1
+ The draggable kit can also be used in conjunction with the table kit to create draggable table rows. To do this:
2
+
3
+ - use the `draggable_container` prop on the table/table_body to designate it as the Draggable Container
4
+ - use the `draggable_item` prop on the table/table_row to designate it as the Draggable Item. Make sure to also pass id to the `drag_id` prop here.
@@ -0,0 +1,90 @@
1
+ import React, { useState } from "react";
2
+ import { Flex, Table, Body, Avatar, DraggableProvider } from "playbook-ui";
3
+
4
+ // Initial items to be dragged
5
+ const data = [
6
+ {
7
+ id: "1",
8
+ task: "Task 1",
9
+ assignee_name: "Terry Miles",
10
+ assignee_img: "https://randomuser.me/api/portraits/men/44.jpg",
11
+ },
12
+ {
13
+ id: "2",
14
+ task: "Task 2",
15
+ assignee_name: "Sophia Miles",
16
+ assignee_img: "https://randomuser.me/api/portraits/women/8.jpg",
17
+ },
18
+ {
19
+ id: "3",
20
+ task: "Task 3",
21
+ assignee_name: "Alice Jones",
22
+ assignee_img: "https://randomuser.me/api/portraits/women/10.jpg",
23
+ },
24
+ {
25
+ id: "4",
26
+ task: "Task 4",
27
+ assignee_name: "Mike James",
28
+ assignee_img: "https://randomuser.me/api/portraits/men/8.jpg",
29
+ },
30
+ {
31
+ id: "5",
32
+ task: "Task 5",
33
+ assignee_name: "James Guy",
34
+ assignee_img: "https://randomuser.me/api/portraits/men/18.jpg",
35
+ }
36
+ ];
37
+
38
+ const DraggableWithTableReact = (props) => {
39
+ const [initialState, setInitialState] = useState(data);
40
+
41
+ return (
42
+ <>
43
+ <DraggableProvider initialItems={data}
44
+ onReorder={(items) => setInitialState(items)}
45
+ >
46
+ <Table
47
+ responsive="none"
48
+ size="sm"
49
+ {...props}
50
+ >
51
+ <Table.Head>
52
+ <Table.Row>
53
+ <Table.Header>{"id"}</Table.Header>
54
+ <Table.Header>{"name"}</Table.Header>
55
+ <Table.Header>{"task number"}</Table.Header>
56
+ </Table.Row>
57
+ </Table.Head>
58
+ <Table.Body draggableContainer>
59
+ {initialState.map(({ id, task, assignee_name, assignee_img }) => (
60
+ <Table.Row
61
+ dragId={id}
62
+ draggableItem
63
+ key={id}
64
+ >
65
+ <Table.Cell>{id}</Table.Cell>
66
+ <Table.Cell>
67
+ <Flex align="center">
68
+ <Avatar
69
+ imageUrl={assignee_img}
70
+ size="xs"
71
+ />
72
+ <Body
73
+ paddingLeft="xxs"
74
+ text={assignee_name}
75
+ {...props}
76
+ />
77
+ </Flex>
78
+ </Table.Cell>
79
+ <Table.Cell>{task}</Table.Cell>
80
+ </Table.Row>
81
+ ))}
82
+ </Table.Body>
83
+ </Table>
84
+ </DraggableProvider>
85
+ </>
86
+
87
+ );
88
+ };
89
+
90
+ export default DraggableWithTableReact;
@@ -0,0 +1,5 @@
1
+ The draggable kit can also be used in conjunction with the table kit to create draggable table rows. To do this:
2
+
3
+ - Wrap the Table with the `DraggableProvider` and manage state as shown.
4
+ - use the `draggableContainer` prop on the Table.Body to designate it as the Draggable Container
5
+ - use the `draggableItem` prop on the Table.Row to designate it as the Draggable Item. Make sure to also pass id to the `dragId` prop here.