@wordpress/components 32.0.2-next.v.0 → 32.1.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 (304) hide show
  1. package/CHANGELOG.md +5 -1
  2. package/build/alignment-matrix-control/cell.cjs +6 -121
  3. package/build/alignment-matrix-control/cell.cjs.map +2 -2
  4. package/build/alignment-matrix-control/icon.cjs +2 -3
  5. package/build/alignment-matrix-control/icon.cjs.map +2 -2
  6. package/build/alignment-matrix-control/index.cjs +6 -121
  7. package/build/alignment-matrix-control/index.cjs.map +2 -2
  8. package/build/angle-picker-control/angle-circle.cjs +6 -85
  9. package/build/angle-picker-control/angle-circle.cjs.map +2 -2
  10. package/build/autocomplete/autocompleter-ui.cjs +1 -2
  11. package/build/autocomplete/autocompleter-ui.cjs.map +2 -2
  12. package/build/box-control/input-control.cjs +8 -12
  13. package/build/box-control/input-control.cjs.map +2 -2
  14. package/build/button/index.cjs +6 -12
  15. package/build/button/index.cjs.map +2 -2
  16. package/build/calendar/date-calendar/index.cjs +2 -2
  17. package/build/calendar/date-calendar/index.cjs.map +2 -2
  18. package/build/calendar/date-range-calendar/index.cjs +4 -6
  19. package/build/calendar/date-range-calendar/index.cjs.map +2 -2
  20. package/build/card/card/hook.cjs +1 -2
  21. package/build/card/card/hook.cjs.map +2 -2
  22. package/build/color-palette/utils.cjs +2 -2
  23. package/build/color-palette/utils.cjs.map +2 -2
  24. package/build/combobox-control/index.cjs +1 -2
  25. package/build/combobox-control/index.cjs.map +2 -2
  26. package/build/composite/group-label.cjs +1 -2
  27. package/build/composite/group-label.cjs.map +2 -2
  28. package/build/composite/group.cjs +1 -2
  29. package/build/composite/group.cjs.map +2 -2
  30. package/build/composite/hover.cjs +1 -2
  31. package/build/composite/hover.cjs.map +2 -2
  32. package/build/composite/index.cjs +1 -1
  33. package/build/composite/index.cjs.map +2 -2
  34. package/build/composite/item.cjs +1 -2
  35. package/build/composite/item.cjs.map +2 -2
  36. package/build/composite/legacy/index.cjs +1 -2
  37. package/build/composite/legacy/index.cjs.map +2 -2
  38. package/build/composite/row.cjs +1 -2
  39. package/build/composite/row.cjs.map +2 -2
  40. package/build/composite/typeahead.cjs +1 -2
  41. package/build/composite/typeahead.cjs.map +2 -2
  42. package/build/confirm-dialog/component.cjs +2 -2
  43. package/build/confirm-dialog/component.cjs.map +2 -2
  44. package/build/context/context-system-provider.cjs +1 -1
  45. package/build/context/context-system-provider.cjs.map +2 -2
  46. package/build/custom-gradient-picker/index.cjs +1 -2
  47. package/build/custom-gradient-picker/index.cjs.map +2 -2
  48. package/build/custom-gradient-picker/utils.cjs +1 -1
  49. package/build/custom-gradient-picker/utils.cjs.map +2 -2
  50. package/build/custom-select-control/index.cjs +2 -3
  51. package/build/custom-select-control/index.cjs.map +2 -2
  52. package/build/custom-select-control-v2/custom-select.cjs +1 -1
  53. package/build/custom-select-control-v2/custom-select.cjs.map +2 -2
  54. package/build/custom-select-control-v2/item.cjs +2 -3
  55. package/build/custom-select-control-v2/item.cjs.map +2 -2
  56. package/build/date-time/date/index.cjs +1 -1
  57. package/build/date-time/date/index.cjs.map +2 -2
  58. package/build/date-time/time/index.cjs +2 -2
  59. package/build/date-time/time/index.cjs.map +2 -2
  60. package/build/date-time/utils.cjs +1 -2
  61. package/build/date-time/utils.cjs.map +2 -2
  62. package/build/divider/styles.cjs +2 -2
  63. package/build/divider/styles.cjs.map +2 -2
  64. package/build/dropdown-menu/index.cjs +2 -3
  65. package/build/dropdown-menu/index.cjs.map +2 -2
  66. package/build/duotone-picker/duotone-picker.cjs +1 -1
  67. package/build/duotone-picker/duotone-picker.cjs.map +2 -2
  68. package/build/flex/flex/hook.cjs +1 -1
  69. package/build/flex/flex/hook.cjs.map +2 -2
  70. package/build/focal-point-picker/index.cjs +1 -2
  71. package/build/focal-point-picker/index.cjs.map +2 -2
  72. package/build/font-size-picker/font-size-picker-select.cjs +1 -2
  73. package/build/font-size-picker/font-size-picker-select.cjs.map +2 -2
  74. package/build/font-size-picker/index.cjs +2 -2
  75. package/build/font-size-picker/index.cjs.map +2 -2
  76. package/build/guide/index.cjs +2 -3
  77. package/build/guide/index.cjs.map +2 -2
  78. package/build/higher-order/navigate-regions/index.cjs +1 -2
  79. package/build/higher-order/navigate-regions/index.cjs.map +2 -2
  80. package/build/input-control/input-field.cjs +1 -1
  81. package/build/input-control/input-field.cjs.map +2 -2
  82. package/build/input-control/reducer/reducer.cjs +2 -4
  83. package/build/input-control/reducer/reducer.cjs.map +2 -2
  84. package/build/keyboard-shortcuts/index.cjs +1 -1
  85. package/build/keyboard-shortcuts/index.cjs.map +2 -2
  86. package/build/menu/index.cjs +1 -1
  87. package/build/menu/index.cjs.map +2 -2
  88. package/build/menu/item.cjs +1 -1
  89. package/build/menu/item.cjs.map +2 -2
  90. package/build/menu/popover.cjs +2 -2
  91. package/build/menu/popover.cjs.map +2 -2
  92. package/build/modal/index.cjs +2 -4
  93. package/build/modal/index.cjs.map +2 -2
  94. package/build/navigator/navigator/component.cjs +8 -13
  95. package/build/navigator/navigator/component.cjs.map +2 -2
  96. package/build/navigator/navigator-screen/component.cjs +1 -1
  97. package/build/navigator/navigator-screen/component.cjs.map +2 -2
  98. package/build/number-control/index.cjs +2 -3
  99. package/build/number-control/index.cjs.map +2 -2
  100. package/build/palette-edit/index.cjs +3 -4
  101. package/build/palette-edit/index.cjs.map +2 -2
  102. package/build/popover/index.cjs +1 -2
  103. package/build/popover/index.cjs.map +2 -2
  104. package/build/popover/overlay-middlewares.cjs +1 -2
  105. package/build/popover/overlay-middlewares.cjs.map +2 -2
  106. package/build/popover/utils.cjs +3 -8
  107. package/build/popover/utils.cjs.map +2 -2
  108. package/build/private-apis.cjs +1 -0
  109. package/build/private-apis.cjs.map +2 -2
  110. package/build/radio-group/index.cjs +1 -1
  111. package/build/radio-group/index.cjs.map +2 -2
  112. package/build/range-control/index.cjs +4 -4
  113. package/build/range-control/index.cjs.map +2 -2
  114. package/build/range-control/utils.cjs +1 -1
  115. package/build/range-control/utils.cjs.map +2 -2
  116. package/build/search-control/index.cjs +3 -3
  117. package/build/search-control/index.cjs.map +2 -2
  118. package/build/slot-fill/fill.cjs +1 -2
  119. package/build/slot-fill/fill.cjs.map +2 -2
  120. package/build/slot-fill/slot.cjs +1 -2
  121. package/build/slot-fill/slot.cjs.map +2 -2
  122. package/build/tabs/tab.cjs +1 -2
  123. package/build/tabs/tab.cjs.map +2 -2
  124. package/build/tabs/tablist.cjs +7 -11
  125. package/build/tabs/tablist.cjs.map +2 -2
  126. package/build/toggle-group-control/toggle-group-control/as-radio-group.cjs +1 -1
  127. package/build/toggle-group-control/toggle-group-control/as-radio-group.cjs.map +2 -2
  128. package/build/toggle-group-control/toggle-group-control/utils.cjs +1 -1
  129. package/build/toggle-group-control/toggle-group-control/utils.cjs.map +2 -2
  130. package/build/tree-grid/index.cjs +1 -2
  131. package/build/tree-grid/index.cjs.map +2 -2
  132. package/build/unit-control/index.cjs +4 -5
  133. package/build/unit-control/index.cjs.map +2 -2
  134. package/build/unit-control/utils.cjs +2 -2
  135. package/build/unit-control/utils.cjs.map +2 -2
  136. package/build/utils/element-rect.cjs +3 -4
  137. package/build/utils/element-rect.cjs.map +2 -2
  138. package/build/utils/font.cjs +1 -2
  139. package/build/utils/font.cjs.map +2 -2
  140. package/build/utils/strings.cjs +1 -2
  141. package/build/utils/strings.cjs.map +2 -2
  142. package/build/utils/use-deprecated-props.cjs +1 -1
  143. package/build/utils/use-deprecated-props.cjs.map +2 -2
  144. package/build/utils/values.cjs +1 -2
  145. package/build/utils/values.cjs.map +2 -2
  146. package/build/validated-form-controls/components/combobox-control.cjs +1 -1
  147. package/build/validated-form-controls/components/combobox-control.cjs.map +2 -2
  148. package/build/validated-form-controls/components/toggle-control.cjs +1 -1
  149. package/build/validated-form-controls/components/toggle-control.cjs.map +2 -2
  150. package/build/validated-form-controls/control-with-error.cjs +3 -6
  151. package/build/validated-form-controls/control-with-error.cjs.map +2 -2
  152. package/build-module/alignment-matrix-control/cell.mjs +6 -121
  153. package/build-module/alignment-matrix-control/cell.mjs.map +2 -2
  154. package/build-module/alignment-matrix-control/icon.mjs +2 -3
  155. package/build-module/alignment-matrix-control/icon.mjs.map +2 -2
  156. package/build-module/alignment-matrix-control/index.mjs +6 -121
  157. package/build-module/alignment-matrix-control/index.mjs.map +2 -2
  158. package/build-module/angle-picker-control/angle-circle.mjs +6 -85
  159. package/build-module/angle-picker-control/angle-circle.mjs.map +2 -2
  160. package/build-module/autocomplete/autocompleter-ui.mjs +1 -2
  161. package/build-module/autocomplete/autocompleter-ui.mjs.map +2 -2
  162. package/build-module/box-control/input-control.mjs +8 -12
  163. package/build-module/box-control/input-control.mjs.map +2 -2
  164. package/build-module/button/index.mjs +6 -12
  165. package/build-module/button/index.mjs.map +2 -2
  166. package/build-module/calendar/date-calendar/index.mjs +2 -2
  167. package/build-module/calendar/date-calendar/index.mjs.map +2 -2
  168. package/build-module/calendar/date-range-calendar/index.mjs +4 -6
  169. package/build-module/calendar/date-range-calendar/index.mjs.map +2 -2
  170. package/build-module/card/card/hook.mjs +1 -2
  171. package/build-module/card/card/hook.mjs.map +2 -2
  172. package/build-module/color-palette/utils.mjs +2 -2
  173. package/build-module/color-palette/utils.mjs.map +2 -2
  174. package/build-module/combobox-control/index.mjs +1 -2
  175. package/build-module/combobox-control/index.mjs.map +2 -2
  176. package/build-module/composite/group-label.mjs +1 -2
  177. package/build-module/composite/group-label.mjs.map +2 -2
  178. package/build-module/composite/group.mjs +1 -2
  179. package/build-module/composite/group.mjs.map +2 -2
  180. package/build-module/composite/hover.mjs +1 -2
  181. package/build-module/composite/hover.mjs.map +2 -2
  182. package/build-module/composite/index.mjs +1 -1
  183. package/build-module/composite/index.mjs.map +2 -2
  184. package/build-module/composite/item.mjs +1 -2
  185. package/build-module/composite/item.mjs.map +2 -2
  186. package/build-module/composite/legacy/index.mjs +1 -2
  187. package/build-module/composite/legacy/index.mjs.map +2 -2
  188. package/build-module/composite/row.mjs +1 -2
  189. package/build-module/composite/row.mjs.map +2 -2
  190. package/build-module/composite/typeahead.mjs +1 -2
  191. package/build-module/composite/typeahead.mjs.map +2 -2
  192. package/build-module/confirm-dialog/component.mjs +2 -2
  193. package/build-module/confirm-dialog/component.mjs.map +2 -2
  194. package/build-module/context/context-system-provider.mjs +1 -1
  195. package/build-module/context/context-system-provider.mjs.map +2 -2
  196. package/build-module/custom-gradient-picker/index.mjs +1 -2
  197. package/build-module/custom-gradient-picker/index.mjs.map +2 -2
  198. package/build-module/custom-gradient-picker/utils.mjs +1 -1
  199. package/build-module/custom-gradient-picker/utils.mjs.map +2 -2
  200. package/build-module/custom-select-control/index.mjs +2 -3
  201. package/build-module/custom-select-control/index.mjs.map +2 -2
  202. package/build-module/custom-select-control-v2/custom-select.mjs +1 -1
  203. package/build-module/custom-select-control-v2/custom-select.mjs.map +2 -2
  204. package/build-module/custom-select-control-v2/item.mjs +2 -3
  205. package/build-module/custom-select-control-v2/item.mjs.map +2 -2
  206. package/build-module/date-time/date/index.mjs +1 -1
  207. package/build-module/date-time/date/index.mjs.map +2 -2
  208. package/build-module/date-time/time/index.mjs +2 -2
  209. package/build-module/date-time/time/index.mjs.map +2 -2
  210. package/build-module/date-time/utils.mjs +1 -2
  211. package/build-module/date-time/utils.mjs.map +2 -2
  212. package/build-module/divider/styles.mjs +2 -2
  213. package/build-module/divider/styles.mjs.map +2 -2
  214. package/build-module/dropdown-menu/index.mjs +2 -3
  215. package/build-module/dropdown-menu/index.mjs.map +2 -2
  216. package/build-module/duotone-picker/duotone-picker.mjs +1 -1
  217. package/build-module/duotone-picker/duotone-picker.mjs.map +2 -2
  218. package/build-module/flex/flex/hook.mjs +1 -1
  219. package/build-module/flex/flex/hook.mjs.map +2 -2
  220. package/build-module/focal-point-picker/index.mjs +1 -2
  221. package/build-module/focal-point-picker/index.mjs.map +2 -2
  222. package/build-module/font-size-picker/font-size-picker-select.mjs +1 -2
  223. package/build-module/font-size-picker/font-size-picker-select.mjs.map +2 -2
  224. package/build-module/font-size-picker/index.mjs +2 -2
  225. package/build-module/font-size-picker/index.mjs.map +2 -2
  226. package/build-module/guide/index.mjs +2 -3
  227. package/build-module/guide/index.mjs.map +2 -2
  228. package/build-module/higher-order/navigate-regions/index.mjs +1 -2
  229. package/build-module/higher-order/navigate-regions/index.mjs.map +2 -2
  230. package/build-module/input-control/input-field.mjs +1 -1
  231. package/build-module/input-control/input-field.mjs.map +2 -2
  232. package/build-module/input-control/reducer/reducer.mjs +2 -4
  233. package/build-module/input-control/reducer/reducer.mjs.map +2 -2
  234. package/build-module/keyboard-shortcuts/index.mjs +1 -1
  235. package/build-module/keyboard-shortcuts/index.mjs.map +2 -2
  236. package/build-module/menu/index.mjs +1 -1
  237. package/build-module/menu/index.mjs.map +2 -2
  238. package/build-module/menu/item.mjs +1 -1
  239. package/build-module/menu/item.mjs.map +2 -2
  240. package/build-module/menu/popover.mjs +2 -2
  241. package/build-module/menu/popover.mjs.map +2 -2
  242. package/build-module/modal/index.mjs +2 -4
  243. package/build-module/modal/index.mjs.map +2 -2
  244. package/build-module/navigator/navigator/component.mjs +8 -13
  245. package/build-module/navigator/navigator/component.mjs.map +2 -2
  246. package/build-module/navigator/navigator-screen/component.mjs +1 -1
  247. package/build-module/navigator/navigator-screen/component.mjs.map +2 -2
  248. package/build-module/number-control/index.mjs +2 -3
  249. package/build-module/number-control/index.mjs.map +2 -2
  250. package/build-module/palette-edit/index.mjs +3 -4
  251. package/build-module/palette-edit/index.mjs.map +2 -2
  252. package/build-module/popover/index.mjs +1 -2
  253. package/build-module/popover/index.mjs.map +2 -2
  254. package/build-module/popover/overlay-middlewares.mjs +1 -2
  255. package/build-module/popover/overlay-middlewares.mjs.map +2 -2
  256. package/build-module/popover/utils.mjs +3 -8
  257. package/build-module/popover/utils.mjs.map +2 -2
  258. package/build-module/private-apis.mjs +2 -1
  259. package/build-module/private-apis.mjs.map +2 -2
  260. package/build-module/radio-group/index.mjs +1 -1
  261. package/build-module/radio-group/index.mjs.map +2 -2
  262. package/build-module/range-control/index.mjs +4 -4
  263. package/build-module/range-control/index.mjs.map +2 -2
  264. package/build-module/range-control/utils.mjs +1 -1
  265. package/build-module/range-control/utils.mjs.map +2 -2
  266. package/build-module/search-control/index.mjs +3 -3
  267. package/build-module/search-control/index.mjs.map +2 -2
  268. package/build-module/slot-fill/fill.mjs +1 -2
  269. package/build-module/slot-fill/fill.mjs.map +2 -2
  270. package/build-module/slot-fill/slot.mjs +1 -2
  271. package/build-module/slot-fill/slot.mjs.map +2 -2
  272. package/build-module/tabs/tab.mjs +1 -2
  273. package/build-module/tabs/tab.mjs.map +2 -2
  274. package/build-module/tabs/tablist.mjs +7 -11
  275. package/build-module/tabs/tablist.mjs.map +2 -2
  276. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.mjs +1 -1
  277. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.mjs.map +2 -2
  278. package/build-module/toggle-group-control/toggle-group-control/utils.mjs +1 -1
  279. package/build-module/toggle-group-control/toggle-group-control/utils.mjs.map +2 -2
  280. package/build-module/tree-grid/index.mjs +1 -2
  281. package/build-module/tree-grid/index.mjs.map +2 -2
  282. package/build-module/unit-control/index.mjs +4 -5
  283. package/build-module/unit-control/index.mjs.map +2 -2
  284. package/build-module/unit-control/utils.mjs +2 -2
  285. package/build-module/unit-control/utils.mjs.map +2 -2
  286. package/build-module/utils/element-rect.mjs +3 -4
  287. package/build-module/utils/element-rect.mjs.map +2 -2
  288. package/build-module/utils/font.mjs +1 -2
  289. package/build-module/utils/font.mjs.map +2 -2
  290. package/build-module/utils/strings.mjs +1 -2
  291. package/build-module/utils/strings.mjs.map +2 -2
  292. package/build-module/utils/use-deprecated-props.mjs +1 -1
  293. package/build-module/utils/use-deprecated-props.mjs.map +2 -2
  294. package/build-module/utils/values.mjs +1 -2
  295. package/build-module/utils/values.mjs.map +2 -2
  296. package/build-module/validated-form-controls/components/combobox-control.mjs +1 -1
  297. package/build-module/validated-form-controls/components/combobox-control.mjs.map +2 -2
  298. package/build-module/validated-form-controls/components/toggle-control.mjs +1 -1
  299. package/build-module/validated-form-controls/components/toggle-control.mjs.map +2 -2
  300. package/build-module/validated-form-controls/control-with-error.mjs +3 -6
  301. package/build-module/validated-form-controls/control-with-error.mjs.map +2 -2
  302. package/build-types/private-apis.d.ts.map +1 -1
  303. package/package.json +21 -21
  304. package/src/private-apis.ts +2 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/slot-fill/slot.tsx"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\n\n/**\n * WordPress dependencies\n */\nimport { useObservableValue } from '@wordpress/compose';\nimport { useContext, useLayoutEffect, useRef, Children, cloneElement, isEmptyElement } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport SlotFillContext from './context';\nimport { Fragment as _Fragment, jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Whether the argument is a function.\n *\n * @param maybeFunc The argument to check.\n * @return True if the argument is a function, false otherwise.\n */\nfunction isFunction(maybeFunc) {\n return typeof maybeFunc === 'function';\n}\nfunction addKeysToChildren(children) {\n return Children.map(children, (child, childIndex) => {\n if (!child || typeof child === 'string') {\n return child;\n }\n let childKey = childIndex;\n if (typeof child === 'object' && 'key' in child && child?.key) {\n childKey = child.key;\n }\n return cloneElement(child, {\n key: childKey\n });\n });\n}\nfunction Slot(props) {\n var _useObservableValue;\n const {\n name,\n children,\n fillProps = {}\n } = props;\n const registry = useContext(SlotFillContext);\n const instanceRef = useRef({});\n useLayoutEffect(() => {\n const instance = instanceRef.current;\n registry.registerSlot(name, {\n type: 'children',\n instance\n });\n return () => registry.unregisterSlot(name, instance);\n }, [registry, name]);\n let fills = (_useObservableValue = useObservableValue(registry.fills, name)) !== null && _useObservableValue !== void 0 ? _useObservableValue : [];\n const currentSlot = useObservableValue(registry.slots, name);\n\n // Fills should only be rendered in the currently registered instance of the slot.\n if (!currentSlot || currentSlot.instance !== instanceRef.current) {\n fills = [];\n }\n const renderedFills = fills.map(fill => {\n const fillChildren = isFunction(fill.children) ? fill.children(fillProps) : fill.children;\n return addKeysToChildren(fillChildren);\n }).filter(\n // In some cases fills are rendered only when some conditions apply.\n // This ensures that we only use non-empty fills when rendering, i.e.,\n // it allows us to render wrappers only when the fills are actually present.\n element => !isEmptyElement(element));\n return /*#__PURE__*/_jsx(_Fragment, {\n children: isFunction(children) ? children(renderedFills) : renderedFills\n });\n}\nexport default Slot;"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,qBAAmC;AACnC,qBAA4F;AAK5F,qBAA4B;AAC5B,yBAAmD;AAOnD,SAAS,WAAW,WAAW;AAC7B,SAAO,OAAO,cAAc;AAC9B;AACA,SAAS,kBAAkB,UAAU;AACnC,SAAO,wBAAS,IAAI,UAAU,CAAC,OAAO,eAAe;AACnD,QAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,aAAO;AAAA,IACT;AACA,QAAI,WAAW;AACf,QAAI,OAAO,UAAU,YAAY,SAAS,SAAS,OAAO,KAAK;AAC7D,iBAAW,MAAM;AAAA,IACnB;AACA,eAAO,6BAAa,OAAO;AAAA,MACzB,KAAK;AAAA,IACP,CAAC;AAAA,EACH,CAAC;AACH;AACA,SAAS,KAAK,OAAO;AACnB,MAAI;AACJ,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,YAAY,CAAC;AAAA,EACf,IAAI;AACJ,QAAM,eAAW,2BAAW,eAAAA,OAAe;AAC3C,QAAM,kBAAc,uBAAO,CAAC,CAAC;AAC7B,sCAAgB,MAAM;AACpB,UAAM,WAAW,YAAY;AAC7B,aAAS,aAAa,MAAM;AAAA,MAC1B,MAAM;AAAA,MACN;AAAA,IACF,CAAC;AACD,WAAO,MAAM,SAAS,eAAe,MAAM,QAAQ;AAAA,EACrD,GAAG,CAAC,UAAU,IAAI,CAAC;AACnB,MAAI,SAAS,0BAAsB,mCAAmB,SAAS,OAAO,IAAI,OAAO,QAAQ,wBAAwB,SAAS,sBAAsB,CAAC;AACjJ,QAAM,kBAAc,mCAAmB,SAAS,OAAO,IAAI;AAG3D,MAAI,CAAC,eAAe,YAAY,aAAa,YAAY,SAAS;AAChE,YAAQ,CAAC;AAAA,EACX;AACA,QAAM,gBAAgB,MAAM,IAAI,UAAQ;AACtC,UAAM,eAAe,WAAW,KAAK,QAAQ,IAAI,KAAK,SAAS,SAAS,IAAI,KAAK;AACjF,WAAO,kBAAkB,YAAY;AAAA,EACvC,CAAC,EAAE;AAAA;AAAA;AAAA;AAAA,IAIH,aAAW,KAAC,+BAAe,OAAO;AAAA,EAAC;AACnC,SAAoB,uCAAAC,KAAK,mBAAAC,UAAW;AAAA,IAClC,UAAU,WAAW,QAAQ,IAAI,SAAS,aAAa,IAAI;AAAA,EAC7D,CAAC;AACH;AACA,IAAO,eAAQ;",
4
+ "sourcesContent": ["/**\n * External dependencies\n */\n\n/**\n * WordPress dependencies\n */\nimport { useObservableValue } from '@wordpress/compose';\nimport { useContext, useLayoutEffect, useRef, Children, cloneElement, isEmptyElement } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport SlotFillContext from './context';\nimport { Fragment as _Fragment, jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Whether the argument is a function.\n *\n * @param maybeFunc The argument to check.\n * @return True if the argument is a function, false otherwise.\n */\nfunction isFunction(maybeFunc) {\n return typeof maybeFunc === 'function';\n}\nfunction addKeysToChildren(children) {\n return Children.map(children, (child, childIndex) => {\n if (!child || typeof child === 'string') {\n return child;\n }\n let childKey = childIndex;\n if (typeof child === 'object' && 'key' in child && child?.key) {\n childKey = child.key;\n }\n return cloneElement(child, {\n key: childKey\n });\n });\n}\nfunction Slot(props) {\n const {\n name,\n children,\n fillProps = {}\n } = props;\n const registry = useContext(SlotFillContext);\n const instanceRef = useRef({});\n useLayoutEffect(() => {\n const instance = instanceRef.current;\n registry.registerSlot(name, {\n type: 'children',\n instance\n });\n return () => registry.unregisterSlot(name, instance);\n }, [registry, name]);\n let fills = useObservableValue(registry.fills, name) ?? [];\n const currentSlot = useObservableValue(registry.slots, name);\n\n // Fills should only be rendered in the currently registered instance of the slot.\n if (!currentSlot || currentSlot.instance !== instanceRef.current) {\n fills = [];\n }\n const renderedFills = fills.map(fill => {\n const fillChildren = isFunction(fill.children) ? fill.children(fillProps) : fill.children;\n return addKeysToChildren(fillChildren);\n }).filter(\n // In some cases fills are rendered only when some conditions apply.\n // This ensures that we only use non-empty fills when rendering, i.e.,\n // it allows us to render wrappers only when the fills are actually present.\n element => !isEmptyElement(element));\n return /*#__PURE__*/_jsx(_Fragment, {\n children: isFunction(children) ? children(renderedFills) : renderedFills\n });\n}\nexport default Slot;"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,qBAAmC;AACnC,qBAA4F;AAK5F,qBAA4B;AAC5B,yBAAmD;AAOnD,SAAS,WAAW,WAAW;AAC7B,SAAO,OAAO,cAAc;AAC9B;AACA,SAAS,kBAAkB,UAAU;AACnC,SAAO,wBAAS,IAAI,UAAU,CAAC,OAAO,eAAe;AACnD,QAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,aAAO;AAAA,IACT;AACA,QAAI,WAAW;AACf,QAAI,OAAO,UAAU,YAAY,SAAS,SAAS,OAAO,KAAK;AAC7D,iBAAW,MAAM;AAAA,IACnB;AACA,eAAO,6BAAa,OAAO;AAAA,MACzB,KAAK;AAAA,IACP,CAAC;AAAA,EACH,CAAC;AACH;AACA,SAAS,KAAK,OAAO;AACnB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,YAAY,CAAC;AAAA,EACf,IAAI;AACJ,QAAM,eAAW,2BAAW,eAAAA,OAAe;AAC3C,QAAM,kBAAc,uBAAO,CAAC,CAAC;AAC7B,sCAAgB,MAAM;AACpB,UAAM,WAAW,YAAY;AAC7B,aAAS,aAAa,MAAM;AAAA,MAC1B,MAAM;AAAA,MACN;AAAA,IACF,CAAC;AACD,WAAO,MAAM,SAAS,eAAe,MAAM,QAAQ;AAAA,EACrD,GAAG,CAAC,UAAU,IAAI,CAAC;AACnB,MAAI,YAAQ,mCAAmB,SAAS,OAAO,IAAI,KAAK,CAAC;AACzD,QAAM,kBAAc,mCAAmB,SAAS,OAAO,IAAI;AAG3D,MAAI,CAAC,eAAe,YAAY,aAAa,YAAY,SAAS;AAChE,YAAQ,CAAC;AAAA,EACX;AACA,QAAM,gBAAgB,MAAM,IAAI,UAAQ;AACtC,UAAM,eAAe,WAAW,KAAK,QAAQ,IAAI,KAAK,SAAS,SAAS,IAAI,KAAK;AACjF,WAAO,kBAAkB,YAAY;AAAA,EACvC,CAAC,EAAE;AAAA;AAAA;AAAA;AAAA,IAIH,aAAW,KAAC,+BAAe,OAAO;AAAA,EAAC;AACnC,SAAoB,uCAAAC,KAAK,mBAAAC,UAAW;AAAA,IAClC,UAAU,WAAW,QAAQ,IAAI,SAAS,aAAa,IAAI;AAAA,EAC7D,CAAC;AACH;AACA,IAAO,eAAQ;",
6
6
  "names": ["SlotFillContext", "_jsx", "_Fragment"]
7
7
  }
@@ -46,11 +46,10 @@ var Tab = (0, import_element.forwardRef)(function Tab2({
46
46
  render,
47
47
  ...otherProps
48
48
  }, ref) {
49
- var _useTabsContext;
50
49
  const {
51
50
  store,
52
51
  instanceId
53
- } = (_useTabsContext = (0, import_context.useTabsContext)()) !== null && _useTabsContext !== void 0 ? _useTabsContext : {};
52
+ } = (0, import_context.useTabsContext)() ?? {};
54
53
  if (!store) {
55
54
  globalThis.SCRIPT_DEBUG === true ? (0, import_warning.default)("`Tabs.Tab` must be wrapped in a `Tabs` component.") : void 0;
56
55
  return null;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/tabs/tab.tsx"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\n\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\n\nimport warning from '@wordpress/warning';\nimport { useTabsContext } from './context';\nimport { Tab as StyledTab, TabChildren as StyledTabChildren, TabChevron as StyledTabChevron } from './styles';\nimport { chevronRight } from '@wordpress/icons';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport const Tab = forwardRef(function Tab({\n children,\n tabId,\n disabled,\n render,\n ...otherProps\n}, ref) {\n var _useTabsContext;\n const {\n store,\n instanceId\n } = (_useTabsContext = useTabsContext()) !== null && _useTabsContext !== void 0 ? _useTabsContext : {};\n if (!store) {\n globalThis.SCRIPT_DEBUG === true ? warning('`Tabs.Tab` must be wrapped in a `Tabs` component.') : void 0;\n return null;\n }\n const instancedTabId = `${instanceId}-${tabId}`;\n return /*#__PURE__*/_jsxs(StyledTab, {\n ref: ref,\n store: store,\n id: instancedTabId,\n disabled: disabled,\n render: render,\n ...otherProps,\n children: [/*#__PURE__*/_jsx(StyledTabChildren, {\n children: children\n }), /*#__PURE__*/_jsx(StyledTabChevron, {\n icon: chevronRight\n })]\n });\n});"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,qBAA2B;AAM3B,qBAAoB;AACpB,qBAA+B;AAC/B,oBAAmG;AACnG,mBAA6B;AAC7B,yBAA2C;AACpC,IAAM,UAAM,2BAAW,SAASA,KAAI;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAG,KAAK;AACN,MAAI;AACJ,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,KAAK,sBAAkB,+BAAe,OAAO,QAAQ,oBAAoB,SAAS,kBAAkB,CAAC;AACrG,MAAI,CAAC,OAAO;AACV,eAAW,iBAAiB,WAAO,eAAAC,SAAQ,mDAAmD,IAAI;AAClG,WAAO;AAAA,EACT;AACA,QAAM,iBAAiB,GAAG,UAAU,IAAI,KAAK;AAC7C,SAAoB,uCAAAC,MAAM,cAAAC,KAAW;AAAA,IACnC;AAAA,IACA;AAAA,IACA,IAAI;AAAA,IACJ;AAAA,IACA;AAAA,IACA,GAAG;AAAA,IACH,UAAU,CAAc,uCAAAC,KAAK,cAAAC,aAAmB;AAAA,MAC9C;AAAA,IACF,CAAC,GAAgB,uCAAAD,KAAK,cAAAE,YAAkB;AAAA,MACtC,MAAM;AAAA,IACR,CAAC,CAAC;AAAA,EACJ,CAAC;AACH,CAAC;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\n\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\n\nimport warning from '@wordpress/warning';\nimport { useTabsContext } from './context';\nimport { Tab as StyledTab, TabChildren as StyledTabChildren, TabChevron as StyledTabChevron } from './styles';\nimport { chevronRight } from '@wordpress/icons';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport const Tab = forwardRef(function Tab({\n children,\n tabId,\n disabled,\n render,\n ...otherProps\n}, ref) {\n const {\n store,\n instanceId\n } = useTabsContext() ?? {};\n if (!store) {\n globalThis.SCRIPT_DEBUG === true ? warning('`Tabs.Tab` must be wrapped in a `Tabs` component.') : void 0;\n return null;\n }\n const instancedTabId = `${instanceId}-${tabId}`;\n return /*#__PURE__*/_jsxs(StyledTab, {\n ref: ref,\n store: store,\n id: instancedTabId,\n disabled: disabled,\n render: render,\n ...otherProps,\n children: [/*#__PURE__*/_jsx(StyledTabChildren, {\n children: children\n }), /*#__PURE__*/_jsx(StyledTabChevron, {\n icon: chevronRight\n })]\n });\n});"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,qBAA2B;AAM3B,qBAAoB;AACpB,qBAA+B;AAC/B,oBAAmG;AACnG,mBAA6B;AAC7B,yBAA2C;AACpC,IAAM,UAAM,2BAAW,SAASA,KAAI;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAG,KAAK;AACN,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,QAAI,+BAAe,KAAK,CAAC;AACzB,MAAI,CAAC,OAAO;AACV,eAAW,iBAAiB,WAAO,eAAAC,SAAQ,mDAAmD,IAAI;AAClG,WAAO;AAAA,EACT;AACA,QAAM,iBAAiB,GAAG,UAAU,IAAI,KAAK;AAC7C,SAAoB,uCAAAC,MAAM,cAAAC,KAAW;AAAA,IACnC;AAAA,IACA;AAAA,IACA,IAAI;AAAA,IACJ;AAAA,IACA;AAAA,IACA,GAAG;AAAA,IACH,UAAU,CAAc,uCAAAC,KAAK,cAAAC,aAAmB;AAAA,MAC9C;AAAA,IACF,CAAC,GAAgB,uCAAAD,KAAK,cAAAE,YAAkB;AAAA,MACtC,MAAM;AAAA,IACR,CAAC,CAAC;AAAA,EACJ,CAAC;AACH,CAAC;",
6
6
  "names": ["Tab", "warning", "_jsxs", "StyledTab", "_jsx", "StyledTabChildren", "StyledTabChevron"]
7
7
  }
@@ -81,10 +81,9 @@ var TabList = (0, import_element.forwardRef)(function TabList2({
81
81
  children,
82
82
  ...otherProps
83
83
  }, ref) {
84
- var _useTabsContext;
85
84
  const {
86
85
  store
87
- } = (_useTabsContext = (0, import_context.useTabsContext)()) !== null && _useTabsContext !== void 0 ? _useTabsContext : {};
86
+ } = (0, import_context.useTabsContext)() ?? {};
88
87
  const selectedId = Ariakit.useStoreState(store, "selectedId");
89
88
  const activeId = Ariakit.useStoreState(store, "activeId");
90
89
  const selectOnMove = Ariakit.useStoreState(store, "selectOnMove");
@@ -121,15 +120,12 @@ var TabList = (0, import_element.forwardRef)(function TabList2({
121
120
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styles.StyledTabList, {
122
121
  ref: refs,
123
122
  store,
124
- render: (props) => {
125
- var _props$tabIndex;
126
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
127
- ...props,
128
- // Fallback to -1 to prevent browsers from making the tablist
129
- // tabbable when it is a scrolling container.
130
- tabIndex: (_props$tabIndex = props.tabIndex) !== null && _props$tabIndex !== void 0 ? _props$tabIndex : -1
131
- });
132
- },
123
+ render: (props) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
124
+ ...props,
125
+ // Fallback to -1 to prevent browsers from making the tablist
126
+ // tabbable when it is a scrolling container.
127
+ tabIndex: props.tabIndex ?? -1
128
+ }),
133
129
  onBlur,
134
130
  "data-select-on-move": selectOnMove ? "true" : "false",
135
131
  ...otherProps,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/tabs/tablist.tsx"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport * as Ariakit from '@ariakit/react';\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport warning from '@wordpress/warning';\nimport { forwardRef, useLayoutEffect, useState } from '@wordpress/element';\nimport { useMergeRefs } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\n\nimport { useTabsContext } from './context';\nimport { StyledTabList } from './styles';\nimport { useTrackElementOffsetRect } from '../utils/element-rect';\nimport { useTrackOverflow } from './use-track-overflow';\nimport { useAnimatedOffsetRect } from '../utils/hooks/use-animated-offset-rect';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst DEFAULT_SCROLL_MARGIN = 24;\n\n/**\n * Scrolls a given parent element so that a given rect is visible.\n *\n * The scroll is updated initially and whenever the rect changes.\n */\nfunction useScrollRectIntoView(parent, rect, {\n margin = DEFAULT_SCROLL_MARGIN\n} = {}) {\n useLayoutEffect(() => {\n if (!parent || !rect) {\n return;\n }\n const {\n scrollLeft: parentScroll\n } = parent;\n const parentWidth = parent.getBoundingClientRect().width;\n const {\n left: childLeft,\n width: childWidth\n } = rect;\n const parentRightEdge = parentScroll + parentWidth;\n const childRightEdge = childLeft + childWidth;\n const rightOverflow = childRightEdge + margin - parentRightEdge;\n const leftOverflow = parentScroll - (childLeft - margin);\n let scrollLeft = null;\n if (leftOverflow > 0) {\n scrollLeft = parentScroll - leftOverflow;\n } else if (rightOverflow > 0) {\n scrollLeft = parentScroll + rightOverflow;\n }\n if (scrollLeft !== null) {\n /**\n * The optional chaining is used here to avoid unit test failures.\n * It can be removed when JSDOM supports `Element` scroll methods.\n * See: https://github.com/WordPress/gutenberg/pull/66498#issuecomment-2441146096\n */\n parent.scroll?.({\n left: scrollLeft\n });\n }\n }, [margin, parent, rect]);\n}\nexport const TabList = forwardRef(function TabList({\n children,\n ...otherProps\n}, ref) {\n var _useTabsContext;\n const {\n store\n } = (_useTabsContext = useTabsContext()) !== null && _useTabsContext !== void 0 ? _useTabsContext : {};\n const selectedId = Ariakit.useStoreState(store, 'selectedId');\n const activeId = Ariakit.useStoreState(store, 'activeId');\n const selectOnMove = Ariakit.useStoreState(store, 'selectOnMove');\n const items = Ariakit.useStoreState(store, 'items');\n const [parent, setParent] = useState();\n const refs = useMergeRefs([ref, setParent]);\n const selectedItem = store?.item(selectedId);\n const renderedItems = Ariakit.useStoreState(store, 'renderedItems');\n const selectedItemIndex = renderedItems && selectedItem ? renderedItems.indexOf(selectedItem) : -1;\n // Use selectedItemIndex as a dependency to force recalculation when the\n // selected item index changes (elements are swapped / added / removed).\n const selectedRect = useTrackElementOffsetRect(selectedItem?.element, [selectedItemIndex]);\n\n // Track overflow to show scroll hints.\n const overflow = useTrackOverflow(parent, {\n first: items?.at(0)?.element,\n last: items?.at(-1)?.element\n });\n\n // Size, position, and animate the indicator.\n useAnimatedOffsetRect(parent, selectedRect, {\n prefix: 'selected',\n dataAttribute: 'indicator-animated',\n transitionEndFilter: event => event.pseudoElement === '::before',\n roundRect: true\n });\n\n // Make sure selected tab is scrolled into view.\n useScrollRectIntoView(parent, selectedRect);\n const onBlur = () => {\n if (!selectOnMove) {\n return;\n }\n\n // When automatic tab selection is on, make sure that the active tab is up\n // to date with the selected tab when leaving the tablist. This makes sure\n // that the selected tab will receive keyboard focus when tabbing back into\n // the tablist.\n if (selectedId !== activeId) {\n store?.setActiveId(selectedId);\n }\n };\n if (!store) {\n globalThis.SCRIPT_DEBUG === true ? warning('`Tabs.TabList` must be wrapped in a `Tabs` component.') : void 0;\n return null;\n }\n return /*#__PURE__*/_jsx(StyledTabList, {\n ref: refs,\n store: store,\n render: props => {\n var _props$tabIndex;\n return /*#__PURE__*/_jsx(\"div\", {\n ...props,\n // Fallback to -1 to prevent browsers from making the tablist\n // tabbable when it is a scrolling container.\n tabIndex: (_props$tabIndex = props.tabIndex) !== null && _props$tabIndex !== void 0 ? _props$tabIndex : -1\n });\n },\n onBlur: onBlur,\n \"data-select-on-move\": selectOnMove ? 'true' : 'false',\n ...otherProps,\n className: clsx(overflow.first && 'is-overflowing-first', overflow.last && 'is-overflowing-last', otherProps.className),\n children: children\n });\n});"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport * as Ariakit from '@ariakit/react';\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport warning from '@wordpress/warning';\nimport { forwardRef, useLayoutEffect, useState } from '@wordpress/element';\nimport { useMergeRefs } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\n\nimport { useTabsContext } from './context';\nimport { StyledTabList } from './styles';\nimport { useTrackElementOffsetRect } from '../utils/element-rect';\nimport { useTrackOverflow } from './use-track-overflow';\nimport { useAnimatedOffsetRect } from '../utils/hooks/use-animated-offset-rect';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst DEFAULT_SCROLL_MARGIN = 24;\n\n/**\n * Scrolls a given parent element so that a given rect is visible.\n *\n * The scroll is updated initially and whenever the rect changes.\n */\nfunction useScrollRectIntoView(parent, rect, {\n margin = DEFAULT_SCROLL_MARGIN\n} = {}) {\n useLayoutEffect(() => {\n if (!parent || !rect) {\n return;\n }\n const {\n scrollLeft: parentScroll\n } = parent;\n const parentWidth = parent.getBoundingClientRect().width;\n const {\n left: childLeft,\n width: childWidth\n } = rect;\n const parentRightEdge = parentScroll + parentWidth;\n const childRightEdge = childLeft + childWidth;\n const rightOverflow = childRightEdge + margin - parentRightEdge;\n const leftOverflow = parentScroll - (childLeft - margin);\n let scrollLeft = null;\n if (leftOverflow > 0) {\n scrollLeft = parentScroll - leftOverflow;\n } else if (rightOverflow > 0) {\n scrollLeft = parentScroll + rightOverflow;\n }\n if (scrollLeft !== null) {\n /**\n * The optional chaining is used here to avoid unit test failures.\n * It can be removed when JSDOM supports `Element` scroll methods.\n * See: https://github.com/WordPress/gutenberg/pull/66498#issuecomment-2441146096\n */\n parent.scroll?.({\n left: scrollLeft\n });\n }\n }, [margin, parent, rect]);\n}\nexport const TabList = forwardRef(function TabList({\n children,\n ...otherProps\n}, ref) {\n const {\n store\n } = useTabsContext() ?? {};\n const selectedId = Ariakit.useStoreState(store, 'selectedId');\n const activeId = Ariakit.useStoreState(store, 'activeId');\n const selectOnMove = Ariakit.useStoreState(store, 'selectOnMove');\n const items = Ariakit.useStoreState(store, 'items');\n const [parent, setParent] = useState();\n const refs = useMergeRefs([ref, setParent]);\n const selectedItem = store?.item(selectedId);\n const renderedItems = Ariakit.useStoreState(store, 'renderedItems');\n const selectedItemIndex = renderedItems && selectedItem ? renderedItems.indexOf(selectedItem) : -1;\n // Use selectedItemIndex as a dependency to force recalculation when the\n // selected item index changes (elements are swapped / added / removed).\n const selectedRect = useTrackElementOffsetRect(selectedItem?.element, [selectedItemIndex]);\n\n // Track overflow to show scroll hints.\n const overflow = useTrackOverflow(parent, {\n first: items?.at(0)?.element,\n last: items?.at(-1)?.element\n });\n\n // Size, position, and animate the indicator.\n useAnimatedOffsetRect(parent, selectedRect, {\n prefix: 'selected',\n dataAttribute: 'indicator-animated',\n transitionEndFilter: event => event.pseudoElement === '::before',\n roundRect: true\n });\n\n // Make sure selected tab is scrolled into view.\n useScrollRectIntoView(parent, selectedRect);\n const onBlur = () => {\n if (!selectOnMove) {\n return;\n }\n\n // When automatic tab selection is on, make sure that the active tab is up\n // to date with the selected tab when leaving the tablist. This makes sure\n // that the selected tab will receive keyboard focus when tabbing back into\n // the tablist.\n if (selectedId !== activeId) {\n store?.setActiveId(selectedId);\n }\n };\n if (!store) {\n globalThis.SCRIPT_DEBUG === true ? warning('`Tabs.TabList` must be wrapped in a `Tabs` component.') : void 0;\n return null;\n }\n return /*#__PURE__*/_jsx(StyledTabList, {\n ref: refs,\n store: store,\n render: props => /*#__PURE__*/_jsx(\"div\", {\n ...props,\n // Fallback to -1 to prevent browsers from making the tablist\n // tabbable when it is a scrolling container.\n tabIndex: props.tabIndex ?? -1\n }),\n onBlur: onBlur,\n \"data-select-on-move\": selectOnMove ? 'true' : 'false',\n ...otherProps,\n className: clsx(overflow.first && 'is-overflowing-first', overflow.last && 'is-overflowing-last', otherProps.className),\n children: children\n });\n});"],
5
+ "mappings": "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",
6
6
  "names": ["TabList", "warning", "_jsx", "clsx"]
7
7
  }
@@ -59,7 +59,7 @@ function UnforwardedToggleGroupControlAsRadioGroup({
59
59
  defaultValue
60
60
  } = (0, import_utils.useComputeControlledOrUncontrolledValue)(valueProp);
61
61
  const wrappedOnChangeProp = onChangeProp ? (v) => {
62
- onChangeProp(v !== null && v !== void 0 ? v : void 0);
62
+ onChangeProp(v ?? void 0);
63
63
  } : void 0;
64
64
  const radio = Ariakit.useRadioStore({
65
65
  defaultValue,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/toggle-group-control/toggle-group-control/as-radio-group.tsx"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\n\nimport * as Ariakit from '@ariakit/react';\n\n/**\n * WordPress dependencies\n */\nimport { useInstanceId } from '@wordpress/compose';\nimport { forwardRef, useEffect, useMemo } from '@wordpress/element';\nimport { isRTL } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { View } from '../../view';\nimport ToggleGroupControlContext from '../context';\nimport { useComputeControlledOrUncontrolledValue } from './utils';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction UnforwardedToggleGroupControlAsRadioGroup({\n children,\n isAdaptiveWidth,\n label,\n onChange: onChangeProp,\n size,\n value: valueProp,\n id: idProp,\n setSelectedElement,\n ...otherProps\n}, forwardedRef) {\n const generatedId = useInstanceId(ToggleGroupControlAsRadioGroup, 'toggle-group-control-as-radio-group');\n const baseId = idProp || generatedId;\n\n // Use a heuristic to understand if the component is being used in controlled\n // or uncontrolled mode, and consequently:\n // - when controlled, convert `undefined` values to `''` (ie. \"no value\")\n // - use the `value` prop as the `defaultValue` when uncontrolled\n const {\n value,\n defaultValue\n } = useComputeControlledOrUncontrolledValue(valueProp);\n\n // `useRadioStore`'s `setValue` prop can be called with `null`, while\n // the component's `onChange` prop only expects `undefined`\n const wrappedOnChangeProp = onChangeProp ? v => {\n onChangeProp(v !== null && v !== void 0 ? v : undefined);\n } : undefined;\n const radio = Ariakit.useRadioStore({\n defaultValue,\n value,\n setValue: wrappedOnChangeProp,\n rtl: isRTL()\n });\n const selectedValue = Ariakit.useStoreState(radio, 'value');\n const setValue = radio.setValue;\n\n // Ensures that the active id is also reset after the value is \"reset\" by the consumer.\n useEffect(() => {\n if (selectedValue === '') {\n radio.setActiveId(undefined);\n }\n }, [radio, selectedValue]);\n const groupContextValue = useMemo(() => ({\n activeItemIsNotFirstItem: () => radio.getState().activeId !== radio.first(),\n baseId,\n isBlock: !isAdaptiveWidth,\n size,\n // @ts-expect-error - This is wrong and we should fix it.\n value: selectedValue,\n // @ts-expect-error - This is wrong and we should fix it.\n setValue,\n setSelectedElement\n }), [baseId, isAdaptiveWidth, radio, selectedValue, setSelectedElement, setValue, size]);\n return /*#__PURE__*/_jsx(ToggleGroupControlContext.Provider, {\n value: groupContextValue,\n children: /*#__PURE__*/_jsx(Ariakit.RadioGroup, {\n store: radio,\n \"aria-label\": label,\n render: /*#__PURE__*/_jsx(View, {}),\n ...otherProps,\n id: baseId,\n ref: forwardedRef,\n children: children\n })\n });\n}\nexport const ToggleGroupControlAsRadioGroup = forwardRef(UnforwardedToggleGroupControlAsRadioGroup);\nToggleGroupControlAsRadioGroup.displayName = 'ToggleGroupControlAsRadioGroup';"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,cAAyB;AAKzB,qBAA8B;AAC9B,qBAA+C;AAC/C,kBAAsB;AAKtB,kBAAqB;AACrB,qBAAsC;AACtC,mBAAwD;AACxD,yBAA4B;AAC5B,SAAS,0CAA0C;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,OAAO;AAAA,EACP,IAAI;AAAA,EACJ;AAAA,EACA,GAAG;AACL,GAAG,cAAc;AACf,QAAM,kBAAc,8BAAc,gCAAgC,qCAAqC;AACvG,QAAM,SAAS,UAAU;AAMzB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,QAAI,sDAAwC,SAAS;AAIrD,QAAM,sBAAsB,eAAe,OAAK;AAC9C,iBAAa,MAAM,QAAQ,MAAM,SAAS,IAAI,MAAS;AAAA,EACzD,IAAI;AACJ,QAAM,QAAgB,sBAAc;AAAA,IAClC;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,SAAK,mBAAM;AAAA,EACb,CAAC;AACD,QAAM,gBAAwB,sBAAc,OAAO,OAAO;AAC1D,QAAM,WAAW,MAAM;AAGvB,gCAAU,MAAM;AACd,QAAI,kBAAkB,IAAI;AACxB,YAAM,YAAY,MAAS;AAAA,IAC7B;AAAA,EACF,GAAG,CAAC,OAAO,aAAa,CAAC;AACzB,QAAM,wBAAoB,wBAAQ,OAAO;AAAA,IACvC,0BAA0B,MAAM,MAAM,SAAS,EAAE,aAAa,MAAM,MAAM;AAAA,IAC1E;AAAA,IACA,SAAS,CAAC;AAAA,IACV;AAAA;AAAA,IAEA,OAAO;AAAA;AAAA,IAEP;AAAA,IACA;AAAA,EACF,IAAI,CAAC,QAAQ,iBAAiB,OAAO,eAAe,oBAAoB,UAAU,IAAI,CAAC;AACvF,SAAoB,uCAAAA,KAAK,eAAAC,QAA0B,UAAU;AAAA,IAC3D,OAAO;AAAA,IACP,UAAuB,uCAAAD,KAAa,oBAAY;AAAA,MAC9C,OAAO;AAAA,MACP,cAAc;AAAA,MACd,QAAqB,uCAAAA,KAAK,kBAAM,CAAC,CAAC;AAAA,MAClC,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,KAAK;AAAA,MACL;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AACO,IAAM,qCAAiC,2BAAW,yCAAyC;AAClG,+BAA+B,cAAc;",
4
+ "sourcesContent": ["/**\n * External dependencies\n */\n\nimport * as Ariakit from '@ariakit/react';\n\n/**\n * WordPress dependencies\n */\nimport { useInstanceId } from '@wordpress/compose';\nimport { forwardRef, useEffect, useMemo } from '@wordpress/element';\nimport { isRTL } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { View } from '../../view';\nimport ToggleGroupControlContext from '../context';\nimport { useComputeControlledOrUncontrolledValue } from './utils';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction UnforwardedToggleGroupControlAsRadioGroup({\n children,\n isAdaptiveWidth,\n label,\n onChange: onChangeProp,\n size,\n value: valueProp,\n id: idProp,\n setSelectedElement,\n ...otherProps\n}, forwardedRef) {\n const generatedId = useInstanceId(ToggleGroupControlAsRadioGroup, 'toggle-group-control-as-radio-group');\n const baseId = idProp || generatedId;\n\n // Use a heuristic to understand if the component is being used in controlled\n // or uncontrolled mode, and consequently:\n // - when controlled, convert `undefined` values to `''` (ie. \"no value\")\n // - use the `value` prop as the `defaultValue` when uncontrolled\n const {\n value,\n defaultValue\n } = useComputeControlledOrUncontrolledValue(valueProp);\n\n // `useRadioStore`'s `setValue` prop can be called with `null`, while\n // the component's `onChange` prop only expects `undefined`\n const wrappedOnChangeProp = onChangeProp ? v => {\n onChangeProp(v ?? undefined);\n } : undefined;\n const radio = Ariakit.useRadioStore({\n defaultValue,\n value,\n setValue: wrappedOnChangeProp,\n rtl: isRTL()\n });\n const selectedValue = Ariakit.useStoreState(radio, 'value');\n const setValue = radio.setValue;\n\n // Ensures that the active id is also reset after the value is \"reset\" by the consumer.\n useEffect(() => {\n if (selectedValue === '') {\n radio.setActiveId(undefined);\n }\n }, [radio, selectedValue]);\n const groupContextValue = useMemo(() => ({\n activeItemIsNotFirstItem: () => radio.getState().activeId !== radio.first(),\n baseId,\n isBlock: !isAdaptiveWidth,\n size,\n // @ts-expect-error - This is wrong and we should fix it.\n value: selectedValue,\n // @ts-expect-error - This is wrong and we should fix it.\n setValue,\n setSelectedElement\n }), [baseId, isAdaptiveWidth, radio, selectedValue, setSelectedElement, setValue, size]);\n return /*#__PURE__*/_jsx(ToggleGroupControlContext.Provider, {\n value: groupContextValue,\n children: /*#__PURE__*/_jsx(Ariakit.RadioGroup, {\n store: radio,\n \"aria-label\": label,\n render: /*#__PURE__*/_jsx(View, {}),\n ...otherProps,\n id: baseId,\n ref: forwardedRef,\n children: children\n })\n });\n}\nexport const ToggleGroupControlAsRadioGroup = forwardRef(UnforwardedToggleGroupControlAsRadioGroup);\nToggleGroupControlAsRadioGroup.displayName = 'ToggleGroupControlAsRadioGroup';"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,cAAyB;AAKzB,qBAA8B;AAC9B,qBAA+C;AAC/C,kBAAsB;AAKtB,kBAAqB;AACrB,qBAAsC;AACtC,mBAAwD;AACxD,yBAA4B;AAC5B,SAAS,0CAA0C;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,OAAO;AAAA,EACP,IAAI;AAAA,EACJ;AAAA,EACA,GAAG;AACL,GAAG,cAAc;AACf,QAAM,kBAAc,8BAAc,gCAAgC,qCAAqC;AACvG,QAAM,SAAS,UAAU;AAMzB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,QAAI,sDAAwC,SAAS;AAIrD,QAAM,sBAAsB,eAAe,OAAK;AAC9C,iBAAa,KAAK,MAAS;AAAA,EAC7B,IAAI;AACJ,QAAM,QAAgB,sBAAc;AAAA,IAClC;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,SAAK,mBAAM;AAAA,EACb,CAAC;AACD,QAAM,gBAAwB,sBAAc,OAAO,OAAO;AAC1D,QAAM,WAAW,MAAM;AAGvB,gCAAU,MAAM;AACd,QAAI,kBAAkB,IAAI;AACxB,YAAM,YAAY,MAAS;AAAA,IAC7B;AAAA,EACF,GAAG,CAAC,OAAO,aAAa,CAAC;AACzB,QAAM,wBAAoB,wBAAQ,OAAO;AAAA,IACvC,0BAA0B,MAAM,MAAM,SAAS,EAAE,aAAa,MAAM,MAAM;AAAA,IAC1E;AAAA,IACA,SAAS,CAAC;AAAA,IACV;AAAA;AAAA,IAEA,OAAO;AAAA;AAAA,IAEP;AAAA,IACA;AAAA,EACF,IAAI,CAAC,QAAQ,iBAAiB,OAAO,eAAe,oBAAoB,UAAU,IAAI,CAAC;AACvF,SAAoB,uCAAAA,KAAK,eAAAC,QAA0B,UAAU;AAAA,IAC3D,OAAO;AAAA,IACP,UAAuB,uCAAAD,KAAa,oBAAY;AAAA,MAC9C,OAAO;AAAA,MACP,cAAc;AAAA,MACd,QAAqB,uCAAAA,KAAK,kBAAM,CAAC,CAAC;AAAA,MAClC,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,KAAK;AAAA,MACL;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AACO,IAAM,qCAAiC,2BAAW,yCAAyC;AAClG,+BAA+B,cAAc;",
6
6
  "names": ["_jsx", "ToggleGroupControlContext"]
7
7
  }
@@ -40,7 +40,7 @@ function useComputeControlledOrUncontrolledValue(valueProp) {
40
40
  }, [isControlled]);
41
41
  if (isControlled) {
42
42
  return {
43
- value: valueProp !== null && valueProp !== void 0 ? valueProp : "",
43
+ value: valueProp ?? "",
44
44
  defaultValue: void 0
45
45
  };
46
46
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/toggle-group-control/toggle-group-control/utils.ts"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { usePrevious } from '@wordpress/compose';\nimport { useEffect, useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\n\n/**\n * Used to determine, via an internal heuristics, whether an `undefined` value\n * received for the `value` prop should be interpreted as the component being\n * used in uncontrolled mode, or as an \"empty\" value for controlled mode.\n *\n * @param valueProp The received `value`\n */\nexport function useComputeControlledOrUncontrolledValue(valueProp) {\n const isInitialRenderRef = useRef(true);\n const prevValueProp = usePrevious(valueProp);\n const prevIsControlledRef = useRef(false);\n useEffect(() => {\n if (isInitialRenderRef.current) {\n isInitialRenderRef.current = false;\n }\n }, []);\n\n // Assume the component is being used in controlled mode on the first re-render\n // that has a different `valueProp` from the previous render.\n const isControlled = prevIsControlledRef.current || !isInitialRenderRef.current && prevValueProp !== valueProp;\n useEffect(() => {\n prevIsControlledRef.current = isControlled;\n }, [isControlled]);\n if (isControlled) {\n // When in controlled mode, use `''` instead of `undefined`\n return {\n value: valueProp !== null && valueProp !== void 0 ? valueProp : '',\n defaultValue: undefined\n };\n }\n\n // When in uncontrolled mode, the `value` should be intended as the initial value\n return {\n value: undefined,\n defaultValue: valueProp\n };\n}"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,qBAA4B;AAC5B,qBAAkC;AAa3B,SAAS,wCAAwC,WAAW;AACjE,QAAM,yBAAqB,uBAAO,IAAI;AACtC,QAAM,oBAAgB,4BAAY,SAAS;AAC3C,QAAM,0BAAsB,uBAAO,KAAK;AACxC,gCAAU,MAAM;AACd,QAAI,mBAAmB,SAAS;AAC9B,yBAAmB,UAAU;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,CAAC;AAIL,QAAM,eAAe,oBAAoB,WAAW,CAAC,mBAAmB,WAAW,kBAAkB;AACrG,gCAAU,MAAM;AACd,wBAAoB,UAAU;AAAA,EAChC,GAAG,CAAC,YAAY,CAAC;AACjB,MAAI,cAAc;AAEhB,WAAO;AAAA,MACL,OAAO,cAAc,QAAQ,cAAc,SAAS,YAAY;AAAA,MAChE,cAAc;AAAA,IAChB;AAAA,EACF;AAGA,SAAO;AAAA,IACL,OAAO;AAAA,IACP,cAAc;AAAA,EAChB;AACF;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { usePrevious } from '@wordpress/compose';\nimport { useEffect, useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\n\n/**\n * Used to determine, via an internal heuristics, whether an `undefined` value\n * received for the `value` prop should be interpreted as the component being\n * used in uncontrolled mode, or as an \"empty\" value for controlled mode.\n *\n * @param valueProp The received `value`\n */\nexport function useComputeControlledOrUncontrolledValue(valueProp) {\n const isInitialRenderRef = useRef(true);\n const prevValueProp = usePrevious(valueProp);\n const prevIsControlledRef = useRef(false);\n useEffect(() => {\n if (isInitialRenderRef.current) {\n isInitialRenderRef.current = false;\n }\n }, []);\n\n // Assume the component is being used in controlled mode on the first re-render\n // that has a different `valueProp` from the previous render.\n const isControlled = prevIsControlledRef.current || !isInitialRenderRef.current && prevValueProp !== valueProp;\n useEffect(() => {\n prevIsControlledRef.current = isControlled;\n }, [isControlled]);\n if (isControlled) {\n // When in controlled mode, use `''` instead of `undefined`\n return {\n value: valueProp ?? '',\n defaultValue: undefined\n };\n }\n\n // When in uncontrolled mode, the `value` should be intended as the initial value\n return {\n value: undefined,\n defaultValue: valueProp\n };\n}"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,qBAA4B;AAC5B,qBAAkC;AAa3B,SAAS,wCAAwC,WAAW;AACjE,QAAM,yBAAqB,uBAAO,IAAI;AACtC,QAAM,oBAAgB,4BAAY,SAAS;AAC3C,QAAM,0BAAsB,uBAAO,KAAK;AACxC,gCAAU,MAAM;AACd,QAAI,mBAAmB,SAAS;AAC9B,yBAAmB,UAAU;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,CAAC;AAIL,QAAM,eAAe,oBAAoB,WAAW,CAAC,mBAAmB,WAAW,kBAAkB;AACrG,gCAAU,MAAM;AACd,wBAAoB,UAAU;AAAA,EAChC,GAAG,CAAC,YAAY,CAAC;AACjB,MAAI,cAAc;AAEhB,WAAO;AAAA,MACL,OAAO,aAAa;AAAA,MACpB,cAAc;AAAA,IAChB;AAAA,EACF;AAGA,SAAO;AAAA,IACL,OAAO;AAAA,IACP,cAAc;AAAA,EAChB;AACF;",
6
6
  "names": []
7
7
  }
@@ -102,13 +102,12 @@ function UnforwardedTreeGrid({
102
102
  }
103
103
  if (canExpandCollapse) {
104
104
  if (keyCode === import_keycodes.LEFT) {
105
- var _activeRow$getAttribu;
106
105
  if (activeRow.getAttribute("data-expanded") === "true" || activeRow.getAttribute("aria-expanded") === "true") {
107
106
  onCollapseRow(activeRow);
108
107
  event.preventDefault();
109
108
  return;
110
109
  }
111
- const level = Math.max(parseInt((_activeRow$getAttribu = activeRow?.getAttribute("aria-level")) !== null && _activeRow$getAttribu !== void 0 ? _activeRow$getAttribu : "1", 10) - 1, 1);
110
+ const level = Math.max(parseInt(activeRow?.getAttribute("aria-level") ?? "1", 10) - 1, 1);
112
111
  const rows = Array.from(treeGridElement.querySelectorAll('[role="row"]'));
113
112
  let parentRow = activeRow;
114
113
  const currentRowIndex = rows.indexOf(activeRow);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/tree-grid/index.tsx"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { focus } from '@wordpress/dom';\nimport { forwardRef, useCallback } from '@wordpress/element';\nimport { UP, DOWN, LEFT, RIGHT, HOME, END } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport RovingTabIndexContainer from './roving-tab-index';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Return focusables in a row element, excluding those from other branches\n * nested within the row.\n *\n * @param rowElement The DOM element representing the row.\n *\n * @return The array of focusables in the row.\n */\nfunction getRowFocusables(rowElement) {\n const focusablesInRow = focus.focusable.find(rowElement, {\n sequential: true\n });\n return focusablesInRow.filter(focusable => {\n return focusable.closest('[role=\"row\"]') === rowElement;\n });\n}\n\n/**\n * Renders both a table and tbody element, used to create a tree hierarchy.\n *\n */\nfunction UnforwardedTreeGrid({\n children,\n onExpandRow = () => {},\n onCollapseRow = () => {},\n onFocusRow = () => {},\n applicationAriaLabel,\n ...props\n}, /** A ref to the underlying DOM table element. */\nref) {\n const onKeyDown = useCallback(event => {\n const {\n keyCode,\n metaKey,\n ctrlKey,\n altKey\n } = event;\n\n // The shift key is intentionally absent from the following list,\n // to enable shift + up/down to select items from the list.\n const hasModifierKeyPressed = metaKey || ctrlKey || altKey;\n if (hasModifierKeyPressed || ![UP, DOWN, LEFT, RIGHT, HOME, END].includes(keyCode)) {\n return;\n }\n\n // The event will be handled, stop propagation.\n event.stopPropagation();\n const {\n activeElement\n } = document;\n const {\n currentTarget: treeGridElement\n } = event;\n if (!activeElement || !treeGridElement.contains(activeElement)) {\n return;\n }\n\n // Calculate the columnIndex of the active element.\n const activeRow = activeElement.closest('[role=\"row\"]');\n if (!activeRow) {\n return;\n }\n const focusablesInRow = getRowFocusables(activeRow);\n const currentColumnIndex = focusablesInRow.indexOf(activeElement);\n const canExpandCollapse = 0 === currentColumnIndex;\n const cannotFocusNextColumn = canExpandCollapse && (activeRow.getAttribute('data-expanded') === 'false' || activeRow.getAttribute('aria-expanded') === 'false') && keyCode === RIGHT;\n if ([LEFT, RIGHT].includes(keyCode)) {\n // Calculate to the next element.\n let nextIndex;\n if (keyCode === LEFT) {\n nextIndex = Math.max(0, currentColumnIndex - 1);\n } else {\n nextIndex = Math.min(currentColumnIndex + 1, focusablesInRow.length - 1);\n }\n\n // Focus is at the left most column.\n if (canExpandCollapse) {\n if (keyCode === LEFT) {\n var _activeRow$getAttribu;\n // Left:\n // If a row is focused, and it is expanded, collapses the current row.\n if (activeRow.getAttribute('data-expanded') === 'true' || activeRow.getAttribute('aria-expanded') === 'true') {\n onCollapseRow(activeRow);\n event.preventDefault();\n return;\n }\n // If a row is focused, and it is collapsed, moves to the parent row (if there is one).\n const level = Math.max(parseInt((_activeRow$getAttribu = activeRow?.getAttribute('aria-level')) !== null && _activeRow$getAttribu !== void 0 ? _activeRow$getAttribu : '1', 10) - 1, 1);\n const rows = Array.from(treeGridElement.querySelectorAll('[role=\"row\"]'));\n let parentRow = activeRow;\n const currentRowIndex = rows.indexOf(activeRow);\n for (let i = currentRowIndex; i >= 0; i--) {\n const ariaLevel = rows[i].getAttribute('aria-level');\n if (ariaLevel !== null && parseInt(ariaLevel, 10) === level) {\n parentRow = rows[i];\n break;\n }\n }\n getRowFocusables(parentRow)?.[0]?.focus();\n }\n if (keyCode === RIGHT) {\n // Right:\n // If a row is focused, and it is collapsed, expands the current row.\n if (activeRow.getAttribute('data-expanded') === 'false' || activeRow.getAttribute('aria-expanded') === 'false') {\n onExpandRow(activeRow);\n event.preventDefault();\n return;\n }\n // If a row is focused, and it is expanded, focuses the next cell in the row.\n const focusableItems = getRowFocusables(activeRow);\n if (focusableItems.length > 0) {\n focusableItems[nextIndex]?.focus();\n }\n }\n // Prevent key use for anything else. For example, Voiceover\n // will start reading text on continued use of left/right arrow\n // keys.\n event.preventDefault();\n return;\n }\n\n // Focus the next element. If at most left column and row is collapsed, moving right is not allowed as this will expand. However, if row is collapsed, moving left is allowed.\n if (cannotFocusNextColumn) {\n return;\n }\n focusablesInRow[nextIndex].focus();\n\n // Prevent key use for anything else. This ensures Voiceover\n // doesn't try to handle key navigation.\n event.preventDefault();\n } else if ([UP, DOWN].includes(keyCode)) {\n // Calculate the rowIndex of the next row.\n const rows = Array.from(treeGridElement.querySelectorAll('[role=\"row\"]'));\n const currentRowIndex = rows.indexOf(activeRow);\n let nextRowIndex;\n if (keyCode === UP) {\n nextRowIndex = Math.max(0, currentRowIndex - 1);\n } else {\n nextRowIndex = Math.min(currentRowIndex + 1, rows.length - 1);\n }\n\n // Focus is either at the top or bottom edge of the grid. Do nothing.\n if (nextRowIndex === currentRowIndex) {\n // Prevent key use for anything else. For example, Voiceover\n // will start navigating horizontally when reaching the vertical\n // bounds of a table.\n event.preventDefault();\n return;\n }\n\n // Get the focusables in the next row.\n const focusablesInNextRow = getRowFocusables(rows[nextRowIndex]);\n\n // If for some reason there are no focusables in the next row, do nothing.\n if (!focusablesInNextRow || !focusablesInNextRow.length) {\n // Prevent key use for anything else. For example, Voiceover\n // will still focus text when using arrow keys, while this\n // component should limit navigation to focusables.\n event.preventDefault();\n return;\n }\n\n // Try to focus the element in the next row that's at a similar column to the activeElement.\n const nextIndex = Math.min(currentColumnIndex, focusablesInNextRow.length - 1);\n focusablesInNextRow[nextIndex].focus();\n\n // Let consumers know the row that was originally focused,\n // and the row that is now in focus.\n onFocusRow(event, activeRow, rows[nextRowIndex]);\n\n // Prevent key use for anything else. This ensures Voiceover\n // doesn't try to handle key navigation.\n event.preventDefault();\n } else if ([HOME, END].includes(keyCode)) {\n // Calculate the rowIndex of the next row.\n const rows = Array.from(treeGridElement.querySelectorAll('[role=\"row\"]'));\n const currentRowIndex = rows.indexOf(activeRow);\n let nextRowIndex;\n if (keyCode === HOME) {\n nextRowIndex = 0;\n } else {\n nextRowIndex = rows.length - 1;\n }\n\n // Focus is either at the top or bottom edge of the grid. Do nothing.\n if (nextRowIndex === currentRowIndex) {\n // Prevent key use for anything else. For example, Voiceover\n // will start navigating horizontally when reaching the vertical\n // bounds of a table.\n event.preventDefault();\n return;\n }\n\n // Get the focusables in the next row.\n const focusablesInNextRow = getRowFocusables(rows[nextRowIndex]);\n\n // If for some reason there are no focusables in the next row, do nothing.\n if (!focusablesInNextRow || !focusablesInNextRow.length) {\n // Prevent key use for anything else. For example, Voiceover\n // will still focus text when using arrow keys, while this\n // component should limit navigation to focusables.\n event.preventDefault();\n return;\n }\n\n // Try to focus the element in the next row that's at a similar column to the activeElement.\n const nextIndex = Math.min(currentColumnIndex, focusablesInNextRow.length - 1);\n focusablesInNextRow[nextIndex].focus();\n\n // Let consumers know the row that was originally focused,\n // and the row that is now in focus.\n onFocusRow(event, activeRow, rows[nextRowIndex]);\n\n // Prevent key use for anything else. This ensures Voiceover\n // doesn't try to handle key navigation.\n event.preventDefault();\n }\n }, [onExpandRow, onCollapseRow, onFocusRow]);\n\n /* Disable reason: A treegrid is implemented using a table element. */\n /* eslint-disable jsx-a11y/no-noninteractive-element-to-interactive-role */\n return /*#__PURE__*/_jsx(RovingTabIndexContainer, {\n children: /*#__PURE__*/_jsx(\"div\", {\n role: \"application\",\n \"aria-label\": applicationAriaLabel,\n children: /*#__PURE__*/_jsx(\"table\", {\n ...props,\n role: \"treegrid\",\n onKeyDown: onKeyDown,\n ref: ref,\n children: /*#__PURE__*/_jsx(\"tbody\", {\n children: children\n })\n })\n })\n });\n /* eslint-enable jsx-a11y/no-noninteractive-element-to-interactive-role */\n}\n\n/**\n * `TreeGrid` is used to create a tree hierarchy.\n * It is not a visually styled component, but instead helps with adding\n * keyboard navigation and roving tab index behaviors to tree grid structures.\n *\n * A tree grid is a hierarchical 2 dimensional UI component, for example it could be\n * used to implement a file system browser.\n *\n * A tree grid allows the user to navigate using arrow keys.\n * Up/down to navigate vertically across rows, and left/right to navigate horizontally\n * between focusables in a row.\n *\n * The `TreeGrid` renders both a `table` and `tbody` element, and is intended to be used\n * with `TreeGridRow` (`tr`) and `TreeGridCell` (`td`) to build out a grid.\n *\n * ```jsx\n * function TreeMenu() {\n * \treturn (\n * \t\t<TreeGrid>\n * \t\t\t<TreeGridRow level={ 1 } positionInSet={ 1 } setSize={ 2 }>\n * \t\t\t\t<TreeGridCell>\n * \t\t\t\t\t{ ( props ) => (\n * \t\t\t\t\t\t<Button onClick={ onSelect } { ...props }>Select</Button>\n * \t\t\t\t\t) }\n * \t\t\t\t</TreeGridCell>\n * \t\t\t\t<TreeGridCell>\n * \t\t\t\t\t{ ( props ) => (\n * \t\t\t\t\t\t<Button onClick={ onMove } { ...props }>Move</Button>\n * \t\t\t\t\t) }\n * \t\t\t\t</TreeGridCell>\n * \t\t\t</TreeGridRow>\n * \t\t\t<TreeGridRow level={ 1 } positionInSet={ 2 } setSize={ 2 }>\n * \t\t\t\t<TreeGridCell>\n * \t\t\t\t\t{ ( props ) => (\n * \t\t\t\t\t\t<Button onClick={ onSelect } { ...props }>Select</Button>\n * \t\t\t\t\t) }\n * \t\t\t\t</TreeGridCell>\n * \t\t\t\t<TreeGridCell>\n * \t\t\t\t\t{ ( props ) => (\n * \t\t\t\t\t\t<Button onClick={ onMove } { ...props }>Move</Button>\n * \t\t\t\t\t) }\n * \t\t\t\t</TreeGridCell>\n * \t\t\t</TreeGridRow>\n * \t\t\t<TreeGridRow level={ 2 } positionInSet={ 1 } setSize={ 1 }>\n * \t\t\t\t<TreeGridCell>\n * \t\t\t\t\t{ ( props ) => (\n * \t\t\t\t\t\t<Button onClick={ onSelect } { ...props }>Select</Button>\n * \t\t\t\t\t) }\n * \t\t\t\t</TreeGridCell>\n * \t\t\t\t<TreeGridCell>\n * \t\t\t\t\t{ ( props ) => (\n * \t\t\t\t\t\t<Button onClick={ onMove } { ...props }>Move</Button>\n * \t\t\t\t\t) }\n * \t\t\t\t</TreeGridCell>\n * \t\t\t</TreeGridRow>\n * \t\t</TreeGrid>\n * \t);\n * }\n * ```\n *\n * @see {@link https://www.w3.org/TR/wai-aria-practices/examples/treegrid/treegrid-1.html}\n */\nexport const TreeGrid = forwardRef(UnforwardedTreeGrid);\nTreeGrid.displayName = 'TreeGrid';\nexport default TreeGrid;\nexport { default as TreeGridRow } from './row';\nexport { default as TreeGridCell } from './cell';\nexport { default as TreeGridItem } from './item';"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { focus } from '@wordpress/dom';\nimport { forwardRef, useCallback } from '@wordpress/element';\nimport { UP, DOWN, LEFT, RIGHT, HOME, END } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport RovingTabIndexContainer from './roving-tab-index';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Return focusables in a row element, excluding those from other branches\n * nested within the row.\n *\n * @param rowElement The DOM element representing the row.\n *\n * @return The array of focusables in the row.\n */\nfunction getRowFocusables(rowElement) {\n const focusablesInRow = focus.focusable.find(rowElement, {\n sequential: true\n });\n return focusablesInRow.filter(focusable => {\n return focusable.closest('[role=\"row\"]') === rowElement;\n });\n}\n\n/**\n * Renders both a table and tbody element, used to create a tree hierarchy.\n *\n */\nfunction UnforwardedTreeGrid({\n children,\n onExpandRow = () => {},\n onCollapseRow = () => {},\n onFocusRow = () => {},\n applicationAriaLabel,\n ...props\n}, /** A ref to the underlying DOM table element. */\nref) {\n const onKeyDown = useCallback(event => {\n const {\n keyCode,\n metaKey,\n ctrlKey,\n altKey\n } = event;\n\n // The shift key is intentionally absent from the following list,\n // to enable shift + up/down to select items from the list.\n const hasModifierKeyPressed = metaKey || ctrlKey || altKey;\n if (hasModifierKeyPressed || ![UP, DOWN, LEFT, RIGHT, HOME, END].includes(keyCode)) {\n return;\n }\n\n // The event will be handled, stop propagation.\n event.stopPropagation();\n const {\n activeElement\n } = document;\n const {\n currentTarget: treeGridElement\n } = event;\n if (!activeElement || !treeGridElement.contains(activeElement)) {\n return;\n }\n\n // Calculate the columnIndex of the active element.\n const activeRow = activeElement.closest('[role=\"row\"]');\n if (!activeRow) {\n return;\n }\n const focusablesInRow = getRowFocusables(activeRow);\n const currentColumnIndex = focusablesInRow.indexOf(activeElement);\n const canExpandCollapse = 0 === currentColumnIndex;\n const cannotFocusNextColumn = canExpandCollapse && (activeRow.getAttribute('data-expanded') === 'false' || activeRow.getAttribute('aria-expanded') === 'false') && keyCode === RIGHT;\n if ([LEFT, RIGHT].includes(keyCode)) {\n // Calculate to the next element.\n let nextIndex;\n if (keyCode === LEFT) {\n nextIndex = Math.max(0, currentColumnIndex - 1);\n } else {\n nextIndex = Math.min(currentColumnIndex + 1, focusablesInRow.length - 1);\n }\n\n // Focus is at the left most column.\n if (canExpandCollapse) {\n if (keyCode === LEFT) {\n // Left:\n // If a row is focused, and it is expanded, collapses the current row.\n if (activeRow.getAttribute('data-expanded') === 'true' || activeRow.getAttribute('aria-expanded') === 'true') {\n onCollapseRow(activeRow);\n event.preventDefault();\n return;\n }\n // If a row is focused, and it is collapsed, moves to the parent row (if there is one).\n const level = Math.max(parseInt(activeRow?.getAttribute('aria-level') ?? '1', 10) - 1, 1);\n const rows = Array.from(treeGridElement.querySelectorAll('[role=\"row\"]'));\n let parentRow = activeRow;\n const currentRowIndex = rows.indexOf(activeRow);\n for (let i = currentRowIndex; i >= 0; i--) {\n const ariaLevel = rows[i].getAttribute('aria-level');\n if (ariaLevel !== null && parseInt(ariaLevel, 10) === level) {\n parentRow = rows[i];\n break;\n }\n }\n getRowFocusables(parentRow)?.[0]?.focus();\n }\n if (keyCode === RIGHT) {\n // Right:\n // If a row is focused, and it is collapsed, expands the current row.\n if (activeRow.getAttribute('data-expanded') === 'false' || activeRow.getAttribute('aria-expanded') === 'false') {\n onExpandRow(activeRow);\n event.preventDefault();\n return;\n }\n // If a row is focused, and it is expanded, focuses the next cell in the row.\n const focusableItems = getRowFocusables(activeRow);\n if (focusableItems.length > 0) {\n focusableItems[nextIndex]?.focus();\n }\n }\n // Prevent key use for anything else. For example, Voiceover\n // will start reading text on continued use of left/right arrow\n // keys.\n event.preventDefault();\n return;\n }\n\n // Focus the next element. If at most left column and row is collapsed, moving right is not allowed as this will expand. However, if row is collapsed, moving left is allowed.\n if (cannotFocusNextColumn) {\n return;\n }\n focusablesInRow[nextIndex].focus();\n\n // Prevent key use for anything else. This ensures Voiceover\n // doesn't try to handle key navigation.\n event.preventDefault();\n } else if ([UP, DOWN].includes(keyCode)) {\n // Calculate the rowIndex of the next row.\n const rows = Array.from(treeGridElement.querySelectorAll('[role=\"row\"]'));\n const currentRowIndex = rows.indexOf(activeRow);\n let nextRowIndex;\n if (keyCode === UP) {\n nextRowIndex = Math.max(0, currentRowIndex - 1);\n } else {\n nextRowIndex = Math.min(currentRowIndex + 1, rows.length - 1);\n }\n\n // Focus is either at the top or bottom edge of the grid. Do nothing.\n if (nextRowIndex === currentRowIndex) {\n // Prevent key use for anything else. For example, Voiceover\n // will start navigating horizontally when reaching the vertical\n // bounds of a table.\n event.preventDefault();\n return;\n }\n\n // Get the focusables in the next row.\n const focusablesInNextRow = getRowFocusables(rows[nextRowIndex]);\n\n // If for some reason there are no focusables in the next row, do nothing.\n if (!focusablesInNextRow || !focusablesInNextRow.length) {\n // Prevent key use for anything else. For example, Voiceover\n // will still focus text when using arrow keys, while this\n // component should limit navigation to focusables.\n event.preventDefault();\n return;\n }\n\n // Try to focus the element in the next row that's at a similar column to the activeElement.\n const nextIndex = Math.min(currentColumnIndex, focusablesInNextRow.length - 1);\n focusablesInNextRow[nextIndex].focus();\n\n // Let consumers know the row that was originally focused,\n // and the row that is now in focus.\n onFocusRow(event, activeRow, rows[nextRowIndex]);\n\n // Prevent key use for anything else. This ensures Voiceover\n // doesn't try to handle key navigation.\n event.preventDefault();\n } else if ([HOME, END].includes(keyCode)) {\n // Calculate the rowIndex of the next row.\n const rows = Array.from(treeGridElement.querySelectorAll('[role=\"row\"]'));\n const currentRowIndex = rows.indexOf(activeRow);\n let nextRowIndex;\n if (keyCode === HOME) {\n nextRowIndex = 0;\n } else {\n nextRowIndex = rows.length - 1;\n }\n\n // Focus is either at the top or bottom edge of the grid. Do nothing.\n if (nextRowIndex === currentRowIndex) {\n // Prevent key use for anything else. For example, Voiceover\n // will start navigating horizontally when reaching the vertical\n // bounds of a table.\n event.preventDefault();\n return;\n }\n\n // Get the focusables in the next row.\n const focusablesInNextRow = getRowFocusables(rows[nextRowIndex]);\n\n // If for some reason there are no focusables in the next row, do nothing.\n if (!focusablesInNextRow || !focusablesInNextRow.length) {\n // Prevent key use for anything else. For example, Voiceover\n // will still focus text when using arrow keys, while this\n // component should limit navigation to focusables.\n event.preventDefault();\n return;\n }\n\n // Try to focus the element in the next row that's at a similar column to the activeElement.\n const nextIndex = Math.min(currentColumnIndex, focusablesInNextRow.length - 1);\n focusablesInNextRow[nextIndex].focus();\n\n // Let consumers know the row that was originally focused,\n // and the row that is now in focus.\n onFocusRow(event, activeRow, rows[nextRowIndex]);\n\n // Prevent key use for anything else. This ensures Voiceover\n // doesn't try to handle key navigation.\n event.preventDefault();\n }\n }, [onExpandRow, onCollapseRow, onFocusRow]);\n\n /* Disable reason: A treegrid is implemented using a table element. */\n /* eslint-disable jsx-a11y/no-noninteractive-element-to-interactive-role */\n return /*#__PURE__*/_jsx(RovingTabIndexContainer, {\n children: /*#__PURE__*/_jsx(\"div\", {\n role: \"application\",\n \"aria-label\": applicationAriaLabel,\n children: /*#__PURE__*/_jsx(\"table\", {\n ...props,\n role: \"treegrid\",\n onKeyDown: onKeyDown,\n ref: ref,\n children: /*#__PURE__*/_jsx(\"tbody\", {\n children: children\n })\n })\n })\n });\n /* eslint-enable jsx-a11y/no-noninteractive-element-to-interactive-role */\n}\n\n/**\n * `TreeGrid` is used to create a tree hierarchy.\n * It is not a visually styled component, but instead helps with adding\n * keyboard navigation and roving tab index behaviors to tree grid structures.\n *\n * A tree grid is a hierarchical 2 dimensional UI component, for example it could be\n * used to implement a file system browser.\n *\n * A tree grid allows the user to navigate using arrow keys.\n * Up/down to navigate vertically across rows, and left/right to navigate horizontally\n * between focusables in a row.\n *\n * The `TreeGrid` renders both a `table` and `tbody` element, and is intended to be used\n * with `TreeGridRow` (`tr`) and `TreeGridCell` (`td`) to build out a grid.\n *\n * ```jsx\n * function TreeMenu() {\n * \treturn (\n * \t\t<TreeGrid>\n * \t\t\t<TreeGridRow level={ 1 } positionInSet={ 1 } setSize={ 2 }>\n * \t\t\t\t<TreeGridCell>\n * \t\t\t\t\t{ ( props ) => (\n * \t\t\t\t\t\t<Button onClick={ onSelect } { ...props }>Select</Button>\n * \t\t\t\t\t) }\n * \t\t\t\t</TreeGridCell>\n * \t\t\t\t<TreeGridCell>\n * \t\t\t\t\t{ ( props ) => (\n * \t\t\t\t\t\t<Button onClick={ onMove } { ...props }>Move</Button>\n * \t\t\t\t\t) }\n * \t\t\t\t</TreeGridCell>\n * \t\t\t</TreeGridRow>\n * \t\t\t<TreeGridRow level={ 1 } positionInSet={ 2 } setSize={ 2 }>\n * \t\t\t\t<TreeGridCell>\n * \t\t\t\t\t{ ( props ) => (\n * \t\t\t\t\t\t<Button onClick={ onSelect } { ...props }>Select</Button>\n * \t\t\t\t\t) }\n * \t\t\t\t</TreeGridCell>\n * \t\t\t\t<TreeGridCell>\n * \t\t\t\t\t{ ( props ) => (\n * \t\t\t\t\t\t<Button onClick={ onMove } { ...props }>Move</Button>\n * \t\t\t\t\t) }\n * \t\t\t\t</TreeGridCell>\n * \t\t\t</TreeGridRow>\n * \t\t\t<TreeGridRow level={ 2 } positionInSet={ 1 } setSize={ 1 }>\n * \t\t\t\t<TreeGridCell>\n * \t\t\t\t\t{ ( props ) => (\n * \t\t\t\t\t\t<Button onClick={ onSelect } { ...props }>Select</Button>\n * \t\t\t\t\t) }\n * \t\t\t\t</TreeGridCell>\n * \t\t\t\t<TreeGridCell>\n * \t\t\t\t\t{ ( props ) => (\n * \t\t\t\t\t\t<Button onClick={ onMove } { ...props }>Move</Button>\n * \t\t\t\t\t) }\n * \t\t\t\t</TreeGridCell>\n * \t\t\t</TreeGridRow>\n * \t\t</TreeGrid>\n * \t);\n * }\n * ```\n *\n * @see {@link https://www.w3.org/TR/wai-aria-practices/examples/treegrid/treegrid-1.html}\n */\nexport const TreeGrid = forwardRef(UnforwardedTreeGrid);\nTreeGrid.displayName = 'TreeGrid';\nexport default TreeGrid;\nexport { default as TreeGridRow } from './row';\nexport { default as TreeGridCell } from './cell';\nexport { default as TreeGridItem } from './item';"],
5
+ "mappings": "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",
6
6
  "names": ["_jsx", "RovingTabIndexContainer"]
7
7
  }
@@ -85,7 +85,7 @@ function UnforwardedUnitControl(unitControlProps, forwardedRef) {
85
85
  version: "6.2"
86
86
  });
87
87
  }
88
- const nonNullValueProp = valueProp !== null && valueProp !== void 0 ? valueProp : void 0;
88
+ const nonNullValueProp = valueProp ?? void 0;
89
89
  const [units, reFirstCharacterOfUnits] = (0, import_element.useMemo)(() => {
90
90
  const list = (0, import_utils.getUnitsWithCurrentUnit)(nonNullValueProp, unitProp, unitsProp);
91
91
  const [{
@@ -128,7 +128,7 @@ function UnforwardedUnitControl(unitControlProps, forwardedRef) {
128
128
  const {
129
129
  data
130
130
  } = changeProps;
131
- let nextValue = `${parsedQuantity !== null && parsedQuantity !== void 0 ? parsedQuantity : ""}${nextUnitValue}`;
131
+ let nextValue = `${parsedQuantity ?? ""}${nextUnitValue}`;
132
132
  if (isResetValueOnUnitChange && data?.default !== void 0) {
133
133
  nextValue = `${data.default}${nextUnitValue}`;
134
134
  }
@@ -160,9 +160,8 @@ function UnforwardedUnitControl(unitControlProps, forwardedRef) {
160
160
  }) : null;
161
161
  let step = props.step;
162
162
  if (!step && units) {
163
- var _activeUnit$step;
164
163
  const activeUnit = units.find((option) => option.value === unit);
165
- step = (_activeUnit$step = activeUnit?.step) !== null && _activeUnit$step !== void 0 ? _activeUnit$step : 1;
164
+ step = activeUnit?.step ?? 1;
166
165
  }
167
166
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_unit_control_styles.ValueInput, {
168
167
  ...props,
@@ -179,7 +178,7 @@ function UnforwardedUnitControl(unitControlProps, forwardedRef) {
179
178
  size,
180
179
  suffix: inputSuffix,
181
180
  type: isPressEnterToChange ? "text" : "number",
182
- value: parsedQuantity !== null && parsedQuantity !== void 0 ? parsedQuantity : "",
181
+ value: parsedQuantity ?? "",
183
182
  step,
184
183
  onFocus: onFocusProp,
185
184
  __unstableStateReducer
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/unit-control/index.tsx"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\n\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\nimport { forwardRef, useMemo, useRef, useEffect } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\n\nimport { ValueInput } from './styles/unit-control-styles';\nimport UnitSelectControl from './unit-select-control';\nimport { CSS_UNITS, getParsedQuantityAndUnit, getUnitsWithCurrentUnit, getValidParsedQuantityAndUnit } from './utils';\nimport { useControlledState } from '../utils/hooks';\nimport { escapeRegExp } from '../utils/strings';\nimport { useDeprecated36pxDefaultSizeProp } from '../utils/use-deprecated-props';\nimport { maybeWarnDeprecated36pxSize } from '../utils/deprecated-36px-size';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction UnforwardedUnitControl(unitControlProps, forwardedRef) {\n const {\n __unstableStateReducer,\n autoComplete = 'off',\n // @ts-expect-error Ensure that children is omitted from restProps\n children,\n className,\n disabled = false,\n disableUnits = false,\n isPressEnterToChange = false,\n isResetValueOnUnitChange = false,\n isUnitSelectTabbable = true,\n label,\n onChange: onChangeProp,\n onUnitChange,\n size = 'default',\n unit: unitProp,\n units: unitsProp = CSS_UNITS,\n value: valueProp,\n onFocus: onFocusProp,\n __shouldNotWarnDeprecated36pxSize,\n ...props\n } = useDeprecated36pxDefaultSizeProp(unitControlProps);\n maybeWarnDeprecated36pxSize({\n componentName: 'UnitControl',\n __next40pxDefaultSize: props.__next40pxDefaultSize,\n size,\n __shouldNotWarnDeprecated36pxSize\n });\n if ('unit' in unitControlProps) {\n deprecated('UnitControl unit prop', {\n since: '5.6',\n hint: 'The unit should be provided within the `value` prop.',\n version: '6.2'\n });\n }\n\n // The `value` prop, in theory, should not be `null`, but the following line\n // ensures it fallback to `undefined` in case a consumer of `UnitControl`\n // still passes `null` as a `value`.\n const nonNullValueProp = valueProp !== null && valueProp !== void 0 ? valueProp : undefined;\n const [units, reFirstCharacterOfUnits] = useMemo(() => {\n const list = getUnitsWithCurrentUnit(nonNullValueProp, unitProp, unitsProp);\n const [{\n value: firstUnitValue = ''\n } = {}, ...rest] = list;\n const firstCharacters = rest.reduce((carry, {\n value\n }) => {\n const first = escapeRegExp(value?.substring(0, 1) || '');\n return carry.includes(first) ? carry : `${carry}|${first}`;\n }, escapeRegExp(firstUnitValue.substring(0, 1)));\n return [list, new RegExp(`^(?:${firstCharacters})$`, 'i')];\n }, [nonNullValueProp, unitProp, unitsProp]);\n const [parsedQuantity, parsedUnit] = getParsedQuantityAndUnit(nonNullValueProp, unitProp, units);\n const [unit, setUnit] = useControlledState(units.length === 1 ? units[0].value : unitProp, {\n initial: parsedUnit,\n fallback: ''\n });\n useEffect(() => {\n if (parsedUnit !== undefined) {\n setUnit(parsedUnit);\n }\n }, [parsedUnit, setUnit]);\n const classes = clsx('components-unit-control',\n // This class is added for legacy purposes to maintain it on the outer\n // wrapper. See: https://github.com/WordPress/gutenberg/pull/45139\n 'components-unit-control-wrapper', className);\n const handleOnQuantityChange = (nextQuantityValue, changeProps) => {\n if (nextQuantityValue === '' || typeof nextQuantityValue === 'undefined' || nextQuantityValue === null) {\n onChangeProp?.('', changeProps);\n return;\n }\n\n /*\n * Customizing the onChange callback.\n * This allows as to broadcast a combined value+unit to onChange.\n */\n const onChangeValue = getValidParsedQuantityAndUnit(nextQuantityValue, units, parsedQuantity, unit).join('');\n onChangeProp?.(onChangeValue, changeProps);\n };\n const handleOnUnitChange = (nextUnitValue, changeProps) => {\n const {\n data\n } = changeProps;\n let nextValue = `${parsedQuantity !== null && parsedQuantity !== void 0 ? parsedQuantity : ''}${nextUnitValue}`;\n if (isResetValueOnUnitChange && data?.default !== undefined) {\n nextValue = `${data.default}${nextUnitValue}`;\n }\n onChangeProp?.(nextValue, changeProps);\n onUnitChange?.(nextUnitValue, changeProps);\n setUnit(nextUnitValue);\n };\n let handleOnKeyDown;\n if (!disableUnits && isUnitSelectTabbable && units.length) {\n handleOnKeyDown = event => {\n props.onKeyDown?.(event);\n // Unless the meta or ctrl key was pressed (to avoid interfering with\n // shortcuts, e.g. pastes), move focus to the unit select if a key\n // matches the first character of a unit.\n if (!event.metaKey && !event.ctrlKey && reFirstCharacterOfUnits.test(event.key)) {\n refInputSuffix.current?.focus();\n }\n };\n }\n const refInputSuffix = useRef(null);\n const inputSuffix = !disableUnits ? /*#__PURE__*/_jsx(UnitSelectControl, {\n ref: refInputSuffix,\n \"aria-label\": __('Select unit'),\n disabled: disabled,\n isUnitSelectTabbable: isUnitSelectTabbable,\n onChange: handleOnUnitChange,\n size: ['small', 'compact'].includes(size) || size === 'default' && !props.__next40pxDefaultSize ? 'small' : 'default',\n unit: unit,\n units: units,\n onFocus: onFocusProp,\n onBlur: unitControlProps.onBlur\n }) : null;\n let step = props.step;\n\n /*\n * If no step prop has been passed, lookup the active unit and\n * try to get step from `units`, or default to a value of `1`\n */\n if (!step && units) {\n var _activeUnit$step;\n const activeUnit = units.find(option => option.value === unit);\n step = (_activeUnit$step = activeUnit?.step) !== null && _activeUnit$step !== void 0 ? _activeUnit$step : 1;\n }\n return /*#__PURE__*/_jsx(ValueInput, {\n ...props,\n __shouldNotWarnDeprecated36pxSize: true,\n autoComplete: autoComplete,\n className: classes,\n disabled: disabled,\n spinControls: \"none\",\n isPressEnterToChange: isPressEnterToChange,\n label: label,\n onKeyDown: handleOnKeyDown,\n onChange: handleOnQuantityChange,\n ref: forwardedRef,\n size: size,\n suffix: inputSuffix,\n type: isPressEnterToChange ? 'text' : 'number',\n value: parsedQuantity !== null && parsedQuantity !== void 0 ? parsedQuantity : '',\n step: step,\n onFocus: onFocusProp,\n __unstableStateReducer: __unstableStateReducer\n });\n}\n\n/**\n * `UnitControl` allows the user to set a numeric quantity as well as a unit (e.g. `px`).\n *\n *\n * ```jsx\n * import { __experimentalUnitControl as UnitControl } from '@wordpress/components';\n * import { useState } from '@wordpress/element';\n *\n * const Example = () => {\n * const [ value, setValue ] = useState( '10px' );\n *\n * return <UnitControl __next40pxDefaultSize onChange={ setValue } value={ value } />;\n * };\n * ```\n */\nexport const UnitControl = forwardRef(UnforwardedUnitControl);\nUnitControl.displayName = 'UnitControl';\nexport { parseQuantityAndUnitFromRawValue, useCustomUnits } from './utils';\nexport default UnitControl;"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * External dependencies\n */\n\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\nimport { forwardRef, useMemo, useRef, useEffect } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\n\nimport { ValueInput } from './styles/unit-control-styles';\nimport UnitSelectControl from './unit-select-control';\nimport { CSS_UNITS, getParsedQuantityAndUnit, getUnitsWithCurrentUnit, getValidParsedQuantityAndUnit } from './utils';\nimport { useControlledState } from '../utils/hooks';\nimport { escapeRegExp } from '../utils/strings';\nimport { useDeprecated36pxDefaultSizeProp } from '../utils/use-deprecated-props';\nimport { maybeWarnDeprecated36pxSize } from '../utils/deprecated-36px-size';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction UnforwardedUnitControl(unitControlProps, forwardedRef) {\n const {\n __unstableStateReducer,\n autoComplete = 'off',\n // @ts-expect-error Ensure that children is omitted from restProps\n children,\n className,\n disabled = false,\n disableUnits = false,\n isPressEnterToChange = false,\n isResetValueOnUnitChange = false,\n isUnitSelectTabbable = true,\n label,\n onChange: onChangeProp,\n onUnitChange,\n size = 'default',\n unit: unitProp,\n units: unitsProp = CSS_UNITS,\n value: valueProp,\n onFocus: onFocusProp,\n __shouldNotWarnDeprecated36pxSize,\n ...props\n } = useDeprecated36pxDefaultSizeProp(unitControlProps);\n maybeWarnDeprecated36pxSize({\n componentName: 'UnitControl',\n __next40pxDefaultSize: props.__next40pxDefaultSize,\n size,\n __shouldNotWarnDeprecated36pxSize\n });\n if ('unit' in unitControlProps) {\n deprecated('UnitControl unit prop', {\n since: '5.6',\n hint: 'The unit should be provided within the `value` prop.',\n version: '6.2'\n });\n }\n\n // The `value` prop, in theory, should not be `null`, but the following line\n // ensures it fallback to `undefined` in case a consumer of `UnitControl`\n // still passes `null` as a `value`.\n const nonNullValueProp = valueProp ?? undefined;\n const [units, reFirstCharacterOfUnits] = useMemo(() => {\n const list = getUnitsWithCurrentUnit(nonNullValueProp, unitProp, unitsProp);\n const [{\n value: firstUnitValue = ''\n } = {}, ...rest] = list;\n const firstCharacters = rest.reduce((carry, {\n value\n }) => {\n const first = escapeRegExp(value?.substring(0, 1) || '');\n return carry.includes(first) ? carry : `${carry}|${first}`;\n }, escapeRegExp(firstUnitValue.substring(0, 1)));\n return [list, new RegExp(`^(?:${firstCharacters})$`, 'i')];\n }, [nonNullValueProp, unitProp, unitsProp]);\n const [parsedQuantity, parsedUnit] = getParsedQuantityAndUnit(nonNullValueProp, unitProp, units);\n const [unit, setUnit] = useControlledState(units.length === 1 ? units[0].value : unitProp, {\n initial: parsedUnit,\n fallback: ''\n });\n useEffect(() => {\n if (parsedUnit !== undefined) {\n setUnit(parsedUnit);\n }\n }, [parsedUnit, setUnit]);\n const classes = clsx('components-unit-control',\n // This class is added for legacy purposes to maintain it on the outer\n // wrapper. See: https://github.com/WordPress/gutenberg/pull/45139\n 'components-unit-control-wrapper', className);\n const handleOnQuantityChange = (nextQuantityValue, changeProps) => {\n if (nextQuantityValue === '' || typeof nextQuantityValue === 'undefined' || nextQuantityValue === null) {\n onChangeProp?.('', changeProps);\n return;\n }\n\n /*\n * Customizing the onChange callback.\n * This allows as to broadcast a combined value+unit to onChange.\n */\n const onChangeValue = getValidParsedQuantityAndUnit(nextQuantityValue, units, parsedQuantity, unit).join('');\n onChangeProp?.(onChangeValue, changeProps);\n };\n const handleOnUnitChange = (nextUnitValue, changeProps) => {\n const {\n data\n } = changeProps;\n let nextValue = `${parsedQuantity ?? ''}${nextUnitValue}`;\n if (isResetValueOnUnitChange && data?.default !== undefined) {\n nextValue = `${data.default}${nextUnitValue}`;\n }\n onChangeProp?.(nextValue, changeProps);\n onUnitChange?.(nextUnitValue, changeProps);\n setUnit(nextUnitValue);\n };\n let handleOnKeyDown;\n if (!disableUnits && isUnitSelectTabbable && units.length) {\n handleOnKeyDown = event => {\n props.onKeyDown?.(event);\n // Unless the meta or ctrl key was pressed (to avoid interfering with\n // shortcuts, e.g. pastes), move focus to the unit select if a key\n // matches the first character of a unit.\n if (!event.metaKey && !event.ctrlKey && reFirstCharacterOfUnits.test(event.key)) {\n refInputSuffix.current?.focus();\n }\n };\n }\n const refInputSuffix = useRef(null);\n const inputSuffix = !disableUnits ? /*#__PURE__*/_jsx(UnitSelectControl, {\n ref: refInputSuffix,\n \"aria-label\": __('Select unit'),\n disabled: disabled,\n isUnitSelectTabbable: isUnitSelectTabbable,\n onChange: handleOnUnitChange,\n size: ['small', 'compact'].includes(size) || size === 'default' && !props.__next40pxDefaultSize ? 'small' : 'default',\n unit: unit,\n units: units,\n onFocus: onFocusProp,\n onBlur: unitControlProps.onBlur\n }) : null;\n let step = props.step;\n\n /*\n * If no step prop has been passed, lookup the active unit and\n * try to get step from `units`, or default to a value of `1`\n */\n if (!step && units) {\n const activeUnit = units.find(option => option.value === unit);\n step = activeUnit?.step ?? 1;\n }\n return /*#__PURE__*/_jsx(ValueInput, {\n ...props,\n __shouldNotWarnDeprecated36pxSize: true,\n autoComplete: autoComplete,\n className: classes,\n disabled: disabled,\n spinControls: \"none\",\n isPressEnterToChange: isPressEnterToChange,\n label: label,\n onKeyDown: handleOnKeyDown,\n onChange: handleOnQuantityChange,\n ref: forwardedRef,\n size: size,\n suffix: inputSuffix,\n type: isPressEnterToChange ? 'text' : 'number',\n value: parsedQuantity ?? '',\n step: step,\n onFocus: onFocusProp,\n __unstableStateReducer: __unstableStateReducer\n });\n}\n\n/**\n * `UnitControl` allows the user to set a numeric quantity as well as a unit (e.g. `px`).\n *\n *\n * ```jsx\n * import { __experimentalUnitControl as UnitControl } from '@wordpress/components';\n * import { useState } from '@wordpress/element';\n *\n * const Example = () => {\n * const [ value, setValue ] = useState( '10px' );\n *\n * return <UnitControl __next40pxDefaultSize onChange={ setValue } value={ value } />;\n * };\n * ```\n */\nexport const UnitControl = forwardRef(UnforwardedUnitControl);\nUnitControl.displayName = 'UnitControl';\nexport { parseQuantityAndUnitFromRawValue, useCustomUnits } from './utils';\nexport default UnitControl;"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,kBAAiB;AAKjB,wBAAuB;AACvB,qBAAuD;AACvD,kBAAmB;AAMnB,iCAA2B;AAC3B,iCAA8B;AAC9B,mBAA4G;AAC5G,mBAAmC;AACnC,qBAA6B;AAC7B,kCAAiD;AACjD,kCAA4C;AAC5C,yBAA4B;AAwK5B,IAAAA,gBAAiE;AAvKjE,SAAS,uBAAuB,kBAAkB,cAAc;AAC9D,QAAM;AAAA,IACJ;AAAA,IACA,eAAe;AAAA;AAAA,IAEf;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,eAAe;AAAA,IACf,uBAAuB;AAAA,IACvB,2BAA2B;AAAA,IAC3B,uBAAuB;AAAA,IACvB;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO,YAAY;AAAA,IACnB,OAAO;AAAA,IACP,SAAS;AAAA,IACT;AAAA,IACA,GAAG;AAAA,EACL,QAAI,8DAAiC,gBAAgB;AACrD,+DAA4B;AAAA,IAC1B,eAAe;AAAA,IACf,uBAAuB,MAAM;AAAA,IAC7B;AAAA,IACA;AAAA,EACF,CAAC;AACD,MAAI,UAAU,kBAAkB;AAC9B,0BAAAC,SAAW,yBAAyB;AAAA,MAClC,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAKA,QAAM,mBAAmB,aAAa;AACtC,QAAM,CAAC,OAAO,uBAAuB,QAAI,wBAAQ,MAAM;AACrD,UAAM,WAAO,sCAAwB,kBAAkB,UAAU,SAAS;AAC1E,UAAM,CAAC;AAAA,MACL,OAAO,iBAAiB;AAAA,IAC1B,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI;AACnB,UAAM,kBAAkB,KAAK,OAAO,CAAC,OAAO;AAAA,MAC1C;AAAA,IACF,MAAM;AACJ,YAAM,YAAQ,6BAAa,OAAO,UAAU,GAAG,CAAC,KAAK,EAAE;AACvD,aAAO,MAAM,SAAS,KAAK,IAAI,QAAQ,GAAG,KAAK,IAAI,KAAK;AAAA,IAC1D,OAAG,6BAAa,eAAe,UAAU,GAAG,CAAC,CAAC,CAAC;AAC/C,WAAO,CAAC,MAAM,IAAI,OAAO,OAAO,eAAe,MAAM,GAAG,CAAC;AAAA,EAC3D,GAAG,CAAC,kBAAkB,UAAU,SAAS,CAAC;AAC1C,QAAM,CAAC,gBAAgB,UAAU,QAAI,uCAAyB,kBAAkB,UAAU,KAAK;AAC/F,QAAM,CAAC,MAAM,OAAO,QAAI,iCAAmB,MAAM,WAAW,IAAI,MAAM,CAAC,EAAE,QAAQ,UAAU;AAAA,IACzF,SAAS;AAAA,IACT,UAAU;AAAA,EACZ,CAAC;AACD,gCAAU,MAAM;AACd,QAAI,eAAe,QAAW;AAC5B,cAAQ,UAAU;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,YAAY,OAAO,CAAC;AACxB,QAAM,cAAU,YAAAC;AAAA,IAAK;AAAA;AAAA;AAAA,IAGrB;AAAA,IAAmC;AAAA,EAAS;AAC5C,QAAM,yBAAyB,CAAC,mBAAmB,gBAAgB;AACjE,QAAI,sBAAsB,MAAM,OAAO,sBAAsB,eAAe,sBAAsB,MAAM;AACtG,qBAAe,IAAI,WAAW;AAC9B;AAAA,IACF;AAMA,UAAM,oBAAgB,4CAA8B,mBAAmB,OAAO,gBAAgB,IAAI,EAAE,KAAK,EAAE;AAC3G,mBAAe,eAAe,WAAW;AAAA,EAC3C;AACA,QAAM,qBAAqB,CAAC,eAAe,gBAAgB;AACzD,UAAM;AAAA,MACJ;AAAA,IACF,IAAI;AACJ,QAAI,YAAY,GAAG,kBAAkB,EAAE,GAAG,aAAa;AACvD,QAAI,4BAA4B,MAAM,YAAY,QAAW;AAC3D,kBAAY,GAAG,KAAK,OAAO,GAAG,aAAa;AAAA,IAC7C;AACA,mBAAe,WAAW,WAAW;AACrC,mBAAe,eAAe,WAAW;AACzC,YAAQ,aAAa;AAAA,EACvB;AACA,MAAI;AACJ,MAAI,CAAC,gBAAgB,wBAAwB,MAAM,QAAQ;AACzD,sBAAkB,WAAS;AACzB,YAAM,YAAY,KAAK;AAIvB,UAAI,CAAC,MAAM,WAAW,CAAC,MAAM,WAAW,wBAAwB,KAAK,MAAM,GAAG,GAAG;AAC/E,uBAAe,SAAS,MAAM;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AACA,QAAM,qBAAiB,uBAAO,IAAI;AAClC,QAAM,cAAc,CAAC,eAA4B,uCAAAC,KAAK,2BAAAC,SAAmB;AAAA,IACvE,KAAK;AAAA,IACL,kBAAc,gBAAG,aAAa;AAAA,IAC9B;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,MAAM,CAAC,SAAS,SAAS,EAAE,SAAS,IAAI,KAAK,SAAS,aAAa,CAAC,MAAM,wBAAwB,UAAU;AAAA,IAC5G;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,QAAQ,iBAAiB;AAAA,EAC3B,CAAC,IAAI;AACL,MAAI,OAAO,MAAM;AAMjB,MAAI,CAAC,QAAQ,OAAO;AAClB,UAAM,aAAa,MAAM,KAAK,YAAU,OAAO,UAAU,IAAI;AAC7D,WAAO,YAAY,QAAQ;AAAA,EAC7B;AACA,SAAoB,uCAAAD,KAAK,uCAAY;AAAA,IACnC,GAAG;AAAA,IACH,mCAAmC;AAAA,IACnC;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,UAAU;AAAA,IACV,KAAK;AAAA,IACL;AAAA,IACA,QAAQ;AAAA,IACR,MAAM,uBAAuB,SAAS;AAAA,IACtC,OAAO,kBAAkB;AAAA,IACzB;AAAA,IACA,SAAS;AAAA,IACT;AAAA,EACF,CAAC;AACH;AAiBO,IAAM,kBAAc,2BAAW,sBAAsB;AAC5D,YAAY,cAAc;AAE1B,IAAO,uBAAQ;",
6
6
  "names": ["import_utils", "deprecated", "clsx", "_jsx", "UnitSelectControl"]
7
7
  }
@@ -240,7 +240,7 @@ var ALL_CSS_UNITS = Object.values(allUnits);
240
240
  var CSS_UNITS = [allUnits.px, allUnits["%"], allUnits.em, allUnits.rem, allUnits.vw, allUnits.vh];
241
241
  var DEFAULT_UNIT = allUnits.px;
242
242
  function getParsedQuantityAndUnit(rawValue, fallbackUnit, allowedUnits) {
243
- const initialValue = fallbackUnit ? `${rawValue !== null && rawValue !== void 0 ? rawValue : ""}${fallbackUnit}` : rawValue;
243
+ const initialValue = fallbackUnit ? `${rawValue ?? ""}${fallbackUnit}` : rawValue;
244
244
  return parseQuantityAndUnitFromRawValue(initialValue, allowedUnits);
245
245
  }
246
246
  function hasUnits(units) {
@@ -267,7 +267,7 @@ function parseQuantityAndUnitFromRawValue(rawValue, allowedUnits = ALL_CSS_UNITS
267
267
  }
268
268
  function getValidParsedQuantityAndUnit(rawValue, allowedUnits, fallbackQuantity, fallbackUnit) {
269
269
  const [parsedQuantity, parsedUnit] = parseQuantityAndUnitFromRawValue(rawValue, allowedUnits);
270
- const quantityToReturn = parsedQuantity !== null && parsedQuantity !== void 0 ? parsedQuantity : fallbackQuantity;
270
+ const quantityToReturn = parsedQuantity ?? fallbackQuantity;
271
271
  let unitToReturn = parsedUnit || fallbackUnit;
272
272
  if (!unitToReturn && hasUnits(allowedUnits)) {
273
273
  unitToReturn = allowedUnits[0].value;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/unit-control/utils.ts"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __, _x } from '@wordpress/i18n';\nimport { Platform } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\n\nconst isWeb = Platform.OS === 'web';\nconst allUnits = {\n px: {\n value: 'px',\n label: isWeb ? 'px' : __('Pixels (px)'),\n a11yLabel: __('Pixels (px)'),\n step: 1\n },\n '%': {\n value: '%',\n label: isWeb ? '%' : __('Percentage (%)'),\n a11yLabel: __('Percent (%)'),\n step: 0.1\n },\n em: {\n value: 'em',\n label: isWeb ? 'em' : __('Relative to parent font size (em)'),\n a11yLabel: _x('ems', 'Relative to parent font size (em)'),\n step: 0.01\n },\n rem: {\n value: 'rem',\n label: isWeb ? 'rem' : __('Relative to root font size (rem)'),\n a11yLabel: _x('rems', 'Relative to root font size (rem)'),\n step: 0.01\n },\n vw: {\n value: 'vw',\n label: isWeb ? 'vw' : __('Viewport width (vw)'),\n a11yLabel: __('Viewport width (vw)'),\n step: 0.1\n },\n vh: {\n value: 'vh',\n label: isWeb ? 'vh' : __('Viewport height (vh)'),\n a11yLabel: __('Viewport height (vh)'),\n step: 0.1\n },\n vmin: {\n value: 'vmin',\n label: isWeb ? 'vmin' : __('Viewport smallest dimension (vmin)'),\n a11yLabel: __('Viewport smallest dimension (vmin)'),\n step: 0.1\n },\n vmax: {\n value: 'vmax',\n label: isWeb ? 'vmax' : __('Viewport largest dimension (vmax)'),\n a11yLabel: __('Viewport largest dimension (vmax)'),\n step: 0.1\n },\n ch: {\n value: 'ch',\n label: isWeb ? 'ch' : __('Width of the zero (0) character (ch)'),\n a11yLabel: __('Width of the zero (0) character (ch)'),\n step: 0.01\n },\n ex: {\n value: 'ex',\n label: isWeb ? 'ex' : __('x-height of the font (ex)'),\n a11yLabel: __('x-height of the font (ex)'),\n step: 0.01\n },\n cm: {\n value: 'cm',\n label: isWeb ? 'cm' : __('Centimeters (cm)'),\n a11yLabel: __('Centimeters (cm)'),\n step: 0.001\n },\n mm: {\n value: 'mm',\n label: isWeb ? 'mm' : __('Millimeters (mm)'),\n a11yLabel: __('Millimeters (mm)'),\n step: 0.1\n },\n in: {\n value: 'in',\n label: isWeb ? 'in' : __('Inches (in)'),\n a11yLabel: __('Inches (in)'),\n step: 0.001\n },\n pc: {\n value: 'pc',\n label: isWeb ? 'pc' : __('Picas (pc)'),\n a11yLabel: __('Picas (pc)'),\n step: 1\n },\n pt: {\n value: 'pt',\n label: isWeb ? 'pt' : __('Points (pt)'),\n a11yLabel: __('Points (pt)'),\n step: 1\n },\n svw: {\n value: 'svw',\n label: isWeb ? 'svw' : __('Small viewport width (svw)'),\n a11yLabel: __('Small viewport width (svw)'),\n step: 0.1\n },\n svh: {\n value: 'svh',\n label: isWeb ? 'svh' : __('Small viewport height (svh)'),\n a11yLabel: __('Small viewport height (svh)'),\n step: 0.1\n },\n svi: {\n value: 'svi',\n label: isWeb ? 'svi' : __('Viewport smallest size in the inline direction (svi)'),\n a11yLabel: __('Small viewport width or height (svi)'),\n step: 0.1\n },\n svb: {\n value: 'svb',\n label: isWeb ? 'svb' : __('Viewport smallest size in the block direction (svb)'),\n a11yLabel: __('Small viewport width or height (svb)'),\n step: 0.1\n },\n svmin: {\n value: 'svmin',\n label: isWeb ? 'svmin' : __('Small viewport smallest dimension (svmin)'),\n a11yLabel: __('Small viewport smallest dimension (svmin)'),\n step: 0.1\n },\n lvw: {\n value: 'lvw',\n label: isWeb ? 'lvw' : __('Large viewport width (lvw)'),\n a11yLabel: __('Large viewport width (lvw)'),\n step: 0.1\n },\n lvh: {\n value: 'lvh',\n label: isWeb ? 'lvh' : __('Large viewport height (lvh)'),\n a11yLabel: __('Large viewport height (lvh)'),\n step: 0.1\n },\n lvi: {\n value: 'lvi',\n label: isWeb ? 'lvi' : __('Large viewport width or height (lvi)'),\n a11yLabel: __('Large viewport width or height (lvi)'),\n step: 0.1\n },\n lvb: {\n value: 'lvb',\n label: isWeb ? 'lvb' : __('Large viewport width or height (lvb)'),\n a11yLabel: __('Large viewport width or height (lvb)'),\n step: 0.1\n },\n lvmin: {\n value: 'lvmin',\n label: isWeb ? 'lvmin' : __('Large viewport smallest dimension (lvmin)'),\n a11yLabel: __('Large viewport smallest dimension (lvmin)'),\n step: 0.1\n },\n dvw: {\n value: 'dvw',\n label: isWeb ? 'dvw' : __('Dynamic viewport width (dvw)'),\n a11yLabel: __('Dynamic viewport width (dvw)'),\n step: 0.1\n },\n dvh: {\n value: 'dvh',\n label: isWeb ? 'dvh' : __('Dynamic viewport height (dvh)'),\n a11yLabel: __('Dynamic viewport height (dvh)'),\n step: 0.1\n },\n dvi: {\n value: 'dvi',\n label: isWeb ? 'dvi' : __('Dynamic viewport width or height (dvi)'),\n a11yLabel: __('Dynamic viewport width or height (dvi)'),\n step: 0.1\n },\n dvb: {\n value: 'dvb',\n label: isWeb ? 'dvb' : __('Dynamic viewport width or height (dvb)'),\n a11yLabel: __('Dynamic viewport width or height (dvb)'),\n step: 0.1\n },\n dvmin: {\n value: 'dvmin',\n label: isWeb ? 'dvmin' : __('Dynamic viewport smallest dimension (dvmin)'),\n a11yLabel: __('Dynamic viewport smallest dimension (dvmin)'),\n step: 0.1\n },\n dvmax: {\n value: 'dvmax',\n label: isWeb ? 'dvmax' : __('Dynamic viewport largest dimension (dvmax)'),\n a11yLabel: __('Dynamic viewport largest dimension (dvmax)'),\n step: 0.1\n },\n svmax: {\n value: 'svmax',\n label: isWeb ? 'svmax' : __('Small viewport largest dimension (svmax)'),\n a11yLabel: __('Small viewport largest dimension (svmax)'),\n step: 0.1\n },\n lvmax: {\n value: 'lvmax',\n label: isWeb ? 'lvmax' : __('Large viewport largest dimension (lvmax)'),\n a11yLabel: __('Large viewport largest dimension (lvmax)'),\n step: 0.1\n }\n};\n\n/**\n * An array of all available CSS length units.\n */\nexport const ALL_CSS_UNITS = Object.values(allUnits);\n\n/**\n * Units of measurements. `a11yLabel` is used by screenreaders.\n */\nexport const CSS_UNITS = [allUnits.px, allUnits['%'], allUnits.em, allUnits.rem, allUnits.vw, allUnits.vh];\nexport const DEFAULT_UNIT = allUnits.px;\n\n/**\n * Handles legacy value + unit handling.\n * This component use to manage both incoming value and units separately.\n *\n * Moving forward, ideally the value should be a string that contains both\n * the value and unit, example: '10px'\n *\n * @param rawValue The raw value as a string (may or may not contain the unit)\n * @param fallbackUnit The unit used as a fallback, if not unit is detected in the `value`\n * @param allowedUnits Units to derive from.\n * @return The extracted quantity and unit. The quantity can be `undefined` in case the raw value\n * could not be parsed to a number correctly. The unit can be `undefined` in case the unit parse\n * from the raw value could not be matched against the list of allowed units.\n */\nexport function getParsedQuantityAndUnit(rawValue, fallbackUnit, allowedUnits) {\n const initialValue = fallbackUnit ? `${rawValue !== null && rawValue !== void 0 ? rawValue : ''}${fallbackUnit}` : rawValue;\n return parseQuantityAndUnitFromRawValue(initialValue, allowedUnits);\n}\n\n/**\n * Checks if units are defined.\n *\n * @param units List of units.\n * @return Whether the list actually contains any units.\n */\nexport function hasUnits(units) {\n // Although the `isArray` check shouldn't be necessary (given the signature of\n // this typed function), it's better to stay on the side of caution, since\n // this function may be called from un-typed environments.\n return Array.isArray(units) && !!units.length;\n}\n\n/**\n * Parses a quantity and unit from a raw string value, given a list of allowed\n * units and otherwise falling back to the default unit.\n *\n * @param rawValue The raw value as a string (may or may not contain the unit)\n * @param allowedUnits Units to derive from.\n * @return The extracted quantity and unit. The quantity can be `undefined` in case the raw value\n * could not be parsed to a number correctly. The unit can be `undefined` in case the unit parsed\n * from the raw value could not be matched against the list of allowed units.\n */\nexport function parseQuantityAndUnitFromRawValue(rawValue, allowedUnits = ALL_CSS_UNITS) {\n let trimmedValue;\n let quantityToReturn;\n if (typeof rawValue !== 'undefined' || rawValue === null) {\n trimmedValue = `${rawValue}`.trim();\n const parsedQuantity = parseFloat(trimmedValue);\n quantityToReturn = !isFinite(parsedQuantity) ? undefined : parsedQuantity;\n }\n const unitMatch = trimmedValue?.match(/[\\d.\\-\\+]*\\s*(.*)/);\n const matchedUnit = unitMatch?.[1]?.toLowerCase();\n let unitToReturn;\n if (hasUnits(allowedUnits)) {\n const match = allowedUnits.find(item => item.value === matchedUnit);\n unitToReturn = match?.value;\n } else {\n unitToReturn = DEFAULT_UNIT.value;\n }\n return [quantityToReturn, unitToReturn];\n}\n\n/**\n * Parses quantity and unit from a raw value. Validates parsed value, using fallback\n * value if invalid.\n *\n * @param rawValue The next value.\n * @param allowedUnits Units to derive from.\n * @param fallbackQuantity The fallback quantity, used in case it's not possible to parse a valid quantity from the raw value.\n * @param fallbackUnit The fallback unit, used in case it's not possible to parse a valid unit from the raw value.\n * @return The extracted quantity and unit. The quantity can be `undefined` in case the raw value\n * could not be parsed to a number correctly, and the `fallbackQuantity` was also `undefined`. The\n * unit can be `undefined` only if the unit parsed from the raw value could not be matched against\n * the list of allowed units, the `fallbackQuantity` is also `undefined` and the list of\n * `allowedUnits` is passed empty.\n */\nexport function getValidParsedQuantityAndUnit(rawValue, allowedUnits, fallbackQuantity, fallbackUnit) {\n const [parsedQuantity, parsedUnit] = parseQuantityAndUnitFromRawValue(rawValue, allowedUnits);\n\n // The parsed value from `parseQuantityAndUnitFromRawValue` should now be\n // either a real number or undefined. If undefined, use the fallback value.\n const quantityToReturn = parsedQuantity !== null && parsedQuantity !== void 0 ? parsedQuantity : fallbackQuantity;\n\n // If no unit is parsed from the raw value, or if the fallback unit is not\n // defined, use the first value from the list of allowed units as fallback.\n let unitToReturn = parsedUnit || fallbackUnit;\n if (!unitToReturn && hasUnits(allowedUnits)) {\n unitToReturn = allowedUnits[0].value;\n }\n return [quantityToReturn, unitToReturn];\n}\n\n/**\n * Takes a unit value and finds the matching accessibility label for the\n * unit abbreviation.\n *\n * @param unit Unit value (example: `px`)\n * @return a11y label for the unit abbreviation\n */\nexport function getAccessibleLabelForUnit(unit) {\n const match = ALL_CSS_UNITS.find(item => item.value === unit);\n return match?.a11yLabel ? match?.a11yLabel : match?.value;\n}\n\n/**\n * Filters available units based on values defined a list of allowed unit values.\n *\n * @param allowedUnitValues Collection of allowed unit value strings.\n * @param availableUnits Collection of available unit objects.\n * @return Filtered units.\n */\nexport function filterUnitsWithSettings(allowedUnitValues = [], availableUnits) {\n // Although the `isArray` check shouldn't be necessary (given the signature of\n // this typed function), it's better to stay on the side of caution, since\n // this function may be called from un-typed environments.\n return Array.isArray(availableUnits) ? availableUnits.filter(unit => allowedUnitValues.includes(unit.value)) : [];\n}\n\n/**\n * Custom hook to retrieve and consolidate units setting from add_theme_support().\n * TODO: ideally this hook shouldn't be needed\n * https://github.com/WordPress/gutenberg/pull/31822#discussion_r633280823\n *\n * @param args An object containing units, settingPath & defaultUnits.\n * @param args.units Collection of all potentially available units.\n * @param args.availableUnits Collection of unit value strings for filtering available units.\n * @param args.defaultValues Collection of default values for defined units. Example: `{ px: 350, em: 15 }`.\n *\n * @return Filtered list of units, with their default values updated following the `defaultValues`\n * argument's property.\n */\nexport const useCustomUnits = ({\n units = ALL_CSS_UNITS,\n availableUnits = [],\n defaultValues\n}) => {\n const customUnitsToReturn = filterUnitsWithSettings(availableUnits, units);\n if (!defaultValues) {\n return customUnitsToReturn;\n }\n return customUnitsToReturn.map(unit => {\n const [defaultValue] = defaultValues[unit.value] ? parseQuantityAndUnitFromRawValue(defaultValues[unit.value]) : [];\n return {\n ...unit,\n default: defaultValue\n };\n });\n};\n\n/**\n * Get available units with the unit for the currently selected value\n * prepended if it is not available in the list of units.\n *\n * This is useful to ensure that the current value's unit is always\n * accurately displayed in the UI, even if the intention is to hide\n * the availability of that unit.\n *\n * @param rawValue Selected value to parse.\n * @param legacyUnit Legacy unit value, if rawValue needs it appended.\n * @param units List of available units.\n *\n * @return A collection of units containing the unit for the current value.\n */\nexport function getUnitsWithCurrentUnit(rawValue, legacyUnit, units = ALL_CSS_UNITS) {\n const unitsToReturn = Array.isArray(units) ? [...units] : [];\n const [, currentUnit] = getParsedQuantityAndUnit(rawValue, legacyUnit, ALL_CSS_UNITS);\n if (currentUnit && !unitsToReturn.some(unit => unit.value === currentUnit)) {\n if (allUnits[currentUnit]) {\n unitsToReturn.unshift(allUnits[currentUnit]);\n }\n }\n return unitsToReturn;\n}"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __, _x } from '@wordpress/i18n';\nimport { Platform } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\n\nconst isWeb = Platform.OS === 'web';\nconst allUnits = {\n px: {\n value: 'px',\n label: isWeb ? 'px' : __('Pixels (px)'),\n a11yLabel: __('Pixels (px)'),\n step: 1\n },\n '%': {\n value: '%',\n label: isWeb ? '%' : __('Percentage (%)'),\n a11yLabel: __('Percent (%)'),\n step: 0.1\n },\n em: {\n value: 'em',\n label: isWeb ? 'em' : __('Relative to parent font size (em)'),\n a11yLabel: _x('ems', 'Relative to parent font size (em)'),\n step: 0.01\n },\n rem: {\n value: 'rem',\n label: isWeb ? 'rem' : __('Relative to root font size (rem)'),\n a11yLabel: _x('rems', 'Relative to root font size (rem)'),\n step: 0.01\n },\n vw: {\n value: 'vw',\n label: isWeb ? 'vw' : __('Viewport width (vw)'),\n a11yLabel: __('Viewport width (vw)'),\n step: 0.1\n },\n vh: {\n value: 'vh',\n label: isWeb ? 'vh' : __('Viewport height (vh)'),\n a11yLabel: __('Viewport height (vh)'),\n step: 0.1\n },\n vmin: {\n value: 'vmin',\n label: isWeb ? 'vmin' : __('Viewport smallest dimension (vmin)'),\n a11yLabel: __('Viewport smallest dimension (vmin)'),\n step: 0.1\n },\n vmax: {\n value: 'vmax',\n label: isWeb ? 'vmax' : __('Viewport largest dimension (vmax)'),\n a11yLabel: __('Viewport largest dimension (vmax)'),\n step: 0.1\n },\n ch: {\n value: 'ch',\n label: isWeb ? 'ch' : __('Width of the zero (0) character (ch)'),\n a11yLabel: __('Width of the zero (0) character (ch)'),\n step: 0.01\n },\n ex: {\n value: 'ex',\n label: isWeb ? 'ex' : __('x-height of the font (ex)'),\n a11yLabel: __('x-height of the font (ex)'),\n step: 0.01\n },\n cm: {\n value: 'cm',\n label: isWeb ? 'cm' : __('Centimeters (cm)'),\n a11yLabel: __('Centimeters (cm)'),\n step: 0.001\n },\n mm: {\n value: 'mm',\n label: isWeb ? 'mm' : __('Millimeters (mm)'),\n a11yLabel: __('Millimeters (mm)'),\n step: 0.1\n },\n in: {\n value: 'in',\n label: isWeb ? 'in' : __('Inches (in)'),\n a11yLabel: __('Inches (in)'),\n step: 0.001\n },\n pc: {\n value: 'pc',\n label: isWeb ? 'pc' : __('Picas (pc)'),\n a11yLabel: __('Picas (pc)'),\n step: 1\n },\n pt: {\n value: 'pt',\n label: isWeb ? 'pt' : __('Points (pt)'),\n a11yLabel: __('Points (pt)'),\n step: 1\n },\n svw: {\n value: 'svw',\n label: isWeb ? 'svw' : __('Small viewport width (svw)'),\n a11yLabel: __('Small viewport width (svw)'),\n step: 0.1\n },\n svh: {\n value: 'svh',\n label: isWeb ? 'svh' : __('Small viewport height (svh)'),\n a11yLabel: __('Small viewport height (svh)'),\n step: 0.1\n },\n svi: {\n value: 'svi',\n label: isWeb ? 'svi' : __('Viewport smallest size in the inline direction (svi)'),\n a11yLabel: __('Small viewport width or height (svi)'),\n step: 0.1\n },\n svb: {\n value: 'svb',\n label: isWeb ? 'svb' : __('Viewport smallest size in the block direction (svb)'),\n a11yLabel: __('Small viewport width or height (svb)'),\n step: 0.1\n },\n svmin: {\n value: 'svmin',\n label: isWeb ? 'svmin' : __('Small viewport smallest dimension (svmin)'),\n a11yLabel: __('Small viewport smallest dimension (svmin)'),\n step: 0.1\n },\n lvw: {\n value: 'lvw',\n label: isWeb ? 'lvw' : __('Large viewport width (lvw)'),\n a11yLabel: __('Large viewport width (lvw)'),\n step: 0.1\n },\n lvh: {\n value: 'lvh',\n label: isWeb ? 'lvh' : __('Large viewport height (lvh)'),\n a11yLabel: __('Large viewport height (lvh)'),\n step: 0.1\n },\n lvi: {\n value: 'lvi',\n label: isWeb ? 'lvi' : __('Large viewport width or height (lvi)'),\n a11yLabel: __('Large viewport width or height (lvi)'),\n step: 0.1\n },\n lvb: {\n value: 'lvb',\n label: isWeb ? 'lvb' : __('Large viewport width or height (lvb)'),\n a11yLabel: __('Large viewport width or height (lvb)'),\n step: 0.1\n },\n lvmin: {\n value: 'lvmin',\n label: isWeb ? 'lvmin' : __('Large viewport smallest dimension (lvmin)'),\n a11yLabel: __('Large viewport smallest dimension (lvmin)'),\n step: 0.1\n },\n dvw: {\n value: 'dvw',\n label: isWeb ? 'dvw' : __('Dynamic viewport width (dvw)'),\n a11yLabel: __('Dynamic viewport width (dvw)'),\n step: 0.1\n },\n dvh: {\n value: 'dvh',\n label: isWeb ? 'dvh' : __('Dynamic viewport height (dvh)'),\n a11yLabel: __('Dynamic viewport height (dvh)'),\n step: 0.1\n },\n dvi: {\n value: 'dvi',\n label: isWeb ? 'dvi' : __('Dynamic viewport width or height (dvi)'),\n a11yLabel: __('Dynamic viewport width or height (dvi)'),\n step: 0.1\n },\n dvb: {\n value: 'dvb',\n label: isWeb ? 'dvb' : __('Dynamic viewport width or height (dvb)'),\n a11yLabel: __('Dynamic viewport width or height (dvb)'),\n step: 0.1\n },\n dvmin: {\n value: 'dvmin',\n label: isWeb ? 'dvmin' : __('Dynamic viewport smallest dimension (dvmin)'),\n a11yLabel: __('Dynamic viewport smallest dimension (dvmin)'),\n step: 0.1\n },\n dvmax: {\n value: 'dvmax',\n label: isWeb ? 'dvmax' : __('Dynamic viewport largest dimension (dvmax)'),\n a11yLabel: __('Dynamic viewport largest dimension (dvmax)'),\n step: 0.1\n },\n svmax: {\n value: 'svmax',\n label: isWeb ? 'svmax' : __('Small viewport largest dimension (svmax)'),\n a11yLabel: __('Small viewport largest dimension (svmax)'),\n step: 0.1\n },\n lvmax: {\n value: 'lvmax',\n label: isWeb ? 'lvmax' : __('Large viewport largest dimension (lvmax)'),\n a11yLabel: __('Large viewport largest dimension (lvmax)'),\n step: 0.1\n }\n};\n\n/**\n * An array of all available CSS length units.\n */\nexport const ALL_CSS_UNITS = Object.values(allUnits);\n\n/**\n * Units of measurements. `a11yLabel` is used by screenreaders.\n */\nexport const CSS_UNITS = [allUnits.px, allUnits['%'], allUnits.em, allUnits.rem, allUnits.vw, allUnits.vh];\nexport const DEFAULT_UNIT = allUnits.px;\n\n/**\n * Handles legacy value + unit handling.\n * This component use to manage both incoming value and units separately.\n *\n * Moving forward, ideally the value should be a string that contains both\n * the value and unit, example: '10px'\n *\n * @param rawValue The raw value as a string (may or may not contain the unit)\n * @param fallbackUnit The unit used as a fallback, if not unit is detected in the `value`\n * @param allowedUnits Units to derive from.\n * @return The extracted quantity and unit. The quantity can be `undefined` in case the raw value\n * could not be parsed to a number correctly. The unit can be `undefined` in case the unit parse\n * from the raw value could not be matched against the list of allowed units.\n */\nexport function getParsedQuantityAndUnit(rawValue, fallbackUnit, allowedUnits) {\n const initialValue = fallbackUnit ? `${rawValue ?? ''}${fallbackUnit}` : rawValue;\n return parseQuantityAndUnitFromRawValue(initialValue, allowedUnits);\n}\n\n/**\n * Checks if units are defined.\n *\n * @param units List of units.\n * @return Whether the list actually contains any units.\n */\nexport function hasUnits(units) {\n // Although the `isArray` check shouldn't be necessary (given the signature of\n // this typed function), it's better to stay on the side of caution, since\n // this function may be called from un-typed environments.\n return Array.isArray(units) && !!units.length;\n}\n\n/**\n * Parses a quantity and unit from a raw string value, given a list of allowed\n * units and otherwise falling back to the default unit.\n *\n * @param rawValue The raw value as a string (may or may not contain the unit)\n * @param allowedUnits Units to derive from.\n * @return The extracted quantity and unit. The quantity can be `undefined` in case the raw value\n * could not be parsed to a number correctly. The unit can be `undefined` in case the unit parsed\n * from the raw value could not be matched against the list of allowed units.\n */\nexport function parseQuantityAndUnitFromRawValue(rawValue, allowedUnits = ALL_CSS_UNITS) {\n let trimmedValue;\n let quantityToReturn;\n if (typeof rawValue !== 'undefined' || rawValue === null) {\n trimmedValue = `${rawValue}`.trim();\n const parsedQuantity = parseFloat(trimmedValue);\n quantityToReturn = !isFinite(parsedQuantity) ? undefined : parsedQuantity;\n }\n const unitMatch = trimmedValue?.match(/[\\d.\\-\\+]*\\s*(.*)/);\n const matchedUnit = unitMatch?.[1]?.toLowerCase();\n let unitToReturn;\n if (hasUnits(allowedUnits)) {\n const match = allowedUnits.find(item => item.value === matchedUnit);\n unitToReturn = match?.value;\n } else {\n unitToReturn = DEFAULT_UNIT.value;\n }\n return [quantityToReturn, unitToReturn];\n}\n\n/**\n * Parses quantity and unit from a raw value. Validates parsed value, using fallback\n * value if invalid.\n *\n * @param rawValue The next value.\n * @param allowedUnits Units to derive from.\n * @param fallbackQuantity The fallback quantity, used in case it's not possible to parse a valid quantity from the raw value.\n * @param fallbackUnit The fallback unit, used in case it's not possible to parse a valid unit from the raw value.\n * @return The extracted quantity and unit. The quantity can be `undefined` in case the raw value\n * could not be parsed to a number correctly, and the `fallbackQuantity` was also `undefined`. The\n * unit can be `undefined` only if the unit parsed from the raw value could not be matched against\n * the list of allowed units, the `fallbackQuantity` is also `undefined` and the list of\n * `allowedUnits` is passed empty.\n */\nexport function getValidParsedQuantityAndUnit(rawValue, allowedUnits, fallbackQuantity, fallbackUnit) {\n const [parsedQuantity, parsedUnit] = parseQuantityAndUnitFromRawValue(rawValue, allowedUnits);\n\n // The parsed value from `parseQuantityAndUnitFromRawValue` should now be\n // either a real number or undefined. If undefined, use the fallback value.\n const quantityToReturn = parsedQuantity ?? fallbackQuantity;\n\n // If no unit is parsed from the raw value, or if the fallback unit is not\n // defined, use the first value from the list of allowed units as fallback.\n let unitToReturn = parsedUnit || fallbackUnit;\n if (!unitToReturn && hasUnits(allowedUnits)) {\n unitToReturn = allowedUnits[0].value;\n }\n return [quantityToReturn, unitToReturn];\n}\n\n/**\n * Takes a unit value and finds the matching accessibility label for the\n * unit abbreviation.\n *\n * @param unit Unit value (example: `px`)\n * @return a11y label for the unit abbreviation\n */\nexport function getAccessibleLabelForUnit(unit) {\n const match = ALL_CSS_UNITS.find(item => item.value === unit);\n return match?.a11yLabel ? match?.a11yLabel : match?.value;\n}\n\n/**\n * Filters available units based on values defined a list of allowed unit values.\n *\n * @param allowedUnitValues Collection of allowed unit value strings.\n * @param availableUnits Collection of available unit objects.\n * @return Filtered units.\n */\nexport function filterUnitsWithSettings(allowedUnitValues = [], availableUnits) {\n // Although the `isArray` check shouldn't be necessary (given the signature of\n // this typed function), it's better to stay on the side of caution, since\n // this function may be called from un-typed environments.\n return Array.isArray(availableUnits) ? availableUnits.filter(unit => allowedUnitValues.includes(unit.value)) : [];\n}\n\n/**\n * Custom hook to retrieve and consolidate units setting from add_theme_support().\n * TODO: ideally this hook shouldn't be needed\n * https://github.com/WordPress/gutenberg/pull/31822#discussion_r633280823\n *\n * @param args An object containing units, settingPath & defaultUnits.\n * @param args.units Collection of all potentially available units.\n * @param args.availableUnits Collection of unit value strings for filtering available units.\n * @param args.defaultValues Collection of default values for defined units. Example: `{ px: 350, em: 15 }`.\n *\n * @return Filtered list of units, with their default values updated following the `defaultValues`\n * argument's property.\n */\nexport const useCustomUnits = ({\n units = ALL_CSS_UNITS,\n availableUnits = [],\n defaultValues\n}) => {\n const customUnitsToReturn = filterUnitsWithSettings(availableUnits, units);\n if (!defaultValues) {\n return customUnitsToReturn;\n }\n return customUnitsToReturn.map(unit => {\n const [defaultValue] = defaultValues[unit.value] ? parseQuantityAndUnitFromRawValue(defaultValues[unit.value]) : [];\n return {\n ...unit,\n default: defaultValue\n };\n });\n};\n\n/**\n * Get available units with the unit for the currently selected value\n * prepended if it is not available in the list of units.\n *\n * This is useful to ensure that the current value's unit is always\n * accurately displayed in the UI, even if the intention is to hide\n * the availability of that unit.\n *\n * @param rawValue Selected value to parse.\n * @param legacyUnit Legacy unit value, if rawValue needs it appended.\n * @param units List of available units.\n *\n * @return A collection of units containing the unit for the current value.\n */\nexport function getUnitsWithCurrentUnit(rawValue, legacyUnit, units = ALL_CSS_UNITS) {\n const unitsToReturn = Array.isArray(units) ? [...units] : [];\n const [, currentUnit] = getParsedQuantityAndUnit(rawValue, legacyUnit, ALL_CSS_UNITS);\n if (currentUnit && !unitsToReturn.some(unit => unit.value === currentUnit)) {\n if (allUnits[currentUnit]) {\n unitsToReturn.unshift(allUnits[currentUnit]);\n }\n }\n return unitsToReturn;\n}"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAuB;AACvB,qBAAyB;AAMzB,IAAM,QAAQ,wBAAS,OAAO;AAC9B,IAAM,WAAW;AAAA,EACf,IAAI;AAAA,IACF,OAAO;AAAA,IACP,OAAO,QAAQ,WAAO,gBAAG,aAAa;AAAA,IACtC,eAAW,gBAAG,aAAa;AAAA,IAC3B,MAAM;AAAA,EACR;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,IACP,OAAO,QAAQ,UAAM,gBAAG,gBAAgB;AAAA,IACxC,eAAW,gBAAG,aAAa;AAAA,IAC3B,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,IACP,OAAO,QAAQ,WAAO,gBAAG,mCAAmC;AAAA,IAC5D,eAAW,gBAAG,OAAO,mCAAmC;AAAA,IACxD,MAAM;AAAA,EACR;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,IACP,OAAO,QAAQ,YAAQ,gBAAG,kCAAkC;AAAA,IAC5D,eAAW,gBAAG,QAAQ,kCAAkC;AAAA,IACxD,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,IACP,OAAO,QAAQ,WAAO,gBAAG,qBAAqB;AAAA,IAC9C,eAAW,gBAAG,qBAAqB;AAAA,IACnC,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,IACP,OAAO,QAAQ,WAAO,gBAAG,sBAAsB;AAAA,IAC/C,eAAW,gBAAG,sBAAsB;AAAA,IACpC,MAAM;AAAA,EACR;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,OAAO,QAAQ,aAAS,gBAAG,oCAAoC;AAAA,IAC/D,eAAW,gBAAG,oCAAoC;AAAA,IAClD,MAAM;AAAA,EACR;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,OAAO,QAAQ,aAAS,gBAAG,mCAAmC;AAAA,IAC9D,eAAW,gBAAG,mCAAmC;AAAA,IACjD,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,IACP,OAAO,QAAQ,WAAO,gBAAG,sCAAsC;AAAA,IAC/D,eAAW,gBAAG,sCAAsC;AAAA,IACpD,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,IACP,OAAO,QAAQ,WAAO,gBAAG,2BAA2B;AAAA,IACpD,eAAW,gBAAG,2BAA2B;AAAA,IACzC,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,IACP,OAAO,QAAQ,WAAO,gBAAG,kBAAkB;AAAA,IAC3C,eAAW,gBAAG,kBAAkB;AAAA,IAChC,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,IACP,OAAO,QAAQ,WAAO,gBAAG,kBAAkB;AAAA,IAC3C,eAAW,gBAAG,kBAAkB;AAAA,IAChC,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,IACP,OAAO,QAAQ,WAAO,gBAAG,aAAa;AAAA,IACtC,eAAW,gBAAG,aAAa;AAAA,IAC3B,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,IACP,OAAO,QAAQ,WAAO,gBAAG,YAAY;AAAA,IACrC,eAAW,gBAAG,YAAY;AAAA,IAC1B,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,IACP,OAAO,QAAQ,WAAO,gBAAG,aAAa;AAAA,IACtC,eAAW,gBAAG,aAAa;AAAA,IAC3B,MAAM;AAAA,EACR;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,IACP,OAAO,QAAQ,YAAQ,gBAAG,4BAA4B;AAAA,IACtD,eAAW,gBAAG,4BAA4B;AAAA,IAC1C,MAAM;AAAA,EACR;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,IACP,OAAO,QAAQ,YAAQ,gBAAG,6BAA6B;AAAA,IACvD,eAAW,gBAAG,6BAA6B;AAAA,IAC3C,MAAM;AAAA,EACR;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,IACP,OAAO,QAAQ,YAAQ,gBAAG,sDAAsD;AAAA,IAChF,eAAW,gBAAG,sCAAsC;AAAA,IACpD,MAAM;AAAA,EACR;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,IACP,OAAO,QAAQ,YAAQ,gBAAG,qDAAqD;AAAA,IAC/E,eAAW,gBAAG,sCAAsC;AAAA,IACpD,MAAM;AAAA,EACR;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,OAAO,QAAQ,cAAU,gBAAG,2CAA2C;AAAA,IACvE,eAAW,gBAAG,2CAA2C;AAAA,IACzD,MAAM;AAAA,EACR;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,IACP,OAAO,QAAQ,YAAQ,gBAAG,4BAA4B;AAAA,IACtD,eAAW,gBAAG,4BAA4B;AAAA,IAC1C,MAAM;AAAA,EACR;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,IACP,OAAO,QAAQ,YAAQ,gBAAG,6BAA6B;AAAA,IACvD,eAAW,gBAAG,6BAA6B;AAAA,IAC3C,MAAM;AAAA,EACR;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,IACP,OAAO,QAAQ,YAAQ,gBAAG,sCAAsC;AAAA,IAChE,eAAW,gBAAG,sCAAsC;AAAA,IACpD,MAAM;AAAA,EACR;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,IACP,OAAO,QAAQ,YAAQ,gBAAG,sCAAsC;AAAA,IAChE,eAAW,gBAAG,sCAAsC;AAAA,IACpD,MAAM;AAAA,EACR;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,OAAO,QAAQ,cAAU,gBAAG,2CAA2C;AAAA,IACvE,eAAW,gBAAG,2CAA2C;AAAA,IACzD,MAAM;AAAA,EACR;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,IACP,OAAO,QAAQ,YAAQ,gBAAG,8BAA8B;AAAA,IACxD,eAAW,gBAAG,8BAA8B;AAAA,IAC5C,MAAM;AAAA,EACR;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,IACP,OAAO,QAAQ,YAAQ,gBAAG,+BAA+B;AAAA,IACzD,eAAW,gBAAG,+BAA+B;AAAA,IAC7C,MAAM;AAAA,EACR;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,IACP,OAAO,QAAQ,YAAQ,gBAAG,wCAAwC;AAAA,IAClE,eAAW,gBAAG,wCAAwC;AAAA,IACtD,MAAM;AAAA,EACR;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,IACP,OAAO,QAAQ,YAAQ,gBAAG,wCAAwC;AAAA,IAClE,eAAW,gBAAG,wCAAwC;AAAA,IACtD,MAAM;AAAA,EACR;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,OAAO,QAAQ,cAAU,gBAAG,6CAA6C;AAAA,IACzE,eAAW,gBAAG,6CAA6C;AAAA,IAC3D,MAAM;AAAA,EACR;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,OAAO,QAAQ,cAAU,gBAAG,4CAA4C;AAAA,IACxE,eAAW,gBAAG,4CAA4C;AAAA,IAC1D,MAAM;AAAA,EACR;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,OAAO,QAAQ,cAAU,gBAAG,0CAA0C;AAAA,IACtE,eAAW,gBAAG,0CAA0C;AAAA,IACxD,MAAM;AAAA,EACR;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,OAAO,QAAQ,cAAU,gBAAG,0CAA0C;AAAA,IACtE,eAAW,gBAAG,0CAA0C;AAAA,IACxD,MAAM;AAAA,EACR;AACF;AAKO,IAAM,gBAAgB,OAAO,OAAO,QAAQ;AAK5C,IAAM,YAAY,CAAC,SAAS,IAAI,SAAS,GAAG,GAAG,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,EAAE;AAClG,IAAM,eAAe,SAAS;AAgB9B,SAAS,yBAAyB,UAAU,cAAc,cAAc;AAC7E,QAAM,eAAe,eAAe,GAAG,YAAY,EAAE,GAAG,YAAY,KAAK;AACzE,SAAO,iCAAiC,cAAc,YAAY;AACpE;AAQO,SAAS,SAAS,OAAO;AAI9B,SAAO,MAAM,QAAQ,KAAK,KAAK,CAAC,CAAC,MAAM;AACzC;AAYO,SAAS,iCAAiC,UAAU,eAAe,eAAe;AACvF,MAAI;AACJ,MAAI;AACJ,MAAI,OAAO,aAAa,eAAe,aAAa,MAAM;AACxD,mBAAe,GAAG,QAAQ,GAAG,KAAK;AAClC,UAAM,iBAAiB,WAAW,YAAY;AAC9C,uBAAmB,CAAC,SAAS,cAAc,IAAI,SAAY;AAAA,EAC7D;AACA,QAAM,YAAY,cAAc,MAAM,mBAAmB;AACzD,QAAM,cAAc,YAAY,CAAC,GAAG,YAAY;AAChD,MAAI;AACJ,MAAI,SAAS,YAAY,GAAG;AAC1B,UAAM,QAAQ,aAAa,KAAK,UAAQ,KAAK,UAAU,WAAW;AAClE,mBAAe,OAAO;AAAA,EACxB,OAAO;AACL,mBAAe,aAAa;AAAA,EAC9B;AACA,SAAO,CAAC,kBAAkB,YAAY;AACxC;AAgBO,SAAS,8BAA8B,UAAU,cAAc,kBAAkB,cAAc;AACpG,QAAM,CAAC,gBAAgB,UAAU,IAAI,iCAAiC,UAAU,YAAY;AAI5F,QAAM,mBAAmB,kBAAkB;AAI3C,MAAI,eAAe,cAAc;AACjC,MAAI,CAAC,gBAAgB,SAAS,YAAY,GAAG;AAC3C,mBAAe,aAAa,CAAC,EAAE;AAAA,EACjC;AACA,SAAO,CAAC,kBAAkB,YAAY;AACxC;AASO,SAAS,0BAA0B,MAAM;AAC9C,QAAM,QAAQ,cAAc,KAAK,UAAQ,KAAK,UAAU,IAAI;AAC5D,SAAO,OAAO,YAAY,OAAO,YAAY,OAAO;AACtD;AASO,SAAS,wBAAwB,oBAAoB,CAAC,GAAG,gBAAgB;AAI9E,SAAO,MAAM,QAAQ,cAAc,IAAI,eAAe,OAAO,UAAQ,kBAAkB,SAAS,KAAK,KAAK,CAAC,IAAI,CAAC;AAClH;AAeO,IAAM,iBAAiB,CAAC;AAAA,EAC7B,QAAQ;AAAA,EACR,iBAAiB,CAAC;AAAA,EAClB;AACF,MAAM;AACJ,QAAM,sBAAsB,wBAAwB,gBAAgB,KAAK;AACzE,MAAI,CAAC,eAAe;AAClB,WAAO;AAAA,EACT;AACA,SAAO,oBAAoB,IAAI,UAAQ;AACrC,UAAM,CAAC,YAAY,IAAI,cAAc,KAAK,KAAK,IAAI,iCAAiC,cAAc,KAAK,KAAK,CAAC,IAAI,CAAC;AAClH,WAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,IACX;AAAA,EACF,CAAC;AACH;AAgBO,SAAS,wBAAwB,UAAU,YAAY,QAAQ,eAAe;AACnF,QAAM,gBAAgB,MAAM,QAAQ,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC;AAC3D,QAAM,CAAC,EAAE,WAAW,IAAI,yBAAyB,UAAU,YAAY,aAAa;AACpF,MAAI,eAAe,CAAC,cAAc,KAAK,UAAQ,KAAK,UAAU,WAAW,GAAG;AAC1E,QAAI,SAAS,WAAW,GAAG;AACzB,oBAAc,QAAQ,SAAS,WAAW,CAAC;AAAA,IAC7C;AAAA,EACF;AACA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -37,15 +37,14 @@ var NULL_ELEMENT_OFFSET_RECT = {
37
37
  height: 0
38
38
  };
39
39
  function getElementOffsetRect(element) {
40
- var _offsetParent$getBoun, _offsetParent$scrollL, _offsetParent$scrollT;
41
40
  const rect = element.getBoundingClientRect();
42
41
  if (rect.width === 0 || rect.height === 0) {
43
42
  return;
44
43
  }
45
44
  const offsetParent = element.offsetParent;
46
- const offsetParentRect = (_offsetParent$getBoun = offsetParent?.getBoundingClientRect()) !== null && _offsetParent$getBoun !== void 0 ? _offsetParent$getBoun : NULL_ELEMENT_OFFSET_RECT;
47
- const offsetParentScrollX = (_offsetParent$scrollL = offsetParent?.scrollLeft) !== null && _offsetParent$scrollL !== void 0 ? _offsetParent$scrollL : 0;
48
- const offsetParentScrollY = (_offsetParent$scrollT = offsetParent?.scrollTop) !== null && _offsetParent$scrollT !== void 0 ? _offsetParent$scrollT : 0;
45
+ const offsetParentRect = offsetParent?.getBoundingClientRect() ?? NULL_ELEMENT_OFFSET_RECT;
46
+ const offsetParentScrollX = offsetParent?.scrollLeft ?? 0;
47
+ const offsetParentScrollY = offsetParent?.scrollTop ?? 0;
49
48
  const computedWidth = parseFloat(getComputedStyle(element).width);
50
49
  const computedHeight = parseFloat(getComputedStyle(element).height);
51
50
  const scaleX = computedWidth / rect.width;