@wix/patterns 1.419.0 → 1.420.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 (380) 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/CmsFieldManagement/CmsFieldForm.st.css.js +3 -3
  4. package/dist/cjs/components/CmsFieldManagement/CmsFieldForm.st.css.js.map +1 -1
  5. package/dist/cjs/components/CmsFieldManagement/CmsFieldModal.st.css.js +3 -3
  6. package/dist/cjs/components/CmsFieldManagement/CmsFieldModal.st.css.js.map +1 -1
  7. package/dist/cjs/components/CmsFieldManagement/Sections/ValidationAndDefaultsSection.st.css.js +3 -3
  8. package/dist/cjs/components/CmsFieldManagement/Sections/ValidationAndDefaultsSection.st.css.js.map +1 -1
  9. package/dist/cjs/components/CmsFieldManagement/formFields/CharactersLimitInput.st.css.js +3 -3
  10. package/dist/cjs/components/CmsFieldManagement/formFields/CharactersLimitInput.st.css.js.map +1 -1
  11. package/dist/cjs/components/Collapse/Collapse.st.css.js +3 -3
  12. package/dist/cjs/components/Collapse/Collapse.st.css.js.map +1 -1
  13. package/dist/cjs/components/CollectionPageNew/CollectionPage.st.css.js +2 -2
  14. package/dist/cjs/components/CollectionPageNew/CollectionPage.st.css.js.map +1 -1
  15. package/dist/cjs/components/CollectionSectionHeader/CollectionSectionHeader.st.css.js +3 -3
  16. package/dist/cjs/components/CollectionSectionHeader/CollectionSectionHeader.st.css.js.map +1 -1
  17. package/dist/cjs/components/CollectionTable/CollectionTable.st.css.js +2 -2
  18. package/dist/cjs/components/CollectionTable/CollectionTable.st.css.js.map +1 -1
  19. package/dist/cjs/components/CollectionTable/CollectionTableWSRTable.st.css.js +2 -2
  20. package/dist/cjs/components/CollectionTable/CollectionTableWSRTable.st.css.js.map +1 -1
  21. package/dist/cjs/components/CollectionToolbar/CollectionToolbar.st.css.js +5 -5
  22. package/dist/cjs/components/CollectionToolbar/CollectionToolbar.st.css.js.map +1 -1
  23. package/dist/cjs/components/CollectionToolbar/SearchOrCustomFilter.st.css.js +4 -4
  24. package/dist/cjs/components/CollectionToolbar/SearchOrCustomFilter.st.css.js.map +1 -1
  25. package/dist/cjs/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.js +2 -2
  26. package/dist/cjs/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.js.map +1 -1
  27. package/dist/cjs/components/CollectionViewsDropdown/ViewsDropdown.st.css.js +2 -2
  28. package/dist/cjs/components/CollectionViewsDropdown/ViewsDropdown.st.css.js.map +1 -1
  29. package/dist/cjs/components/DragHandle/DragHandle.st.css.js +2 -2
  30. package/dist/cjs/components/DragHandle/DragHandle.st.css.js.map +1 -1
  31. package/dist/cjs/components/EditableTable/EditableCell.st.css.js +3 -3
  32. package/dist/cjs/components/EditableTable/EditableCell.st.css.js.map +1 -1
  33. package/dist/cjs/components/EditableTable/HeaderActionsPopover.st.css.js +2 -2
  34. package/dist/cjs/components/EditableTable/HeaderActionsPopover.st.css.js.map +1 -1
  35. package/dist/cjs/components/EditableTable/cellTypes/CellViewLayout.st.css.js +2 -2
  36. package/dist/cjs/components/EditableTable/cellTypes/CellViewLayout.st.css.js.map +1 -1
  37. package/dist/cjs/components/EditableTable/cellTypes/address/Edit.st.css.js +3 -3
  38. package/dist/cjs/components/EditableTable/cellTypes/address/Edit.st.css.js.map +1 -1
  39. package/dist/cjs/components/EditableTable/cellTypes/boolean/Edit.st.css.js +3 -3
  40. package/dist/cjs/components/EditableTable/cellTypes/boolean/Edit.st.css.js.map +1 -1
  41. package/dist/cjs/components/EditableTable/cellTypes/boolean/View.st.css.js +3 -3
  42. package/dist/cjs/components/EditableTable/cellTypes/boolean/View.st.css.js.map +1 -1
  43. package/dist/cjs/components/EditableTable/cellTypes/color/Edit.st.css.js +2 -2
  44. package/dist/cjs/components/EditableTable/cellTypes/color/Edit.st.css.js.map +1 -1
  45. package/dist/cjs/components/EditableTable/cellTypes/date/Edit.st.css.js +3 -3
  46. package/dist/cjs/components/EditableTable/cellTypes/date/Edit.st.css.js.map +1 -1
  47. package/dist/cjs/components/EditableTable/cellTypes/date/View.st.css.js +2 -2
  48. package/dist/cjs/components/EditableTable/cellTypes/date/View.st.css.js.map +1 -1
  49. package/dist/cjs/components/EditableTable/cellTypes/datetime/Edit.st.css.js +8 -8
  50. package/dist/cjs/components/EditableTable/cellTypes/datetime/Edit.st.css.js.map +1 -1
  51. package/dist/cjs/components/EditableTable/cellTypes/datetime/View.st.css.js +7 -7
  52. package/dist/cjs/components/EditableTable/cellTypes/datetime/View.st.css.js.map +1 -1
  53. package/dist/cjs/components/EditableTable/cellTypes/email/Edit.st.css.js +3 -3
  54. package/dist/cjs/components/EditableTable/cellTypes/email/Edit.st.css.js.map +1 -1
  55. package/dist/cjs/components/EditableTable/cellTypes/email/View.st.css.js +2 -2
  56. package/dist/cjs/components/EditableTable/cellTypes/email/View.st.css.js.map +1 -1
  57. package/dist/cjs/components/EditableTable/cellTypes/number/Edit.st.css.js +3 -3
  58. package/dist/cjs/components/EditableTable/cellTypes/number/Edit.st.css.js.map +1 -1
  59. package/dist/cjs/components/EditableTable/cellTypes/number/View.st.css.js +3 -3
  60. package/dist/cjs/components/EditableTable/cellTypes/number/View.st.css.js.map +1 -1
  61. package/dist/cjs/components/EditableTable/cellTypes/object/Edit.st.css.js +3 -3
  62. package/dist/cjs/components/EditableTable/cellTypes/object/Edit.st.css.js.map +1 -1
  63. package/dist/cjs/components/EditableTable/cellTypes/object/View.st.css.js +2 -2
  64. package/dist/cjs/components/EditableTable/cellTypes/object/View.st.css.js.map +1 -1
  65. package/dist/cjs/components/EditableTable/cellTypes/select/Edit.st.css.js +3 -3
  66. package/dist/cjs/components/EditableTable/cellTypes/select/Edit.st.css.js.map +1 -1
  67. package/dist/cjs/components/EditableTable/cellTypes/text/Edit.st.css.js +4 -4
  68. package/dist/cjs/components/EditableTable/cellTypes/text/Edit.st.css.js.map +1 -1
  69. package/dist/cjs/components/EditableTable/cellTypes/text/View.st.css.js +2 -2
  70. package/dist/cjs/components/EditableTable/cellTypes/text/View.st.css.js.map +1 -1
  71. package/dist/cjs/components/EditableTable/cellTypes/time/Edit.st.css.js +4 -4
  72. package/dist/cjs/components/EditableTable/cellTypes/time/Edit.st.css.js.map +1 -1
  73. package/dist/cjs/components/EditableTable/cellTypes/url/Edit.st.css.js +3 -3
  74. package/dist/cjs/components/EditableTable/cellTypes/url/Edit.st.css.js.map +1 -1
  75. package/dist/cjs/components/EditableTable/cellTypes/url/View.st.css.js +5 -5
  76. package/dist/cjs/components/EditableTable/cellTypes/url/View.st.css.js.map +1 -1
  77. package/dist/cjs/components/EntityPage/EntityPagePlain.st.css.js +2 -2
  78. package/dist/cjs/components/EntityPage/EntityPagePlain.st.css.js.map +1 -1
  79. package/dist/cjs/components/Fade/Fade.st.css.js +2 -2
  80. package/dist/cjs/components/Fade/Fade.st.css.js.map +1 -1
  81. package/dist/cjs/components/Heading/Heading.st.css.js +2 -2
  82. package/dist/cjs/components/Heading/Heading.st.css.js.map +1 -1
  83. package/dist/cjs/components/ImportButton/CAIRO-4118-tasks.md +1 -1
  84. package/dist/cjs/components/ImportButton/CAIRO-4230-create-new-field.md +188 -0
  85. package/dist/cjs/components/ImportButton/ImportButton.js +11 -9
  86. package/dist/cjs/components/ImportButton/ImportButton.js.map +1 -1
  87. package/dist/cjs/components/ImportButton/ImportButtonModalLayout.js +30 -14
  88. package/dist/cjs/components/ImportButton/ImportButtonModalLayout.js.map +1 -1
  89. package/dist/cjs/components/ImportButton/ImportModal.uni.driver.js +3 -0
  90. package/dist/cjs/components/ImportButton/ImportModal.uni.driver.js.map +1 -1
  91. package/dist/cjs/components/ImportButton/ImportProps.js.map +1 -1
  92. package/dist/cjs/components/ImportButton/ImportStepConfiguration.js +145 -43
  93. package/dist/cjs/components/ImportButton/ImportStepConfiguration.js.map +1 -1
  94. package/dist/cjs/components/ImportButton/ImportStepUpload.st.css.js +3 -3
  95. package/dist/cjs/components/ImportButton/ImportStepUpload.st.css.js.map +1 -1
  96. package/dist/cjs/components/ImportButton/import-create-new-field-issues.md +156 -0
  97. package/dist/cjs/components/InputOverflow/InputOverflow.st.css.js +2 -2
  98. package/dist/cjs/components/InputOverflow/InputOverflow.st.css.js.map +1 -1
  99. package/dist/cjs/components/LoadingRow/LoadingRow.st.css.js +3 -3
  100. package/dist/cjs/components/LoadingRow/LoadingRow.st.css.js.map +1 -1
  101. package/dist/cjs/components/MaxHeightText/MaxHeightText.st.css.js +2 -2
  102. package/dist/cjs/components/MaxHeightText/MaxHeightText.st.css.js.map +1 -1
  103. package/dist/cjs/components/MaxLines/MaxLines.st.css.js +2 -2
  104. package/dist/cjs/components/MaxLines/MaxLines.st.css.js.map +1 -1
  105. package/dist/cjs/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.js +5 -5
  106. package/dist/cjs/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.js.map +1 -1
  107. package/dist/cjs/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.js +2 -2
  108. package/dist/cjs/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.js.map +1 -1
  109. package/dist/cjs/components/NestedTable/NestedTableRow.st.css.js +5 -5
  110. package/dist/cjs/components/NestedTable/NestedTableRow.st.css.js.map +1 -1
  111. package/dist/cjs/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.js +2 -2
  112. package/dist/cjs/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.js.map +1 -1
  113. package/dist/cjs/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.js +2 -2
  114. package/dist/cjs/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.js.map +1 -1
  115. package/dist/cjs/components/PickerContent/PickerContent.st.css.js +2 -2
  116. package/dist/cjs/components/PickerContent/PickerContent.st.css.js.map +1 -1
  117. package/dist/cjs/components/PickerContent/PickerContentAdditionalStep.st.css.js +4 -4
  118. package/dist/cjs/components/PickerContent/PickerContentAdditionalStep.st.css.js.map +1 -1
  119. package/dist/cjs/components/PickerTableListItem/PickerTableListItem.st.css.js +2 -2
  120. package/dist/cjs/components/PickerTableListItem/PickerTableListItem.st.css.js.map +1 -1
  121. package/dist/cjs/components/ScrollableContent/ScrollableContent.st.css.js +2 -2
  122. package/dist/cjs/components/ScrollableContent/ScrollableContent.st.css.js.map +1 -1
  123. package/dist/cjs/components/SetupWidget/SetupWidget.st.css.js +5 -5
  124. package/dist/cjs/components/SetupWidget/SetupWidget.st.css.js.map +1 -1
  125. package/dist/cjs/components/SkeletonCard/SkeletonCard.st.css.js +3 -3
  126. package/dist/cjs/components/SkeletonCard/SkeletonCard.st.css.js.map +1 -1
  127. package/dist/cjs/components/SlidingModal/SlidingModal.st.css.js +2 -2
  128. package/dist/cjs/components/SlidingModal/SlidingModal.st.css.js.map +1 -1
  129. package/dist/cjs/components/TabsFilter/TabsFilter.st.css.js +3 -3
  130. package/dist/cjs/components/TabsFilter/TabsFilter.st.css.js.map +1 -1
  131. package/dist/cjs/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.js +2 -2
  132. package/dist/cjs/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.js.map +1 -1
  133. package/dist/cjs/components/ToolbarItem/ToolbarItem.st.css.js +2 -2
  134. package/dist/cjs/components/ToolbarItem/ToolbarItem.st.css.js.map +1 -1
  135. package/dist/cjs/components/ToolbarItemBox/ToolbarItemBox.st.css.js +2 -2
  136. package/dist/cjs/components/ToolbarItemBox/ToolbarItemBox.st.css.js.map +1 -1
  137. package/dist/cjs/components/common.st.css.js +4 -4
  138. package/dist/cjs/components/common.st.css.js.map +1 -1
  139. package/dist/cjs/state/CollectionPage/CollectionPageHeader.st.css.js +2 -2
  140. package/dist/cjs/state/CollectionPage/CollectionPageHeader.st.css.js.map +1 -1
  141. package/dist/cjs/state/FormPage/FormPageHeader.st.css.js +2 -2
  142. package/dist/cjs/state/FormPage/FormPageHeader.st.css.js.map +1 -1
  143. package/dist/cjs/styles.global.css +2 -2
  144. package/dist/cjs/version.js +1 -1
  145. package/dist/cjs/version.js.map +1 -1
  146. package/dist/docs/index.json +20 -20
  147. package/dist/esm/components/CardContainer/CardContainer.st.css.js +2 -2
  148. package/dist/esm/components/CmsFieldManagement/CmsFieldForm.st.css.js +2 -2
  149. package/dist/esm/components/CmsFieldManagement/CmsFieldModal.st.css.js +2 -2
  150. package/dist/esm/components/CmsFieldManagement/CmsFieldModal.st.css.js.map +1 -1
  151. package/dist/esm/components/CmsFieldManagement/Sections/ValidationAndDefaultsSection.st.css.js +2 -2
  152. package/dist/esm/components/CmsFieldManagement/formFields/CharactersLimitInput.st.css.js +2 -2
  153. package/dist/esm/components/Collapse/Collapse.st.css.js +2 -2
  154. package/dist/esm/components/CollectionPageNew/CollectionPage.st.css.js +2 -2
  155. package/dist/esm/components/CollectionSectionHeader/CollectionSectionHeader.st.css.js +2 -2
  156. package/dist/esm/components/CollectionTable/CollectionTable.st.css.js +2 -2
  157. package/dist/esm/components/CollectionTable/CollectionTable.st.css.js.map +1 -1
  158. package/dist/esm/components/CollectionTable/CollectionTableWSRTable.st.css.js +2 -2
  159. package/dist/esm/components/CollectionTable/CollectionTableWSRTable.st.css.js.map +1 -1
  160. package/dist/esm/components/CollectionToolbar/CollectionToolbar.st.css.js +2 -2
  161. package/dist/esm/components/CollectionToolbar/CollectionToolbar.st.css.js.map +1 -1
  162. package/dist/esm/components/CollectionToolbar/SearchOrCustomFilter.st.css.js +2 -2
  163. package/dist/esm/components/CollectionToolbar/SearchOrCustomFilter.st.css.js.map +1 -1
  164. package/dist/esm/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.js +2 -2
  165. package/dist/esm/components/CollectionViewsDropdown/ViewsDropdown.st.css.js +2 -2
  166. package/dist/esm/components/CollectionViewsDropdown/ViewsDropdown.st.css.js.map +1 -1
  167. package/dist/esm/components/DragHandle/DragHandle.st.css.js +2 -2
  168. package/dist/esm/components/EditableTable/EditableCell.st.css.js +2 -2
  169. package/dist/esm/components/EditableTable/HeaderActionsPopover.st.css.js +2 -2
  170. package/dist/esm/components/EditableTable/cellTypes/CellViewLayout.st.css.js +2 -2
  171. package/dist/esm/components/EditableTable/cellTypes/address/Edit.st.css.js +2 -2
  172. package/dist/esm/components/EditableTable/cellTypes/boolean/Edit.st.css.js +2 -2
  173. package/dist/esm/components/EditableTable/cellTypes/boolean/View.st.css.js +2 -2
  174. package/dist/esm/components/EditableTable/cellTypes/color/Edit.st.css.js +2 -2
  175. package/dist/esm/components/EditableTable/cellTypes/color/Edit.st.css.js.map +1 -1
  176. package/dist/esm/components/EditableTable/cellTypes/date/Edit.st.css.js +2 -2
  177. package/dist/esm/components/EditableTable/cellTypes/date/Edit.st.css.js.map +1 -1
  178. package/dist/esm/components/EditableTable/cellTypes/date/View.st.css.js +2 -2
  179. package/dist/esm/components/EditableTable/cellTypes/date/View.st.css.js.map +1 -1
  180. package/dist/esm/components/EditableTable/cellTypes/datetime/Edit.st.css.js +2 -2
  181. package/dist/esm/components/EditableTable/cellTypes/datetime/View.st.css.js +2 -2
  182. package/dist/esm/components/EditableTable/cellTypes/datetime/View.st.css.js.map +1 -1
  183. package/dist/esm/components/EditableTable/cellTypes/email/Edit.st.css.js +2 -2
  184. package/dist/esm/components/EditableTable/cellTypes/email/Edit.st.css.js.map +1 -1
  185. package/dist/esm/components/EditableTable/cellTypes/email/View.st.css.js +2 -2
  186. package/dist/esm/components/EditableTable/cellTypes/number/Edit.st.css.js +2 -2
  187. package/dist/esm/components/EditableTable/cellTypes/number/View.st.css.js +2 -2
  188. package/dist/esm/components/EditableTable/cellTypes/object/Edit.st.css.js +2 -2
  189. package/dist/esm/components/EditableTable/cellTypes/object/View.st.css.js +2 -2
  190. package/dist/esm/components/EditableTable/cellTypes/select/Edit.st.css.js +2 -2
  191. package/dist/esm/components/EditableTable/cellTypes/text/Edit.st.css.js +2 -2
  192. package/dist/esm/components/EditableTable/cellTypes/text/View.st.css.js +2 -2
  193. package/dist/esm/components/EditableTable/cellTypes/time/Edit.st.css.js +2 -2
  194. package/dist/esm/components/EditableTable/cellTypes/url/Edit.st.css.js +2 -2
  195. package/dist/esm/components/EditableTable/cellTypes/url/Edit.st.css.js.map +1 -1
  196. package/dist/esm/components/EditableTable/cellTypes/url/View.st.css.js +2 -2
  197. package/dist/esm/components/EditableTable/cellTypes/url/View.st.css.js.map +1 -1
  198. package/dist/esm/components/EntityPage/EntityPagePlain.st.css.js +2 -2
  199. package/dist/esm/components/Fade/Fade.st.css.js +2 -2
  200. package/dist/esm/components/Fade/Fade.st.css.js.map +1 -1
  201. package/dist/esm/components/Heading/Heading.st.css.js +2 -2
  202. package/dist/esm/components/Heading/Heading.st.css.js.map +1 -1
  203. package/dist/esm/components/ImportButton/CAIRO-4118-tasks.md +1 -1
  204. package/dist/esm/components/ImportButton/CAIRO-4230-create-new-field.md +188 -0
  205. package/dist/esm/components/ImportButton/ImportButton.js +2 -2
  206. package/dist/esm/components/ImportButton/ImportButton.js.map +1 -1
  207. package/dist/esm/components/ImportButton/ImportButtonModalLayout.js +10 -3
  208. package/dist/esm/components/ImportButton/ImportButtonModalLayout.js.map +1 -1
  209. package/dist/esm/components/ImportButton/ImportModal.uni.driver.js +7 -0
  210. package/dist/esm/components/ImportButton/ImportModal.uni.driver.js.map +1 -1
  211. package/dist/esm/components/ImportButton/ImportStepConfiguration.js +69 -15
  212. package/dist/esm/components/ImportButton/ImportStepConfiguration.js.map +1 -1
  213. package/dist/esm/components/ImportButton/ImportStepUpload.st.css.js +2 -2
  214. package/dist/esm/components/ImportButton/ImportStepUpload.st.css.js.map +1 -1
  215. package/dist/esm/components/ImportButton/import-create-new-field-issues.md +156 -0
  216. package/dist/esm/components/InputOverflow/InputOverflow.st.css.js +2 -2
  217. package/dist/esm/components/LoadingRow/LoadingRow.st.css.js +3 -3
  218. package/dist/esm/components/MaxHeightText/MaxHeightText.st.css.js +2 -2
  219. package/dist/esm/components/MaxLines/MaxLines.st.css.js +2 -2
  220. package/dist/esm/components/MaxLines/MaxLines.st.css.js.map +1 -1
  221. package/dist/esm/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.js +2 -2
  222. package/dist/esm/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.js +2 -2
  223. package/dist/esm/components/NestedTable/NestedTableRow.st.css.js +2 -2
  224. package/dist/esm/components/NestedTable/NestedTableRow.st.css.js.map +1 -1
  225. package/dist/esm/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.js +2 -2
  226. package/dist/esm/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.js +2 -2
  227. package/dist/esm/components/PickerContent/PickerContent.st.css.js +2 -2
  228. package/dist/esm/components/PickerContent/PickerContentAdditionalStep.st.css.js +2 -2
  229. package/dist/esm/components/PickerContent/PickerContentAdditionalStep.st.css.js.map +1 -1
  230. package/dist/esm/components/PickerTableListItem/PickerTableListItem.st.css.js +2 -2
  231. package/dist/esm/components/ScrollableContent/ScrollableContent.st.css.js +2 -2
  232. package/dist/esm/components/SetupWidget/SetupWidget.st.css.js +2 -2
  233. package/dist/esm/components/SetupWidget/SetupWidget.st.css.js.map +1 -1
  234. package/dist/esm/components/SkeletonCard/SkeletonCard.st.css.js +2 -2
  235. package/dist/esm/components/SkeletonCard/SkeletonCard.st.css.js.map +1 -1
  236. package/dist/esm/components/SlidingModal/SlidingModal.st.css.js +2 -2
  237. package/dist/esm/components/TabsFilter/TabsFilter.st.css.js +2 -2
  238. package/dist/esm/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.js +2 -2
  239. package/dist/esm/components/ToolbarItem/ToolbarItem.st.css.js +2 -2
  240. package/dist/esm/components/ToolbarItem/ToolbarItem.st.css.js.map +1 -1
  241. package/dist/esm/components/ToolbarItemBox/ToolbarItemBox.st.css.js +2 -2
  242. package/dist/esm/components/ToolbarItemBox/ToolbarItemBox.st.css.js.map +1 -1
  243. package/dist/esm/components/common.st.css.js +2 -2
  244. package/dist/esm/state/CollectionPage/CollectionPageHeader.st.css.js +2 -2
  245. package/dist/esm/state/CollectionPage/CollectionPageHeader.st.css.js.map +1 -1
  246. package/dist/esm/state/FormPage/FormPageHeader.st.css.js +2 -2
  247. package/dist/esm/state/FormPage/FormPageHeader.st.css.js.map +1 -1
  248. package/dist/esm/styles.global.css +2 -2
  249. package/dist/esm/version.js +1 -1
  250. package/dist/types/components/CmsFieldManagement/CmsFieldModal.st.css.d.ts.map +1 -1
  251. package/dist/types/components/CollectionTable/CollectionTable.st.css.d.ts.map +1 -1
  252. package/dist/types/components/CollectionTable/CollectionTable.uni.driver.d.ts +4 -0
  253. package/dist/types/components/CollectionTable/CollectionTable.uni.driver.d.ts.map +1 -1
  254. package/dist/types/components/CollectionTable/CollectionTableWSRTable.st.css.d.ts.map +1 -1
  255. package/dist/types/components/CollectionToolbar/CollectionToolbar.st.css.d.ts.map +1 -1
  256. package/dist/types/components/CollectionToolbar/SearchOrCustomFilter.st.css.d.ts.map +1 -1
  257. package/dist/types/components/CollectionViewsDropdown/ViewsDropdown.st.css.d.ts.map +1 -1
  258. package/dist/types/components/EditableTable/cellTypes/color/Edit.st.css.d.ts.map +1 -1
  259. package/dist/types/components/EditableTable/cellTypes/date/Edit.st.css.d.ts.map +1 -1
  260. package/dist/types/components/EditableTable/cellTypes/date/View.st.css.d.ts.map +1 -1
  261. package/dist/types/components/EditableTable/cellTypes/datetime/View.st.css.d.ts.map +1 -1
  262. package/dist/types/components/EditableTable/cellTypes/email/Edit.st.css.d.ts.map +1 -1
  263. package/dist/types/components/EditableTable/cellTypes/url/Edit.st.css.d.ts.map +1 -1
  264. package/dist/types/components/EditableTable/cellTypes/url/View.st.css.d.ts.map +1 -1
  265. package/dist/types/components/Fade/Fade.st.css.d.ts.map +1 -1
  266. package/dist/types/components/Heading/Heading.st.css.d.ts.map +1 -1
  267. package/dist/types/components/ImportButton/ImportButton.d.ts.map +1 -1
  268. package/dist/types/components/ImportButton/ImportButton.uni.driver.d.ts +2 -0
  269. package/dist/types/components/ImportButton/ImportButton.uni.driver.d.ts.map +1 -1
  270. package/dist/types/components/ImportButton/ImportButtonModalLayout.d.ts.map +1 -1
  271. package/dist/types/components/ImportButton/ImportModal.uni.driver.d.ts +3 -0
  272. package/dist/types/components/ImportButton/ImportModal.uni.driver.d.ts.map +1 -1
  273. package/dist/types/components/ImportButton/ImportProps.d.ts +8 -1
  274. package/dist/types/components/ImportButton/ImportProps.d.ts.map +1 -1
  275. package/dist/types/components/ImportButton/ImportStepConfiguration.d.ts.map +1 -1
  276. package/dist/types/components/ImportButton/ImportStepUpload.st.css.d.ts.map +1 -1
  277. package/dist/types/components/LayoutSwitch/LayoutSwitch.uni.driver.d.ts +4 -0
  278. package/dist/types/components/LayoutSwitch/LayoutSwitch.uni.driver.d.ts.map +1 -1
  279. package/dist/types/components/MaxLines/MaxLines.st.css.d.ts.map +1 -1
  280. package/dist/types/components/NestedTable/NestedTable.uni.driver.d.ts +4 -0
  281. package/dist/types/components/NestedTable/NestedTable.uni.driver.d.ts.map +1 -1
  282. package/dist/types/components/NestedTable/NestedTableRow.st.css.d.ts.map +1 -1
  283. package/dist/types/components/PickerContent/PickerContentAdditionalStep.st.css.d.ts.map +1 -1
  284. package/dist/types/components/SetupWidget/SetupWidget.st.css.d.ts.map +1 -1
  285. package/dist/types/components/SkeletonCard/SkeletonCard.st.css.d.ts.map +1 -1
  286. package/dist/types/components/Table/Table.uni.driver.d.ts +4 -0
  287. package/dist/types/components/Table/Table.uni.driver.d.ts.map +1 -1
  288. package/dist/types/components/TableFolders/TableFolders.uni.driver.d.ts +4 -0
  289. package/dist/types/components/TableFolders/TableFolders.uni.driver.d.ts.map +1 -1
  290. package/dist/types/components/TableGridSwitch/TableGridSwitch.uni.driver.d.ts +4 -0
  291. package/dist/types/components/TableGridSwitch/TableGridSwitch.uni.driver.d.ts.map +1 -1
  292. package/dist/types/components/ToolbarItem/ToolbarItem.st.css.d.ts.map +1 -1
  293. package/dist/types/components/ToolbarItemBox/ToolbarItemBox.st.css.d.ts.map +1 -1
  294. package/dist/types/state/CollectionPage/CollectionPageHeader.st.css.d.ts.map +1 -1
  295. package/dist/types/state/FormPage/FormPageHeader.st.css.d.ts.map +1 -1
  296. package/dist/types/testkit/enzyme.d.ts +16 -0
  297. package/dist/types/testkit/enzyme.d.ts.map +1 -1
  298. package/dist/types/testkit/jsdom.d.ts +20 -0
  299. package/dist/types/testkit/jsdom.d.ts.map +1 -1
  300. package/dist/types/testkit/playwright.d.ts +16 -0
  301. package/dist/types/testkit/playwright.d.ts.map +1 -1
  302. package/dist/types/testkit/puppeteer.d.ts +16 -0
  303. package/dist/types/testkit/puppeteer.d.ts.map +1 -1
  304. package/dist/types/version.d.ts +1 -1
  305. package/package.json +6 -6
  306. package/src/components/CardContainer/CardContainer.st.css.ts +2 -2
  307. package/src/components/CmsFieldManagement/CmsFieldForm.st.css.ts +2 -2
  308. package/src/components/CmsFieldManagement/CmsFieldModal.st.css.ts +2 -2
  309. package/src/components/CmsFieldManagement/Sections/ValidationAndDefaultsSection.st.css.ts +2 -2
  310. package/src/components/CmsFieldManagement/formFields/CharactersLimitInput.st.css.ts +2 -2
  311. package/src/components/Collapse/Collapse.st.css.ts +2 -2
  312. package/src/components/CollectionPageNew/CollectionPage.st.css.ts +2 -2
  313. package/src/components/CollectionSectionHeader/CollectionSectionHeader.st.css.ts +2 -2
  314. package/src/components/CollectionTable/CollectionTable.st.css.ts +2 -2
  315. package/src/components/CollectionTable/CollectionTableWSRTable.st.css.ts +2 -2
  316. package/src/components/CollectionToolbar/CollectionToolbar.st.css.ts +2 -2
  317. package/src/components/CollectionToolbar/SearchOrCustomFilter.st.css.ts +2 -2
  318. package/src/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.ts +2 -2
  319. package/src/components/CollectionViewsDropdown/ViewsDropdown.st.css.ts +2 -2
  320. package/src/components/DragHandle/DragHandle.st.css.ts +2 -2
  321. package/src/components/EditableTable/EditableCell.st.css.ts +2 -2
  322. package/src/components/EditableTable/HeaderActionsPopover.st.css.ts +2 -2
  323. package/src/components/EditableTable/cellTypes/CellViewLayout.st.css.ts +2 -2
  324. package/src/components/EditableTable/cellTypes/address/Edit.st.css.ts +2 -2
  325. package/src/components/EditableTable/cellTypes/boolean/Edit.st.css.ts +2 -2
  326. package/src/components/EditableTable/cellTypes/boolean/View.st.css.ts +2 -2
  327. package/src/components/EditableTable/cellTypes/color/Edit.st.css.ts +2 -2
  328. package/src/components/EditableTable/cellTypes/date/Edit.st.css.ts +2 -2
  329. package/src/components/EditableTable/cellTypes/date/View.st.css.ts +2 -2
  330. package/src/components/EditableTable/cellTypes/datetime/Edit.st.css.ts +2 -2
  331. package/src/components/EditableTable/cellTypes/datetime/View.st.css.ts +2 -2
  332. package/src/components/EditableTable/cellTypes/email/Edit.st.css.ts +2 -2
  333. package/src/components/EditableTable/cellTypes/email/View.st.css.ts +2 -2
  334. package/src/components/EditableTable/cellTypes/number/Edit.st.css.ts +2 -2
  335. package/src/components/EditableTable/cellTypes/number/View.st.css.ts +2 -2
  336. package/src/components/EditableTable/cellTypes/object/Edit.st.css.ts +2 -2
  337. package/src/components/EditableTable/cellTypes/object/View.st.css.ts +2 -2
  338. package/src/components/EditableTable/cellTypes/select/Edit.st.css.ts +2 -2
  339. package/src/components/EditableTable/cellTypes/text/Edit.st.css.ts +2 -2
  340. package/src/components/EditableTable/cellTypes/text/View.st.css.ts +2 -2
  341. package/src/components/EditableTable/cellTypes/time/Edit.st.css.ts +2 -2
  342. package/src/components/EditableTable/cellTypes/url/Edit.st.css.ts +2 -2
  343. package/src/components/EditableTable/cellTypes/url/View.st.css.ts +2 -2
  344. package/src/components/EntityPage/EntityPagePlain.st.css.ts +2 -2
  345. package/src/components/Fade/Fade.st.css.ts +2 -2
  346. package/src/components/Heading/Heading.st.css.ts +2 -2
  347. package/src/components/ImportButton/CAIRO-4118-tasks.md +1 -1
  348. package/src/components/ImportButton/CAIRO-4230-create-new-field.md +188 -0
  349. package/src/components/ImportButton/ImportButton.tsx +2 -0
  350. package/src/components/ImportButton/ImportButtonModalLayout.tsx +15 -2
  351. package/src/components/ImportButton/ImportModal.uni.driver.ts +10 -0
  352. package/src/components/ImportButton/ImportProps.tsx +13 -1
  353. package/src/components/ImportButton/ImportStepConfiguration.tsx +134 -27
  354. package/src/components/ImportButton/ImportStepUpload.st.css.ts +2 -2
  355. package/src/components/ImportButton/import-create-new-field-issues.md +156 -0
  356. package/src/components/InputOverflow/InputOverflow.st.css.ts +2 -2
  357. package/src/components/LoadingRow/LoadingRow.st.css.ts +3 -3
  358. package/src/components/MaxHeightText/MaxHeightText.st.css.ts +2 -2
  359. package/src/components/MaxLines/MaxLines.st.css.ts +2 -2
  360. package/src/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.ts +2 -2
  361. package/src/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.ts +2 -2
  362. package/src/components/NestedTable/NestedTableRow.st.css.ts +2 -2
  363. package/src/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.ts +2 -2
  364. package/src/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.ts +2 -2
  365. package/src/components/PickerContent/PickerContent.st.css.ts +2 -2
  366. package/src/components/PickerContent/PickerContentAdditionalStep.st.css.ts +2 -2
  367. package/src/components/PickerTableListItem/PickerTableListItem.st.css.ts +2 -2
  368. package/src/components/ScrollableContent/ScrollableContent.st.css.ts +2 -2
  369. package/src/components/SetupWidget/SetupWidget.st.css.ts +2 -2
  370. package/src/components/SkeletonCard/SkeletonCard.st.css.ts +2 -2
  371. package/src/components/SlidingModal/SlidingModal.st.css.ts +2 -2
  372. package/src/components/TabsFilter/TabsFilter.st.css.ts +2 -2
  373. package/src/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.ts +2 -2
  374. package/src/components/ToolbarItem/ToolbarItem.st.css.ts +2 -2
  375. package/src/components/ToolbarItemBox/ToolbarItemBox.st.css.ts +2 -2
  376. package/src/components/common.st.css.ts +2 -2
  377. package/src/state/CollectionPage/CollectionPageHeader.st.css.ts +2 -2
  378. package/src/state/FormPage/FormPageHeader.st.css.ts +2 -2
  379. package/src/styles.global.css +2 -2
  380. package/src/version.ts +1 -1
@@ -26,7 +26,7 @@ This tracker turns the ticket's task spec into individually-trackable items. All
26
26
  |---|---|---|---|---|
27
27
  | 2.1 | Duplicate field mapping | Once a collection field is selected in one dropdown, **disable** it (visible but unselectable) in all other dropdowns | done | Shipped in PR #5130 (`feat(Import): disable already selected fields`). `ImportState.selectedFieldIds` (computed `Set` of mapped field ids) drives the per-dropdown `disabled` flag in `ImportStepConfiguration.tsx`: an option is disabled when `selectedFieldIds.has(option.id)` **and** it isn't the current header's own selection (so the field stays selectable in its own dropdown). Tests: *"disables already-selected fields in other dropdowns"*, *"does not disable a field in its own dropdown"* in `Table.importButton.spec.tsx` (both passing). |
28
28
  | 2.2 | Zero data rows | Show an **inline warning notice** inside step 2 (non-blocking) — user can still proceed or go back. [Design](https://www.figma.com/design/RpB9iQ6a43xcvKiovmJaA1/Import?node-id=72-39072) | done | Inline `SectionHelper` (skin `warning`, hook `import-no-rows-warning`) in `ImportStepConfiguration.tsx` with keys `cairo.import.noRowsWarningTitle` / `noRowsWarningDescription`. Trigger broadened from `csvRows.length === 0` to the new `ImportState.hasNoMappedData` computed — true when there are mappings but **no mapped column holds data in any row** (matching the design copy "no data was found inside the mapped columns"); it reacts to mapping changes and stays false when nothing is mapped yet (that case is covered by the disabled Import button + `noMappingsTooltip`). Non-blocking: Import stays enabled whenever `hasMappings` is true. Tests in `Table.importButton.spec.tsx`: *"...shows warning for CSV with headers but no rows"*, *"shows the warning when rows exist but the mapped columns are empty"*, *"does not show the warning when a mapped column has data"*. Keys already registered in the Translation Center. |
29
- | 2.3 | Mismatch between CSV data and chosen field | Dropdown enters **error state** with a status message | open | — |
29
+ | 2.3 | Mismatch between CSV data and chosen field | Dropdown enters **error state** with a status message | open | Tracked in [CAIRO-4392](https://wix.atlassian.net/browse/CAIRO-4392) (relates to CAIRO-4118). Needs design: reuse existing field validators to validate every CSV row client-side, with open questions on coverage/perf, blocking vs non-blocking, and how it reconciles with the planned client→server async-import migration. |
30
30
 
31
31
  ## Step 3 — Progress: Full Import Failures
32
32
 
@@ -0,0 +1,188 @@
1
+ # CAIRO-4230 — Import CSV: map a column to a *new* field (create-on-import)
2
+
3
+ > High-level implementation summary. Not a line-by-line plan — see the tickets for
4
+ > the full spec/design.
5
+ >
6
+ > - **CAIRO-4230** — Import CSV: Support "Add New Field" flow (this task)
7
+ > - **CAIRO-4131** — Suggest field type from column data (the design/visual source;
8
+ > we only borrow the "create new field" mechanic from it, not the type detection)
9
+ > - Design: https://www.figma.com/design/RpB9iQ6a43xcvKiovmJaA1/Import?node-id=81-110873
10
+
11
+ ## Goal
12
+
13
+ Today, an unmapped CSV column defaults to **"Don't import"** (`mappingByHeader[header] = null`).
14
+ We want to optionally let the user map a column to a **brand-new collection field that
15
+ is created as part of the import flow itself** — shown in the mapping dropdown as
16
+ `<Column Title> (New)` with the helper text *"This will be a new text field. Edit Field"*
17
+ (see image in CAIRO-4131).
18
+
19
+ ## Scope (what we are building now vs. not)
20
+
21
+ **In scope**
22
+ - Ability to create a new field from an unmapped column during the mapping step.
23
+ - Field type is **always `text` for now** (no data-driven type detection).
24
+ - A way to **choose the default behavior** for unmapped columns (create new field vs.
25
+ don't import). Likely the **presence of the create-field callback prop itself is the
26
+ opt-in** (see below) — no separate flag.
27
+
28
+ **Out of scope (deferred — CAIRO-4131)**
29
+ - CSV column **type detection** (Number/Date/Boolean/URL/Text "best fit"). The
30
+ `(New)` suggestion will always be a text field for now.
31
+ - The "Edit Field" entry point that opens a type selector pre-populated with the
32
+ detected type. (We may still surface a static "This will be a new text field"
33
+ label, but no editing flow.)
34
+
35
+ > Note: the **default-behavior prop is the deliverable the tickets call out explicitly**
36
+ > ("some entry points want this as default, some want 'don't import' as a default").
37
+
38
+ ## Key design point — configurability via the callback prop
39
+
40
+ Field creation is exposed as a new **callback prop, a sibling to `bulkUploadItems`**:
41
+ `updateSchema`. The **presence of that callback is itself the opt-in**:
42
+
43
+ - `updateSchema` provided → unmapped columns default to **create new (text) field**.
44
+ - `updateSchema` absent → current behavior, unmapped columns default to **don't import**.
45
+
46
+ This avoids a separate `unmappedColumnDefault` flag: a consumer can only create fields
47
+ if it gives us the means to (the callback), so wanting the behavior and providing the
48
+ capability are the same decision. This is what `getDefaultMapping` keys off when
49
+ assigning the default for a column that didn't auto-match an existing field.
50
+
51
+ > If a consumer later needs "provide `updateSchema` but still default to don't import",
52
+ > we can add an explicit override flag then — but start with the implicit form.
53
+
54
+ ## Data model changes (`packages/core/src/state/ImportState/ImportState.ts`)
55
+
56
+ Today a mapping value is `string | null` (existing field id, or skip). To represent
57
+ "create a new text field for this column" we need a third state. Options (pick during
58
+ implementation):
59
+
60
+ - Extend the mapping value to a discriminated shape, e.g.
61
+ `{ kind: 'existing'; fieldId } | { kind: 'new'; fieldKey; fieldType: 'text' } | null`, or
62
+ - Keep `mappingByHeader` for existing-field mappings and add a parallel
63
+ `newFieldByHeader` set/record for columns flagged as "create new".
64
+
65
+ Whichever is chosen, the following must be updated accordingly:
66
+ - `getDefaultMapping` — honor the new default-behavior prop for unmatched columns.
67
+ - `hasMappings` / `hasNoMappedData` / `selectedFieldIds` — a "create new" column
68
+ counts as a real mapping.
69
+ - `mappedRows` / `toMappedRows` — rows must write column data under the new field's
70
+ key/id so the values get uploaded.
71
+ - `setMapping` — needs a way to set a column to "create new field".
72
+
73
+ ## New-field creation on import — single `updateSchema` call
74
+
75
+ New fields must exist in the collection before the rows upload, otherwise the
76
+ uploaded values have nowhere to land. Following the cm-import `beforeImport` flow
77
+ (`wix-data-client/cm-import/.../progress/actions.js`), **all new fields are added
78
+ in a single call** — not one call per field. The callback is modeled after
79
+ `bulkUploadItems` (consumer supplies the actual mutation; Cairo orchestrates):
80
+
81
+ ```ts
82
+ interface NewFieldDefinition { key: string; type: 'text'; displayName: string }
83
+ type UpdateSchemaFn = (fields: NewFieldDefinition[]) => Promise<void>;
84
+ ```
85
+
86
+ The consumer maps these to one schema mutation, e.g.
87
+ `updateSchema(collectionId, ...fields.map(f => addField(f.key, f)))`.
88
+
89
+ **Keys are decided by Cairo, not returned by the consumer.** `_resolveFieldMapping`
90
+ derives each new field's `key` from the column header (`uniqueFieldKey`, camelCase +
91
+ numeric suffix, deduped against existing field ids and other new keys), passes the
92
+ list to `updateSchema`, and uses that same key as the upload payload key. So no id
93
+ round-trip is needed and there's no per-field parallelism/collision concern.
94
+
95
+ In `startImport`, after backup and before `_uploadBatches`:
96
+ 1. Collect all "create new" columns and derive their keys.
97
+ 2. Call `updateSchema(newFields)` once.
98
+ 3. Build the upload payload keyed by those keys (+ existing field ids).
99
+ 4. Proceed with the existing batch upload.
100
+
101
+ If `updateSchema` throws, the import enters the **error state** with a "Try again"
102
+ CTA (no rows uploaded). Open questions: whether created fields should be rolled
103
+ back on a later failure/cancel (currently not — restore covers row data only).
104
+
105
+ ## UI changes (`packages/cairo/src/components/ImportButton/ImportStepConfiguration.tsx`)
106
+
107
+ - Add a `<Column Title> (New)` option (or per-column toggle) to the mapping `Dropdown`.
108
+ - When a column is set to "create new", render the helper text
109
+ *"This will be a new text field."* under the dropdown (the "Edit Field" link is
110
+ out of scope for now — omit or render disabled).
111
+ - Match the design's warning/`(New)` visual treatment from CAIRO-4131 (yellow accent).
112
+
113
+ ## Wiring (props path)
114
+
115
+ The new prop (`updateSchema`) follows the existing chain, exactly like `bulkUploadItems`:
116
+
117
+ `ImportButtonProps` / `ImportModalProps` (`ImportProps.tsx`)
118
+ → `ImportButtonModalLayout.tsx`
119
+ → `useCreateImport({ ... })`
120
+ → `ImportStateProps` → `ImportState` constructor.
121
+
122
+ All new props should be **optional** and additive to keep the change backward-compatible
123
+ (core is widely consumed — see `packages/core/AGENTS.md`).
124
+
125
+ ## Translations
126
+
127
+ New keys (route through the Wix Translation Center — core `en.json` and the generated
128
+ `translations.ts` are gitignored and rebuilt from TC, so the local additions made
129
+ during implementation are **not** committed and must be registered in TC):
130
+ - `cairo.import.newFieldSuffix` (core) → `"(New)"` — appended in code to the CSV
131
+ column header to form the option label (e.g. `Title (New)`). The header is built
132
+ in code (not via an interpolated key) so the column name always shows.
133
+ - `cairo.import.newFieldHelper` (core) → `"This will be a new {typeName} field."` —
134
+ the `{typeName}` param is the field-type name, injected lowercased (matching the
135
+ patterns-fields `type_mismatch_*` convention).
136
+ - `auto-patterns.fields.field_type_text_title` (**patterns-fields**) → `"Text"` —
137
+ the shared field-type name reused for the type label. Future types reuse the
138
+ existing `auto-patterns.fields.field_type_<type>_title` keys.
139
+
140
+ (`cairo.import.newFieldOption` = `"{column} (New)"` and `cairo.import.fieldType.text`
141
+ were earlier forms; superseded.)
142
+
143
+ ### Field type is static (`text`) but the code is dynamic-ready
144
+ - `NewFieldType` (core) is the single source of truth for the type union — today
145
+ just `'text'`.
146
+ - The mapping carries `fieldType` end-to-end: `setNewFieldMapping` /
147
+ `getDefaultMapping` set it, and `_resolveFieldMapping` passes it to
148
+ `updateSchema`. To go dynamic, set the detected type there instead of `'text'`.
149
+ - The helper text resolves the type name from the **shared patterns-fields**
150
+ field-type translations via `NEW_FIELD_TYPE_TITLE_KEY`, a
151
+ `Record<NewFieldType, …>` in `ImportStepConfiguration`. Widening `NewFieldType`
152
+ makes the missing entries a **compile error** — the one place to extend.
153
+ - Those translations live in the patterns-fields artifact (fields'
154
+ `useTranslations()`), so the import modal is wrapped in `PatternsFieldsProvider`
155
+ **only when field creation is enabled** (`ImportButtonModalLayout`). The provider/
156
+ fields container is not initialized for plain imports.
157
+
158
+ ## Testing
159
+
160
+ - Core/cairo: `Table.importButton.spec` — default mapping under updateSchema
161
+ present/absent, the single `updateSchema` call with all new fields, upload payload
162
+ keyed by derived keys, helper text, and schema-update failure → error state.
163
+ - Follow existing Import test patterns (`InMemoryBackend`, `flush()`).
164
+
165
+ ## Decisions made during implementation
166
+ - **Mapping model:** `mappingByHeader` value is now a discriminated `ColumnMapping`
167
+ = `{kind:'existing', fieldId} | {kind:'new', fieldType:'text'} | null`.
168
+ - **Field creation:** runs in `startImport` **after** backup and **before** the batch
169
+ upload, via `_resolveFieldMapping()`. All "new" columns are added in **one**
170
+ `updateSchema(fields)` call; their keys are Cairo-derived (`uniqueFieldKey`) and
171
+ reused as the upload payload keys — no id round-trip.
172
+ - **Failure handling:** if `updateSchema` throws, the import enters the **error state**
173
+ with a "Try again" CTA (same path as a first-batch upload failure); no rows upload.
174
+ - **UI:** a synthetic `(New)` option is appended to each column dropdown when
175
+ `canCreateNewField`; selecting it shows the helper text. Clearing still means
176
+ "don't import" (`null`).
177
+
178
+ ## Still open (consumer/CMS side)
179
+ - Whether created fields should be rolled back on cancel/restore (currently they are
180
+ not — restore only covers row data).
181
+ - **Consumer wiring:** `auto-patterns` `useImport` must implement `updateSchema`
182
+ (one batched schema mutation, e.g. `updateSchema(collectionId, ...addField(...))`),
183
+ replacing the earlier per-field `createField`/`addField` path — pending a new
184
+ `@wix/patterns` publish.
185
+
186
+ ## AGENTS.md impact
187
+
188
+ - Status: not needed (feature work inside an existing component/state pattern).
@@ -16,6 +16,7 @@ function _ImportButton<T, F extends FiltersMap>(props: ImportButtonProps) {
16
16
  fields,
17
17
  bulkUploadItems,
18
18
  backup,
19
+ updateSchema,
19
20
  batchSize,
20
21
  } = props;
21
22
 
@@ -38,6 +39,7 @@ function _ImportButton<T, F extends FiltersMap>(props: ImportButtonProps) {
38
39
  fields={fields}
39
40
  bulkUploadItems={bulkUploadItems}
40
41
  backup={backup}
42
+ updateSchema={updateSchema}
41
43
  batchSize={batchSize}
42
44
  />
43
45
  );
@@ -17,12 +17,14 @@ import { CustomDrawerLayout } from '../CustomDrawerLayout';
17
17
  import { ImportStepper } from './ImportStepper';
18
18
  import { MessageActionModal } from '../ActionModal';
19
19
  import { ModalWrapper } from '../CollectionModal';
20
+ import { PatternsFieldsProvider } from '../../providers';
20
21
 
21
22
  function _ImportButtonModalLayout(props: ImportButtonModalLayoutProps) {
22
23
  const {
23
24
  fields,
24
25
  bulkUploadItems,
25
26
  backup,
27
+ updateSchema,
26
28
  batchSize,
27
29
  importModalState,
28
30
  ...rest
@@ -34,6 +36,7 @@ function _ImportButtonModalLayout(props: ImportButtonModalLayoutProps) {
34
36
  fields,
35
37
  bulkUploadItems,
36
38
  backup,
39
+ updateSchema,
37
40
  batchSize,
38
41
  importModalState,
39
42
  });
@@ -63,6 +66,16 @@ function _ImportButtonModalLayout(props: ImportButtonModalLayoutProps) {
63
66
  children
64
67
  );
65
68
 
69
+ // The configuration step's "new field" helper reads field-type names from the
70
+ // patterns-fields translations, which require this provider. Only mounted when
71
+ // field creation is enabled (the only case a "new" mapping can exist), so the
72
+ // fields container isn't initialized for plain imports.
73
+ const content = state.canCreateNewField ? (
74
+ <PatternsFieldsProvider>{wrappedChildren}</PatternsFieldsProvider>
75
+ ) : (
76
+ wrappedChildren
77
+ );
78
+
66
79
  useEffect(() => {
67
80
  if (onRequestClose) {
68
81
  return addEventListener(
@@ -89,7 +102,7 @@ function _ImportButtonModalLayout(props: ImportButtonModalLayoutProps) {
89
102
  removeContentPadding={removeContentPadding}
90
103
  {...rest}
91
104
  {...customModalLayoutProps}
92
- children={wrappedChildren}
105
+ children={content}
93
106
  />
94
107
  <ModalWrapper
95
108
  state={discardModal}
@@ -142,7 +155,7 @@ function _ImportButtonModalLayout(props: ImportButtonModalLayoutProps) {
142
155
  removeContentPadding={removeContentPadding}
143
156
  {...rest}
144
157
  {...customModalLayoutProps}
145
- children={wrappedChildren}
158
+ children={content}
146
159
  />
147
160
  <MessageActionModal
148
161
  dataHook="import-discard-changes-modal"
@@ -90,6 +90,16 @@ export function ImportModalUniDriver(base: UniDriver, body: UniDriver) {
90
90
  body,
91
91
  ),
92
92
 
93
+ /** Text of the "new field" helper line under a column's mapping dropdown */
94
+ getNewFieldHelperText: (header: string) =>
95
+ modalLayoutBase()
96
+ .$(`[data-hook="import-new-field-helper-${header}"]`)
97
+ .text(),
98
+ newFieldHelperExists: (header: string) =>
99
+ modalLayoutBase()
100
+ .$(`[data-hook="import-new-field-helper-${header}"]`)
101
+ .exists(),
102
+
93
103
  /** Get the Dropdown driver for a specific CSV header mapping */
94
104
  getMappingDropdown: (header: string) =>
95
105
  DropdownUniDriver(
@@ -1,4 +1,9 @@
1
- import { BackupFn, BulkUploadItemsFn, ModalState } from '@wix/bex-core';
1
+ import {
2
+ BackupFn,
3
+ BulkUploadItemsFn,
4
+ UpdateSchemaFn,
5
+ ModalState,
6
+ } from '@wix/bex-core';
2
7
  import { CreateExportAsyncJobRequest } from '@wix/bex-utils/@wix/ambassador-fedinfra-exportservice-v1-export-async-job/types';
3
8
 
4
9
  type ImportButtonToolbarType = 'default' | 'bulkActionToolbar';
@@ -7,6 +12,13 @@ export interface ImportButtonParams
7
12
  extends Pick<CreateExportAsyncJobRequest, 'fields'> {
8
13
  bulkUploadItems: BulkUploadItemsFn;
9
14
  backup?: BackupFn;
15
+ /**
16
+ * Adds new collection fields during import, in a single call, before the rows
17
+ * upload. When provided, unmapped CSV columns default to creating a new (text)
18
+ * field instead of "don't import". When omitted, behavior is unchanged
19
+ * (unmapped columns default to skip).
20
+ */
21
+ updateSchema?: UpdateSchemaFn;
10
22
  batchSize?: number;
11
23
  }
12
24
 
@@ -7,7 +7,8 @@ import {
7
7
  SectionHelper,
8
8
  } from '@wix/design-system';
9
9
  import { ArrowRight } from '@wix/wix-ui-icons-common';
10
- import { ImportState } from '@wix/bex-core';
10
+ import { ImportState, NewFieldType } from '@wix/bex-core';
11
+ import { useTranslations } from '@wix/patterns-fields';
11
12
  import React from 'react';
12
13
  import { observer } from 'mobx-react-lite';
13
14
 
@@ -22,6 +23,134 @@ const COLUMN_WIDTHS = {
22
23
  };
23
24
  const SCROLLBAR_GUTTER: React.CSSProperties = { scrollbarGutter: 'stable' };
24
25
 
26
+ // Synthetic dropdown option id representing "create a new field from this
27
+ // column". Distinct from any real field id (which never starts with `$`).
28
+ const CREATE_NEW_FIELD_OPTION_ID = '$createNewField';
29
+
30
+ // Translation key for each new-field type's name, injected (lowercased) into the
31
+ // helper text ("This will be a new {typeName} field."). Reuses the shared
32
+ // patterns-fields field-type names. Keyed by `NewFieldType` so that when
33
+ // CAIRO-4131 adds data-driven types (number/date/boolean/url/...), the missing
34
+ // entries become a compile error here — the single place to extend.
35
+ type FieldTypeTitleKey = 'auto-patterns.fields.field_type_text_title';
36
+
37
+ const NEW_FIELD_TYPE_TITLE_KEY: Record<NewFieldType, FieldTypeTitleKey> = {
38
+ text: 'auto-patterns.fields.field_type_text_title',
39
+ };
40
+
41
+ type DropdownOption = ReturnType<typeof listItemSelectBuilder>;
42
+
43
+ interface NewFieldHelperTextProps {
44
+ state: ImportState;
45
+ header: string;
46
+ fieldType: NewFieldType;
47
+ }
48
+
49
+ /**
50
+ * Helper line under a "create new field" mapping (e.g. "This will be a new text
51
+ * field."). The type name comes from the shared patterns-fields translations via
52
+ * `useTranslations`, so this is only rendered when the import modal is wrapped in
53
+ * `PatternsFieldsProvider` — which `ImportButtonModalLayout` does whenever field
54
+ * creation is enabled (the only case a `new` mapping exists).
55
+ */
56
+ const NewFieldHelperText = observer(function _NewFieldHelperText({
57
+ state,
58
+ header,
59
+ fieldType,
60
+ }: NewFieldHelperTextProps) {
61
+ const { t: ft } = useTranslations();
62
+ const typeName = ft(NEW_FIELD_TYPE_TITLE_KEY[fieldType]).toLocaleLowerCase();
63
+
64
+ return (
65
+ <Text size="tiny" secondary dataHook={`import-new-field-helper-${header}`}>
66
+ {state.translate('cairo.import.newFieldHelper', { typeName })}
67
+ </Text>
68
+ );
69
+ });
70
+
71
+ interface FieldMappingCellProps {
72
+ state: ImportState;
73
+ header: string;
74
+ fieldOptions: DropdownOption[];
75
+ }
76
+
77
+ const FieldMappingCell = observer(function _FieldMappingCell({
78
+ state,
79
+ header,
80
+ fieldOptions,
81
+ }: FieldMappingCellProps) {
82
+ const { translate: t, selectedFieldIds, canCreateNewField } = state;
83
+ const mapping = state.mappingByHeader[header];
84
+
85
+ const selectedId =
86
+ mapping?.kind === 'existing'
87
+ ? mapping.fieldId
88
+ : mapping?.kind === 'new'
89
+ ? CREATE_NEW_FIELD_OPTION_ID
90
+ : undefined;
91
+
92
+ const options: DropdownOption[] = [
93
+ ...fieldOptions.map((option) => ({
94
+ ...option,
95
+ disabled:
96
+ selectedFieldIds.has(String(option.id)) &&
97
+ !(mapping?.kind === 'existing' && mapping.fieldId === String(option.id)),
98
+ })),
99
+ ...(canCreateNewField
100
+ ? [
101
+ // The option is the CSV column header itself (the new field is named
102
+ // after it) followed by a translated "(New)" marker. The header is
103
+ // built in code rather than via an interpolated key so it always
104
+ // shows, regardless of which translation bundle the consumer loads.
105
+ (() => {
106
+ const label = `${header} ${t('cairo.import.newFieldSuffix')}`;
107
+ return listItemSelectBuilder({
108
+ id: CREATE_NEW_FIELD_OPTION_ID,
109
+ label,
110
+ title: label,
111
+ });
112
+ })(),
113
+ ]
114
+ : []),
115
+ ];
116
+
117
+ return (
118
+ <Box direction="vertical" gap="SP1">
119
+ <Dropdown
120
+ dataHook={`import-mapping-${header}`}
121
+ clearButton
122
+ onClear={() => {
123
+ state.setMapping(header, null);
124
+ }}
125
+ placeholder={t('cairo.import.skipColumn')}
126
+ selectedId={selectedId}
127
+ onSelect={({ id }) => {
128
+ if (id === CREATE_NEW_FIELD_OPTION_ID) {
129
+ state.setNewFieldMapping(header);
130
+ } else {
131
+ state.setMapping(header, id as string);
132
+ }
133
+ }}
134
+ popoverProps={{
135
+ appendTo: 'window',
136
+ zIndex: 5001,
137
+ flip: true,
138
+ fixed: false,
139
+ }}
140
+ options={options}
141
+ size="small"
142
+ />
143
+ {mapping?.kind === 'new' && (
144
+ <NewFieldHelperText
145
+ state={state}
146
+ header={header}
147
+ fieldType={mapping.fieldType}
148
+ />
149
+ )}
150
+ </Box>
151
+ );
152
+ });
153
+
25
154
  function _ImportStepConfiguration({ state }: ImportStepConfigurationProps) {
26
155
  const { csvHeaders, fields, translate: t } = state;
27
156
 
@@ -35,8 +164,6 @@ function _ImportStepConfiguration({ state }: ImportStepConfigurationProps) {
35
164
  }),
36
165
  );
37
166
 
38
- const { selectedFieldIds } = state;
39
-
40
167
  const hasNoRows = state.hasNoMappedData;
41
168
 
42
169
  return (
@@ -109,30 +236,10 @@ function _ImportStepConfiguration({ state }: ImportStepConfigurationProps) {
109
236
  },
110
237
  {
111
238
  value: (
112
- <Dropdown
113
- dataHook={`import-mapping-${header}`}
114
- clearButton
115
- onClear={() => {
116
- state.setMapping(header, null);
117
- }}
118
- placeholder={t('cairo.import.skipColumn')}
119
- selectedId={state.mappingByHeader[header] ?? undefined}
120
- onSelect={({ id }) => {
121
- state.setMapping(header, id as string);
122
- }}
123
- popoverProps={{
124
- appendTo: 'window',
125
- zIndex: 5001,
126
- flip: true,
127
- fixed: false,
128
- }}
129
- options={baseDropdownOptions.map((option) => ({
130
- ...option,
131
- disabled:
132
- selectedFieldIds.has(String(option.id)) &&
133
- state.mappingByHeader[header] !== String(option.id),
134
- }))}
135
- size="small"
239
+ <FieldMappingCell
240
+ state={state}
241
+ header={header}
242
+ fieldOptions={baseDropdownOptions}
136
243
  />
137
244
  ),
138
245
  width: COLUMN_WIDTHS.field,
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../stylable-esm-runtime.js";
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "ImportStepUpload72349518";
8
+ var _namespace_ = "ImportStepUpload2837626154";
9
9
  var _style_ = classesRuntime.bind(null, _namespace_);
10
10
 
11
11
  export var cssStates = statesRuntime.bind(null, _namespace_);
@@ -13,7 +13,7 @@ export var style = _style_;
13
13
  export var st: import("@stylable/runtime").STFunction = _style_;
14
14
 
15
15
  export var namespace = _namespace_;
16
- export var classes = {"root":"ImportStepUpload72349518__root","fileUpload":"ImportStepUpload72349518__fileUpload"};
16
+ export var classes = {"root":"ImportStepUpload2837626154__root","fileUpload":"ImportStepUpload2837626154__fileUpload"};
17
17
  export var keyframes = {};
18
18
  export var layers = {};
19
19
  export var containers = {};