playbook_ui 14.13.0 → 14.14.0.pre.alpha.PBNTR890typeahead6390

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 (185) 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 +3 -0
  4. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +6 -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_rails.md +3 -1
  9. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_react.md +1 -1
  10. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.html.erb +33 -0
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header_rails.md +3 -0
  12. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +2 -0
  13. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +2 -1
  14. data/app/pb_kits/playbook/pb_bar_graph/BarGraphStyles.scss +58 -0
  15. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.jsx +64 -0
  16. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.md +1 -0
  17. data/app/pb_kits/playbook/pb_bar_graph/docs/example.yml +1 -0
  18. data/app/pb_kits/playbook/pb_bar_graph/docs/index.js +1 -0
  19. data/app/pb_kits/playbook/pb_checkbox/_checkbox.tsx +17 -8
  20. data/app/pb_kits/playbook/pb_checkbox/checkbox.test.js +16 -0
  21. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_react_hook.jsx +69 -0
  22. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_react_hook.md +1 -0
  23. data/app/pb_kits/playbook/pb_checkbox/docs/example.yml +2 -1
  24. data/app/pb_kits/playbook/pb_checkbox/docs/index.js +1 -0
  25. data/app/pb_kits/playbook/pb_currency/_currency.tsx +46 -31
  26. data/app/pb_kits/playbook/pb_currency/currency.html.erb +15 -8
  27. data/app/pb_kits/playbook/pb_currency/currency.rb +17 -2
  28. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.html.erb +22 -0
  29. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.jsx +34 -0
  30. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display_rails.md +1 -0
  31. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display_react.md +1 -0
  32. data/app/pb_kits/playbook/pb_currency/docs/example.yml +2 -0
  33. data/app/pb_kits/playbook/pb_currency/docs/index.js +2 -1
  34. data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +3 -1
  35. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.html.erb +2 -2
  36. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.md +4 -1
  37. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.jsx +90 -0
  38. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.md +5 -0
  39. data/app/pb_kits/playbook/pb_draggable/docs/example.yml +2 -0
  40. data/app/pb_kits/playbook/pb_draggable/docs/index.js +2 -1
  41. data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableContainer.tsx +7 -4
  42. data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableItem.tsx +6 -3
  43. data/app/pb_kits/playbook/pb_drawer/_drawer.scss +32 -8
  44. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.html.erb +8 -0
  45. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.html.erb +33 -0
  46. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +0 -0
  47. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.html.erb +20 -1
  48. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.html.erb +24 -0
  49. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.html.erb +21 -0
  50. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.md +1 -0
  51. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.html.erb +49 -0
  52. data/app/pb_kits/playbook/pb_drawer/docs/example.yml +5 -0
  53. data/app/pb_kits/playbook/pb_drawer/drawer.html.erb +20 -12
  54. data/app/pb_kits/playbook/pb_drawer/drawer.rb +49 -1
  55. data/app/pb_kits/playbook/pb_drawer/index.js +257 -0
  56. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -0
  57. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +2 -1
  58. data/app/pb_kits/playbook/pb_icon_button/_icon_button.tsx +71 -0
  59. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_default.html.erb +1 -2
  60. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_default.jsx +17 -0
  61. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_sizes.html.erb +27 -0
  62. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_sizes.jsx +61 -0
  63. data/app/pb_kits/playbook/pb_icon_button/docs/example.yml +5 -3
  64. data/app/pb_kits/playbook/pb_icon_button/docs/index.js +2 -0
  65. data/app/pb_kits/playbook/pb_icon_button/icon_button.html.erb +1 -1
  66. data/app/pb_kits/playbook/pb_icon_button/icon_button.rb +3 -0
  67. data/app/pb_kits/playbook/pb_icon_button/icon_button.test.jsx +39 -0
  68. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.html.erb +1 -6
  69. data/app/pb_kits/playbook/pb_nav/item.html.erb +7 -19
  70. data/app/pb_kits/playbook/pb_nav/nav.html.erb +3 -8
  71. data/app/pb_kits/playbook/pb_online_status/online_status.html.erb +1 -6
  72. data/app/pb_kits/playbook/pb_overlay/_overlay.tsx +4 -0
  73. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.html.erb +11 -0
  74. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.jsx +37 -0
  75. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.md +1 -0
  76. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional_react.md +1 -0
  77. data/app/pb_kits/playbook/pb_overlay/docs/example.yml +2 -0
  78. data/app/pb_kits/playbook/pb_overlay/docs/index.js +1 -0
  79. data/app/pb_kits/playbook/pb_overlay/index.js +61 -0
  80. data/app/pb_kits/playbook/pb_overlay/overlay.html.erb +5 -3
  81. data/app/pb_kits/playbook/pb_overlay/overlay.rb +9 -0
  82. data/app/pb_kits/playbook/pb_overlay/subcomponents/_overlay_token.tsx +48 -10
  83. data/app/pb_kits/playbook/pb_popover/popover.html.erb +1 -6
  84. data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.scss +6 -1
  85. data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.tsx +7 -5
  86. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.html.erb +1 -0
  87. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.jsx +7 -0
  88. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.md +1 -0
  89. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width.html.erb +1 -0
  90. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width.jsx +18 -0
  91. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width_rails.md +1 -0
  92. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width_react.md +1 -0
  93. data/app/pb_kits/playbook/pb_progress_pills/docs/example.yml +2 -0
  94. data/app/pb_kits/playbook/pb_progress_pills/docs/index.js +1 -0
  95. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.html.erb +2 -7
  96. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.rb +6 -0
  97. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.test.js +26 -1
  98. data/app/pb_kits/playbook/pb_progress_simple/progress_simple.html.erb +1 -5
  99. data/app/pb_kits/playbook/pb_progress_step/progress_step.html.erb +1 -5
  100. data/app/pb_kits/playbook/pb_progress_step/progress_step_item.html.erb +3 -7
  101. data/app/pb_kits/playbook/pb_radio/radio.html.erb +6 -11
  102. data/app/pb_kits/playbook/pb_select/index.js +38 -0
  103. data/app/pb_kits/playbook/pb_select/select.rb +8 -0
  104. data/app/pb_kits/playbook/pb_table/docs/_table_with_clickable_rows.html.erb +47 -0
  105. data/app/pb_kits/playbook/pb_table/docs/_table_with_clickable_rows.jsx +88 -0
  106. data/app/pb_kits/playbook/pb_table/docs/_table_with_clickable_rows.md +1 -0
  107. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible.jsx +1 -1
  108. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.html.erb +51 -0
  109. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click_rails.md +2 -0
  110. data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.html.erb +96 -0
  111. data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.jsx +101 -0
  112. data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.md +1 -0
  113. data/app/pb_kits/playbook/pb_table/docs/example.yml +5 -0
  114. data/app/pb_kits/playbook/pb_table/docs/index.js +3 -1
  115. data/app/pb_kits/playbook/pb_table/index.ts +41 -9
  116. data/app/pb_kits/playbook/pb_table/styles/_collapsible.scss +4 -0
  117. data/app/pb_kits/playbook/pb_table/subcomponents/_table_body.tsx +29 -2
  118. data/app/pb_kits/playbook/pb_table/subcomponents/_table_row.tsx +31 -3
  119. data/app/pb_kits/playbook/pb_table/table_body.html.erb +13 -7
  120. data/app/pb_kits/playbook/pb_table/table_body.rb +2 -0
  121. data/app/pb_kits/playbook/pb_table/table_row.html.erb +14 -7
  122. data/app/pb_kits/playbook/pb_table/table_row.rb +14 -1
  123. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_mask.html.erb +14 -0
  124. data/app/pb_kits/playbook/pb_text_input/index.js +9 -0
  125. data/app/pb_kits/playbook/pb_text_input/text_input.rb +5 -2
  126. data/app/pb_kits/playbook/pb_title/_title.scss +35 -0
  127. data/app/pb_kits/playbook/pb_title/_title.tsx +10 -1
  128. data/app/pb_kits/playbook/pb_title/docs/_title_default.html.erb +1 -2
  129. data/app/pb_kits/playbook/pb_title/docs/_title_default.jsx +1 -1
  130. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.html.erb +7 -0
  131. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.jsx +54 -0
  132. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.md +1 -0
  133. data/app/pb_kits/playbook/pb_title/docs/example.yml +2 -0
  134. data/app/pb_kits/playbook/pb_title/docs/index.js +1 -0
  135. data/app/pb_kits/playbook/pb_title/title.rb +10 -1
  136. data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +0 -3
  137. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_delay_rails.html.erb +39 -0
  138. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_delay_rails.md +3 -0
  139. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_interaction.html.erb +26 -0
  140. data/app/pb_kits/playbook/pb_tooltip/docs/example.yml +2 -0
  141. data/app/pb_kits/playbook/pb_tooltip/floating_ui.js +282 -0
  142. data/app/pb_kits/playbook/pb_tooltip/index.js +2 -2
  143. data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +10 -2
  144. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +34 -1
  145. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options.html.erb +45 -0
  146. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options.md +5 -0
  147. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options_pure_rails.html.erb +33 -0
  148. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options_pure_rails.md +3 -0
  149. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +2 -0
  150. data/app/pb_kits/playbook/pb_typeahead/index.ts +61 -8
  151. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +13 -1
  152. data/dist/chunks/{_typeahead-btjo1UN5.js → _typeahead-DkFE6eZr.js} +4 -4
  153. data/dist/chunks/_weekday_stacked-BXq4AGmy.js +45 -0
  154. data/dist/chunks/lazysizes-B7xYodB-.js +1 -0
  155. data/dist/chunks/{lib-DjpLC8uO.js → lib-Dmay5Z6U.js} +2 -2
  156. data/dist/chunks/{pb_form_validation-S56UaHZl.js → pb_form_validation-DdP7BnVX.js} +1 -1
  157. data/dist/chunks/vendor.js +1 -1
  158. data/dist/menu.yml +3 -10
  159. data/dist/playbook-doc.js +1 -1
  160. data/dist/playbook-rails-react-bindings.js +1 -1
  161. data/dist/playbook-rails.js +1 -1
  162. data/dist/playbook.css +1 -1
  163. data/lib/playbook/forms/builder/time_zone_select_field.rb +19 -0
  164. data/lib/playbook/forms/builder.rb +1 -0
  165. data/lib/playbook/version.rb +2 -2
  166. metadata +67 -24
  167. data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.scss +0 -66
  168. data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.tsx +0 -98
  169. data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.html.erb +0 -28
  170. data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.rb +0 -42
  171. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.html.erb +0 -19
  172. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.jsx +0 -26
  173. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.html.erb +0 -10
  174. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.jsx +0 -17
  175. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_on_click.jsx +0 -19
  176. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_onclick.html.erb +0 -16
  177. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.html.erb +0 -35
  178. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.jsx +0 -42
  179. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_tooltip.html.erb +0 -13
  180. data/app/pb_kits/playbook/pb_avatar_action_button/docs/example.yml +0 -15
  181. data/app/pb_kits/playbook/pb_avatar_action_button/docs/index.js +0 -4
  182. data/app/pb_kits/playbook/pb_avatar_action_button/pb_avatar_action_button.test.js +0 -31
  183. data/dist/chunks/_weekday_stacked-DeYS_l8v.js +0 -45
  184. data/dist/chunks/lazysizes-DHz07jlL.js +0 -1
  185. /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
@@ -2,6 +2,7 @@ import PbEnhancedElement from '../pb_enhanced_element'
2
2
 
3
3
  const TABLE_WRAPPER_SELECTOR = "[data-pb-table-wrapper]";
4
4
  const TABLE_COLLAPSIBLE_WRAPPER_SELECTOR = "[data-pb-table-collapsible-wrapper]";
5
+ const TABLE_COLLAPSIBLE_CELL_SELECTOR = "[data-pb-table-collapsible-cell-id]";
5
6
 
6
7
  export default class PbTable extends PbEnhancedElement {
7
8
  stickyLeftColumns: string[] = [];
@@ -158,18 +159,49 @@ export default class PbTable extends PbEnhancedElement {
158
159
  }
159
160
 
160
161
  handleCollapsibleClick() {
162
+ const cells = this.element.querySelectorAll(TABLE_COLLAPSIBLE_CELL_SELECTOR);
161
163
  const collapsibleElements = this.element.querySelectorAll(TABLE_COLLAPSIBLE_WRAPPER_SELECTOR);
162
- collapsibleElements.forEach((collapsibleElement) => {
163
- collapsibleElement.addEventListener('click', (event) => {
164
- document.dispatchEvent(new CustomEvent(`collapsed-toggle${(event.currentTarget as HTMLElement).id}`))
165
-
166
- const toggleElements = this.element.querySelectorAll(`.collapsible_border_toggle${(event.currentTarget as HTMLElement).id}`);
167
- toggleElements.forEach(element => {
168
- element.classList.toggle('no-border');
169
- element.classList.toggle('border-active');
164
+
165
+ if (cells.length > 0) {
166
+ cells.forEach((cell) => {
167
+ const cellId = (cell as HTMLElement).dataset.pbTableCollapsibleCellId;
168
+
169
+ Array.from(cell.children).forEach((child) => {
170
+ if (child.id === cellId) {
171
+ Array.from(child.children).forEach((svgChild) => {
172
+ svgChild.id = cellId; // Assign cellId to SVG child
173
+ Array.from(svgChild.children).forEach((pathChild) => {
174
+ pathChild.id = cellId; // Assign cellId to path child
175
+ });
176
+ });
177
+ }
178
+ });
179
+ cell.addEventListener('click', (event) => {
180
+ if ((event.target as HTMLElement).id) {
181
+ document.dispatchEvent(new CustomEvent(`collapsed-toggle${(event.currentTarget as HTMLElement).id}`));
182
+
183
+ const toggleElements = this.element.querySelectorAll(`.collapsible_border_toggle${(event.currentTarget as HTMLElement).id}`);
184
+ toggleElements.forEach((element) => {
185
+ element.classList.toggle('no-border');
186
+ element.classList.toggle('border-active');
187
+ });
188
+ }
170
189
  });
190
+ });
191
+
192
+ } else {
193
+ collapsibleElements.forEach((collapsibleElement) => {
194
+ collapsibleElement.addEventListener('click', (event) => {
195
+ document.dispatchEvent(new CustomEvent(`collapsed-toggle${(event.currentTarget as HTMLElement).id}`))
196
+
197
+ const toggleElements = this.element.querySelectorAll(`.collapsible_border_toggle${(event.currentTarget as HTMLElement).id}`);
198
+ toggleElements.forEach(element => {
199
+ element.classList.toggle('no-border');
200
+ element.classList.toggle('border-active');
201
+ });
202
+ })
171
203
  })
172
- })
204
+ }
173
205
  }
174
206
 
175
207
  handleCollapsibleRow() {
@@ -37,6 +37,10 @@
37
37
  cursor: pointer;
38
38
  }
39
39
 
40
+ .collapsible_cell {
41
+ cursor: default;
42
+ }
43
+
40
44
  .no-border {
41
45
  border-bottom: none !important;
42
46
  }
@@ -7,11 +7,14 @@ import {
7
7
  } from "../../utilities/props";
8
8
  import { globalProps } from "../../utilities/globalProps";
9
9
 
10
+ import Draggable from "../../pb_draggable/_draggable"
11
+
10
12
  type TableBodyPropTypes = {
11
13
  aria?: { [key: string]: string };
12
14
  children: React.ReactNode[] | React.ReactNode;
13
15
  className: string;
14
16
  data?: { [key: string]: string };
17
+ draggableContainer?: boolean;
15
18
  htmlOptions?: { [key: string]: string | number | boolean | (() => void) };
16
19
  id?: string;
17
20
  tag?: "table" | "div";
@@ -23,6 +26,7 @@ const TableBody = (props: TableBodyPropTypes): React.ReactElement => {
23
26
  children,
24
27
  className,
25
28
  data = {},
29
+ draggableContainer = false,
26
30
  htmlOptions = {},
27
31
  id,
28
32
  tag = "table",
@@ -37,7 +41,30 @@ const TableBody = (props: TableBodyPropTypes): React.ReactElement => {
37
41
  return (
38
42
  <>
39
43
  {isTableTag ? (
40
- <tbody
44
+ draggableContainer ? (
45
+ <Draggable.Container
46
+ {...ariaProps}
47
+ {...dataProps}
48
+ {...htmlProps}
49
+ className={classes}
50
+ id={id}
51
+ tag="tbody"
52
+ >
53
+ {children}
54
+ </Draggable.Container>
55
+ ) : (
56
+ <tbody
57
+ {...ariaProps}
58
+ {...dataProps}
59
+ {...htmlProps}
60
+ className={classes}
61
+ id={id}
62
+ >
63
+ {children}
64
+ </tbody>
65
+ )
66
+ ) : draggableContainer ? (
67
+ <Draggable.Container
41
68
  {...ariaProps}
42
69
  {...dataProps}
43
70
  {...htmlProps}
@@ -45,7 +72,7 @@ const TableBody = (props: TableBodyPropTypes): React.ReactElement => {
45
72
  id={id}
46
73
  >
47
74
  {children}
48
- </tbody>
75
+ </Draggable.Container>
49
76
  ) : (
50
77
  <div
51
78
  {...ariaProps}
@@ -9,6 +9,7 @@ import {
9
9
  import { globalProps } from "../../utilities/globalProps";
10
10
  import Collapsible from "../../pb_collapsible/_collapsible";
11
11
  import useCollapsible from "../../pb_collapsible/useCollapsible";
12
+ import Draggable from "../../pb_draggable/_draggable";
12
13
 
13
14
  type TableRowPropTypes = {
14
15
  aria?: { [key: string]: string };
@@ -19,6 +20,8 @@ type TableRowPropTypes = {
19
20
  collapsibleSideHighlight?: boolean;
20
21
  data?: { [key: string]: string };
21
22
  dark?: boolean;
23
+ dragId?: string;
24
+ draggableItem?: boolean;
22
25
  htmlOptions?: { [key: string]: string | number | boolean | (() => void) };
23
26
  id?: string;
24
27
  toggleCellId?: string;
@@ -36,6 +39,8 @@ const TableRow = (props: TableRowPropTypes): React.ReactElement => {
36
39
  className,
37
40
  data = {},
38
41
  dark = false,
42
+ dragId,
43
+ draggableItem = false,
39
44
  htmlOptions = {},
40
45
  id,
41
46
  toggleCellId,
@@ -152,15 +157,38 @@ const TableRow = (props: TableRowPropTypes): React.ReactElement => {
152
157
  </>
153
158
  )
154
159
  ) : isTableTag ? (
155
- <tr
160
+ draggableItem ? (
161
+ <Draggable.Item
162
+ {...ariaProps}
163
+ {...dataProps}
164
+ {...htmlProps}
165
+ className={classes}
166
+ dragId={dragId}
167
+ tag="tr"
168
+ >
169
+ {children}
170
+ </Draggable.Item>
171
+ ) : (
172
+ <tr
173
+ {...ariaProps}
174
+ {...dataProps}
175
+ {...htmlProps}
176
+ className={classes}
177
+ id={id}
178
+ >
179
+ {children}
180
+ </tr>
181
+ )
182
+ ) : draggableItem ? (
183
+ <Draggable.Item
156
184
  {...ariaProps}
157
185
  {...dataProps}
158
186
  {...htmlProps}
159
187
  className={classes}
160
- id={id}
188
+ dragId={dragId}
161
189
  >
162
190
  {children}
163
- </tr>
191
+ </Draggable.Item>
164
192
  ) : (
165
193
  <div
166
194
  {...ariaProps}
@@ -1,11 +1,17 @@
1
1
  <% if object.tag == "table" %>
2
- <%= content_tag(:tbody,
3
- aria: object.aria,
4
- class: object.classname,
5
- data: object.data,
6
- id: object.id,
7
- **combined_html_options) do %>
8
- <%= content.presence %>
2
+ <% if object.draggable_container %>
3
+ <%= pb_rails("draggable/draggable_container", props: { tag: "tbody", classname: object.classname, data: object.data }) do %>
4
+ <%= content.presence %>
5
+ <% end %>
6
+ <% else %>
7
+ <%= content_tag(:tbody,
8
+ aria: object.aria,
9
+ class: object.classname,
10
+ data: object.data,
11
+ id: object.id,
12
+ **combined_html_options) do %>
13
+ <%= content.presence %>
14
+ <% end %>
9
15
  <% end %>
10
16
  <% else %>
11
17
  <%= content_tag(:div,
@@ -6,6 +6,8 @@ module Playbook
6
6
  prop :tag, type: Playbook::Props::Enum,
7
7
  values: %w[table div],
8
8
  default: "table"
9
+ prop :draggable_container, type: Playbook::Props::Boolean,
10
+ default: false
9
11
 
10
12
  def classname
11
13
  generate_classname("pb_table_tbody")
@@ -5,6 +5,7 @@
5
5
  data: object.data.merge(id: object.id),
6
6
  id: object.id,
7
7
  'data-pb-table-collapsible-wrapper' => true,
8
+ 'data-pb-table-collapsible-cell-id' => object.toggle_cell_id,
8
9
  **combined_html_options) do %>
9
10
  <%= content.presence %>
10
11
  <% end %>
@@ -18,13 +19,19 @@
18
19
  <% end %>
19
20
  </tr>
20
21
  <% elsif object.tag == "table" %>
21
- <%= content_tag(:tr,
22
- aria: object.aria,
23
- class: object.classname,
24
- data: object.data,
25
- id: object.id,
26
- **combined_html_options) do %>
27
- <%= content.presence %>
22
+ <% if object.draggable_item %>
23
+ <%= pb_rails("draggable/draggable_item", props:{ drag_id: object.drag_id, tag: "tr", classname: object.classname, data: object.data }) do %>
24
+ <%= content.presence %>
25
+ <% end %>
26
+ <% else %>
27
+ <%= content_tag(:tr,
28
+ aria: object.aria,
29
+ class: object.classname,
30
+ data: object.data,
31
+ id: object.id,
32
+ **combined_html_options) do %>
33
+ <%= content.presence %>
34
+ <% end %>
28
35
  <% end %>
29
36
  <% else %>
30
37
  <%= content_tag(:div,
@@ -13,9 +13,14 @@ module Playbook
13
13
  prop :collapsible_content
14
14
  prop :collapsible_side_highlight, type: Playbook::Props::Boolean,
15
15
  default: true
16
+ prop :toggle_cell_id, type: Playbook::Props::String
17
+ prop :draggable_item, type: Playbook::Props::Boolean,
18
+ default: false
19
+ prop :drag_id, type: Playbook::Props::String,
20
+ default: nil
16
21
 
17
22
  def classname
18
- generate_classname("pb_table_row_kit", side_highlight_class) + tag_class
23
+ generate_classname("pb_table_row_kit", side_highlight_class) + tag_class + collapsible_cell_class
19
24
  end
20
25
 
21
26
  def side_highlight_class
@@ -25,6 +30,14 @@ module Playbook
25
30
  def tag_class
26
31
  " pb_table_tr"
27
32
  end
33
+
34
+ def collapsible_cell_class
35
+ if toggle_cell_id
36
+ " collapsible_cell"
37
+ else
38
+ ""
39
+ end
40
+ end
28
41
  end
29
42
  end
30
43
  end
@@ -27,6 +27,20 @@
27
27
  placeholder: "123-45-6789"
28
28
  }) %>
29
29
 
30
+ <%= pb_rails("text_input", props: {
31
+ label: "Credit Card",
32
+ mask: "credit_card",
33
+ margin_bottom: "md",
34
+ placeholder: "1234 5678 9012 3456"
35
+ }) %>
36
+
37
+ <%= pb_rails("text_input", props: {
38
+ label: "CVV",
39
+ mask: "cvv",
40
+ margin_bottom: "md",
41
+ placeholder: "123"
42
+ }) %>
43
+
30
44
  <%= pb_rails("title" , props: {
31
45
  text: "Hidden Input Under The Hood",
32
46
  padding_bottom: "sm"
@@ -27,6 +27,8 @@ export default class PbTextInput extends PbEnhancedElement {
27
27
  ssn: 'ssn',
28
28
  postal_code: 'postalCode',
29
29
  zip_code: 'zipCode',
30
+ credit_card: 'creditCard',
31
+ cvv: 'cvv',
30
32
  }[maskType];
31
33
 
32
34
  if (maskKey && INPUTMASKS[maskKey]) {
@@ -45,6 +47,9 @@ export default class PbTextInput extends PbEnhancedElement {
45
47
  case "currency":
46
48
  sanitizedInput.value = sanitizeCurrency(formattedValue);
47
49
  break;
50
+ case "credit_card":
51
+ sanitizedInput.value = sanitizeCreditCard(formattedValue);
52
+ break;
48
53
  default:
49
54
  sanitizedInput.value = formattedValue;
50
55
  }
@@ -63,6 +68,10 @@ function sanitizeCurrency(input) {
63
68
  return input.replace(/[$,]/g, "");
64
69
  }
65
70
 
71
+ function sanitizeCreditCard(input) {
72
+ return input.replace(/\D/g, "");
73
+ }
74
+
66
75
  function setCursorPosition(inputElement, cursorPosition, rawValue, formattedValue) {
67
76
  const difference = formattedValue.length - rawValue.length;
68
77
  const newPosition = Math.max(0, cursorPosition + difference);
@@ -4,13 +4,15 @@
4
4
  module Playbook
5
5
  module PbTextInput
6
6
  class TextInput < Playbook::KitBase
7
- VALID_MASKS = %w[currency zipCode postalCode ssn].freeze
7
+ VALID_MASKS = %w[currency zip_code postal_code ssn credit_card cvv].freeze
8
8
 
9
9
  MASK_PATTERNS = {
10
10
  "currency" => '^\$\d{1,3}(?:,\d{3})*(?:\.\d{2})?$',
11
11
  "zip_code" => '\d{5}',
12
12
  "postal_code" => '\d{5}-\d{4}',
13
13
  "ssn" => '\d{3}-\d{2}-\d{4}',
14
+ "credit_card" => '\d{4} \d{4} \d{4} \d{4}',
15
+ "cvv" => '\d{3,4}',
14
16
  }.freeze
15
17
 
16
18
  prop :autocomplete, type: Playbook::Props::Boolean,
@@ -34,7 +36,8 @@ module Playbook
34
36
  prop :add_on, type: Playbook::Props::NestedProps,
35
37
  nested_kit: Playbook::PbTextInput::AddOn
36
38
 
37
- prop :mask, type: Playbook::Props::String,
39
+ prop :mask, type: Playbook::Props::Enum,
40
+ values: ["currency", "zip_code", "postal_code", "ssn", "credit_card", "cvv", nil],
38
41
  default: nil
39
42
 
40
43
  def classname
@@ -31,6 +31,41 @@
31
31
  @include pb_title_thin;
32
32
  }
33
33
 
34
+ &[class*=_display] {
35
+ font-size: clamp(
36
+ 24px,
37
+ calc(24px + (128 - 24) * ((100vw - 320px) / (1920 - 320))),
38
+ 128px
39
+ );
40
+ }
41
+
42
+ &[class*=_dynamic] {
43
+ &[class*=_xs] {
44
+ font-size: min(2vw, 5rem);
45
+ }
46
+
47
+ &[class*=_sm] {
48
+ font-size: min(2.5vw, 6rem);
49
+ }
50
+
51
+ &[class*=_md] {
52
+ font-size: min(4vw, 10rem);
53
+ }
54
+
55
+ &[class*=_lg] {
56
+ font-size: min(5vw, 12rem);
57
+ }
58
+
59
+ &[class*=_xl] {
60
+ font-size: min(6vw, 14rem);
61
+ }
62
+
63
+ &[class*=_xxl] {
64
+ font-size: min(8vw, 16rem);
65
+ }
66
+ }
67
+
68
+
34
69
  @each $size, $size_value in $breakpoints_grid {
35
70
  @for $title_size_value from 1 through 4 {
36
71
  $min_size: map-get($size_value, "min");
@@ -3,7 +3,7 @@ import classnames from 'classnames'
3
3
  import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from '../utilities/props'
4
4
  import { deprecatedProps, GlobalProps, globalProps } from '../utilities/globalProps'
5
5
 
6
- type SizeType = 1 | 2 | 3 | 4 | "1" | "2" | "3" | "4"
6
+ type SizeType = 1 | 2 | 3 | 4 | "1" | "2" | "3" | "4" | "display"
7
7
  type SizeResponsiveType = {[key: string]: SizeType}
8
8
 
9
9
  type TitleProps = {
@@ -16,6 +16,7 @@ type TitleProps = {
16
16
  htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
17
17
  id?: string,
18
18
  size?: SizeType | SizeResponsiveType,
19
+ displaySize?: null | "xs" | "sm" | "md" | "lg" | "xl" | "xxl",
19
20
  tag?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "div" | "span",
20
21
  text?: string,
21
22
  variant?: null | "link",
@@ -32,6 +33,7 @@ const Title = (props: TitleProps): React.ReactElement => {
32
33
  htmlOptions = {},
33
34
  id,
34
35
  size = 3,
36
+ displaySize = null,
35
37
  bold = true,
36
38
  tag = 'h3',
37
39
  text,
@@ -56,9 +58,16 @@ const Title = (props: TitleProps): React.ReactElement => {
56
58
  return css.trim()
57
59
  }
58
60
 
61
+ const buildDisplaySize = () => {
62
+ if (displaySize) {
63
+ return `pb_title_kit_dynamic_${displaySize}`
64
+ }
65
+ }
66
+
59
67
  const classes = classnames(
60
68
  buildCss('pb_title_kit', isSizeNumberOrString ? `size_${size}` : "", variant, color, getBold),
61
69
  globalProps(props),
70
+ buildDisplaySize(),
62
71
  buildResponsiveSizeCss(),
63
72
  className
64
73
  )
@@ -1,10 +1,9 @@
1
1
  <%= pb_rails("title", props: {
2
+ margin_bottom: "md"
2
3
  }) do %>
3
4
  Default Title
4
5
  <% end %>
5
6
 
6
- <br/>
7
-
8
7
  <%= pb_rails("title", props: { text: "Title 1", tag: "h1", size: 1 }) %>
9
8
  <%= pb_rails("title", props: { text: "Title 2", tag: "h2", size: 2 }) %>
10
9
  <%= pb_rails("title", props: { text: "Title 3", tag: "h3", size: 3 }) %>
@@ -6,10 +6,10 @@ const TitleDefault = (props) => {
6
6
  return (
7
7
  <div>
8
8
  <Title
9
+ marginBottom='md'
9
10
  text="Default Title"
10
11
  {...props}
11
12
  />
12
- <br />
13
13
  <Title
14
14
  size={1}
15
15
  tag="h1"
@@ -0,0 +1,7 @@
1
+ <%= pb_rails("title", props: { text: "Display Size xs", tag: "h1", display_size: "xs" }) %>
2
+ <%= pb_rails("title", props: { text: "Display Size sm", tag: "h1", display_size: "sm" }) %>
3
+ <%= pb_rails("title", props: { text: "Display Size md", tag: "h1", display_size: "md" }) %>
4
+ <%= pb_rails("title", props: { text: "Display Size lg", tag: "h1", display_size: "lg" }) %>
5
+ <%= pb_rails("title", props: { text: "Display Size xl", tag: "h1", display_size: "xl" }) %>
6
+ <%= pb_rails("title", props: { text: "Display Size xxl", tag: "h1", display_size: "xxl" }) %>
7
+ <%= pb_rails("title", props: { text: "This is a size of display", tag: "h1", size: "display"}) %>
@@ -0,0 +1,54 @@
1
+ import React from 'react'
2
+
3
+ import Title from '../_title'
4
+
5
+ const TitleDisplaySize = (props) => {
6
+ return (
7
+ <div>
8
+ <Title
9
+ displaySize="xs"
10
+ tag="h1"
11
+ text="Display Size xs"
12
+ {...props}
13
+ />
14
+ <Title
15
+ displaySize="sm"
16
+ tag="h1"
17
+ text="Display Size sm"
18
+ {...props}
19
+ />
20
+ <Title
21
+ displaySize="md"
22
+ tag="h1"
23
+ text="Display Size md"
24
+ {...props}
25
+ />
26
+ <Title
27
+ displaySize="lg"
28
+ tag="h1"
29
+ text="Display Size lg"
30
+ {...props}
31
+ />
32
+ <Title
33
+ displaySize="xl"
34
+ tag="h1"
35
+ text="Display Size xl"
36
+ {...props}
37
+ />
38
+ <Title
39
+ displaySize="xxl"
40
+ tag="h1"
41
+ text="Display Size xxl"
42
+ {...props}
43
+ />
44
+ <Title
45
+ size="display"
46
+ tag="h1"
47
+ text="This is a size of display"
48
+ {...props}
49
+ />
50
+ </div>
51
+ )
52
+ }
53
+
54
+ export default TitleDisplaySize
@@ -0,0 +1 @@
1
+ Responsive sizes for large screens and tablets, perfect for digital signage.
@@ -5,6 +5,7 @@ examples:
5
5
  - title_colors: Colors
6
6
  - title_responsive: Responsive
7
7
  - title_truncate: Truncate
8
+ - title_display_size: Display Size
8
9
 
9
10
  react:
10
11
  - title_default: Default UI
@@ -12,3 +13,4 @@ examples:
12
13
  - title_colors: Colors
13
14
  - title_responsive: Responsive
14
15
  - title_truncate: Truncate
16
+ - title_display_size: Display Size
@@ -3,3 +3,4 @@ export { default as TitleLightWeight } from './_title_light_weight.jsx'
3
3
  export { default as TitleColors } from './_title_colors.jsx'
4
4
  export { default as TitleResponsive } from './_title_responsive.jsx'
5
5
  export { default as TitleTruncate } from './_title_truncate.jsx'
6
+ export { default as TitleDisplaySize } from './_title_display_size.jsx'
@@ -16,12 +16,15 @@ module Playbook
16
16
  default: nil,
17
17
  deprecated: true
18
18
  prop :bold, type: Playbook::Props::Boolean, default: true
19
+ prop :display_size, type: Playbook::Props::Enum,
20
+ values: [nil, "xs", "sm", "md", "lg", "xl", "xxl"],
21
+ default: nil
19
22
 
20
23
  def classname
21
24
  if is_size_responsive
22
25
  generate_classname("pb_title_kit", variant, color, is_bold) + generate_responsive_size_classname
23
26
  else
24
- generate_classname("pb_title_kit", size, variant, color, is_bold)
27
+ generate_classname("pb_title_kit", size, variant, color, is_bold) + generate_display_size
25
28
  end
26
29
  end
27
30
 
@@ -29,6 +32,12 @@ module Playbook
29
32
  bold ? nil : "thin"
30
33
  end
31
34
 
35
+ def generate_display_size
36
+ return "" if display_size.nil?
37
+
38
+ " pb_title_kit_dynamic_#{display_size}"
39
+ end
40
+
32
41
  def is_size_responsive
33
42
  try(:size).is_a?(::Hash)
34
43
  end
@@ -141,7 +141,6 @@ $tooltip_shadow: rgba(60, 106, 172, 0.18);
141
141
 
142
142
  &[data-popper-placement="right"] {
143
143
  box-shadow: -8px 0 28px 0 $tooltip_shadow;
144
- margin: 0 0 0 $space_sm;
145
144
  .arrow {
146
145
  left: -18px;
147
146
  right: auto;
@@ -156,7 +155,6 @@ $tooltip_shadow: rgba(60, 106, 172, 0.18);
156
155
 
157
156
  &[data-popper-placement="bottom"] {
158
157
  box-shadow: 0 -12px 28px 0 $tooltip_shadow;
159
- margin: $space_sm 0 0 0;
160
158
  .arrow {
161
159
  top: -18px;
162
160
  margin-bottom: 0;
@@ -169,7 +167,6 @@ $tooltip_shadow: rgba(60, 106, 172, 0.18);
169
167
 
170
168
  &[data-popper-placement="left"] {
171
169
  box-shadow: 8px 0 28px 0 $tooltip_shadow;
172
- margin: 0 $space_sm 0 0;
173
170
  .arrow {
174
171
  margin-bottom: 0;
175
172
  right: -18px;