playbook_ui 14.14.0.pre.rc.5 → 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 (182) 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 +126 -7
  14. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +153 -298
  15. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +8 -1
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_custom_cell.jsx +75 -0
  17. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_infinite_scroll.jsx +50 -0
  18. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.html.erb +1 -1
  19. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_rails.md +3 -1
  20. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_react.md +1 -1
  21. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.html.erb +33 -0
  22. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header_rails.md +3 -0
  23. data/app/pb_kits/playbook/pb_advanced_table/docs/advanced_table_mock_data_infinite_scroll.json +152002 -0
  24. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +2 -0
  25. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +2 -1
  26. data/app/pb_kits/playbook/pb_card/_card.tsx +2 -1
  27. data/app/pb_kits/playbook/pb_checkbox/_checkbox.tsx +17 -8
  28. data/app/pb_kits/playbook/pb_checkbox/checkbox.test.js +16 -0
  29. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_react_hook.jsx +69 -0
  30. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_react_hook.md +1 -0
  31. data/app/pb_kits/playbook/pb_checkbox/docs/example.yml +2 -1
  32. data/app/pb_kits/playbook/pb_checkbox/docs/index.js +1 -0
  33. data/app/pb_kits/playbook/pb_currency/_currency.tsx +46 -31
  34. data/app/pb_kits/playbook/pb_currency/currency.html.erb +15 -8
  35. data/app/pb_kits/playbook/pb_currency/currency.rb +17 -2
  36. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.html.erb +22 -0
  37. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.jsx +34 -0
  38. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display_rails.md +1 -0
  39. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display_react.md +1 -0
  40. data/app/pb_kits/playbook/pb_currency/docs/example.yml +2 -0
  41. data/app/pb_kits/playbook/pb_currency/docs/index.js +2 -1
  42. data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +4 -1
  43. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +2 -0
  44. data/app/pb_kits/playbook/pb_date_picker/index.ts +38 -0
  45. data/app/pb_kits/playbook/pb_dialog/dialog.html.erb +5 -6
  46. data/app/pb_kits/playbook/pb_dialog/dialogHelper.js +2 -0
  47. data/app/pb_kits/playbook/pb_dialog/index.js +75 -0
  48. data/app/pb_kits/playbook/pb_drawer/_drawer.scss +43 -3
  49. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.html.erb +8 -0
  50. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.html.erb +33 -0
  51. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.jsx +3 -3
  52. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +0 -0
  53. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +20 -37
  54. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.html.erb +20 -1
  55. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.html.erb +24 -0
  56. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.jsx +6 -6
  57. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.html.erb +21 -0
  58. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.jsx +1 -0
  59. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.md +1 -0
  60. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.html.erb +49 -0
  61. data/app/pb_kits/playbook/pb_drawer/docs/example.yml +6 -0
  62. data/app/pb_kits/playbook/pb_drawer/drawer.html.erb +20 -12
  63. data/app/pb_kits/playbook/pb_drawer/drawer.rb +49 -1
  64. data/app/pb_kits/playbook/pb_drawer/index.js +257 -0
  65. data/app/pb_kits/playbook/pb_filter/Filter/CurrentFilters.tsx +5 -4
  66. data/app/pb_kits/playbook/pb_filter/Filter/FilterSingle.tsx +2 -2
  67. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -0
  68. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +3 -2
  69. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +9 -2
  70. data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +4 -0
  71. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.html.erb +40 -0
  72. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.jsx +50 -0
  73. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.md +3 -0
  74. data/app/pb_kits/playbook/pb_form_pill/docs/example.yml +2 -0
  75. data/app/pb_kits/playbook/pb_form_pill/docs/index.js +1 -0
  76. data/app/pb_kits/playbook/pb_form_pill/form_pill.rb +7 -1
  77. data/app/pb_kits/playbook/pb_icon_button/_icon_button.tsx +71 -0
  78. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_default.jsx +17 -0
  79. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_sizes.jsx +61 -0
  80. data/app/pb_kits/playbook/pb_icon_button/docs/example.yml +4 -0
  81. data/app/pb_kits/playbook/pb_icon_button/docs/index.js +2 -0
  82. data/app/pb_kits/playbook/pb_icon_button/icon_button.test.jsx +39 -0
  83. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +7 -0
  84. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +13 -3
  85. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.html.erb +72 -0
  86. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.jsx +91 -0
  87. data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +2 -1
  88. data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +1 -0
  89. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.rb +6 -0
  90. data/app/pb_kits/playbook/pb_overlay/_overlay.scss +13 -0
  91. data/app/pb_kits/playbook/pb_overlay/_overlay.tsx +11 -1
  92. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar.html.erb +11 -0
  93. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar.jsx +37 -0
  94. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar_rails.md +1 -0
  95. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar_react.md +1 -0
  96. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.html.erb +11 -0
  97. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.jsx +37 -0
  98. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.md +1 -0
  99. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional_react.md +1 -0
  100. data/app/pb_kits/playbook/pb_overlay/docs/example.yml +4 -0
  101. data/app/pb_kits/playbook/pb_overlay/docs/index.js +2 -0
  102. data/app/pb_kits/playbook/pb_overlay/index.js +61 -0
  103. data/app/pb_kits/playbook/pb_overlay/overlay.html.erb +5 -3
  104. data/app/pb_kits/playbook/pb_overlay/overlay.rb +16 -1
  105. data/app/pb_kits/playbook/pb_overlay/overlay.test.jsx +12 -0
  106. data/app/pb_kits/playbook/pb_overlay/subcomponents/_overlay_token.tsx +48 -10
  107. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +4 -0
  108. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_default_rails.md +2 -0
  109. data/app/pb_kits/playbook/pb_phone_number_input/docs/example.yml +1 -1
  110. data/app/pb_kits/playbook/pb_popover/_popover.tsx +1 -1
  111. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.html.erb +1 -6
  112. data/app/pb_kits/playbook/pb_progress_simple/progress_simple.html.erb +1 -5
  113. data/app/pb_kits/playbook/pb_progress_step/progress_step.html.erb +1 -5
  114. data/app/pb_kits/playbook/pb_progress_step/progress_step_item.html.erb +3 -7
  115. data/app/pb_kits/playbook/pb_radio/_radio.tsx +85 -74
  116. data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.jsx +60 -0
  117. data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.md +1 -0
  118. data/app/pb_kits/playbook/pb_radio/docs/example.yml +2 -1
  119. data/app/pb_kits/playbook/pb_radio/docs/index.js +1 -0
  120. data/app/pb_kits/playbook/pb_radio/radio.html.erb +6 -11
  121. data/app/pb_kits/playbook/pb_radio/radio.test.js +16 -0
  122. data/app/pb_kits/playbook/pb_select/docs/_select_react_hook.jsx +58 -0
  123. data/app/pb_kits/playbook/pb_select/docs/_select_react_hook.md +1 -0
  124. data/app/pb_kits/playbook/pb_select/docs/example.yml +1 -0
  125. data/app/pb_kits/playbook/pb_select/docs/index.js +1 -0
  126. data/app/pb_kits/playbook/pb_select/index.js +38 -0
  127. data/app/pb_kits/playbook/pb_select/select.html.erb +3 -5
  128. data/app/pb_kits/playbook/pb_select/select.rb +8 -0
  129. data/app/pb_kits/playbook/pb_selectable_card/selectable_card.html.erb +1 -5
  130. data/app/pb_kits/playbook/pb_selectable_card_icon/selectable_card_icon.html.erb +1 -4
  131. data/app/pb_kits/playbook/pb_selectable_icon/selectable_icon.html.erb +1 -5
  132. data/app/pb_kits/playbook/pb_timeline/_timeline.scss +2 -2
  133. data/app/pb_kits/playbook/pb_title/_title.scss +32 -0
  134. data/app/pb_kits/playbook/pb_title/_title.tsx +10 -1
  135. data/app/pb_kits/playbook/pb_title/docs/_title_default.html.erb +1 -2
  136. data/app/pb_kits/playbook/pb_title/docs/_title_default.jsx +1 -1
  137. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.html.erb +7 -0
  138. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.jsx +54 -0
  139. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.md +1 -0
  140. data/app/pb_kits/playbook/pb_title/docs/example.yml +2 -0
  141. data/app/pb_kits/playbook/pb_title/docs/index.js +1 -0
  142. data/app/pb_kits/playbook/pb_title/title.rb +10 -1
  143. data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +0 -3
  144. data/app/pb_kits/playbook/pb_tooltip/_tooltip.tsx +25 -0
  145. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_delay_rails.html.erb +39 -0
  146. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_delay_rails.md +3 -0
  147. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_interaction.html.erb +26 -0
  148. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_sizing.jsx +69 -0
  149. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_sizing.md +3 -0
  150. data/app/pb_kits/playbook/pb_tooltip/docs/example.yml +3 -1
  151. data/app/pb_kits/playbook/pb_tooltip/docs/index.js +1 -0
  152. data/app/pb_kits/playbook/pb_tooltip/floating_ui.js +282 -0
  153. data/app/pb_kits/playbook/pb_tooltip/index.js +2 -2
  154. data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +10 -2
  155. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +36 -2
  156. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +5 -1
  157. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options.html.erb +45 -0
  158. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options.md +5 -0
  159. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options_pure_rails.html.erb +33 -0
  160. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options_pure_rails.md +3 -0
  161. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +2 -0
  162. data/app/pb_kits/playbook/pb_typeahead/index.ts +61 -8
  163. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +17 -2
  164. data/app/pb_kits/playbook/utilities/object.test.js +99 -0
  165. data/app/pb_kits/playbook/utilities/object.ts +29 -1
  166. data/dist/chunks/_typeahead-Cu4WtFsC.js +36 -0
  167. data/dist/chunks/_weekday_stacked-iCkVKLxW.js +45 -0
  168. data/dist/chunks/{lib-D3us1bGD.js → lib-5OzNgeeu.js} +2 -2
  169. data/dist/chunks/{pb_form_validation-BpihMSOQ.js → pb_form_validation-DGhKbZtO.js} +1 -1
  170. data/dist/chunks/vendor.js +1 -1
  171. data/dist/menu.yml +3 -3
  172. data/dist/playbook-doc.js +1 -1
  173. data/dist/playbook-rails-react-bindings.js +1 -1
  174. data/dist/playbook-rails.js +1 -1
  175. data/dist/playbook.css +1 -1
  176. data/lib/playbook/forms/builder/time_zone_select_field.rb +19 -0
  177. data/lib/playbook/forms/builder.rb +1 -0
  178. data/lib/playbook/version.rb +2 -2
  179. metadata +77 -7
  180. data/dist/chunks/_typeahead-CAIQfP7X.js +0 -36
  181. data/dist/chunks/_weekday_stacked-DstwbGUv.js +0 -45
  182. /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
+ }