@wix/patterns 1.419.0 → 1.421.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 (375) 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 +211 -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 +34 -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 +152 -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 +159 -0
  97. package/dist/cjs/components/ImportButton/pr-5490-review-comments.md +44 -0
  98. package/dist/cjs/components/InputOverflow/InputOverflow.st.css.js +2 -2
  99. package/dist/cjs/components/InputOverflow/InputOverflow.st.css.js.map +1 -1
  100. package/dist/cjs/components/LoadingRow/LoadingRow.st.css.js +3 -3
  101. package/dist/cjs/components/LoadingRow/LoadingRow.st.css.js.map +1 -1
  102. package/dist/cjs/components/MaxHeightText/MaxHeightText.st.css.js +2 -2
  103. package/dist/cjs/components/MaxHeightText/MaxHeightText.st.css.js.map +1 -1
  104. package/dist/cjs/components/MaxLines/MaxLines.st.css.js +2 -2
  105. package/dist/cjs/components/MaxLines/MaxLines.st.css.js.map +1 -1
  106. package/dist/cjs/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.js +5 -5
  107. package/dist/cjs/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.js.map +1 -1
  108. package/dist/cjs/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.js +2 -2
  109. package/dist/cjs/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.js.map +1 -1
  110. package/dist/cjs/components/NestedTable/NestedTableRow.st.css.js +5 -5
  111. package/dist/cjs/components/NestedTable/NestedTableRow.st.css.js.map +1 -1
  112. package/dist/cjs/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.js +2 -2
  113. package/dist/cjs/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.js.map +1 -1
  114. package/dist/cjs/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.js +2 -2
  115. package/dist/cjs/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.js.map +1 -1
  116. package/dist/cjs/components/PickerContent/PickerContent.st.css.js +2 -2
  117. package/dist/cjs/components/PickerContent/PickerContent.st.css.js.map +1 -1
  118. package/dist/cjs/components/PickerContent/PickerContentAdditionalStep.st.css.js +4 -4
  119. package/dist/cjs/components/PickerContent/PickerContentAdditionalStep.st.css.js.map +1 -1
  120. package/dist/cjs/components/PickerTableListItem/PickerTableListItem.st.css.js +2 -2
  121. package/dist/cjs/components/PickerTableListItem/PickerTableListItem.st.css.js.map +1 -1
  122. package/dist/cjs/components/ScrollableContent/ScrollableContent.st.css.js +2 -2
  123. package/dist/cjs/components/ScrollableContent/ScrollableContent.st.css.js.map +1 -1
  124. package/dist/cjs/components/SetupWidget/SetupWidget.st.css.js +5 -5
  125. package/dist/cjs/components/SetupWidget/SetupWidget.st.css.js.map +1 -1
  126. package/dist/cjs/components/SkeletonCard/SkeletonCard.st.css.js +3 -3
  127. package/dist/cjs/components/SkeletonCard/SkeletonCard.st.css.js.map +1 -1
  128. package/dist/cjs/components/SlidingModal/SlidingModal.st.css.js +2 -2
  129. package/dist/cjs/components/SlidingModal/SlidingModal.st.css.js.map +1 -1
  130. package/dist/cjs/components/TabsFilter/TabsFilter.st.css.js +3 -3
  131. package/dist/cjs/components/TabsFilter/TabsFilter.st.css.js.map +1 -1
  132. package/dist/cjs/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.js +2 -2
  133. package/dist/cjs/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.js.map +1 -1
  134. package/dist/cjs/components/ToolbarItem/ToolbarItem.st.css.js +2 -2
  135. package/dist/cjs/components/ToolbarItem/ToolbarItem.st.css.js.map +1 -1
  136. package/dist/cjs/components/ToolbarItemBox/ToolbarItemBox.st.css.js +2 -2
  137. package/dist/cjs/components/ToolbarItemBox/ToolbarItemBox.st.css.js.map +1 -1
  138. package/dist/cjs/components/common.st.css.js +4 -4
  139. package/dist/cjs/components/common.st.css.js.map +1 -1
  140. package/dist/cjs/state/CollectionPage/CollectionPageHeader.st.css.js +2 -2
  141. package/dist/cjs/state/CollectionPage/CollectionPageHeader.st.css.js.map +1 -1
  142. package/dist/cjs/state/FormPage/FormPageHeader.st.css.js +2 -2
  143. package/dist/cjs/state/FormPage/FormPageHeader.st.css.js.map +1 -1
  144. package/dist/cjs/styles.global.css +2 -2
  145. package/dist/cjs/version.js +1 -1
  146. package/dist/cjs/version.js.map +1 -1
  147. package/dist/docs/index.json +27 -27
  148. package/dist/esm/components/CardContainer/CardContainer.st.css.js +2 -2
  149. package/dist/esm/components/CmsFieldManagement/CmsFieldForm.st.css.js +2 -2
  150. package/dist/esm/components/CmsFieldManagement/CmsFieldModal.st.css.js +2 -2
  151. package/dist/esm/components/CmsFieldManagement/CmsFieldModal.st.css.js.map +1 -1
  152. package/dist/esm/components/CmsFieldManagement/Sections/ValidationAndDefaultsSection.st.css.js +2 -2
  153. package/dist/esm/components/CmsFieldManagement/formFields/CharactersLimitInput.st.css.js +2 -2
  154. package/dist/esm/components/Collapse/Collapse.st.css.js +2 -2
  155. package/dist/esm/components/CollectionPageNew/CollectionPage.st.css.js +2 -2
  156. package/dist/esm/components/CollectionSectionHeader/CollectionSectionHeader.st.css.js +2 -2
  157. package/dist/esm/components/CollectionTable/CollectionTable.st.css.js +2 -2
  158. package/dist/esm/components/CollectionTable/CollectionTable.st.css.js.map +1 -1
  159. package/dist/esm/components/CollectionTable/CollectionTableWSRTable.st.css.js +2 -2
  160. package/dist/esm/components/CollectionTable/CollectionTableWSRTable.st.css.js.map +1 -1
  161. package/dist/esm/components/CollectionToolbar/CollectionToolbar.st.css.js +2 -2
  162. package/dist/esm/components/CollectionToolbar/CollectionToolbar.st.css.js.map +1 -1
  163. package/dist/esm/components/CollectionToolbar/SearchOrCustomFilter.st.css.js +2 -2
  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/date/Edit.st.css.js +2 -2
  176. package/dist/esm/components/EditableTable/cellTypes/date/Edit.st.css.js.map +1 -1
  177. package/dist/esm/components/EditableTable/cellTypes/date/View.st.css.js +2 -2
  178. package/dist/esm/components/EditableTable/cellTypes/datetime/Edit.st.css.js +2 -2
  179. package/dist/esm/components/EditableTable/cellTypes/datetime/View.st.css.js +2 -2
  180. package/dist/esm/components/EditableTable/cellTypes/email/Edit.st.css.js +2 -2
  181. package/dist/esm/components/EditableTable/cellTypes/email/Edit.st.css.js.map +1 -1
  182. package/dist/esm/components/EditableTable/cellTypes/email/View.st.css.js +2 -2
  183. package/dist/esm/components/EditableTable/cellTypes/number/Edit.st.css.js +2 -2
  184. package/dist/esm/components/EditableTable/cellTypes/number/View.st.css.js +2 -2
  185. package/dist/esm/components/EditableTable/cellTypes/object/Edit.st.css.js +2 -2
  186. package/dist/esm/components/EditableTable/cellTypes/object/View.st.css.js +2 -2
  187. package/dist/esm/components/EditableTable/cellTypes/object/View.st.css.js.map +1 -1
  188. package/dist/esm/components/EditableTable/cellTypes/select/Edit.st.css.js +2 -2
  189. package/dist/esm/components/EditableTable/cellTypes/text/Edit.st.css.js +2 -2
  190. package/dist/esm/components/EditableTable/cellTypes/text/Edit.st.css.js.map +1 -1
  191. package/dist/esm/components/EditableTable/cellTypes/text/View.st.css.js +2 -2
  192. package/dist/esm/components/EditableTable/cellTypes/time/Edit.st.css.js +2 -2
  193. package/dist/esm/components/EditableTable/cellTypes/url/Edit.st.css.js +2 -2
  194. package/dist/esm/components/EditableTable/cellTypes/url/View.st.css.js +2 -2
  195. package/dist/esm/components/EditableTable/cellTypes/url/View.st.css.js.map +1 -1
  196. package/dist/esm/components/EntityPage/EntityPagePlain.st.css.js +2 -2
  197. package/dist/esm/components/Fade/Fade.st.css.js +2 -2
  198. package/dist/esm/components/Fade/Fade.st.css.js.map +1 -1
  199. package/dist/esm/components/Heading/Heading.st.css.js +2 -2
  200. package/dist/esm/components/ImportButton/CAIRO-4118-tasks.md +1 -1
  201. package/dist/esm/components/ImportButton/CAIRO-4230-create-new-field.md +211 -0
  202. package/dist/esm/components/ImportButton/ImportButton.js +2 -2
  203. package/dist/esm/components/ImportButton/ImportButton.js.map +1 -1
  204. package/dist/esm/components/ImportButton/ImportButtonModalLayout.js +14 -3
  205. package/dist/esm/components/ImportButton/ImportButtonModalLayout.js.map +1 -1
  206. package/dist/esm/components/ImportButton/ImportModal.uni.driver.js +7 -0
  207. package/dist/esm/components/ImportButton/ImportModal.uni.driver.js.map +1 -1
  208. package/dist/esm/components/ImportButton/ImportStepConfiguration.js +77 -15
  209. package/dist/esm/components/ImportButton/ImportStepConfiguration.js.map +1 -1
  210. package/dist/esm/components/ImportButton/ImportStepUpload.st.css.js +2 -2
  211. package/dist/esm/components/ImportButton/ImportStepUpload.st.css.js.map +1 -1
  212. package/dist/esm/components/ImportButton/import-create-new-field-issues.md +159 -0
  213. package/dist/esm/components/ImportButton/pr-5490-review-comments.md +44 -0
  214. package/dist/esm/components/InputOverflow/InputOverflow.st.css.js +2 -2
  215. package/dist/esm/components/LoadingRow/LoadingRow.st.css.js +3 -3
  216. package/dist/esm/components/MaxHeightText/MaxHeightText.st.css.js +2 -2
  217. package/dist/esm/components/MaxHeightText/MaxHeightText.st.css.js.map +1 -1
  218. package/dist/esm/components/MaxLines/MaxLines.st.css.js +2 -2
  219. package/dist/esm/components/MaxLines/MaxLines.st.css.js.map +1 -1
  220. package/dist/esm/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.js +2 -2
  221. package/dist/esm/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.js +2 -2
  222. package/dist/esm/components/NestedTable/NestedTableRow.st.css.js +2 -2
  223. package/dist/esm/components/NestedTable/NestedTableRow.st.css.js.map +1 -1
  224. package/dist/esm/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.js +2 -2
  225. package/dist/esm/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.js.map +1 -1
  226. package/dist/esm/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.js +2 -2
  227. package/dist/esm/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.js.map +1 -1
  228. package/dist/esm/components/PickerContent/PickerContent.st.css.js +2 -2
  229. package/dist/esm/components/PickerContent/PickerContentAdditionalStep.st.css.js +2 -2
  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/ScrollableContent/ScrollableContent.st.css.js.map +1 -1
  233. package/dist/esm/components/SetupWidget/SetupWidget.st.css.js +2 -2
  234. package/dist/esm/components/SetupWidget/SetupWidget.st.css.js.map +1 -1
  235. package/dist/esm/components/SkeletonCard/SkeletonCard.st.css.js +2 -2
  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/ToolbarItemBox/ToolbarItemBox.st.css.js +2 -2
  241. package/dist/esm/components/ToolbarItemBox/ToolbarItemBox.st.css.js.map +1 -1
  242. package/dist/esm/components/common.st.css.js +2 -2
  243. package/dist/esm/state/CollectionPage/CollectionPageHeader.st.css.js +2 -2
  244. package/dist/esm/state/FormPage/FormPageHeader.st.css.js +2 -2
  245. package/dist/esm/state/FormPage/FormPageHeader.st.css.js.map +1 -1
  246. package/dist/esm/styles.global.css +2 -2
  247. package/dist/esm/version.js +1 -1
  248. package/dist/types/components/CmsFieldManagement/CmsFieldModal.st.css.d.ts.map +1 -1
  249. package/dist/types/components/CollectionTable/CollectionTable.st.css.d.ts.map +1 -1
  250. package/dist/types/components/CollectionTable/CollectionTable.uni.driver.d.ts +4 -0
  251. package/dist/types/components/CollectionTable/CollectionTable.uni.driver.d.ts.map +1 -1
  252. package/dist/types/components/CollectionTable/CollectionTableWSRTable.st.css.d.ts.map +1 -1
  253. package/dist/types/components/CollectionToolbar/CollectionToolbar.st.css.d.ts.map +1 -1
  254. package/dist/types/components/CollectionViewsDropdown/ViewsDropdown.st.css.d.ts.map +1 -1
  255. package/dist/types/components/EditableTable/cellTypes/date/Edit.st.css.d.ts.map +1 -1
  256. package/dist/types/components/EditableTable/cellTypes/email/Edit.st.css.d.ts.map +1 -1
  257. package/dist/types/components/EditableTable/cellTypes/object/View.st.css.d.ts.map +1 -1
  258. package/dist/types/components/EditableTable/cellTypes/text/Edit.st.css.d.ts.map +1 -1
  259. package/dist/types/components/EditableTable/cellTypes/url/View.st.css.d.ts.map +1 -1
  260. package/dist/types/components/Fade/Fade.st.css.d.ts.map +1 -1
  261. package/dist/types/components/ImportButton/ImportButton.d.ts.map +1 -1
  262. package/dist/types/components/ImportButton/ImportButton.uni.driver.d.ts +2 -0
  263. package/dist/types/components/ImportButton/ImportButton.uni.driver.d.ts.map +1 -1
  264. package/dist/types/components/ImportButton/ImportButtonModalLayout.d.ts.map +1 -1
  265. package/dist/types/components/ImportButton/ImportModal.uni.driver.d.ts +3 -0
  266. package/dist/types/components/ImportButton/ImportModal.uni.driver.d.ts.map +1 -1
  267. package/dist/types/components/ImportButton/ImportProps.d.ts +8 -1
  268. package/dist/types/components/ImportButton/ImportProps.d.ts.map +1 -1
  269. package/dist/types/components/ImportButton/ImportStepConfiguration.d.ts.map +1 -1
  270. package/dist/types/components/ImportButton/ImportStepUpload.st.css.d.ts.map +1 -1
  271. package/dist/types/components/LayoutSwitch/LayoutSwitch.uni.driver.d.ts +4 -0
  272. package/dist/types/components/LayoutSwitch/LayoutSwitch.uni.driver.d.ts.map +1 -1
  273. package/dist/types/components/MaxHeightText/MaxHeightText.st.css.d.ts.map +1 -1
  274. package/dist/types/components/MaxLines/MaxLines.st.css.d.ts.map +1 -1
  275. package/dist/types/components/NestedTable/NestedTable.uni.driver.d.ts +4 -0
  276. package/dist/types/components/NestedTable/NestedTable.uni.driver.d.ts.map +1 -1
  277. package/dist/types/components/NestedTable/NestedTableRow.st.css.d.ts.map +1 -1
  278. package/dist/types/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.d.ts.map +1 -1
  279. package/dist/types/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.d.ts.map +1 -1
  280. package/dist/types/components/ScrollableContent/ScrollableContent.st.css.d.ts.map +1 -1
  281. package/dist/types/components/SetupWidget/SetupWidget.st.css.d.ts.map +1 -1
  282. package/dist/types/components/Table/Table.uni.driver.d.ts +4 -0
  283. package/dist/types/components/Table/Table.uni.driver.d.ts.map +1 -1
  284. package/dist/types/components/TableFolders/TableFolders.uni.driver.d.ts +4 -0
  285. package/dist/types/components/TableFolders/TableFolders.uni.driver.d.ts.map +1 -1
  286. package/dist/types/components/TableGridSwitch/TableGridSwitch.uni.driver.d.ts +4 -0
  287. package/dist/types/components/TableGridSwitch/TableGridSwitch.uni.driver.d.ts.map +1 -1
  288. package/dist/types/components/ToolbarItemBox/ToolbarItemBox.st.css.d.ts.map +1 -1
  289. package/dist/types/state/FormPage/FormPageHeader.st.css.d.ts.map +1 -1
  290. package/dist/types/testkit/enzyme.d.ts +16 -0
  291. package/dist/types/testkit/enzyme.d.ts.map +1 -1
  292. package/dist/types/testkit/jsdom.d.ts +20 -0
  293. package/dist/types/testkit/jsdom.d.ts.map +1 -1
  294. package/dist/types/testkit/playwright.d.ts +16 -0
  295. package/dist/types/testkit/playwright.d.ts.map +1 -1
  296. package/dist/types/testkit/puppeteer.d.ts +16 -0
  297. package/dist/types/testkit/puppeteer.d.ts.map +1 -1
  298. package/dist/types/version.d.ts +1 -1
  299. package/package.json +6 -6
  300. package/src/components/CardContainer/CardContainer.st.css.ts +2 -2
  301. package/src/components/CmsFieldManagement/CmsFieldForm.st.css.ts +2 -2
  302. package/src/components/CmsFieldManagement/CmsFieldModal.st.css.ts +2 -2
  303. package/src/components/CmsFieldManagement/Sections/ValidationAndDefaultsSection.st.css.ts +2 -2
  304. package/src/components/CmsFieldManagement/formFields/CharactersLimitInput.st.css.ts +2 -2
  305. package/src/components/Collapse/Collapse.st.css.ts +2 -2
  306. package/src/components/CollectionPageNew/CollectionPage.st.css.ts +2 -2
  307. package/src/components/CollectionSectionHeader/CollectionSectionHeader.st.css.ts +2 -2
  308. package/src/components/CollectionTable/CollectionTable.st.css.ts +2 -2
  309. package/src/components/CollectionTable/CollectionTableWSRTable.st.css.ts +2 -2
  310. package/src/components/CollectionToolbar/CollectionToolbar.st.css.ts +2 -2
  311. package/src/components/CollectionToolbar/SearchOrCustomFilter.st.css.ts +2 -2
  312. package/src/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.ts +2 -2
  313. package/src/components/CollectionViewsDropdown/ViewsDropdown.st.css.ts +2 -2
  314. package/src/components/DragHandle/DragHandle.st.css.ts +2 -2
  315. package/src/components/EditableTable/EditableCell.st.css.ts +2 -2
  316. package/src/components/EditableTable/HeaderActionsPopover.st.css.ts +2 -2
  317. package/src/components/EditableTable/cellTypes/CellViewLayout.st.css.ts +2 -2
  318. package/src/components/EditableTable/cellTypes/address/Edit.st.css.ts +2 -2
  319. package/src/components/EditableTable/cellTypes/boolean/Edit.st.css.ts +2 -2
  320. package/src/components/EditableTable/cellTypes/boolean/View.st.css.ts +2 -2
  321. package/src/components/EditableTable/cellTypes/color/Edit.st.css.ts +2 -2
  322. package/src/components/EditableTable/cellTypes/date/Edit.st.css.ts +2 -2
  323. package/src/components/EditableTable/cellTypes/date/View.st.css.ts +2 -2
  324. package/src/components/EditableTable/cellTypes/datetime/Edit.st.css.ts +2 -2
  325. package/src/components/EditableTable/cellTypes/datetime/View.st.css.ts +2 -2
  326. package/src/components/EditableTable/cellTypes/email/Edit.st.css.ts +2 -2
  327. package/src/components/EditableTable/cellTypes/email/View.st.css.ts +2 -2
  328. package/src/components/EditableTable/cellTypes/number/Edit.st.css.ts +2 -2
  329. package/src/components/EditableTable/cellTypes/number/View.st.css.ts +2 -2
  330. package/src/components/EditableTable/cellTypes/object/Edit.st.css.ts +2 -2
  331. package/src/components/EditableTable/cellTypes/object/View.st.css.ts +2 -2
  332. package/src/components/EditableTable/cellTypes/select/Edit.st.css.ts +2 -2
  333. package/src/components/EditableTable/cellTypes/text/Edit.st.css.ts +2 -2
  334. package/src/components/EditableTable/cellTypes/text/View.st.css.ts +2 -2
  335. package/src/components/EditableTable/cellTypes/time/Edit.st.css.ts +2 -2
  336. package/src/components/EditableTable/cellTypes/url/Edit.st.css.ts +2 -2
  337. package/src/components/EditableTable/cellTypes/url/View.st.css.ts +2 -2
  338. package/src/components/EntityPage/EntityPagePlain.st.css.ts +2 -2
  339. package/src/components/Fade/Fade.st.css.ts +2 -2
  340. package/src/components/Heading/Heading.st.css.ts +2 -2
  341. package/src/components/ImportButton/CAIRO-4118-tasks.md +1 -1
  342. package/src/components/ImportButton/CAIRO-4230-create-new-field.md +211 -0
  343. package/src/components/ImportButton/ImportButton.tsx +2 -0
  344. package/src/components/ImportButton/ImportButtonModalLayout.tsx +19 -2
  345. package/src/components/ImportButton/ImportModal.uni.driver.ts +10 -0
  346. package/src/components/ImportButton/ImportProps.tsx +13 -1
  347. package/src/components/ImportButton/ImportStepConfiguration.tsx +150 -27
  348. package/src/components/ImportButton/ImportStepUpload.st.css.ts +2 -2
  349. package/src/components/ImportButton/import-create-new-field-issues.md +159 -0
  350. package/src/components/ImportButton/pr-5490-review-comments.md +44 -0
  351. package/src/components/InputOverflow/InputOverflow.st.css.ts +2 -2
  352. package/src/components/LoadingRow/LoadingRow.st.css.ts +3 -3
  353. package/src/components/MaxHeightText/MaxHeightText.st.css.ts +2 -2
  354. package/src/components/MaxLines/MaxLines.st.css.ts +2 -2
  355. package/src/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.ts +2 -2
  356. package/src/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.ts +2 -2
  357. package/src/components/NestedTable/NestedTableRow.st.css.ts +2 -2
  358. package/src/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.ts +2 -2
  359. package/src/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.ts +2 -2
  360. package/src/components/PickerContent/PickerContent.st.css.ts +2 -2
  361. package/src/components/PickerContent/PickerContentAdditionalStep.st.css.ts +2 -2
  362. package/src/components/PickerTableListItem/PickerTableListItem.st.css.ts +2 -2
  363. package/src/components/ScrollableContent/ScrollableContent.st.css.ts +2 -2
  364. package/src/components/SetupWidget/SetupWidget.st.css.ts +2 -2
  365. package/src/components/SkeletonCard/SkeletonCard.st.css.ts +2 -2
  366. package/src/components/SlidingModal/SlidingModal.st.css.ts +2 -2
  367. package/src/components/TabsFilter/TabsFilter.st.css.ts +2 -2
  368. package/src/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.ts +2 -2
  369. package/src/components/ToolbarItem/ToolbarItem.st.css.ts +2 -2
  370. package/src/components/ToolbarItemBox/ToolbarItemBox.st.css.ts +2 -2
  371. package/src/components/common.st.css.ts +2 -2
  372. package/src/state/CollectionPage/CollectionPageHeader.st.css.ts +2 -2
  373. package/src/state/FormPage/FormPageHeader.st.css.ts +2 -2
  374. package/src/styles.global.css +2 -2
  375. 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,211 @@
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
+ - **Data-driven field-type detection** (CAIRO-4131 — done): the `(New)` suggestion's
24
+ type is inferred from the column's data (number / date / boolean / url / text).
25
+ See "Field type is detected from the column data" below.
26
+ - A way to **choose the default behavior** for unmapped columns (create new field vs.
27
+ don't import). The **presence of the `updateSchema` callback prop itself is the
28
+ opt-in** — no separate flag.
29
+
30
+ **Out of scope (deferred)**
31
+ - The "Edit Field" entry point that opens a type selector pre-populated with the
32
+ detected type ([CAIRO-4398](https://wix.atlassian.net/browse/CAIRO-4398)), and the
33
+ "+ Create New Field" dropdown footer ([CAIRO-4399](https://wix.atlassian.net/browse/CAIRO-4399)).
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 detected from the column data (CAIRO-4131 — done)
144
+
145
+ Detection is **split by layer and injected** (`detectColumnType` is a DI prop on
146
+ `ImportState`), because media detection needs a media-URI parser that core must
147
+ not depend on (`utils → core → cairo/fields`):
148
+
149
+ - **core** (`detectFieldType.ts`) owns the `NewFieldType` union
150
+ (`text | number | date | boolean | url | image | video | document | audio`), the
151
+ sampling + ⅔-majority vote (`detectColumnType(values, detectValue?)`), and the
152
+ **primitive** per-cell detector (`detectValueType`: number / date / boolean /
153
+ url, else text — ported from cm-import `detectFieldConfig` /
154
+ `guessFieldConfigFromSamples`). This is the default when nothing is injected.
155
+ - **fields** (`utils/detect-field-type.ts`, exported as
156
+ `@wix/patterns-fields/detect-field-type`) owns the **media-aware** detector:
157
+ it composes a per-cell detector that recognizes Wix media URIs (image / video /
158
+ document / audio, via the local `parseMediaItemUri` port) and external image
159
+ URLs *before* delegating to core's primitive detector, then reuses core's
160
+ `detectColumnType` sampling. No new runtime dep — `parseMediaItemUri` is the
161
+ existing zero-dep port; the heavy `@wix/cm-media-utils` bundle is not pulled in.
162
+ - **cairo** (`ImportButtonModalLayout`) injects the fields detector into
163
+ `ImportState` via `useCreateImport({ detectColumnType })`. So `@wix/patterns`
164
+ gets full media-aware detection; bare-core consumers get primitive detection.
165
+ - The mapping carries `fieldType` end-to-end: `getDefaultMapping` /
166
+ `setNewFieldMapping` set it from the injected `detectColumnType`, and
167
+ `_resolveFieldMapping` passes it to `updateSchema`.
168
+ - The helper text resolves the type name from the **shared patterns-fields**
169
+ field-type translations via `NEW_FIELD_TYPE_TITLE_KEY`, a
170
+ `Record<NewFieldType, …>` in `ImportStepConfiguration` (keys
171
+ `auto-patterns.fields.field_type_<type>_title`). Adding a `NewFieldType` makes
172
+ the missing map entry a **compile error** — the one place to extend.
173
+ - Those translations live in the patterns-fields artifact (fields'
174
+ `useTranslations()`), so the import modal is wrapped in `PatternsFieldsProvider`
175
+ **only when field creation is enabled** (`ImportButtonModalLayout`).
176
+ - **Consumer follow-up:** the `updateSchema` consumer must map each
177
+ `NewFieldType` to its source field type (auto-patterns `useImport` currently
178
+ hardcodes `SHORT_TEXT`; the CMS reverse map needs `URL` / `IMAGE` / `VIDEO` /
179
+ `DOCUMENT` / `AUDIO`). Gated on the new `@wix/patterns` preview being published.
180
+
181
+ ## Testing
182
+
183
+ - Core/cairo: `Table.importButton.spec` — default mapping under updateSchema
184
+ present/absent, the single `updateSchema` call with all new fields, upload payload
185
+ keyed by derived keys, helper text, and schema-update failure → error state.
186
+ - Follow existing Import test patterns (`InMemoryBackend`, `flush()`).
187
+
188
+ ## Decisions made during implementation
189
+ - **Mapping model:** `mappingByHeader` value is now a discriminated `ColumnMapping`
190
+ = `{kind:'existing', fieldId} | {kind:'new', fieldType:'text'} | null`.
191
+ - **Field creation:** runs in `startImport` **after** backup and **before** the batch
192
+ upload, via `_resolveFieldMapping()`. All "new" columns are added in **one**
193
+ `updateSchema(fields)` call; their keys are Cairo-derived (`uniqueFieldKey`) and
194
+ reused as the upload payload keys — no id round-trip.
195
+ - **Failure handling:** if `updateSchema` throws, the import enters the **error state**
196
+ with a "Try again" CTA (same path as a first-batch upload failure); no rows upload.
197
+ - **UI:** a synthetic `(New)` option is appended to each column dropdown when
198
+ `canCreateNewField`; selecting it shows the helper text. Clearing still means
199
+ "don't import" (`null`).
200
+
201
+ ## Still open (consumer/CMS side)
202
+ - Whether created fields should be rolled back on cancel/restore (currently they are
203
+ not — restore only covers row data).
204
+ - **Consumer wiring:** `auto-patterns` `useImport` must implement `updateSchema`
205
+ (one batched schema mutation, e.g. `updateSchema(collectionId, ...addField(...))`),
206
+ replacing the earlier per-field `createField`/`addField` path — pending a new
207
+ `@wix/patterns` publish.
208
+
209
+ ## AGENTS.md impact
210
+
211
+ - 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
  );
@@ -10,6 +10,7 @@ import { getImportModalStepProps } from './getImportModalStepProps';
10
10
  import React, { useEffect, useState } from 'react';
11
11
  import { observer } from 'mobx-react-lite';
12
12
  import { useCreateImport } from '@wix/bex-core';
13
+ import { detectFieldType } from '@wix/patterns-fields/detect-field-type';
13
14
  import { ImportButtonModalLayoutProps } from './ImportProps';
14
15
  import { addEventListener } from '@wix/bex-core/util';
15
16
  import { useIsMobile } from '../../hooks/useIsMobile';
@@ -17,12 +18,14 @@ import { CustomDrawerLayout } from '../CustomDrawerLayout';
17
18
  import { ImportStepper } from './ImportStepper';
18
19
  import { MessageActionModal } from '../ActionModal';
19
20
  import { ModalWrapper } from '../CollectionModal';
21
+ import { PatternsFieldsProvider } from '../../providers';
20
22
 
21
23
  function _ImportButtonModalLayout(props: ImportButtonModalLayoutProps) {
22
24
  const {
23
25
  fields,
24
26
  bulkUploadItems,
25
27
  backup,
28
+ updateSchema,
26
29
  batchSize,
27
30
  importModalState,
28
31
  ...rest
@@ -34,6 +37,10 @@ function _ImportButtonModalLayout(props: ImportButtonModalLayoutProps) {
34
37
  fields,
35
38
  bulkUploadItems,
36
39
  backup,
40
+ updateSchema,
41
+ // Media-aware detection (image/video/document/audio) lives in
42
+ // patterns-fields; core defaults to primitive detection without it.
43
+ detectColumnType: detectFieldType,
37
44
  batchSize,
38
45
  importModalState,
39
46
  });
@@ -63,6 +70,16 @@ function _ImportButtonModalLayout(props: ImportButtonModalLayoutProps) {
63
70
  children
64
71
  );
65
72
 
73
+ // The configuration step's "new field" helper reads field-type names from the
74
+ // patterns-fields translations, which require this provider. Only mounted when
75
+ // field creation is enabled (the only case a "new" mapping can exist), so the
76
+ // fields container isn't initialized for plain imports.
77
+ const content = state.canCreateNewField ? (
78
+ <PatternsFieldsProvider>{wrappedChildren}</PatternsFieldsProvider>
79
+ ) : (
80
+ wrappedChildren
81
+ );
82
+
66
83
  useEffect(() => {
67
84
  if (onRequestClose) {
68
85
  return addEventListener(
@@ -89,7 +106,7 @@ function _ImportButtonModalLayout(props: ImportButtonModalLayoutProps) {
89
106
  removeContentPadding={removeContentPadding}
90
107
  {...rest}
91
108
  {...customModalLayoutProps}
92
- children={wrappedChildren}
109
+ children={content}
93
110
  />
94
111
  <ModalWrapper
95
112
  state={discardModal}
@@ -142,7 +159,7 @@ function _ImportButtonModalLayout(props: ImportButtonModalLayoutProps) {
142
159
  removeContentPadding={removeContentPadding}
143
160
  {...rest}
144
161
  {...customModalLayoutProps}
145
- children={wrappedChildren}
162
+ children={content}
146
163
  />
147
164
  <MessageActionModal
148
165
  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,150 @@ 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 adding a detected
33
+ // type makes the missing entry a compile error here — the single place to extend.
34
+ type FieldTypeTitleKey =
35
+ | 'auto-patterns.fields.field_type_text_title'
36
+ | 'auto-patterns.fields.field_type_number_title'
37
+ | 'auto-patterns.fields.field_type_date_title'
38
+ | 'auto-patterns.fields.field_type_boolean_title'
39
+ | 'auto-patterns.fields.field_type_url_title'
40
+ | 'auto-patterns.fields.field_type_image_title'
41
+ | 'auto-patterns.fields.field_type_video_title'
42
+ | 'auto-patterns.fields.field_type_document_title'
43
+ | 'auto-patterns.fields.field_type_audio_title';
44
+
45
+ const NEW_FIELD_TYPE_TITLE_KEY: Record<NewFieldType, FieldTypeTitleKey> = {
46
+ text: 'auto-patterns.fields.field_type_text_title',
47
+ number: 'auto-patterns.fields.field_type_number_title',
48
+ date: 'auto-patterns.fields.field_type_date_title',
49
+ boolean: 'auto-patterns.fields.field_type_boolean_title',
50
+ url: 'auto-patterns.fields.field_type_url_title',
51
+ image: 'auto-patterns.fields.field_type_image_title',
52
+ video: 'auto-patterns.fields.field_type_video_title',
53
+ document: 'auto-patterns.fields.field_type_document_title',
54
+ audio: 'auto-patterns.fields.field_type_audio_title',
55
+ };
56
+
57
+ type DropdownOption = ReturnType<typeof listItemSelectBuilder>;
58
+
59
+ interface NewFieldHelperTextProps {
60
+ state: ImportState;
61
+ header: string;
62
+ fieldType: NewFieldType;
63
+ }
64
+
65
+ /**
66
+ * Helper line under a "create new field" mapping (e.g. "This will be a new text
67
+ * field."). The type name comes from the shared patterns-fields translations via
68
+ * `useTranslations`, so this is only rendered when the import modal is wrapped in
69
+ * `PatternsFieldsProvider` — which `ImportButtonModalLayout` does whenever field
70
+ * creation is enabled (the only case a `new` mapping exists).
71
+ */
72
+ const NewFieldHelperText = observer(function _NewFieldHelperText({
73
+ state,
74
+ header,
75
+ fieldType,
76
+ }: NewFieldHelperTextProps) {
77
+ const { t: ft } = useTranslations();
78
+ const typeName = ft(NEW_FIELD_TYPE_TITLE_KEY[fieldType]).toLocaleLowerCase();
79
+
80
+ return (
81
+ <Text size="tiny" secondary dataHook={`import-new-field-helper-${header}`}>
82
+ {state.translate('cairo.import.newFieldHelper', { typeName })}
83
+ </Text>
84
+ );
85
+ });
86
+
87
+ interface FieldMappingCellProps {
88
+ state: ImportState;
89
+ header: string;
90
+ fieldOptions: DropdownOption[];
91
+ }
92
+
93
+ const FieldMappingCell = observer(function _FieldMappingCell({
94
+ state,
95
+ header,
96
+ fieldOptions,
97
+ }: FieldMappingCellProps) {
98
+ const { translate: t, selectedFieldIds, canCreateNewField } = state;
99
+ const mapping = state.mappingByHeader[header];
100
+
101
+ const selectedId =
102
+ mapping?.kind === 'existing'
103
+ ? mapping.fieldId
104
+ : mapping?.kind === 'new'
105
+ ? CREATE_NEW_FIELD_OPTION_ID
106
+ : undefined;
107
+
108
+ const options: DropdownOption[] = [
109
+ ...fieldOptions.map((option) => ({
110
+ ...option,
111
+ disabled:
112
+ selectedFieldIds.has(String(option.id)) &&
113
+ !(mapping?.kind === 'existing' && mapping.fieldId === String(option.id)),
114
+ })),
115
+ ...(canCreateNewField
116
+ ? [
117
+ // The option is the CSV column header itself (the new field is named
118
+ // after it) followed by a translated "(New)" marker. The header is
119
+ // built in code rather than via an interpolated key so it always
120
+ // shows, regardless of which translation bundle the consumer loads.
121
+ (() => {
122
+ const label = `${header} ${t('cairo.import.newFieldSuffix')}`;
123
+ return listItemSelectBuilder({
124
+ id: CREATE_NEW_FIELD_OPTION_ID,
125
+ label,
126
+ title: label,
127
+ });
128
+ })(),
129
+ ]
130
+ : []),
131
+ ];
132
+
133
+ return (
134
+ <Box direction="vertical" gap="SP1">
135
+ <Dropdown
136
+ dataHook={`import-mapping-${header}`}
137
+ clearButton
138
+ onClear={() => {
139
+ state.setMapping(header, null);
140
+ }}
141
+ placeholder={t('cairo.import.skipColumn')}
142
+ selectedId={selectedId}
143
+ onSelect={({ id }) => {
144
+ if (id === CREATE_NEW_FIELD_OPTION_ID) {
145
+ state.setNewFieldMapping(header);
146
+ } else {
147
+ state.setMapping(header, id as string);
148
+ }
149
+ }}
150
+ popoverProps={{
151
+ appendTo: 'window',
152
+ zIndex: 5001,
153
+ flip: true,
154
+ fixed: false,
155
+ }}
156
+ options={options}
157
+ size="small"
158
+ />
159
+ {mapping?.kind === 'new' && (
160
+ <NewFieldHelperText
161
+ state={state}
162
+ header={header}
163
+ fieldType={mapping.fieldType}
164
+ />
165
+ )}
166
+ </Box>
167
+ );
168
+ });
169
+
25
170
  function _ImportStepConfiguration({ state }: ImportStepConfigurationProps) {
26
171
  const { csvHeaders, fields, translate: t } = state;
27
172
 
@@ -35,8 +180,6 @@ function _ImportStepConfiguration({ state }: ImportStepConfigurationProps) {
35
180
  }),
36
181
  );
37
182
 
38
- const { selectedFieldIds } = state;
39
-
40
183
  const hasNoRows = state.hasNoMappedData;
41
184
 
42
185
  return (
@@ -109,30 +252,10 @@ function _ImportStepConfiguration({ state }: ImportStepConfigurationProps) {
109
252
  },
110
253
  {
111
254
  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"
255
+ <FieldMappingCell
256
+ state={state}
257
+ header={header}
258
+ fieldOptions={baseDropdownOptions}
136
259
  />
137
260
  ),
138
261
  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_ = "ImportStepUpload3089486412";
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":"ImportStepUpload3089486412__root","fileUpload":"ImportStepUpload3089486412__fileUpload"};
17
17
  export var keyframes = {};
18
18
  export var layers = {};
19
19
  export var containers = {};