@wix/patterns 1.438.0 → 1.440.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 (420) 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/CollectionCard/CollectionCard.js +17 -8
  14. package/dist/cjs/components/CollectionCard/CollectionCard.js.map +1 -1
  15. package/dist/cjs/components/CollectionPageNew/CollectionPage.st.css.js +2 -2
  16. package/dist/cjs/components/CollectionPageNew/CollectionPage.st.css.js.map +1 -1
  17. package/dist/cjs/components/CollectionSectionHeader/CollectionSectionHeader.st.css.js +3 -3
  18. package/dist/cjs/components/CollectionSectionHeader/CollectionSectionHeader.st.css.js.map +1 -1
  19. package/dist/cjs/components/CollectionTable/CollectionTable.st.css.js +2 -2
  20. package/dist/cjs/components/CollectionTable/CollectionTable.st.css.js.map +1 -1
  21. package/dist/cjs/components/CollectionTable/CollectionTableWSRTable.st.css.js +2 -2
  22. package/dist/cjs/components/CollectionTable/CollectionTableWSRTable.st.css.js.map +1 -1
  23. package/dist/cjs/components/CollectionToolbar/CollectionToolbar.st.css.js +5 -5
  24. package/dist/cjs/components/CollectionToolbar/CollectionToolbar.st.css.js.map +1 -1
  25. package/dist/cjs/components/CollectionToolbar/SearchOrCustomFilter.st.css.js +4 -4
  26. package/dist/cjs/components/CollectionToolbar/SearchOrCustomFilter.st.css.js.map +1 -1
  27. package/dist/cjs/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.js +2 -2
  28. package/dist/cjs/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.js.map +1 -1
  29. package/dist/cjs/components/CollectionViewsDropdown/ViewsDropdown.st.css.js +2 -2
  30. package/dist/cjs/components/CollectionViewsDropdown/ViewsDropdown.st.css.js.map +1 -1
  31. package/dist/cjs/components/DragHandle/DragHandle.st.css.js +2 -2
  32. package/dist/cjs/components/DragHandle/DragHandle.st.css.js.map +1 -1
  33. package/dist/cjs/components/EditableTable/EditableCell.js +22 -28
  34. package/dist/cjs/components/EditableTable/EditableCell.js.map +1 -1
  35. package/dist/cjs/components/EditableTable/EditableCell.st.css +41 -8
  36. package/dist/cjs/components/EditableTable/EditableCell.st.css.js +10 -4
  37. package/dist/cjs/components/EditableTable/EditableCell.st.css.js.map +1 -1
  38. package/dist/cjs/components/EditableTable/EditableCell.uni.driver.js +8 -2
  39. package/dist/cjs/components/EditableTable/EditableCell.uni.driver.js.map +1 -1
  40. package/dist/cjs/components/EditableTable/EditableTable.js +18 -10
  41. package/dist/cjs/components/EditableTable/EditableTable.js.map +1 -1
  42. package/dist/cjs/components/EditableTable/EditableTable.uni.driver.js +2 -0
  43. package/dist/cjs/components/EditableTable/EditableTable.uni.driver.js.map +1 -1
  44. package/dist/cjs/components/EditableTable/HeaderActionsPopover.st.css.js +2 -2
  45. package/dist/cjs/components/EditableTable/HeaderActionsPopover.st.css.js.map +1 -1
  46. package/dist/cjs/components/EditableTable/cellTypes/CellViewLayout.st.css.js +2 -2
  47. package/dist/cjs/components/EditableTable/cellTypes/CellViewLayout.st.css.js.map +1 -1
  48. package/dist/cjs/components/EditableTable/cellTypes/address/Edit.st.css.js +3 -3
  49. package/dist/cjs/components/EditableTable/cellTypes/address/Edit.st.css.js.map +1 -1
  50. package/dist/cjs/components/EditableTable/cellTypes/array/Edit.st.css.js +3 -3
  51. package/dist/cjs/components/EditableTable/cellTypes/array/Edit.st.css.js.map +1 -1
  52. package/dist/cjs/components/EditableTable/cellTypes/boolean/Edit.st.css.js +3 -3
  53. package/dist/cjs/components/EditableTable/cellTypes/boolean/Edit.st.css.js.map +1 -1
  54. package/dist/cjs/components/EditableTable/cellTypes/boolean/View.st.css.js +3 -3
  55. package/dist/cjs/components/EditableTable/cellTypes/boolean/View.st.css.js.map +1 -1
  56. package/dist/cjs/components/EditableTable/cellTypes/color/Edit.st.css.js +2 -2
  57. package/dist/cjs/components/EditableTable/cellTypes/color/Edit.st.css.js.map +1 -1
  58. package/dist/cjs/components/EditableTable/cellTypes/date/Edit.st.css.js +3 -3
  59. package/dist/cjs/components/EditableTable/cellTypes/date/Edit.st.css.js.map +1 -1
  60. package/dist/cjs/components/EditableTable/cellTypes/date/View.st.css.js +2 -2
  61. package/dist/cjs/components/EditableTable/cellTypes/date/View.st.css.js.map +1 -1
  62. package/dist/cjs/components/EditableTable/cellTypes/datetime/Edit.st.css.js +8 -8
  63. package/dist/cjs/components/EditableTable/cellTypes/datetime/Edit.st.css.js.map +1 -1
  64. package/dist/cjs/components/EditableTable/cellTypes/datetime/View.st.css.js +7 -7
  65. package/dist/cjs/components/EditableTable/cellTypes/datetime/View.st.css.js.map +1 -1
  66. package/dist/cjs/components/EditableTable/cellTypes/email/Edit.st.css.js +3 -3
  67. package/dist/cjs/components/EditableTable/cellTypes/email/Edit.st.css.js.map +1 -1
  68. package/dist/cjs/components/EditableTable/cellTypes/email/View.st.css.js +2 -2
  69. package/dist/cjs/components/EditableTable/cellTypes/email/View.st.css.js.map +1 -1
  70. package/dist/cjs/components/EditableTable/cellTypes/multiReference/View.js +1 -1
  71. package/dist/cjs/components/EditableTable/cellTypes/multiReference/View.js.map +1 -1
  72. package/dist/cjs/components/EditableTable/cellTypes/number/Edit.st.css.js +3 -3
  73. package/dist/cjs/components/EditableTable/cellTypes/number/Edit.st.css.js.map +1 -1
  74. package/dist/cjs/components/EditableTable/cellTypes/number/View.st.css.js +3 -3
  75. package/dist/cjs/components/EditableTable/cellTypes/number/View.st.css.js.map +1 -1
  76. package/dist/cjs/components/EditableTable/cellTypes/object/Edit.st.css.js +3 -3
  77. package/dist/cjs/components/EditableTable/cellTypes/object/Edit.st.css.js.map +1 -1
  78. package/dist/cjs/components/EditableTable/cellTypes/object/View.st.css.js +2 -2
  79. package/dist/cjs/components/EditableTable/cellTypes/object/View.st.css.js.map +1 -1
  80. package/dist/cjs/components/EditableTable/cellTypes/richContent/Edit.js.map +1 -1
  81. package/dist/cjs/components/EditableTable/cellTypes/richContent/index.js +6 -6
  82. package/dist/cjs/components/EditableTable/cellTypes/richContent/index.js.map +1 -1
  83. package/dist/cjs/components/EditableTable/cellTypes/select/Edit.st.css.js +3 -3
  84. package/dist/cjs/components/EditableTable/cellTypes/select/Edit.st.css.js.map +1 -1
  85. package/dist/cjs/components/EditableTable/cellTypes/text/Edit.st.css.js +4 -4
  86. package/dist/cjs/components/EditableTable/cellTypes/text/Edit.st.css.js.map +1 -1
  87. package/dist/cjs/components/EditableTable/cellTypes/text/View.st.css.js +2 -2
  88. package/dist/cjs/components/EditableTable/cellTypes/text/View.st.css.js.map +1 -1
  89. package/dist/cjs/components/EditableTable/cellTypes/time/Edit.st.css.js +4 -4
  90. package/dist/cjs/components/EditableTable/cellTypes/time/Edit.st.css.js.map +1 -1
  91. package/dist/cjs/components/EditableTable/cellTypes/url/Edit.st.css.js +3 -3
  92. package/dist/cjs/components/EditableTable/cellTypes/url/Edit.st.css.js.map +1 -1
  93. package/dist/cjs/components/EditableTable/cellTypes/url/View.st.css.js +5 -5
  94. package/dist/cjs/components/EditableTable/cellTypes/url/View.st.css.js.map +1 -1
  95. package/dist/cjs/components/EmptyState/EmptyStateBase.st.css.js +2 -2
  96. package/dist/cjs/components/EmptyState/EmptyStateBase.st.css.js.map +1 -1
  97. package/dist/cjs/components/EntityPage/EntityPagePlain.st.css.js +2 -2
  98. package/dist/cjs/components/EntityPage/EntityPagePlain.st.css.js.map +1 -1
  99. package/dist/cjs/components/Fade/Fade.st.css.js +2 -2
  100. package/dist/cjs/components/Fade/Fade.st.css.js.map +1 -1
  101. package/dist/cjs/components/Heading/Heading.st.css.js +2 -2
  102. package/dist/cjs/components/Heading/Heading.st.css.js.map +1 -1
  103. package/dist/cjs/components/ImportButton/ImportStepUpload.st.css.js +3 -3
  104. package/dist/cjs/components/ImportButton/ImportStepUpload.st.css.js.map +1 -1
  105. package/dist/cjs/components/InputOverflow/InputOverflow.st.css.js +2 -2
  106. package/dist/cjs/components/InputOverflow/InputOverflow.st.css.js.map +1 -1
  107. package/dist/cjs/components/LoadingRow/LoadingRow.st.css.js +3 -3
  108. package/dist/cjs/components/LoadingRow/LoadingRow.st.css.js.map +1 -1
  109. package/dist/cjs/components/MaxHeightText/MaxHeightText.st.css.js +2 -2
  110. package/dist/cjs/components/MaxHeightText/MaxHeightText.st.css.js.map +1 -1
  111. package/dist/cjs/components/MaxLines/MaxLines.st.css.js +2 -2
  112. package/dist/cjs/components/MaxLines/MaxLines.st.css.js.map +1 -1
  113. package/dist/cjs/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.js +5 -5
  114. package/dist/cjs/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.js.map +1 -1
  115. package/dist/cjs/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.js +2 -2
  116. package/dist/cjs/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.js.map +1 -1
  117. package/dist/cjs/components/NestedTable/NestedTableRow.st.css.js +5 -5
  118. package/dist/cjs/components/NestedTable/NestedTableRow.st.css.js.map +1 -1
  119. package/dist/cjs/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.js +2 -2
  120. package/dist/cjs/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.js.map +1 -1
  121. package/dist/cjs/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.js +2 -2
  122. package/dist/cjs/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.js.map +1 -1
  123. package/dist/cjs/components/PickerContent/PickerContent.st.css.js +2 -2
  124. package/dist/cjs/components/PickerContent/PickerContent.st.css.js.map +1 -1
  125. package/dist/cjs/components/PickerContent/PickerContentAdditionalStep.st.css.js +4 -4
  126. package/dist/cjs/components/PickerContent/PickerContentAdditionalStep.st.css.js.map +1 -1
  127. package/dist/cjs/components/PickerTableListItem/PickerTableListItem.st.css.js +2 -2
  128. package/dist/cjs/components/PickerTableListItem/PickerTableListItem.st.css.js.map +1 -1
  129. package/dist/cjs/components/SchemaSource/schemaFieldManagement.js +2 -1
  130. package/dist/cjs/components/SchemaSource/schemaFieldManagement.js.map +1 -1
  131. package/dist/cjs/components/ScrollableContent/ScrollableContent.st.css.js +2 -2
  132. package/dist/cjs/components/ScrollableContent/ScrollableContent.st.css.js.map +1 -1
  133. package/dist/cjs/components/SetupWidget/SetupWidget.st.css.js +9 -9
  134. package/dist/cjs/components/SetupWidget/SetupWidget.st.css.js.map +1 -1
  135. package/dist/cjs/components/SkeletonCard/SkeletonCard.st.css.js +3 -3
  136. package/dist/cjs/components/SkeletonCard/SkeletonCard.st.css.js.map +1 -1
  137. package/dist/cjs/components/SlidingModal/SlidingModal.st.css.js +2 -2
  138. package/dist/cjs/components/SlidingModal/SlidingModal.st.css.js.map +1 -1
  139. package/dist/cjs/components/Table/AddFieldColumnHeader.st.css.js +4 -4
  140. package/dist/cjs/components/Table/AddFieldColumnHeader.st.css.js.map +1 -1
  141. package/dist/cjs/components/TabsFilter/TabsFilter.st.css.js +3 -3
  142. package/dist/cjs/components/TabsFilter/TabsFilter.st.css.js.map +1 -1
  143. package/dist/cjs/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.js +2 -2
  144. package/dist/cjs/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.js.map +1 -1
  145. package/dist/cjs/components/ToolbarItem/ToolbarItem.st.css.js +2 -2
  146. package/dist/cjs/components/ToolbarItem/ToolbarItem.st.css.js.map +1 -1
  147. package/dist/cjs/components/ToolbarItemBox/ToolbarItemBox.st.css.js +2 -2
  148. package/dist/cjs/components/ToolbarItemBox/ToolbarItemBox.st.css.js.map +1 -1
  149. package/dist/cjs/components/common.st.css.js +4 -4
  150. package/dist/cjs/components/common.st.css.js.map +1 -1
  151. package/dist/cjs/state/CollectionPage/CollectionPageHeader.st.css.js +2 -2
  152. package/dist/cjs/state/CollectionPage/CollectionPageHeader.st.css.js.map +1 -1
  153. package/dist/cjs/state/EditableTable/CellValueState.js +18 -4
  154. package/dist/cjs/state/EditableTable/CellValueState.js.map +1 -1
  155. package/dist/cjs/state/EditableTable/EditableTableState.js +5 -1
  156. package/dist/cjs/state/EditableTable/EditableTableState.js.map +1 -1
  157. package/dist/cjs/state/ExtensionMenuItemsState.js +7 -3
  158. package/dist/cjs/state/ExtensionMenuItemsState.js.map +1 -1
  159. package/dist/cjs/state/FormPage/FormPageHeader.st.css.js +2 -2
  160. package/dist/cjs/state/FormPage/FormPageHeader.st.css.js.map +1 -1
  161. package/dist/cjs/state/TagsCollectionState.js +5 -2
  162. package/dist/cjs/state/TagsCollectionState.js.map +1 -1
  163. package/dist/cjs/styles.global.css +2 -2
  164. package/dist/cjs/version.js +1 -1
  165. package/dist/cjs/version.js.map +1 -1
  166. package/dist/docs/CustomFieldType.md +485 -0
  167. package/dist/docs/index.json +28 -24
  168. package/dist/esm/components/CardContainer/CardContainer.st.css.js +2 -2
  169. package/dist/esm/components/CmsFieldManagement/CmsFieldForm.st.css.js +2 -2
  170. package/dist/esm/components/CmsFieldManagement/CmsFieldModal.st.css.js +2 -2
  171. package/dist/esm/components/CmsFieldManagement/Sections/ValidationAndDefaultsSection.st.css.js +2 -2
  172. package/dist/esm/components/CmsFieldManagement/formFields/CharactersLimitInput.st.css.js +2 -2
  173. package/dist/esm/components/CmsFieldManagement/formFields/CharactersLimitInput.st.css.js.map +1 -1
  174. package/dist/esm/components/Collapse/Collapse.st.css.js +2 -2
  175. package/dist/esm/components/CollectionCard/CollectionCard.js +3 -2
  176. package/dist/esm/components/CollectionCard/CollectionCard.js.map +1 -1
  177. package/dist/esm/components/CollectionPageNew/CollectionPage.st.css.js +2 -2
  178. package/dist/esm/components/CollectionPageNew/CollectionPage.st.css.js.map +1 -1
  179. package/dist/esm/components/CollectionSectionHeader/CollectionSectionHeader.st.css.js +2 -2
  180. package/dist/esm/components/CollectionTable/CollectionTable.st.css.js +2 -2
  181. package/dist/esm/components/CollectionTable/CollectionTable.st.css.js.map +1 -1
  182. package/dist/esm/components/CollectionTable/CollectionTableWSRTable.st.css.js +2 -2
  183. package/dist/esm/components/CollectionToolbar/CollectionToolbar.st.css.js +2 -2
  184. package/dist/esm/components/CollectionToolbar/CollectionToolbar.st.css.js.map +1 -1
  185. package/dist/esm/components/CollectionToolbar/SearchOrCustomFilter.st.css.js +2 -2
  186. package/dist/esm/components/CollectionToolbar/SearchOrCustomFilter.st.css.js.map +1 -1
  187. package/dist/esm/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.js +2 -2
  188. package/dist/esm/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.js.map +1 -1
  189. package/dist/esm/components/CollectionViewsDropdown/ViewsDropdown.st.css.js +2 -2
  190. package/dist/esm/components/CollectionViewsDropdown/ViewsDropdown.st.css.js.map +1 -1
  191. package/dist/esm/components/DragHandle/DragHandle.st.css.js +2 -2
  192. package/dist/esm/components/EditableTable/EditableCell.js +22 -24
  193. package/dist/esm/components/EditableTable/EditableCell.js.map +1 -1
  194. package/dist/esm/components/EditableTable/EditableCell.st.css +41 -8
  195. package/dist/esm/components/EditableTable/EditableCell.st.css.js +3 -3
  196. package/dist/esm/components/EditableTable/EditableCell.st.css.js.map +1 -1
  197. package/dist/esm/components/EditableTable/EditableCell.uni.driver.js +8 -2
  198. package/dist/esm/components/EditableTable/EditableCell.uni.driver.js.map +1 -1
  199. package/dist/esm/components/EditableTable/EditableTable.js +6 -1
  200. package/dist/esm/components/EditableTable/EditableTable.js.map +1 -1
  201. package/dist/esm/components/EditableTable/EditableTable.uni.driver.js +4 -0
  202. package/dist/esm/components/EditableTable/EditableTable.uni.driver.js.map +1 -1
  203. package/dist/esm/components/EditableTable/HeaderActionsPopover.st.css.js +2 -2
  204. package/dist/esm/components/EditableTable/cellTypes/CellViewLayout.st.css.js +2 -2
  205. package/dist/esm/components/EditableTable/cellTypes/address/Edit.st.css.js +2 -2
  206. package/dist/esm/components/EditableTable/cellTypes/address/Edit.st.css.js.map +1 -1
  207. package/dist/esm/components/EditableTable/cellTypes/array/Edit.st.css.js +2 -2
  208. package/dist/esm/components/EditableTable/cellTypes/boolean/Edit.st.css.js +2 -2
  209. package/dist/esm/components/EditableTable/cellTypes/boolean/View.st.css.js +2 -2
  210. package/dist/esm/components/EditableTable/cellTypes/color/Edit.st.css.js +2 -2
  211. package/dist/esm/components/EditableTable/cellTypes/color/Edit.st.css.js.map +1 -1
  212. package/dist/esm/components/EditableTable/cellTypes/date/Edit.st.css.js +2 -2
  213. package/dist/esm/components/EditableTable/cellTypes/date/Edit.st.css.js.map +1 -1
  214. package/dist/esm/components/EditableTable/cellTypes/date/View.st.css.js +2 -2
  215. package/dist/esm/components/EditableTable/cellTypes/datetime/Edit.st.css.js +2 -2
  216. package/dist/esm/components/EditableTable/cellTypes/datetime/Edit.st.css.js.map +1 -1
  217. package/dist/esm/components/EditableTable/cellTypes/datetime/View.st.css.js +2 -2
  218. package/dist/esm/components/EditableTable/cellTypes/email/Edit.st.css.js +2 -2
  219. package/dist/esm/components/EditableTable/cellTypes/email/Edit.st.css.js.map +1 -1
  220. package/dist/esm/components/EditableTable/cellTypes/email/View.st.css.js +2 -2
  221. package/dist/esm/components/EditableTable/cellTypes/multiReference/View.js +1 -1
  222. package/dist/esm/components/EditableTable/cellTypes/multiReference/View.js.map +1 -1
  223. package/dist/esm/components/EditableTable/cellTypes/number/Edit.st.css.js +2 -2
  224. package/dist/esm/components/EditableTable/cellTypes/number/View.st.css.js +2 -2
  225. package/dist/esm/components/EditableTable/cellTypes/object/Edit.st.css.js +2 -2
  226. package/dist/esm/components/EditableTable/cellTypes/object/View.st.css.js +2 -2
  227. package/dist/esm/components/EditableTable/cellTypes/richContent/index.js +1 -1
  228. package/dist/esm/components/EditableTable/cellTypes/richContent/index.js.map +1 -1
  229. package/dist/esm/components/EditableTable/cellTypes/select/Edit.st.css.js +2 -2
  230. package/dist/esm/components/EditableTable/cellTypes/select/Edit.st.css.js.map +1 -1
  231. package/dist/esm/components/EditableTable/cellTypes/text/Edit.st.css.js +2 -2
  232. package/dist/esm/components/EditableTable/cellTypes/text/View.st.css.js +2 -2
  233. package/dist/esm/components/EditableTable/cellTypes/time/Edit.st.css.js +2 -2
  234. package/dist/esm/components/EditableTable/cellTypes/time/Edit.st.css.js.map +1 -1
  235. package/dist/esm/components/EditableTable/cellTypes/url/Edit.st.css.js +2 -2
  236. package/dist/esm/components/EditableTable/cellTypes/url/View.st.css.js +2 -2
  237. package/dist/esm/components/EmptyState/EmptyStateBase.st.css.js +2 -2
  238. package/dist/esm/components/EntityPage/EntityPagePlain.st.css.js +2 -2
  239. package/dist/esm/components/EntityPage/EntityPagePlain.st.css.js.map +1 -1
  240. package/dist/esm/components/Fade/Fade.st.css.js +2 -2
  241. package/dist/esm/components/Heading/Heading.st.css.js +2 -2
  242. package/dist/esm/components/ImportButton/ImportStepUpload.st.css.js +2 -2
  243. package/dist/esm/components/ImportButton/ImportStepUpload.st.css.js.map +1 -1
  244. package/dist/esm/components/InputOverflow/InputOverflow.st.css.js +2 -2
  245. package/dist/esm/components/InputOverflow/InputOverflow.st.css.js.map +1 -1
  246. package/dist/esm/components/LoadingRow/LoadingRow.st.css.js +3 -3
  247. package/dist/esm/components/MaxHeightText/MaxHeightText.st.css.js +2 -2
  248. package/dist/esm/components/MaxLines/MaxLines.st.css.js +2 -2
  249. package/dist/esm/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.js +2 -2
  250. package/dist/esm/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.js +2 -2
  251. package/dist/esm/components/NestedTable/NestedTableRow.st.css.js +2 -2
  252. package/dist/esm/components/NestedTable/NestedTableRow.st.css.js.map +1 -1
  253. package/dist/esm/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.js +2 -2
  254. package/dist/esm/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.js +2 -2
  255. package/dist/esm/components/PickerContent/PickerContent.st.css.js +2 -2
  256. package/dist/esm/components/PickerContent/PickerContent.st.css.js.map +1 -1
  257. package/dist/esm/components/PickerContent/PickerContentAdditionalStep.st.css.js +2 -2
  258. package/dist/esm/components/PickerTableListItem/PickerTableListItem.st.css.js +2 -2
  259. package/dist/esm/components/SchemaSource/schemaFieldManagement.js +1 -1
  260. package/dist/esm/components/SchemaSource/schemaFieldManagement.js.map +1 -1
  261. package/dist/esm/components/ScrollableContent/ScrollableContent.st.css.js +2 -2
  262. package/dist/esm/components/ScrollableContent/ScrollableContent.st.css.js.map +1 -1
  263. package/dist/esm/components/SetupWidget/SetupWidget.st.css.js +2 -2
  264. package/dist/esm/components/SkeletonCard/SkeletonCard.st.css.js +2 -2
  265. package/dist/esm/components/SkeletonCard/SkeletonCard.st.css.js.map +1 -1
  266. package/dist/esm/components/SlidingModal/SlidingModal.st.css.js +2 -2
  267. package/dist/esm/components/Table/AddFieldColumnHeader.st.css.js +2 -2
  268. package/dist/esm/components/TabsFilter/TabsFilter.st.css.js +2 -2
  269. package/dist/esm/components/TabsFilter/TabsFilter.st.css.js.map +1 -1
  270. package/dist/esm/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.js +2 -2
  271. package/dist/esm/components/ToolbarItem/ToolbarItem.st.css.js +2 -2
  272. package/dist/esm/components/ToolbarItem/ToolbarItem.st.css.js.map +1 -1
  273. package/dist/esm/components/ToolbarItemBox/ToolbarItemBox.st.css.js +2 -2
  274. package/dist/esm/components/common.st.css.js +2 -2
  275. package/dist/esm/state/CollectionPage/CollectionPageHeader.st.css.js +2 -2
  276. package/dist/esm/state/CollectionPage/CollectionPageHeader.st.css.js.map +1 -1
  277. package/dist/esm/state/EditableTable/CellValueState.js +14 -0
  278. package/dist/esm/state/EditableTable/CellValueState.js.map +1 -1
  279. package/dist/esm/state/EditableTable/EditableTableState.js +7 -1
  280. package/dist/esm/state/EditableTable/EditableTableState.js.map +1 -1
  281. package/dist/esm/state/ExtensionMenuItemsState.js +6 -2
  282. package/dist/esm/state/ExtensionMenuItemsState.js.map +1 -1
  283. package/dist/esm/state/FormPage/FormPageHeader.st.css.js +2 -2
  284. package/dist/esm/state/TagsCollectionState.js +2 -2
  285. package/dist/esm/state/TagsCollectionState.js.map +1 -1
  286. package/dist/esm/styles.global.css +2 -2
  287. package/dist/esm/version.js +1 -1
  288. package/dist/types/components/CmsFieldManagement/formFields/CharactersLimitInput.st.css.d.ts.map +1 -1
  289. package/dist/types/components/CollectionCard/CollectionCard.d.ts.map +1 -1
  290. package/dist/types/components/CollectionPageNew/CollectionPage.st.css.d.ts.map +1 -1
  291. package/dist/types/components/CollectionTable/CollectionTable.st.css.d.ts.map +1 -1
  292. package/dist/types/components/CollectionToolbar/CollectionToolbar.st.css.d.ts.map +1 -1
  293. package/dist/types/components/CollectionToolbar/SearchOrCustomFilter.st.css.d.ts.map +1 -1
  294. package/dist/types/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.d.ts.map +1 -1
  295. package/dist/types/components/CollectionViewsDropdown/ViewsDropdown.st.css.d.ts.map +1 -1
  296. package/dist/types/components/EditableTable/EditableCell.d.ts.map +1 -1
  297. package/dist/types/components/EditableTable/EditableCell.st.css.d.ts +8 -2
  298. package/dist/types/components/EditableTable/EditableCell.st.css.d.ts.map +1 -1
  299. package/dist/types/components/EditableTable/EditableCell.uni.driver.d.ts +7 -6
  300. package/dist/types/components/EditableTable/EditableCell.uni.driver.d.ts.map +1 -1
  301. package/dist/types/components/EditableTable/EditableTable.d.ts +1 -1
  302. package/dist/types/components/EditableTable/EditableTable.d.ts.map +1 -1
  303. package/dist/types/components/EditableTable/EditableTable.uni.driver.d.ts +52 -42
  304. package/dist/types/components/EditableTable/EditableTable.uni.driver.d.ts.map +1 -1
  305. package/dist/types/components/EditableTable/cellTypes/address/Edit.st.css.d.ts.map +1 -1
  306. package/dist/types/components/EditableTable/cellTypes/color/Edit.st.css.d.ts.map +1 -1
  307. package/dist/types/components/EditableTable/cellTypes/date/Edit.st.css.d.ts.map +1 -1
  308. package/dist/types/components/EditableTable/cellTypes/datetime/Edit.st.css.d.ts.map +1 -1
  309. package/dist/types/components/EditableTable/cellTypes/email/Edit.st.css.d.ts.map +1 -1
  310. package/dist/types/components/EditableTable/cellTypes/richContent/index.d.ts.map +1 -1
  311. package/dist/types/components/EditableTable/cellTypes/select/Edit.st.css.d.ts.map +1 -1
  312. package/dist/types/components/EditableTable/cellTypes/time/Edit.st.css.d.ts.map +1 -1
  313. package/dist/types/components/EntityPage/EntityPagePlain.st.css.d.ts.map +1 -1
  314. package/dist/types/components/ImportButton/ImportStepUpload.st.css.d.ts.map +1 -1
  315. package/dist/types/components/InputOverflow/InputOverflow.st.css.d.ts.map +1 -1
  316. package/dist/types/components/NestedTable/NestedTableRow.st.css.d.ts.map +1 -1
  317. package/dist/types/components/PickerContent/PickerContent.st.css.d.ts.map +1 -1
  318. package/dist/types/components/ScrollableContent/ScrollableContent.st.css.d.ts.map +1 -1
  319. package/dist/types/components/SkeletonCard/SkeletonCard.st.css.d.ts.map +1 -1
  320. package/dist/types/components/TabsFilter/TabsFilter.st.css.d.ts.map +1 -1
  321. package/dist/types/components/ToolbarItem/ToolbarItem.st.css.d.ts.map +1 -1
  322. package/dist/types/state/CollectionPage/CollectionPageHeader.st.css.d.ts.map +1 -1
  323. package/dist/types/state/EditableTable/CellValueState.d.ts +4 -0
  324. package/dist/types/state/EditableTable/CellValueState.d.ts.map +1 -1
  325. package/dist/types/state/EditableTable/EditableTableState.d.ts.map +1 -1
  326. package/dist/types/state/ExtensionMenuItemsState.d.ts.map +1 -1
  327. package/dist/types/state/TagsCollectionState.d.ts +5 -5
  328. package/dist/types/state/TagsCollectionState.d.ts.map +1 -1
  329. package/dist/types/testkit/jsdom.d.ts +3 -2
  330. package/dist/types/testkit/jsdom.d.ts.map +1 -1
  331. package/dist/types/testkit/playwright.d.ts +3 -2
  332. package/dist/types/testkit/playwright.d.ts.map +1 -1
  333. package/dist/types/testkit/puppeteer.d.ts +3 -2
  334. package/dist/types/testkit/puppeteer.d.ts.map +1 -1
  335. package/dist/types/version.d.ts +1 -1
  336. package/package.json +7 -7
  337. package/src/components/CardContainer/CardContainer.st.css.ts +2 -2
  338. package/src/components/CmsFieldManagement/CmsFieldForm.st.css.ts +2 -2
  339. package/src/components/CmsFieldManagement/CmsFieldModal.st.css.ts +2 -2
  340. package/src/components/CmsFieldManagement/Sections/ValidationAndDefaultsSection.st.css.ts +2 -2
  341. package/src/components/CmsFieldManagement/formFields/CharactersLimitInput.st.css.ts +2 -2
  342. package/src/components/Collapse/Collapse.st.css.ts +2 -2
  343. package/src/components/CollectionCard/CollectionCard.tsx +6 -2
  344. package/src/components/CollectionPageNew/CollectionPage.st.css.ts +2 -2
  345. package/src/components/CollectionSectionHeader/CollectionSectionHeader.st.css.ts +2 -2
  346. package/src/components/CollectionTable/CollectionTable.st.css.ts +2 -2
  347. package/src/components/CollectionTable/CollectionTableWSRTable.st.css.ts +2 -2
  348. package/src/components/CollectionToolbar/CollectionToolbar.st.css.ts +2 -2
  349. package/src/components/CollectionToolbar/SearchOrCustomFilter.st.css.ts +2 -2
  350. package/src/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.ts +2 -2
  351. package/src/components/CollectionViewsDropdown/ViewsDropdown.st.css.ts +2 -2
  352. package/src/components/DragHandle/DragHandle.st.css.ts +2 -2
  353. package/src/components/EditableTable/EditableCell.st.css +41 -8
  354. package/src/components/EditableTable/EditableCell.st.css.ts +3 -3
  355. package/src/components/EditableTable/EditableCell.tsx +57 -51
  356. package/src/components/EditableTable/EditableCell.uni.driver.ts +10 -3
  357. package/src/components/EditableTable/EditableTable.tsx +9 -0
  358. package/src/components/EditableTable/EditableTable.uni.driver.ts +8 -0
  359. package/src/components/EditableTable/HeaderActionsPopover.st.css.ts +2 -2
  360. package/src/components/EditableTable/cellTypes/CellViewLayout.st.css.ts +2 -2
  361. package/src/components/EditableTable/cellTypes/address/Edit.st.css.ts +2 -2
  362. package/src/components/EditableTable/cellTypes/array/Edit.st.css.ts +2 -2
  363. package/src/components/EditableTable/cellTypes/boolean/Edit.st.css.ts +2 -2
  364. package/src/components/EditableTable/cellTypes/boolean/View.st.css.ts +2 -2
  365. package/src/components/EditableTable/cellTypes/color/Edit.st.css.ts +2 -2
  366. package/src/components/EditableTable/cellTypes/date/Edit.st.css.ts +2 -2
  367. package/src/components/EditableTable/cellTypes/date/View.st.css.ts +2 -2
  368. package/src/components/EditableTable/cellTypes/datetime/Edit.st.css.ts +2 -2
  369. package/src/components/EditableTable/cellTypes/datetime/View.st.css.ts +2 -2
  370. package/src/components/EditableTable/cellTypes/email/Edit.st.css.ts +2 -2
  371. package/src/components/EditableTable/cellTypes/email/View.st.css.ts +2 -2
  372. package/src/components/EditableTable/cellTypes/multiReference/View.tsx +1 -1
  373. package/src/components/EditableTable/cellTypes/number/Edit.st.css.ts +2 -2
  374. package/src/components/EditableTable/cellTypes/number/View.st.css.ts +2 -2
  375. package/src/components/EditableTable/cellTypes/object/Edit.st.css.ts +2 -2
  376. package/src/components/EditableTable/cellTypes/object/View.st.css.ts +2 -2
  377. package/src/components/EditableTable/cellTypes/richContent/Edit.tsx +1 -1
  378. package/src/components/EditableTable/cellTypes/richContent/index.tsx +5 -2
  379. package/src/components/EditableTable/cellTypes/select/Edit.st.css.ts +2 -2
  380. package/src/components/EditableTable/cellTypes/text/Edit.st.css.ts +2 -2
  381. package/src/components/EditableTable/cellTypes/text/View.st.css.ts +2 -2
  382. package/src/components/EditableTable/cellTypes/time/Edit.st.css.ts +2 -2
  383. package/src/components/EditableTable/cellTypes/url/Edit.st.css.ts +2 -2
  384. package/src/components/EditableTable/cellTypes/url/View.st.css.ts +2 -2
  385. package/src/components/EmptyState/EmptyStateBase.st.css.ts +2 -2
  386. package/src/components/EntityPage/EntityPagePlain.st.css.ts +2 -2
  387. package/src/components/Fade/Fade.st.css.ts +2 -2
  388. package/src/components/Heading/Heading.st.css.ts +2 -2
  389. package/src/components/ImportButton/ImportStepUpload.st.css.ts +2 -2
  390. package/src/components/InputOverflow/InputOverflow.st.css.ts +2 -2
  391. package/src/components/LoadingRow/LoadingRow.st.css.ts +3 -3
  392. package/src/components/MaxHeightText/MaxHeightText.st.css.ts +2 -2
  393. package/src/components/MaxLines/MaxLines.st.css.ts +2 -2
  394. package/src/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.ts +2 -2
  395. package/src/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.ts +2 -2
  396. package/src/components/NestedTable/NestedTableRow.st.css.ts +2 -2
  397. package/src/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.ts +2 -2
  398. package/src/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.ts +2 -2
  399. package/src/components/PickerContent/PickerContent.st.css.ts +2 -2
  400. package/src/components/PickerContent/PickerContentAdditionalStep.st.css.ts +2 -2
  401. package/src/components/PickerTableListItem/PickerTableListItem.st.css.ts +2 -2
  402. package/src/components/SchemaSource/schemaFieldManagement.ts +1 -1
  403. package/src/components/ScrollableContent/ScrollableContent.st.css.ts +2 -2
  404. package/src/components/SetupWidget/SetupWidget.st.css.ts +2 -2
  405. package/src/components/SkeletonCard/SkeletonCard.st.css.ts +2 -2
  406. package/src/components/SlidingModal/SlidingModal.st.css.ts +2 -2
  407. package/src/components/Table/AddFieldColumnHeader.st.css.ts +2 -2
  408. package/src/components/TabsFilter/TabsFilter.st.css.ts +2 -2
  409. package/src/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.ts +2 -2
  410. package/src/components/ToolbarItem/ToolbarItem.st.css.ts +2 -2
  411. package/src/components/ToolbarItemBox/ToolbarItemBox.st.css.ts +2 -2
  412. package/src/components/common.st.css.ts +2 -2
  413. package/src/state/CollectionPage/CollectionPageHeader.st.css.ts +2 -2
  414. package/src/state/EditableTable/CellValueState.ts +20 -0
  415. package/src/state/EditableTable/EditableTableState.ts +13 -1
  416. package/src/state/ExtensionMenuItemsState.ts +9 -2
  417. package/src/state/FormPage/FormPageHeader.st.css.ts +2 -2
  418. package/src/state/TagsCollectionState.ts +6 -2
  419. package/src/styles.global.css +2 -2
  420. package/src/version.ts +1 -1
@@ -0,0 +1,485 @@
1
+ # CustomFieldType
2
+
3
+ **Category:** Features/Enrich/Custom Field Types
4
+
5
+ ## Design
6
+
7
+ ### Description
8
+
9
+ A **custom field type** is a consumer-defined field that plugs into every schema-driven surface. Define it once with `defineFieldType()` and register it on the schema source via `fieldTypes` — the page wires nothing per surface. Each surface resolves its own slot from the definition:
10
+
11
+ - `table` — the read-only table cell and column layout.
12
+ - `editableTable` — the editable cell: view, inline editor, and clipboard behavior.
13
+ - `filter` — the filter registered on the collection query and its toolbar element. This slot is required: provide a config, or opt out explicitly with `{ filterable: false }`.
14
+ - `value` — value semantics (`defaultValue`, `isEmpty`, `validate`) used by every surface.
15
+ - `capabilities` — e.g. `sortable`.
16
+ - `actions` — extra items on the field's "more actions" menus.
17
+ - `display` — the type's label and icons in field menus.
18
+
19
+ A field uses the type via `type: 'CUSTOM'` and `customType` pointing at the definition's key. `table` and `editableTable` are independent — neither falls back to the other, so implement only the surfaces you need.
20
+
21
+ See the **API** tab for the full configuration of each slot.
22
+
23
+
24
+ ```tsx
25
+ import { defineFieldType } from '@wix/patterns';
26
+ ```
27
+
28
+ ### Table cell and filter
29
+
30
+ What you get: a read-only table where the custom Progress field renders as a progress bar (the `table` slot) and a Progress filter in the toolbar (the `filter` slot — check a bucket and the backend applies the raw filter value). Manage fields can add functionality and visibility on top: the field's actions and show/hide controls appear in the manage-fields and customize-columns panels.
31
+
32
+ ```tsx
33
+ import React from 'react';
34
+ import { CollectionPage } from '@wix/patterns/page';
35
+ import {
36
+ Table,
37
+ defineFieldType,
38
+ idNameArrayFilter,
39
+ MultiInlineCheckboxFilter,
40
+ } from '@wix/patterns';
41
+ import type { Field, FilterProps } from '@wix/patterns';
42
+ import { useSchemaSource, useTableCollection } from '@wix/patterns/schema';
43
+ import type {
44
+ CollectionBackend,
45
+ LoadedSchema,
46
+ Schema,
47
+ } from '@wix/patterns/schema';
48
+
49
+ type Task = { id: string; name: string; progress?: number };
50
+ type Bucket = { id: string; name: string };
51
+
52
+ function CustomFieldTypeTable() {
53
+ const tasks: Task[] = [
54
+ { id: '1', name: 'Design homepage', progress: 80 },
55
+ { id: '2', name: 'Set up payments', progress: 100 },
56
+ { id: '3', name: 'Write product descriptions', progress: 25 },
57
+ { id: '4', name: 'Configure shipping', progress: 55 },
58
+ { id: '5', name: 'Launch campaign', progress: 0 },
59
+ ];
60
+
61
+ const ProgressCell = ({ value }: { value: number }) => (
62
+ <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
63
+ <div
64
+ style={{
65
+ width: '80px',
66
+ height: '6px',
67
+ borderRadius: '3px',
68
+ background: '#DFE5EB',
69
+ overflow: 'hidden',
70
+ }}
71
+ >
72
+ <div
73
+ style={{
74
+ width: `${value ?? 0}%`,
75
+ height: '100%',
76
+ background: '#3899EC',
77
+ }}
78
+ />
79
+ </div>
80
+ <span>{value ?? 0}%</span>
81
+ </div>
82
+ );
83
+
84
+ // The option id encodes the range; the backend parses it back.
85
+ const BUCKETS: Bucket[] = [
86
+ { id: '0-33', name: 'Low (0-33%)' },
87
+ { id: '34-66', name: 'Medium (34-66%)' },
88
+ { id: '67-100', name: 'High (67-100%)' },
89
+ ];
90
+
91
+ const progressFieldType = defineFieldType<number>({
92
+ type: 'docs.progress',
93
+ display: {
94
+ label: 'Progress',
95
+ icons: { Small: () => <span>%</span>, Medium: () => <span>%</span> },
96
+ },
97
+ filter: {
98
+ createFilter: () => idNameArrayFilter<Bucket>(),
99
+ Component: (props: FilterProps<Bucket[]>) => (
100
+ <MultiInlineCheckboxFilter {...props} data={BUCKETS} />
101
+ ),
102
+ },
103
+ value: { defaultValue: 0, isEmpty: (v) => v == null },
104
+ capabilities: { sortable: true },
105
+ table: {
106
+ CellComponent: ({ value }) => <ProgressCell value={value} />,
107
+ width: '160px',
108
+ },
109
+ actions: {
110
+ items: [
111
+ {
112
+ key: 'about-progress',
113
+ label: 'About this field type',
114
+ onClick: (field) =>
115
+ window.alert(`"${field.displayName}" is a custom field type.`),
116
+ },
117
+ ],
118
+ },
119
+ });
120
+
121
+ // The field is typed CUSTOM and points at the definition through `customType`.
122
+ const progressField: Field = {
123
+ id: 'progress',
124
+ displayName: 'Progress',
125
+ type: 'CUSTOM',
126
+ customType: 'docs.progress',
127
+ };
128
+
129
+ const schema: Schema = {
130
+ id: 'docs-custom-field-type-table',
131
+ fields: { progress: progressField },
132
+ displayField: 'name',
133
+ idField: 'id',
134
+ };
135
+
136
+ // Like filtering, sorting is delegated to the backend: `find` receives
137
+ // `sort` ({ fieldName, order }[]) and owns applying it.
138
+ const backend: CollectionBackend<Task> = {
139
+ find: async ({ search = '', filters = {}, sort = [] }) => {
140
+ const buckets = (filters as { progress?: Bucket[] }).progress;
141
+ const found = tasks.filter(
142
+ (task) =>
143
+ task.name.toLowerCase().includes(search.toLowerCase()) &&
144
+ (!buckets?.length ||
145
+ buckets.some(({ id }) => {
146
+ // parseInt, not Number — the example scope shadows `Number`.
147
+ const [min, max] = id
148
+ .split('-')
149
+ .map((part) => parseInt(part, 10));
150
+ const progress = task.progress ?? 0;
151
+ return progress >= min && progress <= max;
152
+ })),
153
+ );
154
+ if (sort.length) {
155
+ const [{ fieldName, order }] = sort;
156
+ found.sort((a, b) => {
157
+ const left = a[fieldName as keyof Task] ?? 0;
158
+ const right = b[fieldName as keyof Task] ?? 0;
159
+ const diff = left < right ? -1 : left > right ? 1 : 0;
160
+ return order === 'asc' ? diff : -diff;
161
+ });
162
+ }
163
+ return { items: found, total: found.length };
164
+ },
165
+ };
166
+
167
+ const loadSchema = async (): Promise<LoadedSchema<Task>> => ({
168
+ schema,
169
+ backend,
170
+ });
171
+
172
+ const source = useSchemaSource<Task>({
173
+ collectionId: 'docs-custom-field-type-table',
174
+ loadSchema,
175
+ fieldTypes: [progressFieldType],
176
+ });
177
+ const state = useTableCollection<Task>(source);
178
+
179
+ return (
180
+ <CollectionPage height="400px">
181
+ <CollectionPage.Header title={{ text: 'Tasks' }} />
182
+ <CollectionPage.Content>
183
+ <Table
184
+ state={state}
185
+ columns={[
186
+ {
187
+ id: 'name',
188
+ title: 'Name',
189
+ render: (task) => task.name,
190
+ width: '220px',
191
+ },
192
+ ]}
193
+ />
194
+ </CollectionPage.Content>
195
+ </CollectionPage>
196
+ );
197
+ }
198
+ ```
199
+
200
+ ### Editable cell
201
+
202
+ What you get: the same field type in an editable spreadsheet — the `editableTable` slot renders progress bars in view mode and a number input in edit mode. Try it: double-click a Progress cell (or focus it and type a digit) to edit — Enter or Tab commits, Escape cancels, values clamp to 0–100 on commit (`normalizeOnCommit`), and copy/paste round-trips through `serialize`/`deserialize`. The Progress column's header menu has "This is action only for progress bar" (the `actions` slot) — it appears only on this field type. Filtering is opted out with `{ filterable: false }`, so the toolbar shows no Progress filter.
203
+
204
+ ```tsx
205
+ import React from 'react';
206
+ import { CollectionPage } from '@wix/patterns/page';
207
+ import { EditableTable, defineFieldType } from '@wix/patterns';
208
+ import type { CellEditProps, EditableColumn, Field } from '@wix/patterns';
209
+ import {
210
+ useSchemaSource,
211
+ useEditableTableCollection,
212
+ } from '@wix/patterns/schema';
213
+ import type {
214
+ CollectionBackend,
215
+ LoadedSchema,
216
+ Schema,
217
+ } from '@wix/patterns/schema';
218
+
219
+ type Task = { id: string; name: string; progress?: number };
220
+
221
+ function CustomFieldTypeSpreadsheet() {
222
+ // Plain object store (the live-example scope shadows the global `Map`).
223
+ const [store] = React.useState<{ tasks: Task[]; nextId: number }>(() => ({
224
+ nextId: 6,
225
+ tasks: [
226
+ { id: '1', name: 'Design homepage', progress: 80 },
227
+ { id: '2', name: 'Set up payments', progress: 100 },
228
+ { id: '3', name: 'Write product descriptions', progress: 25 },
229
+ { id: '4', name: 'Configure shipping', progress: 55 },
230
+ { id: '5', name: 'Launch campaign', progress: 0 },
231
+ ],
232
+ }));
233
+
234
+ const clamp = (value: number) =>
235
+ Math.max(0, Math.min(100, Math.round(value) || 0));
236
+
237
+ const ProgressCellView = ({ value }: { value: number }) => (
238
+ <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
239
+ <div
240
+ style={{
241
+ width: '80px',
242
+ height: '6px',
243
+ borderRadius: '3px',
244
+ background: '#DFE5EB',
245
+ overflow: 'hidden',
246
+ }}
247
+ >
248
+ <div
249
+ style={{
250
+ width: `${clamp(value ?? 0)}%`,
251
+ height: '100%',
252
+ background: '#3899EC',
253
+ }}
254
+ />
255
+ </div>
256
+ <span>{clamp(value ?? 0)}%</span>
257
+ </div>
258
+ );
259
+
260
+ const ProgressCellEdit = ({
261
+ value,
262
+ onChange,
263
+ onCommit,
264
+ onCancel,
265
+ inputRef,
266
+ }: CellEditProps<number>) => {
267
+ const input = React.useRef<HTMLInputElement>(null);
268
+ React.useImperativeHandle(inputRef, () => ({
269
+ focus: () => input.current?.focus(),
270
+ }));
271
+ return (
272
+ <input
273
+ ref={input}
274
+ type="number"
275
+ min={0}
276
+ max={100}
277
+ value={value ?? 0}
278
+ // parseFloat, not Number — the example scope shadows `Number`.
279
+ onChange={(event) => onChange(parseFloat(event.target.value))}
280
+ onKeyDown={(event) => {
281
+ if (event.key === 'Enter') {
282
+ onCommit();
283
+ }
284
+ if (event.key === 'Escape') {
285
+ onCancel();
286
+ }
287
+ }}
288
+ style={{
289
+ width: '100%',
290
+ height: '100%',
291
+ border: 'none',
292
+ outline: 'none',
293
+ }}
294
+ />
295
+ );
296
+ };
297
+
298
+ const progressFieldType = defineFieldType<number>({
299
+ type: 'docs.progress',
300
+ display: {
301
+ label: 'Progress',
302
+ icons: { Small: () => <span>%</span>, Medium: () => <span>%</span> },
303
+ },
304
+ // This example focuses on the editable cell; opt out of filtering explicitly.
305
+ filter: { filterable: false },
306
+ value: { defaultValue: 0, isEmpty: (v) => v == null },
307
+ capabilities: { sortable: true },
308
+ editableTable: {
309
+ ViewComponent: ProgressCellView,
310
+ EditComponent: ProgressCellEdit,
311
+ serialize: (v) => String(clamp(v ?? 0)),
312
+ deserialize: (raw) => clamp(parseFloat(raw)),
313
+ normalizeOnCommit: (v) => clamp(v ?? 0),
314
+ onTypeToEdit: ({ key }) =>
315
+ /^\d$/.test(key) ? { value: parseInt(key, 10) } : undefined,
316
+ },
317
+ // Items here appear on the field's actions menus (e.g. the editable
318
+ // table's column header menu) — only for fields of this type.
319
+ actions: {
320
+ items: [
321
+ {
322
+ key: 'progress-only-action',
323
+ label: 'This is action only for progress bar',
324
+ onClick: () => window.alert('This is action only for progress bar'),
325
+ },
326
+ ],
327
+ },
328
+ });
329
+
330
+ const progressField: Field = {
331
+ id: 'progress',
332
+ displayName: 'Progress',
333
+ type: 'CUSTOM',
334
+ customType: 'docs.progress',
335
+ };
336
+
337
+ const schema: Schema = {
338
+ id: 'docs-custom-field-type-editable',
339
+ fields: { progress: progressField },
340
+ displayField: 'name',
341
+ idField: 'id',
342
+ itemPermissions: { createItem: true, updateItem: true, deleteItem: true },
343
+ };
344
+
345
+ const backend: CollectionBackend<Task> = {
346
+ // Sorting is delegated to the backend: `find` receives `sort`
347
+ // ({ fieldName, order }[]) and owns applying it.
348
+ find: async ({ search = '', sort = [] }) => {
349
+ const found = store.tasks.filter((task) =>
350
+ task.name.toLowerCase().includes(search.toLowerCase()),
351
+ );
352
+ if (sort.length) {
353
+ const [{ fieldName, order }] = sort;
354
+ found.sort((a, b) => {
355
+ const left = a[fieldName as keyof Task] ?? 0;
356
+ const right = b[fieldName as keyof Task] ?? 0;
357
+ const diff = left < right ? -1 : left > right ? 1 : 0;
358
+ return order === 'asc' ? diff : -diff;
359
+ });
360
+ }
361
+ return { items: found, total: found.length };
362
+ },
363
+ create: async (entity) => {
364
+ const created = { id: `task-${store.nextId++}`, name: '', ...entity };
365
+ store.tasks = [...store.tasks, created];
366
+ return created;
367
+ },
368
+ update: async (entity) => {
369
+ store.tasks = store.tasks.map((task) =>
370
+ task.id === entity.id ? entity : task,
371
+ );
372
+ return entity;
373
+ },
374
+ bulkDelete: async (entityIds) => {
375
+ store.tasks = store.tasks.filter((task) => !entityIds.includes(task.id));
376
+ },
377
+ };
378
+
379
+ const loadSchema = async (): Promise<LoadedSchema<Task>> => ({
380
+ schema,
381
+ backend,
382
+ });
383
+
384
+ const columns: EditableColumn<Task>[] = [
385
+ {
386
+ id: 'name',
387
+ title: 'Name',
388
+ cellType: 'text',
389
+ getValue: (task) => task.name,
390
+ setValue: (task, value) => ({ ...task, name: value }),
391
+ width: 220,
392
+ },
393
+ ];
394
+
395
+ const source = useSchemaSource<Task>({
396
+ collectionId: 'docs-custom-field-type-editable',
397
+ loadSchema,
398
+ fieldTypes: [progressFieldType],
399
+ });
400
+ const state = useEditableTableCollection<Task>(source);
401
+
402
+ return (
403
+ <CollectionPage height="400px">
404
+ <CollectionPage.Header title={{ text: 'Tasks' }} />
405
+ <CollectionPage.Content>
406
+ <EditableTable state={state} columns={columns} />
407
+ </CollectionPage.Content>
408
+ </CollectionPage>
409
+ );
410
+ }
411
+ ```
412
+
413
+ ## API
414
+
415
+ ### Overview
416
+
417
+ Full configuration of each slot on `FieldTypeDefinition` (`V` is the field's value type — `defineFieldType` infers it and keeps all slots consistent).
418
+
419
+ #### `type: string`
420
+
421
+ Unique key for the type (e.g. `'myvertical.rating'`). Fields reference it via `customType` — an unmatched key falls back to a read-only object cell.
422
+
423
+ #### `display` — label and icons in field menus
424
+
425
+ - `label: string`
426
+ - `icons: { Small: ComponentType; Medium: ComponentType }`
427
+
428
+ #### `filter` — toolbar filter (required slot)
429
+
430
+ Provide a config, or opt out explicitly with `{ filterable: false }` — never silently absent.
431
+
432
+ - `createFilter(field): Filter` — the filter state registered on the collection query (e.g. `idNameArrayFilter()`).
433
+ - `Component` — the toolbar element; receives `FilterProps` (`filter`, plus `toolbarItemProps` / `toolbarTagProps` / `accordionItemProps` labels). Typically wraps a built-in filter element like `MultiInlineCheckboxFilter`.
434
+
435
+ The backend owns the translation: `find({ filters })` receives the raw filter value exactly as the filter state produced it.
436
+
437
+ #### `value` — value semantics, used by every surface
438
+
439
+ - `defaultValue?: V`
440
+ - `isEmpty?(value: V): boolean`
441
+ - `validate?(value: V, rules?: ValidationRule[]): string | null` — return an error message or `null`; every surface that validates a field of this type runs this. `ValidationRule` covers `required`, `min`/`max`, `minLength`/`maxLength`, `pattern`, `custom`, and `specificValues`.
442
+
443
+ #### `capabilities`
444
+
445
+ - `sortable: boolean` — turns the sort controls on. The backend receives `sort` (`{ fieldName, order }[]`) on `find` and owns applying it, same as filters.
446
+
447
+ #### `table` — the read-only table cell and column layout
448
+
449
+ - `CellComponent(props: { value: V })` — renders the cell.
450
+ - `width: string` — required; custom types get no built-in layout default.
451
+ - `align?: 'start' | 'center' | 'end'` — default `'start'`.
452
+
453
+ #### `editableTable` — the editable cell: view, inline editor, clipboard
454
+
455
+ - `ViewComponent(props: CellViewProps)` — view mode. Props: `value`, `typeConfig`, `validation`, `columnId`, `rowKey`.
456
+ - `EditComponent?(props: CellEditProps)` — edit mode; omit for view-only cells. Props: `value`, `onChange(value)` (call on **every** change — Tab-commit reads the editing value synchronously before blur), `onCommit()`, `onCancel()` (wire Escape to it), `onStartEdit?()` (call before opening external UI like a modal so the table keeps cell focus), `inputRef` (expose `{ focus }` via `useImperativeHandle` for type-to-edit), `editTrigger`, `validation`, `typeConfig`, `columnId`, `rowKey`.
457
+ - `serialize?(value: V): string` / `deserialize?(raw: string): V` — clipboard copy/paste. Serialized values must be single-line (TSV).
458
+ - `editable?: boolean` — default `true`.
459
+ - `clearable?: boolean` — can the Delete key clear the cell; default `true`.
460
+ - `toggleValue?(value: V): V` — toggle on single click (e.g. boolean checkbox), skipping the focus→edit flow.
461
+ - `editOnClick?(value: V): boolean` — enter edit mode on single click (e.g. an empty image cell).
462
+ - `showEditWhenFocused?: boolean` — render the EditComponent while merely focused, keyboard navigation stays active.
463
+ - `growable?: boolean` — cell content may grow past row height when focused (only with `showEditWhenFocused`).
464
+ - `onTypeToEdit?({ key, validation })` — handle type-to-edit: return `{ value }` to seed and enter edit, `{}` to enter edit unchanged, `undefined` to block the key. Without it, typing on a focused cell does nothing.
465
+ - `nativeTypeToEdit?: boolean` — flush edit mode synchronously on keydown and let the browser deliver the keystroke to the focused input (for controlled inputs that can't be seeded via props).
466
+ - `normalizeOnCommit?(value: V): V` — normalize just before the edit commits (e.g. clamp a number, prepend `https://`).
467
+ - `EditWrapper?: ComponentType` — optional wrapper kept mounted across the edit↔view transition, for behavior that must outlive the inline editor.
468
+
469
+ #### `actions` — extra items on the field's "more actions" menus
470
+
471
+ Items appear on every field-actions menu (editable table column header, manage-fields panel, customize-columns panel) — only for fields of this type.
472
+
473
+ - `items?: Array` — `disabledTooltip` returning a string disables the item and shows the tooltip.
474
+
475
+
476
+ ### Props
477
+
478
+ | Prop | Type | Required | Default | Description |
479
+ |------|------|----------|---------|-------------|
480
+ | `type` | `string` | Yes | - | Unique key for the type. A built-in type uses its `PatternsFieldType`; a consumer-defined type uses the string its fields reference via `customType`. |
481
+ | `filter` | `FilterTypeConfig \| { filterable: false; }` | Yes | - | Filter behavior, or an explicit opt-out — never silently absent. |
482
+ | `table` | `TableCellConfig<V>` | No | - | Absent ⇒ the field renders with the default cell in the read-only table. |
483
+ | `editableTable` | `EditableCellConfig<V>` | No | - | Absent ⇒ the field renders as a read-only cell in editable surfaces. |
484
+ | `actions` | `FieldActionsConfig` | No | - | Extra items for the field's "more actions" menu. |
485
+
@@ -1,8 +1,4 @@
1
1
  {
2
- "ActionSubItem": {
3
- "file": "ActionSubItem.md",
4
- "category": "Common/Types"
5
- },
6
2
  "AI Assistant": {
7
3
  "file": "AI Assistant.md",
8
4
  "category": "Integrations/AI Assistant"
@@ -11,14 +7,14 @@
11
7
  "file": "AutoCompleteFilter.md",
12
8
  "category": "Features/Filter/Components"
13
9
  },
10
+ "ActionSubItem": {
11
+ "file": "ActionSubItem.md",
12
+ "category": "Common/Types"
13
+ },
14
14
  "CollectionEmptyState": {
15
15
  "file": "CollectionEmptyState.md",
16
16
  "category": "Features/Display/Empty States"
17
17
  },
18
- "CollectionNoResultsState": {
19
- "file": "CollectionNoResultsState.md",
20
- "category": "Features/Display/Empty States"
21
- },
22
18
  "CollectionErrorState": {
23
19
  "file": "CollectionErrorState.md",
24
20
  "category": "Common/State"
@@ -27,6 +23,10 @@
27
23
  "file": "CollectionPage.md",
28
24
  "category": "Base Components/Pages/Collection Page"
29
25
  },
26
+ "CollectionNoResultsState": {
27
+ "file": "CollectionNoResultsState.md",
28
+ "category": "Features/Display/Empty States"
29
+ },
30
30
  "CollectionOptimisticActions": {
31
31
  "file": "CollectionOptimisticActions.md",
32
32
  "category": "Features/Actions/Updates"
@@ -35,10 +35,6 @@
35
35
  "file": "CollectionPage.Content.md",
36
36
  "category": "Base Components/Pages/Collection Page"
37
37
  },
38
- "CollectionPage.Header": {
39
- "file": "CollectionPage.Header.md",
40
- "category": "Base Components/Pages/Collection Page"
41
- },
42
38
  "CollectionSearch": {
43
39
  "file": "CollectionSearch.md",
44
40
  "category": "Features/Filter/Components"
@@ -47,6 +43,10 @@
47
43
  "file": "CollectionPremiumEmptyState.md",
48
44
  "category": "Features/Display/Empty States"
49
45
  },
46
+ "CollectionPage.Header": {
47
+ "file": "CollectionPage.Header.md",
48
+ "category": "Base Components/Pages/Collection Page"
49
+ },
50
50
  "CollectionSubToolbar": {
51
51
  "file": "CollectionSubToolbar.md",
52
52
  "category": "Common/Components"
@@ -63,6 +63,10 @@
63
63
  "file": "CustomColumns.md",
64
64
  "category": "Features/Display/Custom Columns"
65
65
  },
66
+ "CustomFieldType": {
67
+ "file": "CustomFieldType.md",
68
+ "category": "Features/Enrich/Custom Field Types"
69
+ },
66
70
  "CustomFieldsViewWidget": {
67
71
  "file": "CustomFieldsViewWidget.md",
68
72
  "category": "Features/Enrich/Data Extension/Components"
@@ -79,14 +83,14 @@
79
83
  "file": "EntityPage.md",
80
84
  "category": "Base Components/Pages/Entity Page"
81
85
  },
82
- "EntityPage.AdditionalContent": {
83
- "file": "EntityPage.AdditionalContent.md",
84
- "category": "Base Components/Pages/Entity Page"
85
- },
86
86
  "EntityPage.Card": {
87
87
  "file": "EntityPage.Card.md",
88
88
  "category": "Base Components/Pages/Entity Page"
89
89
  },
90
+ "EntityPage.AdditionalContent": {
91
+ "file": "EntityPage.AdditionalContent.md",
92
+ "category": "Base Components/Pages/Entity Page"
93
+ },
90
94
  "EntityPage.Content": {
91
95
  "file": "EntityPage.Content.md",
92
96
  "category": "Base Components/Pages/Entity Page"
@@ -399,14 +403,14 @@
399
403
  "file": "BulkActionModalRenderProp.md",
400
404
  "category": "Common/Types"
401
405
  },
402
- "BulkSelectState": {
403
- "file": "BulkSelectState.md",
404
- "category": "Common/State"
405
- },
406
406
  "Category": {
407
407
  "file": "Category.md",
408
408
  "category": "Common/Types"
409
409
  },
410
+ "BulkSelectState": {
411
+ "file": "BulkSelectState.md",
412
+ "category": "Common/State"
413
+ },
410
414
  "CollectionSection": {
411
415
  "file": "CollectionSection.md",
412
416
  "category": "Common/Types"
@@ -427,10 +431,6 @@
427
431
  "file": "customFilter.md",
428
432
  "category": "Features/Filter/Factories"
429
433
  },
430
- "DataResultRaw": {
431
- "file": "DataResultRaw.md",
432
- "category": "Common/Types"
433
- },
434
434
  "Data Extension Overview": {
435
435
  "file": "Data Extension Overview.md",
436
436
  "category": "Features/Enrich/Data Extension"
@@ -447,6 +447,10 @@
447
447
  "file": "Allow Users to Add Extended Fields.md",
448
448
  "category": "Features/Enrich/Data Extension"
449
449
  },
450
+ "DataResultRaw": {
451
+ "file": "DataResultRaw.md",
452
+ "category": "Common/Types"
453
+ },
450
454
  "EntityPageState": {
451
455
  "file": "EntityPageState.md",
452
456
  "category": "Base Components/Pages/Entity Page/State"
@@ -1,12 +1,12 @@
1
1
  // @ts-nocheck
2
2
  import { classesRuntime, statesRuntime } from "../../stylable-esm-runtime.js";
3
- var _namespace_ = "CardContainer3291627948";
3
+ var _namespace_ = "CardContainer2683001775";
4
4
  var _style_ = classesRuntime.bind(null, _namespace_);
5
5
  export var cssStates = statesRuntime.bind(null, _namespace_);
6
6
  export var style = _style_;
7
7
  export var st = _style_;
8
8
  export var namespace = _namespace_;
9
- export var classes = { "root": "CardContainer3291627948__root" };
9
+ export var classes = { "root": "CardContainer2683001775__root" };
10
10
  export var keyframes = {};
11
11
  export var layers = {};
12
12
  export var containers = {};
@@ -1,12 +1,12 @@
1
1
  // @ts-nocheck
2
2
  import { classesRuntime, statesRuntime } from "../../stylable-esm-runtime.js";
3
- var _namespace_ = "CmsFieldForm1804752447";
3
+ var _namespace_ = "CmsFieldForm3732479235";
4
4
  var _style_ = classesRuntime.bind(null, _namespace_);
5
5
  export var cssStates = statesRuntime.bind(null, _namespace_);
6
6
  export var style = _style_;
7
7
  export var st = _style_;
8
8
  export var namespace = _namespace_;
9
- export var classes = { "root": "CmsFieldForm1804752447__root", "fullBleedDivider": "CmsFieldForm1804752447__fullBleedDivider" };
9
+ export var classes = { "root": "CmsFieldForm3732479235__root", "fullBleedDivider": "CmsFieldForm3732479235__fullBleedDivider" };
10
10
  export var keyframes = {};
11
11
  export var layers = {};
12
12
  export var containers = {};
@@ -1,12 +1,12 @@
1
1
  // @ts-nocheck
2
2
  import { classesRuntime, statesRuntime } from "../../stylable-esm-runtime.js";
3
- var _namespace_ = "CmsFieldModal2942131533";
3
+ var _namespace_ = "CmsFieldModal2659787844";
4
4
  var _style_ = classesRuntime.bind(null, _namespace_);
5
5
  export var cssStates = statesRuntime.bind(null, _namespace_);
6
6
  export var style = _style_;
7
7
  export var st = _style_;
8
8
  export var namespace = _namespace_;
9
- export var classes = { "root": "CmsFieldModal2942131533__root", "modal": "CmsFieldModal2942131533__modal" };
9
+ export var classes = { "root": "CmsFieldModal2659787844__root", "modal": "CmsFieldModal2659787844__modal" };
10
10
  export var keyframes = {};
11
11
  export var layers = {};
12
12
  export var containers = {};
@@ -1,12 +1,12 @@
1
1
  // @ts-nocheck
2
2
  import { classesRuntime, statesRuntime } from "../../../stylable-esm-runtime.js";
3
- var _namespace_ = "ValidationAndDefaultsSection3910330885";
3
+ var _namespace_ = "ValidationAndDefaultsSection1624267018";
4
4
  var _style_ = classesRuntime.bind(null, _namespace_);
5
5
  export var cssStates = statesRuntime.bind(null, _namespace_);
6
6
  export var style = _style_;
7
7
  export var st = _style_;
8
8
  export var namespace = _namespace_;
9
- export var classes = { "root": "ValidationAndDefaultsSection3910330885__root", "accordionWrapper": "ValidationAndDefaultsSection3910330885__accordionWrapper" };
9
+ export var classes = { "root": "ValidationAndDefaultsSection1624267018__root", "accordionWrapper": "ValidationAndDefaultsSection1624267018__accordionWrapper" };
10
10
  export var keyframes = {};
11
11
  export var layers = {};
12
12
  export var containers = {};