playbook_ui 14.14.0 → 14.15.0.pre.alpha.PBNTR900phonenumberinputhidden6593

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 (162) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/Components/RegularTableView.tsx +127 -0
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/TableActionBar.tsx +55 -0
  4. data/app/pb_kits/playbook/pb_advanced_table/Components/TablePagination.tsx +33 -0
  5. data/app/pb_kits/playbook/pb_advanced_table/Components/VirtualizedTableView.tsx +275 -0
  6. data/app/pb_kits/playbook/pb_advanced_table/Context/AdvancedTableContext.tsx +143 -3
  7. data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableActions.ts +66 -0
  8. data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +195 -0
  9. data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableBody.tsx +45 -99
  10. data/app/pb_kits/playbook/pb_advanced_table/Utilities/CellRendererUtils.tsx +73 -0
  11. data/app/pb_kits/playbook/pb_advanced_table/Utilities/RowUtils.ts +52 -0
  12. data/app/pb_kits/playbook/pb_advanced_table/Utilities/TableContainerStyles.ts +80 -0
  13. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +123 -7
  14. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +153 -299
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_infinite_scroll.jsx +50 -0
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/advanced_table_mock_data_infinite_scroll.json +152002 -0
  17. data/app/pb_kits/playbook/pb_card/_card.tsx +2 -1
  18. data/app/pb_kits/playbook/pb_currency/_currency.tsx +46 -31
  19. data/app/pb_kits/playbook/pb_currency/currency.html.erb +15 -8
  20. data/app/pb_kits/playbook/pb_currency/currency.rb +17 -2
  21. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.html.erb +22 -0
  22. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.jsx +34 -0
  23. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display_rails.md +1 -0
  24. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display_react.md +1 -0
  25. data/app/pb_kits/playbook/pb_currency/docs/example.yml +2 -0
  26. data/app/pb_kits/playbook/pb_currency/docs/index.js +2 -1
  27. data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +4 -1
  28. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +2 -0
  29. data/app/pb_kits/playbook/pb_date_picker/index.ts +38 -0
  30. data/app/pb_kits/playbook/pb_dialog/dialog.html.erb +5 -6
  31. data/app/pb_kits/playbook/pb_dialog/dialogHelper.js +2 -0
  32. data/app/pb_kits/playbook/pb_dialog/index.js +75 -0
  33. data/app/pb_kits/playbook/pb_drawer/_drawer.scss +43 -3
  34. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.html.erb +8 -0
  35. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.html.erb +33 -0
  36. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.jsx +3 -3
  37. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +0 -0
  38. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +20 -37
  39. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.html.erb +20 -1
  40. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.html.erb +24 -0
  41. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.jsx +6 -6
  42. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.html.erb +21 -0
  43. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.jsx +1 -0
  44. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.md +1 -0
  45. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.html.erb +49 -0
  46. data/app/pb_kits/playbook/pb_drawer/docs/example.yml +6 -0
  47. data/app/pb_kits/playbook/pb_drawer/drawer.html.erb +20 -12
  48. data/app/pb_kits/playbook/pb_drawer/drawer.rb +49 -1
  49. data/app/pb_kits/playbook/pb_drawer/index.js +257 -0
  50. data/app/pb_kits/playbook/pb_filter/Filter/CurrentFilters.tsx +5 -4
  51. data/app/pb_kits/playbook/pb_filter/Filter/FilterSingle.tsx +2 -2
  52. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -0
  53. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +3 -2
  54. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +9 -2
  55. data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +4 -0
  56. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.html.erb +40 -0
  57. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.jsx +50 -0
  58. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.md +3 -0
  59. data/app/pb_kits/playbook/pb_form_pill/docs/example.yml +2 -0
  60. data/app/pb_kits/playbook/pb_form_pill/docs/index.js +1 -0
  61. data/app/pb_kits/playbook/pb_form_pill/form_pill.rb +7 -1
  62. data/app/pb_kits/playbook/pb_icon_button/_icon_button.tsx +71 -0
  63. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_default.jsx +17 -0
  64. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_sizes.jsx +61 -0
  65. data/app/pb_kits/playbook/pb_icon_button/docs/example.yml +4 -0
  66. data/app/pb_kits/playbook/pb_icon_button/docs/index.js +2 -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.scss +7 -0
  69. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +13 -3
  70. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.html.erb +72 -0
  71. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.jsx +91 -0
  72. data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +2 -1
  73. data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +1 -0
  74. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.rb +6 -0
  75. data/app/pb_kits/playbook/pb_overlay/_overlay.scss +13 -0
  76. data/app/pb_kits/playbook/pb_overlay/_overlay.tsx +7 -1
  77. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar.html.erb +11 -0
  78. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar.jsx +37 -0
  79. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar_rails.md +1 -0
  80. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar_react.md +1 -0
  81. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.html.erb +11 -0
  82. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.md +1 -0
  83. data/app/pb_kits/playbook/pb_overlay/docs/example.yml +3 -0
  84. data/app/pb_kits/playbook/pb_overlay/docs/index.js +1 -0
  85. data/app/pb_kits/playbook/pb_overlay/index.js +61 -0
  86. data/app/pb_kits/playbook/pb_overlay/overlay.html.erb +5 -3
  87. data/app/pb_kits/playbook/pb_overlay/overlay.rb +16 -1
  88. data/app/pb_kits/playbook/pb_overlay/overlay.test.jsx +12 -0
  89. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +4 -0
  90. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_default_rails.md +2 -0
  91. data/app/pb_kits/playbook/pb_phone_number_input/docs/example.yml +1 -1
  92. data/app/pb_kits/playbook/pb_popover/_popover.tsx +1 -1
  93. data/app/pb_kits/playbook/pb_progress_step/progress_step_item.html.erb +2 -2
  94. data/app/pb_kits/playbook/pb_radio/_radio.tsx +85 -74
  95. data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.jsx +60 -0
  96. data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.md +1 -0
  97. data/app/pb_kits/playbook/pb_radio/docs/example.yml +2 -1
  98. data/app/pb_kits/playbook/pb_radio/docs/index.js +1 -0
  99. data/app/pb_kits/playbook/pb_radio/radio.test.js +16 -0
  100. data/app/pb_kits/playbook/pb_select/docs/_select_react_hook.jsx +58 -0
  101. data/app/pb_kits/playbook/pb_select/docs/_select_react_hook.md +1 -0
  102. data/app/pb_kits/playbook/pb_select/docs/example.yml +1 -0
  103. data/app/pb_kits/playbook/pb_select/docs/index.js +1 -0
  104. data/app/pb_kits/playbook/pb_select/index.js +38 -0
  105. data/app/pb_kits/playbook/pb_select/select.html.erb +3 -5
  106. data/app/pb_kits/playbook/pb_select/select.rb +8 -0
  107. data/app/pb_kits/playbook/pb_selectable_card/selectable_card.html.erb +1 -5
  108. data/app/pb_kits/playbook/pb_selectable_card_icon/selectable_card_icon.html.erb +1 -4
  109. data/app/pb_kits/playbook/pb_selectable_icon/selectable_icon.html.erb +1 -5
  110. data/app/pb_kits/playbook/pb_timeline/_timeline.scss +2 -2
  111. data/app/pb_kits/playbook/pb_title/_title.scss +32 -0
  112. data/app/pb_kits/playbook/pb_title/_title.tsx +10 -1
  113. data/app/pb_kits/playbook/pb_title/docs/_title_default.html.erb +1 -2
  114. data/app/pb_kits/playbook/pb_title/docs/_title_default.jsx +1 -1
  115. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.html.erb +7 -0
  116. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.jsx +54 -0
  117. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.md +1 -0
  118. data/app/pb_kits/playbook/pb_title/docs/example.yml +2 -0
  119. data/app/pb_kits/playbook/pb_title/docs/index.js +1 -0
  120. data/app/pb_kits/playbook/pb_title/title.rb +10 -1
  121. data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +0 -3
  122. data/app/pb_kits/playbook/pb_tooltip/_tooltip.tsx +25 -0
  123. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_delay_rails.html.erb +39 -0
  124. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_delay_rails.md +3 -0
  125. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_interaction.html.erb +26 -0
  126. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_sizing.jsx +69 -0
  127. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_sizing.md +3 -0
  128. data/app/pb_kits/playbook/pb_tooltip/docs/example.yml +3 -1
  129. data/app/pb_kits/playbook/pb_tooltip/docs/index.js +1 -0
  130. data/app/pb_kits/playbook/pb_tooltip/floating_ui.js +282 -0
  131. data/app/pb_kits/playbook/pb_tooltip/index.js +2 -2
  132. data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +10 -2
  133. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +36 -2
  134. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +5 -1
  135. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options.html.erb +45 -0
  136. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options.md +5 -0
  137. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options_pure_rails.html.erb +33 -0
  138. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options_pure_rails.md +3 -0
  139. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +2 -0
  140. data/app/pb_kits/playbook/pb_typeahead/index.ts +61 -8
  141. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +17 -2
  142. data/app/pb_kits/playbook/utilities/object.test.js +99 -0
  143. data/app/pb_kits/playbook/utilities/object.ts +29 -1
  144. data/dist/chunks/_typeahead-Cu4WtFsC.js +36 -0
  145. data/dist/chunks/_weekday_stacked-iCkVKLxW.js +45 -0
  146. data/dist/chunks/lazysizes-B7xYodB-.js +1 -0
  147. data/dist/chunks/{lib-D3us1bGD.js → lib-5OzNgeeu.js} +2 -2
  148. data/dist/chunks/{pb_form_validation-BpihMSOQ.js → pb_form_validation-DGhKbZtO.js} +1 -1
  149. data/dist/chunks/vendor.js +1 -1
  150. data/dist/menu.yml +3 -3
  151. data/dist/playbook-doc.js +1 -1
  152. data/dist/playbook-rails-react-bindings.js +1 -1
  153. data/dist/playbook-rails.js +1 -1
  154. data/dist/playbook.css +1 -1
  155. data/lib/playbook/forms/builder/time_zone_select_field.rb +19 -0
  156. data/lib/playbook/forms/builder.rb +1 -0
  157. data/lib/playbook/version.rb +2 -2
  158. metadata +71 -8
  159. data/dist/chunks/_typeahead-PqkcDf1H.js +0 -36
  160. data/dist/chunks/_weekday_stacked-B_pw5Znc.js +0 -45
  161. data/dist/chunks/lazysizes-DHz07jlL.js +0 -1
  162. /data/app/pb_kits/playbook/pb_phone_number_input/docs/{_phone_number_input_default.html.erb → _phone_number_input_default_rails.html.erb} +0 -0
@@ -44,6 +44,14 @@ module Playbook
44
44
  default: false
45
45
  prop :validation, type: Playbook::Props::HashProp,
46
46
  default: {}
47
+ prop :wrapped, type: Playbook::Props::Boolean,
48
+ default: false
49
+ prop :clear_on_context_change, type: Playbook::Props::Boolean,
50
+ default: true
51
+ prop :options_by_context, type: Playbook::Props::HashProp,
52
+ default: {}
53
+ prop :search_context_selector, type: Playbook::Props::String,
54
+ default: nil
47
55
 
48
56
  def classname
49
57
  default_margin_bottom = margin_bottom.present? ? "" : " mb_sm"
@@ -58,12 +66,15 @@ module Playbook
58
66
  Hash(values[:data]).merge(
59
67
  pb_typeahead_kit: true,
60
68
  pb_typeahead_kit_search_term_minimum_length: search_term_minimum_length,
61
- pb_typeahead_kit_search_debounce_timeout: search_debounce_timeout
69
+ pb_typeahead_kit_search_debounce_timeout: search_debounce_timeout,
70
+ pb_typeahead_kit_clear_on_context_change: clear_on_context_change,
71
+ pb_typeahead_kit_search_context_selector: search_context_selector,
72
+ pb_typeahead_kit_options_by_context: options_by_context.to_json
62
73
  )
63
74
  end
64
75
 
65
76
  def is_react?
66
- pills || !is_multi
77
+ pills || !is_multi || wrapped
67
78
  end
68
79
 
69
80
  def typeahead_react_options
@@ -85,6 +96,10 @@ module Playbook
85
96
  placeholder: placeholder,
86
97
  plusIcon: plus_icon,
87
98
  truncate: truncate,
99
+ wrapped: wrapped,
100
+ searchContextSelector: search_context_selector,
101
+ optionsByContext: options_by_context,
102
+ clearOnContextChange: clear_on_context_change,
88
103
  }
89
104
 
90
105
  base_options[:getOptionLabel] = get_option_label if get_option_label.present?
@@ -0,0 +1,99 @@
1
+ import { isEmpty, get, isString, uniqueId, omitBy } from './object';
2
+
3
+ describe('Lodash functions', () => {
4
+ describe('isEmpty', () => {
5
+ test('returns true for empty objects', () => {
6
+ expect(isEmpty({})).toBe(true);
7
+ });
8
+ test('returns true for empty arrays', () => {
9
+ expect(isEmpty([])).toBe(true);
10
+ });
11
+ test('returns false for non-empty objects', () => {
12
+ expect(isEmpty({ a: 1 })).toBe(false);
13
+ });
14
+ test('returns false for non-empty arrays', () => {
15
+ expect(isEmpty([1])).toBe(false);
16
+ });
17
+ test('returns true for null and undefined', () => {
18
+ expect(isEmpty(null)).toBe(true);
19
+ expect(isEmpty(undefined)).toBe(true);
20
+ });
21
+ test('returns false for non-object, non-array values', () => {
22
+ expect(isEmpty("hello")).toBe(false);
23
+ expect(isEmpty(123)).toBe(false);
24
+ });
25
+ });
26
+
27
+ describe('get', () => {
28
+ const obj = { a: { b: { c: 42 } }, arr: [{ x: 1 }, { y: 2 }] };
29
+
30
+ test('retrieves nested properties by dot path', () => {
31
+ expect(get(obj, 'a.b.c')).toBe(42);
32
+ });
33
+ test('returns default value if path does not exist', () => {
34
+ expect(get(obj, 'a.b.d', 'default')).toBe('default');
35
+ });
36
+ test('retrieves array values using bracket notation', () => {
37
+ expect(get(obj, 'arr[1].y')).toBe(2);
38
+ });
39
+ test('returns default for non-existent paths', () => {
40
+ expect(get(obj, 'non.existent.path', null)).toBe(null);
41
+ });
42
+ });
43
+
44
+ describe('isString', () => {
45
+ test('returns true for string literal', () => {
46
+ expect(isString('test')).toBe(true);
47
+ });
48
+ test('returns true for String object', () => {
49
+ expect(isString(new String('test'))).toBe(true);
50
+ });
51
+ test('returns false for non-string values', () => {
52
+ expect(isString(123)).toBe(false);
53
+ expect(isString(null)).toBe(false);
54
+ expect(isString({ a: 1 })).toBe(false);
55
+ expect(isString([ 'a','b','c' ])).toBe(false);
56
+ });
57
+ });
58
+
59
+ describe('uniqueId', () => {
60
+ test('generates unique ids without prefix', () => {
61
+ const id1 = uniqueId();
62
+ const id2 = uniqueId();
63
+ expect(id1).not.toBe(id2);
64
+ expect(Number(id1)).toBeLessThan(Number(id2));
65
+ });
66
+ test('generates unique ids with prefix', () => {
67
+ const id1 = uniqueId('id_');
68
+ const id2 = uniqueId('id_');
69
+ const id3 = uniqueId('id_');
70
+ expect(id1).not.toBe(id2);
71
+ expect(id1).not.toBe(id3);
72
+ expect(id2).not.toBe(id3);
73
+ expect(id1.startsWith('id_')).toBe(true);
74
+ expect(id2.startsWith('id_')).toBe(true);
75
+ expect(id3.startsWith('id_')).toBe(true);
76
+ });
77
+ });
78
+
79
+ describe('omitBy', () => {
80
+ test('omits keys for which predicate returns true', () => {
81
+ const obj = { a: 1, b: 2, c: 3 };
82
+ const isEven = value => value % 2 === 0;
83
+ const noEvenValues = omitBy(obj, isEven);
84
+ expect(noEvenValues).toEqual({ a: 1, c: 3 });
85
+ });
86
+ test('returns empty object for null input', () => {
87
+ expect(omitBy(null, () => true)).toEqual({});
88
+ });
89
+ test('returns empty object for non-object input', () => {
90
+ expect(omitBy("string", () => true)).toEqual({});
91
+ });
92
+ test('returns original object if predicate returns false for all keys', () => {
93
+ const obj = { a: 1, b: 2 };
94
+ const isBiggerThanFive = value => value >= 4;
95
+ const objWithSmallValues = omitBy(obj, isBiggerThanFive);
96
+ expect(objWithSmallValues).toEqual(obj);
97
+ });
98
+ });
99
+ });
@@ -1,3 +1,31 @@
1
1
  /* 🛠️ Any commonly used lodash functions can be added here. 🤙 */
2
2
 
3
- export const isEmpty = (obj: Record<string, unknown>): boolean => Object.keys(obj).length < 1
3
+ export const isEmpty = (obj: any) => [Object, Array].includes((obj || {}).constructor) && !Object.entries((obj || {})).length;
4
+
5
+ export const get = <T, R = any>(obj: T, path: string, defaultValue?: R): R | any => {
6
+ const travel = (regexp: RegExp): any =>
7
+ String.prototype.split
8
+ .call(path, regexp)
9
+ .filter(Boolean)
10
+ .reduce((res: any, key: string) => (res !== null && res !== undefined ? res[key] : res), obj)
11
+ const result = travel(/[,[\]]+?/) || travel(/[,[\].]+?/)
12
+ return result === undefined || result === obj ? defaultValue : result
13
+ }
14
+
15
+ export const isString = (str: unknown): str is string =>
16
+ str != null && typeof (str as any).valueOf() === "string"
17
+
18
+ export const uniqueId: (prefix?: string) => string = (() => {
19
+ let counter = 0
20
+ return (prefix = '') => `${prefix}${++counter}`
21
+ })()
22
+
23
+ export const omitBy = (obj: Record<string, any>, predicate: (value: any, key: string) => boolean) => {
24
+ if (obj === null || typeof obj !== 'object') return {}
25
+ return Object.keys(obj).reduce((result: Record<string, any>, key: string) => {
26
+ if (!predicate(obj[key], key)) {
27
+ result[key] = obj[key];
28
+ }
29
+ return result;
30
+ }, {})
31
+ }