@wordpress/components 19.6.1 → 19.8.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 (514) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +38 -0
  3. package/build/base-control/index.js +41 -32
  4. package/build/base-control/index.js.map +1 -1
  5. package/build/base-control/styles/base-control-styles.js +43 -22
  6. package/build/base-control/styles/base-control-styles.js.map +1 -1
  7. package/build/base-control/types.js +6 -0
  8. package/build/base-control/types.js.map +1 -0
  9. package/build/border-box-control/border-box-control/component.js +124 -0
  10. package/build/border-box-control/border-box-control/component.js.map +1 -0
  11. package/build/border-box-control/border-box-control/hook.js +113 -0
  12. package/build/border-box-control/border-box-control/hook.js.map +1 -0
  13. package/build/border-box-control/border-box-control/index.js +24 -0
  14. package/build/border-box-control/border-box-control/index.js.map +1 -0
  15. package/build/border-box-control/border-box-control-linked-button/component.js +59 -0
  16. package/build/border-box-control/border-box-control-linked-button/component.js.map +1 -0
  17. package/build/border-box-control/border-box-control-linked-button/hook.js +41 -0
  18. package/build/border-box-control/border-box-control-linked-button/hook.js.map +1 -0
  19. package/build/border-box-control/border-box-control-linked-button/index.js +16 -0
  20. package/build/border-box-control/border-box-control-linked-button/index.js.map +1 -0
  21. package/build/border-box-control/border-box-control-split-controls/component.js +93 -0
  22. package/build/border-box-control/border-box-control-split-controls/component.js.map +1 -0
  23. package/build/border-box-control/border-box-control-split-controls/hook.js +45 -0
  24. package/build/border-box-control/border-box-control-split-controls/hook.js.map +1 -0
  25. package/build/border-box-control/border-box-control-split-controls/index.js +16 -0
  26. package/build/border-box-control/border-box-control-split-controls/index.js.map +1 -0
  27. package/build/border-box-control/border-box-control-visualizer/component.js +40 -0
  28. package/build/border-box-control/border-box-control-visualizer/component.js.map +1 -0
  29. package/build/border-box-control/border-box-control-visualizer/hook.js +43 -0
  30. package/build/border-box-control/border-box-control-visualizer/hook.js.map +1 -0
  31. package/build/border-box-control/border-box-control-visualizer/index.js +16 -0
  32. package/build/border-box-control/border-box-control-visualizer/index.js.map +1 -0
  33. package/build/border-box-control/index.js +44 -0
  34. package/build/border-box-control/index.js.map +1 -0
  35. package/build/border-box-control/styles.js +76 -0
  36. package/build/border-box-control/styles.js.map +1 -0
  37. package/build/border-box-control/types.js +6 -0
  38. package/build/border-box-control/types.js.map +1 -0
  39. package/build/border-box-control/utils.js +161 -0
  40. package/build/border-box-control/utils.js.map +1 -0
  41. package/build/border-control/border-control/component.js +119 -0
  42. package/build/border-control/border-control/component.js.map +1 -0
  43. package/build/border-control/border-control/hook.js +130 -0
  44. package/build/border-control/border-control/hook.js.map +1 -0
  45. package/build/border-control/border-control/index.js +24 -0
  46. package/build/border-control/border-control/index.js.map +1 -0
  47. package/build/border-control/border-control-dropdown/component.js +196 -0
  48. package/build/border-control/border-control-dropdown/component.js.map +1 -0
  49. package/build/border-control/border-control-dropdown/hook.js +105 -0
  50. package/build/border-control/border-control-dropdown/hook.js.map +1 -0
  51. package/build/border-control/border-control-dropdown/index.js +16 -0
  52. package/build/border-control/border-control-dropdown/index.js.map +1 -0
  53. package/build/border-control/border-control-style-picker/component.js +101 -0
  54. package/build/border-control/border-control-style-picker/component.js.map +1 -0
  55. package/build/border-control/border-control-style-picker/hook.js +45 -0
  56. package/build/border-control/border-control-style-picker/hook.js.map +1 -0
  57. package/build/border-control/border-control-style-picker/index.js +16 -0
  58. package/build/border-control/border-control-style-picker/index.js.map +1 -0
  59. package/build/border-control/index.js +24 -0
  60. package/build/border-control/index.js.map +1 -0
  61. package/build/border-control/styles.js +125 -0
  62. package/build/border-control/styles.js.map +1 -0
  63. package/build/border-control/types.js +6 -0
  64. package/build/border-control/types.js.map +1 -0
  65. package/build/box-control/all-input-control.js +3 -7
  66. package/build/box-control/all-input-control.js.map +1 -1
  67. package/build/box-control/axial-input-controls.js +20 -15
  68. package/build/box-control/axial-input-controls.js.map +1 -1
  69. package/build/box-control/input-controls.js +21 -16
  70. package/build/box-control/input-controls.js.map +1 -1
  71. package/build/box-control/utils.js +25 -11
  72. package/build/box-control/utils.js.map +1 -1
  73. package/build/card/styles.js +22 -17
  74. package/build/card/styles.js.map +1 -1
  75. package/build/checkbox-control/index.js +21 -1
  76. package/build/checkbox-control/index.js.map +1 -1
  77. package/build/color-palette/index.js +53 -4
  78. package/build/color-palette/index.js.map +1 -1
  79. package/build/custom-select-control/index.js +12 -4
  80. package/build/custom-select-control/index.js.map +1 -1
  81. package/build/divider/styles.js +28 -16
  82. package/build/divider/styles.js.map +1 -1
  83. package/build/focal-point-picker/controls.js +2 -3
  84. package/build/focal-point-picker/controls.js.map +1 -1
  85. package/build/form-file-upload/index.js +4 -1
  86. package/build/form-file-upload/index.js.map +1 -1
  87. package/build/index.js +40 -0
  88. package/build/index.js.map +1 -1
  89. package/build/input-control/input-field.js +21 -14
  90. package/build/input-control/input-field.js.map +1 -1
  91. package/build/input-control/reducer/actions.js +1 -3
  92. package/build/input-control/reducer/actions.js.map +1 -1
  93. package/build/input-control/reducer/reducer.js +1 -43
  94. package/build/input-control/reducer/reducer.js.map +1 -1
  95. package/build/item-group/styles.js +14 -14
  96. package/build/item-group/styles.js.map +1 -1
  97. package/build/mobile/picker/index.android.js +0 -3
  98. package/build/mobile/picker/index.android.js.map +1 -1
  99. package/build/number-control/index.js +15 -10
  100. package/build/number-control/index.js.map +1 -1
  101. package/build/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js +4 -4
  102. package/build/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js.map +1 -1
  103. package/build/surface/styles.js +8 -8
  104. package/build/surface/styles.js.map +1 -1
  105. package/build/toggle-group-control/index.js +8 -0
  106. package/build/toggle-group-control/index.js.map +1 -1
  107. package/build/toggle-group-control/toggle-group-control/component.js +10 -1
  108. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  109. package/build/toggle-group-control/toggle-group-control/styles.js +14 -3
  110. package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  111. package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js +90 -0
  112. package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -0
  113. package/build/toggle-group-control/toggle-group-control-option/component.js +9 -87
  114. package/build/toggle-group-control/toggle-group-control-option/component.js.map +1 -1
  115. package/build/toggle-group-control/toggle-group-control-option-base/component.js +127 -0
  116. package/build/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -0
  117. package/build/toggle-group-control/toggle-group-control-option-base/index.js +16 -0
  118. package/build/toggle-group-control/toggle-group-control-option-base/index.js.map +1 -0
  119. package/build/toggle-group-control/toggle-group-control-option-base/styles.js +66 -0
  120. package/build/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -0
  121. package/build/toggle-group-control/toggle-group-control-option-icon/component.js +55 -0
  122. package/build/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -0
  123. package/build/toggle-group-control/toggle-group-control-option-icon/index.js +16 -0
  124. package/build/toggle-group-control/toggle-group-control-option-icon/index.js.map +1 -0
  125. package/build/toolbar-dropdown-menu/index.js +1 -1
  126. package/build/toolbar-dropdown-menu/index.js.map +1 -1
  127. package/build/unit-control/index.js +56 -29
  128. package/build/unit-control/index.js.map +1 -1
  129. package/build/unit-control/unit-select-control.js +2 -4
  130. package/build/unit-control/unit-select-control.js.map +1 -1
  131. package/build/utils/colors-values.js +5 -3
  132. package/build/utils/colors-values.js.map +1 -1
  133. package/build/utils/config-values.js +9 -4
  134. package/build/utils/config-values.js.map +1 -1
  135. package/build-module/base-control/index.js +39 -35
  136. package/build-module/base-control/index.js.map +1 -1
  137. package/build-module/base-control/styles/base-control-styles.js +44 -16
  138. package/build-module/base-control/styles/base-control-styles.js.map +1 -1
  139. package/build-module/base-control/types.js +2 -0
  140. package/build-module/base-control/types.js.map +1 -0
  141. package/build-module/border-box-control/border-box-control/component.js +104 -0
  142. package/build-module/border-box-control/border-box-control/component.js.map +1 -0
  143. package/build-module/border-box-control/border-box-control/hook.js +97 -0
  144. package/build-module/border-box-control/border-box-control/hook.js.map +1 -0
  145. package/build-module/border-box-control/border-box-control/index.js +3 -0
  146. package/build-module/border-box-control/border-box-control/index.js.map +1 -0
  147. package/build-module/border-box-control/border-box-control-linked-button/component.js +42 -0
  148. package/build-module/border-box-control/border-box-control-linked-button/component.js.map +1 -0
  149. package/build-module/border-box-control/border-box-control-linked-button/hook.js +26 -0
  150. package/build-module/border-box-control/border-box-control-linked-button/hook.js.map +1 -0
  151. package/build-module/border-box-control/border-box-control-linked-button/index.js +2 -0
  152. package/build-module/border-box-control/border-box-control-linked-button/index.js.map +1 -0
  153. package/build-module/border-box-control/border-box-control-split-controls/component.js +77 -0
  154. package/build-module/border-box-control/border-box-control-split-controls/component.js.map +1 -0
  155. package/build-module/border-box-control/border-box-control-split-controls/hook.js +30 -0
  156. package/build-module/border-box-control/border-box-control-split-controls/hook.js.map +1 -0
  157. package/build-module/border-box-control/border-box-control-split-controls/index.js +2 -0
  158. package/build-module/border-box-control/border-box-control-split-controls/index.js.map +1 -0
  159. package/build-module/border-box-control/border-box-control-visualizer/component.js +27 -0
  160. package/build-module/border-box-control/border-box-control-visualizer/component.js.map +1 -0
  161. package/build-module/border-box-control/border-box-control-visualizer/hook.js +28 -0
  162. package/build-module/border-box-control/border-box-control-visualizer/hook.js.map +1 -0
  163. package/build-module/border-box-control/border-box-control-visualizer/index.js +2 -0
  164. package/build-module/border-box-control/border-box-control-visualizer/index.js.map +1 -0
  165. package/build-module/border-box-control/index.js +4 -0
  166. package/build-module/border-box-control/index.js.map +1 -0
  167. package/build-module/border-box-control/styles.js +66 -0
  168. package/build-module/border-box-control/styles.js.map +1 -0
  169. package/build-module/border-box-control/types.js +2 -0
  170. package/build-module/border-box-control/types.js.map +1 -0
  171. package/build-module/border-box-control/utils.js +127 -0
  172. package/build-module/border-box-control/utils.js.map +1 -0
  173. package/build-module/border-control/border-control/component.js +100 -0
  174. package/build-module/border-control/border-control/component.js.map +1 -0
  175. package/build-module/border-control/border-control/hook.js +115 -0
  176. package/build-module/border-control/border-control/hook.js.map +1 -0
  177. package/build-module/border-control/border-control/index.js +3 -0
  178. package/build-module/border-control/border-control/index.js.map +1 -0
  179. package/build-module/border-control/border-control-dropdown/component.js +174 -0
  180. package/build-module/border-control/border-control-dropdown/component.js.map +1 -0
  181. package/build-module/border-control/border-control-dropdown/hook.js +89 -0
  182. package/build-module/border-control/border-control-dropdown/hook.js.map +1 -0
  183. package/build-module/border-control/border-control-dropdown/index.js +2 -0
  184. package/build-module/border-control/border-control-dropdown/index.js.map +1 -0
  185. package/build-module/border-control/border-control-style-picker/component.js +81 -0
  186. package/build-module/border-control/border-control-style-picker/component.js.map +1 -0
  187. package/build-module/border-control/border-control-style-picker/hook.js +30 -0
  188. package/build-module/border-control/border-control-style-picker/hook.js.map +1 -0
  189. package/build-module/border-control/border-control-style-picker/index.js +2 -0
  190. package/build-module/border-control/border-control-style-picker/index.js.map +1 -0
  191. package/build-module/border-control/index.js +3 -0
  192. package/build-module/border-control/index.js.map +1 -0
  193. package/build-module/border-control/styles.js +90 -0
  194. package/build-module/border-control/styles.js.map +1 -0
  195. package/build-module/border-control/types.js +2 -0
  196. package/build-module/border-control/types.js.map +1 -0
  197. package/build-module/box-control/all-input-control.js +4 -8
  198. package/build-module/box-control/all-input-control.js.map +1 -1
  199. package/build-module/box-control/axial-input-controls.js +18 -14
  200. package/build-module/box-control/axial-input-controls.js.map +1 -1
  201. package/build-module/box-control/input-controls.js +18 -14
  202. package/build-module/box-control/input-controls.js.map +1 -1
  203. package/build-module/box-control/utils.js +25 -11
  204. package/build-module/box-control/utils.js.map +1 -1
  205. package/build-module/card/styles.js +23 -18
  206. package/build-module/card/styles.js.map +1 -1
  207. package/build-module/checkbox-control/index.js +24 -3
  208. package/build-module/checkbox-control/index.js.map +1 -1
  209. package/build-module/color-palette/index.js +52 -4
  210. package/build-module/color-palette/index.js.map +1 -1
  211. package/build-module/custom-select-control/index.js +12 -4
  212. package/build-module/custom-select-control/index.js.map +1 -1
  213. package/build-module/divider/styles.js +29 -10
  214. package/build-module/divider/styles.js.map +1 -1
  215. package/build-module/focal-point-picker/controls.js +2 -3
  216. package/build-module/focal-point-picker/controls.js.map +1 -1
  217. package/build-module/form-file-upload/index.js +4 -1
  218. package/build-module/form-file-upload/index.js.map +1 -1
  219. package/build-module/index.js +3 -1
  220. package/build-module/index.js.map +1 -1
  221. package/build-module/input-control/input-field.js +21 -13
  222. package/build-module/input-control/input-field.js.map +1 -1
  223. package/build-module/input-control/reducer/actions.js +0 -1
  224. package/build-module/input-control/reducer/actions.js.map +1 -1
  225. package/build-module/input-control/reducer/reducer.js +2 -39
  226. package/build-module/input-control/reducer/reducer.js.map +1 -1
  227. package/build-module/item-group/styles.js +14 -14
  228. package/build-module/item-group/styles.js.map +1 -1
  229. package/build-module/mobile/picker/index.android.js +0 -3
  230. package/build-module/mobile/picker/index.android.js.map +1 -1
  231. package/build-module/number-control/index.js +15 -9
  232. package/build-module/number-control/index.js.map +1 -1
  233. package/build-module/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js +4 -4
  234. package/build-module/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js.map +1 -1
  235. package/build-module/surface/styles.js +8 -8
  236. package/build-module/surface/styles.js.map +1 -1
  237. package/build-module/toggle-group-control/index.js +1 -0
  238. package/build-module/toggle-group-control/index.js.map +1 -1
  239. package/build-module/toggle-group-control/toggle-group-control/component.js +8 -1
  240. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  241. package/build-module/toggle-group-control/toggle-group-control/styles.js +11 -3
  242. package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  243. package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js +86 -0
  244. package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -0
  245. package/build-module/toggle-group-control/toggle-group-control-option/component.js +9 -76
  246. package/build-module/toggle-group-control/toggle-group-control-option/component.js.map +1 -1
  247. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js +105 -0
  248. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -0
  249. package/build-module/toggle-group-control/toggle-group-control-option-base/index.js +2 -0
  250. package/build-module/toggle-group-control/toggle-group-control-option-base/index.js.map +1 -0
  251. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js +55 -0
  252. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -0
  253. package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js +50 -0
  254. package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -0
  255. package/build-module/toggle-group-control/toggle-group-control-option-icon/index.js +2 -0
  256. package/build-module/toggle-group-control/toggle-group-control-option-icon/index.js.map +1 -0
  257. package/build-module/toolbar-dropdown-menu/index.js +1 -1
  258. package/build-module/toolbar-dropdown-menu/index.js.map +1 -1
  259. package/build-module/unit-control/index.js +54 -27
  260. package/build-module/unit-control/index.js.map +1 -1
  261. package/build-module/unit-control/unit-select-control.js +2 -3
  262. package/build-module/unit-control/unit-select-control.js.map +1 -1
  263. package/build-module/utils/colors-values.js +5 -3
  264. package/build-module/utils/colors-values.js.map +1 -1
  265. package/build-module/utils/config-values.js +8 -4
  266. package/build-module/utils/config-values.js.map +1 -1
  267. package/build-style/style-rtl.css +33 -182
  268. package/build-style/style.css +33 -182
  269. package/build-types/base-control/index.d.ts +35 -71
  270. package/build-types/base-control/index.d.ts.map +1 -1
  271. package/build-types/base-control/stories/index.d.ts +25 -0
  272. package/build-types/base-control/stories/index.d.ts.map +1 -0
  273. package/build-types/base-control/styles/base-control-styles.d.ts +10 -5
  274. package/build-types/base-control/styles/base-control-styles.d.ts.map +1 -1
  275. package/build-types/base-control/types.d.ts +41 -0
  276. package/build-types/base-control/types.d.ts.map +1 -0
  277. package/build-types/border-box-control/border-box-control/component.d.ts +4 -0
  278. package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -0
  279. package/build-types/border-box-control/border-box-control/hook.d.ts +282 -0
  280. package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -0
  281. package/build-types/border-box-control/border-box-control/index.d.ts +3 -0
  282. package/build-types/border-box-control/border-box-control/index.d.ts.map +1 -0
  283. package/build-types/border-box-control/border-box-control-linked-button/component.d.ts +4 -0
  284. package/build-types/border-box-control/border-box-control-linked-button/component.d.ts.map +1 -0
  285. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +266 -0
  286. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts.map +1 -0
  287. package/build-types/border-box-control/border-box-control-linked-button/index.d.ts +2 -0
  288. package/build-types/border-box-control/border-box-control-linked-button/index.d.ts.map +1 -0
  289. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts +4 -0
  290. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts.map +1 -0
  291. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +274 -0
  292. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts.map +1 -0
  293. package/build-types/border-box-control/border-box-control-split-controls/index.d.ts +2 -0
  294. package/build-types/border-box-control/border-box-control-split-controls/index.d.ts.map +1 -0
  295. package/build-types/border-box-control/border-box-control-visualizer/component.d.ts +4 -0
  296. package/build-types/border-box-control/border-box-control-visualizer/component.d.ts.map +1 -0
  297. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +266 -0
  298. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts.map +1 -0
  299. package/build-types/border-box-control/border-box-control-visualizer/index.d.ts +2 -0
  300. package/build-types/border-box-control/border-box-control-visualizer/index.d.ts.map +1 -0
  301. package/build-types/border-box-control/index.d.ts +4 -0
  302. package/build-types/border-box-control/index.d.ts.map +1 -0
  303. package/build-types/border-box-control/styles.d.ts +8 -0
  304. package/build-types/border-box-control/styles.d.ts.map +1 -0
  305. package/build-types/border-box-control/types.d.ts +91 -0
  306. package/build-types/border-box-control/types.d.ts.map +1 -0
  307. package/build-types/border-box-control/utils.d.ts +24 -0
  308. package/build-types/border-box-control/utils.d.ts.map +1 -0
  309. package/build-types/border-control/border-control/component.d.ts +4 -0
  310. package/build-types/border-control/border-control/component.d.ts.map +1 -0
  311. package/build-types/border-control/border-control/hook.d.ts +285 -0
  312. package/build-types/border-control/border-control/hook.d.ts.map +1 -0
  313. package/build-types/border-control/border-control/index.d.ts +3 -0
  314. package/build-types/border-control/border-control/index.d.ts.map +1 -0
  315. package/build-types/border-control/border-control-dropdown/component.d.ts +4 -0
  316. package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -0
  317. package/build-types/border-control/border-control-dropdown/hook.d.ts +280 -0
  318. package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -0
  319. package/build-types/border-control/border-control-dropdown/index.d.ts +2 -0
  320. package/build-types/border-control/border-control-dropdown/index.d.ts.map +1 -0
  321. package/build-types/border-control/border-control-style-picker/component.d.ts +4 -0
  322. package/build-types/border-control/border-control-style-picker/component.d.ts.map +1 -0
  323. package/build-types/border-control/border-control-style-picker/hook.d.ts +269 -0
  324. package/build-types/border-control/border-control-style-picker/hook.d.ts.map +1 -0
  325. package/build-types/border-control/border-control-style-picker/index.d.ts +2 -0
  326. package/build-types/border-control/border-control-style-picker/index.d.ts.map +1 -0
  327. package/build-types/border-control/index.d.ts +3 -0
  328. package/build-types/border-control/index.d.ts.map +1 -0
  329. package/build-types/border-control/styles.d.ts +18 -0
  330. package/build-types/border-control/styles.d.ts.map +1 -0
  331. package/build-types/border-control/types.d.ts +163 -0
  332. package/build-types/border-control/types.d.ts.map +1 -0
  333. package/build-types/card/card-divider/hook.d.ts +1 -1
  334. package/build-types/card/styles.d.ts.map +1 -1
  335. package/build-types/color-indicator/index.d.ts +7 -0
  336. package/build-types/color-indicator/index.d.ts.map +1 -0
  337. package/build-types/color-palette/index.d.ts.map +1 -1
  338. package/build-types/color-picker/styles.d.ts +1 -1
  339. package/build-types/divider/stories/index.d.ts +1 -0
  340. package/build-types/divider/stories/index.d.ts.map +1 -1
  341. package/build-types/divider/styles.d.ts.map +1 -1
  342. package/build-types/divider/types.d.ts +8 -1
  343. package/build-types/divider/types.d.ts.map +1 -1
  344. package/build-types/input-control/input-field.d.ts.map +1 -1
  345. package/build-types/input-control/reducer/actions.d.ts +1 -3
  346. package/build-types/input-control/reducer/actions.d.ts.map +1 -1
  347. package/build-types/input-control/reducer/reducer.d.ts +3 -9
  348. package/build-types/input-control/reducer/reducer.d.ts.map +1 -1
  349. package/build-types/input-control/types.d.ts +2 -2
  350. package/build-types/input-control/types.d.ts.map +1 -1
  351. package/build-types/item-group/styles.d.ts.map +1 -1
  352. package/build-types/number-control/index.d.ts +3 -3
  353. package/build-types/number-control/index.d.ts.map +1 -1
  354. package/build-types/range-control/styles/range-control-styles.d.ts +1 -1
  355. package/build-types/resizable-box/resize-tooltip/styles/resize-tooltip.styles.d.ts.map +1 -1
  356. package/build-types/toggle-group-control/index.d.ts +1 -0
  357. package/build-types/toggle-group-control/index.d.ts.map +1 -1
  358. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  359. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts +5 -0
  360. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
  361. package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts +9 -0
  362. package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts.map +1 -0
  363. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +6 -2
  364. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts.map +1 -1
  365. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts +25 -0
  366. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -0
  367. package/build-types/toggle-group-control/toggle-group-control-option-base/index.d.ts +2 -0
  368. package/build-types/toggle-group-control/toggle-group-control-option-base/index.d.ts.map +1 -0
  369. package/build-types/toggle-group-control/{toggle-group-control-option → toggle-group-control-option-base}/styles.d.ts +0 -0
  370. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts.map +1 -0
  371. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +37 -0
  372. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts.map +1 -0
  373. package/build-types/toggle-group-control/toggle-group-control-option-icon/index.d.ts +2 -0
  374. package/build-types/toggle-group-control/toggle-group-control-option-icon/index.d.ts.map +1 -0
  375. package/build-types/toggle-group-control/types.d.ts +24 -8
  376. package/build-types/toggle-group-control/types.d.ts.map +1 -1
  377. package/build-types/ui/form-group/form-group.d.ts +2 -2
  378. package/build-types/unit-control/index.d.ts +12 -5
  379. package/build-types/unit-control/index.d.ts.map +1 -1
  380. package/build-types/unit-control/stories/index.d.ts +33 -0
  381. package/build-types/unit-control/stories/index.d.ts.map +1 -0
  382. package/build-types/unit-control/styles/unit-control-styles.d.ts +1 -1
  383. package/build-types/unit-control/types.d.ts +28 -7
  384. package/build-types/unit-control/types.d.ts.map +1 -1
  385. package/build-types/unit-control/unit-select-control.d.ts.map +1 -1
  386. package/build-types/utils/colors-values.d.ts +78 -18
  387. package/build-types/utils/colors-values.d.ts.map +1 -1
  388. package/build-types/utils/config-values.d.ts +71 -71
  389. package/build-types/utils/config-values.d.ts.map +1 -1
  390. package/package.json +17 -17
  391. package/src/animate/README.md +1 -1
  392. package/src/base-control/README.md +20 -12
  393. package/src/base-control/index.tsx +124 -0
  394. package/src/base-control/stories/index.tsx +80 -0
  395. package/src/base-control/styles/{base-control-styles.js → base-control-styles.ts} +23 -1
  396. package/src/base-control/types.ts +42 -0
  397. package/src/border-box-control/border-box-control/README.md +178 -0
  398. package/src/border-box-control/border-box-control/component.tsx +123 -0
  399. package/src/border-box-control/border-box-control/hook.ts +119 -0
  400. package/src/border-box-control/border-box-control/index.ts +2 -0
  401. package/src/border-box-control/border-box-control-linked-button/component.tsx +50 -0
  402. package/src/border-box-control/border-box-control-linked-button/hook.ts +30 -0
  403. package/src/border-box-control/border-box-control-linked-button/index.ts +1 -0
  404. package/src/border-box-control/border-box-control-split-controls/component.tsx +90 -0
  405. package/src/border-box-control/border-box-control-split-controls/hook.ts +34 -0
  406. package/src/border-box-control/border-box-control-split-controls/index.ts +1 -0
  407. package/src/border-box-control/border-box-control-visualizer/component.tsx +28 -0
  408. package/src/border-box-control/border-box-control-visualizer/hook.ts +30 -0
  409. package/src/border-box-control/border-box-control-visualizer/index.ts +1 -0
  410. package/src/border-box-control/index.ts +3 -0
  411. package/src/border-box-control/stories/index.js +104 -0
  412. package/src/border-box-control/styles.ts +69 -0
  413. package/src/border-box-control/test/index.js +354 -0
  414. package/src/border-box-control/test/utils.js +305 -0
  415. package/src/border-box-control/types.ts +98 -0
  416. package/src/border-box-control/utils.ts +151 -0
  417. package/src/border-control/border-control/README.md +181 -0
  418. package/src/border-control/border-control/component.tsx +112 -0
  419. package/src/border-control/border-control/hook.ts +145 -0
  420. package/src/border-control/border-control/index.ts +2 -0
  421. package/src/border-control/border-control-dropdown/component.tsx +252 -0
  422. package/src/border-control/border-control-dropdown/hook.ts +98 -0
  423. package/src/border-control/border-control-dropdown/index.ts +1 -0
  424. package/src/border-control/border-control-style-picker/component.tsx +89 -0
  425. package/src/border-control/border-control-style-picker/hook.ts +34 -0
  426. package/src/border-control/border-control-style-picker/index.ts +1 -0
  427. package/src/border-control/index.ts +2 -0
  428. package/src/border-control/stories/index.js +118 -0
  429. package/src/border-control/styles.ts +190 -0
  430. package/src/border-control/test/index.js +436 -0
  431. package/src/border-control/types.ts +173 -0
  432. package/src/box-control/all-input-control.js +2 -10
  433. package/src/box-control/axial-input-controls.js +32 -21
  434. package/src/box-control/input-controls.js +30 -19
  435. package/src/box-control/utils.js +29 -12
  436. package/src/card/styles.js +11 -5
  437. package/src/card/test/__snapshots__/index.js.snap +83 -66
  438. package/src/card/test/index.js +7 -5
  439. package/src/checkbox-control/index.js +34 -3
  440. package/src/checkbox-control/stories/index.js +44 -0
  441. package/src/checkbox-control/style.scss +4 -2
  442. package/src/color-palette/README.md +6 -0
  443. package/src/color-palette/index.js +73 -8
  444. package/src/color-palette/stories/index.js +69 -26
  445. package/src/color-palette/style.scss +11 -3
  446. package/src/color-palette/test/__snapshots__/index.js.snap +662 -12
  447. package/src/color-palette/test/index.js +1 -1
  448. package/src/custom-select-control/index.js +15 -3
  449. package/src/custom-select-control/stories/index.js +77 -74
  450. package/src/custom-select-control/style.scss +23 -4
  451. package/src/disabled/README.md +7 -10
  452. package/src/divider/stories/index.tsx +26 -23
  453. package/src/divider/styles.ts +9 -0
  454. package/src/divider/types.ts +11 -1
  455. package/src/flyout/test/__snapshots__/index.js.snap +7 -7
  456. package/src/focal-point-picker/controls.js +2 -3
  457. package/src/form-file-upload/README.md +18 -0
  458. package/src/form-file-upload/index.js +3 -0
  459. package/src/form-file-upload/test/index.js +73 -11
  460. package/src/form-toggle/README.md +1 -1
  461. package/src/index.js +8 -0
  462. package/src/input-control/input-field.tsx +23 -12
  463. package/src/input-control/reducer/actions.ts +1 -7
  464. package/src/input-control/reducer/reducer.ts +0 -29
  465. package/src/input-control/types.ts +2 -1
  466. package/src/item-group/styles.ts +1 -0
  467. package/src/item-group/test/__snapshots__/index.js.snap +11 -10
  468. package/src/mobile/picker/index.android.js +0 -1
  469. package/src/number-control/README.md +14 -0
  470. package/src/number-control/index.js +13 -12
  471. package/src/number-control/stories/index.js +14 -7
  472. package/src/number-control/test/index.js +79 -1
  473. package/src/range-control/stories/index.js +91 -119
  474. package/src/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js +1 -0
  475. package/src/surface/styles.js +1 -1
  476. package/src/surface/test/__snapshots__/index.js.snap +11 -11
  477. package/src/toggle-group-control/index.ts +1 -0
  478. package/src/toggle-group-control/stories/index.js +37 -7
  479. package/src/toggle-group-control/test/__snapshots__/index.js.snap +269 -5
  480. package/src/toggle-group-control/test/index.js +43 -10
  481. package/src/toggle-group-control/toggle-group-control/component.tsx +10 -0
  482. package/src/toggle-group-control/toggle-group-control/styles.ts +14 -0
  483. package/src/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.tsx +86 -0
  484. package/src/toggle-group-control/toggle-group-control-option/README.md +8 -5
  485. package/src/toggle-group-control/toggle-group-control-option/component.tsx +18 -94
  486. package/src/toggle-group-control/toggle-group-control-option-base/README.md +27 -0
  487. package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +129 -0
  488. package/src/toggle-group-control/toggle-group-control-option-base/index.ts +1 -0
  489. package/src/toggle-group-control/{toggle-group-control-option → toggle-group-control-option-base}/styles.ts +4 -1
  490. package/src/toggle-group-control/toggle-group-control-option-icon/README.md +56 -0
  491. package/src/toggle-group-control/toggle-group-control-option-icon/component.tsx +56 -0
  492. package/src/toggle-group-control/toggle-group-control-option-icon/index.ts +1 -0
  493. package/src/toggle-group-control/types.ts +33 -8
  494. package/src/toolbar-dropdown-menu/index.js +1 -1
  495. package/src/toolbar-group/style.scss +0 -73
  496. package/src/tools-panel/test/__snapshots__/index.js.snap +8 -8
  497. package/src/unit-control/README.md +7 -3
  498. package/src/unit-control/index.tsx +65 -31
  499. package/src/unit-control/stories/index.tsx +170 -0
  500. package/src/unit-control/test/index.js +263 -100
  501. package/src/unit-control/types.ts +65 -42
  502. package/src/unit-control/unit-select-control.tsx +2 -3
  503. package/src/utils/colors-values.js +4 -3
  504. package/src/utils/config-values.js +9 -4
  505. package/tsconfig.json +3 -0
  506. package/tsconfig.tsbuildinfo +1 -1
  507. package/build/toggle-group-control/toggle-group-control-option/styles.js +0 -66
  508. package/build/toggle-group-control/toggle-group-control-option/styles.js.map +0 -1
  509. package/build-module/toggle-group-control/toggle-group-control-option/styles.js +0 -55
  510. package/build-module/toggle-group-control/toggle-group-control-option/styles.js.map +0 -1
  511. package/build-types/toggle-group-control/toggle-group-control-option/styles.d.ts.map +0 -1
  512. package/src/base-control/index.js +0 -111
  513. package/src/base-control/stories/index.js +0 -81
  514. package/src/unit-control/stories/index.js +0 -127
@@ -0,0 +1,305 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import {
5
+ getBorderDiff,
6
+ getCommonBorder,
7
+ getShorthandBorderStyle,
8
+ getSplitBorders,
9
+ hasMixedBorders,
10
+ hasSplitBorders,
11
+ isCompleteBorder,
12
+ isDefinedBorder,
13
+ isEmptyBorder,
14
+ } from '../utils';
15
+
16
+ const completeBorder = { color: '#000', style: 'solid', width: '1px' };
17
+ const partialBorder = { color: undefined, style: undefined, width: '2px' };
18
+ const partialWithExtraProp = { color: '#fff', unrelated: true };
19
+ const nonBorder = { unrelatedProperty: true };
20
+
21
+ const splitBorders = {
22
+ top: completeBorder,
23
+ right: completeBorder,
24
+ bottom: completeBorder,
25
+ left: completeBorder,
26
+ };
27
+ const undefinedSplitBorders = {
28
+ top: undefined,
29
+ right: undefined,
30
+ bottom: undefined,
31
+ left: undefined,
32
+ };
33
+ const mixedBorders = {
34
+ top: completeBorder,
35
+ right: completeBorder,
36
+ bottom: completeBorder,
37
+ left: { color: '#fff', style: 'dashed', width: '10px' },
38
+ };
39
+ const mixedBordersWithUndefined = {
40
+ top: undefined,
41
+ right: undefined,
42
+ bottom: completeBorder,
43
+ left: partialBorder,
44
+ };
45
+
46
+ describe( 'BorderBoxControl Utils', () => {
47
+ describe( 'isEmptyBorder', () => {
48
+ it( 'should determine a undefined, null, and {} to be empty', () => {
49
+ expect( isEmptyBorder( undefined ) ).toBe( true );
50
+ expect( isEmptyBorder( null ) ).toBe( true );
51
+ expect( isEmptyBorder( {} ) ).toBe( true );
52
+ } );
53
+
54
+ it( 'should determine object missing all border props to be empty', () => {
55
+ expect( isEmptyBorder( nonBorder ) ).toBe( true );
56
+ } );
57
+
58
+ it( 'should determine that a border object with all properties is not empty', () => {
59
+ expect( isEmptyBorder( completeBorder ) ).toBe( false );
60
+ } );
61
+
62
+ it( 'should determine object with at least one border property as non-empty', () => {
63
+ expect( isEmptyBorder( partialWithExtraProp ) ).toBe( false );
64
+ } );
65
+ } );
66
+
67
+ describe( 'isDefinedBorder', () => {
68
+ it( 'should determine undefined is not a defined border', () => {
69
+ expect( isDefinedBorder( undefined ) ).toBe( false );
70
+ } );
71
+
72
+ it( 'should determine an empty object to be an undefined border', () => {
73
+ expect( isDefinedBorder( {} ) ).toBe( false );
74
+ } );
75
+
76
+ it( 'should determine an border object with undefined properties to be an undefined border', () => {
77
+ const emptyBorder = {
78
+ color: undefined,
79
+ style: undefined,
80
+ width: undefined,
81
+ };
82
+ expect( isDefinedBorder( emptyBorder ) ).toBe( false );
83
+ } );
84
+
85
+ it( 'should class an object with at least one side border as defined', () => {
86
+ expect( isDefinedBorder( mixedBordersWithUndefined ) ).toBe( true );
87
+ } );
88
+
89
+ it( 'should determine complete split borders object is defined border', () => {
90
+ expect( isDefinedBorder( splitBorders ) ).toBe( true );
91
+ } );
92
+
93
+ it( 'should determine border is not defined when all sides are empty', () => {
94
+ const mixedUndefinedBorders = {
95
+ top: undefined,
96
+ right: undefined,
97
+ bottom: {},
98
+ left: {
99
+ color: undefined,
100
+ style: undefined,
101
+ width: undefined,
102
+ },
103
+ };
104
+
105
+ expect( isDefinedBorder( undefinedSplitBorders ) ).toBe( false );
106
+ expect( isDefinedBorder( mixedUndefinedBorders ) ).toBe( false );
107
+ } );
108
+ } );
109
+
110
+ describe( 'isCompleteBorder', () => {
111
+ it( 'should determine a undefined, null, and {} to be incomplete', () => {
112
+ expect( isCompleteBorder( undefined ) ).toBe( false );
113
+ expect( isCompleteBorder( null ) ).toBe( false );
114
+ expect( isCompleteBorder( {} ) ).toBe( false );
115
+ } );
116
+
117
+ it( 'should determine objects missing border props to be incomplete', () => {
118
+ expect( isCompleteBorder( nonBorder ) ).toBe( false );
119
+ expect( isCompleteBorder( partialBorder ) ).toBe( false );
120
+ expect( isCompleteBorder( partialWithExtraProp ) ).toBe( false );
121
+ } );
122
+
123
+ it( 'should determine that a border object with all properties is complete', () => {
124
+ expect( isCompleteBorder( completeBorder ) ).toBe( true );
125
+ } );
126
+ } );
127
+
128
+ describe( 'hasSplitBorders', () => {
129
+ it( 'should determine empty or undefined borders as not being split', () => {
130
+ expect( hasSplitBorders( undefined ) ).toBe( false );
131
+ expect( hasSplitBorders( {} ) ).toBe( false );
132
+ } );
133
+
134
+ it( 'should determine flat border object as not being split', () => {
135
+ expect( hasSplitBorders( completeBorder ) ).toBe( false );
136
+ } );
137
+
138
+ it( 'should determine object with at least one side property as split', () => {
139
+ expect( hasSplitBorders( splitBorders ) ).toBe( true );
140
+ expect( hasSplitBorders( { top: completeBorder } ) ).toBe( true );
141
+ } );
142
+
143
+ it( 'should determine object with undefined sides but containing properties as split', () => {
144
+ expect( hasSplitBorders( undefinedSplitBorders ) ).toBe( true );
145
+ } );
146
+ } );
147
+
148
+ describe( 'hasMixedBorders', () => {
149
+ it( 'should determine undefined, non-border or empty object as not being mixed', () => {
150
+ expect( hasMixedBorders( undefined ) ).toBe( false );
151
+ expect( hasMixedBorders( {} ) ).toBe( false );
152
+ expect( hasMixedBorders( nonBorder ) ).toBe( false );
153
+ } );
154
+
155
+ it( 'should determine flat border object as not being mixed', () => {
156
+ expect( hasMixedBorders( completeBorder ) ).toBe( false );
157
+ } );
158
+
159
+ it( 'should determine split border object with some undefined side borders as mixed', () => {
160
+ expect( hasMixedBorders( mixedBordersWithUndefined ) ).toBe( true );
161
+ } );
162
+
163
+ it( 'should determine split border object with different side borders as mixed', () => {
164
+ expect( hasMixedBorders( mixedBorders ) ).toBe( true );
165
+ } );
166
+ } );
167
+
168
+ describe( 'getSplitBorders', () => {
169
+ it( 'should return undefined when no border provided', () => {
170
+ expect( getSplitBorders( undefined ) ).toEqual( undefined );
171
+ expect( getSplitBorders( null ) ).toEqual( undefined );
172
+ } );
173
+
174
+ it( 'should return undefined when supplied border is empty', () => {
175
+ expect( getSplitBorders( {} ) ).toEqual( undefined );
176
+ expect( getSplitBorders( nonBorder ) ).toEqual( undefined );
177
+ } );
178
+
179
+ it( 'should return object with all sides populated when given valid border', () => {
180
+ expect( getSplitBorders( completeBorder ) ).toEqual( {
181
+ top: completeBorder,
182
+ right: completeBorder,
183
+ bottom: completeBorder,
184
+ left: completeBorder,
185
+ } );
186
+ } );
187
+ } );
188
+
189
+ describe( 'getBorderDiff', () => {
190
+ it( 'should return empty object when there are no differences', () => {
191
+ const diff = getBorderDiff( completeBorder, completeBorder );
192
+ expect( diff ).toEqual( {} );
193
+ } );
194
+
195
+ it( 'should only return differences for border related properties', () => {
196
+ const diff = getBorderDiff( nonBorder, { caffeine: 'coffee' } );
197
+ expect( diff ).toEqual( {} );
198
+ } );
199
+
200
+ it( 'should return object with only border properties that have changed', () => {
201
+ const diff = getBorderDiff( completeBorder, {
202
+ ...completeBorder,
203
+ color: '#21759b',
204
+ caffeine: 'cola',
205
+ } );
206
+ expect( diff ).toEqual( { color: '#21759b' } );
207
+ } );
208
+ } );
209
+
210
+ describe( 'getCommonBorder', () => {
211
+ it( 'should return undefined when no borders supplied', () => {
212
+ expect( getCommonBorder( undefined ) ).toEqual( undefined );
213
+ } );
214
+
215
+ it( 'should return border object with undefined properties when undefined borders given', () => {
216
+ const undefinedBorder = {
217
+ color: undefined,
218
+ style: undefined,
219
+ width: undefined,
220
+ };
221
+
222
+ expect( getCommonBorder( {} ) ).toEqual( undefinedBorder );
223
+ expect( getCommonBorder( undefinedSplitBorders ) ).toEqual(
224
+ undefinedBorder
225
+ );
226
+ } );
227
+
228
+ it( 'should return flat border object when split borders are the same', () => {
229
+ expect( getCommonBorder( splitBorders ) ).toEqual( completeBorder );
230
+ } );
231
+
232
+ it( 'should only set properties where every side border shares the same value', () => {
233
+ const sideBorders = {
234
+ top: { color: '#fff', style: 'solid', width: '1px' },
235
+ right: { color: '#000', style: 'solid', width: '1px' },
236
+ bottom: { color: '#000', style: 'solid', width: '1px' },
237
+ left: { color: '#000', style: undefined, width: '1px' },
238
+ };
239
+ const commonBorder = {
240
+ color: undefined,
241
+ style: undefined,
242
+ width: '1px',
243
+ };
244
+
245
+ expect( getCommonBorder( sideBorders ) ).toEqual( commonBorder );
246
+ } );
247
+ } );
248
+
249
+ describe( 'getShorthandBorderStyle', () => {
250
+ it( 'should return undefined when no border provided', () => {
251
+ expect( getShorthandBorderStyle( undefined ) ).toEqual( undefined );
252
+ expect( getShorthandBorderStyle( {} ) ).toEqual( undefined );
253
+ expect( getShorthandBorderStyle( nonBorder ) ).toEqual( undefined );
254
+ } );
255
+
256
+ it( 'should generate correct shorthand style from valid border', () => {
257
+ const style = getShorthandBorderStyle( completeBorder );
258
+ expect( style ).toEqual( '1px solid #000' );
259
+ } );
260
+
261
+ it( 'should generate correct style from partial border', () => {
262
+ const style = getShorthandBorderStyle( {
263
+ style: 'dashed',
264
+ width: '2px',
265
+ } );
266
+ expect( style ).toEqual( '2px dashed' );
267
+ } );
268
+
269
+ it( 'should default borders with either color or width to solid style', () => {
270
+ const widthOnlyStyle = getShorthandBorderStyle( { width: '5px' } );
271
+ const colorOnlyStyle = getShorthandBorderStyle( { color: '#000' } );
272
+
273
+ expect( widthOnlyStyle ).toEqual( '5px solid' );
274
+ expect( colorOnlyStyle ).toEqual( 'solid #000' );
275
+ } );
276
+
277
+ it( 'should not default border style to solid for zero width border', () => {
278
+ const zeroWidthStyle = getShorthandBorderStyle( { width: '0' } );
279
+ expect( zeroWidthStyle ).toEqual( '0' );
280
+ } );
281
+
282
+ it( 'should return undefined when no border or fallback supplied', () => {
283
+ expect( getShorthandBorderStyle() ).toBe( undefined );
284
+ } );
285
+
286
+ it( 'should return fallback border when border is undefined', () => {
287
+ const result = getShorthandBorderStyle( undefined, completeBorder );
288
+ expect( result ).toEqual( completeBorder );
289
+ } );
290
+
291
+ it( 'should return fallback border when empty border supplied', () => {
292
+ const result = getShorthandBorderStyle( {}, completeBorder );
293
+ expect( result ).toEqual( completeBorder );
294
+ } );
295
+
296
+ it( 'should use fallback border properties if missing from border', () => {
297
+ const result = getShorthandBorderStyle(
298
+ { width: '1em' },
299
+ { width: '5px', style: 'dashed', color: '#72aee6' }
300
+ );
301
+
302
+ expect( result ).toEqual( `1em dashed #72aee6` );
303
+ } );
304
+ } );
305
+ } );
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import type { Border, ColorProps, LabelProps } from '../border-control/types';
5
+
6
+ export type Borders = {
7
+ top?: Border;
8
+ right?: Border;
9
+ bottom?: Border;
10
+ left?: Border;
11
+ };
12
+
13
+ export type AnyBorder = Border | Borders | undefined;
14
+ export type BorderProp = keyof Border;
15
+ export type BorderSide = keyof Borders;
16
+
17
+ export type PopoverClassNames = {
18
+ linked?: string;
19
+ top?: string;
20
+ right?: string;
21
+ bottom?: string;
22
+ left?: string;
23
+ };
24
+
25
+ export type BorderBoxControlProps = ColorProps &
26
+ LabelProps & {
27
+ /**
28
+ * This controls whether to support border style selections.
29
+ */
30
+ enableStyle?: boolean;
31
+ /**
32
+ * A callback function invoked when any border value is changed. The value
33
+ * received may be a "flat" border object, one that has properties defining
34
+ * individual side borders, or `undefined`.
35
+ */
36
+ onChange: ( value: AnyBorder ) => void;
37
+ /**
38
+ * An object defining CSS classnames for all the inner `BorderControl`
39
+ * popover content.
40
+ */
41
+ popoverClassNames?: PopoverClassNames;
42
+ /**
43
+ * An object representing the current border configuration.
44
+ *
45
+ * This may be a "flat" border where the object has `color`, `style`, and
46
+ * `width` properties or a "split" border which defines the previous
47
+ * properties but for each side; `top`, `right`, `bottom`, and `left`.
48
+ */
49
+ value: AnyBorder;
50
+ };
51
+
52
+ export type LinkedButtonProps = {
53
+ /**
54
+ * This prop allows the `LinkedButton` to reflect whether the parent
55
+ * `BorderBoxControl` is currently displaying "linked" or "unlinked"
56
+ * border controls.
57
+ */
58
+ isLinked: boolean;
59
+ /**
60
+ * A callback invoked when this `LinkedButton` is clicked. It is used to
61
+ * toggle display between linked or split border controls within the parent
62
+ * `BorderBoxControl`.
63
+ */
64
+ onClick: () => void;
65
+ };
66
+
67
+ export type VisualizerProps = {
68
+ /**
69
+ * An object representing the current border configuration. It contains
70
+ * properties for each side, with each side an object reflecting the border
71
+ * color, style, and width.
72
+ */
73
+ value?: Borders;
74
+ };
75
+
76
+ export type SplitControlsProps = ColorProps & {
77
+ /**
78
+ * This controls whether to include border style options within the
79
+ * individual `BorderControl` components.
80
+ */
81
+ enableStyle?: boolean;
82
+ /**
83
+ * A callback that is invoked whenever an individual side's border has
84
+ * changed.
85
+ */
86
+ onChange: ( value: Border | undefined, side: BorderSide ) => void;
87
+ /**
88
+ * An object defining CSS classnames for the split side `BorderControl`s'
89
+ * popover content.
90
+ */
91
+ popoverClassNames?: PopoverClassNames;
92
+ /**
93
+ * An object representing the current border configuration. It contains
94
+ * properties for each side, with each side an object reflecting the border
95
+ * color, style, and width.
96
+ */
97
+ value?: Borders;
98
+ };
@@ -0,0 +1,151 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { CSSProperties } from 'react';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import type { Border } from '../border-control/types';
10
+ import type { AnyBorder, Borders, BorderProp, BorderSide } from './types';
11
+
12
+ const sides: BorderSide[] = [ 'top', 'right', 'bottom', 'left' ];
13
+ const borderProps: BorderProp[] = [ 'color', 'style', 'width' ];
14
+
15
+ export const isEmptyBorder = ( border?: Border ) => {
16
+ if ( ! border ) {
17
+ return true;
18
+ }
19
+ return ! borderProps.some( ( prop ) => border[ prop ] !== undefined );
20
+ };
21
+
22
+ export const isDefinedBorder = ( border: AnyBorder ) => {
23
+ // No border, no worries :)
24
+ if ( ! border ) {
25
+ return false;
26
+ }
27
+
28
+ // If we have individual borders per side within the border object we
29
+ // need to check whether any of those side borders have been set.
30
+ if ( hasSplitBorders( border ) ) {
31
+ const allSidesEmpty = sides.every( ( side ) =>
32
+ isEmptyBorder( ( border as Borders )[ side ] )
33
+ );
34
+
35
+ return ! allSidesEmpty;
36
+ }
37
+
38
+ // If we have a top-level border only, check if that is empty. e.g.
39
+ // { color: undefined, style: undefined, width: undefined }
40
+ // Border radius can still be set within the border object as it is
41
+ // handled separately.
42
+ return ! isEmptyBorder( border as Border );
43
+ };
44
+
45
+ export const isCompleteBorder = ( border?: Border ) => {
46
+ if ( ! border ) {
47
+ return false;
48
+ }
49
+
50
+ return borderProps.every( ( prop ) => border[ prop ] !== undefined );
51
+ };
52
+
53
+ export const hasSplitBorders = ( border: AnyBorder = {} ) => {
54
+ return Object.keys( border ).some(
55
+ ( side ) => sides.indexOf( side as BorderSide ) !== -1
56
+ );
57
+ };
58
+
59
+ export const hasMixedBorders = ( borders: AnyBorder ) => {
60
+ if ( ! hasSplitBorders( borders ) ) {
61
+ return false;
62
+ }
63
+
64
+ const shorthandBorders = sides.map( ( side: BorderSide ) =>
65
+ getShorthandBorderStyle( ( borders as Borders )?.[ side ] )
66
+ );
67
+
68
+ return ! shorthandBorders.every(
69
+ ( border ) => border === shorthandBorders[ 0 ]
70
+ );
71
+ };
72
+
73
+ export const getSplitBorders = ( border?: Border ) => {
74
+ if ( ! border || isEmptyBorder( border ) ) {
75
+ return undefined;
76
+ }
77
+
78
+ return {
79
+ top: border,
80
+ right: border,
81
+ bottom: border,
82
+ left: border,
83
+ };
84
+ };
85
+
86
+ export const getBorderDiff = ( original: Border, updated: Border ) => {
87
+ const diff: Border = {};
88
+
89
+ if ( original.color !== updated.color ) {
90
+ diff.color = updated.color;
91
+ }
92
+
93
+ if ( original.style !== updated.style ) {
94
+ diff.style = updated.style;
95
+ }
96
+
97
+ if ( original.width !== updated.width ) {
98
+ diff.width = updated.width;
99
+ }
100
+
101
+ return diff;
102
+ };
103
+
104
+ export const getCommonBorder = ( borders?: Borders ) => {
105
+ if ( ! borders ) {
106
+ return undefined;
107
+ }
108
+
109
+ const colors: ( CSSProperties[ 'borderColor' ] | undefined )[] = [];
110
+ const styles: ( CSSProperties[ 'borderStyle' ] | undefined )[] = [];
111
+ const widths: ( CSSProperties[ 'borderWidth' ] | undefined )[] = [];
112
+
113
+ sides.forEach( ( side ) => {
114
+ colors.push( borders[ side ]?.color );
115
+ styles.push( borders[ side ]?.style );
116
+ widths.push( borders[ side ]?.width );
117
+ } );
118
+
119
+ const allColorsMatch = colors.every( ( value ) => value === colors[ 0 ] );
120
+ const allStylesMatch = styles.every( ( value ) => value === styles[ 0 ] );
121
+ const allWidthsMatch = widths.every( ( value ) => value === widths[ 0 ] );
122
+
123
+ return {
124
+ color: allColorsMatch ? colors[ 0 ] : undefined,
125
+ style: allStylesMatch ? styles[ 0 ] : undefined,
126
+ width: allWidthsMatch ? widths[ 0 ] : undefined,
127
+ };
128
+ };
129
+
130
+ export const getShorthandBorderStyle = (
131
+ border?: Border,
132
+ fallbackBorder?: Border
133
+ ) => {
134
+ if ( isEmptyBorder( border ) ) {
135
+ return fallbackBorder;
136
+ }
137
+
138
+ const { color: fallbackColor, style: fallbackStyle, width: fallbackWidth } =
139
+ fallbackBorder || {};
140
+
141
+ const {
142
+ color = fallbackColor,
143
+ style = fallbackStyle,
144
+ width = fallbackWidth,
145
+ } = border as Border;
146
+
147
+ const hasVisibleBorder = ( !! width && width !== '0' ) || !! color;
148
+ const borderStyle = hasVisibleBorder ? style || 'solid' : style;
149
+
150
+ return [ width, borderStyle, color ].filter( Boolean ).join( ' ' );
151
+ };