@wix/patterns 1.366.0 → 1.370.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (678) hide show
  1. package/dist/cjs/components/CardContainer/CardContainer.st.css.js +2 -2
  2. package/dist/cjs/components/CardContainer/CardContainer.st.css.js.map +1 -1
  3. package/dist/cjs/components/Collapse/Collapse.st.css.js +3 -3
  4. package/dist/cjs/components/Collapse/Collapse.st.css.js.map +1 -1
  5. package/dist/cjs/components/CollectionPageNew/CollectionPage.st.css.js +2 -2
  6. package/dist/cjs/components/CollectionPageNew/CollectionPage.st.css.js.map +1 -1
  7. package/dist/cjs/components/CollectionSectionHeader/CollectionSectionHeader.st.css.js +3 -3
  8. package/dist/cjs/components/CollectionSectionHeader/CollectionSectionHeader.st.css.js.map +1 -1
  9. package/dist/cjs/components/CollectionTable/CollectionTable.st.css.js +2 -2
  10. package/dist/cjs/components/CollectionTable/CollectionTable.st.css.js.map +1 -1
  11. package/dist/cjs/components/CollectionTable/CollectionTableWSRTable.js +6 -3
  12. package/dist/cjs/components/CollectionTable/CollectionTableWSRTable.js.map +1 -1
  13. package/dist/cjs/components/CollectionToolbar/CollectionToolbar.js +25 -30
  14. package/dist/cjs/components/CollectionToolbar/CollectionToolbar.js.map +1 -1
  15. package/dist/cjs/components/CollectionToolbar/CollectionToolbar.st.css.js +5 -5
  16. package/dist/cjs/components/CollectionToolbar/CollectionToolbar.st.css.js.map +1 -1
  17. package/dist/cjs/components/CollectionToolbar/CollectionToolbarActionsGroupProps.js.map +1 -1
  18. package/dist/cjs/components/CollectionToolbar/CollectionToolbarActionsGroupResponsiveLayout.js +66 -17
  19. package/dist/cjs/components/CollectionToolbar/CollectionToolbarActionsGroupResponsiveLayout.js.map +1 -1
  20. package/dist/cjs/components/CollectionToolbar/CollectionToolbarActionsToolbarItemsGroup.js +22 -14
  21. package/dist/cjs/components/CollectionToolbar/CollectionToolbarActionsToolbarItemsGroup.js.map +1 -1
  22. package/dist/cjs/components/CollectionToolbar/SearchOrCustomFilter.st.css.js +4 -4
  23. package/dist/cjs/components/CollectionToolbar/SearchOrCustomFilter.st.css.js.map +1 -1
  24. package/dist/cjs/components/CollectionToolbar/ToolbarOverflowMenu.js +329 -0
  25. package/dist/cjs/components/CollectionToolbar/ToolbarOverflowMenu.js.map +1 -0
  26. package/dist/cjs/components/CollectionToolbar/useToolbarOverflowItems.js +85 -0
  27. package/dist/cjs/components/CollectionToolbar/useToolbarOverflowItems.js.map +1 -0
  28. package/dist/cjs/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.js +2 -2
  29. package/dist/cjs/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.js.map +1 -1
  30. package/dist/cjs/components/CollectionViewsDropdown/ViewsDropdown.st.css.js +2 -2
  31. package/dist/cjs/components/CollectionViewsDropdown/ViewsDropdown.st.css.js.map +1 -1
  32. package/dist/cjs/components/CtaProps.js.map +1 -1
  33. package/dist/cjs/components/DragHandle/DragHandle.st.css.js +2 -2
  34. package/dist/cjs/components/DragHandle/DragHandle.st.css.js.map +1 -1
  35. package/dist/cjs/components/EditableTable/EditableCell.st.css.js +3 -3
  36. package/dist/cjs/components/EditableTable/EditableCell.st.css.js.map +1 -1
  37. package/dist/cjs/components/EditableTable/cellTypes/boolean/Edit.st.css.js +3 -3
  38. package/dist/cjs/components/EditableTable/cellTypes/boolean/Edit.st.css.js.map +1 -1
  39. package/dist/cjs/components/EditableTable/cellTypes/boolean/View.st.css.js +3 -3
  40. package/dist/cjs/components/EditableTable/cellTypes/boolean/View.st.css.js.map +1 -1
  41. package/dist/cjs/components/EditableTable/cellTypes/date/Edit.st.css.js +3 -3
  42. package/dist/cjs/components/EditableTable/cellTypes/date/Edit.st.css.js.map +1 -1
  43. package/dist/cjs/components/EditableTable/cellTypes/date/View.st.css.js +3 -3
  44. package/dist/cjs/components/EditableTable/cellTypes/date/View.st.css.js.map +1 -1
  45. package/dist/cjs/components/EditableTable/cellTypes/email/Edit.js +59 -0
  46. package/dist/cjs/components/EditableTable/cellTypes/email/Edit.js.map +1 -0
  47. package/dist/cjs/components/EditableTable/cellTypes/email/Edit.st.css +4 -0
  48. package/dist/cjs/components/EditableTable/cellTypes/email/Edit.st.css.js +23 -0
  49. package/dist/cjs/components/EditableTable/cellTypes/email/Edit.st.css.js.map +1 -0
  50. package/dist/cjs/components/EditableTable/cellTypes/email/Edit.uni.driver.js +20 -0
  51. package/dist/cjs/components/EditableTable/cellTypes/email/Edit.uni.driver.js.map +1 -0
  52. package/dist/cjs/components/EditableTable/cellTypes/email/View.js +23 -0
  53. package/dist/cjs/components/EditableTable/cellTypes/email/View.js.map +1 -0
  54. package/dist/cjs/components/EditableTable/cellTypes/email/View.st.css +4 -0
  55. package/dist/cjs/components/EditableTable/cellTypes/email/View.st.css.js +23 -0
  56. package/dist/cjs/components/EditableTable/cellTypes/email/View.st.css.js.map +1 -0
  57. package/dist/cjs/components/EditableTable/cellTypes/email/View.uni.driver.js +12 -0
  58. package/dist/cjs/components/EditableTable/cellTypes/email/View.uni.driver.js.map +1 -0
  59. package/dist/cjs/components/EditableTable/cellTypes/email/index.js +31 -0
  60. package/dist/cjs/components/EditableTable/cellTypes/email/index.js.map +1 -0
  61. package/dist/cjs/components/EditableTable/cellTypes/index.js +5 -1
  62. package/dist/cjs/components/EditableTable/cellTypes/index.js.map +1 -1
  63. package/dist/cjs/components/EditableTable/cellTypes/number/Edit.js +4 -9
  64. package/dist/cjs/components/EditableTable/cellTypes/number/Edit.js.map +1 -1
  65. package/dist/cjs/components/EditableTable/cellTypes/number/Edit.st.css.js +3 -3
  66. package/dist/cjs/components/EditableTable/cellTypes/number/Edit.st.css.js.map +1 -1
  67. package/dist/cjs/components/EditableTable/cellTypes/number/View.js +4 -5
  68. package/dist/cjs/components/EditableTable/cellTypes/number/View.js.map +1 -1
  69. package/dist/cjs/components/EditableTable/cellTypes/number/View.st.css.js +3 -3
  70. package/dist/cjs/components/EditableTable/cellTypes/number/View.st.css.js.map +1 -1
  71. package/dist/cjs/components/EditableTable/cellTypes/object/Edit.js +79 -0
  72. package/dist/cjs/components/EditableTable/cellTypes/object/Edit.js.map +1 -0
  73. package/dist/cjs/components/EditableTable/cellTypes/object/Edit.st.css +4 -0
  74. package/dist/cjs/components/EditableTable/cellTypes/object/Edit.st.css.js +23 -0
  75. package/dist/cjs/components/EditableTable/cellTypes/object/Edit.st.css.js.map +1 -0
  76. package/dist/cjs/components/EditableTable/cellTypes/object/Edit.uni.driver.js +20 -0
  77. package/dist/cjs/components/EditableTable/cellTypes/object/Edit.uni.driver.js.map +1 -0
  78. package/dist/cjs/components/EditableTable/cellTypes/object/View.js +30 -0
  79. package/dist/cjs/components/EditableTable/cellTypes/object/View.js.map +1 -0
  80. package/dist/cjs/components/EditableTable/cellTypes/object/View.st.css +4 -0
  81. package/dist/cjs/components/EditableTable/cellTypes/object/View.st.css.js +23 -0
  82. package/dist/cjs/components/EditableTable/cellTypes/object/View.st.css.js.map +1 -0
  83. package/dist/cjs/components/EditableTable/cellTypes/object/View.uni.driver.js +12 -0
  84. package/dist/cjs/components/EditableTable/cellTypes/object/View.uni.driver.js.map +1 -0
  85. package/dist/cjs/components/EditableTable/cellTypes/object/index.js +45 -0
  86. package/dist/cjs/components/EditableTable/cellTypes/object/index.js.map +1 -0
  87. package/dist/cjs/components/EditableTable/cellTypes/select/Edit.st.css.js +3 -3
  88. package/dist/cjs/components/EditableTable/cellTypes/select/Edit.st.css.js.map +1 -1
  89. package/dist/cjs/components/EditableTable/cellTypes/select/View.st.css.js +3 -3
  90. package/dist/cjs/components/EditableTable/cellTypes/select/View.st.css.js.map +1 -1
  91. package/dist/cjs/components/EditableTable/cellTypes/text/Edit.st.css.js +4 -4
  92. package/dist/cjs/components/EditableTable/cellTypes/text/Edit.st.css.js.map +1 -1
  93. package/dist/cjs/components/EditableTable/cellTypes/text/View.st.css.js +3 -3
  94. package/dist/cjs/components/EditableTable/cellTypes/text/View.st.css.js.map +1 -1
  95. package/dist/cjs/components/EditableTable/cellTypes/url/Edit.st.css.js +3 -3
  96. package/dist/cjs/components/EditableTable/cellTypes/url/Edit.st.css.js.map +1 -1
  97. package/dist/cjs/components/EditableTable/cellTypes/url/View.st.css.js +5 -5
  98. package/dist/cjs/components/EditableTable/cellTypes/url/View.st.css.js.map +1 -1
  99. package/dist/cjs/components/EditableTable/useCellFocusAndEditing.js +15 -0
  100. package/dist/cjs/components/EditableTable/useCellFocusAndEditing.js.map +1 -1
  101. package/dist/cjs/components/EditableTable/useKeyboardNavigation.js +10 -0
  102. package/dist/cjs/components/EditableTable/useKeyboardNavigation.js.map +1 -1
  103. package/dist/cjs/components/EntityPage/EntityPagePlain.st.css.js +2 -2
  104. package/dist/cjs/components/EntityPage/EntityPagePlain.st.css.js.map +1 -1
  105. package/dist/cjs/components/Fade/Fade.st.css.js +2 -2
  106. package/dist/cjs/components/Fade/Fade.st.css.js.map +1 -1
  107. package/dist/cjs/components/Heading/Heading.st.css.js +2 -2
  108. package/dist/cjs/components/Heading/Heading.st.css.js.map +1 -1
  109. package/dist/cjs/components/ImportButton/ImportStepUpload.st.css.js +3 -3
  110. package/dist/cjs/components/ImportButton/ImportStepUpload.st.css.js.map +1 -1
  111. package/dist/cjs/components/InputOverflow/InputOverflow.st.css.js +2 -2
  112. package/dist/cjs/components/InputOverflow/InputOverflow.st.css.js.map +1 -1
  113. package/dist/cjs/components/LoadingRow/LoadingRow.st.css.js +3 -3
  114. package/dist/cjs/components/LoadingRow/LoadingRow.st.css.js.map +1 -1
  115. package/dist/cjs/components/MaxHeightText/MaxHeightText.st.css.js +2 -2
  116. package/dist/cjs/components/MaxHeightText/MaxHeightText.st.css.js.map +1 -1
  117. package/dist/cjs/components/MaxLines/MaxLines.st.css.js +2 -2
  118. package/dist/cjs/components/MaxLines/MaxLines.st.css.js.map +1 -1
  119. package/dist/cjs/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.js +5 -5
  120. package/dist/cjs/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.js.map +1 -1
  121. package/dist/cjs/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.js +2 -2
  122. package/dist/cjs/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.js.map +1 -1
  123. package/dist/cjs/components/NestedTable/NestedTableRow.st.css.js +5 -5
  124. package/dist/cjs/components/NestedTable/NestedTableRow.st.css.js.map +1 -1
  125. package/dist/cjs/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.js +2 -2
  126. package/dist/cjs/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.js.map +1 -1
  127. package/dist/cjs/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.js +2 -2
  128. package/dist/cjs/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.js.map +1 -1
  129. package/dist/cjs/components/PickerContent/PickerContent.st.css.js +2 -2
  130. package/dist/cjs/components/PickerContent/PickerContent.st.css.js.map +1 -1
  131. package/dist/cjs/components/PickerContent/PickerContentAdditionalStep.st.css.js +4 -4
  132. package/dist/cjs/components/PickerContent/PickerContentAdditionalStep.st.css.js.map +1 -1
  133. package/dist/cjs/components/PickerTableListItem/PickerTableListItem.st.css.js +2 -2
  134. package/dist/cjs/components/PickerTableListItem/PickerTableListItem.st.css.js.map +1 -1
  135. package/dist/cjs/components/ScrollableContent/ScrollableContent.st.css.js +2 -2
  136. package/dist/cjs/components/ScrollableContent/ScrollableContent.st.css.js.map +1 -1
  137. package/dist/cjs/components/SkeletonCard/SkeletonCard.st.css.js +3 -3
  138. package/dist/cjs/components/SkeletonCard/SkeletonCard.st.css.js.map +1 -1
  139. package/dist/cjs/components/SlidingModal/SlidingModal.st.css.js +2 -2
  140. package/dist/cjs/components/SlidingModal/SlidingModal.st.css.js.map +1 -1
  141. package/dist/cjs/components/TableGridSwitchButton/TableGridSwitchButton.js +14 -38
  142. package/dist/cjs/components/TableGridSwitchButton/TableGridSwitchButton.js.map +1 -1
  143. package/dist/cjs/components/TableGridSwitchButton/layoutConfig.js +34 -0
  144. package/dist/cjs/components/TableGridSwitchButton/layoutConfig.js.map +1 -0
  145. package/dist/cjs/components/TabsFilter/TabsFilter.st.css.js +3 -3
  146. package/dist/cjs/components/TabsFilter/TabsFilter.st.css.js.map +1 -1
  147. package/dist/cjs/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.js +2 -2
  148. package/dist/cjs/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.js.map +1 -1
  149. package/dist/cjs/components/ToolbarItem/ToolbarItem.st.css.js +2 -2
  150. package/dist/cjs/components/ToolbarItem/ToolbarItem.st.css.js.map +1 -1
  151. package/dist/cjs/components/ToolbarItemBox/ToolbarItemBox.st.css.js +2 -2
  152. package/dist/cjs/components/ToolbarItemBox/ToolbarItemBox.st.css.js.map +1 -1
  153. package/dist/cjs/components/common.st.css.js +4 -4
  154. package/dist/cjs/components/common.st.css.js.map +1 -1
  155. package/dist/cjs/hooks/useStaticListFilterCollection.js +2 -1
  156. package/dist/cjs/hooks/useStaticListFilterCollection.js.map +1 -1
  157. package/dist/cjs/state/CollectionPage/CollectionPageHeader.st.css.js +2 -2
  158. package/dist/cjs/state/CollectionPage/CollectionPageHeader.st.css.js.map +1 -1
  159. package/dist/cjs/state/EditableTable/CellInteractionState.js +65 -0
  160. package/dist/cjs/state/EditableTable/CellInteractionState.js.map +1 -1
  161. package/dist/cjs/state/EditableTable/types.js.map +1 -1
  162. package/dist/cjs/state/FormPage/FormPageHeader.st.css.js +2 -2
  163. package/dist/cjs/state/FormPage/FormPageHeader.st.css.js.map +1 -1
  164. package/dist/cjs/state/TableState.js +2 -0
  165. package/dist/cjs/state/TableState.js.map +1 -1
  166. package/dist/cjs/state/Toolbar/ToolbarResponsiveState.js +38 -4
  167. package/dist/cjs/state/Toolbar/ToolbarResponsiveState.js.map +1 -1
  168. package/dist/cjs/state/Toolbar/computeResponsiveTargetState.js +56 -17
  169. package/dist/cjs/state/Toolbar/computeResponsiveTargetState.js.map +1 -1
  170. package/dist/cjs/state/Toolbar/toolbarResponsiveConstants.js +5 -1
  171. package/dist/cjs/state/Toolbar/toolbarResponsiveConstants.js.map +1 -1
  172. package/dist/cjs/styles.global.css +1 -1
  173. package/dist/cjs/version.js +1 -1
  174. package/dist/cjs/version.js.map +1 -1
  175. package/dist/docs/AI Assistant.md +171 -0
  176. package/dist/docs/ActionCellProps.md +40 -0
  177. package/dist/docs/ActionSubItem.md +24 -0
  178. package/dist/docs/Allow Users to Add Extended Fields.md +194 -0
  179. package/dist/docs/AutoCompleteFilter.md +276 -0
  180. package/dist/docs/BulkActionModalRenderProp.md +22 -0
  181. package/dist/docs/BulkSelectState.md +18 -0
  182. package/dist/docs/Category.md +19 -0
  183. package/dist/docs/CollectionEmptyState.md +240 -0
  184. package/dist/docs/CollectionErrorState.md +107 -0
  185. package/dist/docs/CollectionNoResultsState.md +116 -0
  186. package/dist/docs/CollectionOptimisticActions.md +1074 -0
  187. package/dist/docs/CollectionPage.Content.md +154 -0
  188. package/dist/docs/CollectionPage.Header.md +216 -0
  189. package/dist/docs/CollectionPage.md +183 -0
  190. package/dist/docs/CollectionPremiumEmptyState.md +115 -0
  191. package/dist/docs/CollectionSearch.md +345 -0
  192. package/dist/docs/CollectionSection.md +16 -0
  193. package/dist/docs/CollectionState.md +29 -0
  194. package/dist/docs/CollectionSubToolbar.md +14 -0
  195. package/dist/docs/CollectionToolbar.md +18 -0
  196. package/dist/docs/Component Tests.md +191 -0
  197. package/dist/docs/ComputedQuery.md +45 -0
  198. package/dist/docs/CtaBaseProps.md +19 -0
  199. package/dist/docs/CustomColumns.md +916 -0
  200. package/dist/docs/CustomFieldsViewWidget.md +191 -0
  201. package/dist/docs/CustomFieldsWidget.md +635 -0
  202. package/dist/docs/Data Extension Overview.md +85 -0
  203. package/dist/docs/DataResultRaw.md +25 -0
  204. package/dist/docs/DateRangeFilter.md +202 -0
  205. package/dist/docs/Display Extended Fields.md +244 -0
  206. package/dist/docs/Enable Filters for Extended Fields.md +243 -0
  207. package/dist/docs/EntityPage.AdditionalContent.md +25 -0
  208. package/dist/docs/EntityPage.Card.md +250 -0
  209. package/dist/docs/EntityPage.Content.md +24 -0
  210. package/dist/docs/EntityPage.Header.md +260 -0
  211. package/dist/docs/EntityPage.MainContent.md +24 -0
  212. package/dist/docs/EntityPage.Slots.md +75 -0
  213. package/dist/docs/EntityPage.md +1030 -0
  214. package/dist/docs/EntityPageState.md +23 -0
  215. package/dist/docs/Explore Apps.md +170 -0
  216. package/dist/docs/ExportTo.md +894 -0
  217. package/dist/docs/Filter Overview.md +448 -0
  218. package/dist/docs/FilterProps.md +26 -0
  219. package/dist/docs/FormPageState.md +17 -0
  220. package/dist/docs/Grid Sections.md +170 -0
  221. package/dist/docs/Grid.md +598 -0
  222. package/dist/docs/GridDragAndDrop.md +131 -0
  223. package/dist/docs/GridFolders.md +259 -0
  224. package/dist/docs/GridFoldersSection.md +16 -0
  225. package/dist/docs/GridFoldersState.md +20 -0
  226. package/dist/docs/GridSectionsProp.md +22 -0
  227. package/dist/docs/GridState.md +22 -0
  228. package/dist/docs/Highlighted Search.md +114 -0
  229. package/dist/docs/InMemoryBackend.md +81 -0
  230. package/dist/docs/Indeterminate.md +273 -0
  231. package/dist/docs/Internal Scroll.md +236 -0
  232. package/dist/docs/More Actions.md +1015 -0
  233. package/dist/docs/MoreActionsItem.md +33 -0
  234. package/dist/docs/MultiAutoInlineCheckboxFilter.md +850 -0
  235. package/dist/docs/MultiBulkActionToolbar.md +1174 -0
  236. package/dist/docs/MultiInlineCheckboxFilter.md +871 -0
  237. package/dist/docs/MultiLevelSorting.md +376 -0
  238. package/dist/docs/MultiSelectCheckboxFilter.md +369 -0
  239. package/dist/docs/MultiSelectCollectionFilter.md +218 -0
  240. package/dist/docs/NestedTable.md +1101 -0
  241. package/dist/docs/NestedTableLevel.md +24 -0
  242. package/dist/docs/NestedTableNodeState.md +23 -0
  243. package/dist/docs/NestedTableOptimisticActions.md +21 -0
  244. package/dist/docs/NestedTableState.md +21 -0
  245. package/dist/docs/Next.js.md +143 -0
  246. package/dist/docs/NumberRangeFilter.md +230 -0
  247. package/dist/docs/OperatorFilterPicker.md +195 -0
  248. package/dist/docs/PageWrapper.md +50 -0
  249. package/dist/docs/PatternsReactRoute.md +31 -0
  250. package/dist/docs/PatternsReactRouter.md +24 -0
  251. package/dist/docs/PickerContent.md +129 -0
  252. package/dist/docs/PickerModal.md +680 -0
  253. package/dist/docs/PickerStandalone.md +332 -0
  254. package/dist/docs/PrimaryActionButton.md +323 -0
  255. package/dist/docs/PrimaryActions.md +173 -0
  256. package/dist/docs/PrimaryPageButton.md +140 -0
  257. package/dist/docs/RadioGroupFilter.md +73 -0
  258. package/dist/docs/RequestId.md +58 -0
  259. package/dist/docs/SecondaryActions.md +175 -0
  260. package/dist/docs/SettingsPage.AdditionalContent.md +25 -0
  261. package/dist/docs/SettingsPage.Card.md +246 -0
  262. package/dist/docs/SettingsPage.Content.md +24 -0
  263. package/dist/docs/SettingsPage.Header.md +176 -0
  264. package/dist/docs/SettingsPage.MainContent.md +24 -0
  265. package/dist/docs/SettingsPage.md +680 -0
  266. package/dist/docs/SettingsPageState.md +22 -0
  267. package/dist/docs/SingleSelectFilter.md +401 -0
  268. package/dist/docs/Sled Tests.md +109 -0
  269. package/dist/docs/Sortable Columns.md +250 -0
  270. package/dist/docs/Suggestions.md +370 -0
  271. package/dist/docs/SummaryBar.md +515 -0
  272. package/dist/docs/Table Sections.md +473 -0
  273. package/dist/docs/Table.md +1065 -0
  274. package/dist/docs/TableColumn.md +35 -0
  275. package/dist/docs/TableDragAndDrop.md +502 -0
  276. package/dist/docs/TableFolders.md +419 -0
  277. package/dist/docs/TableFoldersState.md +22 -0
  278. package/dist/docs/TableGridSwitch.md +298 -0
  279. package/dist/docs/TableGridSwitchDragAndDrop.md +170 -0
  280. package/dist/docs/TableGridSwitchFolders.md +446 -0
  281. package/dist/docs/TableGridSwitchFoldersState.md +22 -0
  282. package/dist/docs/TableGridSwitchState.md +23 -0
  283. package/dist/docs/TableSectionsProp.md +22 -0
  284. package/dist/docs/TableState.md +24 -0
  285. package/dist/docs/TableTopNotification.md +314 -0
  286. package/dist/docs/TabsFilter.md +484 -0
  287. package/dist/docs/Tags Overview.md +118 -0
  288. package/dist/docs/Tags.md +718 -0
  289. package/dist/docs/TagsWidget.md +419 -0
  290. package/dist/docs/ToolbarCollectionState.md +19 -0
  291. package/dist/docs/ToolbarFilters.md +1588 -0
  292. package/dist/docs/ToolbarSecondaryActions.md +383 -0
  293. package/dist/docs/ToolbarTitle.md +324 -0
  294. package/dist/docs/View.md +23 -0
  295. package/dist/docs/Views.md +786 -0
  296. package/dist/docs/WidgetsFormProvider.md +61 -0
  297. package/dist/docs/WixPatternsBMProvider.md +31 -0
  298. package/dist/docs/WixPatternsBaseProvider.md +87 -0
  299. package/dist/docs/WixPatternsEssentialsProvider.md +43 -0
  300. package/dist/docs/WixPatternsGizaProvider.md +37 -0
  301. package/dist/docs/WixPatternsProvider.md +68 -0
  302. package/dist/docs/Working with Cache.md +114 -0
  303. package/dist/docs/arrayFilter.md +226 -0
  304. package/dist/docs/bulkActionModal.md +40 -0
  305. package/dist/docs/createNestedTableLevel.md +24 -0
  306. package/dist/docs/createNestedTableSingleEntityLevels.md +20 -0
  307. package/dist/docs/customFilter.md +182 -0
  308. package/dist/docs/dateRangeFilter.md +55 -0
  309. package/dist/docs/deleteSecondaryAction.md +122 -0
  310. package/dist/docs/idNameArrayFilter.md +206 -0
  311. package/dist/docs/index.json +662 -0
  312. package/dist/docs/operatorFilter.md +183 -0
  313. package/dist/docs/stringFilter.md +204 -0
  314. package/dist/docs/stringsArrayFilter.md +118 -0
  315. package/dist/docs/useAmbassadorCollection.md +45 -0
  316. package/dist/docs/useCollection.md +61 -0
  317. package/dist/docs/useCreateCollection.md +32 -0
  318. package/dist/docs/useCreateNestedOptimisticActions.md +21 -0
  319. package/dist/docs/useEntity.md +44 -0
  320. package/dist/docs/useEntityPage.md +57 -0
  321. package/dist/docs/useEntityPageContext.md +28 -0
  322. package/dist/docs/useFilterCollection.md +163 -0
  323. package/dist/docs/useGridCollection.md +58 -0
  324. package/dist/docs/useGridFolders.md +25 -0
  325. package/dist/docs/useItemsSelectionFilter.md +60 -0
  326. package/dist/docs/useNestedTable.md +66 -0
  327. package/dist/docs/useOptimisticActions.md +1288 -0
  328. package/dist/docs/usePatternsNavigate.md +57 -0
  329. package/dist/docs/usePickerContent.md +61 -0
  330. package/dist/docs/usePickerModal.md +68 -0
  331. package/dist/docs/usePickerStandalone.md +56 -0
  332. package/dist/docs/useSelector.md +181 -0
  333. package/dist/docs/useSettingsPage.md +54 -0
  334. package/dist/docs/useSettingsPageContext.md +28 -0
  335. package/dist/docs/useStaticListFilterCollection.md +194 -0
  336. package/dist/docs/useTableCollection.md +58 -0
  337. package/dist/docs/useTableFolders.md +25 -0
  338. package/dist/docs/useTableGridSwitchCollection.md +58 -0
  339. package/dist/docs/useTableGridSwitchFolders.md +25 -0
  340. package/dist/docs/useWidgetsFormContext.md +19 -0
  341. package/dist/esm/components/CardContainer/CardContainer.st.css.js +2 -2
  342. package/dist/esm/components/Collapse/Collapse.st.css.js +2 -2
  343. package/dist/esm/components/Collapse/Collapse.st.css.js.map +1 -1
  344. package/dist/esm/components/CollectionPageNew/CollectionPage.st.css.js +2 -2
  345. package/dist/esm/components/CollectionSectionHeader/CollectionSectionHeader.st.css.js +2 -2
  346. package/dist/esm/components/CollectionTable/CollectionTable.st.css.js +2 -2
  347. package/dist/esm/components/CollectionTable/CollectionTableWSRTable.js +3 -1
  348. package/dist/esm/components/CollectionTable/CollectionTableWSRTable.js.map +1 -1
  349. package/dist/esm/components/CollectionToolbar/CollectionToolbar.js +3 -2
  350. package/dist/esm/components/CollectionToolbar/CollectionToolbar.js.map +1 -1
  351. package/dist/esm/components/CollectionToolbar/CollectionToolbar.st.css.js +2 -2
  352. package/dist/esm/components/CollectionToolbar/CollectionToolbar.st.css.js.map +1 -1
  353. package/dist/esm/components/CollectionToolbar/CollectionToolbarActionsGroupResponsiveLayout.js +39 -6
  354. package/dist/esm/components/CollectionToolbar/CollectionToolbarActionsGroupResponsiveLayout.js.map +1 -1
  355. package/dist/esm/components/CollectionToolbar/CollectionToolbarActionsToolbarItemsGroup.js +2 -1
  356. package/dist/esm/components/CollectionToolbar/CollectionToolbarActionsToolbarItemsGroup.js.map +1 -1
  357. package/dist/esm/components/CollectionToolbar/SearchOrCustomFilter.st.css.js +2 -2
  358. package/dist/esm/components/CollectionToolbar/SearchOrCustomFilter.st.css.js.map +1 -1
  359. package/dist/esm/components/CollectionToolbar/ToolbarOverflowMenu.js +110 -0
  360. package/dist/esm/components/CollectionToolbar/ToolbarOverflowMenu.js.map +1 -0
  361. package/dist/esm/components/CollectionToolbar/useToolbarOverflowItems.js +74 -0
  362. package/dist/esm/components/CollectionToolbar/useToolbarOverflowItems.js.map +1 -0
  363. package/dist/esm/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.js +2 -2
  364. package/dist/esm/components/CollectionViewsDropdown/ViewsDropdown.st.css.js +2 -2
  365. package/dist/esm/components/CollectionViewsDropdown/ViewsDropdown.st.css.js.map +1 -1
  366. package/dist/esm/components/DragHandle/DragHandle.st.css.js +2 -2
  367. package/dist/esm/components/EditableTable/EditableCell.st.css.js +2 -2
  368. package/dist/esm/components/EditableTable/EditableCell.st.css.js.map +1 -1
  369. package/dist/esm/components/EditableTable/cellTypes/boolean/Edit.st.css.js +2 -2
  370. package/dist/esm/components/EditableTable/cellTypes/boolean/View.st.css.js +2 -2
  371. package/dist/esm/components/EditableTable/cellTypes/date/Edit.st.css.js +2 -2
  372. package/dist/esm/components/EditableTable/cellTypes/date/View.st.css.js +2 -2
  373. package/dist/esm/components/EditableTable/cellTypes/email/Edit.js +21 -0
  374. package/dist/esm/components/EditableTable/cellTypes/email/Edit.js.map +1 -0
  375. package/dist/esm/components/EditableTable/cellTypes/email/Edit.st.css +4 -0
  376. package/dist/esm/components/EditableTable/cellTypes/email/Edit.st.css.js +15 -0
  377. package/dist/esm/components/EditableTable/cellTypes/email/Edit.st.css.js.map +1 -0
  378. package/dist/esm/components/EditableTable/cellTypes/email/Edit.uni.driver.js +13 -0
  379. package/dist/esm/components/EditableTable/cellTypes/email/Edit.uni.driver.js.map +1 -0
  380. package/dist/esm/components/EditableTable/cellTypes/email/View.js +5 -0
  381. package/dist/esm/components/EditableTable/cellTypes/email/View.js.map +1 -0
  382. package/dist/esm/components/EditableTable/cellTypes/email/View.st.css +4 -0
  383. package/dist/esm/components/EditableTable/cellTypes/email/View.st.css.js +15 -0
  384. package/dist/esm/components/EditableTable/cellTypes/email/View.st.css.js.map +1 -0
  385. package/dist/esm/components/EditableTable/cellTypes/email/View.uni.driver.js +8 -0
  386. package/dist/esm/components/EditableTable/cellTypes/email/View.uni.driver.js.map +1 -0
  387. package/dist/esm/components/EditableTable/cellTypes/email/index.js +22 -0
  388. package/dist/esm/components/EditableTable/cellTypes/email/index.js.map +1 -0
  389. package/dist/esm/components/EditableTable/cellTypes/index.js +5 -1
  390. package/dist/esm/components/EditableTable/cellTypes/index.js.map +1 -1
  391. package/dist/esm/components/EditableTable/cellTypes/number/Edit.js +2 -5
  392. package/dist/esm/components/EditableTable/cellTypes/number/Edit.js.map +1 -1
  393. package/dist/esm/components/EditableTable/cellTypes/number/Edit.st.css.js +2 -2
  394. package/dist/esm/components/EditableTable/cellTypes/number/View.js +2 -2
  395. package/dist/esm/components/EditableTable/cellTypes/number/View.js.map +1 -1
  396. package/dist/esm/components/EditableTable/cellTypes/number/View.st.css.js +2 -2
  397. package/dist/esm/components/EditableTable/cellTypes/number/View.st.css.js.map +1 -1
  398. package/dist/esm/components/EditableTable/cellTypes/object/Edit.js +39 -0
  399. package/dist/esm/components/EditableTable/cellTypes/object/Edit.js.map +1 -0
  400. package/dist/esm/components/EditableTable/cellTypes/object/Edit.st.css +4 -0
  401. package/dist/esm/components/EditableTable/cellTypes/object/Edit.st.css.js +15 -0
  402. package/dist/esm/components/EditableTable/cellTypes/object/Edit.st.css.js.map +1 -0
  403. package/dist/esm/components/EditableTable/cellTypes/object/Edit.uni.driver.js +13 -0
  404. package/dist/esm/components/EditableTable/cellTypes/object/Edit.uni.driver.js.map +1 -0
  405. package/dist/esm/components/EditableTable/cellTypes/object/View.js +5 -0
  406. package/dist/esm/components/EditableTable/cellTypes/object/View.js.map +1 -0
  407. package/dist/esm/components/EditableTable/cellTypes/object/View.st.css +4 -0
  408. package/dist/esm/components/EditableTable/cellTypes/object/View.st.css.js +15 -0
  409. package/dist/esm/components/EditableTable/cellTypes/object/View.st.css.js.map +1 -0
  410. package/dist/esm/components/EditableTable/cellTypes/object/View.uni.driver.js +8 -0
  411. package/dist/esm/components/EditableTable/cellTypes/object/View.uni.driver.js.map +1 -0
  412. package/dist/esm/components/EditableTable/cellTypes/object/index.js +47 -0
  413. package/dist/esm/components/EditableTable/cellTypes/object/index.js.map +1 -0
  414. package/dist/esm/components/EditableTable/cellTypes/select/Edit.st.css.js +2 -2
  415. package/dist/esm/components/EditableTable/cellTypes/select/Edit.st.css.js.map +1 -1
  416. package/dist/esm/components/EditableTable/cellTypes/select/View.st.css.js +2 -2
  417. package/dist/esm/components/EditableTable/cellTypes/text/Edit.st.css.js +2 -2
  418. package/dist/esm/components/EditableTable/cellTypes/text/View.st.css.js +2 -2
  419. package/dist/esm/components/EditableTable/cellTypes/text/View.st.css.js.map +1 -1
  420. package/dist/esm/components/EditableTable/cellTypes/url/Edit.st.css.js +2 -2
  421. package/dist/esm/components/EditableTable/cellTypes/url/View.st.css.js +2 -2
  422. package/dist/esm/components/EditableTable/cellTypes/url/View.st.css.js.map +1 -1
  423. package/dist/esm/components/EditableTable/useCellFocusAndEditing.js +15 -1
  424. package/dist/esm/components/EditableTable/useCellFocusAndEditing.js.map +1 -1
  425. package/dist/esm/components/EditableTable/useKeyboardNavigation.js +10 -0
  426. package/dist/esm/components/EditableTable/useKeyboardNavigation.js.map +1 -1
  427. package/dist/esm/components/EntityPage/EntityPagePlain.st.css.js +2 -2
  428. package/dist/esm/components/EntityPage/EntityPagePlain.st.css.js.map +1 -1
  429. package/dist/esm/components/Fade/Fade.st.css.js +2 -2
  430. package/dist/esm/components/Fade/Fade.st.css.js.map +1 -1
  431. package/dist/esm/components/Heading/Heading.st.css.js +2 -2
  432. package/dist/esm/components/Heading/Heading.st.css.js.map +1 -1
  433. package/dist/esm/components/ImportButton/ImportStepUpload.st.css.js +2 -2
  434. package/dist/esm/components/InputOverflow/InputOverflow.st.css.js +2 -2
  435. package/dist/esm/components/LoadingRow/LoadingRow.st.css.js +3 -3
  436. package/dist/esm/components/LoadingRow/LoadingRow.st.css.js.map +1 -1
  437. package/dist/esm/components/MaxHeightText/MaxHeightText.st.css.js +2 -2
  438. package/dist/esm/components/MaxHeightText/MaxHeightText.st.css.js.map +1 -1
  439. package/dist/esm/components/MaxLines/MaxLines.st.css.js +2 -2
  440. package/dist/esm/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.js +2 -2
  441. package/dist/esm/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.js +2 -2
  442. package/dist/esm/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.js.map +1 -1
  443. package/dist/esm/components/NestedTable/NestedTableRow.st.css.js +2 -2
  444. package/dist/esm/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.js +2 -2
  445. package/dist/esm/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.js +2 -2
  446. package/dist/esm/components/PickerContent/PickerContent.st.css.js +2 -2
  447. package/dist/esm/components/PickerContent/PickerContentAdditionalStep.st.css.js +2 -2
  448. package/dist/esm/components/PickerContent/PickerContentAdditionalStep.st.css.js.map +1 -1
  449. package/dist/esm/components/PickerTableListItem/PickerTableListItem.st.css.js +2 -2
  450. package/dist/esm/components/PickerTableListItem/PickerTableListItem.st.css.js.map +1 -1
  451. package/dist/esm/components/ScrollableContent/ScrollableContent.st.css.js +2 -2
  452. package/dist/esm/components/ScrollableContent/ScrollableContent.st.css.js.map +1 -1
  453. package/dist/esm/components/SkeletonCard/SkeletonCard.st.css.js +2 -2
  454. package/dist/esm/components/SlidingModal/SlidingModal.st.css.js +2 -2
  455. package/dist/esm/components/SlidingModal/SlidingModal.st.css.js.map +1 -1
  456. package/dist/esm/components/TableGridSwitchButton/TableGridSwitchButton.js +2 -12
  457. package/dist/esm/components/TableGridSwitchButton/TableGridSwitchButton.js.map +1 -1
  458. package/dist/esm/components/TableGridSwitchButton/layoutConfig.js +14 -0
  459. package/dist/esm/components/TableGridSwitchButton/layoutConfig.js.map +1 -0
  460. package/dist/esm/components/TabsFilter/TabsFilter.st.css.js +2 -2
  461. package/dist/esm/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.js +2 -2
  462. package/dist/esm/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.js.map +1 -1
  463. package/dist/esm/components/ToolbarItem/ToolbarItem.st.css.js +2 -2
  464. package/dist/esm/components/ToolbarItemBox/ToolbarItemBox.st.css.js +2 -2
  465. package/dist/esm/components/common.st.css.js +2 -2
  466. package/dist/esm/hooks/useStaticListFilterCollection.js +1 -0
  467. package/dist/esm/hooks/useStaticListFilterCollection.js.map +1 -1
  468. package/dist/esm/state/CollectionPage/CollectionPageHeader.st.css.js +2 -2
  469. package/dist/esm/state/CollectionPage/CollectionPageHeader.st.css.js.map +1 -1
  470. package/dist/esm/state/EditableTable/CellInteractionState.js +58 -0
  471. package/dist/esm/state/EditableTable/CellInteractionState.js.map +1 -1
  472. package/dist/esm/state/FormPage/FormPageHeader.st.css.js +2 -2
  473. package/dist/esm/state/TableState.js +2 -0
  474. package/dist/esm/state/TableState.js.map +1 -1
  475. package/dist/esm/state/Toolbar/ToolbarResponsiveState.js +40 -5
  476. package/dist/esm/state/Toolbar/ToolbarResponsiveState.js.map +1 -1
  477. package/dist/esm/state/Toolbar/computeResponsiveTargetState.js +46 -18
  478. package/dist/esm/state/Toolbar/computeResponsiveTargetState.js.map +1 -1
  479. package/dist/esm/state/Toolbar/toolbarResponsiveConstants.js +4 -0
  480. package/dist/esm/state/Toolbar/toolbarResponsiveConstants.js.map +1 -1
  481. package/dist/esm/styles.global.css +1 -1
  482. package/dist/esm/version.js +1 -1
  483. package/dist/types/components/Collapse/Collapse.st.css.d.ts.map +1 -1
  484. package/dist/types/components/CollectionTable/CollectionTable.uni.driver.d.ts +24 -24
  485. package/dist/types/components/CollectionTable/CollectionTableWSRTable.d.ts.map +1 -1
  486. package/dist/types/components/CollectionToolbar/CollectionToolbar.d.ts.map +1 -1
  487. package/dist/types/components/CollectionToolbar/CollectionToolbar.st.css.d.ts.map +1 -1
  488. package/dist/types/components/CollectionToolbar/CollectionToolbar.uni.driver.d.ts +11 -11
  489. package/dist/types/components/CollectionToolbar/CollectionToolbarActionsGroupProps.d.ts +3 -0
  490. package/dist/types/components/CollectionToolbar/CollectionToolbarActionsGroupProps.d.ts.map +1 -1
  491. package/dist/types/components/CollectionToolbar/CollectionToolbarActionsGroupResponsiveLayout.d.ts +5 -1
  492. package/dist/types/components/CollectionToolbar/CollectionToolbarActionsGroupResponsiveLayout.d.ts.map +1 -1
  493. package/dist/types/components/CollectionToolbar/CollectionToolbarActionsToolbarItemsGroup.d.ts.map +1 -1
  494. package/dist/types/components/CollectionToolbar/SearchOrCustomFilter.st.css.d.ts.map +1 -1
  495. package/dist/types/components/CollectionToolbar/ToolbarOverflowMenu.d.ts +24 -0
  496. package/dist/types/components/CollectionToolbar/ToolbarOverflowMenu.d.ts.map +1 -0
  497. package/dist/types/components/CollectionToolbar/useToolbarOverflowItems.d.ts +17 -0
  498. package/dist/types/components/CollectionToolbar/useToolbarOverflowItems.d.ts.map +1 -0
  499. package/dist/types/components/CollectionViewsDropdown/ViewsDropdown.st.css.d.ts.map +1 -1
  500. package/dist/types/components/CtaProps.d.ts +1 -1
  501. package/dist/types/components/CustomFieldModal/CustomFieldModal.uni.driver.d.ts +2 -2
  502. package/dist/types/components/CustomFieldsWidget/CustomFieldsWidget.uni.driver.d.ts +3 -3
  503. package/dist/types/components/DropdownFilter/CollectionDropdownFilter.uni.driver.d.ts +1 -1
  504. package/dist/types/components/EditableTable/EditableCell.st.css.d.ts.map +1 -1
  505. package/dist/types/components/EditableTable/cellTypes/email/Edit.d.ts +4 -0
  506. package/dist/types/components/EditableTable/cellTypes/email/Edit.d.ts.map +1 -0
  507. package/dist/types/components/EditableTable/cellTypes/email/Edit.st.css.d.ts +14 -0
  508. package/dist/types/components/EditableTable/cellTypes/email/Edit.st.css.d.ts.map +1 -0
  509. package/dist/types/components/EditableTable/cellTypes/email/Edit.uni.driver.d.ts +22 -0
  510. package/dist/types/components/EditableTable/cellTypes/email/Edit.uni.driver.d.ts.map +1 -0
  511. package/dist/types/components/EditableTable/cellTypes/email/View.d.ts +4 -0
  512. package/dist/types/components/EditableTable/cellTypes/email/View.d.ts.map +1 -0
  513. package/dist/types/components/EditableTable/cellTypes/email/View.st.css.d.ts +14 -0
  514. package/dist/types/components/EditableTable/cellTypes/email/View.st.css.d.ts.map +1 -0
  515. package/dist/types/components/EditableTable/cellTypes/email/View.uni.driver.d.ts +15 -0
  516. package/dist/types/components/EditableTable/cellTypes/email/View.uni.driver.d.ts.map +1 -0
  517. package/dist/types/components/EditableTable/cellTypes/email/index.d.ts +5 -0
  518. package/dist/types/components/EditableTable/cellTypes/email/index.d.ts.map +1 -0
  519. package/dist/types/components/EditableTable/cellTypes/index.d.ts +3 -1
  520. package/dist/types/components/EditableTable/cellTypes/index.d.ts.map +1 -1
  521. package/dist/types/components/EditableTable/cellTypes/number/Edit.d.ts.map +1 -1
  522. package/dist/types/components/EditableTable/cellTypes/number/View.d.ts.map +1 -1
  523. package/dist/types/components/EditableTable/cellTypes/number/View.st.css.d.ts.map +1 -1
  524. package/dist/types/components/EditableTable/cellTypes/object/Edit.d.ts +4 -0
  525. package/dist/types/components/EditableTable/cellTypes/object/Edit.d.ts.map +1 -0
  526. package/dist/types/components/EditableTable/cellTypes/object/Edit.st.css.d.ts +14 -0
  527. package/dist/types/components/EditableTable/cellTypes/object/Edit.st.css.d.ts.map +1 -0
  528. package/dist/types/components/EditableTable/cellTypes/object/Edit.uni.driver.d.ts +22 -0
  529. package/dist/types/components/EditableTable/cellTypes/object/Edit.uni.driver.d.ts.map +1 -0
  530. package/dist/types/components/EditableTable/cellTypes/object/View.d.ts +4 -0
  531. package/dist/types/components/EditableTable/cellTypes/object/View.d.ts.map +1 -0
  532. package/dist/types/components/EditableTable/cellTypes/object/View.st.css.d.ts +14 -0
  533. package/dist/types/components/EditableTable/cellTypes/object/View.st.css.d.ts.map +1 -0
  534. package/dist/types/components/EditableTable/cellTypes/object/View.uni.driver.d.ts +15 -0
  535. package/dist/types/components/EditableTable/cellTypes/object/View.uni.driver.d.ts.map +1 -0
  536. package/dist/types/components/EditableTable/cellTypes/object/index.d.ts +5 -0
  537. package/dist/types/components/EditableTable/cellTypes/object/index.d.ts.map +1 -0
  538. package/dist/types/components/EditableTable/cellTypes/select/Edit.st.css.d.ts.map +1 -1
  539. package/dist/types/components/EditableTable/cellTypes/text/View.st.css.d.ts.map +1 -1
  540. package/dist/types/components/EditableTable/cellTypes/url/View.st.css.d.ts.map +1 -1
  541. package/dist/types/components/EditableTable/useCellFocusAndEditing.d.ts.map +1 -1
  542. package/dist/types/components/EditableTable/useKeyboardNavigation.d.ts.map +1 -1
  543. package/dist/types/components/EntityPage/EntityPagePlain.st.css.d.ts.map +1 -1
  544. package/dist/types/components/Fade/Fade.st.css.d.ts.map +1 -1
  545. package/dist/types/components/FiltersPanel/FiltersPanel.uni.driver.d.ts +4 -4
  546. package/dist/types/components/Grid/Grid.uni.driver.d.ts +13 -13
  547. package/dist/types/components/Grid/GridFolders.uni.driver.d.ts +38 -38
  548. package/dist/types/components/Grid/GridFoldersSection.uni.driver.d.ts +13 -13
  549. package/dist/types/components/Heading/Heading.st.css.d.ts.map +1 -1
  550. package/dist/types/components/Kanban/Kanban.uni.driver.d.ts +11 -11
  551. package/dist/types/components/LoadingRow/LoadingRow.st.css.d.ts.map +1 -1
  552. package/dist/types/components/MaxHeightText/MaxHeightText.st.css.d.ts.map +1 -1
  553. package/dist/types/components/NestedTable/NestedTable.uni.driver.d.ts +37 -37
  554. package/dist/types/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.d.ts.map +1 -1
  555. package/dist/types/components/PickerContent/PickerContentAdditionalStep.st.css.d.ts.map +1 -1
  556. package/dist/types/components/PickerTableListItem/PickerTableListItem.st.css.d.ts.map +1 -1
  557. package/dist/types/components/ScrollableContent/ScrollableContent.st.css.d.ts.map +1 -1
  558. package/dist/types/components/SlidingModal/SlidingModal.st.css.d.ts.map +1 -1
  559. package/dist/types/components/SummaryBar/SummaryBar.uni.driver.d.ts +1 -1
  560. package/dist/types/components/Table/Table.uni.driver.d.ts +26 -26
  561. package/dist/types/components/TableFolders/TableFolders.uni.driver.d.ts +37 -37
  562. package/dist/types/components/TableGridSwitch/TableGridSwitch.uni.driver.d.ts +40 -40
  563. package/dist/types/components/TableGridSwitchButton/TableGridSwitchButton.d.ts.map +1 -1
  564. package/dist/types/components/TableGridSwitchButton/layoutConfig.d.ts +9 -0
  565. package/dist/types/components/TableGridSwitchButton/layoutConfig.d.ts.map +1 -0
  566. package/dist/types/components/TabsFilter/TabsFilter.uni.driver.d.ts +1 -1
  567. package/dist/types/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.d.ts.map +1 -1
  568. package/dist/types/hooks/useStaticListFilterCollection.d.ts.map +1 -1
  569. package/dist/types/state/CollectionPage/CollectionPageHeader.st.css.d.ts.map +1 -1
  570. package/dist/types/state/EditableTable/CellInteractionState.d.ts +7 -0
  571. package/dist/types/state/EditableTable/CellInteractionState.d.ts.map +1 -1
  572. package/dist/types/state/EditableTable/types.d.ts +2 -0
  573. package/dist/types/state/EditableTable/types.d.ts.map +1 -1
  574. package/dist/types/state/TableState.d.ts +2 -0
  575. package/dist/types/state/TableState.d.ts.map +1 -1
  576. package/dist/types/state/Toolbar/ToolbarResponsiveState.d.ts +3 -0
  577. package/dist/types/state/Toolbar/ToolbarResponsiveState.d.ts.map +1 -1
  578. package/dist/types/state/Toolbar/computeResponsiveTargetState.d.ts +8 -1
  579. package/dist/types/state/Toolbar/computeResponsiveTargetState.d.ts.map +1 -1
  580. package/dist/types/state/Toolbar/toolbarResponsiveConstants.d.ts +2 -0
  581. package/dist/types/state/Toolbar/toolbarResponsiveConstants.d.ts.map +1 -1
  582. package/dist/types/testkit/enzyme.d.ts +194 -194
  583. package/dist/types/testkit/jsdom.d.ts +207 -207
  584. package/dist/types/testkit/playwright.d.ts +194 -194
  585. package/dist/types/testkit/puppeteer.d.ts +205 -205
  586. package/dist/types/version.d.ts +1 -1
  587. package/package.json +10 -7
  588. package/src/components/CardContainer/CardContainer.st.css.ts +2 -2
  589. package/src/components/Collapse/Collapse.st.css.ts +2 -2
  590. package/src/components/CollectionPageNew/CollectionPage.st.css.ts +2 -2
  591. package/src/components/CollectionSectionHeader/CollectionSectionHeader.st.css.ts +2 -2
  592. package/src/components/CollectionTable/CollectionTable.st.css.ts +2 -2
  593. package/src/components/CollectionTable/CollectionTableWSRTable.tsx +3 -0
  594. package/src/components/CollectionToolbar/CollectionToolbar.st.css.ts +2 -2
  595. package/src/components/CollectionToolbar/CollectionToolbar.tsx +11 -4
  596. package/src/components/CollectionToolbar/CollectionToolbarActionsGroupProps.ts +3 -0
  597. package/src/components/CollectionToolbar/CollectionToolbarActionsGroupResponsiveLayout.tsx +73 -16
  598. package/src/components/CollectionToolbar/CollectionToolbarActionsToolbarItemsGroup.tsx +4 -0
  599. package/src/components/CollectionToolbar/SearchOrCustomFilter.st.css.ts +2 -2
  600. package/src/components/CollectionToolbar/ToolbarOverflowMenu.tsx +323 -0
  601. package/src/components/CollectionToolbar/useToolbarOverflowItems.ts +112 -0
  602. package/src/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.ts +2 -2
  603. package/src/components/CollectionViewsDropdown/ViewsDropdown.st.css.ts +2 -2
  604. package/src/components/CtaProps.ts +1 -1
  605. package/src/components/DragHandle/DragHandle.st.css.ts +2 -2
  606. package/src/components/EditableTable/EditableCell.st.css.ts +2 -2
  607. package/src/components/EditableTable/cellTypes/boolean/Edit.st.css.ts +2 -2
  608. package/src/components/EditableTable/cellTypes/boolean/View.st.css.ts +2 -2
  609. package/src/components/EditableTable/cellTypes/date/Edit.st.css.ts +2 -2
  610. package/src/components/EditableTable/cellTypes/date/View.st.css.ts +2 -2
  611. package/src/components/EditableTable/cellTypes/email/Edit.st.css +4 -0
  612. package/src/components/EditableTable/cellTypes/email/Edit.st.css.ts +25 -0
  613. package/src/components/EditableTable/cellTypes/email/Edit.tsx +46 -0
  614. package/src/components/EditableTable/cellTypes/email/Edit.uni.driver.ts +23 -0
  615. package/src/components/EditableTable/cellTypes/email/View.st.css +4 -0
  616. package/src/components/EditableTable/cellTypes/email/View.st.css.ts +25 -0
  617. package/src/components/EditableTable/cellTypes/email/View.tsx +8 -0
  618. package/src/components/EditableTable/cellTypes/email/View.uni.driver.ts +9 -0
  619. package/src/components/EditableTable/cellTypes/email/index.ts +23 -0
  620. package/src/components/EditableTable/cellTypes/index.ts +6 -0
  621. package/src/components/EditableTable/cellTypes/number/Edit.st.css.ts +2 -2
  622. package/src/components/EditableTable/cellTypes/number/Edit.tsx +3 -8
  623. package/src/components/EditableTable/cellTypes/number/View.st.css.ts +2 -2
  624. package/src/components/EditableTable/cellTypes/number/View.tsx +2 -4
  625. package/src/components/EditableTable/cellTypes/object/Edit.st.css +4 -0
  626. package/src/components/EditableTable/cellTypes/object/Edit.st.css.ts +25 -0
  627. package/src/components/EditableTable/cellTypes/object/Edit.tsx +72 -0
  628. package/src/components/EditableTable/cellTypes/object/Edit.uni.driver.ts +22 -0
  629. package/src/components/EditableTable/cellTypes/object/View.st.css +4 -0
  630. package/src/components/EditableTable/cellTypes/object/View.st.css.ts +25 -0
  631. package/src/components/EditableTable/cellTypes/object/View.tsx +12 -0
  632. package/src/components/EditableTable/cellTypes/object/View.uni.driver.ts +9 -0
  633. package/src/components/EditableTable/cellTypes/object/index.ts +49 -0
  634. package/src/components/EditableTable/cellTypes/select/Edit.st.css.ts +2 -2
  635. package/src/components/EditableTable/cellTypes/select/View.st.css.ts +2 -2
  636. package/src/components/EditableTable/cellTypes/text/Edit.st.css.ts +2 -2
  637. package/src/components/EditableTable/cellTypes/text/View.st.css.ts +2 -2
  638. package/src/components/EditableTable/cellTypes/url/Edit.st.css.ts +2 -2
  639. package/src/components/EditableTable/cellTypes/url/View.st.css.ts +2 -2
  640. package/src/components/EditableTable/useCellFocusAndEditing.ts +16 -1
  641. package/src/components/EditableTable/useKeyboardNavigation.ts +11 -0
  642. package/src/components/EntityPage/EntityPagePlain.st.css.ts +2 -2
  643. package/src/components/Fade/Fade.st.css.ts +2 -2
  644. package/src/components/Heading/Heading.st.css.ts +2 -2
  645. package/src/components/ImportButton/ImportStepUpload.st.css.ts +2 -2
  646. package/src/components/InputOverflow/InputOverflow.st.css.ts +2 -2
  647. package/src/components/LoadingRow/LoadingRow.st.css.ts +3 -3
  648. package/src/components/MaxHeightText/MaxHeightText.st.css.ts +2 -2
  649. package/src/components/MaxLines/MaxLines.st.css.ts +2 -2
  650. package/src/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.ts +2 -2
  651. package/src/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.ts +2 -2
  652. package/src/components/NestedTable/NestedTableRow.st.css.ts +2 -2
  653. package/src/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.ts +2 -2
  654. package/src/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.ts +2 -2
  655. package/src/components/PickerContent/PickerContent.st.css.ts +2 -2
  656. package/src/components/PickerContent/PickerContentAdditionalStep.st.css.ts +2 -2
  657. package/src/components/PickerTableListItem/PickerTableListItem.st.css.ts +2 -2
  658. package/src/components/ScrollableContent/ScrollableContent.st.css.ts +2 -2
  659. package/src/components/SkeletonCard/SkeletonCard.st.css.ts +2 -2
  660. package/src/components/SlidingModal/SlidingModal.st.css.ts +2 -2
  661. package/src/components/TableGridSwitchButton/TableGridSwitchButton.tsx +2 -21
  662. package/src/components/TableGridSwitchButton/layoutConfig.tsx +20 -0
  663. package/src/components/TabsFilter/TabsFilter.st.css.ts +2 -2
  664. package/src/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.ts +2 -2
  665. package/src/components/ToolbarItem/ToolbarItem.st.css.ts +2 -2
  666. package/src/components/ToolbarItemBox/ToolbarItemBox.st.css.ts +2 -2
  667. package/src/components/common.st.css.ts +2 -2
  668. package/src/hooks/useStaticListFilterCollection.ts +1 -0
  669. package/src/state/CollectionPage/CollectionPageHeader.st.css.ts +2 -2
  670. package/src/state/EditableTable/CellInteractionState.ts +63 -0
  671. package/src/state/EditableTable/types.ts +2 -0
  672. package/src/state/FormPage/FormPageHeader.st.css.ts +2 -2
  673. package/src/state/TableState.ts +3 -0
  674. package/src/state/Toolbar/ToolbarResponsiveState.ts +64 -10
  675. package/src/state/Toolbar/computeResponsiveTargetState.ts +68 -18
  676. package/src/state/Toolbar/toolbarResponsiveConstants.ts +4 -0
  677. package/src/styles.global.css +1 -1
  678. package/src/version.ts +1 -1
@@ -0,0 +1,1074 @@
1
+ # CollectionOptimisticActions
2
+
3
+ **Category:** Features/Actions/Updates
4
+
5
+ ## Design
6
+
7
+ ### Description
8
+
9
+ The CollectionOptimisticActions class provides a set of utilities for managing optimistic actions on a collection of data. It allows performing various actions such as adding, updating, and deleting items from a collection while assuming that these actions will succeed, even before confirming with the server.
10
+
11
+ You can learn about collection approches for [Updates](./?path=/story/features-actions-updates--updates)
12
+
13
+ To manage a collection using CollectionOptimisticActions use the hook [useOptimisticActions](./?path=/story/features-actions-updates--useoptimisticactions)
14
+
15
+ #### Error Handling
16
+ Offers hooks for handling errors, retrying actions, and updating UI based on the success or failure of optimistic actions.
17
+
18
+ #### Rollback
19
+ Optimistic Actions come with built-in rollback functionality to handle errors gracefully. When using any of the provided APIs, if the submit function returns a rejected promise indicating an error, the changes made to the collection will automatically be reverted.
20
+
21
+ #### Dirty UI State
22
+ In the context of optimistic updates, the term "dirty state" refers to the fact that the UI has been updated optimistically based on user input, but the changes have not yet been confirmed by the server. The UI is in a "dirty" state until the server response is received and the changes are reconciled.
23
+ The user navigates away or closes the page before the server confirms the changes
24
+ Therefore, optimistic updates should not be used for critical or irreversible actions where data integrity is paramount.
25
+
26
+ #### Server Simulation
27
+ To reflect changes correctly to the collection until the server finishes the update, WixPatterns simulates the eventual collection state after the update.
28
+ This simulation entails the following:
29
+
30
+ - Updating relevant columns or properties of the items displayed in the UI.
31
+ - Hiding updated items that no longer meet the criteria of the current applied filtering.
32
+ - Revealing updated items that now satisfy the criteria of the current applied filtering.
33
+
34
+
35
+ The simulation is done by the `predicate` & `orderBy` parameters.
36
+ WixPatterns includes default implementations for these parameters, which are designed based on assumptions about the typical behavior of servers.
37
+ Therefore, it's crucial to ensure consistency between client-side and server-side filtering, either by using the default implementations or by explicitly implementing the `predicate` & `orderBy` functions.
38
+
39
+ > When not using [Sortable Columns](./?path=/story/features-sort-sortable-columns-sortable-columns--sortable-columns) it's necessary to specify the `orderBy` parameter; otherwise, WixPatterns will not merge the updated items when they should be visible under a new filtering criteria.
40
+ ***The default implementations are not guaranteed to be compatible with all servers.***
41
+ ***Hence, ensure consistency in filtering behavior across both client and server sides by explicitly implementing the `predicate` and `orderBy` functions when necessary.***
42
+
43
+
44
+ ### Examples
45
+
46
+ ### Create Methods
47
+
48
+ Allows for adding items to the collection, even if their id is not set.
49
+ Please note the following:
50
+ 1. If you attempt to perform a sequence of actions, starting with create followed by update or delete on the same item, and you call the second action before the item has been created on the server, the update or delete operation will fail.
51
+ 2. The function requires two arguments: the first being the optimistically created item(s), and the second being a params object that must include an onSubmit function. The type of the item(s) in the first argument must match the return type of the onSubmit function, which should include the id of the created item(s).
52
+
53
+ ### Create one
54
+
55
+ Create one item optimistically.
56
+ In this example, click on "Create contact" to see a new contact.
57
+ The item received in the submit function is temporary (can be without id which created in the server). Ensure you return the created item with all the properties from the server response. This will be the item in the collection at the end of this operation.
58
+
59
+ ```tsx
60
+ import { Avatar } from '@wix/design-system';
61
+ import React from 'react';
62
+ import { CollectionPage } from '@wix/patterns/page';
63
+ import {
64
+ Table,
65
+ OffsetQuery,
66
+ PrimaryActionButton,
67
+ useTableCollection,
68
+ useOptimisticActions,
69
+ } from '@wix/patterns';
70
+ import { contacts } from '@wix/crm';
71
+
72
+ function CreateOne() {
73
+ const state = useTableCollection<contacts.Contact>({
74
+ queryName: 'contacts-CreateOne',
75
+ itemName: (item) => `${item.info?.name?.first} ${item.info?.name?.last}`,
76
+ fetchData: (query: OffsetQuery) => {
77
+ const { limit, offset, search, filters } = query;
78
+
79
+ let queryBuilder = contacts.queryContacts().limit(limit).skip(offset);
80
+
81
+ if (search) {
82
+ queryBuilder = queryBuilder.startsWith('info.name.first', search);
83
+ }
84
+
85
+ return queryBuilder.find().then(({ items = [], totalCount: total }) => ({
86
+ items,
87
+ total,
88
+ }));
89
+ },
90
+ fetchErrorMessage: () => 'Error fetching contacts',
91
+ });
92
+
93
+ const collection = state.collection;
94
+
95
+ const optimisticActions = useOptimisticActions(collection);
96
+
97
+ const _createContact = () => {
98
+ const newContact = {
99
+ id: new window.Date().toString(),
100
+ info: {
101
+ name: {
102
+ first: 'New',
103
+ last: 'Contact',
104
+ },
105
+ },
106
+ };
107
+
108
+ optimisticActions.createOne(newContact, {
109
+ submit: async (_contacts) => {
110
+ const response = (await Promise.all(
111
+ _contacts.map((contact) =>
112
+ contacts.createContact(contact.info as contacts.ContactInfo),
113
+ ),
114
+ )) as contacts.CreateContactResponse[];
115
+
116
+ return response.map(({ contact }) => contact as contacts.Contact);
117
+ },
118
+ });
119
+ };
120
+
121
+ return (
122
+ <CollectionPage height="400px">
123
+ <CollectionPage.Header title={{ text: 'Contacts' }} />
124
+ <CollectionPage.Content>
125
+ <Table
126
+ state={collection}
127
+ primaryActionButton={
128
+ <PrimaryActionButton onClick={_createContact}>
129
+ Add Contact
130
+ </PrimaryActionButton>
131
+ }
132
+ columns={[
133
+ {
134
+ title: '',
135
+ width: '50px',
136
+ render: (contact) => (
137
+ <Avatar
138
+ name={`${contact.info?.name?.first} ${contact.info?.name?.last}`}
139
+ imgProps={{ src: contact.info?.picture?.image }}
140
+ />
141
+ ),
142
+ },
143
+ {
144
+ title: 'Name',
145
+ width: '250px',
146
+ render: (contact) =>
147
+ `${contact.info?.name?.first} ${contact.info?.name?.last}`,
148
+ },
149
+ {
150
+ title: 'Level',
151
+ render: (contact) => contact.info?.jobTitle,
152
+ },
153
+ {
154
+ title: 'Last Activity',
155
+ render: (contact) =>
156
+ contact.lastActivity?.activityDate?.toLocaleString(),
157
+ },
158
+ ]}
159
+ />
160
+ </CollectionPage.Content>
161
+ </CollectionPage>
162
+ );
163
+ }
164
+ ```
165
+
166
+ ### Create many
167
+
168
+ Create many items optimatically.
169
+ In this example, click on "Create contacts" to see several new contacts. Scroll down to see the new contacts
170
+
171
+ ```tsx
172
+ import { Avatar } from '@wix/design-system';
173
+ import React from 'react';
174
+ import { CollectionPage } from '@wix/patterns/page';
175
+ import {
176
+ Table,
177
+ OffsetQuery,
178
+ PrimaryActionButton,
179
+ useTableCollection,
180
+ useOptimisticActions,
181
+ } from '@wix/patterns';
182
+ import { contacts } from '@wix/crm';
183
+
184
+ function CreateMany() {
185
+ const state = useTableCollection<contacts.Contact>({
186
+ queryName: 'contacts-CreateMany',
187
+ itemName: (item) => `${item.info?.name?.first} ${item.info?.name?.last}`,
188
+ fetchData: (query: OffsetQuery) => {
189
+ const { limit, offset, search, filters } = query;
190
+
191
+ let queryBuilder = contacts.queryContacts().limit(limit).skip(offset);
192
+
193
+ if (search) {
194
+ queryBuilder = queryBuilder.startsWith('info.name.first', search);
195
+ }
196
+
197
+ return queryBuilder.find().then(({ items = [], totalCount: total }) => ({
198
+ items,
199
+ total,
200
+ }));
201
+ },
202
+ fetchErrorMessage: () => 'Error fetching contacts',
203
+ });
204
+
205
+ const collection = state.collection;
206
+
207
+ const optimisticActions = useOptimisticActions(collection);
208
+
209
+ const generateContacts = () =>
210
+ Array.from({ length: 5 }, (_, index) => ({
211
+ id: generateKey(index),
212
+ info: {
213
+ name: {
214
+ first: 'Contact',
215
+ last: generateKey(index),
216
+ },
217
+ },
218
+ }));
219
+
220
+ const generateKey = (index: number): string =>
221
+ new window.Date().toString() + index;
222
+
223
+ const _createContacts = () => {
224
+ const newContacts = generateContacts();
225
+
226
+ optimisticActions.createMany(newContacts, {
227
+ submit: async (_contacts) => {
228
+ const response = (await Promise.all(
229
+ _contacts.map((contact) =>
230
+ contacts.createContact(contact.info as contacts.ContactInfo),
231
+ ),
232
+ )) as contacts.CreateContactResponse[];
233
+
234
+ return response.map(({ contact }) => contact as contacts.Contact);
235
+ },
236
+ });
237
+ };
238
+
239
+ return (
240
+ <CollectionPage height="400px">
241
+ <CollectionPage.Header title={{ text: 'Contacts' }} />
242
+ <CollectionPage.Content>
243
+ <Table
244
+ state={collection}
245
+ primaryActionButton={
246
+ <PrimaryActionButton onClick={_createContacts}>
247
+ Add contacts
248
+ </PrimaryActionButton>
249
+ }
250
+ columns={[
251
+ {
252
+ title: '',
253
+ width: '50px',
254
+ render: (contact) => (
255
+ <Avatar
256
+ name={`${contact.info?.name?.first} ${contact.info?.name?.last}`}
257
+ imgProps={{ src: contact.info?.picture?.image }}
258
+ />
259
+ ),
260
+ },
261
+ {
262
+ title: 'Name',
263
+ width: '250px',
264
+ render: (contact) =>
265
+ `${contact.info?.name?.first} ${contact.info?.name?.last}`,
266
+ },
267
+ {
268
+ title: 'Level',
269
+ render: (contact) => contact.info?.jobTitle,
270
+ },
271
+ {
272
+ title: 'Last Activity',
273
+ render: (contact) =>
274
+ contact.lastActivity?.activityDate?.toLocaleString(),
275
+ },
276
+ ]}
277
+ />
278
+ </CollectionPage.Content>
279
+ </CollectionPage>
280
+ );
281
+ }
282
+ ```
283
+
284
+ ---
285
+
286
+ ### Update Methods
287
+
288
+ Allows updating items in the collection while submitting the update action to the server and immediately reflecting the change on the screen - either by changing some property, or by filtering out the updated item.
289
+
290
+ ### Update one
291
+
292
+ Update one item in the table.
293
+ In this example, click on update button to see the new level of contact
294
+
295
+ ```tsx
296
+ import { Avatar } from '@wix/design-system';
297
+ import React from 'react';
298
+ import { CollectionPage } from '@wix/patterns/page';
299
+ import {
300
+ Table,
301
+ OffsetQuery,
302
+ useTableCollection,
303
+ useOptimisticActions,
304
+ } from '@wix/patterns';
305
+ import { contacts } from '@wix/crm';
306
+
307
+ function UpdateOne() {
308
+ const state = useTableCollection<contacts.Contact>({
309
+ queryName: 'contacts-UpdateOne',
310
+ itemName: (item) => `${item.info?.name?.first} ${item.info?.name?.last}`,
311
+ fetchData: (query: OffsetQuery) => {
312
+ const { limit, offset, search, filters } = query;
313
+
314
+ let queryBuilder = contacts.queryContacts().limit(limit).skip(offset);
315
+
316
+ if (search) {
317
+ queryBuilder = queryBuilder.startsWith('info.name.first', search);
318
+ }
319
+
320
+ return queryBuilder.find().then(({ items = [], totalCount: total }) => ({
321
+ items,
322
+ total,
323
+ }));
324
+ },
325
+ fetchErrorMessage: () => 'Error fetching contacts',
326
+ });
327
+
328
+ const collection = state.collection;
329
+
330
+ const optimisticActions = useOptimisticActions(collection);
331
+
332
+ const _updateContact = (contact: contacts.Contact) => {
333
+ const updatedContact = {
334
+ ...contact,
335
+ info: {
336
+ ...contact.info,
337
+ jobTitle: 'Ultimate',
338
+ },
339
+ };
340
+
341
+ optimisticActions.updateOne(updatedContact, {
342
+ submit: async (_contacts) => {
343
+ const response = (await Promise.all(
344
+ _contacts.map((contact) =>
345
+ contacts.updateContact(
346
+ contact._id as string,
347
+ contact.info as contacts.ContactInfo,
348
+ contact.revision as number,
349
+ ),
350
+ ),
351
+ )) as contacts.UpdateContactResponse[];
352
+
353
+ return response.map(({ contact }) => contact as contacts.Contact);
354
+ },
355
+ });
356
+ };
357
+
358
+ return (
359
+ <CollectionPage height="400px">
360
+ <CollectionPage.Header title={{ text: 'Contacts' }} />
361
+ <CollectionPage.Content>
362
+ <Table
363
+ state={collection}
364
+ columns={[
365
+ {
366
+ title: '',
367
+ width: '50px',
368
+ render: (contact) => (
369
+ <Avatar
370
+ name={`${contact.info?.name?.first} ${contact.info?.name?.last}`}
371
+ imgProps={{ src: contact.info?.picture?.image }}
372
+ />
373
+ ),
374
+ },
375
+ {
376
+ title: 'Name',
377
+ width: '250px',
378
+ render: (contact) =>
379
+ `${contact.info?.name?.first} ${contact.info?.name?.last}`,
380
+ },
381
+ {
382
+ title: 'Level',
383
+ render: (contact) => contact.info?.jobTitle,
384
+ },
385
+ {
386
+ title: 'Last Activity',
387
+ render: (contact) =>
388
+ contact.lastActivity?.activityDate?.toLocaleString(),
389
+ },
390
+ ]}
391
+ actionCell={(contact) => ({
392
+ primaryAction: {
393
+ text: 'Update to Ultimate',
394
+ onClick: () => {
395
+ _updateContact(contact);
396
+ },
397
+ },
398
+ })}
399
+ />
400
+ </CollectionPage.Content>
401
+ </CollectionPage>
402
+ );
403
+ }
404
+ ```
405
+
406
+ ### Update many
407
+
408
+ Update many items optimatically by using bulk selection.
409
+ In this example, click on all items and see only 2 items are selected because we use `maxSelection`, and only these 2 are been updated
410
+
411
+ ```tsx
412
+ import { Avatar } from '@wix/design-system';
413
+ import React from 'react';
414
+ import { CollectionPage } from '@wix/patterns/page';
415
+ import {
416
+ BulkActionButton,
417
+ BulkActionToolbar,
418
+ Table,
419
+ OffsetQuery,
420
+ useTableCollection,
421
+ useOptimisticActions,
422
+ } from '@wix/patterns';
423
+ import { contacts } from '@wix/crm';
424
+
425
+ function UpdateMany() {
426
+ const state = useTableCollection<contacts.Contact>({
427
+ queryName: 'contacts-UpdateMany',
428
+ itemName: (item) => `${item.info?.name?.first} ${item.info?.name?.last}`,
429
+ fetchData: (query: OffsetQuery) => {
430
+ const { limit, offset, search, filters } = query;
431
+
432
+ let queryBuilder = contacts.queryContacts().limit(limit).skip(offset);
433
+
434
+ if (search) {
435
+ queryBuilder = queryBuilder.startsWith('info.name.first', search);
436
+ }
437
+
438
+ return queryBuilder.find().then(({ items = [], totalCount: total }) => ({
439
+ items,
440
+ total,
441
+ }));
442
+ },
443
+ fetchErrorMessage: () => 'Error fetching contacts',
444
+ });
445
+
446
+ const collection = state.collection;
447
+
448
+ const optimisticActions = useOptimisticActions(collection);
449
+
450
+ const _updateContacts = (contactsToUpdate: contacts.Contact[]) => {
451
+ const updatedContacts = contactsToUpdate.map((c) => ({
452
+ ...c,
453
+ info: {
454
+ ...c.info,
455
+ jobTitle: 'Ultimate',
456
+ },
457
+ }));
458
+
459
+ optimisticActions.updateMany(updatedContacts, {
460
+ successToast: `${contactsToUpdate.length} contacts updated`,
461
+ submit: async (_contacts) => {
462
+ const response = (await Promise.all(
463
+ _contacts.map((contact) =>
464
+ contacts.updateContact(
465
+ contact._id as string,
466
+ contact.info as contacts.ContactInfo,
467
+ contact.revision as number,
468
+ ),
469
+ ),
470
+ )) as contacts.UpdateContactResponse[];
471
+
472
+ return response.map(({ contact }) => contact as contacts.Contact);
473
+ },
474
+ });
475
+ };
476
+
477
+ return (
478
+ <CollectionPage height="400px">
479
+ <CollectionPage.Header title={{ text: 'Contacts' }} />
480
+ <CollectionPage.Content>
481
+ <Table
482
+ state={collection}
483
+ columns={[
484
+ {
485
+ title: '',
486
+ width: '50px',
487
+ render: (contact) => (
488
+ <Avatar
489
+ name={`${contact.info?.name?.first} ${contact.info?.name?.last}`}
490
+ imgProps={{ src: contact.info?.picture?.image }}
491
+ />
492
+ ),
493
+ },
494
+ {
495
+ title: 'Name',
496
+ width: '250px',
497
+ render: (contact) =>
498
+ `${contact.info?.name?.first} ${contact.info?.name?.last}`,
499
+ },
500
+ {
501
+ title: 'Level',
502
+ render: (contact) => contact.info?.jobTitle,
503
+ },
504
+ {
505
+ title: 'Last Activity',
506
+ render: (contact) =>
507
+ contact.lastActivity?.activityDate?.toLocaleString(),
508
+ },
509
+ ]}
510
+ showSelection
511
+ maxSelection={2}
512
+ bulkActionToolbar={({ selectedValues, clearSelection, total }) => (
513
+ <BulkActionToolbar
514
+ actionButton={
515
+ <BulkActionButton
516
+ onClick={() => {
517
+ _updateContacts(selectedValues);
518
+ clearSelection();
519
+ }}
520
+ >
521
+ Update to Ultimate
522
+ </BulkActionButton>
523
+ }
524
+ />
525
+ )}
526
+ />
527
+ </CollectionPage.Content>
528
+ </CollectionPage>
529
+ );
530
+ }
531
+ ```
532
+
533
+ ### Update all
534
+
535
+ Update all items optimatically by using bulk selection.
536
+ `updateAll` is for the use case when all items that match the current filtering should be updated, but naturally not all of them are currently visible in the table (because of pagination)
537
+ In this example, click one time on several items and one time on all items and see the updated items
538
+
539
+ ```tsx
540
+ import { Avatar } from '@wix/design-system';
541
+ import React from 'react';
542
+ import { CollectionPage } from '@wix/patterns/page';
543
+ import {
544
+ BulkActionButton,
545
+ BulkActionToolbar,
546
+ Table,
547
+ OffsetQuery,
548
+ useTableCollection,
549
+ useOptimisticActions,
550
+ } from '@wix/patterns';
551
+ import {
552
+ bulkUpdateContacts,
553
+ queryContacts,
554
+ updateContact,
555
+ } from '@wix/ambassador-contacts-v4-contact/http';
556
+ import {
557
+ Contact,
558
+ ContactInfo,
559
+ UpdateContactRequest,
560
+ } from '@wix/ambassador-contacts-v4-contact/types';
561
+ import { useHttpClient } from '@wix/yoshi-flow-bm';
562
+
563
+ function UpdateAll() {
564
+ const httpClient = useHttpClient();
565
+
566
+ const state = useTableCollection<Contact>({
567
+ queryName: 'contacts-UpdateAll',
568
+ fetchData: (query: OffsetQuery) => {
569
+ const { limit, offset, search, filters } = query;
570
+ return httpClient
571
+ .request(
572
+ queryContacts({
573
+ query: { paging: { limit, offset }, filter: filters },
574
+ search,
575
+ }),
576
+ )
577
+ .then(({ data: { contacts = [], pagingMetadata } }) => ({
578
+ items: contacts,
579
+ total: pagingMetadata?.total,
580
+ }));
581
+ },
582
+ itemKey: (item) => item.id as string,
583
+ itemName: (item) => item.name as string,
584
+ fetchErrorMessage: () => 'Error fetching contacts',
585
+ });
586
+
587
+ const collection = state.collection;
588
+
589
+ const optimisticActions = useOptimisticActions(collection);
590
+
591
+ const _updateContacts = (
592
+ contacts: Contact[],
593
+ { allSelected, total }: { allSelected: boolean; total: number },
594
+ ) => {
595
+ if (allSelected) {
596
+ const newLevelContact = { level: 'Legendary' } as Partial<Contact>;
597
+ optimisticActions.updateAll(newLevelContact, {
598
+ successToast: `${total} contacts changed`,
599
+ submit: () =>
600
+ httpClient.request(
601
+ bulkUpdateContacts({
602
+ info: newLevelContact as ContactInfo,
603
+ }),
604
+ ),
605
+ });
606
+ } else {
607
+ const updatedContacts = contacts.map((c) => ({
608
+ ...c,
609
+ level: 'Legendary',
610
+ }));
611
+
612
+ optimisticActions.updateMany(updatedContacts, {
613
+ successToast: `${contacts.length} contacts updated`,
614
+ submit: (contacts) =>
615
+ Promise.all(
616
+ contacts.map((contact) =>
617
+ httpClient.request(
618
+ updateContact(contact as UpdateContactRequest),
619
+ ),
620
+ ),
621
+ ),
622
+ });
623
+ }
624
+ };
625
+
626
+ return (
627
+ <CollectionPage height="400px">
628
+ <CollectionPage.Header title={{ text: 'Contacts' }} />
629
+ <CollectionPage.Content>
630
+ <Table
631
+ state={collection}
632
+ columns={[
633
+ {
634
+ title: '',
635
+ width: '50px',
636
+ render: (contact) => (
637
+ <Avatar name={contact.name} imgProps={{ src: contact.image }} />
638
+ ),
639
+ },
640
+ {
641
+ title: 'Name',
642
+ width: '250px',
643
+ render: (contact) => contact.name,
644
+ },
645
+ {
646
+ title: 'Level',
647
+ render: (contact) => contact.level,
648
+ },
649
+ {
650
+ title: 'Created Date',
651
+ render: (contact) => contact.createdDate?.toDateString(),
652
+ },
653
+ ]}
654
+ showSelection
655
+ bulkActionToolbar={({
656
+ selectedValues,
657
+ clearSelection,
658
+ allSelected,
659
+ total,
660
+ }) => (
661
+ <BulkActionToolbar
662
+ actionButton={
663
+ <BulkActionButton
664
+ onClick={() => {
665
+ _updateContacts(selectedValues, {
666
+ allSelected,
667
+ total,
668
+ });
669
+ clearSelection();
670
+ }}
671
+ >
672
+ Update to Legendary
673
+ </BulkActionButton>
674
+ }
675
+ />
676
+ )}
677
+ />
678
+ </CollectionPage.Content>
679
+ </CollectionPage>
680
+ );
681
+ }
682
+ ```
683
+
684
+ ---
685
+
686
+ ### Delete Methods
687
+
688
+ Allows removing items from the collection while submitting the delete action to the server, and immediately reflect the deletion to the screen.
689
+
690
+ ### Delete one
691
+
692
+ Delete one item optimatically.
693
+
694
+ ```tsx
695
+ import { Avatar } from '@wix/design-system';
696
+ import React from 'react';
697
+ import { CollectionPage } from '@wix/patterns/page';
698
+ import {
699
+ Table,
700
+ OffsetQuery,
701
+ useTableCollection,
702
+ useOptimisticActions,
703
+ } from '@wix/patterns';
704
+ import { contacts } from '@wix/crm';
705
+
706
+ function DeleteOne() {
707
+ const state = useTableCollection<contacts.Contact>({
708
+ queryName: 'contacts-DeleteOne',
709
+ itemName: (item) => `${item.info?.name?.first} ${item.info?.name?.last}`,
710
+ fetchData: (query: OffsetQuery) => {
711
+ const { limit, offset, search, filters } = query;
712
+
713
+ let queryBuilder = contacts.queryContacts().limit(limit).skip(offset);
714
+
715
+ if (search) {
716
+ queryBuilder = queryBuilder.startsWith('info.name.first', search);
717
+ }
718
+
719
+ return queryBuilder.find().then(({ items = [], totalCount: total }) => ({
720
+ items,
721
+ total,
722
+ }));
723
+ },
724
+ fetchErrorMessage: () => 'Error fetching contacts',
725
+ });
726
+
727
+ const collection = state.collection;
728
+
729
+ const optimisticActions = useOptimisticActions(collection);
730
+
731
+ const _deleteContact = (contact: contacts.Contact) => {
732
+ optimisticActions.deleteOne(contact, {
733
+ submit: async (_contacts) =>
734
+ Promise.all(
735
+ _contacts.map((contact) =>
736
+ contacts.deleteContact(contact._id as string),
737
+ ),
738
+ ),
739
+ });
740
+ };
741
+
742
+ return (
743
+ <CollectionPage height="400px">
744
+ <CollectionPage.Header title={{ text: 'Contacts' }} />
745
+ <CollectionPage.Content>
746
+ <Table
747
+ state={collection}
748
+ columns={[
749
+ {
750
+ title: '',
751
+ width: '50px',
752
+ render: (contact) => (
753
+ <Avatar
754
+ name={`${contact.info?.name?.first} ${contact.info?.name?.last}`}
755
+ imgProps={{ src: contact.info?.picture?.image }}
756
+ />
757
+ ),
758
+ },
759
+ {
760
+ title: 'Name',
761
+ width: '250px',
762
+ render: (contact) =>
763
+ `${contact.info?.name?.first} ${contact.info?.name?.last}`,
764
+ },
765
+ {
766
+ title: 'Level',
767
+ render: (contact) => contact.info?.jobTitle,
768
+ },
769
+ {
770
+ title: 'Last Activity',
771
+ render: (contact) =>
772
+ contact.lastActivity?.activityDate?.toLocaleString(),
773
+ },
774
+ ]}
775
+ showSelection
776
+ actionCell={(contact) => ({
777
+ primaryAction: {
778
+ text: 'Delete',
779
+ onClick: () => {
780
+ _deleteContact(contact);
781
+ },
782
+ },
783
+ })}
784
+ />
785
+ </CollectionPage.Content>
786
+ </CollectionPage>
787
+ );
788
+ }
789
+ ```
790
+
791
+ ### Delete many
792
+
793
+ Delete many items optimatically by using bulk selection.
794
+
795
+ ```tsx
796
+ import { Avatar } from '@wix/design-system';
797
+ import React from 'react';
798
+ import { CollectionPage } from '@wix/patterns/page';
799
+ import {
800
+ BulkActionButton,
801
+ BulkActionToolbar,
802
+ Table,
803
+ OffsetQuery,
804
+ useTableCollection,
805
+ useOptimisticActions,
806
+ } from '@wix/patterns';
807
+ import { contacts } from '@wix/crm';
808
+
809
+ function DeleteMany() {
810
+ const state = useTableCollection<contacts.Contact>({
811
+ queryName: 'contacts-DeleteMany',
812
+ itemName: (item) => `${item.info?.name?.first} ${item.info?.name?.last}`,
813
+ fetchData: (query: OffsetQuery) => {
814
+ const { limit, offset, search, filters } = query;
815
+
816
+ let queryBuilder = contacts.queryContacts().limit(limit).skip(offset);
817
+
818
+ if (search) {
819
+ queryBuilder = queryBuilder.startsWith('info.name.first', search);
820
+ }
821
+
822
+ return queryBuilder.find().then(({ items = [], totalCount: total }) => ({
823
+ items,
824
+ total,
825
+ }));
826
+ },
827
+ fetchErrorMessage: () => 'Error fetching contacts',
828
+ });
829
+
830
+ const collection = state.collection;
831
+
832
+ const optimisticActions = useOptimisticActions(collection);
833
+
834
+ const _deleteContacts = (_contacts: contacts.Contact[]) => {
835
+ optimisticActions.deleteMany<void[]>(_contacts, {
836
+ successToast: `${_contacts.length} contacts deleted`,
837
+ submit: async (contactsToDelete) =>
838
+ Promise.all(
839
+ contactsToDelete.map((contact) =>
840
+ contacts.deleteContact(contact._id as string),
841
+ ),
842
+ ),
843
+ });
844
+ };
845
+
846
+ return (
847
+ <CollectionPage height="400px">
848
+ <CollectionPage.Header title={{ text: 'Contacts' }} />
849
+ <CollectionPage.Content>
850
+ <Table
851
+ state={collection}
852
+ columns={[
853
+ {
854
+ title: '',
855
+ width: '50px',
856
+ render: (contact) => (
857
+ <Avatar
858
+ name={`${contact.info?.name?.first} ${contact.info?.name?.last}`}
859
+ imgProps={{ src: contact.info?.picture?.image }}
860
+ />
861
+ ),
862
+ },
863
+ {
864
+ title: 'Name',
865
+ width: '250px',
866
+ render: (contact) =>
867
+ `${contact.info?.name?.first} ${contact.info?.name?.last}`,
868
+ },
869
+ {
870
+ title: 'Level',
871
+ render: (contact) => contact.info?.jobTitle,
872
+ },
873
+ {
874
+ title: 'Last Activity',
875
+ render: (contact) =>
876
+ contact.lastActivity?.activityDate?.toLocaleString(),
877
+ },
878
+ ]}
879
+ showSelection
880
+ maxSelection={2}
881
+ bulkActionToolbar={({ selectedValues, clearSelection }) => (
882
+ <BulkActionToolbar
883
+ actionButton={
884
+ <BulkActionButton
885
+ onClick={() => {
886
+ _deleteContacts(selectedValues);
887
+ clearSelection();
888
+ }}
889
+ >
890
+ Delete
891
+ </BulkActionButton>
892
+ }
893
+ />
894
+ )}
895
+ />
896
+ </CollectionPage.Content>
897
+ </CollectionPage>
898
+ );
899
+ }
900
+ ```
901
+
902
+ ### Delete all
903
+
904
+ Delete all items optimatically by using bulk selection.
905
+
906
+ ```tsx
907
+ import { Avatar } from '@wix/design-system';
908
+ import React from 'react';
909
+ import { CollectionPage } from '@wix/patterns/page';
910
+ import {
911
+ BulkActionButton,
912
+ BulkActionToolbar,
913
+ Table,
914
+ OffsetQuery,
915
+ useTableCollection,
916
+ useOptimisticActions,
917
+ } from '@wix/patterns';
918
+ import {
919
+ deleteContact,
920
+ queryContacts,
921
+ bulkDeleteContacts,
922
+ } from '@wix/ambassador-contacts-v4-contact/http';
923
+ import { Contact } from '@wix/ambassador-contacts-v4-contact/types';
924
+ import { useHttpClient } from '@wix/yoshi-flow-bm';
925
+
926
+ function DeleteAll() {
927
+ const httpClient = useHttpClient();
928
+
929
+ const state = useTableCollection<Contact>({
930
+ queryName: 'contacts-DeleteAll',
931
+ fetchData: (query: OffsetQuery) => {
932
+ const { limit, offset, search, filters } = query;
933
+ return httpClient
934
+ .request(
935
+ queryContacts({
936
+ query: { paging: { limit, offset }, filter: filters },
937
+ search,
938
+ }),
939
+ )
940
+ .then(({ data: { contacts = [], pagingMetadata } }) => ({
941
+ items: contacts,
942
+ total: pagingMetadata?.total,
943
+ }));
944
+ },
945
+ itemKey: (item) => item.id as string,
946
+ itemName: (item) => item.name as string,
947
+ fetchErrorMessage: () => 'Error fetching contacts',
948
+ });
949
+
950
+ const collection = state.collection;
951
+
952
+ const optimisticActions = useOptimisticActions(collection);
953
+
954
+ const _deleteContacts = (
955
+ contacts: Contact[],
956
+ { allSelected, total }: { allSelected: boolean; total: number },
957
+ ) => {
958
+ if (allSelected) {
959
+ optimisticActions.deleteAll({
960
+ successToast: `${total} contacts deleted`,
961
+ submit: () => {
962
+ try {
963
+ return httpClient.request(bulkDeleteContacts({} as any));
964
+ } catch (error) {
965
+ console.log(error);
966
+ }
967
+
968
+ return Promise.resolve() as any;
969
+ },
970
+ });
971
+ } else {
972
+ optimisticActions.deleteMany(contacts, {
973
+ successToast: `${contacts.length} contacts deleted`,
974
+ submit: (contactsToDelete) =>
975
+ Promise.all(
976
+ contactsToDelete.map((contactToDelete) =>
977
+ deleteContact({
978
+ contactId: contactToDelete.id as string,
979
+ }),
980
+ ),
981
+ ),
982
+ });
983
+ }
984
+ };
985
+
986
+ return (
987
+ <CollectionPage height="400px">
988
+ <CollectionPage.Header title={{ text: 'Contacts' }} />
989
+ <CollectionPage.Content>
990
+ <Table
991
+ state={collection}
992
+ columns={[
993
+ {
994
+ title: '',
995
+ width: '50px',
996
+ render: (contact) => (
997
+ <Avatar name={contact.name} imgProps={{ src: contact.image }} />
998
+ ),
999
+ },
1000
+ {
1001
+ title: 'Name',
1002
+ width: '250px',
1003
+ render: (contact) => contact.name,
1004
+ },
1005
+ {
1006
+ title: 'Level',
1007
+ render: (contact) => contact.level,
1008
+ },
1009
+ {
1010
+ title: 'Last Seen',
1011
+ render: (contact) => contact.lastSeen?.toLocaleString(),
1012
+ },
1013
+ ]}
1014
+ showSelection
1015
+ bulkActionToolbar={({
1016
+ selectedValues,
1017
+ clearSelection,
1018
+ allSelected,
1019
+ total,
1020
+ }) => (
1021
+ <BulkActionToolbar
1022
+ actionButton={
1023
+ <BulkActionButton
1024
+ onClick={() => {
1025
+ _deleteContacts(selectedValues, { allSelected, total });
1026
+ clearSelection();
1027
+ }}
1028
+ >
1029
+ Delete
1030
+ </BulkActionButton>
1031
+ }
1032
+ />
1033
+ )}
1034
+ />
1035
+ </CollectionPage.Content>
1036
+ </CollectionPage>
1037
+ );
1038
+ }
1039
+ ```
1040
+
1041
+ ## API
1042
+
1043
+ ### Method Params
1044
+
1045
+ The params contains the following part of these props:
1046
+
1047
+ - **showUndoToast?:** Determines whether to display an undo toast before calling the server action. Default value is `false`.
1048
+ - **showUndoSuccessToast?:** Determines whether to display an undo button in the success toast. Default value is `false`.
1049
+ - **onUndo?:** Callback function triggered when the user clicks on the undo button.
1050
+ - **errorToast?:** Function to generate error toast to show in case the server fails to perform the action.
1051
+ - **onError?:** Callback function triggered when an error occurs.
1052
+ - **onTryAgain?:** Callback function to retry the action.
1053
+ - **successToast?:** Toast message or configuration to show on successful action.
1054
+ - **updateServerAfter?:** Indicates when the server is eventually updated. Possible values:
1055
+ - `submit`: Server updates immediately after the submission promise resolves.
1056
+ - `number`: Server updates after a specified timeout (in milliseconds).
1057
+ - `Promise`: Server updates after a forwarded promise resolves. Default value is `submit`.
1058
+ - **keepPosition?:** Indicates whether to keep the current position of items after the update.
1059
+
1060
+
1061
+
1062
+ ### Props
1063
+
1064
+ | Prop | Type | Required | Default | Description |
1065
+ |------|------|----------|---------|-------------|
1066
+ | `createOne` | `(item: T, params: CreateManyParams<T>) => void` | Yes | - | Creates a single item in the collection. |
1067
+ | `createMany` | `(items: T[], params: CreateManyParams<T>) => void` | Yes | - | Creates multiple items in the collection. |
1068
+ | `updateMany` | `<R>(items: T[], params: UpdateManyParams<T, R>) => void` | Yes | - | Updates multiple items in the collection. @param items - The items to update. @param params - Additional parameters for the update operation. |
1069
+ | `updateOne` | `<R>(item: T, params: UpdateManyParams<T, R>) => void` | Yes | - | Updates a single item in the collection. @param item - The item to update. @param params - Additional parameters for the operation. |
1070
+ | `updateAll` | `{ <R>(patchOrFn: (item: T) => Partial<T>, params: UpdateAllParams<R>): void; <R>(patch: Partial<T>, params: UpdateAllParams<R>): void; }` | Yes | - | > `updateAll(fn)` API is not recommended as it's not possible to calculate "optimistic total", prefer updateAll(patchObject) API if possible. Updates all items in the collection based on a function or a patch object. Updates all items in the collection based on a patch object. @param patchOrFn - A function or a patch object to apply to each item. @param params - Additional parameters for the operation. @param patch - A patch object to apply to each item. @param params - Additional parameters for the operation. |
1071
+ | `deleteMany` | `<R>(items: T[], params: DeleteManyParams<T, R>) => void` | Yes | - | Deletes multiple items from the collection. @param items - An array of items to delete. @param params - Additional parameters for the delete operation. |
1072
+ | `deleteOne` | `<R>(item: T, params: DeleteManyParams<T, R>) => void` | Yes | - | Deletes a single item from the collection. @param item - The item to delete. @param params - Additional parameters for the operation. |
1073
+ | `deleteAll` | `<R>(params: UpdateAllParams<R>) => void` | Yes | - | Deletes all items from the collection. @param params - Additional parameters for the operation. |
1074
+